NVMe options and optimizations

Guided Research

Description

Modern SSDs use the NVMe protocol for communication. In conjunction with state-of-the-art storage engines like SPDK [1], millions of NVMe commands per second may be processed by an SSD. Interestingly, the commands specified in the NVMe Base Specification [2] contain various options. For example, write allows to set whether a write request is a sequential or random write, what access frequency is to be expected for the data to be written, and the desired latency. Some of the options in the specification have to be implemented by every SSD controller, some are optional.

The aim of this guided research is to investigate supported NVMe options for various consumer/enterprise SSDs and their impact on performance. For the evaluation, our own toy driver (written in Rust) with SPDK-like performance should be used.

Research questions

  1. What NVMe options may be used for various read/write patterns?
  2. What options can be used, i.e., are available on commercial off-the-shelf hardware?
  3. What is the performance/safety impact of applying those options?
  4. What options were introduced with Base Specification 2.0? Which ones were removed?

Prerequisites

  • Knowledge of a systems programming language (C, C++, Rust, …)

Contact

If you are interested in this topic, send me an e-mail or drop by my office.

References

  1. Storage Performance Development Kit
  2. NVMe Base Specification 1.4