Dear all,
The bandwidth of the Ethernet seems to be limited by the global memory bandwidth usage!
Known issue:
The Ethernet bandwidth is limited to 470 Mb/s with the Imx6q.
My project description:
With the 3 first cores, I do a video process which uses memory and neon instructions.
With the last core, I send data through the UDP Ethernet.
Problem description:
More the video process uses the global memory (200 to 600 MB/s), more the Ethernet bandwidth decreases (430 to 150 Mb/s).
Note: the same video process with small part of memory (in this case, data should be in cache), doesn't decrease the Ethernet bandwidth (always 416 Mb/s) (the same cpu usage, but low global memory usage).
Configuration:
BoundaryDevices Nitrogen6X
Memory 1GBytes of 64-bit wide DDR3 @ 532MHz
Ubuntu L3.0.35_4.0.0_UBUNTU_RFS / LTIB 4.0.0 / or LTIB 4.1.0
I have written a simple test (code attached):
- 3 cores copy memory: 10 MB of data, by block of 64 kB. The memory bandwidth is measured and limited to a desired value for the test.
- 1 core sends udp packets (1472 bytes) : after 10s, the Ethernet bandwidth is calculated


1 thread memory bandwidth (MB/s) | Threads count | Total memory bandwidth (MB/s) | Measured Ethernet bandwidth (Mb/s) | Cpu usage (%) |
0 | 3 | 0 | 438 | 5 |
1 | 3 | 3 | 434 | 7 |
5 | 3 | 15 | 429 | 10 |
10 | 3 | 30 | 424 | 11 |
20 | 3 | 60 | 417 | 12 |
50 | 3 | 150 | 400 | 20 |
100 | 3 | 300 | 379 | 35 |
150 | 3 | 450 | 365 | 46 |
200 | 3 | 600 | 341 | 62 |
250 | 3 | 750 | 279 | 73 |
300 | 3 | 900 | 210 | 84 |
400 | 3 | 1200 | 151 | 94 |
max | 3 | max | 149 | 98
|


Result:
The bandwidth of the Ethernet depends of the global memory bandwidth usage.
- No memory usage: Ethernet bandwidth 438 Mb/s
- Max memory usage: Ethernet bandwidth 149 Mb/s
For my project, I really need the max of Ethernet bandwidth. I have spent many to time to adjust socket options, threads priority, the BSP versions,…, without improvement.
Is there any idea to help me go on?
Thank you very much.
Original Attachment has been moved to: TestUdp.tar.gz