ZFS auf Linux/ Die richtige Poolkonfiguration

Aus Wikibooks

Die richtige Poolkonfiguration[Bearbeiten]

Um die richtige Poolkonfiguration zu ermitteln, muss man folgende Zielgrößen in Einklang bringen:

  1. Redundanz/Fehlertoleranz
  2. Performance
  3. Overhead

Striping ohne Redundanzen[Bearbeiten]

Benchmarks mit verschieden großen Pools ohne Redundanzen haben gezeigt, dass die Geschwindigkeit nicht wie zu erwarten linear zur Anzahl der vdevs steigt. Mit zunehmender Größe des Pools nimmt die Transferrate pro Festplatte kontinuierlich und gleichmäßig ab. Während die Schreibgeschwindigkeit bis zu einer Größe von 24 vdevs jeweils nahezu identisch bzw. sogar höher als die Leserate ist, sinkt diese anschließend schneller.


RAID-Z2 Konfigurationen[Bearbeiten]

Mit steigender Größe weist das RAID-Z2 schlechtere Schreibgeschwindigkeiten auf. Konfigurationen mit mehreren kleinen RAID-Z2s erreichen deutlich höhere Geschwindigkeiten. Folgende Diagramme zeigen Pools, die aus unterschiedlich vielen RAID-Z2s bestehen und jeweils den gleichen nutzbaren Speicher ausweisen:


Bis zu einer Größe von 8 vdevs pro RAID-Z2 können keine spürbaren Geschwindigkeitsverluste im Vergleich zum Pool ohne Paritätsinformationen festgestellt werden. Die CPU-Auslastung liegt bei allen Konfigurationen bei ca. 75%. Tests mit noch größeren Pools zeigten, dass es sich dabei nicht um den begrenzenden Faktor handelt. Mit zunehmender Größe der RAID-Zs steigt allerdings die Auslastung der CPU beim Lesen, während die Geschwindigkeit sogar sinkt.

Die optimale Konfiguration liegt deshalb bei etwa 8 vdevs pro RAID-Z2.

Die besten RAID-Z2-Konfigurationen[Bearbeiten]

Zum Vergleich wurden die zwei optimalen RAID-Z2-Konfigurationen für 40 Festplatten getestet. Da die Komprimierung zusätzlich zur Berechnung der Paritäten des RAID-Z2 für eine hohe Belastung der CPU sorgt, wurden Benchmarks mit LZ4 und deaktivierter Komprimierung durchgeführt. Für realistische Bedingungen wurden die Pools vor jedem Test mit zufälligen Schreibzugriffen zu 60% gefüllt.

Die besten RAID-Z2-Konfigurationen

Da die Geschwindigkeiten nahezu identisch sind und bei der Konfiguration aus 4 RAID-Z2s im Verhältnis weniger Festplatten für Paritäten benötigt werden, kann diese durchaus zum Einsatz kommen.

Vergleich verschiedener Poolkonfigurationen[Bearbeiten]

Folgende Konfigurationen wurden getestet:

  1. Striping: 20 Festplatten ohne Paritäten
  2. Spiegelpaare: 20+20 Festplatten paarweise gespiegelt; Spiegelpaare sind durch Striping verbunden
  3. RAID-Z1: 20+1 Festplatten im RAID-Z1-Verbund
  4. RAID-Z2: 20+2 Festplatten im RAID-Z2-Verbund
  5. RAID-Z3: 20+3 Festplatten im RAID-Z3-Verbund

Folgende Geschwindigkeiten konnten dabei ermittelt werden:

Abhängigkeit der Geschwindigkeit von verschiedenen Poolkonfigurationen

Die drei RAID-Z Konfigurationen zeigen mit zunehmender Anzahl an Paritätsinformationen eine schlechtere Schreibgeschwindigkeit. Eine Ursache für die verhältnismäßig schlechte Schreibgeschwindigkeit ist die Größe der erstellten RAID-Zs. Da die Integrität der Daten ausschließlich anhand der Prüfsummen bestätigt wird, liegen die Lesegeschwindigkeiten der verschiedenen RAID-Z-Level auf demselben Niveau. Die dennoch etwas niedrigere Leserate, als beim reinen Striping, ist der dynamischen Breite der Stripes eines RAID-Z geschuldet, wodurch deren exakte Position immer erst ermittelt werden muss.

Da bei den Spiegelpaaren alle Daten redundant auf zwei verschiedenen Festplatten abgelegt werden, kann im Vergleich zum Pool ohne Paritäten eine 37 % höhere Lesegeschwindigkeit erzielt werden. Diese Erhöhung wird erreicht, indem später benötigte Daten vorausschauend vom Spiegelpartner gelesen werden. Da die Daten gleichmäßig über die Spiegelpaare verteilt werden und das vorausschauende Lesen damit nicht ganz trivial ist, wurde nicht die theoretisch mögliche Verdopplung der Geschwindigkeit erreicht.


Tabellarische Übersichten[Bearbeiten]

