Async I/O via iocp#

When AIO is available then the NVMe NVM Commands for Read and Write are sent over the Windows IOCP interface. Doing so improves command-throughput at higher queue-depths when compared to sending the command via the NVMe driver ioctl().

One can explicitly tell xNVMe to utilize iocp for async I/O by encoding it in the device identifier, like so:

xnvme_io_async read \\.\PhysicalDrive0 --slba 0x0 --qdepth 1 --async iocp

Yielding the output:

# Allocating and filling buf of nbytes: 512
# Initializing queue and setting default callback function and arguments
# Read uri: '\\.\PhysicalDrive0', qd: 1
# Range: {slba: 0x0, naddrs: 1, nbytes: 512}
wall-clock: {elapsed: 0.0002, mib: 0.00, mib_sec: 2.08}
# cb_args: {submitted: 1, completed: 1, ecount: 0}