我正在执行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()