Non-Volatile Memory Express
Mehr Performance bei Flash-Speicher mit NVMe
Innere Funktionsweise von NVMe
Enterprise-I/O-Anfragen laufen lange Zeit durch die Hardware-Infrastruktur wie NAND-Flash-ICs, Flash-Controller, Host-Bus-Controller, da sie nur kurz im Software-I/O-Stack verarbeitet werden. NVMe arbeitet mit einem rationalisierten Stack, der die Stack-Latenzzeiten reduziert und bedeutend mehr Befehle per Warteschlange ausführen kann als andere Legacy-Protokolle. Das SAS-Protokoll kann 254 Befehle pro Warteschlange verarbeiten, während SATA nur 32 unterstützt. NVMe unterstützt 64.000 Befehle pro Warteschlange und 64.000 Warteschlangen, womit ein extrem schneller Hardwarebetrieb möglich ist.
In einem Test von Intel reduzierte der Linux-NVMe-Software-Stack im Vergleich zu einem SCSI/SAS-Software-Stack den Software-Overhead um mehr als 50 Prozent (von 6 auf 2,8 µs) und die Anzahl der Befehlszyklen von 19.500 auf 9.100.
NVMe versus AHCI
Das "Advanced Host Controller Interface" AHCI wurde im Jahr 2004 für rotierende Medien mit hohen Latenzzeiten entwickelt und entspricht nicht mehr den heutigen Anforderungen von Permanentspeichern. Daher kann AHCI die SSD-Technologie nicht voll nutzen. NVMe ist für PCIe-SSDs sowie zukünftige Speichertechnologien ausgelegt und bietet dank rationalisiertem Storage Stack niedrige Latenzzeiten. Es können ohne Lesevorgänge Befehle erstellt werden, da AHCI vier nicht-zwischengespeicherte Registerlesevorgänge pro Befehl erfordert, sodass circa 2,5 µs zur Latenzzeit hinzukommen.
Die Hauptvorteile von NVMe im Vergleich zu AHCI umfassen:
Leistungsfähigkeit | NVMe | ACHI |
---|---|---|
Latenz | 2,8 µs | 6,0 µs |
Max. Warteschlangentiefe / Befehle pro Warteschleife | 64.000 / 64.000 | 1 / 32 |
Multicore-Unterstützung | Ja | Limitiert |
Effizienz für 4-KByte-Befehle | Befehlsparameter erfordern einen 64 B-Abruf | Befehlsparameter erfordern zwei serialisierte Host-DRAM-Abrufe |
Bei NVMe ist durch die Unterstützung von etlichen Warteschlangen und hohen Warteschlangentiefen gewährleistet, dass die CPU voll ausgelastet werden kann und die I/O-Situation sich entlastet.