バッファキャッシュを手動で準備しますか?

バッファキャッシュを手動で準備しますか?

大きなファイルで作業するときにバッファキャッシュを人為的に埋めるのは有益ですか?

以下はシナリオです。大容量ファイルを1行ずつ処理する必要があります。概念的には、マルチコアマシンを飽和させるためにタスクを並列化するのは簡単です。ただし、最初に行を読み取る必要があるため(ループ内のワーカーに配布される前に)、プロセス全体がIOバインドされているため、遅くなります。

実際の処理が発生したときに、より高速な読み出し時間を得るために、ファイルの全部または一部を事前にバッファキャッシュに読み込むのが合理的ですか?


アップデート:少し書きましたフロントエンドreadaheadシステムコールに。後でいくつかのベンチマークを追加しようとしています...

ベストアンサー1

フルファイルでキャッシュを埋めるには:

cat big.file >/dev/null

ファイルの一部としてキャッシュを埋めるには:このコメント:

time dd if=big.file of=/dev/null bs=1024k count=XXX skip=YYY

2.5Gファイルの例:

$ time rarara big.file 0 2459650481
real    0m13.803s

$ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

$ time dd if=big.file of=/dev/null bs=4096 count=600501 skip=0
real    0m14.394s

おすすめ記事