Hur aktiverar och använder jag BFQ-schemaläggaren?

Jag har just installerat Linux-kärnversion 4.12 på Ubuntu 17.04 med ukuu (Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).

Saken är att när jag kontrollerar tillgängliga I / O-schemaläggare kan jag inte tycka hitta BFQ eller Kyber I / O schemaläggare:

cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq] 

Så hur använder jag en av de nya schemaläggarna i denna Linux-version?

Svar

Jag är inte i Ubuntu, men vad jag gjorde i Fedora kan hjälpa dig.

BFQ är en blk-mq (Multi-Queue Block IO Queuing Mechanism) schemaläggare, så du måste aktivera blk-mq vid starttid, redigera din / etc / default / grub-fil och lägga till scsi_mod.use_blk_mq=1 till din GRUB_CMDLINE_LINUX, detta är min grub-fil, som ett exempel:

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" 

Därefter måste du uppdatera din grub. På Fedora måste vi använda sudo grub2-mkconfig -o /path/to/grub.cfg, vilket varierar beroende på startmetoden . På Ubuntu kan du helt enkelt köra:

sudo update-grub 

Starta om, och om du får det här:

cat /sys/block/sda/queue/scheduler [mq-deadline] none 

Förmodligen kompilerades din kärna med BFQ som en modul , och detta kan vara fallet även för Kyber.

sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none 

Du kan lägga till det vid starttid genom att lägga till en /etc/modules-load.d/bfq.conf -fil som innehåller bfq.

Det är viktigt att notera att om du aktiverar blk_mq blir det omöjligt att använda schemaläggare som inte är blk_mq, så att du förlorar noop cfq och non mq deadline

Tydligen kan blk_mq-schemaläggningssystem inte stödja hissflaggor i grub, udev-regler kan istället användas, med en bonus att erbjuda en mer kornig kontroll.

Skapa /etc/udev/rules.d/60-scheduler.rules om det inte fanns och lägg till:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq" 

Som påpekat här om det behövs kan du skilja mellan rotation l (hårddiskar) och icke-rotationsenheter (SSD) i udev regler med attributet ATTR{queue/rotational}. Var medveten om att Paolo Valente, BFQ-utvecklare, i LinuxCon Europe pekade på att BFQ kan vara ett bättre val än noop eller deadline schemaläggare i termer av garantier med låg latens, vad är ett bra råd att använda det även för SSD-enheter.

Paolos jämförelse: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Spara det och ladda om och utlösa udev rules:

sudo udevadm control --reload sudo udevadm trigger 

Kommentarer

  • Jag vill bara notera: don ' t gör detta på datorer med Linux < 4.15 som du förväntar dig att kunna avbryta-till-ram; < 4.15 kommer att hänga all IO på CV eftersom de saknar " säkra SCSI-frågor " korrigeringar.
  • Du kan också ha problem med kärnan 4.14 där att aktivera blk-mq verkar ge en kärna " oops " precis vid början g för att ladda kärnan på vissa system (det ' är inte en fullstoppspanik, bara en nollförklaring inuti kärnan). Du kanske missar det om du ' inte letar efter det men om du ' är paranoid kan det vara ett tecken på att något är trasigt.
  • Jag ' föreslår att du använder en något mer exakt udev-regel. När jag försökte den som visas här försökte udev ställa in schemaläggaren för vissa enheter vars namn matchar det mönstret, men är inte ' t SCSI-blockenheter som kan använda BFQ-schemaläggaren. Regeln jag slutade med är denna: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq" Det undviker mönstermatchning mot enhetsnamn, vilket gör matchningen mer exakt. ' matchar inte partitionsenheter eftersom de inte ' t har " kö / schemaläggare " -attribut.
  • Det är också viktigt att notera att kärnor 4.15-4.16 lider av ett ganska allvarligt fel där uppdatering av partitionsschemat för en enhet medan du använder BFQ kan leda till en fullständig I / O-låsning. Jfr .: lkml.org/lkml/2017/12/1/80
  • Du kan också echo bfq > /sys/block/sda/queue/scheduler som rot. (sudo fungerade inte för mig i Ubuntu 18.04) Detta ska göra det effektivt omedelbart.

Svar

Till utöka bra RomuloPBenedetti svar :

Du kan testa om bfq-schemaläggaren faktiskt är tillgänglig på en viss enhet med PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler"" i udev-regeln.Detta kommer effektivt att ersätta DRIVERS=="sd|sr" och bara inte aktivera om man glömde scsi_mod.use_blk_mq=1

Trivia:

  • PROGRAM – Kör ett program för att avgöra om det finns en matchning; nyckeln är sant om programmet återvänder framgångsrikt; Om ingen absolut sökväg ges förväntas programmet leva i / lib / udev.
  • $sys – Sysfs-monteringspunkten (/sys).
  • $devpath – Devpath of the device (/ devices / pci / …).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *