By Mike Allison, Senior Director, Samsung
At the inception of NVM Express® (NVMe®) technology, the NVM Command Set was the only mechanism for the NVMe specification to perform reads and writes. In today’s ecosystem, the majority of NVMe devices are using the NVM Command Set, and we will continue to see devices that support it. In this blog, I’m going to share how the NVMe 2.0 specifications release modified the NVM Command Set, what new features were added and how it will impact development.
NVM Command Set: The Basics
The NVM Command Set applies to block storage and defines the most essential I/O commands: read and write. In other terms, the NVM Command Set identifies the commands that can go into an I/O submission queue, which is how you access the actual user data.
Prior to the NVMe 2.0 specifications release, the NVM Command Set was the sole Command Set to do read/write operations and was required for NVMe device implementations. Now, with the availability of the Zoned Namespace Command Set and Key Value Command Set, there are three mechanisms to choose from. The way the specification is written, a device can choose to support any combination of command sets. A host may select which combination is appropriate, and support one at a time, any combo of two at a time, or even three at a time. However, keep in mind that any existing namespace is only associated with exactly one command set.
NVM Command Set – Now its Own Specification
Because of the number of changes NVM Express made to the NVMe specification environment, the NVMe 2.0 specifications release worked to rearchitect the specs to ensure they are scalable. This way, we can continue to alter features more simply in the future. As a result, NVMe technology is now a family of specifications, with the command sets, transports and base specification all available as their own separate specification.
Prior to the NVMe 2.0 specifications release, the NVMe specification included all command set details. The new individual Command Set specifications allow NVM Express to isolate and independently evolve command sets for emerging technologies and use cases. The NVM Command Set specification is effectively the block address command set that already existed within the NVMe 1.4 Base specification.
Updates to the NVM Command Set
There are a few notable new features in the NVM Command Set specification. First, the Copy Command feature has been implemented to save transfer time for the host. Previously, if a host had to copy data from one location to another within a namespace, the host would do a read operation, transfer the data somewhere, and then do another data write to a Logical Block Address (LBA). Now with Copy Command, the controller can accomplish this internally without having to transfer the data.
Another feature change is the extension to the protection information. There is now the ability to create a larger protection information and provide a 64bit and a 32bit CRC, which provides great reliability for transfers and storage of data for the host.
The Impact of the NVMe 2.0 Specifications on Development
Now that NVMe technology has been rearchitected, developers can focus on the NVM command set for their project and not be distracted by the other I/O commands for the other command sets – leading to further adoption of NVMe technology.
Download the NVM Command Set and Watch My Interview
The NVM Command Set specification is publicly available on the NVM Express website, along with the Zoned Namespace and Key Value Command Set specifications. To learn more about all three command sets, I encourage you to watch the series of video interviews on the NVM Express YouTube channel, which includes an interview I did on the NVM Command Set. Happy learning!