Jag har just installerat Linux-kärnversion 4.12 på Ubuntu 17.04 med ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).
Saken är att när jag kontrollerar tillgängliga I / O-schemaläggare kan jag inte tycka hitta BFQ eller Kyber I / O schemaläggare:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq]
Så hur använder jag en av de nya schemaläggarna i denna Linux-version?
Svar
Jag är inte i Ubuntu, men vad jag gjorde i Fedora kan hjälpa dig.
BFQ är en blk-mq (Multi-Queue Block IO Queuing Mechanism) schemaläggare, så du måste aktivera blk-mq vid starttid, redigera din / etc / default / grub-fil och lägga till scsi_mod.use_blk_mq=1
till din GRUB_CMDLINE_LINUX
, detta är min grub-fil, som ett exempel:
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"
Därefter måste du uppdatera din grub. På Fedora måste vi använda sudo grub2-mkconfig -o /path/to/grub.cfg
, vilket varierar beroende på startmetoden . På Ubuntu kan du helt enkelt köra:
sudo update-grub
Starta om, och om du får det här:
cat /sys/block/sda/queue/scheduler [mq-deadline] none
Förmodligen kompilerades din kärna med BFQ som en modul , och detta kan vara fallet även för Kyber.
sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none
Du kan lägga till det vid starttid genom att lägga till en /etc/modules-load.d/bfq.conf
-fil som innehåller bfq
.
Det är viktigt att notera att om du aktiverar blk_mq blir det omöjligt att använda schemaläggare som inte är blk_mq, så att du förlorar noop cfq och non mq deadline
Tydligen kan blk_mq-schemaläggningssystem inte stödja hissflaggor i grub, udev-regler kan istället användas, med en bonus att erbjuda en mer kornig kontroll.
Skapa /etc/udev/rules.d/60-scheduler.rules
om det inte fanns och lägg till:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Som påpekat här om det behövs kan du skilja mellan rotation l (hårddiskar) och icke-rotationsenheter (SSD) i udev regler med attributet ATTR{queue/rotational}
. Var medveten om att Paolo Valente, BFQ-utvecklare, i LinuxCon Europe pekade på att BFQ kan vara ett bättre val än noop
eller deadline
schemaläggare i termer av garantier med låg latens, vad är ett bra råd att använda det även för SSD-enheter.
Paolos jämförelse: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Spara det och ladda om och utlösa udev rules
:
sudo udevadm control --reload sudo udevadm trigger
Kommentarer
Svar
Till utöka bra RomuloPBenedetti svar :
Du kan testa om bfq-schemaläggaren faktiskt är tillgänglig på en viss enhet med PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler""
i udev-regeln.Detta kommer effektivt att ersätta DRIVERS=="sd|sr"
och bara inte aktivera om man glömde scsi_mod.use_blk_mq=1
Trivia:
-
PROGRAM
– Kör ett program för att avgöra om det finns en matchning; nyckeln är sant om programmet återvänder framgångsrikt; Om ingen absolut sökväg ges förväntas programmet leva i / lib / udev. -
$sys
– Sysfs-monteringspunkten (/sys
). -
$devpath
– Devpath of the device (/ devices / pci / …).
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"
Det undviker mönstermatchning mot enhetsnamn, vilket gör matchningen mer exakt. ' matchar inte partitionsenheter eftersom de inte ' t har " kö / schemaläggare " -attribut.echo bfq > /sys/block/sda/queue/scheduler
som rot. (sudo fungerade inte för mig i Ubuntu 18.04) Detta ska göra det effektivt omedelbart.