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组建我们的开发环境。注意,只支持X86的CPU(Windows, Linux或Mac)。苹果M芯片不支持。
保存虚拟机描述文件Vagrantfile:
Vagrant.configure('2') do |config|
config.vm.define 'bpf' do |bpf|
bpf.vm.provider 'virtualbox' do |vb|
vb