Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

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

8.4.3. 汎用のブロックデバイスチューニングパラメーター

ここで取り上げる汎用チューニングパラメーターは、/sys/block/sdX/queue/ ディレクトリーないで利用できます。リストされたチューニングパラメーターは I/O スケジューラーのチューニングと区別され、すべての I/O スケジューラーに適用できます。
add_random
いくつかの I/O イベントが /dev/random のエントロピープールに貢献しています。これらの貢献のオーバーヘッドが計測可能になる場合、このパラメーターを 0 に設定することができます。
iostats
デフォルト値は 1有効)です。iostats0 に設定すると、デバイスの I/O 統計の収集が無効になり、I/O パスでのオーバーヘッドが少なくなります。iostats0 に設定すると、特定の NVMe ソリッドステートストレージデバイスなど、非常に高性能なデバイスのパフォーマンスが若干向上する可能性があります。特定のストレージモデルに対して指定されていない場合は、iostats は有効のままにしておくことをお勧めします。
iostats を無効にすると、デバイスの I/O 統計は /proc/diskstats ファイルに表示され なくなります。/sys/diskstats の内容は、sar や iostats などの I/O ツールの監視用の I/O 情報の ソースです。したがって、デバイスの iostats パラメーターを無効にすると、デバイスは I/O 監視ツールの出力に表示されなくなります。
max_sectors_kb
I/O 要求の最大サイズを KB 単位で指定します。デフォルト値は 512 KB です。このパラメーターの最小値は、ストレージデバイスの論理ブロックサイズで決まります。このパラメーターの最大値は、max _hw_sectors_kb の値で決まります。
一部のソリッドステートディスクは、I/O リクエストが内部消去ブロックサイズよりも大きいとパフォーマンスが悪化します。システムにアタッチするソリッドステートディスクモデルがこれに該当するかを判断するには、ハードウェアのベンダーに確認し、ベンダーの推奨事項に従います。Red Hat では、max_sectors_kb を最適な I/O サイズと内部消去ブロックサイズの倍数にすることが推奨されます。ストレージデバイスがゼロの場合は、いずれかのパラメーターに logical_block_size の値を使用します。
nomerges
要求をマージは、ほとんどのワークロードで有用です。ただし、デバッグの目的では、マージを無効にすると便利です。デフォルトでは、nomerges パラメーターは 0 に設定されており、マージが可能になります。単純な 1 ヒットのマージを無効にするには、nomerges を 1 に設定します。すべてのタイプのマージを無効にするには、nomerges を 2 に設定します。
nr_requests
一度にキュー待ちさせることができる読み取りと書き込み要求の最大数を指定します。デフォルト値は 128 です。つまり、読み取りまたは書き込みの要求に対する次の処理をスリープ状態にするまでそれぞれ 128 個の読み取り要求と 128 個の書き込み要求をキュー待ちにすることができます。
遅延の影響を受けやすいアプリケーションの場合、ライトバック I/O が書き込み要求でデバイスキューを満杯にできないようにするため、このパラメーターの値を低くしてストレージのコマンドキューの深さを制限します。デバイスのキューが満杯になると I/O 動作を実行しようとしている他のプロセスはキューが使用できるようになるまでスリープ状態になります。要求はラウンドロビン方式で割り当てられ、1 つのプロセスが継続してキューのすべての領域を使用しないようにします。
I/O スケジューラー内の I/O 操作の最大数は nr_requests*2 です。記載どおりに、nr_requests は読み取りと書き込みとは別に適用されます。nr_requests は、I/O スケジューラー内の I/O 操作にのみ適用され、基礎となるデバイスにディスパッチされている I/O 操作には適用されません。そのため、デバイスに対する I/O 操作の最大未処理の上限は (nr_requests*2)+(queue_depth) で、queue _depth/sys/block/sdN/device/queue_depth (LUN キュー深度とも呼ばれる)になります。たとえば、未処理の I/O 操作の合計数は avgqu-sz 列の iostat の出力に表示されます。
optimal_io_size
このパラメーターで最適な I/O サイズを報告するストレージデバイスもあります。この値が報告される場合は、できるだけ報告された最適な I/O サイズに合わせその倍数の I/O をアプリケーションで発行させることを推奨しています。
read_ahead_kb
連続読み込み操作中にオペレーティングシステムが読み取ることができる最大キロバイト数を定義します。その結果、次のシーケンシャル読み取りに対し、必要となりそうな情報はカーネルページキャッシュ内にすでに存在するため、読み取りの I/O 操作が向上します。
read_ahead_kb の値を大きくすると、デバイスマッパーの利点が 頻繁に使用されます。マップする各デバイスの 128 KB は開始点に適していますが、read_ahead_kb の値を 4-8 MB まで増やすと、大型ファイルの連続読み込みが行われるアプリケーション環境でパフォーマンスが向上する可能性があります。
rotational
一部のソリッドステートディスクは、ソリッドステートのステータスを正しく公開せず、従来の回転ディスクとしてマウントされます。ご使用の SSD デバイスで、この値が自動的に 0 に設定されない場合は、この値を手作業で設定し、スケジューラーで不要なシーク時間短縮ロジックを無効にします。
rq_affinity
デフォルトでは I/O 要求を発行したプロセッサーとは異なるプロセッサーで I/O の完了を処理することができます。Set rq_affinity1 に設定してこの機能を無効にし、I/O 要求を発行したプロセッサーでのみ完了を実行します。これによりプロセッサーのデータキャッシングの効率性が改善されます。
scheduler
スケジューラーや特定ストレージデバイスのスケジューラー優先順位を設定するには、/sys/block/devname/queue/scheduler ファイルを編集します (devname は設定するデバイスの名前に置き換えます)。
# echo cfq > /sys/block/hda/queue/scheduler