Ik heb zojuist Linux-kernelversie 4.12 op Ubuntu 17.04 geïnstalleerd met ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).
Het punt is dat als ik de beschikbare I / O-planners controleer, ik de BFQ noch de Kyber I / O scheduler:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq]
Dus hoe gebruik je een van de nieuwe schedulers in deze Linux-versie?
Antwoord
Ik “ben niet in Ubuntu, maar wat ik deed in Fedora kan je helpen.
BFQ is een blk-mq (Multi-Queue Block IO Queuing Mechanism) scheduler, dus je moet blk-mq inschakelen tijdens het opstarten, je / etc / default / grub-bestand bewerken en scsi_mod.use_blk_mq=1
toevoegen aan je GRUB_CMDLINE_LINUX
, dit is mijn grub-bestand, bijvoorbeeld:
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"
Daarna moet je je grub updaten. Op Fedora moeten we sudo grub2-mkconfig -o /path/to/grub.cfg
gebruiken, die varieert afhankelijk van de opstartmethode . Op Ubuntu kun je eenvoudig het volgende uitvoeren:
sudo update-grub
Herstart, en als je dit krijgt:
cat /sys/block/sda/queue/scheduler [mq-deadline] none
Waarschijnlijk is je kernel gecompileerd met BFQ als module , en dit kan ook het geval zijn voor Kyber.
sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none
U kunt het tijdens het opstarten toevoegen door een /etc/modules-load.d/bfq.conf
-bestand toe te voegen met bfq
.
Het is belangrijk op te merken dat het inschakelen van blk_mq turn het onmogelijk is om niet blk_mq schedulers te gebruiken, dus je verliest noop cfq en de niet mq deadline
Blijkbaar ondersteunt het blk_mq planningssysteem geen liftvlaggen in grub, udev-regels kunnen in plaats daarvan worden gebruikt, met als bonus dat ze een meer korrelige controle bieden.
Maak /etc/udev/rules.d/60-scheduler.rules
aan als het nog niet bestond en voeg toe:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Zoals gezegd hier indien nodig kunt u onderscheid maken tussen rotatiea l (HDDs) en niet-roterende (SSDs) apparaten in udev-regels met behulp van het kenmerk ATTR{queue/rotational}
. Houd er rekening mee dat Paolo Valente, BFQ-ontwikkelaar, in LinuxCon Europe wees dat BFQ een betere keuze kan zijn dan de noop
of deadline
schedulers in termen van garanties met lage latentie, wat een goed advies is om het ook voor SSDs te gebruiken.
Paolo “s vergelijking: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Sla het op, en herlaad en activeer udev rules
:
sudo udevadm control --reload sudo udevadm trigger
Reacties
Antwoord
Aan breid geweldig uit RomuloPBenedetti antwoord :
Je kunt testen of bfq scheduler daadwerkelijk beschikbaar is op een bepaald apparaat door in udev-regel.Dit zal effectief DRIVERS=="sd|sr"
vervangen en gewoon niet afgaan als men scsi_mod.use_blk_mq=1
Trivia:
-
PROGRAM
– Voer een programma uit om te bepalen of er een overeenkomst is; de sleutel is waar als het programma succesvol terugkeert; Als er geen absoluut pad is opgegeven, wordt verwacht dat het programma in / lib / udev leeft. -
$sys
– Het sysfs-koppelpunt (/sys
). -
$devpath
– Het devpad van het apparaat (/ devices / pci / …).
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"
Het vermijdt patroonovereenkomst met namen van apparaten, wat de overeenkomst nauwkeuriger maakt. Het zal ' niet overeenkomen met partitie-apparaten omdat ze niet ' de " wachtrij / scheduler " attribuut.echo bfq > /sys/block/sda/queue/scheduler
als root. (sudo werkte niet voor mij in Ubuntu 18.04) Dit zou het onmiddellijk effectief moeten maken.