首页 / 行业
Coolbpf 在perf 事件中的增强
2022-10-25 09:00:00
1、perf 简介
Perf 是内置于 Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样的原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。
1.1、perf 框架
主要有两部分组成
Perf Tools:用户态的 Perf Tools 为用户提供了一系列丰富的工具集用于收集、分析性能数据。
Perf Event Subsystem:Perf Event 子系统是内核众多子系统中的一员,其主要功能是和 Perf Tool 共同完成数据采集的工作。另外,Linux Hard Lockup Detector 也是通过 Perf Event 子系统来实现的。
本文将重点围绕 Perf Event 子系统展开介绍Coolbpf 在perf 事件中的增强。
1.2、perf 事件分类
perf的事件包括:
硬件事件:branch-instrctions / branch-miss / bus-cycles / cache-miss / cache-reference / cycles / instructions
硬件cache事件:d1-cached-miss
软件事件:cpu-clocks / tasks-clock ....
tracepoint事件:sched_stat_runtime / syscalls...
probe事件:可用户定义
1.3、当前perf 工具集中的不足
当前perf工具以命令行为主,缺乏完善的第三方应用开发sdk,导致perf功能虽然强大,但是功能相对比较封闭,无法适应特定场景的问题。比如说常见的CPU system 占用率高的问题,我们通常使用perf record 来记录系统热点,再通过 FlameGraph 工具转换成火焰图进行分析。该方法存在以下不足:
sys占用率高很有可能只是偶发性问题,通过监控发现了以后再来执行命令,现象很有可能已经消失,持续性追踪会导致样本数太大,无法凸显出热点函数;
sys占用率高只是部分cpu现象,具体cpu编号并不确定,导致定向抓取事件操作步骤会变得非常繁琐;
perf 命令只能输出中间文件,要生成常用的火焰图数据还需要手工转换;
2、Coolbpf 针对perf 增强
Coolbpf 是一个便捷高效的一站式eBPF开发编译平台,当perf遇见Coolbpf后,会碰撞出什么样的火花呢?Coolbpf 为perf提供了应用开发的SDK,让开发者可以借助eBPF快速开发 perf 应用。
2.1、Coolbpf perf 组织架构
大致流程和常规的Coolbpf 应用开发过程基本一致。主要分为
libbpf 应用、
perf 事件处理、
用户态处理、 接下来我们以 testPerf.py为例,讲解perf 典型应用开发。
(文件:https://gitee.com/anolis/coolbpf/blob/master/lcc/pylcc/guide/testPerf.py)
2.2、bpf 应用部分
bpf 应用和其它的kprobe/tp代码实现并无明显差别:
#include "lbc.h"SEC("perf_event")int bpf_prog(struct bpf_perf_event_data *ctx){ bpf_printk("hello perf"); return 0;}char _license[] SEC("license") = "GPL";
2.3、perf event
Coolbpf 对perf_attr 做了python 化处理,故使用在配置 perf attr的时候,只需要参考 perf 官方文档中关于attr 配置说明进行配置即可。下面的例子是追踪 perf PAGE_FAULTS事件的方法。
pfConfig = { "sample_freq": 50, "freq": 1, "type": PerfType.SOFTWARE, "config": PerfSwIds.PAGE_FAULTS, } self.attachPerfEvent("bpf_prog", pfConfig)
此时系统中的 perf PAGE_FAULTS 事件就可以跟2.2 节的libbpf 代码关联起来。
2.4、用户态处理
本示例是将捕捉到的事件输出到 /sys/kernel/debug/tracing/trace_pipe。用户可以根据自己的情况去执行event 回调或者分析maps 信息。
3、实战应用
根据1.3 节的应用场景,需要追踪一个偶发性sys 冲高问题。在常规perf 使用存在困难的情况下,可以基于Coolbpf快速开发一个追踪sys高问题的应用程序,代码总共不超过180行,具体实现可以参考:perfSys.py(https://gitee.com/anolis/surftrace/blob/master/tools/pylcc/pytool/perfSys.py)
应用实现流程图如下:
可以直接追踪到对应的sys高调用栈
通过上述方法,可以将原本需要花费多日守候才有可能捕捉到现场的疑难问题,缩短到完全无人值守,问题复现瞬间即可锁定目标的小case。
4、总结
Coolbpf 融合了libbpf灵活、高效、安全的优势,结合perf强大的数据收集能力,并自身拥有快速部署、资源高效利用、结果直观可视化输出能力。如今两两联合,应用前景非常广泛,如性能剖析、应用观测、系统调优等。
审核编辑:彭静最新内容
手机 |
相关内容
光耦仿真器简介和优势
光耦仿真器简介和优势,仿真器,参数,接收器,设计方案,耦合,器件,光耦仿真器是一种用于模拟光耦合器件的工具,它可以帮助工程师在设计低耗能,小安派-LRW-TH1传感器通用板
低耗能,小安派-LRW-TH1传感器通用板,一块板即可连接多种传感器!,传感器,多种,连接,一块,通用,接口,小安派-LRW-TH1传感器通用板是一款芯片迈向系统化时代:EDA软件的创新
芯片迈向系统化时代:EDA软件的创新之路,时代,芯片,形式,支持,性能,验证,芯片设计是现代科技领域的重要组成部分,它涉及到电子设计自动聊聊芯片中的负压产生机理及其应用
聊聊芯片中的负压产生机理及其应用,芯片,细胞,用于,测量,生物,结构,芯片中的负压是指在芯片内部产生的负压环境。在某些应用中,负压苹果发布M3系列新款MacBook Pro/iM
苹果发布M3系列新款MacBook Pro/iMac:业界首批PC 3nm芯片,新款,芯片,业界,核心,用户,性能,近日,苹果公司发布了M3系列新款MacBook Pro阿里平头哥发布首颗SSD主控芯片:镇
阿里平头哥发布首颗SSD主控芯片:镇岳510,平头,芯片,物联网,性能,阿里巴巴,支持,阿里平头哥是指阿里巴巴集团的CTO张建锋,他在宣布了阿安森美宣布其Hyperlux 图像传感器
安森美宣布其Hyperlux 图像传感器系列已集成到瑞萨R-Car V4x平台,平台,到瑞,集成,图像,汽车制造商,辅助功能,安森美(ON Semiconducto创造多样信号的万能工具:函数/任意
创造多样信号的万能工具:函数/任意波形发生器,函数,波形,信号,工具,创造,时钟,函数/任意波形发生器是一种用于产生各种形状和频率的