web-dev-qa-db-ja.com

ファイルを読み取るときのfioに最適なブロックサイズ

To pre-warm ext4 EBSボリューム私は次のようにfioを使用しています:

fio --name <filename> --filename <filename> --rw read --direct 1 --ioengine libaio --bs <X>k

そして、私は最適なブロックサイズがどうあるべきかを理解しようとしています。 'stat'してファイルのブロックサイズを取得できることは知っていますが、それをfioで使用すると、ファイルサイズがブロックサイズよりも小さい場合にエラーがスローされます。

オプションとして、デフォルトでstatで指定されたブロックサイズを使用し、ファイルサイズがそれよりも小さい場合は、最も近い「標準」番号を取得します。つまり、サイズが4k未満の場合は、ブロックサイズを1024に設定します。

適切なブロックサイズを設定する最良の方法は何ですか?

[〜#〜]編集[〜#〜]:スナップショットから10TBのgp2ボリュームを復元しています。数百万のファイルがあります-それらのほとんどは小さなファイルですが、別の良い部分は50MB-30GBのファイルで構成されており、これらのファイルはすべて、できるだけ速く読み取るために「準備ができている」必要があります。各ファイルに対してfioを実行するスクリプトがあり、それぞれのブロックサイズを動的に調整するのに最適な方法を理解しようとしています。

1
XCore

ネットワークの待ち時間を隠すために、適度に大きなブロックサイズを使用する必要があります。 Amazonが推奨する1MBのブロックサイズは私には良いようです。

この特定のワークロードでは、ddfioと同じかそれよりも速いと思います。ただし、ボリュームの読み取り(および再水和)には、より高速な方法を実験して使用する必要がありました。

最後に、statが2つのI/Oサイズ値を返すことを考慮してください。

  • 最小値。これは、デバイスが読み取り/書き込みする最小値IOサイズです。
  • 最適、これはr/m/wの動作を回避して良好なパフォーマンスを得るための最小IOサイズ)

これは、IO最適サイズよりも大きいと遅くなることを意味するのではなく、サイズを大きくすると実際にIOパフォーマンスがわずかに向上する可能性があります。

1
shodanshok