最近维护家里服务器时追踪到了一个诡异的bug,启用SATA直通后在某些情况下可能会影响网络速度,初步怀疑是ESXi自身的bug导致,暂时没啥解决方法只能换其他解决方案,网上没找到类似的信息姑且做个记录方便后人。

bug触发机制

测试的网络拓扑大概就是一个openwrt接管某一个vswitch作为LAN口分配ip,然后新建两个配置完全相同的虚拟机接入此虚拟交换机,为了做对比测试先不进行直通。

接着以A机为server,B机为client使用iperf测速,结果大致如下:

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from [ip], port 55234
[  5] local [ip] port 5201 connected to [ip] port 55236
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  1.57 GBytes  13.4 Gbits/sec
[  5]   1.00-2.00   sec  1.64 GBytes  14.1 Gbits/sec
[  5]   2.00-3.00   sec  1.68 GBytes  14.4 Gbits/sec
[  5]   3.00-4.00   sec  1.65 GBytes  14.2 Gbits/sec
[  5]   4.00-5.00   sec  1.64 GBytes  14.1 Gbits/sec
[  5]   5.00-6.00   sec  1.64 GBytes  14.1 Gbits/sec
[  5]   6.00-7.00   sec  1.62 GBytes  13.9 Gbits/sec
[  5]   7.00-8.00   sec  1.62 GBytes  13.9 Gbits/sec
[  5]   8.00-9.00   sec  1.69 GBytes  14.5 Gbits/sec
[  5]   9.00-10.00  sec  1.66 GBytes  14.3 Gbits/sec
[  5]  10.00-10.00  sec  1.61 MBytes  13.4 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  16.4 GBytes  14.1 Gbits/sec                  receiver
-----------------------------------------------------------

如果在路由虚拟机上测速会稍快,但问题不大均在10Gbps这个数量级,由于是在同一主机中内网传输,理论上就是内存复制,也与虚拟交换机10G的标称速度相同。

然后将A机接入SATA直通的PCIe设备,B机保持不变,同样进行测试:

-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from [ip], port 38544
[  5] local [ip] port 5201 connected to [ip] port 38546
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  74.8 MBytes   627 Mbits/sec
[  5]   1.00-2.00   sec  76.6 MBytes   643 Mbits/sec
[  5]   2.00-3.00   sec  75.0 MBytes   630 Mbits/sec
[  5]   3.00-4.00   sec  76.5 MBytes   642 Mbits/sec
[  5]   4.00-5.00   sec  76.7 MBytes   644 Mbits/sec
[  5]   5.00-6.00   sec  75.8 MBytes   636 Mbits/sec
[  5]   6.00-7.00   sec  77.1 MBytes   646 Mbits/sec
[  5]   7.00-8.00   sec  76.5 MBytes   642 Mbits/sec
[  5]   8.00-9.00   sec  76.7 MBytes   644 Mbits/sec
[  5]   9.00-10.00  sec  76.6 MBytes   643 Mbits/sec
[  5]  10.00-10.02  sec  1.24 MBytes   575 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.02  sec   764 MBytes   639 Mbits/sec                  receiver

发现问题了没,速度从10Gbps降低到了0.5Gbps,性能折损将近20倍!也就是说即使是内网传输也达不到千兆,这也太拉垮了。

而且更严重的是,如果在此SATA直通的虚拟机中跑一些服务(nas网盘等),过一会之后主机上的所有虚拟机均无法关机(表现为虚拟机系统确实已经关闭,但esxi面板状态却显示正在关机且再无响应……ssh登陆主机后可以看到vm进程依然在运行,kill掉之后貌似没有什么效果,估计是vmkernel死锁了,而且恶心的是这个时候无法通过正常手段关机(kernel死锁),只能按服务器电源强制关机。

问题所在与解决方案(雾)

这个问题是源于我发现做nfs的nas虚拟机速度有点过慢了,即使加上ssd缓存内网也跑不上100M,追了一会才发现是网络问题。起初我以为是驱动或者虚拟机配置之类的,可是当我升级到最新版esxi并且使用新创建的虚拟机测试,结果问题依然存在。然后我怀疑是HPE Gen10 Plus的硬件问题(比如直通占用总线带宽之类离谱的东西),网上看到了@wzyboy大佬也有同样配置的服务器,也做了直通但是使用的是pve做底层,于是发邮件戳了下他请他做一下对照组测试,结果一切正常。结合虚拟机无法关机,初步锁定是ESXi自身bug导致。

总之目前的结论就是ESXi的SATA直通在部分硬件或驱动(HPE Gen10 Plus with HPE Customized ESXi 7.0.2)上存在bug(可能是个例),由于大概率和vmkernel有关没啥好办法,如果你不幸遇到了这个问题,解决方法就只能是不用就好了:P 使用vmdk映射代替SATA直通,虽然麻烦了点但是网络问题总算能够解决,结合ssd缓存终于能跑满了~

Last modification:February 26th, 2022 at 10:43 pm
If you think my article is useful to you, please feel free to appreciate