動的ライブラリのプロファイリング方法

Download PDF

Info

Publication number
JP2014106972A
Authority
JP
Grant status
Application
Patent type
Prior art keywords
count
value
process
dynamic
library
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.)
Pending
Application number
JP2013237693A
Other languages
English (en)
Inventor
Min-Ju Lee
敏周 李
Egger Bernhard
ベルンハルト・エガー
Jae-Jin Lee
在鎭 李
Eiraku Kin
永洛 金
Hong-Gyu Kim
鴻圭 金
Hong-June Kim
洪準 金
Original Assignee
Samsung Electronics Co Ltd
三星電子株式会社Samsung Electronics Co.,Ltd.
Seoul National Univ R&Db Foundation
ソウル ナショナル ユニバーシティ アールアンドディビー ファウンデーション
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

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL 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/3409Recording 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 for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL 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
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRICAL DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Abstract

【課題】動的ライブラリのプロファイリング方法を提供する。
【解決手段】前記動的ライブラリのプロファイリング方法は、動的ライブラリ関数の開始アドレスに第1中断点を設定し、対象プロセスが前記第1中断点を実行したときのプロセスPMUカウントである第1イベントカウント値を記録し、前記動的ライブラリ関数のリターンアドレスに第2中断点を設定し、前記対象プロセスが前記第2中断点を実行したときのプロセスPMUカウントである第2イベントカウント値と前記記録された第1イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するPMUカウント値を計算することを含み、前記プロセスPMUカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するPMUカウント値を累積した値である。
【選択図】図1

Description

本発明は、動的ライブラリのプロファイリング方法に関するものである。

プロファイリングとは、実行中のプログラムの実行モードやOS(operating system)カーネルとの通信モードなどを解析することをいう。プロファイリングによりプログラムの性能情報を測定し、プログラムの実行において性能低下の要因などを見いだすことができる。

本発明が解決しようとする課題は、動的ライブラリ関数単位のPMUイベントカウントを測定できる動的ライブラリのプロファイリング方法、これを記録したコンピュータ読み取り可能な記録媒体及び動的ライブラリのプロファイリングシステムを提供することにある。

本発明が解決しようとする別の課題は、時分割システムで発生するコンテクストスイッチングを考慮し、動的ライブラリ関数単位のPMUイベントカウントを測定できる動的ライブラリのプロファイリング方法、これを記録したコンピュータ読み取り可能な記録媒体及び動的ライブラリのプロファイリングシステムを提供することにある。

本発明が解決しようとする課題は、以上で言及した課題に限定されず、言及されていない課題または他の課題は、以下の記載から当業者に明確に理解できるであろう。

前記課題を解決するための本発明の動的ライブラリのプロファイリング方法の一実施態様は、動的ライブラリ関数の開始アドレスに第1中断点を設定し、対象プロセスが前記第1中断点を実行したときのプロセスPMUカウントである第1イベントカウント値を記録し、前記動的ライブラリ関数のリターンアドレスに第2中断点を設定し、前記対象プロセスが前記第2中断点を実行したときのプロセスPMUカウントである第2イベントカウント値と前記記録された第1イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するPMUカウント値を計算することを含み、前記プロセスPMUカウントは、前記対象プロセス別に前記対象プロセスが実行される間に前記プロセッサコアで発生するPMUカウント値を累積した値である。

前記課題を解決するための本発明の動的ライブラリのプロファイリング方法の別の実施態様は、動的ライブラリ関数の開始アドレスに第1中断点を設定し、対象プロセスが前記第1中断点を実行したときに関数進入イベントを発生させ、前記動的ライブラリ関数のリターンアドレスに第2中断点を設定し、前記対象プロセスが前記第2中断点を実行したときに関数終了イベントを発生させることを含む。

本発明のその他の具体的な内容は、発明の詳細な説明及び添付の図面に含まれている。

本発明の一実施形態による動的ライブラリのプロファイリング方法を説明するための概略的なフローチャートである。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。 対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスを説明するための概略的な図である。 プロセススケジューラのプロセスPMUカウント計算プロセスを説明するための概略的なフローチャートである。 プロセスPMUカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。 プロセスPMUカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。 ライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスPMUカウント測定プロセスを説明するための図である。

本発明の利点及び特徴、これらを達成する方法は、添付する図面と共に詳細に後述する実施形態において明確になるであろう。しかし、本発明は、以下で開示する実施形態に限定されるものではなく、互いに異なる多様な形態で実現されるものであり、本実施形態は、単に本発明の開示を完全にし、本発明が属する技術分野で通常の知識を有する者に発明の範疇を完全に知らせるために提供されるものであり、本発明は、特許請求の範囲によってのみ定義される。

一つの要素(elements)が他の要素と「接続された(connected to)」または「カップリングされた(coupled to)」と指称されるものは、他の要素と直接連結またはカップリングされた場合または中間に他の要素を介在する場合をすべて含む。一方、一つの要素が他の要素と「直接接続された(directly connected to)」または「直接カップリングされた(directly coupled to)」と指称されるものは中間に他の要素を介在しないことを示す。明細書全体にかけて同一参照符号は、同一構成要素を指称し、「および/または」は、言及されたアイテムのそれぞれおよび一つ以上のすべての組合せを含む。

