萌えハッカーニュースリーダー

2025/08/31 16:17 eBPF 101: Your First Step into Kernel Programming

出典: https://journal.hexmos.com/ebpf-introduction/
hakase
博士

やっほー、ロボ子!今日はeBPFについて話すのじゃ!

roboko
ロボ子

eBPFですか、博士。Linuxカーネルの技術ですよね。よろしくお願いします。

hakase
博士

そうそう!eBPFはカーネル内でサンドボックス化されたプログラムを実行できるすごい技術なのじゃ。カーネルソースコードを変更せずにカーネルの機能を拡張できるのがミソだぞ。

roboko
ロボ子

なるほど。JITコンパイラと検証エンジンで効率も保証されているんですね。

hakase
博士

その通り!ネットワーク、可観測性、セキュリティ分野で大活躍なのじゃ。例えば、特定のIPアドレスからのトラフィックをブロックするファイアウォールとか作れるぞ。

roboko
ロボ子

すごいですね!eBPFプログラムの開発には、どんなファイルが必要なんですか?

hakase
博士

ふむ。eBPFと対話するためのPythonユーザースペーススクリプトと、eBPF関数とモジュールを使うCコードが必要になるのじゃ。

roboko
ロボ子

初期設定はUbuntuだと `sudo apt-get update && sudo apt-get install -y bpfcc-tools libbpfcc-dev` ですね。

hakase
博士

さすがロボ子、よく覚えておるのじゃ!Pythonライブラリの`bcc`も必須だぞ。

roboko
ロボ子

`load_bpf_program`関数でCコードを読み込んで、eBPFバイトコードにコンパイルしてカーネルにロードするんですね。

hakase
博士

そう!そしてXDP (eXpress Data Path)を使って、コンパイルされたコードをネットワークインターフェースにフックするのじゃ。ネットワークスタックの最も早い段階でパケットを処理できるのが強みだぞ。

roboko
ロボ子

`detach_xdp_program`で、スクリプト終了時にeBPFプログラムをインターフェースから安全に削除することも重要ですね。

hakase
博士

その通り!グレースフルシャットダウンは基本中の基本じゃ。

roboko
ロボ子

`packet_count_map`はパケットをカウントするための共有データ構造で、`perf_buffer`はドロップされたパケットに関するリアルタイムデバッグイベントを受信するために使うんですね。

hakase
博士

`BPF_ARRAY`はグローバルパケットカウンターを格納するために使う単一要素の配列で、`BPF_PERF_OUTPUT`はドロップされたパケットに関する通知をユーザースペーススクリプトに送信するために使うperfバッファなのじゃ。

roboko
ロボ子

メインXDPプログラムの`xdp_packet_counter`関数は、アタッチされたネットワークインターフェースに到着するすべてのパケットに対して実行されるんですね。

hakase
博士

`drop_packet_to_destination`関数は、ファイアウォールのコアロジックを含むのじゃ。パケットをドロップするか、通過させるかを決めるぞ。

roboko
ロボ子

Netflix、Dropbox、Yahooなどの大手企業がeBPFを使っているんですね。すごい!

hakase
博士

そう!ネットワークの可観測性、インフラのデバッグ、Kubernetesのセキュリティなど、様々な用途に使われているのじゃ。

roboko
ロボ子

実際に動かすには `$ sudo python3 runner.py` ですね。

hakase
博士

よし、今日はここまで!最後に一つなぞなぞじゃ!eBPFは何の略でしょう?

roboko
ロボ子

えーと… Extended Berkeley Packet Filter です!

hakase
博士

ピンポーン!正解!…って、ロボ子なら当然か。ふふ、お主もeBPF博士じゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search