JP2012531642A - 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング - Google Patents

多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング Download PDF

Info

Publication number
JP2012531642A
JP2012531642A JP2012516649A JP2012516649A JP2012531642A JP 2012531642 A JP2012531642 A JP 2012531642A JP 2012516649 A JP2012516649 A JP 2012516649A JP 2012516649 A JP2012516649 A JP 2012516649A JP 2012531642 A JP2012531642 A JP 2012531642A
Authority
JP
Japan
Prior art keywords
thread
sampling
virtual machine
execution
trace information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012516649A
Other languages
English (en)
Other versions
JP5520371B2 (ja
Inventor
レビン、フランク、エリオット
カイパー、キーン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2012531642A publication Critical patent/JP2012531642A/ja
Application granted granted Critical
Publication of JP5520371B2 publication Critical patent/JP5520371B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリングのための機構を提供すること。
【解決手段】 イベントの発生に応答して、データ処理システムのプロセッサ上で実行されている複数の実行スレッドに関連付けられた複数のサンプリング・スレッドが起動される。各サンプリング・スレッドについて、1つ又は複数の対象仮想マシンに関する対応する実行スレッドの実行状態が判断される。各サンプリング・スレッドについて、対応する実行スレッドの実行状態に基づき、対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すか否かが判断される。各サンプリング・スレッドについて、対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すとの判断に応答して、トレース情報が仮想マシンから取り出される。
【選択図】 図3

Description

本出願は、一般に、改善されたデータ処理装置及び方法に関し、より具体的には、多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリングのための機構に関する。
データ処理システム、及びデータ処理システム内で実行されるアプリケーションの性能の解析及び強化において、データ処理システム内のどのソフトウェア・モジュールがシステム・リソースを使用しているかを知ることは有用である。データ処理システムの効果的な管理及び強化には、種々のシステム・リソースがいつどのように使用されているかを知ることが必要である。データ処理システムを監視及び検査して、データ処理システム内で種々のソフトウェア・アプリケーションが実行される際のリソース消費を判断するために、パフォーマンス・ツールが使用される。例えば、パフォーマンス・ツールは、あるデータ処理システム内で最も頻繁に実行されるモジュール及び命令を識別することができ、又は、最大量のメモリを割り当てるモジュール若しくは最多のI/O要求を実行するモジュールを識別することができる。ハードウェア・パフォーマンス・ツールは、システム内に組み込むことができ、又は後の時点でシステムに追加することができる。
1つの公知のソフトウェア・パフォーマンス・ツールは、トレース・ツールである。トレース・ツールは、実行中のプログラムについての実行フローを示すトレース情報を提供するために、複数の技術を用いることができる。1つの技術は、ある種のイベントが発生する都度ログを取ることにより特定の命令シーケンスの動向を把握する、所謂イベント・ベースのプロファイリング技術である。例えば、トレース・ツールは、モジュール、サブルーチン、メソッド、関数又はシステム・コンポーネントへと入る(エントリ)毎に、及びこれらから出る(エグジット)毎にログを取ることができる。あるいは、トレース・ツールは、リクエスタ、及び、各メモリ割当て要求に対して割り当てられたメモリの量のログを取ることができる。典型的には、そのような各イベントついて、タイム・スタンプが付された記録が作成される。任意のコード・セグメントの実行、I/O又はデータ伝送の開始及び完了、並びにその他の多くの対象イベントをトレースするために、エントリ−エグジットの記録と同様の、対応する記録の対もまた使用される。
種々のコンピュータ・ファミリによって生成されるコードの性能を改善するには、プロセッサがコードを実行するに際してどこで時間が消費されるかを判断することが必要となる場合が多く、このような努力は、コンピュータ処理技術分野においては「ホット・スポット」の探索として一般に知られている。理想的には、コードの改善によって最も利益を得るであろう領域に注意を集中するために、このようなホット・スポットを命令及び/又はコードのソース・ラインのレベルで分離することが望まれる。
もう1つのトレース技術は、プログラムの実行フローを定期的にサンプリングして、プログラムが大量の時間を費やしているように見えるプログラム中の特定の位置を識別することを伴う。この技術は、アプリケーション又はデータ処理システムの実行に一定の間隔で定期的に割込みをかけるという発想に基づく、所謂サンプリング・ベースのプロファイリングである。各々の割込みにおいて、所定の時間にわたって又は所定の対象イベント数にわたって、情報が記録される。例えば、プロファイリング中のより大きなプログラムの中の実行可能部分である現在実行中のスレッドのプログラム・カウンタを、各々の時間間隔ごとに記録することができる。これらの値は、後処理時間においてそのデータ処理システムについての負荷マップ及び記号テーブル情報と照合して分析することができ、この解析から、どこで時間が消費されているかについてのプロファイルを得ることができる。
公知のサンプリング型トレース技術は、一度に1つの実行環境に対してトレースを実施することに限定されている。即ち、プログラムの実行フローのサンプリングは、単一のオペレーティング・システム及び仮想マシン実行環境に関して実施される。しかしながら、近年、アプリケーション・ミドルウェアは、種々のアプリケーションをサポートするために多重仮想マシンを使用する必要が増してきた。公知のサンプリング型トレース技術を用いた場合、各々の個別の仮想マシン実行環境を一度に1つずつ逐次的に個別にサンプリングしなければならない。これにより、トレース及び解析にかかる時間が長くなると共に、もたらされるトレース情報が他の手法で得られるトレース情報ほど正確ではなくなることがある。
1つの例示的な実施形態において、データ処理システムにおいて、データ処理システムにおけるコンピュータ・コードの実行をプロファイリングするための時間ベース・コンテキスト・サンプリングを実施するための方法が提供される。本方法は、イベントの発生に応答して、データ処理システムのプロセッサ上で実行されている複数の実行スレッドに関連付けられた複数のサンプリング・スレッドを起動することを含む。本方法は、各サンプリング・スレッドについて、1つ又は複数の対象仮想マシンに関する対応する実行スレッドの実行状態を判断することをさらに含む。さらに、本方法は、各サンプリング・スレッドについて、対応する実行スレッドの実行状態に基づき、対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきか否かを判断することを含む。さらにまた、本方法は、各サンプリング・スレッドについて、対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すとの判断に応答して、トレース情報を仮想マシンから取り出すことを含む。
他の例示的な実施形態において、コンピュータ可読プログラムを有するコンピュータ使用可能又は可読媒体を含むコンピュータ・プログラム製品が提供される。コンピュータ可読プログラムは、コンピュータ・デバイス上で実行されたとき、コンピュータ・デバイスに、本方法の例示的な実施形態に関して上記で概説した種々の動作のうちの1つ又はそれらの組み合わせを実施させる。
さらに別の例示的な実施形態において、システム/装置が提供される。システム/装置は、1つ又は複数のプロセッサと、1つ又は複数のプロセッサに結合されたメモリとを含むことができる。メモリは命令を含むことができ、命令は、1つ又は複数のプロセッサにより実行されたとき、1つ又は複数のプロセッサに、本方法の例示的な実施形態に関して上記で概説した種々の動作のうちの1つ又はそれらの組み合わせを実施させる。
本発明のこれら及び他の特徴並びに利点は、本発明の例示的な実施形態についての以下の詳細な説明の中で説明され、又はこれを考慮すれば当業者には明らかとなるであろう。
本発明の好ましい実施形態は、例示の目的のみで、添付の図面を参照して説明される。
例示的な実施形態を実装することができるデータ処理システムの絵画的表現である。 例示的な実施形態の態様を実装することができるデータ処理システムの要素の例示的なブロック図である。 1つの例示的な実施形態による、コンピュータ・プログラムの実行をプロファイリングするために用いられるコンポーネントを示す例示的な図である。 1つの例示的な実施形態による、コール・スタック情報の取得に用いられるコンポーネントを示す図である。 1つの例示的な実施形態による、コール・ツリーの図である。 1つの例示的な実施形態による、ノード内の情報を示す図である。 1つの例示的な実施形態による、ターゲット・スレッドについてのコール・スタック情報を取得するための例示的なプロセスの概要を示すフローチャートである。 1つの例示的な実施形態による、コール・スタック情報を収集するためのサンプリング・スレッドにおける例示的なプロセスの概要を示すフローチャートである。 1つの例示的な実施形態による、割込みの受信に応答してプロセッサ上のサンプリング・スレッドに通知するための例示的なプロセスの概要を示すフローチャートである。 例示的な一実施形態による、サンプリング・スレッドについての例示的なプロセスの概要を示すフローチャートである。 例示的な一実施形態による、多重仮想マシンと関連した多重プロセッサにより実行される多重スレッドに関してコンピュータ・プログラムのプロファイリングを実施するためのシステムの例示的なブロック図である。 多重プロセッサ及び多重仮想マシンの多重スレッドがプロファイリングされる例示的な一実施形態による、サンプリング・スレッドの例示的な動作の概要を示すフローチャートである。
例示的な実施形態は、多重仮想マシン・サポートを有する、トレース・データの時間ベース・コンテキスト・サンプリングを提供するための機構を提供する。例示的な実施形態の機構によれば、多重仮想マシン実行環境を、種々の仮想マシンにアクセスする種々のプロセッサに関連付けられた複数のサンプラ・スレッドを用いて同時にサンプリングすることができる。さらに、これらのサンプラ・スレッドの各々を起動させ、取得すべきトレース・データ又は情報がもしあればどれを取得するのかを判断するための機構が提供される。したがって、トレース情報のサンプリングを要求するデバイス・ドライバに対する呼出しを生じさせる割込み又はその他のイベントが生じる度毎に、プロファイラ内の各サンプリング・スレッドが起動され、そして、サンプリング・スレッドが起動された時点の実行スレッドの状態に応じてトレース情報が取得され、特定のスレッドのためのトレース・データ・ファイル内に格納される。
取得すべきトレース・データが存在するか否か、そして存在する場合はどのトレース・データを取得すべきかについての判断は、サンプラ・スレッドが起動された時点で、実行環境内の対応する実行スレッドの実行がどの状態にあるかに基づいて行うことができる。例えば、実行スレッドが仮想マシンに現在アクセス中の時点でサンプラ・スレッドが起動された場合には、コール・スタック情報を収集することができる。実行スレッドがガベージ・コレクション動作を実施している最中の時点でサンプラ・スレッドが起動された場合には、コール・スタック情報は収集しなくてもよい。実行スレッドの特定の実行状態に基づいていつどのようなトレース情報を収集すべきかを定義するために、種々の条件を確立することができる。
さらに、実行スレッドと仮想マシンとに関連したサンプラ・スレッドの使用に関する統計量の取得に使用するための種々のカウンタを設けることができる。これらのカウンタは、実行スレッドの実行状態の特定の条件と関連付けることができる。サンプラ・スレッドが起動され、それに対応する実行スレッドの状態がカウンタに関連付けられた条件に対応するたびごとに、対応するカウンタをインクリメントすることができる。これらのカウンタ値も同様にサンプリングすることができ、実行スレッドについてのトレース・データ・ファイルの一部として格納することができる。この情報を他のトレース情報と共に用いて、実行中の様々な時点における、そのデータ処理システムの実行環境におけるコンピュータ・プログラムの実行状態を詳述するレポートを生成することができる。この情報は、コンピュータ・プログラムの実行中の処理リソースの配分を識別するために用いることができる。
当業者であれば認識するように、本発明の実施形態は、システム、方法、又はコンピュータ・プログラム製品として具体化することができる。従って、本発明の実施形態は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又は、ソフトウェアの態様とハードウェアの態様とを組み合わせた実施形態の形を取ることができ、本明細書においてはこれらの全てを一般に、「回路」、「モジュール」又は「システム」と呼ぶことができる。さらに、本発明は、媒体内に具体化されたコンピュータ使用可能プログラム・コードを有する、いずれかの有形の表現媒体内に具体化されたコンピュータ・プログラムの形態をとることができる。
1つ又は複数のコンピュータ使用可能媒体又はコンピュータ可読媒体のいずれの組み合わせを用いることもできる。コンピュータ使用可能媒体又はコンピュータ可読媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線又は半導体のシステム、装置、デバイス又は伝搬媒体とすることができるが、これらに限定されるものではない。コンピュータ可読媒体のより具体的な例(非網羅的なリスト)として、以下のもの、すなわち、1つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラム可能読み出し専用メモリ(EPROM又はフラッシュメモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み出し専用メモリ(CDROM)、光記憶装置、インターネット又はイントラネットをサポートする伝送媒体、又は磁気記憶装置が挙げられる。プログラムが印刷された紙又は他の適切な媒体も、そのプログラムを例えば、その紙又は他の媒体の光学スキャンによって電子的にキャプチャし、次いで、必要に応じて、コンパイルし、解釈し、又はそれ以外の適切な手法で処理し、その後、コンピュータ・メモリ内に格納することができるので、コンピュータ使用可能媒体又はコンピュータ可読媒体はプログラムが印刷された紙又は別の適切な媒体とすることさえできることに留意されたい。本明細書の文脈内において、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスによって使用するため、又はこれらと関連して使用するために、プログラムを収納、保存、通信、伝搬、又は輸送することができるあらゆる媒体とすることができる。コンピュータ使用可能媒体は、コンピュータ使用可能なプログラム・コードが、ベースバンド内で又は搬送波の一部としてその中で具体化された、伝搬されるデータ信号を含むものとすることができる。コンピュータ使用可能プログラム・コードは、これらに限定されるものではないが、無線、有線、光ファイバ・ケーブル、及び無線周波数(RF)などを含むいずれかの適切な媒体を用いて伝送することができる。
本発明の実施形態における動作を実行するためのコンピュータ・プログラム・コードは、Java(商標)、SmallTalk(商標)、C++などのようなオブジェクト指向型プログラミング言語、及び、「C」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む、1つ又は複数のプログラミング言語のいずれかの組合せで記述することができる。プログラム・コードは、全体をユーザのコンピュータ上で実行することができ、スタンドアロン型のソフトウェア・パッケージとして部分的にユーザのコンピュータ上で実行することができ、一部をユーザのコンピュータ上で実行し、一部をリモート・コンピュータ上で実行することができ、又は、全体をリモート・コンピュータ若しくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)又は広域ネットワーク(WAN)を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続することができ、又は、(例えば、インターネット・サービス・プロバイダを用いるインターネットを通じて)外部コンピュータに対する接続を行うこともできる。さらに、プログラム・コードをサーバ又はリモート・コンピュータ上のコンピュータ可読ストレージ媒体上に具体化し、ネットワークを介して、リモート・コンピュータ又はユーザのコンピュータのコンピュータ可読ストレージ媒体に格納及び/又は実行のためにダウンロードすることができる。しかも、コンピュータ・システム又はデータ処理システムのいずれも、ネットワークを介してリモート・コンピュータ・システム又はデータ処理システムからプログラム・コードをダウンロードした後で、コンピュータ可読ストレージ媒体にプログラム・コードを格納することができる。
例示的な実施形態は、本発明の例示的な実施形態による方法、装置(システム)、及びコンピュータ・プログラム製品のフローチャート図及び/又はブロック図を参照して、以下で説明される。フローチャート図及び/又はブロック図の各ブロック、並びにフローチャート図及び/又はブロック図内のブロックの組合せは、コンピュータ・プログラム命令によって実装できることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに提供して、マシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実装するための手段を生成するようにすることができる。
これらのコンピュータ・プログラム命令を、コンピュータ又は他のプログラム可能データ処理装置に特定の様式で機能するように指示することができるコンピュータ可読媒体に格納して、それにより、そのコンピュータ可読媒体に格納された命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実装する命令手段を含む製品を製造するようにすることもできる。
コンピュータ・プログラム命令を、コンピュータ又は他のプログラム可能データ処理装置にロードして、コンピュータ又は他のプログラム可能データ処理装置上で一連の動作ステップを実施させてコンピュータ実装プロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図の1つ又は複数のブロック内で指定された機能/動作を実装するためのプロセスを提供するようにすることもできる。
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート又はブロック図内の各ブロックは、指定された論理機能を実装するための1つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に記された機能は、図面に記された順序とは異なる順序で行われることがあることにも留意すべきである。例えば、連続して図示された2つのブロックが実際には実質的に同時に実行されることもあり、又はこれらのブロックは、関与する機能に応じて、ときには逆順で実行されることもある。ブロック図及び/又はフローチャート図内の各ブロック、並びにブロック図及び/又はフローチャート図内のブロックの組み合わせは、指定された機能又は行為を実行する専用ハードウェア・ベースのシステム、又は専用のハードウェアとコンピュータ命令との組み合わせによって実装することができることにも留意されたい。
ここで、図、特に図1を参照して、例示的な実施形態を実装することができるデータ処理システムの絵画的表現が示される。図1に示されるように、コンピュータ100は、システム・ユニット102と、映像表示端末104と、キーボード106と、フロッピィドライブ及びその他のタイプの永続的及び取り外し可能なストレージ媒体を含むことができるストレージ・デバイス108と、マウス110とを含む。パーソナル・コンピュータ100には付加的な入力デバイスを含めることができる。付加的な入力デバイスの例は、例えば、ジョイスティック、タッチパッド、タッチ・スクリーン、トラックボール、及びマイクロフォンを含むことができる。
コンピュータ100は、ニューヨーク州アーモンク所在のInternational Business Machines Corporationの製品であるIBM(商標)eServer(商標)コンピュータ又はIntelliStation(商標)コンピュータなどのいずれかの適切なコンピュータ、又はいずれかの他のタイプのコンピュータ・デバイスとすることができる。図示された表現はパーソナル・コンピュータを示すが、他の実施形態を他のタイプのデータ処理システムに実装することができる。例えば、他の実施形態をネットワーク・コンピュータに実装することができる。コンピュータ100はまた、コンピュータ100内の動作中のコンピュータ可読媒体内に常駐するシステム・ソフトウェアにより実装することができるグラフィカル・ユーザ・インターフェース(GUI)を含むことが好ましい。
ここで図2を参照すると、本発明の例示的な実施形態によるデータ処理システムの図が示される。この説明例では、データ処理システム200は、プロセッサ・ユニット204と、メモリ206と、永続的ストレージ208と、通信ユニット210と、入力/出力(I/O)ユニット212と、ディスプレイ214との間の通信を提供する、通信ファブリック202を含む。
プロセッサ・ユニット204は、メモリ206にロードすることができるソフトウェアのための命令を実行する役目を果たす。プロセッサ・ユニット204は、特定の実装に応じて、1つ又は複数のプロセッサの組とすることも、マルチ・プロセッサ・コアとすることもできる。さらに、プロセッサ・ユニット204は、主プロセッサ又は制御プロセッサが主プロセッサと同一の又は異なる命令セットを用いる二次プロセッサ又はコプロセッサと共にシングル・チップ上に存在する1つ又は複数の異種プロセッサ・システムを用いて実装することができる。例示的な実施形態の機構を実装するのに用いることができる異種プロセッサ・システムの一例は、ニューヨーク州アーモンク所在のInternational Business Machines Corporationから入手可能なCell Broadband Engine(商標)である。別の説明例として、プロセッサ・ユニット204は、同じタイプの複数のプロセッサを含む対称型マルチ・プロセッサ(SMP)システムとすることができる。
これらの例におけるメモリ206は、例えば、ランダム・アクセス・メモリとすることができる。永続的ストレージ208は、特定の実装に応じて種々の形態を取ることができる。例えば、永続的ストレージ208は、1つ又は複数のコンポーネント又はデバイスを含むことができる。例えば、永続的ストレージ208は、ハード・ドライブ、フラッシュメモリ、書換え可能光ディスク、書換え可能磁気テープ、又はそれらのいくつかの組み合わせとすることができる。永続的ストレージ208によって用いられる媒体は、取り外し可能なものとすることもできる。例えば、取り外し可能ハード・ドライブを永続的ストレージ208に用いることができる。
これらの例における通信ユニット210は、他のデータ処理システム又はデバイスとの通信を提供する。これらの例では、通信ユニット210は、ネットワーク・インターフェース・カードである。通信ユニット210は、物理通信リンク及び無線通信リンクの一方又は両方の使用によって、通信を提供することができる。
入力/出力ユニット212は、データ処理システム200に接続することができる他のデバイスでのデータの入力及び出力を可能にする。例えば、入力/出力ユニット212は、キーボード及びマウスを通じたユーザ入力のための接続を提供することができる。さらに、入力/出力ユニット212は、プリンタに出力を送信することができる。ディスプレイ214は、情報をユーザに表示する機構を提供する。
オペレーティング・システム及びアプリケーション又はプログラムのための命令は、永続的ストレージ208上に配置される。これらの命令を、プロセッサ・ユニット204によって実行するためにメモリ206にロードすることができる。異なる実施形態のプロセスは、メモリ206のような記憶域に配置することができるコンピュータ実装命令を用いて、プロセッサ・ユニット204によって実施することができる。これらの命令は、コンピュータ使用可能プログラム・コード、又はコンピュータ可読プログラム・コードと呼ばれ、プロセッサ・ユニット204内のプロセッサによって読み出し、実行することができる。コンピュータ可読プログラム・コードは、メモリ206又は永続的ストレージ208といった異なる物理的な又は有形のコンピュータ可読媒体に組み込むことができる。
コンピュータ使用可能プログラム・コード216は、コンピュータ可読媒体218上に関数形態で配置されており、データ処理システム200上にロード又は転送することができる。これらの例では、コンピュータ使用可能プログラム・コード216及びコンピュータ可読媒体218がコンピュータ・プログラム製品220を形成する。一例において、コンピュータ可読媒体218は、例えば光ディスク又は磁気ディスクとすることができ、光又は磁気ディスクは、永続的ストレージ208の一部であるハード・ドライブのような記憶デバイスに転送するために、永続的ストレージ208の一部であるドライブ又は他のデバイス内に挿入され又は配置される。コンピュータ可読ストレージ媒体218は、データ処理システム200に接続されるハード・ドライブ又はフラッシュメモリといった永続的ストレージの形態を取ることもできる。
あるいは、コンピュータ使用可能プログラム・コード216は、コンピュータ可読媒体218から、通信ユニット210への通信リンクを通じて、及び/又は入力/出力ユニット212への接続を通じてデータ処理システム200に転送することもできる。説明例において、通信リンク及び/又は接続は物理的なものであっても無線式であってもよい。コンピュータ可読媒体は、コンピュータ可読プログラム・コードを収容する、通信リンク又は無線伝送のような非有形媒体の形態を取ることもできる。
データ処理システム200について例示された異なるコンポーネントは、異なる実施形態を実装することができる方式に対してアーキテクチャ上の制限を与えることを意味するものではない。異なる例示的な実施形態は、データ処理システム200について例示されたコンポーネントに加えて、又はそれらを置き換えるコンポーネントを含むデータ処理システムで実装することができる。図2に示されたその他のコンポーネントは、示された説明例とは異なっていてもよい。
例えば、バス・システムを用いて通信ファブリック202を実装することができ、システム・バス又は入力/出力バスのような1つ又は複数のバスを含むことができる。当然のことながら、バス・システムは、バス・システムに取り付けられた異なるコンポーネント又は装置間でのデータ転送を提供する、任意の適切なタイプのアーキテクチャを用いて実装することができる。さらに、通信ユニットが、モデム又はネットワーク・アダプタといった、データの送信及び受信に用いられる1つ又は複数のデバイスを含むことができる。さらに、メモリは、例えばメモリ206、又は、通信ファブリック202内に存在し得るインターフェース及びメモリ・コントローラ・ハブの中で見られるようなキャッシュであってもよい。
図1及び図2に示される例は、アーキテクチャ上の制限を意味するものではない。さらに、例示的な実施形態は、ソース・コードのコンパイルのため及びコードの実行のための、コンピュータで実装される方法、装置、及びコンピュータ使用可能プログラム・コードを提供する。示される実施形態に関して説明される方法は、図1に示されるデータ処理システム100若しくは図2に示されるデータ処理システム200、又は本説明を考慮すれば当業者には容易に明らかとなるようなその他のタイプのデータ処理システム及び/又はコンピュータ・デバイスのような、データ処理システムにおいて実施することができる。
例示的な実施形態は、サンプリングの時点で割込みされた各仮想マシンからサンプルを取得させることによって、1つ又は複数のプロセッサの多重仮想マシンから同時に効率的な方式でコール・スタック情報をサンプリングするための、コンピュータ実装方法、装置、及びコンピュータ使用可能プログラム・コードを提供する。さらに、例えばプロファイラ機構内の種々のカウンタその他を用いて、統計情報を収集して、データ処理システムの実行環境の様々な領域でスレッドにより消費される時間に関する統計情報を提供することができる。
例示的な実施形態の機構は、同時に複数のプロセッサ及び多重仮想マシンについてコール・スタック情報のサンプルを取得するように動作するが、最初は、1つ又は複数のプロセッサ及び単一の仮想マシンに関して、どのようにそうしたコール・スタック情報のサンプリングを実施することができるのかを理解することが最良である。従って、この説明は、最初に単一の仮想マシン及び1つ又は複数のプロセッサ上で実行されるスレッドに関するコール・スタック情報をサンプリングする方法の例を提供し、その後、例示的な実施形態に従い、これをどのように拡張して複数のプロセッサ及び多重仮想マシンについてのコール・スタック情報の同時サンプリングとすることができるかを示すことにする。
図3は、例示的な実施形態による、処理中の状態を識別するために用いられるコンポーネントを示す例示的な図である。この図示された例においては、コンポーネントは、図2のデータ処理システム200のようなデータ処理システムで見られるハードウェア及びソフトウェア・コンポーネントの例である。
図示された例では、プロセッサ・ユニット300は、オペレーティング・システム304に送られる割込み302を生成することができ、プロセッサ・ユニット300内の別のプロセッサは、同じくオペレーティング・システム304に送られる割込み303を生成することができる。これらの割込みの結果として、オペレーティング・システム304によって生成され、デバイス・ドライバ308に送られる、ルーチン又は関数の呼び出し306が生じ得る。オペレーティング・システム304のようなオペレーティング・システムがプロセッサからの割込みに基づいて呼び出し306のような呼び出しを生成できるようにするための種々の機構が存在する。そうした機構の例として、割込みハンドラ、即ち特定の割込み条件を処理するように設計されたコンピュータ・コードの一部をオペレーティング・システム304に登録し、割込み302及び/又は303が生じたときに通知させるようにすること、又はデバイス・ドライバ308に割込みベクトルをフック(直接処理)させて、割込み302又は303のいずれかが生じたときにデバイス・ドライバ308が制御を獲得するようにすることが挙げられる。
デバイス・ドライバ308が、呼び出し306を受信し、サンプルを取得すべきであると決定すると、デバイス・ドライバ308は、コール・スタックをサンプリングすべきスレッドのスレッド識別子(TID)などの情報を選択されたサンプリング・スレッド(図示せず)のための作業領域311に置く。即ち、プロファイラ318の各サンプリング・スレッドについて別々の作業領域311が存在することができ、情報は、実行環境におけるコンピュータ・コードの実行をプロファイリングするためのトレース・データをサンプリングするのに用いられるプロファイラ318の適切なサンプリング・スレッドのための適切な作業領域311に置かれる。デバイス・ドライバ308は、さらに、プロファイラ318の対応するサンプリング・スレッドに信号を送り、スレッド310内の対象スレッドについてのコール・スタック情報を収集するようサンプリング・スレッドに命令する。これらの例では、対象スレッドは、デバイス・ドライバ308に対するオペレーティング・システム呼び出し306を生じさせた割込み302又は303を生成した処理ユニット300のプロセッサ上で実行されていたスレッドである。
デバイス・ドライバ308から信号を送られたサンプラ・スレッドは、データ領域314内の対応する作業領域311を確認し、その特定のサンプリング・スレッドがどの作業を実施すべきかを決定する。これらの例では、作業領域311は、割込みされたスレッドについてのコール・スタック情報の取得に必要な作業を識別することができる。あるいは、デバイス・ドライバ308によって作業領域311に置かれた特定の情報に応じて、サンプル・スレッドは、カウンタのインクリメント、カウンタ値の読み出し、統計量の生成などといった他の動作を実行することができる。
1つの例示的な実施形態において、スレッド310内のサンプリング・スレッドは、仮想マシン316からコール・スタック情報を収集する作業を実施し、この仮想マシン316は、1つの例示的な実施形態において、Java(商標)仮想マシン(JVM)である。例示的な実施形態は、JVMからコール・スタック情報を取得するという状況で説明されるが、例示的な実施形態はそのように限定されるものではない。それどころか、コール・スタック情報の収集は、特定の実装に応じて、他の仮想マシン、又は仮想マシン内にない他のアプリケーションに関して実施することができる。
プロファイラ318は、1つの例示的な実施形態において、時間ベース・コンテキスト・サンプリング・プロファイラ・アプリケーションである。プロファイラ318内の選択されたサンプリング・スレッドは、作業領域311内に配置された情報を用いて、コール・スタックを取得すべきスレッドを決定する。例えば、割込みされたスレッドについてのプロセス識別子(PID)及びスレッド識別子(TID)を作業領域311に書き込み、それにより、サンプリング・スレッドに対して、どのプロセスのどの実行スレッドがサンプリングの対象であるのかを識別することができる。TIDにより識別された実行スレッドについてのコール・スタック情報を取得し、サンプリング・スレッドにより処理して、プロファイラ318により割り当てられ管理されるデータ領域320内にコール・ツリー317を作成することができる。コール・ツリー317は、コール・スタック情報を含み、かつ、割込み及びコール・スタックのサンプリングの時点で実行中のカレント・ルーチンである葉ノードについての付加的な情報をさらに含むことができる。
これらの説明的な実例における割込みの場合において、割込みハンドラは、対象スレッドが割り込みされたこと、即ち、対象スレッドが実行中でありその実行が割込みハンドラに分岐したことの判断を下し、遅延手続き呼び出し(DPC)又は第2レベル割込みハンドラを始動して、プロファイラ318に信号を送ることができる。1つの実施形態では、割込みは、ポリシー326のような何らかの基準に基づいて定期的に生成される。これらの例においては、コール・スタック情報の収集のトリガは、指定されたプロセス内のスレッドが割り込みされる都度、実施することができる。言うまでもないが、他のイベントを用いて情報の収集を始動することもできる。例えば、ハードウェア・カウンタのオーバーフローに応じて定期的に情報を生成することができる。
プロファイラ318は、ある期間にわたって収集されたコール・スタック情報に基づくレポート322を生成することができる。時間ベース・サンプリングは、サンプルが取得された時点でコードが実行されていたルーチンにおいて消費されたサイクルの正確な推定を与え、また、サンプルが取得されたコードに到達するために取られた経路についても正確な推定を与える。収集された情報に基づくレポートは、各ルーチンで消費された時間、並びに選択されたルーチンにより呼び出されたルーチンにおける累積時間についての合理的に正確な状況を描き出す。
図4は、1つの例示的な実施形態によるコール・スタック情報の取得に用いられるコンポーネントを示す例示的な図である。この例においては、データ処理システム400は、プロセッサ402、404、及び406を含む。これらのプロセッサは、例えば図3のプロセッサ・ユニット300に見られるようなプロセッサの例である。実行中、プロセッサ402、404、及び406の各々が自身の上で実行されているスレッドを有することができる。あるいは、1つ又は複数のプロセッサがアイドル状態であってもよく、アイドル・プロセッサ上ではスレッドは実行されていない。
図示された例では、割込みが発生したとき、ターゲット・スレッド408はプロセッサ402上で実行中であり、スレッド410はプロセッサ404上で実行中であり、スレッド412はプロセッサ406上で実行中である。この例の目的上、ターゲット・スレッド408がプロセッサ402上で割込みされたスレッドである。例えば、ターゲット・スレッド408の実行は、タイマー割込み又はハードウェア・カウンタのオーバーフローによって割込みすることができ、その場合には、カウンタの値は、指定された数のイベントの後で、例えば100,000個の命令が完了した後で、オーバーフローするようにセットされる。
割込みが生成されると、デバイス・ドライバ414は、サンプリング・スレッド416、418、及び420に信号を送る。これらのサンプリング・スレッドの各々は、プロセッサのうちの1つに関連付けられる。サンプリング・スレッド418はプロセッサ404に関連付けられ、サンプリング・スレッド420はプロセッサ406に関連付けられ、サンプリング・スレッド416はプロセッサ402に関連付けられる。デバイス・ドライバ414は、所定のサンプリング基準が満たされたとき、例えば上述のタイマー又はカウンタがオーバーフローしたときに、これらのサンプリング・スレッド416、418、及び420を起動する。これらの例において、デバイス・ドライバ414は、図3のデバイス・ドライバ308と同様のものである。
サンプリング・スレッド418及び420には信号が送られ、サンプリング・スレッド416に信号が送られるまではいかなる作業も行うことなくアクティブであること又は実行されることが許可される。即ち、サンプリング・スレッド416には、ターゲット・スレッド408についてのコール・スタック情報を取得する要求という作業が割り当てられるが、スレッド410及び412はまだ割込みされていないので、サンプリング・スレッド418及び420には作業が割り当てられない。サンプリング・スレッド418及び420は、プロセッサ404及びプロセッサ406がアイドル状態に入らないようにするためにアクティブにされる。こうすることで、全てのプロセッサが現時点でスレッドを実行してビジー状態となっているので、ターゲット・スレッド408はプロセッサ402から別のプロセッサに移動することはない。これらの例では、プロセッサ402、404、及び406を非アイドル状態にすることにより、ターゲット・スレッド408がプロセッサ402から別のプロセッサに移動することが回避される。
図示された例では、サンプリング・スレッド416は、仮想マシン422からコール・スタック情報を取得するという形で作業を割り当てられる。仮想マシン422は、図3のオペレーティング・システム304内で実行されている仮想マシン316と同様のものである。コール・スタック情報は、この例ではJVMである仮想マシン422に対して適切な呼び出しを行うことにより取得することができる。図示された例において、JVMにアクセスするために用いられるインターフェースは、Java Virtual Machine Tools Interface(JVMTI)である。このインターフェースにより、コール・スタック情報の収集が可能になる。コール・スタックは、例えば、異なるスレッド又はメソッドについての使用カウント(usage count)を含む標準的なツリーとすることができる。JVMTIは、Java 5ソフトウェア開発キット(SDK)バージョン1.5.0で入手可能なインターフェースである。Java virtual machine profiling interface(JVMPI)は、Java 2プラットフォーム標準版(J2SE)SDKバージョン1.4.2で入手可能である。これら2つのインターフェースは、プロセス又はスレッドがJVMに対するツール・インターフェースの形でJVMから情報を取得することを可能にする。これらのインターフェースの説明はSun Microsystems,Inc.から入手可能であるので、これらのインターフェースについてのこれ以上の説明はここでは提示しない。例示的な実施形態によれば、どちらかのインターフェース、又はJVMに対する他のいずれかのインターフェースを用いて、1つ又は複数のスレッドについてのコール・スタック情報を取得することができる。
サンプリング・スレッド416は、処理のために、プロファイラ424にコール・スタック情報を提供する。プロファイラ424は、サンプリングの時点で仮想マシン422から取得されたコール・スタック情報から、コール・ツリーを構築する。コール・ツリーは、コール・スタック情報をコール・スタック情報の中で識別されるメソッド及び/又は関数への出入について解析することにより構築することができる。このコール・ツリーは、図3のプロファイラ318により、図3のデータ領域320の中のツリー317として、又は別個のデータ領域の中の別個のファイルとして、格納することができる。
図5は、例示的な実施形態の機構を用いて生成することができるコール・ツリーの例示的な図である。コール・ツリー500は、例えば図3のコール・ツリー317と同様のコール・ツリーの例である。コール・ツリー500は、図3のプロファイラ318のようなアプリケーションにより、1つ又は複数のサンプリング・スレッドを用いて収集されたコール・スタック情報に基づいて作成及び修正される。図5に示される例示的なコール・ツリー500において、コール・ツリー500は、ノード502、504、506、及び508と、コール・ツリー500内のどのノードがその他のどのノードを呼び出すのかを示すノード間のアークとで構成される。図示された例では、ノード502はメソッドAに入ることを表し、ノード504はメソッドBに入ることを表し、ノード506及びノード508はそれぞれ、メソッドC及びメソッドDに入ることを表す。
ここで図6を参照すると、1つの例示的な実施形態による、コール・ツリーのノード内の情報を示す図が示される。エントリ600は、仮想マシンのコール・スタックをサンプリングするサンプリング・スレッドにより取得されるトレース情報に基づいて生成される、図5のコール・ツリーのようなコール・ツリーのノード502のようなノード内の情報の例である。この例では、エントリ600は、メソッド/関数識別子602と、ツリー・レベル(LV)604と、サンプル606とを含む。メソッド/関数識別子602は、例えば、ノードが表すメソッド又は関数の名を含む。ツリー・レベル(LV)604は、コール・ツリー内における特定のノードの階層的ツリー・レベルを識別する。例えば、再び図5を参照すると、エントリ600が図5のノード502についてのものである場合、ツリー・レベル604は、このノードが根ノードであることを示す。
コール・ツリーのノードを用いて、プロセッサ・ユニット300、オペレーティング・システム304、仮想マシン316などを含む実行環境において図3のスレッド310を用いてコンピュータ・プログラムの実行をサンプリングした結果を示す図3のレポート322のような、レポートを生成することができる。レポートは、例えばコンピュータ・プログラムの実行が比較的大量の時間を消費している領域を識別するための、コール・ツリー及びそのノードの解析とすることができる。レポートは、実行環境内でコンピュータ・プログラムが実行される方式を視覚化するための機構を提供することができる。レポートの視覚化機構は、個々のルーチンについてのフラット・プロファイル、即ち特定のルーチンの実行時間の量と、ルーチンが呼び出した全てのルーチンで消費された時間の集計とを含むことができる。他のレポートは、各ルーチンの呼び出し元、及びそのルーチンが呼び出したルーチン、並びに、ルーチンとそのルーチンが呼び出したルーチンへの経路を識別するための完全なコール・スタックを識別することができる。
ここで図3に戻ると、プロファイラ318のサンプル・スレッドに信号が送られると、プロファイラ318の対応するサンプラ・スレッドは、仮想マシン・インターフェース、例えばJVMTI及び/又はLVMPIを介して、対象となる各スレッドについてコール・スタックを取り出すことを要求する。取り出された各コール・スタックはプロセス又は仮想マシンに特有のコール・ツリー内に「ウォークされる(walked)」、即ち記録される。これは典型的には、ロッキングを回避するため、及び改善された性能を与えるためにスレッドによって記録される。取り出されたコール・スタックがツリー内にウォークされた後で、計量値(metric)、この場合にはサンプルのカウントが、葉ノード内のサンプル・ベースに追加される。デバイス・ドライバ308によって提供されるサンプル又は計量値に対する変更がその都度、コール・ツリーの葉ノードのベース計量値に追加される。これらの計量値は、例えば、特定のコール・スタック・シーケンスの発生のサンプルのカウントを含むことができる。他の実施形態において、コール・スタック・シーケンスを単に記録することができる。
図7は、1つの例示的な実施形態による、ターゲット・スレッドについてのコール・スタック情報を取得するためのプロセスの例示的なフローチャートである。図7において示されるプロセスは、例えば図4のデバイス・ドライバ414のようなソフトウェア・コンポーネントに実装することができる。
プロセスは、監視されるイベントを検出することにより開始する(ステップ700)。1つの例示的な実施形態において、この監視されるイベントは、例えば、プロセッサによる割込みが発生したことを示す、オペレーティング・システムからの呼び出しとすることができる。ターゲット・スレッド、即ち監視されるイベントが発生したときに実行中であったスレッドが識別される(ステップ702)。サンプリング・スレッドの各々のための作業領域に、プロファイラのサンプリング・スレッドに対応するそれぞれのプロセス及びスレッド識別子を識別する情報が書き込まれ、その後、各サンプリング・スレッドに信号が送られる(ステップ704)。
ステップ704において、信号は、イベントが発生したときに対象となるターゲット・スレッドが実行されていたプロセッサに関連付けられたサンプリング・スレッドのみに送られるのではなく、全てのサンプリング・スレッドに送られる。対象となるターゲット・スレッドが実行されていたプロセッサに関連付けられていないサンプリング・スレッドについては、後述するように、これらのサンプリング・スレッドはスピン状態に入り、特定のサンプリングについてのいかなるコール・トレース情報も生成しない。全てのサンプリング・スレッドへの信号送信は、アイドル状態のプロセッサが存在しないように保証するために行われる。プロセッサがアイドル状態に入ること又はアイドル状態のままでいることを防止することにより、これらの例示的な実施形態においてターゲット・スレッドの移行又は移動が回避される。
その後、対象となるターゲット・スレッドについて、コール・スタック情報の収集が開始され(ステップ706)、その後プロセスは終了する。上述のように、コール・スタック情報の収集は、例えば、JVMのJVMTI及び/又はJVMPIインターフェースを用いて実施することができる。
次に図8を参照して、1つの例示的な実施形態による、コール・ツリーを生成するためのスレッドにおけるプロセスのフローチャートが提供される。図8に示されるプロセスは、例えば図4のサンプリング・スレッド416のようなサンプリング・スレッドに実装することができる。従って、図8に示されるプロセスは、仮想マシンから対象となるターゲット・スレッドについてのコール・スタック情報を収集するサンプリング・スレッドを用いて、図3のプロファイラ318のようなプロファイラにおいて実施することができる。
プロセスは、ターゲット・スレッドに関する情報をサンプリングするという通知を受信することにより開始する(ステップ800)。例えば、この通知は、サンプリング・スレッドにコール・スタック情報を収集させるという、デバイス・ドライバからの信号送信とすることができる。その後、例えば、JVMTI及び/又はJVMPIなどの仮想マシン・インターフェースを介して、仮想マシンからコール・スタック情報が取り出される(ステップ802)。例えば、コール・スタック情報をウォークさせて、コール・ツリーを構成するノードとノード間のアークとを生成することなどにより、コール・スタック情報から出力コール・ツリーが生成される(ステップ804)。図5のコール・ツリー500は、サンプリング・スレッドにより生成することができる出力コール・ツリーの例である。
最後に、出力コール・ツリーがデータ領域に格納され(ステップ806)、その後プロセスは終了する。これらの例において、コール・ツリーは、図3のデータ領域314のようなデータ領域に格納され、1つ又は複数のレポートを生成するための基礎とすることができる。
図9は、1つの例示的な実施形態による、割込みの受信に応答してプロセッサ上のスレッドに通知するためのプロセスのフローチャートである。図9に示されるプロセスは、例えば図4のデバイス・ドライバ414のようなソフトウェア・コンポーネントに実装することができる。
図9に示されるように、プロセスは、割込みなどのイベントを待機することにより開始する(ステップ900)。イベントが発生すると、例えば割込みが発生すると、カレント・プロセッサが識別される(ステップ902)。この例では、カレント・プロセッサは割込みを受信したプロセッサである。ターゲット・スレッドは、割込みの時点でカレント・プロセッサ上で実行中であったスレッドである。ターゲット・スレッドは、コール・スタック情報が所望される対象スレッドである。
カレント・プロセッサのための作業が存在するかどうかについての判断が行われる(ステップ904)。ステップ904は、図3のポリシー326のようなポリシーを用いて、デバイス・ドライバにより実施することができる。割込みが発生する都度コール・スタック情報が所望されるとは限らない。コール・スタック情報の収集をトリガする「イベント」は、割込みの発生と条件の存在の組み合わせとすることができる。例えば、特定のユーザ又はユーザ・タイプがデータ処理システムにログインするなどのある種のユーザ状態が発生するまで、コール・スタック情報は所望されないものとすることができる。別の例として、ユーザがあるプロセスを開始するまで、又はあるアクションを始動するまで、コール・スタック情報が所望されないようにすることができる。作業が存在しない場合には、プロセスはステップ900に戻り、別の割込みを待つ。
カレント・プロセッサのための作業が存在する場合は、プロセスは作業を割り当てる(ステップ906)。図3の作業領域311のような作業領域に作業割当てを配置することにより、作業を割り当てることができる。これらの例において、作業は、割込み発生時に対象スレッドが実行されていたプロセッサに関連付けられたサンプリング・スレッドに割り当てられる。非カレント・プロセッサが選択され(ステップ908)、選択されたプロセッサ上のスレッドに通知される(ステップ910)。ステップ910において、選択されたプロセッサのためのサンプリング・スレッドに、そのサンプリング・スレッドを起動するための信号が送信される。
その後、通知する非カレント・プロセッサがさらに存在するかどうかについての判断が行われる(ステップ912)。通知のための非カレント・プロセッサがさらに存在する場合には、プロセスはステップ908に戻る。そうでない場合は、カレント・プロセッサ上のスレッドに通知され(ステップ914)、その後プロセスは終了する。カレント・プロセッサのためのサンプリング・スレッドは、これらの例では最後に通知されるが、例示的な実施形態はそのように限定されるものではない。それどころか、カレント・プロセッサ上のスレッドに最初に通知することができる。
ここで図10を参照すると、1つの例示的な実施形態により、サンプリング・スレッドのためのプロセスのフローチャートが示される。図10に示されるプロセスは、図3のプロファイラ318のようなプロファイラ・アプリケーションと関連して、図4のサンプリング・スレッド416、サンプリング・スレッド418、又はサンプリング・スレッド420のようなサンプリング・スレッドにより実装することができる。
図10に示されるように、プロセスは、通知を待機することにより開始する(ステップ1000)。通知を受け取ると、サンプリング・スレッドに作業が割り当てられたかどうかについての判断が行われる(ステップ1002)。作業が割り当てられたかどうかの識別は、例えば図3の作業領域311のようなメモリ位置又はデータ領域を参照し、そこに、プロセス識別子、スレッド識別子、及び実施すべき作業のタイプ、例えば収集するトレース情報のタイプなどを示すその他の情報が存在するかどうかを判定することによって行われる。例示的な実施形態の目的上、作業領域におけるプロセス識別子及びスレッド識別子の存在は、それ自体が、その特定のプロセス識別子及びスレッド識別子についてのコール・スタック情報を取り出すべきであるという指示となる。1つの例示的な実施形態において、図3のデータ領域314内で異なるサンプリング・スレッドに作業を割り当てることができる。
作業が割り当てられていなかった場合には、プロセスは、ステップ1010に続く。一方、作業が割り当てられていた場合には、割り当てられた作業が実施される(ステップ1004)。これらの例では、作業は、ターゲット・スレッドについてのコール・スタック情報を取得することである。
次いで、作業が完了したかどうかについて判断が行われる(ステップ1006)。作業が完了していない場合には、プロセスはステップ1004に戻る。そうでない場合、作業が完了しているならば、作業が完了したことの指示が作成される(ステップ1008)。この指示は、例えば図3の作業領域311のような作業領域内に作成することができる。この指示により、他のサンプリング・スレッドは、コール・スタック情報が収集されたことを知ることができるようになる。
作業を完了したスレッド、又は作業が割り当てられなかった(ステップ1002)スレッドについては、プロセスは、スレッドの全てにより実施される全ての作業が完了するまで、スピン状態に入る(ステップ1010)。スピン状態が完了すると、プロセスはステップ1000に戻り、別の通知を待機する。ステップ1010の実施において、サンプリング・スレッドは、スピン−待機ループを実行することができる。このタイプのループは、メモリ位置を読み取り、次いでそれを特定の値と比較する、短いコード・セグメントである。メモリ位置の内容がこの値と等しい場合は、ループは実行を完了する。これらの例において、メモリ位置は作業領域である。サンプリング・スレッドによる作業が完了したことの指示は、これらの例においては、スピン状態を停止するのに必要な特定の値である。そうでなければ、メモリ位置が再度読み取られ、再び比較が実施される。これらの例において、スピン状態は作業が完了したことを示す指示が発生したときに終了する。この機構により、コール・スタック情報が収集されるまでサンプリング・スレッドがアクティブであり続けることが可能になる。
上記の機構は、プロファイラが、一度に1つのサンプリング・スレッドを使用して、一度に1つの実行スレッドについてのコール・スタック情報を実行環境の単一の仮想マシンと関連して収集することを可能にする。どの一回でも、割込みを生成したプロセッサに関連付けられたサンプリング・スレッドのみが実際に使用され、トレース情報が収集され、即ちコール・スタックがサンプリングされる。割込みされたプロセッサに対応するサンプリング・スレッドがコール・スタック情報を収集している間、コール・スタック情報の収集中にスレッドが移行することを回避するために、他のサンプリング・スレッドを起動させて単にスピン状態に置くことができる。しかしながら、これらの他のサンプリング・スレッドに関してのトレース情報は収集されない。
更なる例示的な実施形態において、上記のように、データ処理システムは、複数の仮想マシンを含むことができ、複数のプロセッサ上のスレッドはこれらの仮想マシンの1つ又は複数にアクセスする。この更なる例示的な実施形態において、トレース情報のサンプリング、例えば1つ又は複数の仮想マシンのコール・スタックのサンプリングを要するイベントが発生する都度、全てのプロセッサの全てのサンプリング・スレッドが起動される。サンプリング・スレッドの各々に関して、対応する実行スレッドの実行状態についての判断が行われる。この判断は、そのサンプリング・スレッドがトレース情報を収集すべきであるのか、ループ又はスピン状態に置かれるべきなのか、又は単にデバイス・ドライバのサンプリング統計量情報を更新すべきなのかを決定する。1つの実施形態において、各プロセッサ上で割込みが生成され、各割込みハンドラは、全てのプロセッサが割込みされるまで、又は遅延手続き呼び出し(DPC)若しくは第2レベル割込みハンドラが待ち行列に入れられるまでループし、そしてDPC又は第2レベル割込みハンドラは、そのプロセッサのDPC又は第2レベルハンドラが実行中であると判断されるまでループする。代替的な実施形態において、サンプリング割込みが1つのプロセッサ上で発生すると、プロセッサ間割込み(IPI)が生成され、他のプロセッサに割込みを強制する。いずれの場合でも、全てのプロセッサがサンプルの処理を続行する準備ができたと判断されると、論理は、いずれかのサンプラ・スレッドがサンプリングを処理するようポストされる必要があるかどうかについて判断を行う。どのサンプラ・スレッドもサンプルを処理するようポストされる必要がない場合には、カウントが更新される。例えば、各サンプリング・スレッドについて、対応する実行スレッドが対象仮想マシン内で現在実行中である場合、即ち対象仮想マシンにアクセス中である場合には、その仮想マシン及び実行スレッドについてのトレース情報が対応するサンプリング・スレッドにより収集される。実行スレッドは対象仮想マシン内で現在実行されていないが、対象仮想マシン内で実行中の、実行スレッドに関連付けられた他のサンプリング・スレッドが存在する場合には、他のサンプリング・スレッドによりトレース情報が収集されるまで、カレント・サンプリング・スレッドをループ又はスピン状態に置くことができる。これらの状態のどちらも存在しない場合には、デバイス・ドライバのサンプリング統計量、例えばカウンタ値が単に更新される。これらのデバイス・ドライバのサンプリング統計量は、他の状態が検出されたときにも同様に更新することができる。
例えば、JVMは、JVMにアタッチされたプロファイラによって監視されるように登録される。プロファイラは、あるJVMを監視すべきである判断すると、各プロセスにつき1つのサンプリング・スレッドを作成し、そのJVMをデバイス・ドライバによりサポートされるインターフェースを介して登録する。サンプルが取得されると、デバイス・ドライバは登録されたJVMの各々の中を巡回(rotate)してカウントを更新し、特定のサンプラ・スレッドへの通知が必要であるかどうかを判断する。いずれかのサンプラ・スレッドに通知が必要である場合には、1プロセッサにつき1つのサンプラ・スレッドに、割込みされたスレッドについてのコール・スタックを取り出すように通知するか、又は全てのサンプラ・スレッドが作業を完了するまでスピン状態で待機するように通知する。サンプリング・スレッドによる完了の判断は、全てのサンプラ・スレッド、即ち全ての登録されたJVMを、進行中の作業についてチェックすることにより行うことができる。全てのサンプラ・スレッドが作業を完了したと判断されると、サンプラ・スレッドはブロック状態に入り、新しい作業が割り当てられるのを待つ。
図11は、例示的な一実施形態による、多重仮想マシンと関連した多重プロセッサにより実行される多重スレッドに関してコンピュータ・プログラムのプロファイリングを実施するためのシステムの例示的なブロック図である。図11に示されるように、各サンプリング・スレッド1116−1120は、データ処理システム1100のプロセッサ1102−1106のうちの1つの上で実行される対応するスレッド1108−1112に関連付けられる。これらの実行スレッド1108−1112は、データ処理システム1100の1つ又は複数の仮想マシン1122−1126にアクセスすることができる。さらに、サンプリング・スレッド1116−1120は、対応する仮想マシン・インターフェース1132−1136を介して、仮想マシン1122−1126にアクセスすることができる。プロファイラ1140は、上述の方式と同様の方式で動作して、対応するサンプリング・スレッド1116−1120を用いて、対象仮想マシン1122−1126の各々のコール・スタック情報のようなトレース情報を収集することができる。プロファイラ1140は、サンプリング・スレッド1116−1120から収集されたトレース情報に基づき、1つ又は複数のトレース・データ・ファイル及びコール・ツリーを生成することができる。
デバイス・ドライバ1114は、図4のデバイス・ドライバ414と同様に、サンプリング・スレッド1116−1120に信号を送って、これらのサンプリング・スレッド1116−1120を起動させ、トレース情報の収集を行うべきかどうか判断させる。加えて、デバイス・ドライバ1114は、複数のサンプリング統計量カウンタ1150−1154を保持することができ、これらは、サンプリング・スレッド1116−1120が起動される都度、実行スレッド1108−1112の実行状態に基づきインクリメントされる。プロファイラ1140は、これらのカウンタ1150−1154にアクセスして、スレッド1108−1112の実行のサンプリングについての統計情報を取得し、トレース・データ・ファイル及びレポートの生成の際にこの統計情報を用いることができる。
上述のように、プロセッサ1102−1106によりサンプリング割込みが生成される都度、割込みはオペレーティング・システムに送られ、次にオペレーティング・システムがデバイス・ドライバ1114に対する呼び出しを生成する。デバイス・ドライバ1114は、プロファイラ1140のサンプリング・スレッド1116−1120に信号を送って、これらのサンプリング・スレッド1116−1120を起動させることができる。これに応答して、各サンプリング・スレッド1116−1120は、対応する実行スレッド1108−1112の状態を判断し、この状態に基づいて、その実行スレッドがアクセスしている仮想マシンからトレース情報を収集すべきか否かを判断する。例えば、それぞれのサンプリング・スレッド1116−1120の作業領域に1つ又は複数の対象仮想マシン1122−1126の識別子を書き込むことができる。
必ずしもデータ処理システムの全ての仮想マシン1122−1126を対象仮想マシンとして指定する必要はない。例えば、場合によっては、単一の仮想マシン1122のみをプロファイラ1140の対象とすることができる。1つの仮想マシン1122のみが対象であるとしても、各実行スレッド1108−1112が同一の仮想マシン1122にアクセスすることも可能であり、又は、多重実行スレッド1108−1112が同一の仮想マシン1122と関連して実行され、又はこれにアクセスすることができるように、同一の仮想マシン1122のインスタンスを実行スレッド1108−1112の多重のインスタンスと関連して提供することもできる。このような場合には、例示的な実施形態の機構は、これらの実行スレッドの各々についてトレース情報を収集するが、このトレース情報を総計するか、又はその他の手法でトレース情報を組み合わせることができる。
サンプリングの時点で対象仮想マシン1122−1126内で実行中の関連付けられた実行スレッド1108−1112を有する各サンプリング・スレッド1116−1120について、コール・スタック情報のようなトレース情報が収集され、プロファイラ1140に提供される。仮想マシン1122−1126内で実行中ではない関連付けられた実行スレッド1108−1112を有するサンプリング・スレッド1116−1120については、そうしたトレース情報は収集されない。それどころか、少なくとも1つの他のサンプリング・スレッド1116−1120がトレース情報を収集すべきである判断された場合には、対象仮想マシン1122−1126内で実行中ではないサンプリング・スレッドは、他のサンプリング・スレッドがそのトレース情報の収集を終えるまで、スピン又はループ状態に置くことができる。
どちらの事例でも、又はどちらの事例も起きなかった場合でも、デバイス・ドライバ1114は、実行スレッド1108−1112の判断された条件に基づき統計量カウンタ1150−1154を更新することができる。統計量カウンタ1150−1154に関連付けられる特定の条件は、様々なタイプとすることができる。例えば、1つの統計量カウンタ1150をガベージ・コレクション条件に関連付けることができ、その場合、サンプリング・スレッド1116−1120が、対応する実行スレッド1108−1112がガベージ・コレクション動作に関与していると判断したときには、統計量カウンタ1150がインクリメントされる。更なる例として、別の統計量カウンタ1152は、実行スレッドが単に対象仮想マシンの外部のプロセスを実行中であると判断される条件に関連付けることができ、サンプリング・スレッド1116−1120が、その対応する実行スレッド1108−1112が対象仮想マシンの外部で実行中であると判断すると、それに対応してインクリメントすることができる。
更に別の例として、第3の統計量カウンタ1154は、実行スレッドが対象仮想マシン内で実行中であるという条件に関連付けることができる。従って、サンプリング・スレッド1116−1120が、その対応する実行スレッドが対象仮想マシン1122−1126内で実行中であると判断すると、カウンタ1154をデバイス・ドライバ1114によりインクリメントすることができる。その他のタイプの実行スレッド1108−1112の実行条件に関連付けられた他のカウンタを、カウンタ1150−1154に追加して、又はこれら代わりに用いることができることを認識されたい。
プロファイラ1140は、レポートを生成するときに、これらのカウンタ1150−1154にアクセスし、これらを用いてレポートに実行統計量を提供することができる。例えば、カウンタ1150のカウント値は、スレッドがガベージ・コレクション動作の実行に消費する時間の相対量に関する情報を提供することができる。カウンタ1152のカウント値は、スレッドが対象仮想マシンの外部でプロセスを実行するのに消費する時間の相対量に関する情報を提供することができる。さらに、カウンタ1154のカウント値は、スレッドが対象仮想マシン内でプロセスを実行するのに消費する時間の相対量に関する情報を提供することができる。
このようにして、サンプリング・スレッド1116−1120に対応する実行スレッド1108−1112の実行状態に応じて、データ処理システムの対象となる1つ又は複数の仮想マシン1122−1126についてのトレース情報を同時に収集することができる。その結果、公知のプロファイリング・ツールの逐次的な手法に比べて、より正確なトレース情報をより効率的且つタイムリーな手法で収集することができる。その上、対象仮想マシン内で実行されている各実行スレッドについて、そのスレッドが元の割込みを生成したものであるか否かに関わりなくトレース情報を収集することができる。統計量カウンタを用いて、実行スレッドの状態についての情報を、その実行スレッドが元の割込みを生成したものであるか否かに関わりなく生成することができる。これらの統計量カウンタは、データ処理システムの実行環境の様々な部分で実行スレッドにより消費される時間についての識見を提供することができる。
このトレース情報及び統計量カウンタ情報に基づいて、プロファイラによってレポートを生成することができる。これらのレポートは、コール・スタック、特定のコード部分において消費される時間に関する統計的尺度などについての情報を提供することができる。トレース・レポートは、例示的な実施形態の特定の実装に応じて多数の異なる形式を取ることができる。そのようなレポートをポスト・プロセッサなどによる更なる処理に供し、最適化の候補となり得るコード部分、コードの訂正が必要な領域又は望ましい領域を有するコード部分などを識別するための、他のレポートを生成することができる。
1つの例示的な実施形態において、例示的な実施形態の機構を用いて収集されたトレース情報は、後で用いるためにトレース及び/又はレポート・データ・ファイルに格納することができることを認識されたい。別途のコンピュータ・コードの実行及びトレースを実施して、第2のトレース情報及び第2のトレース及び/又はレポート・データ・ファイルを生成することができる。これらの別途のコンピュータ・コードの実行及びトレースは次にポスト・プロセッサに提供され、ポスト・プロセッサは、トレース同士を比較して、修正を必要とする問題が存在するコンピュータ・コードの部分、又はより良好な性能のためにコンピュータ・コードを調整若しくは最適化することができる部分を識別することができる。そのような比較及び解析は、調整を行うことができる又は行うべきである問題又は領域を示す所定の基準を満たす特定の性質又は条件を識別する規則に基づいて、ポスト・プロセッサによって自動的に実施することができる。
図12は、多重プロセッサ及び多重仮想マシンの多重スレッドがプロファイリングされる例示的な一実施形態による、サンプリング・スレッドの例示的な動作の概要を示すフローチャートである。図12は、各サンプリング・スレッドについて逐次的に実行するものとして示されているが、実行スレッドの状態の判断は逐次的ではなくむしろ並列的に実施することができることを認識されたい。
図12に示されるように、動作は、デバイス・ドライバがデータ処理システムのプロセッサの各々のためのサンプラ・スレッドの各々に対して信号を送ることにより開始する(ステップ1210)。次のサンプラ・スレッドが選択され(ステップ1220)、選択されたサンプラ・スレッドの対応する実行スレッドが、サンプリングの時点で対象仮想マシン内で実行中であるかどうかについての判断が行われる(ステップ1230)。対象仮想マシン内で実行スレッドが実行中であった場合、その仮想マシンについてのコール・スタック情報が取り出され、例えば統計量カウンタ内にあるデバイス・ドライバ統計量が更新される(ステップ1240)。次いで、処理すべきサンプリング・スレッドがそれ以上存在するかどうかについて判断が行われる(ステップ1250)。存在する場合には、動作はステップ1120に戻り、そうでない場合には、動作は終了する。
対象仮想マシン内で実行スレッドが実行中でない場合、トレース情報(例えばコール・スタック情報)を仮想マシンから取り出す必要があるいずれかの他のサンプリング・スレッドが存在するかどうかについて判断が行われる(ステップ1260)。存在する場合は、カレント・サンプリング・スレッドは、他のサンプリング・スレッドによってコール・スタックが取り出されるまで、ループ/スピン状態に置かれる。さらに、デバイス・ドライバ統計量が更新される(ステップ1270)。少なくとも1つの他のサンプリング・スレッドがコール・スタック情報を取り出すことを必要としない場合には、単にデバイス・ドライバ統計量を更新することができる(ステップ1280)。
このようにして、例示的な実施形態は、多重仮想マシンのためのサポートを有する時間ベース・コンテキスト・サンプリングのための機構を提供する。上記のように、例示的な実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、又はハードウェア要素とソフトウェア要素の両方を含む実施形態の形を取ることができることを認識されたい。1つの例示的な実施形態においては、例示的な実施形態の機構は、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されないソフトウェア又はプログラム・コードに実装される。
プログラム・コードを格納及び/又は実行するのに適したデータ処理システムは、システム・バスを通じてメモリ要素に直接又は間接に接続される少なくとも1つのプロセッサを含む。メモリ要素は、プログラム・コードの実際の実行中に用いられるローカル・メモリと、大容量記憶装置と、実行中に大容量記憶装置からコードを取り出さなければならない回数を減らすために少なくとも幾つかのプログラム・コードの一時的な記憶場所を提供するキャッシュ・メモリとを含むことができる。
入出力デバイス即ちI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない)は、システムに、直接的に、又は介在するI/Oコントローラを通じて結合することができる。ネットワーク・アダプタをシステムに結合して、データ処理システムを、介在する私設ネットワーク又は公衆ネットワークを通じて他のデータ処理システム又は遠隔のプリンタ若しくは記憶装置に結合できるようにすることもできる。モデム、ケーブル・モデム、及びイーサネット・カードは、現時点で利用可能なネットワーク・アダプタのタイプのうちのごく一部である。
本説明は、例示及び説明を目的として提示されており、網羅的であることも、開示された形態に限定することも、意図されていない。当業者には、多くの変更及び変形が明らかであろう。実施形態は、原理及び実際の用途を最も良く説明するために、並びに、種々の変更を伴う本発明の実施形態を当業者が検討される特定の用途に適したものとして理解できるように、選択され説明されたものである。
100:コンピュータ
102:システム・ユニット
104:映像表示端末
106:キーボード
108:ストレージ・デバイス
110:マウス
200、400、1100:データ処理システム
202:通信ファブリック
220:コンピュータ・プログラム製品
500:コール・ツリー
502、504、506、508:ノード
600:エントリ

