(57)【要約】【課題】１つの物理マシン内で、物理ＮＩＣに依存した特別なドライバを使用することなく、複数の仮想マシンがメモリコピーを伴わない高速な通信を別々に行うことを可能にすること。【解決手段】物理ＮＩＣ１２から各仮想マシン１１−１、１１−２に向かう上り方向にデータ転送する第１転送プロセス１４と反対の下り方向にデータ転送する第２転送プロセス１５と、上りおよび下り方向のデータ中継に割り当て可能な複数の中継部を有する共有メモリ１３と、入力されたデータをその送信先に応じて振り分ける振り分け機能部１４ｂと、各仮想マシンを特定する固有情報を生成し該当する仮想マシンが使用する共有メモリ１３上の領域を確保するＭＡＣアドレス生成機能部１６ａを備え、振り分け機能部１４ｂは、前記固有情報により入力された各データを振り分ける。【選択図】図６
2018133758.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想マシンの相互間、および前記各仮想マシンと物理通信インタフェースとの間で相互間通信を実現するための仮想マシン間通信システムであって、
前記物理通信インタフェースから前記各仮想マシンに向かう上り方向のデータ転送を処理する第１の転送プロセスと、
前記各仮想マシンから前記物理通信インタフェースに向かう下り方向のデータ転送を処理する第２の転送プロセスと、
前記第１の転送プロセスおよび前記第２の転送プロセスと、前記各仮想マシンとの間の通信を中継するものであり、前記上り方向のデータ中継に割り当て可能な第１の中継部と、前記下り方向のデータ中継に割り当て可能な第２の中継部と、を有するバッファメモリと、
前記第１の転送プロセスおよび前記第２の転送プロセスの各々に配置され、入力されたデータを当該データの送信先に応じて振り分けて、前記バッファメモリ又は前記物理通信インタフェースに出力する振り分け機能部と、
前記各仮想マシンを特定する固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する固有情報生成制御部、
を備え、前記振り分け機能部は、前記固有情報に基づいて入力された各データを振り分ける、
仮想マシン間通信システム。
【請求項２】
前記バッファメモリは、前記第１の中継部、および前記第２の中継部の他に、前記第２の転送プロセスの出力から前記第１の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第３の中継部、を有する
請求項１に記載の仮想マシン間通信システム。
【請求項３】
前記第１の転送プロセスおよび前記第２の転送プロセスの各々は、送信元、送信先、および通信経路の少なくとも１つが異なる複数種類の入力データの処理順序を制御して複数データの競合を回避するマージ機能部を有する、
請求項１に記載の仮想マシン間通信システム。
【請求項４】
前記バッファメモリは、前記第１の中継部、および前記第２の中継部の他に、前記第２の転送プロセスの出力から前記第１の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第３の中継部、を有し、
前記第１の転送プロセスおよび前記第２の転送プロセスの各々は、送信元、送信先、および通信経路の少なくとも１つが異なる複数種類の入力データの処理順序を制御して複数データの競合を回避するマージ機能部を有し、
前記第２の転送プロセスにおける前記振り分け機能部は、受け取った入力データの送出先を、前記バッファメモリ上の前記第３の中継部と、前記物理通信インタフェースとのいずれか一方に振り分け、
前記第１の転送プロセスにおける前記マージ機能部は、前記バッファメモリ上の前記第３の中継部からの入力データ、および前記物理通信インタフェースからの入力データの両方を処理対象とする、
請求項１に記載の仮想マシン間通信システム。
【請求項５】
前記固有情報生成制御部は、前記仮想マシンを新たに起動する際に、該当する前記仮想マシンを特定する前記固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する、
請求項１に記載の仮想マシン間通信システム。
【請求項６】
前記固有情報生成制御部が生成した前記仮想マシンの固有情報、および前記仮想マシンに割り当てた前記バッファメモリの領域を表す情報を、前記振り分け機能部、および前記仮想マシンに通知する生成情報通知制御部、
を更に備えた請求項１に記載の仮想マシン間通信システム。
【請求項７】
前記第１の転送プロセスおよび前記第２の転送プロセスの少なくとも一方は、新たに起動した前記仮想マシンに対応付けられた情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を追加する、
請求項６に記載の仮想マシン間通信システム。
【請求項８】
前記第１の転送プロセスおよび前記第２の転送プロセスの少なくとも一方は、登録済みの前記仮想マシンの削除を表す情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を削除する、
請求項６に記載の仮想マシン間通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン間通信システムに関し、例えばネットワークを介して様々なサービスをユーザに提供するために利用可能な技術に関する。
【背景技術】
【０００２】
例えば通信ネットワークを経由してユーザに何らかのサービスを提供しようとする通信システムは、従来より、提供するサービスの機能毎に開発されたサーバなどの専用のハードウェアを用いて構成することが一般的である。しかし、このような構成では、機能とハードウェアとが一体化するため、ある機能で使用率が低く余裕のある計算機資源が存在する場合でも、その中の余剰の計算機資源を他の機能に割り当てることができない。したがって、計算機資源の利用効率が低下し、無駄が大きくなる。
【０００３】
そこで、例えば非特許文献１、非特許文献２に示されているような仮想化技術の開発が進められている。一般的に、仮想化技術では、ハードウェアと各機能との間に仮想化層を挟むことで、各機能からハードウェアを隠蔽し、ハードウェアと各機能とを分離する。このような仮想化技術をうまく利用すれば、例えば計算機資源を必要なときに必要な分だけ、各機能へ割り当てるような、柔軟で効率的な通信ネットワークが実現可能である。
【０００４】
また、仮想化された通信ネットワークにおいては、機能毎に専用の装置を割り当てる必要がなくなる。したがって、例えば１つの汎用サーバ上で、仮想マシン（ＶＭ：Virtual Machine）を必要な数だけ稼働させ、それぞれの仮想マシンの中で必要な機能を実現することが可能になる。しかし、仮想化特有の問題として、性能が著しく低下するという問題がある。
【０００５】
また、非特許文献１に示されているように、通信ネットワークが提供するサービスの構成を動的且つ柔軟に変更するためのＳＦＣ（Service Function Chaining）が注目されている。更に、ＳＦＣの実現手法として、仮想マシン上に部品化したサービス機能を搭載し、複数のサービス機能を組み合わせることが検討されている。
【０００６】
上記のような組み合わせを実現する場合には、複数の仮想マシン間を接続するためのＩＶＣ（Inter-VM Communication）技術が必要になる。また、一般的なＩＶＣ技術では、処理性能のボトルネックがあることが知られている。そこで、非特許文献１および非特許文献２は、高速かつ柔軟な仮想マシン間接続を実現するためのＳＰＰ（Soft Patch Panel）の技術を示している。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】小川泰文・中村哲朗・高田直樹・中村宏之、“高速かつ柔軟な仮想マシン間接続を実現するSoft Patch Panelの提案および評価”、電子情報通信学会技術報告、２０１６年１１月１７日、ｖｏｌ．１１６、 ｎｏ．３２２（ＮＳ２０１６−１１６）、ｐｐ．８５−９０、インターネット<URL: http://www.ieice.org/ken/paper/201611256bmF/>
【非特許文献２】中村哲朗・小川泰文・高田直樹・中村宏之、“NetroSphereの普及に向けた取り組み MAGONIA (SPP)：機能間高速連携技術”、NTT技術ジャーナル, ２０１６年８月１日、第２８巻、第８号、Ｐ．３１−３３．、インターネット<URL:http://www.ntt.co.jp/journal/1608/files/jn20160828.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記ＩＶＣ技術を利用した通信システムの主要部の構成例を図１に示す。図１に示した通信システムにおいては、物理マシン５０、すなわち現実のコンピュータやサーバの上に、２つの独立した仮想マシン５１−１、５１−２が構築されている。この仮想マシン５１−１，５１−２は、不図示のＣＰＵ（Central Processing Unit）がハイパーバイザ・プログラムを実行することによって具現化される。また、物理マシン５０に備わった物理ネットワークインタフェースカード（ＮＩＣ）の通信ポートとして、NIC−port1 ５２−１、およびNIC−port2 ５２−２の２つが設けてある。
【０００９】
図１の通信システムにおいて、ＩＶＣ機能部５３は、物理マシン１０上に具現化されて、仮想マシン５１−１、および５１−２と、NIC−port1 ５２−１、およびNIC−port2 ５２−２の間の通信を中継する。つまり、ＩＶＣ機能部５３を経由して、仮想マシン５１−１とNIC−port1 ５２−１、又はNIC−port2 ５２−２との間の通信経路５４が確保できる。更に、仮想マシン５１−２とNIC−port2 ５２−２、又はNIC−port1 ５２−１との間の通信経路５４が確保できる。更に、仮想マシン５１−１と仮想マシン５１−２との間の通信経路５４が確保できる。しかし、一般的なＩＶＣ機能部５３の場合は、通信経路を切り替えるために仮想的なスイッチを設ける必要があるため、このスイッチにより処理性能が低下する。
【００１０】
前記ＩＶＣとして、ＳＲ−ＩＯＶ（Single Root I/O Virtualization）およびパススルーを組み合わせた第１比較例の通信システムを図２に示す。図２の通信システムにおいても、物理マシン６０上に２つの仮想マシン６１−１、６１−２が構築され、更に物理マシン６０上にはNIC−port1 ６２−１、およびNIC−port2 ６２−２が備わっている。また、図２の構成では、ハードウェアである１つのNIC−port1 ６２−１を論理的に複数の子ＮＩＣ−ＶＦ（Virtual Function）６２ｂ１、６２ｂ２に分割している。また、それぞれのＮＩＣ−ＶＦ ６２ｂ１、６２ｂ２が各仮想マシン６１−１、６１−２から直接見えるように、仮想化層、すなわちハイパーバイザを介さずに各ＮＩＣ−ＶＦ ６２ｂ１、６２ｂ２を割り当ててある。
【００１１】
図２に示した各仮想マシン６１−１、６１−２の内部には、各物理ＮＩＣに対応したＶＦドライバ６１ａが動作している。また、また、図２に示した構成では、各NIC−port1 ６２−１、およびNIC−port2 ６２−２の内部に、スイッチ機能６２ａがハードウェア的に組み込まれている。
【００１２】
図２に示した第１比較例の構成においては、各NIC−port1 ６２−１、およびNIC−port2 ６２−２の内部にスイッチ機能６２ａがハードウェア的に組み込まれている。これによりＭＡＣ（Media Access Control）アドレスを用いて経路６４からＮＩＣ−ＶＦ６２ｂ１、６２ｂ２に向かうトラフィックの振り分けが可能である。しかし、各物理ＮＩＣに対応したＶＦドライバ６１ａを各仮想マシン６１−１、６１−２の内部に構築する必要がある。そのため、システムの仮想化レベルが低下し、管理者は、物理マシン６０に搭載されているＮＩＣと、物理マシン６０上に構築されている仮想マシンを、運用上、全て管理しなければならない。
【００１３】
前記ＩＶＣとして、ＳＰＰ（Soft Patch Panel）を採用した第２比較例の通信システムの構成例を図３に示す。図３の通信システムにおいても、物理マシン７０上に２つの仮想マシン７１−１、７１−２が構築されている。更に物理マシン７０上にはNIC−port1 ７２−１、およびNIC−port2 ７２−２が備えられている。物理マシン７０上には更に、仮想マシン７１−１、７１−２、NIC−port1 ７２−１、およびNIC−port2 ７２−２の間でデータの受け渡しを行わせる共有メモリ７３（バッファメモリ）が配置されている。また、物理マシン７０上にはパッチコントローラ７５の命令により制御される転送プロセス７４−１、７４−２、および７４−３が構築されている。
【００１４】
図３の第２比較例の構成では、転送プロセス７４−１から仮想マシン７１−１に向かう上り方向のパケット転送に共有メモリ７３の領域７３ａがリングバッファとして使用される。また、仮想マシン７１−１から転送プロセス７４−２に向かう方向のパケット転送に共有メモリ７３の領域７３ｂがリングバッファとして使用される。また、転送プロセス７４−２から仮想マシン７１−２に向かう方向のパケット転送に共有メモリ７３の領域７３ｃがリングバッファとして使用される。また、仮想マシン７１−２から転送プロセス７４−３に向かう方向のパケット転送に共有メモリ７３の領域７３ｄがリングバッファとして使用される。
【００１５】
図３の第２比較例の構成では、共有メモリ７３を利用することにより、複数の仮想マシン７１−１、７１−２の間、および、仮想マシン７１−１、７１−２とNIC−port1 ７２−１、NIC−port2 ７２−２との間でデータの受け渡しを行うことができる。また、各転送プロセス７４−１、７４−２、および７４−３は、パッチコントローラ７５の命令によりパケットの転送元および転送先を変更することができる。
【００１６】
但し、図３の第２比較例の構成では、２つ以上の転送プロセスが同じＮＩＣのインタフェースから同時にパケットを受信することはできない。また、２つ以上の転送プロセスが同じＮＩＣのインタフェースへ同時にパケットを送信することはできない。なお、１つの転送プロセスが複数のＮＩＣのインタフェースからパケットを受信したり、１つの転送プロセスが複数のＮＩＣのインタフェースへパケットを送信することは可能である。
【００１７】
図３の第２比較例の構成における、上り方向のトラフィックに対する動作例を図４に示す。すなわち、図３に示した第２比較例の構成において、ＮＩＣから仮想マシン７１−１に向かうトラフィック７８ａと、ＮＩＣから仮想マシン７１−２に向かうトラフィック７８ｂとが共通のNIC−port1 ７２−１で受信される状態が図４に示されている。
【００１８】
図４の状態では、経路７７を通って送信先が異なる複数のトラフィック７８ａ、７８ｂが共通のNIC−port1 ７２−１に到着した場合に競合が発生する。また、複数のトラフィック７８ａ、７８ｂを送信先に応じて振り分けるための機能がNIC−port1 ７２−１には備わっていない。
【００１９】
図３の第２比較例の構成における、下り方向のトラフィックに対する動作例を図５に示す。すなわち、図３に示した第２比較例の構成において、仮想マシン７１−１からＮＩＣに向かうトラフィック７８Ｂａと、仮想マシン７１−２からＮＩＣに向かうトラフィック７８Ｂｂとが共通のNIC−port1 ７２−１を経由して外部に送信される状態が図５に示されている。
【００２０】
図５の状態では、送信先が異なる複数のトラフィック７８Ｂａ、７８Ｂｂが共通のNIC−port1 ７２−１で経路７７Ｂを通って送信される処理において競合が発生する。また、図５の状態では、複数の仮想マシン７１−１、７１−２の間で通信するための経路を確保できない。つまり、図３に示した第１比較例のNIC−port1 ７２−１、NIC−port2 ７２−２のように複数のＮＩＣが存在する場合は経路を確保できるので仮想マシン間通信が可能である。しかし、図４、図５に示した第２比較例のように単一のＮＩＣだけしか利用できない場合は仮想マシン間通信が不可能である。したがって、第２比較例では、必要に応じてＮＩＣのハードウェアなどの機能を追加しない限り、ＩＶＣの十分な機能を提供できない。また、ＮＩＣのハードウェア追加は仮想的に解決できないので、システムを仮想化する際のメリットが大きく損なわれてしまう。
【００２１】
また、例えばメモリコピーの処理を実施すれば、複数の仮想マシン間の通信を比較的簡単に実現できる。しかし、複数の仮想マシン間の通信をメモリコピーの処理によって実現する場合には、この処理の負荷が大きいので、高速の通信ができない。前述のＳＲ−ＩＯＶやＳＰＰは、メモリコピーを伴わない高速なＩＶＣ技術である。
【００２２】
本発明は、上記の状況に鑑みてなされたものであり、１つの物理マシン内で、物理ＮＩＣに依存した特別なドライバを使用することなく、複数の仮想マシンがメモリコピーを伴わない高速な通信を別々に行うことが可能な仮想マシン間通信システムを提供することを目的とする。
【課題を解決するための手段】
【００２３】
（１）複数の仮想マシンの相互間、および前記各仮想マシンと物理通信インタフェースとの間で相互間通信を実現するための仮想マシン間通信システムであって、
前記物理通信インタフェースから前記各仮想マシンに向かう上り方向のデータ転送を処理する第１の転送プロセスと、
前記各仮想マシンから前記物理通信インタフェースに向かう下り方向のデータ転送を処理する第２の転送プロセスと、
前記第１の転送プロセスおよび前記第２の転送プロセスと、前記各仮想マシンとの間に配置され、前記上り方向のデータ中継に割り当て可能な第１の中継部と、前記下り方向のデータ中継に割り当て可能な第２の中継部と、を有するバッファメモリと、
前記第１の転送プロセスおよび前記第２の転送プロセスの各々に配置され、入力されたデータを当該データの送信先に応じて振り分けて、前記バッファメモリ又は前記物理通信インタフェースに出力する振り分け機能部と、
前記各仮想マシンを特定する固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する固有情報生成制御部、
を備え、前記振り分け機能部は、前記固有情報に基づいて入力された各データを振り分ける。
【００２４】
この仮想マシン間通信システムによれば、前記固有情報生成制御部が生成する前記固有情報を各仮想マシンに割り当てると共に、各々の仮想マシンが使用する前記バッファメモリ上の領域を確保することができる。その結果として、前記振り分け機能部は、入力された複数のデータを当該データの送信先に応じて振り分けて、前記バッファメモリ又は前記物理通信インタフェースに出力することが可能になる。したがって、複数の仮想マシン間や、仮想マシンとＮＩＣとの間で通信するために、１つの物理マシン内で物理ＮＩＣのハードウェアを増設したり、物理ＮＩＣに依存する特別なドライバを配置する必要がなくなる。
【００２５】
（２）前記バッファメモリは、前記第１の中継部、および前記第２の中継部の他に、前記第２の転送プロセスの出力から前記第１の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第３の中継部、を有する。
【００２６】
この仮想マシン間通信システムによれば、前記第３の中継部を利用することにより、データの折り返し中継を行うことが可能になる。つまり、下り方向のトラフィックを、前記第２の転送プロセスの出力から前記第３の中継部を経由して折り返し、上り方向のトラフィックとして前記第１の転送プロセスに入力することができる。そのため、複数のＮＩＣを用意しておかなくても、複数の仮想マシン間で通信するための経路を確保できる。
【００２７】
（３）前記第１の転送プロセスおよび前記第２の転送プロセスの各々は、送信元、送信先、および通信経路の少なくとも１つが異なる複数種類の入力データの処理順序を制御して複数データの競合を回避するマージ機能部を有する。
【００２８】
この仮想マシン間通信システムによれば、前記第１の転送プロセス又は前記第２の転送プロセスに通信経路等が異なる複数のデータが入力される場合であっても、これら複数のデータの受信プロセスが競合するのを回避できる。
【００２９】
（４）前記バッファメモリは、前記第１の中継部、および前記第２の中継部の他に、前記第２の転送プロセスの出力から前記第１の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第３の中継部、を有し、
前記第１の転送プロセスおよび前記第２の転送プロセスの各々は、送信元、送信先、および通信経路の少なくとも１つが異なる複数種類の入力データの処理順序を制御して複数データの競合を回避するマージ機能部を有し、
前記第２の転送プロセスにおける前記振り分け機能部は、受け取った入力データの送出先を、前記バッファメモリ上の前記第３の中継部と、前記物理通信インタフェースとのいずれか一方に振り分け、
前記第１の転送プロセスにおける前記マージ機能部は、前記バッファメモリ上の前記第３の中継部からの入力データ、および前記物理通信インタフェースからの入力データの両方を処理対象とする。
【００３０】
この仮想マシン間通信システムによれば、複数のＮＩＣを用意しておかなくても、折り返し機能を利用して、複数の仮想マシン間で通信するための経路を確保できる。例えば、一方の仮想マシンが送出したデータを、前記第２の転送プロセスにおける前記振り分け機能部で振り分けて前記第３の中継部に送り、前記第３の中継部で経路を折り返して前記第１の転送プロセスに入力することができる。そして、前記第１の転送プロセスの前記マージ機能部が、入力されたデータを他方の仮想マシンに送ることができる。
【００３１】
（５）前記固有情報生成制御部は、前記仮想マシンを新たに起動する際に、該当する前記仮想マシンを特定する前記固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する。
【００３２】
この仮想マシン間通信システムによれば、起動した全ての仮想マシンの各々を前記固有情報により区別することが可能であり、通信のために必要な前記バッファメモリ上の領域も仮想マシン毎に確保できる。
【００３３】
（６）前記固有情報生成制御部が生成した前記仮想マシンの固有情報、および前記仮想マシンに割り当てた前記バッファメモリの領域を表す情報を、前記振り分け機能部、および前記仮想マシンに通知する生成情報通知制御部を更に備える。
【００３４】
この仮想マシン間通信システムによれば、前記生成情報通知制御部により通知される情報に基づいて、前記各仮想マシンはそれ自身を特定するための前記固有情報を把握すると共に、使用すべき前記バッファメモリの領域を把握できる。また、前記生成情報通知制御部により通知される情報に基づいて、前記振り分け機能部は、適切な振り分け処理を実行できる。
【００３５】
（７）前記第１の転送プロセスおよび前記第２の転送プロセスの少なくとも一方は、新たに起動した前記仮想マシンに対応付けられた情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を追加する。
【００３６】
この仮想マシン間通信システムによれば、例えばユーザ等の要求に応じて、新たな仮想マシンが物理マシン上に追加された場合であっても、前記第１の転送プロセスおよび第２の転送プロセスは、追加された前記仮想マシンに対する受信データを適切に処理できる。したがって、システム全体の構成を柔軟に変更することが可能である。
【００３７】
（８）前記第１の転送プロセスおよび前記第２の転送プロセスの少なくとも一方は、登録済みの前記仮想マシンの削除を表す情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を削除する。
【００３８】
この仮想マシン間通信システムによれば、例えばユーザ等の要求に応じて、物理マシン上で稼働中の仮想マシンが削除された場合には、前記第１の転送プロセスおよび第２の転送プロセスは、削除された前記仮想マシンに対する処理を終了することができる。したがって、不要になった計算機資源を必要に応じて開放し、システム全体の構成を柔軟に変更することが可能である。
【発明の効果】
【００３９】
本発明の仮想マシン間通信システムによれば、１つの物理マシン内で、物理ＮＩＣの増設をしたり、物理ＮＩＣに依存した特別なドライバを使用することなく、複数の仮想マシンがメモリコピーを伴わない高速な通信を別々に行うことが可能になる。したがって、システムの仮想化に伴うメリットを十分に享受できる。
【図面の簡単な説明】
【００４０】
【図１】ＩＶＣ技術を利用する一般的な通信システムの主要部の構成例示すブロック図である。
【図２】ＩＶＣとしてＳＲ−ＩＯＶおよびパススルーを組み合わせた構成の通信システムを示すブロック図である。
【図３】ＩＶＣとしてＳＰＰを採用した通信システムの構成例を示すブロック図である。
【図４】図３と同様の構成における上り方向のトラフィックに対する動作例を示すブロック図である。
【図５】図３と同様の構成における下り方向のトラフィックに対する動作例を示すブロック図である。
【図６】本発明の実施形態における仮想マシン間通信システムの構成例を示すブロック図である。
【図７】図６に示した仮想マシン間通信システムにおいて、新たな仮想マシンを追加したときのシステムの動作例を示すシーケンス図である。
【図８】図６に示した仮想マシン間通信システムにおいて、稼働していた仮想マシンを削除したときのシステムの動作例を示すシーケンス図である。
【図９】図９（ａ）および図９（ｂ）の各々は、各仮想マシンを管理するために使用するテーブルの構成例を示す模式図である。
【図１０】図６と同様の構成の仮想マシン間通信システムに新たな仮想マシンを追加したときのパケットの流れおよびバッファ領域確保の制御経路を示すブロック図である。
【図１１】図６と同様の構成の仮想マシン間通信システムに新たな仮想マシンを追加したときのテーブルの通知およびマージ元追加の制御経路と仮想マシン追加後のパケットの流れを示すブロック図である。
【発明を実施するための形態】
【００４１】
本発明の実施形態について各図を参照しながら以下に説明する。
＜仮想マシン間通信システムの構成例＞
本発明の実施形態における仮想マシン間通信システムの構成例を図６に示す。
図６に示した例では、物理マシン１０上に２つの仮想マシン１１−１、および１１−２が構築されている。物理マシン１０は、様々なコンピュータ、大容量記憶装置、通信装置などのハードウェアと、基本ソフトウェアであるオペレーティングシステムとで構成される。物理マシン１０は、例えば様々な通信サービスを提供可能な汎用サーバとして構成される。
【００４２】
各仮想マシン１１−１、１１−２は、必要とされる様々な仕様に適合する動作を行う仮想のコンピュータであり、物理マシン１０の不図示のＣＰＵがハイパーバイザ・プログラムを実行することによって具現化される。したがって、物理マシン１０上で稼働する仮想マシン１１−１、１１−２の数は、必要に応じて増やしたり減らしたりすることができる。
【００４３】
図６に示した物理マシン１０は、物理ネットワークインタフェースカード（ＮＩＣ）として構成される１つの物理ＮＩＣ １２（物理通信インタフェースの一例）を備えている。この物理ＮＩＣ １２は、外部の装置との間の双方向のトラフィック１７を扱うことが可能な単一の通信ポートＮＩＣ ｐｏｒｔ１を有している。
【００４４】
本実施形態では、トラフィック１７として入出力されるデータなど、物理マシン１０上で扱う通信データはＩＰ（Internet Protocol）パケットであり、バケット単位でデータ処理される。
【００４５】
また、図６に示した物理マシン１０上には、共有メモリ１３が備わり、更に第１転送プロセス１４、第２転送プロセス１５、および制御部１６が具現化されている。これらの構成要素の各々は、物理マシン１０に備わっている処理機能（ＣＰＵ）、記憶機能（メモリ）、通信機能などの計算機資源を利用し、例えば処理機能がミドルウェアを実行することによって具現化される。
【００４６】
共有メモリ１３は、複数の機能、すなわち図６の例では仮想マシン１１−１、１１−２、第１転送プロセス１４、および第２転送プロセス１５が通信のために共有可能なバッファメモリである。この共有メモリ１３は、第１転送プロセス１４および第２転送プロセス１５と、仮想マシン１１−１、１１−２との間の通信を中継する。図６に示した共有メモリ１３上には、記憶領域として、４つのリングバッファ１３ａ〜１３ｄと、折り返し用リングバッファ１３ｅとを備えている。勿論、共有メモリ１３上のリングバッファ１３ａ〜１３ｄの数は必要に応じて増やしてもよいが、ＩＶＣとして十分な機能を提供するためには最低でも４つは確保する必要がある。また、折り返し用リングバッファ１３ｅの数を増やしてもよい。
【００４７】
リングバッファ１３ａ〜１３ｄの各々は、上り方向および下り方向のトラフィックの中継に割り当て可能になっている。また、折り返し用リングバッファ１３ｅは、経路を途中で中継して折り返し、下り方向から上り方向に向かうトラフィックの経路を形成するために割り当て可能になっている。図６において、リングバッファ１３ａ（第１の中継部）は、上り方向のデータ中継に割り当てられている。リングバッファ１３ｃ（第２の中継部）は、下り方向のデータ中継に割り当てられている。折り返し用リングバッファ１３ｅ（第３の中継部）は、第２転送プロセス１５の出力から第１転送プロセス１４の入力に向かう方向のデータの折り返し中継に割り当てられている。
【００４８】
一般的なリングバッファと同じように、４つのリングバッファ１３ａ〜１３ｄと、折り返し用リングバッファ１３ｅとの各々は、論理的にリング状に形成されたメモリ領域により構成されている。したがって、パケットの送信側、すなわち各仮想マシン１１−１、１１−２、第１転送プロセス１４、又は第２転送プロセス１５は、転送対象の様々なパケットを処理するための情報を、各リングバッファ内のリング状の各記憶領域に順番に配置し、これらの記憶領域を循環的に利用する。これにより、各リングバッファは、パケットの中継処理を連続的に行うことができる。本実施形態の制御部１６は、該当するパケットが存在しているメモリアドレスなどの位置を表すアドレスポインタの情報のみを、各リングバッファの各記憶領域に保持するように処理している。これにより、各パケットのデータ本体を各リングバッファに保持する必要がなくなり、各パケットが共有メモリ１３を通過する際の処理の負荷が軽減され、高速処理が可能になる。また、共有メモリ１３に必要とされる記憶容量も少なくなる。
【００４９】
第１転送プロセス１４は、物理ＮＩＣ １２から各仮想マシン１１−１、１１−２に向かう上り方向のトラフィックのパケット転送を処理するプロセスであり、マージ機能部１４ａ、および振り分け機能部１４ｂを備えている。
【００５０】
第１転送プロセス１４内のマージ機能部１４ａは、入力されるパケットの受信処理を行うと共に、複数の経路から到着するパケットをこれらの受信プロセスが競合しないように配慮しつつ統合（マージ）する。これにより、複数データの競合を回避することができる。具体的には、ラウンドロビン（round robin）の処理を適用し、各経路から到着する各パケットの処理順序を割り当てる。本実施形態では、上り側のマージ機能部１４ａが受信すべきパケットを送出するインタフェースは、使用する物理ＮＩＣ １２と、共有メモリ１３上の折り返し用リングバッファ１３ｅのみである。
【００５１】
第１転送プロセス１４内の振り分け機能部１４ｂは、入力された処理対象の各パケットに含まれている送信先の固有情報に基づいて、適切な出力先を選択し、当該パケットを送信する。本実施形態では、前記固有情報としてＭＡＣ（Media Access Control）アドレスを使用している。
【００５２】
具体的には、振り分け機能部１４ｂは、制御部１６から通知されたテーブルの内容と、各パケットに含まれている送信先のＭＡＣアドレスとに基づき、送出先を特定する。上記テーブルについては後で説明する。振り分け機能部１４ｂが送出先として選択するのは、共有メモリ１３上のリングバッファ１３ａ〜１３ｄのいずれかである。
【００５３】
一方、第２転送プロセス１５は、各仮想マシン１１−１、１１−２から物理ＮＩＣ １２に向かう下り方向のトラフィックのパケット転送を処理するプロセスであり、マージ機能部１５ａ、および振り分け機能部１５ｂを備えている。
【００５４】
第２転送プロセス１５内のマージ機能部１５ａは、入力されるパケットの受信処理を行うと共に、複数の経路から到着するパケットをこれらの受信プロセスが競合しないように配慮しつつ統合（マージ）する。具体的には、ラウンドロビンの処理を適用し、各経路から到着する各パケットの処理順序を割り当てる。
【００５５】
本実施形態では、下り側のマージ機能部１５ａが受信すべきパケットを送出するインタフェースは、共有メモリ１３上のリングバッファ１３ａ〜１３ｄの中で、実際に稼働している仮想マシン１１−１、１１−２が使用しているリングである。このリングは、制御部１６がマージ機能部１５ａに通知する情報に基づき特定できる。
【００５６】
第２転送プロセス１５内の振り分け機能部１５ｂは、上記振り分け機能部１４ｂと同様に、入力された処理対象の各パケットに含まれている送信先の固有情報に基づいて、適切な出力先を選択し、当該パケットを送信する。
【００５７】
具体的には、振り分け機能部１５ｂは、制御部１６から通知されたテーブルの内容と、各パケットに含まれている送信先のＭＡＣアドレスとに基づき、送出先を特定する。振り分け機能部１５ｂは、各パケットに含まれている送信先のＭＡＣアドレスが制御部１６から通知された前記テーブル上に存在する場合には、共有メモリ１３の折り返し用リングバッファ１３ｅを送出先に決定する。折り返し用リングバッファ１３ｅに送出されたデータは、第１転送プロセス１４のマージ機能部１４ａによって、物理ＮＩＣ １２からの入力データとマージされて、その両方が処理対象となる。また、振り分け機能部１５ｂは、各パケットに含まれている送信先のＭＡＣアドレスが制御部１６から通知された前記テーブル上に存在しない場合には、物理ＮＩＣ １２を送出先に決定する。
【００５８】
図６に示した制御部１６は、図６に示した物理マシン１０上に構成された仮想マシン間通信システム全体の制御を行うものである。この制御部１６には、図６に示すようにＭＡＣアドレス生成機能部１６ａ、テーブル更新機能部１６ｂ、およびＭＡＣアドレス通知機能部１６ｃが内蔵されている。また、テーブル更新機能部１６ｂにはテーブル２０が含まれている。
【００５９】
ＭＡＣアドレス生成機能部１６ａ（固有情報生成制御部）は、仮想マシン間通信システムにおいて各仮想マシンを特定するために必要な固有情報として、ＭＡＣアドレスを生成する。また、各仮想マシンに対してそれが使用する共有メモリ１３上の領域を確保する。なお、各仮想マシンについて共有メモリ１３上の領域を確保するための動作は、テーブル更新機能部１６ｂが行ってもよい。
【００６０】
具体的には、物理マシン１０上で新規に１つの仮想マシンを起動する際に、ＭＡＣアドレス生成機能部１６ａが該当する仮想マシンに対して新たなＭＡＣアドレスを生成して割り当てる。更に、ＭＡＣアドレス生成機能部１６ａは該当する仮想マシンに対して共有メモリ１３上の領域、すなわち、リングバッファ１３ａ〜１３ｄのいずれかを割り当てる。
【００６１】
テーブル更新機能部１６ｂは、テーブル２０により、仮想マシン毎にＭＡＣアドレス生成機能部１６ａが生成したＭＡＣアドレスと、該当する仮想マシンに割り当てられた共有メモリ１３上の領域を管理する。テーブル２０は、１つのリングとの対応関係を表す。そして、テーブル更新機能部１６ｂは必要に応じてテーブル２０の内容を最新の情報に更新し、必要に応じてテーブル２０の内容を第１転送プロセス１４、および第２転送プロセス１５に通知する。詳細については後述するが、例えば図９（ａ）に示すような内容がテーブル２０として管理される。
【００６２】
テーブル更新機能部１６ｂは、具体的には、振り分け機能部１４ｂ、１５ｂに対して、ＭＡＣアドレス生成機能部１６ａが新たに生成したＭＡＣアドレスと、このＭＡＣアドレスを使用する仮想マシンに割り当てられた共有メモリ１３上の領域の情報とを通知する。また、テーブル更新機能部１６ｂは、マージ機能部１４ａ、１５ａに対して、該当する仮想マシンが新たに使用する共有メモリ１３上の領域、つまり、リングバッファ１３ａ〜１３ｄのいずれか、又は折り返し用リングバッファ１３ｅを示す情報を通知する。
【００６３】
ＭＡＣアドレス通知機能部１６ｃ（生成情報通知制御部）は、各仮想マシンがそれ自身を特定するために使用すべきＭＡＣアドレスと、前記仮想マシンが使用すべき共有メモリ１３上の領域とを表す情報を、新たに起動した各仮想マシンに対して通知する。ＭＡＣアドレス通知機能部１６ｃが通知する情報は、ＭＡＣアドレス生成機能部１６ａにより生成される情報である。この情報は、テーブル２０にも登録される。
【００６４】
図６に示した構成においては、制御部１６は、通知信号１８−１、および１８−２を用いて、仮想マシン１１−１、および１１−２の各々に対して必要な情報を通知することができる。また、制御部１６は、バッファ制御信号２７を用いて、共有メモリ１３上の各領域、すなわちリングバッファ１３ａ〜１３ｄ、および折り返し用リングバッファ１３ｅの確保や開放を制御することができる。また、制御部１６は、通知信号１９−１、および１９−２を用いて、第１転送プロセス１４、および第２転送プロセス１５の各々に対して必要な情報を通知することができる。
【００６５】
＜仮想マシン間通信システムの動作例＞
＿＜仮想システム構成の変化の説明＞
例えば、図６に示した物理マシン１０上で稼働する各仮想マシン１１−１、１１−２については、必要に応じて新たな仮想マシンを追加したり、稼働している仮想マシン１１−１、１１−２を削除することができる。つまり、物理マシン１０から必要な計算機資源を確保して新たに仮想マシンを追加して稼働させることができるし、稼働している仮想マシン１１−１、１１−２を削除してその計算機資源を開放することもできる。
【００６６】
しかし、例えば図６に示した複数の仮想マシン１１−１、１１−２が互いに連携するためには、これらの間で通信を行う経路を確保する必要がある。そして、新たな仮想マシンの追加や、稼働している仮想マシンの削除の際には、仮想化されているシステム全体の構成が変化するので、この変化に応じて、仮想マシン間通信システムが適切に対応する必要がある。なお、この変化に対応するために必要な仮想マシン間通信システムの機能は、図６に示した共有メモリ１３、第１転送プロセス１４、第２転送プロセス１５、および制御部１６の中に含まれている。
【００６７】
＿＜新たに仮想マシンを追加した時の動作シーケンス＞
図６に示した仮想マシン間通信システムにおいて、新たな仮想マシンを追加したときのシステムの動作例を図７に示す。つまり、図６に示したＭＡＣアドレス生成機能部１６ａ、テーブル更新機能部１６ｂ、ＭＡＣアドレス通知機能部１６ｃ、マージ機能部１４ａ、振り分け機能部１４ｂ、マージ機能部１５ａ、および振り分け機能部１５ｂの各々の動作および相互間の制御のための通信の概要が図７に示されている。図７に示した動作について以下に説明する。
【００６８】
ここでは、図６に示した物理マシン１０上に一方の仮想マシン１１−１のみが存在し、仮想マシン１１−２は存在していない状態を初期状態として想定する。この初期状態で、例えばユーザの要求に応じて、新たな仮想マシン１１−２を物理マシン１０上に追加することが必要になる。そして、既に稼働している仮想マシン１１−１と追加した仮想マシン１１−２とが連携してサービスを提供できるように、仮想マシン間通信システムを構成する必要がある。
【００６９】
上記の場合には、仮想マシン１１−２の追加に伴って、ＭＡＣアドレス生成機能部１６ａが図７のステップＳ１１で、仮想マシン１１−２にその固有情報として割り当てるべきＭＡＣアドレスを生成する。また、ＭＡＣアドレス生成機能部１６ａは生成したＭＡＣアドレスの情報を、ステップＳ１２でテーブル更新機能部１６ｂに与える。
【００７０】
テーブル更新機能部１６ｂは、ＭＡＣアドレス生成機能部１６ａからＭＡＣアドレスの情報を受け取った後、ステップＳ１３で、追加された仮想マシン１１−２が通信に使用する共有メモリ１３上の領域を確保する。つまり、テーブル更新機能部１６ｂは、図６に示したリングバッファ１３ａ〜１３ｄのうち、空き状態の１つのリングバッファを仮想マシン１１−２のために確保する。
【００７１】
テーブル更新機能部１６ｂは、ＭＡＣアドレス生成機能部１６ａから受け取った仮想マシン１１−２のＭＡＣアドレス、およびステップＳ１３で確保したリングバッファを特定する情報を、次のステップＳ１４でＭＡＣアドレス通知機能部１６ｃに与える。また、テーブル更新機能部１６ｂは次のステップＳ１５でテーブル２０の内容を更新する。つまり、テーブル更新機能部１６ｂは、追加された仮想マシン１１−２のＭＡＣアドレス、およびステップＳ１３で確保したリングバッファを特定する情報をテーブル２０に追加する。
【００７２】
一方、ＭＡＣアドレス通知機能部１６ｃは、テーブル更新機能部１６ｂから受け取ったＭＡＣアドレス、および確保したリングバッファを特定する情報を、ステップＳ１６で該当するＶＭ（Virtual Machine）、すなわち仮想マシン１１−２に対して通知信号１８−２の経路で通知する。
【００７３】
なお、図７には示していないが、仮想マシン１１−２は、ステップＳ１６でＭＡＣアドレス通知機能部１６ｃが通知した内容を受け取ることにより、それ自身を特定するために通信システム上で使用すべきＭＡＣアドレスと、使用すべき共有メモリ１３上の領域を知ることができる。仮想マシン１１−２が使用すべき共有メモリ１３上の領域は、例えばリングバッファ１３ａ〜１３ｄのいずれかである。仮想マシン１１−２は、それ自身が任意の送信先にパケットを送信する場合に、送信元である自分のＭＡＣアドレスの情報と、送信先を特定するＭＡＣアドレスの情報とを含めて送信する。また、仮想マシン１１−２は、それ自身に割り当てられた共有メモリ１３上の１つのリングバッファに向けてパケットを送出する。
【００７４】
また、テーブル更新機能部１６ｂは、ステップＳ１７で、下り側のマージ機能部１５ａに対して、新たに追加された仮想マシン１１−２が使用する共有メモリ１３上のリングバッファを特定する情報を、図６に示した通知信号１９−２の経路を用いて通知する。
【００７５】
下り側のマージ機能部１５ａは、テーブル更新機能部１６ｂから受け取ったリングバッファを特定する情報を、処理対象パケットの受信元として図示しない内部テーブル上にステップＳ１８で追加する。
【００７６】
一方、上り側のマージ機能部１４ａは、ステップＳ１９でパケットを受信すると、このパケットを次のステップＳ２０で振り分け機能部１４ｂに渡す。振り分け機能部１４ｂは、マージ機能部１４ａからパケットを受け取った場合に、その適切な送出先を調べるために、ステップＳ２１で通知信号１９−１の経路を用いてテーブル更新機能部１６ｂ上のテーブル２０を参照する。
【００７７】
具体的には、振り分け機能部１４ｂが受け取ったパケットの中には、送信先ＭＡＣアドレスが含まれている。振り分け機能部１４ｂは、この送信先ＭＡＣアドレスに対応付けられている共有メモリ１３上のリングバッファ１３ａ〜１３ｄのいずれかを表す情報を、テーブル２０の内容に基づいて取得する。これにより、振り分け機能部１４ｂは当該パケットの振り分け先を特定できる。
【００７８】
振り分け機能部１４ｂは、マージ機能部１４ａから受け取ったパケットを、ステップＳ２１で特定した振り分け先に向けてステップＳ２２で送信する。例えば、振り分け機能部１４ｂが受け取ったパケットの送信先が仮想マシン１１−１である場合を考える。このとき、この仮想マシン１１−１が上り方向のパケット経路でリングバッファ１３ａを使用しているならば、振り分け機能部１４ｂは、このリングバッファ１３ａに向けてパケットを送信する。
【００７９】
上記ステップＳ１９、Ｓ２０と同様に、上り側のマージ機能部１４ａは、ステップＳ２３でパケットを受信すると、そのパケットを次のステップＳ２４で振り分け機能部１４ｂに渡す。また、振り分け機能部１４ｂは、マージ機能部１４ａから受け取ったパケットの送出先を特定するためにステップＳ２５でテーブル更新機能部１６ｂ上のテーブル２０を参照する。また、振り分け機能部１４ｂはステップＳ２５で特定した振り分け先に向けて、ステップＳ２６でパケットを送信する。
【００８０】
一方、下り側のマージ機能部１５ａは、下り方向に向かうパケットが入力されると、このパケットをステップＳ２７で受信する。但し、マージ機能部１５ａの前記内部テーブルにステップＳ１８などの処理によって登録されていないリングバッファから入力されたパケットの場合には受信処理の対象から除外する。また、マージ機能部１５ａは受信処理した前記パケットをステップＳ２８で振り分け機能部１５ｂに渡す。
【００８１】
下り側の振り分け機能部１５ｂは、マージ機能部１５ａからパケットを受け取った場合には、このパケットをステップＳ２９で送信する。この場合のパケットの送出先は、振り分け機能部１５ｂの機能によりパケット毎に振り分けることができる。
【００８２】
図６に示した構成において、振り分け機能部１５ｂは、各パケットの振り分け先、つまり送信先として、物理ＮＩＣ １２と、共有メモリ１３上の折り返し用リングバッファ１３ｅの２つの中から選択することができる。つまり、振り分け機能部１５ｂに入力される各パケットの中には、送信先のＭＡＣアドレスおよび送信元のＭＡＣアドレスが含まれているので、これらを利用して振り分けることができる。
【００８３】
例えば、当該パケットの送信先、すなわち宛先がテーブル２０上に登録されていないＭＡＣアドレスである場合、当該パケットは、物理マシン１０の外部の装置宛てである。このとき、振り分け機能部１５ｂは物理ＮＩＣ １２に向けて当該パケットを送出する。
【００８４】
一方、当該パケットの送信先、すなわち宛先がテーブル２０上に登録されているＭＡＣアドレスである場合、当該パケットは、同じ物理マシン１０上の別の仮想マシンが宛先である。このとき、仮想マシン間通信を行うための折り返しの経路が利用される。つまり、振り分け機能部１５ｂは、当該パケットの送出先として、折り返し用リングバッファ１３ｅを選択する。
【００８５】
振り分け機能部１５ｂが折り返し用リングバッファ１３ｅに向けて送出したパケットは、例えば図１０に示した折り返し経路２３ａから折り返し用リングバッファ１３ｅを通り、更に折り返し経路２３ｂを通って上り側のマージ機能部１４ａに入力される。したがって、下り方向のパケットの経路を折り返して、上り方向の経路で転送することができる。つまり、物理ＮＩＣ １２のハードウェア等を増設しなくても、仮想マシン１１−１と仮想マシン１１−２との間を相互に接続する通信経路を確保できる。
【００８６】
上記ステップＳ２７、Ｓ２８と同様に、マージ機能部１５ａは、ステップＳ３０で入力されたパケットを受信処理して、次のステップＳ３１で振り分け機能部１５ｂに渡す。また、振り分け機能部１５ｂは、マージ機能部１５ａから受け取ったパケットをステップＳ３２で、物理ＮＩＣ １２又は折り返し用リングバッファ１３ｅに向けて送出する。
【００８７】
＿＜稼働していた仮想マシンを削除した時の動作シーケンス＞
図６に示した仮想マシン間通信システムにおいて、稼働していた仮想マシンを削除したときのシステムの動作例を図８に示す。つまり、図６に示したＭＡＣアドレス生成機能部１６ａ、テーブル更新機能部１６ｂ、ＭＡＣアドレス通知機能部１６ｃ、マージ機能部１４ａ、振り分け機能部１４ｂ、マージ機能部１５ａ、および振り分け機能部１５ｂの各々の動作および相互間の制御のための通信の概要が図８に示されている。図８に示した動作について以下に説明する。
【００８８】
例えば、図６に示すように２つの仮想マシン１１−１、および１１−２が物理マシン１０上に存在し稼働している状況を初期状態として想定する。この初期状態から例えばユーザの要求に従い、不要になった仮想マシン１１−２を削除して仮想マシン１１−２がそれまで使用していた物理マシン１０の計算機資源を開放することができる。このような仮想マシンの削除に伴って行われる動作が図８に示されている。
【００８９】
例えば上記の様に仮想マシン１１−２を物理マシン１０上から削除した場合には、図８のステップＳ４１でテーブル更新機能部１６ｂがテーブル２０の内容を更新する。すなわち、テーブル更新機能部１６ｂは、仮想マシン１１−２に割り当てたＭＡＣアドレス、およびリングバッファの情報をテーブル２０上から削除する。
【００９０】
また、テーブル更新機能部１６ｂは、削除した仮想マシン１１−２のリングバッファの情報を、次のステップＳ４２でマージ機能部１５ａに通知する。マージ機能部１５ａは、リングバッファ情報の削除通知を受け取ると、ステップＳ４３で該当する情報を内部テーブル上から削除する。つまり、削除された仮想マシン１１−２が使用していたリングバッファから到来するパケットをマージ機能部１５ａの受信対象から除外する。この処理が終了すると、マージ機能部１５ａは次のステップＳ４４で完了通知をテーブル更新機能部１６ｂに送る。
【００９１】
テーブル更新機能部１６ｂは、マージ機能部１５ａからの完了通知を受け取った後、ステップＳ４５で、それまで仮想マシン１１−２に割り当てていた共有メモリ１３上の特定のリングバッファを開放する。すなわち、図６に示したバッファ制御信号２７の経路を利用して、該当するリングバッファを開放するようにテーブル更新機能部１６ｂが制御する。
【００９２】
図８に示した各ステップＳ４６〜Ｓ５３については、それぞれ図７の各ステップＳ１９〜Ｓ２６と同様である。また、図８のステップＳ５４、Ｓ５７では、図７のステップＳ２７、Ｓ３０と同様にパケットの受信処理が行われる。しかし、ステップＳ４３で内部テーブル上から削除されたリングバッファから入力されるパケットは受信処理の対象外になる。図８のステップＳ５５、Ｓ５６、Ｓ５８、Ｓ５９については、それぞれ図７のステップＳ２８、Ｓ２９、Ｓ３１、Ｓ３２と同様である。
【００９３】
＜使用するテーブル２０の構成例＞
各仮想マシンを管理するために使用するテーブル２０の構成例を図９（ａ）および図９（ｂ）のそれぞれに示す。
【００９４】
図９（ａ）に示した構成においては、例えば図６に示したように、２つの仮想マシン１１−１、および１１−２が物理マシン１０に存在し、仮想マシン１１−１、および１１−２の各々をテーブル２０で管理している場合を想定している。
【００９５】
図９（ａ）に示した構成においては、テーブル２０上に、ＭＡＣアドレスの情報と、リングポートの情報とが互いに対応付けた状態で存在している。図９（ａ）に示したＭＡＣアドレスの情報「ｆ５：ｅ４：ｄ３：ｃ２：ｂ１：ａ０」は、ＭＡＣアドレス生成機能部１６ａが例えば仮想マシン１１−１に割り当てたＭＡＣアドレスの値である。また、図９（ａ）に示したリングポートの情報「ｒｉｎｇ１」は、仮想マシン１１−１が使用する共有メモリ１３上の１つの領域、例えばリングバッファ１３ａに相当する。
【００９６】
また、図９（ａ）に示したＭＡＣアドレスの情報「０ａ：１ｂ：２ｃ：３ｄ：４ｅ：５ｆ」は、ＭＡＣアドレス生成機能部１６ａが例えば仮想マシン１１−２に割り当てたＭＡＣアドレスの値である。また、図９（ａ）に示したリングポートの情報「ｒｉｎｇ３」は、仮想マシン１１−２が使用する共有メモリ１３上の１つの領域、例えばリングバッファ１３ｂに相当する。
【００９７】
図９（ａ）のような構成のテーブル２０を利用することにより、仮想マシン間通信システム上において、実際に稼働している各仮想マシン１１−１、１１−２を特定することができ、稼働している各仮想マシン１１−１、１１−２が使用している共有メモリ１３上の領域も特定できる。
【００９８】
また、各仮想マシン１１−１、１１−２が送信するパケットや、各仮想マシン１１−１、１１−２宛てのパケットに、送信元や送信先を表す前記ＭＡＣアドレスの情報を含めている。これにより、テーブル２０の内容を参照しながら各パケットを正しく振り分けることが可能になる。つまり、第１転送プロセス１４の振り分け機能部１４ｂにおけるパケットの振り分け、および第２転送プロセス１５の振り分け機能部１５ｂにおけるパケット振り分けが可能になる。
【００９９】
図９（ｂ）に示した構成においては、ＭＡＣアドレス、リングポート、の他にＶＬＡＮ ＩＤ（Virtual LAN IDentifier）も登録して管理する場合を想定している。すなわち、物理的な１つのローカルエリアネットワーク（ＬＡＮ）を複数の仮想的なＬＡＮに分割してシステム全体を構成するような場合には、各仮想マシンが所属しているＶＬＡＮを表す情報も図９（ｂ）の構成のテーブル２０で管理することができる。
【０１００】
＜パケットの流れおよび仮想マシン追加に伴う制御＞
＿＜パケットの流れる経路の説明＞
図６と同様の構成の仮想マシン間通信システムに新たな仮想マシンを追加したときのパケットの流れおよびバッファ領域確保の制御経路を図１０に示し、テーブルの通知およびマージ元追加の制御経路および仮想マシン追加後のパケットの流れを図１１に示す。図１０および図１１においては、パケットの流れを表す経路が点線で示されている。
【０１０１】
図１０に示した状況は、物理マシン１０上に仮想マシン１１−１のみが存在する状態で、ユーザの命令２４により仮想マシン１１−２が追加された直後の状態を表している。したがって、図１０の構成では、仮想マシン１１−１がパケットの転送に使用する経路が形成されているが、仮想マシン１１−２がパケットの転送に使用する経路はまだ存在しない。
【０１０２】
図１０に示す状態では、パケットの流れる経路として、上り転送経路２１ａ、２１ｂ、２１ｃ、２１ｄ、下り転送経路２２ａ、２２ｂ、２２ｃ、２２ｄ、折り返し経路２３ａ、および２３ｂが形成されている。
【０１０３】
つまり、トラフィック１７として外部装置から物理ＮＩＣ １２に入力され仮想マシン１１−１に向かう上り方向のパケットは、上り転送経路２１ａ、２１ｂ、２１ｃ、および２１ｄを順番に経由して仮想マシン１１−１に到達する。また、仮想マシン１１−１が外部装置に宛てて送信する下り方向のパケットは、下り転送経路２２ａ、２２ｂ、２２ｃ、および２２ｄを順番に経由して物理ＮＩＣ １２に到達し、トラフィック１７として、物理ＮＩＣ １２から外部装置に向けて送出される。
【０１０４】
また、図１０に示す状態で、振り分け機能部１５ｂから折り返し用リングバッファ１３ｅに向かう折り返し経路２３ａと、折り返し用リングバッファ１３ｅからマージ機能部１４ａに向かう折り返し経路２３ｂとが形成されている。したがって、下り方向のパケットを振り分け機能部１５ｂの出力から折り返し用リングバッファ１３ｅを経由してマージ機能部１４ａの入力に与え、上りの経路で更に転送することが可能である。但し、図１０に示す状態ではまだ仮想マシン１１−２が使用可能な状況ではないので、折り返し経路２３ａ、２３ｂおよび折り返し用リングバッファ１３ｅが使用されることはない。
【０１０５】
図１１に示す状態では、図１０の状態に対して、上り転送経路２５ａ、２５ｂ、下り転送経路２６ａ、および２６ｂが更に追加されている。したがって、図１１に示す状態では、上り側の振り分け機能部１４ｂが送出するパケットを、上り転送経路２５ａ、リングバッファ１３ｂ、および上り転送経路２５ｂを経由して仮想マシン１１−２に送信することができる。
【０１０６】
また、仮想マシン１１−２が送出するパケットを、下り転送経路２６ａ、リングバッファ１３ｄ、および下り転送経路２６ｂを経由してマージ機能部１５ａに入力することができる。更に、また、折り返し経路２３ａ、折り返し用リングバッファ１３ｅ、および折り返し経路２３ｂを利用することにより、下り方向のパケットの経路を折り返して上り方向に転送できるので、トラフィック１７として外部装置から入力されるパケットと同じように、仮想マシン１１−２が送出するパケットも仮想マシン１１−１に送信することができる。
【０１０７】
＿＜仮想マシン追加に伴う制御＞
図１０に示すように、仮想マシン１１−２を追加するための命令２４がユーザによって制御部１６に入力されると、例えば制御部１６の制御により、物理マシン１０上に仮想マシン１１−２が生成される。これにより、仮想マシン１１−２が動作可能な状態になる。
【０１０８】
この時、ＭＡＣアドレス生成機能部１６ａが、仮想マシン１１−２に割り当てるべきＭＡＣアドレス、例えば「０ａ：１ｂ：２ｃ：３ｄ：４ｅ：５ｆ」をランダムな値として生成する。また、ＭＡＣアドレス生成機能部１６ａ又はテーブル更新機能部１６ｂが、バッファ制御信号２７を用いて共有メモリ１３を制御する。ＭＡＣアドレス生成機能部１６ａ又はテーブル更新機能部１６ｂは、共有メモリ１３上で空いている領域の中から仮想マシン１１−２が受信用に使用するリングバッファ１３ｂ、および送信用に使用するリングバッファ１３ｄを確保する。
【０１０９】
また、テーブル更新機能部１６ｂは、ＭＡＣアドレス生成機能部１６ａの生成したＭＡＣアドレス「０ａ：１ｂ：２ｃ：３ｄ：４ｅ：５ｆ」、および確保したリングバッファ１３ｂ、１３ｄを表す情報を、互いに対応付けた状態でテーブル２０に登録する。また、ＭＡＣアドレス通知機能部１６ｃは、ＭＡＣアドレス生成機能部１６ａが生成したＭＡＣアドレス「０ａ：１ｂ：２ｃ：３ｄ：４ｅ：５ｆ」と、受信用のリングバッファ１３ｂ、および送信用のリングバッファ１３ｄを表す情報とを、図２に示した通知信号１８−２の経路で仮想マシン１１−２に通知する。
【０１１０】
この通知により、これ以降は、仮想マシン１１−２がそれ自身を表すＭＡＣアドレスとして「０ａ：１ｂ：２ｃ：３ｄ：４ｅ：５ｆ」の値を使うことになる。また、仮想マシン１１−２は確保されたリングバッファ１３ｂ、および１３ｄをそれぞれパケットの受信、および送信の際に使用する。
【０１１１】
また、テーブル更新機能部１６ｂは、テーブル２０の内容を通知信号１９−１の経路を用いて通知する。これにより、振り分け機能部１４ｂは、上り方向に流れる各パケットについて、仮想マシン１１−１宛てのパケットと、仮想マシン１１−２宛てのパケットとを適切に振り分け可能となる。このテーブル更新機能部１６ｂによる通知については、例えば図７に示したステップＳ２１、Ｓ２５のように、振り分け機能部１４ｂの制御によるテーブル参照に置き換えてもよい。
【０１１２】
また、下り方向に流れる各パケットについて、マージ機能部１５ａが受信対象として扱うパケットを適切に決定できるように、テーブル更新機能部１６ｂが、通知信号１９−２の経路を用いて、必要な情報を通知する。すなわち、追加された仮想マシン１１−２からのパケットを中継するリングバッファ１３ｄを表す情報を、処理対象として追加するように、ＭＡＣアドレス生成機能部１６ａが通知する。
【０１１３】
＜仮想マシン間通信システムの利点＞
以上説明したように、図６に示した構成の仮想マシン間通信システムは、高速に複数の仮想マシン１１−１、１１−２の間、および各仮想マシン１１−１、１１−２と物理ＮＩＣ １２との間で通信できる。これにより物理マシン１０内で物理ＮＩＣ １２のハードウェアなどの機能を追加しなくてもよい。更に物理ＮＩＣ １２に依存する特別なドライバを各仮想マシン１１−１、１１−２が使用しなくてもよく、メモリコピーの処理をしなくてもよい。
【０１１４】
すなわち、制御部１６が各仮想マシン１１−１、１１−２に対してＭＡＣアドレスのような固有情報を割り当てると共に、共有メモリ１３上の使用する領域を確保し、これらの関係を表す情報をテーブル２０などを用いて管理している。これにより、振り分け機能部１４ｂは複数経路のパケットを適切に振り分けることが可能になる。
また、共有メモリ１３上に折り返し用リングバッファ１３ｅが設けてあり、下りの振り分け機能部１５ｂの出力から折り返し用リングバッファ１３ｅを経由して折り返し、上り側のマージ機能部１４ａに入力できる。これにより、複数の仮想マシン１１−１、１１−２の間でパケットを転送するための経路を確保できる。しかも、仮想マシン１１−１、１１−２の追加などに伴って物理ＮＩＣ １２などに機能を追加する必要がないので、仮想化技術のメリットを損なうことがない。
【符号の説明】
【０１１５】
１０  物理マシン
１１−１，１１−２  仮想マシン
１２  物理ＮＩＣ  （物理通信インタフェースの一例）
１３  共有メモリ  （バッファメモリの一例）
１３ａ  リングバッファ  （第１の中継部の一例）
１３ｃ  リングバッファ  （第２の中継部の一例）
１３ｂ，１３ｄ  リングバッファ
１３ｅ  折り返し用リングバッファ  （第３の中継部の一例）
１４  第１転送プロセス
１４ａ，１５ａ  マージ機能部
１４ｂ，１５ｂ  振り分け機能部
１５  第２転送プロセス
１６  制御部
１６ａ  ＭＡＣアドレス生成機能部  （固有情報生成制御部）
１６ｂ  テーブル更新機能部
１６ｃ  ＭＡＣアドレス通知機能部  （生成情報通知制御部）
１７  トラフィック
１８−１，１８−２  通知信号
１９−１，１９−２  通知信号
２０  テーブル
２１ａ，２１ｂ，２１ｃ，２１ｄ  上り転送経路
２２ａ，２２ｂ，２２ｃ，２２ｄ  下り転送経路
２３ａ，２３ｂ  折り返し経路
２４  命令
２５ａ，２５ｂ  上り転送経路
２６ａ，２６ｂ  下り転送経路
２７  バッファ制御信号
【図１】
2018133758.tif 000003
【図２】
2018133758.tif 000004
【図３】
2018133758.tif 000005
【図４】
2018133758.tif 000006
【図５】
2018133758.tif 000007
【図６】
2018133758.tif 000008
【図７】
2018133758.tif 000009
【図８】
2018133758.tif 000010
【図９】
2018133758.tif 000011
【図１０】
2018133758.tif 000012
【図１１】
2018133758.tif 000013