Using Namespaces on the Micron 9300 NVMe SSD to Improve Application Performance

By Wes Vaske - 2019-06-06T00:00:00.0000000Z

I recently analyzed the performance of our latest drive for cloud and enterprise — the Micron® 9300 MAX NVMe™ SSD — with the Aerospike Certification Tool (ACT). I thought this would be a straightforward test, but I found some interesting results that I wanted to share.

Let's start at the beginning: What is the ACT benchmark?

The Aerospike Certification Tool (ACT) is used and developed by the Aerospike developers to test storage for an Aerospike Database. In their words:

  • ACT provides a pair of programs for testing and certifying flash/SSD devices’ performance for Aersospike Database data and index storage. ACT measures latency during a mixed load of read and write operations while modeling the Aerospike Database server’s I/O pattern as closely as practical.
  • act_storage performs a combination of large (128K) block reads and writes and small (1.5K) block reads, simulating standard real-time Aerospike Database data read/write and defragmentation loads.1
  • act_index performs a mixture of 4K reads and writes, simulating standard real-time Aerospike Database "All Flash" index device loads. (Aerospike, 2019)

1For this blog post, the data came from running act_storage only. Additionally, all data here is from ACT version 5.1. I don’t recommend comparing results to ACT version 3 or lower. There was a change in the way ACT operates such that the results may not be comparable.

This benchmark uses a somewhat complex combination of threads and queues to execute the defined workload on a given test device. I’ve scoped out how the different parameters interact with each other and which are tunable in the configuration file:

The main thing to take away from this diagram is the disparity between the number of threads used for large blocks vs small blocks. At the high point in my testing I'm frequently over 1,000 total threads for small block transactions (8 service threads + 128 threads per queue * 8 queues). However, large blocks transactions are handled by a total of 2 threads per device being tested — one for reads and one for writes.

While this test may be representative of how Aerospike utilizes devices, it is leaving performance on the table when running against very fast NVMe devices like the Micron 9300 used here. Ideally, we'd have an option to scale the number of large block threads in the same way we can scale the number of threads for small block operations.

The Micron 9300 NVMe family of drives gives us another option to increase our total performance — NVMe Namespaces.

If you’re unfamiliar with namespaces, they are a way to present a single physical NVMe device as multiple logical NVMe devices. This is similar to partitions on standard block devices, except they are treated more as independent devices than partitions. For example: With most virtualization software, NVMe Namespaces can be passed through to a VM. This allows multiple VMs to have direct and secure access to a portion of a single NVMe physical device. Partitions, on the other hand, can generally not be passed through directly to a VM.

The Micron 9300 NVMe drive accommodates up to 32 namespaces and comes formatted with a single one out of the box. For this testing, I removed the initial single namespace and created 8 equal-sized namespaces such that the total capacity was the same as the original 6.4TB capacity of the drive. Next, I preconditioned all namespaces with the process defined by ACT with the `act_prep` tool.

Once the drive was in steady-state, I began testing performance while scaling the number of namespaces the benchmark tool would use. The results are clear — using namespaces to increase the number of large block threads delivered a large increase in performance — roughly 80% better.

Now to be clear, namespaces didn’t give us more performance. We got more performance by using namespaces to tune an application that scales with the number of devices. Without namespaces, we would have needed to modify the act_storage tool to use more threads for individual devices. With namespaces, we’re able to use more threads with no modifications to the software.

As hardware continues to progress in leaps and bounds, getting full utilization of your hardware with legacy software can be a challenge. NVMe Namespaces are one tool to help get higher utilization. My team will have another blog in the coming months describing another workload we can optimize with namespaces so stay tuned!

If you have questions or comments on the work presented here, feel free to reach out to me on Twitter @wvaske or Linkedin and be sure to stay up to date with Micron by following us on Twitter @MicronStorage and connecting with us on LinkedIn.

Visit to learn more about the 9300 NVMe SSD. Experience flexible, efficient storage utilization and multitenancy with up to 15.36TB capacity and 32 NVMe namespaces on the Micron 9300 SSD.

Wendy Lee-Kadlec

Wes Vaske

Wes Vaske is a principal storage solution engineer with Micron.