有一些討論,似乎這個問題已經解決了。但文獻較少。所以我寫了這篇筆記,希望對其他人有幫助。
症狀
英特爾乙太網路連接 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])。
解決方法
所以我需要停用電源管理。 Intel 設備的工作狀態稱為 C 狀態。 C 狀態範圍從 C0 到 Cn。 C0 表示活動狀態(參見英特爾使用者指南/C 狀態)。第一個解決方法是將最大 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 月的報告。沒有提供解決方案。
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 解釋了為什麼會出現這個 bug,但太專業了;我無法完全理解。
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
(幾乎有效-- 下載速度和丟包是固定的,但上傳為零)
-
-
- 提問者做了很多工作,包括報告自己編譯驅動是不可能的
- 沒有一個答案對我有用。