Performance problem mixing 4 RTP streams

Fritz Emboli fritz.emboli at gmail.com
Fri Jan 12 16:19:35 UTC 2018


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 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20180112/ae2012c3/attachment-0001.html>


More information about the gstreamer-devel mailing list