EBPFに関連する素晴らしいプロジェクトのキュレーションリスト。
BPFは、 Berkeley Packet Filterと同様に、ユーザースペースから渡された機器の仮想マシンを実行しているプログラムです。最初にBSDに実装され、次にLinux、(現在のレガシー)「クラシックBPF」またはCBPFマシンは、ユーザースペースへの役に立たないコピーを避けるために、カーネルのパケットをフィルタリングするためにTCPDUMPなどのツールで使用されます。最近では、LinuxのBPFインフラストラクチャは完全に作り直され、「拡張されたBPF」、またはEBPFに命を吹き込みました。これにより、新しい機能(安全および終了チェック、プログラムのJITコンパイル、標準的なライブラリ、ハードウェアオフロードサポートなど)が得られ、現在は多くのテスクに使用されています。非常に低いレベル(XDP)でパケットを処理し、システム上のイベントを追跡および監視する、またはCGROUPのアクセス制御を実施することは、EBPFがパフォーマンス、プログラム性、柔軟性をもたらすいくつかの例にすぎません。
最近、CiliumはEBPF.IOと呼ばれるEBPFに関する素晴らしいウェブサイトを立ち上げました。 EBPFの紹介と関連プロジェクトへのリンクにより、このリストと同様の目的を果たします。
注:EBPFはエキサイティングなテクノロジーであり、そのエコシステムは常に進化しています。この素晴らしいリストを最新の状態に保ち、とにかくその信号対雑音の比率を改善するために、あなたからのHelpを望んでいます。フィードバックをお気軽にお任せください。
bpf(2) - bpf()システムコールに関するマニュアルページ、ユーザースペースからのBPFプログラムとマップの管理に使用されます。tc-bpf(8) - コードのサンプルコマンドとサンプルを含むTCでBPFを使用するマニュアルページ。bpf-helpers(7) MANページ - BPF標準ライブラリを形成する型ヘルパー関数の説明。IO VISORの非公式EBPF仕様 - EBPF構文と操作コードの概要。
Jesper Dangaard Brouerのドキュメント - 進行中の作業、貢献を歓迎します。
David MillerからXDP-Newbiesメーリングリストへのメール:
カーネルバージョンごとのBPF機能のリスト
EBPFを初めて使用する場合は、このセクションで「紹介」として説明されているリンクを試してみてください。
XDPおよびEBPFの簡単な紹介 - EBPFの機能に関するコンテキスト、履歴、および詳細を提供するアクセス可能な紹介。
EBPFの概要 - Adrian Ratiuによるブログシリーズ、EBPFインフラストラクチャの多くの側面をカバーしています。
Ferris EllisのEBPFに関するブログの投稿 - 彼らはEBPFに関するいくつかの投稿を持っています:
BPFリファレンスガイド-BCCリポジトリのBPF CおよびBCC Pythonヘルパーに関する。
BPFとXDPを使用してカーネルのネットワークデータパスをプログラム可能にする - EBPFとXDPに関するすべての基本をカバーする一連のスライド(主にネットワーク処理用)。
BSDパケットフィルター - トレースの側面をカバーする紹介。
BPF:トレースなど - トレースの側面をカバーする紹介。
Linux BPF Superpowers-はじめに、主にトレースの側面をカバーする紹介、Flameグラフの最初の部分。
IO VISOR -IO Visorプロジェクトも導入しています。
BPF -In -Kernel Virtual Machine -EBPFの著者によるプレゼンテーション。
拡張BPF -EBPFプログラムをソケットに接続してステートフルソケットフィルタリングの例を使用して、BPFの開発に関する2014年のブログ投稿と、それで何ができるかを示します。
グレッグ・マースデンはEBPFについていくつかのドキュメントを作成しました:
EBPFを介したLinuxカーネルの観測可能性 - EBPFの基本とコードサンプルをカバーするブログ投稿と、最小限のEBPFプログラムをカーネルに構築およびロードする方法。
EBPF-プログラマーの観点から - EBPFの基本とEBPFプログラムの作成方法を説明する短い論文。
EBPFに関するCloudFlareのブログ投稿 - ネットワーキングのユースケースとEBPFの低レベルの側面に関するさまざまなブログ投稿。
Linux拡張BPF(EBPF)トレースツール - EBPFを使用したパフォーマンス分析ツールの例に関する情報の詳細なコレクション。他のリソースに関するページの最後にセクションも含まれています。
EBPFの初心者のガイド - 一連のライブコーディングトークと付随するコードの例。さまざまなライブラリとプログラムタイプを使用してEBPFプログラミングを導入します。
Daniel Borkmannは、特にTCでの使用について、EBPFの内部をカバーするいくつかのプレゼンテーションと論文を作成しました。
IOバイザーブログ
Linuxネットワーキングの説明 - Linuxネットワーキングの内部、EBPFに関する一部。
Expressデータパス - XDPへの非常にアクセス可能な紹介であり、パケットの処理方法を示すサンプルコードを提供します。
技術論文のすべてのXDPの詳細:エクスプレスデータパス:オペレーティングシステムカーネルでの高速プログラム可能なパケット処理、TokeHøiland-Jørgensen、Jesper Dangaard Brouer、Daniel Borkmann、John Fastabend、Tom Herbert、David Ahern、David Miller、すべてがEBPFとXDPに貢献しています。
XDPの進行中のドキュメント
BPFおよびXDPリファレンスガイド - Ciliumプロジェクトのガイド。
XDPプロジェクトの概要
Express Data Path(XDP)-XDPに関する最初のプレゼンテーション。
BOF-BPFはあなたのために何ができますか?
Express Data Path -MLX4ドライバーで得られたベンチマーク結果が含まれています。
Jesper Dangaard Brouerには、XDPの内部を説明するスライドのセットがいくつかあります。
XDPワークショップ - 紹介、経験、将来の開発(ビデオ)
Linuxの高速パケットフィルタリング - Linux、DDOS保護、カーネル、カーネルバイパス、XDP、EBPFのパケット処理に関するパケットフィルタリングについて。
1秒あたり1,000万個のパケットをドロップする方法 - CloudFlareのブログ投稿は、パケットフィルタリングにXDPを使用する動きについて話しています。
xt_bpfモジュールを使用します。tc 、およびXDPプログラムの管理に使用されるipが含まれています。 BPFに関連するコードのほとんどは、lib/bpf.cです。LLVM -EBPFワークフローで使用されるいくつかのツールが含まれています。 Ubuntu/Debianの最新バージョンのスナップショットは、ここから取得できます。
cargo generateで使用できるAYAでBPFアプリケーションを作成するためのテンプレート。bpftool-また、カーネルツリーの他のツール、Linux/Tools/net/4.15以前のバージョンの場合、またはその後のLinux/Tools/BPF/
bpftoolユーザースペースからEBPFプログラムやマップと対話するために使用できる一般的なユーティリティ。たとえば、展示、ダンプ、ロード、分解、PINプログラム、または表示、作成、ピン、更新、削除、またはプログラムをCgroupに添付してデタッチするために。bpf_asm最小限のCBPFアセンブラー。bpf_dbg -CBPFプログラム用の小さなデバッガー。bpf_jit_disasm -両方のBPFフレーバーの分解者であり、JITデバッグに非常に役立つ可能性があります。P4にはEBPFとの相互作用があります。
Cilium Project(GitHub Repository)は、BPFとXDPに依存する技術であり、「その場で生成されたEBPFプログラムに基づいて、コンテナの迅速な船内ネットワーキングとセキュリティポリシー施行」を提供します。利用可能な多くのプレゼンテーション(オーバーラップ付き):
Open VSwitch(OVS)とその関連プロジェクトOpen Virtual Network(OVN、Open Source Network Virtualization Solution)は、さまざまなレベルでEBPFを使用することを検討しています。
Katran- XDPに基づくレイヤー4ロードバランサー、Facebookによってオープンソース。
XDP実際:DDOS緩和パイプラインにXDPの統合 - CloudFlareでのXDPを使用したDDOに対する保護。
液滴:BPF + XDPを搭載したDDOS対策 - FacebookでXDPを使用してDDOに対する保護。
DPDKには、AF_XDPに基づいた投票モードドライバー(PMD)があります
XDPのCETH-メラノックスによって開始された技術であるより高速なネットワークI/Oのための一般的なイーサネットドライバーフレームワーク。
オープンソース侵入検知システムであるSuricataは、「キャプチャバイパス」機能についてEBPFコンポーネントに依存しています。
Project Calico -Calicoは、コンテナ、仮想マシン、ネイティブホストベースのワークロード向けのオープンソースネットワーキングおよびネットワークセキュリティソリューションです。 CalicoのEBPFデータプレーンは、豊富なネットワークセキュリティポリシーモデルを備えた低レイテンシの高スループットデータプレーンを提供します。
MERBRIDGE-EBPFを使用して、サービスメッシュをスピードアップします。 Merbridgeは、iPtablesルールをEBPFに置き換えて、トラフィックを傍受します。また、MSG_Redirectを組み合わせて、サイドカーとサービスの間の短縮データパスでレイテンシを減らします。
PCAPPLUSPLUS-ネットワークパケットをキャプチャ、解析、クラフトするためのオープンソースC ++ライブラリ。 AF_XDPソケットを作成するためのC ++インターフェイスを備えているため、パケットを簡単に送信して受信できます。
Linux/include/linux/bpf.h- linux/include/uapi/bpf.h:ebpfに関連する定義は、それぞれカーネルで使用され、ユーザースペースプログラムとインターフェイスします。
Linux/include/linux/filter.h- linux/include/uapi/filter.hを使用:BPFプログラム自体を実行するために使用される情報。
Linux/kernel/bpf/ - このディレクトリには、ほとんどのBPF関連コードが含まれています。特に、これらのファイルは興味深いものです。
syscall.cプログラムの読み込みやマップ管理など、システムコールで許可されているさまざまな操作。core.c -BPF通訳。verifier.c -BPF検証。Linux/net/core/filter.c-関数およびネットワークに関連するEBPFヘルパー(TC、XDPなど);また、CBPFバイトコードをEBPFに移行するコードも含まれています(すべてのCBPFプログラムは、最近のカーネルのEBPFに翻訳されています)。
Linux/kernel/trace/bpf_trace.c-トレースと監視に関連する関数とEBPFヘルパー(KProbes、TracePointsなど)。
JITコンパイラは、x86のファイルLinux/arch/x86/net/bpf_jit_comp.cなど、それぞれのアーキテクチャのディレクトリの下にあります。 Netronome NFP用のLinux/Drivers/Net/Ethernet/Netronome/NFP/JIT.Cなど、ハードウェアオフロードに使用されるJITコンパイラの例外は行われます。
Linux/net/sched/ - 、特にファイルact_bpf.c (action)およびcls_bpf.c (フィルター):TCのBPFアクションとフィルターに関連するコード。
Linux/Kernel/Seccomp.C
Linux/net/core/dev.c -netlinkコマンドを介して呼び出される関数dev_change_xdp_fd()が含まれています。xdpプログラムをデバイスにフックします。この関数は、関連するドライバーからのコールバックを順番に使用します。
Thank you to Quentin Monnet and Daniel Borkmann for their original work on Dive into BPF: A List of Reading Material which became the basis for this list.
Contributions welcome! Read the contribution guidelines first.
To the extent possible under law, zoidbergwill has waived all copyright and related or neighboring rights to this work.