Wie richte ich diesen ZFS-Pool richtig ein?

793
user23563

Zusammenfassung : Ich habe ein RAIDZ-Array von 4 Festplatten mit zwei SSD-Cache-Geräten eingerichtet und erhalte nicht die erwarteten Ergebnisse in Bezug auf die Cache-Steigerung und die allgemeine Leistung. Außerdem scheinen einige Dinge nicht zu addieren.

Hintergrund und Konfiguration : Ich baue eine Analyse-Workstation für die Forschung auf: Ryzen 7 1800X, 64 GB ECC-RAM, GFX 1080Ti, Tesla K40 (Dank dafür, NVIDIA). Es ist für allgemeine Zwecke gedacht, es wird CPU- und GPU-Berechnungen geben, und einige der Datensätze bestehen aus sehr großen Dateien (50-100 Dateien, jeweils 10-30 GB). Aufgrund der Parallelisierung wird manchmal auf einige gleichzeitig zugegriffen. Es gibt RAM-intensive Jobs, aber nicht alle davon, daher gibt es Situationen, in denen ZFS über ausreichend RAM verfügt, jedoch nicht die ganze Zeit (5-10 GB für den unten beschriebenen 500-GB-12-Cazar-Speicher wäre jedoch in Ordnung).

Ich habe 2x 2 TB SDD (Samsung 850 Evo) und 4x 8 TB HDD (WD Red). 3,5 TB der SDDs sind ein RAID0, die verbleibenden 2 * 250 GB können als Cache für das ZFS verwendet werden. Für einen ersten Test habe ich sie als zwei Caching-Geräte für ein RAIDZ über die 4 Festplatten hinzugefügt.

Hier ist das Layout:

# zpool status -v [sudo] Passwort für den Administrator:  Pool: Daten Zustand: ONLINE Scan: Keine angefordert config:  NAME STATE READ WRITE CKSUM Daten ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX ONLINE 0 0 0 ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X ONLINE 0 0 0 ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX ONLINE 0 0 0 ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX ONLINE 0 0 0 Zwischenspeicher ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1 ONLINE 0 0 0 ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1 ONLINE 0 0 0 

Messungen und Befehlsausgaben : Ich habe eine zufällige Datei (um Kompressionsprobleme zu umgehen) mit ziemlich guter Leistung erstellt:

# dd if=<(openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero) of=filename bs=1M count=100000 iflag=fullblock 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB, 98 GiB) copied, 199,795 s, 525 MB/s 

Ich habe erwartet, dass diese Datei in meinem Cache (l2arc, AFAIU) abgelegt wird, wenn häufig darauf zugegriffen wird. Das passiert jedoch nicht wirklich (sehr effizient):

for i in 1 2 3 4;do dd if=filename of=/dev/null bs=1M iflag=fullblock;done 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB, 98 GiB) copied, 252,751 s, 415 MB/s 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB, 98 GiB) copied, 215,769 s, 486 MB/s 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB, 98 GiB) copied, 227,668 s, 461 MB/s 100000+0 records in 100000+0 records out 104857600000 bytes (105 GB, 98 GiB) copied, 224,469 s, 467 MB/s 

Fragen:

  1. Warum bekomme ich weniger Leseleistung als Schreibleistung? Sollte das Schreiben nicht mit der Geschwindigkeit von 3 Discs konvergieren und mit der Geschwindigkeit von 4 Discs wie einem RAID5 lesen?

  2. Warum tritt der l2arc nicht ein? Nach mehreren Lesevorgängen ohne das Lesen anderer Daten hätte ich eine Leseleistung erwartet, die den 1 GB / s des SSD RAID0 entspricht.

  3. Warum meldet zpool iostat eine so geringe Lesebandbreite für die einzelnen Geräte? Ich habe dies mehrmals ausgeführt (dies ist vom letzten Lauf) und es ist übrigens immer ähnlich. Die Festplatten summieren sich auf ~ 160 MB / s, während dd mehr als 400 MB / s anzeigt:

# zpool iostat -v Kapazität Betriebsbandbreite Poolallokation freier Lesezugriff Lesezugriff -------------------------------------------------- - ----- ----- ----- ----- ----- ----- Daten 136G 28,9T 1,31K 152 167M 14,9M raidz1 136G 28,9T 1,31K 152 167M 14,9M ata-WDC_WD80EFZX-68UW8N0_VJGSE7NX - 571 66 46,0M 5,18M ata-WDC_WD80EFZX-68UW8N0_VJGSDP4X - 445 59 44,9M 5,18M ata-WDC_WD80EFZX-68UW8N0_VJGSBYHX - 503 66 40,2M 5,18M ata-WDC_WD80EFZX-68UW8N0_VJGSDDAX - 419 62 39,4M 5,18M Zwischenspeicher - - - - - - ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00789R-part1 34,0G 216G 1 266 8,23K 33,1M ata-Samsung_SSD_850_EVO_2TB_S2RMNX0HC00792H-part1 34,0G 216G 1 266 7,80K 33,0M -------------------------------------------------- - ----- ----- ----- ----- ----- ----- 

Ist hier etwas grundsätzlich falsch oder habe ich etwas falsch verstanden? Sollte ich einen Teil der SSDs für ZIL verwenden? Ich könnte auch ein paar Dutzend GB von der OS M.2 SSD dafür sparen. Zumindest wenn ich ein LVM-Gerät hinzufügen kann, da dies momentan von der Kubuntu-Installation beansprucht wird. Ich habe das noch nicht getan, weil ich verstanden habe, dass dies nur bei kleinen, synchronisierten Schreibvorgängen helfen würde, die ich nicht wirklich erwarte. Größere Datumsangaben werden meistens seriell zurückgeschrieben.

PS: Warum sieht der Cache wie ein Pool namens Cache aus, nicht etwas, das zu den Pooldaten gehört? ich benutzte

zpool add data cache [devices] 

es sollte also zum Datenpool gehören, oder?

1
Bitte zeigen Sie uns das genaue Layout Ihres Pools. Die Ausgabe des "Zpool-Status" mit dem importierten Pool ist gut. a CVn vor 6 Jahren 0
Ich habe es hinzugefügt Aus Neugier, da ich nichts sehe? Was ist da drin, was iostat nicht für das Layout hat? Ich bin immer noch verwirrt, dass der Cache nicht sichtbar mit dem Datenpool verknüpft ist, auch wenn der Befehl add dies vorschlägt. Aber na ja, "data" wird auch in der ersten Zeile geschrieben, also denke ich, dass all diese Ausgabe für einen anderen Pool dupliziert werden würde? user23563 vor 6 Jahren 0
Update zu zpool iostat: iostat aus dem sysstat-Paket ALSO meldet diese niedrigen Werte, während das Widget für die Bandbreite der KDE-Festplatte realistische Bandbreite meldet ... merkwürdig. user23563 vor 6 Jahren 0

1 Antwort auf die Frage

1
user121391

RAIDZ1-Leistung im Vergleich zu herkömmlichem RAID5

Warum bekomme ich weniger Leseleistung als Schreibleistung? Sollte das Schreiben nicht mit der Geschwindigkeit von 3 Discs konvergieren und mit der Geschwindigkeit von 4 Discs wie einem RAID5 lesen?

Siehe diesen Thread auf ServerFault :

RAIDZ mit einem Paritätslaufwerk bietet die IOPS-Leistung eines einzelnen Datenträgers, die Bandbreite eines einzelnen Datenträgers ist jedoch N-1-fach.

Und dieser Kommentar:

Ich habe viel Erfahrung damit und kann Ihnen bestätigen, dass RAIDZ in den meisten Situationen NICHT die gleiche Anzahl von Festplatten übertrifft, die in ein herkömmliches RAID5 / 6-äquivalentes Array geworfen werden.

Ihre Festplatten können etwa 145 MB / s sequentiell aushalten, daher sollten Ihre theoretischen Ergebnisse 435 MB / s betragen. Ich würde sagen, das passt ziemlich gut zu Ihren Ergebnissen.


L2ARC-Cache für sequentielle Lesevorgänge

Warum tritt der l2arc nicht ein? Nach mehreren Lesevorgängen ohne das Lesen anderer Daten hätte ich eine Leseleistung erwartet, die den 1 GB / s des SSD RAID0 entspricht.

Schauen Sie sich diese Mailingliste an :

Erfüllt ARC die Caching-Anforderungen?

und

Beitrag von Marty Scholes Sind einige der Lesungen sequentiell? Sequentielle Lesevorgänge gehen nicht zu L2ARC.

Ihre Hauptgründe sind also:

  • Ihre (zufällige) Last wird bereits von ARC geliefert und L2ARC ist nicht erforderlich (da Ihre Daten immer gleich waren und vollständig in ARC verbleiben können). Idee dahinter: ARC ist viel schneller als L2ARC (RAM vs. SSD). Daher ist die erste Wahl für Lesevorgänge immer ARC. Sie benötigen L2ARC nur, weil Ihre aktiven Daten zu groß für den Arbeitsspeicher sind. Der wahlfreie Zugriff auf die Festplatte ist jedoch zu langsam Scheiben
  • Ihr Benchmark war sequenziell und wurde daher nicht von L2ARC geliefert. Idee dahinter: Durch sequentielle Lesevorgänge wird der Cache-Speicher vergiftet, da ein einzelner großer Dateizugriff den Cache-Speicher vollständig ausfüllt und Millionen kleiner Blöcke von anderen Benutzern entfernt (ZFS ist für gleichzeitigen wahlfreien Zugriff vieler Benutzer optimiert), ohne dass dies Auswirkungen auf die Cache-Funktion hat Ihre Geschwindigkeit beim ersten Lesen. Beim zweiten Lesen würde es schneller gehen, aber normalerweise werden große Dateien nicht zweimal gelesen. Vielleicht können Sie das Verhalten mit ZFS-Tunern ändern.

Verschiedene Fragen

Sollte ich einen Teil der SSDs für ZIL verwenden?

Ein separates SLOG-Gerät hilft nur für zufällig synchronisierte Schreibvorgänge, sonst nichts. Um dies zu testen, ist es recht einfach - setzen Sie Ihre Benchmark-Dateisystemeigenschaft syncauf disabled: zfs set sync=disabled pool/fsund dann erneut Benchmark. Wenn Ihre Leistung jetzt plötzlich großartig ist, profitieren Sie davon. Wenn sich nicht viel ändert, werden Sie es nicht tun.

PS: Warum sieht der Cache wie ein Pool namens Cache aus, nicht etwas, das zu den Pooldaten gehört?

Ich denke, das ist so, weil diese zusätzlichen Geräte (Ersatzteile, Caches, Slog-Geräte) auch aus mehreren vdevs bestehen können. Wenn Sie beispielsweise über ein gespiegeltes Slog-Gerät verfügen, haben Sie die gleichen 3 Stufen wie Ihre normale Festplatte (log - mirror - disk1 / disk2).

Nun, das beantwortet meine Fragen nicht genau. Immer noch ein toller Link, danke! Ich war mehr überrascht, dass das Schreiben schneller war als das Lesen. Die ServerVault-Antwort scheint dort nicht zu unterscheiden. Aber ok, die Dinge, die mich mehr rätseln, sind: 1) Wir scheinen, dass der l2arc keine Wirkung hat? Ich habe die Datei über Nacht hundertmal gelesen. Jetzt hat jedes Cache-Laufwerk 50 GB zugewiesen, es könnte also Striping sein, aber ich habe immer noch mit 450 MB / s gelesen, obwohl die SSDs 1 GB / s liefern könnten (und dies als mdRAID0 tun). 2) Warum ist der Zpool-Iostat so niedrig? user23563 vor 6 Jahren 0
@ user23563 Bitte sehen Sie meine aktualisierte Antwort, ich hoffe, es ist hilfreich. user121391 vor 6 Jahren 0
Ja, das hilft einem Lol, ich werde das als Antwort markieren. Vielen Dank. Jetzt bleibt nur eine wahrscheinlich kosmetische Frage offen (obwohl dies ein Indikator für Probleme sein könnte): Warum meldet zpool iostat 160 MB / s vom vdev, während ich tatsächlich 450 MB / s ziehe, siehe hinzugefügter Kommentar :) user23563 vor 6 Jahren 0
@ user23563 Im Allgemeinen wird das Schreiben schneller als das Lesen, wenn Caching-Geräte verwendet werden. Schreibaufrufe können zurückgegeben werden, sobald alle Daten in den Cache kopiert wurden - was auch immer der Cache ist. Leseaufrufe können nur zurückgegeben werden, wenn alle Daten in den Lesepuffer des Aufrufers kopiert wurden - * von der Festplatte *, falls erforderlich. Beim sequentiellen Lesen großer Datenmengen müssen die Daten wahrscheinlich von der Festplatte kommen. Andrew Henle vor 6 Jahren 1
Für das Schreiben in den Double-SDD-Cache sind 500 MB / s dagegen etwas langsam. Da es sich um eine 100-GB-Datei handelt, kann es sich dabei auch nicht um Festplatten-Caches handeln. user23563 vor 6 Jahren 0
@ user23563 Sie wissen also, was die Ursache für den Leistungsunterschied ist? Andrew Henle vor 6 Jahren 0
@Andrew Henle Nein? Warum denkst du das? user23563 vor 6 Jahren 0