多次运行的平均运行时间
Posted
技术标签:
【中文标题】多次运行的平均运行时间【英文标题】:Mean running time over a number of runs 【发布时间】:2011-11-21 16:58:17 【问题描述】:我想报告一个脚本在运行后的平均运行时间(使用time command 计算),比如说,n 次。是否有我不知道的简单的bash
命令、脚本或系统实用程序可以让我这样做?
【问题讨论】:
superuser.com/questions/603897/… 【参考方案1】:这是一个有趣的问题so I took a few minute and wrote a script for it。下面是脚本的 light 版本,它接收一个文件,该文件具有运行time
命令的输出。 The full script 有更多选项,并直接接受命令以直接运行平均值。
代码:
#!/bin/bash
# calculate the mean average of wall clock time from multiple /usr/bin/time results.
file=$1
cnt=0
if [ $#file -lt 1 ]; then
echo "you must specify a file containing output of /usr/bin/time results"
exit 1
elif [ $#file -gt 1 ]; then
samples=(`grep --color=never real $file | awk 'print $2' | cut -dm -f2 | cut -ds -f1`)
for sample in `grep --color=never real $file | awk 'print $2' | cut -dm -f2 | cut -ds -f1`; do
cnt=$(echo $cnt+$sample | bc -l)
done
# Calculate the 'Mean' average (sum / samples).
mean_avg=$(echo $cnt/$#samples[@] | bc -l)
mean_avg=$(echo $mean_avg | cut -b1-6)
printf "\tSamples:\t%s \n\tMean Avg:\t%s\n\n" $#samples[@] $mean_avg
fi
示例(这里我将脚本命名为 timeit.sh
和 chmod 775 timeit.sh
和 chown jon timeit.sh
*):
[ 09:22 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 3
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 1
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 2
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 2
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 7
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 0.5
[ 09:23 jon@hozbox.com ~ ]$ ./timeit.sh times.log
Samples: 6
Mean Avg: 2.5833
[ 09:23 jon@hozbox.com ~ ]$ cat times.log
real 3.00
user 0.00
sys 0.00
real 1.00
user 0.00
sys 0.00
real 2.00
user 0.00
sys 0.00
real 2.00
user 0.00
sys 0.00
real 7.00
user 0.00
sys 0.00
real 0.50
user 0.00
sys 0.00
*chown
在这里不是必需的,但我忍不住! :)
man time
:
语法
time [option...] command [arg...]
选项
-o FILE --output=FILE
将资源使用统计信息写入 FILE。
-a --append
追加资源使用信息到输出文件 覆盖它。
-o FILE --output=FILE
将资源使用统计信息写入 FILE。默认情况下,这 覆盖文件,破坏文件之前的内容。
-p --portability
使用 POSIX 格式。
【讨论】:
我真的很喜欢这个。【参考方案2】:我在这里问过类似的问题:Average Execution Time。建议是使用 Dumbbench,这是一个 Perl 脚本,可以多次运行软件并打印出一些统计数据。
【讨论】:
【参考方案3】:没有一个命令可以做到这一点。您可以做的是将每次运行的时间附加到文件中,然后根据这些数字计算平均值。
【讨论】:
以上是关于多次运行的平均运行时间的主要内容,如果未能解决你的问题,请参考以下文章