Linux/Software-RAID/Alignment: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „Man-Pages“ durch „Man-Page“
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''topic''' kurze Beschreibung
'''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: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 Verschlüsselung, 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.


= Anwendungen =
= 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 liefert dies z.B.:
Bei einem RAID 5 mit Standardeinstellungen. Es werden also 512 [https://de.wikipedia.org/wiki/Byte#Vergleichstabelle KiB] Chunks verwendet.
    Chunk Size : 512K
 
*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 [[Hardware:Storage:RAID#RAID-Level|Hardware:Storage:RAID]].
*Details zur Anzahl der effektiv nutzbaren Partitionen findet man im Artikel [[RAID#RAID-Level|RAID]].


Sind die Parameter ermittelt, wird das Dateisystem erstellt:
Sind die Parameter ermittelt, wird das Dateisystem erstellt:
Zeile 62: Zeile 60:
== Dateien ==
== Dateien ==


== Man-Pages ==
== Man-Page ==


== Intern ==
== Intern ==
Zeile 68: Zeile 66:
== Weblinks ==
== Weblinks ==


[[Kategorie:Linux:Storage]]
[[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.

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