
2026/04/08 6:41
**RSoC 2026:Redox OS の新しい CPU スケジューラ**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Redox OS はレガシーの Round‑Robin スケジューラを Deficit Weighted Round‑Robin(DWRR)にアップグレードし、さらにインタリーブ版を追加しました。
DWRR では各キューに秒あたり 1、2、または 4 のトークンという重みが与えられ、プロセスはその残高がベース価格を下回るまで実行されます。単純な DWRR スキームは、高優先度のキューが CPU 時間を独占するため低優先度のキューを飢餓状態に陥れる可能性があります。
インタリーブ DWRR は、最高優先度キューのサイクル後に、下位優先度キューが実行できるだけのトークンを蓄積しているかどうかを確認し、その上でトップ優先度へ戻ることでこれを緩和します。 これにより遅延感度の高いタスクは保護されつつ、依然として高優先度作業が優遇されます。
シミュレーション: 16 コアで 40 000 個の CPU を大量に消費するタスクを想定した「理想化」ワークフローでは、RR は平均応答時間約 1 250 タック、単純 DWRR は約 34 460 タック(≈27 倍遅い)、インタリーブ DWRR は約 7 440 タックに減少しました。ランダム化されたタスクテスト(各コアで毎ティック新規タスクを生成、実行時間 2–100 000、ブロッキング確率最大 0.001)では平均が RR ≈51.9 タック、DWRR ≈3 572 タック、インタリーブ DWRR ≈309 タックでした。
実際のケース: Pixelcannon ゲームで FPS は RR の下で約 1 000(2 個の CPU を大量に消費するバックグラウンドタスクあり)から、フォアグラウンドタスクを優先したときに約 1 150 に上昇しました(15 % 増)。スケジューラ操作数は秒間 243 から 360 に (+48 %) 増加し、中位ウェイクアップ遅延も顕著に減少しました。
結論: インタリーブ DWRR は RR の公平性と DWRR の優先度パフォーマンスのバランスをうまく取っており、遅延感度の高いタスクを過剰な飢餓状態に陥れることなく保護します。これは Redox のデフォルトスケジューラ候補として有力であり、大量のバックグラウンドワークロードを実行するユーザーやリアルタイム・インタラクティブジョブを管理する管理者に恩恵をもたらすでしょう。
本文
Akshit Gaur 著 – 2026年4月2日(木)
TL;DR
Redox OS のラウンドロビンスケジューラを Deficit Weighted Round‑Robin (DWRR) に置き換え、プロセスに優先度を割り当てるようになりました。軽負荷時は差がほとんどありませんが、重負荷時には以下のような効果が確認できます。
| 指標 | RR | DWRR | Interleaved DWRR |
|---|---|---|---|
| FPS(pixelcannon) | ~0 % | +15 % | – |
| Ops/sec(schedrs) | 243 | 360 (+48 %) | – |
1. 背景
1.1 ラウンドロビンスケジューラ
Redox OS は現在、シンプルな RR スケジューラを採用しています。各コアはサーキュラーキューから次の実行可能タスクを順番に取得します。
メリット: 公平性が高く、オーバーヘッドが低い。
デメリット: 優先度がないため、インタラクティブな I/O タスクは CPU 集中型のバックグラウンド作業に遅れを取ることがあります。
1.2 Deficit Weighted Round‑Robin (DWRR)
プロセスは複数の優先度付きキューに分けられます。コンテキストスイッチ時にスケジューラは以下を行います:
- 最も高い優先度のキューを選択。
- その重み(weight)を「デフェクト」カウンタへ加算。
- デフェクトがベースコストより小さくなるまでタスクを実行し、次のキューに移動。
これにより高優先度プロセスは速やかに処理されますが、低優先度プロセスは飢餓状態になる可能性があります。
1.3 Interleaved DWRR
飢餓を防ぐためにキューの処理を インタリーブ(交互)します。トップキューから1タスク実行した後、下位キューでデフェクトが十分なら1回実行し、その後再びトップキューへ戻ります。
これにより高優先度タスクの高速化を維持しつつ、低優先度キューにも一定時間 CPU を割り当てます。
2. 設定
とredox_syscall
をlibredox
にクローン。recipes/core
でビルド、またはmake rp.renice
にdesktop.toml
を追加。renice = {}- テスト実行:
nice -n -10 pixelcannonrenice -n -5 -p <pid>
3. シミュレーション結果
3.1 理想化ワークフロー(40 000 の長時間 CPU タスク)
| スケジューラ | 平均応答時間 |
|---|---|
| RR | 1249.5 タック |
| DWRR | 34 459.6 タック |
| Interleaved DWRR | 7442.5 タック |
観察: 全体的には RR が最速ですが、DWRR は最高優先度のタスクで最大 27 倍まで応答時間を改善します。
3.2 ランダム化タスク(各コア毎ティックに新タスクが発生する確率)
| スケジューラ | 平均応答時間 |
|---|---|
| RR | 51.9 タック |
| DWRR | 3572.6 タック |
| Interleaved DWRR | 309.4 タック |
観察: Interleaved DWRR は高優先度タスクの応答時間を劇的に短縮し、低優先度での飢餓も抑制します。
4. 実際のベンチマーク
4.1 pixelcannon(インタラクティブ FPS)
| スケジューラ | FPS |
|---|---|
| RR | ~1000 |
| DWRR(prio 0) | ~1000 |
| DWRR(pixelcannon を高優先度、ハグを低優先度に設定) | 1150 |
結果: インタラクティブ応答性が 15 % 向上。
4.2 schedrs(純粋なスケジューリング)
| 指標 | RR | DWRR |
|---|---|---|
| Ops/sec | 243 | 360 (+48 %) |
| Median wake‑up latency | – | ↓ |
結果: スケジューリングオーバーヘッドとレイテンシが大幅に削減。
5. 結論
- DWRR は背景ノイズによる高優先度、レイテンシ感受性タスクの飢餓を防ぎます。
- Interleaved DWRR は純粋な DWRR よりも大幅に低優先度での飢餓を抑えつつ、優先度ジョブの応答時間を高速化します。
- 実機テストはシミュレーション結果と一致しています。
次のステップ: 静的キュー論理を全 EEVDF スケジューラの動的ラグ計算に置き換えること。