StorNVMe.sys nur ein Wrapper für SCSI?

Ich habe es mal getestet. Der NVMe-Controller auf der SSD läuft immer noch als "SCSIAdapter". Die Laufwerke selber sind im Geräte-Manager nicht mehr unter "Laufwerke", sondern unter "Speichermedien" gelistet. Und sie laufen nun als NVMe-Geräte:

1766115431543.png 1766115445341.png

In CDM konnte ich bis auf Messungenauigkeiten keine Verbesserung feststellen. Aber ich hatte auch nur mit der Einstellung "NVMe SSD" und Profil "Standard" getestet.

Vermutlich bringt das nur etwas, wenn man eine NVMe-SSD mit Datenbanken und ähnlichem stark belastet.

Die Nachteile vom nativem NVMe wurden schon in qillers Deskmodder-Link, in den Kommentaren erwähnt. Samsung Magician erkennt keine NVMe-SSDs mehr. Aida64 soll laut Kommentaren auch bestimmte Informationen bei SSDs nicht mehr auslesen können. Crucial Storage Executive soll ebenso Probleme machen.
Das Sandisk-Dashboard benötigt für die Erkennung länger, aber es erkennt die WD-SSDs, wenn auch jetzt doppelt.
Mit CDI überhaupt keine Probleme.
 
  • Gefällt mir
Reaktionen: qiller und IDontWantAName
Die Tools werden sicherlich teilweise SCSI Befehle verwenden um an die Informationen zu kommen.

So, hier die Benchmarks:

vor Setzen des RegKeysnach Setzen des RegKeys+Reboot
device-manager.png
970Pro
NMVe Data, default profile
CDMark_nvme-data_default_970pro.png
CDMark_nvme-data_default_970pro.png
980Pro
NMVe Data, default profile
CDMark_nvme-data_default_980pro.png
CDMark_nvme-data_default_980pro.png
970Pro
NMVe Data, PeakPerf+Mix profile
CDMark_nvme-data_peak_perf_mix_970pro.png
CDMark_nvme-data_peak_perf_mix_970pro.png
980Pro
NMVe Data, PeakPerf+Mix profile
CDMark_nvme-data_peak_perf_mix_980pro.png
CDMark_nvme-data_peak_perf_mix_980pro.png
980Pro
AS SSD
asssd.png
asssd.png
980Pro
AS SSD Copy
asssd2.png
asssd2.png
 
  • Gefällt mir
