Hvordan aktivere og bruke BFQ-planleggeren?

Jeg har nettopp installert Linux-kjerneversjon 4.12 på Ubuntu 17.04 ved hjelp av ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Saken er at når jeg sjekker tilgjengelige I / O-planleggere, kan jeg ikke synes å finne BFQ eller Kyber I / O planlegger:

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

Så hvordan bruker jeg en av de nye planleggerne i denne Linux-versjonen?

Svar

Jeg er ikke i Ubuntu, men det jeg gjorde i Fedora kan hjelpe deg.

BFQ er en blk-mq (Multi-Queue Block IO Queuing Mechanism) planlegger, så du må aktivere blk-mq ved oppstart, redigere / etc / default / grub-filen og legge til scsi_mod.use_blk_mq=1 til GRUB_CMDLINE_LINUX, dette er grub-filen min, 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" 

Deretter må du oppdatere din grub. På Fedora må vi bruke sudo grub2-mkconfig -o /path/to/grub.cfg, som varierer avhengig av oppstartsmetoden . På Ubuntu kan du bare kjøre:

sudo update-grub 

Start på nytt, og hvis du får dette:

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

Sannsynligvis ble kjernen din kompilert med BFQ som en modul , og dette kan også være tilfelle for Kyber.

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

Du kan legge den til ved oppstart ved å legge til en /etc/modules-load.d/bfq.conf -fil som inneholder bfq.

Det er viktig å merke seg at aktivering av blk_mq gjør det umulig å bruke ikke blk_mq planleggere, slik at du mister noop cfq og non mq deadline

Tilsynelatende støtter ikke blk_mq planleggingssystem heisflagg i grub, udev-regler kan brukes i stedet, med en bonus å tilby en mer kornet kontroll.

Opprett /etc/udev/rules.d/60-scheduler.rules hvis den ikke fantes og legg til:

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

Som påpekt her om nødvendig kan du skille mellom rotationa l (HDD-er) og ikke-roterende (SSD-er) enheter i udev-regler ved bruk av attributtet ATTR{queue/rotational}. Vær oppmerksom på at Paolo Valente, BFQ-utvikler, påpekte i LinuxCon Europe at BFQ kan være et bedre valg enn noop eller deadline planleggerne av garantier med lav ventetid, hva er det som er et godt råd å bruke det til SSD-er.

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

Lagre den, og last inn og utløs udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Kommentarer

  • Jeg vil bare merke: ikke ' t gjør dette på datamaskiner med Linux < 4.15 som du forventer å kunne suspendere-til-ram; < 4.15 vil henge all IO på CV fordi de mangler " safe SCSI quiescing " fixes.
  • Du kan også ha problemer på kjerne 4.14 der aktivering av blk-mq ser ut til å gi en kjerne " oops " rett i begynnelsen g for å laste kjernen på noen systemer (det ' er ikke en fullstansepanikk, bare en null dereference inne i kjernen). Du vil kanskje savne det hvis du ' ikke leter etter det, men hvis du ' er paranoide, kan det være et tegn på at noe er ødelagt.
  • Jeg ' Jeg foreslår at du bruker en litt mer nøyaktig udev-regel. Da jeg prøvde den som vises her, prøvde udev å sette planleggeren for noen enheter hvis navn samsvarer med det mønsteret, men er ikke ' t SCSI-blokkeringsenheter som kan bruke BFQ-planleggeren. Regelen jeg endte opp med er denne: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Den unngår mønstermatching mot navn på enheter, noe som gjør samsvaringen mer nøyaktig. Den vil ikke ' ikke matche partisjonsenheter fordi de ikke ' ikke har " køen / scheduler " attributt.
  • Også viktig å merke seg er at kjerner 4.15-4.16 lider av en ganske alvorlig feil der oppdatering av partisjonsskjemaet til en stasjon mens du bruker BFQ kan føre til en fullstendig I / O-låsing. Jf .: lkml.org/lkml/2017/12/1/80
  • Du kan også echo bfq > /sys/block/sda/queue/scheduler som rot. (sudo fungerte ikke for meg i Ubuntu 18.04) Dette skulle gjøre det effektivt med en gang.

Svar

Til utvide flott RomuloPBenedetti svar :

Du kan teste om bfq planlegger faktisk er tilgjengelig på en bestemt enhet ved å bruke PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" i udev-regelen.Dette vil effektivt erstatte DRIVERS=="sd|sr" og bare ikke skyte hvis man glemte scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Utfør et program for å bestemme om det er samsvar; nøkkelen er sant hvis programmet returnerer vellykket; Hvis ingen absolutt bane er gitt, forventes programmet å leve i / lib / udev.
  • $sys – Sysfs-monteringspunktet (/sys).
  • $devpath – Devpath av enheten (/ enheter / pci / …).

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *