RISC-V eBPF 系列 2:bpf SYSCALL
前言 上一篇文章中介绍了 eBPF 技术的背景,本文主要围绕 bpf SYSCALL 进行介绍,包括它的使用以及具体的源码实现。
bpf SYSCALL bpf SYSCALL 是操作系统内核给用户程序提供的用于 eBPF 的编程接口。用户空间所有的 eBPF 相关函数,归根结底都是对于 bpf SYSCALL 的包装。所以直接学习它有助于我们更好理解其使用和原理。
总体来说,bpf SYSCALL 的功能主要包含两部分:
对 eBPF maps 数据的增删改查 对 eBPF 程序进行验证和加载 bpf 函数原型 #include <linux/bpf.h> int bpf(int cmd, union bpf_attr *attr, unsigned int size); bpf 函数包含 3 个参数:
cmd:本次系统调用要执行的动作,包括对 map 的增删改查以及程序的加载 attr:一个大的联合结构体,包含了执行各种操作所需要的数据 size:attr 结构的大小 eBPF maps map 是一种可以用来存储不同类型数据的通用数据结构,可以使用它在不同 eBPF 程序之间以及和用户程序之间共享数据。
types Hash-table map
查询性能好 更新是原子操作 Array map
最快的查询性能 内存是预分配的 key 必须是 4 字节 无法删除元素 更新操作不是原子操作 Program array map