docs: Revise README files for clarity on extending kernel behavior with BPF struct_ops

This commit is contained in:
Littlefisher
2026-01-11 23:39:46 -08:00
parent 34f690385e
commit 42884e3cef
2 changed files with 4 additions and 4 deletions

View File

@@ -1,8 +1,8 @@
# eBPF 教程:使用 BPF struct_ops 扩展内核子系统
你是否曾经想过实现一项内核功能,比如一个新的网络协议或一个自定义的安全策略,但却因为编写和维护一个完整内核模块的复杂性而望而却步?设想一下,如果你可以直接 eBPF 定义一个内核子系统的操作逻辑,从而实现动态更新、安全执行和可编程控制,而这一切都无需重新编译内核或冒着系统稳定的风险,那会是怎样一种体验
你是否想过扩展内核行为——比如添加自定义调度器、网络协议或安全策略——却因为编写和维护内核模块的复杂性而望而却步?如果你可以直接 eBPF 定义这些逻辑,实现动态更新、安全执行和可编程控制,同时无需重新编译内核或担心系统稳定性呢
这就是 **BPF struct_ops** 的强大之处。这个先进的 eBPF 功能允许 BPF 程序实现内核操作结构的回调函数,实际上是让你能够插入”BPF 代码来充当一个内核子系统。这已经超越了简单的跟踪或过滤;这是关于在 BPF 实现核心的内核逻辑。例如,我们还使用它在 GPU 驱动中通过 eBPF 实现 GPU 调度和内存卸载扩展(请参阅 [LPC 2024 演讲](https://lpc.events/event/19/contributions/2168/) 和 [gpu_ext 项目](https://github.com/eunomia-bpf/gpu_ext))。
这就是 **BPF struct_ops** 的强大之处。允许 BPF 程序实现内核操作结构的回调函数,让你能够"插入"自定义逻辑来扩展内核子系统的行为。这已经超越了简单的跟踪或过滤——你现在可以用 BPF 实现核心的内核操作。例如,我们用它在 GPU 驱动中实现 GPU 调度和内存卸载扩展(参见 [LPC 2024 演讲](https://lpc.events/event/19/contributions/2168/) 和 [gpu_ext 项目](https://github.com/eunomia-bpf/gpu_ext))。
在本教程中,我们将探讨如何使用 `struct_ops` 来动态地扩展内核子系统的行为。我们不会使用常见的 TCP 拥塞控制示例。相反,我们将采用一种更基础的方法,这种方法反映了与 kfuncs 相似的可扩展性。我们将创建一个自定义的内核模块,该模块定义了一组新的、简单的操作。这个模块将充当一个占位符,为我们的 BPF 程序创建新的附加点。然后,我们将编写一个 BPF 程序来实现这些操作的逻辑。这演示了一种强大的模式:使用一个最小化的内核模块来暴露一个 `struct_ops` 接口,然后使用 BPF 来提供完整、复杂的实现。