多次运行的平均运行时间

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.shchmod 775 timeit.shchown 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】:

没有一个命令可以做到这一点。您可以做的是将每次运行的时间附加到文件中,然后根据这些数字计算平均值。

【讨论】:

以上是关于多次运行的平均运行时间的主要内容,如果未能解决你的问题,请参考以下文章

在包内多次运行收集表统计信息会导致性能问题

如何比较 MySQL 中两个函数的平均运行时间?

获取STM32代码运行时间的技巧

电脑的平均无故障运行时间是怎么测量的

uptime---系统总共运行时间和系统的平均负载

使用 Bash 计算程序的平均执行时间