ZFS bringt nicht nur Verfügbarkeitsfeatures mit, sondern auch Funktionen hinsichtlich Cache. Wenn wir lesen Cache, dann spricht man meistens über Schreib- & Lesecache. Und da sind wir bei ZFS genau richtig. ARC & L2ARC sind die Lesecache Funktionen und LOG/ZIL (ZFS Intend Log) ist für den Schreibcache da. Somit haben wir eine vollständige Abdeckung unserer Bedürfnisse hinsichtlich eines vollwertigen Caches. Aber Einrichten muss man es noch selber und die Logik dahinter verstehen erst Recht.
Wofür ist der ZFS Cache gut?
Na klar, so wie der Name es schon sagt, der Cache federt Schreib- und Leseanfragen auf dem Datastore ab. Kommt also eine intensive Schreibanfrage zum Datastore rein, wird zunächst in den LOG geschrieben bevor es auf die darunter liegende Festplatte geschrieben wird. Hier kann man schon erahnen das der LOG Cache performanter sein sollte, als der Speicherplatz hinter dem Cache.
In etwa selbe gilt für den ARC bzw. L2ARC Cache (Adaptive Replacement Cache). Dieser dient als Lesecache und hält häufig und wiederkehrende gelesene Blöcke vor. Also wird z.B. eine Datei häufig aufgerufen, dann merkt diese Logik das und hält diese Datei im schnellen performanten Speicher bereit, für die nächste Leseiteration.
L2ARC & ARC unterscheiden sich lediglich darin, dass ARC der Lesecache ist welcher im RAM aufbewahrt wird und L2ARC auf einer schnellen SSD, als zusätzlichen Lesecache.
Zusammengefasst sind diese 3 Cache Mechanismen dafür da dein etwaige „Langsamen“ Datapool zu mehr Geschwindigkeit zu verhelfen.
Lesecache – ARC & L2ARC
Der Lesecache teilt sich hier in 2 Formen auf, einmal den ARC Cache (RAM) und den L2ARC Cache (SSD, NVMe). Der ARC ist natürlich bevorzugt, da dieser im ultra schnellen RAM aufbewahrt wird. In der Anschaffung ist dieser hinsichtlich großer Kapazität natürlich deutlich teurer und genau dafür gibt es dann den L2ARC. Der L2ARC befindet sich dagegen zusätzlich zum ARC auf einer SSD oder NVMe Festplatte und bietet diesen Intelligenten Cache auf zweiter Ebene an. Auf zweiter Ebene bedeutet hier wirklich, alles was nicht wichtig genug oder zuviel für den ARC Cache ist, landet im L2ARC. Die Intelligenz bei beiden unterscheidet sich nicht, aber die große Kapazität findet man dann doch ehr im L2ARC wieder.
ARC ist Intelligent und kann Hellsehen
Jetzt ist die Frage was hält der ARC Cache denn alles im Cache fest, damit der Datapool schneller wird? Eigentlich ziemlich einfach. ZFS merkt sich welche Datenblöcke und/oder Dateien häufig gelesen werden und erstellt sowas wie eine Strichliste. Alle Dateien die auf dieser Strichliste mit den meisten Zugriffen stehen, werden schon mal im Cache vorgehalten. Aber auch Datenblöck auf die erst kürzlich zugegriffen wurden, werden im Cache vorgehalten. So entstehen zwei Teilbereiche, auf welcher mit hoher Wahrscheinlich in naher Zukunft wieder zugegriffen wird. Sind diese dann bereits im Cache vorgehalten, können diese ganz schnell an den Client durchgereicht werden, ohne auf eine langsame Festplatte warten zu müssen. Da nun Teilbereiche des Datenbestandes im Cache liegen, auf welche höchstwahrscheinlich in kürze wieder zugegriffen wird, kann man hier von Hellsehen sprechen. 🙂
Schreibcache – ZIL / LOG
Der Schreibcache ist natürlich genauso wichtig wie der Lesecache, allerdings gibt es hier eine ganz wichtige zusätzliche Information. Beim Lesecache ist es nicht schlimm wenn dieser nicht zur Verfügung steht, dass ist allerdings beim Schreibcache anders. Haben wir beispielsweise gerade eine Datei geschrieben, landet diese natürlich sofort im Schreibcache und wird nach Bedarf in den Hauptspeicher unten drunter rein geschrieben. Fällt aber der Cache in der Zeit aus, wo diese Daten noch nicht in den Hauptspeicher geschrieben worden sind, sind die Daten weg! Deshalb sollte man dringend darüber nachdenken den Schreibcache doppelt auszulegen und ebenfalls zu spiegeln. Also für den Schreibcache zwei SSDs oder Partitionen vorsehen, welche ebenfalls über ZFS gespiegelt werden. So können wenigstens im Fehlerfall die zwischengespeicherten Daten noch in den Hauptspeicher geschrieben werden.
Ansonsten ganz klar, ist der Hauptspeicher nicht sehr schnell, zum Beispiel bei mehreren HDDs in einem RAID-Verbund, dann bringt der NVMe oder SSDs Schreibcache einen erheblichen Performanceschub in den Datapool.
Wann setze ich nun Caching ein?
Immer dann wenn der große Hauptspeicher (Datapool) zu langsam für meine Anforderung ist, kann ich den zusätzlichen Cache hinzufügen und aktivieren. Das kann im übrigen auch im laufenden Betrieb geschehen. Der normale ARC (RAM) ist sowieso immer aktiviert, kann aber auch in seine Größe noch frei gewählt werden.
Lese hier noch vieles mehr über die ZFS Funktionen:
ZFS erklärt: Alle Funktionen des Dateisystems im Überblick
30. August 2021 um 14:18 Uhr
Diggi, das is straight falsch was du da zum ZIL schreibst.
Der ZIL wird ausschließlich für synchrone Schreibzugriffe verwendet und es wird auch nur eine zusätzliche Kopie der zu schreibenden Daten dort abgelegt. Die Daten werden wie ALLES mit den ganz normalen transaction groups (TXG) in den Pool geschrieben und dann im ZIL unlinked. Der ZIL ist KEIN WRITE CACHE(!!) für den ZFS pool, es ist nur ein Zwischenspeicher für synchrone Schreibzugriffe auf den Pool (Punkt).
Die Daten landen in den ganz normalen TXGs im RAM und werden außerdem zusätzlich in den ZIL geschrieben um einen synchronen Schreibzugriff abzuarbeiten. In keinem Fall werden asynchrone Schreibzugriffe (99% aller Schreibzugriffe) im ZIL gecached.
Der ZIL wird nur dann konsultiert, wenn es zu einem Stromausfall oder Systemabsturz gekommen ist um die dort noch vorhandenen (nicht abgearbeitetetn) Daten in den Pool zu schreiben. Im Normalbetrieb wird aus dem ZIL absolut nichts gelesen. Es ist nur eine Absicherung gegen Datenverlust bei einem Systemfehler und eine Beschleunigung für synchrone Schreibzugriffe.
Auch erwähnst du nicht, das der ZIL immer aktiv ist und ein LOG Device lediglig ein dediziertes Laufwerk oder eine Partition ist, auf welche der ZIL ausgelagert wird. Sonst ist es einfach ein Speicherbereich auf den Laufwerken des Pools.
Ein Betrieb on ZFS ohne ZIL wäre gar nicht möglich, da ZFS absolut alle Daten im 5 Sekunden Intervall als TXG in den Pool schreibt. ZFS könne ohne ZIL also gar keine synchronen Schreibzugriffe entgegennehmen bzw. das Programm müsste warten bis die nächste TXG abgearbeitet ist.
Schon grenzwertig das so zu veröffentlichen, wenn man über prox-cloud.de Trainings verkauft.
Tip am Rande: Hauptspeicher solltest du im Kontext deines Artikels so nicht verwenden. Die Verwechselungsgefahr mit dem Begriff RAM (Hauptspeicher des Rechners)ist viel zu groß und nicht intuitiv.
Aber seriously, dieser Artikel gehört hart korrigiert und ich schreib den Kommentar auch nur, damit hier keiner mit Falschinfo rausgehen muss.
Grüße gehen raus.
27. September 2021 um 21:49 Uhr
Absolut korrekt und gut erklärt Dude :).
Keine Ahnung warum der Artikel noch nicht runter genommen bzw. korrigiert wurde, denn das ist schlichtweg falsch und fahrlässig so etwas hier zu verbreiten.
Ein SLOG macht auch nicht immer sinn. Nur wenn man Anwendungen hat die viele synchrone Schreibzugriffe erfordern. Das mit den 99 % sind asynchron würde ich nicht pauschal sagen, das kommt eben auf die Anwendung an.
5. Februar 2023 um 22:26 Uhr
Wenn man HDD’s benutzt ist ein ZIL auf einer SSD (besser zwei mit Mirror) absolut sinnvoll, selbst wenn man 99% asynchrone und nur 1% synchrone Zugriffe hat. Die bremsen das gesamte System aus! Und man kann sich das ja nicht aussuchen – dem Anwendungsentwickler ist es überlassen, welche Daten er asynchron und welche er synchron schreibt.
15. Januar 2022 um 19:30 Uhr
Hi,
Um auch noch ins Artikel-korrigieren-Horn zu blasen: es sollte erwähnt werden, dass ein L2ARC nicht einfach magisch das System schneller macht, sondern eigentlich langsamer, da der L2ARC ja ebenfalls eine Map im ARC liegen hat und somit faktisch der ARC kleiner wird und somit das System langsamer.
Andere Wege ein ZFS schneller zu machen ist die Metadaten auf extra vdevs auszulagern (special group) und damit einen Festplattenverbund zu neugenannten Höhen zu verhelfen. Für SLOG würde ich sogar gleich zu Optane greifen (32 GB reicht da), Hauptsache sehr, sehr geringe Latenz.
Viele Grüße
Andreas
23. November 2022 um 20:45 Uhr
Hallo, derartige Artikel sind leider immer der gefährliche Nährboden für Halbwissen.
Dieses muss dann später in anstrengenden, mühsamen Diskussionen korrigiert werden.
Autor, sei so lieb, und nehm die Korrekturen der ersten kommentare an.
ZFS hat keinen write Cache, dieses Gerücht begegnet mir in letzter zeit leider sehr häufig.
Und nein, ZFS hat auch keine Tiering Funktionalität.
Auch so ein hartnäckiges Gerücht.