Veni, vidi, VAAI

Veni, vidi, VAAI

Recently, I was asked to investigate a performance issue on a VMware environment. Configuration of the ESXI hosts and storage was just finished and engineers were busy deploying Virtual Machines from a Template. The main issue was; “Actual time to deploy a VM is much more than expected”.

The Environment consists of the following components:

  • Dell Equallogic PS4100X, with 24 x 300 GB 10K SAS drives in RAID-50 config;
  • Storage switches, two Dell PowerConnect 6224 stacked;
  • ESXi servers, three Dell R815, 32 GB and 6 NICs;
  • VMware vSphere 5 Enterprise Edition.

Veni

First step was to check the configuration of the components. Configuration of the servers and storage was according to Dell’s “Configuring VMware vSphere Software iSCSI with Dell EqualLogic PS Series Storage”.

At first glance, everything seems to be OK, so now it is time to do some testing and see with my own eyes what is going on. I started the deployment of a template of a VM, configured with a 60 GB virtual disk on the same ESXI server, at the same time logged in on the console and started esxtop and switched to the “disk adapter” view. During the deployment, the iSCSI software adapter (vmhba40) showed a steady 60 MB/s read (MBREAS/s) and 60 MB/s write (MBWRTN/s). The Total Latency (GAVG/cmd) is 4.10 ms., which is fine (as Mr. Eric Sloof explained in an Advanced Troubleshooting presentation).


The total time for this deployment was at least 15 minutes.

Vidi

These performance figures did not seem too bad, and now?
Luckily, I had the opportunity to repeat this Deployment test at another location. The shared storage was also a Dell Equallogic 4100 series. It was surprising to see that the deployment took only a few minutes and esxtop showed this: (the iSCSI software adapter is vmhba37).

Remarkable, no data Reads and no Writes, just an extremely high latency, GAVG/cmd= 102…

VAAI

Time for a cup of coffee. While taking a break, I remembered something about VAAI. A good introduction to VAAI is this post on the VMware communities. It is not 100% up-to-date, but contains useful information and some good links to other information.

Other recommended reading is the “vSphere Storage” guide, Chapter 18 “Storage Hardware Acceleration”. To be more precise, since vSphere version 5, VAAI has been renamed to “Storage APIs – Array Integration” and includes “Hardware Acceleration APIs” and “Array Thin Provisioning APIs”. All of these are part of a much larger family of Storage APIs.

In short, VAAI was the acronym for vStorage APIs for Array Integration and was introduced in vSphere 4.1. VAAI can offload specific storage operations to compliant storage hardware, which results in less CPU, memory and storage fabric bandwidth consumption. VAAI can enhance standard vSphere operations like:

  • Storage vMotions;
  • Provisioning a VM from a template;
  • Using the Thin provisioning functionality

As said before, in vSphere 5, VAAI has been renamed and functionality has been extended to support NAS. There are of course a few conditions, VAAI requires vSphere Enterprise or Enterprise Plus licenses and compatible storage.

But does it work?

On a ESXI host, Hardware Acceleration for block storages devices is enabled by default. You can check with your vSphere Client. Go to Configuration, Storage (Hardware section), under Datastores, the last column shows the Hardware Acceleration Status. Three options: Supported, Not Supported and Unknow.

It is possible to disable the hardware acceleration functions. In the vSphere Client, go to the Configuration section, and enter the “Advanced Settings”. Check if any of these values were set to 0 (means disabled) :

  • VMFS3.HardwareAcceleratedLocking
  • DataMover.HardwareAcceleratedMove
  • DataMover.HardwareAcceleratedInit

You should also check if the required single VAAI filter and vendor specific plug-ins are loaded on a ESXi host. There are several ways to complete this action, with help of the vSphere CLI, the vMA or by opening a SSH session to an ESXi host (I do not recommend to leave the SSH service running while in production, but it is very useful during the implementation…):

# esxcli storage core plugin list --plugin-class=VAAI
Plugin name    Plugin class
-------------  ------------
VMW_VAAIP_EQL  VAAI

# esxcli storage core plugin list --plugin-class=Filter
Plugin name  Plugin class
-----------  ------------
VAAI_FILTER  Filter

To verify the hardware acceleration support status of all devices on a host:

# esxcli storage core device list
naa.64ed2a25171b27d689f6c4010000604d
   Display Name: EQLOGIC iSCSI Disk (naa.64ed2a25171b27d689f6c4010000604d)
   Has Settable Display Name: true
   Size: 30720
   Device Type: Direct-Access
   Multipath Plugin: NMP
   Devfs Path: /vmfs/devices/disks/naa.64ed2a25171b27d689f6c4010000604d
   Vendor: EQLOGIC
   Model: 100E-00
   Revision: 5.1
   SCSI Level: 5
   Is Pseudo: false
   Status: on
   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.020000000064ed2a25171b27d689f6c4010000604d313030452d30

