Morning Tutorial 2: An introduction to NVMe Zoned Namespaces

Monday, February 24, 2020 - 9:00 am12:30 pm

Grand Ballroom E

Simon Lund and Klaus Jensen, Samsung


Zoned Namespaces (ZNS) are bringing the first wave of Open-Channel SSD concepts to standardization in NVMe. While promising improvements in WAF, tail latencies, and cost, the fact that changes to the host software are needed is still a concern for broad adoption. In this workshop, we will cover the concepts behind ZNS and the extensions already under standardization in NVMe and then focus on the work being done in Linux to support ZNS—from the extensions to the existing zone block framework, all the way to target applications. More specifically, we will cover:

  • Linux kernel ecosystem: How does ZNS fit in the Linux Zoned block ecosystem? What are the options to boot a kernel with ZNS drives and the tools to manage them?
  • User-space libraries: With a number of emerging namespaces types and command sets in NVMe (e.g., ZNS, KV, Computational Storage), we need a library that allows us to abstract the details of each technology and allow for a generic programming model. Since NVMe has traditionally been block-based, such a library has never been needed. For this purpose, we are building xNVMe (Cross NVMe), which encompasses NVMe core functionality on a common API + namespace types extension (e.g., ZNS). It also allows to transparently use different transports host-device (i.e., libaio, io_uring, SPDK, other interfaces in FreeBSD). In the tutorial, we can show how to use such a library as well as how it integrates on well-known applications such as RocksDB. Note that all the work is open-source and will be upstreamed. We expect too to create and maintain packages for different distributions.
  • Emulation in QEMU: QEMU supports NVMe at the moment, but the bulk of the work was de-prioritized when devices became available. However, in our OCSSD days, we learned that having emulation when the interface is not as well-known as block is very useful. For this purpose, we have implemented a full 1.3 and 1.4 support as well as ZNS support in QEMU. All the work is being upstream (as TPs are ratified). In the tutorial, we can cover how to setup QEMU to emulate ZNS devices and how to debug bugs in real hardware by reproducing them in QEMU.

Learning Objectives

  • Understand the changes needed to support Zoned Namespaces in existing applications
  • Become familiar with the Linux framework for Zoned devices and understand which classes of applications can benefit from ZNS
  • Become familiar with the open-source support for ZNS available across the Linux stack

Simon Lund, Samsung

Simon Lund is a Staff Engineer at Samsung. His current work revolves around reducing the cognitive load for developers adopting emerging storage interfaces. Before Samsung, he worked at CNEX Labs designing and implementing liblightnvm: the Open-Channel SSD User Space Library. Simon received his Ph.D. on High Performance Backends for Array-Oriented Programming on Next-Generation Processing Units at the University of Copenhagen. He has given several talks on programming language, interpreter, and compiler design for HPC during his Ph.D. Most recently, in the industry at the SNIA Storage Developer Conference. Regardless of the topic, Simon's focus is the same, to bridge the gap between high-level abstractions and low-level control and measuring the cost and benefit of doing so.

Klaus Jensen, Samsung

Klaus Jensen is a Software Engineer with a background in academia. He has worked in the area of High Performance Computing, avoided users as an old school UNIX sysop, taken a stint in an IT consultancy, written a Ph.D. on tape and been involved in the OpenChannel SSD community. He now works on NVMe emulation and the NVMe software stack at Samsung Electronics.

Open Access Media

USENIX is committed to Open Access to the research presented at our events. Papers and proceedings are freely available to everyone once the event begins. Any video, audio, and/or slides that are posted after the event are also free and open to everyone. Support USENIX and our commitment to Open Access.

This content is available to:

@conference {245976,
author = {Simon Lund and Klaus Jensen},
title = {Morning Tutorial 2: An introduction to NVMe Zoned Namespaces},
year = {2020},
address = {Santa Clara, CA},
publisher = {{USENIX} Association},
month = feb,
Training Materials (Must be a registered conference attendee to download)