Win 10 Standard NVMe vs Open Fabrics NVM OFA Reference Drivers

So the driver was marked corrupted after you had added your own digital signature to it you say? Did you have data corruption as well on other files? I will have to check my installation as now I’m worried. Thanks.

Yes, the driver signature seemed to be not trustworthy for the OS integrity monitoring.
The requirements regarding bootable storage drivers are much higher than those regarding "normal" PnP drivers.

No. To make it clear: I do not suspect any malware within the OpenFabrics NVMe driver. My impression is, that the OpenFabrics team tried to give the driver a digital signature, but the related procedure failed. This may be the reason, why even the later done correct Win-RAID CA signature didn’t solve the source problem.

In continuation of >this< report I have now done some additional benchmark benchmark comparison tests by using the much newer and better performant Samsung 960 EVO SSD.
Chipset: Intel Z170
Tested NVMe SSD: 250 GB Samsung 960 EVO
OS: Fresh installed Win10 x64 Pro v1703 (Final “Creators Update”)
Tested NVMe drivers:
1. Generic MS in-box NVMe driver v10.0.15063.0 named stornvme.sys dated 03/18/2017 (wrongly shown as being dated 06/21/2006)
2. Generic OpenFabrics NVMe driver v1.5.0.0 named nvme.sys dated 12/09/2016
3. Samsung NVMe driver v2.1.0.1611 named secnvme.sys dated 12/08/2016


Here are the results:
1. Win10 in-box MS NVMe driver v10.0.15063.0:

Z170-960EVO-NVMe-stornvme.png



2. OpenFabrics NVMe driver v1.5.0.0:

Z170-960EVO-NVMe-OFA-v1500.png



3. Samsung NVMe driver v2.1.0.1611:

Z170-960EVO-NVMe-Samsung-v2101611.png



My comments:

  1. The Samsung 960 EVO was noticeable better performant than the Samsung 950 Pro.
  2. All 3 tested NVMe drivers gave me very good scores. Although the OpenFabrics and the Samsung NVMe drivers gave me slightly better scores than the genric MS in-box NVMe driver, the differences are marginal and not noticeable.

So there is no reason to change my previously given advice:
As long as we don’t have properly working Samsung resp. digitally signed OpenFabrics NVMe drivers, I recommend to use the MS own generic Win10 in-box NMe driver.

@Fernando ,

Thanks for that new benchmark. Very interesting. I wanted to share one I took myself comparing OF 1.5 with MS 10.0.14393.206 NVME storage driver. Granted you have to take this with a grain of salt because its not exactly scientific running a benchmark on a live install and only one run that I did here insn’t enough compared to the average multiple bench runs. That said here’s the bench I ran:



Also wanted to say that so far running in ‘Test Mode’ I haven’t had any problems with the OF driver and it looks ok in device manager. Of course for those of us that are running non Samsung drives that don’t have an oem driver I’m sticking with the OF driver for now until Plextor releases its own driver that takes advantage of the 1.2 nvme version standard that the microsoft driver does not support being on 1.0 for now (I believe I could be wrong and please correct me if I am). Anyhow if I had a Samsung drive of course I would use the Samsung driver over the OF driver and most likely the MS driver on a mission critical system. For my purposes on the OF driver for now.

EDIT: I reran the ATTO Benchmark because the 48MB and 64MB scores looked fishy and I have to say I am totally shocked that I got the same score once again with the MS driver!!! Such that I am not even posting the second run as they look identical to the first. Whats going on I can’t say.

@davidm71 :
Thanks for your reply and the ATTO benchmark results.

None of the various available benchmark tools isable to simulate the performance during the daily work of the user, but the ATTO tool is the worst of them, because it just uses extremely compressible files while doing the test. The real data world with compressible and not compressible files is totally different.
By the way: That is the reason, why the manufacturers of the HDDs/SSDs prefer to present their benchmark results by using the ATTO tool.

@Fernando ,

Ok. I wasn’t aware of that. What about CrystaldiskMark? Did you see the difference in sequential score in post #10??

My point anyhow is that there is something going on even still.

Yes, I have seen it and this makes be sceptical regarding this tool as well.
According to my experiences Anvil’s Storage Utilities gives the best informations (incl. response time, IOPS values and even checks the allignment of the HDD/SSD) without consuming too much resources.

Maybe we should rename the thread to "Which NVMe driver gives SSD the best performance" or start a new thread with the latest results within the start post.

Well I took your advice and ran the Anvil’s Benchmark and this is what I got:

The thread is appropriately named I think and all I am doing is trying to help draw some conclusions. With the Anvil tests I see a slight edge to read speed with OpenFabrics and slight advantage towards write speeds with the Microsoft Nvme driver which I think you found. Its all very interesting. Question is what is more important read speeds or write speeds? Though I know what your going to say that either way you recommend the MS driver which is fine.

Thanks.

I bet, that you forgot to check the "Policies" of the related Disk drive within the Device Manager…
Both "Write Cache" settings have to be checked before you execute the benchmark test.

Yes I did forget but I am aware of that policy though never enable it as I am afraid of getting data corruption if anthing locks up. Fwiw I read that model of ssd does have poor write speeds and one reviewer suggested Plextor release a more aggressive firmware. Will run a new bench with it on in couple days. Thanks.

@davidm71 :
Since several years I am running my system drive with enabled "Write Cache" settings and never had any data loss or corruption. I conclude, that these SSD policies settings are not as dangerous as you think.

