grep 명령을 정확하게 시간을 정하는 방법?


9

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

grep pattern1 files* 
grep pattern2 files* 

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

Linux에 알리는 방법 (Fedora 11) : "테스트중인 디스크 읽기 캐싱을 중지하십시오."


더 똑똑한 대답이있을 것입니다 ...하지만 디렉토리 구조를 복제 할 수 있으므로 동일한 파일을 다루지 않으며 캐싱 문제가 없습니다!
nico

1
제쳐두고 : Fedora 11은 2010 년 6 월에 단종되었습니다. 이제 업그레이드해야합니다. 다가오는 Fedora 15 릴리즈는 정말 멋져 보입니다. 또는 더 긴 수명에 걸쳐보다 안정적인 무언가가 필요하다면 (여전히 11

RH 7.3에서 그로 업그레이드하는 데 영원히 걸렸습니다! 업그레이드는 일을 망치고 나를 놀라게합니다.
barrycarter

2
캐싱을 해제하면 패턴 일치 속도가 아니라 드라이브 속도를 벤치마킹 할 수 있습니다. 다른 사람들이 제안했듯이 첫 번째 명령을 두 번 실행하십시오. 먼저 캐시를 프라이밍하고 두 번째는 벤치 마크를하십시오.
alex

나는 그것을 시도 할 것이지만, 나의 주요 문제는 디스크 속도입니다 ... grep을 실행할 때 하드 드라이브가 견고합니다. 흠, 그래, grep을 최적화하는 것이 전혀 도움이되지 않을 수도 있음을 의미 할 수 있습니다 ... 당기는 데이터의 양을 최적화해야합니다.
barrycarter

답변:


11

"캐싱을 일시적으로 중지"한다고 쉽게 말할 수 있다고 생각하지 않습니다. 그러나 할 수있는 일은 시스템이 각 실행 전에 캐시를 삭제하도록 지시하는 것입니다.

루트로 :

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

(이것은 Documentation / sysctl / vm.txt 의 커널 문서에 문서화되어 있습니다 . 이는 우리 중 일부와 마찬가지로 1, 2 또는 3의 값을 항상 기억하지 못하는 경우에 유용합니다.)

또는 캐시를 프라이밍하고 캐시 된 성능을 비교할 수도 있습니다. (둘 다 유용한 숫자라고 생각합니다.)


1
echo 1디스크 캐시가 아닌 페이지 캐시 만 삭제합니다.
jsbillings

@jsbillings — 그렇습니다. 결정된.
mattdm

믿을 수 없을
정도로 작은 질식 :

@ barrycarter : 정말? 응!
mattdm

3
@ barrycarter : 쉘에 -o noclobber를 설정했을 가능성이 있으므로>를 사용하여 기존 파일을 덮어 쓸 수 없습니다.
jsbillings

1

이와 같은 것을 타이밍 할 때 나는 보통 캐시를 프라이밍하기 위해 먼저 실행합니다. 그런 다음 시간을 사용하여 명령을 실행하십시오. 이와 같은 테스트에서는 CPU 및 경과 시간에 대해 더 많은 관심을 기울여야하고 I / O 시간에 대해서는 덜 걱정해야합니다.

어쨌든 완전히 정확한 타이밍을 얻는 것은 어렵습니다. 입력 파일이 버퍼에 사용 가능한 메모리 크기를 초과하면 버퍼 캐시를 통해 모든 파일을 순환시킬 수 있습니다. 그렇지 않으면 버퍼 캐시에서 모든 데이터에 액세스 할 수 있습니다. 실제로는 종종 버퍼링 된 데이터와 디스크에서 읽은 데이터가 혼합되어 있습니다.


IRL,이 명령은 가끔씩 만 실행되므로 파일 * 내용은 캐시되지 않습니다. 그 상황에서 grep을 빨리 실행하도록 최적화하려고합니다. files * 내용이 이미 캐시에 있으면
초 이내에 실행

2
@barrycarter. 파일이 캐시되지 않고 파일이 1 초 안에 실행되면 최적화 할 수있는 많은 기회를 찾지 못할 것이라고 생각합니다. 파일을 더 빠른 스토리지로 이동하면 최적화 될 수 있습니다.
BillThor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.