Non Volatile Memory Express (NVMe) - "Architected for Performance"
UNH-IOL Staff - April 5, 2012
NVM Express is a specification for accessing solid-state disks (SSDs) over a PCI Express bus, which essentially means it has a register level interface that allows host software to communicate with a non volatile memory system for local storage.
(Diagram source: Peter Onufryk, Director of Engineering for IDT, and Kevin Marks, Principal Engineer/Technologist for Dell Inc.)
One of the most important aspects of NVMe is the ability to Queue commands. The host issues a command for execution through the appropriate submission Queue in the host memory. The host updates the submission queue register and the controller fetches the command from the Submission Queue. After fetching the command the controller transmits them to the NVMe subsystem for processing using command arbitration which allows the controller to execute commands out of order.
Upon completion of the arbitration mechanism, the controller then proceeds with execution of the command. Once the command is executed, the controller writes a Completion Queue to the host through the appropriate completion queues.
The next process is generating the interrupts by the controller to indicate that there is a completion queue entry to process. After the entry process, the host processes the completion queue entry in the completion queue which includes any action based on error condition indicated. Finally, the host writes the completion queue register to indicate that the completion queue entry has been processed.
Benefits of Queue Interface
One major issue in current desktop workload is that many applications ask for one piece of the data at a time, and often only ask for the next piece of data once the previous piece of data has been received. In this type of scenario, the drive is only receiving one outstanding command at a time. With NVMe queue interface, the multiple applications can have more than one I/O request pending at a time as NVMe uses Asynchronous I/O.
[In synchronous I/O, the functions call to read from or write to a file does not return until the actual read or write is completed. But in Asynchronous I/O the function call to read or write to a file actually returns before the request is completed.]
Queing interface in NVMe offers significant performance advantages and supports multiple commands at a time. With NVMe the queue level can be defined. Queue management can be done such as allocating, deleting and coordinating the queues.
Raju Mishra, Research and Development