(57)【特許請求の範囲】
【請求項１】
複数のコアと、
前記複数のコアからアクセスされるメモリと
を有するマルチコアプロセッサシステムであって、前記複数のコアのうち１つのコアは、
前記複数のコアのうち実行優先度が最も高い第１のコアを検出し、前記複数のコアのそれぞれのサイクル数および発行命令数に基づき算出した発行命令効率に基づいて、前記メモリに対し前記第１のコアとアクセス競合する第２のコアを検出し、前記第１のコアおよび前記第２のコアを除く第３のコアに、前記メモリにアクセスしないスレッドを前記アクセス競合が発生した期間のうち所定期間実行させる
マルチコアプロセッサシステム。
【請求項２】
複数のコアと、前記複数のコアからアクセスされるメモリを有するマルチコアプロセッサシステムの制御方法であって、前記複数のコアのうち１つのコアが、
前記複数のコアのうち実行優先度が最も高い第１のコアを検出する処理と、
前記複数のコアのそれぞれのサイクル数および発行命令数に基づき算出した発行命令効率に基づいて、前記メモリに対し前記第１のコアとアクセス競合する第２のコアを検出する処理と、
前記第１のコアおよび前記第２のコアを除く第３のコアに対し、前記メモリにアクセスしないスレッドを前記アクセス競合が発生した期間のうち所定期間実行させる処理
を実行するマルチコアプロセッサシステムの制御方法。
【請求項３】
複数のコアと、前記複数のコアからアクセスされるメモリを有するマルチコアプロセッサシステムの制御プログラムであって、前記複数のコアのうち１つのコアに、
前記複数のコアのうち実行優先度が最も高い第１のコアを検出する処理と、
前記複数のコアのそれぞれのサイクル数および発行命令数に基づき算出した発行命令効率に基づいて、前記メモリに対し前記第１のコアとアクセス競合する第２のコアを検出する処理と、
前記第１のコアおよび前記第２のコアを除く第３のコアに対し、前記メモリにアクセスしないスレッドを前記アクセス競合が発生した期間のうち所定期間実行させる処理
を実行させるマルチコアプロセッサシステムの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スレッドを制御するマルチコアプロセッサシステム、制御方法、および制御プログラムに関する。
【背景技術】
【０００２】
従来から、１つのＣＰＵに対して、複数のプログラムを動作させるマルチプログラミング技術が存在する。具体的には、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の処理時間を分割する機能を有し、分割された時間にプロセスやスレッドを割り当てることにより、ＣＰＵが同時に複数のプロセスやスレッドを動作する。ここで、プロセスはプログラムの実行単位である。
【０００３】
また、一定時間内に処理を終える必要があるプロセスに対して、ＯＳがＣＰＵに対するスレッドの割り当て時間を他のプロセスより多くすることで、優先的に処理を行い、一定時間内に処理を行う、という技術も開示されている。また、プロセスを効果的に切り替える技術として、ＯＳがプロセスごとに実行命令数を取得し、実行命令数の多いプロセスを先に実行する技術が開示されている（たとえば、下記特許文献１を参照。）。前述の技術では、キャッシュメモリに一番多く保持されているプロセスが実行されることにより、全体のスループットを向上させることができる。
【０００４】
また、コンピュータシステムに複数のＣＰＵを搭載するマルチコアプロセッサシステムの技術も開示されている。これにより、前述のマルチプログラミング技術において、ＯＳは複数のプログラムを複数のプロセスに対して割り当てることができる。また、マルチコアプロセッサシステムの構成として、各ＣＰＵが専用のメモリを保持し、それ以外のデータが必要の場合には、共有メモリにアクセスを行うことを特徴とする、分散システムの構造を持ったマルチコアプロセッサシステムが開示されている。また、各ＣＰＵがキャッシュメモリのみを保持し、必要なデータは共有メモリに格納することを特徴とする、集中共用システムの構造を持ったマルチコアプロセッサシステムも開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平９−３３０２３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、マルチコアプロセッサシステムでは、複数のＣＰＵが共有メモリに同時にアクセスすることによってコンテンションが発生する。コンテンションが発生すると、ＣＰＵは、通常の処理時間以内に処理を終了できなくなり、一定時間内に処理を終わらせる必要があるリアルタイム処理を行えないという問題があった。リアルタイム処理とは、設計上あらかじめ決められた時刻に処理を終了しなければならない処理、および割り込み動作における、割り込みイベント発生から割り込み処理本体の開始時間までの許容されるインターバル時間が定められた処理をさす。
【０００７】
また、コンテンションはハードウェアを原因として引き起こされる。したがって、上述した従来技術において、マルチコアプロセッサシステムに特許文献１を適用しても、ＣＰＵはキャッシュメモリに一番多く保持されているプロセスによってコンテンションを起こす可能性もあり、コンテンションの解決に至らないという問題があった。
【０００８】
また、前述した分散システムを適用した場合、コンテンションが発生する頻度は少ないが、ＣＰＵごとにメモリを配置する必要があるため、コストと消費電力が大きくなるという問題があった。したがって、コストと消費電力に制限のある組み込み環境では、集中共用システムを適用したマルチコアプロセッサシステムがよく適用される。しかし、集中共用システムを適用したマルチコアプロセッサシステムは、複数のＣＰＵが共有メモリに同時にアクセスする機会が多く、コンテンションが発生する頻度が多いという問題があった。
【０００９】
本発明は、上述した従来技術による問題点を解消するため、マルチコアプロセッサシステムにてリアルタイム処理を保証できるマルチコアプロセッサシステム、制御方法、および制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、複数のコアと、複数のコアからアクセスされるメモリとを有するマルチコアプロセッサシステムであって、複数のコアのうち１つのコアは、複数のコアのうち実行優先度が最も高い第１のコアを検出し、複数のコアのそれぞれのサイクル数および発行命令数に基づき算出した発行命令効率に基づいて、メモリに対し第１のコアとアクセス競合する第２のコアを検出し、第１のコアおよび第２のコアを除く第３のコアに、メモリにアクセスしないスレッドをアクセス競合が発生した期間のうち所定期間実行させることを要件とする。
【発明の効果】
【００１１】
本マルチコアプロセッサシステム、制御方法、および制御プログラムによれば、リアルタイム処理を行っており、コンテンション発生中のコアのリアルタイム処理を保証することができるという効果を奏する。
【図面の簡単な説明】
【００１２】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。
【図２】マルチコアプロセッサシステム１００の各ＣＰＵのハードウェアの一部の構成とソフトウェア構成を示すブロック図である。
【図３】マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。
【図４】コンテンション状態を示す説明図である。
【図５】コンテンションが解消された状態を示す説明図である。
【図６】本実施の形態を適用したマルチコアプロセッサシステム１００の性能比を示す説明図である。
【図７】優先度テーブル３０３−１の記憶内容の一例を示す説明図である。
【図８】ハイパーバイザによるメッセージ送信処理を示すフローチャートである。
【図９】ハイパーバイザによるメッセージ受信処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、制御方法、および制御プログラムの好適な実施の形態を詳細に説明する。
【００１４】
（マルチコアプロセッサシステムのハードウェア構成）
図１は、実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるＣＰＵが並列されているプロセッサ群を例にあげて説明する。
【００１５】
マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、フラッシュＲＯＭ１０４と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０５と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０６と、を備えている。また、各構成部はバス１０８によってそれぞれ接続されている。本実施の形態にかかるハードウェアの構成は、集中共用システムを適用した構成となっている。
【００１６】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステムの全体の制御を司る。また、ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。詳細は、図２にて後述する。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。
【００１７】
フラッシュＲＯＭ１０４は、書き換えが可能であり、電源を切ってもデータが消えないという特徴を持つ不揮発性の半導体メモリである。フラッシュＲＯＭ１０４は、ソフトウェアプログラムや、データを記憶している。フラッシュＲＯＭ１０４の代わりに、磁気ディスクであるＨＤＤ（ハードディスクドライブ）にて記憶してもよいが、フラッシュＲＯＭ１０４を使用することにより、機械的に動作するＨＤＤに比べて振動に強くすることができる。たとえば、マルチコアプロセッサシステム１００で構成する装置に対し、強い振動があった場合でも、フラッシュＲＯＭ１０４であればデータが消える可能性を低くすることができる。
【００１８】
ディスプレイ１０５は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ１０５は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。また、ディスプレイ１０５は、タッチパネル式で入力する形態でもよい。
【００１９】
Ｉ／Ｆ１０６は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１０７に接続され、このネットワーク１０７を介して他の装置に接続される。そして、Ｉ／Ｆ１０６は、ネットワーク１０７と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０６には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２０】
図２は、マルチコアプロセッサシステム１００の各ＣＰＵのハードウェアの一部の構成とソフトウェア構成を示すブロック図である。マルチコアプロセッサシステム１００のハードウェア構成は、ＣＰＵｓ１０１と、共有メモリ２０３で構成される。ＣＰＵｓ１０１は、複数のＣＰＵとしてＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎで構成される。
【００２１】
ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、それぞれ、キャッシュメモリ２０２−１、キャッシュメモリ２０２−２、・・・、キャッシュメモリ２０２−ｎを保持している。各ＣＰＵと共有メモリ２０３は、バス１０８によってそれぞれ接続されている。以下の記述では、ＣＰＵ２０１−１、ＣＰＵ２０１−２について記述する。
【００２２】
また、マルチコアプロセッサシステム１００のソフトウェア構成として、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１、ＯＳ２０５−１を実行する。ＣＰＵ２０１−１は、ハイパーバイザ２０４−１の制御により、監視ライブラリ２０６−１を実行する。同様に、ＣＰＵ２０１−１は、ＯＳ２０５−１の制御により、リアルタイムソフトウェア２０７を実行する。同様にＣＰＵ２０１−２も、ハイパーバイザ２０４−２、ＯＳ２０５−２を実行する。ＣＰＵ２０１−２は、ハイパーバイザ２０４−２の制御により、監視ライブラリ２０６−２を実行する。同様に、ＣＰＵ２０１−２は、ＯＳ２０５−２の制御により、ソフトウェア２０８を実行する。
【００２３】
ＣＰＵ２０１−１がリアルタイムソフトウェア２０７を実行する際には、データへのアクセス先が２通りあり、アクセス経路２０９とアクセス経路２１０である。同様に、ＣＰＵ２０１−２がソフトウェア２０８を実行する際にも、データへのアクセス先が２通りあり、アクセス経路２１１とアクセス経路２１２である。また、ハイパーバイザ２０４−１とハイパーバイザ２０４−２と、他のＣＰＵ上で動作しているハイパーバイザは、ハイパーバイザ間通信２１３を行う。
【００２４】
ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、マルチコアプロセッサシステム１００の制御を司る。ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、対称的、均一的に処理が割り付けられたＳＭＰ（Ｓｙｍｍｅｔｒｉｃ
Ｍｕｌｔｉ−ｐｒｏｃｅｓｓｉｎｇ）でもよい。また、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、処理内容によって分担するＣＰＵを決めておくＡＳＭＰ（Ａｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｉｎｇ）でもよい。ＡＳＭＰの例として、マルチコアプロセッサシステム１００は、ＣＰＵ２０１−１にて優先して処理すべきであるリアルタイム処理を割り当ててもよい。
【００２５】
共有メモリ２０３は、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎからアクセス可能な記憶領域である。記憶領域とは、具体的には、たとえば、ＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４である。また、たとえば、ＣＰＵ２０１−１が、ディスプレイ１０５に画像データの表示を要求する場合、ＲＡＭ１０３に含まれるＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）にアクセスし、画像データをＶＲＡＭに書き込むことになる。したがって、ＣＰＵ２０１−１が、ディスプレイ１０５へアクセスする場合も、共有メモリ２０３にアクセスすることに含める。
【００２６】
また、たとえば、ＣＰＵ２０１−１が、Ｉ／Ｆ１０６にアクセスする場合も同様である。たとえば、Ｉ／Ｆ１０６の具体例がＬＡＮアダプタとして、ＬＡＮアダプタにあるバッファにアクセスする形式か、ＲＡＭ１０３にアクセスし、その後ＬＡＮアダプタに転送する形式かのどちらかになる。どちらの場合であっても、ＣＰＵ２０１−１、ＣＰＵ２０１−２からみると共有メモリにアクセスしていることとなるため、ＣＰＵ２０１−１、ＣＰＵ２０１−２が、Ｉ／Ｆ１０６へアクセスする場合も、共有メモリ２０３にアクセスすることに含める。同様に、ＣＰＵ２０１−１が、Ｉ／Ｆ１０６にアクセスする場合も、Ｉ／Ｆ１０６を制御するデバイスドライバが用意する共有の記憶領域にアクセスすることになるため、結果、共有メモリ２０３にアクセスすることになる。
【００２７】
ハイパーバイザ２０４−１、ハイパーバイザ２０４−２は、それぞれＣＰＵ２０１−１、ＣＰＵ２０１−２にて動作するプログラムである。ハイパーバイザの機能は、ＯＳとＣＰＵの間にて位置し、ＯＳの監視を行い、ＯＳがハングアップした際にリセットをする他、ＯＳが何もスレッドを実行していない場合に、省電力設定にする。また、ＣＰＵ２０１−１、ＣＰＵ２０１−２は、それぞれのハイパーバイザによって、本実施の形態での特徴である、コンテンションの監視をする監視ライブラリ２０６−１、監視ライブラリ２０６−２を実行する。
【００２８】
ＯＳ２０５−１、ＯＳ２０５−２は、それぞれ、ＣＰＵ２０１−１、ＣＰＵ２０１−２にて動作するプログラムであり、ハイパーバイザ２０４−１、ハイパーバイザ２０４−２上で動作する。たとえば、ＯＳ２０５−１は、リアルタイムソフトウェア２０７をＣＰＵ２０１−１に割り当てて実行させるスレッドのスケジューラを持つ。
【００２９】
監視ライブラリ２０６−１、監視ライブラリ２０６−２は、それぞれ、ハイパーバイザ２０４−１、ハイパーバイザ２０４−２上で動作するプログラムであり、共有メモリ２０３に対してアクセス競合によるコンテンションが発生していないかを監視する。監視の結果、コンテンションが発生している場合、監視ライブラリは、ハイパーバイザ間で情報を送信し、コンテンションを起こしたことを、他のハイパーバイザに送信する。
【００３０】
リアルタイムソフトウェア２０７は、ＯＳ２０５−１によってＣＰＵ２０１−１に割り当てられたプログラムである。リアルタイムソフトウェアの具体例としては、通信パケット処理がある。通信パケット処理は、プロトコルの決められた時間以内に処理を行う必要があり、リアルタイム処理を要求される。ソフトウェア２０８は、ＯＳ２０５−２によってＣＰＵ２０１−２に割り当てられたプログラムである。ソフトウェア２０８は、リアルタイム処理を要求されていない。前述のように、本実施の形態では、ＣＰＵ２０１−１にてリアルタイム処理の保証を必要とするソフトウェアを実行している状態を想定する。
【００３１】
アクセス経路２０９は、ＣＰＵ２０１−１がキャッシュメモリ２０２−１にアクセスする経路である。アクセス経路２１０は、ＣＰＵ２０１−１が共有メモリ２０３にアクセスする経路である。アクセス経路２０９とアクセス経路２１０の違いとして、リアルタイムソフトウェア２０７がアクセスしたいデータがキャッシュメモリ２０２−１にあればアクセス経路２０９、なければアクセス経路２１０となる。アクセス経路２１１、アクセス経路２１２も同様で、アクセス経路２１１は、ＣＰＵ２０１−２がキャッシュメモリ２０２−２にアクセスする経路である。アクセス経路２１２は、ＣＰＵ２０１−２が共有メモリ２０３にアクセスする経路である。
【００３２】
ハイパーバイザ間通信２１３は、ハイパーバイザ間でメッセージの送受信をする通信である。具体的には、たとえば、ＣＰＵ２０１−１にて、リアルタイムソフトウェア２０７を実行中にコンテンション状態になった場合に、ハイパーバイザ２０４−１からハイパーバイザ２０４−２を含むすべてのハイパーバイザにメッセージをブロードキャスト送信する。
【００３３】
（マルチコアプロセッサシステムの機能的構成）
次に、マルチコアプロセッサシステム１００の機能的構成について説明する。図３は、マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。マルチコアプロセッサシステム１００は、優先度検出部３０５と、発行命令効率算出部３０６と、コンテンション検出部３０７と、特定部３０８と、制御部３１１と、を含む構成である。この制御部となる機能（優先度検出部３０５〜制御部３１１）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行することにより、その機能を実現する。
【００３４】
また、ＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎは、ハイパーバイザとＯＳ／ソフトウェアを実行する。さらに、一点破線で分割された領域のうち、領域３０１−１に図示している優先度検出部３０５〜ハイパーバイザ間メッセージ送信部３０９は、ＣＰＵ２０１−１がハイパーバイザ２０４−１の機能の一部として実行することにより実現する。同様に、領域３０１−２内に図示しているハイパーバイザ間メッセージ受信部３１０、制御部３１１は、ＣＰＵ２０１−２が、ハイパーバイザ２０４−２の機能の一部として実行することにより実現する。
【００３５】
また、図示していないが、ＣＰＵ２０１−１以外のコアが実行しているハイパーバイザにも、優先度検出部３０５〜ハイパーバイザ間メッセージ送信部３０９の機能を有している。同様に、ＣＰＵ２０１−２以外のコアが実行しているハイパーバイザにも、ハイパーバイザ間メッセージ受信部３１０、制御部３１１の機能を有している。また、優先度検出部３０５〜ハイパーバイザ間メッセージ送信部３０９は、監視ライブラリ２０６−１に相当する。同様に、ハイパーバイザ間メッセージ受信部３１０、制御部３１１は、監視ライブラリ２０６−２に相当する。
【００３６】
また、領域３０２−１に図示しているＯＳスケジューラ監視部３０４−１、リアルタイムソフトウェア２０７、ソフトウェア３１２は、ＣＰＵ２０１−１がＯＳ２０５−１の機能の一部として実行することにより実現する。優先度テーブル３０３−１は、ハイパーバイザ２０４−１またはＯＳ２０５−１からアクセスできるテーブルである。
【００３７】
また、領域３０２−２に図示しているＯＳスケジューラ監視部３０４−２、ソフトウェア２０８、ソフトウェア３１３、ｎｉｃｅ値設定部３１４、ダミースレッド起動部３１５は、ＣＰＵ２０１−２がＯＳ２０５−２の機能の一部として実行することにより実現する。優先度テーブル３０３−２は、ハイパーバイザ２０４−２またはＯＳ２０５−２からアクセスできるテーブルである。
【００３８】
優先度テーブル３０３−１、優先度テーブル３０３−２は、マルチコアプロセッサシステム１００で実行される処理と処理の優先度を関連付けて管理するテーブルである。優先度テーブル３０３−１の内容の詳細は、図７にて後述する。
【００３９】
ＯＳスケジューラ監視部３０４−１、ＯＳスケジューラ監視部３０４−２は、ＣＰＵ２０１−１、ＣＰＵ２０１−２に割り当てるソフトウェアを監視する機能を有する。具体的には、たとえば、リアルタイムソフトウェア２０７がＣＰＵ２０１−１に割り当てられており、リアルタイムソフトウェア２０７がＲＡＭ１０３やフラッシュＲＯＭ１０４上にある共有資源にアクセス要求する場合を想定する。
【００４０】
この時、既に他のソフトウェアが共有資源を使用すると宣言中であった場合に、ＯＳスケジューラ監視部３０４−１は、リアルタイムソフトウェア２０７の実行状態を待ち状態にする。続けて、ＯＳスケジューラ監視部３０４−１は、実行可能状態となっていた別のソフトウェア、たとえばソフトウェア３１２を実行状態にして、ＣＰＵ２０１−１に割り当てる。
【００４１】
また、別の具体例として、たとえば、リアルタイムソフトウェア２０７が所定期間以上ＣＰＵ２０１−１に割り当てられていた場合にも、ＯＳスケジューラ監視部３０４−１は、別のソフトウェアをＣＰＵ２０１−１に割り当てる。また、前述のように、ＣＰＵに割り当てられたソフトウェアを切り替えることを、ディスパッチという。
【００４２】
また、ＯＳスケジューラ監視部３０４−１は、新しくソフトウェアを起動する際に、ソフトウェアの実行単位となるスレッドとして起動する。各スレッドは、スタック領域、プログラムカウンタを含むレジスタ情報等を持つ。ＯＳスケジューラ監視部３０４−１は、ディスパッチを行うたびに、現在実行中のレジスタ情報等を共有メモリ２０３に退避し、次のソフトウェアのレジスタ情報等を共有メモリ２０３から取得し、ＣＰＵのレジスタ情報に設定する。
【００４３】
また、マルチコアプロセッサシステム１００は、スレッドの集合から、１つのプロセスを構成してもよい。スレッド間ではメモリ空間が共通であるが、プロセス間ではメモリ空間が独立しており、お互いのメモリ空間に直接アクセスできない。本実施の形態では、スレッドを用いて説明しているが、プロセスに置き換えてもよい。
【００４４】
別のソフトウェアをＣＰＵ２０１−１に割り当てる際に、複数の割り当て候補となるソフトウェアが存在する場合、ＯＳスケジューラ監視部３０４−１は、優先度テーブル３０３−１に基づいて割り当てを行ってもよい。また、ＯＳスケジューラ監視部３０４−１は、それぞれのソフトウェアの割り当て時刻に基づいて、割り当て時刻が一番古いソフトウェアを割り当ててもよい。
【００４５】
優先度検出部３０５は、複数のコアのうち、実行優先度が最も高い第１のコアを検出する機能を有する。ここでのコアは、ＣＰＵｓ１０１を構成しているＣＰＵ２０１−１、ＣＰＵ２０１−２、・・・、ＣＰＵ２０１−ｎに相当する。また、マルチコアプロセッサシステム１００がＡＳＭＰであり、リアルタイム処理が割り当てられたＣＰＵが存在するならば、ＣＰＵによって第１のコアを検出してもよい。
【００４６】
具体的には、たとえば、ＣＰＵ２０１−１は、現在割り当てられているソフトウェアの優先度を、優先度テーブル３０３−１から取得し、優先度が“リアルタイム”の場合に、実行優先度が最も高い第１のコアとする。なお、検出した第１のコアの情報は、キャッシュメモリ２０２−１、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００４７】
発行命令効率算出部３０６は、コアごとに、コアが命令を発行した発行命令数とコアのサイクル数に基づいて、発行命令効率を算出する機能を有する。発行命令数は、所定時間内にＣＰＵが命令を行った数である。発行命令数はＣＰＵの特殊なレジスタである発行命令カウンタＩに格納されており、ハイパーバイザは、スーパバイザモードに移行することにより、発行命令カウンタＩの値を取得する。サイクル数は、所定時間内にＣＰＵが入力されたクロックの数である。サイクル数はＣＰＵのレジスタであるクロックカウンタＣに格納されている。発行命令効率は、１命令にかかったクロック数であり、Ｃ／Ｉにて算出される。発行命令効率算出部３０６は、発行命令効率をＩ／Ｃとして算出し、後述する閾値τも逆数にして比較してもよい。
【００４８】
具体的には、たとえば、ハイパーバイザ２０４−１が起動するたびに、ＣＰＵ２０１−１は、Ｃ／Ｉを算出する。ハイパーバイザは、数十マイクロ秒〜数ミリ秒に１回の間隔で実行されるため、その時間での発行命令カウンタＩとクロックカウンタＣを取得し、Ｃ／Ｉを算出する。なお、算出された発行命令効率は、キャッシュメモリ２０２−１、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００４９】
コンテンション検出部３０７は、発行命令効率算出部３０６によって算出された発行命令効率と所定の閾値とに基づいて、アクセス競合を検出する機能を有する。所定の閾値とは、仕様から設定できる値であり、τで表す。閾値τの具体的な設定方法は、図４にて後述する。具体的には、たとえば、発行命令数が閾値τより大きい場合、ＣＰＵ２０１−１は、共有メモリ２０３に対するアクセス競合によるコンテンションが発生していることを検出する。なお、検出された結果は、キャッシュメモリ２０２−１、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００５０】
特定部３０８は、複数のコアのうち、優先度検出部３０５によって検出された第１のコアのうち、共有メモリ２０３に対してアクセス競合を発生させた第２のコアを特定する機能を有する。また、特定部３０８は、共有メモリ２０３に対してアクセス競合を発生させており第２のコアと競合する第３のコアを特定してもよい。アクセス競合によるコンテンション発生を検出する際にＣＰＵ２０１−１は、コンテンション検出部３０７によって検出してもよい。
【００５１】
具体的には、たとえば、ＣＰＵ２０１−１は、優先度検出部３０５によって“リアルタイム”であるＣＰＵから、コンテンションを発生しているＣＰＵを検出して、第２のコアとして特定する。また、ＣＰＵ２０１−１は、複数のＣＰＵからコンテンションを発生しているＣＰＵを検出して、第３のコアとして特定してもよい。なお、特定された第２のコア、または第３のコアの情報は、キャッシュメモリ２０２−１、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶される。
【００５２】
ハイパーバイザ間メッセージ送信部３０９は、他のハイパーバイザにメッセージをブロードキャスト送信する機能を有する。具体的には、たとえば、リアルタイム処理を行っており、コンテンション発生を検出したハイパーバイザ２０４−１は、バス１０８を通じてハイパーバイザ２０４−２や、その他のハイパーバイザに対して、メッセージをブロードキャスト送信する。なお、送信したメッセージの内容は、キャッシュメモリ２０２−１、ＣＰＵ２０１−１の汎用レジスタなどの記憶領域に記憶されてもよい。
【００５３】
ハイパーバイザ間メッセージ受信部３１０は、他のハイパーバイザが送信したメッセージを受信する機能を有する。具体的には、たとえば、ハイパーバイザ２０４−２は、リアルタイム処理を行っておりコンテンション発生を検出したハイパーバイザ２０４−１からメッセージを受信する。なお、受信したメッセージの内容は、キャッシュメモリ２０２−２、ＣＰＵ２０１−２の汎用レジスタなどの記憶領域に記憶される。
【００５４】
制御部３１１は、複数のコアのうち、第１のコアと特定部３０８によって特定された第２のコアを除いた第３のコアに対し、共有メモリ２０３にアクセスしないスレッドを実行するように制御する機能を有する。また、制御部３１１は、第２のコアを除いた第３のコアに対し、共有メモリ２０３にアクセスしないスレッドを実行するように制御してもよい。また、特定部３０８によって第３のコアが特定されている場合、制御部３１１は、特定された第３のコアに対し、共有メモリ２０３にアクセスしないスレッドを実行するように制御してもよい。
【００５５】
また、共有メモリ２０３にアクセスしないスレッドを実行する期間は、アクセス競合が発生した期間のうち、所定の期間である。所定の期間とは、ＯＳ２０５−２が保持しているタイムスライスの値となる。また、所定の期間は、アクセス競合が発生した期間のうち、第３のコアに割り当てられていたスレッドと、共有メモリ２０３にアクセスしないスレッドとで、時分割した期間としてもよい。
【００５６】
具体的には、たとえば、特定された第２のコアは、ハイパーバイザ間通信を行うため、メッセージを受信したＣＰＵが第３のコアとなり、共有メモリ２０３にアクセスしないスレッドを実行するようにＯＳスケジューラ監視部３０４−２を制御する。制御内容としては、制御部３１１は、ｎｉｃｅ値設定部３１４か、または、ダミースレッド起動部３１５を実行するようにＯＳスケジューラ監視部３０４−２を制御する。
【００５７】
ｎｉｃｅ値設定部３１４は、現在実行されているソフトウェアのｎｉｃｅ値を設定する機能を有する。ｎｉｃｅ値とは、ＰＯＳＩＸ（Ｐｏｒｔａｂｌｅ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ  ｆｏｒ  ＵＮＩＸ（登録商標））にて定義されているｎｉｃｅコマンドで設定する値である。ｎｉｃｅコマンドによって設定値を変更することにより、ＯＳ２０５−２はソフトウェアの実行優先度を制御する。
【００５８】
具体的には、たとえば、リアルタイム処理を要求されないソフトウェアに対して、ｎｉｃｅ値を上昇させると、優先度が低くなる。ｎｉｃｅコマンドの実装の一例としては、ＯＳ２０５−２は、ソフトウェアの割り当て終了時刻にｎｉｃｅ値を加算した値を算出する。次に、ＯＳスケジューラ監視部３０４−２は、加算した値に基づいて、一番小さい値を持つソフトウェアをディスパッチ対象に決める、という方法をとってもよい。
【００５９】
結果、対象のソフトウェアのｎｉｃｅ値が大きいほど対象のソフトウェアの優先度が低くなる。したがって、もしＯＳ２０５−２がＰＯＳＩＸ仕様に準拠していなく、ｎｉｃｅコマンドが存在しない場合でも、前述の処理を加えることでｎｉｃｅ値設定部３１４を実現してもよい。なお、設定された値は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００６０】
ダミースレッド起動部３１５は、共有メモリ２０３にアクセスしないスレッドを生成する機能を有する。具体的には、たとえば、ＣＰＵ２０１−２は、ＣＰＵに対して何も動作しないコードであるｎｏｐを一定時間行うスレッドを起動する。また、ｎｉｃｅ値設定部３１４とダミースレッド起動部３１５は、ＯＳスケジューラ監視部３０４−２によってアクセス競合によるコンテンション発生の期間のうち少なくとも一部の期間中に実行する。
【００６１】
図４は、コンテンション状態を示す説明図である。初めに、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１とリアルタイムソフトウェア２０７を実行しており、ＣＰＵ２０１−２は、ハイパーバイザ２０４−２とソフトウェア２０８を実行している。それぞれのＣＰＵは、実行中のソフトウェアによってキャッシュメモリにアクセスするか、または、共有メモリ２０３にアクセスする。
【００６２】
ハイパーバイザは周期的に起動しており、起動間隔は、数十マイクロ秒から、数ミリ秒である。図４では、どちらのメモリにアクセスしたかという動作に従って、示した時間を、時間４０１、時間４０２、時間４０３に分割して示している。時間４０１と時間４０３にて、ＣＰＵ２０１−１とＣＰＵ２０１−２は、リアルタイムソフトウェア２０７と、ソフトウェア２０８によって同時に共有メモリ２０３にアクセスしていないため、コンテンション状態とはならない。
【００６３】
しかし、時間４０２にて、ＣＰＵ２０１−１とＣＰＵ２０１−２は、同時に共有メモリ２０３にアクセスしているため、共有メモリ２０３に対してアクセス競合によるコンテンション状態となっている。コンテンション状態になると、ＣＰＵ２０１−１は、メモリアクセスにかかる時間が数百サイクルとなり、リアルタイムソフトウェア２０７の処理遅延を発生させてしまう。結果、ＣＰＵ２０１−１は、リアルタイムソフトウェア２０７に求められている時刻までに処理を終了することができない可能性があり、リアルタイム処理の保証を行えない状態となる。
【００６４】
次に、リアルタイム処理の保証について説明する。リアルタイム処理は、決められた時間以内に応答を返す必要があり、その時間を、Δ［秒］とする。ここで、リアルタイム処理を行うＣＰＵ２０１−１のクロックサイクルをｃｌｋ［１／秒］とする。したがって、時間Δを消費する間に許されるＣＰＵ２０１−１のクロックのカウント数はΔ・ｃｌｋ［個］となる。もしコンテンション状態になっており、ＣＰＵ２０１−１がΔ・ｃｌｋ［個］のカウント数で１命令を実行できない場合に、リアルタイム処理の保証を行えないことになる。
【００６５】
１命令あたりのクロック数は、一定時間内での発行命令カウンタＩと、クロックカウンタＣに基づいて、Ｃ／Ｉを算出することで求められる。ここで、閾値τを、τ＝Δ・ｃｌｋで示す。Ｃ／Ｉが閾値τ以下の場合、ＣＰＵ２０１−１は、リアルタイム処理の保証を行える状態であり、Ｃ／Ｉが閾値τより大きい場合、ＣＰＵ２０１−１は、リアルタイム処理の保証を行えない状態である。
【００６６】
Δやｃｌｋは、仕様策定時に決定可能な値であるため、閾値τも仕様策定時に決定可能である。具体的には、たとえば、Δ＝２［マイクロ秒］、ｃｌｋ＝５００［ＭＨｚ］である場合、τ＝１０００となる。通常、ＣＰＵ２０１−１は、共有メモリ２０３へのアクセスは数十カウント消費する。しかし、共有メモリ２０３へのアクセス競合によるコンテンション発生時には、数十〜数百カウント消費し、ＣＰＵ２０１−１の動作効率は最大でピーク時の３０％にまで低減することがある。
【００６７】
図５は、コンテンションが解消された状態を示す説明図である。図５も図４と同様に、ＣＰＵ２０１−１は、ハイパーバイザ２０４−１とリアルタイムソフトウェア２０７を実行しており、ＣＰＵ２０１−２は、ハイパーバイザ２０４−２とソフトウェア２０８を実行している。図４では、時間４０２にて、ＣＰＵ２０１−１とＣＰＵ２０１−２が同時に共有メモリ２０３にアクセスし、アクセス競合によるコンテンションが発生していた。
【００６８】
しかし、図５での時間４０２でのＣＰＵ２０１−２は、ソフトウェア２０８とダミースレッドを交互に実行することにより、アクセス競合によるコンテンションを解消している。結果、ＣＰＵ２０１−１は、リアルタイムソフトウェア２０７に求められている時刻までに処理を終了することができ、リアルタイム処理を保証できる。
【００６９】
図６は、本実施の形態を適用したマルチコアプロセッサシステム１００の性能比を示す説明図である。図６の横軸は、バス１０８に設定したバッファ段数であり、縦軸は従来例のバッファ段数１を基準とした性能比である。従来例のバッファ段数１と等しい性能の場合、縦軸が１．００にプロットされることになる。本実施の形態にかかるマルチコアプロセッサシステム１００に関して、バッファ段数ごとに、従来例との性能比をプロットして曲線で結んだ結果が曲線６０１である。また、Δ＝１［ミリ秒］、ｃｌｋ＝６００［ＭＨｚ］である。同様に、従来例にかかるマルチコアプロセッサシステムに関して、バッファ段数ごとに、従来例との性能比をプロットして曲線で結んだ結果が曲線６０２である。
【００７０】
また、曲線６０１、曲線６０２は、従来例のバッファ段数１を基準として、それより性能比がよい場合には領域６０３に位置し、悪い場合には領域６０４に位置する。領域６０３に位置する場合、マルチコアプロセッサシステム１００はリアルタイム処理を保証でき、領域６０４に位置する場合、リアルタイム処理を保証できないことになる。マルチコアプロセッサシステムは、バスのバッファ段数が増えるとバス利用の効率をあげることができるが、リアルタイム処理を保証することが難しくなる。
【００７１】
従来例にかかる曲線６０２は、バッファ段数が５段以上では領域６０４に位置している。したがって、従来例にかかるマルチコアプロセッサシステムは、バッファ段数が５段以上になると、リアルタイム処理保証を行えない。本実施の形態にかかる曲線６０１では、バッファ段数が１３段となるまで領域６０３に位置している。したがって、本実施の形態にかかるマルチコアプロセッサシステム１００は、バッファ段数が１３段まで、リアルタイム処理を保証することができる。
【００７２】
図７は、優先度テーブル３０３−１の記憶内容の一例を示す説明図である。優先度テーブル３０３−１は、処理名称フィールドと、実行優先度フィールドで構成する。なお、優先度テーブル３０３−２も同様のデータが設定されている。処理名称フィールドは、具体的な処理の内容を記述している。実際には、処理内容を記述したプログラムがＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４のいずれかに存在し、ＣＰＵ２０１−１は、プログラムをロードし、スレッドとして実行する。実行優先度フィールドは、対応する処理名称の実行する際の優先度を設定している。
【００７３】
たとえば、“通信パケット受信”処理は、一定時間内にパケット処理を行わないと、タイムアウトになるため、リアルタイム処理を保証する必要がある。したがって、実行優先度フィールドは、“リアルタイム”となる。続けて、“描画レンダリング”処理は、通常の処理であって、リアルタイム処理を保証する必要がない。したがって、実行優先度フィールドは、“通常”となる。同様に、“ＵＩ入力”処理は、仕様によりユーザに対する応答時間を決められている場合、リアルタイム処理を保証する必要がある。“辞書の先読み検索”処理は、リアルタイム処理を保証する必要がない。
【００７４】
コンテンションが起こる状態として、たとえば、マルチコアプロセッサシステム１００が、Ｗｅｂブラウジング処理を行っている状態を想定する。前述の状態でＣＰＵ２０１−１は、通信パケット受信処理を実行しており、ＣＰＵ２０１−２は、描画レンダリング処理を実行している。描画レンダリング処理は、メモリアクセスが多く、通信パケット受信処理と共有メモリ２０３に対するアクセス競合を起こす可能性が高い。
【００７５】
本実施の形態を適用した状態では、前述の状態のようにアクセス競合によるコンテンションが発生した際に、ＣＰＵ２０１−２が、ＯＳ２０５−２によって描画レンダリング処理のｎｉｃｅ値を上昇させる。ＯＳ２０５−２は、ｎｉｃｅ値を上昇させた描画レンダリング処理をよりまばらになるようにＣＰＵ２０１−２に割り当てる。結果、マルチコアプロセッサシステム１００は、アクセス競合によるコンテンションを回避でき、描画レンダリング処理のリアルタイム処理を保証できる。
【００７６】
また別のコンテンション状態として、たとえば、マルチコアプロセッサシステム１００が、ユーザからの文字入力を受け付けている状態を想定する。前述の状態で、ＣＰＵ２０１−１は、ＵＩ入力処理を実行しており、ＣＰＵ２０１−２は、辞書の先読み検索処理を実行している。辞書の先読み検索処理は、Ｉ／Ｏアクセスが多く、通信パケット受信処理と共有メモリ２０３に対するアクセス競合を起こす可能性が高い。
【００７７】
本実施の形態を適用した状態では、前述の状態のようにアクセス競合によるコンテンションが発生した際に、ＣＰＵ２０１−２が、ＯＳ２０５−２によって辞書の先読み検索処理のｎｉｃｅ値を上昇させる。ＯＳ２０５−２は、ｎｉｃｅ値を上昇させた辞書の先読み検索処理をよりまばらになるようにＣＰＵ２０１−２に割り当てる。結果、マルチコアプロセッサシステム１００は、アクセス競合によるコンテンションを回避でき、ＵＩ入力処理のリアルタイム処理を保証できる。
【００７８】
図８は、ハイパーバイザによるメッセージ送信処理を示すフローチャートである。メッセージ送信処理は、ハイパーバイザが起動するたびに行われる。ＣＰＵ２０１−１は、リアルタイムソフトウェアが実行中かを確認する（ステップＳ８０１）。リアルタイムソフトウェアが実行中の場合（ステップＳ８０１：Ｙｅｓ）、ＣＰＵ２０１−１は、発行命令カウンタＩを取得する（ステップＳ８０２）。続けて、ＣＰＵ２０１−１は、クロックカウンタＣを取得する（ステップＳ８０３）。取得後、ＣＰＵ２０１−１は、コンテンション中かの判断値となるＣ／Ｉ値を算出する（ステップＳ８０４）。算出後、ＣＰＵ２０１−１は、Ｃ／Ｉ値と閾値τを比較する（ステップＳ８０５）。
【００７９】
Ｃ／Ｉ値が閾値τより大きい場合（ステップＳ８０５：Ｙｅｓ）、コンテンション中となり、ＣＰＵ２０１−１は、ｎｉｃｅ値上昇メッセージを生成する（ステップＳ８０６）。このメッセージを受信したＣＰＵは、現在動作中のソフトウェアのｎｉｃｅ値を上昇させ、ｎｉｃｅ値が上昇したソフトウェアは優先度が下がるため、現在動作中のソフトウェアの実行をまばらにすることになる。
【００８０】
生成後、ＣＰＵ２０１−１は、ハイパーバイザ間にメッセージをブロードキャスト送信する（ステップＳ８０７）。送信後、ＣＰＵ２０１−１は、通常のハイパーバイザ処理を実行し（ステップＳ８１０）、処理を終了する。Ｃ／Ｉ値が閾値τ以下の場合（ステップＳ８０５：Ｎｏ）、コンテンション中ではないことになり、ＣＰＵ２０１−１は、ステップＳ８１０の処理を行い、処理を終了する。
【００８１】
リアルタイムソフトウェアが実行中でない場合（ステップＳ８０１：Ｎｏ）、ＣＰＵ２０１−１は、続けて、実行中のソフトウェアのｎｉｃｅ値が初期値かを確認する（ステップＳ８０８）。初期値でない場合（ステップＳ８０８：Ｎｏ）、ＣＰＵ２０１−１は、実行中のソフトウェアのｎｉｃｅ値を初期値に設定し（ステップＳ８０９）、ステップＳ８１０の処理に移行する。ｎｉｃｅ値が初期値の場合（ステップＳ８０８：Ｙｅｓ）、ＣＰＵ２０１−１は、ステップＳ８１０の処理に移行する。
【００８２】
ｎｉｃｅ値が初期値でない場合、ＣＰＵ２０１−１で実行していた処理がコンテンションの原因だったことを示しており、ＣＰＵ２０１−１は、ステップＳ８０９の処理にて、コンテンション回避のために低下していた処理を元に戻すことができる。コンテンションを解決する場合、コンテンションの原因となっている処理を、ＯＳのスケジューラが切り替え可能とする最小単位の時間で休止することで、コンテンションの解決を得られるケースが多い。もし、最小単位の時間で解決しないことが多い場合、ＣＰＵ２０１−１は、ステップＳ８０８：Ｎｏの後にＣ／Ｉ値を算出し、閾値τと比較してコンテンションが解決したことを確認した後にステップＳ８０９の処理を実行してもよい。
【００８３】
図９は、ハイパーバイザによるメッセージ受信処理を示すフローチャートである。ＣＰＵ２０１−２は、ハイパーバイザ間のメッセージを受信する（ステップＳ９０１）。本実施の形態では、ＣＰＵ２０１−１が送信したメッセージを受信する。次に、ＣＰＵ２０１−２は、自身のＣＰＵがメッセージをブロードキャストしたかを確認する（ステップＳ９０２）。
【００８４】
ブロードキャストしている場合（ステップＳ９０２：Ｙｅｓ）、リアルタイム処理中でコンテンション中であり、スレッドの制御を行わないため、ＣＰＵ２０１−２は、処理を終了する。ブロードキャストしていない場合（ステップＳ９０２：Ｎｏ）、コンテンションの原因となるので、ＣＰＵ２０１−２は、共有メモリ２０３にアクセスしない処理を実行する。
【００８５】
たとえば、ＣＰＵ２０１−２は、現在動作中のソフトウェアのｎｉｃｅ値を上昇させるようにＯＳ２０５−２に指示する（ステップＳ９０３）。もし、ｎｉｃｅ値の機能を持っていないＯＳの場合、ＣＰＵ２０１−２は、ＯＳ２０５−２に対してダミースレッドを起動させるよう指示してもよい。
【００８６】
また、ＣＰＵ２０１−２は、ステップＳ９０２：Ｎｏにて、リアルタイムソフトが動作していない場合、Ｃ／Ｉ値を算出し、Ｃ／Ｉ値と閾値τを比較しコンテンション中であった場合に、スレッドの制御を行ってもよい。この場合、Ｃ／Ｉ値の比較の分だけ処理が増加するが、コンテンションが発生しているＣＰＵだけを対象にすることができる。
【００８７】
また、本実施の形態では、ＣＰＵ２０１−１は、メッセージ送信処理にて優先度をリアルタイム実行か否かという２段階で分けたうえでコンテンションのチェックをしたが、優先度を３段階以上に分けてコンテンションのチェックをしてもよい。
【００８８】
その場合の処理を行う例として、ＣＰＵ２０１−１は、優先度テーブル３０３−１の実行優先度フィールドの取りうる値を３段階以上にする。たとえば、“ＵＩ入力”処理の実行優先度が“リアルタイム”と“通常”の間である“高優先”であり、“辞書の先読み検索”処理の実行優先度が“通常”の下である“低優先”とする。さらに、メッセージ送信処理では、ステップＳ８０１の処理にて、「リアルタイムソフトウェアが実行中か？」を「低優先以外の優先度を持つソフトウェアが実行中か？」に置き換える。さらに、ステップＳ８０６の処理にて、メッセージの内容に、現在動作中のソフトウェアの優先度を付与する。
【００８９】
続けて、メッセージ受信処理では、ステップＳ９０２：Ｎｏの処理の後とステップＳ９０３の処理の間に新たな条件として、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか？」を付け加える。条件がＹｅｓの場合、実行主体となるＣＰＵは、ステップＳ９０３の処理を行い、Ｎｏの場合には、ステップＳ９０３の処理を行わず処理を終了する。
【００９０】
前述した処理の状態にて、たとえば、図７にて前述した高優先であるＵＩ入力処理を実行しているＣＰＵは、ステップＳ８０１にてＹｅｓとなり、ステップＳ８０７の処理にて他のコアにメッセージをブロードキャスト送信する。前述のメッセージを通常の優先度である描画レンダリングを実行しているＣＰＵが受信した場合、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか？」が、Ｙｅｓとなり、ステップＳ９０３の処理を行い、ｎｉｃｅ値の制御を行う。
【００９１】
もし、前述のメッセージをリアルタイム処理が要求される通信パケットを実行しているＣＰＵが受信した場合、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか？」が、Ｎｏとなるため、ｎｉｃｅ値の制御を行わない。このように、メッセージ送信処理を行うＣＰＵは、優先度を３段階以上に分けてコンテンションのチェックを行い、メッセージ受信処理を行うＣＰＵは、優先度の判断を加えることで、優先度の低い処理を行っているＣＰＵの処理をまばらにする。これにより、マルチコアプロセッサシステム１００は、優先度の高い処理を先に処理することができる。
【００９２】
また、前述の実行優先度が３段階以上の処理の場合でステップＳ９０３を実行する際に、受信したメッセージの優先度と現在動作中のソフトウェアの優先度に基づいて、ｎｉｃｅ値の上昇させる値を設定してもよい。たとえば、受信したメッセージの優先度がリアルタイムであり、現在動作中のソフトウェアの優先度が通常であった場合、優先度が２段階離れているため、ｎｉｃｅ値を２上昇させる、という処理を行ってもよい。このように、ハイパーバイザ２０４−２によってｎｉｃｅ値を段階的に制御することで、ＯＳ２０５−２は、優先度の低い処理ほど、よりまばらに実行することになり、ＣＰＵ２０１−１に割り当てられているリアルタイム処理を先に処理することができる。
【００９３】
また、実行優先度が２段階の状態においても、ｎｉｃｅ値の上昇させる値を２段階以上あげる処理を追加してもよい。具体的には、たとえば、ＣＰＵ２０１−２が、メッセージ受信処理を受けてｎｉｃｅ値を１上昇させた後に、ｎｉｃｅ値を初期値に戻す前に、メッセージ受信した場合である。この場合、ｎｉｃｅ値を上昇させたにもかかわらず、まだコンテンション状態であることを意味しているため、ＣＰＵ２０１−２はさらにｎｉｃｅ値を１上昇させるように設定することで、コンテンション状態がより解消しやすくなる。
【００９４】
以上説明したように、マルチコアプロセッサシステム、制御方法、および制御プログラムによれば、リアルタイム処理でコンテンション中のＣＰＵを特定する。そして、リアルタイム処理中のＣＰＵと特定されたＣＰＵを除いたすべてのＣＰＵが、共有メモリにアクセスしないスレッドを実行するよう制御する。これにより、マルチコアプロセッサシステムは、リアルタイム処理を保証できる。
【００９５】
また、マルチコアプロセッサシステムは、特定されたＣＰＵを除いたすべてのＣＰＵに対し、共有メモリにアクセスしないスレッドを実行してもよい。これにより、特定されたＣＰＵから、特定されたＣＰＵを除いたすべてのＣＰＵに対して制御依頼をする際に、競合している相手を探さず、自身のＣＰＵ以外のすべてのＣＰＵに制御依頼を行うことで検索処理を行わないため、処理を簡略化できる。
【００９６】
また、マルチコアプロセッサシステムは、複数のＣＰＵのうち、コンテンション中のＣＰＵを特定し、特定されたＣＰＵが、共有メモリにアクセスしないスレッドを実行するよう制御してもよい。これにより、マルチコアプロセッサシステムは、コンテンションを起こしたＣＰＵのみスレッドを制御させ、コンテンションを起こしていないＣＰＵに対しては、通常処理を続けさせることができる。
【００９７】
また、マルチコアプロセッサシステムは、コンテンションが発生した期間のうち、スレッドを制御するＣＰＵに対して、制御するＣＰＵに割り当てられていたスレッドの実行時間と、メモリにアクセスしないスレッドの時間を、時分割で分割して割り当ててもよい。これにより、マルチコアプロセッサシステムは、コンテンションを解消し、また、制御するＣＰＵに割り当てられていたスレッドの処理も行うことができる。
【００９８】
また、マルチコアプロセッサシステムは、ＣＰＵごとに、ＣＰＵの命令を発行した発行命令数とＣＰＵのサイクル数とに基づいて、発行命令効率を算出し、算出された発行命令効率と所定の閾値τに基づいて、コンテンションを検出してもよい。これにより、マルチコアプロセッサシステムは、アクセス競合によるコンテンションを検出することができ、リアルタイム処理を保証できる。
【００９９】
また、マルチコアプロセッサシステムは、ＣＰＵに割り当てられたスレッドの実行優先度が最も高いコアを検出してもよい。これにより、マルチコアプロセッサシステムは、リアルタイム処理の保証を必要とするスレッドを決めておくことで、そのスレッドがどのＣＰＵに割り当てられていても、コンテンションを解消しリアルタイム処理の保証を行うことができる。
【０１００】
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１０１】
２０１−１  ＣＰＵ
２０１−２  ＣＰＵ
３０１−１  領域
３０１−２  領域
３０２−１  領域
３０２−２  領域
３０３−１  優先度テーブル
３０３−２  優先度テーブル
３０４−１  ＯＳスケジューラ監視部
３０４−２  ＯＳスケジューラ監視部
３０５  優先度検出部
３０６  発行命令効率算出部
３０７  コンテンション検出部
３０８  特定部
３０９  ハイパーバイザ間メッセージ送信部
３１０  ハイパーバイザ間メッセージ受信部
３１１  制御部
３１２  ソフトウェア
３１３  ソフトウェア
３１４  ｎｉｃｅ値設定部
３１５  ダミースレッド起動部
【図１】
0005601414.tif 000002
【図２】
0005601414.tif 000003
【図３】
0005601414.tif 000004
【図４】
0005601414.tif 000005
【図５】
0005601414.tif 000006
【図６】
0005601414.tif 000007
【図７】
0005601414.tif 000008
【図８】
0005601414.tif 000009
【図９】
0005601414.tif 000010