Linux/Software-RAID/Alignment: Unterschied zwischen den Versionen
K Dirkwagner verschob die Seite Linux:Software-RAID:Alignment nach Linux/Software-RAID:Alignment, ohne dabei eine Weiterleitung anzulegen: Textersetzung - „Linux:“ durch „Linux/“ |
K Textersetzung - „Man-Pages“ durch „Man-Page“ |
||
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 22: | Zeile 22: | ||
****Partitionen sollten auf Sektorgrenzen der Datenträger ausgerichtet sein, wie im Abschnitt [[Linux/Software-RAID#Partitionierung|Partitionierung]] beschrieben. | ****Partitionen sollten auf Sektorgrenzen der Datenträger ausgerichtet sein, wie im Abschnitt [[Linux/Software-RAID#Partitionierung|Partitionierung]] beschrieben. | ||
****Dem Dateisystem sollten Informationen zum unterliegenden RAID bereitgestellt werden, um seine Blöcke passend auszurichten. | ****Dem Dateisystem sollten Informationen zum unterliegenden RAID bereitgestellt werden, um seine Blöcke passend auszurichten. | ||
****Falls noch weitere Schichten zwischen Dateisystem und Datenträger verwendet werden, z.B. bei Kryptografie, muss auch bei diesen auf das Alignment geachtet werden. | ****Falls noch weitere Schichten zwischen Dateisystem und Datenträger verwendet werden, z. B. bei Kryptografie, muss auch bei diesen auf das Alignment geachtet werden. | ||
= Anwendung = | = Anwendung = | ||
Zeile 38: | Zeile 38: | ||
===Änderung der Chunk Size=== | ===Änderung der Chunk Size=== | ||
*Chunk Size auf 64 KiB ändern. | *Chunk Size auf 64 KiB ändern. | ||
*Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen. | *Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen. | ||
# mdadm --grow -c 64 /dev/md0 | # mdadm --grow -c 64 /dev/md0 | ||
Zeile 60: | Zeile 60: | ||
== Dateien == | == Dateien == | ||
== Man- | == Man-Page == | ||
== Intern == | == Intern == | ||
Zeile 66: | Zeile 66: | ||
== Weblinks == | == Weblinks == | ||
[[Kategorie | [[Kategorie:Linux/Software-RAID]] | ||
[[Kategorie:Partitionierung]] |
Aktuelle Version vom 6. November 2024, 12:33 Uhr
RAID-Alignment ist kurze Beschreibung
Beschreibung
- Datenträger, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in Blöcke zusammen, bevor sie gespeichert werden.
- Diese Blöcke haben im Allgemeinen alle unterschiedliche Größen.
- Ein Beispiel für das Lesen einer sehr kleinen Datei:
- Das Dateisystem möchte einen einzelnen 4 KiB großen Block lesen
- Das RAID muss dafür den oder die 512 KiB großen RAID-Blöcke (bei RAIDS oft Chunks genannt) laden, in denen der Dateisystem-Block abgelegt ist.
- Die Datenträger müssen dafür wiederum alle 512 Byte großen Blöcke (hier meist Sektoren genannt) laden, die am entsprechenden RAID-Block beteiligt sind.
- Im Idealfall muss also das RAID nur einen 512 KiB Block laden und die Datenträger dafür 1024 Blöcke (512 KiB = 512 B * 1024).
- Dafür müssen diese geschachtelten Blöcke jedoch aufeinander ausgerichtet sein.
- Im schlechtesten Fall könnte ein Dateisystem-Block kurz vor dem Ende eines RAID-Blocks liegen, so dass für einen Dateisystem-Block zwei RAID-Blöcke geladen werden müssen.
- Analog könnte ein RAID-Block auch 1025 anstatt 1024 Datenträger-Blöcke belegen, falls er mitten in einem Datenträger-Block anfängt.
- Das Lesen eines Dateisystem-Blocks würde damit im schlechtesten Fall das Laden von 2050 Datenträger-Blöcken erfordern.
- Dies führt zu dramatischen Performance-Einbußen schon beim Lesen.
- Da beim Schreiben oft auch zuerst die vorherigen Daten gelesen werden müssen, sind die Einbußen beim Schreiben noch stärker.
- Daher sollte bei der Verwendung von Blockgeräten immer auf das Alignment, also die Ausrichtung der verschiedenen Block-Arten aufeinander, geachtet werden:
- Der erste Dateisystem-Block eines RAID-Blocks sollte genau am Anfang des RAID-Blocks beginnen.
- Ein RAID-Block sollte genau am Anfang eines Datenträger-Blocks beginnen.
- Die Größe der RAID-Blöcke sollte ein ganzzahliges Vielfaches der Dateisystem-Blöcke sein.
- Die Größe der RAID-Blöcke sollte ein ganzzahliges Vielfaches der Datenträger-Blöcke sein.
- Partitionen sollten auf Sektorgrenzen der Datenträger ausgerichtet sein, wie im Abschnitt Partitionierung beschrieben.
- Dem Dateisystem sollten Informationen zum unterliegenden RAID bereitgestellt werden, um seine Blöcke passend auszurichten.
- Falls noch weitere Schichten zwischen Dateisystem und Datenträger verwendet werden, z. B. bei Kryptografie, muss auch bei diesen auf das Alignment geachtet werden.
- Das Dateisystem möchte einen einzelnen 4 KiB großen Block lesen
Anwendung
- Datenträger, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in Blöcke zusammen, bevor sie gespeichert werden.
- Diese Blöcke haben im Allgemeinen alle unterschiedliche Größen.
- Um eine optimale Performance zu erzielen, sollten die Größen aufeinander abgestimmt sein.
- Dafür muss zunächst die sog. Chunk Size, also die Datenmenge, die in einem einzelnen Schreibvorgang geschrieben wird, bekannt sein.
Ermittlung der Chunk Size
# mdadm -D /dev/md0 | grep "Chunk Size" Chunk Size : 512K
Bei einem RAID 5 mit Standardeinstellungen. Es werden also 512 KiB Chunks verwendet.
Änderung der Chunk Size
- Chunk Size auf 64 KiB ändern.
- Macht nur Sinn, wenn auf dem RAID hauptsächlich sehr kleine Dateien geschrieben bzw. gelesen werden sollen.
# mdadm --grow -c 64 /dev/md0
Berechnung des Alignments
- Hieraus können, zusammen mit der Anzahl der Partitionen und des RAID-Levels, die Dateisystem-Parameter berechnet werden.
- Am einfachsten geht das mittels eines Raid-Stride-Calculators.
- Alternativ können die Parameter auch von Hand ermittelt werden.
- block-size - Die Größe der Dateisystemblöcke in Bytes. Heutzutage werden fast ausschließlich 4096 Byte (4 KiB) Blöcke verwendet.
- stride-size - Die Chunk Size umgerechnet in Dateisystemblöcke. Bei 512 KiB Chunk Size mit 4 KiB Blöcken ergibt sich 512 KiB/ 4 KiB = 128.
- stripe-width - Die Größe eines Datenstreifens, also die Menge an Blöcken, die geschrieben wird, wenn ein voller Chunk auf jedes Laufwerk geschrieben wird. Diese berechnet sich aus stride-size * Anzahl der effektiv nutzbaren Partitionen. Bei einem RAID 5 über 4 Partitionen ergibt sich hier 128 * 3 = 384.
- Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel RAID.
Sind die Parameter ermittelt, wird das Dateisystem erstellt:
# mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0