【问题标题】:kcov vs lcov vs raw performance?kcov vs lcov vs 原始性能?
【发布时间】:2018-02-21 01:37:38
【问题描述】:

谁能给我一些关于在以下条件下运行的代码的相对性能的信息,

  1. 刚刚编译
  2. --coverage编译
  3. kcov下运行

如果我集成了gcovkcov 之类的代码覆盖工具,我是否需要两倍的时间来运行我的测试套件?

【问题讨论】:

    标签: code-coverage gcov lcov kcov


    【解决方案1】:

    我的经验如下,但请注意,实际结果可能在很大程度上取决于您的代码。

    • 使用已编译的“--coverage”运行速度大约是刚编译代码的一半。

    • 使用 kcov 运行比仅编译代码慢很多 (x6 - x10) 倍。

    所以我正在做的是:

    • 对于大量运行或我知道需要一些时间的东西,请使用“--coverage”,然后使用 gcovr/lcov
    • 要一次性运行较短的可执行文件,请使用 kcov。

    【讨论】:

    • 6 倍开销? kcov 做了什么让它这么贵?
    • 6 次是一个很大的性能损失。但我看到了以下问题。 github.com/SimonKagstrom/kcov/issues/159
    • 有趣。下次我处理这个问题时,可能会回来再试一次 kcov。
    • 等等...所以 kcov 是一个适用于二进制文件的覆盖工具?这就解释了开销。此类工具要么使用断点陷阱(与断点替换的指令相比,开销很大),要么使用大量的代码补丁,这些补丁会跳出、保存 regs、设置覆盖标志、恢复寄存器、执行 jmp 指令替换的操作并跳回,这很容易是替换指令开销的 6 倍。这就是人们使用源代码检测工具进行覆盖的原因。 (我构建了这样的工具;它们有大约 15-30% 的开销。请参阅我的简历)。
    猜你喜欢
    • 2011-11-17
    • 2013-08-18
    • 1970-01-01
    • 2013-08-25
    • 2021-02-27
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多