26.6. 汎用ブロックデバイスのチューニングパラメーター
ここにリストされている一般的なチューニングパラメーターは、/sys/block/sdX/queue/ ディレクトリーにあります。
以下のチューニングパラメーターは、I/O スケジューラーチューニングとは別のパラメーターで、全 I/O スケジューラーに適用されます。
add_random-
一部の I/O イベントは、
/dev/randomのエントロピープールに貢献します。これらの貢献のオーバーヘッドが測定できるレベルになった場合には、このパラメーターを0に設定してください。 iostatsデフォルトでは、
iostatsは有効で、デフォルト値は1です。iostats を0に設定すると、デバイスの I/O 統計情報の収集が無効になります。これにより、I/O パスにおけるわずかなオーバーヘッドが削減されます。iostats を0に設定すると、特定の不揮発性メモリーエクスプレス (NVMe) ストレージデバイスなどの高性能デバイスのパフォーマンスが向上する可能性があります。ベンダーが特定のストレージモデルに対して別途指定しない限り、iostats を有効にしておくことが望ましいです。iostatsを無効にすると、デバイスの I/O 統計が/proc/diskstatsファイルからなくなります。I/O 情報は、/sys/diskstatsファイルの内容をソースとしており、sarやiostatsなどの I/O ツールの監視に使用します。したがって、デバイスのiostatsパラメーターを無効にすると、I/O 監視ツールの出力には表示されなくなります。max_sectors_kbI/O 要求の最大サイズを KB 単位で指定します。デフォルト値は
512KB です。このパラメーターの最小値は、ストレージデバイスの論理ブロックサイズで決まります。このパラメーターの最大値は、max_hw_sectors_kbの値で決まります。max_sectors_kb は、常に最適な I/O サイズと内部消去ブロックサイズの倍数でなければなりません。0 が指定されているか、ストレージデバイスによる指定がない場合には、どちらかのパラメーターのlogical_block_sizeの値を使用します。nomerges-
要求をマージは、ほとんどのワークロードで有用です。ただし、デバッグの目的では、マージを無効にすると便利です。デフォルトでは、
nomergesパラメーターは0に設定されており、マージが有効です。単純なワンヒットマージを無効にするには、nomerges を1に設定します。すべてのタイプのマージを無効にするには、nomerges を2に設定します。 nr_requests-
キューに配置可能な最大 I/O 数です。現在の I/O スケジューラーが
noneの場合は、この数値を減らすことができますが、それ以外の場合は数字の増減が可能です。 optimal_io_size- このパラメーターで最適な I/O サイズを報告するストレージデバイスもあります。この値が報告された場合、アプリケーションは可能な限り、最適な I/O サイズに合わせて、かつその倍数となるように I/O を発行します。
read_ahead_kb連続読み込み操作中にオペレーティングシステムが読み取ることができる最大キロバイト数を定義します。その結果、次のシーケンシャル読み取りに必要な情報は、すでにカーネルページキャッシュ内に存在している。これにより、読み取り I/O パフォーマンスが向上します。
read_ahead_kbの値を大きくすると、デバイスマッパーは効果を得られます。マッピングするデバイスごとに128KBという容量は、良い出発点となるでしょう。大きなファイルを順次読み込む場合、read_ahead_kb の値をリクエストキューのディスクのmax_sectors_kbまで増やすとパフォーマンスが向上する可能性があります。rotational-
一部のソリッドステートディスクは、ソリッドステートのステータスを正しく公開せず、従来の回転ディスクとしてマウントされます。スケジューラーで不要なシーク時間短縮ロジックを無効にするには、
rotationalの値を0に手動で設定します。 rq_affinity-
rq_affinityのデフォルト値は1です。これは、発行した CPU コアと同じ CPU グループにある CPU コア 1 つで I/O 操作を完了します。I/O 要求を発行したプロセッサーでのみ I/O 操作を完了するには、rq_affinityを2に設定します。上記の 2 つの機能を無効にするには、0に設定します。 scheduler-
ストレージデバイスのスケジューラーまたはスケジューラーの優先順位を設定するには、
/sys/block/devname/queue/schedulerを編集します。devname を、設定したいデバイス名に置き換えてください。