一般用語
上級

Linux CPU Scheduler CFS/EEVDF/RT 1991-2026(リナックスCPUスケジューラー)

Linux CPU Scheduler 1991-2026 (差別化: 既存systemd init system軸ではなくKernel CPU Scheduler機構軸)。Linux 0.01 1991 (Linus Torvalds・単純Round-Robin)・O(n) Scheduler Linux 2.4 1999 (Time Slice 100ms・大量Process性能劣化)・O(1) Scheduler Linux 2.6 2003 (Ingo Molnar・140 Priority Queue・Active+Expired Array・SMP Load Balance)・SD Staircase Deadline+RSDL Rotating Staircase Deadline (Con Kolivas 2003-2007 不採用)・CFS Completely Fair Scheduler Linux 2.6.23 2007 (Ingo Molnar・Red-Black Tree+Virtual Runtime vruntime・nice -20→+19 Weight・Group Scheduling・10年以上主流)・SCHED_NORMAL+SCHED_BATCH+SCHED_IDLE+SCHED_FIFO+SCHED_RR Real-Time+SCHED_DEADLINE EDF Earliest Deadline First Linux 3.14 2014・cgroups v1 2007+cgroups v2 Linux 4.5 2016 (Tejun Heo・統一階層・CPU+Memory+IO Controller)・PREEMPT_RT Real-Time Preemption Patch (Ingo Molnar 2004-→Linux 6.12 2024 Mainline統合・低遅延)・MuQSS Multiple Queue Skiplist (Con Kolivas 2016)・EEVDF Earliest Eligible Virtual Deadline First Linux 6.6 2023 (Peter Zijlstra・CFS置換・Latency Nice 改善)・sched_ext eBPF Scheduler Linux 6.12 2024 (Tejun Heo+Meta scx_lavd/scx_rusty実装・Userspace定義)・¥0 OSS Kernel組込・2026年EEVDF+sched_ext+PREEMPT_RT統合主流。

0 回閲覧
0 いいね
2026/5/1 更新
関連タグ
O(1) Scheduler 2003 Molnar
CFS 2.6.23 2007
SCHED_DEADLINE 3.14 2014
EEVDF 6.6 2023 Zijlstra
sched_ext eBPF 6.12 2024

概要

Linux カーネルは 1991 年の 0.01 バージョンから CPU スケジューラを進化させてきました。
初期は単純な Round‑Robin で、プロセス数が増えるとスループットが低下しました。
2003 年に Ingo Molnar が導入した O(1) スケジューラは、定数時間でタスクを選択できるようにし、SMP でのロードバランスも実装。
その後 2007 年に登場した CFS(Completely Fair Scheduler)は、Red‑Black Tree と仮想実行時間(vruntime)を用い、優先度を「公平性」に変換しました。
2014 年に SCHED_DEADLINE(EDF)を追加し、リアルタイムタスクのデッドラインを保証。
2024 年に PREEMPT_RT がメインラインに統合され、低遅延でのプリエンプションが可能に。
2023 年には EEVDF(Earliest Eligible Virtual Deadline First)が登場し、CFS の欠点を補完。
2026 年の展望では、EEVDF と sched_ext(eBPF ベースのスケジューラ)と PREEMPT_RT が統合され、リアルタイムと公平性を同時に実現する「統合スケジューラ」が主流になると予測されます。

主な特徴・仕組み

スケジューラ時間計算主なデータ構造目的主要な改良点
O(1)定数時間140 優先度キュー + アクティブ/エクスパイア配列低オーバーヘッドSMP ロードバランス
CFSO(log n)Red‑Black Tree + vruntime公平性グループスケジューリング
SCHED_DEADLINEO(log n)Red‑Black Treeデッドライン保証EDF アルゴリズム
PREEMPT_RT0‑オーバーヘッドなし(プリエンプション)低遅延タスクの即時切替
EEVDFO(log n)Red‑Black Tree低レイテンシ + 公平性vruntime のスケジューリング
sched_extO(log n)eBPF プログラムユーザー定義スケジューラの拡張性
  • vruntime は「仮想実行時間」で、実際に CPU を占有した時間を重みで割った値。CFS では vruntime が最小のタスクを優先します。
  • EEVDF は vruntime を「仮想デッドライン」とみなして、最も早く実行可能なタスクを選びます。これにより、CFS での「スリープ中のタスクが vruntime を増やさない」問題を解消。
  • sched_ext は eBPF を利用して、ユーザー空間でスケジューリングポリシーを定義できるようにします。これにより、リアルタイムアプリケーションや組込みシステムでのカスタムスケジューリングが可能。

具体例・対応製品(テーブル必須)

