Linux 性能监测:Perf 工具与事件基础设施详解
1. 性能事件基础设施概述
Linux 内核的性能事件基础设施旨在向用户空间暴露硬件和软件性能计数器。不过,由于硬件性能计数器与具体处理器紧密相关,难以完全抽象化,所以该基础设施着重提供灵活的接口,以适应特定架构的使用需求。
要使用该基础设施,需要确保内核支持并正确配置数据收集。内核编译时需启用以下 Kconfig 选项:CONFIG_HAVE_PERF_EVENTS、CONFIG_PERF_EVENTS、CONFIG_HAVE_PERF_EVENTS_NMI、CONFIG_HAVE_PERF_REGS和CONFIG_HAVE_PERF_USER_STACK_DUMP,目前大多数 Linux 发行版会默认启用这些选项。
此外,数据收集还要求禁用内核的 NMI 看门狗和内核指针隐藏功能。同时,可通过/proc/sys/kernel/perf_event_paranoid文件控制数据收集的可见性,该文件中的整数值规定了内核对测量的访问限制,具体如下表所示:
| 值 | 允许的测量范围 |
|---|---|
| 2 | 用户空间 |
| 1 | 用户空间和内核空间 |