当内核触发事件时,BPF虚拟机能够运行相应的BPF程序指令。但是并不意味着BPF程序能访问内核触发的所有事件。将BPF程序加载到BPF虚拟机时,你需要确定程序的具体类型。内核会根据程序类型决定程序在何处被触发。BPF验证器也会根据程序类型确定程序可以访问的帮助函数。程序类型也决定了程序实现的接口。接口决定了程序访问适合的数据类型,以及是否可以直接访问网络数据包。
本章将介绍如何编写第一个BPF程序。并指导你了解BPF程序的不同类型(截至本书编写时你能创建的类型)。多年来,内核开发人员一直在添加可供BPF程序附加的不同入口。而且这项工作仍在继续,他们每天都在寻求BPF程序使用的新场景。本章我们将集中关注一些最有用的程序类型,旨在让你了解我们可以使用BPF做什么。后续我们将通过更多的示例来介绍如何编写BPF程序。
本章还将介绍BPF验证器在运行程序中所扮演的角色。BPF验证器可以验证代码是否可以被安全执行,并保证程序不会导致意外结果(例如,内存耗尽或内核崩溃)。现在,我们先来了解下编写BPF程序的基础知识。