4章bpf()システムコール

「1章 eBPFとは何か? なぜ、重要なのか?」で見た通り、ユーザ空間のアプリケーションがカーネルに処理を依頼するときはシステムコールを呼びます。つまりユーザ空間のアプリケーションがカーネルにeBPFプログラムをロードさせた場合にも、何らかのシステムコールを呼ぶのではないかと推測できます。実際bpf()という名前のシステムコールが存在します。この章では、このシステムコールがどのようにeBPFプログラムやMapをロードしたり、相互にデータをやり取りするのかを説明します。

カーネルで動くeBPFコードがMapにアクセスするときは、システムコールを使いません。システムコールを利用するのはユーザ空間のアプリケーションだけです。eBPFプログラムの中でMapの読み書きには、これまで述べたようにヘルパ関数を使います。

eBPFプログラムを作りたいときに、ユーザ空間のアプリケーションからbpf()システムコールを直接呼び出す必要はありません。後述の通りeBPFを高レベルで抽象化したライブラリを使えばeBPFを簡単に使えます。ライブラリ関数はbpf()システムコールから呼び出すさまざまなコマンドとおおよそ1対1で対応しています。どのようなコマンドがあるかは本章で説明します。どんなライブラリを使っていても、その裏で動いている仕組みの概要を知っておく必要があります。例えばbpf()システムコールを介したプログラムのロード、Mapの作成やアクセスの仕組みなどが該当します。

bpf()システムコールのサンプルプログラムを紹介する前に、bpf()のマニュアルページに何が書かれているのか(https://oreil.ly/NJdIM)をざっと見ておきましょう。ここには、「bpf() ...

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.