BASH 및 사용자 정의 셸의 실행 시간 측정

BASH 및 사용자 정의 셸의 실행 시간 측정

나는 작업 제어 및 파이프/리디렉션 기능을 갖춘 간단한 쉘을 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
}

관련 정보