各ブロックは、特定の論理的機能を行うための一つ以上の実行可能なインストラクションを含むモジュール、セグメントまたはコードの一部を示すことができる。また、いくつの代替実施形態では、ブロックで言及された機能が順序を外れて発生することも可能であるということに留意せねばならない。例えば、連続して図示されている2つのブロックは、実質的に同時に行われてもよく、またはそのブロックが時々該当する機能によって逆順に行われてもよい。

第1、第2などが多様な素子、構成要素を叙述するために使用されるが、これら素子、構成要素及び/またはセクションはこれらの用語によって限定されないことはいうまでもない。これらの用語は、単に一つ構成要素またはセクションを他の素子、構成要素またはセクションと区別するために使用するものである。したがって、以下で言及される第1構成要素、第1構成要素または第1セクションは、本発明の技術的思想内で第2構成要であり得ることは勿論である。

本明細書で使用された用語は、実施形態を説明するためのものであり、本発明を限定しようとするものではない。本明細書で、単数型は、文脈中で特に言及しない限り複数型も含む。明細書で使用される「含む(comprises)」および/または「含む(comprising)」は、言及された構成要素、段階、動作および/または素子以外の一つ以上の他の構成要素、段階、動作および/または素子の存在または追加を排除しない。

他に定義されなければ、本明細書で使用されるすべての用語(技術および科学的用語を含む)は、本発明が属する技術分野で通常の知識を有する者が共通に理解できる意味として使用され得る。また一般に使用される辞典に定義されている用語は明白に特別に定義されていない限り理想的にまたは過度に解釈しない。

以下では添付する図面を参照して本発明の実施形態について詳細に説明する。

以下で使用されるパフォーマンス測定ユニット(PMU:Performance Measurement Unit)は、プロセッサコア(processor core)の内部構成要素であって、プロセッサコアで発生するイベント(event)を測定する構成要素を示す。ここで、プロセッサコアで発生するイベントとは、本発明が属する技術分野で通常の知識を有する者に、クロックサイクル(clock cycles)、メモリ動作(memory operations)、例えば、読み取り(reads)、書き込み(writes)等、キャッシュベント(cache event)、例えば、ヒット(hits)、ミス(misses)、ライトバック(writebacks)等、実行命令(execution instructions)などを示す意味として理解され得るが、これに限定されるものではない。

PMUカウンタ(PMU counter)は、PMUの内部に備わるレジスタ(register)であって、プロセッサコアで発生するイベントをカウントし、これを累積したPMUカウント(PMU count)値を記録する。PMUはソフトウェア的にプログラミングされ得、PMUカウンタは特殊なアセンブリ命令などにより読み取り・書き込みが可能である。

以下では、PMUカウンタで読み取ったPMUカウント値をハードウェアPMUカウントとして使用する。

プロセススケジューラ(process scheduler)は、時分割システム(time sharing system)をサポートするOSカーネル(OS kernel、Operating System kernel)の内部構成要素であって、所定の優先順位に従い中央処理ユニット(CPU、Central Processing Unit)の使用時間を分割して多数のプロセス(process)を実行させる構成要素を示す。本発明の実施形態では、Linux(登録商標)カーネルをOSカーネルの一例として説明する。

図1は、本発明の一実施形態による動的ライブラリのプロファイリング方法を説明するための概略的なフローチャートであり、図2ないし図8は、モニタリングプロセスと対象プロセスの動作を説明するための概略的な図である。

図1を参照すると、先ず、モニタリングプロセス(monitoring process)がライブラリ関数の開始アドレスに第1中断点(break point)を設定する(S110)。

モニタリングプロセスは、ユーザプロセス(user process)を追跡(tracing)し、ユーザプロセスが実行される間にプロセッサコアで発生するイベントをモニタする。モニタリングプロセスは、例えば、プロファイラを含む。ここで、プロファイラはプログラムを開発する過程でプログラムの性能を測定し、ボトルネック現象が発生する地点を見つける開発ツールを示す。

ライブラリ関数は、例えば、動的ライブラリ関数を示すが、これに限定されるものではない。

図2を参照すると、モニタリングプロセス(Monitoring Process、10)と対象プロセス20が実行されていることを示す。対象プロセス20は、モニタリングプロセス10のモニタ対象になるユーザプロセスであって、ユーザプログラム(User Program、21)と前記ユーザプログラムにリンクされた動的ライブラリ(Dynamic Library、22)を含む。

モニタリングプロセス10は、前述したようにユーザプロセスを追跡し、対象プロセス20のアドレス空間にアクセス(読み取り・書き込み)できる。Linuxでの一般的なプロセスは、他のユーザプロセスのアドレス空間及びレジスタに対して直接アクセスできない。しかし、モニタリングプロセス10は、例外的に他のユーザプロセスのアドレス空間及びレジスタに対するアクセスが許容される。

モニタリングプロセス10は、ライブラリ関数の開始アドレス、例えば、0x20番地に第1中断点(BP_ST)を設定する。その後、モニタリングプロセス10は、待機(wait)モードに進入する。第1中断点(BP_ST)は、例えば、ソフトウェア中断点命令を挿入することによって設定できるが、これに限定されるものではない。第1中断点(BP_ST)を設定することによって、ライブラリ関数の開始アドレスの元の命令が中断点命令に置換され、ライブラリ関数の開始アドレスに中断点命令が挿入される。

一方、図示していないが、モニタリングプロセス10がライブラリ関数の開始アドレスに第1中断点(BP_ST)を設定する前に、動的ライブラリ22がメモリにロードされ、ユーザプログラム21とリンクされる過程が提供される。

ユーザプログラム21で所定の動的ライブラリ関数を呼び出すためには、ユーザプログラム21の前記動的ライブラリ関数を呼び出すコードが、前記動的ライブラリ関数に対応するPLT(Procedure Linkage Table)を呼び出し、前記PLT内で前記動的ライブラリ関数をローディングしたアドレスが記録されたGOTを参照する。この際、GOT(Global Offset Table)に記録された前記動的ライブラリ関数をローディングしたアドレスは、動的リンカーによって記録されたものであろう。すなわち、GOTの初期値は、動的リンカーのアドレスとして記録されており、これによって前記動的ライブラリ関数の最初の呼び出しは、動的リンカーを実行させながら動的ライブラリをメモリにロードし、前記動的ライブラリ関数のアドレスがGOTに記録される。その後、ユーザプログラム21の前記動的ライブラリ関数を呼び出すコードは、動的リンカーを実行させず、GOTに記録された前記動的ライブラリ関数のアドレスを参照し、前記PLTにより前記動的ライブラリ関数の呼び出しができるのである。

ここで、PLTはユーザプログラム21で所定の動的ライブラリ関数を呼び出すため、最初に呼び出すコード領域を示す。PLTは、各動的ライブラリ関数別に各動的ライブラリ関数を間接的に呼び出すためのコードを含む。GOTは、PLT内で所定の動的ライブラリ関数を呼び出すために参照するデータ領域を示す。GOTのメモリ空間は、動的ライブラリ関数のアドレスを格納する。

次いで、再び図1を参照する。対象プロセスが第1中断点を実行する(S120)。対象プロセスがライブラリ関数の開始アドレスに設定された第1中断点を実行すると、イベント、例えば、関数進入イベントが発生する。関数進入イベントによって対象プロセスの実行が中止され、モニタリングプロセスは待機モードからリリース(released)される。対象プロセスが中断点を実行することによってイベントが発生し、モニタリングプロセスが前記イベントを処理することについては図9を参照して詳細に説明する。

図3を参照すると、ユーザプログラム21でライブラリ関数を呼び出すコード(DL_CL)、例えば、0x10番地のコードが実行される。これによって、ライブラリ関数に対応するPLTによりGOTに記録されたライブラリ関数のアドレスが参照され、ライブラリ関数の開始アドレス0x20番地が呼び出されるか、または直接的な動的リンカーの呼び出しにより、実行時間にローディングされたライブラリ関数の場合、関数ポインタによって直接的にライブラリ関数の開始アドレス0x20番地が呼び出される。結局、対象プロセス20からライブラリ関数が呼び出されることによってライブラリ関数の開始アドレス0x20番地に設定された第1中断点(BP_ST)が実行される。

次いで、再び図1を参照すると、モニタリングプロセスは対象プロセスのリソース使用情報(resource usage statistics)を取得する(S130)。モニタリングプロセスは、関数進入イベントによって、待機モードからリリースされ、対象プロセスのリソース使用情報を共に取得できる。

リソース使用情報は、OSカーネルで、プロセスのリソース使用統計を有するデータ構造であって、例えば、Linuxのwait4因子中のstruct rusageを含むが、これに限定されるものではない。本発明の実施形態で、リソース使用情報にプロセスPMUカウント情報の項目が追加され得る。プロセスPMUカウント情報は、対象プロセスのタスク構造体で管理し、対象プロセス別に対象プロセスが実行される間に発生したPMUカウントの累積値である。

ここで、プロセスPMUカウントは、プロセススケジューラによってプロセッサコアにスケジューリングされ、所定のユーザプロセスが実行されるときから、他のユーザプロセスがプロセッサコアにスケジューリングされ、前記ユーザプロセスの実行が中断されるときまで、累積したPMUカウント値を示す。一般的には、ハードウェアPMUカウントは各プロセッサコアに対応して記録されるが、本発明の実施形態で使用されるプロセスPMUカウントは、各プロセスに対応して記録されるPMUカウントを示す。

図4を参照すると、モニタリングプロセス10は、対象プロセス20の第1リソース使用情報を取得する。このとき、第1リソース使用情報は、対象プロセス20の第1中断点(BP_ST)が実行されることによって関数進入イベントが発生した時点で対象プロセスの20リソース使用情報を示す。第1リソース使用情報には、対象プロセス20が第1中断点(BP_ST)を実行したときまで、プロセッサコアで発生するPMUカウント値を累積したプロセスPMUカウントが記録されている。

