(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
ソフトウェア確定ネットワーク(Software Defined Networking)において仮想マシンまたは仮想化コンテナを用いたローカルサービスチェーン(local service chaining)を実施するための方法、ソフトウェア、および、装置に係る実施例が、ここにおいて説明される。以降の説明において、ここにおいて開示され、説明される実施例について完全な理解を提供するために数多くの所定の詳細が明らかにされる。当業者であれば、しかしながら、一つ以上の所定の詳細がなくても、または、他の方法、コンポーネント、材料、等を用いても、本発明が実施され得ることが理解されよう。他のインスタンスにおいては、本発明の態様が不明確になることを避けるために、よく知られた構成、材料、または、オペレーションについて、詳細には示されず、または、説明されない。
【0010】
明確化のために、ここにおける図面の中の個々のコンポーネントは、また、所定の参照番号の他に、図面におけるラベルによっても参照され得る。加えて、所定のタイプのコンポーネント(所定のコンポーネントとは対照的に)を参照している参照番号は、「典型的(”typical”)」であることを意味する「(typ)」が以降に続く参照番号によって示されている。こうしたコンポーネントの構成は、存在するが簡素化と明確化のために図面には示されない類似のコンポーネントについて典型的なものであり、または、そうでなければ、別個の参照番号を用いてラベル付けされていない類似のコンポーネントついて典型的なものである。反対に、「(typ)」は、開示された機能、実施、目的、等のために典型的に使用されるコンポーネント、エレメント等を意味するように理解されるべきではない。
【0011】
ここにおいて使用されるように、用語「仮想装置」、「仮想ネットワーク装置」、「ネットワーク装置」、または、単に「装置」は、互換的に使用され得る。加えて、ここにおける目的のために、請求項を含めて、ソフトウェア確定ネットワークに関する、または、ネットワーク機能仮想化を実施するように構成された、あらゆるソフトウェアベースの装置は、より一般的に「仮想装置」として参照される。仮想ネットワーク装置は、ネットワーク機能仮想化及び/又はソフトウェア確定ネットワークに関するオペレーションを実施するように構成されたあらゆるネットワーク装置または仮想化エンティティを含むという理解によるものである。従って、以降の説明における仮想装置という用語は、同様に、全てのNFV装置を含んでいる。
【0012】
ここにおいて説明される実施例に係る態様に従えば、「カットスルー(”cut−through”)」メカニズムを作成することによって、パケットスループットが加速される。メカニズムにより、パケットは、仮想スイッチを使用することなく、仮想ネットワーク装置と類似のSDNコンポーネントとの間で転送され得る。このことは、部分的に、「ローカルサービスチェーン(LSC)」を介して促進される。LSCは、ここにおいて、計算ノードに対して内部に在るネットワークを横断するパケットのフローを記述するために使用され、パケットが、複数の仮想マシンまたは仮想化コンテナにおいて実施される一連のネットワークサービスエレメント(例えば、仮想ネットワーク装置)によって処理される。
【0013】
例示として、かつ、限定することなく、
図1は、LSCの使用を通じてパケット処理オペレーションを実行するように構成されている計算ノード(例えば、サーバーといった計算プラットフォーム)のためのアーキテクチャ100を示している。アーキテクチャ100は、ネットワークインターフェイス104に接続された計算プラットフォーム102を含んでいる。ネットワークインターフェイスは、計算プラットフォーム上に統合されてよく(例えば、ネットワークインターフェイスコントローラ(NIC)として)、または、そうでなければ、動作可能に計算プラットフォームに接続されてよい(例えば、PCIe(ペリフェラルコンポーネントインターコネクトエクスプレス)拡張スロットにインストールされたPCIeカードとして)。計算プラットフォーム102は、OSメモリ107において稼働しているホストオペレーティングシステム(OS)106を含んでいる。OSメモリは、アプリケーションメモリ空間108で実行している複数のアプリケーションをホストするように構成されており、アプリケーションメモリ空間は、ホストOSの上に示されている。アプリケーションメモリ空間は、仮想スイッチ109と、N個の仮想マシン112をホストするように構成されているハイパーバイザ110とを含んでいる。N個の仮想マシンは、VM1、VM2およびVMNとラベル付けされた仮想マシンによって示されている。ソフトウェアコンポーネントは、さらに、SDNコントローラ114を含んでいる。
【0014】
ネットワークインターフェイス104は、Port1、Port2・・・PortMとラベル付けされたM個のネットワークポート116を含んでいる。ここで、Mは、Nと同一または異なってよい。それぞれのネットワークポート116は、受信(Rx)バッファ118と送信(Tx)バッファ120とを含んでいる。ここでの図面において使用されるように、示されているRxとTxバッファおよびRxとTxキューも、また、同一場所にあるRxとTxポートを表している。混乱を低減するために、RxとTxポートは、別個に示されていないが、当業者であれば、それぞれのRxとTxポートは、一つまたはそれ以上のRxとTxバッファ及び/又はキューを含むことが理解されよう。
【0015】
一般的に、ネットワークインターフェイスは、RxとTxポートにおいて実施される比較的に小さなRxとTxバッファを含んでよく、そして、より大きなRxとTxバッファは、複数のRxとTxポートにわたり共有されるネットワークインターフェイス上の入力/出力(IO)メモリにおいて実施され得る。図示された実施例においては、IOメモリの少なくとも一部分は、ホストOS106のOSメモリ107においてNICドライバ124によって構成されるメモリマップドIO(MMIO)122である。MMIO122は、MMIO122におけるメモリバッファと計算プラットフォーム102上のシステムメモリにおけるバッファとの間のダイレクトメモリアクセス(DMA)データ転送をサポートするように構成されている。さらなる詳細が以下に説明される。
【0016】
仮想スイッチ109は、計算プラットフォーム102の内側でSDNスイッチオペレーションを実施するように構成されているソフトウェアベースのエンティティである。図示された実施例において、仮想スイッチ108は、ネットワークインターフェイス104上の物理的RxとTxポートそれぞれに対する(例えば、ポート1−ポートMそれぞれに対するもの)仮想RxとTxポート、および、仮想マシンVM1−VMNそれぞれに対する仮想RxとTxポート、を含んでいる。ネットワークインターフェイス側の仮想ポートは、Rx仮想ポート126およびTx仮想ポート127として示されており、一方、VM側の仮想ポートは、Rx仮想ポート128およびTx仮想ポート129として示されている。さらに示されるように、RxとTxポート126、127、128、および、129それぞれの一部分は、システムメモリアドレス空間の共有メモリ領域134(共有アドレス空間としても参照されるもの)にオーバーラップするものとして示されている。加えて、RxとTxポート130および132のペアは、さらに、それぞれの仮想NIC(vNIC)の中に拡張しているように示されている。vNIC1、vNIC2、および、vNICNによって示されるようにであり、ここで、vNICは、仮想マシンVM1、VM2、および、VMNそれぞれと関連付けされている。
【0017】
仮想マシンVM1、VM2、および、VMNそれぞれは、仮想装置136と3つのアプリケーション138を含んでいるものとして示されている。その仮想装置とアプリケーションが稼働している対応するVMを特定している指標を伴うものである。例えば、VM1に対して、仮想装置は「装置1(”Appliance1”)」とラベル付けされ、アプリケーションは「アプリケーション1A(”Application1A”)」、「アプリケーション1B」、および、「アプリケーション1C」とラベル付けされている。一般的に、それぞれの仮想装置136は、一つまたはそれ以上のアプリケーション138を介して実施され得るものであり、3つのアプリケーションを包含することは単に説明目的のためである。計算プラットフォーム102のオペレーションの最中に、仮想装置136それぞれは、一つまたはそれ以上のパケット処理サービスを実行するように構成されている。さらに、パケット処理サービスは、それぞれのパケットに関連するパケットフローのために適用可能なLSCによって定められるように、チェーン方式(chained manner)で実施される。
【0018】
ローカルサービスチェーンを使用したチェーンパケット処理サービスのコンセプトは、さらに、パケット140の処理に関連して示されたオペレーションとデータ転送を介して
図1において説明されており、
図2において示されるフローチャート200をさらに参照する。パケット140はIP(インターネットプロトコル)パケットとして示されており、この典型的なIPパケットの使用は、パケットがIPアドレスを使用することを意味している。IPアドレスは、パケット140が、ネットワークにおいてどこに転送され、どこで計算プラットフォーム102によって扱われるかを決定するように、部分的に、使用されるものである。フローチャート200のブロック202において示されるように、プロセスは、ネットワークインターフェイス104のポート1においてネットワークから受信されているパケット140を用いて開始する。一般的に、パケットデータは、データのビットストリームとしてネットワークのリンクにわたり転送される。例えば、イーサネット(登録商標)(Ethrnet)ネットワークについて、パケットデータは、イーサネットフレームのストリームとして転送される。ポート1において、適用可能な物理層(PHY)オペレーションが実行され、仮想装置136によって処理されるべきパケットデータをカプセル化したイーサネットパケットを抽出する。抽出されたイーサネットパケットは、ポート1のRxバッフの中にバッファされる。
【0019】
次に、ブロック204において、イーサネットパケットからIPパケットが抽出される。任意的に、レイヤ4又はより高いレベルのパケットが抽出され得る。適用可能なものとしてである。一般的に、ブロック204のオペレーションは、ネットワークインターフェイス104、ネットワークスタック142として示されているOSソフトウェアベースのネットワークコンポーネント、または、分離処理(split processing)スキームを使用している2つの組合せ、のいずれかによって実行され得る。例えば、より多くのいくつかの最近のNICは、レイヤ3(IP)のパケット処理オペレーションをサポートし、かつ、TCP(トランザクションコントロールプロトコル)のパケット処理オペレーションもサポートし得る。他のレイヤ4及びより高いパケ処理は、たいてい、ネットワークスタック142におけるソフトウェアコンポーネントを介して実行される。とはいえ、これらも、また、NICまたは類似のネットワークインターフェイスによって実施され得るものである。
【0020】
ブロック206においては、パケットのフロー分類が実行される。このことは、たいてい、受信されたパケットが(もしあれば)属するパケットフローを特定するために、パケットヘッダまたはヘッダにおいて適用可能なヘッダフィールドを検査することを含んでいる。以下にさらに詳細に説明されるように、いくつかの実施例において、パケットフロー情報は、パケットヘッダフィールドにおいて明確に定義され得る。パケットフロー分類は、また、複数のフィールドにおけるデータを使用して実行され得る。よく知られたNテュープル(N−tuple)パケット分類技術の使用といったものを通じてである。
【0021】
一般的に、パケットヘッダ検査は、以下のスキームの一つまたはそれ以上を使用して行われ得る。一つの実施例において、パケットは、ポート116におけるRxバッファからOSメモリ107におけるRxバッファの中にDMAされる(例えば、DMA書込みオペレーションを使用する)。例えば、一つの実施例において、NICポートのRxバッファにおけるメモリ空間は、サーキュラー(circular)FIFOポインタを使用するFIFO(ファーストイン、ファーストアウト)キューに対して割り当てられ、かつ、FIFOヘッダポインタは、Rxバッファ144の中にDMAされたパケットを指し示す。FIFOキューがどのようにオペレーションするかのさらなる詳細は、一つの実施例に従って、
図3において示され、以下に説明される。代替として、パケットヘッダだけが、Rxバッファ144の中にDMAされる。さらに別のオプションとして、パケットヘッダデータは、パケットデータまたはヘッダのいずれもRxバッファ144の中にコピーすることなしに、「現場で(”in place”)」読出される。このインスタンスにおいては、少ない数量のパケットに対するパケットヘッダデータが、ネットワークスタック142またはホストOS106におけるフロー分類器146の中に読出される。同様に、ネットワークインターフェイス104によって実行されるフロー分類のために、パケットヘッダデータが現場で読出され得る。しかしながら、このインスタンスにおいて、バッファは、典型的にはMMIO122(図示なし)から典型的には分離しているネットワークインターフェイス104上のメモリの中に置かれている。
【0022】
フロー分類の結果は、パケットに対するフロー識別子(flow ID)を返す。一つの実施例においては、明確なフローIDなしに受信されたパケットについて、パケットヘッダフィールドにフローIDが追加される。または、代替的に、フローIDが添付され(例えば、前に付ける(prepended))、もしくは、フローIDのためのフィールドを含む「ラッパー(”wrapper”)」の中にカプセル化される。
【0023】
図1に示されるように、図示された実施例において、パケット分類は、フロー分類器146によって実行される。任意的に、フロー分類は、同様なフロー分類器146aを介して、ネットワークインターフェイス104において実行され得る。一つの実施例においては、分離分類スキーム(split classification scheme)が実施され、その下で、既存のフロー(例えば、以前に分類されたフロー)は、フロー分類器146によってネットワークインターフェイス104において特定される。一方、既存のフローに属さないパケットは、新たなパケットフローに対応しているパケット分類のために、フロー分類器146に転送される。新たなパケットフローに対する情報は、次に、フロー分類器146aに提供される。別の実施例の下では、フロー分類器146aによって維持される分類されたフローのリストは、フロー分類器146aによって維持される完成リストより少なく、かつ、メモリキャッシュと同様に動作する。そこでは、より最近のパケットに関するフローが、NIC上のフロー分類器146aの中に維持され、かつ、より最近でないパケットに対するフローがリプレースされる。
【0024】
ブロック206において、さらに示されるように、フローIDはフローテーブル148の中へのルックアップとして使用される。仮想スイッチ109の一部分であるとして示されているものである。一つの実施例において、フローテーブルは、フローIDのカラムとvNICのRxポートIDのカラムを包含している。フローID入力が与えられると、対応するvNICのRxポートIDを返すようにである。フローテーブル148は、また、LSC IDを含んでよい。LSC IDは、LSCタグについて又はパケットラッパーにおけるフィールドに対して使用され、もしくは、そうでなければ、パケットと関連付けされ得る。任意的に、LSCタグは、ローカルサービスチェーンにおいて、第1の仮想装置によって追加されてよい。
【0025】
仮想スイッチ109において実施されているフローテーブル148に加えて、フローテーブルの全部または一部分が、ホストOS106またはネットワークインターフェイス104において実施され得る(どちらも
図1には示されていない)。ネットワークインターフェイス104においてフローテーブルの全部または一部分を使用している実施例において、フローテーブルのエントリーは、一般的に、ホストOS106におけるソフトウェアによって決定され、かつ、NICドライバ124によって適用されるインターフェイスを介して配置される。
【0026】
一旦、vNICのRxポートIDが特定されると、パケットデータが、適用可能なRxバッファアドレスに対して書込まれる。
図1において示された実施例において、このRxポートは、V1Rxとラベル付けされている(仮想マシンVM1のvNIC1に対するRxポートである)。一つの実施例において、パケットデータは、メモリ書込みオペレーションを使用して、RxバッファからOSメモリ107(図示なし)の中にコピーされる。オペレーションの下で、データは、OSメモリのRxバッファから適用可能なRxバッファアドレスへコピーされる。別の実施例において、パケットデータは、DMA書込みを使用して、MMIO122におけるポート1のRxバッファから直接的にvNICのRxバッファの中に書込まれる。例えば、ヘッダが現場で検査されたパケットに対して、ダイレクトDMA書込みが実行され得る。
【0027】
一つの実施例において、vNICのRxバッファは、サーキュラーFIFOポインタを用いたFIFOキューとして実施される。この構成を使用している一つの実施例の詳細が、
図3に示されている。
図3の下部に向かって示されるように、vNICのRxバッファ130それぞれは、関連するvNICのRxFIFOキュー300を含んでいる。vNICのRxFIFOキュー300それぞれは、複数のFIFO「スロット(”slot”)」へと分割されたアドレス空間を含んでいる。図示された実施例の下では、FIFOキュー毎に256スロットが存在している。しかし、これは一つの実施例の単なる説明であり、FIFOスロットの数量は変化してよい。FIFOスロットそれぞれに対して使用されるサイズも、また、変化してよい。一つの実施例において、それぞれのFIFOスロットのサイズは、アプリケーションメモリ空間108のために使用されるキャッシュラインのサイズと同一である。vNICのRxFIFOキュー300それぞれは、さらに、サーキュラーFIFOヘッドポインタとサーキュラーFIFOテールポインタを含んでいる。サーキュラーFIFOヘッドポインタは、現在のFIFOキューのロジカル「トップ(”top”)」に在るFIFOスロットを指し示す。一方、テールポインタは、現在のFIFOキューのロジカル「ボトム(”bottom”)」に対応するFIFOスロットを指し示す。ヘッドおよびテールポインタを使用したFIFOキューのオペレーションは、従来技術においてよく知られたものであり、ここにおいては、これらのオペレーションのさらなる詳細は提供されない。
【0028】
一つの実施例において、それぞれのvNICは、一つまたはそれ以上のソフトウェアモジュール一式を介して実施される。オブジェクト志向のデザインの下で、それぞれのRxFIFOキューは、対応するクラスのインスタンスとして実施され得る(例えば、Rx_FIFO_queue)。よく知られているように、クラスは、クラスオブジェクト(例えば、データ)上で動作する機能を実施するための方法、および、他のソフトウェアコンポーネント(例えば、他のクラス)にデータを送信し、かつ、データを受信するためのインターフェイス、を提供する。
【0029】
一つの実施例において、DMA書込みリクエストが、vNIC1のRxFIFOキューのためのRx_FIFO_queue(クラス)インスタンスに対して送付される。DMA書込みリクエストの受信に反応して、Rx_FIFO_queueインスタンスにおける方法は、テールポインタによって現在指し示されているFIFOスロットのメモリアドレスを特定し、そのアドレスをDMA書込みの要求者(例えば、ネットワークインターフェイス104上にエンベッドされたソフトウェアモジュール)に返す。DMAエンジン又は類似のもの(図示なし)は、次に、パケットデータを、MMIO122における場所からFIFOスロットのためのメモリアドレスへ書込む。パケットデータが複数のFIFOスロットに拡がるインスタンスについては、複数のDMA書込みが連続して実行され得る。説明目的のために、パケットデータは、vNICのRxポートの表示のボトムに対して書込まれているように示されている。しかしながら、当業者であれば、パケットデータが書込まれるスロットのRxFIFOキューにおける場所は、FIFOテールポインタによって指し示されたFIFOバッファのロジカル「ボトム」であることが理解されよう。
【0030】
次に、ブロック207において、フローIDタグまたはLSCタグが、パケットデータに対して添付される。
図3に示されるように、一つの実施例において、(パケットデータが書込まれる一つまたはそれ以上のスロットの)第1のFIFOスロットに対して書込まれたデータは、パケットヘッダ304とパケットペイロードデータ306を含むパケットデータに対して前に付けられたタグ302を含んでいる。一つの実施例において、タグ302は、LSCタグ(例えば、LSC ID値)を保管するために使用される。任意的に、タグ302は、フローIDを保管するために使用されてよい。よく知られているように、IPパケット(または他のタイプのパケット)のサイズは変化してよい。一方、パケットプロトコルヘッダの長さは、一般的に同一である(いくつかのプロトコルは、使用される場合にヘッダの長さを変化させる任意的なフィールドを伴うパケットヘッダを定めることに留意する)。可変長のパッケトサイズの観点において、所与のパケットに対するパケットデータは、一つまたはそれ以上のFIFOスロットに対して書込まれ得る。
【0031】
ブロック208と218のスタートおよびエンドループにより表示されたループによって示されるように、複数のオペレーションが、所与のパケットフロー(または、代替的に、LSCタグにおけるLSC IDによって明確に特定されるように、パケットヘッダもしくはラッパー)に関連付けされたローカルサービスチェーンにおけるそれぞれの仮想装置に対して実行される。それぞれのLSCは、仮想ネットワーク装置によって実行される複数のサービスを含んでいる。ネットワーク装置は、一式のパイプラインサービスと同様な方法で、連続して一緒にチェーンされている。サービスの実施例は、以下のものを含んでいる。NAT(ネットワークアドレス変換)サービス、ファイアウォールサービス、パケット処理サービス、WAN最適化、仮想プライベートネットワークゲートウェイ、ビデオトランスコード、コンテンツ配信ネットワークサービス、等である。説明目的のために、
図1は、装置1から、装置2へ、・・・、装置Nへチェーンされたシーケンスを示している。しかしながら、これは単に典型的なものであり、LSCは、あらゆる装置の組合せを横断してよい。さらに、LSCは、増加していく順番で装置を横断する必要はない(例えば、LSCは、装置3、装置2へ、装置5へ・・・であり得る)。複数の装置について、同一のサービスまたは一式のサービスを実行するように実施されることも可能である。代替的に、所与の装置は、異なるパケットフローに対して異なるサービスを実行するように構成されてよい。
【0032】
フローチャート200における処理ループに戻ると、ブロック210において、フローに対するパケット処理オペレーション、及び/又は、LSCチェーンにおける現在の仮想装置に対するLSCが実行される。一つの実施例においては、FIFOヘッドポインタによって指し示されたvNICのRxFIFOキューにおける所与のパケット上で、パケット処理オペレーションが実行される。いくつかの仮想装置は、パケットデータを読出し、そのデータを使用して処理を実行する(例えば、パケットデータを民生用アプリケーションに転送する)。一方、他の仮想装置は、パケットデータを変更し得る(例えば、パケットヘッダにおける一つまたはそれ以上のフィールドを変更する)。パケットデータが変更された場合、パケットデータは現場で変更されるか、仮想装置のために割り当てられたVM上のバッファ(
図1における図示なし)の中にコピーされて、次に変更されるかのいずれかである。
【0033】
続けると、ブロック212においては、一旦、所与の仮想装置によって実行されるオペレーションが完了すると、パケットデータをどこに転送するべきか決定がされる。LSCにおける次の仮想装置のいずれによってもアクセスできるようにである。もしくは、現在の仮想装置がLSCにおける最後の仮想装置である場合には、どのTxネットワークポートに対してパケットを転送するか決定される。一つの実施例において、このことは、ローカルフローテーブル150の中へのルックアップとしてLSCタグ値を使用して実行される。任意的に、ローカルフローテーブルは、LSCタグ値の他に、または、加えて、フローIDを含んでよい。一般的に、ローカルフローテーブル150は、フローテーブル148と同様な方法で構成され得る。しかしながら、LSCにおいて第1の仮想装置をホストしているVMに対するvNICのRxポート(またはRxFIFOキュー)を指し示すことの他に、ローカルフローテーブルは、LSCにおいて次の仮想装置をホストしているVMに対するvNICのRxポート(またはRxFIFOキュー)を指し示している。フローテーブル148は、非LSCフローに関する情報を含んでもよいことに留意する(または、そうでなければ、そうした情報は、仮想スイッチ109に対してアクセス可能な別個のテーブルにおいて維持されてよい)。
【0034】
従来のアプローチの下では、VMに別個のメモリ空間が割り当てられ、データは、仮想スイッチの使用を通じて、これら別個のメモリ空間の間で転送される。これは、以下のことを必要とする。最初にデータをvNICのTxポートにコピーすること、データを(メモリ書込みを介して)仮想スイッチのRxポートに転送すること、仮想スイッチを介してデータが書込まれるべきvNICのRxポートを決定すること、vNICのRxポートに接続された仮想スイッチのTxポートにデータをコピーすること又は書込むこと、および、次に、データをvNICのRxポートに書込むこと、である。実際には、これらの書込みのそれぞれは、FIFOキューといった、バッファに対するものであり、かつ、スイッチプロセスは、著しい量のオーバーヘッドを含んでいる。さらに、複数のパケットフローが同時にスイッチされる場合には、一つまたはそれ以上の仮想スイッチポートについて輻輳の可能性が存在する。
【0035】
従来の仮想スイッチのオペレーションをより良く理解するために、一連の仮想ネットワーク装置A、B、C、および、Dによって実行されるオペレーションを含むパケット処理シーケンスを考慮する。それぞれの装置は、受信するパケットに関する一つまたはそれ以上のオペレーションを実行するものである。これらのオペレーションは、チェーン化される。オペレーションのシーケンスa、b、c、および、dが、それぞれの仮想ネットワーク装置A、B、C、および、Dによって実行されるようにであり、仮想ネットワーク装置それぞれは、仮想スイッチSに接続された別個のVM
A−Dによってホストされる。既存のアプローチの下で、パケットフローは、以下のように取り扱われる。VM
AからSへ、VM
Bへ、Sへ、VM
Cへ、Sへ、VM
Dへ。仮想スイッチSへ及びSからの転送それぞれは、別個の受信および送信バッファ/キューの使用を必要とする。バッファ/キューは、仮想マシンVM
A、VM
B、VM
C、および、VM
Dが、それぞれに接続された別個の仮想スイッチのポートに対して実施される。
【0036】
ここにおける実施例の一つの態様に従って、「カットスルー(”cut−through”)」メカニズムが実施される。カットスルーの下では、第1のvNICのRxバッファ(例えば、vNICのRxFIFOキュー)またはLSCにおける現在のサービスを実行している仮想装置をホストするVM上のバッファから、LSCにおける次のサービスを実行する仮想装置をホストするVMに係るvNICのRxバッファ(例えば、vNICのRxFIFOキュー)へ直接的にデータが書込まれる。このことは、部分的に、共有メモリ領域134の使用を通じて促進される。vNICのRxFIFOキューが全てのVMに対してアクセス可能である共有メモリ領域に在るので、あらゆるVMは、仮想スイッチをバイパスする方法で、他のあらゆるVMに係るvNICのRxFIFOキューに書込むことができるからである。このことは、メモリ転送における著しい削減を提供する。同様に、仮想スイッチのオペレーション最中に発生する対応するレイテンシを除去するものである。
【0037】
判断ブロック214によって示されるように、次のバッファがvNICのRxFIFOキューである場合、フローチャートのロジックはブロック216に進む。そこでは、パケットデータが特定されたvNICのRxFIFOキューに直接的に書込まれ、従って、仮想スイッチ134をバイパスしている。上記および上述のように、パケットデータは、vNICのRxポートの表示のボトムに対して書込まれる。上述のように、また、このことは、FIFOテールポインタによって現在指し示されているRxFIFOキューにおけるスロットのアドレスに対してデータを書込むことによって有効となる。
【0038】
ブロック212において、フローIDルックアップがネットワークTxポートとして次のバッファを特定する場合、フローチャートのロジックはブロック220に進む。そこでは、現在のvNICのRxFIFOスロット(または、現在の仮想装置に関連する場合はローカルバッファ)から、ネットワークTxバッファに対してパケットデータのDMA書込みが行われる。ネットワークTxバッファは、MMIO122のアドレス空間に置かれているものである。
図1に示される実施例において、このことは、vNICNのRxFIFOキューから、ネットワークインターフェイス104上のポートMのTxバッファへのパケットデータの直接的な転送として示されている。代替的に、直接的なDMAデータ転送の他に、パケットデータは、仮想スイッチ109を通じて転送されてよい。一つの実施例において、パケットデータは、vNICNのRxFIFOキュー(または、VMN上のバッファ)から、(vNICNのTxポートを介して転送されるより、むしろ)仮想スイッチ上のネットワークTxバッファに対して直接的にコピーされる。
【0039】
図1の右下コーナーに示されるように、パケット152は、ポートMのTxポートからネットワークの中に転送される。一般的に、パケット140と152のヘッダは異なってよく、一方、パケットペイロードデータは同一に保持されてよい。例えば、所与のパケットに対するパケットヘッダにおける一つまたはそれ以上のフィールドは、仮想装置によって実行されるLSC処理オペレーションの最中に変化してよい。いくつかのインスタンスにおいて、パケットペイロードデータは、また、LSCによって実行されるサービスの結果として、変化してよい。
【0040】
上述のパケット140の処理は、フロー毎ベース(per−flow basis)のパケット処理のための一つの技術を説明している。一つの実施例において、SDNコントローラ114は、フローテーブル148とローカルフローテーブル150によって使用されるフローID及び/又はLSCデータを管理するように構成されている。所定のパケットフローのためのパケットは、上述のように、それぞれの仮想装置によって実行されるチェーン化されたサービスのシーケンスを含むLSCを使用してサービスされ得る。一つの実施例において、フローテーブルにおけるフローIDまたはLSC IDに対するエントリーポイント(例えば、進入Rxポート、Rxバッファ、または、RxFIFOキュー)は、サービスチェーンのための次のエントリーポイント(例えば、次のRxポート、Rxバッファ、または、RxFIFOキュー)をルックアップするために使用される。従って、フローテーブルは、一般的に、2つまたはそれ以上のカラムを有し得る。一つは、フローIDまたはLSC IDを含んでおり、他方は、次のエントリーポイントを含んでいる。別の実施例において、フローIDは、受信したパケットをネットワークから第1の仮想装置に対して転送するために使用される。次に、フローIDからLSC IDへのマッピングが行われ、さらなる処理のためにパケットに対してLSCタグが取り付けられる。
【0041】
フロー毎の実施において使用されるLSCは、SDNコントローラ114によって事前に構成されるか、フローが最初に現れたときに決定されるか、いずれでもよい。例えば、オープンフロープロトコルに従って、パケットフローと対応するLSCは、ランタイムオペレーションの最中に決定され得る。LSCに対する所定のシーケンスチェーンは、以下のものによって決定され得る。SDNコントローラにおけるロジック、セントラルSDNコントローラ(例えば、オーケストレータ(orchestrator))または類似のもの、または、SDNコントローラコンポーネントと関連するコンポーネントの組合せといった、別のコンポーネントにおけるロジックによる。
【0042】
図4は、フローテーブル148に対する一式の典型的なテーブルデータである、テーブル1、テーブル2、および、テーブルNを示している。フローテーブル148は、フローIDを含んでいるフローIDカラム、進入ポートIDを含んでいる進入ポートカラム、および、LSC IDを含んでいるLSC IDカラムを含む。テーブル1、テーブル2、および、テーブルNそれぞれは、LSC IDカラム、次のポートカラム、および、サービスカラムを含む。一つの実施例において、テーブル146、テーブル1、テーブル2、および、テーブルNそれぞれに対するテーブルデータは、SDNコントローラ114によって管理される。一般的に、テーブルデータは、計算プラットフォームの初期化の最中、及び/又は、ランタイムオペレーションの最中に決められてよい。
【0043】
一つの実施例において、テーブルデータは、以下のように実施される。フロー分類に関して、パケットに対するフローIDが決定される。これは、フローテーブル148に対するルックアップとして使用される。フローIDから、サービスチェーンにおいて第1の仮想装置をホストしているVMの進入ポートが決定され得る。LSC IDも、また、決定され得る。任意的に、フローテーブル148は、LSC IDカラムを含まなくてよく、それぞれのLSCにおける第1の仮想装置によって、フローIDからLSC IDへのマッピングが実行される。
【0044】
示されるように、進入ポートは、それぞれのフローに対して同一であることを要しない。実行されるべきサービスに応じて、LSCは、一つまたはそれ以上の仮想装置をスキップし得る。また、所与の仮想装置によって実行されるサービスも、また、LSC IDに応じて、異なってよい。サービスカラムにおける「A」、「B」、および、「C」の使用は、それぞれのフローテーブル150に応じた仮想装置によって実行されるサービスに対応している。サービスカラムに含まれるものは任意である。いくつかの実施において、所与の仮想装置は、サービスを提供する全てのLSC(またはフロー)に対して同一のサービスを実行するからである。加えて、ネットワークアダプタ/NICにおける出口ポートも、所定のLSCに応じて、異なってよい。
【0045】
図4aは、フローテーブル150に対して、LSC IDより、むしろフローIDを使用する代替的なフローテーブルスキームを示している。フローIDからLSCへのマッピングは、SDNコントローラ114によって内部で実行され、LSC IDの代わりにフローIDが使用され得る。処理ロジックの残りは、同一を保っている。
【0046】
フロー毎のローカルサービスチェーンに加えて、計算プラットフォームは、ネットワークインターフェイスによって受信される全てのパケット、または、ネットワークインターフェイスの既定のポートにおいて受信される全てのパケットに対して、同一の一式のサービスを実行するように(従って、同一のLSCを実施するように)事前に構成されてよい。
図4bは、単一の、既定のLSCを実施するための、フローテーブル148a、フローテーブル1、フローテーブル2、および、フローテーブルNにおける典型的なテーブルデータを示している。示されるように、全てのフローにおける出口ポートは、vNIC1のRxである。一方、それぞれの仮想装置に対する次のポートは、LSCにおける次の仮想装置に対するvNICのRxオーバーラップである。説明目的のために、既定のLSCを実施するためのフローテーブルデータが示されている。実際には、他の技術を使用し得る。既定のLSCを実施するために、ソフトウェア変数を構成すること及び/又はソフトウェアインストラクションといったものである。例えば、フローテーブルを使用しないでLSCを実施するために、それぞれの仮想マシンに対してソフトウェアがダウンロードされ得る。同様に、ネットワークアダプタまたはNICは、全てのパケットをLSCに対する進入vNICのRxポートに転送するように構成され得る。
【0047】
図1aは、事前に決定されたLSCを使用したパケット140の処理を説明している。示されるように、パケット140は、ポート1のRxポートからvNICのRxポートにDMAされており、以前にホストOS106によって実行されていたであろうあらゆるオペレーションをバイパスし、また、仮想スイッチ109もバイパスしている。別の実施例の下で、パケットは、ネットワークインターフェイスからRxバッファ144に、そして次に、vNICのRxポートにDMAされる。
【0048】
別の方法に従って、LSCは、パケットヘッダに追加されたメタデータを使用して実施される。この技術の下で、外部プラットフォーム上のエンティティ(例えば、オーケストレータまたは類似のもの)は、サービスチェーン全体のエレメントを決定し得る。そして、一旦、サービスチェーンがLSCを伴うプラットフォームに達すると、プラットフォーム上で動作しているソフトウェアは、このメタデータを使用してパケットフローを決定する。このようにして、LSCは、複数のプラットフォーム上で動作している仮想装置を介して実施される、より大きなサービスチェーンと一緒に使用され得る。
【0049】
一般的に、オーケストレータによってVM配置が行われる、ネットワーク機能仮想化システムにおいては、サービスチェーンに係る仮想装置をホストしているVMをインスタンス化することが、オーケストレータにとって有利であり得る。ここにおける実施例に従ってローカルサービスチェーンを実施することの本来の利益が利用できるようにである。例えば、パイプライン化された方法で、所定のフローのためのそれぞれのパケットに対して、同一のサービスが実行されるので、FIFOオーバーフロー(FIFOキューの中により多くのパケットデータを追加するための余地がないこと)の潜在的な問題は、好適にサイズ化されたFIFOキューの使用を通じて除去することができる。このアプローチは、また、仮想スイッチにおけるトラフィックの輻輳の結果として生じ得るあらゆるレイテンシも除去する。そうしたレイテンシは、サービスチェーン全体の処理パフォーマンスを、結果として削減する。単一のパケットに対するレイテンシは、全ての後続のパケットに対する処理レイテンシを結果として生じるからである。
【0050】
FIFOキューが、図面で示され、ここにおいて説明されている一方で、FIFOキューは、その簡潔なこと及びオーバーヘッドがないことを通じた本来の利点を提供することに留意すべきである。さらに、vNICのRxポートそれぞれに対して単一のFIFOキューが示されているが、一つまたはそれ以上のFIFOキューが使用されてよい。例えば、それぞれのフロー及び/又はLSCに対して、分離したFIFOキューが使用され得る。
【0051】
コンピュータプラットフォームは、また、LSCフローと非LSCフローの両方をサポートするように構成されてもよい。例えば、フロー分類の最中に、パケットは、LSCと関連しないフローに属するものとして特定されてよい。従って、パケットは、パケットフローを処理するための従来技術を使用して、処理され得るものである。
【0052】
フローテーブル150の使用に加えて、VMが受信するLSCに関連したそれぞれのパケットに対して何のアクションをなすべきかを、それぞれのVMが決定できるようにするために他の技術が使用され得る。例えば、一つの実施例において、進入VMにおけるLSCモジュールは、パケットを、後続のVMそれぞれによって使用される好適なLSCラベルとタグ付けする。後続のVMは、パケットを受信し、もしあれば、何のサービスがパケット上で実行されるべきかを決定し、かつ、パケットが転送されるべき次のVMを決定する。
【0053】
図5は、プラットフォームハードウェア502と種々のソフトウェアバースのコンポーネントを含む典型的なホストプラットフォームコンフィグレーション500を示している。プラットフォームハードウェア502は、インターコネクト510を介して、メモリインターフェイス506と入力/出力(I/O)インターフェイス508に接続された中央処理装置(CPU)504を含んでいる。いくつかの実施例においては、上述のコンポーネントの全て又は一部分がシステムオンチップ(SoC)上に統合されてよい。メモリインターフェイス506は、システムメモリ512に対するアクセスを促進するように構成されており、たいていSoCから分離している。
【0054】
I/Oインターフェイス508は、プラットフォームハードウェア502によって提供される種々のI/Oインターフェイスを説明している。一般的に、I/Oインターフェイス508は、(ICH(I/Oコントローラハブ)又は類似のものといった)専用コンポーネントとして実施されてよく、または、SoC上で実施されてよい。さらに、I/Oインターフェイス508は、また、ペリフェラルコンポーネントインターフェイステーブルコネクトエクスプレス(PCIe)I/O階層といった、I/O階層として実施されてもよい。I/Oインターフェイス508は、さらに、種々のI/Oリソースとデバイス及び他のプラットフォームコンポーネントとの間の通信を促進する。これらは、ディスクドライブ514といった、不揮発性ストレージデバイスを含んでいる。ディスクドライブは、ディスクコントローラ516、ファームウェアストア518、NIC520、および、他の種々のI/Oデバイスを介してI/Oインターフェイス508と通信可能に接続されており、他のハードウェア522として集合的に示されている。
【0055】
一般的に、CPU504は、シングルコアプロセッサまたはマルチコアプロセッサを含んでよい。M個のコア505として示されるようにである。マルチコアが使用され、種々のソフトウェアコンポーネント424が実施される。モジュールおよびアプローチといったものであり、ディスクドライブ514として示されるように、一つまたはそれ以上の不揮発性ストレージデバイスの中に保管されている。より一般的に、ディスクドライブ514は、種々のタイプの不揮発性ストレージデバイスを表している。磁気ベースおよび光ベース両方のストレージデバイスを含んでおり、半導体ドライブ(SSD)またはフラッシュメモリといった、半導体ストレージデバイスも同様である。任意的に、ソフトウェアコンポーネント524の全てまたは一部分は、ネットワーク526を介してアクセスされる一つまたはそれ以上のストレージデバイス(図示なし)上に保管されてよい。
【0056】
ブートアップまたはランタイムオペレーションの最中には、種々のソフトウェアコンポーネント524およびファームウェアコンポーネント528がシステムメモリ512(FW空間として示されるように)の中にロードされ、実行スレッドまたは類似のものを含むプロセスとしてコア505上で実行される。所定のプロセッサまたはSoCアーキテクチャに応じて、所与の「物理的(”physical”)」コアが、一つまたはそれ以上のロジカルコアとして実施され得る。種々のロジカルコアに割り当てられているプロセスを用いるものである。例えば、インテル社のハイパースレッディング(Hyperthreading)アーキテクチャの下で、それぞれの物理的コアは、2つのロジカルコアとして実施される。
【0057】
プラットフォームハードウェア502のための典型的なシステムブートの下では、ファームウェア528がシステムメモリ512の中にロードされて構成され、ホストOS530のブートが後に続く。その後、ハイパーバイザ532、一般的にホストOS530上で稼働しているアプローチを含み得るものが、起動される。ハイパーバイザ532は、次に、種々の仮想マシン、VM
1−N、を起動するために使用され得る。それぞれのVMは、システムメモリ512の種々の部分(つまり、アドレス空間)を使用するように構成される。今度は、それぞれのオペレーティングシステム534
1−Nをホストするために、それぞれの仮想マシンVM
1−Nが使用され得る。
【0058】
ランタイムオペレーションの最中に、ハイパーバイザ532は、種々のシステムリソースの再構成を可能にする。システムメモリ512、コア505、および、ディスクドライブ514といったものである。一般的に、仮想マシンは、ホストされているオペレーティングシステムと根底にあるプラットフォームは502との間のアブストラクション(abstraction)を(ハイパーバイザ532との組み合わせにおいて)提供し、ハードウェアリソースが、VM
1−N間で共有できるようにしている。ホストされているオペレーティングシステムそれぞれの観点から、オペレーティングシステムは全てのプラットフォームを「所有」しており、仮想マシン上で稼働している他のオペレーティングシステムの存在に気付かない。現実に、それぞれのオペレーティングシステムは、単に、ハイパーバイザ532によって割り当てられたリソース及び/又はリソース部分だけに対するアクセスを有するものである。
【0059】
図5において、さらに示されるように、それぞれのオペレーティングシステムは、カーネル空間とユーザ空間を含んでおり、両方が、システムメモリ512におけるメモリ空間として実施される。カーネル空間は、保護され、かつ、オペレーティングシステムのカーネルコンポーネントを実行するために使用される。ネットワークスタックを含むものである。一方、オペレーティングシステムのユーザ空間は、ユーザアプローチを実行するために使用される。アプリケーション1、2、および、N、及び、アプリケーション1A−C、2A−C、および、NA−Cによって示されるようにである。
【0060】
一般的に、装置1、2、および、Nは、プラットフォームハードウェア502上の仮想マシン上で実行され得る種々のSDNまたはNFV装置を示している。簡潔のために、それぞれのVM
1−Nは、同様なソフトウェアアプリケーションのセットをホストしているように示されている。しかしながら、これは単に説明目的だけのものである。所与のプラットフォームのためのVMは同様なアプローチをホストしてよく、または、異なるアプリケーションをホストしてもよいからである。同様に、それぞれのVM
1−Nは、単一の仮想ネットワーク装置を(示されるように)ホストしてよく、複数の仮想ネットワーク装置をホストしてよく、または、あらゆる仮想ネットワーク装置をホストしなくてもよい。
【0061】
上述のように、VMを使用したコンピュータプラットフォームの仮想化に加えて、仮想化コンテナを使用しているコンテナベースのOS仮想化が実施され得る。コンテナベースの仮想化を使用している実施例は、
図1bにおいて示されるアーキテクチャ100b、および、
図6におけるプラットフォームコンフィグレーション、の中に示されている。
【0062】
プラットフォームコンフィグレーション600において使用されるハードウェアコンフィグレーションは、示されるように、プラットフォームコンフィグレーション500と同一である。プラットフォームコンフィグレーションにおける差異は、ソフトウェアにおいて生じる。プラットフォームコンフィグレーション600におけるソフトウェアは、ホストOS602、OS仮想化レイヤ604、および、複数のコンテナ606を含んでいる。任意的に、コンテナは、また、仮想エンジン、仮想マシン、または、他の用語とも呼ばれ得る。コンテナベースの仮想化ソフトウェアを提供しているベンダ、または、コンテナベースのOS仮想化がどのように動作するかを記述する作者に応じたものである。
【0063】
それぞれのコンテナは、システムコンポーネントとアプリケーション及び/又はユーザコンポーネントへと論理的に分割されたソフトウェアライブラリおよびアプリケーションのセットを含んでいる。システムコンポーネントは、システムライブラリとシステムソフトウェアモジュールを含んでいる。示されるように、それぞれのコンテナは、ネットワークスタックシステムモジュール、または類似のものを含む。仮想装置は、アプリケーション/ユーザ空間において実行される。一般的に、仮想装置は、VM上で動作しているか、または、コンテナ上かについて不可知的であるように、構成されてよい。もしくは、そうでなければ、コンテナによってホストされるのと対照的に、VM上で稼働するように構成された仮想装置の間で小さな差異が存在する。
【0064】
図1bのアーキテクチャ100bに示されるように、アーキテクチャコンポーネントは、実質的に、アーキテクチャ100および100aにおいて示されるものと実質的に同様である。主要な相違は、ハイパ−バイザがOS仮想化レイヤ604に置き換えられていること、および、VMがコンテナ606に置き換えられていることである。VMを用いるのと同様に、それぞれのコンテナは、同様なソフトウェアコンポーネントのセットを含み、vNIC、一つまたはそれ以上の仮想装置136、および、対応するアプリケーション138を含んでいる。フローテーブル150も同様である。
【0065】
IPパケットとイーサネットパケットの使用に加えて、仮想化オーバーレイが使用されてよい。VXLAN(仮想エクステンションローカルエリアネットワーク)、NVGRE(ジェネリックルーティングを使用するネットワーク仮想化)といったものであり、IPアドレスの内側および外側を使用するものである。VXLANまたはNVGREを使用してローカルサービスチェーンを実施するために、上記の実施例において説明されたように、IPの処理に対して、オーバーレイの存在が単に加えられる。VXLANおよびNVGREを使用したパケット処理のためのさらなる技術が、当業者には知られている。そして、VXLANまたはNVGREを使用した実施例に対するさらなる詳細は、ここにおいて説明されない。
【0066】
ここにおいて説明された技術的事項のさらなる態様は、以降の番号付けされた条項において明らかにされる。
【0067】
1.複数の仮想マシン(VM)または仮想化コンテナが稼働している計算プラットフォーム上で実施される方法であって、それぞれのVMまたは仮想化コンテナは、ソフトウェア確定ネットワーク(SDN)における仮想スイッチに通信可能に接続されている仮想ネットワークインターフェイスコントローラ(vNIC)を含み、前記方法は、
前記複数のVMまたは仮想化コンテナによってホストされた複数の仮想ネットワーク装置を介してローカルサービスチェーン(LSC)を実施するステップであり、それぞれのネットワーク装置は、前記LSCによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されている、ステップと、
前記複数のパケットの中に含まれるパケットデータを、前記仮想スイッチを使用することなく、VMまたはコンテナ間で転送するステップと、を含む、方法。
【0068】
2.前記パケットデータは、第1の受信(Rx)バッファを有し、前記LSCにおける現在の仮想ネットワーク装置をホストしている第1のvNICを含む、第1のVMまたはコンテナから、第2のRxバッファを有し、前記LSCにおける次の仮想ネットワーク装置をホストしている第2のvNICを含む、第2のVMまたはコンテナに対して、前記第2のRxバッファへ、直接的にパケットデータを書込むことによって転送される、条項1に記載の方法。
【0069】
3.前記パケットデータは、前記第1のRxバッファから前記第2のRxバッファへコピーされる、条項2に記載の方法。
【0070】
4.前記第1および第2のRxバッファの少なくとも一部分は、それぞれにファーストインファーストアウト(FIFO)キューとして構成されており、かつ、所与のパケットについてのパケットデータは、第1のFIFOキューにおける一つまたはそれ以上のスロットから、第2のFIFOキューにおける一つまたはそれ以上のスロットへコピーされる、条項3に記載の方法。
【0071】
5.前記方法は、さらに、
複数のLSCを実施するステップであり、それぞれのLSCは、LSCを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでいる、ステップと、
前記複数のLSCそれぞれに対して、LSCに割り当てられたパケットについてのパケットデータの転送を促進するためのメカニズムを実施するステップであり、それぞれのLSCについて、前記パケットデータは、前記仮想スイッチを通過しないチェーン化された方法で、LSCのための前記仮想ネットワーク装置をホストしているVMまたはコンテナ間で転送される、条項1乃至4いずれかに記載の方法。
【0072】
6.前記メカニズムは、VMまたはコンテナそれぞれに対するそれぞれのローカルフローテーブルを含み、所与のVMまたはコンテナに対する前記ローカルフローテーブルは、VMのためのvNIC受信(Rx)ポートまたはRxバッファのうち少なくとも一つ、もしくは、前記LSCにおいて次のネットワーク装置をホストしているコンテナを特定する、条項5に記載の方法。
【0073】
7.前記方法は、さらに、SDNコントローラを使用して、VMまたはコンテナそれぞれのための前記ローカルフローテーブルを構成するステップと、を含む、条項6に記載の方法。
【0074】
8.前記方法は、さらに、
前記複数のVMまたはコンテナそれぞれに対して、それぞれのアプリケーションメモリ空間を割り当てるステップであり、VMまたはコンテナのアプリケーションメモリ空間において稼働しているアプリケーションは、別のVMまたはコンテナのアプリケーションメモリ空間にアクセスすることができない、ステップと、
前記VMまたはコンテナそれぞれについて、vNICによって使用されるバッファを受信するために使用される共有メモリ空間を割り当てるステップであり、それぞれのVMまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、ステップと、を含む、条項1乃至7いずれかに記載の方法。
【0075】
9.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、
前記ネットワークインターフェイスのネットワークポートにおいてパケットを受信するステップと、
前記パケットが属するフロー、または、前記パケットをサービスするために使用されるべきLSC、のうち少なくとも一つを決定するステップと、
前記パケットを、前記ネットワークインターフェイスから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナのためのvNICの受信バッファへ転送するステップと、を含む、条項1乃至8いずれかに記載の方法。
【0076】
10.前記パケットは、前記ネットワークインターフェイスのメモリマップド入力−出力(MMIO)アドレス空間における受信バッファから、前記vNICの前記受信バッファへ、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、条項9に記載の方法。
【0077】
11.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信されるパケットそれぞれに対して、
受信バッファにおける前記パケットについてのパケットデータを、前記ネットワークインターフェイスのメモリマップド入力−出力(MMIO)アドレス空間においてバッファするステップと、
前記パケットについてのパケットデータを、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記受信バッファから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナに対するvNICの受信バッファへコピーするステップと、を含む、条項1乃至10いずれかに記載の方法。
【0078】
12.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、既定のネットワークポートにおいて受信された全てのパケットに足して同一のLSCを使用するステップと、を含む、条項1乃至11いずれかに記載の方法。
【0079】
13.前記方法は、さらに、
所与のパケットに対して使用される、LSCにおける最後の仮想装置である仮想装置を決定するステップと、
前記パケットが転送されるべき、物理的ネットワークアダプタ上の出力ポートを決定するステップと、
前記仮想スイッチをバイパスする方法で、前記最後の仮想装置をホストしているVMまたはコンテナ上のバッファから、前記物理的ネットワークアダプタの前記出力ポートに関連するバッファへ、パケットデータを転送するステップと、を含む、条項1乃至12いずれかに記載の方法。
【0080】
14.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信されたそれぞれのパケットに対して、
受信バッファの中の前記パケットについてのパケットデータを、前記ネットワークインターフェイスのメモリマップド入力−出力(MMIO)アドレス空間にバッファするステップと、
前記パケットについての前記パケットデータを、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記受信バッファから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナに対するvNICの受信バッファへコピーするステップと、を含む、条項13に記載の方法。
【0081】
15.複数のVMまたはコンテナが実施されるべき計算プラットフォームのプロセッサ上で実行されるように構成された複数のインストラクションが保管されている機械で読取り可能な固定の媒体であって、前記複数のインストラクションが実行されると、前記計算プラットフォームは、条項1乃至14いずれかに記載の方法を実行する、機械で読取り可能な固定の媒体。
【0082】
16.条項1乃至14いずれかに記載の方法を実行するための手段を含む、計算プラットフォーム。
【0083】
17.複数の仮想マシン(VM)または仮想化コンテナが実施されるべき計算プラットフォームのプロセッサ上で実行されるように構成された複数のインストラクションが保管されている機械で読取り可能な固定の媒体であって、前記VMまたはコンテナの少なくとも一部分は、ソフトウェア確定ネットワーク(SDN)における仮想スイッチに通信可能に接続された仮想ネットワークインターフェイスコントローラ(vNIC)を含み、かつ、仮想ネットワーク装置をホストしており、前記複数のインストラクションが実行されると、前記計算プラットフォームは、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン(LSC)を実施し、それぞれの仮想ネットワーク装置は、前記LSCによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記LSCにおける現在のサービス実行するように構成された第1の仮想ネットワーク装置をホストしている第1のVMまたはコンテナに対してアクセス可能なバッファから、前記LSCにおける次のサービス実行するように構成された第2の仮想ネットワーク装置をホストしている第2のVMまたはコンテナに係るvNICの受信(Rx)バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをVMまたはコンテナ間で転送する、機械で読取り可能な固定の媒体。
【0084】
18.前記第2のVMまたはコンテナに係るvNICのRxバッファは、第2のRxバッファを含み、かつ、前記パケットデータは、前記第1のVMまたはコンテナに係るvNICの第1のRxバッファから前記第2のRxバッファへコピーされる、条項17に記載の機械で読取り可能な固定の媒体。
【0085】
19.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記第1および第2のRxバッファの少なくとも一部分を、それぞれ第1および第2のファーストインファーストアウト(FIFO)キューとして構成し、かつ、
所与のパケットについてのパケットデータを、第1のFIFOキューにおける一つまたはそれ以上のスロットから、第2のFIFOキューにおける一つまたはそれ以上のスロットへコピーする、条項17または18に記載の機械で読取り可能な固定の媒体。
【0086】
20.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のLSCを実施し、それぞれのLSCは、LSCを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているVMまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のVMまたはコンテナに対する前記ローカルフローテーブルは、VMまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記LSCそれぞれに対するエントリーを含み、かつ、LSCそれぞれに対する前記エントリーは、vNIC受信(Rx)バッファ、または、前記LSCにおいて次の仮想ネットワーク装置をホストしているVMまたはコンテナのためのRxバッファ、のうち少なくとも一つを特定する、条項17乃至19いずれかに記載の機械で読取り可能な固定の媒体。
【0087】
21.前記複数のインストラクションは、さらに、実行されると、それぞれのVMまたはコンテナに対する前記ローカルテーブルを構成するSDNコントローラを実施するためのインストラクションを含む、条項20に記載の機械で読取り可能な固定の媒体。
【0088】
22.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記VMまたはコンテナそれぞれについて、vNICによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのVMまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項17乃至21いずれかに記載の機械で読取り可能な固定の媒体。
【0089】
23.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記VMまたはコンテナそれぞれについて、vNICによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのVMまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項22に記載の機械で読取り可能な固定の媒体。
【0090】
24.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ネットワークインターフェイスにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきLSC、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ネットワークインターフェイスから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナのためのvNICの受信バッファへ転送する、条項17乃至23いずれかに記載の機械で読取り可能な固定の媒体。
【0091】
25.前記パケットは、前記ネットワークインターフェイスのメモリマップド入力−出力(MMIO)アドレス空間における受信バッファから、前記vNICの前記受信バッファへ、
ダイレクトメモリアクセス(DMA)データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、条項24に記載の機械で読取り可能な固定の媒体。
【0092】
26.前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力(MMIO)アドレス空間として、前記ネットワークインターフェイス上にメモリの少なくとも一部分を構成し、かつ、
前記ネットワークインターフェイスを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記MMIOアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記受信バッファから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナに対するvNICの受信バッファへコピーする、条項17乃至25いずれかに記載の機械で読取り可能な固定の媒体。
【0093】
27.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
パケットが属するフローを決定し、
前記フローに属しているパケットをサービスするために使用されるべきLSCを決定し、
前記パケットをサービスするために使用されるべきLSCを特定する指標を前記パケットに追加する、条項17乃至26いずれかに記載の機械で読取り可能な固定の媒体。
【0094】
28.計算プラットフォームであって、
複数のプロセッサコアを含むプロセッサと、
前記プロセッサに対して動作可能に接続されたシステムメモリと、
前記プロセッサに対して動作可能に接続された、少なくとも一つのネットワークポートとメモリを含むネットワークインターフェイスコントローラ(NIC)と、
デバイス上に保管された複数のインストラクションを有するストレージデバイスと、を含み、
前記インストラクションが、一つまたはそれ以上の前記プロセッサコアを介して実行されると、前記計算プラットフォームは、
複数の仮想マシン(VM)または仮想化コンテナをインスタンス化し、それぞれのVMまたはコンテナは仮想ネットワークインターフェイスコントローラ(vNIC)を含んでおり、前記VMまたはコンテナの少なくとも一部分は仮想ネットワーク装置をホストしており、
それぞれのvNICに接続された仮想ネットワークポートおよび前記vNIC上の少なくとも一つのネットワークポートを有する仮想スイッチを含んでいる、ソフトウェア確定ネットワーク(SDN)をプラットフォーム上に構成し、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン(LSC)を実施し、それぞれのネットワーク装置は、前記LSCによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記LSCにおける現在のサービスを実行するように構成されたる第1の仮想ネットワーク装置をホストしている第1のVMまたはコンテナに対してアクセス可能なバッファから、前記LSCにおける次のサービスを実行するように構成された第2の仮想ネットワーク装置をホストしている第2のVMまたはコンテナに係るvNICの受信(Rx)バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをVMまたはコンテナ間で転送する、計算プラットフォーム。
【0095】
29.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のLSCを実施し、それぞれのLSCは、LSCを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているVMまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のVMまたはコンテナに対する前記ローカルフローテーブルは、VMまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記LSCそれぞれに対するエントリーを含み、かつ、LSCそれぞれに対する前記エントリーは、vNIC受信(Rx)バッファ、または、前記LSCにおいて次の仮想ネットワーク装置をホストしているVMまたはコンテナのためのRxバッファ、のうち少なくとも一つを特定する、条項28に記載の計算プラットフォーム。
【0096】
30.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記VMまたはコンテナそれぞれについて、vNICによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのVMまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項28または29に記載の計算プラットフォーム。
【0097】
31.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記NICにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきLSC、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記NICから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナのためのvNICの受信バッファへ転送する、条項28乃至30いずれかに記載の計算プラットフォーム。
【0098】
32.前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力(MMIO)アドレス空間として、前記ネットワークインターフェイス上に前記メモリの少なくとも一部分を構成し、かつ、
前記NICを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記MMIOアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記受信バッファから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナに対するvNICの受信バッファへコピーする、条項28乃至31いずれかに記載の計算プラットフォーム。
【0099】
33.計算プラットフォームであって、少なくとも一つのネットワークポートとメモリを含むネットワークインターフェイスコントローラ(NIC)と、
複数の仮想マシン(VM)または仮想化コンテナをインスタンス化し、それぞれのVMまたはコンテナは仮想ネットワークインターフェイスコントローラ(vNIC)を含んでおり、前記VMまたはコンテナの少なくとも一部分は仮想ネットワーク装置をホストしており、
それぞれのvNICに接続された仮想ネットワークポートおよび前記vNIC上の少なくとも一つのネットワークポートを有する仮想スイッチを含んでいる、ソフトウェア確定ネットワーク(SDN)をプラットフォーム上に構成し、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン(LSC)を実施し、それぞれのネットワーク装置は、前記LSCによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記LSCにおける現在のサービスを実行するように構成されたる第1の仮想ネットワーク装置をホストしている第1のVMまたはコンテナに対してアクセス可能なバッファから、前記LSCにおける次のサービスを実行するように構成された第2の仮想ネットワーク装置をホストしている第2のVMまたはコンテナに係るvNICの受信(Rx)バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをVMまたはコンテナ間で転送する、ための手段を有する、計算プラットフォーム。
【0100】
34.前記計算プラットフォームは、さらに、
複数のLSCを実施し、それぞれのLSCは、LSCを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているVMまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のVMまたはコンテナに対する前記ローカルフローテーブルは、VMまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記LSCそれぞれに対するエントリーを含み、かつ、LSCそれぞれに対する前記エントリーは、vNIC受信(Rx)バッファ、または、前記LSCにおいて次の仮想ネットワーク装置をホストしているVMまたはコンテナのためのRxバッファ、のうち少なくとも一つを特定する、ための手段を有する、条項33に記載の計算プラットフォーム。
【0101】
35.前記計算プラットフォームは、さらに、前記VMまたはコンテナそれぞれについて、vNICによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのVMまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、ための手段を有する、条項33または34に記載の計算プラットフォーム。
【0102】
36.前記計算プラットフォームは、さらに、
前記NICにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきLSC、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記NICから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナのためのvNICの受信バッファへ転送する、ための手段を有する、条項33乃至35いずれかに記載の計算プラットフォーム。
【0103】
37.前記計算プラットフォームは、さらに、
メモリマップド入力−出力(MMIO)アドレス空間として、前記ネットワークインターフェイス上に前記メモリの少なくとも一部分を構成し、かつ、
前記NICを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記MMIOアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス(DMA)データ転送を使用して、前記受信バッファから、前記LSCについて定められた第1の仮想ネットワーク装置をホストするために使用されるVMまたはコンテナに対するvNICの受信バッファへコピーする、ための手段を有する、条項33乃至36いずれかに記載の計算プラットフォーム。
【0104】
いくつかの実施例が所定の実施に関して説明されてきたが、いくつかの実施例に従った他の実施も可能である。加えて、図面に示され、及び/又は、ここにおいて説明されたエレメントまたは他の特徴に係る構成及び/又は順番は、図示され、説明された所定のやり方に構成される必要はない。いくつかの実施例に従って、多くの他の構成が可能である。
【0105】
図示されたそれぞれのシステムにおいて、いくつかのケースにおけるエレメントは、それぞれ同じ参照番号または異なる参照番号を有することができ、表示されたエレメントは異なり、及び/又は、同じであってよい。しかしながら、エレメントは、ここにおいて示され、または、説明されたいくつかの、または、全てのシステムとは異なる実施及び作業を有するよう十分に順応性がある。図示された種々のエレメントは、同一、または、異なるものであってよい。どれを第1のエレメントとして参照し、どれを第2のエレメントと呼ぶかは任意である。
【0106】
明細書および特許請求の範囲において、用語「結合された(“coupled”)」と「接続された(“connected”)」が、その派生語を伴なって、使用され得る。これらの用語は、お互いに類義語であるとして意図されたものではない。むしろ、所定の実施例において、「接続された」は、2つまたはそれ以上のエレメントがお互いに直接に物理的または電気的に接触していることを示すために使用され得る。「結合された」は、2つまたはそれ以上のエレメントが直接に物理的または電気的に接触していることを意味することができる。しかしながら、「結合された」は、また、2つまたはそれ以上のエレメントがお互いに直接的に接触していないことも意味することもあるが、それでもなお、お互いに協働または相互作用するものである。
【0107】
実施例は、本発明の実施または例である。明細書における「実施例(“an embodiment”)」、「一つの実施例(“one embodiment”)」、「いくつかの実施例(“some embodiment”)」、および、「他の実施例(“other embodiment”)」への言及は、実施例に関して説明された所定の特徴、構成、または、特性が、少なくともいくつかの本発明に係る実施例に含まれているが、必ずしも全ての実施例に含まれる必要はない、ことを意味している。種々の表現である「実施例」、「一つの実施例」、「いくつかの実施例」、および、「他の実施例」は、必ずしも全て同一の実施例を参照することを要しない。
【0108】
ここにおいて説明され、図示されたコンポーネント、特徴、構成、特性、等の全てが、所定の実施例に含まれる必要があるということはない。例えば、明細書で、コンポーネント、特徴、構成、または、特性が含まれ「得る(“may”、“might”、“can”、または、“could”)」と記載している場合は、その所定のコンポーネント、特徴、構成、または、特性が含まれることを要しない。明細書または特許請求の範囲が「一つの(“a”or“an”)」エレメントに言及している場合は、そのエレメントが唯一つ存在することを意味するものではない。明細書または特許請求の範囲が「追加の(“an additional”)」エレメントに言及している場合は、追加のエレメントの一つ以上の存在を排除することを意味するものではない。
【0109】
上記の詳細な説明における”M”および”N”といった文字は、整数を示すために使用されており、所定の文字の使用は所定の実施例に限定されるものではない。さらに、同じ文字が別個の整数を表すために使用されてよく、または、異なる文字が使用されてもよい。加えて、詳細な説明における所定の文字使用は、詳細な説明における技術的事項と同一のものに関する請求項において使用される文字と一致しても、しなくてもよい。
【0110】
上述のように、ここにおける実施例の種々の態様は、対応するソフトウェア及び/又はファームウェアコンポーネントおよびアプリケーションによって促進され得る。サーバー又はデバイスプロセッサ上で稼働しているソフトウェア、または、エンベッドされたプロセッサによって実行されるソフトウェア及び/又はハードウェア、または類似のもの、といったものである。このように、本発明の実施例は、以下のものとして、または、以下をサポートするために使用され得る。ソフトウェアプログラム、ソフトウェアモジュール、ファームウェア、及び/又は、プロセッサコアのいくつかの形態上(コンピュータのCPU、マルチコアプロセッサの一つまたはそれ以上のコア、といったもの)で実行される分散されたソフトウェア、プロセッサまたはコア上で稼働しており、または、そうでなければ、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体の上または中で実施され又は実現される仮想マシン、である。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、マシン(例えば、コンピュータ)によって読取り可能な形態において情報を保管または送るためのあらゆるメカニズムを含んでいる。例えば、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、読出し可能/読出し不可媒体(例えば、リードオンリーメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス、等)といった、コンピュータまたはコンピューティングマシン(例えば、計算機器、電子システム、等)によってアクセス可能な形態において情報を提供(つまり、保管及び/又は伝送)するあらゆるメカニズムを含んでいる。コンテンツは、直接的に実行可能であり(「オブジェクト(”object”)」または「実行可能(”executable”)」形態)、ソースコード、または、異なるコード(「デルタ(”delta”)」または「パス(”path”)」コード)、であってよい。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、また、そこからコンテンツをダウンロードすることができるストレージまたはデータベースを含む。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、また、販売または配送の時点でコンテンツが保管されているデバイスまたはプロダクトを含む。従って、コンテンツが保管されたデバイスを配送すること、または、通信メディアにわたりダウンロードのためにコンテンツを提供することは、ここにおいて説明されたようなコンテンツを伴うンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体を含む製品を提供するものとして理解され得るものである。
【0111】
プロセスとして上記に参照された種々のコンポーネント、サーバー、または、ここにおいて説明されたツールは、説明された機能を実行するための手段であり得る。ここにおいて説明された種々のコンポーネントによって実行されるオペレーションと機能は、処理エレメント上で稼働しているソフトウェアによって実施され得る。エンベッドされたハードウェア又は類似のもの、または、ハードウェアとソフトウェアのあらゆる組合せを介するものである。そうしたコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、特定用途のハードウェア(例えば、アプリケーション特化ハードウェア、ASIC、DSP、等)、エンベッドされたコントローラ、ハードワイヤード回路、ハードウェアロジック、等として実施され得る。ソフトウェアコンテンツ(例えば、データ、インストラクション、コンフィグレーション情報、等)は、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体を含む製品を介して提供され、実行され得るインストラクションを表すコンテンツを提供する。コンテンツは、ここにおいて説明された種々の機能/オペレーションを実行するコンピュータを結果として生じる。
【0112】
本発明の図示された実施例に係る上記の説明は、要約において記載されたものを含み、精緻なもの、または、開示されたまさにその形態に本発明を限定するように意図されたものではない。本発明の所定の実施例、および例示は、説明目的のためにここにおいて記載されており、当業者であれば理解されるように、本発明の範囲内において種々の均等な変形が可能である。
【0113】
これらの変形は、上記の詳細な説明をに照らして、本発明について行うことができる。以降の請求項において使用される用語は、明細書と図面において開示された所定の実施例に本発明を限定するものと理解されるべきではない。むしろ、本発明の範囲は、以降の請求項によって完全に決定されるべきものであり、確立されたクレーム解釈方針に従って理解される。