[英]perf: why don't I have “syscall” counters?
有明显一些Linux柜台perf
像syscall: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 = 0
和kernel.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.