程序带Profiling运行正常,无Profiling时运行缓慢,求排查方案
问题:无Profiling编译的Haskell程序性能异常缓慢,Profiling模式反而更快
执行耗时现象
- 使用
stack build编译后运行耗时约9秒 - 使用
stack build --profile编译后运行耗时约5秒
我预期无Profiling模式的执行耗时应低于1秒,因此Profiling模式下的耗时是合理的,无Profiling模式的耗时异常缓慢。
更多细节
- 程序功能:读取类关系代数DSL,应用一系列基于规则的转换后输出SQL翻译。解析使用
megaparsec,I/O基于String且数据量约150KB,可排除I/O为性能瓶颈。转换涉及对ADT的递归重写规则,部分场景使用ugly-memo加速递归重写。 - 开发环境:stack 2.9.1搭配LTS 18.28、GHC 8.10.7(已升级至LTS 20.11、GHC 9.2.5,问题仍存在)
- Cabal文件配置:
ghc-options: -O2 -Wall -fno-warn-unused-do-bind -fno-warn-missing-signatures -fno-warn-name-shadowing -fno-warn-orphans ghc-prof-options: -O2 -fprof-auto "-with-rtsopts=-p -V0.0001 -hc -s"
- 上述配置未做改动,但此前从未出现该问题。
- 已尝试添加
-fno-state-hack编译,无改善。 - 不同优化等级测试:
-O1编译后耗时与-O2相近,-O0编译后耗时显著增加(符合预期)。 - Profiling信息未发现问题根源,仅无Profiling模式下出现性能异常。
我的问题
由于代码库较大,无法确定问题所在的具体代码片段,因此我的问题并非“问题在哪”,而是:在Profiling工具无效的情况下,我该如何进一步定位问题根源?
内容的提问来源于stack exchange,提问作者swingbit
相关产品推荐
相关产品推荐

