Skip to content
New issue

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

feat(trace): 实现tracepoint机制 #1019

Open
Godones opened this issue Oct 30, 2024 · 0 comments
Open

feat(trace): 实现tracepoint机制 #1019

Godones opened this issue Oct 30, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@Godones
Copy link
Contributor

Godones commented Oct 30, 2024

背景

如果我们想要追踪内核的一个函数或者某一行代码,查看执行的上下文和执行情况,通用的做法是在代码或函数的执行前后 printk 打印日志,然后通过日志来查看追踪信息。但是这种方式需要重新编译内核并重启,非常麻烦。比较合理的方式是在内核正常运行时,自定义一个函数,注入到我们想要追踪的内核函数执行前后,当内核函数执行时触发我们定义的函数,我们在函数中实现获取我们想要的上下文信息并保存下来。这个自定义的函数就是 probe handler,注入 probe handler 的地方被称为探测点或者 Hook 点。

Linux内核中提供了多种 probe handler 注入机制,比如kprobe/uprobe/tracepoint等。DragonOS现在已经有了kprobe的初步支持,并且可以通过eBPF来进行使用。但这对于内核debug还是有点麻烦,而tracepoint则可以有效解决这一问题。

Tracepoint 是一个静态的 tracing 机制,开发者在内核的代码里的固定位置声明了一些 Hook 点,通过这些 hook 点实现相应的追踪代码插入,一个 Hook 点被称为一个 tracepoint。

需求

  • 学习tracepoint的相关知识,理解其运行过程
  • tracepoint在Linux中是一个比较复杂的设计和实现,因此我们可以一步步进行实现
  • 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

@Godones Godones added the enhancement New feature or request label Oct 30, 2024
@dragonosbot dragonosbot added the needs-triage 这个问题可能需要分类处理。如果已经完成分类,请移除它。 label Oct 30, 2024
@fslongjin fslongjin removed the needs-triage 这个问题可能需要分类处理。如果已经完成分类,请移除它。 label Oct 30, 2024
@fslongjin fslongjin removed their assignment Oct 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants