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
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 / …).
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.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.