버퍼 캐시를 수동으로 준비하시겠습니까?

버퍼 캐시를 수동으로 준비하시겠습니까?

더 큰 파일로 작업할 때 버퍼 캐시를 인위적으로 채우는 것이 유익합니까?

다음은 시나리오입니다. 대용량 파일을 한 줄씩 처리해야 합니다. 개념적으로 멀티 코어 머신을 포화시키기 위해 작업을 병렬화하는 것은 쉽습니다. 그러나 행을 먼저 읽어야 하기 때문에(루프의 작업자에게 배포되기 전에) 전체 프로세스가 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

관련 정보