ZFS

ZFS-Cache für High-Speed-IO konfigurieren

ZFS-Cache für High-Speed-IO konfigurieren

Cache in Ihrem ZFS-Pool konfigurieren

Wenn Sie unsere vorherigen Beiträge zu ZFS-Grundlagen gelesen haben, wissen Sie inzwischen, dass dies ein robustes Dateisystem ist. Es führt Prüfsummen für jeden Datenblock durch, der auf die Festplatte geschrieben wird, und wichtige Metadaten, wie die Prüfsummen selbst, werden an mehreren verschiedenen Stellen geschrieben. ZFS kann Ihre Daten verlieren, aber es gibt Ihnen garantiert nie falsche Daten zurück, als ob es die richtigen wären.

Der größte Teil der Redundanz für einen ZFS-Pool stammt von den zugrunde liegenden VDEVs. Gleiches gilt für die Leistung des Speicherpools. Sowohl die Lese- als auch die Schreibleistung können durch Hinzufügen von Hochgeschwindigkeits-SSDs oder NVMe-Geräten erheblich verbessert werden. Wenn Sie Hybrid-Festplatten verwendet haben, bei denen eine SSD und eine rotierende Festplatte als einzelne Hardware gebündelt sind, dann wissen Sie, wie schlecht die Caching-Mechanismen auf Hardwareebene sind hardware. ZFS ist nichts dergleichen, aufgrund verschiedener Faktoren, die wir hier untersuchen werden.

Es gibt zwei verschiedene Caches, die ein Pool verwenden kann:

  1. ZFS Intent Log oder ZIL, um WRITE-Operationen zu puffern.
  2. ARC und L2ARC, die für READ-Operationen gedacht sind.

Synchrone vs. asynchrone Schreibvorgänge

ZFS versucht, wie die meisten anderen Dateisysteme, einen Puffer für Schreibvorgänge im Speicher zu halten und ihn dann auf die Platten zu schreiben, anstatt ihn direkt auf die Platten zu schreiben. Dies ist bekannt als asynchron schreiben und es gibt ordentliche Leistungssteigerungen für Anwendungen, die fehlertolerant sind oder bei denen Datenverlust nicht viel Schaden anrichtet. Das Betriebssystem speichert die Daten einfach im Speicher und teilt der Anwendung, die den Schreibvorgang angefordert hat, mit, dass der Schreibvorgang abgeschlossen ist. Dies ist das Standardverhalten vieler Betriebssysteme, auch wenn ZFS ausgeführt wird.

Fakt ist jedoch, dass bei Systemausfall oder Stromausfall alle gepufferten Schreibvorgänge im Hauptspeicher verloren gehen. Anwendungen, die Konsistenz über Leistung wünschen, können also Dateien in synchron Modus und dann gelten die Daten erst dann als geschrieben, wenn sie sich tatsächlich auf der Festplatte befinden. Die meisten Datenbanken und Anwendungen wie NFS verlassen sich ständig auf synchrone Schreibvorgänge.

Sie können das Flag setzen: synchronisieren = immer um synchron zu machen, schreibt das Standardverhalten für jeden gegebenen Datensatz.

$zfs set sync=immer meinpool/dataset1

Natürlich möchten Sie möglicherweise eine gute Leistung, unabhängig davon, ob sich die Dateien im synchronen Modus befinden oder nicht. Hier kommt ZIL ins Spiel.


ZFS Intent Log (ZIL) und SLOG-Geräte

ZFS Intent Log bezieht sich auf einen Teil Ihres Speicherpools, den ZFS verwendet, um zuerst neue oder geänderte Daten zu speichern, bevor sie über den Hauptspeicherpool verteilt werden und auf alle VDEVs verteilt werden.

Standardmäßig wird immer eine kleine Menge Speicherplatz aus dem Pool herausgenommen, um sich wie ZIL zu verhalten, selbst wenn Sie nur ein paar rotierende Festplatten für Ihren Speicher verwenden your. Sie können es jedoch besser machen, wenn Sie eine kleine NVMe oder eine andere Art von SSD zur Verfügung haben.

Der kleine und schnelle Speicher kann als separates Intent Log (oder SLOG) verwendet werden, in dem die neu angekommenen Daten zwischengespeichert werden, bevor sie in den größeren Hauptspeicher des Pools gespült werden. Um ein Slog-Gerät hinzuzufügen, führen Sie den Befehl aus:

$zpool Tankprotokoll hinzufügen ada3

