Today we continue our series on VAIO. You can start with the prologue ("Running vSphere 6? Why you should care about VAIO") or just start here.
vSphere APIs for IO filters, ("VAIO") is a fantastic new set of APIs from VMware that enable ISVs like us fast and secure access to the data path. Because it is so new, there isn’t yet a flood of API coding walkthroughs or install videos. With this post we hope to provide a brief intro to the technology and along the way show some of what is happening behind the scenes. If you’re like us, you don’t like being forced to deal with complexity on a day-to-day basis but you still like to understand how it works.
What is VAIO?
VAIO is a collection of new APIs available to VMware ecosystem partners for the purpose of interacting with a virtual machine’s disk I/O. The program allows partners to create plugins that live both within the vmkernel and within the VMX process. By allowing this, VMware has further enabled a class of products like ours. Not only do we have an improved and fully sanctioned set of I/O and disk access APIs but also the performance to back up the design. I’ll warn you, SAN access latencies measured in 10’s of microseconds is addictive.
As expected, VAIO comes with a full suite of the standard management endpoints expected of a VMware plugin. Methods called via esxcli or through the managed object browser (MOB) are supported, though there are some “gotchas” one should be aware of. We’ll cover some of them today and others in another post.
To start, let's establish that I/O filters are a vSphere cluster-wide construct. This is both for cache coherency reasons and also to ensure that normal day-to-day operations like vMotion continue to work transparently to the user. If you add a new host to a cluster that has an I/O filter installed on it, VMware’s ESX Agent Manager ("EAM") will install the filter to the new host automatically. Conversely, if you try to break the association between a filter-enabled VM and a host that has the filter installed by migrating the VM to a different cluster, vCenter will prevent this.
How are I/O filters installed?
I/O filters are installed using a VMware installation bundle (a "VIB"), a construct most VMware admins are well-versed in. Many VIBs can be installed using the “esxcli software vib install” method, however, since I/O filters are a cluster-wide construct, they require you to broker the install through vCenter. EAM, mentioned above, is the endpoint that orchestrates this. From your perspective, the Infinio Management Console takes care of this for you with a quick 2- or 3-click workflow so you never need to install, uninstall, or upgrade I/O filters directly.
For troubleshooting and similar purposes, the IOFilterManager APIs can be accessed using the MOB.
Here we show a QueryIoFilterInfo call and the resulting filter details:
All that is required is the name of your cluster ComputeResource and the MOB happily spits back the filter details. In it we see that Infinio Accelerator has been installed under the driver name “iniaccel”.
The same info as above is also available from each host using esxcli, however, if you wish to install or uninstall a filter using one of these methods, make sure to use the MOB or call the IoFilterManager APIs directly. Esxcli does not currently inform vCenter of the changes being made to the hosts which will result in an undefined state. (Only try this with I/O filters which do not start with “ini*”!)
Installing an I/O filter alone is not sufficient to start using it. There needs to be an association made between the filter and a VMDK. Starting in vSphere 6 this is done using Storage Policies - which I'll cover in my next post. Meanwhile, if you'd like to try our VAIO-based storage acceleration product, you can: