测量某些函数调用花费多少时间的 LLVM 传递

LLVM pass that measures how much time certain function calls take

我的想法是在这些调用之前和之后插入一个函数,该函数测量花费的时间并收集数据。我正在按照这个示例 https://github.com/sampsyo/llvm-pass-skeleton/tree/rtlib 在单独的 C 文件中编写该函数。这是我的问题:

1- 外部函数是否必须在 C 中? 2- 是否存在执行 same/similar 工作的现有项目? 3- 内置或不内置 LLVM 的源代码会有所不同吗?

感谢您的帮助! :)

(这是基于我开发检测工具的经验,Contech)。

  1. 外部函数只需要能够链接到项目中即可。我发现用 C 编写检测函数最简单,但您可能更喜欢其他语言。请注意,其他语言可能遵循不同的命名/调用约定。
  2. Contech 和 Harmony 都有一些功能可以做到这一点。 Contech特别计时并记录了同步功能的成本。
  3. 我已经成功 运行 Contech 使用 pre-installed LLVM 二进制文件以及从源代码构建它。

检测的基本思想是在进行函数调用之前收集开始时间。在 return 之后,您可以将此开始时间传递给后续的检测例程。根据这些事件的频率,可能会建议检测将记录存储在缓冲区中,甚至将处理传递给单独的线程。