2024-09-25

PREEMPT_RT からの CONFIG_NO_HZ_FULL_ALL

いつものように迷宮をさまよっております。

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> を指定すると有効になるのでしょうか?なかなか難解ですが、そのうち試してみたいと思います。