(57)【要約】【課題】コード部分を実行する際にプロセッサが消費する実時間量を決定するシステムおよび方法を提供すること。【解決手段】コード部分の実際の実行時間は、コード部分に対応するコンテクストスイッチおよび／またはオーバヘッド時間を考慮することによって正確に決定することができる。コード部分の実際の実行時間を決定することには、コード部分の実行の間に生じるコンテクストスイッチと時間値を記録することを含めることができる。この情報とオーバヘッド測定値を併せて使用することにより、コード部分の実際の実行時間を生成することができる。より詳細には、例えばコンテクストスイッチに起因するスイッチアウト区間と時間測定に関連するオーバヘッド時間とを経過時間から減算してコード部分の実際の実行時間を生成することができる。【選択図】図３
2006260542.tif 000002
【特許請求の範囲】
【請求項１】
第１の処理スレッドのコード部分を実行する際に、マルチタスクオペレーティングシステムが動作するプロセッサによって消費される実時間量を決定する方法であって、
（Ａ）前記コード部分の実行の開始時間および終了時間を定義する第１の時間区間を示す第１の情報を受信する動作と、
（Ｂ）前記第１の時間区間内に存在し、かつ前記プロセッサが前記第１の処理スレッド以外の処理スレッドを実行した１つまたは複数の第２の時間区間を示す第２の情報を受信する動作と、
（Ｃ）前記第１および第２の情報に基づき、前記コード部分を実行する際に消費される実時間量を決定する動作と
を備えることを特徴とする方法。
【請求項２】
前記動作（Ｃ）は、
前記１つまたは複数の第２の時間区間の総計時間を前記第１の時間区間から減算する動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
（Ｄ）前記第１の時間区間内で前記第１の情報を取得する際に消費されるオーバヘッド時間を示す第３の情報を受信する動作をさらに備え、
前記動作（Ｃ）は、前記オーバヘッド時間と前記１つまたは複数の第２の時間区間の総計時間とを前記第１の時間区間から減算する動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記第２の情報は複数の情報要素を含み、各情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記動作（Ｃ）は、前記１つまたは複数の各第２の時間区間ごとに、前記情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定する動作（１）を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記第１の情報は複数の第１の情報要素を含み、各第１の情報要素は時間、処理スレッド、およびある種のイベントを指定し、
前記動作（Ｃ）は、前記複数の第１の情報要素に基づいて、前記第１の時間区間の開始時間および終了時間を決定する動作（１）を含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記第２の情報は複数の第２の情報要素を含み、各第２の情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記方法は、（Ｄ）１つまたは複数の第３の情報要素を含む第３の情報を受信する動作をさらに含み、各第３の情報要素はある種のイベントを実行する際に消費される時間を指定し、
前記動作（Ｃ）は、
（２）前記１つまたは複数の各第２の時間区間ごとに、前記第２の情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定する動作と、
（３）前記第１および第２の情報要素から、前記第１の情報を取得する際に前記プロセッサによって消費される総オーバヘッド時間を決定する動作と、
（４）前記動作（Ｃ）（１）〜（Ｃ）（３）でなされた前記決定に基づいて、前記コード部分を実行する際に消費される前記実時間量を決定する動作と
をさらに含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記動作（Ａ）〜（Ｃ）はコンピュータシステム上で実施されることを特徴とする請求項１に記載の方法。
【請求項８】
第１の処理スレッドのコード部分を実行する際に、マルチタスクオペレーティングシステムが動作するプロセッサによって消費される実プロセッサ時間量を決定するシステムであって、
前記コード部分の実行の開始時間および終了時間を定義する第１の時間区間を示す第１の情報を受信し、前記第１の時間区間内に存在しかつ前記プロセッサが前記第１の処理スレッド以外の処理スレッドを実行した１つまたは複数の第２の時間区間を示す第２の情報を受信し、前記第１および第２の情報に基づいて、前記コード部分を実行する際に消費される前記実プロセッサ時間量を生成する実時間生成器を備えることを特徴とするシステム。
【請求項９】
前記実時間生成器は、前記１つまたは複数の第２の時間区間の総計時間を前記第１の時間区間から減算するように動作することを特徴とする請求項８に記載のシステム。
【請求項１０】
前記第１の時間区間内で前記第１の情報を取得する際に消費されるオーバヘッド時間を示す第３の情報を受信し、前記オーバヘッド時間と前記１つまたは複数の第２の時間区間の総計時間とを前記第１の時間区間から減算するように動作することを特徴とする請求項８に記載のシステム。
【請求項１１】
前記第２の情報は複数の情報要素を含み、各情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記実時間生成器は、前記１つまたは複数の各第２の時間区間ごとに、前記情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定するように動作することを特徴とする請求項８に記載のシステム。
【請求項１２】
前記第１の情報は複数の第１の情報要素を含み、各第１の情報要素は時間、処理スレッド、およびある種のイベントを含み、
前記実時間生成器は、前記複数の第１の情報要素に基づいて、前記第１の時間区間の開始時間および終了時間を決定するように動作することを特徴とする請求項８に記載のシステム。
【請求項１３】
前記第２の情報は複数の第２の情報要素を含み、各第２の情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記実時間生成器は１つまたは複数の第３の情報要素を含む第３の情報を受信するように動作し、各第３の情報要素はある種のイベントを実行する際に消費される時間を指定し、
前記実時間生成器は、前記１つまたは複数の各第２の時間区間ごとに、前記第２の情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定し、前記第１および第２の情報要素から、前記第１の情報を取得する際に前記プロセッサによって消費される総オーバヘッド時間を決定し、前記動作（Ｃ）（１）〜（Ｃ）（３）でなされた前記決定に基づいて、前記コード部分を実行する際に消費される前記実時間量を決定するように動作することを特徴とする請求項１２に記載のシステム。
【請求項１４】
前記実時間生成器は、前記コード部分を実行する際に消費される前記実プロセッサ時間量を生成するための手段を含むことを特徴とする請求項８に記載のシステム。
【請求項１５】
コンピュータ可読媒体と、
前記コンピュータ可読媒体上に格納されたコンピュータ可読信号と
を含むコンピュータプログラム製品であって、前記コンピュータ可読信号は命令を定義し、前記命令は、コンピュータによって実行された結果として、第１の処理スレッドのコード部分を実行する際にマルチタスクオペレーティングシステムが動作するプロセッサによって消費される実時間量を決定する処理を実施するよう前記コンピュータを制御し、前記処理は
（Ａ）前記コード部分の実行の開始時間および終了時間を定義する第１の時間区間を示す第１の情報を受信する動作と、
（Ｂ）前記第１の時間区間内に存在し、かつ前記プロセッサが前記第１の処理スレッド以外の処理スレッドを実行した１つまたは複数の第２の時間区間を示す第２の情報を受信する動作と、
（Ｃ）前記第１および第２の情報に基づき、前記コード部分を実行する際に消費される前記実時間量を決定する動作と
を備えることを特徴とするコンピュータプログラム製品。
【請求項１６】
前記動作（Ｃ）は、
前記１つまたは複数の第２の時間区間の総計時間を前記第１の時間区間から減算する動作を含むことを特徴とする請求項１５に記載のコンピュータプログラム製品。
【請求項１７】
前記処理は、
（Ｄ）前記第１の時間区間内で前記第１の情報を取得する際に消費されるオーバヘッド時間を示す第３の情報を受信する動作をさらに備え、
前記動作（Ｃ）は、前記オーバヘッド時間と前記１つまたは複数の第２の時間区間の総計時間とを前記第１の時間区間から減算する動作を含むことを特徴とする請求項１５に記載のコンピュータプログラム製品。
【請求項１８】
前記第２の情報は複数の情報要素を含み、各情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記動作（Ｃ）は、（１）前記１つまたは複数の各第２の時間区間ごとに、前記情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定する動作を含むことを特徴とする請求項１５に記載のコンピュータプログラム製品。
【請求項１９】
前記第１の情報は複数の第１の情報要素を含み、各第１の情報要素は時間、処理スレッド、およびある種のイベントを指定し、
前記動作（Ｃ）は、（１）前記複数の第１の情報要素に基づいて前記第１の時間区間の開始時間および終了時間を決定する動作を含むことを特徴とする請求項１５に記載のコンピュータプログラム製品。
【請求項２０】
前記第２の情報は複数の第２の情報要素を含み、各第２の情報要素は特定の時間、前記特定の時間に前記プロセッサがコンテクストを切り換えた古いスレッド、および前記特定の時間に前記プロセッサがコンテクストを切り換えた新しいスレッドを指定し、
前記処理は、（Ｄ）１つまたは複数の第３の情報要素を含む第３の情報を受信する動作を含み、各第３の情報要素はある種のイベントを実行する際に消費される時間を指定し、
前記動作（Ｃ）は、
（２）前記１つまたは複数の各第２の時間区間ごとに、前記第２の情報要素に基づいて前記第２の時間区間の開始時間および終了時間を決定する動作と、
（３）前記第１および第２の情報要素から、前記第１の情報を取得する際に前記プロセッサによって消費される総オーバヘッド時間を決定する動作と、
（４）前記動作（Ｃ）（１）〜（Ｃ）（３）でなされた前記決定に基づいて、前記コード部分を実行する際に消費される前記実時間量を決定する動作と
をさらに備えることを特徴とする請求項１５に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【背景技術】
【０００１】
一般に、ソフトウェアアプリケーションの開発の間には、そのアプリケーションの１つまたは複数の部分に関する性能試験が実施される。この試験には、ソフトウェアアプリケーションの１つまたは複数のコード部分（例えば、関数、手続き、または他の論理コンポーネント）の実行時にプロセッサが費やす（すなわち、消費する）時間量の測定が含まれることが多い。このような時間量を、例えばコード部分の実行を開始する時間と、コード部分の実行を終了する時間とを記録することによって決定することができる。これらの時間は、しばしばソフトウェアアプリケーション内の各位置(例えば、コード部分の始点と終点)にプローブを含めることによって記録され、そのプローブを実行することにより時間値が記録される。
【０００２】
コード部分の実行が始まり、終了する時間だけに基づいて実行時間量を決定することは、プロセッサがコード部分を実行する際に消費する実時間量の正確な表現にはならない。時間値を記録することそれ自体が時間を消費する。例えば、時間値を読み出すために必要な時間や、その時間値を記録媒体、例えば揮発メモリまたは不揮発記憶媒体などに書き込む（すなわち、記録する）ために必要な時間などである。このような時間値を取得するために消費される（読出しおよび記録を含めた）時間のことを、本明細書では「オーバヘッド」または「オーバヘッド時間」と呼ぶ。
【０００３】
例えば、開始および終了時間の測定により、コード部分が８００プロセササイクルを消費したことが示されているとする。ただし、開始時間を記録するために、３プロセッササイクルかかるものとする。したがって、プロセッサがコード部分を実行する際に消費する実時間量は（以下で論ずるコンテクストスイッチなど他の変数がないものと想定すると）、８００−３＝７９７プロセッササイクルになる。終了時間を取得するために消費されるプロセッササイクルは、コード部分の測定された実行時間の精度に影響を与えないことを理解されたい。これは、終了時間を取得するための時間が、記録された終了時間それ自体の後に生じるからである。
【０００４】
マルチタスクオペレーティングシステム（ＯＳ）では他の問題も生じる。マルチタスクＯＳは、異なるスレッドを交互にまたはインターリーブして実行することによって、プロセッサ（例えば、中央演算処理装置（ＣＰＵ）やマイクロプロセッサ）上の異なる処理スレッドの並行動作をシミュレートする。あるスレッドが、（「カンタム（ｑｕａｎｔｕｍ）」と呼ばれることも多い）比較的短い時間実行された後で、ＯＳはプロセッサに割り込み、そのコンテクストを異なるスレッドに適合させる。プロセッサのコンテクストを、あるスレッドから他のスレッドに適合させることまたは切り換えることは、本明細書で「コンテクストスイッチ」と呼ぶイベントである。コード部分の実行の開始および終了に対して記録された時間値には、本明細書では、開始時間と終了時間の間に１つまたは複数のコンテクストスイッチが発生したかどうかは考慮されていない。この区間に１つまたは複数のコンテクストスイッチが発生した場合には、この区間はプロセッサがコード部分を実行する際にどれぐらいの時間を使用したかの正確な表現にはならない。すなわちこの区間は、コード部分それ自体の実行の際にプロセッサが実際に消費した時間より長い時間を示すことになる。
【０００５】
【非特許文献１】Ｕｎｉｔｅｄ  Ｓｔａｔｅｓ  Ｐａｔｅｎｔ  Ｏｆｆｉｃｅ  Ｍａｎｕａｌ  ｏｆ  Ｐａｔｅｎｔ  Ｅｘａｍｉｎｉｎｇ  Ｐｒｏｃｅｄｕｒｅｓ  （Ｅｉｇｈｔｈ  Ｅｄｉｔｉｏｎ，  Ｒｅｖｉｓｉｏｎ  ２，  Ｍａｙ  ２００４）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
プロセッサがコード部分を実行する際に、詳細にはマルチタスクオペレーティングシステム上で実行する際に消費する実時間量を決定するための信頼できるシステムおよび方法が必要とされている。
【課題を解決するための手段】
【０００７】
したがって、本明細書で説明するのは、プロセッサがコード部分を実行する際に消費する実時間量を決定するシステムおよび方法である。本明細書で使用される、コード部分の「アクティブ時間」とは、コード部分を実行する際にプロセッサが消費する実時間量のことである。コード部分のアクティブ時間は、コード部分に対応するコンテクストスイッチおよび／またはオーバヘッド時間を考慮することによって正確に決定することができる。
【０００８】
本明細書で使用するコード部分の「経過時間」とは、コード部分の実行の開始時間と終了時間の間に経過した絶対時間（すなわち、コード部分の実行の記録された開始および終了時間によって定義される時間区間）のことである。コード部分の経過時間には、スイッチアウト区間の間にプロセッサが消費した時間が含まれることがある。本明細書で使用される「スイッチアウト区間」とは、経過時間区間内に存在する区間であって、測定されるコード部分に対応する処理スレッド以外の処理スレッドをプロセッサが実行している区間のことである。経過時間にはまた、コード部分の開始および終了時間値を取得する際に生じるオーバヘッド時間が含まれることもある。さらに、コード部分には、開始および終了時間の記録を生成するプローブ以外の追加のプローブが含まれることがあることを理解されたい。例えば、追加のプローブは、測定されるコード部分内部の他のコード部分（例えば、関数、手続き、または他の論理コンポーネント）の最初と最後に配置されることがある。これら追加のプローブの実行により、経過時間内に追加のオーバヘッド時間が生じることになる。
【０００９】
コード部分のアクティブ時間の決定には、コード部分の実行中に発生するコンテクストスイッチおよび時間値を記録することを含めることができる。この情報をオーバヘッド測定値と併せて使用することによってコード部分のアクティブ時間を生成することができる。このことについては、以下でより詳細に述べる。例えば、コンテクストスイッチから生ずるスイッチアウト区間および時間測定に関連するオーバヘッド時間を経過時間から差し引くことによってコード部分のアクティブ時間を生成することができる。
【００１０】
本発明の一実施形態では、第１の処理スレッドのコード部分を実行する際にマルチタスクオペレーティングシステムが動作するプロセッサによって消費される実時間量が決定される。コード部分実行の開始および終了時間を定義する第１の時間区間を示す第１の情報が受信される。第１の時間区間内に存在し、かつプロセッサが第１の処理スレッド以外の処理スレッドを実行した１つまたは複数の第２の時間区間を示す第２の情報が受信される。この第１および第２の情報に基づいて、コード部分を実行する際に消費される実際の時間量が決定される。
【００１１】
本実施形態の一態様では、１つまたは複数の第２の時間区間の総計時間が第１の時間区間から減算される。
【００１２】
本実施形態の他の態様では、第１の時間区間内で第１の情報を取得する際に消費されるオーバヘッド時間を示す第３の情報が受信される。実時間量の決定には、第１の時間区間から、オーバヘッド時間と１つまたは複数の第２の時間区間の総計時間とを減算することが含まれる。
【００１３】
本実施形態の他の態様では、第２の情報は複数の情報要素を含む。各情報要素は、特定の時間、その特定の時間にプロセッサがコンテクストを切り換えた古いスレッド、およびその特定の時間にプロセッサがコンテクストを切り換えた新しいスレッドを指定する。実時間量の決定には、１つまたは複数の各第２の時間区間ごとに、各情報要素に基づいて第２の時間区間の開始時間と終了時間を決定することが含まれる。
【００１４】
本実施形態の他の態様では、第１の情報は複数の第１の情報要素を含み、各第１の情報要素は、時間、処理スレッド、およびある種のイベントを指定する。実時間量を決定することには、複数の第１の情報要素に基づいて、第１の時間区間の開始および終了時間を決定する動作が含まれる。
【００１５】
本実施形態の他の態様では、第２の情報は複数の第２の情報要素を含む。各第２の情報要素は、特定の時間、その特定の時間にプロセッサがコンテクストを切り換えた古いスレッド、およびその特定の時間にプロセッサがコンテクストを切り換えた新しいスレッドを指定する。１つまたは複数の第３の情報要素を含む第３の情報が受信され、各第３の情報要素はある種のイベントを実行する際に消費される時間を指定する。実時間量を決定することには、１つまたは複数の各第２の時間区間ごとに、第２の情報要素に基づいて第２の時間区間の開始時間および終了時間を決定することが含まれる。実時間量を決定することにはさらに、第１および第２の情報要素から、第１の情報を取得する際にプロセッサによって消費される総オーバヘッド時間を決定すること、ならびにコード部分の実行の際に消費される実時間量を決定することが含まれる。
【００１６】
他の態様においては、１つまたは複数の上記動作および／または上記実施形態の諸態様は、コンピュータシステム上で実施される。
【００１７】
本発明の他の実施形態では、コンピュータプログラム製品が提供される。この製品はコンピュータ可読媒体、およびコンピュータ可読媒体上に格納されたコンピュータ可読信号を含む。コンピュータ可読信号は各命令を定義し、各命令は、コンピュータによって実行された結果として、先のパラグラフに記載の本発明の実施形態による方法および／または先のパラグラフに記載のそれら実施形態の１つまたは複数の態様を実施するようコンピュータに指示する。
【００１８】
本発明の他の実施形態では、第１の処理スレッドのコード部分を実行する際に、マルチタスクオペレーティングシステムが動作するプロセッサによって消費される実プロセッサ時間量を決定するためのシステムが提供される。このシステムには、コード部分の実行の開始および終了時間を定義する第１の時間区間を示す第１の情報を受信し、第１の時間区間内に存在しかつプロセッサが第１の処理スレッド以外の処理スレッドを実行した１つまたは複数の第２の時間区間を示す第２の情報を受信し、第１および第２の情報に基づいて、コード部分の実行の際に消費される実プロセッサ時間量を生成する実時間生成器が含まれる。
【００１９】
本実施形態の一態様では、実時間生成器は、１つまたは複数の第２の時間区間の総計時間を第１の時間区間から減算するように動作する。
【００２０】
本実施形態の他の態様では、実時間生成器は、第１の時間区間内で第１の情報を取得する際に消費されるオーバヘッド時間を示す第３の情報を受信し、第１の時間区間からオーバヘッド時間と１つまたは複数の第２の時間区間の総計時間を減算するように動作する。
【００２１】
本実施形態の他の態様では、第２の情報は複数の情報要素を含む。各情報要素は、特定の時間、その特定の時間にプロセッサがコンテクストを切り換えた古いスレッド、およびその特定の時間にプロセッサがコンテクストを切り換えた新しいスレッドを指定する。実時間生成器は、１つまたは複数の各第２の時間区間ごとに、各情報要素に基づいて第２の時間区間の開始および終了時間を決定するように動作する。
【００２２】
本実施形態の他の態様では、第１の情報は複数の第１の情報要素を含む。各第１の情報要素は、時間、処理スレッド、およびある種のイベントを指定する。実時間生成器は、複数の第１の情報要素に基づいて第１の時間区間の開始時間と終了時間を決定するように動作する。
【００２３】
本実施形態の他の態様では、第２の情報は複数の第２の情報要素を含む。各第２の情報要素は、特定の時間、その特定の時間にプロセッサがコンテクストを切り換えた古いスレッド、およびその特定の時間にプロセッサがコンテクストを切り換えた新しいスレッドを指定する。実時間生成器は、１つまたは複数の第３の情報要素を含む第３の情報を受信するように動作し、各第３の情報要素はある種のイベントを実行する際に消費される時間を指定する。実時間生成器は、１つまたは複数の各第２の時間区間ごとに、第２の情報要素に基づいて第２の時間区間の開始時間と終了時間を決定し、第１および第２の情報要素から、第１の情報を取得する際にプロセッサによって消費される総オーバヘッド時間を決定し、動作（Ｃ）（１）〜（Ｃ）（３）でなされた決定に基づいて、コード部分の実行の際に消費される実時間量を決定するように動作する。
【００２４】
他の利点、新規な特徴、および本発明の目的、ならびに本発明の態様および実施形態は、本発明の態様および実施形態を含む本発明についての以下の詳細な説明を、添付の図面と併せて検討することによって明らかになるはずである。ただし、各図面は概略を示したものであり、原寸に比例して図示することを意図したものではない。図面中、様々な図面に示された同一のまたはほぼ同一のコンポーネントは、単一の参照番号で示される。図面を見やすくするために、必ずしもすべての図面中のすべてのコンポーネントにラベル付けしている訳ではない。また、当業者に本発明を理解できるようにするために例示を必要としない場合には、必ずしも本発明の各実施形態または態様のすべてのコンポーネントを図示している訳でもない。
【発明を実施するための最良の形態】
【００２５】
本発明の各実施形態の機能および利点は、以下で説明するいくつかの例によってより完全に理解できるはずである。以下の実施例は、本発明をより良く理解するための助けとなり、その利益を例示することを意図したものであり、本発明の全ての範囲を例示することを意図したものではない。
【００２６】
明細書であるか特許請求の範囲であるかにかかわらず、本明細書で使用する「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「保持する（ｃａｒｒｙｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含有する（ｃｏｎｔａｉｎｉｎｇ）」、「包含する（ｉｎｖｏｌｖｉｎｇ）」などの用語は、オープンエンド形式、すなわちそれらを含むがそれらに限定されるものではないことを意味するものと理解されたい。非特許文献１の§２１１１．０３にクレームに関して記載されているように、移行句の「からなる（ｃｏｎｓｉｓｔｉｎｇ  ｏｆ）」および「本質的に・・・からなる（ｃｏｎｓｉｓｔｉｎｇ  ｅｓｓｅｎｔｉａｌｌｙ  ｏｆ）」だけがそれぞれ、クローズド形式およびセミクローズド形式の移行句であるものとする。
【００２７】
図１は、コード部分の実行の経過時間およびアクティブ時間の一例を示すタイミング図１００である。図１００は、コード部分に対するタイミング図の単なる一例示的実施形態であり、本発明の範囲を制限することを意図したものではない。このような図については、例えば図１００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。
【００２８】
時間軸１１２は、タイミング図１００が０から１２ミリ秒（ｍｓ）の区間を表していることを示す。このようなタイミング図が他の時間単位、例えばプロセッササイクルなどを用いて図示できることを理解されたい。グラフ１０２は、プロセッサが１．５ｍｓ〜３ｍｓ、および６ｍｓ〜９ｍｓの間にスレッド１を実行していたことを示す。グラフ１０４は、コード部分の開始および終了実行時間を示すタイマ読み値が０．５〜１．５ｍｓ、および９〜１０ｍｓの間に取得されたことを示す。したがって、グラフ１０４はコード部分の時間値を取得する際のオーバヘッド時間を表している。
【００２９】
グラフ１０６は、プロセッサがスレッド１以外の１つまたは複数のスレッドを実行していたスイッチアウト区間を示す。
【００３０】
グラフ１０２、１０４、および１０６によれば、経過時間区間（グラフ１０８）は０．５ｍｓで始まり９．０ｍｓで終了するので、８．５ｍｓの経過時間が生成されたことになる。グラフ１０２〜１０８によれば、タイミング図１００はコード部分のアクティブ時間（グラフ１１０）が（３−１．５）＋（９−６）＝４．５ｍｓであることを示す。図１００に図として例示した、コード部分のアクティブ時間を決定するための本発明の実施形態を、次に図２〜８との関係で説明する。
【００３１】
図２は、プロセッサがコード部分を実行する際に消費する実時間を決定する方法２００の一例を示す流れ図である。方法２００はコード部分の実際の実行時間を決定する方法の単なる例示的な実施形態に過ぎず、本発明の範囲を制限することを意図したものではない。このような方法については、例えば方法２００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。
【００３２】
動作２０２において、コード部分のタイマ測定値が記録される。例えば、コード部分が属するスレッドには、そのコード部分の開始および終了をマーキングする位置や、場合によってはコード部分内の（例えば、他の論理コンポーネントの開始および終了を示す）位置など、１つまたは複数の位置にプローブを含めることができる。コード部分の実行の間に、プローブの各位置でタイマ測定を実施することができる。これらの測定値は記録媒体、例えばローカルの（例えば、揮発性）メモリの一時バッファ内に、あるいはディスクなどの不揮発性記憶媒体などに記録することができる。タイマ測定を表す情報ユニットの例を、後で図４に関して説明する。
【００３３】
図２から少し離れて、図３はスレッド３００のコードの一例を示す擬似コードである。コード３００はコードスレッドの単なる一例であり、本発明の範囲を制限することを意図したものではない。コードスレッドについては、例えばスレッド３００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。
【００３４】
以下で説明する図３および図４〜６は、本明細書を通して、コード部分のアクティブ時間を決定するための情報の限定の意味ではない例として参照される。これらの例が例示のために提供されたものであり、本発明の範囲を制限することを意図したものではないことを理解されたい。他の情報を使用することもできる。
【００３５】
スレッド３００はコード部分３０２を含み、コード部分３０２は関数Ｆ（）を含み、関数Ｆ（）は関数Ｇ（）を含む。関数Ｆ（）の開始と終了（コード部分３０２の開始と終了でもある）を記録するためのプローブは、コード部分３０２内の位置３０４および３０６に配置することができる。さらに、関数Ｇ（）の実行の開始と終了を指示するプローブを位置３０８および３１０に配置することができる。
【００３６】
図４は、タイマ測定値を表す情報要素からなる表４００の一例を示す構成図である。図４は、タイマ測定値を表す情報要素からなる表の単なる例示的実施形態を表したものに過ぎず、本発明の範囲を制限することを意図したものではない。このような表については、例えば表４００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。例えば、表４００は図４に示されたものよりも多くのまたは少ない数のエントリやカラムを含むことができる。また、エントリやカラムは異なる順序で配列することもできる。
【００３７】
各情報要素は、時間値フィールド４０２、スレッドＩＤフィールド４０４、およびイベントフィールド４０６を含むことができる。フィールド４０２（および、それぞれ表５００および６００のフィールド５０２および６０４）で使用されている時間の単位はプロセッサ（例えば、ＣＰＵ）サイクルである。しかし、これらのフィールドで使用される時間の単位は、例えばミリ秒など、複数の他の任意の種類の単位であっても良いことを理解されたい。例えば、情報要素４０８は、スレッド１の９００プロセッササイクルで関数Ｆ（）に入ったことを示す。情報要素４０８は、図３に関して上述したように、コード部分３０２の位置３０４におけるプローブの実行の結果として取得することができる。本明細書に記載のいくつかの例では、プロセッササイクルを時間の単位として使用しているが、他の時間単位を使用することもできることに留意されたい。
【００３８】
他の例として、情報要素４１０はスレッド２において１０１０ｍｓに関数Ｓ（）に入ったことを示す。さらに、情報要素４１６、４２０、および４２２は、それぞれコード部分３０２の位置３０８、３１０、および３０６に配置されたプローブから取得することができる。
【００３９】
図２に戻って、動作２０４で、コンテクストスイッチイベントを記録することができる。すなわち、プロセッサによるあるスレッドから他のスレッドへのコンテクストの切換えを記録することができる。コンテクストが切り換えられる切換先のスレッドまたはコンテクストが切り換えられる切換元のスレッドの一方は、そのコード部分を含むスレッドであっても良い。また、コンテクストが切り換えられる切換先のまたはコンテクストが切り換えられる切換元の１つまたは複数のスレッドは、そのコード部分を含むスレッド以外のスレッドであっても良い。オペレーティングシステムによっては（例えば、本件特許出願人から市販されているＷｉｎｄｏｗｓ（登録商標）ＸＰでは）、コンテクストスイッチイベントを捕捉可能にするアプリケーションプログラムインタフェース（ＡＰＩ）を提供することができる。
【００４０】
本明細書で使用される「アプリケーションプログラムインタフェース」または「ＡＰＩ」とは、関数を定義する１つまたは複数の他の組のコンピュータ可読命令へのアクセスを提供する１組の１つまたは複数のコンピュータ可読命令のことである。したがって、このような関数を、アプリケーションプログラムとともにコンピュータ上で実行されるように構成することができる。ＡＰＩを、アプリケーションプログラムと特定のコンピュータ環境またはプラットホーム（例えば、以下で論ずるプラットホームのいずれか）との間の「接着剤」と見なすことができ、プログラマがアプリケーションを１つまたは複数の特定のコンピュータプラットホームあるいは１つまたは複数の特定のコンピュータ環境で動作するようにプログラムすることを可能にするものである。
【００４１】
例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）ＸＰ  ＯＳは、コンテクストスイッチを記録する機能を提供するＥｖｅｎｔ  Ｔｒａｃｋｉｎｇ  ｆｏｒ  Ｗｉｎｄｏｗｓ（登録商標）（ＥＴＷ）ＡＰＩを含む。この機能をイネーブル（すなわち、オン）にして、コンテクストスイッチイベントを（例えば、ローカルメモリバッファまたはディスク上に）記録することできる。したがって、ＯＳ上で複数のスレッドを並列実行する間に、コンテクストスイッチイベント、例えばコード部分実行中のコンテクストスイッチイベントなどを記録することができる。コンテクストスイッチイベントを表す情報要素の例は、次いで図５に関連して説明する。
【００４２】
方法２００から少し離れて、図５はコンテクストスイッチイベントを表す情報要素の表５００の一例を示す構成図である。表５００は、コンテクストスイッチイベントを表す情報要素からなる表の単なる一例示的実施形態に過ぎず、本発明の範囲を制限することを意図したものではない。このような表については、例えば表５００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。例えば、表５００は追加のエントリおよび／またはカラムを含むことができ、またエントリおよびカラムを異なる方法で構成することができる。
【００４３】
表５００は、情報要素５０８、５１０、５１２、５１４、５１６および５１８を含むことができる。各情報要素は、フィールド５０２の特定の時間値、コンテクストが切り換えられる切換元のスレッドのスレッドＩＤ（古いスレッドＩＤフィールド５０４）、およびコンテクストが切り換えられる切換先のスレッドのスレッドＩＤ（新しいスレッドＩＤフィールド５０６）を指定することができる。例えば、情報要素５０８は（例えば、所定の開始時間から）１０００プロセッササイクルの時間に、コンテクストがスレッド１からスレッド２に切り換えられたことを示し、情報要素５１０は１０２８プロセッササイクルにコンテクストがスレッド２からスレッド３に切り換えられたことを示す。
【００４４】
実施形態によっては、フィールド５０４および５０６の代わりに、各エントリはスレッドＩＤを指定する単一のフィールドと、そのスレッドＩＤによって指定されたスレッドが切換先（すなわち、スイッチイン）スレッドか、または切換元（すなわち、スイッチアウト）スレッドかを指示する値（例えば、フラグ）を指定する他のフィールドとを含むことができる。エントリの他の実施形態を使用することもできる。
【００４５】
図２に戻って、動作２０６で、特定の種類のイベント（例えば、関数入口、関数出口、および他の種類のイベント）に対するオーバヘッド測定値を取得することができる。これらの測定値を、例えば管理された試験環境で異なるイベント種類に対して事前になされた、先行の測定値から取得することができる。あるいは、オーバヘッド測定値を、コード部分の実行が測定される間に測定し記録することもできる。オーバヘッド測定値を表す情報要素の例については、次に図６に関連して説明する。
【００４６】
図６は、オーバヘッド測定値を表す複数の情報要素を含む表６００の一例を示す構成図である。表６００は、オーバヘッド測定値を表す情報要素からなる表の単なる一例示的実施形態であり、本発明の範囲を制限することを意図したものではない。このような表については、例えば表６００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲に含まれることが意図される。例えば、表６００は追加のエントリおよび／またはカラムを含むことができ、またエントリやカラムを異なる方法で構成することができる。
【００４７】
表６００は情報要素６０６および６０８を含むことができ、各情報要素はイベントタイプを指定するイベントタイプフィールド６０２、およびそのイベントタイプに関するオーバヘッド時間を指定するオーバヘッドタイムフィールド６０４を含む。例えば、情報要素６０６は、関数入口イベントタイプが３プロセッササイクルのオーバヘッド時間を有することを示し、情報要素６０８は関数出口イベントタイプが２プロセッササイクルのオーバヘッドを有することを示す。エントリ６０６および６０８では、関数に入り、出て行くたびにそれぞれ同一の時間量（それぞれ、３および２プロセッササイクル）が消費されるものと想定する。しかし、実施形態によっては、関数に入り、出て行くたびにオーバヘッドを測定し記録することが可能であり、この情報を表６００に示された形式とは異なる形式で記録することが可能である。
【００４８】
図２に戻って、動作２０８で、タイマ測定値、コンテクストスイッチイベント、および、例えば以下で図７に関連して説明するようなオーバヘッド測定値に基づいてコード部分の実時間を決定することができる。方法２００またはその一部は、以下で図８に関連して説明するシステム８００を使用して実装することができる。
【００４９】
方法２００は追加の動作を含むことができる。さらに、各動作を他の順序で実施することができること、および／または１つまたは複数の動作を少なくとも部分的には直列もしくは並列に実施することができることから、方法２００の一部として実施される動作の順序は図２に示された順序に限定される訳ではない。例えば、１つまたは複数のコンテクストスイッチイベントは、動作２０４の一部として並列に記録することもできるし、あるいは動作２０２の一部として１つまたは複数のタイマ測定値の記録の前に記録することもできる。
【００５０】
図７は、タイマ測定値、コンテクストスイッチイベント、およびオーバヘッド測定値に基づいて、例えば方法２００の動作２０８実行の一部として、コード部分を実行する際にプロセッサが消費する実時間を決定する方法７００の一例を示す流れ図である。方法７００は、コード部分を実行する際にプロセッサが消費する実時間を決定する方法の単なる一例示的実施形態に過ぎず、本発明の範囲を制限することを意図したものではない。このような方法については、例えば方法７００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲内に含まれることが意図される。方法７００およびその各動作を、図８に関して後で説明するシステム８００の１つまたは複数の要素を使用して実装することができる。
【００５１】
動作７０２で、コード部分の経過時間を表す区間をタイマ測定値から決定することができる。例えば、１組のタイマ測定値（例えば、動作２０２で記録されたタイマ測定値）とスレッド識別子が与えられると、識別されたスレッドのコード部分の経過時間を表す時間区間を決定することができる。
【００５２】
例えば、表４００で提供された情報を使用すると、スレッドＩＤの１を有するスレッドは図３に示されたスレッド３００を表しており、動作７０２は以下を含むことができる。スレッド１に対応していない表４００の情報要素（例えば、情報要素４１０、４１２、４１４、および４１８）を削除することができる。また、残りの情報要素は時間値フィールド４０２を用いてソートすることができる。ソートされた情報要素によって示される最も古い時間値と最も新しい時間値を選択して、それぞれ経過時間区間の開始時間および終了時間を定義することができる。例えば、動作７０２を表４００の各情報要素に適用することによって、（９００，１５５０）の経過時間区間を得ることができる。動作７０２は、図８に関連して以下で説明する経過時間区間生成器８３０によって実施することもできる。
【００５３】
動作７０４で、タイマ測定のオーバヘッドを表す１組の区間をタイマ測定値およびオーバヘッド測定値、例えばそれぞれ動作２０２および２０６で記録され取得されたタイマ測定値およびオーバヘッド測定値などから決定することができる。すなわち、問題のスレッドに対応する各タイマ測定に関係するオーバヘッド時間を決定し、区間として表現することができる。図３、４、および６の例を用いると、動作７０４は、最初にスレッド１に対応していない表５００の情報要素を削除し、残りの情報要素を時間値フィールド５０２によってソートすることを含むことができる。スレッド１に対応する各情報要素ごとに、イベントフィールド４０６で識別されたイベントに関連するオーバヘッドを表６００から決定することができる。例えば、情報要素５０８は、関数入口イベントタイプである関数Ｆ（）に入るイベントに対応している。表６００の情報要素６０６は、関数入口イベントタイプに関連するオーバヘッドが３プロセッササイクルであることを示す。次いで、オーバヘッド区間は、（時間値、時間値＋オーバヘッド時間）として定義することができる。したがって、情報要素４０８に対して、オーバヘッド区間（９００，９０３）を生成することができる。
【００５４】
他の例として、情報要素４２０は出口関数Ｇ（）イベントを指定する。このイベントは関数出口イベントタイプを有する。表６００の情報要素６０８は、関数出口イベントタイプが２プロセッササイクルのオーバヘッドを有することを示す。したがって、動作７０２には情報要素４２０から（１５００，１５０２）のオーバヘッド区間を生成することを含めることができる。動作７０４が、ソートされた情報要素（すなわち、問題のスレッドに対応する情報要素）によって指定された各時間のうちの最新の時間を指定する時間測定情報要素に対するオーバヘッド区間を決定する動作を含まないことがあることを理解されたい。この情報要素は動作７０４から除外することができる。なぜならば、この測定時間に対応するオーバヘッド時間は、プロセッサがコード部分を実行する際に消費する実時間に対してオーバヘッドをまったく追加しないからである。すなわち、この最新の時間測定値は経過時間の終了を指示する。したがって、この終了時間測定値を取得する際のオーバヘッドは記録された終了時間それ自体の後に生じるので、アクティブ時間に影響を与えないことになる。
【００５５】
したがって、表４００と６００の各情報要素に対して動作７０４を実施することにより、１組のオーバヘッド区間｛（９００，９０３），（１２００，１２０３），（１５００，１５０２）｝が得られる。
【００５６】
動作７０６で、１組のスイッチアウト区間はコンテクストスイッチイベント、例えば動作２０４で記録されたコンテクストスイッチイベントなどから決定することができる。スイッチアウト区間は、経過時間内で、プロセッサがそのコード部分のスレッド以外のスレッドを実行する間の区間を表す。例えば、図１のタイミング図１００では、グラフ１０６が３ｍｓから６ｍｓまでのスイッチアウト区間を示している。
【００５７】
図５の表５００の例を使用してスレッド１の１組のスイッチアウト区間を決定する際に、フィールド５０４または５０６のどちらかでスレッド１を参照していない表５００の情報要素は削除される。残りのコンテクストスイッチ情報要素は、時間フィールド５０２によってソートすることができる。（例えば、情報要素５０８および５１６によって示されるコンテクストスイッチイベントなど）スレッド１から他のスレッドへの切換えに対応する各コンテクストスイッチイベント（すなわち、「スイッチアウトイベント」）を識別することができる。これらの各スイッチアウトイベントに対して、スレッド１にスイッチバックされる対応するコンテクストスイッチイベント（すなわち，スイッチインイベント）を識別することもできる。情報要素５０８および５１６によって示されたスイッチアウトイベントに対して、対応するスイッチインイベントは情報要素５１４および５１８によって示されるイベントとして識別される。各スイッチアウトイベント／スイッチインイベント対によってスイッチアウト区間を定義することができる。したがって、表５に示されたコンテクストスイッチイベントに対して動作７０６を実施することにより、１組のスイッチアウト区間｛（１０００，１１９０），（１２２５，１４１１）｝を得ることができる。
【００５８】
動作７０８において、コード部分の実行の際にプロセッサによって消費される実時間量は、経過時間、１組のオーバヘッド区間、および１組のスイッチアウト区間から決定することができる。例えば、すべてのオーバヘッド区間およびすべてのスイッチアウト区間によって定義される累積時間を経過時間から減算することによってコード部分のアクティブ時間を生成することができる。すなわち、アクティブ時間＝経過時間−（総オーバヘッド区間＋総スイッチアウト区間）となる。
【００５９】
上述の動作７０２、７０４、および７０６から得られた例を使用すると、スレッド３００のコード部分３０２のアクティブ時間は次式で得られる、すなわち
【００６０】
アクティブ時間＝６５０−［（９００，９０３）＋（１２００，１２２３）＋（１５００，１５０２）＋（１０００，１１９０）＋（１２２５，１４１１）］
＝６５０−（３＋３＋２＋１９０＋１８６）
＝６５０−３８４
＝２６６
【００６１】
したがって、方法７００を図３〜６で提供された情報に適用することによって、プロセッサがコード部分３０２を実行する際に消費する実時間として２６６プロセッササイクルという値が得られたことになる。
【００６２】
方法７００は追加の動作を含むことができる。さらに、各動作は他の順序で実施することができること、および／または１つまたは複数の動作を少なくとも部分的には直列もしくは並行に実施することができることから、方法７００の一部として実施される動作の順序は図７に例示された順序に限定されるものではない。例えば、動作７０２〜７０６の動作はいずれも、先に、後に、または相互に並行して実施することができる。
【００６３】
方法２００および７００、それらの諸動作、ならびにそれらの方法および動作についての様々な実施形態および変形形態を、個別に、または組み合わせて、例えば不揮発記録媒体、集積回路素子、またはそれらの組合せなど１つまたは複数のコンピュータ可読媒体上に有形に実施されたコンピュータ可読信号によって定義することができる。コンピュータ可読媒体はコンピュータによってアクセスできる任意の使用可能媒体であっても良い。限定の意味ではなく例として、コンピュータ可読媒体にはコンピュータ記憶媒体と通信媒体を含めることができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実装された、揮発性および不揮発性、リムーバブルおよび非リムーバブルの媒体が含まれる。コンピュータ記憶媒体には、これに限定されるものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術製品、ＣＤ−ＲＯＭ、ＤＶＤ（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋｓ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、他の種類の揮発性および不揮発性メモリ、所望の情報を格納するために使用可能でありかつコンピュータによってアクセス可能な他の任意の媒体、あるいは上記媒体の任意の適切な組合せが含まれる。
【００６４】
通信媒体は一般に、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどを、搬送波または他の伝送機構などの変調データ信号の形で実施し、いずれかの情報配送媒体を含むものである。「変調データ信号」という用語は、情報を信号中に符号化するように設定または変更された１つまたは複数の信号特性を有する信号を意味する。限定の意味ではなく例として、通信媒体には、有線ネットワーク、直接有線接続などの有線媒体、音響、ＲＦ、赤外、その他の無線媒体などの無線媒体、他の種類の通信媒体、および上記媒体の任意の適切な組合せが含まれる。
【００６５】
１つまたは複数のコンピュータ可読媒体上で実施されるコンピュータ可読信号は、例えば、１つまたは複数のプログラムの一部である命令を定義することができる。これらの命令は、コンピュータによって実行された結果として、（例えば、方法５００、方法７００、または前述の任意の動作など）本明細書に記載の１つまたは複数の機能、および／または様々な実施形態、変形形態、それらの組合せなどを実施するようにコンピュータに指示する。このような命令は、例えば、Ｊａｖａ（登録商標）、Ｊ#、Ｇｒａｐｈｉｃａｌ  Ｂａｓｉｃ、Ｃ、Ｃ#、Ｃ++、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ｅｉｆｆｅｌ、Ｂａｓｉｃ、ＣＯＢＯＬ、その他のプログラム言語、またはそれらの様々な組合せなど、複数のプログラム言語のいずれかで作成することができる。このような命令が実施されるコンピュータ可読媒体は、本明細書に記載のシステム８００、９００、および１０００のいずれかの１つまたは複数のコンポーネント上に配置すること、それらの１つまたは複数のコンポーネント上に分散させること、およびそれらのコンポーネント間で移動させることができる。
【００６６】
コンピュータ可読媒体は、その上に格納された命令を任意のコンピュータシステムリソース上にロードして本明細書で論じた本発明の諸態様を実行できるように、可搬型であっても良い。さらに、コンピュータ可読媒体上に格納された上述の命令は、ホストコンピュータ上で動作するアプリケーションプログラムの一部として実施される命令に限定されるものではないことを理解されたい。むしろ各命令は、上で論じた本発明の諸態様を実行するようにプロセッサをプログラムするために使用できる任意の種類のコンピュータコード（例えば、ソフトウェアまたはマイクロコード）として実施することができる。
【００６７】
本明細書に記載の諸機能を実施するコンピュータシステム、例えば図９および１０に関連して説明したコンピュータシステムの任意の単一コンポーネントまたは複数コンポーネントの集りは、一般にその様な機能を制御する１つまたは複数のコントローラと見なすことができることを理解されたい。この１つまたは複数のコントローラは、マイクロコードまたはソフトウェアを使用して前述の機能またはそれらの任意の適切な組合せを実装するようにプログラムされたプロセッサを使用する、専用のハードウェアおよび／またはファームウェアなどを用いた多くの方法で実装することができる。
【００６８】
図８は、コードの部分を実行する際にプロセッサによって消費される実時間を決定するためのシステム８００の一例を示すブロック図である。システム８００は、方法２００および／または方法７００、あるいはそれらの一部を実装することができる。システム８００は、コード部分を実行する際にプロセッサによって消費される実時間を決定するためのシステムの一例示的実施形態を示したものに過ぎず、本発明の範囲を制限することを意図したものではない。このようなシステムについては、例えばシステム８００の変形形態など他の多くの任意の実装が可能であり、それらは本発明の範囲に含まれることが意図される。
【００６９】
システム８００は、プロセッサ８１６、記録媒体８１８、アクティブ時間生成器８２８、その他のコンポーネントのうちの任意のものを含むことができる。プロセッサ８１６はマルチスレッド実行が可能であり、１つまたは複数のスレッド８０２、８０６、および８１０を並列に受信するように構成することができる。各スレッド８０２、８０６、および８１０は、それぞれ１つまたは複数のプローブ８０５、８０８、および８１２を含むことができる。スレッド８０２はコード部分８０４を含むことができ、コード部分８０４は１つまたは複数のプローブ８０５を含むことができる。また、そのコード部分８０４に対する実行のアクティブ時間を決定することができる。
【００７０】
プロセッサ８１６を、例えば図２の動作２０２に関連して上で説明したように、プローブ８０５、８０８、および８１２を実行し、それに応答して時間測定値８２０を記録するように構成することができる。さらに、プロセッサ８１６を、スレッド８０２、８０６、８１０のいずれかを含む複数のスレッド間でのコンテクストの切換えを表すコンテクストスイッチイベント８２２を生成するように構成することができる。プロセッサ８１６は、例えば図２の動作２０４に関連して前述したように、１つまたは複数のＡＰＩコール８１４の処理に応答してコンテクストスイッチイベント８２２を記録することができる。例えば、プロセッサ８１６はＷｉｎｄｏｗｓ（登録商標）ＮＴオペレーティングシステムによって制御することができる。Ｗｉｎｄｏｗｓ（登録商標）ＮＴは上述のＥＴＷ  ＡＰＩを用いてコンテクストスイッチイベントを記録する。記録媒体８１８はまた、オーバヘッド測定値８２４をその上に記録させることもできる。
【００７１】
アクティブ時間生成器８２８は、タイマ測定値８２０、コンテクストスイッチイベント８２２、およびオーバヘッド測定値８２４に基づいて、所与のスレッドのアクティブ時間８４４を生成することができる。アクティブ時間生成器８２８は、経過時間区間生成器８３０、スイッチアウト区間生成器８３４、オーバヘッド区間生成器８３８、アクティブ時間エンジン８４２、他のコンポーネントなどから任意のものを含むことができる。
【００７２】
経過時間区間生成器８３０を、例えば動作７０２に関して上述したように、タイマ測定値８２０およびスレッドＩＤ８２６を受信し、経過時間区間８３２を生成するように構成することができる。
【００７３】
スイッチアウト区間生成器８３４を、例えば図７の動作７０４に関連して上述したように、スレッドＩＤ８２６およびコンテクストスイッチイベント８２２を受信し、スイッチアウト区間８３６を生成するように構成することができる。
【００７４】
オーバヘッド区間生成器８３８を、例えば動作７０６に関連して上述したように、スレッドＩＤ８２６、タイマ測定値８２０、およびオーバヘッド測定値８２４を受信し、オーバヘッド区間８４０を生成するように構成することができる。
【００７５】
アクティブ時間エンジン８４２を、経過時間区間８３２、スイッチアウト区間８３６、およびオーバヘッド区間８４０を受け取り、プロセッサ８１６がコード部分８０４を実行する際に消費される実時間を表すアクティブ時間８４４を生成するように構成することができる。アクティブ時間エンジン８４２を、動作７０８に関して上述したような方法でアクティブ時間８４４を生成するように構成することができる。
【００７６】
システム８００およびそのコンポーネントを、ソフトウェア（例えば、Ｃ、Ｃ#、Ｃ++、Ｊａｖａ（登録商標）、またはそれらの組合せ）、ハードウェア（例えば、１つまたは複数の特定用途向け集積回路）、ファームウェア（例えば、電気的にプログラムされたメモリ）、あるいはそれらの任意の組合せなど、多様な技術のいずれかを用いて実装することができる。システム８００の１つまたは複数のコンポーネントは単一の装置（例えば、コンピュータ）上に配置することができる。あるいは、１つまたは複数のコンポーネントを、分離した個別の装置上に配置することもできる。さらに、各コンポーネントを複数の装置上に分散させ、１つまたは複数の装置を相互接続することもできる。
【００７７】
さらに、システム８００の１つまたは複数のコンポーネントを含む１つまたは複数の各装置上で、各コンポーネントはシステム上の１つまたは複数の場所に配置することができる。例えば、これらのシステムの各コンポーネントの様々な部分は、装置上のメモリ（例えば、ＲＡＭ、ＲＯＭ、ディスクなど）の様々な領域に配置しても良い。このような１つまたは複数の各装置には、主要なコンポーネントとして、１つまたは複数のプロセッサ、メモリシステム、ディスク記憶システム、１つまたは複数のネットワークインタフェース、あるいは様々なコンポーネントを相互接続する１つまたは複数のバスまたは他の内部通信リンクなど、複数の既知のコンポーネントを含めることができる。システム１００、およびそのコンポーネントを、コンピュータシステム、例えば以下で図９および１０に関連して説明するようなコンピュータシステムを用いて実装することができる。
【００７８】
本発明による様々な実施形態を、１つまたは複数のコンピュータシステム上に実装することができる。このようなコンピュータシステムは、例えば、インテル社（Ｉｎｔｅｌ）のＰＥＮＴＩＵＭ（登録商標）型プロセッサ、モトローラ社（Ｍｏｔｏｒｏｌａ）のＰｏｗｅｒＰＣ、サン社（Ｓｕｎ）のＵｌｔｒａＳＰＡＲＣ、ヒューレットパッカード社（Ｈｅｗｌｅｔｔ−Ｐａｃｋａｒｄ）のＰＡ−ＲＩＳＣプロセッサ、アドバンスドマイクロデバイセズ社（Ａｄｖａｎｃｅｄ−Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ  （ＡＭＤ））から市販されている様々なプロセッサのいずれか、または他の任意のプロセッサなどをベースにした汎用コンピュータであっても良い。本発明の様々な実施形態を実装するために、１つまたは複数の任意の種類のコンピュータシステムを使用できることを理解されたい。
【００７９】
本発明の一実施形態による汎用コンピュータシステムは、上記の１つまたは複数の機能を実施するように構成される。このシステムが他の機能を実施することができること、また本発明がある種の特定の機能または機能セットを有するように制限されるものではないことを理解されたい。
【００８０】
例えば、本発明の様々な態様を、図９に示されたような汎用コンピュータシステム９００上で実行される専用のソフトウェアとして実装することができる。コンピュータシステム９００は、１つまたは複数のメモリ装置９０４、例えばディスクドライブ、メモリ、データを格納するための他の装置などに接続されたプロセッサ９０３を含むことができる。メモリ９０４は一般に、コンピュータシステム９００の動作中にプログラムやデータを格納するために使用される。コンピュータシステム９００の各コンポーネントを、相互接続機構９０５によって結合することができる。この相互接続機構９０５は、（例えば、同一のマシン内に組み込まれた各コンポーネント間の）１つまたは複数のバスおよび／または（例えば、分離した個別のマシン上に存在するコンポーネント間の）ネットワークを含むことができる。相互接続機構９０５により、システム９００のシステムコンポーネント間で情報（例えば、データ、命令など）を交換することが可能になる。コンピュータシステム９００はまた、例えばキーボード、マウス、トラックボール、マイクロホン、タッチスクリーンなど１つまたは複数の入力装置９０２、および、例えば印刷装置、表示スクリーン、スピーカなど１つまたは複数の出力装置９０１を含むことができる。さらに、コンピュータシステム９００は、（相互接続機構９０５に追加して、またはその代替として）コンピュータシステム９００を通信ネットワークに接続する１つまたは複数のインタフェース（図示せず）を含むこともできる。
【００８１】
図１０により詳細に示されているが、記憶システム９０６は一般に、コンピュータ可読かつ書込み可能な不揮発性記録媒体１００１を含む。この記録媒体１００１には、プロセッサによって実行されるプログラム、またはそのプログラムによって処理される媒体１００１上もしくは中に格納された情報を定義する信号が格納される。この媒体は、例えばディスクまたはフラッシュメモリであっても良い。動作に際して、通常はプロセッサによって不揮発性記録媒体１００１から他のメモリ１００２にデータが読み込まれる。他のメモリ１００２は、媒体１００１よりも、プロセッサによる情報へのより高速なアクセスを可能にする。このメモリ１００２は一般に、ＤＲＡＭ（ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）またはＳＲＡＭ（ｓｔａｔｉｃ  ｍｅｍｏｒｙ）などの揮発性のランダムアクセスメモリである。メモリ１００２を、図示されているように記憶システム９０６中に配置することができる。あるいは、図示されていないがメモリシステム９０４に配置することもできる。プロセッサ９０３は一般に、集積回路メモリ９０４、１００２内でデータを操作し、処理が完了した後でそのデータを媒体１００１にコピーする。媒体１００１と集積回路メモリ素子９０４、１００２との間のデータ移動を管理するための多様な機構が知られているが、本発明はそれらに制限されるものではない。本発明は、特定のメモリシステム９０４または記憶システム９０６に制限されるものではない。
【００８２】
本発明の諸態様を、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せの形で実装することができる。さらに、このような方法、動作、システム、システム要素、およびそれらのコンポーネントを、上記のコンピュータシステムの一部として、または独立のコンポーネントとして実装することができる。
【００８３】
コンピュータシステム９００は、本発明の様々な態様を実施することができるある種のコンピュータシステムの例として示されているが、本発明の諸態様は、図９に示されたようなコンピュータシステムに実装されるように限定されるものではないことを理解されたい。本発明の様々な態様は、図９に示されたものとは異なるアーキテクチャまたはコンポーネントを有する１つまたは複数のコンピュータ上で実施することができる。
【００８４】
コンピュータシステム９００は、高水準コンピュータプログラム言語を使用してプログラム可能な汎用コンピュータシステムであっても良い。コンピュータシステム９００を、専用にプログラムされた専用ハードウェアを用いて実装することもできる。コンピュータシステム９００において、プロセッサ９０３は一般に、インテル社から入手可能な周知のＰｅｎｔｉｕｍ（登録商標）相当のプロセッサなど市販のプロセッサである。他の多くのプロセッサも使用可能である。このようなプロセッサは通常、例えば本件特許出願人から入手可能なＷｉｎｄｏｗｓ（登録商標）９５、Ｗｉｎｄｏｗｓ（登録商標）９８、Ｗｉｎｄｏｗｓ（登録商標）  ＮＴ、Ｗｉｎｄｏｗｓ（登録商標）２０００（Ｗｉｎｄｏｗｓ（登録商標）ＭＥ）、またはＷｉｎｄｏｗｓ（登録商標）ＸＰオペレーティングシステム、アップルコンピュータ社（Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ）から入手可能なＭＡＣ  ＯＳ  Ｓｙｓｔｅｍ  Ｘ、サンマイクロシステムズ社（Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ）から入手可能なＳｏｌａｒｉｓオペレーティングシステム、様々なソースから入手可能なＬｉｎｕｘ、様々なソースから入手可能なＵＮＩＸ（登録商標）などのオペレーティングシステムを実行する。また、他の任意の様々なオペレーティングシステムも使用可能である。
【００８５】
プロセッサとオペレーティングシステムは共同して、高水準プログラミング言語でアプリケーションプログラムが記述されるコンピュータプラットホームを定義する。本発明が、特定のコンピュータシステムプラットフォーム、プロセッサ、オペレーティングシステム、またはネットワークに限定されるものではないことを理解されたい。また、当業者にとっては、本発明が特定のプログラミング言語またはコンピュータシステムに限定されるものではないこと、ならびに他の適切なプログラミング言語および他の適切なコンピュータシステムが使用できることは明白であろう。
【００８６】
このコンピュータシステムの１つまたは複数の部分を、通信ネットワークに結合された１つまたは複数のコンピュータシステム（図示せず）上に分散させることができる。これらのコンピュータシステムもまた、汎用のコンピュータシステムであっても良い。例えば、本発明の様々な態様を、１つまたは複数のクライアントコンピュータにサービスを提供する（例えば、サーバ）か、または分散システムの一部として全体のタスクを実施するように構成された１つまたは複数のコンピュータシステムの間に分散させることができる。例えば、本発明の様々な態様はクライアントサーバシステム上で実施することができる。このクライアントサーバシステムは１つまたは複数のサーバシステム間に分散されたコンポーネントを含み、各サーバシステムは本発明の様々な実施形態に従って様々な機能を実施する。これらの各コンポーネントは、実行可能コード、中間（例えば、ＩＬ）コード、または解釈済み（例えば、Ｊａｖａ（登録商標））コードのことがあり、通信プロトコル（例えば、ＴＣＰ/ＩＰ）を用いた通信ネットワーク（例えば、インターネット）を介して通信する。
【００８７】
本発明が、どのような特定のシステムまたはシステムグループ上で実行されるようにも制限されないこと、またどのような特定の分散アーキテクチャ、ネットワーク、または通信プロトコルにも制限されないことを理解されたい。
【００８８】
本発明の様々な実施形態を、ＳｍａｌｌＴａｌｋ、Ｊａｖａ（登録商標）、Ｊ＃（Ｊシャープ）、Ｃ++、Ａｄａ、またはＣ＃（Ｃシャープ）などのオブジェクト指向プログラミング言語を使用してプログラムすることができる。他のオブジェクト指向プログラミング言語を使用することもできる。あるいは、機能プログラミング言語、スクリプトプログラミング言語および／または論理プログラミング言語を使用することもできる。本発明の様々な態様を、（例えば、ＨＴＭＬ、ＸＭＬ、または他の形式、すなわちブラウザプログラムのウィンドウで閲覧したときにグラフィカルユーザインタフェース（ＧＵＩ）の態様を表示するかまたは他の機能を実施する形式で生成された文書などの）非プログラム環境で実装することもできる。本発明の様々な態様を、プログラム要素もしくは非プログラム要素、またはそれらの任意の適切な組合せとして実装することができる。さらに、本発明の様々な実施形態を、本件特許出願人から市販されているＭｉｃｒｏｓｏｆｔ.Ｎｅｔテクノロジーを用いて実装することもできる。
【００８９】
本発明のいくつかの例示的実施形態についてここまで説明してきたが、前述の実施形態が単なる例示であり限定を意味するものではないこと、すなわち例示のためだけに提示したものであることは当業者には明らかなはずである。当業者には、多くの修正形態および他の例示的実施形態が可能であるが、それらは本発明の範囲内に含まれることが企図される。具体的には、本明細書で提示された例示の多くは方法動作またはシステム要素の特定の組合せを含むが、そのような動作および要素は他の方法で組み合わせて同じ目的を達成することができることを理解されたい。ある実施形態に関してのみ論じた動作、要素、および機能は、他の実施形態における類似の役割から除外されることを意図したものではない。さらに、添付の特許請求の範囲に記載の１つまたは複数のミーンズプラスファンクション制約（ｍｅａｎｓ−ｐｌｕｓ−ｆｕｎｃｔｉｏｎ  ｌｉｍｉｔａｔｉｏｎｓ）に関して、それらの手段は記載の機能を実施するための本明細書で開示した手段に限定されることを意図したものではなく、記載の機能を実施するための、現在知られているまたは今後開発されるあらゆる等価な手段がその範囲の中に包含されることを意図したものである。
【００９０】
特許請求の範囲における、クレーム要素を修飾する「第１の」、「第２の」、「第３の」など順序を示す用語の使用は、それ自体では、他のクレーム要素に対するあるクレーム要素の、またはある方法の動作が実施される時間的な順序の優先度、先行性、または順序を暗示するものではなく、各クレーム要素を区別するために、ある名前を有するあるクレーム要素と（順序を示す用語の使用を除いて）同じ名前を有する他の要素とを区別するための単なるラベルとして使用されるものである。
【図面の簡単な説明】
【００９１】
【図１】本発明のいくつかの実施形態による、コード部分の実行に関する経過時間およびアクティブ時間の一例を示すタイミング図である。
【図２】本発明のいくつかの実施形態による、コード部分を実行する際にプロセッサが消費した実時間を決定する方法の一例を示す流れ図である。
【図３】本発明のいくつかの実施形態による、スレッドのコードの一例を示す擬似コードを示す図である。
【図４】本発明のいくつかの実施形態による、タイマ測定値を表す情報要素からなる表の一例を示す構成図である。
【図５】本発明のいくつかの実施形態による、コンテクストスイッチイベントを表す情報要素からなる表の一例を示す構成図である。
【図６】本発明のいくつかの実施形態による、オーバヘッド測定値を表す複数の情報要素を含む表の一例を示す構成図である。
【図７】本発明のいくつかの実施形態による、タイマ測定値、コンテクストスイッチイベント、およびオーバヘッド測定値に基づいて、コード部分を実行する際にプロセッサが消費する実時間を決定する方法の一例を示す流れ図である。
【図８】本発明のいくつかの実施形態による、コード部分を実行する際にプロセッサが消費する実時間を決定するシステムの一例を示す構成図である。
【図９】本発明のいくつかの実施形態による、本発明のいくつかの実施形態を実装することができるコンピュータシステムの一例を示す構成図である。
【図１０】本発明のいくつかの実施形態による、本発明のいくつかの実施形態を実装するためのコンピュータシステムの一部として使用することができる記憶システムの一例を示す構成図である。
【符号の説明】
【００９２】
１００  タイミング図
１０２  グラフ
１０４  グラフ
１０６  グラフ
１０８  グラフ
１１０  グラフ
１１２  時間軸
２００  方法
２０２  タイマ測定値を記録する
２０４  コンテクストスイッチイベントを記録する
２０６  オーバヘッド測定値を取得する
２０８  タイマ測定値、コンテクストスイッチイベント、およびオーバヘッド測定値に基づいて実時間を決定する
３００  スレッド
３０２  コード部分
３０４  位置
３０６  位置
３０８  位置
３１０  位置
４００  表
４０２  時間値
４０４  スレッドＩＤ
４０６  イベント
４０８  情報要素
４１０  情報要素
４１２  情報要素
４１４  情報要素
４１６  情報要素
４１８  情報要素
４２０  情報要素
４２２  情報要素
５００  表
５０２  時間値
５０４  古いスレッドＩＤ
５０６  新しいスレッドＩＤ
５０８  情報要素
５１０  情報要素
５１２  情報要素
５１４  情報要素
５１６  情報要素
５１８  情報要素
６００  表
６０２  イベントタイプ
６０４  オーバヘッド
６０６  情報要素
６０８  情報要素
７００  方法
７０２  タイマ測定値から経過時間を表す区間を決定する
７０４  タイマ測定値とオーバヘッド測定値からタイマ測定のオーバヘッドを表す１組の区間を決定する
７０６  コンテクストスイッチイベントから１組のスイッチアウト区間を決定する
７０８  経過時間、１組のオーバヘッド区間、および１組のスイッチアウト区間から、コード部分を実行する際にプロセッサによって消費される実時間量を決定する
８００  システム
８０２  スレッド１
８０４  コード部分
８０５  プローブ
８０６  スレッド２
８０８  プローブ
８１０  スレッド３
８１２  プローブ
８１４  ＡＰＩコール
８１６  プロセッサ
８１８  記録媒体
８２０  タイマ測定値
８２２  コンテクストスイッチイベント
８２４  オーバヘッド測定値
８２６  スレッドＩＤ
８２８  アクティブ時間生成器
８３０  経過時間区間生成器
８３２  経過時間区間
８３４  スイッチアウト区間生成器
８３６  スイッチアウト区間
８３８  オーバヘッド区間生成器
８４０  オーバヘッド区間
８４２  アクティブ時間エンジン
８４４  アクティブ時間
９００  システム
９０１  出力装置
９０２  入力装置
９０３  プロセッサ
９０４  メモリ
９０５  相互接続機構
９０６  記憶装置
１００１  記録媒体
１００２  記憶システムメモリ
【図１】
2006260542.tif 000003
【図２】
2006260542.tif 000004
【図３】
2006260542.tif 000005
【図４】
2006260542.tif 000006
【図５】
2006260542.tif 000007
【図６】
2006260542.tif 000008
【図７】
2006260542.tif 000009
【図８】
2006260542.tif 000010
【図９】
2006260542.tif 000011
【図１０】
2006260542.tif 000012