我们知道,在 bash 中,time foo
会告诉我们命令 foo 需要多长时间才能执行。但是存在如此多的可变性,这取决于不相关的因素,包括当时机器上运行的其他内容。似乎应该有一些确定性的方法来测量程序运行需要多长时间。处理器周期数,也许?流水线级数?
有没有办法做到这一点,或者如果没有,至少可以获得更有意义的时间测量?
我们知道,在 bash 中,time foo
会告诉我们命令 foo 需要多长时间才能执行。但是存在如此多的可变性,这取决于不相关的因素,包括当时机器上运行的其他内容。似乎应该有一些确定性的方法来测量程序运行需要多长时间。处理器周期数,也许?流水线级数?
有没有办法做到这一点,或者如果没有,至少可以获得更有意义的时间测量?
你偶然发现了一个比看起来更难的问题。程序的性能与运行它的机器的当前状态绝对相关。这包括但不限于:
如果您想要一个真正可重复的基准,您必须采取明确的步骤来控制上述所有内容。这意味着刷新缓存,消除其他程序的干扰,并控制你的工作如何运行。无论如何,这都不是一件容易的事。
好消息是,根据您要寻找的内容,您可能能够摆脱不那么严格的东西。如果您在常规工作负载上运行该作业并在很长一段时间内产生结果,那么这可能就是您所需要的。