Non Volatile Memory express over Fabric – Der Turbo für das SAN

04.11.2018 / Dr. Stephan Muthmann /

aus Netzwerk-Insider-Ausgabe November 2018

Auch in Zeiten von Hyper-Converged-Infrastructure, der zunehmenden Verbreitung von verteilten Dateisystemen und dem wachsenden Einsatz von Cloud Storage bleibt zentraler SAN-Speicher in vielen Unternehmen gesetzt. Insbesondere für „mission critical“ Applikationen mit hohen Performance- und Verfügbarkeitsanforderungen ist weiterhin blockbasierter Speicher die erste Wahl. Über lange Zeit basierte die Speicherkommunikation im blockbasierten SAN, ebenso wie innerhalb von Servern, letztlich auf der Übertragung von SCSI-Befehlen. Die Einführung der NVM Express (NVMe) Schnittstelle hat hier einen deutlichen Leistungssprung ermöglicht, der nun auch auf das Speichernetzwerk übertragen wird. Man könnte sagen, NVMe over Fabric ist die erste Technologie seit Fibre Channel (vor mehr als 20 Jahren), welche von Grund auf für vernetzten Speicher entwickelt wurde.

Sowohl in Enterprise-Servern als auch Consumer-Produkten vollzieht sich bei der Anbindung von SSD-Festplatten aktuell der Wandel von traditionellen Schnittstellen wie SAS, Fibre Channel oder SATA hin zu NVMe.

Hintergrund dafür ist, dass die klassischen Schnittstellen letztlich für die Ansteuerung von drehenden Platten entwickelt wurden. Das Small Computer System Interface, genutzt im SAS und Fibre Channel, wurde bereits im Jahr 1986 vorgestellt. Anspruch von SCSI war und ist es, eine möglichst breite Palette von Peripheriegeräten steuern zu können. Dem entgegengesetzt wird von der PCIe Foundation der Standard NVMe entwickelt, um die vorhandene Leistungsfähigkeit von Festkörperspeichern optimal nutzen zu können.

Innerhalb eines Servers bzw. SAN-Speichers kann damit eine enorme Leistungssteigerung erreicht werden. Wie Abbildung 1 zeigt, führt die Anbindung von SSDs mittels NVMe zu einer deutlichen Reduzierung der Latenz.

Im Server können damit die vorhandenen Ressourcen bestmöglich ausgenutzt werden. Wird Speicherkapazität über ein Netzwerk zur Verfügung gestellt, muss dieses allerdings ebenfalls dazu in der Lage sein, die Vorteile von SSDs an den Server weiterzugeben.

Abbildung 1: Kombinierte Festplatten-, Controller- und Software-Latenz bei der Nutzung von unterschiedlichen Schnittstellen. Quelle: communities.intel.com

Um NVMe over Fabric zu verstehen lohnt es sich, zunächst ein etwas detaillierteres Bild von NVMe zu zeichnen. Entwickelt wurde NVMe für die Datenübertragung auf dem leistungsfähigen PCIe-Bus. Ausgangspunkt war das von Intel im Jahr 2008 vorgestellte NVMHCI Protokoll welches, unter dem Vorsitz von Intel, schließlich durch den herstellerunabhängigen NVMe-Standard abgelöst wurde.

Die aktuell üblichen Form-Faktoren m.2 und u.2 erlauben eine Nutzung von bis zu 4 PCIe-Lanes für ein Endgerät. Für den PCIe 3.0 Standard sind also mit NVMe Netto-Übertragungsraten von annähernd 4 GB/s für eine SSD möglich. Mit der Adaption der, mittlerweile veröffentlichen, PCIe Version 4.0 wird sich diese Rate noch einmal verdoppeln. Selbst der 2017 publizierte SAS 4.0 Standard beschreibt eine maximale Bandbreite von lediglich knapp 3 GB/s.

Doch die limitierte Bandbreite ist nicht der einzige Nachteil der Technologien, welche auf SCSI basieren. Hinzu kommt nämlich noch, dass die Bandbreite nur bei seriellen Lesevorgängen erreicht wird. Insbesondere in einem virtualisierten Rechenzentrum kommt so etwas – mit der Ausnahme von Backups und Restores – aber nur sehr selten vor: Üblicherweise greifen die verschiedenen Virtuellen Maschinen (VMs) hochgradig zufällig auf Daten zu. Hier bietet NVMe den entscheidenden Vorteil einer Parallelisierung von Befehlen. Klassische drehende Platten können davon nicht profitieren – sie müssen den Lesekopf in die richtige Position bringen, um mit dem Auslesen beginnen zu können. Anders die Situation bei Festkörperspeichern: Hier sind der Parallelisierung durch die zu Grunde liegende Halbleitertechnologie nur wenige Grenzen gesetzt.

Abbildung 2: Protokollstapel im Fibre Channel Protocol

Hier setzt eben NVMe an. Wie der Name schon sagt, wurde NVMe für die Kommunikation mit nicht flüchtigem Arbeitsspeicher (Non Volatile Memory) entwickelt. Zum Zeitpunkt der Entstehung kamen die, auf NAND-Flash basierenden, SSD-Festplatten dem am nächsten. Mittlerweile drängen Technologien wie der von Intel und Micron entwickelte 3D Cross Point Speicher auf den Markt, welche das Potential haben, NAND-Flash in ihrer Performance noch zu übertrumpfen. Sofern sie über den PCIe-Bus mit der CPU kommunizieren – und nicht als DIMM noch näher an der Datenverarbeitung sitzen – nutzen auch diese Technologien NVMe. Aber das ist eine andere Geschichte.

Interessanter ist die Frage, welche Vorteile der Quantensprung an Leistungsfähigkeit, den NVMe ermöglicht, für den Nutzer von zentralisiertem SAN-Speicher hat. Unter Nutzung der „traditionellen“ blockbasierten Netzwerkprotokolle fällt die Antwort relativ ernüchternd aus: Unabhängig davon, ob eine Fibre Channel Infrastruktur, Ethernet oder gar Infiniband im SAN zum Einsatz kommen, werden letztlich SCSI-Befehle übertragen. In Abbildung 2 sei als Beispiel für diese Technologie der Protokollstapel im klassischen Fibre Channel Protokoll dargestellt.

