1

我们知道,在 bash 中,time foo会告诉我们命令 foo 需要多长时间才能执行。但是存在如此多的可变性,这取决于不相关的因素,包括当时机器上运行的其他内容。似乎应该有一些确定性的方法来测量程序运行需要多长时间。处理器周期数,也许?流水线级数?

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

4

1 回答 1

4

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

  • 所有 CPU 缓存的内容。
  • 系统内存的当前内容,包括任何磁盘缓存。
  • 机器上运行的任何其他进程以及它们当前正在使用的资源。
  • 操作系统做出的关于何时何地运行程序的调度决策。
  • ......名单还在继续。

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

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

于 2015-01-06T19:13:49.727 回答