I am a huge fan of the new NVMe Tiering capability within vSphere 8.0 Update 3 and it has been fantastic to hear more users taking advantage of this new feature to see what it can do for their homelab/development setup but also for their various production workloads.
As of right now, enabling NVMe Tiering requires a dedicated NVMe device, which for a production system is probably acceptable as you will probably want to ensure there are no other workloads competing for IO on the NVMe device. However, for a development environment or homelab, this can be challenge due to number of available NVMe devices that can be used.
Thank you to fellow reader Andrea T, for sharing this awesome tidbit with the community and how you CAN actually share a single NVMe device with NVMe Tiering! 😍
For those with small form factor systems with a limited number of NVMe devices like ASUS NUC for example, you can run ESXi off of a USB device, while still being able to use local VMFS datastore and NVMe Tiering and you still technically have a spare slot or two that can be used for vSAN OSA or ESA!
UPDATE (12/16/24) - See this blog post HERE if you would like to run NVMe Tiering, ESXi-OSData and VMFS on a single NVMe device
Disclaimer: This is not officially supported by VMware, please use at your own risk.
Step 1 - Ensure that you have an empty NVMe device, you can not use an existing device with any existing partitions. You can use the vdq -q command to identify and retrieve SSD device name.
Step 2 - Download the calculateSharedNVMeTeiringAndVMFSPartitions.sh shell script to your ESXi host and update the three required variables:
- SSD_DEVICE - Name of the NVMe device from Step 1
- NVME_TIERING_SIZE_IN_GB - Specify the amount storage (GB) that you wish to use for NVMe Tiering
- VMFS_DATASTORE_NAME - Name of the VMFS datastore to create on NVMe device
Ensure the script has executable permission (chmod +x /tmp/calculateSharedNVMeTeiringAndVMFSPartitions.sh) and then run as shown in the screenshot below:
Note: The script will only generate the commands required BUT you will need to run them manually, so make a note of them and should help without having to manually calculate the storage start and end sectors by hand 🙂
Here is an example of running the generated commands for my setup where I have 1TB (913.15GB) NVMe and I am allocating 256GB for NVMe Tiering and then the remainder space will be allocated for VMFS datastore.
Using the ESXi Host Client, we can see the two partitions that we have now created:
Step 3 - Enable the NVMe Tiering feature, if you have not already by running the following ESXCLI command:
esxcli system settings kernel set -s MemoryTiering -v TRUE
Step 4 - Configure the desired NVMe Tiering percentage (25-400) based off of your physical DRAM configuration by running the following command:
esxcli system settings advanced set -o /Mem/TierNvmePct -i 400
Step 5 - Finally, reboot for the NVMe Tiering settings to go into effect and once your ESXi host reboots, you will now have a single NVMe device supporting both NVMe Tiering and for local VMFS datastore for you to use for workloads!
fishtacos says
I am literally waiting for 2 NVME PCIe 3.2TB cards to come in the mail today so I can expand my Coffee Lake homelab (64GB RAM/node) with HCI Starwind nodes and hopefully 2x/3x/4x my "RAM" with NVMe tiering. The plan was to use namespaces for a small chunk for that and the rest for storage.
This makes it easier. Thanks WL.
William Lam says
NVMe Namespaces would be ideal way but most consumer devices only support 1NS OR you need to use non-M.2 form factor
Steve Walker says
I’m guessing that it’s not possible to slice up a device suitable for use as a vSAN NVMe cache disk so that it can perform both functions (tiering and cache)? I have some NUC7 devices which have max 32GB RAM and this isn’t sufficient for ESXi8 K8S supervisor cluster
darrinw3658434259 says
Really be glad when the version with the PCI Passthrough limitation removed.
Jason M says
Is there a CPU HCL to know if vMMR is supported or not?
William Lam says
No. As mentioned in this blog post https://williamlam.com/2024/09/quick-tip-nvme-tiering-configured-but-not-working.html you need to have either an Intel CPU (Broadwell or later) or AMD CPU (Milan or later) would be quickest way, more generically basically any recent CPUs in purchased in last several years will work just fine 🙂
Andrea T says
After some usage of this configuration all of a sudden my vmware host become unresponsive, I checked and I found this log on vmkernel.log:
2024-12-10T15:30:39.621Z In(182) vmkernel: cpu1:1050438 opID=2c26257e)Partition: 743: Read from primary gpt table failed on "t10.NVMe____Corsair_MP600_PRO_LPX___________________7007C0CA9BA77964".
and some other similar.
I am not sure if this is having to do with the fact that I enabled the nvme tiering on the partition instead of the full nvme device. I will keep it monitored, but I just wanted to share this as the option to use nvme tiering only to a partition might not be that stable.
I will post again if I find another problem with my setup.
Thanks!
Andrea
Rui Pedro Neves Borges da Silva says
This comment isi just
Rui Silva says
Just a comment to say you are great,
can you tell us if memory tearing will be available in the esxi arm fling, would be great.