首页 > 解决方案 > 为什么 kprobe 在 Centos 7 内核 4.16.6 上不起作用?

问题描述

我在 CentOS 7 (Linux 4.16.6)

root@host # uname -r
4.16.6-1.el7.elrepo.x86_64

文档之后,我添加了一个 kprobe 来跟踪sys_clone

root@host # grep sys_clone /proc/kallsyms
ffffffff81084c70 T sys_clone
root@host # echo 'p:testprobe sys_clone' >/sys/kernel/tracing/kprobe_events
root@host # cat /sys/kernel/tracing/kprobe_events
p:kprobes/testprobe sys_clone
root@host # cat /sys/kernel/tracing/events/kprobes/testprobe/id
1874

现在,如果我启用它,然后通过在另一个终端中运行任何命令来触发它,trace_pipe则不包含任何数据:

root@host # echo 1 > /sys/kernel/tracing/events/kprobes/testprobe/enable
root@host # cat /sys/kernel/tracing/tracing_on
1
root@host # cat /sys/kernel/tracing/events/kprobes/testprobe/enable
1
root@host # cat /sys/kernel/tracing/events/kprobes/enable
1
root@host # cat /sys/kernel/tracing/trace_pipe
^C   <-- it blocks here

内核配置看起来不错:

root@host # grep KPROBE /boot/config-4.16.6-1.el7.elrepo.x86_64
CONFIG_KPROBES=y
CONFIG_KPROBES_ON_FTRACE=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KPROBES_ON_FTRACE=y
CONFIG_KPROBE_EVENTS=y
# CONFIG_BPF_KPROBE_OVERRIDE is not set

kprobes 不工作的可能原因是什么?

标签: linuxlinux-kernelkerneltrace

解决方案


推荐阅读