在虚拟服务器环境中,其存储硬件和Hypervisor管理程序的通讯非常复杂。VMware为简化其通讯并提高效率,研发了vStorage阵列集成应用接口(VAAI)。该应用接口为Hypervisor管理程序和存储设备规范了不同的职责,使其各自关注工作效能最大化,即Hypervisor致力于虚拟化相关的工作而存储相关的工作则留给存储阵列。

通过VAAI,存储阵列厂商可以直接将其存储硬件及应用程序和vSphere进行集成。VAAI使得某些存储层的工作,诸如克隆等,可以在存储阵列上离线运行,这较在主机端完成更为高效。主机端可以简单地将相关工作转到存储阵列上完成,而主机端只负责过程监控,而非使用主机端的资源来完成(在VAAI之前的产品即是如此)。存储阵列更擅长此类数据工作,可以较主机端更为快速的完成相关服务请求。

vStorage阵列集成应用接口工作原理

VAAI是“vStorage APIs for Array Integration”的缩写。从中我们可以理解最基本的一点就是在vSphere4.1中,VMware已经预先植入了新的软件代码,用以支持存储厂商可以和vSphere 4.1进行智能地整合。这也就是说存储阵列已经成为“vm-aware”。这一点看起来就如同处理器厂商在CPU中加入的用于改善虚拟化性能和安全属性的Intel-VT或AMD-V技术一样,存储厂商所做的内容也类似(在它发挥作用后,我们可以把VAAI想象成用于支持硬件存储设备的软件助理)。现有的VAAI中包含了三项用于改善性能的新特性,而原本应该有四大特性的存在。

特性一:Full Copy或Copy Offload

第一项特性被称为Full Copy,而部分厂商也把这项称为Copy Offload。这个功能是VMware需要做虚拟机文件复制的时候,把指令给存储,让存储在底层完成复制的功能。vSphere 4中,当我们从模板来创建一个新的虚拟机时,无论是FC、iSCSI或NFS系统中,都需要对其中存储的源数据文件从头到尾进行一次全读取操作,然后再重新写入到新的目标地点。这样的过程会极大地增加ESX宿主机的CPU负载,而且会导致新虚拟创建的过程去占用大量原本应该用于支持现有生产虚拟机运行的宝贵的IOPS资源。

即使是在现今的瘦虚拟磁盘技术下,新虚拟机的部署也会涉及对冗长的状态栏的读取过程。VAAI的Full Copy或Copy Offload功能,则可以通过在磁盘阵列内部(不支持跨阵列)实现从一个卷到另一个卷的智能拷贝过程来消除这种影响。VMware宣称这样的一项技术可以实现10倍到20倍的性能提升,同时为虚拟桌面架构的应用铺平道路,新虚拟机创建时间相比之前的方式可以大幅地缩短。

所有需要启用容错(FT)功能的虚拟机,它们的虚拟磁盘必须从原来的thin disk 或zeroed thick disk方式,转化为称为eager zeroed thick disk的磁盘格式。这个转化过程会占用大量的时间,因为这个转化过程同安全擦除操作类似,需要涉及对虚拟磁盘中每个扇区的清零操作。

选项 操作

精简置备

(thin disk)

创建时虚拟磁盘不会分配给所有需要的空间,而是根据需要,vmdk自动增大并一边zero一边使用这些新空间;vmdk文件的真实大小不等于创建的虚拟磁盘的大小,而只是等于实际数据的大小。(zero就是对磁盘空白处写入0,可以理解或者翻译成初始化)。

置备延迟置零

(thick disk,也叫zeroedthick disk)

创建时分配给所有空间,vmdk文件大小等于创建的虚拟磁盘大小,虚拟磁盘中的空闲空间被预占,但空闲空间(empty space)并没有zeroed,需要在使用的时候再zero。由于磁盘在第一次写入时必须zero,这个类型的磁盘在第一次磁盘块写入时会有轻微的I/O性能损失。

厚置备置零

(eagerzeroedthick disk)

在创建时分配给所有空间,vmdk文件大小等于创建的虚拟磁盘大小,虚拟磁盘中的空闲空间被预占。另外,在创建磁盘时,会将所有数据块都初始化(zero),这将花费更多时间。这种格式的磁盘因为已经zero化,使用时不再需要zero,因此第一次写入数据到磁盘块时的性能较好。

最后一点,其它的一些存储相关操作,例如虚拟机克隆,模板化部署,Storage vMotin(实现虚拟机从源站点到目标站点的迁移过程),在采用VAAI技术后都可以在阵列端实现明显的性能提升。

vStorage APIs for Array Integration (VAAI简介)_第1张图片

特性二:Block Zeroing

第二项属性被称为Block Zeroing。这一功能依然和克隆的进程紧密相关。在虚拟磁盘文件内部同时存在着数据区(写有数据的扇区)和等待写入的空白区(空扇区)。

