nvme-lint: New Open Source Tool to Help Validate the NVM Express® Specifications

Blog

By Karl Bonde Torp, Samsung

NVM Express® (NVMe®) architecture has already overtaken SATA/SAS as the leading protocol for storage. As the adoption increases, so does the demand for new features to be added to the specifications. Since its inception, the specifications have expanded—adding the challenge of maintaining changes to the specification. For product developers implementing code based on the specifications, it is of utmost importance that the tables describing the data structures in each specification are correct.

The types of checks that need to be completed in each specification can be categorized as either consistency issues or identifying technical concerns. The consistency checking can be anything from consistent formatting, like a caption not in bold, to consistent column headings. For a seasoned reader, inconsistencies might seem unimportant. However, for a first-time reader, this is exactly the kind of thing that can cause unnecessary confusion.

Undoubtedly, the most serious issues are technical concerns. And among the worst of these must be holes and overlaps in bit offsets and byte offsets in the field definitions. When a product developer is faced with a data structure with an overlap of field definitions, the developer is forced to interpret. Different developers might have different interpretations and we want to avoid diverging implementations.

Currently, the only way to identify and remove these issues is through manual proofreading. Such a process is time-consuming and error-prone. Especially, the holes and overlaps can be tough to find since they are not visually very obvious and require manual calculations. However, this is exactly the kind of thing that computers excel at.

Introducing nvme-lint

nvme-lint is a tool designed specifically to solve this problem. It helps to analyze any NVMe specification and identify issues in the defined data structures. The goal is to make the specification easier to maintain and in turn make it more reliable for product developers.

The NVM Express release processes for any released specification will utilize this tool to prevent consistency and technical concerns from being published in future specifications.

How to use

If you are interested in trying out the tool for yourself, you can install it by simply running pip install nvme-lint in your terminal.

On Debian the following dependencies are required for the tool to run:

python

poppler-utils

libgl1

Once the dependencies and the tool are installed, you can run it by typing nvme-lint file_name in your terminal, where the file_name is the name of the pdf file you want to validate.

Visit the nvme-lint GitHub to learn more, get your questions answered or if you are interested in contributing.