1. bpftool 도구 설치
다른 Linux 배포판에서 bpftool은 다른 패키지에 있는 것 같습니다. 우분투 22에서 bpftool은 linux-tools-generic의 일부인 반면 raspberry pi에서는 bpftool이 별도의 패키지입니다.
우분투에서:
sudo apt install linux-tools-generic
라즈베리 파이에서:
sudo apt install bpftool
그런 다음 whereis 명령을 사용하여 설치 상태를 봅니다.
xxx@xxx-pc:~$ whereis bpftool
bpftool: /usr/sbin/bpftool /usr/share/man/man8/bpftool.8.gz
일부 배포 버전에서는 Linux에서 소스 코드를 다운로드하여 직접 설치해야 할 수도 있습니다(업데이트를 위해 소스 코드에서 설치를 시작하는 방법이 도입됨).
2. bpftool 소개
BPFTOOL은 eBPF 프로그램 및 eBPF 맵을 확인하고 작동하기 위해 Linux 커널과 함께 제공되는 도구 소프트웨어입니다. 커널 버전과 bpftool 버전에 따라 실제 사용법과 출력이 이 기사와 약간 다를 수 있습니다.
3. bpftool의 공통 기능
- sudo bpftool prog list:
시스템에 로드된 모든 eBPF 프로그램의 정보 목록을 표시한다. - bpftool net list는
커널 네트워크 하위 시스템의 eBPF 프로그램을 표시합니다. 표시 기능 외에도 다른 기능도 지원합니다. man bpftool net을 통해 지원되는 특정 기능을 확인할 수 있습니다. - bpftool 링크 목록은
활성화된 모든 링크를 표시합니다.표시 기능 외에도 다른 기능도 지원합니다.man bpftool 링크를 통해 지원되는 특정 기능을 볼 수 있습니다. - bpftool perf 목록은
시스템의 모든 raw_tracepoint, tracepoint, kprobe 첨부 파일을 표시하며 표시 기능 외에도 다른 기능도 지원합니다. man bpftool perf를 통해 특정 지원 기능을 확인할 수 있습니다. - bpftool btf 목록은
모든 BTF(BPF Type Format) 데이터를 표시합니다. 표시 기능 외에도 다른 기능도 지원합니다. man bpftool btf를 통해 지원되는 특정 기능을 볼 수 있습니다. - bpftool 맵 목록은
시스템에 로드된 모든 bpf 맵 데이터를 표시합니다.표시 기능 외에도 다른 기능도 지원합니다. man bpftool 맵을 통해 지원되는 특정 기능을 볼 수 있습니다. - bpftool 기능 프로브 dev eth0
eth0에서 지원하는 eBPF 기능을 봅니다.
4. bpftool을 사용하여 eBPF 프로그램의 실행 상태를 보는 예
기사 XDP 시작하기 - eBPF 프로그램이 브리지/레이어 2 스위치 포워딩 기능 구현 기사에서 대상 MAC에 따라 패킷을 포워딩하는 eBPF 바이트코드로 eth0 및 eth1을 로드했습니다.
- xdp_bridge_prog()라는 패킷 처리 함수
- mac_port_map이라는 지도 데이터베이스
위의 정보를 보려면 다음 두 명령을 사용하고 맵의 내용을 보려면 bpftool 맵 덤프 기능을 사용하십시오.
xxx@raspberrypi:~ $ sudo bpftool prog list | tail -n 4
xlated 64B not jited memlock 4096B
21: xdp name xdp_bridge_prog tag 610be6df09f4715b gpl
loaded_at 2023-05-31T13:57:17+0800 uid 0
xlated 704B not jited memlock 4096B map_ids 1
xxx@raspberrypi:~ $ sudo bpftool map list
1: hash name mac_port_map flags 0x0
key 8B value 4B max_entries 100 memlock 4096B
xxx@raspberrypi:~ $ sudo bpftool map dump id 1