Going into summer 2019, I was a full time software developer in the NVMe testing group at the UNH-IOL and focused primarily on test script development for the automated testing application, IOL INTERACT™. IOL INTERACT™ is a software package used to automatically perform the NVMe Conformance Test plan, which can qualify products for the NVMe Integrators list. As a test script developer, I worked directly on with testing prototype NVMe drives, which gave me a hands on and detailed understanding of the tool, the NVMe protocol, and the test procedures. I was also able to be a point of contact for debug requests from engineers working with a variety of NVMe SSD vendors.
As such, I have been heavily involved in the series of NVMe and NVMe Over Fabrics plugfests, events where we provide on-site interoperability and conformance testing alongside industry engineers for their NVMe and NVMe-oF products, ranging from NVMe Controller Silicon, NVMe SSDs, PCIe switches, PCIe hosts, ethernet switches, and all-flash arrays and NVMe storage appliances. At these events we often come up with ideas for new tests and features for the IOL INTERACT tool.
At a recent event, we discovered there was a need to measure whether a given SSD was able to meet their advertised performance metrics in a given power state. An NVMe SSD can support different power states for different expected I/O performance levels, and the SSD advertises this to the host system it’s installed in. Usually, higher I/O performance requires higher power draw. By allowing the host system to configure the drives power state, the host system, often a server, can determine whether a drive should be an a high or low power state, depending on the workload that is being run. If the workload requires high performance, the drive can be put in a higher draw power state which will support that level of performance. If not, a lower draw power state, lower performance mode can be used.
At first, saving a few milliwatts on a single SSD might not seem like much. But when that savings is extrapolated across tens of thousands of SSDs in a datacenter, the energy and cooling savings can really add up. So, having a clear understanding of an SSDs performance in a given power mode is very valuable. Since an NVMe SSD can advertise to the host system what performance can be expected at different power state, we realized it would be useful to provide a feature in the IOL INTERACT test tool, to check whether a given NVMe SSD was actually delivering its advertised performance in each power state.
So, we’ve added a feature to the IOL INTERACT™ test tool that allows the user to pick a set of power states for the drive, iterate the drive through the chosen power states, and at each power state, perform a prescribed set of I/O to the drives. We’ve also built in automation to allow the user to use their preferred common I/O performance tool, including MLTT, FIO or other tools the user has access to. In early April 2020, the latest v13.0 release of our IOL INTERACT™ test will include this power state test feature. We look forward to being able to work on it further as a development team with the help of our customers.
I am proud to be active in developing important features for a test tool used by the NVMe community. The opportunity at the IOL for growth and learning is never ending; I look forward to my next two years here at the IOL and I hope to soak up as much of this learning as I can.
Images and Descriptions:
Below are examples of the Power State I/O tool. The interface is simple, and follows the ‘Wizard Tool’ convention to provide an elemental slideshow of questions for the user on their customized I/O.
Figure 1: The software will find the devices in your /dev/ folder and display them on this page. You also have the chance to type in your own device name, in case it is located in another folder or named differently.
Figure 2: Pick any combination of power states that you would like your drive to iterate through during I/O execution.
Figure 3: Pick your preferred I/O service that you have installed onto your machine. You can use FIO, MLTT or any custom command-line I/O you want.
Figure 4: An example of the window where the user will customize their MLTT I/O settings.