grep은 검색 속도를 높이기 위해 캐시를 사용합니까?


35

grep동일한 쿼리 (및 다른 쿼리이지만 동일한 파일에서)에 대한 후속 실행이 첫 번째 실행보다 훨씬 빠릅니다 (큰 파일을 검색 할 때 그 효과가 쉽게 나타납니다).

이것은 grep이 검색에 사용되는 구조의 일종의 캐싱을 사용하지만 인터넷에서 참조를 찾을 수 없음을 나타냅니다.

grep후속 검색에서 결과를 더 빨리 반환 할 수있는 메커니즘은 무엇입니까 ?

답변:


59

grep은 아니지만 파일 시스템 자체는 최근에 읽은 데이터를 캐시하기 때문에 grep이 디스크 대신 메모리에서 효과적으로 검색하기 때문에 나중에 실행 속도가 빨라집니다.


2
동의합니다. 파일을 처음 grep하면 파일 시스템 코드가 파일을 디스크에서 캐시로로드합니다. 잠시 후 다시 grep하면 아직 캐시에서 만료 될 시간이 없습니다. 파일 시스템 캐시를 수동으로 플러시하는 방법이 있는지 확인한 다음 이전과 이후를 비교하십시오.
Shadur

3
@Shadur — 방법이 있습니다. unix.stackexchange.com/questions/8398/…
mattdm

3
실질적인 차이는 없지만 파일 시스템이 아닌 커널 캐시입니다.
pboin

@ pboin 좋아, 나는 작은 지름길을했다. 물론 파일 시스템 자체를 디스크가 아닌 캐싱하는 파일 시스템을 처리하는 것은 커널의 일부입니다. 건전하지만 사실입니다. :)
PaulRein

19

Linux 및 * NIX 시스템은 파일 시스템 (VFS를 통해 추출)과 사용자 레벨 프로세스 사이에있는 다양한 캐시를 사용합니다. 그래서 grep이 아니며 캐싱을 수행하는 파일 시스템이 아닙니다-운영 체제입니다.

grep 성능을 담당하는 캐시는 VFS 버퍼 캐시입니다. 다른 캐시는 inode 및 디렉토리 용이지만 여기에서는 작동하지 않습니다.

자세한 정보는 Linux 문서 프로젝트 : 9.2 가상 파일 시스템 http://tldp.org/LDP/tlk/fs/filesystem.html을 참조하십시오.


5
재귀 grep을 수행하는 경우 inode 및 dentry 캐시는 눈에 띄는 차이를 만듭니다. 테스트에서 /usr/include모든 캐시가 삭제 된 상태 에서 grep 내 시스템에서 ~ 16.4 초가 걸렸습니다. 캐시 된 모든 것, 약 0.3 초. 버퍼 캐시를 보유하는 페이지 캐시 만 삭제하면 ~ 14.3 초가 걸립니다. 페이지 캐시를 그대로두고 dentry / inode 캐시를 삭제하면 약 12 ​​초입니다.
mattdm

@ mattdm, 그거 흥미 롭습니다. 캐시를 어떻게 삭제 했습니까?
JRW


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.