【実施例】
【0026】
まず、実施例に係る情報処理装置により採取される採取データについて説明する。
図1は、実施例に係る情報処理装置により採取される採取データを説明するための図である。
図1に示すように、実施例に係る情報処理装置により採取される採取データ41には、性能情報41aと、電力情報41bと、プログラム情報41cが含まれる。
【0027】
性能情報41aは、CPU2の性能に関する情報であり、例えば、キャッシュミス数、キャッシュに対するアクセスのプリフェッチ数である。性能情報41aには、コア23aの性能に関する情報が含まれる。
【0028】
また、性能情報41aには、CLKイベントの値が含まれる。CLKイベントは、CPUが動作している間のサイクル数をカウントするイベントであり、一定時間毎にサンプリングするためのイベントとして用いられる。CLKイベントの値は、アイドル状態が発生したかどうかの判断に用いられる。
【0029】
性能情報41aは、イベントベースサンプリングにより、イベント計数部の値が採取される。なお、CLKイベントの値を用いてどのようにアイドル状態の発生を判断するかについて、及び、イベント計数部については後述する。
【0030】
電力情報41bは、消費電力量の情報である。電力情報41bは、イベントベースサンプリングにより、電力取得部の値が採取される。なお、電力取得部については後述する。
【0031】
プログラム情報41cは、サンプリング時に動作していたアプリケーション/OS(Operating System)6に関する情報であり、例えば、プロセスID、命令アドレスである。プログラム情報41cは、イベントベースサンプリングにより、プロファイラによって採取される。プログラム情報41cにより、プログラムと消費電力量の対応付けが可能となる。
【0032】
次に、実施例に係る情報処理装置の構成について説明する。
図2は、実施例に係る情報処理装置の構成を示す図である。
図2に示すように、情報処理装置1は、ハードウェアとしてCPU2と、メインメモリ3と、HDD(Hard Disk Drive)4とを有し、ソフトウェアで実現される電力測定部5と電力データ解析部7とを有する。
【0033】
CPU2は、メインメモリ3からプログラムを読み出して実行する中央処理装置である。メインメモリ3は、プログラムやプログラムの実行途中結果などを記憶するRAM(Random Access Memory)である。HDD4は、プログラムやデータを格納するディスク装置である。
【0034】
CPU2は、イベント計数部21と、電力取得部22とを有する。イベント計数部21は、CPU2で発生するイベントの種別が設定されるイベント設定レジスタと、イベントの発生回数をカウントするためのカウンタレジスタとを有する。ここで、イベントには、例えば、L(Level)3キャッシュのキャッシュミス、L2キャッシュに対するアクセスのプリフェッチがある。また、イベントには、CLKイベントがある。イベント計数部21は、イベント設定レジスタとカウンタレジスタの組を複数個有する。イベントの種別及び発生回数がサンプリング時に性能情報41aとして採取される。
【0035】
イベント設定レジスタでは割込みを発生させるか否かが指定可能となっており、割込み発生が指定されたイベントがカウンタレジスタに設定された回数分発生すると、イベント計数部21はCPU2に割込みを発生する。イベント計数部21は、例えばx−86アーキテクチャでは、PMC(Performance Monitoring Counter)である。
【0036】
電力取得部22は、プロセッサ、プロセッサに含まれるコア全体、及び、DRAMについて消費電力量等の情報を取得する。
図3は、プロセッサの構成の一例を示す図である。プロセッサ23は、コア部として4つのコア23aを有し、非コア部としてL3キャッシュ23b、メモリコントローラ23cを有する。
【0037】
コア23aは、演算を行う演算処理装置である。L3キャッシュ23bは、DRAM3aに記憶されたデータの一部を記憶するキャッシュメモリである。メモリコントローラ23cは、DRAM3aへのアクセスを制御する。DRAM3aは、
図2に示したメインメモリ3に対応する。プロセッサ23は、
図2に示したCPU2に含まれる。
【0038】
電力取得部22は、コア全体の消費電力量は取得できるが、コア毎の消費電力量を取得することはできない。また、電力取得部22は、消費電力量毎に割込みを発生することはできない。電力取得部22は、例えばインテル(登録商標)のRAPL(Running Average Power Limit)である。
【0039】
図2に戻って、電力測定部5は、イベント計数部21及び電力取得部22を用いて、できるだけ一定の消費電力量毎にデータをサンプリングする。情報処理装置1は一定の消費電力量毎に割込みを発生する機能がないため、電力測定部5は、消費電力に関係するイベントを特定し、特定したイベントを用いて割込みを発生させることにより、できるだけ一定の消費電力量毎にデータをサンプリングする。
【0040】
すなわち、電力測定部5は、イベントベースサンプリングを行う。電力測定部5は、イベントベースサンプリングにより、性能情報41a、電力情報41b及びプログラム情報41cを採取する。電力測定部5は、測定制御部51とカーネル部52とを有する。
【0041】
測定制御部51は、イベント及びイベントのサンプリング間隔によりデータのサンプリングを制御する。測定制御部51は、イベント決定部51aと測定部51bとを有する。イベント決定部51aは、消費電力モデル、データのサンプリング間隔、及び、イベント数を入力し、データのサンプリングに用いるイベントに関する処理を行う。
【0042】
消費電力モデルは、CPU2で発生するイベントに基づいてプロセッサ23、DRAM3a等の消費電力を算出するためのモデルである。例えば、コア23aの消費電力モデルとして、
消費電力[W]=13.06+
7.136×C+
1.157×10
-8×L2_TRANS.ALL_PF+
3.841×10
-8×LONGEST_LAT_CACHE.MISS
がある。
【0043】
ここで、Cは、CPU2がアクティブに動作した割合であり、コア性能情報から算出される。L2_TRANS.ALL_PFは、L2キャッシュに対するアクセスのプリフェッチ数であり、L2キャッシュに対するアクセスのプリフェッチは、イベント設定レジスタに設定可能なイベントである。LONGEST_LAT_CACHE.MISSは、L3キャッシュ23bのキャッシュミス数であり、L3キャッシュ23bのキャッシュミスは、イベント設定レジスタに設定可能なイベントである。
【0044】
また、DRAM3aの消費電力モデルとして、
消費電力[W]=2.753+
2.18×10
-7×LONGEST_LAT_CACHE.MISS
がある。
【0045】
データのサンプリング間隔は、次のサンプリングまでの消費電力量である。イベント数は、割込み発生に用いられるイベントの数である。ただし、イベント数には、CLKイベントは含まれない。すなわち、CLKイベントを含めると、イベント数+1のイベントによる割込みが発生する。
【0046】
イベント決定部51aは、イベント特定部61と、サンプリング間隔特定部62と、設定部63とを有する。イベント特定部61は、消費電力モデルとイベント数を入力し、CLKイベント以外に割込みを発生させるイベントを特定する。イベント特定部61は、例えば、イベント数が1である場合には、消費電力モデルの係数が最も大きいイベントを、割込みを発生させるイベントとして特定する。
【0047】
消費電力モデルを
消費電力=0.003×L3キャッシュミス数+0.001×L2キャッシュアクセス数 ・・・(1)
とすると、イベント数が1である場合には、L3キャッシュミスが割込みを発生させるイベントとして特定される。
【0048】
また、イベント特定部61は、例えば、イベント数が複数である場合には、消費電力モデルの係数が大きいイベントから指定個数だけ選択し、割込みを発生させるイベントとして特定する。消費電力モデルが上記式(1)であり、イベント数が2である場合には、L3キャッシュミスとL2キャッシュアクセスが割込みを発生させるイベントとして特定される。ただし、他の係数と比較して値が著しく小さいイベントは、指定個数以内でも選択されない。
【0049】
イベント特定部61は、例えば、複数の消費電力モデルを表示装置に表示し、ユーザにマウスで選択させることにより消費電力モデルを入力する。イベント特定部61は、例えば、イベント数をユーザにキーボードから入力させる。
【0050】
サンプリング間隔特定部62は、イベント特定部61により特定されたイベントのサンプリング間隔を、データのサンプリング間隔と消費電力モデルのイベントの係数に基づいて特定する。具体的には、サンプリング間隔特定部62は、各イベントの係数の逆数を消費電力のサンプリング間隔に掛けて、各イベントのサンプリング間隔を算出する。すなわち、イベントのサンプリング間隔=消費電力量のサンプリング間隔/イベントの係数である。
【0051】
例えば、消費電力量のサンプリング間隔が6Jであり、消費電力モデルが上記式(1)である場合には、L3キャッシュミスのサンプリング間隔=6/0.003=2000回である。また、L2キャッシュアクセスのサンプリング間隔=6/0.001=6000回である。
【0052】
なお、サンプリング間隔特定部62は、イベント数が1である場合には他のイベントで消費する分を考慮しないことになるので、イベントの係数に一定の値αを加えて、サンプリング間隔を狭めてもよい。例えば、L3キャッシュミス数だけをイベントとし、α=0.001とする場合には、サンプリング間隔=6/(0.003+0.001)=1500回としてもよい。
【0053】
また、サンプリング間隔特定部62は、データのサンプリング間隔をユーザにキーボードから入力させる。あるいは、サンプリング間隔特定部62は、測定対象プログラムの総消費電力量と採取したいサンプル数をユーザにキーボードから入力させ、消費電力量のサンプリング間隔を総消費電力量/サンプル数として算出する。例えば、総消費電力量が12000Jであり、サンプル数が2000個である場合には、データのサンプリング間隔=12000J/2000=6Jである。
【0054】
設定部63は、イベント決定部51aにより特定されたイベント及びサンプリング間隔を、カーネル部52に指示して、イベント計数部21に設定させる。また、設定部63は、CLKイベント及びサンプリング間隔をカーネル部52に指示して、イベント計数部21に設定させる。
【0055】
測定部51bは、設定部63により設定されたイベント及びサンプリング間隔を用いて消費電力の測定を開始するようにカーネル部52に指示する。また、測定部51bは、測定時間を指定することにより測定の終了をカーネル部52に指示する。
【0056】
カーネル部52は、OS(オペレーティングシステム)のカーネル機能により実現される。カーネル部52は、割込み処理部52aとデータ記憶部52bとを有する。
【0057】
割込み処理部52aは、イベント計数部21からの割込みにより起動され、採取データ41すなわち性能情報41a、電力情報41b及びプログラム情報41cを採取する。割込み処理部52aは、採取したデータをサンプリングデータとしてデータ記憶部52bに保存する。
【0058】
データ記憶部52bは、割込み処理部52aにより採取された採取データ41を記憶する。データ記憶部52bが記憶する採取データ41は、測定終了後にHDD4に書き出される。HDD4に書き出された採取データ41は、電力データ解析部7により解析され、消費電力プロファイルの作成等が行われる。
【0059】
電力データ解析部7は、採取データ41を解析して消費電力プロファイルの作成等を行う。電力データ解析部7は、コア23aの性能に関する情報をもとにコア23aに消費電力量を分配し、各コア23aで動作した関数の消費電力量を算出する。
【0060】
電力データ解析部7は、アイドル状態の消費電力量及び全体に占める割合も算出する。電力データ解析部7は、算出した消費電力量、全体に占める割合等を解析データ42としてHDD4に書き込む。
【0061】
電力データ解析部7は、判断部71と算出部72とを有する。判断部71は、性能情報41aに含まれるCLKイベントのデータを用いてアイドル状態が発生したかどうかを判断する。具体的には、判断部71は、一定時間間隔でCLKイベントの割込みが発生していない場合をアイドル状態と判断する。
【0062】
CLKイベントの割込みは、一定時間間隔で発生するが、アイドル状態であると割込みが発生せず、CLKイベントの値が加算されていく。そこで、判断部71は、2つの連続するCLKイベントの値をt
n-1とt
nとすると、t
n−t
n-1に基づいてアイドル状態の有無を判断する。
【0063】
すなわち、判断部71は、
CLKイベントのデータ間の経過時間>CLKイベントのサンプリング間隔×N
である場合に、アイドル状態が発生したと判断する。ここで、Nは、正の整数であり、アイドル状態の粒度に基づいて決定される値である。Nは、例えば、5〜10である。
【0064】
算出部72は、t
nと同じサンプリングデータに含まれる他のイベントの値を用いてアイドル状態で消費される電力量を算出する。具体的には、算出部72は、イベント決定部51aが用いた消費電力モデルに、サンプリングデータのイベントの値を当てはめて、消費電力モデルに基づく消費電力量を計算し、同じサンプリングデータに含まれる消費電力量との差分をアイドル状態での消費電力量とする。
【0065】
なお、電力測定部5及び電力データ解析部7は、HDD4に格納された電力測定プログラム及び電力データ解析プログラムが、それぞれHDD4からメインメモリ3に読み出されてCPU2により実行されることによって実現される。また、電力測定プログラム及び電力データ解析プログラムは、例えば、DVDから読出されて情報処理装置1にインストールされる。あるいは、電力測定プログラム及び電力データ解析プログラムは、LAN(Local Area Network)を介して接続された他の情報処理装置のデータベースなどに記憶され、これらのデータベースから読み出されて情報処理装置1にインストールされる。
【0066】
次に、電力測定部5及び電力データ解析部7による処理のフローについて説明する。
図4は、電力測定部5及び電力データ解析部7による処理のフローを示すフローチャートである。
図4に示すように、電力測定部5は、CLKイベント以外で割込みを発生させるイベント及びサンプリング間隔を決定し(ステップS1)、決定したイベントとCLKイベントについて、イベント及びサンプリング間隔をイベント計数部21に設定する(ステップS2)。なお、ステップS1及びステップS2の処理は測定制御部51により行われる。
【0067】
その後、測定対象プログラムが実行され、測定が開始されると、割込み処理部52aが、イベント計数部21からの割込みをキャッチし(ステップS3)、性能情報41a、電力情報41b及びプログラム情報41cを採取する(ステップS4)。そして、割込み処理部52aは、採取したデータを1つのサンプリングデータとしてデータ記憶部52bに保存し(ステップS5)、割込みを発生したイベントに対応するカウンタレジスタに初期値を設定する(ステップS6)。
【0068】
そして、割込み処理部52aは、測定時間が終了したか否かを判定し(ステップS7)、測定時間が終了していない場合には、ステップS3に戻り、測定時間が終了した場合には、測定処理を終了する。
【0069】
その後、測定が終了すると、電力測定部5は、データ記憶部52bが記憶する採取データ41をHDD4に書き出し、処理を終了する。そして、電力データ解析部7が、HDD4から採取データ41を読み込み、採取データ41を解析し(ステップS8)、解析結果をHDD4に解析データ42として書き出す。
【0070】
次に、アイドル状態の消費電力量を算出する処理のフローについて説明する。
図5は、アイドル状態の消費電力量を算出する処理のフローを示すフローチャートである。なお、アイドル状態の消費電力量を算出する処理は、
図4のステップS8の処理すなわち採取データ41を解析する処理の一部として行われる。
【0071】
図5に示すように、電力データ解析部7は、pre_clkをcurrent_clkとする(ステップS11)。ここで、pre_clkは、1つ前のデータのCLKイベントの値であり、current_clkは、現データのCLKイベントの値である。なお、データはCLKイベントの割込みによる1回のサンプリングにより採取された採取データ41である。そして、電力データ解析部7は、次のデータを取り出し、次のデータのCLKイベントの値をcurrent_clkとする(ステップS12)。
【0072】
そして、電力データ解析部7は、current_clkからpre_clkを引いた値が一定間隔より大きいか否かを判定する(ステップS13)。ここで、一定間隔は、サンプリング間隔×Nである。そして、current_clkからpre_clkを引いた値が一定間隔より大きくない場合には、電力データ解析部7は、ステップS17へ進む。
【0073】
一方、current_clkからpre_clkを引いた値が一定間隔より大きい場合には、電力データ解析部7は、消費電力モデルの式に現データのイベント値を当てはめで消費電力モデルに基づく消費電力量Pを計算する(ステップS14)。そして、電力データ解析部7は、現データに含まれる消費電力量からPを引いてアイドル状態の消費電力量とし(ステップS15)、アイドル状態の消費電力量を現データに追加する(ステップS16)。
【0074】
そして、電力データ解析部7は、データが終了したか否かを判定し(ステップS17)、データが終了していない場合には、ステップS12に戻り、データが終了した場合には、アイドル状態の消費電力量を算出する処理を終了する。なお、電力データ解析部7は、アイドル状態の消費電力量が追加された採取データ41を用いて消費電力プロファイルを作成する。
【0075】
このように、電力データ解析部7は、CLKイベントの値を用いてアイドル状態の発生を特定し、アイドル状態が発生していた場合には、アイドル状態の消費電力量を計算することで、プログラムの消費電力量を正確に計算することができる。
【0076】
図6は、電力データ解析部7の効果を説明するための図である。
図6(a)は、アイドル状態は未把握である場合の消費電力プロファイルを示し、
図6(b)は、アイドル状態を把握した場合の消費電力プロファイルを示す。
図6(a)では、「ProgramA」の「funcA」の消費電力量が、「100J」で割合が「50.0%」であり、最も多い。
【0077】
一方、
図6(b)では、アイドル状態を示す「IDLE」の消費電力量が「40J」で割合が「20.0%」であり、「ProgramA」の「funcB」の消費電力量が、「80J」で割合が「40.0%」であり、最も多い。
図6から、アイドル状態を把握しないと、アイドル状態の消費電力量が「ProgramA」の「funcA」の消費電力量に上乗せされていたことがわかる。
【0078】
上述してきたように、実施例では、電力データ解析部7の判断部71が、CLKイベントのサンプリングデータを用いてCPU2がアイドル状態であったか否かを判定する。そして、判定部71によりCPU2がアイドル状態であったと判定された場合に、算出部72が、消費電力モデルを用いて算出した消費電力量Pとサンプリングデータに含まれる消費電力量に基づいて、アイドル状態の消費電力量を算出する。したがって、電力データ解析部7は、アイドル状態で消費された電力量を除き、プログラムの消費電力量を正確に計算することができる。
【0079】
また、実施例では、判断部71は、CLKイベントの連続する2つのサンプリングデータの差が所定の閾値より大きい場合に、CPU2がアイドル状態であったと判定するので、アイドル状態を正確に特定することができる。
【0080】
また、実施例では、算出部72は、消費電力モデルを用いて算出した消費電力量Pをサンプリンデータに含まれる消費電力量から引いて得られる消費電力量に基づいてアイドル状態の消費電力量を算出する。したがって、算出部72は、アイドル状態の消費電力量を正確に計算することができる。
【0081】
なお、実施例では、電力データ解析部7が電力測定部5と同じハードウェアにより実現される場合について説明したが、電力データ解析部7は電力測定部5と異なるハードウェアにより実現されてもよい。電力データ解析部7を実現するハードウエアのCPUは、イベント計数部21及び電力取得部22を有しなくてもよい。
【0082】
また、実施例では、CPU2がアイドル状態であるかを判断するためにCLKイベントを用いる場合について説明したが、情報処理装置1は、一定時間で割込みが可能な他のイベントを用いてもよい。
【0083】
また、実施例では、消費電力プロファイルとして、モジュールの関数毎に消費電力量と割合を算出する場合について説明したが、電力データ解析部7は、モジュール毎、プログラム毎等の他のプログラム単位毎に消費電力量と割合を算出してもよい。