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

Tim Allen gstreamer at timallen.ltd.uk
Thu Feb 12 13:08:46 PST 2015


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

I have been looking at something similar, but I don't believe it is an issue
with RTP payloading itself, though I haven't reached a conclusion yet.

I'm not encoding or decoding, but taking a 10 second raw / uncompressed
video file source, created with videotestsrc, and RTP payloading to a fake
sink shows the difference between gstreamer 0.10 performance and gstreamer
1.0. In the examples below I'm using the Jetson TK1 with L4T R21.2 / Ubuntu
14.04 with gstreamer1.0-1.2.4. I have one core enabled in performance mode,
and cpu quiet is disabled. This fully loads a single core and so relative
timings can be made, which shows gstreamer 1.0 to be quicker:

$ time gst-launch-0.10 filesrc location=/media/sda1/1280x1024 at 25.mkv ! queue
name=Qfile ! matroskademux ! "video/x-raw-yuv, color-matrix=(string)sdtv" !
rtpvrawpay mtu=1472 ! fakesink
real    0m10.353s
user    0m8.119s
sys     0m2.162s

$ time gst-launch-1.0 filesrc location=/media/sda1/1280x1024 at 25.mkv ! queue
name=Qfile ! matroskademux ! "video/x-raw, color-matrix=(string)sdtv" !
rtpvrawpay mtu=1472 ! fakesink
real    0m8.111s
user    0m5.803s
sys     0m2.269s

Enabling additional cores does decrease the processing time, but
gstreamer-1.0 takes greater CPU load for it's performance improvement.
Limiting the cores gives a clearer picture for comparison.

Running the same pipelines on an Ubuntu 14.04 Core i7 desktop shows greater
improvements when not limited by processing power:
gstreamer-0.10:
real	0m6.437s
user	0m2.620s
sys	0m0.534s

gstreamer-1.0:
real	0m1.920s
user	0m1.573s
sys	0m0.333s

Back on the Jetson TK1, it's when udpsink is used, that gstreamer-1.0
performance looks very poor. Again, with just a single core enabled as
previously, but this time streaming through the onboard Realtek Ethernet to
a Gigabit switch and Core i7 host:

$ time gst-launch-0.10 filesrc location=/media/sda1/1280x1024 at 25.mkv ! queue
name=Qfile ! matroskademux ! "video/x-raw-yuv, color-matrix=(string)sdtv" !
rtpvrawpay mtu=1472 ! udpsink host=192.168.204.3 port=5004 loop=false
real    0m11.388s
user    0m5.069s
sys     0m6.271s

$ time gst-launch-1.0 filesrc location=/media/sda1/1280x1024 at 25.mkv ! queue
name=Qfile ! matroskademux ! "video/x-raw, color-matrix=(string)sdtv" !
rtpvrawpay mtu=1472 ! udpsink host=192.168.204.3 port=5004 loop=false
real    0m19.342s
user    0m9.576s
sys     0m9.507s

I have also used a I210 PCI card with pause frames disabled, and the results
are similar.

I'm not very familiar with gstreamer buffer and memory management, but could
this be related to the way the plugins have been ported to gstreamer-1.0 and
not making the correct / best usage of the loaning, referencing, mapping
etc? So far I've been looking at source, using gst-debug, and "top" to
investigate, but haven't got to the bottom of this yet. Any suggestions
would be greatly appreciated.




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


More information about the gstreamer-devel mailing list