Linux Kernel 5.12ではpreemption modelの動的変更が実装されています。
この機能を試してみます。
■ 前準備
以下のconfigを有効にします。
ここでは省略しますが、どちらも他の設定に依存した設定値になっているので、間接的に設定が必要です。
Ubuntu 20.04(x86_64)の場合は、PREEMPTを有効にすることで上記が有効になりました。
■ 動的にpreemption modelを変更する
方法としては2つあります。
今回は後者の方法を試してみます。
まずcatで現在の設定の確認。
これをCONFIG_PREEMPTと同じpreemption modelに変更します。
とりあえず変わることはわかりました。
■ 何かがおかしい?
本来はここで動作検証をするところなのですが、
試してみても挙動がまったく変わらず、何かがおかしい?
一つ気になるのがDEFINESTATICCALLでpreemptscheduleは登録しているものの、
staticcallで呼び出しているところが見つからない。
https://elixir.bootlin.com/linux/v5.12/source/kernel/sched/core.c#L5264
PREEMPTDYNAMICがstaticcallの機能の上で成り立っているため、
static_callで呼び出さないとダメだと思うんだけどな。もう少し調べてみよう。