We have done some ethernet performance tests on the Apalis iMX6Q/Ixora Carrier Board. Connecting the Ixora Board to a Gigabit Switch we can see a huge difference of performance between the transmitting and the receiving side. We used iperf for transmit test:
On the host:
iperf -s -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.99.145 port 5001 connected with 192.168.99.81 port 44828
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 51.2 MBytes 430 Mbits/sec
[ 4] 1.0- 2.0 sec 51.9 MBytes 435 Mbits/sec
[ 4] 2.0- 3.0 sec 51.8 MBytes 435 Mbits/sec
[ 4] 3.0- 4.0 sec 51.5 MBytes 432 Mbits/sec
[ 4] 4.0- 5.0 sec 52.0 MBytes 436 Mbits/sec
[ 4] 5.0- 6.0 sec 51.9 MBytes 436 Mbits/sec
[ 4] 6.0- 7.0 sec 51.9 MBytes 436 Mbits/sec
[ 4] 7.0- 8.0 sec 51.9 MBytes 436 Mbits/sec
[ 4] 8.0- 9.0 sec 51.9 MBytes 436 Mbits/sec
[ 4] 9.0-10.0 sec 51.9 MBytes 436 Mbits/sec
[ 4] 0.0-10.0 sec 519 MBytes 435 Mbits/sec
On the iMX6Q:
iperf -c 192.168.99.145
------------------------------------------------------------
Client connecting to 192.168.99.145, TCP port 5001
TCP window size: 43.8 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.99.81 port 44828 connected with 192.168.99.145 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 519 MBytes 435 Mbits/sec
I know that due to Errata ERR004512 of the iMX6Q the overall speed is limited to 470 Mbit/s. So the above results seem to be ok. But if we do the same test on the receiving side the results are:
On the host:
iperf -c 192.168.99.81
------------------------------------------------------------
Client connecting to 192.168.99.81, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.99.145 port 55250 connected with 192.168.99.81 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 124 MBytes 104 Mbits/sec
on the iMX6Q:
iperf -s -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.99.81 port 5001 connected with 192.168.99.145 port 55250
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 12.5 MBytes 105 Mbits/sec
[ 4] 1.0- 2.0 sec 12.5 MBytes 104 Mbits/sec
[ 4] 2.0- 3.0 sec 12.3 MBytes 104 Mbits/sec
[ 4] 3.0- 4.0 sec 12.4 MBytes 104 Mbits/sec
[ 4] 4.0- 5.0 sec 12.5 MBytes 105 Mbits/sec
[ 4] 5.0- 6.0 sec 12.3 MBytes 103 Mbits/sec
[ 4] 6.0- 7.0 sec 12.3 MBytes 104 Mbits/sec
[ 4] 7.0- 8.0 sec 12.4 MBytes 104 Mbits/sec
[ 4] 8.0- 9.0 sec 12.4 MBytes 104 Mbits/sec
[ 4] 9.0-10.0 sec 12.5 MBytes 105 Mbits/sec
[ 4] 0.0-10.0 sec 124 MBytes 104 Mbits/sec
After a lot of searching on the web we found that enabling pause frames should improve this:
ethtool -A eth0 rx on tx on
iperf -s -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local 192.168.99.81 port 5001 connected with 192.168.99.145 port 55294
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 16.8 MBytes 141 Mbits/sec
[ 4] 1.0- 2.0 sec 18.5 MBytes 156 Mbits/sec
[ 4] 2.0- 3.0 sec 18.3 MBytes 154 Mbits/sec
[ 4] 3.0- 4.0 sec 18.1 MBytes 152 Mbits/sec
[ 4] 4.0- 5.0 sec 18.4 MBytes 154 Mbits/sec
[ 4] 5.0- 6.0 sec 18.7 MBytes 157 Mbits/sec
[ 4] 6.0- 7.0 sec 18.7 MBytes 157 Mbits/sec
[ 4] 7.0- 8.0 sec 18.6 MBytes 156 Mbits/sec
[ 4] 8.0- 9.0 sec 18.3 MBytes 153 Mbits/sec
[ 4] 9.0-10.0 sec 18.4 MBytes 154 Mbits/sec
[ 4] 0.0-10.0 sec 183 MBytes 153 Mbits/sec
Now we have a receive rate of about 150Mbit/s but its still much slower than the transmit rate. And in reality things are getting even worse. We are running a program that receives HTTP-Streams from different IP cameras and the performance at a 100MBit switch is even better than at 1000MBit switches.
We tried different switches from Cisco, D-Link and Netgear.
Is there any way to improve this situation?