Jak povolit a používat plánovač BFQ?

Právě jsem nainstaloval linuxové jádro verze 4.12 na Ubuntu 17.04 pomocí ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Jde o to, že když zkontroluji dostupné I / O plánovače, nemohu „najít BFQ ani Kyber I / O plánovač:

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

Jak tedy použít jeden z nových plánovačů v této verzi Linuxu?

Odpovědět

Nejsem v Ubuntu, ale to, co jsem udělal ve Fedoře, vám může pomoci.

BFQ je blk-mq (Multi-Queue Block IO Queuing Mechanism) plánovač, takže musíte povolit blk-mq při spuštění, upravit soubor / etc / default / grub a přidat scsi_mod.use_blk_mq=1 do svého GRUB_CMDLINE_LINUX, toto je můj soubor grub, například:

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" 

Poté musíte svůj grub aktualizovat. Ve Fedoře musíme použít sudo grub2-mkconfig -o /path/to/grub.cfg, který se liší v závislosti na způsobu zavádění . V Ubuntu můžete jednoduše spustit:

sudo update-grub 

Restartujte, a pokud se vám to podaří:

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

Vaše jádro bylo pravděpodobně zkompilováno pomocí BFQ jako modulu , což může být případ Kyberu.

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

Můžete jej přidat při spuštění přidáním souboru /etc/modules-load.d/bfq.conf obsahujícího bfq.

Je důležité si uvědomit, že povolení blk_mq znemožňuje použití jiných než blk_mq plánovačů, takže ztratíte noop cfq a non mq deadline

Plánovací systém blk_mq zjevně nepodporuje příznaky výtahu v grubu, místo toho lze použít pravidla udev, s bonusem nabídnout jemnější kontrolu.

Vytvořte /etc/udev/rules.d/60-scheduler.rules, pokud neexistoval, a přidejte:

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

Jak bylo uvedeno zde můžete podle potřeby rozlišovat mezi rotacía l (HDD) a nerotační (SSD) zařízení v pravidlech udev pomocí atributu ATTR{queue/rotational}. Pamatujte, že Paolo Valente, vývojář BFQ, v LinuxCon Europe upozornil, že BFQ může být lepší volbou než plánovače noop nebo deadline záruk nízké latence, díky čemuž je dobré ji použít i pro SSD.

Srovnání Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Uložte jej, znovu načtěte a spusťte udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Komentáře

  • Chci jen poznamenat: nedělejte to v počítačích s Linuxem iv id = „' 097127ad57 „>

4.15, které očekáváte, že budete moci pozastavit-na-ram; < 4.15 zablokuje všechny IO při obnovení, protože jim chybí " bezpečné SCSI quiescing " opravy.

  • Můžete mít také problémy s jádrem 4.14, kde se zdá, že povolení blk-mq dává jádru " oops " hned na začátku g načtení jádra na některých systémech (' to není úplná panika, pouze nulová dereference uvnitř jádra). Může vám chybět, pokud to ' nehledáte, ale pokud jste ' znovu paranoidní, může to být známka toho, že se něco pokazilo.
  • Navrhuji použít o něco přesnější pravidlo udev. ' Když jsem zkusil tu zobrazený, udev se pokusil nastavit plánovač pro některá zařízení, jejichž názvy odpovídají tomuto vzoru, ale nejsou ' t SCSI bloková zařízení, která mohou používat plánovač BFQ. Pravidlo, se kterým jsem skončil, je toto: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Vyhýbá se porovnávání vzorů s názvy zařízení, čímž je shoda přesnější. Nevyhrál ' t odpovídající oddílová zařízení, protože ' nemá " frontu / plánovač " atribut.
  • Je také důležité si uvědomit, že jádra 4.15-4.16 trpí docela závažnou chybou, kde aktualizace schématu rozdělení disku při použití BFQ vést k úplnému zablokování I / O. Viz .: lkml.org/lkml/2017/12/1/80
  • Můžete také echo bfq > /sys/block/sda/queue/scheduler jako root. (sudo pro mě nefungovalo v Ubuntu 18.04) Toto by mělo okamžitě začít fungovat.
  • Odpovědět

    Na rozšířit skvělé odpověď RomuloPBenedetti :

    Pomocí v pravidle udev.Tím se účinně nahradí DRIVERS=="sd|sr" a nespustí se, pokud někdo zapomene scsi_mod.use_blk_mq=1

    Drobnosti:

    • PROGRAM – provést program a zjistit, zda existuje shoda; klíč je pravdivý, pokud se program úspěšně vrátí; Pokud není zadána absolutní cesta, očekává se, že program bude žít v / lib / udev.
    • $sys – přípojný bod sysfs (/sys).
    • $devpath – devpath zařízení (/ devices / pci / …).

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *