esxi 虚拟机性能问题?
【本文不讨论的】
想获得最高的虚拟机硬盘效率,是可以直通sata控制器的,这样阵列、休眠、smart信息等特性都可以直接使用。其次,直通硬盘也不错,单盘的效率基本接近原生。
这两种直通在ESXi、PVE、unRaid下性能都很好,虚拟机做nas强烈推荐这两种方式。但本文不会讨论这块,因为没什么研究空间了。。。
【本文讨论的】
如果你无法使用直通(比如说硬盘数量不够),那就必须创建虚拟磁盘了。如何创建一个适合自己的虚拟磁盘?尤其是虚拟机玩NAS或Windows等系统,占用磁盘空间大且有一定性能需求,该如何权衡?
本文只是想给出一些我尝试过的方法和结论,希望能够提供帮助。
【大致想法】
首先最简单的方法肯定是虚拟机下直接创建虚拟磁盘,那么虚拟磁盘的硬盘控制器、精简置备、置零这些选项对磁盘的性能到底有多大影响?精力有限,本文只研究了ESXi,其它虚拟系统情形大体相似。
如果你的虚拟机中有一个NAS(比如说群晖),你可能已经把最大最快的硬盘直通给它了。其它次要的系统可否从NAS中分一部分硬盘空间使用,性能如何?是否实用?
【测试的环境】
主机(ESXi系统):
CPU:E3-1265L v3 主硬盘:WDC WD5000BPVT(读取速度72MB/s)
群晖(虚拟机):
直通了sata控制器,两块4T酷狼组raid0,虚拟万兆网卡
Win10(虚拟机):
除系统盘外,对下面1、2、3、4情况各自建立了2G的虚拟磁盘,虚拟万兆网卡
【待测试的方案】
ESXi下的SCSI厚置备、置零硬盘
ESXi下的SATA厚置备、置零硬盘
ESXi下的SATA厚置备、延迟置零硬盘
ESXi下的SATA精简置备硬盘
群晖提供的iSCSI磁盘
群晖提供的SMB共享
群晖提供的NFS共享
接下来,我们按照解决疑问的方式一步步给出测试数据。
【SCSI有必要吗?】(方案1、2对比)
ESXi创建Windows虚拟机,会默认采用SCSI控制器。而我们一般家用主机,基本都是用SATA控制器的,SCSI一般只会在服务器上见到。是不是SCSI比SATA更高级呢?
理论上,SCSI会占用较少的CPU、有更好的扩展性,但硬件要求较高,所以家用很少用到。我们还是看看实测数据:
SATA(厚置备,置零)硬盘读取
SATA(厚置备,置零)硬盘写入
SCSI(厚置备,置零)硬盘读取
SCSI(厚置备,置零)硬盘写入
SATA(厚置备,置零)硬盘:读取58.9MB/s 写入47.8MB/s cpu平均2.8%
SCSI(厚置备,置零,半虚拟)硬盘:读取57.6MB/s 写入44.9MB/s cpu平均2.5%
(主机硬盘直接读取测试72MB/s)
为了方便对比,两块硬盘全都是厚置备、置零的配置。测得的速度相差不大,甚至SCSI还略低一丢丢。CPU占用SCSI略低一丢丢。考虑到测试有误差,可以认为两者的性能数据几乎一样。看来软件模拟出来的SCSI、SATA性能差别不大,跟硬件SCSI、SATA的情况可能不一样。我个人偏向于使用SATA,因为平时主机就是SATA,兼容问题少(半虚拟的SCSI安装Windows需要额外驱动)。
【延迟置零有什么效果?】(方案2、3对比)
顾名思义,延迟置零可以把磁盘的置零操作延后,节省了创建虚拟机的时候卡住的那几秒或几分钟时间。实测在我这个烂硬盘上创建一个2G的置零磁盘差不多要1分多钟。我们来看看设置了延迟置零的硬盘的测试数据:
SATA(厚置备,延迟置零)硬盘第一次读取
SATA(厚置备,延迟置零)硬盘第一次写入
SATA(厚置备,延迟置零)硬盘第二次读取
SATA(厚置备,延迟置零)硬盘第二次写入
SATA(厚置备,延迟置零)硬盘第一次:读取1517.5MB/s 写入11.7MB/s
SATA(厚置备,延迟置零)硬盘第二次:读取58.5MB/s 写入48.8MB/s
SATA(厚置备,置零)硬盘:读取58.9MB/s 写入47.8MB/s (前面有数据截图)
第一次读取速度简直逆天!细想一下,很正常嘛,未置零的部分直接返回0就可以了,根本不需要真正的磁盘IO。再想一下,这个速度快有用吗?正常软件根本就不应该去读取硬盘的未初始化区域,总要先写入数据再读取才对。而第一次的写入速度就会比较悲剧了,因为写入的同时又要处理延迟置零,所以写入速度成倍下降。第二次读取、写入速度才是长期使用后磁盘的速度。
结论:延迟置零会降低初次写入磁盘的性能,长期使用影响不大。从我个人而言,无所谓建立虚拟机的时候等几分钟,所以我还是不会选择延迟置零。
【精简置备划算吗?】(方案2、4对比)
精简置备是一个省硬盘空间的好办法,初期建立的虚拟磁盘文件会很小,随着写入数据而逐渐变大。(这里有人可能会疑惑,为什么精简置备没有区分置零和延迟置零?因为精简备至只能延迟置零了。换个角度:如果做了置零,也就不是精简置备了。)我们看看精简置备的性能数据:
SATA(精简置备)硬盘第一次读取
SATA(精简置备)硬盘第一次写入
SATA(精简置备)硬盘第二次读取
SATA(精简置备)硬盘第二次写入
SATA(精简置备)硬盘第一次:读取1639.6MB/s 写入12.2MB/s
SATA(精简置备)硬盘第二次:读取58.9MB/s 写入47.9MB/s
SATA(厚置备,置零)硬盘:读取58.9MB/s 写入47.8MB/s (前面有数据截图)
同样,第一次读取的速度是逆天的,第一次写入的数据是悲催的,原因跟延迟置零一样。结论似乎也是一样:是否精简置备对长期使用的性能影响较小。但是我的实际使用经验是,拿Windows这种操作系统跑精简置备的话,精简备至后期的实际性能要低于测试值。猜测原因可能是杂乱的磁盘使用导致虚拟磁盘文件出现大量碎片。
【iSCSI能有多快?】(方案5)
如果你的虚拟系统中包含一个nas虚拟机,比如群晖,那么让nas提供一个iSCSI网络硬盘给目标虚拟机用也是个不错的选择。看看测试数据:
群晖iSCSI(厚置备)读取
群晖iSCSI(厚置备)写入
群晖iSCSI(厚置备)网络硬盘:读取177.0MB/s 写入191.5MB/s
(单个原生盘的读取速度180MB/s,这里是双盘组了软raid 0)
这组数据已经跟之前的方案没有可比性了,因为基于的物理硬盘不一样。不过从这个数据可以看出,iSCSI的读写速度已经比较令人满意了。实际长期使用较稳定,没有任何问题。有点遗憾的是理论上组了raid 0可以速度达到单盘的2倍,但这个才勉强1倍,不确定是软raid不太行还是什么原因(iperf3测试网络5G多速率)。有知道的老哥还请不惜赐教。
【SMB共享能做磁盘吗?】(方案5、6对比)
iSCSI的方案我用了厚置备以提升性能,但是这会带来很大的磁盘空间浪费。而且iSCSI一般不方便同时共享给多方使用。所以,我试了试把SMB(Samba)共享映射为驱动器。对比方案5测得的性能数据如下:
iSCSI磁盘读写
SMB共享读写
iSCSI磁盘:读取713MB/s 写入267MB/s
SMB共享:读取1143MB/s 写入297MB/s
因为HD Tune无法测试网络共享,所以只能换了CrystalDiskMark来测试,但后者的测试不那么准确,受缓存等影响较大。看起来SMB的读取速度会高于iSCSI,有点超出我认知。可能主要还是缓存影响了这部分数据。SMB共享因为是文件级的,可能受到了更多的缓存加速?
不过SMB在实际使用中并不稳定,而且还有两个问题:
一是不能做系统盘。因为SMB共享是在系统启动后加载的,而iSCSI磁盘的加载甚至可以从BIOS引导开始(设置有点麻烦,我没实验了)。
二是碎文件读写非常慢。
【NFS共享更快吗?】(方案6、7对比)
简单测试看不出差异,就不献丑了。直接借用别人的结论:
NFS在碎文件多的时候性能显著高于SMB,大文件速度跟SMB不相上下。想看详细对比数据直接看老外的研究(也是基于群晖): Network share: Performance differences between NFS & SMB
但这个测试结果不是在Windows上得出的。我在Windows上的实际使用速度还远不及SMB,而且有不稳定的状况,经常卡住。
【结论】
需要稳定高性能的话,可以采用虚拟SATA、厚置备、置零硬盘。
如果需要节省空间,则考虑虚拟精简置备硬盘。
如果有NAS,可以用NAS做一个iSCSI硬盘,稳定度和速度都较好。
爱折腾的也可以试试SMB或NFS共享,如果能解决Windows下稳定性问题还请指点一下。
vmware esxi是什么?
《VMware ESXi》是一款虚拟化软件。它是具有高级资源管理功能高效,灵活的虚拟主机平台。1、作为一款虚拟化软件,VMware ESXi 3.5.0支持"应用虚拟"它的特点是可以直接管理服务器的各种硬件,因此硬件兼容性稍差,但是硬盘和网络I/O等性能非常好。2、VMware ESX Server 为适用于任何系统环境的企业级的虚拟计算机软件。大型机级别的架构提供了空前的性能和操作控制。它能提供完全动态的资源可测量控制,适合各种要求严格的应用程序的需要,同时可以实现服务器部署整合,为企业未来成长所需扩展空间。