Non-Volatile Memory Express (NVMe) is a specification for accessing solid-state drives (SSDs) attached through the PCI Express (PCIe) bus. It gives lower storage latency and much higher queue depths. Even though this technology is most relevant for server workloads, there are also some affordable new NVMe devices meant for client devices and workloads. A good primer on NVMe is available here.
The use case from nvmexpress.org is that
“NVM Express is architected from the ground up for Non-Volatile Memory (NVM). NVM Express significantly improves both random and sequential performance by reducing latency, enabling high levels of parallelism, and streamlining the command set while providing support for security, end-to-end data protection, and other Client and Enterprise features users need. NVM Express provides a standards-based approach enabling broad ecosystem adoption and PCIe SSD interoperability.”
NVMe is being pushed as a modern replacement for the old Advanced Host Controller Interface (AHCI) that most flash storage devices are still using, and all indications are that NVMe will really start to become more popular and more affordable in 2015/2016.
Windows Server 2012 R2 and Windows 8.1 have a native NVMe driver that allows NVMe devices to be automatically recognized by Windows. This driver works, but does not offer the best performance. I wrote about my experiences with the native NVMe driver last October. Microsoft has also released a hotfix to Windows Server 2008 R2 and Windows 7 that gives native NVMe support to the operating system.
Anandtech has had similar results with several different NVMe devices. Their information (from Samsung) was that
“the performance difference was due to the Microsoft NVMe driver creating FUA (Force Unit Access) I/O write commands. These FUA commands bypass the DRAM cache on the SSD and directly write to the flash, increasing the response time and also lowering bandwidth. For the same access traces, this situation does not happen with the Microsoft AHCI driver.”
This sounds pretty similar to the difference between write-back and write-through caching for RAID controllers. If you have any NVMe storage devices, you should make absolutely sure that you are using the vendor supplied NVMe driver rather than the generic Microsoft NVMe driver. My fear is that it will be very common for many server administrators to simply install their NVMe device, start the server, and then think everything is ok, since Windows recognized the device and it seems to be working.
There are a lot of recent tests of new NVMe storage devices to whet your appetite for this technology. Here are some reviews and tests of client devices:
PCIe SSD Roundup – Samsung SM951 NVMe vs. AHCI, XP941, SSD 750 and More!
Intel 750 series SSD review: Storage so fast, only the highest-end PCs can keep up
Intel SSD 750 Series NVMe PCI Express SSD Review
Here are some reviews of server devices:
Intel SSD DC P3700 Review: The PCIe SSD Transition Begins with NVMe
Intel SSD DC P3700 800GB and 1.6TB Review: The Future of Storage
Intel SSD DC P3700 Review (800GB) – NVMe for Enterprise…and Enthusiasts?
Hopefully, Microsoft will improve the performance of their native NVMe driver in a future update for Windows Server 2012 R2 and Windows 8.1. I certainly hope the native NVMe driver performs better in Windows 10 and “Windows Server 2016”. I would love to see Microsoft’s Jose Barreto weigh in on this subject!
16 Responses to Beware of the Native Microsoft NVMe Driver!
Has this issue been fixed by Microsoft yet?
The native Windows driver works much better in Windows 10. I have not tested it in in Windows Server 2016 yet. I am not sure whether Microsoft has improved the performance of the native driver in Windows Server 2012 R2. I always use the Intel driver.
Microsoft’s Standard NVM Express Controller, version 6.1.7601.23403 (Windows 7) is working well after a weekend with an sm951. ATTO shows 2 GB/sec with larger reads, about 1.4GB/s writes, and around 400MB/s for 4k random r/w. Can’t remember IOPS. I was considering the Samsung driver and possible Magician’s Rapid Ram Cache, since I don’t use Windows for anything valuable, but with these speeds, I am not sure it is work the risk of a re-install should it go south. Also have not found much on the the oem sm951 working with Samsung’s retail products. In fact, I did not see their 950 Pro NVMe listed as Rapid Cache compatible. Have not seen a lockup, but driver date does list 2006. Is that possible for NVMe?
This forum post suggests using HP’s if you have lockups:
I’ll look into Lenovo’s advice. I imagine the ms driver is NOT from 2006.
I have the Samsung 950Pro on My GA-X99-Designare EX.
When using the Samsung NVMe driver in Windows 10(V.1511) I will get performance issue in Fallout 4(very very long loading time compare to the 850 Pro its replace) and the benchmark is much lower than the native windows driver. Uninstall the Samsung driver everything back to normal.
Good to know
My laptop has an OEM Toshiba XG4 (M.2 NVMe SSD), and I found that with the Microsoft NVMe driver, I had abysmal 4K random write performance. I was getting about 1.5 MB/s. Meanwhile, the same laptop also had a retail Kingston KC400 SATA SSD getting 70-90 MB/s in 4K random write.
Because my Toshiba XG4 is OEM, it has no driver support. But I discovered that the XG3 was rebranded as the OCZ RD400, so I installed the OCZ NVMe driver, and now my Toshiba XG4 is getting about 100 MB/s in random 4K write.
See more at https://forums.lenovo.com/t5/ThinkPad-11e-Windows-13-E-and/E570-needs-better-NVMe-driver-support/td-p/3518940, cross-posted at http://www.tomshardware.com/answers/id-3277929/microsoft-nvme-drivers-poor-random-write-performance-purchase-nvme-drives-proprietary-drivers.html
I have the Windows Server 2016 w/ the Samsung 960 EVO. Samsung’s NVMe Driver installer (version 2.1) does not allow me to install to this OS.
What can I do?
Just use the native Windows 2016 driver, and contact Samsung to try to get them to update their setup program. Also, be aware that the Samsung 960 EVO is a consumer-level SSD, that does not have many enterprise-level features, so Samsung is probably not going to support it on a server-OS.
Hi, I have Windows 7 x64 and Asus Z97 PRO-GAMER motherboard. I bought the new Plextor 128GB M8PeGN, which is a M.2 SSD drive with NVME support. I put it in the M.2 slot, enabled M2 support in UEFI and I can see disk listed in the UEFI (I updated BIOS to the newest available). But it’s not visible in Windows as a addressable disk. I can see the device listed in Windows device manager, under name “PCI Device”. Essentialy what is here: http://www.asus.com/support/FAQ/1015198/
I look at this hotfix from Microsoft and wonder if that would help. But everywhere it says only that when you want to *install new Windows* on the drive. I have already existing Windows partition that I would like to clone. But first I need to see the drive in system. Do you know if this hotfix could help in this case? Or does the Windows 7 already has some NVME driver and so if it doesn’t detect my drive now, even installing hotfix won’t help?
Thank you very much, Hubert
Between using Windows 7 and using a Z97-vintage motherboard, you are going to have more challenges using an M.2 drive. I would double-check to see if ASUS has a Windows 7 driver for that.
Like Hubert Rutkowski, I have the same MB & initially installed Windows 7 in UEFI mode. The ASUS Z97 PRO-GAMER is a feature packed MB, the only downside & may be his issue. The M.2 slot is not a x4, rather x2 (10Gb/sec).
The solution is to get a x4 adapter & install in the 2nd GPU slot & all will be fine. This is how I run all of my NVMe SSD’s, much cooler than on a hot MB beneath a GPU. I use the Sintech x4 adapter available from Amazon for about $15, includes a replaceable fan with speed control. When the bearing became noisy, replaced the fan with a dual ball bearing type & all is OK.
Not being able to boot on these MB’s isn’t only an issue with Z97, also AMD AM3+ models with the same slot. These requires a x2 card to work properly, MyDigitalSSD has these, called SBX. Runs a little faster than a Samsung 850 Pro on a decent build, so IMO the slot isn’t worth bothering with, unless installing a M.2 SATA SSD, or if one can be happy with a x2 card like the SBX.
There are many good Z97 MB’s, one of which was the first to have the Ultra M.2 slot, as well as the lower speed (10Gb/sec) slot in the ASRock Z97 Extreme6. That’s amazing, this was a 2014 MB, winning a Tom’s Hardware of the Year award & come 2-3 years later (2016/17), many OEM’s are still pushing the 10gb/sec M.2 slot, even on newer MB’s (more recent than Haswell).
While the OP has likely found a fix, I’m responding to those who wanders to this site looking for an answer. Unless one has the Ultra M.2 port, use the 2nd GPU slot, it won’t slow the GPU enough to be noticed, other than a hardcore gamer who has to have that last FPS. In that case, that user needs to upgrade the GPU, many tests have been performed, virtually little difference in reducing the GPU lane to x8 by sharing. Just be sure NOT to use the last slot if there’s three, it’ll be a PCIe 2.0 slot. Consult your manual for details, sometimes one will have to go into the UEFI & set the slot(s) to Gen3.
Most serious gamers have probably upgraded to a newer generation motherboard/CPU by now. If you are still using a Z97, you do have to be more careful about what kind of M.2 slot you have and whether it has PCIe 3.0 x2 or x4 support. I would also point out that another storage option that is popular with gamers would be to use 280 GB Intel Optane 900 PCIe card as your boot drive.
From a Microsoft driver standpoint the performance today still seems very troubling now that manufacturers are offering NVMe drives in laptops without a supplied manufacturer NVMe controller.
Like Michael above, we’ve been testing HP EliteBook 850 G4 laptops that have a Toshiba NVMe drive. AS SSD shows sequential write performance differences of nearly 10x what you see when using the OCZ/Toshiba option. Unfortunately I feel this is a hack job and isn’t something that would necessarily be supported by HP.
A better option might be to use an NVMe drive from a vendor like Samsung, that does supply their own driver, and good management software (like Samsung Magician) that also makes firmware updates easy.
For whatever reason, after I installed a 240GB MyDigitalSSD BPX in my PC (ASRock Z97 Extreme6 MB) in the 2nd PCIe GPU slot, as the adapter has a small fan to cool it (over a 20C drop), now when trying to install LInux Mint 18.1, it shows I’m in a ‘FakeRAID’ mode. I’ve never used RAID, other than the native IRST being active, and tried RAPID once, the OS didn’t seem to run right, so disabled it.
Have looked everywhere & cannot get rid of this RAID error. Does anyone have an answer?
I have an Samsumg MZ1LV960HCJH 960GB PCI Express Gen3 x4 M.2 Enterprise SSD and I downloaded the newest driver for this, but Device Manager still shows the Surface NVMe driver as installed. I uninstalled it, and installed the Samsung, and on reboot, the Surface NVMe is back!