Frage Wenn Sie Software-RAID und LVM unter Linux verwenden, welche E / A-Scheduler- und Readahead-Einstellungen werden berücksichtigt?


Im Falle mehrerer Schichten (physische Laufwerke -> md -> dm -> lvm), wie interagieren die Scheduler, Readahead-Einstellungen und andere Festplatteneinstellungen?

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

Zum Beispiel, wenn das physikalische Gerät 128 Blöcke vorauslesen kann und das RAID 64 Bit vorauslesen kann, was ich beim Lesen von / dev / md0 beachte? Versucht der MD-Treiber einen 64-Block-Lesevorgang, der dann vom physischen Gerätetreiber in einen Lesevorgang von 128 Blöcken übersetzt wird? Oder "geht" das RAID-Readahead zum darunterliegenden Gerät, was zu einem 64-Block-Lesen führt?

Die gleiche Art von Frage gilt für Scheduler? Muss ich mir Sorgen um mehrere Ebenen von E / A-Schedulern machen und darüber, wie sie interagieren, oder überschreibt / dev / md0 die zugrunde liegenden Scheduler effektiv?

Bei meinen Versuchen, diese Frage zu beantworten, habe ich einige interessante Daten über Scheduler und Tools ausgegraben, die dabei helfen könnten, dies herauszufinden:


26
2018-05-03 20:34


Ursprung




Antworten:


Wenn Sie von md0 lesen, wird der Readahead für md0 verwendet. Wenn Sie das Lesen von SDA durchgeführt haben, das eine Komponente von MD0 ist, würde es die SDA-Einstellung verwenden. Device Mapper teilt nur ein I / O in mehrere Lese- und Schreibvorgänge auf, um das RAID auszuführen, aber das ist alles unter dem Block-Cache-Layer, wo Readahead stattfindet. Der Speicherstapel sieht folgendermaßen aus:

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

Blockcache - Readahead, Schreibcache, Scheduler

Device-Mapper - dm, LVM, Software-RAID, Snapshot usw.

SD - Festplattentreiber

SCSI - Fehlerbehandlung, Geräte-Routing

Hardwaretreiber - SCSI-Karte, FC-Karte, Ethernet

Beachten Sie, dass wenn Sie das tun

dd if=/dev/sda of=foo

Sie lesen sda als Datei, Sie gehen also durch den Blockcache. Um direkt auf die Festplatte zu gehen, tun Sie

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

Wie bei E / A-Aufzugs-Schedulern gibt es diese nur für den Festplattentreiber (SD). Es gibt kein Warteschlangenverzeichnis unter / sys / block / md oder / sys / block / dm. Sie gehen nur einmal durch die Disk-Lift-Sortierung.


6
2018-05-12 16:12



Da ist ein /sys/block/md0/queue/scheduler auf meinen Systemen, aber die einzige Wahl darin ist none. - Peter Eisentraut