mirror of
https://github.com/eunomia-bpf/bpf-developer-tutorial.git
synced 2026-03-20 11:56:22 +08:00
docs: Revise README files for clarity on extending kernel behavior with BPF struct_ops
This commit is contained in:
@@ -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 来提供完整、复杂的实现。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user