一般的には、モニタリングプロセス10は、OSカーネルに直接アクセスできない。本発明の実施形態では、OSカーネルで収集したプロセスPMUカウント情報をモニタリングプロセス10に伝達するため、前述したようにプロセスPMUカウント情報項目が追加されたリソース使用情報を利用できるが、これに限定されるものではない。

次いで、再び図1を参照すると、モニタリングプロセスは、ライブラリ関数の進入時のプロセスPMUカウントを記録する(S140)。モニタリングプロセスは、対象プロセスの第1リソース使用情報からプロセスPMUカウントを抽出し、抽出したプロセスPMUカウント値を第1 PMUカウント値として記録する。

次いで、モニタリングプロセスは、ライブラリ関数のリターンアドレスに第2中断点を設定する(S150)。その後、モニタリングプロセスは、待機モードに進入し、対象プロセスの実行が再開される。第2中断点は、例えば、ソフトウェア中断点命令を挿入することによって設定できるが、これに限定されるものではない。

図5を参照すると、ライブラリ関数のリターンアドレス、例えば、0x11番地に第2中断点(BP_RT)を設定する。ライブラリ関数のリターンアドレスは、ライブラリ関数の実行が完了した後、対象プロセス20のユーザプログラム21の次の実行コードが記録されたアドレスである。

次いで、再び図1を参照すると、対象プロセスが第2中断点を実行する(S160)。対象プロセスがライブラリ関数のリターンアドレスに設定された第2中断点を実行すると、イベント、例えば、関数終了イベントが発生する。関数終了イベントによって対象プロセスの実行が中止され、モニタリングプロセスは待機モードからリリースされる。

図6を参照すると、ユーザプログラム21で、ライブラリ関数のリターンアドレスの実行コード、例えば、0x11番地のコードが実行される。ライブラリ関数の実行が完了し、対象プロセス20でライブラリ関数がリターンされることによって、ライブラリ関数のリターンアドレス0x11番地に設定された第2中断点(BP_RT)が実行される。

次いで、再び図1を参照すると、モニタリングプロセスは、対象プロセスのリソース使用情報を取得する(S170)。モニタリングプロセスは、関数終了イベントによって待機モードからリリースされ、対象プロセスのリソース使用情報を共に取得できる。

図7を参照すると、モニタリングプロセス10は、対象プロセス20の第2リソース使用情報を取得する。この際、リソース使用情報は、対象プロセス20の第2中断点(BP_RT)が実行されることによって関数終了イベントが発生した時点で、対象プロセス20のリソース使用情報を示す。第2リソース使用情報には、対象プロセス20が第2中断点(BP_RT)を実行したときまで、プロセッサコアで発生するPMUカウント値を累積したプロセスPMUカウントが記録されている。

次いで、再び図1を参照すると、モニタリングプロセスは、ライブラリ関数の終了時の累積したプロセスPMUカウントを計算する(S180)。モニタリングプロセスは、対象プロセスの第2リソース使用情報からプロセスPMUカウントを抽出し、抽出したプロセスPMUカウント値を第2 PMUカウント値として記録する。モニタリングプロセスは第2 PMUカウント値と第1 PMUカウント値とを比較して動的ライブラリ関数が実行される間に累積したプロセスPMUカウント値を計算する。

一方、モニタリングプロセスは、計算したプロセスPMUカウントを各動的ライブラリ関数別に累積して格納する。このため、各動的ライブラリ関数別にPMUカウントを累積して記録する格納空間が存在する。前記格納空間は、例えば、モニタリングプロセスのユーザメモリ空間に備えるが、これに限定されるものではない。

次いで、ライブラリ関数のリターンアドレスの第2中断点を除去する(S190)。その後、モニタリングプロセスは、待機モードに入って、対象プロセスの実行を再開する。

図8を参照すると、モニタリングプロセス10は、ライブラリ関数のリターンアドレス0x11番地で第2中断点(BP_RT)を除去する。

従来にはライブラリ関数をプロファイリングするため、コンパイル時間(compile time)にモニタリングコードを挿入したり、実行時間(run time)にモニタリングコードを挿入したり、サンプリングに基づくプロファイリングを行う方法(sampling based profiling)などを利用した。

従来のプロファイリング方法中、コンパイル時間にモニタリングコードを挿入するプロファイリング方法は、プロファイリングのためにリコンパイルが必要であったり、時分割システムでコンテクストスイッチングが発生する際、他のプロセスの実行時間が含まれ、不正確に計算したり、特に、サンプリングに基づくプロファイリングを行う方法は、統計的データに基づく近似値という限界などの問題点がある。

