That's Done!

thatsdone's (mostly technical) memorandum

[ja] Linux Kernel Build TIPs


ある意味、先月のこの記事の続き。

6.12がリリースされたので、PREEMPT_RTとsched_extを試そうとしていて、必要なCONFIGを有効にするのに 少し見落としがあったのでメモ。

前提

  • ビルド環境: Ubuntu 24.04.1(amd64)
  • ツール類: 基本的にUbuntu bund版

PREEMPT_RTの有効化

長らく開発が続いてきて、とうとう6.12でmergeされて話題になっていたReal-Time機能のPREEMPT_RTを使ってみたいと思ったのが発端。

ビルドにあたって、make menuconfigでは、冒頭の"General Setup"の中で、私の条件では上から18番目、"BPF Subsystem"の次に出てくる "Preemption Model"が該当する。

"Fully Preemptive Kernel (Real-Time)" を選択すればよい。

選べる詳細条件の確認は kernel/Kconfig.preempt を参照。

PREEMPT_RTで遊ぶには

realtime taskを動かせばよいのだが、 例えばrt-testsに含まれるcyclictestとかがよくつかわれるようだ。

sched_ext(CONFIG_SCHED_CLASS_EXT)の有効化

sched_extを使うと、eBPFでオレスケジューラを書いたりすることができる。

ビルドにあたって、make menuconfigでは、PREEMPT_RTと同じく "General Setup"の中で、"Preemption Model"の2つ下に出てくる"Extensible Scheduling Class"が該当する。

ハマりポイントとして、上記の項目がでてこないことがあるのだが、私の場合はpaholeがインストールされていなかったのが原因だった。sudo apt install pahole した後でmake menuconfigすると選べるようになる。

同じく選べるための詳細条件の確認は kernel/Kconfig.preempt を参照。

sched_extで遊ぶには

Linux kernelの tools/sched_ext にサンプルが一式ついている。README.mdに書いてある通りの使い方で素直に動く。

ビルドして起動したkernelで、無事にsched_extが有効になっているかどうかは sysfs 経由で確認できる。 /sys/kernel/sched_ext が存在し、stateの中身で enabled/disabledがわかる。 以下は初期状態(=disabled)で、これから設定して使う。

$ ls -al /sys/kernel/sched_ext
total 0
drwxr-xr-x  2 root root    0 Mar  2 08:43 .
drwxr-xr-x 18 root root    0 Mar  2 08:10 ..
-r--r--r--  1 root root 4096 Mar  2 08:25 enable_seq
-r--r--r--  1 root root 4096 Mar  2 08:25 hotplug_seq
-r--r--r--  1 root root 4096 Mar  2 08:25 nr_rejected
-r--r--r--  1 root root 4096 Mar  2 08:25 state
-r--r--r--  1 root root 4096 Mar  2 08:25 switch_all
$ cat   /sys/kernel/sched_ext/state
disabled
$

以下、参考リンク

そのほか

もっとあったような気がするので別途追記/更新予定。