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

Are a couple thousand runs and the respective averages of time python foo.py and time python bar.py adequate enough for profiling and comparing their speed?


Edit: Additionally, if the execution of each program was sub-second (assume it wasn't for the above), would time still be okay to use?

推荐答案

time为运行超过1秒的基准测试生成了足够好的时间,否则与运行时相比,创建一个进程所需的时间可能会很长.

然而,在进行基准测试时,你应该注意上下文切换.也就是说,另一个进程可能正在使用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频率zoom 和提升,以便在基准测试期间CPU频率保持不变,以获得一致的结果.

Linux相关问答推荐

Linux-如何区分目录中名称相同但扩展名不同的所有文件

从另一个文件中的大文件中查找行的最快方法

如何从 2 个文件中获取内容并使用 shell 脚本将该内容附加到新文件中

如何在守护进程中使用 popen() 和 pclose() 获取通过管道执行的 shell 命令的正确退出代码?

sig_atomic_t 实际上是如何工作的?

如何使用 sed debug调试正则表达式?

如何安装脚本以从命令行的任何位置运行?

tmux:挂起不加载,不响应任何选项命令

具体来说,fork() 如何处理 Linux 中 malloc() 动态分配的内存?

从 Linux 到 Windows 交叉编译 C++ 应用程序的手册?

XML 编辑/查看软件

适用于 Linux 和 Mac 的 HTTP 调试代理

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

如何将文件从 Vagrant 机器复制到 localhost

为什么 XGrabKey 会生成额外的聚焦和聚焦事件?

何时使用管道与何时使用共享内存

如何设置errno值?

readelf vs. objdump:为什么都需要

具有所有内核的 Gzip

如何在 docker 容器中运行 cron 作业(job)