以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステムのハードウェア構成)
図1は、本実施の形態にかかるマルチコアプロセッサシステム100のハードウェア構成を示すブロック図である。マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるCPUが並列されているプロセッサ群を例にあげて説明する。
マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、フラッシュROM104と、を備えている。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ105と、I/F(Interface)106と、を備えている。また、各構成部はバス108によってそれぞれ接続されている。本実施の形態にかかるハードウェアの構成は、集中共用システムを適用した構成となっている。
ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。また、CPUs101は、シングルコアのプロセッサを並列して接続したすべてのCPUを指している。詳細は、図2にて後述する。ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPUs101のワークエリアとして使用される。
フラッシュROM104は、書き換えが可能であり、電源を切ってもデータが消えないという特徴を持つ不揮発性の半導体メモリである。フラッシュROM104は、ソフトウェアプログラムや、データを記憶している。フラッシュROM104の代わりに、磁気ディスクであるHDD(ハードディスクドライブ)にて記憶してもよいが、フラッシュROM104を使用することにより、機械的に動作するHDDに比べて振動に強くすることができる。たとえば、マルチコアプロセッサシステム100で構成する装置に対し、強い振動があった場合でも、フラッシュROM104であればデータが消える可能性を低くすることができる。
ディスプレイ105は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ105は、たとえば、TFT液晶ディスプレイなどを採用することができる。また、ディスプレイ105は、タッチパネル式で入力する形態でもよい。
I/F106は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク107に接続され、このネットワーク107を介して他の装置に接続される。そして、I/F106は、ネットワーク107と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F106には、たとえばモデムやLANアダプタなどを採用することができる。
図2は、マルチコアプロセッサシステム100の各CPUのハードウェア構成とソフトウェア構成を示すブロック図である。マルチコアプロセッサシステム100のハードウェア構成は、CPUs101と、共有メモリ203で構成される。CPUs101は、複数のCPUとしてCPU201−1、CPU201−2、・・・、CPU201−nで構成される。
CPU201−1、CPU201−2、・・・、CPU201−nは、それぞれ、キャッシュメモリ202−1、キャッシュメモリ202−2、・・・、キャッシュメモリ202−nを保持している。各CPUと共有メモリ203は、バス108によってそれぞれ接続されている。以下の記述では、CPU201−1、CPU201−2について記述する。
また、マルチコアプロセッサシステム100のソフトウェア構成として、CPU201−1は、ハイパーバイザ204−1、OS205−1を実行する。CPU201−1は、OS205−1の制御により、ディスパッチャ206を実行する。同様に、CPU201−1は、OS205−1の制御により、ソフトウェア207−1〜ソフトウェア207−mを実行する。同様にCPU201−2も、ハイパーバイザ204−2、OS205−2を実行する。CPU201−1は、OS205−1の制御により、ディスパッチャ206を実行する。また、ハイパーバイザ204−1も、ディスパッチャ206の結果を用いて、本実施の形態での特徴である、タイムスライス補正処理を行う。CPU201−2は、OS205−2の制御により、高優先度ソフトウェア209を実行する。
CPU201−1がソフトウェア207−1〜ソフトウェア207−mを実行する際には、データへのアクセス先が2通りあり、アクセス経路210とアクセス経路211である。同様に、CPU201−2が高優先度ソフトウェア209を実行する際にも、データへのアクセス先が2通りあり、アクセス経路212とアクセス経路213である。また、ハイパーバイザ204−1とハイパーバイザ204−2と、他のCPU上で動作しているハイパーバイザは、ハイパーバイザ間通信214を行う。
CPU201−1、CPU201−2、・・・、CPU201−nは、マルチコアプロセッサシステム100の制御を司る。CPU201−1、CPU201−2、・・・、CPU201−nは、対称的、均一的に処理が割り付けられたSMP(Symmetric Multi−processing)でもよい。また、CPU201−1、CPU201−2、・・・、CPU201−nは、処理内容によって分担するCPUを決めておくASMP(Asymmetric Multi−Processing)でもよい。ASMPの例として、本実施の形態にかかるマルチコアプロセッサシステム100では、CPU201−1にて決められた時間以内に処理を行う必要があるリアルタイム処理208を割り当てている。
共有メモリ203は、CPU201−1、CPU201−2、・・・、CPU201−nからアクセス可能な記憶領域である。記憶領域とは、具体的には、たとえば、ROM102、RAM103、フラッシュROM104である。また、たとえば、CPU201−1が、ディスプレイ105に画像データの表示を要求する場合、RAM103に含まれるVRAM(Video RAM)にアクセスし、画像データをVRAMに書き込むことになる。したがって、CPU201−1が、ディスプレイ105へアクセスする場合も、共有メモリ203にアクセスすることに含める。
また、たとえば、CPU201−1が、I/F106にアクセスする場合も同様である。たとえば、I/F106の具体例がLANアダプタとして、LANアダプタにあるバッファにアクセスする形式か、RAM103にアクセスし、その後LANアダプタに転送する形式かのどちらかになる。どちらの場合であっても、CPU201−1、CPU201−2からみると共有メモリ203にアクセスしていることとなるため、CPU201−1、CPU201−2が、I/F106へアクセスする場合も、共有メモリ203にアクセスすることに含める。同様に、CPU201−1が、I/F106にアクセスする場合も、I/F106を制御するデバイスドライバが用意する共有の記憶領域にアクセスすることになるため、結果、共有メモリ203にアクセスすることになる。
ハイパーバイザ204−1、ハイパーバイザ204−2は、それぞれCPU201−1、CPU201−2にて動作するプログラムである。ハイパーバイザの機能は、OSとCPUの間にて位置し、OSの監視を行い、OSがハングアップした際にリセットをする他、OSが何もスレッドを実行していない場合に、省電力設定にする。また、ハイパーバイザは、一般のプログラムでは操作できないプロセッサのキャッシュ制御やI/O操作を行うような特殊レジスタを操作する。また、ハイパーバイザは、一般のプログラムでは読み書きできないメモリ上の空間を用いて動作を行う。
OS205−1、OS205−2は、それぞれ、CPU201−1、CPU201−2にて動作するプログラムであり、ハイパーバイザ204−1、ハイパーバイザ204−2上で動作する。たとえば、OS205−1は、次に実行するソフトウェアを決めるスケジューラの機能を有する。
ディスパッチャ206は、現在動作中のソフトウェアに対して、スケジューラによって決定した次のソフトウェアに切り替える機能を有する。具体的には、たとえば、スケジューラは、ソフトウェア207−1からソフトウェア207−2に切り替える場合、CPU201−1は、ソフトウェア207−1のプログラムカウンタ等を含むレジスタ情報を退避する。退避後、CPU201−1は退避されてあったソフトウェア207−2のレジスタ情報を復帰する。復帰後、CPU201−1は、ソフトウェア207−2の処理を前回の切り替えられた時点から継続することができる。
ソフトウェア207−1、・・・、ソフトウェア207−mは、実行コードをCPUが実行することによりある機能を実現する。ソフトウェアは、1つ以上のスレッドで構成される。ソフトウェア207−1、・・・、ソフトウェア207−mは、終了時間に関係なく、処理を実行する。
リアルタイム処理208は、割り込み信号を受信した際に行う処理となる割り込みハンドラである。割り込みにはハードウェア割り込みとソフトウェア割り込みとがあり、たとえば、ハードウェア割り込みでは、通信デバイスがデータの受信を割り込み信号としてCPUに通知する。通知を受けたCPUは、通信デバイスのデータ受信に対応した割り込みハンドラを実行する。具体的な割り込みハンドラの処理内容としては、受信したデータを通信デバイスの記憶領域からRAM103、フラッシュROM104に転送する処理である。割り込み信号を受信したCPUは、割り込み禁止区間でなければ現在のスレッドの処理を退避し、割り込みハンドラを実行する。
高優先度ソフトウェア209は、ソフトウェアのうち高優先度属性が付与されているソフトウェアである。高優先度のソフトウェアは、ディスパッチ頻度が他のソフトウェアよりも高くなるといった特徴を持つ。また、メモリアクセスなどでリソース競合が起きたときに高優先度でアクセス権を獲得できるといった特徴を持つ。
本実施の形態では、ソフトウェア207−1、・・・、ソフトウェア207−mとリアルタイム処理208はCPU201−1にて実行され、高優先度ソフトウェア209はCPU201−2にて実行される。ソフトウェア207−1〜ソフトウェア207−m、高優先度ソフトウェア209の具体例については、図7にて後述する。同様に、リアルタイム処理208の具体例については、図8にて後述する。
アクセス経路210は、CPU201−1がキャッシュメモリ202−1にアクセスする経路である。アクセス経路211は、CPU201−1が共有メモリ203にアクセスする経路である。アクセス経路210とアクセス経路211の違いとして、たとえば、ソフトウェア207−1がアクセスしたいデータがキャッシュメモリ202−1にあればアクセス経路210、なければアクセス経路211となる。アクセス経路212、アクセス経路213も同様で、アクセス経路212は、CPU201−2がキャッシュメモリ202−2にアクセスする経路である。アクセス経路213は、CPU201−2が共有メモリ203にアクセスする経路である。
アクセス競合によるコンテンションは、複数のCPUが共有メモリ203にアクセスすることで発生する。たとえば、CPU201−1のアクセス経路がアクセス経路211、CPU201−2のアクセス経路がアクセス経路213であるときに、共有メモリ203へのアクセス競合によるコンテンションが発生する。
コンテンションが発生すると、ソフトウェアの処理が遅延することになり、ソフトウェアの処理内に存在する割り込み禁止区間も初期状態よりも長くなってしまう。割り込み禁止区間時に割り込み信号がCPUに通知されても、割り込みハンドラであるリアルタイム処理208を実行できないため、リアルタイム処理208の応答性能の保証を行えない状態となる。コンテンション状態となり、リアルタイム処理208の応答時間の保証が行えない状態を後述する図5にて示す。
(マルチコアプロセッサシステム100の機能的構成)
次に、マルチコアプロセッサシステム100の機能的構成について説明する。図3は、マルチコアプロセッサシステム100の機能的構成を示すブロック図である。マルチコアプロセッサシステム100は、検出部303と、特定部304と、補正部305と、設定通知部306と、判断部307と、切替部308と、設定部309と、を含む構成である。この制御部となる機能(検出部303〜設定部309)は、具体的には、たとえば、図1に示したROM102、RAM103、フラッシュROM104などの記憶装置に記憶されたプログラムをCPUs101が実行することにより、その機能を実現する。または、I/F106を経由して他のCPUが実行することにより、その機能を実現してもよい。
また、マルチコアプロセッサシステム100は、ソフトウェアの優先度を判断するために、ソフトウェアテーブル310にアクセスする。ソフトウェアテーブル310は共有メモリ203に格納されており、たとえばCPU201−1がアクセスする。
また、CPU201−1、CPU201−2、・・・、CPU201−nは、ハイパーバイザとOS/ソフトウェアを実行する。さらに、一点破線で分割された領域のうち、領域301に図示している検出部303〜判断部307は、CPU201−1がハイパーバイザ204−1の機能の一部として実行することにより実現する。同様に、領域302内に図示している切替部308、設定部309は、CPU201−1が、OS205−1の機能の一部として実行することにより実現する。また、図示していないが、CPU201−1以外のコアにも、検出部303〜設定部309の機能を有している。
検出部303は、複数のコアのうち、任意のスレッドが割り当てられたコアを検出する機能を有する。複数のコアとは、CPU201−1〜CPU201−nである。具体的には、たとえば、検出部303は、CPU201−2に高優先度ソフトウェア209が割り当てられたことをハイパーバイザ間通信214によって検出する。なお、検出されたコアの情報は、キャッシュメモリ202−1、または、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
特定部304は、複数のコアのうち、切替部308によって所定の切り替え時間を越えて複数のスレッドの切り替えを行ったコアを特定する機能を有する。所定の切り替え時間とは、タイムスライスのことであり、スレッドを切り替える切替時間Δtのことである。複数のスレッドとは、CPU201−1上で実行されるソフトウェア207−1〜ソフトウェア207−mである。
また、特定部304は、検出部303によってコアが検出されたことをトリガーとしてコアを特定してもよい。また、特定部304は、検出部303によってコアが検出されたことをトリガーとし、切替部308によって切り替えられた後のスレッドの優先度より検出部303によって検出されたコアに割り当てられたスレッドの優先度が高い場合に、コアを特定してもよい。
具体的には、たとえば、特定部304は、切替部308によってCPU201−1に割り当てるソフトウェアをソフトウェア207−1〜ソフトウェア207−mに切り替えた場合を想定する。このとき、ソフトウェア207−1に割り当てられた時間ΔCがΔtを越えた場合に、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったCPUとして特定する。
また、ソフトウェア207−1に割り当てられた時間ΔCの取得方法は、ソフトウェア207−1が割り当てられた時点でのクロックカウンタと、ソフトウェア207−2が割り当てられた時点でのクロックカウンタの差分から取得することができる。なお、特定されたコアの情報は、キャッシュメモリ202−1、または、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
補正部305は、特定部304によって特定されたコアにおいて複数のスレッドの切り替えを行った実切り替え時間と所定の切り替え時間との差分に基づいて、所定の切り替え時間が短縮するように補正する機能を有する。また、補正部305は、差分が所定の割り込み禁止時間を越えた場合に、差分に基づいて所定の切り替え時間が短縮するように補正してもよい。所定の割り込み禁止時間とは、実装規約で設定される禁止区間の最長パス時間lck(Locked Critical Kidnapping−period)である。lckの詳細については、図4にて後述する。
差分に基づいて、短縮するように補正された切り替え時間の算出式の適用例としては、下記(1)式を適用してもよい。
補正された切り替え時間=所定の切り替え時間−(実切り替え時間−所定の切り替え時間) …(1)
(1)式では、コンテンション中となり遅延した時間をスレッド切り替えの短縮分に設定することになる。遅延した時間分が割り込みイベントの検出間隔の減少となり、割り込みイベントの検出頻度が増加した結果、リアルタイム処理の応答性能の保証ができるようになる。また、算出式は、差分が所定の割り込み禁止時間を越えた場合に、下記(2)式を適用してもよい。
補正された切り替え時間=所定の切り替え時間−((実切り替え時間−所定の切り替え時間)−所定の割り込み禁止時間) …(2)
(2)式では、遅延時間が所定の割り込み禁止時間を越えなければ、実装規約によって、リアルタイム処理の応答性能を保証できることから、補正された切り替え時間の減少分を(1)式よりも抑えている。スレッドの切り替え時間を小さくしすぎると、スレッドのディスパッチオーバーヘッドによる性能劣化を伴うため、リアルタイム処理の応答性能を満たすことが可能ならば、(2)式を使用してもよい。算出式は、(1)式、(2)式に限らず、補正された切り替え時間が減少すればよい。
具体的には、たとえば、実切り替え時間が13[マイクロ秒]であり、所定の切り替え時間が10[マイクロ秒]であった場合、差分は3[マイクロ秒]となり、補正された切り替え時間は(1)式から、7[マイクロ秒]となる。なお、補正された切り替え時間は、キャッシュメモリ202−1、または、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
設定通知部306は、補正部305によって補正された切り替え時間をOSに通知する機能を有する。また、設定通知部306は、判断部307によって、アクセス競合中でないと判断された場合、補正された切り替え時間を補正前の切り替え時間に設定するように通知してもよい。また、通知内容の具体的として、設定通知部306は、(実切り替え時間−所定の切り替え時間)である差分を通知してもよい。また、判断部307によってアクセス競合中でないと判断された場合に、設定通知部306は、補正前の切り替え時間を通知してもよい。
具体的には、たとえば、設定通知部306は、補正部305によって補正された切り替え時間7[マイクロ秒]をOSに送信する。なお、通知された切り替え時間は、キャッシュメモリ202−1、または、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
判断部307は、特定部304によって特定されたコアがアクセスするメモリに関してアクセス競合中か否かを判断する機能を有する。具体的には、たとえば、CPU201−1は、一定期間のCPUが発行した発行命令数とクロックカウンタの記録を元にクロックカウンタ/発行命令数を算出する。CPU201−1は、算出された値が一定値より大きい場合にアクセス競合中であると判断する。
具体的には、たとえば、(クロックカウンタ/発行命令数)>1000となった場合、1つの命令に1000クロック消費していることになりアクセス競合を発生していると判断する。なお、判断結果は、キャッシュメモリ202−1、または、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
切替部308は、複数のコアのおのおのに割り当てた複数のスレッドを所定の切り替え時間で切り替える機能を有する。具体的には、たとえば、切替部308は、ソフトウェア207−1〜ソフトウェア207−mを所定の切り替え時間Δtで切り替える。また、設定部309によって切り替え時間がΔtからΔt’に短縮した場合、切替部308は、Δt’にてソフトウェア207−1〜ソフトウェア207−mを切り替える。なお、切り替えたソフトウェアの情報は、共有メモリ203などの記憶領域に記憶されてもよい。
設定部309は、設定通知部306によって通知された、補正された切り替え時間をスレッドの切り替え時間に設定する機能を有する。また、設定部309は、設定通知部306によって補正前の切り替え時間が通知されてきた場合に、補正前となる所定の切り替え時間に設定してもよい。
具体的には、たとえば、設定通知部306によって補正された切り替え時間Δt’が通知されてきた場合、設定部309は、スレッドの切り替え時間として補正された切り替え時間Δt’を設定する。なお、設定されたスレッドの切り替え時間は、共有メモリ203などの記憶領域に記憶されてもよい。
図4は、単一のCPUで実行している場合のソフトウェアのディスパッチ状態を示す説明図である。図4では、マルチコアプロセッサシステム100の中でCPU201−1が実行中であり、CPU201−1は、ソフトウェア207−1〜ソフトウェア207−mを実行する。CPU201−1は、スレッドの切り替え時間Δtでソフトウェア207−1〜ソフトウェア207−mを順次実行しつつ、リアルタイム割り込みを受信したら割込みハンドラとしてリアルタイム処理208を実行する。
また、マルチコアプロセッサシステム100がリアルタイム処理の応答性能を保証するには、以下の2つの時間以内にリアルタイム処理を行う必要がある。1つ目の条件として、割り込みイベントが発生後、CPU201−1はリアルタイム割り込み間隔以内に割り込みイベントに対応したリアルタイム処理を実行する必要がある。2つ目の条件として、CPU201−1はリアルタイム応答時間内に少なくとも1回リアルタイム処理を行う必要がある。割り込みイベントとは、割り込み信号を受信したイベントである。また、割り込みイベントが発生しても、CPUが割り込み禁止区間であるときはすぐにリアルタイム処理を実行することができず、割り込み禁止区間が終了した後に、CPUはリアルタイム処理が行えるようになる。
具体的に、図4の状態では、割り込みイベントの発生から現在時刻が割り込みイベントを拾うタイミング401となりリアルタイム処理208を行うまでの時間402が、リアルタイム割り込み間隔以内である必要がある。さらに、リアルタイム処理208を行う間隔となる時間403が、リアルタイム応答時間である必要がある。一般的にリアルタイム割り込み間隔はマイクロ秒オーダであり、リアルタイム応答時間は数ミリ秒である。数値例としては、リアルタイム割り込み間隔=10[マイクロ秒]、リアルタイム応答時間=10[ミリ秒]である。
また、ソフトウェア207−1〜ソフトウェア207−mの処理の中には、割り込み禁止区間が埋め込まれている。割込み禁止区間を埋め込む理由としては、たとえば、意図的なキャッシュ操作やレジスタの退避復元処理などは、他の処理が割り込まない状態で連続して処理を行う必要があるためである。割り込み禁止区間中のCPUは、コンテキストスイッチなどのプリエンプションが実行できなくなる。割り込み禁止区間の設定については、システム設計の段階で、実装規約という形で禁止区間の最長パス時間lckを設定し、実装者は、割り込み禁止区間がlckを越えないようにソフトウェアの実装を行う。
割り込み禁止区間がlckを越えない限り、割り込み禁止区間にて割り込みが発生したとしても、リアルタイム割り込み間隔、および、リアルタイム応答時間内でのリアルタイム処理を保証するように実装者はlckを設定する。したがって、単一のCPUで実行している場合には、割り込み禁止区間中に割り込みイベントが発生しても、リアルタイム処理の応答性能を保証することができる。
図5は、従来例におけるマルチコアプロセッサシステム100にて、コンテンション状態によるリアルタイム応答の遅延を示す説明図である。図5では、マルチコアプロセッサシステム100の中でCPU201−1とCPU201−2が実行中であり、CPU201−1は、ソフトウェア207−1〜ソフトウェア207−mを実行する。CPU201−1は、スレッドの切り替え時間Δtでソフトウェア207−1〜ソフトウェア207−mを順次実行しつつ、リアルタイム割り込みを受信したら割込みハンドラとしてリアルタイム処理208を実行する。CPU201−2は、高優先度ソフトウェア209を実行する。
CPU201−2にて、高優先度ソフトウェア209を実行しているため、マルチコアプロセッサシステム100は、各種リソースを高優先度ソフトウェア209に優先的に割り当てる。具体的には、たとえば、CPU201−1とCPU201−2が同時に共有メモリ203にアクセスした場合を想定する。このときマルチコアプロセッサシステム100は、高優先度ソフトウェア209を実行しているCPU201−2が優先的に共有メモリ203にアクセスするように制御する。
したがって、CPU201−1は、CPU201−2のアクセス完了を待つことになり、アクセス競合におけるコンテンション状態となる。コンテンション状態となったCPU201−1は、処理が遅延することになる。処理が遅延すると、割り込み禁止区間も遅延することになる。遅延した結果、割り込み禁止区間がlckを越えた場合に、リアルタイム処理の応答性能を保証することができなくなる。
図5の例では、割り込みイベントが発生し、現在時刻が割り込みイベントを拾うタイミング501となった際、CPU201−1は割り込み禁止区間となっている。したがって、CPU201−1は、リアルタイム処理208をすぐに実行できず、割り込み禁止区間の終了後にリアルタイム処理208を実行する。
結果、割り込みイベント発生からリアルタイム処理208実行までの時間502がリアルタイム割り込み間隔を越えた場合に、マルチコアプロセッサシステム100はリアルタイム処理の応答性能を保証できなくなる。また、リアルタイム処理208を行う間隔となる時間503がリアルタイム応答時間を越えた場合にも、マルチコアプロセッサシステム100はリアルタイム処理の応答性能を保証できなくなる。
図6は、本実施の形態におけるマルチコアプロセッサシステム100にて、タイムスライスを補正した後の状態を示す説明図である。図6では、ハードウェアとソフトウェアの実行状態は図5と等しいが、CPU201−1にて、ΔtからΔt’へと、スレッドの切り替え時間が短縮するように補正されている。
スレッドの切り替え時間が短縮された結果、マルチコアプロセッサシステム100がリアルタイム処理の応答性能を保証しやすくなる。応答性能の保証を満たすには、図4にて前述したように、リアルタイム割り込み間隔以内にリアルタイム処理を行うことと、リアルタイム応答時間内にリアルタイム処理を行うことである。
リアルタイム割り込み間隔以内にリアルタイム処理を行えるようになる理由は、スレッドの切り替え時間が短縮することにより、割り込みイベントを検出する間隔が短くなり、割り込みイベントを検出する頻度があがるためである。したがって割り込みイベントの発生から、現在時刻が割り込みイベントを拾うタイミング601となり、リアルタイム処理208を実行するまでの時間602が短くなり、リアルタイム割り込み間隔より小さくすることができる。
リアルタイム応答時間以内にリアルタイム処理を行えるようになる理由は、スレッドの切り替え時間が短縮することにより、CPU内で実行しているスレッドの処理回数が増えるためである。具体的には、たとえば、スレッドを200個実行しているCPUが存在し、スレッド1回の処理時間が10[マイクロ秒]であったと想定する。また、リアルタイム処理を実行する契機となる割り込みイベントは、200個のスレッドのうちの特定のスレッドの実行によって発生するものとする。
この場合、スレッドの優先度がすべて等しい場合、2[ミリ秒]に1回は、どのスレッドも処理を行えることになる。スレッド1回の処理時間がコンテンション状態により長くなった場合に、スレッドの切り替え時間が短縮することにより、特定のスレッドの処理が行われる回数が増えることになる。結果、リアルタイム処理208を行う間隔となる時間603はリアルタイム応答時間より小さくすることができる。
図7は、ソフトウェアテーブル310の記憶内容の一例を示す説明図である。ソフトウェアテーブル310はマルチコアプロセッサシステム100にて実行されるソフトウェアの一覧を格納する。ソフトウェアテーブル310は、ソフトウェア名称と、優先度という2つのフィールドで構成する。
ソフトウェア名称フィールドは、ソフトウェアの名称を記述している。実際には、処理内容を記述したプログラムがROM102、RAM103、フラッシュROM104のいずれかに存在し、たとえば、CPU201−1は、プログラムをロードし、スレッドとして実行する。優先度フィールドは、対応するソフトウェアを実行する際の優先度を設定している。優先度が高いソフトウェアを検出すると、マルチコアプロセッサシステム100は、バス108のアクセス権などを優先度が高いソフトウェアに優先的に渡す。
具体的には、たとえば、“動画像再生ソフトウェア”は、ユーザによって起動され、フォアグラウンドで実行している場合には、高優先度となる。また、“Webブラウザ”は低優先度となる。また、別のパターンとして、カメラユニットを持つマルチコアプロセッサシステム100が連続して撮影を行うことを想定する。連続して撮影を行うため、カメラの画像を保存する“カメラ画像保存ソフトウェア”は高優先度となる。また、“カメラ撮影ソフトウェア”は低優先度となる。
図8は、リアルタイム処理の一例を示す説明図である。“通信割り込み処理”は、通信を司るハードウェア、たとえばI/F106からの割り込みイベントに対して実行されるリアルタイム処理である。また、通信は、たとえば“Webブラウザ”等のソフトウェアによって引き起こされる。I/F106はデータを受信した場合、データのプロトコルによっては受信したという応答通知を一定時間内にデータを送信した機器に送信する必要がある。一定時間内に処理を行わないと、データを送信した機器はタイムアウトと判断するため、マルチコアプロセッサシステム100は、一定時間内に処理を行う必要がある。
また、“カメラユニット割り込み処理”は、カメラユニットにより実行されるリアルタイム処理である。カメラユニット割り込み処理は“カメラ撮影ソフトウェア”によって画像データを撮影し、バッファに格納する。CPU201−1が、格納された映像データをバッファからたとえば共有メモリ203に転送しないと、データオーバーフローが発生し、画像データをとりこぼすことになる。
前述した“通信割り込み処理”、“カメラユニット割り込み処理”は、シングルコアでタスクスイッチしながら動作するシステムでは問題なく動作する。しかし、従来例におけるマルチコアプロセッサシステム100では、リアルタイム処理を1つのCPUが実行し、別のCPUが高優先度ソフトウェアを実行している場合、アクセス競合によるコンテンション状態となり、リアルタイム処理の応答性能を保証できない。
図9は、マルチコアプロセッサシステム100でのスレッド切り替えを含むタイムスライス設定処理を示すフローチャートである。CPUs101は、スレッドを次々と切り替えている。初期状態として、CPU201−1は、OS205−1によって、スレッドの切り替え時間をΔtに設定する(ステップS901)。図示していないが、CPU201−2も同様にスレッドの切り替え時間をΔtに設定する。
次に、CPU201−1は、ハイパーバイザ204−1を起動する(ステップS902)。ハイパーバイザ204−1は一定周期で起動される。同様に、CPU201−2も、ハイパーバイザ204−2を起動する(ステップS903)。スレッドの切り替え時間が経過した後に、CPU201−1は、OS205−1によってスレッドを切り替える(ステップS904)。図示していないが、CPU201−2も同様にスレッドを切り替える。
スレッドを切り替えると、CPU201−1は、ハイパーバイザ204−1の機能によって、スレッド起動を検出する(ステップS905)。また、CPU201−2では、高優先度ソフトウェア209が起動されることを想定する。高優先度ソフトウェア209の起動後、CPU201−2は、ハイパーバイザ204−2の機能によって、高優先度スレッド起動を検出する(ステップS906)。検出後、CPU201−2は、ハイパーバイザ間通信によって、高優先度スレッドの起動を検出したことをハイパーバイザ204−1を含むすべてのハイパーバイザに通知する(ステップS907)。CPU201−1も同様に、ハイパーバイザ間通信によって、スレッドの起動を検出したことをハイパーバイザ204−2に通知する(ステップS908)。
通知後、CPU201−1は、ハイパーバイザ204−1によってタイムスライス補正処理を実行する(ステップS909)。タイムスライス補正処理の詳細は、図10にて後述する。ここで、CPU201−1は、CPU201−1以外のCPUにて高優先度スレッドが起動しているため、コンテンション状態となる可能性がある。コンテンション状態となっていた場合、CPU201−1は、タイムスライス補正処理内で、OS205−1に差分τを通知する。タイムスライス補正処理後、CPU201−1は、ハイパーバイザ204−1によって通常のハイパーバイザ処理を実行し(ステップS911)、ハイパーバイザ204−1を実行終了する(ステップS913)。実行終了後、CPU201−1は、一定周期後にステップS902の処理に移行する。
CPU201−2も同様に、ハイパーバイザ204−2によってタイムスライス補正処理を実行する(ステップS910)。CPU201−2は、CPU201−2以外のCPUにて高優先度スレッドが起動していないため、コンテンション状態とはならず、OS205−2に通知は行わない。タイムスライス補正処理後、CPU201−2は、ハイパーバイザ204−2によって通常のハイパーバイザ処理を実行し(ステップS912)、ハイパーバイザ204−2を実行終了する(ステップS914)。実行終了後、CPU201−2は、一定周期後にステップS903の処理に移行する。
CPU201−1がハイパーバイザ204−1によって差分τを通知後、CPU201−1は、OS・ハイパーバイザ間通信によって差分τを受信する(ステップS915)。続けて、CPU201−1は、補正値Δt’=Δt−τを算出する(ステップS916)。ステップS916での算出式は、(1)式を適用しているが、(2)式を適用してもよい。算出後、CPU201−1は、OS205−1によってスレッドの切り替え時間を補正値Δt’に設定する(ステップS917)。Δt’時間経過後、CPU201−1は、ステップS904の処理に移行する。
図10は、ハイパーバイザによるタイムスライス補正処理を示すフローチャートである。タイムスライス補正処理は、CPUs101に属するどのCPUでも実行されるが、図10では、CPU201−1にて実行される状態を説明する。また、タイムスライス補正処理は、ハイパーバイザの機能によって実行される。
CPU201−1は、別CPUでスレッドが起動されたかを判断する(ステップS1001)。スレッド起動の検出としては、CPU201−1は、タイムスライス補正処理の前に行われたステップS908の処理であるハイパーバイザ間通信によって検出する。別CPUでスレッドが起動されたと判断された場合(ステップS1001:Yes)、CPU201−1は続けて、別CPUで起動されたスレッドの優先度が、本CPUのスレッドの優先度より高いかを判断する(ステップS1002)。本CPUとは、実行主体となるCPUのことで、図10の説明ではCPU201−1に相当する。
別CPUで起動されたスレッドの優先度が本CPUのスレッドより高い場合(ステップS1002:Yes)、CPU201−1は、クロックカウンタから取得した処理時間ΔCを取得する(ステップS1003)。ΔCを取得後、所定のスレッド切り替え時間Δtが処理時間ΔCより大きいかを判断する(ステップS1004)。ΔtがΔC以下の場合(ステップS1004:No)、CPU201−1は、差分τ=ΔC−Δtを算出する(ステップS1006)。なお、ステップS1004:Noとなった場合が、CPU201−1にてアクセス競合によるコンテンション状態となった状態である。
別CPUでスレッドが起動していない場合(ステップS1001:No)、CPU201−1は、コンテンション状態が解消したかを判断する(ステップS1005)。コンテンション状態が解消した場合(ステップS1005:Yes)、CPU201−1は、差分τに0を設定する(ステップS1008)。アクセス競合によるコンテンション状態が解消したか否かの判断方法として、CPUは、一定期間のCPUの発行命令数とクロックカウンタを記録しておく。続けて、CPUはクロックカウンタ/発行命令数を算出し、算出された値が一定値より大きい場合にコンテンション状態が継続中であると判断し、算出された値が一定値以下の場合にコンテンション状態が解消したと判断する。
別CPUで起動されたスレッドの優先度が本CPUのスレッドより高くない場合、または、ΔtがΔCより大きい場合(ステップS1002:No、ステップS1004:Yes)、CPU201−1は、ステップS1005の処理に移行する。
ステップS1006の処理後、CPU201−1は、算出した差分τが割り込み禁止区間の最長パス時間lckより大きいかを判断する(ステップS1007)。差分τがlckより大きい場合(ステップS1007:Yes)、またはステップS1007の処理終了後、CPU201−1は、OSに差分τを通知する(ステップS1009)。差分τを通知後、CPU201−1はタイムスライス補正処理を終了する。また、差分τがlck以下である場合(ステップS1007:No)、またはコンテンション状態が解消していない場合(ステップS1005:No)、CPU201−1は、タイムスライス補正処理を終了する。
本実施の形態におけるマルチコアプロセッサシステム100の性能向上を測定するには、たとえば、プロファイラ、または、デバッガがあれば動作ログを解析して判別してもよい。また、プロファイラかデバッガがない場合、ソフトウェアを個別実行させた場合と、同時実行させた場合の実行性能を解析することにより判別してもよい。
以上説明したように、マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラムによれば、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったCPUを特定する。特定後、マルチコアプロセッサシステムは、スレッドの切り替えを行った実切り替え時間と所定の切り替え時間の差分によってスレッドの切り替え時間を設定する。これにより、割り込みイベントの検出間隔が減少する分検出頻度が増加するため、リアルタイム処理の応答性能を保証できる。
また、マルチコアプロセッサシステムは、任意のスレッドが割り当てられたCPUの検出をトリガーにして、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったCPUを特定してもよい。アクセス競合によるコンテンションは、複数のCPUでスレッドが割り当てられたときに発生するため、スレッドの割り当てをトリガーにすることにより、タイムスライスの補正を行う最もよいタイミングで実行することができる。
また、マルチコアプロセッサシステムは、任意のスレッドが割り当てられたCPUの検出をトリガーにする。その後、マルチコアプロセッサシステムは、切り替えを行ったCPUの切り替え後のスレッドの優先度より、検出されたCPUに割り当てられたスレッドの優先度が高い場合、所定の切り替え時間を越えて複数のスレッドの切り替えを行ったCPUを特定してもよい。
アクセス競合によるコンテンションは、複数のCPUでスレッドが割り当てられており、さらに、一つのCPUで高優先度のスレッドが割り当てられ、もう一方のCPUでは低優先度のスレッドが割り当てられた場合に発生する。したがって、切り替えを行ったCPUの切り替え後のスレッドの優先度より、検出されたCPUに割り当てられたスレッドの優先度が高いかを確認することにより、タイムスライスの補正を行う対象のCPUを最小限に絞ることができる。
また、マルチコアプロセッサシステムは、実切り替え時間と所定の切り替え時間との差分が所定の割り込み禁止時間を越えた場合に、所定の切り替え時間が短縮するように補正してもよい。マルチコアプロセッサシステムは、実切り替え時間と所定の切り替え時間との差分が所定の割り込み禁止時間を越えない限り、リアルタイム処理の応答性能を保証するように設計されている。したがって、差分が所定の割り込み禁止時間を越えた場合にタイムスライスの補正を行うことにより、リアルタイム処理の応答性能が破たんする可能性があるときに絞って、タイムスライスの補正を行うことができる。
また、マルチコアプロセッサシステムは、タイムスライスを補正したCPUに対して、アクセス競合中でない場合に、補正された切り替え時間を補正前の切り替え時間に設定してもよい。これにより、実切り替え時間を取得し所定の切り替え時間との比較を行わなくとも、アクセス競合か否かを判断することで、タイムスライスの補正を解除することができる。
なお、本実施の形態で説明したマルチコアプロセッサシステムの制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本マルチコアプロセッサシステムの制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本マルチコアプロセッサシステムの制御プログラムは、インターネット等のネットワークを介して配布してもよい。