从本质上看,我们可以把虚拟机的克隆过程作为一个完整的文件拷贝过程来对待。整个过程就是组成虚拟机的磁盘文件被从源数据区拷贝到目标地点。在之前的版本下,假设我们需要拷贝40GB大小的虚拟磁盘文件,其中有10GB的数据区。那么在部署过程中,在为10GB数据的移动占用IOPS的同时,还需要发送大量重复的SCSI命令,用于完成对组成该磁盘文件的大量空白扇区的迁移和写入。

Block Zeroing 技术可以节省大量的从ESX主机发送到磁盘阵列的SCSI命令。如果存储支持这个功能,那么VMware下发一个Write Same的SCSI命令就可以完成所有写零工作了,存储只需要分配相应的空间,然后不做具体的写零操作,就返回给VMware。下次需要访问这些空间的时候,所有做有写零标志的地址就返回零,不需要真正去做写零操作。

Block Zeroing也使得VMware FT过程的启用变得相对简单而快捷。所有需要启用容错(FT)功能的虚拟机,它们的虚拟磁盘必须从原来的thin disk 或zeroed thick disk方式,转化为称为eager zeroed thick disk的磁盘格式。转化过程会占用大量的时间,因为这个转化过程同安全擦除操作类似,需要涉及对虚拟磁盘中每个扇区的清零操作。结合VAAI的Block Zeroing技术后,可以极大地节省该过程所需的SCSI命令数量。

vStorage APIs for Array Integration (VAAI简介)_第2张图片

特性三:Scalable Lock Management

第三项特性称为“Scalable Lock Management”。其实早在ESX 2.x起,VMware就开始在它的文件系统VMFS(Virtual Machine File System)中通过采用SCSI Reservation Lock技术,来实现多个ESX主机对同一个数据源文件的共享访问。这种锁定技术允许来自不同ESX主机上的多个访问可以到达同一个数据文件,而更重要的一点是可以避免发生冲突。例如,避免有两个VMware管理员同时尝试在同一个卷上创建一个完全相同的虚拟机。在虚拟机启动后,它的文件就变成锁定状态。如同在共享系统中被打开的文档处于锁定状态一样。通过这种处理可以防止发生一些低级的管理员事故,例如可以防止在虚拟机启动(或使用)时对虚拟机(或文档)进行删除操作。

本质上VMFS是一个共享文件系统,之前在一些特殊应用中,如VMotion,对于VMFS的使用是强制性的。在VI3.0发布之后,VMware引入了 对NFS协议的支持,包括一些同样基于SCSI Reservation Locks技术支持的新功能:High Availability 和 Distributed Resource Scheduler。

多年以来,VMware编写和重新修订了很多VMFS驱动,希望可以降低由于SCSI reservations操作带来的性能影响。这些SCSI reservations操作带来的影响,在一些文件系统需要面临大量变化的时候会表现得非常明显,VMware把这种情形统称为:“VMFS Metadata”升级。其中包括了VMotion、创建新的虚拟机、启动或关闭虚拟机、删除虚拟机或者是做快照等等多个任务。

这些都是在VMware环境中很常见的事件,它们中的每一个操作都需要进行强制锁定。现在,很重要的一点是我们决不能夸大这种锁定过程带来的影响,因为多数的用户都没有明显感觉到。这就是VMFS的优势所在。换句话,所有可以减少或去除ESX主机所需锁定进程的改善都是有意义的。所以这项特性,我们可以称其为"Hardware Assisted Locking",硬件辅助锁定,也称为原子测试和设置,Atomic Test & Set (ATS)是同一个意思

vStorage APIs for Array Integration (VAAI简介)_第3张图片

特性四:UNMAP

前三个特性是做硬件加速以提高性能,这个特性是用于空间回收的,空间回收分为离线方式和在线方式,在线方式又可以分为写零回收和UNMPA/Trim回收。UNMPA指的是当存储上的文件被删除时,会触发一个SCSI UNMAP给存储,存储如果可以识别这个命令,就可以释放相应的空间。在vSphere 5.0之前,只支持写零方式的回收,现在已经支持UNMAP,但由于和存储的vMotion和VM快照的冲突,该功能默认为禁用状态,需要手工执行。

vStorage APIs for Array Integration (VAAI简介)_第4张图片

VAAI的四个功能可以通过CLI的方式进行查询。

vStorage APIs for Array Integration (VAAI简介)_第5张图片

VAAI引入了大量的新选项和终端作为其内在优势。在ESX主机端,VAAI默认是被启用的,如果阵列端无法支持VAAI,那么这些相应的选项就不会出现。如果想了解更多关于这些新特点的设置问题,请参考:“VMware’s vStorage APIs for array integration FAQ”。