[unix] grep 명령을 정확하게 시간을 정하는 방법?
이 두 명령의 속도를 비교하고 싶습니다.
grep pattern1 files*
grep pattern2 files*
불행하게도, 첫 번째 grep은 많은 파일 *을 메모리 버퍼로 읽어들이므로 두 번째 grep은 매우 빠르게 실행되지만 잘못된 이유로 실행됩니다.
Linux에 알리는 방법 (Fedora 11) : “테스트중인 디스크 읽기 캐싱을 중지하십시오.”
답변
“캐싱을 일시적으로 중지”한다고 쉽게 말할 수 있다고 생각하지 않습니다. 그러나 할 수있는 일은 시스템이 각 실행 전에 캐시를 삭제하도록 지시하는 것입니다.
루트로 :
sync; echo 3 > /proc/sys/vm/drop_caches
(이것은 Documentation / sysctl / vm.txt 의 커널 문서에 문서화되어 있습니다 . 이는 우리 중 일부와 마찬가지로 1, 2 또는 3의 값을 항상 기억하지 못하는 경우에 유용합니다.)
또는 캐시를 프라이밍하고 캐시 된 성능을 비교할 수도 있습니다. (둘 다 유용한 숫자라고 생각합니다.)
답변
이와 같은 것을 타이밍 할 때 나는 보통 캐시를 프라이밍하기 위해 먼저 실행합니다. 그런 다음 시간을 사용하여 명령을 실행하십시오. 이와 같은 테스트에서는 CPU 및 경과 시간에 대해 더 많은 관심을 기울여야하고 I / O 시간에 대해서는 덜 걱정해야합니다.
어쨌든 완전히 정확한 타이밍을 얻는 것은 어렵습니다. 입력 파일이 버퍼에 사용 가능한 메모리 크기를 초과하면 버퍼 캐시를 통해 모든 파일을 순환시킬 수 있습니다. 그렇지 않으면 버퍼 캐시에서 모든 데이터에 액세스 할 수 있습니다. 실제로는 종종 버퍼링 된 데이터와 디스크에서 읽은 데이터가 혼합되어 있습니다.