上記IVC技術を利用した通信システムの主要部の構成例を図1に示す。図1に示した通信システムにおいては、物理マシン50、すなわち現実のコンピュータやサーバの上に、2つの独立した仮想マシン51−1、51−2が構築されている。この仮想マシン51−1,51−2は、不図示のCPU(Central Processing Unit)がハイパーバイザ・プログラムを実行することによって具現化される。また、物理マシン50に備わった物理ネットワークインタフェースカード(NIC)の通信ポートとして、NIC−port1 52−1、およびNIC−port2 52−2の2つが設けてある。
図1の通信システムにおいて、IVC機能部53は、物理マシン10上に具現化されて、仮想マシン51−1、および51−2と、NIC−port1 52−1、およびNIC−port2 52−2の間の通信を中継する。つまり、IVC機能部53を経由して、仮想マシン51−1とNIC−port1 52−1、又はNIC−port2 52−2との間の通信経路54が確保できる。更に、仮想マシン51−2とNIC−port2 52−2、又はNIC−port1 52−1との間の通信経路54が確保できる。更に、仮想マシン51−1と仮想マシン51−2との間の通信経路54が確保できる。しかし、一般的なIVC機能部53の場合は、通信経路を切り替えるために仮想的なスイッチを設ける必要があるため、このスイッチにより処理性能が低下する。
前記IVCとして、SR−IOV(Single Root I/O Virtualization)およびパススルーを組み合わせた第1比較例の通信システムを図2に示す。図2の通信システムにおいても、物理マシン60上に2つの仮想マシン61−1、61−2が構築され、更に物理マシン60上にはNIC−port1 62−1、およびNIC−port2 62−2が備わっている。また、図2の構成では、ハードウェアである1つのNIC−port1 62−1を論理的に複数の子NIC−VF(Virtual Function)62b1、62b2に分割している。また、それぞれのNIC−VF 62b1、62b2が各仮想マシン61−1、61−2から直接見えるように、仮想化層、すなわちハイパーバイザを介さずに各NIC−VF 62b1、62b2を割り当ててある。
図2に示した各仮想マシン61−1、61−2の内部には、各物理NICに対応したVFドライバ61aが動作している。また、図2に示した構成では、各NIC−port1 62−1、およびNIC−port2 62−2の内部に、スイッチ機能62aがハードウェア的に組み込まれている。
図2に示した第1比較例の構成においては、各NIC−port1 62−1、およびNIC−port2 62−2の内部にスイッチ機能62aがハードウェア的に組み込まれている。これによりMAC(Media Access Control)アドレスを用いて経路64からNIC−VF62b1、62b2に向かうトラフィックの振り分けが可能である。しかし、各物理NICに対応したVFドライバ61aを各仮想マシン61−1、61−2の内部に構築する必要がある。そのため、システムの仮想化レベルが低下し、管理者は、物理マシン60に搭載されているNICと、物理マシン60上に構築されている仮想マシンを、運用上、全て管理しなければならない。
前記IVCとして、SPP(Soft Patch Panel)を採用した第2比較例の通信システムの構成例を図3に示す。図3の通信システムにおいても、物理マシン70上に2つの仮想マシン71−1、71−2が構築されている。更に物理マシン70上にはNIC−port1 72−1、およびNIC−port2 72−2が備えられている。物理マシン70上には更に、仮想マシン71−1、71−2、NIC−port1 72−1、およびNIC−port2 72−2の間でデータの受け渡しを行わせる共有メモリ73(バッファメモリ)が配置されている。また、物理マシン70上にはパッチコントローラ75の命令により制御される転送プロセス74−1、74−2、および74−3が構築されている。
図3の第2比較例の構成では、転送プロセス74−1から仮想マシン71−1に向かう上り方向のパケット転送に共有メモリ73の領域73aがリングバッファとして使用される。また、仮想マシン71−1から転送プロセス74−2に向かう方向のパケット転送に共有メモリ73の領域73bがリングバッファとして使用される。また、転送プロセス74−2から仮想マシン71−2に向かう方向のパケット転送に共有メモリ73の領域73cがリングバッファとして使用される。また、仮想マシン71−2から転送プロセス74−3に向かう方向のパケット転送に共有メモリ73の領域73dがリングバッファとして使用される。
図3の第2比較例の構成では、共有メモリ73を利用することにより、複数の仮想マシン71−1、71−2の間、および、仮想マシン71−1、71−2とNIC−port1 72−1、NIC−port2 72−2との間でデータの受け渡しを行うことができる。また、各転送プロセス74−1、74−2、および74−3は、パッチコントローラ75の命令によりパケットの転送元および転送先を変更することができる。
但し、図3の第2比較例の構成では、2つ以上の転送プロセスが同じNICのインタフェースから同時にパケットを受信することはできない。また、2つ以上の転送プロセスが同じNICのインタフェースへ同時にパケットを送信することはできない。なお、1つの転送プロセスが複数のNICのインタフェースからパケットを受信したり、1つの転送プロセスが複数のNICのインタフェースへパケットを送信することは可能である。
図3の第2比較例の構成における、上り方向のトラフィックに対する動作例を図4に示す。すなわち、図3に示した第2比較例の構成において、NICから仮想マシン71−1に向かうトラフィック78aと、NICから仮想マシン71−2に向かうトラフィック78bとが共通のNIC−port1 72−1で受信される状態が図4に示されている。
図4の状態では、経路77を通って送信先が異なる複数のトラフィック78a、78bが共通のNIC−port1 72−1に到着した場合に競合が発生する。また、複数のトラフィック78a、78bを送信先に応じて振り分けるための機能がNIC−port1 72−1には備わっていない。
図3の第2比較例の構成における、下り方向のトラフィックに対する動作例を図5に示す。すなわち、図3に示した第2比較例の構成において、仮想マシン71−1からNICに向かうトラフィック78Baと、仮想マシン71−2からNICに向かうトラフィック78Bbとが共通のNIC−port1 72−1を経由して外部に送信される状態が図5に示されている。
図5の状態では、送信先が異なる複数のトラフィック78Ba、78Bbが共通のNIC−port1 72−1で経路77Bを通って送信される処理において競合が発生する。また、図5の状態では、複数の仮想マシン71−1、71−2の間で通信するための経路を確保できない。つまり、図3に示した第1比較例のNIC−port1 72−1、NIC−port2 72−2のように複数のNICが存在する場合は経路を確保できるので仮想マシン間通信が可能である。しかし、図4、図5に示した第2比較例のように単一のNICだけしか利用できない場合は仮想マシン間通信が不可能である。したがって、第2比較例では、必要に応じてNICのハードウェアなどの機能を追加しない限り、IVCの十分な機能を提供できない。また、NICのハードウェア追加は仮想的に解決できないので、システムを仮想化する際のメリットが大きく損なわれてしまう。
また、例えばメモリコピーの処理を実施すれば、複数の仮想マシン間の通信を比較的簡単に実現できる。しかし、複数の仮想マシン間の通信をメモリコピーの処理によって実現する場合には、この処理の負荷が大きいので、高速の通信ができない。前述のSR−IOVやSPPは、メモリコピーを伴わない高速なIVC技術である。
本発明は、上記の状況に鑑みてなされたものであり、1つの物理マシン内で、物理NICに依存した特別なドライバを使用することなく、複数の仮想マシンがメモリコピーを伴わない高速な通信を別々に行うことが可能な仮想マシン間通信システムを提供することを目的とする。
(1)複数の仮想マシンの相互間、および前記各仮想マシンと物理通信インタフェースとの間で相互間通信を実現するための仮想マシン間通信システムであって、
前記物理通信インタフェースから前記各仮想マシンに向かう上り方向のデータ転送を処理する第1の転送プロセスと、
前記各仮想マシンから前記物理通信インタフェースに向かう下り方向のデータ転送を処理する第2の転送プロセスと、
前記第1の転送プロセスおよび前記第2の転送プロセスと、前記各仮想マシンとの間に配置され、前記上り方向のデータ中継に割り当て可能な第1の中継部と、前記下り方向のデータ中継に割り当て可能な第2の中継部と、を有するバッファメモリと、
前記第1の転送プロセスおよび前記第2の転送プロセスの各々に配置され、入力されたデータを当該データの送信先に応じて振り分けて、前記バッファメモリ又は前記物理通信インタフェースに出力する振り分け機能部と、
前記各仮想マシンを特定する固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する固有情報生成制御部、
を備え、前記振り分け機能部は、前記固有情報に基づいて入力された各データを振り分け、
前記第1の転送プロセスおよび前記第2の転送プロセスの各々は、送信元、送信先、および通信経路の少なくとも1つが異なる複数種類の入力データの処理順序を制御して複数データの競合を回避するマージ機能部を有する。
この仮想マシン間通信システムによれば、前記固有情報生成制御部が生成する前記固有情報を各仮想マシンに割り当てると共に、各々の仮想マシンが使用する前記バッファメモリ上の領域を確保することができる。その結果として、前記振り分け機能部は、入力された複数のデータを当該データの送信先に応じて振り分けて、前記バッファメモリ又は前記物理通信インタフェースに出力することが可能になる。したがって、複数の仮想マシン間や、仮想マシンとNICとの間で通信するために、1つの物理マシン内で物理NICのハードウェアを増設したり、物理NICに依存する特別なドライバを配置する必要がなくなる。
また、この仮想マシン間通信システムによれば、前記第1の転送プロセス又は前記第2の転送プロセスに通信経路等が異なる複数のデータが入力される場合であっても、これら複数のデータの受信プロセスが競合するのを回避できる。
(2)前記バッファメモリは、前記第1の中継部、および前記第2の中継部の他に、前記第2の転送プロセスの出力から前記第1の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第3の中継部、を有する。
この仮想マシン間通信システムによれば、前記第3の中継部を利用することにより、データの折り返し中継を行うことが可能になる。つまり、下り方向のトラフィックを、前記第2の転送プロセスの出力から前記第3の中継部を経由して折り返し、上り方向のトラフィックとして前記第1の転送プロセスに入力することができる。そのため、複数のNICを用意しておかなくても、複数の仮想マシン間で通信するための経路を確保できる。
(3)前記バッファメモリは、前記第1の中継部、および前記第2の中継部の他に、前記第2の転送プロセスの出力から前記第1の転送プロセスの入力に向かう方向のデータの折り返し中継に割り当て可能な第3の中継部、を有し、
前記第2の転送プロセスにおける前記振り分け機能部は、受け取った入力データの送出先を、前記バッファメモリ上の前記第3の中継部と、前記物理通信インタフェースとのいずれか一方に振り分け、
前記第1の転送プロセスにおける前記マージ機能部は、前記バッファメモリ上の前記第3の中継部からの入力データ、および前記物理通信インタフェースからの入力データの両方を処理対象とする。
この仮想マシン間通信システムによれば、複数のNICを用意しておかなくても、折り返し機能を利用して、複数の仮想マシン間で通信するための経路を確保できる。例えば、一方の仮想マシンが送出したデータを、前記第2の転送プロセスにおける前記振り分け機能部で振り分けて前記第3の中継部に送り、前記第3の中継部で経路を折り返して前記第1の転送プロセスに入力することができる。そして、前記第1の転送プロセスの前記マージ機能部が、入力されたデータを他方の仮想マシンに送ることができる。
(4)前記固有情報生成制御部は、前記仮想マシンを新たに起動する際に、該当する前記仮想マシンを特定する前記固有情報を生成すると共に、該当する前記仮想マシンが使用する前記バッファメモリ上の領域を確保する。
この仮想マシン間通信システムによれば、起動した全ての仮想マシンの各々を前記固有情報により区別することが可能であり、通信のために必要な前記バッファメモリ上の領域も仮想マシン毎に確保できる。
(5)前記固有情報生成制御部が生成した前記仮想マシンの固有情報、および前記仮想マシンに割り当てた前記バッファメモリの領域を表す情報を、前記振り分け機能部、および前記仮想マシンに通知する生成情報通知制御部を更に備える。
この仮想マシン間通信システムによれば、前記生成情報通知制御部により通知される情報に基づいて、前記各仮想マシンはそれ自身を特定するための前記固有情報を把握すると共に、使用すべき前記バッファメモリの領域を把握できる。また、前記生成情報通知制御部により通知される情報に基づいて、前記振り分け機能部は、適切な振り分け処理を実行できる。
(6)前記第1の転送プロセスおよび前記第2の転送プロセスの少なくとも一方は、新たに起動した前記仮想マシンに対応付けられた情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を追加する。
この仮想マシン間通信システムによれば、例えばユーザ等の要求に応じて、新たな仮想マシンが物理マシン上に追加された場合であっても、前記第1の転送プロセスおよび第2の転送プロセスは、追加された前記仮想マシンに対する受信データを適切に処理できる。したがって、システム全体の構成を柔軟に変更することが可能である。
(7)前記第1の転送プロセスおよび前記第2の転送プロセスの少なくとも一方は、登録済みの前記仮想マシンの削除を表す情報を前記生成情報通知制御部から受け取った場合には、当該情報に従い、処理対象とする受信データの送信元を削除する。
この仮想マシン間通信システムによれば、例えばユーザ等の要求に応じて、物理マシン上で稼働中の仮想マシンが削除された場合には、前記第1の転送プロセスおよび第2の転送プロセスは、削除された前記仮想マシンに対する処理を終了することができる。したがって、不要になった計算機資源を必要に応じて開放し、システム全体の構成を柔軟に変更することが可能である。
本発明の仮想マシン間通信システムによれば、1つの物理マシン内で、物理NICの増設をしたり、物理NICに依存した特別なドライバを使用することなく、複数の仮想マシンがメモリコピーを伴わない高速な通信を別々に行うことが可能になる。したがって、システムの仮想化に伴うメリットを十分に享受できる。
本発明の実施形態について各図を参照しながら以下に説明する。
<仮想マシン間通信システムの構成例>
本発明の実施形態における仮想マシン間通信システムの構成例を図6に示す。
図6に示した例では、物理マシン10上に2つの仮想マシン11−1、および11−2が構築されている。物理マシン10は、様々なコンピュータ、大容量記憶装置、通信装置などのハードウェアと、基本ソフトウェアであるオペレーティングシステムとで構成される。物理マシン10は、例えば様々な通信サービスを提供可能な汎用サーバとして構成される。
各仮想マシン11−1、11−2は、必要とされる様々な仕様に適合する動作を行う仮想のコンピュータであり、物理マシン10の不図示のCPUがハイパーバイザ・プログラムを実行することによって具現化される。したがって、物理マシン10上で稼働する仮想マシン11−1、11−2の数は、必要に応じて増やしたり減らしたりすることができる。
図6に示した物理マシン10は、物理ネットワークインタフェースカード(NIC)として構成される1つの物理NIC 12(物理通信インタフェースの一例)を備えている。この物理NIC 12は、外部の装置との間の双方向のトラフィック17を扱うことが可能な単一の通信ポートNIC port1を有している。
本実施形態では、トラフィック17として入出力されるデータなど、物理マシン10上で扱う通信データはIP(Internet Protocol)パケットであり、バケット単位でデータ処理される。
また、図6に示した物理マシン10上には、共有メモリ13が備わり、更に第1転送プロセス14、第2転送プロセス15、および制御部16が具現化されている。これらの構成要素の各々は、物理マシン10に備わっている処理機能(CPU)、記憶機能(メモリ)、通信機能などの計算機資源を利用し、例えば処理機能がミドルウェアを実行することによって具現化される。
共有メモリ13は、複数の機能、すなわち図6の例では仮想マシン11−1、11−2、第1転送プロセス14、および第2転送プロセス15が通信のために共有可能なバッファメモリである。この共有メモリ13は、第1転送プロセス14および第2転送プロセス15と、仮想マシン11−1、11−2との間の通信を中継する。図6に示した共有メモリ13上には、記憶領域として、4つのリングバッファ13a〜13dと、折り返し用リングバッファ13eとを備えている。勿論、共有メモリ13上のリングバッファ13a〜13dの数は必要に応じて増やしてもよいが、IVCとして十分な機能を提供するためには最低でも4つは確保する必要がある。また、折り返し用リングバッファ13eの数を増やしてもよい。
リングバッファ13a〜13dの各々は、上り方向および下り方向のトラフィックの中継に割り当て可能になっている。また、折り返し用リングバッファ13eは、経路を途中で中継して折り返し、下り方向から上り方向に向かうトラフィックの経路を形成するために割り当て可能になっている。図6において、リングバッファ13a(第1の中継部)は、上り方向のデータ中継に割り当てられている。リングバッファ13c(第2の中継部)は、下り方向のデータ中継に割り当てられている。折り返し用リングバッファ13e(第3の中継部)は、第2転送プロセス15の出力から第1転送プロセス14の入力に向かう方向のデータの折り返し中継に割り当てられている。
一般的なリングバッファと同じように、4つのリングバッファ13a〜13dと、折り返し用リングバッファ13eとの各々は、論理的にリング状に形成されたメモリ領域により構成されている。したがって、パケットの送信側、すなわち各仮想マシン11−1、11−2、第1転送プロセス14、又は第2転送プロセス15は、転送対象の様々なパケットを処理するための情報を、各リングバッファ内のリング状の各記憶領域に順番に配置し、これらの記憶領域を循環的に利用する。これにより、各リングバッファは、パケットの中継処理を連続的に行うことができる。本実施形態の制御部16は、該当するパケットが存在しているメモリアドレスなどの位置を表すアドレスポインタの情報のみを、各リングバッファの各記憶領域に保持するように処理している。これにより、各パケットのデータ本体を各リングバッファに保持する必要がなくなり、各パケットが共有メモリ13を通過する際の処理の負荷が軽減され、高速処理が可能になる。また、共有メモリ13に必要とされる記憶容量も少なくなる。
第1転送プロセス14は、物理NIC 12から各仮想マシン11−1、11−2に向かう上り方向のトラフィックのパケット転送を処理するプロセスであり、マージ機能部14a、および振り分け機能部14bを備えている。
第1転送プロセス14内のマージ機能部14aは、入力されるパケットの受信処理を行うと共に、複数の経路から到着するパケットをこれらの受信プロセスが競合しないように配慮しつつ統合(マージ)する。これにより、複数データの競合を回避することができる。具体的には、ラウンドロビン(round robin)の処理を適用し、各経路から到着する各パケットの処理順序を割り当てる。本実施形態では、上り側のマージ機能部14aが受信すべきパケットを送出するインタフェースは、使用する物理NIC 12と、共有メモリ13上の折り返し用リングバッファ13eのみである。
第1転送プロセス14内の振り分け機能部14bは、入力された処理対象の各パケットに含まれている送信先の固有情報に基づいて、適切な出力先を選択し、当該パケットを送信する。本実施形態では、前記固有情報としてMAC(Media Access Control)アドレスを使用している。
具体的には、振り分け機能部14bは、制御部16から通知されたテーブルの内容と、各パケットに含まれている送信先のMACアドレスとに基づき、送出先を特定する。上記テーブルについては後で説明する。振り分け機能部14bが送出先として選択するのは、共有メモリ13上のリングバッファ13a〜13dのいずれかである。
一方、第2転送プロセス15は、各仮想マシン11−1、11−2から物理NIC 12に向かう下り方向のトラフィックのパケット転送を処理するプロセスであり、マージ機能部15a、および振り分け機能部15bを備えている。
第2転送プロセス15内のマージ機能部15aは、入力されるパケットの受信処理を行うと共に、複数の経路から到着するパケットをこれらの受信プロセスが競合しないように配慮しつつ統合(マージ)する。具体的には、ラウンドロビンの処理を適用し、各経路から到着する各パケットの処理順序を割り当てる。
本実施形態では、下り側のマージ機能部15aが受信すべきパケットを送出するインタフェースは、共有メモリ13上のリングバッファ13a〜13dの中で、実際に稼働している仮想マシン11−1、11−2が使用しているリングである。このリングは、制御部16がマージ機能部15aに通知する情報に基づき特定できる。
第2転送プロセス15内の振り分け機能部15bは、上記振り分け機能部14bと同様に、入力された処理対象の各パケットに含まれている送信先の固有情報に基づいて、適切な出力先を選択し、当該パケットを送信する。
具体的には、振り分け機能部15bは、制御部16から通知されたテーブルの内容と、各パケットに含まれている送信先のMACアドレスとに基づき、送出先を特定する。振り分け機能部15bは、各パケットに含まれている送信先のMACアドレスが制御部16から通知された前記テーブル上に存在する場合には、共有メモリ13の折り返し用リングバッファ13eを送出先に決定する。折り返し用リングバッファ13eに送出されたデータは、第1転送プロセス14のマージ機能部14aによって、物理NIC 12からの入力データとマージされて、その両方が処理対象となる。また、振り分け機能部15bは、各パケットに含まれている送信先のMACアドレスが制御部16から通知された前記テーブル上に存在しない場合には、物理NIC 12を送出先に決定する。
図6に示した制御部16は、図6に示した物理マシン10上に構成された仮想マシン間通信システム全体の制御を行うものである。この制御部16には、図6に示すようにMACアドレス生成機能部16a、テーブル更新機能部16b、およびMACアドレス通知機能部16cが内蔵されている。また、テーブル更新機能部16bにはテーブル20が含まれている。
MACアドレス生成機能部16a(固有情報生成制御部)は、仮想マシン間通信システムにおいて各仮想マシンを特定するために必要な固有情報として、MACアドレスを生成する。また、各仮想マシンに対してそれが使用する共有メモリ13上の領域を確保する。なお、各仮想マシンについて共有メモリ13上の領域を確保するための動作は、テーブル更新機能部16bが行ってもよい。
具体的には、物理マシン10上で新規に1つの仮想マシンを起動する際に、MACアドレス生成機能部16aが該当する仮想マシンに対して新たなMACアドレスを生成して割り当てる。更に、MACアドレス生成機能部16aは該当する仮想マシンに対して共有メモリ13上の領域、すなわち、リングバッファ13a〜13dのいずれかを割り当てる。
テーブル更新機能部16bは、テーブル20により、仮想マシン毎にMACアドレス生成機能部16aが生成したMACアドレスと、該当する仮想マシンに割り当てられた共有メモリ13上の領域を管理する。テーブル20は、1つのリングとの対応関係を表す。そして、テーブル更新機能部16bは必要に応じてテーブル20の内容を最新の情報に更新し、必要に応じてテーブル20の内容を第1転送プロセス14、および第2転送プロセス15に通知する。詳細については後述するが、例えば図9(a)に示すような内容がテーブル20として管理される。
テーブル更新機能部16bは、具体的には、振り分け機能部14b、15bに対して、MACアドレス生成機能部16aが新たに生成したMACアドレスと、このMACアドレスを使用する仮想マシンに割り当てられた共有メモリ13上の領域の情報とを通知する。また、テーブル更新機能部16bは、マージ機能部14a、15aに対して、該当する仮想マシンが新たに使用する共有メモリ13上の領域、つまり、リングバッファ13a〜13dのいずれか、又は折り返し用リングバッファ13eを示す情報を通知する。
MACアドレス通知機能部16c(生成情報通知制御部)は、各仮想マシンがそれ自身を特定するために使用すべきMACアドレスと、前記仮想マシンが使用すべき共有メモリ13上の領域とを表す情報を、新たに起動した各仮想マシンに対して通知する。MACアドレス通知機能部16cが通知する情報は、MACアドレス生成機能部16aにより生成される情報である。この情報は、テーブル20にも登録される。
図6に示した構成においては、制御部16は、通知信号18−1、および18−2を用いて、仮想マシン11−1、および11−2の各々に対して必要な情報を通知することができる。また、制御部16は、バッファ制御信号27を用いて、共有メモリ13上の各領域、すなわちリングバッファ13a〜13d、および折り返し用リングバッファ13eの確保や開放を制御することができる。また、制御部16は、通知信号19−1、および19−2を用いて、第1転送プロセス14、および第2転送プロセス15の各々に対して必要な情報を通知することができる。
<仮想マシン間通信システムの動作例>
_<仮想システム構成の変化の説明>
例えば、図6に示した物理マシン10上で稼働する各仮想マシン11−1、11−2については、必要に応じて新たな仮想マシンを追加したり、稼働している仮想マシン11−1、11−2を削除することができる。つまり、物理マシン10から必要な計算機資源を確保して新たに仮想マシンを追加して稼働させることができるし、稼働している仮想マシン11−1、11−2を削除してその計算機資源を開放することもできる。
しかし、例えば図6に示した複数の仮想マシン11−1、11−2が互いに連携するためには、これらの間で通信を行う経路を確保する必要がある。そして、新たな仮想マシンの追加や、稼働している仮想マシンの削除の際には、仮想化されているシステム全体の構成が変化するので、この変化に応じて、仮想マシン間通信システムが適切に対応する必要がある。なお、この変化に対応するために必要な仮想マシン間通信システムの機能は、図6に示した共有メモリ13、第1転送プロセス14、第2転送プロセス15、および制御部16の中に含まれている。
_<新たに仮想マシンを追加した時の動作シーケンス>
図6に示した仮想マシン間通信システムにおいて、新たな仮想マシンを追加したときのシステムの動作例を図7に示す。つまり、図6に示したMACアドレス生成機能部16a、テーブル更新機能部16b、MACアドレス通知機能部16c、マージ機能部14a、振り分け機能部14b、マージ機能部15a、および振り分け機能部15bの各々の動作および相互間の制御のための通信の概要が図7に示されている。図7に示した動作について以下に説明する。
ここでは、図6に示した物理マシン10上に一方の仮想マシン11−1のみが存在し、仮想マシン11−2は存在していない状態を初期状態として想定する。この初期状態で、例えばユーザの要求に応じて、新たな仮想マシン11−2を物理マシン10上に追加することが必要になる。そして、既に稼働している仮想マシン11−1と追加した仮想マシン11−2とが連携してサービスを提供できるように、仮想マシン間通信システムを構成する必要がある。
上記の場合には、仮想マシン11−2の追加に伴って、MACアドレス生成機能部16aが図7のステップS11で、仮想マシン11−2にその固有情報として割り当てるべきMACアドレスを生成する。また、MACアドレス生成機能部16aは生成したMACアドレスの情報を、ステップS12でテーブル更新機能部16bに与える。
テーブル更新機能部16bは、MACアドレス生成機能部16aからMACアドレスの情報を受け取った後、ステップS13で、追加された仮想マシン11−2が通信に使用する共有メモリ13上の領域を確保する。つまり、テーブル更新機能部16bは、図6に示したリングバッファ13a〜13dのうち、空き状態の1つのリングバッファを仮想マシン11−2のために確保する。
テーブル更新機能部16bは、MACアドレス生成機能部16aから受け取った仮想マシン11−2のMACアドレス、およびステップS13で確保したリングバッファを特定する情報を、次のステップS14でMACアドレス通知機能部16cに与える。また、テーブル更新機能部16bは次のステップS15でテーブル20の内容を更新する。つまり、テーブル更新機能部16bは、追加された仮想マシン11−2のMACアドレス、およびステップS13で確保したリングバッファを特定する情報をテーブル20に追加する。
一方、MACアドレス通知機能部16cは、テーブル更新機能部16bから受け取ったMACアドレス、および確保したリングバッファを特定する情報を、ステップS16で該当するVM(Virtual Machine)、すなわち仮想マシン11−2に対して通知信号18−2の経路で通知する。
なお、図7には示していないが、仮想マシン11−2は、ステップS16でMACアドレス通知機能部16cが通知した内容を受け取ることにより、それ自身を特定するために通信システム上で使用すべきMACアドレスと、使用すべき共有メモリ13上の領域を知ることができる。仮想マシン11−2が使用すべき共有メモリ13上の領域は、例えばリングバッファ13a〜13dのいずれかである。仮想マシン11−2は、それ自身が任意の送信先にパケットを送信する場合に、送信元である自分のMACアドレスの情報と、送信先を特定するMACアドレスの情報とを含めて送信する。また、仮想マシン11−2は、それ自身に割り当てられた共有メモリ13上の1つのリングバッファに向けてパケットを送出する。
また、テーブル更新機能部16bは、ステップS17で、下り側のマージ機能部15aに対して、新たに追加された仮想マシン11−2が使用する共有メモリ13上のリングバッファを特定する情報を、図6に示した通知信号19−2の経路を用いて通知する。
下り側のマージ機能部15aは、テーブル更新機能部16bから受け取ったリングバッファを特定する情報を、処理対象パケットの受信元として図示しない内部テーブル上にステップS18で追加する。
一方、上り側のマージ機能部14aは、ステップS19でパケットを受信すると、このパケットを次のステップS20で振り分け機能部14bに渡す。振り分け機能部14bは、マージ機能部14aからパケットを受け取った場合に、その適切な送出先を調べるために、ステップS21で通知信号19−1の経路を用いてテーブル更新機能部16b上のテーブル20を参照する。
具体的には、振り分け機能部14bが受け取ったパケットの中には、送信先MACアドレスが含まれている。振り分け機能部14bは、この送信先MACアドレスに対応付けられている共有メモリ13上のリングバッファ13a〜13dのいずれかを表す情報を、テーブル20の内容に基づいて取得する。これにより、振り分け機能部14bは当該パケットの振り分け先を特定できる。
振り分け機能部14bは、マージ機能部14aから受け取ったパケットを、ステップS21で特定した振り分け先に向けてステップS22で送信する。例えば、振り分け機能部14bが受け取ったパケットの送信先が仮想マシン11−1である場合を考える。このとき、この仮想マシン11−1が上り方向のパケット経路でリングバッファ13aを使用しているならば、振り分け機能部14bは、このリングバッファ13aに向けてパケットを送信する。
上記ステップS19、S20と同様に、上り側のマージ機能部14aは、ステップS23でパケットを受信すると、そのパケットを次のステップS24で振り分け機能部14bに渡す。また、振り分け機能部14bは、マージ機能部14aから受け取ったパケットの送出先を特定するためにステップS25でテーブル更新機能部16b上のテーブル20を参照する。また、振り分け機能部14bはステップS25で特定した振り分け先に向けて、ステップS26でパケットを送信する。
一方、下り側のマージ機能部15aは、下り方向に向かうパケットが入力されると、このパケットをステップS27で受信する。但し、マージ機能部15aの前記内部テーブルにステップS18などの処理によって登録されていないリングバッファから入力されたパケットの場合には受信処理の対象から除外する。また、マージ機能部15aは受信処理した前記パケットをステップS28で振り分け機能部15bに渡す。
下り側の振り分け機能部15bは、マージ機能部15aからパケットを受け取った場合には、このパケットをステップS29で送信する。この場合のパケットの送出先は、振り分け機能部15bの機能によりパケット毎に振り分けることができる。
図6に示した構成において、振り分け機能部15bは、各パケットの振り分け先、つまり送信先として、物理NIC 12と、共有メモリ13上の折り返し用リングバッファ13eの2つの中から選択することができる。つまり、振り分け機能部15bに入力される各パケットの中には、送信先のMACアドレスおよび送信元のMACアドレスが含まれているので、これらを利用して振り分けることができる。
例えば、当該パケットの送信先、すなわち宛先がテーブル20上に登録されていないMACアドレスである場合、当該パケットは、物理マシン10の外部の装置宛てである。このとき、振り分け機能部15bは物理NIC 12に向けて当該パケットを送出する。
一方、当該パケットの送信先、すなわち宛先がテーブル20上に登録されているMACアドレスである場合、当該パケットは、同じ物理マシン10上の別の仮想マシンが宛先である。このとき、仮想マシン間通信を行うための折り返しの経路が利用される。つまり、振り分け機能部15bは、当該パケットの送出先として、折り返し用リングバッファ13eを選択する。
振り分け機能部15bが折り返し用リングバッファ13eに向けて送出したパケットは、例えば図10に示した折り返し経路23aから折り返し用リングバッファ13eを通り、更に折り返し経路23bを通って上り側のマージ機能部14aに入力される。したがって、下り方向のパケットの経路を折り返して、上り方向の経路で転送することができる。つまり、物理NIC 12のハードウェア等を増設しなくても、仮想マシン11−1と仮想マシン11−2との間を相互に接続する通信経路を確保できる。
上記ステップS27、S28と同様に、マージ機能部15aは、ステップS30で入力されたパケットを受信処理して、次のステップS31で振り分け機能部15bに渡す。また、振り分け機能部15bは、マージ機能部15aから受け取ったパケットをステップS32で、物理NIC 12又は折り返し用リングバッファ13eに向けて送出する。
_<稼働していた仮想マシンを削除した時の動作シーケンス>
図6に示した仮想マシン間通信システムにおいて、稼働していた仮想マシンを削除したときのシステムの動作例を図8に示す。つまり、図6に示したMACアドレス生成機能部16a、テーブル更新機能部16b、MACアドレス通知機能部16c、マージ機能部14a、振り分け機能部14b、マージ機能部15a、および振り分け機能部15bの各々の動作および相互間の制御のための通信の概要が図8に示されている。図8に示した動作について以下に説明する。
例えば、図6に示すように2つの仮想マシン11−1、および11−2が物理マシン10上に存在し稼働している状況を初期状態として想定する。この初期状態から例えばユーザの要求に従い、不要になった仮想マシン11−2を削除して仮想マシン11−2がそれまで使用していた物理マシン10の計算機資源を開放することができる。このような仮想マシンの削除に伴って行われる動作が図8に示されている。
例えば上記の様に仮想マシン11−2を物理マシン10上から削除した場合には、図8のステップS41でテーブル更新機能部16bがテーブル20の内容を更新する。すなわち、テーブル更新機能部16bは、仮想マシン11−2に割り当てたMACアドレス、およびリングバッファの情報をテーブル20上から削除する。
また、テーブル更新機能部16bは、削除した仮想マシン11−2のリングバッファの情報を、次のステップS42でマージ機能部15aに通知する。マージ機能部15aは、リングバッファ情報の削除通知を受け取ると、ステップS43で該当する情報を内部テーブル上から削除する。つまり、削除された仮想マシン11−2が使用していたリングバッファから到来するパケットをマージ機能部15aの受信対象から除外する。この処理が終了すると、マージ機能部15aは次のステップS44で完了通知をテーブル更新機能部16bに送る。
テーブル更新機能部16bは、マージ機能部15aからの完了通知を受け取った後、ステップS45で、それまで仮想マシン11−2に割り当てていた共有メモリ13上の特定のリングバッファを開放する。すなわち、図6に示したバッファ制御信号27の経路を利用して、該当するリングバッファを開放するようにテーブル更新機能部16bが制御する。
図8に示した各ステップS46〜S53については、それぞれ図7の各ステップS19〜S26と同様である。また、図8のステップS54、S57では、図7のステップS27、S30と同様にパケットの受信処理が行われる。しかし、ステップS43で内部テーブル上から削除されたリングバッファから入力されるパケットは受信処理の対象外になる。図8のステップS55、S56、S58、S59については、それぞれ図7のステップS28、S29、S31、S32と同様である。
<使用するテーブル20の構成例>
各仮想マシンを管理するために使用するテーブル20の構成例を図9(a)および図9(b)のそれぞれに示す。
図9(a)に示した構成においては、例えば図6に示したように、2つの仮想マシン11−1、および11−2が物理マシン10に存在し、仮想マシン11−1、および11−2の各々をテーブル20で管理している場合を想定している。
図9(a)に示した構成においては、テーブル20上に、MACアドレスの情報と、リングポートの情報とが互いに対応付けた状態で存在している。図9(a)に示したMACアドレスの情報「f5:e4:d3:c2:b1:a0」は、MACアドレス生成機能部16aが例えば仮想マシン11−1に割り当てたMACアドレスの値である。また、図9(a)に示したリングポートの情報「ring1」は、仮想マシン11−1が使用する共有メモリ13上の1つの領域、例えばリングバッファ13aに相当する。
また、図9(a)に示したMACアドレスの情報「0a:1b:2c:3d:4e:5f」は、MACアドレス生成機能部16aが例えば仮想マシン11−2に割り当てたMACアドレスの値である。また、図9(a)に示したリングポートの情報「ring3」は、仮想マシン11−2が使用する共有メモリ13上の1つの領域、例えばリングバッファ13bに相当する。
図9(a)のような構成のテーブル20を利用することにより、仮想マシン間通信システム上において、実際に稼働している各仮想マシン11−1、11−2を特定することができ、稼働している各仮想マシン11−1、11−2が使用している共有メモリ13上の領域も特定できる。
また、各仮想マシン11−1、11−2が送信するパケットや、各仮想マシン11−1、11−2宛てのパケットに、送信元や送信先を表す前記MACアドレスの情報を含めている。これにより、テーブル20の内容を参照しながら各パケットを正しく振り分けることが可能になる。つまり、第1転送プロセス14の振り分け機能部14bにおけるパケットの振り分け、および第2転送プロセス15の振り分け機能部15bにおけるパケット振り分けが可能になる。
図9(b)に示した構成においては、MACアドレス、リングポート、の他にVLAN ID(Virtual LAN IDentifier)も登録して管理する場合を想定している。すなわち、物理的な1つのローカルエリアネットワーク(LAN)を複数の仮想的なLANに分割してシステム全体を構成するような場合には、各仮想マシンが所属しているVLANを表す情報も図9(b)の構成のテーブル20で管理することができる。
<パケットの流れおよび仮想マシン追加に伴う制御>
_<パケットの流れる経路の説明>
図6と同様の構成の仮想マシン間通信システムに新たな仮想マシンを追加したときのパケットの流れおよびバッファ領域確保の制御経路を図10に示し、テーブルの通知およびマージ元追加の制御経路および仮想マシン追加後のパケットの流れを図11に示す。図10および図11においては、パケットの流れを表す経路が点線で示されている。
図10に示した状況は、物理マシン10上に仮想マシン11−1のみが存在する状態で、ユーザの命令24により仮想マシン11−2が追加された直後の状態を表している。したがって、図10の構成では、仮想マシン11−1がパケットの転送に使用する経路が形成されているが、仮想マシン11−2がパケットの転送に使用する経路はまだ存在しない。
図10に示す状態では、パケットの流れる経路として、上り転送経路21a、21b、21c、21d、下り転送経路22a、22b、22c、22d、折り返し経路23a、および23bが形成されている。
つまり、トラフィック17として外部装置から物理NIC 12に入力され仮想マシン11−1に向かう上り方向のパケットは、上り転送経路21a、21b、21c、および21dを順番に経由して仮想マシン11−1に到達する。また、仮想マシン11−1が外部装置に宛てて送信する下り方向のパケットは、下り転送経路22a、22b、22c、および22dを順番に経由して物理NIC 12に到達し、トラフィック17として、物理NIC 12から外部装置に向けて送出される。
また、図10に示す状態で、振り分け機能部15bから折り返し用リングバッファ13eに向かう折り返し経路23aと、折り返し用リングバッファ13eからマージ機能部14aに向かう折り返し経路23bとが形成されている。したがって、下り方向のパケットを振り分け機能部15bの出力から折り返し用リングバッファ13eを経由してマージ機能部14aの入力に与え、上りの経路で更に転送することが可能である。但し、図10に示す状態ではまだ仮想マシン11−2が使用可能な状況ではないので、折り返し経路23a、23bおよび折り返し用リングバッファ13eが使用されることはない。
図11に示す状態では、図10の状態に対して、上り転送経路25a、25b、下り転送経路26a、および26bが更に追加されている。したがって、図11に示す状態では、上り側の振り分け機能部14bが送出するパケットを、上り転送経路25a、リングバッファ13b、および上り転送経路25bを経由して仮想マシン11−2に送信することができる。
また、仮想マシン11−2が送出するパケットを、下り転送経路26a、リングバッファ13d、および下り転送経路26bを経由してマージ機能部15aに入力することができる。更に、また、折り返し経路23a、折り返し用リングバッファ13e、および折り返し経路23bを利用することにより、下り方向のパケットの経路を折り返して上り方向に転送できるので、トラフィック17として外部装置から入力されるパケットと同じように、仮想マシン11−2が送出するパケットも仮想マシン11−1に送信することができる。
_<仮想マシン追加に伴う制御>
図10に示すように、仮想マシン11−2を追加するための命令24がユーザによって制御部16に入力されると、例えば制御部16の制御により、物理マシン10上に仮想マシン11−2が生成される。これにより、仮想マシン11−2が動作可能な状態になる。
この時、MACアドレス生成機能部16aが、仮想マシン11−2に割り当てるべきMACアドレス、例えば「0a:1b:2c:3d:4e:5f」をランダムな値として生成する。また、MACアドレス生成機能部16a又はテーブル更新機能部16bが、バッファ制御信号27を用いて共有メモリ13を制御する。MACアドレス生成機能部16a又はテーブル更新機能部16bは、共有メモリ13上で空いている領域の中から仮想マシン11−2が受信用に使用するリングバッファ13b、および送信用に使用するリングバッファ13dを確保する。
また、テーブル更新機能部16bは、MACアドレス生成機能部16aの生成したMACアドレス「0a:1b:2c:3d:4e:5f」、および確保したリングバッファ13b、13dを表す情報を、互いに対応付けた状態でテーブル20に登録する。また、MACアドレス通知機能部16cは、MACアドレス生成機能部16aが生成したMACアドレス「0a:1b:2c:3d:4e:5f」と、受信用のリングバッファ13b、および送信用のリングバッファ13dを表す情報とを、図2に示した通知信号18−2の経路で仮想マシン11−2に通知する。
この通知により、これ以降は、仮想マシン11−2がそれ自身を表すMACアドレスとして「0a:1b:2c:3d:4e:5f」の値を使うことになる。また、仮想マシン11−2は確保されたリングバッファ13b、および13dをそれぞれパケットの受信、および送信の際に使用する。
また、テーブル更新機能部16bは、テーブル20の内容を通知信号19−1の経路を用いて通知する。これにより、振り分け機能部14bは、上り方向に流れる各パケットについて、仮想マシン11−1宛てのパケットと、仮想マシン11−2宛てのパケットとを適切に振り分け可能となる。このテーブル更新機能部16bによる通知については、例えば図7に示したステップS21、S25のように、振り分け機能部14bの制御によるテーブル参照に置き換えてもよい。
また、下り方向に流れる各パケットについて、マージ機能部15aが受信対象として扱うパケットを適切に決定できるように、テーブル更新機能部16bが、通知信号19−2の経路を用いて、必要な情報を通知する。すなわち、追加された仮想マシン11−2からのパケットを中継するリングバッファ13dを表す情報を、処理対象として追加するように、MACアドレス生成機能部16aが通知する。
<仮想マシン間通信システムの利点>
以上説明したように、図6に示した構成の仮想マシン間通信システムは、高速に複数の仮想マシン11−1、11−2の間、および各仮想マシン11−1、11−2と物理NIC 12との間で通信できる。これにより物理マシン10内で物理NIC 12のハードウェアなどの機能を追加しなくてもよい。更に物理NIC 12に依存する特別なドライバを各仮想マシン11−1、11−2が使用しなくてもよく、メモリコピーの処理をしなくてもよい。
すなわち、制御部16が各仮想マシン11−1、11−2に対してMACアドレスのような固有情報を割り当てると共に、共有メモリ13上の使用する領域を確保し、これらの関係を表す情報をテーブル20などを用いて管理している。これにより、振り分け機能部14bは複数経路のパケットを適切に振り分けることが可能になる。
また、共有メモリ13上に折り返し用リングバッファ13eが設けてあり、下りの振り分け機能部15bの出力から折り返し用リングバッファ13eを経由して折り返し、上り側のマージ機能部14aに入力できる。これにより、複数の仮想マシン11−1、11−2の間でパケットを転送するための経路を確保できる。しかも、仮想マシン11−1、11−2の追加などに伴って物理NIC 12などに機能を追加する必要がないので、仮想化技術のメリットを損なうことがない。