Mit Hilfe der folgenden beiden Tabellen kann man die richtige Poolkonfiguration für gegebene Anforderungen finden.

Die 1. Tabelle entstammt der ZFS-BSD-Literatur [1], was ihre Anwendbarkeit auf Linux-Umgebungen nicht schmälert:

Konfiguration IOPS Lesen IOPS Schreiben MB/s Lesen MB/s Schreiben Verfügbarer Speicherplatz Fehlertoleranz
Einzelplatten VDEV Konfiguration
Stripe 250 250 100 100 1TB(100%) keine
2 Platten VDEV Konfiguration
2x Stripe 500 500 200 200 2 TB (100%) keine
1x2 Platten Spiegel 500 250 200 200 1 TB (50%) 1
3 Platten VDEV Konfiguration
1x3 Platten Spiegel 750 250 300 100 1 TB (33%) 2
1x3 Platten RAID-Z1 250 250 200 200 2 TB (66%) 1
4 Platten VDEV Konfiguration
2x2 Platten Spiegel 1000 500 400 200 2 TB (50%) 2 (1 pro VDEV)
1x4 Platten RAID-Z1 250 250 300 300 3 TB (75%) 1
1x4 Platten RAID-Z2 250 250 200 200 2 TB (50%) 2
5 Platten VDEV Konfiguration
1x5 Platten RAID-Z1 250 250 400 400 4 TB (80%) 1
1x5 Platten RAID-Z2 250 250 300 300 3 TB (60%) 2
1x5 Platten RAID-Z3 250 250 200 200 2 TB (40%) 3
6 Platten VDEV Konfiguration
3x2 Platten Spiegel 1500 750 600 300 3 TB (50%) 3 (1 pro VDEV)
2x3 Platten Spiegel 1500 500 600 200 2 TB (33%) 4 (2 pro VDEV)
1x6 Platten RAID-Z1 250 250 500 500 5 TB (83%) 1
1x6 Platten RAID-Z2 250 250 400 400 4 TB (66%) 2
1x6 Platten RAID-Z3 250 250 300 300 3 TB (50%) 3
12 Platten VDEV Konfiguration
6x2 Platten Spiegel 3000 1500 1200 600 6 TB (50%) 6 (1 pro VDEV)
4x3 Platten Spiegel 3000 1000 1200 400 4 TB (33%) 8 (2 pro VDEV)
1x12 Platten RAID-Z1 250 250 1100 1100 11 TB (92%) 1
2x6 Platten RAID-Z1 500 500 1000 1000 10 TB (83%) 2 (1 pro VDEV)
3x4 Platten RAID-Z2 750 750 900 900 9 TB (75%) 3 (1 pro VDEV)
1x12 Platten RAID-Z2 250 250 1000 1000 10 TB (83%) 2
2x6 Platten RAID-Z2 500 500 800 800 8 TB (66%) 4 (2 pro VDEV)
1x12 Platten RAID-Z3 250 250 900 900 9 TB (75%) 3
2x6 Platten RAID-Z3 500 500 600 600 6 TB (50%) 6 (3 pro VDEV)
36 Platten VDEV Konfiguration
18x2 Platten Spiegel 9000 4500 3600 1800 18 TB (50%) 18 (1 pro VDEV)
12x3 Platten Spiegel 9000 3000 3600 1200 12 TB (33%) 24 (2 pro VDEV)
1x36 Platten RAID-Z2 250 250 3400 3400 34 TB (94%) 2
2x18 Platten RAID-Z2 500 500 3200 3200 32 TB (89%) 4 (2 pro VDEV)
4x9 Platten RAID-Z2 1000 1000 2800 2800 28 TB (78%) 8 (2 pro VDEV)
6x6 Platten RAID-Z2 1500 1500 2400 2400 24 TB (66%) 12 (2 pro VDEV)


Die 2. Tabelle fasst eigene Messungen auf der beschriebenen Linux-Plattform zusammen [2]:

Konfiguration MB/s Lesen MB/s Schreiben Verfügbarer Speicherplatz Fehlertoleranz
Striping
1x Stripe 160 130 100% keine
8x Stripe 1334 1339 100% keine
16x Stripe 2300 2375 100% keine
20x Stripe 2702 2643 100% keine
24x Stripe 3052 2882 100% keine
32x Stripe 3753 3207 100% keine
40x Stripe 3989 3613 100% keine
Spiegel
20x2 Platten Spiegel 3696 2162 50% 20
RAID-Z
1x21 Platten RAID-Z1 2281 1822 95% 1
1x8 Platten RAID-Z2 818 930 75% 2
8x5 Platten RAID-Z2 3060 2934 60% 16
4x8 Platten RAID-Z2 2931 2924 75% 8
2x14 Platten RAID-Z2 2594 2136 86% 4
1x22 Platten RAID-Z2 2211 1698 91% 2
1x26 Platten RAID-Z2 2369 1277 92% 2
1x23 Platten RAID-Z3 2209 1431 87% 3