AL2 の I/O スケジューラ - Amazon Linux 2

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AL2 の I/O スケジューラ

I/O スケジューラは、I/O リクエストをソートおよびマージし、処理される順序を決定する Linux オペレーティングシステムの一部です。

I/O スケジューラは、シーク時間が長くなる可能性があり、コロケーションされた要求をマージするのが最適である磁気ハードドライブなどのデバイスにとって特に有益です。I/O スケジューラは、ソリッドステートデバイスや仮想化環境ではあまり影響しません。これは、ソリッドステートデバイスの場合、シーケンシャルアクセスとランダムアクセスが異なることがなく、仮想化環境ではホストが独自のスケジューリング層を提供するためです。

このトピックでは、Amazon Linux I/O スケジューラについて説明します。他の Linux ディストリビューションで使用される I/O スケジューラの詳細については、それぞれのドキュメントを参照してください。

サポートされているスケジューラ

Amazon Linux では、次の I/O スケジューラがサポートされています。

  • deadline期限日 I/O スケジューラは I/O リクエストをソートし、最も効率的な順序で処理します。これにより、各 I/O リクエストの開始時間が保証されます。また、長い間保留中であった I/O リクエストの優先度も高くなります。

  • cfq完全公平キュー(CFQ) I/O スケジューラは、プロセス間で I/O リソースを公平に割り当てようとします。I/O リクエストをソートし、プロセスごとのキューに挿入します。

  • noopオペレーションなし (noop) I/O スケジューラは、すべての I/O リクエストを FIFO キューに挿入し、それらを単一のリクエストにマージします。このスケジューラは、リクエストの並べ替えを行いません。

デフォルトスケジューラ

[オペレーションなし (noop)] は Amazon Linux のデフォルトの I/O スケジューラです。このスケジューラは、次の理由で使用されます。

  • 多くのインスタンスタイプは、基盤となるホストがインスタンスのスケジュールを実行する仮想化デバイスを使用します。

  • ソリッドステートデバイスは、I/O スケジューラの利点の影響が少ない多くのインスタンスタイプで使用されます。

  • これは侵襲性の低い I/O スケジューラであり、必要に応じてカスタマイズできます。

スケジューラを変更する

I/O スケジューラを変更すると、スケジューラによって一定時間内に完了する I/O リクエストが増減するかどうかに基づいて、パフォーマンスが向上または低下することがあります。これは、ワークロード、使用されているインスタンスタイプの生成、アクセスされるデバイスのタイプに大きく依存します。使用する I/O スケジューラを変更する場合は、iotop などのツールを使用し、I/O パフォーマンスを測定し、その変更がユースケースにとって有益かどうかを判断することをお勧めします。

デバイスの I/O スケジューラは、nvme0n1 を例にした次のコマンドで確認できます。インスタンスの /sys/block に表示されているデバイスを使って、次のコマンドの nvme0n1 を置き換えます。

$ cat /sys/block/nvme0n1/queue/scheduler

デバイスの I/O スケジューラを設定するには、次のコマンドを使用します。

$ echo cfq|deadline|noop > /sys/block/nvme0n1/queue/scheduler

例えば、xvda デバイスの I/O スケジューラを noop から cfq に設定するには、次のコマンドを使用します。

$ echo cfq > /sys/block/xvda/queue/scheduler