我想利用性能来运行一些带有 perf 的测试,而无需运行命令,root
也无需调整/proc/sys/kernel/perf_event_paranoid
. perf 的一些错误消息说:
You may not have permission to collect stats.
Consider tweaking /proc/sys/kernel/perf_event_paranoid,
which controls use of the performance events system by
unprivileged users (without CAP_SYS_ADMIN).
The current value is 2:
-1: Allow use of (almost) all events by all users
>= 0: Disallow raw tracepoint access by users without CAP_IPC_LOCK
>= 1: Disallow CPU event access by users without CAP_SYS_ADMIN
>= 2: Disallow kernel profiling by users without CAP_SYS_ADMIN
所以我尝试通过以下方式创建一些具有相同源但不同功能集的 bash 脚本:
wrapper_no_cap.sh -> no capabilities set
wrapper_cap_ipc_lock.sh -> setcap cap_ipc_lock+eip ./wrapper_cap_ipc_lock.sh
wrapper_cap_sys_admin.sh -> setcap cap_sys_admin+eip ./wrapper_cap_sys_admin.sh
每个脚本都有相同的来源,如下所示:
#!/bin/bash
perf stat -e L1-dcache-load-misses:k seq 1 10
但是我运行的每个脚本都会给我一个结果,就好像我是一个普通用户一样(这意味着我不能计算内核事件或其他特权的东西)。就像我调用脚本时丢弃了功能一样。性能版本是4.11.ga351e9
.
这种方法有什么问题?