(57)【要約】【課題】  複数の中央処理装置を備えたシステムにおいて、スレッド毎及び中央処理装置毎に、各中央処理装置が各スレッドを実行していた間に発生したイベントの発生回数を、これまでより迅速に算出する。【解決手段】  複数の中央処理装置の各々のイベント発生回数をカウントする発生回数カウンタを備え、各スレッドのスレッド用記憶領域内に、各中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行中におけるイベントの累積発生回数を記録しており、各々のスレッドのスレッド用記憶領域内に、中央処理装置が当該スレッドの実行を開始する時点の、当該中央処理装置の発生回数カウンタの値を記録しており、当該スレッドの実行終了時に、当該中央処理装置の発生回数カウンタの値から、当該スレッドの開始時回数を差し引いた差分値を、当該スレッドのスレッド用記憶領域内の当該中央処理装置に対応する累積発生回数に加える情報処理装置を提供する。【選択図】図４
2006134170.tif 000002
【特許請求の範囲】
【請求項１】
スレッドを実行している中央処理装置に発生したイベントの回数を、当該スレッドがユーザモードでアクセス可能なスレッド用記憶領域に記憶させる情報処理装置であって、
複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置に発生したイベント発生回数をカウントする発生回数カウンタと、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生したイベントの、中央処理装置が当該スレッドの実行を前回終了した時点における累積発生回数を記録する累積回数記録部と、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、当該スレッドを実行中の中央処理装置が当該スレッドの実行を開始する時点における、当該中央処理装置の前記発生回数カウンタのカウンタ値を記録する開始時回数記録部と、
中央処理装置がスレッドの実行を終了する場合に、当該中央処理装置の前記発生回数カウンタのカウンタ値から、当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加える累積回数更新部と
を備える情報処理装置。
【請求項２】
実行中のスレッドにおいて、当該スレッドを実行している中央処理装置を判断する実行中央処理装置判断部と、
各々のスレッドに対応して設けられ、当該スレッドを実行中の中央処理装置の前記発生回数カウンタのカウンタ値から、当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加算して出力する累積回数出力部と
を更に備える請求項１記載の情報処理装置。
【請求項３】
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、当該スレッドを実行中の中央処理装置を識別する中央処理装置識別情報を記録する中央処理装置識別情報記録部を更に備え、
前記実行中央処理装置判断部は、前記中央処理装置識別情報記録部に記録されている前記中央処理装置識別情報に基づいて、当該スレッドを実行している中央処理装置を判断する
請求項２記載の情報処理装置。
【請求項４】
何れかの中央処理装置がスレッドの実行を開始する場合に、前記累積回数更新部は、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数から、当該スレッドの前記開始時回数記録部に記録されたカウンタ値を差し引いた差分値を予め算出し、
当該中央処理装置が当該スレッドを実行中において、前記累積回数出力部は、予め算出した当該差分値に、当該中央処理装置の前記発生回数カウンタのカウンタ値を加算して出力する
請求項２記載の情報処理装置。
【請求項５】
各々の前記スレッドは、複数のユーザスレッドの何れかを実行することによりユーザレベルスケジューリングを行うスケジューリングスレッドであり、
各々の前記ユーザスレッドに対応して当該ユーザスレッドのスレッド用記憶領域に設けられ、各々の前記中央処理装置、及び、各々の前記スケジューリングスレッドに対応付けて、当該ユーザスレッドを当該中央処理装置及び当該スケジューリングスレッドで実行していた時に発生したイベントの累積発生回数を記録するユーザスレッド用累積回数記録部と、
各々のユーザスレッドに対応して当該ユーザスレッドの前記スレッド用記憶領域に設けられ、当該ユーザスレッドを実行中のスケジューリングスレッドが当該ユーザスレッドの実行を開始した時点における、当該スケジューリングスレッドについて前記累積回数出力部により出力させた累積発生回数を記録するユーザスレッド用開始時回数記録部と、
スケジューリングスレッドがユーザスレッドの実行を終了する場合に、当該スケジューリングスレッドについて前記累積回数出力部により出力させた累積発生回数から、当該ユーザスレッドの前記ユーザスレッド用開始時回数記録部に、当該スケジューリングスレッドに対応して記録された中央処理装置毎の累積発生回数を差し引いた差分値を算出し、当該差分値を、当該ユーザスレッドの前記ユーザスレッド用累積回数記録部に当該スケジューリングスレッドに対応付けて記録された累積発生回数に加えるユーザスレッド用累積回数更新部と
を更に備える請求項２記載の情報処理装置。
【請求項６】
実行中のユーザスレッドにおいて、当該ユーザスレッドを実行しているスケジューリングスレッドを判断する実行スケジューリングスレッド判断部と、
各々のユーザスレッドに対応して設けられ、当該ユーザスレッドを実行中のスケジューリングスレッドについて前記累積回数出力部により出力させた累積発生回数から、当該ユーザスレッドの前記ユーザスレッド用開始時回数記録部に、当該スケジューリングスレッドに対応して記録された累積発生回数を差し引いた中央処理装置毎の差分値を算出し、当該差分値を、当該ユーザスレッドの前記ユーザスレッド用累積回数記録部に当該スケジューリングスレッドに対応付けて記録された累積発生回数に加えて出力するユーザスレッド用累積回数出力部と
を更に備える請求項５記載の情報処理装置。
【請求項７】
中央処理装置によりユーザプログラムの実行が終了されてから、当該中央処理装置により他のユーザプログラムの実行が開始されるまでの間に発生が予想されるイベントの、予め定められた予想発生回数を格納する実行開始時予想発生回数格納部を更に備え、
前記累積回数更新部は、差分値を加算した前記累積発生回数から、更に、前記予想発生回数を差し引き、
前記累積回数出力部は、差分値を加算した前記累積発生回数から、更に、前記予想発生回数を差し引いて出力する
請求項２記載の情報処理装置。
【請求項８】
スレッドに対する割り込み処理の処理中に発生したイベントの発生回数を取得する割込処理中イベント回数取得部を更に備え、
前記累積回数更新部は、差分値を加算した前記累積発生回数から、更に、前記割込処理中イベント回数取得部が取得した発生回数を差し引く、
請求項２記載の情報処理装置。
【請求項９】
前記発生回数カウンタは、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置に発生したキャッシュミスの発生回数をカウントし、
前記累積回数記録部は、各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生したキャッシュミスの累積発生回数を記録し、
前記累積回数更新部は、当該スレッドを実行中の中央処理装置の前記発生回数カウンタのカウンタ値から当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されているキャッシュミスの累積発生回数に加える
請求項２記載の情報処理装置。
【請求項１０】
前記発生回数カウンタは、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置が実行した実行命令数をカウントし、
前記累積回数記録部は、各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に当該中央処理装置が実行した累積の実行命令数を記録し、
前記累積回数更新部は、当該スレッドを実行中の中央処理装置の前記発生回数カウンタのカウンタ値から当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積の実行命令数に加える
請求項２記載の情報処理装置。
【請求項１１】
前記発生回数カウンタは、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置に発生した分岐予測ミスの発生回数をカウントし、
前記累積回数記録部は、各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生した分岐予測ミスの累積発生回数を記録し、
前記累積回数更新部は、当該スレッドを実行中の中央処理装置の前記発生回数カウンタのカウンタ値から当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている分岐予測ミスの累積発生回数に加える
請求項２記載の情報処理装置。
【請求項１２】
前記発生回数カウンタは、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置が実行した累積の実行サイクル数をカウントし、
前記累積回数記録部は、各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に当該中央処理装置が実行した累積の実行サイクル数を記録し、
前記累積回数更新部は、当該スレッドを実行中の中央処理装置の前記発生回数カウンタのカウンタ値から当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積の実行サイクル数に加える
請求項２記載の情報処理装置。
【請求項１３】
前記累積回数記録部は、各々の前記中央処理装置に対応付けて、対応するスレッドを当該中央処理装置で実行していた時に発生したイベントの、クロックサイクル数あたりの発生回数を記録し、
前記累積回数更新部は、中央処理装置が当該スレッドの実行を終了する場合に、当該中央処理装置の前記発生回数カウンタのカウンタ値から、当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該中央処理装置の動作周波数に基づく値で除算した値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加える
請求項１記載の情報処理装置。
【請求項１４】
複数の中央処理装置を備える情報処理装置において、スレッドを実行している中央処理装置に発生したイベントの回数を、当該スレッドがユーザモードでアクセス可能なスレッド用記憶領域に記憶させるプログラムであって、
前記情報処理装置は、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置に発生したイベント発生回数をカウントする発生回数カウンタを更に備え、
前記情報処理装置を、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生したイベントの、中央処理装置が当該スレッドの実行を前回終了した時点における累積発生回数を記録する累積回数記録部と、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、当該スレッドを実行中の中央処理装置が当該スレッドの実行を開始する時点における、当該中央処理装置の前記発生回数カウンタのカウンタ値を記録する開始時回数記録部と、
中央処理装置がスレッドの実行を終了する場合に、当該中央処理装置の前記発生回数カウンタのカウンタ値から、当該スレッドの前記開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加える累積回数更新部と
して機能させるプログラム。
【請求項１５】
複数の中央処理装置を備えた情報処理装置において、スレッドを実行している中央処理装置に発生したイベントの回数を、当該スレッドがユーザモードでアクセス可能なスレッド用記憶領域に記憶させる管理方法であって、
前記情報処理装置は、複数の前記中央処理装置の各々に対応して設けられ、当該中央処理装置に発生したイベント発生回数をカウントする発生回数カウンタを更に備え、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、各々の前記中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生したイベントの、中央処理装置が当該スレッドの実行を前回終了した時点における累積発生回数を記録する累積回数記録段階と、
各々のスレッドに対応して当該スレッドの前記スレッド用記憶領域内に設けられ、当該スレッドを実行中の中央処理装置が当該スレッドの実行を開始する時点における、当該中央処理装置の前記発生回数カウンタのカウンタ値を記録する開始時回数記録段階と、
中央処理装置がスレッドの実行を終了する場合に、当該中央処理装置の前記発生回数カウンタのカウンタ値から、当該スレッドの前記開始時回数記録段階において記録されたカウンタ値を差し引いた差分値を、当該スレッドの前記累積回数記録段階おいて当該中央処理装置に対応して記録された累積発生回数に加える累積回数更新段階と
を備える管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プログラム、及び管理方法に関する。特に本発明は、プログラムの実行中に発生したイベントの回数をスレッド毎に記録する情報処理装置、プログラム、及び管理方法に関する。
【背景技術】
【０００２】
スレッドごとのリソース使用量を知る最も単純な方法は、OS カーネルに対するシステムコールを用いることである。たとえばLinuxではgetrusage()、Windows（登録商標） ではGetThreadTimes()で、スレッドごとのCPU（中央処理装置）使用量を知ることができる。しかし、システムコールは特権モードへの遷移を必要とするためコストが高く、すべてのメソッドの出入口でタイムスタンプを記録するといった使い方には適さない。またコストの問題のほかに、システムコールによりOS カーネル内で再スケジュールなどの余計な処理が行われ、アプリケーションの本来の挙動を乱してしまう危険性もある。
【０００３】
最近のCPU では、ユーザレベルから読める「リソース使用量カウンタ」を備えていることが多い。たとえばPentium（登録商標）等のCPU には、リセット時からのクロックカウント数を保持する「タイムスタンプカウンタ(TSC)」という64ビット内部カウンタが用意されており、RDTSC 命令で読み出すことができる。しかし、このカウンタはCPU に付随するもので、どのスレッドが実行されているかに関係なくカウントアップが行われてしまうため、スレッド別のリソース使用量を知ることはできない。
【０００４】
これに対して、Estime というLinux 用パッケージは、この問題に対する解法を与えている（非特許文献１参照。）。この方法によると、OS カーネルがスレッドをディスパッチする際に、そのスレッドのそれまでのCPU 使用量と、ディスパッチ時のTSC の値を、ユーザー空間にマップされたメモリ領域に書き込む。スレッドは、これらの値とTSC の最新値から、任意の時点でのCPU 使用量を、OS カーネルに入らずに計算することができる。この手法は、低コストなリソース使用量計測を「スレッド別」に行えるという点で画期的であるが、「CPU 別」に計測するという観点が欠けている。
【０００５】
【非特許文献１】Estime:a High-Resolution Virtual Timer for Linux, ホームページＵＲＬ「http://estime.sourceforge.net/」
【発明の開示】
【発明が解決しようとする課題】
【０００６】
Web アプリケーションのような大規模プログラムをサンプリング計測で調査すると、飛びぬけて実行される特定のメソッドが無く、各メソッドがまんべんなく実行されているフラットなプロファイルが得られることが多い。そのため、従来の「ホットなメソッド」をチューニングするという手法を用いることが難しい。
【０００７】
このようなアプリケーションの挙動を把握し改良するためには、メソッドの実行パスを考慮した調査を行い。リソースを消費しているクリティカルなパスを見つける必要がある。ただし、リソース使用量計測のコストが高いと、計測自体のオーバヘッドが支配的に
なったり、アプリケーションの挙動が変わってしまったりという問題が発生する。また、実行パスを考慮した計測はスレッドごとに行えなければ意味がない。このようなリソース使用量情報をCPU 別に計測できれば、特定のCPU においてコード実行に時間がかかっていたり、キャッシュミスが頻発しているという状況を知ることが可能となる。
【０００８】
そこで本発明は、上記の課題を解決することのできる情報処理装置、プログラム、及び管理方法を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明の第１の形態においては、スレッドを実行している中央処理装置に発生したイベントの回数を、当該スレッドがユーザモードでアクセス可能なスレッド用記憶領域に記憶させる情報処理装置であって、複数の中央処理装置の各々に対応して設けられ、当該中央処理装置に発生したイベント発生回数をカウントする発生回数カウンタと、各々のスレッドに対応して当該スレッドのスレッド用記憶領域内に設けられ、各々の中央処理装置に対応付けて、当該スレッドを当該中央処理装置で実行していた間に発生したイベントの、中央処理装置が当該スレッドの実行を前回終了した時点における累積発生回数を記録する累積回数記録部と、各々のスレッドに対応して当該スレッドのスレッド用記憶領域内に設けられ、当該スレッドを実行中の中央処理装置が当該スレッドの実行を開始する時点における、当該中央処理装置の発生回数カウンタのカウンタ値を記録する開始時回数記録部と、中央処理装置が当該スレッドの実行を終了する場合に、当該中央処理装置の発生回数カウンタのカウンタ値から、当該スレッドの開始時回数記録部に記録されているカウンタ値を差し引いた差分値を、当該スレッドの累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加える累積回数更新部とを備える情報処理装置、当該情報処理装置を管理する管理方法、当該情報処理装置を動作させるプログラムを提供する。
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明の効果】
【００１０】
本発明によれば、複数の中央処理装置を備えたシステムにおいて、スレッド毎及び中央処理装置毎に、各中央処理装置が各スレッドを実行していた間に発生したイベントの発生回数を、これまでより迅速に算出することができる。
【発明を実施するための最良の形態】
【００１１】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
図１は、情報処理装置１０の全体構成を示す。情報処理装置１０は、ホストコントローラ１０８２により相互に接続される中央処理装置１０００−１、中央処理装置１０００−２、ＲＡＭ１０２０、及びグラフィックコントローラ１０７５を有するＣＰＵ周辺部を備える。また、情報処理装置１０は、入出力コントローラ１０８４によりホストコントローラ１０８２に接続される通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を有する入出力部を備える。
【００１３】
また、情報処理装置１０は、入出力コントローラ１０８４に接続されるＲＯＭ１０１０、フレキシブルディスクドライブ１０５０、及び入出力チップ１０７０を有するレガシー入出力部を備える。ホストコントローラ１０８２は、ＲＡＭ１０２０と、高い転送レートでＲＡＭ１０２０をアクセスする中央処理装置１０００−１、中央処理装置１０００−２、及びグラフィックコントローラ１０７５とを接続する。
【００１４】
中央処理装置１０００−１及び中央処理装置１０００−２の各々は、ＲＯＭ１０１０及びＲＡＭ１０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。また、中央処理装置１０００−１は、中央処理装置１０００−１に対応して設けられ、中央処理装置１０００−１に発生したイベントの発生回数をカウントする発生回数カウンタ１００５−１を有する。同様に、中央処理装置１０００−２は、中央処理装置１０００−２に対応して設けられ、中央処理装置１０００−２に発生したイベントの発生回数をカウントする発生回数カウンタ１００５−２を有する。発生回数カウンタ１００５−１及び発生回数カウンタ１００５−２は、ユーザモードで動作するプログラムにより読み出し可能である。
【００１５】
ここで、中央処理装置１０００−１に発生するイベントとは、例えば、中央処理装置１０００−１による実行サイクルの進行である。即ち例えば中央処理装置１０００−１がPentium(登録商標)等である場合には、発生回数カウンタ１００５−１は、タイムスタンプカウンタ(TSC:Time Stamp Counter)である。これに代えて、発生回数カウンタ１００５−１は、中央処理装置１０００−１からのアクセスにより発生した分岐予測ミスの発生回数をカウントしてもよいし、中央処理装置１０００−１が実行した実行命令数をカウントしてもよいし、中央処理装置１０００−１に発生したキャッシュミスの発生回数をカウントしてもよい。
【００１６】
ＲＡＭ１０２０は、中央処理装置１０００−１又は中央処理装置１０００−２により読み出される各種のデータを格納している。グラフィックコントローラ１０７５は、中央処理装置１０００−１等がＲＡＭ１０２０内に設けたフレームバッファ上に生成する画像データを取得し、表示装置１０８０上に表示させる。これに代えて、グラフィックコントローラ１０７５は、中央処理装置１０００−１等が生成する画像データを格納するフレームバッファを、内部に含んでもよい。
【００１７】
入出力コントローラ１０８４は、ホストコントローラ１０８２と、比較的高速な入出力装置である通信インターフェイス１０３０、ハードディスクドライブ１０４０、及びＣＤ−ＲＯＭドライブ１０６０を接続する。通信インターフェイス１０３０は、ネットワークを介して外部の装置と通信する。ハードディスクドライブ１０４０は、情報処理装置１０が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ１０６０は、ＣＤ−ＲＯＭ１０９５からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。
【００１８】
また、入出力コントローラ１０８４には、ＲＯＭ１０１０と、フレキシブルディスクドライブ１０５０や入出力チップ１０７０等の比較的低速な入出力装置とが接続される。ＲＯＭ１０１０は、情報処理装置１０の起動時に中央処理装置１０００−１又は中央処理装置１０００−２が実行するブートプログラムや、情報処理装置１０のハードウェアに依存するプログラム等を格納する。フレキシブルディスクドライブ１０５０は、フレキシブルディスク１０９０からプログラム又はデータを読み取り、ＲＡＭ１０２０を介して入出力チップ１０７０に提供する。入出力チップ１０７０は、フレキシブルディスク１０９０や、例えばパラレルポート、シリアルポート、キーボードポート、マウスポート等を介して各種の入出力装置を接続する。
【００１９】
情報処理装置１０に提供されるプログラムは、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、入出力チップ１０７０及び/又は入出力コントローラ１０８４を介して、記録媒体から読み出され情報処理装置１０にインストールされて実行される。プログラムが情報処理装置１０等に働きかけて行わせる動作は、図２から図７において後述する。
【００２０】
以上に示したプログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としては、フレキシブルディスク１０９０、ＣＤ−ＲＯＭ１０９５の他に、ＤＶＤやＰＤ等の光学記録媒体、ＭＤ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワークやインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムを情報処理装置１０に提供してもよい。
【００２１】
図２は、ＲＡＭ１０２０がスレッド用記憶領域に格納するデータ構造の一例を示す。ＲＡＭ１０２０は、スレッド用記憶領域２０−１と、スレッド用記憶領域２０−２と、スレッド用記憶領域２０−３とを含む。スレッド用記憶領域２０−１は、スレッド１に対応して設けられ、スレッド１がユーザモードでアクセス可能な領域である。スレッド用記憶領域２０−２は、スレッド２に対応して設けられ、スレッド２がユーザモードでアクセス可能な領域である。スレッド用記憶領域２０−３は、スレッド３に対応して設けられ、スレッド３がユーザモードでアクセス可能な領域である。
【００２２】
スレッド用記憶領域２０−１内には、累積発生回数記録部２００−１と、開始時回数記録部２１０−１と、中央処理装置識別情報記録部２２０−１とが設けられている。累積発生回数記録部２００−１は、スレッド１に対応してスレッド用記憶領域２０−１内に設けられ、各々の中央処理装置に対応付けて、スレッド１をその中央処理装置で実行していた間に発生したイベントの累積発生回数を記録する。これは、中央処理装置が当該スレッドの実行を前回終了した時点で、後述する累積回数更新部３１０によって更新された値である。
【００２３】
例えば、累積発生回数記録部２００−１は、スレッド１を中央処理装置１０００−１で実行していた間に当該中央処理装置が処理した累積の実行サイクル数を格納する。これに代えて、又は、これに加えて、累積発生回数記録部２００−１は、スレッド１を中央処理装置１０００−１で実行していた間に発生した分岐予測ミス又はキャッシュミスの累積発生回数を格納してもよいし、当該中央処理装置が実行した累積の命令実行数を記録してもよい。
【００２４】
開始時回数記録部２１０−１は、スレッド１に対応してスレッド用記憶領域２０−１内に設けられ、スレッド１を実行中の中央処理装置がスレッド１の実行を開始する時点における、その中央処理装置の発生回数カウンタのカウンタ値を記録する。中央処理装置識別情報記録部２２０−１は、スレッド１に対応してスレッド用記憶領域２０−１内に設けられ、スレッド１を実行中の中央処理装置を識別する中央処理装置識別情報を記録する。
【００２５】
スレッド用記憶領域２０−２内には、累積発生回数記録部２００−２と、開始時回数記録部２１０−２と、中央処理装置識別情報記録部２２０−２とが設けられている。累積発生回数記録部２００−２、開始時回数記録部２１０−２、及び、中央処理装置識別情報記録部２２０−２の各々は、スレッド１に代えてスレッド２に対応付けられている事項の他は、累積発生回数記録部２００−１、開始時回数記録部２１０−１、及び、中央処理装置識別情報記録部２２０−１の各々と略同一であるので説明を省略する。
【００２６】
また、スレッド用記憶領域２０−３内には、累積発生回数記録部２００−３と、開始時回数記録部２１０−３と、中央処理装置識別情報記録部２２０−３とが設けられている。累積発生回数記録部２００−３、開始時回数記録部２１０−３、及び、中央処理装置識別情報記録部２２０−３の各々は、スレッド１に代えてスレッド３に対応付けられている事項の他は、累積発生回数記録部２００−１、開始時回数記録部２１０−１、及び、中央処理装置識別情報記録部２２０−１の各々と略同一であるので説明を省略する。
【００２７】
更に、好ましくは、ＲＡＭ１０２０は、実行開始時予想発生回数格納部２５を含む。実行開始時予想発生回数格納部２５は、中央処理装置によりスレッドの実行が終了されてから、当該中央処理装置により他のスレッドの実行が開始されるまでの間に発生が予想されるイベントの、予め定められた予想発生回数を格納する。この予想発生回数は、スレッドに拠らず略同一とみなすことができるので、実行開始時予想発生回数格納部２５は、各スレッドに共通の予想発生回数を格納する。
【００２８】
また、累積発生回数記録部２００−１〜３、開始時回数記録部２１０−１〜３、中央処理装置識別情報記録部２２０−１〜３、及び実行開始時予想発生回数格納部２５のうち少なくとも一部は、ＲＡＭ１０２０でなく、中央処理装置１０００−１又は中央処理装置１０００−２内のレジスタ内に設けられてもよい。この場合、データのアクセス速度を一層向上させることができる。
【００２９】
図３は、中央処理装置１０００−１が実行するプログラムの機能を機能ブロックに分類して示す。中央処理装置１０００−１は、オペレーティングシステム３２を実行し、また、スレッド１を実行する。オペレーティングシステム３２は、累積回数更新部３１０及び割込処理中イベント回数取得部３２０を含む。累積回数更新部３１０は、中央処理装置１０００−１がスレッド１の実行を開始する時に、その開始の時点における発生回数カウンタ１００５−１のカウンタ値を取得して、開始時回数記録部２１０−１に記録させる。また、累積回数更新部３１０は、スレッド１を実行している中央処理装置１０００−１を識別する情報を中央処理装置識別情報記録部２２０−１に記録させる。
【００３０】
そして、累積回数更新部３１０は、中央処理装置１０００−１がスレッド１の実行を終了する場合に、その終了時点における発生回数カウンタ１００５−１のカウンタ値から、開始時回数記録部２１０−１に記録されているカウンタ値を差し引いた差分値を算出する。そして、累積回数更新部３１０は、算出したその差分値を、累積発生回数記録部２００−１に中央処理装置１０００−１に対応付けて記録されている累積発生回数に加える。
【００３１】
より具体的に、発生回数カウンタ１００５−１がタイムスタンプカウンタである場合には、累積回数更新部３１０は、その差分値を、累積発生回数記録部２００−１において中央処理装置１０００−１に対応付けて記録されている、累積の実行サイクル数に加える。また、発生回数カウンタ１００５−１が分岐予測ミス数のカウンタである場合には、累積回数更新部３１０は、その差分値を、累積発生回数記録部２００−１において中央処理装置１０００−１に対応付けて記録されている、分岐予測ミスの累積発生回数に加える。
【００３２】
また、発生回数カウンタ１００５−１が実行命令数のカウンタである場合には、累積回数更新部３１０は、その差分値を、累積発生回数記録部２００−１において中央処理装置１０００−１に対応付けて記録されている、累積の実行命令数に加える。また、発生回数カウンタ１００５−１がキャッシュミス数のカウンタである場合には、累積回数更新部３１０は、その差分値を、累積発生回数記録部２００−１において中央処理装置１０００−１に対応付けて記録されている、キャッシュミスの累積発生回数に加える。
【００３３】
また、好ましくは、累積回数更新部３１０は、中央処理装置によりユーザプログラムの実行が終了されてから、当該中央処理装置により他のユーザプログラムの実行が開始されるまでの間に発生が予想されるイベントの、予め定められた予想発生回数を、実行開始時予想発生回数格納部２５から取得する。そして、累積回数更新部３１０は、算出した上記差分値を加えた累積発生回数から、更に、取得したその予想発生回数を差し引く。これにより、スレッドの実行初期化処理中に発生したイベント発生回数を除外し、ユーザプログラム実行中にのみ発生したイベントの回数を算出できる。
【００３４】
また、更に好ましくは、割込処理中イベント回数取得部３２０は、スレッド１に対する予め定められた割込み処理の処理中に発生した、イベントの発生回数を取得する。そしてこの場合、累積回数更新部３１０−１は、差分値を加えた上記累積発生回数から、更に、割込処理中イベント回数取得部３２０が取得した発生回数を差し引く。ここで割込み処理とは、中央処理装置に対する外部からの割込みに応じた処理、ページフォルト処理、又は、Ｉ／Ｏ完了待ち等の処理を含む。これにより、割り込み発生中のイベント発生回数を除外し、ユーザプログラム実行中にのみ発生したイベントの回数を積算できる。
【００３５】
スレッド１は、ユーザプログラムを実行する他に、スレッド１に対応して設けられた、実行中央処理装置判断部３００−１と、累積回数出力部３３０−１として機能する。実行中央処理装置判断部３００−１は、スレッド１が何れかの中央処理装置において実行中の場合に、スレッド１を実行している中央処理装置を判断する。例えば、実行中央処理装置判断部３００−１は、中央処理装置識別情報記録部２２０−１から読み出した識別情報により識別される中央処理装置を、スレッド１を実行している中央処理装置と判断する。
【００３６】
累積回数出力部３３０−１は、スレッド１を実行中の中央処理装置１０００−１の発生回数カウンタ１００５−１のカウンタ値から、開始時回数記録部２１０−１に記録されているカウンタ値を差し引いた差分値を算出する。そして、累積回数出力部３３０−１は、算出した差分値を、累積発生回数記録部２００−１において中央処理装置１０００−１に対応して記録されている累積発生回数に加算して外部に出力する。
【００３７】
また、好ましくは、累積回数出力部３３０−１は、中央処理装置によりユーザプログラムの実行が終了されてから、当該中央処理装置により他のユーザプログラムの実行が開始されるまでの間に発生が予想されるイベントの、予め定められた予想発生回数を、実行開始時予想発生回数格納部２５から取得する。そして、累積回数出力部３３０−１は、差分値を加算した上記累積発生回数から、更に、取得した予想発生回数を差し引いた値を出力する。これにより、スレッドの実行初期化処理中に発生したイベント発生回数を除外し、ユーザプログラム実行中にのみ発生したイベントの回数を算出できる。
なお、中央処理装置１０００−２の構成は、スレッド２を実行し、スレッド２に対応する各部材として機能する事項の他は、中央処理装置１０００−１と略同一であるので説明を省略する。
【００３８】
図４は、イベントの累積発生回数を更新し、又は、現在の累積発生回数を出力する処理の一例を説明する図である。（ａ）は、中央処理装置１０００−１がスレッド１を実行し、かつ、中央処理装置１０００−２がスレッド２を実行している場合における、ＲＡＭ１０２０内のデータ、発生回数カウンタ１００５−１のカウンタ値、及び、発生回数カウンタ１００５−２のカウンタ値を示す。
【００３９】
累積回数更新部３１０は、中央処理装置１０００−１がスレッド１の実行を開始する時に、その開始の時点における発生回数カウンタ１００５−１のカウンタ値を取得して、開始時回数記録部２１０−１に記録させる（Ｓ４００）。記録させたカウンタ値を１２３１とする。また、累積回数更新部３１０は、スレッド１を実行している中央処理装置１０００−１を識別する情報を中央処理装置識別情報記録部２２０−１に記録させる。記録させた情報を１とする。
【００４０】
その後、中央処理装置１０００−１がスレッド１を実行中にイベントが発生し、発生回数カウンタ１００５−１はカウンタ値として１４２２を保持している。この時点におけるイベントの発生回数を求めるべく、まず、実行中央処理装置判断部３００−１は、スレッド１を実行している中央処理装置を判断する（Ｓ４１０）。例えば、実行中央処理装置判断部３００−１は、中央処理装置識別情報記録部２２０−１に１が記録されているので、スレッド１が中央処理装置１０００−１により実行されていると判断する。
【００４１】
次に、累積回数出力部３３０−１は、発生回数カウンタ１００５−１のカウンタ値から、開始時回数記録部２１０−１に記録されているカウンタ値を差し引いた差分値を算出する。即ち例えば、１４２２−１２３１により、１９１が算出される。そして、累積回数出力部３３０−１は、算出した差分値を、スレッド１を実行中の中央処理装置に対応して累積発生回数記録部２００−１に記録されている累積発生回数に加算して外部に出力する。
【００４２】
即ち、累積回数出力部３３０−１は、スレッド１を実行している中央処理装置は中央処理装置１０００−１であるので、中央処理装置１０００−１に対応する２１７に、差分値である１９１を加えて、４０８を出力する。一方、中央処理装置１０００−２は、スレッド１を実行中ではないので、累積回数出力部３３０−１は、中央処理装置１０００−２に対応して累積発生回数記録部２００−１に記録されている累積発生回数（即ち４２２）を取得してそのまま出力する。
【００４３】
また、以上の処理に代えて、累積回数更新部３１０は、中央処理装置１０００−１がスレッド１の実行を開始する場合に、スレッド１の累積発生回数記録部２００−１において中央処理装置１０００−１に対応して記録されている累積発生回数から、スレッド１の中央処理装置識別情報記録部２２０−１に記録されたカウンタ値を差し引いた差分値を予め算出しておいてもよい。例えば、累積回数更新部３１０は、算出したその差分値を、累積発生回数記録部２００−１の当該中央処理装置に対応する値として記録しておく。この場合、開始時回数記録部２１０−１は不要となる。
【００４４】
そしてこの場合、累積回数出力部３３０−１は、中央処理装置１０００−１がスレッド１を実行中において、累積発生回数を算出する必要が生じた場合に、予め算出しておいた当該差分値に、発生回数カウンタ１００５−１のカウンタ値を加算して出力する。これにより、ユーザレベルのスレッドによる処理を削減でき、累積発生回数を算出する必要が生じてから累積発生回数を出力するまでの所要時間を短縮することができる。
【００４５】
スレッド１における処理と同様に、実行中央処理装置判断部３００−２は、スレッド２を実行している中央処理装置を判断する（Ｓ４１５）。例えば、実行中央処理装置判断部３００−２は、中央処理装置識別情報記録部２２０−２に２が記録されているので、スレッド２が中央処理装置１０００−２により実行されていると判断する。
【００４６】
次に、累積回数出力部３３０−２は、発生回数カウンタ１００５−２のカウンタ値から、開始時回数記録部２１０−２に記録されているカウンタ値を差し引いた差分値を算出する。即ち例えば、２００４−１９８７により、１７が算出される。そして、累積回数出力部３３０−２は、算出した差分値を、スレッド２を実行中の中央処理装置に対応して累積発生回数記録部２００−２に記録されている累積発生回数に加算して外部に出力する。
【００４７】
即ち、累積回数出力部３３０−２は、スレッド２を実行している中央処理装置は中央処理装置１０００−２であるので、中央処理装置１０００−２に対応する８１０に、差分値である１７を加えて、８２７を出力する。一方、中央処理装置１０００−１は、スレッド２を実行中ではないので、累積回数出力部３３０−２は、中央処理装置１０００−１に対応して累積発生回数記録部２００−２に記録されている累積発生回数（即ち４０１）を取得してそのまま出力する。
【００４８】
（ｂ）は、中央処理装置１０００−１がスレッド１の実行を終了し、スレッド３の実行を開始した場合、即ちスレッド１がプリエンプトされスレッド３がディスパッチされた場合における、ＲＡＭ１０２０内のデータ、発生回数カウンタ１００５−１のカウンタ値、及び、発生回数カウンタ１００５−２のカウンタ値を示す。この時点における発生回数カウンタ１００５−１のカウンタ値は、１５２０である。
【００４９】
累積回数更新部３１０は、中央処理装置１０００−１がスレッド１の実行を終了するので、その終了時点における発生回数カウンタ１００５−１のカウンタ値から、開始時回数記録部２１０−１に記録されていたカウンタ値を差し引いた差分値を算出する（Ｓ４２０）。この結果、１５２０−１２３１により２８９が算出される。そして、累積回数更新部３１０は、算出したその差分値を、累積発生回数記録部２００−１に中央処理装置１０００−１に対応付けて記録されている累積発生回数に加える。この結果、２８９＋２１７により５０６が算出される。
【００５０】
一方、中央処理装置１０００−１がスレッド３の実行を開始するので、累積回数更新部３１０は、その開始の時点における発生回数カウンタ１００５−１のカウンタ値を取得して、開始時回数記録部２１０−３に記録させる（Ｓ４３０）。記録させるカウンタ値は１５２０である。また、累積回数更新部３１０は、スレッド３を実行している中央処理装置１０００−１を識別する情報を中央処理装置識別情報記録部２２０−３に記録させる。記録させる情報は１である。
【００５１】
このように、本実施例によれば、スレッドをディスパッチする毎に、それまでに発生したイベントの累積発生回数を算出し、ユーザモードでアクセス可能な記憶領域に記録する。そして、累積発生回数を算出する必要が生じた場合には、ディスパッチ後に生じたイベントの発生回数により、記録されている累積発生回数の値を補正して出力する。これにより、スレッドのイベントの累積発生回数をユーザーモードで適切に求めることができる。
【００５２】
なお、本実施例のバリエーションとして、累積回数記録部は、各々の中央処理装置に対応付けて、対応するスレッド１をその中央処理装置で実行していた時に発生したイベントの、クロックサイクル数あたりの発生回数を記録してもよい。一例として、クロックサイクル数あたりのキャッシュミス回数、即ちキャッシュミス頻度を記録してもよい。
【００５３】
この場合、中央処理装置がスレッドの実行を終了する場合に、まず、累積回数更新部は、当該中央処理装置の発生回数カウンタのカウンタ値から、当該スレッドの開始時回数記録部に記録されているカウンタ値を差し引いた差分値を算出する。そして、累積回数更新部は、その差分値を、当該中央処理装置の動作周波数に基づく値で除算した値を、当該スレッドの累積回数記録部に当該中央処理装置に対応して記録されている累積発生回数に加える。これにより、動作周波数を変更可能な中央処理装置においても、動作周波数の変動の影響を除外して、イベントの発生回数を求めることができる。
【００５４】
続いて、いわゆるＭ：Ｎスレッディングにおけるユーザスレッドについて、各ユーザスレッドを実行中に発生したイベントの発生回数を求める方法を、本実施例の変形例として示す。ここで、Ｍ：Ｎスレッディングとは、オペレーティングシステムのカーネルが提供するＮ個のスレッド（以降、スケジューリングスレッドと呼ぶ）により、他のＭ個のスレッド（以降、ユーザスレッドと呼ぶ）をスケジューリングさせるスケジューリング方法をいう。
【００５５】
本変形例では、図１から図４において説明した各スレッドをスケジューリングスレッドとし、各スケジューリングスレッドが複数のユーザスレッドの何れかを実行することによりユーザレベルスケジューリングを行う処理について説明する。以降の説明で、スケジューリングスレッドの数を２個とし、ユーザスレッドの数を３個とする。
【００５６】
図５は、本実施例の変形例におけるＲＡＭ１０２０のデータ構造の一例を示す。本変形例において、ＲＡＭ１０２０は、図２に示す構成に加えて更に、ユーザスレッド用記憶領域２２−１と、ユーザスレッド用記憶領域２２−２と、ユーザスレッド用記憶領域２２−３とを含む。ユーザスレッド用記憶領域２２−１は、ユーザスレッド１に対応して設けられ、ユーザスレッド１がユーザモードでアクセス可能な領域である。ユーザスレッド用記憶領域２２−２は、ユーザスレッド２に対応して設けられ、ユーザスレッド２がユーザモードでアクセス可能な領域である。ユーザスレッド用記憶領域２２−３は、ユーザスレッド３に対応して設けられ、ユーザスレッド３がユーザモードでアクセス可能な領域である。
【００５７】
ユーザスレッド用記憶領域２２−１内には、ユーザスレッド用累積回数記録部５００−１と、ユーザスレッド用開始時回数記録部５１０−１と、スケジューリングスレッド識別情報記録部５２０−１とが設けられている。ユーザスレッド用累積回数記録部５００−１は、ユーザスレッド１に対応してユーザスレッド用記憶領域２２−１内に設けられ、各々の中央処理装置、及び、各々のスケジューリングスレッドに対応付けて、ユーザスレッド１をその中央処理装置及びそのスケジューリングスレッドで実行していた時に発生したイベントの累積発生回数を記録する。
【００５８】
ユーザスレッド用開始時回数記録部５１０−１は、ユーザスレッド１に対応してユーザスレッド１のスレッド用記憶領域に設けられている。そして、ユーザスレッド用開始時回数記録部５１０−１は、ユーザスレッド１を実行中のスケジューリングスレッドがユーザスレッド１の実行を開始した時点における、そのスケジューリングスレッドについて累積回数出力部により出力させた累積発生回数を記録する。スケジューリングスレッド識別情報記録部５２０−１は、ユーザスレッド１の実行中において、ユーザスレッド１を実行しているスケジューリングスレッドを識別する識別情報を記録する。
【００５９】
ユーザスレッド用記憶領域２２−２内には、ユーザスレッド用累積回数記録部５００−２と、ユーザスレッド用開始時回数記録部５１０−２と、スケジューリングスレッド識別情報記録部５２０−２とが設けられている。ユーザスレッド用累積回数記録部５００−２、ユーザスレッド用開始時回数記録部５１０−２、及び、スケジューリングスレッド識別情報記録部５２０−２の各々は、ユーザスレッド１に代えてユーザスレッド２に対応付けられている事項の他は、ユーザスレッド用累積回数記録部５００−１、ユーザスレッド用開始時回数記録部５１０−１、及び、スケジューリングスレッド識別情報記録部５２０−１の各々と略同一であるので説明を省略する。
【００６０】
また、ユーザスレッド用記憶領域２２−３内には、ユーザスレッド用累積回数記録部５００−３と、ユーザスレッド用開始時回数記録部５１０−３と、スケジューリングスレッド識別情報記録部５２０−３とが設けられている。ユーザスレッド用累積回数記録部５００−３、ユーザスレッド用開始時回数記録部５１０−３、及び、スケジューリングスレッド識別情報記録部５２０−３の各々は、ユーザスレッド１に代えてユーザスレッド３に対応付けられている事項の他は、ユーザスレッド用累積回数記録部５００−１、ユーザスレッド用開始時回数記録部５１０−１、及び、スケジューリングスレッド識別情報記録部５２０−１の各々と略同一であるので説明を省略する。
【００６１】
図６は、本実施例の変形例において、中央処理装置１０００−１が実行するプログラムの機能を機能ブロックに分類して示す。本変形例において、中央処理装置１０００−１は、図３と同様に、オペレーティングシステム３２を実行し、また、スケジューリングスレッド１を実行する。そして、更に、中央処理装置１０００−１は、スケジューリングスレッド１によりユーザスレッド１を実行する。
【００６２】
スケジューリングスレッド１は、実行中央処理装置判断部３００−１及び累積回数出力部３３０−１に加えて、更に、ユーザスレッド用累積回数更新部６００−１を有する。ユーザスレッド用累積回数更新部６００−１は、スケジューリングスレッド１がユーザスレッド１の実行を開始する時に、スケジューリングスレッド１の累積回数出力部３３０−１から、中央処理装置毎の累積発生回数を取得して、ユーザスレッド用開始時回数記録部５１０−１に記録させる。また、ユーザスレッド用累積回数更新部６００−１は、ユーザスレッド１を実行しているスケジューリングスレッド１を識別する情報をスケジューリングスレッド識別情報記録部５２０−１に記録させる。
【００６３】
そして、ユーザスレッド用累積回数更新部６００−１は、スケジューリングスレッド１がユーザスレッド１の実行を終了する場合に、スケジューリングスレッドについての中央処理装置毎の累積発生回数を累積回数出力部３３０−１により算出させる。そして、ユーザスレッド用累積回数更新部６００−１は、算出させた中央処理装置毎の累積発生回数から、ユーザスレッド用開始時回数記録部５１０−１において、スケジューリングスレッド１を実行中の中央処理装置１０００−１に対応して記録された累積発生回数を差し引いた差分値を中央処理装置毎に算出する。そして、ユーザスレッド用累積回数更新部６００−１は、算出したその差分値を、ユーザスレッド１のユーザスレッド用累積回数記録部５００−１にスケジューリングスレッド１に対応付けて記録された累積発生回数に加える。
【００６４】
実行スケジューリングスレッド判断部６２０−１は、スケジューリングスレッド識別情報記録部５２０−１から取得した識別情報に基づいて、ユーザスレッド１を実行しているスケジューリングスレッドを判断する。ユーザスレッド用累積回数出力部６１０−１は、ユーザスレッド１に対応して設けられる。そして、ユーザスレッド用累積回数出力部６１０−１は、ユーザスレッド１を実行中のスケジューリングスレッド１について累積回数出力部３３０−１により累積発生回数を算出させ出力させる。
【００６５】
そして、ユーザスレッド用累積回数出力部６１０−１は、出力させた累積発生回数から、ユーザスレッド１のユーザスレッド用開始時回数記録部５１０−１において、スケジューリングスレッド１に対応して記録された累積発生回数を差し引いた中央処理装置毎の差分値を算出する。そして、ユーザスレッド用累積回数出力部６１０−１は、算出した中央処理装置毎の差分値を、ユーザスレッド１のユーザスレッド用累積回数記録部５００−１にスケジューリングスレッド１に対応付けて記録された累積発生回数に加えて出力する。
なお、中央処理装置１０００−２の構成は、スレッド２を実行し、スレッド２に対応する各部材として機能する事項の他は、中央処理装置１０００−１と略同一であるので説明を省略する。
【００６６】
図７は、本実施例の変形例において、現在の累積発生回数を出力する処理の一例を説明する図である。ユーザスレッド用累積回数更新部６００−１は、スケジューリングスレッド１がユーザスレッド１の実行を開始する時に、スケジューリングスレッド１の累積回数出力部３３０−１から、中央処理装置毎の累積発生回数を取得して、ユーザスレッド用開始時回数記録部５１０−１に記録させる（Ｓ７００）。また、ユーザスレッド用累積回数更新部６００−１は、ユーザスレッド１を実行しているスケジューリングスレッド１を識別する情報をスケジューリングスレッド識別情報記録部５２０−１に記録させる。
【００６７】
ユーザスレッド用累積回数出力部６１０−１は、ユーザスレッド１の実行中に、ユーザスレッド１についての累積発生回数を算出するべく、以下の処理を行う。まず、ユーザスレッド用累積回数出力部６１０−１は、ユーザスレッド１を実行中のスケジューリングスレッド１について累積回数出力部３３０−１により累積発生回数を算出させ出力させる（Ｓ７１０）。この結果、中央処理装置１０００−１に対応付けて、１４２２−１２３１＋２１７が計算され、４０８が算出される。一方、中央処理装置１０００−２に対応付けて、累積発生回数記録部２００−１から４２２が読み出され、そのまま出力される。
【００６８】
そして、ユーザスレッド用累積回数出力部６１０−１は、出力させた累積発生回数から、ユーザスレッド１のユーザスレッド用開始時回数記録部５１０−１において、スケジューリングスレッド１に対応して記録された累積発生回数を差し引いた中央処理装置毎の差分値を算出する（Ｓ７２０）。即ち、中央処理装置１０００−１については、４０８−３１４が計算され、９４が算出される。一方、中央処理装置１０００−２については、４２２−４０９が計算され、１３が算出される。
【００６９】
そして、ユーザスレッド用累積回数出力部６１０−１は、算出した中央処理装置毎の差分値を、ユーザスレッド１のユーザスレッド用累積回数記録部５００−１にスケジューリングスレッド１に対応付けて記録された累積回数に加えて出力する。即ち、中央処理装置１０００−１については、９４＋５５が計算され、１４９が算出される。また、中央処理装置１０００−２については、１３＋４６が計算され、５９が算出される。
【００７０】
一方、ユーザスレッド用累積回数出力部６１０−１は、スケジューリングスレッド２はユーザスレッド１を実行していないので、スケジューリングスレッド２及び中央処理装置１０００−１に対応する発生回数を、ユーザスレッド用累積回数記録部５００−１から読み出してそのまま出力する（即ち８を出力する）。同様に、ユーザスレッド用累積回数出力部６１０−１は、スケジューリングスレッド２及び中央処理装置１０００−２に対応する発生回数を、ユーザスレッド用累積回数記録部５００−１から読み出してそのまま出力する（即ち１１を出力する）。
【００７１】
以上、本図に示すように、Ｍ：Ｎスレッディングを採用したシステムにおいては、スケジューリングスレッドのみならずユーザスレッドについても、中央処理装置毎かつスケジューリングスレッド毎のイベントの発生回数を正確に求めることができる。
【００７２】
以上、本実施例及び変形例に示したように、オペレーティングシステム又はスケジューリングスレッドは、スレッドのディスパッチ時に、イベント発生回数の算出に必要な情報を、ユーザモードでアクセス可能な領域に書き出す。この結果、ユーザレベルスレッドは、オペレーティングシステムの機能を呼び出すことなく、イベントの発生回数を正確に算出することができる。
【００７３】
これにより、レイテンシの高いシステムコールを用いる必要が無いので、イベント発生回数を迅速に求めることができる。この結果、プログラムの広範な実行位置でイベントの発生回数を求めたとしてもオーバヘッドが小さいので、プログラムの挙動を効果的かつ効率的に解析することができる。一例として、Ｗｅｂアプリケーションのような、ホットスポットの存在しない大規模プログラムの挙動解析と性能向上に非常に効果的である。
【００７４】
更に、本実施例及び変形例によれば、イベントの発生回数を、スレッド毎のみならず、中央処理装置毎に求めることができる。これにより、中央処理装置毎のクロックサイクルが非同期の場合や、中央処理装置毎に性能が異なる場合、例えば、中央処理装置によってメモリに対するアクセス速度が異なる場合であっても、中央処理装置毎に独立して発生回数を積算でき、有為なデータを得ることができる。
【００７５】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。例えば、本実施例においては、各スレッドの中央処理装置毎のクロックサイクル数等を求めているが、これを更に再分化して、ユーザレベルにおける処理及びカーネルレベルにおける処理に分類して求めてもよい。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００７６】
【図１】図１は、情報処理装置１０の全体構成を示す。
【図２】図２は、ＲＡＭ１０２０がスレッド用記憶領域に格納するデータ構造の一例を示す。
【図３】図３は、中央処理装置１０００−１が実行するプログラムの機能を機能ブロックに分類して示す。
【図４】図４は、イベントの累積発生回数を更新し、又は、現在の累積発生回数を出力する処理の一例を説明する図である。
【図５】図５は、本実施例の変形例におけるＲＡＭ１０２０のデータ構造の一例を示す。
【図６】図６は、本実施例の変形例において、中央処理装置１０００−１が実行するプログラムの機能を機能ブロックに分類して示す。
【図７】図７は、本実施例の変形例において、現在の累積発生回数を出力する処理の一例を説明する図である。
【符号の説明】
【００７７】
１０  情報処理装置
２０  スレッド用記憶領域
２２  ユーザスレッド用記憶領域
２５  実行開始時予想発生回数格納部
３２  オペレーティングシステム
２００  累積発生回数記録部
２１０  開始時回数記録部
２２０  中央処理装置識別情報記録部
３００  実行中央処理装置判断部
３１０  累積回数更新部
３２０  割込処理中イベント回数取得部
３３０  累積回数出力部
５００  ユーザスレッド用累積回数記録部
５１０  ユーザスレッド用開始時回数記録部
５２０  スケジューリングスレッド識別情報記録部
６００  ユーザスレッド用累積回数更新部
６１０  ユーザスレッド用累積回数出力部
６２０  実行スケジューリングスレッド判断部
１０００  中央処理装置
１００５  発生回数カウンタ
１０２０  ＲＡＭ
【図１】
2006134170.tif 000003
【図２】
2006134170.tif 000004
【図３】
2006134170.tif 000005
【図４】
2006134170.tif 000006
【図５】
2006134170.tif 000007
【図６】
2006134170.tif 000008
【図７】
2006134170.tif 000009