perf: почему у меня нет счетчиков "системных вызовов"? - PullRequest
0 голосов
/ 10 мая 2018

Очевидно, в 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? Я использую ядро ​​Linux и perf версию 3.10 на x86_64.

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Некоторые perf счетчики, включая все syscall, доступны только пользователю root. sudo perf list покажет все счетчики, включая syscall, при условии, что ядро ​​построено с CONFIG_HAVE_SYSCALL_TRACEPOINTS (см. Ответ Гриши Левита об этом).

Итак, чтобы заставить perf top -e 'syscalls:sys_enter_*' работать, запустите его под sudo - даже если вам не нужно sudo для других счетчиков, таких как cycles.

0 голосов
/ 11 мая 2018

Вы должны иметь старую версию perf, чтобы использовать старое ядро ​​3.10.

В современной системе (x86-64 Arch Linux с 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/

Интересно, что вы можете сделать его читаемым во всем мире, подобно тому, как вы можете поместить kernel.perf_event_paranoid = 0 и kernel.yama.ptrace_scope = 0 в /etc/sysctl.d/99-local.conf для удобной отладки / трассировки / профилирования на однопользовательском рабочем столе без использования root всех время.

0 голосов
/ 10 мая 2018

Они будут отсутствовать, если ядро ​​не было собрано с CONFIG_HAVE_SYSCALL_TRACEPOINTS.

Вы можете проверить так:

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