ZFS- und gemischte Laufwerksgrößen für ein gespiegeltes Stripe-Array


1

Ich habe ein Leistungsproblem mit meinem ZFS-Array, das meiner Meinung nach auf Defragmentierung zurückzuführen ist. Ich habe ein gestreiftes Array von 20 Geräten mit jeweils 2 gespiegelten Laufwerken. Ich habe diesem gestreiften Array kürzlich einige Geräte hinzugefügt, die größer (2x) sind als die ursprünglichen.

Die Verwendung von zpool iostats zeigt, dass, obwohl einige der alten Geräte zu 90% und die neuen nur zu 50% voll sind, die Schreibvorgänge gleichmäßig auf alle Geräte verteilt werden, unabhängig vom freien% oder Speicherplatz jedes Laufwerks.

Erwartet ZFS für ein gestreiftes Array Geräte gleicher Größe? Ist dies der Grund, warum die Datenträger nicht gleichermaßen verwendet werden, oder ist dies völlig irrelevant?

Antworten:


1

Ich habe dies mit zdb -ddddd[siehe http://www.cuddletech.com/blog/pivot/entry.php?id=980 ] getestet.

Ich habe zwei Dateien mit den Namen " disk1" und " disk2" erstellt , die 400 MB groß waren, und dann " disk3" und " disk4" bei 650 MB und ich habe einen zpool "tank" damit erstellt:

zpool create tank mirror disk1 disk2
zpool add mirror disk3 disk4

( Ich gehe davon aus, dass Sie früher zpool add mirrordie Datenträger in den Pool aufgenommen haben und nicht zpool attachdie Datenträger für einen vorhandenen Spiegel-VDEV verwendet haben. Letzteres ist eine allgemein schlechte Idee und erhöht die Kapazität sowieso nicht. Fügen Sie einfach ein weiteres Spiegel-Gerät hinzu. )

Als ich den Pool mit mkfile auf jeweils 100M füllte , überprüfte ich, zdb -ddddd tank <inode#>auf welche vdevs geschrieben wurde, und zfs verteilte die Last zwischen den beiden; Von 400 Blockadressen wurden im Durchschnitt 300 bis 350 auf die kleineren "Festplatten" und 450 bis 500 auf die größeren geschrieben, selbst in der letzten Datei, die den Pool füllte.

Das bedeutet , dass ZFS werden die Blöcke ausgleichen es zwischen jedem schreibt vdev in einem Pool. (In diesem Fall zwischen jedem Ihrer 11 Spiegel). Wenn Sie einem vorhandenen Spiegel ein größeres Laufwerk mithilfe von zpool attach hinzufügen , kann ZFS diesen zusätzlichen Speicherplatz nicht nutzen, da auf jede Festplatte in einem Spiegel dieselben Blöcke geschrieben werden.

Es wird normalerweise empfohlen, dieselben Datenträger in einem Pool zu verwenden, dies ist jedoch anscheinend nicht erforderlich. Machen Sie sich jedoch nicht die Mühe, einem Pool mit langsameren Datenträgern ein schnelleres Laufwerk hinzuzufügen. In einem Pool ist Ihre langsamste Festplatte Ihr Engpass (obwohl das Hinzufügen eines SSD-Protokolls für die ZIL dieses Problem möglicherweise mildern kann).


Außerdem würde ich mir keine Sorgen um die Defragmentierung in ZFS machen, da es sich bei ZFS um ein Copy-on-Write- Dateisystem handelt, ist dies unvermeidlich. (Anstatt einen Block mit neuen Daten zu überschreiben, werden die neuen Daten in einen neuen Block geschrieben und anschließend Metadatenzeiger und Prüfsummen aktualisiert, um stattdessen den neuen Block zu verwenden.) Ich würde nicht erwarten, dass dies die Leistung beeinträchtigt.

Die Leistung wird durch eine Auslastung von 90% beeinträchtigt (stört beim Schreiben). Es wird empfohlen, die Auslastung für Spitzenleistungen bei oder unter 80% zu halten.

Was mich an etwas anderes denken lässt - Ihr Pool war bereits vorhanden, und dann haben Sie zwei neue Datenträger hinzugefügt -, werden die vorhandenen Daten NICHT über diese Datenträger verteilt, nicht bevor sie neu geschrieben wurden, sodass ich weniger Gesamtdaten erwarten würde auf den neuen Festplatten für einige Zeit.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.