假设我想对两个程序进行基准测试:foo.py和bar.py.
是几千次运行和相应的平均时间python foo.py和时间python bar.py是否足够用于分析和比较它们的速度?
编辑:此外,如果每个程序的执行时间为亚秒(假设它不是上面的那个),那么时间还可以使用吗?
解决方法:
对于运行超过一秒的基准测试,时间产生足够长的时间,否则执行过程所花费的时间与其运行时相比可能很大.
但是,在进行基准测试时,您应该注意上下文切换.也就是说,另一个进程可能正在使用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以便它不需要使用实时优先级的特权进程).
它还会使时间报告所有可用的统计数据,包括基准测试产生的上下文切换次数,通常为0,否则您可能希望重新运行基准测试.
perf stat -ddd比/usr/bin/time更具信息性,并显示诸如每周期指令,分支和缓存未命中等信息.
最好禁用CPU频率缩放和增强,以便在基准测试期间CPU频率保持不变,以获得一致的结果.