NVMe – Was ist das?
Non Volatile Memory Express (oder kurz NVM Express/NVMe) ist eine 2011 veröffentlichte Software Schnittstelle um SSD-Speicher über PCI Express (dem Standard für Verbindung von Peripheriegeräten mit einem Prozessor) zu verbinden.
Bei Speichermedien geht es vor allem um Schnelligkeit (IOps) bei der Datenabfrage und/oder Haltbarkeit der Daten also beispielsweise RAM versus Festplatte. Hierbei ist die Festplatte deutlich langsamer als der RAM aber die Daten gehen nach dem Kappen der Stromzufuhr auch nicht verloren, daher “Non-Volatile Memory” oder “nichtflüchtiger Speicher”.
NVMe soll die beiden Vorteile, durch den Einsatz von PCI Express, verbinden. So wird besonders bei parallelen Zugriffen eine durch spezifische Befehle reduzierte Latenz und Overhead höhere Geschwindigkeit bei der Datenübertragung von “nichtflüchtigen Speichern” erreicht.
Entwicklung der Speichermedien
Wie eingangs erwähnt unterscheidet man generell zwischen nichtflüchtigen Massenspeicher und flüchtigen Hauptspeicher. Der Standard bei den Non-Volatile Memories war lange Zeit die HDD-Festplatte (Hard Disk Drive).
Neben der langfristigen Speicherung von Daten hat die HDD-Festplatte allerdings auch einen erheblichen Nachteil gegenüber dem Hauptspeicher: enorm höhere Zugriffszeiten die um das 100fache höher liegen als beim RAM.
In den letzten Jahren hat sich dieser Nachteil durch die Etablierung von wesentlich schnelleren SSD-Festplatten (Solid State Drives) etwas ausgeglichen. Diese besitzen im Vergleich zu den HDDs keine beweglichen bzw. rotierende Teile und die Speicherung der Daten geschieht komplett elektronisch.
Ein Problem bleibt jedoch bisher bestehen. Der Zugriff auf die SSD Platten wurde weiterhin über SATA (oder Serial-ATA) oder AHCI Protokolle gesteuert, die für die HDDs optimiert sind. Dadurch konnten SSDs nicht ihr komplettes Potential abrufen. Das NVMe-Protokoll schafft hier Abhilfe.
Wie funktioniert NVMe?
Ein Protokoll dient immer dazu den Austausch von Daten zwischen zwei Komponenten zu strukturieren. Hierzu dient ein Satz an Befehlen der beim NVMe-Protokoll sehr reduziert ist und nur 13 Befehle umfasst. Dieses schlanke Design führt zu einem niedrigeren Overhead beim Lesen und Schreiben von Daten. Zudem muss kein Protokollübersetzer genutzt werden, was wiederum zu geringeren Latenzen führt.
Hier eine Übersicht der Befehle:
Admin Befehle | I/0 Befehle |
---|---|
Create I/O Submission Queue | Read |
Delete I/O Submission Queue | Write |
Create I/O Completion Queue | Flush |
Delete I/O Completion Queue | |
Get Log Page | |
Identify | |
Abort | |
Set Features | |
Get Features | |
Async Event Requests |
NVMe nutzt statt den alten SATA-Protokollen den PCI Express (Peripheral Component Interconnect Express). Dieser wird beispielsweise schon bei der Datenübertragung zwischen Grafikkarte und Prozessor benutzt. Bei PCIe handelt es sich also um eine physische Schnittstelle die nun mit NVMe um ein passendes Protokoll erweitert wird. Da PCIe schon in vielen Bereichen im Einsatz und kompatibel ist müssen zudem keine individuellen Betriebssystem-Treiber eingesetzt werden um SSDs verschiedener Produzenten anzusprechen.