例えば、前述したプロファイリング方法のうち、実行時間にモニタリングコードを挿入する方式であるLinux環境で使用されるltraceは、ライブラリ関数の実行を追跡(tracing)するためのツールであって、プロファイリング機能を行う。ltraceは、ソフトウェア的な中断点をライブラリ関数の開始点と終点に挿入し、中断点によってイベントが発生する時点を利用してライブラリ関数の実行時間(execution time)を計算する。ltraceは、対象プロセスのライブラリ関数に対応するPLTの開始アドレスをライブラリ関数の開始点と仮定し、ライブラリ関数の実行時間を計算する方式を利用する。

特に、前述したltraceの場合、対象プロセスの実行時間(run time)に動的にローディングする動的ライブラリに対してはプロファイリングが不可能である。これは、実行時間に明示的にローディングされたライブラリ関数は、動的リンカーによりライブラリ関数のアドレスを関数ポインタにより得て、PLTを経ず直接呼び出されるので、PLTに設定された中断点を利用してはいかなるイベントも得られないからである。また、ただライブラリ関数の最初の呼び出しに対してのみプロファイリングが可能であり、ライブラリ関数内で他のライブラリ関数を呼び出す場合に対しては検知しない。そして、時分割システムでコンテクストスイッチングが発生すると、他のプロセスの実行時間がライブラリ関数の実行時間に意図せずに含まれて計算される。

しかし、前述した本発明の一実施形態による動的ライブラリのプロファイリング方法によれば、PLTの開始アドレスに中断点を挿入せず、実行時間(run time)に動的ライブラリ関数のローディング後、動的ライブラリ関数の開始アドレスに中断点を設定するので、より広い範囲のプロファイリングをサポートできる。また、PLTを呼び出さないライブラリ関数に対してもプロファイリングをサポートする。また、後述するようにライブラリ関数内で他のライブラリ関数を呼び出す場合にもそれぞれのライブラリ関数に対するプロファイリングが可能であり、呼び出し側のプロセスPMUカウントと被呼び出し側のプロセスPMUカウントを区別して測定及び計算できる。

以下では図9を参照して対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスについて説明する。図9は、対象プロセスのイベント発生とモニタリングプロセスのイベント処理プロセスを説明するための概略的な図である。

図9を参照すると、先ず、モニタリングプロセス10は、対象プロセス20のモニタを始める(S210)。この際、モニタリングプロセス10は、前述したように対象プロセス20を追跡しながら、対象プロセス20のライブラリ関数の開始アドレスに第1中断点を設定する。

次いで、モニタリングプロセス10は、イベント待機モードに進入し、イベントの発生を待機する(S220)。

次いで、対象プロセス20が実行される(S310)。対象プロセス20は、モニタリングプロセス10によって設定された中断点を実行する。例えば、対象プロセス20は、ライブラリ関数の開始アドレスに設定された第1中断点を実行する。または、対象プロセス20は、ライブラリ関数のリターンアドレスに設定された第2中断点を実行することもできる。

次いで、対象プロセス20でイベントが発生する(S320)。対象プロセス20が中断点を実行する場合、イベントが発生する。例えば、対象プロセス20がライブラリ関数の開始アドレスに設定された第1中断点を実行する場合、関数進入イベントが発生したり、ライブラリ関数のリターンアドレスに設定された第2中断点を実行する場合、関数終了イベントが発生したりする。

次いで、対象プロセス20の実行を中止する(S330)。イベントが発生すると、対象プロセス20の実行は中止され、イベントが発生したことがモニタリングプロセス10に伝達され、モニタリングプロセス10が待機モードからリリースされる。

次いで、モニタリングプロセス10がイベントを処理する(S230)。モニタリングプロセス10は、対象プロセス20が中断点を実行することによって発生したイベントを処理する。例えば、対象プロセス20がライブラリ関数の開始アドレスに設定された第1中断点を実行することによって発生した関数進入イベントの場合、モニタリングプロセス10は、対象プロセス20のリソース使用情報を取得し、対象プロセス20のリソース使用情報からプロセスPMUカウントを抽出した後、ライブラリ関数のリターンアドレスに第2中断点を設定する。または、対象プロセス20がライブラリ関数のリターンアドレスに設定された第2中断点を実行することによって発生した関数終了イベントである場合、モニタリングプロセス10は、対象プロセス20のリソース使用情報を取得し、対象プロセス20のリソース使用情報からプロセスPMUカウントを抽出した後、ライブラリ関数のリターンアドレスに設定された第2中断点を除去する。

次いで、モニタリングプロセス10が対象プロセス20の実行を再開(resume)させる(S240)。モニタリングプロセス10は、前述したようにイベントを処理し、S220からの過程を繰り返すため、再び待機モードに進入する。そして、対象プロセス20の実行を再開させ、対象プロセス20がS310からの過程を繰り返すようにする。

以下では図10を参照して、プロセススケジューラのプロセスPMUカウント計算プロセスについて説明する。図10は、プロセススケジューラのプロセスPMUカウント計算プロセスを説明するための概略的なフローチャートである。

図10を参照すると、OSカーネルでプロセススケジューラが実行される(S410)。プロセススケジューラは、前述したように、所定の優先順位に従いCPUの使用時間を分割して多数のプロセスを実行させる。

