Как включить и использовать планировщик BFQ?

Вариант примера подпроцесса bash:

выведите две строки в stderr и tee stderr в файл, grep тройник и труба обратно на stdout

(>&2 echo -e 'asdf\nfff\n') 2> >(tee some.load.errors | grep 'fff' >&1)

stdout:

fff

some.load.errors (например, stderr):

asdf
fff
16
03.08.2017, 13:46
2 ответа

Я не работаю в Ubuntu, но то, что я сделал в Fedora, может вам помочь.

BFQ — это планировщик blk -mq (Multi -Queue Block IO Queuing Mechanism ), поэтому вам необходимо включить 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"

Как указано здесь , при необходимости вы можете различать вращающиеся (жесткие диски )и не-вращающиеся (твердотельные накопители )в правилах udev, используя атрибут ATTR{queue/rotational}. Имейте в виду, что Паоло Валенте, разработчик 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
28
27.01.2020, 19:48

Продлить великий RomuloPBenedetti answer:

Вы можете проверить, действительно ли планировщик 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-Путь устройства (/devices/pci/... ).
1
27.01.2020, 19:48

Теги

Похожие вопросы