Zirkuläre Puffer und eine Klingel
Bei NVMe werden Kommandos und Antworten mittels einfacher zirkulärer Puffer ausgetauscht. Sie heißen schlicht Command und Completion Queue; die Command Queue ist eine Warteschlange mit abzuarbeitenden Befehlen. Zirkuläre Puffer sind Speicherbereiche fester Größe, zu denen jeweils ein Schreib- und ein Leseindex gehören. Hat einer davon das Ende der Liste erreicht, wird er zurück auf 0 gesetzt.
Der Vorteil: Die Indizes und Listen werden jeweils exklusiv vom Prozessor oder dem Controller des damit angesprochenen Geräts beschrieben. Damit entfällt etwa das Lesen eines Statusregisters, das bei Sata erforderlich ist, bevor ein neues Kommando übergeben werden kann. Der Treiber kann Kommandos in die Warteschlange einfügen, im Extremfall, bis sie voll ist. Anschließend setzt er den Schreibindex, der in einem Register des NVMe-Controllers liegt.
Durch das Schreiben des Registers erkennt der Controller, dass neue Befehle vorliegen und beginnt sie abzuarbeiten. Der Mechanismus wird als Doorbell, also Klingel, bezeichnet und funktioniert ähnlich wie ein Interrupt.
Den wiederum kann der Controller nutzen, um den Treiber über abgearbeitete Kommandos zu informieren. Dazu schreibt er diese zuerst in die Completion Queue, setzt dann deren Schreibzeiger und löst einen Interrupt aus. Anhand der Completion Queue passt der Treiber dann den Leseindex der Command Queue an.
Warteschlangen sind für SSDs extrem wichtig
Um einen Datenträger möglichst effizient beschäftigt zu halten, ist eine Befehlswarteschlange unumgänglich. Daher wird sie mindestens seit dem AHCI von Host-Controllern verwendet. Allerdings kennt hier erst einmal nur der Host-Controller die Warteschlange, was noch immer dazu führt, dass der Festplatten-Controller auf den nächsten Befehl warten muss, nachdem er einen abgearbeitet hat.
Dieses Problem löste Sata-II 2004 mit einer Technik namens Native Command Queueing (NCQ, ein White Paper von Intel gibt einen guten Überblick [PDF]). Damit lassen sich mehrere Befehle direkt an den Festplatten-Controller schicken, der sie dann in beliebiger Reihenfolge abarbeitet. Der Kerngedanke dabei war, dass mechanische Festplatten Lese- und Schreibbefehle umsortieren können sollten, um sie bestmöglich mit der Bewegung der Platten und der Lese-Schreib-Köpfe abzustimmen.
Für SSDs ist das besonders wichtig, da sie, anders als mechanische Festplatten (mit Ausnahme von Modellen mit unabhängigen Schreib-Lese-Köpfen), mehrere Befehle parallel abarbeiten können. Der Flash-Speicher ist über mehrere Kanäle angebunden, die unabhängig bedient werden. Genau hier kommt NCQ an seine Grenzen: Es gibt nur eine Warteschlange, und die ist mit lediglich 32 ausstehenden Kommandos auch noch sehr klein. Sie zu erweitern, wäre kompliziert, da AHCI für die Verwaltung der Einträge ein 32-Bit-Register verwendet. Die SSD hat damit wenig Auswahl, um alle Kanäle beschäftigt zu halten; klappt es doch, ist die Queue schnell leer, was Leerlauf aufgrund der erforderlichen Kommunikation mit dem Treiber bedeutet.
Viel mehr und viel größere Warteschlangen
Die Beschränkung auf eine Queue hat noch ganz andere Nachteile: Sie stammt noch aus einer Zeit, in der Prozessoren nur einen Kern hatten. Wollen Prozesse auf mehreren Kernen auf die eine Queue zugreifen, müssen sie sich synchronisieren, was Zeitaufwand bedeutet.
NVMe greift deshalb in die Vollen: 65.535 Warteschlangen sind möglich, eine ist für Verwaltungsaufgaben vorgesehen. So kann quasi jeder Thread eine eigene Warteschlange nutzen, sie können zudem noch mit Prioritäten versehen werden. Nicht nur gibt es wesentlich mehr Queues, jede kann zudem 65.535 Befehle aufnehmen. So können Prozessor und Speichermedium lange Zeit ungestört arbeiten, ohne sich abstimmen zu müssen.
Wer NVMe hört, denkt sehr wahrscheinlich PCIe gleich mit. Und das aus gutem Grund, denn ohne Letzteres ist Ersteres kaum vorstellbar.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
- ohne Werbung
- mit ausgeschaltetem Javascript
- mit RSS-Volltext-Feed
Festplatten: Das macht NVMe anders (und besser) als Sata | NVMe ohne PCIe: Kaum denkbar |
Wohl eher 2 Minuten (HDD) vs. 20 Sekunden (SATA SSD) vs. 18 Sekunden (NVMe SSD). 1...
Setzt ja leider voraus, dass man einen Chipsatz hat, der auf mehreren PCIe Steckplätzen...
Was ist da attraktiv? Grade bei größeren Kapazitäten sind SATA SSDs bedeutend...
Der Artikel weist auf die historisch bedingten Unzulänglichkeiten von SATA hin. Zahlen...
Kommentieren