web-dev-qa-db-ja.com

LinuxにI / Oスケジューラがない場合の意味

Ubuntuクラウドベースのイメージ14.04-1 LTSバージョンを実行している仮想マシンがいくつかあります。 IOさまざまなパフォーマンスIO上のスケジューラーVMで確認したので、/sys/block/<drive>/queue/schedulerゲストOSでIOスケジューラーを変更します。通常、cfqdeadline、またはnoopを選択する必要があります。しかし、私が見たのはnoneです。Canonicalが削除したということですか?クラウドベースのイメージのI/Oスケジューラまたはスケジューラnoneは、名前が変更されたnoopスケジューラですか?システムにI/Oスケジューラがない場合はどうなりますか?すべてのioリクエストは直接ホストに送信されました= FIFO注文?

光を当ててくれてありがとう!

8
Ha Son Hai

this Debian Wiki から:

低遅延IOスケジューラ

(この手順は、SATAの代わりにNVMeプロトコルを使用するSSDでは必要ありません。SSDは、従来のI/Oスケジューラをバイパスしてblk-mqモジュールの代わりに。)

デフォルトのI/Oスケジューラーはデータをキューに入れ、SSDには不要なHDDでのシークを最小限に抑えます。したがって、"deadline"バルクトランザクションが小さなトランザクションの速度を落とさないようにするだけのスケジューラー:sysfsutilsをインストールし、

echo "block/sdX/queue/scheduler = deadline" >> /etc/sysfs.conf

(SSDに合わせてsdXを調整)再起動または

echo deadline > /sys/block/sdX/queue/scheduler

したがって、答えは次のとおりです。nonenoopのエイリアスではありません。 noneは、「スケジューラーが使用されていない」ことを意味します。

カーネル> = 3.13ではnonenoopのエイリアスではなくなったようです。 blk-mq I/O framework が使用されているときに表示されます。 blk-mqには(現時点では)選択するスケジューラがまったくないため、これは古いスケジューラを完全にバイパスすることを意味します。

以前のカーネルでは、noneは実際にはnoopの不十分な文書化されたエイリアスです。詳細は here を参照してください。

16
shodanshok

Noneはnoopのエイリアスではありません。

使用中のスケジューラがないため、何も表示されません。 SATAの代わりにNVMeプロトコルを使用するSSDは、従来のI/Oスケジューラーをバイパスします。

3
Dan Quirk

ゲストVMには、ハイパーバイザーによって提供される仮想I/Oデバイスがあります。したがって、実際のI/Oデバイススケジューリングはハイパーバイザーカーネルによって実行され、ゲストはすべてのデバイスI/Oをスケジューリングせずに直接ハイパーバイザーに渡します。

2
Tero Kilkanen

https://wiki.ubuntu.com/Kernel/Reference/IOSchedulers

none(マルチキュー)マルチキューの何もしないI/Oスケジューラー。リクエストの並べ替えを行わず、オーバーヘッドを最小限に抑えます。 NVMEなどの高速ランダムI/Oデバイスに最適です。

1
Marcin