Właśnie zainstalowałem jądro Linuksa w wersji 4.12 na Ubuntu 17.04 za pomocą ukuu (narzędzie do aktualizacji jądra Ubuntu https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ).
Rzecz w tym, że kiedy sprawdzam dostępne programy planujące I / O, nie mogę znaleźć BFQ ani Kyber I / O planista:
cat /sys/class/block/sda/queue/scheduler > noop deadline [cfq]
Jak więc używać jednego z nowych harmonogramów w tej wersji Linuksa?
Odpowiedź
Nie jestem w Ubuntu, ale to, co zrobiłem w Fedorze, może ci pomóc.
BFQ to blk-mq (Multi-Queue Block IO Queuing Mechanism), więc musisz włączyć blk-mq podczas uruchamiania, edytować plik / etc / default / grub i dodać scsi_mod.use_blk_mq=1
do GRUB_CMDLINE_LINUX
, na przykład to jest mój plik GRUB:
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"
Następnie musisz zaktualizować swój grub. W Fedorze musimy użyć sudo grub2-mkconfig -o /path/to/grub.cfg
, co różni się w zależności od metody ładowania . W Ubuntu możesz po prostu uruchomić:
sudo update-grub
Zrestartuj, a jeśli to otrzymasz:
cat /sys/block/sda/queue/scheduler [mq-deadline] none
Prawdopodobnie twoje jądro zostało skompilowane z BFQ jako modułem i może tak być również w przypadku Kyber.
sudo modprobe bfq sudo cat /sys/block/sda/queue/scheduler [mq-deadline] bfq none
Możesz dodać go podczas uruchamiania, dodając plik /etc/modules-load.d/bfq.conf
zawierający bfq
.
Ważne jest, aby pamiętać, że włączenie blk_mq uniemożliwia korzystanie z harmonogramów innych niż blk_mq, więc stracisz noop cfq i non mq deadline
Najwyraźniej system planowania blk_mq nie obsługuje flag windy w grub. Zamiast tego można użyć reguł udev, z dodatkową zaletą oferowania bardziej szczegółowej kontroli.
Utwórz /etc/udev/rules.d/60-scheduler.rules
, jeśli nie istnieje, i dodaj:
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
Jak wskazano tutaj w razie potrzeby możesz rozróżnić rotacjęa l (dyski twarde) i urządzenia nieobrotowe (SSD) w regułach udev przy użyciu atrybutu ATTR{queue/rotational}
. Należy pamiętać, że Paolo Valente, programista BFQ, wskazał w LinuxCon Europe, że BFQ może być lepszym wyborem niż noop
lub deadline
harmonogramy pod względem małych opóźnień, co sprawia, że warto używać go również w przypadku dysków SSD.
Porównanie Paolo: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
Zapisz go, załaduj ponownie i uruchom udev rules
:
sudo udevadm control --reload sudo udevadm trigger
Komentarze
Odpowiedź
Do rozszerz świetną odpowiedź RomuloPBenedetti :
Możesz sprawdzić, czy harmonogram bfq jest rzeczywiście dostępny na danym urządzeniu, używając PROGRAM=="/bin/grep -E -q "(^|[[:space:]])bfq($|[[:space:]])" "$sys$devpath/queue/scheduler""
w regule udev.To skutecznie zastąpi DRIVERS=="sd|sr"
i po prostu nie uruchomi się, jeśli zapomni się scsi_mod.use_blk_mq=1
Ciekawostki:
-
PROGRAM
– Wykonaj program, aby określić, czy istnieje dopasowanie; klucz jest prawdziwy, jeśli program zwraca pomyślnie; Jeśli nie podano ścieżki bezwzględnej, program powinien znajdować się w / lib / udev. -
$sys
– Punkt montowania sysfs (/sys
). -
$devpath
– ścieżka dev urządzenia (/ devices / pci / …).
ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"
Unika dopasowywania wzorców do nazw urządzeń, dzięki czemu dopasowanie jest dokładniejsze. Wygrał ' nie pasujące do urządzeń z partycjami, ponieważ nie ' nie mają " kolejki / Scheduler " atrybut.echo bfq > /sys/block/sda/queue/scheduler
jako root. (sudo nie działało dla mnie w Ubuntu 18.04) To powinno od razu zacząć działać.