Konfigurieren von ZFS-Cache für Hochgeschwindigkeits-IO

Konfigurieren von ZFS-Cache für Hochgeschwindigkeits-IO
Das Team hinter ZFS ist der Ansicht. Sie haben also ZFs entworfen, um Daten sehr aggressiv zu zwischenstrahlen. ZFS versucht, so viele Daten wie möglich im Speicher (RAM) zu speichern, um einen schnelleren Zugriff auf das Dateisystem zu gewährleisten.

Leider ist der Speicher (RAM) sehr kostspielig. Mit ZFS können Sie also auch schnelle SSDs zum Zwischenspeichern von Daten verwenden. Das Caching -Daten im Speicher wird als Cache Level 1 oder L1 bezeichnet, und das Caching -Daten auf der SSD wird als Level 2- oder L2 -Cache bezeichnet.

ZFS macht 2 Arten von Lesespeichern

1. ARC (adaptiver Ersatzcache):

ZFS rechnet die zuletzt und am häufigsten zugegriffenen Dateien im RAM aus. Sobald eine Datei im Speicher zwischengespeichert ist, wird sie beim nächsten Zugriff auf dieselbe Datei aus dem Cache anstelle Ihrer langsamen Festplatte serviert. Der Zugriff auf diese zwischengespeicherten Dateien ist um ein Vielfaches schneller als wenn sie von Festplatten zugegriffen werden müssten.

2. L2ARC (adaptiver Ersatzcache Level 2):

Der ARC -Cache wird im Speicher Ihres Computers gespeichert. Wenn der Speicher voll ist, werden die ältesten Daten aus dem ARC -Cache entfernt und neue Daten werden zwischengespeichert. Wenn Sie nicht möchten, dass ZFs die zwischengespeicherten Daten dauerhaft wegwerfen, können Sie eine schnelle SSD als L2ARC -Cache für Ihren ZFS -Pool konfigurieren.

Sobald Sie einen L2ARC -Cache für Ihren ZFS -Pool konfiguriert haben, speichern ZFS Daten, die aus dem ARC -Cache im L2ARC -Cache entfernt wurden. Daher können weitere Daten im Cache für einen schnelleren Zugriff aufbewahrt werden.

ZFS macht 2 Arten von Schreibspeichern

1. ZIL (ZFS -Absichtsprotokoll):

ZFS verteilt standardmäßig einen kleinen Teil des Pools für die Aufbewahrung von Write Caches. Es wird genannt Zil oder ZFS -Absichtsprotokoll. Bevor Daten auf die physischen Festplatten geschrieben werden, wird sie in Zil gespeichert. Um die Anzahl der Schreibvorgänge zu minimieren und die Datenfragmentierung zu reduzieren. Es ist eher ein Schreibpuffer als ein Cache. Sie können sich das so vorstellen.

2. Slog (sekundäres Protokoll):

Da ZFS einen kleinen Teil des Pools zum Speichern von Zil verwendet, teilt es die Bandbreite des ZFS -Pools. Dies kann sich negativ auf die Leistung des ZFS -Pools auswirken.

Um dieses Problem zu beheben, können Sie eine schnelle SSD als Slog -Gerät verwenden. Wenn ein Slog -Gerät auf einem ZFS -Pool vorhanden ist, wird Zil auf das Slog -Gerät verschoben. ZFS speichern keine ZIL -Daten mehr auf dem Pool. Also wird keine Poolbandbreite auf Zil verschwendet.

Es gibt auch andere Vorteile. Wenn eine Anwendung über das Netzwerk in den ZFS -Pool schreibt (i.e. VMware ESXI, NFS), ZFS können die Daten schnell zum Slog schreiben und eine Bestätigung an die Anwendung senden, dass die Daten an die Festplatte geschrieben werden. Dann kann es die Daten wie gewohnt auf langsamere Festplatten schreiben. Dadurch wird diese Anwendungen reaktionsschneller.

Beachten Sie, dass ZFS normalerweise nicht aus dem Slog liest. ZFS liest nur Daten aus dem Slog im Falle eines Stromverlusts oder eines Schreibfehlers. Anerkannte Schreibvorgänge werden nur vorübergehend dort aufbewahrt, bis sie zu den langsameren Festplatten gespült werden. Es ist nur da, um sicherzustellen, dass im Falle eines Stromverlusts oder eines Schreibfehlers anerkannte Schreibvorgänge nicht verloren gehen und sie so schnell wie möglich auf die ständigen Speichergeräte gespült werden.

Beachten Sie auch, dass Zil in Abwesenheit eines Slog -Geräts für denselben Zweck verwendet wird.

Nachdem Sie alles über ZFS wissen, lesen und schreiben Sie Caches.

