1. ホーム
  2. linux

[解決済み] LinuxのI/Oスケジューラの選択

2023-07-03 22:12:03

質問

私は、/sys/block/[disk]/queue/scheduler に書き込むことによって、実行中のカーネル上の特定のデバイスの I/O スケジューラを変更することが可能であると仮定していることを読みました。 たとえば、私は私のシステム上で見ることができます。

anon@anon:~$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

は、デフォルトでは完全に公平なキューイング スケジューラであることを示しました。 私が疑問に思っているのは、4 つすべてのスケジューラをカスタムカーネルに含めることに意味があるのかどうかということです。 カーネルが適切なハードウェアに対して適切なスケジューラー、特にフラッシュ ベースのドライブには「noop」スケジューラー、従来のハード ドライブには他のスケジューラーを選択するほど賢くない限り、複数のスケジューラーをコンパイルすることにあまり意味はないように思われます。

このようなケースはあるのでしょうか?

どのように解決するのですか?

で説明されているように /usr/src/linux/Documentation/block/switching-sched.txt で説明されているように、特定のブロックデバイス上のI/Oスケジューラは実行時に変更することができます。新しいスケジューラーを使用する前に、以前のスケジューラーの要求がすべてフラッシュされるため、多少の待ち時間が発生するかもしれませんが、デバイスが多用されている間でも問題なく変更することが可能です。

# cat /sys/block/hda/queue/scheduler
noop deadline [cfq]
# echo anticipatory > /sys/block/hda/queue/scheduler
# cat /sys/block/hda/queue/scheduler
noop [deadline] cfq

理想を言えば、すべてのニーズを満たす単一のスケジューラが存在することでしょう。 それはまだ存在しないようです。 カーネルは、ワークロードに最適なスケジューラーを選択するための十分な知識を持っていないことが多いのです。

  • noop は、メモリでバックアップされたブロック デバイス (例: ラムディスク) や、I/O を再スケジュールすることがリソースの無駄となるその他の非回転メディア (フラッシュ) に対して、しばしば最適な選択となります。
  • deadline は、レイテンシーを厳しく制限しようとする軽量なスケジューラーです。
  • cfq システム全体の I/O 帯域幅の公平性を維持しようとします。

デフォルトは anticipatory であり、多くのチューニングがなされましたが、その後 2.6.33 (2010年初頭) で削除されました。 cfq はしばらく前にデフォルトになりました。その性能は妥当で、マルチユーザーシステム (そしてシングルユーザーデスクトップでさえ) にとって公平であることが良い目標だからです。 いくつかのシナリオでは、データベースがよく例として挙げられます。データベースはすでに独自のスケジューリングとアクセス パターンを持っている傾向があり、しばしば 最も 重要なサービスであることが多いからです (だから誰が公平性を気にするのでしょうか?)。 anticipatory はこれらのワークロードで最高のパフォーマンスを発揮するように調整可能であるという長い歴史があり、また deadline は非常に迅速にすべての要求を基礎となるデバイスに渡します。