繁体   English   中英

perf:为什么我没有“系统调用”计数器?

[英]perf: why don't I have “syscall” counters?

有明显一些Linux柜台perfsyscall:sys_enter_select ,但在我的系统perf list不显示任何人

其他人确实拥有这些计数器的证据如下: http//www.brendangregg.com/blog/2014-07-03/perf-counting.html

如果我运行perf top -e 'syscalls:sys_enter_*'它会说:

Can't open event dir: Permission denied
invalid or unsupported event: 'syscalls:sys_enter_*'

其他事件类型( perf list事件类型)工作正常。

perf访问系统调用计数器需要做什么? 我在x86_64上使用Linux内核和perf版本3.10。

某些perf计数器(包括所有syscall计数器)仅供root用户使用。 sudo perf list将显示所有计数器,包括syscall ,假设内核是使用CONFIG_HAVE_SYSCALL_TRACEPOINTS (请参阅Grisha Levit的答案)。

因此,要使perf top -e 'syscalls:sys_enter_*'工作,请在sudo下运行它 - 如果你不需要sudo用于其他计数器,比如cycles

你必须有一个旧版本的perf来与你硬的旧3.10内核一起使用。

在现代系统 (x86-64 Arch Linux with Linux 4.15.8-1-ARCH,以及匹配版本的perf )上, perf为您解答了这个问题

$ perf stat -e 'syscalls:sys_enter_*stat*' ls -l
event syntax error: 'syscalls:sys_enter_*stat*'
                     \___ can't access trace events

Error:  No permissions to read /sys/kernel/debug/tracing/events/syscalls/sys_enter_*stat*
Hint:   Try 'sudo mount -o remount,mode=755 /sys/kernel/debug/tracing'

Run 'perf list' for a list of valid events
...


$ ll /sys/kernel/debug/ -d
drwx------ 33 root root 0 Mar 14 00:02 /sys/kernel/debug/

有趣的是,你可以使它具有世界可读性,类似于你可以在/etc/sysctl.d/99-local.conf放置kernel.perf_event_paranoid = 0kernel.yama.ptrace_scope = 0 ,以方便调试/跟踪/分析单用户桌面,不使用root

如果内核未使用CONFIG_HAVE_SYSCALL_TRACEPOINTS构建, CONFIG_HAVE_SYSCALL_TRACEPOINTS丢失这些CONFIG_HAVE_SYSCALL_TRACEPOINTS

您可以这样检查:

# grep TRACEPOINTS "/boot/config-$(uname -r)"
CONFIG_TRACEPOINTS=y
CONFIG_HAVE_SYSCALL_TRACEPOINTS=y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM