浅谈IntelliCache本地存储(SSD固态硬盘)

最近在Citrix Blog上看到篇博客(IntelliCache, Scalability and consumerSSDs),非常认同作者的观点,推荐给大家。但是今天想聊一下我自己对IntelliCache的看法。

博文的主题思想:在使用IntelliCache的环境下,其实并不一定要SSD固态硬盘。我和作者的观点一致,SSD固态硬盘并不是必须的。为什么这么说,分为六个部分来分析:(致谢:第五部分来自Davy老师的原文,第六部分来自HongXiMa的观点,在此一并谢过!)

IntelliCache技术的特性

IntelliCache能大幅度节省对存储的要求,它把对共享存储的要求转移到了本地存储上。IntelliCache只支持MCS模式,不支持PVS模式;IntelliCache支持MCS的Pooled和Dedicated这两种模式;Pooled模式支持本地的读和写的Caching,但是不支持XenMotion,能最大存储的IO和空间节省。但是如果是Dedicated模式,就只支持本地的读,所以可以做XenMotion了,也能节省存储的读IO。IdentityDisk一直都是放在存储上的。

我们的担忧:本地存储的IOPS不够支撑虚拟机的Diff Disk在本地存储上读写。

案例分析

接下来分析一个实际案例:如果我们采用HP PROLIANT BL490C G7刀片(2路6核至强CPU、64GB内存、6块1000M网卡、2 x 300GB/ 2 x 600GB硬盘 15,000RPM SAS),该配置下我们推荐35-40VM/Host。

35VM-40VM,稳定状态下按照每个用户需要12个IOPS计算,一共需要 35 * 12 =420 IOPS, 按照40个VM计算就是 480个 IOPS,我们就取平均值450。

MCS环境下我们按照读50%,写50%来计算。(这个比例的出处请参考 XenDesktop Planning Guide – Storage Best Practices ),则需要:
读:450 * 50% = 225,写也是这个值。如果按照RAID1来计算,则需要磁盘提供: 225 + 225 *2 = 675 IOPS

15K 的SAS硬盘一般至少180个IOPS是没有问题的,而且应该是没有计算磁盘的Cache的作用的(纯粹只是计算机械运动),估计能达到200-220 IOPS左右。参见http://en.wikipedia.org/wiki/IOPS,如果按照200计算,在RAID1的环境下就是 675 / 200 =3.375,也就是说4块盘足矣。

一台服务器装4块硬盘应该是没有问题的,担心什么?刀片服务器上只能安装2块硬盘?

Host上的硬盘一定要做RAID1吗?

我们接下去继续分析:Host上的硬盘一定要做RAID1吗?
再来分析一下Host上的硬盘都是存储什么数据:存储的是DiffDisk,说白了就是PVS模式下的Write Cache。其实就是在Session存续期间的一些缓存文件。这些缓存文件很重要吗?

Pooled模式下读和写的Caching均发生在Host的硬盘上,如果是Dedicated模式,写的动作是往共享存储上写的。而既然是Pool模式,就肯定是给任务型工作者来使用,假如Host上的硬盘坏了或者Host主机都坏了,重启一次把Diff Disk清空也并不会对生产造成大的影响;而Dedicated模式呢? 这个Diff Disk是往共享存储里面写的,Dedicated模式主要是给研发和个性化办公环境下使用,Host上的硬盘坏了或者Host主机都坏了对Diff Disk没有任何影响。

所以结论是:Host硬盘上坏了,没什么大不了;更何况即使启用了HA,在另外一台Host上启动VM,Diff Disk也是没有了。既然Host上的Hard Disk没那么重要,我们还要做RAID1吗?我觉得RAID0都可以了。如何按照RAID0来计算则需要:225 + 225 = 450 IOPS(因为RAID0没有写惩罚了),这时候450 / 200 = 2.25,基本上2块盘就足矣。

SSD划算吗?

如果换成SSD硬盘,一块SSD硬盘可以至少提供20.000 IOPS,~3000-4000 随机写 IOPS,是不是大炮打蚊子,绰绰有余了,更何况SSD硬盘10倍于机械磁盘的成本,实在是不划算。

部署IntelliCache后存储上的实际数据

发一个实际存储上捕获到的数据:
从下图可以看到,1000台VM在没有IntelliCache启动的时候,峰值读IOPS大约是15000左右,使用了IntelliCache后,峰值读IOPS大约为3000,大约为原来的20%。而且读IOPS的峰值区间也大大缩小了。由于是研发场景,因此使用的VM应该都是dedicated的,根据IntelliCache在dedicated模式下的工作原理来看,IntelliCache对dedicated模式下IOPS的减少主要是对读IOPS,对于写IOPS的降低应该没有太多贡献。对于启动后VM的读操作,不可能像启动一样基本在读master image,有相当部分读操作会读diffdisk,所以对读IOPS的减少肯定不会像启动阶段那样能达到原来的20%这么大的幅度。虽然这个比例现在还没有具体的数据,但是我个人感觉降低30%-50%应该是没有问题的。

基于上述理由,我认为IntelliCache可以将计算中的MCS产生的50%的读IOPS再降低一半,即225/2 = 113 IOPS,这样RAID10的总IOPS需求就是113 + 225 *2 = 563;。15K 的FC盘有至少180个IOPS,如果按照200计算,考虑磁盘阵列的cache的对IO性能的提升因素(这点一般大家都没有予以考虑),用Raid10的话3块盘也应该基本够了。

另外一点需要注意的是,这减少的113读IOPS并没有消失,而是分布到服务器的本地硬盘上面,113个IOPS对单台服务器的硬盘不构成的压力,用两块SATA硬盘做RAID1也完全能承受。

一点个人意见

最后说一下IntelliCache对Cache到底是写到硬盘还是写到内存中(类似于PVS的技术),目前为止IntelliCache对Cache还是写到硬盘中。但是我觉得dom0 内存里的cache 和 buffer 会对Intellegent cache 功能有较大帮助(未证实),所以在实际场景中实际效果比我们计算出来的结果还要好一些。(大卫王 QQ:466167753)