JP2014109975A - 性能分析装置、性能分析方法及び性能分析プログラム - Google Patents

性能分析装置、性能分析方法及び性能分析プログラム Download PDF

Info

Publication number
JP2014109975A
JP2014109975A JP2012265087A JP2012265087A JP2014109975A JP 2014109975 A JP2014109975 A JP 2014109975A JP 2012265087 A JP2012265087 A JP 2012265087A JP 2012265087 A JP2012265087 A JP 2012265087A JP 2014109975 A JP2014109975 A JP 2014109975A
Authority
JP
Japan
Prior art keywords
program
call
system call
log
information
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
JP2012265087A
Other languages
English (en)
Inventor
Shuntaro Matsumura
俊太郎 松村
Hideji Nakamura
英児 中村
Takeshi Kaji
武志 鍜治
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2012265087A priority Critical patent/JP2014109975A/ja
Publication of JP2014109975A publication Critical patent/JP2014109975A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】性能劣化を発生させるシステムコールの呼出箇所を的確に特定すること。
【解決手段】ログ蓄積部130は、大規模分散処理システム200において、システムコールに応じて実行されたシステムコールログを取得する。そして、抽出部140は、ログ蓄積部130によって取得されたシステムコールログを用いて、当該システムコールの開始から終了までに要した時間を抽出する。そして、特定部150は、抽出部140によって抽出された時間に基づいて遅延しているシステムコールを特定し、システムコールに対応する呼出履歴を基にして、性能劣化を発生させるシステムコールの呼出箇所を特定する。
【選択図】図6

Description

本発明は、性能分析装置、性能分析方法及び性能分析プログラムに関する。
近年、Google(登録商標)の検索システムに代表される、大量のサーバを並べて、大規模データを並列分散処理する大規模分散処理技術(以下、適宜、従来技術と表記する)の研究開発が盛んに行われている。この従来技術は、各サーバに小規模な処理を実行させることで、全体として大規模な処理を実行できる。また、この従来技術は、サーバの台数を追加することで、データ処理性能の向上やデータ蓄積容量を増大させることが可能である。
従来技術では、大量のサーバを用いているため、サーバの故障に対して柔軟に対応できるようにデザインされており、例えば、サーバ故障時に当該サーバを自動的に切り離し、全体の処理に影響がないようにするフォールトトレラント(Fault tolerant)性が実現されている。
一方で、大規模分散処理システムでは、特定の条件下において一部の箇所で性能が劣化し、結果として全体の性能が劣化するサイレント故障と呼ばれるケースが発生する。サイレント故障の原因究明方法は困難であり、大規模分散処理システムにおける大きな課題の一つになっている。
これに対して、非特許文献1では、大規模分散処理システムを構成するプロセス・スレッドが発行するI/Oに関わるシステムコールをロギングし、ロギングした情報を基にして各処理に要した時間を分析・比較することで、性能劣化の要因と考えられる箇所を抽出する技術が開示されている。
松村俊太郎、本庄利守、綱川光明 日本電信電話株式会社NTT情報流通プラットフォーム研究所 「大規模分散処理システムにおけるサイレント障害の原因分析方式に関する一提案」
しかしながら、上述した従来技術では、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができないという問題がある。
例えば、非特許文献1では、性能劣化の被疑箇所となるシステムコールのI/O処理におけるプロセス・入力対象のリソースを特定するだけであり、性能劣化箇所を特定することができていない。
本発明は、上記に鑑みてなされたものであって、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができる性能分析装置、性能分析方法及び性能分析プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、本願に係る性能分析装置は、収集部、抽出部、特定部を有する。収集部は、大規模分散処理システムにおいて、プロセスがI/O処理を実行するために利用するシステムコールの性能情報を収集すると共に、プログラムの実行位置と実行位置を含むサブルーチン(例えば、サブルーチンは関数に対応する)を実行した後の移動先実行位置を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールを実行したサブルーチンの呼出元を辿って行くことで、システムコール毎の実行位置を記録した呼出履歴情報を収集する。抽出部は、収集部によって収集されたシステムコールの性能情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を抽出する。特定部は、抽出部によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたシステムコールの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する。
本願に係る性能分析装置は、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することを可能にする。
図1は、前提となる大規模分散処理システムおよび性能分散装置の一例を示す図である。 図2は、システムコールの呼出し直前の情報の一例を示す図である。 図3は、システムコールの呼出し直後の情報の一例を示す図である。 図4は、前提となる抽出部の処理の一例を示す図である。 図5は、前提となる大規模分散処理システムおよび性能分析装置の問題点を説明する図である。 図6は、本実施形態に係る大規模分散処理システムおよび性能分析装置の一例を示す図である。 図7は、呼出履歴のデータ構造の一例を示す図である。 図8は、ログ収集部が呼出履歴を生成する処理を説明するための図である。 図9は、本実施形態に係るログ蓄積部によって蓄積されるシステムコールログのデータ構造の一例を示す図である。 図10は、本実施形態に係るログ蓄積部によって蓄積されるシステムコール集約ログのデータ構造の一例を示す図である。 図11は、本実施形態に係るログ蓄積部によって蓄積されるネットワーク送受信ログのデータ構造の一例を示す図である。 図12は、本実施形態に係る抽出部によって作成される作業領域の第1の例を模式的に示す図である。 図13は、本実施形態に係る抽出部によって作成される作業領域の第2の例を模式的に示す図である。 図14は、本実施形態に係る抽出部による第1の処理の一例を模式的に示す図である。 図15は、本実施形態に係る抽出部による第2の処理の一例を模式的に示す図である。 図16は、本実施形態に係る抽出部による第3の処理の一例を模式的に示す図である。 図17は、本実施形態に係る抽出部による第3の処理の一例を模式的に示す図である。 図18は、特定部の処理の概要を説明するための図である。 図19は、本実施形態に係る性能分析装置による処理手順を示すフローチャートである。 図20は、呼出履歴を生成する処理手順を示すフローチャートである。 図21は、実施例に係る性能分析プログラムを実行するコンピュータを示す図である。
以下に、本発明にかかる性能分析装置、性能分析方法及び性能分析プログラムの実施形態を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
(実施形態)
まず、本実施形態の説明を行う前に、前提となる大規模分散処理システムおよび性能分析装置について説明する。図1は、前提となる大規模分散処理システムおよび性能分散装置の一例を示す図である。
図1に示すように、性能分析装置10は、ネットワーク(図示略)を介して、大規模分散処理システム20と接続される。性能分析装置10は、大規模分散処理システム20の性能分析を行い、性能劣化の原因となっている箇所を特定する。ネットワークは、例えば、LAN(Local Area Network)やWAN(Wide Area Network)などである。
大規模分散処理システム20は、多数のサーバを有し、各サーバ上で自律的に分散処理を実行するシステムである。例えば、大規模分散処理システム20は、ユーザに対して種々のサービスを提供するアプリケーションに係る各処理を多数のサーバで分散して処理する。
大規模分散処理システム20においては、システム内の各サーバにログ収集部が配置される。図1に示す例では、ログ収集部11a,11b,11cを示す。ログ収集部11a,11b,11cをまとめて、適宜、ログ収集部11と表記する。
ログ収集部11は、OS・カーネル内のシステムコール呼出の開始直前と終了直後に、性能劣化箇所の特定に利用する情報を収集する。図2は、システムコールの呼出し直前の情報の一例を示す図である。
例えば、ログ収集部11は、図2に示すように、システムコール種別が「ファイル読み出し」及び「ファイル書き込み」の場合、「現在時刻・スレッド情報(プロセス名・プロセスID・スレッドID)」、「システムコールのパラメータ(File Descriptor(以降、FD)、要求サイズ、開始位置)」、「FDが指すファイルの情報(フルパス or ソケット種別・自アドレス・対向アドレス)」、「プログラムの呼出履歴(スレッド情報・ユーザ空間のスタックメモリからスタックトレースを行い、呼出履歴を取得)」などの情報を収集する。
ログ収集部11は、図2に示すように、システムコール種別が「ネットワーク送信」の場合、「現在時刻・スレッド情報(プロセス名・プロセスID・スレッドID)」、「システムコールのパラメータ(FD、要求サイズ、宛先アドレス)」、「FDが指すファイルの情報(同上)」、「プログラムの呼出履歴(同上)」などの情報を収集する。
ログ収集部11は、図2に示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報(プロセス名・プロセスID・スレッドID)」、「システムコールのパラメータ(FD、要求サイズ)」、「FDが指すファイルの情報(同上)」、「プログラムの呼び出し履歴(同上)」などの情報を収集する。
図3は、システムコールの呼出し直後の情報の一例を示す図である。例えば、ログ収集部11は、図3に示すように、システムコール種別が「ファイル読み出し」、「ファイル書き込み」及び「ネットワーク送信」の場合、「現在時刻・スレッド情報(プロセス名・プロセスID・スレッドID)」、「システムコールのパラメータ・戻り値(データ転送サイズまたはエラーコード)」などの情報を収集する。
また、ログ収集部11は、図3に示すように、システムコール種別が「ネットワーク受信」の場合、「現在時刻・スレッド情報(プロセス名・プロセスID・スレッドID)」、「システムコールのパラメータ・戻り値(データ転送サイズ or エラーコード・差出アドレス)」などの情報を収集する。
ログ収集部11は、図2および図3に示した情報を、性能分析装置10のデータベースに格納する。図2および図3に示した情報を適宜、システムコールログと表記する。
抽出部12は、各ログ収集部11が集めたシステムコールログを基にして、異なるマシンが実行したシステムコールのシステムコールログを関連付け、クライアント要求毎にデータの流れをトレースしたトレース情報を生成する。
図4は、前提となる抽出部の処理の一例を示す図である。図4に示す例では、クライアントAは、スレッドAを実行し、サーバBは、スレッドBおよびスレッドBを実行し、サーバCは、スレッドCを実行する。例えば、あるシステムコールログを関連付けることで、要求Xおよび要求Yのトレース情報が生成される。
例えば、要求Xに対して、下記の(1a)〜(5a)の処理が実行される。(1a)スレッドAは、サーバBに要求を行う。(2a)スレッドBは、要求Yを呼出す。(3a)スレッドBは、ファイルFの読み出しを行う。(4a)スレッドBは、ファイルF2の書込を行う。(5a)スレッドAは、サーバBからの応答を受ける。上記の(1a)〜(5a)により、要求Xに要した時間は、Txとなる。
例えば、要求Yに対して、下記の(1b)〜(2b)の処理が実行される。(1b)スレッドBは、サーバCに要求を行う。(2b)スレッドBは、サーバCから応答を受ける。上記の(1b)〜(2b)により、要求Yに要した時間は、Tyとなる。
特定部13は、抽出部12が生成したトレース情報を基にして、性能が劣化したクライアント要求を抽出する。例えば、要求を行ってから応答を受けるまでの時間が所定時間以上となるクライアント要求を、性能が劣化したクライアント要求とする。特定部13は、性能が劣化したクライアント要求を処理するために実行した、システムコールを性能劣化被疑要因として特定する。特定部13は、特定したシステムコールの発生時間、対象リソース、性能情報、呼出場所を通知する。
次に、図1に示した前提となる大規模分散処理システム20および性能分析装置10の問題点について説明する。上記のように、性能分析装置10は、システムコールログを収集することで、性能劣化被疑要因となるシステムコールを特定することは可能であるが、システムコールの発行箇所を正確に特定できない場合があった。これについて、図5を用いて説明する。
図5は、前提となる大規模分散処理システムおよび性能分析装置の問題点を説明する図である。
図5に示す例では、メモリ上に、ユーザスレッドのスタック6と、カーネルのスタック7が存在する。例えば、スタック6は、サブルーチン0〜2のローカル領域、IP[1]〜IP[3]、FP[1]、FP[2]等を有する。スタック7は、システムコールのローカル領域、SP[0]、IP[0]等を有する。なお、プログラムコード(図示略)もメモリ上に格納されているものとする。
IP(Instruction Pointer)は、プログラムコードが格納されたメモリ上のアドレスを示す情報である。SP(Stack Pointer)は、例えば、スタック6の先頭アドレスを示す情報である。FP(Frame Pointer)は、サブルーチンを実行した後の戻り先となるアドレス等を示す情報である。
図5を用いて、ログ収集部11が、(1c)〜(7c)に示す処理を順に実行して、プログラムの呼出履歴5を生成する過程を説明する。プログラムの呼出履歴5は、図2に示したプログラムの呼出履歴に対応する。例えば、呼出履歴5は、プログラム名と相対IPとを対応付ける。相対IPは、IPによって特定されるプログラムのアドレスを基準とした、IPのアドレスを示す。
(1c)ログ収集部11は、カーネルのスタック7に含まれる、システムコールの終了後にユーザスレッドが継続するための実行位置IP[0]と、SP[0]等の情報を取得する。(2c)ログ収集部11は、呼出履歴5に(1c)で取得したIP[0]の情報を登録する。例えば、ログ収集部11は、プログラム名「ライブラリA」、ライブラリAの開始アドレスを基準とするIP[0]の相対アドレスを登録する。
(3c)ログ収集部11は、システムコール呼出直後のSP[0]等から、FP[0]を実行マシンの種別毎に異なる定数式で算出する。(4c)ログ収集部11は、FP[0]からIP[1]を定数式で取得し、呼出履歴5にIP[1]の情報を登録する。例えば、ログ収集部11は、プログラム名「ライブラリA」、ライブラリAの開始アドレスを基準とするIP[1]の相対アドレスを登録する。
(5c)ログ収集部11は、FP[0]からFP[1]を定数式で取得する。(6c)ログ収集部11は、FP[1]からIP[2]を取得し、呼出履歴5にIP[2]の情報を登録する。例えば、ログ収集部11は、プログラム名「ライブラリA」、ライブラリAの開始アドレスを基準とするIP[2]の相対アドレスを登録する。
(7c)ログ収集部11は、FP[1]からFP[2]を取得するが、例えば、サブルーチン1がFP[2]を格納していなかった場合に、下記(7c−1)、(7c−2)のように呼出履歴5に正しい情報を追加することができない。例えば、実行不可能な実行位置または実際とは異なる実行位置を誤って利用してしまう。なお、各サブルーチンがFPを格納するか否かは、コンパイル時に各種のパラメータによって決められる。例えば、プログラム等が最適化を有効化して作成された場合には、サブルーチンはFPを格納しない。
(7c−1)FP[2]の示すアドレスがスタック6の領域外を指している場合、ログ収集部11は、実際にはIP[3]があるのにIP[3]の情報を呼出履歴5に追加することができない。(7c−2)FP[2]が指すアドレスがスタック6の領域内を指している場合には、呼出履歴5に偽のFP[3]が追加されてしまう。
図5を用いて説明したように、前提となる抽出部12は、呼出履歴5を正確に生成出来ていないため、かかる呼出履歴5を用いても、システムコールの発生箇所を正確に特定することができない。
また、前提となる大規模分散処理システム20および性能分析装置10は、マシン・ネットワーク等の性能・負荷情報に応じて性能劣化を引き起こす箇所が変化するという課題にも対応できていない。
次に、本実施形態に係る大規模分散処理システムおよび性能分析装置について説明する。図6は、本実施形態に係る大規模分散処理システムおよび性能分析装置の一例を示す図である。
図6に示すように、性能分析装置100は、ネットワーク(図示略)を介して、大規模分散システム200と接続される。性能分析装置100は、大規模分散処理システム200の性能分析を行い、性能劣化の原因となっている箇所を特定する。ネットワークは、例えば、LANやWANなどに対応する。
大規模分散処理システム200は、多数のサーバを有し、各サーバ上で自律的に分散処理を実行するシステムである。例えば、大規模分散システム200は、ユーザに対して種々のサービスを提供するアプリケーションに係る各処理を多数のサーバで分散して処理する。
大規模分散処理システム200においては、システム内の各サーバにログ収集部が配置される。図1に示す例では、ログ収集部110a,110b,110cを示す。ログ収集部110a,110b,110cをまとめて、適宜、ログ収集部110と表記する。
ログ収集部110は、OS・カーネル内のシステムコール呼出の開始直前と終了直後に、性能劣化箇所の抽出に利用する情報を抽出する処理部である。例えば、ログ収集部110は、図2に示したシステムコールの呼出し直前の情報および図3に示したシステムコールの呼出し直後の情報を収集する。ログ収集部110は、図2および図3に示した情報を、性能分析装置100のデータベースに格納する。
以下において、ログ収集部110の処理の一例について説明する。ログ収集部110は、初期化時に大規模分散システム200を構成するスレッドのファイルへの読み書き・ネットワークへの送受信等に関するシステムコールがOS内で実行される際に、所定のログが残るようにOS・カーネル内のコードを書き換える。書き換えられたコードは、書き換えられる前のシステムコールの呼出完了後に、以下に説明するように、プログラムの呼出履歴を取得し、システムコールログを生成する。
ログ収集部110は、初期化時に、プロセスが実行されるマシン上で起動しているユーザプロセスを走査し、一定割合以上のプロセスが利用しているライブラリを検索する。例えば、ログ収集部110は、概ね半数以上のプロセスが利用しているライブラリを検索する。ログ収集部110は、検索したライブラリのフレーム情報を、利用プロセス数の多いものから順にメモリ上にロードする。フレーム情報は、プログラムの実行位置を示すIPの範囲と、該IPに対応するFPの位置とを対応付けた情報である。FPの位置を、適宜、フレーム位置コードと表記する。なお、ログ収集部110は、上記のように事前にフレーム情報を読み出す処理を必ずしも実行しなくても良く、仮に実行しなくても性能に影響を及ぼすことはない。例えば、ログ収集部110が、フレーム情報をロードする処理(後述する)への影響がほとんど無く、事前にフレーム情報を読み出さなくて良い。
ログ収集部110が書き換えたコード(以下、ログ収集部110)は、システムコールを呼び出したユーザスレッドが、システムコールの完了後に復帰する際の命令位置IPと、スタックの位置SPとの値を取得する。
ログ収集部110は、IP[i]が示すメモリ上にロードされているプログラム・ライブラリ・カーネルが提供するコードを検索する。ログ収集部110は、プログラム・ライブラリが検索された場合には、IP[i]の情報を呼出履歴に追加する。但し、ログ収集部110は、IP[i]が示すコードがカーネルによって提供されるコードである場合には、IP[i]の情報を呼出履歴に追加する。
図7は、呼出履歴のデータ構造の一例を示す図である。図7に示すように、この呼出履歴は、プログラム識別子、プログラムパス、相対IPを対応付ける。プログラム識別子は、同名で内容が異なるプログラムを区別するための情報である。プログラムパスは、例えば、プログラムのフルパスに対応する情報である。相対IPは、プログラムの開始位置を基点とした、IP[i]の相対アドレスに対応する。
ログ収集部110は、プログラムパスのチェックサム等を算出したものを、プログラム識別に設定する。
ログ収集部110は、ユーザプロセスのメモリ空間からIP[i]を含むメモリ領域を検索し、領域にマップされたファイルのパスを取得したものを、呼出履歴のプログラムパスに設定する。
ログ収集部110は、IP[i]に対応するプログラムの開始位置と、IP[i]が格納された位置とを比較して、相対IPを特定し、呼出履歴の相対IPに設定する。
ここで、図8を用いて、ログ収集部110が呼出履歴を生成する処理の一例について説明する。図8は、ログ収集部が呼出履歴を生成する処理を説明するための図である。ログ収集部110は、初期化時に、一定割合以上のプロセスが利用しているライブラリ等のフレーム情報をメモリ上にロードする。
図8に示す例では、ログ収集部110は、フレーム情報50a,50b,50cをメモリ上にロードする。フレーム情報50aは、カーネル提供コードに対応するフレーム情報である。フレーム情報50bは、ライブラリCに対応するフレーム情報である。フレーム情報50cは、プログラムPに対応する。フレーム情報50a,50b,50cをまとめて、適宜、フレーム情報50と表記する。なお、スタック60は、ユーザスレッドのスタックを示し、スタック70は、カーネルのスタックに対応する。
ここでは一例として、ログ収集部110が、(1d)〜(4d)、(1e)〜(4e)、(1f)〜(4f)、(1g)〜(4g)に示す処理を順に実行して、プログラムの呼出履歴を生成する過程について説明する。
(1d)ログ収集部110は、カーネルのスタック70に含まれる、システムコール終了後のユーザスレッドが継続するための実行位置IP[0]と、SP[0]の情報を取得する。(2d)ログ収集部110は、IP[0]とフレーム情報50のIPの範囲とを比較して、該当するフレーム位置コードを取得する。図8に示す例では、IP[0]を含む実行コードの提供元がカーネル提供のコード50aである。このため、ログ収集部110は、IP[0]の情報を呼出履歴に登録しない。
(3d)ログ収集部110は、SP[0]とフレーム位置コードとを基にして、FP[0]を取得する。(4d)ログ収集部110は、FP[0]からIP[1]を定数式で特定する。
(1e)ログ収集部110は、IP[1]を取得する。(2e)ログ収集部110は、IP[1]とフレーム情報50のIPの範囲とを比較して、該当するフレーム位置コードを取得する。図8に示す例では、IP[1]を含む実コードの提供先がライブラリCである。このため、ログ収集部110は、IP[1]から特定されるプログラム識別子、プログラムパス、相対IPを、呼出履歴に登録する。
(3e)ログ収集部110は、レジスタBPとフレーム位置コードとを基にして、FP[1]を取得する。レジスタBPは、所定の値を格納するレジスタである。(4e)ログ収集部110は、FP[1]からIP[2]を定数式で特定する。
(1f)ログ収集部110は、IP[2]を取得する。(2f)ログ収集部110は、IP[2]とフレーム情報50のIPの範囲とを比較して、該当するフレーム位置コードを取得する。図8に示す例では、IP[2]を含む実コードがライブラリCである。このため、ログ収集部110は、IP[2]から特定されるプログラム識別子、プログラムパス、相対IPを、呼出履歴に登録する。
(3f)ログ収集部110は、SP[0]とフレーム位置コードとを基にして、FP[2]を取得する。(4f)ログ収集部110は、FP[2]からIP[3]を定数式で特定する。
(1g)ログ収集部110は、IP[3]を取得する。(2g)ログ収集部110は、IP[3]とフレーム情報50のIPの範囲とを比較して、該当するフレーム位置コードを取得する。図8に示す例では、IP[3]を含む実コードの提供先がプログラムPである。このため、ログ収集部110は、IP[3]から特定されるプログラム識別子、プログラムパス、相対IPを、呼出履歴に登録する。
(3g)ログ収集部110は、フレーム位置コードとレジスタBPとを基にして、FP[3]を取得する。(4g)ログ収集部110は、FP[3]からIP[4]を定数式で特定する。
ログ収集部110は、上記処理を繰り返し実行することで、呼出履歴を生成する。なお、ログ収集部110は、F[i]からP[i+1]を取得し、このP[i+1]に対応するフレーム情報50が、メモリ上にロードされていない場合には、ワーカースレッドなどを用いて該当するフレーム情報50をロードする。
なお、ワーカースレッドなどを用いて該当するフレーム情報50をロードした場合、フレーム情報は補正されないが、呼出履歴は利用されないため問題はない。理由は下記の通りである。例えば、呼出履歴を利用するのは、該当するシステムコールの性能劣化が確定したときである。また、フレーム情報50をロードする処理は、トレース開始後に初めてプログラム・ライブラリが実行された直後から長くても数秒だけであり、ここの改善による効果は初期化処理が速くなるだけであり、改善すべき性能劣化箇所にはなり得ない。
図6の説明に戻る。ログ収集部110は、性能分析装置100に格納する前に、読み出したシステムコールログに自身が配置されたサーバを一意に特定するための識別子を付与する。さらに、ログ収集部110は、システムコールの呼出し直前及び直後でそれぞれ生成されたシステムコールログ同士を関連付ける。
具体的には、ログ収集部110は、システムコールの呼出し直後のシステムコールログ「LL」を性能分析装置100に格納する際に、既に格納済みのシステムコールログのうち、所定の条件を満たすシステムコールログ「LE」がある場合には、システムコールログ「LL」を用いてシステムコールログ「LE」の未定部分を上書きする。例えば、ログ収集部110は、下記の条件を全て満たすシステムコールログ「LE」が格納済みである場合には、システムコールログ「LL」を用いてシステムコールログ「LE」の未定部分を上書きする。
E[スレッドID]=LL[スレッドID]
E[システムコール]=LL[システムコール]
E[終了時刻]が未定
E[開始時刻]<=LL[現在時刻]
E[開始時刻]−LL[現在時刻]が最小
すなわち、ログ収集部110は、スレッドID及びシステムコールが同一であり、かつ、現在時刻が開始時刻よりも後で、かつ、開始時刻から現在時刻までの期間が最小で、終了時刻が未定であるシステムコールログ「LE」がある場合に上書きを実行する。ここで、上記したシステムコールログがない場合には、ログ収集部110は、システムコールログ「LL」を性能分析装置100のデータベースに追加格納する。
性能分析装置100は、図6に示すように、ログ蓄積部130と、抽出部140と、特定部150とを有する。ログ蓄積部130は、ログ収集部110によってシステムコールログが格納されたり、抽出部140による処理結果を記憶したりするデータベースを有し、所定のデータ構造でログを蓄積する。データベースは、例えば、ハードディスク、光ディスクなどの記憶装置、または、RAM(Random Access Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子であり、性能分析装置100によって実行される各種プログラムなどを記憶する。
例えば、ログ蓄積部130は、ファイル読み出しのシステムコールログを記憶する記憶領域であるファイル読み出しログ、ファイル書き込みのシステムコールログを記憶する記憶領域であるファイル書き込みログ、ネットワーク送信のシステムコールログを記憶する記憶領域であるネットワーク送信ログ及びネットワーク受信のシステムコールログを記憶する記憶領域であるネットワーク受信ログを備えたデータベースを有する。
図9は、本実施形態に係るログ蓄積部によって蓄積されるシステムコールログのデータ構造の一例を示す図である。例えば、ログ蓄積部130は、図9に示すように、ネットワーク送信のシステムコールログに、「開始時刻・終了時刻」と、「サーバ名・プロセス名・プロセスID・スレッドID」と、「FD」と、「差出アドレス」と、「宛先アドレス」と、「ソケット種別(stream/datagram等)」と、「要求データサイズ」と、「応答データサイズ・エラーコード」と、「サブルーチンの呼び出し履歴」とを含ませて、ネットワーク送信ログに蓄積する。同様に、ログ蓄積部130は、ネットワーク受信のシステムコールログ、ファイル読み出しのシステムコールログ及びファイル書き込みのシステムコールログについて、それぞれ図9に示す情報を含ませて、それぞれの記憶領域に蓄積する。
また、データベースは、後述する抽出部140によってファイルの読み書きのシステムコールログが集約されたシステムコール集約ログを記憶する記憶領域であるシステムコール集約ログ及びネットワーク送信のシステムコールログとネットワーク受信ログとが連結されたネットワーク連結ログを記憶する記憶領域であるネットワーク送受信ログを備えたデータベースを有する。
図10は、本実施形態に係るログ蓄積部によって蓄積されるシステムコール集約ログのデータ構造の一例を示す図である。例えば、ログ蓄積部130は、図10に示すように、システムコール集約ログに、「各システムコールログの識別子」と、「シーケンス番号」と、「シーケンスの順番」とを含ませて蓄積する。
図11は、本実施形態に係るログ蓄積部によって蓄積されるネットワーク送受信ログのデータ構造の一例を示す図である。例えば、ログ蓄積部130は、図11に示すように、ネットワーク連結ログに、「要求開始時刻」と、「応答終了時刻」と、「要求アドレス」と、「応答アドレス」と、「ソケット種別(stream/datagram等)」と、「集約ログの一覧」を含ませて、ネットワーク送受信ログに蓄積する。
図6の説明に戻る。抽出部140は、ログ蓄積部130によって蓄積されたシステムコールログを処理単位ごとに関連付け、処理ごとの処理時間を抽出する。具体的には、抽出部140は、大規模分散処理システムにおける処理を構成する最小単位であるスレッドごとにシステムコールログを集約することで、処理ごとの処理時間を抽出する。ここで、抽出部140は、自身のメモリに作業領域を作成して、作成した作業領域上で処理を実行する。
図12は、本実施形態に係る抽出部によって作成される作業領域の第1の例を模式的に示す図である。例えば、抽出部140は、図12に示すように、ネットワーク送信のシステムコールログを集約させる作業領域であるネットワーク送信集約ログ、ネットワーク受信のシステムコールログを集約させる作業領域であるネットワーク受信集約ログ、ファイル読み出しのシステムコールログを集約させる作業領域であるファイル読み出し集約ログ、ファイル書き込みのシステムコールログを集約させる作業領域であるファイル書き込み集約ログを有する作業領域を作成する。各作業領域には、図12に示すように、それぞれ集約する際に用いられる情報を保管する領域が存在する。
図13は、本実施形態に係る抽出部によって作成される作業領域の第2の例を模式的に示す図である。例えば、抽出部140は、図13に示すように、ネットワーク連結ログを生成する際の作業領域も作成する。なお、ネットワーク連結ログの生成については後述する。以下、抽出部140による処理の詳細について説明する。
抽出部140は、まず、図12に示す作業領域を作成すると、ログ蓄積部130のデータベースによって蓄積されたネットワーク送信のすべてのシステムコールログを取得して、ネットワーク送信集約ログに保管する。同様に、抽出部140は、ネットワーク受信のすべてのシステムコールログ、ファイル読み出しのすべてのシステムコールログ、ファイル書き込みのすべてのシステムコールログを取得して、ネットワーク受信集約ログ、ファイル読み出し集約ログ、ファイル書き込み集約ログにそれぞれ保管する。
そして、抽出部140は、スレッドIDごとに、FDと、システムコール種別(ファイルの読み込み、ファイルの書き込み、ネットワーク受信及びネットワーク送信)と、差出/宛先アドレスが連続している複数のシステムコールログを、一つのログに集約する。図14は、本実施形態に係る抽出部による第1の処理の一例を模式的に示す図である。図14においては、ネットワーク受信のシステムコールログを集約する例について示す。
例えば、抽出部140は、図14の上側の図に示すように、スレッドIDが「10」で連続し、FDが「100」で連続し、差出アドレスが「192.168.10.1 80」で連続し、宛先アドレスが「192.168.10.2 12358」で連続している4つのシステムコールログ(識別子:1534〜1537)を1つのログに集約する。すなわち、抽出部140は、図14の下側の図に示すように、4つのシステムコールログを1つのシステムコール集約ログに集約する。
ここで、抽出部140は、集約後のログ情報として、「開始時刻」を集約されたシステムコールログのうち、もっとも古い値とし、「終了時刻」を集約されたシステムコールログのうち、もっとも新しい値とし、「応答データサイズ」を集約されたシステムコールログの合計値とする。すなわち、図14の下側の図に示すように、抽出部140は、システムコール集約ログの「開始時間」を、4つのシステムコールデータのうち一番古い「11:12:01.12345」とし、「終了時間」を、4つのシステムコールデータのうち一番新しい「11:12:01.12589」とし、応答データサイズを「4096」とする。
ここで、抽出部140は、待ちが発生したシステムコール間のシステムコールログを関連付けることで、連続してあるスレッドで実行されるべきであった処理がOS内の待ちにより他のスレッドで実行されたシステムコールログを関連付ける。具体的には、抽出部140は、データ送受信が即座にできないシステムコールの後に発生した、サーバ、システムコール種別、FD、差出/宛先アドレスが全て一致する直近のシステムコールログを集約する。これにより、システムコール呼出し時に、データ送受信が即座にできない(POSIXでのエラーコードがEAGAIN又はEWOULDBLOCK)エラーが発生した後に、select/pollでデータ準備が完了待ちを経て再試行する場合にも対応することが出来る。
図15は、本実施形態に係る抽出部による第2の処理の一例を模式的に示す図である。例えば、抽出部140は、図15に示すように、エラーコード「EAGAIN」が発生した上側のシステムコールログと、下側のシステムコールログとを比較して、サーバ、システムコール種別、FD、差出/宛先アドレスが全て一致する直近のシステムコールログであることを判定する。このことから、抽出部140は、図15の下側の図に示すように、2つのシステムコールログを1つのシステムコール集約ログに集約する。
さらに、抽出部140は、サーバ間のネットワーク通信を結合するため、差出/宛先アドレスが同一で、開始時間、終了時間が重複しているネットワーク受信のシステムコール集約ログと、ネットワーク送信のシステムコール集約ログとを関連付ける。ここで、抽出部140は、図13に示す作業領域を用いて処理を実行する。図16は、本実施形態に係る抽出部による第3の処理の一例を模式的に示す図である。
例えば、抽出部140は、図16の上側に示すネットワーク送信集約ログとネットワーク受信集約ログとを比較して、それぞれのテーブルの上側にある2つのシステムコール集約ログが、差出/宛先アドレスが同一であり、開始時刻から終了時刻までの間に、重複している時間帯があることから、図16の中段のテーブルの上側に示すように、2つのシステムコール集約ログをネットワーク連結ログとして集約する。同様に、抽出部140は、図16の上側に示すそれぞれのテーブルの下側にある2つのシステムコール集約ログについても、図16の中段のテーブルの下側に示すように、ネットワーク連結ログとして集約する。
ここで、抽出部140は、ネットワーク連結ログにおいて、要求アドレスと応答アドレスが反転しているもののうち、時間差が近接している2つのネットワーク連結ログを関連付ける。例えば、図16の中段のテーブルに示す2つのネットワーク連結ログが、要求アドレスと応答アドレスとが反転しており、時間差が近接していることから、抽出部140は、図16の下側の図に示すように、2つのネットワーク連結ログを集約する。
さらに、抽出部140は、ネットワーク経由で他のスレッドから受信した要求に応えるために、ネットワーク経由で送受信した要求及び回答と、自スレッドが実行した処理とを関連付ける。具体的には、抽出部140は、受信した要求を処理するために実行されたシステムログを結合する。
より具体的には、抽出部140は、スレッドIDごとに、ネットワーク受信集約ログ「LR」の開始時刻の後、同一スレッドIDのネットワーク受信集約ログ、または図16にて説明した処理により連結したネットワーク送受信集約ログのいずれかが開始されるまでの間に開始されたすべてのネットワーク受信集約ログ、ネットワーク送信集約ログ、ファイル読み出し集約ログ、ファイル書き込み集約ログのログ識別子を、図12に示す作業領域に保管されたネットワーク受信集約ログのログ識別子における「次に実行する集約ログの識別子一覧」の項目に追加することで、関連付けを行う。
図17は、本実施形態に係る抽出部による第3の処理の一例を模式的に示す図である。例えば、抽出部140は、図17に示すように、まず、システムコールログの識別子から当該システムコールログのスレッドIDを取得する。そして、抽出部140は、「識別子:54232345」のネットワーク受信集約ログの「次に実行する集約ログの識別子一覧」にファイル読み込み集約ログの「識別子:54232357」を追加する。同様に、抽出部140は、その他のネットワーク受信集約ログにファイル読み込み集約ログを関連付ける。
上述したように、抽出部140は、システムコールログを処理ごとに関連付ける。そして、抽出部140は、関連付けたシステムコール集約ログや、ネットワーク送受信ログをログ蓄積部130のデータベースに格納する。
図6の説明に戻る。特定部150は、抽出部140によって処理ごとに整理されたシステムコール集約ログや、ネットワーク送受信ログに基づいて、遅延が生じている処理を抽出し、性能劣化の原因となっている各システムコールを特定する。そして、特定部150は、性能劣化の原因となっている各システムコールに対応する呼出履歴を集計し、性能劣化の要因となる呼出箇所を特定する。
まず、特定部150が、性能劣化の原因となっているシステムコールを特定する処理について説明する。性能劣化の原因となっているシステムコールを適宜、被疑システムコールと表記する。
例えば、特定部150は、ネットワーク送受信ログから、宛先ポート毎に平均スループット(送受信データサイズ÷処理時間)を算出した統計情報を生成する。そして、特定部150は、生成した統計情報において、平均スループットが予め定められた条件を満たしている宛先ポートのログの一覧Lを抽出する。
ここで、予め定められた条件の例として、「スループット値が閾値であるP(=1〜10程度)パーセンタイル値を満たさないログの一覧Lを抽出する。なお、条件を満たすログが見つからない場合にはPの値を増加し、反対にログ一覧Lに抽出されたログに対応するユニークな宛先ポート数が予め設定した値以上の場合にはPの値を減少して再試行する」などがある。
そして、特定部150は、Lを処理するために行った、システムコール集約ログ(他プロセスへの要求、ファイルの読み書き処理)の中で、処理時間について、自身を処理するために行ったシステムコール集約ログの処理時間を除き、処理時間の値が最も長いシステムコール集約ログBを抽出する。そして、特定部150は、抽出したシステムコール集約ログBを性能劣化要因の被疑システムコールであると決定する。さらに、特定部150は、システムコール集約ログBに紐づくシステムコールログの全てのプログラム名、プログラム内のサブルーチン一覧、呼出履歴等を抽出する。
次に、被疑システムコールの呼出履歴を基にして、性能劣化の原因となる呼出箇所を特定する処理について説明する。図18は、特定部の処理の概要を説明するための図である。例えば、ある疑似システムコールの呼出履歴に、No.1〜No.6までの呼出箇所が存在するものとする。特定部150は、他の疑似システムコールの呼出履歴と、性能劣化していないシステムコールの呼出履歴を参照し、No.1〜No.6までの呼出箇所と同一の呼出箇所を含む呼出履歴のシステムコールの数と、No.1〜No.6までの呼出箇所と同一の呼出箇所を含む呼出履歴の疑似システムコールの数を集計する。そして、各No.1〜No.6の呼出箇所について、全システムコール数中の、疑似システムコール数の割合を算出する。
図18に示す例では、No.1の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Aとなる。No.2の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Bとなる。No.3の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Cとなる。No.4の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Dとなる。No.5の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Eとなる。No.6の呼出箇所について、全システムコール数中の、疑似システムコール数の割合は、80Fとなる。
特定部150は、各呼出箇所のうち、全システムコール数中の、疑似システムコール数の割合が最大の呼出箇所を、性能劣化に影響した実行位置として抽出する。図18に示す例では、No.4の呼出箇所が、全システムコール数中の、疑似システムコール数の割合が最大の呼出箇所となる。このため、特定部150は、No.4の呼出箇所を、性能劣化に影響した実行位置として抽出する。特定部150は、No.4の呼出箇所によって特定される実行位置から、該当するプログラムのデバック情報を参照し、サブルーチン名、シースコードの位置などを特定する。
次に、特定部150の処理を具体的に説明する。なお、説明の便宜上、各システムコールをioと表記する。各システムコールioの呼出履歴をh[io]と表記する。各呼出履歴h[io]に含まれる呼出箇所の数をNp[h[io]]と表記する。各呼出履歴h[io]に含まれる呼出箇所をp[h[io]][i](i=0、1、・・・、Np[h[io]]−1)とする。
特定部150は、全てのシステムコール(被疑システムコールではないシステムコールも含む)の呼出履歴から、重複を排除したものの一覧HAllを取得する。一覧HAllは、例えば式(1)によって定義される。例えば、「呼出履歴ha、hbが重複」しているとは、Np[ha]=Np[hb]、かつ全てのi=0〜Np[ha]に対してp[ha][i]=p[hb][i]が成り立つ場合を示す。
一覧HAll=unique({io∈<全てのシステムコール>)|∀h[io]})・・・(1)
特定部150は、一覧HAllの各呼出履歴のうち、被疑システムコールが含まれているものの一覧HLESSERを取得する。一覧HLESSERは、例えば、式(2)によって定義される。
LESSER=unique({io∈<被疑システムコール>)|∀h[io]})・・・(2)
特定部150は、被疑システムコールに含まれる呼出箇所P毎に、HAll、HLESSERから、呼出箇所Pを含むものの数をそれぞれNAll[P]、NLESSER[P]を抽出する。呼出箇所Pは、式(3)によって定義される。NAll[P]は、式(4)によって定義される。NLESSER[P]は、式(5)によって定義される。
呼出箇所P={h∈HLESSER|i=0〜Np[ha]−1|∀p[h][i]}・・・(3)
All[P]=count({h:h∈HAll∧P∧p[h[io][i]}・・・(4)
LESSER[P]=count({h:h∈HLESSER∧P∧p[h[io][i]}・・・(5)
特定部150は、呼出箇所毎の性能劣化状況Q[P]を算出する。性能劣化状況Q[P]は、式(6)によって表される。
性能劣化状況Q[P]=HLESSER[P]/HAll[P]・・・(6)
特定部150は、Q[P]の値が最大の呼出箇所P(m)を抽出する。特定部150は、呼出箇所P(m)が複数ある場合には、最もシステムコールに近い呼出箇所を抽出する。例えば、特定部150は、システムコールを実行してから最初によばれた方の呼出箇所を抽出する。なお、特定部150は、{min(i):P(m)∈p[h][i]∧h∈HLESSER}の平均値が最も小さい呼出箇所P(m)を抽出してもよい。特定部150が抽出した呼出箇所P(m)が、性能劣化の実行位置に対応する。
特定部150は、性能劣化の実行位置から、プログラム内外に存在するデバック情報、シンボル情報等を用いて、サブルーチン名、ソースコードの位置を特定する。例えば、デバック情報では、サブルーチン名やソースコードと実行位置とが対応付けられているものとする。
次に、本実施形態に係る性能分析装置100による処理手順について、図19を用いて説明する。図19は、本実施形態に係る性能分析装置による処理手順を示すフローチャートである。図19に示すように、ログ収集部110は、ファイルへの読み書き及びネットワークへの送受信に関するシステムコールがOS内で実行される際に、所望のログを収集することができるように、OSカーネルのバイナリーコードを上書きする(ステップS101)。
システムコールが実行されると(ステップS102,Yes)、ログ収集部110は、システムコールの呼出し直前及び直後の情報を収集して、システムコールログを生成して、擬似ファイルに格納する(ステップS103)。その後、ログ収集部110は、疑似ファイルからシステムコールログを読み出し、性能分析装置100に送信する(ステップS104)。なお、システムコールが実行されない場合には(ステップS102,No)、ステップS102に再度移行し、ログの収集は待機状態となる。
ログ蓄積部130は、ログ収集部110からシステムコールログを取得すると、取得したシステムコールログをシステムコールの種別に応じてデータベースに格納する(ステップS105)。その後、抽出部140は、システムコールログを処理単位で関連付ける(ステップS106)。そして、特定部150は、処理ごとに、処理に要した時間を算出し(ステップS107)、算出した時間に基づいて、被疑システムコールを特定する(ステップS108)。特定部150は、被疑システムコールの呼出履歴を基にして、性能が劣化している箇所を特定する(ステップS109)。
次に、ログ収集部110が、呼出履歴を生成する処理手順について、図20を用いて説明する。図20は、呼出履歴を生成する処理手順を示すフローチャートである。図20に示すように、ログ収集部110は、システムコールを呼び出したスレッドは、ユーザスレッドであるか否かを判定する(ステップS201)。
ログ収集部110は、システムコールを呼び出したスレッドがカーネルスレッドである場合には(ステップS201,No)、処理を終了する。一方、ログ収集部110は、システムコールを呼び出したスレッドがユーザスレッドの場合には(ステップS201,Yes)、システムコールを呼び出したユーザスレッドのIP、SPを取得する(ステップS202)。
ログ収集部110は、IPを含む実行コードの提供元が、プログラム・ライブラリであるか否かを判定する(ステップS203)。ログ収集部110は、IPを含む実行コードの提供元が、プログラム・ライブラリの場合には(ステップS203,Yes)、呼出履歴にIPの情報を登録し(ステップS204)、ステップS205に移行する。
一方、ログ収集部110は、IPを含む実行コードの提供元が、プログラム・ライブラリではない場合には(ステップS203,No)、IPを含む実行コードの提供元が、カーネル提供のコードであるか否かを判定する(ステップS205)。
ログ収集部110は、IPを含む実行コードの提供元が、カーネル提供のコードではない場合には(ステップS205,No)、処理を終了する。一方、ログ収集部110は、IPを含む実行コードの提供元が、カーネル提供のコードの場合には(ステップS205,Yes)、IPに該当するフレーム情報がメモリにロード済みであるか否かを判定する(ステップS206)。
ログ収集部110は、IPに該当するフレーム情報がメモリにロード済みである場合には(ステップS206,Yes)、フレーム情報を用いて、次の呼出元のIPを取得し(ステップS207)、ステップS203に移行する。
一方、ログ収集部110は、IPに該当するフレーム情報がメモリにロード済みではない場合には(ステップS206,No)、IPに該当するフレーム情報がメモリに未ロードであるか否かを判定する(ステップS208)。
ログ収集部110は、IPに該当するフレーム情報がメモリに未ロードである場合には(ステップS208,Yes)、ワーカースレッド等に、フレーム情報のロードを依頼し(ステップS209)、処理を終了する。一方、ログ収集部110は、IPに該当するフレーム情報がロード中である場合や、存在しない場合には(ステップS208,No)、処理を終了する。
次に、本実施形態に係る性能分析装置100の効果について説明する。性能分析装置100は、大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報、呼出履歴情報を取得し、処理履歴情報を基にして、性能劣化の原因となっているシステムコールを特定する。そして、性能分析装置100は、性能劣化の原因となっているシステムコールに応じて実行されたプログラムの呼出履歴を基にして、性能劣化に関連するプログラムの実行位置を特定する。このため、性能劣化を発生させるシステムコールの呼出箇所を的確に特定することができる。
また、性能分析装置100は、一定割合以上のプロセスが利用しているライブラリのフレーム情報をメモリ上にロードしておき、係るフレーム情報を利用して、呼出履歴を生成する。このため、コンパイラのコンパイル結果に依存せず、呼出履歴を正確に生成することができる。
また、性能分析装置100は、システムコールに応じて実行されたプログラムのIPに対応するフレーム情報がメモリ上に読み出されていない場合には、呼出元に対応するフレーム情報をメモリ上にロードする。このため、該当するフレーム情報が予めメモリ上に存在しなくても、呼出履歴を正確に生成することができる。
なお、上記実施形態ではシステムコールログの一例として、ネットワーク送信ログ、ネットワーク受信ログ、ファイル読み出しログ、ファイル書き込むログを用いて説明したが、これに限定されるものではない。例えば、大規模分散システム200の主用途が、クライアントからの要求に応えるものではない場合、ネットワーク送信ログ、ネットワーク受信ログは必須の情報にはならない。
また、本実施形態では一例として、ログ収集部110と、性能分析装置100のログ蓄積部130、抽出部140、特定部150を別々に配置したが、例えば、ログ収集部110と、ログ蓄積部130と、抽出部140と、特定部150とを一体の装置としてもよい。
上記実施形態で説明した性能分析装置100は、あらかじめ用意されたプログラムをコンピュータで実行することで実現することもできる。そこで、以下では、図6に示した性能分析装置100と同様の機能を実現する可視化プログラムを実行するコンピュータの一例を説明する。
図21は、本実施形態に係る性能分析プログラムを実行するコンピュータ1000を示す図である。図21に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU(Central Processing Unit)1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。ディスクドライブ1100には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1110およびキーボード1120が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1130が接続される。
ここで、図21に示すように、ハードディスクドライブ1090は、例えば、OS(Operating System)1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。本実施形態に係る性能分析プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ1090に記憶される。具体的には、上記実施例で説明したログ収集部110と同様の情報処理を実行するログ収集ステップと、ログ収集部110と同様の情報処理を実行するログ収集ステップと、ログ蓄積部130と同様の情報処理を実行するログ蓄積ステップと、抽出部140と同様の情報処理を実行する抽出ステップと、特定部150と同様の情報処理を実行する特定ステップとが記述されたプログラムモジュールが、ハードディスクドライブ1090に記憶される。
また、上記実施例で説明したデータベースに記憶されるデータのように、性能分析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ1090に記憶される。そして、CPU1020が、ハードディスクドライブ1090に記憶されたプログラムモジュールやプログラムデータを必要に応じてRAM1012に読み出して、ログ収集ステップと、ログ蓄積ステップと、抽出ステップと、特定ステップとを実行する。
なお、性能分析プログラムに係るプログラムモジュールやプログラムデータは、ハードディスクドライブ1090に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、情報送受信プログラムに係るプログラムモジュールやプログラムデータは、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
これらの実施例やその変形は、本願が開示する技術に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
10,100 性能分析装置
11a,11b,11c,110a,110b,110c ログ収集部
12,140 抽出部
13,150 特定部
20,200 大規模分散処理システム
130 ログ蓄積部

Claims (5)

  1. 大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集部と、
    前記収集部によって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出部と、
    前記抽出部によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定部と
    を備えたことを特徴とする性能分析装置。
  2. 前記特定部は、前記遅延しているシステムコールの呼出履歴情報に含まれるプログラム毎の実行位置について、前記実行位置のプログラムを実行した全てのシステムコールの数に対する、前記実行位置のプログラムを実行した前記遅延しているシステムコールの数の割合を基にして、性能劣化に関連するプログラムの実行位置を特定することを特徴とする請求項1に記載の性能分析装置。
  3. 前記収集部は、所定割合以上のプログラムが利用するプログラムのフレーム情報を予めメモリ上に読み出しておき、システムコールに応じて実行されたプログラムの呼出元に対応するフレーム情報がメモリ上に読み出されていない場合には、呼出元に対応するフレーム情報をメモリ上に読み出し、読み出したフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集することを特徴とする請求項1または2に記載の性能分析装置。
  4. 大規模分散システムの性能を分析する性能分析装置によって実行される性能分析方法であって、
    大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集工程と、
    前記収集工程によって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出工程と、
    前記抽出工程によって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定工程と
    を含んだことを特徴とする性能分析方法。
  5. 大規模分散システムの性能を分析する性能分析装置によって実行される性能分析方法であって、
    前記大規模分散処理システムにおいて、システムコールに応じて実行されたプログラムの処理履歴情報を収集すると共に、プログラムの実行位置と該プログラムを実行した後の移動先を示すフレーム位置との対応関係を示すフレーム情報を基にして、システムコールに応じて実行されたプログラムの呼出元を辿って行くことで、プログラム毎の実行位置を記録した呼出履歴情報を収集する収集ステップと、
    前記収集ステップによって収集されたプログラムの処理履歴情報を基にして、システムコール毎に、システムコールを開始してから終了するまでに要した時間を前記処理履歴情報から抽出する抽出ステップと、
    前記抽出ステップによって抽出された時間に基づいて遅延しているシステムコールを特定し、特定したシステムコールに応じて実行されたプログラムの呼出履歴情報を基にして、性能劣化に関連するプログラムの実行位置を特定する特定ステップと
    を前記性能分析装置に実行させることを特徴とする性能分析プログラム。
JP2012265087A 2012-12-04 2012-12-04 性能分析装置、性能分析方法及び性能分析プログラム Pending JP2014109975A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012265087A JP2014109975A (ja) 2012-12-04 2012-12-04 性能分析装置、性能分析方法及び性能分析プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012265087A JP2014109975A (ja) 2012-12-04 2012-12-04 性能分析装置、性能分析方法及び性能分析プログラム

Publications (1)

Publication Number Publication Date
JP2014109975A true JP2014109975A (ja) 2014-06-12

Family

ID=51030554

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012265087A Pending JP2014109975A (ja) 2012-12-04 2012-12-04 性能分析装置、性能分析方法及び性能分析プログラム

Country Status (1)

Country Link
JP (1) JP2014109975A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114092201A (zh) * 2022-01-20 2022-02-25 中国民航信息网络股份有限公司 一种数据提取与分析方法和相关装置
KR102456150B1 (ko) * 2022-01-26 2022-10-18 (주)한국소프트웨어아이엔씨 실제 환경에서 대용량 시스템에 대한 포괄적 성능평가를 수행하는 방법 및 이를 지원하는 장치

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114092201A (zh) * 2022-01-20 2022-02-25 中国民航信息网络股份有限公司 一种数据提取与分析方法和相关装置
KR102456150B1 (ko) * 2022-01-26 2022-10-18 (주)한국소프트웨어아이엔씨 실제 환경에서 대용량 시스템에 대한 포괄적 성능평가를 수행하는 방법 및 이를 지원하는 장치
WO2023146231A1 (ko) * 2022-01-26 2023-08-03 주식회사 한국소프트웨어아이엔씨 실제 환경에서 대용량 시스템에 대한 포괄적 성능평가를 수행하는 방법 및 이를 지원하는 장치

Similar Documents

Publication Publication Date Title
US9189355B1 (en) Method and system for processing a service request
US8799709B2 (en) Snapshot management method, snapshot management apparatus, and computer-readable, non-transitory medium
KR101925696B1 (ko) 대규모 데이터 스트림들의 획득, 저장, 및 소비를 위한 관리 서비스
US9590880B2 (en) Dynamic collection analysis and reporting of telemetry data
JP5684946B2 (ja) イベントの根本原因の解析を支援する方法及びシステム
WO2020087082A1 (en) Trace and span sampling and analysis for instrumented software
US11036608B2 (en) Identifying differences in resource usage across different versions of a software application
US20160224329A1 (en) Automated software configuration management
US9058330B2 (en) Verification of complex multi-application and multi-node deployments
US10657099B1 (en) Systems and methods for transformation and analysis of logfile data
CN111046011A (zh) 日志收集方法、系统、节点、电子设备及可读存储介质
US20210224102A1 (en) Characterizing operation of software applications having large number of components
Chen et al. CoFI: Consistency-guided fault injection for cloud systems
US20130111018A1 (en) Passive monitoring of virtual systems using agent-less, offline indexing
EP2424190B1 (en) Monitoring connections
US20150088825A1 (en) Virtual machine storage replication schemes
WO2013061213A1 (en) Passive monitoring of virtual systems using extensible indexing
JP2017111785A (ja) メモリー被疑部検出のための方法およびシステム
JP2010009411A (ja) 仮想化環境運用支援システム及び仮想環境運用支援プログラム
JP5642725B2 (ja) 性能分析装置、性能分析方法及び性能分析プログラム
US20090204618A1 (en) Storage system
JP2014109975A (ja) 性能分析装置、性能分析方法及び性能分析プログラム
Daoud et al. Performance analysis of distributed storage clusters based on kernel and userspace traces
CN109885505A (zh) 一种故障定位的方法、系统及相关组件
JP2023044720A (ja) クラッシュしたアプリケーションを修復するためのコンピュータ実装方法、コンピュータプログラム製品、およびリモートコンピュータサーバ(クラッシュしたプロセスのリモート修復)