容器实战高手课
李程远
eBay 总监级工程师,云平台架构师
24647 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
容器实战高手课
15
15
1.0x
00:00/00:00
登录|注册

加餐04 | 理解ftrace(2):怎么理解ftrace背后的技术tracepoint和kprobe?

ftrace中添加kprobe event
perf probe添加kprobe
在ftrace中查看do_sys_open调用信息
使用perf查看内核函数调用频率
do_sys_open tracepoint示例
ftrace中的tracepoints
perf list
kprobe的基本工作原理
kprobe_init函数
register_trace_##name函数
__DO_TRACE宏
trace_##name函数
kprobe
tracepoint
思考题
重点小结
Kprobe的实现机制
Tracepoint的实现原理
tracepoint和kprobe的应用举例
怎么理解ftrace背后的技术tracepoint和kprobe?

该思维导图由 AI 生成,仅供参考

你好,我是程远。
前面两讲,我们分别学习了 perf 和 ftrace 这两个最重要 Linux tracing 工具。在学习过程中,我们把重点放在了这两个工具最基本的功能点上。
不过你学习完这些之后,我们内核调试版图的知识点还没有全部点亮。
如果你再去查看一些 perf、ftrace 或者其他 Linux tracing 相关资料,你可能会常常看到两个单词,“tracepoint”和“kprobe”。你有没有好奇过,这两个名词到底是什么意思,它们和 perf、ftrace 这些工具又是什么关系呢?
这一讲,我们就来学习这两个在 Linux tracing 系统中非常重要的概念,它们就是 tracepointkprobe

tracepoint 和 kprobe 的应用举例

如果你深入地去看一些 perf 或者 ftrace 的功能,这时候你会发现它们都有跟 tracepoint、kprobe 相关的命令。我们先来看几个例子,通过这几个例子,你可以大概先了解一下 tracepoint 和 kprobe 的应用,这样我们后面做详细的原理介绍时,你也会更容易理解。
首先看看 tracepoint,tracepoint 其实就是在 Linux 内核的一些关键函数中埋下的 hook 点,这样在 tracing 的时候,我们就可以在这些固定的点上挂载调试的函数,然后查看内核的信息。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Linux内核跟踪工具ftrace的关键技术包括tracepoint和kprobe。tracepoint是在内核关键函数中埋下的hook点,用于挂载调试函数以查看内核信息,而kprobe可以动态地在所有内核函数上挂载probe函数,用于查看函数被调用的次数和参数值。通过perf和ftrace命令,可以利用tracepoint来统计内核函数的调用频率和具体信息。kprobe的基本工作原理是将目标地址上内核代码的指令码替换成int3指令,触发异常进入异常处理函数执行probe函数。tracepoint和kprobe是Linux跟踪系统中非常重要的概念,对于Linux内核调试至关重要。通过了解tracepoint和kprobe的实现原理,可以更深入地理解perf、trace等工具的底层技术。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《容器实战高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 莫名
    关于思考题,想到一个比较笨拙的方法:gdb + qemu 调试内核。先进入虚拟机在某个内核函数上注册一个 kprobe,然后 gdb 远程调试内核,查看该内核函数的汇编指令(disass)是否被替换。 应该有更简单的方法,这方面了解不深。

    作者回复: 用gdb 远程调试内核看也可以。 还可以通过 /proc/kallsyms 找到函数的地址,然后写个kernel module把从这个地址开始后面的几个字节dump出来,比较一下probe函数注册前后的值。

    2021-02-05
    3
    12
  • A免帅叫哥
    看到内核还有一个kretprobe_example

    作者回复: 是的, kretprobe的实现机制和kprobe 类似, 可以拿到函数的return value.

    2021-08-28
  • piboye
    kprobe 用int3的方式性能会差吧,为神马不替换callq的指令呢?
    2023-03-14归属地:广东
  • janey
    一下子讲清楚了tracepoint核kprobe函数的区别,谢谢老师!另外eBPF还涉及了uprobe和USDT这两种类型又是啥意思呢?
    2022-11-18归属地:江苏
  • Geek_e4cf2e
    crash来查看很方便
    2021-09-19
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部