[gst-devel] Memory usage

Tiago Katcipis katcipis at inf.ufsc.br
Wed Aug 19 16:39:39 CEST 2009


I did some research and found out that the problem was the default thread
stack size defined on linux, on a CentOS using kernel 2.6.28 the stack size
for each thread by default is 10mb (on ubuntu too, but i don't remember now
the exact kernel), glib uses this default size to create the threads that
will be used on g_thread_pool (gstreamer uses the g_thread_pool_new).

One way to fix this is using ulimit -s [new_stack_size], i tested and even
with 64k as stack size it seems to work ok, and the usage of memory drops
significantly :-).

isn't there a minimum thread stack size required by gstreamer to run safely?
Or there is no danger on setting the thread size as i wish?

and i was still interested on some way of running multiple pipelines on the
same thread, if it is possible.

best regards,
Katcipis

On Wed, Aug 19, 2009 at 10:43 AM, Tiago Katcipis <katcipis at inf.ufsc.br>wrote:

> sorry, i forgot the source code :-).
>
>
> On Wed, Aug 19, 2009 at 10:41 AM, Tiago Katcipis <katcipis at inf.ufsc.br>wrote:
>
>> Im working on an streaming server and i need to have several pipes running
>> at the same time, i started to do some tests to see how much memory and how
>> much threads would something like that use on gstreamer. So i wrote a very
>> simple application that starts a lot of pipelines, where the pipelines will
>> be simply an faksrc ! fakesink. I started the tests and i realized that even
>> for a simple task as running an fakesrc ! fakesink im using a lot of memory.
>>
>> with 1 pipe:
>>
>> Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
>> Cpu(s): 51.5%us,  1.0%sy,  0.0%ni, 47.5%id,  0.0%wa,  0.0%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   963800k used,  1063432k free,    75976k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430676k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6402 katcipis  20   0 26204 4060 2548 R 99.9  0.2   0:48.04
>> multiple_pipes
>>
>>  6400 katcipis  20   0 26204 4060 2548 S  0.0  0.2   0:00.04
>> multiple_pipes
>>
>> with 2 pipes:
>>
>> Tasks:   3 total,   2 running,   1 sleeping,   0 stopped,   0 zombie
>> Cpu(s): 96.8%us,  1.8%sy,  0.0%ni,  1.3%id,  0.0%wa,  0.0%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   965044k used,  1062188k free,    76804k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430752k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6541 katcipis  20   0 42600 4092 2544 R 95.3  0.2   0:16.22
>> multiple_pipes
>>
>>  6542 katcipis  20   0 42600 4092 2544 R 95.3  0.2   0:16.36
>> multiple_pipes
>>
>>  6539 katcipis  20   0 42600 4092 2544 S  0.0  0.2   0:00.04
>> multiple_pipes
>>
>> with 3 pipes:
>>
>> Tasks:   4 total,   2 running,   2 sleeping,   0 stopped,   0 zombie
>> Cpu(s): 90.6%us,  3.1%sy,  0.0%ni,  6.2%id,  0.0%wa,  0.0%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   964608k used,  1062624k free,    77528k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430752k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6563 katcipis  20   0 51820 4116 2544 S 62.5  0.2   0:17.44
>> multiple_pipes
>>
>>  6566 katcipis  20   0 51820 4116 2544 R 62.5  0.2   0:16.36
>> multiple_pipes
>>
>>  6565 katcipis  20   0 51820 4116 2544 R 50.0  0.2   0:13.94
>> multiple_pipes
>>
>>  6561 katcipis  20   0 51820 4116 2544 S  0.0  0.2   0:00.04
>> multiple_pipes
>>
>>
>> i have another test where i run an gnomevfssrc and a decodebin and the
>> numbers are even worse:
>>
>> with 1 pipe:
>>
>> Tasks:   2 total,   0 running,   2 sleeping,   0 stopped,   0 zombie
>> Cpu(s):  8.1%us,  2.7%sy,  0.0%ni, 89.2%id,  0.0%wa,  0.0%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   972104k used,  1055128k free,    78080k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430760k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6603 katcipis  20   0 43724  12m 5212 S  0.0  0.6   0:00.10
>> multiple_pipes
>>
>>  6605 katcipis  20   0 43724  12m 5212 S  0.0  0.6   0:00.12
>> multiple_pipes
>>
>> with 2 pipes:
>>
>> Tasks:   3 total,   0 running,   3 sleeping,   0 stopped,   0 zombie
>> Cpu(s): 15.7%us,  4.3%sy,  0.0%ni, 79.8%id,  0.0%wa,  0.2%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   972604k used,  1054628k free,    78548k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430760k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6622 katcipis  20   0 53348  13m 5208 S  0.0  0.7   0:00.08
>> multiple_pipes
>>
>>  6624 katcipis  20   0 53348  13m 5208 S  0.0  0.7   0:00.10
>> multiple_pipes
>>
>>  6625 katcipis  20   0 53348  13m 5208 S  0.0  0.7   0:00.04
>> multiple_pipes
>>
>> with 3 pipes:
>>
>> Tasks:   4 total,   0 running,   4 sleeping,   0 stopped,   0 zombie
>> Cpu(s):  6.8%us,  4.5%sy,  0.0%ni, 88.6%id,  0.0%wa,  0.0%hi,  0.0%si,
>> 0.0%st
>> Mem:   2027232k total,   974368k used,  1052864k free,    79328k buffers
>> Swap:   995988k total,        0k used,   995988k free,   430760k cached
>>
>>   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+
>> COMMAND
>>
>>  6960 katcipis  20   0 62136  13m 5208 S  9.6  0.7   0:00.04
>> multiple_pipes
>>
>>  6957 katcipis  20   0 62136  13m 5208 S  0.0  0.7   0:00.10
>> multiple_pipes
>>
>>  6959 katcipis  20   0 62136  13m 5208 S  0.0  0.7   0:00.08
>> multiple_pipes
>>
>>  6962 katcipis  20   0 62136  13m 5208 S  0.0  0.7   0:00.02
>> multiple_pipes
>>
>>
>> i also realized that for every stream there is a thread, is there some way
>> to use one thread for multiple pipes (or multiple streams)? is something
>> that i did terribly wrong or it is normal this usage of memory? if it is
>> normal, can i configure gstreamer to use less memory? considering that
>> gstreamer works even in embedded systems i suppose im doing something very
>> wrong on there is some way to use less resources.
>>
>> im attaching the source code of my tests, the simple one using fakesrc and
>> the complete one using gnomevfs and decodebin.
>>
>> best regards,
>> Katcipis
>>
>>
>>
>
>
> --
> "it might be a profitable thing to learn Java, but it has no intellectual
> value whatsoever" Alexander Stepanov
>



-- 
"it might be a profitable thing to learn Java, but it has no intellectual
value whatsoever" Alexander Stepanov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090819/519f3917/attachment.htm>


More information about the gstreamer-devel mailing list