grep 명령의 시간을 정확하게 맞추는 방법은 무엇입니까?

grep 명령의 시간을 정확하게 맞추는 방법은 무엇입니까?

이 두 명령의 속도를 비교하고 싶습니다.

grep pattern1 files* 
grep pattern2 files* 

불행하게도 첫 번째 grep은 대부분의 파일*을 메모리 버퍼로 읽어 들이므로 두 번째 grep은 매우 빠르게 실행되지만 잘못된 이유가 있습니다.

Linux(Fedora 11)에 "뭔가 테스트 중이므로 디스크 읽기 캐싱을 중지하십시오."라고 알리는 방법은 무엇입니까?

답변1

"캐싱을 일시적으로 중지합니다"라고 쉽게 말할 수는 없을 것 같습니다. 하지만 당신이 할 수 있는 일은 각 실행 전에 캐시를 삭제하도록 시스템에 지시하는 것입니다.

루트 사용자로서:

sync; echo 3 > /proc/sys/vm/drop_caches

(이 내용은 커널 문서에 설명되어 있습니다.문서/sysctl/vm.txt, 이는 우리 중 일부처럼 값 1, 2 또는 3이 수행하는 작업을 항상 즉시 기억할 수 없는 경우 편리합니다. )

또는 물론 캐시를 채우고 캐시 성능을 비교해 보세요. (둘 다 유용한 숫자라고 생각합니다.)

답변2

이와 같은 타이밍을 잡을 때 일반적으로 먼저 실행하여 캐시를 채웁니다. 그런 다음 시간을 사용하여 명령을 실행하십시오. 이와 같은 것을 테스트할 때는 I/O 시간보다 CPU와 런타임에 더 주의해야 합니다.

그럼에도 불구하고 완전히 정확한 타이밍을 얻는 것은 어렵습니다. 입력 파일이 버퍼에 사용 가능한 메모리 크기를 초과하는 경우 버퍼 캐시를 통해 모든 파일을 반복하게 될 수 있습니다. 그렇지 않으면 버퍼 캐시의 모든 데이터에 액세스할 수도 있습니다. 실제 생활에서는 버퍼링된 데이터와 디스크에서 읽은 데이터가 혼합되어 있는 경우가 많습니다.

관련 정보