Perf 笔记
环境 Linux Syameimaru-Aya 5.17.0-2-amd64 #1 SMP PREEMPT Debian 5.17.6-1 (2022-05-11) x86_64 GNU/Linux
。
配置环境
首先安装 linux-perf
软件包,获得 perf(1)
应用程序。
接着运行 perf
,发现报了奇怪的错误:
1 | 19:56 Syameimaru-Aya ~/sr/la/hpc/perf |
跟着报错提示里面提到的文档 Perf events and tool security 看了一圈,大概知道问题出在 perf
的安全措施上。文档里说,随意使用 perf
可能允许人获得其他人正在运行的程序中的数据,不安全。我用的发行版就默认配置成所有人都不能使用 perf
了。
文档给了一种多用户时控制权限,只让特定的人使用 perf
的做法:首先将 /usr/bin/perf
用 setcap(8)
程序加上 CAP_PERFMON
CAP_SYS_PTRACE
两个标签,使 /usr/bin/perf
能够正常使用(没有 CAP_PERFMON
标签的应用程序无法调用 perf_event_open(2)
函数)。接着新建个用户组,仅使在那个组里的用户拥有 /usr/bin/perf
的可执行权限。这样对于一个不允许使用 perf
的人来说,外面偷来的 perf
会因为没有 CAP_PERFMON
而无法使用,自带的 /usr/bin/perf
则没有执行权限。整个设置避免了未经许可的人使用 perf
程序。
因为我的笔记本电脑肯定只有我一个用户,所以我非常暴力地改了一发,在 root
权限下往 /proc/sys/kernel/perf_event_paranoid
文件里写了个 -1
。接着在 /etc/sysctl.conf
里加入一行 kernel.perf_event_paranoid = -1
。
1 | root@Syameimaru-Aya:~/tmp# echo -1 > /proc/sys/kernel/perf_event_paranoid |
接着 perf
就可以正常运行了。
1 | 20:27 Syameimaru-Aya ~/sr/la/hpc/perf |
获得炫酷火焰图
中午午睡的时候梦到生成火焰图要用命令 perf script flamegraph
。于是试了一下,发现不行。
1 | 20:29 Syameimaru-Aya ~/sr/la/hpc/perf |
啊报错说缺少包 libjs-d3-flame-graph
。太良心了,连缺什么包都给提示好。显得我很笨的样子 :(。
1 | 20:33 Syameimaru-Aya ~/sr/la/hpc/perf |
提示说包不存在。用 apt-file
找了下报错信息中提到的关键文件 /usr/share/d3-flame-graph/d3-flamegraph-base.html
,发现源里没有这个东西。不过在 pkgs.org 上找了下发现 rpm
的包到是有……怀疑开发都写报错信息的时候只是把红帽系打包的命名习惯改成了 Debian
系的,估计根本就没看有没有这个包吧!
最后用 alien(1p)
把 rpm
转成 deb
装上。成功运行。