The important line here is: VAAI Status: supported
With this command, you will get the Hardware Acceleration Support Details:

# esxcli storage core device vaai status get
naa.64ed2a25171b27d689f6c4010000604d
VAAI Plugin Name: VMW_VAAIP_EQL
ATS Status: supported
Clone Status: supported
Zero Status: supported
Delete Status: supported
mpx.vmhba32:C0:T0:L0
VAAI Plugin Name:
ATS Status: unsupported
Clone Status: unsupported
Zero Status: unsupported
Delete Status: unsupported

Each block storage device managed by a VAAI plug-in needs 2 claim rules, one that specifies the hardware acceleration filter and another that specifies the hardware acceleration plug-in for the device:

# esxcli storage core claimrule list --claimrule-class=Filter
Rule Class   Rule  Class    Type    Plugin       Matches
----------  -----  -------  ------  -----------  ----------------------------
Filter      65429  runtime  vendor  VAAI_FILTER  vendor=MSFT model=Virtual HD
Filter      65429  file     vendor  VAAI_FILTER  vendor=MSFT model=Virtual HD
Filter      65430  runtime  vendor  VAAI_FILTER  vendor=EMC model=SYMMETRIX
Filter      65430  file     vendor  VAAI_FILTER  vendor=EMC model=SYMMETRIX
Filter      65431  runtime  vendor  VAAI_FILTER  vendor=DGC model=*
Filter      65431  file     vendor  VAAI_FILTER  vendor=DGC model=*
Filter      65432  runtime  vendor  VAAI_FILTER  vendor=EQLOGIC model=*
Filter      65432  file     vendor  VAAI_FILTER  vendor=EQLOGIC model=*
And some more vendors…

# esxcli storage core claimrule list --claimrule-class=VAAI
Rule Class   Rule  Class    Type    Plugin            Matches
----------  -----  -------  ------  ----------------  ----------------------------
VAAI        65429  runtime  vendor  VMW_VAAIP_MASK    vendor=MSFT model=Virtual HD
VAAI        65429  file     vendor  VMW_VAAIP_MASK    vendor=MSFT model=Virtual HD
VAAI        65430  runtime  vendor  VMW_VAAIP_SYMM    vendor=EMC model=SYMMETRIX
VAAI        65430  file     vendor  VMW_VAAIP_SYMM    vendor=EMC model=SYMMETRIX
VAAI        65431  runtime  vendor  VMW_VAAIP_CX      vendor=DGC model=*
VAAI        65431  file     vendor  VMW_VAAIP_CX      vendor=DGC model=*
VAAI        65432  runtime  vendor  VMW_VAAIP_EQL     vendor=EQLOGIC model=*
VAAI        65432  file     vendor  VMW_VAAIP_EQL     vendor=EQLOGIC model=*

All this seems to be OK.

The last section of Chapter 18 of the “vSphere Storage Guide” is called “Hardware Acceleration Considerations”. Perhaps “Hardware Acceleration Limitations” is a better choice. 🙂

The VMFS data mover does not leverage hardware offloads and instead uses software data movement when one of the following occurs:

  • The source and destination VMFS datastores have different block sizes.
  • The source file type is RDM and the destination file type is non-RDM (regular file).
  • The source VMDK type is Eager Zeroed Thick and the destination VMDK type is Thin.
  • The source or destination VMDK is in sparse or hosted format.
  • The source virtual machine has a snapshot.
  • The logical address and transfer length in the requested operation are not aligned to the minimum alignment required by the storage device. All datastores created with the vSphere Client are aligned automatically.
  • The VMFS has multiple LUNs or extents, and they are on different arrays.
  • Hardware cloning between arrays, even within the same VMFS datastore, does not work.

This section is a nice checklist!
It is time to do some investigation on the Template VM. After converting the Template to a VM, the performance issue becomes clear. The VM has snapshots, so the VMFS data mover is not able to offload the deployment to the storage array. Also notice the disk provisioning type, in some cases this type can also cause problems.

After removing the snapshots, deployments are now finished within 1 minute instead of 20.

To conclude, this issue has learned me a few things about the Hardware Acceleration functionality. As always, I hope you enjoyed reading this troubleshooting session and I welcome your comments.

BTW, the title of this post was derived from the sentence “Veni, vidi, vici”, made famous by Julius Caesar, see this link for more information.

3 thoughts on “Veni, vidi, VAAI

  1. Dave Boone 17/12/2013 / 18:57

    nice post. I found the esxcli storage core command examples helpful.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.