次の設定で新しいサーバーでいくつかのfio
テストを実行しています。
ディスクの評価は 最大3,200 MB /秒 順次読み取りです。理論的な観点から、最大帯域幅は19.2 GB /秒になるはずです。
ZFS RAIDでfio
をnumjobs=1
で実行すると、最大2,000〜3,000 MB /秒の範囲の結果が得られます(ZFSや他のオーバーヘッド、たとえば、いずれかのディスクに直接インストールされたWindowsでCrystal Disk Markを実行しているとき):
fio --name=Test --size=100G --bs=1M --iodepth=8 --numjobs=1 --rw=read --filename=fio.test
=>
Run status group 0 (all jobs):
READ: bw=2939MiB/s (3082MB/s), 2939MiB/s-2939MiB/s (3082MB/s-3082MB/s), io=100GiB (107GB), run=34840-34840msec
考えられるすべてが合理的であるようです。コアの1つが100%の負荷に置かれているため(一部はZFSプロセスに費やされるため)、CPU制限もある可能性があります。
numjobs
を8〜10に増やすと、少し奇妙になります。
fio --name=Test --size=100G --bs=1M --iodepth=8 --numjobs=10 --rw=read --filename=fio.test
=>
Run status group 0 (all jobs):
READ: bw=35.5GiB/s (38.1GB/s), 3631MiB/s-3631MiB/s (3808MB/s-3808MB/s), io=1000GiB (1074GB), run=28198-28199msec
38.1 GB /秒-理論上の最大帯域幅をはるかに上回ります。
ここの説明は正確には何ですか?
コメントの追加:
VM構成:
テスト中のiotop
:
最初のfio
(--numjobs=1
が付いたもの)は、任意の読み取り操作を順次実行します。ストライプの構成による利点はありませんが、先読み/プリフェッチをすばやく行うことはできません。iodepth
は非同期にのみ適用されますlibaio
エンジンを介して行われる読み取り。これにはO_DIRECT
(ZFSにはない)の真のサポートが必要です。プリフェッチウィンドウをデフォルトの8Mから64M(echo 67108864 > /sys/module/zfs/parameters/zfetch_max_distance
)に増やすことができます。もちろん、走行距離は異なる可能性があるため、これが他のワークロードを損なわないことを確認してください。
2番目のfio
(--numjobs=8
があるもの)は、おそらくARCキャッシュによって歪められています。確かに、dstat -d -f
を実行している別のターミナルを開くだけです。各ディスクの実際の転送速度が表示され、理論上の最大転送速度と確実に一致します。新しく起動したマシン(空のARCを使用)でfio
テストを再試行して、状況が変化するかどうかを確認することもできます。