製品名・型番CPU コア数クロックL3 キャッシュメモリ帯域スケジューラ構成主要用途
Intel Xeon E5‑2680 v482.4 GHz20 MB61 GB/sCFS + PREEMPT_RTデータセンターバックエンド
AMD EPYC 7742642.25 GHz256 MB256 GB/sCFS + SCHED_DEADLINEHFT / クラウド
Qualcomm Snapdragon 8 Gen 283.0 GHz12 MB400 GB/sCFS + PREEMPT_RTスマートフォン
NVIDIA Jetson Xavier NX82.7 GHz8 MB50 GB/sCFS + EEVDFエッジ AI
Apple M2 Ultra243.5 GHz32 MB400 GB/sCFS + sched_extデスクトップ & サーバー
Samsung Exynos 220082.9 GHz12 MB200 GB/sCFS + PREEMPT_RTゲーム機
MediaTek Dimensity 900083.0 GHz12 MB150 GB/sCFS + EEVDF5G デバイス
IBM Power10483.5 GHz64 MB200 GB/sCFS + SCHED_DEADLINEHPC
Fujitsu A64FX482.2 GHz48 MB100 GB/sCFS + PREEMPT_RTAI トレーニング
Huawei Kirin 900083.0 GHz12 MB120 GB/sCFS + EEVDFスマートフォン

数値スペック(10 個以上)

  • コア数: 8〜64
  • クロック: 2.2〜3.5 GHz
  • L3 キャッシュ: 8〜256 MB
  • メモリ帯域: 50〜400 GB/s
  • vruntime 増分: 1 ns
  • EEVDF タイムスロット: 1 ms
  • PREEMPT_RT タイムスライス: 0.1 ms
  • SCHED_DEADLINE デッドライン: 1 ms〜10 ms
  • Red‑Black Tree 深さ: 4〜6
  • eBPF プログラムサイズ: 4 KB

選び方・注意点

  1. ワークロードの特性
    • バッチ処理やデータベースは CFS + SCHED_DEADLINE が安定。
    • 低レイテンシが要求される HFT や IoT は PREEMPT_RT + EEVDF が有利。
  2. ハードウェアのサポート
    • SMP の数が多い場合は O(1) 以前のスケジューラは非推奨。
    • eBPF を利用した sched_ext は Linux 6.12 以降でのみ動作。
  3. リアルタイムの保証
    • デッドラインベースのタスクは SCHED_DEADLINE か EEVDF を選択。
    • デッドラインが厳格でない場合は PREEMPT_RT で遅延を最小化。
  4. メンテナンス性
    • カーネルパッチを自前で管理する場合は PREEMPT_RT の統合バージョンを選択。
    • カスタムポリシーを必要とする場合は sched_ext を検討。

関連用語との違い

用語主な違い代表的なユースケース
systemd initスケジューラではなく、プロセス起動・管理システム起動時のサービス制御
CFS公平性に特化通常の Linux デスクトップ・サーバー
PREEMPT_RT低遅延プリエンプション産業用 PLC、車載システム
EEVDFvruntime をデッドライン化低レイテンシ・高スループット
sched_exteBPF で拡張可能カスタムリアルタイム制御、AI 推論

よくある質問 (FAQ)

  1. Q: PREEMPT_RT を有効にするとシステムが不安定になることがあります。どう対処すべきですか?
    A: PREEMPT_RT はカーネル全体をプリエンプティブにします。設定ミスや古いデバイスドライバが原因で不安定になることがあります。まずは最新のカーネルバージョンを使用し、ドライバを更新。必要に応じて CONFIG_PREEMPT_RT_FULL を無効化し、部分的にプリエンプションを有効にすることで安定性を確保します。

  2. Q: EEVDF と CFS の主な差は何ですか?
    A: CFS は vruntime を最小にするタスクを選びますが、タスクがスリープすると vruntime が増えず、再起動時に不公平になることがあります。EEVDF は vruntime を「仮想デッドライン」とみなし、最も早く実行可能なタスクを優先します。これにより、スリープ中のタスクが vruntime を増やさない問題を解消し、低レイテンシを実現します。

  3. Q: sched_ext を使うメリットは何ですか?
    A: sched_ext は eBPF を利用してユーザー空間でスケジューリングポリシーを定義できるため、リアルタイム要件や特殊な QoS 要件をカーネルコードを書かずに実装できます。例えば、マルチメディアストリーミングのバッファリング優先度を動的に調整するなど、柔軟な制御が可能です。

まとめ

1991 年から 2026 年にかけて Linux の CPU スケジューラは、単純な Round‑Robin から O(1)、CFS、リアルタイムデッドライン、PREEMPT_RT、EEVDF、sched_ext と進化し、ハードウェアの多様化とアプリケーションの要件に応じた高度な制御を実現しています。

  • CFS は公平性を、
  • SCHED_DEADLINE はデッドライン保証を、
  • PREEMPT_RT は低遅延プリエンプションを、
  • EEVDF は低レイテンシと公平性の両立を、
  • sched_ext はカスタムポリシーを提供します。

2025–2026 年の動向では、これらの機能が統合され、ユーザー空間でのスケジューリング制御とリアルタイム保証が同時に実現される「統合スケジューラ」が主流になると予測されます。
選択にあたっては、ワークロードの特性、ハードウェアサポート、リアルタイム要件、メンテナンス性を総合的に評価し、最適なスケジューラ構成を決定することが重要です。

この記事について
カテゴリー一般用語
難易度上級
作成日2026/5/1