olgasalt - stock.adobe.com
Was ist Nutanix Blockstore?
Nutanix integriert Blockstore und SPDK-Technologie in seine AOS-Plattform, um höheren Durchsatz und geringere Latenz zu erreichen und neue Technologien wie NVMe und SCM zu nutzen.
Blockstore und das Storage Performance Developer Kit (SPDK) sind Erweiterungen des Nutanix-Betriebssystems AOS, wobei Blockstore allerdings eine Eigenentwicklung ist und mit SPDK die Performance verbessern soll, was in schnelleren Datenzugriffen und geringerer Latenz resultiert.
Blockstore wurde spezifisch für die Nutzung von NVMe-Flash konzipiert, um dessen Vorteile optimal zu nutzen. Im Anschluss finden Sie die Beschreibung der Funktionsweise von Blockstore und SPDK, die erklären, wie die Leistungssteigerung erreicht wird.
Blockstore und die Blockstore-Architektur
Nutanix AOS läuft in einer Linux-basierten Virtuellen Maschine (VM) auf jeder Node innerhalb eines Clusters. Diese wird Controller Virtual Machine (CVM) genannt. Stargate verwaltet alle I/O-Operationen und ist das Interface des Hypervisors (via NFS, iSCSI oder SMB). Diese Schnittstelle muss so genannte System Calls an das Kernel-Dateisystem und das Block-Subsystem absenden.
AOS verwaltet seine eigenen Metadaten. Stargate speichert die Metadaten eines Clusters in einem Distributed Key Value Store (verteilte Schlüssel-Werte-Datenbank), wobei eine modifizierte Cassandra-Datenbank eingesetzt wird. Lokale Metadaten werden hingegen in einem hoch performanten Key Value Store – einer RocksDB – abgelegt. Stargate kann die Metadaten und physischen Speichergeräte managen, ohne dabei die zusätzlichen Funktionen des Linux-basierten Dateisystems nutzen zu müssen.
Blockstore ist ein Free Space Manager, der freie Plätze auf den physischen Geräten auf Block-Level-Ebene kontrolliert. Mit Blockstore wird das Filesystem vom Kernel entfernt und in den Application User Space verschoben. Das ermöglicht Stargate. Die System Calls (syscalls) und Unterbrechungen (Interrupts) zu umgehen, wenn auf die Daten des Flash zugegriffen wird.
Zudem werden keine Memory-Kopien vom Kernel-basierten Dateisystem benötigt. Nach Herstellerangaben entfernt Blockstore 60 Prozent der System Calls, da es pro Transaktion drei System Calls entfernt.
Blockstore hat ein geschichtetes Design (Layer-basiert), was Stargate zugute kommen soll. Blockstore wird durch einen abstrahierten linearen Adressraum unterstützt, der Blocking Store heißt. Dieser Backing Store kann ein physisches Gerät sein, beispielsweise eine Festplatte, eine SSD, NVMe oder Optane.
Es kann aber auch ein nicht persistenter linear adressierbarer Speicher sein, wie Memory, oder ein virtueller Speicher wie vDisk. Damit soll das Design eine höhere Flexibilität und den Einsatz neuerer Technologien ermöglichen.
Blockstore verfügt über zwei verschiedene adressierbare Schichten (Layer), den Block Management Layer und den File System Layer. Die Managementschicht ist für die Zuteilung und Aufhebung der Zuteilung (Allocation und De-Allocation) der Blöcke zuständig.
In der Regel werden 8k-Blöcke geschrieben. Der Stargate Datenpfad, der nicht auf Dateisystem-Funktionen angewiesen ist, kann nun direkt mit dem Block Management Layer kommunizieren. Die Dateisystemschicht „sitzt“ auf dem Block Management Layer und stellt Stargate ein POSIX-ähnliches Filesystem-API zur Verfügung. Dieser Layer ist für den Stargate-Teil gedacht, der eben Dateisystemfunktionen braucht. Diese Entkopplung der Stargate-Teile soll die Performance optimieren.
Blockstore und das Storage Performance Developer Kit in Kombination
Um die Leistung weiterhin zu verbessern, nutzt Nutanix das Storage Performance Developer Kit (SPDK) in Verbindung mit Blockstore. Blockstore ermöglicht nicht nur die Reduzierung der System Calls, es gewährleistet darüber hinaus die Verwendung von Bibliotheken und APIs, die den Zugriff auf Storage direkt vom User Space aus garantieren.
Eine solche Bibliothek ist das SPDK von Intel. Es erlaubt den User-Space-Prozessen den direkten Zugriff auf NVMe-Geräte. Die Kombination von Blockstore und SPDK soll verschiedene Vorteile bringen. Zum einen werden Interrupts (Unterbrechungen) verhindert, was die Latenz von Anwendungen verringert. Zum anderen werden Kernel-Locks eliminiert, so dass sich die Performance linear entsprechend der Anzahl der NVMe-Geräte skalieren lässt. System Calls werden reduziert, da ein direkter Zugriff auf den Speicher vom User Space aus möglich ist, was den I/O-Datenpfad effizienter macht.
Darüber hinaus nutzt Nutanix auch das RDMA-Protokoll für den Datenverkehr zwischen den Nodes mit unterschiedlichen Hypervisoren, was den Schreibdurchsatz erhöht.
Vorteile von Blockstore und SPDK
Blockstore macht das Speichern und die Block-Allokation effizienter, während SPDK dem Nutanix AOS direkten Zugriff vom User Space aus gewährleistet. Damit lassen sich die Vorteile NVMe-basierten Speichers optimal nutzen. Mittels feingranularer Metadaten sind effizienteres Tiering und bessere Datenbewegungen zwischen Nodes und Clustern realisierbar.
Daten werden den Anwendungen und VMs lokal in der Node bereitgestellt, was Netzwerk-Hops vermeidet. Mit AES (Autonomous Extent Store) werden auch Metadaten lokal vorgehalten, was die nachhaltige Anwendungsleistung optimiert.
Blockstore baut auf diesen wichtigen Architekturgrundsätzen auf und eliminiert den OS-Kernel-Engpass. Das wiederum resultiert in schnelleren Speicheroperationen und hoher Performance, während SPDK die Vorteile von Optane und NVMe optimal nutzt.
Über das Storage Performance Developer Kit
Das Storage Performance Development Kit (SPDK) bietet eine Reihe von Tools und Bibliotheken zum Schreiben hochleistungsfähiger, skalierbarer Speicheranwendungen im Benutzermodus. Es erreicht eine hohe Leistung durch die Verwendung einer Reihe von Schlüsseltechniken:
- Die Verlagerung aller erforderlichen Treiber in den User Space, wodurch Syscalls (System Calls) vermieden werden und ein Zero-Copy-Zugriff von der Anwendung aus ermöglicht wird.
- Abfrage der Hardware nach Vervollständigungen, anstatt sich auf Unterbrechungen (Interrupts) zu verlassen, was sowohl die Gesamtlatenz als auch die Latenzvarianz verringert.
- Vermeiden aller Interrupts im I/O-Pfad, statt sich auf die Nachrichtenübergabe zu verlassen.
Die Grundlage von SPDK ist ein User-Space-, Polled-mode-, asynchroner, lock-freier NVMe-Treiber. Dies ermöglicht einen kopierfreien, hochparallelen Zugriff direkt auf eine SSD von einer User-Space-Anwendung aus. Der Treiber ist als C-Bibliothek mit einem einzigen öffentlichen Header geschrieben.
SPDK bietet darüber hinaus einen vollständigen Block-Stack als User-Space-Bibliothek, die viele der gleichen Operationen ausführt wie ein Block-Stack in einem Betriebssystem. Dazu gehören die Vereinheitlichung der Schnittstelle zwischen verschiedenen Speichergeräten, das Einreihen in eine Warteschlange (Queuing) zur Bewältigung von Memory- oder I/O-Engpässen und die Verwaltung logischer Datenträger.
Schließlich bietet SPDK NVMe-oF-, iSCSI- und vhost-Server, die auf diesen Komponenten aufbauen und in der Lage sind, Platten über das Netzwerk oder andere Prozesse zu bedienen. Die Standard-Linux-Kernel-Initiatoren für NVMe-oF und iSCSI kann diese Targets adressieren, ebenso wie QEMU vhost addressiert. Diese Server können CPU-effizienter sein als andere Implementierungen. Diese Targets können als Beispiele für die Implementierung eines HPC-Storage-Targets oder als Grundlage für Produktionseinführungen verwendet werden. (Quelle: spdk.io)
Die Enterprise Storage Group evaluierte die Lösung in einem Leistungstests unter Verwendung eines Nutanix NX-8170-G7-Clusters mit vier Knoten, der mit acht 2 TB-NVMe-Geräten pro Node bestückt war und sowohl synthetische als auch realistische Anwendungs-Workloads verglich. Bei den Tests wurden Tools zur Generierung von Anwendungs-Workloads verwendet, um die Leistung von Blockstore und SPDK mit der Vorgängerversion von AOS zu vergleichen. Die Testkonfigurationen waren, wie auch die Hardware, in allen Fällen identisch.
Getestet wurden vier Workload-Szenarien: ein so genannter Four Corner-Test, eine High-Performance-Datenbanksimulation, ein OLTP-Szenario und eine Postgres Analyse. Die Ergebnisse zeigen, dass in allen vier Tests die Leistungssteigerungen zwischen 13 und 27 Prozent liegen, abhängig davon, ob es sich um eine Lese- oder Schreibaktion, um IOPS und um Random oder sequentielle Zugriffe handelt.
Bei leseintensiven Workloads zum Beispiel lag die Leistung 20-25 Prozent höher als bei der Vorgängerversion. Latenz- und Antwortzeiten erfahren durch die Kombination aus Blockstore und SPDK ebenso eine Verbesserung. In einem Cluster zeigt sich zudem eine Optimierung der Datenbanktransaktionen von 66 Prozent und der Latenz von 45 Prozent.