slow USB 3.0 on -current
John-Mark Gurney
jmg at funkthat.com
Mon Jul 13 04:51:54 UTC 2020
Mark Millard wrote this message on Sun, Jul 12, 2020 at 18:26 -0700:
> John-Mark Gurney jmg at funkthat.com wrote on
> Sat Jul 11 22:44:36 UTC 2020 :
>
> > I'm having issues getting good ethernet performance from a USB ethernet
> > adapter (ure) under FreeBSD on an HP EliteDesk 705 G2 Mini[1]. It's an
> > AMD PRO A10-8700B based system using the AMD A78 FCH chipset.
> >
> > Under FreeBSD -current (r362596), 12.1-R and 11.4-R, the RealTek USB
> > adapter only gets around 10MB/sec performance. During the transfer,
> > the CPU usage is only around 3-5%, so it's definitely not CPU bound.
> >
> > I have tested Windows 10 and NetBSD 9.0 performance, and both provide
> > 100MB/sec+ w/o troubles.
> >
> > I have attached dmesg from both FreeBSD -current and NetBSD 9.0.
> >
> > Any hints on how to fix this?
> >
> > This may be related, but I'm also having issues w/ booting when I have
> > both a SD USB 2.0 card reader AND the ure plugged into USB 3.0 ports.
> >
> > If I move the SD card reader to USB 2.0, the umass device will attach
> > and work. I have also attached a clip of the dmesg from that
> > happening.
> >
> > Has anyone else seen this issue? Ideas or thoughts on how to resolve
> > the performance issues?
>
> It might prove useful to use iperf3 with
>
> # iperf3 -s
>
> on one machine and doing
>
> # iperf3 -c ADDR
> . . .
> # iperf3 -R -c ADDR
> . . .
>
> on the other. (That last swaps the
> sender/receiver status.)
>
> All 3 commands will have output. The
> -s one will produce output for each of
> the -c ones.
>
> The outputs for the sender(s) will include Cwnd
> (congestion window size) information that may
> be relevant. It will report bit rate and
> retry count sampling (and overall figures).
Here is the results for FreeBSD w/ USB3 ure. .80 is the USB3
adapter side:
gold,pts,/home/jmg,502$iperf3 -c 192.168.0.80
Connecting to host 192.168.0.80, port 5201
[ 5] local 192.168.0.2 port 50042 connected to 192.168.0.80 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 8.94 MBytes 75.0 Mbits/sec 931 15.5 KBytes
[ 5] 1.00-2.00 sec 9.98 MBytes 83.7 Mbits/sec 919 27.3 KBytes
[ 5] 2.00-3.00 sec 9.95 MBytes 83.5 Mbits/sec 954 5.71 KBytes
[ 5] 3.00-4.00 sec 9.97 MBytes 83.7 Mbits/sec 939 28.7 KBytes
[ 5] 4.00-5.00 sec 9.97 MBytes 83.6 Mbits/sec 951 17.3 KBytes
[ 5] 5.00-6.00 sec 9.99 MBytes 83.8 Mbits/sec 913 31.5 KBytes
[ 5] 6.00-7.00 sec 9.96 MBytes 83.5 Mbits/sec 956 20.1 KBytes
[ 5] 7.00-8.00 sec 10.0 MBytes 83.9 Mbits/sec 913 33.0 KBytes
[ 5] 8.00-9.00 sec 9.97 MBytes 83.6 Mbits/sec 945 24.4 KBytes
[ 5] 9.00-10.00 sec 9.99 MBytes 83.8 Mbits/sec 916 34.4 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 98.7 MBytes 82.8 Mbits/sec 9337 sender
[ 5] 0.00-10.25 sec 98.7 MBytes 80.8 Mbits/sec receiver
iperf Done.
gold,pts,/home/jmg,503$iperf3 -R -c 192.168.0.80
Connecting to host 192.168.0.80, port 5201
Reverse mode, remote host 192.168.0.80 is sending
[ 5] local 192.168.0.2 port 51024 connected to 192.168.0.80 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 9.69 MBytes 81.3 Mbits/sec
[ 5] 1.00-2.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 2.00-3.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 3.00-4.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 4.00-5.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 5.00-6.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 6.00-7.00 sec 10.7 MBytes 89.8 Mbits/sec
[ 5] 7.00-8.00 sec 10.4 MBytes 87.6 Mbits/sec
[ 5] 8.00-9.00 sec 10.7 MBytes 89.9 Mbits/sec
[ 5] 9.00-10.00 sec 10.7 MBytes 89.8 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 106 MBytes 88.9 Mbits/sec 1381 sender
[ 5] 0.00-10.00 sec 106 MBytes 88.7 Mbits/sec receiver
iperf Done.
As you can see, it matches what I measured earlier.
And just to prove that the machine CAN move 100MB/sec, I've run iperf3
using the onboard wired ethernet... I need multiple interfaces, which is
why I'm bothering trying to get USB3 ethernet working.
This is using the onboard bge interface. It's IP is .79:
gold,pts,/home/jmg,507$iperf3 -c 192.168.0.79
Connecting to host 192.168.0.79, port 5201
[ 5] local 192.168.0.2 port 61500 connected to 192.168.0.79 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 101 MBytes 850 Mbits/sec 0 488 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 940 Mbits/sec 0 488 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 943 Mbits/sec 0 731 KBytes
[ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 0 731 KBytes
[ 5] 4.00-5.00 sec 112 MBytes 941 Mbits/sec 0 731 KBytes
[ 5] 5.00-6.00 sec 112 MBytes 941 Mbits/sec 0 731 KBytes
[ 5] 6.00-7.00 sec 112 MBytes 940 Mbits/sec 0 731 KBytes
[ 5] 7.00-8.00 sec 112 MBytes 941 Mbits/sec 0 731 KBytes
[ 5] 8.00-9.00 sec 112 MBytes 940 Mbits/sec 0 731 KBytes
[ 5] 9.00-10.00 sec 112 MBytes 940 Mbits/sec 0 731 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.08 GBytes 932 Mbits/sec 0 sender
[ 5] 0.00-10.01 sec 1.08 GBytes 931 Mbits/sec receiver
iperf Done.
gold,pts,/home/jmg,508$iperf3 -R -c 192.168.0.79
Connecting to host 192.168.0.79, port 5201
Reverse mode, remote host 192.168.0.79 is sending
[ 5] local 192.168.0.2 port 61726 connected to 192.168.0.79 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 97.0 MBytes 814 Mbits/sec
[ 5] 1.00-2.00 sec 109 MBytes 917 Mbits/sec
[ 5] 2.00-3.00 sec 110 MBytes 920 Mbits/sec
[ 5] 3.00-4.00 sec 109 MBytes 917 Mbits/sec
[ 5] 4.00-5.00 sec 110 MBytes 920 Mbits/sec
[ 5] 5.00-6.00 sec 109 MBytes 916 Mbits/sec
[ 5] 6.00-7.00 sec 110 MBytes 919 Mbits/sec
[ 5] 7.00-8.00 sec 109 MBytes 917 Mbits/sec
[ 5] 8.00-9.00 sec 110 MBytes 919 Mbits/sec
[ 5] 9.00-10.00 sec 109 MBytes 916 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.03 sec 1.06 GBytes 905 Mbits/sec 2866 sender
[ 5] 0.00-10.00 sec 1.06 GBytes 907 Mbits/sec receiver
iperf Done.
> Comparing the output of using iperf3 under
> NetBSD 9.0 or Windows 10 could be instructive.
And NetBSD 9.0. Here, NetBSD got assigned .50, but it's also using
the USB3 adapter.
gold,pts,/home/jmg,505$iperf3 -c 192.168.0.50
Connecting to host 192.168.0.50, port 5201
[ 5] local 192.168.0.2 port 55535 connected to 192.168.0.50 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 96.7 MBytes 811 Mbits/sec 0 50.9 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 938 Mbits/sec 0 82.1 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 938 Mbits/sec 14 114 KBytes
[ 5] 3.00-4.00 sec 110 MBytes 924 Mbits/sec 60 146 KBytes
[ 5] 4.00-5.00 sec 112 MBytes 938 Mbits/sec 107 178 KBytes
[ 5] 5.00-6.00 sec 112 MBytes 939 Mbits/sec 122 193 KBytes
[ 5] 6.00-7.00 sec 112 MBytes 938 Mbits/sec 144 193 KBytes
[ 5] 7.00-8.00 sec 112 MBytes 938 Mbits/sec 165 193 KBytes
[ 5] 8.00-9.00 sec 112 MBytes 939 Mbits/sec 144 193 KBytes
[ 5] 9.00-10.00 sec 112 MBytes 938 Mbits/sec 165 193 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.08 GBytes 924 Mbits/sec 921 sender
[ 5] 0.00-10.00 sec 1.08 GBytes 924 Mbits/sec receiver
iperf Done.
gold,pts,/home/jmg,506$iperf3 -R -c 192.168.0.50
Connecting to host 192.168.0.50, port 5201
Reverse mode, remote host 192.168.0.50 is sending
[ 5] local 192.168.0.2 port 55691 connected to 192.168.0.50 port 5201
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 78.3 MBytes 657 Mbits/sec
[ 5] 1.00-2.00 sec 88.4 MBytes 742 Mbits/sec
[ 5] 2.00-3.00 sec 88.5 MBytes 742 Mbits/sec
[ 5] 3.00-4.00 sec 88.4 MBytes 741 Mbits/sec
[ 5] 4.00-5.00 sec 88.7 MBytes 744 Mbits/sec
[ 5] 5.00-6.00 sec 88.2 MBytes 740 Mbits/sec
[ 5] 6.00-7.00 sec 87.8 MBytes 737 Mbits/sec
[ 5] 7.00-8.00 sec 88.5 MBytes 742 Mbits/sec
[ 5] 8.00-9.00 sec 89.0 MBytes 746 Mbits/sec
[ 5] 9.00-10.00 sec 88.8 MBytes 745 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 875 MBytes 734 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 874 MBytes 734 Mbits/sec receiver
iperf Done.
As you can see, both match approximately what I measured other methods,
so, it's definitely not the way I measured performance.
> My observation would be that neither type
> of USB3 Ethernet adapter that I've tried
What is the chipset that you tried? One of the earlier ones that I
tried was an axe iirc, and was limited to around 500Mbps or so...
> (different chipsets) get anywhere near
> 100 MByte/s when ifconfig reports
> 1000baseT <full-duplex>. The Cwnd figures
> are smaller than for the built-in Ethernets
> that manage much faster overall transfer
> rates.
[...]
> I'll note that between machines with built-in EtherNet
> that can sustain fast transfers overall, the Cwnd figures
> tend to vary but can reach 1 MBytes+. The Retr counts
> tend to still exist.
>
> By contrast, when the USB3 EtherNet is receiving above,
> the maximum Cwnd reported above for the sender at the
> time was: 29.8 KBytes.
>
> I have not tried NetBSD, Windows 10, or Linux comparisons.
As you can see above, NetBSD easily achieves around 8-10x the
speed using the exact same USB3 device as FreeBSD does, so the
hardware CAN push the speeds, just FreeBSD cannot.
Hence, my original post, what can I do to possibly get FreeBSD's
performance up to what the hardware can achieve?
--
John-Mark Gurney Voice: +1 415 225 5579
"All that I will do, has been done, All that I have, has not."
More information about the freebsd-current
mailing list