Intel I219 で大規模なパッケージ損失が発生

Intel I219 で大規模なパッケージ損失が発生

いくつか議論があり、この問題は解決されたようです。しかし、文献は少ないです。そこで、このメモを書いて、他の人の役に立つことを願っています。

症状

I219-V および I219-LM を含む Intel Ethernet Connection I219 シリーズは、Linux では動作しません。speedtest.net では約 1 Mb/s で、LAN 内では 30 ~ 50% の ping ロスが発生します。これはカーネルの問題であるため、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はアクティブ状態を示します(Intel ユーザーガイド/C ステート最初の回避策は、最大C-Stateをあまり高く設定しないことです[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_cstate0 に設定することもできます。誰かこれを行う。

  • ネットワークアダプタの電源制御に関するフラグを変更する[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. バグ報告これは 2019 年 1 月のレポートです。彼は 4.29 カーネルを使用しています。解決策は提供されていません。

  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. 参考:

    • 彼らは[3]の解決策が機能すると主張している
    • コメント #93 ではこのバグが発生する理由が説明されていますが、あまりにも専門的すぎるため、完全に理解できません。
  5. 参考:

    • 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. 有線ネットワークが非常に遅い

    • 質問者は、次のような報告を含め、多くの作業を行いました。ドライバーを自分でコンパイルするのは不可能
    • どの答えも私には役に立ちません。

関連情報