Klassischerweise werden SCSI-Befehle transportiert um entfernte Speichersysteme zu steuern. Die Möglichkeit zur parallelen Verarbeitung von Speicherbefehlen bleibt damit ungenutzt. Außerdem sind mittlerweile High-End-Speichersysteme verfügbar, die ausschließlich NVMe-SSDs nutzen. Wie in Abbildung 3 dargestellt, bedingt die Nutzung von SCSI-Befehlen eine – latenzbehaftete – Protokollumsetzung innerhalb des Zielspeichersystems.

Abbildung 3: SAN-Kommunikation mit einem NVMe-Speichersystem unter Nutzung von SCSI-Befehlen

Um eine Nutzung von zentral verfügbarem NVMe-Speicher ohne Performance-Einbußen zu ermöglichen, wurde daher NVMe over Fabric (NVMe oF) entwickelt. Bereits im NVMe Standard der aktuellsten Version wird auf diese Technologie und ihre Unabhängigkeit vom Trägerprotokoll hingewiesen:

“The NVMeTM over Fabrics specification defines a protocol interface and related extensions to the NVMe interface that enable operation over other interconnects (e.g., Ethernet, InfiniBand™, Fibre Channel).”

Im Folgenden werde ich die zu Grunde liegenden Technologien genauer beleuchten, Umsetzungsvarianten beschreiben und mögliche Einsatzszenarien darstellen.

2. Die wichtigsten Unterschiede zwischen SCSI und NVMe

Vergleicht man in Abbildung 4 den SCSI-Protokollstapel (links im Bild) mit NVMe, kann man erkennen, dass NVMe auf einen „Treiberstapel“, wie er bei SCSI vorgesehen ist, verzichtet.

Im SCSI-Treiberstapel werden drei Schichten unterschieden:

  • Der Upper Layer wird genutzt, um Filesysteme auf unterschiedlichen Geräteklassen einzurichten. Auch hier kann man erkennen, dass SCSI für ein sehr breites Anwendungsfeld entwickelt wurde: Es existieren fünf Hauptmodule (Disk, cdrom/dvd, tape, media changer und generic SCSI devices).
  • Der Middle Layer dient zur Trennung der oberen und unteren Schicht. Hier werden Treiber aus dem „Lower Layer“ registriert und Befehle zwischen Upper und Lower Layer transportiert. Außerdem findet in dieser Schicht das „Error Handling“ statt. Vergleichbar mit TCP im Netzwerkstapel werden hier z.B. Retries initiiert, falls die Antworten aus dem Lower Layer nicht innerhalb des konfigurierten Timeouts eintreffen
  • Im Lower Layer schließlich laufen die Hardware-Treiber von Geräten wie RAID-Controllern, SAS-Festplatten oder HBAs.

Abbildung 4: Vergleich des NVMe und SCSI im I/O-Stapel eines Linux Betriebssystems

Im Gegensatz dazu verzichtet NVMe auf einen Protokollstapel. Wie in Abbildung 4 dargestellt, wird der NVMe-Treiber direkter angesprochen. Diese „Verschlankung“ ist möglich, da im Prinzip nur eine Geräteklasse mit einem schmalen Spektrum an Eigenschaften unterstütz werden muss: Nicht flüchtiger Arbeitsspeicher. Laut Messungen von Intel[4] ist durch dieses Modell eine Verringerung der Latenz um mehr als 50 % möglich.

Eine Gemeinsamkeit zwischen SCSI und NVMe bleibt allerdings erhalten: Die Identifizierung von Speicherzielen mittels logischer Bezeichner. Im SCSI-Umfeld sind das die sogenannten Logical Unit Numbers (LUNs), welche von SAN-Speichern genutzt werden. Mit ihrer Hilfe wird die physikalische Kapazität der Datenträger für die Nutzer abstrahiert bereitgestellt. NVMe unterscheidet Speicherbereiche durch ihre „Namespace ID (NSID)“. Wie in Abbildung 5 dargestellt, können die Namespaces dabei sowohl einem Controller exklusiv zugeordnet werden als auch von mehreren Controllern gleichzeitig genutzt werden. Eine mögliche Anwendung davon wären z.B. dual homed SSDs wie sie auch mit SAS möglich sind. Mit deren Hilfe kann z.B. zusätzliche Ausfallsicherheit innerhalb des Speichersystems oder Servers erreicht werden.

Abbildung 5: Zwei NVMe Controller, die jeweils auf einen privaten (NSID 1 und 3) und einen geteilten Namespace (NSID 2) zugreifen. Quelle: NVM Express Base Specifi cation Revision 1.3c 24. Mai 2018

Die Vielzahl an unterstützten Geräteklassen hat eine weitere Konsequenz für SCSI: Mehr als 140 Befehle stehen zur Verfügung. Dazu zählen z.B. „Move Medium“ oder „Play Audio“ die für NVMe aller Wahrscheinlichkeit nach keine Rolle spielen werden. Der NVMe Befehlssatz ist daher deutlich schlanker: Es können 26 Befehle genutzt werden, um die Hardware zu steuern. Von diesen Befehlen müssen mindestens 10 Admin- und 3 I/O-Kommandos (Lesen, Schreiben, Flush (verschiebt Daten aus flüchtigen in nicht flüchtige Bereiche)) genutzt werden. D.h. der minimale Befehlssatz enthält lediglich 13 Einträge.

Die wahrscheinlich entscheidendste Neuerung von NVMe allerdings ist die eingangs erwähnte Möglichkeit zur Parallelisierung von Kommandos. Theoretisch sind bis zu 64.000 parallele I/O-Warteschlangen mit jeweils bis zu 64.000 Kommandos möglich. Einen besonderen Vorteil bietet diese Architektur in Mehrkernarchitekturen. Wie in Abbildung 6 dargestellt ist es möglich, jedem Kern dedizierte Warteschlangen zuzuweisen.

