図1に示される仮想マシン5及び6がクライアントに処理結果を送信するために、処理結果であるパケットがNIC8を介してネットワーク13に送信されるのに対して、それらのパケット全てがNIC10を介して解析装置4に送信されないことがある。
NIC8及びNIC10はIOバス11に接続されており、NIC8及びNIC10に同時にパケットを転送できないため、IOバス11の占有期間がシェアされることで、バッファ12にバッファリングされたパケットがNIC8及びNIC10の各々に順次転送される。NIC10にパケットを転送する処理は通信解析のために実行される処理であるため、クライアントへの処理結果の送信に不要な遅延が生じないよう、NIC8へパケットを転送するためのIOバス11の占有時間に影響を与えない範囲で、NIC10へパケットを転送するためのIOバスの占有時間が確保される。
また、NIC10にパケットを転送する処理は通信解析のために実行される処理である
ため、NIC10へのパケット転送に割り当てられるCPU(Central Processing Unit)の処理量が抑えられ、仮想マシン5及び6の実行、仮想マシン5及び6間の通信、及びデータセンタ1の外部との通信などの他の各種処理にCPUリソースが割り当てられる。
仮想マシン5及び6からバッファ12にパケットが転送される場合には、バッファ12として機能するメモリに対してCPUがメモリバスを介してデータを転送する。例えば、動作速度が4GHzのCPUによって、動作速度が1GHzのメモリに対してバス幅が128ビットのメモリバスを介してデータが転送される。他方で、バッファ12からNIC8及び10へのパケットの転送処理は、例えば、CPUによって、バス幅が32ビットのIOバスを介して50MHzの転送速度で実行される。つまり、NIC8及び10への転送処理は、バッファ12として機能するメモリへの転送処理に対して、CPUを占有する時間がオーダーで2桁程度長くなってしまう。また、NIC8及び10がネットワーク13にパケットを送信する際の転送能力にも制約があるため、その転送能力を超えてしまっている場合には、NIC8及び10へのパケット転送にかかるCPUの処理が待たされることがある。
このように、メモリへのデータの転送処理に割り当てられるCPUの占有時間よりもNIC8及び10へのデータの転送処理に割り当てられるCPUの占有時間が相対的に大きくなる。とりわけ、NIC8及び10へのデータの転送処理に割り当てられるCPUリソースが、CPUリソース全体に対して大きく占めてしまう。そこで、有限であるCPUリソースが通信解析のための処理以外に割り当てられるようにされることが望まれる。
以上に述べた理由のために、バッファ12にバッファリングされたパケットがNIC10に転送される際の転送量の上限に制約条件を課して、この転送量の上限内でIOバス11を占有する時間や、パケット転送にかかるCPUの処理量が割り当てられる。例えば、バッファ12にバッファリングされたパケットがNIC10に転送される際に間引かれることで、NIC10に転送されるパケット数が制限され、IOバス11を占有する時間や、パケット転送にかかるCPUの処理量が減らされる。
また、NIC10へ転送されるパケットが間引かれる場合に、パケットがランダムに間引かれることがある。ランダムにパケットが間引かれる理由は、仮想マシン5及び6が間欠的にパケットを送信しているため、定まった間隔でパケットが間引かれると、特定のパケットばかりが間引かれる可能性があるからである。ランダムにパケットが間引かれることで、解析装置4に送信されるパケットの種類に偏りが生じなくなる。なお、NIC10へ転送されるパケットが間引かれる場合、解析装置4ではパケットの収集をしないことになるため、ある程度の時間をかけて通信解析のためのパケット量を確保することとなる。
また、解析装置4には、図示されていないが、複数のサーバから通信解析のためのパケットが送信される。そのため、各サーバが何の制約もなくパケットを解析装置4に送信してしまうと、解析装置4の受信能力を超えたパケットが送信されてしまう可能性がある。また、システムのコストを下げるために、解析装置4と複数のサーバとの間の回線の性能を抑え、帯域の狭い回線とせざるをえない場合もある。このような場合でも、通信回路であるNIC10に転送されるパケットの転送量の上限に制約条件が課され、解析装置4に送信されるパケット数を制限させるために、NIC10に転送されるパケットが間引かれることがある。
しかし、複数の通信のパケットがバッファリングされ、通信回路への転送量の上限の制約条件を満たすためにバッファリングされたパケットが間引かれ、通信回路に転送されるパケット数が制限されると、特定の通信のパケットばかりが通信回路に転送されてしまい
、他の通信のパケットが転送されにくいことがある。
例えば、複数の通信の通信量に差がある場合、通信量が少ない通信のパケットが間引かれると、通信回路に転送されるパケット数が少なくなり、通信解析の精度を保つためのパケット数を確保できない。この場合、通信解析の精度を保つためのパケット数を確保するためには、パケットを長時間収集することになってしまい、通信解析が待たされる。
他方で、通信量の少ない通信のパケットが通信回路に転送される確率を上げるために、パケットを間引く量を減らしてしまうと、通信解析のために割り当てるバスの占有時間やCPUの処理量が増えてしまうというジレンマがある。
後述される実施例によれば、複数の通信の通信量及び通信回路に対するパケット転送量の上限に応じて、通信解析が可能な数以上になるように通信毎に決定されたパケット数を通信回路に転送する事で、解析に必要なパケットを制約内で効率よく収集できる。
図2に、実施例のサーバのハードウェア構成が示される。実施例が適用されたサーバは、CPU200、メモリコントローラ201、メモリ202及び203、メモリバス204、IOバスコントローラ205、NIC206−208、記憶装置209、及びIOバス210を含む。
メモリバス204に接続されたメモリ202及び203の少なくとも何れか一方には、サーバの各種処理を実行するためのプログラムが格納されている。CPU200は、メモリコントローラ201を介して、メモリ202及び203からプログラムを読み出し、各種処理を実行する。CPU200によって実行される各種処理に伴い、メモリ202及び203に対するデータの書き込み及び読み出しがメモリコントローラ201を介して実行される。
CPU200は、IOバスコントローラ205を介して、IOバス210に接続されたNIC206―208にサーバから送信されるデータやパケットを転送し、また、サーバに対して送信されたデータやパケットを受信する。CPU200は、IOバスコントローラ205を介して、IOバス210に接続された記憶装置209からデータを読み出し、また記憶装置209にデータを書き込む。
CPU200は、各種処理を実行するための1以上のCPUコアを含んでいてよい。また、各CPUコアは1以上のプロセッサを含んでいてもよい。メモリ202及び203は、例えばDRAM(Dynamic Random Access Memory)などのRAMである。記憶装置209は、例えば、ROM(Read Only Memory)やフラッシュメモリなどの不揮発性メモリ、又はHDD(Hard Disk Drive)等の磁気ディスク装置である。なお、CPU200、メモリコントローラ201、メモリ202及び203、NIC206−208、及び、記憶装置209が同じバスに接続された構成を実施例に適用してもよい。図2に示されるサーバのハードウェア構成によって、後述されるサーバの処理及び機能ブロックが実現される。
図3に、実施例の情報処理システムの例が示される。データセンタ300が情報処理システムの例である。ネットワーク305に接続されたデータセンタ300は、サーバ310、サーバ350、ロードバランサ370、VM管理サーバ380、及び解析装置390を含む。サーバ310は、仮想マシン311−313、仮想スイッチ314、バッファ315及び325、NIC316−318、ソータ320、キュー321−323、及び、アナライザ324を含む。NIC316−318の各々には、図2に示されるNIC206−208で例示される通信回路が適用されればよい。サーバ350は、仮想マシン35
1及び352、仮想スイッチ354、バッファ355及び365、NIC356−358、ソータ360、キュー361及び362、及び、アナライザ364を含む。NIC356−358の各々には、図2に示されるNIC206−208で例示される通信回路が適用されればよい。なお、サーバ310及びサーバ350が、図2に示されるハードウェア構成を含むとして後述するが、サーバ310及びサーバ350のハードウェア構成は図2に示されるハードウェア構成に限定されず、サーバ310及びサーバ350のハードウェア構成にはコンピュータとしての処理を実行可能なハードウェア構成を適用すればよい。
仮想マシン311−313、仮想スイッチ314、仮想マシン351及び352、及び仮想スイッチ354は、各々サーバ310及び350において、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることにより機能する。なお、各サーバ310及び350内において、仮想スイッチ314、仮想マシン351及び352、及び仮想スイッチ354には、VM管理サーバ380からNIC317及び357を介して各サーバ310及び350に送信される管理情報に従って物理リソースが割り当てられる。
ネットワーク305に接続されたクライアントからデータセンタ300に処理の要求に送信されると、処理の要求がロードバランサ370によって受信される。ロードバランサ370は、要求される処理の内容やクライアントが指定した宛先に従って、サーバ310又はサーバ350に処理の要求を送信する。
ここで、クライアントから要求された処理が、サーバ310で実行される仮想マシン311で処理される場合に沿って例示する。サーバ310では、NIC316を介してクライアントからの処理の要求を受信する。受信した要求をNIC316から受け取った仮想スイッチ314が、要求される処理の内容やクライアントが指定した宛先を判定し、判定の結果に従って、仮想マシン311によって要求された処理が実行される。仮想マシン311によって実行された処理の結果は、仮想スイッチ314内のバッファ315でバッファリングされる。なお、バッファ315はメモリ202、メモリ203、又はレジスタなどに記憶領域を使用すればよい。バッファ315でバッファリングされた処理結果が、IOバスを介してNIC316に転送され、ロードバランサ370を介してネットワーク305に接続されたクライアントに送信される。
また、データセンタ300内では、仮想マシン311−313、仮想マシン351及び352が互いに情報を通信しあうことで連携し、特定の処理を分散して処理する。
以上に述べた、仮想マシンによる通信がフローとよばれることがあり、データセンタ300を利用したシステムを管理するために、複数のフロー毎に通信状況が監視される。なお、フローは、仮想マシン毎や、仮想マシンによって実行されているアプリケーションの種類や、通信されるパケットの送信元アドレスや宛先アドレスや、通信されるパケットのプロトコルなどで分類される。また、ひとつの仮想マシンが複数のクライアントと通信しあう場合には、ひとつの仮想マシンに対して複数のフローが存在する場合がある。
ここで、各サーバ310及び350内で実行される仮想スイッチによる動作を、仮想スイッチ314に沿って例示する。
仮想マシン311−313が送信するパケットが、仮想スイッチ314のバッファ315にバッファリングされる。バッファ315にバッファリングされたパケットが、ネットワーク305に送信されるためにNIC316に転送される。他方で、バッファ315の出力がソータ320に転送される。なお、図示されていないがバッファ315の入力をソ
ータ320に転送してもよい。ソータ320は、受け取ったパケットのヘッダ情報に基づいてパケットをソートする。例えば、パケットのヘッダにある送信元アドレスや宛先アドレス、プロトコルの種類、又は仮想マシンのIDに基づいて、パケットをソートする。ソータ320によるパケットをソートする際のソート基準は、例えば、パケットを収集して通信の解析をする際の解析ポリシーに従い、パケットをどの種類の単位で解析するかによって決めればよく、通信解析の対象となる粒度に合わせればよい。
ソータ320は、ソート基準に従って、パケットをソート基準毎に設けられたキュー321−323に格納する。キュー321−323に格納されたパケットは、後述されるアナライザ324によって決定されたパケット数がバッファ325に転送されるように一部のパケットが廃棄されることで間引かれて、間引かれずに残されたパケットが通信解析のためにサンプリングされたパケットとしてバッファ325に転送される。なお、パケットを間引く場合には、仮想マシン311−313が間欠的にパケットを送信しており、定まった間隔でパケットが間引かれると、間欠的に送信されている特定のパケットばかりが間引かれる可能性があるため、ランダムにパケットが間引くことで、サンプリングされるパケットの種類に偏りが生じないようにしてもよい。ソータ320及び360の詳細な例が、図4〜6に沿って後述される。
キュー321−323においてサンプリングされたパケットが格納されたバッファ325から、サンプリングされたパケットがNIC318に転送される。NIC318は、転送されたパケットを、パケットに基づく通信解析をするためにパケットを収集する解析装置390に送信する。なお、キュー321−323、及びバッファ325には、メモリ202、メモリ203、又はレジスタなどに記憶領域を使用すればよい。
ここで、図3に沿って上述したが、バッファ325からNIC318へ転送されるパケットの転送量の上限には制約条件が設定されることがある。それは、NIC318がネットワーク305にパケットを送信するためのNIC316と同じIOバスに接続されているため、NIC316へのパケット転送のために占有されるIOバスの占有時間に影響を与えない範囲で、通信解析の目的であるNIC318にパケットを転送するための占有時間が確保されるようにするためである。
ところで、ネットワーク305に送信されるパケットの通信量は、クライアントからの要求頻度や送信するパケットの種類に依存し、例えば、動画データが配信される場合には定常的に比較的大きな通信量の通信が行われるものの、アプリケーションへのログインのための認証処理などではクライアントから要求されたタイミングで認証処理の応答が通信されるため通信量が比較的少ない。また、複数のクライアントから同時期に要求された処理に対して応答する場合には、通信量が増えることがある。すなわち、ネットワーク305に送信されるパケットの通信量は変動する。
そこで、ネットワーク305に送信されるパケットの通信量の変動、すなわち、NIC316に転送されるパケットの転送量の変動に合わせて、NIC318に転送されるパケットの転送量の上限を決めてもよい。また、NIC316に転送されるパケットの転送量が変動するものの、その転送量が最大となる場合に占有されるIOバスの占有時間に対して影響を与えないように、NIC318へのパケット転送量の上限を設定してもよい。例えば、NIC316に転送されるパケット数の512分の1の割合や1024分の1の割合といった固定値を、NIC318に転送されるパケット数の上限として設定してもよい。
アナライザ324は、NIC318に転送されるパケットの転送量の上限内で、バッファ325に転送されるパケット数をキュー321−323毎に決定する。これは、キュー
321−323に格納されるパケットが、解析装置390に収集されたパケットに基づく通信解析の単位に応じた通信毎にソータ320によってソートされたパケットであるため、アナライザ324によって、バッファ325に転送されるパケット数が通信毎に決定されているともいえる。なお、各通信のパケット数の合計がNIC318に転送されるパケットの転送量の上限内にするために、各通信においてパケットが間引かれて残ったパケット数が、アナライザ324によって決定されたパケット数となるようにサンプリングされ、サンプリングされたパケット数は通信毎の通信解析に要求されるパケット数以上であるようにアナライザ324によって決定される。アナライザ324及び364の詳細な例が、図8〜10に沿って後述される。
図4に、実施例のソータの機能ブロックの例が示される。ソータ320および360の各々では、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることにより、特定部400、判定部410、割り当て部420、及び、転送部430として機能する。各機能ブロックにより実行される処理は、図6に示される処理に対応させて後述される。
図5に、実施例のパケット情報及び通信特定情報の例が示される。ここでは、図3に示されるサーバ310で実行される仮想スイッチ314内のソータ320に沿って例示する。なお、サーバ350で実行される仮想スイッチ354内のソータ360も、ソータ320で例示した動作を実行可能である。
図5Aに、ソータ320が受信したパケットのヘッダ情報に基づいて、メモリ202又は203に格納されるパケット情報の例が示される。パケット情報では、パケットを受信した受信時刻、及び、パケットのヘッダ情報に基づく宛先アドレス、送信元アドレス、TCP(Transmission Control Protocol)のポート番号、及び、パケットのペイロードの情報が互いに関連付けられている。例えば、時刻が“3”の時に、宛先アドレスが“00−90−27−AA−74−E0”、送信元アドレスが“00−90−27−BB−86−E3”、ポート番号が“80”の情報がヘッダ情報として格納され、ペイロード情報として“get index.html”が格納されたパケットがソータ320によって受信されたことが示される。
なお、ソータ320は、受信したパケット順にソート処理を実行するものとして、受信時刻を監視しなくてもよい。また、ペイロードの情報を図5Aに示されるパケット情報で管理しなくてもよく、例えば、パケットを収集して通信の解析をする際の解析ポリシーに従い、パケットをどの種類の単位でソートするかに従ってパケット情報で管理する情報を決めればよい。また、宛先アドレス及び送信元アドレスは、通信の宛先となる物理サーバや仮想マシン、ネットワーク内スイッチやルータに割り当てられたMAC(Media Access Control)アドレスやIP(Internet Protocol)アドレスを使用すればよい。
図5Bに、メモリ202又は203に格納される通信特定情報の例が示される。図5Bに示される通信特定情報は、ソータ320がソート処理を実行する際にソータ320によって参照される情報である。図5Bに示される通信特定情報では、TCPのポート番号、TCPのポート番号に関するコメント、及び、フローIDが互いに関連付けられている。例えば、ポート番号が“80”である“HTTP(HyperText Transfer Protocol)”のパケットに対して“0”のフローIDが関連付けられている。また、ポート番号が“20”及び“21”である“FTP(File Transfer Protocol)”のパケットに対して“2”のフローIDが関連付けられている。このように、通信解析の解析対象がポート番号に対応するプロトコル毎である場合には
、通信がポート番号毎に応じてソートされるために、ポート番号に対して通信の種類を特定するためのフローIDが関連付けられる。なお、TCPのポート番号に関するコメントは、情報処理システムを管理する管理者らが情報を参照する場合には参考とされる情報であるため、通信特定情報で管理されなくてもよい。
図5Cに、メモリ202又は203に格納される通信特定情報の他の例が示される。図5Cに示される通信特定情報は、ソータ320がソート処理を実行する際に参照される情報である。図5Cに示される通信特定情報では、送信元アドレス、及び、フローIDが互いに関連付けられている。例えば、送信元アドレスが“00−90−27−BB−86−E3”であるパケットに対して“10”のフローIDが関連付けられている。このように、通信解析の解析対象が送信元アドレス毎である場合には、通信が送信元アドレスに応じてソートされるために、送信元アドレスに対して通信の種類を特定するためのフローIDが関連付けられる。なお、図5Cに示される通信特定情報では、送信元アドレスに代えて、宛先アドレス毎にフローIDを関連付けてもよい。この場合には、宛先アドレス毎の通信が解析される。また、送信元アドレスに代えて、送信元アドレス及び宛先アドレスの組み合わせ毎にフローIDを関連付けてもよい。この場合には、送信元アドレス及び宛先アドレスの組み合わせ毎の通信が解析される。また、送信元アドレス、宛先アドレス、及びポート番号の全て又は何れかの組み合わせ毎にフローIDを関連付けてもよい。この場合には、より複雑な単位で通信が解析される。
ソータ320は、受信したパケットの情報に基づいて図5Aで示されるようにパケット情報を管理し、受信したパケットの情報と図5B及び5Cの通信特定情報とに基づいてパケットをソートとして、フローIDに従った通信毎のパケットを、フローID毎に割り当てられたキュー321−323の何れかの対応するキューに転送する。
図6に、実施例のソータによって実行される処理の例が示される。ここで示される処理の例は、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることで、図3に示されるソータ320及びソータ360によって処理される処理の例である。ここではソータ320により処理が実行されるとして例示するが、ソータ360でも同様の処理が実行される。仮想マシン311−313が送信したパケットを受信すると、パケットをソートする処理を開始するための処理600が、ソータ320によって実行される。
受信したパケットの情報に基づきフローを特定する処理610が、特定部400によって実行される。処理610では、図5Aに示されるように、パケットのヘッダ情報に基づく宛先アドレス、送信元アドレス、TCPのポート番号、及び、パケットのペイロードの情報に基づいてパケット情報が管理される。また、処理610では、図5Bや図5Cに示される通信特定情報に従ってフローが特定される。通信特定情報において、送信元アドレス、宛先アドレス、及びポート番号の何れか、又はそれらの全ての組み合わせもしくはそれらの何れかの組み合わせ毎に、フローIDが関連付けられているので、その関連付けに従い、受信したパケットに含まれるヘッダ情報やペイロードの情報に基づいてフローIDが特定される。
処理610によって特定されたフローにキューが割り当てられているか否かを判定する処理620が、判定部410によって実行される。フローにキューが割り当てられていると判定された場合には、処理640に移る。フローにキューが割り当てられていないと判定された場合には、処理630に移る。
フローに対してキューを割り当てる処理630が、割り当て部420によって実行され
る。処理630によって、メモリ202又は203におけるメモリ空間の何れかが、フローのパケットを格納するためのキューとして割り当てられる。ソータ320は、フローIDとキュー番号との関連付けを管理しており、処理630によってフローIDとキュー番号との新しい関連付けが発生した場合に、管理している関連付けの情報を更新し、メモリ202又は203に保存する。なお、一定時間パケットが格納されないキューがある場合には、ソータ320及びソータ360によって、メモリ202や203においてキューとして割り当てられていたメモリ空間からその割り当てが解除されてもよい。
特定されたフローに割り当てられたキューに対して受信したパケットを転送する処理640が、転送部430によって実行される。処理640によって転送されたパケットがキュー321−323の何れかに格納される。処理640によってパケットが転送されると、特定されたパケットをキューに転送する処理を終えるために、処理650がソータ320によって実行されて処理を終える。
図7に、実施例のパケットが格納されたキューの例が示される。図7に示される例は、ソータ320によって図6に示される処理が実行された結果、仮想マシン311−313が送信したパケットがソートされて、対応するキュー321−323の何れかに格納された様子を示す例である。ここでは、サーバ200に含まれるバッファ315、ソータ320、及び、キュー321−323に沿って例示する。例えば、図5Aに示されるパケット情報にあるように、受信時刻であるtが“3”、“4”及び“11”であるパケットのポート番号がともに“80”である。ソータ320は、処理610によって、それらのパケットの通信を図5Bに示される通信特定情報に基づいて“0”のフローIDとして特定し、処理640によって“0”のフローIDに対応するキュー321にパケットを転送する。キュー321には、図7に示されるように、受信時刻であるtが“3”、“4”及び“11”のパケットが格納されている。同様の処理に従って、受信時刻であるtが“10”のパケットがキュー322に格納され、受信時刻であるtが“15”のパケットがキュー323に格納されている。
図7に示されるように、フロー毎にパケットをキューに格納した場合には、フロー毎に通信量が異なっていると、格納されるパケット数がキュー毎に異なることがある。格納されたパケットのパケット数が異なるキューからバッファ315に転送される際には、後述されるアナライザ324によってフロー毎に決定されたパケット数のパケットが転送されることで、フロー単位の通信毎に決定されたパケット数のパケットがバッファ315に格納されることとなる。
図8に、実施例のアナライザの機能ブロックの例が示される。アナライザ324および364の各々は、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることにより、モニタ部800、算出部801、更新部802、取得部803、設定部804、判定部805、サンプリング部806、及び、転送部807として機能する。各機能ブロックにより実行される処理は、図10に示される処理に対応させて後述される。
図9に、実施例のサンプリング情報の例が示される。サンプリング情報はメモリ202又は203に格納される情報であり、アナライザ324やアナライザ364によって更新される情報である。サンプリング情報では、キュー番号(フローID)、フローの通信量、対応するキューに格納されたパケットがサンプリングされる場合のキュー毎のサンプリング比、及び、サンプリングされるパケットのサンプリング数が互いに関連付けられている。
キュー番号である“n”は、図面に付された符号ではなく、図5B及び5Cに示される通信特定情報に従って特定される“n”番目のフローIDに対応した“n”番目のキューを識別するための番号である。
通信量である“Tn”は、“n”番目のキューに対応した通信である“n”番目のフローの通信量である。後述されるように、アナライザ324やアナライザ364によって、キュー毎に格納されるパケット数が監視されることで測定され、サンプリング情報において更新される。
サンプリング比である“Rn”は、“n”番目のキューに格納されたパケットがサンプリングされる場合のサンプリング比である。各キューのサンプリング比の総和であるΣRnは“1”になるように設定されており、Rn=1/(Tn*Σ(1/Tn))で表される。
サンプリング数である“Sn”は、“n”番目のキューに格納されたパケットがサンプリングされる場合のサンプリング数であり、解析装置に接続されたNICへ転送するためのパケットをバッファリングするためのバッファに対して各キューから転送されるパケット数である。サンプリング数は、Sn=Tn*c*An*Rnで表される。各キューのサンプリング数の総和であるΣSnが、解析装置に接続されたNICへのパケット転送量の上限以下になるように設定されている。
変数“c”は、解析装置に接続されたNICへのパケット転送量の上限に従って決定される変数であり、例えば、パケット転送量の上限が小さく設定されている場合に変数“c”の値も小さく設定される。ただし、ΣSnが、解析装置に接続されたNICへのパケット転送量の上限以下になるように変数“c”は調整される。
変数“An”は、フロー毎に転送されるパケット数に重み付けをつける際に設定される変数である。ただし、ΣSnが、解析装置に接続されたNICへのパケット転送量の上限以下になるように変数“An”が調整される。
例えば、全てのキューに対するAnが“1”に設定された場合には、各キューから転送されるパケット数が揃う。この場合には、フロー毎の通信量に差があったとしても、所定の時間で転送されるパケット数が各フローで揃う。従って、所定の時間で収集されるパケット数に基づいた通信解析が実行される場合に、例えば、通信量の少ない通信に関して収集されるパケットのパケット数も確保することができるので、通信解析の精度を保つことができる。また、この場合、通信毎の通信解析の精度を揃えることとなる。他方で、通信解析に必要とされるパケット数がフロー毎に異なる場合には、変数“An”に差をつけることによって、NICへのパケット転送量の上限内において、フロー毎の通信解析に必要なパケット数以上になるようにパケットを確保することができる。
以上に説明したように、実施例によれば、キューに格納されたパケット全てが転送されるのではなく、NICへのパケット転送量の上限内で、通信毎の通信解析に必要なパケット数以上になるように、アナライザによって決定されるフロー毎のサンプリング数に従ったパケット数のパケットが転送される。
図10に、実施例のアナライザによって実行される処理の例が示される。ここで示される処理の例は、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることで、図3に示されるアナライザ324及びアナライザ364によって処理される処理の例である。ここではアナライザ324により
処理が実行されるとして例示するが、アナライザ364でも同様の処理が実行される。
フロー毎の通信のサンプリング数を決定するための処理の実行が指示されると、図10に示される処理を開始させるための処理1000がアナライザ324によって実行される。
各キューに格納されるパケットをモニターする処理1001が、モニタ部800によって実行される。処理1001によって、ソータ320からキュー321−323の各々に転送されるパケットがモニターされる。なお、図6に示される処理630に従ってキューが増えた場合には、ソータ320からその増えたキューに転送されるパケットもモニターされるようになる。他方で、所定時間パケットが転送されなかったキューが消去された場合には、モニタ部800はその消去されたキューに対するモニターを停止するようにしてもよい。
モニターされたパケットに基づきn番目のフローの通信量Tnをキュー毎に算出する処理1002が、算出部801によって実行される。処理1002によって、例えば、単位時間当たりにソータ320からキュー321に転送されたパケット数やパケットのデータ量に基づいて、キュー321に対応するフローの通信量が算出される。なお、処理1002によるフロー毎の通信量の算出では、定期的に繰り返して単位時間当たりの通信量が算出されるようにしてもよい。
算出された通信量Tnに基づきパケット情報を更新する処理1003が、更新部802によって実行される。処理1003によって、処理1002により算出された通信量に基づいて、図9に示されるサンプリング情報の通信量Tnが更新される。
所定時間経過したか否かを判定する処理1004が、モニタ部800によって実行される。所定時間が経過していないと判定された場合には、処理1001に移る。所定時間が経過したと判定された場合には、処理1005に移る。処理1005では、処理1002によって算出された通信量に基づいて各キューに対するサンプリング数が算出されるが、このサンプリング数の算出を処理1002による通信量の算出の度に実行する場合には、処理1004を省略してもよい。処理1004によって、処理1002が実行されるタイミングとは異なるタイミングでサンプリング数を算出する処理が実行されるように設定できるため、サンプリング数の算出に割り当てる処理負荷に応じて処理1004の所定時間が設定されてもよい。
キュー毎(フローID毎)のサンプリング比であるRn=1/(Tn*Σ(1/Tn))を算出する処理1005が、算出部801によって実行される。処理1005によって、処理1002により算出された通信量Tnに基づいてキュー毎(フローID毎)のサンプリング比Rnが算出されて、図9に示されるサンプリング情報のサンプリング比Rnが更新される。
転送量の上限に基づく変数“c”及び重み付け変数“An”を取得する処理1006が、取得部803によって実行される。処理1006によって、図9に沿って説明された変数“c”及び変数“An”がメモリ202又は203から読み出されることにより、取得部803によって取得される。
キュー番号(フローID番号)であるnを初期値に設定する処理1007が、設定部804によって実行される。処理1007では、例えば、nの初期値として“0”が設定される。
設定されたn番目のキューにパケットが格納されているか否かが判定される処理1008が、判定部805によって実行される。パケットが格納されていないと判定された場合には処理1009に移り、パケットが格納されていると判定された場合には処理1010に移る。
キュー番号(フローID番号)であるnの値を再設定する処理1009が、設定部804によって実行される。処理1009では、例えば、すでに設定されているnの値を1つ増やす処理が実行される。なお、実施例は処理1009に限定されず、キュー毎(フロー毎)にサンプリング数が決定されるように各キューが選択されるようなアルゴリズムを適用すればよい。
設定されたn番目のキューからTn*c*An*Rn個のパケットをサンプリングする処理1010が、サンプリング部806によって実行される。Tnは、処理1002により算出されたn番目のフローの通信量である。“c”は、処理1006によって取得された、解析装置に接続されたNICへのパケット転送量の上限に従って決定される変数である。“An”は、処理1006によって取得された、フロー毎に転送されるパケット数に重み付けをつける際に設定される変数である。“Rn”は、処理1005により算出されたn番目のキューに対するサンプリング比である。処理1010によって、キュー毎に決定されたサンプリング数であるTn*c*An*Rn個のパケットがサンプリングされる。なお、Tn*c*An*Rn個のパケットがサンプリングされればよいので、キューに格納されたパケットからTn*c*An*Rn個のパケットがランダムにサンプリングされてもよく、ランダムにサンプリングされた場合には、間欠的に転送されてキューに格納されたパケットから偏りなくパケットがサンプリングされる。
サンプリングされたパケットをバッファに転送する処理1011が、転送部807によって実行される。処理1011によって、処理1010によりn番目のキューからサンプリングされたTn*c*An*Rn個のパケットが、図3に示されるバッファ315に転送される。なお、処理1011は、処理1010の直後に実行される場合に限定されず、2以上のキューに対するパケットのサンプリングが完了してから、サンプリングされたパケットをまとめてバッファに転送するようにしてもよい。
全てのキューに対して処理1010及び1011が済んでいるか否かを判定する処理1012が、判定部805によって実行される。処理済みでないと判定された場合には、処理1009に移る。処理済みであると判定された場合には、処理1013に移る。
各キューに格納されたパケットを消去する処理1013が、更新部802によって実行される。処理1013により、各キューからデータが消去される。処理1014がアナライザ324によって実行されることにより、フロー毎の通信のサンプリング数を決定するための処理が終了される。なお、図10に示された処理が継続される場合には、処理1013の後に処理1001に移ればよい。
図11に、実施例の解析装置が収集した情報の解析の例が示される。図11に示される解析の例は、解析装置390が、図10に示される処理に従って、収集されたパケットに基づいて通信解析を実行した場合の例であり、複数の業務用アプリケーション毎の通信頻度が解析されている。
図11A、B及びCには、通信解析が実行される際に使用されたパケット数が異なる例が示されており、図11Aには解析に用いられたパケット数が最も多い例が、図11Cには解析に用いられたパケット数が最も少ない例が、そして、図11Bには解析に用いられたパケット数がそれらの間である例が示されている。なお、図11A、B及びCに示され
る例は、互いに異なる期間内に通信されるパケットをサンプリングした場合の例ではなく、同じ期間内でサンプリングした例であり、仮に同じ期間内でサンプリングしたとしてもサンプリング数の違いによって解析精度に差が生じることを説明するための例である。
図11Aでは、通信解析の結果として、業務A用のアプリケーションに関する通信が46.9%、業務B用のアプリケーションに関する通信が35.0%、業務C用のアプリケーションに関する通信が18.1%の内訳で実行されることが示されている。図11Bでは、通信解析の結果として、業務A用のアプリケーションに関する通信が47.0%、業務B用のアプリケーションに関する通信が35.0%、業務C用のアプリケーションに関する通信が18.0%の内訳で実行されることが示されている。図11A及びBにより、通信解析においてある程度のパケット数が収集されていると、解析結果が収束することが示される。
他方で、図11Cでは、通信解析の結果として、業務A用のアプリケーションに関する通信が70%、業務B用のアプリケーションに関する通信が20%、業務C用のアプリケーションに関する通信が10%の内訳で実行されることが示されている。図11Cに示されるように、仮に同じ期間内でサンプリングしたとしても、通信解析に用いられるパケット数が少ないと、図11A及びBに示されるような解析結果の収束値から乖離しており、解析精度が悪くなる。
上述された実施例によれば、通信回路に対するパケットの転送量の上限に制約があり、通信の単位であるフロー毎の通信量に差があったとしても、通信解析用に通信回路に転送されるパケットのパケット数がフロー毎に決定されるため、通信解析に必要なパケット数以上のパケットを解析装置に送信させることができる。例えば、図11に示された通信解析の対象の通信の通信量が少ない場合であっても、通信量が多い他の通信のパケットが多く間引かれるようにサンプリングされることで、通信解析に必要なパケット数を確保することができる。
それは、図11に沿って上述したように、通信解析の精度が、ある一定以上のパケット数が確保できれば、通信解析の種類に応じて収束するからである。通信解析の精度として要求される精度が決定されれば、決定された精度を実現するパケット数以上のパケットの収集は冗長な収集となるため、例えば、通信量の多いフローに関してサンプリングされるパケットは、通信解析に必要なパケット数を下回らなければサンプリングされるパケット数を少なくしてもよく、その少なくした分を通信量の少ないパケットのサンプリングにあてがってもよいといえる。とりわけ、通信量が少ない通信は、通信解析用パケットを収集するのに数分のオーダーの時間がかかってしまうことがあるため、通信量の少ないパケットのサンプリング数を増やせると、精度の高い通信解析が速やかに実行されることとなる。
また、例えば、HTTP通信であって、業務アプリの使用頻度、及びその業務アプリに対するアクセス頻度を、ログインID毎に調査するといった詳細な通信解析をする場合には、通信解析に必要なパケット数が多くなる。そこで、通信回路に対するパケットの転送量の上限に制約内において上述された変数Anを通信毎に変え、通信解析に内容に合わせて、通信解析に必要なパケット数が多いフローに対してはサンプリング数を他のサンプリング数からあてがい、転送されるパケット数が多くなるようしてもよい。
また、例えば、上述された変数Anが通信毎に“1”とされることで、サンプリングされるパケット数を通信毎に揃え、所定期間内でサンプリンされるパケットに基づく通信解析の精度を通信毎に揃えるようにしてもよい。
図12に、実施例の情報処理システムの他の例が示される。図3に示される構成と同様の構成については、同じ符号が付けられている。図3との違いは、サーバ310で実行されている仮想マシン313による複数の通信の一部が、負荷分散のために、サーバ350で新たに実行された仮想マシン353に移されたことである。図12に示された例は、例えば、仮想マシン313による処理量が増えることでサーバ310内のCPU使用率が増加した場合に、サーバ310の負荷を監視していたVM管理サーバ380がデータセンタ300内の負荷を分散させるためにサーバ350に新たな仮想マシン353を配備させ、VM管理サーバ380から通知を受信したロードバランサ370が仮想マシン313に対してクライアントが要求した処理を仮想マシン353に送信し、仮想マシン353がクライアントから要求された処理を実行する例である。また、図3との他の違いは、仮想マシン353が行う通信がサーバ350において新たに発生したことで、図6に示される処理630に従って、仮想スイッチ354内に新たなキュー363が割り当てられたことである。なお、VM管理サーバ380及びロードバランサ370によって実行される処理及び機能ブロックなどが後述される。
図13に、実施例のVM管理サーバのハードウェア構成の例が示される。実施例が適用されたVM管理サーバ380は、CPU1300、メモリコントローラ1301、メモリ1302及び1303、メモリバス1304、IOバスコントローラ1305、NIC1306−1308、記憶装置1309、及びIOバス1310を含む。
メモリバス1304に接続されたメモリ1302及び1303の少なくとも何れか一方には、VM管理サーバ380の各種処理を実行するためのプログラムが格納されている。CPU1300は、メモリコントローラ1301を介して、メモリ1302及び1303からプログラムを読み出し、各種処理を実行する。CPU1300によって実行される各種処理に伴い、メモリ1302及び1303に対するデータの書き込み及び読み出しがメモリコントローラ1301を介して実行される。
CPU1300は、IOバスコントローラ1305を介して、IOバス1310に接続されたNIC1306―1308にVM管理サーバ380から送信されるデータやパケットを転送し、また、VM管理サーバ380に対して送信されたデータやパケットを受信する。CPU1300は、IOバスコントローラ1305を介して、IOバス1310に接続された記憶装置1309からデータを読み出し、また記憶装置1309にデータを書き込む。
CPU1300は、各種処理を実行するための1以上のCPUコアを含んでいてよい。また、各CPUコアは1以上のプロセッサを含んでいてもよい。メモリ1302及び1303は、例えばDRAM(Dynamic Random Access Memory)などのRAMである。記憶装置1309は、例えば、ROM(Read Only Memory)やフラッシュメモリなどの不揮発性メモリ、又はHDD(Hard Disk Drive)等の磁気ディスク装置である。なお、CPU1300、メモリコントローラ1301、メモリ1302及び1303、NIC1306−1308、及び、記憶装置1309が同じバスに接続された構成を実施例に適用してもよい。図13に示されるハードウェア構成によって、後述されるように、VM管理サーバ380の処理及び機能ブロックが実現される。
図14に、実施例のVM管理サーバの機能ブロックの例が示される。VM管理サーバ380では、記憶装置1309に格納されたプログラムがワーキングメモリとして使用されるメモリ1302及び1303にロードされ、メモリ1302及び1303にロードされたプログラムがCPU1300によって実行されることにより、モニタ部1400、判定部1401、算出部1402、取得部1403、選択部1404、及び、指示部1405
として機能する。各機能ブロックにより実行される処理は、図16及び17に示される処理に対応させて後述される。
図15に、実施例のVM管理サーバが管理する管理情報が示される。図15A、B及びCに示される情報を含む管理情報は、メモリ1302又は1303に格納される情報であり、ここでは、図12に示されるサーバ310で実行される仮想スイッチ313に沿って説明する。
図15Aには、仮想マシンのIDと仮想マシンが使用しているCPUコアの使用率とが関連付けられた情報が示されている。例えば、VM管理サーバ380では、仮想マシン313が“2”のIDで管理されており、VM管理サーバ380がサーバ310から収集した仮想マシンの動作情報において仮想スイッチ313のサーバ310におけるCPUコアの使用率が“90%”であったため、“2”のIDに“90%”が関連付けられて管理されている。後述するが、VM管理サーバ380では、CPUコアの使用率の閾値が設定されており、この閾値を超えたCPUコアを使用している仮想マシンの負荷分散が可能かどうかの判定が実行される。ここでは、CPUコアの使用率が“90%”となった仮想マシン313の負荷分散が実行される場合に沿って例示する。
図15Bには、CPUコアの使用率が閾値を超えた仮想マシンが実行している通信の種類と、その通信に使用されているCPUコアの使用率とが関連付けられた情報が示されている。例えば、CPUコアの使用率が“90%”となった仮想マシン313が実行している通信のうち、例えばネットワーク305に接続されたクライアントとの通信のようなロードバランサ370を経由する通信に使用されているCPUコアの使用率が“30%である。他方で、仮想マシン313が、サーバ310内において他の仮想マシン311や312に対して通信するようなロードバランサ370を経由しない通信に使用されているCPUコアの使用率が“60%”である。これらのCPU使用率の割合は、VM管理サーバ380がサーバ310から取得する仮想マシンの動作情報に基づいて判定すればよい。
図15Cには、トラフィック番号、送信元MACアドレス、通信量、フローID、及び、CPU使用率が関連付けられた情報が示される。トラフィック番号は、CPUコアの使用率が閾値を超えた仮想マシンが実行している通信のうち、ロードバランサ370を経由する通信を識別するために付けられている番号である。その通信を識別するためのトラフィック番号毎に、送信元アドレスが関連付けられている。これは後述されるように、VM管理サーバ380がロードバランサ370に対して負荷分散をするための通信の切り替えをさせるために関連付けられている。
さらに、図15Cに示されるように、トラフィック番号毎に通信量が関連付けられている。また、トラフィック番号毎に、図5Bや図5Cに示されるような通信解析のための通信の分類ポリシーに従って特定されたフローIDが関連付けられおり、後述されるように、サーバ350に新たな仮想マシン353が配備される際のキュー管理のために使用される。また、トラフィック番号毎の通信に使用されるCPUコアの使用率が関連付けられており、この情報もキュー管理のために使用される。
図16に、実施例のVM管理サーバによって実行される処理の例が示される。ここで示される処理の例は、記憶装置1309に格納されたプログラムがワーキングメモリとして使用されるメモリ1302及び1303にロードされ、メモリ1302及び1303にロードされたプログラムがCPU1300によって実行されることで、図12に示されるVM管理サーバ380によって処理される処理の例である。負荷分散のための通信の切り替えの処理を開始させるための処理1600が、VM管理サーバ380によって実行される。
仮想マシン毎のCPUコアの使用率をモニターする処理1601が、モニタ部1400によって実行される。処理1601によってモニターされたCPUコアの使用率に従って、図15Aに示される情報が更新される。
CPUコアの使用率が閾値を超えている仮想マシンがいるか否かを判定する処理1602が、判定部1401によって実行される。処理1602では、判定部1401が図15Aに示される情報に基づいて、設定された閾値を超えてCPUコアを使用しているか否かを判定する。閾値を超えている仮想マシンがいないと判定された場合には処理1601に移り、仮想マシン毎のCPUコアの使用率のモニターを継続する。閾値を超えている仮想マシンがいる判定された場合には、処理1603に移る。例えば、閾値が“80%”と設定されている場合であると、図15Aに示されるように、IDが“2”である仮想マシンのCPUコアの使用率が“90%”であり閾値を超えているため、処理1602によって、IDが“2”である仮想マシンが特定される。
閾値を超える仮想マシンの負荷状況を算出する処理1603が、算出部1402によって実行される。処理1603では、処理1602により閾値を超えてCPUコアを使用していると判定された仮想マシンが実行している通信のうち、例えばネットワーク305に接続されたクライアントとの通信のようなロードバランサ370を経由する通信に使用されているCPUコアの使用率、及び、サーバ内において他の仮想マシンに対して通信するようなロードバランサ370を経由しない通信に使用されているCPUコアの使用率が算出される。算出された情報に基づいて図15に示される管理情報が更新される。例えば、処理1602によって特定されたIDが“2”である仮想マシンが実行している通信のうち、図15Bに示されるように、ロードバランサ370を経由する通信に使用されているCPUコアの使用率が“30%”、ロードバランサ370を経由しない通信に使用されているCPUコアの使用率が“60%”であると算出される。
ロードバランスによってCPUコアの使用率が閾値を下回るか否かを判定する処理1604が、判定部1401によって実行される。処理1604では、処理1603により算出された、ロードバランサ370を経由する通信に使用されているCPUコアの使用率に基づき、ロードバランサ370を経由する通信が他の仮想マシンが実行されるように切り替えられた場合に、CPUコアの使用率が閾値を下回るか否かが判定される。上述したように、例えば、図15A及びBに示された場合でCPUコアの使用率の閾値が80%に設定されているとすると、図15Aに示されるようにIDが“2”である仮想マシン313のCPUコアの使用率が“90%”で閾値80%を超えているため処理1603が実行される。その結果、図15Bに示されるように、ロードバランサ370を経由して仮想マシン313が実行している通信に使用されているCPUコアの使用率が“30%”と算出される。この場合、処理1604では、ロードバランサ370を経由して仮想マシン313が実行している通信が他の仮想マシンが実行されるように切り替えられれば、仮想マシン313のCPUコアの使用率が“90%”から“60%”に減少し、閾値80%を下回ると判定される。処理1604において、CPUコアの使用率が閾値を下回ると判定された場合には処理1605に移り、CPUコアの使用率が閾値を下回らないと判定された場合には、仮想マシンのCPUコアの使用率のモニターを継続するために、処理1601に移る。
閾値を超える仮想マシンの通信状況をロードバランサから取得する処理1605が、取得部1403によって実行される。ロードバランサ370は、ロードバランサ370を経由して実行されている通信状況を管理しているため、例えば、仮想マシン313がロードバランサ370を経由して実行している各通信もロードバランサ370によってトラフィックとして管理されている。処理1605により、VM管理サーバ380は、仮想マシン
313に関連するトラフィックの通信相手のアドレスや通信量を通信状況として取得する。
トラフィック毎のCPUコア使用率を算出する処理1606が、算出部1402によって実行される。処理1606では、処理1603により算出された、ロードバランサを経由して仮想マシンが実行している通信のCPUコア使用率が、処理1605により取得したトラフィック毎の通信量によって例えば按分されることで、トラフィック毎のCPUコア使用率が算出される。例えば、ロードバランサ370を経由して仮想マシン313が実行している通信に使用されているCPUコアの使用率が“30%”であり、仮想マシン313による通信状況が図15Cに示される通信状況の場合には、通信量が1Gbpsであるトラフィック番号“1”のトラフィックのCPUコア使用率が按分によって“7.5%”であると算出される。処理1605によって取得された情報及び処理1606によって算出された情報に従って、図15Cに示される情報が更新される。
閾値を下回るようにロードバランスさせるトラフィックを選択する処理1607が、選択部1404によって実行される。処理1607では、例えば、図15Cに示されるCPUコア使用率に基づいて、どのトラフィックが仮想マシン313ではなく他の仮想マシンに実行されるようにすれば、仮想マシン313のCPUコアの使用率“90%”が閾値80%を下回るかが判定される。例えば、トラフィック番号が“0”及び“1”の両方のトラフィックが他の仮想マシンに実行されるようにすれば、仮想マシン313のCPUコアの使用率“90%”から“75%”になると判定されて、トラフィック番号が“0”及び“1”のトラフィックがロードバランスさせるトラフィックとして選択される。他方で、トラフィック番号が“2”のトラフィックが他の仮想マシンに実行されるようにすれば、仮想マシン313のCPUコアの使用率“90%”から“75%”になると判定されて、トラフィック番号が“2”のトラフィックがロードバランスの対象のトラフィックとして選択されてもよい。また、トラフィック番号が“0”及び“2”の両方のトラフィックが他の仮想マシンに実行されるようにすれば、仮想マシン313のCPUコアの使用率“90%”から“67.5%”になると判定されて、トラフィック番号が“0”及び“2”の両方のトラフィックがロードバランスの対象のトラフィックとして選択されてもよい。また、ロードバランサを経由しない通信に使用されるCPUコアの使用率を確保したり、上昇することが予測されたりする場合には、トラフィック番号が“0”、“1”及び“2”の全てのトラフィックがロードバランスの対象のトラフィックとして選択されてもよい。
以上に述べたように、図16に示された処理によって、仮想マシンのCPUコアの使用率がモニターされて、負荷を分散させるために、どのトラフィックを移すかの選択が実行される。
図17に、実施例のVM管理サーバによって実行される処理の例が示される。ここで示される処理の例は、記憶装置1309に格納されたプログラムがワーキングメモリとして使用されるメモリ1302及び1303にロードされ、メモリ1302及び1303にロードされたプログラムがCPU1300によって実行されることで、図12に示されるVM管理サーバ380によって処理される処理の例であり、図16に示された処理1607に次いで実行される処理である。
ロードバランスを受け入れ可能な仮想マシンがあるか否かを判定する処理1700が、判定部1401によって実行される。処理1700では、処理1607により選択されたトラフィックを代りに実行可能な他の仮想マシンがあるか否かが判定される。例えば、VM管理サーバ380によって管理されている他の仮想マシンのCPUコア使用率に対して、処理1606で算出されたCPUコアの使用率が加算されても、CPUコアの使用率の閾値を上回らなければ、その他の仮想マシンはロードバランスを受け入れ可能であると判
定される。受け入れ可能な仮想マシンがないと判定された場合には処理1701に移り、受け入れ可能な仮想マシンがあると判定された場合には処理1702に移る。
新規の仮想マシンの配備を指示するための処理1701が、指示部1405によって実行される。処理1701によって、処理1607により選択されたトラフィックを代りに実行する他の仮想マシンが、データセンタ300内のサーバにより新たに実行される。例えば、VM監視サーバ380によって、新規に仮想マシン353を実行させることがサーバ350に指示され、サーバ310内で実行されている仮想マシン313によるトラフィックを仮想マシン353が代りに実行することとなる。
トラフィックの移動をロードバランサに指示する処理1702が、指示部1405によって実行される。処理1702により、処理1607により選択されたトラフィックの宛先が、トラフィックを代りに実行する他の仮想マシンとなるように、トラフィックの移動元の仮想マシンのアドレス及びトラフィックを代りに実行する他の仮想マシンのアドレスの通知と併せて、トラフィックの移動がロードバランサ370に対して指示がされる。後述するが、ロードバランサ370はトラフィックの移動元の仮想マシンを宛先アドレスとしたパケットを受信すると、宛先アドレスを他の仮想マシンのアドレスに変換し、パケットを他の仮想マシンに送信する。
トラフィックが移動されるサーバにトラフィックに対応するフローの移動前の通信量を通知する処理1703が、指示部1405によって実行される。処理1703では、トラフィックの移動前に実測されていた通信量が、トラフィックを代りに実行する仮想マシンが配備されるサーバに対して通知される。処理1703によって、移動されるトラフィックの通信量が移動先のサーバにおいて新たに実測する前であっても、通知された通信量を予測値として使用することができるため、通信量の実測を待たなくても、図10に沿って上述されたように、通信解析の単位であるフロー毎のサンプリング量を予測値に基づいて決定することができる。
なお、処理1703では、トラフィックを実行していた仮想マシンに割り当てられていた物理リソースと、トラフィックを代りに実行する仮想マシンに割り当てられる物理リソースとの差分に応じて、通知される通信量が補正されてもよい。例えば、トラフィックを代りに実行する仮想マシンに割り当てられる物理リソースに制限がある場合には、物理リソースの割り当ての割合の減少分に比例して通信量を少なく見積もるように補正してもよい。この場合には、より確からしい通信量を予測値として使用することができる。
処理1703を終了した後、仮想マシン毎のCPUコア使用率のモニターを継続しない場合には、図16及び17に示された処理を終えるための処理1704が、VM管理サーバ380によって実行される。
図18に、実施例のロードバランサのハードウェア構成の例が示される。施例が適用されたロードバランサ370は、CPU1800、メモリコントローラ1801、メモリ1802及び1803、メモリバス1804、IOバスコントローラ1805、NIC1806−1808、記憶装置1809、及びIOバス1810を含む。
メモリバス1804に接続されたメモリ1802及び1803の少なくとも何れか一方には、ロードバランサ370の各種処理を実行するためのプログラムが格納されている。CPU1800は、メモリコントローラ1801を介して、メモリ1802及び1803からプログラムを読み出し、各種処理を実行する。CPU1800によって実行される各種処理に伴い、メモリ1802及び1803に対するデータの書き込み及び読み出しがメモリコントローラ1801を介して実行される。
CPU1800は、IOバスコントローラ1805を介して、IOバス1810に接続されたNIC1806―1808にロードバランサ370から送信されるデータやパケットを転送し、また、ロードバランサ370に対して送信されたデータやパケットを受信する。CPU1800は、IOバスコントローラ1805を介して、IOバス1810に接続された記憶装置1809からデータを読み出し、また記憶装置1809にデータを書き込む。
CPU1800は、各種処理を実行するための1以上のCPUコアを含んでいてよい。また、各CPUコアは1以上のプロセッサを含んでいてもよい。メモリ1802及び1803は、例えばDRAM(Dynamic Random Access Memory)などのRAMである。記憶装置1809は、例えば、ROM(Read Only Memory)やフラッシュメモリなどの不揮発性メモリ、又はHDD(Hard Disk Drive)等の磁気ディスク装置である。なお、CPU1800、メモリコントローラ1801、メモリ1802及び1803、NIC1806−1808、及び、記憶装置1809が同じバスに接続された構成を実施例に適用してもよい。図18に示されるハードウェア構成によって、後述されるように、ロードバランサ370の処理及び機能ブロックが実現される。
図19に、実施例のロードバランサの機能ブロックの例が示される。記憶装置1809に格納されたプログラムがワーキングメモリとして使用されるメモリ1802及び1803にロードされ、メモリ1802及び1803にロードされたプログラムがCPU1800によって実行されることにより、通知部1900、更新部1901、判定部1902、及び、変換部1903として機能する。各機能ブロックにより実行される処理は、図20に示される処理に対応させて後述される。
図20に、実施例のロードバランサによって実行される処理の例が示される。ロードバランサ370では、記憶装置1809に格納されたプログラムがワーキングメモリとして使用されるメモリ1802及び1803にロードされ、メモリ1802及び1803にロードされたプログラムがCPU1800によって実行されることにより、図12に示されるロードバランサ370によって処理される処理の例である。
通信状況の問い合わせを受信すると、指定された仮想マシンの通信状況を通知する処理2001が、通知部1900によって実行される。ロードバランサ370では、データセンタ300外のクライアントとデータセンタ300内のサーバ310及び350との通信状況を管理しており、処理2001では、VM管理サーバ380が処理1605に関連して通信状況の問い合わせを受信すると、指定された仮想マシンに関連するトラフィック毎の通信量を通信状況としてVM管理サーバ380に通知する。
通知された情報に基づきアドレス変換情報を更新する処理2002が、更新部1901によって実行される。処理2002により、VM管理サーバ380が処理1702によって指示するトラフィックの移動に基づいて、アドレス変換情報を更新する。VM管理サーバ380は、トラフィックの移動元及び移動先の仮想マシンのアドレスを処理1702によりロードバランサ370に指示するため、ロードバランサ370では処理2002により移動元アドレスを宛先アドレスとする要求をクライアントから受信した際に移動先アドレスの仮想マシンに要求を処理させるために、その宛先アドレスを移動先アドレスに変換できるように、アドレスの関連付けを管理するアドレス変換情報を更新する。
アドレス変換が必要なパケットを受信したか否かを判定する処理2003が、判定部1902によって実行される。判定部1902では、受信したパケットの宛先アドレスが、
アドレス変換情報にあるアドレス変換が必要な宛先であるか否かを判定する。アドレス変換が必要だと判定されると処理2004に移り、アドレス変換が必要でないと判定されると処理2005に移る。
アドレス変換情報に基づいてアドレス変換する処理2004が、変換部1903によって実行される。処理2004では、処理2002で更新されるアドレス変換情報に基づいて、ロードバランサ370が受信したパケットの宛先アドレスが変換される。次いで、宛先アドレスに基づいてパケットを送信する処理2005が送信部によって実行される。
図21に、実施例のアナライザによって実行される処理の他の例が示される。ここで示される処理の例は、記憶装置209に格納されたプログラムがワーキングメモリとして使用されるメモリ202及び203にロードされ、メモリ202及び203にロードされたプログラムがCPU200によって実行されることで、図3に示されるアナライザ324及びアナライザ364によって処理される処理の例である。ここではアナライザ364により処理が実行されるとして例示するが、アナライザ324でも同様の処理が実行される。
VM管理サーバ380から処理1701によって新規の仮想マシン353の配備が通知されたサーバ350内のアナライザ364によって、図21に示される処理を開始させるための処理2100が実行される。処理2100は、図10に示されたアナライザの処理とは非同期に実行が開始されてよい。
処理1005を開始し、移動させられるフローについては、通知された通信量に基づきサンプリング比:Rn=1/(Tn*Σ(1/Tn))を計算させる処理2101が実行される。処理2101は、処理1703に基づき通知された通信量を予測値として、サンプリング比:Rn=1/(Tn*Σ(1/Tn))を再計算させるための処理であり、図10に示される処理1004の判定を待たずに処理1005以降の処理を実行させることができる。
図22に、実施例の情報処理システムで実行される処理の例が示される。図22に示される例は、上述されたロードバランスのために、サーバ350内に仮想マシン353が新規に配備され、通知された通信量を予測値として、キューのサンプリング量がアナライザ364によって決定される場合の例である。
VM管理サーバ380によって、サーバ310及びサーバ350に対してCPUコアの使用率の問い合わせをする通信C1が実行される。この通信C1の応答として、サーバ310及びサーバ350によって、各サーバ内で実行される仮想マシン毎のCPUコア使用率を返信する通信C2が実行される。通信C1及びC2は、図16に示される処理1601に対応する。通信C2によって取得した仮想マシン毎のCPUコアの使用率は、VM管理サーバ380によって、図15Aに示される情報として管理される。ここで、通知C2によって取得した情報に基づき、処理1602によってサーバ310で実行されている仮想マシン313のCPUコア使用率が閾値を超えていると判定され、仮想マシン313によって実行されていたトラフィックが、処理1702によってサーバ350で新たに実行される仮想マシン353に移されるとする。
VM管理サーバ380によってロードバランサ370に対して仮想マシン313の通信状況の問い合わせをする通信C3が実行され、ロードバランサ370によって通信状況の返信する通信C4が実行される。なお、通信C4が図20に示される処理2001に対応し、図16の処理1605に示されるように、この通信C4によってVM管理サーバ380が仮想マシン313の通信状況を取得する。
VM管理サーバ380からサーバ350に対して、仮想マシン353を実行させるための指示をする通信C5が実行される。通信C5は、図17に示される1701に対応する。
VM管理サーバ380からサーバ350に対して、仮想マシン313が実行していたフロー毎の通信量をサーバ310からサーバ350に送信させるための指示をする通信C6が実行される。この指示を受信したサーバ310によって、処理1001−1003によって算出された仮想マシン313の通信量をサーバ350に送信する通信C7が実行される。通知C7によって通信量の情報を受け取ったサーバ350は、受け取った通信量を予測値として、仮想マシン313のフローを代りに実行する仮想マシン353のフローに対応するキューのサンプリング比の算出を処理2101により実行し、図10に示される、例えば処理1005〜1013が実行されることとなる。
VM管理サーバ380によって、処理1702に対応して、アドレス変換情報を指示するための通信C8が実行される。アドレス変換情報を受信したロードバランサ370によって宛先アドレスが変換された結果、サーバ310に対してではなく、サーバ350内で実行される仮想マシン353に対してロードバランスされた通信C9及びロードバランスされた他の通信C10が実行される。
図22に示されるように、通信C5によって仮想マシン353が実行されると、通信C7により取得した通信量を予測値として、図10及び21に示される処理に従ったサンプリング量がアナライザ364によって再決定される。そのため、通信C9及びC10の通信量の実測を待たなくても、より確からしいサンプリング量によって、通信C9及びC10の通信解析が実行可能となる。なお、図10に示される処理1001−1003によって、通信量の実測が完了した後は、図10に示される処理1005以降の処理に従って実測に基づくサンプリング値が決定され、このサンプリング値に基づいて通信解析のためのサンプリングが実行されればよい。
実施例によれば、ロードバランスをさせる際に、ロードバランス前の通信量を利用することで、ロードバランス後の通信量の実測を待っている期間に、予測値に基づいたサンプリング値が再決定されるので、より確からしいサンプリング値に基づいて速やかに通信解析のためのパケットのサンプリングを開始させることができる。
以上の実施形態に関し、さらに以下の付記を開示する。
(付記1) コンピュータが、複数の通信の通信量及び通信回路に対する前記複数の通信のパケット転送量の上限に応じて通信解析に使用されるパケット数以上になるように前記複数の通信毎に決定されるパケット数のパケットを、前記通信回路に転送することを特徴とする情報処理方法。
(付記2) 前記複数の通信毎に決定される前記パケット数は、前記コンピュータによって、前記複数の通信毎のパケット数が揃うように決定されることを特徴とする付記1に記載の情報処理方法。
(付記3) 前記コンピュータは、前記複数の通信の数が変わる場合に、前記複数の通信毎に決定されるパケット数を算出することを特徴とする付記1又は2に記載の情報処理方法。
(付記4) 前記複数の通信の数は、前記コンピュータによって実行される仮想マシンが他の通信を代行することによって変わり、前記コンピュータは、前記他の通信が代行される仮想マシンの通信量に基づいて、前記他の通信を代行する仮想マシンの通信量を算出し、前記複数の通信毎に決定されるパケット数は、前記コンピュータによって前記算出された通信量に基づいて算出されることを特徴とする付記3に記載の情報処理方法。
(付記5) 前記コンピュータは、前記他の通信を代行する仮想マシンに割り当てられる通信量に基づいて、前記算出された通信量を補正することを特徴とする付記4に記載の情報処理方法。
(付記6) 前記他の通信が代行される仮想マシンの通信量は、前記他の通信が代行される仮想マシンが前記通信回路を介して行う通信の通信量であることを特徴とする付記4又は5に記載の情報処理方法。
(付記7) 前記複数の通信は、仮想マシン毎の通信であることを特徴とする付記1〜6の何れか1つに記載の情報処理方法。
(付記8) 前記他の通信が代行される仮想マシンによる処理負荷を分散させるために、前記コンピュータによって実行される仮想マシンが他の通信を代行することを特徴とする付記4〜7の何れか1つに記載の情報処理方法。
(付記9) 前記複数の通信毎に決定されるパケット数のパケットを所定期間収集して、通信解析を実行することを特徴とする付記1〜8の何れか1つに記載の情報処理方法。
(付記10) 前記コンピュータは、前記パケットを前記通信回路に転送する場合に、前記複数の通信毎に決定される前記パケット数に基づいて、前記複数の通信毎にパケットを間引くことを特徴とする付記1〜9の何れか1つに記載の情報処理方法。
(付記11) 前記複数の通信は、通信のプロトコル、宛先アドレス、又は送信元アドレスに基づく通信解析の単位に基づいてソートされた複数の通信であることを特徴とする付記1〜10の何れか1つに記載の情報処理方法。
(付記12) 前記通信回路は、前記コンピュータが外部装置にパケットを送信するための他の通信回路に接続されたバスに接続された通信回路であって、前記パケット転送量の上限は、前記他の通信回路の通信量に応じて設定されることを特徴とする付記1〜11の何れか1つに記載の情報処理方法。
(付記13) 前記通信解析に対応するパケット数は、前記通信解析の処理内容に応じて設定されることを特徴とする付記1〜12の何れか1つに記載の情報処理方法。
(付記14) コンピュータに、複数の通信の通信量及び通信回路に対する前記複数の通信のパケット転送量の上限に応じて通信解析に使用されるパケット数以上になるように前記複数の通信毎に決定されるパケット数のパケットを、前記通信回路に転送させることを特徴とするプログラム。
(付記16) 通信回路と、複数の通信の通信量及び前記通信回路に対する前記複数の通信のパケット転送量の上限に応じて通信解析に使用されるパケット数以上になるように前記複数の通信毎に決定されるパケット数のパケットを、前記通信回路に転送させる処理部とを含むことを特徴とする情報処理装置。
(付記17) 通信解析を実行する解析装置と、複数の通信の通信量及び通信回路に対する前記複数の通信のパケット転送量の上限に応じて前記通信解析に使用されるパケット数以上になるように前記複数の通信毎に決定されるパケット数のパケットを、前記通信回路に転送するコンピュータとを含むことを特徴とする情報処理システム。