Linux 性能优化实战
倪朋飞
资深 Linux 专家,Kubernetes 项目维护者
87258 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 65 讲
结束语 (1讲)
Linux 性能优化实战
15
15
1.0x
00:00/00:00
登录|注册

51 | 案例篇:动态追踪怎么用?(下)

示例:动态跟踪 do_sys_open
向用户空间输出结果
加载到内核中运行
BPF 字节码生成
使用场景
特点
使用场景
特点
使用方法
安装方法
使用方法
工作原理
perf script
perf probe
perf list
只对感兴趣的事件进行动态追踪
分析 CPU cache、CPU 迁移、分支预测、指令周期等各种硬件事件
sysdig
SystemTap
BCC
eBPF
使用方法
功能
SystemTap
eBPF
perf
ftrace
动态追踪方法的选择
实际环境中使用动态追踪的经验
动态追踪技术的理解
常见的动态追踪使用场景
不同场景的工具选择问题
SystemTap 和 sysdig
eBPF 和 BCC
perf
常见的动态追踪方法
思考
如何选择追踪工具
怎么用
动态追踪技术

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

你好,我是倪朋飞。
上一节,我带你一起学习了常见的动态追踪方法。所谓动态追踪,就是在系统或者应用程序正常运行的时候,通过内核中提供的探针,来动态追踪它们的行为,从而辅助排查出性能问题的瓶颈。
使用动态追踪,可以在不修改代码、不重启服务的情况下,动态了解应用程序或者内核的行为,这对排查线上问题、特别是不容易重现的问题尤其有效。
在 Linux 系统中,常见的动态追踪方法包括 ftrace、perf、eBPF 以及 SystemTap 等。上节课,我们具体学习了 ftrace 的使用方法。今天,我们再来一起看看其他几种方法。

perf

perf 已经是我们的老朋友了。在前面的案例中,我们多次用到它,来查找应用程序或者内核中的热点函数,从而定位性能瓶颈。而在内核线程 CPU 高的案例中,我们还使用火焰图动态展示 perf 的事件记录,从而更直观地发现了问题。
不过,我们前面使用 perf record/top 时,都是先对事件进行采样,然后再根据采样数,评估各个函数的调用频率。实际上,perf 的功能远不止于此。比如,
perf 可以用来分析 CPU cache、CPU 迁移、分支预测、指令周期等各种硬件事件;
perf 也可以只对感兴趣的事件进行动态追踪。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了动态追踪方法在排查性能问题中的应用,重点介绍了perf工具的使用。perf工具不仅可以分析CPU热点函数,还可以分析硬件事件,并且可以动态追踪感兴趣的事件。与strace相比,perf trace基于内核事件,性能更好,因此更适合用于性能敏感的应用程序。文章还介绍了如何使用perf工具跟踪用户空间的库函数,以及如何从调试符号表中查询函数的参数。此外,还介绍了eBPF和BCC的使用,这两种工具相对于ftrace和perf更加灵活,但使用门槛较高。最后,文章还简要介绍了SystemTap和sysdig等动态追踪工具,以及如何根据具体场景选择合适的工具。总的来说,本文通过实际案例详细介绍了perf工具的功能和使用方法,对读者了解动态追踪在性能问题排查中的应用具有很好的指导意义。

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

全部留言(26)

  • 最新
  • 精选
  • xfan
    我想知道ebpf程序编写有什么好点的学习资源吗,有种心有余而力不足的感觉

    作者回复: 可以看到这个文档:https://docs.cilium.io/en/stable/bpf/

    2019-03-26
    8
  • lyonger
    老师,最近kvm虚拟机器,xfs文件系统下使用devmapper的驱动,每次使用docker跑任务ci build的时候,用iotop查看发现runner机器的[loop1]、[loop2]、[kworker/u32:2]的io 99%,任务中止了以后就没有发现异常了。我用perf定位到了热点函数是xfsaild、xfs_inode_item_push。用ftrace和trace-cmd要先知道运行的命令。那么2个疑问: 1、有办法直接查看某个热点函数里的执行逻辑吗?在不知道执行什么命令的情况下,我只知道某个热点函数名称 2、可以使用的探针有哪些,是怎么查看呢? 期待您的回复,多谢。

    作者回复: 1. 可以先试试火焰图,然后跟着火焰图调用堆栈去查询内核源码。 2. 探针的话,工具里面都提供了探针查询的命令,比如 perf list

    2019-07-10
    4
  • Geek_007
    老师你好,我在使用 perf trace 命令时发现,perf trace 追踪时,不能打印出打开文件的文件名,尽管我已经使用 perf probe 将filename 加入,但是依然无法打印出文件名。另外我使用 perf trace -e probe:do_sys_open ,依然还是记录所有的事件,请问老师,是我使用的有问题?还是其他问题?

    作者回复: 应该是 perf trace -e fs:do_sys_open

    2019-04-14
    2
  • manatee
    想请教下老师,在容器环境下使用以上动态追踪技术有哪些注意点和坑呢

    作者回复: 最主要的是调试信息问题,容器进程和依赖环境跟主机在不同namespace中,很多工具可能无法正确找出相应的符号表

    2019-06-06
    1
  • ichen
    # perf probe perf: 'probe' is not a perf-command. See 'perf --help'.

    作者回复: 升级版本试试?

    2019-03-23
    1
  • AceslupK
    动态追踪好难

    作者回复: 可以继续看一下eBPF专栏😊

    2022-02-28
  • Michael
    调试符号表安装不了 root@iZ94lcu45k0Z:~# apt-get install linux-image-`uname -r`-dbgsym Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package linux-image-4.15.0-72-generic-dbgsym E: Couldn't find any package by glob 'linux-image-4.15.0-72-generic-dbgsym' E: Couldn't find any package by regex 'linux-image-4.15.0-72-generic-dbgsym'

    作者回复: 是Ubuntu系统吗?如果是的话,可以参考它的官方文档 https://wiki.ubuntu.com/Debug%20Symbol%20Packages

    2020-07-18
  • lyonger
    我昨天查到了问题根源,发现docker对于使用存储驱动有选择推荐的说明,那个问题是存储驱动问题导致,通过热点函数和调试发现改成overlay2后loop内核线程的io几乎没有了。业务也正常了。但是那2个问题,期待老师有空后给予解答,多谢。

    作者回复: 👍

    2019-07-11
  • york
    # perf probe -x /bin/bash -V readline The /bin/bash file has no debug information. Rebuild with -g, or install an appropriate debuginfo package. Error: Failed to show vars. 这个问题怎么解?

    作者回复: 要安装debuginfo的,先网络搜索查查

    2019-03-28
  • cliff(亮剑)
    有没有讲Linux汇编和GDB的一期?

    作者回复: sorry,没有。这些更多的用在调试程序错误而不是性能优化中

    2019-03-24
收起评论
显示
设置
留言
26
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部