BFQスケジューラを有効にして使用する方法は?

BFQスケジューラを有効にして使用する方法は?

私はUkuu(Ubuntuカーネルアップデートユーティリティ)を使ってUbuntu 17.04にLinuxカーネルバージョン4.12をインストールしました。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つをどのように使用しますか?

答え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、カイバーも同様です。

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

/etc/modules-load.d/bfq.confinclude を追加するだけですbfq

blk_mqを有効にすると、blk_mq以外のスケジューラの使用が無効になり、noop cfqおよびmq以外の期限が失われます。

明らかに、blk_mqスケジューリングシステムはgrubのエレベーターフラグをサポートしておらず、代わりにudevルールを使用することができます。これの利点は、よりきめ細かい制御を提供することです。

/etc/udev/rules.d/60-scheduler.rules存在しない場合は、作成して追加します。

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

指摘したとおりここ必要に応じて、属性を使用して、udevルールから回転(HDD)デバイスと非回転(SSD)デバイスを区別できますATTR{queue/rotational}。 BFQ開発者Paolo Valenteは、LinuxCon Europeでは、BFQが低レイテンシ保証の観点から、noopまたはスケジューラよりも優れている可能性があることを指摘し、deadlineこれはSSDでの使用に最適な推奨事項でもあります。

パウロの比較:https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

保存して再ロードしてトリガしますudev rules

sudo udevadm control --reload
sudo udevadm trigger

答え2

偉大さを広げるロムルとしてベネデティが答えた。:

udevルールを使用して、bfqスケジューラが特定のデバイスで実際に利用可能かどうかをテストできますPROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"。これは効果的に置き換えられ、DRIVERS=="sd|sr"忘れた場合はトリガーされません。scsi_mod.use_blk_mq=1

面倒なこと:

  • PROGRAM- 一致するものがあるかどうかを確認するためにプログラムを実行します。プログラムが正常に返されると、このキーはtrueです。絶対パスが指定されていない場合、プログラムは/lib/udevにあると予想されます。
  • $sys- sysfsマウントポイント(/sys)。
  • $devpath- デバイスの devpath(/devices/pci/...)。

答え3

上記の提案を実装した結果をコミュニティと共有したかったのです。ロムロヴェネデティ

コマンドを使用するときにこれを行う必要があります。

nice -n 17 tar cf - . | ( cd ${there} ; nice -n 17 tar xvpf - )

(ルートデバイスの/ DB001_F5)を(別のデバイスの/ site / DB002_F5)に分割します。250GBの画像私のシステムは利用できません。。私は良い命令がこの問題を処理しなければならないという印象を受けました...しかし、実際はそうではありません!

実装後、アプリケーション、ワークスペース、またはカーソルの相互作用を切り替えると、非常に小さな遅延(1/2 - 1秒)が発生します。

実装前、遅延は、冗談じゃない、分単位で!マウスやスクロールボタンからすぐに反応を得ることはできず、これが「カタツムリのメール」の相互作用と反対の相互作用だとは思わない。

以前の転送の「調整」には約90分かかることも注目に値します。その後は48時間しかかかりませんでした。

29.23user 
902.53system 
47:39.63elapsed 
32%CPU 
(0avgtext+0avgdata 3160maxresident)k

気になる方は、待ち時間の短いカーネルバージョンを試してみましたが、インタラクティブな応答の優先順位の向上はありません。

マイデスクトップの設定 私のデスクトップはUbuntumate 20.04 LTS

Linux {myhost} 5.4.0-94-generic #106-Ubuntu SMP 
Thu Jan 6 23:58:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
4 GB RAM
Only HDDs

関連情報