Jak włączyć i używać harmonogramu BFQ?

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

  • Chcę tylko zauważyć: nie ' nie rób tego na komputerach z systemem Linux < 4.15, którego spodziewasz się w stanie zawiesić do pamięci RAM; < 4.15 zawiesi wszystkie operacje we / wy przy wznowieniu, ponieważ brakuje " bezpieczne wygaszanie SCSI " poprawki.
  • Możesz również mieć problemy z jądrem 4.14, gdzie włączenie blk-mq wydaje się dawać jądru " oops " na samym początku g ładowania jądra w niektórych systemach (to ' to nie panika typu full stop, tylko zerowa dereferencja wewnątrz jądra). Możesz go przeoczyć, jeśli ' go nie szukasz, ale jeśli ' znowu masz paranoję, może to oznaczać, że coś jest zepsute.
  • Ja ' d sugeruję użycie nieco dokładniejszej reguły udev. Kiedy wypróbowałem to pokazane tutaj, udev próbował ustawić harmonogram dla niektórych urządzeń, których nazwy pasują do tego wzorca, ale nie są ' t urządzeniami blokowymi SCSI, które mogą używać harmonogramu BFQ. Zasada, z którą się skończyłem, jest następująca: 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.
  • Należy również zauważyć, że jądra 4.15-4.16 cierpią z powodu dość poważnego błędu, w którym aktualizacja schematu partycji dysku podczas korzystania z BFQ może prowadzą do całkowitego zablokowania we / wy. Por .: lkml.org/lkml/2017/12/1/80
  • Możesz także 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ć.

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *