Я не в Ubuntu, но то, что я сделал в Fedora, может вам помочь.
BFQ - это планировщик blk-mq (механизм очередей блоков многократного ввода-вывода), поэтому вам нужно включить blk-mq во время загрузки, отредактировать файл / etc / default / grub и добавить scsi_mod.use_blk_mq=1
в него GRUB_CMDLINE_LINUX
, это мой файл grub, так как пример:
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"
После этого вы должны обновить ваш grub. На Fedora мы должны использовать sudo grub2-mkconfig -o /path/to/grub.cfg
, который варьируется в зависимости от метода загрузки . В Ubuntu вы можете просто запустить:
sudo update-grub
Перезагрузитесь, и если вы получите это:
cat /sys/block/sda/queue/scheduler
[mq-deadline] none
Возможно, ваше ядро было скомпилировано с BFQ в качестве модуля , и это может быть в случае с Kyber.
sudo modprobe bfq
sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] bfq none
Вы можете добавить его во время загрузки, добавив /etc/modules-load.d/bfq.conf
файл, содержащий bfq
.
Важно отметить, что включение blk_mq делает невозможным использование планировщиков не blk_mq, поэтому вы потеряете noop cfq и крайний срок не mq
Очевидно, система планирования blk_mq не поддерживает флаги лифта в grub, вместо этого можно использовать правила udev с дополнительным преимуществом более детального управления.
Создайте, /etc/udev/rules.d/60-scheduler.rules
если он не существует, и добавьте:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Как указано здесь, при необходимости вы можете различать ротационные (HDD) и невращающиеся (SSD) устройства в правилах udev, используя атрибут ATTR{queue/rotational}
. Помните, что Paolo Valente, разработчик BFQ, указал в LinuxCon Europe, что BFQ может быть лучшим выбором, чем планировщики noop
или deadline
планировщики, с точки зрения гарантий низкой задержки, что делает хороший совет использовать его и для твердотельных накопителей.
Сравнение Паоло: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Сохраните его, перезагрузите и запустите 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"
оно позволяет избежать сопоставления с именами устройств, что делает сопоставление более точным. Он не будет соответствовать устройствам разделов, потому что они не имеют атрибута «очередь / планировщик».Чтобы выразить отличный ответ РомулоПБенедетти :
Вы можете проверить, доступен ли планировщик bfq на конкретном устройстве, используя
PROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"
правило udev. Это фактически заменитDRIVERS=="sd|sr"
и просто не сработает, если кто-то забылscsi_mod.use_blk_mq=1
Общая информация:
PROGRAM
- выполнить программу, чтобы определить, есть ли совпадение; ключ верен, если программа успешно возвращается; Если абсолютный путь не указан, ожидается, что программа будет жить в / lib / udev.$sys
- Точка монтирования sysfs (/sys
).$devpath
- Devpath устройства (/ devices / pci / ...).источник