시간과 티를 사용하여 bash 명령 벤치마킹하기


1

80GB 이상의 간단한 텍스트 파일 데이터베이스가 들어있는 디렉토리가 있는데, 자주 grep해야 할 필요가 있습니다. 이런 이유로, 나는 GNU를 비교하기위한 몇 가지 테스트를 시도하고있다. grep 내가 말할 수있는 한, 현재 야생에서 가장 빠른 대안이 무엇인지 - ripgrep - 내 데이터로 어느 것이 가장 빨리 작동하는지 확인하십시오.

첫 번째 테스트는 세 가지로 구성됩니다. for 실행되는 루프 grep, rggrep -F 15GB 텍스트 파일에 두 번째 테스트는 데이터 전체에서 실행되는 일련의 동일한 명령이됩니다. 내 자신의 제한된 기간 사이에 일정한 사이클링을 한 후 bash 지식, 해결책 및 문제 해결 오류를 찾는 경우, 나는 첫 번째 테스트 (두 번째 테스트에서 다시 용도 변경)를 위해 다음을 함께 해킹했습니다.

for i in {1..15}; \
do (time LC_ALL=C grep -i "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 | 
tee -a "../grep Test 1.txt"; \
done; \
for i in {1..15}; \
do (time rg -i "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 |
tee -a "../ripgrep Test 1.txt"; \
done;
for i in {1..15}; \
do (time LC_ALL=C grep -Fi "ajndoandajskaskaksnaodnasnakdnaosnaond" "15gbfile.txt") 2>&1 |
tee -a "../grep -F Test 1.txt"; \
done;

못 생겼지 만 정확히 의도 한대로 작동합니다. 세 가지 모두를 실행합니다. for 한 번에 하나씩 반복합니다. 각 문자열은 절대로 발견되지 않을 긴 문자열에 대해 15 번 grepping하고, 그 다음 출력을 인쇄합니다. time 각각 grep 두 사람에게 STDOUT 및 파일.

그러나 벤치마킹을하고 있기 때문에이 코드가 POSIX / bash / Cygwin 시스템에서 사용 사례의 (상대적인) 속도를 정확하게 테스트하는 데 적합하며, 내가 훑어 보는 것이 아무것도 없다는 것을 확인하고 싶습니다. 내가 얻은 결과. 특히, 캐싱, 디스크 IO 및 기타 고려 사항과 같은 것들. 나는 더 견고하게 행동하도록 만드는 어떤 제안도 환영 할 것이다.


1
캐싱은 어떨까요? 15GB 파일의 일부는 첫 번째 루프가 두 번째 루프를 입력 한 후 메모리에 저장되어 두 번째 루프가 인위적으로 더 빨라질 수 있습니다. 이 도구를 사용하여 실행하는 것이 재미 있고 어떤 차이가 있는지 확인할 필요가 없습니다. tecmint.com/...
Paul

@ 폴 그게 내가 뛰던 이유의 대부분이야. grep 캐싱은 첫 번째 또는 두 번 실행시에만 시간차가 생길 것이라는 믿음으로 각 15 번. 그렇지 않은가요?
Hashim

2
이 벤치 마크는 해결하려는 문제와 분명히 일치하지 않습니다. 첫째, 80GB의 파일을 검색하는 경우 디스크의 일부를 읽어야합니다. grep과 ripgrep은 단순한 패턴에 대한 I / O 속도가 병목 현상을 일으킬 가능성이 거의 같기 때문에 거의 같은 속도로이 작업을 수행합니다. 둘째, ripgrep은 기본적으로 디렉토리를 동시에 크롤링합니다. grep -r 하지 않을 것이다. 이 할 수 있었다 단일 파일을 검색하여 검색 시간을 단축 할 수 있습니다.
BurntSushi5

@ BurntSushi5 당신이 개발자임을 공개 할 가치가 있습니다. ripgrep,하지만 당신의 요점을 참조하십시오. 게시물에서 언급했듯이, 이것은 단순히 내가 실행하고자하는 첫 번째 테스트입니다. 두 번째 테스트는 전체 디렉토리에서 명령을 실행하는 것입니다. 제 의도의 대부분은 단순히 코드 자체에 아무런 이상이 없었는지 확인하여 두 번째 테스트를 위해 용도 변경 될 수 있도록하는 것입니다.
Hashim

1
나는 심각하고 재현 가능한 벤치마킹을 위해 충분히 신뢰할 만하다는 것을 알고있는 유일한 두 가지 옵션을 제공했다고 생각합니다. 파일이 완전히 캐시되거나 완전히 캐시되지 않는다고 생각할 이유가 없습니다.
BurntSushi5

답변:


1

IMHO 테스트는 매우 다른 시간에 세 명령을 실행하기 때문에 편향되어 있습니다. grep, rgrep, grep -F 명령을 연속적으로 실행하는 단일 루프가 있어야하며 해당 순서를 임의로 만들 수 있다면 더 좋을 수도 있습니다.

반면에 성능은 모든 것이 아니며 특정 명령으로 전환하는 데 매우 중요한 성능 향상이 필요하며 편향된 벤치 마크에서도 훨씬 뛰어난 성능을 발휘할 수 있습니다.


또한 tee 명령은 아마도 grep
matzeri

첫 번째 단락에서 요점을 보았지만 캐싱의 이점을 제거하는 데 어떤 효과가 있습니까? 동일한 명령을 연속적으로 실행하려는 나의 초기 의도는 명령의 처음 몇 가지 인스턴스에 캐싱이 적용되므로 처음 몇 번의 실행을 무시할 수 있다는 믿음이었습니다. 또한 리눅스의 캐싱 / 디스크 IO 개념은 bash Cygwin에서 Windows 7을 기반으로 실행하고 있습니까?
Hashim

파일 캐싱은 "Linux 개념"이 아닙니다.
BurntSushi5

@ BurntSushi5 나는 그런 주장을 한 적이 없지만 두 OS에는 다른 구현 / 접근법이있을 가능성이 높습니다. bash Cygwin에서 실행하면 Linux 나 Windows를 사용하게됩니다.
Hashim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.