我正在执行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是否有一个?
我正在执行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是否有一个?
Answers:
它不完全是UNIX或GNU / Linux工具,但是您可以轻松地使用R软件环境进行统计计算。(不过,我找不到适合您任务的任何内容。)
编辑我怎么会怀疑这一点,当然还有一个基准包R:rbenchmark。它显然包装了system.time(),您也可以直接使用。  或看看这,一个简单的秒表功能对。  另请参见“执行系统命令” @Rosetta代码(否则,system("command")。)
Edit2我刚刚在右侧“相关”列中看到了“在脚本中测量时间”这个问题,也可以使用它,例如,花费时间,进行for循环(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
os.system(),会导致每个命令调用/创建shell的开销。可能更好地使用subprocess.call()