我一直在尝试使用 ESXI 主机上的 ghettoVCB 来查明为什么我的备份速度很慢。
我目前正在使用 ghettoVCB 将我的虚拟机从主机操作系统备份到 TrueNAS 上的 NFS 共享。
当我从 ESXI 机器上的客户机(Ubuntu 20.04)将文件复制到 NFS 共享时,我得到的速度大约为 257MB/s(这差不多是正确的,因为我在 NAS 和 ESXI 之间有一个专用的 2.5gb 通道)
su@test:/mnt/guest$ time sh -c "dd if=/dev/zero of=test bs=1MB count=1024 && sync"
1024+0 records in
1024+0 records out
1024000000 bytes (1.0 GB, 977 MiB) copied, 3.98153 s, 257 MB/s
real 0m4.470s
user 0m0.002s
sys 0m0.619s
Guest NFS Mount Options:
rw, relatime, vers=4.2,
rsize=1048576, wsize=1048576,
namlen=255, hard, proto=tcp, timeo=600,
retrans=2, sec=sys, local_lock=none,
当我尝试从 ESXI 主机复制到同一个 NFS 共享时,吞吐量要低得多,约为 45MB/s:
/vmfs/volumes/9043e582-0376fe3e] time sh -c "dd if=/dev/zero of=./test bs=1MB count=1024 && sync"
1024+0 records in
1024+0 records out
real 0m 22.70s
user 0m 0.00s
sys 0m 0.00s
ESXI NFS Mount Options
Cant seem to find a way to see the mount options ESXI uses?
我注意到的一件事是,关闭服务器上 ZFS 数据共享的同步可将 ESXI 写入速度加快到 146MB/s。但仍然比客户操作系统低很多。
我的假设是 ESXI 非常安全,并确保所有内容 100% 同步。有人知道是否如此吗?有人有任何关于提高备份性能的提示吗?
答案1
您看到的情况完全正常,无法按原样修复。VMware ESXi“按设计”没有磁盘缓存,这与虚拟机内部的客户操作系统不同,它确实有!因此,当您从虚拟机内部复制文件(这本身就是一个流氓测试,您应该使用更复杂的基准)时,您会饱和网络,因为流水线顺序读取比网络本身更快,但主机 ESXi 必须将数据(速度慢,没有预读)读取到 mmap() 的共享存储/网络内存缓冲区中,启动无状态 NFS 写入,再次读取磁盘并继续循环。如果您启动 WireShark,您会看到客户虚拟机 Tx 流量稳定,而主机操作系统在 Tx 上出现峰值。
作为一种解决方法,您可能需要获得一些具有强大板载内存的缓存 RAID 控制器或添加第二个节点,构建一个集群,配置 vSAN(VMUG 定价对于 vSphere+vSAN 来说相当实惠)。VMware vSAN 将在其级别缓存本地磁盘,低于 VMFS,因此您将再次饱和 2.5Gb。
答案2
作为一种解决方法,您可能需要获得一些具有强大板载内存的缓存 RAID 控制器或添加第二个节点,构建一个集群,配置 vSAN(VMUG 定价对于 vSphere+vSAN 来说相当实惠)。VMware vSAN 将在其级别缓存本地磁盘,低于 VMFS,因此您将再次饱和 2.5Gb。
这是一个值得的选择。或者,期待 Starwind VSAN,它在块级别上工作,应该能给你更好的性能。它支持 mdamd raid,也值得一试。