我最近将 Linux 切换为主系统的主要操作系统。不过,我遇到了 Qualcomm Atheros Killer E2200 千兆以太网控制器的奇怪问题。这款以太网控制器是我的 MSI Z87-G45 游戏主板的一部分。
问题描述
访问公共互联网时,卡的速度上限约为 20 到 30 Mbit/s,而我可以使用 50Mbit/s 的连接。此外,当卡的速度达到这个上限时,我会遇到大量数据包丢失。
举个例子:Steam 的下载速度上限为 2 到 3MB/s,当下载处于活动状态时,我在 Mumble(VOIP 客户端)中遇到了大量数据包丢失,并且一些其他连接也往往会定期断开。
由于网络交换机的原因,我的 LAN 速度上限为 100Mbit/s。但当然,20 到 30Mbit/s 根本不够。
补充笔记
- 当访问 LAN 设备(例如我的 NAS)时,会使用全部吞吐量,一切似乎都运行正常。因此,此问题仅在访问公共互联网时发生。
- 在我的 Windows 7 安装上一切运行正常,速度约为 50Mbit/s,没有任何数据包丢失或连接中断。
- 我确实只是在 WAN 连接“达到上限”时才开始注意到数据包丢失,而不是在使用率低于 5Mbit/s 时。
- 我没有手动安装任何附加驱动程序。该卡开箱后即可使用,可以说是全新安装。
系统信息
$ ~> lspci | grep Killer
03:00.0 Ethernet controller: Qualcomm Atheros Killer E220x Gigabit Ethernet Controller (rev 13)
$ ~> screenfetch -n
timvisee@AxiomLinux
OS: Ubuntu 16.10 yakkety
Kernel: x86_64 Linux 4.8.0-34-generic
Uptime: 19h 3m
Packages: 2388
Shell: fish
Resolution: 3200x1097
DE: Gnome
WM: GNOME Shell
WM Theme: Adwaita, Adapta-Nokto [GTK2], Adapta-Nokto [GTK3]
Icon Theme: Papirus-Dark
Font: Cantarell 11
CPU: Intel Core i5-4670K CPU @ 3.8GHz
GPU: GeForce GTX 550 Ti
RAM: 5480MiB / 15991MiB
$ ~> ip -s link
...
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 44:8a:5b:24:46:50 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
32490908621 22983929 0 0 0 15751
TX: bytes packets errors dropped carrier collsns
2694939812 14217026 0 0 0 0
...
$ ~> lspci -v | grep Killer -A11
03:00.0 Ethernet controller: Qualcomm Atheros Killer E220x Gigabit Ethernet Controller (rev 13)
Subsystem: Micro-Star International Co., Ltd. [MSI] Killer E220x Gigabit Ethernet Controller
Flags: bus master, fast devsel, latency 0, IRQ 30
Memory at f6100000 (64-bit, non-prefetchable) [size=256K]
I/O ports at d000 [size=128]
Capabilities: [40] Power Management version 3
Capabilities: [58] Express Endpoint, MSI 00
Capabilities: [c0] MSI: Enable+ Count=1/16 Maskable+ 64bit+
Capabilities: [d8] MSI-X: Enable- Count=16 Masked-
Capabilities: [100] Advanced Error Reporting
Capabilities: [180] Device Serial Number ff-24-46-50-44-8a-5b-ff
Kernel driver in use: alx
Kernel modules: alx
$ ~> sudo netstat -s | egrep -i 'loss|retran'
24 segments retransmited
TCPLossProbes: 23
TCPLossProbeRecovery: 1
TCPSynRetrans: 4
$ ~> sudo ping -s 1 -f -c 1000 -w 5 timvisee.com
PING timvisee.com (159.253.1.168) 1(29) bytes of data.
--- timvisee.com ping statistics ---
304 packets transmitted, 157 received, 48% packet loss, time 4990ms
pipe 5, ipg/ewma 16.469/0.000 ms
$ ~> sudo ethtool enp3s0
Settings for enp3s0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Current message level: 0x000060e4 (24804)
link ifup rx_err tx_err hw wol
Link detected: yes
$ ~> modinfo alx | grep version
srcversion: 148031F2236BBDAF23DA652
vermagic: 4.8.0-37-generic SMP mod_unload modversions
Mumble 中的数据包丢失
上面显示的最后一条命令表明没有数据包错误和/或丢包。但是 Mumble 确实表明了其他情况。很奇怪。
是什么导致了这个问题?公共互联网连接上限和数据包被丢弃。我该如何修复它?是不是因为这台机器上没有运行守护进程来管理应用程序优先级,就像在 Windows 上一样?