次いで、プロセススケジューラは、対象プロセスがコンテクストスイッチングし、実行を始めるとき、PMUカウンタのハードウェアPMUカウントを初期化させる(S420)。より詳細には、ハードウェアPMUカウントは、コンテクストスイッチングが行われる前、例えば、モニタリングプロセスが待機モードに入って対象プロセスが実行される前に0に初期化される。

次いで、OSカーネルは対象プロセスを実行させる(S430)。

次いで、対象プロセスが異なるプロセスでのコンテクストスイッチングのため、プロセススケジューラに進入する(S440)。

次いで、プロセススケジューラは、対象プロセスに対応するタスク構造体(task struct)にハードウェアPMUカウントを累積して記録する(S450)。より詳細には、プロセススケジューラは、対象プロセスの実行が完了し、他のユーザプロセスがスケジューリングされるときまで、例えば、対象プロセスの実行を中断し、モニタリングプロセスが実行されるときまで、PMUカウンタに累積して記録されたハードウェアPMUカウントを読み取る。そして、対象プロセスに対応するタスク構造体に記録されたプロセスPMUカウントに、前記読み取ったハードウェアPMUカウントを累積して記録する。

図10を参照して説明したプロセスPMUカウント計算プロセスは、コンテクストスイッチングが発生する度に繰り返して行う。これによって、コンテクストスイッチングが発生しても、プロセスPMUカウントには他のユーザプロセスの実行時発生するハードウェアPMUカウントが含まれない。

図11ないし図12はプロセスカウントを測定するため、プロセスに対応するタスク構造体を利用するプロファイリングシステムを説明するための図である。

図11を参照すると、プロファイリングシステムは、モニタリングプロセス(Monitoring Process、10)、第1対象プロセス(Target Process 1、20a)、第2対象プロセス(Target Process、20b)、OSカーネル(Os Kernel、30)、プロセッサコア(Processor Core、40)を含む。

モニタリングプロセス10は、関数進入イベント及び関数終了イベントが発生すると、リソース使用情報から対象プロセスのプロセスPMUカウントを抽出し、抽出したプロセスPMUカウントにより対象ライブラリ関数が実行される間に発生するプロセスPMUカウントを計算する。

第1対象プロセス20aと第2対象プロセス20bは、モニタリングプロセス10の追跡対象になるユーザプロセスであって、図11では複数の対象プロセスのみを図示するが、本発明がこれに限定されるものではない。

OSカーネル30は、タスク構造体31とプロセススケジューラ32を含む。タスク構造体31は、OSカーネル30によって各プロセスに対応して割り当てられるデータ構造である。図11では、タスク構造体31が第1タスク構造体(task struct 1)31aと第2タスク構造体(task struct 2)31bを含むことを図示するが、本発明がこれに限定されるものではない。

各タスク構造体31a,31bは、各プロセスPMUカウント(Process PMU Count)を累積して記録するための空間が追加される。第1タスク構造体31aには、第1対象プロセス20aがスケジューリングされる間に発生したプロセスPMUカウントが記録され、第2タスク構造体31bには、第2対象プロセス20bがスケジューリングされる間に発生したプロセスPMUカウントが記録される。

プロセッサコア40は、PMU41とCPU42を含む。PMU41は、プロセッサコアで発生するイベントを測定し、PMUカウンタにPMUカウント値を記録する。PMU41でサポートするPMUカウンタの個数に従い、ライブラリ関数が実行される間に発生する各種イベントが測定される。CPU42は、プロセススケジューラ32のスケジューリングに従いユーザプロセスを実行させる。

図12を参照すると、プロファイリングシステムのプロセッサコア50は、マルチプロセッサコアである。図12でプロセッサコア50は第1 CPU52と第2 CPU54を含むことを図示するが、本発明がこれに限定されるものではない。マルチプロセッサコア50は、CPU52,54の個数に対応するようにPMU51,53を含む。

図10を参照して説明したプロセスPMUカウント計算プロセスと、図11ないし図12を参照して説明したプロセスに対応するタスク構造体を利用するプロファイリングシステムによれば、各プロセスの実行時カウントしたプロセスPMUカウントをOSカーネルの内部データ構造に保持することができる。これによって、時分割システムでコンテクストスイッチングが発生しても、OSカーネルによってプロセスごとに個別に割り当てられるタスク構造体を利用することによって、他のユーザプロセスのハードウェアPMUカウントが対象プロセスのプロセスPMUカウントに含まれない。

以下では図13を参照してライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスPMUカウントを測定することについて説明する。図13は、ライブラリ関数内で他のライブラリ関数が呼び出されるとき、プロセスPMUカウント測定プロセスを説明するための図である。

図13を参照すると、ユーザプログラム21は、実行コード21aとPLT21bを含む。PLT21bは、後述する動的ライブラリ関数を呼び出すためのコード領域であり、例えば、qux_plt、baz_plt、bar_plt、foo_pltを含む。

