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

加餐02 | 理解perf:怎么用perf聚焦热点函数?

frequency 模式
period 模式
perf、ftrace、ebpf 等工具都会用到
内核中的关键函数中注册的事件
例子
内核代码中定义的事件
例子
PMU
perf report
perf record
perf stat
Tracepoints event
Software event
Hardware event
源代码在 tools 目录下
由 Ingo Molnar 开发
权限设置
安装
采样(sample)
计数(count)
Event
概述
使用 perf 生成火焰图
运行带负载的程序
容器中使用 perf
perf 工具
思考题
性能调优
性能调优与分析工具 Perf

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

你好,我是程远。今天我要和你聊一聊容器中如何使用 perf。
上一讲中,我们分析了一个生产环境里的一个真实例子,由于节点中的大量的 IPVS 规则导致了容器在往外发送网络包的时候,时不时会有很高的延时。在调试分析这个网络延时问题的过程中,我们会使用多种 Linux 内核的调试工具,利用这些工具,我们就能很清晰地找到这个问题的根本原因。
在后面的课程里,我们会挨个来讲解这些工具,其中 perf 工具的使用相对来说要简单些,所以这一讲我们先来看 perf 这个工具。

问题回顾

在具体介绍 perf 之前,我们先来回顾一下,上一讲中,我们是在什么情况下开始使用 perf 工具的,使用了 perf 工具之后给我们带来了哪些信息。
在调试网路延时的时候,我们使用了 ebpf 的工具之后,发现了节点上一个 CPU,也就是 CPU32 的 Softirq CPU Usage(在运行 top 时,%Cpu 那行中的 si 数值就是 Softirq CPU Usage)时不时地会增高一下。
在发现 CPU Usage 异常增高的时候,我们肯定想知道是什么程序引起了 CPU Usage 的异常增高,这时候我们就可以用到 perf 了。
具体怎么操作呢?我们可以通过抓取数据、数据读取和异常聚焦三个步骤来实现。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章介绍了如何使用perf工具来解决容器中的网络延时问题。首先回顾了在调试网络延时问题时使用perf工具的情况,包括抓取数据、数据读取和异常聚焦三个步骤。然后详细介绍了perf工具的概念和工作机制,包括不同类型的event和计数和采样两种工作方式。在容器中使用perf时需要注意perf版本和内核版本匹配,以及解决权限问题。最后,介绍了在定位CPU使用异常时最常用的方法,并给出了常规步骤和思考题。整体来说,本文通过实际案例和技术细节,帮助读者理解了perf工具的使用方法和工作原理,使读者能够更好地利用perf工具来解决类似的性能问题。

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

全部留言(7)

  • 最新
  • 精选
  • chong chong
    老师好,如果容器使用cpu share,在容器内perf看到的是宿主机信息,异常有可能是业务之间干扰导致。所以,最好是在宿主机上使用perf,我的理解对不?

    作者回复: 如果可以登陆宿主机,当然在宿主机上运行perf是最理想的。

    2021-02-25
    5
  • 徐少文
    老师好,如果想在主机上做容器内进程的监控,直接在host上利用perf工具去获取容器的系统调用序列,这样的方法是可行的吗?

    作者回复: @徐少文 这样是可以的,在host pid namespace下可以看到容器中进程的pid, 你可以用perf trace对应的pid看到这个进程的系统调用。

    2021-02-01
    4
  • 超级芒果冰
    perf 的常规步骤中,out.sv 是什么文件,需要用什么软件打开

    作者回复: 可以直接用浏览器打开

    2022-01-15
    1
  • lyonger
    在容器中使用的话,限制有点多。线上业务直接perf,对线上可能会有影响?

    作者回复: 肯定有影响,需要根据实际情况决定是否执行。

    2021-09-18
    1
  • 请教下k8s里面上下文切换和中断比较严重导致负载高。这如何处理啊

    作者回复: 可以看一下 /proc/interrupts 和 /proc/softirqs ,或者用BCC的工具 hardirqs, softirqs 看一下哪种中断的次数或者耗时比较高。

    2021-03-18
    1
  • 李雪
    Dear teacher, can I use the following command to monitor each container's events"perf stat -a -e cpu-clock,context-switches,cpu-migrations,page-faults,cycles,instructions,branches,branch-misses -G kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod${podID}.slice/docker-${dockerID}.scope -o perf_containers.csv --append -I 30000 sleep 30s" or use "perf stats --pid ${docker_pid}" is better? Thanks.

    作者回复: If you want to perf monitor all processes under a container, then "-G cgroup_name" is easier. "--pid" need to list all pids under a container.

    2022-03-15
  • closer
    这几章都比较底层,作为运维人员,需要前置学习那些知识点,很多知识点都是盲点
    2021-02-01
    1
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部