Ich bin nicht in Ubuntu, aber was ich in Fedora getan habe, kann Ihnen helfen.
BFQ ist ein BLK-MQ-Scheduler (Multi-Queue Block IO Queuing Mechanism). Sie müssen BLK-MQ also beim Booten aktivieren, Ihre / etc / default / grub-Datei bearbeiten und scsi_mod.use_blk_mq=1
zu Ihrer hinzufügen GRUB_CMDLINE_LINUX
. Dies ist meine grub-Datei als ein 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 Ihr Grub aktualisieren. Auf Fedora müssen wir verwenden sudo grub2-mkconfig -o /path/to/grub.cfg
, was je nach Bootmethode variiert . Unter Ubuntu können Sie einfach Folgendes ausführen:
sudo update-grub
Starten Sie neu und wenn Sie dies bekommen:
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 Folgendes enthält bfq
.
Es ist wichtig zu beachten, dass die Aktivierung von "blk_mq" die Verwendung von nicht-blk_mq-Schedulern unmöglich macht, sodass Sie "noop cfq" und die Nicht-mq-Frist verlieren
Anscheinend unterstützt das blk_mq-Scheduling-System keine Lift-Flags in Grub. Stattdessen können udev-Regeln verwendet werden.
Erstellen Sie, /etc/udev/rules.d/60-scheduler.rules
wenn sie nicht vorhanden und fügen:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Wie hier gezeigt , können Sie bei Bedarf anhand des Attributs in udev-Regeln zwischen rotierenden (HDDs) und nicht rotierenden (SSDs) Geräten unterscheiden ATTR{queue/rotational}
. Beachten Sie, dass Paolo Valente, BFQ-Entwickler, auf der LinuxCon Europe darauf hingewiesen hat, dass BFQ in Bezug auf Garantien mit geringer Latenz eine bessere Wahl sein kann als der noop
oder die Planer. Dies deadline
ist ein guter Ratschlag, um es auch für SSDs zu verwenden.
Paolos Vergleich: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Speichern und neu laden und auslösen udev rules
:
sudo udevadm control --reload
sudo udevadm trigger
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"
Es wird vermieden, dass Muster mit Gerätenamen abgeglichen werden, wodurch der Abgleich genauer wird. Partitionsgeräte werden nicht zugeordnet, da sie nicht über das Attribut "Warteschlange / Scheduler" verfügen.Um die Antwort von RomuloPBenedetti zu erweitern :
Sie können mithilfe von
PROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"
in udev rule testen, ob der bfq scheduler tatsächlich auf einem bestimmten Gerät verfügbar ist . Dies wird effektiv ersetzenDRIVERS=="sd|sr"
und nur nicht feuern, wenn man vergessen hatscsi_mod.use_blk_mq=1
Wissenswertes:
PROGRAM
- Führen Sie ein Programm aus, um festzustellen, ob eine Übereinstimmung vorliegt. der Schlüssel ist wahr, wenn das Programm erfolgreich zurückkehrt; Wenn kein absoluter Pfad angegeben wird, wird erwartet, dass das Programm in / lib / udev abgelegt ist.$sys
- Der sysfs-Einhängepunkt (/sys
).$devpath
- Der Pfad des Geräts (/ devices / pci / ...).quelle