Linux/Software-RAID/Alignment

Aus Foxwiki

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.

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.
  • 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

Links

Dateien

Man-Page

Intern

Weblinks