This repository provides an extension for DAG-based scheduling using eBPF.
struct_opsを利用したカスタムeBPFイベントの実装や、DAGタスク用のkfuncの実装がまとめられているカーネルモジュール。 ビルドは以下でできる。
$ make
また、ビルドしたカーネルモジュールをカーネルにロードするには以下のようにすればいい。
$ make insmod
カーネルモジュールをロードしたら、eBPFプログラムをビルドしてカーネルのイベントにアタッチする(詳しくはbpfディレクトリの説明を参照)。
カーネルモジュールがロードされると、/sys/kernel/my_ops/ctlというファイルが作成される。 eBPFプログラムはこのファイルの呼び出しパスにhookされるため、以下のようにファイルアクセスを行うと、 eBPFプログラムの呼び出しを確認することができる。
$ cat /sys/kernel/my_ops/ctl
kfuncのログはdmesgに出力している。
カーネルモジュールをアンロードするときは以下のようにする。
$ make rmmod
eBPFプログラムの実装が置かれている。ビルドするには、このディレクトリに移動してmakeを打てばいい。
$ cd bpf
$ make
※ 注意点として、makeを実行するときは、上述したカーネルモジュールをカーネルにロードしておく必要がある。
eBPFプログラムをカーネルにロードするには、以下を実行すればいい。
$ sudo target/debug/bpf
Rustで書かれたライブラリの実装がまとめてある。ユーザーアプリケーションが使うユーティリティ関数や、 eBPFプログラムとの通信に使える便利なクラスなどがある。
ユーザー空間で動作するテスト用途のアプリケーションが置かれているディレクトリ。 以下のようなテストプログラムが置かれている。
- test-api:ユーザー->eBPFの通信に使われるAPIのテスト