Async. I/O via io_uring#
xNVMe supports io_uring by mapping the NVMe NVM Commands Read
and Write to io_uring opcodes:
IORING_OP_READ/IORING_OP_WRITEMapped when using
xnvme_cmd_pass(..)with payload as contiguous / fixed buffers
IORING_OP_READV/IORING_OP_WRITEVMapped when using
xnvme_cmd_pass_iov(...)with payload as iovec
IORING_OP_READ_FIXED/IORING_OP_WRITE_FIXEDMapped by the
io_uring_dmabufbackend when the payload is GPU memory registered as adma-buf, see Async. I/O on GPU memory via io_uring_dmabuf
Passthru#
If you are looking to do command-passthru, that is, send arbitrary user-defined
NVMe commands via the Linux kernel NVMe driver, then io_uring is not the
backend configuration to use. Rather, select one of:
opts = {.be="io_uring_cmd"},NVMe passthru viaio_uringbig-SQE/big-CQE, see Async. I/O via io_uring_cmdopts = {.be="emu"},emulated async using synchronous NVMe ioctl passthru, see Async. I/O via emuopts = {.be="thrpool"},thread-pool based async using synchronous NVMe ioctl passthru, see Async. I/O via thrpool