4. perf 安装与环境配置:不同发行版的安装方法与内核配置要求

perf 是 Linux 内核自带的性能剖析工具,其安装与运行高度依赖内核编译选项。不同发行版的包管理方式与内核默认配置存在差异,本章将系统讲解 Ubuntu 与 CentOS 两大主流发行版的安装流程,以及确保 perf 功能完整所需的内核配置项。

4.1 内核配置要求:CONFIG_PERF_EVENTS 与相关选项

perf 的核心功能由内核子系统 perf_events 提供。若内核编译时未开启相关选项,即使安装了 perf 用户态工具,也无法正常采集硬件事件、软件事件或跟踪点数据。

检查当前内核是否支持 perf: 执行 cat /boot/config-$(uname -r) | grep PERF_EVENTS,若输出 CONFIG_PERF_EVENTS=y 或 =m,则内核已支持 perf 基础功能。

下表列出 perf 完整功能所需的关键内核配置项及其作用:

配置项 推荐值 作用说明
CONFIG_PERF_EVENTS y perf 事件子系统主开关,必须开启
CONFIG_HW_PERF_EVENTS y 启用硬件性能计数器(如 CPU 周期、指令数)
CONFIG_FTRACE y 函数跟踪框架,perf 的 tracepoint 依赖此选项
CONFIG_KPROBES y 动态探针支持,用于 perf probe 动态插桩
CONFIG_UPROBES y 用户态动态探针,用于分析用户程序热点
CONFIG_FRAME_POINTER y 保留栈帧指针,提升 perf 调用链采样准确性
CONFIG_DEBUG_INFO y 内核调试符号,用于将地址解析为函数名
注意: 云服务器或容器环境的内核可能裁剪了 CONFIG_FRAME_POINTER 或 CONFIG_DEBUG_INFO,这会导致 perf 生成的火焰图调用链不完整或符号无法解析。建议在专用物理机或虚拟机中运行 perf 分析。

4.2 Ubuntu 发行版安装 perf

Ubuntu 将 perf 工具打包在 linux-tools-common 和对应内核版本的 linux-tools-$(uname -r) 包中。推荐使用 apt 安装。

4.2.1 安装步骤

  1. 更新包索引:
    sudo apt update
  2. 安装通用 perf 包:
    sudo apt install linux-tools-common -y
  3. 安装当前内核对应的 perf 版本:
    sudo apt install linux-tools-$(uname -r) -y
  4. 验证安装:
    perf --version
常见问题: 若步骤 3 提示 E: Unable to locate package linux-tools-5.x.x-xxx-generic,说明当前内核版本较新或为自定义内核。可尝试安装 linux-tools-generic 通用包:sudo apt install linux-tools-generic -y。

4.2.2 Ubuntu 内核配置检查

Ubuntu 官方内核(generic 系列)默认开启 CONFIG_PERF_EVENTS 和 CONFIG_HW_PERF_EVENTS,但 CONFIG_FRAME_POINTER 在较新版本中可能被 CONFIG_UNWINDER_ORC 替代。可通过以下命令确认:

cat /boot/config-$(uname -r) | grep -E "CONFIG_PERF_EVENTS|CONFIG_FRAME_POINTER|CONFIG_UNWINDER_ORC"

若输出显示 CONFIG_UNWINDER_ORC=y 且 CONFIG_FRAME_POINTER 未开启,perf 仍可正常工作,但火焰图的调用链精度可能略低于帧指针模式。

4.3 CentOS / RHEL 发行版安装 perf

CentOS 7/8/9 及 RHEL 系列使用 yum 或 dnf 包管理器。perf 工具包含在 perf 包中,与内核版本绑定。

4.3.1 安装步骤

  1. CentOS 7 / RHEL 7(使用 yum):
    sudo yum install perf -y
  2. CentOS 8/9 / RHEL 8/9(使用 dnf):
    sudo dnf install perf -y
  3. 验证安装:
    perf --version
提示: CentOS 默认安装的 perf 版本与内核版本一致。若需要最新 perf 功能,可考虑从 ELRepo 或源码编译,但生产环境建议使用发行版自带版本以保证稳定性。

4.3.2 CentOS 内核配置特点

CentOS 使用 RHEL 内核,默认开启 CONFIG_PERF_EVENTS 和 CONFIG_HW_PERF_EVENTS。但 CONFIG_FRAME_POINTER 在 CentOS 8+ 中默认关闭,转而使用 CONFIG_UNWINDER_ORC。此外,CONFIG_DEBUG_INFO 在 CentOS 最小安装中可能未安装对应的 debuginfo 包,需要额外安装:

sudo debuginfo-install kernel -y

或手动下载对应内核版本的 kernel-debuginfo 和 kernel-debuginfo-common RPM 包安装。

4.4 发行版对比与选择建议

下表对比 Ubuntu 与 CentOS 在 perf 安装与配置上的关键差异:

对比维度 Ubuntu CentOS / RHEL
包管理器 apt yum / dnf
perf 包名 linux-tools-$(uname -r) perf
内核配置默认开启 CONFIG_PERF_EVENTS、CONFIG_HW_PERF_EVENTS CONFIG_PERF_EVENTS、CONFIG_HW_PERF_EVENTS
帧指针默认状态 较新版本关闭(使用 ORC unwinder) CentOS 8+ 关闭(使用 ORC unwinder)
debuginfo 安装 自动随内核包安装 需手动安装 kernel-debuginfo
适用场景 开发环境、桌面、通用服务器 企业生产环境、稳定性优先

4.5 perf 环境验证与内核配置关系图

下图展示 perf 用户态工具、内核配置项与硬件/软件事件源之间的依赖关系,帮助理解配置缺失时的故障定位路径。

perf 环境依赖关系图 perf 用户态工具 perf_event_open 系统调用 内核配置项(/boot/config-*) CONFIG_PERF_EVENTS CONFIG_HW_PERF_EVENTS CONFIG_FTRACE 事件源 硬件事件(PMC) 软件事件 tracepoint kprobe perf.data / 火焰图

4.6 常见安装问题与排查

  • perf: command not found:未安装 perf 包,按对应发行版步骤安装。
  • WARNING: perf not found for kernel x.x.x:Ubuntu 中 linux-tools-$(uname -r) 包缺失,尝试安装 linux-tools-generic。
  • Failed to open /proc/modules:权限不足,使用 sudo perf 或以 root 身份运行。
  • No permission to enable perf_event:需设置 kernel.perf_event_paranoid 参数,执行 sudo sysctl -w kernel.perf_event_paranoid=-1。
  • Cannot find event 'cycles':内核未开启 CONFIG_HW_PERF_EVENTS,需重新编译内核或更换发行版。
生产环境建议: 在部署 perf 前,先通过 perf list 命令查看当前系统支持的事件列表。若输出为空或仅包含少量软件事件,说明内核配置不完整,需要升级内核或调整编译选项。