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/schedulersom rot. (sudo fungerade inte för mig i Ubuntu 18.04) Detta ska göra det effektivt omedelbart.