マルチプログラミングをサポートするマルチプロセッサ上では、並列アプリケーションの実行要素であるスレフドをどのように管理するかが、システムの性能に大きな影響を与える。特に、スレッド管理の設計、実現上もっとも重要な課題は、スレッド管理コストを決定する3種類のスレッド切り替え(ユーザタスク内のコンテクストスイッチ、カーネル内のコンテクストスイッチ、及びユーザタスクとカーネルの間のドメインスイッチ)の頻度および個々のオーバーヘッドを低く抑えることである。 マルチプログラミングを導入した汎用並列システムにおいては、しかし、システムソフトウェアの忰組みに対する再考察を必要とする困難な問題であった。その理由は、変化を続けるプロセッサ需要に対応しつつ、複数のアドレス空間(またはタスク)の間でプロセッサ資源を公平に分配する必要があるため、また、各ユーザプログラムで必要となるさまざまなスレッドスケジューリングポリシーに対応する必要があるためである。 これまでもスレッド切り替えを低減する目的で、さまざまなスレッド管埋システムが提案、実現されてきた。これらのシステムの性能上の目標は、ユーザのアプリケーションが、その実行中にスレッド操作列(典型的には生成、削除、停止、再開、同期、通信からなる)を発生させた場合に、これをできるだけ少ないスレッド切り替えによって実現すること、すなわち「最適なスレッド切り替え動作」の実現である。 しかし、従来のどのスレッド管理システムでも、最適なスレッド切り替え動作が実現されたものはなかった。この理由は、以下の4つにまとめられる。(1)Avoidable synchrony:ユーザとカーネルとの間で不必要な同期が起こる。代表例としては、ユーザが、システムコールによりカーネルスレッド(カーネルがプロセッサを多重化して実現するスレッド)の生成や停止、再開を要求することがある。これらはシステムコールインターフェイスを変更すれば取り除くことができる。(2)Harmful transparency:カーネルがシステムをアプリケーションの必要以上に仮想化することによるオーバーヘッドがある。代表例としては、無限の数のカーネルスレッドを実現することによる、カーネルレベルのスレッド管理コストの増大があげられる。(3)Mismatch of scheduling semantics:カーネルの提供するスケジューリングポリシーが、ユーザレベルで必要とするスケジューリングポリシーと必ずしも一致しない。(4)Uncontrolled timing of scheduling:カーネルによるスケジューリングが、ユーザレベルからは予測不能かつ制御不能である。このため、スピンロックなどの、プロセッサの割り当て戦略と結びついたプログラミング技法が有効に働かない。 本論文は、既存のスレッド管理機構のこれらの欠点を克服した、新しいスレッド管理機構の枠組みを提案する。この枠組みでは、共有メモリ型マルチプロセッサにおいて、オペレーティングシステムカーネルがユーザレベルのスレッド管理機構の存在を仮定し、2つのレイヤが非同期的な協調動作を行なうことを基本としている。 非同期的なカーネルとユーザレベルの協調動作を基本としたこのスレッド管理の枠組みにより、ユーザレベルのスケジューリングポリシーの変化、システムの負荷の変化、アプリケーションの通信同期パターンにかかわらずスレッド管理回数を低く抑えることができる。特に、ノンプレエンプティブスケジューリング、プレエンプティブスケジューリング、プライオリティつきスケジューリングの3つの代表的なスケジューリングポリシーをとった場合、本枠組みに基づくスレッド管理機構は、最適なスレッド切り替え動作を実現する。 提案するスレッド管理の枠組みでは、カーネルとユーザレベルとの間の協調動作を、以下の3つのアブストラクションによって行なう。 Unstableカーネルスレッドカーネルはユーザレベルの要求とは直接関係なくカーネルスレッドを生成、停止、再開、終了する。このためカーネルが、各ユーザタスクが使用するカーネルスレッド数を決定できる。これにより、harmful transparencyの問題を解決する。 共有メモリ領域ユーザは、どのカーネルスレッドにプロセッサが割り当てられているかを知ることができる。Uostableカーネルスレッドは、任意に長い時間スケジュールされなかったり、場合によってはカーネルによって強制的に終了させられることがあるが、このようなカーネルスレッドの動作をユーザレベルで把握し、制御するためにシステムが定義した共有メモリ領域を用いる。これによりavoidable synchronyおよびuncontrolled timing of schedulingの問題を解決する。 Notifierカーネルスレッド カーネルで発生するイベントで、ユーザが特に指定したものに関しては、アップコールにより同期的に通知する。これをnotifierカーネルスレッドと呼ぶ。このインターフェイスにより、mismatch of scheduling semanticsを解決する。 本研究の貢献は、以下の3点である。(1)非同期的なカーネルとユーザレベルの協調動作の導入により、マルチプログラミングされた共有メモリマルチプロセッサ上の代表的なスレッドスケジューリングポリシー下で、最適なスレッド切り替え動作を行なうスレッド管理機構を実現する方法を確立した点、(2)設計した3つのアブストラクションを実現、動作させることにより、提案する枠組みが実際に使用可能であることを明らかにした点、そして、(3)実現したスレッド管理機構およびシミュレーションによる性能比較により、提案する枠組みに基づくスレッド管理機構が、既存のスレッド管理機構よりも優れた性能をもつことを確認した点である。 |