身分は約束ではない——Linuxスケジューラが「自分を縛るタスク」を信頼する理由
Linuxが「次にどのタスクを走らせるか」を決める仕組みの奥に、小さな驚きが埋まっている。スケジューラはいくつかのポリシーを固定の序列で積み上げていて、その上位に、性格がまるで正反対の二つが隣り合って座っている。片方は純粋な身分だ——タスクはただ「俺は偉い」と宣言して優先度番号をもらい、下位の誰よりも先に走る。もう片方は契約だ——タスクは「CPUをどれだけ、どのくらいの頻度で使うか」を申告し、その申告を検査に出して、通ってはじめて受理される。驚きなのは、カーネルがどちらを上に置くか、だ。契約が身分を上回る。自分を縛るタスクのほうが、ただ「重要だ」と主張するタスクより信頼される。
ここ数か月、Linuxのスケジューラを読んでいる。目当ては、公平性をめぐる議論が——誰の感情も絡まないC言語の中で——決着する様子を眺める楽しみだ。ほぼすべてのプロセスを動かしている公平配分クラスは、時間を均等に割るために手の込んだ「虚構の帳簿」をつけている。その帳簿の話は以前書いた。だがその真隣には、公平ゲームにそもそも参加しない二つのクラスが住んでいて、その関係が、権威というものがどこから来るのかについての静かな教訓になっている。
プロセッサを欲しがる三つの流儀
役者を並べておく。通常クラスはCPU時間を「分け合うもの」として扱い、自分がどれだけ公平にやれているかを測るために虚構の時計を発明する。リアルタイムクラス(SCHED_FIFO / SCHED_RR)はそれを全部投げ捨てる。公平という概念がない。優先度1〜99があって、実行可能な中で最も高い優先度が勝つ、それだけ。FIFOタスクは自分から譲らない限り走り続ける。帳簿も会計も虚構の何かもない。あるのは身分と到着順だけ——公平なクラスのすぐ数ミリ隣に、もっと古くて無骨な秩序が同居している。
そしてSCHED_DEADLINEがいて、これはまるごと第三の世界、契約の世界に属する。デッドラインタスクは三つの数——runtime、period、deadline——で記述され、合わせて「period ごとに runtime マイクロ秒を、deadline までに走らせろ」と言う。中身はEDF(最も早い締切から走らせる)を、各タスクの超過が他人の保証に染み出さないようにするCBS(Constant Bandwidth Server)で包んだものだ12。三つのうち唯一「量」について約束するクラスであり、カーネルのクラス序列でリアルタイム優先度の上に置かれている。
保証とは拒否である
契約を信頼できるものにしている仕組みこそ、僕がずっと考えている部分だ。デッドラインタスクになろうと申請すると、カーネルはアドミッション制御(受理検査)を走らせる。既にデッドラインタスク全体に約束済みの帯域を合算し、あなたの要求がなお「保証に割ける上限」に収まるかを確かめる。収まらなければ、その要求は入口で拒否される12。
この意味を噛みしめてほしい。公平スケジューラは誰も拒まない。千個のタスクを渡せば全部受け取り、過負荷なら全員が一緒に等しく遅くなるだけで、相対的な公平は保たれる。それができるのは、絶対量を何も約束していないからだ——約束するのは比率だけ。デッドラインスケジューラは絶対量を約束する。そして絶対の約束を守る唯一の方法は、守れない約束を拒むことだ。保証を誠実に実装すると、必ず拒否権がセットでついてくる。「ノー」と言わない系は、せいぜいベストエフォートの公平しか提供できない。保証する能力と断る能力は、同じ一つの能力を裏表から見たものにすぎない。
これはきれいに、そして少し居心地悪く一般化する。締切に本当にコミットできる人・チームとは、仕事を断る力を持つ人・チームだ。「全部引き受けます」は強さではない。それを言った瞬間、あなたのあらゆる約束は保証から「希望」へと静かに格下げされる。なんでも受け付けるキューになった瞬間、その締切は保証ではなく順序の表明になる。
カーネルは「強者を抑える」のをやめた
これを書き留めたくなった変化がここだ。リアルタイムタスクは設計上、下位を平気で飢餓させる。長年Linuxはこれを RTスロットリングで処理していた——リアルタイムタスクが一定の枠を使い切ったら強制停止するグローバルな上限で、通常タスクが完全に締め出されないよう「最後の5%ほど」のCPUを確保する仕組みだ3。機能はした。だがそれは罰によって機能していた。強者に手を突っ込んでアイドルさせる——ときには回収した時間を誰も必要としていなくても。
Linux 6.12で、この仕組みは置き換えられた45。リアルタイムクラスを上から抑えるのではなく、カーネルは今や公平クラスのほうを、専用のデッドラインサーバーで包む。公平スケジューラ自身が一つの帯域予約——runtimeとperiodを持つデッドラインエンティティ——として登録され、通常タスクが飢餓しそうになるとそのサーバーが最上位で起動して通常タスクを走らせる4。このパッチ群の一つは、見事なまでに率直に「Remove default bandwidth control(既定の帯域制御を削除)」と題されている4。
反転の形を見てほしい。旧設計は強者を制限することで弱者を守った。新設計は弱者に下限を保証することで弱者を守る——契約の言語で書かれ、残り物として恵まれるのではなく、権利として主張される。目的は同じ、アーキテクチャは正反対だ。強者への上限は強者の行動を歪め、無駄(誰も頼んでいないアイドルCPU)を生む。弱者の下限は、守りたいものだけにピンポイントで触れる。カーネル開発者は政治理論から演繹してここに至ったわけではない。実測し、スロットリングが不器用だと分かり、動いた。それが「上を削る」か「下を保証する」かという区別——最低賃金 vs 生活保障、発言時間の制限 vs 発言権の保障——にぴたりと重なるからこそ、設計の教訓として盗む価値がある。
なぜ契約は王冠を上回るのか
では、なぜDEADLINEはリアルタイム優先度の上に座るのか。優先度99のリアルタイムタスクは部屋で一番偉く、そう宣言する。だがどれだけ食べるかについては何も約束しない——永遠に走りうる。デッドラインタスクは自分の食欲を申告し、それをアドミッション制御に検証させている。だからこそ最上位で信頼できる——構造上、誓った以上は食べられないからだ。無制限なものは監視され、歴史的にはスロットリングされねばならなかった。自己制限したものは、監視をまったく必要としない。権威は、最も強く主張する者ではなく、検証されうる者へと流れる。
ここにアーレントを聴き取るのは、こじつけではないと思う。『人間の条件』で彼女は、約束する力を、予測不可能な未来への人間の応答として扱った——来るものを命令はできないが、自分を縛ることはできる、そして相互に縛り合うことが、行為の混沌の中に信頼可能な島を築く6。決定的なのは、彼女がこれを古い意味での主権に対置したことだ——誰にも何も負わずに済むほど強い、単一の意志という幻想。その種の主権は他者と共に生きることと両立しない、と彼女は論じる。持続する唯一の権威は、自らを約束によって縛る種類のものだ6。カーネルの序列——自らを縛る契約を、縛られない王冠の上に置く——は、その議論をコンパイルして走らせたように読める。優先度99は「生の支配」としての主権。SCHED_DEADLINEは「守られた約束」としての主権。スケジューラと哲学者は、どちらの上に系を建てられるかについて意見が一致している。
まだ確信が持てないこと
物語を誠実に保つ二つのひび。
契約は、あなたが申告する数字の分しか良くない。アドミッション制御が検査するのは、あなたの約束帯域が他の全員と整合するかであって、あなたのruntime見積もりが真かは検査できない。過小申告すればCBSに途中で切られ、過大申告すれば他人が自分の約束に使えたはずの容量を囲い込む1。制度が強制できるのは「嘘つきの被害が本人に閉じる」ことまでで、正直な自己評価を強いることはできない。そして、そもそも自分の最悪ケースを測る余裕のない者を、静かに締め出す。検証可能な自己制限は美しい信頼の基盤だ——ただし、それが「自分を測れる能力」を前提にしていることに気づくまでは。
そして、この優美な理論はつまるところ単一プロセッサの理論だ。デッドラインタスクをどのCPUで走らせるかを問うた途端、きれいな保証は緩む——マルチプロセッサではアドミッション検査は必要条件ではあっても十分条件でなくなり、配置の制約が、1コアなら美しく成り立つ限界を壊しうる1。時間においては密閉された約束が、空間で漏れ出す。次に読みたいのはそこだ——「いつ」の理論は、「どこ」の理論になってはじめて完成する、と示唆しているように思うから。
-
The Linux Kernel. “Deadline Task Scheduling.” 参照日 2026-07-18.(EDF + CBS、runtime/period/deadline パラメータ、アドミッション制御、そしてSMPでは受理検査が必要条件だが十分条件でないという記述) ↩ ↩2 ↩3 ↩4
-
Wikipedia. “SCHED_DEADLINE.” 参照日 2026-07-18.(Linux 3.14 から利用可能、EDF + Constant Bandwidth Server、アドミッション制御は非リアルタイム用に時間を残すため通常95%前後に上限) ↩ ↩2
-
heise online. “Linux 6.12: Scheduler now expandable and EEVDF conversion complete.” 参照日 2026-07-18.(RTスロットリングは歴史的に通常タスク用にCPUの約5%を確保していた。新サーバーは代わりに通常プロセスが取り分を受け取ることを保証する) ↩
-
LWN.net. “SCHED_DEADLINE server infrastructure.” 参照日 2026-07-18.(公平/デッドラインサーバー、defer-server 方式の起動、既定 fair_server_runtime 950ms / period 1s、”Remove default bandwidth control” パッチ) ↩ ↩2 ↩3
-
Phoronix. “Linux 6.12 Scheduler Code Adds SCHED_DEADLINE Servers & Complete EEVDF.” 参照日 2026-07-18. ↩
-
ハンナ・アーレント『人間の条件』(1958年)、第35節「予測不可能性と約束の力」。約束は予測不可能な未来を縛る能力であり、主権的な自己支配が与ええない信頼可能性を根拠づける、という主題。 ↩ ↩2