代码之家  ›  专栏  ›  技术社区  ›  John Zwinck

性能:为什么我没有“syscall”计数器?

  •  5
  • John Zwinck  · 技术社区  · 6 年前

    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_*'
    

    其他事件类型(在 性能列表 )工作正常。

    要访问中的syscall计数器,需要执行哪些操作 性能 ?我在x86\u 64上使用Linux内核和perf版本3.10。

    3 回复  |  直到 6 年前
        1
  •  5
  •   John Zwinck    6 年前

    一些 perf 计数器,包括所有 syscall 只有根用户才能使用。 sudo perf list 将显示所有计数器,包括 系统调用 假设内核是用 CONFIG_HAVE_SYSCALL_TRACEPOINTS (参见Grisha Levit对此的回答)。

    因此 perf top -e 'syscalls:sys_enter_*' 工作,在下面运行 sudo --即使你不需要 苏多 对于其他计数器,如 cycles

        2
  •  3
  •   Peter Cordes    6 年前

    您必须有旧版本的 perf 与您的硬壳旧3.10内核一起使用。

    论现代制度 (x86-64 Arch Linux与Linux 4.15.8-1-Arch以及 性能 ), 性能 为您回答此问题 :

    $ 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 总是

        3
  •  2
  •   Grisha Levit    6 年前

    如果内核不是用 CONFIG_HAVE_SYSCALL_TRACEPOINTS

    您可以这样检查:

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