曾经写过一篇关于VMware虚拟磁盘格式的博文:《 thin还是thick?虚拟磁盘格式的选择题》,介绍了thin和2种thick格式的虚拟磁盘特性,文中也提到VI3.x的时候, 部署(deploy)或克隆(clone)一台虚机的时候,不能选择格式,只能是eagerzeroedthick格式,这是VI3.x的一个缺点,而这个缺点在4.0的时候被克服了,现在我们在vSphere4.0的时候从模板部署或者克隆一台虚机的时候,可以选择是thin还是thick。这个改良似乎意味着从模板deploy一个thin的虚机要优于(或者说快于)deploy一个thick的虚机。

按照常理理解,不应该如此么?——因为thin格式需要复制的vmdk文件尺寸比较小,所以deploy的时候速度也应该比较快才对。但是我有一个疑问一直挂在心头:能快多少?是不是这是一个决定性的因素使得我们应该都选择Thin格式?于是,我设计了以下实验。

实验用的服务器是HP ProLiant BL460c刀片服务器,有2个4核CPU和12GB内存,2个镜像的146GB 10K转SAS硬盘,共享存储是NetApp的FAS3020c,采用软件iSCSI连接,存储网络的设计上使用了MPIO。共享存储的VMFS LUN是实验专用,上面没有其他负载,刀片服务器也只有实验用的VM,没有其他负载。之所以这么具体的描述实验设备,是为了明确的表达一个意思: 服务器、网络、存储都性能足够,不会引起性能瓶颈

我以从头干净安装的方式装好一台Windows XP的VM,名字叫vm-thin,配置内存1GB,内存保留256MB,配置硬盘8GB,thin格式,关机时显示占用空间2.02GB,开机时显示占用空间2.77GB (因为还有0.75GB的swap,为啥0.75GB? 欲知原理请看拙文“ VMware内存分配初探”)。然后以clone的方式复制一台完全相同的VM,名字为vm-thick,在复制的时候转换硬盘格式为thick。这个thick其实是zeroedthick。vm-thick关机时显示的占用空间是8GB,开机是显示占用空间8.75GB。

然后我把这2台VM同时开启的状态下,通过Storage VMotion,将其从FAS3020上迁移到本地磁盘上,然后再迁移回去,分别记录下时间。接着我将这2台VM转换成模板,再利用模板部署新的VM,记录下时间。最后,我把新模板部署出来的2台VM再一次从FAS3020上迁移到本地磁盘。在这些Storage VMotion的过程中,我都选择“same format as source” 选项。

vm-thin
(2.02GB +0.75GB swap)
vm-thick
(8GB+0.75GB swap)
FAS→esx local
storage VMotion
5'38" 2'45"
esx local → FAS
storage VMotion
3'02" 1'56"
deploy一台新VM 2'22" 1'12"
FAS→esx local
storage VMotion
5'45" 3'03"
 
实验的结果令人惊讶: thick格式的性能要远远胜过thin格式。和我之前的设想完全相反!

这个实验得到以下结论:
(1) Thick格式无论在从模板部署新虚机还是Storage VMotion的时候都远比thin格式快,平均大概快40%-50%
(2) 好的网络共享存储的性能远优于本地磁盘

这次实验还有一个有趣的发现,当Storage VMotion的时候,在目的生成新的swap文件大小是不考虑内存保留的,而是完全等于内存大小。所以SVMotion前磁盘占用空间还是2.77GB和8.75GB,SVMotion结束后就变成了3.02GB和9GB了,浏览datastore发现,差额就是swap大小的改变引起的。关机重启后,重新生成swap,就又恢复成了0.75GB的大小。

由于thin格式在VM使用的时候比起thick格式也会有负面的性能影响。这时因为thin格式的磁盘是动态扩大的,一个数GB大小的vmdk文件在磁盘上不是一次生成的,因此不像thick的磁盘那样可以占用连续的磁盘空间,因此在访问thin格式的磁盘的时候,必然会因为磁头在不连续的磁盘块之间移动导致寻址时间较长,从而影响到Disk IO性能。

综上所述,无论是在部署还是应用时, thin格式的性能都不如thick,强烈建议大家使用thick格式的虚拟磁盘

寻寻觅觅,到最后才发现原来“默认”的就是最好的。