Reaktionen: Darkman.X, IDontWantAName und TPD-Andy
Das hatte ich bei meinem letzten Post sogar auch geprüft, aber nur ganz amateurhaft mit dem Taskmanager :(. Mir fiel keine bessere Methode ein, daher hatte ich es nicht erwähnt.

Ich hatte dazu in CDM die Einstellung "NVMe SSD", Profil "Standard" und dann den Test "RND4K Q32T16" genutzt. Mir schien, dass der Test für die größte Belastung sorgt.

CPU = i9-14900K
Die erste CPU-Belastung ist der Lesetest in 3 Durchgängen.
Die zweite CPU-Belastung ist der Schreibtest in 3 Durchgängen.

"SCSI"natives NVMe
Ansicht "Gesamtauslastung"
1766167851263.png
1766167857096.png
Ansicht "Logische Prozessoren"
1766167862476.png
1766167866478.png

Man kann einen ganz leichten Vorteil für das native NVMe sehen. Je schwächer die CPU, desto größer vermutlich der Vorteil.
 
Zuletzt bearbeitet:
Hm, was mir noch aufgefallen ist. Mit 1GB großen Testdaten ist meine 980Pro ne Ecke schneller:

980Pro 64GB980Pro 1GB
CDMark_nvme-data_default_980pro.png
1766222747976.png
Bei den Schreibraten kann ich das ja aufgrund der Fülle der SSD und dem übrigbleibenden SLC-Cache noch nachvollziehen. Aber warum zur Hölle sind die Random 4K Read Werte so viel besser?

Das ist übrigens bei der 970Po nicht so, obwohl absolut viel weniger freier Speicherplatz vorhanden ist:

970Pro 64GB970Pro 1GB
CDMark_nvme-data_default_970pro.png
1766223167414.png

MLC ftw?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: KeLcO
qiller schrieb:
Kann das wer erklären, warum man als OS-Hersteller sowas macht? Oder gehts hier noch um was anderes, was ich hier übersehe?
Nachdem sich nun alle Welt über dieses Thema seit ein paar Tagen aufregt, habe ich mal versucht mich durch die Micorsoft Doku zu wühlen, und das Thema zu verstehen.


Erst mal grundsätzlich: Betriebsysteme arbeiten immer mit irgendwelchen Abstraktionsschichten.
So sollte einen Filesystemtreiber (das ist die Schicht, die oberhalb des Gerätetreibers ein Speichermedium verwaltet und in Dateien und Verzeichnissen organisiert, bei Windows also NTFS und (ex)FAT) geräteunabhängig mit der Ebene darunter kommunizieren.
Also im Prinzip sollte es dem Fillesystemtreiber "egal" sein, ob das Medium eine NVME SSD, eine SATA SSD/HDD, ein USB Stick oder eine SD-Karte ist.

Problem mit allen Abstraktionsschichten ist aber, dass sie zum einen Leistung kosten, und zum anderen spezielle Merkmale des Gerätes darunter verbergen. Man muss daher bei solchen Schichten immer irgendeine Art Kompromiss eingehen.
Eine Lösung ist z.B. bestimmte geräteklassen spezifische Funktionen (wie etwa TRIM bei allen Flash basierten Medien) in abstrakter Form anzubieten. Dann kann der Filesystemtreiber seine Funktion anpassen (also wenn er ein Flash Medium erkennt, dann sendet er auch TRIM Kommandos).

Über die Jahrzehnte haben sich viele Geräte weiterentwickelt. Ursprünglich hatten Block-Geräte Treiber nur Funktionen um Blöcke (Sektoren) zu lesen und zu schreiben, und ein paar generische Steuerfunktionen (ioctl) um z.B. die Kapazität abzufragen. Als dann die Speichergeräte "intelligenter" wurden, z.B. durch die Fähigkeit mehrere Schreib/Lesevorgänge zu sammeln und optimiert auszuführen (NCQ - Native Command Queing) musste man die Abstraktionsschichten um entsprechende Möglichkeiten erweitern und auch die Filesysteme mussten in der Lage sein, entsprechende Requests zu erstellen.

Nun zu Windows:
Seit Windows Server 2003 gibt es bei Windows die Storport Schnittstelle.
Sie ist als Alternative zur SCSI-Port Schnittstelle für "leistungsfähige" Speichergeräte (Anfangs RAID Controller oder Fibre Channel Fabrics) gedacht und bietet entsprechende Möglichkeiten.
Diese Schnittstelle wurden dann mit neueren Windows Versionen zunehmend erweitert.

Windows nutzt aber für die Kommunikation mit Storport SRB (SCSI Request Blocks), d.h. für Windows ist SCSI der Abstraktionslayer für die Kommunikation mit dem Speichergerätetreiber.

Unterhalb der Storport Ebene gibt es, wie bei Windows auch in anderen Bereichen, die "Miniport" Treiber, und einer davon ist der StorNVMe Miniport Treiber

Dort gibt es auch den SCSI zu NVMe Translation Layer. Grundsätzlich sind NVMe und SCSI Befehle relativ ähnlich, und es gibt auch eine offizielle Translation Reference.

StorNVMe unterstützt auch viele NVMe Features, ob jetzt "alle" kann ich nicht sagen.

Wichtig ist auch die Unterstützung für BypassIO, was die Grundlage für DirectStorage ist:
Da NVMe SSDs als PCIe Busmaster auf den ganzen Speicher zugreifen können (sofern ihnen der Zugriff per IOMMU erlaubt ist...) können sie damit selbstständig große Datenblöcke z.B. in den Userspace oder das GPU VRAM kopieren.

Wie man sieht, ist es also keineswegs so, dass Windows NVMe Geräte bisher wie eine SCSI HDD behandelt hat, sondern es hat umfassende Unterstützung dafür. Nur werden halt zur Kommunikation zwischen den Abstraktionsschichten teilweise die SRBs verwendet. Anscheinend hat Microsoft hier nun eine Optimierung vorgenommen, weil mit zunehmend schnelleren SSDs dieser Layer anfing immer mehr zu bremsen.
 
  • Gefällt mir
Reaktionen: kleinesµ, Piktogramm, Caramon2 und 6 andere
Ah, Stichwort BypassIO:
Keine Ahnung wie man das werten muss. Grundsätzlich wird es unterstützt, aber der Treiber ist nicht kompatibel. Wobei ich nicht einschätzen kann, warum "volmgr.sys" beim nativen NVMe plötzlich erwähnt wird.

Altes NVMe:
Code:
C:\>fsutil bypassio state /v D:\
BypassIo auf „D:\“ wird derzeit unterstützt
    Speichertyp:   NVMe
    Speichertreiber: BypassIo-kompatibel
    Treibername:    stornvme.sys

Neues, natives NVMe:
Code:
C:\>fsutil bypassio state /v D:\
BypassIo auf „D:\“ wird derzeit unterstützt
    Speichertyp:   NVMe
    Speichertreiber: Nicht BypassIo-kompatibel
    Treibername:    volmgr.sys

Für's Gaming (mit DirectStorage) wäre aktuell wohl das alte NVMe besser geeignet.
 
  • Gefällt mir
Reaktionen: qiller
Also DirectStorage geht trotzdem, Avocado Test auf meiner 980Pro mit nativem NVMe:
1766232515730.png
 
Die Rolle von "BypassIO" ist mir bis heute nicht ganz klar. Es hat einen Zusammenhang mit DirectStorage, aber ist wohl auch nicht sooo wichtig. Denn BypassIO gibt es nur unter Win11. Aber DirectStorage funktioniert auch unter Win10.

🤷‍♂️

EDIT: Laut ChatGPT soll DS unter Win11 eine bessere Performance haben und der Datenpfad NVMe → GPU wird im Gegensatz zu Win10 vollständig unterstützt. (keine Garantie auf Richtigkeit der Information ;))
 
