Hoe de BFQ-planner inschakelen en gebruiken?

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

  • Ik wil alleen opmerken: doe dit niet op ' op computers met Linux < 4.15 waarvan je verwacht dat ze in staat zijn om te suspend-to-ram; < 4.15 zal alle IO laten hangen bij hervatten omdat ze de veilige SCSI quiescing " fixes.
  • Mogelijk heb je ook problemen met kernel 4.14 waar het inschakelen van blk-mq een kernel lijkt te geven " oeps " helemaal aan het begin g van het laden van de kernel op sommige systemen (het ' is geen volledige paniek, alleen een nulverwijzing in de kernel). Je zou het kunnen missen als je ' er niet naar zoekt, maar als je ' paranoïde bent, kan dit een teken zijn dat er iets kapot is.
  • Ik ' stel voor om een iets nauwkeurigere udev-regel te gebruiken. Toen ik degene probeerde die hier wordt weergegeven, probeerde udev de planner in te stellen voor sommige apparaten waarvan de namen overeenkomen met dat patroon, maar zijn ' t SCSI-blokapparaten die de BFQ-planner kunnen gebruiken. De regel waarmee ik eindigde is deze: 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.
  • Ook belangrijk om op te merken is dat kernels 4.15-4.16 last hebben van een behoorlijk ernstige bug waarbij het updaten van het partitieschema van een schijf tijdens het gebruik van BFQ kan leiden tot een volledige I / O-lock-up. Zie: lkml.org/lkml/2017/12/1/80
  • U kunt ook 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.

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *