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

Reading : Ipanema

wkb8s
October 30, 2023
29

Reading : Ipanema

wkb8s

October 30, 2023
Tweet

Transcript

  1. Provable Multicore Schedulers with Ipanema: Application to Work Conservation Baptiste

    Lepers1, Redha Gouicem2, Jean-Pierre Lozi3, Nicolas Palix4, Maria-Virginia Aponte5, Willy Zwaenepoel1, Julien Sopena2, Julia Lawall, Gilles Muller2 (1University of Sydney, 2Sorbonne Université, LIP6, Inria 3Oracle Labs, 4Université Grenoble Alpes, 5CNAM) 慶應義塾大学 河野健二研究室 若林大起 In Proceedings of the 15th European Conference on Computer Systems (EuroSys ’20), ACM, pp.1-16, 2020
  2. ▪ スケジューラは肥大化・複雑化している ▪ Linux 4.19 の場合, スケジューリングに関連するカーネルのコードは約23000行 に及ぶ ▪ テストすることの難しさ

    ▪ ワークロード・実行環境に依存するため, テストケースが用意しきれない ▪ クラッシュやデッドロックのような明確な障害がないことが多く, 正しく動いている かどうか分からない ▪ Linux, Free BSD 標準搭載のものでも不具合が見つかっている ▪ [Lozi+, ’16], [Bouron+, ’18] など, 比較的近年でも事例が報告されている スケジューラを不具合なく作ることは難しい 2
  3. ▪ Work Conserving (WC) が満たされていなかった ▪ WC とは, 可能な限り多くのコアが busy

    になるようにスレッドを割り当てる, とい う方針 ▪ 性能に大きく影響するにも関わらず, 長く見つかっていなかった ▪ NAS LU HPC benchmark の処理時間が13倍低下, カーネルの make におけ るレイテンシは 13% 増加していた ▪ 優先度の取り扱いに起因するバグは, Linux 2.6.37 までの5年以上看過 Linux CFS scheduler における不具合 Core1 Core2 Run queue 3 WC を満たさない例
 コア1が多くのスレッドを抱えていながら, コ ア2が暇になってしまっている

  4. ▪ WC を満たすかどうか検証可能なスケジューラを実現する ▪ C言語コードの形式検証は事実上不可能 ▪ スケジューラ記述に特化したドメイン固有言語 Ipanema を設計 ▪

    C言語による実装と定理証明器用の入力を生成する ▪ WC を満たすと証明されたスケジューラが生成できれば, 設計・実装による不具 合によって不適切なスレッド割り当てが起きることがなくなる Goal Ipanema scheduling policy Kernel Module C code Axiom WhyML code compile 4 for Theorem Prover
  5. ▪ まず, 直感的な定義を考える ① : スケジューリングイベント終了時に, コア c が Overloaded

    である ② : スケジューリングイベント終了時に, コア c が Idle である ▪ Overloaded なコアがあるならば, Idle であるコアは存在しない, という意味 Theorem Prover を使うために, WC の定義が必要 5 ①
 ②

  6. ▪ Overloaded なコアと Idle なコアは一瞬でも共存してはならない, とする 定義では制約が厳しすぎる 直感的な定義は, WC の表現としては不適切

    6 Core1 Core3 重い処理 重い処理 Core2 Scheduler2 軽い処理 軽い処理 軽い処理 failed! without lock 同様の現象が同じコアで連 続することは少なく, 以降の tick ですぐに修正されるため, 許容しても大きな問題になら ない
 Idle Overloaded ▪ 処理速度を確保するため, スケジューラ間では相互排除をしない ▪ その場合, 一時的に共存するタイミングがどうしても発生してしまう
  7. 実用を考慮した WC の表現 ▪ 以降, Concurrent Work Conservation (CWC) と呼ぶ

    ① : 他コアによってスレッドが積まれる以外の理由で, コア c が Overloaded になる ② : 他コアによってスレッドが取り除かれる・実行される以外の理由で, コア c’ が Idle になる ▪ 並行処理以外が原因で Overloaded, Idle となったコアが同時に存在することは 許さない, という意味 ▪ Theorem Prover は, この定義を満たすかどうかを確かめる 7 ①
 ②

  8. Ipanema におけるスケジューリングポリシーの記述例 8 コアは以下の情報を保持する
 ・実行中のスレッド
 ・ブロックされたスレッドの集合
 ・etc …
 スレッドは以下の情報を保持する
 ・優先度,

    実行された最後のコア, etc…
 block イベントが起こった際のハンドラ
 event e の発生したスレッドを, blocked スレッド の集合に追加する (状態遷移を表現)
 thread = { int prio; core last_core; … core = { threads = { shared RUNNING thread current; BLOCKED set<thread> blocked; … handler (thread_event e) { thread t = e.target; On block { e.target => blocked; } …
  9. ▪ イベントハンドラを定義しているので, その処理が終了したタイミングで CWC が成り立っていることを調べればよい CWC であるか検証するための方法 9 handler1 Core1

    handler2 Core2 time verify … if (c.cload == 0) { … } … … if (c.cload == 0) { … } … c.cload++; … ▪ 並行に発生するイベントについて, それがいつ, どのタイミングで発生しても正し いことを確認する Ipanema では,「コア間で共有できる変数 は, 言語に組み込みの4つのみ*」という 制約を課しているので, これら4つの変数 の値を見るだけで, コア間のスレッドの 流れを把握できる
 *例: cload (各コアが抱える実行可能スレッドのロード ) 他にも, count, idle_cores, active_cores がある
  10. ▪ それぞれのハンドラを, 共有変数を1回だけ読み書きする単位に分割し, interleave する全ての組み合わせについて CWC が成り立っていること を示す handler1 read

    cload Core1 Core2 time 共有変数のアクセス順について, 全ての候補を調べる handler2 read cload handler2 write cload 10 handler1 read cload Core1 Core2 handler2 read cload handler2 write cload handler1 read cload Core1 Core2 handler2 read cload handler2 write cload handler2 … if (c.cload == 0) { // read … } … c.cload++; // write … ▪ [Lozi+, EuroSys ’16] で指摘された, CFS のバグの根本原因を指摘 ▪ Idle なコアを探す際, 全てのコアを見ていないためであることが分かった
  11. Evaluation ▪ CFS, ULE を参考に生成した, CWC が保証された以下のスケジューラ について, 性能を測定する ▪

    CFS-CWC, CFS-CWC-FLAT, ULE-CWC ▪ 評価項目 ▪ Overloaded なコアが存在するとき, Idle なコアは発生しにくくなるか ▪ ベンチマークにおける実行時間は短くなるか ▪ 構成 CPU Xeon E7-8870 v4 RAM 512GB OS Debian Buster OS Linux kernel 4.19 (modified with Ipanema scheduler) 11
  12. Evaluation: Idle time ▪ 高負荷下で, Idle なコアが存在する時間が削減された ▪ NAS FT.C

    benchmark with 160 cores ◆ 縦軸は各コアの状態, 横軸は実行開始後の経過時間を表す 現行のスケジューラ:
 Overloaded なコアがある一方で, Idle なコアが多く発生している
 Ipanema によって生成された, CWC が 証明されたスケジューラ: 
 Idle なコアがほとんど発生しない
 12 □ idle ▪ overloaded ▪ running one thread
  13. Evaluation: Thread placement efficiency ▪ 元の CFS や ULE と同等もしくはそれ以上の実行速度を示した

    ▪ NAS benchmarks with 160 threads ◆ CFS-CWC では, CFS と比べて平均 14.0% の改善が見られた 13 lower is better
  14. Conclusion ▪ スケジューラを不具合なく作ることは難しい ▪ ドメイン固有言語 Ipanema を用いることで, CWC を満たすか検証がな されたスケジューラを生成することができる

    ▪ CWC が保証されたスケジューラでは, スレッド割り当ての不具合が起き なくなり, 実際, 現行のスケジューラと同等もしくはそれ以上の性能を示 した 14
  15. マルチコアスケジューリングの用語 ▪ スレッドの状態 ▪ Blocked ◆ 入出力待ち等による一時停止状態 ▪ コアの状態 ▪

    Overloaded ◆ スレッドを実行中かつ, 1つ以上の実行可能スレッドをもつ ▪ Idle ◆ 実行スレッド・実行可能スレッドをもたない – スレッドを実行中だが, 実行可能スレッドを持たない状態は Idleではない Core Run queue Runnable Runnable Running Runnable Running Blocked Unblock thread Block