解决 Intel(R) I350-T4 在 vSphere 7 上的高延时问题
记录下如何解决 ESXi 7 主机上的 Intel(R) I350-T4 网卡周期性出现的高延迟丢包问题.
问题现象
实验环境有四台 Lenovo M920X 运行 ESXi 7.0U1 组成的集群, 使用的是 Intel(R) I350-T4 四口千兆网卡. 差不多每运行一两周后某台主机的某个网口就会出现超高延迟 (~1s) 并伴随丢包.
从 vmkernel.log
中可以发现下面的日志
1 | 2022-01-09T16:31:39.224Z cpu13:1049182)igbn: igbn_CheckRxHang:1382: vmnic1: false hang detected on RX queue 0 |
此时插拔网线, 禁用/启用网卡均无效, 只能重启主机才能使该网口恢复正常.
失败的尝试
禁用节能模式 Energy Efficient Ethernet
网上搜索到过一个类似的问题, 不过是在 ESXi 6.5 上的, 由 igbn 1.3.1 版本驱动的 bug 导致. 但是文中提到的选项参数在 ESXi 7 中已经不可用. 尝试在对端物理交换机上禁用节能模式后, 状况并没有显著差别.
替换官方驱动
将 inbox igbn 驱动替换为 Intel 提供的驱动. 使用 vmkchdev -l
来获取设备的 VID:DID SVID:SDID
, 然后去 https://customerconnect.vmware.com 搜索适用的驱动下载. 替换驱动并重启主机后, 问题依旧.
调整 TSO/LRO
尝试禁用/启用 TSO/LRO 1
2
3esxcli system settings advanced set -o /Net/UseHwTSO -i 0
esxcli system settings advanced set -o /Net/UseHwTSO6 -i 0
esxcli system settings advanced set -o /Net/TcpipDefLROEnabled -i 0
然而结果并没有什么显著差别 1
2
3esxcli system settings advanced set -o /Net/UseHwTSO -i 1
esxcli system settings advanced set -o /Net/UseHwTSO6 -i 1
esxcli system settings advanced set -o /Net/TcpipDefLROEnabled -i 1
替换同型号网卡
从另外一个渠道买入同型号的 Intel(R) I350-T4, 给其中一台主机替换上, 经过一段时间后问题依然重现. 至此可以排除网卡硬件本身的问题.
解决方法
偶然一次检查网卡统计信息时发现有比较大的 Receive FIFO error: 1
2
3
4
5
6esxcli network nic stats get -n vmnic1
NIC statistics for vmnic1
...
Receive FIFO errors: 834656
结合 KB 50121760 尝试调整 ring buffer
1 | esxcli network nic stats get -n vmnic1 |
调整完重启主机. 持续运行半年没再出现过类似状况, 至此问题解决.