同じファイルへの同時書き込みを実行すると、ディスクI / Oパフォーマンスが低下します。

同じファイルへの同時書き込みを実行すると、ディスクI / Oパフォーマンスが低下します。

複数のプロセスの同時ディスクI / Oをベンチマークしていますが、同じファイルまたは別のファイルに書き込むと非常に異なる結果が表示されます。私はO_DIRECTを使用しているので、この違いを予想していませんでした。

使用されたスクリプト:

#!/bin/sh
set -eu
nprocs=$1
for i in $(seq $nprocs)
do
    target=test_file$i
    [[ "${2:-}" == "same" ]] && target=test_file
    echo $(date) - Run $i/$nprocs $(dd if=/dev/zero of=$target bs=2k count=128000 oflag=direct 2>&1) &
done

結果:

# iostat while running: sh mkfile.sh 10
vg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.39    0.00    9.62   12.09    0.00   77.89

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00 11016.00     0.00 33409.50     6.07    81.36    0.12    0.00    0.12   0.09 100.00


# iostat while running: sh mkfile.sh 10 same
vg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.51    0.00    7.95    4.87    0.00   86.67

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00 7780.00     0.00 16362.00     4.21     0.75    0.10    0.00    0.10   0.10  74.90

違いは、W / S、11016.00(複数ファイル)、および7780.00(単一ファイル)で確認できます。 ddはO_DIRECTを使用しているため、同じ物理領域に書き込むことに関係なく、どのようなカーネルレベルロックもあるとは思わない。 avgqu-szは低く、%utilは100%ではないため、物理ロックを持つことはできません。 I/O 競合 1.

私はここで非常にマイナーなものを見逃しているに違いありません:)

IOPS比がはるかに低い理由をご存知ですか?

ベストアンサー1

おすすめ記事