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

加餐03 | 理解ftrace(1):怎么应用ftrace查看长延时内核函数?

ftrace的功能实现
替换内核函数的第一条指令
利用gcc编译器的特性
ftrace的架构
使用function_graph tracer
查看函数调用栈
利用filter参数筛选函数
启用function tracer
tracefs虚拟文件系统
ftrace的功能和操作
ftrace的实现机制
ftrace的基本使用方法
思考题
理解ftrace
加餐03 | 理解ftrace(1):怎么应用ftrace查看长延时内核函数?

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

你好,我是程远。
上一讲里,我们一起学习了 perf 这个工具。在我们的案例里,使用 perf 找到了热点函数之后,我们又使用了 ftrace 这个工具,最终锁定了长延时的函数 estimation_timer()。
那么这一讲,我们就来学习一下 ftrace 这个工具,主要分为两个部分来学习。
第一部分讲解 ftrace 的最基本的使用方法,里面也会提到在我们的案例中是如何使用的。第二部分我们一起看看 Linux ftrace 是如何实现的,这样可以帮助你更好地理解 Linux 的 ftrace 工具。

ftrace 的基本使用方法

ftrace 这个工具在 2008 年的时候就被合入了 Linux 内核,当时的版本还是 Linux2.6.x。从 ftrace 的名字 function tracer,其实我们就可以看出,它最初就是用来 trace 内核中的函数的。
当然了,现在 ftrace 的功能要更加丰富了。不过,function tracer 作为 ftrace 最基本的功能,也是我们平常调试 Linux 内核问题时最常用到的功能。那我们就先来看看这个最基本,同时也是最重要的 function tracer 的功能。
ftrace 的操作都可以在 tracefs 这个虚拟文件系统中完成,对于 CentOS,这个 tracefs 的挂载点在 /sys/kernel/debug/tracing 下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Linux内核调试工具ftrace的实现机制及基本操作进行了详细介绍。文章首先介绍了ftrace的基本使用方法,包括在tracefs虚拟文件系统中完成ftrace的操作,启用function tracer来跟踪内核函数的调用情况,并通过设置过滤器来筛选想要查看的函数调用记录。其次,作者详细介绍了如何使用function_graph tracer来查看函数调用的时间和子函数调用情况,以及如何配置过滤器来查看特定函数的调用情况。随后,文章深入研究了ftrace在Linux中的实现机制,包括利用gcc编译器的特性为每个内核函数预留5个字节,以实现ftrace的功能。最后,文章提出了思考题,引发读者对ftrace实现机制的进一步思考。 总的来说,本文通过详细介绍ftrace的基本操作和实现机制,为读者提供了深入了解Linux内核调试工具ftrace的机会,使读者能够快速了解如何利用ftrace工具来定位和分析长延时内核函数,从而更好地进行内核调试和性能优化。

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

全部留言(4)

  • 最新
  • 精选
  • 莫名
    赞,非常适合入门 ftrace 的科普文。操控 tracefs 各种文件相对繁琐(但便于理解 ftrace),推荐使用 ftrace 的一个前端工具 trace-cmd,类似 perf 用法,简单易用。

    作者回复: 是的,trace-cmd 用起来挺方便的。

    2021-02-05
    2
    15
  • 徐少文
    inline函数在编译的时候实际上不是函数,而是直接在原函数处展开,主要是为了提高效率。所以实际上不能使用。static函数可以使用

    作者回复: 在某些情况下,编译器也会把static 函数展开

    2022-03-07
    2
    5
  • lyonger
    tracefs 这个虚拟文件系统,只能在宿主上操作? 如果需要在容器里操作的话,有啥方法么?

    作者回复: 可以直接hostPath mount, 当然在容器中也要做所需的capabilities.

    2021-09-18
    2
  • JianXu
    今天才看完所有的文章,好多东西要学。周五晚上看到Sherlock/SRE 群里Ralph 分享了一篇文章讲在Clickhouse 基础上支持类Spark 能力的文章,Huai 回复说这才是我们的工程师应该做的事情,顿时觉得自己那些小trick 不值一提。我们还是应该在这些技术上做深耕,Cloud 这条线也是一样的。
    2022-09-11归属地:上海
    3
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部