[转帖]Perf 笔记

perf,笔记 · 浏览次数 : 0

小编点评

## Problem Analysis and Solution **Problem:** The error message indicates that the `perf` tool is unable to access performance monitoring and observability operations due to restricted permissions. **Possible Cause:** * The default security settings prevent `perf` from accessing these operations. * The `kernel.perf_event_paranoid` setting is set to restrict access for all users, excluding the root user. **Solution:** 1. **Modify `kernel.perf_event_paranoid`:** * Set the value to `-1` using the `/proc/sys/kernel/perf_event_paranoid` file. * This allows all users to use `perf` without the `CAP_PERFMON` permission. 2. **Create a user with limited permissions:** * Create a new user group. * Grant the user `CAP_PERFMON` and other required capabilities to `/usr/bin/perf`. **Additional Notes:** * Ensure that the root user is not affected by this modification. * This solution assumes that the system has only one user. For multiple users, consider using group membership and sharing mechanisms. * The specific steps for setting permissions and creating user group may vary depending on the Linux distribution.

正文

https://www.cnblogs.com/jyi2ya/p/16278495.html

 

环境 Linux Syameimaru-Aya 5.17.0-2-amd64 #1 SMP PREEMPT Debian 5.17.6-1 (2022-05-11) x86_64 GNU/Linux

Perf 是一个 Linux 下的好用的性能分析工具。

配置环境

首先安装 linux-perf 软件包,获得 perf(1) 应用程序。

接着运行 perf,发现报了奇怪的错误:

  19:56 Syameimaru-Aya ~/sr/la/hpc/perf
  0 perf record -a ./a.out
  Error:
  Access to performance monitoring and observability operations is limited.
  Consider adjusting /proc/sys/kernel/perf_event_paranoid setting to open
  access to performance monitoring and observability operations for processes
  without CAP_PERFMON, CAP_SYS_PTRACE or CAP_SYS_ADMIN Linux capability.
  More information can be found at 'Perf events and tool security' document:
  https://www.kernel.org/doc/html/latest/admin-guide/perf-security.html
  perf_event_paranoid setting is 3:
  -1: Allow use of (almost) all events by all users
  Ignore mlock limit after perf_event_mlock_kb without CAP_IPC_LOCK
  >= 0: Disallow raw and ftrace function tracepoint access
  >= 1: Disallow CPU event access
  >= 2: Disallow kernel profiling
  To make the adjusted perf_event_paranoid setting permanent preserve it
  in /etc/sysctl.conf (e.g. kernel.perf_event_paranoid = <setting>)

跟着报错提示里面提到的文档 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

  root@Syameimaru-Aya:~/tmp# echo -1 > /proc/sys/kernel/perf_event_paranoid
  root@Syameimaru-Aya:~/tmp#

接着 perf 就可以正常运行了。

  20:27 Syameimaru-Aya ~/sr/la/hpc/perf
  0 cat a.c
  #include <stdio.h>
   
  int main(void) {
  int i;
  for (i = 0; i < 10000000; ++i)
  i + i;
  return 0;
  }
  20:27 Syameimaru-Aya ~/sr/la/hpc/perf
  0 gcc -O0 a.c && perf record -a ./a.out
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.877 MB perf.data (104 samples) ]

获得炫酷火焰图

中午午睡的时候梦到生成火焰图要用命令 perf script flamegraph。于是试了一下,发现不行。

  20:29 Syameimaru-Aya ~/sr/la/hpc/perf
  0 perf script flamegraph
  ------------------------------------------------------------
  perf_event_attr:
  size 128
  { sample_period, sample_freq } 4000
   
  ... 超级长的输出 ...
   
  Flame Graph template /usr/share/d3-flame-graph/d3-flamegraph-base.html does not exist. Please install the js-d3-flame-graph (RPM) or libjs-d3-flame-graph (deb) package, specify an existing flame graph template (--template PATH) or another output format (--format FORMAT).

啊报错说缺少包 libjs-d3-flame-graph。太良心了,连缺什么包都给提示好。显得我很笨的样子 😦。

  20:33 Syameimaru-Aya ~/sr/la/hpc/perf
  0 i libjs-d3-flame-graph
  Reading package lists... Done
  Building dependency tree... Done
  Reading state information... Done
  E: Unable to locate package libjs-d3-flame-graph

提示说包不存在。用 apt-file 找了下报错信息中提到的关键文件 /usr/share/d3-flame-graph/d3-flamegraph-base.html,发现源里没有这个东西。不过在 pkgs.org 上找了下发现 rpm 的包到是有……怀疑开发都写报错信息的时候只是把红帽系打包的命名习惯改成了 Debian 系的,估计根本就没看有没有这个包吧!

怎么全是 rpm 包

最后用 alien(1p) 把 rpm 转成 deb 装上。成功运行。

超级酷炫的火焰图!

 
分类: 记录

与[转帖]Perf 笔记相似的内容:

[转帖]Perf 笔记

https://www.cnblogs.com/jyi2ya/p/16278495.html 环境 Linux Syameimaru-Aya 5.17.0-2-amd64 #1 SMP PREEMPT Debian 5.17.6-1 (2022-05-11) x86_64 GNU/Linux。 Pe

[转帖]Perf分析CPU性能问题笔记

https://cloud.tencent.com/developer/article/1416234 本文仅仅是一个笔记。 场景 观察进程的CPU使用情况 观察进程内各个函数的CPU使用情况: sudo perf top -p 复制 同时显示函数调用链: sudo perf top -

[转帖]《Linux性能优化实战》笔记(24)—— 动态追踪 DTrace

使用 perf 对系统内核线程进行分析时,内核线程依然还在正常运行中,所以这种方法也被称为动态追踪技术。动态追踪技术通过探针机制来采集内核或者应用程序的运行信息,从而可以不用修改内核和应用程序的代码就获得丰富的信息,帮你分析、定位想要排查的问题。 以往,在排查和调试性能问题时,我们往往需要先为应用程

[转帖]《Linux性能优化实战》笔记(23)—— 内核线程 CPU 利用率过高,perf 与 火焰图

在排查网络问题时,我们还经常碰到的一个问题,就是内核线程的 CPU 使用率很高。比如,在高并发的场景中,内核线程 ksoftirqd 的 CPU 使用率通常就会比较高。回顾一下前面学过的 CPU 和网络模块,你应该知道,这是网络收发的软中断导致的。 要分析 ksoftirqd 这类 CPU 使用率比

[转帖]Perf IPC以及CPU性能

https://plantegg.github.io/2021/05/16/Perf_IPC%E4%BB%A5%E5%8F%8ACPU%E5%88%A9%E7%94%A8%E7%8E%87/ 为了让程序能快点,特意了解了CPU的各种原理,比如多核、超线程、NUMA、睿频、功耗、GPU、大小核再到分支

[转帖]perf-map-agent

https://github.com/jvm-profiling-tools/perf-map-agent A java agent to generate /tmp/perf-.map files for just-in-time(JIT)-compiled methods for us

[转帖]perf-map-agent

https://github.com/brendangregg/perf-map-agent A java agent to generate /tmp/perf-.map files for just-in-time(JIT)-compiled methods for use with

[转帖]perf-tools

https://github.com/brendangregg/perf-tools 网络不好 原作者很厉害 转帖学习. A miscellaneous collection of in-development and unsupported performance analysis tools f

[转帖]Perf IPC以及CPU性能

https://plantegg.github.io/2021/05/16/Perf%20IPC%E4%BB%A5%E5%8F%8ACPU%E5%88%A9%E7%94%A8%E7%8E%87/ Perf IPC以及CPU性能 为了让程序能快点,特意了解了CPU的各种原理,比如多核、超线程、NUMA

[转帖]perf学习-linux自带性能分析工具

存储技术为满足层出不穷应用的海量数据存储需求,从物理介质到技术架构也同样发生了天翻地覆的变革。无论技术如何更新换代,其目的都是为了更好的提供高性能,高容量,高可用的数据服务。本系列文章会对存储系统的测试和调试工具做一个介绍。 dd - Linux世界中的搬运工 FIO – IO压力测试工具 vdbe