web-dev-qa-db-ja.com

これらのfio帯域幅の結果を説明するにはどうすればよいですか?

次の設定で新しいサーバーでいくつかのfioテストを実行しています。

  • 1x Samsung PM981a 512GB M.2 NVMeドライブ。
    • ルート上にZFSとともにインストールされたProxmox。
    • 1x VM 30GBのスペースが作成され、Debian 10がインストールされています。
  • 6x Intel P4510 2TB U.2 NVMeドライブが6x専用PCIe 4.0 x4レーンにOCuLinkで接続されています。
    • 単一のVMに直接接続されます。
    • VM(3xミラーストライプ))でRAID10として構成されています。
  • マザーボード/ CPU /メモリ:ASUS KRPA-U16/EPYC 7302P/8x32GB DDR4-3200

ディスクの評価は 最大3,200 MB /秒 順次読み取りです。理論的な観点から、最大帯域幅は19.2 GB /秒になるはずです。

ZFS RAIDでfionumjobs=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構成:

enter image description here

テスト中のiotop

enter image description here

4
Woodgnome

最初の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テストを再試行して、状況が変化するかどうかを確認することもできます。

2
shodanshok