(57)【要約】【課題】動作情報のサンプリングにおいて、蓄積されるデータ量を削減する技術を提供する。【解決手段】コンピュータが、サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出し、検出ステップで時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数し、検出ステップで時系列順に連続することを検出したサンプリング情報と計数ステップで計数された連続したサンプリング回数とを対応付けて記録する。【選択図】図７
2014106679.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出ステップと、
前記検出ステップで時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数ステップと、
前記検出ステップで時系列順に連続することを検出したサンプリング情報と前記計数ステップで計数された連続したサンプリング回数とを対応付けて記録する記録ステップと、
を実行させるためのサンプリングプログラム。
【請求項２】
前記対象プログラム中の関数の識別情報と前記関数が前記対象プログラム中に配置されるアドレスの範囲とを含む関数情報表を基に、前記サンプリング情報に含まれる前記対象プログラム中のアドレスから、前記サンプリング情報に対応する関数の識別情報を取得する取得ステップをさらに実行させ、
前記記録ステップでは、前記取得された関数の識別情報と関数の識別情報のサンプリング回数とが記録される請求項１に記載のサンプリングプログラム。
【請求項３】
前記対象プログラムを特定期間で実行し、前記特定期間中に前記対象プログラムの動作に係る情報を所定のサンプリング周期で収集し、収集されたサンプリング情報から、前記対象プログラム中の関数の識別情報と関数の識別情報のサンプリング回数とを取得するステップと、
前記関数の識別情報のサンプリング回数が所定の基準を満足する関数について、前記関数情報表を作成するステップをさらに実行させるための請求項２に記載のサンプリングプログラム。
【請求項４】
前記取得ステップは、前記サンプリング情報に対応する関数の識別情報を取得できない場合には、前記関数の識別情報に代わるサンプリング情報の付属識別情報を付与する付属識別情報付与ステップを含み、
前記記録ステップは、前記取得ステップで取得された動作関数の識別情報、或いは前記付属識別情報付与ステップで付与された付属識別情報と、前記計数ステップで計数された連続したサンプリング回数とを対応付けて記録する、請求項２または３に記載のサンプリングプログラム。
【請求項５】
コンピュータが、
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された、前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出手順と、
前記検出手順で時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数手順と、
前記検出手順で時系列順に連続することを検出したサンプリング情報と前記計数手順で計数された連続したサンプリング回数とを対応付けて記録する記録手順と、
を実行するサンプリング方法。
【請求項６】
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に
連続することを検出する検出手段と、
前記検出手段で時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数手段と、
前記検出手段で時系列順に連続することを検出したサンプリング情報と前記計数手段で計数された連続したサンプリング回数とを対応付けて記録する記録手段と、
を備える情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのデータを収集するサンプリングプログラム、サンプリング方法及び情報処理装置に関する。
【背景技術】
【０００２】
プログラムの最適化を図るために、コンピュータに搭載されたプログラムを実行し、プログラム実行時に呼び出される動作関数や実行時間といった動作情報を定期的にサンプリングし、データ収集を行うサンプリング方法が知られている。動作情報のサンプリングは、情報取得時のオーバーヘッド（処理負荷）が少ないため、例えば、プログラム実行時において、呼び出し回数が相対的に多い動作関数等を検出することに適している。サンプリングによって収集される動作情報には、例えば、サンプリング時に実行されていたプロセスの識別情報（ＰＩＤ）、命令アドレス等が含まれる。
【０００３】
サンプリングにおいて、収集された動作情報は、例えば、コンピュータのメモリや、コンピュータに接続された記憶装置等に、サンプリングされた順番に蓄積されていた。
【０００４】
なお、本明細書で説明する技術に関連する技術が記載されている先行技術文献としては、以下の特許文献が存在している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１０８２７号公報
【特許文献２】特開２００６−２０２１３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えば、複数のプロセッサ（ＣＰＵ：Central Processing Unit）を有するマルチプロ
セッサ、複数のコア（Core）を単一のＣＰＵパッケージ内に組み込むマルチコアプロセッサ等の技術により、コンピュータの処理能力の向上を図ることが知られている。
【０００７】
このようなコンピュータで実行されるプログラムの最適化では、例えば、プロセッサごと、コアごとに動作情報のサンプリングを行い、採取されたデータの蓄積を行う。このため、従来のサンプリングでは、コア数，プロセッサ数に比例して収集されたデータのデータ量は増加し、データを蓄積するメモリや記憶装置等の容量を超えてしまう虞があった。
【０００８】
また、コンピュータに実行させるアプリケーションプログラムの実行時間が長大なケースでも、同様の事態が起こり得る。
【０００９】
１つの側面では、本発明は、動作情報のサンプリングにおいて、蓄積されるデータ量を削減する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記技術は、次のサンプリングプログラムの構成によって例示される。すなわち、サンプリングプログラムは、コンピュータに、サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出ステップと、検出ステッ
プで時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数ステップと、検出ステップで時系列順に連続することを検出したサンプリング情報と計数ステップで計数された連続したサンプリング回数とを対応付けて記録する記録ステップとを実行させる。
【００１１】
上記のサンプリングプログラムによれば、共通の要素を有するサンプリング情報が時系列順に連続することを検出し、連続したサンプリング情報と連続したサンプリング回数とを対応付けて記録するため、蓄積されるデータ量を削減できる。
【発明の効果】
【００１２】
上記のサンプリングプログラムによれば、動作情報のサンプリングにおいて、蓄積されるデータ量を削減する技術を提供できる。
【図面の簡単な説明】
【００１３】
【図１】本実施形態のサンプリング装置の概略構成図である。
【図２】従来のサンプリング方法によるサンプリングデータを例示する図である。
【図３】サンプリング装置のハードウェアの概略構成図である。
【図４】サンプリング装置の機能構成を説明するための図である。
【図５Ａ】サンプリングＤＢに格納されるレコードを例示する図である。
【図５Ｂ】関数情報ＤＢに格納される関数情報表を例示する図である。
【図６】関数情報表の作成処理を例示するフローチャートである。
【図７】サンプリングデータの記録処理を例示するフローチャートである。
【発明を実施するための形態】
【００１４】
以下、図面を参照して、一実施形態に係るサンプリング装置について説明する。以下の実施形態の構成は例示であり、サンプリング装置は実施形態の構成には限定されない。
【００１５】
以下、図１から図７の図面に基づいて、サンプリング装置を説明する。
【００１６】
〔装置構成〕
図１は、本実施形態のサンプリング装置の概略構成図である。図１のサンプリング装置１００は、例えば、複数のプロセッサ（ＣＰＵ：Central Processing Unit）を含むマル
チプロセッサコンピュータとして機能する情報処理装置である。図１のサンプリング装置１００は、複数のプロセッサにより、複数の処理プロセスを並行して実行するマルチプロセッシングシステム（multi processing system）を実現する。
【００１７】
図１のサンプリング装置１００は、対象となるプログラムの実行と共に動作情報のサンプリングを行う。サンプリング装置１００は、動作情報のサンプリングにおいて、サンプリング間隔毎に動作中の関数（以下、動作関数と称す）を記録する。サンプリング装置１００は、動作情報のサンプリングにおいて、同一の動作関数におけるサンプリングデータであることを示すデータを連続してサンプリングした場合には、データの圧縮を実行する。
【００１８】
なお、以下の説明では、本実施形態のサンプリングプログラムが搭載されるコンピュータによる処理の１例として、複数のプロセッサを有するサンプリング装置１００で実行される処理例を説明する。ただし、本実施形態のサンプリングプログラムが搭載されるコンピュータが、サンプリング装置１００に限定されるわけではない。
【００１９】
本実施形態のサンプリングプログラムが搭載されるコンピュータとして、例えば、複数のコア（Core）が単一のＣＰＵパッケージ内に組み込まれたマルチコアプロセッサによる
コンピュータ、或いは、マルチコアプロセッサを複数に有するコンピュータであってもよい。また、本実施形態のサンプリングプログラムが搭載されるコンピュータとして、ＨＰＣ（High-performance computing）といった技術分野で使用されるスーパーコンピュータ等であってもよい。本実施形態に適用できるコンピュータは、プログラムの最適化を図るために、プログラム実行時の動作関数等といった動作情報のサンプリングを行い、収集されたサンプリングデータを所定の記憶装置等に蓄積するコンピュータであればよい。
【００２０】
図１のサンプリング装置１００は、記憶装置２００と接続する。なお、サンプリング装置１００は、記憶装置２００を含むとしてもよい。サンプリング装置１００，記憶装置２００は、例えば、ネットワーク上のコンピュータ群であるクラウドの一部であってもよい。ネットワークは、インターネット等の公衆ネットワーク、ＬＡＮ（Local Area Network）、または、ＷＡＮ（Wide Area Network）等を含む。
【００２１】
記憶装置２００は、各種プログラムおよび各種データを格納する記憶媒体を備えた記憶装置である。記憶装置２００は、外部記憶装置とも呼ばれる。記憶装置２００としては、例えば、ソリッドステートドライブ装置、ハードディスクドライブ装置等がある。また、記憶装置２００は、ＣＤ（Compact Disc）ドライブ装置、ＤＶＤ（Digital Versatile Disc）ドライブ装置、ＢＤ（Blu-ray Disc）ドライブ装置等の可搬記録媒体を含むことができる。
【００２２】
記憶装置２００は、サンプリングＤＢ２１０、動作関数ＤＢ２２０、関数情報ＤＢ２３０を含む。サンプリングＤＢ２１０，動作関数ＤＢ２２０，関数情報ＤＢ２３０は、それぞれ、別々の記憶装置に含まれるとしてもよい。
【００２３】
図１のサンプリング装置１００は、サンプリング対象となるプログラム（以下、対象プログラムと称す）の実行期間中に、対象プログラムの動作に係る情報を所定のサンプリング周期で採取する。そして、サンプリング装置１００は、採取されたサンプリングデータを収集し、収集したサンプリングデータを記憶装置２００に蓄積する。
【００２４】
サンプリング装置１００で実行されるサンプリングのサンプリング周期は、対象プログラムの実行期間を超える周期でなければ任意である。例えば、１秒，１０ミリ秒，１００マイクロ秒といった時間単位の間隔が例示できる。コンピュータの性能、対象プログラムの実行期間，サンプル数等に応じて、適切な周期を設定すればよい。
【００２５】
図２に、従来のサンプリング方法で収集されたサンプリングデータを例示する。図２のサンプリングデータは、サンプリングごとのレコードを有する。図例のサンプリングデータでは、対象プログラムの動作に係る情報として、「ＣＰＵ番号」，「ＰＩＤ」，「命令アドレス」が採取・収集されている。「ＣＰＵ番号」，「ＰＩＤ」，「命令アドレス」等は、サンプリング情報に含まれる要素の例示である。ここで、「ＣＰＵ番号」はプログラムの実行に係るＣＰＵの番号であり、「ＰＩＤ」はプログラム実行中のプロセスの識別情報であり、「命令アドレス」は命令実行中のアドレス位置の情報である。
【００２６】
このように、従来のサンプリング方法では、「ＣＰＵ番号」，「ＰＩＤ」，「命令アドレス」を含むサンプリングデータをサンプルごとのレコードとして、対象プログラムの実行期間が終了するまで蓄積していた。
【００２７】
例えば、１回のサンプリングで収集されるデータ量は、次の（１）式により例示することができる。
【００２８】
サンプリングデータ量
＝１レコードデータサイズ×サンプル数（実行期間／サンプリングレート）
×ＣＰＵ数×コア数    …    （１）
従って、１回のサンプリングで収集されるデータ量は、（１）式により、レコードデータサイズ，サンプル数，ＣＰＵ数，コア数に比例して増加することが判る。
【００２９】
本実施形態のサンプリング装置１００は、時系列順に採取したサンプリングデータから、例えば、同一の動作関数におけるデータであることを示すサンプリングデータが連続することを検出する。そして、本実施形態のサンプリング装置１００は、同一の動作関数におけるデータであることを示すサンプリングデータの連続したサンプリング回数を計数する。本実施形態のサンプリング装置１００は、個々のサンプリングデータを逐一記録することに替えて、同一の動作関数におけるデータであることを示すサンプリングデータと、同一の動作関数におけるデータであることを示すサンプリングデータの連続したサンプリング回数とを対応付けて記録する。その結果、本実施形態のサンプリング装置１００で蓄積されるデータの蓄積データ量は圧縮されるため、収集されるサンプリングデータ量は低減される。
【００３０】
また、本実施形態のサンプリング装置１００は、時系列順に採取したサンプリングデータから、対象となるプログラムのサンプリング頻度の相対的に高い動作関数を特定する。特定したサンプリング頻度の相対的に高い動作関数は、例えば、テーブル形式で保持される。本実施形態のサンプリング装置１００は、サンプリング頻度の相対的に高い動作関数をテーブル形式で保持することにより、採取したサンプリングデータから動作関数を検出するための処理時間を短縮する。
【００３１】
図３に、サンプリング装置１００のハードウェアの概略構成図を例示する。サンプリング装置１００は、接続バスＢ１によって相互に接続された複数のＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎ、主記憶部１０２、補助記憶部１０３、通信部１０４を有する。サンプリング装置１００は、ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎが補助記憶部１０３に記憶されたプログラムを主記憶部１０２の作業領域に実行可能に展開し、プログラムの実行を通じて周辺機器の制御を行う。これにより、サンプリング装置１００は、所定の目的に合致した機能を実現することができる。主記憶部１０２および補助記憶部１０３は、コンピュータであるサンプリング装置１００が読み取り可能な記録媒体である。
【００３２】
ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎは、サンプリング装置１００の中央処理演算装置である。ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎは、補助記憶部１０３に格納されたプログラムに従って処理を行う。主記憶部１０２は、ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎがプログラムやデータをキャッシュしたり、作業領域を展開したりする記憶媒体である。主記憶部１０２は、例えば、ＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory）を含む。
【００３３】
補助記憶部１０３は、各種のプログラム及び各種のデータを読み書き自在に記録媒体に格納する。補助記憶部１０３には、オペレーティングシステム（Operating System :ＯＳ）、各種プログラム、各種テーブル等が格納される。ＯＳは、通信部１０４を介して接続される外部装置等とのデータの受け渡しを行う通信インターフェースプログラムを含む。外部装置等には、例えば、ネットワークを介して接続された、他の情報処理装置、記憶装置が含まれる。通信部１０４は、例えば、ネットワーク等とのインターフェースである。
【００３４】
補助記憶部１０３は、例えば、ＥＰＲＯＭ（Erasable Programmable ROM）、ソリッド
ステートドライブ装置、ハードディスクドライブ（ＨＤＤ、Hard Disc Drive）装置等で
ある。また、補助記憶部１０３としては、例えば、ＣＤドライブ装置、ＤＶＤドライブ装置、ＢＤドライブ装置等が提示できる。記録媒体としては、例えば、不揮発性半導体メモ
リ（フラッシュメモリ）を含むシリコンディスク、ハードディスク、ＣＤ、ＤＶＤ、ＢＤ、ＵＳＢ（Universal Serial Bus）メモリ等がある。
【００３５】
図３に例示するサンプリング装置１００は、例えば、ユーザ等からの操作指示等を受け付ける入力部を備えるとしてもよい。このような、入力部として、キーボード、ポインティングデバイス等といった入力デバイスを例示できる。また、サンプリング装置１００は、ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎで処理されるデータや主記憶部１０２に記憶されるデータを出力する出力部を備えるとしてもよい。このような、入力部として、ＣＲＴ（Cathode Ray Tube）ディスプレイ、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma
Display Panel）、ＥＬ（Electroluminescence）パネル、有機ＥＬパネル、プリンタと
いった出力デバイスを例示できる。
【００３６】
サンプリング装置１００は、ＣＰＵ１０１＃１−ＣＰＵ１０１＃ｎが補助記憶部１０３に記憶されている各種プログラムや各種データを主記憶部１０２に読み出して実行することにより、対象プログラムの実行と共に、図１に例示する各機能部を実現する。サンプリング装置１００は、対象プログラムの実行と共に、図１に例示の第１サンプリング処理部１１０、動作関数特定部１２０、頻度算出部１３０、関数情報表作成部１４０、第２サンプリング処理部１５０、連続検出部１６０、収集データ記憶部１７０を実現する。
【００３７】
なお、各機能部のうち、いずれかが、他の情報処理装置に含まれてもよい。例えば、サンプリング装置１００は、第１サンプリング処理部１１０、第２サンプリング処理部１５０、連続検出部１６０、収集データ記憶部１７０を含み、ネットワークに接続する。そして、該ネットワークに、動作関数特定部１２０を含む情報処理装置と、頻度算出部１３０を含む情報処理装置と、関数情報表作成部１４０を含む情報処理装置とが接続する。このように、サンプリング装置１００は、複数の情報処理装置に機能部を分散し、各機能部を実行することで、実現されるとしてもよい。サンプリング装置１００は、ネットワーク上のコンピュータ群であるクラウドで実現できるので、各機能部の処理負荷を軽減できる。
【００３８】
〔機能ブロック構成〕
図４にサンプリング装置１００の機能構成を説明するための図を例示する。図４に例示のサンプリング装置１００は、第１サンプリング処理部１１０、動作関数特定部１２０、頻度算出部１３０、関数情報表作成部１４０、第２サンプリング処理部１５０、連続検出部１６０、収集データ記憶部１７０の各機能部を有する。
【００３９】
また、図４に例示のサンプリング装置１００は、以上の機能部が参照し、あるいは、管理するデータの格納先として、記憶装置２００に構築された、サンプリングＤＢ２１０、動作関数ＤＢ２２０、関数情報ＤＢ２３０を有する。
【００４０】
第１サンプリング処理部１１０は、対象プログラムを特定期間で実行し、該特定期間中に所定のサンプリング周期で採取された対象プログラムの動作に係る情報を収集する。第１サンプリング処理部１１０で収集された情報は、例えば、主記憶部１０２の所定の領域に格納される。収集された情報は、動作関数特定部１２０，頻度算出部１３０に引き渡される。
【００４１】
第１サンプリング処理部１１０で収集されるサンプリングデータは、例えば、図２に例示するサンプリングデータ形式で収集される。第１サンプリング処理部１１０で収集されるサンプリングデータは、サンプリングごとのレコードを有する。第１サンプリング処理部１１０は、対象プログラムの動作に係る情報として、「ＣＰＵ番号」，「ＰＩＤ」，「命令アドレス」といった情報を採取・収集する。
【００４２】
なお、第１サンプリング処理部１１０で実行されるサンプリングデータの収集期間は、例えば、対象プログラムの実行期間より短い特定期間が設定される。設定された特定期間は、例えば、補助記憶部１０３に格納される。また、特定期間は、サンプリング装置１００の管理者等により、例えば、キーボード等の操作入力を介して設定されるとしてもよく、サンプリング装置１００に接続するネットワークを介して設定されるとしてもよい。第１サンプリング処理部１１０は、対象プログラムの実行期間より短い特定期間でサンプリングデータの収集が実行できればよい。
【００４３】
動作関数特定部１２０は、第１サンプリング処理部１１０から引き渡されたサンプリングデータから、動作関数ＤＢ２２０を参照し、ＰＩＤ，命令アドレスに対応付けられた動作関数情報を特定する。動作関数情報には、ＰＩＤに対応するプログラム名，動作関数の関数名，動作関数の開始アドレス及び終了アドレスが含まれる。開始アドレスは、例えば、プログラム中の関数の先頭命令の命令アドレスである。また、終了アドレスは、例えば、プログラム中の関数の末尾の命令の命令アドレスである。動作関数特定部１２０は、特定した動作関数情報を例えば、主記憶部１０２の所定の領域に格納する。特定した動作関数情報は、頻度算出部１３０に引き渡される。
【００４４】
頻度算出部１３０は、第１サンプリング処理部１１０から引き渡されたサンプリングデータと動作関数特定部１２０から引き渡された動作関数情報に基づいて、特定された動作関数ごとのサンプル数を集計する。頻度算出部１３０は、特定された動作関数を、集計されたサンプル数の相対的に多い順に並べ、主記憶部１０２の所定の領域に格納する。相対的にサンプル数の多い順に並べられた各動作関数は、関数情報表作成部１４０に引き渡される。
【００４５】
関数情報表作成部１４０は、頻度算出部１３０から引き渡された動作関数に対し、動作関数を一意に特定する関数識別情報の付与を行う。そして、関数情報表作成部１４０は、付与した関数識別情報に、動作関数名，ＰＩＤに対応するプログラム名，動作関数の開始アドレス及び終了アドレス位置を対応付け、関数情報表の作成を行う。作成された関数情報表は主記憶部１０２の所定の領域に格納される。また、関数情報表作成部１４０は、作成された関数情報表を関数情報ＤＢ２３０に格納する。
【００４６】
なお、関数情報表作成部１４０は、例えば、所定の閾値を設け、所定の閾値を超えたサンプル数を有する動作関数に対して関数情報表を生成するとしてもよい。また、例えば、関数情報表作成部１４０は、予め設定された個数（例えば、上位２０個等）の動作関数に対し、関数情報表を生成するとしてもよい。また、例えば、関数情報表作成部１４０は、頻度算出部１３０で集計された全ての動作関数のうち、一定の割合を占める（例えば、全体の５０パーセント等）、上位の動作関数に対し、関数情報表を作成するとしてもよい。
【００４７】
関数情報表の作成では、対象プログラムが実行される動作環境、対象プログラムの実行時間、サンプリング周期、サンプリングデータを蓄積するメモリ等の記憶容量等に応じて、関数情報表を作成するための適切な基準を選定することができる。
【００４８】
第２サンプリング処理部１５０は、対象プログラムの実行期間中に対象プログラムの動作に係る情報を所定のサンプリング周期で採取し、サンプリングデータの収集を行う。収集されたサンプリングデータは、例えば、図２に例示するサンプリングデータ形式で収集される。第２サンプリング処理部１５０は、収集したサンプリングデータを主記憶部１０２の所定の領域に一時的に格納する。
【００４９】
また、第２サンプリング処理部１５０は、サンプリングデータに含まれるプログラム中のアドレスから動作関数を特定し、サンプリングデータが関数情報表作成部１４０で生成
した関数情報表に定義されたいずれかの関数のアドレスの範囲にあるか否かを判定する。
【００５０】
第２サンプリング処理部１５０は、サンプリングデータが関数情報表に定義されたいずれかの関数の命令アドレスの範囲にある場合、関数情報表から、そのサンプリングデータに対応する関数識別情報を特定する。特定された関数識別情報は、サンプリングデータとして蓄積するための記録情報として選定される。第２サンプリング処理部１５０は、特定された関数識別情報を主記憶部１０２の所定の領域に格納し、連続検出部１６０，収集データ記憶部１７０に引き渡す。
【００５１】
一方、サンプリングデータから特定された動作関数が関数情報表に含まれていない場合、第２サンプリング処理部１５０は、従来と同様に、サンプリングデータに含まれる命令実行中のアドレス位置情報をサンプリングデータとして蓄積するための記録情報に選定する。サンプリングデータに含まれる命令実行中のアドレス位置情報は、例えば、図２に例示する「命令アドレス」である。
【００５２】
第２サンプリング処理部１５０は、サンプリングデータに含まれる命令実行中のアドレス位置情報を主記憶部１０２の所定の領域に格納し、連続検出部１６０，収集データ記憶部１７０に引き渡す。
【００５３】
連続検出部１６０は、第２サンプリング処理部１５０で採取されたサンプリングデータについて、同一の動作関数情報または同一のＰＩＤ及び命令アドレスがサンプリングの時系列順に連続することを検出する。連続検出部１６０は、採取されたサンプリングデータと直前のサンプリング周期で採取されたサンプリングデータとの比較を行い、同一の動作関数情報または同一のＰＩＤ及び命令アドレスが時系列順に連続したサンプリングデータを検出する。
【００５４】
例えば、連続検出部１６０は、第ｎ番目に採取されたサンプリングデータの「ＣＰＵ番号」及び「ＰＩＤ」と第ｎ−１番目に採取されたサンプリングデータの「ＣＰＵ番号」及び「ＰＩＤ」との比較を行う。比較の結果、連続検出部１６０は、両者の「ＣＰＵ番号」及び「ＰＩＤ」が同じ場合に、サンプリングされたデータが時系列順に連続することを検出できる。
【００５５】
また、連続検出部１６０は、サンプリングデータに含まれるプログラム中の命令アドレスが関数情報表のいずれかの関数の範囲にある場合には、関数情報表から特定された関数識別情報について同様の処理を行えばよい。例えば、連続検出部１６０は、第ｎ番目に採取されたサンプリングデータの関数識別情報と第ｎ−１番目に採取されたサンプリングデータの関数識別情報との比較を行えばよい。比較の結果、連続検出部１６０は、両者の関数識別情報が同じ場合に、サンプリングされたデータが時系列順に連続することを検出できる。
【００５６】
また、連続検出部１６０は、同一の関数識別情報（または同一のＰＩＤ及び命令アドレスの組み）が連続したサンプリングを検出すると、例えば、主記憶部１０２の所定の領域に設定された連続検出カウンタのカウント値を「１」インクリメントする。連続検出部１６０は、同一の動作関数情報（または同一のＰＩＤ及び命令アドレスの組み）が連続したサンプリングを検出する度に連続検出カウンタのカウント値をインクリメントし続けることにより、サンプリングデータの連続回数を計数できる。
【００５７】
連続検出部１６０は、計数した、同一の動作関数情報（または同一のＰＩＤ及び命令アドレスの組み）が連続したサンプリングデータの連続回数を、主記憶部１０２の所定の領域に格納し、収集データ記憶部１７０に引き渡す。
【００５８】
収集データ記憶部１７０は、引き渡されたサンプリングデータを例えば、図５Ａに例示するサンプリングデータ形式で、サンプリングＤＢ２１０に格納する。
【００５９】
〔データベース構成〕
図５Ａに、サンプリングＤＢ２１０を例示する。図５ＡのサンプリングＤＢ２１０には、収集データ記憶部１７０で作成されたサンプリングデータレコードが格納される。サンプリングＤＢ２１０は、連続して検出された動作関数ごとのレコードを有する。サンプリングＤＢ２１０の各レコードは、サンプリングされた経過時間順に格納される。
【００６０】
図５Ａに例示するサンプリングデータレコードは、「ＣＰＵ番号」，「ＰＩＤ」，「関数識別情報／命令アドレス」，「連続回数」といったフィールドを有する。「ＣＰＵ番号」、「ＰＩＤ」は、図２のサンプリングデータで説明した。「関数識別情報／命令アドレス」フィールドには、第２サンプリング処理部１５０で特定された動作関数の関数情報表に含まれる「関数識別情報」が格納される。また、ＰＩＤと命令アドレスが関数情報表に含まれていない場合、「関数識別情報／命令アドレス」フィールドには、第２サンプリング処理部１５０で採取した、命令実行中のアドレス位置情報である「命令アドレス」が格納される。「連続回数」フィールドには、連続検出部１６０で計数したサンプリングデータの連続回数が格納される。
【００６１】
なお、「関数識別情報／命令アドレス」フィールドには、「命令アドレス」に替えて、収集データ記憶部１７０で新たに付与された、例えば、「Ａ」や「０」といった特定の関数識別情報が格納されてもよい。
【００６２】
図５Ａの例では、「ＣＰＵ番号」フィールドには“０”といったプログラムの実行に係るＣＰＵの番号が格納されている。「ＰＩＤ」フィールドには、“８”，“１０”といったプログラム実行中のプロセスの識別情報が格納されている。「関数識別情報／命令アドレス」フィールドには、“１”，“２”といった関数情報表作成部１４０で付与された動作関数の関数識別情報が格納されている。「連続回数」フィールドには、“１０”，“８”といった連続検出部１６０で計数したサンプリングデータの連続回数が格納されている。
【００６３】
動作関数ＤＢ２２０には、ＯＳ関数，ユーザ関数等と対応付けられた動作関数の動作関数情報が格納されている。動作関数ＤＢ２２０は、動作関数ごとのレコードを有する。動作関数ＤＢ２２０に格納される動作関数情報には、ＰＩＤに対応するプログラム名，動作関数の関数名，動作関数の開始アドレス及び終了アドレスが含まれる。
【００６４】
このような動作関数情報は、例えば、サンプリング装置１００の管理者等により、キーボード等の操作入力を介して設定されるとしてもよく、サンプリング装置１００に接続するネットワークを介して設定されるとしてもよい。
【００６５】
一例として、LinuxといったＯＳ環境の場合では、“/proc/kallsyms”といったファイ
ルに各ＯＳ関数名とＯＳ関数名に対応付けられた動作関数の開始アドレス及び終了アドレスの一覧が格納されている。サンプリング装置１００の管理者等は、上述したシステムファイルにアクセスし、各ＯＳ関数に対応する動作関数情報を取得すればよい。
【００６６】
また、例えば、“/proc/PID/exe”，“/proc/PID/stat”といったファイルには、各プ
ロセスで実行するプログラム名が格納されている。サンプリング装置１００の管理者等は、上述したファイルにアクセスし、各プロセスに対応するプログラム名を取得すればよい。
【００６７】
また、例えば、上述したプログラム名の実行ファイルに対し所定のコマンド（例えば、“objdump”コマンド）を実行することにより、実行ファイルに定義付された動作関数と
アドレス範囲（開始アドレス及び終了アドレス）が取得できる。サンプリング装置１００の管理者等は、上述したコマンド操作を行うことにより、ユーザ関数で定義付された動作関数情報を取得すればよい。
【００６８】
サンプリング装置１００の管理者等は、上述の処理で取得した動作関数情報を、動作関数に対応付けて動作関数ＤＢ２２０に登録する。
【００６９】
図５Ｂに、関数情報ＤＢ２３０を例示する。図５Ｂの関数情報ＤＢ２３０には、関数情報表作成部１４０で作成された関数情報表が格納される。関数情報ＤＢ２３０は、対象プログラムごとの関数情報表を有する。
【００７０】
図５Ｂに例示する関数情報表は、「プログラム名」，「関数識別情報」，「関数名」，「開始アドレス」，「終了アドレス」といったフィールドを有する。図５Ｂに例示の関数情報表は、関数識別情報ごとのレコードを有する。
【００７１】
図５Ｂの例において、「プログラム名」フィールドには、ＰＩＤに対応するプロセスで実行されるプログラム名が格納される。「関数識別情報」フィールドには、関数情報表作成部１４０で付与された動作関数の関数識別情報が格納される。「関数名」フィールドには、動作関数の関数名が格納される。「開始アドレス」フィールドには、動作関数の開始アドレス位置が格納される。「終了アドレス」フィールドには、動作関数の終了アドレス位置が格納される。
【００７２】
図５Ｂの例では、「プログラム名」フィールドには、“program1”，“program2”といったプログラム名が格納されている。「関数識別情報」フィールドには、“1”，“2”といった動作関数の関数識別情報が格納されている。「関数名」フィールドには、“Main”，“test”といった動作関数の関数名が格納されている。「開始アドレス」フィールドには、“100”，“3000”といった動作関数の開始アドレス位置が格納されている。「終了
アドレス」フィールドには、“250”，“3200”といった動作関数の終了アドレス位置が
格納されている。
【００７３】
例えば、第２サンプリング処理部１５０では、採取されたサンプリングデータに含まれる「ＰＩＤ」から、動作関数ＤＢ２２０を参照し、「ＰＩＤ」に対応付けられたプログラム名を特定することができる。そして、第２サンプリング処理部１５０では、特定されたプログラム名と収集されたサンプリングデータに含まれる「命令アドレス」の位置情報から、図５Ｂに例示する関数情報表を参照し、動作関数に付与された関数識別情報を特定することができる。
【００７４】
〔処理フロー〕
以下、図６から図７を参照し、本実施形態のサンプリングデータの記録制御処理を説明する。
【００７５】
図６は、本実施形態のサンプリング装置１００による関数情報表の作成処理に係るフローチャートの例示である。図例のフローチャートは、主に第１サンプリング処理部１１０，動作関数特定部１２０，頻度算出部１３０，関数情報表作成部１４０で実行される処理である。サンプリング装置１００は、例えば、主記憶部１０２に実行可能に展開されたコンピュータプログラムにより、関数情報表の作成処理を実行する。
【００７６】
図６に例示するフローチャートにおいて、関数情報表の作成処理の開始は、例えば、補助記憶部１０３に格納されたコンピュータプログラムの起動を例示できる。サンプリング装置１００は、所定のファイルにアクセスし、対象プログラムが実行されるＯＳ環境でのＯＳ関数情報を取得する（Ｓ１）。ＯＳ関数情報には、ＯＳ関数名とＯＳ関数名に対応付けられた動作関数の開始アドレス及び終了アドレスが含まれる。
【００７７】
なお、動作関数ＤＢ２２０で説明したように、サンプリング装置１００の管理者等によりＯＳ関数情報が既に取得されている場合には、サンプリング装置１００はＳ１の処理を省略できる。
【００７８】
Ｓ２では、サンプリング装置１００は、対象プログラムを実行し、対象プログラムの実行期間よりも短い特定期間でサンプリングデータを採取する。サンプリング装置１００は、採取したサンプリングデータを、例えば、主記憶部１０２の所定の領域に格納する。なお、Ｓ２の処理は、第１サンプリング処理部１１０で説明した。
【００７９】
Ｓ３−Ｓ５では、サンプリング装置１００は、Ｓ２で採取・収集されたサンプリングデータに対して、サンプリングデータのＰＩＤと命令アドレスから動作関数の動作関数情報を取得し、動作関数の関数名を特定する。サンプリング装置１００は、Ｓ２で採取・収集したサンプリングデータに対し、Ｓ３−Ｓ５の処理を繰り返す。
【００８０】
Ｓ３−Ｓ５の処理において、サンプリング装置１００は、Ｓ２で採取したサンプリングデータの命令アドレスがＯＳ関数のアドレスに含まれるか否かを判定する（Ｓ３）。サンプリング装置１００は、動作関数ＤＢ２２０を参照し、採取したサンプリングデータの命令アドレスが各ＯＳ関数の開始アドレス及び終了アドレスで特定されるアドレス範囲に含まれるか否かを判定する。サンプリング装置１００は、サンプリングデータの命令アドレスがＯＳ関数のアドレスに含まれる場合（Ｓ３，Ｙｅｓ）には、該当するアドレス範囲に対応付けられたＯＳ関数情報から動作関数の関数名を特定する（Ｓ５）。サンプリング装置１００は、特定した動作関数の関数名を、主記憶部１０２の所定の領域に一時的に格納する。
【００８１】
一方、サンプリング装置１００は、サンプリングデータの命令アドレスがＯＳ関数のアドレスに含まれない場合（Ｓ３，Ｎｏ）にはＳ４に移行する。
【００８２】
Ｓ４では、サンプリング装置１００は、動作関数ＤＢ２２０を参照し、採取したサンプリングデータのＰＩＤに対応付けられたプログラム名を特定する。そして、サンプリング装置１００は、特定したプログラム名に対応付けられた動作関数のアドレス範囲と採取したサンプリングデータの命令アドレスとに基づいて、動作関数ＤＢ２２０で対応付けられた動作関数の関数名を特定する。サンプリング装置１００は、特定した動作関数の関数名を、主記憶部１０２の所定の領域に一時的に格納する。
【００８３】
サンプリング装置１００は、Ｓ２で採取・収集されたサンプリングデータに対してＳ３−Ｓ５の処理による動作関数の関数名の特定を完了すると、Ｓ６に移行する。
【００８４】
なお、サンプリング装置１００で実行されるＳ３−Ｓ５の処理は、関数の識別情報を取得する取得ステップ、取得手順の一例である。また、サンプリング装置１００は、関数の識別情報を取得する取得手段の一例として、Ｓ３−Ｓ５の処理を実行する。
【００８５】
Ｓ６では、サンプリング装置１００は、Ｓ３−Ｓ５で特定された各動作関数のサンプル数を計数し、動作関数ごとのサンプル集計値を算出する。そして、サンプリング装置１００は、動作関数ごとに計数されたサンプル集計値の相互比較を行い、例えば、サンプル集
計値の多い順に各動作関数を整列する。サンプル集計値の多い順に整列された各動作関数は、サンプル集計値と共に主記憶部１０２の所定の領域に格納される。
【００８６】
さらに、サンプリング装置１００で実行されるＳ１−Ｓ６の処理は、関数の識別情報と関数の識別情報のサンプリング回数とを取得するステップ、関数の識別情報と関数の識別情報のサンプリング回数とを取得する手順の一例である。また、サンプリング装置１００は、関数の識別情報と関数の識別情報のサンプリング回数とを取得する手段の一例として、Ｓ１−Ｓ６の処理を実行する。
【００８７】
Ｓ７では、サンプリング装置１００は、Ｓ６で計数されたサンプル集計値に基づいて動作関数を選定し、選定された動作関数に関数識別情報を付与し、関数情報表を作成する。なお、作成された関数情報表は、例えば、図５Ｂに例示される。サンプリング装置１００は、例えば、Ｓ６でサンプル集計値の多い順に整列された上位の動作関数を選定することができる。なお、上位の動作関数の選定個数は任意である。上位の動作関数が、所定の基準を満足する動作関数の一例である。
【００８８】
なお、サンプリング装置１００で実行されるＳ７の処理は、関数情報表を作成するステップ、関数情報表を作成する手順の一例である。また、サンプリング装置１００は、関数情報表を作成する手段の一例として、Ｓ７の処理を実行する。
【００８９】
例えば、サンプリング装置１００は、所定の閾値を設け、サンプル集計値が所定の閾値を超える動作関数を上位の動作関数とすることができる。また、例えば、サンプリング装置１００は、予め設定された個数（例えば、２０個等）に沿って、Ｓ６でサンプル集計値の多い順に整列された上位の動作関数を選定するとしてもよい。また、例えば、サンプリング装置１００は、Ｓ６で集計された動作関数のうち、一定の割合を占める（例えば、サンプル全体の５０パーセント等）上位の動作関数を選定するとしてもよい。
【００９０】
サンプリング装置１００は、Ｓ６で計数されたサンプル集計値の多い動作関数を特定できればよい。サンプル集計値の多い動作関数は、対象プログラムの実行期間中にサンプリング頻度の高い動作関数と特定できるからである。
【００９１】
サンプリング装置１００は、選定された上位の動作関数に対し、動作関数を一意に特定する関数識別情報の付与を行う。そして、サンプリング装置１００は、付与した関数識別情報に、動作関数名，ＰＩＤに対応するプログラム名，動作関数の開始アドレス及び終了アドレス位置を対応付けて関数情報表を作成する。作成された関数情報表は、関数情報ＤＢ２３０に格納される。
【００９２】
以上の処理により、サンプリング装置１００は、Ｓ２で採取・収集したサンプリングデータから、対象プログラムの実行期間中にサンプリング頻度の高い動作関数を特定することができる。特定した各動作関数は、それぞれに関数識別情報が付与される。付与された関数識別情報と動作関数固有の関数情報とは対応付けられて、関数情報表として関数情報ＤＢ２３０に格納される。サンプリング装置１００は、対象プログラムの実行期間中に関数情報ＤＢ２３０に格納された関数情報表を参照することにより、動作関数検出のための処理時間を短縮できる。
【００９３】
次に、図７のフローチャートを参照し、本実施形態のサンプリングデータの記録処理を説明する。図７は、本実施形態のサンプリング装置１００によるサンプリングデータの記録処理に係るフローチャートの例示である。図例のフローチャートは、主に第２サンプリング処理部１５０，連続検出部１６０，収集データ記憶部１７０で実行される処理である。サンプリング装置１００は、例えば、主記憶部１０２に実行可能に展開されたコンピュ
ータプログラムにより、サンプリングデータの記録処理を実行する。
【００９４】
図７に例示するフローチャートにおいて、サンプリングデータの記録処理の開始（図例では、“サンプリング開始”）は、例えば、補助記憶部１０３に格納されたコンピュータプログラムの起動を例示できる。サンプリング装置１００では、コンピュータプログラムの起動により、対象プログラムの実行と並行して第２サンプリング処理部１５０，連続検出部１６０，収集データ記憶部１７０等の各機能部が実行される。
【００９５】
図例のフローチャートにおいて、Ｓ８−Ｓ１７の処理は、対象プログラムの実行期間中に所定のサンプリング周期でサンプリングデータが採取される度に繰り返し実行される。つまり、本実施形態のサンプリング装置１００によるサンプリングデータの記録処理は、対象プログラムの動作実行の終了と共に終了する。
【００９６】
Ｓ８−Ｓ１７の処理において、サンプリング装置１００は、所定のサンプリング周期で対象プログラムの動作に係る情報をサンプリングデータとして採取する（Ｓ８）。なお、Ｓ８で採取されるサンプリングデータは、例えば、図２に例示するデータ形式で採取される。図２に例示するように、対象プログラムの動作に係る情報には、「ＣＰＵ番号」，「ＰＩＤ」，「命令アドレス」が含まれる。採取されたサンプリングデータは、主記憶部１０２の所定の領域に一時的に格納される。
【００９７】
Ｓ９では、サンプリング装置１００は、Ｓ８で採取されたサンプリングデータに含まれるＰＩＤから動作関数ＤＢ２２０を参照し、ＰＩＤに対応付けられたプログラム名を特定する。そして、サンプリング装置１００は、Ｓ８で採取されたサンプリングデータに含まれる命令アドレスと特定したプログラム名から、サンプリングデータが関数情報ＤＢ２３０に格納された関数情報表に定義された動作関数の開始アドレスから終了アドレスの範囲にあるか否かを判定する（Ｓ９−Ｓ１０）。
【００９８】
Ｓ１０では、サンプリング装置１００は、関数情報ＤＢ２３０に格納された、対象プログラムに対応する関数情報表を参照し、サンプリングデータが関数情報表に含まれる動作関数であるかを判定する。
【００９９】
例えば、サンプリング装置１００は、Ｓ９で特定したプログラム名に基づいて関数情報表を検索し、プログラム名に対応付けられた開始アドレス及び終了アドレスを取得する。そして、サンプリング装置１００は、サンプリングデータに含まれるプログラム中のアドレスが、開始アドレス及び終了アドレスで特定できる位置範囲に含まれるか否かを判定すればよい。サンプリング装置１００は、プログラム名および命令アドレスが関数情報表に含まれる場合に、サンプリングデータが関数情報表に含まれる動作関数に対応すると判定すればよい。
【０１００】
なお、サンプリング装置１００は、関数情報ＤＢ２３０に格納された、対象プログラムに対応する関数情報表を、サンプリング開始と共に主記憶部１０２の所定の領域に格納するとしてもよい。
【０１０１】
サンプリング装置１００は、サンプリングデータから特定される命令アドレスが関数情報表に含まれる動作関数に該当する場合（Ｓ１０、Ｙｅｓ）には、関数情報表から動作関数に対応する関数識別情報を取得する。そして、サンプリング装置１００は、取得した関数識別情報を主記憶部１０２の所定の領域に格納する（Ｓ１２）。
【０１０２】
一方、サンプリング装置１００は、サンプリングデータから特定される命令アドレスが関数情報表に含まれる動作関数に該当しない場合（Ｓ１０、Ｎｏ）には、Ｓ９で特定した
命令アドレスを主記憶部１０２の所定の領域に格納する（Ｓ１１）。
【０１０３】
次にＳ１３では、サンプリング装置１００は、処理中のサンプリングデータと直前のサンプリング周期で採取されたサンプリングデータとの比較を行い、処理中のサンプリングデータが連続したものであるかを判定する。
【０１０４】
ここで、サンプリングデータが連続したものとは、（１）同一の動作関数のサンプリングデータが連続して検出された場合、（２）同一のＰＩＤ及び命令アドレスのサンプリングデータが連続して検出された場合を言う。
【０１０５】
例えば、サンプリング装置１００は、処理中のサンプリングデータのＣＰＵ番号及び動作関数と直前のサンプリング周期で採取されたサンプリングデータのＣＰＵ番号及び動作関数とを比較する。サンプリング装置１００は、両者のＣＰＵ番号及び動作関数の一致を判定することにより、時系列順に連続したサンプリングデータであるかを判定できる。
【０１０６】
また、例えば、サンプリング装置１００は、処理中のサンプリングデータのＰＩＤ及び命令アドレスと直前のサンプリング周期で採取されたサンプリングデータのＰＩＤ及び命令アドレスとを比較する。サンプリング装置１００は、両者のＰＩＤ及び命令アドレスの一致を判定することにより、時系列順に連続したサンプリングデータであるかを判定できる。
【０１０７】
サンプリング装置１００は、処理中のサンプリングデータの動作関数が直前のサンプリングデータの動作関数と一致する場合（Ｓ１３、Ｙｅｓ）には、サンプリング装置１００は、例えば、主記憶部１０２の所定の領域に設定された連続検出カウンタのカウント値を「１」インクリメントする。ここで、サンプリング装置１００は、主記憶部１０２の所定の領域に設定された連続検出カウンタとして、例えば、図５Ａの表に示した、各行のレコードを主記憶部１０２の所定の領域に保持しておけばよい。そして、図５Ａに示した各行の「連続回数」のフィールドを連続検出カウンタとして用いればよい。
【０１０８】
そして、サンプリング装置１００は、計数値を所定の領域に格納する（Ｓ１６）。なお、サンプリング装置１００は、連続して一致するサンプリングデータを検出する度に連続検出カウンタのカウント値を「１」インクリメントし続けることで、サンプリングデータの動作関数（またはＰＩＤ及び命令アドレス）の連続回数を計数できる。
【０１０９】
一方、サンプリング装置１００は、処理中のサンプリングデータの動作関数が直前のサンプリングデータの動作関数と一致しない場合（Ｓ１３、Ｎｏ）には、サンプリング装置１００は、処理中のサンプリングデータを新たなサンプリングデータとして主記憶部１０２の所定の領域に格納する（Ｓ１４）。例えば、サンプリング装置１００は、図５Ａの表に示した、各行のレコードと同一の形式で主記憶部１０２の所定の領域を確保し、「連続回数」のフィールドに初期値を１に設定すればよい。
【０１１０】
なお、Ｓ１３−Ｓ１５の処理は、ＰＩＤ及び命令アドレスの一致を判定する場合でも同様である。サンプリング装置１００は、処理中のサンプリングデータのＰＩＤ及び命令アドレスが直前のサンプリングデータのＰＩＤ及び命令アドレスと一致する場合（Ｓ１３、Ｙｅｓ）には、サンプリング装置１００は、例えば、主記憶部１０２の所定の領域に設定された連続検出カウンタのカウント値を「１」インクリメントし、計数値を所定の領域に格納する。一方、サンプリング装置１００は、処理中のサンプリングデータのＰＩＤ及び命令アドレスが直前のサンプリングデータのＰＩＤ及び命令アドレスと一致しない場合には、サンプリング装置１００は、処理中のサンプリングデータを新たなサンプリングデータとして主記憶部１０２の所定の領域に格納すればよい。
【０１１１】
ここで、サンプリング装置１００で実行されるＳ１３の処理は、検出ステップ、検出手順の一例である。また、サンプリング装置１００のＣＰＵ１０１等は、検出手段の一例として、Ｓ１３の処理を実行する。また、サンプリング装置１００で実行されるＳ１５の処理は、計数ステップ、計数手順の一例である。また、サンプリング装置１００のＣＰＵ１０１等は、計数手段の一例として、Ｓ１５の処理を実行する。さらに、サンプリング装置１００で実行されるＳ１４、Ｓ１６の処理は、記録ステップ、記録手順の一例である。また、サンプリング装置１００のＣＰＵ１０１等は、記録手段の一例として、Ｓ１４、Ｓ１６の処理を実行する。
【０１１２】
なお、サンプリング装置１００は、Ｓ１０の判定で、動作関数が特定できない場合には、Ｓ１１において命令アドレスに代えて、サンプリング情報に付属識別情報を付与してもよい。付属識別情報は、サンプリング情報のアドレスから関数を特定することができなかったこと示す情報である。付属識別情報としては、サンプリング装置１００は、例えば、「Ａ」や「０」といった命令アドレスを集約する情報を付与し、サンプリングデータレコードを作成するとしてもよい。命令アドレスを集約する付属識別情報は、Ｓ１２で特定される関数識別情報と識別できればよい。この場合、サンプリング装置１００で実行されるＳ１１の処理は、付属識別情報付与ステップ、付属識別情報付与手順の一例である。また、サンプリング装置１００のＣＰＵ１０１等は、付属識別情報付与手段の一例として、Ｓ１１の処理を実行する。
【０１１３】
Ｓ１７では、サンプリング装置１００は、対象プログラムの動作実行の終了を判定し、動作実行が終了でなければＳ８に移行し（Ｓ１７、Ｎｏ）、Ｓ８−Ｓ１７の処理を繰り返す。一方、サンプリング装置１００は、対象プログラムの動作実行が終了の場合（Ｓ１７、Ｙｅｓ）には、サンプリングデータの記録処理を終了する。
【０１１４】
以上、説明したように、本実施形態のサンプリングデータの記録処理では、サンプリングデータの動作関数がサンプリングされた時系列順に連続する場合には、サンプリングデータに替えて連続回数を記憶するため、（１）式で例示する、サンプリング時のサンプリングデータ量を削減できる。また、本実施形態のサンプリングデータの記録処理では、サンプリングデータのＰＩＤ及び命令アドレスがサンプリングされた時系列順に連続する場合にも、サンプリングデータに替えて連続回数を記憶するため、同様に、サンプル数を削減できる。例えば、対象プログラムに対する１回のサンプリングで収集・蓄積されるデータ量を削減することができる。特に、プログラム実行期間中に何も処理しないアイドル関数や所定のイベント発生を待機するロック関係の関数等を対象プログラムに含む場合には、データ量の削減は効果的である。
【０１１５】
また、例えば、対象プログラムを実行するコンピュータが、複数のプロセッサを有するマルチプロセッサ、複数のコアを単一のＣＰＵパッケージ内に組み込むマルチコアプロセッサ等のコンピュータであっても、長時間のサンプリングデータの収集が期待できる。
【０１１６】
また、例えば、ＨＰＣ（High-performance computing）といった技術分野において、スーパーコンピュータ等で実行される数理計算用プログラムといった実行時間が長大な対象プログラムであっても、長時間のサンプリングデータの収集が期待できる。
【０１１７】
また、本実施形態のサンプリングデータの記録処理では、サンプリング頻度の相対的に高い動作関数を関数情報表として参照することができるため、動作関数検出のための処理時間を短縮できる。また、本実施形態のサンプリングデータの記録処理では、関数情報表に含まれる動作関数をサンプリングデータの採取・収集の対象とし、関数情報表に含まれない動作関数を採取・収集の対象外とすれば、さらなるデータ量の削減が期待できる。
【０１１８】
さらに、本実施形態のサンプリングデータの記録処理では、関数情報表に含まれない動作関数を採取する場合に、命令アドレスに替えて命令アドレスであることを特定する関数識別情報を新たに付与し、サンプリングデータレコードを作成できる。このため、（１）式に例示するように、命令アドレスを格納する場合に比べ、１レコードデータサイズを縮小できる。
【０１１９】
《変形例》
本実施形態のサンプリングデータの記録処理の変形例として、対象となるプログラムの条件分岐で区分される基本ブロックごとに、計数値を纏めるとしてもよい。例えば、サンプリング装置１００は、対象プログラムを分岐命令の分岐先に対応する基本ブロックに分割すればよい。そして、サンプリング装置１００は、基本ブロックの識別情報と、基本ブロックの先頭命令のアドレスと基本ブロックの末尾の命令とのアドレスとを含む分類表を作成すればよい。
【０１２０】
そして、サンプリング装置１００は、対象となるプログラムの実行期間中に、採取したサンプリングデータのアドレスが基本ブロックの先頭アドレスと末端アドレスとの間にあるか否かを判定し、サンプリングデータに対応する基本ブロックの識別情報を付与すればよい。基本ブロックの識別情報を付与する手順は、上記実施形態において関数の識別情報を付与を付与する手順と同様である。
【０１２１】
サンプリング装置１００は、基本ブロックの識別情報の計数値を記録することにより、関数よりもきめ細かいサンプリングデータの計数値を収集することができる。
【０１２２】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１２３】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【０１２４】
《その他》
以上の実施形態は、さらに以下の付記と呼ぶ態様を含む。以下の各付記に含まれる構成要素は、他の付記に含まれる構成と組み合わせることができる。
【０１２５】
（付記１）
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された、前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出ステップと、
前記検出ステップで時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数ステップと、
前記検出ステップで時系列順に連続することを検出したサンプリング情報と前記計数ス
テップで計数された連続したサンプリング回数とを対応付けて記録する記録ステップと、
を実行させるためのサンプリングプログラム。
【０１２６】
（付記２）
前記対象プログラム中の関数の識別情報と前記関数が前記対象プログラム中に配置されるアドレスの範囲とを含む関数情報表を基に、前記サンプリング情報に含まれる前記対象プログラム中のアドレスから、前記サンプリング情報に対応する関数の識別情報を取得する取得ステップをさらに実行させ、
前記記録ステップでは、前記取得された関数の識別情報と関数の識別情報のサンプリング回数とが記録される付記１に記載のサンプリングプログラム。
【０１２７】
（付記３）
前記対象プログラムを特定期間で実行し、前記特定期間中に前記対象プログラムの動作に係る情報を所定のサンプリング周期で収集し、収集されたサンプリング情報から、前記対象プログラム中の関数の識別情報と関数の識別情報のサンプリング回数とを取得するステップと、
前記関数の識別情報のサンプリング回数が所定の基準を満足する関数について、前記関数情報表を作成するステップをさらに実行させるための付記２に記載のサンプリングプログラム。
【０１２８】
（付記４）
前記取得ステップは、前記サンプリング情報に対応する関数の識別情報を取得できない場合には、前記関数の識別情報に代わるサンプリング情報の付属識別情報を付与する付属識別情報付与ステップを含み、
前記記録ステップは、前記取得ステップで取得された動作関数の識別情報、或いは前記付属識別情報付与ステップで付与された付属識別情報と、前記計数ステップで計数された連続したサンプリング回数とを対応付けて記録する、付記２または３に記載のサンプリングプログラム。
【０１２９】
（付記５）
コンピュータが、
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された、前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出手順と、
前記検出手順で時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数手順と、
前記検出手順で時系列順に連続することを検出したサンプリング情報と前記計数手順で計数された連続したサンプリング回数とを対応付けて記録する記録手順と、
を実行するサンプリング方法。
【０１３０】
（付記６）
前記対象プログラム中の関数の識別情報と前記関数が前記対象プログラム中に配置されるアドレスの範囲とを含む関数情報表を基に、前記サンプリング情報に含まれる前記対象プログラム中のアドレスから、前記サンプリング情報に対応する関数の識別情報を取得する取得手順をさらに実行し、
前記記録手順では、前記取得された関数の識別情報と関数の識別情報のサンプリング回数とが記録される付記５に記載のサンプリング方法。
【０１３１】
（付記７）
前記対象プログラムを特定期間で実行し、前記特定期間中に前記対象プログラムの動作に係る情報を所定のサンプリング周期で収集し、収集されたサンプリング情報から、前記対象プログラム中の関数の識別情報と関数の識別情報のサンプリング回数とを取得する手順と、
前記関数の識別情報のサンプリング回数が所定の基準を満足する関数について、前記関数情報表を作成する手順をさらに実行する付記６に記載のサンプリング方法。
【０１３２】
（付記８）
前記取得手順は、前記サンプリング情報に対応する関数の識別情報を取得できない場合には、前記関数の識別情報に代わるサンプリング情報の付属識別情報を付与する付属識別情報付与手順を含み、
前記記録手順は、前記取得手順で取得された動作関数の識別情報、或いは前記付属識別情報付与手順で付与された付属識別情報と、前記計数手順で計数された連続したサンプリング回数とを対応付けて記録する、付記６または７に記載のサンプリング方法。
【０１３３】
（付記９）
サンプリングの対象となる対象プログラムの実行期間中に所定のサンプリング周期で採取された、前記対象プログラムの動作に係るサンプリング情報について、時系列順に隣接するサンプリング情報間の比較を行い、共通の要素を有するサンプリング情報が時系列順に連続することを検出する検出手段と、
前記検出手段で時系列順に連続することが検出されたサンプリング情報の、連続したサンプリング回数を計数する計数手段と、
前記検出手段で時系列順に連続することを検出したサンプリング情報と前記計数手段で計数された連続したサンプリング回数とを対応付けて記録する記録手段と、
を備える情報処理装置。
【０１３４】
（付記１０）
前記対象プログラム中の関数の識別情報と前記関数が前記対象プログラム中に配置されるアドレスの範囲とを含む関数情報表を基に、前記サンプリング情報に含まれる前記対象プログラム中のアドレスから、前記サンプリング情報に対応する関数の識別情報を取得する取得手段をさらに備え、
前記記録手段は、前記取得された関数の識別情報と関数の識別情報のサンプリング回数とを記録する付記９に記載の情報処理装置。
【０１３５】
（付記１１）
前記対象プログラムを特定期間で実行し、前記特定期間中に前記対象プログラムの動作に係る情報を所定のサンプリング周期で収集し、収集されたサンプリング情報から、前記対象プログラム中の関数の識別情報と関数の識別情報のサンプリング回数とを取得する手段と、
前記関数の識別情報のサンプリング回数が所定の基準を満足する関数について、前記関数情報表を作成する手段をさらに備える付記１０に記載の情報処理装置。
【０１３６】
（付記１２）
前記取得手段は、前記サンプリング情報に対応する関数の識別情報を取得できない場合には、前記関数の識別情報に代わるサンプリング情報の付属識別情報を付与する付属識別情報付与手段を含み、
前記記録手段は、前記取得手段で取得された動作関数の識別情報、或いは前記付属識別情報付与手段で付与された付属識別情報と、前記計数手段で計数された連続したサンプリング回数とを対応付けて記録する、付記１０または１１に記載の情報処理装置。
【符号の説明】
【０１３７】
１００  サンプリング装置
１０１  ＣＰＵ
１０２  主記憶部
１０３  補助記憶部
１０４  通信部
１１０  第１サンプリング処理部
１２０  動作関数特定部
１３０  頻度算出部
１４０  関数情報表作成部
１５０  第２サンプリング処理部
１６０  連続検出部
１７０  収集データ記憶部
２００  記憶装置
２１０  サンプリングＤＢ
２２０  動作関数ＤＢ
２３０  関数情報ＤＢ
【図１】
2014106679.tif 000003
【図２】
2014106679.tif 000004
【図３】
2014106679.tif 000005
【図４】
2014106679.tif 000006
【図５Ａ】
2014106679.tif 000007
【図５Ｂ】
2014106679.tif 000008
【図６】
2014106679.tif 000009
【図７】
2014106679.tif 000010