ユーザプログラム21とリンクされた動的ライブラリ22は、例えば、qux()、baz()、bar()、foo()などの動的ライブラリ関数を含む。また、モニタリングプロセスによって各動的ライブラリ関数の開始アドレスにはそれぞれの中断点(BP_ST1,BP_ST2,BP_ST3,BP_ST 4)が設定される。

実行コード21aで動的ライブラリ関数、例えば、foo()を呼び出すと、PLT21b内でfoo()を呼び出すためのコード領域、例えば、foo_pltが呼び出される。次いで、foo_pltは、GOT(図示せず)に記録されたfoo()のアドレスを参照してメモリにロードなった動的ライブラリ22のfoo()を呼び出す。

foo()の開始アドレスには第1中断点(BP_ST4)が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、foo()関数進入時のプロセスPMUカウントを第1 PMUカウント値として記録する。その後、モニタリングプロセスは、foo()のリターンアドレスに第2中断点(BP_RT4)を設定する。

次いで、foo()の実行中に他の動的ライブラリ関数、例えば、bar()を呼び出すと、bar()の開始アドレスにも第3中断点(BP_ST3)が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、bar()関数進入時のプロセスPMUカウントを第2 PMUカウント値として記録する。その後、モニタリングプロセスは、bar()のリターンアドレスに第4中断点(BP_RT3)を設定する。

次いで、bar()の実行が完了してリターンすると、bar()のリターンアドレスに第4中断点(BP_RT3)が設定されているので、関数終了イベントが発生し、モニタリングプロセスは、bar()関数終了時のプロセスPMUカウントを第3 PMUカウント値として記録する。

次いで、foo()の残りコードの実行が完了し、リターンすると、foo()のリターンアドレスに第2中断点(BP_RT4)が設定されているので、関数進入イベントが発生し、モニタリングプロセスは、foo()関数終了時のプロセスPMUカウントを第4 PMUカウント値として記録する。

モニタリングプロセスは、第4 PMUカウント値から第1 PMUカウント値を引いたPMUカウント値と、第3 PMUカウント値から第2 PMUカウント値を引いたPMUカウント値の差異を、foo()の実行時発生する実質的なプロセスPMUカウント値として計算する。このように、呼び出し側のPMUカウント値と被呼び出し側のPMUカウント値を区別して測定及び計算できるので、本発明の実施形態によれば、それぞれのライブラリ関数に対するプロファイリングが可能である。

本発明の実施形態と関連して説明された方法またはアルゴリズムの段階は、プロセッサによって実行されるハードウェア、ソフトウェアモジュール、またはその2つの結合により直接実現される。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM、または当業界に既知の任意の他の形態のコンピュータ読み取り可能な記録媒体に存在することもできる。例示的な記録媒体はプロセッサにカップリングされ、そのプロセッサは記録媒体から情報を判読することができ、記録媒体に情報を書き込むことができる。他の方法では、記録媒体はプロセッサと一体型であってもよい。プロセッサ及び格納媒体は、特定用途向け集積回路(ASIC)内に存在することもできる。ASICは、ユーザ端末機内に存在することもできる。他の方法では、プロセッサ及び格納媒体は、ユーザ端末機内に個別コンポーネントとして存在することもできる。

以上添付された図面を参照して本発明の実施形態について説明したが、本発明が属する技術分野で通常の知識を有する者は、本発明が、その技術的思想や必須の特徴を変更しない範囲で他の具体的な形態で実施され得ることを理解することができる。したがって、上記実施形態はすべての面で例示的なものであり、限定的なものではないと理解しなければならない。

10 モニタリングプロセス
20 対象プロセス
20a 第1対象プロセス
20b 第2対象プロセス
21 ユーザプログラム
22 動的ライブラリ
30 OSカーネル
31 タスク構造体
31a 第1タスク構造体
31b 第2タスク構造体
32 プロセススケジューラ
40 プロセッサコア
41 PMU
42 CPU
50 プロセッサコア
51 第1 PMU
52 第1 CPU
53 第2 PMU
54 第2 CPU

