linux perf tool
Linux perf 是一个强大的性能分析工具,广泛用于内核与用户空间的性能剖析。其原理涉及 **PMU(Performance Monitoring Unit)**硬件事件收集、内核的 perf 子系统(perf_event)、以及用户态工具链。以下是对 perf 原理的系统性分析:
perf 总体架构
+-----------------------------+
| perf (用户空间工具) |
+-----------------------------+
│
▼
+-----------------------------+
| perf_event 内核模块 |
| (drivers/perf/, kernel/events/) |
+-----------------------------+
│
▼
+-----------------------------+
| CPU Performance Counter |
| (PMU: Performance Monitoring Unit) |
+-----------------------------+
工作流程详解
- 事件来源
perf 支持多种事件:
- 硬件事件(HW):
cycles:CPU周期instructions:指令执行数cache-misses:缓存未命中
- 软件事件(SW):
cpu-clock:CPU时钟周期page-faults:页面错误context-switches:上下文切换次数
- 内核 Tracepoints
- 动态探针(Kprobe/Uprobe)
- eBPF 支持的高级事件
- 事件注册与采样
用户执行如 perf record -e cycles ./app 时:
perf用户工具通过perf_event_open()系统调用注册事件- 内核
perf_event框架建立 event 结构,设置采样参数(频率/周期/阈值) - 内核分配 buffer(基于
mmap)用于用户态读取 - 设置中断处理(PMU 溢出触发)
- 采样过程
硬件事件发生达到设定阈值后:
- PMU 触发中断(如 NMI)
- perf_event 中断处理函数被调用
- 内核采集当前指令地址、寄存器、调用栈等上下文
- 写入到
mmap环形缓冲区中(perf ring buffer)
- 数据收集与分析
perf record:收集采样数据(存在 .data 文件中)perf report:对记录数据解码,呈现出热点函数、调用图等信息perf top:实时分析性能热点
核心模块分析(内核)
perf_event_open系统调用
int perf_event_open(struct perf_event_attr *attr,
pid_t pid, int cpu, int group_fd,
unsigned long flags);
pid=-1表示采集当前进程cpu=-1表示采集当前 CPU- 内核会构造
struct perf_event并加入perf_event_context
- 事件调度与 PMU 驱动
PMU 驱动位于:
arch/x86/events/intel/core.c (Intel)
arch/arm64/kernel/perf_event.c(ARM)
- 负责写入硬件寄存器:如 IA32_PERFEVTSELx, IA32_PMCx
- 控制采样阈值、中断使能等
- 支持硬件溢出中断回调
- 采样数据写入缓冲区
- perf_event_ring_buffer 为每个 perf event 分配一段共享内存
- 用户态通过
mmap()映射 ring buffer 到用户空间 - perf 会在其中读取 sample event(含 PC, callchain, register 等)
关键结构体
struct perf_event:核心事件描述struct perf_event_attr:用户空间传入参数struct perf_sample_data:采样数据上下文struct ring_buffer:采样数据缓存区
典型用法举例
- 查看热点函数
perf record ./app
perf report
- 实时分析(类似 top)
perf top
- 采样特定事件
perf record -e cache-misses ./app
- 采样内核事件
perf record -e sched:sched_switch -aR
与 eBPF 的结合(新趋势)
- perf 可用于收集 BPF 程序的输出
- perf buffer 也用于 bpf 程序
bpf_perf_event_output()写入事件 - perf + bpf tools(如
bpftools,bcc,bpftrace)形成更现代的性能分析平台
perf 的优势
| 特性 | 描述 |
|---|---|
| 精度高 | 依赖硬件 PMU,纳秒级别采样精度 |
| 低开销 | NMI 中断采样不干扰主流程 |
| 事件灵活 | 支持硬件/软件/kprobe/uprobe/BPF |
| 实时分析能力 | perf top, perf sched, perf trace |
2729

被折叠的 条评论
为什么被折叠?



