(57)【特許請求の範囲】
【請求項１】
大規模分散処理システムにおいて、システムコールに応じて実行されたプロセス間通信及びファイルの読み書きにおけるスレッドごとのログを取得する取得部と、
前記取得部によって取得されたスレッドごとのログにおいて、単一の処理を構成するスレッド群のログ群を抽出し、当該ログ群に含まれるログそれぞれに記載された開始時間のうち最も早い時間から、前記ログ群に含まれるログそれぞれに記載された終了時間のうち最も遅い時間までを前記処理の開始から終了までに要した時間として抽出する抽出部と、
前記抽出部によって抽出された時間に基づいて遅延している処理を抽出し、当該抽出した処理に関わるデータの入出力が実行された箇所を特定する特定部と、
を備えたことを特徴とする性能分析装置。
【請求項２】
前記抽出部は、前記システムコールの実行時にエラーが発生した場合に、前記スレッドごとのログに記載されたサーバ情報、前記プロセス間通信又は前記ファイルの読み書きの種別、前記システムコールのパラメータ、データの送受信先がすべて一致し、かつ、発生時間が近似する複数のスレッドを、前記単一の処理を構成するスレッド群とし、さらに、前記大規模分散処理システムにおけるサーバ間の通信に対応してスレッド群間を関連付けることを特徴とする請求項１に記載の性能分析装置。
【請求項３】
前記抽出部は、他のスレッドから受信した要求に対して応答を示す、前記他のスレッドが構成する処理とは異なる処理を構成するスレッドと、前記他のスレッドとを関連付けることを特徴とする請求項１又は２に記載の性能分析装置。
【請求項４】
大規模分散処理システムの性能を分析する性能分析装置によって実行される性能分析方法であって、
前記大規模分散処理システムにおいて、システムコールに応じて実行されたプロセス間通信及びファイルの読み書きにおけるスレッドごとのログを取得する取得工程と、
前記取得工程によって取得されたスレッドごとのログにおいて、単一の処理を構成するスレッド群のログ群を抽出し、当該ログ群に含まれるログそれぞれに記載された開始時間のうち最も早い時間から、前記ログ群に含まれるログそれぞれに記載された終了時間のうち最も遅い時間までを前記処理の開始から終了までに要した時間として抽出する抽出工程と、
前記抽出工程によって抽出された時間に基づいて遅延している処理を抽出し、当該抽出した処理に関わるデータの入出力が実行された箇所を特定する特定工程と、
を含んだことを特徴とする性能分析方法。
【請求項５】
大規模分散処理システムの性能を分析する性能分析装置によって実行される性能分析プログラムであって、
前記大規模分散処理システムにおいて、システムコールに応じて実行されたプロセス間通信及びファイルの読み書きにおけるスレッドごとのログを取得する取得ステップと、
前記取得ステップによって取得されたスレッドごとのログにおいて、単一の処理を構成するスレッド群のログ群を抽出し、当該ログ群に含まれるログそれぞれに記載された開始時間のうち最も早い時間から、前記ログ群に含まれるログそれぞれに記載された終了時間のうち最も遅い時間までを前記処理の開始から終了までに要した時間を抽出する抽出ステップと、
前記抽出ステップによって抽出された時間に基づいて遅延している処理を抽出し、当該抽出した処理に関わるデータの入出力が実行された箇所を特定する特定ステップと、
を前記性能分析装置に実行させることを特徴とする性能分析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、性能分析装置、性能分析方法及び性能分析プログラムに関する。
【背景技術】
【０００２】
近年、Ｇｏｏｇｌｅ（登録商標）の検索システムに代表される、大量のサーバを並べて、大規模データを並列分散処理する大規模分散処理技術の研究開発が盛んに行われている。この技術では、大量のサーバに個々の小規模な処理を実行させることで、全体として大規模な処理を可能としていること、データ処理性能の向上やデータ蓄積容量の増大がサーバの台数の追加で実現できることが特長である。
【０００３】
また、この技術では、大量のサーバが用いられていることから、サーバの故障に対して柔軟に対応できるようにデザインされており、例えば、サーバ故障時に当該サーバを自動的に切り離し、全体の処理に影響がないようにするフォールトトレラント（Fault  tolerant）性が実現されている。
【０００４】
一方で、大規模分散処理システムにおいては、利用／運用時にある特定の条件下でのみ一部の箇所で性能が劣化し、結果として全体の性能が劣化するサイレント故障と呼ばれるケースが発生する。サイレント故障の原因究明方法は困難であり、大規模分散処理システムのおける大きな課題の一つになっている。これに対して、サーバ・プログラム間の処理の流れをトレースして、時間の長い処理を抽出する技術が知られている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】P. Barham, A. Donnelly, R. Isaacs and R. Mortier.Using Magpie for request extraction and workload modelling.USENIX Association OSDI'04:6th Symposium on Operating Systems Design and Implementation.
【非特許文献２】Marcos K. Aguilera, Jeffrey C. Mogul, Janet L. Wiener, Patrick Reynolds and Athicha Muthitacharoen. Performance Debugging for Distributed Systems of Black Boxes.In the proceedings of the 19th ACM Symposium on Operating Systems Principles, October 2003.
【非特許文献３】R. Fonseca, G. Porter, R. H. Katz, S. Shenker, and I. Stoica.X-Trace: A Pervasive Network Tracing Framework.In Proceedings of USENIX NSDI, 2007.
【非特許文献４】B. H. Sigelman, L. A. Barroso, M. Burrows, P. Stephenson, M. Plakal, D. Beaver, S. Jaspan, and C. Shanbhag. Dapper, a Large-Scale Distributed Systems Tracing Infrastructure.In Google Technical Report dapper-2010-1, April 2010.
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、大規模分散処理システムにおいて、性能が劣化している箇所を必ずしも特定することができない場合があった。具体的には、上述した従来技術では、サーバ・プログラム間の処理の流れをトレースする際にデータが欠損してしまい、性能が劣化している箇所を必ずしも特定することができない場合があった。また、上述した従来技術では、プログラム間の通信を指定のインターフェースに適合するように変更しなければならず、性能が劣化している箇所を必ずしも特定することができない場合があった。
【０００７】
そこで、本願に係る技術は、上述した従来技術の問題に鑑みてなされたものであって、大規模分散処理システムにおいて、性能が劣化している箇所を容易に特定することを可能にする性能分析装置、性能分析方法及び性能分析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本願に係る性能分析装置は、大規模分散処理システムにおいて、システムコールに応じて実行されたデータの入出力の情報を取得する取得部と、前記取得部によって取得されたデータの入出力の情報を用いて、当該データの入出力によって実現される処理ごとに、処理の開始から終了までに要した時間を抽出する抽出部と、前記抽出部によって抽出された時間に基づいて遅延している処理を抽出し、当該抽出した処理に関わるデータの入出力が実行された箇所を特定する特定部とを備えたことを特徴とする。
【発明の効果】
【０００９】
本願に係る可視化装置は、大規模分散処理システムにおいて性能が劣化している箇所を容易に特定することを可能にする。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る性能分析装置の構成の一例を示す図である。
【図２】図２は、実施例１に係るログ収集部（Ｋ）による処理の一例を示す図である。
【図３Ａ】図３Ａは、実施例１に係るログ収集部（Ｋ）によって収集されるシステムコールの呼出し直前の情報の一例を示す図である。
【図３Ｂ】図３Ｂは、実施例１に係るログ収集部（Ｋ）によって収集されるシステムコールの呼出し直後の情報の一例を示す図である。
【図４】図４は、実施例１に係るログ収集部（Ｕ）１２０によって格納されるＩ／Ｏログの格納先を決定するための対応テーブルの一例を示す図である。
【図５】図５は、実施例１に係るログ蓄積部によって蓄積されるＩ／Ｏログのデータ構造の一例を示す図である。
【図６Ａ】図６Ａは、実施例１に係るログ蓄積部によって蓄積されるＩ／Ｏ集約ログのデータ構造の一例を示す図である。
【図６Ｂ】図６Ｂは、実施例１に係るログ蓄積部によって蓄積されるネットワーク送受信ログのデータ構造の一例を示す図である。
【図７】図７は、第１の実施例に係る抽出部によって作成される作業領域の第１の例を模式的に示す図である。
【図８】図８は、第１の実施例に係る抽出部によって作成される作業領域の第２の例を模式的に示す図である。
【図９】図９は、実施例１に係る抽出部による第１の処理の一例を模式的に示す図である。
【図１０】図１０は、実施例１に係る抽出部による第２の処理の一例を模式的に示す図である。
【図１１】図１１は、実施例１に係る抽出部による第３の処理の一例を模式的に示す図である。
【図１２】図１２は、実施例１に係る抽出部による第４の処理の一例を模式的に示す図である。
【図１３】図１３は、実施例１に係る性能分析装置による処理の手順を示すフローチャートである。
【図１４】図１４は、実施例２に係る性能分析プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、本願に係る性能分析装置、性能分析方法及び性能分析プログラムの実施例を詳細に説明する。なお、本願に係る性能分析装置、性能分析方法及び性能分析プログラムは、以下の実施例により限定されるものではない。
【実施例１】
【００１２】
［実施例１に係る性能分析装置の構成］
まず、実施例に係る性能分析装置の構成について説明する。図１は、実施例１に係る性能分析装置１００の構成の一例を示す図である。図１に示すように、性能分析装置１００は、ネットワーク（図示せず）を介して、大規模分散処理システム２００と接続され、大規模分散処理システム２００の性能分析を行い、性能劣化の原因となっている箇所を特定する。なお、ネットワークは、例えば、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）などである。
【００１３】
大規模分散処理システム２００は、図１に示すように、多数のサーバを有し、各サーバ上で自律的に分散処理を実行するシステムである。具体的には、大規模分散処理システム２００は、ユーザに対して種々のサービスを提供するアプリケーションに係る各処理を多数のサーバで分散して処理するシステムである。
【００１４】
ここで、実施例１に係る大規模分散処理システム２００においては、図１に示すように、システム内の全サーバにカーネルモード側のログ収集部であるログ収集部（Ｋ）１１０と、ユーザモード側のログ収集部であるログ収集部（Ｕ）１２０とが配置される。なお、ログ収集部（Ｋ）１１０及びログ収集部（Ｕ）１２０は、例えば、それぞれカーネルモジュールデーモンによって構成される。
【００１５】
ログ収集部（Ｋ）１１０は、大規模分散処理システム２００の初期化時に、大規模分散処理システム２００にて実行される処理を構成するプロセス（スレッド）において、ファイルへの読み書き及び大規模分散処理システム２００内のネットワークへの送受信（プロセス間通信）に関するシステムコールが実行されるごとに、所望のログを収集するようにＯＳカーネルのバイナリーコードを上書きする。
【００１６】
具体的には、ログ収集部（Ｋ）１１０は、図１に示すように、ファイルの読み出しや、書き込み、及び、ネットワークへの送受信のシステムコールの開始直前及び終了直後の時刻、スレッド情報、システムコール引数・戻り値などの情報を収集することが可能となるようにＯＳカーネルのコードを上書きする。そして、ログ収集部（Ｋ）１１０は、システムコールが実行される際に、当該システムコールの呼出し直前の情報と呼出し直後の情報とを収集して、メモリ（例えば、カーネル内のリングバッファメモリ）に格納する。
【００１７】
図２は、実施例１に係るログ収集部（Ｋ）１１０による処理の一例を示す図である。図２に示すように、例えば、ログ収集部（Ｋ）１１０は、ファイルの読み書き及びネットワークへの送受信に関するシステムコールのコードの前後に当該システムコールの呼出し直前の情報と呼出し直後の情報とを収集するためのコードを挿入する。一例を挙げると、ログ収集部（Ｋ）１１０は、図２に示すように、対象となるシステムコールのコードの直前に、他の処理命令（レジスタの退避命令）のアドレスＡ1に移動する命令のコードを上書きする。
【００１８】
ログ収集部（Ｋ）１１０は、アドレスＡ1から順に、レジスタの退避命令、システムコールの呼出直前トレース関数の呼出し命令、レジスタ復旧命令、これまでの戻りアドレス（＝Ａ4）をメモリに退避させる退避命令、新たな戻りアドレスをＡ2に変更する変更命令、アドレスＡ1への移動命令によって上書きされたコード群のコピーした命令群、アドレスＡ3に移動させる命令を未使用領域に書き込む。さらに、ログ収集部（Ｋ）１１０は、戻りアドレスＡ2から順に、レジスタの退避命令、呼出直後トレース関数の呼出し命令、レジスタの復旧命令、戻りアドレスＡ4へ移動させる命令を未使用領域に書き込む。
【００１９】
これにより、ＯＳ内のカーネルにおいては、システムコールが実行させる場合、まず、アドレスＡ1に遷移する。そして、情報を収集するためのコードを実行することによるレジスタへの影響をなくすために、レジスタの値を一旦メモリに退避させ、その後、ログ収集部（Ｋ）１１０がシステムコールの呼出し直前の情報を収集する。そして、ＯＳ内のカーネルにおいては、レジスタを復旧させて、戻りアドレスをＡ2に変更させた後、これまでシステムコールの直前にあった命令群を実行させ、対象のシステムコールの最初の命令のアドレスＡ3に遷移させてシステムコールを実行させる。システムコールが実行されると、戻りアドレスＡ2に遷移して、レジスタの退避を実行した後、ログ収集部（Ｋ）１１０がシステムコールの呼出し直後の情報を収集する。そして、レジスタを復旧させた後、アドレスＡ4への遷移が行われる。
【００２０】
ログ収集部（Ｋ）１１０は、上述したようにシステムコールの呼出し直前及び直後の情報を収集する。図３Ａは、実施例１に係るログ収集部（Ｋ）１１０によって収集されるシステムコールの呼出し直前の情報の一例を示す図である。例えば、ログ収集部（Ｋ）１１０は、図３Ａに示すように、システムコール種別が「ファイル読み出し」及び「ファイル書き込み」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（File  Descriptor(以降、ＦＤ)、要求サイズ、開始位置）」、「ＦＤが指すファイルの情報（フルパス or ソケット種別・自アドレス・対向アドレス）」、「プログラムの呼び出し履歴（スレッド情報・ユーザ空間のスタックメモリからスタックトレースを行い、呼び出し履歴を取得）」などの情報を収集する。
【００２１】
また、ログ収集部（Ｋ）１１０は、図３Ａに示すように、システムコール種別が「ネットワーク送信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（ＦＤ、要求サイズ、宛先アドレス）」、「ＦＤが指すファイルの情報（同上）」、「プログラムの呼び出し履歴（同上）」などの情報を収集する。
【００２２】
また、ログ収集部（Ｋ）１１０は、図３Ａに示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ（ＦＤ、要求サイズ）」、「ＦＤが指すファイルの情報（同上）」、「プログラムの呼び出し履歴（同上）」などの情報を収集する。
【００２３】
図３Ｂは、実施例１に係るログ収集部（Ｋ）１１０によって収集されるシステムコールの呼出し直後の情報の一例を示す図である。例えば、ログ収集部（Ｋ）１１０は、図３Ｂに示すように、システムコール種別が「ファイル読み出し」、「ファイル書き込み」及び「ネットワーク送信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ・戻り値（データ転送サイズまたはエラーコード）」などの情報を収集する。
【００２４】
また、ログ収集部（Ｋ）１１０は、図３Ｂに示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報（プロセス名・プロセスＩＤ・スレッドＩＤ）」、「システムコールのパラメータ・戻り値（データ転送サイズ or エラーコード・差出アドレス）」などの情報を収集する。
【００２５】
そして、ログ収集部（Ｋ）１１０は、収集した情報をＩ／Ｏ（Input/Output）ログとしてリングバッファメモリに格納する。ここで、ログ収集部（Ｋ）１１０は、ログ収集部（Ｕ）がカーネル内のリングバッファメモリにアクセスすることができるようにするために、リングバッファメモリ内に擬似ファイルを生成し、生成した擬似ファイルにＩ／Ｏログを格納する。例えば、ログ収集部（Ｋ）１１０は、特定のディレクトリ配下（／ｓｙｓ／ｍｏｄｕｌｅ／＜モジュール名＞など）に擬似ファイルを生成する。
【００２６】
上述した擬似ファイルは、カーネルモードとユーザモードの間でログ等のデータを共有(送受信)するためのファイルであり、名前付パイプと同様の機能を有する。カーネルモード側のログ収集部（Ｋ）１１０からユーザモード側のログ収集部（Ｕ）１２０へのログの送信は、当該擬似ファイルを経由して実施される。すなわち、カーネルモード側のログ収集部（Ｋ）１１０において当該擬似ファイルにＩ／Ｏログを書き込んだ場合、ユーザモード側からアクセス可能なカーネルモード内のリングバッファメモリにＩ／Ｏログが書き込まれることになる。また、ユーザモード側のログ収集部（Ｕ）１２０は、当該擬似ファイルの実体であるリングバッファメモリにアクセスして、カーネルモード側のログ収集部（Ｋ）１１０から書き込まれたＩ／Ｏログを取得する。
【００２７】
上述したように、ログ収集部（Ｋ）１１０は、ファイルの読み書き及びネットワーク送受信に関係するシステムコールの呼出し直前の情報と、直後の情報とを用いてＩ／Ｏログを生成して、擬似ファイルに格納する。ここで、ログ収集部（Ｋ）１１０は、予め擬似ファイルに格納されたプロセス名一覧を参照して、Ｉ／Ｏログを生成するか否かを判定する。プロセス名一覧は、Ｉ／Ｏログを生成する対象プロセスが記述されたものであり、ログ収集部（Ｋ）１１０によって対象プロセスの追加・削除が実行されるものである。例えば、ログ収集部（Ｋ）１１０は、ログ収集部（Ｕ）１２０のプロセスをプロセス名一覧から削除する。これにより、ログ収集部（Ｋ）１１０は不要なＩ／Ｏログを生成することはなく、例えば、ログ収集部（Ｕ）１２０によるＩ／Ｏログの送信とログ収集部（Ｋ）１１０によるＩ／Ｏログの生成との無限ループを抑止することができる。
【００２８】
図１に戻って、ログ収集部（Ｕ）１２０は、ログ収集部（Ｋ）１１０によって生成され、擬似ファイルに格納されたＩ／Ｏログをユーザモードに読み出し、性能分析装置１００のデータベースに格納する。図４は、実施例１に係るログ収集部（Ｕ）１２０によって格納されるＩ／Ｏログの格納先を決定するための対応テーブルの一例を示す図である。例えば、ログ収集部（Ｕ）１２０は、図４に示すように、Ｉ／Ｏログのシステムコール種別が「ファイル読み出し」であり、ＦＤが示すファイルの種別が「ソケット」である場合には、当該Ｉ／Ｏログを「ネットワーク受信ログ」に格納する。一方、Ｉ／Ｏログのシステムコール種別が「ファイル読み出し」であり、ＦＤが示すファイルの種別が「ソケット以外（ファイル、パイプ等）」である場合には、ログ収集部（Ｕ）１２０は、当該Ｉ／Ｏログを「ファイル読み出しログ」に格納する。同様に、ログ収集部（Ｕ）１２０は、図４に示す対応テーブルを参照して、Ｉ／Ｏログを性能分析装置１００のデータベースに格納する。
【００２９】
ここで、ログ収集部（Ｕ）１２０は、性能分析装置１００に格納する前に、読み出したＩ／Ｏログに自身が配置されたサーバを一意に特定するための識別子を付与する。さらに、ログ収集部（Ｕ）１２０は、システムコールの呼出し直前及び直後でそれぞれ生成されたＩ／Ｏログ同士を関連付ける。
【００３０】
具体的には、ログ収集部（Ｕ）１２０は、システムコールの呼出し直後のＩ／Ｏログ「Ｌ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）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【００７６】
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【００７７】
１００  性能分析装置
１１０  ログ収集部（Ｋ）
１２０  ログ収集部（Ｕ）
１３０  ログ蓄積部
１４０  抽出部
１５０  特定部
２００  大規模分散処理システム
【図１】
0005642725.tif 000002
【図２】
0005642725.tif 000003
【図３Ａ】
0005642725.tif 000004
【図３Ｂ】
0005642725.tif 000005
【図４】
0005642725.tif 000006
【図５】
0005642725.tif 000007
【図６Ａ】
0005642725.tif 000008
【図６Ｂ】
0005642725.tif 000009
【図７】
0005642725.tif 000010
【図８】
0005642725.tif 000011
【図９】
0005642725.tif 000012
【図１０】
0005642725.tif 000013
【図１１】
0005642725.tif 000014
【図１２】
0005642725.tif 000015
【図１３】
0005642725.tif 000016
【図１４】
0005642725.tif 000017