uPCIe (host memory)#

The upcie backend allocates I/O buffers from a DMA heap backed by hugepages in host memory. Physical addresses are resolved via /proc/self/pagemap and cached at allocation time, so no address translation is needed on the I/O path.

System Configuration#

Hugepages#

xnvme-driver configures hugepages as part of device setup. To allocate them manually:

echo 128 | tee -a /proc/sys/vm/nr_hugepages
ulimit -l unlimited

Each hugepage is 2 MiB by default. The number required depends on the total DMA buffer space needed by the application.

Limitations#

  • No buf_realloc. Buffer reallocation is not implemented and returns ENOSYS.

  • No memory mapping (mem_map / mem_unmap). These return ENOSYS.

  • Controller reset and subsystem reset are not supported. These operations disable the controller and re-enable it, but do not re-program the admin submission/completion queues. Without full re-initialization the controller times out waiting for the first admin command after re-enable. Both pseudo commands return ENOSYS.