Zuletzt bearbeitet:
Also hab grad mal Horizon Zero Dawn Remastered / Forbidden West (soll ja DS unterstützen) gestartet und lädt immer noch extrem schnell. Hab jetzt aber keine genaue Vorher-/Nachher Messung.
 
  • Gefällt mir
Reaktionen: TomH22
kommdieter schrieb:
Microsoft liefert Basistreiber. Wenn die Hersteller keinen richtigen Treiber für eine native Anbindung liefern, ist das nicht Sache von MS. Wenn MS es doch macht, können sie sich auch feiern lassen.

Die Unterstützung von universellen Protokollen erwarte ich von einem Betriebssystem. Bei PCIe/NVMe gab es ja die Übereinkunft über das einheitliche Protokoll. Da darauf zu setzen, dass jeder Hersteller seine eigene Implementierung mitbringt ist arg. Frankensteins Betriebssystem wo der USB-Stack von ASmedia und Intel läuft, der TCP/IP Stack vom Realtek, Mediathek, Broadcomm, Sata von WD, Toschiba, Hitachi, Seagate und NVMe von Kingston (Phison), Kingston2 (SiliconMotion) und SanDisk, nur weil man USB, Netzwerk und Speicher von verschiedenen Herstellern verbaut hat :freak: .

Mal ganz abgesehen, dass die entsprechende Software der Hardwareanbieter jeweils als Komponente vom Kernel laufen würde.. Als wäre das nicht schon (mehrmals) schief gegangen.
 
Zurück
Oben