正确测量基准测试的执行时间

正确测量基准测试的执行时间

我希望这是提出这个问题的正确地方。

我想使用一些测试实例对程序进行基准测试。我主要对程序执行所花费的 CPU 时间感兴趣,为此,我找到了可以time给我提供实际时间、用户时间和系统时间的命令。由于我对 Linux 还很陌生,我不确定应该选择哪一个。对我来说,用户和系统似乎是我最好的选择,但我不太确定应该选择哪一个。将它们加起来得到总 CPU 秒数是否有意义,或者在我的应用程序中用户是否最有意义?

任何帮助都值得感激!

答案1

time默认情况下,系统上有两个命令:

  • bashshell 关键字在
    运行 时会调用它time,可以使用 获得有关它的帮助help time。如果要调整其输出,请阅读TIMEFORMAT中的变量man bash
  • 二进制文件/usr/bin/time
    如果您需要它,您需要用它的完整路径来调用它,您可以通过以下方式获取有关它的帮助man time

二进制/usr/bin/time文件带有一个很好的-f, --format选项,可让您选择其输出中的信息。 提到的手册页在 下有完整的说明符列表FORMATTING THE OUTPUT,以下只是一些可能与您相关的建议:

该进程的平均总内存使用量(数据+堆栈+文本),以千字节为单位。
年代系统代表进程(在内核模式下)使用的总 CPU 秒数(以秒为单位)。
进程直接使用的 CPU 秒总数(在用户模式下),以秒为单位。

如果SU在您的案例中很重要,并且您希望将两者放在不同的行上,那么您的命令行可能如下所示:

/usr/bin/time -f "%S\n%U" /path/to/program

由于和SU适用于bashtime因此可以理解为:

TIMEFORMAT=$'%S\n%U' && time /path/to/program

值得注意的是,bash关键字能够输出毫秒,而二进制只能输出厘秒。关键字也可能更快,因为不需要调用外部程序。

有关时间主题的概述,我建议阅读man 7 time

相关内容