【解決手段】評価装置は、アプリケーション201からハードウェアを起動する処理を検出する検出部と、ハードウェアを起動する処理を検出したときにアプリケーション201の実行を中断する中断部と、ハードウェアの挙動をシミュレートすることで推定されたハードウェアのメモリアクセスパターンを負荷として設定する設定部と、負荷を加えてアプリケーション201の実行を再開する再開部と、ハードウェアの総合的な振る舞いを収集する収集部とを備える。
【発明を実施するための形態】
【0007】
以下、図面を参照して実施形態を説明する。
図1は、実施形態に係るシステムLSIの評価システムの構成を示すブロック図である。
図1に示すように、評価システム1は、システムLSI2と、コンピュータ3とを有する。システムLSI2とコンピュータ3とは、通信できるように接続されている。通信は、有線で行われてもよいし、無線で行われてもよい。また、通信の方式も、特に限定されない。
【0008】
システムLSI2は、プロセッサ21と、メモリ22と、インターフェイス23と、ハードウェア24とを有する。プロセッサ21と、メモリ22と、インターフェイス23と、ハードウェア24とはバス25を介して相互に通信できるように接続されている。
【0009】
プロセッサ21は、例えばCPU(Central Processing Unit)である。プロセッサ21は、システムLSI2における各種の処理を制御する。プロセッサ21は、複数のCPU等から構成されるマルチコアプロセッサであってもよい。
【0010】
メモリ22は、RAM(Random Access Memory)及びROM(Read Only Memory)を含む。RAMは、読み書き可能な半導体メモリである。RAMは、プロセッサ21及びハードウェア24等で使用される各種のデータを一時的に記憶する作業メモリである。ROMは、読み出し専用の半導体メモリである。ROMは、システムLSI2の動作に必要なプログラムを記憶する。このプログラムは、オペレーティングシステム(OS)、アプリケーションを含む。また、このプログラムは、ハイパバイザを含む。ハイパバイザは、ハードウェアの上で直接動作する制御プログラムである。OSは、ハイパバイザ上で動作する。
【0011】
インターフェイス23は、システムLSI2とコンピュータ3との通信のためのシステムLSI2側のインターフェイスである。インターフェイス23は、例えばPCIである。インターフェイス23は、特に限定されない。
【0012】
ハードウェア24は、システムLSI2に実装されている各種のハードウェアである。ハードウェア24は、特に限定されない。例えばメモリ22には、ハードウェア24として実装されているハードウェア毎に制御レジスタ用のメモリ領域が割り当てられる。例えば、アプリケーションの実行中に特定のハードウェアに割り当てられたメモリ領域へのアクセス要求があったとき、対応するハードウェアを起動するための処理が行われる。なお、実施形態では、システムLSI2にまだ実装されていないハードウェアのためのメモリ領域も割り当てられている。
【0013】
コンピュータ3は、例えばパーソナルコンピュータである。コンピュータ3は、プロセッサ31と、メモリ32と、ストレージ33と、インターフェイス34とを有する。プロセッサ31と、メモリ32と、ストレージ33と、インターフェイス34とはバス35を介して相互に通信できるように接続されている。
【0014】
プロセッサ31は、例えばCPUである。プロセッサ31として、GPU(Graphic Processing Unit)を用いることもできる。プロセッサ31は、コンピュータ3における各種の処理を制御する。プロセッサ31は、複数のCPU等から構成されていてもよい。
【0015】
メモリ32は、RAMを含む。RAMは、読み書き可能な半導体メモリである。RAMは、プロセッサ31等で使用される各種のデータを一時的に記憶する作業メモリである。
【0016】
ストレージ33は、例えばハードディスクである。ストレージ33は、コンピュータ3の動作に必要なプログラムを記憶する。このプログラムは、オペレーティングシステム(OS)等を含む。また、ストレージ33は、システムLSI2のハードウェアの挙動をシミュレートするためのシミュレーションモデルを記憶している。
【0017】
インターフェイス34は、システムLSI2とコンピュータ3との通信のためのコンピュータ3側のインターフェイスである。インターフェイス34は、例えばPCIである。インターフェイス34は、特に限定されない。
【0018】
図2は、評価システム1の機能ブロック図である。ここで、
図2の太線矢印は、ハードウェアに対する要求であることを示す。また、
図2の細線矢印は、ソフトウェアに対する要求であることを示す。
【0019】
実施形態において、システムLSI2のアプリケーション201は、OSの制御下で動作する。システムLSI2のOSは、例えばRTOS(Real-time OS)202である。また、アプリケーション201は、システムLSI2に既に実装されているハードウェア24である既存ハードウェア(HW)24aを用いる処理(既存処理)201aだけでなく、システムLSI2に仮想的に用意された、これから実装予定の新規のハードウェア24である仮想新規ハードウェア(HW)24bを用いる処理(新規処理)201bを含んでいてもよい。また、アプリケーション201は、システムLSIの評価のためのプロファイラ201cを含む。プロファイラ201cは、ハードウェア24として実装されているハードウェアタイマを参照しながら、アプリケーション201のプロファイルを収集する。このアプリケーション201のプロファイルは、例えばアプリケーション201の実行時のメモリアクセス帯域、メモリアクセス量、計算量とメモリアクセス量との比(演算強度)といったメモリアクセスに係るプロファイルを含む。プロファイラ201cの方式は、サンプリング方式、出入り口監視方式等が用いられ得る。プロファイラ201cで収集されたプロファイルは、例えばハイパバイザ203によって解析され得る。プロファイラ201cは、ハイパバイザ203にあってもよい。
【0020】
一方で、システムLSI2の評価のためのハードウェアの仮想化は、ハイパバイザ203の制御下で行われる。ハイパバイザ203は、プロセッサ21及びハードウェア24を含む、システムLSI2のハードウェア上で直接動作する。ハイパバイザ203は、メモリアクセストラップ部203aと、仮想ハードウェア制御レジスタモデル203bと、仮想タイマ制御部203cと、仮想負荷制御部203dとを有する。ハイパバイザ203は、必要に応じてプロセッサ21等を利用してメモリアクセストラップ部203aと、仮想ハードウェア制御レジスタモデル203bと、仮想タイマ制御部203cと、仮想負荷制御部203dとしての動作を実行する。つまり、ハイパバイザ203は、システムLSI2の評価装置として動作する。
【0021】
メモリアクセストラップ部203aは、プロセッサ21のMMU(Memory Management Unit)を利用して、RAM22の特定のアドレスへのアクセスを検出したときに、以後の処理をハイパバイザ203に移す。
【0022】
仮想ハードウェア制御レジスタモデル203bは、仮想ハードウェア毎の特有の処理を再現するように構成されたモデルである。仮想ハードウェア毎の特有の処理とは、例えばハードウェア毎の制御レジスタとしての動作、この制御レジスタにアクセスされたときのハードウェアとしての処理を含む。
【0023】
仮想タイマ制御部203cは、アプリケーション201及びRTOS202で見える仮想タイマを制御する。前述したように、アプリケーション201のプロファイラ201cは、基本的にはハードウェアタイマを参照しながらアプリケーションのプロファイルを収集する。仮想タイマ制御部203cが仮想タイマの設定をしたとき、アプリケーション201及びRTOS202は仮想タイマを参照することになる。例えば、仮想タイマ制御部203cがハイパバイザ203上で行われていた処理の時間をゼロにするように仮想タイマを操作すると、ハイパバイザ203上で行われていた処理のプロファイルはプロファイラ201cで集計されなくなる。
【0024】
仮想負荷制御部203dは、ハードウェアのシミュレーション結果に基づいて、一定のメモリアクセス負荷を与える。仮想負荷制御部203dは、DMAC(Direct Memory Access Controller)等のメモリアクセスを行うハードウェアを利用して負荷を与える。負荷を与える専用のハードウェアを利用して負荷が与えられてもよい。
【0025】
コンピュータ3は、ハイパバイザ203からの要求を受けたとき、シミュレーションモデル301を用いてハードウェアの挙動をシミュレートする。シミュレーションモデル301は、OS302の上で動作する。シミュレーションモデル301は、挙動再現部301aと、メモリアクセス範囲判定部301bと、メモリアクセスパターン推定部301cとを有する。シミュレーションモデル301は、必要に応じてプロセッサ31等を利用して挙動再現部301aと、メモリアクセス範囲判定部301bと、メモリアクセスパターン推定部301cとしての動作を実行する。
【0026】
挙動再現部301aは、システムLSI2のハードウェア24の挙動を仮想ハードウェアによって再現する。挙動再現部301aは、例えば仮想新規ハードウェア24bの挙動を再現できるように構成されている。ここで、ハードウェアの挙動とは例えば、メモリから入力情報を読み出し、ハードウェア特有の計算を行い、計算結果をメモリに書き込むことである。また、挙動再現部301aは、既存ハードウェア24aの挙動を再現できるようにも構成されていてよい。
【0027】
メモリアクセス範囲判定部301bは、仮想制御レジスタへの設定値から、挙動を再現するハードウェアがどの範囲のアドレスを参照し、書き込み又は読み出しをするかを判定する。
【0028】
メモリアクセスパターン推定部301cは、実際のハードウェア24がどのようなアクセスパターンでメモリアクセスするかを推定する。メモリアクセスパターンとは、例えば、仮想ハードウェアが実際のハードウェア24としてメモリアクセス(書き込み/読み出し)をしたと仮定したときのメモリアクセス帯域の時間変化、メモリアクセス量の時間変化、仮想ハードウェアが実際のハードウェア24としてメモリアクセスをした時間内でのトータルのメモリアクセス量を含む。
【0029】
以下、評価システム1の動作を詳細に説明する。
図3は、評価システム1の処理の流れを示すフローチャートである。
図3の処理は、システムLSI2の評価のためにユーザによってアプリケーション201が起動されたときに開始される。
【0030】
アプリケーション201が起動されると、ステップS1において、アプリケーション201は、予めプログラムされた手順に従って処理を実行する。このとき、アプリケーション201のプロファイラ201cは、アプリケーション201の実行中のプロファイルを取得する。
【0031】
ここで、アプリケーション201は、特定のハードウェアを起動する必要が生じたときに、このハードウェアに対して割り当てられている制御レジスタへのメモリアクセスを発行する。前述したように、この制御レジスタは、システムLSI2にまだ実装されていない仮想新規ハードウェア24bについての制御レジスタを含む。つまり、アプリケーション201は、新規処理201bを実行するときに、新規ハードウェアに対して割り当てられている制御レジスタへのメモリアクセスを発行する(
図2の(1))。
【0032】
ステップS2において、ハイパバイザ203は、アプリケーション201から特定のハードウェアに対するメモリアクセスが発行されたか否かをメモリアクセストラップ部203aによって判定する。ここでの特定のハードウェアは、例えば仮想新規ハードウェア24bである。ステップS2において、特定のハードウェアに対するメモリアクセスが発行されていないと判定されたとき、処理はステップS12に移行する。ステップS2において、特定のハードウェアに対するメモリアクセスが発行されていると判定されたとき、処理はステップS3に移行する。
【0033】
ステップS3において、ハイパバイザ203は、メモリアクセストラップ部203aでトラップしたメモリアクセスがハードウェアの起動のためのアクセスであるか否かを判定する。ハードウェアに対するメモリアクセスは、ハードウェアの設定のためのアクセスと、ハードウェアを起動するためのアクセスとを含む。ステップS3において、メモリアクセスがハードウェアの起動のためのアクセスでない、すなわちハードウェアの設定のためのアクセスであると判定されたときには、処理はステップS4に移行する。ステップS3において、メモリアクセスがハードウェアの起動のためのアクセスであると判定されたときには、処理はステップS5に移行する。
【0034】
ステップS4において、ハイパバイザ203は、アプリケーション201から発行されたメモリアクセスを受け付ける。そして、ハイパバイザ203は、アプリケーション201からの要求に従って仮想ハードウェア制御レジスタモデル203bに設定されている新規ハードウェアに対応する仮想新規ハードウェア24bの設定を更新する(
図2の(2))。その後、処理はステップS12に移行する。
【0035】
ステップS3において、メモリアクセスがハードウェアの起動のためのアクセスであると判定されたときに、ステップS5において、ハイパバイザ203は、アプリケーション201に対して制御レジスタモデル203bに設定されている仮想新規ハードウェア24bの設定を出力することで制御レジスタモデル203bを基づく応答をシミュレートする(
図2の(3))。その後のステップS6において、ハイパバイザ203は、自身が用いているプロセッサ以外のプロセッサの動作を停止させる。例えば、ハイパバイザ203は、クロストリガを用いて他のプロセッサの動作を停止させる(
図2の(4))。これにより、アプリケーション201は停止する。
【0036】
ステップS7において、ハイパバイザ203は、仮想ハードウェア制御レジスタモデル203bに設定されている内容を、コンピュータ3のシミュレーションモデル301に送ることでシミュレーションモデル301に対してシミュレーションを要求する(
図2の(5))。
【0037】
ステップS8において、ハイパバイザ203は、シミュレーションモデル301からシミュレーション結果が送られてきたか否かを判定する。ステップS8において、シミュレーションモデル301からシミュレーション結果が送られてきたと判定されるまで、ハイパバイザ203は処理を待つ。ステップS8において、シミュレーションモデル301からシミュレーション結果が送られてきたとき、処理はステップS9に移行する。
【0038】
ステップS8において、ハイパバイザ203が処理を待っている間、シミュレーションモデル301は、仮想ハードウェア制御レジスタモデル203bに設定されていた内容に基づいて、ハードウェアの挙動をシミュレートする。
【0039】
具体的には、シミュレーションモデル301は、メモリアクセス範囲判定部301bにより、ハードウェアの挙動のシミュレートのために参照するメモリブロックを特定する。そして、シミュレーションモデル301は、特定したメモリブロックをメモリ32のRAMにコピーする。
【0040】
その後、シミュレーションモデル301は、挙動再現部301aにより、ハードウェアの挙動をシミュレートする。シミュレーションの結果は、メモリ32においてコピーされたメモリブロックに書き込まれる。
【0041】
その後、シミュレーションモデル301は、メモリ32において書き換えられたメモリブロックを読み出し、メモリ22へ書き戻す。このとき、シミュレーションモデル301は、メモリアクセスパターン推定部301cにより、メモリアクセスパターンを推定する。その後、シミュレーションモデル301は、推定されたメモリアクセスパターンをシミュレーション結果としてハイパバイザ203に送る。
【0042】
ここで、
図3の説明に戻る。シミュレーションモデル301からシミュレーション結果が送られてきた(
図2の(6))後のステップS9において、ハイパバイザ203は、仮想負荷制御部203dにより、シミュレーションモデル301によって推定されたアクセスパターンを仮想負荷として設定する。例えば、仮想負荷の強度は、仮想ハードウェアのトータルのメモリアクセス量を、仮想ハードウェアが仮想的にメモリアクセスをした時間で割ることで得られる。
【0043】
ステップS10において、ハイパバイザ203は、クロストリガを解除して、他のプロセッサによる処理を再開する(
図2の(7))。これにより、アプリケーション201は処理を再開する。同時に、ハイパバイザ203は、仮想負荷として設定した負荷を実際にバス25に加える。例えば、ハイパバイザ203は、DMACを利用してダミーのメモリアクセスを発行してバス25に負荷を与える(
図2の(8))。さらに、ハイパバイザ203は、仮想タイマ制御部203cによって、仮想タイマをゼロに設定することで、ハードウェア24のタイマによって計測されたシミュレーションに要した時間を無かったことにする(
図2の(9))。仮想負荷を与え終わった後、ハイパバイザ203は、仮想新規ハードウェア24bの処理が完了したことをアプリケーション201に通知する(
図2の(10))。その後、処理はステップS11に移行する。
【0044】
ステップS11において、ハイパバイザ203は、仮想負荷の実行完了時の割り込みを仮想的に受ける。これにより、仮想ハードウェアからの割り込みが再現される。
【0045】
ステップS12において、アプリケーション201は、処理が完了したか否かを判定する。ステップS12において、処理が完了していないと判定されたとき、処理はステップS1に戻る。ステップS12において、処理が完了したと判定されたとき、
図3の処理は終了する。
【0046】
図4A及び
図4Bは、実施形態の効果を説明するための図である。
図4Aは、アプリケーション201において想定されているプロセッサ21及びハードウェア24の動作の例を示す。
図4Bは、実施形態におけるプロセッサ21及びハードウェア24の動作の例を示す。
図4A及び
図4Bの棒グラフは、時間経過に伴うプロセッサ21、ハードウェア24の動作の進みを示している。ここで、CPU0は、ハイパバイザ203によって使用されるプロセッサ21である。また、CPU1は、すなわちアプリケーション201によって使用されるプロセッサである。また、HWA、HWB、HWCは、既存ハードウェア24aであり、HWXは、仮想新規ハードウェア24bである。
【0047】
アプリケーション201は、
図4Aに示すように、まず、HWAを起動してメモリ22に対する処理を実行させ、HWAの起動後にHWXを起動してメモリ22に対する処理を実行させ、HWXの起動後にHWBを起動してメモリ22に対する処理を実行させ、HWBの起動後にHWCを起動してメモリ22に対する処理を実行させる。このうち、HWAとHWXの処理時間帯はオーバーラップしており、HWXとHWBの処理時間帯はオーバーラップしており、HWBとHWCの処理時間帯はオーバーラップしている。
【0048】
ここで、HWXは実際のハードウェアとしてはまだ実装されていないものである。したがって、HWXは実際にはメモリ22へアクセスできない。したがって、ハイパバイザ203は、HWXを仮想ハードウェアとして動作させるために、
図4Bに示すように処理を行う。
【0049】
つまり、ハイパバイザ203(CPU0)は、アプリケーション201からHWXの起動のためのメモリアクセスがあったタイミングt1において、クロストリガをかけてCPU1の動作を停止させる。これにより、ハイパバイザ203は、アプリケーション201の処理を中断させる。アプリケーション201の処理を中断させている間に、ハイパバイザ203は、コンピュータ3のシミュレーションモデル301に対して、HWXの挙動をシミュレートさせる。コンピュータ3によるシミュレーション(図のSim)の間、CPU0は待機しており、CPU1はクロストリガによって動作を停止している。
【0050】
シミュレーション結果として得られるメモリアクセスパターンからHWXの起動中に想定される負荷をバス25に加えればHWXのバス25に与える影響をプロファイラ201cで収集することができる。ここで、シミュレーションが完了してシミュレーション結果がハイパバイザ203に送られたタイミングをt2とすると、シミュレーションには(t2−t1)の時間がかかっているので、ハードウェア24のタイマを参照するプロファイラ201cは、
図4Aで示す本来のアプリケーション201のプロファイルとは異なるプロファイルを収集してしまう。
【0051】
そこで、実施形態では、ハイパバイザ203は、仮想タイマ制御部203cによって仮想タイマを操作することにより、シミュレーションに要した時間をゼロにする。前述したように、仮想タイマが設定されると、プロファイラ201cは仮想タイマを参照するので、プロファイラ201cにとってのシミュレーションの開始から完了までの経過時間はゼロになる。このため、プロファイラ201cは、シミュレーションに要した時間中のプロファイルを収集することはない。
【0052】
このようにして、実際のハードウェア24としては存在していないHWXの振る舞いがソフトウェア的に再現され、このようなHWXと実際のハードウェア24として存在している他のHWA、HWB、HWCとが組み合わされた本来のアプリケーション201の処理における各ハードウェアの総合的な振る舞いに基づくプロファイルをプロファイラ201cにおいて収集することができる。
【0053】
また、実施形態では、ハイパバイザ203によってハードウェアの仮想化の処理が行われる。これにより、アプリケーション201及びRTOS202に変更を加えることなく、アプリケーション201のプロファイルの評価が行われ得る。
【0054】
[変形例1]
以下、実施形態の変形例を説明する。前述した実施形態では、仮想負荷の強度は、仮想ハードウェアのトータルのメモリアクセス量を、仮想ハードウェアが仮想的にメモリアクセスをした時間で割った値、すなわちメモリアクセス量の平均値としている。実際には、メモリアクセス帯域及びメモリアクセス量は、時間軸方向で均一ではなく、偏りを持つ場合がある。したがって、メモリアクセスパターン推定部301cによってメモリアクセスパターンを推定するときには、時間軸方向でセグメントに分割してメモリアクセスパターンを推定することが好ましい。セグメントは、等間隔で分割されてもよいが、メモリアクセス帯域又は計算量とメモリアクセス量の比率(演算強度)が変化する時点で分割されることが望ましい。ハイパバイザ203の仮想負荷制御部203dは、セグメント毎に仮想負荷を設定する。これにより、より実際のアプリケーション201の処理に即したプロファイルをプロファイラ201cにおいて収集することができる。
【0055】
[変形例2]
実施形態ではクロストリガによってハイパバイザ203によって使用されるプロセッサ以外のプロセッサの動作を停止させている。これにより、アプリケーション201の処理を中断させることができる。ここで、クロストリガで停止するのはプロセッサだけなのでクロストリガがかけられる前に起動していたハードウェア24は、その処理が完了するまで動作を停止しない。例えば、
図4Bでは、HWAはクロストリガがかけられた後も動作し続ける。この場合、クロストリガが解除された後には、HWAはメモリアクセスをしていないため、
図4Aで示す本来のアプリケーション201の処理とは異なる処理となってしまう。
【0056】
ここで、ハイパバイザ203は、クロストリガがかけられて停止したプロセッサを使用することができる。したがって、ハイパバイザ203(CPU0)は、
図5に示すように、シミュレーション中に、HWAのバス負荷を測定する。バス負荷は、ハードウェア24に設けられたパフォーマンスメータで測定され得る。そして、ハイパバイザ203は、クロストリガを解除したときに、パフォーマンスメータ等で実測されたHWAの負荷である仮想負荷1と、シミュレーション結果に基づいて得られたHWXの負荷である仮想負荷2とを仮想負荷としてバス25に与える。これにより、より実際のアプリケーション201の処理に即したプロファイルをプロファイラ201cにおいて収集することができる。HWAのバス負荷の測定は、CPU1を用いて行われてもよい。
【0057】
[その他の変形例]
前述した実施形態では、仮想化される特定のハードウェアは、システムLSI2に実装されていない仮想新規ハードウェア24bであるとしている。しかしながら、仮想化される特定のハードウェアは、システムLSI2に実装されている既存ハードウェア24aであってもよい。
【0058】
また、実施形態では、仮想化のためのシミュレーションは、システムLSI2の外部のコンピュータ3であるとしている。しかしながら、仮想化のためのシミュレーションは、システムLSI2で行われてもよい。
【0059】
また、実施形態では、ハードウェアの仮想化の処理はハイパバイザ203によって行われるとしている。しかしながら、ハードウェアの仮想化の処理はハイパバイザ203によって行われなくてもよい。例えば、ハードウェアの仮想化の処理はRTOS202によって行われてもよい。
【0060】
以上、いくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。