在处理较大的文件时,人为地填充缓冲区缓存是否有益?
这是一个场景:需要逐行处理一个大文件。从概念上讲,很容易将任务并行化以使多核机器饱和。但是,由于需要首先读取行(在将它们循环分配给工作人员之前),因此整个过程会受到 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