EBPF ที่ยอดเยี่ยม
รายการโครงการที่ยอดเยี่ยมที่เกี่ยวข้องกับ EBPF
BPF เช่นเดียวกับใน ตัวกรองแพ็คเก็ต Berkeley เป็นเครื่องเสมือนจริงในเคอร์เนลโปรแกรมที่ใช้งานผ่านจากพื้นที่ผู้ใช้ เริ่มต้นบน BSD จากนั้น Linux, (ตอนนี้มรดก) "คลาสสิก BPF" หรือเครื่อง CBPF จะใช้กับเครื่องมือเช่น TCPDump สำหรับการกรองแพ็คเก็ตในเคอร์เนลเพื่อหลีกเลี่ยงสำเนาที่ไร้ประโยชน์ไปยังพื้นที่ผู้ใช้ เมื่อไม่นานมานี้โครงสร้างพื้นฐาน BPF ใน Linux ได้รับการปรับปรุงใหม่อย่างสมบูรณ์และมอบชีวิตให้กับ "Extended BPF" หรือ EBPF ซึ่งได้รับคุณสมบัติใหม่ (การตรวจสอบความปลอดภัยและการเลิกจ้างการคอมไพล์ JIT สำหรับโปรแกรมแผนที่ถาวรห้องสมุดมาตรฐาน การประมวลผลแพ็คเก็ตในระดับต่ำมาก (XDP) การติดตามและการตรวจสอบเหตุการณ์ในระบบหรือบังคับใช้การควบคุมการเข้าถึงผ่าน cgroups เป็นเพียงตัวอย่างบางส่วนที่ EBPF นำประสิทธิภาพการโปรแกรมการเขียนโปรแกรมและความยืดหยุ่น
เมื่อเร็ว ๆ นี้ Cilium เปิดตัวเว็บไซต์ที่ยอดเยี่ยมเกี่ยวกับ EBPF ที่เรียกว่า EBPF.IO มันให้บริการวัตถุประสงค์ที่คล้ายกันกับรายการนี้โดยมีการแนะนำ EBPF และลิงก์ไปยังโครงการที่เกี่ยวข้อง
หมายเหตุ: EBPF เป็นเทคโนโลยีที่น่าตื่นเต้นและระบบนิเวศของมันมีการพัฒนาอย่างต่อเนื่อง เรารักความช่วยเหลือจาก คุณ เพื่อให้รายการที่ยอดเยี่ยมนี้ทันสมัยและปรับปรุงอัตราส่วนสัญญาณต่อสัญญาณรบกวนต่อไปเราสามารถทำได้ โปรดอย่าลังเลที่จะแสดงความคิดเห็นใด ๆ
สารบัญ
- เอกสารอ้างอิง
- บทความและการนำเสนอ
- บทเรียน
- ตัวอย่าง
- เวิร์กโฟลว์ EBPF: เครื่องมือและสาธารณูปโภค
- โครงการที่เกี่ยวข้องกับ EBPF
- EBPF ในการรักษาความปลอดภัย
- รหัส
- การพัฒนาและชุมชน
- รายการทรัพยากรอื่น ๆ ใน EBPF
- การรับทราบ
เอกสารอ้างอิง
EBPF Essentials
- EBPF.IO - เกตเวย์เพื่อค้นหาพื้นฐานทั้งหมดของ EBPF รวมถึงรายชื่อโครงการหลักที่เกี่ยวข้องและทรัพยากรชุมชน
- คู่มืออ้างอิง BPF และ XDP ของ Cilium - เอกสารเชิงลึกเกี่ยวกับคุณสมบัติและแง่มุมส่วนใหญ่ของ EBPF
เอกสารเคอร์เนล
- เอกสาร BPF - ดัชนีสำหรับเอกสารที่เกี่ยวข้องกับ BPF มาพร้อมกับเคอร์เนล Linux
- Linux/Documentation/Networking/Filter.RST - ข้อมูลจำเพาะ EBPF (ค่อนข้างล้าสมัยข้อมูลยังคงถูกต้อง แต่ไม่ครบถ้วนสมบูรณ์)
- คำถาม & คำตอบการออกแบบ BPF - คำถามที่พบบ่อยเกี่ยวกับการตัดสินใจที่อยู่เบื้องหลังโครงสร้างพื้นฐาน BPF
- Howto โต้ตอบกับระบบย่อย BPF - คำถามที่พบบ่อยเกี่ยวกับการมีส่วนร่วมในการพัฒนา EBPF
หน้าคู่มือ
-
bpf(2) - หน้าด้วยตนเองเกี่ยวกับการโทรระบบ bpf() ใช้ในการจัดการโปรแกรม BPF และแผนที่จาก UsersPACE -
tc-bpf(8) - หน้าด้วยตนเองเกี่ยวกับการใช้ BPF กับ TC รวมถึงคำสั่งตัวอย่างและตัวอย่างของรหัส -
bpf-helpers(7) Man Page-คำอธิบายของฟังก์ชั่นผู้ช่วยในเคอร์เนลที่สร้างห้องสมุดมาตรฐาน BPF
อื่น
ข้อมูลจำเพาะ EBPF ที่ไม่เป็นทางการของ IO Visor - บทสรุปของไวยากรณ์ EBPF และรหัสการทำงาน
เอกสารของ Jesper Dangaard Brouer - ทำงานระหว่างดำเนินการยินดีต้อนรับการมีส่วนร่วม
อีเมลจาก David Miller ไปยังรายชื่อผู้รับจดหมาย XDP-Newbies:
- bpf.h และคุณ ...
- การพูดตามบริบท ...
- ภาพรวม BPF Verifier
รายการคุณสมบัติ BPF ต่อเคอร์เนลเวอร์ชัน
บทความและการนำเสนอ
การนำเสนอและบทความ EBPF ทั่วไป
หากคุณยังใหม่กับ EBPF คุณอาจต้องการลองใช้ลิงก์ที่อธิบายว่าเป็น "การแนะนำ" ในส่วนนี้
การแนะนำสั้น ๆ เกี่ยวกับ XDP และ EBPF - บทนำที่เข้าถึงได้ซึ่งให้บริการบริบทประวัติและรายละเอียดเกี่ยวกับการทำงานของ EBPF
ภาพรวม EBPF - ซีรีส์บล็อกโดย Adrian Ratiu ครอบคลุมหลายแง่มุมของโครงสร้างพื้นฐาน EBPF:
- ส่วนที่ 1: บทนำ
- ส่วนที่ 2: Machine & Bytecode
บล็อกของ Ferris Ellis เกี่ยวกับ EBPF - พวกเขามีโพสต์บางส่วนเกี่ยวกับ EBPF:
- ตอนที่ 1: อดีตปัจจุบันและอนาคต
- ส่วนที่ 2: ประเภท Syscall และแผนที่
คู่มืออ้างอิง BPF - เกี่ยวกับ BPF C และ BCC Python ผู้ช่วยจากที่เก็บ BCC
ทำให้เส้นทางข้อมูลเครือข่ายของเคอร์เนลตั้งโปรแกรมด้วย BPF และ XDP - ชุดสไลด์ที่ครอบคลุมพื้นฐานทั้งหมดเกี่ยวกับ EBPF และ XDP (ส่วนใหญ่สำหรับการประมวลผลเครือข่าย)
ตัวกรองแพ็คเก็ต BSD - บทนำส่วนใหญ่ครอบคลุมด้านการติดตาม
BPF: การติดตามและอื่น ๆ - การแนะนำส่วนใหญ่ครอบคลุมด้านการติดตาม
Linux BPF Superpowers - บทนำส่วนใหญ่ครอบคลุมด้านการติดตามส่วนแรกที่มีกราฟเปลวไฟ
IO Visor - ยังแนะนำโครงการ IO Visor
BPF - เครื่องเสมือนในเคอร์เนล - การนำเสนอโดยผู้เขียน EBPF
ขยาย BPF - โพสต์บล็อกจากปี 2014 เกี่ยวกับการพัฒนา BPF และแสดงให้เห็นถึงสิ่งที่สามารถทำได้โดยใช้ตัวอย่างของการกรองซ็อกเก็ตที่เป็นสถานะโดยการแนบโปรแกรม EBPF เข้ากับซ็อกเก็ต
Greg Marsden ทำเอกสารเกี่ยวกับ EBPF:
- ทัวร์ประเภทโปรแกรม - คำอธิบายของตะขอที่มีอยู่ทั้งหมดสำหรับประเภทโปรแกรม BPF และความสนใจของพวกเขา
- ฟังก์ชั่น BPF Helper - การทบทวนฟังก์ชั่นเคอร์เนลที่สามารถเรียกได้จากภายในโปรแกรม EBPF
- การสื่อสารกับ UsersPace - วิธีการสื่อสารกับ BPF กับ UsersPACE - แผนที่ BPF, เหตุการณ์ PERF, BPF_TRACE_PRINTK
- การสร้างโปรแกรม BPF - การตั้งค่าสภาพแวดล้อมของคุณเพื่อสร้างโปรแกรม BPF
- BPF bytecode และ BPF Verifier - BPF มั่นใจได้อย่างไรว่าโปรแกรมนั้นปลอดภัยอย่างไร
- การใช้ BPF เพื่อทำการแปลงแพ็คเก็ต - การใช้ EBPF หนึ่งครั้งเกี่ยวกับการแปลงแพ็คเก็ต
Linux Kernel การสังเกตผ่าน EBPF - โพสต์บล็อกที่ครอบคลุมพื้นฐานของ EBPF รวมถึงตัวอย่างรหัสในการสร้างและโหลดโปรแกรม EBPF ขั้นต่ำลงในเคอร์เนล
EBPF - จากมุมมองของโปรแกรมเมอร์ - บทความสั้น ๆ ที่อธิบายพื้นฐานของ EBPF และวิธีเริ่มต้นใช้งานโปรแกรม EBPF
โพสต์บล็อกของ CloudFlare บน EBPF - โพสต์บล็อกที่แตกต่างกันเกี่ยวกับกรณีการใช้เครือข่ายและแง่มุมระดับต่ำของ EBPF
Linux Extended BPF (EBPF) เครื่องมือการติดตาม - การรวบรวมข้อมูลเชิงลึกเกี่ยวกับตัวอย่างของเครื่องมือวิเคราะห์ประสิทธิภาพโดยใช้ EBPF ยังมีส่วนที่ส่วนท้ายของหน้าเกี่ยวกับทรัพยากรอื่น ๆ
คู่มือเริ่มต้นของ EBPF - ชุดการพูดคุยแบบสดและตัวอย่างรหัสประกอบแนะนำการเขียนโปรแกรม EBPF โดยใช้ไลบรารีและประเภทโปรแกรมที่หลากหลาย
BPF internals
การติดตามเคอร์เนล
- การติดตามแบบไดนามิกแบบเต็มระบบบน Linux โดยใช้ EBPF และ BPFTRACE - การแนะนำรายละเอียดเกี่ยวกับการติดตามด้วย EBPF จากการแสดงรายการคะแนนติดตามที่มีอยู่จนถึงการรันโปรแกรม BPFTRACE
- พบกันอย่างน่ารักระหว่างการติดตาม EBPF และเคอร์เนล - Kprobes, Uprobes, Ftrace
- การติดตามเคอร์เนล Linux-SystemTap, KernelShark, Trace-CMD, LTTNG, Perf-Tool, Ftrace, Hist-Trigger, Perf, Function Tracer, Tracepoint, Kprobe/Uprobe และอื่น ๆ
- บล็อกของ Brendan Gregg และโดยเฉพาะอย่างยิ่งบทความ Superpowers Linux BPF
XDP
เส้นทางข้อมูลด่วน - การแนะนำที่เข้าถึงได้ง่ายมากถึง XDP ให้รหัสตัวอย่างเพื่อแสดงวิธีประมวลผลแพ็กเก็ต
รายละเอียด XDP ทั้งหมดในเอกสารทางเทคนิค: เส้นทางข้อมูลด่วน: การประมวลผลแพ็คเก็ตที่โปรแกรมได้อย่างรวดเร็วในเคอร์เนลระบบปฏิบัติการโดย Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern และ David Miller
เอกสารที่ทำงานอยู่ระหว่างดำเนินการสำหรับ XDP
คู่มืออ้างอิง BPF และ XDP - คู่มือจากโครงการ Cilium
ภาพรวมโครงการ XDP
Express Data Path (XDP) - งานนำเสนอครั้งแรกเกี่ยวกับ XDP
BOF - BPF ทำอะไรให้คุณได้บ้าง?
Express Data Path - มีผลลัพธ์มาตรฐานบางอย่างที่ได้จากไดรเวอร์ MLX4
Jesper Dangaard Brouer มีสไลด์หลายชุดที่อธิบายถึงภายในของ XDP:
- XDP - Express Data Path, อินโทรและกรณีการใช้งานในอนาคต - การต่อสู้ของ Linux Kernel กับ DPDK แผนการในอนาคต (ณ ของการเขียนนี้) สำหรับ XDP และเปรียบเทียบกับ DPDK
- เวิร์กช็อปประสิทธิภาพเครือข่าย - คำแนะนำเพิ่มเติมเกี่ยวกับ XDP internals และวิวัฒนาการที่คาดหวัง
- XDP - Express Data Path, ใช้สำหรับการป้องกัน DDOS - รายละเอียดและการใช้กรณีเกี่ยวกับ XDP พร้อมผลลัพธ์มาตรฐานและตัวอย่างรหัสสำหรับการเปรียบเทียบรวมถึงการป้องกัน DDOS ขั้นพื้นฐานด้วย EBPF/XDP (ขึ้นอยู่กับรูปแบบการขึ้นบัญชีดำ IP)
- หน่วยความจำกับเครือข่ายการยั่วยุและแก้ไขปัญหาคอขวดของหน่วยความจำ - รายละเอียดขั้นสูงเกี่ยวกับปัญหาหน่วยความจำปัจจุบันที่นักพัฒนา XDP ต้องเผชิญ
- XDP สำหรับพวกเราที่เหลือ - วิธีเริ่มต้นใช้งาน EBPF และ XDP สำหรับมนุษย์ปกติ สรุปโดย Julia Evans ในบล็อกของเธอ
- XDP ตอนนี้ด้วยการเปลี่ยนเส้นทาง - อัปเดตเกี่ยวกับ XDP และโดยเฉพาะอย่างยิ่งในการดำเนินการเปลี่ยนเส้นทาง
XDP Workshop - บทนำประสบการณ์และการพัฒนาในอนาคต (วิดีโอ)
การกรองแพ็คเก็ตความเร็วสูงบน Linux - เกี่ยวกับการกรองแพ็คเก็ตบน Linux, การป้องกัน DDOS, การประมวลผลแพ็คเก็ตในเคอร์เนล, เคอร์เนลบายพาส, XDP และ EBPF
วิธีการวาง 10 ล้านแพ็คเก็ตต่อวินาที - โพสต์บล็อกของ CloudFlare พูดถึงการย้ายไปใช้ XDP สำหรับการกรองแพ็คเก็ต
AF_XDP
- AF_XDP - เอกสารเคอร์เนลในตระกูลที่อยู่ AF_XDP
- การประมวลผลแพ็คเก็ตที่รวดเร็วใน Linux ด้วย AF_XDP
bpfilter
- เหตุใดชุมชนเคอร์เนลจึงแทนที่ Iptables ด้วย BPF? - บล็อกโพสต์โดย Cilium เกี่ยวกับแรงจูงใจที่อยู่เบื้องหลัง EBPF และ BPFilter พร้อมตัวอย่างสองสามและลิงก์ไปยังโครงการอื่น ๆ โดยใช้ EBPF และ BPFilter
- BPFilter: ไฟร์วอลล์ Linux กับซอส EBPF - สไลด์จากการพูดคุยโดย Quentin Monnet ที่มีพื้นหลังบน EBPF และเปรียบเทียบ bpfilter กับ iptables
BTF
- รูปแบบประเภท BPF (BTF) - เอกสารเคอร์เนลเกี่ยวกับ BTF อธิบายวิธีการใช้งาน
- การปรับปรุงเคอร์เนล Linux ด้วยข้อมูลประเภท BTF - คำอธิบายของงานที่ทำกับ BTF เพื่อให้ข้อมูลการดีบักสำหรับโปรแกรม BPF
- BTF (รูปแบบประเภท BPF) คืออะไร-จดหมายข่าวที่ได้รับการแต่งตั้งจากชุมชนที่ได้รับการเสริมด้วยภาพประกอบรหัสที่มีประโยชน์และตัวอย่าง
CBPF
- ตัวกรองแพ็คเก็ต BSD: สถาปัตยกรรมใหม่สำหรับการจับแพ็คเก็ตระดับผู้ใช้ - กระดาษต้นฉบับเกี่ยวกับ (คลาสสิก) BPF
- หน้าคู่มือ FreeBSD เกี่ยวกับ BPF
- แพ็คเก็ต linux 'mmap (2), bpf และ netsniff-ng
- TC และ CLS BPF: การจำแนกแพ็กเก็ตน้ำหนักเบาด้วย BPF
- แนะนำเครื่องมือ BPF ของ CloudFlare - การใช้ BPF bytecode ด้วยโมดูล
xt_bpf สำหรับ iPtables - Libpcap Filters ไวยากรณ์
ฮาร์ดแวร์ออฟโหลด
- ฮาร์ดแวร์ EBPF/XDP ปิดไปยัง SmartNics - Hardware Offload สำหรับ EBPF ด้วย TC หรือ XDP (Linux Kernel 4.9+) แนะนำโดย Netronome
- XDP Offload ที่ครอบคลุม --- การจัดการเคสขอบ-การอัปเดตในหัวข้อด้านบน
- HBPF - EBPF ในฮาร์ดแวร์ - CPU EBPF ที่เขียนขึ้นสำหรับ FPGAS
- OpenCSD EBPF SSD Offloading - แพลตฟอร์มการจำลองการจัดเก็บข้อมูล (QEMU) พร้อมระบบไฟล์ FUSE LFS สำหรับ namespaces ZONED NVME SSDS โดยใช้ UBPF สำหรับการคำนวณเคอร์เนล Offloading ทั้งหมดใน UsersPACE
- Delilah: EBPF -Offload บนที่เก็บข้อมูลการคำนวณ - Delilah เป็นตัวประมวลผลการจัดเก็บข้อมูลการคำนวณ (CSP) ที่สร้างขึ้นสำหรับการถ่าย EBPF ไปยังอุปกรณ์จัดเก็บข้อมูล
บทเรียน
- คู่มืออ้างอิง BCC - ขั้นตอนที่เพิ่มขึ้นหลายขั้นตอนในการเริ่มต้นใช้ BCC และ EBPF ส่วนใหญ่เป็นศูนย์กลางในการติดตามและการตรวจสอบ
- การสอนนักพัฒนา BCC Python - มาพร้อมกับ BCC แต่กำหนดเป้าหมายบิตงูหลามในสิบเจ็ดบทเรียน "
- การสร้างแอพพลิเคชั่น BPF ด้วย libbpf-bootstrap-ช่วยสร้างเทมเพลตขั้นต่ำหรือขั้นสูงเพื่อบูตแอพพลิเคชั่นของคุณเอง (ด้านเคอร์เนลและการจัดการพื้นที่ผู้ใช้สำหรับแผนที่และโปรแกรม) ด้วยคุณสมบัติเช่น Co-RE ตัวแปรระดับโลกและบัฟเฟอร์แหวน
- วิธีที่ฉันเขียน opensnoop ใน PURE C โดยใช้ EBPF - การเดินอย่างละเอียดของวิธีการเขียนโปรแกรม EBPF ก่อนอื่นใช้ SyScall BPF () เท่านั้นและจากนั้นไลบรารี libbpf พร้อมตัวอย่างรหัสที่ทำซ้ำได้
- Linux Tracing Workshops วัสดุ - เกี่ยวข้องกับการใช้เครื่องมือ BPF หลายอย่างสำหรับการติดตาม
- การติดตามการเดินทางแพ็คเก็ตโดยใช้ Linux tracepoints, Perf และ EBPF - การแก้ไขปัญหาการร้องขอ Ping และการตอบกลับด้วยโปรแกรม PERF และ BCC
- เปิดแพลตฟอร์ม NFP - ดำเนินการโดย NetRonome: บทเรียนบางอย่างสำหรับกรณีการใช้ EBPF ที่เกี่ยวข้องกับเครือข่ายรวมถึงคู่มือเริ่มต้นการถ่าย EBPF
- XDP สำหรับพวกเราที่เหลือ - การประชุมเชิงปฏิบัติการฉบับพิมพ์ครั้งแรกเพื่อเริ่มต้นด้วย XDP
- XDP สำหรับพวกเราที่เหลือ - รุ่นที่สองพร้อมเนื้อหาใหม่
- โหลดโปรแกรม XDP โดยใช้คำสั่ง IP (iProute2)
- การสอน XDP บนมือ - การสอนแบบก้าวหน้า (สามระดับของความยากลำบาก) เพื่อเรียนรู้วิธีการประมวลผลแพ็คเก็ตด้วย XDP
- การติดตามทั้งหมดของคุณเป็นของ BPF-คำแนะนำทีละขั้นตอนเพื่อรวมความสามารถในการติดตามในแอปพลิเคชัน C ++ ของคุณกับไลบรารี LLVM
- ไฟร์วอลล์ด้วย BPF/XDP: ตัวอย่างและการดำน้ำลึก - คู่มือง่าย ๆ ในการสร้างไฟร์วอลล์พื้นฐานด้วย TC และ XDP
- การดำน้ำลึกลงไปใน EBPF: การเขียนการตรวจสอบ DNS ที่มีประสิทธิภาพ - คำอธิบายโดยละเอียดเกี่ยวกับวิธีการที่ใช้ในการจับคำขอ DNS ที่เลเยอร์ตัวกรองซ็อกเก็ต
- การสอนนักพัฒนา EBPF - เรียนรู้ EBPF โดยตัวอย่าง - เริ่มต้นด้วยพื้นฐาน EBPF และความคืบหน้าไปสู่หัวข้อขั้นสูงโดยใช้แบบฝึกหัดและตัวอย่างมากกว่า 20 รายการ ครอบคลุมประสิทธิภาพการทำงานเครือข่ายและความปลอดภัยด้วย LIBBPF และ CO-RE มีให้บริการในภาษาจีนและภาษาอังกฤษ
- จับการถดถอยประสิทธิภาพใน EBPF-คู่มือทีละขั้นตอนเพื่อเปรียบเทียบการเปรียบเทียบทั้งรหัสไคลเอนต์และเคอร์เนล EBPF ที่เขียนด้วย Rust
- ลูปและตัววนซ้ำใน EBPF - จดหมายข่าวเกี่ยวกับวิธีการวนซ้ำและวนซ้ำใน EBPF
- EBPF สามารถให้ข้อมูลเชิงลึกอะไรในการรับส่งข้อมูลที่เข้ารหัส SSL/TLS แบบเรียลไทม์และอย่างไร -คู่มือทีละขั้นตอนว่า EBPF สามารถสังเกตการรับส่งข้อมูลเครือข่ายที่เข้ารหัสได้อย่างไร
- EBPF สามารถตรวจจับรูปแบบข้อความ Redis ก่อนที่จะกลายเป็นปัญหาได้หรือไม่? -คู่มือทีละขั้นตอนว่า EBPF สามารถสังเกตการสื่อสาร REDIS ระหว่างไคลเอนต์และเซิร์ฟเวอร์ได้อย่างไร
- การใช้งานพร็อกซีแบบโปร่งใสโดยใช้ EBPF และ GO-คู่มือทีละขั้นตอนเกี่ยวกับวิธีการใช้พร็อกซีโปร่งใสโดยใช้ EBPF
- Load Balancing Load-Powered EBPF-เรียนรู้ว่า EBPF สามารถอนุมานการปรับสมดุลโหลดแบบกำหนดเองได้อย่างไรสำหรับบริการที่ฟังบนพอร์ตเดียวกันผ่านตัวเลือก SO_REUSEPORT TCP
- การทดสอบหน่วยโปรแกรม EBPF - เรียนรู้วิธีที่คุณสามารถทดสอบหน่วยการทดสอบโปรแกรม EBPF ของคุณโดยใช้ LIBBPF
- การเร่งการสื่อสารซ็อกเก็ตในท้องถิ่นโดยใช้ EBPF - เรียนรู้ว่า EBPF สามารถเร่งการสื่อสารซ็อกเก็ตในท้องถิ่นได้มากถึง 30%
ตัวอย่าง
- Linux/samples/bpf/ - ในทรีเคอร์เนล: บางโปรแกรมตัวอย่าง EBPF
- Linux/Tools/Testing/SelfTests/BPF - ในทรีเคอร์เนล: Linux BPF SelfTests พร้อมโปรแกรม EBPF จำนวนมาก
- Prototype-Kernel/Kernel/Samples/BPF-Jesper Dangaard Brouer repository-kernel repository มีตัวอย่างเพิ่มเติมบางอย่างที่สามารถรวบรวมนอกโครงสร้างพื้นฐานเคอร์เนล
- iProute2/ตัวอย่าง/bpf/ - โปรแกรมเครือข่ายบางโปรแกรมเพื่อแนบกับอินเตอร์เฟส TC
- แอปพลิเคชันเครือข่ายตัวอย่าง Netronome - ให้ตัวอย่างพื้นฐาน แต่สมบูรณ์ของแอปพลิเคชัน EBPF ที่เข้ากันได้กับการถ่ายฮาร์ดแวร์
- BCC/ตัวอย่าง - ตัวอย่างที่มาพร้อมกับเครื่องมือ BCC ส่วนใหญ่เกี่ยวกับการติดตาม
- BCC/เครื่องมือ - เครื่องมือเหล่านี้สามารถมองเห็นได้ว่าเป็นกรณีการใช้กรณีสำหรับโปรแกรม BPF ส่วนใหญ่สำหรับการติดตามและการตรวจสอบ เครื่องมือ BCC ได้รับการบรรจุสำหรับการแจกแจง Linux
- ตัวอย่าง MPLSINIP - ตัวอย่างที่แสดงความคิดเห็นอย่างหนักแสดงให้เห็นถึงวิธีการห่อหุ้มและ decapsulate MPLs ภายใน IP รหัสนี้ได้รับการแสดงความคิดเห็นสำหรับผู้ที่เพิ่งพัฒนา BPF
- ตัวอย่าง EBPF - ชุดของตัวอย่างที่รวบรวม (เป็นไฟล์วัตถุ ELF) ที่รวบรวมจากหลายโครงการโดยมีวัตถุประสงค์หลักเพื่อใช้เป็นกรณีทดสอบสำหรับตัวตรวจสอบพื้นที่ผู้ใช้
- EBPF-Kill-Example-ตัวอย่างที่ได้รับการบันทึกและทดสอบอย่างสมบูรณ์ของโพรบ EBPF ที่บันทึกการฆ่าแรงทั้งหมดและพิมพ์ออกมาในพื้นที่ผู้ใช้
- ตัวอย่าง REDBPF - โปรแกรมตัวอย่างสำหรับการใช้ REDBPF เพื่อเขียนโปรแกรม EBPF ใน Rust
- ตัวอย่าง XDP/TC-EBPF-โปรแกรมที่ใช้ XDP/TC-EBPF เพื่อให้ไฟร์วอลล์ StateFull และการเปลี่ยนเส้นทางซ็อกเก็ต
เวิร์กโฟลว์ EBPF: เครื่องมือและสาธารณูปโภค
BCC
- BCC - เฟรมเวิร์กและชุดเครื่องมือ - วิธีหนึ่งในการจัดการโปรแกรม BPF โดยเฉพาะอย่างยิ่งสำหรับการติดตามและการตรวจสอบ รวมถึงยูทิลิตี้บางอย่างที่อาจช่วยตรวจสอบแผนที่หรือโปรแกรมในระบบ
- Lua Front -end สำหรับ BCC - อีกทางเลือกหนึ่งของ C และแม้แต่รหัส Python ส่วนใหญ่ที่ใช้ใน BCC
iProute2
- iProute2 - แพ็คเกจที่มีเครื่องมือสำหรับการจัดการเครือข่ายบน Linux โดยเฉพาะอย่างยิ่งมันมี
tc ใช้ในการจัดการตัวกรองและการกระทำ EBPF และ ip ใช้ในการจัดการโปรแกรม XDP รหัสส่วนใหญ่ที่เกี่ยวข้องกับ BPF อยู่ใน LIB/BPF.C - IPROUTE2-NEXT-แผนผังการพัฒนาซิงโครไนซ์กับ Net-Next
LLVM
libbpf
- Libbpf - ไลบรารี AC ที่ใช้สำหรับการจัดการวัตถุ BPF (โปรแกรมและแผนที่) และจัดการไฟล์วัตถุ ELF ที่มีอยู่ มันถูกส่งไปพร้อมกับเคอร์เนลและทำมิเรอร์บน GitHub
- libbpf-bootstrap-นั่งร้านสำหรับการพัฒนาแอปพลิเคชัน BPF ด้วย LibBPF และ BPF Co-RE
ไปห้องสมุด
- CILIUM/EBPF - ไลบรารี Pure -Go เพื่ออ่านแก้ไขและโหลดโปรแกรม EBPF และแนบเข้ากับตะขอต่าง ๆ ในเคอร์เนล Linux
- libbpfgo - ไลบรารี EBPF สำหรับ GO ขับเคลื่อนโดย LiBBPF
- GOBPF - GO BUNTINGES สำหรับ BCC สำหรับการสร้างโปรแกรม EBPF
aya
- AYA - ห้องสมุดสนิมบริสุทธิ์สำหรับการเขียนการโหลดและการจัดการวัตถุ EBPF โดยมุ่งเน้นที่ประสบการณ์นักพัฒนาและการใช้งาน รองรับการเขียนโปรแกรม EBPF ใน Rust และการแจกจ่ายรหัสห้องสมุดผ่าน Crates.io เพื่อแบ่งปันระหว่างโปรแกรม EBPF AYA ไม่ได้ขึ้นอยู่กับ libbpf
- Aya -Template - เทมเพลตสำหรับการเขียนแอปพลิเคชัน BPF ใน AYA ที่สามารถใช้กับ
cargo generate - EBPFGUARD - ห้องสมุดสนิมสำหรับการเขียนนโยบายความปลอดภัยของ Linux โดยใช้ EBPF
ZBPF
- ZBPF - กรอบ ZIG บริสุทธิ์สำหรับการเขียนโปรแกรมข้ามแพลตฟอร์ม EBPF ขับเคลื่อนโดย LIBBPF และ ZIG Toolchain
Eunomia-BPF
- Eunomia-BPF-กรอบการรวบรวมและไลบรารีรันไทม์เพื่อสร้างแจกจ่ายโหลดแบบไดนามิกและเรียกใช้แอพพลิเคชั่น EBPF Co-RE ในหลายภาษาและ WebAssembly รองรับการเขียนรหัสเคอร์เนล EBPF เท่านั้น (เพื่อสร้างแอปพลิเคชั่น EBPF Co-RE CO-RE อย่างง่าย) การเขียนส่วนเคอร์เนลในรูปแบบ BCC และ LIBBPF และการเขียนผู้ใช้ในหลายภาษาในโมดูล WASM และแจกจ่ายด้วยข้อมูล JSON ที่เรียบง่าย รันไทม์ขึ้นอยู่กับ LIBBPF เท่านั้นและจัดเตรียมโปรแกรม EBPF แบบ Co-RE ให้กับ BCC โดยไม่ขึ้นอยู่กับไลบรารี LLVM
ออกไซด์
- OxideBPF - ห้องสมุดสนิมบริสุทธิ์สำหรับการจัดการโปรแกรม EBPF ออกแบบมาสำหรับกรณีการใช้งานด้านความปลอดภัย FeatureT มี จำกัด มากกว่าห้องสมุดอื่น ๆ แต่เน้นความมั่นคงในเมล็ดพันธุ์ที่หลากหลาย
bpftool และเครื่องมืออื่น ๆ จากต้นเคอร์เนล
พื้นที่ผู้ใช้ EBPF
- UBPF - เขียนใน C. มีล่าม, คอมไพเลอร์ JIT สำหรับสถาปัตยกรรม x86_64, แอสเซมเบลอร์และ disassembler
- การใช้งานทั่วไป - ด้วยการสนับสนุนเคอร์เนล FreeBSD, พื้นที่ผู้ใช้ FreeBSD, เคอร์เนล Linux, พื้นที่ผู้ใช้ Linux และพื้นที่ผู้ใช้ MACOS ใช้สำหรับโมดูลส่วนขยาย BPF ของ Vale Software Switch
- RBPF - เขียนด้วย Rust ล่ามสำหรับ Linux, MacOS และ Windows และ JIT-compiler สำหรับ X86_64 ภายใต้ Linux
- Privail - ตัวตรวจสอบพื้นที่ผู้ใช้สำหรับ EBPF โดยใช้เลเยอร์การตีความนามธรรมพร้อมการสนับสนุนสำหรับลูป
- Oster - เขียนใน GO เครื่องมือสำหรับการติดตามการดำเนินการของโปรแกรม GO โดยการแนบ EBPF เข้ากับ Uprobes
- Wachy - โปรไฟล์การติดตามที่มีจุดมุ่งหมายเพื่อให้การดีบักที่ใช้ EBPF Uprobe ใช้งานง่ายขึ้น สิ่งนี้ทำได้โดยการแสดงร่องรอยใน UI ถัดจากซอร์สโค้ดและช่วยให้การวิเคราะห์การเจาะลึกแบบโต้ตอบ
EBPF บนแพลตฟอร์มอื่น ๆ
- EBPF สำหรับ Windows-โครงการนี้เป็นความคืบหน้าในการทำงานที่อนุญาตให้ใช้เครื่องมือ EBPF ที่มีอยู่และ API ที่คุ้นเคยในระบบนิเวศ Linux ที่จะใช้บน Windows
การทดสอบในสภาพแวดล้อมเสมือนจริง
- การตั้งค่า Vagrant - เพื่อทดสอบ XDP ได้อย่างง่ายดาย มีประโยชน์น้อยลงในขณะนี้ที่ XDP ทั่วไป (เป็นอิสระจากไดรเวอร์ส่วนใหญ่สำหรับการทดสอบ) มีอยู่
- BCC ในคอนเทนเนอร์ Docker
โครงการที่เกี่ยวข้องกับ EBPF
การสร้างเครือข่าย
P4 มีปฏิสัมพันธ์กับ EBPF:
- P4 บนขอบ - P4 พร้อม EBPF เพื่อสร้างสวิตช์ที่ตั้งโปรแกรมได้ประสิทธิภาพสูง
- OVS Orbit Episode (#11) เรียกว่า P4 on the Edge - เกี่ยวข้องกับรายการเดิม การสัมภาษณ์ทางเสียงของ John Fastabend โดย Ben Pfaff หนึ่งในผู้ดูแลหลักของ Open Vswitch
- P4, EBPF และ Linux TC Offload - P4 พร้อมองค์ประกอบบางอย่างที่เกี่ยวข้องกับการถ่ายฮาร์ดแวร์ EBPF บนสถาปัตยกรรม NFP (โปรเซสเซอร์โฟลว์เครือข่าย) ของ Netronome
- เอกสารเก่าสำหรับการใช้ P4 กับ EBPF - จากที่เก็บ BCC; เลิกจ้างโดยแบ็กเอนด์ P4_16 ที่เชื่อมโยงด้านล่าง
- แบ็กเอนด์ P4_16 สำหรับ EBPF
Cilium Project (GitHub Repository) เป็นเทคโนโลยีที่อาศัย BPF และ XDP เพื่อให้ "การบังคับใช้เครือข่ายในเคอร์เนลและการบังคับใช้นโยบายความปลอดภัยอย่างรวดเร็วสำหรับตู้คอนเทนเนอร์ตามโปรแกรม EBPF ที่สร้างขึ้นทันที" มีการนำเสนอมากมาย (พร้อมทับซ้อน):
- Cilium: เครือข่ายและความปลอดภัยสำหรับภาชนะบรรจุด้วย BPF & XDP - ยังมีเคสใช้ตัวโหลดบาลานซ์
- Cilium: เครือข่ายและความปลอดภัยสำหรับคอนเทนเนอร์ที่มี BPF & XDP - วิดีโอ
- Cilium: เครือข่ายคอนเทนเนอร์ IPv6 ที่รวดเร็วด้วย BPF และ XDP
- Cilium: BPF & XDP สำหรับคอนเทนเนอร์
- OVS Orbit Episode (#4) - สัมภาษณ์ Thomas Graf โดย Ben Pfaff
- การแนะนำทั่วไปเกี่ยวกับ cilium
- พอดคาสต์สัมภาษณ์ Thomas Graf - Ivan Pepelnjak สัมภาษณ์ Thomas, ตุลาคม 2016, บน EBPF, P4, XDP และ Cilium
Open VSWITCH (OVS) และโครงการที่เกี่ยวข้องกับ Open Virtual Network (OVN ซึ่งเป็นโซลูชันการจำลองเสมือนของเครือข่ายโอเพ่นซอร์ส) กำลังพิจารณาใช้ EBPF ในระดับต่างๆ:
- การขนถ่ายการไหลของ OVS โดยใช้ EBPF
- การเชื่อมต่อความยืดหยุ่นของ OVN กับประสิทธิภาพของ iovisor
Katran-Load-Balancer Layer 4 ตาม XDP ซึ่งเป็นแหล่งที่มาของ Facebook
XDP ในทางปฏิบัติ: การรวม XDP ในท่อช่วยลด DDOS ของเรา - การป้องกัน DDOS ด้วย XDP ที่ CloudFlare
หยด: การตอบโต้ DDOS ขับเคลื่อนโดย BPF + XDP - การป้องกัน DDOS ด้วย XDP ที่ Facebook
DPDK มีไดรเวอร์โหมดโพล (PMD) ตาม AF_XDP
CETH สำหรับ XDP - เฟรมเวิร์กไดรเวอร์อีเธอร์เน็ตทั่วไปสำหรับเครือข่ายที่เร็วขึ้น I/O ซึ่งเป็นเทคโนโลยีที่เริ่มต้นโดย Mellanox
Suricata ระบบตรวจจับการบุกรุกแบบโอเพ่นซอร์สอาศัยส่วนประกอบ EBPF สำหรับคุณสมบัติ "บายพาสการจับภาพ":
- ส่วน "EBPF และ XDP" ของเอกสาร Suricata
- Septun -Mark -II - คู่มือการปรับประสิทธิภาพสูงสุด - Mark II
- โพสต์บล็อกแนะนำคุณสมบัติ
- การผจญภัยของการทะเลาะกันในดินแดน EBPF
- EBPF และ XDP เห็นจากสายตาของเมียร์แคท
Project Calico - Calico เป็นโซลูชั่นเครือข่ายโอเพนซอร์สและโซลูชั่นความปลอดภัยเครือข่ายสำหรับคอนเทนเนอร์เครื่องเสมือนจริงและเวิร์กโหลดบนโฮสต์ดั้งเดิม ระนาบข้อมูล EBPF ของ Calico มอบระนาบข้อมูลปริมาณงานที่มีปริมาณงานสูงพร้อมรูปแบบนโยบายความปลอดภัยเครือข่ายที่หลากหลาย
- เปิดใช้งานระนาบข้อมูล EBPF ด้วยผ้าดิบ
Merbridge - ใช้ EBPF เพื่อเพิ่มความเร็วตาข่ายบริการของคุณ Merbridge แทนที่กฎ Iptables ด้วย EBPF เพื่อสกัดกั้นการรับส่งข้อมูล นอกจากนี้ยังรวม MSG_REDIRECT เพื่อลดเวลาแฝงกับ DATAPATH ที่สั้นลงระหว่าง sidecars และบริการ
PCAPPLUSPLUS - ไลบรารี C ++ โอเพ่นซอร์สสำหรับการจับภาพการแยกวิเคราะห์และการสร้างแพ็คเก็ตเครือข่าย มันมีอินเทอร์เฟซ C ++ สำหรับการสร้างซ็อกเก็ต AF_XDP ทำให้ง่ายต่อการส่งและรับแพ็กเก็ตผ่านพวกเขา
ความสังเกตได้
- Inkev: การจำลองเสมือนเครือข่ายแบบกระจายในเคอร์เนลสำหรับ DCN
- Deep Mon-ช่วยในการวัดการใช้พลังงานสำหรับเซิร์ฟเวอร์และใช้โปรแกรม EBPF สำหรับการรวมข้อมูลในเคอร์เนล
- Pixie - ความสามารถในการสังเกตสำหรับ Kubernetes โดยใช้ EBPF คุณสมบัติรวมถึงการติดตามโปรโตคอลการทำโปรไฟล์แอปพลิเคชันและการสนับสนุนสำหรับการปรับใช้ BPFTRACE แบบกระจาย
- Skywalking Rover-Apache Skywalking เป็นแพลตฟอร์มการตรวจสอบประสิทธิภาพการทำงานของแอพพลิเคชั่นโอเพนซอร์ซ (APM) ที่ออกแบบมาเป็นพิเศษสำหรับระบบแบบกระจายด้วยไมโครเซิร์ตสถาปัตยกรรมเมฆเมทินแบบคลาวด์และคอนเทนเนอร์ (Kubernetes) Skywalking Rover เป็นตัวรวบรวมโปรไฟล์และตัวชี้วัดที่ใช้ EBPF สำหรับ C, C ++, Golang และ Rust Applications
- Parca-Agent-EBPF ใช้โปรไฟล์ต่อเนื่องอย่างต่อเนื่องสำหรับการวิเคราะห์ CPU และการใช้หน่วยความจำลงไปที่หมายเลขบรรทัดและตลอดเวลา
- RBPERF - Sampling Profiler และ Tracer สำหรับ Ruby
- ฮับเบิล - เครือข่ายบริการและการสังเกตความปลอดภัยสำหรับ Kubernetes โดยใช้ EBPF
- Caretta - แผนที่การพึ่งพาบริการ Kubernetes ทันทีที่สร้างโดย EBPF ซึ่งเป็นอินสแตนซ์ของ Grafana
- DeepFlow - การสังเกตได้ทันทีสำหรับแอปพลิเคชันคลาวด์และ AI ตาม EBPF
ความปลอดภัย
- Falco - โครงการรักษาความปลอดภัยรันไทม์บนคลาวด์ใช้เป็นเครื่องมือตรวจจับภัยคุกคาม Kubernetes
- Sysmon สำหรับ Linux - เครื่องมือตรวจสอบความปลอดภัย มันขึ้นอยู่กับ sysinternalSebpf
- Red Canary Linux Agent - Red Canary เริ่มรวม EBPF เข้ากับเซ็นเซอร์ความปลอดภัย Linux ของพวกเขา
- Tracee - เครื่องมือรักษาความปลอดภัยรันไทม์และนิติวิทยาศาสตร์สำหรับ Linux ซึ่งใช้เทคโนโลยี EBPF เพื่อติดตามระบบและแอปพลิเคชันที่รันไทม์และวิเคราะห์เหตุการณ์ที่รวบรวมเพื่อตรวจจับรูปแบบพฤติกรรมที่น่าสงสัย
- RedCanary-EBPF-SENSOR-ชุดของโปรแกรม BPF ที่รวบรวมข้อมูลเหตุการณ์ที่เกี่ยวข้องกับความปลอดภัยจากเคอร์เนล Linux โปรแกรม BPF จะรวมกันเป็นไฟล์ ELF เดียวที่สามารถโหลดโพรบแต่ละตัวได้ขึ้นอยู่กับระบบปฏิบัติการที่รันและเคอร์เนล
- BPFLOCK - Lock Linux Machines - เครื่องมือรักษาความปลอดภัยที่ขับเคลื่อนด้วย EBPF สำหรับการล็อคและการตรวจสอบเครื่อง Linux
- Tetragon-Kubernetes-Aware, การสังเกตความปลอดภัยที่ใช้ EBPF และการบังคับใช้รันไทม์
- Harpoon - ติดตาม Syscalls จากฟังก์ชั่นพื้นที่ผู้ใช้โดยใช้ EBPF
เครื่องมือ
- PLY - ตัวติดตามแบบไดนามิกโอเพนซอร์สขนาดเล็ก แต่ยืดหยุ่นสำหรับ Linux มีคุณสมบัติคล้ายกับเครื่องมือ BCC แต่ด้วยภาษาที่ง่ายกว่าได้รับแรงบันดาลใจจาก AWK และ DTRACE
- BPFTRACE - เครื่องมือสำหรับการติดตามด้วยภาษาการติดตามระดับสูงของตัวเอง มันมีความยืดหยุ่นเพียงพอที่จะจินตนาการว่าเป็น Linux แทนที่ DTRACE และ SystemTap
- BPFTRACE CHEAT SHEET - SUMMARY และ CHEAT SHEET สำหรับการเขียนโปรแกรมใน BPFTRACE มีข้อมูลเกี่ยวกับไวยากรณ์ประเภทโพรบตัวแปรและฟังก์ชั่น
- Kubectl Trace - ปลั๊กอิน Kubectl สำหรับการดำเนินการโปรแกรม BPFTRACE ในคลัสเตอร์ Kubernetes
- Inspektor-Gadget-ชุดของเครื่องมือที่ใช้ EBPF เพื่อแก้ไขข้อบกพร่องและตรวจสอบทรัพยากรและแอพพลิเคชั่น Kubernetes
- BPFD - เฟรมเวิร์กสำหรับใช้โปรแกรม BPF ด้วยกฎบน Linux เป็น daemon คอนเทนเนอร์รับรู้
- BPFD - Daemon BPF ที่แตกต่างกันพยายามใช้ประโยชน์จากความยืดหยุ่นของเครื่องมือ BCC ในการติดตามและดีบักเป้าหมายระยะไกลและอุปกรณ์เฉพาะที่ทำงานกับ Android
- ADEB - สภาพแวดล้อมของเชลล์ Linux สำหรับการใช้เครื่องมือติดตามบน Android ด้วย BPFD
- GREGGD - ระบบ daemon เพื่อรวบรวมและโหลดโปรแกรม EBPF ลงในเคอร์เนลและส่งออกโปรแกรมไปยังซ็อกเก็ตเพื่อการรวมตัวชี้วัด
- ฟิวส์ - พิจารณาการใช้ EBPF
- UPF-BPF-โซลูชัน in-kernel ที่ใช้ XDP สำหรับ 5G UPF
- REDBPF - เครื่องมือและเฟรมเวิร์กในการเขียนรหัส EBPF ในสนิมได้อย่างมีประสิทธิภาพ
- EBPF -Explorer - เว็บอินเตอร์เฟสเพื่อสำรวจแผนที่และโปรแกรมของระบบ
- EBPFMON - แอปพลิเคชัน TUI (ส่วนต่อประสานผู้ใช้เทอร์มินัล) สำหรับการตรวจสอบแบบเรียลไทม์ของโปรแกรม EBPF
- BPFMAN - ผู้จัดการ EBPF สำหรับ Linux และ Kubernetes รวมถึงโปรแกรมโหลดโปรแกรมในตัวที่รองรับความร่วมมือโปรแกรมสำหรับโปรแกรม XDP และ TC รวมถึงการปรับใช้โปรแกรม EBPF จาก OCI Images
- PTCPDUMP-เครื่องมือ TCPDUMP ที่ใช้ EBPF ที่ใช้ EBPF
EBPF ในการรักษาความปลอดภัย
- โอบกอดสีแดง: BPF ที่น่ารังเกียจ! - ชุดของโพสต์รอบการแนะนำสู่ BPF โดยมุ่งเน้นไปที่การตั้งค่าที่น่ารังเกียจและวิธีการตรวจจับการใช้งานในทางที่ผิด โพสต์รวมถึงการอภิปรายเกี่ยวกับความสามารถของรูทคิทของ EBPF หรือประเภทการติดตามที่จำเป็นสำหรับกรณีการใช้งานที่แตกต่างกัน
- EBPF: บล็อกการดำเนินการของ Linux Payload "Malware" ด้วย BPF LSM - บล็อกโพสต์เกี่ยวกับวิธีที่ BPF สามารถช่วยตรวจจับและปิดกั้นมัลแวร์ที่ไร้เดียงสา
- Blackhat 2021: กับเพื่อน ๆ อย่าง EBPF ใครต้องการศัตรู? - พูดคุยเกี่ยวกับ EBPF Rootkit และความสามารถของ EBPF อาจถูกทารุณกรรมได้อย่างไร Rootkit ก็เป็นเป้าหมายของการพูดคุยที่ defcon, ebpf ฉันคิดว่าเราเป็นเพื่อนกัน!
- EBPFKIT - รูทคิทที่ใช้ประโยชน์จากคุณสมบัติ EBPF หลายอย่างเพื่อใช้เทคนิคการรักษาความปลอดภัยที่ไม่เหมาะสม
- EBPFKIT -MONITOR - ยูทิลิตี้เพื่อวิเคราะห์ EBPF ไบต์หรือตรวจสอบกิจกรรม EBPF ที่น่าสงสัยที่รันไทม์ มันถูกออกแบบมาโดยเฉพาะเพื่อตรวจจับ EBPFKIT
- Bad BPF - ชุดของโปรแกรม EBPF ที่เป็นอันตรายซึ่งใช้ประโยชน์จากความสามารถของ EBPF ในการอ่านและเขียนข้อมูลผู้ใช้ระหว่างโปรแกรม USERMODE และเคอร์เนล
- TripleCross - Linux EBPF Rootkit ที่มีแบ็คดอร์, C2, การฉีดห้องสมุด, การจี้การจี้, การคงอยู่และความสามารถในการลักลอบ
รหัส
Linux/include/linux/bpf.h - ด้วย linux/include/uapi/bpf.h: คำจำกัดความที่เกี่ยวข้องกับ EBPF ที่จะใช้ตามลำดับในเคอร์เนลและอินเทอร์เฟซกับโปรแกรม Userspace
Linux/include/linux/filter.h - ด้วย linux/include/uapi/filter.h: ข้อมูลที่ใช้ในการเรียกใช้โปรแกรม BPF ด้วยตนเอง
Linux/Kernel/BPF/ - ไดเรกทอรีนี้มีรหัสที่เกี่ยวข้องกับ BPF ส่วนใหญ่ โดยเฉพาะอย่างยิ่งไฟล์เหล่านั้นมีค่าที่น่าสนใจ:
-
syscall.c - การดำเนินการที่แตกต่างกันที่ได้รับอนุญาตจากการเรียกระบบเช่นการโหลดโปรแกรมหรือการจัดการแผนที่ -
core.c - ล่าม BPF -
verifier.c - BPF Verifier
linux/net/core/filter.c - ฟังก์ชั่นและผู้ช่วย EBPF ที่เกี่ยวข้องกับเครือข่าย (TC, XDP ฯลฯ ); นอกจากนี้ยังมีรหัสเพื่อโยกย้าย CBPF bytecode ไปยัง EBPF (โปรแกรม CBPF ทั้งหมดถูกแปลเป็น EBPF ในเมล็ดล่าสุด)
Linux/Kernel/Trace/BPF_TRACE.C - ฟังก์ชั่นและผู้ช่วย EBPF ที่เกี่ยวข้องกับการติดตามและการตรวจสอบ (KPROBES, tracepoints ฯลฯ )
คอมไพเลอร์ JIT อยู่ภายใต้ไดเรกทอรีของสถาปัตยกรรมที่เกี่ยวข้องเช่นไฟล์ linux/arch/x86/net/bpf_jit_comp.c สำหรับ x86 มีการทำข้อยกเว้นสำหรับคอมไพเลอร์ JIT ที่ใช้สำหรับการถ่ายฮาร์ดแวร์โดยนั่งอยู่ในไดรเวอร์ของพวกเขาเช่น Linux/Drivers/Net/Ethernet/Netronome/NFP/BPF/JIT.C สำหรับ Netronome NFP
Linux/Net/Sched/ - และโดยเฉพาะอย่างยิ่งในไฟล์ act_bpf.c (การกระทำ) และ cls_bpf.c (ตัวกรอง): รหัสที่เกี่ยวข้องกับการกระทำของ BPF และตัวกรองด้วย TC
linux/kernel/seccomp.c
Linux/net/core/dev.c - มีฟังก์ชั่น dev_change_xdp_fd() ที่เรียกผ่านคำสั่ง netlink เพื่อขอโปรแกรม XDP ไปยังอุปกรณ์หลังจากถูกโหลดลงในเคอร์เนลจากพื้นที่ผู้ใช้ ฟังก์ชั่นนี้จะใช้การโทรกลับจากไดรเวอร์ที่เกี่ยวข้อง
การพัฒนาและชุมชน
- ต้นไม้ BPF -Next - แพทช์ BPF ลงจอดในต้นไม้นี้ มันถูกรวมเข้ากับ Net-next เป็นประจำซึ่งรวมตัวกันสำหรับการเปิดตัวแต่ละต้นไปยังต้นไม้ของ Linus
- เอกสารเคอร์เนล - เกี่ยวกับการมีส่วนร่วมกับ BPF
- รายการจดหมายทางจดหมายของ NetDev - รายชื่อผู้รับจดหมายสำหรับการพัฒนาสแต็กเครือข่าย Linux Kernel แพตช์ทั้งหมดถูกส่งไปที่นั่นเพื่อตรวจสอบและรวม
- XDP -NEWBIES - รายการส่งจดหมายที่อุทิศให้กับการเขียนโปรแกรม XDP เป็นพิเศษ (ทั้งสำหรับสถาปัตยกรรมหรือขอความช่วยเหลือ)
- IO Visor Mailing List - BPF เป็นหัวใจสำคัญของโครงการและมีการหารือกันอย่างสม่ำเสมอในรายชื่อผู้รับจดหมาย
- บัญชี @Iovisor Twitter
- โครงการความร่วมมือ XDP - ที่เก็บ GitHub พร้อมบันทึกและแนวคิดเกี่ยวกับการวิวัฒนาการในอนาคตของ XDP
รายการทรัพยากรอื่น ๆ ใน EBPF
- เอกสาร BCC ของ io Visor
- ที่เก็บ BPF-DOCS ของ IO Visor
- ดำดิ่งลงใน BPF: รายการวัสดุการอ่าน
การรับทราบ
ขอบคุณ Quentin Monnet และ Daniel Borkmann สำหรับงานต้นฉบับของพวกเขาในการดำน้ำใน BPF: รายการวัสดุการอ่านซึ่งกลายเป็นพื้นฐานสำหรับรายการนี้
การบริจาค
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.