我们可以确定地计时命令吗?

Can we time commands deterministically?

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

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

您遇到了一个比看上去(难得多)的问题。程序的性能绝对与其所在机器的当前状态相关运行ning。这包括但不限于:

  • 所有 CPU 个缓存的内容。
  • 系统内存的当前内容,包括任何磁盘缓存。
  • 机器上 运行 的任何其他进程及其当前正在使用的资源。
  • OS 关于何时何地 运行 您的计划的调度决定。
  • ...列表还在继续。

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

好消息是,根据您要查找的内容,您或许可以选择不那么严格的内容。如果您 运行 这份工作是您的常规工作量,并且它会在很长一段时间内产生结果,那么这可能就是您所需要的。