Async I/O via libaio
#
When AIO is available then the NVMe NVM Commands for read and write are sent over the Linux AIO interface. Doing so improves command-throughput at higher queue-depths when compared to sending the command over via the NVMe driver ioctl().
One can explicitly tell xNVMe to utilize libaio
for async I/O by
encoding it in the device identifier, like so:
xnvme_io_async read /dev/nvme0n1 --slba 0x0 --qdepth 1 --async libaio
Yielding the output:
# Allocating and filling buf of nbytes: 4096
# Initializing queue and setting default callback function and arguments
# Read uri: '/dev/nvme0n1', qd: 1
xnvme_lba_range:
slba: 0x0000000000000000
elba: 0x0000000000000000
naddrs: 1
nbytes: 4096
attr: { is_zones: 0, is_valid: 1}
wall-clock: {elapsed: 0.0000, mib: 0.00, mib_sec: 265.77}
# cb_args: {submitted: 1, completed: 1, ecount: 0}