Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxのプロセススケジューラの歴史 v2.6.0~v2.6.22

Linuxのプロセススケジューラの歴史 v2.6.0~v2.6.22

以下動画のテキストです
https://youtu.be/iu35GUZ57gU

Satoru Takeuchi

January 29, 2022
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. はじめに • Linuxカーネル(以下カーネル)のプロセススケジューラの歴史を振り返る • 対象バージョン: 最初のリリースv2.6.0からv2.6.22まで • 用語 ◦ タスク:

    カーネルのスケジューリング単位。プロセスあるいはスレッド ◦ LCPU: カーネルがCPUとして認識するもの(物理CPU or コア or スレッド) ◦ Current: LCPU上で現在動作中のタスク 2
  2. 対話型タスクの優先動作 • 対話型タスク: bashやXなどの人間が直接やりとりするタスク • 課題 ◦ 実行可能タスク増加に伴い対話型タスク起床時のスケジュールが遅れる ◦ ユーザの体感レイテンシが長くなる

    • 対策: ヒューリスティックを入れる ◦ 単位時間あたりにsleepしている率が高いプロセスを対話型タスクとみなす ◦ 対話型タスクへの優遇 ▪ タイムスライスが切れると expiredキューではなくactiveキューに移す ▪ 内部的にnice値を下げる: タイムスライスは変化しない ▪ その一方、ずっと実行可能なタスクは優先度を下げる (最大5) 19
  3. 一番busyなnodeと暇なnodeを見つける • 27 t0 t1 t5 t4 t3 LCPU0 LCPU1

    LCPU2 LCPU3 t2 node0 node1 タスク数4 タスク数2
  4. 一番busyなnode内の一番忙しいLCPUを選ぶ • 28 t0 t1 t5 t4 t3 LCPU0 LCPU1

    LCPU2 LCPU3 t2 node0 node1 タスク数3 タスク数1
  5. 一番暇なnode内の一番暇なLCPUを選ぶ • 29 t0 t1 t5 t4 t3 LCPU0 LCPU1

    LCPU2 LCPU3 t2 node0 node1 タスク数0 タスク数2
  6. O(1)スケジューラの諸問題 • ヒューリスティック多すぎでコーナーケースが山ほどある ◦ 例: 応答性向上機能のせいでシステムが応答しなくなる 1. スリープと起床を繰り返すタスクを大量に起動 2. 一部タスクが対話的とみなされて優先度が最高に

    3. 2で述べたタスクがタイムスライスを使い切ると activeキューに 4. 他のタスクは全く動けない • 実行可能タスク数が多いとなかなかCPU時間が回ってこない • タイムスライスの粒度が荒くて細かい制御ができない ◦ 粒度を増やすにはタイマー割り込みの回数を増やす必要がある ◦ 細かくすると割り込み回数が上がってシステム全体の性能が下がる 36
  7. V2.6.2{0,1,2}の開発中あたり: RSDL vs CFS • 次期スケジューラの座を争って2つの新実装が激突 ◦ Rotating Staircase Deadline

    Scheduler by Con Kolivas ▪ 「今のスケジューラはエンプラ用途に特化しすぎ」とデスクトップ志向を目指した ◦ Completely Fair Scheduler(CFS) by Ingo Molnar ▪ RSDLに触発されて後追いで作られた ▪ 目標は全てのタスクを Completely Fair(完全に平等)に扱うこと 37 CFSがいいよ RSDLがいいよ