By the way: Today I have removed the OpenFabrics NVMe drivers from the list of the "Recommended AHCI/RAID and NVMe Drivers".
Reason: While trying to install the Cumulative Update KB4016250 for Win10 x64 v1703 I got an unbootable system again caused by the OFA driver.
After having chosen the "Advanced boot options" via F8 and disabled the "Driver Signature Enforcement" via F7 I was able to temporarily boot into the OS, but I could not solve the conflict between the still pending Windows Cumulative Update and the fact, that I had booted with disabled "Driver Security Enforcement". I have not even be able to switch to the generic MS NVMe or to the Samsung NVMe driver.
Finally I had to reinstall Win10 x64 v1703. The later installation of the Cumulative Update to Build 15063.11 went flawlessly, because the Samsung NVMe Controller was using the generic MS NVMe driver.
As long as there are no properly digitally signed OpenFabrics NVMe drivers available, I will neither recommend them for others nor use them myself.

@Fernando ,

Thank you for the warning. Sorry to hear about your troubles. That must be painful to reinstall Windows all over. I will immediately remove the driver or at the very least back up my system and consider myself warned,

Thank you

it seems a new version has been released :
this is a package from “Tous les drivers” :
DRIVERS NVM EXPRESS OPEN FABRICS ALLIANCE NVME 1.5.0.0 BUILD 157
here :
https://www.touslesdrivers.com/index.php…23&v_code=53065
the nvme.sys for Windows 10 x64 is dated 12/04/2017

@DoZe :
Thanks for the info regarding the updated OpenFabrics NVMe driver.
I just tried to get this new driver installed onto my Z170 system running Win10 v1703 on a Samsung 960 EVO SSD, but didn’t succeed (not even by forcing the installation).
These were the messages I got:

OpenFabrics driver error message Pic2.png

OpenFabrics driver error message.png



Warning:
Don’t try to get any of the recently linked OpenFabrics NVMe drivers installed.
After having digitally signed the Open_Fabrics_Alliance_NVMe driver v1.5.0.0_157 for Win10 x64, I was able to force the installation, but after the reboot a got a “Repairing the system” message.
Since the repairing procedure failed, I got an unbootable system. Furthermore all messages were done with Cyrillic script (I am using the EN-US variant of Win10).

Windows 10 from RS1 up is different when it comes to signed drivers. First you have to understand one big difference: There are "User Mode" (UMD) and "Kernel Mode" (KMD) drivers. UMDs could be signed all by yourself and will even work with SecureBoot enabled. Since RS1 Microsoft changed how Windows behaves when it comes to KMDs (which is only true for fresh installs… but thats another point^^). Before RS1 it was possible to use self-signed KMDs with SecureBoot enabled.
Microsoft themself really fucked up bad with 1703 (RS2) and so it’s not even possible to use the latest Windows ADK with SecureBoot enabled!

Source: Hardware development kits for Windows 10, Version 1703 (April 2017)

So maybe there are two possible solutions:
- Disable SecureBoot
- Sign the drivers via a Microsoft cross signing certificate or import your own certificate into SecureBoot

I would recommend to build the driver from source just to be sure that nothing gets fucked up in the first place, sign it and then either disable SecureBoot or import the cert into SecureBoot.

If you have a Samsung SSD installed i would suggest to always use their driver since it probably will handle some things specific to their SSDs better than the standard Microsoft or OFA driver.

@e.v.o :
Thanks for your informations and advices.
What the OpenFabrics team has written within the chapter "Known issues for the ADK Drivers" seems to be nonsense.
Proof:
The "Secure Boot" option within my BIOS has never been enabled. This is how this section looks from the first usage of the mainboard:


The only way I can get the latest OpenFabrics driver installed onto my system is to give it a valid Win-RAID CA signature and to force the installation by using the "Have Disk" button, but after the "successful" installation I get an unbootable system after the required reboot.
What I have tried as well is to import the OFA Driver Signature Certificate by doing a right-click onto the *.cat file and choosing the options "Properties" > "Digital Signatures" > "Details" > "View Certificate" > "Install Certificate". Although I got the message, that the Certificate has been successfully imported, I was not able to get the driver installed (not even by using the "Have Disk" method).

Both options did not work for me.

What do you mean with "build the driver from source"? I will never touch the real driver, which is the *.sys file.

I never had the intention to use the OFA driver while running my Samsung 960 SSD. What I wanted to do is to compare the performance of the Win10 v1703 in-box NVMe driver with the NVMe drivers from Samsung and OpenFabrics, but these tests ended with a lot of frustration due to the impossibility to get the OFA driver properly installed.

This was written by Microsoft (not by the OFA) and is only valid for two drivers that come with the Windows ADK :wink:

Regarding "build the driver from source": Since the driver is open source it should be possible to build it with Visual Studio 2017 and then sign it correctly. My SSD just came some hours ago. Since i have to install Windows i could give it a try. Hopyfully i have time for this… would be interesting.

The last sentence was just for all Samsung users out there :smiley:


@Fernando
This means, that you should download Visual Studio and other requiered software (like Windows AIK).
Then download the sources of the driver (Visual Studio Project and countless .h and .c files).
Then open the VS project and compile it, which should result in one or more .sys files.
Compiling a piece of software does not requiere code modification, it is just the translation from human readable code to machine executable code.

Programs and libraries are not directly written in binary format. You know, there are programming languages, like C, C++, C#, Java, Rust, Cobol, Pascal, Swift,…

@e.v.o :
@mr_nuub :
Thanks for your explanations and advices, but I neither have the time nor the interest to correct the code of any SYS file.
That is the task of the driver development team (here: OpenFabrics).


As I stated before, you don’t have to correct anything. The deveoplers only have to provide the code, there is no must to comple the code.
It’s the spirit of open source to let everyone decide and participate. In the process of compiling code, you can enable certain features,
enable debug or performance optimizations, optimizing the code for different CPUs and architectures),…
So there is no binary "that fits all", as the needs greatly differ.
If you decide to not participate it’s perfectly fine, but then don’t complain about bad performance or missing features.