(57)【特許請求の範囲】
【請求項１】
コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティ記録システムであって、
前記コンピュータ・システムのプロセッサにおける実行を停止したソフトウェア・スレッドの同期状態を示す同期状態指示を記録するためのスレッド状態インジケータであって、前記同期状態指示が前記ソフトウェア・スレッドの識別に関連付けられている、スレッド状態インジケータと、
アイドルである前記コンピュータ・システムのプロセッサを識別し、前記プロセッサがアイドルであることの指示を記録するためのタイム・プロファイラと、
前記プロセッサに対する前記ソフトウェア・スレッドのディスパッチを識別し、前記プロセッサがアイドルであるという前記指示および前記ソフトウェア・スレッドの前記同期状態指示に応答して、前記プロセッサのアイドル状態の原因を前記ソフトウェア・スレッドおよび前記ソフトウェア・スレッドの前記同期状態であると見なすレコードを発生するためのディスパッチ・モニターと、
を含む、アクティビティ記録システム。
【請求項２】
前記タイム・プロファイラが更に、前記プロセッサのアイドル期間を、前記プロセッサが連続的にアイドルである期間として識別するように動作可能であり、前記アイドル状態の原因を示す前記レコードが、前記プロセッサの前記アイドル期間の原因を前記ソフトウェア・スレッドおよび前記指示された同期状態であると見なす、請求項１に記載のアクティビティ記録システム。
【請求項３】
前記プロセッサが実行するためにディスパッチされたソフトウェア・スレッドを有しないと判定することによって前記プロセッサがアイドルであると判定される、請求項２に記載のアクティビティ記録システム。
【請求項４】
前記タイム・プロファイラが測定した前記スレッドが特定の同期状態にあった一定間隔の割合を計算するための計算コンポーネントを更に含む、請求項３に記載のアクティビティ記録システム。
【請求項５】
前記スレッド状態インジケータが、前記同期状態指示であって、
前記ソフトウェア・スレッドが前記並行ソフトウェア環境において同期を達成するための排他的構造を獲得することを阻止される前記ソフトウェア・スレッドの「ブロック」状態の指示と、
前記ソフトウェア・スレッドが異なるソフトウェア・スレッドによって処理が引き受けられるのを待つ前記ソフトウェア・スレッドの「待機」状態の指示と、
前記ソフトウェア・スレッドが前記コンピュータ・システムのプロセッサにおける実行の準備ができている前記ソフトウェア・スレッドの「動作可能」状態の指示と、
ソフトウェア・スレッドの同期を取っていない状態の指示と、
を含む前記同期状態指示を記録するように動作可能である、請求項３に記載のアクティビティ記録システム。
【請求項６】
ソフトウェア・スレッドの同期状態の前記指示が、前記ソフトウェア・スレッドがアクセスすることを求めた共有リソースの識別子を更に含む、請求項５に記載のアクティビティ記録システム。
【請求項７】
共有リソースの前記識別子に関連付けられたシンボリック名を決定するためのリゾルバを更に含む、請求項６に記載のアクティビティ記録システム。
【請求項８】
前記タイム・プロファイラが更に、ソフトウェア・ルーチンがソフトウェア環境のルーチンのサービス・ライブラリに含まれていることを判定するように構成され、前記判定に応答して、前記ソフトウェア・ルーチンのための呼び出し側ルーチンを識別するように構成されている、請求項７に記載のアクティビティ記録システム。
【請求項９】
前記タイム・プロファイラが、前記リゾルバおよびソフトウェア・コール・スタックの１つ以上を用いて前記呼び出し側ルーチンを識別する、請求項８に記載のアクティビティ記録システム。
【請求項１０】
前記ソフトウェア・スレッドの前記同期状態が、前記ソフトウェア・スレッド自体および前記並行ソフトウェア環境の１つ以上によって決定される、請求項３に記載のアクティビティ記録システム。
【請求項１１】
前記排他的構造がロックおよびモニターのうちの１つである、請求項５に記載のアクティビティ記録システム。
【請求項１２】
前記共有リソースがソフトウェア・オブジェクトである、請求項６に記載のアクティビティ記録システム。
【請求項１３】
前記タイム・プロファイラが更に、一定間隔で前記コンピュータ・システムの前記プロセッサのプログラム・カウンタの値をポーリングするように動作可能であり、前記タイム・プロファイラが、前記プロセッサがアイドルである一定間隔の数をカウントすることによって前記アイドル期間を識別する、請求項３に記載のアクティビティ記録システム。
【請求項１４】
前記プロセッサがアイドルであるという前記指示が、前記プロセッサがアイドルである一定間隔の数のカウント数を含む、請求項１３に記載のアクティビティ記録システム。
【請求項１５】
コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティを記録するための方法であって、
スレッド状態インジケータが、前記コンピュータ・システムのプロセッサにおける実行を停止したソフトウェア・スレッドの同期状態を示す同期状態指示を記録し、前記同期状態指示が前記ソフトウェア・スレッドの識別に関連付けられている、ステップと、
タイム・プロファイラが、アイドルである前記コンピュータ・システムのプロセッサを識別し、前記プロセッサがアイドルであることの指示を記録し、ディスパッチ・モニターが、前記プロセッサに対する前記ソフトウェア・スレッドのディスパッチを識別するステップと、
前記プロセッサがアイドルであるという前記指示および前記ソフトウェア・スレッドの前記同期状態指示に応答して、前記ディスパッチ・モニターが、前記プロセッサのアイドル状態の原因を前記ソフトウェア・スレッドおよび前記ソフトウェア・スレッドの前記同期状態であると見なすレコードを発生するステップと、
を含む、方法。
【請求項１６】
コンピュータ・プログラムであって、請求項１５に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並行ソフトウェア環境（concurrent software environment）のためのアクティビティ記録に関する。具体的には、本発明は、並行ソフトウェア環境におけるスレッドの同期状態に関連した情報の記録に関する。
【背景技術】
【０００２】
コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境では、１つ以上の同期機構を用いて、共有リソースに対する制御されたアクセスを保証して共有リソースの同時使用を回避する。例えば、相互排他（mutual exclusion（mutex））アルゴリズム、ソフトウェア・ロック、同期モニター、セマフォ（semaphore）、または当技術分野において既知の他の同期機構を用いて、並行ソフトウェア環境において実行されるソフトウェア方法の同期を取ることができる。
【０００３】
Ｊａｖａ（Ｊａｖａはオラクル・コーポレーションの商標である）等の並行ソフトウェア環境で動作するマルチスレッド・アプリケーションの高いスケーラビリティは、同期を取った共有リソースにアクセスするために競合として現れる問題を軽減するかまたはそれに対処することによってスケーラビリティ向上の機会を与えるソフトウェア・コードの領域を見つけるための良好なツールに依存する。かかるソフトウェア・コード領域の識別は、共有リソースを共有するソフトウェア・スレッド間の競合等の同期イベントの発生を測定するための機能（facility）によって支援される。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、同期イベントを測定するためのソフトウェア・コードの器具使用には問題がある。競合はツールのオーバーヘッドに対して極めて敏感である。これは、監視および測定ツールの実行そのものが、並行ソフトウェア環境で動作するソフトウェアの同期ダイナミクスに影響を及ぼすからである。
【０００５】
Java LockMonitor（ＪＬＭ）（perfinsp.sourceforge.net/jlm.htmlを参照のこと）または「IBM Monitoring and Diagnostic Tools forJava-Health Centre」（publib.boulder.ibm.com/infocenter/hctool/v1r0/index.jspを参照のこと）等の今日のツールは、同期を取ったリソース・ベースでＪａｖａ環境における競合発生率の監視および報告を行う。しかしながら、これらのツールは、競合を経験している特定のソフトウェア方法等、競合時のソフトウェア・スレッドの状態に関する情報を提供することができない。このため、かかるツールを用いて、アプリケーションにおけるどのソフトウェア方法が競合発生の原因であるかを判定することは簡単ではない。
【０００６】
更に、ソフトウェア・スレッドで実行されているソフトウェア方法が特定の競合状態等の特定の同期状態にある時間長を測定するツールは、展開および維持が難しい。並行ソフトウェア環境の性質のために、同期機構の一部としてソフトウェア・スレッドに割込をかけて再開する傾向があるので、複雑な測定論理により、特定の同期状態、特定のソフトウェア方法、および特定のソフトウェア・スレッドに対する時間期間の適切な割り当てを決定する必要がある。
【０００７】
従って、並行ソフトウェアのスケーラビリティを向上させるために、並行ソフトウェア環境においてスレッドのアクティビティを記録して同期挙動の分析を支援することが有利であろう。
【課題を解決するための手段】
【０００８】
従って、本発明は第１の態様で、コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティ記録システムを提供する。このアクティビティ記録システムは、コンピュータ・システムのプロセッサにおける実行を停止したソフトウェア・スレッドの同期状態指示を記録するためのスレッド状態インジケータであって、指示がソフトウェア・スレッドの識別に関連付けられている、スレッド状態インジケータと、アイドルであるコンピュータ・システムのプロセッサを識別し、プロセッサがアイドルであることの指示を記録するためのタイム・プロファイラと、プロセッサに対するソフトウェア・スレッドのディスパッチを識別し、プロセッサがアイドルであるという指示およびソフトウェア・スレッドの同期状態指示に応答して、プロセッサのアイドル状態の原因をソフトウェア・スレッドおよび指示された同期状態であると見なすレコードを発生するためのディスパッチ・モニターと、を含む。
【０００９】
好ましくは、タイム・プロファイラは更に、プロセッサのアイドル期間を、プロセッサが連続的にアイドルである期間として識別するように動作可能であり、アイドル状態の原因を示すレコードは、プロセッサのアイドル期間の原因をソフトウェア・スレッドおよび指示された同期状態であると見なす。
【００１０】
好ましくは、プロセッサが実行するためにディスパッチされたソフトウェア・スレッドを有しないと判定することによって、プロセッサはアイドルであると判定される。
【００１１】
好ましくは、アクティビティ記録システムは、スレッドが指示された状態にあった時間の割合を計算するための計算コンポーネントを更に含む。
【００１２】
好ましくは、スレッド状態インジケータは、ソフトウェア・スレッドが並行ソフトウェア環境において同期を達成するための排他的構造を獲得することを阻止されるソフトウェア・スレッドの「ブロック」状態の指示と、ソフトウェア・スレッドが異なるソフトウェア・スレッドによって処理が引き受けられるのを待つソフトウェア・スレッドの「待機」状態の指示と、ソフトウェア・スレッドがコンピュータ・システムのプロセッサにおける実行の準備ができているソフトウェア・スレッドの「動作可能」状態の指示と、ソフトウェア・スレッドの同期を取っていない状態の指示と、を記録するように動作可能である。
【００１３】
好ましくは、ソフトウェア・スレッドの同期状態指示は、ソフトウェア・スレッドがアクセスすることを求めた共有リソースの識別子を更に含む。
【００１４】
好ましくは、アクティビティ記録システムは、共有リソースの識別子に関連付けられたシンボリック名を決定するためのリゾルバを更に含む。
【００１５】
好ましくは、タイム・プロファイラは更に、ソフトウェア・ルーチンがソフトウェア環境のルーチンのサービス・ライブラリに含まれていることを判定するように構成され、この判定に応答して、ソフトウェア・ルーチンのための呼び出し側ルーチンを識別するように構成されている。
【００１６】
好ましくは、タイム・プロファイラは、リゾルバおよびソフトウェア・コール・スタックの１つ以上を用いて呼び出し側ルーチンを識別する。
【００１７】
好ましくは、ソフトウェア・スレッドの同期状態は、ソフトウェア・スレッド自体および並行ソフトウェア環境の１つ以上によって決定される。
【００１８】
好ましくは、排他的構造はロックおよびモニターのうちの１つである。
【００１９】
好ましくは、共有リソースはソフトウェア・オブジェクトである。
【００２０】
好ましくは、タイム・プロファイラは更に、一定間隔でコンピュータ・システムのプロセッサのプログラム・カウンタの値をポーリングするように動作可能であり、タイム・プロファイラは、プロセッサがアイドルである一定間隔の数をカウントすることによってアイドル期間を識別する。
【００２１】
好ましくは、プロセッサがアイドルであるという指示は、プロセッサがアイドルである一定間隔の数のカウント数を含む。
【００２２】
従って、本発明は第２の態様で、コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティを記録するための方法を提供する。この方法は、スレッド状態インジケータが、コンピュータ・システムのプロセッサにおける実行を停止したソフトウェア・スレッドの同期状態指示を記録し、この指示がソフトウェア・スレッドの識別に関連付けられている、ステップと、タイム・プロファイラが、アイドルであるコンピュータ・システムのプロセッサを識別し、プロセッサがアイドルであることの指示を記録し、ディスパッチ・モニターが、プロセッサに対するソフトウェア・スレッドのディスパッチを識別するステップと、プロセッサがアイドルであるという指示およびソフトウェア・スレッドの同期状態指示に応答して、ディスパッチ・モニターが、プロセッサのアイドル状態の原因をソフトウェア・スレッドおよび指示された同期状態であると見なすレコードを発生するステップと、を含む。
【００２３】
従って、本発明は第３の態様において、中央処理装置、メモリ・サブシステム、入出力サブシステム、およびバス・サブシステムを含む装置を提供する。このバス・サブシステムは、中央処理装置、メモリ・サブシステム、入出力サブシステム、および上述のような装置を相互接続する。
【００２４】
従って、本発明は第４の態様において、コンピュータ・システムにロードされてそこで実行された場合に上述したような方法のステップをコンピュータに実行させるコンピュータ・プログラム・コードを含むコンピュータ・プログラム要素を提供する。
【００２５】
添付図面を参照して、一例としてのみ、本発明の好適な実施形態について以下で更に詳細に説明する。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施形態の動作に適したコンピュータ・システムのブロック図である。
【図２】本発明の好適な実施形態に従ったコンピュータ・システムにおいて実施されるアクティビティ記録システムの構成を示す。
【図３】本発明の好適な実施形態に従った、コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティを記録するための方法のフローチャートである。
【図４】本発明の好適な実施形態に従ったコンピュータ・システムにおいて実施されるアクティビティ記録システムの高度化した構成を示す。
【図５】本発明の好適な実施形態に従った、コンピュータ・システムにおいてソフトウェア・スレッドを実行する並行ソフトウェア環境のためのアクティビティを記録するための高度化した方法のフローチャートである。
【発明を実施するための形態】
【００２７】
図１は、本発明の実施形態の動作に適したコンピュータ・システムのブロック図である。中央処理装置（ＣＰＵ）１０２は、データ・バス１０８を介して記憶装置１０４および入出力（Ｉ／Ｏ）インタフェース１０６に通信可能に接続されている。記憶装置１０４は、ランダム・アクセス・メモリ（ＲＡＭ）または不揮発性記憶デバイス等のいずれかの読み取り／書き込み記憶デバイスとすることができる。不揮発性記憶デバイスの一例はディスクまたはテープ記憶デバイスを含む。Ｉ／Ｏインタフェース１０６は、データの入力もしくは出力のための、またはデータの入力および出力の双方のための、デバイスに対するインタフェースである。Ｉ／Ｏインタフェースに接続可能なＩ／Ｏデバイスの例は、キーボード、マウス、ディスプレイ（モニター等）、およびネットワーク接続を含む。
【００２８】
図２は、本発明の好適な実施形態に従ってコンピュータ・システム２００において実施されるアクティビティ記録システムの構成を示す。コンピュータ・システム２００は、命令を実行するために１つ以上のプロセッサ１０２を含む。コンピュータ・システム２００内の各プロセッサ１０２は、プロセッサ１０２が実行する命令シーケンスにおける現在位置を示す値を記憶するためのレジスタまたは他の適切な記憶装置としてのプログラム・カウンタ２０６を含む。プログラム・カウンタは、命令ポインタ、命令アドレス・レジスタ、または命令シーケンサとしても既知である。プログラム・カウンタ２０６は、プロセッサ１０２の特定の構成に応じて、現在実行されている命令のためのアドレスあるいは実行される次の命令のためのアドレスを保持することができる。
【００２９】
好ましくは、プロセッサ１０２は、マルチプロセッサ・コンピュータ・システムにおける多数の独立したプロセッサである。あるいは、プロセッサ１０２は、コンピュータ・システムのアレイ等、相互動作するコンピュータ・システムのネットワークにおいて組織化された別個のコンピューティング・システムとして構築することができる。かかるアレイにおける各システムは、図１を参照して先に概説したコンピュータ・システムの不可欠な特性（feature）をそれぞれ含むことができる。例えば、プロセッサ１０２は、ラック・コンピュータ構成、ブレード・サーバ、またはコンピュータ・システムの他の適切なアレイ内に構築することができる。別の代替案では、プロセッサ１０２は、プロセッサ・ユニットの別個の処理コア等、単一のプロセッサの別個の処理要素として構築することができる。また、１つ以上のプロセッサ１０２の実施形態において、ここで想定したプロセッサ構成の組み合わせも適している。
【００３０】
コンピュータ・システム２００は更に、不揮発性メモリ記憶装置等の記憶装置１０４を含む。記憶装置１０４はタイム・プロファイラ２１８を記憶している。タイム・プロファイラ２１８は、コンピュータ・システム２００においてプロセッサ１０２のためのプログラム・カウンタ２０６の値を記録するためのコンポーネントである。プログラム・カウンタ２０６の値は、記憶装置１０４、代替的なメモリ、またはコンピュータ・システム２００と関連付けられた他の記憶装置において、プロファイラ・レコード２２２として記憶される。
【００３１】
動作において、タイム・プロファイラ２１８は定期的にプロセッサ１０２の実行に割込をかけて（プロファイラの「ティック（tick）」として知られる）、プログラム・カウンタ２０６の値を記録した後に割込をかけた命令の実行を再開する。プログラム・カウンタ２０６の値は、プロファイラ割込（ティック）の時にプロセッサ１０２上で実行しているソフトウェア・スレッド２１０に対する命令シーケンス内の命令の記憶装置１０４内のアドレスに対応する。割込は一定間隔で行われるので、プログラム・カウンタ２０６の値はタイム・プロファイラ２１８によって一定間隔でポーリングされる。タイム・プロファイラ２１８は更に、コンピュータ・システム２００における多数のプロセッサのプログラム・カウンタの値を記録するように動作可能であり、これは、プログラム・カウンタ２０６の各値に対応するプロセッサの識別子のレコードを生成することを含む。
【００３２】
当業者には明らかであろうが、タイム・プロファイラ２１８は全体的に記憶装置１０４に記憶されたソフトウェアで実施することができる。例えばタイム・プロファイラ２１８は、ＩＢＭによって開発されperfinsp.sourceforge.net/tprof/htmlにおいて詳細が明らかである「ＴＰｒｏｆ」タイム・プロファイラ・ツール等のアプリケーション・ツールに基づくものとすることができる（ＩＢＭはインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である）。
【００３３】
あるいは、タイム・プロファイラ２１８は、全体的にハードウェアで、またはソフトウェアおよびハードウェアの双方の組み合わせで具現化して記憶装置１０４の外側で実施することができる。例えばタイム・プロファイラ２１８は、コンピュータ・システム２００の１つ以上のプロセッサ１０２と緊密に連携するオペレーティング・システムまたはカーネル機能等、コンピュータ・システム２００上で実行するソフトウェア・ルーチンとすることができる。あるいは、タイム・プロファイラ２１８は、特にプログラム・カウンタ２０６の値を記憶することを対象とするプロセッサ命令を用いることができる。別の代替案では、タイム・プロファイラ２１８は、「サンプリング・スレッド」として既知の、並行ソフトウェア環境２０８のための実行時（ＪＩＴ：Just In Time）コンパイラの機能とすることも可能である。
【００３４】
記憶装置１０４は更に並行ソフトウェア環境２０８を記憶している。並行ソフトウェア環境２０８は、ソフトウェアが同時並列の実行に適した１つ以上の計算プロセスの集合として設計された環境である。注意すべきことは、かかる同時並列実行に対する適性は、並行ソフトウェアが実際に並列に実行されることを必ずしも必要としないことである。並行ソフトウェア環境は、単一のプロセッサ１０２を用いて並列実行を模倣することができるか、または上述のプロセッサ１０２の構成のいずれかにおいて等で、多数のプロセッサ１０２を用いて真の並列実行を実施することができる。並行プログラムは、各計算プロセスの実行ステップをインターリーブすることによって単一プロセッサ上で順次実行することができ、またはネットワーク内で近くにあるかもしくは分散している場合があるプロセッサ１０２の集合の１つに各計算プロセスを割り当てることによって並列に実行することができる。かかる並行ソフトウェア環境の一例はＪａｖａ実行環境（Java Runtime Environment）である。
【００３５】
コンピュータ・システム２００における複数のソフトウェア・スレッド２１０は、並行ソフトウェア環境２０８において並行計算プロセスとして並行して実行される。例えば、ソフトウェア・スレッド２１０は、インスタンス化したＪａｖａオブジェクトに対して実行するソフトウェア方法を含むＪａｖａプログラムにおける実行スレッドである。
【００３６】
ソフトウェア・スレッド２１０は、各々が共有リソース２１６にアクセスするように動作可能である。共有リソース２１６は、ハードウェアもしくはソフトウェア・リソース、共有メモリ・エリアもしくは他の記憶装置、デバイス、プロセッサ、または他のいずれかのリソース等、並行ソフトウェア環境２０８においてスレッドによるアクセスに適したいずれかのリソースとすることができる。例えば、共有リソース２１６は、Ｊａｖａ環境において同期を取ったソフトウェア方法を含むＪａｖａオブジェクト等のＪａｖａオブジェクトとすることができる。
【００３７】
並行ソフトウェア環境２０８は、１つ以上の同期機構を用いて、共有リソース２１６に対する制御されたアクセスを保証して、多数のソフトウェア・スレッド２１０による共有リソース２１６の同時使用を回避する。
【００３８】
例えば、並行ソフトウェア環境２０８は、相互排他（mutex）アルゴリズム、ソフトウェア・ロック、同期モニター、セマフォ、または当技術分野において既知の他の同期機構を用いてソフトウェア・スレッド２１０の同期を取ることができる。かかる機構は、排他的構造（exclusionary construct）を用いて共有リソース２０６の同時使用を回避することができる。かかる同期機構において用いられる排他的構造は、ロック、モニター、およびセマフォを含むことができる。
【００３９】
例えば、共有リソース２１６として同期を取ったソフトウェア方法を有するソフトウェア・オブジェクトにアクセスするソフトウェア・スレッド２１０は、いかなる時点でもソフトウェア・オブジェクトに対するアクセスを単一のスレッドに限定するソフトウェア・モニターを用いて同期を取ることができる。排他的構造によって同期を取る環境で動作するスレッドを記述するために、様々な動作状態を用いることができる。
【００４０】
コンピュータ・システム２００で実行され、共有リソース２０６に対するアクセスを得ようとするソフトウェア・スレッド２１０は、共有リソース２１６に関連付けられた排他的構造を「獲得」しようとしていると言うことができる。同様に、共有リソース２１６に対する同期を取ったアクセスを現在行っているスレッド２１０は、共有リソース２１６に関連付けられた排他的構造を「保持している」と言うことができる。これを、ソフトウェア・スレッド２１０の「保持された」状態とも呼ぶ。
【００４１】
共有リソース２１６の共有を達成するための同期機構は、スレッドが他の動作状態に入ることを伴う。同期機構は、排他的構造を獲得しようとしているスレッド２１０が、排他的構造を保持可能となる前に「スピン」状態に入ることを要求する場合がある。「スピン」状態のスレッドは、プロセッサ１０２上でアクティブに実行されているが、排他的構造に関連付けられた共有リソース２１６にアクセスすることはできない。通常、「スピン」状態のスレッドは、排他的構造を獲得しようとしながら有用な作業を実行することはできないので、かかるスレッドは、「スピン」状態にある間は他のソフトウェア・ルーチンまたは方法を正常に実行することはない。
【００４２】
同期機構では、スレッド２１０が共有リソース２１６の排他的構造を獲得することができず、このためスレッドは共有リソース２１６にアクセスすることができない「ブロック（ｂｌｏｃｋｅｄ）」状態となる場合がある。「ブロック」状態のスレッドは、「ブロック」状態にある間は実行されることができず、コンピュータ・システム２００のプロセッサ１０２による処理対象でなくなる。この後に排他的構造がスレッド２１０に獲得可能となる場合、かかるブロックは一時的なものとすることができる。
【００４３】
排他的構造を保持しているスレッド２１０は、別のスレッドによって処理が引き受けられるのを待つ「待機」状態に入ることができる。通常、かかる「待機」状態の終了は、通知の受信によって、または「時限待機」状態の場合には既定の時間期間の満了によって行われる。「待機」および「時限待機」状態のスレッド２１０は、通知がスレッド２１０により受信されるかまたは時間期間が満了するまで、実行されることができず、コンピュータ・システム２００のプロセッサ１０２による処理対象でなくなる。通常、「待機」状態に入ったスレッドは排他的構造を解放し、「待機」状態を終了したらそれを再獲得する。
【００４４】
更に、スレッド２１０は「動作可能（runnable）」状態となることができる。これは、スレッド２１０がコンピュータ・システム２００のプロセッサ１０２上で実行されることが可能であってその準備ができているが、現在はどのプロセッサ１０２もスレッド２１０の実行のために割り当てられていない状態である。
【００４５】
ソフトウェア・スレッド２１０の各々は、スレッド２１０の現在の同期状態指示２１４を記録するためのスレッド状態インジケータ２１２を含む。指示２１４は特定のスレッド２１０に関連付けられ、「保持」、「スピン」、「ブロック」、「待機」（「待機」または時限待機」のいずれか）、「動作可能」の状態、およびソフトウェア・スレッド２１０の同期を取っていない状態の指示のいずれかまたは全てを示すことができる。一実施形態において、指示２１４はソフトウェア・スレッド自体によってセットされる。代替的な実施形態では、指示２１４は、Ｊａｖａ実行環境の仮想マシンによって等、並行ソフトウェア環境２０８によってセットされる。
【００４６】
ここで、本発明の実施形態の利点を実証するために、図２の構成を使用状態で説明する。使用時、指示２１４は、ソフトウェア・スレッド２１０の同期状態の変更の直前または直後にセットされる。例えば、共有リソース２１６にアクセスするために同期構造を獲得しようとしているソフトウェア・スレッド２１０は、「保持」状態を反映させるために指示２１４を更新する。同様に、「スピン」状態に入ろうとしているソフトウェア・スレッド２１０は、「スピン」状態を反映させるために指示２１４を更新する。
【００４７】
使用の際、タイム・プロファイラ２１８は、１つ以上のプロセッサ１０２の各々についてプログラム・カウンタ２０６の通常値をポーリングしてプロファイラ・レコード２２２に記録する。タイム・プロファイラ２１８は、ポーリングしたプロセッサ１０２上で実行されているソフトウェア・スレッド２１０の同期状態をプロファイラ・レコード２２２に記録するように構成されている。同期状態は、どのスレッド２１０がポーリングされたプロセッサ１０２上で実行されているかの識別およびスレッド２１０により記憶された同期状態２１４の指示に基づいている。このようにして、１つ以上のプロセッサ１０２の１つにおける実行を含む状態にあるスレッドの状態情報を決定し記録することができる。これは、「スピン」、「保持」状態、および同期を取っていない実行状態を含む。
【００４８】
このため、使用の際、図２の構成は、タイム・プロファイラ２１８をポーリングすることによって、並行ソフトウェア環境２０８で実行されているスレッド２１０の同期「保持」および「スピン」状態情報を一定の間隔で記録するように動作可能である。かかるポーリングは、コンピュータ・システム２００における処理オーバーヘッドが極めて小さい細分化または微小プロセス（atomic process）とすることができ、このため、並行ソフトウェア環境２０８の同期ダイナミクスに対する影響は実質的に無視できる程度である。また、並行ソフトウェア環境２０８に関して、プログラム・カウンタ２０６の値のポーリングおよび同期状態指示２１４の取得に並行ソフトウェア環境２０８のアクティブな関与が必要でない限りにおいて、タイム・プロファイラ２１８の処理は受動的である。更に、多数のソフトウェア・スレッド２１０の一定時間間隔の同期「保持」および「スピン」状態情報は、ソフトウェア・スレッド２１０の同期挙動を分析するプロセスに通知されて、並行ソフトウェア環境２０８の効率、操作性、およびスケーラビリティを向上させることができる。
【００４９】
一実施形態において、プログラム・カウンタ２０６の各値は、プロセッサ１０２上で実行されているスレッドのための実行ソフトウェア方法の識別に変換される（resolve）。例えば、タイム・プロファイラ２１８は、リゾルバ（resolver）を用いて、タイム・プロファイラ２１８により記録されたプログラム・カウンタ２０６の各アドレス値について、アドレスに記憶された命令を含むソフトウェア・スレッド２１０のためのソフトウェア・コードを識別するシンボリック名を決定することができる。このため、タイム・プロファイラ２１８により記録された各アドレスについて、スレッド２１０における関数、手順、サブルーチン、または方法名を含むシンボル名がリゾルバによって検索される。リゾルバは、タイム・プロファイラ２１８の機能とすることができ、または記憶装置２０４に記憶された補足的な機能もしくはツールとすることができる。
【００５０】
図２の構成は更に、タイム・プロファイラ２１８により測定された、スレッド２１０が特定の同期状態にあった一定間隔の割合を計算するための計算コンポーネントを含む。例えば、スレッド２１０が「保持」状態にあった合計時間の比率を計算することができる。かかる計算コンポーネントはタイム・プロファイラ２１８の一部として構成することができる。あるいは、かかる計算コンポーネントは、プロファイラ・コンポーネント２１８により発生されたプロファイラ・レコード２２２と相互作用する別個のまたは追加のソフトウェアまたはハードウェア・コンポーネントとすることができる。
【００５１】
好適な実施形態において、スレッド状態インジケータ２１２は、ソフトウェア・スレッド２１０がアクセスを求めた共有リソース２１６の識別も更に記録する。例えばスレッド状態インジケータ２１２は、この識別を同期状態情報２１４と共に記録することができる。かかる識別は、例えばオブジェクトのクラス名、または同期を取ったソフトウェア方法、ルーチン、デバイス、データ・アイテム、もしくは他の共有リソースの識別子を含むことができる。更に、好適な実施形態では、リゾルバが、スレッド状態インジケータ２１２により記録された共有リソース２１６の識別子に関連付けたシンボリック名を決定するように動作可能である。例えば、ソフトウェア方法または関数等のソフトウェア・ルーチンの名前が同期状態インジケータ２１４によって記録される。共有リソース２１６が、同期を取ったソフトウェア方法等の同期を取ったルーチンを有するオブジェクトを含むソフトウェア・オブジェクトを含む場合、共有リソース２１６は、クラス・ライブラリ、標準ライブラリ、サービス・ルーチン、またはプリミティブ・メソッドまたは関数等、呼び出し側のソフトウェア・ルーチンによって呼び出されたサービス・ライブラリのルーチンに対応する場合がある。かかる状況において、ルーチン自体の指示を記録することは有用でないことがあり（かかるルーチンは多くの方法によって頻繁に呼び出される可能性があるので）、追加的にまたは代替的に、「呼び出し側」ルーチンの識別子を決定し記録することができる。かかる「呼び出し側」ルーチンは、コール・スタックまたはリゾルバあるいはその両方から識別することができる。
【００５２】
図３は、本発明の好適な実施形態に従ってコンピュータ・システム２００においてソフトウェア・スレッド２１０を実行する並行ソフトウェア環境２０８でアクティビティを記録するための方法のフローチャートである。ステップ３０２において、スレッド状態インジケータ２１２はソフトウェア・スレッド２１０の同期状態指示２１４を記録する。この指示はソフトウェア・スレッド２１０の識別に関連付けられている。ステップ３０４において、タイム・プロファイラ２１８は一定の間隔で１つ以上のプロセッサ１０２のプログラム・カウンタ２０６の値をポーリングする。ステップ３０６において、タイム・プロファイラ２１８は、ポーリングしたプログラム・カウンタ値２０６および記録した状態指示２１４に基づいて、ソフトウェア・スレッド２１０の１つ以上の同期状態を識別して記録する。
【００５３】
上述の実施形態は、プロセッサ１０２の１つ以上でアクティブに実行されているスレッド２１０の同期「保持」および「スピン」状態情報を記録するのに適している。上述の実施形態は、プログラム・カウンタ１０６のポーリングおよびスレッド同期状態指示２１４に依拠し、このため、プロセッサ１０２上でアクティブに実行されているスレッドの有用な情報を与えるだけである。「ブロック」、「待機」（「待機」もしくは「時限待機」のいずれか）、または「動作可能」状態にあるスレッド等、プロセッサ１０２上でアクティブに実行されていないスレッドは、上述のタイム・プロファイラ２１８のポーリングによって識別されない。従って、これらの状態にあるスレッドのアクティビティを記録するために追加の手法が必要である。
【００５４】
図４は、本発明の好適な実施形態に従ってコンピュータ・システム４００において実施されるアクティビティ記録システムの高度化した構成を示す。図４の特性の多くは図２に関して上述したものと同一であり、それらについてはここでは繰り返さない。図４の構成が図２に対して高度化されている点は、図４の構成が、並行ソフトウェア環境４０８におけるソフトウェア・スレッド４１０がコンピュータ・システム４００のプロセッサ１０２でアクティブに実行されてない場合にスレッドの同期状態情報を記録するのに適していることである。図４に示す構成は図２の構成を補足することができ、いくつかの実施形態では、図４に関して以下で述べる特徴に追加して、図２に関して述べた特性を実施可能である。
【００５５】
図４のスレッド状態インジケータ４１２は、コンピュータ・システム４００のプロセッサ１０２における実行を停止したソフトウェア・スレッド４１０の同期状態指示を記録するように動作可能である。従って図４の構成では、スレッド状態インジケータ４１２は、「ブロック」、「待機」（「待機」または「時限待機」のいずれか）、および「動作可能」状態の指示を同期状態指示４１４に記録する。他の点では、図４のスレッド状態インジケータ４１２は、図２に関して上述したものと実質的に同一である。
【００５６】
図４のタイム・プロファイラ４１８は、アイドルである１つ以上のプロセッサ１０２を識別するように動作可能である。プロセッサ１０２がアイドルと見なされるのは、ソフトウェア・スレッド４１０のどれもプロセッサ１０２上での実行にディスパッチされない場合である。タイム・プロファイラ４１８は、プロセッサ１０２が特定の時点でアイドルであることの指示を記憶する等によって、かかるアイドル状態を記録する。代替的な実施形態では、タイム・プロファイラ４１８は更に、プロセッサ１０２が連続的にアイドルである時間期間をプロセッサ１０２のアイドル期間として識別するように動作可能である。
【００５７】
図４の記憶装置１０４は更にディスパッチ・モニター４２４を記憶している。ディスパッチ・モニター４２４は、いつソフトウェア・スレッド４１０がプロセッサ１０２上での実行のためにディスパッチされたかを識別するように動作可能である。ディスパッチ・モニター４２４は、並行ソフトウェア環境およびタイム・プロファイラ４１８と共存するソフトウェア・ルーチンとして実施可能である。あるいは、ディスパッチ・モニター４２４はコンピュータ・システム４００のオペレーティング・システムまたはカーネルにおいて実施可能である。あるいは、ディスパッチ・モニター４２４は全体的にまたは部分的にハードウェアとして実施可能である。
【００５８】
使用の際、ディスパッチ・モニター４２４は、ソフトウェア・スレッド４１０のプロセッサ１０２へのディスパッチを識別する。かかる識別に応答してディスパッチ・モニター４２４は、タイム・プロファイラ４１８を参照することによって、スレッドがディスパッチされたプロセッサ１０２がディスパッチの直前にアイドルであったか否かを判定する。プロセッサ１０２がアイドルであった場合、ディスパッチ・モニター４２４はディスパッチされたスレッド４１０の同期状態を取得して、ディスパッチされたスレッド４１０がプロセッサ１０２のアイドル状態の理由となり得る同期状態にあるか否かを判定する。例えば、ディスパッチされたスレッド４１０の同期状態指示４１４が、ディスパッチの時点までスレッド４１０がブロックされていた（「ブロック」状態）ことを示す場合、このブロックはプロセッサ１０２のアイドル状態の理由となり得る。かかる結論は、ソフトウェア・スレッド４１０の「ブロック」、「待機」（「待機」または「時限待機」のいずれか）、および「動作可能」状態で導き出すことができる。代替的な実施形態では、プロセッサ１０２の連続的なアイドル期間が記録されている場合、同期状態はアイドル期間の理由となり得るので、アイドル期間の原因と見なすことができる。
【００５９】
ディスパッチ・モニターが、プロセッサ１０２のアイドル状態の理由となるディスパッチされたスレッド４１０の同期状態を識別すると、ディスパッチ・モニターは、プロファイラ・レコード４２２において等でスレッドの同期状態のレコードを発生し、ディスパッチされたスレッドおよびディスパッチされたスレッド４１０の指示された同期状態をアイドル状態の原因と見なす。このように、スレッド４１０の特定の同期状態によって生じた可能性があるプロセッサ１０２のアイドル状態の原因は、それらの同期状態およびスレッドであると見なされる。
【００６０】
このため、図４の構成は、並行ソフトウェア環境４０８において実行されているスレッド４０８の同期「ブロック」、「待機」、および「動作可能」状態情報を記録し、かかる状態がタイム・プロファイラ４１８により識別されたプロセッサ１０２のアイドル状態の原因であると見なすように動作可能である。タイム・プロファイラ４１８およびディスパッチ・モニター４２４によってチェックおよびポーリングを行うことは、コンピュータ・システム４００における処理オーバーヘッドが極めて小さい細分化または微小プロセスとすることができ、このため、並行ソフトウェア環境４０８の同期ダイナミクスに対する影響は実質的に無視できる程度である。また、並行ソフトウェア環境４０８に関して、プロセッサ１０２のアイドル状態のチェックおよび同期状態情報４１４のポーリングに並行ソフトウェア環境４０８のアクティブな関与が必要でない限りにおいて、タイム・プロファイラ４１８およびディスパッチ・モニター４２４の処理は受動的である。更に、多数のソフトウェア・スレッド４１０の「ブロック」、「待機」、および「動作可能」状態情報のレコードは、ソフトウェア・スレッド４１０の同期挙動を分析するプロセスに通知されて、並行ソフトウェア環境４０８の効率、操作性、およびスケーラビリティを向上させることができる。
【００６１】
図５は、本発明の好適な実施形態に従ってコンピュータ・システム４００においてソフトウェア・スレッド４１０を実行する並行ソフトウェア環境４０８でアクティビティを記録するための方法のフローチャートである。ステップ５０２において、スレッド状態インジケータ４１２は、コンピュータ・システム４００のプロセッサ１０２における実行を停止したソフトウェア・スレッド４１０の同期状態指示４１４を記録する。指示４１４はソフトウェア・スレッド４１０の識別に関連付けられている。ステップ５０４において、タイム・プロファイラ４１８は、アイドルであるコンピュータ・システム４００のプロセッサ１０２を識別し、このプロセッサがアイドルであることの指示を記録する。ステップ５０６において、タイム・プロファイラ４１８はプロセッサ１０２のアイドル状態を識別する。好適な実施形態では、アイドル状態は、プロセッサが連続的にアイドルであるアイドル期間として識別される。ステップ５０８において、ディスパッチ・モニター４２４はプロセッサ１０２に対するソフトウェア・スレッド４１０のディスパッチを識別する。ステップ５１０において、この方法はプロセッサがアイドルであるか否かを判定する。ステップ５１２において、この方法は、ディスパッチされたスレッド４１０の同期状態がアイドル状態の理由となり得るか否かを判定する（例えば「ブロック」、「待機」、または「動作可能」状態）。ステップ５１４において、ディスパッチ・モニター４２４は、プロセッサ１０２のアイドル状態の原因をソフトウェア・スレッド４１０およびソフトウェア・スレッド４１０の指示された同期状態であると見なすレコードをプロファイラ・レコード４２２において発生する。好ましくは、タイム・プロファイラ４１８は更に、ディスパッチ・モニター４２４がプロセッサ１０２に対するスレッドのディスパッチを識別したことに応答してプロセッサ１０２がアイドルであることの指示をリセットするように動作可能である。
【００６２】
図４の構成は更に、タイム・プロファイラ４１８およびディスパッチ・モニター４２４により測定された、スレッド４１０が特定の同期状態にあった時間の割合を計算するための計算コンポーネントを含むことができる。例えば、「ブロック」状態のスレッドが原因と見なされるプロセッサ１０２のアイドル状態の合計時間の比率を計算する。かかる計算コンポーネントは、タイム・プロファイラ４１８の一部としてまたはディスパッチ・モニター４２４の一部として構成することができる。あるいは、かかる計算コンポーネントは、別個のまたは追加のソフトウェアまたはハードウェア・コンポーネントとすることができる。
【００６３】
好適な実施形態において、図４のタイム・プロファイラ４１８は更に、図２のタイム・プロファイラの規則的プログラム・カウンタ・ポーリング特性を含むことができる。かかるタイム・プロファイラ４１８によって行われるプログラム・カウンタのポーリングを用いて、プロセッサ１０２がアイドルである一定間隔数をカウントすることにより、アイドルのプロセッサ１０２のアイドル期間を測定することができる。更に、アイドル期間は、一定間隔のカウント数として、プロセッサ１０２がアイドルであることの指示と共に、タイム・プロファイラ４１８によって記録することができる。
【００６４】
好適な実施形態において、スレッド状態インジケータ４１２は、ソフトウェア・スレッド４１０がアクセスを求めた共有リソース４１６の識別も更に記録する。これについては図２を参照して上述した。図４の構成は更に、シンボリック名の変換を実行するための、図２を参照して上述したリゾルバも含むことができる。
【００６５】
マイクロプロセッサ、デジタル信号プロセッサ、または他の処理デバイス、データ処理装置もしくはシステム等のソフトウェア制御のプログラマブル処理デバイスを用いて、少なくとも部分的に上述した本発明の実施形態が実施可能である限りにおいて、前述の方法を実施するようにプログラマブル・デバイス、装置、またはシステムを構成するためのコンピュータ・プログラムが本発明の一態様として想定されることは認められよう。コンピュータ・プログラムは、ソース・コードとして具現化することができ、または処理デバイス、装置、もしくはシステム上で実施するためにコンパイルすることができ、または例えばオブジェクト・コードとして具現化することができる。
【００６６】
適宜、コンピュータ・プログラムは、例えば固体メモリ、ディスクまたはテープ等の磁気メモリ、コンパクト・ディスクまたはデジタル多用途ディスク等の光または光磁気読み取り可能メモリにおいて、機械またはデバイス読み取り可能形態でキャリア媒体上に記憶され、処理デバイスはプログラムまたはその一部を用いて動作のためにその構成を行う。コンピュータ・プログラムは、電子信号、無線周波数キャリア波、または光キャリア波等の通信媒体で具現化されたリモート・ソースから供給することができる。かかるキャリア媒体も本発明の態様として想定される。
【００６７】
本発明を、上述した例示的な実施形態に関連付けて記載したが、本発明はこれに限定されず、本発明の範囲内に該当する多くの可能な変更および変形があることは当業者には理解されよう。
【００６８】
本発明の範囲は、本明細書に開示したいかなる新規の特性または特性の組み合わせも含む。出願人はこれによって、本出願またはこれから導出されたいずれかの更に別の出願の処理の間に新規の請求項をかかる特性または特性の組み合わせに構築（formulate）可能であることを通知する。特に、添付の特許請求の範囲を参照して、請求項に列挙されている具体的な組み合わせだけでなくいかなる適切な方法でも、従属請求項からの特性を独立請求項のものと組み合わせることができ、各独立請求項からの特性を組み合わせることができる。
【図１】
0005889332.tif 000002
【図２】
0005889332.tif 000003
【図３】
0005889332.tif 000004
【図４】
0005889332.tif 000005
【図５】
0005889332.tif 000006