【事件の表示】
　特願２０１６−５３０３２２「データ・パケットを処理するための方法、システム、およびコンピュータ・プログラム」拒絶査定不服審判事件〔平成２７年　２月　５日国際公開、ＷＯ２０１５／０１４１９８、平成２８年　８月２５日国内公表、特表２０１６−５２５８４６、請求項の数（８）〕について、次のとおり審決する。
【結　論】
　原査定を取り消す。
　本願の発明は、特許すべきものとする。
【理　由】
第１　手続の経緯
　本願は、２０１４年（平成２６年）７月９日（パリ条約による優先権主張２０１３年７月３１日、中国）を国際出願日とする出願であって、平成３０年６月６日付けで拒絶理由通知がされ、平成３０年７月２３日に意見書が提出され、平成３０年１２月２６日付けで拒絶理由通知がされ、平成３１年４月２日に意見書が提出されたが、令和元年６月６日付けで拒絶査定（原査定）がされ、これに対し、令和元年１０月１７日に拒絶査定不服審判の請求がされると同時に手続補正がされたものである。
第２　原査定の概要
　原査定（令和元年６月６日付け拒絶査定）の概要は次のとおりである。
１．本願請求項１−２１に係る発明は、以下の引用文献１に基づいて、その発明の属する技術の分野における通常の知識を有する者（以下、「当業者」という。）が容易に発明できたものであるから、特許法第２９条第２項の規定により特許を受けることができない。
引用文献等一覧
１．国際公開第２０１２／１１４３９８号
第３　本願発明
　本願請求項１−８に係る発明（以下、それぞれ「本願発明１」−「本願発明８」という。）は、令和元年１０月１７日になされた手続補正で補正された特許請求の範囲の請求項１−８に記載された事項により特定される発明であり、本願発明１は以下のとおりの発明である。
「【請求項１】
　ネットワークでデータパケットを処理するための方法であって、
　データパケットを含んでいるフローを、特定の分類パラメーターに従って、エレファント・フローとマイス・フローに分類するステップであって、１つのエレファント・フローには１つのマイス・フローよりも多くのデータパケットを含んでおり、前記特定の分類パラメーターは閾値であり、
　各フローのデータパケットを記録するステップと、
　データパケット数が前記閾値よりも少ないフローをマイス・フローとして分類するステップと、
　データパケット数が前記閾値以上のフローをエレファント・フローとして分類するステップと、を含むステップと、
　前記分類された前記エレファント・フローと前記マイス・フローをサーバーにおける仮想スイッチに送信するステップと、
　前記仮想スイッチで前記マイス・フローを処理するステップと、
　前記仮想スイッチに送信されたエレファント・フローと前記処理されたマイス・フローをネットワークにおけるハードウェア・スイッチに送信するステップと、
　前記ハードウェア・スイッチで前記エレファント・フローを処理し、前記マイス・フローを処理せず、処理されたエレファント・フローと受信したマイス・フローを転送するステップと、
を含み、
　ここで前記処理するステップは、フロー情報をバッファリングするステップ、パケット・ヘッダを置き換えるステップ、カプセル化するステップ、およびカプセル化解除するステップのうちの1つまたは複数を含む、方法。」
　なお、本願発明２−８の概要は以下のとおりである。
　本願発明２−６は、本願発明１を減縮した発明である。
　本願発明７、８は、それぞれ、本願発明１−６に対応するシステム、及び、コンピュータ・プログラムの発明であり、本願発明１−６とカテゴリ表現が異なるだけの発明である。
第４　引用文献１及び引用発明
１．引用文献１について
　原査定の拒絶の理由に引用された引用文献１には、図面とともに次の事項が記載されている（訳文は、引用文献１の国内公表文献である特表２０１４−５０６７３９号公報を参照して当審が作成した。下線は当審付与。以下同様。）。
（ア）「Technical Field
[0001] The present invention relates to a network system incorporating a server based on a virtualization technique and 
a flow control method in such network system
Background Art
[0002] The virtualization technique is of importance in the field of the server. More specifically, one physical machine can be operated as multiple virtual machines (VMs) through a virtualization technique which uses virtualization software such as VMware and Xen (which are both registered trademarks). This enables efficient server operations.
[0003] The virtualization technique also provides a virtual switch in a physical server, in addition to virtual machines. The virtual switch is a software-based packet switch and relays communications among virtual machines and between the virtual machines and external entities, as shown in Figs. 1A and 1B. The traffic control of the virtual switch is easily achieved, since the virtual switch is provided adjacent to the virtual machines. In addition, the virtual switch is superior in the flexibility and extensibility since the virtual switch is based on software.
[0004] Also known in the art is the I/O (input/output) virtualization technique, such as VT-d/Vt-c (registered trademark). The I/O virtualization technique allows direct data exchanges between virtual machines and network interface cards (NIC) without using a virtual switch. More specifically, as shown in Fig. 2, a virtual NIC is provided for each virtual machine. The use of these virtual NIC enables completely bypassing the virtual switch. Such processing is referred to as NIC-offloading, hereinafter.」
「（当審訳）
技術分野
[0001]
　本発明は、仮想化技術に基づくサーバを含むネットワークシステム、及びその
ネットワークシステムにおけるフロー制御方法
背景技術
[0002]
　サーバの分野において、仮想化技術は重要である。具体的には、ＶＭｗａｒｅ（登録商標）やＸｅｎ（登録商標）といった仮想化ソフトウェアを用いた仮想化技術によって、１台の物理マシンを複数の仮想マシン（ＶＭ： Ｖｉｒｔｕａｌ Ｍａｃｈｉｎｅ）として稼働させることができる。これにより、効率的なサーバ運用が可能となる。
[0003]
　仮想化技術により、物理サーバ内には仮想マシンと共に仮想スイッチ（Ｖｉｒｔｕａｌ Ｓｗｉｔｃｈ）も構築される。仮想スイッチは、ソフトウェアベースのパケットスイッチであり、図１Ａ及び図１Ｂに示されるように、仮想マシン間、及び、仮想マシンと外部との間の通信を中継する。仮想スイッチは仮想マシンと隣接しているため、トラフィック制御が容易である。また、仮想スイッチはソフトウェアベースであるため、柔軟性及び拡張性に優れている。
[0004]
　また、ＶＴ−ｄ／ＶＴ−ｃ（登録商標）といったＩ／Ｏ（入出力）仮想化技術が知られている。このＩ／Ｏ仮想化技術によれば、仮想スイッチを介することなく仮想マシンとネットワークインタフェースカード（ＮＩＣ： Ｎｅｔｗｏｒｋ Ｉｎｔｅｒｆａｃｅ Ｃａｒｄ）との間で直接データのやりとりが可能となる。具体的には、図２に示されるように、仮想ＮＩＣが仮想マシン毎に構築される。そして、それら仮想ＮＩＣを利用することによって、仮想スイッチを完全にバイパスすることが可能となる。このような処理は、以下「ＮＩＣオフロード」と参照される。」
（イ）「[0009] For the cases of Figs. 1A and 1B, the virtual switch relays the entire traffic between the virtual machines and external entities. This implies that the traffic is concentrated on the virtual switch. In addition, the virtual switch, which operates based on software, may proceed with the switch processing with a single thread in some cases. In this case, the virtual switch may be unable to accommodate the concentrated traffic. Therefore, the virtual switch tends to become a bottleneck in network processing.
[0010] The use of the NIC-offloading shown in Fig. 2, on the other hand, enables completely bypassing the virtual switch. In this case, however, the packet communication route is fixed, resulting in that the advantage of the flexible traffic control based on the virtual switch is discarded.」
「（当審訳）
[0009]
　図１Ａ及び図１Ｂの場合、仮想スイッチは、仮想マシンと外部との間の全てのトラフィックを中継する。つまり、仮想スイッチにはトラフィックが集中する。また、仮想スイッチはソフトウェアベースであり、場合によってはシングルスレッドでスイッチ処理が進行する。その場合、集中するトラフィックを処理しきれなくなる。このようなことから、仮想スイッチは、ネットワーク処理におけるボトルネックになりやすい。
[0010]
　一方、図２で示されたＮＩＣオフロードを利用すれば、仮想スイッチを完全にバイパスすることが可能となる。しかしながらこの場合、パケット通信経路は固定され、仮想スイッチを利用した柔軟なトラフィック制御の利点を享受することができなくなる。」
（ウ）「[0014] The inventor focuses attention on the following issue: Some commercially-available NICs do not have a sufficient flow resolution. For example, some commercially-available NICs can use only five tuples for matching, although the OpenFlow requires 12 tuples. When the flow resolution of a NIC is insufficient as thus described, this makes it impossible to apply NIC-offloading to a desired flow. More generally, when a function of a network adapter of a server is insufficient, there is a possibility in which a desired NIC-offloading is not achieved. In this case, it is impossible to sufficiently suppress the concentration of the traffic on the virtual switch.
[0015] Therefore, one objective of the present invention is to provide a technique for compensating the function insufficiency of a network adapter of a server.」
「（当審訳）
[0014]
　本願発明者は、次の点に着目した。市販のＮＩＣの中には、十分なフロー分解能を持たないものがある。例えば、オープンフローは１２ｔｕｐｌｅを必要とするが、市販のＮＩＣでは５ｔｕｐｌｅしかマッチングに使えない場合がある。このようにＮＩＣのフロー分解能が不足していると、所望のフローにＮＩＣオフロードを適用することができなくなる。より一般化すれば、サーバのネットワークアダプタの機能が不足している場合、所望のＮＩＣオフロードを実現できなくなる可能性がある。その場合、仮想スイッチへのトラフィックの集中を十分に抑制することができなくなる。
[0015]
　本発明の１つの目的は、サーバのネットワークアダプタの機能不足を補うことができる技術を提供することにある。」
（エ）「[0023] Fig. 3 is a block diagram schematically showing an exemplary configuration of a network system 1 according to the present embodiment. 
The network system 1 includes a plurality of servers (physical servers) 10 connected to a network (not shown). Multiple switches are provided among the servers 10.
[0024] Fig. 4 is a block diagram showing an exemplary hardware configuration of each server 10 of the present embodiment. Each server 10 includes a CPU (central processing unit) 20, a main memory 30 and a network adapter (network interface device) 100. The network adapter 100 may be also referred to as network card or NIC (network interface card). The CPU 20, the main memory 30 and the network adapter 100 are mutually connected.
[0025] The main memory 30 stores virtualization software and a flow control program PROG. The virtualization software includes a computer program to be executed by the CPU 20, which builds virtual machines (VMs) and a virtual switch on each server 10. The flow control program PROG, which is executed by the CPU 20, provides a route switching function for each server 10 as described later. The virtualization software and the flow control program PROG may be recorded in a non-transitory computer-readable recording medium 80. The flow control program PROG may be incorporated within the virtualization software.
[0026] Fig. 5 is a block diagram schematically showing the configuration of each server 10 in the present invention. 
The server 10 includes a processing unit 40 and a network adapter 100 connected to the processing unit 40.
More specifically, the processor 40 includes a hypervisor 50, a virtual switch 200 and at least one virtual machine (virtual server) 300.
[0027] In this embodiment, NIC-offloading is available by using the network adapter 100. In other words, data can be directly exchanged between the network adapter 100 and the virtual machines 300.
[0028] Fig. 6 is a block diagram showing the basic configuration of the network adapter 100 according to the present embodiment. 
The network adapter 100 includes virtual NICs (shown as dotted frames), a reception filter 110, a transmission filter 120, a storage device 130 and a data direct transmission function 140. The data direct transmission function 140 is a function for directly transmitting and receiving packets to and from the virtual machines 300 without using the virtual switch 200.
[0029] 
Virtual NICs are respectively provided for virtual machines 300 (VM1, VM2, ...). Each virtual NIC includes a reception queue 101 and a transmission queue 102. The reception queue 101 stores therein reception packets received by the network adapter 100 from a data link. The reception packets stored in the reception queue 101 are directly transmitted to the corresponding virtual machine 300. The transmission packets which the network adapter 100 directly receives from the virtual machines by using the data direct transmission function 104 are stored in the transmission queues 102 corresponding to the virtual machines.
[0030] 
A virtual NIC is also provided for the virtual switch 200. The reception queue 101 and transmission queue 102 of the virtual NIC associated with the virtual switch 200 are referred to as reception queue 101-S and transmission queue 102-S, respectively, hereinafter. The reception queue 101-S stores therein reception packets received by the network adapter 100 from the external data link. The reception packets stored in the reception queue 101-S are forwarded to the virtual switch 200. Also, the transmission packets received by the network adapter 100 from the virtual switch 200 are stored in the transmission queue 102-S.
[0031] The transmission filter 120 selects the transmission queues 102 and 102-S in a predetermined order at predetermined timings. The transmission filter 120 then retrieves transmission packets from the selected transmission queue 102 or 102-S and forwards the transmission packets to the data link. It should be noted that the transmission queues 102 may store meta data of the packets, such as addresses at which the packets are stored within the virtual machines 300, in place of the packet data themselves. In this case, after selecting the transmission queue 102 from which packets are to be retrieved next, the transmission filter 120 instructs the data direct transmission function 140 to forward the relevant packets from the virtual machines 300 by using the meta data of the packets stored in the selected queue.
[0032] The reception filter 110 receives reception packets from the data link. The reception filter 110 selects which reception queue 101 or 101-S the reception packets are to be stored into. A reception filter table FILT1 is used for this selection. 
The reception filter table FILT1 is stored in the storage device 130.
[0033] 
The reception filter table FILT1 indicates the association of the flows with the reception actions. The reception filter 110 refers to the reception filter table FILT1 and performs the reception action associated with the flow of the reception packets. There are two kinds of the reception actions. The first reception action involves directly transmitting the reception packets to a specified virtual machine 300 by using the data direct transmission function 140. In this case, the reception filter 110 stores the reception packets 101 to the corresponding reception queue. The second reception action involves transmitting the reception packets to the virtual switch 200. In this case, the reception filter 110 stores the reception packets into the reception queue 101-S, which is dedicated to the virtual switch 200.
[0034] Fig. 7 shows one example of the reception filter table FILT1. The reception filter table FILT1 includes a plurality of filter entries. Each filter entry indicates a key (Key) for identifying the flow and a reception action (Action) which is to be performed on reception packets of the associated flow. Each key is flow identification information which is formed as a combination of predetermined protocol header fields in the header information of reception packets. In one example, keys of the flow table of OpenFlowSwitch are used as the keys of the reception filter table FILT1 (see http://www.openflowswitch.org/). Each reception action indicates the reception queue into which the reception packets are to be stored. For example, reception action: VM1 means the reception queue 101 associated with the virtual machine VM1, and indicates the aforementioned first reception action. Also, reception action: vswitch means the reception queue 101-S associated with the virtual switch 200, and indicates the aforementioned second reception action.
[0035] Upon reception of a reception packet, the reception filter 110 retrieves an exact match entry in the reception filter table FILT1 by using the header information of the reception packet. When there is an exact match entry which matches the flow of the reception packet, the reception filter 110 performs the first reception action on the reception packet, as indicated by the exact match entry. In the example of Fig. 7, for example, the reception filter 110 stores a reception packet belonging to the flow flow1 in the reception queue 101 associated with the virtual machine VM1. When there is no exact match entry which matches the flow of the reception packet, on the other hand, the reception filter 110 performs the second reception action on the reception packet, that is, stores the reception packet into the reception queue 101-S associated with the virtual switch 200. Such operation allows performing the NIC-offloading.
[0036] 
The server 10
further includes a route switcher 60.
[0037] In detail, there are two kinds of transmission routes of packets transmitted and received by the virtual machines 300. In the first route pattern, packets are directly exchanged between the network adapter 100 and the virtual machines 300 without using the virtual switch 200, by the aforementioned data direct transmission function 140 of the network adapter 100. In the second route pattern, on the other hand, packets are transmitted and received by the virtual machines 300 at least via the virtual switch 200. Hereinafter, the flows of the first and second route patterns are referred to as first pattern flow and second pattern flow, respectively.
[0038] The route switcher 60 switches the route of each flow of packets transmitted and received by the virtual machines 300 between the first route pattern and the second route pattern. Furthermore, the route switcher 60 dynamically switches the route setting under predetermined conditions. In other words, the route switcher 60 dynamically switches each flow of packets transmitted and received by the virtual machines 300 between the first route pattern flow and the second route pattern flow. And, the route switcher 60 causes the data direct transmission function 140 of the network adapter 100 to handle the first route pattern flows and causes the virtual switch 200 to handle the second route pattern flows.
[0039] As thus described, all of the flows do not fixedly bypass the virtual switch 200 in this embodiment; only desired flows (the first route pattern flows) are subjected to NIC-offloading to bypass the virtual switch 200. Other flows (the second route pattern flows) are transmitted via the virtual switch 200, as in the normal operation. This allows suppressing the concentration of the traffic on the virtual switch 200, while providing the advantage of flexible traffic control based on the virtual switch 200.
[0040] It should be noted that the route switcher 60 may be achieved by executing the flow control program PROG by the server 10 (or the CPU 20). The route switcher 60 may be incorporated in the processor 40 as shown in Fig. 5. Instead, the route switcher 60 may be incorporated in the network adapter 100. Specifically, 
the route switcher 60 may be incorporated in the virtual switch 200 or the hypervisor 50 of the processor 40
[0041] In the following, the route switching process of the present embodiment is further described in detail.
[0042] Fig. 9 is a schematic diagram showing one example of the route switching process of the present embodiment. In this example, a transmission filter table FILT2 is provided in the network adapter 100, in addition to the reception filter table FILT1. 
The transmission filter table FILT2 is stored in the storage device 130
[0043] 
The transmission filter table FILT2 indicates the association of the flows with the transmission actions. The transmission filter 120 refers to the transmission filter table FILT2 and performs the transmission action associated with each flow of transmission packets.
There are two kinds of transmission actions. The first transmission action involves transmitting transmission packets to the external data link. In this case, the transmission filter 120 forwards the transmission packets to the data link. The second transmission action involves looping back the transmission packets as reception packets to the reception filter 110 (on the reception route). In this case, the transmission filter 120 loops back the transmission packets as reception packets to the reception filter 110.
[0044] Fig. 10 shows one example of the transmission filter table FILT2. The transmission filter table FILT2 includes a plurality of filter entries. Each filter entry indicates a key (Key) for identifying a flow and a transmission action (Action) to be performed on transmission packets of the relevant flow. Each key is flow identification information which is formed as a combination of predetermined protocol header fields of the header information of transmission packets. For example, keys of the flow table of OpenFlowSwitch (see http://www.openflowswitch.org/) may be used as the keys of the transmission filter table FILT2. Each transmission action indicates the first transmission action out or the second transmission action loopback.
[0045] After acquiring a transmission packet from the selected transmission queue 102, the transmission filter 120 retrieves an exact match entry in the transmission filter table FILT2 by using the header information of the transmission packet. When there is an exact match entry which matches the flow of the transmission packet, the transmission filter 120 performs the first transmission action (out) on the transmission packet, as indicated by the exact match entry, that is, forwards the transmission packet to the data link. When there is no exact match entry which matches the flow of the transmission packet, on the other hand, the transmission filter 120 performs the second transmission action (loopback) on the transmission packet, that is, loops back the transmission packet as a reception packet to the reception filter 110 (on the reception route).
[0046] In the following, a description is given of the two route patterns with reference to Figs. 9 and 11. In the example of Figs. 9 and 11, only the flows flow1 and flow2 are associated with the first reception action in the reception filter table FILT1, and the other flows are associated with the second reception action. Also, only the flows flow1 and flow2 are associated with the first transmission action in the transmission filter table FILT2, and the other flows are associated with the second transmission action.
[0047] In this example, 
a transmission packet transmitted from a virtual machine 300 is first inputted to the network adapter 100. In this case, the transmission packet is directly inputted to the network adapter 100 without using the virtual switch 200 by the data direct transmission function 140 of the network adapter 100. The transmission filter 120 retrieves the transmission packet from the selected transmission queue 102.
[0048] 
When the transmission packet belongs to the flow flow1 or flow2, an exact match entry is hit in the transmission filter table FILT2. Accordingly, the transmission filter 120 forwards the transmission packet to the data link. That is, this transmission packet is transmitted to an external entity from the virtual machine 300 via the network adapter 100 without passing the virtual switch 200.
[0049] 
When the transmission packet belongs to a different flow, there is no exact match entry which is hit in the transmission filter table FILT2. Accordingly, the transmission filter 120 loops back the transmission packet as a reception packet to the reception filter 110. There is no exact match entry which is hit in the reception filter table FILT1, neither. Accordingly, the reception filter 110 transmits the reception packet to the virtual switch 200 via the reception queue 101-S. As a result, the packet is once inputted to the network adapter 100 and then processed by the virtual switch 200.
[0050] A reception packets received from the data link is handled as follows: When the reception packet belongs to the flow flow1 or flow2, an exact match entry is hit in the reception filter table FILT1. Accordingly, the reception filter 110 stores the reception packet into the reception queue 101 associated with the corresponding virtual machine 300. The reception packet is directly transmitted to the corresponding virtual machine 300 by the data direct transmission function 140 without using the virtual switch 200. Such operation corresponds to the first route pattern.
[0051] When the reception packet belongs to a different flow, there is no exact match entry which is hit in the reception filter table FILT1. Accordingly, the reception filter 110 stores the reception packet into the reception queue 101-S associated with the virtual switch 200. This results in that the reception packet is processed by the virtual switch 200. Such operation corresponds to the second route pattern.
[0052] It should be noted that, as shown in Fig. 12, the reception filter table FILT1 and the transmission filter table FILT2 may be combined and prepared as a single transmission/reception filter table. In the example of Fig. 12, the second reception action and the second transmission action both involve vswitch: storing the packet in the reception queue 101-S associated with the virtual switch 200. Such operation also achieves looping-back of the transmission packet to the reception route.
[0053] As thus described, the flow routes of packets transmitted and received by the virtual machines 300 can be switched between the first route pattern and the second route pattern by the entry settings of the reception filter table FILT1 and the transmission filter table FILT2. 
The flow route can be dynamically switched by modifying the entry settings of the reception filter table FILT1 and the transmission filter table FILT2. The route switcher 60 performs such entry settings and setting modifications.
[0054] More specifically, the route switcher 60 assigns each flow of packets transmitted and received by the virtual machines 300 to the first or second route pattern flow on the basis of predetermined standards. This assignment is allowed to be dynamically modified. The route switcher 60 sets the reception filter table FILT1 so as to correlate the first route pattern flows with the aforementioned first reception action and to correlate the second route patter flows with the second reception action. In addition, the route switcher 60 sets the transmission filter table FILT2 so as to correlate the first route pattern flows with the aforementioned first transmission action and to correlate the second route patter flows with the second transmission action. As a result, the first route pattern flows are processed without using the virtual switch 200, that is, NIC-offloading is achieved. The second route pattern flows, on the other hand, are processed by the virtual switch 200.」
「（当審訳）
[0023]
　図３は、本実施の形態に係るネットワークシステム１の構成例を概略的に示すブロック図である。
ネットワークシステム１は、ネットワーク（不図示）に接続された複数のサーバ１０を備えている
サーバ１０間には、複数のスイッチが配置されている。
[0024]
　図４は、本実施の形態に係るサーバ（物理サーバ）１０のハードウェア構成を示すブロック図である。サーバ１０は、ＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）２０、メインメモリ３０、及びネットワークアダプタ（ネットワークインタフェース装置）１００を備えている。ネットワークアダプタ１００は、ネットワークカードまたはＮＩＣ（Ｎｅｔｗｏｒｋ Ｉｎｔｅｒｆａｃｅ Ｃａｒｄ）とも呼ばれる。ＣＰＵ２０、メインメモリ３０、及びネットワークアダプタ１００は、互いに接続されている。
[0025]
　メインメモリ３０には、仮想化ソフトウェアやフロー制御プログラムＰＲＯＧが格納される。仮想化ソフトウェアは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、サーバ１０上に仮想マシン（ＶＭ： Ｖｉｒｔｕａｌ Ｍａｃｈｉｎｅ）や仮想スイッチ（Ｖｉｒｔｕａｌ Ｓｗｉｔｃｈ）を構築する。フロー制御プログラムＰＲＯＧは、ＣＰＵ２０によって実行されるコンピュータプログラムであり、後に説明される「経路切替機能」をサーバ１０に実装する。仮想化ソフトウェアやフロー制御プログラムＰＲＯＧは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。フロー制御プログラムＰＲＯＧは、仮想化ソフトウェアに組み込まれていてもよい。
[0026]
　図５は、本実施の形態に係るサーバ１０の構成を概念的に示すブロック図である。
サーバ１０は、処理装置４０と、処理装置４０に接続されたネットワークアダプタ１００とを備えている。
処理装置４０は、ハイパーバイザ５０、仮想スイッチ２００、及び少なくとも１台の仮想マシン（仮想サーバ）３００を備える。
[0027]
　本実施の形態では、ネットワークアダプタ１００による「ＮＩＣオフロード」が可能である。つまり、仮想スイッチ２００を介することなく、ネットワークアダプタ１００と仮想マシン３００との間で直接データのやりとりが可能である。
[0028]
　図６は、本実施の形態に係るネットワークアダプタ１００の基本構成を示すブロック図である。
ネットワークアダプタ１００は、仮想ＮＩＣ（図中、破線枠で示されている）、受信フィルタ１１０、送信フィルタ１２０、記憶装置１３０、及びデータ直接伝送機能１４０を備えている
データ直接伝送機能１４０は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを直接送受信する機能である。
[0029]
　
仮想ＮＩＣは、仮想マシン３００（ＶＭ１，ＶＭ２・・・）毎に設けられる。各仮想ＮＩＣは、受信キュー１０１と送信キュー１０２を含んでいる。受信キュー１０１には、ネットワークアダプタ１００がデータリンクから受け取った受信パケットが格納される。受信キュー１０１に格納された受信パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接送られる。また、ネットワークアダプタ１００がデータ直接伝送機能１４０によって仮想マシンから直接受け取った送信パケットは、その仮想マシンに対応する送信キュー１０２に格納される。
[0030]
　また、仮想ＮＩＣは、仮想スイッチ２００に対しても設けられる。仮想スイッチ２００とつながる仮想ＮＩＣの受信キュー１０１及び送信キュー１０２は、以下、受信キュー１０１−Ｓ及び送信キュー１０２−Ｓとそれぞれ参照される。受信キュー１０１−Ｓには、ネットワークアダプタ１００が外部データリンクから受け取った受信パケットが格納される。受信キュー１０１−Ｓに格納された受信パケットは、仮想スイッチ２００に送られる。また、ネットワークアダプタ１００が仮想スイッチ２００から受け取った送信パケットは、送信キュー１０２−Ｓに格納される。
[0031]
　送信フィルタ１２０は、それぞれの送信キュー１０２、１０２−Ｓを所定の順序／タイミングで選択する。そして、送信フィルタ１２０は、選択した送信キュー１０２あるいは１０２−Ｓから送信パケットを取り出し、その送信パケットをデータリンクへ送出する。尚、送信キュー１０２には、パケット自体のデータでなく、パケットを格納している仮想マシン３００内のアドレスなど、パケットのメタデータのみを格納することもできる。この場合、送信フィルタ１２０は、次にパケットを取り出す送信キュー１０２を選択すると、該当キューに格納されたパケットのメタデータを用いて、当該パケットを仮想マシン３００から転送するよう、データ直接伝送機能１４０に指示する。
[0032]
　受信フィルタ１１０は、データリンクから受信パケットを受け取る。受信フィルタ１１０は、その受信パケットをどの受信キュー１０１あるいは１０１−Ｓに格納するかを判定する。その判定に用いられるのが、「受信フィルタテーブルＦＩＬＴ１」である。
受信フィルタテーブルＦＩＬＴ１は、記憶装置１３０に格納されている。
[0033]
　
受信フィルタテーブルＦＩＬＴ１は、フローと受信アクションとの対応関係を示すテーブルである。受信フィルタ１１０は、その受信フィルタテーブルＦＩＬＴ１を参照し、受信パケットのフローに対応付けられた受信アクションを受信パケットに対して行う。受信アクションとしては、２パターン考えられる。第１受信アクションは、「データ直接伝送機能１４０を用いることによって、受信パケットを指定された仮想マシン３００に直接送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、指定された受信キュー１０１に格納する。第２受信アクションは、「受信パケットを仮想スイッチ２００へ送信すること」である。この場合、受信フィルタ１１０は、受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。
[0034]
　図７は、受信フィルタテーブルＦＩＬＴ１の一例を示している。受信フィルタテーブルＦＩＬＴ１は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの受信パケットに対して行われる受信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、受信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／を参照）のフローテーブルにおけるキーと同様である。受信アクションには、受信パケットの格納先となる受信キューが記述されている。例えば、「受信アクション：ＶＭ１」は、仮想マシンＶＭ１宛の受信キュー１０１を意味し、上述の第１受信アクションに相当する。また、「受信アクション：ｖｓｗｉｔｃｈ」は、仮想スイッチ２００宛の受信キュー１０１−Ｓを意味し、上述の第２受信アクションに相当する。
[0035]
　受信フィルタ１１０は、受信パケットを受け取ると、その受信パケットのヘッダ情報を用いて受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリ（ｅｘａｃｔ ｍａｔｃｈ ｅｎｔｒｙ）を検索する。受信パケットのフローにマッチするイグザクトマッチエントリが有る場合、受信フィルタ１１０は、そのイグザクトマッチエントリで指定された第１受信アクションを受信パケットに対して行う。例えば、図７の例において、受信フィルタ１１０は、フローｆｌｏｗ１に属する受信パケットを、仮想マシンＶＭ１宛の受信キュー１０１に格納する。一方、受信パケットのフローにマッチするイグザクトマッチエントリが無い場合、受信フィルタ１１０は、第２受信アクションを受信パケットに対して行う、すなわち、受信パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。このようにして、ＮＩＣオフロードが可能となる。
[0036]
　本実施の形態に係る
サーバ１０は、更に、「経路切替部６０」を備えている。
[0037]
　より詳細には、仮想マシン３００が送受信するパケットの伝送経路には、２パターン考えられる。第１の経路パターンでは、上述のネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００と仮想マシン３００との間で直接パケットが送受信される（ＮＩＣオフロード）。一方、第２の経路パターンでは、少なくとも仮想スイッチ２００を介して仮想マシン３００に対してパケットが送受信される。第１及び第２の経路パターンのフローは、以下、それぞれ、「第１経路パターンフロー」及び「第２経路パターンフロー」と参照される。
[0038]
　経路切替部６０は、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定する。更に、経路切替部６０は、その経路設定を、所定の条件に応じて動的に切り替える。すなわち、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、第１経路パターンフローあるいは第２経路パターンフローに動的に切り替える（分別する）。そして、経路切替部６０は、第１経路パターンフローをネットワークアダプタ１００のデータ直接伝送機能１４０に処理させ、一方、第２経路パターンフローを仮想スイッチ２００に処理させる。
[0039]
　このように、本実施の形態によれば、全てのフローが固定的に仮想スイッチ２００をバイパスするわけではない。所望のフロー（第１経路パターンフロー）のみがＮＩＣオフロードされ、仮想スイッチ２００をバイパスする。他のフロー（第２経路パターンフロー）は、通常通り、仮想スイッチ２００を通して伝送される。その結果、仮想スイッチ２００を利用した柔軟なトラフィック制御の利点を享受しつつ、仮想スイッチ２００へのトラフィックの集中を抑制することが可能となる。
[0040]
　尚、経路切替部６０は、サーバ１０（ＣＰＵ２０）がフロー制御プログラムＰＲＯＧを実行することにより実現される。経路切替部６０は、図５に示されるように処理装置４０に組み込まれていてもよい。あるいは、経路切替部６０は、ネットワークアダプタ１００に組み込まれていてもよい。典型的には、
経路切替部６０は、処理装置４０の仮想スイッチ２００あるいはハイパーバイザ５０に組み込まれる。
[0041]
　以下、本実施の形態に係る経路切替処理を更に詳しく説明する。
[0042]
　図９は、本実施の形態に係る経路切替処理の一例を説明するための概念図である。本処理例では、ネットワークアダプタ１００に、受信フィルタテーブルＦＩＬＴ１だけでなく、「送信フィルタテーブルＦＩＬＴ２」も設けられる。受信フィルタテーブルＦＩＬＴ１と同様に、
送信フィルタテーブルＦＩＬＴ２も記憶装置１３０に格納される。
[0043]
　
送信フィルタテーブルＦＩＬＴ２は、フローと送信アクションとの対応関係を示すテーブルである。送信フィルタ１２０は、その送信フィルタテーブルＦＩＬＴ２を参照し、送信パケットのフローに対応付けられた送信アクションを送信パケットに対して行う。送信アクションとしては、２パターン考えられる。第１送信アクションは、「送信パケットを外部のデータリンクへ送信すること」である。この場合、送信フィルタ１２０は、送信パケットをデータリンクへ送出する。第２送信アクションは、「送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせること」である。この場合、送信フィルタ１２０は、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
[0044]
　図１０は、送信フィルタテーブルＦＩＬＴ２の一例を示している。送信フィルタテーブルＦＩＬＴ２は、複数のフィルタエントリを有している。各フィルタエントリは、フローを識別するためのキー（Ｋｅｙ）と該当フローの送信パケットに対して行われる送信アクション（Ａｃｔｉｏｎ）を示している。キーは、フロー識別情報であり、送信パケットのヘッダ情報中の所定のプロトコルヘッダフィールドの組み合わせで構成される。このキーは、例えば、ＯｐｅｎＦｌｏｗＳｗｉｔｃｈ（ｈｔｔｐ：／／ｗｗｗ．ｏｐｅｎｆｌｏｗｓｗｉｔｃｈ．ｏｒｇ／を参照）のフローテーブルにおけるキーと同様である。送信アクションには、第１送信アクション「ｏｕｔ」あるいは第２送信アクション「ｌｏｏｐｂａｃｋ」が記述されている。
[0045]
　送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出すと、その送信パケットのヘッダ情報を用いて送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリ（ｅｘａｃｔ ｍａｔｃｈ ｅｎｔｒｙ）を検索する。送信パケットのフローにマッチするイグザクトマッチエントリが有る場合、送信フィルタ１２０は、そのイグザクトマッチエントリで指定された第１送信アクション（ｏｕｔ）を送信パケットに対して行う、すなわち、送信パケットをデータリンクに送出する。一方、送信パケットのフローにマッチするイグザクトマッチエントリが無い場合、送信フィルタ１２０は、第２送信アクション（ｌｏｏｐｂａｃｋ）を送信パケットに対して行う、すなわち、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせる。
[0046]
　図９及び図１１を参照して、２つの経路パターンを説明する。図９及び図１１の例では、受信フィルタテーブルＦＩＬＴ１において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１受信アクションに対応付けられており、その他のフローは第２受信アクションに対応付けられている。また、送信フィルタテーブルＦＩＬＴ２において、フローｆｌｏｗ１、ｆｌｏｗ２だけが第１送信アクションに対応付けられており、その他のフローは第２送信アクションに対応付けられている。
[0047]
　本処理例において、
仮想マシン３００から送出される送信パケットは、まず、ネットワークアダプタ１００に入力される。このとき、その送信パケットは、ネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００に直接入力される。送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出す。
[0048]
　
送信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリがヒットする。従って、送信フィルタ１２０は、その送信パケットをデータリンクに送出する。つまり、当該送信パケットは、仮想スイッチ２００を通過することなく、仮想マシン３００からネットワークアダプタ１００を介して外部に送信される。
[0049]
　
一方、送信パケットがその他のフローに属する場合、送信フィルタテーブルＦＩＬＴ２中のいずれのイグザクトマッチエントリもヒットしない。従って、送信フィルタ１２０は、その送信パケットを受信パケットとして受信フィルタ１１０にループバックする。受信フィルタテーブルＦＩＬＴ１においても、いずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを受信キュー１０１−Ｓを介して仮想スイッチ２００へ送る。つまり、当該パケットは、一旦ネットワークアダプタ１００に入力された後、仮想スイッチ２００によって処理されることになる。
[0050]
　データリンクから受け取る受信パケットに関しては、次の通りである。受信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、受信フィルタテーブルＦＩＬＴ１中のイグザクトマッチエントリがヒットする。従って、受信フィルタ１１０は、その受信パケットを、対応する仮想マシン３００宛の受信キュー１０１に格納する。その受信パケットは、データ直接伝送機能１４０によって、仮想スイッチ２００を介することなく、対応する仮想マシン３００に直接送られる。これは、上述の第１の経路パターンに相当する。
[0051]
　一方、受信パケットがその他のフローに属する場合、受信フィルタテーブルＦＩＬＴ１中のいずれのイグザクトマッチエントリもヒットしない。従って、受信フィルタ１１０は、その受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納する。よって、その受信パケットは、仮想スイッチ２００によって処理されることになる。これは、上述の第２の経路パターンに相当する。
[0052]
　尚、図１２に示されるように、受信フィルタテーブルＦＩＬＴ１と送信フィルタテーブルＦＩＬＴ２とは組み合わされて、単一の送受信フィルタテーブルとして提供されてもよい。図１２の例では、第２受信アクションと第２送信アクションは共通であり、「ｖｓｗｉｔｃｈ：パケットを仮想スイッチ２００宛の受信キュー１０１−Ｓに格納すること」である。これによっても、受信経路への送信パケットのループバックが実現される。
[0053]
　以上に説明されたように、受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定により、仮想マシン３００が送受信するパケットのフロー経路を、第１の経路パターンあるいは第２の経路パターンに設定することができる。そして、
受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定を変更することによって、フロー経路を“動的”に切り替えることも可能である。そのようなエントリ設定及び設定変更を行うのが、経路切替部６０である。
[0054]
　具体的には、経路切替部６０は、仮想マシン３００が送受信するパケットのフローを、所定の基準に基いて、第１経路パターンフローあるいは第２経路パターンフローに割り当てる。その割り当ては、動的に変更可能である。そして、経路切替部６０は、第１経路パターンフローが上述の第１受信アクションに対応付けられ、第２経路パターンフローが上述の第２受信アクションに対応付けられるように、受信フィルタテーブルＦＩＬＴ１を設定する。また、経路切替部６０は、第１経路パターンフローが上述の第１送信アクションに対応付けられ、第２経路パターンフローが上述の第２送信アクションに対応付けられるように、送信フィルタテーブルＦＩＬＴ２を設定する。その結果、第１経路パターンフローは、仮想スイッチ２００を介することなく処理される、すなわち、ＮＩＣオフロードされる。一方、第２経路パターンフローは、仮想スイッチ２００によって処理されることになる。」
（オ）「[0061] 2. Switch Offloading
When a commercially-available network adapter 100 is used, there is a case that the flow resolution of the filter tables FILT is insufficient for desired processing. For example, a commercially-available NIC may only afford 5 tuples although OpenFlow requires 12 tuples. When the flow resolution of the network adapter 100 is insufficient, this may make the NIC-offloading inapplicable to a desired flow.
[0062] When the storage region assigned to the filter tables FILT is small, an overflow of the filter tables FILT easily occurs, and the overflow of the filter tables FILT makes it impossible to add a new filter entry to the filter tables FILT. This also constitutes a limiting factor for desired NIC-offloading.
[0063] As thus discussed, desired NIC-offloading may not be achieved when the function of the filter tables FILT of the network adapter 100 is insufficient. In such case, the concentration of the traffic on the virtual switch 200 is not sufficiently suppressed.
[0064] In this embodiment, 
an offloading based on a physical switch connected to the network adapter 100 is also implemented in order to compensate the function insufficiency of the filter tables FILT of the network adapter 100.
[0065] 2-1. Overall Configuration
Fig. 14 is a block diagram schematically showing the configuration of the network system 10 of the present embodiment. 
The network system 1 includes servers 10 (one shown), switches 400 (one shown) and a controller 500. The switches 400 are ToR (Top of Rack) switches connected to the servers 10.
[0066] 2-2. Servers 10
The servers 10 each include a network adapter 100, a virtual switch 200 and virtual machines 300 (one shown). As described above, the network adapter 100 is configured to handle packets in units of flows in accordance with the filter tables FILT.
[0067] Furthermore, the network adapter 100 has the NIC-offloading function for transmitting and receiving packets to and from the virtual machines 300 without using the virtual switch 200, as described above. The enabling/disenabling of the NIC-offloading function for a desired flow can be achieved by appropriately setting the filter entry associated with the desired flow in the filter tables FILT. In other words, the enabling/disenabling of the NIC-offloading function can be dynamically controlled for each flow by the settings of the filter tables FILT. As described above, the settings of the filter tables FILT are achieved by the route switcher 60. In the above-described example, the virtual switch 200 functions as the route switch 200, and the filter tables FILT are configured or modified through the virtual switch 200.
[0068] 2-3. Switches 400
The switches 400 each includes a flow table 440. The flow table 440 has a flow entry for each flow. Each flow entry indicates flow identification information (Key) and an action (Action) to be performed on packets of the relevant flow. The packet processing (such as, output to a specified port) specified by the corresponding action (Action) is performed on packets which matches the flow identification information (Key). The switches 400 perform packet processing for each flow in accordance with the flow table 400 thus configured.
[0069] In detail, 
the switches 400 each include a table management section 410, a switch processing section 420, a controller communication section 430 and a plurality of ports 450. The table management section 410 manages the flow table 440 (such as, modification of the settings). The table management section 410 includes a storage device and the flow table 440 is stored in this storage device.
[0070] 2-4. Tunneling process
The network adapter 100, the virtual machines 300 and the switches 400
support tunneling process. In the tunneling process, the network adapter 100 transfers packets between the virtual machines 300 and the switches 400 without identifying the flow of each packet.
[0071] The tunneling process is further described in detail with reference to Fig. 15. As shown in Fig. 15, 
virtual ports 451 which are dedicated to the tunneling process (hereinafter, referred to as tunneling-dedicated ports 451) are provided for a certain physical port 450 of each switch 400. The tunneling-dedicated ports 451 are respectively prepared for the virtual machines 300.
In the tunneling process, the switch 400 transmits and receives packets to and from the virtual machines 300 via the associated tunneling dedicated ports 451. Here, the network adapter 100 transfers the packets between the switch 400 and the virtual machines 300 without referring to the filter tables FILT. More specifically, the network adapter 100 retrieves the MAC address of the MAC headers of the packets and determines the transmission destinations of the packets by referring the MAC table 180.
[0072] As thus described, the network adapter 100 performs packet transfer based on the MAC addresses of packets in the tunneling process without identifying the flows thereof. In other words, the tunneling process achieves packet transfer between the virtual machines 300 and the switch 400 without referring to the filter tables FILT. Such processing is equivalent to switch offloading.
[0073] 
The flows on which the tunneling process (or switch offloading) is to be performed can be selected by appropriately setting the flow table 440 of the switch 400. More specifically, when the tunneling process is desired to be applied to a desired flow, this is achieved by setting the relevant flow entry of the flow table 440 so that packets of the desired flow are inputted and outputted via any of the tunneling-dedicated ports 451. On the contrary, when the tunneling process is not desired to be applied to a desired flow, this is achieved by setting the relevant flow entry of the flow table 440 so that packets of the desired flow are not inputted and outputted via any of the tunneling-dedicated ports 451. In this way, the enabling/disenabling of the tunneling process (switch offloading) can be controlled for each flow through setting the flow table 440 of the switch 400.
[0074] As thus described, the filter tables FILT of the network adapter 100 are not referred to in performing the tunneling process (switch offloading); instead, the flow table 440 of the switch 400 is used for the flow control. Accordingly, if the function of the filter tables FILT of the network adapter 100 is insufficient, this can be compensated by appropriately using the flow table 440 of the switch 400.
[0075] When the flow resolution of the filter tables FILT of the network adapter 100 is insufficient, for example, the use of the flow table 440 of the switch 400 which has a higher flow resolution allows performing the offloading processing on desired flows (the switch offloading instead of the NIC-offloading). This implies that the function insufficiency of filter tables FILT of the network adapter 100 is compensated by the flow table 440 of the switch 400.
[0076] Also, the use of the switch offloading effectively reduces the consumption of the entries of the filter tables FILT of the network adapter 100. This suppresses occurrence of an overflow of the filter tables FILT of the network adapter 100. Such approach is especially effective in a case that only a small storage region is allocated to the filter tables FILT. This also implies that the function insufficiency of filter tables FILT of the network adapter 100 is compensated by the flow table 440 of the switch 400.
[0077] 2-5. Controller
In the present embodiment, the enabling/disenabling of the NIC-offloading by the network adapter 100 is dynamically controlled for each flow. In addition, the enabling/disenabling of the tunneling process (the switch offloading) is also dynamically controlled for each flow. These dynamic controls are both done by the controller 500.
[0078] As shown in Fig. 14, 
the controller 500 includes a storage device 510, a flow controller 520 and a communication section 530. The communication section 530 achieves data communication with the servers 10 and the switches 400.
[0079] 
The storage device 510 stores therein an offloading policy table 540. The offloading policy table 540 defines policies (or standards) related to the enabling/disenabling of the NIC-offloading and the enabling/disenabling of the tunneling process.
In accordance with the policies defined in the offloading policy table 540, the flow controller 520 dynamically controls the enabling/disenabling of the NIC-offloading and the enabling/disenabling of the tunneling process.
[0080] Fig. 16 is a schematic diagram showing the dynamic controls of the NIC-offloading and the tunneling process in the present embodiment.
[0081] The enabling/disenabling of the NIC-offloading with respect to a certain flow can be achieved by appropriately setting the filter entry associated with the flow in the filter tables FILT of the network adapter 100. Accordingly, the controller 500 dynamically controls the enabling/disenabling of the NIC-offloading for each flow through the settings of the filter tables FILT of the network adapter 100. In detail, 
the controller 500 issues a filter table setting instruction to the route switcher 60 of the virtual switch 200 to modify the settings of the filter tables FILT of the network adapter 100. This allows dynamically enabling/disenabling the application of the NIC-offloading to a desired flow.
[0082] Also, the enabling/disenabling of the tunneling process (switch offloading) for a certain flow can be achieved by appropriately setting the flow entry associated with the flow in the flow table 400 of the switch 400. Accordingly, the controller 500 dynamically controls the enabling/disenabling of the tunneling process through the settings of the flow table 440 of the switch 400. In detail, 
the controller 500 sets the flow table 400 so that packets of a desired flow are inputted to and outputted from any of the tunneling-dedicated ports 251. This allows dynamically enabling/disenabling the application of the tunneling process (switch offloading) to a desired flow.
[0083] It should be noted that the controller 500 performs the dynamic controls referring to the communication status (e.g. the throughput) of each flow. As shown in Fig. 16, for example, 
the switch 400 transmits statistical information STAT indicating the communication status of each flow to the controller 500 at predetermined intervals. The controller 500 refers to the statistical information STAT received from the switch 400 and applies NIC-offloading or switch-offloading to desired flows depending on the necessity. When the offloading policy table 540 determines that the switch offloading is applied to a flow which has a throughput higher than a predetermined threshold, the controller 500 refers to the statistical information STAT and applies the switch offloading to necessary flows.
[0084] Fig. 17 is a flowchart showing the processing done by the controller 500 in the present embodiment. The controller 500 receives the statistical information STAT from the switch 400 at predetermined intervals (Step S10).
[0085] 
The controller 500 determines, on the basis of the statistical information STAT and the contents of the offloading policy table 540, whether or not setting modification of the NIC-offloading is necessary
When setting modification is necessary
the controller 500 enables/disenables the application of the NIC-offloading to desired flows by rewriting the filter tables FILT of the network adapter 100.
[0086] Also, 
the controller 500 determines, on the basis of the statistical information STAT and the contents of the offloading policy table 540, whether or not modification of the setting of the switch offloading is necessary
When modification of the setting is necessar
the controller 500 enables/disenables the application of the tunneling process to desired flows by rewriting the flow table 440 of the switch 400.
[0087] It should be noted that the procedure shown in Fig. 17 may be achieved by executing a flow control program by the controller 500. The flow control program is a computer program executed by the controller 500. The flow control program may be recorded in a non-transitory computer-readable recording medium.
[0088] The enabling/disenabling of the NIC-offloading may be performed by the virtual switch 200, instead of being directly done by the controller 500. In detail, out of the information stored in the offloading policy table 540 contained in the controller 500, information related to a flow to be handled by the virtual switch 200 is transmitted to the virtual switch 200.
The virtual switch 200 includes a route switcher 60 which controls the enabling/disenabling of the NIC-offloading. The route switcher 60 determines the enabling/disenabling of the NIC-offload based on the above-described information, referring to statistic information measured by the virtual switch 200 itself. This approach allows the virtual switch 200 to perform autonomous control of the NIC-offloading in accordance with the offloading policy, and eliminates the need for the controller 500 to control the offloading for the entire system. This effectively reduces the load imposed on the controller 500, and allows switching the enabling/disenabling of the offloading with a high accuracy in the time domain.」
「（当審訳）
[0061]
　２．スイッチオフロード
　市販のネットワークアダプタ１００が使用される場合、フィルタテーブルＦＩＬＴのフロー分解能が所望の処理には不足している可能性がある。例えば、オープンフローは１２ｔｕｐｌｅを必要とするが、市販のＮＩＣでは５ｔｕｐｌｅしかマッチングに使えない場合がある。このようにネットワークアダプタ１００のフロー分解能が不足していると、所望のフローにＮＩＣオフロードを適用することができなくなる。
[0062]
　また、フィルタテーブルＦＩＬＴに割り当てられている記憶領域が小さい場合、フィルタテーブルＦＩＬＴのオーバーフローがすぐに発生しやすい。フィルタテーブルＦＩＬＴのオーバーフローが発生すると、新たなフィルタエントリをフィルタテーブルＦＩＬＴに追加することができなくなる。このことも、好適なＮＩＣオフロードを阻害する要因となる。
[0063]
　このように、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能が不足している場合、所望のＮＩＣオフロードを実現できなくなる可能性がある。その場合、仮想スイッチ２００へのトラフィックの集中を十分に抑制することができなくなる。
[0064]
　そこで、本実施の形態によれば、
ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足を補うために、そのネットワークアダプタ１００に接続された物理スイッチを用いたオフロードも実施される。
[0065]
　２−１．全体構成
　図１４は、本実施の形態に係るネットワークシステム１の構成を概略的に示すブロック図である。
ネットワークシステム１は、サーバ１０、スイッチ４００及びコントローラ５００を備えている。スイッチ４００は、サーバ１０に接続されたＴｏＲ（Ｔｏｐ ｏｆ Ｒａｃｋ）スイッチである。
[0066]
　２−２．サーバ１０
　サーバ１０は、ネットワークアダプタ１００、仮想スイッチ２００及び仮想マシン３００を備えている。上述の通り、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴに従って、フロー毎にパケットを処理するように構成されている。
[0067]
　更に、上述の通り、ネットワークアダプタ１００は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを送受信する「ＮＩＣオフロード機能」を有している。所望のフローに関してＮＩＣオフロード機能を有効化／無効化するには、フィルタテーブルＦＩＬＴにおいて当該所望のフローに関するフィルタエントリを適切に設定すればよい。すなわち、フィルタテーブルＦＩＬＴの設定を通して、ＮＩＣオフロード機能の有効化／無効化をフロー毎に動的に制御することができる。フィルタテーブルＦＩＬＴの設定は、上述の通り、経路切替部６０によって行われる。上述の例では、仮想スイッチ２００が経路切替部６０の機能を有しており、仮想スイッチ２００を通してフィルタテーブルＦＩＬＴの設定・変更が可能である。
[0068]
　２−３．スイッチ４００
　
スイッチ４００は、フローテーブル４４０を有している。フローテーブル４４０は、フロー毎にフローエントリを有する。各フローエントリは、フロー識別情報（Ｋｅｙ）と、該当フローのパケットに対して行われるアクション（Ａｃｔｉｏｎ）を示している。フロー識別情報（Ｋｅｙ）にマッチするパケットに対しては、アクション（Ａｃｔｉｏｎ）で指定されるパケット処理（例えば、指定ポートへの出力）が実施される。スイッチ４００は、そのようなフローテーブル４４０に従って、フロー毎にパケット処理を行う。
[0069]
　より詳細には、
スイッチ４００は、テーブル管理部４１０、スイッチ処理部４２０、コントローラ通信部４３０、及び複数のポート４５０を備えている。テーブル管理部４１０は、フローテーブル４４０の管理（設定変更、等）を行う。テーブル管理部４１０は記憶装置を含んでおり、フローテーブル４４０はその記憶装置に格納される。
[0070]
　２−４．トンネル処理
　本実施の形態に係る
ネットワークアダプタ１００、仮想マシン３００及びスイッチ４００は、「トンネル処理」をサポートしている。トンネル処理の場合、ネットワークアダプタ１００は、フローを認識することなく、仮想マシン３００とスイッチ４００との間でパケット転送を行う。
[0071]
　図１５を参照して、トンネル処理を更に詳しく説明する。図１５に示されるように、
スイッチ４００のある物理ポート４５０には、トンネル処理専用の仮想ポート４５１（以下、「トンネル処理用ポート４５１」と参照される）が設けられる。そのトンネル処理用ポート４５１は、仮想マシン３００毎に用意される。
トンネル処理において、スイッチ４００は、トンネル処理用ポート４５１を通して、対応する仮想マシン３００との間でパケットを送受信する。このとき、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴを参照することなく、当該パケットをスイッチ４００と仮想マシン３００との間で転送する。具体的には、ネットワークアダプタ１００は、パケットのＭＡＣヘッダからＭＡＣアドレスを抽出し、更に、ＭＡＣテーブル１８０を参照することによって当該パケットの転送先を決定する。
[0072]
　このように、トンネル処理において、ネットワークアダプタ１００は、フローを認識することなく、パケットのＭＡＣアドレスに基づいてパケット転送を行う。すなわち、トンネル処理の場合、フィルタテーブルＦＩＬＴを参照することなく、仮想マシン３００とスイッチ４００との間でパケット転送が可能である。これが、「スイッチオフロード」に相当する。
[0073]
　
どのフローに対してトンネル処理（スイッチオフロード）を適用するかは、スイッチ４００のフローテーブル４４０を適宜設定することにより制御可能である。具体的には、所望のフローに対してトンネル処理を適用する場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０のフローエントリを設定すればよい。逆に、所望のフローに対してトンネル処理を適用しない場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されないようにフローテーブル４４０のフローエントリを設定すればよい。このように、スイッチ４００のフローテーブル４４０の設定を通して、トンネル処理（スイッチオフロード）の有効化／無効化をフロー毎に制御することが可能である。
[0074]
　以上に説明されたように、トンネル処理（スイッチオフロード）の場合、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴは参照されず、その代わりに、スイッチ４００のフローテーブル４４０がフロー制御に利用される。従って、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能が不足していたとしても、スイッチ４００のフローテーブル４４０を適宜利用することにより、その機能不足を補うことができる。
[0075]
　例えば、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴのフロー分解能が不足している場合であっても、よりフロー分解能の高いスイッチ４００のフローテーブル４４０を利用することによって、所望のフローにオフロード処理（ＮＩＣオフロードの代わりにスイッチオフロード）を適用することが可能となる。これは、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足をスイッチ４００のフローテーブル４４０で補っていることを意味する。
[0076]
　また、スイッチオフロードを利用することにより、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴにおけるエントリ消費を減らすことができる。これにより、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴのオーバーフローが発生しにくくなる。これは、フィルタテーブルＦＩＬＴに割り当てられている記憶領域が小さい場合に、特に有効である。このことも、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足をスイッチ４００のフローテーブル４４０で補っていることを意味する。
[0077]
　２−５．コントローラ
　本実施の形態によれば、ネットワークアダプタ１００によるＮＩＣオフロードの有効化／無効化が、フロー毎に動的に制御される。また、トンネル処理（スイッチオフロード）の有効化／無効化が、フロー毎に動的に制御される。これら動的制御を一括して行うのが、コントローラ５００である。
[0078]
　図１４に示されるように、
コントローラ５００は、記憶装置５１０、フロー制御部５２０、及び通信部５３０を備えている。通信部５３０は、サーバ１０やスイッチ４００との間でデータ通信を行う。
[0079]
　
記憶装置５１０には、オフロードポリシテーブル５４０が格納されている。オフロードポリシテーブル５４０は、ＮＩＣオフロードの有効化／無効化、及び、トンネル処理の有効化／無効化に関するポリシ（基準）を規定している。
フロー制御部５２０は、そのオフロードポリシテーブル５４０に規定されているポリシに従って、ＮＩＣオフロードの有効化／無効化を動的に制御し、且つ、トンネル処理の有効化／無効化を動的に制御する。
[0080]
　図１６は、本実施の形態におけるＮＩＣオフロード及びトンネル処理の動的制御を示す概念図である。
[0081]
　あるフローに関してＮＩＣオフロードを有効化／無効化するには、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴにおいて当該フローに関するフィルタエントリを適切に設定すればよい。よって、コントローラ５００は、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの設定を通して、ＮＩＣオフロードの有効化／無効化をフロー毎に動的に制御する。より詳細には、
コントローラ５００は、仮想スイッチ２００の経路切替部６０にフィルタテーブル設定指示を出し、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの設定変更を行わせる。これにより、所望のフローに対するＮＩＣオフロードの適用を、動的に有効化／無効化することができる。
[0082]
　また、あるフローに関してトンネル処理（スイッチオフロード）を有効化／無効化するには、スイッチ４００のフローテーブル４４０において当該フローに関するフローエントリを適切に設定すればよい。よって、コントローラ５００は、スイッチ４００のフローテーブル４４０の設定を通して、トンネル処理の有効化／無効化をフロー毎に動的に制御する。より詳細には、
コントローラ５００は、所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０を設定する。これにより、所望のフローに対するトンネル処理（スイッチオフロード）の適用を、動的に有効化／無効化することが可能となる。
[0083]
　尚、コントローラ５００は、各フローの通信状態（例：スループット）を参照して動的制御を行ってもよい。例えば、図１６に示されるように、
スイッチ４００は、フロー毎の通信状態を示す統計情報ＳＴＡＴを、所定のインターバルでコントローラ５００に通知する。コントローラ５００は、スイッチ４００から受け取った統計情報ＳＴＡＴを参照し、必要に応じてＮＩＣオフロードやスイッチオフロードを適用する。例えば、「スループットが所定の閾値を超えたフローにスイッチオフロードを適用する」ということがオフロードポリシテーブル５４０に規定されている場合、コントローラ５００は、統計情報ＳＴＡＴを参照して、必要なフローにスイッチオフロードを適用する。
[0084]
　図１７は、本実施の形態におけるコントローラ５００による処理を示すフローチャートである。コントローラ５００は、所定のインターバルで、スイッチ４００から統計情報ＳＴＡＴを受け取る（ステップＳ１０）。
[0085]
　
コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、ＮＩＣオフロードの設定変更が必要かどうかを決定する
設定変更が必要な場合
コントローラ５００は、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴを書き換えることにより、所望のフローに対するＮＩＣオフロードの適用を有効化／無効化する
[0086]
　また、
コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、スイッチオフロードの設定変更が必要かどうかを決定する
設定変更が必要な場合
コントローラ５００は、スイッチ４００のフローテーブル４４０を書き換えることにより、所望のフローに対するトンネル処理の適用を有効化／無効化する
[0087]
　尚、図１７で示された処理フローは、コントローラ５００がフロー制御プログラムを実行することによって実現されてもよい。フロー制御プログラムは、コントローラ５００によって実行されるコンピュータプログラムである。フロー制御プログラムは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。
[0088]
　ここで、コントローラ５００がＮＩＣオフロードの有効化／無効化を直接制御する代わりに、次のように仮想スイッチ２００に行わせることもできる。すなわち、コントローラ５００が保持するオフロードポリシテーブル５４０の情報のうち、仮想スイッチ２００が処理するフローに関連する情報を仮想スイッチ２００に伝達する。仮想スイッチ２００は、ＮＩＣオフロードの有効化／無効化を制御する経路切替部６０を備えている。仮想スイッチ２００自身が計測する統計情報を参照して、経路切替部６０は、上記情報に基づいてＮＩＣオフロードの有効化／無効化を判定する。このようにすることで、オフロードポリシに従って、仮想スイッチ２００が自律的にＮＩＣオフロードの制御を行うことができるようになり、コントローラ５００で全てのオフロード制御を行う必要がなくなる。これにより、コントローラ５００にかかる負荷を分散することができる。更に、より時間的に高い精度で、オフロードの有効化／無効化を切り替えることができるようになる。」
（カ）上記（ア）〜（オ）より、特に下線部に着目すると、上記引用文献１には、次の発明（以下、「引用発明」という。）が記載されていると認められる。
「ネットワークシステムにおけるフロー制御方法であって、
　ネットワークシステム１は、ネットワークに接続された複数のサーバ１０を備えており、
　サーバ１０間には、複数のスイッチが配置されており、
　サーバ１０は、処理装置４０と、処理装置４０に接続されたネットワークアダプタ１００とを備えており、
　処理装置４０は、ハイパーバイザ５０、仮想スイッチ２００、及び少なくとも１台の仮想マシン（仮想サーバ）３００を備えており、
　ネットワークアダプタ１００は、仮想ＮＩＣ、受信フィルタ１１０、送信フィルタ１２０、記憶装置１３０、及びデータ直接伝送機能１４０を備えており、
　データ直接伝送機能１４０は、仮想スイッチ２００を介することなく仮想マシン３００に対してパケットを直接送受信する機能であり、
　仮想ＮＩＣは、仮想マシン３００（ＶＭ１，ＶＭ２・・・）毎に設けられており、各仮想ＮＩＣは、受信キュー１０１と送信キュー１０２を含んでおり、受信キュー１０１には、ネットワークアダプタ１００がデータリンクから受け取った受信パケットが格納され、受信キュー１０１に格納された受信パケットは、データ直接伝送機能１４０によって、対応する仮想マシン３００に直接送られ、また、ネットワークアダプタ１００がデータ直接伝送機能１４０によって仮想マシンから直接受け取った送信パケットは、その仮想マシンに対応する送信キュー１０２に格納され、
　また、仮想ＮＩＣは、仮想スイッチ２００に対しても設けられており、仮想スイッチ２００とつながる仮想ＮＩＣの受信キュー１０１及び送信キュー１０２は、以下、受信キュー１０１−Ｓ及び送信キュー１０２−Ｓとそれぞれ参照され、受信キュー１０１−Ｓには、ネットワークアダプタ１００が外部データリンクから受け取った受信パケットが格納され、受信キュー１０１−Ｓに格納された受信パケットは、仮想スイッチ２００に送られ、また、ネットワークアダプタ１００が仮想スイッチ２００から受け取った送信パケットは、送信キュー１０２−Ｓに格納され、
　受信フィルタテーブルＦＩＬＴ１は、記憶装置１３０に格納されており、
　受信フィルタテーブルＦＩＬＴ１は、フローと受信アクションとの対応関係を示すテーブルであり、
　受信フィルタ１１０は、その受信フィルタテーブルＦＩＬＴ１を参照し、受信パケットのフローに対応付けられた受信アクションを受信パケットに対して行い、
　受信アクションとしては、２パターン考えられ、第１受信アクションは、「データ直接伝送機能１４０を用いることによって、受信パケットを指定された仮想マシン３００に直接送信すること」であり、この場合、受信フィルタ１１０は、受信パケットを、指定された受信キュー１０１に格納し、第２受信アクションは、「受信パケットを仮想スイッチ２００へ送信すること」であり、この場合、受信フィルタ１１０は、受信パケットを、仮想スイッチ２００宛の受信キュー１０１−Ｓに格納し、
　送信フィルタテーブルＦＩＬＴ２も記憶装置１３０に格納されており、
　送信フィルタテーブルＦＩＬＴ２は、フローと送信アクションとの対応関係を示すテーブルであり、
　送信フィルタ１２０は、その送信フィルタテーブルＦＩＬＴ２を参照し、送信パケットのフローに対応付けられた送信アクションを送信パケットに対して行い、
　送信アクションとしては、２パターン考えられ、第１送信アクションは、「送信パケットを外部のデータリンクへ送信すること」であり、この場合、送信フィルタ１２０は、送信パケットをデータリンクへ送出し、第２送信アクションは、「送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせること」であり、この場合、送信フィルタ１２０は、送信パケットを受信パケットとして受信フィルタ１１０（受信経路）へループバックさせ、
　仮想マシン３００から送出される送信パケットは、まず、ネットワークアダプタ１００に入力され、このとき、その送信パケットは、ネットワークアダプタ１００のデータ直接伝送機能１４０によって、仮想スイッチ２００を介することなくネットワークアダプタ１００に直接入力され、送信フィルタ１２０は、選択した送信キュー１０２から送信パケットを取り出し、
　送信パケットがフローｆｌｏｗ１あるいはｆｌｏｗ２に属する場合、送信フィルタテーブルＦＩＬＴ２中のイグザクトマッチエントリがヒットし、従って、送信フィルタ１２０は、その送信パケットをデータリンクに送出し、つまり、当該送信パケットは、仮想スイッチ２００を通過することなく、仮想マシン３００からネットワークアダプタ１００を介して外部に送信され、
　一方、送信パケットがその他のフローに属する場合、送信フィルタテーブルＦＩＬＴ２中のいずれのイグザクトマッチエントリもヒットせず、従って、送信フィルタ１２０は、その送信パケットを受信パケットとして受信フィルタ１１０にループバックし、受信フィルタテーブルＦＩＬＴ１においても、いずれのイグザクトマッチエントリもヒットせず、従って、受信フィルタ１１０は、その受信パケットを受信キュー１０１−Ｓを介して仮想スイッチ２００へ送り、つまり、当該パケットは、一旦ネットワークアダプタ１００に入力された後、仮想スイッチ２００によって処理されることになり、
　サーバ１０は、更に、「経路切替部６０」を備え、経路切替部６０は、処理装置４０の仮想スイッチ２００あるいはハイパーバイザ５０に組み込まれており、
　受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定を変更することによって、フロー経路を“動的”に切り替えることも可能であり、そのようなエントリ設定及び設定変更を行うのが、経路切替部６０であり、
　ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの機能不足を補うために、そのネットワークアダプタ１００に接続された物理スイッチを用いたオフロードも実施され、
　ネットワークシステム１は、サーバ１０、スイッチ４００及びコントローラ５００を備えており、スイッチ４００は、サーバ１０に接続されたＴｏＲ（Ｔｏｐ ｏｆ Ｒａｃｋ）スイッチであり、
　スイッチ４００は、フローテーブル４４０を有しており、フローテーブル４４０は、フロー毎にフローエントリを有し、各フローエントリは、フロー識別情報（Ｋｅｙ）と、該当フローのパケットに対して行われるアクション（Ａｃｔｉｏｎ）を示しており、フロー識別情報（Ｋｅｙ）にマッチするパケットに対しては、アクション（Ａｃｔｉｏｎ）で指定されるパケット処理（例えば、指定ポートへの出力）が実施され、スイッチ４００は、そのようなフローテーブル４４０に従って、フロー毎にパケット処理を行うものであり、
　スイッチ４００は、テーブル管理部４１０、スイッチ処理部４２０、コントローラ通信部４３０、及び複数のポート４５０を備えており、テーブル管理部４１０は、フローテーブル４４０の管理（設定変更、等）を行い、テーブル管理部４１０は記憶装置を含んでおり、フローテーブル４４０はその記憶装置に格納され、
　ネットワークアダプタ１００、仮想マシン３００及びスイッチ４００は、「トンネル処理」をサポートしており、トンネル処理の場合、ネットワークアダプタ１００は、フローを認識することなく、仮想マシン３００とスイッチ４００との間でパケット転送を行い、
　スイッチ４００のある物理ポート４５０には、トンネル処理専用の仮想ポート４５１（以下、「トンネル処理用ポート４５１」と参照される）が設けられており、そのトンネル処理用ポート４５１は、仮想マシン３００毎に用意され、トンネル処理において、スイッチ４００は、トンネル処理用ポート４５１を通して、対応する仮想マシン３００との間でパケットを送受信し、このとき、ネットワークアダプタ１００は、フィルタテーブルＦＩＬＴを参照することなく、当該パケットをスイッチ４００と仮想マシン３００との間で転送し、具体的には、ネットワークアダプタ１００は、パケットのＭＡＣヘッダからＭＡＣアドレスを抽出し、更に、ＭＡＣテーブル１８０を参照することによって当該パケットの転送先を決定し、
　どのフローに対してトンネル処理（スイッチオフロード）を適用するかは、スイッチ４００のフローテーブル４４０を適宜設定することにより制御可能であり、具体的には、所望のフローに対してトンネル処理を適用する場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０のフローエントリを設定すればよく、逆に、所望のフローに対してトンネル処理を適用しない場合、当該所望のフローのパケットがトンネル処理用ポート４５１から入出力されないようにフローテーブル４４０のフローエントリを設定すればよく、このように、スイッチ４００のフローテーブル４４０の設定を通して、トンネル処理（スイッチオフロード）の有効化／無効化をフロー毎に制御することが可能であり、
　コントローラ５００は、記憶装置５１０、フロー制御部５２０、及び通信部５３０を備えており、通信部５３０は、サーバ１０やスイッチ４００との間でデータ通信を行い、
　記憶装置５１０には、オフロードポリシテーブル５４０が格納されており、オフロードポリシテーブル５４０は、ＮＩＣオフロードの有効化／無効化、及び、トンネル処理の有効化／無効化に関するポリシ（基準）を規定しており、
　フロー制御部５２０は、そのオフロードポリシテーブル５４０に規定されているポリシに従って、ＮＩＣオフロードの有効化／無効化を動的に制御し、且つ、トンネル処理の有効化／無効化を動的に制御し、
　コントローラ５００は、仮想スイッチ２００の経路切替部６０にフィルタテーブル設定指示を出し、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴの設定変更を行わせ、これにより、所望のフローに対するＮＩＣオフロードの適用を、動的に有効化／無効化することができ、
　コントローラ５００は、所望のフローのパケットがトンネル処理用ポート４５１から入出力されるようにフローテーブル４４０を設定し、これにより、所望のフローに対するトンネル処理（スイッチオフロード）の適用を、動的に有効化／無効化することが可能となり、
　スイッチ４００は、フロー毎の通信状態を示す統計情報ＳＴＡＴを、所定のインターバルでコントローラ５００に通知し、コントローラ５００は、スイッチ４００から受け取った統計情報ＳＴＡＴを参照し、必要に応じてＮＩＣオフロードやスイッチオフロードを適用するものであり、例えば、「スループットが所定の閾値を超えたフローにスイッチオフロードを適用する」ということがオフロードポリシテーブル５４０に規定されている場合、コントローラ５００は、統計情報ＳＴＡＴを参照して、必要なフローにスイッチオフロードを適用し、
　コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、ＮＩＣオフロードの設定変更が必要かどうかを決定し、設定変更が必要な場合、コントローラ５００は、ネットワークアダプタ１００のフィルタテーブルＦＩＬＴを書き換えることにより、所望のフローに対するＮＩＣオフロードの適用を有効化／無効化し、
　コントローラ５００は、統計情報ＳＴＡＴとオフロードポリシテーブル５４０に基づいて、スイッチオフロードの設定変更が必要かどうかを決定し、設定変更が必要な場合、コントローラ５００は、スイッチ４００のフローテーブル４４０を書き換えることにより、所望のフローに対するトンネル処理の適用を有効化／無効化する、方法。」
第５　対比・判断
１．本願発明１について
（１）対比
　本願発明１と引用発明とを対比すると、次のことがいえる。
（ア）引用発明は、「ネットワークシステムにおけるフロー制御方法」であるところ、フロー制御においてデータパケットの処理が行われることは明らかであるから、引用発明と本願発明１とは、「ネットワークでデータパケットを処理するための方法」である点で共通している。
（イ）引用発明の「コントローラ５００」は、「スループットが所定の閾値を超えたフローにスイッチオフロードを適用する」ということが「オフロードポリシテーブル５４０」に規定されている場合に、「統計情報ＳＴＡＴを参照して、必要なフローにスイッチオフロードを適用」するものであって、「スイッチオフロードの設定変更が必要かどうかを決定し、設定変更が必要な場合、コントローラ５００は、スイッチ４００のフローテーブル４４０を書き換える」ものであるから、「コントローラ５００」は、統計情報ＳＴＡＴを参照して、スループットが所定の閾値を超えるフローであってスイッチオフロードが適用されるフローと、スイッチオフロードが適用されないフローとに、フローを分類しているといえる。
　また、本願発明１の「閾値」は、フローのデータパケット数に基づいてフローを分類するためのパラメーターであると理解することができ、一方、引用発明の「閾値」は、フローのスループットに基づいてフローを分類するためのパラメーターであるといえるから、両者は、「特定の分類パラメーター」に従ってフローを分類するものであって、前記「特定の分類パラメーター」は、データパケットの量に関する閾値である、という点で共通している。
　そうすると、引用発明と本願発明１の「データパケットを含んでいるフローを、特定の分類パラメーターに従って、エレファント・フローとマイス・フローに分類するステップであって、１つのエレファント・フローには１つのマイス・フローよりも多くのデータパケットを含んでおり、前記特定の分類パラメーターは閾値であり」とは、「データパケットを含んでいるフローを、特定の分類パラメーターに従って分類するステップであって、前記特定の分類パラメーターはデータパケットの量に関する閾値である」との構成を備える点で共通している。
（ウ）引用発明の「ネットワークアダプタ１００」が備える「送信フィルタ１２０」は、「送信パケットがその他のフローに属する場合」、「その送信パケットを受信パケットとして受信フィルタ１１０にループバック」し、「受信フィルタ１１０は、その受信パケットを受信キュー１０１−Ｓを介して仮想スイッチ２００へ送」るものであるから、引用発明と本願発明１の「前記分類された前記エレファント・フローと前記マイス・フローをサーバーにおける仮想スイッチに送信するステップ」とは、「データパケットを含んでいるフローをサーバにおける仮想スイッチに送信するステップ」を備える点で共通している。
（エ）引用発明の「スイッチ４００」は、サーバ１０に接続されたＴｏＲ（Ｔｏｐ ｏｆ Ｒａｃｋ）スイッチであるから、本願発明１の「ハードウェア・スイッチ」に相当する。そして、引用発明の「スイッチ４００」は、トンネル処理において「トンネル処理用ポート４５１を通して、対応する仮想マシン３００との間でパケットを送受信」するものであるから、引用発明と本願発明１の「前記仮想スイッチに送信されたエレファント・フローと前記処理されたマイス・フローをネットワークにおけるハードウェア・スイッチに送信するステップ」とは、「データパケットをネットワークにおけるハードウェア・スイッチに送信するステップ」を備える点で共通している。
　したがって、本願発明１と引用発明との間には、次の一致点、相違点があるといえる。
（一致点）
「ネットワークでデータパケットを処理するための方法であって、
　データパケットを含んでいるフローを、特定の分類パラメーターに従って分類するステップであって、前記特定の分類パラメーターはデータパケットの量に関する閾値であり、
　データパケットを含んでいるフローをサーバにおける仮想スイッチに送信するステップと、
　データパケットをネットワークにおけるハードウェア・スイッチに送信するステップと
を含む方法。」
（相違点）
（相違点１）本願発明１は、「データパケットを含んでいるフローを、特定の分類パラメーターに従って、エレファント・フローとマイス・フローに分類」し、「前記分類された前記エレファント・フローと前記マイス・フローをサーバーにおける仮想スイッチに送信」し、「前記仮想スイッチで前記マイス・フローを処理」し、「前記仮想スイッチに送信されたエレファント・フローと前記処理されたマイス・フローをネットワークにおけるハードウェア・スイッチに送信する」という一連のステップを備えるのに対し、引用発明は、データパケットを含んでいるフローを閾値に従って分類するステップと、データパケットを含んでいるフローをサーバにおける仮想スイッチに送信するステップと、データパケットをネットワークにおけるハードウェア・スイッチに送信するステップとを有するものではあるが、フローを「エレファント・フローとマイス・フロー」に分類すること、「前記分類された前記エレファント・フローと前記マイス・フロー」を仮想スイッチに送信すること、「前記仮想スイッチで前記マイス・フローを処理」すること、及び、「前記仮想スイッチに送信されたエレファント・フローと前記処理されたマイス・フロー」をハードウェア・スイッチに送信すること、については記載されていない点。
　すなわち、本願発明１は、仮想スイッチにフローを送信する前にフローを分類し、分類されたフローの全てを仮想スイッチに送信するのに対し、引用発明は、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード処理の適用のためにフローを分類するものであるため、分類されたフローの全てが仮想スイッチに送信されるわけではない点。
（相違点２）本願発明１は、データパケットの量に関する閾値が、フローのデータパケット数に関する閾値であるのに対し、引用発明は、データパケットの量に関する閾値が、フローのスループット（すなわち単位時間あたりのパケットの量）に関する閾値である点。
（相違点３）本願発明１は、「前記ハードウェア・スイッチで前記エレファント・フローを処理し、前記マイス・フローを処理せず、処理されたエレファント・フローと受信したマイス・フローを転送するステップ」を備えるのに対し、引用発明はそのような構成を備えていない点。
（相違点４）本願発明１は、仮想スイッチでマイス・フローを処理するステップは、「フロー情報をバッファリングするステップ、パケット・ヘッダを置き換えるステップ、カプセル化するステップ、およびカプセル化解除するステップのうちの1つまたは複数を含む」という構成を備えるのに対し、引用発明はそのような構成を備えていない点。
（２）相違点についての判断
ア　相違点１について
　引用発明の「コントローラ５００」は、「スループットが所定の閾値を超えたフローにスイッチオフロードを適用する」ということが「オフロードポリシテーブル５４０」に規定されている場合に、「統計情報ＳＴＡＴを参照して、必要なフローにスイッチオフロードを適用」するものであるから、「コントローラ５００」は、スループットが所定の閾値を超えるフローであってスイッチオフロードが適用されるフローと、スイッチオフロードが適用されないフローとに、フローを分類しているといえる。
　しかしながら、引用発明においては、フローを「エレファント・フローとマイス・フロー」に分類し、「前記分類された前記エレファント・フローと前記マイス・フロー」を仮想スイッチに送信することは記載も示唆もされていない。また、引用発明の、仮想スイッチを介することなく仮想マシンに対してパケットを送受信するオフロード機能を所望のフローに対して適用できるようにするという目的からすれば、分類されたフローの全てを仮想スイッチに対して送信する構成を引用発明に適用することには技術的な阻害要因があるといえる。
　さらに、引用文献１には、「ネットワークアダプタ１００」が、受信フィルタテーブルＦＩＬＴ１に基づいて受信パケットを「仮想スイッチ２００」へ送信すること、及び、「仮想マシン３００」が、トンネル処理においてトンネル処理用ポート４５１を通して「スイッチ４００」にパケットを送信することが記載されているものの、「仮想スイッチ」において「前記マイス・フローを処理」して、「前記仮想スイッチに送信されたエレファント・フロー」と「前記処理されたマイス・フロー」とをハードウェア・スイッチに送信するという一連の処理は、記載も示唆もされておらず、これらの処理は周知技術であるとも認められない。
　なお、原査定において、引用発明の「経路切替部６０」を何処に置くかは設計事項に過ぎず、引用発明のスイッチオフロードにおいて、「経路切替部６０」を仮想スイッチ２００に置くことにより、オフロードされるフローも、オフロードされないフローも、仮想スイッチ２００に送られ、その仮想スイッチ２００の中の経路切替部６０で、オフロードされるフローと、オフロードされないフローとが、経路切替されることを指摘した上で、エレファント・フローおよびマイス・フローがいずれも仮想スイッチを経由してハードウェア・スイッチに送られることは設計事項に過ぎないと判断している。しかしながら、引用発明の「経路切替部６０」は、ネットワークアダプタ１００が備える受信フィルタテーブルＦＩＬＴ１及び送信フィルタテーブルＦＩＬＴ２におけるエントリ設定及び設定変更を行うものであるから、仮に、当該「経路切替部６０」を仮想スイッチ２００に置いたとしても、「オフロードされるフローも、オフロードされないフローも、仮想スイッチ２００に送られ」ることにはならず、相違点１に係る本願発明１の構成には到達しない。
　したがって、引用発明から当業者が相違点１に係る本願発明１の構成を想到することはできない。
イ　相違点３について
　引用発明においては、「前記ハードウェア・スイッチで前記エレファント・フローを処理し、前記マイス・フローを処理せず、処理されたエレファント・フローと受信したマイス・フローを転送する」ことは記載も示唆もされておらず、当該事項は周知技術であるとも認められない。
　したがって、引用発明から当業者が相違点３に係る本願発明１の構成を想到することはできない。
ウ　まとめ
　したがって、上記相違点２、４について判断するまでもなく、本願発明１は、当業者であっても引用発明に基づいて容易に発明できたものであるとはいえない。
２．本願発明２−６について
　本願発明２−６も、相違点１、３に係る本願発明１の構成を備えるものであるから、本願発明１と同じ理由により、当業者であっても、引用発明に基づいて容易に発明できたものとはいえない。
３．本願発明７、８について
　本願発明７は、本願発明１−６に対応するシステムの発明であり、また、本願発明８は、本願発明１−６に対応するコンピュータ・プログラムの発明であり、いずれも、相違点１、３に係る本願発明１の構成を備えるものであるから、本願発明１と同様の理由により、当業者であっても、引用発明に基づいて容易に発明できたものとはいえない。
第６　原査定について
　原査定は、請求項１−２１について上記引用文献１に基づいて、当業者が容易に発明できたものであるから、特許法第２９条第２項の規定により特許を受けることができないというものである。
　しかしながら、令和元年１０月１７日付けの手続補正により補正された特許請求の範囲の請求項１−８は、上記相違点１及び相違点３に係る、「データパケットを含んでいるフローを、特定の分類パラメーターに従って、エレファント・フローとマイス・フローに分類」し、「前記分類された前記エレファント・フローと前記マイス・フローをサーバーにおける仮想スイッチに送信」し、「前記仮想スイッチで前記マイス・フローを処理」し、「前記仮想スイッチに送信されたエレファント・フローと前記処理されたマイス・フローをネットワークにおけるハードウェア・スイッチに送信」し、「前記ハードウェア・スイッチで前記エレファント・フローを処理し、前記マイス・フローを処理せず、処理されたエレファント・フローと受信したマイス・フローを転送する」という構成を有するものとなっており、上記のとおり、引用発明に基づいて、当業者が容易に発明できたものではない。
　したがって、原査定を維持することはできない。
第７　むすび
　以上のとおり、原査定の理由によっては、本願を拒絶することはできない。
　また、他に本願を拒絶すべき理由を発見しない。
　よって、結論のとおり審決する。