(57)【特許請求の範囲】
【請求項１】
任意のプログラムが動作するときにそのプログラムの実行のために割当てられて使用されるレジスタ群が複数個設けられ、あるプログラムの実行中に別のプログラムの呼び出しの際に発行される第１の命令及び別のプログラムの実行後にあるプログラムへ復帰の際に発行される第２の命令に応答して、あるプログラムの実行のために使用されるレジスタ群と別のプログラムの実行のために使用されるレジスタ群との切り換えが行われる複数個のレジスタウィンドウと、前記第１の命令及び前記第２の命令それぞれに応じたレジスタウィンドウの切換可能回数を示す第１及び第２のパラメータを有し、前記第１の命令実行時に前記第１のパラメータの値が０の場合及び前記第２の命令実行時に前記第２のパラメータの値が０の場合にトラップを発生させる機能と、
性能情報をカウントする機能と、
を備えたプロセッサによってプログラムの性能を測定する性能測定装置において、
性能測定開始指令が入力されると、前記第１及び第２のパラメータの値を共に０に設定する指示を前記プロセッサに与える性能測定開始処理手段と、
測定対象プログラムを実行し、前記プロセッサのトラップの発生を契機として少なくとも前記プロセッサがカウントしている性能測定情報を前記プロセッサから採取する性能測定情報採取手段と、
を有することを特徴とする性能測定装置。
【請求項２】
前記プロセッサは、前記第１の命令実行時に前記第１のパラメータのデクリメント、前記第２のパラメータのインクリメントを行うと共に、前記第２の命令実行時に前記第１のパラメータのインクリメント、前記第２のパラメータのデクリメントを行い、
前記性能測定情報採取手段による前記測定対象プログラムの実行が終了したら、性能測定終了指令により前記レジスタウィンドウの前記第１のパラメータと前記第２のパラメータとの値の合計を前記プロセッサが有するレジスタウィンドウの合計数から２を引いた値に設定する性能測定終了処理手段をさらに有することを特徴とする請求項１記載の性能測定装置。
【請求項３】
前記プロセッサが、処理された命令のステップ数をカウントしており、前記性能測定情報採取手段は、前記性能測定情報として、前記ステップ数を前記プロセッサから採取することを特徴とする請求項１記載の性能測定装置。
【請求項４】
前記プロセッサが、プログラム実行中の動作クロックのサイクルを示す命令サイクル数をカウントしており、前記性能測定情報採取手段は、前記性能測定情報として、前記命令サイクル数を前記プロセッサから採取することを特徴とする請求項１記載の性能測定装置。
【請求項５】
さらに、少なくとも時刻情報を定常的に採取する性能付加情報設定手段を有し、
前記性能測定開始処理手段は、１回のトラップ発生時に、前記性能測定情報として、前記プロセッサがカウントしている情報と前記性能付加情報設定手段が採取している情報とを、それぞれ前記プロセッサと前記性能付加情報設定手段とから採取することを特徴とする請求項１記載の性能測定装置。
【請求項６】
任意のプログラムが動作するときにそのプログラムの実行のために割当てられて使用されるレジスタ群が複数個設けられ、あるプログラムの実行中に別のプログラムの呼び出しの際に発行される第１の命令及び別のプログラムの実行後にあるプログラムへ復帰の際に発行される第２の命令に応答して、あるプログラムの実行のために使用されるレジスタ群と別のプログラムの実行のために使用されるレジスタ群との切り換えが行われる複数個のレジスタウィンドウと、前記第１の命令及び前記第２の命令それぞれに応じたレジスタウィンドウの切換可能回数を示す第１及び第２のパラメータを有し、前記第１の命令実行時に前記第１のパラメータの値が０の場合及び前記第２の命令実行時に前記第２のパラメータの値が０の場合にトラップを発生させる機能と、
性能情報をカウントする機能と、
を備えたプロセッサによってプログラムの性能を測定するための性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体において、
前記コンピュータを、
性能測定開始指令が入力されると、前記第１及び第２のパラメータの値を共に０に設定する指示を前記プロセッサに与える性能測定開始処理手段、
測定対象プログラムを実行し、前記プロセッサのトラップの発生を契機として少なくとも前記プロセッサがカウントしている性能測定情報を前記プロセッサからローカルメモリに退避させる性能測定情報採取手段、
として機能させるための性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
任意のプログラムが動作するときにそのプログラムの実行のために割当てられて使用されるレジスタ群が複数個設けられ、あるプログラムの実行中に別のプログラムの呼び出しの際に発行される第１の命令及び別のプログラムの実行後にあるプログラムへ復帰の際に発行される第２の命令に応答して、あるプログラムの実行のために使用されるレジスタ群と別のプログラムの実行のために使用されるレジスタ群との切り換えが行われる複数個のレジスタウィンドウと、前記第１の命令及び前記第２の命令それぞれに応じたレジスタウィンドウの切換可能回数を示す第１及び第２のパラメータを有し、前記第１の命令実行時に前記第１のパラメータの値が０の場合及び前記第２の命令実行時に前記第２のパラメータの値が０の場合にトラップを発生させる機能と、
性能情報をカウントする機能と、
を備えたプロセッサの機能を利用してプログラムの性能を測定するコンピュータの性能測定方法において、
性能測定開始処理手段が、性能測定開始指令が入力されると、前記第１及び第２のパラメータの値を共に０に設定する指示を前記プロセッサに与え、
性能測定情報採取手段が、測定対象プログラムを実行し、前記プロセッサのトラップの発生を契機として少なくとも前記プロセッサがカウントしている性能測定情報を前記プロセッサからローカルメモリに退避させる、
ことを特徴とする性能測定方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はソフトウェアの性能測定装置、性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体及び性能測定方法に関し、特にレジスタウィンドウを備えたＣＰＵ(Central Processing Unit) を利用したソフトウェアの性能測定装置、性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体及び性能測定方法に関する。
【０００２】
【従来の技術】
ソフトウェアの開発段階では、少しでも高速処理が可能なアルゴリズムでプログラムを組む必要がある。そこで、完成したプログラムの性能を測定する技術が必要となる。プログラムの性能を測定するには、そのプログラム中の特定の処理を実行するのに、命令が何ステップ実行されたのか（機械語の命令がいくつ実行したのか）をカウントすればよい。
【０００３】
レジスタウィンドウを備えたＣＰＵでは、レジスタウィンドウを利用することで、ステップ数のカウントを行うことができる。以下、SPARC architecture Version9 に準拠したレジスタウィンドウについて説明する。
【０００４】
図１０は、レジスタウィンドウの利用例を示す図である。レジスタウィンドウを用いたアーキテクチャでは、ＣＰＵ内のレジスタウィンドウを１６個のレジスタ集合に分ける。各レジスタ集合には、８個のレジスタが含まれる。レジスタウィンドウは、実行されるプログラムから使用可能なレジスタ群を管理するのに用いられる。ここでは、８個のレジスタウィンドウＷ０〜Ｗ７が設けられている。
【０００５】
各レジスタウィンドウは３つのレジスタ集合に対応している。レジスタウィンドウに対応するレジスタ群は、「イン」、「ローカル」、「アウト」の３種類の用途に分けられる。このとき、隣接するレジスタウィンドウの「アウト」と「イン」とは、同じレジスタ集合を共有する。「イン」のレジスタは、呼び出し元のプログラムから受け取るべき値が格納されるレジスタである。「ローカル」のレジスタは、そのプログラム内でのみ使用する値を格納するレジスタである。「アウト」のレジスタは、呼び出すプログラムへ渡すべき値を格納するレジスタである。実行中のプログラムが使用するレジスタ群は、カレントウィンドウポインタ（ＣＷＰ）によって決定される。
【０００６】
なお、レジスタウィンドウにはＯＴＨＥＲＷＩＮの領域が設定されており、この領域は、実行中のプログラムが使用するためのレジスタ群として用いることができない。
【０００７】
また、ほとんどのプログラムの呼び出しでは、ＳＡＶＥ命令またはＲＥＳＴＯＲＥ命令を使用してレジスタウィンドウを切り換え、プログラムの遷移を行っている。ＳＡＶＥ命令の場合、レジスタウィンドウは「Ｗ０→Ｗ１→Ｗ２→Ｗ３→Ｗ４→Ｗ５→Ｗ６→Ｗ７」という順番で遷移する。また、ＲＥＳＴＯＲＥ命令の場合、逆に「Ｗ７→Ｗ６→Ｗ５→Ｗ４→Ｗ３→Ｗ２→Ｗ１→Ｗ０」という順番で遷移する。
【０００８】
レジスタウィンドウには、ＣＡＮＳＡＶＥとＣＡＮＲＥＳＴＯＲＥという２つのパラメータがある。ＣＡＮＳＡＶＥは、トラップを発生せずに何回のＳＡＶＥ命令を実行できるのかを示す値である。また、ＣＡＮＲＥＳＴＯＲＥは、トラップを発生させずに何回のＲＥＳＴＯＲＥ命令が実行できるのかを示す値である。
【０００９】
あるプログラムを実行中に別のプログラムが呼び出される場合、呼び出し元のプログラムが、自己のレジスタウィンドウのアウトレジスタに引数を設定し、その後、プログラムの呼び出し処理を行う。すると、呼び出されたプログラムがＳＡＶＥ命令を発行する。これにより、レジスタウィンドウがＳＡＶＥ方向に切り換えられる。すなわち、ＣＷＰがＳＥＶＡ方向に１つ変更され、ＣＡＮＳＡＶＥがデクリメントされ、さらにＣＡＮＲＥＳＴＯＲＥがインクリメントされる。そして、呼び出されたプログラムは、インレジスタより引数を受け取り、プログラムに記述された処理を実行する。
【００１０】
また、呼び出されたプログラムから呼び出し元のプログラムに復帰する場合、インレジスタに復帰値を設定し、ＲＥＳＴＯＲＥ命令を発行する。これにより、レジスタウィンドウがＲＥＳＴＯＲＥ方向に切り換えられる。すなわち、ＣＷＰがＲＥＳＴＯＲＥ方向に１つ変更され、ＣＡＮＳＡＶＥがインクリメントされ、さらに、ＣＡＮＲＥＳＴＯＲＥがデクリメントされる。復帰先のプログラムは、アウトレジスタにより復帰情報を受け取り、中断していた処理の続きを行う。
【００１１】
このようなレジスタウィンドウを用い、あるレジスタウィンドウの環境になってから、次にレジスタウィンドウの切り換えが行われるまでの間に何ステップ分の処理が行われたのかをトレースすれば、ソフトウェアの部分的な性能を測定することができる。一般的に、レジスタウィンドウの切り換えに際しては、トラップが発生しないようにＯＳ(Operating System)で制御されている。そこで、従来は、プログラムが１ステップ実行する度に割り込みを発生させ、この割り込み処理によって、プログラムカウンタをトレースし、スッテプ数やその他の各種情報をトレースすることができる。
【００１２】
【発明が解決しようとする課題】
しかし、割り込みを発生させることでトレースデータの収集を行うと、１ステップを実行するのに通常処理の何倍もの時間がかかると共に、トレースデータが多量となり、トレースデータを格納するための記憶装置の容量が多量に必要になるという問題点がある。
【００１３】
また、すべての割り込みを禁止して走行するプログラムの性能データは、採取することができない。
本発明はこのような点に鑑みなされたものであり、割り込みを禁止して走行するプログラムも含め、プログラムの性能データを効率よく採取できる性能測定装置を提供することを目的とする。
【００１４】
また、本発明の別の目的は、割り込みを禁止して走行するプログラムも含め、プログラムの性能データを効率よく採取するための性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することである。
【００１５】
また、本発明の他の目的は、割り込みを禁止して走行するプログラムも含め、プログラムの性能データを効率よく採取するための性能測定方法を提供することである。
【００１６】
【課題を解決するための手段】
本発明では上記課題を解決するために、任意のプログラムが動作するときに使用するレジスタ群が複数個設けられ、プログラムの呼び出し及び復帰の際に実行中のプログラムで使用可能なレジスタ群の切り換えが行われるレジスタウィンドウを備えたプロセッサによってプログラムの性能を測定する性能測定装置において、性能測定開始指令が入力されると、システム全体のプログラムがトラップなしで使用できる前記レジスタウィンドウの個数を１つにすることで、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようにレジスタウィンドウの環境を変更する性能測定開始処理手段と、前記性能測定開始処理手段が設定した前記レジスタウィンドウの環境により測定対象プログラムを実行し、トラップの発生を契機として性能測定情報を採取する性能測定情報採取手段と、を有することを特徴とする性能測定装置が提供される。
【００１７】
このような性能測定装置によれば、性能測定開始指令が入力されると、性能測定開始処理手段により、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するように、レジスタウィンドウの環境が変更される。その後、性能測定情報採取手段により、性能測定開始処理手段が設定したレジスタウィンドウの環境により測定対象プログラムが実行され、トラップの発生を契機として性能測定情報が採取される。
【００１８】
また、上記課題を解決するために、任意のプログラムが動作するときに使用するレジスタ群が複数個設けられ、プログラムの呼び出し及び復帰の際に実行中のプログラムで使用可能なレジスタ群の切り換えが行われるレジスタウィンドウを備えたプロセッサによってプログラムの性能を測定するための性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体において、前記コンピュータを、性能測定開始指令が入力されると、システム全体のプログラムがトラップなしで使用できる前記レジスタウィンドウの個数を１つにすることで、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようにレジスタウィンドウの環境を変更する性能測定開始処理手段、前記性能測定開始処理手段が設定した前記レジスタウィンドウの環境により測定対象プログラムを実行し、トラップの発生を契機として性能測定情報を採取する性能測定情報採取手段、として機能させるための性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体が提供される。
【００１９】
このような記録媒体に記録された性能測定プログラムをコンピュータで実行することにより、上記本発明に係る性能測定装置の機能がコンピュータ上に構築される。
【００２０】
また、上記課題を解決するために、任意のプログラムが動作するときに使用するレジスタ群が複数個設けられ、プログラムの呼び出し及び復帰の際に実行中のプログラムで使用可能なレジスタ群の切り換えが行われるレジスタウィンドウを備えたプロセッサによってプログラムの性能を測定する性能測定方法において、システム全体のプログラムがトラップなしで使用できる前記レジスタウィンドウの個数を１つにすることで、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようにレジスタウィンドウの環境を変更し、変更後の前記レジスタウィンドウの環境により測定対象プログラムを実行し、トラップの発生を契機として性能測定情報を採取する、ことを特徴とする性能測定方法が提供される。
【００２１】
このような性能測定方法によれば、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようなレジスタウィンドウの環境により、測定対象プログラムを実行されるため、プログラムの呼び出し及び復帰処理の度にトラップが発生する。そして、トラップが発生することで、性能測定情報が採取される。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明の原理構成図である。レジスタウィンドウ１は、プログラムの呼び出し、復帰によりレジスタ群の切り換えを行うためのものである。性能測定開始処理手段２は、性能測定開始指令が入力されると、プログラムの呼び出し及び復帰が発生した際には必ずトラップが発生するように、レジスタウィンドウ１の環境を変更する。性能測定情報採取手段３は、性能測定開始処理手段２が設定したレジスタウィンドウ１の環境により測定対象プログラム４を実行し、トラップの発生を契機として性能測定情報５を採取する。性能測定終了処理手段６は、性能測定情報採取手段３によるプログラムの実行が終了したら、レジスタウィンドウの環境を性能測定開始前の状態に戻す。
【００２３】
このような性能測定装置によれば、性能測定開始指令が入力されると、性能測定開始処理手段２によって、プログラムの呼び出し及び復帰が発生した際には必ずトラップが発生するように、レジスタウィンドウ１の環境が変更される。レジスタウィンドウに設定すべき環境の設定値は、具体的には、以下のようにして定められる。
【００２４】
レジスタウィンドウは、常に「ＣＡＮＳＡＶＥ＋ＣＡＮＲＥＳＴＯＲＥ＋ＯＴＨＥＲＷＩＮ」の値が、「レジスタウィンドウ数−２」になるように制御されている。したがって、ＯＴＨＥＲＷＩＮに設定すべき値をメモリに退避しておき、レジスタウィンドウの環境を作成する際には、そのメモリの値と、退避したレジスタウィンドウの数を利用してレジスタウィンドウの環境を作成する。つまり、退避したレジスタウィンドウの数は、ＣＡＮＲＥＳＴＯＲＥに入るべき値である。そのため、８個のレジスタウィンドウを有する場合、「６−メモリの値−退避したレジスタウィンドウの個数」がＣＡＮＳＡＶＥに設定すべき値となる。したがって、ソフトウェアトラップのハンドラからトラップ発生元に復帰するときは、上記の式によりレジスタウィンドウの環境を作成する。定常的にシステムが動作しているときには、ＯＴＨＥＲＷＩＮの値を０にしておき、性能測定を開始したときには、ＯＴＨＥＲＷＩＮの値を６にしておく。
【００２５】
図２は、本発明による性能測定時のレジスタウィンドウの状態を示す図である。このように、ＣＡＮＳＡＶＥとＣＡＮＲＥＳＴＯＲＥとの値が、共に０とされている。また、この例ではＣＷＰの値が２であり、レジスタウィンドウＷ２が有効なレジスタ群である。
【００２６】
このような環境において、性能測定情報採取手段３によって測定対象プログラム４が実行される。すると、プログラムの呼び出しや復帰がある度にレジスタウィンドウの切り換えが必要となる。ところが、使用可能なレジスタ群が１つしかないため、隣接したレジスタ群へ切り換えが行われる際には、必ずトラップが発生し、呼び出し元のレジスタ群をスタックに退避し、呼び出し先のプログラムがレジスタウィンドウＷ３またはＷ１を使用できるようにする。すると、トラップの発生を契機として、性能測定情報採取手段３によって性能測定情報５が採取される。すなわち、プログラムの呼び出しや復帰の度に、性能測定情報５が採取される。
【００２７】
性能測定情報採取手段３による測定対象プログラム４の実行が終了すると、性能測定終了処理手段６により、レジスタウィンドウ１の環境が性能測定開始前の状態に戻される。以後は、通常通りにレジスタウィンドウ１が利用される。すなわち、プログラムの呼び出しや復帰があっても、一定回数以内であればトラップを発生させずにレジスタウィンドウの切り換えが行われる。
【００２８】
以上のようにして、性能測定情報５を採取することができ、この性能測定情報５を解析することで、測定対象プログラム４中の特定区間における性能が測定できる。例えば、性能測定情報として命令のステップ数を採取しておけば、各区間でのステップ数を比較することで、処理負荷の大きい区間が特定できる。
【００２９】
次に、本発明の実施の形態をより具体的に説明する。
図３は、本発明を実施するためのシステム構成図である。この図には、マルチＣＰＵシステムの構成を示している。このシステムには、複数のプロセッサモジュール１０，２０，３０がバス４１を介して互いに接続されている。各プロセッサモジュール１０，２０，３０には、ＣＰＵ１１，２１，３１とローカルメモリ１２，２２，３２が搭載されている。この実施の形態では、ＣＰＵ１１，２１，３１は、SPARC architecture Version9 に準拠したＣＰＵであるものとする。さらに、バス４１には、共有メモリ４２、ハードディスク装置（ＨＤＤ）４３、入力装置４４、表示装置４５が接続されている。共有メモリ４２は、各プロセッサモジュール１０，２０，３０で共通で使用するデータが格納される。ＨＤＤ４３には、ＯＳや新たに作成したプログラム等、電源遮断時においても保存しておくべきデータが格納される。
【００３０】
このようなシステムでは、電源投入時にＯＳが起動される。ＯＳはアプリケーションプログラム等の分散処理を制御する。そして、ユーザが入力装置４４より性能測定開始の指示を入力すると、ＯＳがレジスタウィンドウの環境を変更し、指定されたプログラムを各ＣＰＵ１１，２１，３１において処理する。その処理中に、各ＣＰＵ１１，２１，３１におけるトレースデータが収集され、それぞれのローカルメモリ１２，２２，３２に格納される。プログラムの実行が終了すると、プロセッサモジュール１０，２０，３０毎に収集されたトレースデータが共有メモリ４２に集められ、ＨＤＤ４３に保存される。そして、集められたトレースデータを解析することで、実行したプログラムのどの処理にどれだけのステップを要したのかが分かる。
【００３１】
図４は、各プロセッサモジュールのＣＰＵがＯＳを起動することで構築される性能測定機能を示すブロック図である。この処理機能は、ＯＳの一部として設けられた機能であり、この機能を実現するためのプログラムを各ＣＰＵ１１，２１，３１が実行することにより実現される。
【００３２】
性能測定開始処理部５１は、性能測定開始指示が出された際に性能測定環境を整えるための機能を有している。すなわち、図２に示したようなレジスタウィンドウの環境を整える。また、性能情報をトレースするバッファ領域をローカルメモリ１２，２２，３２内に確保する。さらに、ＣＰＵ１１，２１，３１に対して、性能情報をカウントするように指示し、性能測定中であることを示すフラグを設定する。
【００３３】
性能測定情報採取部５２は、レジスタウィンドウが切り換わる度に発生するトラップを契機として、性能情報をトレースするものである。具体的には、ＣＰＵ１０，２０，３０がカウントした性能情報の値をトレースのための情報に加工し、性能付加情報設定部５４の情報と併せてトレースする。
【００３４】
性能測定終了処理部５３は、性能測定終了指示が行われたときに性能測定を開始する前の環境に復元するものである。すなわち、図２に示したような環境を、通常のレジスタウィンドウの環境に戻すと共に、各ローカルメモリ１２，２２，３２内のバッファに格納されたトレース情報を共有メモリ４２内で統合し、その内容をＨＤＤ４３に格納する。そして、バッファを解放するとともに、ＣＰＵ１１，２１，３１に対して性能情報をカウントしないように指示し、性能測定中であることを示すフラグをクリアする。
【００３５】
性能付加情報設定部５４は、システムの動作状況を示す一定の付加情報や、定常的に採取すべき情報等を採取する。付加情報としては、例えば、コンテキストスイッチに関する情報、仮想メモリ空間の情報、ロードモジュールのバインド情報などである。また、定常的に採取する情報としては、時刻情報などがある。
【００３６】
図５は、性能測定開始処理部の処理手順を示すフローチャートである。このフローチャートの処理は、すべて性能測定開始処理部５１が行う処理である。
［Ｓ１］システム全体の性能測定開始指示を行うための専用ソフトウェアトラップを発行する。
［Ｓ２］ソフトウェアトラップのハンドラに指示を出し、発行元の動作環境を退避する。
［Ｓ３］レジスタウィンドウが切り換わる度にトラップが発生するように退避した発行元の動作環境を変更する。すなわち、トラップ発生元の有効レジスタウィンドウ数が１以外ならば、カレントウィンドウのみ残して、他のレジスタウィンドウの環境をスタック内に強制退避する。トラップ発生元の有効レジスタウィンドウ数が１であれば、そのままの状態でレジスタウィンドウが切り換わる度にトラップが発生するため、状態の変更は行わない。
［Ｓ４］トレースデータ採取用バッファ領域を、ローカルメモリ上に用意する。
［Ｓ５］性能情報の付加情報となる性能測定開始時の仮想メモリの空間情報、ロードモジュールバインド情報等をトレースデータ採取用のバッファに格納する。
［Ｓ６］性能測定開始中であるフラグをメモリに設定しておく。さらに、ＣＰＵのレジスタを操作し、性能情報をカウントするように設定する。
［Ｓ７］ソフトウェアトラップを発行したプログラムの動作環境を復元して、トラップ発生元に復帰する。復帰後、レジスタウィンドウが切り換わる度にトラップが発生する。
【００３７】
次に、性能測定情報採取部５２で行われる処理の内容を説明する。
図６は、性能情報採取部の処理を示すフローチャートである。性能測定情報採取部５２は、レジスタウィンドウが切り換わる度に発生するトラップ、あるいは外部割り込みなど定常的に発生するトラップが発生した際に動作を開始する。このフローチャートの処理は、すべて性能測定情報採取部５２が実行する。
［Ｓ１１］性能測定中か否かを判断する。これは、性能測定中を示すフラグが設定されているか否かによって判断する。性能測定中の場合にはステップＳ１２に進み、そうでなければステップＳ２１に進む。
［Ｓ１２］ＣＰＵがカウントしている性能情報を一時的にローカルメモリに退避する。
［Ｓ１３］性能情報採取中に性能測定用のトラップが発生しないように、レジスタウィンドウの環境を情報採取プログラム用に設定する。
［Ｓ１４］コンテキスト情報、仮想メモリの空間情報、ロードモジュールのバインド情報等の付加情報を採取する必要があるか否かを判断する。必要であればステップＳ１５に進み、不要であればステップＳ１６に進む。
［Ｓ１５］性能付加情報設定部５４が採取している付加情報を、バッファに格納する。
［Ｓ１６］退避したＣＰＵの性能情報を加工してバッファに格納する。
［Ｓ１７］システムが定常的に採取している情報を性能付加情報設定部５４から取得し、性能情報に含めて格納する。
［Ｓ１８］シミュレーションが必要か否かを判断する。これは、レジスタウィンドウを切り換える度に発生するトラップであるか否かによって判定する。すなわち、ＳＡＶＥ命令かＲＥＳＴＯＲＥ命令は、レジスタウィンドウを切り換える命令である。ところが、この時点では、情報採取プログラム用の動作環境が設定されているため、そのまま実行するとレジスタウィンドウの環境の整合性が保てなくなる。そのため、ＳＡＶＥ命令かＲＥＳＴＯＲＥ命令については、シミュレーションを行う必要がある。レジスタウィンドウを切り換える度に発生するトラップであれば、シミュレーションが必要であると判断してステップＳ１９に進み、そうでなければシミュレーションは不要であると判断してステップＳ２１に進む。
［Ｓ１９］命令のシミュレーションを行う。
［Ｓ２０］トラップ元に復帰する。
［Ｓ２１］ソフトウェアトラップのハンドラに指示を出し、通常のハンドラの処理を行わせる。
【００３８】
次に、性能測定終了処理部５３で行われる処理を説明する。
図７は、性能測定指示部の処理手順を示すフローチャートである。このフローチャートの処理は、すべて性能測定終了処理部５３で行われる処理である。
［Ｓ３１］システム全体の性能測定終了指示を行うためのソフトウェアトラップを発行する。
［Ｓ３２］ソフトウェアトラップのハンドラに指示を出し、発生元の動作環境を退避する。
［Ｓ３３］レジスタウィンドウを切り換える度にトラップが発生しないように、退避した内容を変更する。
［Ｓ３４］バッファ領域の内容をディスクに格納する。
［Ｓ３５］バッファ領域を開放する。
［Ｓ３６］性能測定開始フラグをクリアする。
［Ｓ３７］ＣＰＵのレジスタを操作し、性能情報カウントすることを停止させる。
［Ｓ３８］ソフトウェアトラップを発行したプログラムの動作環境を元に、トラップ発生元に復帰する。
【００３９】
復帰後は、レジスタウィンドウが切り換わる度にトラップが発生するということがなくなり、通常のシステム動作に戻る。
図８は、性能測定情報採取例を示す図である。この例では、性能を測定すべきプログラムが、３つのモジュール６１〜６３で構成されている。そして、モジュール６１からモジュール６２が呼び出されている。さらに、モジュール６２の実行中にトラップが発生しハンドラ６３によって処理が行われた後、モジュール６１に戻る。図中、Ａ１〜Ａ４、Ｂ１〜Ｂ４、Ｈ１，Ｈ２は、プログラムカウンタの値を示している。
【００４０】
Ｔ１の時点では、モジュール６１においてＣＡＬＬ命令が発行される。ＣＡＬＬ命令では、次の命令を実行してからプログラムの遷移が行われ、モジュール６２が呼び出される。するとＢ１でトラップが発生し、Ａ１〜Ａ３に走行したときの性能情報がトレースされる。
【００４１】
Ｔ２の時点は、Ｂ３でトラップが発生した時点であり、ハンドラ６３に制御が移行し、Ｂ１〜Ｂ２に走行した際の性能情報がトレースされる。
Ｔ３の時点は、ハンドラ６３からモジュール６２に復帰するときであり、Ｈ１〜Ｈ２に走行した際の性能情報がトレースされる。
【００４２】
Ｔ４の時点は、モジュール６２からモジュール６１に復帰するときであり、Ｂ４でトラップが発生し、Ｂ３〜Ｂ４に走行した際の性能情報がトレースされる。
図９は、トレースされた性能情報の内容を示す図である。性能情報７１には、その情報を採取した時刻、呼び出し元ＰＣ（プログラムカウンタ）値、呼び出し先ＰＣ値、走行ステップ数及びその他の各種イベント数が登録されている。イベント数としては、命令サイクル数（ＣＰＵの動作クロックのサイクル数）、キャッシュ参照回数、キャッシュ更新回数、キャッシュヒット回数、ＴＬＢ(Translation Lookaside Buffer)ミス回数などがある。なお、図には示していないが、キャッシュミス回数、Copy back 回数、バスの使用回数、共有メモリの参照回数、共有メモリの更新回数などのイベント数を採取することもできる。
【００４３】
レジスタウィンドウが切り換わる度に採取されたこれらの情報を解析することにより、実行したプログラムのどの区間でどれだけのステップが実行されたのかが分かる。さらに、特定の区間を実行するのに要した命令サイクル数や、その間に発生したキャッシュ参照回数、キャッシュ更新回数、キャッシュヒット回数、ＴＬＢミス回数なども分かる。
【００４４】
その結果、システム及び測定対象プログラムの変更をすることなく性能測定を行うことができ、性能測定に費やす時間を削減することができる。しかも、プログラム毎の性能を詳細に知ることができるので、性能に影響を与えているプログラムを特定することができる。
【００４５】
さらに、本発明による性能測定情報の採取には割り込み処理を必要としないため、割り込みを禁止したプログラムの性能を測定することができる。
なお、上記の処理機能はＯＳに含まれており、該当する機能の処理内容を記述したプログラムをコンピュータで実行することにより、実現される。その場合、性能測定装置が有すべき機能の処理内容が記述されたプログラムは、コンピュータで読み取り可能な記録媒体に記録しておく。コンピュータで読み取り可能な記録媒体としては、磁気記録装置や半導体メモリ等がある。市場に流通させる場合には、ＣＤ−ＲＯＭ(Compact Disk Read Only Memory) やフロッピーディスク等の可搬型記録媒体にプログラムを格納して流通させたり、ネットワークを介して接続されたコンピュータの記憶装置に格納しておき、ネットワークを通じて他のコンピュータに転送することもできる。コンピュータで実行する際には、コンピュータ内のハードディスク装置等にプログラムを格納しておき、メインメモリにロードして実行する。
【００４６】
【発明の効果】
以上説明したように本発明では、本発明の性能測定装置では、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するように、レジスタウィンドウの環境を変更しておき、測定対象プログラムを実行中にトラップが発生すると、その時点の性能測定情報を採取するようにしたため、測定対象プログラムの変更をすることなく性能測定情報を採取できる。その結果、効率よく性能測定を行うことができる。
【００４７】
また、本発明の性能測定プログラムを記録したコンピュータ読み取り可能な記録媒体では、記録された性能測定プログラムをコンピュータに実行させることにより、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようにレジスタウィンドウの環境を変更しておき、測定対象プログラムを実行中にトラップが発生すると、その時点の性能測定情報を採取するような処理をコンピュータに行わせることができるようになり、コンピュータを用いた効率のよい性能測定が可能となる。
【００４８】
また、本発明の性能測定方法では、プログラムの呼び出し及び復帰処理が発生した際にはトラップが発生するようなレジスタウィンドウの環境により、測定対象プログラムを実行することで、プログラムの呼び出し及び復帰処理の度にトラップを発生させ、トラップが発生した際に性能測定情報を採取するようにしたため、効率よく性能測定を行うことができる。
【図面の簡単な説明】
【図１】本発明の原理構成図である。
【図２】本発明による性能測定時のレジスタウィンドウの状態を示す図である。
【図３】本発明を実施するためのシステム構成図である。
【図４】各プロセッサモジュールのＣＰＵがＯＳを起動することで構築される性能測定機能を示すブロック図である。
【図５】性能測定開始処理部の処理手順を示すフローチャートである。
【図６】性能情報採取部の処理を示すフローチャートである。
【図７】性能測定指示部の処理手順を示すフローチャートである。
【図８】性能測定情報採取例を示す図である。
【図９】トレースされた性能情報の内容を示す図である。
【図１０】レジスタウィンドウの利用例を示す図である。
【符号の説明】
１  レジスタウィンドウ
２  性能測定開始処理手段
３  性能測定情報採取手段
４  測定対象プログラム
５  性能測定情報
６  性能測定終了処理手段
【図１】
0003941848.tif 000002
【図２】
0003941848.tif 000003
【図３】
0003941848.tif 000004
【図４】
0003941848.tif 000005
【図５】
0003941848.tif 000006
【図６】
0003941848.tif 000007
【図７】
0003941848.tif 000008
【図８】
0003941848.tif 000009
【図９】
0003941848.tif 000010
【図１０】
0003941848.tif 000011