Як увімкнути та використовувати планувальник BFQ?


16

Я щойно встановив ядро ​​Linux версії 4.12 на Ubuntu 17.04 за допомогою ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Справа в тому, що, коли я перевіряю наявні планувальники вводу-виводу, я не можу знайти BFQ або планувальник вводу-виводу Kyber:

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

Тож як використовувати один із нових планувальників у цій версії Linux?

Відповіді:


22

Я не в 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"

Після цього ви повинні оновити свою грубку. У 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"

Як зазначено тут, якщо потрібно, ви можете розрізняти обертові (жорсткі диски) та неротаційні (SSD) пристрої в правилах udev за допомогою атрибута ATTR{queue/rotational}. Майте на увазі, що Paolo Valente, розробник BFQ, вказував у LinuxCon Europe, що BFQ може бути кращим вибором, ніж noopабо deadlineпланувальники, з точки зору гарантій низької затримки, що дає гарну пораду використовувати його і для SSD-дисків.

Порівняння Паоло: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Збережіть його та перезавантажте та запустіть udev rules:

sudo udevadm control --reload
sudo udevadm trigger

3
Я просто хочу зазначити: не робіть цього на комп’ютерах з Linux <4.15, які, як ви очікуєте, зможете призупинити оперативну програму; <4.15 зависить увесь IO під час резюме, оскільки їм не вистачає виправлень "безпечного припинення SCSI".
Іван Козик

Також у вас можуть виникнути проблеми з ядром 4.14, коли включення blk-mq, здається, дає ядро ​​"ой" прямо на початку завантаження ядра в деяких системах (це не панічна повна зупинка, а лише нульова затримка всередині ядра). Ви можете пропустити його, якщо не шукаєте, але якщо ви параноїк, це може бути ознакою того, що щось зламається.
CR.

1
Я б запропонував використовувати трохи більш точне правило udev. Коли я спробував показаний тут, udev намагався встановити планувальник для деяких пристроїв, імена яких відповідають цьому шаблону, але це не блокові пристрої SCSI, які можуть використовувати планувальник BFQ. Правило, в якому я закінчився, таке: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"Це дозволяє уникнути відповідності шаблонів імен пристроїв, що робить збіг більш точним. Він не збігатиметься з розділовими пристроями, оскільки у них немає атрибуту "черга / планувальник".
Дан Ліплення

3
Також важливо зазначити, що ядра 4.15-4.16 страждають від досить серйозної помилки, коли оновлення схеми розділів накопичувача під час використання BFQ може призвести до повного блокування вводу / виводу. Cf .: lkml.org/lkml/2017/12/1/80
Glutanimate

1

Щоб продовжити чудову відповідь RomuloPBenedetti :

Ви можете перевірити, чи планувальник 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 - Розвиток пристрою (/ пристрої / pci / ...).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.