Ich bin sicher, dass viele von NVM Express oder nur von NVMe gehört haben . Anfangs waren das für mich nur schnelle Fahrten. Dann wurde mir klar, dass dies die Schnittstelle zum Anschließen dieser Laufwerke ist. Dann begann er NVMe als Protokoll für die Datenübertragung über den PCIe-Bus zu verstehen. Und nicht nur ein Protokoll, sondern ein Protokoll, das speziell für Solid-State- Laufwerke entwickelt wurde!
Nach und nach wurde mir klar, dass dies eine ganze Spezifikation ist . Und los geht's ... Wie viele interessante Nutzungsfunktionen es in NVMe gibt. Wie viele Dinge wurden erfunden ... Es war sogar ein wenig beleidigend, dass eine solche Informationsschicht an mir vorbeiging.
Was genau ist NVMe? Lasst uns genauer hinschauen.
Alles begann mit der SATA-Schnittstelle . Zuvor gab es viele andere Schnittstellen - SCSI, UltraSCSI, ATA, PATA und andere, aber dies sind Dinge vergangener Tage. In diesem Artikel werden nur die aktuell relevanten Schnittstellen betrachtet.
Die Datenübertragungsgeschwindigkeit über die SATA-Schnittstelle erreicht 560 MB / s, was für Festplatten mehr als ausreichend ist. Die Leistung variiert zwischen 90 und 235 MB / s (es gibt einige Prototypen, deren Geschwindigkeit 480 MB / s erreicht ). Für SSD-Laufwerke reicht dies jedoch nicht aus, da ihre Leistung bereits jetzt zwischen 3000 und 3500 MB / s liegt. Die SAS-Schnittstelle funktioniert ebenfalls nicht, ihre maximale Geschwindigkeit beträgt nur 1200 MB / s.
Um das volle Potenzial von Solid-State-Laufwerken auszuschöpfen, haben sich große Köpfe für die Verwendung der PCIe-Schnittstelle entschieden . Jetzt können Sie Daten mit einer Geschwindigkeit von 8 bis 32 GB / s übertragen. Um die Verbindung von SSDs mit PCIe-Schnittstellen zu vereinheitlichen, wurde die NVMe-Spezifikation entwickelt. Ebenso wie die Spezifikation zum Anschließen von USB-Flash-Laufwerken zu gegebener Zeit erstellt wurde.
Wir werden NVMe nicht vollständig zerlegen. In diesem Artikel möchte ich Ihnen eine Funktion vorstellen , die mich sehr interessiert hat - NVMe-Namespaces oder Namespaces .
Hoffentlich gibt es unter den Lesern diejenigen, die daran interessiert sind, diese Technologie zu erforschen. Kommentare erfahrener Benutzer sind willkommen. Und wenn Sie, wie ich, gerade erst anfangen, das Thema zu verstehen, empfehle ich Ihnen, die Artikelserie zur Geschichte der SSD zu lesen . Einmal half sie mir, viel Müll in meinem Kopf zu stopfen und zu sortieren.
Näher an NVMe
NVMe unter Linux
Ich werde von weitem anfangen. Um Informationen über Namespaces zu studieren und zu suchen, wurde ich mit der Frage aufgefordert: "Warum werden NVMe-Festplatten unter Linux so genannt?"
Jeder ist es gewohnt, Festplatten unter Linux als Blockgeräte zu kennzeichnen. Sie sind Dateideskriptoren , die eine Schnittstelle für die Interaktion mit physischen oder virtuellen Geräten bieten. Und solche Geräte haben keinen zufälligen, aber recht strengen Namen, der einige Informationen enthält. Schauen wir uns die folgende Ausgabe von devfs an :
root@thinkpad-e14:~$ ls -l /dev/ | grep -E "nvme" crw------- 1 root root 241, 0 25 22:04 nvme0 brw-rw---- 1 root disk 259, 0 25 22:04 nvme0n1 brw-rw---- 1 root disk 259, 1 25 22:04 nvme0n1p1 brw-rw---- 1 root disk 259, 2 25 22:04 nvme0n1p2 brw-rw---- 1 root disk 259, 3 25 22:04 nvme0n1p3
Alle an die Produktionsmaschine angeschlossenen NVMe-Geräte werden hier aufgelistet. Betrachten Sie das Blockgerät / dev / nvme0n1p1 . Der nvme- Teil wird seltsamerweise für NVMe-Geräte verwendet. Die folgende Nummer gibt die Seriennummer des Festplattencontrollers an , der für alle mit dem Laufwerk ausgeführten Vorgänge verantwortlich ist. Das nachfolgende p1 gibt die Partitionsnummer auf der Festplatte an. Schließlich ist der Teil, der unsere Aufmerksamkeit verdient, n1. Dies ist die Nummer des Leerzeichens.
Der Einfachheit halber können Sie auch eine Analogie zu gewöhnlichen SSDs ziehen:
/ dev / sda - Analogon von / dev / nvme0n1
/ dev / sda1 - Analogon von / dev / nvme0n1p1
Achten Sie auf das Gerät / dev / nvme0. Dies ist ein NVMe-Controller. Es ist ein Charaktergerät. Daher können wir darauf verweisen, indem wir bestimmte Befehle senden, die wir weiter verwenden werden.
Namespace vs Partition
Sie fragen sich vielleicht: Wie unterscheidet sich der Namespace von der Partition? Lassen Sie uns alle Funktionen und Vorteile von NVMe Namespace fallen. Partition ist eine Host-Level - Festplattenpartition . Der Namespace ist ein Abschnitt auf Controller-Ebene . Das heißt, der Namespace ist eine Art logischer Bereich, mit dem der Host wie ein Blockgerät arbeitet.
Eine weitere Partitionierungsebene erhöht die Flexibilität der Organisation des Speichersystems, wodurch verschiedene Technologien eingesetzt werden können, um die Zuverlässigkeit, Leistung und Sicherheit von Daten zu erhöhen. Wir werden sie uns später ansehen.
NVMe-Controller-Parameter
Alle Datenvorgänge werden von einem speziellen NVMe-Controller ausgeführt. Darüber hinaus speichert es in seinem Speicher Metadaten über sich selbst und die interne Struktur von Informationen: Seriennummer, Modell, alle Arten von Festplatteneinstellungen, ihm zugewiesene Speicherplätze, Datenformat usw.
Ich schlage vor, sie unter dem Mikroskop zu untersuchen. Zu diesem Zweck habe ich einen speziellen Befehl an den Controller gesendet, auf den die Metadaten zurückgegeben wurden. Ich werde später erklären, wie das geht, aber jetzt schauen Sie sie sich an. Da es viele Daten gibt, habe ich sie nicht vollständig eingefügt, aber Sie müssen wissen, dass die Parameter, über die ich später sprechen werde, tatsächlich existieren :
{ "vid" : 5197, "ssvid" : 5197, "sn" : "00000000000000", "mn" : "00000000000000000000000000", "fr" : "7L1QFXV7", "rab" : 2, "ieee" : 9528, "cmic" : 0, "mdts" : 9, "cntlid" : 5, "ver" : 66304, "rtd3r" : 100000, "rtd3e" : 8000000, "oaes" : 512, "ctratt" : 0, "rrls" : 0, "crdt1" : 0, "crdt2" : 0, "crdt3" : 0, "oacs" : 23, "tnvmcap" : 256060514304, "unvmcap" : 0, ... }
Metadaten werden im Controller als eine Folge von Bytes in der Reihenfolge von hoch nach niedrig gespeichert, daher werde ich mich weiter an das folgende Aufzeichnungsformat halten:
[Intervall in Bytes (Big-Endian-Format)] / Parametername / Entschlüsselung.
Ein Beispiel für ein besseres Verständnis. Der folgende Datensatz bedeutet, dass zwischen 71 und 64 Byte der Wert des Parameters fr gespeichert wird , der für Firmware-Revision steht :
[71:64] / fr / Firmware-Revision.
[23: 4] / sn / Seriennummer. Enthält die Seriennummer des Controllers.
[63:24] / mn / Modellnummer. Enthält die Modellnummer oder Teilenummer.
[71:64] / fr / Firmware-Revision.Enthält die Versionsnummer der Controller-Firmware.
[257: 256] Unterstützung für / oacs / optionale Admin-Befehle. Zeigt das Vorhandensein zusätzlicher Befehle und Steuerungsfunktionen an. Es besteht aus 16 Bits, von denen jedes für einen bestimmten Befehl verantwortlich ist. Wenn das Bit 1 ist, ermöglicht der Controller Folgendes:
- [15:10] - reserviert;
- [9] - LBA-Status erhalten;
- [8] - Zugriff auf die "Türklingel-Pufferkonfiguration" erhalten ;
- [7] - Verwaltung der Virtualisierung ("Virtualisierungsverwaltung") ;
- [6] - Verwenden Sie die Befehle NVMe-Mi Recieve und NVMe-Mi Send ("NVMe Management Interface" ).
- [5] - Richtlinien verwenden ("Richtlinien") ;
- [4] — («Self-Test Commands»);
- [3] — («Namespace Management»);
- [2] — ( «Firmware Commit» «Firmware Download»);
- [1] — («NVM Format»);
- [0] — («Security Send», «Security Receive»).
In diesem Artikel werden nur die Funktionen behandelt, die sich auf Namespaces beziehen, nämlich "Namespace Management" und "NVM Format" . Wenn Sie an Details zu anderen Funktionen interessiert sind, können Sie sich auf die NVM Express Revision 1.4- Spezifikation beziehen .
NVMe-Raumparameter
Schauen wir uns nun die Metadaten der NVMe-Bereiche an:
{ "nsze" : 500118192, "ncap" : 500118192, "nuse" : 233042000, "nsfeat" : 0, "nlbaf" : 0, "flbas" : 0, "mc" : 0, "dpc" : 0, "dps" : 0, "nmic" : 0, "rescap" : 0, ... ] }
[7: 0] / nsze / Namespace-Größe. Dies ist die maximale Menge an Speicherplatz in logischen Blöcken. In diesem Fall - 500118192 512-Byte-Blöcke, die übrigens in der Blockdev- Ausgabe angegeben sind :
root@thinkpad-e14:~$ sudo blockdev --getsz /dev/nvme0n1 500118192
[15: 8] / ncap / Namespace-Kapazität . Dies ist die Anzahl der logischen Blöcke, die derzeit dem Speicherplatz zugewiesen sind.
[23:17] / nuse / Namespace verwenden. Dies ist die Anzahl der logischen Blöcke, die derzeit von Daten belegt sind.
Beachten Sie, dass die Optionen nsze und ncap gleich sind. Was ist der Sinn der Angabe des maximalen Volumens und des Volumens, das derzeit zugewiesen wird? Bedeutet dies, dass im Moment möglicherweise weniger zugeteilt wird als verfügbar? Ja!
Tatsache ist, dass Namespaces die Thin Provisioning- Technologie unterstützen. ... Dies bedeutet, dass nur ein Bruchteil des angegebenen Volumens dem Speicherplatz zugeordnet ist. Der andere Teil verbleibt im gemeinsam genutzten Pool und wird bei Bedarf diesem oder anderen Bereichen zugewiesen: wenn das zugewiesene Volumen voll ist oder wenn ein kritischer Schwellenwert erreicht wird. Im Allgemeinen ermöglicht diese Technologie eine effizientere Nutzung von Speicherressourcen. Weitere Details und klarer zu dieser Technologie finden Sie in diesem Artikel .
In unserer Situation sind nsze und ncap gleich, weil der Raum ohne die Unterstützung der Feinverteilung geschaffen wurde. Dieser Speicherplatz auf der Festplatte sieht folgendermaßen aus:
ncap und nsize zeigen auf eine 一 Gesamtmenge an Speicherplatz . Bei Verwendung einer Thin Distribution auf der Festplatte sieht der Speicherplatz folgendermaßen aus:
Hier gibt nsze das maximale Volumen an, nca p - das zugewiesene und nuse zeigt in beiden Fällen nur an, was belegt ist. Wenn der Wert von nuse ncap erreicht, erhöht sich der ncap , jedoch nicht mehr als nsze .
Es ist anzumerken, dass zur Unterstützung dieser Technologie eine angemessene Konfiguration des Namespace sowie Unterstützung für die Thin Distribution von der Controllerseite erforderlich ist.
[24:24] / nsfeat / Namespace-Funktionen.Dieser Parameter ist besonders interessant. Es zeigt das Vorhandensein zusätzlicher Merkmale des Raums an. Es besteht aus 8 Bits (sie sind auch in Big Endian aufgeführt), von denen jedes für eine bestimmte Funktion verantwortlich ist. Wenn der Bitwert 1 ist, ist die Funktion aktiv, 0 - nicht:
- [7: 5] - reserviert;
- [4: 4] - Unterstützung für zusätzliche Felder zur Optimierung der E / A ;
- [3: 3] - Deaktivieren Sie die Wiederverwendung des NGUID- Felds .
- [2: 2] - Unterstützung für gelöschte und ungeschriebene Blöcke ("Kontextattribute") ;
- [1: 1] - Unterstützung zusätzlicher Felder für die Atomaufzeichnung ("Atomic Operations") ;
- [0: 0] - Unterstützung für dünne Verteilung .
[26:26] / flbas / formatierte lba-Größe . Dieser Parameter zeigt auf eine LBA-Struktur. Besteht auch aus 8 Bits:
- [7: 5] - reserviert;
- [4: 4] - wenn auf 1 gesetzt: zeigt an, dass Metadaten am Ende des Blocks gespeichert werden ; mit einem Wert von 0: Metadaten werden in einem separaten Puffer übertragen ;
- [3: 0] - Ermöglicht die Auswahl eines von 16 möglichen LBA-Formaten.
[29:29] / dps / End-to-End-Einstellungen für den Datenschutztyp . Gibt die Art des End-to-End-Datenschutzes an. Besteht aus 8 Bits:
- [7: 4 ] - reserviert;
- [3: 3] - gibt die Art der Metadatenübertragung an ;
- [2: 0] - Zeigt das Vorhandensein von Datenschutz und dessen Typ an.
[30:30] / nmic / Namespace Multi-Path- und Namespace-Sharing-Funktionen . Dieses Feld gibt die Unterstützung für Funktionen an, die sich auf den Mehrfachzugriff auf Namespaces beziehen:
- [7: 1] - reserviert;
- [0: 0] - Der Wert 1 gibt an, dass dieser Bereich öffentlich ist (öffentlicher Namespace) und mit mehreren Controllern kommunizieren kann. Der Wert 0 gibt an, dass der Bereich privat ist (privater Namespace) und nur an einen gebunden ist .
Damit ist Ihr kurzer Überblick über die Parameter abgeschlossen. Ihre Anzahl ist riesig, so dass Sie Namespaces für verschiedene Aufgaben sehr fein konfigurieren können, die wir am Ende des Artikels betrachten werden. Eine detaillierte Beschreibung der einzelnen Parameter finden Sie in der NVM Express Revision 1.4- Spezifikation .
Öffentliche und private Räume
Der Artikel hat bereits Begriffe wie öffentliche und private Räume erwähnt . Aber ich habe ihre Bedeutung nicht geklärt, deshalb halte ich es für notwendig, ihnen ein wenig Zeit zu widmen.
Einer der Schritte beim Erstellen eines Space besteht darin, ihn einem NVMe-Controller zuzuweisen. Der Zugriff auf den Raum erfolgt über die Steuerung, der er zugeordnet ist. Der Speicherplatz kann jedoch nicht nur einem Controller - privat, sondern auch mehreren Controllern - öffentlich zugewiesen werden.
Wenn ein privater Bereich als normal bezeichnet werden kann, da daraus nichts Interessantes gemacht werden kann, können Sie in einem öffentlichen Bereich eine solche Gelegenheit als Namespace-Mehrweg verwenden...
Interoperabilität mit NVMe
Kommen wir zum Thema der Interaktion mit NVMe-Geräten: So senden Sie verschiedene Befehle an den Controller, erstellen Namespaces, formatieren sie usw. Dafür gibt es in der Linux-Welt ein Dienstprogramm - nvme-cli. Mit seiner Hilfe können Sie diese Vorgänge ausführen.
NVME-Liste
Um NVMe-Geräte aufzulisten, ist es nicht erforderlich, auf folgende Weise auf devfs zuzugreifen:
root@thinkpad-e14:~$ ls /dev/ | grep "nvme" nvme0 nvme0n1 nvme0n1p1 nvme0n1p2 nvme0n1p3
Oder verwenden Sie lspci, um herauszufinden, was mit der Maschine verbunden ist:
root@thinkpad-e14:~$ lspci | grep -E "NVMe|Non-Volatile" 07:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a809
Es reicht aus, den Befehl nvme list zu verwenden :
root@thinkpad-e14:~$ nvme list -o json { "Devices" : [ { "NameSpace" : 1, "DevicePath" : "/dev/nvme0n1", "Firmware" : "9L1QFXV7", "Index" : 0, "ModelNumber" : "SAMSUNG MZALQ256HAJD-000L1", "ProductName" : "Non-Volatile memory controller: Samsung Electronics Co Ltd Device 0xa809", "SerialNumber" : "00000000000000", "UsedBytes" : 38470483968, "MaximumLBA" : 500118192, "PhysicalSize" : 256060514304, "SectorSize" : 512 } ] }
Ich habe die Informationen als Beispiel im JSON- Format ausgegeben . Wie Sie sehen, wird hier nicht nur eine Liste der Geräte angezeigt, sondern auch verschiedene Informationen dazu. Ich denke, dass einige der Attribute (z. B. DevicePath oder ModelNumbe r) keine Kommentare benötigen, daher achte ich nur auf einige:
- Index - Controller-Nummer;
- UsedBytes Der in Bytes verwendete Speicherplatz.
- PhysicalSize - die maximale Menge an Speicherplatz in Bytes;
- SectorSize - LBA oder logisches Blockformat - der kleinste adressierbare Datenblock;
- MaximumLBA ist die maximale Anzahl logischer Blöcke.
nvme id-ctrl, nvme id-ns
Zu Beginn des Artikels habe ich den Befehl Identifizieren an den Controller gesendet, um Metadaten zu einem Gerät abzurufen . Zu diesem Zweck habe ich den Befehl nvme id-ctrl verwendet , um den Controller zu identifizieren:
root@thinkpad-e14:~$ nvme id-ctrl /dev/nvme0
Und nvme id-ns , um den Raum zu identifizieren:
root@thinkpad-e14:~$ nvme id-ns /dev/nvme0n1
Beachten Sie, dass Sie ein Gerät angeben müssen - einen Controller oder einen Namespace.
nvme create-ns, nvme delete-ns
Namespaces werden in mehreren Schritten erstellt. Zuerst müssen Sie es formen. Verwenden Sie dazu den Befehl nvme create-ns :
root@thinkpad-e14:~$ nvme create-ns /dev/nvme0 --nsze 1875385008 --ncap 1875385008 --flbas 0 --nmic 1 --dps 0 create-ns: Success, created nsid:1
Sie kennen bereits die Argumente für diesen Befehl. Wir haben sie im Abschnitt "NVMe Space Settings" untersucht.
Verwenden Sie den Befehl nvme delete-ns , um ein Leerzeichen zu löschen :
root@thinkpad-e14:~$ nvme delete-ns /dev/nvme0n1 delete-ns: Success, deleted nsid:1
nvme attach-ns, nvme attach-ns
Die zweite Phase des Erstellens von NVMe-Räumen besteht darin, den generierten Raum an den Controller zu binden. Verwenden Sie dazu den Befehl nvme attach-ns :
root@thinkpad-e14:~$ nvme attach-ns /dev/nvme0 --namespace-id 1 --controllers 1 attach-ns: Success, nsid:1
Mit diesem Befehl binden wir Leerzeichen mit der Kennung 1 an den Controller / dev / nvme0 . Beachten Sie auch das Argument --controllers . Hier werden die IDs der NVMe-Controller aufgelistet, denen der Speicherplatz zugeordnet werden kann. Dieses Argument ist optional und wird beim Erstellen öffentlicher Räume verwendet.
Aus irgendeinem Grund beginnt die Nummerierung der Controller bei 1, dh der Controller / dev / nvme0 hat eine Kennung von 1, die im Argument --controllers angegeben wird. Hoffentlich hilft Ihnen dies dabei, keine Zeit damit zu verschwenden, den folgenden Fehler zu untersuchen:
root@thinkpad-e14:~$ nvme attach-ns /dev/nvme0 --namespace-id 1 --controllers 0 NVMe Status:CONTROLLER_LIST_INVALID: The controller list provided is invalid(211c)
Verwenden Sie den Befehl nvme remove-ns , um den Leerzeichen zu lösen :
root@thinkpad-e14:~$ nvme detach-ns /dev/nvme0n1 --namespace-id 1 --controllers 1 detach-ns: Success, nsid:1
Der Speicherplatz verschwindet dann aus der Liste der Blockgeräte und wird unbrauchbar. Sie müssen auch nur die Controller angeben, von denen Sie den Platz im Argument --controllers entkoppeln möchten.
nvme reset
Sobald ein Raum an einen Controller gebunden wurde, kann er normalerweise für die Arbeit verwendet werden. Es kommt jedoch vor, dass der Controller den Speicherplatz nicht sehen kann. In diesem Fall muss es neu gestartet werden - verwenden Sie den Befehl nvme reset .
NVME-Format
Wenn das LBA-Format für ein Leerzeichen geändert werden muss, hilft der Befehl nvme format :
root@thinkpad-e14:~$ nvme format /dev/nvme0n1 --lbaf 0 Success formatting namespace:1
Das Argument --lbaf gibt das LBA-Format an.
Dieser Befehl kann jedoch auch zum sicheren Löschen von Daten auf einem NVMe-Laufwerk verwendet werden:
root@thinkpad-e14:~$ nvme format /dev/nvme0n1 --ses 1 -r Success formatting namespace:1
Das Argument --ses gibt den Mörtelgehalt an:
- 1 - alle Daten löschen;
- 2 - verschlüsselte Daten löschen.
Das Argument -r gibt an, dass der Controller nach einer sicheren Fugenmasse neu gestartet wird.
Anwendung
Es gibt viele Verwendungsmöglichkeiten für die Räume. Sie werden hauptsächlich zur Steigerung der Leistung und Redundanz verwendet und in Speichersystemen verwendet. Es gibt jedoch allgemeinere Anwendungsfälle.
Ersatzbereich
Beginnen wir mit einer ziemlich üblichen Verwendungspraxis. Der Ersatzbereich oder Reservebereich wurde bereits vor NVMe erfunden. Dies ist ein spezieller Bereich auf der SSD, der vom Controller selbst für interne Vorgänge verwendet wird und dem Host nicht zur Verfügung steht.
Durch Ändern der Größe der Leerzeichen können wir auch die Größe des Fallback-Bereichs ändern. Tatsache ist, dass das gesamte Volumen der Festplatte gleich der Summe der Volumina aller Speicherplätze und des Volumens des freien Bereichs ist:
Wenn wir also das Gesamtvolumen der Räume reduzieren, wird das verbleibende Volumen zugunsten des freien Bereichs verwendet.
Wenn Sie mehr über den Sicherungsbereich erfahren möchten, lesen Sie diesen Artikel .
Verschlüsselung und Isolation
NVMe-Laufwerke unterstützen OPAL SEDs . Darüber hinaus werden für jeden Namespace unterschiedliche Verschlüsselungsschlüssel verwendet.
Der Controller bietet auch Schreibschutz. Es gibt drei Ebenen:
- schreibgeschützt bis zum nächsten Neustart;
- schreibgeschützt bis zum nächsten Neustart nach Deaktivierung der Schreibschutzfunktion;
- schreibgeschützt während der gesamten Arbeit.
Es wird häufig in stationären und mobilen PCs verwendet. Beispielsweise kann ein Bootloader in einem schreibgeschützten Bereich platziert werden, um eine Beschädigung zu vermeiden. Andere wichtige Daten können auf die gleiche Weise geschützt werden.
Mehrfachverwendung
Wie bereits erwähnt, sind Leerzeichen Partitionen auf Controller-Ebene, die für den Endhost als separates Gerät sichtbar sind. Ist es möglich, ein großes NVMe-Laufwerk in mehrere private Bereiche aufzuteilen, von denen jeder dann verschiedenen Hosts zugewiesen wird? Kann! Mithilfe des Netzwerkprotokolls NVMe-oF (NVMe Over Fabrics) können diese Bereiche nicht nur virtuellen, sondern auch physischen Hosts zugewiesen werden.
Bei dieser Verwendung des Laufwerks sieht das Partitionierungsschema folgendermaßen aus:
Der NVMe-Controller stellt sicher, dass die Speicherplätze voneinander isoliert sind: Daten werden in separaten Bereichen des Laufwerks gespeichert, jeder Host verfügt über eine eigene E / A-Warteschlange. Der Ersatzbereich oder die Ersatzbereiche werden jedoch weiterhin gemeinsam genutzt.
Namespace Multi-Path und Namespace Sharing
Namespace-Sharing oder öffentliche Namespaces bedeuten, dass ein oder mehrere Hosts einen Space über zwei oder mehr Controller gemeinsam nutzen können.
Wofür ist das? Die Abbildung zeigt ein Diagramm der Nutzung öffentlicher Räume. Ja, interessant: Wir können über NVMe Controller 1 und NVMe Controller 2 auf den NS B-Bereich zugreifen. Aber ich sehe darin keinen Nutzen ... bis das Diagramm so aussieht:
Hier sehen wir, dass sich die Controller auf völlig unterschiedlichen Hosts befinden und wir mehrere unabhängige Pfade zu den Daten haben: über die Host-Controller Host A (blaue Controller) und Host B (lila Controller). Dies kann nun zur Redundanz oder zur Leistungssteigerung verwendet werden: Wenn der blaue Pfad stark belastet ist, gehen wir den violetten Pfad entlang.
Mit diesem Ansatz können Sie mithilfe von NVMe-oF leistungsstarke und äußerst zuverlässige, flexible, softwaredefinierte Speichersysteme von herkömmlichen Serverplattformen aus organisieren.
Ergebnis
NVMe-Namespaces sind
In diesem Artikel haben wir nicht alle Aspekte und Feinheiten der Verwendung von Namespaces behandelt. Es stellte sich eher eine Überprüfung oder Bekanntschaft heraus. Ich hoffe jedoch, dass dies Ihnen hilft, auf Wunsch mit einem tieferen Studium der Technologie zu beginnen.
Nachwort
Als ich diesen Artikel schrieb, war ich mit
- Samsung 970 EVO / 970 EVO Plus-Laufwerke mit 2b2qexe7 / 2b2qexm7-Firmware implementieren die Befehle zum Zurücksetzen und Formatieren nicht.
- Samsung 970 EVO / 970 EVO Plus-Laufwerke mit Firmware 2b2qexe7 / 2b2qexm7 implementieren keine Speicherverwaltung mit den Befehlen create-ns, delete-ns, remove-ns und atach-ns.
- Samsung PM991-Laufwerke mit 9L1QFXV7-Firmware weisen einen Fehler auf, aufgrund dessen ein Neustart des Controllers mit dem Befehl reset zu einem Fehler führt.
- Samsung PM991-Laufwerke mit 9L1QFXV7-Firmware weisen einen Fehler auf, aufgrund dessen die Formatierung des Speicherplatzes mit dem Befehl format zu einem Fehler führt.
- Samsung PM991-Laufwerke mit Firmware 9L1QFXV7 implementieren keine Speicherverwaltung mit den Befehlen create-ns, delete-ns, remove-ns und atach-ns.
Ich bin sicher, dass Festplatten aus dem Unternehmenssegment frei von diesen Problemen sind, aber nicht jeder kann es sich leisten, solche Hardware zu kaufen. Lesen Sie daher die Festplatten und Handbücher für sie beim Kauf im Detail. Wenn Sie vor dem Kauf die Möglichkeit haben, die Festplatten zu überprüfen und die Parameter des NVMe-Controllers anzuzeigen, müssen Sie ihn unbedingt verwenden.
Hilfreiche Quellen
- SSD: Gerät, Komponenten und Funktionsprinzipien
- Eine kurze Tour durch NVM Express
- NVMe 1.4-Spezifikation
- NVMe-Namespaces
- Base NVM Express — Part One
- NVMe Command Line Interface (NVMe-CLI)
- NVMe Over Fabrics