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.