我有一台 VMWare ESXi 5.1.0(内部版本 1065491)主机,运行索拉里斯 (印第安纳公开赛)VM 作为客户机。我已为 ESXi 和 Solaris 之间的 NFS 通信创建了一个私有 vSwitch。Solaris VM 已安装 VMware 工具,并vmxnet3s0
在私有 vSwitch 上有一个 VMXnet3 适配器 ( )。
使用 Solaris VM 直接读取文件时,dd
读取文件的速度高达 4.5 GB/秒(44.8 千兆位/秒)(如果它已被我的 ARC/L2ARC 缓存)
通过 VMware NFS 读取同一个文件,我最多只能获得 0.163 GB/秒(1.131 千兆位/秒)
为什么会有这样的差异?我预计 TCP 和 NFS 以及虚拟网络会产生一些开销,但这种差异并不是我所说的高架,看上去有些不对劲。
Solaris VM 上的 CPU 使用率从未超过 20%。平均负载较低。主机上有大量可用 RAM(未交换),主机上的 CPU 利用率远低于 50%(通常约为 33%)。在客户 VM 上,dladm show-linkprop vmxnet3s0
显示速度为 10000(10 Gbit/秒),MTU 为 9000(启用巨型帧)
作为测试,我尝试使用“标准” E1000 vmnic(e1000g0
),并且能够启用巨型帧(9000 MTU),但是从 VMware 通过 NFS 读取同一个文件时,我只能获得最大 0.124 GB/秒(0.992 千兆位/秒),这是有道理的,因为 E1000 上的链接速度只有 1000 兆位。
为什么我只看到 VMware ESXi 5.1 和我的 OpenIndiana Solaris VM 之间的传输速度仅为约 1 千兆/秒?
更新:在应用 VFrontDe 在其回答中推荐的性能调整后,我现在在 Solaris 和带有适配器的 Linux VM 之间获得了令人印象深刻的 8-9 Gbit/秒vmxnet3
。我在 Linux 下通过 NFS 读取缓存文件的速度约为 6 Gbps:
root@iperf:/mnt/public/ISO# dd if=Test.cdr of=/dev/null bs=1024k
5884+1 records in
5884+1 records out
6170824704 bytes (6.2 GB) copied, 8.44985 s, 730 MB/s
然而,在 VMware ESXi 主机上读取同一个文件时,我得到的速度却低得可怜的 1.91 Gbps:
/vmfs/volumes/3d77318f-82c7901a/ISO # time dd if=Windows\ 7\ Home\ Premium.cdr of=/dev/null bs=1024k
5884+1 records in
5884+1 records out
real 0m 27.85s
user 0m 17.32s
sys 0m 0.00s
27.85 秒内传输 6.2 GB,相当于 1.91 gbps。
是什么原因导致 Vmware ESXi 的vmknic
性能如此糟糕,而vmxnet3
它的vmxnet3
性能却好得多?
答案1
看起来 Solaris 的 vmxnet3 适配器存在一些问题和错误。请查看这篇非常详细的帖子:http://blog.cyberexplorer.me/2013/03/improving-vm-to-vm-network-throughput.html经过一些调整后,作者能够获得更好的吞吐量,但在这里重复所有步骤太多了。