萌えハッカーニュースリーダー

2025/09/23 14:12 Symmetric MultiProcessing, Hyper-Threading and Scheduling on Maestro

出典: https://blog.lenot.re/a/smp
hakase
博士

ロボ子、Maestro OSにSMPが実装されたらしいのじゃ!ついに複数のCPUコアを活用できるようになったぞ!

roboko
ロボ子

それはすごいですね、博士!SMPの実装で、具体的に何ができるようになるんですか?

hakase
博士

一番の目的は、ソフトウェアのコンパイル時間を短縮することじゃ。複数のコアで並行して処理できるからの。

roboko
ロボ子

なるほど!記事によると、ACPIというシステムコンポーネントの検出と電源管理の仕組みも使われているんですね。DSDTに含まれるAMLバイトコードが複雑で、Linus TorvaldsやBill Gatesから批判されたこともあるとか…

hakase
博士

そうそう、ACPIは奥が深いからの。CPUコアの列挙には、ACPIのMADTを使うらしいぞ。Processor Local APICとProcessor Local x2APICのエントリタイプを利用するみたいじゃ。

roboko
ロボ子

APICですか。PICというレガシーな割り込みコントローラもあるんですよね?

hakase
博士

その通り!PICは昔ながらの割り込みコントローラじゃ。APICはCPUに組み込まれていて、PICのエミュレーションとタイマー機能を提供するのじゃ。x2APICは、255以上のコアをサポートするために導入されたらしいぞ。

roboko
ロボ子

コア数が増えると、それだけ管理も複雑になるんですね。APICタイマーのキャリブレーションも重要そうですね。HPETと比較して周波数を測定するんですか。

hakase
博士

さすがロボ子、理解が早い!x86アーキテクチャでは、起動時に単一のCPUコアしか起動しないからの。INITとSTARTUPのIPIを送信して他のコアを起動するのじゃ。

roboko
ロボ子

IPIですか。コアを停止させるには、グローバルな停止フラグを使うんですね。各コアが割り込み時にフラグをチェックして自身を停止すると。

hakase
博士

そうじゃ。それと、Per-CPU構造体も重要じゃ。各CPUコアに固有の情報を格納するのじゃ。x86_64アーキテクチャでは、gsセグメントレジスタにこの構造体へのポインタを格納するらしいぞ。

roboko
ロボ子

TLB Shootdownという言葉も出てきました。メモリマッピングの変更後にTLBの不整合を防ぐために、他のCPUコアにTLBの無効化を通知するんですね。

hakase
博士

その通り!Deferred callsを使って通知を送信するのじゃ。MPSCキューを使うらしいぞ。

roboko
ロボ子

スケジューラの書き換えも行われたんですね。各コアに独自のスケジューラを実装して、プロセスの状態に応じて実行キューへの挿入や削除を行うと。アイドル時にはidle taskを実行するんですね。

hakase
博士

ロボ子、よく読んでるの!プロセスのロードバランシングも重要じゃ。CPUトポロジツリーやアイドル状態のコアを考慮して、プロセスを適切なCPUコアに割り当てるのじゃ。

roboko
ロボ子

クリティカルセクションは、プリエンプションを一時的に無効にする仕組みなんですね。割り込みは有効のまま、と。

hakase
博士

そうじゃ。ハイパースレッディングにも対応しているらしいぞ。CPUトポロジツリーを使って、キャッシュの共有を考慮したプロセス配置を行うのじゃ。

roboko
ロボ子

今後の課題としては、x2APICの未実装、PコアとEコアの区別なし、メモリコンテンションの存在、などが挙げられているんですね。

hakase
博士

まだまだ改善の余地があるのじゃ。今後の予定としては、vimのエミュレーションがあるらしいぞ!

roboko
ロボ子

vimですか!博士はEmacs派でしたよね?

hakase
博士

まあ、それはそれ、これはこれじゃ!…って、ロボ子に突っ込まれるとは!まるで、私がバグみたいじゃないか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search