Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions proj90-nxos-ebpf.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# proj90-nxos-ebpf
### 项目名称

在nxos中支持eBPF机制

### 项目描述

eBPF(extended Berkeley Packet Filter)。
经过重新设计,eBPF 演进为一个通用执行引擎,可基于此开发性能分析工具、软件定义网络等诸多场景。
eBPF 最早出现在 linux 3.18 内核中,此后原来的 BPF 就被称为经典 BPF,缩写 cBPF(classic BPF),
cBPF 现在已经基本废弃。现在,Linux 内核只运行 eBPF,内核会将加载的 cBPF 字节码透明地转换成 eBPF 再执行。
本项目就是为了将最简单的ebpf机制移植到nxos中来。

### 所属赛道

2022全国大学生操作系统比赛的“OS功能挑战”赛道

### 参赛要求

- 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2022年春季学期或之后本科毕业的大一~大四的学生)
- 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
- 请遵循“2022全国大学生操作系统比赛”的章程和技术方案要求



### 项目导师

胡自成-jasonhu

* github https://github.com/hzcx998

* email 2323168280@qq.com



### 难度

本项目难度还是比较大,因为要在内核实现一个ebpf字节码解析的虚拟机,还要绑定一些功能函数,使得虚拟机可以去调用内核的一些功能。
而且当用户态程序载入内核时,需要实现一个验证器来验证代码得正确性,及时运行失败也不会导致内核崩溃才行。
除此之外,用户态程序的程序还要用gcc/llvm的特殊的编译器参数来把C代码生成为ebpf字节码,这一整套流程执行下来也需要化
很多时间才能去研究清楚。

### 特征

1. ebpf作为一个linux内核很火的子系统。
2. ebpf实现了内核动态运行用户态代码,而不需要以插入模块的方式。
3. ebpf作为内核虚拟机实现。
4. ebpf强大的验证器在代码真正执行之前就能检查出代码的可行性。


### 文档

1. [eBPF官网](https://ebpf.io/zh-cn/)
2. CSDN和知乎等地方可以找到一些中文的资料

### License

本项目遵循Apache 2.0开源协议。


## 预期目标

1. 能够实现ebpf的最简单的基本功能,加载ebpf字节码到内核,并使用验证器验证,通过后执行字节码。
2. 能够通过ebpf去对内存管理,调度管理等功能的简单的性能检测。
3. 不用实现对文件系统,网络等功能的性能探测。