We want to speed up common VM disk operations such as:
- deleting disks
- creating empty disks
- cloning disks
Ideally the host would send the commands to the storage server/target and allow it to Do The Right Thing. Many arrays are 'smart' in the sense that they maintain block allocation maps and can create trees of disk clones without explicitly copying all the blocks. Even when an array doesn't have such smarts it is still better to copy blocks across the internal array fabric than across the host to array network link.
The VMware vStorage APIs for Array Integration (VAAI) are a defacto standard which allow common VM disk operations to be sped up including
- Atomic Test and Set (ATC): for fast LV locking
- Block-level Zero: for blanking freshly-created LVs
- Block-level Clone: for getting the array to copy LVs
- Block-level Delete: to clear unused space
(for more information see http://linux-iscsi.org/wiki/VStorage_APIs_for_Array_Integration )
How can we take advantage of storage arrays which support these?
Notes on VAAI
The APIs are presented as SCSI commands and have been implemented in the Linux-IO software target which has achieved VMware certification in several hardware products.
- Linux has a BLKZEROOUT ioctl
- Linux 3.12 has EXTENDED COPY which you can run via sg_xcopy
- Linux 3.16-rc4 has a fixed EXTENDED COPY which is enough for a proof-of-concept device mapper implementation (Jul 2014). This is automatically used if you use mirror, snapshot, thin or cache dm targets.
- Windows uses ODX (Offloaded Data Transfer) rather than EXTENDED COPY
- A comparison of file vs block primitives: http://cormachogan.com/2012/11/08/vaai-comparison-block-versus-nas/
- A draft of NFS v4.2 has server-side copy