パフォーマンスを向上させるために順次ディスク読み取り調整

パフォーマンスを向上させるために順次ディスク読み取り調整

ディスクから大容量ファイルを順番に読み込んでいるiostat間に出力を理解しようとしています。

  • ファイルサイズ: 10GB
  • 読み取りバッファ:4KB
  • 先読み (/sys/block/sda/queue/read_ahead_kb): 128KB

出力iostatは次のとおりです

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz await r_await w_await  svctm  %util
sda               0.00     0.00  833.00   14.00   103.88     0.05   251.30     6.07    5.69    2.33 205.71  1.18 100.00

I / O要求の平均サイズを計算すると、=(rMB / sをr / sで割ったもの)約128 KBです。これは先読み値です。これは、読み取りシステム呼び出しで4KBのバッファを指定しても、実際のディスクI / Oは先読み値に基づいて発生することを意味するようです。

先読み値を256KBに増やすと、iostat出力は次のようになります。

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    28.00  412.00   12.00   102.50     0.05   495.32    10.78   12.15    4.76  265.83   2.36 100.00

同様に、平均I / O要求サイズは256 KBであり、先読みと一致します。

これは先読み値を 512 KB に設定するまで続いており、先読み値を 1024 KB に増やした場合は持続しませんでした。 I / O要求の平均サイズはまだ512KBでした。 max_sectors_kb(I / O要求ごとの最大データ量)をデフォルト値の512 KBから1024 KBに増やすことは役立ちません。

これが起こる理由 - 理想的には、読み取りIOPSをできるだけ少なくし、I / O要求ごとに大量のデータ(要求あたり512KB以上)を読みたいと思います。また、すべてのケースで100%ディスク使用率を得ました。良いシーケンシャルスループットで、読み取りに対するディスク使用率を50〜60%に制限したいと思います。つまり、シーケンシャルリードI/Oの最適なアプリケーション/カーネル設定は何ですか?

答え1

max_sectors_kb設定によって制限されることがあります/dev/sda

cat /sys/block/sda/queue/max_sectors_kb

ほぼ確実に512を返します。

次のように1024に変更できます。

echo 1024 > /sys/block/sda/queue/max_sectors_kb

他の制限がないと仮定すると、表示されるIOサイズは1024 KBに増加する必要があります。

関連情報