(57)【要約】  サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、経路切替部と、を備える。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信する伝送機能を有する。経路切替部は、仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える。そして、経路切替部は、第１経路パターンフローをネットワークアダプタの上記伝送機能に処理させ、第２経路パターンフローを仮想スイッチに処理させる。
2011068091.tif 000002
【特許請求の範囲】
【請求項１】
処理装置と、
前記処理装置に接続されたネットワークアダプタと、
経路切替部と
を備え、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信する伝送機能を有し、
前記経路切替部は、前記仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替え、
前記経路切替部は、前記第１経路パターンフローを前記ネットワークアダプタの前記伝送機能に処理させ、前記第２経路パターンフローを前記仮想スイッチに処理させる
サーバ。
【請求項２】
請求項１に記載のサーバであって、
前記ネットワークアダプタは、
受信パケットを受け取る受信フィルタと、
フローと受信アクションとの対応関係を示す受信フィルタテーブルが格納された記憶装置と
を備え、
前記受信フィルタは、前記受信フィルタテーブルを参照し、前記受信パケットのフローに対応付けられた前記受信アクションを前記受信パケットに対して行い、
前記経路切替部は、前記第１経路パターンフローが第１受信アクションに対応付けられ、前記第２経路パターンフローが第２受信アクションに対応付けられるように、前記受信フィルタテーブルを設定し、
前記第１受信アクションは、前記伝送機能を用いることによって前記受信パケットを前記仮想マシンへ送信することであり、
前記第２受信アクションは、前記受信パケットを前記仮想スイッチへ送信することである
サーバ。
【請求項３】
請求項２に記載のサーバであって、
前記記憶装置には、更に、フローと送信アクションとの対応関係を示す送信フィルタテーブルが格納され、
前記ネットワークアダプタは、更に、前記伝送機能によって前記仮想マシンから送信パケットを受け取る送信フィルタを備え、
前記送信フィルタは、前記送信フィルタテーブルを参照し、前記送信パケットのフローに対応付けられた前記送信アクションを前記送信パケットに対して行い、
前記経路切替部は、前記第１経路パターンフローが第１送信アクションに対応付けられ、前記第２経路パターンフローが第２送信アクションに対応付けられるように、前記送信フィルタテーブルを設定し、
前記第１送信アクションは、前記送信パケットを外部へ送信することであり、
前記第２送信アクションは、前記送信パケットを前記受信パケットとして前記受信フィルタへループバックさせることである
サーバ。
【請求項４】
請求項２に記載のサーバであって、
前記仮想マシンは、
前記仮想スイッチを介することなく前記ネットワークアダプタとパケットを送受信する第１送受信機能と、
前記仮想スイッチとパケットを送受信する第２送受信機能と、
フローとパケット転送先との対応関係を示すフローテーブルを参照し、前記仮想マシンの送信パケットを、前記送信パケットのフローに対応付けられた前記パケット転送先に転送する分岐機能と
を備え、
前記経路切替部は、前記第１経路パターンフローが第１パケット転送先に対応付けられ、前記第２経路パターンフローが第２パケット転送先に対応付けられるように、前記フローテーブルを設定し、
前記第１パケット転送先は、前記第１送受信機能であり、
前記第２パケット転送先は、前記第２送受信機能である
サーバ。
【請求項５】
請求項１乃至４のいずれか一項に記載のサーバであって、
前記経路切替部は、前記仮想マシンが送受信するパケットに基いてフロー毎の負荷を計測し、
前記計測された負荷が所定の閾値を超えたフローは、過負荷フローであり、
前記経路切替部は、前記過負荷フローを前記第１経路パターンフローに切り替える
サーバ。
【請求項６】
請求項１乃至４のいずれか一項に記載のサーバであって、
前記経路切替部は、あるフローの所定のパケットを受け取った場合、前記あるフローを前記第１経路パターンフローに切り替える
サーバ。
【請求項７】
請求項１乃至６のいずれか一項に記載のサーバであって、
前記経路切替部は、前記仮想スイッチに組み込まれている
サーバ。
【請求項８】
請求項１乃至６のいずれか一項に記載のサーバであって、
前記経路切替部は、前記ネットワークアダプタに組み込まれている
サーバ。
【請求項９】
サーバによって実行されるフロー制御プログラムが記録された記録媒体であって、
前記サーバは、
処理装置と、
前記処理装置に接続されたネットワークアダプタと
を備え、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信する伝送機能を有し、
前記フロー制御プログラムは、前記サーバに、経路切替機能を実現させ、
前記経路切替機能は、前記仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替え、
前記経路切替機能は、前記第１経路パターンフローを前記ネットワークアダプタの前記伝送機能に処理させ、前記第２経路パターンフローを前記仮想スイッチに処理させる
記録媒体。
【請求項１０】
サーバの処理装置に接続されるネットワークアダプタであって、
前記処理装置は、
仮想マシンと、
前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと
を備え、
前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信する伝送機能を有し、
前記ネットワークアダプタは、経路切替部を備え、
前記経路切替部は、前記仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替え、
前記経路切替部は、前記第１経路パターンフローを前記伝送機能に処理させ、前記第２経路パターンフローを前記仮想スイッチに処理させる
ネットワークアダプタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化技術に基づくサーバ、及び当該サーバによって実行されるフロー制御プログラムに関する。
【背景技術】
【０００２】
サーバの分野において、仮想化技術は重要である。具体的には、ＶＭｗａｒｅ（登録商標）やＸｅｎ（登録商標）といった仮想化ソフトウェアを用いた仮想化技術によって、１台の物理マシンを複数の仮想マシン（VM: Virtual Machine）として稼働させることができる。これにより、効率的なサーバ運用が可能となる。【０００３】
仮想化技術により、物理サーバ内には仮想マシンと共に仮想スイッチ（Virtual Switch）も構築される。仮想スイッチは、ソフトウェアベースのパケットスイッチであり、図１Ａ及び図１Ｂに示されるように、仮想マシン間、及び、仮想マシンと外部との間の通信を中継する。仮想スイッチは仮想マシンと隣接しているため、トラフィック制御が容易である。また、仮想スイッチはソフトウェアベースであるため、柔軟性及び拡張性に優れている。【０００４】
また、ＶＴ−ｄ／ＶＴ−ｃ（登録商標）といったＩ／Ｏ（入出力）仮想化技術が知られている。このＩ／Ｏ仮想化技術によれば、仮想スイッチを介することなく仮想マシンとネットワークインタフェースカード（NIC: Network Interface Card）との間で直接データのやりとりが可能となる。具体的には、図２に示されるように、仮想ＮＩＣが仮想マシン毎に構築される。そして、それら仮想ＮＩＣを利用することによって、仮想スイッチを完全にバイパスすることが可能となる。このような処理は、以下「ＮＩＣオフロード」と参照される。【０００５】
仮想化に関連する技術として、次のものが知られている。【０００６】
特許文献１（特表２００７−５２２５８３号公報）に開示された装置は、少なくとも１つのルータと、データ構造とを備える。データ構造は、当該少なくとも１つのルータによって、１つ以上の仮想ネットワークインタフェースカード（ＶＮＩＣ）間における接続を組織して仮想ネットワークを形成するために使用される。【０００７】
特許文献２（特開２００８−１０２９２９号公報）には、キューデータ構造を使用してネットワークアダプタと通信するための技術が開示されている。デバイスドライバは、キューデータ構造に関するルート複合体内のアドレス変換および保護テーブル（ＡＴＰＴ）項目を初期設定するためにデバイスドライバサービスを呼び出す。デバイスドライバサービスは、未変換アドレスをデバイスドライバに返し、その未変換アドレスは次にネットワークアダプタに提供される。キューデータ構造からキューエレメントを検索したことに応答して、ネットワークアダプタは、キューエレメントに指定された未変換アドレスの変換を要求し、キューエレメントに関連するバッファをターゲットにするデータパケットを受信する前に変換済みアドレスをネットワークアダプタに保管することができる。【０００８】
特許文献３（特開２００９−１５１７４５号公報）には、マルチプロセッサシステム上で仮想サーバを稼働させる仮想マシンモニタが開示されている。仮想マシンモニタは、物理ハードウェア情報取得部と、受付部と、割り当て処理部と、を備える。物理ハードウェア情報取得部は、マルチプロセッサシステムのプロセッサとメモリとＩ／Ｏデバイス及びネットワークを含むハードウェアの物理的な位置情報を含むハードウェアの構成情報を取得する。受付部は、生成する仮想サーバのプロセッサの数とメモリ量とＩ／Ｏデバイス及びリソースの割り当てポリシーとを含む生成要求を受け付ける。割り当て処理部は、受け付けた生成要求に基づいてＩ／Ｏデバイスを仮想サーバに割り当ててから、割り当てポリシーを満たすようにプロセッサとメモリを仮想サーバに割り当てる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特表２００７−５２２５８３号公報
【特許文献２】特開２００８−１０２９２９号公報
【特許文献３】特開２００９−１５１７４５号公報
【発明の概要】
【００１０】
図１Ａ及び図１Ｂの場合、仮想スイッチは、仮想マシンと外部との間の全てのトラフィックを中継する。つまり、仮想スイッチにはトラフィックが集中する。また、仮想スイッチはソフトウェアベースであり、場合によってはシングルスレッドでスイッチ処理が進行する。その場合、集中するトラフィックを処理しきれなくなる。このようなことから、仮想スイッチは、ネットワーク処理におけるボトルネックになりやすい。
【００１１】
一方、図２で示されたＮＩＣオフロードを利用すれば、仮想スイッチを完全にバイパスすることが可能となる。しかしながらこの場合、パケット通信経路は固定され、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受することができなくなる。
【００１２】
本発明の１つの目的は、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチへのトラフィックの集中を抑制することにある。
【００１３】
本発明の１つの観点において、サーバが提供される。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、経路切替部と、を備える。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信する伝送機能を有する。経路切替部は、仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える。そして、経路切替部は、第１経路パターンフローをネットワークアダプタの上記伝送機能に処理させ、第２経路パターンフローを仮想スイッチに処理させる。
【００１４】
本発明の他の観点において、サーバによって実行されるフロー制御プログラムが提供される。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信する伝送機能を有する。フロー制御プログラムは、サーバに、経路切替機能を実現させる。経路切替機能は、仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える。そして、経路切替機能は、第１経路パターンフローをネットワークアダプタの上記伝送機能に処理させ、第２経路パターンフローを仮想スイッチに処理させる。
【００１５】
本発明の更に他の観点において、サーバの処理装置に接続されるネットワークアダプタが提供される。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信する伝送機能を有する。ネットワークアダプタは、経路切替部を備える。経路切替部は、仮想マシンが送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える。そして、経路切替部は、第１経路パターンフローを上記伝送機能に処理させ、第２経路パターンフローを仮想スイッチに処理させる。
【００１６】
本発明によれば、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチへのトラフィックの集中を抑制することが可能となる。
【図面の簡単な説明】
【００１７】
上記及び他の目的、長所、特徴は、次の図面と共に説明される本発明の実施の形態により明らかになるであろう。【００１８】
【図１Ａ】図１Ａは、仮想スイッチの一例を示す概念図である。
【図１Ｂ】図１Ｂは、仮想スイッチの他の例を示す概念図である。
【図２】図２は、ＮＩＣオフロード機能を示す概念図である。
【図３】図３は、本発明の実施の形態に係るネットワークシステムの構成例を概略的に示すブロック図である。
【図４】図４は、本発明の実施の形態に係るサーバのハードウェア構成を示すブロック図である。
【図５】図５は、本発明の実施の形態に係るサーバの構成を概念的に示すブロック図である。
【図６】図６は、本発明の実施の形態に係るネットワークアダプタの基本構成を示すブロック図である。
【図７】図７は、本発明の実施の形態における受信フィルタテーブルの一例を示す概念図である。
【図８】図８は、本発明の実施の形態に係る経路切替部の機能を説明するための概略図である。
【図９】図９は、本発明の実施の形態に係る経路切替処理の一例を説明するための概念図である。
【図１０】図１０は、本発明の実施の形態における送信フィルタテーブルの一例を示す概念図である。
【図１１】図１１は、本発明の実施の形態における２つの経路パターンを説明するための概念図である。
【図１２】図１２は、本発明の実施の形態における送受信フィルタテーブルの一例を示す概念図である。
【図１３】図１３は、本発明の実施の形態に係る仮想スイッチの構成例を示すブロック図である。
【図１４】図１４は、本発明の実施の形態におけるキャッシュ制御を説明するための概念図である。
【図１５】図１５は、本発明の第１の実施の形態に係る仮想スイッチの構成を示すブロック図である。
【図１６】図１６は、第１の実施の形態における処理を示すフローチャートである。
【図１７】図１７は、本発明の実施の形態におけるフローテーブルの一例を示す概念図である。
【図１８】図１８は、本発明の実施の形態におけるポート−ＶＭ対応表の一例を示す概念図である。
【図１９】図１９は、第１の実施の形態における処理を示す概念図である。
【図２０】図２０は、第１の実施の形態における処理を説明するための概念図である。
【図２１】図２１は、本発明の第２の実施の形態に係る構成例を示すブロック図である。
【図２２】図２２は、第２の実施の形態における処理を示すフローチャートである。
【図２３】図２３は、本発明の第３の実施の形態に係る構成例を示すブロック図である。
【図２４】図２４は、本発明の実施の形態に係る経路切替処理の他の例を説明するためのブロック図である。
【図２５】図２５は、図２４で示された仮想マシンの分岐機能が参照するフローテーブルの一例を示す概念図である。
【図２６】図２６は、図２４の場合の仮想スイッチの構成を示すブロック図である。
【発明を実施するための形態】
【００１９】
添付図面を参照して、本発明の実施の形態を説明する。
【００２０】
１．基本構成
図３は、本実施の形態に係るネットワークシステム１の構成例を概略的に示すブロック図である。ネットワークシステム１は、ネットワーク（不図示）に接続された複数のサーバ１０を備えている。サーバ１０間には、複数のスイッチが配置されている。このネットワークシステム１は、ファイアウォールやロードバランサといったネットワークアプライアンスを介して外部ネットワークに接続されている。ネットワークシステム１は、例えばデータセンタ（data center）内のネットワークシステムである。
【００２１】
図４は、本実施の形態に係るサーバ（物理サーバ）１０のハードウェア構成を示すブロック図である。サーバ１０は、ＣＰＵ（Central Processing Unit）２０、メインメモリ３０、及びネットワークアダプタ（ネットワークインタフェース装置）１００を備えている。ネットワークアダプタ１００は、ネットワークカードまたはＮＩＣ（Network Interface Card）とも呼ばれる。ＣＰＵ２０、メインメモリ３０、及びネットワークアダプタ１００は、互いに接続されている。
【００２２】
メインメモリ３０には、仮想化ソフトウェアやフロー制御プログラムＰＲＯＧが格納される。仮想化ソフトウェアは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、サーバ１０上に仮想マシン（VM: Virtual Machine）や仮想スイッチ（Virtual Switch）を構築する。フロー制御プログラムＰＲＯＧは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、後に説明される「経路切替機能」をサーバ１０に実装する。仮想化ソフトウェアやフロー制御プログラムＰＲＯＧは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。フロー制御プログラムＰＲＯＧは、仮想化ソフトウェアに組み込まれていてもよい。
【００２３】
図５は、本実施の形態に係るサーバ１０の構成を概念的に示すブロック図である。サーバ１０は、処理装置４０と、処理装置４０に接続されたネットワークアダプタ１００とを備えている。処理装置４０は、上述のＣＰＵ２０、メインメモリ３０、仮想化ソフトウェア及びフロー制御プログラムＰＲＯＧの協働により実現され、仮想環境に基づく様々な機能を備える。具体的には、処理装置４０は、ハイパーバイザ５０、仮想スイッチ２００、及び少なくとも１台の仮想マシン（仮想サーバ）３００を備える。ハイパーバイザ５０は、各仮想マシン３０の動作を管理し、また、仮想マシン３００間の通信伝送路を提供する。ハイパーバイザ５０は、仮想マシンモニタ（VMM: Virtual Machine Monitor）とも呼ばれる。仮想スイッチ２００は、仮想マシン３００が送受信するパケットを外部との間で中継する。仮想スイッチ２００は、制御用の仮想マシン（Control VM）上で動作してもよいし（図１Ａ参照）、ハイパーバイザ５０上で動作してもよい（図１Ｂ参照）。各仮想マシン３００（Guest VM）上では、それぞれのアプリケーションが稼働する。制御用の仮想マシン（Control
VM）は、入出力処理用の仮想マシン（IOVM）とも呼ばれる。
【００２４】
本実施の形態では、ネットワークアダプタ１００による「ＮＩＣオフロード」が可能である。つまり、仮想スイッチ２００を介することなく、ネットワークアダプタ１００と仮想マシン３００との間で直接データのやりとりが可能である。
【００２５】
図６は、本実施の形態に係るネットワークアダプタ１００の基本構成を示すブロック図である。ネットワークアダプタ１００は、仮想ＮＩＣ（図中、破線枠で示されている）、受信フィルタ１１０、送信フィルタ１２０、記憶装置１３０、及びデータ直接伝送機能１４０を備えている。データ直接伝送機能１４０は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを直接送受信する機能である。詳細には、データ直接伝送機能１４０は、ネットワークアダプタ１００の送受信キューと仮想マシン３００が利用するアドレス空間との間で直接データ転送を行う。
【００２６】
仮想ＮＩＣは、仮想マシン３００（ＶＭ１，ＶＭ２・・・）毎に設けられる。各仮想ＮＩＣは、受信キュー１０１と送信キュー１０２を含んでいる。受信キュー１０１には、ネットワークアダプタ１００がデータリンクから受け取った受信パケットが格納される。受信キュー１０１に格納された受信パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接送られる。また、ネットワークアダプタ１００がデータ直接伝送機能１４０によって仮想マシンから直接受け取った送信パケットは、その仮想マシンに対応する送信キュー１０２に格納される。
【００２７】
また、仮想ＮＩＣは、仮想スイッチ２００に対しても設けられる。仮想スイッチ２００とつながる仮想ＮＩＣの受信キュー１０１及び送信キュー１０２は、以下、受信キュー１０１−Ｓ及び送信キュー１０２−Ｓとそれぞれ参照される。受信キュー１０１−Ｓには、ネットワークアダプタ１００が外部データリンクから受け取った受信パケットが格納される。受信キュー１０１−Ｓに格納された受信パケットは、仮想スイッチ２００に送られる。また、ネットワークアダプタ１００が仮想スイッチ２００から受け取った送信パケットは、送信キュー１０２−Ｓに格納される。
【００２８】
送信フィルタ１２０は、それぞれの送信キュー１０２、１０２−Ｓを所定の順序／タイミングで選択する。そして、送信フィルタ１２０は、選択した送信キュー１０２あるいは１０２−Ｓから送信パケットを取り出し、その送信パケットをデータリンクへ送出する。尚、送信キュー１０２には、パケット自体のデータでなく、パケットを格納している仮想マシン３００内のアドレスなど、パケットのメタデータのみを格納することもできる。この場合、送信フィルタ１２０は、次にパケットを取り出す送信キュー１０２を選択すると、該当キューに格納されたパケットのメタデータを用いて、当該パケットを仮想マシン３００から転送するよう、データ直接伝送機能１４０に指示する。
【００２９】
受信フィルタ１１０は、データリンクから受信パケットを受け取る。受信フィルタ１１０は、その受信パケットをどの受信キュー１０１あるいは１０１−Ｓに格納するかを判定する。その判定に用いられるのが、「受信フィルタテーブルＦＩＬＴ１」である。受信フィルタテーブルＦＩＬＴ１は、記憶装置１３０に格納されている。記憶装置１３０の例としては、ＤＲＡＭ、ＳＲＡＭ、連想メモリ（CAM: Content Addressable Memory）等が挙げられる。
【００３０】
受信フィルタテーブルＦＩＬＴ１は、フローと受信アクションとの対応関係を示すテーブルである。受信フィルタ１１０は、その受信フィルタテーブルＦＩＬＴ１を参照し、受信パケットのフローに対応付けられた受信アクションを受信パケットに対して行う。受信アクションとしては、２パターン考えられる。第１受信アクションは、「データ直接伝送機能１４０を用いることによって、受信パケットを指定された仮想マシン３００に直接送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、指定された受信キュー１０１に格納する。第２受信アクションは、「受信パケットを仮想スイッチ２００へ送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。
【００３１】
図７は、受信フィルタテーブルＦＩＬＴ１の一例を示している。受信フィルタテーブルＦＩＬＴ１は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの受信パケットに対して行われる受信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、受信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（http://www.openflowswitch.org/を参照）のフローテーブルにおけるキーと同様である。受信アクションには、受信パケットの格納先となる受信キューが記述されている。例えば、「受信アクション：ＶＭ１」は、仮想マシンＶＭ１宛の受信キュー１０１を意味し、上述の第１受信アクションに相当する。また、「受信アクション：ｖｓｗｉｔｃｈ」は、仮想スイッチ２００宛の受信キュー１０１−Ｓを意味し、上述の第２受信アクションに相当する。
【００３２】
受信フィルタ１１０は、受信パケットを受け取ると、その受信パケットのヘッダ情報を用いて受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリ（exact match entry）を検索する。受信パケットのフローにマッチするイグザクトマッチエントリが有る場合、受信フィルタ１１０は、そのイグザクトマッチエントリで指定された第１受信アクションを受信パケットに対して行う。例えば、図７の例において、受信フィルタ１１０は、フローｆｌｏｗ１に属する受信パケットを、仮想マシンＶＭ１宛の受信キュー１０１に格納する。一方、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合、受信フィルタ１１０は、第２受信アクションを受信パケットに対して行う、すなわち、受信パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。このようにして、ＮＩＣオフロードが可能となる。
【００３３】
本実施の形態に係るサーバ１０は、更に、「経路切替部６０」を備えている。図８は、本実施の形態に係る経路切替部６０の機能を説明するための概略図である。本実施の形態において、経路切替部６０は、仮想マシン３００が送受信するパケットの伝送経路を“動的”に切り替える。
【００３４】
より詳細には、仮想マシン３００が送受信するパケットの伝送経路には、２パターン考えられる。第１の経路パターンでは、上述のネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００と仮想マシン３００との間で直接パケットが送受信される（ＮＩＣオフロード）。一方、第２の経路パターンでは、少なくとも仮想スイッチ２００を介して仮想マシン３００に対してパケットが送受信される。第１及び第２の経路パターンのフローは、以下、それぞれ、「第１経路パターンフロー」及び「第２経路パターンフロー」と参照される。
【００３５】
経路切替部６０は、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定する。更に、経路切替部６０は、その経路設定を、所定の条件に応じて動的に切り替える。すなわち、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える（分別する）。そして、経路切替部６０は、第１経路パターンフローをネットワークアダプタ１００のデータ直接伝送機能１４０に処理させ、一方、第２経路パターンフローを仮想スイッチ２００に処理させる。
【００３６】
このように、本実施の形態によれば、全てのフローが固定的に仮想スイッチ２００をバイパスするわけではない。所望のフロー（第１経路パターンフロー）のみがＮＩＣオフロードされ、仮想スイッチ２００をバイパスする。他のフロー（第２経路パターンフロー）は、通常通り、仮想スイッチ２００を通して伝送される。その結果、仮想スイッチ２００を利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチ２００へのトラフィックの集中を抑制することが可能となる。
【００３７】
尚、経路切替部６０は、サーバ１０（ＣＰＵ２０）がフロー制御プログラムＰＲＯＧを実行することにより実現される。経路切替部６０は、図５に示されるように処理装置４０に組み込まれていてもよい。あるいは、経路切替部６０は、ネットワークアダプタ１００に組み込まれていてもよい（後の第３−３節で説明される）。典型的には、経路切替部６０は、処理装置４０の仮想スイッチ２００あるいはハイパーバイザ５０に組み込まれる。但し、それに限定されない。
【００３８】
以下、本実施の形態に係る経路切替処理を更に詳しく説明する。
【００３９】
２．経路切替処理の一例
図９は、本実施の形態に係る経路切替処理の一例を説明するための概念図である。本処理例では、ネットワークアダプタ１００に、受信フィルタテーブルＦＩＬＴ１だけでなく、「送信フィルタテーブルＦＩＬＴ２」も設けられる。受信フィルタテーブルＦＩＬＴ１と同様に、送信フィルタテーブルＦＩＬＴ２も記憶装置１３０に格納される。尚、受信フィルタテーブルＦＩＬＴ１と送信フィルタテーブルＦＩＬＴ２は、まとめて「フィルタテーブルＦＩＬＴ」と参照される場合がある。
【００４０】
２−１．送信フィルタテーブル
送信フィルタテーブルＦＩＬＴ２は、フローと送信アクションとの対応関係を示すテーブルである。送信フィルタ１２０は、その送信フィルタテーブルＦＩＬＴ２を参照し、送信パケットのフローに対応付けられた送信アクションを送信パケットに対して行う。送信アクションとしては、２パターン考えられる。第１送信アクションは、「送信パケットを外部のデータリンクへ送信すること」である。この場合、送信フィルタ１２０は、送信パケットをデータリンクへ送出する。第２送信アクションは、「送信パケットを受信パケットして受信フィルタ１１０（受信経路）へループバックさせること」である。この場合、送信フィルタ１２０は、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
【００４１】
図１０は、送信フィルタテーブルＦＩＬＴ２の一例を示している。送信フィルタテーブルＦＩＬＴ２は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの送信パケットに対して行われる送信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、送信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（http://www.openflowswitch.org/を参照）のフローテーブルにおけるキーと同様である。送信アクションには、第１送信アクション「ｏｕｔ」あるいは第２送信アクション「ｌｏｏｐｂａｃｋ」が記述されている。
【００４２】
送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出すと、その送信パケットのヘッダ情報を用いて送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリ（exact match entry）を検索する。送信パケットのフローにマッチするイグザクトマッチエントリが有る場合、送信フィルタ１２０は、そのイグザクトマッチエントリで指定された第１送信アクション（ｏｕｔ）を送信パケットに対して行う、すなわち、送信パケットをデータリンクに送出する。一方、送信パケットのフローにマッチするイグザクトマッチエントリが無い場合、送信フィルタ１２０は、第２送信アクション（ｌｏｏｐｂａｃｋ）を送信パケットに対して行う、すなわち、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
【００４３】
図９及び図１１を参照して、２つの経路パターンを説明する。図９及び図１１の例では、受信フィルタテーブルＦＩＬＴ１において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１受信アクションに対応付けられており、その他のフローは第２受信アクションに対応付けられている。また、送信フィルタテーブルＦＩＬＴ２において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１送信アクションに対応付けられており、その他のフローは第２送信アクションに対応付けられている。
【００４４】
本処理例において、仮想マシン３００から送出される送信パケットは、まず、ネットワークアダプタ１００に入力される。このとき、その送信パケットは、ネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００に直接入力される。送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出す。
【００４５】
送信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリがヒットする。従って、送信フィルタ１２０は、その送信パケットをデータリンクに送出する。つまり、当該送信パケットは、仮想スイッチ２００を通過することなく、仮想マシン３００からネットワークアダプタ１００を介して外部に送信される。これは、上述の第１の経路パターンに相当する。
【００４６】
一方、送信パケットがその他のフローに属する場合、送信フィルタテーブルＦＩＬＴ２中のいずれのイグザクトマッチエントリもヒットしない。従って、送信フィルタ１２０は、その送信パケットを受信パケットとして受信フィルタ１１０にループバックする。受信フィルタテーブルＦＩＬＴ１においても、いずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを受信キュー１０１−Ｓを介して仮想スイッチ２００へ送る。つまり、当該パケットは、一旦ネットワークアダプタ１００に入力された後、仮想スイッチ２００によって処理されることになる。これは、上述の第２の経路パターンに相当する。
【００４７】
データリンクから受け取る受信パケットに関しては、次の通りである。受信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリがヒットする。従って、受信フィルタ１１０は、その受信パケットを、対応する仮想マシン３００宛の受信キュー１０１に格納する。その受信パケットは、データ直接伝送機能１４０によって、仮想スイッチ２００を介することなく、対応する仮想マシン３００に直接送られる。これは、上述の第１の経路パターンに相当する。
【００４８】
一方、受信パケットがその他のフローに属する場合、受信フィルタテーブルＦＩＬＴ１中のいずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。よって、その受信パケットは、仮想スイッチ２００によって処理されることになる。これは、上述の第２の経路パターンに相当する。
【００４９】
尚、図１２に示されるように、受信フィルタテーブルＦＩＬＴ１と送信フィルタテーブルＦＩＬＴ２とは組み合わされて、単一の送受信フィルタテーブルとして提供されてもよい。図１２の例では、第２受信アクションと第２送信アクションは共通であり、「ｖｓｗｉｔｃｈ：パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納すること」である。これによっても、受信経路への送信パケットのループバックが実現される。
【００５０】
２−２．経路切替部６０
以上に説明されたように、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定により、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定することができる。そして、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定を変更することによって、フロー経路を“動的”に切り替えることも可能である。そのようなエントリ設定及び設定変更を行うのが、経路切替部６０である。
【００５１】
具体的には、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、所定の基準に基いて、第１経路パターンフローあるいは第２経路パターンフローに割り当てる。その割り当ては、動的に変更可能である。そして、経路切替部６０は、第１経路パターンフローが上述の第１受信アクションに対応付けられ、第２経路パターンフローが上述の第２受信アクションに対応付けられるように、受信フィルタテーブルＦＩＬＴ１を設定する。また、経路切替部６０は、第１経路パターンフローが上述の第１送信アクションに対応付けられ、第２経路パターンフローが上述の第２送信アクションに対応付けられるように、送信フィルタテーブルＦＩＬＴ２を設定する。その結果、第１経路パターンフローは、仮想スイッチ２００を介することなく処理される、すなわち、ＮＩＣオフロードされる。一方、第２経路パターンフローは、仮想スイッチ２００によって処理されることになる。
【００５２】
尚、同一フローに関するフィルタエントリが、受信フィルタテーブルＦＩＬＴ１あるいは送信フィルタテーブルＦＩＬＴ２のいずれか一方にだけ設定されてもよい。その場合、受信側と送信側とで、経路パターンは非対称になる。例として、既出の図９及び図１１において、フローｆｌｏｗ１に関するフィルタエントリが送信フィルタテーブルＦＩＬＴ２にのみ設定される場合を考える。その場合、フローｆｌｏｗ１に関しては、送信パケットの伝送経路は、仮想スイッチ２００を介さない第１の経路パターンとなり、受信パケットの伝送経路は、仮想スイッチ２００を通過する第２の経路パターンとなる。
【００５３】
経路切替部６０は、例えば、仮想スイッチ２００に組み込まれる。図１３は、その場合の仮想スイッチ２００の機能構成例を示すブロック図である。仮想スイッチ２００は、フロー識別機能２１０、パケットスイッチ機能２２０、ＶＭ識別機能２３０、キュー判定機能２４０、及びＮＩＣ設定機能２５０を備えている。
【００５４】
仮想スイッチ２００は、ネットワークアダプタ１００あるいは仮想マシン３００からパケットを受け取る。フロー識別機能２１０は、受け取ったパケットのヘッダ情報に基いて、当該パケットの属するフローを識別する。また、フロー識別機能２１０は、フロー識別情報（Ｋｅｙ）とアクション（Ａｃｔｉｏｎ）との対応関係を示すフローテーブルＴＢＬを参照して、当該パケットに対して実施すべきアクションを得る。パケットスイッチ機能２２０は、そのアクションに従って当該パケットを処理する。典型的には、フローテーブルＴＢＬのアクションにはパケットの出力ポート（転送先）が記述されている。パケットスイッチ機能２２０は、アクションで指定された出力ポートからパケットを出力する。出力されたパケットは、ネットワークアダプタ１００あるいは仮想マシン３００へ送られる。
【００５５】
尚、当該パケットにマッチするフローエントリがフローテーブルＴＢＬに無い場合、フロー識別機能２１０は、当該パケットに対して所定の処理を実施する。例えば、フロー識別機能２１０は、オープンフローコントローラ（OFC: Open Flow Controller）に当該パケットを転送し、経路設定を要求する。
【００５６】
ＶＭ識別機能２３０は、指定されたフローに関して、当該フローに属するパケットを送受信する仮想マシン３００を特定する。ここで、「指定されたフロー」とは、ネットワークアダプタ１００上のフィルタテーブルＦＩＬＴに対するエントリ設定が望まれるフローである。キュー判定機能２４０は、ＶＭ識別機能２３０によって特定された仮想マシン３００に関連付けられた送受信キュー（１０１、１０２）を判定する。ＮＩＣ設定機能２５０は、その送受信キューを適宜参照することによって、フィルタテーブルＦＩＬＴに設定すべきフィルタエントリを作成する。そして、ＮＩＣ設定機能２５０は、作成したフィルタエントリをネットワークアダプタ１００に通知し、フィルタテーブルＦＩＬＴの設定・変更を行う。
【００５７】
経路切替部６０は、これらＶＭ識別機能２３０、キュー判定機能２４０、及びＮＩＣ判定機能２５０を含んでいる。
【００５８】
２−３．キャッシュ制御
フィルタテーブルＦＩＬＴのキャッシュ制御も可能である。これは、ネットワークアダプタ１００に比較的小規模な記憶装置１３０しか搭載できない場合に好適である。図１４を参照して、キャッシュ制御を説明する。
【００５９】
図１４に示されるように、フィルタテーブルＦＩＬＴの本体は、サーバ１０のメインメモリ３０（図４参照）に格納される。上述のＮＩＣ設定機能２５０（経路切替部６０）は、メインメモリ３０上のフィルタテーブルＦＩＬＴの設定・変更を行う。
【００６０】
ネットワークアダプタ１００の記憶装置１３０は、比較的小規模（例：数十ＫＢｙｔｅ）なキャッシュメモリである。キャッシュメモリ１３０にキャッシュされるフィルタテーブルＦＩＬＴ（ｃａｃｈｅ）は、メインメモリ３０に格納されているフィルタテーブルＦＩＬＴの本体の一部である。
【００６１】
ネットワークアダプタ１００の受信フィルタ１１０及び送信フィルタ１２０の各々は検索機能１１５を備える。パケットを受け取った際、検索機能１１５はまず、キャッシュメモリ１３０にキャッシュされているエントリを調べる。キャッシュヒットの場合、検索機能１１５は、ヒットエントリに従って、上述の通りパケットを処理する。一方、キャッシュミスの場合、検索機能１１５は、メインメモリ３０にアクセスし、フィルタテーブルＦＩＬＴの本体から必要なエントリを検索取得する。そして、検索機能１１５は、取得したエントリをキャッシュメモリ１３０に格納し、当該エントリに従ってパケットを処理する。空きエントリが無い場合、検索機能１１５は、キャッシュエントリの入れ換えも行う。
【００６２】
尚、フィルタテーブルＦＩＬＴの各エントリは、パケットが処理される毎に更新される統計情報を含んでいてもよい。図１４の例では、各エントリは、当該エントリのマッチ回数を含んでいる。検索機能１１５は、所定のタイミングで、この統計情報をキャッシュメモリ１３０からメインメモリ３０にライトバックする。所定のタイミングとしては、経路切替部６０がその統計情報を必要としたとき、キャッシュメモリ１３０からエントリが削除されるとき、等が例示される。
【００６３】
３．様々な実施の形態
上述の通り、第１経路パターンフローは、仮想スイッチ２００を介することなく処理される、すなわち、ＮＩＣオフロードされる。このＮＩＣオフロードにより、仮想スイッチ２００へのトラフィックの集中が抑制される。ＮＩＣオフロード対象の第１経路パターンフローとしては、様々な候補が考えられる。また、ＮＩＣオフロードの設定タイミングとしても、様々考えられる。以下、いくつかの実施形態を説明する。
【００６４】
３−１．第１の実施の形態
第１の実施の形態では、ＮＩＣオフロード対象としての第１経路パターンフローは、負荷が所定の閾値を超えた「過負荷フロー」である。一方、第２経路パターンフローは、負荷が所定の閾値以下である「通常負荷フロー」である。ＮＩＣオフロードの開始タイミングは、あるフローが通常負荷フローから過負荷フローになったときであり、ＮＩＣオフロードの終了タイミングは、あるフローが過負荷フローから通常負荷フローに戻ったときである。
【００６５】
そのために、経路切替部６０は、仮想マシン３００が送受信するパケットに基いて、フロー毎の負荷を計測する。経路切替部６０は、計測負荷と所定の閾値とを比較し、フロー毎に通常負荷フローあるいは過負荷フローの判定を行う。あるフローが通常負荷フローから過負荷フローになった場合、経路切替部６０は、当該過負荷フローを第１経路パターンフローに切り替える。その結果、当該過負荷フローは、ＮＩＣオフロードされ、仮想スイッチ２００をバイパスすることになる。また、あるフローが過負荷フローから通常負荷フローに戻った場合、経路切替部６０は、当該フローを第１経路パターンフローから第２経路パターンフローに戻す。その結果、当該フローは、仮想スイッチ２００によって処理されることになる。
【００６６】
このように、第１の実施の形態では、過負荷フローのみがＮＩＣオフロードされる。従って、仮想スイッチ２００へのトラフィック集中を効率的に低減することができる。また、フィルタテーブルＦＩＬＴに設定されるエントリ数は比較的少ない。従って、ネットワークアダプタ１００に比較的小規模な記憶装置１３０しか搭載できない場合であっても、第１の実施の形態は可能である。また、送信側と受信側とで負荷が不均一になる場合、送信側と受信側とで経路パターンを非対称にしてもよい。
【００６７】
以下、第１の実施の形態の具体的な構成例及び動作例を説明する。本例では、経路切替部６０は、仮想スイッチ２００に組み込まれる。
【００６８】
図１５は、第１の実施の形態における仮想スイッチ２００の構成を示すブロック図である。第１の実施の形態において、仮想スイッチ２００は、既出の図１３で示された構成に加えて、処理負荷計測機能２６０、経路変更判定機能２７０、及び宛先添付データ付与機能２８０を更に備えている。処理負荷計測機能２６０は、送受信パケットを所定の頻度でサンプリングし、その送受信パケットに基いて、フロー毎の負荷（パケット処理量、処理負荷）を計測する。また、処理負荷計測機能２６０は、計測結果を示す負荷情報を保持する。経路変更判定機能２７０は、負荷情報を参照することにより、各フローが過負荷フロー（第１経路パターンフロー）か通常負荷フロー（第２経路パターンフロー）かを判定する。すなわち、経路変更判定機能２７０は、負荷情報に基いて、第１経路パターンフローと第２経路パターンフローの区分を動的に変更する。そして、経路変更判定機能２７０は、経路パターンを切り替えるべきフローを、ＶＭ識別機能２３０に指定する。宛先添付データ付与機能２８０に関しては、後述される。
【００６９】
図１６は、第１の実施の形態における処理例を示すフローチャートである。まず、仮想スイッチ２００は、ネットワークアダプタ１００あるいは仮想マシン３００からパケットを受け取る（ステップＡ１０）。フロー識別機能２１０は、受け取ったパケットのヘッダ情報に基いて、当該パケットの属するフローを識別する。また、フロー識別機能２１０は、フローテーブルＴＢＬを参照して、当該パケットに対して実施すべきアクションを得る（ステップＡ２０）。
【００７０】
図１７は、フローテーブルＴＢＬの一例を示している。フローテーブルＴＢＬは、複数のテーブルエントリを有している。各テーブルエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローのパケットに対して行われるアクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。アクションには、典型的には、パケットの出力ポート（転送先）が記述されている。このフローテーブルＴＢＬは、所定の記憶装置（典型的にはメインメモリ３０）に格納される。また、図１７の例では、各テーブルエントリは、ネットワークアダプタ１００上の該当エントリの有無を示すフラグも有する。このフラグは、ネットワークアダプタ１００がどのようなフィルタエントリを保持しているかを仮想スイッチ２００側で把握しておくために設けられる。
【００７１】
パケットスイッチ機能２２０は、ステップＡ２０で得られたアクションに従って、スイッチ処理を行う（ステップＡ３０）。典型的には、パケットスイッチ機能２２０は、アクションで指定された出力ポートからパケットを出力する。出力されたパケットは、ネットワークアダプタ１００あるいは仮想マシン３００へ送られる。
【００７２】
その一方で、処理負荷計測機能２６０は、パケット処理に応答して、上記負荷情報を更新する（ステップＡ４０）。また、経路変更判定機能２７０は、負荷情報を参照して、処理されたパケットのフローに関する負荷を所定の閾値と比較する（ステップＡ５０）。負荷が所定の閾値を超えた場合（ステップＡ５０；Ｙｅｓ）、経路変更判定機能２７０は、当該フローを過負荷フローとみなし、第１経路パターンフローに割り当てる。そして、経路変更判定機能２７０は、当該フローをＮＩＣオフロード対象に指定し、ＶＭ識別機能２３０に通知する。
【００７３】
続いて、仮想スイッチ２００は、オフロード設定処理を行う（ステップＡ６０）。具体的には、ＶＭ識別機能２３０は、経路変更判定機能２７０によって指定されたフローに関して、当該フローに属するパケットを送受信する仮想マシン３００を特定する（ステップＡ６１）。このとき、ＶＭ識別機能２３０は、図１８に示されるようなポート−ＶＭ対応表を参照して、仮想マシン３００の特定を行ってもよい。キュー判定機能２４０は、ＶＭ識別機能２３０によって特定された仮想マシン３００に関連付けられた送受信キューを判定する（ステップＡ６２）。ＮＩＣ設定機能２５０は、その送受信キューを適宜参照することによって、フィルタテーブルＦＩＬＴに設定すべきフィルタエントリを作成する。そして、ＮＩＣ設定機能２５０は、作成したフィルタエントリをネットワークアダプタ１００に通知し、フィルタテーブルＦＩＬＴの設定を行う（ステップＡ６３）。また、ＮＩＣ設定機能２５０は、図１７で示された該当エントリのフラグを「有」に設定する。
【００７４】
このようにして、過負荷フローとなったフローはＮＩＣオフロードされることになる。図１９は、第１の実施の形態における処理イメージを示す概念図である。尚、当該フローが過負荷フローから通常負荷フローに戻った場合、オフロード設定は解除される。オフロード設定を解除する場合、当該フローに関するフィルタエントリを、フィルタテーブルＦＩＬＴから削除すればよい。また、図１７で示された該当エントリのフラグが「無」に設定される。
【００７５】
図２０を参照して、宛先添付データ付与機能２８０の役割を説明する。ネットワークアダプタ１００上にフィルタエントリが無い状態で、データリンク→仮想スイッチ２００→仮想マシン３００というパケット配送を行う場合がある。ここで、仮想スイッチ２００から出てきたパケットが「外宛」か「仮想マシン（ＶＭ）宛」かを示す情報が無ければ、ネットワークアダプタ１００は当該パケットをどちらに送ればいいか分からない。そのため、パケット自体に宛先データを持たせる。具体的には、仮想スイッチ２００の宛先添付データ付与機能２８０は、仮想スイッチ２００が出力するパケットに、「外宛」か「ＶＭ宛」かを示す宛先データを付与する。ネットワークアダプタ１００は、その宛先データを参照してパケット配送先を決定するパケット送出判定機能１５０を備える。
【００７６】
例として、図２０中の仮想マシンＶＭ１宛のｆｌｏｗ３を考える。仮想スイッチ２００は、ｆｌｏｗ３のパケットを受け取ると、フローテーブルＴＢＬを参照することにより、そのパケットが仮想マシンＶＭ１宛であることを認識する。よって、宛先添付データ付与機能２８０は、「ＶＭ１宛」を示す宛先データをパケットに付与する。そのパケットがネットワークアダプタ１００に供給された場合、パケット送出判定機能１５０は、当該パケットに付与されている宛先データを参照して、当該パケットを仮想マシンＶＭ１に送出することを判定する。一方、図２０中のｆｌｏｗ１、ｆｌｏｗ２の場合のように、仮想マシンＶＭ１からの送信パケットには宛先データは添付されてない。その場合は、上述の通り、送信フィルタテーブルＦＩＬＴ２のフィルタエントリに従って送信パケットが処理される。
【００７７】
３−２．第２の実施の形態
第２の実施の形態では、「所定のパケット」を契機として、ＮＩＣオフロード設定が行われる。つまり、経路切替部６０は、あるフローの「所定のパケット」を受け取った場合、当該フローをＮＩＣオフロード対象としての第１経路パターンフローに割り当てる。その後、当該フローはＮＩＣオフロードされ、当該フローに属するパケットは仮想スイッチ２００をバイパスすることになる。また、第１経路パターンフローのパケットが処理されない期間が一定以上続く、すなわち、第１経路パターンフローに関してタイムアウトが発生する場合がある。その場合、経路切替部６０は、当該フローを第１経路パターンフローから第２経路パターンフローに戻してもよい。
【００７８】
「所定のパケット」の例としては、第１パケットが挙げられる。第１パケットとは、あるフローに属するパケットのうち最初に受信されるパケットであり、当該フローのエントリがまだ作成されていない状態で受信されるパケットである。この場合、当該フローの第１パケット以降のパケットがＮＩＣオフロードされる。また、「所定のパケット」の他の例として、ＨＴＴＰリクエストＵＲＬを含むパケットが挙げられる。この場合、仮想スイッチでＤＰＩ（Deep Packet Inspection）処理が行われた後、残りのパケットがＮＩＣオフロードされる。ここで、ＤＰＩ処理とは、パケットが含むトランスポートレイヤより上位レイヤの情報、例えばパケットが含むＵＲＬの内容を用いて、同パケットが属するフローの宛先／処理方法を決定することである。
【００７９】
このように、第２の実施の形態では、データプレーンのトラフィックの多くがＮＩＣオフロードされる。従って、第１の実施の形態と比較して、仮想スイッチ２００へのトラフィック集中をより低減することが可能となる。また、データプレーンのトラフィックの多くがＮＩＣオフロードされる一方で、コントロールプレーンはＮＩＣオフロードされない。これにより、仮想スイッチ２００を利用した柔軟性は確保される。
【００８０】
以下、第２の実施の形態の具体的な構成例及び動作例を説明する。本例では、経路切替部６０は、仮想スイッチ２００に組み込まれる。また、「所定のパケット」は第１パケットである。
【００８１】
図２１は、第２の実施の形態におけるネットワークアダプタ１００及び仮想スイッチ２００の構成例を示すブロック図である。ネットワークアダプタ１００の構成は、図９で示されたものと同様である。但し、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２の図示は省略されている。仮想スイッチ２００の構成は、既出の図１３で示されたものと同様である。
【００８２】
図２２は、第２の実施の形態における処理例を示すフローチャートである。ネットワークアダプタ１００の受信フィルタ１１０は、データリンクからパケットを受け取る（ステップＢ１０）。受信フィルタ１１０は、受信パケットのヘッダ情報を用いて受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリを検索する（ステップＢ２０）。受信パケットのフローにマッチするイグザクトマッチエントリが有る場合（ステップＢ２０；Ｙｅｓ）、受信フィルタ１１０は、受信パケットを、対応する仮想マシン３００宛の受信キュー１０１に格納する。その受信パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接伝送される（ステップＢ３０）。
【００８３】
一方、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合（ステップＢ２０；Ｎｏ）、受信フィルタ１１０は、受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。受信キュー１０１−Ｓに格納された受信パケットは、仮想スイッチ２００へ送られる（ステップＢ４０）。
【００８４】
仮想スイッチ２００は、受信パケットを受け取る。フロー識別機能２１０は、受信パケットのヘッダ情報に基いて、当該受信パケットの属するフローを識別し、また、フローテーブルＴＢＬの検索を行う（ステップＢ５０）。受信パケットにマッチするフローエントリ（イグザクトマッチエントリ）は、フローテーブルＴＢＬに無い。よって、フロー識別機能２１０は、受信パケットを第１パケットとみなし、当該受信パケットのフローをＮＩＣオフロード対象に指定し、ＶＭ識別機能２３０に通知する。
【００８５】
続いて、仮想スイッチ２００は、オフロード設定処理を行う（ステップＢ６０）。具体的には、ＶＭ識別機能２３０は、フロー識別機能２１０によって指定されたフローに関して、当該フローに属するパケットを送受信する仮想マシン３００を特定する（ステップＢ６１）。キュー判定機能２４０は、ＶＭ識別機能２３０によって特定された仮想マシン３００に関連付けられた送受信キューを判定する（ステップＢ６２）。ＮＩＣ設定機能２５０は、その送受信キューを適宜参照することによって、フィルタテーブルＦＩＬＴに設定すべきフィルタエントリを作成する。そして、ＮＩＣ設定機能２５０は、作成したフィルタエントリをネットワークアダプタ１００に通知し、フィルタテーブルＦＩＬＴの設定を行う（ステップＢ６３）。また、ＮＩＣ設定機能２５０は、そのフィルタエントリのコピーをフローテーブルＴＢＬにも格納する。
【００８６】
パケットスイッチ機能２２０は、第１パケットをネットワークアダプタ１００に返送する（ステップＢ７０）。今回は、受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリがヒットする（ステップＢ２０；Ｙｅｓ）。従って、第１パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接伝送される（ステップＢ３０）。第１パケットに続く後続パケットも同様である。このようにして、当該フローがＮＩＣオフロードされる。
【００８７】
ＮＩＣオフロードされたフローに関してタイムアウトが発生した場合、そのオフロード設定は解除されてもよい。例えば、ネットワークアダプタ１００の受信フィルタ１１０あるいは送信フィルタ１２０は、フィルタテーブルＦＩＬＴのフィルタエントリに最終マッチ時刻を記録する。仮想スイッチ２００のフロー識別機能２１０は、一定期間毎にその最終マッチ時刻を確認し、タイムアウトの判定を行う。あるフローにタイムアウトが発生した場合、フロー識別機能２１０は、当該フローに対するオフロード設定の解除を指示する。ＮＩＣ設定機能２５０は、当該フローに関するフィルタエントリを、フィルタテーブルＦＩＬＴから削除する。また、ＮＩＣ設定機能２５０は、そのフィルタエントリをフローテーブルＴＢＬからも削除する。
【００８８】
３−３．第３の実施の形態
図２３は、第３の実施の形態におけるネットワークアダプタ１００及び仮想スイッチ２００の構成例を示すブロック図である。以下、第２の実施の形態からの変更点を主に説明する。
【００８９】
ネットワークアダプタ１００は、図２１で示された構成に加えて、フロー識別機能１６０及びフロー設定機能１７０を備えている。フロー識別機能１６０は、仮想スイッチ２００のフロー識別機能２１０と同様である。図２２のフローチャートにおいて、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合（ステップＢ２０；Ｎｏ）、受信フィルタ１１０は、受信パケットを、フロー識別機能１６０に転送する（ステップＢ４０）。フロー設定機能１７０は、フロー識別機能１６０によって指定されたフローに関するフィルタエントリを、フィルタテーブルＦＩＬＴに設定する。これらの機能は、ネットワークアダプタ１００に搭載された汎用プロセッサによって実現され得る。
【００９０】
このように、第３の実施の形態では、経路切替部６０は、ネットワークアダプタ１００に組み込まれる。すなわち、データプレーンに加えて、フィルタテーブルＦＩＬＴの設定もＮＩＣオフロードされる。
【００９１】
より一般的に、第３の実施の形態では、フィルタテーブルＦＩＬＴの設定に例示される“定型的な処理”がＮＩＣオフロードされる。言い換えれば、仮想スイッチ２００は、定型的な処理を行うプログラムを、ネットワークアダプタ１００に委譲する。そのような定型的な処理を行うプログラムは、フローテーブルＴＢＬ中のワイルドカードマッチエントリ（wildcard match entry）のアクションとして実装可能である。アクションとしては、例えば、ＮＡＰＴ（Network Address/Port Translation）を設定するプログラムが考えられる。これにより、ネットワークアダプタ１００上でフロー毎にＮＡＰＴ処理を施すことが可能となる。仮想スイッチ２００は、フロー処理規則オフロード機能２９０を備えている。このフロー処理規則オフロード機能２９０は、自身のフローテーブルＴＢＬ（イグザクトマッチフローテーブルとワイルカードマッチフローテーブル）の一部あるいは全てを、ネットワークアダプタ１００上のフローテーブルＴＢＬに設定する。
【００９２】
このように、第３の実施の形態では、定型的な処理がＮＩＣオフロードされる。短時間で終了しないような処理や、高度な拡張処理は、通常通り、仮想スイッチ２００に処理させる。
【００９３】
４．経路切替処理の他の例
経路切替の手段は、上記第２節で説明されたものに限られない。以下、経路切替処理の他の例を説明する。本処理例では、送信パケットの経路が仮想マシン３００の内部で分岐する。
【００９４】
図２４は、本処理例における仮想マシン３００の構成を示すブロック図である。仮想マシン３００は、ＮＩＣパケット送受信機能３１０、仮想スイッチパケット送受信機能３２０、分岐機能３３０、及びプロトコル処理機能３４０を備えている。プロトコル処理機能３４０は、プロトコル処理を行うプログラム（典型的には、ＴＣＰ／ＩＰスタック）により実現される。ＮＩＣパケット送受信機能３１０（第１送受信機能）は、ネットワークアダプタ１００のデータ直接伝送機能１４０とパケット送受信を行うデバイスドライバにより実現される。仮想スイッチパケット送受信機能３２０（第２送受信機能）は、仮想スイッチ２００とパケット送受信を行うデバイスドライバにより実現される。
【００９５】
分岐機能３３０は、プロトコル処理機能３４０とパケット送受信機能３１０、３２０との間に配置されている。分岐機能３３０は、プロトコル処理機能３４０から送信パケットを受け取り、その送信パケットをＮＩＣパケット送受信機能３１０あるいは仮想スイッチパケット送受信機能３２０のいずれか一方に転送する。この転送処理（送信パケットの振り分け）のために、分岐機能３３０は、フローとパケット転送先との対応関係を示すフローテーブルＴＢＬ２を参照する。パケット転送先は、ＮＩＣパケット送受信機能３１０（第１パケット転送先）あるいは仮想スイッチパケット送受信機能３２０（第２パケット転送先）である。
【００９６】
図２５は、フローテーブルＴＢＬ２を示す概念図である。フローテーブルＴＢＬ２は、複数のテーブルエントリを有している。各テーブルエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの送信パケットに対して行われるアクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、送信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。アクションには、送信パケットの転送先が記述されている。例えば、「アクション：ＮＩＣ」は、送信パケットの転送先がＮＩＣパケット送受信機能３１０（第１パケット転送先）であることを示す。また、「アクション：ｖｓｗｉｔｃｈ」は、送信パケットの転送先が仮想スイッチパケット送受信機能３２０（第２パケット転送先）であることを意味する。このフローテーブルＴＢＬ２は、所定の記憶装置（典型的にはメインメモリ３０）に格納される。
【００９７】
分岐機能３３０は、このフローテーブルＴＢＬ２を参照することによって、仮想マシン３００の送信パケットを、当該送信パケットのフローに対応付けられたパケット転送先に転送する。より詳細には、分岐機能３３０は、フロー識別機能３３１及び添付情報書き換え機能３３２を備えている。フロー識別機能３３１は、送信パケットのヘッダ情報に基いて、当該送信パケットのフローを識別する。更に、フロー識別機能３３１は、フローテーブルＴＢＬ２を参照して、当該フローに対応付けられているパケット転送先を判定する。また、添付情報書き換え機能３３２は、送信パケットの添付情報内の送信インタフェースを、上記判定の結果としてのパケット転送先に書き換える。そして、分岐機能３３０は、送信パケットを該当するパケット転送先に転送する。
【００９８】
パケット転送先がＮＩＣパケット送受信機能３１０である場合、ＮＩＣパケット送受信機能３１０は、分岐機能３３０から送信パケットを受け取る。ＮＩＣパケット送受信機能３１０は、受け取った送信パケットをバッファに格納し、また、ネットワークアダプタ１００に対してパケット送出を指示する。ネットワークアダプタ１００のデータ直接伝送機能１４０は、当該バッファから送信パケットを読み出し、送信元の仮想マシン３００に対応する送信キュー１０２に送信パケットを格納する。
【００９９】
パケット転送先が仮想スイッチパケット送受信機能３２０である場合、仮想スイッチパケット送受信機能３２０は、分岐機能３３０から送信パケットを受け取る。仮想スイッチパケット送受信機能３２０は、受け取った送信パケットをバッファに格納し、また、ハイパーバイザ５０にパケット配送を依頼する。ハイパーバイザ５０は、仮想スイッチ２００に当該送信パケットの処理を指示する。仮想スイッチ２００は、当該バッファから送信パケットを読み出し、スイッチ処理を行う。
【０１００】
尚、仮想マシン３００は、ネットワークアダプタ１００あるいは仮想スイッチ２００から受信パケットを受け取る。ネットワークアダプタ１００の場合、ＮＩＣパケット送受信機能３１０が受信パケットを受け取り、それを分岐機能３３０に渡す。一方、仮想スイッチ２００の場合、仮想スイッチパケット送受信機能３２０が受信パケットを受け取り、それを分岐機能３３０に渡す。分岐機能３３０は、いずれの場合でも受信パケットを同一インタフェースから受信したように見せかける。そのために、添付情報書き換え機能３３２は、受信パケットの添付情報内の受信インタフェースを、分岐機能３３０に書き換える。その後、分岐機能３３０は、受信パケットをプロトコル処理機能３４０に送る。これにより、プロトコルスタックから複数の受信経路が見えなくなる。
【０１０１】
尚、パケットの添付情報は、パケットのデータと関連付けて保持される、パケットの属性や付加情報を指す。添付情報は、受信インタフェースの他、典型的には、パケットの長さ、ペイロードや各プロトコルのヘッダデータの先頭アドレスなどを含む。送信インタフェースや受信インタフェースの“インタフェース”とは、仮想マシン３００とネットワークとの仮想的な接続点を指す。図２４の例では、ネットワークアダプタ１００との伝送路の出入り口と、仮想スイッチ２００との伝送路の出入り口とが“インタフェース”である。
【０１０２】
本処理例によれば、ネットワークアダプタ１００に送信フィルタテーブルＦＩＬＴ２は設けられない。その代わり、仮想マシン３００にフローテーブルＴＢＬ２が設けられる。経路切替部６０は、ネットワークアダプタ１００の送信フィルタテーブルＦＩＬＴ２の設定を動的に変更する代わり、各仮想マシン３００のフローテーブルＴＢＬ２の設定を動的に変更する。具体的には、経路切替部６０は、第１経路パターンフローが上述の第１パケット転送先に対応付けられ、第２経路パターンフローが上述の第２パケット転送先に対応付けられるように、フローテーブルＴＢＬ２を設定する。その結果、第１経路パターンフローは、仮想スイッチ２００を介することなく処理される、すなわち、ＮＩＣオフロードされる。一方、第２経路パターンフローは、仮想スイッチ２００によって処理されることになる。
【０１０３】
尚、経路切替部６０は、上述の第２節の場合と同様に、ネットワークアダプタ１００の受信フィルタテーブルＦＩＬＴ１を設定する。また、受信側と送信側とで経路パターンが非対称になってもよい。
【０１０４】
経路切替部６０は、例えば、仮想スイッチ２００に組み込まれる。図２６は、その場合の仮想スイッチ２００の機能構成例を示すブロック図である。図２６に示される仮想スイッチ２００は、既出の図１３あるいは図１５で示された構成に加えて、分岐機能設定機能２５５を更に備えている。ＮＩＣ設定機能２５０は、ネットワークアダプタ１００の受信フィルタテーブルＦＩＬＴ１の設定を行う。一方、分岐機能設定機能２５５は、仮想マシン３００のフローテーブルＴＢＬ２の設定を行う。仮想マシン３００は、分岐機能設定機能２５５による設定に応じて、フローテーブルＴＢＬ２のエントリ追加・削除・更新を行う。
【０１０５】
本処理例は、上述の第１〜第３の実施の形態のいずれとも組み合わせ可能である。上述の説明のうち「ネットワークアダプタ１００の送信フィルタテーブルＦＩＬＴ２の設定」を、「仮想マシン３００のフローテーブルＴＢＬ２の設定」に置換すればよい。
【０１０６】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【０１０７】
本出願は、２００９年１２月４日に出願された日本国特許出願２００９−２７６６７９を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【図１Ａ】
2011068091.tif 000003
【図１Ｂ】
2011068091.tif 000004
【図２】
2011068091.tif 000005
【図３】
2011068091.tif 000006
【図４】
2011068091.tif 000007
【図５】
2011068091.tif 000008
【図６】
2011068091.tif 000009
【図７】
2011068091.tif 000010
【図８】
2011068091.tif 000011
【図９】
2011068091.tif 000012
【図１０】
2011068091.tif 000013
【図１１】
2011068091.tif 000014
【図１２】
2011068091.tif 000015
【図１３】
2011068091.tif 000016
【図１４】
2011068091.tif 000017
【図１５】
2011068091.tif 000018
【図１６】
2011068091.tif 000019
【図１７】
2011068091.tif 000020
【図１８】
2011068091.tif 000021
【図１９】
2011068091.tif 000022
【図２０】
2011068091.tif 000023
【図２１】
2011068091.tif 000024
【図２２】
2011068091.tif 000025
【図２３】
2011068091.tif 000026
【図２４】
2011068091.tif 000027
【図２５】
2011068091.tif 000028
【図２６】
2011068091.tif 000029
【国際調査報告】
2011068091.tif 000030
2011068091.tif 000031