Dabei wird zwischen der „Submission Queue“ – Befehle die vom Anforderer versendet wurden – und der „Completion Queue“ – den Antworten des Speichers – unterschieden. Es ist möglich, einer Completion Queue mehrere Submission Queues zuzuordnen (vgl. Abbildung 6 core 1). Außerdem sind spezifische Interrupts (MSI-X) je Warteschlange möglich, wodurch die Effektivität und die Auslastung der CPU weiter optimiert werden: Können z.B. Daten in einer der Warteschlangen von der SSD geliefert werden, müssen nicht alle Prozessorkerne gestoppt werden um die Daten abzurufen, sondern nur der für diese Warteschlange verantwortliche. Darüber hinaus ist es möglich, die unterschiedlichen Warteschlangen durch Prioritäten zu unterscheiden.

Abbildung 6: I/O-Submission und Completion Queues (Warteschlangen) die unterschiedlichen Prozessorkernen zugeordnet sind. Quelle: NVM Express Inc.

In der Tabelle 1 sind noch einmal die wesentlichen Unterschiede zwischen SCSI und NVMe zusammengefasst.

In einer Testinstallation wurde von IBM der aktuell erreichbare Performance-Unterschied zwischen NVMe und SATA (Serial ATA, neben SAS eine weiterer Standard, der ebenfalls weit verbreitet ist) gemessen. Die Ergebnisse sind in Abbildung 7 dargestellt. Hier werden SATA-und NVMe-Devices (Flash und 3DXpoint/Optane) einmal über den „Umweg“ Linux-Kernel und einmal direkt aus der Applikation angesprochen. Damit wird zum einen klar, wie groß der Vorteil von NVMe gegenüber SATA ist. Außerdem kann in dieser Messung gezeigt werden, dass die direkte Anbindung eine deutliche Steigerung der IOPS ermöglicht.

Abbildung 7: Vergleich von Latenz und erreichten IOPS von NVMe SSDs, Optane NVM und SATA. Die Devices sind entweder über den Linux-Kernel oder direkt über die Applikation angebunden (Kernel Block vs. User Space). Quelle: IBM Redbooks: IBM Storage and the NVM Express Revolution. I. Koltsidas, Vincent Hsu, 2017

In absoluten Zahlen scheint die Verringerung der Latenz für Flash-Speicher nicht so beeindruckend. Kommen allerdings neue Speichertechnologien wie Intel Optane (3D-XPoint) zum Einsatz, wird die Latenz aufgrund des niedrigen Basiswertes auf weniger als 10 µs halbiert.

3. Übertragungsprotokolle

3.1 Was muss die Fabric leisten?
Entwickelt wurde NVMe für die Übertragung auf dem PCIe Stack. Im Gegensatz zu SAS ist PCIe bereits als Fabric ausgelegt. Dadurch ist die Implementierung von NVMe auf einer alternativen Fabric vergleichsweise einfach. In Abbildung 8 ist beispielhaft der im Standard definierte Protokollstapel dargestellt.

Konsequenz dieser Architektur – in Kombination mit den in Abbildung 6 dargestellten Warteschlangen – ist, dass einzelne CPU Kerne über eine Fabric auf Daten einer SSDs zugreifen können (Abbildung 9).

Abbildung 8: High-Level-Diagramm des PCIe Protokollstapels. Quelle: PCI Express ® Base Specifi cation Revision 3.0 November 10, 2010

Um nun die Leistungsfähigkeit von NVMe-Festplatten über größere Distanzen nutzbar zu machen, ist eine zu PCIe alternative Fabric-Technologie erforderlich. Neben den generellen Vorteilen eines SAN (auf die wir hier nicht näher eingehen), spricht auch die enorme Leistungsfähigkeit von NVMe SSDs dafür. Einzelne Server sind in vielen Fällen gar nicht dazu in der Lage, die I/O-Performance von NVMe SSDs zu nutzen. Würde man z.B. nur die Hälfte der 128 PCIe Lanes einer modernen AMD EPYC CPU mit NVMe SSDs „bestücken“, könnte man die CPU (theoretisch, wenn man z.B. RAID-Verfahren außen vor lässt) mit bis zu 63 GB/s an Daten „überfluten“. Daher kann eine Zentralisierung der, meist noch vergleichsweise teuren, NVMe-Speicher durchaus Sinn machen.

Im Prinzip wäre es möglich, PCIe als Netzwerkprotokoll zu nutzen. Allerdings sprechen dafür weder eine breite Produktauswahl – aktuell ist die Firma Dolphin mit der IX-Produktfamilie einer der wenigen Hersteller für PCIe-Netzwerktechnologie – noch belastbare Praxiserfahrungen. Darüber hinaus skaliert die Anbindung von SSDs über PCIe schlecht. Glücklicherweise gibt es sehr etablierte Protokolle, die ihre Eignung für die Anbindung von zentralen Speichersystemen auch und vor allem im unternehmenskritischen Umfeld vielfach nachgewiesen haben. Unglücklicherweise steht der Anwender weiterhin vor der Qual der Wahl: Für alle im Unternehmens-SAN üblicherweise eingesetzten Protokolle wurde NVMe over Fabric (NVMe-oF) von unterschiedlichen Herstellern implementiert.

Abbildung 9: Zugriff auf Daten mit SAS und NVMe

Das zugrundeliegende Schichtenmodell ist in Abbildung 10 dargestellt. Der NVMe over Fabrics Standard, aus dem diese Abbildung entnommen ist, beschreibt lediglich die NVMe spezifischen Änderungen, die erforderlich sind, um die Speicherkommunikation zu entfernten Zielen aufzubauen. Das entspricht der obersten Schicht in der Abbildung. Behandelt werden dort z.B. zusätzliche Befehle oder Änderungen in den Warteschlangen-Mechanismen.

Fabric-spezifische Eigenschaften werden in den „Transport Binding Specifications“ z.B. für Fibre Channel (FC-NVMe) oder Ethernet (NVMe over RoCE, NVMe over iWARP) beschrieben.

