(57)【要約】【課題】ホストカーネルによる処理負担を軽減する。【解決手段】仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、１対１通信の設定を検出したとき、第１仮想マシンの送信バッファと第２仮想マシンの受信バッファを同じバッファ領域に、第１仮想マシンの受信バッファと第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること、を有する処理をコンピュータに実行させる通信制御プログラム。【選択図】図７
2017108231.tif 000002
【特許請求の範囲】
【請求項１】
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、
前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること
を有する処理をコンピュータに実行させる通信制御プログラム。
【請求項２】
前記処理は、更に、
前記同じバッファ領域に設定した場合、前記第１仮想マシンの第１仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第２仮想マシンの第２仮想ネットワークインターフェースを、前記第２仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第１仮想ネットワークインターフェースを、それぞれ設定すること、
を有する請求項１に記載の通信制御プログラム。
【請求項３】
前記物理マシンは、前記第１仮想マシンからの送信通知を第１バックエンドドライバに通知し、第２バックエンドドライバからの受信通知を前記第２仮想マシンに通知し、前記第２仮想マシンからの送信通知を第２バックエンドドライバに通知し、第１バックエンドドライバからの受信通知を前記第１仮想マシンに通知するイベント通知・割込発生機能を有し、
前記イベント通知・割込発生機能は、前記第１仮想ネットワークインターフェースまたは前記第２仮想ネットワークインターフェースの構成情報に設定された前記直接接続先に基づいて、前記第１仮想マシンまたは前記第２仮想マシンの一方からの送信通知を他方に受信通知として通知する、請求項２に記載の通信制御プログラム。
【請求項４】
前記１対１通信の設定は、前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェース間での１対１通信の設定を有し、
前記同じバッファ領域に設定される前記送信バッファと前記受信バッファは、それぞれ前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェースの送信バッファと受信バッファを有する、請求項２に記載の通信制御プログラム。
【請求項５】
前記仮想スイッチの構成情報は、仮想ブリッジインスタンスと前記仮想ブリッジインスタンスにバインドされたポート情報を有し、
前記１対１通信の設定は、前記仮想ブリッジインスタンスのポート情報が２つのポートのみを有し、前記２つのポートが前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェースにそれぞれ接続する設定を有する、請求項２に記載の通信制御プログラム。
【請求項６】
前記仮想スイッチの構成情報は、入力ポートと出力ポートとを含む通信データのフロー情報を有し、
前記１対１通信の設定は、前記フロー情報に１回しか含まれない２つのポートが前記入力ポートと前記出力ポートの対をなし、前記入力ポートと前記出力ポートがそれぞれ前記第１仮想ネットワークインターフェース及び前記第２仮想ネットワークインターフェースに接続する設定を有する、請求項２に記載の通信制御プログラム。
【請求項７】
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、
前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること
を有する通信制御方法。
【請求項８】
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出する直接パス設定検出部と、
前記直接パス設定検出部が前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定する直接パス設定部と
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，通信制御プログラム、通信制御方法及び情報処理装置に関する。
【背景技術】
【０００２】
情報処理装置であるコンピュータまたはサーバなどの物理マシンに、複数の仮想マシンを起動、生成、削除することで、様々なサービスシステムを構築することが行われる。それに伴い、物理マシンのOS(Operating System)のカーネル（ホストカーネル）内のソフトウエアによる仮想スイッチ機能を利用して、複数の仮想マシン間及び複数の仮想マシンと外部ネットワークとの間で所望のネットワークが構築される。
【０００３】
仮想化ソフトウエアにより複数の仮想マシンを動的に生成、削除することに対応するために、カーネルの仮想スイッチ機能により仮想マシンのネットワークを動的に生成、変更することが必要になる。
【０００４】
一方、近年のネットワーク業界において、上記のようにネットワーク機能をソフトウエア化（仮想ネットワーク機能、VNF: Virtual Network Function）し、汎用サーバ上の仮想マシンで実現するネットワーク機能の仮想化（NFV: Network Function Virtualization)の開発が進められている。NFVによるサービス提供形態としては、例えば各仮想マシンに異なる仮想ネットワーク機能を配備する形態がある。これを利用することで、外部ネットワークから受信したデータをサービスの内容に応じた適切な順序で複数の仮想マシンに転送することができ、柔軟なサービスを実現することが可能になる。
【０００５】
ネットワークや仮想スイッチについては、以下の特許文献１、２に記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１３８３９７号公報
【特許文献２】特開２０１５−７６６４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、提供するサービスの追加や仮想マシンの移動などにより仮想マシンの数が増加するに伴い、仮想マシン間の通信量が増大する傾向にある。仮想マシン間の通信量が増大すると、カーネル内の仮想スイッチ機能の負担が増大し、カーネルが過負荷状態になる可能性が高くなる。カーネルは、仮想マシン間の仮想スイッチ機能だけでなく、仮想スイッチ以外のプロセスの通信機能も有するので、仮想スイッチ機能の負担増大は、他の通信性能に影響を及ぼし、通信レスポンスの遅延やパケットロスが発生することがある。
【０００８】
そこで，開示の第１の側面の目的は，仮想スイッチ機能の負担を軽減する通信制御プログラム、通信制御方法及び情報処理装置を提供することにある。
【課題を解決するための手段】
【０００９】
開示の第１の側面は，仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること、を有する処理をコンピュータに実行させる通信制御プログラムである。
【発明の効果】
【００１０】
第１の側面によれば，仮想スイッチ機能の負担を軽減できる。
【図面の簡単な説明】
【００１１】
【図１】仮想ネットワーク機能により形成された仮想マシンのネットワーク機能の一例を示す図である。
【図２】仮想マシンと仮想スイッチによる仮想ネットワークの第１の例を示す図である。
【図３】仮想マシンと仮想スイッチによる仮想ネットワークの第２の例を示す図である。
【図４】仮想マシンと仮想スイッチによる仮想ネットワークの第３の例を示す図である。
【図５】仮想マシンと仮想スイッチによる仮想ネットワークの第４の例を示す図である。
【図６】本実施の形態における情報処理装置である物理マシン（サーバ）の構成を示す図である。
【図７】本実施の形態における物理マシンの仮想マシンとホストカーネルHKの構成を示す図である。
【図８】図７において直接パスが設定されていない場合の２つの仮想マシンとホストカーネルの構成を示す図である。
【図９】本実施の形態に対応し直接パスが設定された例を示す。
【図１０】本実施の形態におけるホストカーネルのVM間直接パス管理プログラムによる処理を示すフローチャート図である。
【図１１】送受信キューのアドレス変換テーブルの一例を示す図である。
【図１２】仮想NIC情報テーブルの一例を示す図である。
【図１３】仮想ブリッジの仮想ネットワーク構成情報の一例を示す図である。
【図１４】本実施の形態におけるハイパーバイザのイベント通知・割込発生機能のフローチャート図である。
【図１５】仮想スイッチの仮想ネットワーク構成情報の一例を示す図である。
【発明を実施するための形態】
【００１２】
図１は、仮想ネットワーク機能により形成された仮想マシンのネットワーク機能の一例を示す図である。図１には、複数のユーザ端末１１，１２が、キャリア網１７を介してウエブサーバ１６にアクセスする構成例が示されている。そして、キャリア網１７内に物理マシンであるサーバ１３，１４，１５が配置され、サーバ１３に複数の仮想マシンＶＭ＃０〜ＶＭ＃３が配備されている。共通のサーバ１３に配備された４つの仮想マシンそれぞれに、サーバ１３のＯＳのカーネルにある仮想スイッチ機能により所望のネットワークが構築される。その結果、図１に示されるように、仮想マシンＶＭ＃０から仮想マシンＶＭ＃１，ＶＭ＃３宛のパケットの送信と、仮想マシンＶＭ＃１から仮想マシンＶＭ＃２宛てのパケットの送信と、仮想マシンＶＭ＃２から異なる物理マシン１４へのパケットの送信と、仮想マシンＶＭ＃３から異なる物理マシン１５へのパケットの送信が可能になる。
【００１３】
例えば、仮想マシンＶＭ＃０にロードバランサＬＢのプログラムを実行させ、仮想マシンＶＭ＃１，３にファイアウオールＦＷのプログラムを実行させ、仮想マシンＶＭ＃２に命令検出システムを構築する場合、次の動作が可能になる。すなわち、各ユーザ端末からウエブサーバ１６宛てのアクセス要求を、仮想マシンＶＭ＃０が仮想マシンＶＭ＃１，３に均等に振り分け、仮想マシンＶＭ＃１，３でファイアウオールの処理を行い、仮想マシンＶＭ＃２でコンピュータやネットワークに対する不正行為をデータの内容及びデータのやりとり手順から検出し、それぞれサーバ１４，１５を経由してウエブサーバ１６に届ける。
【００１４】
図１において、同じサーバ１３に生成された仮想マシンＶＭ＃１とＶＭ＃２との間には、１対１通信のネットワークが構築されている。この１対１通信のネットワークは、サーバ１３のカーネルがもつ仮想ネットワーク機能により構築される仮想スイッチで構成される。
【００１５】
図２は、仮想マシンと仮想スイッチによる仮想ネットワークの第１の例を示す図である。図２では、図示しない物理マシンに２つの仮想マシンVM#1とVM#2とが生成されている。具体的には、ハイパーバイザHVが仮想マシンの構成情報に基づいて仮想マシンVM#1,VM#2を起動、生成する。
【００１６】
各仮想マシンVM#1、VM#2は、仮想マシンに構成された仮想的なネットワークインターフェース（vNIC：Virtual Network Interface Card、以下単に仮想NICと称する。）vNIC#1,vNIC#2と、それを駆動する仮想デバイスドライバ(virtual IO)virtio#1, virtio#2と、仮想デバイスドライバの仮想送受信キューvQUE#1, vQUE#2を有する。仮想デバイスドライバは、仮想NICを経由するデータの送受信を制御する。
【００１７】
また、物理マシンであるホストマシンのOSのホストカーネルHKは、仮想スイッチ機能により仮想スイッチvSWを構成する。仮想スイッチは、物理マシンのホストカーネル内のソフトウエアにより構築される仮想的なスイッチであり、例えば、L2スイッチである仮想ブリッジや、L3スイッチである仮想スイッチなどである。仮想ブリッジは、ブリッジインスタンスに設けられるポートの情報を保持する。
【００１８】
図２の例では、仮想スイッチvSWは仮想マシンVM#1,VM#2の仮想NIC間を接続するブリッジを構成する仮想ブリッジインスタンスbr0である。この仮想スイッチvSWは、仮想ネットワーク構成情報vNW_cfgに基づいて構築され、図２中の仮想ネットワーク構成情報vNW_cfgは、１つの仮想ブリッジインスタンスbr0のポート間の接続情報を有する。仮想ブリッジインスタンスbr0は、このポート間の接続情報に基づくホストカーネルHKによる制御によって、通信データの中継、転送を行う。
【００１９】
さらに、ホストカーネルHKは、仮想NICと仮想スイッチvSW間の通信データの受け渡しを行うバックエンドドライバvhost#1，vhost#2と、仮想マシンの仮想的な送受信キューである仮想キューvQUE#1，vQUE#2と物理マシンの実体的な送受信キューである物理キューpQUE#1, pQUE#2との間のアドレス変換テーブルA_TBL#1，A_TBL#2を有する。物理送受信キューは一種のFIFOによる待ち行列であり、実体はサーバのメモリ上に構成され、仮想マシンVM#1,VM#2は自身のアドレス空間にマッピングされた物理送受信キューを使用する。
【００２０】
また、ハイパーバイザHVは、仮想NICからのデータ通信のイベントを検出し、バックエンドドライバvhost#1, vhost#2に送信処理依頼を発行し、バックエンドドライバからデータ受信の通知を受けると対応する仮想NICに受信通知の割込を発行する。
【００２１】
仮想ネットワーク構成情報vNW_cfgによれば、仮想ブリッジインスタンスbr0は２つのポートvnet#1, vnet#2のみ有し、それらのポートは仮想マシンの仮想NICにそれぞれ接続される。（換言するとポート名vnet#1, vnet#2が仮想NICに接続されることを示している。）したがって、図２の例では、仮想マシンVM#1の仮想NIC（vNIC#1）と仮想マシンVM#2の仮想NIC(vNIC#2)とは、１対１通信を行う。つまり、仮想マシンVM#1の仮想NIC(vNIC#1)からの送信データは仮想マシンVM#2の仮想NIC(vNIC#2)により受信され、逆に、仮想マシンVM#2の仮想NIC(vNIC#2)からの送信データは仮想マシンVM#1の仮想NIC(vNIC#1)により受信される。仮想スイッチvSWは、仮想マシンVM#1の仮想NIC(vNIC#1)と仮想マシンVM#2の仮想NIC(vNIC#2)間を直接接続する仮想ネットワークを構築する。この例は、図１の仮想マシンVM#1とVM#2との間のネットワークに対応する。
【００２２】
図２による仮想マシンVM#1からVM#2へ仮想スイッチvSWを経由した通信処理の概略は次のとおりである。
【００２３】
S1：データ送信側の仮想マシンVM#1はデータを送出する仮想NIC（vNIC#1）の仮想デバイスドライバvirtio#1に対してデータの送信処理を依頼し、仮想デバイスドライバは送信データを仮想送受信キューvQUE#1に書き込む。
【００２４】
S2：ホストカーネルHKは、アドレス変換テーブルA_TBL#1を参照して送信データの書き込み先を示す仮想マシンのアドレスを物理マシンのアドレスに変換し、送信データを物理マシン内の送受信キューpQUE#1に書き込む。
【００２５】
S3：送信側の仮想デバイスドライバvirtio#1が、上記の送信データの書き込みと共に、仮想NIC(vNIC#1)経由で送信通知を出力する。
【００２６】
S4：送信通知に応答して、ハイパーバイザHVは、送信イベントを、仮想NIC(vNIC#1)に対応するバックエンドドライバvhost#1に出力し、送信処理を依頼する。
【００２７】
S5：バックエンドドライバvhost#1は、物理マシンの送受信キューpQUE#1からデータを取得し、仮想スイッチvSWに出力する。
【００２８】
S6：仮想スイッチvSWは、仮想ネットワーク構成情報vNW_cfgから送信データの出力先のポートvnet#2を決定し、決定した出力先のポートvnet#2とつながるバックエンドドライバvhost#2に対してデータを渡す。この仮想スイッチvSW（仮想ブリッジbr0）の動作は、ホストカーネルHKの仮想スイッチソフトウエアにより実行される。
【００２９】
S7：バックエンドドライバvhost#2は、ポートvnet#2とつながる仮想NIC(VNIC#2)に対応する物理マシンの送受信キューpQUE#2にデータを書き込み、ハイパーバイザHVに対して受信通知を行う。
【００３０】
S8：ハイパーバイザHVは、バックエンドドライバvhost#2に対応する仮想NIC(vNIC#2)を有する仮想マシンVM#2に対してデータの受信通知の割込を発行する。
【００３１】
S8、S9：受信側の仮想NICの仮想デバイスドライバvirtio#2は、仮想送受信キューvQUE#2から受信データを読み出す要求を発行し、アドレス変換テーブルA_TBL#2にしたがってアドレス変換されて物理マシンの物理送受信キューpQUE#2からデータを取得する。
【００３２】
図２には、仮想NIC(vNIC#1)側のアドレス変換テーブルA_TBL#1と、仮想NIC(vNIC#2)側のアドレス変換テーブルA_TBL#2とが示されている。仮想NIC(vNIC#1)側のアドレス変換テーブルA_TBL#1には、仮想マシンVM#1の送信キューアドレスvTx#1、受信キューアドレスvRx#1に対する、物理マシンの送信キューアドレスpTx#1、受信キューアドレスpRx#1が記憶されている。仮想NIC(vNIC#2)側のアドレス変換テーブルA_TBL#2も同様である。
【００３３】
図３は、仮想マシンと仮想スイッチによる仮想ネットワークの第２の例を示す図である。図３は、図２と異なり、仮想スイッチvSWが、仮想マシンVM#1の仮想NIC(vNIC#1)と物理NIC(pNIC#1)とを接続する仮想ブリッジbr1と、仮想マシンVM#2の仮想NIC(vNIC#2)と物理NIC(pNIC#2)とを接続する仮想ブリッジbr2とを有する。それ以外の構成は、図２と同じである。
【００３４】
仮想スイッチvSWの構成を定義する仮想ネットワーク構成情報vNW_cfgは、２つのブリッジインスタンスbr1,br2のポート情報を有する。ブリッジインスタンスbr1は、ポート名がvnet#1とpNIC#1であり、ポート名vnet#1は仮想NIC(vNIC#1)に接続されることを、ポート名pNIC#1は物理pNIC#1に接続されることを意味する。同様に、ブリッジインスタンスbr2は、ポート名がvnet#2とpNIC#2であり、ポート名vnet#2は仮想NIC(vNIC#2)に接続されることを、ポート名pNIC#2は物理pNIC#2に接続されることを意味する。これらのブリッジインスタンスはいずれも一種のL2スイッチである。しかし、これらのブリッジインスタンスは２つのポートしかないので、仮想マシンVM#1,VM#2の各vNIC#1, vNIC#2と物理NIC(pNIC#1, pNIC#2)との間でそれぞれ１対１通信を行うブリッジである。
【００３５】
なお、上記の例では、ポート名はブリッジのポートを特定すると共にポート名によって仮想NICか物理NICかが区別可能にされている。また、物理NICは図示しない外部ネットワークに接続される。
【００３６】
この仮想ブリッジbr1により、仮想マシンVM#1の仮想NIC(vNIC#1)と物理NIC(pNIC#1)との間で送信データ及び受信データの送受信が行われる。すなわち、仮想マシンVM#1がデータを送出する仮想NIC（vNIC#1）の仮想デバイスドライバvirtio#1に対してデータの送信処理を依頼すると、バックエンドドライバvhost#1からの送信データが物理NIC(pNIC#1)に出力される。逆に、物理NIC(pNIC#1)がデータを受信すると、バックエンドドライバvhost#1を経由して仮想マシンVM#1の仮想NIC(vNIC#1)に通知され、受信データが仮想デバイスドライバvirtio#1に受信される。
【００３７】
仮想ブリッジbr2による送信と受信も仮想ブリッジbr1と同様である。
【００３８】
図４は、仮想マシンと仮想スイッチによる仮想ネットワークの第３の例を示す図である。図４の第３の例では、図示しない物理マシンに３つの仮想マシンVM#1, VM#2, VM#3が起動（生成）され動作中である。これら仮想マシンそれぞれの仮想NIC(vNIC#1,vNIC#2,vNIC#3)は、ハイパーバイザHVを介してホストカーネルHKのバックエンドドライバvhost#1, vhost#2, vhost#3とそれぞれ接続される。そして、仮想ブリッジ（L2スイッチ）br3はこれら仮想NIC間の仮想ネットワークvNWを構築する。一般に、L2スイッチはブリッジと称される。また、後述するL3スイッチはスイッチと称される。
【００３９】
図４に示された仮想ネットワーク構成情報vNW_cfgは、仮想ブリッジbr3のブリッジインスタンスbr3の構成を有する。これによれば、ブリッジインスタンスbr3は３つのポートvnet#1, vnet#2, vnet#3を有する。さらに、マックアドレステーブルMC_TBLは、各ブリッジのポートvnet#1, vnet#2, vnet#3にそれぞれ接続される仮想NICのマックアドレスMAC#1, MAC#2, MAC#3を規定する。したがって、図４の仮想ネットワークvNWは、マックアドレステーブルMC_TBLを参照して、各ポートに入力される送信パケットを、その送信先マックアドレスに応じて対応するポートに出力する。
【００４０】
図４の第３の例では、仮想ネットワークvNWは、図２の第１の例のように１対の仮想NIC間の１対１通信を行うものではなく、３つの仮想NIC間を送信先マックアドレスに基づいてルーティングするL2スイッチである。
【００４１】
図５は、仮想マシンと仮想スイッチによる仮想ネットワークの第４の例を示す図である。図５の第４の例は、図４と同様に、物理マシンに３つの仮想マシンVM#1, VM#2, VM#3が起動、生成され、それら仮想マシンの仮想NIC(vNIC#1, vNIC#2, vNIC#3)間の仮想ネットワークvNWが、仮想スイッチvSW0により構築されている。各仮想マシンの仮想NIC(vNIC#1, vNIC#2, vNIC#3)は、それぞれ図示されるIPアドレスを有する。つまり、仮想スイッチvSW0は、外部のネットワークに対してIPアドレス192.168.10.xを有し、仮想スイッチvSW0による仮想ネットワークvNW内の３つの仮想NIC(vNIC#1, vNIC#2, vNIC#3)は、それぞれ異なるIPアドレス192.168.10.1, 192.168.10.2, 192.168.10.3を有する。
【００４２】
仮想ネットワークvNWを構成する仮想スイッチvSW0は、仮想ネットワーク構成情報vNW_cfg_3の入力ポートと出力ポートおよびプロトコル種別（TPC）と送信元IPアドレスと送信先IPアドレスを有するパケットのフロー情報にしたがって、入力するパケットの出力先ポートを決定してパケットをルーティングするL3スイッチである。
【００４３】
図５に示される仮想ネットワーク構成情報vNW_cfg_3は、フロー情報１として、入力ポート名vnet#1(仮想NIC(vNIC#1)に接続されるポート)、出力ポート名vnet#2（仮想NIC(vNIC#2)に接続されるポート）、送信元IPアドレス192.168.10.1、送信先IPアドレス192.168.10.2を有する。このフロー情報１によれば、仮想スイッチvSW0は、入力ポートvnet#1に入力された送信元IPアドレス192.168.10.1、送信先IPアドレス192.168.10.2のパケットを、出力ポートvnet#2にルーティングする。フロー情報２も同様であり、仮想スイッチvSW0は、入力ポートvnet#1に入力された送信元IPアドレス192.168.10.1、送信先IPアドレス192.168.10.3のパケットを、出力ポートvnet#3にルーティングする。
【００４４】
したがって、この仮想スイッチvSW0は、３つの仮想マシンVM#1, VM#2, VM#3それぞれの仮想NIC(vNIC#1, vNIC#2, vNIC#3)間の、vNIC#1からvNIC#2への経路１と、vNIC#1からvNIC#3への経路２を有するスイッチであり、図２のような１対１通信ではない。
【００４５】
一方、仮想ネットワーク構成情報vNW_cfg_3が図５の１つのフロー情報のみを有する場合は、図２のような１対１通信を行う仮想スイッチになる。
【００４６】
［仮想スイッチの課題］
上記のように、仮想ネットワークを構成する仮想スイッチは、L2スイッチ（ブリッジ）またはL3スイッチのいずれかの構成を有する。そして、仮想スイッチは、ホストカーネルHKが有する仮想スイッチプログラムによってパケットのスイッチング制御を実行する。
【００４７】
したがって、物理マシンに生成される仮想マシンの数が増大すると、ホストカーネルHKの負荷が増大する。ホストカーネルHKは仮想マシンの仮想ネットワークを構成する仮想スイッチだけでなく、他のプロセスによる仮想スイッチも制御する。そこで、ホストカーネルHKによる仮想ネットワーク、仮想スイッチの制御の負荷を軽減する必要がある。
【００４８】
[本実施の形態]
図６は、本実施の形態における情報処理装置である物理マシン（サーバ）の構成を示す図である。図６の物理マシン２０は、例えば、図１のサーバ１３である。図６の物理マシン２０は、プロセッサ（CPU）２１と、メインメモリ２２と、バス２３と、IOバスコントローラ２４とそれに接続されるHDDのような大容量で不揮発性の補助メモリ２５と、IOバスコントローラ２６とそれに接続されるネットワークインターフェース２７（物理NIC）pNICを有する。
【００４９】
補助メモリ２５は、ホストカーネルHKを有するホストOS（Operating System）と、仮想マシンの起動、削除を行う仮想化ソフトウエアであるハイパーバイザHVとを記憶する。プロセッサ２１は、ホストOSやハイパーバイザHVをメインメモリ２２に展開して実行する。また、補助メモリ２５は、ハイパーバイザHVが起動、生成する仮想マシンVM#1, VM#2のイメージファイルを記憶する。ハイパーバイザHVは、図示しない管理サーバや管理者端末からの起動指示に応じて、仮想マシンのイメージファイル内のゲストOSを起動し仮想マシンを起動する。
【００５０】
仮想マシンのイメージファイルには、ゲストOSや仮想マシンが実行するアプリケーションプログラムなどが含まれ、ゲストOSは仮想デバイスドライバやそれに対応する仮想NICなどを有する。
【００５１】
図７は、本実施の形態における物理マシンの仮想マシンとホストカーネルHKの構成を示す図である。図７の例では、２つの仮想マシンVM#1, VM#2が物理マシン（図示せず）に生成されている。仮想マシンVM#1は仮想デバイスドライバvirtio#1とその仮想NIC(vNIC#1)、仮想キュー（仮想送受信バッファ）vQUE#1を有する。同様に、仮想マシンVM#2は仮想デバイスドライバvirtio#2とその仮想NIC(vNIC#2) 、仮想キュー（仮想送受信バッファ）vQUE#2を有する。
【００５２】
図２で説明したとおり、仮想NICは仮想マシンに構成された仮想的なネットワークインターフェースカードであり、仮想デバイスドライバvirtioは仮想NICを経由するデータの送受信を制御する仮想マシン上のデバイスドライバである。また、仮想キューは仮想的なキューであり、仮想マシン上のアドレスに対応する。
【００５３】
ハイパーバイザHVは、物理マシン上に仮想マシンを起動し制御し削除する。ハイパーバイザHVは、仮想マシンと物理マシンとの間の動作を制御する。図７中のハイパーバイザHVは、仮想NICからの送信依頼に応答して物理マシン側のホストカーネルHK内のバックエンドドライバvhostに送信処理依頼を発行するイベント通知機能と、バックエンドドライバからデータ受信の通知を受けると対応する仮想NICに受信通知の割込を発生する割込発生機能とを有する。バックエンドドライバvhostは、仮想マシンの仮想NIC毎に生成される。
【００５４】
また、本実施の形態では、ハイパーバイザHVのイベント通知機能と割り込み発生機能は、仮想NIC間の直接パスが設定されている仮想NICからのデータ送信を検出すると、バックエンドドライバに送信処理依頼を発行せずに、直接パスの相手側の仮想NICに受信通知の割込を発生する。
【００５５】
一方、ホストカーネルHKは、仮想マシンの仮想デバイスドライバvirtioが送信データを仮想マシン上のアドレスにより仮想キューvQUEの送信キュー（送信バッファ）に書き込むと、アドレス変換テーブルA_TBLに基づいて、仮想マシン上のアドレスを物理マシン上のアドレスに変換し、物理マシン内の共有メモリに確保した物理キューpQUEの送信キュー（送信バッファ）に書き込む。逆に、バックエンドドライバvhostが物理キューpQUEに受信データを書き込んでハイパーバイザHVに受信通知を出力すると、ハイパーバイザHVの割り込み発生機能が受信割込を仮想NICに発行し、仮想デバイスドライバvirtioが仮想キューvQUEの受信キュー内の受信データを読み出した場合、ホストカーネルHKは、アドレス変換テーブルA_TBLに基づいて、仮想マシン上のアドレスを物理マシン上のアドレスに変換する。それにより、仮想デバイスドライバが物理キュー内の受信データを取得する。
【００５６】
仮想ネットスイッチvSWは、ホストカーネルHK内のプログラムにより構成される仮想のスイッチである。図７の仮想スイッチvSWは、仮想マシンVM#1の仮想NIC(vNIC#1)と仮想マシンVM#2の仮想NIC(vNIC#2)とに接続される。そして、仮想スイッチの構成が、仮想ネットワーク構成情報vNW_cfgに設定される。仮想ネットワーク構成情報vNW_cfgの種々の例は図２〜図５に示したとおりである。
【００５７】
さらに、各仮想NICの構成情報が仮想NIC情報テーブルvNIC_TBLに設定される。仮想NIC情報テーブルvNIC_cfgは、後述するとおり、各仮想NIC毎に対応するバックエンドドライバの識別子と、仮想スイッチに接続されるポート名（ポート識別子）と、各仮想NICに割り当てられる物理マシン内のメモリ領域に確保された物理キューのアドレスと、各仮想NICに設定された直接パスの相手側の仮想NICの識別子などを有する。
【００５８】
本実施の形態のホストカーネルHKは、VM間直接パス管理プログラム３０を有する。VM間直接パス管理プログラム３０は、仮想ネットワークの変更を検出する仮想ネットワーク変更検出部３１と、変更された仮想ネットワークの構成情報から２つの仮想マシン間の直接パスが設定されているかを判定する直接パス設定判定部３２と、直接パス設定判定部の判定結果に応じて直接パスの設定が新たに作成されていれば直接パスを作成し、既存の直接パスの設定が変更されて直接パスが消滅されていれば直接パスを削除する直接パス作成・削除部３３とを有する。
【００５９】
これらのVM直接パス管理プログラム３０については後で詳述する。
【００６０】
図８は、図７において直接パスが設定されていない場合の２つの仮想マシンとホストカーネルの構成を示す図である。図８内のアドレス変換テーブルA_TBL#1，A_TBL#2と、仮想ネットワーク構成情報vNW_cfgのブリッジインスタンスbr0のポート名は、図２と同じである。但し、図８には、仮想NIC情報テーブルvNIC_TBLが示されている。また、図８には、物理送受信キュー（送受信バッファ）pQUE#1, pQUE#2に送信キュー（送信バッファ）と受信キュー（受信バッファ）がそれぞれの物理マシンのアドレスpTx#1,vRx#1、pTx#2,vRx#2と共に示され、仮想送受信キューは実際に書き込まれないため示されていない。
【００６１】
仮想NIC情報テーブルvNIC_TBLには、仮想マシンVM#1の仮想NIC(vNIC#1)と仮想マシンVM#2の仮想NIC(vNIC#2)それぞれの情報が設定される。図８の例によれば、仮想NIC(vNIC#1)の情報は、仮想NIC(vNIC#1)に対応する仮想スイッチvSWのポート識別子vnet#1と、対応するバックエンドドライバの識別子vhost#1と、送受信キューの物理マシンのメモリアドレスpTx#1、pRx#1とが設定されている。
【００６２】
図８では、仮想NIC情報テーブルvNIC_TBLに直接パスが設定されておらず、図２と同様の動作で仮想マシンVM#1の仮想NIC(vNIC#1)と仮想マシンVM#2の仮想NIC(vNIC#2)との間で通信が実行される。その動作は、図２で説明したとおりである。図８中には、図２に示した各工程番号S１〜S10が示されている。
【００６３】
特に、仮想マシンVM#1の仮想デバイスドライバvirtio#1が送信データを送信キューに書き込むと、ホストカーネルHKが、書き込み先の仮想マシンの仮想送信キューのアドレスvTx#1を物理マシンの送信キューのアドレスpTx#1にアドレス変換し、物理送受信キューpQUE#1の送信キューに書き込む。この送受信キューは、前述のとおり、物理マシン内のメインメモリ内の領域である。
【００６４】
その後、バックエンドドライバvhost#1が送信キュー（アドレスpTx#1）から送信データを読み出してブリッジインスタンスbr0を経由して仮想NIC(vNIC#2)側のバックエンドドライバvhost#2に送信すると、バックエンドドライバvhost#2は物理送受信キューpQUE#2の受信キュー（アドレスpRx#1）に送信データを書き込む。そして、仮想マシンVM#2の仮想デバイスvirtio#2が、受信通知S8に応答して、仮想マシンのアドレスvRx#2で受信データを読み出すと、ホストカーネルHKが、物理マシンのアドレスpRx#2にアドレス変換して物理受信キューから受信データを読み出し、仮想マシンVM#2が受信データを受信する。
【００６５】
仮想マシンVM#2から仮想マシンVM#1宛てにデータを送信した場合は、上記と逆の動作になる。
【００６６】
図９は、本実施の形態に対応し直接パスが設定された例を示す。図９を参照して、本実施の形態のVM間直接パス管理プログラム３０（図７）の動作の概略を説明すると、以下のとおりである。
【００６７】
すなわち、仮想NW変更検出部３１が、仮想マシンのサービスシステムなどの管理者が入力するコマンドを監視し、仮想スイッチvSWの仮想ネットワーク構成情報vNW_cfgを変更するコマンドを検出すると、コマンドの内容を直接パス設定部３２に通知する。それに応答して、直接パス設定判定部３２が、コマンドの変更対象である仮想ネットワーク構成情報vNW_cfgを参照し、仮想マシン間の１対１通信が設定されたか否かを判定する。
【００６８】
この判定条件は、（１）変更対象のブリッジインスタンスに設けられるポートが２つだけであり、（２）（１）の２つのポートが２つの仮想NICにつながる（すなわちポート名がvnetのように仮想NICにつながることを意味している）ことである。また、変更対象がL3スイッチの場合は、L3スイッチの経路情報であるフロー情報に２つのポート名がそれぞれ１回のみ存在し、その２つのポートが入力と出力ポートであり、それぞれ仮想NICにつながることである。これらの条件については、後で再度詳述する。
【００６９】
１対１通信が設定されていた場合、直接パス作成・削除部３３が、アドレス変換テーブルA_TBL#1（またはA_TBL#2、または両方）を書き換えて、１対１通信が設定された仮想マシンVM#1,VM#2間で１つの物理送受信キューを共有するようにする。図９の例では、仮想マシンVM#2側の物理送受信キューpQUE#2を共有させている。そのため、仮想マシンVM#1側のアドレス変換テーブルA_TBL#1の物理マシン側のアドレスを、仮想マシンVM#2側の物理送受信キューpQUE#2の受信キューアドレスpRx#2と送信キューアドレスpTx#2とに変更している。つまり、送信と受信が互い違いになるようにアドレス変換テーブルを変更する。
【００７０】
仮想マシンVM#1側の物理送受信キューpQUE#1を共有させる場合は、仮想マシンVM#2側のアドレス変換テーブルA_TBL#2の物理マシン側のアドレスを、仮想マシンVM#1側の物理送受信キューpQUE#1の受信キューアドレスpRx#1と送信キューアドレスpTx#1とに変更する。仮想マシンVM#1,VM#2間で、仮想マシンVM#1側の送信キュー(pTx#1)と仮想マシンVM#2側の受信キュー(pRx#2)とを共有しても良く、仮想マシンVM#1側の受信キュー(pRx#1)と仮想マシンVM#2側の送信キュー(pTx#2)とを共有しても良い。
【００７１】
さらに、直接パス作成・削除部３３が、各仮想NIC（vNIC#1,vNIC#2）の仮想NIC情報テーブルvNIC_TBLに、それぞれ直接パスの相手側の仮想NICの識別子vNIC#2, vNIC#1を設定する。これにより、ホストカーネルの仮想スイッチを使用せずに、ハイパーバイザHVが２つの仮想NIC間の１対１通信を可能にすることができる。具体的には以下のとおりである。
【００７２】
本実施の形態によれば、ハイパーバイザHVは、仮想NIC(vNIC#1)からの送信通知を受信すると（S3）、仮想NIC情報テーブルvNIC_TBLを参照して送信通知元の仮想NIC(vNIC#1)に直接パスの相手側の仮想NIC識別子の設定があるか否かをチェックする（S11）。図９の場合、仮想NIC(vNIC#1)の仮想NIC構成テーブルには、直接パスの相手側の仮想NIC(vNIC#2)の設定が行われているため、ハイパーバイザHVは、直接パスの相手側の仮想NIC(vNIC#2)に受信通知の割込を発行する（S8）。
【００７３】
この場合、仮想マシンVM#1の仮想デバイスドライバvirtio#1による送信データの書き込みは、変更されたアドレス変換テーブルA_TBL#1に基づいて、共有する物理送受信キューpQUE#2の受信キュー(pRx#2)に行われる。したがって、受信通知の割込を受信した仮想マシンVM#2の仮想デバイスドライバvirtio#2は、物理受信キュー（pRx#2）から受信データを読み出すことができる。
【００７４】
このように、仮想マシンVM#1,VM#2間の直接パスを設定したことで、仮想マシンVM#1から仮想マシンVM#2宛ての送信データが仮想スイッチvSWを通過しなくなり、ホストカーネルHKが仮想スイッチvSWの動作制御を行う必要がなくなり、ホストカーネルHKの負荷を軽減できる。仮想マシンVM#1,VM#2間の通信は、ハイパーバイザHVで制御されるため仮想マシン間で直接行われ、物理マシンのホストカーネルHKによる制御処理を必要としない。
【００７５】
一方、管理者からの仮想スイッチの仮想ネットワーク構成情報vNW_cfgの設定を変更するコマンドが１対１通信を削除する場合は、上記と同様の動作で、直接パス作成・削除部３３が、アドレス変換テーブルA_TBL#1を元の状態に戻し、仮想NIC構成テーブルvNIC_TBL内の直接パスの設定を削除する。これにより、送信データはホストカーネルHKが制御する仮想スイッチvSW経由で送信先に送信される。
【００７６】
図１０は、本実施の形態におけるホストカーネルのVM間直接パス管理プログラムによる処理を示すフローチャート図である。図１０には、直接パスを設定する場合と削除する場合が示されている。以下、直接パスを設定する処理を説明する。
【００７７】
［直接パスの設定処理］
事前の処理として、仮想マシンが起動されるときに、ホストカーネルHKは、各仮想マシンVMと物理マシン間の送信データと受信データの受け渡し用の送受信キューを物理マシン内の共有メモリ内に作成さする（S20）。
【００７８】
図１１は、送受信キューのアドレス変換テーブルの一例を示す図である。ホストカーネルは、図１１中の左側のアドレス変換テーブルA_TBL_1を、仮想マシンVM#1,VM#2のアドレス変換テーブルとして作成する。このアドレス変換テーブルA_TBL_1は、図８に示したテーブルA_TBL#1,A_TBL#2と同じである。図８で説明したとおり、アドレス変換テーブルは、各仮想NICが使用する送信キュー／受信キューについて、仮想マシンのメモリアドレスと物理マシンのメモリアドレスの対応を保持する。そして、例えば、仮想デバイスドライバvirtioが仮想マシンのメモリアドレスに対してデータの書き込み処理を行うと、物理マシンのホストカーネルHKがこのアドレス変換テーブルを参照して仮想マシンのメモリアドレスを物理マシンのメモリアドレスに変換し、物理マシンの物理メモリにデータを書き込む。
【００７９】
さらに、別の事前の処理として、ホストカーネルHKは、仮想マシンを起動する際に、仮想NIC情報テーブルを作成する（S21）。
【００８０】
図１２は、仮想NIC情報テーブルの一例を示す図である。ホストカーネルは、図１２中の左側の仮想NIC構成テーブルvNIC_TBL_1を作成する。この例では、仮想マシンVM#1に仮想NIC(vNIC#1)が、VM#2に仮想NIC(vNIC#2)が構成され、それぞれの仮想NICとつながるバックエンドドライバ(vhost#1, vhost#2)、仮想NICに接続される仮想スイッチのポートID(vnet#1, vnet#2)およびそれぞれが使用する送信キュー/受信キューの物理マシンのアドレス（pTx#1/pRx#1, pTx#2,pRx#2）が設定されている。さらに、直接パスを確立した場合に接続相手の仮想NICのIDを格納するエントリ（直接パス相手仮想NIC）があり、起動時は設定されていないものとする。
【００８１】
図１３は、仮想ブリッジの仮想ネットワーク構成情報の一例を示す図である。最初は、図１３の左側の仮想ネットワーク構成情報vNW_cfgに示されるとおり、仮想ブリッジインスタンスbr0に対してブリッジポートvnet#1だけがバインドされているものとする。なお、この仮想ブリッジインスタンスの設定は管理者が入力する設定コマンドによりなされる。
【００８２】
図１０に戻り、仮想NW変更検出部３１は、管理者からの仮想ネットワーク構成情報を変更するコマンドを常時監視する（S22）。ここで、管理者は、仮想VM#1とVM#2の間の通信を確立するために、仮想ネットワーク構成情報内の、既に仮想マシンVM#1の仮想NIC(vNIC#1)に対応するブリッジポートvnet#1がバインドされているブリッジインスタンスbr0に、仮想マシンVM#2の仮想NIC(vNIC#2)に対応するブリッジポートvnet#2をバインドする設定コマンドを入力したとする。
【００８３】
そのため、仮想NW変更検出部３１は、仮想ネットワークを変更するコマンドを検出する（S23のYES）。仮想NW変更検出部は、仮想ネットワーク構成情報を変更するコマンドの入力を検出すると、入力されたコマンドから変更対象のブリッジインスタンス名br0を取得し、直接パス設定判定部３２にブリッジインスタンス名br0を通知する。
【００８４】
その通知に応答して、直接パス設定判定部３２は、仮想ネットワーク構成情報のブリッジインスタンスbr0についての情報を参照し、バインドされているブリッジポートについて以下の条件をいずれも満たしているか判定する。
(１)ブリッジインスタンスbr0にバインドされるブリッジポートが２つだけである（S24）。
(２)（１）の２つのブリッジポートが仮想NICにつながる（ポート名が”vnet”から始まる）（S25）。
【００８５】
図１３の右側の仮想NW構成情報vNW_cfg_2が、上記のコマンドにより変更された仮想NW構成情報である。この仮想NW構成情報vNW_cfg_2に示されたブリッジインスタンスbr0は、２つのポートのみを有し、その２つのポート名が仮想NICにつながるvnet#1,vnet#2である。したがって、ブリッジインスタンスbr0は、上記の２つの条件をいずれも満たし（S24,S25共にYES）、直接パス設定判定部３２は、vnet#1、vnet#2に対応する仮想NIC間で直接パスを確立できると判定する。この判定により、直接パス設定判定部３２が、仮想スイッチのポート間の通信データ転送先情報を含む構成情報（上記ブリッジインスタンスbr0の構成情報）に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出したことを意味する。
【００８６】
そして、直接パス設定判定部は、仮想NIC情報テーブル（図１２の左側のテーブルvNIC_TBL_1）からポートIDのvnet#1およびvnet#2に対応する仮想NIC(vNIC#1、vNIC#2)を取得し、直接パスを設定する旨とその対象となる仮想NIC（vNIC#1、vNIC#2）を直接パス設定・削除部３３に通知する（図１０はホストカーネルの処理故、通知処理は省略）。
【００８７】
そこで、直接パス設定・削除部３３は、仮想NIC情報テーブルから仮想NIC(vNIC#2)が使用する送信キュー/受信キューの物理マシンのアドレスであるpTx#2，pRx#2を取得する（S30）。そして、直接パス設定・削除部は、アドレス変換テーブルA_TBLの仮想NIC(vNIC#1)側の送信キュー、受信キューの物理マシンのアドレスを、仮想NIC(vNIC#2)側のpRx#2，pTx#2にそれぞれ書き換え（S31）、さらに仮想NIC情報テーブルvNIC_TBLの直接パス相手仮想NICについて、vNIC#1側の直接パス相手仮想NICにvNIC#2を、vNIC#2の直接パス相手仮想NICにvNIC#1をそれぞれ設定する（S32）。
【００８８】
図１１の右側が、直接パス設定・削除部により書き換えられたアドレス変換テーブルA_TBL_2である。仮想NIC(vNIC#1)側の送信キューアドレスついて、物理マシンの送信キューアドレスpTx#1が仮想NIC(vNIC#2)側の物理受信キューのアドレスpRx#2に、受信キューアドレスにおいて、物理マシンの受信キューアドレスpRx#2が仮想NIC(vNIC#2)の物理送信キューアドレスpTx#2にそれぞれ書き換えられている。この結果、仮想NIC(vNIC#1,vNIC#2)間で、仮想NIC(vNIC#2)側の物理送受信キューpQUE#2が共有されることになる。
【００８９】
また、図１２の右側が、直接パス設定・削除部により書き換えられた仮想NIC情報テーブルvNIC_TBL_2である。仮想NIC(vNIC#1,vNIC#2)それぞれの直接パス相手仮想NICの欄に、相手の仮想NICの識別子vNIC#2,vNIC#1がそれぞれ設定されている。
【００９０】
上記の直接パス設定・削除部によるアドレス変換テーブルと仮想NIC構成テーブルの変更により、その後の仮想マシンVM#1,VM#2の仮想NIC(vNIC#1,vNIC#2)間の送信は、次のように処理される。
【００９１】
すなわち、ハイパーバイザHVは、仮想マシンVM#1の仮想NIC(vNIC#1)から送信通知を受けたとき、通知元の仮想NIC(vNIC#1)の仮想NIC情報vNIC_TBL_2を参照し、直接パスの設定があることを検出し、設定された直接パス相手仮想NIC(vNIC#2)に受信通知の割込を発行する（S33、図９内のS11,S8）。そして、アドレス変換テーブルA_TBL_2が書き換えられたことにより、図９に示したとおり、仮想マシンVM#1の仮想デバイスドライバvirtio#1の送信データの書き込みは、物理送受信キューpQUE#2内の受信キュー（pRx#2）に行われている。したがって、受信通知を受信した仮想NIC(vNIC#2)の仮想デバイスドライバvirtio#2は、受信キュー（pRx#2）から受信データを読み出すことができる。
【００９２】
逆に、ハイパーバイザHVは、仮想マシンVM#2の仮想NIC(vNIC#2)から送信通知を受けたとき、通知元の仮想NIC(vNIC#2)の仮想NIC情報vNIC_TBL_2を参照し、直接パスの設定があることを検出し、設定された直接パス相手仮想NIC(vNIC#1)に受信通知を発行する。
【００９３】
図１４は、本実施の形態におけるハイパーバイザのイベント通知・割込発生機能のフローチャート図である。図２で説明したとおり、ハイパーバイザのイベント通知・割込発生機能は、仮想NICからの送信通知のイベントをその仮想NICに対応するホストカーネルのバックエンドドライバvhostに通知し、あるバックエンドドライバからの受信通知に応答してそのバックエンドドライバに対応する仮想NICに受信通知の割込を発行する。
【００９４】
それに対して、本実施の形態のイベント通知・割込発生機能は、仮想NICから送信通知のイベントを受信すると、仮想NIC情報テーブルを参照して直接パス相手仮想NICが登録されているか否かをチェックし、未登録なら上記と同様に仮想NICに対応するホストカーネルのバックエンドドライバvhostに通知し、登録済みならその直接パス相手仮想NICに受信通知の割込を発生する。
【００９５】
図１４に示されるとおり、ハイパーバイザは、仮想NICからイベントを受信すると（S50のYES）、その仮想NICの仮想NIC情報に直接パスの設定があるか否かをチェックする（S51）。直接パスの設定があれば、ハイパーバイザは、直接パスの相手先仮想NICにイベントに対応する割込を発行する（S53）。直接パスの設定がなければ、ハイパーバイザは、イベントの通知元の仮想NICに対応するバックエンドドライバにイベントを通知する（S52）。また、ハイパーバイザは、バックエンドドライバからイベント通知を受信すると（S54のYES）、通知元のバックエンドドライバに対応する仮想NICにイベントの割込を発行する（S55）。
【００９６】
以上の通り、上記の実施の形態では、ブリッジインスタンスの構成情報から仮想NIC間の１対１通信パス（直接パス）の設定可否を判定し、直接パスが設定可能な場合は、仮想NIC構成テーブルに直接パスの相手仮想NICの識別子を設定し、アドレス変換テーブルを書き直して仮想NIC間で同じ物理送信キューと物理受信キューを共有する様にする。その結果、直接パスが設定された一方の仮想NICからの送信通知が発生すると、仮想ブリッジを使用せずに、ハイパーバイザのイベント通知・割込発生機能が仮想NICからの送信通知を共通パスの相手側の仮想NICに受信通知の割込を発行する。これにより、ブリッジの動作が削減され、ブリッジを制御するホストカーネルの負荷が軽減される。
【００９７】
［直接パスの削除処理］
次に、図１０にしたがって、直接パスの削除処理について説明する。前提として仮想NIC(vNIC#1)と仮想NIC(vNIC#2)間で直接パスが設定されているものとする。そして、アドレス変換テーブル、仮想NIC情報テーブルおよび仮想ネットワーク構成情報は、それぞれ図１１、図１２、図１３の右側に示すとおりである。
【００９８】
図１０の工程S20、S21は同じである。仮想NW変更検出部３１は、管理者からの仮想ネットワーク構成情報を変更するコマンドを常時監視する（S23）。仮に、管理者が仮想マシンVM#1とVM#2間の１対１通信を切断するために、仮想ネットワーク構成情報についてブリッジインスタンスbr0にバインドされているvnet#2を解除するよう設定コマンドを入力したとする。その結果、設定コマンドにより、仮想ネットワーク構成情報は図１３の左側のテーブルvNW_cfg_1になるとする。
【００９９】
仮想NW変更検出部は、仮想ネットワーク構成情報を変更するコマンドが入力されたことを検出すると（S23のYES）、入力されたコマンドから変更対象のブリッジインスタンス名br0を取得し、直接パス設定判定部３２にその識別子br0を通知する。
【０１００】
そこで、直接パス設定判定部は、仮想ネットワーク構成情報vNW_cfg_1のブリッジインスタンスbr0の情報を参照し、バインドされているブリッジポートについて前述の条件（１）（２）を満たさないと判定する（S24のNO、S25のNO）。さらに、直接パス設定判定部は、仮想NIC情報テーブル（図１２の右側のテーブルvNIC_TBL_2）を参照し、ブリッジポートvnet1に対応する仮想NIC（vNIC#1）が他の仮想NIC(vNIC#2)と直接パスを確立していることを認識し（S40のYES）、直接パス設定・削除部３３に直接パスを削除する旨とその対象となる仮想NIC(vNIC#1、vNIC#2)を通知する。
【０１０１】
これに応答して、直接パス設定・削除部は、仮想NIC情報テーブルvNIC_TBL_2から仮想NIC(vNIC#1)が使用する送信キューと受信キューの物理マシンのアドレスであるpTx#1、pRx#1を取得し（S41）、アドレス変換テーブルA_TBL_2の仮想NIC(vNIC#1)の送信キュー、受信キューの物理マシンのアドレスをpTx#1、pRx#1にそれぞれ書き換える（S42）。さらに、直接パス設定・削除部は、仮想NIC情報テーブルの直接パス相手仮想NICのエントリを削除する（S43）。この結果、アドレス変換テーブルは図１１の左側のテーブルA_TBL_1に、仮想NIC情報テーブルは図１２の左側のテーブルvNIC_TBL_1になる。
【０１０２】
上記の直接パスの削除処理により、仮想マシンVM#1から仮想NIC(vNIC#1)を経由してデータを送信する場合の動作は次のとおりになる。まず、仮想マシンVM#1の仮想デバイスドライバvirtio#1が送信データを送信キューに書き込むと、物理送受信キューpQUE#1の送信キュー（pTx#1）に送信データが書き込まれる。そして、ハイパーバイザHVは、仮想NIC(vNIC#1)からの送信通知に応答して、仮想NIC情報テーブルvNIC_TBL_1を参照して、仮想NIC(vNIC#1、vNIC#2)が直接パスを確立していないことを確認し、通知元の仮想NIC(vNIC#1)に対応するバックエンドドライバvhost#1に送信処理依頼を発行する（S44）。それ以降の動作は、図２，図８で説明したとおりである。
【０１０３】
［仮想スイッチがL3スイッチの例］
上記の実施の形態では、仮想ネットワークを構成する仮想スイッチがL2スイッチであるブリッジの例において、ブリッジインスタンスの構成情報から仮想NIC間の１対１通信パス（直接パス）の設定可否を判定した。それに対して、以下の実施の形態では、仮想ネットワークを構成する仮想スイッチがL3スイッチの例であり、そのフロー情報から仮想NIC間の１対１通信パス（直接パス）の設定可否を判定する。
【０１０４】
仮想スイッチにはオープン仮想スイッチ（Open vSwitch）のように、仮想スイッチにおけるデータのフローを識別して、フロー毎にデータの中継先を決定するものがある。このような仮想スイッチは、前述の仮想ネットワーク構成情報に加えてデータのフロー情報を保持している。例えば、図５に示した例はこれに該当する。
【０１０５】
このような仮想スイッチを用いる物理マシンでは、直接パス設定判定部３２は、仮想ネットワーク構成情報とフロー情報から直接パスの設定可否を判断する。その動作について以下に実施の形態例を説明する。
【０１０６】
前提として、図７に示した仮想マシンVM#1の仮想NIC(vNIC#1)にはIPアドレスとして192.168.10.1が設定され、また仮想マシンVM#2の仮想NIC（vNIC#2）にはIPアドレスとして192.168.10.2が設定されているものとする。
【０１０７】
図１５は、仮想スイッチの仮想ネットワーク構成情報の一例を示す図である。管理者が仮想マシンVM#1とVM#2間での通信を確立するための設定コマンドを入力した結果、図１５に示すように、フロー情報として、以下が設定される。
送信元IPアドレス：192.168.10.1
送信先IPアドレス：192.168.10.2
プロトコル種別：TCP
入力ポート名：vnet#1
出力ポート名：vnet#2
このフロー情報は、ポート名vnet#1からプロトコル種別がTCPで送信元IPアドレスが192.168.10.1、送信先IPアドレスが192.168.10.2のパケットが入力された場合は、仮想スイッチは、そのパケットをポート名vnet#2に出力（ルーティング）することを意味する。
【０１０８】
そこで、仮想NW変更判定部３２は、仮想ネットワーク構成情報内の全てのフロー情報を参照し、入力ポート名と出力ポート名に現れるポートについて以下の全ての条件を満たしているものがあるか否か判定する。
（１）仮想スイッチの仮想ネットワーク構成テーブル内の全てのフロー情報において、入力ポート名または出力ポート名に1回（もしくは1回ずつ）しか現れないポートがある。
（２）（１）を満たすポートでお互いのポートが入力ポート名/出力ポート名となっているものがある。
（３）（２）の２つのポートが仮想マシンにつながる（ポート名が仮想マシンにつながることを示す”vnet”から始まる）。
【０１０９】
図１５の仮想ネットワーク構成情報vNW_cfg_4の例は、上記の３つの条件を全て満たしているため、直接パス設定判定部は、ポート名vnet#1、vnet#2に対応する仮想NIC（vNIC#1,vNIC#2）間で直接パスを確立できると判定する。この判定により、直接パス設定判定部３２が、仮想スイッチのポート間の通信データ転送先情報を含む構成情報（上記フロー情報）に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出したことを意味する。
【０１１０】
図１５とは反対に、図５に示した仮想ネットワーク構成情報vNW_cfg_3の場合、２つのフロー情報において、ポート名vnet#1が２回表れ、ポート名vnet#2,vnet#3がそれぞれ１回表れている。しかし、ポート名vnet#2,vnet#3は入力ポート名／出力ポート名として対に設定されていない。つまり、上記の条件（２）が満たされない。その結果、図５の仮想ネットワーク構成情報vNW_cfg_3の例では、仮想NIC間に直接パスを設定することはできない。
【０１１１】
以上のとおり、仮想スイッチがオープン仮想スイッチ（Open vSwitch）のように仮想スイッチ構成とフロー情報を有する場合においても、仮想NIC間の１対１通信パスのような直接パスを設定することができる場合も、本実施の形態では、ホストカーネルのVM間直接パス管理プログラム３０の直接パス設定判定部が直接パスが設定できることを検出し、直接パス設定／削除部が、アドレス変換テーブルを変更し、仮想NIC情報テーブルに直接パスの相手側仮想NICを設定することで、仮想スイッチを経由せずにハイパーバイザで仮想NIC間の通信パスを制御することができる。
【０１１２】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１３】
（付記１）
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、
前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること
を有する処理をコンピュータに実行させる通信制御プログラム。
【０１１４】
（付記２）
前記処理は、更に、
前記同じバッファ領域に設定した場合、前記第１仮想マシンの第１仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第２仮想マシンの第２仮想ネットワークインターフェースを、前記第２仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第１仮想ネットワークインターフェースを、それぞれ設定すること、
を有する付記１に記載の通信制御プログラム。
【０１１５】
（付記３）
前記物理マシンは、前記第１仮想マシンからの送信通知を第１バックエンドドライバに通知し、第２バックエンドドライバからの受信通知を前記第２仮想マシンに通知し、前記第２仮想マシンからの送信通知を第２バックエンドドライバに通知し、第１バックエンドドライバからの受信通知を前記第１仮想マシンに通知するイベント通知・割込発生機能を有し、
前記イベント通知・割込発生機能は、前記第１仮想ネットワークインターフェースまたは前記第２仮想ネットワークインターフェースの構成情報に設定された前記直接接続先に基づいて、前記第１仮想マシンまたは前記第２仮想マシンの一方からの送信通知を他方に受信通知として通知する、付記２に記載の通信制御プログラム。
【０１１６】
（付記４）
前記１対１通信の設定は、前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェース間での１対１通信の設定を有し、
前記同じバッファ領域に設定される前記送信バッファと前記受信バッファは、それぞれ前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェースの送信バッファと受信バッファを有する、付記２に記載の通信制御プログラム。
【０１１７】
（付記５）
前記仮想スイッチの構成情報は、仮想ブリッジインスタンスと前記仮想ブリッジインスタンスにバインドされたポート情報を有し、
前記１対１通信の設定は、前記仮想ブリッジインスタンスのポート情報が２つのポートのみを有し、前記２つのポートが前記第１仮想ネットワークインターフェースと前記第２仮想ネットワークインターフェースにそれぞれ接続する設定を有する、付記２に記載の通信制御プログラム。
【０１１８】
（付記６）
前記仮想スイッチの構成情報は、入力ポートと出力ポートとを含む通信データのフロー情報を有し、
前記１対１通信の設定は、前記フロー情報に１回しか含まれない２つのポートが前記入力ポートと前記出力ポートの対をなし、前記入力ポートと前記出力ポートがそれぞれ前記第１仮想ネットワークインターフェース及び前記第２仮想ネットワークインターフェースに接続する設定を有する、付記２に記載の通信制御プログラム。
【０１１９】
（付記７）
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出すること、
前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定すること
を有する通信制御方法。
【０１２０】
（付記８）
仮想スイッチのポート間の通信データ転送先情報を含む構成情報に、共通の物理マシンに生成された第１仮想マシンと第２仮想マシン間の１対１通信の設定を検出する直接パス設定検出部と、
前記直接パス設定検出部が前記１対１通信の設定を検出したとき、前記第１仮想マシンの送信バッファと前記第２仮想マシンの受信バッファを同じバッファ領域に、前記第１仮想マシンの受信バッファと前記第２仮想マシンの送信バッファを同じバッファ領域にそれぞれ設定する直接パス設定部と
を有する情報処理装置。
【０１２１】
（付記９）
前記直接パス設定部は、前記直接パス設定検出部が前記１対１通信の設定を検出したとき、前記第１仮想マシンの第１仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第２仮想マシンの第２仮想ネットワークインターフェースを、前記第２仮想ネットワークインターフェースの構成情報に、直接送信先情報として前記第１仮想ネットワークインターフェースを、それぞれ設定する、
付記８に記載の情報処理装置。
【０１２２】
（付記１０）
さらに、前記第１仮想マシンからの送信通知を第１バックエンドドライバに通知し、第２バックエンドドライバからの受信通知を前記第２仮想マシンに通知し、前記第２仮想マシンからの送信通知を第２バックエンドドライバに通知し、第１バックエンドドライバからの受信通知を前記第１仮想マシンに通知するイベント通知・割込発生機能を有し、
前記イベント通知・割込発生機能は、前記第１仮想ネットワークインターフェースまたは前記第２仮想ネットワークインターフェースの構成情報に設定された前記直接接続先に基づいて、前記第１仮想マシンまたは前記第２仮想マシンの一方からの送信通知を他方に受信通知として通知する、付記８または９に記載の情報処理装置。
【符号の説明】
【０１２３】
VM：仮想マシン
vNIC：仮想NIC(Network Interface Card)
virtio：仮想デバイスドライバ
HV：ハイパーバイザ
vhost：バックエンドドライバ
HK：ホストカーネル（ホストOS）
vNW：仮想スイッチ（ブリッジ）：仮想ネットワークを構築する
QUE：キュー構造体（サーバのメモリ領域）
TBL1：仮想ネットワーク構成情報テーブル
TBL2：アドレス変換テーブル
TBL3：仮想NIC情報テーブル
VM間直接パス管理プログラム（ホストカーネル内）
イベント通知・割込発生機能（プログラム）（ハイパーバイザ内）
直接送受信制御機能（プログラム）（ハイパーバイザ内）
【図１】
2017108231.tif 000003
【図２】
2017108231.tif 000004
【図３】
2017108231.tif 000005
【図４】
2017108231.tif 000006
【図５】
2017108231.tif 000007
【図６】
2017108231.tif 000008
【図７】
2017108231.tif 000009
【図８】
2017108231.tif 000010
【図９】
2017108231.tif 000011
【図１０】
2017108231.tif 000012
【図１１】
2017108231.tif 000013
【図１２】
2017108231.tif 000014
【図１３】
2017108231.tif 000015
【図１４】
2017108231.tif 000016
【図１５】
2017108231.tif 000017