eBPFコードのパフォーマンスを計測するには?効率的なプロファイリング手法を徹底解説
How Do I Profile eBPF Code?
How Do I Profile eBPF Code?
eBPFプログラムの開発において、パフォーマンスのボトルネックを特定するためのプロファイリング手法について悩んでいませんか?カーネル空間で動作するコードの負荷を可視化するための最適なツールや、デバッグのベストプラクティスを解説します。eBPFのパフォーマンスチューニングを極めたい方は、ぜひ参考にしてください。
補足となるリソースや論文をいくつか紹介するよ。
Performance of eBPF LSM Hooks: https://dl.acm.org/doi/10.1145/3672197.3673431 (カーネルにおけるLSM/トレーシングフックがもたらすオーバーヘッドを分析している)
Performance of eBPF Maps: https://dl.acm.org/doi/10.1145/3672197.3673430 (perfレポートで見られるhtab_map_hashのボトルネックを理解するのに役立つコンテキスト)
Network eBPF performance: https://blog.apnic.net/2026/03/25/demystifying-performance-of-ebpf-network-applications/ (eBPFのオーバーヘッドに関する、より広い視野での素晴らしい解説)
CPUサイクル数に加えて、TLBミス率も計測することをおすすめするよ。eBPFは魔法じゃないから、大きなサイズのマップを使うと仮想アドレス変換キャッシュが汚染される可能性がある。前に職場でeBPFのプロファイリングを頼まれたとき、サイクル時間の90%以上がページテーブルウォークに起因していて、アプリケーション全体にも深刻な悪影響を与えていたよ。
LobとMob。
先月、「brr」(eBPF Runtime Reporter and Profiler)っていうツールを作ったよ。bpftopのようなeBPFプログラムのサマリーを表示できるんだけど、特定のプログラムにズームインしてソースコードの行(利用可能な場合)を確認したり、eBPFプログラムの活動や、そのプログラムによって呼び出されたカーネルコードの活動までプロファイリングできる。どこで時間がかかっているのか全体像を把握するのに役立つはず。
基本的にはCodexを使って自分のために書いたものだけど、もし興味がある人がいたらと思ってGitHubに最新リリースをプッシュしておいたよ(スクリーンショットも載せてる)。