(57)【特許請求の範囲】
【請求項１】
複数の仮想マシン（ＶＭ）または仮想化コンテナが稼働している計算プラットフォーム上で実施される方法であって、
それぞれのＶＭまたは仮想化コンテナは、ソフトウェア確定ネットワーク（ＳＤＮ）における仮想スイッチに通信可能に接続されている仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含み、
前記方法は、
前記複数のＶＭまたは仮想化コンテナによってホストされた複数の仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施するステップであり、それぞれのネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されている、ステップと、
前記複数のパケットの中に含まれるパケットデータを、前記仮想スイッチを使用することなく、ＶＭまたはコンテナ間で転送するステップと、
を含む、方法。
【請求項２】
前記パケットデータは、
第１の受信（Ｒｘ）バッファを有し、前記ＬＳＣにおける現在の仮想ネットワーク装置をホストしている第１のｖＮＩＣを含む、第１のＶＭまたはコンテナから、
第２のＲｘバッファを有し、前記ＬＳＣにおける次の仮想ネットワーク装置をホストしている第２のｖＮＩＣを含む、第２のＶＭまたはコンテナに対して、
前記第２のＲｘバッファへ、直接的にパケットデータを書込むことによって転送される、
請求項１に記載の方法。
【請求項３】
前記パケットデータは、前記第１のＲｘバッファから前記第２のＲｘバッファへコピーされる、
請求項２に記載の方法。
【請求項４】
前記第１および第２のＲｘバッファの少なくとも一部分は、それぞれにファーストインファーストアウト（ＦＩＦＯ）キューとして構成されており、かつ、
所与のパケットについてのパケットデータは、第１のＦＩＦＯキューにおける一つまたはそれ以上のスロットから、第２のＦＩＦＯキューにおける一つまたはそれ以上のスロットへコピーされる、
請求項３に記載の方法。
【請求項５】
前記方法は、さらに、
複数のＬＳＣを実施するステップであり、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでいる、ステップと、
前記複数のＬＳＣそれぞれに対して、ＬＳＣに割り当てられたパケットについてのパケットデータの転送を促進するためのメカニズムを実施するステップであり、それぞれのＬＳＣについて、前記パケットデータは、前記仮想スイッチを通過しないチェーン化された方法で、ＬＳＣのための前記仮想ネットワーク装置をホストしているＶＭまたはコンテナ間で転送される、
請求項１乃至４いずれか一項に記載の方法。
【請求項６】
前記メカニズムは、ＶＭまたはコンテナそれぞれに対するそれぞれのローカルフローテーブルを含み、
所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭのためのｖＮＩＣ受信（Ｒｘ）ポートまたはＲｘバッファのうち少なくとも一つ、もしくは、前記ＬＳＣにおいて次のネットワーク装置をホストしているコンテナを特定する、
請求項５に記載の方法。
【請求項７】
前記方法は、さらに、
ＳＤＮコントローラを使用して、ＶＭまたはコンテナそれぞれのための前記ローカルフローテーブルを構成するステップと、
を含む、請求項６に記載の方法。
【請求項８】
前記方法は、さらに、
前記複数のＶＭまたはコンテナそれぞれに対して、それぞれのアプリケーションメモリ空間を割り当てるステップであり、ＶＭまたはコンテナのアプリケーションメモリ空間において稼働しているアプリケーションは、別のＶＭまたはコンテナのアプリケーションメモリ空間にアクセスすることができない、ステップと、
前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当てるステップであり、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、ステップと、
を含む、請求項１乃至７いずれか一項に記載の方法。
【請求項９】
前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、
前記方法は、さらに、
前記ネットワークインターフェイスのネットワークポートにおいてパケットを受信するステップと、
前記パケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定するステップと、
前記パケットを、前記ネットワークインターフェイスから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送するステップと、
を含む、請求項１乃至８いずれか一項に記載の方法。
【請求項１０】
前記パケットは、
前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間における受信バッファから、前記ｖＮＩＣの前記受信バッファへ、
ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、
請求項９に記載の方法。
【請求項１１】
前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、
前記方法は、さらに、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信されるパケットそれぞれに対して、
受信バッファにおける前記パケットについてのパケットデータを、前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間においてバッファするステップと、
前記パケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーするステップと、
を含む、請求項１乃至１０いずれか一項に記載の方法。
【請求項１２】
複数の仮想マシン（ＶＭ）または仮想化コンテナが実施されるべき計算プラットフォームのプロセッサ上で実行されるように構成された複数のインストラクションを有するコンピュータプログラムであって、
前記ＶＭまたはコンテナの少なくとも一部分は、ソフトウェア確定ネットワーク（ＳＤＮ）における仮想スイッチに通信可能に接続された仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含み、かつ、仮想ネットワーク装置をホストしており、
前記複数のインストラクションが実行されると、前記計算プラットフォームは、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施し、それぞれの仮想ネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記ＬＳＣにおける現在のサービス実行するように構成された第１の仮想ネットワーク装置をホストしている第１のＶＭまたはコンテナに対してアクセス可能なバッファから、前記ＬＳＣにおける次のサービス実行するように構成された第２の仮想ネットワーク装置をホストしている第２のＶＭまたはコンテナに係るｖＮＩＣの受信（Ｒｘ）バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをＶＭまたはコンテナ間で転送する、
コンピュータプログラム。
【請求項１３】
前記第２のＶＭまたはコンテナに係るｖＮＩＣのＲｘバッファは、第２のＲｘバッファを含み、かつ、
前記パケットデータは、前記第１のＶＭまたはコンテナに係るｖＮＩＣの第１のＲｘバッファから前記第２のＲｘバッファへコピーされる、
請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記第１および第２のＲｘバッファの少なくとも一部分を、それぞれ第１および第２のファーストインファーストアウト（ＦＩＦＯ）キューとして構成し、かつ、
所与のパケットについてのパケットデータを、第１のＦＩＦＯキューにおける一つまたはそれ以上のスロットから、第２のＦＩＦＯキューにおける一つまたはそれ以上のスロットへコピーする、
請求項１２または１３に記載のコンピュータプログラム。
【請求項１５】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のＬＳＣを実施し、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているＶＭまたはコンテナそれぞれに対するローカルフローテーブルを構成し、
所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記ＬＳＣそれぞれに対するエントリーを含み、かつ、
ＬＳＣそれぞれに対する前記エントリーは、ｖＮＩＣ受信（Ｒｘ）バッファ、または、前記ＬＳＣにおいて次の仮想ネットワーク装置をホストしているＶＭまたはコンテナのためのＲｘバッファ、のうち少なくとも一つを特定する、
請求項１２乃至１４いずれか一項に記載のコンピュータプログラム。
【請求項１６】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、
請求項１２乃至１５いずれか一項に記載のコンピュータプログラム。
【請求項１７】
前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ネットワークインターフェイスにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ネットワークインターフェイスから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送する、
請求項１２乃至１６いずれか一項に記載のコンピュータプログラム。
【請求項１８】
前記パケットは、
前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間における受信バッファから、前記ｖＮＩＣの前記受信バッファへ、
ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、
請求項１７に記載のコンピュータプログラム。
【請求項１９】
前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力（ＭＭＩＯ）アドレス空間として、前記ネットワークインターフェイス上にメモリの少なくとも一部分を構成し、かつ、
前記ネットワークインターフェイスを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記ＭＭＩＯアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーする、
請求項１２乃至１８いずれか一項に記載のコンピュータプログラム。
【請求項２０】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
パケットが属するフローを決定し、
前記フローに属しているパケットをサービスするために使用されるべきＬＳＣを決定し、
前記パケットをサービスするために使用されるべきＬＳＣを特定する指標を前記パケットに追加する、
請求項１２乃至１９いずれか一項に記載のコンピュータプログラム。
【請求項２１】
計算プラットフォームであって、
複数のプロセッサコアを含むプロセッサと、
前記プロセッサに対して動作可能に接続されたシステムメモリと、
前記プロセッサに対して動作可能に接続された、少なくとも一つのネットワークポートとメモリを含むネットワークインターフェイスコントローラ（ＮＩＣ）と、
デバイス上に保管された複数のインストラクションを有するストレージデバイスと、
を含み、
前記インストラクションが、一つまたはそれ以上の前記プロセッサコアを介して実行されると、前記計算プラットフォームは、
複数の仮想マシン（ＶＭ）または仮想化コンテナをインスタンス化し、それぞれのＶＭまたはコンテナは仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含んでおり、前記ＶＭまたはコンテナの少なくとも一部分は仮想ネットワーク装置をホストしており、
それぞれのｖＮＩＣに接続された仮想ネットワークポートおよび前記ｖＮＩＣ上の少なくとも一つのネットワークポートを有する仮想スイッチを含んでいる、ソフトウェア確定ネットワーク（ＳＤＮ）をプラットフォーム上に構成し、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施し、それぞれのネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記ＬＳＣにおける現在のサービスを実行するように構成されたる第１の仮想ネットワーク装置をホストしている第１のＶＭまたはコンテナに対してアクセス可能なバッファから、前記ＬＳＣにおける次のサービスを実行するように構成された第２の仮想ネットワーク装置をホストしている第２のＶＭまたはコンテナに係るｖＮＩＣの受信（Ｒｘ）バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをＶＭまたはコンテナ間で転送する、
計算プラットフォーム。
【請求項２２】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のＬＳＣを実施し、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているＶＭまたはコンテナそれぞれに対するローカルフローテーブルを構成し、
所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記ＬＳＣそれぞれに対するエントリーを含み、かつ、
ＬＳＣそれぞれに対する前記エントリーは、ｖＮＩＣ受信（Ｒｘ）バッファ、または、前記ＬＳＣにおいて次の仮想ネットワーク装置をホストしているＶＭまたはコンテナのためのＲｘバッファ、のうち少なくとも一つを特定する、
請求項２１に記載の計算プラットフォーム。
【請求項２３】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、
請求項２１または２２に記載の計算プラットフォーム。
【請求項２４】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ＮＩＣにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ＮＩＣから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送する、
請求項２１乃至２３いずれか一項に記載の計算プラットフォーム。
【請求項２５】
前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力（ＭＭＩＯ）アドレス空間として、前記ＮＩＣ上に前記メモリの少なくとも一部分を構成し、かつ、
前記ＮＩＣを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記ＭＭＩＯアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーする、
請求項２１乃至２４いずれか一項に記載の計算プラットフォーム。
【請求項２６】
請求項１２乃至２０いずれか一項に記載のコンピュータプログラムを記憶したコンピュータで読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア確定ネットワークにおける仮想マシンと仮想化コンテナを用いたローカルサービスチェーンに関する。
【背景技術】
【０００２】
コンピュータネットワークへのアクセスは、今日のコンピュータ使用のユビキタス（ｕｂｉｑｕｉｔｏｕｓ）な部分となってきた。共有されたネットワークリソースにアクセスするためにエンタープライズ環境におけるローカルエリアネットワーク（ＬＡＮ）にアクセスすること、または、ＬＡＮまたは他のアクセスポイントを介してインターネットにアクセスすることにしろ、ユーザは、コンピュータネットワークを介してアクセスされる少なくとも一つのサービスに常にログオンしているようである。さらに、クラウドベースのサービスの急な拡大は、なお、さらなるコンピュータネットワークの使用を導いてきており、これらのサービスは、常に一般的なものになることが予測されている。
【０００３】
ネットワークは、ルータ、スイッチ、ブリッジ、ゲートウェイ、および、アクセスポイントを含む種々のタイプの装置によって促進される。大規模なネットワークのインフラストラクチャは、典型的に、電気通信クラスのネットワークエレメントの使用を含む。エレメントは、シスコシステム、ジュピターネットワーク、アルカテルルーセント、アイビーエム、および、ヒューレットパッカードといった会社によって制作されたスイッチおよびルータを含んでいる。そうしたテレコムスイッチは、非常に洗練されており、非常に高いバンド幅において動作し、かつ、先進的なルーティング機能を提供する。同様に、異なるサービス品質（Ｑｕａｌｉｔｙ  ｏｆ  Ｓｅｒｖｉｃｅ：ＱｏＳ）レベルもサポートする。プライベートネットワーク、ローカルエリアネットワーク（ＬＡＮ）といったものは、ビジネスおよび家庭ユーザによって最も一般に使用されている。ハードウェア及び/又はソフトウェアベースのファイアウォールおよび類似のものを使用することもまた、多くのビジネスネットワークにとって一般的である。
【０００４】
近年、特にサーバー展開およびデータセンタにおいて、コンピュータシステムの仮想化が急速な成長を見せている。従来のアプローチの下で、サーバーは、物理的ハードウェアリソース上で直接的にオペレーティングシステムの一つのインスタンスを実行する。リソースは、ＣＰＵ、ＲＡＭ、ストレージデバイス（例えば、ハードディスク）、ネットワークコントローラ、Ｉ／Ｏポート、等といったものである。仮想マシン（ＶＭ）を使用した仮想化アプローチの下では、物理的ハードウェアリソースが、仮想リソースの対応するインスタンスをサポートするために使用される。複数のＶＭがサーバーの物理的ハードウェアリソース上で稼働するようにであり、ここで、それぞれの仮想マシンは、自分自身のＣＰＵ割り当て、メモリ割り当て、ストレージデバイス、ネットワークコントローラ、Ｉ／Ｏポート、等を含んでいる。同一または異なるオペレーティングシステムの複数のインスタンスが、そして、複数のＶＭ上で稼働する。さらに、仮想マシンマネージャ（ＶＭＭ）または「ハイパーバイザ（”ｈｙｐｅｒｖｉｓｏｒ”）」の使用を通じて、サーバーが稼働している間に、仮想リソースを動的に割り当てることができ、サーバーがシャットダウンされるよう要求することなく、ＶＭインスタンスを追加、シャットダウン、または、再利用することができる。このことは、サーバーの利用、および、サーバー処理リソースのより良い使用、特に、マルチコアプロセッサ及び/又はマルチプロセッササーバーに対して、より大きな柔軟性を提供している。
【０００５】
別の仮想化アプローチの下では、ＶＭＭまたはハイパーバイザを使用せずに仮想化された「コンテナ（”ｃｏｎｔａｉｎｅｒ”）」を使用する、コンテナベースのＯＳ仮想化が使用される。それぞれのＶＭ上でオペレーティングシステムの別々のインスタンスをホストする代わりに、コンテナベースのＯＳ仮想化は、それぞれのコンテナに対する別々のシステムのインスタンスおよびソフトウェアライブラリを用いて、一つのＯＳカーネルを複数のコンテナにわたって共有する。ＶＭのように、それぞれのコンテナに対して割り当てられた仮想リソースも存在する。
【０００６】
ソフトウェア確定ネットワーク（ＳＤＮ）およびネットワーク機能仮想化（ＮＦＶ）の展開も、また、最近の数年において急速な成長を見せている。ＳＤＮの下では、トラフィックがどこに送付されるか（コントロールプレーン）を決定するシステムが、トラフィックを選択された宛先（データプレーン）まで転送する根本的なシステムのために切り離される。ＳＤＮコンセプトは、ネットワークの仮想化を促進するために使用されてよく、サービスプロバイダが、ソフトウェアアプリケーションおよびＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を介して、ネットワークサービスの種々の態様を管理することを可能にしている。ＮＦＶの下では、ソフトウェアアプリケーションとしてネットワーク機能を仮想化することによって、ネットワークサービスプロバイダは、ネットワーク構成における柔軟性を得ることができ、利用可能なバンド幅、コスト削減、および、新たなサービスに対するより早いタイムツーマーケット（ｔｉｍｅ  ｔｏ  ｍａｒｋｅｔ）、の最適化を含む著しい利益を可能にしている。
【０００７】
「サービスチェーン（”ｓｅｒｖｉｃｅ  ｃｈａｉｎｉｎｇ”）」は、しばしば、ＳＤＮのコンテクストにおいて、種々の物理的コンピュータノードにおいて実施される一連のネットワークサービスエレメントによって処理されるネットワークを通過しているパケットの流れを記述するために使用される。ここにおいて使用されるように、用語「ローカルサービスチェーン（”Ｌｏｃａｌ  ｓｅｒｖｉｃｅ  ｃｈａｉｎｉｎｇ”）」（ＬＳＣ）は、ＶＭまたは仮想化コンテナにおいて実施される一連のネットワークサービスエレメントによって処理されるコンピュータノードに対して内部であるネットワークを通過しているパケットのフローを記述するために使用されている。従来のアプローチの下で、ＬＳＣは、仮想スイッチ（Ｖｉｒｔｕａｌ  Ｓｗｉｔｈ：ＶＳ）またはＶＭ間でパケットをスイッチするための同等なメカニズムの使用を採用している。このスイッチのメカニズムは、コンピュータリソースを必要とし、システムのスループットキャパシティに否定的な影響を与える。この問題は、ＬＳＣを通じて大量のトラフィックが処理される場合に悪化される。それぞれのパケットの処理は、一つまたはそれ以上のＶＳを介した複数のデータ転送を伴うだろうからである。
【図面の簡単な説明】
【０００８】
上記の態様および本発明に付随する多くの利点は、以降の詳細な説明を参照することによって、より良くそれらが理解されるので、より容易に理解されよう。類似の数字は、他に断らない限り、種々のビュー全てを通じて類似のパーツを参照するものである。
【図１】図１は、ＬＳＣの使用を通じてパケット処理オペレーションを実行するように構成されている計算プラットフォームのための仮想マシンを含むアーキテクチャを説明する回路図である。
【図１ａ】図１ａは、図１の計算プラットフォームの拡張版を説明する回路図であり、パケットデータが、ネットワークインターフェイスから直接的に仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）における受信（Ｒｘ）バッファに対して転送される。
【図１ｂ】図１ｂは、ＬＳＣの使用を通じてパケット処理オペレーションを実行するように構成されている仮想化コンテナを含む計算プラットフォームのためのアーキテクチャを説明する回路図である。
【図２】図２は、ＬＳＣの実施を促進するように、計算プラットフォーム上で実行されているソフトウェアによって行われるオペレーションとロジックを説明するフローチャートである。
【図３】図３は、図１のアーキテクチャに係る共有メモリ領域におけるＲｘＦＩＦＯキューの詳細をさらに説明する回路図である。
【図４】図４は、ＬＳＣ  ＩＤを使用してＬＳＣオペレーションを実施するための、図１に係るアーキテクチャのフローテーブルの中に含まれる典型的なデータの第１のセットを説明するダイヤグラムである。
【図４ａ】図４ａは、フローＩＤを使用してＬＳＣオペレーションを実施するための、図１に係るアーキテクチャのフローテーブルの中に含まれる典型的なデータの第２のセットを説明するダイヤグラムである。
【図４ｂ】図４ｂは、既定のネットワークポートにおいて受信された全てのパケットに対して既定のＬＳＣを実施するための、図１に係るアーキテクチャのフローテーブルの中に含まれる典型的なデータの第３のセットを説明するダイヤグラムである。
【図５】図５は、仮想マシンを含む第１の典型的なホストプラットフォームのハードウェアとソフトウェアのアーキテクチャに係る回路であり、ここにおいて開示される実施例の態様は、これを介して実行され得る。
【図６】図６は、コンテナベースの仮想化を実施するコンテナを含む第２の典型的なホストプラットフォームのハードウェアとソフトウェアのアーキテクチャに係る回路であり、ここにおいて開示される実施例の態様は、これを介して実行され得る。
【発明を実施するための形態】
【０００９】
ソフトウェア確定ネットワーク（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｗｏｒｋｉｎｇ）において仮想マシンまたは仮想化コンテナを用いたローカルサービスチェーン（ｌｏｃａｌ  ｓｅｒｖｉｃｅ  ｃｈａｉｎｉｎｇ）を実施するための方法、ソフトウェア、および、装置に係る実施例が、ここにおいて説明される。以降の説明において、ここにおいて開示され、説明される実施例について完全な理解を提供するために数多くの所定の詳細が明らかにされる。当業者であれば、しかしながら、一つ以上の所定の詳細がなくても、または、他の方法、コンポーネント、材料、等を用いても、本発明が実施され得ることが理解されよう。他のインスタンスにおいては、本発明の態様が不明確になることを避けるために、よく知られた構成、材料、または、オペレーションについて、詳細には示されず、または、説明されない。
【００１０】
明確化のために、ここにおける図面の中の個々のコンポーネントは、また、所定の参照番号の他に、図面におけるラベルによっても参照され得る。加えて、所定のタイプのコンポーネント（所定のコンポーネントとは対照的に）を参照している参照番号は、「典型的（”ｔｙｐｉｃａｌ”）」であることを意味する「（ｔｙｐ）」が以降に続く参照番号によって示されている。こうしたコンポーネントの構成は、存在するが簡素化と明確化のために図面には示されない類似のコンポーネントについて典型的なものであり、または、そうでなければ、別個の参照番号を用いてラベル付けされていない類似のコンポーネントついて典型的なものである。反対に、「（ｔｙｐ）」は、開示された機能、実施、目的、等のために典型的に使用されるコンポーネント、エレメント等を意味するように理解されるべきではない。
【００１１】
ここにおいて使用されるように、用語「仮想装置」、「仮想ネットワーク装置」、「ネットワーク装置」、または、単に「装置」は、互換的に使用され得る。加えて、ここにおける目的のために、請求項を含めて、ソフトウェア確定ネットワークに関する、または、ネットワーク機能仮想化を実施するように構成された、あらゆるソフトウェアベースの装置は、より一般的に「仮想装置」として参照される。仮想ネットワーク装置は、ネットワーク機能仮想化及び/又はソフトウェア確定ネットワークに関するオペレーションを実施するように構成されたあらゆるネットワーク装置または仮想化エンティティを含むという理解によるものである。従って、以降の説明における仮想装置という用語は、同様に、全てのＮＦＶ装置を含んでいる。
【００１２】
ここにおいて説明される実施例に係る態様に従えば、「カットスルー（”ｃｕｔ−ｔｈｒｏｕｇｈ”）」メカニズムを作成することによって、パケットスループットが加速される。メカニズムにより、パケットは、仮想スイッチを使用することなく、仮想ネットワーク装置と類似のＳＤＮコンポーネントとの間で転送され得る。このことは、部分的に、「ローカルサービスチェーン（ＬＳＣ）」を介して促進される。ＬＳＣは、ここにおいて、計算ノードに対して内部に在るネットワークを横断するパケットのフローを記述するために使用され、パケットが、複数の仮想マシンまたは仮想化コンテナにおいて実施される一連のネットワークサービスエレメント（例えば、仮想ネットワーク装置）によって処理される。
【００１３】
例示として、かつ、限定することなく、図１は、ＬＳＣの使用を通じてパケット処理オペレーションを実行するように構成されている計算ノード（例えば、サーバーといった計算プラットフォーム）のためのアーキテクチャ１００を示している。アーキテクチャ１００は、ネットワークインターフェイス１０４に接続された計算プラットフォーム１０２を含んでいる。ネットワークインターフェイスは、計算プラットフォーム上に統合されてよく（例えば、ネットワークインターフェイスコントローラ（ＮＩＣ）として）、または、そうでなければ、動作可能に計算プラットフォームに接続されてよい（例えば、ＰＣＩｅ（ペリフェラルコンポーネントインターコネクトエクスプレス）拡張スロットにインストールされたＰＣＩｅカードとして）。計算プラットフォーム１０２は、ＯＳメモリ１０７において稼働しているホストオペレーティングシステム（ＯＳ）１０６を含んでいる。ＯＳメモリは、アプリケーションメモリ空間１０８で実行している複数のアプリケーションをホストするように構成されており、アプリケーションメモリ空間は、ホストＯＳの上に示されている。アプリケーションメモリ空間は、仮想スイッチ１０９と、Ｎ個の仮想マシン１１２をホストするように構成されているハイパーバイザ１１０とを含んでいる。Ｎ個の仮想マシンは、ＶＭ１、ＶＭ２およびＶＭＮとラベル付けされた仮想マシンによって示されている。ソフトウェアコンポーネントは、さらに、ＳＤＮコントローラ１１４を含んでいる。
【００１４】
ネットワークインターフェイス１０４は、Ｐｏｒｔ１、Ｐｏｒｔ２・・・ＰｏｒｔＭとラベル付けされたＭ個のネットワークポート１１６を含んでいる。ここで、Ｍは、Ｎと同一または異なってよい。それぞれのネットワークポート１１６は、受信（Ｒｘ）バッファ１１８と送信（Ｔｘ）バッファ１２０とを含んでいる。ここでの図面において使用されるように、示されているＲｘとＴｘバッファおよびＲｘとＴｘキューも、また、同一場所にあるＲｘとＴｘポートを表している。混乱を低減するために、ＲｘとＴｘポートは、別個に示されていないが、当業者であれば、それぞれのＲｘとＴｘポートは、一つまたはそれ以上のＲｘとＴｘバッファ及び/又はキューを含むことが理解されよう。
【００１５】
一般的に、ネットワークインターフェイスは、ＲｘとＴｘポートにおいて実施される比較的に小さなＲｘとＴｘバッファを含んでよく、そして、より大きなＲｘとＴｘバッファは、複数のＲｘとＴｘポートにわたり共有されるネットワークインターフェイス上の入力／出力（ＩＯ）メモリにおいて実施され得る。図示された実施例においては、ＩＯメモリの少なくとも一部分は、ホストＯＳ１０６のＯＳメモリ１０７においてＮＩＣドライバ１２４によって構成されるメモリマップドＩＯ（ＭＭＩＯ）１２２である。ＭＭＩＯ１２２は、ＭＭＩＯ１２２におけるメモリバッファと計算プラットフォーム１０２上のシステムメモリにおけるバッファとの間のダイレクトメモリアクセス（ＤＭＡ）データ転送をサポートするように構成されている。さらなる詳細が以下に説明される。
【００１６】
仮想スイッチ１０９は、計算プラットフォーム１０２の内側でＳＤＮスイッチオペレーションを実施するように構成されているソフトウェアベースのエンティティである。図示された実施例において、仮想スイッチ１０８は、ネットワークインターフェイス１０４上の物理的ＲｘとＴｘポートそれぞれに対する（例えば、ポート１−ポートＭそれぞれに対するもの）仮想ＲｘとＴｘポート、および、仮想マシンＶＭ１−ＶＭＮそれぞれに対する仮想ＲｘとＴｘポート、を含んでいる。ネットワークインターフェイス側の仮想ポートは、Ｒｘ仮想ポート１２６およびＴｘ仮想ポート１２７として示されており、一方、ＶＭ側の仮想ポートは、Ｒｘ仮想ポート１２８およびＴｘ仮想ポート１２９として示されている。さらに示されるように、ＲｘとＴｘポート１２６、１２７、１２８、および、１２９それぞれの一部分は、システムメモリアドレス空間の共有メモリ領域１３４（共有アドレス空間としても参照されるもの）にオーバーラップするものとして示されている。加えて、ＲｘとＴｘポート１３０および１３２のペアは、さらに、それぞれの仮想ＮＩＣ（ｖＮＩＣ）の中に拡張しているように示されている。ｖＮＩＣ１、ｖＮＩＣ２、および、ｖＮＩＣＮによって示されるようにであり、ここで、ｖＮＩＣは、仮想マシンＶＭ１、ＶＭ２、および、ＶＭＮそれぞれと関連付けされている。
【００１７】
仮想マシンＶＭ１、ＶＭ２、および、ＶＭＮそれぞれは、仮想装置１３６と３つのアプリケーション１３８を含んでいるものとして示されている。その仮想装置とアプリケーションが稼働している対応するＶＭを特定している指標を伴うものである。例えば、ＶＭ１に対して、仮想装置は「装置１（”Ａｐｐｌｉａｎｃｅ１”）」とラベル付けされ、アプリケーションは「アプリケーション１Ａ（”Ａｐｐｌｉｃａｔｉｏｎ１Ａ”）」、「アプリケーション１Ｂ」、および、「アプリケーション１Ｃ」とラベル付けされている。一般的に、それぞれの仮想装置１３６は、一つまたはそれ以上のアプリケーション１３８を介して実施され得るものであり、３つのアプリケーションを包含することは単に説明目的のためである。計算プラットフォーム１０２のオペレーションの最中に、仮想装置１３６それぞれは、一つまたはそれ以上のパケット処理サービスを実行するように構成されている。さらに、パケット処理サービスは、それぞれのパケットに関連するパケットフローのために適用可能なＬＳＣによって定められるように、チェーン方式（ｃｈａｉｎｅｄ  ｍａｎｎｅｒ）で実施される。
【００１８】
ローカルサービスチェーンを使用したチェーンパケット処理サービスのコンセプトは、さらに、パケット１４０の処理に関連して示されたオペレーションとデータ転送を介して図１において説明されており、図２において示されるフローチャート２００をさらに参照する。パケット１４０はＩＰ（インターネットプロトコル）パケットとして示されており、この典型的なＩＰパケットの使用は、パケットがＩＰアドレスを使用することを意味している。ＩＰアドレスは、パケット１４０が、ネットワークにおいてどこに転送され、どこで計算プラットフォーム１０２によって扱われるかを決定するように、部分的に、使用されるものである。フローチャート２００のブロック２０２において示されるように、プロセスは、ネットワークインターフェイス１０４のポート１においてネットワークから受信されているパケット１４０を用いて開始する。一般的に、パケットデータは、データのビットストリームとしてネットワークのリンクにわたり転送される。例えば、イーサネット（登録商標）（Ｅｔｈｒｎｅｔ）ネットワークについて、パケットデータは、イーサネットフレームのストリームとして転送される。ポート１において、適用可能な物理層（ＰＨＹ）オペレーションが実行され、仮想装置１３６によって処理されるべきパケットデータをカプセル化したイーサネットパケットを抽出する。抽出されたイーサネットパケットは、ポート１のＲｘバッフの中にバッファされる。
【００１９】
次に、ブロック２０４において、イーサネットパケットからＩＰパケットが抽出される。任意的に、レイヤ４又はより高いレベルのパケットが抽出され得る。適用可能なものとしてである。一般的に、ブロック２０４のオペレーションは、ネットワークインターフェイス１０４、ネットワークスタック１４２として示されているＯＳソフトウェアベースのネットワークコンポーネント、または、分離処理（ｓｐｌｉｔ  ｐｒｏｃｅｓｓｉｎｇ）スキームを使用している２つの組合せ、のいずれかによって実行され得る。例えば、より多くのいくつかの最近のＮＩＣは、レイヤ３（ＩＰ）のパケット処理オペレーションをサポートし、かつ、ＴＣＰ（トランザクションコントロールプロトコル）のパケット処理オペレーションもサポートし得る。他のレイヤ４及びより高いパケ処理は、たいてい、ネットワークスタック１４２におけるソフトウェアコンポーネントを介して実行される。とはいえ、これらも、また、ＮＩＣまたは類似のネットワークインターフェイスによって実施され得るものである。
【００２０】
ブロック２０６においては、パケットのフロー分類が実行される。このことは、たいてい、受信されたパケットが（もしあれば）属するパケットフローを特定するために、パケットヘッダまたはヘッダにおいて適用可能なヘッダフィールドを検査することを含んでいる。以下にさらに詳細に説明されるように、いくつかの実施例において、パケットフロー情報は、パケットヘッダフィールドにおいて明確に定義され得る。パケットフロー分類は、また、複数のフィールドにおけるデータを使用して実行され得る。よく知られたＮテュープル（Ｎ−ｔｕｐｌｅ）パケット分類技術の使用といったものを通じてである。
【００２１】
一般的に、パケットヘッダ検査は、以下のスキームの一つまたはそれ以上を使用して行われ得る。一つの実施例において、パケットは、ポート１１６におけるＲｘバッファからＯＳメモリ１０７におけるＲｘバッファの中にＤＭＡされる（例えば、ＤＭＡ書込みオペレーションを使用する）。例えば、一つの実施例において、ＮＩＣポートのＲｘバッファにおけるメモリ空間は、サーキュラー（ｃｉｒｃｕｌａｒ）ＦＩＦＯポインタを使用するＦＩＦＯ（ファーストイン、ファーストアウト）キューに対して割り当てられ、かつ、ＦＩＦＯヘッダポインタは、Ｒｘバッファ１４４の中にＤＭＡされたパケットを指し示す。ＦＩＦＯキューがどのようにオペレーションするかのさらなる詳細は、一つの実施例に従って、図３において示され、以下に説明される。代替として、パケットヘッダだけが、Ｒｘバッファ１４４の中にＤＭＡされる。さらに別のオプションとして、パケットヘッダデータは、パケットデータまたはヘッダのいずれもＲｘバッファ１４４の中にコピーすることなしに、「現場で（”ｉｎ  ｐｌａｃｅ”）」読出される。このインスタンスにおいては、少ない数量のパケットに対するパケットヘッダデータが、ネットワークスタック１４２またはホストＯＳ１０６におけるフロー分類器１４６の中に読出される。同様に、ネットワークインターフェイス１０４によって実行されるフロー分類のために、パケットヘッダデータが現場で読出され得る。しかしながら、このインスタンスにおいて、バッファは、典型的にはＭＭＩＯ１２２（図示なし）から典型的には分離しているネットワークインターフェイス１０４上のメモリの中に置かれている。
【００２２】
フロー分類の結果は、パケットに対するフロー識別子（ｆｌｏｗ  ＩＤ）を返す。一つの実施例においては、明確なフローＩＤなしに受信されたパケットについて、パケットヘッダフィールドにフローＩＤが追加される。または、代替的に、フローＩＤが添付され（例えば、前に付ける（ｐｒｅｐｅｎｄｅｄ））、もしくは、フローＩＤのためのフィールドを含む「ラッパー（”ｗｒａｐｐｅｒ”）」の中にカプセル化される。
【００２３】
図１に示されるように、図示された実施例において、パケット分類は、フロー分類器１４６によって実行される。任意的に、フロー分類は、同様なフロー分類器１４６ａを介して、ネットワークインターフェイス１０４において実行され得る。一つの実施例においては、分離分類スキーム（ｓｐｌｉｔ  ｃｌａｓｓｉｆｉｃａｔｉｏｎ  ｓｃｈｅｍｅ）が実施され、その下で、既存のフロー（例えば、以前に分類されたフロー）は、フロー分類器１４６によってネットワークインターフェイス１０４において特定される。一方、既存のフローに属さないパケットは、新たなパケットフローに対応しているパケット分類のために、フロー分類器１４６に転送される。新たなパケットフローに対する情報は、次に、フロー分類器１４６ａに提供される。別の実施例の下では、フロー分類器１４６ａによって維持される分類されたフローのリストは、フロー分類器１４６ａによって維持される完成リストより少なく、かつ、メモリキャッシュと同様に動作する。そこでは、より最近のパケットに関するフローが、ＮＩＣ上のフロー分類器１４６ａの中に維持され、かつ、より最近でないパケットに対するフローがリプレースされる。
【００２４】
ブロック２０６において、さらに示されるように、フローＩＤはフローテーブル１４８の中へのルックアップとして使用される。仮想スイッチ１０９の一部分であるとして示されているものである。一つの実施例において、フローテーブルは、フローＩＤのカラムとｖＮＩＣのＲｘポートＩＤのカラムを包含している。フローＩＤ入力が与えられると、対応するｖＮＩＣのＲｘポートＩＤを返すようにである。フローテーブル１４８は、また、ＬＳＣ  ＩＤを含んでよい。ＬＳＣ  ＩＤは、ＬＳＣタグについて又はパケットラッパーにおけるフィールドに対して使用され、もしくは、そうでなければ、パケットと関連付けされ得る。任意的に、ＬＳＣタグは、ローカルサービスチェーンにおいて、第１の仮想装置によって追加されてよい。
【００２５】
仮想スイッチ１０９において実施されているフローテーブル１４８に加えて、フローテーブルの全部または一部分が、ホストＯＳ１０６またはネットワークインターフェイス１０４において実施され得る（どちらも図１には示されていない）。ネットワークインターフェイス１０４においてフローテーブルの全部または一部分を使用している実施例において、フローテーブルのエントリーは、一般的に、ホストＯＳ１０６におけるソフトウェアによって決定され、かつ、ＮＩＣドライバ１２４によって適用されるインターフェイスを介して配置される。
【００２６】
一旦、ｖＮＩＣのＲｘポートＩＤが特定されると、パケットデータが、適用可能なＲｘバッファアドレスに対して書込まれる。図１において示された実施例において、このＲｘポートは、Ｖ１Ｒｘとラベル付けされている（仮想マシンＶＭ１のｖＮＩＣ１に対するＲｘポートである）。一つの実施例において、パケットデータは、メモリ書込みオペレーションを使用して、ＲｘバッファからＯＳメモリ１０７（図示なし）の中にコピーされる。オペレーションの下で、データは、ＯＳメモリのＲｘバッファから適用可能なＲｘバッファアドレスへコピーされる。別の実施例において、パケットデータは、ＤＭＡ書込みを使用して、ＭＭＩＯ１２２におけるポート１のＲｘバッファから直接的にｖＮＩＣのＲｘバッファの中に書込まれる。例えば、ヘッダが現場で検査されたパケットに対して、ダイレクトＤＭＡ書込みが実行され得る。
【００２７】
一つの実施例において、ｖＮＩＣのＲｘバッファは、サーキュラーＦＩＦＯポインタを用いたＦＩＦＯキューとして実施される。この構成を使用している一つの実施例の詳細が、図３に示されている。図３の下部に向かって示されるように、ｖＮＩＣのＲｘバッファ１３０それぞれは、関連するｖＮＩＣのＲｘＦＩＦＯキュー３００を含んでいる。ｖＮＩＣのＲｘＦＩＦＯキュー３００それぞれは、複数のＦＩＦＯ「スロット（”ｓｌｏｔ”）」へと分割されたアドレス空間を含んでいる。図示された実施例の下では、ＦＩＦＯキュー毎に２５６スロットが存在している。しかし、これは一つの実施例の単なる説明であり、ＦＩＦＯスロットの数量は変化してよい。ＦＩＦＯスロットそれぞれに対して使用されるサイズも、また、変化してよい。一つの実施例において、それぞれのＦＩＦＯスロットのサイズは、アプリケーションメモリ空間１０８のために使用されるキャッシュラインのサイズと同一である。ｖＮＩＣのＲｘＦＩＦＯキュー３００それぞれは、さらに、サーキュラーＦＩＦＯヘッドポインタとサーキュラーＦＩＦＯテールポインタを含んでいる。サーキュラーＦＩＦＯヘッドポインタは、現在のＦＩＦＯキューのロジカル「トップ（”ｔｏｐ”）」に在るＦＩＦＯスロットを指し示す。一方、テールポインタは、現在のＦＩＦＯキューのロジカル「ボトム（”ｂｏｔｔｏｍ”）」に対応するＦＩＦＯスロットを指し示す。ヘッドおよびテールポインタを使用したＦＩＦＯキューのオペレーションは、従来技術においてよく知られたものであり、ここにおいては、これらのオペレーションのさらなる詳細は提供されない。
【００２８】
一つの実施例において、それぞれのｖＮＩＣは、一つまたはそれ以上のソフトウェアモジュール一式を介して実施される。オブジェクト志向のデザインの下で、それぞれのＲｘＦＩＦＯキューは、対応するクラスのインスタンスとして実施され得る（例えば、Ｒｘ＿ＦＩＦＯ＿ｑｕｅｕｅ）。よく知られているように、クラスは、クラスオブジェクト（例えば、データ）上で動作する機能を実施するための方法、および、他のソフトウェアコンポーネント（例えば、他のクラス）にデータを送信し、かつ、データを受信するためのインターフェイス、を提供する。
【００２９】
一つの実施例において、ＤＭＡ書込みリクエストが、ｖＮＩＣ１のＲｘＦＩＦＯキューのためのＲｘ＿ＦＩＦＯ＿ｑｕｅｕｅ（クラス）インスタンスに対して送付される。ＤＭＡ書込みリクエストの受信に反応して、Ｒｘ＿ＦＩＦＯ＿ｑｕｅｕｅインスタンスにおける方法は、テールポインタによって現在指し示されているＦＩＦＯスロットのメモリアドレスを特定し、そのアドレスをＤＭＡ書込みの要求者（例えば、ネットワークインターフェイス１０４上にエンベッドされたソフトウェアモジュール）に返す。ＤＭＡエンジン又は類似のもの（図示なし）は、次に、パケットデータを、ＭＭＩＯ１２２における場所からＦＩＦＯスロットのためのメモリアドレスへ書込む。パケットデータが複数のＦＩＦＯスロットに拡がるインスタンスについては、複数のＤＭＡ書込みが連続して実行され得る。説明目的のために、パケットデータは、ｖＮＩＣのＲｘポートの表示のボトムに対して書込まれているように示されている。しかしながら、当業者であれば、パケットデータが書込まれるスロットのＲｘＦＩＦＯキューにおける場所は、ＦＩＦＯテールポインタによって指し示されたＦＩＦＯバッファのロジカル「ボトム」であることが理解されよう。
【００３０】
次に、ブロック２０７において、フローＩＤタグまたはＬＳＣタグが、パケットデータに対して添付される。図３に示されるように、一つの実施例において、（パケットデータが書込まれる一つまたはそれ以上のスロットの）第１のＦＩＦＯスロットに対して書込まれたデータは、パケットヘッダ３０４とパケットペイロードデータ３０６を含むパケットデータに対して前に付けられたタグ３０２を含んでいる。一つの実施例において、タグ３０２は、ＬＳＣタグ（例えば、ＬＳＣ  ＩＤ値）を保管するために使用される。任意的に、タグ３０２は、フローＩＤを保管するために使用されてよい。よく知られているように、ＩＰパケット（または他のタイプのパケット）のサイズは変化してよい。一方、パケットプロトコルヘッダの長さは、一般的に同一である（いくつかのプロトコルは、使用される場合にヘッダの長さを変化させる任意的なフィールドを伴うパケットヘッダを定めることに留意する）。可変長のパッケトサイズの観点において、所与のパケットに対するパケットデータは、一つまたはそれ以上のＦＩＦＯスロットに対して書込まれ得る。
【００３１】
ブロック２０８と２１８のスタートおよびエンドループにより表示されたループによって示されるように、複数のオペレーションが、所与のパケットフロー（または、代替的に、ＬＳＣタグにおけるＬＳＣ  ＩＤによって明確に特定されるように、パケットヘッダもしくはラッパー）に関連付けされたローカルサービスチェーンにおけるそれぞれの仮想装置に対して実行される。それぞれのＬＳＣは、仮想ネットワーク装置によって実行される複数のサービスを含んでいる。ネットワーク装置は、一式のパイプラインサービスと同様な方法で、連続して一緒にチェーンされている。サービスの実施例は、以下のものを含んでいる。ＮＡＴ（ネットワークアドレス変換）サービス、ファイアウォールサービス、パケット処理サービス、ＷＡＮ最適化、仮想プライベートネットワークゲートウェイ、ビデオトランスコード、コンテンツ配信ネットワークサービス、等である。説明目的のために、図１は、装置１から、装置２へ、・・・、装置Ｎへチェーンされたシーケンスを示している。しかしながら、これは単に典型的なものであり、ＬＳＣは、あらゆる装置の組合せを横断してよい。さらに、ＬＳＣは、増加していく順番で装置を横断する必要はない（例えば、ＬＳＣは、装置３、装置２へ、装置５へ・・・であり得る）。複数の装置について、同一のサービスまたは一式のサービスを実行するように実施されることも可能である。代替的に、所与の装置は、異なるパケットフローに対して異なるサービスを実行するように構成されてよい。
【００３２】
フローチャート２００における処理ループに戻ると、ブロック２１０において、フローに対するパケット処理オペレーション、及び/又は、ＬＳＣチェーンにおける現在の仮想装置に対するＬＳＣが実行される。一つの実施例においては、ＦＩＦＯヘッドポインタによって指し示されたｖＮＩＣのＲｘＦＩＦＯキューにおける所与のパケット上で、パケット処理オペレーションが実行される。いくつかの仮想装置は、パケットデータを読出し、そのデータを使用して処理を実行する（例えば、パケットデータを民生用アプリケーションに転送する）。一方、他の仮想装置は、パケットデータを変更し得る（例えば、パケットヘッダにおける一つまたはそれ以上のフィールドを変更する）。パケットデータが変更された場合、パケットデータは現場で変更されるか、仮想装置のために割り当てられたＶＭ上のバッファ（図１における図示なし）の中にコピーされて、次に変更されるかのいずれかである。
【００３３】
続けると、ブロック２１２においては、一旦、所与の仮想装置によって実行されるオペレーションが完了すると、パケットデータをどこに転送するべきか決定がされる。ＬＳＣにおける次の仮想装置のいずれによってもアクセスできるようにである。もしくは、現在の仮想装置がＬＳＣにおける最後の仮想装置である場合には、どのＴｘネットワークポートに対してパケットを転送するか決定される。一つの実施例において、このことは、ローカルフローテーブル１５０の中へのルックアップとしてＬＳＣタグ値を使用して実行される。任意的に、ローカルフローテーブルは、ＬＳＣタグ値の他に、または、加えて、フローＩＤを含んでよい。一般的に、ローカルフローテーブル１５０は、フローテーブル１４８と同様な方法で構成され得る。しかしながら、ＬＳＣにおいて第１の仮想装置をホストしているＶＭに対するｖＮＩＣのＲｘポート（またはＲｘＦＩＦＯキュー）を指し示すことの他に、ローカルフローテーブルは、ＬＳＣにおいて次の仮想装置をホストしているＶＭに対するｖＮＩＣのＲｘポート（またはＲｘＦＩＦＯキュー）を指し示している。フローテーブル１４８は、非ＬＳＣフローに関する情報を含んでもよいことに留意する（または、そうでなければ、そうした情報は、仮想スイッチ１０９に対してアクセス可能な別個のテーブルにおいて維持されてよい）。
【００３４】
従来のアプローチの下では、ＶＭに別個のメモリ空間が割り当てられ、データは、仮想スイッチの使用を通じて、これら別個のメモリ空間の間で転送される。これは、以下のことを必要とする。最初にデータをｖＮＩＣのＴｘポートにコピーすること、データを（メモリ書込みを介して）仮想スイッチのＲｘポートに転送すること、仮想スイッチを介してデータが書込まれるべきｖＮＩＣのＲｘポートを決定すること、ｖＮＩＣのＲｘポートに接続された仮想スイッチのＴｘポートにデータをコピーすること又は書込むこと、および、次に、データをｖＮＩＣのＲｘポートに書込むこと、である。実際には、これらの書込みのそれぞれは、ＦＩＦＯキューといった、バッファに対するものであり、かつ、スイッチプロセスは、著しい量のオーバーヘッドを含んでいる。さらに、複数のパケットフローが同時にスイッチされる場合には、一つまたはそれ以上の仮想スイッチポートについて輻輳の可能性が存在する。
【００３５】
従来の仮想スイッチのオペレーションをより良く理解するために、一連の仮想ネットワーク装置Ａ、Ｂ、Ｃ、および、Ｄによって実行されるオペレーションを含むパケット処理シーケンスを考慮する。それぞれの装置は、受信するパケットに関する一つまたはそれ以上のオペレーションを実行するものである。これらのオペレーションは、チェーン化される。オペレーションのシーケンスａ、ｂ、ｃ、および、ｄが、それぞれの仮想ネットワーク装置Ａ、Ｂ、Ｃ、および、Ｄによって実行されるようにであり、仮想ネットワーク装置それぞれは、仮想スイッチＳに接続された別個のＶＭＡ−Ｄによってホストされる。既存のアプローチの下で、パケットフローは、以下のように取り扱われる。ＶＭＡからＳへ、ＶＭＢへ、Ｓへ、ＶＭＣへ、Ｓへ、ＶＭＤへ。仮想スイッチＳへ及びＳからの転送それぞれは、別個の受信および送信バッファ／キューの使用を必要とする。バッファ／キューは、仮想マシンＶＭＡ、ＶＭＢ、ＶＭＣ、および、ＶＭＤが、それぞれに接続された別個の仮想スイッチのポートに対して実施される。
【００３６】
ここにおける実施例の一つの態様に従って、「カットスルー（”ｃｕｔ−ｔｈｒｏｕｇｈ”）」メカニズムが実施される。カットスルーの下では、第１のｖＮＩＣのＲｘバッファ（例えば、ｖＮＩＣのＲｘＦＩＦＯキュー）またはＬＳＣにおける現在のサービスを実行している仮想装置をホストするＶＭ上のバッファから、ＬＳＣにおける次のサービスを実行する仮想装置をホストするＶＭに係るｖＮＩＣのＲｘバッファ（例えば、ｖＮＩＣのＲｘＦＩＦＯキュー）へ直接的にデータが書込まれる。このことは、部分的に、共有メモリ領域１３４の使用を通じて促進される。ｖＮＩＣのＲｘＦＩＦＯキューが全てのＶＭに対してアクセス可能である共有メモリ領域に在るので、あらゆるＶＭは、仮想スイッチをバイパスする方法で、他のあらゆるＶＭに係るｖＮＩＣのＲｘＦＩＦＯキューに書込むことができるからである。このことは、メモリ転送における著しい削減を提供する。同様に、仮想スイッチのオペレーション最中に発生する対応するレイテンシを除去するものである。
【００３７】
判断ブロック２１４によって示されるように、次のバッファがｖＮＩＣのＲｘＦＩＦＯキューである場合、フローチャートのロジックはブロック２１６に進む。そこでは、パケットデータが特定されたｖＮＩＣのＲｘＦＩＦＯキューに直接的に書込まれ、従って、仮想スイッチ１３４をバイパスしている。上記および上述のように、パケットデータは、ｖＮＩＣのＲｘポートの表示のボトムに対して書込まれる。上述のように、また、このことは、ＦＩＦＯテールポインタによって現在指し示されているＲｘＦＩＦＯキューにおけるスロットのアドレスに対してデータを書込むことによって有効となる。
【００３８】
ブロック２１２において、フローＩＤルックアップがネットワークＴｘポートとして次のバッファを特定する場合、フローチャートのロジックはブロック２２０に進む。そこでは、現在のｖＮＩＣのＲｘＦＩＦＯスロット（または、現在の仮想装置に関連する場合はローカルバッファ）から、ネットワークＴｘバッファに対してパケットデータのＤＭＡ書込みが行われる。ネットワークＴｘバッファは、ＭＭＩＯ１２２のアドレス空間に置かれているものである。図１に示される実施例において、このことは、ｖＮＩＣＮのＲｘＦＩＦＯキューから、ネットワークインターフェイス１０４上のポートＭのＴｘバッファへのパケットデータの直接的な転送として示されている。代替的に、直接的なＤＭＡデータ転送の他に、パケットデータは、仮想スイッチ１０９を通じて転送されてよい。一つの実施例において、パケットデータは、ｖＮＩＣＮのＲｘＦＩＦＯキュー（または、ＶＭＮ上のバッファ）から、（ｖＮＩＣＮのＴｘポートを介して転送されるより、むしろ）仮想スイッチ上のネットワークＴｘバッファに対して直接的にコピーされる。
【００３９】
図１の右下コーナーに示されるように、パケット１５２は、ポートＭのＴｘポートからネットワークの中に転送される。一般的に、パケット１４０と１５２のヘッダは異なってよく、一方、パケットペイロードデータは同一に保持されてよい。例えば、所与のパケットに対するパケットヘッダにおける一つまたはそれ以上のフィールドは、仮想装置によって実行されるＬＳＣ処理オペレーションの最中に変化してよい。いくつかのインスタンスにおいて、パケットペイロードデータは、また、ＬＳＣによって実行されるサービスの結果として、変化してよい。
【００４０】
上述のパケット１４０の処理は、フロー毎ベース（ｐｅｒ−ｆｌｏｗ  ｂａｓｉｓ）のパケット処理のための一つの技術を説明している。一つの実施例において、ＳＤＮコントローラ１１４は、フローテーブル１４８とローカルフローテーブル１５０によって使用されるフローＩＤ及び/又はＬＳＣデータを管理するように構成されている。所定のパケットフローのためのパケットは、上述のように、それぞれの仮想装置によって実行されるチェーン化されたサービスのシーケンスを含むＬＳＣを使用してサービスされ得る。一つの実施例において、フローテーブルにおけるフローＩＤまたはＬＳＣ  ＩＤに対するエントリーポイント（例えば、進入Ｒｘポート、Ｒｘバッファ、または、ＲｘＦＩＦＯキュー）は、サービスチェーンのための次のエントリーポイント（例えば、次のＲｘポート、Ｒｘバッファ、または、ＲｘＦＩＦＯキュー）をルックアップするために使用される。従って、フローテーブルは、一般的に、２つまたはそれ以上のカラムを有し得る。一つは、フローＩＤまたはＬＳＣ  ＩＤを含んでおり、他方は、次のエントリーポイントを含んでいる。別の実施例において、フローＩＤは、受信したパケットをネットワークから第１の仮想装置に対して転送するために使用される。次に、フローＩＤからＬＳＣ  ＩＤへのマッピングが行われ、さらなる処理のためにパケットに対してＬＳＣタグが取り付けられる。
【００４１】
フロー毎の実施において使用されるＬＳＣは、ＳＤＮコントローラ１１４によって事前に構成されるか、フローが最初に現れたときに決定されるか、いずれでもよい。例えば、オープンフロープロトコルに従って、パケットフローと対応するＬＳＣは、ランタイムオペレーションの最中に決定され得る。ＬＳＣに対する所定のシーケンスチェーンは、以下のものによって決定され得る。ＳＤＮコントローラにおけるロジック、セントラルＳＤＮコントローラ（例えば、オーケストレータ（ｏｒｃｈｅｓｔｒａｔｏｒ））または類似のもの、または、ＳＤＮコントローラコンポーネントと関連するコンポーネントの組合せといった、別のコンポーネントにおけるロジックによる。
【００４２】
図４は、フローテーブル１４８に対する一式の典型的なテーブルデータである、テーブル１、テーブル２、および、テーブルＮを示している。フローテーブル１４８は、フローＩＤを含んでいるフローＩＤカラム、進入ポートＩＤを含んでいる進入ポートカラム、および、ＬＳＣ  ＩＤを含んでいるＬＳＣ  ＩＤカラムを含む。テーブル１、テーブル２、および、テーブルＮそれぞれは、ＬＳＣ  ＩＤカラム、次のポートカラム、および、サービスカラムを含む。一つの実施例において、テーブル１４６、テーブル１、テーブル２、および、テーブルＮそれぞれに対するテーブルデータは、ＳＤＮコントローラ１１４によって管理される。一般的に、テーブルデータは、計算プラットフォームの初期化の最中、及び/又は、ランタイムオペレーションの最中に決められてよい。
【００４３】
一つの実施例において、テーブルデータは、以下のように実施される。フロー分類に関して、パケットに対するフローＩＤが決定される。これは、フローテーブル１４８に対するルックアップとして使用される。フローＩＤから、サービスチェーンにおいて第１の仮想装置をホストしているＶＭの進入ポートが決定され得る。ＬＳＣ  ＩＤも、また、決定され得る。任意的に、フローテーブル１４８は、ＬＳＣ  ＩＤカラムを含まなくてよく、それぞれのＬＳＣにおける第１の仮想装置によって、フローＩＤからＬＳＣ  ＩＤへのマッピングが実行される。
【００４４】
示されるように、進入ポートは、それぞれのフローに対して同一であることを要しない。実行されるべきサービスに応じて、ＬＳＣは、一つまたはそれ以上の仮想装置をスキップし得る。また、所与の仮想装置によって実行されるサービスも、また、ＬＳＣ  ＩＤに応じて、異なってよい。サービスカラムにおける「Ａ」、「Ｂ」、および、「Ｃ」の使用は、それぞれのフローテーブル１５０に応じた仮想装置によって実行されるサービスに対応している。サービスカラムに含まれるものは任意である。いくつかの実施において、所与の仮想装置は、サービスを提供する全てのＬＳＣ（またはフロー）に対して同一のサービスを実行するからである。加えて、ネットワークアダプタ／ＮＩＣにおける出口ポートも、所定のＬＳＣに応じて、異なってよい。
【００４５】
図４ａは、フローテーブル１５０に対して、ＬＳＣ  ＩＤより、むしろフローＩＤを使用する代替的なフローテーブルスキームを示している。フローＩＤからＬＳＣへのマッピングは、ＳＤＮコントローラ１１４によって内部で実行され、ＬＳＣ  ＩＤの代わりにフローＩＤが使用され得る。処理ロジックの残りは、同一を保っている。
【００４６】
フロー毎のローカルサービスチェーンに加えて、計算プラットフォームは、ネットワークインターフェイスによって受信される全てのパケット、または、ネットワークインターフェイスの既定のポートにおいて受信される全てのパケットに対して、同一の一式のサービスを実行するように（従って、同一のＬＳＣを実施するように）事前に構成されてよい。図４ｂは、単一の、既定のＬＳＣを実施するための、フローテーブル１４８ａ、フローテーブル１、フローテーブル２、および、フローテーブルＮにおける典型的なテーブルデータを示している。示されるように、全てのフローにおける出口ポートは、ｖＮＩＣ１のＲｘである。一方、それぞれの仮想装置に対する次のポートは、ＬＳＣにおける次の仮想装置に対するｖＮＩＣのＲｘオーバーラップである。説明目的のために、既定のＬＳＣを実施するためのフローテーブルデータが示されている。実際には、他の技術を使用し得る。既定のＬＳＣを実施するために、ソフトウェア変数を構成すること及び/又はソフトウェアインストラクションといったものである。例えば、フローテーブルを使用しないでＬＳＣを実施するために、それぞれの仮想マシンに対してソフトウェアがダウンロードされ得る。同様に、ネットワークアダプタまたはＮＩＣは、全てのパケットをＬＳＣに対する進入ｖＮＩＣのＲｘポートに転送するように構成され得る。
【００４７】
図１ａは、事前に決定されたＬＳＣを使用したパケット１４０の処理を説明している。示されるように、パケット１４０は、ポート１のＲｘポートからｖＮＩＣのＲｘポートにＤＭＡされており、以前にホストＯＳ１０６によって実行されていたであろうあらゆるオペレーションをバイパスし、また、仮想スイッチ１０９もバイパスしている。別の実施例の下で、パケットは、ネットワークインターフェイスからＲｘバッファ１４４に、そして次に、ｖＮＩＣのＲｘポートにＤＭＡされる。
【００４８】
別の方法に従って、ＬＳＣは、パケットヘッダに追加されたメタデータを使用して実施される。この技術の下で、外部プラットフォーム上のエンティティ（例えば、オーケストレータまたは類似のもの）は、サービスチェーン全体のエレメントを決定し得る。そして、一旦、サービスチェーンがＬＳＣを伴うプラットフォームに達すると、プラットフォーム上で動作しているソフトウェアは、このメタデータを使用してパケットフローを決定する。このようにして、ＬＳＣは、複数のプラットフォーム上で動作している仮想装置を介して実施される、より大きなサービスチェーンと一緒に使用され得る。
【００４９】
一般的に、オーケストレータによってＶＭ配置が行われる、ネットワーク機能仮想化システムにおいては、サービスチェーンに係る仮想装置をホストしているＶＭをインスタンス化することが、オーケストレータにとって有利であり得る。ここにおける実施例に従ってローカルサービスチェーンを実施することの本来の利益が利用できるようにである。例えば、パイプライン化された方法で、所定のフローのためのそれぞれのパケットに対して、同一のサービスが実行されるので、ＦＩＦＯオーバーフロー（ＦＩＦＯキューの中により多くのパケットデータを追加するための余地がないこと）の潜在的な問題は、好適にサイズ化されたＦＩＦＯキューの使用を通じて除去することができる。このアプローチは、また、仮想スイッチにおけるトラフィックの輻輳の結果として生じ得るあらゆるレイテンシも除去する。そうしたレイテンシは、サービスチェーン全体の処理パフォーマンスを、結果として削減する。単一のパケットに対するレイテンシは、全ての後続のパケットに対する処理レイテンシを結果として生じるからである。
【００５０】
ＦＩＦＯキューが、図面で示され、ここにおいて説明されている一方で、ＦＩＦＯキューは、その簡潔なこと及びオーバーヘッドがないことを通じた本来の利点を提供することに留意すべきである。さらに、ｖＮＩＣのＲｘポートそれぞれに対して単一のＦＩＦＯキューが示されているが、一つまたはそれ以上のＦＩＦＯキューが使用されてよい。例えば、それぞれのフロー及び/又はＬＳＣに対して、分離したＦＩＦＯキューが使用され得る。
【００５１】
コンピュータプラットフォームは、また、ＬＳＣフローと非ＬＳＣフローの両方をサポートするように構成されてもよい。例えば、フロー分類の最中に、パケットは、ＬＳＣと関連しないフローに属するものとして特定されてよい。従って、パケットは、パケットフローを処理するための従来技術を使用して、処理され得るものである。
【００５２】
フローテーブル１５０の使用に加えて、ＶＭが受信するＬＳＣに関連したそれぞれのパケットに対して何のアクションをなすべきかを、それぞれのＶＭが決定できるようにするために他の技術が使用され得る。例えば、一つの実施例において、進入ＶＭにおけるＬＳＣモジュールは、パケットを、後続のＶＭそれぞれによって使用される好適なＬＳＣラベルとタグ付けする。後続のＶＭは、パケットを受信し、もしあれば、何のサービスがパケット上で実行されるべきかを決定し、かつ、パケットが転送されるべき次のＶＭを決定する。
【００５３】
図５は、プラットフォームハードウェア５０２と種々のソフトウェアバースのコンポーネントを含む典型的なホストプラットフォームコンフィグレーション５００を示している。プラットフォームハードウェア５０２は、インターコネクト５１０を介して、メモリインターフェイス５０６と入力／出力（Ｉ／Ｏ）インターフェイス５０８に接続された中央処理装置（ＣＰＵ）５０４を含んでいる。いくつかの実施例においては、上述のコンポーネントの全て又は一部分がシステムオンチップ（ＳｏＣ）上に統合されてよい。メモリインターフェイス５０６は、システムメモリ５１２に対するアクセスを促進するように構成されており、たいていＳｏＣから分離している。
【００５４】
Ｉ／Ｏインターフェイス５０８は、プラットフォームハードウェア５０２によって提供される種々のＩ／Ｏインターフェイスを説明している。一般的に、Ｉ／Ｏインターフェイス５０８は、（ＩＣＨ（Ｉ／Ｏコントローラハブ）又は類似のものといった）専用コンポーネントとして実施されてよく、または、ＳｏＣ上で実施されてよい。さらに、Ｉ／Ｏインターフェイス５０８は、また、ペリフェラルコンポーネントインターフェイステーブルコネクトエクスプレス（ＰＣＩｅ）Ｉ／Ｏ階層といった、Ｉ／Ｏ階層として実施されてもよい。Ｉ／Ｏインターフェイス５０８は、さらに、種々のＩ／Ｏリソースとデバイス及び他のプラットフォームコンポーネントとの間の通信を促進する。これらは、ディスクドライブ５１４といった、不揮発性ストレージデバイスを含んでいる。ディスクドライブは、ディスクコントローラ５１６、ファームウェアストア５１８、ＮＩＣ５２０、および、他の種々のＩ／Ｏデバイスを介してＩ／Ｏインターフェイス５０８と通信可能に接続されており、他のハードウェア５２２として集合的に示されている。
【００５５】
一般的に、ＣＰＵ５０４は、シングルコアプロセッサまたはマルチコアプロセッサを含んでよい。Ｍ個のコア５０５として示されるようにである。マルチコアが使用され、種々のソフトウェアコンポーネント４２４が実施される。モジュールおよびアプローチといったものであり、ディスクドライブ５１４として示されるように、一つまたはそれ以上の不揮発性ストレージデバイスの中に保管されている。より一般的に、ディスクドライブ５１４は、種々のタイプの不揮発性ストレージデバイスを表している。磁気ベースおよび光ベース両方のストレージデバイスを含んでおり、半導体ドライブ（ＳＳＤ）またはフラッシュメモリといった、半導体ストレージデバイスも同様である。任意的に、ソフトウェアコンポーネント５２４の全てまたは一部分は、ネットワーク５２６を介してアクセスされる一つまたはそれ以上のストレージデバイス（図示なし）上に保管されてよい。
【００５６】
ブートアップまたはランタイムオペレーションの最中には、種々のソフトウェアコンポーネント５２４およびファームウェアコンポーネント５２８がシステムメモリ５１２（ＦＷ空間として示されるように）の中にロードされ、実行スレッドまたは類似のものを含むプロセスとしてコア５０５上で実行される。所定のプロセッサまたはＳｏＣアーキテクチャに応じて、所与の「物理的（”ｐｈｙｓｉｃａｌ”）」コアが、一つまたはそれ以上のロジカルコアとして実施され得る。種々のロジカルコアに割り当てられているプロセスを用いるものである。例えば、インテル社のハイパースレッディング（Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ）アーキテクチャの下で、それぞれの物理的コアは、２つのロジカルコアとして実施される。
【００５７】
プラットフォームハードウェア５０２のための典型的なシステムブートの下では、ファームウェア５２８がシステムメモリ５１２の中にロードされて構成され、ホストＯＳ５３０のブートが後に続く。その後、ハイパーバイザ５３２、一般的にホストＯＳ５３０上で稼働しているアプローチを含み得るものが、起動される。ハイパーバイザ５３２は、次に、種々の仮想マシン、ＶＭ１−Ｎ、を起動するために使用され得る。それぞれのＶＭは、システムメモリ５１２の種々の部分（つまり、アドレス空間）を使用するように構成される。今度は、それぞれのオペレーティングシステム５３４１−Ｎをホストするために、それぞれの仮想マシンＶＭ１−Ｎが使用され得る。
【００５８】
ランタイムオペレーションの最中に、ハイパーバイザ５３２は、種々のシステムリソースの再構成を可能にする。システムメモリ５１２、コア５０５、および、ディスクドライブ５１４といったものである。一般的に、仮想マシンは、ホストされているオペレーティングシステムと根底にあるプラットフォームは５０２との間のアブストラクション（ａｂｓｔｒａｃｔｉｏｎ）を（ハイパーバイザ５３２との組み合わせにおいて）提供し、ハードウェアリソースが、ＶＭ１−Ｎ間で共有できるようにしている。ホストされているオペレーティングシステムそれぞれの観点から、オペレーティングシステムは全てのプラットフォームを「所有」しており、仮想マシン上で稼働している他のオペレーティングシステムの存在に気付かない。現実に、それぞれのオペレーティングシステムは、単に、ハイパーバイザ５３２によって割り当てられたリソース及び/又はリソース部分だけに対するアクセスを有するものである。
【００５９】
図５において、さらに示されるように、それぞれのオペレーティングシステムは、カーネル空間とユーザ空間を含んでおり、両方が、システムメモリ５１２におけるメモリ空間として実施される。カーネル空間は、保護され、かつ、オペレーティングシステムのカーネルコンポーネントを実行するために使用される。ネットワークスタックを含むものである。一方、オペレーティングシステムのユーザ空間は、ユーザアプローチを実行するために使用される。アプリケーション１、２、および、Ｎ、及び、アプリケーション１Ａ−Ｃ、２Ａ−Ｃ、および、ＮＡ−Ｃによって示されるようにである。
【００６０】
一般的に、装置１、２、および、Ｎは、プラットフォームハードウェア５０２上の仮想マシン上で実行され得る種々のＳＤＮまたはＮＦＶ装置を示している。簡潔のために、それぞれのＶＭ１−Ｎは、同様なソフトウェアアプリケーションのセットをホストしているように示されている。しかしながら、これは単に説明目的だけのものである。所与のプラットフォームのためのＶＭは同様なアプローチをホストしてよく、または、異なるアプリケーションをホストしてもよいからである。同様に、それぞれのＶＭ１−Ｎは、単一の仮想ネットワーク装置を（示されるように）ホストしてよく、複数の仮想ネットワーク装置をホストしてよく、または、あらゆる仮想ネットワーク装置をホストしなくてもよい。
【００６１】
上述のように、ＶＭを使用したコンピュータプラットフォームの仮想化に加えて、仮想化コンテナを使用しているコンテナベースのＯＳ仮想化が実施され得る。コンテナベースの仮想化を使用している実施例は、図１ｂにおいて示されるアーキテクチャ１００ｂ、および、図６におけるプラットフォームコンフィグレーション、の中に示されている。
【００６２】
プラットフォームコンフィグレーション６００において使用されるハードウェアコンフィグレーションは、示されるように、プラットフォームコンフィグレーション５００と同一である。プラットフォームコンフィグレーションにおける差異は、ソフトウェアにおいて生じる。プラットフォームコンフィグレーション６００におけるソフトウェアは、ホストＯＳ６０２、ＯＳ仮想化レイヤ６０４、および、複数のコンテナ６０６を含んでいる。任意的に、コンテナは、また、仮想エンジン、仮想マシン、または、他の用語とも呼ばれ得る。コンテナベースの仮想化ソフトウェアを提供しているベンダ、または、コンテナベースのＯＳ仮想化がどのように動作するかを記述する作者に応じたものである。
【００６３】
それぞれのコンテナは、システムコンポーネントとアプリケーション及び/又はユーザコンポーネントへと論理的に分割されたソフトウェアライブラリおよびアプリケーションのセットを含んでいる。システムコンポーネントは、システムライブラリとシステムソフトウェアモジュールを含んでいる。示されるように、それぞれのコンテナは、ネットワークスタックシステムモジュール、または類似のものを含む。仮想装置は、アプリケーション／ユーザ空間において実行される。一般的に、仮想装置は、ＶＭ上で動作しているか、または、コンテナ上かについて不可知的であるように、構成されてよい。もしくは、そうでなければ、コンテナによってホストされるのと対照的に、ＶＭ上で稼働するように構成された仮想装置の間で小さな差異が存在する。
【００６４】
図１ｂのアーキテクチャ１００ｂに示されるように、アーキテクチャコンポーネントは、実質的に、アーキテクチャ１００および１００ａにおいて示されるものと実質的に同様である。主要な相違は、ハイパ−バイザがＯＳ仮想化レイヤ６０４に置き換えられていること、および、ＶＭがコンテナ６０６に置き換えられていることである。ＶＭを用いるのと同様に、それぞれのコンテナは、同様なソフトウェアコンポーネントのセットを含み、ｖＮＩＣ、一つまたはそれ以上の仮想装置１３６、および、対応するアプリケーション１３８を含んでいる。フローテーブル１５０も同様である。
【００６５】
ＩＰパケットとイーサネットパケットの使用に加えて、仮想化オーバーレイが使用されてよい。ＶＸＬＡＮ（仮想エクステンションローカルエリアネットワーク）、ＮＶＧＲＥ（ジェネリックルーティングを使用するネットワーク仮想化）といったものであり、ＩＰアドレスの内側および外側を使用するものである。ＶＸＬＡＮまたはＮＶＧＲＥを使用してローカルサービスチェーンを実施するために、上記の実施例において説明されたように、ＩＰの処理に対して、オーバーレイの存在が単に加えられる。ＶＸＬＡＮおよびＮＶＧＲＥを使用したパケット処理のためのさらなる技術が、当業者には知られている。そして、ＶＸＬＡＮまたはＮＶＧＲＥを使用した実施例に対するさらなる詳細は、ここにおいて説明されない。
【００６６】
ここにおいて説明された技術的事項のさらなる態様は、以降の番号付けされた条項において明らかにされる。
【００６７】
１．複数の仮想マシン（ＶＭ）または仮想化コンテナが稼働している計算プラットフォーム上で実施される方法であって、それぞれのＶＭまたは仮想化コンテナは、ソフトウェア確定ネットワーク（ＳＤＮ）における仮想スイッチに通信可能に接続されている仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含み、前記方法は、
前記複数のＶＭまたは仮想化コンテナによってホストされた複数の仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施するステップであり、それぞれのネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されている、ステップと、
前記複数のパケットの中に含まれるパケットデータを、前記仮想スイッチを使用することなく、ＶＭまたはコンテナ間で転送するステップと、を含む、方法。
【００６８】
２．前記パケットデータは、第１の受信（Ｒｘ）バッファを有し、前記ＬＳＣにおける現在の仮想ネットワーク装置をホストしている第１のｖＮＩＣを含む、第１のＶＭまたはコンテナから、第２のＲｘバッファを有し、前記ＬＳＣにおける次の仮想ネットワーク装置をホストしている第２のｖＮＩＣを含む、第２のＶＭまたはコンテナに対して、前記第２のＲｘバッファへ、直接的にパケットデータを書込むことによって転送される、条項１に記載の方法。
【００６９】
３．前記パケットデータは、前記第１のＲｘバッファから前記第２のＲｘバッファへコピーされる、条項２に記載の方法。
【００７０】
４．前記第１および第２のＲｘバッファの少なくとも一部分は、それぞれにファーストインファーストアウト（ＦＩＦＯ）キューとして構成されており、かつ、所与のパケットについてのパケットデータは、第１のＦＩＦＯキューにおける一つまたはそれ以上のスロットから、第２のＦＩＦＯキューにおける一つまたはそれ以上のスロットへコピーされる、条項３に記載の方法。
【００７１】
５．前記方法は、さらに、
複数のＬＳＣを実施するステップであり、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでいる、ステップと、
前記複数のＬＳＣそれぞれに対して、ＬＳＣに割り当てられたパケットについてのパケットデータの転送を促進するためのメカニズムを実施するステップであり、それぞれのＬＳＣについて、前記パケットデータは、前記仮想スイッチを通過しないチェーン化された方法で、ＬＳＣのための前記仮想ネットワーク装置をホストしているＶＭまたはコンテナ間で転送される、条項１乃至４いずれかに記載の方法。
【００７２】
６．前記メカニズムは、ＶＭまたはコンテナそれぞれに対するそれぞれのローカルフローテーブルを含み、所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭのためのｖＮＩＣ受信（Ｒｘ）ポートまたはＲｘバッファのうち少なくとも一つ、もしくは、前記ＬＳＣにおいて次のネットワーク装置をホストしているコンテナを特定する、条項５に記載の方法。
【００７３】
７．前記方法は、さらに、ＳＤＮコントローラを使用して、ＶＭまたはコンテナそれぞれのための前記ローカルフローテーブルを構成するステップと、を含む、条項６に記載の方法。
【００７４】
８．前記方法は、さらに、
前記複数のＶＭまたはコンテナそれぞれに対して、それぞれのアプリケーションメモリ空間を割り当てるステップであり、ＶＭまたはコンテナのアプリケーションメモリ空間において稼働しているアプリケーションは、別のＶＭまたはコンテナのアプリケーションメモリ空間にアクセスすることができない、ステップと、
前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当てるステップであり、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、ステップと、を含む、条項１乃至７いずれかに記載の方法。
【００７５】
９．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、
前記ネットワークインターフェイスのネットワークポートにおいてパケットを受信するステップと、
前記パケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定するステップと、
前記パケットを、前記ネットワークインターフェイスから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送するステップと、を含む、条項１乃至８いずれかに記載の方法。
【００７６】
１０．前記パケットは、前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間における受信バッファから、前記ｖＮＩＣの前記受信バッファへ、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、条項９に記載の方法。
【００７７】
１１．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信されるパケットそれぞれに対して、
受信バッファにおける前記パケットについてのパケットデータを、前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間においてバッファするステップと、
前記パケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーするステップと、を含む、条項１乃至１０いずれかに記載の方法。
【００７８】
１２．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、既定のネットワークポートにおいて受信された全てのパケットに足して同一のＬＳＣを使用するステップと、を含む、条項１乃至１１いずれかに記載の方法。
【００７９】
１３．前記方法は、さらに、
所与のパケットに対して使用される、ＬＳＣにおける最後の仮想装置である仮想装置を決定するステップと、
前記パケットが転送されるべき、物理的ネットワークアダプタ上の出力ポートを決定するステップと、
前記仮想スイッチをバイパスする方法で、前記最後の仮想装置をホストしているＶＭまたはコンテナ上のバッファから、前記物理的ネットワークアダプタの前記出力ポートに関連するバッファへ、パケットデータを転送するステップと、を含む、条項１乃至１２いずれかに記載の方法。
【００８０】
１４．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記方法は、さらに、前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信されたそれぞれのパケットに対して、
受信バッファの中の前記パケットについてのパケットデータを、前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間にバッファするステップと、
前記パケットについての前記パケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーするステップと、を含む、条項１３に記載の方法。
【００８１】
１５．複数のＶＭまたはコンテナが実施されるべき計算プラットフォームのプロセッサ上で実行されるように構成された複数のインストラクションが保管されている機械で読取り可能な固定の媒体であって、前記複数のインストラクションが実行されると、前記計算プラットフォームは、条項１乃至１４いずれかに記載の方法を実行する、機械で読取り可能な固定の媒体。
【００８２】
１６．条項１乃至１４いずれかに記載の方法を実行するための手段を含む、計算プラットフォーム。
【００８３】
１７．複数の仮想マシン（ＶＭ）または仮想化コンテナが実施されるべき計算プラットフォームのプロセッサ上で実行されるように構成された複数のインストラクションが保管されている機械で読取り可能な固定の媒体であって、前記ＶＭまたはコンテナの少なくとも一部分は、ソフトウェア確定ネットワーク（ＳＤＮ）における仮想スイッチに通信可能に接続された仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含み、かつ、仮想ネットワーク装置をホストしており、前記複数のインストラクションが実行されると、前記計算プラットフォームは、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施し、それぞれの仮想ネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記ＬＳＣにおける現在のサービス実行するように構成された第１の仮想ネットワーク装置をホストしている第１のＶＭまたはコンテナに対してアクセス可能なバッファから、前記ＬＳＣにおける次のサービス実行するように構成された第２の仮想ネットワーク装置をホストしている第２のＶＭまたはコンテナに係るｖＮＩＣの受信（Ｒｘ）バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをＶＭまたはコンテナ間で転送する、機械で読取り可能な固定の媒体。
【００８４】
１８．前記第２のＶＭまたはコンテナに係るｖＮＩＣのＲｘバッファは、第２のＲｘバッファを含み、かつ、前記パケットデータは、前記第１のＶＭまたはコンテナに係るｖＮＩＣの第１のＲｘバッファから前記第２のＲｘバッファへコピーされる、条項１７に記載の機械で読取り可能な固定の媒体。
【００８５】
１９．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記第１および第２のＲｘバッファの少なくとも一部分を、それぞれ第１および第２のファーストインファーストアウト（ＦＩＦＯ）キューとして構成し、かつ、
所与のパケットについてのパケットデータを、第１のＦＩＦＯキューにおける一つまたはそれ以上のスロットから、第２のＦＩＦＯキューにおける一つまたはそれ以上のスロットへコピーする、条項１７または１８に記載の機械で読取り可能な固定の媒体。
【００８６】
２０．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のＬＳＣを実施し、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているＶＭまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記ＬＳＣそれぞれに対するエントリーを含み、かつ、ＬＳＣそれぞれに対する前記エントリーは、ｖＮＩＣ受信（Ｒｘ）バッファ、または、前記ＬＳＣにおいて次の仮想ネットワーク装置をホストしているＶＭまたはコンテナのためのＲｘバッファ、のうち少なくとも一つを特定する、条項１７乃至１９いずれかに記載の機械で読取り可能な固定の媒体。
【００８７】
２１．前記複数のインストラクションは、さらに、実行されると、それぞれのＶＭまたはコンテナに対する前記ローカルテーブルを構成するＳＤＮコントローラを実施するためのインストラクションを含む、条項２０に記載の機械で読取り可能な固定の媒体。
【００８８】
２２．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項１７乃至２１いずれかに記載の機械で読取り可能な固定の媒体。
【００８９】
２３．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項２２に記載の機械で読取り可能な固定の媒体。
【００９０】
２４．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ネットワークインターフェイスにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ネットワークインターフェイスから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送する、条項１７乃至２３いずれかに記載の機械で読取り可能な固定の媒体。
【００９１】
２５．前記パケットは、前記ネットワークインターフェイスのメモリマップド入力−出力（ＭＭＩＯ）アドレス空間における受信バッファから、前記ｖＮＩＣの前記受信バッファへ、
ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記パケットについてのパケットデータをコピーすることによって、転送される、条項２４に記載の機械で読取り可能な固定の媒体。
【００９２】
２６．前記計算プラットフォームは、前記計算プラットフォームに通信可能に接続された少なくとも一つのネットワークポートを有するネットワークインターフェイスを含み、前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力（ＭＭＩＯ）アドレス空間として、前記ネットワークインターフェイス上にメモリの少なくとも一部分を構成し、かつ、
前記ネットワークインターフェイスを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記ＭＭＩＯアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーする、条項１７乃至２５いずれかに記載の機械で読取り可能な固定の媒体。
【００９３】
２７．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
パケットが属するフローを決定し、
前記フローに属しているパケットをサービスするために使用されるべきＬＳＣを決定し、
前記パケットをサービスするために使用されるべきＬＳＣを特定する指標を前記パケットに追加する、条項１７乃至２６いずれかに記載の機械で読取り可能な固定の媒体。
【００９４】
２８．計算プラットフォームであって、
複数のプロセッサコアを含むプロセッサと、
前記プロセッサに対して動作可能に接続されたシステムメモリと、
前記プロセッサに対して動作可能に接続された、少なくとも一つのネットワークポートとメモリを含むネットワークインターフェイスコントローラ（ＮＩＣ）と、
デバイス上に保管された複数のインストラクションを有するストレージデバイスと、を含み、
前記インストラクションが、一つまたはそれ以上の前記プロセッサコアを介して実行されると、前記計算プラットフォームは、
複数の仮想マシン（ＶＭ）または仮想化コンテナをインスタンス化し、それぞれのＶＭまたはコンテナは仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含んでおり、前記ＶＭまたはコンテナの少なくとも一部分は仮想ネットワーク装置をホストしており、
それぞれのｖＮＩＣに接続された仮想ネットワークポートおよび前記ｖＮＩＣ上の少なくとも一つのネットワークポートを有する仮想スイッチを含んでいる、ソフトウェア確定ネットワーク（ＳＤＮ）をプラットフォーム上に構成し、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施し、それぞれのネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記ＬＳＣにおける現在のサービスを実行するように構成されたる第１の仮想ネットワーク装置をホストしている第１のＶＭまたはコンテナに対してアクセス可能なバッファから、前記ＬＳＣにおける次のサービスを実行するように構成された第２の仮想ネットワーク装置をホストしている第２のＶＭまたはコンテナに係るｖＮＩＣの受信（Ｒｘ）バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをＶＭまたはコンテナ間で転送する、計算プラットフォーム。
【００９５】
２９．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
複数のＬＳＣを実施し、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているＶＭまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記ＬＳＣそれぞれに対するエントリーを含み、かつ、ＬＳＣそれぞれに対する前記エントリーは、ｖＮＩＣ受信（Ｒｘ）バッファ、または、前記ＬＳＣにおいて次の仮想ネットワーク装置をホストしているＶＭまたはコンテナのためのＲｘバッファ、のうち少なくとも一つを特定する、条項２８に記載の計算プラットフォーム。
【００９６】
３０．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、条項２８または２９に記載の計算プラットフォーム。
【００９７】
３１．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
前記ＮＩＣにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ＮＩＣから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送する、条項２８乃至３０いずれかに記載の計算プラットフォーム。
【００９８】
３２．前記複数のインストラクションが実行されると、前記計算プラットフォームは、さらに、
メモリマップド入力−出力（ＭＭＩＯ）アドレス空間として、前記ネットワークインターフェイス上に前記メモリの少なくとも一部分を構成し、かつ、
前記ＮＩＣを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記ＭＭＩＯアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーする、条項２８乃至３１いずれかに記載の計算プラットフォーム。
【００９９】
３３．計算プラットフォームであって、少なくとも一つのネットワークポートとメモリを含むネットワークインターフェイスコントローラ（ＮＩＣ）と、
複数の仮想マシン（ＶＭ）または仮想化コンテナをインスタンス化し、それぞれのＶＭまたはコンテナは仮想ネットワークインターフェイスコントローラ（ｖＮＩＣ）を含んでおり、前記ＶＭまたはコンテナの少なくとも一部分は仮想ネットワーク装置をホストしており、
それぞれのｖＮＩＣに接続された仮想ネットワークポートおよび前記ｖＮＩＣ上の少なくとも一つのネットワークポートを有する仮想スイッチを含んでいる、ソフトウェア確定ネットワーク（ＳＤＮ）をプラットフォーム上に構成し、
複数の前記仮想ネットワーク装置を介してローカルサービスチェーン（ＬＳＣ）を実施し、それぞれのネットワーク装置は、前記ＬＳＣによって処理されるべき複数のパケットそれぞれに対する一つまたはそれ以上のサービスを実行するように構成されており、かつ、
前記ＬＳＣにおける現在のサービスを実行するように構成されたる第１の仮想ネットワーク装置をホストしている第１のＶＭまたはコンテナに対してアクセス可能なバッファから、前記ＬＳＣにおける次のサービスを実行するように構成された第２の仮想ネットワーク装置をホストしている第２のＶＭまたはコンテナに係るｖＮＩＣの受信（Ｒｘ）バッファへ、パケットデータを書込むことによって、前記複数のパケットの中に含まれるパケットデータをＶＭまたはコンテナ間で転送する、ための手段を有する、計算プラットフォーム。
【０１００】
３４．前記計算プラットフォームは、さらに、
複数のＬＳＣを実施し、それぞれのＬＳＣは、ＬＳＣを使用して処理されるパケット上で実行されるべき固有のサービスのシーケンスを含んでおり、かつ、
仮想ネットワーク装置をホストしているＶＭまたはコンテナそれぞれに対するローカルフローテーブルを構成し、所与のＶＭまたはコンテナに対する前記ローカルフローテーブルは、ＶＭまたはコンテナによってホストされた仮想ネットワーク装置によって実行されるべきサービスを含む前記ＬＳＣそれぞれに対するエントリーを含み、かつ、ＬＳＣそれぞれに対する前記エントリーは、ｖＮＩＣ受信（Ｒｘ）バッファ、または、前記ＬＳＣにおいて次の仮想ネットワーク装置をホストしているＶＭまたはコンテナのためのＲｘバッファ、のうち少なくとも一つを特定する、ための手段を有する、条項３３に記載の計算プラットフォーム。
【０１０１】
３５．前記計算プラットフォームは、さらに、前記ＶＭまたはコンテナそれぞれについて、ｖＮＩＣによって使用されるバッファを受信するために使用される共有メモリ空間を割り当て、それぞれのＶＭまたはコンテナは、前記共有メモリ空間の読出し及び書込みをすることができる、ための手段を有する、条項３３または３４に記載の計算プラットフォーム。
【０１０２】
３６．前記計算プラットフォームは、さらに、
前記ＮＩＣにおいて受信されたパケットが属するフロー、または、前記パケットをサービスするために使用されるべきＬＳＣ、のうち少なくとも一つを決定し、かつ、
前記パケットを、前記ＮＩＣから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナのためのｖＮＩＣの受信バッファへ転送する、ための手段を有する、条項３３乃至３５いずれかに記載の計算プラットフォーム。
【０１０３】
３７．前記計算プラットフォームは、さらに、
メモリマップド入力−出力（ＭＭＩＯ）アドレス空間として、前記ネットワークインターフェイス上に前記メモリの少なくとも一部分を構成し、かつ、
前記ＮＩＣを構成して、
前記ネットワークインターフェイスの既定のネットワークポートにおいてネットワークから受信した複数のパケットそれぞれについての受信バッファにおけるパケットデータを、前記ＭＭＩＯアドレス空間においてバッファし、かつ、
それぞれのパケットについてのパケットデータを、ダイレクトメモリアクセス（ＤＭＡ）データ転送を使用して、前記受信バッファから、前記ＬＳＣについて定められた第１の仮想ネットワーク装置をホストするために使用されるＶＭまたはコンテナに対するｖＮＩＣの受信バッファへコピーする、ための手段を有する、条項３３乃至３６いずれかに記載の計算プラットフォーム。
【０１０４】
いくつかの実施例が所定の実施に関して説明されてきたが、いくつかの実施例に従った他の実施も可能である。加えて、図面に示され、及び／又は、ここにおいて説明されたエレメントまたは他の特徴に係る構成及び／又は順番は、図示され、説明された所定のやり方に構成される必要はない。いくつかの実施例に従って、多くの他の構成が可能である。
【０１０５】
図示されたそれぞれのシステムにおいて、いくつかのケースにおけるエレメントは、それぞれ同じ参照番号または異なる参照番号を有することができ、表示されたエレメントは異なり、及び／又は、同じであってよい。しかしながら、エレメントは、ここにおいて示され、または、説明されたいくつかの、または、全てのシステムとは異なる実施及び作業を有するよう十分に順応性がある。図示された種々のエレメントは、同一、または、異なるものであってよい。どれを第１のエレメントとして参照し、どれを第２のエレメントと呼ぶかは任意である。
【０１０６】
明細書および特許請求の範囲において、用語「結合された（“ｃｏｕｐｌｅｄ”）」と「接続された（“ｃｏｎｎｅｃｔｅｄ”）」が、その派生語を伴なって、使用され得る。これらの用語は、お互いに類義語であるとして意図されたものではない。むしろ、所定の実施例において、「接続された」は、２つまたはそれ以上のエレメントがお互いに直接に物理的または電気的に接触していることを示すために使用され得る。「結合された」は、２つまたはそれ以上のエレメントが直接に物理的または電気的に接触していることを意味することができる。しかしながら、「結合された」は、また、２つまたはそれ以上のエレメントがお互いに直接的に接触していないことも意味することもあるが、それでもなお、お互いに協働または相互作用するものである。
【０１０７】
実施例は、本発明の実施または例である。明細書における「実施例（“ａｎ  ｅｍｂｏｄｉｍｅｎｔ”）」、「一つの実施例（“ｏｎｅ  ｅｍｂｏｄｉｍｅｎｔ”）」、「いくつかの実施例（“ｓｏｍｅ  ｅｍｂｏｄｉｍｅｎｔ”）」、および、「他の実施例（“ｏｔｈｅｒ  ｅｍｂｏｄｉｍｅｎｔ”）」への言及は、実施例に関して説明された所定の特徴、構成、または、特性が、少なくともいくつかの本発明に係る実施例に含まれているが、必ずしも全ての実施例に含まれる必要はない、ことを意味している。種々の表現である「実施例」、「一つの実施例」、「いくつかの実施例」、および、「他の実施例」は、必ずしも全て同一の実施例を参照することを要しない。
【０１０８】
ここにおいて説明され、図示されたコンポーネント、特徴、構成、特性、等の全てが、所定の実施例に含まれる必要があるということはない。例えば、明細書で、コンポーネント、特徴、構成、または、特性が含まれ「得る（“ｍａｙ”、“ｍｉｇｈｔ”、“ｃａｎ”、または、“ｃｏｕｌｄ”）」と記載している場合は、その所定のコンポーネント、特徴、構成、または、特性が含まれることを要しない。明細書または特許請求の範囲が「一つの（“ａ”ｏｒ“ａｎ”）」エレメントに言及している場合は、そのエレメントが唯一つ存在することを意味するものではない。明細書または特許請求の範囲が「追加の（“ａｎ  ａｄｄｉｔｉｏｎａｌ”）」エレメントに言及している場合は、追加のエレメントの一つ以上の存在を排除することを意味するものではない。
【０１０９】
上記の詳細な説明における”Ｍ”および”Ｎ”といった文字は、整数を示すために使用されており、所定の文字の使用は所定の実施例に限定されるものではない。さらに、同じ文字が別個の整数を表すために使用されてよく、または、異なる文字が使用されてもよい。加えて、詳細な説明における所定の文字使用は、詳細な説明における技術的事項と同一のものに関する請求項において使用される文字と一致しても、しなくてもよい。
【０１１０】
上述のように、ここにおける実施例の種々の態様は、対応するソフトウェア及び/又はファームウェアコンポーネントおよびアプリケーションによって促進され得る。サーバー又はデバイスプロセッサ上で稼働しているソフトウェア、または、エンベッドされたプロセッサによって実行されるソフトウェア及び/又はハードウェア、または類似のもの、といったものである。このように、本発明の実施例は、以下のものとして、または、以下をサポートするために使用され得る。ソフトウェアプログラム、ソフトウェアモジュール、ファームウェア、及び/又は、プロセッサコアのいくつかの形態上（コンピュータのＣＰＵ、マルチコアプロセッサの一つまたはそれ以上のコア、といったもの）で実行される分散されたソフトウェア、プロセッサまたはコア上で稼働しており、または、そうでなければ、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体の上または中で実施され又は実現される仮想マシン、である。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、マシン（例えば、コンピュータ）によって読取り可能な形態において情報を保管または送るためのあらゆるメカニズムを含んでいる。例えば、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、読出し可能／読出し不可媒体（例えば、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス、等）といった、コンピュータまたはコンピューティングマシン（例えば、計算機器、電子システム、等）によってアクセス可能な形態において情報を提供（つまり、保管及び/又は伝送）するあらゆるメカニズムを含んでいる。コンテンツは、直接的に実行可能であり（「オブジェクト（”ｏｂｊｅｃｔ”）」または「実行可能（”ｅｘｅｃｕｔａｂｌｅ”）」形態）、ソースコード、または、異なるコード（「デルタ（”ｄｅｌｔａ”）」または「パス（”ｐａｔｈ”）」コード）、であってよい。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、また、そこからコンテンツをダウンロードすることができるストレージまたはデータベースを含む。コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体は、また、販売または配送の時点でコンテンツが保管されているデバイスまたはプロダクトを含む。従って、コンテンツが保管されたデバイスを配送すること、または、通信メディアにわたりダウンロードのためにコンテンツを提供することは、ここにおいて説明されたようなコンテンツを伴うンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体を含む製品を提供するものとして理解され得るものである。
【０１１１】
プロセスとして上記に参照された種々のコンポーネント、サーバー、または、ここにおいて説明されたツールは、説明された機能を実行するための手段であり得る。ここにおいて説明された種々のコンポーネントによって実行されるオペレーションと機能は、処理エレメント上で稼働しているソフトウェアによって実施され得る。エンベッドされたハードウェア又は類似のもの、または、ハードウェアとソフトウェアのあらゆる組合せを介するものである。そうしたコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、特定用途のハードウェア（例えば、アプリケーション特化ハードウェア、ＡＳＩＣ、ＤＳＰ、等）、エンベッドされたコントローラ、ハードワイヤード回路、ハードウェアロジック、等として実施され得る。ソフトウェアコンテンツ（例えば、データ、インストラクション、コンフィグレーション情報、等）は、コンピュータで読取り可能またはマシンで読取り可能な固定のストレージ媒体を含む製品を介して提供され、実行され得るインストラクションを表すコンテンツを提供する。コンテンツは、ここにおいて説明された種々の機能／オペレーションを実行するコンピュータを結果として生じる。
【０１１２】
本発明の図示された実施例に係る上記の説明は、要約において記載されたものを含み、精緻なもの、または、開示されたまさにその形態に本発明を限定するように意図されたものではない。本発明の所定の実施例、および例示は、説明目的のためにここにおいて記載されており、当業者であれば理解されるように、本発明の範囲内において種々の均等な変形が可能である。
【０１１３】
これらの変形は、上記の詳細な説明をに照らして、本発明について行うことができる。以降の請求項において使用される用語は、明細書と図面において開示された所定の実施例に本発明を限定するものと理解されるべきではない。むしろ、本発明の範囲は、以降の請求項によって完全に決定されるべきものであり、確立されたクレーム解釈方針に従って理解される。
【符号の説明】
【０１１４】
１０２  計算プラットフォーム
１０６  ホストオペレーティングシステム
１０７  ＯＳメモリ
１０８  アプリケーションメモリ空間
１０９  仮想スイッチ
１１０  ハイパーバイザ
１１４  ＳＤＮコントローラ
１３４  共有メモリ領域
１４８  フローテーブル
５１０  インターコネクト
５１６  ディスクコントローラ
５２６  ネットワーク
【図１】
0006016984.tif 000002
【図１ａ】
0006016984.tif 000003
【図１ｂ】
0006016984.tif 000004
【図２】
0006016984.tif 000005
【図３】
0006016984.tif 000006
【図４】
0006016984.tif 000007
【図４ａ】
0006016984.tif 000008
【図４ｂ】
0006016984.tif 000009
【図５】
0006016984.tif 000010
【図６】
0006016984.tif 000011