Устранение ошибки работы сетевого адаптера Intel i40e

Как проявляется ошибка?

syslog

Сообщения в /var/log/syslog:

[Fri Nov 8 13:40:27 2019] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[Fri Nov 8 13:40:32 2019] bond0: link status down for interface ens17f0, disabling it in 200 ms
[Fri Nov 8 13:40:32 2019] bond0: link status definitely down for interface ens17f0, disabling it
[Fri Nov 8 13:40:32 2019] bond0: now running without any active interface!
[Fri Nov 8 13:40:32 2019] br-ext1: port 1(bond0.4) entered disabled state
[Fri Nov 8 13:40:32 2019] br-ext2: port 1(bond0.10) entered disabled state
[Fri Nov 8 13:40:32 2019] lbr-int: port 1(bond0.11) entered disabled state
[Fri Nov 8 13:40:33 2019] bond0: link status up for interface ens17f0, enabling it in 0 ms
[Fri Nov 8 13:40:33 2019] bond0: link status definitely up for interface ens17f0, 10000 Mbps full duplex
[Fri Nov 8 13:40:33 2019] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[Fri Nov 8 13:40:33 2019] bond0: first active interface up!
[Fri Nov 8 13:40:33 2019] br-ext1: port 1(bond0.4) entered blocking state
[Fri Nov 8 13:40:33 2019] br-ext1: port 1(bond0.4) entered forwarding state
[Fri Nov 8 13:40:33 2019] br-ext2: port 1(bond0.10) entered blocking state
[Fri Nov 8 13:40:33 2019] br-ext2: port 1(bond0.10) entered forwarding state
[Fri Nov 8 13:40:33 2019] lbr-int: port 1(bond0.11) entered blocking state
[Fri Nov 8 13:40:33 2019] lbr-int: port 1(bond0.11) entered forwarding state

Эти сообщения говорят о том, что, после того как интерфейс ens17f0 перешел в состояние down - аггрегированный порт bond0 отключился, сообщив о том, что у него нет активных интерфейсов.

Поскольку на этом бонде закреплен ip-адрес сети управления - мы потеряли связь с сервером.

Следующий фрагмент демонстрирует наше действие - отключение и включение port channel в коммутаторе, чтобы bond вернуть в рабочее состояние:

[Fri Nov 8 13:40:32 2019] bond0: link status down for interface ens17f0, disabling it in 200 ms

Лог коммутатора

Фрагмент лога на коммутаторе:

2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_DOWN_PORT_CHANNEL_MEMBERS_DOWN: Interface port-channel7 is down (No operational members)
2019 Nov 7 22:51:14 dc-sw-01 %ETH_PORT_CHANNEL-5-PORT_DOWN: port-channel7: Ethernet1/13 is down
2019 Nov 7 22:51:14 dc-sw-01 %ETH_PORT_CHANNEL-5-FOP_CHANGED: port-channel7: first operational port changed from Ethernet1/13 to none
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_DOWN_INITIALIZING: Interface Ethernet1/13 is down (Initializing)
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_DOWN_PORT_CHANNEL_MEMBERS_DOWN: Interface port-channel7 is down (No operational members)
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-SPEED: Interface port-channel7, operational speed changed to 10 Gbps
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_DUPLEX: Interface port-channel7, operational duplex mode changed to Full
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_RX_FLOW_CONTROL: Interface port-channel7, operational Receive Flow Control state changed to off
2019 Nov 7 22:51:14 dc-sw-01 %ETHPORT-5-IF_TX_FLOW_CONTROL: Interface port-channel7, operational Transmit Flow Control state changed to off
2019 Nov 7 22:51:24 dc-sw-01 %ETH_PORT_CHANNEL-4-PORT_INDIVIDUAL: port Ethernet1/13 is operationally individual
2019 Nov 7 22:51:24 dc-sw-01 %ETHPORT-5-IF_UP: Interface Ethernet1/13 is up in mode trunk
2019 Nov 7 22:51:30 dc-sw-01 %L2FM-4-L2FM_MAC_MOVE2: Mac fa16.3e13.5218 in vlan 4 has moved between Po8 to Eth1/13
2019 Nov 7 22:51:30 dc-sw-01 %L2FM-4-L2FM_MAC_MOVE2: Mac fa16.3e11.02bb in vlan 4 has moved between Po8 to Eth1/13
2019 Nov 7 22:51:30 dc-sw-01 %L2FM-4-L2FM_MAC_MOVE2: Mac fa16.3e13.5218 in vlan 4 has moved between Po8 to Eth1/13

messages

Фрагмент лога /var/log/messages, имеющий отношение к описываемой проблеме:

Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306398] NETDEV WATCHDOG: ens17f0 (i40e): transmit queue 5 timed out

Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306400] Modules linked in: dm_mod ipt_MASQUERADE nf_nat_masquerade_ipv4 xt_addrtype sr_mod cdrom joydev hid_generic
usbhid hid uas usb_storage nf_conntrack_netlink binfmt_misc drbg ansi_cprng authenc echainiv xfrm6_mode_tunnel xfrm4_mode_tunnel vhost_net vhost macvtap macv
lan tun nfnetlink_queue nfnetlink_log bluetooth rfkill xt_policy xt_REDIRECT nf_nat_redirect xt_nat xt_mark xt_connmark iptable_nat xt_CHECKSUM xt_mac xt_tcpu
dp xt_multiport ip_set_hash_net rpcsec_gss_krb5 nfsv4 dns_resolver nfs fscache ebtable_filter ebtables vport_vxlan vxlan ip6_udp_tunnel udp_tunnel openvswitch
nf_nat_ipv6 nf_nat_ipv4 nf_nat veth xfrm_user xfrm4_tunnel tunnel4 ipcomp xfrm_ipcomp esp4 ah4 af_key xfrm_algo 8021q garp mrp ip6table_filter nf_conntrack_i
pv6 nf_defrag_ipv6 ip6table_raw ip6table_mangle ip6_tables

Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306450] xt_set ip_set nfnetlink xt_conntrack iptable_filter fuse nf_conntrack_ipv4 nf_defrag_ipv4 xt_comment xt_ph
ysdev br_netfilter bridge stp llc xt_CT nf_conntrack iptable_raw iptable_mangle mxm_wmi intel_rapl sb_edac edac_core x86_pkg_temp_thermal intel_powerclamp cor
etemp kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ast ghash_clmulni_intel iTCO_wdt ttm iTCO_vendor_support intel_cstate drm_kms_helper drm ib_iser r
dma_cm evdev iw_cm ib_cm sg intel_uncore ib_core configfs iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi mei_me lpc_ich intel_rapl_perf pcspkr shpchp mf
d_core mei ioatdma ipmi_si ipmi_msghandler wmi button acpi_pad acpi_power_meter zfs(PO) zunicode(PO) zavl(PO) zcommon(PO) znvpair(PO) spl(O) bonding nfsd auth
_rpcgss oid_registry nfs_acl lockd grace loop sunrpc lp parport ip_tables x_tables autofs4 ext4 crc16 jbd2 fscrypto ecb mbcache sd_mod raid10 raid456 async_ra
id6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c crc32c_generic raid1 raid0 multipath linear md_mod crc32c_intel aesni_intel aes_x86_
64 glue_helper lrw gf128mul ablk_helper cryptd mpt3sas raid_class scsi_transport_sas scsi_mod xhci_pci xhci_hcd igb i2c_i801 i2c_algo_bit i40e i2c_smbus dca u
sbcore ptp usb_common pps_core

Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306532] Hardware name: T-Platforms E-Class/Basic2U, BIOS 2.00r1994b 03/24/2018
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306641] i40e 0000:03:00.0 ens17f0: tx_timeout: VSI_seid: 390, Q 5, NTC: 0xe, HWB: 0xe, NTU: 0x1ea, TAIL: 0xe, INT: 0x1
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.306645] i40e 0000:03:00.0 ens17f0: tx_timeout recovery level 1, hung_queue 5
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.386377] bond0: link status down for interface ens17f0, disabling it in 200 ms
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.515178] i40e 0000:03:00.0 ens17f0: port 4789 already offloaded
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.515181] i40e 0000:03:00.0 ens17f0: port 4789 already offloaded
Nov 7 22:54:29 hu-ovt-01 kernel: [9003123.594386] bond0: link status up again after 200 ms for interface ens17f0
Nov 7 22:54:48 hu-ovt-01 kernel: [9003142.313924] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
Nov 7 22:54:48 hu-ovt-01 kernel: [9003142.496561] ICMPv6: NA: someone advertises our address fe80:0000:0000:0000:f816:3eff:fe7a:949b on qg-12aeafb3-55!

Описание проблемы

В логах в момент проблемы наблюдалось сообщение от драйвера i40e:

Nov 11 16:38:52 hu-ovt-03 kernel: [5293399.891045] i40e 0000:03:00.0: TX driver issue detected, PF reset issued

Наблюдается проблема на разных версиях ядер ubuntu и debian.

Ссылки на тикеты и патчи: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1700834 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=892105 https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1779756

В следующем тикете сообщают, что для корректной работы драйвера прошивки 6.01 XL710 нужна определенная минимальная его версия: https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1795587

У нас была установлена версия 1.6.16-k

ethtool -i ens17f0
driver: i40e
version: 1.6.16-k
firmware-version: 6.01 0x800035cf 1.1747.0

По этой статье отключали offload: https://ixnfo.com/tx-driver-issue-detected-pf-reset-issued.html

Решение проблемы

Для устранения проблемы надо скачать и установить новую версию драйвера Intel Gigabit Ethernet Network Connections. Посмотреть описание, список совместимости и варианты версий можно по ссылке: https://downloadcenter.intel.com/download/24411/Intel-Network-Adapter-Driver-for-PCIe-40-Gigabit-Ethernet-Network-Connections-Under-Linux

Установка драйвера

Порядок сборки модуля ядра драйвера из исходников:

mkdir /opt/i40e; cd !$
wget https://downloadmirror.intel.com/24411/eng/i40e-2.10.19.30.tar.gz
tar xvf i40e-2.10.19.30.tar.gz
cd i40e-2.10.19.30/src
make install

После компиляции, модуль ядра будет помещен в файл /lib/modules//updates/drivers/net/ethernet/intel/i40e/i40e.ko

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

# Включить VF (virtual functions) для интерфейса ens17f0
ip link set ens17f0 vf 0 state enable
rmmod i40e; modprobe /lib/modules/$(uname r)/updates/drivers/net/ethernet/intel/i40e/i40e.ko
systemctl restart networking

Проверим, какая версия драйвера в системе:

modprobe i40e | grep version

Версия должна быть: 2.10.19.30

22.01.2020