在 FreeBSD 中通過 Asix AX88179 的乙太網性能在 1Gbit 連接時很慢
設置:
- 帶 USB3.0 埠的戴爾筆記型電腦
- TrueNas (12.2-RELEASE-p2 FreeBSD 12.2-RELEASE-p2 663e6b09467(HEAD) amd64)
- 2 個 NIC(ugreen usb3.0 到 1Gbit 乙太網,每個上有 3 個 USB 埠)
使用 axge 驅動程序成功安裝了兩個設備。一個硬碟通過 USB 連接到第一個設備並獲得近 100Mb/s 的基準測試(因此每個設備上的 USB3.0 集線器工作正常)。
root@truenas[~]# ifconfig ue0 ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE> ether 00:0e:c6:7c:e2:32 inet 192.168.1.200 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=1<PERFORMNUD> root@truenas[~]# ifconfig ue1 ue1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=80009<RXCSUM,VLAN_MTU,LINKSTATE> ether 00:0e:c6:7c:e1:cd inet 192.168.1.201 netmask 0xffffff00 broadcast 192.168.1.255 media: Ethernet autoselect (1000baseT <full-duplex>) status: active nd6 options=1<PERFORMNUD>
root@truenas[~]# dmesg ... re0: <RealTek 810xE PCIe 10/100baseTX> port 0x2000-0x20ff mem 0xc1404000-0xc1404fff,0xc1400000-0xc1403fff irq 16 at device 0.0 on pci2 re0: Using 1 MSI-X message re0: ASPM disabled re0: Chip rev. 0x40800000 re0: MAC rev. 0x00400000 miibus0: <MII bus> on re0 rlphy0: <RTL8201E 10/100 media interface> PHY 1 on miibus0 rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto, auto-flow re0: Using defaults for TSO: 65518/35/2048 re0: Ethernet address: XX:XX:XX:XX:XX:XX ... ugen0.5: <ASIX Elec. Corp. AX88179> at usbus0 axge0 on uhub7 axge0: <NetworkInterface> on usbus0 ... miibus1: <MII bus> on axge0 rgephy0: <RTL8169S/8110S/8211 1000BASE-T media interface> PHY 3 on miibus1 rgephy0: none, 10baseT, 10baseT-FDX, 10baseT-FDX-flow, 100baseTX, 100baseTX-FDX, 100baseTX-FDX-flow, 1000baseT-FDX, 1000baseT-FDX-master, 1000baseT-FDX-flow, 1000baseT-FDX-flow-master, auto, auto-flow ue0: <USB Ethernet> on axge0 ue0: Ethernet address: XX:XX:XX:XX:XX:XX ugen0.6: <GenesysLogic USB3.1 Hub> at usbus0 uhub8 on uhub1 uhub8: <GenesysLogic> on usbus0 uhub8: 4 ports with 4 removable, self powered ugen0.7: <ASIX Elec. Corp. AX88179> at usbus0 axge1 on uhub8 axge1: <NetworkInterface> on usbus0 miibus2: <MII bus> on axge1 rgephy1: <RTL8169S/8110S/8211 1000BASE-T media interface> PHY 3 on miibus2 rgephy1: none, 10baseT, 10baseT-FDX, 10baseT-FDX-flow, 100baseTX, 100baseTX-FDX, 100baseTX-FDX-flow, 1000baseT-FDX, 1000baseT-FDX-master, 1000baseT-FDX-flow, 1000baseT-FDX-flow-master, auto, auto-flow ue1: <USB Ethernet> on axge1 ue1: Ethernet address: XX:XX:XX:XX:XX:XX ugen0.8: <AsmediaASM1051 USB3.0 Serial> at usbus0 umass0 on uhub8 umass0: <AsmediaASM1051 USB3.0 Serial, class 0/0, rev 3.00/1.00, addr 7> on usbus0 umass0: SCSI over Bulk-Only; quirks = 0xc100 umass0:4:0: Attached to scbus4 (probe0:umass-sim0:0:0:0): REPORT LUNS. CDB: a0 00 00 00 00 00 00 00 00 10 00 00 (probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error (probe0:umass-sim0:0:0:0): SCSI status: Check Condition (probe0:umass-sim0:0:0:0): SCSI sense: ILLEGAL REQUEST asc:20,0 (Invalid command operation code) (probe0:umass-sim0:0:0:0): Error 22, Unretryable error .... lo0: link state changed to UP re0: link state changed to DOWN ue0: link state changed to UP ue1: link state changed to UP ... ue0: link state changed to DOWN ue1: link state changed to DOWN ue0: link state changed to UP ue1: link state changed to UP
問題:當我通過每個介面(ue0,ue1)測量我的網際網路連接時,我只能達到 60Mbits,但應該是 300Mbits 左右(這是我的 ISP 資費)。
當我設置
ifconfig ue0 media 100baseTX mediaopt full-duplex
為介面時,我得到了完整的 100Mbits 連接。但是使用預設的 1000baseT,它為我提供高達 60Mbits 的性能更差。我用 Ubuntu 18 的 LiveCD 做了一個簡單的測試,我確實用相同的設置獲得了完整的網際網路連接,這意味著問題不是電纜、路由器、提供的網際網路連接、USB 埠等。
AXGE 驅動程序應該可以正常工作,至少網際網路上的極少數結果是這樣說的。我真的對這種情況感到困惑,更糟糕的是,沒有太多相關資訊。
我錯過了什麼?
USB 速度驗證
我首先要看的是 USB 部分。
從您添加的片段中,我們可以看到:
Mortherbord USB (unknown) -> Unknown (Prabably GenesysLogic) (uhub7) -> axge0 (ugen0.5) Mortherbord USB (unknown) -> GenesysLogic (uhub8) -> axge1 (ugen0.7)
所以我們有不少於2個USB晶片組(戴爾主機板,Ugreen集線器)和驅動程序或它們的組合可以和我們一起玩遊戲。
首先我會做:
grep usbus /var/run/dmesg.boot
在這裡,我將查看我正在使用的 USB 驅動程序以及支持的速度。戴爾是否使用正常的 EHCI、UHCI、OHCI 或 XHCI 驅動程序?它是否顯示為“超速?
我們將尋找以下方面的東西:
usbus0: 5.0Gbps Super Speed USB v3.0 usbus1: 480Mbps High Speed USB v2.0 usbus2: 480Mbps High Speed USB v2.0
然後我會看看
usbconfig
它的輸出告訴我們不同埠的速度。在您的設置中,我會嘗試:
usbconfig -d ugen0.5 dump_device_desc usbconfig -d ugen0.7 dump_device_desc
再次確保您看到 axge0 和 axge1 的“Super Speed”。
如果您沒有看到“Super Speed”,請驗證您在 Linux 下看到的速度是否相同。高速足以使您的 300Mbps 飽和。
所以理論上這個問題可能與USB有關。也許 Linux 驅動程序對您的晶片組有一些怪癖,這可以解釋差異。
其他報告
如果您看到“Super Speed”,那麼我必須說我在 Internet 上看到的報導比您更糟糕:
流量控制
然而,還有另一個機會。如果您只有“高速”,它很可能只相關。試試看
netstat -i
你有沒有很多Ierrs
。在這種情況下嘗試:ifconfig ue0 media auto mediaopt flow
上面的命令將重新建立與連結夥伴的連結並啟用乙太網流量控制。執行上述命令後,使用 ifconfig(8) 檢查目前媒體。當一切正常時,您應該在 ifconfig 輸出的媒體行中看到“rxpause”和“txpause”。注意,連結夥伴也應該支持流量控制,否則上面的命令無效。
請參閱錯誤 210488 - ue0 axge AX88179 Ierrs 錯誤在嚴重的網路負載下
如果我正確閱讀了 dmesg,則預設值為“自動流”,上面的命令將其更改為“流”。
不說?
如果以上都沒有讓你更進一步(或者有更好的答案),那麼考慮加入 Bug 225179。