(57)【特許請求の範囲】
【請求項１】
サーバと、
前記サーバに接続されたスイッチと、
前記サーバ及び前記スイッチの機能を制御するコントローラと
を具備し、
前記サーバは、
処理装置と、
前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタと
を備え、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、
トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、
前記コントローラは、前記トンネル処理の有効化／無効化をフロー毎に動的に制御する
ネットワークシステム。
【請求項２】
請求項１に記載のネットワークシステムであって、
前記スイッチは、フローテーブルに従って、フロー毎にパケットを処理するように構成され、
前記コントローラは、所望のフローのパケットが前記トンネル処理用ポートから入出力されるように前記フローテーブルを設定することにより、前記トンネル処理の有効化／無効化をフロー毎に動的に制御する
ネットワークシステム。
【請求項３】
請求項１又は２に記載のネットワークシステムであって、
前記コントローラは、更に、前記フィルタテーブルの設定を通して、前記ネットワークアダプタによる前記オフロード機能の有効化／無効化をフロー毎に動的に制御する
ネットワークシステム。
【請求項４】
請求項１乃至３のいずれか一項に記載のネットワークシステムであって、
前記トンネル処理において、前記ネットワークアダプタは、ＭＡＣアドレスに基づいてパケット転送を行う
ネットワークシステム。
【請求項５】
請求項１乃至４のいずれか一項に記載のネットワークシステムであって、
前記コントローラは、オフロードポリシテーブルに規定されているポリシに従って、前記オフロード機能の有効化／無効化及び前記トンネル処理の有効化／無効化を、フロー毎に決定する
ネットワークシステム。
【請求項６】
請求項５に記載のネットワークシステムであって、
前記スイッチは、フロー毎の通信状態を示す統計情報を前記コントローラに通知し、
前記コントローラは、前記統計情報と前記ポリシに基づいて、前記オフロード機能の有効化／無効化及び前記トンネル処理の有効化／無効化を、フロー毎に決定する
ネットワークシステム。
【請求項７】
請求項１乃至６のいずれか一項に記載のネットワークシステムであって、
前記スイッチは、オープンフロースイッチであり、
前記コントローラは、オープンフローコントローラである
ネットワークシステム。
【請求項８】
ネットワークシステムにおけるコントローラであって、
前記ネットワークシステムは、
サーバと、
前記サーバに接続されたスイッチと、
前記サーバ及び前記スイッチの機能を制御する前記コントローラと
を具備し、
前記サーバは、
処理装置と、
前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタと
を備え、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、
トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、
前記コントローラは、
フロー制御部と、
オフロードポリシテーブルが格納された記憶装置と
を備え、
前記オフロードポリシテーブルは、前記ネットワークアダプタによる前記オフロード機能の有効化／無効化、及び、前記トンネル処理の有効化／無効化のポリシを規定し、
前記フロー制御部は、前記オフロードポリシテーブルに従って、前記ネットワークアダプタによる前記オフロード機能の有効化／無効化をフロー毎に動的に制御し、且つ、前記トンネル処理の有効化／無効化をフロー毎に動的に制御する
コントローラ。
【請求項９】
ネットワークシステムにおけるフロー制御方法であって、
前記ネットワークシステムは、
サーバと、
前記サーバに接続されたスイッチと
を具備し、
前記サーバは、
処理装置と、
前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタと
を備え、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、
トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、
前記フロー制御方法は、
前記ネットワークアダプタによる前記オフロード機能の有効化／無効化をフロー毎に動的に制御するステップと、
前記トンネル処理の有効化／無効化をフロー毎に動的に制御するステップと
を含む
フロー制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化技術に基づくサーバを含むネットワークシステム、及びそのネットワークシステムにおけるフロー制御方法に関する。
【背景技術】
【０００２】
サーバの分野において、仮想化技術は重要である。具体的には、ＶＭｗａｒｅ（登録商標）やＸｅｎ（登録商標）といった仮想化ソフトウェアを用いた仮想化技術によって、１台の物理マシンを複数の仮想マシン（ＶＭ：  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）として稼働させることができる。これにより、効率的なサーバ運用が可能となる。
【０００３】
仮想化技術により、物理サーバ内には仮想マシンと共に仮想スイッチ（Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ）も構築される。仮想スイッチは、ソフトウェアベースのパケットスイッチであり、図１Ａ及び図１Ｂに示されるように、仮想マシン間、及び、仮想マシンと外部との間の通信を中継する。仮想スイッチは仮想マシンと隣接しているため、トラフィック制御が容易である。また、仮想スイッチはソフトウェアベースであるため、柔軟性及び拡張性に優れている。
【０００４】
また、ＶＴ−ｄ／ＶＴ−ｃ（登録商標）といったＩ／Ｏ（入出力）仮想化技術が知られている。このＩ／Ｏ仮想化技術によれば、仮想スイッチを介することなく仮想マシンとネットワークインタフェースカード（ＮＩＣ：  Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）との間で直接データのやりとりが可能となる。具体的には、図２に示されるように、仮想ＮＩＣが仮想マシン毎に構築される。そして、それら仮想ＮＩＣを利用することによって、仮想スイッチを完全にバイパスすることが可能となる。このような処理は、以下「ＮＩＣオフロード」と参照される。
【０００５】
仮想化に関連する技術として、次のものが知られている。
【０００６】
特表２００７−５２２５８３号公報（特許文献１）に開示された装置は、少なくとも１つのルータと、データ構造とを備える。データ構造は、当該少なくとも１つのルータによって、１つ以上の仮想ネットワークインタフェースカード（ＶＮＩＣ）間における接続を組織して仮想ネットワークを形成するために使用される。
【０００７】
特開２００８−１０２９２９号公報（特許文献２）には、キューデータ構造を使用してネットワークアダプタと通信するための技術が開示されている。デバイスドライバは、キューデータ構造に関するルート複合体内のアドレス変換および保護テーブル（ＡＴＰＴ）項目を初期設定するためにデバイスドライバサービスを呼び出す。デバイスドライバサービスは、未変換アドレスをデバイスドライバに返し、その未変換アドレスは次にネットワークアダプタに提供される。キューデータ構造からキューエレメントを検索したことに応答して、ネットワークアダプタは、キューエレメントに指定された未変換アドレスの変換を要求し、キューエレメントに関連するバッファをターゲットにするデータパケットを受信する前に変換済みアドレスをネットワークアダプタに保管することができる。
【０００８】
特開２００９−１５１７４５号公報（特許文献３）には、マルチプロセッサシステム上で仮想サーバを稼働させる仮想マシンモニタが開示されている。仮想マシンモニタは、物理ハードウェア情報取得部と、受付部と、割り当て処理部と、を備える。物理ハードウェア情報取得部は、マルチプロセッサシステムのプロセッサとメモリとＩ／Ｏデバイス及びネットワークを含むハードウェアの物理的な位置情報を含むハードウェアの構成情報を取得する。受付部は、生成する仮想サーバのプロセッサの数とメモリ量とＩ／Ｏデバイス及びリソースの割り当てポリシとを含む生成要求を受け付ける。割り当て処理部は、受け付けた生成要求に基づいてＩ／Ｏデバイスを仮想サーバに割り当ててから、割り当てポリシを満たすようにプロセッサとメモリを仮想サーバに割り当てる。
【０００９】
図１Ａ及び図１Ｂの場合、仮想スイッチは、仮想マシンと外部との間の全てのトラフィックを中継する。つまり、仮想スイッチにはトラフィックが集中する。また、仮想スイッチはソフトウェアベースであり、場合によってはシングルスレッドでスイッチ処理が進行する。その場合、集中するトラフィックを処理しきれなくなる。このようなことから、仮想スイッチは、ネットワーク処理におけるボトルネックになりやすい。
【００１０】
一方、図２で示されたＮＩＣオフロードを利用すれば、仮想スイッチを完全にバイパスすることが可能となる。しかしながらこの場合、パケット通信経路は固定され、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受することができなくなる。
【００１１】
Ｓｈｕｉｃｈｉ  Ｋａｒｉｎｏ，“Ａ  Ｐｒｏｐｏｓａｌ  ｏｆ  Ｄｙｎａｍｉｃ  Ｏｆｆｌｏａｄｉｎｇ  ｏｆ  ｖｓｗｉｔｃｈ  Ｔａｓｋｓ”，電子情報通信学会総合大会，ｐａｇｅ  Ｂ−６−４５，２０１０年（非特許文献１）には、ＮＩＣオフロードを利用する否かを、フロー毎に動的に制御することが記載されている。これにより、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチへのトラフィックの集中を抑制することが可能となる。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特表２００７−５２２５８３号公報
【特許文献２】特開２００８−１０２９２９号公報
【特許文献３】特開２００９−１５１７４５号公報
【非特許文献】
【００１３】
【非特許文献１】Ｓｈｕｉｃｈｉ  Ｋａｒｉｎｏ，“Ａ  Ｐｒｏｐｏｓａｌ  ｏｆ  Ｄｙｎａｍｉｃ  Ｏｆｆｌｏａｄｉｎｇ  ｏｆ  ｖｓｗｉｔｃｈ  Ｔａｓｋｓ”，電子情報通信学会総合大会，ｐａｇｅ  Ｂ−６−４５，２０１０年．
【発明の概要】
【発明が解決しようとする課題】
【００１４】
本願発明者は、次の点に着目した。市販のＮＩＣの中には、十分なフロー分解能を持たないものがある。例えば、オープンフローは１２ｔｕｐｌｅを必要とするが、市販のＮＩＣでは５ｔｕｐｌｅしかマッチングに使えない場合がある。このようにＮＩＣのフロー分解能が不足していると、所望のフローにＮＩＣオフロードを適用することができなくなる。より一般化すれば、サーバのネットワークアダプタの機能が不足している場合、所望のＮＩＣオフロードを実現できなくなる可能性がある。その場合、仮想スイッチへのトラフィックの集中を十分に抑制することができなくなる。
【００１５】
本発明の１つの目的は、サーバのネットワークアダプタの機能不足を補うことができる技術を提供することにある。
【課題を解決するための手段】
【００１６】
本発明の１つの観点において、ネットワークシステムが提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、サーバ及びスイッチの機能を制御するコントローラと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。コントローラは、トンネル処理の有効化／無効化をフロー毎に動的に制御する。
【００１７】
本発明の他の観点において、ネットワークシステムにおけるコントローラが提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、サーバ及びスイッチの機能を制御するコントローラと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。コントローラは、フロー制御部と、オフロードポリシテーブルが格納された記憶装置と、を備える。オフロードポリシテーブルは、ネットワークアダプタによるオフロード機能の有効化／無効化、及び、トンネル処理の有効化／無効化のポリシを規定する。フロー制御部は、オフロードポリシテーブルに従って、ネットワークアダプタによるオフロード機能の有効化／無効化をフロー毎に動的に制御し、且つ、トンネル処理の有効化／無効化をフロー毎に動的に制御する。
【００１８】
本発明の更に他の観点において、ネットワークシステムにおけるフロー制御方法が提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。フロー制御方法は、ネットワークアダプタによるオフロード機能の有効化／無効化をフロー毎に動的に制御するステップと、トンネル処理の有効化／無効化をフロー毎に動的に制御するステップと、を含む。
【発明の効果】
【００１９】
本発明によれば、サーバのネットワークアダプタの機能不足を補うことが可能となる。これにより、所望のオフロードが実現され、仮想スイッチへのトラフィックの集中を十分に抑制することが可能となる。
【図面の簡単な説明】
【００２０】
【図１Ａ】図１Ａは、仮想スイッチの一例を示す概念図である。
【図１Ｂ】図１Ｂは、仮想スイッチの他の例を示す概念図である。
【図２】図２は、ＮＩＣオフロード機能を示す概念図である。
【図３】図３は、本発明の実施の形態に係るネットワークシステムの構成例を概略的に示すブロック図である。
【図４】図４は、本発明の実施の形態に係るサーバのハードウェア構成を示すブロック図である。
【図５】図５は、本発明の実施の形態に係るサーバの構成を概念的に示すブロック図である。
【図６】図６は、本発明の実施の形態に係るネットワークアダプタの基本構成を示すブロック図である。
【図７】図７は、本発明の実施の形態における受信フィルタテーブルの一例を示す概念図である。
【図８】図８は、本発明の実施の形態に係る経路切替部の機能を説明するための概略図である。
【図９】図９は、本発明の実施の形態に係る経路切替処理の一例を説明するための概念図である。
【図１０】図１０は、本発明の実施の形態における送信フィルタテーブルの一例を示す概念図である。
【図１１】図１１は、本発明の実施の形態における２つの経路パターンを説明するための概念図である。
【図１２】図１２は、本発明の実施の形態における送受信フィルタテーブルの一例を示す概念図である。
【図１３】図１３は、本発明の実施の形態に係る仮想スイッチの構成例を示すブロック図である。
【図１４】図１４は、本発明の実施の形態に係るネットワークシステムの構成を概略的に示すブロック図である。
【図１５】図１５は、本発明の実施の形態におけるトンネル処理を説明するための概念図である。
【図１６】図１６は、本発明の実施の形態におけるＮＩＣオフロード及びトンネル処理の動的制御を示す概念図である。
【図１７】図１７は、本発明の実施の形態におけるコントローラによる処理を示すフローチャートである。
【発明を実施するための形態】
【００２１】
添付図面を参照して、本発明の実施の形態を説明する。
【００２２】
１．サーバ及びＮＩＣオフロード
まず、本実施の形態におけるサーバ及びＮＩＣオフロードについて説明する。本実施の形態におけるサーバ及びＮＩＣオフロードに関しては、本願発明者による日本国特許出願２００９−２７６６７９（未公開）にも詳しく記載されている。当該日本国特許出願２００９−２７６６７９（未公開）に記載されている内容は、参照により、本願明細書に組み込まれる。
【００２３】
図３は、本実施の形態に係るネットワークシステム１の構成例を概略的に示すブロック図である。ネットワークシステム１は、ネットワーク（不図示）に接続された複数のサーバ１０を備えている。サーバ１０間には、複数のスイッチが配置されている。このネットワークシステム１は、ファイアウォールやロードバランサといったネットワークアプライアンスを介して外部ネットワークに接続されている。ネットワークシステム１は、例えばデータセンタ（ｄａｔａ  ｃｅｎｔｅｒ）内のネットワークシステムである。
【００２４】
図４は、本実施の形態に係るサーバ（物理サーバ）１０のハードウェア構成を示すブロック図である。サーバ１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０、メインメモリ３０、及びネットワークアダプタ（ネットワークインタフェース装置）１００を備えている。ネットワークアダプタ１００は、ネットワークカードまたはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）とも呼ばれる。ＣＰＵ２０、メインメモリ３０、及びネットワークアダプタ１００は、互いに接続されている。
【００２５】
メインメモリ３０には、仮想化ソフトウェアやフロー制御プログラムＰＲＯＧが格納される。仮想化ソフトウェアは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、サーバ１０上に仮想マシン（ＶＭ：  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）や仮想スイッチ（Ｖｉｒｔｕａｌ  Ｓｗｉｔｃｈ）を構築する。フロー制御プログラムＰＲＯＧは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、後に説明される「経路切替機能」をサーバ１０に実装する。仮想化ソフトウェアやフロー制御プログラムＰＲＯＧは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。フロー制御プログラムＰＲＯＧは、仮想化ソフトウェアに組み込まれていてもよい。
【００２６】
図５は、本実施の形態に係るサーバ１０の構成を概念的に示すブロック図である。サーバ１０は、処理装置４０と、処理装置４０に接続されたネットワークアダプタ１００とを備えている。処理装置４０は、上述のＣＰＵ２０、メインメモリ３０、仮想化ソフトウェア及びフロー制御プログラムＰＲＯＧの協働により実現され、仮想環境に基づく様々な機能を備える。具体的には、処理装置４０は、ハイパーバイザ５０、仮想スイッチ２００、及び少なくとも１台の仮想マシン（仮想サーバ）３００を備える。ハイパーバイザ５０は、各仮想マシン３００の動作を管理し、また、仮想マシン３００間の通信伝送路を提供する。ハイパーバイザ５０は、仮想マシンモニタ（ＶＭＭ：  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｍｏｎｉｔｏｒ）とも呼ばれる。仮想スイッチ２００は、仮想マシン３００が送受信するパケットを外部との間で中継する。仮想スイッチ２００は、制御用の仮想マシン（Ｃｏｎｔｒｏｌ  ＶＭ）上で動作してもよいし（図１Ａ参照）、ハイパーバイザ５０上で動作してもよい（図１Ｂ参照）。各仮想マシン３００（Ｇｕｅｓｔ  ＶＭ）上では、それぞれのアプリケーションが稼働する。制御用の仮想マシン（Ｃｏｎｔｒｏｌ  ＶＭ）は、入出力処理用の仮想マシン（ＩＯＶＭ）とも呼ばれる。
【００２７】
本実施の形態では、ネットワークアダプタ１００による「ＮＩＣオフロード」が可能である。つまり、仮想スイッチ２００を介することなく、ネットワークアダプタ１００と仮想マシン３００との間で直接データのやりとりが可能である。
【００２８】
図６は、本実施の形態に係るネットワークアダプタ１００の基本構成を示すブロック図である。ネットワークアダプタ１００は、仮想ＮＩＣ（図中、破線枠で示されている）、受信フィルタ１１０、送信フィルタ１２０、記憶装置１３０、及びデータ直接伝送機能１４０を備えている。データ直接伝送機能１４０は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを直接送受信する機能である。詳細には、データ直接伝送機能１４０は、ネットワークアダプタ１００の送受信キューと仮想マシン３００が利用するアドレス空間との間で直接データ転送を行う。
【００２９】
仮想ＮＩＣは、仮想マシン３００（ＶＭ１，ＶＭ２・・・）毎に設けられる。各仮想ＮＩＣは、受信キュー１０１と送信キュー１０２を含んでいる。受信キュー１０１には、ネットワークアダプタ１００がデータリンクから受け取った受信パケットが格納される。受信キュー１０１に格納された受信パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接送られる。また、ネットワークアダプタ１００がデータ直接伝送機能１４０によって仮想マシンから直接受け取った送信パケットは、その仮想マシンに対応する送信キュー１０２に格納される。
【００３０】
また、仮想ＮＩＣは、仮想スイッチ２００に対しても設けられる。仮想スイッチ２００とつながる仮想ＮＩＣの受信キュー１０１及び送信キュー１０２は、以下、受信キュー１０１−Ｓ及び送信キュー１０２−Ｓとそれぞれ参照される。受信キュー１０１−Ｓには、ネットワークアダプタ１００が外部データリンクから受け取った受信パケットが格納される。受信キュー１０１−Ｓに格納された受信パケットは、仮想スイッチ２００に送られる。また、ネットワークアダプタ１００が仮想スイッチ２００から受け取った送信パケットは、送信キュー１０２−Ｓに格納される。
【００３１】
送信フィルタ１２０は、それぞれの送信キュー１０２、１０２−Ｓを所定の順序／タイミングで選択する。そして、送信フィルタ１２０は、選択した送信キュー１０２あるいは１０２−Ｓから送信パケットを取り出し、その送信パケットをデータリンクへ送出する。尚、送信キュー１０２には、パケット自体のデータでなく、パケットを格納している仮想マシン３００内のアドレスなど、パケットのメタデータのみを格納することもできる。この場合、送信フィルタ１２０は、次にパケットを取り出す送信キュー１０２を選択すると、該当キューに格納されたパケットのメタデータを用いて、当該パケットを仮想マシン３００から転送するよう、データ直接伝送機能１４０に指示する。
【００３２】
受信フィルタ１１０は、データリンクから受信パケットを受け取る。受信フィルタ１１０は、その受信パケットをどの受信キュー１０１あるいは１０１−Ｓに格納するかを判定する。その判定に用いられるのが、「受信フィルタテーブルＦＩＬＴ１」である。受信フィルタテーブルＦＩＬＴ１は、記憶装置１３０に格納されている。記憶装置１３０の例としては、ＤＲＡＭ、ＳＲＡＭ、連想メモリ（ＣＡＭ：  Ｃｏｎｔｅｎｔ  Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）等が挙げられる。
【００３３】
受信フィルタテーブルＦＩＬＴ１は、フローと受信アクションとの対応関係を示すテーブルである。受信フィルタ１１０は、その受信フィルタテーブルＦＩＬＴ１を参照し、受信パケットのフローに対応付けられた受信アクションを受信パケットに対して行う。受信アクションとしては、２パターン考えられる。第１受信アクションは、「データ直接伝送機能１４０を用いることによって、受信パケットを指定された仮想マシン３００に直接送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、指定された受信キュー１０１に格納する。第２受信アクションは、「受信パケットを仮想スイッチ２００へ送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。
【００３４】
図７は、受信フィルタテーブルＦＩＬＴ１の一例を示している。受信フィルタテーブルＦＩＬＴ１は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの受信パケットに対して行われる受信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、受信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／を参照）のフローテーブルにおけるキーと同様である。受信アクションには、受信パケットの格納先となる受信キューが記述されている。例えば、「受信アクション：ＶＭ１」は、仮想マシンＶＭ１宛の受信キュー１０１を意味し、上述の第１受信アクションに相当する。また、「受信アクション：ｖｓｗｉｔｃｈ」は、仮想スイッチ２００宛の受信キュー１０１−Ｓを意味し、上述の第２受信アクションに相当する。
【００３５】
受信フィルタ１１０は、受信パケットを受け取ると、その受信パケットのヘッダ情報を用いて受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリ（ｅｘａｃｔ  ｍａｔｃｈ  ｅｎｔｒｙ）を検索する。受信パケットのフローにマッチするイグザクトマッチエントリが有る場合、受信フィルタ１１０は、そのイグザクトマッチエントリで指定された第１受信アクションを受信パケットに対して行う。例えば、図７の例において、受信フィルタ１１０は、フローｆｌｏｗ１に属する受信パケットを、仮想マシンＶＭ１宛の受信キュー１０１に格納する。一方、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合、受信フィルタ１１０は、第２受信アクションを受信パケットに対して行う、すなわち、受信パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。このようにして、ＮＩＣオフロードが可能となる。
【００３６】
本実施の形態に係るサーバ１０は、更に、「経路切替部６０」を備えている。図８は、本実施の形態に係る経路切替部６０の機能を説明するための概略図である。本実施の形態において、経路切替部６０は、仮想マシン３００が送受信するパケットの伝送経路を“動的”に切り替える。
【００３７】
より詳細には、仮想マシン３００が送受信するパケットの伝送経路には、２パターン考えられる。第１の経路パターンでは、上述のネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００と仮想マシン３００との間で直接パケットが送受信される（ＮＩＣオフロード）。一方、第２の経路パターンでは、少なくとも仮想スイッチ２００を介して仮想マシン３００に対してパケットが送受信される。第１及び第２の経路パターンのフローは、以下、それぞれ、「第１経路パターンフロー」及び「第２経路パターンフロー」と参照される。
【００３８】
経路切替部６０は、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定する。更に、経路切替部６０は、その経路設定を、所定の条件に応じて動的に切り替える。すなわち、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える（分別する）。そして、経路切替部６０は、第１経路パターンフローをネットワークアダプタ１００のデータ直接伝送機能１４０に処理させ、一方、第２経路パターンフローを仮想スイッチ２００に処理させる。
【００３９】
このように、本実施の形態によれば、全てのフローが固定的に仮想スイッチ２００をバイパスするわけではない。所望のフロー（第１経路パターンフロー）のみがＮＩＣオフロードされ、仮想スイッチ２００をバイパスする。他のフロー（第２経路パターンフロー）は、通常通り、仮想スイッチ２００を通して伝送される。その結果、仮想スイッチ２００を利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチ２００へのトラフィックの集中を抑制することが可能となる。
【００４０】
尚、経路切替部６０は、サーバ１０（ＣＰＵ２０）がフロー制御プログラムＰＲＯＧを実行することにより実現される。経路切替部６０は、図５に示されるように処理装置４０に組み込まれていてもよい。あるいは、経路切替部６０は、ネットワークアダプタ１００に組み込まれていてもよい。典型的には、経路切替部６０は、処理装置４０の仮想スイッチ２００あるいはハイパーバイザ５０に組み込まれる。但し、それに限定されない。
【００４１】
以下、本実施の形態に係る経路切替処理を更に詳しく説明する。
【００４２】
図９は、本実施の形態に係る経路切替処理の一例を説明するための概念図である。本処理例では、ネットワークアダプタ１００に、受信フィルタテーブルＦＩＬＴ１だけでなく、「送信フィルタテーブルＦＩＬＴ２」も設けられる。受信フィルタテーブルＦＩＬＴ１と同様に、送信フィルタテーブルＦＩＬＴ２も記憶装置１３０に格納される。尚、受信フィルタテーブルＦＩＬＴ１と送信フィルタテーブルＦＩＬＴ２は、まとめて「フィルタテーブルＦＩＬＴ」と参照される場合がある。
【００４３】
送信フィルタテーブルＦＩＬＴ２は、フローと送信アクションとの対応関係を示すテーブルである。送信フィルタ１２０は、その送信フィルタテーブルＦＩＬＴ２を参照し、送信パケットのフローに対応付けられた送信アクションを送信パケットに対して行う。送信アクションとしては、２パターン考えられる。第１送信アクションは、「送信パケットを外部のデータリンクへ送信すること」である。この場合、送信フィルタ１２０は、送信パケットをデータリンクへ送出する。第２送信アクションは、「送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせること」である。この場合、送信フィルタ１２０は、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
【００４４】
図１０は、送信フィルタテーブルＦＩＬＴ２の一例を示している。送信フィルタテーブルＦＩＬＴ２は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの送信パケットに対して行われる送信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、送信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／を参照）のフローテーブルにおけるキーと同様である。送信アクションには、第１送信アクション「ｏｕｔ」あるいは第２送信アクション「ｌｏｏｐｂａｃｋ」が記述されている。
【００４５】
送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出すと、その送信パケットのヘッダ情報を用いて送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリ（ｅｘａｃｔ  ｍａｔｃｈ  ｅｎｔｒｙ）を検索する。送信パケットのフローにマッチするイグザクトマッチエントリが有る場合、送信フィルタ１２０は、そのイグザクトマッチエントリで指定された第１送信アクション（ｏｕｔ）を送信パケットに対して行う、すなわち、送信パケットをデータリンクに送出する。一方、送信パケットのフローにマッチするイグザクトマッチエントリが無い場合、送信フィルタ１２０は、第２送信アクション（ｌｏｏｐｂａｃｋ）を送信パケットに対して行う、すなわち、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
【００４６】
図９及び図１１を参照して、２つの経路パターンを説明する。図９及び図１１の例では、受信フィルタテーブルＦＩＬＴ１において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１受信アクションに対応付けられており、その他のフローは第２受信アクションに対応付けられている。また、送信フィルタテーブルＦＩＬＴ２において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１送信アクションに対応付けられており、その他のフローは第２送信アクションに対応付けられている。
【００４７】
本処理例において、仮想マシン３００から送出される送信パケットは、まず、ネットワークアダプタ１００に入力される。このとき、その送信パケットは、ネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００に直接入力される。送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出す。
【００４８】
送信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリがヒットする。従って、送信フィルタ１２０は、その送信パケットをデータリンクに送出する。つまり、当該送信パケットは、仮想スイッチ２００を通過することなく、仮想マシン３００からネットワークアダプタ１００を介して外部に送信される。これは、上述の第１の経路パターンに相当する。
【００４９】
一方、送信パケットがその他のフローに属する場合、送信フィルタテーブルＦＩＬＴ２中のいずれのイグザクトマッチエントリもヒットしない。従って、送信フィルタ１２０は、その送信パケットを受信パケットとして受信フィルタ１１０にループバックする。受信フィルタテーブルＦＩＬＴ１においても、いずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを受信キュー１０１−Ｓを介して仮想スイッチ２００へ送る。つまり、当該パケットは、一旦ネットワークアダプタ１００に入力された後、仮想スイッチ２００によって処理されることになる。これは、上述の第２の経路パターンに相当する。
【００５０】
データリンクから受け取る受信パケットに関しては、次の通りである。受信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリがヒットする。従って、受信フィルタ１１０は、その受信パケットを、対応する仮想マシン３００宛の受信キュー１０１に格納する。その受信パケットは、データ直接伝送機能１４０によって、仮想スイッチ２００を介することなく、対応する仮想マシン３００に直接送られる。これは、上述の第１の経路パターンに相当する。
【００５１】
一方、受信パケットがその他のフローに属する場合、受信フィルタテーブルＦＩＬＴ１中のいずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。よって、その受信パケットは、仮想スイッチ２００によって処理されることになる。これは、上述の第２の経路パターンに相当する。
【００５２】
尚、図１２に示されるように、受信フィルタテーブルＦＩＬＴ１と送信フィルタテーブルＦＩＬＴ２とは組み合わされて、単一の送受信フィルタテーブルとして提供されてもよい。図１２の例では、第２受信アクションと第２送信アクションは共通であり、「ｖｓｗｉｔｃｈ：パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納すること」である。これによっても、受信経路への送信パケットのループバックが実現される。
【００５３】
以上に説明されたように、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定により、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定することができる。そして、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定を変更することによって、フロー経路を“動的”に切り替えることも可能である。そのようなエントリ設定及び設定変更を行うのが、経路切替部６０である。
【００５４】
具体的には、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、所定の基準に基いて、第１経路パターンフローあるいは第２経路パターンフローに割り当てる。その割り当ては、動的に変更可能である。そして、経路切替部６０は、第１経路パターンフローが上述の第１受信アクションに対応付けられ、第２経路パターンフローが上述の第２受信アクションに対応付けられるように、受信フィルタテーブルＦＩＬＴ１を設定する。また、経路切替部６０は、第１経路パターンフローが上述の第１送信アクションに対応付けられ、第２経路パターンフローが上述の第２送信アクションに対応付けられるように、送信フィルタテーブルＦＩＬＴ２を設定する。その結果、第１経路パターンフローは、仮想スイッチ２００を介することなく処理される、すなわち、ＮＩＣオフロードされる。一方、第２経路パターンフローは、仮想スイッチ２００によって処理されることになる。
【００５５】
尚、同一フローに関するフィルタエントリが、受信フィルタテーブルＦＩＬＴ１あるいは送信フィルタテーブルＦＩＬＴ２のいずれか一方にだけ設定されてもよい。その場合、受信側と送信側とで、経路パターンは非対称になる。例として、既出の図９及び図１１において、フローｆｌｏｗ１に関するフィルタエントリが送信フィルタテーブルＦＩＬＴ２にのみ設定される場合を考える。その場合、フローｆｌｏｗ１に関しては、送信パケットの伝送経路は、仮想スイッチ２００を介さない第１の経路パターンとなり、受信パケットの伝送経路は、仮想スイッチ２００を通過する第２の経路パターンとなる。
【００５６】
経路切替部６０は、例えば、仮想スイッチ２００に組み込まれる。図１３は、その場合の仮想スイッチ２００の機能構成例を示すブロック図である。仮想スイッチ２００は、フロー識別機能２１０、パケットスイッチ機能２２０、ＶＭ識別機能２３０、キュー判定機能２４０、及びＮＩＣ設定機能２５０を備えている。
【００５７】
仮想スイッチ２００は、ネットワークアダプタ１００あるいは仮想マシン３００からパケットを受け取る。フロー識別機能２１０は、受け取ったパケットのヘッダ情報に基いて、当該パケットの属するフローを識別する。また、フロー識別機能２１０は、フロー識別情報（Ｋｅｙ）とアクション（Ａｃｔｉｏｎ）との対応関係を示すフローテーブルＴＢＬを参照して、当該パケットに対して実施すべきアクションを得る。パケットスイッチ機能２２０は、そのアクションに従って当該パケットを処理する。典型的には、フローテーブルＴＢＬのアクションにはパケットの出力ポート（転送先）が記述されている。パケットスイッチ機能２２０は、アクションで指定された出力ポートからパケットを出力する。出力されたパケットは、ネットワークアダプタ１００あるいは仮想マシン３００へ送られる。
【００５８】
尚、当該パケットにマッチするフローエントリがフローテーブルＴＢＬに無い場合、フロー識別機能２１０は、当該パケットに対して所定の処理を実施する。例えば、フロー識別機能２１０は、オープンフローコントローラ（ＯＦＣ：  Ｏｐｅｎ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）に当該パケットを転送し、経路設定を要求する。
【００５９】
ＶＭ識別機能２３０は、指定されたフローに関して、当該フローに属するパケットを送受信する仮想マシン３００を特定する。ここで、「指定されたフロー」とは、ネットワークアダプタ１００上のフィルタテーブルＦＩＬＴに対するエントリ設定が望まれるフローである。キュー判定機能２４０は、ＶＭ識別機能２３０によって特定された仮想マシン３００に関連付けられた送受信キュー（１０１、１０２）を判定する。ＮＩＣ設定機能２５０は、その送受信キューを適宜参照することによって、フィルタテーブルＦＩＬＴに設定すべきフィルタエントリを作成する。そして、ＮＩＣ設定機能２５０は、作成したフィルタエントリをネットワークアダプタ１００に通知し、フィルタテーブルＦＩＬＴの設定・変更を行う。
【００６０】
経路切替部６０は、これらＶＭ識別機能２３０、キュー判定機能２４０、及びＮＩＣ判定機能２５０を含んでいる。
【００６１】
２．スイッチオフロード
市販のネットワークアダプタ１００が使用される場合、フィルタテーブルＦＩＬＴのフロー分解能が所望の処理には不足している可能性がある。例えば、オープンフローは１２ｔｕｐｌｅを必要とするが、市販のＮＩＣでは５ｔｕｐｌｅしかマッチングに使えない場合がある。このようにネットワークアダプタ１００のフロー分解能が不足していると、所望のフローにＮＩＣオフロードを適用することができなくなる。
【００６２】
また、フィルタテーブルＦＩＬＴに割り当てられている記憶領域が小さい場合、フィルタテーブルＦＩＬＴのオーバーフローがすぐに発生しやすい。フィルタテーブルＦＩＬＴのオーバーフローが発生すると、新たなフィルタエントリをフィルタテーブルＦＩＬＴに追加することができなくなる。このことも、好適なＮＩＣオフロードを阻害する要因となる。
【００６３】
このように、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能が不足している場合、所望のＮＩＣオフロードを実現できなくなる可能性がある。その場合、仮想スイッチ２００へのトラフィックの集中を十分に抑制することができなくなる。
【００６４】
そこで、本実施の形態によれば、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足を補うために、そのネットワークアダプタ１００に接続された物理スイッチを用いたオフロードも実施される。そのような物理スイッチを用いたオフロードは、以下「スイッチオフロード」と参照される。すなわち、本実施の形態によれば、「ＮＩＣオフロード」が動的に制御されるだけでなく、「スイッチオフロード」も動的に制御される。それにより、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足を補うことが可能となる。以下、スイッチオフロードに関連する構成及び処理を説明する。
【００６５】
２−１．全体構成
図１４は、本実施の形態に係るネットワークシステム１の構成を概略的に示すブロック図である。ネットワークシステム１は、サーバ１０、スイッチ４００及びコントローラ５００を備えている。スイッチ４００は、サーバ１０に接続されたＴｏＲ（Ｔｏｐ  ｏｆ  Ｒａｃｋ）スイッチである。コントローラ５００は、サーバ１０及びスイッチ４００に接続されており、サーバ１０及びスイッチ４００の機能を制御する。例えばオープンフローの場合、スイッチ４００はオープンフロースイッチ（ＰＯＦＳ：Ｐｙｓｉｃａｌ  Ｏｐｅｎ  Ｆｌｏｗ  Ｓｗｉｔｃｈ）であり、コントローラ５００はオープンフローコントローラ（ＯＦＣ：Ｏｐｅｎ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌｌｅｒ）である。
【００６６】
２−２．サーバ１０
サーバ１０は、ネットワークアダプタ１００、仮想スイッチ２００及び仮想マシン３００を備えている。上述の通り、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴに従って、フロー毎にパケットを処理するように構成されている。
【００６７】
更に、上述の通り、ネットワークアダプタ１００は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを送受信する「ＮＩＣオフロード機能」を有している。所望のフローに関してＮＩＣオフロード機能を有効化／無効化するには、フィルタテーブルＦＩＬＴにおいて当該所望のフローに関するフィルタエントリを適切に設定すればよい。すなわち、フィルタテーブルＦＩＬＴの設定を通して、ＮＩＣオフロード機能の有効化／無効化をフロー毎に動的に制御することができる。フィルタテーブルＦＩＬＴの設定は、上述の通り、経路切替部６０によって行われる。上述の例では、仮想スイッチ２００が経路切替部６０の機能を有しており、仮想スイッチ２００を通してフィルタテーブルＦＩＬＴの設定・変更が可能である。
【００６８】
２−３．スイッチ４００
スイッチ４００は、フローテーブル４４０を有している。フローテーブル４４０は、フロー毎にフローエントリを有する。各フローエントリは、フロー識別情報（Ｋｅｙ）と、該当フローのパケットに対して行われるアクション（Ａｃｔｉｏｎ）を示している。フロー識別情報（Ｋｅｙ）にマッチするパケットに対しては、アクション（Ａｃｔｉｏｎ）で指定されるパケット処理（例えば、指定ポートへの出力）が実施される。スイッチ４００は、そのようなフローテーブル４４０に従って、フロー毎にパケット処理を行う。
【００６９】
より詳細には、スイッチ４００は、テーブル管理部４１０、スイッチ処理部４２０、コントローラ通信部４３０、及び複数のポート４５０を備えている。テーブル管理部４１０は、フローテーブル４４０の管理（設定変更、等）を行う。テーブル管理部４１０は記憶装置を含んでおり、フローテーブル４４０はその記憶装置に格納される。スイッチ処理部４２０は、ポート４５０（入力ポート）を通してパケットを受信する。また、スイッチ処理部４２０は、フローテーブル４４０を参照して、その受信パケットに対してパケット処理を行う。更に、スイッチ処理部４２０は、ポート４５０（出力ポート）を通してパケットを送信する。コントローラ通信部４３０は、コントローラ５００との通信機能を有している。オープンフローの場合、ＳｅｃｕｒｅＣｈａｎｎｅｌがコントローラ通信部４３０に相当する。
【００７０】
２−４．トンネル処理
本実施の形態に係るネットワークアダプタ１００、仮想マシン３００及びスイッチ４００は、「トンネル処理」をサポートしている。トンネル処理の場合、ネットワークアダプタ１００は、フローを認識することなく、仮想マシン３００とスイッチ４００との間でパケット転送を行う。つまり、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴを参照することなく、仮想マシン３００とスイッチ４００との間でパケット転送を行う。
【００７１】
図１５を参照して、トンネル処理を更に詳しく説明する。図１５に示されるように、スイッチ４００のある物理ポート４５０には、トンネル処理専用の仮想ポート４５１（以下、「トンネル処理用ポート４５１」と参照される）が設けられる。そのトンネル処理用ポート４５１は、仮想マシン３００毎に用意される。例えば図１５では、仮想マシン３００−１〜３００−３のそれぞれに、トンネル処理用ポート４５１−１〜４５１−３が対応付けられている。トンネル処理において、スイッチ４００は、トンネル処理用ポート４５１を通して、対応する仮想マシン３００との間でパケットを送受信する。このとき、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴを参照することなく、当該パケットをスイッチ４００と仮想マシン３００との間で転送する。具体的には、ネットワークアダプタ１００は、パケットのＭＡＣヘッダからＭＡＣアドレスを抽出し、更に、ＭＡＣテーブル１８０を参照することによって当該パケットの転送先を決定する。
【００７２】
このように、トンネル処理において、ネットワークアダプタ１００は、フローを認識することなく、パケットのＭＡＣアドレスに基づいてパケット転送を行う。すなわち、トンネル処理の場合、フィルタテーブルＦＩＬＴを参照することなく、仮想マシン３００とスイッチ４００との間でパケット転送が可能である。これが、「スイッチオフロード」に相当する。
【００７３】
どのフローに対してトンネル処理（スイッチオフロード）を適用するかは、スイッチ４００のフローテーブル４４０を適宜設定することにより制御可能である。具体的には、所望のフローに対してトンネル処理を適用する場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０のフローエントリを設定すればよい。逆に、所望のフローに対してトンネル処理を適用しない場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されないようにフローテーブル４４０のフローエントリを設定すればよい。このように、スイッチ４００のフローテーブル４４０の設定を通して、トンネル処理（スイッチオフロード）の有効化／無効化をフロー毎に制御することが可能である。
【００７４】
以上に説明されたように、トンネル処理（スイッチオフロード）の場合、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴは参照されず、その代わりに、スイッチ４００のフローテーブル４４０がフロー制御に利用される。従って、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能が不足していたとしても、スイッチ４００のフローテーブル４４０を適宜利用することにより、その機能不足を補うことができる。
【００７５】
例えば、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴのフロー分解能が不足している場合であっても、よりフロー分解能の高いスイッチ４００のフローテーブル４４０を利用することによって、所望のフローにオフロード処理（ＮＩＣオフロードの代わりにスイッチオフロード）を適用することが可能となる。これは、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足をスイッチ４００のフローテーブル４４０で補っていることを意味する。
【００７６】
また、スイッチオフロードを利用することにより、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴにおけるエントリ消費を減らすことができる。これにより、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴのオーバーフローが発生しにくくなる。これは、フィルタテーブルＦＩＬＴに割り当てられている記憶領域が小さい場合に、特に有効である。このことも、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足をスイッチ４００のフローテーブル４４０で補っていることを意味する。
【００７７】
２−５．コントローラ
本実施の形態によれば、ネットワークアダプタ１００によるＮＩＣオフロードの有効化／無効化が、フロー毎に動的に制御される。また、トンネル処理（スイッチオフロード）の有効化／無効化が、フロー毎に動的に制御される。これら動的制御を一括して行うのが、コントローラ５００である。
【００７８】
図１４に示されるように、コントローラ５００は、記憶装置５１０、フロー制御部５２０、及び通信部５３０を備えている。通信部５３０は、サーバ１０やスイッチ４００との間でデータ通信を行う。オープンフローの場合、ＳｅｃｕｒｅＣｈａｎｎｅｌが通信部５３０に相当する。
【００７９】
記憶装置５１０には、オフロードポリシテーブル５４０が格納されている。オフロードポリシテーブル５４０は、ＮＩＣオフロードの有効化／無効化、及び、トンネル処理の有効化／無効化に関するポリシ（基準）を規定している。オフロードポリシテーブル５４０の内容は、ユーザによって書き換え可能である。フロー制御部５２０は、そのオフロードポリシテーブル５４０に規定されているポリシに従って、ＮＩＣオフロードの有効化／無効化を動的に制御し、且つ、トンネル処理の有効化／無効化を動的に制御する。
【００８０】
図１６は、本実施の形態におけるＮＩＣオフロード及びトンネル処理の動的制御を示す概念図である。
【００８１】
あるフローに関してＮＩＣオフロードを有効化／無効化するには、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴにおいて当該フローに関するフィルタエントリを適切に設定すればよい。よって、コントローラ５００は、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの設定を通して、ＮＩＣオフロードの有効化／無効化をフロー毎に動的に制御する。より詳細には、コントローラ５００は、仮想スイッチ２００の経路切替部６０にフィルタテーブル設定指示を出し、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの設定変更を行わせる。これにより、所望のフローに対するＮＩＣオフロードの適用を、動的に有効化／無効化することができる。
【００８２】
また、あるフローに関してトンネル処理（スイッチオフロード）を有効化／無効化するには、スイッチ４００のフローテーブル４４０において当該フローに関するフローエントリを適切に設定すればよい。よって、コントローラ５００は、スイッチ４００のフローテーブル４４０の設定を通して、トンネル処理の有効化／無効化をフロー毎に動的に制御する。より詳細には、コントローラ５００は、所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０を設定する。これにより、所望のフローに対するトンネル処理（スイッチオフロード）の適用を、動的に有効化／無効化することが可能となる。
【００８３】
尚、コントローラ５００は、各フローの通信状態（例：スループット）を参照して動的制御を行ってもよい。例えば、図１６に示されるように、スイッチ４００は、フロー毎の通信状態を示す統計情報ＳＴＡＴを、所定のインターバルでコントローラ５００に通知する。コントローラ５００は、スイッチ４００から受け取った統計情報ＳＴＡＴを参照し、必要に応じてＮＩＣオフロードやスイッチオフロードを適用する。例えば、「スループットが所定の閾値を超えたフローにスイッチオフロードを適用する」ということがオフロードポリシテーブル５４０に規定されている場合、コントローラ５００は、統計情報ＳＴＡＴを参照して、必要なフローにスイッチオフロードを適用する。
【００８４】
図１７は、本実施の形態におけるコントローラ５００による処理を示すフローチャートである。コントローラ５００は、所定のインターバルで、スイッチ４００から統計情報ＳＴＡＴを受け取る（ステップＳ１０）。
【００８５】
コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、ＮＩＣオフロードの設定変更が必要かどうかを決定する（ステップＳ２０）。設定変更が必要な場合（ステップＳ２０；Ｙｅｓ）、コントローラ５００は、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴを書き換えることにより、所望のフローに対するＮＩＣオフロードの適用を有効化／無効化する（ステップＳ３０）。
【００８６】
また、コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、スイッチオフロードの設定変更が必要かどうかを決定する（ステップＳ４０）。設定変更が必要な場合（ステップＳ４０；Ｙｅｓ）、コントローラ５００は、スイッチ４００のフローテーブル４４０を書き換えることにより、所望のフローに対するトンネル処理の適用を有効化／無効化する（ステップＳ５０）。
【００８７】
尚、図１７で示された処理フローは、コントローラ５００がフロー制御プログラムを実行することによって実現されてもよい。フロー制御プログラムは、コントローラ５００によって実行されるコンピュータプログラムである。フロー制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
【００８８】
ここで、コントローラ５００がＮＩＣオフロードの有効化／無効化を直接制御する代わりに、次のように仮想スイッチ２００に行わせることもできる。すなわち、コントローラ５００が保持するオフロードポリシテーブル５４０の情報のうち、仮想スイッチ２００が処理するフローに関連する情報を仮想スイッチ２００に伝達する。仮想スイッチ２００は、ＮＩＣオフロードの有効化／無効化を制御する経路切替部６０を備えている。仮想スイッチ２００自身が計測する統計情報を参照して、経路切替部６０は、上記情報に基づいてＮＩＣオフロードの有効化／無効化を判定する。このようにすることで、オフロードポリシに従って、仮想スイッチ２００が自律的にＮＩＣオフロードの制御を行うことができるようになり、コントローラ５００で全てのオフロード制御を行う必要がなくなる。これにより、コントローラ５００にかかる負荷を分散することができる。更に、より時間的に高い精度で、オフロードの有効化／無効化を切り替えることができるようになる。
【００８９】
２−６．効果
以上に説明されたように、本実施の形態によれば、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能が不足していたとしても、スイッチ４００のフローテーブル４４０を適宜利用することにより、その機能不足を補うことができる。これにより、オフロードが十分に実現され、仮想スイッチ２００へのトラフィックの集中を十分に抑制することが可能となる。
【００９０】
また、スイッチ４００のフローテーブル４４０を適宜設定することにより、「ループバック」も実現可能である。ここで、ループバックとは、あるサーバ１０内の仮想マシン３００から送出されたパケットを折り返して、同サーバ１０内の他の仮想マシン３００に転送することである。このようなループバックは、仮想マシン３００間の高速通信を可能とする。しかしながら、市販のネットワークアダプタ１００がループバック機能をサポートしていない場合もある。このような場合であっても、スイッチ４００（ＴｏＲスイッチ）のフローテーブル４４０を利用することによって、ループバックを実現することが可能となる。
【００９１】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【図１Ａ】
0005839032.tif 000002
【図１Ｂ】
0005839032.tif 000003
【図２】
0005839032.tif 000004
【図３】
0005839032.tif 000005
【図４】
0005839032.tif 000006
【図５】
0005839032.tif 000007
【図６】
0005839032.tif 000008
【図７】
0005839032.tif 000009
【図８】
0005839032.tif 000010
【図９】
0005839032.tif 000011
【図１０】
0005839032.tif 000012
【図１１】
0005839032.tif 000013
【図１２】
0005839032.tif 000014
【図１３】
0005839032.tif 000015
【図１４】
0005839032.tif 000016
【図１５】
0005839032.tif 000017
【図１６】
0005839032.tif 000018
【図１７】
0005839032.tif 000019