나는 작업 제어 및 파이프/리디렉션 기능을 갖춘 간단한 쉘을 C로 작성했습니다. 이 셸의 실행 시간(실제, 사용자 및 시스템)을 BASH와 어떻게 비교합니까? 예를 들어 ls 명령의 실행 시간을 측정하려고 합니다. 문제는 실행 시간이 다양하다는 것입니다. ls 명령(벽 시간)은 BASH 내장 기능을 사용하여 측정한 약 0.002초입니다. 여러 실행을 측정하는 방법은 무엇입니까? 예를 들어 간단한 BASH 스크립트를 사용하여 여러 실행을 측정했습니다.
for i in {1..5000}
do
ls
done
내 쉘로 비슷한 작업을 수행하는 방법을 모르겠습니다. ls 명령을 5000번 구문 분석하고 실행하는 쉘 코드에 for 루프를 작성했지만 bash 스크립트의 for 루프는 아마도 훨씬 느릴 것이므로 비교할 방법이 없습니다.
답변1
이렇게 하면 두 번째 세분화가 제공되지만 적어도 ls
.
for i in {1..5000}
do
start=${SECONDS}
ls
end=${SECONDS}
echo that took $((end - start)) seconds
done
이 date
명령을 사용하여 에포크 이후의 나노초를 얻을 수 있습니다.
for i in {1..5000}
do
start=$(date +%s%N)
ls
end=$(date +%s%N)
echo that took $((end - start)) nanoseconds
done
답변2
무엇을 테스트하려는지 잘 모르겠지만 기본 접근 방식은 실제로 X번 실행한 다음 시간의 평균을 구해야 합니다. 여기에 게시한 답변을 테스트하는 데 사용하는 작은 쉘 함수가 있는데, 이는 귀하의 요구에 맞게 조정될 수 있습니다. 평균화의 기본 논리를 이해하고 이를 사용할 수 있어야 합니다.
timethis ()
{
max=$1;
shift;
for com in "$@";
do
printf 'COMMAND: %s\n' "$com";
c=0;
while [[ $c -lt $max ]]; do
let c++;
( time -p eval "$com" ) 2>&1 | grep --color -oP 'real.*?\K[\d\.]+';
done | awk -vm=$max '{k+=$1}END{print (k/m)}';
done
}