시간 명령 평균을내는 방법? 위해 명령을

나는 time내 명령의 일부를 보내고. 이제 측정을 평균화하기 위해 명령을 지정된 횟수만큼 실행하고 시간을 정하고 계산 된 평균 및 표준 편차로 결과를 얻습니다. 결과는 다음과 같습니다.

avgtime -n 100 my_command

real    0m5.388s stdev 0m0.068s
user    0m5.380s stdev 0m0.067s
sys     0m0.004s stdev 0m0.000s

이를위한 UNIX 도구가 있습니까? GNU / Linux에 하나가 있습니까?



답변

파이썬이있는 모든 시스템에서 사용할 수있는 timeit 모듈을 사용해 볼 수 있습니다.

$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop


답변

정확히 UNIX 또는 GNU / Linux 도구는 아니지만 R 소프트웨어 환경을 사용하여 통계 계산 에 편안하게 사용할 수 있습니다 . ( 하지만 귀하의 작업에 대해 더 구체적인 것을 찾을 수는 없습니다 .)

편집 나는 그것을 의심 할 수 방법에 대한 벤치 마크 패키지가 물론있다 R: rbenchmark. 그것은 system.time()당신이 직접 사용할 수도있는 것으로 보입니다 . 또는 간단한 스톱워치 기능 쌍을 살펴보십시오. 또한 참조 @Rosetta 코드 “시스템 명령 실행” (또는하지, 그건 system("command").)

Edit2 방금 오른쪽 “관련”열에서 ” 스크립트 내 시간 측정”이라는 질문을 보았습니다. 시간 이 걸리거나, 루프를 반복하고 ( N시간), 시간을 다시 계산하고, 시간 범위를 계산하고, 나눈 값을 사용할 수도 있습니다. N. (더 쉽게 시도 time ( for-loop )하고 출력을 구문 분석하고 나누십시오 N).


답변

R평균, 표준 편차 및 기타 흥미로운 값을 빠르게 계산하는 데 사용할 수 있습니다 .

예를 들어 GNU 시간을 사용하여 몇 가지 런타임 측정 값을 CSV 파일에 쓸 수 있습니다.

function measure
{
  f=$1; shift
  n=$2; shift
  echo wall,user,sys,rss > "$f"
  for i in $(seq $n); do
    /usr/bin/time --output "$f" --append --format '%e,%U,%S,%M' "$@" >/dev/null
  done
}

그런 다음 R과 같이 다음과 같이 값을 생성 할 수 있습니다.

Rscript --vanilla -e "b=read.csv(file='$f');summary(b);sapply(b, sd);"

나는 R 출력을 약간 인쇄 하는 작은 벤치 마크 스크립트 를 만들었습니다 .

$ benchmark.sh 100 ./some_prog arg1 arg2
n=100 | min    | Q1     | med    | mean   | Q3     | max    | std
wall  | 0.0400 | 0.0400 | 0.0500 | 0.0471 | 0.0500 | 0.0800 | 0.00624
user  | 0.0400 | 0.0400 | 0.0400 | 0.0426 | 0.0400 | 0.0700 | 0.00562
sys   | 0      | 0      | 0      | 0      | 0      | 0      | 0.00000
rss   | 2608   | 2657   | 2704   | 2728   | 2764   | 2920   | 95.06524


답변

옵션 1- sqlite :

명령 및 시간 열이있는 간단한 테이블을 만들고 적절한 집계 계산으로 봅니다. 타이밍 후에 테이블에 추가 하십시오.

장점 : 솔루션 2와 비교하여 테이블을 정의하는 것이 더 간단합니다.

단점 : 데이터 보존에 대한 관리가 필요합니다.

옵션 2- rrdtool :

rrd 데이터베이스 파일, 데이터 정의 및 집계 함수를 정의하십시오. 타이밍 후으로 데이터베이스를 공급하십시오 rrdtool update ....

장점 :로 그래프를 쉽게 생성 할 수 있습니다 rrdtool graph .... 데이터 보존 문제가 없습니다 (라운드 로빈 데이터베이스).

단점 : 간단한 SQL 테이블 / 뷰에 비해 rrd 데이터베이스를 정의하기가 조금 더 어렵다


답변

Hyperfine 은 또 다른 옵션입니다.

샘플 사용법 :

hyperfine --warmup 3 'my_command'

관련 질문을 참조하십시오 .


답변