Linuxカーネルバージョン4.12をUbuntu 17.04にukuu(Ubuntu Kernel Update Utility https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility )を使用してインストールしました。
問題は、利用可能なI/Oスケジューラーを確認したところ、BFQもKyber I/Oスケジューラーも見つからないようです。
cat /sys/class/block/sda/queue/scheduler
> noop deadline [cfq]
では、このLinuxバージョンで新しいスケジューラの1つを使用するにはどうすればよいでしょうか。
私はUbuntuにはいませんが、Fedoraでやったことが役立つかもしれません。
BFQはblk-mq(マルチキューブロックIOキューイングメカニズム))スケジューラであるため、起動時にblk-mqを有効にし、/ etc/default/grubファイルを編集してscsi_mod.use_blk_mq=1
を追加する必要がありますあなたのGRUB_CMDLINE_LINUX
に、これは例として私の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"
その後、grubを更新する必要があります。 FedoraではSudo grub2-mkconfig -o /path/to/grub.cfg
を使用する必要があります。これは ブート方法によって異なります によって異なります。 Ubuntuでは、次のコマンドを実行するだけです。
Sudo update-grub
再起動し、これを取得した場合:
cat /sys/block/sda/queue/scheduler
[mq-deadline] none
おそらくあなたのカーネルはモジュールとしてBFQでコンパイルされました、そしてこれはKyberにも当てはまる可能性があります。
Sudo modprobe bfq
Sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] bfq none
bfq
を含む/etc/modules-load.d/bfq.conf
ファイルを追加することにより、ブート時に追加できます。
blk_mqを有効にすると、blk_mq以外のスケジューラを使用できなくなることに注意することが重要です。そのため、noop cfqとnon mqの期限が失われます
どうやらblk_mqスケジューリングシステムはgrubのエレベーターフラグをサポートしていないため、代わりにudevルールを使用できます。
存在しない場合は/etc/udev/rules.d/60-scheduler.rules
を作成し、追加します。
ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"
先に述べたように、 ここ 必要に応じて、属性ATTR{queue/rotational}
を使用して、udevルールで回転(HDD)デバイスと非回転(SSD)デバイスを区別できます。 LinuxCon EuropeでBFQ開発者のPaolo Valenteが、BFQはnoop
またはdeadline
スケジューラーよりも低レイテンシの保証という点でより良い選択である可能性があると指摘しました。 SSDの場合も同様です。
Paoloの比較: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be
それを保存し、再ロードしてudev rules
をトリガーします。
Sudo udevadm control --reload
Sudo udevadm trigger
素晴らしい拡張 RomuloPBenedettiの回答 :
UdevルールでPROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"
を使用して、bfqスケジューラが実際に特定のデバイスで使用可能かどうかをテストできます。これにより、実際にDRIVERS=="sd|sr"
が置き換えられ、scsi_mod.use_blk_mq=1
を忘れた場合は起動しません
トリビア:
PROGRAM
-プログラムを実行して、一致するかどうかを判断します。プログラムが正常に戻る場合、キーはtrueです。絶対パスが指定されていない場合、プログラムは/ lib/udevにあると予想されます。$sys
-sysfsマウントポイント(/sys
)。$devpath
-デバイスのdevpath(/ devices/pci/...)。