Come abilitare e utilizzare lo scheduler BFQ?

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

  • Voglio solo notare: don ' t farlo su computer con Linux < 4.15 che prevedi di essere in grado di sospendere-a-ram; < 4.15 bloccherà tutti gli IO al ripristino perché non hanno il " la disattivazione SCSI sicura " risolve i problemi.
  • Potresti anche avere problemi con il kernel 4.14 dove labilitazione di blk-mq sembra fornire un kernel " oops " proprio allinizio g di caricare il kernel su alcuni sistemi (' non è un panico completo, solo una dereferenziazione nulla allinterno del kernel). Potresti perderlo se ' non lo cerchi, ma se ' sei paranoico, potrebbe essere un segno che qualcosa è rotto.
  • V ' suggerisco di utilizzare una regola udev leggermente più accurata. Quando ho provato quello mostrato qui, udev ha provato a impostare lo scheduler per alcuni dispositivi i cui nomi corrispondono a quel pattern, ma non sono ' t dispositivi a blocchi SCSI che possono usare lo scheduler BFQ. La regola con cui sono finito è questa: 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.
  • Importante da notare è anche che i kernel 4.15-4.16 soffrono di un bug piuttosto grave in cui laggiornamento dello schema di partizione di ununità durante lutilizzo di BFQ può portare a un blocco I / O completo. Cfr .: lkml.org/lkml/2017/12/1/80
  • Puoi anche echo bfq > /sys/block/sda/queue/scheduler come root. (sudo non ha funzionato per me in Ubuntu 18.04) Questo dovrebbe renderlo immediatamente effettivo.

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *