Part 1 概述
1. 背景
BPF 技术被列为近些年 Linux 内核领域最火热的新领域之一。它成功的给 Linux 内核赋予了少量的动态可编程性,可以在 Linux 内核运行时,实时修改内核的行为,但不需要重新编译和重启内核。据此,BPF 在 Linux 世界中:
- 网络
- 可观测性
- 安全
三大领域大放异彩,学习好 BPF 技术,对于 Linux 内核和应用开发者来说,是一件非常有意义的事情。
2. 什么是 BPF?
BPF 在 Linux 内核中,被实现为一个非常精简的虚拟机,具有几乎性能无损的执行效率。我们可以用类似 C 语言的语法,编写代码,编译成可以在 BPF 虚拟机中运行的汇编代码,实现其强大的逻辑处理能力。
今天,我们将从 Hello World 开始,带您进入 BPF 的世界。
3. 开始 BPF
按照计算机程序设计语言学习的传统,我们从经典的 Hello World 程序开始我们的 eBPF 开发之旅。首先简单对比下标准 C 程序和 eBPF 程序的异同。
C 语言程序
# HelloWorld.c
#include <stdio.h>
int main()
{
printf("HelloWorld\n");
return 0;
}
# C 语言的编译与运行
eBPF 程序
# HelloWorld.bpf.c
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
int helloworld(void *ctx)
{
bpf_printk("Hello world!\n");
return 0;
}
# eBPF 程序的编译与运行
eBPF 的编译、加载、运行比标准 C 程序要麻烦一些。接下来会一步一步介绍全流程。
Part 2 开发环境
我们使用 vagrant + virtualbox +Ubuntu22.04 组建我们的开