由...所提交 内核脚本 — 一种用于开发 eBPF 程序、用户加载器和内核扩展的实验性编程语言 Linux 基于单一代码库。该项目正在开发中。 多内核技术一家推广分离内核/多内核架构的公司 Linux公司创始人王聪在会上谈到了KernelScript。 Linux 开源峰会基金会;项目代码已在 GitHub 上以许可证发布。 阿帕奇2.0.
eBPF(扩展伯克利数据包过滤器)是一种允许小型程序直接在内核中运行的技术。 LinuxeBPF 无需修改系统代码或影响系统稳定性,即可协助完成各种任务,从性能监控到安全性和网络优化。例如,eBPF 可以实时监控系统调用、网络流量和其他事件,从而帮助您识别性能瓶颈并优化系统。哈伯).
KernelScript 的设计理念是让 eBPF 开发比使用 C + libbpf 组合更轻松,同时又不局限于像 bpftrace 那样的跟踪功能。开发者将该语言描述为一种类型安全的 DSL,它集成了…… eGMP用户空间和内核空间开发:编译器必须从单个源文件生成 eBPF 程序、用户空间部分以及通过 kfunc 与内核模块集成的代码。
KernelScript 的既定功能:
从单个文件编译用于不同用途 — 具有 @xdp、@tc、@helper 和 @kfunc 等属性的函数会自动分配给正确的部分:XDP/TC 程序、辅助函数、内核函数或常规用户空间代码。
尾部呼叫自动化 — 开发者无需手动设置程序数组并调用 bpf_tail_call(),而是需要编写对另一个函数的常规调用,并将底层 eBPF 代码的生成留给编译器。
简化了对 dynptr 和 eBPF 映射的操作 该语言隐藏了使用 bpf_ringbuf_reserve_dynptr、bpf_dynptr_write 和类似 API 的一些手动操作。eBPF 映射可以用作可供不同程序访问的全局变量。
软件生命周期控制 — eBPF 程序以类型化值表示,据作者称,这可以防止在编译时出现错误,例如在 load() 成功之前尝试执行 attach()。
kfunc 支持 — KernelScript 允许您使用 @kfunc 属性声明在内核空间执行并可从 eBPF 程序调用的函数;承诺为它们自动生成内核模块和 BTF 注册。
支持主要 eBPF 程序类型 — README 展示了 XDP、TC、探测程序和 perf_event 的示例,包括使用硬件性能计数器。
作者特别强调,KernelScript 并不能替代内核。 Linux 或者新的 eBPF 运行时。它更像是一个编译器和高级语言,应该能够生成熟悉的底层组件:eBPF 代码、用户空间加载器、Makefile,以及必要时的内核模块。
目前,该项目应被视为早期实验项目。代码库中明确指出,KernelScript 仍处于开发阶段。 测试语法和 API 可能会发生变化,且无法保持向后兼容性,因此目前不建议在生产环境中使用。
来源: linux.org.ru
