Cum se activează și se utilizează programatorul BFQ?

Tocmai am instalat Linux kernel versiunea 4.12 pe Ubuntu 17.04 folosind ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Problema este că, atunci când verific planificatoarele I / O disponibile, nu pot găsi BFQ și nici Kyber I / O planificator:

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

Deci, cum să folosești unul dintre noile planificatoare din această versiune Linux?

Răspuns

Eu nu sunt în Ubuntu, dar ceea ce am făcut în Fedora vă poate ajuta.

BFQ este un blk-mq (Multi-Queue Block IO Queuing Mechanism), deci trebuie să activați blk-mq la momentul pornirii, să editați fișierul / etc / default / grub și să adăugați scsi_mod.use_blk_mq=1 la GRUB_CMDLINE_LINUX, acesta este fișierul meu grub, ca exemplu:

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" 

După aceea, trebuie să vă actualizați grub-ul. Pe Fedora trebuie să folosim sudo grub2-mkconfig -o /path/to/grub.cfg, care variază în funcție de metoda de pornire . Pe Ubuntu, puteți rula pur și simplu:

sudo update-grub 

Reporniți și, dacă primiți acest lucru:

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

Probabil că nucleul dvs. a fost compilat cu BFQ ca modul , și acesta poate fi cazul și pentru Kyber.

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

Puteți să-l adăugați la momentul pornirii adăugând un fișier /etc/modules-load.d/bfq.conf care conține bfq.

Este important să rețineți că activarea blk_mq face imposibilă utilizarea planificatorilor non blk_mq, deci veți pierde noop cfq și non termen limită mq

Se pare că sistemul de planificare blk_mq nu acceptă semnalizatoarele ascensorului în grub, regulile udev pot fi folosite în schimb, cu un bonus de a oferi un control mai precis.

Creați /etc/udev/rules.d/60-scheduler.rules dacă nu există și adăugați:

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

După cum a indicat aici dacă este necesar, puteți distinge între rotationa l (HDD-uri) și dispozitive fără rotație (SSD-uri) în reguli udev folosind atributul ATTR{queue/rotational}. Rețineți că Paolo Valente, dezvoltator BFQ, a subliniat în LinuxCon Europe că BFQ poate fi o alegere mai bună decât planificatorii noop sau deadline de garanții cu latență scăzută, ceea ce face un sfat bun să-l utilizați și pentru SSD-uri.

Comparația lui Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Salvează-l și reîncarcă și declanșează udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Comentarii

  • Vreau doar să rețin: nu ' nu faceți acest lucru pe computere cu Linux < 4.15 pe care vă așteptați să îl puteți suspenda-la-ram; < 4.15 va bloca toate IO-urile în CV, deoarece le lipsește " remedieri SCSI sigure " corecții.
  • Este posibil să aveți probleme și în kernel 4.14 unde activarea blk-mq pare să dea un kernel " oops " chiar la începutul g de încărcare a nucleului pe unele sisteme (' nu este o panică de punct, ci doar o dereferință nulă în interiorul nucleului). S-ar putea să-l pierdeți dacă ' nu îl căutați, dar dacă ' sunteți paranoic, ar putea fi un semn că ceva este rupt.
  • Vă ' sugerez să folosiți o regulă udev puțin mai precisă. Când l-am încercat pe cel afișat aici, udev a încercat să seteze programatorul pentru unele dispozitive ale căror nume se potrivesc cu acel model, dar nu sunt ' t dispozitive de bloc SCSI care pot utiliza programatorul BFQ. Regula cu care am ajuns este următoarea: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Evită potrivirea modelelor cu numele dispozitivelor, ceea ce face potrivirea mai precisă. ' nu se potrivește cu dispozitivele de partiție, deoarece nu au ' coada " / atribut de programare ".
  • De asemenea, este important să rețineți că nucleele 4.15-4.16 suferă de o eroare destul de severă în care actualizarea schemei de partiție a unei unități în timp ce utilizați BFQ duce la un blocaj complet I / O. Cf .: lkml.org/lkml/2017/12/1/80
  • Puteți, de asemenea, echo bfq > /sys/block/sda/queue/scheduler ca rădăcină. (sudo nu a funcționat pentru mine în Ubuntu 18.04) Acest lucru ar trebui să-l facă eficient imediat.

Răspuns

To extindeți excelent Răspuns RomuloPBenedetti :

Puteți testa, dacă programatorul bfq este de fapt disponibil pe un anumit dispozitiv utilizând PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" în regula udev.Acest lucru va înlocui efectiv DRIVERS=="sd|sr" și nu va declanșa dacă cineva a uitat scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Executați un program pentru a determina dacă există o potrivire; cheia este adevărată dacă programul revine cu succes; Dacă nu este dată o cale absolută, se așteaptă ca programul să trăiască în / lib / udev.
  • $sys – Punctul de montare sysfs (/sys).
  • $devpath – Devpath-ul dispozitivului (/ devices / pci / …).

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *