Performance problem mixing 4 RTP streams

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Performance problem mixing 4 RTP streams

Fritz Emboli
Hi,

can anybody tell me, why the following pipeline takes up to 70% CPU time on an embedded device?

gst-launch-1.0 -v \
udpsrc port=10204 caps="application/x-rtp,clock-rate=8000,channels=1" ! queue ! rtppcmadepay ! alawdec ! \
liveadder name=mix latency=20000 ! audioconvert ! alsasink device="hw:0,0" sync=false \
udpsrc port=10206 caps="application/x-rtp,clock-rate=8000,channels=1" ! queue ! rtppcmadepay ! alawdec ! mix. \
udpsrc port=10208 caps="application/x-rtp,clock-rate=8000,channels=1" ! queue ! rtppcmadepay ! alawdec ! mix. \
udpsrc port=10210 caps="application/x-rtp,clock-rate=8000,channels=1" ! queue ! rtppcmadepay ! alawdec ! mix.

Thanks


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Performance problem mixing 4 RTP streams

Tim Müller
On Fri, 2018-01-12 at 14:30 +0100, Fritz Emboli wrote:

Hi Fritz,

> can anybody tell me, why the following pipeline takes up to 70% CPU
> time on an embedded device?
>
> gst-launch-1.0 -v \
> udpsrc port=10204 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! \
> liveadder name=mix latency=20000 ! audioconvert ! alsasink
> device="hw:0,0" sync=false \
> udpsrc port=10206 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix. \
> udpsrc port=10208 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix. \
> udpsrc port=10210 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix.

This doesn't look like something that should take huge amounts of CPU
at first glance.

What kind of embedded device is this with?

What GStreamer version are you using?

What do perf or perf top say where the cpu time is spent?

You might also want an rtpjitterbuffer latency=50 or somesuch after
each udpsrc.

Does your audiomixer use liborc and is it active on your cpu?

Cheers
 -Tim

--
Tim Müller, Centricular Ltd - http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Performance problem mixing 4 RTP streams

Fritz Emboli
Hi Tim!

> gst-launch-1.0 -v \
> udpsrc port=10204 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! \
> liveadder name=mix latency=20000 ! audioconvert ! alsasink
> device="hw:0,0" sync=false \
> udpsrc port=10206 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix. \
> udpsrc port=10208 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix. \
> udpsrc port=10210 caps="application/x-rtp,clock-rate=8000,channels=1"
> ! queue ! rtppcmadepay ! alawdec ! mix.

This doesn't look like something that should take huge amounts of CPU
at first glance.

Yes, i thought so.


What kind of embedded device is this with?

It is an i.MX287 (454MHz Arm926EJ-S core with 16KB/32KB Cache)


What GStreamer version are you using?

1.12.0
 

What do perf or perf top say where the cpu time is spent?

Had to install perf first.
perf top is not usable.
The top 20 lines of "perf report":

# Samples: 268K of event 'cpu-clock'
# Event count (approx.): 67059250000
#
# Overhead         Command                   Shared Object                                           Symbol
# ........  ..............  ..............................  ...............................................
#
     9.23%  gst-launch-1.0  [kernel.kallsyms]               [k] _raw_spin_unlock_irq                      
     4.28%  gst-launch-1.0  [kernel.kallsyms]               [k] _raw_spin_unlock_irqrestore               
     3.05%  gst-launch-1.0  [kernel.kallsyms]               [k] lock_acquire                              
     1.47%  gst-launch-1.0  [kernel.kallsyms]               [k] _raw_read_unlock_irq                      
     1.44%  gst-launch-1.0  [kernel.kallsyms]               [k] ktime_get_ts                              
     1.38%  gst-launch-1.0  libpthread-2.18.so              [.] pthread_getspecific                       
     1.21%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_slice_alloc                             
     1.16%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] g_type_check_instance_is_fundamentally_a  
     1.10%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_slice_free1                             
     1.08%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_private_get                             
     0.95%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_mutex_lock                              
     0.87%  gst-launch-1.0  [kernel.kallsyms]               [k] __do_softirq                              
     0.78%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_datalist_get_flags                      
     0.77%  gst-launch-1.0  [kernel.kallsyms]               [k] lock_release                              
     0.70%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_mutex_unlock                            
     0.68%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] g_type_check_instance_is_a                
     0.67%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] 0x0009461c                                
     0.64%  gst-launch-1.0  [kernel.kallsyms]               [k] vector_swi                                
     0.64%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_mini_object_unlock                    
     0.64%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] g_type_is_a                               
     0.60%  gst-launch-1.0  libc-2.18.so                    [.] syscall                                   
     0.59%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] 0x00093828                                
     0.58%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_pad_push                              
     0.58%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_mini_object_lock                      
     0.56%  gst-launch-1.0  libgstbadbase-1.0.so.0.1200.0   [.] gst_aggregator_iterate_sinkpads           
     0.52%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_buffer_get_sizes_range                
     0.52%  gst-launch-1.0  [kernel.kallsyms]               [k] _raw_read_unlock_irqrestore               
     0.50%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_atomic_pointer_get                      
     0.50%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_buffer_map_range                      
     0.50%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] g_object_ref                              
     0.50%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_mini_object_unref                     
     0.49%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_slice_free_chain_with_offset            
     0.48%  gst-launch-1.0  libpthread-2.18.so              [.] pthread_mutex_lock                        
     0.48%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] g_object_unref                            
     0.45%  gst-launch-1.0  [kernel.kallsyms]               [k] do_sys_poll                               
     0.44%  gst-launch-1.0  [kernel.kallsyms]               [k] __copy_from_user                          
     0.42%  gst-launch-1.0  libgstaudio-1.0.so.0.1200.0     [.] gst_audio_buffer_clip                     
     0.42%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_iterator_next                         
     0.42%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_object_unref                          
     0.39%  gst-launch-1.0  libgstreamer-1.0.so.0.1200.0    [.] gst_memory_map                            
     0.39%  gst-launch-1.0  libglib-2.0.so.0.5200.1         [.] g_atomic_int_get                          
     0.38%  gst-launch-1.0  libgobject-2.0.so.0.5200.1      [.] qsort@plt 
 

You might also want an rtpjitterbuffer latency=50 or somesuch after
each udpsrc.

Does your audiomixer use liborc and is it active on your cpu?

All plugins are compiled with "--enable-orc".

Greetings

Fritz

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Performance problem mixing 4 RTP streams

Baby Octopus
In reply to this post by Fritz Emboli
Is it an issue with single threaded mixing?



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel