2022 eBPF Summit - https://ebpf.io/summit-2022/ Alexei Starovoitov
개요
eBPF 는 2013년 이후부터 socket filters, sccomp와 같은 다양한 분야에서 사용되어 왔다.
다음과 같은 목표를 세웠지만 달성되지 못하였다.
- gcc로 컴파일 -> 현재 clang으로만 사용중
- BPF verifier가 이처럼 복잡해 질것이라고는 생각하지 못하였다.
현재 BPF는 많은 관심을 받고 있으며 여러 분야에서 사용되고 있다. https://ebpf.io/applications
BPF는 2022년 현재 다음과 같은 목표를 가지고 있다.
- Rust와 BPF
- Rust는 커널의 버그를 줄이는 것이다. BPF는 Restricted된 C를 가지고 있다. Rust와 다르게 안전함을 보장하지만 한계가 있다. 둘은 비슷하지만 다른 목표를 가지고 있다. 또한 Rust는 Portable하지 않다는 문제도 가지고 있다.
- Extending Restricted C
- 점점 eBPF는 가능성을 넓히고 있다. Inline함수를 가능하게 되었으며, Bounded Loop을 허용하게 되었다. 또한 C language extension을 허용하였다.
- Symbloic Field
- LLVM이 구조체의 offset을 저장하는 것이 아니라, type과 symbloic field를 저장하게 하여서, kernel version이 달라져도 안전하게 접근할 수 있도록 하였다. 또한 kptr이라는 커널의 심볼릭한 위치를 가르키는 포인터를 도입하여 커널의 위치가 바뀌어도 가르키는 stable한 pointer를 만들고 있다. 이처럼 커널 버전이 달라도 CO-RE원칙에 따라서 eBPF프로그램을 실행 시킬 수 있도록 하는 노력들이 이루어 지고 있다.
- Lock
- eBPF의 락들이 커널의 오브젝트들의 위치를 참고하여 자연스럽게 verifier가 락을 최적화 시키도록 하도록 노력하고 있다. JHA: BPF의 Atomicity로 인하여 Lock의 구현이 힘든데, 이것은 어떻게 할 수 없을까?
- Assertion
- assert란 함수를 만들어서, verifier가 static time에 체크하는 Assert을 만들 수 있도록 하고 있다. 예를 들어서, assert(cpu_num ==16)과 같은 예시이다.