Linux/Software-RAID/Alignment: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „'''topic''' kurze Beschreibung = Beschreibung = *Datenträger, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in Blöcke zusammen, bevor sie ge…“ |
K Textersetzung - „Man-Pages“ durch „Man-Page“ |
||
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
''' | '''RAID-Alignment''' ist ''kurze Beschreibung'' | ||
= Beschreibung = | = Beschreibung = | ||
Zeile 20: | Zeile 20: | ||
****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 Dateisystem-Blöcke sein. | ||
****Die Größe der RAID-Blöcke sollte ein ganzzahliges Vielfaches der Datenträger-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 [[Linux | ****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 | ****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 = | ||
*Datenträger, RAID-Verbunde und Dateisysteme fassen Daten jeweils für sich in Blöcke zusammen, bevor sie gespeichert werden. | *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. | *Diese Blöcke haben im Allgemeinen alle unterschiedliche Größen. | ||
Zeile 32: | Zeile 32: | ||
===Ermittlung der Chunk Size=== | ===Ermittlung der Chunk Size=== | ||
# mdadm -D /dev/md0 | grep "Chunk Size" | # mdadm -D /dev/md0 | grep "Chunk Size" | ||
Chunk Size : 512K | |||
Bei einem RAID 5 mit Standardeinstellungen. Es werden also 512 [https://de.wikipedia.org/wiki/Byte#Vergleichstabelle KiB] Chunks verwendet. | |||
===Ä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 54: | Zeile 52: | ||
**'''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'''. | **'''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 [[ | *Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel [[RAID#RAID-Level|RAID]]. | ||
Sind die Parameter ermittelt, wird das Dateisystem erstellt: | |||
# mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0 | # mkfs.ext4 -b 4096 -E stride=128,stripe-width=384 /dev/md0 | ||
= Links = | = Links = | ||
== Dateien == | == Dateien == | ||
== Man- | == Man-Page == | ||
== Intern == | == Intern == | ||
Zeile 69: | Zeile 66: | ||
== Weblinks == | == Weblinks == | ||
[[Kategorie:Linux: | [[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