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

Habe ich etwas vergessen? Fehlen dir noch Informationen? Benötigst du trotzdem noch Hilfe bei deinem Anliegen? Dann schreib mir eine private Nachricht oder poste es direkt in die Kommentare.

Dennis Schröder // Geiler Typ