一般来说我们的存储在适配VMware的时候,会牵涉搭配VAAI特性,经常听到VAAI这到底是什么呢?
VAAI的全称是VMware’s Storage APIs for Array Integration (以前也叫 vStorage APIs),很直观的可以看到是VMware针对于存储API的特性。
整体来说VAAI就是VMware向底层存储(块存储)提供的4种具有竞争力的特性,下面展开讲一下4中特性,以及在VMware层面涉及到的操作。
Full copy
也叫Xcopy,是一种拷贝加速的特性。
我们传统的拷贝,需要将数据从主机测读取,然后在写入到存储,最简单的方式下主机和存储会涉及一次读和一次写的交互,这不仅依赖于主机和存储的网络带宽,同时还会大大增加带宽的负担。
但是full copy在实现拷贝功能时,他是将复制命令通过特殊指令(VMware下发SCSI EXTENDED_COPY指令,该指令携带待复制数据的源、目的地址,待复制数据总空间)的形式下发给存储,由存储内部实现拷贝动作,拷贝完成后再下向主机测返回成功,这样做的好处就是减少了主机和存储的交互,在拷贝过程中也不强依赖与存储与主机的带宽,这时候的拷贝能力完全取决于存储的能力。
那么在VMware侧究竟哪些操作会触发full copy呢? 克隆和迁移虚拟机都可以触发full copy,当然在读写的过程中是不能fullcopy的,所以开机状态的虚拟机在克隆的时候,是走的是传统拷贝,同样的,由于full copy是阵列间的行为,如果你克隆或者迁移的虚拟机在不同的存储上,也是不能触发full copy的。 不同target之间也是不能full copy的,因为不同的target没法理解其他target里面的LUN信息。
ATS锁
全称Hardware-assisted locking ,硬件辅助锁
VMWARE采用VMFS文件系统,这个文件系统其实就是一个集群文件系统,有多个虚拟机进行共享。那么,多个虚拟机同时访问这个VMFS,就会有写冲突,因此,需要采用锁机制来仲裁现在是谁在写。传统的方式,是那个虚拟机需要写的时候,把整个VMFS文件系统锁住,这样别的虚拟机就不能写,只能等待,因此,并发的性能就上不去,。
因此 VMware设计ATS锁,支持离散虚拟机锁定。每次主机侧写虚拟磁盘(LUN),取代SCSI Reservation锁机制对整个LUN锁定,ATS缩小锁机制的锁定范围,只针对写的单个数据块加锁。从而缩小了锁粒度,提高了VMFS系统的并发IO和读写性能。
触发该特性的VMware操作有,各种批量操作,通常使用的是批量上下电虚拟机,批量创建虚拟机等
Block zero
是一种关于格式化磁盘的方式,也叫write same
传统方式对虚拟磁盘格式化是通过VMware vSphere不断以小块形式发送SCSI WRITE命令来实现,SCSI WRITE命令下发整个虚拟磁盘大小的零数据。这种方式一样会强依赖于带宽。
支持VAAI Block Zero特性的存储阵列,VMware vSphere通过下发WRITE_SAME的SCSI指令来进行虚拟磁盘格式化,该指令携带待格式化的数据范围、数据模板,这样避免下发大量置零数据,再由存储测完成写零后在返回主机测
常见的VMware操作主要是 创建虚拟机磁盘(后置备快速置零格式可以立即触发该操作)。
Umap
全称 Thin Provisioning Unmap,相比于前面三个做的是性能加速,umap主要是为了提升空间的使用率的
unmap是针对精简配置的存储阵列做空间回收,提高存储空间使用效率,应用于删除虚拟机文件的场景。VMware向存储阵列发送UNMAP的SCSI指令,存储释放相应空间。
VMware上相关的操作,删除虚拟机就是一个触发unmap的场景,但是VMFS的格式又区分VMFS5和VMFS6,VMFS6才支持自动unmap,即删除完成后,自动触发unmap命令,而VMFS5需要手动执行unmap
esxcli storage vmfs unmap -l datastore名字 可以执行手动空间回收
当然我们可以通过对应的命令来查看我们的存储是否支持以上的功能,从下图可以看到我们的存储是支持VAAI的所有4种特性的
esxcli storage core device vaai status get