Génial eBPF
Une liste organisée de projets impressionnants liés à l'EBPF.
BPF, comme dans le filtre de paquets de Berkeley , est une machine virtuelle dans le nage en cours d'exécution de programmes de l'espace utilisateur. Initialement implémenté sur BSD, puis Linux, la machine (maintenant héritée) "Classic BPF" ou CBPF serait utilisée avec des outils tels que TCPDUmp pour filtrer les paquets dans le noyau pour éviter les copies inutiles de l'espace utilisateur. Plus récemment, l'infrastructure BPF de Linux a été entièrement retravaillée et a donné vie au "BPF étendu", ou EBPF, qui a gagné de nouvelles fonctionnalités (vérification de sécurité et de terminaison, compilation JIT pour les programmes, cartes persistantes, une bibliothèque standard, un support de décharge matérielle, etc.) et est désormais utilisé pour de nombreuses tâches. Le traitement des paquets à un niveau très bas (XDP), le traçage et la surveillance des événements sur le système, ou l'application du contrôle d'accès sur les CGROUPS ne sont que quelques exemples auxquels EBPF apporte des performances, de la programmabilité et de la flexibilité.
Récemment, Cilium a lancé un excellent site Web sur EBPF appelé EBPF.io. Il sert un objectif similaire à cette liste, avec une introduction à l'EBPF et des liens vers des projets connexes.
Remarque: l'EBPF est une technologie passionnante, et son écosystème évolue constamment. Nous aimerions l'aide de vous pour garder cette liste impressionnante à jour et améliorer son rapport signal / bruit de toute façon. N'hésitez pas à laisser des commentaires.
Contenu
- Documentation de référence
- Articles et présentations
- Tutoriels
- Exemples
- EBPF Workflow: Outils et utilitaires
- Projets liés à l'EBPF
- EBPF en sécurité
- Le code
- Développement et communauté
- Autres listes de ressources sur EBPF
- Reconnaissance
Documentation de référence
EBPF Essentials
- EBPF.io - Une passerelle pour découvrir toutes les bases de l'EBPF, y compris une liste des principaux projets connexes et des ressources communautaires.
- Guide de référence BPF et XDP de Cilium - Documentation approfondie sur la plupart des fonctionnalités et aspects de l'EBPF.
Documentation du noyau
- Documentation BPF - Index pour la documentation liée au BPF à venir avec le noyau Linux.
- Linux / Documentation / Networking / Filter.RST - Spécification EBPF (quelque peu obsolète; les informations doivent toujours être valides, mais pas exhaustives).
- BPF Design Q&R - Des questions fréquemment posées sur les décisions derrière l'infrastructure BPF.
- Comment interagir avec le sous-système BPF - les questions fréquemment posées sur la contribution au développement de l'EBPF.
Pages manuelles
-
bpf(2) - Page manuelle sur l'appel système bpf() , utilisé pour gérer les programmes et cartes BPF à partir de l'espace utilisateur. -
tc-bpf(8) - Page manuelle sur l'utilisation de BPF avec TC, y compris des exemples de commandes et d'échantillons de code. -
bpf-helpers(7) Man Page - Description des fonctions d'assistance in-kernel formant la bibliothèque standard BPF.
Autre
Spécifications EBPF non officielles de la visière IO - Résumé de la syntaxe EBPF et des codes de fonctionnement.
La documentation de Jesper Dangaard Brouer - travail en cours, contributions bienvenue.
Courriels de David Miller à la liste de diffusion XDP-Newbies:
- bpf.h et vous ...
- Contexte parlant ...
- Présentation du vérificateur BPF
Liste des fonctionnalités BPF par version du noyau
Articles et présentations
Présentations et articles génériques de l'EBPF
Si vous êtes nouveau dans EBPF, vous pouvez essayer les liens décrits comme des "introductions" dans cette section.
Une brève introduction à XDP et EBPF - une introduction accessible fournissant le contexte, l'historique et les détails sur le fonctionnement de l'EBPF.
Un aperçu de l'EBPF - Série de blogs d'Adrian Ratiu, couvrant de nombreux aspects de l'infrastructure EBPF:
- Partie 1: Introduction
- Partie 2: machine et bytecode
Les articles de blog de Ferris Ellis sur l'EBPF - ils ont quelques articles sur EBPF:
- Partie 1: passé, présent et futur
- Partie 2: Types de systèmes et de cartes
Un guide de référence BPF - À propos des aides BPF C et BCC Python, du référentiel BCC.
Rendre le chemin de données de réseautage du noyau programmable avec BPF et XDP - un ensemble de diapositives couvrant toutes les bases sur EBPF et XDP (principalement pour le traitement du réseau).
Le filtre de paquets BSD - une introduction couvrant principalement les aspects de traçage.
BPF: traçage et plus - une introduction couvrant principalement les aspects de traçage.
Linux BPF SuperPowers - Une introduction couvrant principalement les aspects de traçage, première partie avec des graphiques de flamme.
IO Visor - Présent également le projet IO Visor.
BPF - Machine virtuelle in-kernel - présentation par l'auteur de l'EBPF.
Extension du BPF étendu - Un article de blog de 2014 sur le développement du BPF et la démonstration de ce qui peut être fait avec lui, en utilisant un exemple de filtrage de socket avec état en attachant un programme EBPF à une prise.
Greg Marsden a fait quelques documents sur EBPF:
- Une visite des types de programmes - une description de tous les crochets existants pour les types de programmes BPF et de leur intérêt.
- Fonctions BPF Helper - Une revue des fonctions du noyau qui peuvent être appelées à partir des programmes EBPF.
- Communiquer avec Userspace - Comment BPF communique avec USERSPACE - BPF MAPS, PERF Events, BPF_TRACE_PRINTK.
- Construire des programmes BPF - Configuration de votre environnement pour créer des programmes BPF.
- Le bytecode BPF et le vérificateur BPF - comment BPF garantit-il que les programmes sont sûrs?
- Utilisation du BPF pour effectuer la transformation des paquets - une utilisation EBPF sur la transformation des paquets.
Observabilité du noyau Linux via EBPF - Un article de blog couvrant les bases de l'EBPF ainsi que des échantillons de code dans la façon de créer et de charger un programme EBPF minimal dans le noyau.
EBPF - Du point de vue d'un programmeur - un court article décrivant les principes fondamentaux de l'EBPF et comment commencer par la rédaction de programmes EBPF.
Les articles de blog de CloudFlare sur EBPF - différents articles de blog sur les cas d'utilisation de réseautage et les aspects de bas niveau de l'EBPF.
Outils de traçage BPF étendus Linux (EBPF) - une collection approfondie d'informations autour d'exemples d'outils d'analyse de performances utilisant EBPF. Contient également une section à la fin de la page sur d'autres ressources.
Guide du débutant sur l'EBPF - un ensemble de conférences de codage en direct et les exemples de code qui l'accompagnent, introduisant la programmation EBPF à l'aide d'une variété de bibliothèques et de types de programmes.
BPF internes
Daniel Borkmann a fait plusieurs présentations et papiers couvrant les internes de l'EBPF, en particulier sur son utilisation avec TC.
- Procédure pas à pas EBPF et XDP et mises à jour récentes (2017)
- Programmabilité avancée et mises à jour récentes avec CLS_BPF de TC - Détails sur EBPF, son utilisation pour la tunneling et l'encapsulation, l'accès direct aux paquets, etc.
- CLS_BPF / EBPF MISES À JOUR COMME NETDEV 1.1 - Partie de cet atelier TC.
- Sur l'obtention du classificateur TC entièrement programmable avec CLS_BPF - Introduction à EBPF, y compris plusieurs fonctionnalités (gestion de cartes, appels de queue, vérificateur). Le papier complet est également disponible ici.
- Linux TC et EBPF
Blog IO Visor
Linux Networking a expliqué - Linux Networking internes, avec une partie sur EBPF.
Tracé du noyau
- Traçage dynamique du système complet sur Linux à l'aide d'EBPF et BPFTrace - une introduction détaillée au traçage avec EBPF, de la liste des points de trace disponibles pour exécuter les programmes BPFTrace.
- Meet-Cute entre EBPF et tracé du noyau - Kprobes, Uprobes, Ftrace.
- Traçage du noyau Linux - SystemTap, Kernelshark, trace-cmd, lttng, perf-tool, ftrace, hist-trigger, perf, fonction traceur, tracepoint, kprobe / uprobe, et plus encore.
- Le blog de Brendan Gregg, et en particulier l'article Linux BPF SuperPowers.
Xdp
Le chemin de données express - une introduction très accessible à XDP, fournissant un exemple de code pour montrer comment traiter les paquets.
Tous les détails XDP dans un document technique: The Express Data Chemin: Fast Programmable Packet Processing in the Operating System Kernel, par Toke Høiland-Jørgensen, Jesper Dangaard Brouer, Daniel Borkmann, John Fastabend, Tom Herbert, David Ahern et David Miller, tous étant des contributeurs EBPF et XDP essentiels.
Documentation de travail en cours pour XDP
Guide de référence BPF et XDP - Guide du projet CILIUM.
Présentation du projet XDP
Express Data Path (XDP) - La première présentation sur XDP.
BOF - Que peut faire BPF pour vous?
Chemin de données Express - contient certains résultats de référence obtenus avec le pilote MLX4.
Jesper Dangaard Brouer a plusieurs ensembles de diapositives décrivant les internes de XDP:
- XDP - Express Data Chemin, intro et futures-cas d'utilisation - lutte du noyau Linux contre DPDK. Plans futurs (à ce jour) pour XDP et comparaison avec DPDK.
- Atelier de performances du réseau - Conseils supplémentaires sur les internes XDP et l'évolution attendue.
- XDP - Chemin de données express, utilisé pour la protection DDOS - Détails et cas d'utilisation sur XDP, avec les résultats de référence et les extraits de code pour l'analyse comparative ainsi que pour la protection DDOS de base avec EBPF / XDP (basé sur un schéma de liste noire IP).
- Mémoire vs réseautage, provoquant et fixant des goulots d'étranglement de mémoire - Détails avancés sur les problèmes de mémoire actuels auxquels sont confrontés les développeurs XDP.
- XDP pour le reste d'entre nous - comment commencer avec EBPF et XDP pour les humains normaux. Aussi résumé par Julia Evans sur son blog.
- XDP maintenant avec Redirection - Mise à jour sur XDP, et en particulier sur les actions de redirection.
Atelier XDP - Introduction, expérience et développement futur (vidéo)
Filtrage de paquets à grande vitesse sur Linux - À propos du filtrage des paquets sur Linux, protection DDOS, traitement des paquets dans le noyau, contournement du noyau, XDP et EBPF.
Comment supprimer 10 millions de paquets par seconde - le billet de blog de CloudFlare parlant de leur passage à l'utilisation de XDP pour le filtrage des paquets.
Af_xdp
- AF_XDP - Documentation du noyau sur la famille d'adresses AF_XDP.
- Traitement rapide des paquets en Linux avec af_xdp
bpfilter
- Pourquoi la communauté du noyau remplace-t-elle les iptables par BPF? - Un article de blog de Cilium sur les motivations derrière EBPF et BPFilter, avec quelques exemples et liens vers d'autres projets utilisant EBPF et BPFilter.
- BPFilter: pare-feu Linux avec sauce EBPF - glisse à partir d'une conversation de Quentin Monnet avec un arrière-plan sur EBPF et en comparant BPFilter aux iptables.
Btf
- Format de type BPF (BTF) - Documentation du noyau sur BTF, expliquant comment l'utiliser.
- Amélioration du noyau Linux avec des informations de type BTF - Une description du travail effectué avec BTF pour fournir des informations de débogage pour les programmes BPF.
- Qu'est-ce que BTF (Format de type BPF) - une newsletter autorisée par la communauté enrichie d'illustrations de code utiles et d'exemples pratiques.
cbpf
- Le filtre BSD Packet: une nouvelle architecture pour la capture de paquets au niveau de l'utilisateur - Le papier d'origine sur le BPF (classique).
- La page manuelle FreeBSD sur BPF
- Paquet Linux MMAP (2), BPF et NetSniff-NG
- TC et CLS BPF: paquets légers classifiant avec BPF
- Présentation des outils BPF de CloudFlare - Utilisation de BPF Bytecode avec le module
xt_bpf pour iptables. - Syntaxe des filtres LIBPCAP
Déchargement matériel
- EBPF / XDP matériel Déchargement sur Smartnics - Déchargement matériel pour EBPF avec TC ou XDP (noyau Linux 4.9+), introduit par Nettronome.
- Comprehensive XDP Offload --- Gestion des cas Edge - une mise à jour sur le sujet ci-dessus.
- HBPF - EBPF dans le matériel - un CPU EBPF écrit pour les FPGA.
- OpenCSD EBPF SSD Offchargement - Plateforme de simulation de stockage de calcul (QEMU) avec système de fichiers FUSE LFS pour les espaces de noms zonés NVME SSDS utilisant UBPF pour le déchargement du noyau de calcul, le tout dans l'espace utilisateur.
- Delilah: EBPF-Offload on Computational Storage - Delilah est un processeur de stockage de calcul (CSP) conçu pour le déchargement EBPF vers les périphériques de stockage.
Tutoriels
- Guide de référence BCC - de nombreuses étapes incrémentielles pour commencer à utiliser BCC et EBPF, principalement centrées sur le traçage et la surveillance.
- BCC Python Developer Tutorial - est livré avec BCC, mais cible les bits Python sur dix-sept "leçons".
- La création d'applications BPF avec LiBBPF-Bootstrap - aide à générer des modèles minimaux ou avancés pour bootstrap vos propres applications (gestion du côté du noyau et de l'espace utilisateur pour les cartes et les programmes) avec des fonctionnalités telles que CO-RE, les variables globales et le tampon de bague.
- Comment j'ai fini par écrire OpenSNoop dans Pure C en utilisant EBPF - une promenade complète de la façon d'écrire des programmes EBPF, en utilisant d'abord uniquement BPF () Syscall, puis de la bibliothèque libbpf, avec des exemples de code reproductibles.
- Les ateliers de traçage Linux - implique l'utilisation de plusieurs outils BPF pour le traçage.
- Traçage d'un parcours de paquets à l'aide de tracepoints Linux, Perf et EBPF - Dépannage des demandes de ping et des réponses avec des programmes PERF et BCC.
- Open Platform NFP - Exploité par NETRIEMOME: quelques didacticiels pour les cas d'utilisation EBPF liés au réseau, y compris un guide de démarrage de déchargement EBPF.
- XDP pour le reste d'entre nous - Première édition d'un atelier pour commencer avec XDP.
- XDP pour le reste d'entre nous - Deuxième édition, avec de nouveaux contenus.
- Chargez des programmes XDP à l'aide de la commande IP (iProute2)
- Tutoriel pratique XDP - Un tutoriel progressif (trois niveaux de difficulté) pour apprendre à traiter les paquets avec XDP.
- Tous vos traçages appartiennent à BPF - une procédure pas à pas étape par étape pour intégrer les capacités de traçage dans vos applications C ++ avec les bibliothèques LLVM.
- Terroisement avec BPF / XDP: Exemples et plongée profonde - Un guide simple pour créer des pare-feu de base avec TC et XDP.
- Une plongée profonde dans EBPF: rédaction d'une surveillance DNS efficace. - Une explication détaillée des méthodes utilisées pour capturer les demandes DNS à la couche de filtre à douille.
- Tutoriel du développeur EBPF - Apprenez EBPF par exemples - Commencez avec les bases EBPF et progressez vers des sujets avancés en utilisant plus de 20 tutoriels et exemples pratiques. Couvre les performances, le réseautage et la sécurité avec LiBBPF et CO-RE. Disponible en chinois et en anglais.
- Catch Performance Regressions dans EBPF - Un guide étape par étape pour analyser le code EBPF client et noyau écrit en rouille.
- LOOCS ET ITERATEURS EN EBPF - Newsletter sur toutes les façons de faire boucle et d'itérer dans EBPF.
- Quelles idées l'EBPF peut-elle fournir dans le trafic crypté SSL / TLS en temps réel et comment? - Guide étape par étape comment EBPF peut observer le trafic réseau chiffré.
- EBPF peut-il détecter les modèles de messages redis avant de devenir des problèmes? - Guide étape par étape comment EBPF peut observer la communication Redis entre le client et le serveur.
- Implémentation proxy transparente à l'aide d'EBPF et GO - un guide étape par étape sur la façon d'implémenter un proxy transparent à l'aide d'EBPF.
- Équilibrage de charge alimenté par EBPF - Découvrez comment EBPF peut déduire l'équilibrage de charge personnalisé pour les services écoutant sur le même port, via l'option SO_REUSEPORT TCP.
- Test d'unité Programmes EBPF - Découvrez comment vous pouvez tester vos programmes EBPF à l'aide de LiBBPF.
- Accélération de la communication de socket locale à l'aide de l'EBPF - Découvrez comment EBPF peut accélérer la communication de socket locale jusqu'à 30%.
Exemples
- Linux / Samples / BPF / - Dans l'arborescence du noyau: quelques exemples de programmes EBPF.
- Linux / Tools / Testing / Selftests / BPF - Dans l'arborescence du noyau: Linux BPF Selftests, avec de nombreux programmes EBPF.
- Prototype-Kernel / Kernel / Samples / BPF - Le référentiel prototype-kernel de Jesper Dangaard Brouer contient des exemples supplémentaires qui peuvent être compilés en dehors de l'infrastructure du noyau.
- iPROUTE2 / Exemples / bpf / - Certains programmes de réseautage pour s'attacher à l'interface TC.
- Les applications de réseau d'échantillons NETRIMOME - fournit des exemples de base mais complets d'applications EBPF également compatibles avec le déchargement matériel.
- BCC / Exemples - Exemples accompagnés des outils BCC, principalement sur le traçage.
- BCC / Outils - Ces outils eux-mêmes peuvent être considérés comme des exemples de cas d'utilisation pour les programmes BPF, principalement pour le traçage et la surveillance. Les outils BCC ont été emballés pour certaines distributions Linux.
- Échantillon MPLSINIP - Un échantillon fortement commenté démontrant comment encapsuler et décapsuler les MPL dans IP. Le code est commenté pour ceux qui sont nouveaux dans le développement du BPF.
- Échantillons EBPF - Une collection d'échantillons compilés (en tant que fichiers d'objets ELF) recueillis à partir de plusieurs projets, principalement destinés à servir de cas de test pour les vérificateurs de l'espace utilisateur.
- EBPF-KILL-Example - Un exemple entièrement documenté et testé d'une sonde EBPF qui enregistre toutes les kills de force et les imprime dans l'espace utilisateur.
- Exemples RedBPF - Exemples de programmes d'utilisation de RedBPF pour écrire des programmes EBPF dans Rust.
- Exemple XDP / TC-EBPF - Programme qui utilise XDP / TC-EBPF pour fournir un pare-feu et une redirection de socket statefull.
EBPF Workflow: Outils et utilitaires
BCC
- BCC - Framework et ensemble d'outils - une façon de gérer les programmes BPF, en particulier pour le traçage et la surveillance. Comprend également certains services publics qui peuvent aider à inspecter les cartes ou les programmes sur le système.
- LUA front-end pour BCC - une autre alternative à C, et même à la plupart du code Python utilisé dans BCC.
iproute2
- IPROUTE2 - Outils contenant des packages pour la gestion du réseau sur Linux. En particulier, il contient
tc , utilisé pour gérer les filtres et les actions EBPF, et ip , utilisé pour gérer les programmes XDP. La plupart du code lié à BPF se trouve dans Lib / BPF.C. - IPROUTE2-NEXT - L'arbre de développement, synchronisé avec Net-Next.
Llvm
libbpf
- libbpf - bibliothèque AC utilisée pour gérer les objets BPF (programmes et cartes) et manipuler des fichiers d'objets ELF les contenant. Il est expédié avec le noyau et se reflétait sur Github.
- libbpf-bootstrap - échafaudage pour le développement d'applications BPF avec libbpf et bpf co-re.
GO BIBLIBRES
- CILIUM / EBPF - Bibliothèque Pure-Go pour lire, modifier et charger les programmes EBPF et les attacher à divers crochets dans le noyau Linux.
- libbpfgo - bibliothèque EBPF pour go, alimentée par libbpf.
- GOBPF - GO RESTAGES POUR BCC pour la création de programmes EBPF.
Aya
- Aya - Une bibliothèque de rouille pure pour l'écriture, le chargement et la gestion des objets EBPF, en mettant l'accent sur l'expérience et l'opérabilité des développeurs. Il prend en charge la rédaction de programmes EBPF dans Rust et la distribution du code de bibliothèque sur Crates.io pour le partager entre les programmes EBPF. Aya ne dépend pas de libbpf.
- AYA-Template - Modèles pour écrire des applications BPF dans AYA qui peuvent être utilisés avec
cargo generate . - EBPFGUARD - Bibliothèque Rust pour écrire des politiques de sécurité Linux à l'aide d'EBPF.
zbpf
- ZBPF - Un framework en zig pur pour l'écriture de programmes EBPF multiplateformes, alimentés par LibBPF et Zig Toolchain.
eunomia-bpf
- Eunomia-BPF - Un cadre de compilation et une bibliothèque d'exécution pour créer, distribuer, charger dynamiquement et exécuter les applications CO-REB EBPF dans plusieurs langues et webassembly. Il prend en charge la rédaction du code du noyau EBPF uniquement (pour créer des applications CO-RE LIBBPF EBPF simples), en écrivant la partie du noyau dans les styles BCC et LIBBPF, et en écrivant l'espace utilisateur en plusieurs langues dans un module WASM et en les distribuant avec des données JSON simples ou des images OCI WASM. Le runtime est basé uniquement sur LiBBPF et fournit des programmes EBPF de style BCC sans dépendre de la bibliothèque LLVM.
oxydebpf
- OxideBPF - Une bibliothèque de rouille pure pour la gestion des programmes EBPF, conçue pour les cas d'utilisation de la sécurité. L'ensemble de fonctionnalités est plus limité que les autres bibliothèques, mais met l'accent sur la stabilité dans une large gamme de noyaux et les lieux les plus compilés compatibles en arrière-compatible.
bpftool et autres outils de l'arbre de noyau
bpftool - également d'autres outils de l'arbre du noyau, sous Linux / outils / net / pour les versions avant 4,15, ou linux / outils / bpf / après cela:
-
bpftool - Un utilitaire générique qui peut être utilisé pour interagir avec les programmes et cartes EBPF de l'espace utilisateur, par exemple pour afficher, vider, charger, démonter, épingler des programmes ou pour afficher, créer, épingler, mettre à jour, supprimer des cartes, ou pour attacher et détacher les programmes aux CGROUP. -
bpf_asm - Un assembleur CBPF minimal. -
bpf_dbg - Un petit débogueur pour les programmes CBPF. -
bpf_jit_disasm - Un désassembleur pour les deux saveurs BPF et pourrait être très utile pour le débogage JIT.
EBPF de l'espace utilisateur
- UBPF - Écrit en C. contient un interprète, un compilateur JIT pour l'architecture x86_64, un assembleur et un désassembleur.
- Une implémentation générique - avec prise en charge du noyau FreeBSD, de l'espace utilisateur FreeBSD, du noyau Linux, de l'espace utilisateur Linux et de l'espace utilisateur macOS. Utilisé pour le module d'extension BPF du commutateur Vale Switch.
- RBPF - Écrit en rouille. Interprète pour Linux, MacOS et Windows, et Jit-Compiler pour x86_64 sous Linux.
- Prévail - Un vérificateur d'espace utilisateur pour EBPF à l'aide d'une couche d'interprétation abstraite, avec prise en charge des boucles.
- Oster - Écrit dans Go. Un outil pour tracer l'exécution des programmes GO en attachant EBPF à UPROBES.
- WACHY - Un profileur de traçage qui vise à rendre le débogage basé sur l'EBPF plus facile à utiliser. Cela se fait en affichant des traces dans une interface utilisateur à côté du code source et en permettant une analyse de forage interactive.
EBPF sur d'autres plateformes
- EBPF pour Windows - Ce projet est un travail en cours qui permet à l'utilisation des chaînes d'outils EBPF et des API existantes familières dans l'écosystème Linux d'être utilisées sur Windows.
Test dans des environnements virtuels
- Une configuration Vagrant - pour tester facilement XDP. Moins utile maintenant que le XDP générique (indépendant du conducteur, principalement pour les tests) existe.
- BCC dans un conteneur Docker
Projets liés à l'EBPF
Réseautage
P4 a quelques interactions avec EBPF:
- P4 sur le bord - P4 avec EBPF pour créer des commutateurs programmables haute performance.
- Épisode OVS Orbit (# 11), appelé P4 sur le bord - lié à l'ancien élément. Entretien audio de John Fastabend par Ben Pfaff, l'un des principaux mainteneurs d'Open Vwitch.
- P4, EBPF et Linux TC Offload - P4 avec certains éléments liés au matériel EBPF Déchargement sur l'architecture NFP (Processeur de flux réseau) de NETRIMOME.
- Ancienne documentation pour l'utilisation de P4 avec EBPF - du référentiel BCC; déprécié par le backend P4_16 lié ci-dessous.
- P4_16 Backend pour EBPF
CILIUM Project (GitHub Repository) est une technologie reposant sur BPF et XDP pour fournir "l'application de la politique de mise en réseau in-kernel rapide et de sécurité pour les conteneurs basés sur les programmes EBPF générés à la volée". De nombreuses présentations disponibles (avec chevauchement):
- CILIUM: Réseautage et sécurité pour les conteneurs avec BPF et XDP - Comprenant également un cas d'utilisation de l'équilibreur de chargement
- Cilium: Réseautage et sécurité pour les conteneurs avec BPF et XDP - Vidéo
- CILIUM: Réseautage de conteneurs IPv6 rapide avec BPF et XDP
- CILIUM: BPF et XDP pour les conteneurs
- Épisode OVS Orbit (# 4) - Interview de Thomas Graf par Ben Pfaff.
- Une introduction générique au cilium
- Un podcast interviewant Thomas Graf - Ivan Pepelnjak interviewant Thomas, octobre 2016, sur EBPF, P4, XDP et Cilium.
Open VSwitch (OVS), et son projet Virtual Network (OVN, une solution de virtualisation de réseau open source) envisagent d'utiliser EBPF à différents niveaux:
- Déchargement du traitement du flux OVS à l'aide de l'EBPF
- Coupler la flexibilité de l'OVN avec l'efficacité de l'iovisor
KATRAN - Un balancer de charge de couche 4 basé sur XDP, open source par Facebook.
XDP dans la pratique: intégrer XDP dans notre pipeline d'atténuation DDOS - Protection contre DDOS avec XDP sur CloudFlare.
Droplet: contre-mesures DDOS alimentées par BPF + XDP - Protection contre DDOS avec XDP sur Facebook.
DPDK a un pilote en mode de vote (PMD) basé sur AF_XDP
CETH pour XDP - Frame de pilote Ethernet commun pour les E / S de réseau plus rapide, une technologie initiée par Mellanox.
Suricata, un système de détection d'intrusion open source, s'appuie sur les composants EBPF pour ses caractéristiques de "dérivation de capture":
- Section "EBPF et XDP" de la documentation Suricata
- Septun-Mark-II - Guide de réglage des performances extrêmes - Marc II.
- Un article de blog présentant la fonctionnalité
- Les aventures d'une suralication dans l'EBPF Land
- EBPF et XDP vues des yeux d'un suricat
Project Calico - Calico est une solution de réseautage et de sécurité réseau open source pour les conteneurs, les machines virtuelles et les charges de travail natives basées sur l'hôte. Le plan de données EBPF de Calico fournit un plan de données à haut débit à faible latence avec un modèle de politique de sécurité du réseau riche.
- Activation du plan de données EBPF avec Calico
Merbridge - Utilisez EBPF pour accélérer votre maillage de service. Merbridge remplace les règles iptables par EBPF pour intercepter le trafic. Il combine également msg_redirect pour réduire la latence avec un parcours de données raccourci entre les side-cars et les services.
PCAPPLUSPLUS - Une bibliothèque C ++ open source pour capturer, analyser et fabriquer des paquets réseau. Il dispose d'une interface C ++ pour créer des sockets AF_XDP, ce qui facilite l'envoi et la réception de paquets via eux.
Observabilité
- INKEV: Virtualisation du réseau distribué In-Nernel pour DCN
- Deep-MON - aide à mesurer la consommation d'énergie pour les serveurs et utilise des programmes EBPF pour l'agrégation de données en noyau.
- Pixie - Observabilité pour Kubernetes en utilisant EBPF. Les fonctionnalités incluent le traçage du protocole, le profilage des applications et la prise en charge des déploiements BPFTrace distribués.
- Skywalking Rover - Apache Skywalking est une plate-forme de surveillance des performances d'application open source (APM) spécialement conçue pour les systèmes distribués avec des microservices, des architectures basées sur le cloud-natif et basées sur les conteneurs (Kubernetes). Skywalking Rover est un profileur basé sur l'EBPF et un collecteur de métriques pour les applications C, C ++, Golang et Rust.
- Parca-Agent - Profiler continu toujours basé sur EBPF pour l'analyse de l'utilisation du CPU et de la mémoire, jusqu'au numéro de ligne et à travers le temps.
- RBPERF - Profiler d'échantillonnage et traceur pour Ruby.
- Hubble - Observabilité du réseau, du service et de la sécurité pour Kubernetes à l'aide d'EBPF.
- CARETTA - Carte de dépendance de service Kubernetes instantanée générée par EBPF, droit à une instance Grafana.
- DeepFlow - Observabilité instantanée pour les applications de cloud-native et AI basées sur EBPF.
Sécurité
- FALCO - Un projet de sécurité d'exécution natif du cloud utilisé comme moteur de détection de menaces de Kubernetes.
- Sysmon pour Linux - un outil de surveillance de la sécurité. Cela dépend de sysinternalsebpf.
- Red Canary Linux Agent - Red Canary a commencé à incorporer EBPF à leur capteur de sécurité Linux.
- Tracee - Un outil de sécurité et de criminalistique d'exécution pour Linux qui utilise la technologie EBPF pour tracer le système et les applications lors de l'exécution, et analyser les événements collectés pour détecter les modèles de comportement suspects.
- Redcanary-EBPF-Sensor - un ensemble de programmes BPF qui rassemblent les données d'événements pertinentes de sécurité du noyau Linux. Les programmes BPF sont combinés en un seul fichier ELF à partir duquel les sondes individuelles peuvent être chargées sélectivement, selon le système d'exploitation en cours d'exécution et la version du noyau.
- BPFLOCK - Verrouiller les machines Linux - un outil de sécurité entraîné par EBPF pour le verrouillage et l'audit des machines Linux.
- Tetragon - Kubernetes-Aware, Observabilité de sécurité basée sur l'EBPF et l'application d'exécution.
- Harpoon - Trace les systèmes des fonctions d'espace utilisateur, en utilisant EBPF.
Outils
- PLY - Un traceur dynamique open source petit mais flexible pour Linux, avec des fonctionnalités similaires aux outils BCC, mais avec un langage plus simple inspiré de AWK et DTRACE.
- BPFTRACE - Un outil de traçage avec son propre langage de traçage de haut niveau. Il est suffisamment flexible pour être envisagé comme un remplacement Linux pour DTrace et SystemTap.
- BPFTrace Cheat Sheet - Résumé et feuille de triche pour la programmation dans BPFTRACE. Contient des informations sur la syntaxe, les types de sondes, les variables et les fonctions.
- Kubectl Trace - Un plug-in Kubectl pour exécuter des programmes BPFTrace dans un cluster Kubernetes.
- Inspire-Gadget - Une collection d'outils basés sur EBPF pour déboguer et inspecter les ressources et les applications de Kubernetes.
- BPFD - Framework pour l'exécution de programmes BPF avec des règles sur Linux en tant que démon. Conteneur conscient.
- BPFD - Un démon BPF distinct, essayant de tirer parti de la flexibilité des outils BCC pour tracer et déboguer les cibles distantes, et en particulier les appareils fonctionnant avec Android.
- ADEB - Un environnement de shell Linux pour utiliser des outils de traçage sur Android avec BPFD.
- GREGGD - Système Daemon pour compiler et charger les programmes EBPF dans le noyau, et transférer le programme de sortie vers le socket pour l'agrégation métrique.
- FUSE - Considérer l'utilisation d'EBPF.
- UPF-BPF - Une solution in-nier basée sur XDP pour 5G UPF.
- RedBPF - Outillage et cadre pour écrire efficacement le code EBPF dans Rust.
- EBPF-Explorer - Une interface Web pour explorer les cartes et programmes du système.
- EBPFMon - une application TUI (interface utilisateur de terminal) pour le suivi en temps réel des programmes EBPF.
- BPFMAN - Un gestionnaire EBPF pour Linux et Kubernetes. Comprend un chargeur de programme intégré qui prend en charge la coopération du programme pour les programmes XDP et TC, ainsi que le déploiement des programmes EBPF à partir d'images OCI.
- PTCPDUmp - Un outil de type TCPDump basé sur un processus et EBPF.
EBPF en sécurité
- Embrassez le rouge: BPF offensif! - Une série de messages autour de l'introduction dans le BPF avec un accent sur un cadre offensant, et aussi comment son utilisation abusive peut être détectée. Les articles incluent des discussions sur les capacités RootKit de l'EBPF, ou sur quel type de traçage est nécessaire pour différents cas d'utilisation.
- EBPF: Bloquer l'exécution de la charge utile Linux "Maleware" avec BPF LSM - Article de blog sur la façon dont BPF peut aider à la détection et à bloquer les logiciels malveillants sans fil.
- Blackhat 2021: avec des amis comme EBPF, qui a besoin d'ennemis? - Parlez d'un EBPF Rootkit et de la façon dont les capacités de l'EBPF pourraient être maltraitées. Le Rootkit était également l'objet d'une conférence à DefCon, EBPF, je pensais que nous étions amis!
- EBPFKIT - un rootkit qui exploite plusieurs fonctionnalités EBPF pour implémenter des techniques de sécurité offensives.
- EBPFKIT-Monitor - Un utilitaire pour analyser statiquement les bytecode EBPF ou surveiller l'activité EBPF suspecte à l'exécution. Il a été spécialement conçu pour détecter EBPFKIT.
- Bad BPF - Une collection de programmes EBPF malveillants qui utilisent la capacité de l'EBPF à lire et à rédiger des données utilisateur entre le programme Userode et le noyau.
- TripLecross - Un Linux EBPF Rootkit avec une porte dérobée, C2, une injection de bibliothèque, un détournement d'exécution, une persistance et des capacités furtives.
Le code
Linux / include / linux / bpf.h - avec Linux / Inclure / UAPI / BPF.H: Définitions liées à EBPF, à utiliser respectivement dans le noyau et à s'interfacer avec les programmes d'espace utilisateur.
linux / include / linux / filter.h - avec Linux / include / uapi / filter.h: informations utilisées pour exécuter les programmes BPF eux-mêmes.
Linux / Kernel / BPF / - Ce répertoire contient la majeure partie du code lié au BPF. En particulier, ces fichiers sont intéressés:
-
syscall.c - Différentes opérations autorisées par l'appel système, telles que le chargement du programme ou la gestion des cartes. -
core.c - Interpréteur BPF. -
verifier.c - Vérificateur BPF.
Linux / net / core / filter.c - fonctions et aides EBPF liées à la mise en réseau (TC, XDP etc.); Contient également le code pour migrer des bytecode CBPF vers EBPF (tous les programmes CBPF sont traduits en EBPF dans les noyaux récents).
Linux / Kernel / Trace / BPF_TRACE.C - Fonctions et aides EBPF liées au traçage et à la surveillance (KProbes, tracepoints, etc.).
Les compilateurs JIT sont sous le répertoire de leurs architectures respectives, telles que le fichier Linux / Arch / x86 / Net / BPF_JIT_COMP.c pour x86. L'exception est faite pour les compilateurs JIT utilisés pour le déchargement matériel, assis dans leurs pilotes, tels que Linux / Drivers / Net / Ethernet / Nettronome / NFP / BPF / JIT.C pour NETRIMOME NFP.
Linux / net / sched / - et en particulier dans les fichiers act_bpf.c (action) et cls_bpf.c (filtre): code lié aux actions et filtres BPF avec TC.
Linux / Kernel / SecComp.c
Linux / net / core / dev.c - contient la fonction dev_change_xdp_fd() qui est appelée via une commande netLink pour accrocher un programme XDP à un appareil, après avoir été chargé dans le noyau de l'espace utilisateur. Cette fonction utilise à son tour un rappel du pilote concerné.
Développement et communauté
- L'arbre BPF-Next - Pachs BPF atterrit dans cet arbre. Il est régulièrement fusionné en net-next, qui est lui-même fusionné pour chaque version de l'arbre de Linus.
- Documentation du noyau - sur les contributions au BPF.
- Liste de diffusion NetDev - Liste de diffusion pour le développement de la pile de réseautage du noyau Linux. Tous les correctifs y sont envoyés pour examen et inclusion.
- XDP-Newbies - Une liste de diffusion spécialement dédiée à la programmation XDP (à la fois pour l'architecture ou pour demander de l'aide).
- Liste de diffusion IO Visor - BPF est au cœur du projet et est régulièrement discutée sur la liste de diffusion.
- Compte Twitter @iovisor
- Le projet de collaboration XDP - un référentiel GitHub avec des notes et des idées concernant les évolutions futures de XDP.
Autres listes de ressources sur EBPF
- Documentation BCC de l'IO Visor
- Référentiel BPF-Docs de IO Visor
- Plongez dans BPF: une liste de matériel de lecture
Reconnaissance
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.
Contributif
Contributions welcome! Read the contribution guidelines first.
Licence
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.