vHBA and AIO

In Oracle Solaris 11.4 SRU30 there was an important change with LDOMS you should be aware of as you probably have to do an administrative step to get best performance. That’s the reason While it’s documented in the release notes i’m using the opportunity to highlight it in the blog as release notes are somewhat lesser read documents. In the past a situation was seen that applications that do asynchronous i/O saw bad performance which stem out of the fact that vHBA made essentially synchronous I/O out of asynchronous I/O.

Or as the release notes for Oracle Solaris 11.4 SRU 30 states it on page 3:

This negative performance occurred because the vhba module erroneously serialized calls to the aioread() and aiowrite() routines.

A fix was made that now can be activated by configuration. But it’s important to know, that by default Solaris 11.4 SRU30 doesn’t activate the optimizations. If you want to use the optimizations in action because you are using AIO and vHBA, you have to add the following statement to /etc/system, albeit in the age of a self assembling /etc/system i would suggest to place a file called aio into /etc/system.d with a single line

set vhba:vhba_nointr=0

Afterwards reboot all LDOMs where the vhba module is in use.

It’s only nescessary to use the statement if you are using vHBA and async IO. For normal synchronous I/O (like read(), pread(), write(), and pwrite() ) nothing changes at all. A DTrace script to check if you are using AIO is available at support.oracle.com in the Document with the ID 2734365.1. If you are running an Oracle Database, activating this feature is probably a very good idea.