"サーバと、前記サーバに接続されたスイッチと、前記サーバ及び前記スイッチの機能を制御するコントローラとを具備し、前記サーバは、処理装置と、前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタとを備え、前記処理装置は、仮想マシンと、前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチとを備え、前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、前記コントローラは、前記トンネル処理の有効化/無効化をフロー毎に動的に制御するネットワークシステム。請求項1に記載のネットワークシステムであって、前記スイッチは、フローテーブルに従って、フロー毎にパケットを処理するように構成され、前記コントローラは、所望のフローのパケットが前記トンネル処理用ポートから入出力されるように前記フローテーブルを設定することにより、前記トンネル処理の有効化/無効化をフロー毎に動的に制御するネットワークシステム。請求項1又は2に記載のネットワークシステムであって、前記コントローラは、更に、前記フィルタテーブルの設定を通して、前記ネットワークアダプタによる前記オフロード機能の有効化/無効化をフロー毎に動的に制御するネットワークシステム。請求項1乃至3のいずれか一項に記載のネットワークシステムであって、前記トンネル処理において、前記ネットワークアダプタは、MACアドレスに基づいてパケット転送を行うネットワークシステム。請求項1乃至4のいずれか一項に記載のネットワークシステムであって、前記コントローラは、オフロードポリシテーブルに規定されているポリシに従って、前記オフロード機能の有効化/無効化及び前記トンネル処理の有効化/無効化を、フロー毎に決定するネットワークシステム。請求項5に記載のネットワークシステムであって、前記スイッチは、フロー毎の通信状態を示す統計情報を前記コントローラに通知し、前記コントローラは、前記統計情報と前記ポリシに基づいて、前記オフロード機能の有効化/無効化及び前記トンネル処理の有効化/無効化を、フロー毎に決定するネットワークシステム。請求項1乃至6のいずれか一項に記載のネットワークシステムであって、前記スイッチは、オープンフロースイッチであり、前記コントローラは、オープンフローコントローラであるネットワークシステム。ネットワークシステムにおけるコントローラであって、前記ネットワークシステムは、サーバと、前記サーバに接続されたスイッチと、前記サーバ及び前記スイッチの機能を制御する前記コントローラとを具備し、前記サーバは、処理装置と、前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタとを備え、前記処理装置は、仮想マシンと、前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチとを備え、前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、前記コントローラは、フロー制御部と、オフロードポリシテーブルが格納された記憶装置とを備え、前記オフロードポリシテーブルは、前記ネットワークアダプタによる前記オフロード機能の有効化/無効化、及び、前記トンネル処理の有効化/無効化のポリシを規定し、前記フロー制御部は、前記オフロードポリシテーブルに従って、前記ネットワークアダプタによる前記オフロード機能の有効化/無効化をフロー毎に動的に制御し、且つ、前記トンネル処理の有効化/無効化をフロー毎に動的に制御するコントローラ。ネットワークシステムにおけるフロー制御方法であって、前記ネットワークシステムは、サーバと、前記サーバに接続されたスイッチとを具備し、前記サーバは、処理装置と、前記処理装置に接続され、フィルタテーブルに従ってフロー毎にパケットを処理するネットワークアダプタとを備え、前記処理装置は、仮想マシンと、前記仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチとを備え、前記ネットワークアダプタは、前記仮想スイッチを介することなく前記仮想マシンに対してパケットを送受信するオフロード機能を有し、トンネル処理において、前記スイッチは、トンネル処理用ポートを通して前記仮想マシンとの間でパケットを送受信し、前記ネットワークアダプタは、前記フィルタテーブルを参照することなく当該パケットを前記スイッチと前記仮想マシンとの間で転送し、前記フロー制御方法は、前記ネットワークアダプタによる前記オフロード機能の有効化/無効化をフロー毎に動的に制御するステップと、前記トンネル処理の有効化/無効化をフロー毎に動的に制御するステップとを含むフロー制御方法。本願発明者は、次の点に着目した。市販のNICの中には、十分なフロー分解能を持たないものがある。例えば、オープンフローは12tupleを必要とするが、市販のNICでは5tupleしかマッチングに使えない場合がある。このようにNICのフロー分解能が不足していると、所望のフローにNICオフロードを適用することができなくなる。より一般化すれば、サーバのネットワークアダプタの機能が不足している場合、所望のNICオフロードを実現できなくなる可能性がある。その場合、仮想スイッチへのトラフィックの集中を十分に抑制することができなくなる。本発明の1つの目的は、サーバのネットワークアダプタの機能不足を補うことができる技術を提供することにある。本発明の1つの観点において、ネットワークシステムが提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、サーバ及びスイッチの機能を制御するコントローラと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。コントローラは、トンネル処理の有効化/無効化をフロー毎に動的に制御する。本発明の他の観点において、ネットワークシステムにおけるコントローラが提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、サーバ及びスイッチの機能を制御するコントローラと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。コントローラは、フロー制御部と、オフロードポリシテーブルが格納された記憶装置と、を備える。オフロードポリシテーブルは、ネットワークアダプタによるオフロード機能の有効化/無効化、及び、トンネル処理の有効化/無効化のポリシを規定する。フロー制御部は、オフロードポリシテーブルに従って、ネットワークアダプタによるオフロード機能の有効化/無効化をフロー毎に動的に制御し、且つ、トンネル処理の有効化/無効化をフロー毎に動的に制御する。本発明の更に他の観点において、ネットワークシステムにおけるフロー制御方法が提供される。ネットワークシステムは、サーバと、サーバに接続されたスイッチと、を具備する。サーバは、処理装置と、処理装置に接続されたネットワークアダプタと、を備える。ネットワークアダプタは、フィルタテーブルに従って、フロー毎にパケットを処理する。処理装置は、仮想マシンと、仮想マシンが送受信するパケットを外部との間で中継する仮想スイッチと、を備える。ネットワークアダプタは、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を有する。トンネル処理において、スイッチは、トンネル処理用ポートを通して仮想マシンとの間でパケットを送受信し、ネットワークアダプタは、フィルタテーブルを参照することなく当該パケットをスイッチと仮想マシンとの間で転送する。フロー制御方法は、ネットワークアダプタによるオフロード機能の有効化/無効化をフロー毎に動的に制御するステップと、トンネル処理の有効化/無効化をフロー毎に動的に制御するステップと、を含む。本発明によれば、サーバのネットワークアダプタの機能不足を補うことが可能となる。これにより、所望のオフロードが実現され、仮想スイッチへのトラフィックの集中を十分に抑制することが可能となる。添付図面を参照して、本発明の実施の形態を説明する。1.サーバ及びNICオフロードまず、本実施の形態におけるサーバ及びNICオフロードについて説明する。本実施の形態におけるサーバ及びNICオフロードに関しては、本願発明者による日本国特許出願2009-276679未公開にも詳しく記載されている。当該日本国特許出願2009-276679未公開に記載されている内容は、参照により、本願明細書に組み込まれる。図3は、本実施の形態に係るネットワークシステム1の構成例を概略的に示すブロック図である。ネットワークシステム1は、ネットワーク不図示に接続された複数のサーバ10を備えている。サーバ10間には、複数のスイッチが配置されている。このネットワークシステム1は、ファイアウォールやロードバランサといったネットワークアプライアンスを介して外部ネットワークに接続されている。ネットワークシステム1は、例えばデータセンタdatacenter内のネットワークシステムである。図4は、本実施の形態に係るサーバ物理サーバ10のハードウェア構成を示すブロック図である。サーバ10は、CPUCentralProcessingUnit20、メインメモリ30、及びネットワークアダプタネットワークインタフェース装置100を備えている。ネットワークアダプタ100は、ネットワークカードまたはNICNetworkInterfaceCardとも呼ばれる。CPU20、メインメモリ30、及びネットワークアダプタ100は、互いに接続されている。メインメモリ30には、仮想化ソフトウェアやフロー制御プログラムPROGが格納される。仮想化ソフトウェアは、CPU20によって実行されるコンピュータプログラムであり、サーバ10上に仮想マシンVM:VirtualMachineや仮想スイッチVirtualSwitchを構築する。フロー制御プログラムPROGは、CPU20によって実行されるコンピュータプログラムであり、後に説明される経路切替機能をサーバ10に実装する。仮想化ソフトウェアやフロー制御プログラムPROGは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。フロー制御プログラムPROGは、仮想化ソフトウェアに組み込まれていてもよい。図5は、本実施の形態に係るサーバ10の構成を概念的に示すブロック図である。サーバ10は、処理装置40と、処理装置40に接続されたネットワークアダプタ100とを備えている。処理装置40は、上述のCPU20、メインメモリ30、仮想化ソフトウェア及びフロー制御プログラムPROGの協働により実現され、仮想環境に基づく様々な機能を備える。具体的には、処理装置40は、ハイパーバイザ50、仮想スイッチ200、及び少なくとも1台の仮想マシン仮想サーバ300を備える。ハイパーバイザ50は、各仮想マシン300の動作を管理し、また、仮想マシン300間の通信伝送路を提供する。ハイパーバイザ50は、仮想マシンモニタVMM:VirtualMachineMonitorとも呼ばれる。仮想スイッチ200は、仮想マシン300が送受信するパケットを外部との間で中継する。仮想スイッチ200は、制御用の仮想マシンControlVM上で動作してもよいし図1A参照、ハイパーバイザ50上で動作してもよい図1B参照。各仮想マシン300GuestVM上では、それぞれのアプリケーションが稼働する。制御用の仮想マシンControlVMは、入出力処理用の仮想マシンIOVMとも呼ばれる。本実施の形態では、ネットワークアダプタ100によるNICオフロードが可能である。つまり、仮想スイッチ200を介することなく、ネットワークアダプタ100と仮想マシン300との間で直接データのやりとりが可能である。図6は、本実施の形態に係るネットワークアダプタ100の基本構成を示すブロック図である。ネットワークアダプタ100は、仮想NIC図中、破線枠で示されている、受信フィルタ110、送信フィルタ120、記憶装置130、及びデータ直接伝送機能140を備えている。データ直接伝送機能140は、仮想スイッチ200を介することなく仮想マシン300に対してパケットを直接送受信する機能である。詳細には、データ直接伝送機能140は、ネットワークアダプタ100の送受信キューと仮想マシン300が利用するアドレス空間との間で直接データ転送を行う。仮想NICは、仮想マシン300VM1,VM2毎に設けられる。各仮想NICは、受信キュー101と送信キュー102を含んでいる。受信キュー101には、ネットワークアダプタ100がデータリンクから受け取った受信パケットが格納される。受信キュー101に格納された受信パケットは、データ直接伝送機能140によって、対応する仮想マシン300に直接送られる。また、ネットワークアダプタ100がデータ直接伝送機能140によって仮想マシンから直接受け取った送信パケットは、その仮想マシンに対応する送信キュー102に格納される。また、仮想NICは、仮想スイッチ200に対しても設けられる。仮想スイッチ200とつながる仮想NICの受信キュー101及び送信キュー102は、以下、受信キュー101-S及び送信キュー102-Sとそれぞれ参照される。受信キュー101-Sには、ネットワークアダプタ100が外部データリンクから受け取った受信パケットが格納される。受信キュー101-Sに格納された受信パケットは、仮想スイッチ200に送られる。また、ネットワークアダプタ100が仮想スイッチ200から受け取った送信パケットは、送信キュー102-Sに格納される。送信フィルタ120は、それぞれの送信キュー102、102-Sを所定の順序/タイミングで選択する。そして、送信フィルタ120は、選択した送信キュー102あるいは102-Sから送信パケットを取り出し、その送信パケットをデータリンクへ送出する。尚、送信キュー102には、パケット自体のデータでなく、パケットを格納している仮想マシン300内のアドレスなど、パケットのメタデータのみを格納することもできる。この場合、送信フィルタ120は、次にパケットを取り出す送信キュー102を選択すると、該当キューに格納されたパケットのメタデータを用いて、当該パケットを仮想マシン300から転送するよう、データ直接伝送機能140に指示する。受信フィルタ110は、データリンクから受信パケットを受け取る。受信フィルタ110は、その受信パケットをどの受信キュー101あるいは101-Sに格納するかを判定する。その判定に用いられるのが、受信フィルタテーブルFILT1である。受信フィルタテーブルFILT1は、記憶装置130に格納されている。記憶装置130の例としては、DRAM、SRAM、連想メモリCAM:ContentAddressableMemory等が挙げられる。受信フィルタテーブルFILT1は、フローと受信アクションとの対応関係を示すテーブルである。受信フィルタ110は、その受信フィルタテーブルFILT1を参照し、受信パケットのフローに対応付けられた受信アクションを受信パケットに対して行う。受信アクションとしては、2パターン考えられる。第1受信アクションは、データ直接伝送機能140を用いることによって、受信パケットを指定された仮想マシン300に直接送信することである。この場合、受信フィルタ110は、受信パケットを、指定された受信キュー101に格納する。第2受信アクションは、受信パケットを仮想スイッチ200へ送信することである。この場合、受信フィルタ110は、受信パケットを、仮想スイッチ200宛の受信キュー101-Sに格納する。図7は、受信フィルタテーブルFILT1の一例を示している。受信フィルタテーブルFILT1は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキーKeyと該当フローの受信パケットに対して行われる受信アクションActionを示している。キーは、フロー識別情報であり、受信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、OpenFlowSwitchhttp://www.openflowswitch.org/を参照のフローテーブルにおけるキーと同様である。受信アクションには、受信パケットの格納先となる受信キューが記述されている。例えば、受信アクション:VM1は、仮想マシンVM1宛の受信キュー101を意味し、上述の第1受信アクションに相当する。また、受信アクション:vswitchは、仮想スイッチ200宛の受信キュー101-Sを意味し、上述の第2受信アクションに相当する。受信フィルタ110は、受信パケットを受け取ると、その受信パケットのヘッダ情報を用いて受信フィルタテーブルFILT1中のイグザクトマッチエントリexactmatchentryを検索する。受信パケットのフローにマッチするイグザクトマッチエントリが有る場合、受信フィルタ110は、そのイグザクトマッチエントリで指定された第1受信アクションを受信パケットに対して行う。例えば、図7の例において、受信フィルタ110は、フローflow1に属する受信パケットを、仮想マシンVM1宛の受信キュー101に格納する。一方、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合、受信フィルタ110は、第2受信アクションを受信パケットに対して行う、すなわち、受信パケットを仮想スイッチ200宛の受信キュー101-Sに格納する。このようにして、NICオフロードが可能となる。本実施の形態に係るサーバ10は、更に、経路切替部60を備えている。図8は、本実施の形態に係る経路切替部60の機能を説明するための概略図である。本実施の形態において、経路切替部60は、仮想マシン300が送受信するパケットの伝送経路を動的に切り替える。より詳細には、仮想マシン300が送受信するパケットの伝送経路には、2パターン考えられる。第1の経路パターンでは、上述のネットワークアダプタ100のデータ直接伝送機能140によって、仮想スイッチ200を介することなくネットワークアダプタ100と仮想マシン300との間で直接パケットが送受信されるNICオフロード。一方、第2の経路パターンでは、少なくとも仮想スイッチ200を介して仮想マシン300に対してパケットが送受信される。第1及び第2の経路パターンのフローは、以下、それぞれ、第1経路パターンフロー及び第2経路パターンフローと参照される。経路切替部60は、仮想マシン300が送受信するパケットのフロー経路を、第1の経路パターンあるいは第2の経路パターンに設定する。更に、経路切替部60は、その経路設定を、所定の条件に応じて動的に切り替える。すなわち、経路切替部60は、仮想マシン300が送受信するパケットのフローを、第1経路パターンフローあるいは第2経路パターンフローに動的に切り替える分別する。そして、経路切替部60は、第1経路パターンフローをネットワークアダプタ100のデータ直接伝送機能140に処理させ、一方、第2経路パターンフローを仮想スイッチ200に処理させる。このように、本実施の形態によれば、全てのフローが固定的に仮想スイッチ200をバイパスするわけではない。所望のフロー第1経路パターンフローのみがNICオフロードされ、仮想スイッチ200をバイパスする。他のフロー第2経路パターンフローは、通常通り、仮想スイッチ200を通して伝送される。その結果、仮想スイッチ200を利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチ200へのトラフィックの集中を抑制することが可能となる。尚、経路切替部60は、サーバ10CPU20がフロー制御プログラムPROGを実行することにより実現される。経路切替部60は、図5に示されるように処理装置40に組み込まれていてもよい。あるいは、経路切替部60は、ネットワークアダプタ100に組み込まれていてもよい。典型的には、経路切替部60は、処理装置40の仮想スイッチ200あるいはハイパーバイザ50に組み込まれる。但し、それに限定されない。以下、本実施の形態に係る経路切替処理を更に詳しく説明する。図9は、本実施の形態に係る経路切替処理の一例を説明するための概念図である。本処理例では、ネットワークアダプタ100に、受信フィルタテーブルFILT1だけでなく、送信フィルタテーブルFILT2も設けられる。受信フィルタテーブルFILT1と同様に、送信フィルタテーブルFILT2も記憶装置130に格納される。尚、受信フィルタテーブルFILT1と送信フィルタテーブルFILT2は、まとめてフィルタテーブルFILTと参照される場合がある。送信フィルタテーブルFILT2は、フローと送信アクションとの対応関係を示すテーブルである。送信フィルタ120は、その送信フィルタテーブルFILT2を参照し、送信パケットのフローに対応付けられた送信アクションを送信パケットに対して行う。送信アクションとしては、2パターン考えられる。第1送信アクションは、送信パケットを外部のデータリンクへ送信することである。この場合、送信フィルタ120は、送信パケットをデータリンクへ送出する。第2送信アクションは、送信パケットを受信パケットとして受信フィルタ110受信経路へループバックさせることである。この場合、送信フィルタ120は、送信パケットを受信パケットとして受信フィルタ110受信経路へループバックさせる。図10は、送信フィルタテーブルFILT2の一例を示している。送信フィルタテーブルFILT2は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキーKeyと該当フローの送信パケットに対して行われる送信アクションActionを示している。キーは、フロー識別情報であり、送信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、OpenFlowSwitchhttp://www.openflowswitch.org/を参照のフローテーブルにおけるキーと同様である。送信アクションには、第1送信アクションoutあるいは第2送信アクションloopbackが記述されている。送信フィルタ120は、選択した送信キュー102から送信パケットを取り出すと、その送信パケットのヘッダ情報を用いて送信フィルタテーブルFILT2中のイグザクトマッチエントリexactmatchentryを検索する。送信パケットのフローにマッチするイグザクトマッチエントリが有る場合、送信フィルタ120は、そのイグザクトマッチエントリで指定された第1送信アクションoutを送信パケットに対して行う、すなわち、送信パケットをデータリンクに送出する。一方、送信パケットのフローにマッチするイグザクトマッチエントリが無い場合、送信フィルタ120は、第2送信アクションloopbackを送信パケットに対して行う、すなわち、送信パケットを受信パケットとして受信フィルタ110受信経路へループバックさせる。図9及び図11を参照して、2つの経路パターンを説明する。図9及び図11の例では、受信フィルタテーブルFILT1において、フローflow1、flow2だけが第1受信アクションに対応付けられており、その他のフローは第2受信アクションに対応付けられている。また、送信フィルタテーブルFILT2において、フローflow1、flow2だけが第1送信アクションに対応付けられており、その他のフローは第2送信アクションに対応付けられている。本処理例において、仮想マシン300から送出される送信パケットは、まず、ネットワークアダプタ100に入力される。このとき、その送信パケットは、ネットワークアダプタ100のデータ直接伝送機能140によって、仮想スイッチ200を介することなくネットワークアダプタ100に直接入力される。送信フィルタ120は、選択した送信キュー102から送信パケットを取り出す。送信パケットがフローflow1あるいはflow2に属する場合、送信フィルタテーブルFILT2中のイグザクトマッチエントリがヒットする。従って、送信フィルタ120は、その送信パケットをデータリンクに送出する。つまり、当該送信パケットは、仮想スイッチ200を通過することなく、仮想マシン300からネットワークアダプタ100を介して外部に送信される。これは、上述の第1の経路パターンに相当する。一方、送信パケットがその他のフローに属する場合、送信フィルタテーブルFILT2中のいずれのイグザクトマッチエントリもヒットしない。従って、送信フィルタ120は、その送信パケットを受信パケットとして受信フィルタ110にループバックする。受信フィルタテーブルFILT1においても、いずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ110は、その受信パケットを受信キュー101-Sを介して仮想スイッチ200へ送る。つまり、当該パケットは、一旦ネットワークアダプタ100に入力された後、仮想スイッチ200によって処理されることになる。これは、上述の第2の経路パターンに相当する。データリンクから受け取る受信パケットに関しては、次の通りである。受信パケットがフローflow1あるいはflow2に属する場合、受信フィルタテーブルFILT1中のイグザクトマッチエントリがヒットする。従って、受信フィルタ110は、その受信パケットを、対応する仮想マシン300宛の受信キュー101に格納する。その受信パケットは、データ直接伝送機能140によって、仮想スイッチ200を介することなく、対応する仮想マシン300に直接送られる。これは、上述の第1の経路パターンに相当する。一方、受信パケットがその他のフローに属する場合、受信フィルタテーブルFILT1中のいずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ110は、その受信パケットを、仮想スイッチ200宛の受信キュー101-Sに格納する。よって、その受信パケットは、仮想スイッチ200によって処理されることになる。これは、上述の第2の経路パターンに相当する。尚、図12に示されるように、受信フィルタテーブルFILT1と送信フィルタテーブルFILT2とは組み合わされて、単一の送受信フィルタテーブルとして提供されてもよい。図12の例では、第2受信アクションと第2送信アクションは共通であり、vswitch:パケットを仮想スイッチ200宛の受信キュー101-Sに格納することである。これによっても、受信経路への送信パケットのループバックが実現される。以上に説明されたように、受信フィルタテーブルFILT1及び送信フィルタテーブルFILT2におけるエントリ設定により、仮想マシン300が送受信するパケットのフロー経路を、第1の経路パターンあるいは第2の経路パターンに設定することができる。そして、受信フィルタテーブルFILT1及び送信フィルタテーブルFILT2におけるエントリ設定を変更することによって、フロー経路を動的に切り替えることも可能である。そのようなエントリ設定及び設定変更を行うのが、経路切替部60である。具体的には、経路切替部60は、仮想マシン300が送受信するパケットのフローを、所定の基準に基いて、第1経路パターンフローあるいは第2経路パターンフローに割り当てる。その割り当ては、動的に変更可能である。そして、経路切替部60は、第1経路パターンフローが上述の第1受信アクションに対応付けられ、第2経路パターンフローが上述の第2受信アクションに対応付けられるように、受信フィルタテーブルFILT1を設定する。また、経路切替部60は、第1経路パターンフローが上述の第1送信アクションに対応付けられ、第2経路パターンフローが上述の第2送信アクションに対応付けられるように、送信フィルタテーブルFILT2を設定する。その結果、第1経路パターンフローは、仮想スイッチ200を介することなく処理される、すなわち、NICオフロードされる。一方、第2経路パターンフローは、仮想スイッチ200によって処理されることになる。尚、同一フローに関するフィルタエントリが、受信フィルタテーブルFILT1あるいは送信フィルタテーブルFILT2のいずれか一方にだけ設定されてもよい。その場合、受信側と送信側とで、経路パターンは非対称になる。例として、既出の図9及び図11において、フローflow1に関するフィルタエントリが送信フィルタテーブルFILT2にのみ設定される場合を考える。その場合、フローflow1に関しては、送信パケットの伝送経路は、仮想スイッチ200を介さない第1の経路パターンとなり、受信パケットの伝送経路は、仮想スイッチ200を通過する第2の経路パターンとなる。経路切替部60は、例えば、仮想スイッチ200に組み込まれる。図13は、その場合の仮想スイッチ200の機能構成例を示すブロック図である。仮想スイッチ200は、フロー識別機能210、パケットスイッチ機能220、VM識別機能230、キュー判定機能240、及びNIC設定機能250を備えている。仮想スイッチ200は、ネットワークアダプタ100あるいは仮想マシン300からパケットを受け取る。フロー識別機能210は、受け取ったパケットのヘッダ情報に基いて、当該パケットの属するフローを識別する。また、フロー識別機能210は、フロー識別情報KeyとアクションActionとの対応関係を示すフローテーブルTBLを参照して、当該パケットに対して実施すべきアクションを得る。パケットスイッチ機能220は、そのアクションに従って当該パケットを処理する。典型的には、フローテーブルTBLのアクションにはパケットの出力ポート転送先が記述されている。パケットスイッチ機能220は、アクションで指定された出力ポートからパケットを出力する。出力されたパケットは、ネットワークアダプタ100あるいは仮想マシン300へ送られる。尚、当該パケットにマッチするフローエントリがフローテーブルTBLに無い場合、フロー識別機能210は、当該パケットに対して所定の処理を実施する。例えば、フロー識別機能210は、オープンフローコントローラOFC:OpenFlowControllerに当該パケットを転送し、経路設定を要求する。VM識別機能230は、指定されたフローに関して、当該フローに属するパケットを送受信する仮想マシン300を特定する。ここで、指定されたフローとは、ネットワークアダプタ100上のフィルタテーブルFILTに対するエントリ設定が望まれるフローである。キュー判定機能240は、VM識別機能230によって特定された仮想マシン300に関連付けられた送受信キュー101、102を判定する。NIC設定機能250は、その送受信キューを適宜参照することによって、フィルタテーブルFILTに設定すべきフィルタエントリを作成する。そして、NIC設定機能250は、作成したフィルタエントリをネットワークアダプタ100に通知し、フィルタテーブルFILTの設定変更を行う。経路切替部60は、これらVM識別機能230、キュー判定機能240、及びNIC判定機能250を含んでいる。2.スイッチオフロード市販のネットワークアダプタ100が使用される場合、フィルタテーブルFILTのフロー分解能が所望の処理には不足している可能性がある。例えば、オープンフローは12tupleを必要とするが、市販のNICでは5tupleしかマッチングに使えない場合がある。このようにネットワークアダプタ100のフロー分解能が不足していると、所望のフローにNICオフロードを適用することができなくなる。また、フィルタテーブルFILTに割り当てられている記憶領域が小さい場合、フィルタテーブルFILTのオーバーフローがすぐに発生しやすい。フィルタテーブルFILTのオーバーフローが発生すると、新たなフィルタエントリをフィルタテーブルFILTに追加することができなくなる。このことも、好適なNICオフロードを阻害する要因となる。このように、ネットワークアダプタ100のフィルタテーブルFILTの機能が不足している場合、所望のNICオフロードを実現できなくなる可能性がある。その場合、仮想スイッチ200へのトラフィックの集中を十分に抑制することができなくなる。そこで、本実施の形態によれば、ネットワークアダプタ100のフィルタテーブルFILTの機能不足を補うために、そのネットワークアダプタ100に接続された物理スイッチを用いたオフロードも実施される。そのような物理スイッチを用いたオフロードは、以下スイッチオフロードと参照される。すなわち、本実施の形態によれば、NICオフロードが動的に制御されるだけでなく、スイッチオフロードも動的に制御される。それにより、ネットワークアダプタ100のフィルタテーブルFILTの機能不足を補うことが可能となる。以下、スイッチオフロードに関連する構成及び処理を説明する。2-1.全体構成図14は、本実施の形態に係るネットワークシステム1の構成を概略的に示すブロック図である。ネットワークシステム1は、サーバ10、スイッチ400及びコントローラ500を備えている。スイッチ400は、サーバ10に接続されたToRTopofRackスイッチである。コントローラ500は、サーバ10及びスイッチ400に接続されており、サーバ10及びスイッチ400の機能を制御する。例えばオープンフローの場合、スイッチ400はオープンフロースイッチPOFS:PysicalOpenFlowSwitchであり、コントローラ500はオープンフローコントローラOFC:OpenFlowControllerである。2-2.サーバ10サーバ10は、ネットワークアダプタ100、仮想スイッチ200及び仮想マシン300を備えている。上述の通り、ネットワークアダプタ100は、フィルタテーブルFILTに従って、フロー毎にパケットを処理するように構成されている。更に、上述の通り、ネットワークアダプタ100は、仮想スイッチ200を介することなく仮想マシン300に対してパケットを送受信するNICオフロード機能を有している。所望のフローに関してNICオフロード機能を有効化/無効化するには、フィルタテーブルFILTにおいて当該所望のフローに関するフィルタエントリを適切に設定すればよい。すなわち、フィルタテーブルFILTの設定を通して、NICオフロード機能の有効化/無効化をフロー毎に動的に制御することができる。フィルタテーブルFILTの設定は、上述の通り、経路切替部60によって行われる。上述の例では、仮想スイッチ200が経路切替部60の機能を有しており、仮想スイッチ200を通してフィルタテーブルFILTの設定変更が可能である。2-3.スイッチ400スイッチ400は、フローテーブル440を有している。フローテーブル440は、フロー毎にフローエントリを有する。各フローエントリは、フロー識別情報Keyと、該当フローのパケットに対して行われるアクションActionを示している。フロー識別情報Keyにマッチするパケットに対しては、アクションActionで指定されるパケット処理例えば、指定ポートへの出力が実施される。スイッチ400は、そのようなフローテーブル440に従って、フロー毎にパケット処理を行う。より詳細には、スイッチ400は、テーブル管理部410、スイッチ処理部420、コントローラ通信部430、及び複数のポート450を備えている。テーブル管理部410は、フローテーブル440の管理設定変更、等を行う。テーブル管理部410は記憶装置を含んでおり、フローテーブル440はその記憶装置に格納される。スイッチ処理部420は、ポート450入力ポートを通してパケットを受信する。また、スイッチ処理部420は、フローテーブル440を参照して、その受信パケットに対してパケット処理を行う。更に、スイッチ処理部420は、ポート450出力ポートを通してパケットを送信する。コントローラ通信部430は、コントローラ500との通信機能を有している。オープンフローの場合、SecureChannelがコントローラ通信部430に相当する。2-4.トンネル処理本実施の形態に係るネットワークアダプタ100、仮想マシン300及びスイッチ400は、トンネル処理をサポートしている。トンネル処理の場合、ネットワークアダプタ100は、フローを認識することなく、仮想マシン300とスイッチ400との間でパケット転送を行う。つまり、ネットワークアダプタ100は、フィルタテーブルFILTを参照することなく、仮想マシン300とスイッチ400との間でパケット転送を行う。図15を参照して、トンネル処理を更に詳しく説明する。図15に示されるように、スイッチ400のある物理ポート450には、トンネル処理専用の仮想ポート451以下、トンネル処理用ポート451と参照されるが設けられる。そのトンネル処理用ポート451は、仮想マシン300毎に用意される。例えば図15では、仮想マシン300-1~300-3のそれぞれに、トンネル処理用ポート451-1~451-3が対応付けられている。トンネル処理において、スイッチ400は、トンネル処理用ポート451を通して、対応する仮想マシン300との間でパケットを送受信する。このとき、ネットワークアダプタ100は、フィルタテーブルFILTを参照することなく、当該パケットをスイッチ400と仮想マシン300との間で転送する。具体的には、ネットワークアダプタ100は、パケットのMACヘッダからMACアドレスを抽出し、更に、MACテーブル180を参照することによって当該パケットの転送先を決定する。このように、トンネル処理において、ネットワークアダプタ100は、フローを認識することなく、パケットのMACアドレスに基づいてパケット転送を行う。すなわち、トンネル処理の場合、フィルタテーブルFILTを参照することなく、仮想マシン300とスイッチ400との間でパケット転送が可能である。これが、スイッチオフロードに相当する。どのフローに対してトンネル処理スイッチオフロードを適用するかは、スイッチ400のフローテーブル440を適宜設定することにより制御可能である。具体的には、所望のフローに対してトンネル処理を適用する場合、当該所望のフローのパケットがトンネル処理用ポート451から入出力されるようにフローテーブル440のフローエントリを設定すればよい。逆に、所望のフローに対してトンネル処理を適用しない場合、当該所望のフローのパケットがトンネル処理用ポート451から入出力されないようにフローテーブル440のフローエントリを設定すればよい。このように、スイッチ400のフローテーブル440の設定を通して、トンネル処理スイッチオフロードの有効化/無効化をフロー毎に制御することが可能である。以上に説明されたように、トンネル処理スイッチオフロードの場合、ネットワークアダプタ100のフィルタテーブルFILTは参照されず、その代わりに、スイッチ400のフローテーブル440がフロー制御に利用される。従って、ネットワークアダプタ100のフィルタテーブルFILTの機能が不足していたとしても、スイッチ400のフローテーブル440を適宜利用することにより、その機能不足を補うことができる。例えば、ネットワークアダプタ100のフィルタテーブルFILTのフロー分解能が不足している場合であっても、よりフロー分解能の高いスイッチ400のフローテーブル440を利用することによって、所望のフローにオフロード処理NICオフロードの代わりにスイッチオフロードを適用することが可能となる。これは、ネットワークアダプタ100のフィルタテーブルFILTの機能不足をスイッチ400のフローテーブル440で補っていることを意味する。また、スイッチオフロードを利用することにより、ネットワークアダプタ100のフィルタテーブルFILTにおけるエントリ消費を減らすことができる。これにより、ネットワークアダプタ100のフィルタテーブルFILTのオーバーフローが発生しにくくなる。これは、フィルタテーブルFILTに割り当てられている記憶領域が小さい場合に、特に有効である。このことも、ネットワークアダプタ100のフィルタテーブルFILTの機能不足をスイッチ400のフローテーブル440で補っていることを意味する。2-5.コントローラ本実施の形態によれば、ネットワークアダプタ100によるNICオフロードの有効化/無効化が、フロー毎に動的に制御される。また、トンネル処理スイッチオフロードの有効化/無効化が、フロー毎に動的に制御される。これら動的制御を一括して行うのが、コントローラ500である。図14に示されるように、コントローラ500は、記憶装置510、フロー制御部520、及び通信部530を備えている。通信部530は、サーバ10やスイッチ400との間でデータ通信を行う。オープンフローの場合、SecureChannelが通信部530に相当する。記憶装置510には、オフロードポリシテーブル540が格納されている。オフロードポリシテーブル540は、NICオフロードの有効化/無効化、及び、トンネル処理の有効化/無効化に関するポリシ基準を規定している。オフロードポリシテーブル540の内容は、ユーザによって書き換え可能である。フロー制御部520は、そのオフロードポリシテーブル540に規定されているポリシに従って、NICオフロードの有効化/無効化を動的に制御し、且つ、トンネル処理の有効化/無効化を動的に制御する。図16は、本実施の形態におけるNICオフロード及びトンネル処理の動的制御を示す概念図である。あるフローに関してNICオフロードを有効化/無効化するには、ネットワークアダプタ100のフィルタテーブルFILTにおいて当該フローに関するフィルタエントリを適切に設定すればよい。よって、コントローラ500は、ネットワークアダプタ100のフィルタテーブルFILTの設定を通して、NICオフロードの有効化/無効化をフロー毎に動的に制御する。より詳細には、コントローラ500は、仮想スイッチ200の経路切替部60にフィルタテーブル設定指示を出し、ネットワークアダプタ100のフィルタテーブルFILTの設定変更を行わせる。これにより、所望のフローに対するNICオフロードの適用を、動的に有効化/無効化することができる。また、あるフローに関してトンネル処理スイッチオフロードを有効化/無効化するには、スイッチ400のフローテーブル440において当該フローに関するフローエントリを適切に設定すればよい。よって、コントローラ500は、スイッチ400のフローテーブル440の設定を通して、トンネル処理の有効化/無効化をフロー毎に動的に制御する。より詳細には、コントローラ500は、所望のフローのパケットがトンネル処理用ポート451から入出力されるようにフローテーブル440を設定する。これにより、所望のフローに対するトンネル処理スイッチオフロードの適用を、動的に有効化/無効化することが可能となる。尚、コントローラ500は、各フローの通信状態例:スループットを参照して動的制御を行ってもよい。例えば、図16に示されるように、スイッチ400は、フロー毎の通信状態を示す統計情報STATを、所定のインターバルでコントローラ500に通知する。コントローラ500は、スイッチ400から受け取った統計情報STATを参照し、必要に応じてNICオフロードやスイッチオフロードを適用する。例えば、スループットが所定の閾値を超えたフローにスイッチオフロードを適用するということがオフロードポリシテーブル540に規定されている場合、コントローラ500は、統計情報STATを参照して、必要なフローにスイッチオフロードを適用する。図17は、本実施の形態におけるコントローラ500による処理を示すフローチャートである。コントローラ500は、所定のインターバルで、スイッチ400から統計情報STATを受け取るステップS10。コントローラ500は、統計情報STATとオフロードポリシテーブル540に基づいて、NICオフロードの設定変更が必要かどうかを決定するステップS20。設定変更が必要な場合ステップS20;Yes、コントローラ500は、ネットワークアダプタ100のフィルタテーブルFILTを書き換えることにより、所望のフローに対するNICオフロードの適用を有効化/無効化するステップS30。また、コントローラ500は、統計情報STATとオフロードポリシテーブル540に基づいて、スイッチオフロードの設定変更が必要かどうかを決定するステップS40。設定変更が必要な場合ステップS40;Yes、コントローラ500は、スイッチ400のフローテーブル440を書き換えることにより、所望のフローに対するトンネル処理の適用を有効化/無効化するステップS50。尚、図17で示された処理フローは、コントローラ500がフロー制御プログラムを実行することによって実現されてもよい。フロー制御プログラムは、コントローラ500によって実行されるコンピュータプログラムである。フロー制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。ここで、コントローラ500がNICオフロードの有効化/無効化を直接制御する代わりに、次のように仮想スイッチ200に行わせることもできる。すなわち、コントローラ500が保持するオフロードポリシテーブル540の情報のうち、仮想スイッチ200が処理するフローに関連する情報を仮想スイッチ200に伝達する。仮想スイッチ200は、NICオフロードの有効化/無効化を制御する経路切替部60を備えている。仮想スイッチ200自身が計測する統計情報を参照して、経路切替部60は、上記情報に基づいてNICオフロードの有効化/無効化を判定する。このようにすることで、オフロードポリシに従って、仮想スイッチ200が自律的にNICオフロードの制御を行うことができるようになり、コントローラ500で全てのオフロード制御を行う必要がなくなる。これにより、コントローラ500にかかる負荷を分散することができる。更に、より時間的に高い精度で、オフロードの有効化/無効化を切り替えることができるようになる。2-6.効果以上に説明されたように、本実施の形態によれば、ネットワークアダプタ100のフィルタテーブルFILTの機能が不足していたとしても、スイッチ400のフローテーブル440を適宜利用することにより、その機能不足を補うことができる。これにより、オフロードが十分に実現され、仮想スイッチ200へのトラフィックの集中を十分に抑制することが可能となる。また、スイッチ400のフローテーブル440を適宜設定することにより、ループバックも実現可能である。ここで、ループバックとは、あるサーバ10内の仮想マシン300から送出されたパケットを折り返して、同サーバ10内の他の仮想マシン300に転送することである。このようなループバックは、仮想マシン300間の高速通信を可能とする。しかしながら、市販のネットワークアダプタ100がループバック機能をサポートしていない場合もある。このような場合であっても、スイッチ400ToRスイッチのフローテーブル440を利用することによって、ループバックを実現することが可能となる。以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。"