10章プログラミングeBPF

本書のここまでで、eBPFに関するたくさんのことを学び、さまざまなアプリケーションにおいてどう使われているかについて多くの例を見てきました。本章は、みなさんがこのようなeBPFプログラムを書きたい場合にどうすればいいのかについて述べます。

すでに述べたように、eBPFプログラミングは2つの部分から成り立っています。

  • カーネルで動作するeBPFプログラムを書く部分
  • eBPFプログラムを管理し、相互にやり取りをするユーザ空間のコードを書く部分

本章で筆者が取り上げるライブラリや言語を使う場合、ほとんどのものについては両方の部分のコードを書く必要があります。何がどこの部分に対応しているかを意識する必要があります。ただし、最もシンプルなeBPFプログラミング言語であるbpftraceを使えば2つの部分を意識せずに済みます。

10.1 bpftrace

bpftraceプロジェクトのREADMEページ冒頭の説明には「bpftraceはLinux eBPFのための高レベルなトレース用言語であり、… AWKとC、また既存のトレーサーであるDTraceやSystemTapなどに影響を受けている」と書かれています。

bpftracehttps://oreil.ly/BZNZO)は、高レベル言語で書かれたプログラムをeBPFのカーネルコードに翻訳し、結果を出力するフォーマット機能も提供するコマンドラインツールです。使用時にカーネル空間とユーザ空間の分離を意識する必要はありません。

プロジェクトのドキュメントには、便利なワンライナーのサンプルをふんだんに使ったチュートリアル(https://oreil.ly/Ah2QB)があります。簡単な「Hello World」スクリプトを書くところから始まり、カーネルデータ構造からデータをトレースできるような高度なスクリプトを書けるところまでユーザのレベルを引き上げてくれます。 ...

Get 入門 eBPF ―Linuxカーネルの可視化と機能拡張 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.