This patch introduces a new xnvme fio engine. xNVMe provides an API for synchronous and asynchronous I/O. A library backs the API, libxnvme, which provides implementations for API users to run their I/O application on Linux, FreeBSD, macOS, and Windows without changing the application code. Implementations of sync. interfaces include: * psync (preadv/pwritev) * Linux NVMe driver-ioctl * FreeBSD NVMe driver-ioctl Implementations of async. interfaces include: * io_uring * io_uring_cmd (experimental) * libaio * POSIX aio In addition to the OS-managed interfaces, the library also utilize user-space NVMe-drivers e.g. the SPDK NVMe/driver. Furthermore, "async-fallbacks" provide "async-emulation" in a sequential form and using a thread pool. Finally, a "nil" implementation is available to evaluate encapsulation/library overhead. The xNVMe C API currently supports Windows interfaces: Windows Storport, IOCP, and experimental io_ring. However, these are not functional with the engine due to a few missing dependencies. For more info on visit https://xnvme.io https://github.com/OpenMPDK/xNVMe This patch also includes two example job files for Conventinal and ZNS specific commands. In addition, it demonstrates how to instrument the engine to use different interfaces and with a user-space NVMe driver. Ankit Kumar (3): engines/xnvme: add xnvme engine docs: documentation for xnvme ioengine examples: add example job file for xnvme engine usage HOWTO.rst | 51 +- Makefile | 7 +- configure | 22 + engines/xnvme.c | 1000 ++++++++++++++++++++++++++++++++++++ examples/xnvme-compare.fio | 72 +++ examples/xnvme-zoned.fio | 87 ++++ fio.1 | 67 ++- optgroup.h | 2 + options.c | 5 + 9 files changed, 1308 insertions(+), 5 deletions(-) create mode 100644 engines/xnvme.c create mode 100644 examples/xnvme-compare.fio create mode 100644 examples/xnvme-zoned.fio -- 2.17.1