BPF的可移植性和CO-RE (Compile Once – Run Everywhere) (6)

从用户空间看,应用程序将能够通过BPF框架轻松地提供此配置。BPF框架讨论不在本文讨论范围之内,请参阅内核代码库中的runqslower 工具来展示如何使用它来简化BPF应用程序。

回顾

BPF CO-RE的目标是帮助BPF开发者使用一个简单的方式解决简单的可移植性问题(如读取结构体字段),并使用它来定位复杂的可移植性问题(如不兼容的数据结构,复杂的用户空间控制条件等)。使得开发者的BPF程序能够"一次编译–随处运行", 这是通过结合一些上述的BPF CO-RE构建块来实现的:

vmlinux.h消除了对内核头文件的依赖;

字段重定位(字段偏移,存在性,大小等)使得可以从内核中抽取数据;

libbpf提供的Kconfig外部变量允许BPF程序适应各种内核版本以及特定配置的更改;

当上述都不适合时,app提供了只读的配置和struct flavors,作为解决任何应用程序必须处理的复杂场景的最终大锤。

不需要CO-RE功能也可以成功编写,部署和维护可以支持的BPF程序,但在需要时,BPF CO-RE可提供最简单的方式来帮助解决问题。所有这些功能仍然提供了良好的可用性和熟悉的工作流程,可将C代码编译为二进制文件,并进行轻量级的分发。不再需要繁琐的编译器库并为运行时编译付出宝贵的运行时资源。 同样,也不再需要在运行时捕获琐碎的编译错误。

TIPS

相关信息可以参见官方说明:

libbpf的头文件位于内核源码的/tools/lib/bpf目录下

参考

BPF CO-RE presentation from LSF/MM2019 conference: , slides.

Arnaldo Carvalho de Melo’s presentation dives deep into BPF CO-RE and dissects the runqslower tool quite nicely.

BTF deduplication algorithm

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpjy.html