Unabhängig von der Fabric ist der Verbindungsaufbau zwischen Host und NVMe-Subsystem. Als Subsystem wird – analog zur NVMe-Basis-Spezifikation – einer oder mehrere Controller verstanden, welche Zugriff auf die Namespaces ermöglichen (siehe z.B. auch Abbildung 5). Die Subsysteme wiederum sind über Ports, die durch ihre 16-bit Identifier und einen sogenannten NVMe Qualified Name (NQN) beschrieben sind, mit der Fabric verbunden. Baut der Host nun eine Verbindung mit einem Controller auf, sendet er zunächst ein „Fabrics Connect“ Kommando. Darin sind der 16-bit Host-Identifier, der eigene und der Remote-NQN enthalten. Optional kann noch eine In-Band-Authentisierung genutzt werden, um die Sicherheit im Speichernetz zu erhöhen.

Abbildung 10: Schichtenmodell von NVMe over Fabric. Quelle: NVM Express over Fabrics Revision 1.0a 17. Juli 2018

In Abbildung 11 ist der resultierende Aufbau dargestellt. Zusätzlich in der Abbildung enthalten ist ein Discovery Service. Dieser kann – ähnlich z.B. dem Domain Name System im IP-Umfeld – genutzt werden, um zentral Informationen über die Erreichbarkeit von Subsystemen bereitzustellen.

Welche Voraussetzungen muss nun eine Fabric mitbringen, um NVMe-oF zu ermöglichen bzw. was muss zusätzlich implementiert werden?

  • Verlustfreiheit ist die wichtigste und eine zwingende Anforderung an ein Speichernetz, das zur Übertragung von Datenblöcken genutzt wird. Der NVMe-oF Standard verlangt lediglich „reliable NVMe command and data delivery“. D.h. eine zuverlässige, verlustfreie Übertragung der Kommandos und Daten. In den relevanten Speicherprotokollen kommen dafür unterschiedliche Methoden zur Flusskontrolle zum Einsatz.
  • Zero-Copy beim Zugriff auf entfernte Daten ist eine Fähigkeit, welche die Vorteile von NVMe optimal nutzt. D.h. es ist eine vorteilhafte, aber keine zwingende Anforderung. Zero Copy bedeutet, dass beim Übertragen von Daten keine DRAM zu DRAM Kopien innerhalb des Quell- bzw. Zielsystems erforderlich sind. Damit wird die CPU entlastet, da sie bei einem Kopiervorgang beteiligt wäre, und die Latenz verringert. Anstatt Zero Copy zu nutzen, arbeiten Protokolle wie TCP Socket-basiert. D.h. im Rahmen des Verbindungsaufbaus werden beim Sender und beim Empfänger Pufferbereiche im Arbeitsspeicher definiert. In Abbildung 12 a) ist die Übertragung unter Nutzung des TCP/IP-Stapels dargestellt. In einem ersten Schritt werden die relevanten Daten im DRAM vom Anwendungsbereich in den TCP/IP-Puffer kopiert. Auf diese Daten erhält die NIC Zugriff und kopiert sie in den eigenen Puffer. Von dort werden sie zum Zielhost übertragen. Am Ziel läuft derselbe Vorgang in umgekehrter Richtung ab. In Abbildung 12 b) erhält die NIC direkten Zugriff auf den DRAM-Bereich der Applikation. Womit auf einen Kopiervorgang innerhalb des Arbeitsspeichers verzichtet werden kann.

Abbildung 11: NVMe over FabricRevision 1.0a 17. Juli 2018

Bei der Nutzung von NVMe-oF werden sogenannte „Scatter Gather Lists (SGL)“ übertragen, die den Ort der benötigten Daten im Arbeitsspeicher beschreiben. D.h. für Schreibvorgänge zeigt die SGL auf die Speicherbereiche, die auf die SSD geschrieben werden sollen. Für Lesevorgänge zeigt die SGL die Speicherbereiche an, in die von der SSD geschrieben werden soll.

Übertragen werden die SGLs zusammen mit den Kommandos in sogenannten „Capsules“. Dabei wird zwischen Command-Capsules (Host → NVMe-Subsystem) und Response-Capsules (NVMe-Subsystem → Host) unterschieden. Wie in Abbildung 13 dargestellt enthalten die Capsules sowohl die Submission/Completion Queue Entries (SQE/CQE, siehe auch Abbildung 6) als optional auch Daten bzw. SGLs.

Abbildung 12: Übertragen von einem Quell- zu einem Zielhost. In a) fi ndet die Übertragung Socket basiert über den TCP/IP-Stack mittels einer DRAM-Kopie statt. In b) erhält die NIC direkten Zugriff auf den entsprechenden Speicherbereich. Nach “The Future of Flash: NVMe over Fibre Channel”, Brocade Dell/EMC-World 2017

Im NVMe-oF-Standard sind sowohl der Transport von Daten in Capsules (“Message-Based”) als auch der direkte Speicherzugriff („Memory-Based”) zugelassen. Auch eine Kombination der beiden Varianten ist zulässig. Die genaue Spezifikation der SQEs bzw. CQEs sind im Transport-Binding beschrieben.

3.2 NVMe over Fibre Channel
Wie in Abbildung 2 zu sehen, wurde Fibre Channel für den Transport von SCSI entwickelt. Anzunehmen, dies ist eine „exklusive Verbindung“ wäre allerdings falsch. Fibre Channel wurde von Beginn an dafür entwickelt, als Transportbasis für Speicherprotokolle zu dienen. So wurden frühe Implementationen z.B. genutzt um ESCON zu übertragen. Auch dessen Nachfolger FICON wird mittels Fibre Channel transportiert. Zum Austausch des Speicherprotokolls muss lediglich die FC-4-Schicht angepasst werden. In der NVMe-Terminologie entspricht das dem Transport-Binding aus Abbildung 10.

Abbildung 13: Command und Response Capsule. Quelle: NVM Express over Fabrics Revision 1.0a 17. Juli 2018

Standardisiert wird NVMe over Fibre Channel (FC-NVMe) vom T11 Komitee des „International Committee on Information Technology Standards
(INCITS)”, welches auch für die restlichen Fibre Channel Standards verantwortlich zeichnet. Die finale Version des FC-NVMe Standards wurde im April dieses Jahres veröffentlicht.

