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