Claims (15)

  1. データ処理システムにおいて、前記データ処理システムにおけるコンピュータ・コードの実行をプロファイリングするための時間ベース・コンテキスト・サンプリングを実施するための方法であって、
    イベントの発生に応答して、前記データ処理システムのプロセッサ上で実行されている複数の実行スレッドに関連付けられた複数のサンプリング・スレッドを起動することと、
    前記データ処理システムのプロセッサにより、前記各サンプリング・スレッドについて、1つ又は複数の対象仮想マシンに関する対応する実行スレッドの実行状態を判断することと、
    前記プロセッサにより、前記各サンプリング・スレッドについて、前記対応する実行スレッドの前記実行状態に基づき、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきか否かを判断することと、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すとの判断に応答して、前記トレース情報を前記仮想マシンから取り出し、該トレース情報を、前記データ処理システムに関連付けられたストレージ・デバイスに格納することと
    を含む、方法。
  2. 前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すか否かを判断することが、
    前記サンプリング・スレッドのいずれかが、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきであるか判断することと、
    前記サンプリング・スレッドのいずれもトレース情報を取り出すべきではないとの判断に応答して、前記対応する実行スレッドの実行の条件に基づき、前記複数の実行スレッドに関連付けられた1つ又は複数のデバイス・ドライバ・サンプリング統計量カウンタを更新することと、
    を含む、請求項1に記載の方法。
  3. 対象仮想マシンを選択することであって、前記対象仮想マシンに関するトレース情報が前記データ処理システムの前記プロセッサ上の前記対象仮想マシン内で実行されているスレッドから収集される、対象仮想マシンを選択することをさらに含み、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきか否かを判断することが、前記対応する実行スレッドが前記対象仮想マシン内で現在実行中であるか判断することを含み、
    前記対応する実行スレッドに関連付けられた前記仮想マシンが前記対象仮想マシンであることに応答して、該仮想マシンからトレース情報が取り出される、請求項1に記載の方法。
  4. カレント・サンプリング・スレッドに対応する前記実行スレッドが対象仮想マシン内で現在実行中ではないが、対象仮想マシン内で実行中の対応する実行スレッドを有する少なくとも1つの他のサンプリング・スレッドが存在する場合に、前記少なくとも1つの他のサンプリング・スレッドによりトレース情報が収集されるまで、前記カレント・サンプリング・スレッドがスピン状態に置かれる、請求項3に記載の方法。
  5. 前記対応する実行スレッドの実行の条件に基づき、前記複数の実行スレッドに関連付けられた1つ又は複数のサンプリング統計量カウンタを更新することをさらに含む、請求項1に記載の方法。
  6. 前記1つ又は複数のサンプリング統計量カウンタが、サンプリング・スレッドが起動状態のときに、前記サンプリング・スレッドがその対応する実行スレッドがガベージ・コレクション動作に関与していると判断する回数をカウントするための第1のカウンタ、サンプリング・スレッドが起動状態のときに、前記サンプリング・スレッドがその対応する実行スレッドが対象仮想マシンの外部プロセスを実行中であると判断する回数をカウントするための第2のカウンタ、又はサンプリング・スレッドが起動状態のときに、前記サンプリング・スレッドがその対応する実行スレッドが対象仮想マシン内で実行中であると判断する回数をカウントするための第3のカウンタのうちの少なくとも1つを含む、請求項5に記載の方法。
  7. 前記対象仮想マシンを選択することが、
    前記データ処理システム内で実行されるプロファイラ・ツールに複数の仮想マシンを登録することと、
    前記プロファイラ・ツールに登録された前記複数の仮想マシンの中から対象仮想マシンとしての仮想マシンの選択を受け取ることと、
    を含む、請求項3に記載の方法。
  8. 前記プロファイラ・ツールが、該プロファイラ・ツールに登録された前記複数の仮想マシンのサブセットを巡るサイクルの中の次の仮想マシンを選択することにより、前記複数の仮想マシンの中から対象仮想マシンを選択する、請求項7に記載の方法。
  9. 前記選択された対象仮想マシンが、トレース情報の収集のために選択された、前記プロファイラ・ツールに登録されている前記複数の仮想マシンのサブセットの一部であり、前記複数の仮想マシンの前記サブセットは、前記プロファイラ・ツールに登録されている前記複数の仮想マシンの総数を下回る、請求項7に記載の方法。
  10. 前記サンプリング・スレッドに対応するメモリの作業領域に、前記選択された対象仮想マシンの識別子が書き込まれる、請求項3に記載の方法。
  11. 媒体上にコンピュータ可読プログラムが記録されたコンピュータ記録可能媒体を含むコンピュータ・プログラム製品であって、前記コンピュータ可読プログラムは、コンピュータ・デバイス上で実行されたとき、前記コンピュータ・デバイスに、
    イベントの発生に応答して、複数の実行スレッドに関連付けられた複数のサンプリング・スレッドを起動させ、
    前記各サンプリング・スレッドについて、1つ又は複数の対象仮想マシンに関する対応する実行スレッドの実行状態を判断させ、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドの前記実行状態に基づき、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すか否かを判断させ、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すとの判断に応答して、前記トレース情報を前記仮想マシンから取り出し、該トレース情報を、前記コンピュータ・デバイスに関連付けられたストレージ・デバイスに格納させる、
    コンピュータ・プログラム製品。
  12. 前記コンピュータ可読プログラムが、
    前記サンプリング・スレッドのいずれかが、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきであるか判断することと、
    前記サンプリング・スレッドのいずれもトレース情報を取り出すべきではないとの判断に応答して、前記対応する実行スレッドの実行の条件に基づき、前記複数の実行スレッドに関連付けられた1つ又は複数のデバイス・ドライバ・サンプリング統計量カウンタを更新することと
    によって、前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すか否かを前記コンピュータ・デバイスに判断させる、請求項11に記載のコンピュータ・プログラム製品。
  13. 前記コンピュータ可読プログラムが、さらに、
    対象仮想マシンであって、前記対象仮想マシンに関するトレース情報が前記データ処理システムの前記プロセッサ上の前記対象仮想マシン内で実行されているスレッドから収集される対象仮想マシンを、前記コンピュータ・デバイスに選択させ、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すべきか否かを判断することが、前記対応する実行スレッドが前記対象仮想マシン内で現在実行中であるか判断することをさらに含み、
    前記対応する実行スレッドに関連付けられた前記仮想マシンが前記対象仮想マシンであることに応答して、該仮想マシンからトレース情報が取り出される、
    請求項11に記載のコンピュータ・プログラム製品。
  14. カレント・サンプリング・スレッドに対応する前記実行スレッドが対象仮想マシン内で現在実行中ではないが、対象仮想マシン内で実行中の対応する実行スレッドを有する少なくとも1つの他のサンプリング・スレッドが存在する場合に、前記少なくとも1つの他のサンプリング・スレッドによりトレース情報が収集されるまで、前記カレント・サンプリング・スレッドがスピン状態に置かれる、請求項13に記載のコンピュータ・プログラム製品。
  15. プロセッサと、
    前記プロセッサに結合されたメモリと
    を備えた装置であって、前記メモリは命令を含み、前記命令は、前記プロセッサにより実行されたとき、前記プロセッサに、
    イベントの発生に応答して、複数の実行スレッドに関連付けられた複数のサンプリング・スレッドを起動させ、
    前記各サンプリング・スレッドについて、1つ又は複数の対象仮想マシンに関する対応する実行スレッドの実行状態を判断させ、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドの前記実行状態に基づき、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すか否かを判断させ、
    前記各サンプリング・スレッドについて、前記対応する実行スレッドに関連付けられた仮想マシンからトレース情報を取り出すとの判断に応答して、前記トレース情報を前記仮想マシンから取り出し、該トレース情報を、前記コンピュータ・デバイスに関連付けられたストレージ・デバイスに格納させる、
    装置。
JP2012516649A 2009-06-30 2010-06-16 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング Expired - Fee Related JP5520371B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/494,469 2009-06-30
US12/494,469 US20100333071A1 (en) 2009-06-30 2009-06-30 Time Based Context Sampling of Trace Data with Support for Multiple Virtual Machines
PCT/EP2010/058486 WO2011000700A1 (en) 2009-06-30 2010-06-16 Time based context sampling of trace data with support for multiple virtual machines

Publications (2)

Publication Number Publication Date
JP2012531642A true JP2012531642A (ja) 2012-12-10
JP5520371B2 JP5520371B2 (ja) 2014-06-11

Family

ID=42542773

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012516649A Expired - Fee Related JP5520371B2 (ja) 2009-06-30 2010-06-16 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング

Country Status (5)

Country Link
US (1) US20100333071A1 (ja)
EP (1) EP2386085A1 (ja)
JP (1) JP5520371B2 (ja)
CN (1) CN102341790B (ja)
WO (1) WO2011000700A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10114725B2 (en) 2015-06-02 2018-10-30 Fujitsu Limited Information processing apparatus, method, and computer readable medium

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9418005B2 (en) 2008-07-15 2016-08-16 International Business Machines Corporation Managing garbage collection in a data processing system
US20110144969A1 (en) * 2009-12-11 2011-06-16 International Business Machines Corporation High-Frequency Entropy Extraction From Timing Jitter
US8732671B2 (en) * 2010-02-26 2014-05-20 Red Hat, Inc. Generating stack traces of call stacks that lack frame pointers
US9176783B2 (en) 2010-05-24 2015-11-03 International Business Machines Corporation Idle transitions sampling with execution context
US8843684B2 (en) 2010-06-11 2014-09-23 International Business Machines Corporation Performing call stack sampling by setting affinity of target thread to a current process to prevent target thread migration
US8799872B2 (en) 2010-06-27 2014-08-05 International Business Machines Corporation Sampling with sample pacing
US8453123B2 (en) 2010-07-16 2013-05-28 International Business Machines Corporation Time-based trace facility
US8799904B2 (en) 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling
CN102073580B (zh) * 2011-02-01 2013-10-02 华为技术有限公司 性能剖析方法、剖析工具和计算机系统
US20130227531A1 (en) * 2012-02-24 2013-08-29 Zynga Inc. Methods and Systems for Modifying A Compiler to Generate A Profile of A Source Code
US9081629B2 (en) * 2013-05-19 2015-07-14 Frank Eliot Levine Excluding counts on software threads in a state
DE112014007090T5 (de) * 2014-10-24 2017-07-13 Google Inc. Verfahren und systeme zum automatischen tagging anhand von software-ausführungs-traces
US9658942B2 (en) 2015-04-02 2017-05-23 International Business Machines Corporation Dynamic tracing framework for debugging in virtualized environments
US9448833B1 (en) 2015-04-14 2016-09-20 International Business Machines Corporation Profiling multiple virtual machines in a distributed system
US10091076B2 (en) 2015-08-25 2018-10-02 Google Llc Systems and methods for configuring a resource for network traffic analysis
US9965375B2 (en) * 2016-06-28 2018-05-08 Intel Corporation Virtualizing precise event based sampling
US10198341B2 (en) * 2016-12-21 2019-02-05 Microsoft Technology Licensing, Llc Parallel replay of executable code
US10657031B2 (en) * 2018-03-30 2020-05-19 Oracle International Corporation Scalable execution tracing for large program codebases
US11714676B2 (en) * 2020-01-03 2023-08-01 International Business Machines Corporation Software-directed value profiling with hardware-based guarded storage facility
US11809571B2 (en) * 2021-06-14 2023-11-07 Cisco Technology, Inc. Vulnerability analysis using continuous application attestation