Ein entscheidender Vorteil für Anwender, die bereits ein Fibre Channel SAN auf dem Stand der Technik (Gen 5 oder 6) betreiben, ist, dass keine neue Hardware erforderlich ist um FC-NVMe zu implementieren. Einzige Ausnahme ist natürlich das neue Storage Array bzw. die NVMe-Festplatten in den Storage Hosts. In Abbildung 14 ist dargestellt, wie das Mapping von NVMe SQEs, Daten und CQEs auf Fibre Channel Information Units realisiert wird.

Die bereits erwähnten Anforderungen „Verlustfreiheit“ und „Zero Copy“ werden in einem Fibre Channel SAN, unabhängig vom übertragenen Speicherprotokoll, ohne weitere Modifikationen erfüllt. Ohne im Detail darauf einzugehen sei das Aushandeln von „Buffer Credits“ beim Fabric Login erwähnt. Je nach Fibre Channel Service Klasse wird damit eine Ende-zu-Ende- oder eine Port-zu-Port-Flusskontrolle ermöglicht: Die Datenquelle sendet nur so viele Pakete, wie vom Empfänger mindestens verarbeitet werden können. Bis eine „Receive Ready Meldung“, d.h. das O.K. zum Weitersenden, eingegangen ist, wird die Transmission unterbrochen. Auf diese Art und Weise wird das Verwerfen von Paketen aufgrund von vollständig gefüllten Puffern vermieden. Auch die Zero-Copy-Funktion (der FC-HBA greift direkt auf die Daten im Arbeitsspeicher zu, die übertragen werden müssen) ist im Fibre Channel Protocol bereits enthalten.

Abbildung 14: Mapping von NVMe zu Fibre Channel. Quelle J. Metz, Let’s Talk „Fabrics“, SNIA 27.6.2018 17. Juli 2018

Durch seine große Verbreitung in Unternehmensnetzwerken und den geringen Modifikationsaufwand scheint Fibre Channel also eine naheliegende Wahl, um NVMe-oF zu implementieren. Wichtig dafür ist auch, dass in einem bestehenden SAN die Koexistenz von SCSI over FC und NVMe over FC (FC-NVMe) problemlos möglich ist. Bestehende Hardware kann also parallel zu leistungsfähigem NVMe-Speicher weiter genutzt werden, ohne Netzwerkkomponenten wie NICs austauschen zu müssen. Bereits im Jahr 2016 wurden erste FC-NVMe-Demonstrationen gezeigt (Flash Memory Summit Santa Clara CA). Dieses Jahr wurden bereits die ersten Produkte der großen Speicherhersteller vorgestellt. Beispielhaft sei das NetApp AFF A700 Array erwähnt, das mit der Einführung des ONTAP 9.4 Dateisystems FC-NVMe ermöglicht.

Abbildung 15: Zuordnung von NVMe SQEs und CQEs zu den RDMA Completion Queues (CQ)

3.3 NVMe over Infiniband
Im Vergleich zu den im Rechenzentrum etablierten Protokollen Ethernet und auch Fibre Channel ist Infiniband mit seiner Markteinführung Anfang der 2000er Jahre relativ jung. Entwickelt wurde Infiniband für Umgebungen, in denen allerhöchste Performance erforderlich ist. Laut Herstellerangaben sind mit Infiniband-Switches Port-zu-Port-Latenzen von weniger als 90 ns bei Bandbreiten von 200 Gbit pro Sekunde und Port möglich.

Wichtigster Grund Infiniband – als vergleichsweise exotische Technologie – hier zu erwähnen, ist die „Remote Direct Memory Access (RDMA)“ Implementierung. RDMA wurde entwickelt, um über das Netzwerk auf den Arbeitsspeicher eines entfernen Hosts zugreifen zu können. Ursprüngliches Einsatzszenario für RDMA ist, genauso wie für Infiniband, das High Performance Computing auf einer großen Anzahl von parallelen Hosts. Im Zusammenhang mit NVMe-oF ermöglicht RDMA, wie oben gefordert, die Übertragung von Daten über das Netzwerk ohne eine DRAM-zu-DRAM-Kopie zu erstellen (Zero Copy). Auch wenn RDMA für Infiniband entwickelt wurde, stellt es die Grundlage für die beiden wichtigsten Ethernet-Varianten von NVMe-oF dar, aber dazu später mehr.

Abbildung 16: Infi niband Protokollstapel

RDMA stellt den Applikationen sogenannte „Verbs“ als Application Programming Interface (API) zur Verfügung. Diese Verbs werden von den RDMA-fähigen NICs bzw. HCAs zur Speicherkommunikation genutzt. D.h. es wird, wie auch für NVMe over Fabric vorgesehen, auf Basis von Messages kommuniziert. Die Zuordnung der Verbs erfolgt, wie in Abbildung 15 dargestellt, zu den entsprechenden Warteschlangen. Bei der Nutzung von RDMA wird dabei zwischen „Work Queues“, zu denen auch „Send Queues“ zählen, und Completion Queues unterschieden. D.h. am NVMe-Modell sind keine Modifikationen erforderlich um RDMA zu nutzen, die Zuordnung von Warteschlangen-Paaren zu CPU-Kernen kann erhalten bleiben. Außerdem ist keine Anpassung von Applikationen erforderlich, die bereits RDMA nutzen. Dazu zählt z.B. Storage Spaces Direct im Microsoft Windows Umfeld oder auch der Linux-Kernel.

Wie alle modernen Netzwerkprotokolle nutzt auch Infiniband einen Protokollstapel mit Schichten, die unterschiedliche Funktionen bei der Kommunikation zwischen Applikationen erfüllen. In Abbildung 16 ist zu erkennen, dass Infiniband, wie auch Fibre Channel, zur Übertragung von Speicherbefehlen geschaffen wurde. Auch im Fall von Infiniband stand von Anfang an die Möglichkeit zum direkten Zugriff auf den Host DRAM durch die Netzwerkkarte im Vordergrund.

