We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
如果我们想要追踪内核的一个函数或者某一行代码,查看执行的上下文和执行情况,通用的做法是在代码或函数的执行前后 printk 打印日志,然后通过日志来查看追踪信息。但是这种方式需要重新编译内核并重启,非常麻烦。比较合理的方式是在内核正常运行时,自定义一个函数,注入到我们想要追踪的内核函数执行前后,当内核函数执行时触发我们定义的函数,我们在函数中实现获取我们想要的上下文信息并保存下来。这个自定义的函数就是 probe handler,注入 probe handler 的地方被称为探测点或者 Hook 点。
Linux内核中提供了多种 probe handler 注入机制,比如kprobe/uprobe/tracepoint等。DragonOS现在已经有了kprobe的初步支持,并且可以通过eBPF来进行使用。但这对于内核debug还是有点麻烦,而tracepoint则可以有效解决这一问题。
Tracepoint 是一个静态的 tracing 机制,开发者在内核的代码里的固定位置声明了一些 Hook 点,通过这些 hook 点实现相应的追踪代码插入,一个 Hook 点被称为一个 tracepoint。
https://www.kernel.org/doc/html/v4.19/trace/tracepoints.html https://blog.csdn.net/maybeYoc/article/details/132079443 https://www.infoq.cn/article/jh1lruqqti3gjvs5dh6b
The text was updated successfully, but these errors were encountered:
No branches or pull requests
背景
如果我们想要追踪内核的一个函数或者某一行代码,查看执行的上下文和执行情况,通用的做法是在代码或函数的执行前后 printk 打印日志,然后通过日志来查看追踪信息。但是这种方式需要重新编译内核并重启,非常麻烦。比较合理的方式是在内核正常运行时,自定义一个函数,注入到我们想要追踪的内核函数执行前后,当内核函数执行时触发我们定义的函数,我们在函数中实现获取我们想要的上下文信息并保存下来。这个自定义的函数就是 probe handler,注入 probe handler 的地方被称为探测点或者 Hook 点。
Linux内核中提供了多种 probe handler 注入机制,比如kprobe/uprobe/tracepoint等。DragonOS现在已经有了kprobe的初步支持,并且可以通过eBPF来进行使用。但这对于内核debug还是有点麻烦,而tracepoint则可以有效解决这一问题。
Tracepoint 是一个静态的 tracing 机制,开发者在内核的代码里的固定位置声明了一些 Hook 点,通过这些 hook 点实现相应的追踪代码插入,一个 Hook 点被称为一个 tracepoint。
需求
参考
https://www.kernel.org/doc/html/v4.19/trace/tracepoints.html
https://blog.csdn.net/maybeYoc/article/details/132079443
https://www.infoq.cn/article/jh1lruqqti3gjvs5dh6b
The text was updated successfully, but these errors were encountered: