(57)【要約】【課題】メニーコアプロセッサにおいてＳＭＰモデルを実現してスループットを向上するとともに、高優先度のスレッドの実行時間を保証してリアルタイム性を確保することができるマルチコアプロセッサの制御プログラム、電子機器及び制御方法を提供する。【解決手段】生成されるスレッドの動作コア１０を決定するグローバルスケジューラ２１と、複数のコア１０ごとに設けられたローカルスケジューラ３１と、を備える。前記ローカルスケジューラ３１は、自コア１０に割り当てられたスレッドを優先度に応じて実行させる。前記グローバルスケジューラ２１は、所定のスケジューリングポリシーに基づいて前記複数のコア１０間でのスレッドマイグレーションの実行を決定する。なお、各コア１０に割り当てられたスレッドのうち高優先度の上位Ｎ個のスレッドについてはスレッドマイグレーションの対象としない。【選択図】図２
2014096024.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを備えたマルチコアプロセッサの制御プログラムであって、
生成されるスレッドの動作コアを決定するグローバルスケジューラと、
前記複数のコアごとに設けられたローカルスケジューラと、
を備え、
前記ローカルスケジューラは、自コアに割り当てられたスレッドを優先度に応じてスケジューリングして自コアで実行させ、
前記グローバルスケジューラは、所定のスケジューリングポリシーに基づいて前記複数のコア間でのスレッドマイグレーションの実行を決定するものであって、各コアに割り当てられたスレッドのうち高優先度の上位Ｎ個（Ｎは１以上の予め定められた自然数）のスレッドについてはスレッドマイグレーションの対象としないことを特徴とする、マルチコアプロセッサの制御プログラム。
【請求項２】
前記グローバルスケジューラは、生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコアの数）のスレッドについて、各スレッドの動作コアが互いに異なるようにマップすることを特徴とする、請求項１記載のマルチコアプロセッサの制御プログラム。
【請求項３】
前記グローバルスケジューラは、前記複数のコア間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコアを決定することを特徴とする、請求項１又は２記載のマルチコアプロセッサの制御プログラム。
【請求項４】
請求項１〜３のいずれかに記載のマルチコアプロセッサの制御プログラムを搭載した電子機器。
【請求項５】
複数のコアを備えたマルチコアプロセッサ上で作動し、前記複数のコアごとに設けられたローカルスケジューラでスレッドのスケジューリングを行うマルチコアプロセッサの制御方法であって、
生成されるスレッドの動作コアを決定するステップと、
前記ローカルスケジューラが自コアに割り当てられたスレッドについて優先度に応じてスケジューリングして自コアで実行させるステップと、
所定のスケジューリングポリシーに基づいて前記複数のコア間でスレッドマイグレーションを実行するステップと、
を備え、
各コアに割り当てられたスレッドのうち高優先度の上位Ｎ個（Ｎは１以上の予め定められた自然数）のスレッドについてはスレッドマイグレーションが実行されないことを特徴とする、マルチコアプロセッサの制御方法。
【請求項６】
生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコアの数）のスレッドについて、各スレッドの動作コアが互いに異なるようにマップすることを特徴とする、請求項５記載のマルチコアプロセッサの制御方法。
【請求項７】
前記複数のコア間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコアを決定することを特徴とする、請求項５又は６記載のマルチコアプロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のコアを備えたマルチコアプロセッサの制御に関するものである。特に、多数のコアを組み込んだプロセッサにおいて、スループットの向上とリアルタイム性の確保とを両立することができる制御プログラム、電子機器及び制御方法に関する。
【背景技術】
【０００２】
従来、この種のマルチコアプロセッサの多くは異種のコアを用いたものである。このような異種のコアを用いた構成は、特定のアプリケーション用途向けのコアを設けることで、消費電力当たりのパフォーマンスを向上するために採用されている。しかしながら、プロセス技術の急速な進歩などを考慮すると、特定のアプリケーション用途向けのチップの優位性を確保することはますます困難になると想定される。このような事情から、よりスケーラブルな構成、すなわち、均質なコアを組み込んだチップが増加すると考えられる。また、近年においては単一のチップに組み込むコアの数が増加する傾向にあり、このような均質なコアを用いた構成によればコア数が増加したとしても対応が容易であるので、コア数の増加を促進する構成としても期待されている。
【０００３】
ところで、ランタイムソフトウェアを管理するための最も一般的なアプローチは、オペレーティング・システムを使用することであり、マルチコアプロセッサの制御にはマルチコアプロセッサに対応したオペレーティング・システムが使用される。コアの数が最大４程度のマルチコア環境では、非対称型マルチプロセッシング（ＡＭＰ）モデル、または、対称型マルチプロセッシング（ＳＭＰ）モデルのいずれかで制御を行うオペレーティング・システムが使用される。
【０００４】
ＡＭＰは、スレッドが実行されるコアを固定する処理方法であり、スレッドマイグレーションやキャッシュ関連の問題などを回避し、処理のリアルタイム性を確保しやすいために広く使用されている。このＡＭＰは、コアの数が比較的少ない場合には有利であるが、コアの数が増加していくと、コア間の通信、デバイスの共有、サービスの共有などの処理コストが許容できない問題として発生する。なお、ハイパーバイザベースのパーティション化モデルは原則としてＡＭＰモデルであり、同様の問題を抱えている。
【０００５】
このように、ＡＭＰは比較的コアの数が少ない場合には有効であるものの、コア数の増加への対応には限界があるため、コア数のさらなる増加が見込まれる現在においては、スケーラブルなＳＭＰモデルを採用したオペレーティング・システムによりスループットを向上させることが強く求められている。
【０００６】
しかしながら、コアの数が８個以上となるようなメニーコアプロセッサにおいてＳＭＰモデルのオペレーティング・システムを実装すると、キャッシュコヒーレンシの不足または高コストという新たな問題が発生する。例えば、共有メモリの排他制御が複雑かつ高コストとなるので、処理全体に与えるボトルネックとなり、また、ＳＭＰモデルにおいてはスレッドの動作コアを変更するスレッドマイグレーションが実行されるが、このスレッドマイグレーションのオーバーヘッドが増大するという問題がある。なお、ほとんどのメニーコアプロセッサは、ハードウェア・キャッシュコヒーレンシ・メカニズムを提供しておらず、また、キャッシュコヒーレンシを持つ稀なメニーコアプロセッサにおいても、チップ内のコア間のコヒーレンシを維持するためのコストは、従来のコアの数が少ないプロセッサに比べてはるかに高コストとなる。
【０００７】
上記したように、スループットを高めるためにＳＭＰモデルを採用すると、トレードオフとしてボトルネックやオーバーヘッドが発生し、リアルタイム性が犠牲になるという問題があった。この点、メニーコアプロセッサの制御については複数の先行研究があるものの（例えば非特許文献１参照）、主にサーバの処理を目的としたものであり、例えば組み込みシステムのようにリアルタイム性を求められる分野における研究ではないためにリアルタイム性を確保するためのスケジューリングについてはほとんど議論されていなかった。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】David Wentzlaff他、"An Operating System for Multicore and Clouds: Mechanisms and Implementation"、MIT Open Access Articles、［online］、インターネット〈URL：http://dspace.mit.edu/openaccess-disseminate/1721.1/62570〉
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明は、メニーコアプロセッサにおいてＳＭＰモデルを実現してスループットを向上するとともに、高優先度のスレッドの実行時間を保証してリアルタイム性を確保することができるマルチコアプロセッサの制御プログラム、電子機器及び制御方法を提供することを課題とする。
【課題を解決するための手段】
【００１０】
本発明は、上記した課題を解決するためになされたものであり、以下を特徴とする。
【００１１】
（請求項１）
請求項１に記載のマルチコアプロセッサの制御プログラムは、複数のコアを備えたマルチコアプロセッサの制御プログラムであって、生成されるスレッドの動作コアを決定するグローバルスケジューラと、前記複数のコアごとに設けられたローカルスケジューラと、を備え、前記ローカルスケジューラは、自コアに割り当てられたスレッドを優先度に応じてスケジューリングして自コアで実行させ、前記グローバルスケジューラは、所定のスケジューリングポリシーに基づいて前記複数のコア間でのスレッドマイグレーションの実行を決定するものであって、各コアに割り当てられたスレッドのうち高優先度の上位Ｎ個（Ｎは１以上の予め定められた自然数）のスレッドについてはスレッドマイグレーションの対象としないことを特徴とする。
【００１２】
（請求項２）
請求項２に記載の発明は、上記した請求項１記載の発明の特徴点に加え、以下の点を特徴とする。
【００１３】
すなわち、前記グローバルスケジューラは、生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコアの数）のスレッドについて、各スレッドの動作コアが互いに異なるようにマップすることを特徴とする。
【００１４】
（請求項３）
請求項３に記載の発明は、上記した請求項１又は２記載の発明の特徴点に加え、以下の点を特徴とする。
【００１５】
すなわち、前記グローバルスケジューラは、前記複数のコア間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコアを決定することを特徴とする。
【００１６】
（請求項４）
請求項４に記載の発明は、請求項１〜３のいずれかに記載のマルチコアプロセッサの制御プログラムを搭載した電子機器である。
【００１７】
（請求項５）
請求項５に記載のマルチコアプロセッサの制御方法は、複数のコアを備えたマルチコアプロセッサ上で作動し、前記複数のコアごとに設けられたローカルスケジューラでスレッドのスケジューリングを行うマルチコアプロセッサの制御方法であって、生成されるスレッドの動作コアを決定するステップと、前記ローカルスケジューラが自コアに割り当てられたスレッドについて優先度に応じてスケジューリングして自コアで実行させるステップと、所定のスケジューリングポリシーに基づいて前記複数のコア間でスレッドマイグレーションを実行するステップと、を備え、各コアに割り当てられたスレッドのうち高優先度の上位Ｎ個（Ｎは１以上の予め定められた自然数）のスレッドについてはスレッドマイグレーションが実行されないことを特徴とする。
【００１８】
（請求項６）
請求項６に記載の発明は、上記した請求項５記載の発明の特徴点に加え、以下の点を特徴とする。
【００１９】
すなわち、生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコアの数）のスレッドについて、各スレッドの動作コアが互いに異なるようにマップすることを特徴とする。
【００２０】
（請求項７）
請求項７に記載の発明は、上記した請求項５又は６記載の発明の特徴点に加え、以下の点を特徴とする。
【００２１】
すなわち、前記複数のコア間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコアを決定することを特徴とする。
【発明の効果】
【００２２】
請求項１記載の発明によれば、グローバルスケジューラとローカルスケジューラとによる２段階のスケジュールによりスレッドが実行される。グローバルスケジューラは、生成したスレッドの動作コアを決定するとともに、所定のスケジューリングポリシーに基づいてスレッドマイグレーションの実行を決定する。このため、各コアにほぼ均等にスレッドを割り当てることができ、ハードウェアリソースを有効に活用してスループットを向上することができる。
【００２３】
また、各コアに割り当てられたスレッドのうち高優先度の上位Ｎ個（Ｎは１以上の予め定められた自然数）のスレッドについてはスレッドマイグレーションの対象としないので、高優先度のスレッドはスレッドマイグレーションされずに割り当てコアでの最優先実行が保証されている。このため、リアルタイム性が要求される高優先度のスレッドの実行時間を保証することができるので、リアルタイム性を確保することができる。
【００２４】
また、請求項２に記載の発明は上記の通りであり、グローバルスケジューラは生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコアの数）のスレッドについて、各スレッドの動作コアが互いに異なるようにマップする。すなわち、スレッドを割り当て可能なコア数と同数のスレッドについて、優先度の高い順に実行を保証することができるので、これら高優先度のスレッドの実行時間を保証することができ、リアルタイム性を確保することができる。
【００２５】
また、請求項３に記載の発明は上記の通りであり、グローバルスケジューラは、複数のコア間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコアを決定するので、ロードバランスを最適な状態に保つことができ、スループットを向上することができる。
【００２６】
また、常にスレッドマイグレーションを実行するのではなく、定期的に検査した結果を基にスレッドマイグレーションを実行するので頻繁にスレッドマイグレーションが発生せず、かつ、ロードバランスが変化しない状況においてはスレッドマイグレーションが発生しないので、スレッドマイグレーションのコストを抑制することができる。特に、ボトルネックやキャッシュコヒーレンシの問題を回避するために共有メモリを使用しない（コアごとのローカルメモリを使用する）場合には、スレッドマイグレーション時にローカルメモリのコピーが必要となるためスレッドマイグレーションのコストが問題となる。しかしながら、本発明の制御によれば、スレッドマイグレーションの回数を最低限に抑制することでスレッドマイグレーションに伴うコストを抑制することができるため、言い換えると、スループットやリアルタイム性を確保しつつもボトルネックやキャッシュコヒーレンシの問題を回避することができる。
【００２７】
また、請求項４に記載の発明は上記の通りであり、上記したような効果を発揮する制御プログラムを搭載した電子機器を得ることができる。
【００２８】
また、請求項５によれば、請求項１記載の発明と同様の効果を得ることができる。
【００２９】
また、請求項６によれば、請求項２記載の発明と同様の効果を得ることができる。
【００３０】
また、請求項７によれば、請求項３記載の発明と同様の効果を得ることができる。
【図面の簡単な説明】
【００３１】
【図１】システムの概要を示す概念図である。
【図２】スケジューリングポリシーを説明する図である。
【図３】（ａ）コアごとのワークロードの計算式、（ｂ）ロードバランスのばらつきの計算式である。
【図４】スレッド生成処理のフロー図である。
【図５】スレッド削除処理のフロー図である。
【図６】ロードバランシング処理のフロー図である。
【発明を実施するための形態】
【００３２】
本発明の実施形態について、図を参照しながら説明する。
【００３３】
（システムの基本構成）
本実施形態に係るシステムは、電子機器に組み込まれて使用される組み込みシステムであり、マルチコアプロセッサ（メニーコアプロセッサ）を備えている。このマルチコアプロセッサは、図１（ａ）に示すように、複数のコア１０（図１（ａ）においては６４個のコア１０）を備えている。電子機器に内蔵される不揮発メモリには、このマルチコアプロセッサを制御するための制御プログラム（オペレーティング・システム）が記憶されており、この制御プログラムがマルチコアプロセッサ上で実行されることで各種アプリケーション２５が実行されるように形成されている。
【００３４】
なお、このシステムにおいては、ハードウェアによるキャッシュコヒーレンシ機構は存在していない。また、コア１０で共有される共有メモリは存在するものの、アクセスが高コストであるので、後述するマイクロカーネル３０はこの共有メモリを使用しておらず、コア１０ごとのローカルメモリを使用している。
【００３５】
複数のコア１０は、図１（ａ）に示すように、ＯＳサーバ実行コア１１とアプリケーション実行コア１２とに分けられる。ＯＳサーバ実行コア１１は、制御プログラムの一部をなすＯＳサーバ２０を実行するコア１０である。アプリケーション実行コア１２は、ユーザアプリケーションやミドルウェア、ドライバなどのアプリケーション２５を実行するコア１０である。ＯＳサーバ２０及びアプリケーション２５は、それぞれがスレッドとしてコア１０に割り当てられ、実行される。なお、いずれのコア１０をＯＳサーバ実行コア１１又はアプリケーション実行コア１２とするかは、予め静的に決定しておいてもよいし、後述するグローバルスケジューラ２１の割り当てにより動的に決定されることとしてもよい。グローバルスケジューラ２１の割り当てにより動的に決定される場合、ＯＳサーバ実行コア１１においてＯＳサーバ２０が実行待機状態に変位した場合に、このＯＳサーバ実行コア１１においてアプリケーション２５が実行され、ＯＳサーバ実行コア１１がアプリケーション実行コア１２に変化することもあり得ることとなる。
【００３６】
なお、ＯＳサーバ２０は、オペレーティング・システムが提供する各種機能をスレッドとして実行するものである。そして、これらＯＳサーバ２０の１つとして、生成したスレッドの動作コア１０を決定するグローバルスケジューラ２１が実行される。このグローバルスケジューラ２１は、所定のスケジューリングポリシーに基づいて、生成されるスレッドの動作コア１０を決定し、また、スレッドの動作コア１０の変更（スレッドマイグレーション）の実行を決定する。このグローバルスケジューラ２１の詳細については後ほど説明する。
【００３７】
各コア１０には、図１（ａ）に示すように、制御プログラムの一部をなすマイクロカーネル３０がコア１０ごとに分散して設けられている。このマイクロカーネル３０は、図１（ｂ）に示すように、ローカルスケジューラ３１、メッセージマネージャ３２、メモリマネージャ３３、インタラプトマネージャ３４を備えている。
【００３８】
ローカルスケジューラ３１は、自コア１０に割り当てられたスレッドについて優先度に応じてスケジューリングして自コア１０で実行させるものである。例えば、あるローカルスケジューラ３１が制御するコア１０に、グローバルスケジューラ２１によって３つのスレッドが割り当てられた場合、ローカルスケジューラ３１はこの３つのスレッドのうちで最も優先度の高いスレッドを優先して実行する。そして、最も優先度の高いスレッドが待機状態となった場合には次に優先度の高いスレッドを実行し、上位２つのスレッドがいずれも待機状態となった場合にのみ最も優先度の低いスレッドを実行するようにスケジューリングする。そして、実行中のスレッドよりも優先度の高いスレッドが実行可能状態となったら、実行中のスレッドを停止し、優先度の高いスレッドに切り替えて実行する。
【００３９】
メッセージマネージャ３２は、他スレッドへのメッセージング機能を有するものである。このメッセージマネージャ３２は、ＯＳサーバ２０へのメッセージング機能も有している。例えば、アプリケーションスレッド４２がカーネルＡＰＩの呼び出し（例えばスレッドの生成・削除など）を行う場合、各コア１０のインターフェースライブラリ４１を使用してカーネルＡＰＩの呼び出しが実行され、インターフェースライブラリ４１内においてメッセージマネージャ３２を使用してＯＳサーバ２０（他コア１０で実行されている）が呼び出される。このように、メッセージマネージャ３２を使用してコア１０間の通信が実行され、ＯＳサーバ２０への処理依頼・応答処理待ちが行われることで、アプリケーションスレッド４２はコア１０を意識することなくＯＳサービスの呼び出しを行えるようになっている。
【００４０】
メモリマネージャ３３は、自コア１０に割り当てられたコア１０ごとのローカルメモリを管理するものである。すなわち、本システムにおいては、アクセスが高コストな共有メモリを使用せずにコア１０ごとのローカルメモリを使用することでボトルネックやキャッシュコヒーレンシの問題を回避する構成となっており、このコア１０ごとのローカルメモリを管理するのがメモリマネージャ３３である。このメモリマネージャ３３は、例えばスレッドの生成・削除に伴うメモリイメージの管理を行う。
【００４１】
インタラプトマネージャ３４は、自コア１０の処理の割り込み管理を行うためのものである。このインタラプトマネージャ３４は、割り込み要求が発生したときに、現在の処理を中断して割り込み処理を実行するようにコア１０の処理を切り替える。
【００４２】
（スレッドグループについて）
グローバルスケジューラ２１は、所定のスケジューリングポリシーに基づいてスレッドの動作コア１０を決定・変更する。グローバルスケジューラ２１のスケジューリングポリシーの基本的考え方の１つは、各コア１０に割り当てられたスレッド群を「優先度上位スレッドグループ」と「優先度下位スレッドグループ」とに分割するというものである。「優先度上位スレッドグループ」は、各コア１０に割り当てられたスレッドのうち高優先度の上位Ｎ個のスレッドである。「優先度下位スレッドグループ」は「優先度上位スレッドグループ」に含まれない低優先度のスレッドである（図２参照。なお、この図２においてはコア１０の数を４つとして簡略化して説明しているが、これは説明の便宜上であり、実際には図１に示すような多数のコア１０が組み込まれている）。
【００４３】
「優先度上位スレッドグループ」と「優先度下位スレッドグループ」との違いは、スレッドマイグレーションの対象となるかどうかである。「優先度上位スレッドグループ」に属するスレッドはスレッドマイグレーションの対象とはならず、「優先度下位スレッドグループ」に属するスレッドはスレッドマイグレーションの対象となる。
【００４４】
「優先度上位スレッドグループ」に属するスレッドは、「優先度上位スレッドグループ」に属する限りはスレッドマイグレーションされないため、割り当てられたコア１０において優先的に実行される。このため、リアルタイム性が要求される高優先度のスレッドの実行時間を保証することができるので、リアルタイム性を確保することができるようになっている。
【００４５】
本実施形態においては、Ｎ＝１と設定しており、各コア１０の「優先度上位スレッドグループ」には１つのスレッドのみが属するようにしている。このため、「優先度上位スレッドグループ」に属するスレッドは、実行可能状態のときには常に実行状態に遷移するので、常に実行が保証されるようになっている。
【００４６】
（生成されるスレッドの動作コア１０の決定について）
次に、生成されるスレッドの動作コア１０がどのように決定されるかについて説明する。
【００４７】
グローバルスケジューラ２１は、以下のようなスケジューリングポリシーに基づいて生成されるスレッドの動作コア１０を決定する。すなわち、生成されたすべてのスレッドのうち高優先度の上位Ｍ個（Ｍはスレッドを割り当て可能なコア１０の数）のスレッドについて、各スレッドの動作コア１０が互いに異なるようにマップする。本実施形態においてはＭ＝６４であるので、高優先度の上位６４個のスレッドがそれぞれ別のコア１０で実行されるようにマップされる。言い換えると、それぞれのコア１０において最高優先度のスレッドとなるようにマップされる。
【００４８】
以下、図４のスレッド生成処理のフロー図を参照しつつ、具体的なグローバルスケジューラ２１の挙動について説明する。
【００４９】
図４に示すスレッド生成処理は、例えばアプリケーションスレッド４２がスレッド生成要求（カーネルＡＰＩ）を出すことで実行される。グローバルスケジューラ２１がスレッド生成要求を受け取ると、図４のステップＳ１０１に示すように、優先度上位スレッドグループに空きがあるかどうかがチェックされる。優先度上位スレッドグループに空きがある場合（本実施形態においては、スレッドを割り当て可能なコア１０の数（＝６４）よりも、生成されたスレッドの数が少ない場合）には、ステップＳ１０２に進む。一方、優先度上位スレッドグループに空きがない場合には、ステップＳ１０３に進む。
【００５０】
ステップＳ１０２に進んだ場合、優先度上位スレッドグループに空きがあるコア１０に対して、グローバルスケジューラ２１がスレッド生成の指示を出す。これにより、当該コア１０においてスレッドが作成され、作成されたスレッドは優先度上位スレッドグループに属することとなる。
【００５１】
一方、ステップＳ１０３に進んだ場合、生成したスレッドよりも優先度の低いスレッドが優先度上位スレッドグループに存在するかどうかがチェックされる。生成したスレッドよりも優先度の低いスレッドが優先度上位スレッドグループに存在する場合には、ステップＳ１０４に進む。一方、生成したスレッドよりも優先度の低いスレッドが優先度上位スレッドグループに存在しない場合には、ステップＳ１０５に進む。
【００５２】
ステップＳ１０４に進んだ場合、優先度上位スレッドグループに有するスレッドのうちで最も優先度の低いスレッド（仮にスレッドＸと呼ぶ）を有するコア１０に対して、グローバルスケジューラ２１がスレッド生成の指示を出す。これにより、当該コア１０においてスレッドが作成され、作成されたスレッドは優先度上位スレッドグループに属することとなると同時に、スレッドＸは優先度上位スレッドグループから優先度低位スレッドグループに移動することとなる。
【００５３】
ステップＳ１０５に進んだ場合、割り当てスレッド数が最も少ないコア１０に対して、グローバルスケジューラ２１がスレッド生成の指示を出す。これにより、当該コア１０においてスレッドが作成され、作成されたスレッドは優先度低位スレッドグループに属することとなる。
【００５４】
なお、上記したフローにおいては、スレッドの動作コア１０を必ずグローバルスケジューラ２１が決定することとしたが、スレッドの動作コア１０を指定してスレッドを作成できるようにしてもよい。例えば、カーネルＡＰＩの引数で動作コア１０を指定できるようにしてもよい。この場合、グローバルスケジューラ２１は、上記したステップＳ１０１〜１０５の処理を行うことなく、指定されたコア１０にスレッド生成の指示を直接出すこととなる。
【００５５】
（スレッドの削除について）
図５はスレッド削除処理のフロー図である。この図５を参照しつつ、スレッドの削除処理について説明する。
【００５６】
図５に示すスレッド削除処理は、例えばアプリケーションスレッド４２がスレッド削除要求（カーネルＡＰＩ）を出すことで実行される。グローバルスケジューラ２１がこのスレッド削除要求を受け取ると、図５のステップＳ２００に示すように、当該スレッドを削除する。そして、ステップＳ２０１に進む。
【００５７】
ステップＳ２０１では、削除したスレッドが優先度上位スレッドグループに属していたか否かがチェックされる。優先度上位スレッドグループに属していなかった場合、処理が終了する。優先度上位スレッドグループに属していた場合、ステップＳ２０２に進む。
【００５８】
ステップＳ２０２では、優先度上位スレッドグループに属していないスレッドのうち、最高優先度のスレッド（仮にスレッドＹと呼ぶ）を抽出し、このスレッドＹが削除したスレッドと同じコア１０に割り当てられているか否かがチェックされる。スレッドＹが削除したスレッドと同じコア１０に割り当てられている場合、処理が終了する（これにより、削除したスレッドの代わりにスレッドＹが優先度上位スレッドグループに属することとなる）。スレッドＹが削除したスレッドと同じコア１０に割り当てられていない場合、ステップＳ２０３に進む。
【００５９】
ステップＳ２０３では、スレッドＹを、削除したスレッドが属していたコア１０にマイグレーションする。これにより、スレッドＹは、削除したスレッドが属していたコア１０において、優先度上位スレッドグループに属することとなる。
【００６０】
以上説明したように、優先度上位スレッドグループに属するスレッドが削除された場合には、優先度の高いスレッドから順に優先度上位スレッドグループに格上げされるようになっている。
【００６１】
（スレッドマイグレーションについて）
本実施形態に係るグローバルスケジューラ２１は、スレッドマイグレーションを実行するにあたり、コア１０間でのスレッドのロードバランスを定期的に検査し、この検査結果を基にマイグレーション対象のスレッド及びコア１０を決定する。
【００６２】
ロードバランスは、図２に示すように、実行（ＲＵＮＮＩＮＧ）状態を含む実行可能（ＲＥＡＤＹ）状態のスレッド（負荷測定スレッド）の優先度を基に計算される。
【００６３】
具体的には、コア１０ごとに、図３（ａ）に示す計算式でワークロードが計算される。例えば図２に示す「Ｃｏｒｅ０」のワークロードは、（２５６−１）＾２＋（２５６−６）＾２＋（２５６−１０）＾２＝１８８，０４１である。
【００６４】
このように計算されたワークロードの値を図３（ｂ）に示す計算式に代入することで、ロードバランスのばらつきが計算される。この計算式で導き出される値Ｄが小さいほどロードバランスのばらつきが小さくスループットが向上すると判断するため、グローバルスケジューラ２１は、この値Ｄが小さくなるようにスレッドマイグレーションを実行する。
【００６５】
図６はスレッドマイグレーションを含めたロードバランシング処理のフロー図である。この図６を参照しつつ、グローバルスケジューラ２１によるロードバランシング処理について説明する。
【００６６】
図６に示すロードバランシング処理は、例えば５０ｍｓなどの一定周期で呼び出されるものである。本実施形態においては、グローバルスケジューラ２１がタイマ割り込みによって一定周期で処理を起動するようにしている。
【００６７】
処理が起動すると、まず図６のステップＳ３００に示すように、すべてのコア１０のワークロードが測定される。具体的には、グローバルスケジューラ２１が各コア１０にワークロード測定の指示を出し、指示を受け取った各コア１０は図３（ａ）に示す計算式でワークロードを計算してグローバルスケジューラ２１に返却する。そして、ステップＳ３０１に進む。
【００６８】
ステップＳ３０１では、各コア１０のワークロード測定の結果を基に、最も負荷の低いコア１０（ワークロードが最小のコア１０）を「マイグレーションターゲット」として選定する。マイグレーションターゲットとして最も負荷の低いコア１０を選定しているのは、スレッドマイグレーションの目的を「負荷の低いコア１０の有効活用」と定義したためである。このように目的を限定することで、過度に計算が複雑になって処理負担が増えることがないような仕組みになっている。そして、マイグレーションターゲットが選定されたら、ステップＳ３０２に進む。
【００６９】
ステップＳ３０２では、マイグレーションターゲット以外のすべてのコア１０について、当該コア１０に含まれるスレッド（優先度低位スレッドグループのうち最も優先度の高いスレッド）をマイグレーションターゲットにマイグレーションした場合のロードバランスのばらつきが計算される。
【００７０】
具体的には、マイグレーションターゲット以外のコア１０において優先度低位スレッドグループのうち最も優先度の高いスレッドをマイグレーションターゲットに移動したと仮定し、図３（ｂ）に示す計算式でロードバランスのばらつきを計算する。これをマイグレーションターゲット以外のすべてのコア１０について計算し、最もロードバランスのばらつきが小さくなる組み合わせを検査する。なお、マイグレーションするスレッドを優先度低位スレッドグループのうち最も優先度の高いスレッドとしたのは、マイグレーションの目的を「優先度が高いスレッドの実行機会の最大化」と定義したためである。このように目的を限定することで、ロードバランスのばらつきの計算回数が過度になって処理負担が増えることがないような仕組みになっている。そして、ロードバランスのばらつきが計算されたら、ステップＳ３０３に進む。
【００７１】
ステップＳ３０３では、ステップＳ３０２においてロードバランスのばらつきが最も小さくなると計算された組み合わせでスレッドマイグレーションを実行する。なお、スレッドマイグレーションを実行しない方がロードバランスのばらつきが小さい場合には、スレッドマイグレーションを実行せずに処理を終了する。
【００７２】
以上のような処理によれば、定期的にスレッドマイグレーションが実行されるため、スループットを向上することができる。なお、本実施形態においては１回のロードバランシング処理でスレッドマイグレーションされるスレッドの数を最大１つとしているため、過度にスレッドマイグレーションが発生しないように抑制されている。
【００７３】
また、スレッドマイグレーションを行うに当たり、単に優先度に基づいてスレッドマイグレーションを実行するのではなく、優先度ベースのロードバランスのばらつきに基づいてスレッドマイグレーションを実行することで、スループットを向上しつつもスレッドマイグレーションの回数を抑制できるように形成されている。
【００７４】
なお、上記した処理においては、グローバルスケジューラ２１から各コア１０にワークロード測定の指示が出すこととしたが、各コア１０のマイクロカーネル３０が所定時間毎にワークロードの測定結果をグローバルスケジューラ２１に送信するようにしてもよい。
【００７５】
（まとめ）
以上説明したように、本実施形態によれば、グローバルスケジューラ２１とローカルスケジューラ３１とによる２段階のスケジュールによりスレッドが実行される。グローバルスケジューラ２１は、生成したスレッドの動作コア１０を決定するとともに、所定のスケジューリングポリシーに基づいてスレッドマイグレーションの実行を決定する。このため、各コア１０にほぼ均等にスレッドを割り当てることができ、ハードウェアリソースを有効に活用してスループットを向上することができる。
【００７６】
また、各コア１０に割り当てられたスレッドのうち高優先度の上位１個のスレッドについてはスレッドマイグレーションの対象としないので、高優先度のスレッドはスレッドマイグレーションされずに割り当てコア１０での最優先実行が保証されている。このため、リアルタイム性が要求される高優先度のスレッドの実行時間を保証することができるので、リアルタイム性を確保することができる。
【００７７】
また、グローバルスケジューラ２１は生成されたすべてのスレッドのうち高優先度の上位６４個のスレッドについて、各スレッドの動作コア１０が互いに異なるようにマップする。すなわち、スレッドを割り当て可能なコア１０数と同数のスレッドについて、優先度の高い順に実行を保証することができるので、これら高優先度のスレッドの実行時間を保証することができ、リアルタイム性を確保することができる。
【００７８】
また、グローバルスケジューラ２１は、複数のコア１０間でのスレッドのロードバランスを定期的に検査した結果を基にマイグレーション対象のスレッド及びコア１０を決定するので、ロードバランスを最適な状態に保つことができ、スループットを向上することができる。
【００７９】
また、常にスレッドマイグレーションを実行するのではなく、定期的に検査した結果を基にスレッドマイグレーションを実行するので頻繁にスレッドマイグレーションが発生せず、かつ、ロードバランスが変化しない状況においてはスレッドマイグレーションが発生しないので、スレッドマイグレーションのコストを抑制することができる。特に、ボトルネックやキャッシュコヒーレンシの問題を回避するために共有メモリを使用しない（コア１０ごとのローカルメモリを使用する）場合には、スレッドマイグレーション時にローカルメモリのコピーが必要となるためスレッドマイグレーションのコストが問題となる。しかしながら、本実施形態の制御によれば、スレッドマイグレーションの回数を最低限に抑制することでスレッドマイグレーションに伴うコストを抑制することができるため、言い換えると、スループットやリアルタイム性を確保しつつもボトルネックやキャッシュコヒーレンシの問題を回避することができる。
【００８０】
なお、上記した実施形態においては、スレッドを割り当て可能なコア１０の数Ｍを、コア１０の総数６４と同数としたが、本発明の実施形態としてはこれに限らない。プロセッサに実装されたコア１０のうちの任意の数のコア１０のみをスレッドを割り当て可能なコア１０として扱ってもよい。例えば、ＯＳサーバ実行コア１１を予め決定してグローバルスケジューラ２１の管理外とし、これらのコア１０をスレッド割り当て可能なコア１０から除外してもよい。具体的には、コア１０が６４個ある場合に、このうちの８個をＯＳサーバ実行コア１１とし、残りの５６個をアプリケーション実行コア１２とし、この５６個のアプリケーション実行コア１２をスレッド割り当て可能なコア１０としてグローバルスケジューラ２１によるスレッドの割り当てやスレッドマイグレーションの対象としてもよい。
【００８１】
また、上記した実施形態においてはコア１０が６４個の場合について説明したが、本発明の実施形態としてはこれに限らず、任意の数のコア１０に対応できることは言うまでもない。
【００８２】
また、上記した実施形態においては図３に示す計算式でワークロード及びロードバランスを計算することとしたが、本発明の実施形態としてはこれに限らず、他の計算式を使用してもよい。例えば、乗数を変更して優先度の重みづけを変更してもよい。
【００８３】
また、上記した実施形態においては、各コア１０の「優先度上位スレッドグループ」に属するスレッドの数Ｎを「１」に設定したが、本発明の実施形態としてはこれに限らない。Ｎの値は１以上の予め定められた自然数であればよく、例えば２や３としてもよい。ただし、あまり大きな数値とするとスループットが低下するため、適切な値に設定する必要がある。なお、コア１０の数が多い場合には、Ｎが小さい値であっても十分な数の高優先度スレッドの実行を保証できるので、このような場合には小さい値（例えば最小値である「１」）に設定することで、リアルタイム性を確保しつつスループットを最大とすることができる。
【００８４】
なお、Ｎ＞１の場合、グローバルスケジューラ２１は、高優先度スレッドの動作コア１０を以下のようにマップすることが望ましい。まず、既に説明したように、生成されたすべてのスレッドのうち高優先度の上位Ｍ個のスレッドについて、各スレッドの動作コア１０が互いに異なるようにマップする。そして、次の高優先度の上位Ｍ個のスレッド（すなわち、優先度が（Ｍ＋１）番目〜（Ｍ×２）番目のスレッド）について、各スレッドの動作コア１０が互いに異なるようにマップする。このように、高優先度のスレッドをＭ個ずつのブロックに分割し、各ブロックに含まれるスレッドを互いに異なるコア１０にマップする作業をＮ回繰り返す。このような処理によれば、Ｎ＞１の場合においても優先度が高い順にスレッドの実行を保証することができる。
【符号の説明】
【００８５】
１０  コア
１１  ＯＳサーバ実行コア
１２  アプリケーション実行コア
２０  ＯＳサーバ
２１  グローバルスケジューラ
２５  アプリケーション
３０  マイクロカーネル
３１  ローカルスケジューラ
３２  メッセージマネージャ
３３  メモリマネージャ
３４  インタラプトマネージャ
４１  インターフェースライブラリ
４２  アプリケーションスレッド
【図１】
2014096024.tif 000003
【図２】
2014096024.tif 000004
【図３】
2014096024.tif 000005
【図４】
2014096024.tif 000006
【図５】
2014096024.tif 000007
【図６】
2014096024.tif 000008