EBPF yang luar biasa
Daftar proyek luar biasa yang dikuratori terkait dengan EBPF.
BPF, seperti di Berkeley Packet Filter , adalah program yang menjalankan mesin virtual di dalam ruang pengguna. Awalnya diimplementasikan pada BSD, lalu Linux, (sekarang warisan) "BPF klasik" atau mesin CBPF akan digunakan dengan alat -alat seperti TCPDUMP untuk memfilter paket dalam kernel untuk menghindari salinan yang tidak berguna ke ruang pengguna. Baru-baru ini, infrastruktur BPF di Linux telah sepenuhnya dikerjakan ulang dan memberi kehidupan pada "BPF yang diperluas", atau EBPF, yang memperoleh fitur baru (pemeriksaan keselamatan dan penghentian, kompilasi JIT untuk program, peta persisten, perpustakaan standar, dukungan offload perangkat keras, dll.) Dan sekarang digunakan untuk banyak tag. Paket pemrosesan pada tingkat yang sangat rendah (XDP), melacak dan memantau peristiwa pada sistem, atau menegakkan kontrol akses atas cgroup hanyalah beberapa contoh yang EBPF membawa kinerja, programabilitas, dan fleksibilitas.
Baru -baru ini Cilium meluncurkan situs web hebat tentang EBPF yang disebut EBPF.IO. Ini melayani tujuan yang sama dengan daftar ini, dengan pengantar EBPF dan tautan ke proyek terkait.
Catatan: EBPF adalah teknologi yang menarik, dan ekosistemnya terus berkembang. Kami akan menyukai bantuan dari Anda untuk menjaga daftar yang luar biasa ini tetap up to date, dan meningkatkan rasio sinyal-ke-noise. Jangan ragu untuk meninggalkan umpan balik apa pun.
Isi
- Dokumentasi referensi
- Artikel dan presentasi
- Tutorial
- Contoh
- Alur kerja EBPF: Alat dan Utilitas
- Proyek yang terkait dengan EBPF
- EBPF dalam keamanan
- Kode
- Pengembangan dan komunitas
- Daftar sumber daya lainnya di EBPF
- Pengakuan
Dokumentasi referensi
Esensi EBPF
- EBPF.IO - Gerbang untuk menemukan semua dasar EBPF, termasuk daftar proyek terkait utama dan sumber daya masyarakat.
- Panduan Referensi BPF dan XDP Cilium - Dokumentasi mendalam tentang sebagian besar fitur dan aspek EBPF.
Dokumentasi kernel
- Dokumentasi BPF - Indeks untuk dokumentasi terkait BPF yang datang dengan kernel Linux.
- Linux/Dokumentasi/Jaringan/Filter.RST - Spesifikasi EBPF (agak ketinggalan zaman; informasi harus tetap valid, tetapi tidak lengkap).
- BPF Design Q&A - Pertanyaan yang sering diajukan tentang keputusan di balik infrastruktur BPF.
- Bagaimana berinteraksi dengan subsistem BPF - pertanyaan yang sering diajukan tentang berkontribusi pada pengembangan EBPF.
Halaman manual
-
bpf(2) - Halaman manual tentang panggilan sistem bpf() , yang digunakan untuk mengelola program BPF dan peta dari Userspace. -
tc-bpf(8) - Halaman manual tentang penggunaan BPF dengan TC, termasuk perintah contoh dan sampel kode. -
bpf-helpers(7) Man Page-Deskripsi Fungsi Pembantu In-Kernel Membentuk Perpustakaan Standar BPF.
Lainnya
Spec EBPF tidak resmi IO Visor - Ringkasan Sintaks EBPF dan Kode Operasi.
Dokumentasi Jesper Dangaard Brouer - Work In Progress, Kontribusi Selamat Datang.
Email dari David Miller ke milis XDP-Newbies:
- bpf.h dan kamu ...
- Berbicara secara kontekstual ...
- Ikhtisar Verifier BPF
Daftar fitur BPF per versi kernel
Artikel dan presentasi
Presentasi dan artikel EBPF generik
Jika Anda baru mengenal EBPF, Anda mungkin ingin mencoba tautan yang digambarkan sebagai "perkenalan" di bagian ini.
Pengantar singkat untuk XDP dan EBPF - pengantar yang dapat diakses yang memberikan konteks, sejarah, dan detail tentang fungsi EBPF.
Tinjauan EBPF - Seri Blog oleh Adrian Ratiu, yang mencakup banyak aspek infrastruktur EBPF:
- Bagian 1: Pendahuluan
- Bagian 2: Mesin & Bytecode
Posting blog Ferris Ellis tentang EBPF - mereka memiliki beberapa posting tentang EBPF:
- Bagian 1: masa lalu, sekarang, dan masa depan
- Bagian 2: Jenis Syscall dan Peta
Panduan Referensi BPF - Tentang Pembantu BPF C dan BCC Python, dari BCC Repository.
Membuat jalur data jaringan kernel dapat diprogram dengan BPF dan XDP - satu set slide yang mencakup semua dasar tentang EBPF dan XDP (kebanyakan untuk pemrosesan jaringan).
Filter Paket BSD - Pendahuluan Sebagian besar mencakup aspek penelusuran.
BPF: Penelusuran dan banyak lagi - Pengantar sebagian besar mencakup aspek penelusuran.
Linux BPF Superpowers - Pendahuluan yang sebagian besar mencakup aspek penelusuran, bagian pertama dengan grafik api.
IO Visor - Juga memperkenalkan proyek visor IO.
BPF - In -Kernel Virtual Machine - Presentasi oleh penulis EBPF.
Memperluas Extended BPF - Sebuah posting blog dari 2014 tentang pengembangan BPF dan menunjukkan apa yang dapat dilakukan dengannya, menggunakan contoh penyaringan soket stateful dengan melampirkan program EBPF ke soket.
Greg Marsden membuat beberapa dokumentasi tentang EBPF:
- Tur Jenis Program - Deskripsi semua kait yang ada untuk jenis program BPF, dan minat mereka.
- BPF Helper Functions - Tinjauan fungsi kernel yang dapat dipanggil dari dalam program EBPF.
- Berkomunikasi dengan UsersPace - Bagaimana BPF berkomunikasi dengan Userspace - BPF Maps, Perf Events, BPF_TRACE_PRINTK.
- Membangun Program BPF - Menyiapkan lingkungan Anda untuk membangun program BPF.
- BPF bytecode dan bpf verifier - bagaimana BPF memastikan bahwa program aman?
- Menggunakan BPF untuk melakukan transformasi paket - satu penggunaan EBPF tentang transformasi paket.
Observabilitas kernel Linux melalui EBPF - Sebuah posting blog yang mencakup dasar -dasar EBPF serta sampel kode sebagai cara membangun dan memuat program EBPF minimal ke dalam kernel.
EBPF - Dari perspektif seorang programmer - makalah pendek yang menggambarkan dasar -dasar EBPF dan bagaimana memulai dengan menulis program EBPF.
Posting blog CloudFlare di EBPF - berbagai posting blog tentang kasus penggunaan jaringan dan aspek EBPF tingkat rendah.
Linux Extended BPF (EBPF) TRACING TOOLS - Kumpulan informasi mendalam di sekitar contoh alat analisis kinerja menggunakan EBPF. Berisi juga bagian di akhir halaman tentang sumber daya lain.
Panduan Pemula untuk EBPF - Seperangkat pembicaraan pengkodean langsung dan contoh kode yang menyertainya, memperkenalkan pemrograman EBPF menggunakan berbagai perpustakaan dan jenis program.
Internal BPF
Daniel Borkmann telah membuat beberapa presentasi dan makalah yang mencakup internal EBPF, khususnya tentang penggunaannya dengan TC.
- EBPF dan XDP Walkthrough dan Pembaruan Terbaru (2017)
- Programmabilitas lanjutan dan pembaruan terbaru dengan CLS_BPF TC - Detail tentang EBPF, penggunaannya untuk tunneling dan enkapsulasi, akses paket langsung, dan banyak lagi.
- CLS_BPF/EBPF Pembaruan Sejak NetDev 1.1 - Bagian dari lokakarya TC ini.
- Saat mendapatkan TC Classifier sepenuhnya dapat diprogram dengan CLS_BPF - Pengantar EBPF, termasuk beberapa fitur (manajemen peta, panggilan ekor, verifier). Makalah lengkapnya juga tersedia di sini.
- Linux TC dan EBPF
Blog visor io
Linux Networking Dijelaskan - Linux Networking Internal, dengan bagian tentang EBPF.
Penelusuran kernel
- Penelusuran dinamis sistem lengkap di Linux menggunakan EBPF dan BPFTRACE - Pengantar terperinci untuk melacak dengan EBPF, dari mendaftarkan titik jejak yang tersedia hingga menjalankan program BPFTrace.
- Bertemu -keutuhan antara EBPF dan Kernel Tracing - Kprobes, Uprobes, Ftrace.
- Linux Kernel Tracing-Systemtap, Kernelshark, Trace-CMD, LTTNG, Perfal-Tool, Ftrace, Hist-Trigger, Perf, Function Tracer, Tracepoint, Kprobe/Uprobe, dan banyak lagi.
- Blog Brendan Gregg, dan khususnya artikel Linux BPF Superpowers.
XDP
Jalur data ekspres - pengantar yang sangat mudah diakses untuk XDP, menyediakan kode sampel untuk menunjukkan cara memproses paket.
Semua detail XDP dalam makalah teknis: The Express Data Path: Pemrosesan paket yang dapat diprogram cepat dalam kernel sistem operasi, oleh Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern dan David Miller, semua kontribut EBPF dan XDP yang penting.
Dokumentasi kerja-dalam-progress untuk XDP
BPF dan Panduan Referensi XDP - Panduan dari Proyek Cilium.
Tinjauan Proyek XDP
Express Data Path (XDP) - Presentasi pertama tentang XDP.
BOF - Apa yang bisa dilakukan BPF untuk Anda?
Express Data Path - Berisi beberapa hasil benchmark yang diperoleh dengan driver MLX4.
Jesper Dangaard Brouer memiliki beberapa set slide yang menggambarkan internal XDP:
- XDP - Jalur data ekspres, intro dan kasus penggunaan di masa depan - Linux Kernel perjuangan melawan DPDK. Rencana masa depan (pada tulisan ini) untuk XDP dan perbandingan dengan DPDK.
- Workshop Kinerja Jaringan - Petunjuk tambahan tentang internal XDP dan evolusi yang diharapkan.
- XDP - Jalur Data Ekspres, digunakan untuk perlindungan DDOS - Rincian dan penggunaan kasus tentang XDP, dengan hasil tolok ukur, dan cuplikan kode untuk benchmarking serta untuk perlindungan DDOS dasar dengan EBPF/XDP (berdasarkan skema daftar hitam IP).
- Memori vs Jaringan, Memprovokasi, dan Memperbaiki Kemacetan Memori - Detail Lanjutan tentang masalah memori saat ini yang dihadapi oleh pengembang XDP.
- XDP untuk kita semua - Cara memulai dengan EBPF dan XDP untuk manusia normal. Juga dirangkum oleh Julia Evans di blognya.
- XDP Sekarang dengan Redirect - Perbarui pada XDP, dan khususnya pada tindakan pengalihan.
Lokakarya XDP - Pendahuluan, Pengalaman, dan Pengembangan Masa Depan (Video)
Penyaringan Paket Kecepatan Tinggi di Linux - Tentang Penyaringan Paket pada Linux, Perlindungan DDOS, Pemrosesan Paket di Kernel, Kernel Bypass, XDP dan EBPF.
Cara menjatuhkan 10 juta paket per detik - posting blog Cloudflare berbicara tentang kepindahan mereka untuk menggunakan XDP untuk penyaringan paket.
AF_XDP
- AF_XDP - Dokumentasi kernel pada keluarga alamat AF_XDP.
- Pemrosesan paket cepat di Linux dengan AF_XDP
bpfilter
- Mengapa komunitas kernel menggantikan ptables dengan BPF? - Sebuah posting blog oleh Cilium tentang motivasi di balik EBPF dan BPFilter, dengan beberapa contoh dan tautan ke proyek lain menggunakan EBPF dan BPFilter.
- BPFILTER: Linux Firewall dengan Saus EBPF - Slide dari Talk oleh Quentin Monnet dengan latar belakang EBPF dan membandingkan BPFilter dengan ptables.
Btf
- BPF Type Format (BTF) - Dokumentasi kernel tentang BTF, menjelaskan cara menggunakannya.
- Meningkatkan kernel Linux dengan informasi tipe BTF - deskripsi pekerjaan yang dilakukan dengan BTF untuk memberikan informasi debugging untuk program BPF.
- Apa itu BTF (format tipe BPF)-buletin yang ditulis komunitas yang diperkaya dengan ilustrasi kode yang berguna dan contoh langsung.
CBPF
- Filter Paket BSD: Arsitektur baru untuk Pengambilan Paket Tingkat Pengguna - Kertas asli tentang BPF (klasik).
- Halaman manual freebsd tentang bpf
- Linux 'Packet MMAP (2), BPF, dan Netsniff-NG
- TC dan CLS BPF: Paket ringan mengklasifikasikan dengan BPF
- Memperkenalkan Alat BPF CloudFlare - Penggunaan BPF Bytecode dengan modul
xt_bpf untuk ptables. - Sintaks filter libpcap
Perangkat keras yang tidak dimuat
- EBPF/XDP Hardware offload ke SmartNics - Perangkat keras yang tidak dimuat untuk EBPF dengan TC atau XDP (Linux Kernel 4.9+), diperkenalkan oleh Netronome.
- Offload XDP yang komprehensif --- Menangani Kasing Edge-Pembaruan tentang topik di atas.
- HBPF - EBPF dalam perangkat keras - CPU EBPF yang ditulis untuk FPGA.
- OpenCSD EBPF SSD Offloading - Platform Simulasi Penyimpanan Komputasi (QEMU) dengan Sistem File Fuse LFS untuk Namespaces Zonasi NVME SSD menggunakan UBPF untuk menghitung offloading kernel, semuanya dalam ruang pengguna.
- DELILAH: EBPF -OFFLOAD pada Penyimpanan Komputasi - Delilah adalah prosesor Penyimpanan Komputasi (CSP) yang dibangun untuk EBPF Offload ke perangkat penyimpanan.
Tutorial
- Panduan Referensi BCC - Banyak langkah tambahan untuk mulai menggunakan BCC dan EBPF, sebagian besar berpusat pada penelusuran dan pemantauan.
- Tutorial Pengembang BCC Python - hadir dengan BCC, tetapi menargetkan bit Python di tujuh belas "pelajaran".
- Membangun aplikasi BPF dengan libbpf-bootstrap-membantu menghasilkan template minimal atau canggih untuk bootstrap aplikasi Anda sendiri (sisi kernel dan manajemen ruang pengguna untuk peta dan program) dengan fitur-fitur seperti co-re, variabel global, dan buffer cincin.
- Bagaimana Saya Akhirnya Menulis OpenSnoop di Pure C Menggunakan EBPF - Walk -through menyeluruh tentang cara menulis program EBPF, pertama menggunakan hanya BPF () syscall, dan kemudian perpustakaan libbpf, dengan contoh kode yang dapat direproduksi.
- Linux Tracing Workshops Bahan - melibatkan penggunaan beberapa alat BPF untuk penelusuran.
- Menelusuri perjalanan paket menggunakan Linux Tracepoints, Perf dan EBPF - Pemecahan Masalah Ping Permintaan dan balasan dengan program Perf dan BCC.
- Open NFP Platform - Dioperasikan oleh Netronome: Beberapa tutorial untuk kasus penggunaan EBPF terkait jaringan, termasuk panduan awal EBPF Offload.
- XDP untuk kita semua - edisi pertama sebuah lokakarya untuk memulai dengan XDP.
- XDP untuk kita semua - edisi kedua, dengan konten baru.
- Muat program XDP menggunakan perintah IP (iProute2)
- Tutorial Hands -On XDP - Tutorial progresif (tiga tingkat kesulitan) untuk mempelajari cara memproses paket dengan XDP.
- Semua penelusuran Anda adalah milik BPF-langkah-langkah langkah demi langkah untuk mengintegrasikan kemampuan penelusuran dalam aplikasi C ++ Anda dengan pustaka LLVM.
- Firewalling dengan BPF/XDP: Contoh dan Dive Deep - Panduan sederhana untuk membangun firewall dasar dengan TC dan XDP.
- Penyelaman mendalam ke EBPF: Menulis pemantauan DNS yang efisien. - Penjelasan terperinci tentang metode yang digunakan untuk menangkap permintaan DNS di lapisan filter soket.
- Tutorial Pengembang EBPF - Pelajari EBPF dengan contoh - Mulailah dengan dasar -dasar EBPF dan kemajuan ke topik canggih menggunakan 20+ tutorial dan contoh. Meliputi kinerja, jaringan, dan keamanan dengan libbpf dan co-re. Tersedia dalam bahasa Cina dan Inggris.
- Catch Performance Regresi di EBPF-Panduan langkah demi langkah untuk membandingkan kode EBPF klien dan kernel yang ditulis dalam karat.
- Loop dan Iterator di EBPF - Newsletter tentang semua cara untuk mengulang dan mengulangi di EBPF.
- Wawasan apa yang dapat disediakan EBPF ke dalam lalu lintas terenkripsi SSL/TLS real-time dan bagaimana caranya? -Panduan langkah demi langkah bagaimana EBPF dapat mengamati lalu lintas jaringan terenkripsi.
- Bisakah EBPF mendeteksi pola pesan redis sebelum menjadi masalah? -Panduan langkah demi langkah bagaimana EBPF dapat mengamati komunikasi Redis antara klien dan server.
- Implementasi Proxy Transparan Menggunakan EBPF dan GO-Panduan langkah demi langkah tentang cara mengimplementasikan proxy transparan menggunakan EBPF.
- Balancing beban bertenaga EBPF-Pelajari bagaimana EBPF dapat menyimpulkan keseimbangan beban khusus untuk layanan mendengarkan pada port yang sama, melalui opsi TCP SO_REUSEPORT.
- Unit Testing Program EBPF - Pelajari bagaimana Anda dapat unit menguji program EBPF Anda menggunakan libbpf.
- Accelerating Socket Communication menggunakan EBPF - Pelajari bagaimana EBPF dapat mempercepat komunikasi soket lokal hingga 30%.
Contoh
- Linux/Sampel/BPF/ - Di pohon kernel: Beberapa program EBPF sampel.
- Linux/Tools/Testing/Selftests/BPF - Di Pohon Kernel: Linux BPF Selftests, dengan banyak program EBPF.
- Prototipe-kernel/kernel/sampel/BPF-Repositori prototipe-kernel Jesper Dangaard Brouer berisi beberapa contoh tambahan yang dapat dikompilasi di luar infrastruktur kernel.
- iProute2/Contoh/BPF/ - Beberapa program jaringan untuk dilampirkan ke antarmuka TC.
- Netronome Contoh Aplikasi Jaringan - Menyediakan contoh dasar tetapi lengkap dari aplikasi EBPF yang juga kompatibel dengan perangkat keras yang tidak dimuat.
- BCC/Contoh - Contoh yang datang bersama dengan alat BCC, kebanyakan tentang penelusuran.
- BCC/Tools - Alat -alat ini sendiri dapat dilihat sebagai contoh kasus penggunaan untuk program BPF, sebagian besar untuk melacak dan memantau. Alat BCC telah dikemas untuk beberapa distribusi Linux.
- Sampel MPLSINIP - Sampel yang sangat dikomentari menunjukkan cara merangkum & mendekapsulasi MPL dalam IP. Kode ini dikomentari untuk mereka yang baru untuk pengembangan BPF.
- EBPF -sampel - Kumpulan sampel yang dikompilasi (seperti file objek ELF) yang dikumpulkan dari beberapa proyek, terutama dimaksudkan untuk berfungsi sebagai kasus uji untuk verifikasi ruang pengguna.
- EBPF-Kill-Example-Contoh probe EBPF yang sepenuhnya didokumentasikan dan diuji yang mencatat semua force-kills dan mencetaknya di ruang pengguna.
- Contoh RedBPF - Contoh program untuk menggunakan RedBPF untuk menulis program EBPF di Rust.
- Contoh XDP/TC-EBPF-Program yang menggunakan XDP/TC-EBPF untuk menyediakan firewalling statefull dan pengalihan soket.
Alur kerja EBPF: Alat dan Utilitas
BCC
- BCC - Kerangka dan Serangkaian Alat - Salah satu cara untuk menangani program BPF, khususnya untuk melacak dan memantau. Juga termasuk beberapa utilitas yang dapat membantu memeriksa peta atau program pada sistem.
- Lua Front -end untuk BCC - Alternatif lain untuk C, dan bahkan untuk sebagian besar kode Python yang digunakan dalam BCC.
iproute2
- iProute2 - Paket yang berisi alat untuk manajemen jaringan di Linux. Secara khusus, ini berisi
tc , digunakan untuk mengelola filter dan tindakan EBPF, dan ip , digunakan untuk mengelola program XDP. Sebagian besar kode yang terkait dengan BPF adalah di lib/bpf.c. - iproute2-next-pohon pengembangan, disinkronkan dengan net-next.
Llvm
libbpf
- libbpf - Perpustakaan AC yang digunakan untuk menangani objek BPF (program dan peta), dan memanipulasi file objek ELF yang memuatnya. Dikirim dengan kernel dan dicerminkan di GitHub.
- libbpf-bootstrap-perancah untuk pengembangan aplikasi BPF dengan libbpf dan bpf co-re.
Pergi perpustakaan
- Cilium/EBPF - Perpustakaan murni untuk membaca, memodifikasi, dan memuat program EBPF dan melampirkannya ke berbagai kait di kernel Linux.
- libbpfgo - pustaka EBPF untuk go, ditenagai oleh libbpf.
- GOBPF - GO Bindings for BCC untuk membuat program EBPF.
Aya
- AYA - Perpustakaan karat murni untuk menulis, memuat, dan mengelola objek EBPF, dengan fokus pada pengalaman dan operabilitas pengembang. Ini mendukung penulisan program EBPF di Rust dan mendistribusikan kode perpustakaan melalui Crates.io untuk membagikannya di antara program EBPF. Aya tidak bergantung pada libbpf.
- AYA -Template - Templat untuk menulis aplikasi BPF di AYA yang dapat digunakan dengan
cargo generate . - EBPFGUARD - Perpustakaan Rust untuk Menulis Kebijakan Keamanan Linux Menggunakan EBPF.
ZBPF
- ZBPF - Kerangka zig murni untuk menulis program EBPF lintas platform, ditenagai oleh libbpf dan zig toolchain.
Eunomia-BPF
- Eunomia-BPF-Kerangka kerja kompilasi dan pustaka runtime untuk membangun, mendistribusikan, memuat secara dinamis, dan menjalankan aplikasi CO-Re EBPF dalam berbagai bahasa dan WebAssembly. Ini mendukung penulisan kode kernel EBPF saja (untuk membangun aplikasi EBPF co-re sederhana), menulis bagian kernel dalam gaya BCC dan libbpf, dan menulis ruang pengguna dalam berbagai bahasa dalam modul WASM dan mendistribusikannya dengan data JSON sederhana atau gambar WASM OCI. Runtime ini hanya didasarkan pada libbpf dan menyediakan co-re untuk program EBPF gaya BCC tanpa tergantung pada perpustakaan LLVM.
oxideBPF
- OxideBPF - Perpustakaan karat murni untuk mengelola program EBPF, yang dirancang untuk kasus penggunaan keamanan. Fitur-fitur ini lebih terbatas daripada perpustakaan lain tetapi menekankan stabilitas di berbagai kernel dan kompatibel-compile-on-run-places yang kompatibel-ke belakang.
bpftool dan alat lain dari pohon kernel
Ruang Pengguna EBPF
- UBPF - Ditulis dalam C. berisi juru bahasa, kompiler JIT untuk arsitektur x86_64, assembler dan disassembler.
- Implementasi Generik - Dengan dukungan untuk kernel freeBSD, ruang pengguna freeBSD, kernel linux, ruang pengguna Linux, dan ruang pengguna macOS. Digunakan untuk modul ekstensi BPF sakelar Vale Switch.
- RBPF - Ditulis dalam karat. Interpreter untuk Linux, MacOS dan Windows, dan JIT-Compiler untuk X86_64 di bawah Linux.
- Prevail - Verifier ruang pengguna untuk EBPF menggunakan lapisan interpretasi abstrak, dengan dukungan untuk loop.
- Oster - ditulis dalam go. Alat untuk melacak pelaksanaan program GO dengan melampirkan EBPF ke Uprobes.
- Wachy - Profiler penelusuran yang bertujuan membuat debugging berbasis Uprobe EBPF lebih mudah digunakan. Ini dilakukan dengan menampilkan jejak di UI di sebelah kode sumber dan memungkinkan analisis drilldown interaktif.
EBPF di platform lain
- EBPF untuk Windows-Proyek ini adalah pekerjaan dalam proses yang memungkinkan penggunaan toolchain EBPF yang ada dan API yang akrab di ekosistem Linux yang akan digunakan di atas Windows.
Pengujian di lingkungan virtual
- Pengaturan Vagrant - Untuk dengan mudah menguji XDP. Kurang berguna sekarang karena XDP generik (driver-independan, sebagian besar untuk pengujian) ada.
- BCC dalam wadah Docker
Proyek yang terkait dengan EBPF
Jaringan
P4 memiliki beberapa interaksi dengan EBPF:
- P4 di tepi - P4 dengan EBPF untuk membuat sakelar yang dapat diprogram berkinerja tinggi.
- Episode OVS Orbit (#11), disebut P4 di tepi - terkait dengan item sebelumnya. Wawancara Audio John Fastabend oleh Ben Pfaff, salah satu pemelihara inti dari Open Vswitch.
- P4, EBPF dan Linux TC Offload - P4 dengan beberapa elemen yang terkait dengan perangkat keras EBPF di Arsitektur NetroneMe NFP (Prosesor Aliran Jaringan).
- Dokumentasi Lama untuk Penggunaan P4 dengan EBPF - Dari BCC Repository; Tercerahkan oleh backend P4_16 yang ditautkan di bawah ini.
- P4_16 Backend untuk EBPF
Cilium Project (Github Repository) adalah teknologi yang mengandalkan BPF dan XDP untuk menyediakan "jejaring in-kerernel cepat dan penegakan kebijakan keamanan untuk kontainer berdasarkan program EBPF yang dihasilkan dengan cepat". Banyak presentasi yang tersedia (dengan tumpang tindih):
- Cilium: Jaringan & Keamanan untuk Kontainer dengan BPF & XDP - Juga Menampilkan Kasus Penggunaan Penyeimbang Beban
- Cilium: Jaringan & Keamanan untuk Kontainer dengan BPF & XDP - Video
- Cilium: Jaringan kontainer IPv6 cepat dengan BPF dan XDP
- Cilium: BPF & XDP untuk wadah
- Episode OVS Orbit (#4) - Wawancara Thomas Graf oleh Ben Pfaff.
- Pengantar Generik untuk Cilium
- Podcast yang mewawancarai Thomas Graf - Ivan Pepelnjak yang mewawancarai Thomas, Oktober 2016, di EBPF, P4, XDP dan Cilium.
Open vswitch (OVS), dan proyek terkaitnya Buka Jaringan Virtual (OVN, Solusi Virtualisasi Jaringan Sumber Terbuka) sedang mempertimbangkan menggunakan EBPF di berbagai tingkat:
- Melepas pemrosesan aliran OVS menggunakan EBPF
- Menggabungkan fleksibilitas OVN dengan efisiensi iovisor
Katran-Lapisan 4-Balancer Berdasarkan XDP, bersumber dari Facebook.
XDP dalam Praktek: Mengintegrasikan XDP dalam Pipa Mitigasi DDoS kami - Perlindungan terhadap DDOS dengan XDP di CloudFlare.
Tetesan: Penanggulangan DDOS ditenagai oleh BPF + XDP - Perlindungan terhadap DDOS dengan XDP di Facebook.
DPDK memiliki driver mode jajak pendapat (PMD) berdasarkan AF_XDP
CETH untuk XDP - Kerangka Driver Ethernet Umum untuk Network I/O yang lebih cepat, sebuah teknologi yang diprakarsai oleh Mellanox.
Suricata, sistem deteksi intrusi open source, bergantung pada komponen EBPF untuk fitur "Capture Bypass":
- Bagian "EBPF dan XDP" dari dokumentasi Suricata
- Septun -Mark -II - Panduan Tuning Kinerja Ekstrim - Mark II.
- Posting blog yang memperkenalkan fitur tersebut
- Petualangan orang yang cermat di tanah EBPF
- EBPF dan XDP terlihat dari mata meerkat
Project Calico - Calico adalah jaringan open source dan solusi keamanan jaringan untuk wadah, mesin virtual, dan beban kerja berbasis host asli. Pesawat data EBPF Calico memberikan latensi rendah, bidang data throughput tinggi dengan model kebijakan keamanan jaringan yang kaya.
- Mengaktifkan Pesawat Data EBPF dengan Calico
Merbridge - Gunakan EBPF untuk mempercepat jala layanan Anda. Merbridge menggantikan aturan iptables dengan EBPF untuk mencegat lalu lintas. Ini juga menggabungkan msg_redirect untuk mengurangi latensi dengan datapath yang lebih singkat antara sespan dan layanan.
PCAPPLUSPLUS - Perpustakaan C ++ open -source untuk menangkap, parsing, dan menyusun paket jaringan. Ini fitur antarmuka C ++ untuk membuat soket AF_XDP, membuatnya mudah untuk mengirim dan menerima paket melalui mereka.
Kemampuan observasi
- Inkev: Virtualisasi jaringan terdistribusi dalam Kernel untuk DCN
- Deep-Mon-Membantu dengan mengukur konsumsi daya untuk server dan menggunakan program EBPF untuk agregasi data in-kerernel.
- Pixie - kemampuan observasi untuk Kubernet menggunakan EBPF. Fitur termasuk penelusuran protokol, profil aplikasi, dan dukungan untuk penyebaran BPFTrace terdistribusi.
- Skywalking Rover-Apache Skywalking adalah platform pemantauan kinerja aplikasi open-source (APM) yang dirancang khusus untuk sistem terdistribusi dengan layanan microservices, cloud-asli dan container berbasis (Kubernetes). Skywalking Rover adalah kolektor profiler dan metrik berbasis EBPF untuk aplikasi C, C ++, Golang, dan Rust.
- Parca-Agent-EBPF Berdasarkan Profiler Berkelanjutan Selalu untuk Analisis CPU dan Penggunaan Memori, sampai ke nomor garis dan sepanjang waktu.
- RBPERF - CHAMPLING PROFILER DAN TRACER UNTUK RUBY.
- Hubble - Jaringan, Layanan, dan Observabilitas Keamanan untuk Kubernet menggunakan EBPF.
- Caretta - Peta Ketergantungan Layanan Kubernet Instan yang dihasilkan oleh EBPF, kanan untuk instance Grafana.
- Deepflow - Observabilitas instan untuk aplikasi cloud -asli dan AI berdasarkan EBPF.
Keamanan
- FALCO - Proyek keamanan runtime cloud -asli yang digunakan sebagai mesin deteksi ancaman Kubernetes.
- Sysmon untuk Linux - Alat pemantauan keamanan. Itu tergantung pada sysinternalsebpf.
- Red Canary Linux Agent - Red Canary telah mulai menggabungkan EBPF ke sensor keamanan Linux mereka.
- Tracee - Alat keamanan runtime dan forensik untuk Linux yang menggunakan teknologi EBPF untuk melacak sistem dan aplikasi saat runtime, dan menganalisis peristiwa yang dikumpulkan untuk mendeteksi pola perilaku yang mencurigakan.
- Redcanary-EBPF-Sensor-Satu set program BPF yang mengumpulkan data acara yang relevan dengan keamanan dari kernel Linux. Program BPF digabungkan menjadi satu file ELF dari mana probe individual dapat dimuat secara selektif, tergantung pada sistem operasi yang berjalan dan versi kernel.
- BPFLOCK - Lock Linux Machines - Alat keamanan yang digerakkan EBPF untuk mengunci dan mengaudit mesin Linux.
- Tetragon-Kubernetes-Aware, Observability Security Observability dan Runtime Enforcement yang berbasis EBPF.
- Harpoon - Lacak syscall dari fungsi ruang pengguna, dengan menggunakan EBPF.
Peralatan
- PLY - Pelacak dinamis open source yang kecil namun fleksibel untuk Linux, dengan fitur yang mirip dengan alat BCC, tetapi dengan bahasa yang lebih sederhana yang terinspirasi oleh AWK dan DTrace.
- BPFTRACE - Alat untuk melacak dengan bahasa penelusuran tingkat tinggi sendiri. Cukup fleksibel untuk dibayangkan sebagai pengganti Linux untuk DTrace dan Systemtap.
- BPFTrace Cheat Sheet - Ringkasan dan Lembar Cheat untuk Pemrograman di BPFTrace. Berisi informasi tentang sintaks, jenis probe, variabel dan fungsi.
- Kubectl Trace - Plug -in Kubectl untuk mengeksekusi program BPFTrace di kluster Kubernetes.
- Inspektor-Gadget-Kumpulan alat berbasis EBPF untuk men-debug dan memeriksa sumber daya dan aplikasi Kubernetes.
- BPFD - Kerangka kerja untuk menjalankan program BPF dengan aturan di Linux sebagai daemon. Wadah sadar.
- BPFD - Daemon BPF yang berbeda, mencoba memanfaatkan fleksibilitas alat BCC untuk melacak dan men -debug target jarak jauh, dan khususnya perangkat yang berjalan dengan Android.
- ADEB - Lingkungan shell Linux untuk menggunakan alat penelusuran di Android dengan BPFD.
- Greggd - Daemon Sistem untuk mengkompilasi dan memuat program EBPF ke dalam kernel, dan meneruskan output program ke soket untuk agregasi metrik.
- Fuse - mempertimbangkan menggunakan EBPF.
- UPF-BPF-Solusi in-Kernel berdasarkan XDP untuk 5g UPF.
- RedBPF - Tooling dan Framework untuk menulis kode EBPF secara efisien.
- EBPF -Explorer - Antarmuka web untuk menjelajahi peta dan program sistem.
- EBPFMON - Aplikasi TUI (Terminal User Interface) untuk pemantauan waktu nyata program EBPF.
- BPFMAN - Manajer EBPF untuk Linux dan Kubernetes. Termasuk loader program bawaan yang mendukung kerja sama program untuk program XDP dan TC, serta penyebaran program EBPF dari gambar OCI.
- PTCPDUMP-Alat seperti TCPDUMP berbasis EBPF.
EBPF dalam keamanan
- Rangkullah Red: BPF ofensif! - Serangkaian posting di sekitar pengantar ke BPF dengan fokus pada pengaturan ofensif, dan juga bagaimana penyalahgunaannya dapat dideteksi. Posting termasuk diskusi tentang kemampuan rootkit EBPF, atau di mana jenis penelusuran diperlukan untuk kasus penggunaan yang berbeda.
- EBPF: Blokir Linux Fileless Payload "Malware" Eksekusi dengan BPF LSM - Posting blog tentang bagaimana BPF dapat membantu mendeteksi dan memblokir malware tanpa filless.
- Blackhat 2021: Dengan teman -teman seperti EBPF, siapa yang butuh musuh? - Bicara tentang EBPF rootkit dan bagaimana kemampuan EBPF dapat disalahgunakan. Rootkit juga merupakan objek pembicaraan di DEFCON, EBPF, saya pikir kami berteman!
- EBPFKIT - Rootkit yang memanfaatkan beberapa fitur EBPF untuk menerapkan teknik keamanan ofensif.
- EBPFKIT -MONITOR - Utilitas untuk menganalisis bytecode EBPF secara statis atau memantau aktivitas EBPF yang mencurigakan saat runtime. Itu dirancang khusus untuk mendeteksi EBPFKIT.
- Bad BPF - Kumpulan program EBPF berbahaya yang memanfaatkan kemampuan EBPF untuk membaca dan menulis data pengguna di antara program USERMODE dan kernel.
- Triplecross - Linux EBPF rootkit dengan backdoor, C2, injeksi perpustakaan, pembajakan eksekusi, ketekunan dan kemampuan siluman.
Kode
Linux/include/linux/bpf.h - dengan linux/include/uapi/bpf.h: definisi yang terkait dengan EBPF, masing -masing digunakan dalam kernel dan untuk berinteraksi dengan program Userspace.
linux/include/linux/filter.h - dengan linux/include/uapi/filter.h: Informasi yang digunakan untuk menjalankan program BPF sendiri.
Linux/Kernel/BPF/ - Direktori ini berisi sebagian besar kode terkait BPF. Secara khusus, file -file itu sangat menarik:
-
syscall.c - Operasi berbeda yang diizinkan oleh panggilan sistem, seperti pemuatan program atau manajemen peta. -
core.c - BPF Interpreter. -
verifier.c - BPF Verifier.
Linux/Net/Core/Filter.c - Fungsi dan pembantu EBPF yang terkait dengan jaringan (TC, XDP dll.); Juga berisi kode untuk memigrasikan CBPF bytecode ke EBPF (semua program CBPF diterjemahkan ke EBPF dalam kernel terbaru).
Linux/Kernel/Trace/BPF_TRACE.C - Fungsi dan pembantu EBPF yang terkait dengan penelusuran dan pemantauan (KPROBES, TRACEPOINTS, dll.).
Kompiler JIT berada di bawah direktori arsitektur masing -masing, seperti file linux/arch/x86/net/bpf_jit_comp.c untuk x86. Pengecualian dibuat untuk kompiler JIT yang digunakan untuk offload perangkat keras, duduk di driver mereka, seperti Linux/Driver/NET/ETHERNET/NETRONOME/NFP/BPF/JIT.C untuk netronom NFP.
Linux/net/sched/ - dan khususnya dalam file act_bpf.c (Action) dan cls_bpf.c (filter): Kode yang terkait dengan tindakan dan filter BPF dengan TC.
linux/kernel/seccomp.c
Linux/net/core/dev.c - berisi fungsi dev_change_xdp_fd() yang dipanggil melalui perintah NetLink untuk mengaitkan program XDP ke perangkat, setelah IS telah dimuat ke dalam kernel dari ruang pengguna. Fungsi ini secara bergantian menggunakan panggilan balik dari driver yang relevan.
Pengembangan dan komunitas
- Tree BPF -Next - BPF Patchs mendarat di pohon ini. Ini secara teratur digabungkan menjadi net-next, yang dengan sendirinya digabungkan untuk setiap rilis ke pohon Linus.
- Dokumentasi Kernel - Tentang Kontribusi ke BPF.
- NetDev Mailing List - Mailing List untuk Pengembangan Stacking Networking Linux Kernel. Semua tambalan dikirim ke sana untuk ditinjau dan dimasukkan.
- XDP -Newbies - milis khusus yang didedikasikan untuk pemrograman XDP (baik untuk arsitektur atau untuk meminta bantuan).
- IO Visor Mailing List - BPF adalah jantung dari proyek, dan secara teratur dibahas di milis.
- Akun Twitter @iovisor
- Proyek Kolaborasi XDP - Repositori GitHub dengan Catatan dan Gagasan tentang Evolusi XDP di masa depan.
Daftar sumber daya lainnya di EBPF
- Dokumentasi BCC IO Visor
- Repositori BPF-Docs IO Visor
- Menyelam ke BPF: Daftar Bahan Bacaan
Pengakuan
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.
Contributing
Contributions welcome! Read the contribution guidelines first.
Lisensi
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.