Das SCSI RDMA Protocol (SRP) z.B. ermöglicht die direkte Nutzung von SCSI-Geräten mittels RDMA. Die Adaption für NVME-oF ist also auch für das Infiniband-Protokoll mit vergleichsweise geringem Aufwand verbunden.

Auch die Anforderung – reliable NVMe command and data delivery – ist dank der Infiniband-Flusskontrolle gegeben. Die im Link-Layer implementierte Flusskontrolle sorgt dafür, dass ein Paketverlust aufgrund von überfüllten Warteschlangen vermieden wird. Sender und Empfänger tauschen permanent Informationen zum Status der Pakete und zum „Credit Limit“ d.h. zum noch verfügbaren Puffer aus. Dafür werden sogenannte „Credit Packets“ genutzt, die in Hardware verarbeitet werden. Um die Zuverlässigkeit des Transports zusätzlich zu erhöhen, werden außerdem zwei Mechanismen zur Erkennung von Bitfehlern genutzt: Zum einen – wie in anderen Netzwerkprotokollen auch – eine Checksumme für den unveränderlichen Teil der Pakete. Diese zyklische Redundanzprüfung (Invariant Cyclic Redundancy Check, ICRC) wird durch einen weiteren Prüfschritt für das gesamte Paket – einschließlich der veränderlichen Teile im Header – ergänzt. Durch die VCRC (Variant CRC) können Übertragungsfehler auf einer Hop-zu-Hop Basis erkannt werden. Dafür wird die VCRC Checksumme vor jedem Netzwerk-Hop neu berechnet, ICRC hingegen unterstützt bei der Ende-zu-Ende Kontrolle der Daten.

Abbildung 17: NVMe Techdemo von IBM auf dem AI Summit New York, 5.- 6. Dezember 2017

Wie schon erwähnt wird Infiniband auch und vor allem im High Performance Computing genutzt. In diesem Umfeld spielen Latenz und Übertragungsraten eine besonders große Rolle. Daher ist es nicht erstaunlich, dass frühe Technologiedemonstrationen zu NVMe-oF mit Infiniband durchgeführt wurden. So zeigte z.B. IBM Ende 2017 auf dem AI Summit in New York eine Ende-zu-Ende Implementierung von NVMe over Fabric (Abbildung 17).

3.4 NVMe over Ethernet
Ethernet hat sich als Netzwerktechnologie durchgesetzt. Dieses Statement gilt für viele Bereiche, das Rechenzentrum und den Campus eingeschlossen. Die Gründe dafür sind vielfältig: Hohe Bandbreiten von mittlerweile (zumindest in der Theorie) bis zu 400 Gbit/s pro Port, eine breite Herstellerunterstützung und eine gewaltige installierte Basis. Bei vielen Servern werden mittlerweile 10 GE Ports auf dem Mainboard mitgeliefert. Selbst im Speicherbereich – mit dem Platzhirsch Fibre Channel – konnte Ethernet mittels iSCSI, NFS und FCoE einen signifikanten Marktanteil erreichen.

Zur Flusskontrolle wird im Ethernet typischerweise TCP eingesetzt. Als „General Purpose Protokoll“ leidet der vielfach erprobte, aber auch etwas behäbige TCP/IP Stapel unter gewissen Einschränkungen in der Performance. TCP/IP kann zwar in Hardware verarbeitet werden, trotzdem bleibt der Nachteil der Speicherbereichskopien (Abbildung 4). Die iSER (iSCSI Extensions for RDMA) Erweiterung hat sich an dieser Stelle nicht durchgesetzt. Stattdessen wurden zwei Ansätze standardisiert, um RDMA auf einer Ethernet-Fabric zu übertragen: RDMA over Converged Ethernet (RoCE) und Internet Wide-area RDMA Protocol (iWARP).

Beide Varianten können genutzt werden, um NVMe über Ethernet zu etablieren. Allerdings sind dafür spezielle, RDMA-fähige Ethernet-Adapter erforderlich. Diese Tatsache hat zur Gründung einer NVMe Working Group geführt, die sich mit der Standardisierung von NVMe over TCP (iNVMe) befasst. Unterstützt wird diese Variante unter anderem von Schwergewichten wie DellEMC und Facebook, das an einer Weiterentwicklung seiner Lightning JBOF (Just a Bunch of Flash) Plattform interessiert ist. Die verschiedenen Optionen werden im Folgenden vorgestellt.

3.4.1 RoCE
Um die Nutzbarkeit von RDMA – und damit die Verbreitung von auf Infiniband basierenden Produkten – zu erhöhen,
begannen im Jahr 2009 Aktivitäten, um RDMA auf Ethernet zu ermöglichen. Der lediglich 19 Seiten lange Anhang zur
„Infiniband Architecture Specification“ wurde nach relativ kurzer Zeit im Jahr 2010 von der Infiniband Trade Organisation (IBTO) verabschiedet. Wie Abbildung 18 zeigt, wurde lediglich der Infiniband Link Layer durch Ethernet ersetzt und damit RoCEv1 spezifiziert.

Damit ist klar, dass RoCEv1 lediglich für die Nutzung innerhalb einer Ethernet-Layer-2-Domäne geeignet ist. Um diese Einschränkung aufzuheben, wurde im Jahr 2014 der RoCEv2 Anhang veröffentlicht. Wie ebenfalls in der Abbildung zu sehen, wird hier die Infiniband-Netzwerkschicht durch UDP/IP ersetzt. D.h. eine Kommunikation über Layer-3 ist möglich. In beiden Varianten wird allerdings weiterhin die Infiniband-Transport-Schicht genutzt.

Ein Nachteil von RoCE für den Nutzer konventioneller Ethernet-Infrastruktur könnte sein, dass RoCE ein verlustfreies Transportnetz voraussetzt. Da in Variante 1 der IB-Link-Layer ersetzt wird, fallen auch die dazu gehörigen Mechanismen zur Flusskontrolle weg. Daran ändert auch die Nutzung von UDP in Variante 2 nichts. Das bedeutet, im Idealfall kommt Hardware zum Einsatz, die Datacenter Bridging unterstützt (IEEE 802.1Qbb, Qaz und Qau). Zumindest muss aber Priority Based Flow Control, d.h. IEEE 802.1Qbb, unterstützt werden um den Speicherverkehr zu priorisieren. Und hier liegt das Problem. Diese Art von Routing/Switching-Hardware steht längst nicht in allen Unternehmensrechenzentren zur Verfügung. Außerdem ist die Konfiguration von DCB erfahrungsgemäß fehleranfällig und erfordert erfahrenes Personal.

