一尘不染

UNIX的“时间”命令对于基准测试是否足够准确?[关闭]

linux

假设我想对两个程序进行基准测试:foo.py和bar.py。

有一对夫妇一千运行和各自的平均值time python foo.pytime python bar.py充足的足够分析和比较他们的速度?

编辑: 此外,如果每个程序的执行时间都不到一秒(假设不是以上所述),则可以time使用吗?


阅读 329

收藏
2020-06-02

共1个答案

一尘不染

time对于运行一秒钟的基准测试,它可以产生足够好的时间,否则,exec()与运行时间相比,该过程花费的时间可能会很大。

但是,在进行基准测试时,应注意上下文切换。也就是说,另一个进程可能正在使用CPU,因此与基准测试竞争CPU并增加了其运行时间。为了避免与其他进程争用,您应该运行如下基准:

sudo chrt -f 99 /usr/bin/time --verbose <benchmark>

要么

sudo chrt -f 99 perf stat -ddd <benchmark>

sudo chrt -f 99以优先级99在FIFO实时类中运行基准,这使您的进程成为最高优先级的进程,并避免了上下文切换(您可以进行更改,/etc/security/limits.conf以便不需要特权进程即可使用实时优先级)。

它还可以time报告所有可用的统计信息,包括基准测试发生的上下文切换次数,通常应为0,否则您可能需要重新运行基准测试。

perf stat -ddd比提供更多信息,/usr/bin/time并显示诸如每周期指令,分支和高速缓存未命中等信息。

最好禁用CPU频率缩放和增强功能,以使CPU频率在基准测试期间保持恒定,以获得一致的结果。

2020-06-02