Skip to content

Commit a3b967f

Browse files
committed
ebpf
1 parent 283e572 commit a3b967f

3 files changed

+52
-2
lines changed

_posts/2025-02-15-eBPF事件触发.md

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# `eBPF`程序分类
2+
3+
## 跟踪类`eBPF`程序
4+
5+
主要用于从系统中提取跟踪信息,进而为监控,排错、性能优化等提供数据支持
6+
7+
8+
9+
## 网络类`eBPF`程序
10+
11+
网络类`eBPF` 程序,主要对网络数据包进行过滤和处理,进而实现网络的观测、过滤、流量控制以及性能优化等各种丰富的功能。在触发位置的不同,网络类`eBPF`又可以分为:`XDP`(高速数据路径)程序,`TC`(流量控制)程序,套接字程序、以及`cgroup`程序。
12+
13+
### `XDP`(高速数据路径)程序
14+
15+
`BPF_PROG_TYPE_XDP` ,在网络驱动程序刚刚收到数据包的时候触发执行。由于无需通过繁杂的内核协议栈,`XDP`程序可以用来实现高性能的网络处理方案,常用于`DDoS`防御、防火墙、4层负载均衡等场景
16+
17+
需要注意的是`XDP`不是绕过了内核协议栈,它只是在内核协议栈之前处理了数据包,而处理过了的数据包还可以正常通过内核协议栈继续处理。
18+
19+
根据网卡和网卡驱动是否原生支持`XDP` 程序,`XDP` 程序又分为以下三种模式:
20+
21+
- 通用模式:不需要网卡和网卡驱动支持,`XDP` 程序像是常规的网络协议栈一样运行在内核中,性能比较差,一般用于测试
22+
- 原生模式:需要网卡驱动程序的支持,`XDP` 程序在网卡驱动程序的早期路径运行
23+
- 卸载模式:需要网卡固件支持`XDP`卸载,`XDP`程序直接运行在网卡上,不需要消耗主机的CPU资源,具有极好的性能。
24+
25+
无论那种模式,`XDP` 程序在处理过网络包之后,都需要根据`eBPF` 程序执行结果,来决定数据包的去处。下面是5中`XDP` 程序的执行结果
26+
27+
- `XDP_DROP`:丢包。数据包尽早丢弃可以减少CPU处理时间,因为用于防火墙、DDoS防御等丢弃非法数据包的场景。
28+
- `XDP_PASS`: 内核协议栈接受到网络包,按照正常流程继续处理。
29+
- `XDP_TX` / `XDP_REDIRECT`: 数据包在`XDP`程序修改后转发到网卡中,继续按正常的内核协议栈流程处理,常用于负载均衡。
30+
- `XDP_ABORTED``XDP` 程序运行出错,数据包丢弃并记录错误行为,以便排查。
31+
32+
33+
34+
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# 跟踪短时进程
2+
3+
4+
5+
## 使用bpftrace
6+
7+
~~~bash
8+
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_execve,tracepoint:syscalls:sys_enter_execveat { printf("%-6d %-8s", pid, comm); join(args->argv);}'
9+
~~~
10+
11+
12+
13+
## 使用BCC
14+

_posts/2025-2-13-第一个ebpf程序.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ excerpt_separator: "#"
2323

2424
sudo apt-get -y make clang llvm libelf-dev libbpf-dev bpfcc-tools
2525
sudo apt-get -y linux-headers-$(uname -r)
26-
26+
-
2727
# 编写好代码之后,执行: python hello.py. 发现 notfound bcc 这个包。
2828
pip install bcc --use-pep517
2929

@@ -49,6 +49,8 @@ excerpt_separator: "#"
4949
~~~
5050
5151
~~~python
52+
#!/usr/bin/env python3
53+
# 添加shebang 行,告诉系统,使用python3来运行这个脚本
5254
# hello.py
5355
from bcc import BPF
5456
@@ -60,5 +62,5 @@ excerpt_separator: "#"
6062
~~~
6163

6264

63-
65+
6466

0 commit comments

Comments
 (0)