Linuxカーネルの最新バージョン6.13で、「Lazy Preemption(レイジープリエンプション)」という新たなプリエンプションモデルの導入が予定されている。開発者Peter Zijlstraによって提案されたこのモデルは、現在「sched/core」ブランチにパッチとして追加され、今月後半に予定されるマージウィンドウに向けて準備が進められている。
このLazy Preemptionは、従来のVoluntary Preemptionとリアルタイムプリエンプションのパフォーマンスギャップを埋めることを目的としており、スケジューラーによる公平クラスのプリエンプションを遅らせつつ、リアルタイムのクラスに対しては即座の対応が可能な仕組みである。
具体的には、通常のプリエンプションに比べてSCHED_NORMALタスクに対する干渉を抑え、ロック保持者のプリエンプション回数を減少させることで、全体的なパフォーマンスの向上を図る。また、PREEMPT_LAZYというKconfigオプションとして導入され、x86/x86_64およびRISC-Vアーキテクチャでの有効化が見込まれる。
Linux 6.12でリアルタイムプリエンプション「PREEMPT_RT」が実装されてからわずか1バージョン後の今回の追加は、Linuxカーネルにおける効率性の追求が続いていることを示している。
Linux 6.13に導入される「Lazy Preemption」の仕組みとその狙い
Linux 6.13の新機能として導入予定の「Lazy Preemption」は、従来のVoluntary Preemptionとリアルタイムプリエンプションの間のギャップを埋めることを狙った革新的なモデルである。提案者であるPeter Zijlstraの説明によれば、Lazy Preemptionでは公平スケジューリングがresched_curr_lazy()に変更され、TIF_NEED_RESCHED_LAZYフラグが設定される。
このフラグは、特定のタイミングで完全なNEED_RESCHEDビットへ昇格し、リスケジュールの発生を制御する。Lazy Preemptionは、通常のプリエンプションと比較してSCHED_NORMALタスクの実行を妨げない一方、リアルタイムタスクには即座に反応する。
この設計により、特にx86/x86_64やRISC-Vアーキテクチャでの負荷が軽減され、全体的なパフォーマンス向上が期待される。このLazy Preemptionの導入により、Voluntary Preemptionを完全に置き換える構想が浮かび上がっているが、それにはさらなる評価と検証が求められる。
「PREEMPT_LAZY」オプションがもたらすパフォーマンス向上の可能性
新たなプリエンプションモードとして「PREEMPT_LAZY」がKconfigオプションに加わる。PREEMPT_LAZYは、スケジューラーによる自動的なプリエンプションを提供するが、SCHED_NORMALタスクに対しては積極的に介入しない。
このため、ロック保持者のプリエンプション回数が減少し、Voluntary Preemptionが持つパフォーマンス上の利点の一部が回復される仕組みである。特に、PREEMPT_LAZYはリアルタイムクラスには影響を与えないため、クリティカルなタスクを安定して処理する一方で、その他のタスクに対しては遅延を許容する。
このようなアプローチは、特に負荷が高いシステムでの効率的なリソース管理を実現し、スケジューリングの柔軟性を高める意図がある。今回の追加により、開発者やシステム管理者はパフォーマンスチューニングの選択肢を増やすことが可能となり、Linuxの多様な利用環境に適応したカスタマイズが進むだろう。
Linuxカーネルの進化を続けるプリエンプション機能の意義
Linux 6.12でリアルタイムプリエンプション「PREEMPT_RT」が正式採用された後、今回のLazy Preemptionがさらにその進化を支える。この短期間での相次ぐ機能追加は、Linuxカーネルが多様化する用途に応じて効率性を追求し続けていることを物語る。
Phoronixが報じたように、ZijlstraのパッチはLinuxコミュニティ内でも注目を集め、x86およびRISC-Vを中心に多様なアーキテクチャでの適用が試みられている。この進化は、パフォーマンスとリアルタイム処理の両立を求めるエンタープライズ環境や、組み込みシステムにおける重要性が増していることを反映していると考えられる。
Linuxカーネルのプリエンプション機能がさらに洗練されることで、システムの安定性と応答性が向上し、産業用途や高負荷サーバー運用においても活用が進むだろう。