Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.4.5. CFQ スケジューラーのチューニング

CFQ を使用するとプロセスはリアルタイム、ベストエフォート、アイドルの 3 種類いずれかのクラスに配置されます。リアルタイムのプロセスはすべてベストエフォートのプロセスより先にスケジュールされます。ベストエフォートのプロセスはすべてアイドルのプロセスより先にスケジュールされます。デフォルトではプロセスはベストエフォートのクラスに配置されます。プロセスのクラスを手作業で調整する場合は ionice コマンドを使って行います。
次のパラメーターを使用すると CFQ スケジューラーの動作をさらに調整することができます。パラメーターは /sys/block/devname/queue/iosched ディレクトリー配下にある指定ファイルでデバイスごとに設定を変更します。
back_seek_max
CFQ に後方シークを行わせる最長距離をキロバイトで指定します。デフォルト値は 16 KB です。後方シークは特にパフォーマンスを低下さるため、大きな値の使用は推奨していません。
back_seek_penalty
ディスクヘッドで前方または後方への移動を決定する際に後方シークに対して適用する乗数を指定します。デフォルト値は 2 です。ディスクヘッドの位置が 1024 KB でシステムに等距離の要求がある場合 (1008 KB と 1040 KB など)、back_seek_penalty が後方シークの距離に対して適用されディスクは前方に移動します。
fifo_expire_async
ミリ秒単位の長さで指定します。非同期 (バッファされた書き込み) の要求を処理せず放置する長さです。この時間を過ぎると非同期の処理待ち要求が処理リストに移動されます。デフォルト値は 250 ミリ秒です。
fifo_expire_sync
ミリ業単位の長さで指定します。同期 (読み取りまたは O_DIRECT 書き込み) の要求を処理せず放置する長さです。この時間を過ぎると非同期の処理待ち要求が処理リストに移動されます。デフォルト値は 125 ミリ秒です。
group_idle
このパラメーターはデフォルトでは 0 (無効) に設定されます。1 (有効) に設定すると cfq スケジューラーは制御グループ内で I/O を発行している最後のプロセスでアイドリングします。比例加重 I/O 制御グループを使用し、slice_idle0 に設定している (高速ストレージで) 場合に便利です。
group_isolation
このパラメーターはデフォルトでは 0 (無効) に設定されます。1 (有効) に設定するとグループ間をより強力に分離しますが、ランダムな作業負荷および連続した作業負荷の両方に対して公平性が適用されるため処理能力は低減されます。group_isolation を無効にすると (0 の設定) 公平性は連続した作業負荷にのみ適用されます。詳細は /usr/share/doc/kernel-doc-version/Documentation/cgroups/blkio-controller.txt にインストールされているドキュメントをご覧ください。
low_latency
このパラメーターはデフォルトでは 1 (有効) に設定されます。有効の場合、cfq はデバイスで I/O を発行している各プロセスごと最大 300  ミリ秒の待ち時間を与え処理能力より公平性を優先させます。0 (無効) に設定するとターゲットの待ち時間は無視され、各プロセスは完全なタイムスライスを受け取ります。
quantum
cfq がひとつのデバイスに一度に送信できる I/O 要求数を指定します。基本的にはキューの深さを制限します。デフォルト値は 8 です。使用するデバイス側はより深いキューに対応している可能性はありますが、quantum の値を上げると待ち時間も増えます。特に大量の連続する書き込み作業負荷がある場合は顕著です。
slice_async
非同期の I/O 要求を発行している各プロセスに割り当てるタイムスライスの長さを指定します (ミリ秒単位)。デフォルト値は 40 ミリ秒です。
slice_idle
次の要求を待つあいだ cfq にアイドリングを行わせる長さをミリ秒単位で指定します。デフォルト値は 0 (キューまたはサービスツリーレベルではアイドリングを行わない) です。デフォルト値を使用すると外付け RAID ストレージでの処理能力が最適となりますが、シーク動作の総数が増加するため RAID ではない内蔵ストレージの場合には処理能力が低下します。
slice_sync
同期 I/O 要求を発行している各プロセスに割り当てるタイムスライスの長さをしていします (ミリ秒単位)。デフォルト値は 100  ミリ秒です。

8.4.5.1. 高速ストレージの CFQ のチューニング

高速な外付けストレージアレイや SSD などの、シークによる影響をさほど受けないハードウェアの場合、cfq スケジューラーの使用は推奨しません。こうしたストレージで cfq を使用しなければならない場合は、次の設定ファイルを編集する必要があります。
  • /sys/block/devname/queue/iosched/slice_idle0 に設定します。
  • /sys/block/devname/queue/iosched/quantum64 に設定します。
  • /sys/block/devname/queue/iosched/group_idle1 に設定します。