xNVMe: Programming Emerging Storage Interfaces for Productivity and Performance

Library Content Type:
Publish Date: 
Wednesday, September 23, 2020
Event Name: 
Event Track:

The popularity of NVMe has gone beyond the limits of the block device. Currently, NVMe is standardizing Key-Value (KV) and Zoned (ZNS) namespaces, and discussions on the standardization of computational storage namespaces have already started. While modern I/O submission APIs are designed to support non-block submission (e.g., io_uring), these new interfaces incur an extra burden into applications, who now need to deal with memory constraints (e.g., barriers, DMA-able memory). To address this problem, we have created xNVMe (pronounced cross-NVMe): a user-space library that provides a generic layer for memory allocations and I/O submission, and abstracts the underlying I/O engine (e.g., libaio, io_uring, SPDK, and NVMe driver IOCTLs). In this talk, we (i) present the design and architecture of xNVMe, (ii) give examples of how applications can easily integrate with it and (iii) provide an evaluation of the overhead that it adds to the I/O path.

Learning Objectives

Strengths and weaknesses of existing low-level APIs for programming storage applications,Learn how to encapsulate low-level storage APIs for productive development,Learn about Storage API overhead

Watch video: