既存のファイルを順番に上書きすると、新しいファイルを書き込むよりもはるかに遅くなる可能性があることがわかりました。例:
mkdir del
cd del
fio --name=seqwrite --rw=write --ioengine=sync --bs=128KiB --size=10GiB --fsync=10
echo "<- fio doesn't remove its temporary file, thus, compare with: "
fio --name=seqwrite --rw=write --ioengine=sync --bs=128KiB --size=10GiB --fsync=10
2回目の呼び出しでは、パフォーマンスが約3倍低下する可能性があります。
理由は何ですか?
または、以前に実行せずに同じ効果を表示する--overwrite=1
ために追加することもできます。また、非カバレッジテストを繰り返すときは、以前の一時ファイルをすべて削除することを忘れないでください。fio
fio
ハードウェアRAIDコントローラ(バッテリ対応の書き込みキャッシュを含む)を使用してxfsとext4でそれらをテストしたところ、両方のファイルシステムで同様の効果が確認されました。つまり、新しいファイルを書き込むときの速度は約200〜260 MB / sですが、既存のファイルを上書きするときは速度が約70 MB / sにすぎません。
bonnie++
オンラインで検索したときに、主に「書き換えられた」テストを含むレポートが見つかりました。また、これらのレポートは、通常、書き換えが遅いことを示しています。
答え1
私はこれが断片化と解析のためだと思います。ファイルを含むセクタを解析して順番に上書きする必要がありますが、新しいファイルを作成すると連続したセクタブロックを割り当てることができます。
答え2
上書き中にキャッシュを削除すると問題が発生する可能性があります。走れば
echo 3 > /proc/sys/vm/drop_caches
上書きする前にrootで作業することは改善されますか?