XenServer开启了Intellicache功能支持以后,我们可以针对每个VM的VDI开启缓存支持。

根据以前的文章介绍,我们知道VM的VDI有两种模式,也就是Shared Desktop Mode和Private Desktop Mode,分别规定了对VDI的修改是否会持久化的行为。而VM的cache,在两种不同VDI模式的情况下,有些类似的区别,对一些XenServer的高级功能有影响,所以这里就提到以下。

默认情况下,启用了Thin Provisioning(也就是local SR为EXT3文件系统),那么VDI的allow-caching参数(标志,Flag)设置为true,则标示启用了本地智能缓存;设置为false,则标示禁用缓存功能。

而VM的工作模式(on-boot设置)以及缓存行为设置(allow-caching)会影响到VM的迁移(XenMotion,VM Migration)。

  • 如果on-boot=reset,allow-caching=true,那么缓存数据只会写入到本地的缓存SR,不会写入到共享存储,这会大大降低共享存储的压力,然后这种情形下,VM不能在主机之间迁移。很容易理解,因为缓存管理的原因,导致虚机无法迁移。
  • 如果on-boot=persist,allow-caching=true,那么由于最终对VDI的修改会持久化到硬盘或者VBD,PBD上,那么,对VDI的写入,不仅会写入到缓存,同时也会写入到共享存储,只有读得情况下,如果缓存命中,那么会直接从缓存读取。此种情形下,VM由于变动的数据已经回写到共享存储,迁移以后,缓存可以在其他主机重建,所以此时,VM可以迁移。
一些细节的解释:
问:Intellicache是否支持XenMotion和HA?
答:根据上面的说明,只有在on-boot=persist的时候,才支持,否则没有Migrate。

 

问:本地缓存保存在哪里?
答:默认情况下,安装只有一个local Storage,启用Thin Provisioning的情况下,默认的本地存储将作为缓存的本地存储。默认保存位置为/var/run/sr-mount/<sr-uuid>,其中VHD的缓存文件格式为:<vdi uuid>.vhdcache
如果手动创建了多个local SR,并启用了缓存支持的情况下,讲会利用多个本地存储做为缓存,设置方法参考:

 

问:缓存什么时候被删除或者重置?
答:只有VM对应的VDI被删除的时候,VDI缓存文件才会被删除。当VM启动的时候,VDI的缓存会被重置。在VM迁移到其他主机的时候,或者关闭的情况下,缓存文件不会被删除。因此,如果在资源池中,如果一台主机上的VM迁移到其他主机以后,原主机上保留有缓存文件,如果删除VM的VDI的时候,原主机处于离线状态,资源池中该VDI的缓存除了离线的原主机不会被删除外,其他主机上的缓存会同步清理。当离线主机恢复以后,SR在同步的过程中会进行垃圾回收,此时会清理已经删除VDI的缓存文件。