(57)【要約】【課題】動的ライブラリのプロファイリング方法を提供する。【解決手段】前記動的ライブラリのプロファイリング方法は、動的ライブラリ関数の開始アドレスに第１中断点を設定し、対象プロセスが前記第１中断点を実行したときのプロセスＰＭＵカウントである第１イベントカウント値を記録し、前記動的ライブラリ関数のリターンアドレスに第２中断点を設定し、前記対象プロセスが前記第２中断点を実行したときのプロセスＰＭＵカウントである第２イベントカウント値と前記記録された第１イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するＰＭＵカウント値を計算することを含み、前記プロセスＰＭＵカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するＰＭＵカウント値を累積した値である。【選択図】図１
2014106972.tif 000002
【特許請求の範囲】
【請求項１】
動的ライブラリ関数の開始アドレスに第１中断点を設定するステップと、
対象プロセスが前記第１中断点を実行したときのプロセスＰＭＵカウントである第１イベントカウント値を記録するステップと、
前記動的ライブラリ関数のリターンアドレスに第２中断点を設定するステップと、
前記対象プロセスが前記第２中断点を実行したときのプロセスＰＭＵカウントである第２イベントカウント値と前記記録された第１イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するＰＭＵカウント値を計算するステップと
を有し、
前記プロセスＰＭＵカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するＰＭＵカウント値を累積した値である動的ライブラリのプロファイリング方法。
【請求項２】
前記第１イベントカウント値を記録するステップは、前記対象プロセスが前記第１中断点を実行すると、前記対象プロセスの第１リソース使用情報を取得するステップを含む請求項１に記載の動的ライブラリのプロファイリング方法。
【請求項３】
前記第１イベントカウント値を記録するステップは、前記対象プロセスの第１リソース使用情報から前記対象プロセスのプロセスＰＭＵカウントを抽出し、前記第１イベントカウント値を記録するステップを含む請求項２に記載の動的ライブラリのプロファイリング方法。
【請求項４】
前記第１リソース使用情報には、前記対象プロセスが前記第１中断点を実行したときまで前記プロセッサコアで発生するＰＭＵカウント値を累積したプロセスＰＭＵカウントが記録される請求項２に記載の動的ライブラリのプロファイリング方法。
【請求項５】
前記プロセッサコアで発生するＰＭＵカウント値を計算するステップは、前記対象プロセスが前記第２中断点を実行すると、前記対象プロセスの第２リソース使用情報を取得するステップを含む請求項１に記載の動的ライブラリのプロファイリング方法。
【請求項６】
前記プロセッサコアで発生するＰＭＵカウント値を計算するステップは、前記対象プロセスの第２リソース使用情報から前記対象プロセスのプロセスＰＭＵカウントを抽出するステップを含む請求項５に記載の動的ライブラリのプロファイリング方法。
【請求項７】
前記第２リソース使用情報には、前記対象プロセスが前記第２中断点を実行したときまで、前記プロセッサコアで発生するＰＭＵカウント値を累積したプロセスＰＭＵカウントが記録される請求項５に記載の動的ライブラリのプロファイリング方法。
【請求項８】
前記プロセッサコアで発生するＰＭＵカウント値を計算するステップは、前記抽出された第２イベントカウント値と前記記録された第１イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間に前記プロセッサコアで発生するＰＭＵカウント値を計算するステップを含む請求項６に記載の動的ライブラリのプロファイリング方法。
【請求項９】
動的ライブラリ関数の開始アドレスに第１中断点を設定するステップと、
対象プロセスが前記第１中断点を実行したときに関数進入イベントを発生させるステップと、
前記動的ライブラリ関数のリターンアドレスに第２中断点を設定するステップと、
前記対象プロセスが前記第２中断点を実行したときに関数終了イベントを発生させるステップと
を有する動的ライブラリのプロファイリング方法。
【請求項１０】
前記関数進入イベントが発生するときのプロセスＰＭＵカウントである第１イベントカウント値を記録するステップと、
前記関数終了イベントが発生するときのプロセスＰＭＵカウントである第２イベントカウント値を記録するステップと、
前記第１イベントカウント値と前記第２イベントカウント値とを比較して前記動的ライブラリ関数が実行される間にプロセッサコアで発生するＰＭＵカウント値を計算するステップと
をさらに有し、
前記プロセスＰＭＵカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するＰＭＵカウント値を累積した値である請求項９に記載の動的ライブラリのプロファイリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、動的ライブラリのプロファイリング方法に関するものである。
【背景技術】
【０００２】
プロファイリングとは、実行中のプログラムの実行モードやＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）カーネルとの通信モードなどを解析することをいう。プロファイリングによりプログラムの性能情報を測定し、プログラムの実行において性能低下の要因などを見いだすことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明が解決しようとする課題は、動的ライブラリ関数単位のＰＭＵイベントカウントを測定できる動的ライブラリのプロファイリング方法、これを記録したコンピュータ読み取り可能な記録媒体及び動的ライブラリのプロファイリングシステムを提供することにある。
【０００４】
本発明が解決しようとする別の課題は、時分割システムで発生するコンテクストスイッチングを考慮し、動的ライブラリ関数単位のＰＭＵイベントカウントを測定できる動的ライブラリのプロファイリング方法、これを記録したコンピュータ読み取り可能な記録媒体及び動的ライブラリのプロファイリングシステムを提供することにある。
【０００５】
本発明が解決しようとする課題は、以上で言及した課題に限定されず、言及されていない課題または他の課題は、以下の記載から当業者に明確に理解できるであろう。
【課題を解決するための手段】
【０００６】
前記課題を解決するための本発明の動的ライブラリのプロファイリング方法の一実施態様は、動的ライブラリ関数の開始アドレスに第１中断点を設定し、対象プロセスが前記第１中断点を実行したときのプロセスＰＭＵカウントである第１イベントカウント値を記録し、前記動的ライブラリ関数のリターンアドレスに第２中断点を設定し、前記対象プロセスが前記第２中断点を実行したときのプロセスＰＭＵカウントである第２イベントカウント値と前記記録された第１イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するＰＭＵカウント値を計算することを含み、前記プロセスＰＭＵカウントは、前記対象プロセス別に前記対象プロセスが実行される間に前記プロセッサコアで発生するＰＭＵカウント値を累積した値である。
【０００７】
前記課題を解決するための本発明の動的ライブラリのプロファイリング方法の別の実施態様は、動的ライブラリ関数の開始アドレスに第１中断点を設定し、対象プロセスが前記第１中断点を実行したときに関数進入イベントを発生させ、前記動的ライブラリ関数のリターンアドレスに第２中断点を設定し、前記対象プロセスが前記第２中断点を実行したときに関数終了イベントを発生させることを含む。
【０００８】
本発明のその他の具体的な内容は、発明の詳細な説明及び添付の図面に含まれている。
【図面の簡単な説明】
【０００９】
【図１】本発明の一実施形態による動的ライブラリのプロファイリング方法を説明するための概略的なフローチャートである。
【図２】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図３】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図４】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図５】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図６】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図７】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図８】モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【図９】対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスを説明するための概略的な図である。
【図１０】プロセススケジューラのプロセスＰＭＵカウント計算プロセスを説明するための概略的なフローチャートである。
【図１１】プロセスＰＭＵカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。
【図１２】プロセスＰＭＵカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。
【図１３】ライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスＰＭＵカウント測定プロセスを説明するための図である。
【発明を実施するための形態】
【００１０】
本発明の利点及び特徴、これらを達成する方法は、添付する図面と共に詳細に後述する実施形態において明確になるであろう。しかし、本発明は、以下で開示する実施形態に限定されるものではなく、互いに異なる多様な形態で実現されるものであり、本実施形態は、単に本発明の開示を完全にし、本発明が属する技術分野で通常の知識を有する者に発明の範疇を完全に知らせるために提供されるものであり、本発明は、特許請求の範囲によってのみ定義される。
【００１１】
一つの要素（ｅｌｅｍｅｎｔｓ）が他の要素と「接続された（ｃｏｎｎｅｃｔｅｄ  ｔｏ）」または「カップリングされた（ｃｏｕｐｌｅｄ  ｔｏ）」と指称されるものは、他の要素と直接連結またはカップリングされた場合または中間に他の要素を介在する場合をすべて含む。一方、一つの要素が他の要素と「直接接続された（ｄｉｒｅｃｔｌｙ  ｃｏｎｎｅｃｔｅｄ  ｔｏ）」または「直接カップリングされた（ｄｉｒｅｃｔｌｙ  ｃｏｕｐｌｅｄ  ｔｏ）」と指称されるものは中間に他の要素を介在しないことを示す。明細書全体にかけて同一参照符号は、同一構成要素を指称し、「および／または」は、言及されたアイテムのそれぞれおよび一つ以上のすべての組合せを含む。
【００１２】
各ブロックは、特定の論理的機能を行うための一つ以上の実行可能なインストラクションを含むモジュール、セグメントまたはコードの一部を示すことができる。また、いくつの代替実施形態では、ブロックで言及された機能が順序を外れて発生することも可能であるということに留意せねばならない。例えば、連続して図示されている２つのブロックは、実質的に同時に行われてもよく、またはそのブロックが時々該当する機能によって逆順に行われてもよい。
【００１３】
第１、第２などが多様な素子、構成要素を叙述するために使用されるが、これら素子、構成要素及び／またはセクションはこれらの用語によって限定されないことはいうまでもない。これらの用語は、単に一つ構成要素またはセクションを他の素子、構成要素またはセクションと区別するために使用するものである。したがって、以下で言及される第１構成要素、第１構成要素または第１セクションは、本発明の技術的思想内で第２構成要であり得ることは勿論である。
【００１４】
本明細書で使用された用語は、実施形態を説明するためのものであり、本発明を限定しようとするものではない。本明細書で、単数型は、文脈中で特に言及しない限り複数型も含む。明細書で使用される「含む（ｃｏｍｐｒｉｓｅｓ）」および／または「含む（ｃｏｍｐｒｉｓｉｎｇ）」は、言及された構成要素、段階、動作および／または素子以外の一つ以上の他の構成要素、段階、動作および／または素子の存在または追加を排除しない。
【００１５】
他に定義されなければ、本明細書で使用されるすべての用語（技術および科学的用語を含む）は、本発明が属する技術分野で通常の知識を有する者が共通に理解できる意味として使用され得る。また一般に使用される辞典に定義されている用語は明白に特別に定義されていない限り理想的にまたは過度に解釈しない。
【００１６】
以下では添付する図面を参照して本発明の実施形態について詳細に説明する。
【００１７】
以下で使用されるパフォーマンス測定ユニット（ＰＭＵ：Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｅａｓｕｒｅｍｅｎｔ  Ｕｎｉｔ）は、プロセッサコア（ｐｒｏｃｅｓｓｏｒ  ｃｏｒｅ）の内部構成要素であって、プロセッサコアで発生するイベント（ｅｖｅｎｔ）を測定する構成要素を示す。ここで、プロセッサコアで発生するイベントとは、本発明が属する技術分野で通常の知識を有する者に、クロックサイクル（ｃｌｏｃｋ  ｃｙｃｌｅｓ）、メモリ動作（ｍｅｍｏｒｙ  ｏｐｅｒａｔｉｏｎｓ）、例えば、読み取り（ｒｅａｄｓ）、書き込み（ｗｒｉｔｅｓ）等、キャッシュベント（ｃａｃｈｅ  ｅｖｅｎｔ）、例えば、ヒット（ｈｉｔｓ）、ミス（ｍｉｓｓｅｓ）、ライトバック（ｗｒｉｔｅｂａｃｋｓ）等、実行命令（ｅｘｅｃｕｔｉｏｎ  ｉｎｓｔｒｕｃｔｉｏｎｓ）などを示す意味として理解され得るが、これに限定されるものではない。
【００１８】
ＰＭＵカウンタ（ＰＭＵ  ｃｏｕｎｔｅｒ）は、ＰＭＵの内部に備わるレジスタ（ｒｅｇｉｓｔｅｒ）であって、プロセッサコアで発生するイベントをカウントし、これを累積したＰＭＵカウント（ＰＭＵ  ｃｏｕｎｔ）値を記録する。ＰＭＵはソフトウェア的にプログラミングされ得、ＰＭＵカウンタは特殊なアセンブリ命令などにより読み取り・書き込みが可能である。
【００１９】
以下では、ＰＭＵカウンタで読み取ったＰＭＵカウント値をハードウェアＰＭＵカウントとして使用する。
【００２０】
プロセススケジューラ（ｐｒｏｃｅｓｓ  ｓｃｈｅｄｕｌｅｒ）は、時分割システム（ｔｉｍｅ  ｓｈａｒｉｎｇ  ｓｙｓｔｅｍ）をサポートするＯＳカーネル（ＯＳ  ｋｅｒｎｅｌ、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  ｋｅｒｎｅｌ）の内部構成要素であって、所定の優先順位に従い中央処理ユニット（ＣＰＵ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の使用時間を分割して多数のプロセス（ｐｒｏｃｅｓｓ）を実行させる構成要素を示す。本発明の実施形態では、Ｌｉｎｕｘ（登録商標）カーネルをＯＳカーネルの一例として説明する。
【００２１】
図１は、本発明の一実施形態による動的ライブラリのプロファイリング方法を説明するための概略的なフローチャートであり、図２ないし図８は、モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。
【００２２】
図１を参照すると、先ず、モニタリングプロセス（ｍｏｎｉｔｏｒｉｎｇ  ｐｒｏｃｅｓｓ）がライブラリ関数の開始アドレスに第１中断点（ｂｒｅａｋ  ｐｏｉｎｔ）を設定する（Ｓ１１０）。
【００２３】
モニタリングプロセスは、ユーザプロセス（ｕｓｅｒ  ｐｒｏｃｅｓｓ）を追跡（ｔｒａｃｉｎｇ）し、ユーザプロセスが実行される間にプロセッサコアで発生するイベントをモニタする。モニタリングプロセスは、例えば、プロファイラを含む。ここで、プロファイラはプログラムを開発する過程でプログラムの性能を測定し、ボトルネック現象が発生する地点を見つける開発ツールを示す。
【００２４】
ライブラリ関数は、例えば、動的ライブラリ関数を示すが、これに限定されるものではない。
【００２５】
図２を参照すると、モニタリングプロセス（Ｍｏｎｉｔｏｒｉｎｇ  Ｐｒｏｃｅｓｓ、１０）と対象プロセス２０が実行されていることを示す。対象プロセス２０は、モニタリングプロセス１０のモニタ対象になるユーザプロセスであって、ユーザプログラム（Ｕｓｅｒ  Ｐｒｏｇｒａｍ、２１）と前記ユーザプログラムにリンクされた動的ライブラリ（Ｄｙｎａｍｉｃ  Ｌｉｂｒａｒｙ、２２）を含む。
【００２６】
モニタリングプロセス１０は、前述したようにユーザプロセスを追跡し、対象プロセス２０のアドレス空間にアクセス（読み取り・書き込み）できる。Ｌｉｎｕｘでの一般的なプロセスは、他のユーザプロセスのアドレス空間及びレジスタに対して直接アクセスできない。しかし、モニタリングプロセス１０は、例外的に他のユーザプロセスのアドレス空間及びレジスタに対するアクセスが許容される。
【００２７】
モニタリングプロセス１０は、ライブラリ関数の開始アドレス、例えば、０ｘ２０番地に第１中断点（ＢＰ＿ＳＴ）を設定する。その後、モニタリングプロセス１０は、待機（ｗａｉｔ）モードに進入する。第１中断点（ＢＰ＿ＳＴ）は、例えば、ソフトウェア中断点命令を挿入することによって設定できるが、これに限定されるものではない。第１中断点（ＢＰ＿ＳＴ）を設定することによって、ライブラリ関数の開始アドレスの元の命令が中断点命令に置換され、ライブラリ関数の開始アドレスに中断点命令が挿入される。
【００２８】
一方、図示していないが、モニタリングプロセス１０がライブラリ関数の開始アドレスに第１中断点（ＢＰ＿ＳＴ）を設定する前に、動的ライブラリ２２がメモリにロードされ、ユーザプログラム２１とリンクされる過程が提供される。
【００２９】
ユーザプログラム２１で所定の動的ライブラリ関数を呼び出すためには、ユーザプログラム２１の前記動的ライブラリ関数を呼び出すコードが、前記動的ライブラリ関数に対応するＰＬＴ（Ｐｒｏｃｅｄｕｒｅ  Ｌｉｎｋａｇｅ  Ｔａｂｌｅ）を呼び出し、前記ＰＬＴ内で前記動的ライブラリ関数をローディングしたアドレスが記録されたＧＯＴを参照する。この際、ＧＯＴ（Ｇｌｏｂａｌ  Ｏｆｆｓｅｔ  Ｔａｂｌｅ）に記録された前記動的ライブラリ関数をローディングしたアドレスは、動的リンカーによって記録されたものであろう。すなわち、ＧＯＴの初期値は、動的リンカーのアドレスとして記録されており、これによって前記動的ライブラリ関数の最初の呼び出しは、動的リンカーを実行させながら動的ライブラリをメモリにロードし、前記動的ライブラリ関数のアドレスがＧＯＴに記録される。その後、ユーザプログラム２１の前記動的ライブラリ関数を呼び出すコードは、動的リンカーを実行させず、ＧＯＴに記録された前記動的ライブラリ関数のアドレスを参照し、前記ＰＬＴにより前記動的ライブラリ関数の呼び出しができるのである。
【００３０】
ここで、ＰＬＴはユーザプログラム２１で所定の動的ライブラリ関数を呼び出すため、最初に呼び出すコード領域を示す。ＰＬＴは、各動的ライブラリ関数別に各動的ライブラリ関数を間接的に呼び出すためのコードを含む。ＧＯＴは、ＰＬＴ内で所定の動的ライブラリ関数を呼び出すために参照するデータ領域を示す。ＧＯＴのメモリ空間は、動的ライブラリ関数のアドレスを格納する。
【００３１】
次いで、再び図１を参照する。対象プロセスが第１中断点を実行する（Ｓ１２０）。対象プロセスがライブラリ関数の開始アドレスに設定された第１中断点を実行すると、イベント、例えば、関数進入イベントが発生する。関数進入イベントによって対象プロセスの実行が中止され、モニタリングプロセスは待機モードからリリース（ｒｅｌｅａｓｅｄ）される。対象プロセスが中断点を実行することによってイベントが発生し、モニタリングプロセスが前記イベントを処理することについては図９を参照して詳細に説明する。
【００３２】
図３を参照すると、ユーザプログラム２１でライブラリ関数を呼び出すコード（ＤＬ＿ＣＬ）、例えば、０ｘ１０番地のコードが実行される。これによって、ライブラリ関数に対応するＰＬＴによりＧＯＴに記録されたライブラリ関数のアドレスが参照され、ライブラリ関数の開始アドレス０ｘ２０番地が呼び出されるか、または直接的な動的リンカーの呼び出しにより、実行時間にローディングされたライブラリ関数の場合、関数ポインタによって直接的にライブラリ関数の開始アドレス０ｘ２０番地が呼び出される。結局、対象プロセス２０からライブラリ関数が呼び出されることによってライブラリ関数の開始アドレス０ｘ２０番地に設定された第１中断点（ＢＰ＿ＳＴ）が実行される。
【００３３】
次いで、再び図１を参照すると、モニタリングプロセスは対象プロセスのリソース使用情報（ｒｅｓｏｕｒｃｅ  ｕｓａｇｅ  ｓｔａｔｉｓｔｉｃｓ）を取得する（Ｓ１３０）。モニタリングプロセスは、関数進入イベントによって、待機モードからリリースされ、対象プロセスのリソース使用情報を共に取得できる。
【００３４】
リソース使用情報は、ＯＳカーネルで、プロセスのリソース使用統計を有するデータ構造であって、例えば、Ｌｉｎｕｘのｗａｉｔ４因子中のｓｔｒｕｃｔ  ｒｕｓａｇｅを含むが、これに限定されるものではない。本発明の実施形態で、リソース使用情報にプロセスＰＭＵカウント情報の項目が追加され得る。プロセスＰＭＵカウント情報は、対象プロセスのタスク構造体で管理し、対象プロセス別に対象プロセスが実行される間に発生したＰＭＵカウントの累積値である。
【００３５】
ここで、プロセスＰＭＵカウントは、プロセススケジューラによってプロセッサコアにスケジューリングされ、所定のユーザプロセスが実行されるときから、他のユーザプロセスがプロセッサコアにスケジューリングされ、前記ユーザプロセスの実行が中断されるときまで、累積したＰＭＵカウント値を示す。一般的には、ハードウェアＰＭＵカウントは各プロセッサコアに対応して記録されるが、本発明の実施形態で使用されるプロセスＰＭＵカウントは、各プロセスに対応して記録されるＰＭＵカウントを示す。
【００３６】
図４を参照すると、モニタリングプロセス１０は、対象プロセス２０の第１リソース使用情報を取得する。このとき、第１リソース使用情報は、対象プロセス２０の第１中断点（ＢＰ＿ＳＴ）が実行されることによって関数進入イベントが発生した時点で対象プロセスの２０リソース使用情報を示す。第１リソース使用情報には、対象プロセス２０が第１中断点（ＢＰ＿ＳＴ）を実行したときまで、プロセッサコアで発生するＰＭＵカウント値を累積したプロセスＰＭＵカウントが記録されている。
【００３７】
一般的には、モニタリングプロセス１０は、ＯＳカーネルに直接アクセスできない。本発明の実施形態では、ＯＳカーネルで収集したプロセスＰＭＵカウント情報をモニタリングプロセス１０に伝達するため、前述したようにプロセスＰＭＵカウント情報項目が追加されたリソース使用情報を利用できるが、これに限定されるものではない。
【００３８】
次いで、再び図１を参照すると、モニタリングプロセスは、ライブラリ関数の進入時のプロセスＰＭＵカウントを記録する（Ｓ１４０）。モニタリングプロセスは、対象プロセスの第１リソース使用情報からプロセスＰＭＵカウントを抽出し、抽出したプロセスＰＭＵカウント値を第１  ＰＭＵカウント値として記録する。
【００３９】
次いで、モニタリングプロセスは、ライブラリ関数のリターンアドレスに第２中断点を設定する（Ｓ１５０）。その後、モニタリングプロセスは、待機モードに進入し、対象プロセスの実行が再開される。第２中断点は、例えば、ソフトウェア中断点命令を挿入することによって設定できるが、これに限定されるものではない。
【００４０】
図５を参照すると、ライブラリ関数のリターンアドレス、例えば、０ｘ１１番地に第２中断点（ＢＰ＿ＲＴ）を設定する。ライブラリ関数のリターンアドレスは、ライブラリ関数の実行が完了した後、対象プロセス２０のユーザプログラム２１の次の実行コードが記録されたアドレスである。
【００４１】
次いで、再び図１を参照すると、対象プロセスが第２中断点を実行する（Ｓ１６０）。対象プロセスがライブラリ関数のリターンアドレスに設定された第２中断点を実行すると、イベント、例えば、関数終了イベントが発生する。関数終了イベントによって対象プロセスの実行が中止され、モニタリングプロセスは待機モードからリリースされる。
【００４２】
図６を参照すると、ユーザプログラム２１で、ライブラリ関数のリターンアドレスの実行コード、例えば、０ｘ１１番地のコードが実行される。ライブラリ関数の実行が完了し、対象プロセス２０でライブラリ関数がリターンされることによって、ライブラリ関数のリターンアドレス０ｘ１１番地に設定された第２中断点（ＢＰ＿ＲＴ）が実行される。
【００４３】
次いで、再び図１を参照すると、モニタリングプロセスは、対象プロセスのリソース使用情報を取得する（Ｓ１７０）。モニタリングプロセスは、関数終了イベントによって待機モードからリリースされ、対象プロセスのリソース使用情報を共に取得できる。
【００４４】
図７を参照すると、モニタリングプロセス１０は、対象プロセス２０の第２リソース使用情報を取得する。この際、リソース使用情報は、対象プロセス２０の第２中断点（ＢＰ＿ＲＴ）が実行されることによって関数終了イベントが発生した時点で、対象プロセス２０のリソース使用情報を示す。第２リソース使用情報には、対象プロセス２０が第２中断点（ＢＰ＿ＲＴ）を実行したときまで、プロセッサコアで発生するＰＭＵカウント値を累積したプロセスＰＭＵカウントが記録されている。
【００４５】
次いで、再び図１を参照すると、モニタリングプロセスは、ライブラリ関数の終了時の累積したプロセスＰＭＵカウントを計算する（Ｓ１８０）。モニタリングプロセスは、対象プロセスの第２リソース使用情報からプロセスＰＭＵカウントを抽出し、抽出したプロセスＰＭＵカウント値を第２  ＰＭＵカウント値として記録する。モニタリングプロセスは第２  ＰＭＵカウント値と第１  ＰＭＵカウント値とを比較して動的ライブラリ関数が実行される間に累積したプロセスＰＭＵカウント値を計算する。
【００４６】
一方、モニタリングプロセスは、計算したプロセスＰＭＵカウントを各動的ライブラリ関数別に累積して格納する。このため、各動的ライブラリ関数別にＰＭＵカウントを累積して記録する格納空間が存在する。前記格納空間は、例えば、モニタリングプロセスのユーザメモリ空間に備えるが、これに限定されるものではない。
【００４７】
次いで、ライブラリ関数のリターンアドレスの第２中断点を除去する（Ｓ１９０）。その後、モニタリングプロセスは、待機モードに入って、対象プロセスの実行を再開する。
【００４８】
図８を参照すると、モニタリングプロセス１０は、ライブラリ関数のリターンアドレス０ｘ１１番地で第２中断点（ＢＰ＿ＲＴ）を除去する。
【００４９】
従来にはライブラリ関数をプロファイリングするため、コンパイル時間（ｃｏｍｐｉｌｅ  ｔｉｍｅ）にモニタリングコードを挿入したり、実行時間（ｒｕｎ  ｔｉｍｅ）にモニタリングコードを挿入したり、サンプリングに基づくプロファイリングを行う方法（ｓａｍｐｌｉｎｇ  ｂａｓｅｄ  ｐｒｏｆｉｌｉｎｇ）などを利用した。
【００５０】
従来のプロファイリング方法中、コンパイル時間にモニタリングコードを挿入するプロファイリング方法は、プロファイリングのためにリコンパイルが必要であったり、時分割システムでコンテクストスイッチングが発生する際、他のプロセスの実行時間が含まれ、不正確に計算したり、特に、サンプリングに基づくプロファイリングを行う方法は、統計的データに基づく近似値という限界などの問題点がある。
【００５１】
例えば、前述したプロファイリング方法のうち、実行時間にモニタリングコードを挿入する方式であるＬｉｎｕｘ環境で使用されるｌｔｒａｃｅは、ライブラリ関数の実行を追跡（ｔｒａｃｉｎｇ）するためのツールであって、プロファイリング機能を行う。ｌｔｒａｃｅは、ソフトウェア的な中断点をライブラリ関数の開始点と終点に挿入し、中断点によってイベントが発生する時点を利用してライブラリ関数の実行時間（ｅｘｅｃｕｔｉｏｎ  ｔｉｍｅ）を計算する。ｌｔｒａｃｅは、対象プロセスのライブラリ関数に対応するＰＬＴの開始アドレスをライブラリ関数の開始点と仮定し、ライブラリ関数の実行時間を計算する方式を利用する。
【００５２】
特に、前述したｌｔｒａｃｅの場合、対象プロセスの実行時間（ｒｕｎ  ｔｉｍｅ）に動的にローディングする動的ライブラリに対してはプロファイリングが不可能である。これは、実行時間に明示的にローディングされたライブラリ関数は、動的リンカーによりライブラリ関数のアドレスを関数ポインタにより得て、ＰＬＴを経ず直接呼び出されるので、ＰＬＴに設定された中断点を利用してはいかなるイベントも得られないからである。また、ただライブラリ関数の最初の呼び出しに対してのみプロファイリングが可能であり、ライブラリ関数内で他のライブラリ関数を呼び出す場合に対しては検知しない。そして、時分割システムでコンテクストスイッチングが発生すると、他のプロセスの実行時間がライブラリ関数の実行時間に意図せずに含まれて計算される。
【００５３】
しかし、前述した本発明の一実施形態による動的ライブラリのプロファイリング方法によれば、ＰＬＴの開始アドレスに中断点を挿入せず、実行時間（ｒｕｎ  ｔｉｍｅ）に動的ライブラリ関数のローディング後、動的ライブラリ関数の開始アドレスに中断点を設定するので、より広い範囲のプロファイリングをサポートできる。また、ＰＬＴを呼び出さないライブラリ関数に対してもプロファイリングをサポートする。また、後述するようにライブラリ関数内で他のライブラリ関数を呼び出す場合にもそれぞれのライブラリ関数に対するプロファイリングが可能であり、呼び出し側のプロセスＰＭＵカウントと被呼び出し側のプロセスＰＭＵカウントを区別して測定及び計算できる。
【００５４】
以下では図９を参照して対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスについて説明する。図９は、対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスを説明するための概略的な図である。
【００５５】
図９を参照すると、先ず、モニタリングプロセス１０は、対象プロセス２０のモニタを始める（Ｓ２１０）。この際、モニタリングプロセス１０は、前述したように対象プロセス２０を追跡しながら、対象プロセス２０のライブラリ関数の開始アドレスに第１中断点を設定する。
【００５６】
次いで、モニタリングプロセス１０は、イベント待機モードに進入し、イベントの発生を待機する（Ｓ２２０）。
【００５７】
次いで、対象プロセス２０が実行される（Ｓ３１０）。対象プロセス２０は、モニタリングプロセス１０によって設定された中断点を実行する。例えば、対象プロセス２０は、ライブラリ関数の開始アドレスに設定された第１中断点を実行する。または、対象プロセス２０は、ライブラリ関数のリターンアドレスに設定された第２中断点を実行することもできる。
【００５８】
次いで、対象プロセス２０でイベントが発生する（Ｓ３２０）。対象プロセス２０が中断点を実行する場合、イベントが発生する。例えば、対象プロセス２０がライブラリ関数の開始アドレスに設定された第１中断点を実行する場合、関数進入イベントが発生したり、ライブラリ関数のリターンアドレスに設定された第２中断点を実行する場合、関数終了イベントが発生したりする。
【００５９】
次いで、対象プロセス２０の実行を中止する（Ｓ３３０）。イベントが発生すると、対象プロセス２０の実行は中止され、イベントが発生したことがモニタリングプロセス１０に伝達され、モニタリングプロセス１０が待機モードからリリースされる。
【００６０】
次いで、モニタリングプロセス１０がイベントを処理する（Ｓ２３０）。モニタリングプロセス１０は、対象プロセス２０が中断点を実行することによって発生したイベントを処理する。例えば、対象プロセス２０がライブラリ関数の開始アドレスに設定された第１中断点を実行することによって発生した関数進入イベントの場合、モニタリングプロセス１０は、対象プロセス２０のリソース使用情報を取得し、対象プロセス２０のリソース使用情報からプロセスＰＭＵカウントを抽出した後、ライブラリ関数のリターンアドレスに第２中断点を設定する。または、対象プロセス２０がライブラリ関数のリターンアドレスに設定された第２中断点を実行することによって発生した関数終了イベントである場合、モニタリングプロセス１０は、対象プロセス２０のリソース使用情報を取得し、対象プロセス２０のリソース使用情報からプロセスＰＭＵカウントを抽出した後、ライブラリ関数のリターンアドレスに設定された第２中断点を除去する。
【００６１】
次いで、モニタリングプロセス１０が対象プロセス２０の実行を再開（ｒｅｓｕｍｅ）させる（Ｓ２４０）。モニタリングプロセス１０は、前述したようにイベントを処理し、Ｓ２２０からの過程を繰り返すため、再び待機モードに進入する。そして、対象プロセス２０の実行を再開させ、対象プロセス２０がＳ３１０からの過程を繰り返すようにする。
【００６２】
以下では図１０を参照して、プロセススケジューラのプロセスＰＭＵカウント計算プロセスについて説明する。図１０は、プロセススケジューラのプロセスＰＭＵカウント計算プロセスを説明するための概略的なフローチャートである。
【００６３】
図１０を参照すると、ＯＳカーネルでプロセススケジューラが実行される（Ｓ４１０）。プロセススケジューラは、前述したように、所定の優先順位に従いＣＰＵの使用時間を分割して多数のプロセスを実行させる。
【００６４】
次いで、プロセススケジューラは、対象プロセスがコンテクストスイッチングし、実行を始めるとき、ＰＭＵカウンタのハードウェアＰＭＵカウントを初期化させる（Ｓ４２０）。より詳細には、ハードウェアＰＭＵカウントは、コンテクストスイッチングが行われる前、例えば、モニタリングプロセスが待機モードに入って対象プロセスが実行される前に０に初期化される。
【００６５】
次いで、ＯＳカーネルは対象プロセスを実行させる（Ｓ４３０）。
【００６６】
次いで、対象プロセスが異なるプロセスでのコンテクストスイッチングのため、プロセススケジューラに進入する（Ｓ４４０）。
【００６７】
次いで、プロセススケジューラは、対象プロセスに対応するタスク構造体（ｔａｓｋ  ｓｔｒｕｃｔ）にハードウェアＰＭＵカウントを累積して記録する（Ｓ４５０）。より詳細には、プロセススケジューラは、対象プロセスの実行が完了し、他のユーザプロセスがスケジューリングされるときまで、例えば、対象プロセスの実行を中断し、モニタリングプロセスが実行されるときまで、ＰＭＵカウンタに累積して記録されたハードウェアＰＭＵカウントを読み取る。そして、対象プロセスに対応するタスク構造体に記録されたプロセスＰＭＵカウントに、前記読み取ったハードウェアＰＭＵカウントを累積して記録する。
【００６８】
図１０を参照して説明したプロセスＰＭＵカウント計算プロセスは、コンテクストスイッチングが発生する度に繰り返して行う。これによって、コンテクストスイッチングが発生しても、プロセスＰＭＵカウントには他のユーザプロセスの実行時発生するハードウェアＰＭＵカウントが含まれない。
【００６９】
図１１ないし図１２はプロセスカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。
【００７０】
図１１を参照すると、プロファイリングシステムは、モニタリングプロセス（Ｍｏｎｉｔｏｒｉｎｇ  Ｐｒｏｃｅｓｓ、１０）、第１対象プロセス（Ｔａｒｇｅｔ  Ｐｒｏｃｅｓｓ  １、２０ａ）、第２対象プロセス（Ｔａｒｇｅｔ  Ｐｒｏｃｅｓｓ、２０ｂ）、ＯＳカーネル（Ｏｓ  Ｋｅｒｎｅｌ、３０）、プロセッサコア（Ｐｒｏｃｅｓｓｏｒ  Ｃｏｒｅ、４０）を含む。
【００７１】
モニタリングプロセス１０は、関数進入イベント及び関数終了イベントが発生すると、リソース使用情報から対象プロセスのプロセスＰＭＵカウントを抽出し、抽出したプロセスＰＭＵカウントにより対象ライブラリ関数が実行される間に発生するプロセスＰＭＵカウントを計算する。
【００７２】
第１対象プロセス２０ａと第２対象プロセス２０ｂは、モニタリングプロセス１０の追跡対象になるユーザプロセスであって、図１１では複数の対象プロセスのみを図示するが、本発明がこれに限定されるものではない。
【００７３】
ＯＳカーネル３０は、タスク構造体３１とプロセススケジューラ３２を含む。タスク構造体３１は、ＯＳカーネル３０によって各プロセスに対応して割り当てられるデータ構造である。図１１では、タスク構造体３１が第１タスク構造体（ｔａｓｋ  ｓｔｒｕｃｔ  １）３１ａと第２タスク構造体（ｔａｓｋ  ｓｔｒｕｃｔ  ２）３１ｂを含むことを図示するが、本発明がこれに限定されるものではない。
【００７４】
各タスク構造体３１ａ，３１ｂは、各プロセスＰＭＵカウント（Ｐｒｏｃｅｓｓ  ＰＭＵ  Ｃｏｕｎｔ）を累積して記録するための空間が追加される。第１タスク構造体３１ａには、第１対象プロセス２０ａがスケジューリングされる間に発生したプロセスＰＭＵカウントが記録され、第２タスク構造体３１ｂには、第２対象プロセス２０ｂがスケジューリングされる間に発生したプロセスＰＭＵカウントが記録される。
【００７５】
プロセッサコア４０は、ＰＭＵ４１とＣＰＵ４２を含む。ＰＭＵ４１は、プロセッサコアで発生するイベントを測定し、ＰＭＵカウンタにＰＭＵカウント値を記録する。ＰＭＵ４１でサポートするＰＭＵカウンタの個数に従い、ライブラリ関数が実行される間に発生する各種イベントが測定される。ＣＰＵ４２は、プロセススケジューラ３２のスケジューリングに従いユーザプロセスを実行させる。
【００７６】
図１２を参照すると、プロファイリングシステムのプロセッサコア５０は、マルチプロセッサコアである。図１２でプロセッサコア５０は第１  ＣＰＵ５２と第２  ＣＰＵ５４を含むことを図示するが、本発明がこれに限定されるものではない。マルチプロセッサコア５０は、ＣＰＵ５２，５４の個数に対応するようにＰＭＵ５１，５３を含む。
【００７７】
図１０を参照して説明したプロセスＰＭＵカウント計算プロセスと、図１１ないし図１２を参照して説明したプロセスに対応するタスク構造体を利用するプロファイリングシステムによれば、各プロセスの実行時カウントしたプロセスＰＭＵカウントをＯＳカーネルの内部データ構造に保持することができる。これによって、時分割システムでコンテクストスイッチングが発生しても、ＯＳカーネルによってプロセスごとに個別に割り当てられるタスク構造体を利用することによって、他のユーザプロセスのハードウェアＰＭＵカウントが対象プロセスのプロセスＰＭＵカウントに含まれない。
【００７８】
以下では図１３を参照してライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスＰＭＵカウントを測定することについて説明する。図１３は、ライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスＰＭＵカウント測定プロセスを説明するための図である。
【００７９】
図１３を参照すると、ユーザプログラム２１は、実行コード２１ａとＰＬＴ２１ｂを含む。ＰＬＴ２１ｂは、後述する動的ライブラリ関数を呼び出すためのコード領域であり、例えば、ｑｕｘ＿ｐｌｔ、ｂａｚ＿ｐｌｔ、ｂａｒ＿ｐｌｔ、ｆｏｏ＿ｐｌｔを含む。
【００８０】
ユーザプログラム２１とリンクされた動的ライブラリ２２は、例えば、ｑｕｘ（）、ｂａｚ（）、ｂａｒ（）、ｆｏｏ（）などの動的ライブラリ関数を含む。また、モニタリングプロセスによって各動的ライブラリ関数の開始アドレスにはそれぞれの中断点（ＢＰ＿ＳＴ１，ＢＰ＿ＳＴ２，ＢＰ＿ＳＴ３，ＢＰ＿ＳＴ  ４）が設定される。
【００８１】
実行コード２１ａで動的ライブラリ関数、例えば、ｆｏｏ（）を呼び出すと、ＰＬＴ２１ｂ内でｆｏｏ（）を呼び出すためのコード領域、例えば、ｆｏｏ＿ｐｌｔが呼び出される。次いで、ｆｏｏ＿ｐｌｔは、ＧＯＴ（図示せず）に記録されたｆｏｏ（）のアドレスを参照してメモリにロードなった動的ライブラリ２２のｆｏｏ（）を呼び出す。
【００８２】
ｆｏｏ（）の開始アドレスには第１中断点（ＢＰ＿ＳＴ４）が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、ｆｏｏ（）関数進入時のプロセスＰＭＵカウントを第１  ＰＭＵカウント値として記録する。その後、モニタリングプロセスは、ｆｏｏ（）のリターンアドレスに第２中断点（ＢＰ＿ＲＴ４）を設定する。
【００８３】
次いで、ｆｏｏ（）の実行中に他の動的ライブラリ関数、例えば、ｂａｒ（）を呼び出すと、ｂａｒ（）の開始アドレスにも第３中断点（ＢＰ＿ＳＴ３）が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、ｂａｒ（）関数進入時のプロセスＰＭＵカウントを第２  ＰＭＵカウント値として記録する。その後、モニタリングプロセスは、ｂａｒ（）のリターンアドレスに第４中断点（ＢＰ＿ＲＴ３）を設定する。
【００８４】
次いで、ｂａｒ（）の実行が完了してリターンすると、ｂａｒ（）のリターンアドレスに第４中断点（ＢＰ＿ＲＴ３）が設定されているので、関数終了イベントが発生し、モニタリングプロセスは、ｂａｒ（）関数終了時のプロセスＰＭＵカウントを第３  ＰＭＵカウント値として記録する。
【００８５】
次いで、ｆｏｏ（）の残りコードの実行が完了し、リターンすると、ｆｏｏ（）のリターンアドレスに第２中断点（ＢＰ＿ＲＴ４）が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、ｆｏｏ（）関数終了時のプロセスＰＭＵカウントを第４  ＰＭＵカウント値として記録する。
【００８６】
モニタリングプロセスは、第４  ＰＭＵカウント値から第１  ＰＭＵカウント値を引いたＰＭＵカウント値と、第３  ＰＭＵカウント値から第２  ＰＭＵカウント値を引いたＰＭＵカウント値の差異を、ｆｏｏ（）の実行時発生する実質的なプロセスＰＭＵカウント値として計算する。このように、呼び出し側のＰＭＵカウント値と被呼び出し側のＰＭＵカウント値を区別して測定及び計算できるので、本発明の実施形態によれば、それぞれのライブラリ関数に対するプロファイリングが可能である。
【００８７】
本発明の実施形態と関連して説明された方法またはアルゴリズムの段階は、プロセッサによって実行されるハードウェア、ソフトウェアモジュール、またはその２つの結合により直接実現される。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または当業界に既知の任意の他の形態のコンピュータ読み取り可能な記録媒体に存在することもできる。例示的な記録媒体はプロセッサにカップリングされ、そのプロセッサは記録媒体から情報を判読することができ、記録媒体に情報を書き込むことができる。他の方法では、記録媒体はプロセッサと一体型であってもよい。プロセッサ及び格納媒体は、特定用途向け集積回路（ＡＳＩＣ）内に存在することもできる。ＡＳＩＣは、ユーザ端末機内に存在することもできる。他の方法では、プロセッサ及び格納媒体は、ユーザ端末機内に個別コンポーネントとして存在することもできる。
【００８８】
以上添付された図面を参照して本発明の実施形態について説明したが、本発明が属する技術分野で通常の知識を有する者は、本発明が、その技術的思想や必須の特徴を変更しない範囲で他の具体的な形態で実施され得ることを理解することができる。したがって、上記実施形態はすべての面で例示的なものであり、限定的なものではないと理解しなければならない。
【符号の説明】
【００８９】
１０  モニタリングプロセス
２０  対象プロセス
２０ａ  第１対象プロセス
２０ｂ  第２対象プロセス
２１  ユーザプログラム
２２  動的ライブラリ
３０  ＯＳカーネル
３１  タスク構造体
３１ａ  第１タスク構造体
３１ｂ  第２タスク構造体
３２  プロセススケジューラ
４０  プロセッサコア
４１  ＰＭＵ
４２  ＣＰＵ
５０  プロセッサコア
５１  第１  ＰＭＵ
５２  第１  ＣＰＵ
５３  第２  ＰＭＵ
５４  第２  ＣＰＵ
【図１】
2014106972.tif 000003
【図２】
2014106972.tif 000004
【図３】
2014106972.tif 000005
【図４】
2014106972.tif 000006
【図５】
2014106972.tif 000007
【図６】
2014106972.tif 000008
【図７】
2014106972.tif 000009
【図８】
2014106972.tif 000010
【図９】
2014106972.tif 000011
【図１０】
2014106972.tif 000012
【図１１】
2014106972.tif 000013
【図１２】
2014106972.tif 000014
【図１３】
2014106972.tif 000015