いつものように迷宮をさまよっております。
Linux 6.12 にはリアルタイムカーネルをサポートする「PREEMPT_RT」がマージされるとのことです。
Real-Time "PREEMPT_RT" Support Merged For Linux 6.12
そう言えば、うちの自前ビルドカーネルでは PREEMPT を on にしてた気がするな、というのが始まりです。Linux 6.12 からやって来る「PREEMTP_RT」って今までと何が違うんだろ?
というところから NO_HZ なるカーネルオプションが存在することを知りました。
NO_HZ: Reducing Scheduling-Clock Ticks
ほぉ、うちの設定はどうなってるんだろ?と調べてみた結果はこちらです。
$ grep -i hz /boot/config-6.10.6-zen3 CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set # CONFIG_NO_HZ_IDLE is not set CONFIG_NO_HZ_FULL=y # CONFIG_NO_HZ is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set CONFIG_HZ_1000=y CONFIG_HZ=1000 CONFIG_MACHZ_WDT=m
CONFIG_NO_HZ は未設定であったものの、CONFIG_NO_HZ_FULL が有効となっていました。
この場合、CONFIG_HZ=1000 は意味があるのでしょうか?
こんな記述もあります。
Note that this means that your system must have at least two CPUs in order for CONFIG_NO_HZ_FULL=y to do anything for you.
全ての CPU を NO_HZ 化してはいけないようで、最低でも 2 つの CPU は残しておかないといけないようです。最低でも 2 つの CPU がないと適用してはいけないようです。
さらに AMD のサイトには以下のような情報もありました。
Tickless Kernels and the NoHz Option
Alternatively, you can use the CONFIG_NO_HZ_FULL_ALL=y kernel configuration parameter to enable this mode for all CPUs except the boot CPU.
CONFIG_NO_HZ_FULL_ALL というカーネルオプションも存在しているようです。こちらは自動的に必要な CPU を残してくれる機能が付加されているようです。
が、make nconfig で探してみても見つかりませんでした。config ファイルに自分で書き足すのでしょうか。
Linux カーネルの起動オプションに nohz_full=<cpu_list> を指定すると有効になるのでしょうか?なかなか難解ですが、そのうち試してみたいと思います。