파다 평범일상

libbpf 정의 및 라이프사이클 - libbpf (1) 본문

컴퓨터 IT/얕은 컴퓨터 지식과 프로그래밍

libbpf 정의 및 라이프사이클 - libbpf (1)

파다 평범일상 2024. 4. 26. 16:58
반응형

libbpf 란

컴파일된 BPF 객체 파일을 가져와 준비하고 Linux 커널에 로드하는 BPF 로더가 포함된 C 기반 라이브러리.

  • Linux User Area 프로그램이 BPF 프로그램과 상호 작용할 수 있도록 상위 수준 및 하위 수준 API을 제공함
  • BPF skeleton 파일은 Linux User Area 프로그램이 전역 변수에 엑세스하고, 프로세스를 단순화 함
  • BPF helper를 정의하여 개발자가 BPF 코드 작성을 단순화 할 수 있도록 함
  • BPF CO-RE 메커니즘을 지원하여 한 번의 컴파일로 다양한 커널버전에서 실행될 수 있도록 함

BPF Application Lifecycle

BPF Application은 하나 이상의 BPF Program, BPF Maps, Global Variables들로 구성되어 지며, Global Variables들은 BPF Program에서 서로 공유하며 사용할 수 있다.

 

Open phase

이 단계에서는 libbpf는 BPF Object File을 파싱하고 BPF Program, BPF Maps, Global Variables를 검색한다. 이후 BPF 앱이 실행되며 Linux User Area Application은 모든 개체를 생성하고 로드하기 전에 조정을 할 수 있다.

 

Load phase

이 단계에서는 libbpf는 BPF Maps를 생성하고, BPF Program을 검증하며 커널에 로드한다. 검증후 로드하지만, 아직까지는 실행되지 않은 상태이다.

 

Attachment phase

이 단계에서는 libbpf는 BPF Program을 Linux User Area Application의 다양한 부분(Trace Point, kprobe, cgroup hook, 네트워크 패킷 처리 파이프라인 등)에 연결한다. 또한, BPF Maps를 업데이트를 하는 등의 유용한 작업을 수행한다.

 

Tear down phase

이 단계에서는 libbpf는 BPF Program을 분리하여 커널에서 언로드를 수행한다. BPF Maps는 Destroy되어지며, BPF Application은 Free되어진다.

Comments