Wo Panzer ist der Name Ihres Pools, Log ist das Schlüsselwort, das ZFS anweist, das Gerät zu behandeln ada3 als SLOG-Gerät. Der Geräteknoten Ihrer SSD muss nicht unbedingt . sein ada3, Verwenden Sie den richtigen Knotennamen.

Jetzt können Sie die Geräte in Ihrem Pool wie unten gezeigt überprüfen:

Sie können immer noch befürchten, dass die Daten in einem nichtflüchtigen Speicher ausfallen würden, wenn die SSD ausfällt. In diesem Fall können Sie mehrere SSDs verwenden, die sich gegenseitig oder in einer beliebigen RAIDZ-Konfiguration spiegeln.

$zpool Tankprotokollspiegel hinzufügen ada3 ada4

Für die meisten Anwendungsfälle sind die kleinen 16 GB bis 64 GB wirklich schneller und langlebiger Flash-Speicher die am besten geeigneten Kandidaten für ein SLOG-Gerät.


Adaptiver Ersatzcache (ARC) und L2ARC

Beim Versuch, die Lesevorgänge zwischenzuspeichern, ändert sich unser Ziel. Anstatt auf eine gute Performance und zuverlässige Transaktionen zu achten, verlagert sich das Motiv von ZFS nun auf die Vorhersage der Zukunft. Das bedeutet, die Informationen, die eine Anwendung in naher Zukunft benötigen würde, zwischenzuspeichern, während diejenigen verworfen werden, die am weitesten früher benötigt werden.

Dazu wird ein Teil des Hauptspeichers zum Zwischenspeichern von Daten verwendet, die entweder kürzlich verwendet wurden oder auf die am häufigsten zugegriffen wird. Daher kommt der Begriff Adaptive Replacement Cache (ARC). Neben dem klassischen Lese-Caching, bei dem nur die zuletzt verwendeten Objekte zwischengespeichert werden, achtet das ARC auch darauf, wie oft auf die Daten zugegriffen wurde.

L2ARC oder Level 2 ARC ist eine Erweiterung des ARC. Wenn Sie ein dediziertes Speichergerät haben, das als Ihr L2ARC fungiert, werden alle Daten gespeichert, die nicht zu wichtig sind, um im ARC zu bleiben, aber gleichzeitig sind diese Daten nützlich genug, um einen Platz im langsameren als Speicher zu verdienen NVMe-Gerät.

Um Ihrem ZFS-Pool ein Gerät als L2ARC hinzuzufügen, führen Sie den folgenden Befehl aus:

$zpool Tank-Cache hinzufügen ada3

Wo Panzer ist der Name Ihres Pools und ada3 ist der Geräteknotenname für Ihren L2ARC-Speicher.


Zusammenfassung

Um es kurz zu machen: Ein Betriebssystem puffert Schreibvorgänge oft im Hauptspeicher, wenn die Dateien im asynchronen Modus geöffnet werden. Dies ist nicht zu verwechseln mit dem eigentlichen Schreibcache von ZFS, ZIL.

ZIL ist standardmäßig ein Teil des nichtflüchtigen Speichers des Pools, in dem die Daten vorübergehend gespeichert werden, bevor sie ordnungsgemäß über alle VDEVs verteilt werden. Wenn Sie eine SSD als dediziertes ZIL-Gerät verwenden, wird sie als SLOG bezeichnet. Wie jedes VDEV kann SLOG in einer Mirror- oder Raidz-Konfiguration vorliegen.

Der im Hauptspeicher gespeicherte Lese-Cache wird als ARC bezeichnet. Aufgrund der begrenzten RAM-Größe können Sie jedoch jederzeit eine SSD als L2ARC hinzufügen, bei der Dinge, die nicht in den RAM passen, zwischengespeichert werden.

So zeigen Sie den FPS-Zähler in Linux-Spielen an
Linux-Gaming bekam einen großen Schub, als Valve 2012 die Linux-Unterstützung für den Steam-Client und seine Spiele ankündigte. Seitdem haben viele AA...
Herunterladen und Spielen von Sid Meier's Civilization VI unter Linux and
Einführung in das Spiel Civilization 6 ist eine moderne Version des klassischen Konzepts, das in der Reihe der Age of Empires-Spiele eingeführt wurde....
So installieren und spielen Sie Doom unter Linux
Einführung in Doom Die Doom-Serie entstand in den 90er Jahren nach der Veröffentlichung des ursprünglichen Doom. Es war sofort ein Hit und seitdem hat...