我们可以确定性地命令吗?

时间:2015-01-06 18:54:37

标签: bash time cpu-cycles

我们知道在bash中,time foo会告诉我们执行命令foo需要多长时间。但是有很多变化,取决于不相关的因素,包括当时机器上还有什么。看起来应该有一些确定性的方法来衡量程序运行的时间。也许是处理器周期数?管道阶段的数量?

有没有办法做到这一点,或者如果没有,至少可以获得更有意义的时间测量?

1 个答案:

答案 0 :(得分:4)

你偶然发现了一个比它看起来更难的问题。程序的性能绝对与运行它的机器的当前状态相关联。这包括但不限于:

  • 所有CPU缓存的内容。
  • 系统内存的当前内容,包括任何磁盘缓存。
  • 计算机上运行的任何其他进程及其当前使用的资源。
  • 操作系统关于运行程序的位置和时间的调度决策。
  • ......列表一直在继续。

如果您想要一个真正可重复的基准测试,您必须采取明确的步骤来控制上述所有内容。这意味着刷新缓存,消除其他程序的干扰,并控制作业的运行方式。无论如何,这不是一件容易的事。

好消息是,根据你所寻找的东西,你可能能够摆脱不那么严格的东西。如果您在常规工作负载上运行该作业并且它会在很长时间内生成结果,那么这可能就是您所需要的全部内容。