英特爾 I219 遭遇嚴重丟包

英特爾 I219 遭遇嚴重丟包

有一些討論,似乎這個問題已經解決了。但文獻較少。所以我寫了這篇筆記,希望對其他人有幫助。

症狀

英特爾乙太網路連接 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
    

文獻

  1. https://bugzilla.redhat.com/show_bug.cgi?id=1652865這是 2019 年 1 月的報告。沒有提供解決方案。

  2. https://bugzilla.kernel.org/show_bug.cgi?id=213651提議

    • 卸載梅* (不適合我
    • BIOS 設定 -> 系統管理 -> Intel AMT 功能,將其從「限制 MEBx 存取」切換為「停用」(不適合我-- 我的BIOS沒有這個選項)
  3. https://bugzilla.kernel.org/show_bug.cgi?id=213377是關於完全相同的問題。他們提議

    • 使用“intel_idle.max_cstate=1”啟動相同的核心(有關說明,請參閱如何設定 intel_idle.max_cstate=1) (幾乎有效-- 下載速度和丟包是固定的,但上傳為零)
  4. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1927925

    • 他們聲稱[3]中的解決方案有效
    • 評論 #93 解釋了為什麼會出現這個 bug,但太專業了;我無法完全理解。
  5. 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幾乎有效-- 下載速度和丟包是固定的,但上傳為零)
  6. 有線電視網速度極慢

    • 提問者做了很多工作,包括報告自己編譯驅動是不可能的
    • 沒有一個答案對我有用。

相關內容