Family Cites Families (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5305454A (en) * 1991-08-12 1994-04-19 International Business Machines Corporation Notification of event handlers in broadcast or propagation mode by event management services in a computer system
JP2734269B2 (ja) * 1991-12-26 1998-03-30 日本電気株式会社 半導体製造装置
US5544318A (en) * 1993-04-16 1996-08-06 Accom, Inc., Asynchronous media server request processing system for servicing reprioritizing request from a client determines whether or not to delay executing said reprioritizing request
US5404529A (en) * 1993-07-19 1995-04-04 Taligent, Inc. Object-oriented interprocess communication system interface for a procedural operating system
US5379432A (en) * 1993-07-19 1995-01-03 Taligent, Inc. Object-oriented interface for a procedural operating system
EP0689141A3 (en) * 1994-06-20 1997-10-15 At & T Corp Disruption-based hardware support for system performance profiling
US6728959B1 (en) * 1995-08-08 2004-04-27 Novell, Inc. Method and apparatus for strong affinity multiprocessor scheduling
US5764241A (en) * 1995-11-30 1998-06-09 Microsoft Corporation Method and system for modeling and presenting integrated media with a declarative modeling language for representing reactive behavior
JP3672208B2 (ja) * 1996-07-02 2005-07-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 階層化トランザクション処理方法
GB2321540A (en) * 1997-01-25 1998-07-29 Ibm Automatic transactional locking using object request broker
US5881138A (en) * 1997-04-27 1999-03-09 Ameritech Corporation Method and system for detecting a change in at least one telecommunication service rate plan
US5913213A (en) * 1997-06-16 1999-06-15 Telefonaktiebolaget L M Ericsson Lingering locks for replicated data objects
US6108654A (en) * 1997-10-31 2000-08-22 Oracle Corporation Method and system for locking resources in a computer system
US6751789B1 (en) * 1997-12-12 2004-06-15 International Business Machines Corporation Method and system for periodic trace sampling for real-time generation of segments of call stack trees augmented with call stack position determination
US6442572B2 (en) * 1998-01-28 2002-08-27 International Business Machines Corporation Method of and computer system for performing a transaction on a database
US6233585B1 (en) * 1998-03-12 2001-05-15 Crossworlds Software, Inc. Isolation levels and compensating transactions in an information system
US6125363A (en) * 1998-03-30 2000-09-26 Buzzeo; Eugene Distributed, multi-user, multi-threaded application development method
US6112225A (en) * 1998-03-30 2000-08-29 International Business Machines Corporation Task distribution processing system and the method for subscribing computers to perform computing tasks during idle time
US6954922B2 (en) * 1998-04-29 2005-10-11 Sun Microsystems, Inc. Method apparatus and article of manufacture for time profiling multi-threaded programs
US6941552B1 (en) * 1998-07-30 2005-09-06 International Business Machines Corporation Method and apparatus to retain applet security privileges outside of the Java virtual machine
US6314471B1 (en) * 1998-11-13 2001-11-06 Cray Inc. Techniques for an interrupt free operating system
US6681230B1 (en) * 1999-03-25 2004-01-20 Lucent Technologies Inc. Real-time event processing system with service authoring environment
US6449614B1 (en) * 1999-03-25 2002-09-10 International Business Machines Corporation Interface system and method for asynchronously updating a share resource with locking facility
US6601233B1 (en) * 1999-07-30 2003-07-29 Accenture Llp Business components framework
US6728955B1 (en) * 1999-11-05 2004-04-27 International Business Machines Corporation Processing events during profiling of an instrumented program
US6742016B1 (en) * 2000-03-24 2004-05-25 Hewlett-Packard Devolpment Company, L.P. Request acceptor for a network application system and a method thereof
US6625602B1 (en) * 2000-04-28 2003-09-23 Microsoft Corporation Method and system for hierarchical transactions and compensation
US6880086B2 (en) * 2000-05-20 2005-04-12 Ciena Corporation Signatures for facilitating hot upgrades of modular software components
US7020696B1 (en) * 2000-05-20 2006-03-28 Ciena Corp. Distributed user management information in telecommunications networks
US6769074B2 (en) * 2000-05-25 2004-07-27 Lumigent Technologies, Inc. System and method for transaction-selective rollback reconstruction of database objects
US7236976B2 (en) * 2000-06-19 2007-06-26 Aramark Corporation System and method for scheduling events and associated products and services
US7389497B1 (en) * 2000-07-06 2008-06-17 International Business Machines Corporation Method and system for tracing profiling information using per thread metric variables with reused kernel threads
US6904594B1 (en) * 2000-07-06 2005-06-07 International Business Machines Corporation Method and system for apportioning changes in metric variables in an symmetric multiprocessor (SMP) environment
US6993246B1 (en) * 2000-09-15 2006-01-31 Hewlett-Packard Development Company, L.P. Method and system for correlating data streams
US7206848B1 (en) * 2000-09-21 2007-04-17 Hewlett-Packard Development Company, L.P. Intelligently classifying and handling user requests in a data service system
US6857120B1 (en) * 2000-11-01 2005-02-15 International Business Machines Corporation Method for characterizing program execution by periodic call stack inspection
US7426730B2 (en) * 2001-04-19 2008-09-16 Wre-Hol Llc Method and system for generalized and adaptive transaction processing between uniform information services and applications
US20030004970A1 (en) * 2001-06-28 2003-01-02 Watts Julie Ann Method for releasing update locks on rollback to savepoint
US7499924B2 (en) * 2001-06-28 2009-03-03 International Business Machines Corporation Method for releasing update locks on rollback to savepoint
US6697802B2 (en) * 2001-10-12 2004-02-24 International Business Machines Corporation Systems and methods for pairwise analysis of event data
US20030083912A1 (en) * 2001-10-25 2003-05-01 Covington Roy B. Optimal resource allocation business process and tools
WO2003038596A1 (en) * 2001-11-01 2003-05-08 Verisign, Inc. High speed non-concurrency controlled database
US7263108B2 (en) * 2002-08-06 2007-08-28 Netxen, Inc. Dual-mode network storage systems and methods
US7103597B2 (en) * 2002-10-03 2006-09-05 Mcgoveran David O Adaptive transaction manager for complex transactions and business process
US7234166B2 (en) * 2002-11-07 2007-06-19 Stonesoft Corporation Event sequence detection
US7398518B2 (en) * 2002-12-17 2008-07-08 Intel Corporation Method and apparatus for measuring thread wait time
US20040162741A1 (en) * 2003-02-07 2004-08-19 David Flaxer Method and apparatus for product lifecycle management in a distributed environment enabled by dynamic business process composition and execution by rule inference
US7114150B2 (en) * 2003-02-13 2006-09-26 International Business Machines Corporation Apparatus and method for dynamic instrumenting of code to minimize system perturbation
US7222119B1 (en) * 2003-02-14 2007-05-22 Google Inc. Namespace locking scheme
US6798022B1 (en) * 2003-03-11 2004-09-28 Oki Electric Industry Co., Ltd. Semiconductor device with improved protection from electrostatic discharge
US8762415B2 (en) * 2003-03-25 2014-06-24 Siebel Systems, Inc. Modeling of order data
US7299478B2 (en) * 2003-03-28 2007-11-20 Sbc Knowledge Ventures, L.P. Integration service and domain object for telecommunications operational support
US7536673B2 (en) * 2003-07-22 2009-05-19 Sap Ag Application business object processing
US7321965B2 (en) * 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7089250B2 (en) * 2003-10-08 2006-08-08 International Business Machines Corporation Method and system for associating events
US7458078B2 (en) * 2003-11-06 2008-11-25 International Business Machines Corporation Apparatus and method for autonomic hardware assisted thread stack tracking
US7257657B2 (en) * 2003-11-06 2007-08-14 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses for specific types of instructions
US7509653B2 (en) * 2004-01-22 2009-03-24 International Business Machines Corporation Efficient and scalable event partitioning in business integration applications using multiple delivery queues
US7779238B2 (en) * 2004-06-30 2010-08-17 Oracle America, Inc. Method and apparatus for precisely identifying effective addresses associated with hardware events
US20060023642A1 (en) * 2004-07-08 2006-02-02 Steve Roskowski Data collection associated with components and services of a wireless communication network
US7487503B2 (en) * 2004-08-12 2009-02-03 International Business Machines Corporation Scheduling threads in a multiprocessor computer
US20060059486A1 (en) * 2004-09-14 2006-03-16 Microsoft Corporation Call stack capture in an interrupt driven architecture
US7716647B2 (en) * 2004-10-01 2010-05-11 Microsoft Corporation Method and system for a system call profiler
US7721268B2 (en) * 2004-10-01 2010-05-18 Microsoft Corporation Method and system for a call stack capture
US20060072563A1 (en) * 2004-10-05 2006-04-06 Regnier Greg J Packet processing
US20060080486A1 (en) * 2004-10-07 2006-04-13 International Business Machines Corporation Method and apparatus for prioritizing requests for information in a network environment
US7548974B2 (en) * 2004-10-12 2009-06-16 International Business Machines Corporation Adaptively processing client requests to a network server
US7593980B2 (en) * 2004-11-30 2009-09-22 Cisco Technology, Inc. Application server system and method
US20060149877A1 (en) * 2005-01-03 2006-07-06 Pearson Adrian R Interrupt management for digital media processor
FR2881242B1 (fr) * 2005-01-21 2007-03-23 Meiosys Soc Par Actions Simpli Procede non intrusif de journalisation d'evements internes au sein d'un processus applicatif, et systeme mettant en oeuvre ce procede
TWI257216B (en) * 2005-03-23 2006-06-21 Ind Tech Res Inst System and a method of request scheduling for the differentiated quality of service at an intermediary
US7689867B2 (en) * 2005-06-09 2010-03-30 Intel Corporation Multiprocessor breakpoint
US7788664B1 (en) * 2005-11-08 2010-08-31 Hewlett-Packard Development Company, L.P. Method of virtualizing counter in computer system
US7474991B2 (en) * 2006-01-19 2009-01-06 International Business Machines Corporation Method and apparatus for analyzing idle states in a data processing system
US8018845B2 (en) * 2006-01-25 2011-09-13 Cisco Technology, Inc Sampling rate-limited traffic
US7587364B2 (en) * 2006-03-24 2009-09-08 Sap Ag Systems and methods for bank determination and payment handling
US20080082761A1 (en) * 2006-09-29 2008-04-03 Eric Nels Herness Generic locking service for business integration
US7921075B2 (en) * 2006-09-29 2011-04-05 International Business Machines Corporation Generic sequencing service for business integration
US9514201B2 (en) * 2006-10-13 2016-12-06 International Business Machines Corporation Method and system for non-intrusive event sequencing
US9274857B2 (en) * 2006-10-13 2016-03-01 International Business Machines Corporation Method and system for detecting work completion in loosely coupled components
US7493436B2 (en) * 2006-10-26 2009-02-17 International Business Machines Corporation Interrupt handling using simultaneous multi-threading
US8136124B2 (en) * 2007-01-18 2012-03-13 Oracle America, Inc. Method and apparatus for synthesizing hardware counters from performance sampling
US20080196030A1 (en) * 2007-02-13 2008-08-14 Buros William M Optimizing memory accesses for multi-threaded programs in a non-uniform memory access (numa) system
US7962924B2 (en) * 2007-06-07 2011-06-14 International Business Machines Corporation System and method for call stack sampling combined with node and instruction tracing
US8132170B2 (en) * 2007-08-07 2012-03-06 International Business Machines Corporation Call stack sampling in a data processing system
US8381215B2 (en) * 2007-09-27 2013-02-19 Oracle America, Inc. Method and system for power-management aware dispatcher
JP4912375B2 (ja) * 2007-09-28 2012-04-11 長堀工業株式会社 流体継手
US8117618B2 (en) * 2007-10-12 2012-02-14 Freescale Semiconductor, Inc. Forward progress mechanism for a multithreaded processor
US8141053B2 (en) * 2008-01-04 2012-03-20 International Business Machines Corporation Call stack sampling using a virtual machine
US8156495B2 (en) * 2008-01-17 2012-04-10 Oracle America, Inc. Scheduling threads on processors
US8434098B2 (en) * 2008-02-07 2013-04-30 Microsoft Corporation Synchronizing split user-mode/kernel-mode device driver architecture
GB2457341B (en) * 2008-02-14 2010-07-21 Transitive Ltd Multiprocessor computing system with multi-mode memory consistency protection
US8799904B2 (en) * 2011-01-21 2014-08-05 International Business Machines Corporation Scalable system call stack sampling

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10114725B2 (en) 2015-06-02 2018-10-30 Fujitsu Limited Information processing apparatus, method, and computer readable medium

Also Published As

Publication number Publication date
US20100333071A1 (en) 2010-12-30
EP2386085A1 (en) 2011-11-16
JP5520371B2 (ja) 2014-06-11
CN102341790A (zh) 2012-02-01
WO2011000700A1 (en) 2011-01-06
CN102341790B (zh) 2014-12-10

Similar Documents

Publication Publication Date Title
JP5520371B2 (ja) 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング
US8132170B2 (en) Call stack sampling in a data processing system
US8286139B2 (en) Call stack sampling for threads having latencies exceeding a threshold
US20100017583A1 (en) Call Stack Sampling for a Multi-Processor System
US8839271B2 (en) Call stack sampling to obtain information for analyzing idle states in a data processing system
US8141053B2 (en) Call stack sampling using a virtual machine
US8214806B2 (en) Iterative, non-uniform profiling method for automatically refining performance bottleneck regions in scientific code
US9026862B2 (en) Performance monitoring for applications without explicit instrumentation
US8286134B2 (en) Call stack sampling for a multi-processor system
US6658654B1 (en) Method and system for low-overhead measurement of per-thread performance information in a multithreaded environment
JP5705084B2 (ja) 2パス自動アプリケーション計測
EP0919922B1 (en) Method for estimating statistics of properties of interactions processed by a processor pipeline
US8423972B2 (en) Collecting profile-specified performance data on a multithreaded data processing system
US8104036B2 (en) Measuring processor use in a hardware multithreading processor environment
JP4681491B2 (ja) プロファイリングプログラムおよびプロファイリング方法
US8275581B2 (en) Managing statistical profile data
US7398518B2 (en) Method and apparatus for measuring thread wait time
US20040015879A1 (en) Method and apparatus for tracing details of a program task
CN102893261B (zh) 空闲转换采样方法及其系统
US7043719B2 (en) Method and system for automatically prioritizing and analyzing performance data for one or more, system configurations
US6725363B1 (en) Method for filtering instructions to get more precise event counts
US9317262B2 (en) Identification of code synchronization points
US7827543B1 (en) Method and apparatus for profiling data addresses
JP2011118596A (ja) 情報処理装置およびプロファイリング方法
Haghdoost et al. hfplayer: Scalable replay for intensive block I/O workloads

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130304

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20131129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140221

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140318

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140404

R150 Certificate of patent or registration of utility model

Ref document number: 5520371

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees