قائمة منسقة من المشاريع الرائعة المتعلقة بـ EBPF.
BPF ، كما هو الحال في مرشح حزم بيركلي ، هو جهاز افتراضي في Kernel الذي يتم تشغيله من مساحة المستخدم. تم تنفيذها مبدئيًا على BSD ، ثم Linux ، (الآن Legacy) "Classic BPF" أو آلة CBPF سيتم استخدامها مع أدوات مثل TCPDUMP لتصفية الحزم في kernel لتجنب نسخ عديمة الفائدة إلى مساحة المستخدم. في الآونة الأخيرة ، تمت إعادة صياغة البنية التحتية لـ BPF في Linux بالكامل وأعطت الحياة لـ "BPF الممتدة" ، أو EBPF ، التي اكتسبت ميزات جديدة (شيكات السلامة والإنهاء ، ومجتمع JIT للبرامج ، والخرائط الثابتة ، ومكتبة قياسية ، ودعم تفريغ الأجهزة ، وما إلى ذلك) ، وتستخدم الآن في العديد من المهام. إن معالجة الحزم على مستوى منخفض للغاية (XDP) ، أو تتبع الأحداث والمراقبة على النظام ، أو فرض التحكم في الوصول على مجموعات CGROUPS ليست سوى أمثلة قليلة التي يجلب EBPF الأداء والبرمجة والمرونة.
أطلقت Cilium مؤخرًا موقعًا رائعًا حول EBPF يسمى EBPF.IO. إنه يخدم غرضًا مشابهًا لهذه القائمة ، مع مقدمة إلى EBPF وروابط للمشاريع ذات الصلة.
ملاحظة: EBPF هي جزء مثير من التكنولوجيا ، ونظامها الإيكولوجي يتطور باستمرار. نود المساعدة منك للحفاظ على هذه القائمة الرائعة محدثة ، وتحسين نسبة الإشارة إلى الضوضاء في أي حال يمكننا ذلك. لا تتردد في ترك أي ملاحظات.
bpf(2) - الصفحة اليدوية حول استدعاء نظام bpf() ، تستخدم لإدارة برامج BPF والخرائط من UsserPace.tc-bpf(8) - الصفحة اليدوية حول استخدام BPF مع TC ، بما في ذلك أوامر المثال وعينات من التعليمات البرمجية.bpf-helpers(7) صفحة MAN-وصف وظائف المساعد في Kernel التي تشكل مكتبة BPF القياسية.مواصفات EBPF غير الرسمية لـ IO Visor - ملخص بناء الجملة EBPF ورموز التشغيل.
وثائق Jesper Dangaard Brouer - العمل قيد التقدم ، والمساهمات موضع ترحيب.
رسائل البريد الإلكتروني من David Miller إلى قائمة البريد XDP-Newbies:
قائمة ميزات BPF لكل إصدار kernel
إذا كنت جديدًا على EBPF ، فقد ترغب في تجربة الروابط الموصوفة على أنها "مقدمات" في هذا القسم.
مقدمة موجزة عن XDP و EBPF - مقدمة يمكن الوصول إليها توفر السياق والتاريخ وتفاصيل حول عمل EBPF.
نظرة عامة على EBPF - سلسلة مدونة من Adrian Ratiu ، تغطي العديد من جوانب البنية التحتية EBPF:
منشورات مدونة Ferris Ellis حول EBPF - لديهم بعض المشاركات حول EBPF:
دليل مرجعي BPF - حول مساعدي BPF C و BCC Python ، من مستودع BCC.
جعل مسار بيانات شبكة kernel قابلاً للبرمجة مع BPF و XDP - مجموعة من الشرائح التي تغطي جميع الأساسيات حول EBPF و XDP (في الغالب لمعالجة الشبكة).
مرشح حزمة BSD - مقدمة تغطي في الغالب جوانب التتبع.
BPF: التتبع والمزيد - مقدمة تغطي في الغالب جوانب التتبع.
Linux BPF Ploypowers - مقدمة تغطي في الغالب جوانب التتبع ، الجزء الأول مع الرسوم البيانية اللهب.
IO Visor - يقدم أيضًا مشروع IO Visor.
BPF - الجهاز الظاهري In -Kernel - عرض مؤلف EBPF.
تمديد BPF الممتد - منشور مدونة من عام 2014 على تطوير BPF وإظهار ما يمكن القيام به ، باستخدام مثال على تصفية المقبس الالتحام عن طريق ربط برنامج EBPF بمقبس.
قام جريج مارسدن ببعض الوثائق حول EBPF:
Linux kernel obsertibility من خلال EBPF - منشور مدونة تغطي أساسيات EBPF بالإضافة إلى عينات التعليمات البرمجية في Go How to Build Thaning EBPF في kernel.
EBPF - من منظور المبرمج - ورقة قصيرة تصف أساسيات EBPF وكيفية البدء في كتابة برامج EBPF.
منشورات مدونة CloudFlare على EBPF - منشورات مدونة مختلفة حول حالات استخدام الشبكات والجوانب ذات المستوى المنخفض من EBPF.
أدوات تتبع Linux Extended BPF (EBPF) - مجموعة متعمقة من المعلومات حول أمثلة أدوات تحليل الأداء باستخدام EBPF. يحتوي أيضًا على قسم في نهاية الصفحة حول الموارد الأخرى.
دليل المبتدئين إلى EBPF - مجموعة من محادثات الترميز المباشر وأمثلة الكود المصاحبة ، وتقديم برمجة EBPF باستخدام مجموعة متنوعة من المكتبات وأنواع البرامج.
قدم دانييل بوركمان العديد من العروض والأوراق التي تغطي الداخلية من EBPF ، لا سيما حول استخدامها مع TC.
مدونة IO Visor
أوضح Linux Networking - Linux Networking Internals ، مع جزء حول EBPF.
مسار البيانات السريع - مقدمة يمكن الوصول إليها إلى XDP ، وتوفير رمز عينة لإظهار كيفية معالجة الحزم.
جميع تفاصيل XDP في ورقة تقنية: مسار البيانات السريعة: معالجة الحزم السريعة القابلة للبرمجة في نظام التشغيل kernel ، بقلم Toke Høiland-Jørgensen و Jesper Dangaard Brouer و Daniel Borkmann و John Fastabend و Tom Herbert و David Ahern و David Miller ، وجميعهم مساهمون EBPF و XDP.
وثائق العمل في Progress لـ XDP
دليل مرجع BPF و XDP - دليل من مشروع Cilium.
نظرة عامة على مشروع XDP
Express Data Path (XDP) - العرض التقديمي الأول حول XDP.
BOF - ماذا يمكن أن تفعل BPF لك؟
مسار البيانات السريع - يحتوي على بعض النتائج القياسية التي تم الحصول عليها مع برنامج تشغيل MLX4.
لدى Jesper Dangaard Brouer عدة مجموعات من الشرائح التي تصف الداخلية لـ XDP:
ورشة XDP - مقدمة ، خبرة ، والتطوير المستقبلي (فيديو)
تصفية حزمة عالية السرعة على Linux - حول تصفية الحزمة على Linux ، حماية DDOS ، معالجة الحزم في kernel ، kernel passpass ، XDP و EBPF.
كيفية إسقاط 10 ملايين حزمة في الثانية - مدونة CloudFlare تتحدث عن انتقالها إلى استخدام XDP لتصفية الحزم.
xt_bpf لـ IPTABLES.tc ، يستخدم لإدارة مرشحات وإجراءات EBPF ، و ip ، وتستخدم لإدارة برامج XDP. معظم الكود المتعلق بـ BPF في LIB/BPF.C.LLVM - يحتوي على العديد من الأدوات المستخدمة في سير عمل EBPF. يمكن استرداد لقطات من أحدث الإصدارات لأوبونتو/دبيان من هنا.
cargo generate .Bpftool - أيضًا بعض الأدوات الأخرى في شجرة kernel ، تحت Linux/Tools/Net/للإصدارات في وقت سابق من 4.15 ، أو Linux/Tools/BPF/بعد ذلك:
bpftool - أداة عامة يمكن استخدامها للتفاعل مع برامج EBPF والخرائط من PACEPACE ، على سبيل المثال لإظهار البرامج أو التفريغ أو التحميل أو تفكيك أو دبوس أو إظهار أو إنشاء أو تحديث أو حذف الخرائط أو توصيل البرامج وفصلها إلى مجموعات CGROPS.bpf_asm - تجميع CBPF الحد الأدنى.bpf_dbg - تصحيح أخطاء صغير لبرامج CBPF.bpf_jit_disasm - Disassembler لكل من نكهات BPF ويمكن أن يكون مفيدًا للغاية في تصحيح الأخطاء JIT.P4 لديه بعض التفاعلات مع EBPF:
Cilium Project (GitHub Restository) هو تقنية تعتمد على BPF و XDP لتوفير "شبكات الشبكات السريعة وإنفاذ سياسة الأمان للحاويات المستندة إلى برامج EBPF التي تم إنشاؤها أثناء الطيران". العديد من العروض التقديمية المتاحة (مع التداخل):
تفكر VSWITCH OPEN (OVS) ، والشبكة الافتراضية المفتوحة للمشروع (OVN ، حل المحاكاة الافتراضية لشبكة مفتوحة المصدر) باستخدام EBPF على مستوى مختلف:
Katran-طبقة 4 Load-Balancer تعتمد على XDP ، مفتوحة المصدر بواسطة Facebook.
XDP في الممارسة العملية: دمج XDP في خط أنابيب التخفيف من DDOS - الحماية من DDOs مع XDP في CloudFlare.
قطرة: التدابير المضادة لـ DDOS مدعوم من BPF + XDP - الحماية من DDOs مع XDP في Facebook.
يحتوي DPDK على سائق وضع استطلاع (PMD) استنادًا إلى AF_XDP
CETH for XDP - إطار عمل سائق Ethernet المشترك لشبكة I/O بشكل أسرع ، وهي تقنية بدأتها Mellanox.
يعتمد Suricata ، وهو نظام اكتشاف التسلل مفتوح المصدر ، على مكونات EBPF لميزات "الالتقاط الالتفافية":
Project Calico - Calico هو حل شبكات مفتوح المصدر وأمن الشبكة للحاويات والأجهزة الافتراضية وأعباء العمل المستندة إلى المضيف الأصلي. توفر طائرة بيانات EBPF من Calico طائرة بيانات منخفضة الإنتاجية منخفضة مع نموذج سياسة أمان شبكة غنية.
Merbridge - استخدم EBPF لتسريع شبكة الخدمة الخاصة بك. يستبدل Merbridge قواعد IPTABLES مع EBPF لاعتراض حركة المرور. كما يجمع بين msg_redirect لتقليل الكمون مع datapath مختصرة بين Sidecars والخدمات.
PCAPPLUSPLUS - مكتبة C ++ مفتوحة المصدر لالتقاط وحزم الشبكة وصياغة. يتميز بواجهة C ++ لإنشاء مآخذ AF_XDP ، مما يجعل من السهل إرسال واستقبال الحزم من خلالها.
Linux/include/linux/bpf.h - مع linux/include/uapi/bpf.h: التعاريف المتعلقة بـ EBPF ، لاستخدامها على التوالي في kernel والواجهة مع برامج مساحة المستخدمين.
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 إلى جهاز ، بعد أن تم تحميله في kernel من مساحة المستخدم. تستخدم هذه الوظيفة بدوره رد اتصال من برنامج التشغيل ذي الصلة.
شكرًا لك 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.