Welche IO-Scheduler- und Readahead-Einstellungen werden bei der Verwendung von Software-RAID und LVM unter Linux berücksichtigt?

28

Wie interagieren die Scheduler, Readahead-Einstellungen und andere Festplatteneinstellungen bei mehreren Ebenen (physische Laufwerke -> MD -> DM -> LVM)?

Stellen Sie sich vor, Sie haben mehrere Festplatten (/ dev / sda - / dev / sdd), die alle Teil eines mit mdadm erstellten Software-RAID-Geräts (/ dev / md0) sind. Jedes Gerät (einschließlich physischer Datenträger und / dev / md0) verfügt über eine eigene Einstellung für den E / A-Scheduler ( wie folgt geändert ) und den Readahead ( mit blockdev geändert ). Wenn Sie Dinge wie dm (Krypto) und LVM einfügen, fügen Sie noch mehr Ebenen mit ihren eigenen Einstellungen hinzu.

Wenn das physische Gerät zum Beispiel einen Lesevorgang von 128 Blöcken und das RAID einen Lesevorgang von 64 Blöcken hat, wird dies gewürdigt, wenn ich aus / dev / md0 lese. Versucht der md-Treiber einen 64-Block-Lesevorgang, den der physische Gerätetreiber dann in einen Lesevorgang von 128 Blöcken übersetzt? Oder "durchläuft" der RAID-Readahead das zugrunde liegende Gerät, was zu einem 64-Block-Lesevorgang führt?

Die gleiche Art von Frage gilt für Scheduler? Muss ich mir Gedanken über die Interaktion mehrerer Ebenen von E / A-Schedulern machen oder überschreibt / dev / md0 die zugrunde liegenden Scheduler?

Bei meinen Versuchen, diese Frage zu beantworten, habe ich einige interessante Daten zu Schedulern und Tools ausgegraben, die dazu beitragen könnten, dies herauszufinden:

andrew311
quelle

Antworten:

7

Wenn Sie von md0 aus lesen, wird der Readahead für md0 verwendet. Wenn Sie den Wert von sda lesen würden, der eine Komponente von md0 ist, würde die Einstellung sda verwendet. Device Mapper teilt eine E / A nur in mehrere Lese- und Schreibvorgänge auf, um das RAID durchzuführen. Dies ist jedoch alles unterhalb der Block-Cache-Ebene, auf der Readahead stattfindet. Der Speicherstapel sieht folgendermaßen aus:

Dateisystem - umgeht den Cache, wenn Sie mit O_DIRECT öffnen

Blockcache - Readahead, Schreibcache, Scheduler

Geräte-Mapper - dm, lvm, Software-RAID, Snapshot usw.

sd - festplattentreiber

SCSI - Fehlerbehandlung, Device Routing

Hardware-Treiber - SCSI-Karte, FC-Karte, Ethernet

Beachten Sie dies, wenn Sie dies tun

dd if=/dev/sda of=foo

Sie lesen SDA als eine Datei, so dass Sie Block-Cache durchlaufen. Gehen Sie folgendermaßen vor, um direkt auf die Festplatte zuzugreifen

dd if=/dev/sda of=foo iflag=direct

E / A-Aufzugsplaner sind nur auf dem Plattentreiber (SD) vorhanden. Unter / sys / block / md oder / sys / block / dm befindet sich kein Warteschlangenverzeichnis. Sie müssen nur einmal die Sortierung des Diskettenlaufwerks durchführen.

Stark
quelle
2
Es gibt eine /sys/block/md0/queue/schedulerauf meinen Systemen, aber die einzige Wahl ist none.
Peter Eisentraut