(57)【要約】【課題】性能劣化を発生させるシステムコールの呼出箇所を的確に特定すること。【解決手段】ログ蓄積部１３０は、大規模分散処理システム２００において、システムコールに応じて実行されたシステムコールログを取得する。そして、抽出部１４０は、ログ蓄積部１３０によって取得されたシステムコールログを用いて、当該システムコールの開始から終了までに要した時間を抽出する。そして、特定部１５０は、抽出部１４０によって抽出された時間に基づいて遅延しているシステムコールを特定し、システムコールに対応する呼出履歴を基にして、性能劣化を発生させるシステムコールの呼出箇所を特定する。【選択図】図６
2014109975.tif 000002
【特許請求の範囲】
【請求項１】
大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集部と、
前記収集部によって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出部と、
前記抽出部によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定部と
を備えたことを特徴とする性能分析装置。
【請求項２】
前記特定部は、前記遅延しているシステムコールの呼出履歴情報に含まれるプログラム毎の実行位置について、前記実行位置のプログラムを実行した全てのシステムコールの数に対する、前記実行位置のプログラムを実行した前記遅延しているシステムコールの数の割合を基にして、性能劣化に関連するプログラムの実行位置を特定することを特徴とする請求項１に記載の性能分析装置。
【請求項３】
前記収集部は、所定割合以上のプログラムが利用するプログラムのフレーム情報を予めメモリ上に読み出しておき、システムコールに応じて実行されたプログラムの呼出元に対応するフレーム情報がメモリ上に読み出されていない場合には、呼出元に対応するフレーム情報をメモリ上に読み出し、読み出したフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集することを特徴とする請求項１または２に記載の性能分析装置。
【請求項４】
大規模分散システムの性能を分析する性能分析装置によって実行される性能分析方法であって、
大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集工程と、
前記収集工程によって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出工程と、
前記抽出工程によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定工程と
を含んだことを特徴とする性能分析方法。
【請求項５】
大規模分散システムの性能を分析する性能分析装置によって実行される性能分析方法であって、
前記大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集ステップと、
前記収集ステップによって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出ステップと、
前記抽出ステップによって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定ステップと
を前記性能分析装置に実行させることを特徴とする性能分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、性能分析装置、性能分析方法及び性能分析プログラムに関する。
【背景技術】
【０００２】
近年、Ｇｏｏｇｌｅ（登録商標）の検索システムに代表される、大量のサーバを並べて、大規模データを並列分散処理する大規模分散処理技術（以下、適宜、従来技術と表記する）の研究開発が盛んに行われている。この従来技術は、各サーバに小規模な処理を実行させることで、全体として大規模な処理を実行できる。また、この従来技術は、サーバの台数を追加することで、データ処理性能の向上やデータ蓄積容量を増大させることが可能である。
【０００３】
従来技術では、大量のサーバを用いているため、サーバの故障に対して柔軟に対応できるようにデザインされており、例えば、サーバ故障時に当該サーバを自動的に切り離し、全体の処理に影響がないようにするフォールトトレラント（Fault  tolerant）性が実現されている。
【０００４】
一方で、大規模分散処理システムでは、特定の条件下において一部の箇所で性能が劣化し、結果として全体の性能が劣化するサイレント故障と呼ばれるケースが発生する。サイレント故障の原因究明方法は困難であり、大規模分散処理システムにおける大きな課題の一つになっている。
【０００５】
これに対して、非特許文献１では、大規模分散処理システムを構成するプロセス・スレッドが発行するＩ／Ｏに関わるシステムコールをロギングし、ロギングした情報を基にして各処理に要した時間を分析・比較することで、性能劣化の要因と考えられる箇所を抽出する技術が開示されている。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】松村俊太郎、本庄利守、綱川光明  日本電信電話株式会社ＮＴＴ情報流通プラットフォーム研究所  「大規模分散処理システムにおけるサイレント障害の原因分析方式に関する一提案」
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができないという問題がある。
【０００８】
例えば、非特許文献１では、性能劣化の被疑箇所となるシステムコールのＩ／Ｏ処理におけるプロセス・入力対象のリソースを特定するだけであり、性能劣化箇所を特定することができていない。
【０００９】
本発明は、上記に鑑みてなされたものであって、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができる性能分析装置、性能分析方法及び性能分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本願に係る性能分析装置は、収集部、抽出部、特定部を有する。収集部は、大規模分散処理システムにおいて、プロセスがＩ／Ｏ処理を実行するために利用するシステムコールの性能情報を収集すると共に、プログラムの実行位置と実行位置を含むサブルーチン（例えば、サブルーチンは関数に対応する）を実行した後の移動先実行位置を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールを実行したサブルーチンの呼出元を辿って行くことで、システムコール毎の実行位置を記録した呼出履歴情報を収集する。抽出部は、収集部によって収集されたシステムコールの性能情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を抽出する。特定部は、抽出部によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたシステムコールの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する。
【発明の効果】
【００１１】
本願に係る性能分析装置は、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することを可能にする。
【図面の簡単な説明】
【００１２】
【図１】図１は、前提となる大規模分散処理システムおよび性能分散装置の一例を示す図である。
【図２】図２は、システムコールの呼出し直前の情報の一例を示す図である。
【図３】図３は、システムコールの呼出し直後の情報の一例を示す図である。
【図４】図４は、前提となる抽出部の処理の一例を示す図である。
【図５】図５は、前提となる大規模分散処理システムおよび性能分析装置の問題点を説明する図である。
【図６】図６は、本実施形態に係る大規模分散処理システムおよび性能分析装置の一例を示す図である。
【図７】図７は、呼出履歴のデータ構造の一例を示す図である。
【図８】図８は、ログ収集部が呼出履歴を生成する処理を説明するための図である。
【図９】図９は、本実施形態に係るログ蓄積部によって蓄積されるシステムコールログのデータ構造の一例を示す図である。
【図１０】図１０は、本実施形態に係るログ蓄積部によって蓄積されるシステムコール集約ログのデータ構造の一例を示す図である。
【図１１】図１１は、本実施形態に係るログ蓄積部によって蓄積されるネットワーク送受信ログのデータ構造の一例を示す図である。
【図１２】図１２は、本実施形態に係る抽出部によって作成される作業領域の第１の例を模式的に示す図である。
【図１３】図１３は、本実施形態に係る抽出部によって作成される作業領域の第２の例を模式的に示す図である。
【図１４】図１４は、本実施形態に係る抽出部による第１の処理の一例を模式的に示す図である。
【図１５】図１５は、本実施形態に係る抽出部による第２の処理の一例を模式的に示す図である。
【図１６】図１６は、本実施形態に係る抽出部による第３の処理の一例を模式的に示す図である。
【図１７】図１７は、本実施形態に係る抽出部による第３の処理の一例を模式的に示す図である。
【図１８】図１８は、特定部の処理の概要を説明するための図である。
【図１９】図１９は、本実施形態に係る性能分析装置による処理手順を示すフローチャートである。
【図２０】図２０は、呼出履歴を生成する処理手順を示すフローチャートである。
【図２１】図２１は、実施例に係る性能分析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１３】
以下に、本発明にかかる性能分析装置、性能分析方法及び性能分析プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１４】
（実施形態）
まず、本実施形態の説明を行う前に、前提となる大規模分散処理システムおよび性能分析装置について説明する。図１は、前提となる大規模分散処理システムおよび性能分散装置の一例を示す図である。
【００１５】
図１に示すように、性能分析装置１０は、ネットワーク（図示略）を介して、大規模分散処理システム２０と接続される。性能分析装置１０は、大規模分散処理システム２０の性能分析を行い、性能劣化の原因となっている箇所を特定する。ネットワークは、例えば、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）などである。
【００１６】
大規模分散処理システム２０は、多数のサーバを有し、各サーバ上で自律的に分散処理を実行するシステムである。例えば、大規模分散処理システム２０は、ユーザに対して種々のサービスを提供するアプリケーションに係る各処理を多数のサーバで分散して処理する。
【００１７】
大規模分散処理システム２０においては、システム内の各サーバにログ収集部が配置される。図１に示す例では、ログ収集部１１ａ，１１ｂ，１１ｃを示す。ログ収集部１１ａ，１１ｂ，１１ｃをまとめて、適宜、ログ収集部１１と表記する。
【００１８】
ログ収集部１１は、ＯＳ・カーネル内のシステムコール呼出の開始直前と終了直後に、性能劣化箇所の特定に利用する情報を収集する。図２は、システムコールの呼出し直前の情報の一例を示す図である。
【００１９】
例えば、ログ収集部１１は、図２に示すように、システムコール種別が「ファイル読み出し」及び「ファイル書き込み」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（File  Descriptor(以降、ＦＤ)、要求サイズ、開始位置）」、「ＦＤが指すファイルの情報（フルパス  or  ソケット種別・自アドレス・対向アドレス）」、「プログラムの呼出履歴（スレッド情報・ユーザ空間のスタックメモリからスタックトレースを行い、呼出履歴を取得）」などの情報を収集する。
【００２０】
ログ収集部１１は、図２に示すように、システムコール種別が「ネットワーク送信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（ＦＤ、要求サイズ、宛先アドレス）」、「ＦＤが指すファイルの情報（同上）」、「プログラムの呼出履歴（同上）」などの情報を収集する。
【００２１】
ログ収集部１１は、図２に示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（ＦＤ、要求サイズ）」、「ＦＤが指すファイルの情報（同上）」、「プログラムの呼び出し履歴（同上）」などの情報を収集する。
【００２２】
図３は、システムコールの呼出し直後の情報の一例を示す図である。例えば、ログ収集部１１は、図３に示すように、システムコール種別が「ファイル読み出し」、「ファイル書き込み」及び「ネットワーク送信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ・戻り値（データ転送サイズまたはエラーコード）」などの情報を収集する。
【００２３】
また、ログ収集部１１は、図３に示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ・戻り値（データ転送サイズ  or  エラーコード・差出アドレス）」などの情報を収集する。
【００２４】
ログ収集部１１は、図２および図３に示した情報を、性能分析装置１０のデータベースに格納する。図２および図３に示した情報を適宜、システムコールログと表記する。
【００２５】
抽出部１２は、各ログ収集部１１が集めたシステムコールログを基にして、異なるマシンが実行したシステムコールのシステムコールログを関連付け、クライアント要求毎にデータの流れをトレースしたトレース情報を生成する。
【００２６】
図４は、前提となる抽出部の処理の一例を示す図である。図４に示す例では、クライアントＡは、スレッドＡ１を実行し、サーバＢは、スレッドＢ１およびスレッドＢ２を実行し、サーバＣは、スレッドＣ１を実行する。例えば、あるシステムコールログを関連付けることで、要求Ｘおよび要求Ｙのトレース情報が生成される。
【００２７】
例えば、要求Ｘに対して、下記の（１ａ）〜（５ａ）の処理が実行される。（１ａ）スレッドＡ１は、サーバＢに要求を行う。（２ａ）スレッドＢ２は、要求Ｙを呼出す。（３ａ）スレッドＢ１は、ファイルＦ１の読み出しを行う。（４ａ）スレッドＢ１は、ファイルＦ２の書込を行う。（５ａ）スレッドＡ１は、サーバＢからの応答を受ける。上記の（１ａ）〜（５ａ）により、要求Ｘに要した時間は、Ｔｘとなる。
【００２８】
例えば、要求Ｙに対して、下記の（１ｂ）〜（２ｂ）の処理が実行される。（１ｂ）スレッドＢ２は、サーバＣに要求を行う。（２ｂ）スレッドＢ２は、サーバＣから応答を受ける。上記の（１ｂ）〜（２ｂ）により、要求Ｙに要した時間は、Ｔｙとなる。
【００２９】
特定部１３は、抽出部１２が生成したトレース情報を基にして、性能が劣化したクライアント要求を抽出する。例えば、要求を行ってから応答を受けるまでの時間が所定時間以上となるクライアント要求を、性能が劣化したクライアント要求とする。特定部１３は、性能が劣化したクライアント要求を処理するために実行した、システムコールを性能劣化被疑要因として特定する。特定部１３は、特定したシステムコールの発生時間、対象リソース、性能情報、呼出場所を通知する。
【００３０】
次に、図１に示した前提となる大規模分散処理システム２０および性能分析装置１０の問題点について説明する。上記のように、性能分析装置１０は、システムコールログを収集することで、性能劣化被疑要因となるシステムコールを特定することは可能であるが、システムコールの発行箇所を正確に特定できない場合があった。これについて、図５を用いて説明する。
【００３１】
図５は、前提となる大規模分散処理システムおよび性能分析装置の問題点を説明する図である。
【００３２】
図５に示す例では、メモリ上に、ユーザスレッドのスタック６と、カーネルのスタック７が存在する。例えば、スタック６は、サブルーチン０〜２のローカル領域、ＩＰ［１］〜ＩＰ［３］、ＦＰ［１］、ＦＰ［２］等を有する。スタック７は、システムコールのローカル領域、ＳＰ［０］、ＩＰ［０］等を有する。なお、プログラムコード（図示略）もメモリ上に格納されているものとする。
【００３３】
ＩＰ（Instruction  Pointer）は、プログラムコードが格納されたメモリ上のアドレスを示す情報である。ＳＰ（Stack  Pointer）は、例えば、スタック６の先頭アドレスを示す情報である。ＦＰ（Frame  Pointer）は、サブルーチンを実行した後の戻り先となるアドレス等を示す情報である。
【００３４】
図５を用いて、ログ収集部１１が、（１ｃ）〜（７ｃ）に示す処理を順に実行して、プログラムの呼出履歴５を生成する過程を説明する。プログラムの呼出履歴５は、図２に示したプログラムの呼出履歴に対応する。例えば、呼出履歴５は、プログラム名と相対ＩＰとを対応付ける。相対ＩＰは、ＩＰによって特定されるプログラムのアドレスを基準とした、ＩＰのアドレスを示す。
【００３５】
（１ｃ）ログ収集部１１は、カーネルのスタック７に含まれる、システムコールの終了後にユーザスレッドが継続するための実行位置ＩＰ［０］と、ＳＰ［０］等の情報を取得する。（２ｃ）ログ収集部１１は、呼出履歴５に（１ｃ）で取得したＩＰ［０］の情報を登録する。例えば、ログ収集部１１は、プログラム名「ライブラリＡ」、ライブラリＡの開始アドレスを基準とするＩＰ［０］の相対アドレスを登録する。
【００３６】
（３ｃ）ログ収集部１１は、システムコール呼出直後のＳＰ［０］等から、ＦＰ［０］を実行マシンの種別毎に異なる定数式で算出する。（４ｃ）ログ収集部１１は、ＦＰ［０］からＩＰ［１］を定数式で取得し、呼出履歴５にＩＰ［１］の情報を登録する。例えば、ログ収集部１１は、プログラム名「ライブラリＡ」、ライブラリＡの開始アドレスを基準とするＩＰ［１］の相対アドレスを登録する。
【００３７】
（５ｃ）ログ収集部１１は、ＦＰ［０］からＦＰ［１］を定数式で取得する。（６ｃ）ログ収集部１１は、ＦＰ［１］からＩＰ［２］を取得し、呼出履歴５にＩＰ［２］の情報を登録する。例えば、ログ収集部１１は、プログラム名「ライブラリＡ」、ライブラリＡの開始アドレスを基準とするＩＰ［２］の相対アドレスを登録する。
【００３８】
（７ｃ）ログ収集部１１は、ＦＰ［１］からＦＰ［２］を取得するが、例えば、サブルーチン１がＦＰ［２］を格納していなかった場合に、下記（７ｃ−１）、（７ｃ−２）のように呼出履歴５に正しい情報を追加することができない。例えば、実行不可能な実行位置または実際とは異なる実行位置を誤って利用してしまう。なお、各サブルーチンがＦＰを格納するか否かは、コンパイル時に各種のパラメータによって決められる。例えば、プログラム等が最適化を有効化して作成された場合には、サブルーチンはＦＰを格納しない。
【００３９】
（７ｃ−１）ＦＰ［２］の示すアドレスがスタック６の領域外を指している場合、ログ収集部１１は、実際にはＩＰ［３］があるのにＩＰ［３］の情報を呼出履歴５に追加することができない。（７ｃ−２）ＦＰ［２］が指すアドレスがスタック６の領域内を指している場合には、呼出履歴５に偽のＦＰ［３］が追加されてしまう。
【００４０】
図５を用いて説明したように、前提となる抽出部１２は、呼出履歴５を正確に生成出来ていないため、かかる呼出履歴５を用いても、システムコールの発生箇所を正確に特定することができない。
【００４１】
また、前提となる大規模分散処理システム２０および性能分析装置１０は、マシン・ネットワーク等の性能・負荷情報に応じて性能劣化を引き起こす箇所が変化するという課題にも対応できていない。
【００４２】
次に、本実施形態に係る大規模分散処理システムおよび性能分析装置について説明する。図６は、本実施形態に係る大規模分散処理システムおよび性能分析装置の一例を示す図である。
【００４３】
図６に示すように、性能分析装置１００は、ネットワーク（図示略）を介して、大規模分散システム２００と接続される。性能分析装置１００は、大規模分散処理システム２００の性能分析を行い、性能劣化の原因となっている箇所を特定する。ネットワークは、例えば、ＬＡＮやＷＡＮなどに対応する。
【００４４】
大規模分散処理システム２００は、多数のサーバを有し、各サーバ上で自律的に分散処理を実行するシステムである。例えば、大規模分散システム２００は、ユーザに対して種々のサービスを提供するアプリケーションに係る各処理を多数のサーバで分散して処理する。
【００４５】
大規模分散処理システム２００においては、システム内の各サーバにログ収集部が配置される。図１に示す例では、ログ収集部１１０ａ，１１０ｂ，１１０ｃを示す。ログ収集部１１０ａ，１１０ｂ，１１０ｃをまとめて、適宜、ログ収集部１１０と表記する。
【００４６】
ログ収集部１１０は、ＯＳ・カーネル内のシステムコール呼出の開始直前と終了直後に、性能劣化箇所の抽出に利用する情報を抽出する処理部である。例えば、ログ収集部１１０は、図２に示したシステムコールの呼出し直前の情報および図３に示したシステムコールの呼出し直後の情報を収集する。ログ収集部１１０は、図２および図３に示した情報を、性能分析装置１００のデータベースに格納する。
【００４７】
以下において、ログ収集部１１０の処理の一例について説明する。ログ収集部１１０は、初期化時に大規模分散システム２００を構成するスレッドのファイルへの読み書き・ネットワークへの送受信等に関するシステムコールがＯＳ内で実行される際に、所定のログが残るようにＯＳ・カーネル内のコードを書き換える。書き換えられたコードは、書き換えられる前のシステムコールの呼出完了後に、以下に説明するように、プログラムの呼出履歴を取得し、システムコールログを生成する。
【００４８】
ログ収集部１１０は、初期化時に、プロセスが実行されるマシン上で起動しているユーザプロセスを走査し、一定割合以上のプロセスが利用しているライブラリを検索する。例えば、ログ収集部１１０は、概ね半数以上のプロセスが利用しているライブラリを検索する。ログ収集部１１０は、検索したライブラリのフレーム情報を、利用プロセス数の多いものから順にメモリ上にロードする。フレーム情報は、プログラムの実行位置を示すＩＰの範囲と、該ＩＰに対応するＦＰの位置とを対応付けた情報である。ＦＰの位置を、適宜、フレーム位置コードと表記する。なお、ログ収集部１１０は、上記のように事前にフレーム情報を読み出す処理を必ずしも実行しなくても良く、仮に実行しなくても性能に影響を及ぼすことはない。例えば、ログ収集部１１０が、フレーム情報をロードする処理（後述する）への影響がほとんど無く、事前にフレーム情報を読み出さなくて良い。
【００４９】
ログ収集部１１０が書き換えたコード（以下、ログ収集部１１０）は、システムコールを呼び出したユーザスレッドが、システムコールの完了後に復帰する際の命令位置ＩＰと、スタックの位置ＳＰとの値を取得する。
【００５０】
ログ収集部１１０は、ＩＰ［ｉ］が示すメモリ上にロードされているプログラム・ライブラリ・カーネルが提供するコードを検索する。ログ収集部１１０は、プログラム・ライブラリが検索された場合には、ＩＰ［ｉ］の情報を呼出履歴に追加する。但し、ログ収集部１１０は、ＩＰ［ｉ］が示すコードがカーネルによって提供されるコードである場合には、ＩＰ［ｉ］の情報を呼出履歴に追加する。
【００５１】
図７は、呼出履歴のデータ構造の一例を示す図である。図７に示すように、この呼出履歴は、プログラム識別子、プログラムパス、相対ＩＰを対応付ける。プログラム識別子は、同名で内容が異なるプログラムを区別するための情報である。プログラムパスは、例えば、プログラムのフルパスに対応する情報である。相対ＩＰは、プログラムの開始位置を基点とした、ＩＰ［ｉ］の相対アドレスに対応する。
【００５２】
ログ収集部１１０は、プログラムパスのチェックサム等を算出したものを、プログラム識別に設定する。
【００５３】
ログ収集部１１０は、ユーザプロセスのメモリ空間からＩＰ［ｉ］を含むメモリ領域を検索し、領域にマップされたファイルのパスを取得したものを、呼出履歴のプログラムパスに設定する。
【００５４】
ログ収集部１１０は、ＩＰ［ｉ］に対応するプログラムの開始位置と、ＩＰ［ｉ］が格納された位置とを比較して、相対ＩＰを特定し、呼出履歴の相対ＩＰに設定する。
【００５５】
ここで、図８を用いて、ログ収集部１１０が呼出履歴を生成する処理の一例について説明する。図８は、ログ収集部が呼出履歴を生成する処理を説明するための図である。ログ収集部１１０は、初期化時に、一定割合以上のプロセスが利用しているライブラリ等のフレーム情報をメモリ上にロードする。
【００５６】
図８に示す例では、ログ収集部１１０は、フレーム情報５０ａ，５０ｂ，５０ｃをメモリ上にロードする。フレーム情報５０ａは、カーネル提供コードに対応するフレーム情報である。フレーム情報５０ｂは、ライブラリＣに対応するフレーム情報である。フレーム情報５０ｃは、プログラムＰに対応する。フレーム情報５０ａ，５０ｂ，５０ｃをまとめて、適宜、フレーム情報５０と表記する。なお、スタック６０は、ユーザスレッドのスタックを示し、スタック７０は、カーネルのスタックに対応する。
【００５７】
ここでは一例として、ログ収集部１１０が、（１ｄ）〜（４ｄ）、（１ｅ）〜（４ｅ）、（１ｆ）〜（４ｆ）、（１ｇ）〜（４ｇ）に示す処理を順に実行して、プログラムの呼出履歴を生成する過程について説明する。
【００５８】
（１ｄ）ログ収集部１１０は、カーネルのスタック７０に含まれる、システムコール終了後のユーザスレッドが継続するための実行位置ＩＰ［０］と、ＳＰ［０］の情報を取得する。（２ｄ）ログ収集部１１０は、ＩＰ［０］とフレーム情報５０のＩＰの範囲とを比較して、該当するフレーム位置コードを取得する。図８に示す例では、ＩＰ［０］を含む実行コードの提供元がカーネル提供のコード５０ａである。このため、ログ収集部１１０は、ＩＰ［０］の情報を呼出履歴に登録しない。
【００５９】
（３ｄ）ログ収集部１１０は、ＳＰ［０］とフレーム位置コードとを基にして、ＦＰ［０］を取得する。（４ｄ）ログ収集部１１０は、ＦＰ［０］からＩＰ［１］を定数式で特定する。
【００６０】
（１ｅ）ログ収集部１１０は、ＩＰ［１］を取得する。（２ｅ）ログ収集部１１０は、ＩＰ［１］とフレーム情報５０のＩＰの範囲とを比較して、該当するフレーム位置コードを取得する。図８に示す例では、ＩＰ［１］を含む実コードの提供先がライブラリＣである。このため、ログ収集部１１０は、ＩＰ［１］から特定されるプログラム識別子、プログラムパス、相対ＩＰを、呼出履歴に登録する。
【００６１】
（３ｅ）ログ収集部１１０は、レジスタＢＰとフレーム位置コードとを基にして、ＦＰ［１］を取得する。レジスタＢＰは、所定の値を格納するレジスタである。（４ｅ）ログ収集部１１０は、ＦＰ［１］からＩＰ［２］を定数式で特定する。
【００６２】
（１ｆ）ログ収集部１１０は、ＩＰ［２］を取得する。（２ｆ）ログ収集部１１０は、ＩＰ［２］とフレーム情報５０のＩＰの範囲とを比較して、該当するフレーム位置コードを取得する。図８に示す例では、ＩＰ［２］を含む実コードがライブラリＣである。このため、ログ収集部１１０は、ＩＰ［２］から特定されるプログラム識別子、プログラムパス、相対ＩＰを、呼出履歴に登録する。
【００６３】
（３ｆ）ログ収集部１１０は、ＳＰ［０］とフレーム位置コードとを基にして、ＦＰ［２］を取得する。（４ｆ）ログ収集部１１０は、ＦＰ［２］からＩＰ［３］を定数式で特定する。
【００６４】
（１ｇ）ログ収集部１１０は、ＩＰ［３］を取得する。（２ｇ）ログ収集部１１０は、ＩＰ［３］とフレーム情報５０のＩＰの範囲とを比較して、該当するフレーム位置コードを取得する。図８に示す例では、ＩＰ［３］を含む実コードの提供先がプログラムＰである。このため、ログ収集部１１０は、ＩＰ［３］から特定されるプログラム識別子、プログラムパス、相対ＩＰを、呼出履歴に登録する。
【００６５】
（３ｇ）ログ収集部１１０は、フレーム位置コードとレジスタＢＰとを基にして、ＦＰ［３］を取得する。（４ｇ）ログ収集部１１０は、ＦＰ［３］からＩＰ［４］を定数式で特定する。
【００６６】
ログ収集部１１０は、上記処理を繰り返し実行することで、呼出履歴を生成する。なお、ログ収集部１１０は、Ｆ［ｉ］からＰ［ｉ＋１］を取得し、このＰ［ｉ＋１］に対応するフレーム情報５０が、メモリ上にロードされていない場合には、ワーカースレッドなどを用いて該当するフレーム情報５０をロードする。
【００６７】
なお、ワーカースレッドなどを用いて該当するフレーム情報５０をロードした場合、フレーム情報は補正されないが、呼出履歴は利用されないため問題はない。理由は下記の通りである。例えば、呼出履歴を利用するのは、該当するシステムコールの性能劣化が確定したときである。また、フレーム情報５０をロードする処理は、トレース開始後に初めてプログラム・ライブラリが実行された直後から長くても数秒だけであり、ここの改善による効果は初期化処理が速くなるだけであり、改善すべき性能劣化箇所にはなり得ない。
【００６８】
図６の説明に戻る。ログ収集部１１０は、性能分析装置１００に格納する前に、読み出したシステムコールログに自身が配置されたサーバを一意に特定するための識別子を付与する。さらに、ログ収集部１１０は、システムコールの呼出し直前及び直後でそれぞれ生成されたシステムコールログ同士を関連付ける。
【００６９】
具体的には、ログ収集部１１０は、システムコールの呼出し直後のシステムコールログ「ＬL」を性能分析装置１００に格納する際に、既に格納済みのシステムコールログのうち、所定の条件を満たすシステムコールログ「ＬE」がある場合には、システムコールログ「ＬL」を用いてシステムコールログ「ＬE」の未定部分を上書きする。例えば、ログ収集部１１０は、下記の条件を全て満たすシステムコールログ「ＬE」が格納済みである場合には、システムコールログ「ＬL」を用いてシステムコールログ「ＬE」の未定部分を上書きする。
【００７０】
ＬE［スレッドＩＤ］＝ＬL［スレッドＩＤ］
ＬE［システムコール］＝ＬL［システムコール］
ＬE［終了時刻］が未定
ＬE［開始時刻］＜＝ＬL［現在時刻］
ＬE［開始時刻］−ＬL［現在時刻］が最小
【００７１】
すなわち、ログ収集部１１０は、スレッドＩＤ及びシステムコールが同一であり、かつ、現在時刻が開始時刻よりも後で、かつ、開始時刻から現在時刻までの期間が最小で、終了時刻が未定であるシステムコールログ「ＬE」がある場合に上書きを実行する。ここで、上記したシステムコールログがない場合には、ログ収集部１１０は、システムコールログ「ＬL」を性能分析装置１００のデータベースに追加格納する。
【００７２】
性能分析装置１００は、図６に示すように、ログ蓄積部１３０と、抽出部１４０と、特定部１５０とを有する。ログ蓄積部１３０は、ログ収集部１１０によってシステムコールログが格納されたり、抽出部１４０による処理結果を記憶したりするデータベースを有し、所定のデータ構造でログを蓄積する。データベースは、例えば、ハードディスク、光ディスクなどの記憶装置、または、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子であり、性能分析装置１００によって実行される各種プログラムなどを記憶する。
【００７３】
例えば、ログ蓄積部１３０は、ファイル読み出しのシステムコールログを記憶する記憶領域であるファイル読み出しログ、ファイル書き込みのシステムコールログを記憶する記憶領域であるファイル書き込みログ、ネットワーク送信のシステムコールログを記憶する記憶領域であるネットワーク送信ログ及びネットワーク受信のシステムコールログを記憶する記憶領域であるネットワーク受信ログを備えたデータベースを有する。
【００７４】
図９は、本実施形態に係るログ蓄積部によって蓄積されるシステムコールログのデータ構造の一例を示す図である。例えば、ログ蓄積部１３０は、図９に示すように、ネットワーク送信のシステムコールログに、「開始時刻・終了時刻」と、「サーバ名・プロセス名・プロセスＩＤ・スレッドＩＤ」と、「ＦＤ」と、「差出アドレス」と、「宛先アドレス」と、「ソケット種別（ｓｔｒｅａｍ／ｄａｔａｇｒａｍ等）」と、「要求データサイズ」と、「応答データサイズ・エラーコード」と、「サブルーチンの呼び出し履歴」とを含ませて、ネットワーク送信ログに蓄積する。同様に、ログ蓄積部１３０は、ネットワーク受信のシステムコールログ、ファイル読み出しのシステムコールログ及びファイル書き込みのシステムコールログについて、それぞれ図９に示す情報を含ませて、それぞれの記憶領域に蓄積する。
【００７５】
また、データベースは、後述する抽出部１４０によってファイルの読み書きのシステムコールログが集約されたシステムコール集約ログを記憶する記憶領域であるシステムコール集約ログ及びネットワーク送信のシステムコールログとネットワーク受信ログとが連結されたネットワーク連結ログを記憶する記憶領域であるネットワーク送受信ログを備えたデータベースを有する。
【００７６】
図１０は、本実施形態に係るログ蓄積部によって蓄積されるシステムコール集約ログのデータ構造の一例を示す図である。例えば、ログ蓄積部１３０は、図１０に示すように、システムコール集約ログに、「各システムコールログの識別子」と、「シーケンス番号」と、「シーケンスの順番」とを含ませて蓄積する。
【００７７】
図１１は、本実施形態に係るログ蓄積部によって蓄積されるネットワーク送受信ログのデータ構造の一例を示す図である。例えば、ログ蓄積部１３０は、図１１に示すように、ネットワーク連結ログに、「要求開始時刻」と、「応答終了時刻」と、「要求アドレス」と、「応答アドレス」と、「ソケット種別（ｓｔｒｅａｍ／ｄａｔａｇｒａｍ等）」と、「集約ログの一覧」を含ませて、ネットワーク送受信ログに蓄積する。
【００７８】
図６の説明に戻る。抽出部１４０は、ログ蓄積部１３０によって蓄積されたシステムコールログを処理単位ごとに関連付け、処理ごとの処理時間を抽出する。具体的には、抽出部１４０は、大規模分散処理システムにおける処理を構成する最小単位であるスレッドごとにシステムコールログを集約することで、処理ごとの処理時間を抽出する。ここで、抽出部１４０は、自身のメモリに作業領域を作成して、作成した作業領域上で処理を実行する。
【００７９】
図１２は、本実施形態に係る抽出部によって作成される作業領域の第１の例を模式的に示す図である。例えば、抽出部１４０は、図１２に示すように、ネットワーク送信のシステムコールログを集約させる作業領域であるネットワーク送信集約ログ、ネットワーク受信のシステムコールログを集約させる作業領域であるネットワーク受信集約ログ、ファイル読み出しのシステムコールログを集約させる作業領域であるファイル読み出し集約ログ、ファイル書き込みのシステムコールログを集約させる作業領域であるファイル書き込み集約ログを有する作業領域を作成する。各作業領域には、図１２に示すように、それぞれ集約する際に用いられる情報を保管する領域が存在する。
【００８０】
図１３は、本実施形態に係る抽出部によって作成される作業領域の第２の例を模式的に示す図である。例えば、抽出部１４０は、図１３に示すように、ネットワーク連結ログを生成する際の作業領域も作成する。なお、ネットワーク連結ログの生成については後述する。以下、抽出部１４０による処理の詳細について説明する。
【００８１】
抽出部１４０は、まず、図１２に示す作業領域を作成すると、ログ蓄積部１３０のデータベースによって蓄積されたネットワーク送信のすべてのシステムコールログを取得して、ネットワーク送信集約ログに保管する。同様に、抽出部１４０は、ネットワーク受信のすべてのシステムコールログ、ファイル読み出しのすべてのシステムコールログ、ファイル書き込みのすべてのシステムコールログを取得して、ネットワーク受信集約ログ、ファイル読み出し集約ログ、ファイル書き込み集約ログにそれぞれ保管する。
【００８２】
そして、抽出部１４０は、スレッドＩＤごとに、ＦＤと、システムコール種別（ファイルの読み込み、ファイルの書き込み、ネットワーク受信及びネットワーク送信）と、差出／宛先アドレスが連続している複数のシステムコールログを、一つのログに集約する。図１４は、本実施形態に係る抽出部による第１の処理の一例を模式的に示す図である。図１４においては、ネットワーク受信のシステムコールログを集約する例について示す。
【００８３】
例えば、抽出部１４０は、図１４の上側の図に示すように、スレッドＩＤが「１０」で連続し、ＦＤが「１００」で連続し、差出アドレスが「１９２．１６８．１０．１  ８０」で連続し、宛先アドレスが「１９２．１６８．１０．２  １２３５８」で連続している４つのシステムコールログ（識別子：１５３４〜１５３７）を１つのログに集約する。すなわち、抽出部１４０は、図１４の下側の図に示すように、４つのシステムコールログを１つのシステムコール集約ログに集約する。
【００８４】
ここで、抽出部１４０は、集約後のログ情報として、「開始時刻」を集約されたシステムコールログのうち、もっとも古い値とし、「終了時刻」を集約されたシステムコールログのうち、もっとも新しい値とし、「応答データサイズ」を集約されたシステムコールログの合計値とする。すなわち、図１４の下側の図に示すように、抽出部１４０は、システムコール集約ログの「開始時間」を、４つのシステムコールデータのうち一番古い「１１：１２：０１．１２３４５」とし、「終了時間」を、４つのシステムコールデータのうち一番新しい「１１：１２：０１．１２５８９」とし、応答データサイズを「４０９６」とする。
【００８５】
ここで、抽出部１４０は、待ちが発生したシステムコール間のシステムコールログを関連付けることで、連続してあるスレッドで実行されるべきであった処理がＯＳ内の待ちにより他のスレッドで実行されたシステムコールログを関連付ける。具体的には、抽出部１４０は、データ送受信が即座にできないシステムコールの後に発生した、サーバ、システムコール種別、ＦＤ、差出／宛先アドレスが全て一致する直近のシステムコールログを集約する。これにより、システムコール呼出し時に、データ送受信が即座にできない（ＰＯＳＩＸでのエラーコードがＥＡＧＡＩＮ又はＥＷＯＵＬＤＢＬＯＣＫ）エラーが発生した後に、ｓｅｌｅｃｔ／ｐｏｌｌでデータ準備が完了待ちを経て再試行する場合にも対応することが出来る。
【００８６】
図１５は、本実施形態に係る抽出部による第２の処理の一例を模式的に示す図である。例えば、抽出部１４０は、図１５に示すように、エラーコード「ＥＡＧＡＩＮ」が発生した上側のシステムコールログと、下側のシステムコールログとを比較して、サーバ、システムコール種別、ＦＤ、差出／宛先アドレスが全て一致する直近のシステムコールログであることを判定する。このことから、抽出部１４０は、図１５の下側の図に示すように、２つのシステムコールログを１つのシステムコール集約ログに集約する。
【００８７】
さらに、抽出部１４０は、サーバ間のネットワーク通信を結合するため、差出／宛先アドレスが同一で、開始時間、終了時間が重複しているネットワーク受信のシステムコール集約ログと、ネットワーク送信のシステムコール集約ログとを関連付ける。ここで、抽出部１４０は、図１３に示す作業領域を用いて処理を実行する。図１６は、本実施形態に係る抽出部による第３の処理の一例を模式的に示す図である。
【００８８】
例えば、抽出部１４０は、図１６の上側に示すネットワーク送信集約ログとネットワーク受信集約ログとを比較して、それぞれのテーブルの上側にある２つのシステムコール集約ログが、差出／宛先アドレスが同一であり、開始時刻から終了時刻までの間に、重複している時間帯があることから、図１６の中段のテーブルの上側に示すように、２つのシステムコール集約ログをネットワーク連結ログとして集約する。同様に、抽出部１４０は、図１６の上側に示すそれぞれのテーブルの下側にある２つのシステムコール集約ログについても、図１６の中段のテーブルの下側に示すように、ネットワーク連結ログとして集約する。
【００８９】
ここで、抽出部１４０は、ネットワーク連結ログにおいて、要求アドレスと応答アドレスが反転しているもののうち、時間差が近接している２つのネットワーク連結ログを関連付ける。例えば、図１６の中段のテーブルに示す２つのネットワーク連結ログが、要求アドレスと応答アドレスとが反転しており、時間差が近接していることから、抽出部１４０は、図１６の下側の図に示すように、２つのネットワーク連結ログを集約する。
【００９０】
さらに、抽出部１４０は、ネットワーク経由で他のスレッドから受信した要求に応えるために、ネットワーク経由で送受信した要求及び回答と、自スレッドが実行した処理とを関連付ける。具体的には、抽出部１４０は、受信した要求を処理するために実行されたシステムログを結合する。
【００９１】
より具体的には、抽出部１４０は、スレッドＩＤごとに、ネットワーク受信集約ログ「ＬR」の開始時刻の後、同一スレッドＩＤのネットワーク受信集約ログ、または図１６にて説明した処理により連結したネットワーク送受信集約ログのいずれかが開始されるまでの間に開始されたすべてのネットワーク受信集約ログ、ネットワーク送信集約ログ、ファイル読み出し集約ログ、ファイル書き込み集約ログのログ識別子を、図１２に示す作業領域に保管されたネットワーク受信集約ログのログ識別子における「次に実行する集約ログの識別子一覧」の項目に追加することで、関連付けを行う。
【００９２】
図１７は、本実施形態に係る抽出部による第３の処理の一例を模式的に示す図である。例えば、抽出部１４０は、図１７に示すように、まず、システムコールログの識別子から当該システムコールログのスレッドＩＤを取得する。そして、抽出部１４０は、「識別子：５４２３２３４５」のネットワーク受信集約ログの「次に実行する集約ログの識別子一覧」にファイル読み込み集約ログの「識別子：５４２３２３５７」を追加する。同様に、抽出部１４０は、その他のネットワーク受信集約ログにファイル読み込み集約ログを関連付ける。
【００９３】
上述したように、抽出部１４０は、システムコールログを処理ごとに関連付ける。そして、抽出部１４０は、関連付けたシステムコール集約ログや、ネットワーク送受信ログをログ蓄積部１３０のデータベースに格納する。
【００９４】
図６の説明に戻る。特定部１５０は、抽出部１４０によって処理ごとに整理されたシステムコール集約ログや、ネットワーク送受信ログに基づいて、遅延が生じている処理を抽出し、性能劣化の原因となっている各システムコールを特定する。そして、特定部１５０は、性能劣化の原因となっている各システムコールに対応する呼出履歴を集計し、性能劣化の要因となる呼出箇所を特定する。
【００９５】
まず、特定部１５０が、性能劣化の原因となっているシステムコールを特定する処理について説明する。性能劣化の原因となっているシステムコールを適宜、被疑システムコールと表記する。
【００９６】
例えば、特定部１５０は、ネットワーク送受信ログから、宛先ポート毎に平均スループット（送受信データサイズ÷処理時間）を算出した統計情報を生成する。そして、特定部１５０は、生成した統計情報において、平均スループットが予め定められた条件を満たしている宛先ポートのログの一覧Ｌを抽出する。
【００９７】
ここで、予め定められた条件の例として、「スループット値が閾値であるＰ(＝１〜１０程度)パーセンタイル値を満たさないログの一覧Ｌを抽出する。なお、条件を満たすログが見つからない場合にはＰの値を増加し、反対にログ一覧Ｌに抽出されたログに対応するユニークな宛先ポート数が予め設定した値以上の場合にはＰの値を減少して再試行する」などがある。
【００９８】
そして、特定部１５０は、Ｌを処理するために行った、システムコール集約ログ（他プロセスへの要求、ファイルの読み書き処理）の中で、処理時間について、自身を処理するために行ったシステムコール集約ログの処理時間を除き、処理時間の値が最も長いシステムコール集約ログＢを抽出する。そして、特定部１５０は、抽出したシステムコール集約ログＢを性能劣化要因の被疑システムコールであると決定する。さらに、特定部１５０は、システムコール集約ログＢに紐づくシステムコールログの全てのプログラム名、プログラム内のサブルーチン一覧、呼出履歴等を抽出する。
【００９９】
次に、被疑システムコールの呼出履歴を基にして、性能劣化の原因となる呼出箇所を特定する処理について説明する。図１８は、特定部の処理の概要を説明するための図である。例えば、ある疑似システムコールの呼出履歴に、Ｎｏ．１〜Ｎｏ．６までの呼出箇所が存在するものとする。特定部１５０は、他の疑似システムコールの呼出履歴と、性能劣化していないシステムコールの呼出履歴を参照し、Ｎｏ．１〜Ｎｏ．６までの呼出箇所と同一の呼出箇所を含む呼出履歴のシステムコールの数と、Ｎｏ．１〜Ｎｏ．６までの呼出箇所と同一の呼出箇所を含む呼出履歴の疑似システムコールの数を集計する。そして、各Ｎｏ．１〜Ｎｏ．６の呼出箇所について、全システムコール数中の、疑似システムコール数の割合を算出する。
【０１００】
図１８に示す例では、Ｎｏ．１の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ａとなる。Ｎｏ．２の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ｂとなる。Ｎｏ．３の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ｃとなる。Ｎｏ．４の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ｄとなる。Ｎｏ．５の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ｅとなる。Ｎｏ．６の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、８０Ｆとなる。
【０１０１】
特定部１５０は、各呼出箇所のうち、全システムコール数中の、疑似システムコール数の割合が最大の呼出箇所を、性能劣化に影響した実行位置として抽出する。図１８に示す例では、Ｎｏ．４の呼出箇所が、全システムコール数中の、疑似システムコール数の割合が最大の呼出箇所となる。このため、特定部１５０は、Ｎｏ．４の呼出箇所を、性能劣化に影響した実行位置として抽出する。特定部１５０は、Ｎｏ．４の呼出箇所によって特定される実行位置から、該当するプログラムのデバック情報を参照し、サブルーチン名、シースコードの位置などを特定する。
【０１０２】
次に、特定部１５０の処理を具体的に説明する。なお、説明の便宜上、各システムコールをｉｏと表記する。各システムコールｉｏの呼出履歴をｈ［ｉｏ］と表記する。各呼出履歴ｈ［ｉｏ］に含まれる呼出箇所の数をＮｐ［ｈ［ｉｏ］］と表記する。各呼出履歴ｈ［ｉｏ］に含まれる呼出箇所をｐ［ｈ［ｉｏ］］［ｉ］（ｉ＝０、１、・・・、Ｎｐ［ｈ［ｉｏ］］−１）とする。
【０１０３】
特定部１５０は、全てのシステムコール（被疑システムコールではないシステムコールも含む）の呼出履歴から、重複を排除したものの一覧ＨＡｌｌを取得する。一覧ＨＡｌｌは、例えば式（１）によって定義される。例えば、「呼出履歴ｈａ、ｈｂが重複」しているとは、Ｎｐ［ｈａ］＝Ｎｐ［ｈｂ］、かつ全てのｉ＝０〜Ｎｐ［ｈａ］に対してｐ［ｈａ］［ｉ］＝ｐ［ｈｂ］［ｉ］が成り立つ場合を示す。
【０１０４】
一覧ＨＡｌｌ＝ｕｎｉｑｕｅ（｛ｉｏ∈＜全てのシステムコール＞）｜∀ｈ［ｉｏ］｝）・・・（１）
【０１０５】
特定部１５０は、一覧ＨＡｌｌの各呼出履歴のうち、被疑システムコールが含まれているものの一覧ＨＬＥＳＳＥＲを取得する。一覧ＨＬＥＳＳＥＲは、例えば、式（２）によって定義される。
【０１０６】
ＨＬＥＳＳＥＲ＝ｕｎｉｑｕｅ（｛ｉｏ∈＜被疑システムコール＞）｜∀ｈ［ｉｏ］｝）・・・（２）
【０１０７】
特定部１５０は、被疑システムコールに含まれる呼出箇所Ｐ毎に、ＨＡｌｌ、ＨＬＥＳＳＥＲから、呼出箇所Ｐを含むものの数をそれぞれＮＡｌｌ［Ｐ］、ＮＬＥＳＳＥＲ［Ｐ］を抽出する。呼出箇所Ｐは、式（３）によって定義される。ＮＡｌｌ［Ｐ］は、式（４）によって定義される。ＮＬＥＳＳＥＲ［Ｐ］は、式（５）によって定義される。
【０１０８】
呼出箇所Ｐ＝｛ｈ∈ＨＬＥＳＳＥＲ｜ｉ＝０〜Ｎｐ［ｈａ］−１｜∀ｐ［ｈ］［ｉ］｝・・・（３）
【０１０９】
ＮＡｌｌ［Ｐ］＝ｃｏｕｎｔ（｛ｈ：ｈ∈ＨＡｌｌ∧Ｐ∧ｐ［ｈ［ｉｏ］［ｉ］｝・・・（４）
【０１１０】
ＮＬＥＳＳＥＲ［Ｐ］＝ｃｏｕｎｔ（｛ｈ：ｈ∈ＨＬＥＳＳＥＲ∧Ｐ∧ｐ［ｈ［ｉｏ］［ｉ］｝・・・（５）
【０１１１】
特定部１５０は、呼出箇所毎の性能劣化状況Ｑ［Ｐ］を算出する。性能劣化状況Ｑ［Ｐ］は、式（６）によって表される。
【０１１２】
性能劣化状況Ｑ［Ｐ］＝ＨＬＥＳＳＥＲ［Ｐ］／ＨＡｌｌ［Ｐ］・・・（６）
【０１１３】
特定部１５０は、Ｑ［Ｐ］の値が最大の呼出箇所Ｐ（ｍ）を抽出する。特定部１５０は、呼出箇所Ｐ（ｍ）が複数ある場合には、最もシステムコールに近い呼出箇所を抽出する。例えば、特定部１５０は、システムコールを実行してから最初によばれた方の呼出箇所を抽出する。なお、特定部１５０は、｛ｍｉｎ（ｉ）：Ｐ（ｍ）∈ｐ［ｈ］［ｉ］∧ｈ∈ＨＬＥＳＳＥＲ｝の平均値が最も小さい呼出箇所Ｐ（ｍ）を抽出してもよい。特定部１５０が抽出した呼出箇所Ｐ（ｍ）が、性能劣化の実行位置に対応する。
【０１１４】
特定部１５０は、性能劣化の実行位置から、プログラム内外に存在するデバック情報、シンボル情報等を用いて、サブルーチン名、ソースコードの位置を特定する。例えば、デバック情報では、サブルーチン名やソースコードと実行位置とが対応付けられているものとする。
【０１１５】
次に、本実施形態に係る性能分析装置１００による処理手順について、図１９を用いて説明する。図１９は、本実施形態に係る性能分析装置による処理手順を示すフローチャートである。図１９に示すように、ログ収集部１１０は、ファイルへの読み書き及びネットワークへの送受信に関するシステムコールがＯＳ内で実行される際に、所望のログを収集することができるように、ＯＳカーネルのバイナリーコードを上書きする（ステップＳ１０１）。
【０１１６】
システムコールが実行されると（ステップＳ１０２，Ｙｅｓ）、ログ収集部１１０は、システムコールの呼出し直前及び直後の情報を収集して、システムコールログを生成して、擬似ファイルに格納する（ステップＳ１０３）。その後、ログ収集部１１０は、疑似ファイルからシステムコールログを読み出し、性能分析装置１００に送信する（ステップＳ１０４）。なお、システムコールが実行されない場合には（ステップＳ１０２，Ｎｏ）、ステップＳ１０２に再度移行し、ログの収集は待機状態となる。
【０１１７】
ログ蓄積部１３０は、ログ収集部１１０からシステムコールログを取得すると、取得したシステムコールログをシステムコールの種別に応じてデータベースに格納する（ステップＳ１０５）。その後、抽出部１４０は、システムコールログを処理単位で関連付ける（ステップＳ１０６）。そして、特定部１５０は、処理ごとに、処理に要した時間を算出し（ステップＳ１０７）、算出した時間に基づいて、被疑システムコールを特定する（ステップＳ１０８）。特定部１５０は、被疑システムコールの呼出履歴を基にして、性能が劣化している箇所を特定する（ステップＳ１０９）。
【０１１８】
次に、ログ収集部１１０が、呼出履歴を生成する処理手順について、図２０を用いて説明する。図２０は、呼出履歴を生成する処理手順を示すフローチャートである。図２０に示すように、ログ収集部１１０は、システムコールを呼び出したスレッドは、ユーザスレッドであるか否かを判定する（ステップＳ２０１）。
【０１１９】
ログ収集部１１０は、システムコールを呼び出したスレッドがカーネルスレッドである場合には（ステップＳ２０１，Ｎｏ）、処理を終了する。一方、ログ収集部１１０は、システムコールを呼び出したスレッドがユーザスレッドの場合には（ステップＳ２０１，Ｙｅｓ）、システムコールを呼び出したユーザスレッドのＩＰ、ＳＰを取得する（ステップＳ２０２）。
【０１２０】
ログ収集部１１０は、ＩＰを含む実行コードの提供元が、プログラム・ライブラリであるか否かを判定する（ステップＳ２０３）。ログ収集部１１０は、ＩＰを含む実行コードの提供元が、プログラム・ライブラリの場合には（ステップＳ２０３，Ｙｅｓ）、呼出履歴にＩＰの情報を登録し（ステップＳ２０４）、ステップＳ２０５に移行する。
【０１２１】
一方、ログ収集部１１０は、ＩＰを含む実行コードの提供元が、プログラム・ライブラリではない場合には（ステップＳ２０３，Ｎｏ）、ＩＰを含む実行コードの提供元が、カーネル提供のコードであるか否かを判定する（ステップＳ２０５）。
【０１２２】
ログ収集部１１０は、ＩＰを含む実行コードの提供元が、カーネル提供のコードではない場合には（ステップＳ２０５，Ｎｏ）、処理を終了する。一方、ログ収集部１１０は、ＩＰを含む実行コードの提供元が、カーネル提供のコードの場合には（ステップＳ２０５，Ｙｅｓ）、ＩＰに該当するフレーム情報がメモリにロード済みであるか否かを判定する（ステップＳ２０６）。
【０１２３】
ログ収集部１１０は、ＩＰに該当するフレーム情報がメモリにロード済みである場合には（ステップＳ２０６，Ｙｅｓ）、フレーム情報を用いて、次の呼出元のＩＰを取得し（ステップＳ２０７）、ステップＳ２０３に移行する。
【０１２４】
一方、ログ収集部１１０は、ＩＰに該当するフレーム情報がメモリにロード済みではない場合には（ステップＳ２０６，Ｎｏ）、ＩＰに該当するフレーム情報がメモリに未ロードであるか否かを判定する（ステップＳ２０８）。
【０１２５】
ログ収集部１１０は、ＩＰに該当するフレーム情報がメモリに未ロードである場合には（ステップＳ２０８，Ｙｅｓ）、ワーカースレッド等に、フレーム情報のロードを依頼し（ステップＳ２０９）、処理を終了する。一方、ログ収集部１１０は、ＩＰに該当するフレーム情報がロード中である場合や、存在しない場合には（ステップＳ２０８，Ｎｏ）、処理を終了する。
【０１２６】
次に、本実施形態に係る性能分析装置１００の効果について説明する。性能分析装置１００は、大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報、呼出履歴情報を取得し、処理履歴情報を基にして、性能劣化の原因となっているシステムコールを特定する。そして、性能分析装置１００は、性能劣化の原因となっているシステムコールに応じて実行されたプログラムの呼出履歴を基にして、性能劣化に関連するプログラムの実行位置を特定する。このため、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができる。
【０１２７】
また、性能分析装置１００は、一定割合以上のプロセスが利用しているライブラリのフレーム情報をメモリ上にロードしておき、係るフレーム情報を利用して、呼出履歴を生成する。このため、コンパイラのコンパイル結果に依存せず、呼出履歴を正確に生成することができる。
【０１２８】
また、性能分析装置１００は、システムコールに応じて実行されたプログラムのＩＰに対応するフレーム情報がメモリ上に読み出されていない場合には、呼出元に対応するフレーム情報をメモリ上にロードする。このため、該当するフレーム情報が予めメモリ上に存在しなくても、呼出履歴を正確に生成することができる。
【０１２９】
なお、上記実施形態ではシステムコールログの一例として、ネットワーク送信ログ、ネットワーク受信ログ、ファイル読み出しログ、ファイル書き込むログを用いて説明したが、これに限定されるものではない。例えば、大規模分散システム２００の主用途が、クライアントからの要求に応えるものではない場合、ネットワーク送信ログ、ネットワーク受信ログは必須の情報にはならない。
【０１３０】
また、本実施形態では一例として、ログ収集部１１０と、性能分析装置１００のログ蓄積部１３０、抽出部１４０、特定部１５０を別々に配置したが、例えば、ログ収集部１１０と、ログ蓄積部１３０と、抽出部１４０と、特定部１５０とを一体の装置としてもよい。
【０１３１】
上記実施形態で説明した性能分析装置１００は、あらかじめ用意されたプログラムをコンピュータで実行することで実現することもできる。そこで、以下では、図６に示した性能分析装置１００と同様の機能を実現する可視化プログラムを実行するコンピュータの一例を説明する。
【０１３２】
図２１は、本実施形態に係る性能分析プログラムを実行するコンピュータ１０００を示す図である。図２１に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ（Central  Processing  Unit）１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【０１３３】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【０１３４】
ここで、図２１に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ（Operating  System）１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。本実施形態に係る性能分析プログラムは、例えば、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０９０に記憶される。具体的には、上記実施例で説明したログ収集部１１０と同様の情報処理を実行するログ収集ステップと、ログ収集部１１０と同様の情報処理を実行するログ収集ステップと、ログ蓄積部１３０と同様の情報処理を実行するログ蓄積ステップと、抽出部１４０と同様の情報処理を実行する抽出ステップと、特定部１５０と同様の情報処理を実行する特定ステップとが記述されたプログラムモジュールが、ハードディスクドライブ１０９０に記憶される。
【０１３５】
また、上記実施例で説明したデータベースに記憶されるデータのように、性能分析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュールやプログラムデータを必要に応じてＲＡＭ１０１２に読み出して、ログ収集ステップと、ログ蓄積ステップと、抽出ステップと、特定ステップとを実行する。
【０１３６】
なお、性能分析プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、情報送受信プログラムに係るプログラムモジュールやプログラムデータは、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【０１３７】
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０１３８】
１０，１００    性能分析装置
１１ａ，１１ｂ，１１ｃ，１１０ａ，１１０ｂ，１１０ｃ  ログ収集部
１２，１４０    抽出部
１３，１５０    特定部
２０，２００    大規模分散処理システム
１３０    ログ蓄積部
【図１】
2014109975.tif 000003
【図２】
2014109975.tif 000004
【図３】
2014109975.tif 000005
【図４】
2014109975.tif 000006
【図５】
2014109975.tif 000007
【図６】
2014109975.tif 000008
【図７】
2014109975.tif 000009
【図８】
2014109975.tif 000010
【図９】
2014109975.tif 000011
【図１０】
2014109975.tif 000012
【図１１】
2014109975.tif 000013
【図１２】
2014109975.tif 000014
【図１３】
2014109975.tif 000015
【図１４】
2014109975.tif 000016
【図１５】
2014109975.tif 000017
【図１６】
2014109975.tif 000018
【図１７】
2014109975.tif 000019
【図１８】
2014109975.tif 000020
【図１９】
2014109975.tif 000021
【図２０】
2014109975.tif 000022
【図２１】
2014109975.tif 000023