Noopスケジューラ

Linux カーネルの簡略化された構造における I/O スケジューラの位置。

NOOPスケジューラは、 Linuxカーネル用の最もシンプルなI/Oスケジューラです。このスケジューラはJens Axboeによって開発されました。

概要

NOOPスケジューラは、すべての受信I/O要求を単純なFIFOキューに挿入し、要求のマージを実装します。このスケジューラは、ホストがキューに含まれるセクター番号に基づいて要求の順序変更を試みるべきではないと判断された場合に有用です。言い換えれば、スケジューラはホストが要求の効率的な順序変更方法を認識していないと想定します。

この状況が望ましい基本的な状況は (一般的に) 3 つあります。

  • I/O スケジューリングが I/O スタックの下位層で処理される場合。スケジューリングを処理する下位層の例としては、ブロックデバイス、インテリジェント RAID コントローラ、ネットワーク接続ストレージ、またはスイッチ型ストレージエリアネットワークを介してアクセスされるストレージサブシステムなどの外部接続コントローラが挙げられます。[ 1 ] I/O 要求は下位層で再スケジュールされる可能性があるため、ホストレベルで IOP を再シーケンスすると、下位層では元に戻される操作にホスト CPU 時間が消費され、生産性に悪影響を与えることなくレイテンシが増加し、スループットが低下します。
  • セクター位置の正確な詳細はホストシステムから隠されているためです。例えば、RAIDコントローラはスケジューリングを独自に実行しません。ホストにはリクエストの順序変更機能があり、RAIDコントローラにはそれがないにもかかわらず、ホストシステムにはリクエストを正確に順序変更してシーク時間を短縮するための可視性がありません。ホストはどのシーケンスが他のシーケンスよりも優れているかを判断する方法がないため、アクティブキューを最適に再構成することができず、(理論上)そのような詳細をよりよく認識しているデバイスにキューを渡す必要があります。
  • 読み取り/書き込みヘッドの移動は、並べ替えのオーバーヘッドを正当化するほどアプリケーションのパフォーマンスに影響を与えないためです。これは通常、フラッシュドライブやソリッドステートドライブ(SSD)などの非回転メディアに当てはまります。

ただし、上記のシナリオでは、NOOP が必ずしも推奨される I/O スケジューラであるとは限りません。パフォーマンス チューニングではよくあることですが、すべてのガイダンスは、観測された作業負荷パターンに基づく必要があります (単純な経験則を作成する能力を損なう)。使用可能な I/O 帯域幅をめぐって他のアプリケーションとの競合がある場合でも、他のスケジューラの方が、最も重要と思われるアプリケーションに帯域幅をより賢く割り当てることで、より良いパフォーマンスを生み出せる可能性があります。たとえば、LDAP ディレクトリ サーバーを実行する場合は、deadlineの読み取り優先順位とレイテンシ保証のメリットを享受できます。同時に、さまざまなアプリケーションを実行するデスクトップ システムのユーザーは、CFQの調整パラメータや、特定のアプリケーションの帯域幅を他のアプリケーションよりも優先させる機能 ( ionice ) にアクセスしたい場合があります。

アプリケーション間に競合がない場合、上記の3つのシナリオではスケジューラを選択してもほとんどメリットはありません。これは、あるワークロードの操作の優先順位を下げて、別のワークロードに追加の容量を割り当てることができないためです。言い換えれば、I/Oパスが飽和状態ではなく、すべてのワークロードの要求によってドライブヘッドの不当な移動(オペレーティングシステムが認識している)が発生しない場合、あるワークロードを優先するメリットによって、I/Oのスケジューリングに費やされるCPU時間が無駄になり、期待されるメリットが得られない可能性があります。

Linuxカーネルは、スケジューラに依存しない設定としてnomerges sysfsパラメータを公開しており、ブロック層のリクエストマージロジックを完全に無効化することも、より複雑なマージ試行に対してのみ無効化することも可能です。 [ 2 ] これにより、ほとんどのI/Oスケジューラのオーバーヘッドは、リクエストキュー内の隣接セクターを見つけてマージしようとする試みと関連しているため、NOOPスケジューラの必要性が軽減されます。しかし、ほとんどのI/Oワークロードは、SSDのような高速で低レイテンシのストレージであっても、一定レベルのリクエストマージから恩恵を受けます。[ 3 ] [ 4 ]

参照

参考文献

  1. ^ 「Red Hat Enterprise Linux 4および2.6カーネル向けI/Oスケジューラの選択」 Red Hat. 2007年8月27日時点のオリジナルよりアーカイブ。 2007年8月10日閲覧
  2. ^ "Documentation/block/queue-sysfs.txt" . Linuxカーネルドキュメント. kernel.org . 2014年12月1日. 2014年12月14日閲覧
  3. ^ 「6.4.3. Noop (Red Hat Enterprise Linux 6 ドキュメント)」 . Red Hat . 2014年10月8日. 2014年12月14日閲覧
  4. ^ Paul Querna (2014年8月15日). 「高I/Oインスタンスのフラッシュドライブをデータドライブとして構成する」 . Rackspace . 2014年12月15日閲覧