Controlling the vhba Module's Use of Asynchronous I/O

The vHBA subsystem causes a significant negative performance impact for software that performs asynchronous I/O (AIO). This negative performance occurrs because the vhba module erroneously serializes calls to the aioread() and aiowrite() routines. See the aioread(3C) and aiowrite(3C) man pages. This behavior severely degrades latency and bandwidth for software such as Oracle's database implementations.

The vhba:vhba_nointr kernel tunable in the /etc/system file specifies whether the vhba module uses the AIO algorithm. When set to 0, the vhba module supports the AIO algorithm. When set to 1, the vhba module does not use the new AIO algorithm.

Starting with the Oracle Solaris 11.4 SRU 30 release, the vhba:vhba_nointr tunable is set to 1 by default.

To improve performance when you run applications that use AIO, set the vhba:vhba_nointr value to 0. You must reboot any domain in which the vhba module runs to ensure that the change takes affect.

Note that any software that issues synchronous I/O to the vhba module is unaffected by the vhba:vhba_nointr tunable. Synchronous I/O uses the read(), pread(), write(), and pwrite() system calls. See the pread(2), pwrite(2), read(2), and write(2) man pages.