Wie aktiviere und verwende ich den BFQ-Scheduler?

Ich habe gerade den Linux-Kernel Version 4.12 unter Ubuntu 17.04 mit ukuu installiert (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Wenn ich die verfügbaren E / A-Scheduler überprüfe, kann ich weder den BFQ noch den Kyber I / finden. O Scheduler:

cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq] 

Wie verwende ich einen der neuen Scheduler in dieser Linux-Version?

Antwort

Ich bin nicht in Ubuntu, aber was ich in Fedora getan habe, kann Ihnen helfen.

BFQ ist ein blk-mq (Multi-Queue Block IO Queuing) Mechanismus) Scheduler, daher müssen Sie blk-mq beim Booten aktivieren, Ihre Datei / etc / default / grub bearbeiten und scsi_mod.use_blk_mq=1 zu Ihrer GRUB_CMDLINE_LINUX, dies ist meine Grub-Datei als Beispiel:

GRUB_TIMEOUT=3 GRUB_DISTRIBUTOR="$(sed "s, release .*$,,g" /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=false GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1" GRUB_DISABLE_RECOVERY="true" 

Danach müssen Sie Ihren Grub aktualisieren. Unter Fedora müssen wir sudo grub2-mkconfig -o /path/to/grub.cfg verwenden, was je nach Startmethode variiert. Unter Ubuntu können Sie einfach Folgendes ausführen:

sudo update-grub 

Starten Sie neu, und wenn Sie Folgendes erhalten:

cat /sys/block/sda/queue/scheduler [mq-deadline] none 

Wahrscheinlich wurde Ihr Kernel mit BFQ als Modul kompiliert, und dies kann auch für Kyber der Fall sein.

sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none 

Sie können es beim Booten hinzufügen, indem Sie eine /etc/modules-load.d/bfq.conf -Datei hinzufügen, die bfq.

Es ist wichtig zu beachten, dass das Aktivieren von blk_mq die Verwendung von Nicht-Blk_mq-Schedulern unmöglich macht, sodass Sie noop cfq und das Nicht verlieren mq-Frist

Anscheinend unterstützt das blk_mq-Planungssystem keine Aufzugsflaggen in grub. Stattdessen können udev-Regeln verwendet werden, mit dem Bonus, eine differenziertere Kontrolle anzubieten.

Erstellen Sie /etc/udev/rules.d/60-scheduler.rules, wenn es nicht vorhanden war, und fügen Sie Folgendes hinzu:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq" 

Wie angegeben hier Bei Bedarf können Sie zwischen Rotationa unterscheiden l (HDDs) und nicht rotierende (SSDs) Geräte in udev-Regeln unter Verwendung des Attributs ATTR{queue/rotational}. Beachten Sie, dass Paolo Valente, BFQ-Entwickler, in LinuxCon Europe darauf hingewiesen hat, dass BFQ eine bessere Wahl sein kann als die Scheduler noop oder deadline Was ist ein guter Rat, um es auch für SSDs zu verwenden?

Paolos Vergleich: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Speichern Sie es und laden Sie udev rules neu:

sudo udevadm control --reload sudo udevadm trigger 

Kommentare

  • Ich möchte nur Folgendes beachten: ' tun Sie dies nicht auf Computern mit Linux < 4.15, von dem Sie erwarten, dass es in der Lage ist, den RAM auszusetzen; < 4.15 hängt alle E / A-Vorgänge beim Fortsetzen auf, da ihnen die sichere SCSI-Stilllegung " Korrekturen.
  • Möglicherweise haben Sie auch Probleme mit Kernel 4.14, bei denen das Aktivieren von blk-mq einen Kernel " oops " gleich zu Beginn g des Ladens des Kernels auf einigen Systemen (' ist keine vollständige Panik, sondern nur eine Null-Dereferenzierung innerhalb des Kernels). Sie könnten es verpassen, wenn Sie ' nicht danach suchen, aber wenn Sie ' paranoid sind, könnte dies ein Zeichen dafür sein, dass etwas kaputt ist.
  • Ich ' würde vorschlagen, eine etwas genauere udev-Regel zu verwenden. Als ich das hier gezeigte versuchte, versuchte udev, den Scheduler für einige Geräte festzulegen, deren Namen diesem Muster entsprechen, aber keine ' t SCSI-Blockgeräte, die den BFQ-Scheduler verwenden können. Die Regel, mit der ich endete, lautet: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Es wird ein Mustervergleich mit den Namen von Geräten vermieden, wodurch der Abgleich genauer wird. ' passt nicht zu Partitionsgeräten, da sie ' nicht über die Warteschlange " verfügen. Scheduler " -Attribut.
  • Es ist auch wichtig zu beachten, dass die Kernel 4.15-4.16 unter einem ziemlich schwerwiegenden Fehler leiden, bei dem das Aktualisieren des Partitionsschemas eines Laufwerks unter Verwendung von BFQ möglich ist führen zu einer vollständigen E / A-Sperrung. Vgl.: lkml.org/lkml/2017/12/1/80
  • Sie können auch echo bfq > /sys/block/sda/queue/scheduler als root. (sudo hat bei mir in Ubuntu 18.04 nicht funktioniert) Dies sollte es sofort wirksam machen.

Antwort

To Erweitern Sie die Antwort RomuloPBenedetti :

Mit in der udev-Regel.Dies ersetzt effektiv DRIVERS=="sd|sr" und wird nur dann nicht ausgelöst, wenn man scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Führen Sie ein Programm aus, um festzustellen, ob eine Übereinstimmung vorliegt. Der Schlüssel ist wahr, wenn das Programm erfolgreich zurückgegeben wird. Wenn kein absoluter Pfad angegeben ist, wird erwartet, dass das Programm in / lib / udev lebt.
  • $sys – Der sysfs-Mountpunkt ().
  • $devpath – Der Devpath des Geräts (/ device / pci / …).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.