以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、制御方法、および制御プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステムのハードウェア構成)
図1は、実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるCPUが並列されているプロセッサ群を例にあげて説明する。
マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、フラッシュROM104と、を備えている。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ105と、I/F(Interface)106と、を備えている。また、各構成部はバス108によってそれぞれ接続されている。本実施の形態にかかるハードウェアの構成は、集中共用システムを適用した構成となっている。
ここで、CPUs101は、マルチコアプロセッサシステムの全体の制御を司る。また、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は、ハイパーバイザ204−1の制御により、監視ライブラリ206−1を実行する。同様に、CPU201−1は、OS205−1の制御により、リアルタイムソフトウェア207を実行する。同様にCPU201−2も、ハイパーバイザ204−2、OS205−2を実行する。CPU201−2は、ハイパーバイザ204−2の制御により、監視ライブラリ206−2を実行する。同様に、CPU201−2は、OS205−2の制御により、ソフトウェア208を実行する。
CPU201−1がリアルタイムソフトウェア207を実行する際には、データへのアクセス先が2通りあり、アクセス経路209とアクセス経路210である。同様に、CPU201−2がソフトウェア208を実行する際にも、データへのアクセス先が2通りあり、アクセス経路211とアクセス経路212である。また、ハイパーバイザ204−1とハイパーバイザ204−2と、他のCPU上で動作しているハイパーバイザは、ハイパーバイザ間通信213を行う。
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にて優先して処理すべきであるリアルタイム処理を割り当ててもよい。
共有メモリ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からみると共有メモリにアクセスしていることとなるため、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が何もスレッドを実行していない場合に、省電力設定にする。また、CPU201−1、CPU201−2は、それぞれのハイパーバイザによって、本実施の形態での特徴である、コンテンションの監視をする監視ライブラリ206−1、監視ライブラリ206−2を実行する。
OS205−1、OS205−2は、それぞれ、CPU201−1、CPU201−2にて動作するプログラムであり、ハイパーバイザ204−1、ハイパーバイザ204−2上で動作する。たとえば、OS205−1は、リアルタイムソフトウェア207をCPU201−1に割り当てて実行させるスレッドのスケジューラを持つ。
監視ライブラリ206−1、監視ライブラリ206−2は、それぞれ、ハイパーバイザ204−1、ハイパーバイザ204−2上で動作するプログラムであり、共有メモリ203に対してアクセス競合によるコンテンションが発生していないかを監視する。監視の結果、コンテンションが発生している場合、監視ライブラリは、ハイパーバイザ間で情報を送信し、コンテンションを起こしたことを、他のハイパーバイザに送信する。
リアルタイムソフトウェア207は、OS205−1によってCPU201−1に割り当てられたプログラムである。リアルタイムソフトウェアの具体例としては、通信パケット処理がある。通信パケット処理は、プロトコルの決められた時間以内に処理を行う必要があり、リアルタイム処理を要求される。ソフトウェア208は、OS205−2によってCPU201−2に割り当てられたプログラムである。ソフトウェア208は、リアルタイム処理を要求されていない。前述のように、本実施の形態では、CPU201−1にてリアルタイム処理の保証を必要とするソフトウェアを実行している状態を想定する。
アクセス経路209は、CPU201−1がキャッシュメモリ202−1にアクセスする経路である。アクセス経路210は、CPU201−1が共有メモリ203にアクセスする経路である。アクセス経路209とアクセス経路210の違いとして、リアルタイムソフトウェア207がアクセスしたいデータがキャッシュメモリ202−1にあればアクセス経路209、なければアクセス経路210となる。アクセス経路211、アクセス経路212も同様で、アクセス経路211は、CPU201−2がキャッシュメモリ202−2にアクセスする経路である。アクセス経路212は、CPU201−2が共有メモリ203にアクセスする経路である。
ハイパーバイザ間通信213は、ハイパーバイザ間でメッセージの送受信をする通信である。具体的には、たとえば、CPU201−1にて、リアルタイムソフトウェア207を実行中にコンテンション状態になった場合に、ハイパーバイザ204−1からハイパーバイザ204−2を含むすべてのハイパーバイザにメッセージをブロードキャスト送信する。
(マルチコアプロセッサシステムの機能的構成)
次に、マルチコアプロセッサシステム100の機能的構成について説明する。図3は、マルチコアプロセッサシステム100の機能的構成を示すブロック図である。マルチコアプロセッサシステム100は、優先度検出部305と、発行命令効率算出部306と、コンテンション検出部307と、特定部308と、制御部311と、を含む構成である。この制御部となる機能(優先度検出部305〜制御部311)は、具体的には、たとえば、図1に示したROM102、RAM103、フラッシュROM104などの記憶装置に記憶されたプログラムをCPUs101が実行することにより、その機能を実現する。
また、CPU201−1、CPU201−2、・・・、CPU201−nは、ハイパーバイザとOS/ソフトウェアを実行する。さらに、一点破線で分割された領域のうち、領域301−1に図示している優先度検出部305〜ハイパーバイザ間メッセージ送信部309は、CPU201−1がハイパーバイザ204−1の機能の一部として実行することにより実現する。同様に、領域301−2内に図示しているハイパーバイザ間メッセージ受信部310、制御部311は、CPU201−2が、ハイパーバイザ204−2の機能の一部として実行することにより実現する。
また、図示していないが、CPU201−1以外のコアが実行しているハイパーバイザにも、優先度検出部305〜ハイパーバイザ間メッセージ送信部309の機能を有している。同様に、CPU201−2以外のコアが実行しているハイパーバイザにも、ハイパーバイザ間メッセージ受信部310、制御部311の機能を有している。また、優先度検出部305〜ハイパーバイザ間メッセージ送信部309は、監視ライブラリ206−1に相当する。同様に、ハイパーバイザ間メッセージ受信部310、制御部311は、監視ライブラリ206−2に相当する。
また、領域302−1に図示しているOSスケジューラ監視部304−1、リアルタイムソフトウェア207、ソフトウェア312は、CPU201−1がOS205−1の機能の一部として実行することにより実現する。優先度テーブル303−1は、ハイパーバイザ204−1またはOS205−1からアクセスできるテーブルである。
また、領域302−2に図示しているOSスケジューラ監視部304−2、ソフトウェア208、ソフトウェア313、nice値設定部314、ダミースレッド起動部315は、CPU201−2がOS205−2の機能の一部として実行することにより実現する。優先度テーブル303−2は、ハイパーバイザ204−2またはOS205−2からアクセスできるテーブルである。
優先度テーブル303−1、優先度テーブル303−2は、マルチコアプロセッサシステム100で実行される処理と処理の優先度を関連付けて管理するテーブルである。優先度テーブル303−1の内容の詳細は、図7にて後述する。
OSスケジューラ監視部304−1、OSスケジューラ監視部304−2は、CPU201−1、CPU201−2に割り当てるソフトウェアを監視する機能を有する。具体的には、たとえば、リアルタイムソフトウェア207がCPU201−1に割り当てられており、リアルタイムソフトウェア207がRAM103やフラッシュROM104上にある共有資源にアクセス要求する場合を想定する。
この時、既に他のソフトウェアが共有資源を使用すると宣言中であった場合に、OSスケジューラ監視部304−1は、リアルタイムソフトウェア207の実行状態を待ち状態にする。続けて、OSスケジューラ監視部304−1は、実行可能状態となっていた別のソフトウェア、たとえばソフトウェア312を実行状態にして、CPU201−1に割り当てる。
また、別の具体例として、たとえば、リアルタイムソフトウェア207が所定期間以上CPU201−1に割り当てられていた場合にも、OSスケジューラ監視部304−1は、別のソフトウェアをCPU201−1に割り当てる。また、前述のように、CPUに割り当てられたソフトウェアを切り替えることを、ディスパッチという。
また、OSスケジューラ監視部304−1は、新しくソフトウェアを起動する際に、ソフトウェアの実行単位となるスレッドとして起動する。各スレッドは、スタック領域、プログラムカウンタを含むレジスタ情報等を持つ。OSスケジューラ監視部304−1は、ディスパッチを行うたびに、現在実行中のレジスタ情報等を共有メモリ203に退避し、次のソフトウェアのレジスタ情報等を共有メモリ203から取得し、CPUのレジスタ情報に設定する。
また、マルチコアプロセッサシステム100は、スレッドの集合から、1つのプロセスを構成してもよい。スレッド間ではメモリ空間が共通であるが、プロセス間ではメモリ空間が独立しており、お互いのメモリ空間に直接アクセスできない。本実施の形態では、スレッドを用いて説明しているが、プロセスに置き換えてもよい。
別のソフトウェアをCPU201−1に割り当てる際に、複数の割り当て候補となるソフトウェアが存在する場合、OSスケジューラ監視部304−1は、優先度テーブル303−1に基づいて割り当てを行ってもよい。また、OSスケジューラ監視部304−1は、それぞれのソフトウェアの割り当て時刻に基づいて、割り当て時刻が一番古いソフトウェアを割り当ててもよい。
優先度検出部305は、複数のコアのうち、実行優先度が最も高い第1のコアを検出する機能を有する。ここでのコアは、CPUs101を構成しているCPU201−1、CPU201−2、・・・、CPU201−nに相当する。また、マルチコアプロセッサシステム100がASMPであり、リアルタイム処理が割り当てられたCPUが存在するならば、CPUによって第1のコアを検出してもよい。
具体的には、たとえば、CPU201−1は、現在割り当てられているソフトウェアの優先度を、優先度テーブル303−1から取得し、優先度が“リアルタイム”の場合に、実行優先度が最も高い第1のコアとする。なお、検出した第1のコアの情報は、キャッシュメモリ202−1、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
発行命令効率算出部306は、コアごとに、コアが命令を発行した発行命令数とコアのサイクル数に基づいて、発行命令効率を算出する機能を有する。発行命令数は、所定時間内にCPUが命令を行った数である。発行命令数はCPUの特殊なレジスタである発行命令カウンタIに格納されており、ハイパーバイザは、スーパバイザモードに移行することにより、発行命令カウンタIの値を取得する。サイクル数は、所定時間内にCPUが入力されたクロックの数である。サイクル数はCPUのレジスタであるクロックカウンタCに格納されている。発行命令効率は、1命令にかかったクロック数であり、C/Iにて算出される。発行命令効率算出部306は、発行命令効率をI/Cとして算出し、後述する閾値τも逆数にして比較してもよい。
具体的には、たとえば、ハイパーバイザ204−1が起動するたびに、CPU201−1は、C/Iを算出する。ハイパーバイザは、数十マイクロ秒〜数ミリ秒に1回の間隔で実行されるため、その時間での発行命令カウンタIとクロックカウンタCを取得し、C/Iを算出する。なお、算出された発行命令効率は、キャッシュメモリ202−1、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
コンテンション検出部307は、発行命令効率算出部306によって算出された発行命令効率と所定の閾値とに基づいて、アクセス競合を検出する機能を有する。所定の閾値とは、仕様から設定できる値であり、τで表す。閾値τの具体的な設定方法は、図4にて後述する。具体的には、たとえば、発行命令数が閾値τより大きい場合、CPU201−1は、共有メモリ203に対するアクセス競合によるコンテンションが発生していることを検出する。なお、検出された結果は、キャッシュメモリ202−1、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
特定部308は、複数のコアのうち、優先度検出部305によって検出された第1のコアのうち、共有メモリ203に対してアクセス競合を発生させた第2のコアを特定する機能を有する。また、特定部308は、共有メモリ203に対してアクセス競合を発生させており第2のコアと競合する第3のコアを特定してもよい。アクセス競合によるコンテンション発生を検出する際にCPU201−1は、コンテンション検出部307によって検出してもよい。
具体的には、たとえば、CPU201−1は、優先度検出部305によって“リアルタイム”であるCPUから、コンテンションを発生しているCPUを検出して、第2のコアとして特定する。また、CPU201−1は、複数のCPUからコンテンションを発生しているCPUを検出して、第3のコアとして特定してもよい。なお、特定された第2のコア、または第3のコアの情報は、キャッシュメモリ202−1、CPU201−1の汎用レジスタなどの記憶領域に記憶される。
ハイパーバイザ間メッセージ送信部309は、他のハイパーバイザにメッセージをブロードキャスト送信する機能を有する。具体的には、たとえば、リアルタイム処理を行っており、コンテンション発生を検出したハイパーバイザ204−1は、バス108を通じてハイパーバイザ204−2や、その他のハイパーバイザに対して、メッセージをブロードキャスト送信する。なお、送信したメッセージの内容は、キャッシュメモリ202−1、CPU201−1の汎用レジスタなどの記憶領域に記憶されてもよい。
ハイパーバイザ間メッセージ受信部310は、他のハイパーバイザが送信したメッセージを受信する機能を有する。具体的には、たとえば、ハイパーバイザ204−2は、リアルタイム処理を行っておりコンテンション発生を検出したハイパーバイザ204−1からメッセージを受信する。なお、受信したメッセージの内容は、キャッシュメモリ202−2、CPU201−2の汎用レジスタなどの記憶領域に記憶される。
制御部311は、複数のコアのうち、第1のコアと特定部308によって特定された第2のコアを除いた第3のコアに対し、共有メモリ203にアクセスしないスレッドを実行するように制御する機能を有する。また、制御部311は、第2のコアを除いた第3のコアに対し、共有メモリ203にアクセスしないスレッドを実行するように制御してもよい。また、特定部308によって第3のコアが特定されている場合、制御部311は、特定された第3のコアに対し、共有メモリ203にアクセスしないスレッドを実行するように制御してもよい。
また、共有メモリ203にアクセスしないスレッドを実行する期間は、アクセス競合が発生した期間のうち、所定の期間である。所定の期間とは、OS205−2が保持しているタイムスライスの値となる。また、所定の期間は、アクセス競合が発生した期間のうち、第3のコアに割り当てられていたスレッドと、共有メモリ203にアクセスしないスレッドとで、時分割した期間としてもよい。
具体的には、たとえば、特定された第2のコアは、ハイパーバイザ間通信を行うため、メッセージを受信したCPUが第3のコアとなり、共有メモリ203にアクセスしないスレッドを実行するようにOSスケジューラ監視部304−2を制御する。制御内容としては、制御部311は、nice値設定部314か、または、ダミースレッド起動部315を実行するようにOSスケジューラ監視部304−2を制御する。
nice値設定部314は、現在実行されているソフトウェアのnice値を設定する機能を有する。nice値とは、POSIX(Portable Operating System Interface for UNIX(登録商標))にて定義されているniceコマンドで設定する値である。niceコマンドによって設定値を変更することにより、OS205−2はソフトウェアの実行優先度を制御する。
具体的には、たとえば、リアルタイム処理を要求されないソフトウェアに対して、nice値を上昇させると、優先度が低くなる。niceコマンドの実装の一例としては、OS205−2は、ソフトウェアの割り当て終了時刻にnice値を加算した値を算出する。次に、OSスケジューラ監視部304−2は、加算した値に基づいて、一番小さい値を持つソフトウェアをディスパッチ対象に決める、という方法をとってもよい。
結果、対象のソフトウェアのnice値が大きいほど対象のソフトウェアの優先度が低くなる。したがって、もしOS205−2がPOSIX仕様に準拠していなく、niceコマンドが存在しない場合でも、前述の処理を加えることでnice値設定部314を実現してもよい。なお、設定された値は、RAM103、フラッシュROM104などの記憶領域に記憶される。
ダミースレッド起動部315は、共有メモリ203にアクセスしないスレッドを生成する機能を有する。具体的には、たとえば、CPU201−2は、CPUに対して何も動作しないコードであるnopを一定時間行うスレッドを起動する。また、nice値設定部314とダミースレッド起動部315は、OSスケジューラ監視部304−2によってアクセス競合によるコンテンション発生の期間のうち少なくとも一部の期間中に実行する。
図4は、コンテンション状態を示す説明図である。初めに、CPU201−1は、ハイパーバイザ204−1とリアルタイムソフトウェア207を実行しており、CPU201−2は、ハイパーバイザ204−2とソフトウェア208を実行している。それぞれのCPUは、実行中のソフトウェアによってキャッシュメモリにアクセスするか、または、共有メモリ203にアクセスする。
ハイパーバイザは周期的に起動しており、起動間隔は、数十マイクロ秒から、数ミリ秒である。図4では、どちらのメモリにアクセスしたかという動作に従って、示した時間を、時間401、時間402、時間403に分割して示している。時間401と時間403にて、CPU201−1とCPU201−2は、リアルタイムソフトウェア207と、ソフトウェア208によって同時に共有メモリ203にアクセスしていないため、コンテンション状態とはならない。
しかし、時間402にて、CPU201−1とCPU201−2は、同時に共有メモリ203にアクセスしているため、共有メモリ203に対してアクセス競合によるコンテンション状態となっている。コンテンション状態になると、CPU201−1は、メモリアクセスにかかる時間が数百サイクルとなり、リアルタイムソフトウェア207の処理遅延を発生させてしまう。結果、CPU201−1は、リアルタイムソフトウェア207に求められている時刻までに処理を終了することができない可能性があり、リアルタイム処理の保証を行えない状態となる。
次に、リアルタイム処理の保証について説明する。リアルタイム処理は、決められた時間以内に応答を返す必要があり、その時間を、Δ[秒]とする。ここで、リアルタイム処理を行うCPU201−1のクロックサイクルをclk[1/秒]とする。したがって、時間Δを消費する間に許されるCPU201−1のクロックのカウント数はΔ・clk[個]となる。もしコンテンション状態になっており、CPU201−1がΔ・clk[個]のカウント数で1命令を実行できない場合に、リアルタイム処理の保証を行えないことになる。
1命令あたりのクロック数は、一定時間内での発行命令カウンタIと、クロックカウンタCに基づいて、C/Iを算出することで求められる。ここで、閾値τを、τ=Δ・clkで示す。C/Iが閾値τ以下の場合、CPU201−1は、リアルタイム処理の保証を行える状態であり、C/Iが閾値τより大きい場合、CPU201−1は、リアルタイム処理の保証を行えない状態である。
Δやclkは、仕様策定時に決定可能な値であるため、閾値τも仕様策定時に決定可能である。具体的には、たとえば、Δ=2[マイクロ秒]、clk=500[MHz]である場合、τ=1000となる。通常、CPU201−1は、共有メモリ203へのアクセスは数十カウント消費する。しかし、共有メモリ203へのアクセス競合によるコンテンション発生時には、数十〜数百カウント消費し、CPU201−1の動作効率は最大でピーク時の30%にまで低減することがある。
図5は、コンテンションが解消された状態を示す説明図である。図5も図4と同様に、CPU201−1は、ハイパーバイザ204−1とリアルタイムソフトウェア207を実行しており、CPU201−2は、ハイパーバイザ204−2とソフトウェア208を実行している。図4では、時間402にて、CPU201−1とCPU201−2が同時に共有メモリ203にアクセスし、アクセス競合によるコンテンションが発生していた。
しかし、図5での時間402でのCPU201−2は、ソフトウェア208とダミースレッドを交互に実行することにより、アクセス競合によるコンテンションを解消している。結果、CPU201−1は、リアルタイムソフトウェア207に求められている時刻までに処理を終了することができ、リアルタイム処理を保証できる。
図6は、本実施の形態を適用したマルチコアプロセッサシステム100の性能比を示す説明図である。図6の横軸は、バス108に設定したバッファ段数であり、縦軸は従来例のバッファ段数1を基準とした性能比である。従来例のバッファ段数1と等しい性能の場合、縦軸が1.00にプロットされることになる。本実施の形態にかかるマルチコアプロセッサシステム100に関して、バッファ段数ごとに、従来例との性能比をプロットして曲線で結んだ結果が曲線601である。また、Δ=1[ミリ秒]、clk=600[MHz]である。同様に、従来例にかかるマルチコアプロセッサシステムに関して、バッファ段数ごとに、従来例との性能比をプロットして曲線で結んだ結果が曲線602である。
また、曲線601、曲線602は、従来例のバッファ段数1を基準として、それより性能比がよい場合には領域603に位置し、悪い場合には領域604に位置する。領域603に位置する場合、マルチコアプロセッサシステム100はリアルタイム処理を保証でき、領域604に位置する場合、リアルタイム処理を保証できないことになる。マルチコアプロセッサシステムは、バスのバッファ段数が増えるとバス利用の効率をあげることができるが、リアルタイム処理を保証することが難しくなる。
従来例にかかる曲線602は、バッファ段数が5段以上では領域604に位置している。したがって、従来例にかかるマルチコアプロセッサシステムは、バッファ段数が5段以上になると、リアルタイム処理保証を行えない。本実施の形態にかかる曲線601では、バッファ段数が13段となるまで領域603に位置している。したがって、本実施の形態にかかるマルチコアプロセッサシステム100は、バッファ段数が13段まで、リアルタイム処理を保証することができる。
図7は、優先度テーブル303−1の記憶内容の一例を示す説明図である。優先度テーブル303−1は、処理名称フィールドと、実行優先度フィールドで構成する。なお、優先度テーブル303−2も同様のデータが設定されている。処理名称フィールドは、具体的な処理の内容を記述している。実際には、処理内容を記述したプログラムがROM102、RAM103、フラッシュROM104のいずれかに存在し、CPU201−1は、プログラムをロードし、スレッドとして実行する。実行優先度フィールドは、対応する処理名称の実行する際の優先度を設定している。
たとえば、“通信パケット受信”処理は、一定時間内にパケット処理を行わないと、タイムアウトになるため、リアルタイム処理を保証する必要がある。したがって、実行優先度フィールドは、“リアルタイム”となる。続けて、“描画レンダリング”処理は、通常の処理であって、リアルタイム処理を保証する必要がない。したがって、実行優先度フィールドは、“通常”となる。同様に、“UI入力”処理は、仕様によりユーザに対する応答時間を決められている場合、リアルタイム処理を保証する必要がある。“辞書の先読み検索”処理は、リアルタイム処理を保証する必要がない。
コンテンションが起こる状態として、たとえば、マルチコアプロセッサシステム100が、Webブラウジング処理を行っている状態を想定する。前述の状態でCPU201−1は、通信パケット受信処理を実行しており、CPU201−2は、描画レンダリング処理を実行している。描画レンダリング処理は、メモリアクセスが多く、通信パケット受信処理と共有メモリ203に対するアクセス競合を起こす可能性が高い。
本実施の形態を適用した状態では、前述の状態のようにアクセス競合によるコンテンションが発生した際に、CPU201−2が、OS205−2によって描画レンダリング処理のnice値を上昇させる。OS205−2は、nice値を上昇させた描画レンダリング処理をよりまばらになるようにCPU201−2に割り当てる。結果、マルチコアプロセッサシステム100は、アクセス競合によるコンテンションを回避でき、描画レンダリング処理のリアルタイム処理を保証できる。
また別のコンテンション状態として、たとえば、マルチコアプロセッサシステム100が、ユーザからの文字入力を受け付けている状態を想定する。前述の状態で、CPU201−1は、UI入力処理を実行しており、CPU201−2は、辞書の先読み検索処理を実行している。辞書の先読み検索処理は、I/Oアクセスが多く、通信パケット受信処理と共有メモリ203に対するアクセス競合を起こす可能性が高い。
本実施の形態を適用した状態では、前述の状態のようにアクセス競合によるコンテンションが発生した際に、CPU201−2が、OS205−2によって辞書の先読み検索処理のnice値を上昇させる。OS205−2は、nice値を上昇させた辞書の先読み検索処理をよりまばらになるようにCPU201−2に割り当てる。結果、マルチコアプロセッサシステム100は、アクセス競合によるコンテンションを回避でき、UI入力処理のリアルタイム処理を保証できる。
図8は、ハイパーバイザによるメッセージ送信処理を示すフローチャートである。メッセージ送信処理は、ハイパーバイザが起動するたびに行われる。CPU201−1は、リアルタイムソフトウェアが実行中かを確認する(ステップS801)。リアルタイムソフトウェアが実行中の場合(ステップS801:Yes)、CPU201−1は、発行命令カウンタIを取得する(ステップS802)。続けて、CPU201−1は、クロックカウンタCを取得する(ステップS803)。取得後、CPU201−1は、コンテンション中かの判断値となるC/I値を算出する(ステップS804)。算出後、CPU201−1は、C/I値と閾値τを比較する(ステップS805)。
C/I値が閾値τより大きい場合(ステップS805:Yes)、コンテンション中となり、CPU201−1は、nice値上昇メッセージを生成する(ステップS806)。このメッセージを受信したCPUは、現在動作中のソフトウェアのnice値を上昇させ、nice値が上昇したソフトウェアは優先度が下がるため、現在動作中のソフトウェアの実行をまばらにすることになる。
生成後、CPU201−1は、ハイパーバイザ間にメッセージをブロードキャスト送信する(ステップS807)。送信後、CPU201−1は、通常のハイパーバイザ処理を実行し(ステップS810)、処理を終了する。C/I値が閾値τ以下の場合(ステップS805:No)、コンテンション中ではないことになり、CPU201−1は、ステップS810の処理を行い、処理を終了する。
リアルタイムソフトウェアが実行中でない場合(ステップS801:No)、CPU201−1は、続けて、実行中のソフトウェアのnice値が初期値かを確認する(ステップS808)。初期値でない場合(ステップS808:No)、CPU201−1は、実行中のソフトウェアのnice値を初期値に設定し(ステップS809)、ステップS810の処理に移行する。nice値が初期値の場合(ステップS808:Yes)、CPU201−1は、ステップS810の処理に移行する。
nice値が初期値でない場合、CPU201−1で実行していた処理がコンテンションの原因だったことを示しており、CPU201−1は、ステップS809の処理にて、コンテンション回避のために低下していた処理を元に戻すことができる。コンテンションを解決する場合、コンテンションの原因となっている処理を、OSのスケジューラが切り替え可能とする最小単位の時間で休止することで、コンテンションの解決を得られるケースが多い。もし、最小単位の時間で解決しないことが多い場合、CPU201−1は、ステップS808:Noの後にC/I値を算出し、閾値τと比較してコンテンションが解決したことを確認した後にステップS809の処理を実行してもよい。
図9は、ハイパーバイザによるメッセージ受信処理を示すフローチャートである。CPU201−2は、ハイパーバイザ間のメッセージを受信する(ステップS901)。本実施の形態では、CPU201−1が送信したメッセージを受信する。次に、CPU201−2は、自身のCPUがメッセージをブロードキャストしたかを確認する(ステップS902)。
ブロードキャストしている場合(ステップS902:Yes)、リアルタイム処理中でコンテンション中であり、スレッドの制御を行わないため、CPU201−2は、処理を終了する。ブロードキャストしていない場合(ステップS902:No)、コンテンションの原因となるので、CPU201−2は、共有メモリ203にアクセスしない処理を実行する。
たとえば、CPU201−2は、現在動作中のソフトウェアのnice値を上昇させるようにOS205−2に指示する(ステップS903)。もし、nice値の機能を持っていないOSの場合、CPU201−2は、OS205−2に対してダミースレッドを起動させるよう指示してもよい。
また、CPU201−2は、ステップS902:Noにて、リアルタイムソフトが動作していない場合、C/I値を算出し、C/I値と閾値τを比較しコンテンション中であった場合に、スレッドの制御を行ってもよい。この場合、C/I値の比較の分だけ処理が増加するが、コンテンションが発生しているCPUだけを対象にすることができる。
また、本実施の形態では、CPU201−1は、メッセージ送信処理にて優先度をリアルタイム実行か否かという2段階で分けたうえでコンテンションのチェックをしたが、優先度を3段階以上に分けてコンテンションのチェックをしてもよい。
その場合の処理を行う例として、CPU201−1は、優先度テーブル303−1の実行優先度フィールドの取りうる値を3段階以上にする。たとえば、“UI入力”処理の実行優先度が“リアルタイム”と“通常”の間である“高優先”であり、“辞書の先読み検索”処理の実行優先度が“通常”の下である“低優先”とする。さらに、メッセージ送信処理では、ステップS801の処理にて、「リアルタイムソフトウェアが実行中か?」を「低優先以外の優先度を持つソフトウェアが実行中か?」に置き換える。さらに、ステップS806の処理にて、メッセージの内容に、現在動作中のソフトウェアの優先度を付与する。
続けて、メッセージ受信処理では、ステップS902:Noの処理の後とステップS903の処理の間に新たな条件として、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか?」を付け加える。条件がYesの場合、実行主体となるCPUは、ステップS903の処理を行い、Noの場合には、ステップS903の処理を行わず処理を終了する。
前述した処理の状態にて、たとえば、図7にて前述した高優先であるUI入力処理を実行しているCPUは、ステップS801にてYesとなり、ステップS807の処理にて他のコアにメッセージをブロードキャスト送信する。前述のメッセージを通常の優先度である描画レンダリングを実行しているCPUが受信した場合、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか?」が、Yesとなり、ステップS903の処理を行い、nice値の制御を行う。
もし、前述のメッセージをリアルタイム処理が要求される通信パケットを実行しているCPUが受信した場合、「受信したメッセージの優先度が現在動作中のソフトウェアの優先度より高いか?」が、Noとなるため、nice値の制御を行わない。このように、メッセージ送信処理を行うCPUは、優先度を3段階以上に分けてコンテンションのチェックを行い、メッセージ受信処理を行うCPUは、優先度の判断を加えることで、優先度の低い処理を行っているCPUの処理をまばらにする。これにより、マルチコアプロセッサシステム100は、優先度の高い処理を先に処理することができる。
また、前述の実行優先度が3段階以上の処理の場合でステップS903を実行する際に、受信したメッセージの優先度と現在動作中のソフトウェアの優先度に基づいて、nice値の上昇させる値を設定してもよい。たとえば、受信したメッセージの優先度がリアルタイムであり、現在動作中のソフトウェアの優先度が通常であった場合、優先度が2段階離れているため、nice値を2上昇させる、という処理を行ってもよい。このように、ハイパーバイザ204−2によってnice値を段階的に制御することで、OS205−2は、優先度の低い処理ほど、よりまばらに実行することになり、CPU201−1に割り当てられているリアルタイム処理を先に処理することができる。
また、実行優先度が2段階の状態においても、nice値の上昇させる値を2段階以上あげる処理を追加してもよい。具体的には、たとえば、CPU201−2が、メッセージ受信処理を受けてnice値を1上昇させた後に、nice値を初期値に戻す前に、メッセージ受信した場合である。この場合、nice値を上昇させたにもかかわらず、まだコンテンション状態であることを意味しているため、CPU201−2はさらにnice値を1上昇させるように設定することで、コンテンション状態がより解消しやすくなる。
以上説明したように、マルチコアプロセッサシステム、制御方法、および制御プログラムによれば、リアルタイム処理でコンテンション中のCPUを特定する。そして、リアルタイム処理中のCPUと特定されたCPUを除いたすべてのCPUが、共有メモリにアクセスしないスレッドを実行するよう制御する。これにより、マルチコアプロセッサシステムは、リアルタイム処理を保証できる。
また、マルチコアプロセッサシステムは、特定されたCPUを除いたすべてのCPUに対し、共有メモリにアクセスしないスレッドを実行してもよい。これにより、特定されたCPUから、特定されたCPUを除いたすべてのCPUに対して制御依頼をする際に、競合している相手を探さず、自身のCPU以外のすべてのCPUに制御依頼を行うことで検索処理を行わないため、処理を簡略化できる。
また、マルチコアプロセッサシステムは、複数のCPUのうち、コンテンション中のCPUを特定し、特定されたCPUが、共有メモリにアクセスしないスレッドを実行するよう制御してもよい。これにより、マルチコアプロセッサシステムは、コンテンションを起こしたCPUのみスレッドを制御させ、コンテンションを起こしていないCPUに対しては、通常処理を続けさせることができる。
また、マルチコアプロセッサシステムは、コンテンションが発生した期間のうち、スレッドを制御するCPUに対して、制御するCPUに割り当てられていたスレッドの実行時間と、メモリにアクセスしないスレッドの時間を、時分割で分割して割り当ててもよい。これにより、マルチコアプロセッサシステムは、コンテンションを解消し、また、制御するCPUに割り当てられていたスレッドの処理も行うことができる。
また、マルチコアプロセッサシステムは、CPUごとに、CPUの命令を発行した発行命令数とCPUのサイクル数とに基づいて、発行命令効率を算出し、算出された発行命令効率と所定の閾値τに基づいて、コンテンションを検出してもよい。これにより、マルチコアプロセッサシステムは、アクセス競合によるコンテンションを検出することができ、リアルタイム処理を保証できる。
また、マルチコアプロセッサシステムは、CPUに割り当てられたスレッドの実行優先度が最も高いコアを検出してもよい。これにより、マルチコアプロセッサシステムは、リアルタイム処理の保証を必要とするスレッドを決めておくことで、そのスレッドがどのCPUに割り当てられていても、コンテンションを解消しリアルタイム処理の保証を行うことができる。
なお、本実施の形態で説明した制御方法は、予め用意されたプログラムをコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本制御プログラムは、インターネット等のネットワークを介して配布してもよい。