验证内核是否支持perf_events
首先确认内核配置是否启用了perf子系统:
# 检查内核配置
zgrep "_PERF[_= ]" /proc/config.gz
典型输出应包含:
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_EVENTS=y
检查权限设置
查看当前系统的监控权限级别:
cat /proc/sys/kernel/perf_event_paranoid
数值说明:
- -1: 无限制
- 0: 允许用户级监控
- 1: 禁止访问CPU事件数据
- 2: 禁止访问内核事件数据
非root用户安装perf工具
对于Gentoo系统,可以尝试以下方法:
方法1:从源码编译安装
# 下载对应内核版本的源码
wget https://cdn.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.xz
tar xvf linux-2.6.36.tar.xz
cd linux-2.6.36/tools/perf
make
方法2:使用本地内核源码
cd /usr/src/linux/tools/perf
make DESTDIR=~/.local install
配置环境变量
将perf添加到用户PATH中:
echo 'export PATH=$PATH:~/.local/bin' >> ~/.bashrc
source ~/.bashrc
验证安装
运行基本性能监控:
perf stat -e cycles,instructions -a sleep 1
预期输出示例:
Performance counter stats for 'sleep 1':
1,000,000 cycles
500,000 instructions
1.001000000 seconds time elapsed
解决Gentoo包被屏蔽的问题
如果必须使用系统包管理器,可以尝试解除屏蔽:
sudo mkdir -p /etc/portage/package.unmask
echo "dev-util/perf" >> /etc/portage/package.unmask/perf
常用perf命令示例
# 监控CPU使用率
perf top
# 记录进程性能数据
perf record -g -p $(pidof your_process)
# 生成火焰图
perf script | stackcollapse-perf.pl | flamegraph.pl > perf.svg