(57)【要約】【課題】物理計算機上に形成される仮想計算機間の仮想ネットワークシステムにおいて、送信先の受信バッファが溢れることを防止する。【解決手段】仮想計算機間に形成される仮想ネットワーク・インタフェースを用いてデータ転送を行う場合、受信側の仮想ネットワーク・インタフェースが持つ受信バッファの容量を監視し、その容量が十分に無い場合にはその仮想ネットワーク・インタフェースへのデータ送信を停止し、停止した送信側仮想ネットワーク・インタフェースの識別子をキューバッファに格納しておく。受信バッファの容量がデータ受信に十分な状態になった時に、キューバッファに格納していた識別子を参照して、その識別子に対応する送信側の仮想ネットワーク・インタフェースからデータ転送処理を順次開始する。【選択図】図１
2009296133.tif 000002
【特許請求の範囲】
【請求項１】
物理計算機上に形成された複数の仮想計算機を、仮想ネットワーク・インタフェースを介して接続し、該仮想計算機間でデータ転送する仮想ネットワーク制御システムであって、
データの送信元となる仮想計算機に接続される第１の仮想ネットワーク・インタフェースと、データの送信先となる仮想計算機に接続される第２の仮想ネットワーク・インタフェースとを接続してデータ転送を制御する手段と、
該第２の仮想ネットワーク・インタフェースに対応する受信バッファの残容量を監視する手段と、
該監視手段の監視によって、該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースへのデータ転送を停止する手段と、
該第２の仮想ネットワークへのデータ転送が停止した場合、データ送信元となった該第１の仮想ネットワーク・インタフェースを識別する識別子を記憶する記憶手段と、を有し、
該監視手段による監視に従って、該受信バッファの残容量が十分ある場合、該記憶手段に格納された該識別子に対応する送信元の該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースに対してデータ転送を行うことを特徴とする仮想ネットワーク制御システム。
【請求項２】
前記記憶手段は、該仮想ネットワーク制御システム内に存在する仮想ネットワーク・インタフェースの数に応じたキューを前記識別子として記憶することが可能である、請求項１の仮想ネットワーク制御システム。
【請求項３】
前記転送手段、前記監視手段、前記停止手段、及び前記記憶手段は、複数の該仮想計算機を制御する仮想計算機モニタ上に形成される、請求項１又は２の仮想ネットワーク制御システム。
【請求項４】
物理計算機上に形成された複数の仮想計算機を、仮想ネットワーク・インタフェースを介して接続し、該仮想計算機間でデータ転送する仮想ネットワーク制御方法であって、
データの送信元となる仮想計算機に接続される第１の仮想ネットワーク・インタフェースと、データの送信先となる仮想計算機に接続される第２の仮想ネットワーク・インタフェースとを接続してデータ転送するステップと、
該第２の仮想ネットワーク・インタフェースに対応する受信バッファの残容量を監視するステップと、
該監視によって、該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースへのデータ転送を停止するステップと、
該第２の仮想ネットワークへのデータ転送を停止した場合、データ送信元となった該第１の仮想ネットワーク・インタフェースを識別する識別子を記憶手段に記憶するステップと、
該監視によって、該受信バッファの残容量が十分ある場合、該記憶手段に格納された該識別子に対応する送信元の該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースに対してデータ転送するステップと、を有することを特徴とする仮想ネットワーク制御方法。
【請求項５】
該受信バッファの残容量の監視に従い、該受信バッファに十分な残容量がある場合に、該記憶手段から該識別子を読み出し、
該識別子で示される該第１の仮想ネットワーク・インタフェースからの送信データの転送を再開することを特徴とする請求項４の仮想ネットワーク制御方法。
【請求項６】
該識別子に対応する該第１の仮想ネットワーク・インタフェースからの送信データの転送が完了した場合、該記憶手段に格納されている識別子が有るか否かを確認し、
該記憶手段に識別子が残っている場合、該残っている全ての該識別子に対応する該第１の仮想ネットワーク・インタフェースからの送信データの転送が完了するまで上記各ステップを繰り返すことを特徴とする請求項４の仮想ネットワーク制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想ネットワーク制御システム及び方法に係り、特に、物理計算機上に形成された複数の仮想計算機間を接続する仮想ネットワーク・インタフェースを用いてデータ転送する仮想ネットワーク制御システム及びその制御方法に関する。
【背景技術】
【０００２】
ネットワーク装置間のデータ通信において通信量が多くなり受信側の処理が追いつかなくなると、受信バッファ内のデータが溢れてデータの損失（パケットロスト）が発生することがある。このパケットロストに伴うデータの抜けや通信性能の劣化を防ぐために、一般に、バッファが溢れないような制御（フロー制御）が行われる。
【０００３】
例えば、ネットワーク装置Ａからネットワーク装置Ｂへデータを送信する場合、通信データは一旦ネットワーク装置Ｂ内の受信バッファに蓄えられる。ネットワーク装置Ｂ内では、受信バッファに蓄えられたデータを順次処理し、次の受信ができるようにバッファを空けたり、新たな受信バッファを用意したりする。これにより、ネットワーク装置Ａからネットワーク装置Ｂへ連続的にデータ通信することが可能となる。しかし、データ送信のスピードに対してネットワーク装置Ｂ内での受信データの処理が間に合わなくなると、ネットワーク装置Ｂの受信バッファが溢れて、パケットロストが発生する。
【０００４】
ＴＣＰなどのプロトコルには、パケットロストを検出した際にデータの再送をすることによって損失をリカバリする機能がある。しかし、パケットロストが多発すると、再送分に相当する通信データ量が増加して通信速度が落ちたり、通信するためのリソースが余計に必要になる。このバッファが溢れるのを防止する仕組みがフロー制御である。
【０００５】
イーサネット（登録商標）では、ＩＥＥＥ  Ｓｔｄ  ８０２．３においてＰＡＵＳＥパケットを利用したフロー制御が規定されている。ネットワーク装置Ｂの受信バッファが溢れた、あるいは溢れることが予想される場合に、ネットワーク装置Ｂから特殊なマルチキャストパケット（ＰＡＵＳＥパケット）を送信する。ＰＡＵＳＥパケットには停止時間が指定されており、ネットワーク装置ＡでＰＡＵＳＥパケットを受信した場合は、指定された時間だけネットワーク装置Ｂへのデータ送信を停止する。指定時間が経過した後又は送信開始のＰＡＵＳＥパケットを受け取った時にデータ送信を再開する。これにより、受信バッファが溢れることを抑制することができる。
【０００６】
一般に、計算機に取り付けられているネットワーク・インタフェース・カード（ＮＩＣ）はＯＳ（Operating System）上で動作するドライバソフトウェアで制御される。このとき、ＮＩＣやＮＩＣドライバにフロー制御機構が備わっていない場合がある。また、状況によってはフロー制御機構が正常に働かないことがある。また、ＰＵＡＳＥパケット自体もネットワークを利用した通信のため、ネットワークリソースを消費してしまうことになる。
ここで、１つの物理計算機上で実現される仮想計算機間のネットワーク通信はメモリデータのコピーで実現することが可能であるため、一般の有線や無線を利用する方法と比較して高速な通信が可能である。このため、フロー制御が正常に機能しないこともある。
【０００７】
フロー制御に関して例えば、特許文献１には、プリンタやコピー機などＣＰＵ処理能力の低い画像処理装置が行う通信において、受信したが未処理のパケットがあらかじめ設定された上限値を超えた場合に、ＣＰＵに代わってハードウェアによりフロー制御を行うネットワーク制御装置が開示されている。しかし、フロー制御の方法についてはＩＥＥＥ  Ｓｔｄ  ８０２．３に記載のＰＡＵＳＥパケットによるものであり、従来のものと同様である。
【０００８】
また、特許文献２には、仮想計算機間のネットワークにおいてＤＨＣＰでＩＰを取得する際に無駄なブロードキャストパケットの生成を抑制する負荷低減装置が開示されている。この手法により通信量を減らしてネットワーク負荷を低減することができる。
【０００９】
【特許文献１】特開２００６−１４２１１号公報
【特許文献２】特開２００８−２８９１４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
然るに、上記特許文献に記載のいずれの場合も受信バッファの溢れを無くすことは困難である。
【００１１】
そこで、本発明の目的は、物理計算機上に形成される仮想計算機間の仮想ネットワークシステムにおいて、受信バッファが溢れることを防止することにある。
【課題を解決するための手段】
【００１２】
本発明による仮想ネットワーク制御システムは、好ましくは、物理計算機上に形成された複数の仮想計算機を、仮想ネットワーク・インタフェースを介して接続し、該仮想計算機間でデータ転送する仮想ネットワーク制御システムであって、
データの送信元となる仮想計算機に接続される第１の仮想ネットワーク・インタフェースと、データの送信先となる仮想計算機に接続される第２の仮想ネットワーク・インタフェースとを接続してデータ転送を制御する手段と、
該第２の仮想ネットワーク・インタフェースに対応する受信バッファの残容量を監視する手段と、
該監視手段の監視によって、該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースへのデータ転送を停止する手段と、
該第２の仮想ネットワークへのデータ転送が停止した場合、データ送信元となった該第１の仮想ネットワーク・インタフェースを識別する識別子を記憶する記憶手段と、を有し、該監視手段による監視に従って、該受信バッファの残容量が十分ある場合、該記憶手段に格納された該識別子に対応する送信元の該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースに対してデータ転送を行うことを特徴とする仮想ネットワーク制御システムとして構成される。
【００１３】
また、好ましい例では、前記記憶手段は、該仮想ネットワーク制御システム内に存在する仮想ネットワーク・インタフェースの数に応じたキューを前記識別子として記憶する。
また、好ましくは、前記転送手段、前記監視手段、前記停止手段、及び前記記憶手段は、複数の該仮想計算機を制御する仮想計算機モニタ上に形成される。
【００１４】
本発明による仮想ネットワーク制御方法は、好ましくは、物理計算機上に形成された複数の仮想計算機を、仮想ネットワーク・インタフェースを介して接続し、該仮想計算機間でデータ転送する仮想ネットワーク制御方法であって、
データの送信元となる仮想計算機に接続される第１の仮想ネットワーク・インタフェースと、データの送信先となる仮想計算機に接続される第２の仮想ネットワーク・インタフェースとを接続してデータ転送するステップと、
該第２の仮想ネットワーク・インタフェースに対応する受信バッファの残容量を監視するステップと、
該監視によって、該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースへのデータ転送を停止するステップと、
該第２の仮想ネットワークへのデータ転送を停止した場合、データ送信元となった該第１の仮想ネットワーク・インタフェースを識別する識別子を記憶手段に記憶するステップと、
該監視によって、該受信バッファの残容量が十分ある場合、該記憶手段に格納された該識別子に対応する送信元の該第１の仮想ネットワーク・インタフェースから該第２の仮想ネットワーク・インタフェースに対してデータ転送するステップと、を有することを特徴とする仮想ネットワーク制御方法として構成される。
【００１５】
好ましい例では、該受信バッファの残容量の監視に従い、該受信バッファに十分な残容量がある場合に、該記憶手段から該識別子を読み出し、
該識別子で示される該第１の仮想ネットワーク・インタフェースからの送信データの転送を再開する。
【発明の効果】
【００１６】
本発明によれば、仮想ネットワーク・インタフェース間のデータ通信におけるデータの損失を防止し、効率の良いデータ転送が可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を用いて本発明の実施例を説明する。
図１は、一実施例による仮想ネットワーク制御システムの構成例を示す。
仮想ネットワーク制御システムは、物理計算機１００上に形成された、複数の仮想計算機１１０，１２０間を、仮想ネットワーク制御部１０２を介して接続することで構築される。
仮想ネットワーク制御システムは、複数の仮想計算機１１０，１２０、及びこれらの仮想計算機を制御する仮想計算機モニタ１０１を有する一種の仮想計算機システムであり、各仮想計算機１１０，１２０はそれぞれが持つＯＳ（ゲストＯＳ）１１１，１２１を独立的に実行することができる。なお、仮想計算機モニタ１０１はハイパバイザと言うことがある。
【００１８】
各仮想計算機１１０，１２０は仮想ネットワーク・インタフェースを具備する仮想ネットワーク装置であり、仮想ネットワーク・インタフェース（仮想ＮＩ）として、１つまたは複数の仮想ネットワーク・インタフェース・カード（仮想ＮＩＣ）１３０，１４０，１５０を持つ。図示の例では、仮想計算機１２０は複数の仮想ＮＩＣ１４０，１５０及びそれに対応するドライバや受信バッファの機能を持っている。
各仮想計算機のＯＳ１１１，１２１は、対応する仮想ＮＩＣ１３０，１４０，１５０を制御するドライバ１３１，１４１，１５１と、受信データを一時格納する受信バッファ１３２，１４２，１５２を有する。
【００１９】
各仮想ＮＩＣ１３０，１４０，１５０は、仮想ネットワーク１０３を介して、この仮想ネットワーク１０３を制御する仮想ネットワーク制御部１０２に接続される。仮想ネットワーク制御部１０２は仮想ＮＩＣに対応した数の送信管理用のキューバッファ１３３、１４３、１５３を持つ。各キューバッファ１３３，１４３，１５３は、送信先の受信バッファの残容量不足のためにデータの受信ができなかった、送信元の仮想ＮＩＣを識別する識別子（仮想ＮＩＣ識別子）をキューバッファで記憶して管理する。送信先の受信バッファの残容量がデータ受信に十分な容量分準備できたとき、キューバッファに格納された仮想ＮＩＣ識別子を参照して、キューバッファから取り出した仮想ＮＩＣ識別子が示す送信元の順にデータ転送処理を行うことになる。
【００２０】
図５に、例えば仮想ＮＩＣ１４０に対応するキューバッファ１４３の例を示す。このキューバッファ１４３は、仮想ＮＩＣ１４０がデータの送信先となる場合に受信バッファ１４２にデータを受信できなかったときに、その送信元の仮想ＮＩＣ識別子、例えば仮想ＮＩＣ１３０に対応する識別子「００１」や仮想ＮＩＣｍに対応する識別子「００ｍ」を格納する。
【００２１】
データ転送は、異なる仮想計算機１１１と１２１間では、例えば仮想ＮＩＣ１３０、仮想インタフェース１０３、仮想ネットワーク制御部１０２、仮想ＮＩＣ１４０又は１５０を介して行われる。また、同じ仮想計算機１２０では、仮想ＮＩＣ１４０、仮想インタフェース１０３、仮想ネットワーク制御部１０２、仮想ＮＩＣ１５０を介して行われる。
なお、この例において、データ通信はイーサネット（登録商標）の規格に基いて行なわれるとする。転送データのサイズがＭＴＵ（Maximum Transmission Unit）より大きい場合は複数のイーサネット・フレームに分割されて転送される。
【００２２】
次に、図２〜４を参照して、仮想ネットワーク制御システムにおけるデータ通信制御の動作について説明する。なお、図３、図４は各部の処理シーケンスを示し、同じ符号の処理ステップはそれぞれ対応する処理ステップを示す。
この例では、データの送受信は、仮想ネットワーク制御部１０２の管理下にある仮想ＮＩＣ間で行われるものとする。例えば、送信側の仮想ネットワーク・インタフェースを仮想ＮＩＣ１３０、受信側の仮想ネットワーク・インタフェースを仮想ＮＩＣ１４０とする。図３は受信バッファの容量が十分に有る場合、図４は受信バッファの容量が一時的に不足している場合を示す。以下、各ステップの処理動作について説明する。
【００２３】
まず、ＯＳ１１１からの通信開始要求に従い、ドライバ１３１は仮想ＮＩＣ１３０を起動する。ＭＡＣアドレスを含むデータの送信先を示すアドレスは、仮想ＮＩＣ１３０を通って仮想ネットワーク制御部１０２に送られる。そして、仮想ネットワーク制御部１０２において、データの送信先を検索する（Ｓ２０１）。これは、ＭＡＣアドレスについて、仮想ネットワーク制御部１０２がその管理下にある仮想ＮＩＣの識別子を予め登録した管理テーブル（図示せず）を検索することで行われる。検索の結果、仮想ＮＩＣ１３０は、データの送信先が、当該仮想ネットワーク制御部１０２の管理内かを判断する（Ｓ２０２）。判断の結果、送信先の仮想ＮＩＣが仮想ネットワーク制御部１０２の管理内で無い場合、この例では処理を終了する。なお、処理を終了しないで、その送信先へデータを送信するようにしてもよい。
【００２４】
上記判断の結果、仮想ネットワーク制御部１０２の管理内の場合、仮想ネットワーク制御部１０２は受信側仮想ＮＩＣ１４０が一時停止中か否かを調べる（Ｓ２０３）。これは、キューバッファ１４３に識別子が格納されているか否かにより判断することができる。
この判断の結果、一時停止中である場合、データ転送を開始することができないため、Ｓ２０６へ進み、一時休止中でない場合はＳ２０４へ進む。
【００２５】
一時休止中でない場合、仮想ネットワーク制御部１０２は仮想ＮＩＣ１４０に対応する受信バッファ１４２の状態を調べて（Ｓ２０４）、そのバッファの容量が十分あるか否かを判断する（Ｓ２０５）。
この判断は、受信バッファ１４２の全容量ａ、使用量ｂと、転送するイーサネット・フレームのサイズｃを比較することで行う。データの通信スピードに対してＯＳ１２１の処理が遅い場合には、受信バッファ１４２の残容量（ａ−ｂ）が少なくなっていることがある。ａ−ｂ＜ｃの場合、データ転送ができないため、Ｓ２０６へ進む。一方、ａ−ｂ≧ｃの場合、データ転送処理Ｓ２０９へ進む。
【００２６】
Ｓ２０３で一時休止中と判断した場合、受信側仮想ＮＩＣ１４０への送信順序を管理しているキューバッファ１４３に、送信側仮想ＮＩＣ１３０の識別子を格納（エンキュー）して（Ｓ２０６）、データ転送を一時停止する（Ｓ２０７）。ここで、一時停止させた送信元の仮想ＮＩＣをキューで管理することにより、データ転送を一時停止させた場合でも、その後該キューバッファを参照して当該仮想ＮＩＣからデータ転送を再開すれば良く、優先順位を乱すことなくデータ転送を行うことができる。
【００２７】
データ転送を一時停止させている間（Ｓ２０７）、仮想ネットワーク制御部１０２は受信側バッファ１４２の残容量（ａ−ｂ）を監視している。そして、ａ−ｂ≧ｃを満たす状態になればデータ転送が再開可能である。ただし、一時停止と再開を繰り返すと効率が悪くなる可能性があるため、例えば受信側バッファ１４２の残容量が全容量の８０パーセント以上空いた場合（ａ−ｂ≧０．８ａ）に、データ転送を再開する。
【００２８】
データ転送を再開する場合、キューバッファ１４３に格納された送信側仮想ＮＩＣの識別子を取得する。そして、当該識別子で示される仮想ＮＩＣ１３０を送信側仮想ＮＩＣとして、受信側仮想ＮＩＣ１４０に対してデータ転送する。
データ転送処理（Ｓ２０９）において、転送されて来たイーサネット・フレーム１つが仮想計算機１２０内の受信バッファ１４２に格納される。その１フレームの格納が完了すると、受信通知が受信側仮想ＮＩＣ１４０からＯＳ１２１に対して発行される。
【００２９】
転送データが複数のイーサネット・フレームから成る場合、上記の動作を繰り返す。そしてその度に、送信側仮想ＮＩＣ１３０から要求された全てのデータを転送したか否かをチェックする（Ｓ２１０）。転送が完了していない場合、残りのフレームを転送するためＳ２０４に戻る。一方、全てのフレームの転送が終わってデータ転送が完了した場合、送信側仮想ＮＩＣ１３０に対して送信完了通知を発行する（Ｓ２１１）。
【００３０】
その後、キューバッファ１４３が空か否かを調べる（Ｓ２１２）。転送一時停止中に他の仮想ＮＩＣ（例えば仮想ＮＩＣ「００ｍ」）からのデータ転送要求がある場合、キューバッファ１４３には当該識別子「００ｍ」が格納されている。そこで、仮想ＮＩＣ識別子「００ｍ」を読み出して（Ｓ２１３）、その仮想ＮＩＣ「００ｍ」に対応する送信元の仮想ＮＩＣからデータ転送処理を行う。以後、Ｓ２０４に戻って上記の動作を繰り返す。一方、キューバッファ１４３が空であれば、データ転送を終了する。
【００３１】
以上の処理により、送信先の受信バッファのデータ溢れを引き起こすことなくデータ転送処理を行うことができる。
なお、キューバッファ１４３には仮想ＮＩＣからの送信要求毎に、その識別子を順次格納することが可能であるが、仮想計算機モニタ１０１上の仮想ＮＩＣの総数は仮想計算機モニタで認識することができるため、仮想ＮＩＣ毎に管理するようにすればキューの最大要素数を仮想ＮＩＣの数と決定することができる。これにより、連続したデータ転送要求が来てもキューバッファが溢れることがなく、データの損失を防止することができる。
【００３２】
なお、上記実施例では、１回のデータ転送でイーサネット・フレーム１つを処理することとしたが、複数のイーサネット・フレームを同時に処理しても良い。また、仮想ネットワーク制御部１０２内にキューバッファを有することをしたが、これに限定されない。例えば、仮想ＮＩＣ内やドライバ内などのように他の場所に持たせることも可能である。また、仮想ＮＩＣ毎に１つのキューバッファを有するように構成したが、ＴＣＰ／ＩＰネットワークにおいてはソケットバッファの溢れを防ぐためにソケット毎に構成することも可能である。
【図面の簡単な説明】
【００３３】
【図１】一実施例による仮想ネットワーク制御システムの構成例を示す図。
【図２】仮想ネットワーク制御システムにおけるデータ通信制御の動作フローチャート。
【図３】処理シーケンスの一例（受信バッファの容量が十分有る場合）を示す図。
【図４】処理シーケンスの一例（受信バッファの容量が不足している場合）を示す図。
【図５】キューバッファの一例を示す図。
【符号の説明】
【００３４】
１００：物理計算機  １０１：仮想計算機モニタ  １０２：仮想ネットワーク制御部  
１０３：仮想ネットワーク  １１０，１２０：仮想計算機  
１３０、１４０、１５０：仮想ＮＩＣ  
１３１、１４１、１５１：ドライバ  
１３２、１４２、１５２：受信バッファ  
１３３、１４３、１５３：キューバッファ。
【図１】
2009296133.tif 000003
【図２】
2009296133.tif 000004
【図３】
2009296133.tif 000005
【図４】
2009296133.tif 000006
【図５】
2009296133.tif 000007