Intel I219 испытывает ОГРОМНУЮ потерю пакетов

Intel I219 испытывает ОГРОМНУЮ потерю пакетов

Есть некоторые обсуждения и, кажется, эта проблема решена. Однако литературы мало. Поэтому я написал эту заметку и надеюсь, что она поможет другим.

Симптом

Intel Ethernet Connection I219 Series, включая I219-V и I219-LM, не работает в Linux, со скоростью около 1 Мбит/с на speedtest.net и потерей ping в 30-50% в пределах LAN. Это проблема в ядре, поэтому и Ubuntu, и Fedora будут страдать от той же проблемы. Все пользователи с 4.19 по 5.11 сообщили об этой проблеме. Обновление с помощью apt не помогает.

Подробности

  • пинг с другой машины
$ 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-State. Диапазон C-State составляет от C0 до Cn. C0 указывает на активное состояние (см.Руководство пользователя Intel/C-State). Первый способ решения проблемы — установить максимальное значение 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_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 года. Он использует ядро ​​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. https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1927925

    • Они утверждают, что решение в [3] работает
    • Комментарий №93 объясняет, почему происходит эта ошибка, но он слишком специализирован; я не могу полностью понять.
  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. Проводная сеть очень медленная

    • Автор вопроса проделал большую работу, в том числе сообщил, чтоскомпилировать драйвер самостоятельно невозможно
    • Ни один из ответов мне не подходит.

Связанный контент