Linux Kernelのpreemption modelを動的に変更する

Linux Kernel 5.12ではpreemption modelの動的変更が実装されています。
この機能を試してみます。

■ 前準備

以下のconfigを有効にします。

  • PREEMPT_DYNAMIC
  • HAVEPREEMPTDYNAMIC

ここでは省略しますが、どちらも他の設定に依存した設定値になっているので、間接的に設定が必要です。
Ubuntu 20.04(x86_64)の場合は、PREEMPTを有効にすることで上記が有効になりました。

■ 動的にpreemption modelを変更する

方法としては2つあります。

  • Kernel引数のpreemptにnone/voluntary/fullのいずれかを指定する
  • /sys/kernel/debug/sched_preemptから変更する

今回は後者の方法を試してみます。
まずcatで現在の設定の確認。

1# cat /sys/kernel/debug/sched_preempt
2(none) voluntary full

これをCONFIG_PREEMPTと同じpreemption modelに変更します。

1# echo "full" > /sys/kernel/debug/sched_preempt
2# cat /sys/kernel/debug/sched_preempt
3none voluntary (full)

とりあえず変わることはわかりました。

■ 何かがおかしい?

本来はここで動作検証をするところなのですが、
試してみても挙動がまったく変わらず、何かがおかしい?

一つ気になるのがDEFINESTATICCALLでpreemptscheduleは登録しているものの、
static
callで呼び出しているところが見つからない。

https://elixir.bootlin.com/linux/v5.12/source/kernel/sched/core.c#L5264

PREEMPTDYNAMICがstaticcallの機能の上で成り立っているため、
static_callで呼び出さないとダメだと思うんだけどな。もう少し調べてみよう。

Posted at : 2021-05-07 16:35:39 / Category : none

コメント

まだコメントはありません

コメントを投稿


お名前


メールアドレス(返信を通知する場合のみ記入)


認証コード(210928 と記入してください)