以下では、パケット処理においてパケットに対して負荷バランシングを動的に実行するための方法および装置について説明する。以下の説明では、本発明を十分に理解するために、論理の実装、オペコード、オペランドを指定するための手段、リソースの分割/共有/複製の実装、システムコンポーネントの種類と相互関係、および論理の分割/統合の選択肢などの多くの具体的な詳細が示される。ただし、そのような具体的な詳細がなくても本発明を実施できるということが、当業者によって理解されるであろう。他の例では、本発明を曖昧にしないようにするために、制御構造、ゲートレベル回路、および完全なソフトウェア命令シーケンスが詳細に示されていない。当業者は、記載された説明に従って、過度な実験を行わずに適切な機能を実装できるであろう。
本明細書における「一実施形態」、「実施形態」、「実施形態例」などへの参照は、記載された実施形態が特定の特徴、構造、または特性を含むことができるが、必ずしもすべての実施形態が特定の特徴、構造、または特性を含むことができるわけではないということを示している。さらに、そのような語句は必ずしも同じ実施形態を参照していない。また、特定の特徴、構造、または特性がある実施形態に関連して説明される場合、明示的に説明されるかどうかにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内にあると考えられる。
括弧で囲まれたテキストおよび破線の境界(例えば、大きい破線、小さい破線、鎖線、および点線)を持つブロックは、本明細書では、追加の特徴を本発明の実施形態に追加するオプションの操作を示すために使用できる。ただし、そのような表記が、本発明の特定の実施形態においては、単なるオプションもしくはオプションの操作であること、および/または実線の境界を持つブロックがオプションではないことを意味していると受け取るべきではない。
以下の説明および請求項において、「結合された」および「接続された」という用語が、それらの派生語と共に使用される場合がある。それらの用語は、互いに同義語であることは意図されていないと理解されるべきである。「結合された」は、互いに物理的または電気的に直接接触している場合もあれば、ない場合もある2つ以上の要素が、連携または相互作用していることを示すために使用される。「接続された」は、相互に結合された2つ以上の要素間の通信の確立を示すために使用される。
電子デバイスは、機械可読記憶媒体(例えば磁気ディスク、光ディスク、読み取り専用メモリ(ROM)、フラッシュメモリデバイス、相変化メモリ)および機械可読伝送媒体(キャリアとも呼ばれる)(例えば、電気、光、無線、音、またはその他の形態の、搬送波、赤外線信号などの伝搬信号)などの機械可読媒体(コンピュータ可読媒体とも呼ばれる)を使用して、コード(ソフトウェア命令で構成され、コンピュータプログラムコードまたはコンピュータプログラムと呼ばれる場合もある)および/またはデータを(内部で、および/またはネットワークを経由して他の電子デバイスを使用して)格納および伝送する。したがって、電子デバイス(例えばコンピュータ)は、一連のプロセッサ上で実行するためのコードを格納するため、および/またはデータを格納するための1つまたは複数の機械可読記憶媒体に結合された1つまたは複数のプロセッサのセットなどの、ハードウェアおよびソフトウェアを含む。例えば、電子デバイスは、コードを含んでいる不揮発性メモリを含むことができる。これは、電子デバイスがオフになった(電源が外された)場合でも不揮発性メモリがコード/データを維持できるためである。電子デバイスがオンになっている間は、電子デバイスのプロセッサによって実行されるコードの一部が、電子デバイスのより遅い不揮発性メモリから揮発性メモリ(例えばダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM))に通常はコピーされる。標準的な電子デバイスは、他の電子デバイスとのネットワーク接続を確立し、(伝搬信号を使用してコードおよび/またはデータを伝送および/または受信するために、)一連の、または1つまたは複数の物理ネットワークインターフェイスも含む。本発明の実施形態の1つまたは複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアのさまざまな組合せを使用して実装できる。
ネットワークデバイス(ND)は、ネットワーク上の他の電子デバイス(例えば他のネットワークデバイス、エンドユーザデバイス)と通信によって相互接続する電子デバイスである。一部のネットワークデバイスは、多重ネットワーク機能(例えば、ルーティング、ブリッジ、スイッチング、レイヤ2アグリゲーション、セッション境界制御、サービス品質、および/または加入者管理)のサポートを提供し、かつ/または多重アプリケーションサービス(例えばデータ、音声、およびビデオ)のサポートを提供する「多重サービスネットワークデバイス」である。ネットワークデバイス(ND)は、本明細書において下で詳細に説明されているように、1つまたは複数のネットワーク要素を含むことができる。
パケット処理におけるフロー分散の課題
転送ネットワーク要素を実装するネットワークデバイスでは、受信されたパケットを分類し、パケット処理スレッドにマッピングすることができる。例えば、転送ネットワーク要素は、パケット転送アーキテクチャ内の転送プレーンの一部である。転送ネットワーク要素は、転送タスクを実行する1つまたは複数のパケット処理スレッドを含むように実装することができる。各パケット処理スレッドは、受信されたパケットに対して、一連の適用可能な検索機能および転送機能を実行する。転送ネットワーク要素は、転送プロセス中にフローのパケットの順序がネットワーク要素によって変更されず、ネットワーク要素でパケットが受信された順序と同じ順序でパケットが出力されることを保証する必要がある。いくつかのアプローチを使用して、ネットワーク要素で受信されたパケットを複数のパケット処理スレッドに分散することができる。
第1のアプローチによれば、フローのパケットが、処理するために同じパケット処理スレッドにマッピングされる。この例では、パケットはパケット処理スレッドにおいて処理され、パケットが受信された順序でネットワーク要素から出力される。ただし、このアプローチは、同じフローからのパケットのバーストが存在する場合、またはフローが重いフロー(「エレファントフロー」と呼ばれる場合もある)である場合、適切に実行されず、その結果、パケットの喪失につながる可能性のあるパケット処理スレッドのオーバーサブスクリプションが発生する。エレファントフローが、パケット処理スレッドの処理時間の大部分(またはすべて)を占める場合がある。加えて、重いフローが存在しない場合でも、多数の相対的に重いパケットフローまたは多数のフロー(ハッシュスキュー)が同じパケット処理スレッドにマッピングされたときに、パケット処理スレッドでオーバーサブスクリプションが発生することがある。パケット処理スレッドのオーバーサブスクリプションは、スレッドで未処理のキューが発生することにつながり、その結果、パケットが喪失する。一方、ネットワーク要素内の他のパケット処理スレッドには、パケットの処理に使用できる十分な計算サイクルがまだ存在している可能性がある。
パケット処理スレッドのオーバーサブスクリプションを防ぐために、前述の例で説明したように、第2のアプローチが実行される。この第2のアプローチでは、ネットワーク要素で受信されたパケットが、負荷バランシング技術に従ってパケット処理スレッドに分散される。このアプローチによれば、重いフローからのパケットであるかどうかにかかわらず、受信されたすべてのパケットに対して負荷バランシングが実行される。異なるパケット処理スレッドが各パケットを処理するのにかかる時間は異なる可能性があるため、パケットを出力する前に、フローのパケットの順序を変更することが必要になる場合がある。それによって、パケットが受信された順序と同じ順序でネットワーク要素によってパケットが転送されることを保証する。1つのアプローチによれば、ネットワーク要素の入り口で、シーケンス番号をパケットに割り当てることができる。パケットの処理後、ネットワーク要素からの出力前に、割り当てられたシーケンス番号を使用してパケットの順序を変更できる。パケットの処理後にパケットの順序が変更されることを保証するために、少なくとも1つの先行するパケットがまだ処理されていないすべてのパケットを、グローバルバッファ領域に格納する。したがって、パケット処理スレッドにおいて受信されて処理されたすべてのパケットは、パケットの順序を出力前に変更するために、グローバルバッファ領域内のキューに入れられる可能性がある。順序変更は、パケット処理スレッドを背景にして遂行されるインライン関数として実装するか、または別のスレッドとして実装することができ、後者の場合、すべてのパケット処理スレッドは、処理済みのパケットを順序変更スレッドのキューに追加する。この後者の例では、順序変更スレッドは、このキューのサービスを継続的に提供し、パケットをバッファ領域に追加するか、または先行するすべてのパケットがすでに処理済みになっている場合、パケットをネットワーク要素の外に伝送する。すべてのパケットに対して負荷バランシングが実行されるアプローチにおいて、すべてのフローに属しているパケットにはペナルティが課される。これは、それらすべてのパケットに対して負荷バランシングが実行され、ネットワーク要素によって出力される前にそれらのパケットの順序を変更することが必要になる可能性があるためである。このペナルティは、ごく少数のフロー(例えば重いフロー)に対してのみ負荷バランシングが必要になる場合でも適用可能であり、負荷バランシングへの再分類および順序変更を行わずにフローの大部分を伝送することができる。さらに、順序変更がインライン関数として実装される例では、関連するステージング領域(すなわち、バッファ領域)にアクセスするために、パケット処理スレッド間の全体的同期が必要になる。
パケット処理における適応負荷バランシング
高性能なパケット処理を実装するという課題を前提にすると、パケット処理ネットワーク要素内に適応負荷バランシングが存在することが望ましく、それによって効率的なパケットの転送が可能になり、必要な場合にのみパケットの順序変更を実行する。
図1に、本発明の一実施形態に従うパケットの適応負荷バランシングのためのネットワークデバイス内の操作を示す。ネットワークデバイスは、マッピングブロック110を含むように設定または適応されたネットワーク要素100、1つまたは複数のバケット120、負荷バランサー130、性能監視モジュール140、1つまたは複数のパケット処理スレッド150のセット、および順序変更ブロック160を含む。タスクボックス1〜7は、本発明の一実施形態に従って操作が実行される順序を示している。
タスクボックス1では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、マッピングブロック110に転送される。タスクボックス2で、マッピングブロック110がパケットをバケット120A〜Nのうちの1つにマッピングする。一実施形態では、バケット120A〜Nそれぞれが、パケット処理スレッド150A〜Bのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック110はパケットを、第1のパケット処理スレッド150Aに関連付けられたバケット120Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック110はパケットをバケット120Nにマッピングすることができ、次にバケット120Nが第2のパケット処理スレッド150Bに関連付けられる(図示されていない)。
タスクボックス3で、性能モニタ140が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。パケット処理スレッド150Aおよび150Bはそれぞれ、パケットを受信するための各キュー155A〜155Bを持っている。一部の実施形態によれば、バケット120それぞれが、パケット処理スレッドのキューに関連付けられ、処理するための受信パケットをこのキューに供給する。性能モニタ140は、各キューの状態を監視し、キューで未処理が発生したかどうかを決定する。
性能モニタ140が、パケット処理スレッド150Aまたは150Bそれぞれでオーバーサブスクリプションが発生したかどうかを決定した後に、バケットがタスクボックス4で、パケットをパケット処理スレッド150のうちの1つにマッピングするように設定される。バケット(例えばバケット120A)のパケットを、バケットに関連付けられたパケット処理スレッド(例えば、図1に示されているように、第1のパケット処理スレッド150A)にマッピングすることができる。あるいは、負荷バランシング方法に従ってパケット処理スレッド150のうちの1つにさらにマッピングされる前に、パケットを負荷バランサー130にマッピングすることができる。直接マッピング(バケット−関連付けられたスレッド間)または負荷バランシングマッピング(バケット−負荷バランサー−パケット処理スレッド間)の選択は、バケットに関連付けられたパケット処理スレッドの状態によって決定される。性能モニタ140が、パケット処理スレッドでオーバーサブスクリプションが発生したと決定した場合、タスクボックス5で、このスレッドに関連付けられたバケットのパケットが、負荷バランサー130において実装された方法に従って複数のパケット処理スレッドに分散される。性能モニタ140が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、このスレッドに関連付けられたバケットのパケットがこのパケット処理スレッドにマッピングされる(すなわち、直接マッピング)。
タスクボックス6で、各キュー155A〜155Bのパケットが対応するパケット処理スレッド150A〜150Bにおいて処理される。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、2つ以上のスレッドを1つのプロセッサコア上で実行することができる。各パケット処理スレッド150A〜Bは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス(NI)に出力されるか、または削除されるように、パケットを処理する。図1では2つのパケット処理スレッド150Aおよび150Bが示されているが、本発明の代替の実施形態は任意の数のパケット処理スレッドを有することができる。
タスクボックス7でパケットが、既定の順序に従って転送される(すなわち、削除されるか、または適切なNIに出力される)。この順序は、ネットワーク要素での受信時の他のパケットに対するパケットの位置に基づく。一実施形態に従って、フローのパケットは、既定の順序(「入口の順序」)で受信され、同じバケットにマッピングされ、同じパケット処理スレッドに直接マッピングされる。この実施形態では、パケットを、順序変更ブロック160で順序変更を行う必要なく、この同じ順序で出力することができる。これらの一部の実施形態では、順序変更ブロック160をスキップすることができ、パケットをパケット処理スレッドで処理した後に出力することができる。別の実施形態に従って、フローのパケットが入り口の順序で受信され、1つのパケット処理スレッドに直接マッピングされるのではなく複数のパケット処理スレッドを使用して、パケットに対して負荷バランシングが実行される。この処理は、例えば、関連するパケット処理スレッドでオーバーサブスクリプションが発生したと決定された場合に発生する。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。したがってパケットは、入り口の順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。
タスクボックス1〜7のタスクは連続的順序で説明されているが、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる(直接的なタスクボックス4または間接的なタスクボックス5)。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
パケット処理において適応負荷バランシングを実装するためのフロー図
本明細書において前述したように、ネットワーク要素は、パケット処理において適応負荷バランシングを実行するように設定または適応される。ネットワーク要素で受信されたフローのパケットは、関連するパケット処理スレッドにマッピングされる。あるいはパケットは、関連するパケット処理スレッドでオーバーサブスクリプションが発生し、そのキューで未処理が発生したときに、複数のパケット処理スレッドに分散される。フローのパケットは、関連するパケット処理スレッドの負荷における変化に応答して、パケット処理スレッドにマッピングされること、または複数のスレッド間の負荷バランシングが実行されることから動的にシフトすることができる。
パケット処理における適応負荷バランシングを実装するネットワーク要素の操作は、図2および図3のフロー図を参照して説明される。ただし、パケット処理モジュール100の操作は、図2および図3のフロー図を参照して説明される処理以外の処理を実行することができ、図2または図3のフロー図を参照して説明される実施形態は、図1を参照して説明された実施形態以外の本発明の実施形態によって実行できるということが理解されるべきである。
図2〜3は、本発明の一実施形態に従ってネットワークデバイス内で適応負荷バランシングを実行するための操作のフロー図を示している。ブロック202では、パケットは、ネットワークデバイスに実装されたネットワーク要素で受信される。一部の実施形態では、パケットはネットワークインターフェイス(NI)で受信され、マッピングブロック110に転送される。次にフローはブロック204に進む。
ブロック204で、マッピングブロック110がパケットをバケット120A〜Nのうちの1つにマッピングする。一実施形態では、バケット120A〜Nそれぞれが、パケット処理スレッド150A〜Bのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック110はパケットを、第1のパケット処理スレッド150Aに関連付けられたバケット120Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック110はパケットをバケット120Nにマッピングすることができ、次にバケット120Nが第2のパケット処理スレッド150Bに関連付けられる(図示されていない)。一実施形態では、マッピングはハッシュメカニズムに従って実行され、バケットはハッシュバケットである。例えば、パケットのIPヘッダーからの情報(送信先アドレス、送信元アドレス、ポート番号など)をハッシュテーブル内のインデックスとして使用して、パケットをマッピングするためのバケット識別情報を取り出すことができる。
フローは、特定のビットパターンに一致するヘッダーを持つ一連のパケットとして規定することができ、その意味で、従来のIP転送もフローに基づく転送であり、そのフローは、例えば送信先IPアドレスによって規定される。ただし、他の実装では、フローの規定に使用される特定のビットパターンは、パケットヘッダーにさらに多くの(例えば10以上の)フィールドを含むことができる。一実施形態に従って、フローのパケットは同じバケットにマッピングされる。さらに、1つまたは複数のフローを同じバケットにマッピングすることができる。
ブロック206で、性能モニタ140が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。図1に示されているように、パケット処理スレッド150Aおよび150Bはそれぞれ、処理されるパケットを受信するための各キュー155A〜155Bを持っている。一部の実施形態によれば、バケット120それぞれが、パケット処理スレッドのキューに関連付けられ、パケットをこのキューに供給する。性能モニタ140は、各キューの状態を監視し、キューで未処理が発生したかどうかを決定するように設定される。一部の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ140は特定の瞬間に関連するキューの長さを測定し、キューの長さが既定のしきい値を超えているかどうかを決定する。代替の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ140は関連するキューの指数関数的加重移動平均(EWMA)キュー長を決定する。EWMA平均キュー長は、既定の期間にわたる平均キュー長の値を提供し、性能モニタ140が、パケットの短いバースト以外は正常な挙動のフローにおいて、パケットの短いバーストを考慮したり無視したりできるようにする。性能モニタ140は、EWMAキュー長が既定のしきい値を超えたかどうかを決定し、対応するキューで未処理が発生してパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。
ブロック206で性能モニタ140が、パケット処理スレッド150Aまたは150Bでオーバーサブスクリプションが発生したと決定した場合、フローは操作214に進む。あるいは、ブロック206で性能モニタ140が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、フローは操作208に進む。一部の実施形態では、キュー155A〜155Bの監視が定期的に実行され、キューの不正な挙動(例えば、EWMAキュー長が既定のしきい値を超えた)が決定されたときに、フローは必ずブロック214に進む。
ブロック208で、パケット処理スレッドに関連付けられたバケットに含まれるパケットが、対応するスレッドにマッピングされる。本発明の一実施形態では、キュー155Aの状態の監視時に、性能モニタ140が、パケット処理スレッド150Aでオーバーサブスクリプションが発生していないと決定する。バケット120Aにマッピングされたパケットは、次に、それらのバケットに対応するパケット処理スレッド150Aに直接マッピングされ、対応するキュー155Aに追加される。次に、フローはブロック208からブロック210に進み、ブロック210でキューのパケットが、パケット処理スレッドにおいて処理される。
一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、2つ以上のスレッドを1つのプロセッサコア上で実行することができる。パケット処理スレッド150A〜Bは、転送テーブル内のエントリに基づき、一致する転送テーブルのエントリにおいて識別された一連の動作をパケットに対して実行することによって、転送の決定を行い、パケットに対する動作を実行するように設定される。転送テーブルのエントリは、パケット分類操作(図1に示されていない)の間に識別することができる。転送テーブルのエントリは、特定の一致基準のセット(パケットヘッダー内の特定のフィールドに関して、または他のパケットの内容に関して照合機能によって規定される、値またはワイルドカードのセット、あるいは特定の値/ワイルドカードと比較する必要のあるパケットのどの部分かの指示)、および一致するパケットの受信時に実行するための、データプレーンに対する1つまたは複数の動作のセットの両方を含む。例えば動作は、特定のポートを使用するパケットに関してヘッダーをパケットにプッシュすること、パケットをデータで満たすこと、または単にパケットを削除することであることができる。したがって、特定の伝送制御プロトコル(TCP)送信先ポートを使用するIPv4/IPv6パケットの場合の転送テーブルのエントリは、それらのパケットを削除する必要があることを指定する動作を含むことができる。
パケット処理スレッド150は、品質サービス機能(例えば、トラフィック分類マーキング、トラフィックの調整およびスケジューリング)、セキュリティ機能(例えば、加入者宅内機器をネットワークからの攻撃から保護し、不正な形式のルートの通知を防ぐためのフィルタ)、および管理機能(例えば、完全な検出および処理)などの転送機能を含むようにさらに設定または適応することができる。一実施形態では、パケット処理スレッド150は、必要なカプセル化の変更を行ってパケットを転送することができる。例えば、IPルータ機能を実装するネットワーク要素のパケット処理スレッドは、IPパケット内のIPヘッダー情報の一部に基づいて、IPパケットに対する転送、変更、削除、遅延、またはその他の処理を実行することができ、IPヘッダー情報は、送信元IPアドレス、送信先IPアドレス、送信元ポート、送信先ポート(「送信元ポート」および「送信先ポート」は、NDの物理ポートとは対照的に、本明細書ではプロトコルポートを指す)、トランスポートプロトコル(例えば、ユーザデータグラムプロトコル(UDP)(インターネットエンジニアリングタスクフォース(IETF)リクエストフォーコメンツ(RFC)768、2460、2675、4113、および5405)、伝送制御プロトコル(TCP)(IETF RFC 793および1180)、および差別化サービス(DSCP)の値(IETF RFC 2474、2475、2597、2983、3086、3140、3246、3247、3260、4594、5865、3289、3290、および3317))を含む。上の実施形態は、2つのパケット処理スレッド150Aおよび150Bに関して説明されたが、代替の実施形態は任意の数のパケット処理スレッドを有することができる。
次に、フローは操作210から212に進む。ブロック212で、パケット処理スレッドにおけるパケットの処理の後に、(先行する操作で行われた転送の決定がパケットの削除ではなかった場合)既定の順序に従ってパケットが転送される。再び操作204を参照すると、一実施形態に従って、1つのフローのパケットが同じバケット(例えばバケット120A)にマッピングされる。この実施形態によれば、バケット120Aに関連付けられたパケット処理スレッド150Aでオーバーサブスクリプションが発生していないと決定された場合、バケット120Aにマッピングされたパケットは、キュー155Aに追加され、ネットワーク要素でパケットが受信された順序(すなわち、入り口の順序)で処理され、したがって同じ順序で出力されることが可能である。代替の実施形態によれば、複数のフローからのパケットが同じバケット120Aにマッピングされる。この代替の実施形態では、バケット120Aに関連付けられたパケット処理スレッド150Aでオーバーサブスクリプションが発生していないと決定され、各フローのパケットがキュー155Aにマッピングされる。次にパケットは、入り口の順序で処理され、したがって同じ順序で出力される。
すぐ上で説明された実施形態では、フローのパケットはネットワーク要素で受信された順序と同じ順序で処理され、パケットを出力する前のパケットの順序変更は不要である。出力の順序は、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置によって規定される。あるいは、出力の順序は、ネットワーク要素におけるパケットの受信時の同じバケットにマッピングされた複数のフローの他のパケットに対するパケットの位置によって規定される。したがって、処理済みのフローを入り口の順序に従って出力する必要性は、パケット処理スレッドのキューで未処理が発生していない場合、パケットの効率的な転送を行いながら、ネットワーク要素によって満たされる。
再び操作206を参照すると、性能モニタ140が、パケット処理スレッド(例えばパケット処理スレッド150B)でオーバーサブスクリプションが発生していないと決定した場合、フローはブロック206からブロック214に進む。図3は、本発明の一実施形態に従って、パケット処理スレッドでオーバーサブスクリプションが発生していると決定された場合にネットワーク要素内で実行される詳細な操作を示している。ブロック302で、性能モニタ140は、オーバーサブスクリプションが発生したスレッドに関連付けられたバケットの状態を評価して、このバケットがオーバーサブスクリプションの原因であるかどうかを決定する。例えば、性能モニタ140は、バケットの状態が既定のしきい値よりも高いかどうかを決定することができる。バケットのカウンタ値に基づいてバケットの状態を評価することができ、このカウンタ値は、バケット内のパケットの数および/またはバケットのパケットレートの指数関数的加重移動平均(EWMA)値を示す。一例を挙げると、パケットカウンタおよび/またはEWMAパケットインクリメントがバケットごとに維持される。EWMAパケットインクリメントは、周期的な時間間隔で受信される差分パケットのサンプリングによって決定できる。EWMAパケットインクリメントは、最近ハッシュバケットにマッピングされたパケットの数を示す。パケット処理スレッドでオーバーサブスクリプションが発生したと決定されたときに、性能モニタ140はオーバーサブスクリプションが発生したスレッドにマッピングされた各バケットの状態を評価できる。
一実施形態では、1つのバケットが、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられる。この実施形態では、キューで未処理が発生したと決定されたときに、フローはブロック304に進む。別の実施形態では、複数のバケットが、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられ、性能モニタ140が、既定のしきい値を超えた状態にあるバケット(または、複数のバケットがオーバーサブスクリプションを引き起こしている場合は複数のバケット)を決定する。例えば、既定のしきい値よりも高い値のEWMAパケットインクリメントを持つバケットは、それに比例して高いトラフィックをパケット処理スレッドに最近送信しており、負荷バランシングが実行される必要がある。バケット120は、重いフロー(例えばエレファントフロー)がバケットにマッピングされた場合、またはマッピング方法(マッピングブロック110においてインクリメントされる)が同じバケットへの多数のフローのマッピング(ハッシュスキュー)につながる場合、パケット処理スレッドのオーバーサブスクリプションを引き起こす可能性がある。
ブロック304で、パケット処理スレッドのオーバーサブスクリプションを引き起こすと決定されたバケットごとに負荷バランシングフラグがセットされる。一実施形態では、図1に示されているように、1つのバケットがオーバーサブスクリプションの原因である場合があり、したがって、バケット120Nの負荷バランシングフラグがセットされるが、バケット120A、120B、および210Cの負荷バランシングフラグは設定されない(すなわち、クリアされている)。別の実施形態では、複数のバケットがオーバーサブスクリプションの原因である場合があり(図示されていない)、それらのバケットの各負荷バランシングフラグがセットされる。すべての実施形態では、オーバーサブスクリプションを引き起こしていないバケットの負荷バランシングフラグがクリアされる。加えて、バケットの負荷バランシングフラグがセットされた場合、このフラグは、このバケットに対して負荷バランシングを実行する必要があることを示している。一実施形態では、負荷バランシングが実行されるバケットの状態が定期的に監視され、状態が既定のしきい値を下回ったときに負荷バランシングフラグがクリアされ、対応するバケットが操作の直接マッピングモードにシフトし、このモードでは、負荷バランシングが実行されずに、フローが関連するパケット処理スレッドに直接マッピングされる。一部の実施形態では、関連するパケット処理スレッドでオーバーサブスクリプションが発生しなくなったと決定された場合、バケットの負荷バランシングフラグがクリアされる。性能モニタ140は、スレッドのキューで未処理が発生しなくなったと決定されたときに、関連するバケットの負荷バランシングフラグのクリアを引き起こすことができる。フローはブロック304からブロック306に進む。
図2のブロック206に戻ると、代替の実施形態では、パケット処理スレッドのオーバーサブスクリプションの決定時に、ブロック302および/または304をスキップすることができ、ブロックの206の実行後にブロック306が直接実行される。
これらの実施形態に従って、バケットの状態が、フローのパケットが同じパケット処理スレッドにマッピングされる第1のモード(「直接マッピング」)から、フローのパケットが複数のパケット処理スレッドに分散される第2のモード(「負荷バランシング」)に動的にシフトされる。第1のモードから第2のモードへのバケットのシフトは、このバケットに関連付けられたパケット処理スレッドのキューで未処理が発生したかどうかの決定に基づく。さらに、第2のモードから第1のモードへのバケットのシフトは、バケットの状態および/またはこのバケットに関連するスレッドのキューの状態に基づくことができる。スレッドのキューおよび/またはバケットの状態の定期的な監視は、バケットを適切なモードに動的にセットすることを可能にし、それによってパケットの転送を効率的に実行しながら、必要とされない場合にフローに対して負荷バランシングを実行しないようにする。スレッドのキューの定期的な監視は、適切なモード(すなわち、直接マッピングまたは負荷バランシング)に従って、パケット処理スレッドへのフローのパケットの動的な分散を可能にし、それによってネットワーク要素内でパケットを効率的に処理しながら、必要とされない場合にフローの負荷バランシングおよびパケットの順序変更を実行しないようにする。
ブロック306で、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられたバケットに含まれるパケットが、負荷バランサー130に転送される。例えば、パケット処理スレッド150Bでオーバーサブスクリプションが発生したことが性能モニタ140によって決定されたときに、バケット120Nのパケットが負荷バランサー130に転送される。その後、パケットは、負荷バランシングメカニズムに従って、処理するために複数のパケット処理スレッド150に分散される。
一実施形態では、パケットはすべてのパケット処理スレッド(例えば150Aおよび150B)に分散される。あるいは、パケットはパケット処理スレッド150のサブセットに分散される。例えば、スレッド150Bでオーバーサブスクリプションが発生したと決定された場合、オーバーサブスクリプションが発生したスレッド150Bを除くすべてのパケット処理スレッドにパケットを分散するように、負荷バランサーを設定することができる。バケットのパケットの負荷バランシングは、ラウンドロビンメカニズム、ランダム分散メカニズム、またはその他の要因(例えば、経験則、現在のワークロード、パケット処理スレッドでのキューの長さなど)を考慮できる別の分散メカニズムに従って実行できる。一実施形態によれば、1つのフローのパケットがバケットに含まれ、複数のパケット処理スレッドに分散される。別の実施形態では、複数のフローのパケットがバケットに含まれ、複数のパケット処理スレッドに分散される。次に、フローはブロック308に進む。
ブロック308で、パケットが、割り当てられたパケット処理スレッドで処理される。ブロック308でのパケット処理スレッドにおけるパケットの処理は、ブロック210で実行される処理と同様であることができる。次に、フローはブロック310に進む。
ブロック310で、既定の順序に従ってパケットが転送される(例えばパケットは、削除されない限り適切なNIを介して出力される)。既定の順序は、ネットワーク要素における受信時の他のパケットに対するパケットの位置に基づく。一実施形態によれば、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置に従って、パケットが転送される。別の実施形態では、ネットワーク要素におけるパケットの受信時の複数のフローの他のパケットに対するパケットの位置に従って、パケットが転送される。パケットの処理にかかる時間は、スレッドごとに変わる場合がある。したがって、パケットの入り口の順序に従ってパケットが転送されることを保証するために、ネットワーク要素からパケットが出力される前に、パケットの順序変更が必要になる場合がある。順序変更ブロック160は、複数のパケット処理スレッドにおいて処理されたパケットを受信し、パケットを転送する前に、フロー(またはアグリゲートフロー)のパケットの順序変更を実行する。受信されたパケットごとに、順序変更ブロック160は、パケットを出力する前に、ネットワーク要素でそれまでに受信されたすべてのパケットが回収された(削除された、または適切なネットワークインターフェイスに出力された)かどうかを決定する。複数のメカニズムを使用して、順序変更ブロック160を実装することができる。一部の実施形態に従って、割り当てられたシーケンス番号に従ってパケットの順序を変更できる。シーケンス番号は、パケットの受信時に、またはネットワーク要素におけるパケットの受信前に、ネットワーク要素内で割り当てることができる。例えば、シーケンス番号は、パケットのメタデータの一部であることができる。図4、図5、および図6を参照して説明される実施形態は、ネットワーク要素内で負荷バランシング実行済みパケットの順序変更を実行するための実施形態例を示す。
パケットの順序付けおよび順序変更
図4は、本発明の一実施形態に従う、パケット処理における適応負荷バランシングのためのネットワークデバイス内の操作を示している。図4は、図1に類似する要素およびタスクボックスを含む。同じまたは類似する参照は、同じまたは類似する機能を持っている要素またはコンポーネントを示している。図1を参照して説明されたモジュールに加えて、ネットワーク要素400がシーケンス割り当て410を含むようにさらに設定される。タスクボックス1〜8は、本発明の一実施形態に従って操作が実行される順序を示している。
タスクボックス1では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て410に転送される。タスクボックス2.aで、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック160で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる番号が割り当てられるようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー(例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど)のパケットに、同じシーケンスの異なる番号が割り当てられるようにする。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
タスクボックス2.bで、マッピングブロック110が、例えばハッシュメカニズムに従って、パケットをバケット120A〜Nのうちの1つにマッピングする。一実施形態では、バケット120A〜Nそれぞれが、パケット処理スレッド150A〜Bのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック110はパケットを、第1のパケット処理スレッド150Aに関連付けられたバケット120Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック110はパケットをバケット120Nにマッピングすることができ、次にバケット120Nが第2のパケット処理スレッド150Bに関連付けられる(図示されていない)。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック110を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造(またはキー)の構築に使用される(例えば、第1のキーフィールドを送信元媒体アクセス制御(MAC)アドレスにすることができ、第2のキーフィールドを送信先MACアドレスにすることができる)。
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のどのエントリ(転送テーブルエントリまたはフローエントリとも呼ばれる)かを決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応/一致することができ、その場合、システムは、規定された方式(例えば、一致する最初の転送テーブルエントリを選択する)に従って、多くの転送テーブルエントリから1つの転送テーブルエントリを決定するように通常は設定される。
タスクボックス3.aで、性能モニタ140が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。性能モニタ140は、各キューの状態を追跡し、キューで未処理が発生したかどうかを決定する。タスクボックス3.bで、性能モニタ140が、各バケットの状態を追跡するようにさらに設定または適応される。バケットの状態は、最近バケットにマッピングされたパケットの数を示す。キューのオーバーサブスクリプションの決定時に、性能モニタ140は、キューのオーバーサブスクリプションを引き起こすと決定されたバケットごとに、タスクボックス3.cでバケットの状態を評価し、負荷バランシングフラグをセットする。
性能監視140が、パケット処理スレッド150Aまたは150Bそれぞれでオーバーサブスクリプションが発生したかどうかを決定した後に、バケットがタスクボックス4で、パケットをパケット処理スレッド150のうちの1つにマッピングするように設定または適応される。バケット(例えばバケット120A)のパケットを、バケットに関連付けられたパケット処理スレッド(例えば、図1に示されているように、第1のパケット処理スレッド150A)にマッピングすることができる。あるいは、負荷バランシング方法に従ってパケット処理スレッド150のうちの1つにさらにマッピングされる前に、パケットを負荷バランサー130にマッピングすることができる。直接マッピング(バケット−関連付けられたスレッド間)または負荷バランシングマッピング(バケット−負荷バランサー−パケット処理スレッド間)の選択は、バケットに関連付けられたパケット処理スレッドの状態によって決定される。性能モニタ140が、パケット処理スレッドでオーバーサブスクリプションが発生したと決定した場合、このスレッドに関連付けられたバケットのパケットが、負荷バランサー130に実装された方法に従って複数のパケット処理スレッドに分散される。性能モニタ140が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、このスレッドに関連付けられたバケットのパケットがこのパケット処理スレッドにマッピングされる(すなわち、直接マッピング)。別の実施形態によれば、直接マッピングと負荷バランシングマッピングの間の選択が、バケットの状態および負荷バランシングフラグに基づいてさらに決定される。バケットの負荷バランシングフラグがセットされた場合、このバケットのパケットが、複数のパケット処理スレッドに分散するために負荷バランサー130に伝送される。バケットの負荷バランシングフラグがクリアされているか、またはセットされていない場合、パケットは関連するパケット処理スレッドに直接マッピングされる。
タスクボックス6で、各キュー155A〜155Bのパケットが対応するパケット処理スレッド150A〜150Bにおいて処理される。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、2つ以上のスレッドを1つのプロセッサコア上で実行することができる。各パケット処理スレッド150A〜Bは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス(NI)に出力されるか、または削除されるように、パケットを処理する。図1では2つのパケット処理スレッド150Aおよび150Bが示されているが、本発明の代替の実施形態は任意の数のパケット処理スレッドを有することができる。
タスクボックス7.aで、処理済みのパケットの受信時に、順序変更ブロック160が、このパケットを転送する前に、受信されたパケットに先行するパケットがすでに転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック160をスキップすることができ、パケットを、順序変更することなく、パケット処理スレッドで処理した後に出力することができる。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、タスク2.aで割り当てられたシーケンス番号に従って処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。タスクボックス8で、パケットが入り口の順序で出力される。
タスクボックス1〜8のタスクが連続的順序で説明されていても、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる(直接的なタスクボックス4または間接的なタスクボックス5)。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
図5および図6のフロー図の操作は、図4の実施形態例を参照して説明される。ただし、図4を参照して説明された実施形態以外の本発明の実施形態によってこれらのフロー図の操作を実行することができ、図4を参照して説明された本発明の実施形態は図5または図6のフロー図を参照して説明された処理とは異なる処理を実行できるということが理解されるべきである。
図5は、パケット処理スレッドがバケットにマッピングされた場合にネットワーク要素内で実行される詳細な操作を示している。ブロック502で、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、フローのパケットの順序を変更して、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック160で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる番号が割り当てられようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー(例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど)のパケットに、同じシーケンスの異なる番号が割り当てられるようにする。一実施形態では、ネットワーク要素で受信されたすべてのパケットに、単一の番号のグローバルプールからシーケンス番号が割り当てられる。言い換えると、ネットワーク要素で(1つまたは複数のポートを介して)受信された異なるフローからのすべてのパケットに、グローバルプールに従って番号が付けられる。別の実施形態では、個別のシーケンス番号のプールを使用できる。特定のプールから番号が割り当てられるように、複数のフローをグループ化できる。例えば、パケットは、入り口で基本的な分類が適用され、シーケンス番号プールのうちの1つにマッピングされることが可能である。その場合、プールを識別するために、パケットに関連付けられたメタデータに、プール識別情報(プールID)を付与することができる。割り当てられたシーケンス番号およびプールIDは、フローのパケットの順序を変更し、パケットに割り当てられたプールに関して、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック160で使用される。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
ブロック504で、マッピングブロック110が、例えばハッシュメカニズムに従って、パケットをバケット120A〜Nのうちの1つにマッピングする。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック110を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造(またはキー)の構築に使用される(例えば、第1のキーフィールドを送信元媒体アクセス制御(MAC)アドレスにすることができ、第2のキーフィールドを送信先MACアドレスにすることができる)。
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のエントリ(転送テーブルエントリまたはフローエントリとも呼ばれる)を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応/一致することができ、その場合、システムは、規定された方式(例えば、一致する最初の転送テーブルエントリを選択する)に従って、多くの転送テーブルエントリから1つの転送テーブルエントリを決定するように通常は設定される。
図4に示された実施形態では、バケット120A〜Nそれぞれが、パケット処理スレッド150A〜Bのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック110はパケットを、第1のパケット処理スレッド150Aに関連付けられたバケット120Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック110はパケットをバケット120Nにマッピングすることができ、次にバケット120Nが第2のパケット処理スレッド150Bに関連付けられる(図示されていない)。マッピングブロック110はパケットヘッダーを構文解析し、ハッシュテーブル検索を実行して、パケットをバケット(本明細書では「ハッシュバケット」と呼ばれる)にマッピングする。ハッシュバケットは、パケットを処理するパケット処理スレッドを提供する。一例を挙げると、マッピングは、(N x 合計スレッド数)個のエントリを含むハッシュテーブルを介して発生し、N個のバケットがパケット処理スレッドに関連付けられることができるようにする。数値Nは、妥当な大きさの値(例えば16または32)にセットできる。ハッシュテーブルは、1つのパケット処理スレッド150にマッピングするN個の複数のエントリを含む。1つのパケット処理スレッド当たり複数のバケットを使用することで、このスレッドにマッピングされた一連のフローを、より小さいサブセット(すなわち、バケット)に分解することが可能になる。
各ハッシュバケットは、バケットの操作モードを決定する負荷バランシングフラグを持つように設定または適応される。一実施形態では、負荷バランシングフラグがクリアされているか、またはセットされていない場合、バケットのパケットは、このバケットに関連付けられたパケット処理スレッドに直接マッピングされる。これに対して、負荷バランシングフラグがセットされた場合、バケットのパケットが、複数のパケット処理スレッド150に分散されるように、負荷バランサー130にマッピングされる。一部の実施形態では、バケット120の負荷バランシングフラグがデフォルトでクリアされる。バケットに関連付けられたパケット処理スレッドのオーバーサブスクリプションの検出に応答して、負荷バランシングフラグが第1の状態(すなわち、直接マッピング状態)から第2の状態(すなわち、負荷バランシング状態)に切り替えられる。パケット処理スレッドでオーバーサブスクリプションが発生していないことの検出に応答して、負荷バランシングフラグが第2の状態(負荷バランシング状態)から第1の状態(直接マッピング)にさらに切り替えられる。パケット処理スレッドのキューの定期的な監視は、バケットを適切なモードに動的にセットすることを可能にし、それによってパケットの転送を効率的に実行しながら、必要とされない場合にフローに対して負荷バランシングを実行しないようにする。一部の実施形態では、ハッシュバケットにマッピングされるすべてのパケットに関して、バケットの負荷バランシングフラグがメタヘッダーにコピーされる。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかの指示を含む。
一部の実施形態に従って、パケット処理スレッドの状態を決定するために、性能モニタ140は特定の瞬間に関連するキューの長さを測定し、キューの長さが既定のしきい値を超えているかどうかを決定する。代替の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ140は関連するキューの指数関数的加重移動平均(EWMA)キュー長を決定する。EWMA平均キュー長は、既定の期間にわたる平均キュー長の値を提供し、性能モニタ140が、パケットの短いバースト以外は正常な挙動のフローにおいて、パケットの短いバーストを考慮したり無視したりできるようにする。性能モニタ140は、EWMAキュー長が既定のしきい値を超えたかどうかを決定し、対応するキューで未処理が発生してパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。
一実施形態に従って、ネットワーク要素で受信されたパケットの各フローが個別のハッシュバケットにマッピングされる(すなわち、ハッシュバケットの数は、ネットワーク要素で受信されるフローの数以上になる)。したがって、パケット処理スレッドの不正な動作およびオーバーサブスクリプションの原因であるフローの識別は、オーバーサブスクリプションを引き起こしているバケットの識別によって実行される。
一実施形態では、負荷バランシングが実行されたバケットにマッピングされたフローは、さまざまな順序で処理することができ、入り口の順序とは異なる順序でパケット処理スレッドによって出力することができる。したがって、負荷バランシングが実行されたフローのパケットは、ネットワーク要素から出力される前に、順序変更することが必要になる場合がある。これに対して、関連するパケット処理スレッドに直接マッピングされたフローは、処理されて入り口の順序に従って出力され、順序変更を必要としない。
図6は、パケットを順序変更するためにネットワーク要素内で実行される詳細な操作を示している。パケット処理スレッド150におけるパケットの処理の後に、それらのパケットは順序変更ブロック160に転送される。順序変更ブロック160は、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置に従って、パケットの順序変更を実行する。ブロック604で、フローのパケットの受信時に、順序変更ブロック160は、パケットに負荷バランシングフラグがセットされているかどうかを決定し、この負荷バランシングフラグは、パケットが、負荷バランシングが実行されたフローの一部であることを示す。負荷バランシングフラグがセットされている場合、ブロック606で順序変更ブロックは、受信されたパケットに先行する少なくとも1つのパケットがパケット処理スレッドによってまだ処理される、つまり、まだ処理を完了していないかどうかを決定する。言い換えると、順序変更ブロック160は、受信されたパケットに先行するすべてのパケットが転送されたかどうかを決定する。受信されたパケットに先行するすべてのパケットがすでに処理されて転送された場合、受信されたパケットは、ブロック612に示されているように、出力される。少なくとも1つのパケットがまだ処理される、つまり、まだ処理を完了していない場合、受信されたパケットは、それに先行するすべてのパケットが処理されるまで、ブロック608でバッファ領域に格納される。負荷バランシングフラグがセットされたパケットは、パケットが入った順序と同じ順序でネットワーク要素を出ることを保証するために、バッファリングされることが可能である。一部の実施形態では、順序変更はブロック502で割り当てられるシーケンス番号に基づく。例えば、ネットワーク要素の入り口で複数のパケットが受信され、1〜103からシーケンス番号が割り当てられる。この例では、複数のパケットのうちの少なくとも一部が、負荷バランシング手法に従ってパケット処理スレッドにマッピングされる。例えば、パケット103に対して負荷バランシングが実行され、このパケットの負荷バランシングフラグがセットされる。パケット処理スレッドにおけるパケット103の処理の後に、このパケットは順序変更ブロック106で受信される。順序変更ブロック160は、シーケンス番号1〜100を持つパケットを受信して出力しているが、パケット101および102を受信して出力していない場合がある。パケットの103の受信時に、順序変更ブロック160は、このパケットの負荷バランシングフラグがセットされているかどうかを(ブロック604で)決定し、このパケットに先行するすべてのパケット(パケット1〜102)が処理済みであるかどうかを決定する。パケット101および102がまだ処理されていないと決定されたときに、パケット103は、シーケンス番号101および102を持つ各パケットが受信されて出力されるか、または削除されてそれらのシーケンス番号が解放されるまで、(ブロック608で)バッファ領域に格納される。
ブロック604を再び参照すると、パケットの負荷バランシングフラグがセットされていないか、またはクリアされている(すなわち、パケットが、同じフローからのすべてのパケットと共に、関連するパケット処理スレッドに直接マッピングされ、このフローに対して負荷バランシングが実行されていない)と決定されたときに、ブロック612で順序変更せずにパケットが転送される。あるいは、一部の実施形態では、パケットが出力される前に、このパケットと同じシーケンス番号を持つトークンが作成され、ブロック610でバッファ領域に格納されることが可能であり、それとともに実際のパケットが(ブロック612で)出力される。例えば、1つのシーケンス番号のプールが、ネットワーク要素で受信された複数のフローに使用される。フローは、インターリーブ方式でネットワーク要素で受信できる。フローの第1のサブセット(例えば、パケットの少なくとも1つのフロー)は、第1のバケットにマッピングされ、フローの第2のサブセット(例えば、パケットの少なくとも1つのフロー)は、第2のバケットにマッピングされる。第2のバケットが負荷バランシングモードであるときに、第1のバケットは直接マッピングモードであることができる。この実施形態によれば、プールからのシーケンス番号を持つ一部のパケットが、それらのパケットが属しているフローの他のパケットに対して正しい順序で処理されている場合があり、第2のサブセットからのパケットが、それらのパケットに対して複数のパケット処理スレッドにわたる負荷バランシングが実行されているため、正しい順序で処理されない場合がある。したがって、第1のサブセットおよび第2のサブセットからのパケットは、(第1のサブセットおよび第2のサブセットからの)パケットがネットワーク要素に入ったときの互いに対する順序とは異なる互いに対してランダムな順序で、順序変更ブロックに到達する場合がある。しかしこの例では、順序変更モジュール160は、入り口の順序に従って、プールのシーケンス番号を使用してパケットを順序変更し、出力する。したがって、あるパケットに対して負荷バランシングが実行されない場合でも、順序変更モジュール160は、負荷バランシング実行済みパケットを順序変更しながら、負荷バランシングが実行されないパケットのシーケンス番号も考慮することが必要になる場合がある。この例では、トークンのシーケンス番号が、直接マッピングされたフローのパケットを考慮するために使用される。直接マッピングされたフローのパケットが出力されるが、それらのパケットのトークンは(ブロック610で)バッファ領域に格納され、同じプールからの負荷バランシング実行済みフローのパケットが正しい入り口の順序で出力されることを保証する。この特定の例では、第1のバケットのフローのパケットが直接出力され、各トークンをバッファ領域に格納することができ、第2のバケットのパケットはバッファ領域に格納される。
一部の実施形態では、ブロック502でパケットに、異なる番号のプールからシーケンス番号が割り当てられ、順序変更ブロック160においてパケットの順序を変更するときに、プールIDが考慮される。各パケットのメタヘッダー内にコピーされたプールIDが、順序変更中に使用される。同じプールIDを持つパケットに対する負荷バランシング実行済みパケットの順序が変更される。
開示される技術の実施形態は、適応パケット処理メカニズムを提供し、ネットワーク要素で受信されたフローごとに、パケットを転送するパケット処理スレッドの状態に応じて直接フローマッピングと負荷バランシングマッピングの間で選択することによって高性能なパケット処理を提供することを目標とする。開示される技術の実施形態は、フローの大部分が直接マッピング(フロー−スレッド間)に従って処理されることを可能にし、順序変更のコストを防ぐ。開示される技術の実施形態は、負荷バランシングが、必要な場合にのみ、フローに対して負荷バランシングを実行することをさらに可能にする。したがって、適応パケット処理は、必要な場合にのみパケットの順序を変更する。
図1〜6を参照して説明されたパケット処理における適応負荷バランシングの実施形態は、本明細書で詳細に説明されているように、ネットワーク要素(NE)内で実装することができる。具体的には、開示される技術の実施形態は、仮想ネットワーク要素(VNE)の転送仮想ネットワーク機能(転送VNF)において実装することができる。
本発明の実施形態を利用するSDNおよびNFV環境
図7Aは、本発明の一部の実施形態に従う、例のネットワーク内のネットワークデバイス(ND)間の接続およびNDの3つの実装例を示している。図7Aに、ND700A〜Hを示し、A−B間、B−C間、C−D間、D−E間、E−F間、F−G間、およびA−G間の線、ならびにHと、A、C、D、およびGそれぞれとの間の線によってこれらのNDの接続を示す。これらのNDは、物理デバイスであり、これらのND間の接続は、無線または有線にすることができる(多くの場合、リンクと呼ばれる)。ND700A、E、およびFから延びるその他の線は、これらのNDがネットワークの入り口ポイントおよび出口ポイントとして機能することを示している(したがって、これらのNDはエッジNDと呼ばれ、その他のNDはコアNDと呼ばれる場合がある)。
図7Aでは、NDの次の2つの実装例を示している。(1)カスタム特定用途向け集積回路(ASIC)および独自オペレーティングシステム(OS)を使用する専用ネットワークデバイス702、および(2)一般的に市販されている(COTS)プロセッサおよび標準OSを使用する汎用ネットワークデバイス704。
専用ネットワークデバイス702はネットワークハードウェア710を含み、ネットワークハードウェア710は、計算リソース712(通常は、1つまたは複数のプロセッサのセットを含む)、転送リソース714(通常は、1つまたは複数のASICおよび/またはネットワークプロセッサを含む)、および物理ネットワークインターフェイス(NI)716(物理ポートと呼ばれる場合もある)、ならびにネットワークソフトウェア720が格納された非一時的機械可読記憶媒体718を備える。物理NIはND内のハードウェアであり、物理NIを介して(例えば、無線ネットワークインターフェイスコントローラ(WNIC)を介して無線で、またはネットワークインターフェイスコントローラ(NIC)に接続された物理ポートにケーブルを差し込むことによって)、ND700A〜H間の接続によって示されたネットワーク接続などのネットワーク接続が行われる。操作中に、ネットワークソフトウェア720は、ネットワークハードウェア710によって実行され、1つまたは複数のネットワークソフトウェアインスタンス722のセットをインスタンス化することができる。各ネットワークソフトウェアインスタンス722およびこのネットワークソフトウェアインスタンスを実行するネットワークハードウェア710の部分(このネットワークソフトウェアインスタンス専用のハードウェアおよび/またはこのネットワークソフトウェアインスタンスによって、ネットワークソフトウェアインスタンス722のうちの他のインスタンスと一次的に共有されるハードウェアのタイムスライス)は、個別の仮想ネットワーク要素730A〜Rを形成する。各仮想ネットワーク要素(VNE)730A〜Rは、制御通信および設定モジュール732A〜R(ローカル制御モジュールまたは制御通信モジュールと呼ばれる場合もある)および転送テーブル734A〜Rを含み、特定の仮想ネットワーク要素(例えば730A)が制御通信および設定モジュール(例えば732A)、1つまたは複数の転送テーブル(例えば734A)のセット、および仮想ネットワーク要素(例えば730A)を遂行するネットワークハードウェア710の部分を含むようにする。
専用ネットワークデバイス702は、多くの場合、物理的にかつ/または論理的に次を含むと考えられる。(1)制御通信および設定モジュール732A〜Rを遂行する計算リソース712を備えるND制御プレーン724(制御プレーンと呼ばれる場合もある)、および(2)転送テーブル734A〜Rおよび物理NI716を利用する転送リソース714を備えるND転送プレーン726(転送プレーン、データプレーン、または媒体プレーンと呼ばれる場合もある)。例として、NDがルータである(または、ルーティング機能を実装する)場合、ND制御プレーン724(制御通信および設定モジュール732A〜Rを遂行する計算リソース712)は、通常はデータ(例えばパケット)がルーティングされる方法(例えば、データのネクストホップおよびそのデータ用の送信物理NI)を制御することに参加すること、およびこのルーティング情報を転送テーブル734A〜Rに格納することに責任を負い、ND転送プレーン726は、物理NI716でこのデータを受信すること、および転送テーブル734A〜Rに基づいてこのデータを物理NI716のうちの適切な物理NIから転送することに責任を負う。仮想ネットワーク要素730A〜Rは、図1〜6を参照して説明された本発明の実施形態を実装する適応パケット処理ソフトウェア(APP)748のインスタンス722A〜722Rを含むことができる。各インスタンス722Aは、パケット処理スレッドのキューの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス702で受信されたパケットを処理および転送するように設定される。
図7Bは、本発明の一部の実施形態に従って、専用ネットワークデバイス702を実装するための方法の例を示している。図7Bは、カード738(通常はホットプラグ可能)を含んでいる専用ネットワークデバイスを示している。一部の実施形態では、カード738は2種類(ND転送プレーン726(ラインカードと呼ばれる場合もある)として動作する1つまたは複数のカード、およびND制御プレーン724(制御カードと呼ばれる場合もある)を実装するように動作する1つまたは複数のカード)であるが、代替の実施形態は、機能を1つのカードに結合し、かつ/または追加のカードの種類(例えば、カードの1つの追加の種類はサービスカード、リソースカード、またはマルチアプリケーションカードと呼ばれる)を含むことができる。サービスカードは、特殊な処理(例えば、レイヤ4〜レイヤ7のサービス(例えば、ファイアウォール、インターネットプロトコルセキュリティ(IPsec)(RFC 4301および4309)、セキュアソケットレイヤ(SSL)/トランスポート層セキュリティ(TLS)、侵入検知システム(IDS)、ピアツーピア(P2P)、ボイスオーバーアイピー(VoIP)セッションボーダーコントローラ、モバイル無線ゲートウェイ(ゲートウェイ汎用パケット無線サービス(GPRS)サポートノード(GGSN)、エボルブドパケットコア(EPC)ゲートウェイ)))を提供できる。例として、サービスカードを使用して、IPsecトンネルを終端し、受付認証アルゴリズムおよび暗号化アルゴリズムを遂行することができる。これらのカードは、バックプレーン736として示された1つまたは複数の相互接続メカニズム(例えば、ラインカードを結合する第1のフルメッシュおよびすべてのカードを結合する第2のフルメッシュ)を使用して一緒に結合される。
図7Aに戻ると、汎用ネットワークデバイス704はハードウェア740を含み、ハードウェア740は1つまたは複数のプロセッサ742のセット(多くの場合、COTSプロセッサ)およびネットワークインターフェイスコントローラ744(NIC、ネットワークインターフェイスカードとも呼ばれる)(物理NI746を含んでいる)、ならびにソフトウェア750が格納されている非一時的機械可読記憶媒体748を備えている。操作中に、プロセッサ742はソフトウェア750を遂行してハイパーバイザ754(仮想マシンモニタ(VMM)と呼ばれる場合もある)およびハイパーバイザ754によって実行される1つまたは複数の仮想マシン762A〜Rをインスタンス化する(これらのインスタンスは、総称してソフトウェアインスタンス752と呼ばれる)。仮想マシンは、プログラムを物理的な非仮想マシン上で遂行されているかのように実行する物理マシンのソフトウェア実装である。アプリケーションは、「ベアメタル」ホスト電子デバイス上で実行されるのとは対照的に、そのアプリケーションが仮想マシン上で実行されていることを通常は知らないが、一部のシステムは、最適化の目的で、オペレーティングシステムまたはアプリケーションが仮想化の存在を知ることができる準仮想化を提供する。各仮想マシン762A〜R、およびこの仮想マシン(この仮想マシン専用のハードウェアおよび/またはこの仮想マシンによって仮想マシン762A〜Rのうちの他の仮想マシンと一次的に共有されるハードウェアのタイムスライス)を遂行するハードウェア740の部分は、個別の仮想ネットワーク要素760A〜Rを形成する。
仮想ネットワーク要素760A〜Rは、仮想ネットワーク要素730A〜Rに類似する機能を実行する。例えば、ハイパーバイザ754は、ネットワークハードウェア710のように見える仮想操作プラットフォームを仮想マシン762Aに提供することができ、仮想マシン762Aを使用して、制御通信および設定モジュール732Aおよび転送テーブル734Aに類似する機能を実装できる(ハードウェア740のこの仮想化は、ネットワーク機能仮想化(NFV)と呼ばれる場合もある)。したがって、NFVを使用して、多くのネットワーク機器の種類を業界標準の大容量のサーバハードウェア、物理スイッチ、および物理記憶装置の上で統合し、データセンター、ND、および加入者宅内機器(CPE)内に配置することができる。ただし、本発明の異なる実施形態は、仮想マシン762A〜Rのうちの1つまたは複数を異なって実装することができる。例えば、本発明の実施形態は、1つのVNE760A〜Rに対応する各仮想マシン762A〜Rを使用して説明されているが、代替の実施形態は、この対応をさらに細かい粒度で実装することができる(例えば、ラインカード仮想マシンがラインカードを仮想化し、制御カード仮想マシンが制御カードを仮想化するなど)。VNEに対する仮想マシンの対応を参照して本明細書に記載された手法は、そのようなさらに細かい粒度が使用される実施形態にも適用されると理解されるべきである。仮想ネットワーク要素760A〜Rは、図1〜6を参照して説明された本発明の実施形態を実装する適応パケット処理ソフトウェア(APP)750のインスタンス766A〜766Rを含むことができる。各インスタンス766Aは、パケット処理スレッドのキューの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス704で受信されたパケットを処理および転送するように設定される。
特定の実施形態では、ハイパーバイザ754は、物理イーサネットスイッチに類似する転送サービスを提供する仮想スイッチを含む。具体的には、この仮想スイッチは、仮想マシンとNIC744の間のトラフィック、および必要に応じて仮想マシン762A〜R間のトラフィックを転送する。加えて、この仮想スイッチは、互いに通信することがポリシーによって(例えば、仮想ローカルエリアネットワーク(VLAN)に従うことによって)許可されないVNE760A〜R間のネットワーク分離を強制することができる。
図7Aの第3のNDの実装例は、ハイブリッドネットワークデバイス706であり、カスタムASIC/独自OSとCOTSプロセッサ/標準OSの両方を1つのNDまたはND内の1つのカードに含んでいる。そのようなハイブリッドネットワークデバイスの特定の実施形態では、プラットフォームVM(すなわち、専用ネットワークデバイス702の機能を実装するVM)は、準仮想化をハイブリッドネットワークデバイス706内に存在するネットワークハードウェアに提供できる。
上のNDの実装例にかかわらず、NDによって実装された複数のVNEのうちの1つが考慮されている(例えば、複数のVNEのうちの1つのみが特定の仮想ネットワークの一部になる)場合、または1つのVNEのみがNDによって現在実装されている場合は、短縮された用語であるネットワーク要素(NE)がこのVNEを指すために使用される場合がある。また、上のすべての実装例において、各VNE(例えば、VNE730A〜R、VNE760A〜R、およびハイブリッドネットワークデバイス706内のVNE)は物理NI(例えば716、746)でデータを受信し、このデータを複数の物理NI(例えば716、746)のうちの適切な物理NIから転送する。例えば、IPルータ機能を実装するVNEが、IPパケット内のIPヘッダー情報の一部に基づいてIPパケットを転送する。このIPヘッダー情報は、送信元IPアドレス、送信先IPアドレス、送信元ポート、送信先ポート(本明細書では「送信元ポート」および「送信先ポート」は、NDの物理ポートとは対照的に、プロトコルポートを指す)、トランスポートプロトコル(例えば、ユーザデータグラムプロトコル(UDP)(RFC 768、2460、2675、4113、および5405))、伝送制御プロトコル(TCP)(RFC 793および1180)、および差別化サービス(DSCP)の値(RFC 2474、2475、2597、2983、3086、3140、3246、3247、3260、4594、5865、3289、3290、および3317)を含む。これらの一部の実施形態では、実際の転送機能(転送プレーン)は、APPI733A〜733RまたはAPPI766A〜766Rそれぞれによってインスタンス化された複数のパケット処理スレッドにおいて実行される。物理NRで受信されたデータは、図1〜6に関して説明された本発明の実施形態のうちの1つに基づいてパケット処理スレッドに分散される。
図7Cは、本発明の一部の実施形態に従って、VNEを結合できるさまざまな方法の例を示している。図7Cは、ND700A内に実装されたVNE770A.1〜770A.P(および、必要に応じてVNE770A.Q〜770A.R)およびND700H内に実装されたVNE770H.1を示している。図7Cでは、VNE770A.1〜Pは、ND700Aの外部からパケットを受信し、ND700Aの外部にパケットを転送できるという意味において、互いに分離している。VNE770A.1はVNE770H.1に結合され、したがって、これらのVNEはそれらの各ND間でパケットを通信する。VNE770A.2〜770A.3は、ND700Aの外部にパケットを転送することなく、必要に応じてパケットをVNE770A.2とVNE770A.3の間で転送することができる。VNE770A.Pは、必要に応じて、VNE770A.Rが後に続くVNE770A.Qを含んでいるVNEのチェーン内の最初のVNEであることができる(これは、動的サービスチェイニングと呼ばれる場合があり、このチェーンでは、一連のVNEにおける各VNEが異なるサービス(例えば、1つまたは複数のレイヤ4〜7のネットワークサービス)を提供する)。図7CはVNE間のさまざまな関係の例を示しているが、代替の実施形態が他の関係(例えば、より多い/より少ないVNE、より多い/より少ない動的サービスチェーン、一部の共通のVNEおよび一部の異なるVNEを含む複数の異なる動的サービスチェーン)をサポートできる。
例えば、図7AのNDは、インターネットの一部またはプライベートネットワークを形成することができる。その他の電子デバイス(図示されていないが、ワークステーション、ラップトップ、ネットブック、タブレット、パームトップ、携帯電話、スマートフォン、マルチメディアフォン、ボイスオーバーインターネットプロトコル(VOIP)電話、端末、ポータブルメディアプレイヤー、GPSユニット、ウェアラブルデバイス、ゲームシステム、セットトップボックス、インターネット対応家庭用器具を含むエンドユーザデバイスなど)は、ネットワークに(直接的に、またはアクセスネットワークなどの他のネットワークを介して)結合して、ネットワーク(例えば、インターネットまたはインターネット上にオーバーレイされた(例えばインターネットをトンネルする)仮想プライベートネットワーク(VPN))を経由して互いに(直接的に、またはサーバを介して)通信すること、ならびに/あるいはコンテンツおよび/またはサービスにアクセスすることができる。そのようなコンテンツおよび/またはサービスは、サービス/コンテンツプロバイダに属している1つまたは複数のサーバ(図示されていない)またはピアツーピア(P2P)サービスに参加している1つまたは複数のエンドユーザデバイス(図示されていない)によって通常は提供され、例えば、パブリックなWebページ(例えば、無料コンテンツ、ストアフロント、検索サービス)、プライベートなWebページ(例えば、電子メールサービスを提供する、ユーザ名/パスワードを使用してアクセスされるWebページ)、および/またはVPNを経由する企業ネットワークを含むことができる。例えば、エンドユーザデバイスを(例えばアクセスネットワークに(有線または無線で)結合された加入者宅内機器を介して)エッジNDに結合することができ、これらのエッジNDは、サーバとして機能する電子デバイスに結合された他のエッジNDに(例えば1つまたは複数のコアNDを介して)結合される。ただし、計算およびストレージの仮想化によって、図7A内のNDとして動作する電子デバイスのうちの1つまたは複数は、そのような1つまたは複数のサーバをホストすることもでき(例えば、汎用ネットワークデバイス704の場合は、仮想マシン762A〜Rのうちの1つまたは複数はサーバとして動作することができ、それと同じことがハイブリッドネットワークデバイス706にも当てはまり、専用ネットワークデバイス702の場合は、そのような1つまたは複数のサーバは計算リソース712によって実行されているハイパーバイザ上で実行することもできる)、その場合、サーバは、このNDのVNEと共に共同設置されたと言われる。
仮想ネットワークは、ネットワークサービス(例えば、L2および/またはL3サービス)を提供する物理ネットワーク(図7A内の物理ネットワークなど)の論理的抽象化である。仮想ネットワークは、オーバーレイネットワーク(ネットワーク仮想化オーバーレイと呼ばれる場合もある)として実装することができ、このオーバーレイネットワークは、アンダーレイネットワーク(例えば、オーバーレイネットワークを作成するためにトンネル(例えば、一般ルーティングのカプセル化(GRE)、レイヤ2トンネリングプロトコル(L2TP)、IPSec)を使用するインターネットプロトコル(IP)ネットワークなどのL3ネットワーク)上のネットワークサービス(例えば、レイヤ2(L2、データリンクレイヤ)サービスおよび/またはレイヤ3(L3、ネットワークレイヤ)サービス)を提供する。
ネットワーク仮想化エッジ(NVE)は、アンダーレイネットワークのエッジに存在し、ネットワーク仮想化の実装に参加する。NVEのネットワークの方を向いている側は、アンダーレイネットワークを使用して、他のNVEとの間でフレームをトンネルする。NVEの外部の方を向いている側は、ネットワークの外部のシステムとの間でデータを送信および受信する。仮想ネットワークインスタンス(VNI)は、NVE(例えば、ND上のNE/VNE、エミュレーションによってNE/VNEが複数のVNEに分割された場合は、ND上のNE/VNEの一部)上の仮想ネットワークの特定のインスタンスである。1つまたは複数のVNIは、NVE上で(例えば、ND上の異なるVNEとして)インスタンス化できる。仮想アクセスポイント(VAP)は、外部システムを仮想ネットワークに接続するための、NVE上の論理的接続ポイントである。VAPは、論理インターフェイス識別子(例えばVLAN ID)によって識別される物理ポートまたは仮想ポートにすることができる。
ネットワークサービスの例は、次を含む。1)イーサネットLANエミュレーションサービス(インターネットエンジニアリングタスクフォース(IETF)のマルチプロトコルラベルスイッチング(MPLS)に類似するイーサネットベースのマルチポイントサービスまたはイーサネットVPN(EVPN)サービス)。このサービスでは外部システムが、アンダーレイネットワークを経由し、LAN環境によってネットワーク上で相互接続される(例えば、NVEは、そのようなさまざまな仮想ネットワーク用の個別のL2 VNI(仮想スイッチングインスタンス)、およびアンダーレイネットワーク上のL3(例えばIP/MPLS)トンネリングカプセル化を提供する)。および(2)仮想化されたIP転送サービス(サービス定義の観点から、IETF IP VPN(例えばボーダーゲートウェイプロトコル(BGP)/MPLS IPVPN RFC 4364)に類似する)。このサービスでは、外部システムが、アンダーレイネットワークを経由し、L3環境によってネットワーク上で相互接続される(例えば、NVEは、そのようなさまざまな仮想ネットワーク用の個別のL3 VNI(転送インスタンスおよびルーティングインスタンス)、およびアンダーレイネットワーク上のL3(例えばIP/MPLS)トンネリングカプセル化を提供する)。ネットワークサービスは、品質サービス機能(例えば、トラフィック分類マーキング、トラフィックの調整およびスケジューリング)、セキュリティ機能(例えば、加入者宅内機器をネットワークからの攻撃から保護し、不正な形式のルートの通知を防ぐためのフィルタ)、および管理機能(例えば、完全な検出および処理)も含むことができる。
図7Dは、本発明の一部の実施形態に従って、図7Aの各ND上に1つのネットワーク要素を含むネットワークを示しており、この簡潔なアプローチにおいて、従来の分散アプローチ(従来のルータによって一般に使用される)と、到達可能性および転送情報を維持するための集中型アプローチ(ネットワーク制御とも呼ばれる)とを対比している。具体的には、図7Dは、図7AのND700A〜Hと同じ接続を持つネットワーク要素(NE)770A〜Hを示している。
図7Dは、分散アプローチ772が、到達可能性および転送情報を生成する責任をNE770A〜H間で分散していることを示している。言い換えると、隣接するNEの発見およびトポロジーの発見のプロセスが分散される。
例えば、専用ネットワークデバイス702が使用される場合、ND制御プレーン724の制御通信および設定モジュール732A〜Rは、ルートを交換するために他のNEと通信し、その後、1つまたは複数のルーティングメトリックに基づいてそれらのルートを選択する、1つまたは複数のルーティングプロトコル(例えば、ボーダーゲートウェイプロトコル(BGP)(RFC 4271)などの外部ゲートウェイプロトコル、内部ゲートウェイプロトコル(IGP)(例えば、オープンショーテストパスファースト(OSPF)(RFC 2328および5340)、中間システム間連携(IS−IS)(RFC 1142)、ルーティング情報プロトコル(RIP)(バージョン1 RFC 1058、バージョン2 RFC 2453、および次世代のRFC2080))、ラベル分散プロトコル(LDP)(RFC 5036)、リソース予約プロトコル(RSVP)(RFC 2205、2210、2211、2212、ならびにRSVPトラフィックエンジニアリング(TE):LSPトンネルRFC3209に関するRSVPに対する拡張、Generalized Multi−Protocol Label Switching(GMPLS)シグナリングRSVP−TE RFC 3473、RFC 3936、4495、および4458))を実装するための到達可能性および転送情報モジュールを通常は含む。したがって、NE 770A〜H(例えば、制御通信および設定モジュール732A〜Rを遂行する計算リソース712)は、分散的にネットワーク内の到達可能性を決定し、各転送情報を計算することによって、データ(例えばパケット)をルーティングする方法(例えば、データのネクストホップおよびそのデータ用の送信物理NI)を制御することに参加する責任を果たす。ルートおよび隣接性は、ND制御プレーン724上の1つまたは複数のルーティング構造(例えば、ルーティング情報ベース(RIB)、ラベル情報ベース(LIB)、1つまたは複数の隣接性構造)に格納される。ND制御プレーン724は、ルーティング構造に基づく情報(例えば、隣接性およびルート情報)を使用してND転送プレーン726をプログラムする。例えば、ND制御プレーン724は、隣接性およびルート情報を、ND転送プレーン726上の1つまたは複数の転送テーブル734A〜R(例えば、転送情報ベース(FIB)、ラベル転送情報ベース(LFIB)、および1つまたは複数の隣接性構造)にプログラムする。レイヤ2転送の場合、NDは、データ内のレイヤ2情報に基づいてそのデータを転送するのに使用される1つまたは複数のブリッジテーブルを格納できる。上の例は専用ネットワークデバイス702を使用しているが、同じ分散アプローチ772を、汎用ネットワークデバイス704およびハイブリッドネットワークデバイス706上に実装することができる。
図7Dは、トラフィックが送信される場所に関する決定を行うシステムを、トラフィックを選択された送信先に転送する下層のシステムから分離する集中型アプローチ774(ソフトウェア定義ネットワーキング(SDN)とも呼ばれる)を示している。示された集中型アプローチ774は、集中型制御プレーン776(SDN制御モジュール、コントローラ、ネットワークコントローラ、OpenFlowコントローラ、SDNコントローラ、制御プレーンノード、Network Virtualization Authority、または管理制御エンティティと呼ばれる場合もある)内の到達可能性および転送情報を生成する責任を持っており、したがって、隣接するNEの発見およびトポロジーの発見のプロセスが集中化される。集中型制御プレーン776は、NE770A〜H(スイッチ、転送要素、データプレーン要素、またはノードと呼ばれる場合もある)を含んでいるデータプレーン780(インフラストラクチャレイヤ、ネットワーク転送プレーン、または転送プレーン(ND転送プレーンと混同されるべきではない)と呼ばれる場合もある)とのサウスバウンドインターフェイス782を持っている。集中型制御プレーン776はネットワークコントローラ778を含み、ネットワークコントローラ778は、ネットワーク内の到達可能性を決定し、転送情報をサウスバウンドインターフェイス782(OpenFlowプロトコルを使用する場合がある)を経由してデータプレーン780のNE770A〜Hに分散する集中型到達可能性および転送情報モジュール779を含む。したがって、ネットワークのインテリジェンスは、NDから通常は分離した電子デバイス上で遂行される集中型制御プレーン776内に集中化される。
例えば、専用ネットワークデバイス702がデータプレーン780内で使用される場合、ND制御プレーン724の制御通信および設定モジュール732A〜Rはそれぞれ、サウスバウンドインターフェイス782のVNE側を提供する制御エージェントを通常は含む。その場合、ND制御プレーン724(制御通信および設定モジュール732A〜Rを遂行する計算リソース712)は、制御エージェントを介してデータ(例えばパケット)をルーティンする方法(例えば、データのネクストホップおよびそのデータ用の送信物理NI)を制御することに参加する責任を果たし、この制御エージェントは、転送情報(および、場合によっては到達可能性情報)を集中型到達可能性および転送情報モジュール779から受信するために集中型制御プレーン776と通信する(本発明の一部の実施形態では、制御通信および設定モジュール732A〜Rは、集中型制御プレーン776と通信することに加えて、分散アプローチの場合ほどではないが、到達可能性を決定することおよび/または転送情報を計算することにおける一部の役割を果たすこともできると理解されるべきであり、そのような実施形態は、集中型アプローチ774に分類されると一般に見なされるが、ハイブリッドアプローチであると見なすこともできる)。
上の例は専用ネットワークデバイス702を使用するが、同じ集中型アプローチ774を、汎用ネットワークデバイス704(例えば、各VNE760A〜Rは、転送情報(および、場合によっては到達可能性情報)を集中型到達可能性および転送情報モジュール779から受信するために集中型制御プレーン776と通信することによって、データ(例えばパケット)をルーティンする方法(例えば、データのネクストホップおよびそのデータ用の送信物理NI)を制御する責任を果たし、本発明の一部の実施形態では、VNE760A〜Rは、集中型制御プレーン776と通信することに加えて、分散アプローチの場合ほどではないが、到達可能性を決定することおよび/または転送情報を計算することにおける一部の役割を果たすこともできると理解されるべきである)およびハイブリッドネットワークデバイス706を使用して実装することができる。実際、SDN手法を使用すると、SDNソフトウェアを実行できるインフラストラクチャを提供することによって、NFVがSDNをサポートできるようになり、NFVとSDNの両方が商品サーバハードウェアおよび物理スイッチを利用することを目指すようになるため、汎用ネットワークデバイス704またはハイブリッドネットワークデバイス706の実装で通常は使用されるNFV手法を拡張することができる。加えて、パケット処理において適応負荷バランシングを有効にするために、図1〜6を参照して説明された本発明の実施形態を実装する専用ネットワークデバイス702または汎用ネットワークデバイス704を使用して、集中型アプローチ774を実装することができる。
図7Dは、集中型制御プレーン776が、アプリケーション788が存在するアプリケーションレイヤ786へのノースバウンドインターフェイス784を有していることも示している。集中型制御プレーン776は、アプリケーション788のための仮想ネットワーク792(論理転送プレーン、ネットワークサービス、またはオーバーレイネットワーク(データプレーン780のNE770A〜Hがアンダーレイネットワークになる)と呼ばれる場合もある)を形成することができる。したがって、集中型制御プレーン776は、すべてのNDの全体的視野を維持し、NE/VNEを設定し、仮想ネットワークを(ハードウェア(ND、リンク、またはNDのコンポーネント)の障害、追加、または除去によって物理ネットワークが変化したときに、これらのマッピングを維持することを含めて)下層のNDに効率的にマッピングする。
図7Dは、集中型アプローチ774から分離した分散アプローチ772を示しているが、本発明の特定の実施形態では、ネットワーク制御の負担を異なった方法で、またはこれら2つを組み合わせて分散することができる。例えば、(1)実施形態は、集中型アプローチ(SDN)774を一般に使用できるが、特定の機能がNEに委任される(例えば、分散アプローチを使用して、故障監視、性能監視、保護切り替え、および隣接するNEの発見および/またはトポロジーの発見のためのプリミティブのうちの1つまたは複数を実装するために使用できる)、または(2)本発明の実施形態は、集中型制御プレーンおよび分散プロトコルの両方を介して隣接するNEの発見およびトポロジーの発見を実行することができ、それらの結果が比較され、一致しない場合は例外を引き起こす。このような実施形態は、集中型アプローチ774に分類されると一般に見なされるが、ハイブリッドアプローチであると見なすこともできる。
図7Dは、ND700A〜Hがそれぞれ1つのNE770A〜Hを実装する単純なケースを示しているが、図7Dを参照して説明されたネットワーク制御アプローチは、ND700A〜Hのうちの1つまたは複数が複数のVNE(例えば、VNE730A〜R、VNE760A〜R、ハイブリッドネットワークデバイス706内のVNE)を実装するネットワークに対しても有効であると理解されるべきである。代わりに、または加えて、ネットワークコントローラ778は、1つのND内の複数のVNEの実装をエミュレートすることもできる。具体的には、1つのND内の複数のVNEを実装する代わりに(または、実装することに加えて)、ネットワークコントローラ778は、1つのND内のVNE/NEの実装を、仮想ネットワーク792内の複数のVNE(複数の仮想ネットワーク792のうちの同じ1つの仮想ネットワーク内のすべてのVNE、複数の仮想ネットワーク792のうちの異なる仮想ネットワーク内の各VNE、またはこれらの組合せ)として提示することができる。例えば、ネットワークコントローラ778は、NDに、アンダーレイネットワーク内の1つのVNE(NE)を実装させ、その後、集中型制御プレーン776内のこのNEのリソースを論理的に分割して、仮想ネットワーク792内の異なるVNEを提示する(オーバーレイネットワーク内のこれらの異なるVNEは、アンダーレイネットワーク内のND上の1つのVNE/NEの実装のリソースを共有する)。
一方、図7Eおよび7Fは、ネットワークコントローラ778が複数の仮想ネットワーク792のうちの異なる仮想ネットワークの一部として提示できるNEおよびVNEの抽象化の例をそれぞれ示している。図7Eは、本発明の一部の実施形態に従って、ND700A〜Hそれぞれが1つのNE770A〜H(図7Dを参照)を実装するが、集中型制御プレーン776が、異なるND内の複数のNE(NE770A〜CおよびG〜H)を、図7Dの仮想ネットワーク792のうちの1つに含まれる1つのNE770Iに(表現するために)抽象化した単純なケースを示している。図7Eは、この仮想ネットワーク内で、NE770IがNE770Dおよび770Fに結合され、NE770Dおよび770Fの両方がNE770Eにさらに結合されているのを示している。
図7Fは、本発明の一部の実施形態に従って、複数のVNE(VNE770A.1およびVNE770H.1)が異なるND(ND700AおよびND700H)上に実装されて互いに結合され、集中型制御プレーン776が、図7Dの仮想ネットワーク792のうちの1つに含まれる1つのVNE770Tとして現れるようにそれらの複数のVNEを抽象化したケースを示している。したがって、NEまたはVNEの抽象化は、複数のNDにわたることができる。
本発明の一部の実施形態は、集中型制御プレーン776を1つのエンティティ(例えば、1つの電子デバイス上で実行されるソフトウェアの1つのインスタンス)として実装するが、代替の実施形態は、冗長性および/またはスケーラビリティの目的で、機能を複数のエンティティ(例えば、異なる電子デバイス上で実行されるソフトウェアの複数のインスタンス)に分散することができる。
ネットワークデバイスの実装と同様に、集中型制御プレーン776、ならびに集中型到達可能性および転送情報モジュール779を含んでいるネットワークコントローラ778を実行する電子デバイスは、さまざまな方法(例えば、専用デバイス、汎用(例えばCOTS)デバイス、またはハイブリッドデバイス)で実装することができる。これらの電子デバイスは、計算リソース、セットまたは1つまたは複数の物理NIC、および集中型制御プレーンソフトウェアが格納されている非一時的機械可読記憶媒体を同様に含む。
OpenFlowなどの規格は、メッセージに使用されるプロトコル、およびパケットを処理するためのモデルを規定する。パケットを処理するためのモデルは、ヘッダーの構文解析、パケット分類、および転送の決定を含む。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造(またはキー)の構築に使用される(例えば、第1のキーフィールドを送信元媒体アクセス制御(MAC)アドレスにすることができ、第2のキーフィールドを送信先MACアドレスにすることができる)。
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のエントリ(転送テーブルエントリまたはフローエントリとも呼ばれる)を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応/一致することができ、その場合、システムは、規定された方式(例えば、一致する最初の転送テーブルエントリを選択する)に従って、多くの転送テーブルエントリから1つの転送テーブルエントリを決定するように通常は設定される。転送テーブルのエントリは、特定の一致基準のセット(パケットヘッダー内の特定のフィールドに関して、または他のパケットの内容に関して照合機能によって規定される、値またはワイルドカードのセット、あるいは特定の値/ワイルドカードと比較する必要のあるパケットのどの部分かの指示)、および一致するパケットの受信時に実行するための、データプレーンに対する1つまたは複数の動作のセットの両方を含む。例えば動作は、特定のポートを使用するパケットに関してヘッダーをパケットにプッシュすること、パケットをデータで満たすこと、または単にパケットを削除することであることができる。したがって、特定の伝送制御プロトコル(TCP)送信先ポートを使用するIPv4/IPv6パケットの場合の転送テーブルのエントリは、それらのパケットを削除する必要があることを指定する動作を含むことができる。
転送の決定および動作の実行は、パケット分類時に識別された転送テーブルエントリに基づき、一致する転送テーブルエントリにおいて識別された一連の動作をパケットに対して遂行することよって発生する。
ただし、未知のパケット(例えば、OpenFlowの用語で使用される「missed packet」または「match−miss」)がデータプレーン780に到着した場合、そのパケット(または、パケットヘッダーおよび内容のサブセット)は、集中型制御プレーン776に通常は転送される。その後、集中型制御プレーン776は、未知のパケットのフローに属するパケットに対応するように、転送テーブルエントリをデータプレーン780にプログラムする。特定の転送テーブルエントリが、集中型制御プレーン776によってデータプレーン780にプログラムされた後に、一致する認証情報を含んでいる次のパケットがこの転送テーブルエントリに一致し、この一致したエントリに関連付けられた一連の動作が実行される。
ネットワークインターフェイス(NI)は物理的または仮想的であることができ、IPにおいては、インターフェイスアドレスは、NIが物理NIであろうと仮想NIであろうと、NIに割り当てられたIPアドレスである。仮想NIは、物理NIに関連付けられるか、別の仮想インターフェイスに関連付けられるか、または独立することができる(例えば、ループバックインターフェイス、ポイントツーポイントプロトコルインターフェイス)。NI(物理または仮想)には、番号を付けるか(IPアドレスを持つNI)、または番号を付けない(IPアドレスを持たないNI)ことができる。ループバックインターフェイス(およびそのループバックアドレス)は、多くの場合は管理目的に使用される、NE/VNE(物理または仮想)の仮想NI(およびIPアドレス)の特定の種類であり、そのようなIPアドレスはノードループバックアドレスと呼ばれる。NDのNIに割り当てられたIPアドレスは、そのNDのIPアドレスと見なされ、さらに細かい粒度では、ND上に実装されたNE/VNEに割り当てられたNIに割り当てられたIPアドレスは、そのNE/VNEのIPアドレスと見なされる。
特定の送信先に関するルーティングシステムによるネクストホップの選択は、1つの経路に解決することができる(つまり、ルーティングプロトコルは最短経路上の1つのネクストホップを生成することができる)が、ルーティングシステムは、実行可能な複数のネクストホップが存在することを決定し(つまり、ルーティングプロトコルによって生成された転送の解が、最短経路上の複数のネクストホップ(複数のコストが等しいネクストホップ)を提供し)、何らかの追加の基準が使用される(例えば、コネクションレスネットワークでは、等価コストマルチパス(ECMP)(等価コストマルチパスルーティング、マルチパス転送、およびIPマルチパスとも呼ばれる)(RFC2991および2992)を使用できる(例えば、標準的な実装は、パケットフローの順序を維持するために、基準として特定のヘッダーフィールドを使用して、特定のパケットフローのパケットが必ず同じネクストホップで転送されることを保証する))。マルチパス転送の目的では、パケットフローは、順序付け制約を共有する一連のパケットとして規定される。一例として、特定のTCP転送シーケンス内の一連のパケットは正しい順序で到着する必要があり、そのように到着しない場合、TCPロジックは、順序が正しくない配信を混雑状態と解釈してTCP転送速度を低下させる。
レイヤ3(L3)リンクアグリゲーション(LAG)リンクは、2つのNDを複数のIPアドレス割り当て済みリンク経路(各リンク経路には異なるIPアドレスが割り当てられる)に直接接続するリンクであり、それらの異なるリンク経路への負荷分散の決定がND転送プレーンで実行される。その場合、負荷分散の決定はリンク経路間で行われる。
一部のNDは、認証、許可、および課金(AAA)プロトコル(例えばRADIUS(リモート認証ダイヤルインユーザサービス))、ダイアメーター、および/またはTACACS+(Terminal Access Controller Access Control System Plus)のための機能を含む。AAAは、クライアント/サーバモデルを使用して提供することができ、AAAクライアントはND上で実装され、AAAサーバはND上にローカルに実装するか、またはNDに結合されたリモート電子デバイス上に実装することができる。認証は、加入者を識別および検証するプロセスである。例えば、ユーザ名とパスワードの組合せによって、または一意の(固有の)キーによって、加入者を識別することができる。許可は、特定の電子デバイスの情報リソースへのアクセス権限を取得することなどの、認証された後に加入者が行うことができることを(例えばアクセス制御ポリシーを使用して)決定する。課金は、ユーザの活動を記録することである。概略的な例として、(AAA処理をサポートする)エッジNDを介して(例えばアクセスネットワークを介して)エンドユーザデバイスを結合することができ、このエッジNDは、サービス/コンテンツプロバイダのサーバを実装している電子デバイスに結合されたコアNDに結合される。AAA処理は、ある加入者に関して、その加入者用のAAAサーバ内に格納された加入者レコードを識別するために実行される。加入者レコードは、その加入者のトラフィックの処理中に使用される一連の属性(例えば、加入者名、パスワード、認証情報、アクセス制御情報、速度制限情報、ポリシング情報)を含む。
特定のND(例えば特定のエッジND)は、加入者回線を使用してエンドユーザデバイス(または、住宅用ゲートウェイ(例えば、ルータ、モデム)などの加入者宅内機器(CPE)である場合もある)を内部で表現する。加入者回線は、ND内で加入者セッションを一意に識別し、セッションの存続期間にわたって通常は存在する。したがって、NDは通常、加入者がこのNDに接続したときに加入者回線を割り当て、それに応じて、この加入者が接続を切ったときにこの加入者回線の割り当てを解除する。各加入者セッションは、別のプロトコルを経由するポイントツーポイントプロトコル(PPPoX)(例えば、Xはイーサネットまたは非同期転送モード(ATM))、イーサネット、802.1Q仮想LAN(VLAN)、インターネットプロトコル、またはATMなどのプロトコルを使用してNDとエンドユーザデバイス(または、住宅用ゲートウェイまたはモデムなどのCPEである場合もある)の間で通信されるパケットの区別可能なフローを表す。加入者セッションは、さまざまなメカニズム(例えば、動的ホスト構成プロトコル(DHCP)、DHCP/クライアントレスインターネットプロトコルサービス(CLIPS)、または媒体アクセス制御(MAC)アドレス追跡を手動でプロビジョニングするメカニズム)を使用して開始できる。例えば、ポイントツーポイントプロトコル(PPP)は、デジタル加入者ライン(DSL)サービスに一般に使用され、加入者がユーザ名とパスワードを入力できるようにし、その後、加入者レコードの選択に使用できるPPPクライアントのインストールを必要とする。DHCPが使用される場合(例えば、ケーブルモデムサービスの場合)、通常はユーザ名が入力されないが、そのような状況では、他の情報(例えば、エンドユーザデバイス(またはCPE)内のハードウェアのMACアドレスを含んでいる情報)が入力される。ND上でDHCPおよびCLIPSを使用することによってMACアドレスを捕捉し、それらのアドレスを使用して加入者を区別し、その加入者の加入者レコードにアクセスする。
各VNE(例えば、仮想ルータ、仮想ブリッジ(仮想プライベートLANサービス(VPLS)(RFC 4761および4762)内で仮想スイッチインスタンスとして機能できる))は、通常は独立して管理することができる。例えば、複数の仮想ルータの場合、各仮想ルータはシステムリソースを共有できるが、そのルータの管理ドメイン、AAA(認証、許可、および課金)名前空間、IPアドレス、およびルーティングデータベースに関しては、他の仮想ルータから分離している。複数のVNEをエッジND内で採用し、直接ネットワークアクセスおよび/または異なるサービスのクラスを、サービスプロバイダおよび/またはコンテンツプロバイダの加入者に提供することができる。
特定のND内で、物理NIから独立した「インターフェイス」をVNEの一部として設定し、上位レイヤのプロトコルおよびサービス情報(例えば、レイヤ3のアドレス指定)を提供することができる。AAAサーバ内の加入者レコードは、他の加入者設定要件に加えて、ND内で対応する加入者に結び付ける必要のあるコンテキスト(例えば、VNE/NEのコンテキスト)も識別する。本明細書で使用されているような結び付けによって、物理的エンティティ(例えば物理NI、チャネル)または論理的エンティティ(例えば、加入者回線または論理回線(1つまたは複数の加入者回線のセット)などの回線)と、コンテキストのインターフェイスとの間の関連性を形成し、この関連性の上に、このコンテキストのネットワークプロトコル(例えば、ルーティングプロトコル、ブリッジプロトコル)が設定される。何らかの上位レイヤプロトコルインターフェイスが設定され、物理的エンティティに関連付けられた場合に、加入者データが物理的エンティティ上を流れる。
正常な挙動のフローに与える影響を最小限に抑える適応負荷バランシング
上で説明された実施形態では、ネットワークデバイスで受信されたフローが(例えば複数のバケットの1つにマッピングされることによって)サブセットに分割され、各バケットの状態が維持される。この状態は、重いフローを含んでいるバケットの識別に使用され、それに応じて、それらのバケットには、すべてのパケット処理スレッド間で負荷バランシングが実行されるようにマークが付けられる。残りのバケットのパケットが、それらのパケットに対応するパケット処理スレッドに引き続き直接マッピングされる。
これらの実施形態は、バケットの粒度で状態を維持および監視することを含み、このことは、重いフローおよび/またはハッシュスキューフローの識別および決定において役立つ。これらの状態は、混雑の原因が少数のフローにある場合でも、すべてのフロー(すなわち、すべてのバケット)に関して維持される(例えば、混雑の原因が、マッピングされたフローのうちの1つのフローのみにある場合でも、1つのバケットにマッピングされたすべてのフローに対して負荷バランシングが実行され、それらのフローの順序が変更される場合がある)。一般に、マウスフロー(すなわち、「エレファント/重い」フローとは対照的な小さいフロー)がフローを支配することが予想され、すべてのフローの状態の追加的な監視を維持するためのコストを払うのが望ましくないことがある。これは、すべてのフローがパケット処理スレッドのオーバーサブスクリプションに寄与するわけではないためである。
下で提示される実施形態は、ネットワークデバイス内のパケット処理ネットワーク要素が、必要な場合に少数のフローのセット7に対してのみ、処理済みのパケットを順序変更できるようにする。これらの実施形態は、ネットワーク要素で受信されたすべてのフローに関して、フローレベルまたはバケット(すなわち、フローのサブセット)レベルで計算オーバーヘッドの追加を防ぐ。上で説明された実施形態とは対照的に、下の実施形態では、フローのサブセットのみが状態監視の対象になる。これらの実施形態は、転送要素(パケット処理ネットワーク要素)のパケット処理スレッドが、負荷バランシング転送に参加していて、処理済みパケットの順序変更を必要とする可能性のあるパケット処理スレッドと、負荷バランシングに参加しておらず、順序変更を必要としない可能性のあるパケット処理スレッドとに分類されることを提案する。
一部の実施形態では、パケット処理スレッドプール(またはスレッドカテゴリ)の概念が導入される。一部の実施形態によれば、システムの初期化段階では、すべてのパケット処理スレッドが「正常」プール/カテゴリ内にある。いずれかのパケット処理スレッドでキューの未処理が検出された場合、そのパケット処理スレッドは「未処理」プールに移動される。一部の実施形態では、未処理の多いパケット処理スレッドが未処理プールに移動されたときに、未処理の少ない少なくとも1つの追加パケット処理スレッドがこのプールに追加される。未処理プール内のパケット処理スレッドにマッピングされたすべてのパケットトラフィックに対して、このプールのすべてのスレッド間で負荷バランシングが実行される。監視メカニズムに基づいて、追加スレッドを未処理プールに追加して、スレッドの未処理プールにマッピングされたパケットの負荷バランシングを支援するか、あるいは、パケット処理スレッドを未処理プールから取り消すことができる。一部の実施形態では、未処理が発生したパケット処理スレッドを正常状態に戻す(すなわち、スレッドを未処理プールから正常プールに移動する)プロセスを支援するために、追加のパケット処理スレッドプールが存在することができる。この実施形態では、追加のスレッドプールが「移行」(または中間)プールとしてサーブし、未処理プールと正常プールの間でのスレッドの頻繁な移行を防ぐ。
一部の実施形態では、未処理プールのパケット処理スレッドにマッピングされたパケットは、ステージング領域で順序変更される必要がある場合があり、(例えば正常プール内の)他のパケット処理スレッドにマッピングされたパケットは、順序変更されずに直接転送されることが可能である。
図8は、本発明の一実施形態に従って、正常な挙動の(例えば、重くない、エレファントではない)フローに与える影響を最小限に抑えたパケット処理における適応負荷バランシングのためのネットワークデバイス内の処理を示している。タスクボックス1〜10bは、本発明の一実施形態に従って操作が実行される順序を示している。
タスクボックス1では、パケットがネットワークデバイスで受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て815に転送される。タスクボックス2で、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、入った順序と同じ順序でパケットがネットワークデバイスを出ることを保証するために、後で順序変更ブロック860で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる(例えば連続する)番号が割り当てられるようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー(例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど)のパケットに、同じシーケンスの異なる(例えば連続する)番号が割り当てられるようにする。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
代替の実施形態では、タスクボックス2はオプションの操作であり、スキップされる。この実施形態では、ネットワークデバイスにおけるパケットの受信時に、このパケットが、シーケンス番号が割り当てられずにマッピングブロック810に転送される。既定の順序に従い、パケットに含まれている情報(パケットのヘッダーフィールド)に基づいてパケットが出力されるように、順序変更ブロック860でパケットの順序を変更することができる。この順序は、ネットワークデバイスでの受信時の他のパケットの位置に対するパケットの位置に基づくことができる。
タスクボックス3では、マッピングブロック810がパケットを、パケット処理スレッド850からのパケット処理スレッドに割り当てる。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック810を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造(またはキー)の構築に使用される(例えば、第1のキーフィールドを送信元媒体アクセス制御(MAC)アドレスにすることができ、第2のキーフィールドを送信先MACアドレスにすることができる)。
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する1つまたは複数の転送テーブルのセット内のエントリ(転送テーブルエントリまたはフローエントリとも呼ばれる)を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応/一致することができ、その場合、システムは、規定された方式(例えば、一致する最初の転送テーブルエントリを選択する)に従って、多くの転送テーブルエントリから1つの転送テーブルエントリを決定するように通常は設定される。
代替の実施形態では、タスクボックス3で、パケットをパケット処理スレッドに割り当てることが、パケットを割り当てられたパケット処理スレッドのキューに追加する前に、バケット820A〜Nのうちの1つにマッピングすることをさらに含む。マッピングは、ハッシュメカニズムに従って実行できる。一実施形態では、バケット820A〜Nそれぞれが、パケット処理スレッド850A〜Dのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック810はパケットを、第1のパケット処理スレッド850Aに関連付けられたバケット820Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック810はパケットをバケット820Nにマッピングすることができ、次にバケット820Nが別のパケット処理スレッドに関連付けられる。
タスクボックス4では、マッピングブロック810が、パケットが割り当てられたパケット処理スレッドの状態を決定する。一実施形態によれば、パケット処理スレッドの状態は、正常状態または未処理状態のいずれかであることができる。代替の実施形態では、パケット処理スレッドの状態は、正常状態、移行状態、または未処理状態のいずれかであることができる。パケット処理スレッドの状態が未処理状態である場合、この状態は、このパケット処理スレッドがスレッドの「未処理プール」の一部であることを示している。未処理プールは、パケットのフローに対して負荷バランシングを実行するために負荷バランサー830によって使用される一連のパケット処理スレッドである。パケット処理スレッドの状態が正常状態である場合、この状態は、このパケット処理スレッドがスレッドの「正常プール」の一部であることを示している。正常プールは、(負荷バランシングが実行されずに)パケット処理スレッドに直接マッピングされたフローのパケットを受信する一連のパケット処理スレッドである。第3の状態(移行状態)を含んでいる実施形態では、パケット処理スレッドの状態が移行状態である場合、この状態は、このスレッドが最近、スレッドの未処理プールの一部だったが、スレッドの正常プールに移行する途中にあることを示している。各パケット処理スレッドの状態は、図8(性能モニタ840において実行されるタスクボックス10aおよび10b)および図11を参照して下で説明される実施形態に従ってセットされ、更新される。
タスクボックス5で、パケットが(タスクボックス3でパケットが割り当てられた)第1のパケット処理スレッドにマッピングされるか、あるいは、第1のパケット処理スレッドの状態に基づいて負荷バランサー830にマッピングされる。非限定的な例では、パケットが(タスクボックス3を参照して説明されたように)パケット処理スレッド850Aに割り当てられ、タスクボックス4でパケット処理スレッド850Aの状態が正常状態である(すなわち、パケット処理スレッドがスレッドの正常プールの一部である)と決定されたときに、このパケットが処理のためにパケット処理スレッド850Aに直接マッピングされる。別の非限定的な例では、パケットがパケット処理スレッド850Bに割り当てられ、パケット処理スレッド850Bの状態が未処理状態である(すなわち、このスレッドがスレッドの未処理プールの一部である)と決定されたときに、未処理プールの一連のスレッド(例えば、850Bおよび850D)に分散されるように、このパケットが負荷バランサー830にマッピングされる。この例では、負荷バランサー830は、タスクボックス6で、負荷バランシング方式に基づいてパケットを未処理プールからの第2のパケット処理スレッドにマッピングする(例えば、第2のスレッドはパケット処理スレッド850Bまたは850Dのいずれかであることができる)。一部の実施形態では、パケットを代わりに移行スレッド(例えば850C)に割り当てることができ、このパケットが割り当てられたパケット処理スレッドの状態が移行状態である(すなわち、このスレッドが移行プールの一部である)と決定されたときに、このパケットは割り当てられたスレッド(すなわち、850C)に直接マッピングされる。
一部の実施形態では、パケットがバケット820のうちの1つにマッピングされた後に、タスクボックス5のマッピングが実行される。代替の実施形態では、第1のパケット処理スレッドの状態の決定(タスクボックス4)後に、パケットがバケット820のうちの1つにマッピングされずに、タスクボックス5のマッピングがマッピングブロック810によって直接実行される。
前述したように、タスクボックス6で、負荷バランサー830がパケットを未処理プールのパケット処理スレッドに分散(マッピング)する。一部の実施形態では、未処理プールが、ネットワークデバイス上で実行されている全パケット処理スレッドのうちのサブセットを含む。このスレッドのサブセットは、ネットワークデバイスに入るトラフィックに従って動的にセットされる。ネットワークデバイスで受信されたフローに従って、およびパケット処理スレッドのキューの監視に従って、スレッドを未処理プールに対して追加または削除することができる。プール(例えば未処理プール、正常プール、または移行プール)内の一連のスレッドは、各スレッドの状態に従って適応され、この状態は、図8(タスクボックス10aおよびタスクボックス10b)および図11を参照して説明される実施形態に従って決定される。したがって、負荷バランサー830は、未処理プール内のパケット処理スレッドに従って、未処理プールを介してパケットのマッピングを適応させる。図8に示された例では、パケット処理スレッド850Bおよび850Dは未処理プールの一部であり、パケット処理スレッド850Cは移行プールに含まれ、パケット処理スレッド850Aは正常プールに含まれている。示された例では、パケットの受信時に、負荷バランサー830はパケットを、負荷バランシング方式に基づいて未処理プールからのパケット処理スレッド850Bまたは850Dのうちの1つにマッピングする。パケットの負荷バランシングは、例えば、ラウンドロビンメカニズム、ランダム分散メカニズム、またはその他の要因(例えば、経験則、現在のワークロード、パケット処理スレッドでのキューの長さなど)を考慮できる別の分散メカニズムに従って実行できる。
パケット処理スレッドの状態に基づいて、パケットを(負荷バランサー830を通じて、または直接)パケット処理スレッド850のうちの1つにマッピングしたときに、このパケットはこのパケット処理スレッドのキューに追加される。
タスクボックス7aで、パケットは対応するパケット処理スレッド(例えば、パケット処理スレッド850A〜850Dのうちの1つ)で処理される。各パケット処理スレッドは、対応するキューからパケットを取り出し、このパケットを処理する。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、2つ以上のスレッドを1つのプロセッサコア上で実行することができる。各パケット処理スレッド850A〜Dは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス(NI)に出力されるか、または削除されるように、パケットを処理する。4つのパケット処理スレッド850A〜850Dが図8に示されているが、本発明の代替の実施形態は、任意の数のパケット処理スレッドを含むことができる(例えば、数百または数千のパケット処理スレッドをネットワークデバイス内で実行することができる)。具体的には、代替の実施形態では、さまざまな数のパケット処理スレッドを各プールに含めることができる。各プール(正常、未処理、および移行)は1つまたは複数のパケット処理スレッドを含むことができ、プールのサイズは、ネットワークデバイスで受信されたトラフィックに従って適応可能である。
タスクボックス7bで、パケット処理スレッドで処理されたパケットの負荷バランシングフラグは、このパケット処理スレッドの状態に基づいてセットされる。一部の実施形態では、未処理プールからのスレッドで処理されたパケットごとに、そのパケットを順序変更する必要があることを示すフラグ(負荷バランシングフラグ)がセットされる。一部の実施形態では、負荷バランシングフラグが、未処理プールからのパケット処理スレッドにおいて処理されたすべてのパケットのメタヘッダーにセットされ、負荷バランシングフラグは、正常プールからのパケット処理スレッドにおいて処理されているすべてのパケットにはセットされない。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかを示す。代替の実施形態では、負荷バランシングフラグは、未処理プールまたは移行プールからのパケット処理スレッドにおいて処理されているパケットに対してセットされ、負荷バランシングフラグは、パケットが正常プールからのパケット処理スレッドにおいて処理される場合、セットされない。
一部の実施形態では、パケット処理スレッドの状態に基づいて、このスレッドにおいて処理されたパケットが、順序変更ブロック860に送信されて処理される。
タスクボックス8aで、処理済みのパケットの受信時に、順序変更ブロック860が、受信されたパケットを転送する前に、受信されたパケットに先行するパケットがすでに処理されて転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック860をスキップすることができ、パケットは、順序変更されることなく、パケット処理スレッドで処理された後に出力される。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、タスク2で割り当てられたシーケンス番号に従ってもはや処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。一部の実施形態では、出て行くパケットごとに、順序変更メカニズムが、パケットを処理したスレッドのプールを考慮し、わずかな順序変更操作を実行するか(正常プールからのパケット処理スレッドにおいて処理されたパケットの場合)、またはステージング領域内でのパケットのバッファリング(すなわち、タスクボックス8bでの格納)を含む完全な順序変更を実行する(未処理プールまたは移行プールからのパケット処理スレッドにおいて処理されたパケットの場合)。タスクボックス9で、パケットが入り口の順序で出力される。
パケット処理スレッドの状態の監視および更新
図11は、本発明の一部の実施形態に従う、パケット処理スレッドの状態の更新のブロック図を示している。システムの初期化時には、すべてのパケット処理スレッドは正常状態(1102)にあり、正常プールに属している。どのパケット処理スレッドでも未処理が発生しておらず、したがって、それらすべてのパケット処理スレッドは、直接マッピングされたパケットを処理し、転送する。図8のタスクボックス10aで、性能モニタ840が各パケット処理スレッドのキューの長さを監視し、図8のタスクボックス10bで、性能モニタ840が監視に基づいて各パケット処理スレッドの状態を更新する。言い換えると、ネットワークデバイスにおいて実行されている各パケット処理スレッドの状態が、このネットワークデバイスにおいて受信されて処理されたトラフィックに従って監視および更新される。
一部の実施形態では、タスクボックス10aで、性能モニタ840が、各キューの状態を追跡し、キューで未処理が発生したかどうかを決定する。パケット処理スレッドのキューでオーバーサブスクリプションが発生したことが判明した(例えば、キューの指数関数的加重移動平均(EWMA)キュー長がしきい値を超えた)場合、このスレッドの状態が「未処理状態」にセットされ、このパケット処理スレッドはスレッドの未処理プールの一部であると見なされる。図11を参照すると、スレッドの状態が、「正常スレッド1102」から「未処理スレッド1104」に更新されている。
一部の実施形態では、パケット処理スレッドの未処理プールが1つのパケット処理スレッドを含んでおり、未処理プールの一連のスレッドにわたるパケットの負荷バランシングを有効にするために、別のパケット処理スレッドをこのプールに追加することができる。一実施形態では、未処理プールに追加される追加のパケット処理スレッドは、キューの長さに従って選択できる。1つの非限定的な例では、最短のEWMAキュー長(例えば、最小の負荷が与えられたキューを持つスレッド)を持つパケット処理スレッドが未処理プールに追加される(すなわち、このスレッドの状態も「未処理」にセットされる)。「未処理」パケット処理スレッドのいずれか1つにマッピングされたすべてのパケットに対して、負荷バランサー830によって、未処理プール内のすべてのスレッドへの負荷バランシングが実行される。これによって、オーバーサブスクリプションが発生したスレッドに割り当てられたパケットフローを処理するのに使用できる計算リソースを効率的に増やす。
一部の実施形態では、未処理プール内のすべての「未処理」スレッドのEWMAキュー長も監視される。プール内の大部分の(例えばスレッドのうちの80%を超える)スレッドのEWMAキュー長がしきい値を超えた場合、別の未処理が発生していないスレッド(例えば、プール内の最短のEWMAキュー長を持つパケット処理スレッド)が、「未処理」のマークが付けられて未処理プールに追加される。一部の実施形態では、スレッドの未処理プールに追加するためのパケット処理スレッドを選択するために、移行プールが最初に使用され、その後、正常プールがチェックされる。
さらに、パケット処理スレッドに関連するキューのオーバーサブスクリプションが軽減しているように見える場合、このパケット処理スレッドの状態を「未処理スレッド1104」から「移行スレッド1106」に更新することができる。
一部の実施形態では、パケット処理スレッドが未処理プールから取り消され、未処理プール全体でのパケットの負荷バランシングにもはや参加しなくなった場合、このパケット処理スレッドに「移行スレッド1106」のマークが付けられる(すなわち、このパケット処理スレッドの状態は移行状態である)。
一部の実施形態では、移行パケット処理スレッドが「未処理」スレッドに類似しており、適切な順序でのパケットの出力を保証するために、順序変更ブロック860が、移行スレッドによって処理されたパケットをステージング領域にバッファリングする。移行状態は、パケット処理スレッドを未処理プールから正常プールに移動するための移行期間を提供する。未処理プールから取り消されたパケット処理スレッドは、負荷バランシング実行済みパケットをまだキューに含んでいる場合があり、これらのパケットは順序変更ブロック860を介して順序変更する必要があるため、このスレッドを正常プールに直ちに移動することはできない。移行スレッドによって処理されたすべてのパケットには、負荷バランシングフラグのマークが付けられる。負荷バランシングフラグは、それらのパケットがステージング領域に格納され、出力される前に順序変更される必要があることを順序変更ブロック860に示す。
一部の実施形態では、スレッドを「未処理スレッド1104」であることから「移行スレッド1106」であることに移行するために、性能モニタ840が、スレッドの未処理プールからのスレッドの削除が未処理プール内の他のスレッドに対する重い負荷に直ちにつながらないということを決定できる。このような他のスレッドに対する重い負荷は、未処理が発生していないスレッドをさらに追加することによって未処理プールを再び拡張することが必要になる場合があるため、望ましくない振動につながる可能性がある。
一部の実施形態では、未処理状態から移行状態へのスレッドの移行が、下で説明されるメカニズムに従って実行される。すべての未処理スレッドに対する平均EWMA未処理が監視される。例えば、ブルームフィルタまたはEWMAを使用して、未処理が発生したパケット処理スレッドにマッピングされたフローの中から重いフローを検出することができる。重いフローの量および数における変化を考慮して、スレッドを未処理プールから移行プールにいつ移行するべきかを決定することができる。非限定的な例では、非常に重いフローが未処理スレッドにマッピングされている場合、この特定のスレッドを移行プールに移行することが安全ではない場合がある。これは、このスレッドで再び未処理が発生して、再び未処理プールに移行することが必要になる可能性が高いからである。
一部の実施形態では、パケット処理スレッドの状態を「未処理スレッド1104」から「移行スレッド1106」に移行した後に、タイマーが開始される。タイムアウト時に、このスレッドの状態が「正常スレッド1102」に変更される。
図8のタスクボックス1〜10bのタスクは連続的順序で説明されているが、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる(直接的なタスクボックス4または間接的なタスクボックス5)。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
正常な挙動のフローに対する影響を最小限に抑えるパケット処理における適応負荷バランシングを実装するネットワークデバイスの操作が、図9および図10A〜Cのフロー図を参照して説明される。ただし、パケット処理モジュール800は、図9および図10A〜Cのフロー図を参照して説明される操作以外の操作を実行することができ、図9および図10A〜Cのフロー図を参照して説明される実施形態は、図8を参照して説明された実施形態以外の本発明の実施形態によって実行できるということが理解されるべきである。
図9は、一実施形態に従って、ネットワークデバイス内の正常な挙動のフローに対する影響を最小限に抑える適応パケット処理の操作のフロー図を示している。ボックス902では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て815に転送することができる。ブロック904では、マッピングブロック810がパケットを、パケット処理スレッド850からのパケット処理スレッドに割り当てる。一部の実施形態に従って、(前述したように)ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック810を設定または適応することができる。
代替の実施形態では、ボックス904で、パケットをパケット処理スレッドに割り当てることが、パケットを対応するパケット処理スレッドのキューに追加する前に、パケットをバケット820A〜Nのうちの1つにマッピングすることをさらに含む。マッピングは、ハッシュメカニズムに従って実行できる。一実施形態では、バケット820A〜Nそれぞれが、パケット処理スレッド850A〜Dのうちの1つに関連付けられる。例えば、パケットの受信時に、マッピングブロック810はパケットを、第1のパケット処理スレッド850Aに関連付けられたバケット820Aにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック810はパケットをバケット820Nにマッピングすることができ、次にバケット820Nが別のパケット処理スレッドに関連付けられる。
ブロック906では、マッピングブロック810が、パケットが割り当てられたパケット処理スレッドの状態を決定する。一実施形態によれば、パケット処理スレッドの状態は、正常状態または未処理状態のいずれかであることができる。代替の実施形態では、パケット処理スレッドの状態は、正常状態、移行状態、または未処理状態のいずれかであることができる。パケット処理スレッドの状態が未処理状態である場合、この状態は、このパケット処理スレッドがスレッドの「未処理プール」の一部であることを示している。未処理プールは、パケットのフローに対して負荷バランシングを実行するために負荷バランサー830によって使用される一連のパケット処理スレッドである。パケット処理スレッドの状態が正常状態である場合、この状態は、このパケット処理スレッドがスレッドの「正常プール」の一部であることを示している。正常プールは、(負荷バランシングが実行されずに)パケット処理スレッドに直接マッピングされたフローのパケットを受信する一連のパケット処理スレッドである。第3の状態(移行状態)を含んでいる実施形態では、パケット処理スレッドが移行状態を有している場合、この状態は、このスレッドが最近、スレッドの未処理プールの一部だったが、スレッドの正常プールに移行していることを示している。各パケット処理スレッドの状態は、図8(性能モニタ840において実行されるタスクボックス10aおよび10b)および図11を参照して上で説明された実施形態に従ってセットされ、更新される。
パケットが(ボックス904でパケットが割り当てられた)第1のパケット処理スレッドにマッピングされるか、あるいは、第1のパケット処理スレッドの状態に基づいて負荷バランサー830にマッピングされる。状態が正常状態であると決定された場合、フローはブロック908に進む。状態が未処理状態であると決定された場合、フローはブロック910に進む。状態が移行状態であると決定された場合、フローはブロック912に進む。
図10A〜Cは、本発明の一部の実施形態に従ってパケット処理スレッドの状態に基づいてパケットをパケット処理スレッドにマッピングする、ネットワークデバイス内で実行される詳細な操作のフロー図を示している。非限定的な例では、パケットが(ブロック904を参照して説明されたように)図8のパケット処理スレッド850Aに割り当てられ、パケット処理スレッド850Aの状態が正常状態である(すなわち、パケット処理スレッドがスレッドの正常プールの一部である)と決定されたときに、このパケットがブロック1002で、処理のためにパケット処理スレッド850Aに直接マッピングされる。別の非限定的な例では、パケットが図8のパケット処理スレッド850Bに割り当てられ、パケット処理スレッド850Bの状態が未処理状態である(すなわち、スレッドがスレッドの未処理プールの一部である)と決定されたときに、このパケットがブロック1012で、負荷バランシング方式に基づいて、パケット処理スレッドのプールからの第2のパケット処理スレッドにマッピングされる。この例では、未処理プールがネットワークデバイスのパケット処理スレッドのサブセットを含み、このプールからの各パケット処理スレッドの状態は未処理状態である(例えばパケットは、一連の「未処理」スレッド(例えば、図8の850Bおよび850D)のうちの1つに分散されるように、ブロック1012で図8の負荷バランサー830にマッピングされる)。一部の実施形態では、パケットを代わりにブロック1022で移行スレッド(例えば図8の850C)にマッピングすることができ、このパケットが割り当てられたパケット処理スレッドの状態が移行状態である(すなわち、このスレッドが移行プールの一部である)と決定されたときに、このパケットはブロック1022で、処理のためにパケット処理スレッド850Cに直接マッピングされる。
パケット処理スレッドの状態に基づいて、パケットを(負荷バランサー830を通じて、または直接)パケット処理スレッド850のうちの1つにマッピングするときに、このパケットはこのパケット処理スレッドのキューに追加される。
ブロック1004、1014、および1024で、パケットが、このパケットがマッピングされたパケット処理スレッド(例えば、パケット処理スレッド850A〜850Dのうちの1つ)において処理される。各パケット処理スレッドは、対応するキューからパケットを取り出してパケットを処理する。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、2つ以上のスレッドを1つのプロセッサコア上で実行することができる。各パケット処理スレッド850A〜Dは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス(NI)に出力されるか、または削除されるように、パケットを処理する。4つのパケット処理スレッド850A〜850Dが図8に示されているが、本発明の代替の実施形態は、任意の数のパケット処理スレッドを含むことができる(例えば、数百または数千のパケット処理スレッドをネットワークデバイス内で実行することができる)。
図10A〜Cには示されていないが、一部の実施形態では、パケット処理スレッドで処理されたパケットの負荷バランシングフラグは、このパケットが処理されるときのパケット処理スレッドの状態に基づいてセットされる。一部の実施形態では、未処理スレッド(未処理プールからのスレッド)で処理されたパケットごとに、そのパケットを順序変更する必要があることを示すフラグ(負荷バランシングフラグ)がセットされる。一部の実施形態では、負荷バランシングフラグが、「未処理」パケット処理スレッドにおいて処理されたすべてのパケットのメタヘッダーにセットされ、負荷バランシングフラグは、正常パケット処理スレッドにおいて処理されたすべてのパケットにはセットされない。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかを示す。代替の実施形態では、負荷バランシングフラグが、「未処理」パケット処理スレッドにおいて処理されているパケット、および移行パケット処理スレッドにおいて処理されているパケットにセットされ、負荷バランシングフラグは、正常パケット処理スレッドにおいて処理されているパケットにはセットされない。
一部の実施形態では、その後、パケットは順序変更ブロック860に送信され、このパケットはパケット処理スレッドの状態に基づいて処理される。
ブロック1006、1016、および1026で、一部の実施形態では、処理済みのパケットの受信時に、順序変更ブロック860が、受信されたパケットを転送する前に、受信されたパケットに先行するパケットがすでに処理されて転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック860をスキップすることができ、パケットは、順序変更されることなく、パケット処理スレッドで処理された後に出力される。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、割り当てられたシーケンス番号に従ってもはや処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。
一部の実施形態では、パケット処理スレッドで処理されたパケットの順序変更が、図6を参照して上で説明された操作に従って実行される。これらの実施形態では、パケットごとにセットされた負荷バランシングフラグに従って、パケットは、ネットワーク要素で受信された順序で出力されるのを保証するために、転送されるまでステージング領域に格納される。「未処理」スレッドまたは移行スレッドにおいて処理されたパケットはステージング領域に格納され、順序変更ブロック860によって順序変更される。正常スレッドにおいて処理されたパケットは、順序変更されずに出力される。
開示される技術の実施形態は、適応パケット処理メカニズムを提供し、ネットワーク要素で受信されたフローごとに、パケットを転送するパケット処理スレッドの状態に基づいて直接フローマッピングと負荷バランシングマッピングの間で選択することによって高性能なパケット処理を提供することを目標とする。開示される技術の実施形態は、フローの大部分が(フロー−スレッド間の)直接マッピングに従って処理されることを可能にし、フローのその部分の順序変更のコストを防ぐ。開示される技術の実施形態は、負荷バランシングが、必要な場合にのみ、フローに対して負荷バランシングを実行することをさらに可能にする。したがって、適応パケット処理は、必要な場合にのみパケットの順序を変更する。
図8〜11を参照して説明されたパケット処理における適応負荷バランシングの実施形態は、本明細書で詳細に説明されているように、ネットワーク要素(NE)内で実装することができる。具体的には、開示される技術の実施形態は、仮想ネットワーク要素(VNE)の転送仮想ネットワーク機能(転送VNF)において実装することができる。
本発明の実施形態を利用するSDNおよびNFV環境
図12は、本発明の一部の実施形態に従う、例のネットワーク内のネットワークデバイス(ND)間の接続およびNDの3つの実装例を示している。図12に、ND1200A〜Hを示し、A−B間、B−C間、C−D間、D−E間、E−F間、F−G間、およびA−G間の線、ならびにHと、A、C、D、およびGそれぞれとの間の線によってこれらのNDの接続を示す。これらのNDは、物理デバイスであり、これらのND間の接続は、無線または有線にすることができる(多くの場合、リンクと呼ばれる)。ND1200A、E、およびFから延びるその他の線は、これらのNDがネットワークの入り口ポイントおよび出口ポイントとして機能することを示している(したがって、これらのNDはエッジNDと呼ばれ、その他のNDはコアNDと呼ばれる場合がある)。
図12では、NDの次の2つの実装例を示している。(1)カスタム特定用途向け集積回路(ASIC)および独自オペレーティングシステム(OS)を使用する専用ネットワークデバイス1202、および(2)一般的に市販されている(COTS)プロセッサおよび標準OSを使用する汎用ネットワークデバイス1204。
専用ネットワークデバイス1202はネットワークハードウェア1210を含み、ネットワークハードウェア1210は、計算リソース1212(通常は、1つまたは複数のプロセッサのセットを含む)、転送リソース1214(通常は、1つまたは複数のASICおよび/またはネットワークプロセッサを含む)、および物理ネットワークインターフェイス(NI)1216(物理ポートと呼ばれる場合もある)、ならびにネットワークソフトウェアが格納された非一時的機械可読記憶媒体1218を備える。物理NIはND内のハードウェアであり、物理NIを介して(例えば、無線ネットワークインターフェイスコントローラ(WNIC)を介して無線で、またはネットワークインターフェイスコントローラ(NIC)に接続された物理ポートにケーブルを差し込むことによって)、ND1200A〜H間の接続によって示されたネットワーク接続などのネットワーク接続が行われる。操作中に、ネットワークソフトウェアは、ネットワークハードウェア1210によって遂行され、1つまたは複数のネットワークソフトウェアインスタンス1222のセットをインスタンス化することができる。各ネットワークソフトウェアインスタンス1222およびこのネットワークソフトウェアインスタンスを遂行するネットワークハードウェア1210の部分(このネットワークソフトウェアインスタンス専用のハードウェアおよび/またはこのネットワークソフトウェアインスタンスによって、ネットワークソフトウェアインスタンス1222のうちの他のインスタンスと一次的に共有されるハードウェアのタイムスライス)は、個別の仮想ネットワーク要素1230A〜Rを形成する。各仮想ネットワーク要素(VNE)1230A〜Rは、制御通信および設定モジュール1232A〜R(ローカル制御モジュールまたは制御通信モジュールと呼ばれる場合もある)および転送テーブル1234A〜Rを含み、特定の仮想ネットワーク要素(例えば1230A)が制御通信および設定モジュール(例えば1232A)、1つまたは複数の転送テーブル(例えば1234A)のセット、および仮想ネットワーク要素(例えば1230A)を遂行するネットワークハードウェア1210の部分を含むようにする。
専用ネットワークデバイス1202は、多くの場合、物理的にかつ/または論理的に次を含むと考えられる。(1)制御通信および設定モジュール1232A〜Rを遂行する計算リソース1212を備えるND制御プレーン1224(制御プレーンと呼ばれる場合もある)、および(2)転送テーブル1234A〜Rおよび物理NI1216を利用する転送リソース1214を備えるND転送プレーン1226(転送プレーン、データプレーン、または媒体プレーンと呼ばれる場合もある)。例として、NDがルータである(または、ルーティング機能を実装する)場合、ND制御プレーン1224(制御通信および設定モジュール1232A〜Rを遂行する計算リソース1212)は、通常はデータ(例えばパケット)がルーティングされる方法(例えば、データのネクストホップおよびそのデータ用の送信物理NI)を制御することに参加すること、およびこのルーティング情報を転送テーブル1234A〜Rに格納することに責任を負い、ND転送プレーン1226は、物理NI1216でこのデータを受信すること、および転送テーブル1234A〜Rに基づいてこのデータを物理NI1216のうちの適切な物理NIから転送することに責任を負う。仮想ネットワーク要素1230A〜Rは、図8〜10Cを参照して説明された本発明の実施形態を実装する状態に基づくパケット処理ソフトウェア(SPP)1220のインスタンス1222A〜1222Rを含むことができる。各インスタンス1222Aは、パケットに割り当てられたパケット処理スレッドの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス1202で受信されたパケットを処理および転送するように設定される。
汎用ネットワークデバイス1204はハードウェア240を含み、ハードウェア240は1つまたは複数のプロセッサ242のセット(多くの場合、COTSプロセッサ)およびネットワークインターフェイスコントローラ1244(NIC、ネットワークインターフェイスカードとも呼ばれる)(物理NI1246を含んでいる)、ならびにソフトウェア1250が格納されている非一時的機械可読記憶媒体1248を備えている。操作中に、プロセッサ1242はソフトウェア1250を遂行してハイパーバイザ1254(仮想マシンモニタ(VMM)と呼ばれる場合もある)およびハイパーバイザ1254によって実行される1つまたは複数の仮想マシン1262A〜Rをインスタンス化する(これらのインスタンスは、総称してソフトウェアインスタンス1252と呼ばれる)。仮想マシンは、プログラムを物理的な非仮想マシン上で実行されているかのように実行する物理マシンのソフトウェア実装である。アプリケーションは、「ベアメタル」ホスト電子デバイス上で実行されるのとは対照的に、そのアプリケーションが仮想マシン上で実行されていることを通常は知らないが、一部のシステムは、最適化の目的で、オペレーティングシステムまたはアプリケーションが仮想化の存在を知ることができる準仮想化を提供する。各仮想マシン1262A〜R、およびこの仮想マシン(この仮想マシン専用のハードウェアおよび/またはこの仮想マシンによって仮想マシン1262A〜Rのうちの他の仮想マシンと一時的に共有されるハードウェアのタイムスライス)を遂行するハードウェア1240の部分は、個別の仮想ネットワーク要素1260A〜Rを形成する。
仮想ネットワーク要素1260A〜Rは、仮想ネットワーク要素1230A〜Rに類似する機能を実行する。例えば、ハイパーバイザ1254は、ネットワークハードウェア1210のように見える仮想処理プラットフォームを仮想マシン1262Aに提示することができ、仮想マシン1262Aを使用して、制御通信および設定モジュール1232Aおよび転送テーブル1234Aに類似する機能を実装できる(ハードウェア1240のこの仮想化は、ネットワーク機能仮想化(NFV)と呼ばれる場合もある)。したがって、NFVを使用して、多くのネットワーク機器の種類を業界標準の大容量のサーバハードウェア、物理スイッチ、および物理記憶装置の上で統合し、データセンター、ND、および加入者宅内機器(CPE)内に配置することができる。ただし、本発明の異なる実施形態は、仮想マシン1262A〜Rのうちの1つまたは複数を異なって実装することができる。例えば、本発明の実施形態は、1つのVNE1260A〜Rに対応する各仮想マシン1262A〜Rを使用して説明されているが、代替の実施形態は、この対応をさらに細かい粒度で実装することができる(例えば、ラインカード仮想マシンがラインカードを仮想化し、制御カード仮想マシンが制御カードを仮想化するなど)。VNEに対する仮想マシンの対応を参照して本明細書に記載された手法は、そのようなさらに細かい粒度が使用される実施形態にも適用されると理解されるべきである。仮想ネットワーク要素1260A〜Rは、図8〜10Cを参照して説明された本発明の実施形態を実装する状態に基づくパケット処理ソフトウェア(SPP)1250のインスタンス1266A〜1266Rを含むことができる。各インスタンス1266Aは、パケットに割り当てられたパケット処理スレッドの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス1204で受信されたパケットを処理および転送するように設定される。
特定の実施形態では、ハイパーバイザ1254は、物理イーサネットスイッチに類似する転送サービスを提供する仮想スイッチを含む。具体的には、この仮想スイッチは、仮想マシンとNIC1244の間のトラフィック、および必要に応じて仮想マシン1262A〜R間のトラフィックを転送する。加えて、この仮想スイッチは、互いに通信することがポリシーによって(例えば、仮想ローカルエリアネットワーク(VLAN)に従うことによって)許可されないVNE1260A〜R間のネットワーク分離を強制することができる。
図12の第3のNDの実装例は、ハイブリッドネットワークデバイス1206であり、カスタムASIC/独自OSとCOTSプロセッサ/標準OSの両方を1つのNDまたはND内の1つのカードに含んでいる。そのようなハイブリッドネットワークデバイスの特定の実施形態では、プラットフォームVM(すなわち、専用ネットワークデバイス1202の機能を実装するVM)は、準仮想化をハイブリッドネットワークデバイス1206内に存在するネットワークハードウェアに提供できる。
本発明は複数の実施形態に関して説明されたが、当業者は、本発明が説明された実施形態に限定されず、添付された請求項の精神および範囲に含まれる修正および変更を伴って実施可能であるということを認識するであろう。したがって説明は、制限ではなく例と見なされるべきである。
例えば、図内のフロー図は、本発明の特定の実施形態によって実行される操作の特定の順序を示しているが、そのような順序は例であると理解されるべきである(例えば、代替の実施形態は、操作を異なる順序で実行すること、特定の操作を組み合わせること、特定の操作を重ね合わせることなどを実行できる)。