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