(57)【特許請求の範囲】
【請求項１】
コンピュータに、
仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、
処理を実行させることを特徴とするミラーパケット制御プログラム。
【請求項２】
前記コンピュータに、
前記入出力バッファに登録したパケットについて前記第１仮想マシンに対して入出力を行うとともに、前記入出力バッファに登録したパケットを複製したミラーパケットを前記第２仮想マシンに出力する、処理を実行させることを特徴とする請求項１に記載のミラーパケット制御プログラム。
【請求項３】
前記登録する処理は、
前記退避バッファに蓄積した順序で、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、ことを特徴とする請求項１または２に記載のミラーパケット制御プログラム。
【請求項４】
前記検出する処理は、
前記第２仮想マシンが動作中の演算装置から他の演算装置にライブマイグレーションする場合において、前記第２仮想マシンのライブマイグレーションの開始通知の入力を受け付けた後、前記動作中の演算装置から前記他の演算装置への前記第２仮想マシンに関する情報の転送量が閾値を下回ったことに応じて、前記第２仮想マシンの停止状態を検出する、ことを特徴とする請求項１〜３のいずれか一つに記載のミラーパケット制御プログラム。
【請求項５】
前記コンピュータに、
前記第１仮想マシンに入力されるパケットについて複製しない状態に設定された場合には、前記第２仮想マシンの停止状態が検出されたことに応じて前記第１仮想マシンを停止する、処理を実行させ、
前記蓄積する処理は、
前記第１仮想マシンに入力されるパケットについて複製しない状態に設定された場合には、前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについて前記退避バッファに蓄積しない、ことを特徴とする請求項１〜４のいずれか一つに記載のミラーパケット制御プログラム。
【請求項６】
コンピュータが、
仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バ
ッファに登録する、
処理を実行することを特徴とするミラーパケット制御方法。
【請求項７】
仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、
制御部を有することを特徴とするミラーパケット制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ミラーパケット制御プログラム、ミラーパケット制御方法およびミラーパケット制御装置に関する。
【背景技術】
【０００２】
従来、仮想スイッチが有する特定のポートを通じてターゲットＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）にパケットが送受信される際、ターゲットＶＭに送受信されるパケットを複製したミラーパケットを生成して、別のポートを通じてモニタＶＭに転送するポートミラーリングの技術がある。
【０００３】
先行技術としては、例えば、メモリコピー済の領域に対するメモリ書込みは、メモリコピー先の計算機にも書込み、メモリコピー中の領域に対するメモリ書込みは、メモリコピーのためのメモリ書込みとマージするものがある。また、例えば、複数の仮想マシン間を流れるパケットからミラーリングされたパケットを収集し、トラフィック・経路情報を分析した結果、物理サーバと仮想マシンとの対応関係に変更があったことを認識した場合、監視装置へ構成情報の取得を指示する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−２２１９４５号公報
【特許文献２】特開２０１２−４７８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、モニタＶＭがミラーパケットを受信することができない場合がある。例えば、モニタＶＭはライブマイグレーションを行う際に一時的に停止することがあり、モニタＶＭの停止中にターゲットＶＭが送信または受信したパケットを複製したミラーパケットは、モニタＶＭが受信することができずに失われてしまう。
【０００６】
１つの側面では、本発明は、ミラーパケットが失われる確率を低減することができるミラーパケット制御プログラム、ミラーパケット制御方法およびミラーパケット制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録するミラーパケット制御プログラム、ミラーパケット制御方法およびミラーパケット制御装置が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、ミラーパケットが失われる確率を低減することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかるミラーパケット制御方法の一実施例を示す説明図である。
【図２】図２は、ポートミラーリングシステム２００の一例を示す説明図である。
【図３】図３は、ミラーパケット制御装置１００のハードウェア構成例を示すブロック図である。
【図４】図４は、ＶＭ状態管理テーブル４００の記憶内容の一例を示す説明図である。
【図５】図５は、リングバッファ管理テーブル５００の記憶内容の一例を示す説明図である。
【図６】図６は、ミラーパケットバッファ６００の記憶内容の一例を示す説明図である。
【図７】図７は、ミラーパケット制御装置１００の機能的構成例を示すブロック図である。
【図８】図８は、ポートミラーリングシステム２００のモジュール構成例を示す説明図である。
【図９】図９は、ポートミラーリングシステム２００の動作例１を示す説明図（その１）である。
【図１０】図１０は、ポートミラーリングシステム２００の動作例１を示す説明図（その２）である。
【図１１】図１１は、ポートミラーリングシステム２００の動作例１を示す説明図（その３）である。
【図１２】図１２は、ポートミラーリングシステム２００の動作例１を示す説明図（その４）である。
【図１３】図１３は、状態管理処理手順の一例を示すフローチャートである。
【図１４】図１４は、割り込み設定処理手順の一例を示すフローチャートである。
【図１５】図１５は、割り込み解除処理手順の一例を示すフローチャートである。
【図１６】図１６は、割り込み処理手順の一例を示すフローチャートである。
【図１７】図１７は、パケット処理手順の一例を示すフローチャートである。
【図１８】図１８は、ミラーリング処理手順の一例を示すフローチャートである。
【図１９】図１９は、モニタＶＭ８０２の停止時の動作の流れの一例を示すシーケンス図である。
【図２０】図２０は、モニタＶＭ８０２の停止解除時の動作の流れの一例を示すシーケンス図である。
【図２１】図２１は、ポートミラーリングシステム２００の動作例２を示す説明図である。
【図２２】図２２は、判定処理手順の一例を示すフローチャートである。
【図２３】図２３は、ポートミラーリングシステム２００の動作例３を示す説明図である。
【図２４】図２４は、状態判定処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかるミラーパケット制御プログラム、ミラーパケット制御方法およびミラーパケット制御装置の実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかるミラーパケット制御方法の一実施例）
図１は、実施の形態にかかるミラーパケット制御方法の一実施例を示す説明図である。ここで、ミラーパケット制御装置１００は、仮想スイッチを有し、ポートミラーリングを実現するコンピュータである。
【００１２】
ここで、例えば、仮想スイッチが、仮想スイッチから第１仮想マシンへのポートを通じて送受信されるパケットを複製したミラーパケットを、仮想スイッチから第２仮想マシンへのポートを通じて転送する場合が考えられる。以下の説明では、第１仮想マシンを「ターゲットＶＭ」と表記する場合がある。また、以下の説明では、第２仮想マシンを「モニタＶＭ」と表記する場合がある。
【００１３】
しかしながら、この場合、モニタＶＭがミラーパケットを受信することができないことがある。例えば、モニタＶＭはライブマイグレーションを行う際などに一時的に停止することがあり、モニタＶＭの停止中にターゲットＶＭが送信または受信したパケットを複製したミラーパケットは、モニタＶＭが受信することができずに失われてしまう。また、モニタＶＭは、ミラーパケットについて再送要求することも困難である。
【００１４】
これに対し、下記（ａ）や（ｂ）に示すようにして、モニタＶＭにミラーパケットが受信されやすくする場合が考えられる。しかしながら、この場合であっても、モニタＶＭがミラーパケットを受信することができなかったり、仮想スイッチの性能低下を招いてしまったりすることがあり、好ましくない。
【００１５】
（ａ）例えば、モニタＶＭがライブマイグレーションを行っている間は、ターゲットＶＭをサスペンドしておく場合が考えられる。この場合、モニタＶＭがライブマイグレーションを行っている間にターゲットＶＭからパケットが送信されることについて抑制することができ、ターゲットＶＭから送信されるパケットを複製したミラーパケットが送信されることについて抑制することができる。しかしながら、この場合、モニタＶＭがライブマイグレーションを行っている間に、ターゲットＶＭへとパケットが送信されることについては抑制することができない。このため、ターゲットＶＭへと送信されるパケットを複製したミラーパケットが停止中のモニタＶＭに送信されてしまい、ミラーパケットはモニタＶＭが受信することができずに失われることがある。
【００１６】
（ｂ）例えば、仮想スイッチからターゲットＶＭへのポートを通じて送受信されるパケットを一旦退避バッファに保存し、仮想スイッチからターゲットＶＭへのポートを通じて退避バッファから取り出したパケットを送受信する場合が考えられる。しかしながら、この場合、常にパケットが退避バッファに一旦保存されることになり、仮想スイッチからターゲットＶＭへのポートを通じてパケットを送受信する際にかかる時間の増大化を招き、仮想スイッチの性能低下を招くことがある。
【００１７】
そこで、本実施の形態では、仮想スイッチの性能低下を抑制しつつ、モニタＶＭの停止中にミラーパケットが送信されることを防止することにより、ミラーパケットが失われる確率を低減することができるミラーパケット制御方法について説明する。
【００１８】
図１の例では、ミラーパケット制御装置１００のハードウェア１１０において、ハイパーバイザ１２０が実行されている。ハイパーバイザ１２０において、ホストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）１３０が実行されている。ホストＯＳ１３０において、ターゲットＶＭ１０１とモニタＶＭ１０２が実行されている。
【００１９】
ホストＯＳ１３０は、仮想スイッチ１４０を含む。ホストＯＳ１３０は、ハイパーバイザ１２０が有する記憶領域にあって、ターゲットＶＭ１０１についてのパケットの入出力に用いられる入出力バッファ１７０へのアクセスを制御するバックエンドドライバ１７１を含む。また、ホストＯＳ１３０は、ハイパーバイザ１２０が有する記憶領域にあって、モニタＶＭ１０２についてのパケットの入出力に用いられる入出力バッファ１８０へのアクセスを制御するバックエンドドライバ１８１を含む。
【００２０】
ターゲットＶＭ１０１は、ハイパーバイザ１２０が有する記憶領域にあって、ターゲットＶＭ１０１についてのパケットの入出力に用いられる入出力バッファ１７０へのアクセスを制御するフロントエンドドライバ１７２を含む。モニタＶＭ１０２は、ハイパーバイザ１２０が有する記憶領域にあって、モニタＶＭ１０２についてのパケットの入出力に用いられる入出力バッファ１８０へのアクセスを制御するフロントエンドドライバ１８２を含む。バックエンドドライバとフロントエンドドライバとは、併せてＰＶ（Ｐａｒａ  Ｖｉｒｔｕａｌ）ドライバと呼ばれる。仮想スイッチ１４０は、ミラーパケット生成部１５０を含む。仮想スイッチ１４０は、退避バッファ１６０を有する。
【００２１】
仮想スイッチ１４０は、入出力バッファ１７０を介してターゲットＶＭ１０１についてのパケットの入出力が行われるように制御する。仮想スイッチ１４０は、例えば、ホストＯＳ１３０内のバックエンドドライバ１７１と、ターゲットＶＭ１０１内のフロントエンドドライバ１７２との協調動作によって、ターゲットＶＭ１０１についてのパケットの入出力が行われるようにする。
【００２２】
仮想スイッチ１４０は、具体的には、入出力バッファにパケットを登録することにより、ターゲットＶＭ１０１にパケットを入力する。また、仮想スイッチ１４０は、ターゲットＶＭ１０１により入出力バッファに登録されたパケットを取り出すことにより、ターゲットＶＭ１０１からパケットを出力する。登録とは、入出力バッファに、パケットおよびパケットの入出力通知を記憶することである。
【００２３】
これにより、仮想スイッチ１４０は、ターゲットＶＭ１０１に通じるポートを実現する。図１の例では、ターゲットＶＭ１０１に通じるポートは、名称ｖｉｆ１．０が付与される。図１の例では、ターゲットＶＭ１０１において仮想スイッチ１４０に通じるポートは、名称ｅｔｈ０が付与される。仮想スイッチ１４０は、同様に、モニタＶＭ１０２に通じるポートを実現する。図１の例では、モニタＶＭ１０２に通じるポートは、名称ｖｉｆ２．０が付与される。図１の例では、モニタＶＭ１０２において仮想スイッチ１４０に通じるポートは、名称ｅｔｈ０が付与される。異なるＶＭにおけるポートの名称は重複してもよい。
【００２４】
ミラーパケット生成部１５０は、入出力バッファ１７０に登録されたパケットの入出力が行われたことに応じて、入出力バッファ１７０に登録されたパケットを複製したミラーパケットを、モニタＶＭ１０２に送信する。このため、ミラーパケット生成部１５０は、モニタＶＭ１０２が停止状態であっても、入出力バッファ１７０に登録されたパケットの入出力が行われてしまうと、ミラーパケットをモニタＶＭ１０２に送信してしまう可能性がある。
【００２５】
そこで、図１の例では、仮想スイッチ１４０は、モニタＶＭ１０２が停止状態である間は、入出力バッファ１７０にパケットが登録されたままにならないように制御し、モニタＶＭ１０２が停止状態から解除された後に入出力バッファ１７０にパケットを登録し直す。
【００２６】
（１−１）仮想スイッチ１４０は、モニタＶＭ１０２の停止状態を検出する。停止状態とは、モニタＶＭ１０２がパケットを受信することができない状態である。停止状態は、例えば、モニタＶＭ１０２がライブマイグレーションを完了する直前に一時的に遷移する状態である。停止状態は、モニタＶＭ１０２がライブマイグレーションを行う場合以外における状態であってもよい。これによれば、仮想スイッチ１４０は、モニタＶＭ１０２が停止中であり、入出力バッファ１７０に登録されたパケットを複製したミラーパケットをモニタＶＭ１０２に送信すると、ミラーパケットが失われる可能性がある状態になったことを検出することができる。
【００２７】
（１−２）仮想スイッチ１４０は、停止状態が検出されてから停止状態が解除されるまでの期間においてターゲットＶＭ１０１についての入出力の対象となるパケットについては、入出力バッファ１７０とは異なる退避バッファ１６０に蓄積する。停止状態の解除は、例えば、モニタＶＭ１０２がライブマイグレーションを完了することによって行われる。仮想スイッチ１４０は、例えば、入出力バッファ１７０に一旦登録されたパケットを、読み出して転送してしまう前に、あるいは、ターゲットＶＭ１０１が読み出してしまう前に退避バッファ１６０に移動しておき、入出力バッファ１７０からは削除する。
【００２８】
これによれば、仮想スイッチ１４０は、入出力バッファ１７０に登録されたパケットについてターゲットＶＭ１０１に対して入出力が行われてしまうことを防止することができる。そして、仮想スイッチ１４０は、ミラーパケット生成部１５０が入出力バッファ１７０に登録されたパケットを複製したミラーパケットを、停止状態であるモニタＶＭ１０２に送信してしまうことを防止することができる。
【００２９】
（１−３）仮想スイッチ１４０は、停止状態が解除されると、退避バッファ１６０に蓄積しておいたパケットを、入出力バッファ１７０に登録し直す。また、仮想スイッチ１４０は、停止状態が解除されてからターゲットＶＭ１０１についての入出力の対象となるパケットについては、入出力バッファ１７０に登録する。これによれば、仮想スイッチ１４０は、ターゲットＶＭ１０１に対するパケットの入出力を再開させ、ターゲットＶＭ１０１に対するパケットの入出力が再開したことに応じてモニタＶＭ１０２へのミラーパケットの送信も再開させることができる。
【００３０】
これにより、仮想スイッチ１４０は、モニタＶＭ１０２が停止状態でなければ、ターゲットＶＭ１０１に対して入出力バッファ１７０に登録されたパケットの入出力を行うことができ、性能低下を抑制することができる。そして、仮想スイッチ１４０は、モニタＶＭ１０２が停止状態になれば、ミラーパケットを停止中のモニタＶＭ１０２に送信してしまうことを防止し、ミラーパケットがモニタＶＭ１０２に受信されず失われる確率を低減することができる。
【００３１】
また、仮想スイッチ１４０は、モニタＶＭ１０２の停止状態が解除された後は、ターゲットＶＭ１０１に対して入出力バッファ１７０に登録し直されたパケットの入出力を行うことができる。そして、仮想スイッチ１４０は、入出力バッファ１７０に登録し直されたパケットの入出力が行われたことに応じて、入出力バッファ１７０に登録し直されたパケットを複製したミラーパケットを、停止状態が解除されたモニタＶＭ１０２に送信することができる。
【００３２】
（ポートミラーリングシステム２００の一例）
次に、図２を用いて、図１に示したミラーパケット制御装置１００を適用した、ポートミラーリングシステム２００の一例について説明する。
【００３３】
図２は、ポートミラーリングシステム２００の一例を示す説明図である。図２において、ポートミラーリングシステム２００は、複数のミラーパケット制御装置１００と、管理装置２０１とを含む。ポートミラーリングシステム２００において、複数のミラーパケット制御装置１００と、管理装置２０１とは、有線または無線のネットワーク２１０を介して接続される。ネットワーク２１０は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどである。
【００３４】
ミラーパケット制御装置１００は、図１に示したように、モニタＶＭ１０２が停止状態である間にはミラーパケットがモニタＶＭ１０２に送信されないように制御しつつ、ポートミラーリングを実現するコンピュータである。ミラーパケット制御装置１００は、例えば、サーバである。それぞれのミラーパケット制御装置１００が有する仮想スイッチ１４０は、例えば、ＶＬＡＮ（Ｖｉｒｔｕａｌ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して接続される。以下の説明では、それぞれのミラーパケット制御装置１００を区別する場合には「ミラーパケット制御装置１００−ｉ」と表記する場合がある。ｉは、１〜ｎの整数である。ｎは、ミラーパケット制御装置１００の数である。
【００３５】
管理装置２０１は、ポートミラーマネージャを実行するコンピュータである。ポートミラーマネージャは、例えば、それぞれのミラーパケット制御装置１００におけるＶＭが停止状態であるか否かを監視し、それぞれのミラーパケット制御装置１００におけるＶＭの状態を管理する。ポートミラーマネージャは、例えば、ターゲットＶＭ１０１について入力されるパケットおよび出力されるパケットのうち、いずれのパケットを複製してモニタＶＭ１０２に送信するかを設定し、ポートミラーリングを管理する。管理装置２０１は、例えば、サーバである。ここでは、管理装置２０１が、ミラーパケット制御装置１００とは異なる装置である場合について説明したが、これに限らない。例えば、管理装置２０１は、いずれかのミラーパケット制御装置１００と一体であってもよい。
【００３６】
（ミラーパケット制御装置１００のハードウェア構成例）
次に、図３を用いて、図２に示したポートミラーリングシステム２００に含まれるミラーパケット制御装置１００のハードウェア構成例について説明する。
【００３７】
図３は、ミラーパケット制御装置１００のハードウェア構成例を示すブロック図である。図３において、ミラーパケット制御装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３０１と、メモリ３０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３と、ディスクドライブ３０４と、ディスク３０５と、記録媒体Ｉ／Ｆ３０６とを有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００３８】
ここで、ＣＰＵ３０１は、ミラーパケット制御装置１００の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ３０１のワークエリアとして使用される。各種プログラムは、例えば、実施の形態にかかるミラーパケット制御プログラムを含んでもよい。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００３９】
ネットワークＩ／Ｆ３０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、ネットワークＩ／Ｆ３０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータに対するデータの入出力を制御する。ネットワークＩ／Ｆ３０３は、例えば、モデムやＬＡＮアダプタなどである。
【００４０】
ディスクドライブ３０４は、ＣＰＵ３０１の制御に従ってディスク３０５に対するデータのリード／ライトを制御する。ディスクドライブ３０４は、例えば、磁気ディスクドライブである。ディスク３０５は、ディスクドライブ３０４の制御で書き込まれたデータを記憶する不揮発メモリである。ディスク３０５は、例えば、磁気ディスク、光ディスクなどである。
【００４１】
記録媒体Ｉ／Ｆ３０６は、外部の記録媒体３１０に接続され、外部の記録媒体３１０と内部のインターフェースを司り、外部の記録媒体３１０に対するデータの入出力を制御する。記録媒体Ｉ／Ｆ３０６は、例えば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートである。外部の記録媒体３１０は、例えば、ＵＳＢメモリである。外部の記録媒体３１０は、実施の形態にかかるミラーパケット制御プログラムを記憶してもよい。
【００４２】
ミラーパケット制御装置１００は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、半導体メモリ、キーボード、マウス、ディスプレイなどを有してもよい。また、ミラーパケット制御装置１００は、ディスクドライブ３０４およびディスク３０５の代わりに、ＳＳＤおよび半導体メモリなどを有していてもよい。
【００４３】
（管理装置２０１のハードウェア構成例）
ここで、管理装置２０１のハードウェア構成例については、図３に示したミラーパケット制御装置１００のハードウェア構成例と同様であるため、説明を省略する。
【００４４】
（ＶＭ状態管理テーブル４００の記憶内容）
次に、図４を用いて、ＶＭ状態管理テーブル４００の記憶内容の一例について説明する。ＶＭ状態管理テーブル４００は、例えば、管理装置２０１の記憶領域により実現される。
【００４５】
図４は、ＶＭ状態管理テーブル４００の記憶内容の一例を示す説明図である。図４に示すように、ＶＭ状態管理テーブル４００は、ＶＭＩＤと、ホストＩＤと、状態とのフィールドを有する。ＶＭ状態管理テーブル４００は、ＶＭごとに各フィールドに情報を設定することにより、ＶＭ状態管理情報がレコードとして記憶される。
【００４６】
ＶＭＩＤのフィールドには、ＶＭを一意に識別する情報であるＶＭＩＤが設定される。ホストＩＤのフィールドには、ホストＯＳを一意に識別する情報であるホストＩＤが設定される。状態のフィールドには、ＶＭの状態が設定される。ＶＭの状態は、例えば、ＶＭが動作中であれば「ランニング（ＲＵＮＮＩＮＧ）」であり、ＶＭが停止中であれば「サスペンド（ＳＵＳＰＥＮＤＥＤ）」である。
【００４７】
ＶＭ状態管理テーブル４００は、管理装置２０１によって生成され更新される。管理装置２０１は、ＶＭ状態管理テーブル４００を用いることにより、それぞれのミラーパケット制御装置１００におけるＶＭの状態を管理することができる。そして、管理装置２０１は、ＶＭ状態管理テーブル４００を参照することにより、ターゲットＶＭ１０１を実行中であるミラーパケット制御装置１００に、モニタＶＭ１０２の状態がサスペンドになったことを通知することができる。また、管理装置２０１は、ＶＭ状態管理テーブル４００を参照することにより、ターゲットＶＭ１０１を実行中であるミラーパケット制御装置１００に、モニタＶＭ１０２の状態がサスペンドからランニングに戻ったことを通知することができる。
【００４８】
（リングバッファ管理テーブル５００の記憶内容）
次に、図５を用いて、リングバッファ管理テーブル５００の記憶内容の一例について説明する。リングバッファ管理テーブル５００は、例えば、図３に示したミラーパケット制御装置１００のメモリ３０２やディスク３０５の記憶領域により実現される。
【００４９】
ここで、リングバッファとは、いずれかのＶＭについてのパケットの入出力に用いられる記憶領域である。リングバッファは、例えば、図１に示した入出力バッファ１７０に対応し、図１に示した入出力バッファ１７０の一部となる記憶領域である。パケットの入力に用いられる入力リングバッファと、パケットの出力に用いられる出力リングバッファとが別々にあってもよい。
【００５０】
図５は、リングバッファ管理テーブル５００の記憶内容の一例を示す説明図である。図５に示すように、リングバッファ管理テーブル５００は、ＶＭＩＤと、Ｇｕｅｓｔ  Ａｄｄｒと、Ｈｏｓｔ  Ａｄｄｒと、リングバッファサイズと、割り込み状態とのフィールドを有する。リングバッファ管理テーブル５００は、ＶＭごとに各フィールドに情報を設定することにより、リングバッファ管理情報がレコードとして記憶される。
【００５１】
ＶＭＩＤのフィールドには、ゲストＯＳとなるＶＭを一意に識別する情報であるＶＭＩＤが設定される。Ｇｕｅｓｔ  Ａｄｄｒのフィールドには、ゲストＯＳとなるＶＭがリングバッファを識別するためのアドレスであるＧｕｅｓｔ  Ａｄｄｒが設定される。Ｇｕｅｓｔ  Ａｄｄｒのフィールドには、パケットの入力に用いられる入力リングバッファと、パケットの出力に用いられる出力リングバッファとが別々にある場合には、それぞれのリングバッファに対応するＧｕｅｓｔ  Ａｄｄｒが設定されてもよい。
【００５２】
Ｈｏｓｔ  Ａｄｄｒのフィールドには、ホストＯＳがリングバッファを識別するためのアドレスであるＨｏｓｔ  Ａｄｄｒが設定される。Ｈｏｓｔ  Ａｄｄｒのフィールドには、パケットの入力に用いられる入力リングバッファと、パケットの出力に用いられる出力リングバッファとが別々にある場合には、それぞれのリングバッファに対応するＨｏｓｔ  Ａｄｄｒが設定されてもよい。
【００５３】
リングバッファサイズのフィールドには、ゲストＯＳとなるＶＭについてのリングバッファのサイズが設定される。リングバッファサイズのフィールドには、パケットの入力に用いられる入力リングバッファと、パケットの出力に用いられる出力リングバッファとが別々にある場合には、それぞれのリングバッファのサイズが設定されてもよい。割り込み状態のフィールドには、ゲストＯＳとなるＶＭについてのパケットの入出力に対して割り込みを行う状態であるか否かを示すフラグが設定される。割り込み状態は、例えば、割り込みを行う状態であれば「オン（ＯＮ）」であり、割り込みを行わない状態であれば「オフ（ＯＦＦ）」である。
【００５４】
リングバッファ管理テーブル５００は、ミラーパケット制御装置１００によって生成され更新される。ミラーパケット制御装置１００は、リングバッファ管理テーブル５００を用いることにより、ＶＭに対応するリングバッファを管理することができる。そして、ミラーパケット制御装置１００は、リングバッファ管理テーブル５００を参照して、リングバッファへの書き込みがあったときに割り込みを発生させるようにハイパーバイザ１２０に設定することができる。
【００５５】
（ミラーパケットバッファ６００の記憶内容）
次に、図６を用いて、ミラーパケットバッファ６００の記憶内容の一例について説明する。ミラーパケットバッファ６００は、例えば、図３に示したミラーパケット制御装置１００のメモリ３０２やディスク３０５の記憶領域により実現される。
【００５６】
図６は、ミラーパケットバッファ６００の記憶内容の一例を示す説明図である。図６に示すように、ミラーパケットバッファ６００は、連番と、ＶＭＩＤと、方向と、ａｄｄｒと、パケットサイズと、パケットと、送信受信通知とのフィールドを有する。ミラーパケットバッファ６００は、パケットごとに各フィールドに情報を設定することにより、ミラーパケット制御情報がレコードとして記憶される。
【００５７】
連番のフィールドには、レコードの番号である連番が設定される。ＶＭＩＤのフィールドには、ＶＭを一意に識別する情報であるＶＭＩＤが設定される。方向のフィールドには、ＶＭに対するパケットの通信方向が設定される。方向は、例えば、ＶＭにパケットを受信させる場合には「受信」であり、ＶＭからパケットが送信される場合には「送信」である。ａｄｄｒのフィールドには、パケットの宛先が設定される。パケットサイズのフィールドには、パケットのサイズが設定される。パケットのフィールドには、パケットの本体が設定される。送信受信通知のフィールドには、パケットの送信を要求する出力通知またはパケットの受信を要求する入力通知が設定される。
【００５８】
ミラーパケットバッファ６００は、ミラーパケット制御装置１００によって生成される。ミラーパケット制御装置１００は、モニタＶＭ１０２の停止中に、リングバッファからミラーパケットバッファ６００にパケットを退避することができ、停止中のモニタＶＭ１０２にミラーパケットが送信されないようにすることができる。ミラーパケット制御装置１００は、具体的には、リングバッファにパケットを再び登録する際に用いられる情報を、ミラーパケットバッファ６００に蓄積することができる。
【００５９】
（ミラーパケット制御装置１００の機能的構成例）
次に、図７を用いて、ミラーパケット制御装置１００の機能的構成例について説明する。図７は、ミラーパケット制御装置１００の機能的構成例を示すブロック図である。ミラーパケット制御装置１００は、検出部７０１と、退避部７０２と、登録部７０３と、出力部７０４とを含む。
【００６０】
検出部７０１〜出力部７０４は、制御部となる機能であり、例えば、図３に示したメモリ３０２やディスク３０５などの記憶領域に記憶されたプログラムをＣＰＵ３０１に実行させることにより、または、ネットワークＩ／Ｆ３０３により、その機能を実現する。各機能部の処理結果は、例えば、図３に示したメモリ３０２やディスク３０５などの記憶領域に記憶される。
【００６１】
検出部７０１は、第１仮想マシンについての入出力に用いられる入出力バッファ１７０に登録されたパケットを複製したミラーパケットが出力される第２仮想マシンの停止状態を検出する。第１仮想マシンとは、仮想スイッチ１４０に接続され、パケットの入出力が行われるＶＭである。第１仮想マシンは、例えば、ターゲットＶＭ１０１である。
【００６２】
入出力バッファ１７０とは、ターゲットＶＭ１０１についてのパケットの入出力に用いられる記憶領域である。入出力バッファ１７０は、例えば、入力リングバッファと、出力リングバッファと、パケットバッファとの組み合わせである。入力リングバッファは、パケットの入力通知を記憶する記憶領域である。出力リングバッファは、パケットの出力通知を記憶する記憶領域である。パケットバッファは、入力または出力の対象になるパケットを記憶する記憶領域である。入力リングバッファと、出力リングバッファと、パケットバッファとについては、図８に後述する。
【００６３】
第２仮想マシンとは、仮想スイッチ１４０に接続され、ミラーパケットが出力されるＶＭである。第２仮想マシンは、例えば、仮想スイッチ１４０に直接接続されていなくてもよい。第２仮想マシンは、仮想スイッチ１４０のいずれかのポートから通じる他の仮想スイッチ１４０に接続されてもよい。第２仮想マシンは、例えば、モニタＶＭ１０２である。
【００６４】
検出部７０１は、例えば、第２仮想マシンが動作中の演算装置から他の演算装置にライブマイグレーションを開始したことに応じて、第２仮想マシンの停止状態を検出する。演算装置は、例えば、ミラーパケット制御装置１００である。検出部７０１は、具体的には、モニタＶＭ１０２がライブマイグレーションを開始したとき、モニタＶＭ１０２が停止状態になったことを検出する。検出部７０１は、具体的には、管理装置２０１からモニタＶＭ１０２の状態を通知されることにより、モニタＶＭ１０２が停止状態になったことを検出してもよい。検出部７０１は、具体的には、モニタＶＭ１０２に対してポーリングを行うことにより、モニタＶＭ１０２が停止状態になったことを検出してもよい。
【００６５】
検出部７０１は、例えば、第２仮想マシンが動作中の演算装置から他の演算装置にライブマイグレーションする場合において、動作中の演算装置から他の演算装置への第２仮想マシンに関する情報の転送量を監視してもよい。そして、検出部７０１は、転送量が閾値を下回ったことに応じて、第２仮想マシンの停止状態を検出する。これにより、検出部７０１は、モニタＶＭ１０２が停止中であり、ミラーパケットをモニタＶＭ１０２に送信すると、ミラーパケットが失われる可能性がある状態になったことを検出することができる。
【００６６】
検出部７０１は、第２仮想マシンの停止状態の解除を検出する。検出部７０１は、例えば、モニタＶＭ１０２の停止状態の解除を検出する。検出部７０１は、具体的には、管理装置２０１からモニタＶＭ１０２の状態を通知されることにより、モニタＶＭ１０２が停止状態になったことを検出する。検出部７０１は、具体的には、モニタＶＭ１０２に対してポーリングを行うことにより、モニタＶＭ１０２の停止状態の解除を検出してもよい。
【００６７】
これにより、検出部７０１は、モニタＶＭ１０２が動作中であり、ミラーパケットをモニタＶＭ１０２に送信しても、ミラーパケットが失われない状態になったことを検出することができる。検出部７０１の動作は、具体的には、ポートミラーリングシステム２００においては、図８に後述する割り込み設定部や割り込み解除部、または、図２３に後述するＶＭ状態判定部などによって実現される。
【００６８】
退避部７０２は、停止状態が検出されてから停止状態が解除されるまでの期間において第１仮想マシンについての入出力の対象となるパケットについては入出力バッファ１７０とは異なる退避バッファ１６０に蓄積しておく。退避部７０２は、例えば、入出力バッファ１７０に一旦登録されたパケットを、仮想スイッチ１４０で読み出して転送してしまう前に、あるいは、ターゲットＶＭ１０１が読み出してしまう前に退避バッファ１６０に移動し、入出力バッファ１７０からは削除する。
【００６９】
退避部７０２は、仮想スイッチ１４０から第１仮想マシンに入力されるパケットについて複製しない状態に設定された場合には、第２仮想マシンの停止状態が検出されたことに応じて第１仮想マシンを停止してもよい。退避部７０２は、例えば、ターゲットＶＭ１０１について入力されるパケットおよび出力されるパケットのうち、いずれのパケットを複製してモニタＶＭ１０２に送信する設定であるかを判定する。そして、退避部７０２は、ターゲットＶＭ１０１について入力されるパケットを複製しなくてよい設定であれば、停止状態が検出されてから停止状態が解除されるまでの期間においてターゲットＶＭ１０１を停止する。
【００７０】
この場合、退避部７０２は、停止状態が検出されてから停止状態が解除されるまでの期間において第１仮想マシンについての入出力の対象となるパケットについて退避バッファ１６０に蓄積しない。退避部７０２は、例えば、ターゲットＶＭ１０１についての入出力の対象となるパケットを、退避バッファ１６０に蓄積せず、入出力バッファ１７０に登録する。
【００７１】
これにより、退避部７０２は、モニタＶＭ１０２が停止状態である間、ターゲットＶＭ１０１に対してパケットの入出力が行われることを防止することができ、モニタＶＭ１０２にミラーパケットが送信されることを防止することができる。退避部７０２の動作は、具体的には、ポートミラーリングシステム２００においては、図８に後述する割り込みハンドラなどによって実現される。
【００７２】
登録部７０３は、停止状態が解除されると、退避バッファ１６０に蓄積しておいたパケットを、入出力バッファ１７０に登録する。登録部７０３は、例えば、退避バッファ１６０に蓄積した順序で、退避バッファ１６０に蓄積しておいたパケットを、入出力バッファ１７０に登録する。
【００７３】
これにより、登録部７０３は、ターゲットＶＭ１０１に対するパケットの入出力を再開させ、ターゲットＶＭ１０１に対するパケットの入出力が再開したことに応じてモニタＶＭ１０２へのミラーパケットの送信も再開させることができる。また、登録部７０３は、入出力の順番を変えずに、ターゲットＶＭ１０１に対するパケットの入出力が行われるようにすることができる。登録部７０３の動作は、具体的には、ポートミラーリングシステム２００においては、図８に後述するパケット処理部などによって実現される。
【００７４】
出力部７０４は、入出力バッファ１７０に登録したパケットについて第１仮想マシンに対して入出力を行うとともに、入出力バッファ１７０に登録したパケットを複製したミラーパケットを第２仮想マシンに出力する。出力部７０４は、例えば、入出力バッファ１７０に登録し直されたパケットについてターゲットＶＭ１０１に対して入出力を行う。また、出力部７０４は、入出力バッファ１７０に登録し直されたパケットを複製したミラーパケットをモニタＶＭ１０２に送信する。
【００７５】
これにより、出力部７０４は、モニタＶＭ１０２の停止状態が解除された後は、ターゲットＶＭ１０１に対して入出力バッファ１７０に登録し直されたパケットの入出力を行うことができる。そして、出力部７０４は、入出力バッファ１７０に登録し直されたパケットの入出力が行われたことに応じて、入出力バッファ１７０に登録し直されたパケットを複製したミラーパケットを、停止状態が解除されたモニタＶＭ１０２に送信することができる。出力部７０４の動作は、具体的には、ポートミラーリングシステム２００においては、図８に後述するミラーパケット生成部などによって実現される。
【００７６】
（ポートミラーリングシステム２００のモジュール構成例）
次に、図８を用いて、図７に示した各機能部の動作を実現するためのポートミラーリングシステム２００のモジュール構成例について説明する。
【００７７】
図８は、ポートミラーリングシステム２００のモジュール構成例を示す説明図である。図８の例では、管理装置２０１のハードウェア８１０において、管理装置２０１のハイパーバイザ８１１が実行されている。管理装置２０１のハイパーバイザ８１１において、ポートミラーマネージャ８１２が実行されている。ポートミラーマネージャ８１２は、ポートミラー構成部８１３と、ＶＭ状態管理部８１４とを含む。ポートミラーマネージャ８１２は、ＶＭ状態管理テーブル４００を有する。また、管理装置２０１のハイパーバイザ８１１はなくてもよい。
【００７８】
ポートミラー構成部８１３は、ターゲットＶＭ８０１について入力されるパケットおよび出力されるパケットのうち、いずれのパケットを複製してモニタＶＭ８０２に送信するかを設定し、ポートミラーリングを管理する。ＶＭ状態管理部８１４は、それぞれのミラーパケット制御装置１００におけるＶＭが停止状態であるか否かを監視し、それぞれのミラーパケット制御装置１００におけるＶＭの状態を管理する。
【００７９】
また、ミラーパケット制御装置１００−１のハードウェア８２０において、ミラーパケット制御装置１００−１のハイパーバイザ８２１が実行されている。ミラーパケット制御装置１００−１のハイパーバイザ８２１において、ミラーパケット制御装置１００−１のホストＯＳ８２２が実行されている。ミラーパケット制御装置１００−１のホストＯＳ８２２において、ターゲットＶＭ８０１と、モニタＶＭ８０２とが実行されている。
【００８０】
ミラーパケット制御装置１００−１のホストＯＳ８２２は、ハイパーバイザ８２１が有する記憶領域にある入力リングバッファ８３１と、出力リングバッファ８３２と、パケットバッファ８３３とに対するアクセスを制御するバックエンドドライバ８３５を含む。入力リングバッファ８３１は、ターゲットＶＭ８０１へ入力されるパケットについての入力通知を記憶する際に用いられる。出力リングバッファ８３２は、ターゲットＶＭ８０１から出力されるパケットについての出力通知を記憶する際に用いられる。パケットバッファ８３３は、ターゲットＶＭ８０１に入力または出力されるパケットを記憶する際に用いられる。
【００８１】
ミラーパケット制御装置１００−１のホストＯＳ８２２は、ハイパーバイザ８２１が有する記憶領域にある入力リングバッファ８４１と、出力リングバッファ８４２と、パケットバッファ８４３とに対するアクセスを制御するバックエンドドライバ８４５を含む。入力リングバッファ８４１は、モニタＶＭ８０２へ入力されるパケットについての入力通知を記憶する際に用いられる。出力リングバッファ８４２は、モニタＶＭ８０２から出力されるパケットについての出力通知を記憶する際に用いられる。パケットバッファ８４３は、モニタＶＭ８０２に入力または出力されるパケットを記憶する際に用いられる。
【００８２】
ターゲットＶＭ８０１は、ハイパーバイザ８２１が有する記憶領域にある入力リングバッファ８３１と、出力リングバッファ８３２と、パケットバッファ８３３とに対するアクセスを制御するフロントエンドドライバ８３４を含む。モニタＶＭ８０２は、ハイパーバイザ８２１が有する記憶領域にある入力リングバッファ８４１と、出力リングバッファ８４２と、パケットバッファ８４３とに対するアクセスを制御するフロントエンドドライバ８４４を含む。
【００８３】
ミラーパケット制御装置１００−１のホストＯＳ８２２は、仮想スイッチ８２３を含む。仮想スイッチ８２３は、ミラーパケット生成部８２４と、割り込み設定部８２５と、割り込み解除部８２６と、割り込みハンドラ８２７と、パケット処理部８２８とを含む。仮想スイッチ８２３は、リングバッファ管理テーブル５００と、ミラーパケットバッファ６００とを有する。
【００８４】
ミラーパケット生成部８２４は、バックエンドドライバ８３５のパケットバッファ８３３にパケットが書き込まれていれば、パケットを複製したミラーパケットをモニタＶＭ８０２へのポートに出力する。また、ミラーパケット生成部８２４は、パケットを通常の宛先へのポートに出力する。ミラーパケット生成部８２４は、具体的には、図１８に後述するミラーリング処理を実行する。
【００８５】
割り込み設定部８２５は、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあったときに割り込みを発生させるようにする。割り込み設定部８２５は、例えば、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあったときに割り込みを発生させるように、ハイパーバイザ８２１に設定要求を送信する。割り込み設定部８２５は、具体的には、図１４に後述する割り込み設定処理を実行する。
【００８６】
割り込み解除部８２６は、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあっても割り込みを発生させないようにする。割り込み解除部８２６は、例えば、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあっても割り込みを発生させないように、ハイパーバイザ８２１に解除要求を送信する。割り込み解除部８２６は、具体的には、図１５に後述する割り込み解除処理を実行する。
【００８７】
割り込みハンドラ８２７は、割り込みが発生した際に、入力リングバッファ８３１または出力リングバッファ８３２に記憶された入力通知または出力通知と、パケットバッファ８３３に格納されたパケットとをミラーパケットバッファ６００に退避させる。割り込みハンドラ８２７は、具体的には、図１６に後述する割り込み処理を実行する。
【００８８】
パケット処理部８２８は、ミラーパケットバッファ６００から、入力リングバッファ８３１または出力リングバッファ８３２に入力通知または出力通知を戻し、パケットバッファ８３３にパケットを戻す。パケット処理部８２８は、具体的には、図１７に後述するパケット処理を実行する。
【００８９】
また、ミラーパケット制御装置１００−２のハードウェア８５０において、ミラーパケット制御装置１００−２のハイパーバイザ８５１が実行されている。ミラーパケット制御装置１００−２のハイパーバイザ８５１において、ミラーパケット制御装置１００−２のホストＯＳ８５２が実行されている。ミラーパケット制御装置１００−２のホストＯＳ８５２は、ミラーパケット制御装置１００−１のホストＯＳ８２２で実行されているモニタＶＭ８０２のライブマイグレーション先になる。ミラーパケット制御装置１００−２のホストＯＳ８５２は、仮想スイッチ８２３を含む。
【００９０】
（ポートミラーリングシステム２００の動作例１）
次に、図９〜図１２を用いて、ポートミラーリングシステム２００の動作例１について説明する。
【００９１】
図９〜図１２は、ポートミラーリングシステム２００の動作例１を示す説明図である。図９において、モニタＶＭ８０２は、管理者８０３の操作入力によって、ライブマイグレーションを開始したとする。
【００９２】
（９−１）割り込み設定部８２５は、モニタＶＭ８０２がライブマイグレーションを開始したことを検出すると、モニタＶＭ８０２が停止状態になったと判定する。割り込み設定部８２５は、モニタＶＭ８０２が停止状態になったと判定すると、割り込み状態をオンに設定し、ハイパーバイザ８２１に割り込みを発生させるように設定する。
【００９３】
（９−２）仮想スイッチ８２３は、バックエンドドライバを介して、入力する対象となるパケットをパケットバッファ８３３に格納し、パケットを格納した記憶領域を示すアドレスを含む入力通知を入力リングバッファ８３１に格納する。ハイパーバイザ８２１は、入力リングバッファ８３１に入力通知が格納されたため、割り込みを発生させる。
【００９４】
（９−３）割り込みハンドラ８２７は、モニタＶＭ８０２が停止状態であり、割り込みが発生したため、入力リングバッファ８３１に格納された入力通知を取り出し、入力リングバッファ８３１からは入力通知を削除する。そして、割り込みハンドラ８２７は、入力通知に含まれるアドレスに基づいて、パケットバッファ８３３に格納されたパケットを取り出し、パケットバッファ８３３からはパケットを削除する。割り込みハンドラ８２７は、取り出した入力通知と、取り出したパケットを対応付けて、ミラーパケットバッファ６００に蓄積する。
【００９５】
これにより、仮想スイッチ８２３は、パケットバッファ８３３に一旦登録されたパケットを、ターゲットＶＭ８０１が読み出してしまう前に、ミラーパケットバッファ６００に移動し、パケットバッファ８３３からは削除することができる。結果として、仮想スイッチ８２３は、ターゲットＶＭ８０１にパケットが入力されることを一旦停止し、ターゲットＶＭ８０１にパケットが入力されたことに応じてミラーパケットがモニタＶＭ８０２に送信されることを防止することができる。また、仮想スイッチ８２３は、ターゲットＶＭ８０１から応答が送信されることも防止することができ、パケットの送信元に応答待ちさせることにより、パケットの送信元からターゲットＶＭ８０１にパケットが送信されることを一定時間停止させることができる。ここで、図１０の説明に移行する。
【００９６】
図１０において、（１０−１）ターゲットＶＭ８０１は、フロントエンドドライバ８３４を介して、出力する対象となるパケットをパケットバッファ８３３に格納する。そして、ターゲットＶＭ８０１は、フロントエンドドライバ８３４を介して、パケットを格納した記憶領域を示すアドレスを含む出力通知を出力リングバッファ８３２に格納する。ハイパーバイザ８２１は、出力リングバッファ８３２に出力通知が格納されたため、割り込みを発生させる。
【００９７】
（１０−２）仮想スイッチ８２３の割り込みハンドラ８２７は、モニタＶＭ８０２が停止状態であり、割り込みが発生したため、出力リングバッファ８３２に格納された出力通知を取り出し、出力リングバッファ８３２からは出力通知を削除する。そして、仮想スイッチ８２３の割り込みハンドラ８２７は、出力通知に含まれるアドレスに基づいて、パケットバッファ８３３に格納されたパケットを取り出し、パケットバッファ８３３からはパケットを削除する。仮想スイッチ８２３の割り込みハンドラ８２７は、取り出した出力通知と、取り出したパケットを対応付けて、ミラーパケットバッファ６００に蓄積する。
【００９８】
これにより、仮想スイッチ８２３は、パケットバッファ８３３に一旦登録されたパケットを、仮想スイッチ８２３で読み出して転送してしまう前に、ミラーパケットバッファ６００に移動し、パケットバッファ８３３からは削除することができる。結果として、仮想スイッチ８２３は、ターゲットＶＭ８０１からパケットが出力されることを一旦停止し、ターゲットＶＭ８０１からパケットが出力されたことに応じてミラーパケットがモニタＶＭ８０２に送信されることを防止することができる。ここで、図１１の説明に移行する。
【００９９】
図１１において、モニタＶＭ８０２は、ライブマイグレーションを終了し、停止状態が解除されたとする。（１１−１）割り込み解除部８２６は、モニタＶＭ８０２のライブマイグレーションが終了したことを検出すると、モニタＶＭ８０２の停止状態が解除されたと判定する。割り込み解除部８２６は、モニタＶＭ８０２の停止状態が解除されたと判定すると、割り込み状態をオフに設定し、ハイパーバイザ８２１に割り込みを発生させないように設定する。
【０１００】
（１１−２）パケット処理部８２８は、バックエンドドライバ８３５を介して、ミラーパケットバッファ６００に蓄積した入力通知を取り出して入力リングバッファ８３１に戻す。そして、パケット処理部８２８は、バックエンドドライバ８３５を介して、ミラーパケットバッファ６００に蓄積した入力通知に対応するパケットをパケットバッファ８３３に戻す。
【０１０１】
また、パケット処理部８２８は、バックエンドドライバ８３５を介して、ミラーパケットバッファ６００に蓄積した出力通知を取り出して出力リングバッファ８３２に戻す。そして、パケット処理部８２８は、バックエンドドライバ８３５を介して、ミラーパケットバッファ６００に蓄積した出力通知に対応するパケットをパケットバッファ８３３に戻す。
【０１０２】
これにより、仮想スイッチ８２３は、入力リングバッファ８３１への入力通知の登録、および、出力リングバッファ８３２への出力通知の登録を再開することができ、ターゲットＶＭ８０１に対するパケットの入出力を再開することができる。ここで、図１２の説明に移行する。
【０１０３】
図１２において、（１２−１）ミラーパケット生成部８２４は、ターゲットＶＭ８０１についてのパケットの入出力が行われたことに応じて、入出力が行われたパケットを複製したミラーパケットを生成する。そして、ミラーパケット生成部８２４は、生成したミラーパケットを、ホストＯＳ８５２に移動され、ホストＯＳ８５２で実行中であり、停止状態が解除されたモニタＶＭ８０２に送信する。
【０１０４】
ミラーパケット生成部８２４は、具体的には、ターゲットＶＭ８０１についてのパケットの入出力が行われたことに応じて、名称ｅｔｈ０が付与された、ミラーパケット制御装置１００−２に通じるポート１２０１にミラーパケットを出力する。一方で、ミラーパケット制御装置１００−２の仮想スイッチ１２１０は、名称ｅｔｈ０が付与された、ミラーパケット制御装置１００−１に通じるポート１２０２からミラーパケットを入力される。
【０１０５】
ミラーパケット制御装置１００−２の仮想スイッチ１２１０は、名称ｖｉｆ２．０が付与された、ホストＯＳ８５２に移動され、ホストＯＳ８５２で実行中であり、停止状態が解除されたモニタＶＭ８０２に通じるポート１２０３から、ミラーパケットを出力する。これにより、仮想スイッチ８２３は、ポートミラーリングを再開することができる。
【０１０６】
（状態管理処理手順の一例）
次に、図１３を用いて、ＶＭ状態管理部８１４が実行する状態管理処理手順の一例について説明する。
【０１０７】
図１３は、状態管理処理手順の一例を示すフローチャートである。図１３において、ＶＭ状態管理部８１４は、仮想基盤から、モニタＶＭ８０２の状態を示す通知を受信する（ステップＳ１３０１）。次に、ＶＭ状態管理部８１４は、受信した通知に基づいて、ＶＭ状態管理テーブル４００を参照して、モニタＶＭ８０２の状態の変化を検出する（ステップＳ１３０２）。
【０１０８】
そして、ＶＭ状態管理部８１４は、モニタＶＭ８０２の状態がサスペンドになったか否かを判定する（ステップＳ１３０３）。ここで、サスペンドになった場合（ステップＳ１３０３：Ｙｅｓ）、ＶＭ状態管理部８１４は、ステップＳ１３０４の処理に移行する。ステップＳ１３０４にて、ＶＭ状態管理部８１４は、サスペンドになったモニタＶＭ８０２のＶＭＩＤを割り込み設定部８２５に出力し、割り込み設定部８２５に図１４に後述する割り込み設定処理を実行させる（ステップＳ１３０４）。そして、ＶＭ状態管理部８１４は、ステップＳ１３０６の処理に移行する。
【０１０９】
一方で、サスペンドではなくなった場合（ステップＳ１３０３：Ｎｏ）、ＶＭ状態管理部８１４は、ステップＳ１３０５の処理に移行する。ステップＳ１３０５にて、ＶＭ状態管理部８１４は、サスペンドではなくなったモニタＶＭ８０２のＶＭＩＤを割り込み解除部８２６に出力し、割り込み解除部８２６に図１５に後述する割り込み解除処理を実行させる（ステップＳ１３０５）。そして、ＶＭ状態管理部８１４は、ステップＳ１３０６の処理に移行する。ステップＳ１３０６にて、ＶＭ状態管理部８１４は、ＶＭ状態管理テーブル４００を更新し（ステップＳ１３０６）、状態管理処理を終了する。これにより、ＶＭ状態管理部８１４は、ミラーパケット制御装置１００におけるモニタＶＭ８０２の状態を管理することができる。
【０１１０】
（割り込み設定処理手順の一例）
次に、図１４を用いて、割り込み設定部８２５が実行する割り込み設定処理手順の一例について説明する。
【０１１１】
図１４は、割り込み設定処理手順の一例を示すフローチャートである。図１４において、割り込み設定部８２５は、サスペンドになったモニタＶＭ８０２のＶＭＩＤの入力を受け付ける（ステップＳ１４０１）。次に、割り込み設定部８２５は、リングバッファ管理テーブル５００を参照して、入力リングバッファ８３１および出力リングバッファ８３２のＨｏｓｔ  Ａｄｄｒとサイズを取得する（ステップＳ１４０２）。そして、割り込み設定部８２５は、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあったときに割り込みを発生させるように、ハイパーバイザ８２１に設定要求を送信する（ステップＳ１４０３）。
【０１１２】
次に、割り込み設定部８２５は、リングバッファ管理テーブル５００の割り込み状態のフィールドをオンに設定する（ステップＳ１４０４）。そして、割り込み設定部８２５は、割り込み設定処理を終了する。これにより、割り込み設定部８２５は、パケットバッファ８３３に一旦登録されたパケットを、ターゲットＶＭ８０１が読み出してしまう前に、あるいは、仮想スイッチ８２３で読み出して転送してしまう前に、割り込みを発生させるようにすることができる。
【０１１３】
（割り込み解除処理手順の一例）
次に、図１５を用いて、割り込み解除部８２６が実行する割り込み解除処理手順の一例について説明する。
【０１１４】
図１５は、割り込み解除処理手順の一例を示すフローチャートである。図１５において、割り込み解除部８２６は、サスペンドではなくなったモニタＶＭ８０２のＶＭＩＤの入力を受け付ける（ステップＳ１５０１）。次に、割り込み解除部８２６は、リングバッファ管理テーブル５００を参照して、入力リングバッファ８３１および出力リングバッファ８３２のＨｏｓｔ  Ａｄｄｒとサイズを取得する（ステップＳ１５０２）。そして、割り込み解除部８２６は、入力リングバッファ８３１または出力リングバッファ８３２への書き込みがあっても割り込みを発生させないように、ハイパーバイザ８２１に解除要求を送信する（ステップＳ１５０３）。
【０１１５】
次に、割り込み解除部８２６は、リングバッファ管理テーブル５００の割り込み状態のフィールドをオフに設定する（ステップＳ１５０４）。そして、割り込み解除部８２６は、割り込み解除処理を終了する。これにより、割り込み解除部８２６は、割り込みを発生させないようにして、仮想スイッチ８２３の性能低下を抑制することができる。
【０１１６】
（割り込み処理手順の一例）
次に、図１６を用いて、割り込みハンドラ８２７が実行する割り込み処理手順の一例について説明する。
【０１１７】
図１６は、割り込み処理手順の一例を示すフローチャートである。図１６において、割り込みハンドラ８２７は、割り込みが発生したことを検出する（ステップＳ１６０１）。次に、割り込みハンドラ８２７は、入力リングバッファ８３１または出力リングバッファ８３２から入力通知または出力通知を読み出す（ステップＳ１６０２）。そして、割り込みハンドラ８２７は、読み出した入力通知または出力通知からパケットのアドレスとサイズを読み出して、パケットバッファ８３３に格納されたパケットを読み出す（ステップＳ１６０３）。
【０１１８】
次に、割り込みハンドラ８２７は、読み出したパケットについてのレコードを、ミラーパケットバッファ６００に追加する（ステップＳ１６０４）。そして、割り込みハンドラ８２７は、追加したレコードに、読み出した入力通知または出力通知と、読み出したパケットとを設定する（ステップＳ１６０５）。その後、割り込みハンドラ８２７は、割り込み処理を終了する。これにより、割り込みハンドラ８２７は、モニタＶＭ８０２が停止状態である間、ターゲットＶＭ８０１についてパケットの入出力が行われることを防止することができ、モニタＶＭ８０２にミラーパケットが送信されることを防止することができる。
【０１１９】
（パケット処理手順の一例）
次に、図１７を用いて、パケット処理部８２８が実行するパケット処理手順の一例について説明する。
【０１２０】
図１７は、パケット処理手順の一例を示すフローチャートである。図１７において、パケット処理部８２８は、リングバッファ管理テーブル５００の割り込み状態のフィールドがオンであるか否かを判定する（ステップＳ１７０１）。ここで、オンである場合（ステップＳ１７０１：Ｙｅｓ）、パケット処理部８２８は、ステップＳ１７０１の処理に戻る。
【０１２１】
一方で、オンではない場合（ステップＳ１７０１：Ｎｏ）、パケット処理部８２８は、ミラーパケットバッファ６００にレコードがあるか否かを判定する（ステップＳ１７０２）。ここで、レコードがない場合（ステップＳ１７０２：Ｎｏ）、パケット処理部８２８は、パケット処理を終了する。
【０１２２】
一方で、レコードがある場合（ステップＳ１７０２：Ｙｅｓ）、パケット処理部８２８は、ミラーパケットバッファ６００から、まだ読み出していないレコードを読み出す（ステップＳ１７０３）。このとき、パケット処理部８２８は、ミラーパケットバッファ６００の連番のフィールドを参照して、ミラーパケットバッファ６００に格納された順番に、レコードを読み出してもよい。
【０１２３】
次に、パケット処理部８２８は、読み出したレコードのパケットバッファ８３３のアドレスに基づいて、パケットバッファ８３３にパケットを書き込む（ステップＳ１７０４）。そして、パケット処理部８２８は、パケットが送信対象であるか否かを判定する（ステップＳ１７０５）。ここで、送信対象である場合（ステップＳ１７０５：Ｙｅｓ）、パケット処理部８２８は、出力リングバッファ８３２に出力通知を書き込み（ステップＳ１７０６）、ステップＳ１７０８の処理に移行する。
【０１２４】
一方で、送信対象ではない場合（ステップＳ１７０５：Ｎｏ）、パケット処理部８２８は、入力リングバッファ８３１に入力通知を書き込み（ステップＳ１７０７）、ステップＳ１７０８の処理に移行する。ステップＳ１７０８にて、パケット処理部８２８は、ミラーパケットバッファ６００に、まだ読み出していないレコードがあるか否かを判定する（ステップＳ１７０８）。
【０１２５】
ここで、まだ読み出していないレコードがある場合（ステップＳ１７０８：Ｙｅｓ）、パケット処理部８２８は、ステップＳ１７０２の処理に戻る。一方で、読み出していないレコードがない場合（ステップＳ１７０８：Ｎｏ）、パケット処理部８２８は、パケット処理を終了する。これにより、パケット処理部８２８は、ターゲットＶＭ８０１に対するパケットの入出力を再開させ、ターゲットＶＭ８０１に対するパケットの入出力が再開したことに応じてモニタＶＭ８０２へのミラーパケットの送信も再開させることができる。
【０１２６】
（ミラーリング処理手順の一例）
次に、図１８を用いて、ミラーパケット生成部８２４が実行するミラーリング処理手順の一例について説明する。
【０１２７】
図１８は、ミラーリング処理手順の一例を示すフローチャートである。図１８において、ミラーパケット生成部８２４は、パケットバッファ８３３にパケットが書き込まれているか否かを判定する（ステップＳ１８０１）。ここで、書き込まれていない場合（ステップＳ１８０１：Ｎｏ）、ミラーパケット生成部８２４は、ステップＳ１８０１の処理に戻る。
【０１２８】
一方で、書き込まれている場合（ステップＳ１８０１：Ｙｅｓ）、ミラーパケット生成部８２４は、入力リングバッファ８３１または出力リングバッファ８３２に入力通知または出力通知が書き込まれているか否かを判定する（ステップＳ１８０２）。ここで、書き込まれていない場合（ステップＳ１８０２：Ｎｏ）、ミラーパケット生成部８２４は、ステップＳ１８０７の処理に移行する。
【０１２９】
一方で、書き込まれている場合（ステップＳ１８０２：Ｙｅｓ）、ミラーパケット生成部８２４は、パケットの通信方向と、キャプチャ設定された通信方向とが一致するか否かを判定する（ステップＳ１８０３）。ここで、一致しない場合（ステップＳ１８０３：Ｎｏ）、ミラーパケット生成部８２４は、ステップＳ１８０６の処理に移行する。
【０１３０】
一方で、一致する場合（ステップＳ１８０３：Ｙｅｓ）、ミラーパケット生成部８２４は、パケットを複製したミラーパケットを生成する（ステップＳ１８０４）。次に、ミラーパケット生成部８２４は、生成したミラーパケットを、モニタＶＭ８０２へのポートに出力する（ステップＳ１８０５）。そして、ミラーパケット生成部８２４は、パケットを通常の宛先へのポートに出力する（ステップＳ１８０６）。
【０１３１】
次に、ミラーパケット生成部８２４は、パケットバッファ８３３にパケットが残っているか否かを判定する（ステップＳ１８０７）。ここで、残っている場合（ステップＳ１８０７：Ｙｅｓ）、ミラーパケット生成部８２４は、ステップＳ１８０１の処理に戻る。
【０１３２】
一方で、残っていない場合（ステップＳ１８０７：Ｎｏ）、ミラーパケット生成部８２４は、ミラーリング処理を終了する。これにより、ミラーパケット生成部８２４は、ターゲットＶＭ８０１についてパケットバッファ８３３に格納されたパケットの入出力を行うことができる。また、ミラーパケット生成部８２４は、パケットバッファ８３３に格納されたパケットを複製したミラーパケットを、モニタＶＭ８０２に送信することができる。
【０１３３】
（モニタＶＭ８０２の停止時の動作の流れの一例）
次に、図１９を用いて、ポートミラーリングシステム２００におけるモニタＶＭ８０２の停止時の動作の流れの一例について説明する。
【０１３４】
図１９は、モニタＶＭ８０２の停止時の動作の流れの一例を示すシーケンス図である。図１９において、管理者８０３は、モニタＶＭ８０２のＶＭＩＤを含むライブマイグレーション要求を、仮想基盤１９００に入力する（ステップＳ１９０１）。仮想基盤１９００は、ライブマイグレーション要求の入力を受け付けると、モニタＶＭ８０２のＶＭＩＤを含むモニタＶＭ８０２の状態通知を、ＶＭ状態管理部８１４に入力する（ステップＳ１９０２）。
【０１３５】
ＶＭ状態管理部８１４は、モニタＶＭ８０２のサスペンドを検出する（ステップＳ１９０３）。ＶＭ状態管理部８１４は、モニタＶＭ８０２のサスペンドを検出すると、モニタＶＭ８０２のＶＭＩＤを含む割り込みの設定要求を、割り込み設定部８２５に出力する（ステップＳ１９０４）。
【０１３６】
割り込み設定部８２５は、割り込みの設定要求の入力を受け付けると、割り込みの設定要求をハイパーバイザ８２１に入力する（ステップＳ１９０５）。ハイパーバイザ８２１は、割り込みの設定要求の入力を受け付けると、割り込みの設定を行う（ステップＳ１９０６）。これにより、ミラーパケット制御装置１００は、ミラーパケットが失われる確率を低減することができる。
【０１３７】
（モニタＶＭ８０２の停止解除時の動作の流れの一例）
次に、図２０を用いて、ポートミラーリングシステム２００におけるモニタＶＭ８０２の停止解除時の動作の流れの一例について説明する。
【０１３８】
図２０は、モニタＶＭ８０２の停止解除時の動作の流れの一例を示すシーケンス図である。図２０において、仮想基盤１９００は、モニタＶＭ８０２のライブマイグレーションの完了を検出する（ステップＳ２００１）。仮想基盤１９００は、モニタＶＭ８０２のライブマイグレーションの完了を検出すると、モニタＶＭ８０２のＶＭＩＤを含むモニタＶＭ８０２の状態通知を、ＶＭ状態管理部８１４に入力する（ステップＳ２００２）。
【０１３９】
ＶＭ状態管理部８１４は、モニタＶＭ８０２のサスペンドの解除を検出する（ステップＳ２００３）。ＶＭ状態管理部８１４は、モニタＶＭ８０２のサスペンドの解除を検出すると、モニタＶＭ８０２のＶＭＩＤを含む割り込みの解除要求を、割り込み解除部８２６に出力する（ステップＳ２００４）。
【０１４０】
割り込み解除部８２６は、割り込みの解除要求の入力を受け付けると、割り込みの解除要求をハイパーバイザ８２１に入力する（ステップＳ２００５）。ハイパーバイザ８２１は、割り込みの解除要求の入力を受け付けると、割り込みの設定を解除する（ステップＳ２００６）。これにより、ミラーパケット制御装置１００は、ポートミラーリングを再開することができる。
【０１４１】
（ポートミラーリングシステム２００の動作例２）
次に、図２１を用いて、ポートミラーリングシステム２００の動作例２について説明する。動作例１では、仮想スイッチ８２３が、ターゲットＶＭ８０１に入力されるパケットも、ターゲットＶＭ８０１から出力されるパケットも複製して、複製したミラーパケットをモニタＶＭ８０２に送信する場合について説明した。
【０１４２】
これに対し、動作例２では、仮想スイッチ８２３が、ターゲットＶＭ８０１に入力されるパケットを複製しなくてもよい場合と、ターゲットＶＭ８０１に入力されるパケットを複製する場合とにおいて、異なる動作を行う場合について説明する。
【０１４３】
図２１は、ポートミラーリングシステム２００の動作例２を示す説明図である。図２１において、ポートミラーマネージャ８１２は、さらに、判定部２１０１を有する。判定部２１０１は、管理者８０３によってキャプチャ設定された通信方向を取得する。キャプチャ設定は、ミラーパケットを生成する対象とするパケットの通信方向の設定である。
【０１４４】
判定部２１０１は、例えば、キャプチャ設定された通信方向が、ターゲットＶＭ８０１から出力される方向を示す「送信」であれば、ターゲットＶＭ８０１をサスペンドする。一方で、判定部２１０１は、例えば、キャプチャ設定された通信方向が、ターゲットＶＭ８０１に入力される方向を示す「受信」であれば、動作例１と同様に、仮想スイッチ８２３に処理させる。同様に、判定部２１０１は、例えば、キャプチャ設定された通信方向が、ターゲットＶＭ８０１に入出力される方向を示す「送受信」であれば、動作例１と同様に、仮想スイッチ８２３に処理させる。
【０１４５】
これにより、管理装置２０１は、モニタＶＭ８０２がライブマイグレーションを行っている間は、ターゲットＶＭ８０１をサスペンドし、ターゲットＶＭ８０１からパケットが送信されることを抑制することができる。このため、管理装置２０１は、ターゲットＶＭ８０１から送信されるパケットを複製したミラーパケットが停止中のモニタＶＭ８０２に送信されることを防止し、ミラーパケットがモニタＶＭ８０２に受信されずに失われることを防止することができる。
【０１４６】
（判定処理手順の一例）
次に、図２２を用いて、判定部２１０１が実行する判定処理手順の一例について説明する。
【０１４７】
図２２は、判定処理手順の一例を示すフローチャートである。図２２において、判定部２１０１は、管理者８０３によってキャプチャ設定された通信方向を取得する（ステップＳ２２０１）。次に、判定部２１０１は、キャプチャ設定された通信方向が送信であるか否かを判定する（ステップＳ２２０２）。ここで、送信ではない場合（ステップＳ２２０２：Ｎｏ）、判定部２１０１は、ＶＭ状態管理部８１４に状態管理処理を実行させ（ステップＳ２２０３）、判定処理を終了する。
【０１４８】
一方で、送信である場合（ステップＳ２２０２：Ｙｅｓ）、判定部２１０１は、モニタＶＭ８０２の状態がサスペンドであるか否かを判定する（ステップＳ２２０４）。ここで、サスペンドである場合（ステップＳ２２０４：Ｙｅｓ）、判定部２１０１は、ターゲットＶＭ８０１のサスペンド要求を、仮想基盤１９００に出力し（ステップＳ２２０５）、判定処理を終了する。
【０１４９】
一方で、サスペンドではない場合（ステップＳ２２０４：Ｎｏ）、判定部２１０１は、ターゲットＶＭ８０１のサスペンド解除要求を、仮想基盤１９００に出力し（ステップＳ２２０６）、判定処理を終了する。これにより、判定部２１０１は、ターゲットＶＭ８０１を停止させ、ミラーパケットが失われる確率を低減することができる。
【０１５０】
（ポートミラーリングシステム２００の動作例３）
次に、図２３を用いて、ポートミラーリングシステム２００の動作例３について説明する。動作例１では、仮想スイッチ８２３が、モニタＶＭ８０２がライブマイグレーションを開始したことに応じて、モニタＶＭ８０２が停止状態になったと判定する場合について説明した。
【０１５１】
これに対し、動作例３では、仮想スイッチ８２３が、モニタＶＭ８０２についてのネットワークの転送量を監視し、ネットワークの転送量が閾値を下回ったことに応じて、モニタＶＭ８０２が停止状態になったと判定する場合について説明する。
【０１５２】
図２３は、ポートミラーリングシステム２００の動作例３を示す説明図である。図２３において、ホストＯＳ８２２は、さらに、ＶＭ状態判定部２３０１を有する。ＶＭ状態判定部２３０１は、モニタＶＭ８０２についてのネットワークの転送量を監視する。そして、ＶＭ状態判定部２３０１は、ネットワークの転送量が閾値を下回った場合、モニタＶＭ８０２が停止状態であると判定して、割り込み設定部８２５に通知する。割り込み設定部８２５は、ＶＭ状態判定部２３０１によってモニタＶＭ８０２が停止状態であると判定された場合、動作例１と同様の処理を行うため、説明を省略する。
【０１５３】
その後、ＶＭ状態判定部２３０１は、モニタＶＭ８０２についてのＧＡＲＰ（Ｇｒａｔｕｉｔｏｕｓ  Ａｄｄｒｅｓｓ  Ｒｅｓｏｌｕｔｉｏｎ  Ｐｒｏｔｏｃｏｌ）を監視する。そして、ＶＭ状態判定部２３０１は、ＧＡＲＰが検出された場合、モニタＶＭ８０２の停止状態が解除されたと判定して、割り込み解除部８２６に通知する。割り込み解除部８２６は、ＶＭ状態判定部２３０１によってモニタＶＭ８０２が停止状態であると判定された場合、動作例１と同様の処理を行うため、説明を省略する。
【０１５４】
これにより、仮想スイッチ８２３は、モニタＶＭ８０２が停止状態である期間を精度よく判定することができる。結果として、仮想スイッチ８２３は、モニタＶＭ８０２が停止状態であると判定される期間が長くなることに応じて、ターゲットＶＭ８０１についてのパケットの入出力が行われない期間も長くなってしまうことを抑制することができる。
【０１５５】
（状態判定処理手順の一例）
次に、図２４を用いて、ＶＭ状態判定部２３０１が実行する状態判定処理手順の一例について説明する。
【０１５６】
図２４は、状態判定処理手順の一例を示すフローチャートである。図２４において、ＶＭ状態判定部２３０１は、モニタＶＭ８０２のライブマイグレーションの開始通知の入力を受け付ける（ステップＳ２４０１）。次に、ＶＭ状態判定部２３０１は、モニタＶＭ８０２についてのネットワークの転送量を監視する（ステップＳ２４０２）。
【０１５７】
そして、ＶＭ状態判定部２３０１は、ネットワークの転送量が閾値を下回ったか否かを判定する（ステップＳ２４０３）。ここで、閾値以上である場合（ステップＳ２４０３：Ｎｏ）、ＶＭ状態判定部２３０１は、ステップＳ２４０２の処理に戻る。
【０１５８】
一方で、閾値を下回った場合（ステップＳ２４０３：Ｙｅｓ）、ＶＭ状態判定部２３０１は、モニタＶＭ８０２が停止状態であると判定する（ステップＳ２４０４）。次に、ＶＭ状態判定部２３０１は、モニタＶＭ８０２についてのＧＡＲＰを監視する（ステップＳ２４０５）。
【０１５９】
そして、ＶＭ状態判定部２３０１は、ＧＡＲＰが検出されたか否かを判定する（ステップＳ２４０６）。ここで、ＧＡＲＰが検出されない場合（ステップＳ２４０６：Ｎｏ）、ＶＭ状態判定部２３０１は、ステップＳ２４０５の処理に戻る。
【０１６０】
一方で、ＧＡＲＰが検出された場合（ステップＳ２４０６：Ｙｅｓ）、ＶＭ状態判定部２３０１は、モニタＶＭ８０２の停止状態が解除されたと判定する（ステップＳ２４０７）。そして、ＶＭ状態判定部２３０１は、状態判定処理を終了する。これにより、ＶＭ状態判定部２３０１は、モニタＶＭ８０２が停止状態である期間を、精度よく特定することができる。
【０１６１】
以上説明したように、ミラーパケット制御装置１００によれば、仮想スイッチ８２３に接続されたモニタＶＭ８０２の停止状態を検出することができる。また、ミラーパケット制御装置１００によれば、停止状態が検出されてから停止状態が解除されるまでの期間においてターゲットＶＭ８０１についての入出力の対象となるパケットについては退避バッファに蓄積しておくことができる。また、ミラーパケット制御装置１００によれば、停止状態が解除されると、退避バッファに蓄積しておいたパケットを、仮想スイッチ８２３に接続されたターゲットＶＭ８０１についての入出力に用いられる入出力バッファに登録することができる。これにより、ミラーパケット制御装置１００は、モニタＶＭ８０２が停止状態である間、ターゲットＶＭ８０１に対してパケットの入出力が行われることを防止することができ、モニタＶＭ８０２にミラーパケットが送信されることを防止することができる。
【０１６２】
また、ミラーパケット制御装置１００によれば、入出力バッファに登録したパケットについてターゲットＶＭ８０１に対して入出力を行うとともに、入出力バッファに登録したパケットを複製したミラーパケットをモニタＶＭ８０２に出力することができる。これにより、ミラーパケット制御装置１００は、ポートミラーリングを再開することができる。
【０１６３】
また、ミラーパケット制御装置１００によれば、退避バッファに蓄積した順序で、退避バッファに蓄積しておいたパケットを、入出力バッファに登録することができる。これにより、ミラーパケット制御装置１００は、入出力の順番を変えずに、ターゲットＶＭ８０１に対するパケットの入出力が再開されるようにすることができる。
【０１６４】
また、ミラーパケット制御装置１００によれば、モニタＶＭ８０２が動作中の演算装置から他の演算装置にライブマイグレーションを開始したことに応じて、モニタＶＭ８０２の停止状態を検出することができる。これにより、ミラーパケット制御装置１００は、モニタＶＭ８０２が停止中である期間を特定可能になる。
【０１６５】
また、ミラーパケット制御装置１００によれば、動作中の演算装置から他の演算装置へのモニタＶＭ８０２に関する情報の転送量が閾値を下回ったことに応じて、モニタＶＭ８０２の停止状態を検出することができる。これにより、ミラーパケット制御装置１００は、モニタＶＭ８０２が停止中である期間を、精度よく特定可能になる。
【０１６６】
また、ミラーパケット制御装置１００によれば、ターゲットＶＭ８０１に入力されるパケットについて複製しない状態に設定された場合には、モニタＶＭ８０２の停止状態が検出されたことに応じてターゲットＶＭ８０１を停止することができる。また、この場合には、ミラーパケット制御装置１００によれば、停止状態が検出されてから停止状態が解除されるまでの期間においてターゲットＶＭ８０１についての入出力の対象となるパケットについて退避バッファに蓄積しないようにすることができる。これにより、ミラーパケット制御装置１００は、モニタＶＭ８０２が停止状態である間、ターゲットＶＭ８０１に対してパケットの入出力が行われることを防止することができ、モニタＶＭ８０２にミラーパケットが送信されることを防止することができる。
【０１６７】
なお、本実施の形態で説明したミラーパケット制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ミラーパケット制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ミラーパケット制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１６８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１６９】
（付記１）コンピュータに、
仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、
処理を実行させることを特徴とするミラーパケット制御プログラム。
【０１７０】
（付記２）前記コンピュータに、
前記入出力バッファに登録したパケットについて前記第１仮想マシンに対して入出力を行うとともに、前記入出力バッファに登録したパケットを複製したミラーパケットを前記第２仮想マシンに出力する、処理を実行させることを特徴とする付記１に記載のミラーパケット制御プログラム。
【０１７１】
（付記３）前記登録する処理は、
前記退避バッファに蓄積した順序で、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、ことを特徴とする付記１または２に記載のミラーパケット制御プログラム。
【０１７２】
（付記４）前記検出する処理は、
前記第２仮想マシンが動作中の演算装置から他の演算装置にライブマイグレーションを開始したことに応じて、前記第２仮想マシンの停止状態を検出する、ことを特徴とする付記１〜３のいずれか一つに記載のミラーパケット制御プログラム。
【０１７３】
（付記５）前記検出する処理は、
前記第２仮想マシンが動作中の演算装置から他の演算装置にライブマイグレーションする場合において、前記動作中の演算装置から前記他の演算装置への前記第２仮想マシンに関する情報の転送量が閾値を下回ったことに応じて、前記第２仮想マシンの停止状態を検出する、ことを特徴とする付記１〜３のいずれか一つに記載のミラーパケット制御プログラム。
【０１７４】
（付記６）前記コンピュータに、
前記第１仮想マシンに入力されるパケットについて複製しない状態に設定された場合には、前記第２仮想マシンの停止状態が検出されたことに応じて前記第１仮想マシンを停止する、処理を実行させ、
前記蓄積する処理は、
前記第１仮想マシンに入力されるパケットについて複製しない状態に設定された場合には、前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについて前記退避バッファに蓄積しない、ことを特徴とする付記１〜５のいずれか一つに記載のミラーパケット制御プログラム。
【０１７５】
（付記７）コンピュータが、
仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、
処理を実行することを特徴とするミラーパケット制御方法。
【０１７６】
（付記８）仮想スイッチに接続された第１仮想マシンについての入出力に用いられる入出力バッファに登録されたパケットを複製したミラーパケットが出力される、前記仮想スイッチに接続された第２仮想マシンの停止状態を検出し、
前記停止状態が検出されてから前記停止状態が解除されるまでの期間において前記第１仮想マシンについての入出力の対象となるパケットについては前記入出力バッファとは異なる退避バッファに蓄積し、
前記停止状態が解除されると、前記退避バッファに蓄積したパケットを、前記入出力バッファに登録する、
制御部を有することを特徴とするミラーパケット制御装置。
【符号の説明】
【０１７７】
１００  ミラーパケット制御装置
１０１，８０１  ターゲットＶＭ
１０２，８０２  モニタＶＭ
１１０，８１０，８２０，８５０  ハードウェア
１２０，８１１，８２１，８５１  ハイパーバイザ
１３０，８２２，８５２  ホストＯＳ
１４０，８２３  仮想スイッチ
１５０，８２４  ミラーパケット生成部
１６０  退避バッファ
１７０，１８０  入出力バッファ
１７１，１８１，８３５，８４５  バックエンドドライバ
１７２，１８２  フロントエンドドライバ
２００  ポートミラーリングシステム
２０１  管理装置
２１０  ネットワーク
３００  バス
３０１  ＣＰＵ
３０２  メモリ
３０３  ネットワークＩ／Ｆ
３０４  ディスクドライブ
３０５  ディスク
３０６  記録媒体Ｉ／Ｆ
４００  ＶＭ状態管理テーブル
５００  リングバッファ管理テーブル
６００  ミラーパケットバッファ
７０１  検出部
７０２  退避部
７０３  登録部
７０４  出力部
８０３  管理者
８１２  ポートミラーマネージャ
８１３  ポートミラー構成部
８１４  ＶＭ状態管理部
８２５  割り込み設定部
８２６  割り込み解除部
８２７  割り込みハンドラ
８２８  パケット処理部
８３１，８４１  入力リングバッファ
８３２，８４２  出力リングバッファ
８３３，８４３  パケットバッファ
２１０１  判定部
２３０１  ＶＭ状態判定部
【図１】
0006708007.tif 000002
【図２】
0006708007.tif 000003
【図３】
0006708007.tif 000004
【図４】
0006708007.tif 000005
【図５】
0006708007.tif 000006
【図６】
0006708007.tif 000007
【図７】
0006708007.tif 000008
【図８】
0006708007.tif 000009
【図９】
0006708007.tif 000010
【図１０】
0006708007.tif 000011
【図１１】
0006708007.tif 000012
【図１２】
0006708007.tif 000013
【図１３】
0006708007.tif 000014
【図１４】
0006708007.tif 000015
【図１５】
0006708007.tif 000016
【図１６】
0006708007.tif 000017
【図１７】
0006708007.tif 000018
【図１８】
0006708007.tif 000019
【図１９】
0006708007.tif 000020
【図２０】
0006708007.tif 000021
【図２１】
0006708007.tif 000022
【図２２】
0006708007.tif 000023
【図２３】
0006708007.tif 000024
【図２４】
0006708007.tif 000025