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() ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access