【问题标题】:Can we time commands deterministically?我们可以确定地为命令计时吗?
【发布时间】:2015-03-04 12:11:36
【问题描述】:

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

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

【问题讨论】:

  • 我猜这是“真实”值(在时间命令的输出中)-或者你可以运行它 100 次并取那个“真实”.....值的平均值?
  • 不,你不能。很多因素增加了不确定性:其他进程的调度、上下文切换、I/O……如果在 Linux 上阅读 time(7)

标签: bash time cpu-cycles


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    相关资源
    最近更新 更多