当前位置: 首页 > news >正文

thin还是thick(续),实证新结论!



曾经写过一篇关于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一台新VM2'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格式的虚拟磁盘

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

相关文章:

  • Adapter Patterm简单随笔
  • 雨林木风推出的8G免费U盘
  • 《软件随想录》读后感
  • 全员营销制造3G繁华表象
  • 慧悟
  • 【转】Tokyocabinet/Tokyotyrant文档大合集
  • openssl的vs/vc工程配置与make
  • 软件工程之感想
  • TRUNCATE TABLE 删除表中的所有行,而不记录单个行删除操作
  • GRE OVER IPSEC的配置方法
  • 互联网软件应用与开发
  • PHP面试题及答案(一)
  • ASP基础教程:ADO存取数据库时如何分页显示
  • ASP.NET4.0新的%: %语法用于HTML Encoding
  • Ubuntu 9.10 /etc/apt/sources.list
  • AWS实战 - 利用IAM对S3做访问控制
  • canvas 五子棋游戏
  • FineReport中如何实现自动滚屏效果
  • Golang-长连接-状态推送
  • Java Agent 学习笔记
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js继承的实现方法
  • laravel5.5 视图共享数据
  • Promise面试题2实现异步串行执行
  • python学习笔记-类对象的信息
  • React-生命周期杂记
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 聚类分析——Kmeans
  • 使用agvtool更改app version/build
  • 试着探索高并发下的系统架构面貌
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 线上 python http server profile 实践
  • 协程
  • 原生 js 实现移动端 Touch 滑动反弹
  • 源码安装memcached和php memcache扩展
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #HarmonyOS:软件安装window和mac预览Hello World
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言)fgets与fputs函数详解
  • (待修改)PyG安装步骤
  • (第27天)Oracle 数据泵转换分区表
  • (五)c52学习之旅-静态数码管
  • (一)u-boot-nand.bin的下载
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)Unity3DUnity3D在android下调试
  • (转)大型网站的系统架构
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .md即markdown文件的基本常用编写语法
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net Web项目创建比较不错的参考文章
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 验证控件和javaScript的冲突问题