(57)【要約】【課題】ＯＳ環境下で実行中のプログラムに対して、プログラムの修正や実行停止することなく、特定のプログラムの挙動に関する情報を取得すること。【解決手段】性能プロファイリング取得ツール１２０では、プロセッサ１００のイベントコンテキストレジスタ１０２に測定対象となるプロセスのプロセスＩＤを登録する。そして、ＯＳ１１０の環境下で測定対象プログラム１１１が実行されると、実行中の測定対象プログラム１１１のプロセスＩＤが実行情報としてプロセッサ１００のコンテキストレジスタ１０３に記録される。コンテキストレジスタ１０３に記録されたプロセスＩＤは、比較器１０４によって、イベントコンテキストレジスタ１０２に登録されている測定対象となるプロセスＩＤと比較される。比較器１０４では、比較されたプロセスＩＤ同士が一致した場合にのみ、イベントカウンタ１０５にカウント指示を出力する。【選択図】図１
2010003057.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なプロセッサであって、
前記任意のアプリケーションプログラムの中の測定対象となるイベントのＩＤが登録されているイベントコンテキストレジスタと、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを記録するコンテキストレジスタと、
前記コンテキストレジスタに記録されたイベントのＩＤと、前記イベントコンテキストレジスタに登録されている測定対象となるイベントのＩＤとを比較する比較器と、
前記比較器によって前記ＩＤ同士が一致すると判断された回数をカウントするイベントカウンタと、
を備えることを特徴とするプロセッサ。
【請求項２】
前記イベントコンテキストレジスタは、前記測定対象となるイベントのＩＤとして、プロセス、タスクおよびスレッドのいずれかをあらわすＩＤが登録され、
前記コンテキストレジスタは、前記ＯＳ上で前記任意のアプリケーションプログラムのイベントが実行されると、当該実行されたイベントのＩＤとして前記イベントコンテキストレジスタに登録されているＩＤと同じ種類のＩＤを記録することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
請求項１または２に記載のプロセッサと、
前記プロセッサによって前記任意のアプリケーションプログラムが実行されると、前記イベントカウンタによってカウントされた値を取得する取得手段と、
前記取得手段によって取得された情報を出力する出力手段と、
を備えることを特徴とする性能プロファイリング装置。
【請求項４】
前記取得手段は、前記プロセッサに搭載されたプログラムカウンタから、前記イベントカウンタの値が取得されたときのプログラムカウント値を取得し、
前記出力手段は、前記取得手段によって取得されたプログラムカウント値を、前記イベントカウンタの値とともに出力することを特徴とする請求項３に記載の性能プロファイリング装置。
【請求項５】
オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なコンピュータを、
前記任意のアプリケーションプログラムの中の測定対象となるイベントのＩＤが登録されているイベントコンテキスト登録手段、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを記録するコンテキスト記録手段、
前記コンテキスト記録手段に記録されたＩＤと、前記イベントコンテキスト登録手段に登録されている測定対象となるイベントのＩＤとを比較する比較手段、
前記比較手段によって前記ＩＤ同士が一致すると判断された回数をカウントするイベントカウント手段、
前記イベントカウント手段によってカウントされた値を出力する出力手段、
として機能させることを特徴とする性能プロファイリングプログラム。
【請求項６】
前記コンピュータを、
当該コンピュータに搭載されたプログラムカウンタから、イベントカウント手段によってイベントカウンタの値がカウントされたときのプログラムカウント値を取得し、
前記出力手段は、前記取得手段によって取得されたプログラムカウント値を、前記イベントカウンタの値とともに出力することを特徴とする請求項５に記載の性能プロファイリングプログラム。
【請求項７】
複数のレジスタを備え、オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なプロセッサを搭載したコンピュータが、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを前記複数のレジスタの中の一のレジスタに記録するコンテキスト記録工程と、
前記コンテキスト記録工程によって前記一のレジスタに記録されたＩＤと、前記一以外のレジスタにあらかじめ登録されていた測定対象となるイベントのＩＤとを比較する比較工程と、
前記比較工程によって前記ＩＤ同士が一致すると判断された回数をカウントするカウント工程と、
を実行することを特徴とする性能プロファイリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＯＳ環境下で実運用中のプログラムについての性能プロファイリングを取得するためのプロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法に関する。
【背景技術】
【０００２】
従来より、プロセッサの多くには、プロセッサ内部のイベントや、外部とのやり取りによるイベントなどをカウントするためのカウンタ（以下、「イベントカウンタ」とよぶ）が搭載されている。たとえば、インテル社のペンティアム（登録商標）プロセッサでは、複数本のカウンタを備えている。これらのカウンタによって、クロック数、実行命令数、あるいはキャッシュミス数などの多数のイベントの中から選択してイベントカウントとして機能するように構成されている。このようなカウント機能によって、プロセッサによって実行されているアプリケーションプログラム（以下、「プログラム」という）のどのプロセスが多く使用されているかといったプロセッサの動作の解析が可能となった。
【０００３】
また、上記のようなプロセッサの他にＩＢＭ社のパワーＰＣプロセッサも、ペンティアムプロセッサと同様に複数のカウンタを備えた構成が採用されており、多数のイベントの中から選択してカウントすることができる。これによりパイプラインストール、メモリトラフィック、バス負荷情報などのアーキテクチアのイベント情報とプログラムカウンタ（ＰＣ）を同時に取得することが可能となる。そして、これらの情報を参照することによって、どの関数や処理でイベントが多く発生しているかを解析可能となった。さらに、時系列に即して連続的に上記の情報を取得し、グラフなどにより視覚的に出力することによって、局所的な問題箇所や、システム全体を通したイベント情報の推移や高負荷部分を特定することができる（たとえば、下記特許文献１参照。）。
【０００４】
従来、これらイベント情報を取得するには、累積型と割込み型との２つの手法が用いられている。累積型の場合、指定したイベント（たとえば、実行サイクル数やキャッシュミス回数など）が発生するごとにイベント値をカウントする。そして、プロセッサには、イベントカウンタによってカウントされた測定範囲のイベント値の累積値が格納されることによってイベント情報が取得される。
【０００５】
一方、割込み型の場合、プロセッサには、イベントカウンタに加えて、あらかじめ指定した閾値を超える回数のイベント（たとえば、実行サイクル数やキャッシュミス回数など指定したイベント）が発生するごとに割込みを発生させるカウンタ機構が内蔵されている。そして、割込みハンドラ（割込み内容に応じて呼び出されるプログラム）では、割込み発生アドレス（プログラムカウンタ）とイベントカウンタによるカウント値などイベント情報が取得され、イベントの発生した関数や命令を特定することができる。
【０００６】
なお、上述したイベントとは、たとえば下記のようなプロセッサ内のハードウェア動作をあらわす情報である。
−実行サイクル数
−キャッシュミス数
−ＴＬＢミス数
−実行命令数
−実行命令並列度
−分岐命令実行数
−特定命令の実行数
−パイプラインストール要因
−レジスタ干渉サイクル数
−バスアクセス情報
【０００７】
上述した手法のいずれを採用するかは、基本的には、プログラムを実行させるプロセッサのハードウェア構成に依存していた。とはいえ、割込み生成機能を有さない種類のプロセッサであっても、プロセッサ内蔵のインターバルタイマによる一定時間ごとの割込み機能を利用することによって上述したような割込み型のイベント情報の取得を実現することも可能であった。
【０００８】
【特許文献１】特開２００４−３１８５３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述したような従来技術を用いてイベント情報すなわちプログラムの性能プロファイリングを取得するには、通常のプログラムにイベント情報処理を付加した専用のプログラムを用意しなければならなかった。図１３は、従来の性能プロファイリング処理の構成を示す説明図である。図１３のように、プロセッサ１３００は、プログラム実行部１３０１と、イベントカウンタ１３０２と、プログラムカウンタ１３０３とが含まれている。
【００１０】
ここで、プロセッサ１３００が、プログラム実行部１３０１によって測定対象プログラム１３０４を実行させ、測定対象プログラム１３０４の性能プロファイリングを実施する場合について説明する。図１３のように、測定対象プログラム１３０４には、性能プロファイリングを実施したい部分となる関数あるいはルーチンの前後に、性能プロファイリング開始呼び出しコマンド１３１０と、性能プロファイリング終了呼び出しコマンド１３２０と、性能プロファイリング関数（取得ルーチン）とが付加されている。
【００１１】
すなわち、実行中の測定対象プログラム１３０４を、本来の構成ではなく、性能プロファイリング用に修正しなければならない。また、イベント情報のカウント時にはデバッグ情報やＣ言語などで記述されたソースプログラム（プログラミング言語によらないため以下、ソースプログラムと表現する）が必要であるが、これら環境のないプログラムのイベント情報は取得できない。さらに、イベント取得ルーチンをリンクするため、取得したイベントに誤差が発生してしまう。たとえば、イベントとして命令キャッシュ情報を指定した場合、プログラムにイベント取得ルーチンをリンクするため、コートサイズが大きくなり、イベント取得ルーチンによる副作用が発生するというように、様々な問題を抱えていた。
【００１２】
さらに、ＯＳ環境下では、性能プロファイリングを測定したい測定対象プログラムと他のプログラムとを同時に実行させるような利用状況が多々発生する。図１４は、複数のプログラムを実行させた場合のイベントカウンタのカウント処理を示す説明図である。図１４のようにプロセス１と、プロセス２とが同時に実行されているとしても、イベント情報は同一のイベントカウンタ１３０２によってカウントされてしまう。したがって、測定対象プログラムのみのイベント情報やプログラムカウンタ情報を取得することは不可能であった。
【００１３】
この発明は、上述した従来技術による問題点を解消するため、ＯＳ環境下で実行中のプログラムに対して、プログラムの修正や実行停止をすることなく、特定のプログラムの挙動に関する情報を取得することのできるプロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決し、目的を達成するため、プロセッサは、ＯＳ上で任意のアプリケーションプログラムを実行可能なプロセッサであって、前記任意のアプリケーションプログラムの中の測定対象となるイベントのＩＤが登録されたイベントコンテキストレジスタと、前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを記録するコンテキストレジスタと、前記コンテキストレジスタに記録されたイベントのＩＤと、前記イベントコンテキストレジスタに登録されている測定対象となるイベントのＩＤとを比較する比較器と、前記比較器によって前記ＩＤ同士が一致すると判断された回数をカウントするイベントカウンタと、を備えることを要件とする。
【００１５】
このプロセッサによれば、実行中のアプリケーションプログラムにおいて、イベントコンテキストレジスタに登録された測定対象となるイベントのＩＤに関するカウントが蓄積される。
【００１６】
また、上述した課題を解決し、目的を達成するため、この性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法は、複数のレジスタを備え、オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なコンピュータが、前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを前記複数のレジスタの中の一のレジスタに記録する処理と、前記一のレジスタに記録されたプロセスＩＤと、前記一のレジスタ以外の他のレジスタにあらかじめ登録されている測定対象となるイベントのＩＤとを比較する処理と、比較した前記ＩＤ同士が一致すると判断された回数をイベント情報としてカウントする処理と、を含むことを要件とする。
【００１７】
この性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法によれば、アプリケーションプログラムを構成するすべてのイベントの中から指定したイベントに関する情報を取得することができる。
【発明の効果】
【００１８】
このプロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法によれば、ＯＳ環境下で実行中のプログラムに対して、アプリケーションプログラムの修正や実行停止をすることなく、特定のプログラムの挙動に関する情報を取得することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１９】
以下に添付図面を参照して、このプロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法の好適な実施の形態を詳細に説明する。このプロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法では、あらかじめ測定対象となるイベントのＩＤを登録しておくレジスタを用意し、実行させたイベントのＩＤと登録されているＩＤとを比較して、ＩＤ同士が一致した場合にのみイベントカウンタによってカウントさせる。したがって、イベントカウンタでは、測定対象となるイベントのＩＤに範囲を絞ったイベント情報を取得することができる。また、測定対象プログラム自体にイベント情報取得用のコマンドを埋め込む必要もない。なお、以下の説明では、アプリケーションプログラムに含まれるイベントの一例としてプロセスを指定して性能プロファイリングを取得するための処理とする。
【００２０】
（性能プロファイリング処理の概要）
まず、本実施の形態にかかる性能プロファイリング処理の概要について説明する。図１は、本実施の形態にかかる性能プロファイリング処理の概要を示す説明図である。本実施の形態では、プロセッサ１００に、従来のイベントカウンタ、イベントモード設定レジスタ、しきい値保持レジスタ、コンテキストレジスタなどに加えて、新しくイベントコンテキストレジスタが内蔵されている。ＯＳ１１０上では、上述のような構成のプロセッサ１００のプログラム実行部１０１によって測定対象プログラム１１１が実行される。
【００２１】
そして、性能プロファイリングを取得する場合には、性能プロファイリング取得ツール１２０を実行させる。性能プロファイリング取得ツール１２０では、コンピュータのハードウェア資源をイベントコンテキストレジスタ１０２に測定対象となるプロセスＩＤを登録する登録手段と、イベントカウンタ１０５によってカウントされた測定対象となるプロセスＩＤのイベント情報のカウント数を取得する取得手段と、この取得手段によって取得した情報を出力する出力手段として機能させる。
【００２２】
たとえば、プロセッサ１００のイベントコンテキストレジスタ１０２に測定対象プログラム１１１の中のさらに測定対象となるプロセスをあらわすプロセスＩＤを登録する。そして、ＯＳ１１０の環境下で測定対象プログラム１１１が実行されると、性能プロファイリング取得ツール１２０は、実行中の測定対象プログラム１１１のプロセスＩＤが実行情報としてプロセッサ１００のコンテキストレジスタ１０３に記録させる。コンテキストレジスタ１０３に記録されたプロセスＩＤは、比較器１０４によって、イベントコンテキストレジスタ１０２に登録されている測定対象となるプロセスＩＤと比較される。比較器１０４では、比較されたプロセスＩＤ同士が一致した場合にのみ、イベントカウンタ１０５にカウント指示を出力する。したがって、イベントカウンタ１０５のカウント結果は、測定対象となるプロセスＩＤに絞ったイベント情報として出力される。なお、プロセッサ１００には、従来のプロセッサと同様に、プログラムカウンタ１０６も搭載されており、イベントカウンタ１０５のカウントのタイミングに連動してプログラムカウント結果を出力することができる。したがって、プロセッサ１００からは、プログラムカウンタ１０６によるプログラムカウント値と対応つけられたイベントのカウント結果が性能プロファイリング情報として取得される。
【００２３】
なお、上述の説明では、ＯＳ１１０上で実行されるプログラムにおけるプロセスを測定対象としてイベントコンテキストレジスタ１０２に登録しているが、測定対象は、プロセスに限るものではない。すなわち、タスクやスレッドでも同様に測定対象として登録可能である。したがって、以下の説明では、便宜上プロセスを測定対象としているが、実際には、タスクやスレッドに置換可能な処理となる。
【００２４】
（性能プロファイリング取得ツール）
つぎに、上述した本実施の形態にかかる性能プロファイリング処理を実現するための性能プロファイリング取得ツール１２０の構成について説明する。図２は、性能プロファイリング取得ツールの構成を示す説明図である。すなわち、本実施の形態では、上述したプロセッサ１００によって測定対象プログラム１１１を実行させたコンピュータに性能プロファイリング取得ツール１２０を適用させることによって、上述したような性能プロファイリング装置が実現される。性能プロファイリング取得ツール１２０は、測定対象プログラム１１１に対して、プロセスＩＤ、取得イベント、取得権限や割込みのしきい値などをパラメタで指定して測定対象プログラムのイベント情報を取得する。
【００２５】
また、図２のように、性能プロファイリング取得ツール１２０は、アプリケーション層によって実現される。したがって、ユーザが登録した特定のプロセスに絞ったイベント情報を取得する際は、性能プロファイリング取得ツール１２０からプロセッサ１００の各ハードウェア資源を利用するために、イベント取得ライブラリ２００からＯＳ１１０の環境下のドライバを経由して各ハードウェア資源にアクセスするなど、一般的なハードウェア資源のアクセス階層にしたがった処理をおこなう。
【００２６】
＜プロセッサの構成＞
ここでは、まず、性能プロファイリング取得ツール１２０に用いられているプロセッサ１００の構成について説明する。図３は、プロセッサの構成を示すブロック図である。なお、図３のプロセッサ１００では、性能プロファイリング取得ツール１２０に利用する構成のみ抽出して表示している。したがって、実際のプロセッサ１００には、クロックコアをはじめとするプログラム実行部１０１（図１参照）のような、従来のプロセッサと同様の機能部を含んでいるが、それらは図示および説明は省略する。
【００２７】
したがって、図３のプロセッサ１００には、上述したイベントコンテキストレジスタ１０２と、コンテキストレジスタ１０３と、比較器１０４と、イベントカウンタ１０５に加えて、実行中の測定対象プログラム１１１の測定対象となるイベントモードの設定が記録されているイベントモード設定レジスタ３０１と、割込み処理の判断基準となるしきい値が保持されたしきい値保持レジスタ３０２と、比較器３０３とが備えられている。
【００２８】
イベントカウンタ１０５には、プログラム実行部１０１（図１参照）から実行中のイベントに関する情報が入力される。そして、イベントカウンタ１０５は、イベントモード設定レジスタ３０１に設定されているイベントモードと、実行中のイベントとが一致し、なおかつ、比較器１０４からイベントコンテキストレジスタ１０２に登録されたプロセスＩＤとコンテキストレジスタ１０３に記録されたプロセスＩＤとの一致をあらわす信号が入力された場合に（イベントカウンタ１０５内部の比較器によって判断する）、加算器に１を加算させてイベント情報を計数する。加算器の計数結果は、記憶領域に格納され、性能プロファイリング取得ツール１２０の呼び出しに応じて出力される。
【００２９】
なお、図１の比較器１０４ではイベントコンテキストレジスタ１０２とコンテキストレジスタ１０３を入力としているが、これ以外にも任意のレジスタを比較条件として追加してもよい。たとえば、カーネル権限／ユーザ権限での走行状態を区別するレジスタを追加すると、カーネル権限／ユーザ権限ごとに特定プロセスの特定イベントを計測することができる。
【００３０】
また、プロセッサ１００における比較器３０３は、イベントカウンタ１０５の計数結果と、しきい値保持レジスタ３０２に保持されたしきい値とを比較して、一致したタイミングで性能プロファイル割込みハンドラを実行させることができる。したがって、比較器３０３の判断によって割込み手段が発生させられた割込み間隔ごとに、イベントカウンタ１０５によってカウントされた測定対象となるプロセスＩＤのイベント情報のカウント数を取得することもできる。
【００３１】
図２の説明に戻ると、たとえば、Ｌｉｎｕｘシステムでは、測定対象に登録したプロセスＩＤのイベント情報を取得するためには、ＯＳに組み込まれる専用アクセスドライバを用意する。このドライバは、測定対象となるプロセスを特定するため、イベントコンテキストレジスタ１０２にプロセスＩＤを設定する機能を備えている。
【００３２】
また、イベント取得ライブラリ２００は、ユーザがイベント取得関数に指定した対象プログラムのプロセスＩＤと各種パラメタ（取得対象イベント、取得開始指示、取得終了指示、取得権限、しきい値）が蓄積されている。これら蓄積された情報から性能プロファイリング取得ツール１２０によって測定対象を指定することによって、イベント取得ドライバ１１２を呼び出すことができる。
【００３３】
なお、イベント取得ライブラリ２００に蓄積しておくイベント取得の関数名は任意でよい。具体例を挙げると、実施例１として、一つの関数名で取得開始／終了を切り分ける例がある。この場合は、「ｐａ＿ｄｒｉｖｅｒ（ｐｉｄ，ｐａｒａ，ｍｏｄｅ，ｌ）；ｐａｒａ（１：開始，２：終了），ｍｏｄｅ（イベント種別），ｌ（ｕ：ｕｓｅｒ，ｓ：ｓｙｓｔｅｍ）」という関数名となる。
【００３４】
また、実施例２として、取得開始関数：ｐａ＿ｓｔａｒｔと、取得終了関数：ｐａ＿ｓｔｏｐとを別関数にする例がある。この場合は、「ｐａ＿ｓｔａｒｔ（ｐｉｄ，ｍｏｄｅ，ｌ）；」、「ｐａ＿ｓｔｏｐ（ｐｉｄ，ｍｏｄｅ，ｌ）；」といった関数名となる。
【００３５】
つぎに、イベント取得ドライバ１１２の処理手順について説明する。図４は、イベント取得ドライバの処理手順を示すフローチャートである。図４において、ユーザによってイベント取得関数に指定された測定対象プログラム１１１のプロセスＩＤを取得する（ステップＳ４０１）。
【００３６】
つぎに、取得するイベント種別と開始指定をイベントカウンタ１０５に指定する（ステップＳ４０２）。そして、現在プロセッサ１００において実行しているプロセスＩＤが、ステップＳ４０１によって指定されたプロセスＩＤと等しいか否かを判断する（ステップＳ４０３）。ここで、ステップＳ４０１によって指定されたプロセスＩＤと等しいと判断された場合（ステップＳ４０３：Ｙｅｓ）、イベントカウンタ１０５を計数し（ステップＳ４０４）、イベント情報を呼び出し元であるイベント取得ライブラリ２００に通知して（ステップＳ４０５）、一連の処理を終了する。また、ステップＳ４０３において、ステップＳ４０１によって指定されたプロセスＩＤと等しくないと判断された場合（ステップＳ４０３：Ｎｏ）、ステップＳ４０４の処理をおこなわずに、そのままステップＳ４０５の処理に移行する。
【００３７】
以上のようにイベント取得ドライバおよびイベント取得ライブラリの処理概要をＬｉｎｕｘの場合を例に挙げて説明したが、ＯＳ種類やタイプによらず、また、ＯＳのない環境でも同様に適用できる。本実施の形態では、便宜上以下の説明もＬｉｎｕｘであらわす。
【００３８】
＜性能プロファイリング取得ツールの処理手順＞
つぎに、性能プロファイリング取得ツール１２０の処理手順について説明する。図５は、性能プロファイリング取得ツールの処理手順を示すフローチャートである。図５のフローチャートにおいて、まず、性能プロファイリング取得ツール１２０によって指定されたプロセスのＩＤを測定対象のプロセスＩＤに登録する（ステップＳ５０１）。
【００３９】
つぎに、登録されたプロセスＩＤ、取得ＰＡなどを指定してプロファイリング用ライブラリを呼び出し（ステップＳ５０２）、呼び出したプロファイリング用ライブラリから対象プロセスのイベント情報、プログラムカウンタなどの各種情報のＰＡ情報を取得し、記録する（ステップＳ５０３）。
【００４０】
そして、ＰＡ情報（たとえば、実行サイクル数、キャッシュミス数など）を、コマンドパラメタの出力形式に応じて出力して（ステップＳ５０４）、一連の処理を終了する。このステップＳ５０４の出力形式としては、たとえば、プログラム一括、関数、処理といった所定の単位ごとに出力する（これらの出力形式は後ほどコマンド実施例の説明にあわせて例示する）。
【００４１】
＜コマンド実施例＞
以下に、性能プロファイリング取得ツール１２０における具体的なコマンドの実施内容を例示する。
【００４２】
・コマンド実施例１
ａｔｔａｃｈＰＡ −ｓｅｔ １０００ −ｌ  ｕｓ −ｓｔａｒｔ −ｐａ ３
→プロセスＩＤ：１０００のデータキャッシュのＰＡ情報（ＰＡ種別：３）をユーザ権限およびシステム権限の配下（−ｌ  ｕｓ）で取得開始させるコマンド
ａｔｔａｃｈＰＡ −ｓｅｔ １０００ −ｓｔｏｐ
→プロセスＩＤ：１０００の命令キャッシュのＰＡ情報取得を終了し結果を表示させるコマンド
【００４３】
・コマンド実施例２
ａｔｔａｃｈＰＡ −ｓｔａｒｔ  ｕｓｅｒ＿ｐｒｏｇ −ｐａ ３
→プログラムｕｓｅｒ＿ｐｒｏｇの起動と同時にＰＡ情報の取得（ＰＡ種別：３）を開始させるコマンド
ａｔｔａｃｈＰＡ −ｓｔｏｐ  ｕｓｅｒ＿ｐｒｏｇ
→プログラムｕｓｅｒ＿ｐｒｏｇの取得を終了し、結果を表示させるコマンド
【００４４】
＜出力表示例＞
上述したコマンドを実施することによって下記のようなデータが出力される。
【００４５】
・出力表示例１（一括出力）
Ｄａｔａ  ｃａｃｈｅ  ｍｉｓｓ  ｉｎｆｏｒｍａｔｉｏｎ
Ｄａｔａ  ｃａｃｈｅ  ｍｉｓｓ  ｒａｔｉｏ（ａ／ｂ＊１００）：８．７６％
Ｄａｔａ  ｃａｃｈｅ  ｍｉｓｓ  ｃｙｃｌｅｓ（ａ）          ：１９５４７
Ｅｘｅｃｕｔｉｏｎ  ｃｙｃｌｅｓ（ｂ）                      ：５２３１４１
【００４６】
上記の出力表示例１は、測定範囲全体での取得結果を一括出力によって表示している。この出力表示例１にプログラムカウンタから取得した情報を組み合わせることによって、イベント発生回数と対応するイベント発生位置を特定することができる。したがって、下記の出力表示例２（関数単位）と出力表示例３（命令単位）ではイベント情報（「実行サイクル数」、「キャッシュミス」など）の一括表示に加え、関数単位および命令単位に出力できる。関数単位および命令単位の出力は、イベント発生時のプログラムカウンタ情報を照合することで、イベント情報発生時の関数や処理単位を特定できる。なお、イベント情報への対応付けはプログラムファイルのシンボル情報やデバッグ情報などを使用する。
【００４７】
・出力表示例２（関数単位）
Ｄａｔａ  ｃａｃｈｅ  ｍｉｓｓ  ｉｎｆｏｒｍａｔｉｏｎ
発生関数                        キャッシュミスサイクル数
Ｆｕｎｃ１                    ：    １２３４５  （７．１１％）
Ｆｕｎｃ２                    ：      ９３４５  （５．３８％）
Ｆｕｎｃ３                    ：      ８８４５  （５．０９％）
…                                    …          …
Ｔｏｔａｌ      ：  １７３７４１
【００４８】
・出力表示例３（命令単位）
Ｄａｔａ  ｃａｃｈｅ  ｍｉｓｓ  ｉｎｆｏｒｍａｔｉｏｎ
発生アドレス                    キャッシュミスサイクル数
０ｘ００２０００００          ：    ５５８２（３．２１％）
０ｘ００１００１００          ：    ４１２６（２．３７％）
０ｘ００２０１０００          ：    ３９９１（２．３０％）
…                                  …        …
Ｔｏｔａｌ      ：１７３７４１
【００４９】
なお、ＯＳ１１０のスケジューラでは、性能プロファイリング取得ツール１２０が開始された時点より、プロセスＩＤが変化しないような処理をおこなう。具体的には、ＯＳ１１０におけるドライバによる呼び出しがあった場合、測定対象プログラム１１１のコンテキスト（プロセス）は、システムスワップ対象になった場合であっても、プロセスＩＤを測定対象プログラム１１１の実行が終了するまで変更させないように設定しておく。このような設定を施しておくことによって、コンテキストレジスタ１０３に記録される実行中のプロセスＩＤが、システムスワップなどによって変更されたときに、イベントコンテキストレジスタ１０２に登録した測定対象となるプロセスＩＤとの一致判断を正しくおこなえないような事態を回避することができる。
【００５０】
（ソフトウェアによる実現例）
つぎに、性能プロファイリング処理のソフトウェアによる実現例について説明する。上述した性能プロファイリング取得ツール１２０では、従来のプロセッサに、ハードウェアを追加することによって、選択したプロセスに絞ったイベント情報を取得していた。しかしながら、本実施の形態にかかる性能プロファイリング取得ツール１２０は、上述したハードウェアの機能をソフトウェアによって実現させてもよい。したがって、以下に性能プロファイリング取得ツール１２０のソフトウェアによる実現例について説明する。
【００５１】
＜イベント情報取得時のカーネル処理＞
イベントコンテキストレジスタおよびコンテキストレジスタがプロセッサ１００に内蔵されていない場合、プロセスごとのイベントカウントは、カーネルのタスクスイッチ時にソフトウェアにより対象プロセスを識別させればよい。以下に、イベント情報処理時のカーネルの処理手順について説明する。図６，７は、イベント情報取得時のカーネルの処理手順を示すフローチャートである。なお、図６のフローチャートでは、実行開始するプロセスを選択するカーネルに関する処理をあらわしている。また、図７のフローチャートでは、実行中プロセスが中断してカーネルに復帰した際の処理をあらわしている。
【００５２】
図６のフローチャートでは、まず、測定対象プログラムのプロセスＩＤを取得する（ステップＳ６０１）。つぎに、タスクスイッチにより実行再開するプロセスＩＤを求める（ステップＳ６０２）。そして、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行再開するプロセスＩＤとが等しいか否かを判断する（ステップＳ６０３）。
【００５３】
このステップＳ６０３において、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行再開するプロセスＩＤとが等しいと判断された場合（ステップＳ６０３：Ｙｅｓ）、プロセッサ１００のイベント測定開始を指示する（ステップＳ６０４）。その後、実行再開するタスクに分岐して（ステップＳ６０５）、一連の処理を終了する。なお、ステップＳ６０３において、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行再開するプロセスＩＤとが等しくないと判断された場合（ステップＳ６０３：Ｎｏ）、ステップＳ６０４の処理をおこなわずに、そのままステップＳ６０５の処理に移行する。
【００５４】
また、図７のフローチャートでは、まず、測定対象プログラム１１１のプロセスＩＤを取得する（ステップＳ７０１）。つぎに、タスクスイッチにより実行中断したプロセスＩＤを求める（ステップＳ７０２）。そして、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行中断したプロセスＩＤとが等しいか否かを判断する（ステップＳ７０３）。
【００５５】
このステップＳ７０３において、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行中断されたプロセスＩＤとが等しいと判断された場合（ステップＳ７０３：Ｙｅｓ）、プロセッサ１００のイベント測定停止を指示する（ステップＳ７０４）。その後、タスクスイッチしたタスクに分岐して（ステップＳ７０５）、一連の処理を終了する。なお、ステップＳ７０３において、測定対象となるプロセスのプロセスＩＤと、タスクスイッチにより実行中断されたプロセスＩＤとが等しくないと判断された場合（ステップＳ７０３：Ｎｏ）、ステップＳ７０４の処理をおこなわずに、そのままステップＳ７０５の処理に移行する。
【００５６】
なお、ステップＳ６０３およびステップＳ７０３において、他の任意の比較条件を追加することもできる。たとえは、カーネル権限／ユーザ権限での走行状態を区別する処理を追加すると、カーネル権限／ユーザ権限ごとに特定プロセスの特定イベントを計測することができる。
【００５７】
このように、本実施の形態にかかる性能プロファイリング処理は、上述したような専用のプロセッサ１００が搭載されていない場合であっても、上述のカーネル処理を実現させるための性能プロファイリングプログラムを追加することによって、汎用コンピュータによって性能プロファイリング取得ツール１２０に相当する処理を実現させることもできる。
【００５８】
＜性能プロファイリングに基づいたチューニング＞
本実施の形態では、性能プロファイリング取得ツール１２０によって取得したイベント情報に基づいて、プログラムの状態を監視し、プロセスおよびプログラムの実行状態を判断してプログラム優先順位やシステム資源を割りつけるなどのチューニングを施すことができる。
【００５９】
特に、本実施の形態にかかる性能プロファイリング取得ツール１２０では、実運用環境において測定対象プログラムを止めることなく、各種の性能プロファイリング情報を取得できるためチューニング手番を削減できる。たとえば、バス効率の悪いプログラムやストールの多いプログラムを運用中の複数プログラムから抽出してから、チューニングに取りかかることができるなどチューニングに関する作業を効率化できる。
【００６０】
さらに、取得した各種イベントカウンタをもとに、自動的にプログラムの状態を監視して、プロセスおよびプログラムの実行状態を判断してプログラム優先順位やシステム資源を割りつけるようなチューニングをおこなってもよい。図８は、イベント情報に基づいたチューニングの処理手順を示すフローチャートである。図８のフローチャートでは、測定対象プログラムの状態を監視して自動的にプログラムの優先順位やシステム資源の割り当てをおこなう。
【００６１】
まず、チューニング対象とするプロセス群を抽出する（ステップＳ８０１）。そして、ステップＳ８０１によって抽出した複数の対象プロセスについてプロファイリング取得ツールを実行して各プロセスのイベント情報を取得する（ステップＳ８０２）。そしてプロセスに対応するイベント情報の値に応じてＯＳのプロセスの実行・資源割当ての優先順位を変更して（ステップＳ８０３）、一連の処理を終了する。
【００６２】
上述したステップＳ８０１の処理を詳細に説明すると、このステップでは、プロセス状況をＯＳにて判断できる指標（たとえば、ＣＰＵ走行時間、メモリ使用率、Ｉ／Ｏ走行時間、ネットワーク負荷率など）や、外部で定義した任意の指標からチューニング対象とすべきプロセスを抽出することができる。また、ユーザからのプロセスＩＤの指定を受け付け、指定されたプロセスＩＤに対応するプロセスを抽出対象としてもよい。
【００６３】
なお、上述したチューニングをＯＳに組み込む場合は、スケジューリングや資源の割り当てなど任意のタイミングで走行させて、その結果をスケジューリングや資源割り当てにフィードバックさせればよいし、ＯＳに対する制御プログラムとして外部ツールとして用意してもよい。
【００６４】
つぎに、ステップＳ８０３の変更処理について具体例を挙げて説明する。ここでは、ステップＳ８０２の処理によって、測定対象プログラムの中のＣＰＵの走行率の大きい上位５つのプロセスが選択され、それぞれイベント情報が取得された場合、たとえば、下記のような判断がおこなわれる。
【００６５】
・Ｉ／Ｏアクセス待ちの大きいプロセスの優先順位を１レベル下げる。
・キャッシュミスの大きいプロセスの組合せを調査して、キャッシュミスの大きいプロセスで同時走行しないようにスケジューリングを変更する。
・アイドル状態の多いプロセスの実行時の動作周波数を低くする。
・キャッシュミスの大きいプログラムや共用ライブラリ関数から呼び出されるシステムコールの資源割当てや電力削減を調整する。
【００６６】
上述のようなチューニングによってシステム全体としてスループット向上や電力削減を図ることができる。これは一例であり、判断の基準や内容は上述のものに限らず、プログラムやユーザで任意に定義することができる。また、これらデータをマージし、蓄積した経験値として、データベース化してその値を自動的に活用することもできる。これらの情報を取得するごとにマージされた値を経験値としてメモリに保持することで、プロファイリングの精度を向上させることもできる。
【００６７】
（入出力ＧＵＩ）
つぎに、性能プロファイリング取得ツール１２０を利用する際の入出力ＧＵＩについて説明する。上述した性能プロファイリング取得ツール１２０をより効果的に利用させるには、ユーザに扱いやすい入出力ＧＵＩを用意することが求められる。したがって、以下に、性能プロファイリング取得ツール１２０に適用可能な入出力ＧＵＩについて具体例を挙げて説明する。
【００６８】
＜入力例＞
まず、入力例について説明する。図９，１０は、性能プロファイリング取得ツールの入力例を示す説明図である。図９では、コマンド実施例１において、ＯＳの管理ツールと連携して測定対象となるＰＡを選択させるウィンドウ９００を用意している。このウィンドウ９００では、起動済みプロセスがＯＳ１１０の管理ツールから性能プロファイリング取得ツール１２０が選択されることによって表示される。さらに、ウィンドウ９００のプロセス名にカーソルを合わせると、ポップアップメニューが表示される。
【００６９】
ポップアップメニューでは、ＰＡ情報を取得するための各種項目が表示される。ポップアップメニューとして具体的には、測定の開始と終了の動作を指示するメニューや取得したＰＡ情報を表示させるメニューといった項目が用意されている。これら各種項目も、カーソルを合わせるとさらにＰＡ項目を選択させるリストボックスなどが表示される。これにより、コマンドインタフェースよりも優れた方法で操作が可能となる。またプロファイリング取得ツールに他のパラメタがある場合には任意に追加してもよい。なお、ＧＵＩで使用する部品は、特定のシステムによらず使用するウィンドウシステムで用意されている汎用的な部品やオリジナルな部品（任意）を使用して表示させてもよい。
【００７０】
また、図１０では、コマンド実施例２において、ＯＳの管理ツールと連携して測定対象となるＰＡを選択させるウィンドウ１０００を用意している。ＧＵＩ表示のウィンドウ１０００において、測定対象プログラム１１１の起動と同時に、ＰＡイベント情報を取得する場合は、測定対象プログラムのアイコンの選択、または、スタートメニューからの性能プロファイリング取得ツール１２０（上述したコマンド実施例２におけるａｔｔａｃｈＰＡ  −ｓｔａｒｔコマンド）の選択をトリガに測定対象プログラム１１１が起動されるように設定しておく。なお、図１０のウィンドウ１０００では、測定対象プログラムのアイコン１００１が選択（クリックなど）され、測定対象プログラム１１１が起動する場合を示している。
【００７１】
さらに、測定対象プログラム１１１のアイコン１００１のプロパティ属性設定メニュー１００２では、上述したコマンド形式２でのコマンドを内部的に起動できるようにする。また測定対象プログラム１１１のアイコン１００１のプロパティ属性設定メニュー１００２から、指定するＰＡ種別の選択メニューおよびＰＡ測定結果をあらわすメニューがリンクして表示されるように設定しておく。また、性能プロファイリング取得ツール１２０に他のパラメタがある場合には、他のパラメタの内容に応じて任意に対応するメニューを追加することもできる。
【００７２】
ウィンドウ１０００におけるユーザの動作指示としては、たとえば、ダブルクリックにより、コマンド形式２でのａｔｔａｃｈＰＡ  −ｓｔａｒｔコマンドから測定対象プログラムを起動するように設定する。また、シングルクリックにより、コマンド形式２でのａｔｔａｃｈＰＡ  −ｓｔｏｐコマンドを起動して、ＰＡ測定を停止するように設定する。なおダブルクリック、シングルクリックとの対応付けはウィンドウシステムでの対応付けにしたがうように指定し、動作指定は、上述したような他の任意のＧＵＩ操作イベントに対応付けてもよい。さらに図９，図１０のポップアップメニューにて、任意の抽出条件を追加することもできる。たとえば、カーネル権限／ユーザ権限での走行状態ごとの測定条件を設定してもよい。
【００７３】
＜出力例＞
つぎに、出力例について説明する。図１１，１２は、性能プロファイリング取得ツールの出力例を示す説明図である。図１１の図表１１００では、割込みアドレスから換算したソース名、関数、命令アドレスごとの関数定義位置に対応させてイベント回数のカウント結果が表示される。図表１１００の場合は、出力結果のうち、１１０１部分のアドレス付近におけるイベント情報のカウント数が大きい。したがって、１１０１部分に対応する関数定義位置１１０２から、「ソース名Ｓ、関数Ｆ、アドレスＸＸＸＸＸ」というようにプロセスを特定することができる。
【００７４】
一方、図１２では、ウィンドウ１２００に関数内の命令ごとにイベント回数のカウント結果（図１１の図表１１００参照）を表示させている。具体的には、性能プロファイリング取得ツール１２０において、取得されたイベント回数（カウント数）と、実行中のプログラムとを照合する照合処理部と、照合結果を用いて、前記取得手段によって取得された値のうち、所定数以上となる値となったに対応する関数、処理および命令を前記プリケーションプログラムの中から抽出する抽出処理部を追加すればよい。そして、出力の際に抽出処理部によって抽出された関数、処理および命令を出力する。さらに、ウィンドウ１２００は、関数や命令の位置をクリックすることによって対応するソースプログラムやアセンブラソースをあらわすウィンドウ１２０１を表示させるようにリンクさせておいてもよい。さらに図１２にて、任意の表示条件を追加することもできる。たとえばカーネル権限／ユーザ権限での走行状態ごとに表示条件を設定でき、それら条件ごとに表示してもよい。
【００７５】
このように、本実施の形態にかかる性能プロファイリング取得ツール１２０では、図９，１０のような入力用のＧＵＩを用意することにより、ユーザが操作しやすい操作環境を提供することができる。また、図１１，１２のような出力用のＧＵＩとして、イベント情報をオペレーティングシステムの管理ツールとグラフィカルに連携して表示することにより、操作性を改善される。結果として、チューニング工数の効率化をはかることができる。
【００７６】
以上説明したように、本実施の形態にかかる性能プロファイリング処理を適用することにより、実運用環境において測定対象プログラムを止めることなく、各種チューニングプロファイリング情報を取得できる。したがって、利用者に要求されるチューニング処理が大幅に削減される。たとえば、バス効率の悪いプログラムやストールの多いプログラムを運用中の複数プログラムから抽出してから、チューニングに取りかかることができるなどチューニグ作業の効率化を図れる。
【００７７】
また、本実施の形態にかかる性能プロファイリング処理を適用することにより、実運用環境において測定対象プログラムを止めることなく、各種チューニングプロファイリング情報を取得できるためチューニング手番を自動的におこなわせることができる。たとえば、運用中の複数プログラムから、バス効率の悪いプログラムやストールの多いプロセス部分を自動抽出してオペレーティングシステムが自動的に最適なスケシューリング、実行性能及び消費電力の最適化を施せば、これらのプログラムのシステム全体の実行効率や電力効率を上げることができる。
【００７８】
さらに、本実施の形態にかかる性能プロファイリング処理を適用することにより、実運用環境でソース等に修正を加えることがないため、修正によるオーバーヘッドの影響がない状態でイベント情報を取得できる。
【００７９】
また、従来は不可能であったソースプログラムのない、第３者の作成したプログラムについてのイベント情報を取得できるため、システム全体のスループットを高めることができる。したがって、第１の利点として、Ｉ／Ｏアクセス待ちの大きい第３者プログラムの優先順位をユーザが下げる、もしくはオペレーティングシステムが自動的に判断するなど、システム全体を見通したチューニングが可能となる。また、第２の利点として、キャッシュミスの大きくなるプロセスの相性を調査して、キャッシュミスの大きいプロセスがなるべく同時に走行しないようにスケジューリングを変更することができる。さらに、第３の利点として、アイドル状態の多いプロセスの実行時の動作周波数を低くする。これにより、電力消費を削減することができるといったチューニングが可能となる。
【００８０】
以上説明したように、本実施の形態にかかる性能プロファイリング処理を適用することによって、ＯＳ環境下で実行中のプログラムに対して、プログラムの修正や実行停止をすることなく、特定のプログラムの挙動に関する情報を取得することができる。
【００８１】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００８２】
（付記１）オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なプロセッサであって、
前記任意のアプリケーションプログラムの中の測定対象となるイベントのＩＤが登録されているイベントコンテキストレジスタと、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを記録するコンテキストレジスタと、
前記コンテキストレジスタに記録されたイベントのＩＤと、前記イベントコンテキストレジスタに登録されている測定対象となるイベントのＩＤとを比較する比較器と、
前記比較器によって前記ＩＤ同士が一致すると判断された回数をカウントするイベントカウンタと、
を備えることを特徴とするプロセッサ。
【００８３】
（付記２）前記イベントコンテキストレジスタは、前記測定対象となるイベントのＩＤとして、プロセス、タスクおよびスレッドのいずれかをあらわすＩＤが登録され、
前記コンテキストレジスタは、前記ＯＳ上で前記任意のアプリケーションプログラムのイベントが実行されると、当該実行されたイベントのＩＤとして前記イベントコンテキストレジスタに登録されているＩＤと同じ種類のＩＤを記録することを特徴とする付記１に記載のプロセッサ。
【００８４】
（付記３）付記１または２に記載のプロセッサと、
前記プロセッサによって前記任意のアプリケーションプログラムが実行されると、前記イベントカウンタによってカウントされた値を取得する取得手段と、
前記取得手段によって取得された情報を出力する出力手段と、
を備えることを特徴とする性能プロファイリング装置。
【００８５】
（付記４）前記取得手段は、前記プロセッサに搭載されたプログラムカウンタから、前記イベントカウンタの値が取得されたときのプログラムカウント値を取得し、
前記出力手段は、前記取得手段によって取得されたプログラムカウント値を、前記イベントカウンタの値とともに出力することを特徴とする付記３に記載の性能プロファイリング装置。
【００８６】
（付記５）前記アプリケーションプログラムが実行されると、一定の間隔で割込みを発生させる割込み手段とを備え、
前記取得手段は、前記割込み手段によって発生させられた割込み間隔ごとに、前記イベントカウンタによってカウントされた値を取得することを特徴とする付記３または４に記載の性能プロファイリング装置。
【００８７】
（付記６）前記取得手段によって取得された値と、前記アプリケーションプログラムとを照合する照合手段と、
前記照合結果を用いて、前記取得手段によって取得された値のうち、所定数以上となる値となったに対応する関数、処理および命令を前記プリケーションプログラムの中から抽出する抽出手段と、を備え、
前記出力手段は、前記抽出手段によって抽出された関数、処理および命令を出力することを特徴とする付記３〜５のいずれか一つに記載の性能プロファイリング装置。
【００８８】
（付記７）前記出力手段は、前記抽出手段によって抽出された関数、処理および命令とともに、対応するソースプログラムまたは機械語命令を出力することを特徴とする付記６に記載の性能プロファイリング装置。
【００８９】
（付記８）前記取得手段によって取得された情報を所定のメモリにマージする記録手段を備えることを特徴とする付記３〜７のいずれか一つに記載の性能プロファイリング装置。
【００９０】
（付記９）前記出力手段によって出力された情報と、前記アプリケーションプログラムの実行状態に応じて、プログラム優先順位を設定する設定手段を備えることを特徴とする付記３〜８のいずれか一つに記載の性能プロファイリング装置。
【００９１】
（付記１０）前記設定手段は、前記出力手段によって出力された情報と、前記アプリケーションプログラムの実行状態に応じて、システム資源の割りつけを設定する設定手段を備えることを特徴とする付記９に記載の性能プロファイリング装置。
【００９２】
（付記１１）オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なコンピュータを、
前記任意のアプリケーションプログラムの中の測定対象となるイベントのＩＤが登録されているイベントコンテキスト登録手段、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを記録するコンテキスト記録手段、
前記コンテキスト記録手段に記録されたＩＤと、前記イベントコンテキスト登録手段に登録されている測定対象となるイベントのＩＤとを比較する比較手段、
前記比較手段によって前記ＩＤ同士が一致すると判断された回数をイベント情報としてカウントするイベントカウント手段、
前記イベントカウント手段によってカウントされた値を出力する出力手段、
として機能させることを特徴とする性能プロファイリングプログラム。
【００９３】
（付記１２）前記コンピュータを、
当該コンピュータに搭載されたプログラムカウンタから、イベントカウント手段によってイベントカウンタの値がカウントされたときのプログラムカウント値を取得し、
前記出力手段は、前記取得手段によって取得されたプログラムカウント値を、前記イベントカウンタの値とともに出力することを特徴とする付記５に記載の性能プロファイリングプログラム。
【００９４】
（付記１３）複数のレジスタを備え、オペレーティングシステム（以下、「ＯＳ」という）上で任意のアプリケーションプログラムを実行可能なプロセッサを搭載したコンピュータが、
前記ＯＳ上で前記任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたイベントのＩＤを前記複数のレジスタの中の一のレジスタに記録するコンテキスト記録工程と、
前記コンテキスト記録工程によって前記一のレジスタに記録されたＩＤと、前記一以外のレジスタにあらかじめ登録されていた測定対象となるイベントのＩＤとを比較する比較工程と、
前記比較工程によって前記ＩＤ同士が一致すると判断された回数をイベント情報としてカウントするカウント工程と、
を実行することを特徴とする性能プロファイリング方法。
【図面の簡単な説明】
【００９５】
【図１】本実施の形態にかかる性能プロファイリング処理の概要を示す説明図である。
【図２】性能プロファイリング取得ツールの構成を示す説明図である。
【図３】プロセッサの構成を示すブロック図である。
【図４】イベント取得ドライバの処理手順を示すフローチャートである。
【図５】性能プロファイリング取得ツールの処理手順を示すフローチャートである。
【図６】イベント情報取得時のカーネルの処理手順（その１）を示すフローチャートである。
【図７】イベント情報取得時のカーネルの処理手順（その２）を示すフローチャートである。
【図８】イベント情報に基づいたチューニングの処理手順を示すフローチャートである。
【図９】性能プロファイリング取得ツールの入力例（その１）を示す説明図である。
【図１０】性能プロファイリング取得ツールの入力例（その２）を示す説明図である。
【図１１】性能プロファイリング取得ツールの出力例（その１）を示す説明図である。
【図１２】性能プロファイリング取得ツールの出力例（その２）を示す説明図である。
【図１３】従来の性能プロファイリング処理の構成を示す説明図である。
【図１４】複数のプログラムを実行させた場合のイベントカウンタのカウント処理を示す説明図である。
【符号の説明】
【００９６】
１００  プロセッサ
１０１  プログラム実行部
１０２  イベントコンテキストレジスタ
１０３  コンテキストレジスタ
１０４  比較器
１０５  イベントカウンタ
１０６  プログラムカウンタ
１１０  オペレーティングシステム（ＯＳ）
１２０  性能プロファイリング取得ツール
【図１】
2010003057.tif 000003
【図２】
2010003057.tif 000004
【図３】
2010003057.tif 000005
【図４】
2010003057.tif 000006
【図５】
2010003057.tif 000007
【図６】
2010003057.tif 000008
【図７】
2010003057.tif 000009
【図８】
2010003057.tif 000010
【図９】
2010003057.tif 000011
【図１０】
2010003057.tif 000012
【図１１】
2010003057.tif 000013
【図１２】
2010003057.tif 000014
【図１３】
2010003057.tif 000015
【図１４】
2010003057.tif 000016