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. Which NVMe options/features are implemented by various consumer/enterprise SSDs?
  2. Which options were introduced with Base Specification 2.0? Which ones were removed?
  3. Which NVMe options may be used for various read/write patterns?
  4. What is the performance/safety impact of applying those options?

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