Microchip LAN7800 USB-Ethernet bad performance when plug directly to Xavier NX devkit

Hi,

I’m using Xavier NX devkit with Jetpack 5.0.2. I have one EVB-LAN7800LC-1 from Microchip, want to use this in my project. But unfortunately, it has an issue when I test it.

When I insert the adapter into USB port (4 USB-A ports are USB 3.1), the adapter was recognized and interface eth1 created. Assigning static IP to it, I’m able to use it. But ping & iperf3 give bad performance

# ping 10.10.1.2
PING 10.10.1.2 (10.10.1.2) 56(84) bytes of data.
64 bytes from 10.10.1.2: icmp_seq=1 ttl=64 time=1033 ms
64 bytes from 10.10.1.2: icmp_seq=3 ttl=64 time=469 ms
64 bytes from 10.10.1.2: icmp_seq=4 ttl=64 time=500 ms
64 bytes from 10.10.1.2: icmp_seq=5 ttl=64 time=452 ms
64 bytes from 10.10.1.2: icmp_seq=6 ttl=64 time=276 ms
64 bytes from 10.10.1.2: icmp_seq=7 ttl=64 time=54.3 ms
64 bytes from 10.10.1.2: icmp_seq=8 ttl=64 time=468 ms
64 bytes from 10.10.1.2: icmp_seq=9 ttl=64 time=192 ms
64 bytes from 10.10.1.2: icmp_seq=10 ttl=64 time=496 ms
64 bytes from 10.10.1.2: icmp_seq=11 ttl=64 time=498 ms
64 bytes from 10.10.1.2: icmp_seq=12 ttl=64 time=520 ms
64 bytes from 10.10.1.2: icmp_seq=13 ttl=64 time=471 ms
64 bytes from 10.10.1.2: icmp_seq=14 ttl=64 time=501 ms
64 bytes from 10.10.1.2: icmp_seq=15 ttl=64 time=488 ms
64 bytes from 10.10.1.2: icmp_seq=16 ttl=64 time=515 ms

# iperf3 -c 10.10.1.2
Connecting to host 10.10.1.2, port 5201
[  5] local 10.10.1.90 port 33706 connected to 10.10.1.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  53.2 MBytes   446 Mbits/sec    0    173 KBytes       
[  5]   1.00-2.00   sec  63.2 MBytes   530 Mbits/sec    0    173 KBytes       
[  5]   2.00-3.00   sec  65.5 MBytes   550 Mbits/sec    0    173 KBytes       
[  5]   3.00-4.00   sec  67.9 MBytes   570 Mbits/sec    0    191 KBytes       
[  5]   4.00-5.00   sec  72.1 MBytes   605 Mbits/sec    0    201 KBytes       
[  5]   5.00-6.00   sec  87.0 MBytes   730 Mbits/sec    0    211 KBytes       
[  5]   6.00-7.00   sec  96.7 MBytes   811 Mbits/sec    0    262 KBytes       
[  5]   7.00-8.00   sec  98.5 MBytes   826 Mbits/sec    0    262 KBytes       
[  5]   8.00-9.00   sec   104 MBytes   870 Mbits/sec    0    262 KBytes       
[  5]   9.00-10.00  sec   100 MBytes   842 Mbits/sec    0    262 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec   808 MBytes   678 Mbits/sec    0             sender
[  5]   0.00-10.00  sec   807 MBytes   677 Mbits/sec                  receiver

 

iperf Done.

If I use a USB3 hub in between (LAN7800 connect to USB3 hub, and hub connect to Xavier NX Devkit), the result was much better.

# ping 10.10.1.2
PING 10.10.1.2 (10.10.1.2) 56(84) bytes of data.
64 bytes from 10.10.1.2: icmp_seq=1 ttl=64 time=0.793 ms
64 bytes from 10.10.1.2: icmp_seq=2 ttl=64 time=1.04 ms
64 bytes from 10.10.1.2: icmp_seq=3 ttl=64 time=0.958 ms
64 bytes from 10.10.1.2: icmp_seq=4 ttl=64 time=1.02 ms
64 bytes from 10.10.1.2: icmp_seq=5 ttl=64 time=0.851 ms
64 bytes from 10.10.1.2: icmp_seq=6 ttl=64 time=0.984 ms
64 bytes from 10.10.1.2: icmp_seq=7 ttl=64 time=0.573 ms
64 bytes from 10.10.1.2: icmp_seq=8 ttl=64 time=0.871 ms
64 bytes from 10.10.1.2: icmp_seq=9 ttl=64 time=0.859 ms
64 bytes from 10.10.1.2: icmp_seq=10 ttl=64 time=0.803 ms
64 bytes from 10.10.1.2: icmp_seq=11 ttl=64 time=0.907 ms
64 bytes from 10.10.1.2: icmp_seq=12 ttl=64 time=0.898 ms


# iperf3 -c 10.10.1.2                                                                                                                                                         
Connecting to host 10.10.1.2, port 5201
[  5] local 10.10.1.90 port 33722 connected to 10.10.1.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec   111 MBytes   932 Mbits/sec    0    255 KBytes       
[  5]   1.00-2.00   sec   112 MBytes   941 Mbits/sec    0    270 KBytes       
[  5]   2.00-3.00   sec   112 MBytes   943 Mbits/sec    0    270 KBytes       
[  5]   3.00-4.00   sec   112 MBytes   940 Mbits/sec    0    270 KBytes       
[  5]   4.00-5.00   sec   112 MBytes   939 Mbits/sec    0    270 KBytes       
[  5]   5.00-6.00   sec   112 MBytes   937 Mbits/sec    0    304 KBytes       
[  5]   6.00-7.00   sec   112 MBytes   942 Mbits/sec    0    304 KBytes       
[  5]   7.00-8.00   sec  90.6 MBytes   760 Mbits/sec    0    304 KBytes       
[  5]   8.00-9.00   sec  99.2 MBytes   832 Mbits/sec    0    304 KBytes       
[  5]   9.00-10.00  sec   113 MBytes   946 Mbits/sec    0    457 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.06 GBytes   911 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.06 GBytes   910 Mbits/sec                  receiver


iperf Done.

Do you have any idea why this happens? Thank you.

Hi,
We have seen CPU capability dominates the throughput. Please check the discussion in
The speed of 5G dongle - #27 by DaneLLL

And you can run sudo tegrastats to check loading of the CPU cores.

Assuming the port is eth1, what do you see from:
ethtool eth1