mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-10-29 11:45:17 +08:00
Polish fsession background prose
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
假设一个文件服务出现了读延迟尖峰,应用层计时只能告诉你请求变慢了,却无法区分是内核读路径阻塞还是用户态逻辑耗时。有用的问题是:哪个线程发起了读操作、请求了多少字节、调用返回了什么、这一次 `vfs_read` 花了多长时间。
|
||||
|
||||
本教程属于 eBPF Tutorial by Example 系列。eBPF 的基本工作方式是:用户空间将一个经过验证器检查的追踪程序加载并附加到内核函数上,BPF 侧测量内核执行过程并将选中的事件发送回用户空间。
|
||||
本教程属于 eBPF Tutorial by Example 系列。用户空间将经过验证器检查的追踪程序加载并附加到内核函数上,BPF 侧测量内核执行过程并将选中的事件发送回用户空间。
|
||||
|
||||
当一个追踪场景需要同时观察函数进入和返回时,传统做法是编写独立的 fentry 和 fexit 程序,用一个按线程索引的 map 将时间戳从进入传递到返回。Linux 7.0 引入了 fsession,它让同一个 BPF 程序在被追踪函数的进入和返回阶段各执行一次,并通过 `bpf_session_cookie(ctx)` 提供一个 8 字节的调用级暂存区。本教程的 `fsession_latency` 利用这一能力,在 `vfs_read` 进入时记录时间戳、返回时计算延迟,按 TGID 和阈值过滤后上报慢读事件。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user