scons --profile + snakeviz
这个组合向我展示了瓶颈到底是什么。
--profile输出cProfile格式的二进制文件,即present in the stdlib。
snakeviz 是一个很棒的可视化工具,可以在 GUI 中快速查看该文件:
scons --profile f.prof
pip install -u snakeviz
snakeviz f.prof
输出如下所示:
您可以将鼠标悬停在每个框上以查看包含该函数的文件的完整路径。
更一般的 Python 上下文中的问题:Is there any simple way to benchmark python script?
--debug + ts -s
这并没有解决我的具体问题,但它通常可以给你一些想法:
time scons --debug=count,duplicate,explain,findlibs,includes,memoizer,memory,objects,prepare,presub,stacktrace,time |
ts -s | tee f
示例输出摘录显示了我在 2 到 10 秒之间存在巨大时间间隔的地方,这是我试图集中注意力的地方:
00:00:02 SConscript:/data/gem5/master3/build/ARM/sim/power/SConscript took 1.556 ms
00:00:02 dup: relinking variant 'build/ARM/sim/probe/SConscript' from 'src/sim/probe/SConscript'
00:00:02 Building build/ARM/sim/probe/SConscript with action:
00:00:02 UnlinkFunc(target, source, env)
00:00:02 Building build/ARM/sim/probe/SConscript with action:
00:00:02 LinkFunc(target, source, env)
00:00:02 SConscript:/data/gem5/master3/build/ARM/sim/probe/SConscript took 0.401 ms
00:00:10 SConscript:/data/gem5/master3/build/ARM/tests/opt/SConscript took 98.225 ms
00:00:10 SConscript:/data/gem5/master3/build/ARM/SConscript took 8885.387 ms
00:00:10 SConscript:/data/gem5/master3/SConstruct took 9409.641 ms
00:00:10 scons: done reading SConscript files.
00:00:10 scons: Building targets ...
在 scons 3.0.1、Ubuntu 18.04 中测试。
另请参阅