Getrieben wird die Entwicklung von RoCE unter anderem von Mellanox. Storage Hersteller wie Pure Storage nutzen zur Anbindung von Expansions bereits RoCE und haben angekündigt, NVMe over Fabric mittels RoCE zu ermöglichen. Darüber hinaus ist RoCE auch in Windows Storace Spaces Direct implementiert.

Abbildung 18: Infi niband, RoCEv1, RoCEv2 ind iWARP Protokollstapel. Quelle: John Kim, David Fair, How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics, SNIA Webcast 2016

3.4.2 iWarp
Die zweite Ethernet-Technologie, welche durch ihre RDMA-Einbindung NVMe-oF möglich macht ist das Internet Wide Area RDMA Protocol. Entscheidender Unterschied zu RoCE ist, dass vollständig auf die Nutzung des Infiniband-Stacks verzichtet wird. Verantwortlich für die Standardisierung ist die IETF. Insgesamt 4 RFCs (5040 – 5042 und 5044) beschreiben die Implementierung von RDMA auf dem TCP/IP-Stapel. Darin zeigt sich auch eine der Herausforderungen von iWARP: TCP ist nicht für die Anforderungen optimiert, die eine Übertragung von Speicherdaten mit sich bringt. Wie bereits beschrieben, nutzt RDMA Messages zur Steuerung des Datenverkehrs. Um nun z.B. Lese- oder Schreibvorgänge zu initiieren, muss natürlich die vollständige Message verfügbar sein. Im Zusammenhang mit iWARP spricht man hier von den „Protocol Data Units (PDU)“, die vollständige Messages enthalten. Allerdings überträgt TCP zunächst einfach nur Datenpakete und sieht den Inhalt als Bitstrom, da es ihn, ganz in Übereinstimmung mit dem Schichtenmodell, nicht kennt und im Normalfall auch nicht kennen muss. Um nun eine Verknüpfung zwischen RDMA und TCP zu erzeugen, werden Marker eingeführt. Diese stellen sicher, dass vollständige PDUs übertragen werden (Marker PDU aligned framing, MPA). Gäbe es keinen derartigen Mechanismus, müssten die TCP-Pakete wie gehabt in einem Puffer zusammengesetzt werden, um die RDMA-Messages verfügbar zu machen. Zero Copy wäre also nicht möglich. Mit der MPA-Erweiterung ist iWARP zumindest schon einmal in der Lage, zusammenhängende RDMA-Verbs zu übertragen. Um nun allerdings direkt auf den Speicherbereich zugreifen zu können, ist eine weitere Protokollschicht erforderlich: Das „Direct Data Placement (DDP)“. Dieses wird, zusammen mit einer Protokollmapping-Schicht, verwendet, um die RDMA-Messages der Applikationen zu verarbeiten. Die Mapping-Schicht wird als RDMAP (RDMA Protocol) bezeichnet und dient dem Mapping von RDMA-Verbs zu NVMe Kommandos. Der resultierende Protokollstapel ist in Abbildung 19 dargestellt. Im Vergleich zu den bisher vorgestellten Varianten ist diese damit etwas komplexer. Das ist der Tatsache geschuldet, dass mit TCP ein Mechanismus gesetzt ist, der zwar erprobt ist, aber eben auch für andere Zwecke entwickelt wurde.

Abbildung 19: Protokollstapel von iWARP

Vorteil ist, dass durch die Nutzung von TCP im Prinzip auf verlustfreies Ethernet verzichtet werden kann. Die Flusskontrolle wird auf Ebene von TCP realisiert. Das bedeutet allerdings auch, dass letztlich Sender und Empfänger einer Transmission dafür verantwortlich sind z.B. eine Retransmission zu initiieren, wenn Pakete verloren gehen. Switches und Router auf dem Weg arbeiten, wie bei Ethernet/IP üblich, nach Best Effort. Sollte z.B. eine Verbindung überlastet sein, können Pakete verworfen werden. Das ist nicht weiter schlimm, da TCP dafür sorgt, dass diese Pakete erneut gesendet werden. Allerdings erzeugen jeder Paketverlust und die damit verbundene Retransmission zusätzliche Latenz. Ein verlustfreies Netz ist also nicht zwingend erforderlich, aber von Vorteil. Im Fall von iWARP könnte man das, zumindest annähernd, mit Standardhardware erreichen, indem man einfach die verfügbare Bandbreite erhöht. Dadurch werden Paketverluste unwahrscheinlicher. Außerdem hilft, wie auch bei iSCSI, ein dediziertes Speichernetz. Unter diesen Voraussetzungen stellt TCP weiterhin sicher, dass die Speicherkommunikation auch dann funktioniert, wenn einige wenige Pakete verloren gehen. NVMe-oF kann aber ohne die Nutzung von Spezial-Netzwerk-Geräten betrieben werden. Die NICs allerdings müssen weiterhin RDMA-fähig sein.

Unterstützt wird iWARP aktuell vor allem von Intel. Auch in Storage Spaces Direct kann iWARP genutzt werden. Für die Applikationen selbst ist durch die Nutzung von RDMA-Verbs egal, ob RoCE oder iWARP zum Einsatz kommt. Allerdings ist ein Mischbetrieb von RoCE und iWARP NICs nicht möglich.

3.4.3 NVMe over TCP
Die Reihenfolge der Protokollvorstellung in diesem Artikel ist bewusst so gewählt, dass die Anforderungen an das Netzwerk immer geringer werden. Fibre Channel/Infiniband erfordern eine spezialisierte SAN-Technologie, RoCE verlustfreies Ethernet mit speziellen NICs und iWARP schließlich nur noch diese speziellen Host-Adapter. All diese Technologien erfüllen den Anspruch von „Zero Copy“ während der Datenübertragung. Es ist aber eben auch spezielle Hardware nötig, um der NIC direkten Zugriff auf den Speicherbereich der Applikation zu gewähren.

