[実施の形態1]
本実施の形態では、実行プログラムを実行するCPUによる命令種毎の実行回数を算出する方法について説明する。
図1に、本実施の形態におけるフェーズを示す。本実施の形態における処理は、3つのフェーズに分けられる。準備フェーズ(S101)では、分析フェーズのための準備を行う。計測フェーズ(S103)では、CPUに実行プログラムを実行させてサンプリングを行う。分析フェーズ(S105)では、サンプリングによって得られたサンプルの分析を行う。各フェーズの詳細については、以下で説明する。
これら3つのフェーズは、連続しなくてもよい。つまり、準備フェーズ(S101)における処理と計測フェーズ(S103)における処理は、連続的に実行されなくてもよい。また、計測フェーズ(S103)における処理と分析フェーズ(S105)における処理は、連続的に実行されなくてもよい。
図1は、準備フェーズ(S101)、計測フェーズ(S103)、分析フェーズ(S105)の順に処理を実行する例を示しているが、計測フェーズ(S103)、準備フェーズ(S101)、分析フェーズ(S105)の順に処理を実行するようにしてもよい。つまり、分析フェーズ(S105)における処理を実行する前に、準備フェーズ(S101)における処理及び計測フェーズ(S103)における処理が実行されていればよい。
次に、本実施の形態に係る情報処理装置のモジュール構成について説明する。図2に、第1情報処理装置201及び第2情報処理装置203のモジュール構成例を示す。図2に示した例では、2つの情報処理装置を用いる。第1情報処理装置201は、計測フェーズ(S103)における処理を実行する。第1情報処理装置201は、例えば実行プログラムの動作環境に相当する。第2情報処理装置203は、準備フェーズ(S101)における処理及び分析フェーズ(S105)における処理を実行する。第2情報処理装置203は、例えば分析装置に相当する。
このように、実行プログラムの動作環境に相当する第1情報処理装置201とは別に、分析装置に相当する第2情報処理装置203を設けるようにすれば、第1情報処理装置201の処理負荷を軽減することができる。
また、第2情報処理装置203は、複数の第1情報処理装置201におけるサンプルデータを一括して分析するようにしてもよい。例えば、第1情報処理装置201は、LAN(Local Area Network)に接続されたサーバ装置であってもよい。更に、第2情報処理装置203は、LANに接続された管理装置であってもよい。
また、第1情報処理装置201と第2情報処理装置203とは、LAN以外のネットワーク、例えばインターネットによって接続されていてもよい。第1情報処理装置201と第2情報処理装置203とをインターネットによって接続すれば、遠隔地に設けた第2情報処理装置203によって、第1情報処理装置201における動作状況を把握することができる。
また、第1情報処理装置201が、第2情報処理装置203を兼ねるようにしてもよい。つまり、1つの情報処理装置が、準備フェーズ(S101)における処理、計測フェーズ(S103)における処理及び分析フェーズ(S105)における処理を実行するようにしてもよい。1つの情報処理装置による実施例は、実施の形態5において説明する。
第1情報処理装置201は、CPU211、第1プログラム記憶部213、サンプリングドライバ215、サンプル格納部217及び出力プログラム219を有している。CPU211は、性能モニタリングを行う。第1プログラム記憶部213は、分析対象となる実行プログラムを記憶している。サンプリングドライバ215は、サンプリング処理を行う。サンプル格納部217は、採取したサンプルデータを格納する。出力プログラム219は、サンプルデータを出力する。
第2情報処理装置203は、取得部231、第1プログラム記憶部233、準備部235、ブロックマップ記憶部237、比率記憶部239、受付部241、サンプル記憶部243、分析部245、結果記憶部247及び出力部249を有している。取得部231は、分析対象となる実行プログラムを取得する。第1プログラム記憶部233は、分析対象となる実行プログラムを記憶する。第2情報処理装置203における第1プログラム記憶部233は、第1情報処理装置201における第1プログラム記憶部213と同等である。準備部235は、準備フェーズ(S101)における処理を行う。ブロックマップ記憶部237は、実行プログラムにおける基本ブロックの範囲が設定されたブロックマップを記憶する。比率記憶部239は、基本ブロックにおける各命令種に属する命令の比率のデータ(以下、比率データという。)を記憶する。受付部241は、サンプルデータを受け付ける。サンプル記憶部243は、サンプルデータを記憶する。分析部245は、分析フェーズ(S105)における処理を行う。結果記憶部247は、分析の結果データを記憶する。出力部249は、結果データを出力する。
上述した取得部231、準備部235、受付部241、分析部245及び出力部249は、ハードウエア資源(例えば、図30)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
上述した第1プログラム記憶部213、サンプル格納部217、第1プログラム記憶部233、ブロックマップ記憶部237、比率記憶部239、サンプル記憶部243及び結果記憶部247は、ハードウエア資源(例えば、図30)を用いて実現される。
続いて、準備フェーズ(S101)について詳述する。図3に、準備部235のモジュール構成例を示す。準備部235は、逆アセンブラ301、第2プログラム記憶部303、特定部305、定義記憶部307、第1算出部309及びパラメータ記憶部311を有している。逆アセンブラ301は、実行プログラム、つまり機械語によるオブジェクトコードを、アセンブリ言語によるソースコードに変換する。変換されたアセンブリ言語によるソースコードを、以下では逆アセンブルコードという。逆アセンブルコードも、プログラムの一種である。
第2プログラム記憶部303は、逆アセンブルコードを記憶する。特定部305は、特定処理を実行する。特定部305は、特定処理において、逆アセンブルコードを区切って複数の基本ブロックを特定する。定義記憶部307は、命令と当該命令が属する命令種とを対応付けて記憶している。第1算出部309は、第1算出処理を実行する。第1算出部309は、第1算出処理において、基本ブロック毎に、各命令種に属する命令が占める比率を算出する。パラメータ記憶部311は、各種のパラメータを記憶する。
上述した逆アセンブラ301、特定部305及び第1算出部309は、ハードウエア資源(例えば、図30)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
上述した第2プログラム記憶部303、定義記憶部307及びパラメータ記憶部311、は、ハードウエア資源(例えば、図30)を用いて実現される。
ここで、逆アセンブルコードについて説明する。図4に、逆アセンブルコードの例を示す。左側の列は、命令を指すアドレスを示している。中央の列は、命令を示している。右側の列は、オペランドを示している。
枠401は、最初の基本ブロックを囲っている。基本ブロックの最終行には分岐命令(この例では、「jmp」)があるが、途中の行には分岐命令がない。従って、基本ブロックに含まれる命令は逐次実行される。つまり、基本ブロックに含まれる命令個々の実行回数は、基本ブロック自体の実行回数と等しくなる。二番目以降の基本ブロックについても同様である。そして、逆アセンブルコードは、複数の基本ブロックの連なりとして捉えられる。
次に、ブロックマップについて説明する。図5に、ブロックマップの例を示す。この例におけるブロックマップは、テーブル形式である。但し、ブロックマップはテーブル形式以外の形式であってもよい。
この例におけるブロックマップは、基本ブロックに対応するブロックレコードを有している。ブロックマップにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、基本ブロックの範囲を設定するためのフィールドとを有している。基本ブロック番号は、基本ブロックを識別する。この例では、先頭から順番に基本ブロックに対して番号が付与される。基本ブロックの範囲は、開始アドレスと終了アドレスとによって特定される。
この例における第1ブロックレコードは、最初の基本ブロックがアドレス「0x0400」からアドレス「0x041F」までの範囲を占めていることを示している。上述したように、最初の基本ブロックは、図4において枠401で囲った基本ブロックである。
同様に第2ブロックレコードは、2番目の基本ブロックがアドレス「0x0420」からアドレス「0x044F」までの範囲を占めていることを示している。
同様に第3ブロックレコードは、3番目の基本ブロックがアドレス「0x0450」からアドレス「0x04FF」までの範囲を占めていることを示している。
同様に第4ブロックレコードは、4番目の基本ブロックがアドレス「0x0500」からアドレス「0x057F」までの範囲を占めていることを示している。
尚、この例における逆アセンブルコードは、全体としてアドレス「0x0400」からアドレス「0xFFFF」までを占めている。
次に、パラメータ記憶部311におけるパラメータについて説明する。図6に、パラメータ記憶部311におけるパラメータの例を示す。図6に示したパラメータは、基本ブロックに含まれる命令を命令種に分類し、命令種毎の命令数を計数するために用いられる。更に、基本ブロックに含まれる命令の総数も計数する。この例は、図4の枠401で囲った最初の基本ブロックに含まれる命令を分類した場合のパラメータの値を示している。
図6に示した例は、最初の基本ブロックには、命令種「整数演算」に属する命令が2個有ることを示している。図6に示した例は、命令種「浮動小数点演算」に属する命令が無いことも示している。図6に示した例は、命令種「分岐命令」に属する命令が1個有ることも示している。図6に示した例は、命令種「ロード又はストア」に属する命令が5個有ることも示している。そして、図6に示した例は、最初の基本ブロックには、命令が全部で8個有ることも示している。
次に、比率記憶部239に記憶される比率データについて説明する。図7に、比率データの例を示す。この例における比率データは、テーブル形式である。但し、比率データは、テーブル形式以外の形式であってもよい。
この例における比率データは、基本ブロックに対応するブロックレコードを有している。比率データにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、基本ブロックにおける各命令種に属する命令の比率を設定するためのフィールドとを有している。
この例における第1ブロックレコードは、最初の基本ブロックにおいて命令種「整数演算」に属する命令の比率が「25.0」パーセントであることを示している。同じく第1ブロックレコードは、最初の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「0.0」パーセントであることを示している。同じく第1ブロックレコードは、最初の基本ブロックにおいて命令種「分岐命令」に属する命令の比率が「12.5」パーセントであることを示している。同じく第1ブロックレコードは、最初の基本ブロックにおいて命令種「ロード又はストア」に属する命令の比率が「62.5」パーセントであることを示している。
この例における第2ブロックレコードは、2番目の基本ブロックにおいて命令種「整数演算」に属する命令の比率が「25.0」パーセントであることを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「60.0」パーセントであることを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおいて命令種「分岐命令」に属する命令の比率が「5.0」パーセントであることを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおいて命令種「ロード又はストア」に属する命令の比率が「10.0」パーセントであることを示している。
この例における第3ブロックレコードは、3番目の基本ブロックにおいて命令種「整数演算」に属する命令の比率が「3.3」パーセントであることを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「66.7」パーセントであることを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおいて命令種「分岐命令」に属する命令の比率が「3.3」パーセントであることを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおいて命令種「ロード又はストア」に属する命令の比率が「26.7」パーセントであることを示している。尚、この例では、小数第2位以下を省略している。
この例における第4ブロックレコードは、4番目の基本ブロックにおいて命令種「整数演算」に属する命令の比率が「20.0」パーセントであることを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「0.0」パーセントであることを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおいて命令種「分岐命令」に属する命令の比率が「20.0」パーセントであることを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおいて命令種「ロード又はストア」に属する命令の比率が「60.0」パーセントであることを示している。
続いて、準備フェーズ(S101)における処理について説明する。図8に、準備フェーズ(S101)の処理フローの例を示す。取得部231は、第1情報処理装置201の第1プログラム記憶部213から実行プログラムを取得する(S801)。そして、取得部231は、取得した実行プログラムを第1プログラム記憶部233に記憶する。実行プログラムは、機械語のプログラム、つまりオブジェクトコードである。実行プログラムは、オブジェクトプログラム、あるいはターゲットプログラムと呼ばれることもある。
逆アセンブラ301は、第1プログラム記憶部233に記憶した実行プログラムに対する逆アセンブルを実行する(S803)。逆アセンブラ301は、逆アセンブルによって得られた逆アセンブルコード(例えば、図4)、つまりアセンブリ言語のソースコードを第2プログラム記憶部303に記憶する。
特定部305は、特定処理を実行する(S805)。特定処理において、特定部305は、逆アセンブルコードを区切って複数の基本ブロックを特定する。具体的には、特定部305は、上述したブロックマップ(例えば、図5)を生成する。
以下、特定処理について説明する。図9に、特定処理フローの例を示す。特定部305は、ブロックマップの第1ブロックレコードに、最初の基本ブロック番号(この例では、「1」)を設定する(S901)。特定部305は、最初の基本ブロックの開始アドレスを設定する(S903)。具体的には、特定部305は、第1ブロックレコードの開始アドレスに、逆アセンブルコードの先頭アドレス(図4の例では、「0x0400」)を設定する。
特定部305は、逆アセンブルコードにおける命令を順次特定する(S905)。特定部305は、特定された命令が分岐命令(例えば、「jmp」)に該当するか否かを判定する(S907)。特定された命令が分岐命令に該当しないと判定した場合には、基本ブロックの終わりに至っていないので、S905に示した処理に戻って、次の命令を特定する。
一方、特定された命令が分岐命令に該当すると判定した場合には、基本ブロックの終わりに至ったので、特定部305は、S903において設定した開始アドレスあるいは後述するS913において設定した開始アドレスに対応する終了アドレスを設定する(S909)。終了アドレスは、例えばS905において特定した命令の次に位置する命令のアドレスから1を引くことによって求められる。図4の枠401で囲った基本ブロックの場合には、図5の第1ブロックレコードに示すように「0x041F」が終了アドレスである。
特定部305は、次のブロックレコードに対する処理に移る。特定部305は、当該次のブロックレコードに次の基本ブロック番号を設定する(S911)。次の基本ブロック番号は、例えば現基本ブロック番号に1を加えることによって定められる。
特定部305は、当該次のブロックレコードの開始アドレスに、S905において特定した命令の次に位置する命令のアドレスを設定する(S913)。図4の枠401で囲った基本ブロックの次に位置する基本ブロックの場合には、図5の第2ブロックレコードに示すように「0x0420」が開始アドレスである。
特定部305は、未処理の命令があるか否かを判定する(S915)。未処理の命令があると判定した場合には、逆アセンブルコードの終わりに至っていないので、S905に示した処理に戻って、上述した処理を繰り返す。
一方、未処理の命令がないと判定した場合には、逆アセンブルコードの終わりに至ったので、特定部305は、S913において設定した開始アドレスに対応する終了アドレスを設定する(S917)。このとき終了アドレスには、逆アセンブルコードの最終アドレスが設定される。そして、特定処理を終えると、図8に示したS807の処理に移る。
図8の説明に戻る。第1算出部309は、第1算出処理を実行する(S807)。第1算出処理において、第1算出部309は、基本ブロック毎に、各命令種に属する命令が占める比率を算出する。具体的には、第1算出部309は、上述した比率データ(例えば、図7)を生成する。
以下、第1算出処理について詳述する。図10に、第1算出処理フローの例を示す。第1算出部309は、基本ブロックを1つ特定する(S1001)。具体的には、第1算出部309は、ブロックマップ(例えば、図5)におけるブロックレコードを先頭から順次特定する。
以下の処理では、基本ブロック内の命令をいずれかの命令種に分類する。第1算出部309は、基本ブロック内の命令を1つ特定する(S1003)。具体的には、第1算出部309は、S1001において特定したブロックレコードに設定されている開始アドレスに従って、逆アセンブルコードから順次命令を読む。
第1算出部309は、S1003において特定した命令が属する命令種を特定する(S1005)。この例では、第1算出部309は、定義記憶部307において当該命令に対応付けられている命令種を読む。例えば、図4の枠401で囲った基本ブロックの場合に、最初の命令「push」について命令種「ロード又はストア」が特定される。
第1算出部309は、S1005において特定した命令種に属する命令の数に1を加える(S1007)。具体的には、第1算出部309は、パラメータ記憶部311に設けられている当該命令種のパラメータの値に1を加える。第1算出部309は、更に、パラメータ記憶部311に設けられている総数のパラメータの値に1を加える(S1008)。
第1算出部309は、S1001において特定した基本ブロック内に未処理の命令があるか否かを判定する(S1009)。S1001において特定した基本ブロック内に未処理の命令があると判定した場合には、当該基本ブロックにおける命令の分類が終わっていないので、S1003に戻って、上述した処理を繰り返す。
一方、S1001において特定した基本ブロック内に未処理の命令がないと判定した場合には、当該基本ブロックにおける命令の分類が終わったことになる。例えば、図4の枠401で囲った最初の基本ブロックにおける命令の分類が終わると、命令種のパラメータは、図6に示した状態になる。
第1算出部309は、各命令種の命令数と命令の総数とに基づいて、当該命令種の比率を算出する(S1011)。具体的には、第1算出部309は、各命令種について、当該命令種の命令数(命令種のパラメータの値)を命令の総数(総数のパラメータの値)で除することによって、当該命令種の比率を求める。算出された各命令種の比率は、比率データにおけるブロックレコードに設定される。
図4の枠401で囲った最初の基本ブロックの場合には、図7に示した比率データにおける第1ブロックレコードに示したように、命令種「整数演算」の比率は、2を8で除した値「25.0」(パーセント)である。同じく、命令種「浮動小数点演算」の比率は、0を8で除した値「0.0」(パーセント)である。同じく、命令種「分岐命令」の比率は、1を8で除した値「12.5」(パーセント)である。同じく、命令種「ロード又はストア」の比率は、5を8で除した値「62.5」(パーセント)である。
第1算出部309は、未処理の基本ブロックがあるか否かを判定する(S1013)。未処理の基本ブロックがあると判定した場合には、S1001に示した処理に戻って、上述した処理を繰り返す。
一方、未処理の基本ブロックがないと判定した場合には、残らず基本ブロックについて命令種の比率を算出したことになるので、第1算出処理を終える。第1算出処理を終えると、図8に示した準備フェーズ(S101)の処理も終える。以上で、準備フェーズ(S101)についての説明を終える。
次に、計測フェーズ(S103)について説明する。以下では、制御プログラムによって自動的に処理やプログラムを起動し、その後停止する例について説明する。但し、処理やプログラムの起動及び停止をユーザが手動で指示するようにしてもよい。
図11に、計測フェーズ(S103)の処理フローの例を示す。制御プログラムは、サンプリングドライバ215によるサンプリング処理を起動する(S1101)。第1情報処理装置201のブート処理において、サンプリングドライバ215によるサンプリング処理が起動される場合には、S1101の処理を省いてもよい。また、上述したように、手動によって、サンプリングドライバ215によるサンプリング処理を起動するようにしてもよい。サンプリング処理については、図14を用いて後述する。
次に、制御プログラムは、第1プログラム記憶部213に格納されている実行プログラムを起動する(S1103)。メインメモリにロードされた実行プログラムが動作を開始すると、サンプリングドライバ215は、実行プログラムの動作に伴って採取したサンプルデータをサンプル格納部217に継続的に格納する。尚、実行プログラムは、プロセスとして動作する。また、実行プログラムに含まれる命令は、ブロックマップの通りに展開されているものとする。実行プログラムが既に動作している場合には、S1103の処理は省くようにしてもよい。
制御プログラムは、サンプリング処理を終えるか否かを判定する(S1105)。サンプリング処理を終える条件は、任意である。例えば、実行プログラムが起動されてから所定時間が経過した時点で、サンプリング処理を終えるようにしてもよい。あるいは、実行プログラムが学術的な計算を行うプログラムであれば、所定の問題に対する計算を終えた時点で、サンプリング処理を終えるようにしてもよい。あるいは、実行プログラムが業務を支援するプログラムであれば、所定のトランザクション処理を終えた時点で、サンプリング処理を終えるようにしてもよい。
サンプリング処理を終えると判定しない場合には、制御プログラムは、S1105の処理を繰り返し、そのままサンプリング処理を継続させる。
一方、サンプリング処理を終えると判定した場合には、制御プログラムは、実行プログラムを停止する(S1107)。実行プログラムが自ら停止する場合には、S1107の処理は省いてもよい。また、例えば運用状態であれば、実行プログラムを停止しなくてもよい。
制御プログラムは、サンプリングドライバ215によるサンプリング処理を停止する(S1109)。但し、サンプル格納部217におけるサンプルデータが破棄される恐れがなければ、サンプリング処理を停止しなくてもよい。
出力プログラム219は、サンプル格納部217からサンプルデータを読み、出力する(S1111)。サンプルデータについては、図13を用いて後述する。出力プログラム219は、ネットワーク(例えば、LANあるいはインターネット)を介して第2情報処理装置203の受付部241に送信するようにしてもよい。出力プログラム219は、記録媒体にサンプルデータを書くようにしてもよい。また、出力プログラム219は、サンプル格納部217に格納されているサンプルデータを一旦退避させた後に、出力するようにしてもよい。サンプルデータは、分析フェーズ(S105)において用いられる。サンプルデータを出力すると、計測フェーズ(S103)の処理を終える。
尚、後述する実施の形態のように、計測フェーズ(S103)と分析フェーズ(S105)とを同じ情報処理装置で実行する場合には、S1111は省くようにしてもよい。
サンプリング処理について詳述する前に、第1情報処理装置201のモジュール構成の詳細及びサンプルデータについて説明する。図12に、第1情報処理装置201のモジュール構成例を示す。第1情報処理装置201のCPU211は、モニタ1201、プロセスIDレジスタ1207及びプログラムカウンタ1209を有している。モニタ1201は、性能モニタリングを実行する。つまり、モニタ1201は、設定された性能イベント(以下、イベントという。)を監視し、性能モニタリングカウンタを用いてイベントが発生した回数を計数する。この例では、サイクルのイベントと、実行命令のイベントとを計数する。図12におけるサイクルカウンタ1203は、サイクルのイベントを計数するための性能モニタリングカウンタを指している。図12における命令カウンタ1205は、実行命令のイベントを計数するための性能モニタリングカウンタを指している。プロセスIDレジスタ1207は、プロセスIDを記憶するためのレジスタである。プログラムカウンタ1209は、実行アドレスを記憶するためのレジスタである。尚、サイクルカウンタ1203による割り込みについては、後述する。
第1情報処理装置201が有するメインメモリ1200には、サンプリングドライバ215、出力プログラム219、実行プログラム1221及び制御プログラム1223がロードされる。サンプリングドライバ215は、カーネルモード1231で動作する。出力プログラム219、実行プログラム1221及び制御プログラム1223は、ユーザモード1233で動作する。実行プログラム1221は、第1プログラム記憶部213から読み出される。制御プログラム1223は、計測フェーズ(S103)における処理を制御する。但し、計測フェーズ(S103)における処理をユーザの操作によって制御する場合には、制御プログラム1223を設けないようにしてもよい。
メインメモリ1200には、更に、サンプル格納部217と退避領域1211が設けられる。退避領域1211は、実行プログラム1221の動作に関わるデータをCPU211から退避するために用いられる。第1プログラム記憶部213は、例えばハードディスク・ドライブを用いて実現される。
続いて、サンプル格納部217に格納されるサンプルデータについて説明する。図13に、サンプルデータの例を示す。この例におけるサンプルデータは、テーブル形式である。但し、サンプルデータは、テーブル形式以外の形式であってもよい。この例におけるサンプルデータは、1回の採取に対応するサンプルレコードを有している。サンプルレコードは、CPU番号を設定するためのフィールドと、プロセスIDを設定するためのフィールドと、実行アドレスを設定するためのフィールドと、実行命令数を設定するためのフィールドとを有している。CPU番号は、モニタリングを行っているCPUを識別する。モニタリングを行うCPUが予め決まっている場合には、CPU番号は省略するようにしてもよい。プロセスIDは、サンプル採取時点において動作していたプロセスを識別する。実行アドレスは、サンプル採取時点においてCPUが実行していた命令を指している。実行命令数は、前回のサンプル採取時点から今回のサンプル採取時点までにCPUが実行していた命令の延べ数である。
この例における第1サンプルレコードは、CPU番号「0」に相当するCPUにおけるモニタリングによって、最初のサンプル採取時点において、プロセスID「6612」で識別されるプロセスが動作していたことを示している。同じく、最初のサンプル採取時点において、実行アドレス「0x0405」が指す命令を実行していたことを示している。同じく、サンプリングの開始時点から最初のサンプル採取時点までに、延べ「312,007」個の命令が実行されたことを示している。
この例における第2サンプルレコードは、第1サンプルレコードの場合と同様に、CPU番号「0」に相当するCPUにおけるモニタリングによって、2回目のサンプル採取時点において、プロセスID「6612」で識別されるプロセスが動作していたことを示している。同じく、2回目のサンプル採取時点において、実行アドレス「0x04C8」が指す命令を実行していたことを示している。同じく、最初のサンプル採取時点から2回目のサンプル採取時点までに、延べ「313,390」個の命令が実行されたことを示している。
この例における第3サンプルレコードは、第1サンプルレコード及び第2サンプルレコードの場合と同様に、CPU番号「0」に相当するCPUにおけるモニタリングによって、3回目のサンプル採取時点において、プロセスID「6612」で識別されるプロセスが動作していたことを示している。同じく、3回目のサンプル採取時点において、実行アドレス「0x0C13」が指す命令を実行していたことを示している。同じく、2回目のサンプル採取時点から3回目のサンプル採取時点までに、延べ「307,356」個の命令が実行されたことを示している。
本実施の形態では、図12に示した第1情報処理装置201のモジュール構成例を前提として、サンプリング処理(A)を実行する。図14に、サンプリング処理(A)フローを示す。サンプリングドライバ215は、モニタ1201にイベントを設定する(S1401)。この例では、サンプリングドライバ215は、サイクルのイベントと実行命令のイベントとを設定する。このように、モニタ1201における一方の性能モニタリングカウンタにおいて、サイクル数がカウントされる。図12に示したサイクルカウンタ1203は、この性能モニタリングカウンタに相当する。また、モニタ1201における他方の性能モニタリングカウンタにおいて、実行命令数がカウントされる。図12に示した命令カウンタ1205は、この性能モニタリングカウンタに相当する。
本実施の形態では、サイクル数ベースのサンプリング、つまりタイムベースのサンプリングを行う。サイクル数ベースのサンプリングでは、サイクル数の増加が所定値に達した段階でサンプルが採取される。
サンプリングドライバ215は、サイクルカウンタ1203と命令カウンタ1205とを初期化する(S1403)。サイクルカウンタ1203は、サンプリングドライバ215がサンプルを採取するタイミングを計るために用いられる。そのため、サイクル数を所定数だけカウントアップすると、サイクルカウンタ1203がオーバーフローするように、サイクルカウンタ1203の初期値が設定される。サイクルカウンタ1203がオーバーフローすると、サンプリングドライバ215に対して割り込みが発生する。この割り込みを契機として、サンプルが採取される。命令カウンタ1205の初期値は、0である。このように命令カウンタ1205の初期値を0にすれば、次のサンプル採取までの間に実行した命令数がサンプル格納部217に記録される。
サンプリングドライバ215は、モニタ1201を起動する(S1405)。既に、モニタ1201が起動されている場合には、S1405の処理を省くようにしてもよい。
サンプリングドライバ215は、サイクルカウンタ1203のオーバーフローによる割り込みの発生を待つ(S1407)。サイクルカウンタ1203のオーバーフローによる割り込みが発生すると、実行プログラム1221の動作を中断するために、CPU211は実行プログラム1221の動作に関わるデータを退避領域1211に退避する。この例では、プログラムカウンタ1209の値とプロセスIDレジスタ1207の値が、メインメモリ1200に設けられた退避領域1211に退避される。プログラムカウンタ1209の値は、割り込みが発生した時点で実行していた命令を指す実行アドレスである。プロセスIDレジスタ1207の値は、割り込みが発生した時点で実行していたプロセスのIDである。
その後、サンプリングドライバ215の動作に切り替わる。サンプリングドライバ215は、命令カウンタ1205から実行命令数を取得する(S1409)。実行命令数は、前回サンプルを採取した時点から今回サンプルを採取する時点までの期間において、CPU211が実行した命令の総数である。
サンプリングドライバ215は、退避領域1211からプロセスIDと実行アドレスとを取得する(S1411)。図13に示したプロセスID「6612」は、実行プログラム1221のプロセスの識別子である。
サンプリングドライバ215は、プロセスIDと実行アドレスと実行命令数とを、サンプルデータの新たなサンプルレコードに格納する(S1413)。図13に示したCPU番号「0」は、CPU211を指している。
サンプリングドライバ215は、S1403の場合と同様に、サイクルカウンタ1203と命令カウンタ1205とを初期化する(S1415)。この段階で、CPU211は、実行プログラム1221の動作に関わるデータを退避領域1211から復帰させ、実行プログラム1221の動作に戻る。
サンプリングドライバ215は、S1407に示した処理へ戻って次の割り込みの発生を待つ。このようにして、サンプリング処理が停止するまで、S1407乃至S1415の処理が繰り返される。以上で、計測フェーズ(S103)についての説明を終える。
次に、分析フェーズ(S105)について説明する。図15に、分析部245のモジュール構成例を示す。分析部245は、第2算出部1501、第1データ記憶部1503、第3算出部1505、第2データ記憶部1507及び第4算出部1509を有する。
第2算出部1501は、第2算出処理を実行する。第2算出部1501は、第2算出処理において、サンプルデータとブロックマップとに基づいて、サンプリング期間に各基本ブロックに含まれる命令が実行された回数(以下、第1実行回数という。)を算出する。第1データ記憶部1503は、第1実行回数のデータ(以下、第1データという。)を記憶する。第1データについては、図16を用いて後述する。
第3算出部1505は、第3算出処理を実行する。第3算出部1505は、第3算出処理において、基本ブロックにおける第1実行回数に、当該基本ブロックにおいて各命令種に属する命令が占める比率を乗じて、当該基本ブロックにおいて各命令種に属する命令が実行された回数(以下、第2実行回数という。)を算出する。第2データ記憶部1507は、第2実行回数のデータ(以下、第2データという。)を記憶する。第2データについては、図17を用いて後述する。
第4算出部1509は、第4算出処理を実行する。第4算出部1509は、第4算出処理において、各命令種について、各基本ブロックにおける第2実行回数の合計を算出する。算出した第2実行回数の合計は、結果データとして結果記憶部247に記憶される。結果データについては、図18を用いて後述する。
上述した第2算出部1501、第3算出部1505及び第4算出部1509は、ハードウエア資源(例えば、図30)と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
上述した第1データ記憶部1503及び第2データ記憶部1507は、ハードウエア資源(例えば、図30)を用いて実現される。
第1データについて説明する。図16に、第1データの例を示す。この例における第1データは、テーブル形式である。但し、第1データは、テーブル形式以外の形式であってもよい。
この例における第1データは、基本ブロックに対応するブロックレコードを有している。第1データにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、第1実行回数を設定するためのフィールドとを有している。上述した通り、第1実行回数は、サンプリング期間に基本ブロックに含まれる命令が実行された延べ回数である。第1実行回数は、実測値ではなく、推定値である。但し、統計的な見地から、第1実行回数は実測値に近似するものとみなされる。尚、第1実行回数のカウント対象は、基本ブロックに含まれる不特定の命令の実行である。つまり、いずれの命令種に属する命令が実行された場合も、第1実行回数としてカウントされる。
この例における第1ブロックレコードは、最初の基本ブロックに含まれる命令が、延べ「1,000,000,000」回実行されたことを示している。同じく、第2ブロックレコードは、2番目の基本ブロックに含まれる命令が、延べ「2,000,000,000」回実行されたことを示している。同じく、第3ブロックレコードは、3番目の基本ブロックに含まれる命令が、延べ「3,000,000,000」回実行されたことを示している。同じく、第4ブロックレコードは、4番目の基本ブロックに含まれる命令が、延べ「100,000,000」回実行されたことを示している。そして、各基本ブロックにおける第1実行回数の合計は、「50,000,000,000」である。つまり、実行プログラム1221の動作によってサンプリング期間にCPU211が実行した命令の総数は、「50,000,000,000」である。
第2データについて説明する。図17に、第2データの例を示す。この例における第2データは、テーブル形式である。但し、第2データは、テーブル形式以外の形式であってもよい。
この例における第2データは、基本ブロックに対応するブロックレコードを有している。第2データにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、基本ブロックにおける各命令種の第2実行回数を設定するためのフィールドとを有している。上述したように、第2実行回数は、基本ブロックにおける各命令種について、当該命令種に属する命令が実行された延べ回数である。尚、第2実行回数は、各基本ブロックの第1実行回数(参照:図16)に、当該基本ブロックにおける各命令種の比率(参照:図7)を乗ずることによって求められる。第2実行回数は、第1実行回数と同様に、実測値ではなく、推定値である。但し、統計的な見地から、第2実行回数も実測値に近似するものとみなされる。
この例における第1ブロックレコードは、最初の基本ブロックにおける命令種「整数演算」に属する命令が、サンプリング期間中に「250,000,000」回実行されたことを示している。同じく第1ブロックレコードは、最初の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に一切実行されていないことを示している。同じく第1ブロックレコードは、最初の基本ブロックにおける命令種「分岐命令」に属する命令が、サンプリング期間中に「125,000,000」回実行されたことを示している。同じく第1ブロックレコードは、最初の基本ブロックにおける命令種「ロード又はストア」に属する命令が、サンプリング期間中に「625,000,000」回実行されたことを示している。
この例における第2ブロックレコードは、2番目の基本ブロックにおける命令種「整数演算」に属する命令が、サンプリング期間中に「500,000,000」回実行されたことを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「1,200,000,000」回実行されたことを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおける命令種「分岐命令」に属する命令が、サンプリング期間中に「100,000,000」回実行されたことを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおける命令種「ロード又はストア」に属する命令が、サンプリング期間中に「200,000,000」回実行されたことを示している。
この例における第3ブロックレコードは、3番目の基本ブロックにおける命令種「整数演算」に属する命令が、サンプリング期間中に「100,000,000」回実行されたことを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「2,000,000,000」回実行されたことを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおける命令種「分岐命令」に属する命令が、サンプリング期間中に「100,000,000」回実行されたことを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおける命令種「ロード又はストア」に属する命令が、サンプリング期間中に「800,000,000」回実行されたことを示している。
この例における第4ブロックレコードは、4番目の基本ブロックにおける命令種「整数演算」に属する命令が、サンプリング期間中に「20,000,000」回実行されたことを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に一切実行されていないことを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおける命令種「分岐命令」に属する命令が、サンプリング期間中に「20,000,000」回実行されたことを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおける命令種「ロード又はストア」に属する命令が、サンプリング期間中に「60,000,000」回実行されたことを示している。
結果データについて説明する。図18に、結果データの例を示す。この例における結果データは、各命令種の第3実行回数を設定するためのフィールドを有している。第3実行回数は、実行プログラムにおいて各命令種について当該命令種に属する命令が実行された延べ回数である。尚、第3実行回数は、命令種毎に各基本ブロックの第2実行回数(参照:図17)を合計することによって求められる。第3実行回数は、第1実行回数及び第2実行回数と同様に、実測値ではなく、推定値である。但し、統計的な見地から、第3実行回数も実測値に近似するとみなされる。
この例における結果データは、実行プログラムにおける命令種「整数演算」に属する命令が、サンプリング期間中に「5,000,000,000」回実行されたことを示している。この例における結果データは、実行プログラムにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「20,000,000,000」回実行されたことを示している。この例における結果データは、実行プログラムにおける命令種「分岐命令」に属する命令が、サンプリング期間中に「10,000,000,000」回実行されたことを示している。更に、この例における結果データは、実行プログラムにおける命令種「ロード又はストア」に属する命令が、サンプリング期間中に「15,000,000,000」回実行されたことを示している。
続いて、分析フェーズ(S105)における処理について説明する。図19に、分析フェーズ(S105)の処理フローの例を示す。受付部241は、サンプルデータを受け付ける(S1901)。受付部241は、第1情報処理装置201の出力プログラム219からネットワーク(例えば、LANあるいはインターネット)を介してサンプルデータを受信するようにしてもよい。あるいは、受付部241は、記録媒体を介してサンプルデータを受け付けるようにしてもよい。受け付けたサンプルデータは、サンプル記憶部243に記憶される。この例では、図13に示したサンプルデータが、サンプル記憶部243に記憶される。
第2算出部1501は、第2算出処理を実行する(S1903)。第2算出処理において、第2算出部1501は、上述したように、サンプルデータとブロックマップとに基づいて、サンプリング期間に各基本ブロックに含まれる命令が実行された回数、つまり第1実行回数を算出する。
以下、第2算出処理について詳述する。図20に、第2算出処理フローの例を示す。第2算出部1501は、サンプル記憶部243に記憶されているサンプルデータに含まれるサンプルレコードを1つ特定する(S2001)。第2算出部1501は、例えば、先頭から順次サンプルレコードを特定する。
第2算出部1501は、ブロックマップ記憶部237に記憶されているブロックマップに基づいて、特定したサンプルレコードに設定されているサンプルが採取されたときに実行されていた基本ブロックを特定する(S2003)。具体的には、第2算出部1501は、ブロックマップに設定されている範囲のうち、特定したサンプルレコードに設定されている実行アドレスを含む範囲を探す。実行アドレスを含む範囲が設定されているブロックレコードの基本ブロック番号によって、基本ブロックを特定する。
第2算出部1501は、S2001において特定したサンプルレコードに設定されている実行命令数を、第1データのブロックレコードのうち、S2003において特定した基本ブロックに相当するブロックレコードの第1実行回数に加える(S2005)。
第2算出部1501は、未処理のサンプルレコードがあるか否かを判定する(S2007)。未処理のサンプルレコードがあると判定した場合には、S2001に戻って、上述した処理を繰り返す。
一方、未処理のサンプルレコードがないと判定した場合には、第2算出処理を終える。第2算出処理を終えると、図19に示したS1905の処理に移る。
図19の説明に戻る。第3算出部1505は、第3算出処理を実行する(S1905)。第3算出処理において、第3算出部1505は、基本ブロックにおける第1実行回数に、当該基本ブロックにおいて各命令種に属する命令が占める比率を乗じて、当該基本ブロックにおいて各命令種に属する命令が実行された回数、つまり第2実行回数を算出する。
以下、第3算出処理について詳述する。図21に、第3算出処理フローの例を示す。第3算出部1505は、基本ブロックを1つ特定する(S2101)。第3算出部1505は、例えば第1データのブロックレコードを先頭から順次特定する。第3算出部1505は、図10に示した第1算出処理のS1011において比率を算出した命令種のうち、1の命令種を特定する(S2103)。第3算出部1505は、S2101において特定した基本ブロックにおけるS2103において特定した命令種の比率を比率データから読む。
そして、第3算出部1505は、S2101において特定した基本ブロックの第1実行回数に、比率データから読んだ命令種の比率を乗じて、サンプリング期間中の当該基本ブロックにおける当該命令種に属する命令の実行回数、つまり第2実行回数を求める(S2105)。算出された第2実行回数は、S2101において特定した基本ブロックのブロックレコードに含まれる当該命令種の第2実行回数のフィールドに設定される。
第3算出部1505は、未処理の命令種があるか否かを判定する(S2107)。未処理の命令種があると判定した場合には、S2103に示した処理に戻って、上述した処理を繰り返す。
一方、未処理の命令種がないと判定した場合には、第3算出部1505は、未処理の基本ブロックがあるか否かを判定する(S2109)。未処理の基本ブロックがあると判定した場合には、S2101に示した処理に戻って、上述した処理を繰り返す。
一方、未処理の基本ブロックがないと判定した場合には、第3算出処理を終える。第3算出処理を終えると、図19に示したS1907の処理に移る。
図19の説明に戻る。第4算出部1509は、第4算出処理を実行する(S1907)。第4算出処理において、第4算出部1509は、各命令種について、各基本ブロックにおける第2実行回数の合計を算出する。つまり、第4算出部1509は、各基本ブロックにおける第2実行回数を命令種毎に集計する。第4算出処理において命令種毎に合計された第3実行回数は、サンプリング期間における実行プログラムの動作によって当該命令種に属する命令が実行された回数に相当する。
以下、第4算出処理について詳述する。図22に、第4算出処理フローの例を示す。第4算出部1509は、図10に示した第1算出処理のS1011において比率を算出した命令種のうち、1の命令種を特定する(S2201)。
第4算出部1509は、特定した命令種の第2実行回数を、第2データにおける各ブロックレコードから集め、合計する(S2203)。算出された合計値は、結果記憶部247に記憶される結果データにおける当該命令種の第3実行回数に設定される。
第4算出部1509は、未処理の命令種があるか否かを判定する(S2205)。未処理の命令種があると判定した場合には、S2201に戻って、上述した処理を繰り返す。
一方、未処理の命令種がないと判定した場合には、第4算出処理を終える。第4算出処理を終えると、図19に示したS1909の処理に移る。
図19の説明に戻る。出力部249は、結果記憶部247に記憶している結果データを出力する(S1909)。例えば、出力部249は、結果データを表示する。出力部249による出力形態は、表示に限らず、例えば送信や記憶媒体への書き込みなどであってもよい。また、結果データを結果記憶部247に留め、出力部249による結果データの出力を省くようにしてもよい。以上で、分析フェーズ(S105)についての説明を終える。
命令種は、上述した例に限らない。命令種は、例えば積和演算であってもよい。命令種は、例えばSIMD(Single Instruction Multiple Data)演算であってもよい。また、本実施の形態及び以下で述べる実施の形態を、CPU以外の演算装置に適用するようにしてもよい。
ここで、本実施の形態における第1実行回数の推定について補足する。まず、基本ブロックの大きさに着目する。大きい基本ブロックは、範囲が広いので採取時点において実行している可能性が高い。従って、大きい基本ブロックは、サンプルの実行アドレスに該当することが多く、第1実行回数が大きくなりやすい。
反対に、小さい基本ブロックは、範囲が狭いので採取時点において実行している可能性が低い。従って、小さい基本ブロックは、サンプルの実行アドレスに該当することが少なく、第1実行回数が小さくなりやすい。
仮に各基本ブロックにおける処理の頻度が等しければ、命令数が多い基本ブロックの第1実行回数が大きくなり、命令数が少ない基本ブロックの第1実行回数が小さくなるので、本実施の形態における第1実行回数は実測値と近似する傾向がある。
一方、基本ブロックにおける処理の頻度に着目する。処理の頻度が高い基本ブロックは、サンプルの実行アドレスに該当することが多く、第1実行回数が大きくなりやすい。
反対に、処理の頻度が低い基本ブロックは、サンプルの実行アドレスに該当することが少なく、第1実行回数が小さくなりやすい。
仮に各基本ブロックの大きさが等しければ、頻繁に処理される基本ブロックの第1実行回数が大きくなり、稀にしか処理されない基本ブロックの第1実行回数が小さくなり、本実施の形態における第1実行回数は実測値と近似する傾向がある。
本実施の形態によれば、分析フェーズ(S105)を計測フェーズ(S103)と分離するので、演算装置における命令種毎の実行回数を低い負荷で計測することができる。命令種毎の実行回数は、例えば演算装置を用いる情報処理装置の調整に役立つ。
また、命令種を独自に設定できるので、性能モニタリングカウンタにおける性能イベントとして設定できない命令種の実行回数を求められるという面もある。特定の命令種の実行回数を求めれば、当該特定の命令種を多く含むプログラムの動作環境としての演算装置の性能を示す指標として役立つ。例えば、浮動小数点演算を多く含む実行プログラムの動作における浮動小数点演算の実行回数を求めれば、当該プログラムの動作環境としての演算装置の性能を知ることができる。
また、基本ブロックの実行回数は、基本ブロックに含まれる各命令の実行回数と一致するので、基本ブロックを単位として命令の実行回数を命令種に按分することによって、命令種別の実行回数をより正しく求めることができる。
また、サイクル数ベースのサンプリングを行うので、時間当たりの処理能力を評価することに役立つ面がある。
[実施の形態2]
上述した実施の形態では、サイクル数ベースのサンプリングを行う例について説明したが、本実施の形態では、キャッシュミス数ベースのサンプリングを行う例について説明する。
図23に、実施の形態2に係る第1情報処理装置201のモジュール構成例を示す。図23に示したモニタ1201は、サイクルのイベントに代えて、キャッシュミスのイベントを計数する。図23に示したキャッシュミスカウンタ2301は、キャッシュミスのイベントを計数するための性能モニタリングカウンタを指している。
本実施の形態におけるサンプリング処理を、図14を用いて説明する。S1401において、サンプリングドライバ215は、モニタ1201にキャッシュミス数のイベントと実行命令数のイベントとを設定する。この例では、モニタ1201における一方の性能モニタリングカウンタにおいて、キャッシュミス数がカウントされる。図23に示したキャッシュミスカウンタ2301は、この性能モニタリングカウンタに相当する。また、実施の形態1の場合と同様に、モニタ1201における他方の性能モニタリングカウンタにおいて、実行命令数がカウントされる図23に示した命令カウンタ1205は、この性能モニタリングカウンタに相当する。
S1403において、サンプリングドライバ215は、キャッシュミスカウンタ2301と命令カウンタ1205とを初期化する。キャッシュミスカウンタ2301は、サンプリングドライバ215がサンプルを採取するタイミングを計るために用いられる。そのため、キャッシュミス数を所定数だけカウントアップすると、キャッシュミスカウンタ2301がオーバーフローするように、キャッシュミスカウンタ2301の初期値が設定される。キャッシュミスカウンタ2301がオーバーフローすると、サンプリングドライバ215に対する割り込みが発生する。この割り込みを契機として、サンプルが採取される。命令カウンタ1205の初期値は、実施の形態1の場合と同様に、0である。
サンプリングドライバ215は、実施の形態1の場合と同様に、モニタ1201を起動する(S1405)。
サンプリングドライバ215は、キャッシュミスカウンタ2301のオーバーフローによる割り込みの発生を待つ(S1407)。キャッシュミスカウンタ2301のオーバーフローによる割り込みが発生すると、実施の形態1の場合と同様に、CPU211は実行プログラム1221の動作に関わるデータを退避領域1211に退避する。
その後、サンプリングドライバ215の動作に切り替わる。サンプリングドライバ215は、実施の形態1の場合と同様に、命令カウンタ1205から実行命令数を取得する(S1409)。
サンプリングドライバ215は、実施の形態1の場合と同様に、退避領域1211からプロセスIDと実行アドレスとを取得する(S1411)。
サンプリングドライバ215は、実施の形態1の場合と同様に、プロセスIDと実行アドレスと実行命令数とを、サンプルデータの新たなサンプルレコードに格納する(S1413)。
サンプリングドライバ215は、S1403の場合と同様に、キャッシュミスカウンタ2301と命令カウンタ1205とを初期化する(S1415)。この段階で、CPU211は、実行プログラム1221の動作に関わるデータを退避領域1211から復帰させ、実行プログラム1221の動作に戻る。
サンプリングドライバ215は、S1407に示した処理へ戻って次の割り込みの発生を待つ。このようにして、サンプリング処理が停止するまで、S1407乃至S1415の処理が繰り返される。
準備フェーズ(S101)及び分析フェーズ(S105)については、実施の形態1の場合と同様である。
本実施の形態によれば、キャッシュミス数ベースのサンプリングを行うので、キャッシュミスが生じやすい状況における性能を評価することに役立つ面がある。
[実施の形態3]
本実施の形態では、実行命令数ベースのサンプリングを行う例について説明する。
図24に、実施の形態3に係る第1情報処理装置201のモジュール構成例を示す。本実施の形態では、命令カウンタ1205のオーバーフローによる割り込みを契機として、サンプルが採取される。従って、命令カウンタ1205の他に性能モニタリングカウンタを用いなくても済む。
図25に、サンプリング処理(B)フローを示す。サンプリングドライバ215は、モニタ1201に実行命令数のイベントを設定する(S2501)。この例では、モニタ1201における1の性能モニタリングカウンタにおいて、実行命令数がカウントされる。図24に示した命令カウンタ1205は、この性能モニタリングカウンタに相当する。
サンプリングドライバ215は、命令カウンタ1205を初期化する(S2503)。命令カウンタ1205は、サンプリングドライバ215がサンプルを採取するタイミングを計るために用いられる。そのため、実行命令数を所定数だけカウントアップすると、命令カウンタ1205がオーバーフローするように、命令カウンタ1205の初期値が設定される。命令カウンタ1205がオーバーフローすると、サンプリングドライバ215に対する割り込みが発生する。この割り込みを契機として、サンプルが採取される。サンプル採取の間隔で実行される命令数は、所定数である。
サンプリングドライバ215は、実施の形態1の場合と同様に、モニタ1201を起動する(S2505)。
サンプリングドライバ215は、命令カウンタ1205のオーバーフローによる割り込みの発生を待つ(S2507)。命令カウンタ1205のオーバーフローによる割り込みが発生すると、実施の形態1の場合と同様に、CPU211は実行プログラム1221の動作に関わるデータを退避領域1211に退避する。
サンプリングドライバ215は、実施の形態1の場合と同様に、退避領域1211からプロセスIDと実行アドレスとを取得する(S2509)。
サンプリングドライバ215は、実施の形態1の場合と同様に、プロセスIDと実行アドレスと所定の実行命令数とを、サンプルデータの新たなサンプルレコードに格納する(S2511)。尚、実行命令数は一定であるので、実行命令数を新たなサンプルレコードに格納しないようにしてもよい。
サンプリングドライバ215は、S2503の場合と同様に、命令カウンタ1205を初期化する(S2513)。この段階で、CPU211は、実行プログラム1221の動作に関わるデータを退避領域1211から復帰させ、実行プログラム1221の動作に戻る。
サンプリングドライバ215は、S2507に示した処理へ戻って次の割り込みの発生を待つ。このようにして、サンプリング処理が停止するまで、S2507乃至S2513の処理が繰り返される。
準備フェーズ(S101)及び分析フェーズ(S105)については、実施の形態1の場合と同様である。尚、図20に示したS2005の処理で、第1実行回数に加えられる実行命令数は一定であるので、サンプルレコードから読まないようにしてもよい。
本実施の形態によれば、実行命令数ベースのサンプリングを行うので、性能モニタリングカウンタの使用数が少なくて済むという面がある。
[実施の形態4]
上述した実施の形態では、4つの命令種について第3実行回数を求める例を示したが、分析対象とする命令種は、4つに限らない。本実施の形態では、1つの命令種について第3実行回数を求める例を示す。
第1情報処理装置201及び第2情報処理装置203のモジュール構成及び処理は、上述した実施の形態と同様である。以下では、1つの命令種を対象とした場合のデータの例を示す。
図26に、実施の形態4に係る比率データの例を示す。図7の場合と同様に、この例における比率データは、テーブル形式である。また、図7の場合と同様に、この例における比率データは、基本ブロックに対応するブロックレコードを有している。比率データにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、基本ブロックにおける命令種「浮動小数点演算」に属する命令の比率を設定するためのフィールドと、基本ブロックにおける「その他」の命令種に属する命令の比率を設定するためのフィールドとを有している。但し、「その他」の命令種に属する命令の比率を設定するためのフィールドを省略するようにしてもよい。
この例における第1ブロックレコードは、最初の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「0.0」パーセントであることを示している。同じく第1ブロックレコードは、最初の基本ブロックにおいて「その他」の命令種に属する命令の比率が「100.0」パーセントであることを示している。
この例における第2ブロックレコードは、2番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「60.0」パーセントであることを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおいて「その他」の命令種に属する命令の比率が「40.0」パーセントであることを示している。
この例における第3ブロックレコードは、3番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「66.7」パーセントであることを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおいて「その他」の命令種に属する命令の比率が「33.3」パーセントであることを示している。
この例における第4ブロックレコードは、4番目の基本ブロックにおいて命令種「浮動小数点演算」に属する命令の比率が「0.0」パーセントであることを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおいて「その他」の命令種に属する命令の比率が「100.0」パーセントであることを示している。
図27に、実施の形態4に係る第2データの例を示す。図17の場合と同様に、この例における第2データは、テーブル形式である。また、図17の場合と同様に、この例における第2データは、基本ブロックに対応するブロックレコードを有している。この例における第2データにおけるブロックレコードは、基本ブロック番号を設定するためのフィールドと、基本ブロックにおける命令種「浮動小数点演算」の第2実行回数を設定するためのフィールドと、基本ブロックにおける「その他」の命令種の第2実行回数を設定するためのフィールドとを有している。但し、基本ブロックにおける「その他」の命令種の第2実行回数を設定するためのフィールドを省略するようにしてもよい。
この例における第1ブロックレコードは、最初の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に一切実行されていないことを示している。同じく第1ブロックレコードは、最初の基本ブロックにおける「その他」の命令種に属する命令が、サンプリング期間中に「1,000,000,000」回実行されたことを示している。
この例における第2ブロックレコードは、2番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「1,200,000,000」回実行されたことを示している。同じく第2ブロックレコードは、2番目の基本ブロックにおける「その他」の命令種に属する命令が、サンプリング期間中に「800,000,000」回実行されたことを示している。
この例における第3ブロックレコードは、3番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「2,000,000,000」回実行されたことを示している。同じく第3ブロックレコードは、3番目の基本ブロックにおける「その他」の命令種に属する命令が、サンプリング期間中に「1,000,000,000」回実行されたことを示している。
この例における第4ブロックレコードは、4番目の基本ブロックにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に一切実行されていないことを示している。同じく第4ブロックレコードは、4番目の基本ブロックにおける「その他」の命令種に属する命令が、サンプリング期間中に「100,000,000」回実行されたことを示している。
図28に、実施の形態4に係る結果データの例を示す。この例における結果データは、命令種「浮動小数点演算」の第3実行回数を設定するためのフィールドと、「その他」の命令種の第3実行回数を設定するためのフィールドとを有している。但し、「その他」の命令種の第3実行回数を設定するためのフィールドを省略するようにしてもよい。
この例における結果データは、実行プログラムにおける命令種「浮動小数点演算」に属する命令が、サンプリング期間中に「20,000,000,000」回実行されたことを示している。更に、この例における結果データは、実行プログラムにおける「その他」の命令種に属する命令が、サンプリング期間中に「30,000,000,000」回実行されたことを示している。
本実施の形態のように、分析対象の命令種の数を少なくすれば、分析フェーズ(S105)における処理が早く済む。
[実施の形態5]
上述した実施の形態では、1つの情報処理装置が、準備フェーズ(S101)における処理、計測フェーズ(S103)における処理及び分析フェーズ(S105)における処理を実行する例について説明する。
図29に、第3情報処理装置2901のモジュール構成例を示す。第3情報処理装置2901は、図2に示した第1情報処理装置201の場合と同様に、CPU211、第1プログラム記憶部213、サンプリングドライバ215及びサンプル格納部217を有する。
第3情報処理装置2901は、図2に示した第2情報処理装置203の場合と同様に、準備部235、ブロックマップ記憶部237、比率記憶部239、分析部245、結果記憶部247及び出力部249を有する。
本実施の形態では、図8に示した準備フェーズ(S101)のS801に示した実行プログラム取得の処理を省くようにしてもよい。準備フェーズ(S101)における他の処理は、上述した実施の形態の場合と同様である。
本実施の形態では、図11に示した計測フェーズ(S103)のS1111に示したサンプルデータ出力の処理を省くようにしてもよい。図11に示した計測フェーズ(S103)における他の処理は、上述した実施の形態の場合と同様である。
本実施の形態では、図19に示した分析フェーズ(S105)のS1901に示したサンプルデータ受け付け処理を省くようにしてもよい。そして、分析部245は、サンプル格納部217からサンプルデータを読む。但し、第3情報処理装置2901にサンプル記憶部243を設け、サンプル格納部217に格納しているサンプルデータを、サンプル記憶部243にコピーするようにしてもよい。その場合には、分析部245は、サンプル記憶部243からサンプルデータを読む。分析フェーズ(S105)における他の処理は、上述した実施の形態の場合と同様である。
上述した実施の形態と同様に、これら3つのフェーズは、連続しなくてもよい。つまり、準備フェーズ(S101)における処理と計測フェーズ(S103)における処理は、連続的に実行されなくてもよい。また、計測フェーズ(S103)における処理と分析フェーズ(S105)における処理は、連続的に実行されなくてもよい。
本実施の形態のように1つの情報処理装置において、準備フェーズ(S101)における処理、計測フェーズ(S103)における処理及び分析フェーズ(S105)における処理を実行する場合でも、分析フェーズ(S105)を計測フェーズ(S103)と分離するので、演算装置における命令種毎の実行回数を低い負荷で計測することができる。
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
なお、上で述べた第1情報処理装置201、第2情報処理装置203及び第3情報処理装置2901は、コンピュータ装置であって、図30に示すように、メモリ2501とCPU(Central Processing Unit)2503とハードディスク・ドライブ(HDD:Hard Disk Drive)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
以上述べた本発明の実施の形態をまとめると、以下のようになる。
本実施の形態に係るプログラム実行解析方法は、(A)プログラムから区切られた複数のブロックの各々について、当該ブロックに含まれる命令のうち、ある命令種に属する命令が占める比率を算出し、(B)上記プログラムを実行している演算装置から実行アドレスと実行命令数とを採取し、(C)実行アドレスと実行命令数とに基づいて、複数のブロックの各々について、当該ブロックに含まれる命令が実行された第1実行回数を算出し、(D)複数のブロックの各々について、当該ブロックにおける第1実行回数に、当該ブロックにおける上記比率を乗じて、上記命令種に属する命令が実行された第2実行回数を算出し、(E)複数のブロックの各々について算出した第2実行回数の合計を算出する処理を含む。
このようにすれば、演算装置における、ある命令種に属する命令の実行回数を低い負荷で計測することができる。ある命令種に属する命令の実行回数は、例えば演算装置を用いる情報処理装置の調整に役立つ。
更に、複数のブロックは、複数の基本ブロックであってもよい。
基本ブロックの実行回数は、基本ブロックに含まれる各命令の実行回数と一致するので、基本ブロックを単位として実行回数を命令種に按分することによって、命令種別の実行回数をより正しく求めることができる。
更に、サイクル数ベースのサンプリングによって、演算装置から実行アドレスと実行命令数とを採取するようにしてもよい。
このようにすれば、時間当たりの処理能力を評価することに役立つ面がある。
更に、キャッシュミス数ベースのサンプリングによって、演算装置から実行アドレスと実行命令数とを採取するようにしてもよい。
このようにすれば、キャッシュミスが生じやすい状況における性能を評価することに役立つ面がある。
更に、実行命令数ベースのサンプリングによって、演算装置から実行アドレスと実行命令数とを採取するようにしてもよい。
このようにすれば、性能モニタリングカウンタの使用数が少なくて済むという面がある。
なお、上記方法による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、CD−ROM、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
プログラムから区切られた複数のブロックの各々について、当該ブロックに含まれる命令のうち、ある命令種に属する命令が占める比率を算出し、
前記プログラムを実行している演算装置から実行アドレスと実行命令数とを採取し、
前記実行アドレスと前記実行命令数とに基づいて、前記複数のブロックの各々について、当該ブロックに含まれる命令が実行された第1実行回数を算出し、
前記複数のブロックの各々について、当該ブロックにおける前記第1実行回数に、当該ブロックにおける前記比率を乗じて、前記命令種に属する前記命令が実行された第2実行回数を算出し、
前記複数のブロックの各々について算出した前記第2実行回数の合計を算出する
処理を含み、コンピュータにより実行されるプログラム実行解析方法。
(付記2)
前記複数のブロックは、複数の基本ブロックである
付記1記載のプログラム実行解析方法。
(付記3)
サイクル数ベースのサンプリングによって、前記演算装置から前記実行アドレスと前記実行命令数とを採取する
付記1又は2記載のプログラム実行解析方法。
(付記4)
キャッシュミス数ベースのサンプリングによって、前記演算装置から前記実行アドレスと前記実行命令数とを採取する
付記1又は2記載のプログラム実行解析方法。
(付記5)
実行命令数ベースのサンプリングによって、前記演算装置から前記実行アドレスと前記実行命令数とを採取する
付記1又は2記載のプログラム実行解析方法。
(付記6)
プログラムから区切られた複数のブロックの各々について、当該ブロックに含まれる命令のうち、ある命令種に属する命令が占める比率を算出する第1算出部と、
前記プログラムを実行している演算装置から実行アドレスと実行命令数とを採取する採取部と、
前記実行アドレスと前記実行命令数とに基づいて、前記複数のブロックの各々について、当該ブロックに含まれる命令が実行された第1実行回数を算出する第2算出部と、
前記複数のブロックの各々について、当該ブロックにおける前記第1実行回数に、当該ブロックにおける前記比率を乗じて、前記命令種に属する前記命令が実行された第2実行回数を算出する第3算出部と、
前記複数のブロックの各々について算出した前記第2実行回数の合計を算出する第4算出部と
を有する情報処理装置。
(付記7)
プログラムから区切られた複数のブロックの各々について、当該プログラムを実行している演算装置から採取した実行アドレスと実行命令数とに基づいて、当該ブロックに含まれる命令が実行された第1実行回数を算出し、
前記複数のブロックの各々について、当該ブロックに含まれる命令のうち、ある命令種に属する命令が占める比率を、当該ブロックにおける前記第1実行回数に乗じて、当該命令種に属する当該命令が実行された第2実行回数を算出し、
前記複数のブロックの各々について算出した前記第2実行回数の合計を算出する
処理を、コンピュータに実行させるためのプログラム実行解析プログラム。