There are several components required in the VMkernel to make VAAI work correctly. The first of these is the
Pluggable Storage Architecture (PSA) device filter framework. This is a feature that is intended to facilitate
device-level value-add into the PSA I/O stack. It enables VMware to introduce new value-add into the PSA stack
asynchronously, decoupling it from the vSphere release cycle. The primary motivation is to support VAAI.
Without the PSA device filter framework, VAAI would have to be implemented in the storage array type policy
(SATP) on a per-array basis. Implementation in the PSA device filter framework reduces duplicate code and
saves memory space in the VMkernel. Also, if VAAI were implemented in the SATP, it would prevent other
third-party plug-ins, such as EMC PowerPath, from using the offload primitives.
The term “filter” is somewhat misleading because the PSA device filter framework enables specific value-added
software to be inserted between VMFS and the PSA device layer.
The second required component can be referred to as a VAAI plug-in specific to the VAAI filter. It implements
vendor-specific VAAI functions such as ATS, XCOPY and WRITE_SAME. There were different implementations
of the VAAI block primitives in vSphere 4.1, but all of the primitives in vSphere 5.0 have been ratified by T10, so
any array that is T10 compliant should be able to use VAAI.![]()
To leverage VAAI functionality on a LUN, you must have both a PSA device filter and a vendor-specific VAAI
plug-in for each device. VMware has a single PSA device filter plug-in called VAAI_FILTER. If a device supports
VAAI offloads, it first will be claimed by the VAAI filter, VAAI_FILTER. After it has been claimed by the filter, a
vendor-specific VAAI plug-in will claim and then manage the device.
The following commands display the claim rules that are associated with device filters in the PSA.
By using the following command, you can check whether an individual device has been claimed by the VAAI filter. As is shown in the following, the Attached Filters and VAAI Status fields are located toward the end of the output:
~ # esxcli storage core device list -d naa.xxx
naa.xxx
Display Name: NETAPP iSCSI Disk (naa.xxx)
Has Settable Display Name: true
Size: 20480
Device Type: Direct-Access
Multipath Plugin: NMP
Devfs Path: /vmfs/devices/disks/naa.xxx
Vendor: NETAPP
Model: LUN
Revision: 8020
SCSI Level: 4
Is Pseudo: false
Status: degraded
Is RDM Capable: true
Is Local: false
Is Removable: false
Is SSD: false
Is Offline: false
Is Perennially Reserved: false
Thin Provisioning Status: yes
Attached Filters: VAAI_FILTER
VAAI Status: supported
Other UIDs: vml.xxx
If a device supports VAAI and has been claimed successfully by the VAAI filter, the filter will appear in the
plug-in list command:
~ # esxcli storage core plugin list
Plugin name Plugin class
---------------- ------------
VMW_VAAIP_NETAPP VAAI
VAAI_FILTER Filter
NMP MP
In this example, the VAAI filter and the vendor-specific VAAI plug-in are displayed.
Finally, another CLI command can be used to verify which vendor-specific VAAI plug-in has claimed a device.
This command shows both the VAAI plug-in name and the primitives that it supports.
~ # esxcli storage core device vaai status get -d naa.xxx
naa.xxx
VAAI Plugin Name: VMW_VAAIP_NETAPP
ATS Status: supported
Clone Status: supported
Zero Status: supported
Delete Status: supported