System and method for user space NVMe-over-RDMA host library
AssigneeEMC IP Holding Company LLC
InventorsAlexander Barabash, Eldad Zinger, Leonid Ravich, Or Idgar, Vitaly Zharkov
Life of this patent
Estimating the term…
Abstract
A method, computer program product, and computer system for exposing, by a user block layer of a computing device, a storage device as a block device to an application associated with an IO request. A Non-Volatile Memory Express (NVMe) protocol layer of the computing device may expose a NVMe storage device associated with the IO request to the user block layer. A NVMe-over-RDMA layer of the computing device may create a NVMe RDMA queue for the IO request to be processed.
Claims15
A computer-implemented method comprising:
- exposing, by a user block layer of a computing device, a storage device as a block device to an application associated with an IO request, wherein the user block layer includes an interface layer exposing the storage device to the application, exposing a unified API for all supported block device back ends, and implementing common mechanisms for block device back ends;
- obtaining, by the user block layer, an IO descriptor list and a destination namespace associated with the IO request, wherein each IO descriptor of the IO descriptor list includes one or more of a command ID, and IO vector, and an op-code;
- pre-registering, by the user block layer, application memory used for IO data associated with the IO request, wherein pre-registering the application memory occurs before processing the IO request and includes
- pinning physical memory within the application memory and
- preparing a virtual to physical address translation;
- exposing, by a Non-Volatile Memory Express (NVMe) protocol layer of the computing device, a NVMe storage device associated with the IO request to the user block layer;
- and
- creating, by a NVMe-over-Remote Direct Memory Access (RDMA) layer of the computing device, a NVMe RDMA queue for the IO request to be processed.
A computer program product residing on a non-transitory computer readable storage medium having a plurality of instructions stored thereon which, when executed across one or more processors, causes at least a portion of the one or more processors to perform operations comprising:
- exposing, by a user block layer of a computing device, a storage device as a block device to an application associated with an IO request, wherein the user block layer includes an interface layer exposing the storage device to the application, exposing a unified API for all supported block device back ends, and implementing common mechanisms for block device back ends;
- obtaining, by the user block layer, an IO descriptor list and a destination namespace associated with the IO request, wherein each IO descriptor of the IO descriptor list includes one or more of a command ID, and IO vector, and an op-code;
- pre-registering, by the user block layer, application memory used for IO data associated with the IO request, wherein pre-registering the application memory occurs before processing the IO request and includes
- pinning physical memory within the application memory and
- preparing a virtual to physical address translation;
- exposing, by a Non-Volatile Memory Express (NVMe) protocol layer of the computing device, a NVMe storage device associated with the IO request to the user block layer;
- and
- creating, by a NVMe-over-Remote Direct Memory Access (RDMA) layer of the computing device, a NVMe RDMA queue for the IO request to be processed.
A computing system including one or more processors and one or more memories configured to perform operations comprising:
- exposing, by a user block layer of a computing device, a storage device as a block device to an application associated with an IO request, wherein the user block layer includes an interface layer exposing the storage device to the application, exposing a unified API for all supported block device back ends, and implementing common mechanisms for block device back ends;
- obtaining, by the user block layer, an IO descriptor list and a destination namespace associated with the IO request, wherein each IO descriptor of the IO descriptor list includes one or more of a command ID, and IO vector, and an op-code;
- pre-registering, by the user block layer, application memory used for IO data associated with the IO request, wherein pre-registering the application memory occurs before processing the IO request and includes
- pinning physical memory within the application memory and
- preparing a virtual to physical address translation;
- exposing, by a Non-Volatile Memory Express (NVMe) protocol layer of the computing device, a NVMe storage device associated with the IO request to the user block layer;
- and
- creating, by a NVMe-over-Remote Direct Memory Access (RDMA) layer of the computing device, a NVMe RDMA queue for the IO request to be processed.
Dependencies are inferred from the claim text.