Claims (10)

  1. 動的ライブラリ関数の開始アドレスに第1中断点を設定するステップと、
    対象プロセスが前記第1中断点を実行したときのプロセスPMUカウントである第1イベントカウント値を記録するステップと、
    前記動的ライブラリ関数のリターンアドレスに第2中断点を設定するステップと、
    前記対象プロセスが前記第2中断点を実行したときのプロセスPMUカウントである第2イベントカウント値と前記記録された第1イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間にプロセッサコアで発生するPMUカウント値を計算するステップと
    を有し、
    前記プロセスPMUカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するPMUカウント値を累積した値である動的ライブラリのプロファイリング方法。
  2. 前記第1イベントカウント値を記録するステップは、前記対象プロセスが前記第1中断点を実行すると、前記対象プロセスの第1リソース使用情報を取得するステップを含む請求項1に記載の動的ライブラリのプロファイリング方法。
  3. 前記第1イベントカウント値を記録するステップは、前記対象プロセスの第1リソース使用情報から前記対象プロセスのプロセスPMUカウントを抽出し、前記第1イベントカウント値を記録するステップを含む請求項2に記載の動的ライブラリのプロファイリング方法。
  4. 前記第1リソース使用情報には、前記対象プロセスが前記第1中断点を実行したときまで前記プロセッサコアで発生するPMUカウント値を累積したプロセスPMUカウントが記録される請求項2に記載の動的ライブラリのプロファイリング方法。
  5. 前記プロセッサコアで発生するPMUカウント値を計算するステップは、前記対象プロセスが前記第2中断点を実行すると、前記対象プロセスの第2リソース使用情報を取得するステップを含む請求項1に記載の動的ライブラリのプロファイリング方法。
  6. 前記プロセッサコアで発生するPMUカウント値を計算するステップは、前記対象プロセスの第2リソース使用情報から前記対象プロセスのプロセスPMUカウントを抽出するステップを含む請求項5に記載の動的ライブラリのプロファイリング方法。
  7. 前記第2リソース使用情報には、前記対象プロセスが前記第2中断点を実行したときまで、前記プロセッサコアで発生するPMUカウント値を累積したプロセスPMUカウントが記録される請求項5に記載の動的ライブラリのプロファイリング方法。
  8. 前記プロセッサコアで発生するPMUカウント値を計算するステップは、前記抽出された第2イベントカウント値と前記記録された第1イベントカウント値とを比較し、前記動的ライブラリ関数が実行される間に前記プロセッサコアで発生するPMUカウント値を計算するステップを含む請求項6に記載の動的ライブラリのプロファイリング方法。
  9. 動的ライブラリ関数の開始アドレスに第1中断点を設定するステップと、
    対象プロセスが前記第1中断点を実行したときに関数進入イベントを発生させるステップと、
    前記動的ライブラリ関数のリターンアドレスに第2中断点を設定するステップと、
    前記対象プロセスが前記第2中断点を実行したときに関数終了イベントを発生させるステップと
    を有する動的ライブラリのプロファイリング方法。
  10. 前記関数進入イベントが発生するときのプロセスPMUカウントである第1イベントカウント値を記録するステップと、
    前記関数終了イベントが発生するときのプロセスPMUカウントである第2イベントカウント値を記録するステップと、
    前記第1イベントカウント値と前記第2イベントカウント値とを比較して前記動的ライブラリ関数が実行される間にプロセッサコアで発生するPMUカウント値を計算するステップと
    をさらに有し、
    前記プロセスPMUカウントは、前記対象プロセスが実行される間に前記プロセッサコアで発生するPMUカウント値を累積した値である請求項9に記載の動的ライブラリのプロファイリング方法。

Also Published As

Publication number Publication date Type
EP2735970A3 (en) 2015-04-29 application
EP2735970A2 (en) 2014-05-28 application
CN103838662A (zh) 2014-06-04 application
US20140149968A1 (en) 2014-05-29 application
KR20140066913A (ko) 2014-06-03 application

Similar Documents

Publication Publication Date Title
US5802272A (en) Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
Patil et al. Pinpointing representative portions of large Intel® Itanium® programs with dynamic instrumentation
US6883162B2 (en) Annotations for transaction tracing
US5764885A (en) Apparatus and method for tracing data flows in high-speed computer systems
Nagasaka et al. Statistical power modeling of GPU kernels using performance counters
US8136124B2 (en) Method and apparatus for synthesizing hardware counters from performance sampling
US20110055838A1 (en) Optimized thread scheduling via hardware performance monitoring
US6609216B1 (en) Method for measuring performance of code sequences in a production system
US8042102B2 (en) Method and system for autonomic monitoring of semaphore operations in an application
US20050081107A1 (en) Method and system for autonomic execution path selection in an application
US20100088771A1 (en) Virtualization of a central processing unit measurement facility
US20060230391A1 (en) System and method for collecting a plurality of metrics in a single profiling run of computer code
US7526757B2 (en) Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7496908B2 (en) Method and apparatus for optimizing code execution using annotated trace information having performance indicator and counter information
US6826747B1 (en) System and method for tracing program instructions before and after a trace triggering event within a processor
US20080148240A1 (en) Method and apparatus for call stack sampling to obtain information for analyzing idle states in a data processing system
US20080244533A1 (en) System for and Method of Capturing Performance Characteristics Data From A Computer System and Modeling Target System Performance
US5896538A (en) System and method for multi-phased performance profiling of single-processor and multi-processor systems
US20070261033A1 (en) Method and apparatus for selectively marking and executing instrumentation code
Zhou et al. HARD: Hardware-assisted lockset-based race detection
US20050155021A1 (en) Method and apparatus for autonomically initiating measurement of secondary metrics based on hardware counter values for primary metrics
US20090049429A1 (en) Method and System for Tracing Individual Transactions at the Granularity Level of Method Calls Throughout Distributed Heterogeneous Applications Without Source Code Modifications
US7962314B2 (en) Mechanism for profiling program software running on a processor
US20070261032A1 (en) Method and apparatus for hardware assisted profiling of code
US20030135720A1 (en) Method and system using hardware assistance for instruction tracing with secondary set of interruption resources

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20141226