High cpu utilization with raw-video(UYVY) network streaming pipeline

Amit Pandya amit4gst at gmail.com
Wed Dec 3 04:48:34 PST 2014


Hi all,

I am trying to stream raw-video(UYVY) to network from Nvidia Jetson
platform.

=> While using only nv hw accelerated plugins, following gst-pipeline a) is
taking very low cpu load with fakesink. 

a) gst-launch-1.0 filesrc location=stream264_1280x960_25fps.mkv !
matroskademux ! queue name=txq1 ! h264parse ! omxh264dec ! nvvidconv !
'video/x-raw, format=(string)UYVY' ! fakesink silent=1 sync=1 -e

(top: ~15-20%) 
oprofile:
CPU: CPU with timer interrupt, speed 2.3205e+06 MHz (estimated)
Profiling through timer interrupt
samples  %        app name                 symbol name
43217    95.7102  no-vmlinux               /no-vmlinux
267       0.5913  libgstreamer-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstreamer-1.0.so.0.204.0
166       0.3676  libglib-2.0.so.0.4002.0 
/lib/arm-linux-gnueabihf/libglib-2.0.so.0.4002.0
94        0.2082  libgobject-2.0.so.0.4002.0
/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0.4002.0
74        0.1639  libc-2.19.so             __memcpy_neon
66        0.1462  libgstbase-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstbase-1.0.so.0.204.0

=> When introduce packetizer element "rtpvrawpay" with pipeline b) with
fakesink, cpu load increase drastically.

b) gst-launch-1.0 filesrc location=stream264_1280x960_25fps.mkv !
matroskademux ! queue name=txq1 ! h264parse ! omxh264dec ! nvvidconv
name=txnv ! 'video/x-raw, format=(string)UYVY' ! rtpvrawpay mtu=1472 !
fakesink silent=1 sync=1 -e

 (top: ~90%)  
oprofile:
CPU: CPU with timer interrupt, speed 2.3205e+06 MHz (estimated)
Profiling through timer interrupt
samples  %        app name                 symbol name
19391    39.8385  no-vmlinux               /no-vmlinux
*11885    24.4176  libgstreamer-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstreamer-1.0.so.0.204.0*
3838      7.8851  libglib-2.0.so.0.4002.0 
/lib/arm-linux-gnueabihf/libglib-2.0.so.0.4002.0
2882      5.9210  libgstbase-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstbase-1.0.so.0.204.0
1710      3.5132  libc-2.19.so             __memcpy_neon
1504      3.0899  libgstrtp-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstrtp-1.0.so.0.204.0
1438      2.9543  libgobject-2.0.so.0.4002.0
/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0.4002.0

It is observed that gstreamer core library "libgstreamer-1.0.so.0.204.0" is
hitting big spike of 20-25% load increase.

Tried to analyze the gst-core library "libgstreamer-1.0.so.0.204.0" symbols
& following are the details for pipeline b) 

