Linux 内核技术实战课
邵亚方
前蘑菇街技术专家,Linux Kernel 活跃贡献者
23704 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
Linux 内核技术实战课
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 我是如何使用tracepoint来分析内核Bug的?

规避方案四:调整vm.vfs_cache_pressure
规避方案三:手动compact
规避方案二:调整碎片指数
规避方案一:drop_caches
内核缺陷已被修改
追踪direct reclaim事件
追踪direct compact事件
Reclaim和compact无法满足需求
进程自身状态
GFP flags
分析失败原因
内核日志报错信息
业务人员反馈启动程序偶然失败
推动Steven Rostedt增加宏以减少额外函数调用开销
宏定义关键部分
eBPF难以替代ftrace在内核开发者心中的地位
在新版本内核上使用eBPF分析内核bug
解决方案
使用tracepoint分析生产环境
逐一排查可能的情况
内存申请在慢速路径上为什么会失败
tracepoint内核源码
推崇tracepoint和ftrace
分析内核bug的经验分享给内核开发者
课程目标:降低内核门槛,让更多人了解内核机制
目标受众:应用开发者和运维人员
总结
文章内容
主题总结
如何使用tracepoint分析内核Bug

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

你好,我是邵亚方。
我们这个系列课程的目标受众是应用开发者和运维人员,所以,你可以看到课程里的案例在分析应用问题的时候,都在尽量避免分析内核 bug,避免把内核代码拿过来逐个函数地解析为什么会这样。我希望这个课程可以降低内核的门槛,让更多人可以更加容易地了解内核机制,从而更好地解决应用难题、提升应用性能。
不过,在我们这个课程的学习者中还是有一些内核开发者的,因此,我写了这篇加餐来分析内核 bug,希望能把分析内核 bug 的一些经验分享给这些内核开发者们。
通过对课程的学习,你应该能发现,我对 tracepoint 和 ftrace 是极其推崇的。我对它推崇备至不是没有道理的,这节课我就带你来看下我是如何借助 tracepoint 来分析内核 bug 的。

炫技般存在的 tracepoint 内核源码

如果你看过 tracepoint 的内核代码,相信你一定对它炫技般存在的宏定义印象深刻。我在第一眼看到这些宏定义时,也是一脸懵逼,不知从何下手,但是很快我就看懂了。为了证明我看懂了,我还特意给 tracepoint 的这些宏定义又增加了一些定义,我增加的这个宏定义,其关键部分如下:
如果你能看明白这些,那就说明你对这些 tracepoint 宏的工作机制一清二楚了。当然,这节课我不是来剖析 tracepoint 内核源码的。如果你不懂 tracepoint 内核源码,也不妨碍你使用它,不过这对一名内核开发者而言终究是一件憾事。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了如何使用tracepoint来分析内核bug,并分享了作者在具体案例中的经验和技巧。作者首先强调了对tracepoint和ftrace的推崇,并详细描述了内存分配慢速路径失败的可能情况,包括特殊的GFP flags、进程自身的状态、以及reclaim和compact无法满足需求。通过一个具体的内核bug案例,读者可以了解到作者对tracepoint的熟练运用和对内核bug分析的经验,以及如何利用tracepoint来解决类似问题。此外,文章还介绍了如何使用tracepoint分析生产环境,包括追踪direct compact事件和结合其他手段查看是否进行了compact,以及追踪direct reclaim事件来查看内存回收情况。最终,通过追踪数据的分析,作者得出了内存分配失败的结论。总的来说,本文通过具体案例和详细分析,展示了作者对tracepoint的熟练运用和对内核bug分析的经验,为读者提供了一种解决类似问题的思路和方法。文章内容丰富,对于需要深入了解内核bug分析的读者具有很高的参考价值。

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

全部留言(5)

  • 最新
  • 精选
  • KennyQ
    后续能不能再开个课程专门讲讲 tracepiont,kprobe和ePBF?网上的内容都太碎片化,不成体系。 作为一个背锅的自身运维工程狮,基本经常要和开发刚正面,急需这方面的知识。

    作者回复: 这些调试手段的使用技巧还是很多的 用好了这些手段各种疑难问题都可以迎刃而解。目前还没有专门讲这些调试手段的打算。

    2020-10-11
    3
  • 我来也
    # 这几个值合并起来是 0x100450 不是 0x104050呀。 此时的 GFP flags 是 0x104050,对应于下面这几项: #define ___GFP_WAIT 0x10u #define ___GFP_IO 0x40u #define ___GFP_REPEAT 0x400u #define ___GFP_KMEMCG 0x100000u

    作者回复: 嗯 不是gfp_repeat.,是gfp_comp,这是order为5得复合页,跟下面tracepoint输出是一致的。另外,下面的截图里面截断了gfp_kmemcg,没有显示出来。

    2020-10-06
    1
  • xianhai
    能不能讲讲zone的概念? 为什么要右移5?(205324kB >> 5)

    作者回复: 关于zone,它的大致作用是,一个node上有不同的zone,之所以要区分zone,是为了满足不同的内存申请需求以及更好的管理物理内存:比如highmem是内核不能直接映射的;dma则主要给一些特殊外设使用的;对于用户进程而言,默认申请的都是normal zone;movable zone则是为了优化内存碎片。 右移5的目的是看看这么大的内存对应有多少个order为5的复合页。

    2020-10-06
    2
  • 除了cpu篇都大概看完了,老师功力深厚,点赞👍
    2021-10-08
  • Geek_e4c979
    tracepoint这些一会define一会undef咋理解呀
    2021-04-21
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部