Introduction to / Playing with NVMe Namespaces on a budget

Hi!

I’d like to play with NVMe Namespaces, but i don’t want to spend a lot of money for new hardware - buying used is perfectly fine for this learning experience.

Alas, my Intel SSD DC P3700 is ONE generation too old to support more than 1 namespace. (…according to the magnificent Malventano)

I’m primarily looking for experience reports from persons who’ve used the tech already. I intend to partition the namespaces using the Linux NVMe tool.

  1. Which SSDs support more than 1, 2 or 3 NVMe Namespaces?
  2. Why do they do that - is it the NVMe spec version, 1.3, 1.4, 1.x?
  3. What do i need - do consumer-grade mobos support this - AMD B550, X470?
  4. Can i boot off of different namespaces - how’s the UEFI/BIOS handling this tech?

Offhand, the Micron 9300 seems to support 32 namespaces (unsure if difference between pro and max). It’s old enough you can find used ones for around or under $100 per TiB on ebay.

Namespaces are part of the NVMe standards and specifications. But the feature is predominantly used in enterprise hardware.

I don’t think you need any special BIOS or MB as long as some slot/port can speak PCIe and NVMe.

In Linux, namespaces are part of any name of a drive. /dev/nvme0n1p2 Is the first NVMe with namespace 1 and partition 2. So namespaces just feel natural if using Linux device names.

With the more or less recent crash of enterprise NVMe, the lower capacities like 1T or 2T are really cheap. Not so much on a $/TB basis, but OP wants a cheap one to play with. Might as well get the almost latest PCIe 4 generation: Micron 7450 1T for $100. That’s 1TB of prime real estate with up to 128 namespaces and everything enterprise.

I’m buying a couple of them soonish and I really like to use namespaces. Sharing the same NVMe for multiple clients and have namespaces with more overprovisioning to account for write-heavy workloads on that namespace…really nice. Or just playing around with failure domains in storage arrays.

When I decided to learn about namespaces, the following link gave me a good primer:

1 Like

NVMe namespaces work on any old computer that can access your nvme ssd.

The real question I have, and this seems appropriate to the title of this thread:

Why are there namespaces and why would anyone want to use them?

The best I could find is that they are a fancy way to partition nvme devices. If true - why not use good old file system partitions?

File system partitions and namespaces share the issue that you need to start with committing to separation points that divide up the overall space. Invariably, this leads to a wasted resource (it always has for me.
In times of zfs and btrfs you can create datasets as logical dividers at any time. And each can grow independently until all of the underlying devices are (fully) utilized.
No premeditated guessing on how much space you need when you start out.

1 Like

If you need a LOG and L2ARC, you can do it with partitions sure. But both partitions share the same overprovisioning which is adjustable for namespaces. So you either give up more capacity than needed or accept lower DWPD with a single namespace.

And I can create block devices from my storage, sure. I do it all the time. Or I can create namespaces and every VM gets their own namespace, without a zvol/iSCSI software stack between. Or hardware encrypt some namespaces while others need to be unencrypted.

Sure, the fixed space also is a problem with partitions which is a downside. But logical separation is what people need sometimes.

I do see the point and the use case for a lot of stuff. Do I need it on my Gaming PC? no. Do I want to have the option on a server? probably yes. There is no obligation to use any feature if you don’t need it. It doesn’t cost anything by itself.