oprofile: 
CPU: CPU with timer interrupt, speed 2.3205e+06 MHz (estimated)
Profiling through timer interrupt
samples  %        app name                 symbol name
17278    31.8494  no-vmlinux               /no-vmlinux
5274      9.7218  libc-2.19.so            
/lib/arm-linux-gnueabihf/libc-2.19.so
4416      8.1402  libglib-2.0.so.0.4002.0 
/lib/arm-linux-gnueabihf/libglib-2.0.so.0.4002.0
3088      5.6923  libgstbase-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstbase-1.0.so.0.204.0
2030      3.7420  libgobject-2.0.so.0.4002.0
/usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0.4002.0
2001      3.6885  libgstrtp-1.0.so.0.204.0
/usr/lib/arm-linux-gnueabihf/libgstrtp-1.0.so.0.204.0
1694      3.1226  libgstreamer-1.0.so.0.204.0 gst_mini_object_unref
1687      3.1097  libpthread-2.19.so       pthread_mutex_lock
1663      3.0655  libgstreamer-1.0.so.0.204.0 gst_mini_object_unlock
1546      2.8498  libgstreamer-1.0.so.0.204.0 gst_mini_object_lock
1291      2.3798  libpthread-2.19.so       __pthread_mutex_unlock_usercnt
979       1.8046  libgstrtp.so            
/usr/lib/arm-linux-gnueabihf/gstreamer-1.0/libgstrtp.so
712       1.3125  libgstreamer-1.0.so.0.204.0 gst_mini_object_is_writable
674       1.2424  libgstreamer-1.0.so.0.204.0 gst_mini_object_ref
578       1.0655  libgstreamer-1.0.so.0.204.0 gst_pad_push_data
456       0.8406  libgstreamer-1.0.so.0.204.0 .udivsi3_skip_div0_test
439       0.8092  libgstreamer-1.0.so.0.204.0 gst_buffer_map_range
418       0.7705  libgstreamer-1.0.so.0.204.0 gst_buffer_get_sizes_range
324       0.5972  libpthread-2.19.so       pthread_getspecific
309       0.5696  libgstreamer-1.0.so.0.204.0 gst_segment_clip
304       0.5604  libgstreamer-1.0.so.0.204.0 __udivdi3
266       0.4903  libgstreamer-1.0.so.0.204.0
gst_system_clock_id_wait_jitter_unlocked
261       0.4811  libgstreamer-1.0.so.0.204.0 gst_segment_to_running_time
240       0.4424  libgstreamer-1.0.so.0.204.0 gst_clock_get_time
224       0.4129  libgstreamer-1.0.so.0.204.0 gst_memory_get_type
212       0.3908  libgstreamer-1.0.so.0.204.0 gst_memory_get_sizes
209       0.3853  libgstreamer-1.0.so.0.204.0 gst_clock_get_type
195       0.3595  libgstreamer-1.0.so.0.204.0 gst_allocator_get_type
190       0.3502  libgstreamer-1.0.so.0.204.0 gst_segment_to_stream_time
184       0.3392  libgstreamer-1.0.so.0.204.0 gst_buffer_find_memory
181       0.3336  libgstreamer-1.0.so.0.204.0 __aeabi_uidivmod
180       0.3318  libgstreamer-1.0.so.0.204.0 gst_memory_map
178       0.3281  libgstreamer-1.0.so.0.204.0 gst_buffer_insert_memory
178       0.3281  libgstreamer-1.0.so.0.204.0 gst_clock_id_wait
177       0.3263  libgstreamer-1.0.so.0.204.0 gst_buffer_unmap
172       0.3171  libgstreamer-1.0.so.0.204.0 gst_object_ref
166       0.3060  libgstreamer-1.0.so.0.204.0 gst_pad_get_type
163       0.3005  libgstreamer-1.0.so.0.204.0 _get_merged_memory
162       0.2986  libgstreamer-1.0.so.0.204.0 _gst_util_uint64_scale
155       0.2857  libgstreamer-1.0.so.0.204.0 gst_mini_object_replace
141       0.2599  libgstreamer-1.0.so.0.204.0 gst_buffer_resize_range
126       0.2323  libgstreamer-1.0.so.0.204.0 __gnu_uldivmod_helper
121       0.2230  libgstreamer-1.0.so.0.204.0 _gst_buffer_free
120       0.2212  libgstreamer-1.0.so.0.204.0 _sysmem_new_block
118       0.2175  libgstcoreelements.so    gst_fake_sink_render
114       0.2101  libgstreamer-1.0.so.0.204.0 gst_allocator_alloc
109       0.2009  libgstreamer-1.0.so.0.204.0 gst_memory_init
101       0.1862  libgstreamer-1.0.so.0.204.0 gst_mini_object_init
101       0.1862  libgstreamer-1.0.so.0.204.0 gst_util_uint64_scale_int
100       0.1843  libgstreamer-1.0.so.0.204.0 gst_allocator_free
....

It shows following gst core APIs are the top most in load contribution from
above list,
1694      3.1226  libgstreamer-1.0.so.0.204.0 gst_mini_object_unref
1663      3.0655  libgstreamer-1.0.so.0.204.0 gst_mini_object_unlock
1546      2.8498  libgstreamer-1.0.so.0.204.0 gst_mini_object_lock
712       1.3125  libgstreamer-1.0.so.0.204.0 gst_mini_object_is_writable
674       1.2424  libgstreamer-1.0.so.0.204.0 gst_mini_object_ref 

Can anyone provide some inputs to understand, what could force gstreamer
core to consume such high load just by introducing packetizer element
"rtpvrawpay"(with fakesink) ?

Any pointers are greatly appreciated.

- Thanks. 



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/High-cpu-utilization-with-raw-video-UYVY-network-streaming-pipeline-tp4669784.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list