Permanente Vorleseeinstellung für blockdev setra

14

Ich habe einige SSDs auf /dev/sda1und /dev/sdb1auf einem SLES 11 SP2-Server installiert und konnte die Vorausleseeinstellung wie folgt anpassen blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

Wie kann ich diese Einstellung beim Booten beibehalten? Gibt es eine entsprechende Einstellung in sysctl.conf, oder muss ich mich mit einem RC-Skript zufrieden geben, um dies zu erreichen?

Banjer
quelle
2
Ich weiß nicht, ob es eine "richtige" Lösung dafür gibt, aber udev-Regeln wären sicherlich besser als ein RC-Skript.
Patrick
3
Warum sollten Sie die Vorauslesbarkeit einer SSD erhöhen ? Ich kann den Punkt nicht erkennen, da SSDs kurze Suchzeiten haben.
Stéphane Chazelas

Antworten:

16

Ich würde vorschlagen, dass Sie udev verwenden, um Parameter für die SSD-Festplatten festzulegen. Auf diese Weise können Sie einen bestimmten Warteschlangenplaner konfigurieren, der besser für SSD usw. geeignet ist. Sie können auch Parameter basierend auf vielen Parametern nur auf einige der Geräte anwenden.

Sie können die spezifischen Attribute erhalten, die für die Übereinstimmung mit Ihren Geräten erforderlich sind (z. B. das Festplattenmodell und der Hersteller), indem Sie Folgendes ausführen:

udevadm info -a -p /sys/block/sda

und überprüfen Sie alle ATTR-Paare für Ihr Blockgerät.

Ein weiterer Vorteil ist die Möglichkeit, die Parameter für steckbare Festplatten (z. B. in Gehäusen oder Hotswap-Einschüben) festzulegen. Diese Einstellung wird auf alle neuen Geräte angewendet, sofern die Geräteparameter übereinstimmen.

Hier ist ein Beispiel, um einen bestimmten Scheduler für Intel-SSDs anzuwenden, Ihren gewünschten Readahead-Wert (4096 Blöcke = 2048 KB), und auch einen anderen Scheduler für alle anderen SSDs:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

Nach dem Speichern der Datei können Sie testen, ob Ihre Regel mit dem Gerät übereinstimmt und was udev mit udevadm macht:

udevadm test --action=add /sys/block/sda

Dies gibt alle Regeln aus, die udev lädt, welche übereinstimmt, welche nicht und welche Entscheidungen udev treffen wird, wenn das Gerät angeschlossen ist.

Hoffe das hilft.

zorlem
quelle
Gute Infos. Ich werde einige ähnliche udev-Regeln ausprobieren, wenn ich die Gelegenheit dazu bekomme und mich bei Ihnen meldet. Wir verwenden OCZ vertex 3's, aber ich denke nicht, dass Ihre vorgeschlagenen Regeln spezifisch für Intel sind, außer für das Modellfeld, richtig?
Banjer
Ja, Intel-SSDs sind nicht spezifisch. Ich habe sie nur als Beispiel für das Filtern nach Attributen verwendet. Sie müssen verwenden udevadm info, um die für Ihre Hardware spezifischen Parameter zu finden.
Zorlem
10

Beachten Sie, dass das Vorauslesen mindestens über /sys( /sys/class/block/sda/queue/read_ahead_kb) blockdevund hdparm( hdparm -a) eingestellt werden kann.

hdparmon Debian und seine Derivate werden mit einem ausgeliefert hdparm.conf, das die Attribute pro Gerät angibt, die beim Booten und beim Hot-Plug (über udevRegeln) festgelegt werden sollen.

So können Sie haben:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

(Es ist besser, IDs zu verwenden, als sdadie, die sich von einem Start zum nächsten ändern können.)

Stéphane Chazelas
quelle
Ich sehe hdparmauf SLES 11, kann es aber nicht finden hdparm.conf. Google scheint mir mitzuteilen, dass ein RC-Skript erforderlich ist, damit die hdparmEinstellungen bestehen bleiben, zumindest unter SuSE.
Banjer
@Banjer, ja, es sieht so aus, als wäre es eine Debian-Erweiterung (in Ubuntu leicht modifiziert): ein Shell-Skript, das beim frühen Booten ausgeführt wird, und ein Geräte-Hot-Plug, das diese Datei analysiert und entsprechend aufruft hdparm. Ich habe die Antwort aktualisiert.
Stéphane Chazelas
+1 für die Angabe des /sysPfads, obwohl die @ zorlem- udevRegel für die Startkonfiguration sehr hilfreich ist.
Totor
-1

Es ist nichts Entsprechendes sysctldrin, also /etc/rc.localist yep ein Weg oder ähnlich. Und Vorsicht, - mir ist persönlich aufgefallen, dass unter Ubuntu - diese Änderungen sogar noch einmal nach dem Booten vorgenommen werden, sodass es möglicherweise sogar Sinn macht, crontabsie beizubehalten.

Poige
quelle