Ho appena installato la versione 4.12 del kernel Linux su Ubuntu 17.04 utilizzando ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).
Il fatto è che quando controllo gli scheduler di I / O disponibili, non riesco a “trovare il BFQ né il Kyber I / O scheduler:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq] 
Quindi come utilizzare uno dei nuovi scheduler in questa versione di Linux?
Risposta
Non sono in Ubuntu, ma quello che ho fatto in Fedora potrebbe aiutarti.
 BFQ è un blk-mq (Multi-Queue Block IO Queuing Mechanism), quindi devi abilitare blk-mq allavvio, modificare il file / etc / default / grub e aggiungere scsi_mod.use_blk_mq=1 al tuo GRUB_CMDLINE_LINUX, questo è il mio file grub, ad esempio: 
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" 
 Dopodiché, devi aggiornare il tuo grub. Su Fedora dobbiamo usare sudo grub2-mkconfig -o /path/to/grub.cfg, che varia  a seconda del metodo di avvio . Su Ubuntu, puoi semplicemente eseguire: 
sudo update-grub 
Riavvia e, se ottieni questo:
cat /sys/block/sda/queue/scheduler [mq-deadline] none 
Probabilmente il tuo kernel è stato compilato con BFQ come modulo , e questo può essere il caso anche per Kyber.
sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none 
 Puoi aggiungerlo allavvio aggiungendo un /etc/modules-load.d/bfq.conf file contenente bfq. 
È importante notare che abilitando blk_mq non è possibile utilizzare scheduler non blk_mq, quindi perderai noop cfq e il non mq deadline
Apparentemente il sistema di scheduling blk_mq non supporta i flag dellelevatore in grub, le regole udev possono essere usate invece, con un bonus di offrire un controllo più granulare.
 Crea /etc/udev/rules.d/60-scheduler.rules se non esisteva e aggiungi: 
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq" 
 Come indicato  qui , se necessario, puoi distinguere tra rotazione l (HDD) e dispositivi non rotazionali (SSD) nelle regole udev utilizzando lattributo ATTR{queue/rotational}. Tieni presente che Paolo Valente, sviluppatore BFQ, ha indicato a LinuxCon Europe che BFQ può essere una scelta migliore rispetto agli scheduler noop o deadline in termini di bassa latenza garantisce, ciò che rende un buon consiglio di usarlo anche per SSD. 
Confronto di Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
 Salva, ricarica e attiva udev rules: 
sudo udevadm control --reload sudo udevadm trigger 
Commenti
Risposta
A estendere ottimo RomuloPBenedetti answer :
 Puoi verificare se bfq scheduler è effettivamente disponibile su un particolare dispositivo utilizzando PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" nella regola udev.Questo sostituirà effettivamente DRIVERS=="sd|sr" e semplicemente non si attiverà se si dimentica scsi_mod.use_blk_mq=1 
Curiosità:
-  
PROGRAM– Esegue un programma per determinare se esiste una corrispondenza; la chiave è vera se il programma ritorna con successo; Se non viene fornito alcun percorso assoluto, il programma dovrebbe risiedere in / lib / udev. -  
$sys– Il punto di montaggio di sysfs (/sys). -  
$devpath– Il devpath del dispositivo (/ devices / pci / …). 
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"Evita la corrispondenza dei modelli con i nomi dei dispositivi, il che rende la corrispondenza più precisa. ' non corrisponde ai dispositivi di partizione perché ' non hanno la " coda / scheduler " attributo.echo bfq > /sys/block/sda/queue/schedulercome root. (sudo non ha funzionato per me in Ubuntu 18.04) Questo dovrebbe renderlo immediatamente effettivo.