Hvordan aktiveres og bruges BFQ-planlæggeren?

Jeg har lige installeret Linux-kerneversion 4.12 på Ubuntu 17.04 ved hjælp af ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Sagen er, at når jeg tjekker de tilgængelige I / O-planlæggere, kan jeg ikke synes at finde BFQ eller Kyber I / O-planlægger:

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

Så hvordan bruger man en af de nye planlæggere i denne Linux-version?

Svar

Jeg er ikke i Ubuntu, men hvad jeg gjorde i Fedora kan hjælpe dig.

BFQ er en blk-mq (Multi-Queue Block IO Queuing Mechanism) scheduler, så du skal aktivere blk-mq ved opstartstid, redigere din / etc / default / grub-fil og tilføje scsi_mod.use_blk_mq=1 til din GRUB_CMDLINE_LINUX, dette er min grub-fil, som et eksempel:

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" 

Derefter skal du opdatere din grub. På Fedora skal vi bruge sudo grub2-mkconfig -o /path/to/grub.cfg, som varierer afhængigt af opstartsmetoden . På Ubuntu kan du simpelthen køre:

sudo update-grub 

Genstart, og hvis du får dette:

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

Sandsynligvis blev din kerne samlet med BFQ som et modul , og dette kan også være tilfældet for Kyber.

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

Du kan tilføje det ved opstartstid ved at tilføje en /etc/modules-load.d/bfq.conf -fil, der indeholder bfq.

Det er vigtigt at bemærke, at aktivering af blk_mq gør det umuligt at bruge ikke blk_mq planlægning, så du mister noop cfq og non mq deadline

Tilsyneladende understøtter blk_mq planlægningssystem ikke elevatorflag i grub, udev-regler kan bruges i stedet med en bonus ved at tilbyde en mere kornet kontrol.

Opret /etc/udev/rules.d/60-scheduler.rules hvis det ikke eksisterede, og tilføj:

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

Som påpeget her hvis det er nødvendigt, kan du skelne mellem rotationa l (HDDer) og ikke-roterende (SSDer) enheder i udev-regler ved hjælp af attributten ATTR{queue/rotational}. Vær opmærksom på, at Paolo Valente, BFQ-udvikler, i LinuxCon Europe påpegede, at BFQ kan være et bedre valg end noop eller deadline planlægning med hensyn til af garantier med lav latenstid, hvad er det gode råd at bruge det også til SSDer.

Paolos sammenligning: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Gem det, og genindlæs og udløs udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Kommentarer

  • Jeg vil bare bemærke: don ' t gør dette på computere med Linux < 4.15, som du forventer at være i stand til at suspendere-til-ram; < 4.15 vil hænge al IO på CV, fordi de mangler " sikker SCSI-quiescing " rettelser.
  • Du kan også have problemer på kerne 4.14, hvor aktivering af blk-mq ser ud til at give en kerne " oops " lige ved begyndelsen g af indlæsning af kernen på nogle systemer (det ' er ikke en fuldstopspanik, bare en nul derference i kernen). Du går måske glip af det, hvis du ' ikke leder efter det, men hvis du ' er paranoid, kan det være et tegn på, at noget er brudt.
  • Jeg ' Jeg foreslår at bruge en lidt mere nøjagtig udev-regel. Da jeg prøvede den, der er vist her, forsøgte udev at indstille planlæggeren til nogle enheder, hvis navne matcher det mønster, men er ikke ' t SCSI-blokkenheder, der kan bruge BFQ-planlæggeren. Reglen, jeg endte med, er denne: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Det undgår mønstermatchning mod navne på enheder, hvilket gør matchningen mere præcis. Det vil ' ikke matche partitionsenheder, fordi de ikke ' ikke har " køen / scheduler " attribut.
  • Det er også vigtigt at bemærke, at kerner 4.15-4.16 lider af en temmelig alvorlig fejl, hvor opdatering af partitionsskemaet på et drev, mens du bruger BFQ, kan føre til en komplet I / O-låsning. Jf .: lkml.org/lkml/2017/12/1/80
  • Du kan også echo bfq > /sys/block/sda/queue/scheduler som rod. (sudo fungerede ikke for mig i Ubuntu 18.04) Dette skulle gøre det effektivt med det samme.

Svar

Til udvid godt RomuloPBenedetti svar :

Du kan teste, om bfq scheduler faktisk er tilgængelig på en bestemt enhed ved hjælp af PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" i udev-reglen.Dette vil effektivt erstatte DRIVERS=="sd|sr" og bare ikke affyre, hvis man glemte scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Udfør et program for at afgøre, om der er et match; nøglen er sand, hvis programmet vender tilbage med succes; Hvis der ikke gives nogen absolut sti, forventes programmet at leve i / lib / udev.
  • $sys – Sysfs-monteringspunktet (/sys).
  • $devpath – Enhedens devpath (/ devices / pci / …).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *