(57)【要約】      （修正有）【課題】同時に発生した複数のボトルネックを見つけ易くする情報処理装置、分析プログラム及び分析方法を提供する。【解決手段】仮想分析装置２１１は、複数の仮想ノードを含む仮想化システムを実現する情報処理装置であって、ボトルネックである第１の仮想ノードを検出する検出部と、第１の仮想ノードを実現するための第１プログラムを実行する際の第１キャッシュミス数と、第１の仮想ノード以外の仮想ノードを実現するための第２プログラムを実行する際の第２キャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する特定部とを有する。【選択図】図３４
2018085674.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想ノードを含む仮想化システムを実現する情報処理装置であって、
ボトルネックである第１の仮想ノードを検出する検出部と、
前記第１の仮想ノードを実現するための第１プログラムを実行する際の第１キャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するための第２プログラムを実行する際の第２キャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する特定部と
を有する情報処理装置。
【請求項２】
前記第１キャッシュミス数は、前記第１プログラムを実行する演算装置においてカウントされ、
前記第２キャッシュミス数は、前記第２プログラムを実行する演算装置においてカウントされる
請求項１記載の情報処理装置。
【請求項３】
前記特定部は、
前記第１の仮想ノードが送信元であるパケットが連続して伝送された第１期間と、前記第１の仮想ノード以外の仮想ノードが送信元であるパケットが連続して伝送された第２期間とに基づいて、ボトルネックである第３の仮想ノードを特定する
情報処理装置。
【請求項４】
前記第１期間と前記第２期間とが交互に繰り返される場合に、前記特定部は、前記第１の仮想ノード以外の前記仮想ノードが前記ボトルネックであると判定する
請求項３記載の情報処理装置。
【請求項５】
複数の仮想ノードを含む仮想化システムを実現するコンピュータに
ボトルネックである第１の仮想ノードを検出し、
前記第１の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する
処理を実行させる分析プログラム。
【請求項６】
複数の仮想ノードを含む仮想化システムを実現するコンピュータにより実行される分析方法であって、
ボトルネックである第１の仮想ノードを検出し、
前記第１の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する
を含む分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化システムの状況を分析する技術に関する。
【背景技術】
【０００２】
複数ＣＰＵ（Central Processing Unit）のコンピュータで、複数の仮想ノードを含む仮想化システムを実現する場合、各仮想ノードに対していずれかのＣＰＵが割り当てられる。そして、割り当てられたＣＰＵでプログラムを実行することによって当該仮想ノードが実現される。また、内部的な仮想ネットワークの仕組みによって仮想ノード間の通信が行われる。
【０００３】
このような仮想化システムでも、いずれかの仮想ノードがボトルネックとなって通信効率が低下することがある。但し、物理的なネットワークの場合とは異なり、伝送レートの監視によってボトルネックを特定することはできない。
【０００４】
また、仮想化システムでは、複数の仮想ノードが同時にボトルネックとなることもある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−４７８１号公報
【特許文献２】特開２０１５−１９７７１５号公報
【特許文献３】特開２０１３−１７５０７５号公報
【特許文献４】特開２０１６−９２４８５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、一側面では、同時に発生した複数のボトルネックを見つけ易くすることである。
【課題を解決するための手段】
【０００７】
一態様に係る情報処理装置は、複数の仮想ノードを含む仮想化システムを実現する情報処理装置であって、（Ａ）ボトルネックである第１の仮想ノードを検出する検出部と、（Ｂ）第１の仮想ノードを実現するための第１プログラムを実行する際の第１キャッシュミス数と、第１の仮想ノード以外の仮想ノードを実現するための第２プログラムを実行する際の第２キャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する特定部とを有する。
【発明の効果】
【０００８】
一側面としては、同時に発生した複数のボトルネックを見つけ易くなる。
【図面の簡単な説明】
【０００９】
【図１】図１は、サーバ装置の資源例を示す図である。
【図２】図２は、サーバ装置のモジュール構成例を示す図である。
【図３】図３は、通信遅延の発生を検出する第１判定方式の概要を示す図である。
【図４】図４は、通信遅延の発生を検出する第２判定方式の概要を示す図である。
【図５】図５は、通信遅延の発生を検出する第３判定方式の概要を示す図である。
【図６】図６は、通信遅延の発生を検出する第３判定方式の概要を示す図である。
【図７】図７は、ボトルネックの第１態様を示す図である。
【図８】図８は、ボトルネックの第１態様における通信遅延テーブルを示す図である。
【図９】図９は、ボトルネックの第２態様を示す図である。
【図１０】図１０は、ボトルネックの第２態様における通信遅延テーブルを示す図である。
【図１１】図１１は、ボトルネックの第３態様を示す図である。
【図１２】図１２は、ボトルネックの第３態様における通信遅延テーブルを示す図である。
【図１３】図１３は、基礎例における仮想分析装置のモジュール構成例を示す図である。
【図１４】図１４は、サブネットワークテーブルの例を示す図である。
【図１５】図１５は、ネットワーク接続テーブルの例を示す図である。
【図１６】図１６は、コネクションテーブルの例を示す図である。
【図１７】図１７は、ログテーブルの例を示す図である。
【図１８】図１８は、メイン処理（Ａ）フローを示す図である。
【図１９】図１９は、遅延判定処理（Ａ）フローを示す図である。
【図２０】図２０は、遅延判定処理（Ｂ）フローを示す図である。
【図２１Ａ】図２１Ａは、遅延判定処理（Ｃ）フローを示す図である。
【図２１Ｂ】図２１Ｂは、遅延判定処理（Ｃ）フローを示す図である。
【図２２】図２２は、マシン検出処理フローを示す図である。
【図２３】図２３は、メイン処理（Ａ）フローを示す図である。
【図２４】図２４は、ルーター検出処理フローを示す図である。
【図２５】図２５は、ルーター検出処理フローを示す図である。
【図２６】図２６は、スイッチ検出処理フローを示す図である。
【図２７】図２７は、ボトルネックの第４態様を示す図である。
【図２８】図２８は、ボトルネックの第４態様における通信遅延テーブルを示す図である。
【図２９】図２９は、ボトルネックの第５態様を示す図である。
【図３０】図３０は、ボトルネックの第５態様における通信遅延テーブルを示す図である。
【図３１】図３１は、ボトルネックの第６態様を示す図である。
【図３２】図３２は、ＣＰＵの構成例を示す図である。
【図３３】図３３は、キャッシュミステーブルの例を示す図である。
【図３４】図３４は、実施の形態１に係る仮想分析装置のモジュール構成例を示す図である。
【図３５】図３５は、算出処理フローを示す図である。
【図３６】図３６は、メイン処理（Ｂ）フローを示す図である。
【図３７】図３７は、メイン処理（Ｂ）フローを示す図である。
【図３８】図３８は、第１ルーター特定処理（Ａ）フローを示す図である。
【図３９】図３９は、メイン処理（Ｂ）フローを示す図である。
【図４０】図４０は、メイン処理（Ｂ）フローを示す図である。
【図４１】図４１は、マシン特定処理フローを示す図である。
【図４２】図４２は、メイン処理（Ｂ）フローを示す図である。
【図４３】図４３は、第２ルーター特定処理フローを示す図である。
【図４４】図４４は、仮想ノードプログラムの実行期間を示す図である。
【図４５】図４５は、実施の形態２に係る仮想分析装置のモジュール構成例を示す図である。
【図４６】図４６は、実行期間テーブルの例を示す図である。
【図４７】図４７は、メイン処理（Ｃ）フローを示す図である。
【図４８】図４８は、実行期間判定処理フローを示す図である。
【図４９】図４９は、第１ルーター特定処理（Ｂ）フローを示す図である。
【図５０】図５０は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
［実施の形態１］
図１及び図２を用いて、本実施の形態における仮想化システムについて説明する。仮想化システムが動作するサーバ装置１０１は、図１に示すように複数のＣＰＵ、メモリ及びハードディスクなどの資源を有する。
【００１１】
図２のハイパーバイザ２０３は、これらの資源を用いて仮想化環境を提供する。仮想化システムに含まれる仮想マシン２０５ａ乃至２０５ｅと、仮想スイッチ２０７ａ及び２０７ｂと、仮想ルーター２０９とは、ハイパーバイザ２０３が制御する仮想化環境においてプログラムを動作させることによって実現される。そして、仮想マシン２０５、仮想スイッチ２０７及び仮想ルーター２０９には、一又は複数のＣＰＵが割り当てられている。以下、仮想マシン２０５、仮想スイッチ２０７及び仮想ルーター２０９を仮想ノードということがある。
【００１２】
仮想マシン２０５同士は、仮想ネットワークを介して通信を行う。仮想ネットワークは、仮想マシン２０５間を中継する仮想スイッチ２０７及び仮想ルーター２０９によって実現される。
【００１３】
例えば物理マシン同士を物理ネットワークで繋ぐシステムの場合、ボトルネックはノード間の通信路における帯域幅に起因する。従って、各通信路における伝送レートを監視することによってボトルネックの発生を検出することができる。一方、仮想化システムの場合には、仮想的にデータ伝送を行うので物理ネットワークにおける帯域幅のような固定の制限は存在しない。但し、ＣＰＵの負荷が高まると仮想的なデータ伝送の処理が滞ることがある。本実施の形態では、通信パケット（以下、パケットという。）を分析することによって仮想システムにおけるボトルネックの発生を捉える。
【００１４】
仮想分析装置２１１は、仮想スイッチ２０７のミラーリング機能を利用して、仮想マシン２０５間で伝送されるパケットをキャプチャする。そして、仮想分析装置２１１は、キャプチャしたパケットに基づいて仮想ネットワークのネットワーク品質を調べる。
【００１５】
具体的には、仮想分析装置２１１は、キャプチャしたパケットを分析して当該仮想ノード間において通信遅延が生じているか否かを判定する。そして、仮想分析装置２１１は、その判定結果を基礎としてボトルネックの発生を検出し、ボトルネックとなっている仮想ノードを特定する。ボトルネックとなっている仮想ノードが特定されれば、余裕のあるＣＰＵを当該仮想ノードに追加的に割り当てることによってボトルネックの解消を図ることができる。尚、仮想分析装置２１１も、ハイパーバイザ２０３が制御する仮想化環境においてプログラムを動作させることによって実現される。
【００１６】
以下、仮想マシン２０５間の通信遅延を検出する判定方式の例を３つ示す。図３に、通信遅延の発生を検出する第１判定方式の概要を示す。第１の判定方式は、ＲＴＴ（Round-Trip Time）を利用する。つまり、第１の判定方式では、仮想スイッチ２０７におけるＴＣＰ（Transmission Control Protocol）のデータ転送パケットのキャプチャ時刻と、このデータ転送パケットに対する確認信号パケット（以下、ＡＣＫパケット）のキャプチャ時刻とを測定し、両時刻の差を算出する。この差分時間が閾値を超えていれば、通信遅延が生じていると判定する。この差分時間が閾値を超えていなければ、通信遅延が生じていないと判定する。
【００１７】
図４に、通信遅延の発生を検出する第２判定方式の概要を示す。第２の判定方式は、Ｌ７（ＯＳＩ（Open Systems Interconnection）参照モデルのアプリケーション層）におけるリクエストメッセージ及びレスポンスメッセージによる通信が行われることを前提とする。第２の判定方式では、リクエストメッセージのキャプチャ時刻と、このリクエストメッセージに対するレスポンスメッセージのキャプチャ時刻とを測定し、両時刻（レスポンス時間）の差を算出する。この差分時間が閾値を超えていれば、通信遅延が生じていると判定する。この差分時間が閾値を超えていなければ、通信遅延が生じていないと判定する。
【００１８】
図５及び図６に、通信遅延の発生を検出する第３判定方式の概要を示す。第３の判定方式は、パケットロスに基づいて通信遅延の検出を行う。パケットロスは、例えばＴＣＰパケットの連続性を確認することによって判明する。図５に示すように、同じコネクションにおけるデータ転送パケットのシーケンス番号に連続性がない場合に、仮想スイッチ２０７に至る前にデータ転送パケットがロスしたと判定する。また、図６に示すように、ＡＣＫパケットのシーケンス番号が、先にキャプチャした反対方向のデータ転送パケットに対する応答に相当しない場合に、仮想スイッチ２０７が中継した後にデータ転送パケットがロスしたと判定する。データ転送パケットがロスした場合には、通信遅延が発生しているものとする。
【００１９】
続いて、仮想化システムにおけるボトルネックの態様について説明する。図７に、ボトルネックの第１態様を示す。第１態様では、仮想マシン２０５がボトルネックである。この例では、仮想マシン２０５ａ（ＩＰアドレス：１０．１．１．１）がボトルネックであるものとする。ボトルネックである仮想マシン２０５ａが送信元又は宛先となる仮想通信路において遅延が発生する。この例では、仮想マシン２０５ａと仮想マシン２０５ｂ（ＩＰアドレス：１０．１．１．２）との仮想通信路（以下、第１通信路という。）において、遅延が発生する。以下、遅延が発生する仮想通信路を破線で示す。他に、仮想マシン２０５ａと仮想マシン２０５ｃ（ＩＰアドレス：１０．１．１．３）との仮想通信路（以下、第３通信路という。）でも、遅延が発生する。
【００２０】
一方、仮想マシン２０５ｂと仮想マシン２０５ｃとの仮想通信路（以下、第２通信路という。）において、遅延は発生しない。以下、遅延が発生しない仮想通信路を実線で示す。他に、仮想マシン２０５ｃと仮想マシン２０５ｄ（ＩＰアドレス：１．１．１．１）との仮想通信路（以下、第４通信路という。）でも、遅延は発生しない。また、仮想マシン２０５ｄと仮想マシン２０５ｅ（ＩＰアドレス：１．１．１．２）との仮想通信路（以下、第５通信路という。）でも、遅延は発生しない。
【００２１】
尚、仮想スイッチ２０７及び当該仮想スイッチ２０７に接続する仮想マシン２０５のグループをサブネットワークという。この例で、仮想スイッチ２０７ａ及び当該仮想スイッチ２０７ａに接続する仮想マシン２０５ａ乃至２０５ｃのグループを第１サブネットワークという。また、仮想スイッチ２０７ｂ及び当該仮想スイッチ２０７ｂに接続する仮想マシン２０５ｄ及び２０５ｅのグループを第２サブネットワークという。
【００２２】
仮想分析装置２１１は、通信遅延テーブルを用いて通信遅延に関する状況を管理する。図８に、ボトルネックの第１態様における通信遅延テーブルを示す。この例における通信遅延テーブルは、送信元と宛先に相当する仮想マシン２０５の組合せに対応するレコード（以下、組合せレコードという。）を有している。組合せレコードは、第１エンドのＩＰアドレスが格納されるフィールドと、第２エンドのＩＰアドレスが格納されるフィールドと通信遅延に関する状況が設定されるフィールドとを有している。
【００２３】
第１エンドのＩＰアドレスは、仮想通信路の一端に相当する仮想マシン２０５のＩＰアドレスである。第２エンドのＩＰアドレスは、仮想通信路の他端に相当する仮想マシン２０５のＩＰアドレスである。通信遅延に関する状況は、「発生」又は「発生せず」のいずれかである。
【００２４】
図示した１番目の組合せレコードは、仮想マシン２０５ａと仮想マシン２０５ｂとの組合せに対応し、第１通信路に相当する。図示した２番目の組合せレコードは、仮想マシン２０５ａと仮想マシン２０５ｃとの組合せに対応し、第２通信路に相当する。図示した３番目の組合せレコードは、仮想マシン２０５ｂと仮想マシン２０５ｃとの組合せに対応し、第３通信路に相当する。図示した４番目の組合せレコードは、仮想マシン２０５ｃと仮想マシン２０５ｄとの組合せに対応し、第４通信路に相当する。図示した５番目の組合せレコードは、仮想マシン２０５ｄと仮想マシン２０５ｅとの組合せに対応し、第５通信路に相当する。
【００２５】
仮想マシン２０５ａがボトルネックであれば、１番目及び２番目の組合せレコードにおける通信遅延に関する状況は「発生」である。他方３番目乃至５番目の組合せレコードにおける通信遅延に関する状況は「発生せず」である。
【００２６】
図９に、ボトルネックの第２態様を示す。第２態様では、仮想スイッチ２０７がボトルネックである。この例では、仮想スイッチ２０７ａがボトルネックであるものとする。ボトルネックである仮想スイッチ２０７ａが中継する仮想通信路において遅延が発生する。この例では、第１通信路乃至第４通信路において、遅延が発生する。一方、ボトルネックである仮想スイッチ２０７ａが中継しない通信では、遅延が発生しない。この例では、第５通信路において、遅延は発生しない。
【００２７】
図１０に、ボトルネックの第２態様における通信遅延テーブルを示す。仮想スイッチ２０７ａがボトルネックであれば、１番目乃至４番目の組合せレコードにおける通信遅延に関する状況は「発生」である。他方５番目の組合せレコードにおける通信遅延に関する状況は「発生せず」である。
【００２８】
図１１に、ボトルネックの第３態様を示す。第３態様では、仮想ルーター２０９がボトルネックである。ボトルネックである仮想ルーター２０９が中継する仮想通信路において遅延が発生する。この例では、第４通信路において、遅延が発生する。一方、ボトルネックである仮想ルーター２０９が中継しない通信では、遅延が発生しない。この例では、第１通信路乃至第３通信路、及び第５通信路において、遅延は発生しない。
【００２９】
図１２に、ボトルネックの第３態様における通信遅延テーブルを示す。仮想ルーター２０９がボトルネックであれば、４番目の組合せレコードにおける通信遅延に関する状況は「発生」である。他方１番目乃至３番目、及び５番目の組合せレコードにおける通信遅延に関する状況は「発生せず」である。
【００３０】
まず、本実施の形態の基礎となる分析例について説明する。当該分析例では、上述したボトルネックの第１態様乃至第３態様を想定する。
【００３１】
図１３に、基礎となる仮想分析装置２１１のモジュール構成例を示す。仮想分析装置２１１は、パケット取得部１３０１、記録処理部１３０３、遅延判定部１３０５、ノード検出部１３０７、ＣＰＵ特定部１３０９、出力処理部１３１１、ノード記憶部１３３１、サブネットワーク記憶部１３３３、ネットワーク接続記憶部１３３５、コネクション記憶部１３３７、ログ記憶部１３３９、及び通信遅延記憶部１３４１を有する。
【００３２】
パケット取得部１３０１は、仮想スイッチ２０７によって転送されるパケットを取得する。記録処理部１３０３は、ログを記録する処理を行う。遅延判定部１３０５は、通信遅延の発生を判定する。ノード検出部１３０７は、ボトルネックである仮想ノードを検出する。ＣＰＵ特定部１３０９は、ボトルネックの仮想ノードに割り当てられているＣＰＵ番号を特定する。出力処理部１３１１は、ボトルネックの仮想ノード及びＣＰＵ番号出力する処理を行う。
【００３３】
ノード記憶部１３３１は、ノードテーブルを記憶する。ノードテーブルは、仮想ノード毎のレコードを有し、当該レコードには、仮想ノードＩＤ、仮想ノード名及びＩＰアドレスが設定されている。ノードテーブルは、図示しない。
【００３４】
サブネットワーク記憶部１３３３は、サブネットワークテーブルを記憶する。サブネットワークテーブルについては、図１４を用いて後述する。ネットワーク接続記憶部１３３５は、ネットワーク接続テーブルを記憶する。ネットワーク接続テーブルについては、図１５を用いて後述する。コネクション記憶部１３３７は、コネクションテーブルを記憶する。コネクションテーブルについては、図１６を用いて後述する。ログ記憶部１３３９は、ログテーブルを記憶する。ログテーブルについては、図１７を用いて後述する。通信遅延記憶部１３４１は、上述した通信遅延テーブルを記憶する。
【００３５】
上述したパケット取得部１３０１、記録処理部１３０３、遅延判定部１３０５、ノード検出部１３０７、ＣＰＵ特定部１３０９、及び出力処理部１３１１は、ハードウエア資源（例えば、図５０）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【００３６】
上述したノード記憶部１３３１、サブネットワーク記憶部１３３３、ネットワーク接続記憶部１３３５、コネクション記憶部１３３７、ログ記憶部１３３９、及び通信遅延記憶部１３４１は、ハードウエア資源（例えば、図５０）を用いて実現される。
【００３７】
図１４に、サブネットワークテーブルの例を示す。この例におけるサブネットワークテーブルは、仮想マシン２０５に対応するレコードを有している。サブネットワークテーブルのレコードは、仮想マシンＩＤが格納されるフィールドと、仮想スイッチＩＤが格納されるフィールドとを有している。
【００３８】
仮想スイッチＩＤは、仮想マシンＩＤで識別される仮想マシン２０５が接続している仮想スイッチ２０７を特定する。例えば図示した１番目のレコードは、ＩＤ：ＶＭ１で識別される仮想マシン２０５ａが、ＩＤ：ＶＳ１で識別される仮想スイッチ２０７ａに接続していることを示している。サブネットワークテーブルは、例えば仮想マシン２０５がいずれのサブネットワークに属するかを特定する場合に用いられる。尚、仮想マシンＩＤに代えて、仮想マシン２０５のＩＰアドレスを用いるようにしてもよい。また、仮想スイッチＩＤに代えて、仮想スイッチ２０７のＩＰアドレスを用いるようにしてもよい。
【００３９】
図１５に、ネットワーク接続テーブルの例を示す。この例におけるネットワーク接続テーブルは、仮想スイッチ２０７に対応するレコードを有している。ネットワーク接続テーブルのレコードは、仮想スイッチＩＤが格納されるフィールドと、仮想ルーターＩＤが格納されるフィールドとを有している。
【００４０】
仮想ルーターＩＤは、仮想スイッチＩＤで識別される仮想スイッチ２０７が接続している仮想ルーター２０９を特定する。仮想スイッチＩＤに代えて、仮想スイッチ２０７のＩＰアドレスを用いるようにしてもよい。また、仮想ルーターＩＤに代えて、仮想ルーター２０９のＩＰアドレスを用いるようにしてもよい。
【００４１】
図示した１番目のレコードは、ＩＤ：ＶＳ１で識別される仮想スイッチ２０７ａが、ＩＤ：ＶＲ１で識別される仮想ルーター２０９に接続していることを示している。ネットワーク接続テーブルは、例えば或る仮想スイッチ２０７で特定されるサブネットワークがいずれの仮想ルーター２０９に接続しているかを特定する場合に用いられる。
【００４２】
図１６に、コネクションテーブルの例を示す。この例におけるコネクションテーブルは、仮想マシン２０５間のコネクションに対応するレコード（以下、コネクションレコードという。）を有している。コネクションレコードは、コネクションＩＤが設定されるフィールドと、送信元ＩＰアドレスが格納されるフィールドと、送信元ポート番号が格納されるフィールドと、宛先ＩＰアドレスが格納されるフィールドと、宛先ポート番号が格納されるフィールドとを有している。
【００４３】
コネクションＩＤは、コネクションを識別する。送信元ＩＰアドレスは、コネクションを要求した仮想マシン２０５のＩＰアドレスである。送信元ポート番号は、コネクションを要求したプログラムに割り当てられているポート番号である。宛先ＩＰアドレスは、コネクションを要求された仮想マシン２０５のＩＰアドレスである。宛先ポート番号は、コネクションを要求されたプログラムに割り当てられているポート番号である。
【００４４】
図１７に、ログテーブルの例を示す。この例におけるログテーブルは、取得したパケットに対応するレコード（以下、ログレコードという。）を有している。ログレコードは、パケットＩＤが設定されるフィールドと、コネクションＩＤが格納されるフィールドと、方向が格納されるフィールドと、ＴＣＰ種別が格納されるフィールドと、シーケンス番号が格納されるフィールドと、Ｌ７種別が格納されるフィールドと、取得時刻が格納されるフィールドとを有している。
【００４５】
パケットＩＤは、取得したパケットを識別する。コネクションＩＤは、パケットが伝送されるコネクションを特定する。方向は、パケットが伝送される向きを示す。コネクションレコードにおける送信元ＩＰアドレスの仮想マシン２０５から、同じく宛先ＩＰアドレスの仮想マシン２０５へ送られるパケットの方向は、上りである。一方、コネクションレコードにおける宛先ＩＰアドレスの仮想マシン２０５から、同じく送信元ＩＰアドレスの仮想マシン２０５へ送られるパケットの方向は、下りである。ＴＣＰ種別は、データ転送パケットとＡＣＫパケットとを識別する。シーケンス番号は、データ転送パケット及びＡＣＫパケットに含まれる。Ｌ７種別は、リクエストメッセージとレスポンスメッセージとを識別する。取得時刻は、パケットを取得した時刻である。尚、取得時刻に日付を付するようにしてもよい。
【００４６】
続いて、仮想分析装置２１１における処理について説明する。本実施の形態で、仮想分析装置２１１はメイン処理（Ａ）を実行する。図１８に、メイン処理（Ａ）フローを示す。
【００４７】
パケット取得部１３０１は、いずれかの仮想スイッチ２０７からパケットを１つ取得する（Ｓ１８０１）。
【００４８】
記録処理部１３０３は、取得したパケットのヘッダ情報からコネクションデータ（送信元ＩＰアドレス、送信元ポート番号、宛先ＩＰアドレス及び宛先ポート番号）を抽出し、コネクションＩＤを特定する（Ｓ１８０３）。記録処理部１３０３は、当該コネクションデータと一致するコネクションレコードが存在する場合には、当該コネクションレコードのコネクションＩＤを特定する。また、新たにコネクションが確立されたと判定した場合には、記録処理部１３０３は、新たなコネクションレコードを追加し、当該コネクションレコードにおける新たなコネクションＩＤを特定する。そして、記録処理部１３０３は、取得したパケットに基づくログレコードを追加する（Ｓ１８０５）。ログレコードの内容は、上述した通りである。
【００４９】
遅延判定部１３０５は、遅延判定処理を実行する（Ｓ１８０７）。遅延判定部１３０５は、遅延判定処理において、図１８のＳ１８０１で取得したパケットに基づいて通信遅延が生じているか否かを判定する。
【００５０】
遅延判定処理の例を３つ示す。遅延判定処理（Ａ）は、図３に示した第１判定方式に相当する。図１９に、遅延判定処理（Ａ）フローを示す。
【００５１】
遅延判定部１３０５は、図１８のＳ１８０１で取得したパケットがＡＣＫパケットであるか否かを判定する（Ｓ１９０１）。取得したパケットがＡＣＫパケットではないと判定した場合には、そのまま遅延判定処理を終える。つまり、通信遅延に関する状況は変化しない。
【００５２】
一方、取得したパケットがＡＣＫパケットであると判定した場合には、遅延判定部１３０５は、通信遅延テーブルにおいて当該パケットの送信元及び宛先に対応する組合せレコードを特定する（Ｓ１９０３）。
【００５３】
遅延判定部１３０５は、ログテーブルに基づいて、当該パケットと反対方向のパケットのうち、直近のデータ転送パケットの取得時刻を特定する（Ｓ１９０５）。遅延判定部１３０５は、図１８のＳ１８０１においてパケットを取得した時刻、つまり今回の取得時刻から直近のデータ転送パケットの取得時刻を引いて、差分時間を算出する（Ｓ１９０７）。そして、遅延判定部１３０５は、当該差分時間が閾値を超えているか否かを判定する（Ｓ１９０９）。
【００５４】
当該差分時間が閾値を超えていると判定した場合には、遅延判定部１３０５は、通信遅延が発生したと判定する（Ｓ１９１１）。一方、当該差分時間が閾値を超えていないと判定した場合には、遅延判定部１３０５は、通信遅延が発生していないと判定する（Ｓ１９１３）。そして、呼び出し元の処理に復帰する。
【００５５】
次に、遅延判定処理（Ｂ）について説明する。遅延判定処理（Ｂ）は、図４に示した第２判定方式に相当する。図２０に、遅延判定処理（Ｂ）フローを示す。
【００５６】
遅延判定部１３０５は、図１８のＳ１８０１で取得したパケットがレスポンスメッセージであるか否かを判定する（Ｓ２００１）。取得したパケットがレスポンスメッセージではないと判定した場合には、そのまま遅延判定処理を終える。つまり、通信遅延に関する状況は変化しない。
【００５７】
一方、取得したパケットがレスポンスメッセージであると判定した場合には、遅延判定部１３０５は、通信遅延テーブルにおいて当該パケットの送信元及び宛先に対応する組合せレコードを特定する（Ｓ２００３）。
【００５８】
遅延判定部１３０５は、ログテーブルに基づいて、当該パケットと反対方向のリクエストメッセージを取得した時刻を特定する（Ｓ２００５）。遅延判定部１３０５は、図１８のＳ１８０１においてパケットを取得した時刻、つまり今回の取得時刻から反対方向のリクエストメッセージの取得時刻を引いて、差分時間を算出する（Ｓ２００７）。そして、遅延判定部１３０５は、当該差分時間が閾値を超えているか否かを判定する（Ｓ２００９）。
【００５９】
当該差分時間が閾値を超えている場合には、遅延判定部１３０５は、通信遅延が発生したと判定する（Ｓ２０１１）。一方、当該差分時間が閾値を超えていない場合には、遅延判定部１３０５は、通信遅延が発生していないと判定する（Ｓ２０１３）。そして、呼び出し元の処理に復帰する。
【００６０】
続いて、遅延判定処理（Ｃ）について説明する。遅延判定処理（Ｃ）は、図５及び図６に示した第３判定方式に相当する。図２１Ａに、遅延判定処理（Ｃ）フローを示す。
【００６１】
遅延判定部１３０５は、図１８のＳ１８０１で取得したパケットがデータ転送パケットであるか否かを判定する（Ｓ２１０１）。
【００６２】
取得したパケットがデータ転送パケットであると判定した場合には、遅延判定部１３０５は、通信遅延テーブルにおいて当該パケットの送信元及び宛先に対応する組合せレコードを特定する（Ｓ２１０３）。
【００６３】
遅延判定部１３０５は、ログテーブルに基づいて、当該パケットと同じ方向のパケットうち、直近のデータ転送パケットに付されたシーケンス番号を特定する（Ｓ２１０５）。そして、遅延判定部１３０５は、特定した前回のシーケンス番号と今回のデータ転送パケットのシーケンス番号とに連続性があるか否かを判定する（Ｓ２１０７）。具体的には、今回のシーケンス番号が前回のシーケンス番号にデータサイズを加えた値であれば、連続性があると判定される。
【００６４】
前回のシーケンス番号と今回のシーケンス番号とに連続性がない場合には、遅延判定部１３０５は、通信遅延が発生したと判定する（Ｓ２１０９）。一方、前回のシーケンス番号と今回のシーケンス番号とに連続性がある場合には、遅延判定部１３０５は、通信遅延が発生していないと判定する（Ｓ２１１１）。そして、呼び出し元の処理に復帰する。
【００６５】
Ｓ２１０１において、図１８のＳ１８０１で取得したパケットがデータ転送パケットではないと判定した場合には、図２１Ｂに示したＳ２１１３の処理に移る。
【００６６】
遅延判定部１３０５は、図１８のＳ１８０１で取得したパケットがＡＣＫパケットであるか否かを判定する（Ｓ２１１３）。取得したパケットがＡＣＫパケットでないと判定した場合には、そのまま遅延判定処理（Ｃ）を終える。つまり、通信遅延に関する状況は変化しない。
【００６７】
一方、取得したパケットがＡＣＫパケットであると判定した場合には、遅延判定部１３０５は、通信遅延テーブルにおいて当該パケットの送信元及び宛先に対応する組合せレコードを特定する（Ｓ２１１５）。
【００６８】
遅延判定部１３０５は、ログテーブルに基づいて、反対方向のパケットのうち、直近のデータ転送パケットに付されたシーケンス番号を特定する（Ｓ２１１７）。遅延判定部１３０５は、ＡＣＫパケットのシーケンス番号が、反対方向のデータ転送パケットの応答についての番号であるか否かを判定する（Ｓ２１１９）。ＡＣＫパケットのシーケンス番号が当該応答についての番号でない場合には、遅延判定部１３０５は、通信遅延が発生したと判定する（Ｓ２１２１）。ＡＣＫパケットのシーケンス番号が当該応答についての番号である場合には、遅延判定部１３０５は、通信遅延が発生していないと判定する（Ｓ２１２３）。そして、呼び出し元の処理に復帰する。
【００６９】
尚、図１８のＳ１８０７において、遅延判定処理（Ａ）乃至（Ｃ）のいずれを実行するようにしてもよい。また、遅延判定処理（Ａ）と遅延判定処理（Ｂ）とを実行し、いずれの判定処理においても通信遅延が発生する条件を満たした場合に通信遅延が発生したと判定するようにしてもよい。また、遅延判定処理（Ａ）と遅延判定処理（Ｃ）とを実行し、いずれの判定処理においても通信遅延が発生する条件を満たした場合に通信遅延が発生したと判定するようにしてもよい。また、遅延判定処理（Ｂ）と遅延判定処理（Ｃ）とを実行し、いずれの判定処理においても通信遅延が発生する条件を満たした場合に通信遅延が発生したと判定するようにしてもよい。更に、遅延判定処理（Ａ）乃至遅延判定処理（Ｃ）を実行し、いずれの判定処理においても通信遅延が発生する条件を満たした場合に通信遅延が発生したと判定するようにしてもよい。
【００７０】
図１８の説明に戻る。遅延判定部１３０５は、通信遅延テーブルに遅延判定処理の判定結果を記憶する（Ｓ１８０９）。具体的には、遅延判定部１３０５は、通信遅延テーブルにおいて、取得したパケットの送信元及び宛先に対応する組合せレコードの通信遅延に関する状況を更新する。
【００７１】
そして、仮想分析装置２１１は、通信遅延が発生したか否かによって処理を分岐させる（Ｓ１８１１）。通信遅延が発生していない場合には、Ｓ１８０１に示した処理に戻って、上述した処理を繰り返す。
【００７２】
一方、通信遅延が発生した場合には、ノード検出部１３０７は、マシン検出処理を実行する（Ｓ１８１３）。ノード検出部１３０７は、マシン検出処理において、ボトルネックである仮想マシン２０５の検出を試みる。
【００７３】
図２２に、マシン検出処理フローを示す。ノード検出部１３０７は、仮想化システムに含まれる仮想マシン２０５を１つ特定する（Ｓ２２０１）。但し、仮想化システムに含まれる仮想マシン２０５のうち、図１８のＳ１８０１で取得したパケットの送信元の仮想マシン２０５及び宛先の仮想マシン２０５を対象とするようにしてもよい。
【００７４】
ノード検出部１３０７は、通信遅延テーブルにおいて、第１エンド又は第２エンドが当該仮想マシン２０５である組合せレコードを１つ特定する（Ｓ２２０３）。
【００７５】
ノード検出部１３０７は、当該組合せレコードに設定されている通信遅延に関する状況が「発生」であるか否かを判定する（Ｓ２２０５）。通信遅延に関する状況が「発生」でない場合には、当該仮想マシン２０５はボトルネックでない。従って、当該仮想マシン２０５についての処理を終え、Ｓ２２０７の処理に移る。
【００７６】
Ｓ２２０７において、ノード検出部１３０７は、未処理の仮想マシン２０５があるか否かを判定する。未処理の仮想マシン２０５がないと判定した場合には、ボトルネックの仮想マシン２０５を検出せずに呼び出し元の処理に復帰する。一方、未処理の仮想マシン２０５があると判定した場合には、Ｓ２２０１に示した処理に戻って、上述した処理を繰り返す。
【００７７】
Ｓ２２０５に示した処理の説明に戻る。通信遅延に関する状況が「発生」である場合には、ノード検出部１３０７は、未処理の組合せレコードがあるか否かを判定する（Ｓ２２０９）。未処理の組合せレコードがあると判定した場合には、Ｓ２２０３に示した処理に戻って、上述した処理を繰り返す。
【００７８】
一方、未処理の組合せレコードがないと判定した場合には、Ｓ２２０１において特定した仮想マシン２０５がボトルネックである可能性がある。ノード検出部１３０７は、通信遅延テーブルにおいて、第１エンド及び第２エンドのいずれも、当該仮想マシン２０５でない組合せレコードを１つ特定する（Ｓ２２１１）。
【００７９】
ノード検出部１３０７は、当該組合せレコードに設定されている通信遅延に関する状況が「発生」であるか否かを判定する（Ｓ２２１３）。通信遅延に関する状況が「発生」である場合には、当該仮想マシン２０５はボトルネックでない。従って、当該仮想マシン２０５についての処理を終え、Ｓ２２０７の処理に移る。
【００８０】
一方、通信遅延に関する状況が「発生」でない場合には、ノード検出部１３０７は、未処理の組合せレコードがあるか否かを判定する（Ｓ２２１５）。未処理の組合せレコードがあると判定した場合には、Ｓ２２１１に示した処理に戻って、上述した処理を繰り返す。
【００８１】
一方、未処理の組合せレコードがないと判定した場合には、ノード検出部１３０７は、Ｓ２２０１で特定した仮想マシン２０５がボトルネックであると判定する（Ｓ２２１７）。マシン検出処理を終えると、呼び出し元の処理に復帰する。
【００８２】
図１８の説明に戻る。仮想分析装置２１１は、マシン検出処理においてボトルネックの仮想マシン２０５を検出したか否かによって処理を分岐させる（Ｓ１８１５）。
【００８３】
ボトルネックの仮想マシン２０５を検出した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想マシン２０５に割り当てられているＣＰＵ番号を特定する（Ｓ１８１７）。具体的には、ＣＰＵ特定部１３０９は、仮想マシン２０５に割り当てられているＣＰＵ番号をハイパーバイザ２０３に問い合わせる。或いは、ＣＰＵ特定部１３０９は、仮想マシン２０５のプロセス番号に対応するＣＰＵ番号をＯＳ（オペレーティングシステム）２０１に問い合わせるようにしてもよい。出力処理部１３１１は、ボトルネックの仮想マシン名及びＣＰＵ番号を出力する（Ｓ１８１９）。出力態様は、例えば画面表示或いは端末への送信である。そして、Ｓ１８０１に示した処理に戻って、上述した処理を繰り返す。
【００８４】
一方、ボトルネックの仮想マシン２０５を検出していない場合には、端子Ａを介して図２３に示したＳ２３０１の処理に移る。
【００８５】
図２３について説明する。ノード検出部１３０７は、ルーター検出処理を実行する（Ｓ２３０１）。ノード検出部１３０７は、ルーター検出処理において、ボトルネックである仮想ルーター２０９の検出を試みる。
【００８６】
図２４に、ルーター検出処理フローを示す。ノード検出部１３０７は、仮想化システムに含まれる仮想ルーター２０９を１つ特定する（Ｓ２４０１）。ノード検出部１３０７は、当該仮想ルーター２０９が接続しているサブネットワーク（以下、接続サブネットワークという。）を特定する（Ｓ２４０３）。具体的には、当該仮想ルーター２０９が接続している仮想スイッチ２０７によってサブネットワークが特定される。
【００８７】
ノード検出部１３０７は、通信遅延テーブルにおける組合せレコードを１つ特定する（Ｓ２４０５）。ノード検出部１３０７は、当該組合せレコードにおける第１エンドが、いずれかの接続サブネットワークに属するか否かを判定する（Ｓ２４０７）。第１エンドがいずれの接続サブネットワークにも属さない場合には、当該組合せレコードの仮想通信路は当該仮想ルーター２０９を含まない。従って、そのままＳ２４１３の処理に移る。
【００８８】
第１エンドがいずれかの接続サブネットワークに属する場合には、ノード検出部１３０７は、当該組合せレコードにおける第２エンドが、いずれかの接続サブネットワークに属するか否かを判定する（Ｓ２４０９）。第２エンドがいずれの接続サブネットワークに属さない場合には、当該組合せレコードの仮想通信路は当該仮想ルーター２０９を含まない。従って、そのままＳ２４１３の処理に移る。
【００８９】
一方、第２エンドがいずれかの接続サブネットワークに属する場合には、ノード検出部１３０７は、当該組合せレコードに設定されている通信遅延に関する状況が「発生」であるか否かを判定する（Ｓ２４１１）。
【００９０】
当該組合せレコードに設定されている通信遅延に関する状況が「発生」でない場合には、当該仮想ルーター２０９はボトルネックではない。この場合には、端子Ｄを介して図２５のＳ２５０７に示した処理に移る。
【００９１】
一方、当該組合せレコードに設定されている通信遅延に関する状況が「発生」である場合には、ノード検出部１３０７は、未処理の組合せレコードがあるか否かを判定する（Ｓ２４１３）。未処理の組合せレコードがあると判定した場合には、Ｓ２４０５に示した処理に戻って、上述した処理を繰り返す。
【００９２】
未処理の組合せレコードがないと判定した場合には、当該仮想ルーター２０９がボトルネックである可能性がある。この場合には、端子Ｅを介して図２５のＳ２５０１に示した処理に移る。
【００９３】
図２５について説明する。ノード検出部１３０７は、再び通信遅延テーブルにおける組合せレコードを１つ特定する（Ｓ２５０１）。ノード検出部１３０７は、当該組合せレコードにおける第１エンド及び第２エンドが、同一の接続サブネットワークに属するか否かを判定する（Ｓ２５０３）。
【００９４】
第１エンド及び第２エンドが、同一の接続サブネットワークに属さない場合には、Ｓ２５０９の処理に移る。一方、第１エンド及び第２エンドが同一の接続サブネットワークに属する場合には、ノード検出部１３０７は、当該組合せレコードに設定されている通信遅延に関する状況が「発生」であるか否かを判定する（Ｓ２５０５）。当該通信遅延に関する状況が「発生」であると判定した場合には、当該仮想ルーター２０９はボトルネックではない。従って、Ｓ２５０７に示した処理に移る。
【００９５】
Ｓ２５０７において、ノード検出部１３０７は、未処理の仮想ルーター２０９があるか否かを判定する。未処理の仮想ルーター２０９がないと判定した場合には、ボトルネックの仮想ルーター２０９を検出せずに呼び出し元の処理に復帰する。一方、未処理の仮想ルーター２０９があると判定した場合には、端子Ｆを介して図２４のＳ２４０１に示した処理に戻って、上述した処理を繰り返す。
【００９６】
Ｓ２５０５に示した処理の説明に戻る。当該通信遅延に関する状況が「発生」でない場合には、未処理の組合せレコードがあるか否かを判定する（Ｓ２５０９）。未処理の組合せレコードがあると判定した場合には、Ｓ２５０１に示した処理に戻って、上述した処理を繰り返す。
【００９７】
一方、未処理の組合せレコードがない場合には、ノード検出部１３０７は、当該仮想ルーター２０９がボトルネックであると判定し（Ｓ２５１１）、ルーター検出処理を終える。ルーター検出処理を終えると、呼び出し元の処理に復帰する。
【００９８】
図２３の説明に戻る。仮想分析装置２１１は、ルーター検出処理においてボトルネックの仮想ルーター２０９を検出したか否かによって処理を分岐させる（Ｓ２３０３）。
【００９９】
ボトルネックの仮想ルーター２０９を検出した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想ルーター２０９に割り当てられているＣＰＵ番号を特定する（Ｓ２３０５）。具体的には、ＣＰＵ特定部１３０９は、仮想ルーター２０９に割り当てられているＣＰＵ番号をハイパーバイザ２０３に問い合わせる。或いは、ＣＰＵ特定部１３０９は、仮想ルーター２０９のプロセス番号に対応するＣＰＵ番号をＯＳ２０１に問い合わせるようにしてもよい。出力処理部１３１１は、ボトルネックの仮想ルーター名及びＣＰＵ番号を出力する（Ｓ２３０７）。そして、端子Ｂを介して図１８のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１００】
一方、ボトルネックの仮想ルーター２０９を検出しなかった場合には、ノード検出部１３０７は、スイッチ検出処理を実行する（Ｓ２３０９）。ノード検出部１３０７は、スイッチ検出処理において、ボトルネックである仮想スイッチ２０７の検出を試みる。
【０１０１】
図２６に、スイッチ検出処理フローを示す。ノード検出部１３０７は、仮想化システムに含まれる仮想スイッチ２０７を１つ特定する（Ｓ２６０１）。
【０１０２】
ノード検出部１３０７は、通信遅延テーブルにおける組合せレコードを１つ特定する（Ｓ２６０３）。
【０１０３】
ノード検出部１３０７は、当該組合せレコードにおける第１エンドが当該仮想スイッチ２０７のサブネットワークに属するか否かを判定する（Ｓ２６０５）。第１エンドが当該仮想スイッチ２０７のサブネットワークに属さないと判定した場合には、ノード検出部１３０７は、当該組合せレコードにおける第２エンドが当該仮想スイッチ２０７のサブネットワークに属するか否かを判定する（Ｓ２６０７）。
【０１０４】
第１エンドが当該仮想スイッチ２０７のサブネットワークに属すると判定した場合又は第２エンドが当該仮想スイッチ２０７のサブネットワークに属すると判定した場合は、Ｓ２６０９の処理に移る。
【０１０５】
一方、第２エンドも当該仮想スイッチ２０７のサブネットワークに属さないと判定した場合は、Ｓ２６１１の処理に移る。
【０１０６】
Ｓ２６０９において、ノード検出部１３０７は、当該組合せレコードに設定されている通信遅延に関する状況が「発生」であるか否かを判定する。当該状況が「発生」である場合には、ノード検出部１３０７は、未処理の組合せレコードがあるか否かを判定する（Ｓ２６１１）。
【０１０７】
未処理の組合せレコードがあると判定した場合には、Ｓ２６０３に示した処理に戻って、上述した処理を繰り返す。一方、未処理の組合せレコードがないと判定した場合には、ノード検出部１３０７は、当該仮想スイッチ２０７がボトルネックであると判定する（Ｓ２６１３）。そして、呼び出し元の処理に復帰する。
【０１０８】
Ｓ２６０９の処理の説明に戻る。当該組合せレコードに設定されている通信遅延に関する状況が「発生」でない場合には、当該仮想スイッチ２０７はボトルネックではない。この場合に、ノード検出部１３０７は、未処理の仮想スイッチ２０７があるか否かを判定する（Ｓ２６１５）。
【０１０９】
未処理の仮想スイッチ２０７があると判定した場合には、Ｓ２６０１に示した処理に戻って、上述した処理を繰り返す。一方、未処理の仮想スイッチ２０７がないと判定した場合には、そのままスイッチ検出処理を終え、呼び出し元の処理に復帰する。
【０１１０】
図２３の説明に戻る。仮想分析装置２１１は、スイッチ検出処理においてボトルネックの仮想スイッチ２０７を検出したか否かによって処理を分岐させる（Ｓ２３１１）。
【０１１１】
ボトルネックの仮想スイッチ２０７を検出した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想スイッチ２０７に割り当てられているＣＰＵ番号を特定する（Ｓ２３１３）。具体的には、ＣＰＵ特定部１３０９は、仮想スイッチ２０７に割り当てられているＣＰＵ番号をハイパーバイザ２０３に問い合わせる。或いは、ＣＰＵ特定部１３０９は、仮想スイッチ２０７のプロセス番号に対応するＣＰＵ番号をＯＳ２０１に問い合わせるようにしてもよい。出力処理部１３１１は、ボトルネックの仮想スイッチ名及びＣＰＵ番号を出力する（Ｓ２３１５）。そして、端子Ｂを介して図１８のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１１２】
一方、ボトルネックの仮想スイッチ２０７を検出しなかった場合には、そのまま端子Ｂを介して図１８のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。以上で、基礎となる分析例の説明を終える。
【０１１３】
続いて、上述の分析例を改善する例について説明する。ボトルネックの第１態様乃至第３態様では、ボトルネックが１つである。これらの態様は、１つの仮想ノードに割り当てられているＣＰＵにおける処理負荷が高まった場合を想定している。
【０１１４】
この例では、ボトルネックが２つである態様も想定する。これらの態様は、２つの仮想ノードに割り当てられているＣＰＵにおける処理負荷が高まった場合を想定している。
【０１１５】
図２７に、ボトルネックの第４態様を示す。第４態様では、仮想マシン２０５及び仮想ルーター２０９がボトルネックである。仮想マシン２０５及び仮想ルーター２０９に同じＣＰＵが割り当てられ、当該ＣＰＵにおける処理負荷が高まった場合にこれらの仮想ノードがボトルネックとなる。この例では、仮想マシン２０５ｃ及び仮想ルーター２０９がボトルネックであるものとする。ボトルネックである仮想マシン２０５ｃが送信元又は宛先となる仮想通信路及びボトルネックである仮想ルーター２０９が中継する仮想通信路において遅延が発生する。この例では、第２通信路乃至第４通信路において、遅延が発生する。一方、第１通信路及び第５通信路において、遅延は発生しない。
【０１１６】
図２８に、ボトルネックの第４態様における通信遅延テーブルを示す。２番目乃至４番目の組合せレコードにおける通信遅延に関する状況は「発生」である。他方１番目及び５番目の組合せレコードにおける通信遅延に関する状況は「発生せず」である。この態様の場合、基礎となる分析例で仮想マシン２０５ｃのボトルネックは検出されるが、仮想ルーター２０９のボトルネックは検出されない。
【０１１７】
続いて、ボトルネックの第５態様について説明する。図２９に、ボトルネックの第５態様を示す。第５態様では、仮想マシン２０５及び仮想スイッチ２０７がボトルネックである。仮想マシン２０５及び仮想スイッチ２０７に同じＣＰＵが割り当てられ、当該ＣＰＵにおける処理負荷が高まった場合にこれらの仮想ノードがボトルネックとなる。この例では、仮想マシン２０５ｃ及び仮想スイッチ２０７ａがボトルネックであるものとする。ボトルネックである仮想マシン２０５ｃが送信元又は宛先となる仮想通信路及びボトルネックである仮想スイッチ２０７ａが中継する仮想通信路において遅延が発生する。この例では、第１通信路乃至第４通信路において、遅延が発生する。一方、第５通信路において、遅延が発生しない。
【０１１８】
図３０に、ボトルネックの第５態様における通信遅延テーブルを示す。１番目及び４番目の組合せレコードにおける通信遅延に関する状況は「発生」である。他方５番目の組合せレコードにおける通信遅延に関する状況は「発生せず」である。この態様の場合、基礎となる分析例で仮想スイッチ２０７ａのボトルネックは検出されるが、仮想マシン２０５ｃのボトルネックは検出されない。
【０１１９】
図３１に、ボトルネックの第６態様を示す。第６態様では、仮想スイッチ２０７及び仮想ルーター２０９がボトルネックである。仮想スイッチ２０７及び仮想ルーター２０９に同じＣＰＵが割り当てられ、当該ＣＰＵにおける処理負荷が高まった場合にこれらの仮想ノードがボトルネックとなる。この例では、仮想スイッチ２０７ａ及び仮想ルーター２０９がボトルネックであるものとする。ボトルネックである仮想スイッチ２０７ａが中継する仮想通信路及びボトルネックである仮想ルーター２０９が中継する仮想通信路において遅延が発生する。この例では、第１通信路乃至第４通信路において、遅延が発生する。一方、第５通信路において、遅延は発生しない。
【０１２０】
ボトルネックの第６態様における通信遅延テーブルは、図３０に示した第５態様の場合と同様である。この態様の場合、基礎となる分析例で仮想スイッチ２０７ａのボトルネックは検出されるが、仮想ルーター２０９のボトルネックは検出されない。以上で、ボトルネックの態様についての説明を終える。
【０１２１】
このように複数のプログラムが並行して動作しているＣＰＵの処理負荷が高まると、各プログラムの実行時においてキャッシュミスが増える。本実施の形態では、キャッシュミスの増加数に着目して、基礎となる分析例では検出されないボトルネックを特定する。
【０１２２】
図３２を用いて、キャッシュミスに係るＣＰＵの動作について説明する。ＣＰＵには、主記憶部が接続されている。ＣＰＵに接続されている主記憶部のプログラム領域には、当該ＣＰＵで実行されるプログラムがロードされる。この例では、仮想マシン２０５を実現するためのプログラム（以下、仮想マシンプログラムという。）及び仮想ルーター２０９を実現するためのプログラム（以下、仮想ルータープログラムという。）がロードされているものとする。
【０１２３】
ＣＰＵは、プログラムを実行する際に用いられるデータのキャッシュを制御するキャッシュ制御部を有する。そして、ＣＰＵは、キャッシュミスの発生回数をカウントする。具体的には、キャッシュ制御部がキャッシュミスを検出すると、キャッシュミスカウンタで記憶しているキャッシュミス数に１が加えられる。この例で、ＣＰＵの負荷が高まると、仮想マシンプログラムにおけるキャッシュミス数が増えやすくなる。更に、仮想ルータープログラムにおけるキャッシュミス数が増えやすくなる。
【０１２４】
図３３を用いて、キャッシュミス数が記録されるキャッシュミステーブルについて説明する。キャッシュミステーブルは、仮想ノードのプログラム毎に設けられる。キャッシュミステーブルは、仮想分析装置２１１がＯＳ２０１を介してＣＰＵからキャッシュミス数を取得したタイミングに対応するレコードを有している。キャッシュミステーブルのレコードは、キャッシュミス数が格納されるフィールドと、キャッシュミスの増加数が格納されるフィールドと、取得時刻が格納されるフィールドとを有している。
【０１２５】
キャッシュミスの増加数は、所定時間遡った時点から増加したキャッシュミス数である。取得時刻は、キャッシュミス数を取得した時点を特定する。
【０１２６】
図３４に、改善例に係る仮想分析装置２１１のモジュール構成例を示す。仮想分析装置２１１は、パケット取得部１３０１乃至出力処理部１３１１の他に、算出部３４０１及びノード特定部３４０３を有する。算出部３４０１は、キャッシュミスの増加数を算出する。ノード特定部３４０３は、ボトルネックである仮想ノードを特定する。算出部３４０１及びノード特定部３４０３は、ハードウエア資源（例えば、図５０）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【０１２７】
更に、仮想分析装置２１１は、ノード記憶部１３３１乃至通信遅延記憶部１３４１の他に、キャッシュミス記憶部３４３１を有する。キャッシュミス記憶部３４３１は、上述したキャッシュミステーブルを記憶する。キャッシュミス記憶部３４３１は、ハードウエア資源（例えば、図５０）を用いて実現される。
【０１２８】
続いて、仮想分析装置２１１における各処理について説明する。まず、算出処理について説明する。算出処理では、各仮想ノードについてキャッシュミスの増加数を算出する。算出処理は、メイン処理と並行して実行される。
【０１２９】
図３５に、算出処理フローを示す。算出部３４０１は、周期的にタイミングを待つ（Ｓ３５０１）。
【０１３０】
タイミングに至ると、算出部３４０１は、仮想ノードを実現するためのプログラム（以下、仮想ノードプログラムという。）を１つ特定する（Ｓ３５０３）。具体的には、仮想マシンプログラム、仮想スイッチ２０７を実現するためのプログラム（以下、仮想スイッチプログラムという。）及び仮想ルータープログラムを順次特定する。
【０１３１】
算出部３４０１は、当該仮想ノードプログラムに関する現在のキャッシュミス数を取得する（Ｓ３５０５）。算出部３４０１は、キャッシュミステーブルに新しいレコードを設け、当該レコードにキャッシュミス数を格納する。
【０１３２】
更に、算出部３４０１は、キャッシュミスの増加数を算出する（Ｓ３５０７）。具体的には、算出部３４０１は、現在のキャッシュミス数から、所定時間遡った時点におけるキャッシュミス数を引くことによって増加数を算出する。キャッシュミスの増加数は、当該新しいレコードに格納される。
【０１３３】
算出部３４０１は、未処理の仮想ノードプログラムがあるか否かを判定する（Ｓ３５０９）。未処理の仮想ノードプログラムがあると判定した場合には、Ｓ３５０３に示した処理に戻って、上述した処理を繰り返す。一方、未処理の仮想ノードプログラムがないと判定した場合には、Ｓ３５０１に示した処理に戻って、次のタイミングを待つ。
【０１３４】
改善例では、メイン処理（Ａ）に代えて、メイン処理（Ｂ）を実行する。図３６に、メイン処理（Ｂ）フローを示す。Ｓ１８０１乃至Ｓ１８１１の処理は、図１８の場合と同様である。Ｓ１８１１の処理を終えると、端子Ｇを介して図３７に示したＳ３７０１の処理に移る。
【０１３５】
図３７の説明に移る。図１８のＳ１８１３の場合と同様に、ノード検出部１３０７は、マシン検出処理を実行する（Ｓ３７０１）。図１８のＳ１８１５の場合と同様に、仮想分析装置２１１は、ボトルネックの仮想マシン２０５を検出したか否かによって処理を分岐させる（Ｓ３７０３）。
【０１３６】
ボトルネックの仮想マシン２０５を検出した場合には、ノード特定部３４０３は、第１ルーター特定処理を実行する（Ｓ３７０５）。ノード特定部３４０３は、第１ルーター特定処理において、ボトルネックに係る仮想マシンプログラムが実行されているＣＰＵで並行に動作している仮想ルータープログラムの特定を試みる。特定される仮想ルーター２０９はボトルネックである。
【０１３７】
ここでは、第１ルーター特定処理（Ａ）を実行する。図３８に、第１ルーター特定処理（Ａ）フローを示す。
【０１３８】
ノード特定部３４０３は、ボトルネックの仮想マシン２０５におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ３８０１）。当該キャッシュミスの増加数が閾値を超えていないと判定した場合には、第１ルーター特定処理（Ａ）を終え、呼出元に復帰する。
【０１３９】
一方、ボトルネックの仮想マシン２０５におけるキャッシュミスの増加数が閾値を超えていると判定した場合に、ノード特定部３４０３は、ボトルネックの仮想マシン２０５が属するサブネットワークに接続している仮想ルーター２０９を１つ特定する（Ｓ３８０３）。具体的には、ノード特定部３４０３は、ボトルネックの仮想マシン２０５と接続している仮想スイッチ２０７を特定し、当該仮想スイッチ２０７に接続している仮想ルーター２０９を１つ特定する。
【０１４０】
ノード特定部３４０３は、当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ３８０５）。当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えていると判定した場合には、ノード特定部３４０３は、当該仮想ルーター２０９をボトルネックであると判定する（Ｓ３８０７）。そして、呼び出し元の処理に復帰する。
【０１４１】
一方、当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えていないと判定した場合には、ノード特定部３４０３は、未処理の仮想ルーター２０９があるか否かを判定する（Ｓ３８０９）。未処理の仮想ルーター２０９があると判定した場合には、Ｓ３８０３に示した処理に戻って、上述した処理を繰り返す。
【０１４２】
一方、未処理の仮想ルーター２０９がないと判定した場合には、ボトルネックである仮想ルーター２０９はない。この場合には、そのまま呼び出し元の処理に復帰する。
【０１４３】
図３７の説明に戻る。仮想分析装置２１１は、第１ルーター特定処理においてボトルネックの仮想ルーター２０９を特定したか否かによって処理を分岐させる（Ｓ３７０７）。
【０１４４】
ボトルネックの仮想ルーター２０９を特定した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想マシン２０５に割り当てられているＣＰＵ番号を特定する（Ｓ３７０９）。更に、ＣＰＵ特定部１３０９は、ボトルネックの仮想ルータに割り当てられているＣＰＵ番号を特定する（Ｓ３７１１）。出力処理部１３１１は、ボトルネックの仮想マシン名及びＣＰＵ番号を出力する（Ｓ３７１３）。更に、出力処理部１３１１は、ボトルネックの仮想ルーター名及びＣＰＵ番号を出力する（Ｓ３７１５）。そして、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１４５】
一方、ボトルネックの仮想ルーター２０９を特定していない場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想マシン２０５に割り当てられているＣＰＵ番号を特定する（Ｓ３７１７）。出力処理部１３１１は、ボトルネックの仮想マシン名及びＣＰＵ番号を出力する（Ｓ３７１９）。そして、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１４６】
Ｓ３７０３の説明に戻る。ボトルネックの仮想マシン２０５を検出していないと判定した場合には、端子Ｈを介して図３９のＳ３９０１に移る。
【０１４７】
図３９のＳ３９０１乃至Ｓ３９０７の処理は、図２３のＳ２３０１乃至Ｓ２３０７の場合と同様である。Ｓ３９０７の処理を終えると、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。また、Ｓ３９０３においてボトルネックの仮想ルーター２０９を検出していないと判定した場合には、端子Ｊを介して図４０のＳ４００１に移る。
【０１４８】
図４０の説明に移る。Ｓ４００１及びＳ４００３の処理は、図２３のＳ２３０９及びＳ２３１１の場合と同様である。Ｓ４００３においてボトルネックの仮想スイッチ２０７を検出していないと判定した場合には、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１４９】
一方、ボトルネックの仮想スイッチ２０７を検出した場合には、ノード特定部３４０３は、マシン特定処理を実行する（Ｓ４００５）。ノード特定部３４０３は、マシン特定処理において、ボトルネックに係る仮想スイッチプログラムが実行されているＣＰＵで並行に動作している仮想マシンプログラムの特定を試みる。特定される仮想マシン２０５はボトルネックである。
【０１５０】
図４１に、マシン特定処理フローを示す。ノード特定部３４０３は、ボトルネックの仮想スイッチ２０７におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ４１０１）。キャッシュミスの増加数が閾値を超えていないと判定した場合には、マシン特定処理を終え、呼出元に復帰する。
【０１５１】
一方、キャッシュミスの増加数が閾値を超えたと判定した場合には、ノード特定部３４０３は、ボトルネックの仮想スイッチ２０７に接続している仮想マシン２０５を１つ特定する（Ｓ４１０３）。そして、ノード特定部３４０３は、当該仮想マシン２０５におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ４１０５）。
【０１５２】
当該仮想マシン２０５におけるキャッシュミスの増加数が閾値を超えていると判定した場合には、ノード特定部３４０３は、当該仮想マシン２０５をボトルネックであると判定する（Ｓ４１０７）。そして、呼び出し元の処理に復帰する。
【０１５３】
一方、当該仮想マシン２０５におけるキャッシュミスの増加数が閾値を超えていないと判定した場合には、ノード特定部３４０３は、未処理の仮想マシン２０５があるか否かを判定する（Ｓ４１０９）。未処理の仮想マシン２０５があると判定した場合には、Ｓ４１０３に示した処理に戻って、上述した処理を繰り返す。
【０１５４】
一方、未処理の仮想マシン２０５がないと判定した場合には、ボトルネックである仮想マシン２０５はない。この場合には、そのまま呼び出し元の処理に復帰する。
【０１５５】
図４０の説明に戻る。仮想分析装置２１１は、マシン特定処理においてボトルネックの仮想マシン２０５を特定したか否かによって処理を分岐させる（Ｓ４００７）。
【０１５６】
ボトルネックの仮想マシン２０５を特定した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想スイッチ２０７に割り当てられているＣＰＵ番号を特定する（Ｓ４００９）。更に、ＣＰＵ特定部１３０９は、ボトルネックの仮想マシン２０５に割り当てられているＣＰＵ番号を特定する（Ｓ４０１１）。出力処理部１３１１は、ボトルネックの仮想スイッチ名及びＣＰＵ番号を出力する（Ｓ４０１３）。更に、出力処理部１３１１は、ボトルネックの仮想マシン名及びＣＰＵ番号を出力する（Ｓ４０１５）。そして、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１５７】
一方、ボトルネックの仮想マシン２０５を特定しなかった場合には、端子Ｋを介して図４２のＳ４２０１に移る。
【０１５８】
図４２の説明に移る。ノード特定部３４０３は、第２ルーター特定処理を実行する（Ｓ４２０１）。ノード特定部３４０３は、第２ルーター特定処理において、ボトルネックに係る仮想スイッチプログラムが実行されているＣＰＵで並行に動作している仮想ルータープログラムの特定を試みる。特定される仮想ルーター２０９はボトルネックである。
【０１５９】
図４３に、第２ルーター特定処理フローを示す。ノード特定部３４０３は、ボトルネックの仮想スイッチ２０７におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ４３０１）。キャッシュミスの増加数が閾値を超えていないと判定した場合には、第２ルーター特定処理を終え、呼出元に復帰する。
【０１６０】
一方、ボトルネックの仮想スイッチ２０７におけるキャッシュミスの増加数が閾値を超えたと判定した場合には、ノード特定部３４０３は、ボトルネックの仮想スイッチ２０７に接続している仮想ルーター２０９を１つ特定する（Ｓ４３０３）。
【０１６１】
ノード特定部３４０３は、当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えているか否かを判定する（Ｓ４３０５）。当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えていると判定した場合には、ノード特定部３４０３は、当該仮想ルーター２０９をボトルネックであると判定する（Ｓ４３０７）。
【０１６２】
一方、当該仮想ルーター２０９におけるキャッシュミスの増加数が閾値を超えていないと判定した場合には、ノード特定部３４０３は、未処理の仮想ルーター２０９があるか否かを判定する（Ｓ４３０９）。未処理の仮想ルーター２０９があると判定した場合には、Ｓ４３０３に示した処理に戻って、上述した処理を繰り返す。
【０１６３】
一方、未処理の仮想ルーター２０９がないと判定した場合には、ボトルネックである仮想ルーター２０９はない。この場合には、そのまま呼び出し元の処理に復帰する。
【０１６４】
図４２の説明に戻る。仮想分析装置２１１は、第２ルーター特定処理においてボトルネックの仮想ルーター２０９を特定したか否かによって処理を分岐させる（Ｓ４２０３）。
【０１６５】
ボトルネックの仮想ルーター２０９を特定した場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想スイッチ２０７に割り当てられているＣＰＵ番号を特定する（Ｓ４２０５）。更に、ＣＰＵ特定部１３０９は、ボトルネックの仮想ルーター２０９に割り当てられているＣＰＵ番号を特定する（Ｓ４２０７）。出力処理部１３１１は、ボトルネックの仮想スイッチ名及びＣＰＵ番号を出力する（Ｓ４２０９）。更に、出力処理部１３１１は、ボトルネックの仮想ルーター名及びＣＰＵ番号を出力する（Ｓ４２１１）。そして、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１６６】
一方、ボトルネックの仮想ルーター２０９を特定しなかった場合には、ＣＰＵ特定部１３０９は、ボトルネックの仮想スイッチ２０７に割り当てられているＣＰＵ番号を特定する（Ｓ４２１３）。出力処理部１３１１は、ボトルネックの仮想スイッチ名及びＣＰＵ番号を出力する（Ｓ４２１５）。そして、端子Ｉを介して図３６のＳ１８０１に示した処理に戻って、上述した処理を繰り返す。
【０１６７】
本実施の形態によれば、ボトルネックとして検出された仮想ノードと同時にボトルネックとなっている他の仮想ノードを見つけ易い。
【０１６８】
また、複数の仮想ノードで共用されるＣＰＵの停滞に基づき同期するボトルネックを特定し易い。
【０１６９】
［実施の形態２］
上述した実施の形態では、キャッシュミスの増加数に基づいて同時にボトルネックとなっている仮想ノードを特定する例について説明した。本実施の形態では、パケットの連続期間に基づいて同時にボトルネックとなっている仮想ノードを特定する例について説明する。
【０１７０】
図４４に示した例は、１つのＣＰＵにおいて仮想マシンプログラム及び仮想ルータープログラムが実行されている状態を想定している。ＣＰＵは、所定の間隔で実行プログラム（つまり、プロセス）を切り替える。Ｔ１期間では、仮想マシン２０５のプロセスが実行され、Ｔ２期間では、仮想ルーター２０９のプロセスが実行され、Ｔ３期間では、仮想マシン２０５のプロセスが実行される。従って、仮想ルーター２０９のプロセスは、Ｔ１期間及びＴ３期間において待機する。また、仮想マシン２０５のプロセスは、Ｔ２期間において待機する。
【０１７１】
このとき、仮想マシン２０５がパケットを連続的に送信すると想定すると、仮想分析装置２１１はＴ１期間において当該パケットを連続的に取得する。また、仮想ルーター２０９がパケットを連続的に送信すると想定すると、仮想分析装置２１１はＴ２期間において当該パケットを連続的に取得する。Ｔ３期間については、Ｔ１期間と同様である。
【０１７２】
このように仮想マシン２０５が送信元であるパケットを連続的に取得した期間の長さは、ＣＰＵにおける実行プログラムの切り替え間隔と一致する。また、仮想ルーター２０９が送信元であるパケットを連続的に取得した期間の長さは、ＣＰＵにおける実行プログラムの切り替え間隔と一致する。更に、両期間が交互に繰り返される。仮想分析装置２１１は、この特性を利用して仮想マシン２０５と同じＣＰＵが割り当てられている仮想ルーター２０９を特定する。
【０１７３】
図４５に、実施の形態２に係る仮想分析装置２１１のモジュール構成例を示す。仮想分析装置２１１は、パケット取得部１３０１乃至ノード特定部３４０３の他に、実行期間判定部４５０１を有する。実行期間判定部４５０１は、仮想ノードプログラムが実行された期間（以下、実行期間という。）を判定する。実行期間判定部４５０１は、ハードウエア資源（例えば、図５０）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【０１７４】
更に、仮想分析装置２１１は、ノード記憶部１３３１乃至キャッシュミス記憶部３４３１の他に、実行期間記憶部４５３１を有する。実行期間記憶部４５３１は、実行期間テーブルを記憶する。実行期間記憶部４５３１は、ハードウエア資源（例えば、図５０）を用いて実現される。
【０１７５】
図４６に、実行期間テーブルの例を示す。実行期間テーブルは、仮想ノード毎に設けられる。この例における実行期間テーブルは、仮想ノードのプログラムにおける実行期間に対応するレコードを有している。実行期間テーブルのレコードは、期間ＩＤが格納されるフィールドと、開始時点が格納されるフィールドと、終了時点が格納されるフィールドとを有している。
【０１７６】
期間ＩＤは、当該仮想ノードのプログラムに係る実行期間を識別する。開始時点は、実行期間の始まりを特定する。開始時点は、実行期間の終わりを特定する。
【０１７７】
本実施の形態では、メイン処理（Ｃ）を実行する。図４７に、メイン処理（Ｃ）フローを示す。Ｓ１８０１乃至Ｓ１８０５の処理は、図１８の場合と同様である。
【０１７８】
Ｓ１８０５の処理を終えると、実行期間判定部４５０１は、実行期間判定処理を実行する（Ｓ４７０１）。実行期間判定部４５０１は、実行期間判定処理において、Ｓ１８０１で取得したパケットの送信元に相当する仮想マシン２０５を実現するプログラムがＣＰＵにおいて実行されている期間を判定する。
【０１７９】
図４８に、実行期間判定処理フローを示す。実行期間判定部４５０１は、Ｓ１８０１で取得したパケットと同じ送信元から送られたパケットのうち、直近のパケットの取得時刻を特定する（Ｓ４８０１）。実行期間判定部４５０１は、当該取得時刻からの経過時間を算出する（Ｓ４８０３）。実行期間判定部４５０１は、経過時間が基準時間を超えているか否かを判定する（Ｓ４８０５）。基準時間は、連続するパケットの取得間隔に相当する。
【０１８０】
経過時間が基準時間を超えていないと判定した場合には、そのまま呼び出し元の処理に復帰する。
【０１８１】
経過時間が基準時間を超えていると判定した場合には、実行期間判定部４５０１は、上述した直近のパケットの取得時刻を前の実行期間における終了時点に設定する（Ｓ４８０７）。また、実行期間判定部４５０１は、図４７のＳ１８０１においてパケットを取得した時刻、つまり今回の取得時刻を新しい実行期間における開始時点に設定する（Ｓ４８０９）。そして、呼び出し元の処理に復帰する。
【０１８２】
図４７の説明に戻る。Ｓ１８０７以降の処理は、メイン処理（Ｂ）の場合と同様である。但し、第１ルーター特定処理（Ａ）に代えて、第１ルーター特定処理（Ｂ）を実行する。
【０１８３】
図４９に、第１ルーター特定処理（Ｂ）フローを示す。ノード特定部３４０３は、ボトルネックの仮想マシン２０５を実現するプログラムの実行期間の長さがＣＰＵにおける実行プログラムの切り替え間隔と一致するか否かを判定する（Ｓ４９０１）。
【０１８４】
ボトルネックの仮想マシン２０５を実現するプログラムの実行期間の長さがＣＰＵにおける実行プログラムの切り替え間隔と一致しないと判定した場合には、ボトルネックの仮想マシン２０５のプログラムと並行に動作するプログラムはない。従って、第１ルーター特定処理（Ｂ）を終え、呼び出し元の処理に復帰する。
【０１８５】
一方、仮想マシンプログラムの実行期間の長さが実行プログラムの切り替え間隔と一致すると判定した場合には、ノード特定部３４０３は、ボトルネックの仮想マシン２０５が属するサブネットワークに接続している仮想ルーター２０９を１つ特定する（Ｓ４９０３）。
【０１８６】
ノード特定部３４０３は、当該仮想ルーター２０９を実現するプログラムの実行期間の長さがＣＰＵにおける実行プログラムの切り替え間隔と一致するか否かを判定する（Ｓ４９０５）。当該仮想ルータープログラムの実行期間の長さが実行プログラムの切り替え間隔と一致しない場合には、当該仮想ルーター２０９を実現するプログラムと並行に動作するプログラムはない。この場合は、Ｓ４９１１に示した処理に移る。
【０１８７】
一方、当該仮想ルータープログラムの実行期間の長さが実行プログラムの切り替え間隔と一致する場合には、ノード特定部３４０３は、当該仮想ルータープログラムの実行期間がボトルネックの仮想マシン２０５の待ち期間と一致するか否かを判定する（Ｓ４９０７）。
【０１８８】
当該仮想ルータープログラムの実行期間がボトルネックに係る仮想マシンプログラムの待ち期間と一致する場合には、ノード特定部３４０３は、当該仮想ルーター２０９をボトルネックであると判定する（Ｓ４９０９）。そして、第１ルーター特定処理（Ｂ）を終え、呼び出し元の処理に復帰する。
【０１８９】
一方、当該仮想ルータープログラムの実行期間がボトルネックに係る仮想マシンプログラムの待ち期間と一致しない場合には、当該仮想ルーター２０９を実現するプログラムは、ボトルネックの仮想マシン２０５を実現するプログラムと異なるＣＰＵで実行されている。この場合は、Ｓ４９１１に示した処理に移る。
【０１９０】
ノード特定部３４０３は、未処理の仮想ルーター２０９があるか否かを判定する（Ｓ４９１１）。未処理の仮想ルーター２０９があると判定した場合には、Ｓ４９０３に示した処理に戻って、上述した処理を繰り返す。一方、未処理の仮想ルーター２０９がないと判定した場合には、ボトルネックである仮想ルーター２０９はない。この場合には、そのまま呼び出し元の処理に復帰する。
【０１９１】
本実施の形態によれば、ボトルネックとして検出された仮想ノードと同時にボトルネックとなっている他の仮想ノードを見つけ易い。
【０１９２】
また、複数の仮想ノードで共用される演算装置の停滞に基づき同期するボトルネックを特定し易い。
【０１９３】
以上本発明の実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
【０１９４】
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
【０１９５】
なお、上で述べたサーバ装置１０１は、コンピュータ装置であって、図５０に示すように、メモリ２５０１と複数のＣＰＵ２５０３ａ乃至２５０３ｃ等とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、いずれかのＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。各ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べた各ＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１９６】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１９７】
本実施の形態に係る情報処理装置は、複数の仮想ノードを含む仮想化システムを実現する情報処理装置であって、（Ａ）ボトルネックである第１の仮想ノードを検出する検出部と、（Ｂ）第１の仮想ノードを実現するための第１プログラムを実行する際の第１キャッシュミス数と、第１の仮想ノード以外の仮想ノードを実現するための第２プログラムを実行する際の第２キャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する特定部とを有する。
【０１９８】
このようにすれば、同時に発生した複数のボトルネックを見つけ易い。
【０１９９】
更に、第１キャッシュミス数は、第１プログラムを実行する演算装置においてカウントされるようにしてもよい。また、第２キャッシュミス数は、第２プログラムを実行する演算装置においてカウントされるようにしてもよい。
【０２００】
このようにすれば、複数の仮想ノードで共用される演算装置の停滞に基づき同期するボトルネックを特定し易い。
【０２０１】
更に、上記特定部は、第１の仮想ノードが送信元であるパケットが連続して伝送された第１期間と、第１の仮想ノード以外の仮想ノードが送信元であるパケットが連続して伝送された第２期間とに基づいて、ボトルネックである第３の仮想ノードを特定するようにしてもよい。
【０２０２】
このようにすれば、同時に発生した複数のボトルネックを見つけ易い。
【０２０３】
更に、第１期間と第２期間とが交互に繰り返される場合に、上記特定部は、第１の仮想ノード以外の仮想ノードがボトルネックであると判定するようにしてもよい。
【０２０４】
このようにすれば、複数の仮想ノードで共用される演算装置の停滞に基づき同期するボトルネックを特定し易い。
【０２０５】
なお、上で述べた情報処理装置による処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
【０２０６】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２０７】
（付記１）
複数の仮想ノードを含む仮想化システムを実現する情報処理装置であって、
ボトルネックである第１の仮想ノードを検出する検出部と、
前記第１の仮想ノードを実現するための第１プログラムを実行する際の第１キャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するための第２プログラムを実行する際の第２キャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する特定部と
を有する情報処理装置。
【０２０８】
（付記２）
前記第１キャッシュミス数は、前記第１プログラムを実行する演算装置においてカウントされ、
前記第２キャッシュミス数は、前記第２プログラムを実行する演算装置においてカウントされる
付記１記載の情報処理装置。
【０２０９】
（付記３）
前記特定部は、
前記第１の仮想ノードが送信元であるパケットが連続して伝送された第１期間と、前記第１の仮想ノード以外の仮想ノードが送信元であるパケットが連続して伝送された第２期間とに基づいて、ボトルネックである第３の仮想ノードを特定する
情報処理装置。
【０２１０】
（付記４）
前記第１期間と前記第２期間とが交互に繰り返される場合に、前記特定部は、前記第１の仮想ノード以外の前記仮想ノードが前記ボトルネックであると判定する
付記３記載の情報処理装置。
【０２１１】
（付記５）
複数の仮想ノードを含む仮想化システムを実現するコンピュータに
ボトルネックである第１の仮想ノードを検出し、
前記第１の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する
処理を実行させる分析プログラム。
【０２１２】
（付記６）
複数の仮想ノードを含む仮想化システムを実現するコンピュータにより実行される分析方法であって、
ボトルネックである第１の仮想ノードを検出し、
前記第１の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数と、前記第１の仮想ノード以外の仮想ノードを実現するためのプログラムを実行する際のキャッシュミス数とに基づいて、ボトルネックである第２の仮想ノードを特定する
を含む分析方法。
【符号の説明】
【０２１３】
１０１  サーバ装置    ２０１  ＯＳ
２０３  ハイパーバイザ    ２０５  仮想マシン
２０７  仮想スイッチ    ２０９  仮想ルーター
２１１  仮想分析装置    １３０１  パケット取得部
１３０３  記録処理部    １３０５  遅延判定部
１３０７  ノード検出部    １３０９  ＣＰＵ特定部
１３１１  出力処理部    １３３１  ノード記憶部
１３３３  サブネットワーク記憶部    １３３５  ネットワーク接続記憶部
１３３７  コネクション記憶部    １３３９  ログ記憶部
１３４１  通信遅延記憶部    ３４０１  算出部
３４０３  ノード特定部    ３４３１  キャッシュミス記憶部
４５０１  実行期間判定部    ４５３１  実行期間記憶部
【図１】
2018085674.tif 000003
【図２】
2018085674.tif 000004
【図３】
2018085674.tif 000005
【図４】
2018085674.tif 000006
【図５】
2018085674.tif 000007
【図６】
2018085674.tif 000008
【図７】
2018085674.tif 000009
【図８】
2018085674.tif 000010
【図９】
2018085674.tif 000011
【図１０】
2018085674.tif 000012
【図１１】
2018085674.tif 000013
【図１２】
2018085674.tif 000014
【図１３】
2018085674.tif 000015
【図１４】
2018085674.tif 000016
【図１５】
2018085674.tif 000017
【図１６】
2018085674.tif 000018
【図１７】
2018085674.tif 000019
【図１８】
2018085674.tif 000020
【図１９】
2018085674.tif 000021
【図２０】
2018085674.tif 000022
【図２１Ａ】
2018085674.tif 000023
【図２１Ｂ】
2018085674.tif 000024
【図２２】
2018085674.tif 000025
【図２３】
2018085674.tif 000026
【図２４】
2018085674.tif 000027
【図２５】
2018085674.tif 000028
【図２６】
2018085674.tif 000029
【図２７】
2018085674.tif 000030
【図２８】
2018085674.tif 000031
【図２９】
2018085674.tif 000032
【図３０】
2018085674.tif 000033
【図３１】
2018085674.tif 000034
【図３２】
2018085674.tif 000035
【図３３】
2018085674.tif 000036
【図３４】
2018085674.tif 000037
【図３５】
2018085674.tif 000038
【図３６】
2018085674.tif 000039
【図３７】
2018085674.tif 000040
【図３８】
2018085674.tif 000041
【図３９】
2018085674.tif 000042
【図４０】
2018085674.tif 000043
【図４１】
2018085674.tif 000044
【図４２】
2018085674.tif 000045
【図４３】
2018085674.tif 000046
【図４４】
2018085674.tif 000047
【図４５】
2018085674.tif 000048
【図４６】
2018085674.tif 000049
【図４７】
2018085674.tif 000050
【図４８】
2018085674.tif 000051
【図４９】
2018085674.tif 000052
【図５０】
2018085674.tif 000053