linux - linux perf 是否使用 kprobe 对每个内核函数进行详细测量细分?
问题描述
当我们启用 perf调用图记录(例如 perf record -g)时,perf 工具能够对调用路径上的每个小函数进行详细的测量分解,无论它是内核函数还是用户函数。
我想知道 perf 如何能够为内核函数实现这一点。我的猜测是 perf 利用kprobe
在每个内核函数调用时都有一个回调。像这样的东西:
- 调用 foo()
- 陷阱到核心 kprobe 层
- kprobe 回调到 perf 处理程序,它设置 PMC
- 运行 foo()
- foo() 的 ret
- 再次陷入核心 kprobe 层
- kprobe 回调到 perf 处理程序,读取 PMC
- 返回给调用者
这个对吗?还是 Linux 实际上使用了其他魔法?谢谢你。
解决方案
推荐阅读
- bash - 使用 jq 和多个引号配置别名
- matlab - 如何仅从 MATLAB 中的原始图像中选择分段图像
- sql - 什么时候最好截断并插入所有数据,然后更新
- javascript - 异常:参数与 ContactsApp.createContact 的方法签名不匹配
- c - “分段错误(核心转储)”是什么意思,为什么会发生?
- docker - 错误的网关,因为 Traefik 在健康检查失败后无法指向新的服务实例
- python - 运行时的代码说数据基数不明确
- python - 使用来自另一个文件的多个字符串写入新文件数据
- typescript - 属性“createVector”不存在
- flutter - 在放置行部分下颤动bottomNavigationBar