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/scheduler
come root. (sudo non ha funzionato per me in Ubuntu 18.04) Questo dovrebbe renderlo immediatamente effettivo.