Tabelle 2: Vergleich der NVMe oF Technologien

Ist nicht die allerhöchste Performance erforderlich, kann auf dieses Feature auch verzichtet werden. Nichts anderes wird auch in – mittlerweile sehr beliebten – iSCSI SANs getan. Die resultierende Speichertechnologie wird also nicht zu Unrecht auch als iNVMe bezeichnet. Mit einem derartigen SAN können viele der Vorteile von NVMe – parallele Queues, reduziertes Command-Set etc. – genutzt werden. Die Kommunikation wird allerdings weiterhin Socket-basiert sein. Daten werden also zunächst in einen TCP-Protokollpuffer kopiert und von dort in den Speicherbereich der Applikation. Dafür ist lediglich ein verlustfreies Netz erforderlich, das aber durch TCP gewährleistet werden kann. Natürlich sind damit dieselben Latenz- und Performance-Einschränkungen verbunden wie mit der iSCSI-Technologie. Um die Leistungsfähigkeit zu optimieren, sollten die NICs zumindest in der Lage sein, den TCP/IP-Stapel in Hardware zu verarbeiten.

Ein offizieller Standard für iNVMe existiert zum Zeitpunkt der Veröffentlichung dieses Artikels nicht, aufgrund des anscheinend großen Interesses von gewichtigen Anwendern – z.B. wie oben schon erwähnt Facebook – ist aber mit einer baldigen Bekanntmachung zu rechnen. Es bleibt dann abzuwarten, welche Speicherhersteller diese Technologie unterstützen werden.

3.5 Vergleich
Wie beschrieben steht eine Vielzahl an Protokollen zur Verfügung, um NVMe-oF zu betreiben. Dass die Hardware nicht interoperabel ist, macht die Entscheidung für eine Variante nicht einfacher. Insbesondere die Tatsache, dass drei verschiedene auf Ethernet basierendeTechnologien auf dem Markt sind/sein werden, kann zu einer relativ großen Unsicherheit bei zukünftigen Investitionen führen. In Tabelle 2 sind die verschiedenen Technologien und ihre wichtigsten Eigenschaften noch einmal dargestellt.

4. Ende-zu-Ende NVMe

Bisher hat sich der Artikel mit der Verfügbarkeit von vielen verschiedenen Möglichkeiten zur Übertragung von NVMe auf einer Fabric auseinandergesetzt. Die volle Leistungsfähigkeit kann dann genutzt werden, wenn das Gesamtsystem bestehend aus Host, Fabric und SAN-Speicher „NVMe-over-Fabric-Ready“ ist.

Abbildung 20: Gemischtes iSCSI/NVMe-oF SAN

In Abbildung 20 ist ein derartiges SAN dargestellt. In diesem Beispiel werden iSCSI und NVMe over Ethernet parallel betrieben. Genauso könnten z.B. auch SCSI-Fibre Channel und FC-NVMe gemeinsam genutzt werden. Die gemischte Variante wird wohl mittelfristig die wahrscheinlichste sein. Kaum ein Unternehmen wird sein komplettes SAN inklusive aller Hosts auf die neue Technologie umstellen. Theoretisch ist das schon seit einiger Zeit möglich. Sowohl die Hardware-Hersteller (Tabelle 29) als auch die wichtigsten Betriebssysteme unterstützen mittlerweile NVMe ober Fabric. So ist z.B. seit Linux Kernel Version 3.13 der neue blk-mq I/O-Scheduler verfügbar. Dieser ermöglicht die direkte Einbindung von NVMe-SSDs in den I/O-Stack. Aber auch andere Betriebssysteme wie Microsoft Windows, Solaris oder auch VMware ESXi unterstützen eine oder mehrere der diskutierten Varianten von NVMe-oF.

5. Fazit

Die Frage ist nun, ab wann sich die Implementierung im Unternehmen lohnt. Aktuell ist NVMe-oF eine High-End-Speichertechnologie, die dann zum Einsatz kommen sollte, wenn allerhöchste Performance benötigt wird. Dabei ist allerdings zu beachten, dass die Technologie noch sehr neu und damit variabel ist. Für Ende 2018 ist bereits eine Version 1.1 der NVMe-oF-Spezifikation angekündigt, die noch einmal einige Änderungen bringen dürfte, auch wenn das Grundprinzip sicherlich unangetastet bleiben wird. Außerdem beginnen die großen Speicherhersteller gerade erst damit, NVMe-oF auf dem Markt zu etablieren. Außerdem hat in Ethernet-Netzwerken leider noch keine finale Konsolidierung der verschiedenen Technologiezweige stattgefunden. Spannend bleibt auch die Frage, wie sich zentraler SAN-Speicher im Allgemeinen gegenüber verteilten Dateisystemen wie VMware vSAN, Nutanix Distributed Storage Fabric und Hyper Converged Infrastructure im Allgemeinen, behaupten kann.

Meiner Einschätzung nach lohnt es sich, die Technologie im Auge zu behalten. Abgesehen von der relativen „Unreife“ besitzt NVMe(-oF) deutliche Vorteile gegenüber SCSI-basierten Technologien. Wenn also die Neubeschaffung eines SAN-Speichers ansteht, sollte dieser zumindest
NVMe-oF-Ready sein.

Verweise

[1] Small Computer System Interface (SCSI), ANSI X3.131:1986
[2] Amber Huffman, Non-Volatile Memory Host Controller Interface
(NVMHCI) 1.0, 14. April 2008
[3] NVM Express TM Revision 1.3c, 24. Mai 2018
[4] Keith Busch, Flash Memory Summit 2014

Der Netzwerk Insider gehört mit seinen Produkt- und Markt-Bewertungen rund um IT-Infrastrukturen zu den führenden deutschen Technologie-Magazinen. Der Bezug des Netzwerk Insiders ist kostenlos.

© Copyright - ComConsult