大きなファイルで作業するときにバッファキャッシュを人為的に埋めるのは有益ですか?
以下はシナリオです。大容量ファイルを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