有一些讨论,似乎这个问题已经解决了。但是,文献很少。所以我写了这篇文章,希望它能对其他人有所帮助。
症状
Intel 以太网连接 I219 系列(包括 I219-V 和 I219-LM)无法在 Linux 上运行,speedtest.net 上的速度约为 1 Mb/s,LAN 内 ping 丢失率为 30-50%。这是内核问题,因此 Ubuntu 和 Fedora 都会遇到同样的问题。4.19 到 5.11 的用户都报告了这个问题。使用 apt 更新无济于事。
细节
- 从另一台机器 ping
$ ping -i 0.2 -W 0.2 -c 100 -s 1000 192.168.1.2
100 packets transmitted, 56 received, 44% packet loss, time 20195ms
- 设备信息
# lspci -vvvnn -s 00:1f.6
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (14) I219-V [8086:15fa] (rev 11)
Subsystem: CLEVO/KAPOK Computer Ethernet Connection (14) I219-V [1558:50e1]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 129
Region 0: Memory at 82380000 (32-bit, non-prefetchable) [size=128K]
Capabilities: [c8] Power Management version 3
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=1 PME-
Capabilities: [d0] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee00338 Data: 0000
Kernel driver in use: e1000e
Kernel modules: e1000e
# ethtool -i enp0s31f6
driver: e1000e
version: 5.11.0-40-generic
firmware-version: 0.4-4
expansion-rom-version:
bus-info: 0000:00:1f.6
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
答案1
原因
电源管理关闭网络适配器的缓存/内存(有关更多信息,请参阅[7])。
解决方法
因此我需要禁用电源管理。英特尔设备的工作状态称为 C 状态。C 状态范围从 C0 到 Cn。C0 表示活动状态(请参阅英特尔用户指南/C-State)。第一个解决方法是将最大 C 状态设置得不太高 [3,4]。
vi /etc/default/grub # add intel_idle.max_cstate=1 to GRUB_CMDLINE_LINUX_DEFAULT after "quite splash" # so that line looks like GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=1" # then save and execute update-grub # then reboot, you can confirm this is applied by cat /proc/cmdline|grep intel cat /sys/module/intel_idle/parameters/max_cstate
你甚至可以设置
max_cstate
为0;某人做这个。更改有关网络适配器电源控制的标志[5]。
# on my machine the default value is "auto" cat /sys/bus/pci/devices/0000\:00\:16.0/power/control echo on > /sys/bus/pci/devices/0000\:00\:16.0/power/control # check it is "on" now cat /sys/bus/pci/devices/0000\:00\:16.0/power/control
文献
https://bugzilla.redhat.com/show_bug.cgi?id=1652865这是 2019 年 1 月的报告。他使用的是 4.29 内核。没有提供解决方案。
https://bugzilla.kernel.org/show_bug.cgi?id=213651提议
- 卸载我* (对我来说不起作用)
- BIOS 设置 -> 系统管理 -> Intel AMT 功能,将其从“限制 MEBx 访问”切换为“已禁用”(对我来说不起作用--我的BIOS没有这个选择)
https://bugzilla.kernel.org/show_bug.cgi?id=213377是关于完全相同的问题。他们提出
- 使用“intel_idle.max_cstate=1”启动相同的内核(有关说明,请参阅如何设置 intel_idle.max_cstate=1)(几乎有效-- 下载速度和数据包丢失已修复但上传为零)
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1927925
- 他们声称[3]中的解决方案有效
- 评论#93 解释了为什么会发生此错误,但是太专业了;我无法完全理解。
https://bugs.launchpad.net/ubuntu/+source/linux-oem-5.10/+bug/1930754
-
(对我来说不起作用)The trick is to set the boot kernel parameter "pcie_aspm=off" in '/etc/default/grub' Like this: GRUB_CMDLINE_LINUX_DEFAULT="splash pcie_aspm=off" After that run; update-grub
- 他们证实[2]中的解决方案不起作用。
echo on | sudo tee /sys/bus/pci/devices/0000\:00\:16.0/power/control
(几乎有效-- 下载速度和数据包丢失已修复但上传为零)
-
-
- 提问者做了很多工作,包括报告自己编译驱动程序是不可能的
- 这些答案对我都不起作用。