멋진 EBPF
EBPF와 관련된 멋진 프로젝트의 선별 된 목록.
BERKELEY 패킷 필터 에서와 같이 BPF는 사용자 공간에서 전달되는 커널 내 가상 머신 실행 프로그램입니다. 처음에 BSD에서 구현 된 다음 Linux, The (현재 레거시) "클래식 BPF"또는 CBPF 머신은 사용자 공간에 대한 쓸모없는 사본을 피하기 위해 커널의 패킷을 필터링하기 위해 TCPDUMP와 같은 도구와 함께 사용됩니다. 보다 최근에 Linux의 BPF 인프라는 완전히 재 작업되어 "확장 된 BPF"또는 EBPF에 생명을 주었으며, 이는 새로운 기능 (안전 및 종료 점검, 프로그램 용 JIT 컴파일, 지속적인지도, 표준 라이브러리, 하드웨어 오프로드 지원 등)을 얻었습니다. 매우 낮은 수준 (XDP)의 패킷, 시스템에서 이벤트 추적 및 모니터링 또는 CGROUP에 대한 액세스 제어를 시행하는 패킷은 EBPF가 성능, 프로그래밍 및 유연성을 가져 오는 몇 가지 예일뿐입니다.
최근 Cilium은 EBPF.io라는 EBPF에 관한 훌륭한 웹 사이트를 출시했습니다. EBPF에 대한 소개 및 관련 프로젝트에 대한 링크와 함께이 목록과 유사한 목적을 제공합니다.
참고 : EBPF는 흥미 진진한 기술이며 생태계는 끊임없이 발전하고 있습니다. 우리 는 이 멋진 목록을 최신 상태로 유지하고 어쨌든 우리가 할 수있는 신호 대 잡음 비율을 향상시키는 데 도움을주고 싶습니다. 피드백을 남겨주세요.
내용물
- 참조 문서
- 기사 및 프레젠테이션
- 튜토리얼
- 예
- EBPF 워크 플로 : 도구 및 유틸리티
- EBPF 관련 프로젝트
- 보안의 EBPF
- 코드
- 개발 및 커뮤니티
- EBPF의 다른 리소스 목록
- 승인
참조 문서
EBPF 필수 요소
- EBPF.IO- 주요 관련 프로젝트 및 지역 사회 자원 목록을 포함하여 EBPF의 모든 기본 사항을 발견하는 관문.
- CILIUM의 BPF 및 XDP 참조 가이드 - EBPF의 대부분의 기능 및 측면에 대한 심층적 인 문서.
커널 문서
- BPF 문서 - Linux 커널과 함께 제공되는 BPF 관련 문서의 색인.
- Linux/Documentation/Networking/Filter.rst -EBPF 사양 (다소 구식; 정보는 여전히 유효하지만 철저하지 않아야합니다).
- BPF Design Q & A- BPF 인프라의 결정에 대한 질문에 자주 질문을했습니다.
- BPF 서브 시스템과 상호 작용하는 방법 - EBPF 개발에 기여하는 것에 대한 자주 묻는 질문.
수동 페이지
-
bpf(2) - bpf() 시스템 호출에 대한 수동 페이지, BPF 프로그램 및 사용자 공간에서지도를 관리하는 데 사용됩니다. -
tc-bpf(8) - 예제 명령 및 코드 샘플을 포함하여 TC와 함께 BPF 사용에 대한 수동 페이지. -
bpf-helpers(7) MAN PAGE- BPF 표준 라이브러리를 형성하는 커널 헬퍼 기능 설명.
다른
IO Visor의 비공식 EBPF 사양 - EBPF 구문 및 작동 코드 요약.
Jesper Dangaard Brouer의 문서 - 진행중인 작업, 기부금 환영.
David Miller에서 XDP-Newbies 메일 링리스트까지 이메일 :
- bpf.h와 당신 ...
- 맥락 적으로 말하면 ...
- BPF 검증기 개요
커널 버전 당 BPF 기능 목록
기사 및 프레젠테이션
일반 EBPF 프레젠테이션 및 기사
EBPF를 처음 사용하는 경우이 섹션에서 "소개"로 묘사 된 링크를 시도해 볼 수 있습니다.
XDP 및 EBPF에 대한 간단한 소개 - EBPF의 기능에 대한 컨텍스트, 역사 및 세부 사항을 제공하는 접근 가능한 소개.
EBPF 개요 - EBPF 인프라의 여러 측면을 다루는 Adrian Ratiu의 블로그 시리즈 :
- 1 부 : 소개
- 2 부 : 기계 및 바이트 코드
EBPF에 대한 Ferris Ellis의 블로그 게시물 - EBPF에 대한 몇 가지 게시물이 있습니다.
- 1 부 : 과거, 현재 및 미래
- 2 부 : SYSCALL 및 MAP 유형
BPF 참조 가이드 - BCC 저장소의 BPF C 및 BCC Python Helpers에 대 한.
BPF 및 XDP를 사용하여 커널의 네트워킹 데이터 경로를 프로그래밍 할 수있게합니다. EBPF 및 XDP (주로 네트워크 처리 용)에 대한 모든 기본 사항을 다루는 슬라이드 세트입니다.
BSD 패킷 필터 - 주로 추적 측면을 다루는 소개.
BPF : 추적 등 - 주로 추적 측면을 다루는 소개.
LINUX BPF SUPERPOWERS- 주로 추적 측면을 다루는 소개, 첫 번째 부분은 불꽃 그래프를 사용합니다.
IO Visor- 또한 IO Visor 프로젝트도 소개합니다.
BPF- 커널 내 가상 머신 - EBPF의 저자의 프레젠테이션.
확장 된 BPF 확장 - BPF 개발에 관한 2014 년부터 블로그 게시물과 EBPF 프로그램을 소켓에 연결하여 상태 가득한 소켓 필터링의 예를 사용하여 수행 할 수있는 작업을 보여줍니다.
Greg Marsden은 EBPF에 대한 문서를 작성했습니다.
- 프로그램 유형 투어 - BPF 프로그램 유형에 대한 모든 기존 후크에 대한 설명 및 관심사.
- BPF 헬퍼 기능 - EBPF 프로그램 내에서 호출 할 수있는 커널 기능 검토.
- 사용자 공간과 통신 - BPF가 사용자 공간과 통신하는 방법 -BPF 맵, Perf Events, BPF_TRACE_PRINTK.
- BPF 프로그램 구축 - BPF 프로그램을 구축하기위한 환경 설정.
- BPF 바이트 코드 및 BPF 검증 자 - BPF는 어떻게 프로그램이 안전하도록 보장합니까?
- 패킷 변환을 수행하기 위해 BPF를 사용하여 패킷 변환에 대한 하나의 EBPF 사용.
EBPF를 통한 Linux 커널 관찰 가능성 - EBPF의 기본 사항을 다루는 블로그 게시물과 코드 샘플이 커널에 최소 EBPF 프로그램을 빌드하고로드하는 방법에 대한 코드 샘플.
EBPF- 프로그래머의 관점에서 - EBPF의 기본 사항과 EBPF 프로그램 작성을 시작하는 방법을 설명하는 짧은 논문.
EBPF에 대한 CloudFlare의 블로그 게시물 - 네트워킹 사용 사례 및 EBPF의 저수준 측면에 대한 다른 블로그 게시물.
Linux 확장 BPF (EBPF) 추적 도구 - EBPF를 사용한 성능 분석 도구의 예제에 대한 심층적 인 정보 모음. 페이지 끝에 다른 리소스에 대한 섹션도 포함되어 있습니다.
EBPF에 대한 초보자 안내서 - 다양한 라이브러리 및 프로그램 유형을 사용하여 EBPF 프로그래밍을 소개하는 일련의 라이브 코딩 토크 및 동반 코드 예제.
BPF 내부
Daniel Borkmann은 EBPF의 내부를 다루는 몇 가지 프레젠테이션과 논문, 특히 TC와의 사용에 관한 논문을 만들었습니다.
- EBPF 및 XDP 연습 및 최근 (2017) 업데이트
- TC의 CLS_BPF에 대한 고급 프로그래밍 및 최근 업데이트 - EBPF에 대한 세부 사항, 터널링 및 캡슐화 사용, 직접 패킷 액세스 등.
- CLS_BPF/EBPF NETDEV 1.1-이 TC 워크숍의 일부 이후 업데이트됩니다.
- CLS_BPF를 사용하여 TC 분류기를 완전히 프로그래밍 할 수있는 경우 -EBPF 소개 (지도 관리, 테일 콜, 검증 자)를 포함하여 EBPF 소개. 전체 용지는 여기에서도 제공됩니다.
- Linux TC 및 EBPF
IO 바이저 블로그
Linux Networking은 Linux Networking Internals, EBPF에 대한 부분이 있습니다.
커널 추적
- EBPF 및 BPFTRACE를 사용하여 Linux에서 전체 시스템 동적 추적 - 사용 가능한 트레이스 포인트를 나열하는 것에서부터 BPFTRACE 프로그램 실행에 이르기까지 EBPF로 추적에 대한 자세한 소개.
- EBPF와 커널 추적 -KPROBES, UPROBES, FTRACE를 만나십시오.
- Linux 커널 추적-SystemTap, Kernelshark, Trace-CMD, LTTNG, Perf-Tool, Ftrace, Hist-Trigger, Perf, 기능 추적기, TracePoint, Kprobe/Uprobe 등.
- Brendan Gregg의 블로그, 특히 Linux BPF SuperPowers 기사.
XDP
Express Data Path- XDP에 대한 매우 액세스 가능한 소개로 패킷을 처리하는 방법을 보여주는 샘플 코드를 제공합니다.
기술 용지의 모든 XDP 세부 사항 : The Express Data Path : 운영 체제 커널의 빠른 프로그래밍 가능한 패킷 처리, Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern 및 David Miller는 모두 필수 EBPF 및 XDP 대조업 자입니다.
XDP에 대한 진행중인 문서
BPF 및 XDP 참조 안내서 - 실륨 프로젝트의 안내서.
XDP 프로젝트 개요
Express Data Path (XDP) - XDP에 대한 첫 번째 프레젠테이션.
BOF- BPF는 무엇을 할 수 있습니까?
Express Data Path- MLX4 드라이버로 얻은 일부 벤치 마크 결과가 포함되어 있습니다.
Jesper Dangaard Brouer는 XDP의 내부를 설명하는 여러 세트의 슬라이드를 가지고 있습니다.
- XDP - Express Data Path, 소개 및 향후 사용 사례 - Linux 커널의 DPDK와의 싸움. XDP에 대한 향후 계획 (이 글로) 및 DPDK와의 비교.
- 네트워크 성과 워크숍 - XDP 내부 및 예상 진화에 대한 추가 힌트.
- XDP - DDOS 보호에 사용되는 Express Data Path- XDP에 대한 세부 사항 및 사용 사례, 벤치 마크 결과와 벤치마킹을위한 코드 스 니펫 및 EBPF/XDP를 사용한 기본 DDOS 보호 (IP 블랙리스트 체계 기반).
- 메모리 vs. 네트워킹, 메모리 병목 현상 - 도발 및 수정 - XDP 개발자가 직면 한 현재 메모리 문제에 대한 고급 세부 사항.
- 우리의 나머지 사람들을위한 XDP -EBPF를 시작하고 정상적인 인간을위한 XDP를 시작하는 방법. 또한 Julia Evans가 블로그에 요약했습니다.
- XDP는 이제 리디렉션 - XDP, 특히 리디렉션 동작에 대한 업데이트를 사용하여 이제 XDP입니다.
XDP 워크숍 - 소개, 경험 및 향후 개발 (비디오)
Linux의 고속 패킷 필터링 - Linux의 패킷 필터링, 커널의 패킷 처리, 커널의 패킷 처리, 커널 바이 패스, XDP 및 EBPF.
초당 천만 패킷을 삭제하는 방법 - CloudFlare의 블로그 게시물은 패킷 필터링에 XDP 사용으로의 이동에 대해 이야기합니다.
AF_XDP
- AF_XDP- AF_XDP 주소 패밀리에 대한 커널 문서.
- AF_XDP를 사용하여 Linux에서 빠른 패킷 처리
bpfilter
- 커널 커뮤니티가 iptables를 BPF로 대체하는 이유는 무엇입니까? -EBPF와 BPFilter의 동기에 대한 실륨의 블로그 게시물, EBPF 및 BPFilter를 사용하는 몇 가지 예와 다른 프로젝트에 대한 링크가 있습니다.
- BPFILTER : EBPF 소스가 장착 된 Linux 방화벽 - Quentin Monnet의 EBPF에 대한 배경과 BPFilter를 iptables와 비교 한 대화에서 슬라이드.
BTF
- BPF 유형 형식 (BTF) - BTF에 대한 커널 문서, 사용 방법을 설명합니다.
- BTF 유형 정보로 Linux 커널 향상 - BTF로 수행 된 작업에 대한 설명을 통해 BPF 프로그램에 대한 디버깅 정보를 제공합니다.
- BTF (BPF 유형 형식)-유용한 코드 삽화와 실습 예제가 풍부한 커뮤니티 작성된 뉴스 레터.
CBPF
- BSD 패킷 필터 : 사용자 수준 패킷 캡처를위한 새로운 아키텍처 - (클래식) BPF에 대한 오리지널 용지.
- BPF에 대한 FreeBSD 매뉴얼 페이지
- Linux 'Packet MMAP (2), BPF 및 NetSniff-NG
- TC 및 CLS BPF : BPF로 분류하는 가벼운 패킷
- Cloudflare의 BPF 도구 소개 -IPTables 용
xt_bpf 모듈을 사용하여 BPF 바이트 코드 사용. - libpcap 필터 구문
하드웨어 오프로드
- EBPF/XDP 하드웨어에 대한 하드웨어 오프로드 스마트 닉 - TC 또는 XDP (Linux Kernel 4.9+)가있는 EBPF 용 하드웨어 오프로드 (Netronome).
- 포괄적 인 XDP 오프로드 --- 에지 케이스 처리-위의 주제에 대한 업데이트.
- HBPF- 하드웨어의 EBPF- FPGAS 용 EBPF CPU.
- OpenCSD EBPF SSD 오프로드 - 퓨즈 LFS 파일 시스템이있는 QEMU (Computational Storage Simulation) 플랫폼 구역 네임 스페이스를위한 Fuse LFS 파일 시스템 NVME SSDS Compute Kernel Offloading을 사용하는 UBPF를 사용하여 모든 사용자 공간에서.
- DELILAH : 컴퓨팅 스토리지의 EBPF -OFFLOAD -DELILAH는 EBPF 오프로드를 위해 스토리지 장치로 내장 된 CSP (Computational Storage Processor)입니다.
튜토리얼
- BCC 참조 안내서 - BCC 및 EBPF 사용을 시작하기위한 많은 점진적인 단계는 주로 추적 및 모니터링을 중심으로합니다.
- BCC Python Developer Tutorial- BCC와 함께 제공되지만 17 개의 "수업"에 걸쳐 Python 비트를 목표로합니다.
- LIBBPF-Bootstrap을 사용하여 BPF 애플리케이션을 구축하면 Co-Re, Global Variable 및 Ring Buffer와 같은 기능을 사용하여 최소 또는 고급 템플릿 (맵 및 프로그램을위한 커널 측 및 사용자 공간 관리)을 부트 스트랩 할 수 있습니다.
- EBPF를 사용하여 Pure C로 OpenSnoop을 작성하는 방법 - EBPF 프로그램을 작성하는 방법에 대한 철저한 연습, 먼저 BPF () SYSCALL 만 사용한 다음 LIBBPF 라이브러리를 재현 가능한 코드 예제로 사용했습니다.
- Linux 추적 워크샵 자료 - 추적을위한 여러 BPF 도구를 사용하는 것이 포함됩니다.
- Linux Tracepoints, Perf 및 EBPF를 사용하여 패킷 여행 추적 - PERT 및 BCC 프로그램에 대한 핑 요청 및 답변 문제 해결.
- Open NFP 플랫폼 - Netronome에서 운영하는 Open NFP 플랫폼 : EBPF 오프로드 시작 안내서를 포함하여 네트워크 관련 EBPF 사용 사례를위한 일부 자습서.
- 우리의 나머지 사람들을위한 XDP- XDP로 시작할 워크숍의 첫 번째 버전.
- 우리의 나머지 사람들을위한 XDP - 새로운 내용이있는 두 번째 판.
- IP (iproute2) 명령을 사용하여 XDP 프로그램을로드하십시오
- XDP 실무 자습서 - XDP로 패킷을 처리하는 방법을 배우기위한 진보적 인 (3 단계의 난이도) 자습서.
- 모든 추적은 BPF에 속합니다. LLVM 라이브러리와 C ++ 응용 프로그램의 추적 기능을 통합하기위한 단계별 연습입니다.
- BPF/XDP를 사용한 방화벽 : 예제 및 딥 다이브 - TC 및 XDP를 사용하여 기본 방화벽을 구축하는 간단한 가이드.
- EBPF에 대한 깊은 다이빙 : 효율적인 DNS 모니터링 작성. - 소켓 필터 계층에서 DNS 요청을 캡처하는 데 사용되는 방법에 대한 자세한 설명.
- EBPF 개발자 튜토리얼 - 예제별로 EBPF 학습 - EBPF 기본 사항으로 시작하고 20 개 이상의 실습 튜토리얼 및 예제를 사용하여 고급 주제로 진행하십시오. LIBBPF 및 CO-RE의 성능, 네트워킹 및 보안을 다룹니다. 중국어와 영어로 제공됩니다.
- EBPF에서 성능 회귀 분석-Rust로 작성된 클라이언트 및 커널 EBPF 코드를 모두 벤치마킹하기위한 단계별 안내서.
- EBPF의 루프 및 반복자 - EBPF에서 루프 및 반복하는 모든 방법에 대한 뉴스 레터.
- EBPF가 실시간 SSL/TLS 암호화 트래픽에 어떤 통찰력을 제공 할 수 있습니까? -EBPF가 암호화 된 네트워크 트래픽을 관찰하는 방법을 단계별로드하십시오.
- EBPF가 문제가되기 전에 Redis 메시지 패턴을 감지 할 수 있습니까? -단계별 가이드는 EBPF가 클라이언트와 서버 간의 Redis 통신을 관찰하는 방법.
- EBPF 및 GO를 사용한 투명 프록시 구현-EBPF를 사용하여 투명한 프록시를 구현하는 방법에 대한 단계별 안내서.
- EBPF 기반로드 밸런싱-EBPF가 SO_REUSEPORT TCP 옵션을 통해 동일한 포트에서 듣는 서비스에 대해 사용자 정의로드 밸런싱을 유추 할 수있는 방법을 알아보십시오.
- 단위 테스트 EBPF 프로그램 - LIBBPF를 사용하여 EBPF 프로그램을 테스트하는 방법을 알아보십시오.
- EBPF를 사용한 로컬 소켓 통신 가속화 - EBPF가 어떻게 지역 소켓 통신을 최대 30%까지 속도를 높일 수 있는지 알아보십시오.
예
- 커널 트리의 Linux/Samples/BPF/ - 일부 샘플 EBPF 프로그램.
- Linux/Tools/Testing/SelfTests/BPF- 커널 트리 : Linux BPF SelfTests, 많은 EBPF 프로그램이 있습니다.
- 프로토 타입 커널/커널/샘플/BPF-Jesper Dangaard Brouer의 프로토 타입 커널 저장소에는 커널 인프라 외부에서 컴파일 할 수있는 몇 가지 추가 예제가 포함되어 있습니다.
- iproute2/examples/bpf/ - 일부 네트워킹 프로그램 TC 인터페이스에 첨부 할 일부 네트워킹 프로그램.
- Netronome Sample Network Applications- 하드웨어 오프로드와 호환되는 EBPF 응용 프로그램의 기본이지만 완전한 예제를 제공합니다.
- BCC/예제 - BCC 도구와 함께 제공되는 예제, 주로 추적에 관한 예.
- BCC/Tools- 이러한 도구 자체는 BPF 프로그램의 예제 사용 사례, 주로 추적 및 모니터링을위한 것으로 볼 수 있습니다. BCC 도구는 일부 Linux 배포판을 위해 포장되었습니다.
- MPLSINIP 샘플 - IP 내에서 MPL을 캡슐화하고 캡슐화하는 방법을 보여주는 크게 주석은 샘플입니다. 이 코드는 BPF 개발에 새로운 사람들을 위해 댓글을 달았습니다.
- EBPF 샘플 - 여러 프로젝트에서 수집 한 컴파일 된 (ELF 객체 파일) 샘플 모음은 주로 사용자 공간 검증기의 테스트 케이스 역할을하기위한 것입니다.
- EBPF-Kill-Axample- 모든 힘을 기록하고 사용자 공간으로 인쇄하는 EBPF 프로브의 완전히 문서화되고 테스트 된 예제입니다.
- REDBPF 예제 - REDBPF를 사용하여 EBPF 프로그램을 Rust로 작성하는 예제 프로그램.
- XDP/TC-EBPF 예제-XDP/TC-EBPF를 사용하여 StateFull 방화벽 및 소켓 리디렉션을 제공하는 프로그램.
EBPF 워크 플로 : 도구 및 유틸리티
BCC
- BCC- 프레임 워크 및 도구 세트 - 특히 추적 및 모니터링을위한 BPF 프로그램을 처리하는 한 가지 방법. 또한 시스템에서지도 나 프로그램을 검사하는 데 도움이 될 수있는 일부 유틸리티가 포함되어 있습니다.
- BCC의 LUA 프론트 엔드 - C에 대한 또 다른 대안, 심지어 BCC에 사용되는 대부분의 Python 코드에 대한 대안.
iproute2
- IPROUTE2- Linux의 네트워크 관리를위한 도구가 포함 된 패키지. 특히 XDP 프로그램을 관리하는 데 사용되는 EBPF 필터 및 작업 및
ip 를 관리하는 데 사용되는 tc 포함되어 있습니다. BPF와 관련된 대부분의 코드는 LIB/BPF.C입니다. - iproute2-next- 개발 트리, Net-Next와 동기화되었습니다.
llvm
libbpf
- LIBBPF- BPF 객체 (프로그램 및지도) 처리에 사용되는 AC 라이브러리 및이를 포함하는 ELF 객체 파일을 조작하는 데 사용됩니다. 커널과 함께 배송되고 Github에 미러링됩니다.
- libbpf-bootstrap- libbpf 및 bpf co-re를 사용한 BPF 애플리케이션 개발을위한 스캐 폴딩.
도서관
- CILIUM/EBPF- Pure -Go Library는 EBPF 프로그램을 읽고 수정 및로드하여 Linux 커널의 다양한 후크에 연결합니다.
- libbpfgo -libbpf로 구동되는 Go 용 EBPF 라이브러리.
- GOBPF- EBPF 프로그램을 만들기위한 BCC의 GO 바인딩.
아야
- AYA- 개발자 경험 및 작동성에 중점을 둔 EBPF 객체 작성,로드 및 관리를위한 순수한 Rust 라이브러리. EBPF 프로그램간에 EBPF 프로그램을 작성하고 Crates.io를 통해 라이브러리 코드를 배포하여 EBPF 프로그램간에 공유합니다. AYA는 LIBBPF에 의존하지 않습니다.
- AYA -TEMPLATE-
cargo generate 과 함께 사용할 수있는 AYA에서 BPF 응용 프로그램을 작성하기위한 템플릿. - EBPFGUARD- EBPF를 사용하여 Linux 보안 정책을 작성하기위한 Rust Library.
ZBPF
- ZBPF- LIBBPF 및 Zig Toolchain으로 구동되는 크로스 플랫폼 EBPF 프로그램을 작성하기위한 순수한 지그 프레임 워크.
유노 미아 BPF
- Eunomia-BPF- 컴파일 프레임 워크 및 런타임 라이브러리로 여러 언어 및 webAssembly에서 CO-Ree EBPF 응용 프로그램을 빌드, 배포, 동적으로로드 및 실행할 수있는 런타임 라이브러리. EBPF 커널 코드 만 작성 (간단한 공동 리 LIBPF EBPF 응용 프로그램을 구축하기 위해), BCC 및 LIBBPF 스타일 모두에서 커널 부분을 작성하고 WASM 모듈로 여러 언어로 사용자 공간을 작성하고 간단한 JSON 데이터 또는 WASM OCI 이미지로 배포합니다. 런타임은 LIBBPF를 기반으로하며 LLVM 라이브러리에 의존하지 않고 CO-Re에서 BCC 스타일의 EBPF 프로그램을 제공합니다.
산화물 BPF
- OXIDEBPF- 보안 사용 사례를 위해 설계된 EBPF 프로그램 관리를위한 순수한 Rust 라이브러리. 기능 세트는 다른 라이브러리보다 제한적이지만 광범위한 커널과 뒤로 호환 된 컴파일-온스-운영자가 가장 큰 범위에 걸쳐 안정성을 강조합니다.
커널 트리의 bpftool 및 기타 도구
사용자 공간 EBPF
- UBPF- C로 작성된 UBPF에는 통역사, X86_64 아키텍처 용 JIT 컴파일러, 어셈블러 및 분해 블러가 포함되어 있습니다.
- 일반 구현 - FreeBSD 커널, FreeBSD 사용자 공간, Linux 커널, Linux 사용자 공간 및 MACOS 사용자 공간을 지원합니다. Vale Software Switch의 BPF 확장 모듈에 사용됩니다.
- RBPF- 녹으로 작성되었습니다. Linux, MacOS 및 Windows의 통역사 및 Linux에서 X86_64 용 JIT 컴파일러.
- PREAMAIL- 루프를 지원하는 초록 해석 계층을 사용하여 EBPF의 사용자 공간 검증 자.
- OSTER- GO에 작성. EBPF를 Uprobes에 첨부하여 GO 프로그램 실행 추적 도구.
- Wachy- EBPF 오류 기반 디버깅을보다 쉽게 사용할 수 있도록 추적하는 프로파일 러. 이것은 소스 코드 옆의 UI에 추적을 표시하고 대화식 드릴 다운 분석을 허용하여 수행됩니다.
다른 플랫폼의 EBPF
- Windows 용 EBPF-이 프로젝트는 기존 EBPF 툴체인과 Linux 생태계에 친숙한 API를 사용하여 Windows 위에서 사용할 수있는 작업입니다.
가상 환경에서의 테스트
- Vagrant 설정 - XDP를 쉽게 테스트합니다. 일반 XDP (주로 테스트 용 드라이버 독립적)가 존재하므로 지금은 덜 유용합니다.
- Docker 컨테이너의 BCC
EBPF 관련 프로젝트
네트워킹
P4는 EBPF와 약간의 상호 작용을 가지고 있습니다.
- EBPF가있는 가장자리 -P4의 P4는 고성능 프로그래밍 가능한 스위치를 생성합니다.
- OVS Orbit Episode (#11), Edge에서 P4라고 불리는 이전 항목과 관련이 있습니다. Open vswitch의 핵심 관리자 중 하나 인 Ben Pfaff의 John Fastabend의 오디오 인터뷰.
- P4, EBPF 및 Linux TC 오프로드 -P4 Netronome의 NFP (Network Flow Processor) 아키텍처에서 EBPF 하드웨어 오프로드와 관련된 요소가 있습니다.
- BCC 저장소에서 EBPF를 사용한 P4 사용에 대한 오래된 문서; 아래 링크 된 P4_16 백엔드로 더 이상 사용되지 않습니다.
- EBPF의 P4_16 백엔드
CILIUM Project (GitHub Repository)는 BPF 및 XDP에 의존하여 "즉시 생성 된 EBPF 프로그램을 기반으로 컨테이너에 대한 빠른 내부 네트워킹 및 보안 정책 시행"을 제공하기 위해 BPF 및 XDP에 의존하는 기술입니다. 이용 가능한 많은 프레젠테이션 (오버랩 포함) :
- 실륨 : BPF 및 XDP가있는 컨테이너의 네트워킹 및 보안 -로드 밸런서 사용 케이스가 특징입니다.
- 실륨 : BPF와 컨테이너의 네트워킹 및 보안 - 비디오
- 실륨 : BPF 및 XDP를 사용한 빠른 IPv6 컨테이너 네트워킹
- 실륨 : 컨테이너 용 BPF & XDP
- OVS 궤도 에피소드 (#4) - Ben Pfaff의 Thomas Graf의 인터뷰.
- 실륨에 대한 일반적인 소개
- Thomas Graf -Ivan Pepelnjak와의 인터뷰, 2016 년 10 월 Thomas, EBPF, P4, XDP 및 Cilium에서 인터뷰.
Open vSwitch (OVS) 및 관련 프로젝트 Open Virtual Network (OVN, 오픈 소스 네트워크 가상화 솔루션)는 EBPF를 다양한 수준에서 고려하고 있습니다.
- EBPF를 사용하여 OVS 흐름 처리 오프로드
- OVN의 유연성을 iovisor의 효율성과 결합
KATRAN- XDP를 기반으로 한 레이어 4로드 밸런서, Facebook에서 오픈 소스.
실제로 XDP : DDOS 완화 파이프 라인에 XDP를 통합 - CloudFlare에서 XDP와 DDOS에 대한 보호.
방울 : BPF + XDP로 구동되는 DDOS 대책 - Facebook에서 XDP로 DDOS에 대한 보호.
DPDK에는 AF_XDP를 기반으로 한 PMD (Poll-Mode Driver)가 있습니다
XDP 용 Ceth -Mellanox가 시작한 기술 인 더 빠른 네트워크 I/O를위한 일반적인 이더넷 드라이버 프레임 워크.
오픈 소스 침입 탐지 시스템 인 Suricata는 "Capture Bypass"기능을 위해 EBPF 구성 요소에 의존합니다.
- Suricata 문서의 "EBPF 및 XDP"섹션
- SEPTUN -MARK -II- 극단적 인 성능 튜닝 가이드 - 마크 II.
- 기능을 소개하는 블로그 게시물
- EBPF 땅에서의 수술의 모험
- Meerkat의 눈에서 본 EBPF와 XDP
Project Calico -Calico는 컨테이너, 가상 머신 및 기본 호스트 기반 워크로드를위한 오픈 소스 네트워킹 및 네트워크 보안 솔루션입니다. Calico의 EBPF 데이터 평면은 풍부한 네트워크 보안 정책 모델을 갖춘 낮은 대기 시간, 높은 처리량 데이터 평면을 제공합니다.
- Calico를 사용하여 EBPF 데이터 평면 활성화
Merbridge- EBPF를 사용하여 서비스 메쉬 속도를 높이십시오. Merbridge는 iPtables 규칙을 EBPF로 대체하여 트래픽을 가로 채기 위해 대체합니다. 또한 MSG_REDIRECT를 결합하여 대기 시간을 사이드카와 서비스 사이의 단축 된 데이터 패스로 줄입니다.
PCAPPLUSPLUS- 네트워크 패킷 캡처, 구문 분석 및 제작을위한 오픈 소스 C ++ 라이브러리. AF_XDP 소켓을 생성하기위한 C ++ 인터페이스가있어 패킷을 쉽게 보내고받을 수 있습니다.
관찰 가능성
- INKEV : DCN을위한 커널 내 분산 네트워크 가상화
- Deep-Mon- 서버의 전력 소비를 측정하는 데 도움이되고 데이터의 커널 집계에 EBPF 프로그램을 사용합니다.
- Pixie- EBPF를 사용한 Kubernetes의 관찰 가능성. 프로토콜 추적, 응용 프로그램 프로파일 링 및 분산 된 BPFTRACE 배포 지원이 포함됩니다.
- Skywalking Rover-Apache Skywalking은 마이크로 서비스, 클라우드 네이티브 및 컨테이너 기반 (Kubernetes) 아키텍처가있는 분산 시스템을 위해 특별히 설계된 오픈 소스 애플리케이션 성능 모니터링 (APM) 플랫폼입니다. Skywalking Rover는 C, C ++, Golang 및 Rust Applications의 EBPF 기반 프로파일 러 및 메트릭 컬렉터입니다.
- PARCA-AGENT-EBPF 기반 CPU 및 메모리 사용 분석을위한 항상 연속적인 프로파일 러 기반 라인 번호까지 및 시간이 지남에 따라.
- RBPERF- 루비의 샘플링 프로파일 러 및 트레이서.
- Hubble- EBPF를 사용한 Kubernetes의 네트워크, 서비스 및 보안 관찰 가능성.
- CARETTA- eBPF에 의해 생성 된 Instant Kubernetes 서비스 종속성 맵, 오른쪽으로 Grafana 인스턴스.
- DeepFlow- EBPF를 기반으로 한 Cloud -Native 및 AI 응용 프로그램의 즉각적인 관찰 가능성.
보안
- FALCO- Kubernetes 위협 감지 엔진으로 사용되는 클라우드 네이티브 런타임 보안 프로젝트.
- Sysmon for Linux- 보안 모니터링 도구. sysinternalsebpf에 따라 다릅니다.
- Red Canary Linux Agent -Red Canary는 EBPF를 Linux 보안 센서에 통합하기 시작했습니다.
- TRACEE- EBPF 기술을 사용하여 런타임시 시스템 및 응용 프로그램을 추적하고 수집 된 이벤트를 분석하여 의심스러운 행동 패턴을 감지하는 런타임 보안 및 법의학 도구입니다.
- Redcanary-EBPF-Sensor- Linux 커널에서 보안 관련 이벤트 데이터를 수집하는 BPF 프로그램 세트. BPF 프로그램은 실행중인 운영 체제 및 커널 버전에 따라 개별 프로브를 선택적으로로드 할 수있는 단일 ELF 파일로 결합됩니다.
- BPFLOCK- 잠금 Linux 시스템 - Linux 시스템 잠금 및 감사를위한 EBPF 구동 보안 도구.
- Tetragon-Kubernetes-Aware, EBPF 기반 보안 관찰 가능성 및 런타임 시행.
- Harpoon- EBPF를 사용하여 사용자 공간 기능의 SYSCALL을 추적합니다.
도구
- Ply- Linux 용 작지만 유연한 오픈 소스 동적 추적기는 BCC 도구와 유사한 기능을 제공하지만 AWK 및 DTRACE에서 영감을 얻은 간단한 언어를 갖습니다.
- BPFTRACE- 자체 고급 추적 언어로 추적하기위한 도구. DTRACE 및 SYSTEMTAP의 LINUX 교체로 구상 할 수있을 정도로 유연합니다.
- BPFTRACE 치트 시트 - BPFTRACE의 프로그래밍을위한 요약 및 치트 시트. 구문, 프로브 유형, 변수 및 함수에 대한 정보가 포함되어 있습니다.
- Kubectl Trace- Kubernetes 클러스터에서 BPFTrace 프로그램을 실행하기위한 Kubectl 플러그인.
- Inspektor-Gadget- Kubernetes 리소스 및 응용 프로그램을 디버그하고 검사하는 EBPF 기반 도구 모음.
- BPFD- Linux에서 데몬으로 규칙을 가진 BPF 프로그램을 실행하기위한 프레임 워크. 컨테이너 인식.
- BPFD -BCC 도구의 유연성을 활용하여 원격 대상을 추적하고 디버깅하고 특히 Android로 실행되는 장치.
- ADEB- BPFD를 사용하여 Android에서 추적 도구를 사용하기위한 Linux 쉘 환경.
- GREGGD- 시스템 데몬은 EBPF 프로그램을 커널에 컴파일하고로드하고 메트릭 집계를위한 소켓으로 전달 된 프로그램 출력.
- 퓨즈 - EBPF 사용을 고려합니다.
- UPF-BPF- 5G UPF 용 XDP를 기반으로하는 커널 내 솔루션.
- REDBPF- 툴링 및 프레임 워크를 Rust에 효율적으로 작성하는 툴링 및 프레임 워크.
- EBPF -Explorer- 시스템지도 및 프로그램을 탐색하는 웹 인터페이스.
- EBPFMON- EBPF 프로그램의 실시간 모니터링을위한 TUI (터미널 사용자 인터페이스) 응용 프로그램.
- BPFMAN- Linux 및 Kubernetes의 EBPF 관리자. XDP 및 TC 프로그램을위한 프로그램 협력을 지원하고 OCI 이미지에서 EBPF 프로그램 배치를 지원하는 내장 프로그램 로더가 포함되어 있습니다.
- PTCPDUMP- 프로세스 인식, EBPF 기반 TCPDUMP 유사 도구.
보안의 EBPF
- 빨간색 : 공격적인 BPF! - 공격적인 환경에 중점을두고 BPF로 소개되는 일련의 게시물과 오용을 감지 할 수 있습니다. 게시물에는 EBPF의 루트 키트 기능 또는 다양한 사용 사례에 필요한 추적 유형에 대한 토론이 포함됩니다.
- EBPF : BPF LSM을 통한 "맬웨어"실행 "맬웨어"실행 - BPF가 파일리스 맬웨어 감지 및 차단에 도움이되는 방법에 대한 블로그 게시물을 차단합니다.
- Blackhat 2021 : EBPF와 같은 친구들과 함께 누가 적을 필요로합니까? - EBPF 루트 키트와 EBPF의 기능을 어떻게 남용 할 수 있는지 이야기하십시오. Rootkit은 또한 EBPF의 Defcon에서 대화의 대상이었고, 나는 우리가 친구라고 생각했습니다!.
- EBPFKIT- 여러 EBPF 기능을 활용하여 공격적인 보안 기술을 구현하는 루트 키트.
- EBPFKIT -MONITOR- 런타임에 EBPF 바이트 코드를 정적으로 분석하거나 의심스러운 EBPF 활동을 모니터링하는 유틸리티. EBPFKIT를 감지하도록 특별히 설계되었습니다.
- BAD BPF- usermode 프로그램과 커널 사이에서 사용자 데이터를 읽고 쓰는 EBPF의 능력을 사용하는 악의적 인 EBPF 프로그램 모음.
- TripleCross- 백도어, C2, 라이브러리 주입, 실행 납치, 지속성 및 스텔스 기능이있는 Linux EBPF 루트 키트.
코드
Linux/Include/Linux/BPF.H- Linux/Include/UAPI/BPF.H : EBPF와 관련된 정의, 각각 커널에서 사용하고 사용자 공간 프로그램과 인터페이스해야합니다.
Linux/Include/Linux/Filter.h- Linux/Include/UAPI/Filter.h : BPF 프로그램 자체를 실행하는 데 사용되는 정보.
Linux/Kernel/BPF/ -이 디렉토리에는 대부분의 BPF 관련 코드가 포함되어 있습니다. 특히, 해당 파일은 다음과 같습니다.
-
syscall.c 프로그램로드 또는 맵 관리와 같은 시스템 호출에 의해 허용되는 다른 작업. -
core.c -BPF 통역사. -
verifier.c -BPF 검증기.
Linux/Net/Core/Filter.c- 네트워킹과 관련된 기능 및 EBPF 헬퍼 (TC, XDP 등); 또한 CBPF 바이트 코드를 EBPF로 마이그레이션하는 코드도 포함되어 있습니다 (모든 CBPF 프로그램은 최근 커널에서 EBPF로 변환됨).
Linux/Kernel/trace/bpf_trace.c- 추적 및 모니터링 (kprobes, tracepoints 등)과 관련된 기능 및 EBPF 헬퍼.
JIT 컴파일러는 x86의 File Linux/Arch/X86/Net/BPF_JIT_COMP.C와 같은 해당 아키텍처의 디렉토리 아래에 있습니다. 하드웨어 오프로드에 사용되는 JIT 컴파일러, 예 : Linux/Drivers/Net/Ethernet/Netronome/NFP/BPF/JIT.C와 같은 드라이버에 앉아 Netronome NFP에 대해서는 예외입니다.
Linux/Net/Sched/ - 및 특히 파일 act_bpf.c (ACTION) 및 cls_bpf.c (필터) : BPF 작업 및 TC와의 필터와 관련된 코드.
Linux/Kernel/Seccomp.c
Linux/Net/Core/Dev.c- XDP 프로그램을 장치에 연결하기 위해 NetLink 명령을 통해 호출되는 기능 dev_change_xdp_fd() 함수가 포함되어 있습니다. 이 기능은 차례로 관련 드라이버의 콜백을 사용합니다.
개발 및 커뮤니티
- BPF -NEXT 트리 -BPF 패치는이 트리에 착륙합니다. 정기적으로 Net-Next로 병합되며, 각 릴리스마다 Linus의 트리에 병합됩니다.
- 커널 문서 - BPF에 대한 기여에 대한.
- NetDev 메일 링리스트 - Linux 커널 네트워킹 스택 개발 용 메일 링리스트. 모든 패치는 검토 및 포함을 위해 전송됩니다.
- XDP -Newbies- XDP 프로그래밍 전용 메일 링리스트 (아키텍처 또는 도움 요청 모두).
- IO Visor 메일 링리스트 -BPF는 프로젝트의 핵심이며 메일 링리스트에서 정기적으로 논의됩니다.
- @iovisor 트위터 계정
- XDP 협업 프로젝트 - XDP의 미래 진화에 관한 메모와 아이디어가있는 Github 저장소.
EBPF의 다른 리소스 목록
- IO Visor의 BCC 문서
- IO Visor의 BPF-DOCS 저장소
- BPF로 다이빙 : 독서 자료 목록
승인
Thank you to Quentin Monnet and Daniel Borkmann for their original work on Dive into BPF: A List of Reading Material which became the basis for this list.
기여
Contributions welcome! Read the contribution guidelines first.
특허
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.