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)과 같은 예시이다.