23,779
edits
mNo edit summary |
mNo edit summary |
||
Line 11: | Line 11: | ||
{{GStreamer debug}} | {{GStreamer debug}} | ||
=IMX6 RAW Streaming Performance= | ==IMX6 RAW Streaming Performance== | ||
Test to measure latency when capturing from a sensor at 720x576 resolution using an IMX6 platform and streaming the IMX6 RAW video to an x86 platform. | Test to measure latency when capturing from a sensor at 720x576 resolution using an IMX6 platform and streaming the IMX6 RAW video to an x86 platform. | ||
==Glass to glass test== | ===Glass to glass test=== | ||
For this test VAR-SOM-MX6 board was used. | For this test VAR-SOM-MX6 board was used. | ||
===IMX6 Transmitter to X86 Receiver=== | ====IMX6 Transmitter to X86 Receiver==== | ||
====IMX6 Transmitter Pipeline==== | =====IMX6 Transmitter Pipeline===== | ||
gst-launch-1.0 imxv4l2videosrc imx-capture-mode=3 ! rtpvrawpay ! udpsink host=10.251.101.212 port=5001 sync=false async=false -v | gst-launch-1.0 imxv4l2videosrc imx-capture-mode=3 ! rtpvrawpay ! udpsink host=10.251.101.212 port=5001 sync=false async=false -v | ||
====x86 Receiver Pipeline==== | =====x86 Receiver Pipeline===== | ||
gst-launch-1.0 udpsrc port=5001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, \ | gst-launch-1.0 udpsrc port=5001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:2, depth=(string)8, \ | ||
Line 31: | Line 31: | ||
a-framerate=(string)30" ! rtpvrawdepay ! videoconvert ! queue ! xvimagesink sync=false | a-framerate=(string)30" ! rtpvrawdepay ! videoconvert ! queue ! xvimagesink sync=false | ||
====Results==== | =====Results===== | ||
{| width="500" border="1" cellpadding="1" cellspacing="1" | {| width="500" border="1" cellpadding="1" cellspacing="1" | ||
Line 156: | Line 156: | ||
From those test the average latency obtained is approximately '''~470 ms''' and the CPU usage in the IMX6 is about '''43%'''. On x86 platform the CPU usage is between '''5%-15%''' when receiving the streaming. | From those test the average latency obtained is approximately '''~470 ms''' and the CPU usage in the IMX6 is about '''43%'''. On x86 platform the CPU usage is between '''5%-15%''' when receiving the streaming. | ||
===x86 Transmitter to IMX6 Receiver=== | ====x86 Transmitter to IMX6 Receiver==== | ||
====x86 Transmitter Pipeline==== | =====x86 Transmitter Pipeline===== | ||
* 720x576 | * 720x576 | ||
Line 169: | Line 169: | ||
</pre> | </pre> | ||
====IMX6 Receiver Pipeline==== | =====IMX6 Receiver Pipeline===== | ||
* 720x576 | * 720x576 | ||
Line 181: | Line 181: | ||
</pre> | </pre> | ||
====Results==== | =====Results===== | ||
{| width="500" border="1" cellpadding="1" cellspacing="1" | {| width="500" border="1" cellpadding="1" cellspacing="1" | ||
Line 299: | Line 299: | ||
|} | |} | ||
=Build udpsrc for IMX6= | ==Build udpsrc for IMX6== | ||
<pre> | <pre> | ||
Line 324: | Line 324: | ||
</pre> | </pre> | ||
=UDP traffic tuning= | ==UDP traffic tuning== | ||
Linux places very restrictive limits on the performance of UDP protocols by limiting the size of the UDP traffic that is allowed to buffer on the receive socket. Since we have high bitrate requirements we need to tune the limits of the socket. First check the current UDP/IP receive buffer default and limit on your IMX6: | Linux places very restrictive limits on the performance of UDP protocols by limiting the size of the UDP traffic that is allowed to buffer on the receive socket. Since we have high bitrate requirements we need to tune the limits of the socket. First check the current UDP/IP receive buffer default and limit on your IMX6: | ||
Line 359: | Line 359: | ||
After this change, the CPU usage jumps to around 74% on the IMX6 for a single pipeline but that's ok; we will perform a trick on the next section to decrease that value . | After this change, the CPU usage jumps to around 74% on the IMX6 for a single pipeline but that's ok; we will perform a trick on the next section to decrease that value . | ||
=UDP pipeline tunning= | ==UDP pipeline tunning== | ||
After the previous change, the CPU usage jumps from 54% to around 74% on the IMX6. This since we corrected the capabilities of the socket and there are no drops on the quality at the expense of having a higher CPU (since more packets are received). A possible way out is to increase the '''MTU''' size of the rtp packets created by '''rtpvrawpay''', this will cause that the partition of this big package to happen on the physical network layer of the PC , and it's reconstruction on the IMX6 will also be performed by the physical layer. | After the previous change, the CPU usage jumps from 54% to around 74% on the IMX6. This since we corrected the capabilities of the socket and there are no drops on the quality at the expense of having a higher CPU (since more packets are received). A possible way out is to increase the '''MTU''' size of the rtp packets created by '''rtpvrawpay''', this will cause that the partition of this big package to happen on the physical network layer of the PC , and it's reconstruction on the IMX6 will also be performed by the physical layer. | ||
== UDP receiving only on IMX6 == | === UDP receiving only on IMX6 === | ||
=== Reference pipelines without using MTU tnning=== | ==== Reference pipelines without using MTU tnning==== | ||
*Pipeline on Host-PC | *Pipeline on Host-PC | ||
Line 382: | Line 382: | ||
On the IMX6 the pipeline has a CPU usage around ~'''66%''' | On the IMX6 the pipeline has a CPU usage around ~'''66%''' | ||
=== Reference pipelines after MTU tuning=== | ==== Reference pipelines after MTU tuning==== | ||
*Pipeline on Host-PC | *Pipeline on Host-PC | ||
Line 401: | Line 401: | ||
On the IMX6 the pipeline has a CPU usage of around ~'''15%''' to ~ '''20%''' | On the IMX6 the pipeline has a CPU usage of around ~'''15%''' to ~ '''20%''' | ||
== UDP receiving on IMX6 + depayloader == | === UDP receiving on IMX6 + depayloader === | ||
*Pipeline on Host-PC | *Pipeline on Host-PC | ||
Line 416: | Line 416: | ||
On the IMX6 the pipeline has a CPU usage of around ~ '''29%''' to ~'''37%'''. | On the IMX6 the pipeline has a CPU usage of around ~ '''29%''' to ~'''37%'''. | ||
== UDP receiving on IMX6 + payloader + display== | === UDP receiving on IMX6 + payloader + display=== | ||
*Pipeline on Host-PC | *Pipeline on Host-PC | ||
Line 490: | Line 490: | ||
For a preliminar test the latency is around '''133,4'''ms . Please confirm these results on your side, also; it seems like currently the most amount of CPU bound operations are being spent on the '''rtpvrawdepay''' (Since as of our previous tests, just adding the depayloader adds around 15% of CPU usage ) we recommend that checking this element should be our next step. | For a preliminar test the latency is around '''133,4'''ms . Please confirm these results on your side, also; it seems like currently the most amount of CPU bound operations are being spent on the '''rtpvrawdepay''' (Since as of our previous tests, just adding the depayloader adds around 15% of CPU usage ) we recommend that checking this element should be our next step. | ||
{{ContactUs}} | |||
[[Category:iMX6]][[Category:GStreamer]] | [[Category:iMX6]][[Category:GStreamer]] |