Inhaltsverzeichnis

  1. Konfigurieren von MAX -Speicherlimit für ARC
  2. Hinzufügen eines L2ARC -Cache -Geräts
  3. Hinzufügen eines Slog -Geräts
  4. Abschluss
  5. Verweise

Konfigurieren von MAX -Speicherlimit für ARC

Unter Linux verwendet ZFS standardmäßig 50% des installierten Speichers für das ARC -Caching. Wenn Sie also 8 GB Speicher auf Ihrem Computer installiert haben, verwenden ZFS 4 GB Speicher für das ARC -Caching bei Max.

Wenn Sie benötigen, können Sie die maximale Speichermenge erhöhen oder verringern, die ZFs für das ARC -Caching verwenden können. Um die maximale Speichermenge einzustellen, die ZFs für das Arc -Caching verwenden können, können Sie die verwenden ZFS_ARC_MAX Kernelparameter.

Sie finden viele Informationen zur Verwendung von Bogen -Cache mit dem ARC_Summary Befehl wie folgt:

$ sudo arc_summary -s arc

Im Bogengröße (Strom) Abschnitt finden Sie die maximale Größe, die der ARC -Cache wachsen kann (wachsen kann (Maximale Größe (Hochwasser)), die Größe des aktuellen ARC -Cache (Zielgröße (adaptiv)) und andere Informationen zur Verwendung von Bogen -Cache, wie Sie im Screenshot unten sehen können.

Beachten Sie, dass die Größe der Max -Bogen -Cache auf meinem Computer 3 beträgt.9 GB wie ich 8 GB Speicher auf meinem Computer installiert habe. Das sind rund 50% des gesamten verfügbaren Speichers, wie ich bereits erwähnt habe.

Sie können sehen, wie viel Daten auf den ARC -Cache triff. Auf diese Weise können Sie feststellen, wie effektiv der ARC -Cache in Ihrem Szenario funktioniert.

Führen Sie den folgenden Befehl aus:

$ sudo arc_summary -S -Archits

Eine Zusammenfassung der ARC -Cache -Hits und -Smehls sollte angezeigt werden, wie Sie im Screenshot unten sehen können.

Sie können die Speicherverwendung des ZFS -ARC -Cache mit dem folgenden Befehl überwachen:

$ sudo arcstat 1 2>/dev/null

Wie Sie sehen können, der maximale Bogen -Cache -Speicher (maximaler ARC -Cache -Speicher (C), die aktuelle Bogen -Cache -Größe (Arcsz), Daten aus dem ARC -Cache (gelesene Daten (lesen) und andere Informationen werden angezeigt.

Lassen Sie uns nun sehen, wie Sie ein benutzerdefiniertes Speicherlimit für den ZFS -ARC -Cache festlegen.

So erstellen ZFS.Conf im /etc/modProbe.D/ Verzeichnis wie folgt:

$ sudo nano /etc /modprobe.D/ZFS.Conf

Geben Sie die folgende Zeile in die ZFS.Conf Datei:

Optionen ZFS ZFS_ARC_MAX =

Ersetzen, Mit Ihrem gewünschten maximalen Speicherlimit für den ZFS -ARC -Cache in Bytes.

Nehmen wir an, Sie möchten 5 GB Speicher für den ZFS -ARC -Cache verwenden. Um 5 GB in Bytes umzuwandeln, können Sie den folgenden Befehl verwenden:

$ echo $ ((5*2 ** 30))

Wie du sehen kannst, 5 GB ist gleich 5368709120 Bytes.

Sie können dasselbe mit dem Python 3 -Dolmetscher wie folgt tun:

$ python3 -c "drucken (5*2 ** 30)"

Sobald Sie das ZFS -ARC -Cache -MAX -Speichergrenze eingestellt haben, drücken Sie + X gefolgt von Y Und um die zu retten ZFS.Conf Datei.

Aktualisieren Sie nun das Initramfs -Bild Ihres aktuellen Kernels mit dem folgenden Befehl:

$ sudo update -initramfs -u

Das Initramfs -Bild sollte aktualisiert werden.

Damit die Änderungen wirksam werden sollen, starten Sie Ihren Computer mit dem folgenden Befehl neu:

$ sudo Neustart

Wenn Sie Ihren Computer das nächste Mal starten.

$ sudo arc_summary -s arc

Hinzufügen eines L2ARC -Cache -Geräts

Wenn Ihrem ZFS -Pool ein L2ARC -Cache -Gerät (ein SSD- oder NVME -SSD) hinzugefügt wird, laden ZFS (verschieben) Bogen -Caches in das L2ARC -Gerät ab, wenn der Speicher voll ist (oder die maximale Lichtbogengrenze erreicht). Daher können weitere Daten im Cache für einen schnelleren Zugriff auf den ZFS -Pool aufbewahrt werden.

Um den Beispielen zu verfolgen, erstellen Sie einen Test -ZFS -Pool Pool1 mit /dev/sdb Und /dev/sdc Festplatten in der gespiegelten Konfiguration wie folgt:

$ sudo zpool erstellen -f pool1 mirror /dev /sdb /dev /sdc

Ein ZFS -Pool Pool1 sollte mit dem erstellt werden /dev/sdb Und /dev/sdc Festplatten im Spiegelmodus, wie Sie im Screenshot unten sehen können.

$ sudo Zpool Statuspool1

Sagen wir nun, Sie möchten die NVMe SSD hinzufügen nvme0n1 Als L2ARC -Cache -Gerät für den ZFS -Pool Pool1.

$ sudo lsblk -e7

Um die NVME SSD hinzuzufügen nvme0n1 zum ZFS -Pool Pool1 Führen Sie als L2ARC -Cache -Gerät den folgenden Befehl aus:

$ sudo zpool add -f pool1 cache /dev /nvme0n1

Die NVMe SSD nvme0n1 sollte dem ZFS -Pool hinzugefügt werden Pool1 Als L2ARC -Cache -Gerät, wie Sie im folgenden Screenshot sehen können.

$ sudo Zpool Statuspool1

Sobald Sie Ihrem ZFS -Pool ein L2ARC -Cache -Gerät hinzugefügt haben, können Sie die L2ARC -Cache -Statistik mithilfe des ARC_Summary Befehl wie folgt:

$ sudo arc_summary -s l2ARC

Die L2ARC -Cache -Statistik sollte angezeigt werden, wie Sie im folgenden Screenshot sehen können.

Hinzufügen eines Slog -Geräts

Sie können ein oder mehrere SSDs/NVME -SSDs auf Ihrem ZFS -Pool als Slog (sekundäres Protokoll) zum Speichern des ZFS -Intent -Protokolls (ZIL) Ihres ZFS -Pools dort hinzufügen.

Normalerweise ist das Hinzufügen einer SSD genug. Da der Slog verwendet wird, um sicherzustellen. Dadurch erhalten Sie etwas mehr Schutz und stellen sicher, dass keine Schreibvorgänge verloren gehen.

Sagen wir, Sie möchten die NVME -SSDs hinzufügen nvme0n2 Und nvme0n3 Als Slog -Gerät auf Ihrem ZFS -Pool Pool1 in einer gespiegelten Konfiguration.

$ sudo lsblk -e7

Fügen Sie die NVME SSDs hinzu nvme0n2 Und nvme0n3 Als Slog -Gerät auf Ihrem ZFS -Pool Pool1 Führen Sie in einer gespiegelten Konfiguration den folgenden Befehl aus:

$ sudo zpool add -f pool1 log Mirror /dev /nvme0n2 /dev /nvme0n3

Wenn Sie eine einzelne NVME SSD hinzufügen möchten nvme0n2 Als Slog -Gerät auf Ihrem ZFS -Pool Pool1, Sie können stattdessen den folgenden Befehl ausführen:

$ sudo zpool add -f pool1 log /dev /nvme0n2

Die NVMe SSDs nvme0n2 Und nvme0n3 sollte Ihrem ZFS -Pool hinzugefügt werden Pool1 Als Slog -Gerät im Spiegelmodus, wie Sie im Screenshot unten sehen können.

$ sudo Zpool Statuspool1

Sie können ZIL- und Slog -Transaktionsinformationen mit dem finden ARC_Summary Befehl wie folgt:

$ sudo arc_summary -s zil

Die Transaktionsinformationen von ZIL und Slog sollten angezeigt werden, wie Sie im folgenden Screenshot sehen können.

Abschluss

In diesem Artikel habe ich verschiedene Arten von Lese- und Schreiben von Caching -Funktionen des ZFS -Dateisystems besprochen. Ich habe Ihnen auch gezeigt, wie Sie das Speicherlimit für den ARC -Cache konfigurieren. Ich habe Ihnen gezeigt, wie Sie Ihrem ZFS -Pool auch ein L2ARC -Cache -Gerät und ein Slog -Gerät hinzufügen können.

Verweise

[1] ZFS - Wikipedia

[2] ELI5: ZFS Caching (2019) - YouTube

[3] Einführung von ZFS unter Linux - Damian Wojstaw

[4] Ubuntu Manpage: ZFS-Modul-Parameter-ZFS-Modulparameter

[5] RAM - ist ZFS auf Ubuntu 20.04 Verwenden einer Menge Speicher? - Fragen Sie Ubuntu