(57)【特許請求の範囲】
【請求項１】
プロセッサにおけるイベントの発生回数を計数する計数部と、
該計数部によって得られた計数値を保存する保存部と、
重要度の高い計数値を該保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部と、
該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部とをそなえたことを特徴とする、イベント計測装置。
【請求項２】
該計数部が、所定時間毎に、該所定時間内の該イベントの発生回数を計数し、
該制御部が、該所定時間毎に、該計数部による計数値を、該新たな計数値として、当該計数値の計測時刻とともに該保存部に書き込むことを特徴とする、請求項１記載のイベント計測装置。
【請求項３】
該重要度が、該計数値そのものであることを特徴とする、請求項２記載のイベント計測装置。
【請求項４】
該計数部が、イベントの種類毎に、該保存部における計数値を更新しながら計数を行なうとともに、
該計数部が、該保存部に保存されていない新たな種類のイベントの発生回数の計数を開始する際には、該制御部が、該新たな種類のイベントの発生回数の計数値を保存すべき保存領域を該保存部上に確保し、その保存領域に、該新たな種類のイベントの発生回数の計数値を該新たな計数値として書き込むことを特徴とする、請求項１記載のイベント計測装置。
【請求項５】
該重要度が、該計数部による該計数値の更新時刻であることを特徴とする、請求項４記載のイベント計測装置。
【請求項６】
プロセッサにおけるイベントの発生回数を計数する計数ステップと、
該計数ステップにより新たな計数値が得られた場合、重要度の高い計数値を保存部に残しながら、該新たな計数値を該保存部に書き込む書込ステップと、
該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持するステップとを含むことを特徴とする、イベント計測方法。
【請求項７】
プロセッサにおけるイベントの発生回数を計数する計数部、
重要度の高い計数値を保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部、および、
該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部としてコンピュータを機能させることを特徴とする、イベント計測プログラム。
【請求項８】
プロセッサにおけるイベントの発生回数を計数する計数部、
重要度の高い計数値を保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部、および、
該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部としてコンピュータを機能させるイベント計測プログラムを記録したコンピュータ読取可能な記録媒体。
【請求項９】
情報処理を行なうプロセッサと、
該プロセッサにおけるイベントの発生回数を計数する計数部と、
該計数部によって得られた計数値を保存する保存部と、
重要度の高い計数値を該保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部と、
該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部とをそなえたことを特徴とする、プロセッサシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、計算機等を含むプロセッサの性能測定あるいは性能チューニングを行なうべく、そのプロセッサにおけるイベントの発生回数を計測するための技術に関する。
【０００２】
【従来の技術】
一般に、計算機の処理を高速化するためには、プログラム実行時の計算機の挙動を把握することが必要不可欠である。
計算機の挙動を細かく調査するために、計算機内部での各種イベントの発生回数を測定するという手法が一般的に広く用いられている。そのため、現代の計算機には、性能測定用の内部カウンタが装備されていることが多い。
【０００３】
性能測定用カウンタを用いると、例えば、プログラムの実行クロック数，プログラムの実行中に行なったメモリアクセスの回数などを取得することができる。これらの挙動は全て「イベント」として取り扱われ、イベントが発生する度にカウンタ（計数値）を１ずつカウントアップするという方式でイベントの発生回数を記録している。より具体的に説明すると、先の例の実行クロック数の測定に際しては、「１クロック経過」を一つのイベントとして取り扱うことで１クロック経過する度にイベントが発生することになり、その都度、カウンタが１ずつカウントアップされる。イベントには様々なものがあり、例えば、分岐命令の実行，キャッシュミス，メモリリード，メモリライトなど、性能測定に必要な挙動の全てが網羅されている。
【０００４】
近年の計算機システムでは、各部にこのようなカウンタを設け、性能測定などに使えるようにしている場合が多い。例えばIntel社のプロセッサであるPentium Proにおいては、性能測定用のカウンタが２本設けられており、各カウンタに対し、独立に、(1)イベントの選択，(2)値の読出，(3)値の設定，(4)値のクリア，(5)オーバフロー時の割込みなどを設定することができるようになっている。さらに、同様のカウンタが、メモリコントローラにも設けられており、メモリバス周りのイベントも測定できるようになっている。
【０００５】
このようなカウンタを用いることにより、イベント発生回数全体の合計値を見ることができるだけでなく、一定時間毎に値をカウンタによる計数値をサンプリングすることで、イベントの発生回数の時間的変動を見ることができる。これにより、イベント発生回数が安定しているか否か、あるいは、イベント発生回数の変動の激しさ、イベント発生が特定の時間帯に処理が集中しているかなど、様々な情報を得ることができ、これらの情報を、単なる性能測定だけでなく、システムのチューニングに役立てることができる。
【０００６】
上述した性能測定カウンタは、プログラムを実行した結果を計測するのみではなく、動的なプログラム最適化にも用いることができる。即ち、プログラム実行中に、ＯＳ（Operating System）やプログラム自身がカウンタの値を参照し、プログラムの動作を変えていくという手法で動的最適化を行なうことができる。
【０００７】
例えば図１４に示すような分散共有メモリ型の並列計算機において、メモリアクセスをＯＳによって動的に最適化することを考える。分散共有メモリ型の並列計算機は、図１４に示すごとく、複数のノード１００を、相互結合網２００を介して相互に通信可能に接続することにより構成されている。各ノード１００は、ＣＰＵ（Central Processing Unit）１０１，メモリ１０２，メモリコントローラ１０３およびネットワークインタフェース１０４をそなえて構成されている。
【０００８】
各ノード１００のＣＰＵ１０１は、そのＣＰＵ１０１自体が属するノード１００内のメモリ１０２に対しても、他のノード１００内のメモリに対しても、自由にアクセスすることができる。このため、あるＣＰＵ１０１から見ると、高速にアクセスできるメモリ１０２と、アクセスするのに時間がかかるメモリ１０２とが存在することになる。なお、上述のような並列計算機において、各ノード１００のメモリコントローラ１０３が上述した性能測定カウンタ（図示省略）としての機能を有しているものとする。
【０００９】
ＯＳは、プログラムからメモリ要求が発生すると、プログラムに対してメモリ１０２を割り当てる。メモリ１０２の割当に際して、このメモリ１０２がどのような使われ方をするのか分からないので、ＣＰＵ１０１と同じノード１００に属するメモリ１０２を割り当てればよいか、他のノード１００に属するメモリ１０２を割り当てればよいか分からない。一般的には、同じノード１００内のメモリ１０２を割り当てた方がよいが、場合によってはそうでないこともある。
【００１０】
ここで、メモリコントローラ１０３内にそなえられた２本の性能測定カウンタ１，２により、それぞれ、以下のようなイベントを計数する。
カウンタ１：同じノード１００内のＣＰＵ１０１からメモリアクセスがあった場合に、計数値を１だけカウントアップする。
カウンタ２：他のノード１００のＣＰＵ１０１からメモリアクセスがあった場合に、計数値を１だけカウントアップする。
【００１１】
この状態でプログラムを実行し、一定時間毎にカウンタの値をチェックする。カウンタ１による計数値が０に近く、カウンタ２による計数値が充分に大きい場合は、このメモリ１０２を必要としているＣＰＵ１０１は他のノード１００に属しているということが分かる。このような場合、ＯＳはメモリ１０２の割付を変え、実際にメモリ１０２を必要としているＣＰＵ１０１のそばにデータを移動させる。これによって、ＣＰＵ１０１から見たとき、ＣＰＵ１０１が必要なデータのほとんどが高速にアクセスできるメモリ１０２に載っていることになり、プログラムの実行が高速化される。
【００１２】
このような目的のために、例えばＳＧＩ（Sillicon Graphics Inc.）のOrigin 2000という計算機では、メモリ脇にメモリアクセス集計用のカウンタがそなえ付けられている。このカウンタは、ページ単位毎に備え付けられており、ＯＳから一定時間毎に参照することによって、ページ毎のアクセス数を計測することができる。
【００１３】
【発明が解決しようとする課題】
しかしながら、上述した従来の計測手法では、長時間サンプリングをしようとしたり、メモリ空間の全体に亘ってメモリブロック毎のイベント発生回数を測定しようとすると、カウンタによって得られる計数値の量は莫大なものとなってしまう。そのため、従来の計測手法は、コストを充分かけてよい大型の計算機に対しては適用が可能であったが、コストをできるだけ切り詰めなくてはならない小型の計算機に対しては適用できず、少ないカウンタをやりくりしてデータを採取するしかなかった。
【００１４】
例えば、先にあげたＳＧＩのOrigin 2000の例について考える。Origin 2000では、ページ毎に６４ノード分の参照カウンタがそなえ付けられている。仮に、ページサイズが４ＫＢ、カウンタによって得られる計数値の保存領域（この領域のことをカウンタと呼ぶ場合がある）が一つ３２ビットとすると、カウンタのために全メモリの１２８分の１のメモリサイズが必要となる。これは、ＬＳＩ内部にはとうてい収まりきらず、外付けメモリとして実現することになる。このようにしてカウンタのための領域を確保することは、ハードウェアの物量の増加を招くだけでなく、ハードウェアの設計を複雑化するという問題も生じさせることになり、特に、コスト重視の比較的小型の計算機では実現できない手法である。
【００１５】
小容量のカウンタを用いて計測を行なう場合、保存対象の計数値がカウンタの容量を超えると、従来、一旦、保存領域からメモリへ計数値を書き出したり、カウンタによる計数値を、保存領域において順番に計数値を上書きしたりするなどの手法を採っている。
【００１６】
前者の手法では、計数値をメモリへ書き出すためのオーバヘッドが存在し、さらにソフトウェアや複雑なハードウェアを用いた制御が必要となる。しかし、性能測定を行なう場合、できるだけ測定誤差を減らすために不必要なオーバヘッドは避けることが望ましく、その点で、前者の手法には問題がある。
また、後者の手法では、単に順番に計数値の上書きを行なっているため、カウンタ（保存領域）には、カウンタ観測時点にごく近い時点に計測された計数値しか残っておらず、性能についての全体的な判断を行なえるような情報（性能を判断するために必要になる、重要な計数値）を得ることができない。
【００１７】
一方、特開平１０−２６０８６９号公報では、プロセッサの性能をサンプリングする性能カウンタを、ハッシュテーブルを用いて効率的に管理する手法が開示されている。しかし、この手法を用いても、性能カウンタの管理は効率化されるが、カウンタの物量自体が減ることはなく、かえって管理のために必要なハードウェアを追加しなくてはならず、コスト重視の比較的小型の計算機に適用できるものではない。
【００１８】
本発明は、このような課題に鑑み創案されたもので、不必要なオーバヘッドを避けながら且つ少ないハードウェア物量で、長時間に亘る情報収集やメモリ空間全体に亘る情報収集を可能にし、比較的小型のプロセッサにおいても性能測定や性能チューニングを確実に行なえるようにした、イベント計測装置および方法並びにイベント計測プログラムおよび同プログラムを記録したコンピュータ読取可能な記録媒体並びにプロセッサシステムを提供することを目的とする。
【００１９】
【課題を解決するための手段】
上記目的を達成するために、本発明のイベント計測装置は、プロセッサにおけるイベントの発生回数を計数する計数部と、該計数部によって得られた計数値を保存する保存部と、重要度の高い計数値を該保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部と、該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部とをそなえたことを特徴としている。
【００２０】
なお、該計数部が、所定時間毎に、該所定時間内の該イベントの発生回数を計数し、該制御部が、該所定時間毎に、該計数部による計数値を、該新たな計数値として、当該計数値の計測時刻とともに該保存部に書き込んでもよい。このとき、該重要度を、該計数値そのものとする。
【００２１】
また、該計数部が、イベントの種類毎に、該保存部における計数値を更新しながら計数を行なうとともに、該計数部が、該保存部に保存されていない新たな種類のイベントの発生回数の計数を開始する際には、該制御部が、該新たな種類のイベントの発生回数の計数値を保存すべき保存領域を該保存部上に確保し、その保存領域に、該新たな種類のイベントの発生回数の計数値を該新たな計数値として書き込んでもよい。このとき、該重要度を、該計数部による該計数値の更新時刻とする。
【００２２】
一方、本発明のイベント計測方法は、プロセッサにおけるイベントの発生回数を計数する計数ステップと、該計数ステップにより新たな計数値が得られた場合、重要度の高い計数値を保存部に残しながら、該新たな計数値を該保存部に書き込む書込ステップと、該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持するステップとを含むことを特徴としている。
【００２３】
また、本発明のイベント計測プログラムは、上述した計数部，制御部および誤差計測部としてコンピュータを機能させるものであり、本発明のコンピュータ読取可能な記録媒体は、上述したイベント発生回数計測プログラムを記録したものである。
さらに、本発明のプロセッサシステムは、情報処理を行なうプロセッサと、上述した計数部，保存部，制御部および誤差計測部とをそなえたことを特徴としている。
【００２４】
本発明では、少ないハードウェア物量、例えばＬＳＩ内部に収まる程度のメモリ容量で、多くの計数値を取り扱うことができる仕組みをつくる。
プロセッサの性能測定や性能チューニングを行なう際、必ずしも全ての計数値が必要になるわけではなく、単位時間当たりの計数値がピークになる時刻と、そのピーク値とが分かれば充分な場合が多い。
【００２５】
また、例えばメモリシステムにおいて、頻繁にアクセスされたブロック（ページ等）に関する情報を採取しようとした場合、一般に、頻繁にアクセスされるブロックというのは、全メモリ空間に対してごく少量である。そのため、メモリ空間の全てのブロック用の計数値保存領域を用意しても、ほとんどの領域が無駄になり効率が悪い。
【００２６】
そこで、各計数値に関して重要度という要素を付加し、重要度の高いもののみをシステム（保存部）内に残すことにする。これにより、必要性の高い値のみを採取することができ、不必要なオーバヘッドを避けながら且つ少ないハードウェア物量（少ないメモリ容量）で、長時間に亘る情報収集やメモリ空間全体に亘る情報収集が可能になる。
【００２７】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。
〔１〕第１実施形態の説明
図１は本発明の第１実施形態としてのイベント計測装置（性能測定カウンタ）およびプロセッサシステムの構成を示すブロック図、図２は第１実施形態における値保存部の構成を示す図である。
【００２８】
図１に示すように、第１実施形態のプロセッサシステム１０は、プロセッサ２０と性能測定カウンタ３０とから構成されている。
プロセッサ２０は、情報処理を行なうものであって、性能測定対象（イベント発生回数の計測対象）である。
【００２９】
性能測定カウンタ（イベント計測装置）３０は、プロセッサ２０に内蔵され、このプロセッサ２０内における計測対象イベントの発生回数を計測するためのもので、イベント選択器３１，カウンタ制御器３２，カウンタ３３および値保存部３４をそなえて構成されている。なお、第１実施形態の性能測定カウンタ３０では、所定時間毎に、その所定時間内に発生したイベントの数（発生回数）が計数・収集されるようになっている。以下、上記所定時間のことを、サンプリング時間もしくはサンプリング周期という場合がある。
【００３０】
ここで、イベント選択器３１は、プロセッサ２０の各部からイベント信号を受け取って、以下のように機能するものである。各イベント信号は、特定のイベント（例えば、１クロック経過，メモリ読出し発生，ジャンプ命令実行など）が発生する都度、プロセッサ２０からイベント選択器３１に送られる。イベント選択器３１には、外部からイベント条件が設定されるようになっている。例えば、イベントＡが発生したとき、あるいはイベントＡとイベントＢとが同時に発生したときなど、様々なイベント条件の設定が可能になっている。そのイベント条件が満たされた場合に、イベント選択器３１は、カウンタ制御器３２に対して信号を送り、カウンタ３３による計数値を１だけカウントアップするよう指示する。
【００３１】
カウンタ制御器３２は、カウンタ３３の値を制御するとともに、値保存部３４に対する計数値の書込を制御する制御部としての機能を果たすもので、サンプリング周期毎に得られる計数値を値保存部３４に書き込む際に、後述するごとく重要度の高い計数値を値保存部３４に残すような書込制御を行なうように構成されている。カウンタ制御器３２は、イベント選択器３１からの信号を受け取ると、カウンタ３３による計数値を１だけカウントアップする。
【００３２】
また、カウンタ制御器３２には、上記所定時間を計測するためのタイマ（図示省略）がそなえられている。上記所定時間は、外部から任意に指定できるようになっている。このタイマを用いて、指定した所定時間内に起こったイベントの数が計数されるようになっている。指定された所定時間が経過すると、カウンタ制御器３２は、カウンタ３３の値を値保存部３４に送り、カウンタ３３の値をクリアする。そして、タイマをクリアして、タイマによる所定時間の計測を再び開始する。
【００３３】
なお、カウンタ制御器３２は、外部からの指示に応じて、カウンタ３３の計数値を、“０”にクリアしたり任意の値に設定したりすることができる。また、カウンタ制御器３２は、カウンタ３３による計数値に応じて（例えば、カウンタ３３による計数値がオーバフローした場合などに）、プロセッサ２０に対して割り込みを発生する機能も有している。
また、上述したイベント選択器３１，カウンタ制御器３２およびカウンタ３３により、プロセッサ２０におけるイベントの発生回数を計数する計数部としての機能が実現されている。
【００３４】
値保存部（保存部）３４は、上記計数部の機能によって得られた計数値（サンプリング周期毎に得られる計数値）を保存するもので、図２に示すように、計数値保存領域３４１および誤差計測カウンタ３４２をそなえて構成されている。
計数値保存領域（保存領域）３４１は、サンプリング周期毎に得られる計数値（以下、サンプリング値という場合がある）を保持しうる、所定数のレコードを有している。各レコードは、サンプリング時刻とサンプリング値とを保持するとともに、そのレコードが有効であるか無効であるかを表わす有効／無効ビット（図中ではＶと表記）を有している。この有効／無効ビットＶには、レコードが有効である場合に例えば“１”がセットされる一方、レコードが無効である場合に例えば“０”がセットされる。本実施形態では、計数値（サンプリング値）そのものを、その計数値の重要度として取り扱う。このため、計数値保存領域３４１には、重要度を保持するための領域はそなえられていない。
【００３５】
また、誤差計測カウンタ（誤差計測部）３４２は、計数値保存領域３４１からあふれた値の合計値を記録するものである。つまり、誤差計測カウンタ３４２は、値保存部３４の計数値保存領域３４１において新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持するものである。
【００３６】
上述した値保存部３４では、カウンタ制御器３２からカウンタ３３の値（サンプリング値）を受け取ると、現在の時刻（サンプリング時刻）とともにその値がレコード単位で保存される。このように保存を行なう際には、サンプリング値の大きなものから順に並ぶようにソートが行なわれる。計数値保存領域３４１がいっぱいになっている場合、即ち全てのレコードの有効／無効ビットＶが“有効”になっている場合には、新しいサンプリング値と、計数値保存領域３４１に既に保存されているサンプリング値のうち最小のものとを比較し、新しいサンプリング値の方が大きければ、保存されていた最小のサンプリング値が廃棄され、新たなサンプリング値がサンプリング時刻とともに上書き保存される。その後、サンプリング値の大きなものから順に並ぶように、サンプリング値全体がソートされる。廃棄されたサンプリング値は、誤差計測カウンタ３４２に送られ、このカウンタ３４２による現在の計数値に加算されるようになっている。
【００３７】
上述したイベント選択器３１およびカウンタ制御器３２（計数部および制御部）は、専用ソフトウェア（イベント計測プログラム）によって実現される。このイベント計測プログラムは、例えばフレキシブルディスク，ＣＤ−ＲＯＭ等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。第１実施形態では、性能測定カウンタ３０を成すＲＯＭ（Read Only Memory；図示省略）等に予めイベント計測プログラムを格納しておき、このイベント計測プログラムを、やはり性能測定カウンタ３０を成すＣＰＵ（図示省略）によって読み出し実行することで、上述したイベント選択器３１およびカウンタ制御器３２としての機能が実現される。また、カウンタ３３や値保存部３４は、性能測定カウンタ３０を成すＲＡＭ（Random Access Memory；図示省略）等によって実現される。なお、イベント計測プログラムは、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供されてもよい。
【００３８】
次に、図３および図４を参照しながら、上述のごとく構成された第１実施形態の性能測定カウンタ３０の動作について説明する。
図３に示すフローチャート（ステップＳ１１〜Ｓ１８）に従って、第１実施形態におけるプロセッサ２０の性能情報収集手順について説明する。まず、ユーザは、情報を収集したいイベント（例えばキャッシュミス回数など）を選び出し、計測対象のイベントとしてイベント選択器３１に設定するとともに（ステップＳ１１）、サンプリング時間（サンプリング周期；例えば１秒）を選び、前記所定時間としてカウンタ制御器３２に設定する（ステップＳ１２）。
【００３９】
この後、性能測定カウンタ３０（イベント選択器３１およびカウンタ制御器３２）に対して開始信号を送りイベント計測を開始する（ステップＳ１３）。これにより、図４を参照しながら後述するイベント計測処理が実行される（ステップＳ１４）。イベント計測処理を終了する場合（ステップＳ１５のＹＥＳルート）には、性能測定カウンタ３０に対して停止信号を送り、性能測定カウンタ３０による計測動作を停止させる（ステップＳ１６）。
【００４０】
そして、ユーザは、値保存部３４から収集されたデータを取り出し、サンプリング値の大きい時刻の情報や、そのときのサンプリング値を得るとともに（ステップＳ１７）、値保存部３４に保存されているサンプリング値の合計値と、誤差計測カウンタ３４２の値とを比較することにより、サンプリング値全体に対してどれくらいの割合のサンプリング値が廃棄されたかを認識し、最終的に得られたサンプリング値（値保存部３４に残っている値）の確からしさを判断する（ステップＳ１８）。
【００４１】
ついで、図４に示すフローチャート（ステップＳ２１〜Ｓ３６）に従って、第１実施形態におけるイベント計測手順（図３のステップＳ１４のイベント計測処理）について説明する。
性能測定カウンタ３０においては、開始信号を受信すると（ステップＳ２１のＹＥＳルート）、カウンタ制御器３２におけるタイマが“０”にクリアされ、カウンタ制御器３２により、カウンタ３３，計数値保存領域３４１や誤差計測カウンタ３４２の値が全て“０”にセットされるとともに、計数値保存領域３４１の各レコードにおける有効／無効ビットＶが“無効”にセットされる（ステップＳ２２）。
【００４２】
開始信号の受信に伴って、イベント選択器３１は、カウンタ３３を１ずつカウントアップするための信号をカウンタ制御器３２へ出力できる状態になり、所定の条件を満たすイベント（計測対象のイベント）が発生すると（ステップＳ２３のＹＥＳルート）、カウントアップ信号をカウンタ制御器３２へ出力し、カウンタ３３による計数値を１だけカウントアップする（ステップＳ２４）。なお、イベント選択器３１は、図３のステップＳ１６による停止信号を受けると、そのカウントアップ信号の出力を停止するようになっている。
【００４３】
カウンタ制御器３２では、イベントの発生の有無に関係無く、タイマにより所定のサンプリング時間が計測されており、サンプリング時間が経過したか否かを常に判断し（ステップＳ２４からステップＳ２５、または、ステップＳ２３のＮＯルートからステップＳ２５）、サンプリング時間が経過するまで、ステップＳ２３〜Ｓ２５の処理が繰り返し実行される。
【００４４】
そして、サンプリング時間が経過すると（ステップＳ２５のＹＥＳルート）、カウンタ制御器３２は、計数値保存領域３４１に空きレコード（即ち、有効／無効ビットＶが無効状態である無効レコード）が有るか否かを判断する（ステップＳ２６）。
【００４５】
無効レコードが有る場合（ステップＳ２６のＹＥＳルート）、その無効レコードに、その時点でのカウンタ３３による計数値（サンプリング値）と、サンプリング時刻とが書き込まれるとともに（ステップＳ２７）、その無効レコードにおける有効／無効ビットＶが無効状態から有効状態に切り替えられる（ステップＳ２８）。この後、サンプリング値の大きなものから順に並ぶようにレコードのソートが行なわれ（ステップＳ２９）、カウンタ３３およびタイマを再び“０”にセットしてから（ステップＳ３０）、ステップＳ２３へ戻る。
【００４６】
一方、計数値保存領域３４１の全レコードが有効状態であり、無効レコードが存在しない場合（ステップＳ２６のＮＯルート）、計数値保存領域３４１の全レコードの中から、最小のサンプリング値を保持しているもの（一番下に位置するもの）を選択し（ステップＳ３１）、今回サンプリングされた計数値（新しい計数値）と、ステップＳ３１で選択されたレコード（以下、選択レコードという）のサンプリング値とを比較する（ステップＳ３２）。
【００４７】
その比較の結果、新しい計数値の方が大きい場合（ステップＳ３３のＹＥＳルート）、選択レコードにおけるサンプリング値が、誤差計測カウンタ３４２の値に加算された上で（ステップＳ３４）、その新しい計数値とサンプリング時刻とが、選択レコードに上書き保存される（ステップＳ３５）。
【００４８】
このような保存処理を行なった後、もしくは、ステップＳ３１で選択レコードのサンプリング値が新しい計数値以上であった場合（ステップＳ３３のＮＯルート）、サンプリング値の大きなものから順に並ぶようにレコードのソートが行なわれ（ステップＳ２９）、カウンタ３３およびタイマを再び“０”にセットしてから（ステップＳ３０）、ステップＳ２３へ戻る。
【００４９】
なお、本実施形態では、上述したステップＳ２３〜Ｓ２５によって、プロセッサ２０における、サンプリング周期毎のイベントの発生回数を計数する計数ステップが実現されている。また、上述したステップＳ２６〜Ｓ３５によって、重要度の高いサンプリング値を計数値保存領域３４１に残しながら、上記計数ステップで得られた新たなサンプリング値を計数値保存領域３４１に書き込む書込ステップが実現されている。
【００５０】
このように、本発明の第１実施形態では、値保存部３４の計数値保存領域３４１に保存される各計数値に、「重要度」という属性（本実施形態では計数値そのもの）を付与しておくことで、値保存部３４の計数値保存領域３４１の容量を超えて、書き込むべき計数値が発生した場合、重要度の低いレコードに新たな計数値が上書きされる。これにより、常に重要度の大きな値と結び付けられている計数値（サンプリング値）が値保存部３４に残るようになる。
【００５１】
ここで、第１実施形態の性能測定カウンタ３０で記録する事象について具体的に考える。広大な領域を計測対象として効率的に情報を収集する場合には、その領域が時間的に広大な場合と空間的に広大な場合との２つが考えられる。計測対象の領域が時間的に広大な場合、一定時間毎に計数値をサンプリングし、それを記録し続けるということが考えられる。このとき、限られた大きさの計数値保存領域３４１でそれを実現しようとすると、直ぐにデータがあふれて全てのデータを記録することができない。
【００５２】
第１実施形態の性能測定カウンタ３０は、このような場合に対応したもので、小容量の計数値保存領域３４１を用意し、各レコードにサンプリング値およびサンプリング時刻を保存するとともに、サンプリング値自体を重要度として用いている。そして、新しくサンプリングした計数値を追加する際、空きレコードが無ければ重要度の最も低いレコードから計数値を追い出し、そこに新たな計数値を記録する。
【００５３】
このようにして、値保存部３４の容量が少なくても、必要性の高い計数値を確実に且つ効率よく採取することができ、長時間に亘ってサンプリング値を所定周期で採取しても、統計情報を得るために必要なデータのみが値保存部３４に残り、最終的にプロセッサ２０の性能について全体的な判断を行なうのに有用なデータを得ることができる。
【００５４】
従って、不必要なオーバヘッドを避けながら且つ少ないハードウェア物量（例えばＬＳＩ内に収まる程度のメモリ容量）で、長時間に亘る情報収集が可能になり、比較的小型のプロセッサにおいても性能測定や性能チューニングを確実に行なえる。換言すると、重要な情報のみが値保存部３４に保存され、重要度の低い情報が追い出されるので、サンプリング値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の保存部を用いて、長時間に亘るデータを効率よく採取することができる。
【００５５】
重要度の判定基準としては、まず考えられるのが、第１実施形態において説明したごとく、サンプリング値そのものである。つまり、大きなサンプリング値は重要であり、小さなサンプリング値はあまり重要でないとし、小さなサンプリング値が新たなサンプリング値で上書きされて廃棄され、大きなサンプリング値が優先的に値保存部３４に残される。
【００５６】
従って、イベントの発生回数が多かった時刻とその発生数とを長時間に亘って採取することができる。これにより、イベント発生のピーク値とそのピークの発生時刻とを採取できるので、例えばキャッシュミスが多いページを見つけて、その部分のデータ構造の見直しが可能になり、プログラムの性能向上に役立つデータを得ることができる。
【００５７】
上述のごとく重要度の低いサンプリング値を廃棄してしまうと、上書きされて消えてしまったサンプリング値が、どの程度、重要でなかったのかを判断することができない。例えば全てのサンプリング値の重要度が同じであった場合、計数値保存領域３４１に残っているサンプリング値は、たまたま残った値であり、廃棄されたサンプリング値と比べて重要な値というわけではなくなる。
【００５８】
そこで、第１実施形態では、重要度の低いサンプリング値を廃棄する際に、そのサンプリング値の合計値を誤差として誤差計測カウンタ３４２にて計測・保持することにより、上書きによって値保存部３４から廃棄された全サンプリング値の大きさ（合計値）と、最終的に値保存部３４（計数値保存領域３４１）に残ったサンプリング値とを比較することが可能になる。
【００５９】
これにより、廃棄されたサンプリング値各々の大きさは分からないが、サンプリング値全体に対してどれくらいの割合のサンプリング値が廃棄されたかを認識することができる。つまり、最終的に値保存部３４に残っている値が、サンプリング値全体をどの程度反映しているかを認識でき、値保存部３４に残ったサンプリング値の確からしさを判断することができる。
【００６０】
なお、第１実施形態において、重要度として、サンプリング値に代えて、第２実施形態にて後述するようなアクセス時刻（更新時刻）を用いることは意味がない。なぜならば、第１実施形態のサンプリング値は、計数値保存領域３４１のレコードに一旦書き込まれると、その後、上書きによって廃棄されることはあっても新たな計数値に更新されることはなく、計数値保存領域３４１が単なるリングバッファと同じになってしまうからである。
【００６１】
〔２〕第２実施形態の説明
図５は本発明の第２実施形態としてのイベント計測装置（性能測定カウンタ）の構成を示すブロック図、図６は第２実施形態における値保存部の構成を示す図である。
図５に示すように、第２実施形態のプロセッサシステム１０Ａも、図１に示す第１実施形態とほぼ同様、プロセッサ２０と性能測定カウンタ３０Ａとから構成されている。
【００６２】
第２実施形態の性能測定カウンタ（イベント計測装置）３０Ａも、プロセッサ２０に内蔵され、このプロセッサ２０内における計測対象イベントの発生回数を計測するためのもので、イベント選択器３１Ａ，カウンタ制御器３２Ａ，カウンタ３３１，３３２および値保存部３４Ａをそなえて構成されている。
この性能測定カウンタ３０Ａでも、図１に示した性能測定カウンタ３０と同様に、所定時間毎に、その所定時間内に発生したイベントの数を計数・収集しているが、性能測定カウンタ３０では、カウンタ３３が一つだけそなえられていたのに対し、第２実施形態の性能測定カウンタ３０Ａでは、２つのカウンタ３３１，３３２をそなえ２種類のイベントの発生回数を計測している。
【００６３】
また、第１実施形態の性能測定カウンタ３０では、サンプリング値（計数値）そのものを重要度として用いていたのに対し、第２実施形態の性能測定カウンタ３０Ａでは、後述するごとく、計数値（サンプリング値）を所定関数に代入することによって算出された値を、重要度として用いている。
ここで、イベント選択器３１Ａは、上述したイベント選択器３１と同様のものであるが、第２実施形態では、２種類のイベント条件を設定され、各イベント条件を満たすイベントの発生を検知すると、対応するカウンタ３３１または３３２による計数値を１だけカウントアップするように、カウンタ制御器３２Ａに対して信号を送るように構成されている。
【００６４】
カウンタ制御器３２Ａは、上述したカウンタ制御器３２と同様のものであり、第２実施形態では、２つのカウンタ３３１，３３２の値を制御するとともに、値保存部３４Ａに対する計数値の書込を制御する制御部としての機能を果たすもので、サンプリング周期毎に得られる計数値を値保存部３４Ａに書き込む際に、後述するごとく重要度の高い計数値を値保存部３４Ａに残すような書込制御を行なうように構成されている。カウンタ制御器３２Ａは、イベント選択器３１Ａからの信号を受け取ると、イベントの種類に対応するカウンタ３３１または３３２による計数値を１だけカウントアップする。
【００６５】
また、カウンタ制御器３２Ａも、上述したものと同様のタイマ（図示省略）を有しており、このタイマにより所定時間の経過を検知すると、カウンタ制御器３２Ａは、カウンタ３３１および３３２による計数値を値保存部３４Ａに送り、カウンタ３３１および３３２の値をクリアするとともに、タイマをクリアする。
【００６６】
さらに、カウンタ制御器３２Ａは、カウンタ３３１および３３２によって得られた計数値（サンプリング値）を、それぞれ所定の関数に代入して、各計数値に対応した重要度を算出する機能を有している。このようにして、異なる基準で測定された２種類の計数値を、共通の基準の下で比較できるようにしている。例えば、一方の計数値については、第１実施形態と同様、その計数値そのものを重要度とし、他方の計数値については、その計数値の定数倍を重要度とする。
【００６７】
値保存部（保存部）３４Ａは、上述した値保存部３４と同様のもので、図６に示すように、計数値保存領域３４１Ａおよび誤差計測カウンタ３４２Ａをそなえて構成されている。
ただし、第２実施形態において、計数値保存領域（保存領域）３４１Ａは、上述した２つのカウンタ３３１，３３２により得られる２種類のサンプリング値を保持しうる、所定数のレコードを有している。各レコードは、サンプリング時刻およびサンプリング値を保持する領域と、有効／無効ビットＶとを有するほか、上述のごとく算出された重要度を保持する領域を有している。さらに、イベントの種類を識別するための識別情報を保持する領域をそなえてもよい。
【００６８】
また、誤差計測カウンタ（誤差計測部）３４２Ａは、上述した誤差計測カウンタ３４２と同様、値保存部３４Ａの計数値保存領域３４１Ａにおいて新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持するほか、第２実施形態では、破棄された計数値に付与された重要度の合計値も保持している。なお、これらの合計値は、イベントの種類に関係無く算出して保持してもよいし、イベント毎に算出して保持してもよい。
【００６９】
なお、第１実施形態と同様、上述したイベント選択器３１Ａ，カウンタ制御器３２Ａおよびカウンタ３３Ａにより、プロセッサ２０におけるイベントの発生回数を計数する計数部としての機能が実現されている。
また、上述したイベント選択器３１Ａおよびカウンタ制御器３２Ａ（計数部および制御部）も、第１実施形態と同様、専用ソフトウェア（イベント計測プログラム）によって実現される。
【００７０】
次に、図７を参照しながら、上述のごとく構成された第２実施形態の性能測定カウンタ３０Ａの動作について説明する。なお、基本的な、プロセッサ２０の性能情報収集手順は図３に示したものと同様であるので、その説明は省略し、図７に示すフローチャート（ステップＳ２１〜Ｓ２７，Ｓ３０，Ｓ３６〜Ｓ４５）に従って、第２実施形態におけるイベント計測手順（図３のステップＳ１４のイベント計測処理）について説明する。なお、図７において、図４に示したステップ番号と同一のステップ番号を付されたステップでは、図４を参照しながら前述したものと同様の処理が実行される。
【００７１】
性能測定カウンタ３０Ａにおいては、開始信号を受信すると（ステップＳ２１のＹＥＳルート）、カウンタ制御器３２Ａにおけるタイマが“０”にクリアされ、カウンタ制御器３２Ａにより、カウンタ３３１，３３２，計数値保存領域３４１Ａや誤差計測カウンタ３４２Ａの値が全て“０”にセットされるとともに、計数値保存領域３４１Ａの各レコードにおける有効／無効ビットＶが“無効”にセットされる（ステップＳ２２）。
【００７２】
開始信号の受信に伴って、イベント選択器３１Ａは、カウンタ３３１，３３２を１ずつカウントアップするための信号をカウンタ制御器３２Ａへ出力できる状態になり、所定の条件（ここでは２種類の条件）を満たすイベントが発生すると（ステップＳ２３のＹＥＳルート）、カウントアップ信号をカウンタ制御器３２Ａへ出力し、イベントの種類に対応したカウンタ３３１または３３２による計数値を１だけカウントアップする（ステップＳ２４）。なお、イベント選択器３１Ａは、図３のステップＳ１６による停止信号を受けると、そのカウントアップ信号の出力を停止するようになっている。
【００７３】
カウンタ制御器３２Ａでは、イベントの発生の有無に関係無く、タイマにより所定のサンプリング時間が計測されており、サンプリング時間が経過したか否かを常に判断し（ステップＳ２４からステップＳ２５、または、ステップＳ２３のＮＯルートからステップＳ２５）、サンプリング時間が経過するまで、ステップＳ２３〜Ｓ２５の処理が繰り返し実行される。
そして、サンプリング時間が経過すると（ステップＳ２５のＹＥＳルート）、カウンタ制御器３２Ａは、計数値保存領域３４１Ａに空きレコード（即ち、有効／無効ビットＶが無効状態である無効レコード）が有るか否かを判断する（ステップＳ２６）。
【００７４】
無効レコードが少なくとも２つ有る場合（ステップＳ２６のＹＥＳルート）、その無効レコードに、その時点でのカウンタ３３１，３３２による計数値（サンプリング値）とサンプリング時刻とが、それぞれ、異なるレコードに書き込まれる（ステップＳ２７）。このとき、各計数値についての重要度が所定の関数を用いて算出され（ステップＳ３６）、その重要度も各レコードに書き込まれる（ステップＳ３７）。そして、有効／無効ビットＶが無効状態から有効状態に切り替えた後（ステップＳ３８）、重要度の大きなものから順に並ぶようにレコードのソートが行なわれ（ステップＳ３９）、カウンタ３３１，３３２およびタイマを再び“０”にセットしてから（ステップＳ３０）、ステップＳ２３へ戻る。
【００７５】
一方、計数値保存領域３４１の全レコードが有効状態であり、無効レコードが存在しない場合（ステップＳ２６のＮＯルート）には、まず、各計数値についての重要度を、所定の関数を用いて算出してから（ステップＳ４０）、計数値保存領域３４１Ａの全レコードの中から、重要度の最も低いもの（一番下に位置するもの）を２つ選択し（ステップＳ４１）、今回サンプリングされた２つの計数値（新しい計数値）と、ステップＳ４１で選択された２つのレコード（以下、選択レコードという）の重要度とを比較する（ステップＳ４２）。
【００７６】
そして、比較を行なった４つの重要度のうち、重要度の高い２つのサンプリング値を、計数値保存領域３４１Ａに残す、もしくは、上書きする。新たな計数値を上書きする場合（ステップＳ４３のＹＥＳルート）、選択レコードにおけるサンプリング値および重要度をそれぞれ誤差計測カウンタ３４２Ａの値に加算した上で（ステップＳ４４）、その新しい計数値とサンプリング時刻と重要度とを選択レコードに上書き保存し（ステップＳ４５）、ステップＳ３９へ移行する。新たな計数値を上書きせず選択レコード内の情報を残す場合（ステップＳ４３のＮＯルート）には、ステップＳ４４およびＳ４５の処理を実行することなく、ステップＳ３９へ移行する。
【００７７】
なお、ステップＳ２６における判断の結果、無効レコードが１つしかない場合には、２つのサンプリング値のうち一方に対して、上述したステップＳ２７，Ｓ３６〜Ｓ３８の処理を実行するとともに、他方に対して、上述したステップＳ４０〜Ｓ４５の処理を実行することになる。
【００７８】
また、第２実施形態においても、上述したステップＳ２３〜Ｓ２５によって、プロセッサ２０における、サンプリング周期毎のイベントの発生回数を計数する計数ステップが実現されている。また、上述したステップＳ２６，Ｓ２７，Ｓ３０，Ｓ３６〜Ｓ４５によって、重要度の高いサンプリング値を計数値保存領域３４１Ａに残しながら、上記計数ステップで得られた新たなサンプリング値を計数値保存領域３４１Ａに書き込む書込ステップが実現されている。
【００７９】
このように、本発明の第２実施形態によれば、第１実施形態と同様の作用効果が得られるほか、２種類のイベント発生回数についてのピーク値とそのピーク発生時刻とを、一つの値保存部４３Ａによって計測することが可能になる。
また、重要度として、計数値（サンプリング値）を所定関数に代入することによって算出された値を用いることで、異なる基準で測定された複数種類（第２実施形態では２種類）の計数値を、共通の基準の下で比較することが可能になる。これにより、一つの値保存部３４Ａにおいて、異なる基準で測定された複数種類の計数値が混在していても、種類に関係なく、より重要度の高い計数値を残すことができる。
【００８０】
なお、第２実施形態では、２種類のイベントの発生回数をそれぞれカウンタ３３１，３３２によって計数する場合について説明したが、本発明は、これに限定されるものではなく、３以上のカウンタをそなえ、３種類以上のイベントの発生回数を計数する場合に適用されてもよく、この場合も、上述した第２実施形態と同様の作用効果が得られることはいうまでもない。
【００８１】
〔３〕第３実施形態の説明
図８は本発明の第３実施形態としてのイベント計測装置（性能測定カウンタ）およびプロセッサシステムの構成を示すブロック図、図９は第３実施形態における値保存部の構成を示す図である。
図８に示すように、第３実施形態のプロセッサシステム１０Ｂは、プロセッサ２０と性能測定カウンタ４０とから構成されている。
【００８２】
プロセッサ２０は、第１実施形態と同様、情報処理を行なうものであって、性能測定対象（イベント発生回数の計測対象）である。
性能測定カウンタ（イベント計測装置）４０もプロセッサ２０に内蔵され、このプロセッサ２０内における計測対象イベントの発生回数を計測するためのものであるが、第３実施形態の性能測定カウンタ４０は、イベント選択器４１，カウンタ制御器４２および値保存部４３をそなえて構成され、主にメモリアクセスに関する情報を収集するものである。特に、第３実施形態では、プロセッサ２０における全メモリ空間を複数のブロックに分割し、イベント選択器４１やカウンタ制御器４２が、各ブロックのアドレスをイベントの種類として認識しながら各ブロックに対するアクセス回数をイベントの発生回数として計数するものとする。
【００８３】
ここで、イベント選択器４１は、プロセッサ２０の各部からイベント信号とイベントＩＤ（イベントが発生した時のメモリアドレス）とを受け取って、以下のように機能するものである。各イベント信号は、特定のイベントが発生する度に送られる。第３実施形態でのイベントとは、例えばメモリの読出／書込などであり、イベントＩＤは、そのときのメモリアドレスである。イベント選択器４１には、第１実施形態と同様、外部から、様々なイベント条件を設定することができる。そのイベント条件が満たされた場合に、イベント選択器４１は、カウンタ制御器４２に対してイベントが発生したことを表わす信号と、イベントＩＤとを送り、そのイベントＩＤに基づいて、値保存部４３（計数値保存領域４３１）内の対応レコード（カウンタ）を１だけカウントアップするよう指示する。
【００８４】
カウンタ制御器４２は、値保存部４３（計数値保存領域４３１）内の対応レコード（カウンタ）における計数値を制御する、つまり、値保存部４３の各レコードに対する計数値の書込を制御する制御部としての機能を果たすものである。
より具体的に説明すると、カウンタ制御器４２は、イベントの種類毎に（本実施形態ではイベントＩＤ毎に）、値保存部４３の各レコードにおける計数値を更新しながら計数を行なう。つまり、カウンタ制御器４２は、イベント選択器４１から上記の信号およびイベントＩＤを受け取ると、そのイベントＩＤに対応するレコードを値保存部４３から検索し、対応するレコードが存在する場合、そのレコードにおける計数値を１だけカウントアップする。
【００８５】
対応するレコードが存在しない場合、即ち、値保存部４３に保存されていない新たな種類（新たなイベントＩＤ）のイベントの発生回数の計数を開始する際には、そのイベントの発生回数の計数値を保存すべきレコード（保存領域）を値保存部４３上に確保し、そのレコードに新たな計数値やイベントＩＤを書き込む。その際、カウンタ制御器４２は、後述するごとく重要度の高い計数値を値保存部３４に残すような書込制御を行なうように構成されている。
【００８６】
なお、カウンタ制御器４２も、上述したカウンタ制御器３２と同様、外部からの指示に応じて、値保存部４３の各レコードにおける計数値を、“０”にクリアしたり任意の値に設定したりすることができる。また、カウンタ制御器４２は、各レコードにおける計数値に応じて（例えば、その計数値がオーバフローした場合などに）、プロセッサ２０に対して割り込みを発生する機能も有している。
また、上述したイベント選択器４１およびカウンタ制御器４２と、値保存部４３の各レコードとにより、プロセッサ２０におけるイベントの発生回数を計数する計数部としての機能が実現されている。
【００８７】
値保存部（保存部）４３は、上記計数部の機能によって得られた計数値を保存するもので、この値保存部４３においては、図９に示すように、計数値を保持する領域全体が、ハッシュテーブルを用いて複数（図中、ｎ個）のセットに分割され、各セット内で計数値の更新時刻に基づいて新たな計数値の上書きを行なうセット・アソシアティブ方式が採用されている。値保存部４３の全体は、上記セットの配列として表わされる。
【００８８】
そして、各セットは、計数値保存領域４３１，ＬＲＵ情報保持領域４３２および誤差計測カウンタ４３３を有している。
計数値保存領域（保存領域）４３１は、計数値を保持しうる、所定数のレコードを有している。各レコードは、イベントＩＤとそのイベントＩＤに対応するイベントの発生回数（計数値）との組を保持するとともに、そのレコードが有効であるか無効であるかを表わす有効／無効ビット（図中ではＶと表記）を有している。
【００８９】
ＬＲＵ（Least Recently Used）情報保持領域４３２は、セット内の各レコードの更新情報を保持するものである。第３実施形態では、計数値の更新時刻を重要度として用いて計数値の追い出し処理を行なうべく、ＬＲＵ情報保持領域４３２には、ＬＲＵ情報、即ち、各レコードにおける計数値のアクセス順序（更新順序）に関する情報が記録されている。
【００９０】
誤差計測カウンタ（誤差計測部）４３３は、セット内の各レコードから追い出された計数値の合計値を記録するものである。つまり、誤差計測カウンタ４３３は、セット内のレコードにおいて新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持するものである。なお、本実施形態では、誤差計測カウンタ４３３をセット毎にそなえているが、同様の誤差計測カウンタを、値保存部４３（計数値保存領域４３１の全体）に対して一つだけそなえてもよい。
【００９１】
上述した値保存部４３では、レコード（カウンタ）は、イベントＩＤをキーとするハッシュ関数をインデックスとして配置されている。ここで用いられるハッシュ関数は、イベントＩＤ（メモリアドレス）の下位ビットをインデックスとして取り出す関数である。インデックスにより、一つのセットが選択されるので、セット内の各イベントＩＤと、カウンタ制御器４２から渡されたイベントＩＤとを比較することにより、イベントＩＤの一致するレコード（対応レコード）を検索する。
【００９２】
対応レコードが見つかれば、その対応レコードにおける計数値を１だけカウントアップし、ＬＲＵ情報保持領域４３２におけるＬＲＵ情報を書き換える。対応レコードが見つからなければ、ＬＲＵ情報に従って、追い出すべき計数値を保持するレコードを決め、その計数値を誤差計測カウンタ４３３に足し込んだ後、そのレコードに、新しいイベントＩＤおよび新しい計数値を上書きする。このときの新たな計数値は、当然、“１”となる。
なお、上述したイベント選択器４１およびカウンタ制御器４２（計数部および制御部）も、第１や第２実施形態と同様、専用ソフトウェア（イベント計測プログラム）によって実現される。
【００９３】
次に、図１０および図１１を参照しながら、上述のごとく構成された第３実施形態の性能測定カウンタ３０Ｂの動作について説明する。
図１０に示すフローチャート（ステップＳ５１〜Ｓ５８）に従って、第３実施形態におけるプロセッサ２０の性能情報収集手順について説明する。まず、ユーザは、情報を収集したいイベント（例えばリモートノードアクセス回数など）を選び出し、計測対象のイベントとしてイベント選択器４１に設定するとともに（ステップＳ５１）、プロセッサ２０における全メモリ空間の分割単位であるブロックの大きさ（例えばページ単位，キャッシュブロック単位など）を指定する（ステップＳ５２）。
【００９４】
この後、性能測定カウンタ３０Ｂ（イベント選択器４１およびカウンタ制御器４２）に対して開始信号を送りイベント計測を開始する（ステップＳ５３）。これにより、図１１を参照しながら後述するイベント計測処理が実行される（ステップＳ５４）。イベント計測処理を終了する場合（ステップＳ５５のＹＥＳルート）には、性能測定カウンタ３０Ｂに対して停止信号を送り、性能測定カウンタ３０Ｂによる計測動作を停止させる（ステップＳ５６）。
【００９５】
そして、ユーザは、値保存部４３から収集されたデータを取り出し、計数値の大きいブロックのイベントＩＤ（メモリアドレス）を得るとともに（ステップＳ５７）、セット毎に、各レコードに保存されている計数値の合計値と、誤差計測カウンタ４３３の値とを比較することにより、計数値全体に対してどれくらいの割合の計数値が廃棄されたかを認識し、最終的に得られた計数値（各レコードに残っている値）の確からしさを判断する（ステップＳ５８）。
【００９６】
ついで、図１１に示すフローチャート（ステップＳ６１〜Ｓ７５）に従って、第３実施形態におけるイベント計測手順（図１０のステップＳ５４のイベント計測処理）について説明する。
性能測定カウンタ３０Ｂにおいては、開始信号を受信すると（ステップＳ６１のＹＥＳルート）、カウンタ制御器４２により、計数値保存領域４３１（各レコード）や誤差計測カウンタ４３３の値が全て“０”にセットされるとともに、各レコードにおける有効／無効ビットＶが“無効”にセットされる（ステップＳ６２）。
【００９７】
開始信号の受信に伴って、イベント選択器４１は、計数値を１ずつカウントアップするための信号とイベントＩＤとをカウンタ制御器４２へ出力できる状態になり、所定の条件を満たすイベント（計測対象のイベント）が発生すると、カウントアップ信号およびイベントＩＤがカウンタ制御器４２へ出力される（ステップＳ６３のＹＥＳルート）。なお、イベント選択器４１は、図１０のステップＳ５６による停止信号を受けると、カウントアップ信号やイベントＩＤの出力を停止するようになっている。
【００９８】
カウンタ制御器４２では、受け取ったイベントＩＤをハッシュ関数にかけ、インデックスを得て（ステップＳ６４）、そのインデックスに対応したセットを、値保存部４３の中から取り出す（ステップＳ６５）。そして、セット内のイベントＩＤと、イベント選択器４１からのイベントＩＤ（今回発生したイベントのＩＤ）とを比較し（ステップＳ６６）、一致するイベントＩＤが存在するか否かを判断する（ステップＳ６７）。
【００９９】
一致するイベントＩＤが存在する場合（ステップＳ６７のＹＥＳルート）、そのイベントＩＤを保持するレコードにおける計数値を１だけカウントアップ更新し（ステップＳ６８）、ＬＲＵ情報保持領域４３３において、今回更新したレコードが最新のものとなるようにＬＲＵ情報を更新した後（ステップＳ６９）、ステップＳ６３に戻る。
これに対し、一致するイベントＩＤが存在しない場合（ステップＳ６７のＮＯルート）、カウンタ制御器４２は、そのセット内に空きレコード（即ち、有効／無効ビットＶが無効状態である無効レコード）が有るか否かを判断する（ステップＳ７０）。
【０１００】
無効レコードが有る場合（ステップＳ７０のＹＥＳルート）、その無効レコードに、新たな計数値“１”とイベントＩＤとが書き込まれるとともに（ステップＳ７１）、その無効レコードにおける有効／無効ビットＶを、無効状態から有効状態に切り替え（ステップＳ７２）、今回更新したレコードが最新のものとなるようにＬＲＵ情報を更新した後（ステップＳ６９）、ステップＳ６３に戻る。
【０１０１】
一方、セット内の全レコードが有効状態であり、無効レコードが存在しない場合（ステップＳ７０のＮＯルート）、カウンタ制御器４２は、ＬＲＵ情報保持領域４３３を参照し、セット内の全レコードの中から、最も古い計数値を保持しているレコード（つまり、最も長い間、アクセス・更新されていないレコード）を選択し（ステップＳ７３）、選択されたレコード（以下、選択レコードという）の計数値を、誤差計測カウンタ４３３の値に加算した上で（ステップＳ７４）、その選択レコードに、新しい計数値“１”とイベントＩＤとが上書き保存される（ステップＳ７５）。そして、今回更新したレコードが最新のものとなるようにＬＲＵ情報を更新した後（ステップＳ６９）、ステップＳ６３に戻る。
【０１０２】
このように、本発明の第３実施形態においても、値保存部４３の計数値保存領域４３１に保存される各計数値に、「重要度」という属性（本実施形態ではＬＲＵ情報つまり更新時刻）を付与しておくことで、値保存部４３の計数値保存領域４３１の容量を超えて、書き込むべき計数値が発生した場合、重要度の低いレコードに新たな計数値が上書きされる。これにより、常に重要度の大きな値と結び付けられている計数値が値保存部４３に残るようになる。
【０１０３】
ここで、第３実施形態の性能測定カウンタ３０Ｂで記録する事象について具体的に考える。第１や第２実施形態が、計測対象の領域が時間的に広大な場合に対応したものであったのに対し、第３実施形態では、計測対象の領域が空間的に広大な場合に対応したものである。例えば、アドレス空間全体に対するデータを収集しようとすると、従来手法では、計数値を保存するためにメモリ全体と同じレベルのメモリが必要となってしまう。そこで、第３実施形態の性能測定カウンタ３０Ｂは、小容量の値保存部４３を用いながら、メモリ空間全体の状況を効率的に把握可能なデータを採取できるように構成されている。
【０１０４】
このようにして、値保存部４３の容量が少なくても、必要性の高い計数値を確実に且つ効率よく採取することができ、全メモリ空間といった広大な空間に関するイベント情報を採取しても、統計情報を得るために必要なデータのみが値保存部４３に残り、最終的にプロセッサ２０の性能について全体的な判断を行なうのに有用なデータを得ることができる。
【０１０５】
従って、不必要なオーバヘッドを避けながら且つ少ないハードウェア物量（例えばＬＳＩ内に収まる程度のメモリ容量）で、メモリ空間全体に亘る情報収集が可能になり、比較的小型のプロセッサにおいても性能測定や性能チューニングを確実に行なえる。換言すると、重要な情報のみが値保存部４３に保存され、重要度の低い情報が追い出されるので、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の値保存部４３を用いて、広範囲に亘るデータを効率よく採取することができる。
【０１０６】
特に、第３実施形態では、プロセッサ２０における全メモリ空間を複数のブロックに分割し、各ブロックのアドレスをイベントの種類（イベントＩＤ）として認識しながら各ブロックに対するアクセス回数をイベントの発生回数として計数することにより、小容量の値保存部４３を用いて、広大なメモリ空間全体においてイベントの発生回数の多かったブロックとその発生数とを効率よく採取することができる。
【０１０７】
一方、第１や第２実施形態では、計数値や重要度の大きさ順にソートし、最小の計数値や最低の重要度を見つけるという手法を採っているが、このような手法では、計数値更新の度に実行されるソート処理のために、どうしてもオーバヘッドが生じてしまう。
【０１０８】
そこで、第３実施形態では、重要度として別の基準を採用している。キャッシュメモリなどでは、キャッシュブロックの追い出しの判断として、ＬＲＵ方式を用いることが多い。これは、最も最近アクセスされたブロックの優先度が最も高く、長い間、アクセスされていないブロックの優先度が低いという優先度付けの方式である。このキャッシュメモリにおける優先度の基準を、第３実施形態の重要度の基準として採用する。即ち、最も最近更新されたレコードにおける計数値の重要度が最も高く、更新された時刻が最も古いレコードにおける計数値から順に廃棄する。
【０１０９】
第３実施形態では、ＬＲＵ方式を採用することにより、レコードにおける計数値が更新されるのと同時にそのレコードの重要度を最も高く設定するだけで、ソート処理を行なう必要が無くなる。従って、第１や第２実施形態の手法に比べ、第３実施形態では、オーバヘッドをより小さくすることができる。
また、値保存部４３において、計数値を保持する領域全体が、ハッシュテーブルを用いて複数のセットに分割され、各セット内で計数値の更新時刻に基づいて新たな計数値の上書きを行なうセット・アソシアティブ方式を採用することにより、複数種類の計数値を、更新時刻に従って容易かつ確実に管理することができる。
【０１１０】
さらに、第３実施形態においても、第１実施形態の誤差計測カウンタ３４２と同様の誤差計測カウンタ４３３を用い、セット毎に、破棄された計数値の合計値を計測・保持することにより、上書きによって値保存部４３から廃棄された全計数値の大きさ（合計値）と、最終的に値保存部４３に残った計数値とを比較することが可能になる。
【０１１１】
これにより、廃棄された計数値各々の大きさは分からないが、セット内において、計数値全体に対してどれくらいの割合の計数値が廃棄されたかを認識することができる。つまり、最終的に値保存部４３に残っている値が、計数値全体をどの程度反映しているかを認識でき、値保存部４３に残った計数値の確からしさをセット毎に判断することができる。
【０１１２】
〔３−１〕第３実施形態の第１変形例の説明
さて、第３実施形態の第１変形例においても、図８および図９を参照した性能測定カウンタ４０が用いられる。
上述した第３実施形態の性能測定カウンタ４０では、プロセッサ２０におけるメモリ空間を成す各ブロックのメモリアドレスをイベントＩＤとして認識しながら、各ブロックに対するアクセス回数を計数している。
【０１１３】
これに対し、第３実施形態の第１変形例では、同じ性能測定カウンタ４０を用いて、主に命令実行に関する情報を収集する。より具体的には、イベントの発生要因である命令のアドレスをイベントＩＤ（イベントの種類）として認識しながらイベントの発生回数を計数する。つまり、メモリアドレスに代えて命令のアドレスをイベントＩＤとして用い、イベントの発生回数を、そのイベントの発生要因となった命令のアドレスとともに値保存部４３に記録することにより、全実行命令について、イベントを発生させた回数の多かった命令のアドレスとその発生数とを記録できるようになっている。
【０１１４】
ただし、本変形例においては、イベント選択器４１が、イベントＩＤの取得手法が、上述した第３実施形態と異なっている。つまり、本変形例において、イベント選択器４１は、プロセッサ２０の各部からイベント信号とイベントＩＤ（イベント発生元のインストラクションアドレス）とを受け取る。各イベント信号は、特定のイベントが発生する度に送られる。本変形例のイベントとは、例えばジャンプ命令の実行などであり、イベントＩＤは、そのときのインストラクションアドレスである。イベント選択器４１には、第３実施形態と同様、外部から、様々なイベント条件を設定することができる。そのイベント条件が満たされた場合に、イベント選択器４１は、カウンタ制御器４２に対してイベントが発生したことを表わす信号と、イベントＩＤとを送り、そのイベントＩＤに基づいて、値保存部４３（計数値保存領域４３１）内の対応レコード（カウンタ）を１だけカウントアップするよう指示する。
【０１１５】
次に、図１２に示すフローチャート（ステップＳ８１〜Ｓ８７）に従って、第３実施形態の第１変形例による、プロセッサ２０の性能情報収集手順について説明する。まず、ユーザは、情報を収集したいイベント（例えばブランチ予測ミスの発生など）を選び出し、計測対象のイベントとしてイベント選択器４１に設定する（ステップＳ８１）。
【０１１６】
この後、性能測定カウンタ３０Ｂ（イベント選択器４１およびカウンタ制御器４２）に対して開始信号を送りイベント計測を開始する（ステップＳ８２）。これにより、図１１を参照しながら前述したイベント計測処理が実行される（ステップＳ８３）。このステップＳ８３では、イベントＩＤをメモリアドレスから命令のアドレスに代えるだけで、図１１に示した手順と同様にしてイベント計測処理が行なわれる。イベント計測処理を終了する場合（ステップＳ８４のＹＥＳルート）には、性能測定カウンタ３０Ｂに対して停止信号を送り、性能測定カウンタ３０Ｂによる計測動作を停止させる（ステップＳ８５）。
【０１１７】
そして、ユーザは、値保存部４３から収集されたデータを取り出し、計数値の大きいイベントのイベントＩＤ、即ち、そのイベントの発生要因となった命令のアドレスを得るとともに（ステップＳ８６）、セット毎に、各レコードに保存されている計数値の合計値と、誤差計測カウンタ４３３の値とを比較することにより、計数値全体に対してどれくらいの割合の計数値が廃棄されたかを認識し、最終的に得られた計数値（各レコードに残っている値）の確からしさを判断する（ステップＳ８７）。
【０１１８】
このように、本発明の第３実施形態の第１変形例では、上述した第３実施形態のごとくメモリを分割するのではなく、値保存部４３において命令のアドレス毎にレコード（カウンタ）を用意することにより、例えば、どの命令がキャッシュミスを起こしやすいか、どの命令が分岐予測ミスを引き起こしやすいかなどの情報を収集することができる。
【０１１９】
その際、イベントの発生要因である命令のアドレスをイベントＩＤとして認識しながらイベントの発生回数を計数することにより、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の値保存部４３を用いて、全実行命令においてイベントを発生させた回数の多かった命令とその発生数とを効率よく採取することができる。つまり、プログラム全体といった広大な空間に関するイベント情報も、少量の領域を用意するだけで効率よく収集することができる。
【０１２０】
〔３−２〕第３実施形態の第２変形例の説明
さて、第３実施形態の第２変形例においても、図８および図９を参照した性能測定カウンタ４０が用いられるが、この第２変形例では、性能測定カウンタ４０により収集される情報は、上述のごとく、イベントの発生回数の多かったブロックとその発生数との組や、イベントを発生させた回数の多かった命令のアドレスとその発生数との組に限定されるものでなく、各種イベントの発生回数と、そのイベントの種類を特定しうるイベントＩＤと、重要度と採取するものである。
【０１２１】
この第２変形例では、上述した値保存部４３に代えて、図１３に示すような値保存部（保存部）４４がそなえられている。図１３は第３実施形態の第２変形例における値保存部４４の構成を示す図である。
図１３に示すように、値保存部（保存部）４４は、計数値保存領域４４１をそなえるほか、第１〜第３実施形態と同様の誤差計測カウンタ（誤差計測部；図示省略）をそなえていてもよい。
【０１２２】
この値保存部４４における計数値保存領域（保存領域）４４１も、所定数のレコードを有している。ただし、各レコードは、上述したイベント選択器４１およびカウンタ制御器４２により更新される計数値を保持する領域と、その計数値に対応するイベントＩＤ（イベントの種類）を保持する領域と、有効／無効ビットＶと、例えば第２実施形態と同様にして算出された重要度を保持する領域とを有している。
【０１２３】
値保存部４３に代えて、上述のような値保存部４４を含む性能測定カウンタ４０を用いることにより、新たな種類のイベントの発生回数の計数を開始する際、その計数値を書き込むための空きレコードが値保存部４４に無い場合、重要度の最も低い計数値を値保存部４４から追い出し、そこに新たな計数値を書き込む。これにより、重要な種類の情報のみが値保存部４４に保存され、重要度の低い種類の情報が追い出されるので、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の値保存部４４を用いて、プロセッサ２０の性能測定や性能チューニングに必要な、多種類のデータを効率よく採取することができる。
【０１２４】
〔４〕その他
なお、本発明は上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で種々変形して実施することができる。
【０１２５】
〔５〕付記
（付記１）  プロセッサにおけるイベントの発生回数を計数する計数部と、
該計数部によって得られた計数値を保存する保存部と、
該保存部に対する該計数値の書込を制御する制御部とをそなえ、
該制御部が、重要度の高い計数値を該保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように該書込を制御することを特徴とする、イベント計測装置。
【０１２６】
（付記２）  該計数部が、所定時間毎に、該所定時間内の該イベントの発生回数を計数し、
該制御部が、該所定時間毎に、該計数部による計数値を、該新たな計数値として、当該計数値の計測時刻とともに該保存部に書き込むことを特徴とする、付記１記載のイベント計測装置。
【０１２７】
（付記３）  該重要度が、該計数値そのものであることを特徴とする、付記２記載のイベント計測装置。
（付記４）  該重要度が、該計数値を所定関数に代入することによって算出された値であることを特徴とする、付記２記載のイベント計測装置。
【０１２８】
（付記５）  該計数部が、イベントの種類毎に、該保存部における計数値を更新しながら計数を行なうとともに、
該計数部が、該保存部に保存されていない新たな種類のイベントの発生回数の計数を開始する際には、該制御部が、該新たな種類のイベントの発生回数の計数値を保存すべき保存領域を該保存部上に確保し、その保存領域に、該新たな種類のイベントの発生回数の計数値を該新たな計数値として書き込むことを特徴とする、付記１記載のイベント計測装置。
【０１２９】
（付記６）  該重要度が、該計数部による該計数値の更新時刻であることを特徴とする、付記５記載のイベント計測装置。
（付記７）  該保存部において、該計数値を保持する領域全体を、ハッシュテーブルを用いて複数のセットに分割し、各セット内で該計数値の更新時刻に基づいて該新たな計数値の上書きを行なうセット・アソシアティブ方式を採用したことを特徴とする、付記６記載のイベント計測装置。
【０１３０】
（付記８）  該プロセッサにおける全メモリ空間を複数のブロックに分割し、該計数部が、各ブロックのアドレスを該イベントの種類として認識しながら各ブロックに対するアクセス回数を該イベントの発生回数として計数することを特徴とする、付記５〜付記７のいずれか一つに記載のイベント計測装置。
（付記９）  該計数部が、該イベントの発生要因である命令のアドレスを該イベントの種類として認識しながら該イベントの発生回数を計数することを特徴とする、付記５〜付記７のいずれか一つに記載のイベント計測装置。
【０１３１】
（付記１０）  該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部をさらにそなえたことを特徴とする、付記１〜付記６，付記８，付記９のいずれか一つに記載のイベント計測装置。
（付記１１）  該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部を、該領域全体に対して一つだけそなえたことを特徴とする、付記７記載のイベント計測装置。
【０１３２】
（付記１２）  該保存部において該新たな計数値を上書きすることによって破棄される計数値の合計値を、誤差として計測して保持する誤差計測部を、該セット毎にそなえたことを特徴とする、付記７記載のイベント計測装置。
（付記１３）  プロセッサにおけるイベントの発生回数を計数する計数ステップと、
該計数ステップにより新たな計数値が得られた場合、重要度の高い計数値を保存部に残しながら、該新たな計数値を該保存部に書き込む書込ステップとを含むことを特徴とする、イベント計測方法。
【０１３３】
（付記１４）  プロセッサにおけるイベントの発生回数を計数する計数部、および、
重要度の高い計数値を保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部としてコンピュータを機能させることを特徴とする、イベント計測プログラム。
【０１３４】
（付記１５）  プロセッサにおけるイベントの発生回数を計数する計数部、および、
重要度の高い計数値を保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように、該保存部に対する該計数値の書込を制御する制御部としてコンピュータを機能させるイベント計測プログラムを記録したコンピュータ読取可能な記録媒体。
【０１３５】
（付記１６）  情報処理を行なうプロセッサと、
該プロセッサにおけるイベントの発生回数を計数する計数部と、
該計数部によって得られた計数値を保存する保存部と、
該保存部に対する該計数値の書込を制御する制御部とをそなえ、
該制御部が、重要度の高い計数値を該保存部に残しながら、該計数部によって得られる新たな計数値を該保存部に書き込むように該書込を制御することを特徴とする、プロセッサシステム。
【０１３６】
【発明の効果】
以上詳述したように、本発明のイベント計測装置（請求項１〜請求項６）および方法（請求項７）並びにイベント計測プログラム（請求項８）および同プログラムを記録したコンピュータ読取可能な記録媒体（請求項９）並びにプロセッサシステム（請求項１０）によれば、以下のような効果ないし利点を得ることができる。
【０１３７】
（１）保存対象の計数値が保存部の容量を超えると、重要度の高い計数値を保存部に残しながら新たな計数値を保存部に上書きすることにより、保存部の容量が少なくても、必要性の高い計数値を確実に採取することができる。つまり、長時間あるいは広範囲に亘ってイベント発生回数を計測しても、統計情報を得るために必要なデータのみが保存部に残り、最終的にプロセッサの性能について全体的な判断を行なうのに有用なデータを得ることができる。従って、不必要なオーバヘッドを避けながら且つ少ないハードウェア物量（例えばＬＳＩ内に収まる程度のメモリ容量）で、長時間に亘る情報収集やメモリ空間全体に亘る情報収集が可能になり、比較的小型のプロセッサにおいても性能測定や性能チューニングを確実に行なえる（請求項１，請求項７〜請求項１０）。
【０１３８】
（２）所定時間毎に、その所定時間内に発生したイベントの数を計数し、その計数値を書き込むための空き領域が保存部に無い場合、重要度の最も低い計数値を保存部から追い出し、そこに新たな計数値を計測時刻とともに書き込む。これにより、重要な情報のみが保存部に保存され、重要度の低い情報が追い出されるので、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の保存部を用いて、長時間に亘るデータを効率よく採取することができる（請求項２）。
【０１３９】
（３）このとき、重要度を計数値そのものとすることで、最も小さい計数値から順に保存部から廃棄され、計数値の大きいものほど重要度が高いものとして扱われ、大きな計数値が優先的に保存部に残される。従って、イベントの発生回数を所定時間毎に計測時刻とともに計測し保存部で保存することにより、イベントの発生回数が多かった時刻とその発生数とを長時間に亘って採取することができる。これにより、イベント発生のピーク値とそのピークの発生時刻とを採取でき、例えば、キャッシュミスが多い部分のデータ構造の見直しが可能になり、プログラムの性能向上に役立つデータを得ることができる（請求項３）。
【０１４０】
（４）また、重要度として、計数値を所定関数に代入することによって算出された値を用いることで、異なる基準で測定された複数種類の計数値を、共通の基準の下で比較することが可能になる。これにより、一つの保存部において、異なる基準で測定された複数種類の計数値が混在していても、種類に関係なく、より重要度の高い計数値を残すことができる。
【０１４１】
（５）新たな種類のイベントの発生回数の計数を開始する際、その計数値を書き込むための空き領域が保存部に無い場合、重要度の最も低い計数値を保存部から追い出し、そこに新たな計数値を書き込む。これにより、重要な種類の情報のみが保存部に保存され、重要度の低い種類の情報が追い出されるので、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の保存部を用いて、広範囲に亘るデータや多種類のデータを効率よく採取することができる（請求項４）。
【０１４２】
（６）このとき、重要度を、計数部による計数値の更新時刻とすることで、更新された時刻が最も古い計数値から順に保存部から破棄され、最も最近更新された計数値の重要度が最も高く、更新時刻が最近の計数値が優先的に保存部に残される。このように更新時刻を重要度として用いた場合、例えば計数値そのものを重要度として計数値のソート処理を行なう場合に比べて、オーバヘッドをより小さくすることができる（請求項５）。
【０１４３】
（７）保存部において、計数値を保持する領域全体を、ハッシュテーブルを用いて複数のセットに分割し、各セット内で計数値の更新時刻に基づいて新たな計数値の上書きを行なうセット・アソシアティブ方式を採用することにより、複数種類の計数値を、更新時刻に従って容易かつ確実に管理することができる。
【０１４４】
（８）プロセッサにおける全メモリ空間を複数のブロックに分割し、各ブロックのアドレスをイベントの種類として認識しながら各ブロックに対するアクセス回数をイベントの発生回数として計数することにより、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の保存部を用いて、広大なメモリ空間全体においてイベントの発生回数の多かったブロックとその発生数とを効率よく採取することができる。
【０１４５】
（９）イベントの発生要因である命令のアドレスをイベントの種類として認識しながらイベントの発生回数を計数することにより、計数値をメモリに退避させたり特別なソフトウェアを起動したりすることなく、小容量の保存部を用いて、全実行命令においてイベントを発生させた回数の多かった命令とその発生数とを効率よく採取することができる。
【０１４６】
（１０）重要度の低い計数値を廃棄する際に、廃棄される計数値の合計値を誤差として計測・保持することにより、上書きによって保存部から廃棄された全計数値の大きさ（合計値）と、最終的に保存部に残った計数値とを比較することが可能になる。これにより、計数値全体に対してどれくらいの割合の計数値が廃棄されたかを認識することができる。つまり、最終的に保存部に残っている値が、計数値全体をどの程度反映しているかを認識でき、保存部に残った計数値の確からしさを判断することができる（請求項６）。
【図面の簡単な説明】
【図１】本発明の第１実施形態としてのイベント計測装置（性能測定カウンタ）およびプロセッサシステムの構成を示すブロック図である。
【図２】第１実施形態における値保存部の構成を示す図である。
【図３】第１実施形態におけるプロセッサの性能情報収集手順を説明するためのフローチャートである。
【図４】第１実施形態におけるイベント計測手順を説明するためのフローチャートである。
【図５】本発明の第２実施形態としてのイベント計測装置（性能測定カウンタ）の構成を示すブロック図である。
【図６】第２実施形態における値保存部の構成を示す図である。
【図７】第２実施形態におけるイベント計測手順を説明するためのフローチャートである。
【図８】本発明の第３実施形態としてのイベント計測装置（性能測定カウンタ）およびプロセッサシステムの構成を示すブロック図である。
【図９】第３実施形態における値保存部の構成を示す図である。
【図１０】第３実施形態におけるプロセッサの性能情報収集手順を説明するためのフローチャートである。
【図１１】第３実施形態におけるイベント計測手順を説明するためのフローチャートである。
【図１２】第３実施形態の第１変形例におけるプロセッサの性能情報収集手順を説明するためのフローチャートである。
【図１３】第３実施形態の第２変形例における値保存部の構成を示す図である。
【図１４】一般的な分散共有メモリ型の並列計算機の構成を示すブロック図である。
【符号の説明】
１０，１０Ａ，１０Ｂ  プロセッサシステム
２０  プロセッサ
３０  性能測定カウンタ（イベント計測装置）
３１，３１Ａ  イベント選択器（計数部）
３２，３２Ａ  カウンタ制御器（計数部，制御部）
３３，３３１，３３２  カウンタ（計数部）
３４，３４Ａ  値保存部（保存部）
３４１，３４１Ａ  計数値保存領域（保存領域）
３４２，３４２Ａ  誤差計測カウンタ（誤差計測部）
４０  性能測定カウンタ（イベント計測装置）
４１  イベント選択器（計数部）
４２  カウンタ制御器（計数部，制御部）
４３，４４  値保存部（保存部）
４３１，４４１  計数値保存領域（保存領域）
４３２  ＬＲＵ情報保持領域
４３３  誤差計測カウンタ（誤差計測部）
【図１】
0004445160.tif 000002
【図２】
0004445160.tif 000003
【図３】
0004445160.tif 000004
【図４】
0004445160.tif 000005
【図５】
0004445160.tif 000006
【図６】
0004445160.tif 000007
【図７】
0004445160.tif 000008
【図８】
0004445160.tif 000009
【図９】
0004445160.tif 000010
【図１０】
0004445160.tif 000011
【図１１】
0004445160.tif 000012
【図１２】
0004445160.tif 000013
【図１３】
0004445160.tif 000014
【図１４】
0004445160.tif 000015