ArtikelStorage

Hauptsache schnell – Hybrid Storage Pools nutzen die jeweiligen Stärken von HDD, SSD und DRAM

DRAM ist die erste Wahl

Die “beste Adresse” für alle geschriebenen Daten in einem solchen Pool ist der schnelle Adaptive Replacement Cache (ARC), der sich im DRAM befindet. Dies ist die Quelle für das Lesen von Daten mit der geringsten Latenz. ZFS prüft bei einer Anfrage nach Daten zuerst, ob sich diese im ARC befinden. Sind diese dort, lassen sie sich innerhalb von Nanosekunden lesen und erreichen somit sehr schnell die Anwendung, die die Daten benötigt. Welche Daten innerhalb des ARC vorgehalten werden, entscheidet ZFS automatisch nach den Kriterien ‘Most Recently Used’ (MRU) und ‘Most Frequently Used’ (MFU).

SSD ist zweite Anlaufstation

Der zweite Pfeiler ist das ‘Level 2 ARC’ (L2ARC), das aus SSDs besteht. Ohne L2ARC müssten alle Daten, die im ARC keinen Platz finden, von langsamen Festplatten gelesen werden. SSDs überbrücken den Geschwindigkeitsunterschied zwischen DRAM und HDDs, der mehrere Millisekunden beträgt. SSDs sind teurer als HDDs; es ist aber deutlich günstiger, hunderte Gigabyte Flashspeicher in Form von SSDs anzuschaffen, als die gleiche Menge in DRAM. Die I/Os auf SSDs sind zwar langsamer als bei DRAM, der Durchsatz ist jedoch bekanntermaßen deutlich höher als bei Festplatten. Der dritte Pfeiler des Hybrid Storage Pools sind schließlich HDDs. Welche Daten auf der zweiten Cache-Ebene gespeichert werden, entscheiden wiederum intelligente Algorithmen innerhalb von ZFS. Auf den HDDs schließlich befinden sich alle Daten, auch die gecoachten. Dies ist ein entscheidender Unterschied zu Tiered Storage, wo die Originaldaten zwischen schnelleren und langsameren Daten verschoben werden müssen.

Latenzzeiten senken und dabei Datenintegrität garantieren

Ähnlich wie beim Lesen funktioniert der Hybrid Storage Pool auch beim Schreiben. ZFS handhabt mittels Caching die synchronen Schreibvorgänge verschiedener Protokolle (beispielsweise NFS, SMB/CIFS). Die Schreibvorgänge werden im das ZFS Intent Log (ZIL) protokolliert, bis sie an nicht-volatilen Stellen im Speicher abgelegt sind.

Die Latenz von synchronen Schreibvorgängen zu reduzieren, hat einen direkten Einfluss auf die Leistung, denn Datenbanken setzen gewöhnlich voraus, dass Daten auf einem dauerhaften Speicher geschrieben sind, bevor sie den Vorgang abschließen können. Während alle Schreibvorgänge, sowohl synchrone als auch asynchrone, auf DRAM in den ARC geschrieben werden, werden synchrone zusätzlich auch auf den ZIL auf SSD geschrieben.

ZFS bündelt regelmäßig alle neuen Schreibvorgänge im ARC und verteilt diese auf die Festplatten. Ab diesem Moment werden die Protokolle auf dem ZIL nicht länger benötigt und können überschrieben werden, da die Daten ihre finale Stelle auf einem langfristigen, nicht-volatilen Medium erreicht haben. Unter normalen Umständen wird das ZIL also nicht benötigt. Es wird nur gelesen, wenn synchrone Schreibvorgänge aus dem ARC nicht auf Festplatte geschrieben werden können, zum Beispiel nach einem Stromausfall oder bei Ausfall eines Controllers. Dann liest ZFS das ZIL und legt die Daten anschließend wie geplant auf den Festplatten ab. Auf diese Weise ist der Verlust einer Transaktion oder die Inkonsistent zwischen Nutz- oder Paritätsdaten ausgeschlossen. Genau wie ARC und L2ARC wird das ZIL automatisch und intelligent von ZFS verwaltet, ohne jeglichen Eingriff eines Administrators.