(57)【特許請求の範囲】
【請求項１】
ネットワークデバイス内のパケットを転送する方法であって、
前記ネットワークデバイスでパケットを受信すること（９０２）と、
前記パケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てること（９０４）であって、前記複数のパケット処理スレッドそれぞれが、パケット処理スレッドの正常プールおよびパケット処理スレッドの未処理プールのうちの少なくとも１つに属する、ことと、
前記第１のパケット処理スレッドの状態を決定すること（９０６）であって、前記状態が前記第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされており、前記状態が未処理状態および正常状態を含んでいる複数の状態のうちの１つであるように決定され、前記状態が、前記第１のパケット処理スレッドが属しているパケット処理スレッドのプールを示す、ことと、
前記第１のパケット処理スレッドの前記状態が正常状態であると決定することに応答して、
前記パケットを前記第１のパケット処理スレッドにマッピングすること（１００２）と、
前記パケットを前記第１のパケット処理スレッドにおいて処理すること（１００４）と、
前記パケットを転送すること（１００６）とを実行することと、
前記第１のパケット処理スレッドの前記状態が未処理状態であると決定することに応答して、
前記パケットを、負荷バランシング方式に基づいて前記パケット処理スレッドの未処理プールからの第２のパケット処理スレッドにマッピングすること（１０１２）であって、前記パケット処理スレッドの未処理プールが前記第１のパケット処理スレッド、および前記複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、前記未処理プールからの前記パケット処理スレッドそれぞれの前記状態が未処理状態である、ことと、
前記パケットを前記第２のパケット処理スレッドにおいて処理すること（１０１４）と、
既定の順序に従って前記パケットを転送すること（１０１６）とを実行することであって、前記既定の順序が、前記ネットワークデバイスにおける受信時の他のパケットの位置に対する前記パケットの位置に基づく、こととを備える方法。
【請求項２】
前記複数の状態が移行状態をさらに含む、請求項１に記載の方法。
【請求項３】
前記方法が、
前記第１のパケット処理スレッドの前記状態が前記移行状態であると決定することに応答して、
前記パケットを前記第１のパケット処理スレッドにマッピングすること（１０２２）と、前記パケットを前記第１のパケット処理スレッドにおいて処理すること（１０２４）と、前記パケットを前記既定の順序に従って転送すること（１０２６）とを実行することをさらに備える、請求項２に記載の方法。
【請求項４】
前記パケットが、先行するパケットの受信後に前記ネットワークデバイスで受信され、前記既定の順序に従って前記パケットを転送すること（１０１６）が、
前記先行するパケットが前記複数のパケット処理スレッドのうちの１つによってまだ処理されるかどうかを決定すること（６０６）と、
前記先行するパケットがまだ処理されると決定することに応答して、前記パケットをバッファに格納すること（６０８）と、
前記先行するパケットの処理および出力の後に、前記パケットを出力すること（６１２）とをさらに含む、請求項１に記載の方法。
【請求項５】
前記既定の順序に従って前記パケットを転送すること（１０１６）が、
前記パケットを前記バッファに格納する前に、前記パケットに負荷バランシングフラグがセットされていると決定すること（６０４）をさらに含む、請求項４に記載の方法。
【請求項６】
一意のシーケンス番号を前記パケットに割り当てることをさらに備え、
前記一意のシーケンス番号に従って前記パケットを転送することが実行される、請求項１に記載の方法。
【請求項７】
前記第１のパケット処理スレッドの前記キューの前記長さが、前記キューの前記長さの指数関数的加重移動平均（ＥＷＭＡ）を測定すること、および、前記測定結果をしきい値と比較することによって部分的に監視される、請求項１に記載の方法。
【請求項８】
ネットワークデバイスのプロセッサ（１２１２、１２４２）によって遂行された場合に前記プロセッサに操作を実行させる命令を提供する非一時的機械可読記憶媒体（１２１８、１２４８）であって、前記操作が、
受信されたパケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てること（９０４）であって、前記複数のパケット処理スレッドそれぞれが、パケット処理スレッドの正常プールおよびパケット処理スレッドの未処理プールのうちの少なくとも１つに属する、ことと、
前記第１のパケット処理スレッドの状態を決定すること（９０６）であって、前記状態が前記第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされており、前記状態が未処理状態および正常状態を含んでいる複数の状態のうちの１つであるように決定され、前記状態が、前記第１のパケット処理スレッドが属しているパケット処理スレッドのプールを示す、ことと、
前記第１のパケット処理スレッドの前記状態が正常状態であると決定することに応答して、
前記パケットを前記第１のパケット処理スレッドにマッピングすること（１００２）と、
前記パケットを前記第１のパケット処理スレッドにおいて処理すること（１００４）と、
前記パケットの転送を引き起こすこと（１００６）とを実行することと、
前記第１のパケット処理スレッドの前記状態が未処理状態であると決定することに応答して、
前記パケットを、負荷バランシング方式に基づいて前記パケット処理スレッドの未処理プールからの第２のパケット処理スレッドにマッピングすること（１０１２）であって、前記パケット処理スレッドの未処理プールが前記第１のパケット処理スレッド、および前記複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、前記未処理プールからの前記パケット処理スレッドそれぞれの前記状態が未処理状態である、ことと、
前記パケットを前記第２のパケット処理スレッドにおいて処理すること（１０１４）と、
既定の順序に従って前記パケットの転送を引き起こすこと（１０１６）とを実行することであって、前記既定の順序が、前記ネットワークデバイスにおける受信時の他のパケットの位置に対する前記パケットの位置に基づく、こととを備える非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項９】
前記複数の状態が移行状態をさらに含む、請求項８に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１０】
前記操作が、
前記第１のパケット処理スレッドの前記状態が前記移行状態であると決定することに応答して、
前記パケットを前記第１のパケット処理スレッドにマッピングすること（１０２２）と、前記パケットを前記第１のパケット処理スレッドにおいて処理すること（１０２４）と、前記既定の順序に従って前記パケットの転送を引き起こすこと（１０２６）とを実行することをさらに備える、請求項９に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１１】
前記パケットが、先行するパケットの受信後に前記ネットワークデバイスで受信され、前記既定の順序に従って前記パケットの転送を引き起こすこと（１０１６）が、
前記先行するパケットが前記複数のパケット処理スレッドのうちの１つによってまだ処理されるかどうかを決定すること（６０６）と、
前記先行するパケットがまだ処理されると決定することに応答して、前記パケットのバッファへの格納を引き起こすこと（６０８）と、
前記先行するパケットの前記処理および出力の後に前記パケットの出力を引き起こすこと（６１２）とをさらに含む、請求項８に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１２】
前記既定の順序に従って前記パケットの転送を引き起こすこと（１０１６）が、
前記パケットの前記バッファへの格納を引き起こす前に、前記パケットに負荷バランシングフラグがセットされていると決定すること（６０４）をさらに含む、請求項１１に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１３】
前記操作が、
一意のシーケンス番号を前記パケットに割り当てることをさらに備え、
前記一意のシーケンス番号に従って前記パケットの転送を引き起こすことが実行される、
請求項８に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１４】
前記第１のパケット処理スレッドの前記キューの前記長さが、前記キューの前記長さの指数関数的加重移動平均（ＥＷＭＡ）を測定すること、および、前記測定結果をしきい値と比較することによって部分的に監視される、請求項８に記載の非一時的機械可読記憶媒体（１２１８、１２４８）。
【請求項１５】
ネットワークデバイスであって、
プロセッサ（１２１２、１２４２）と、
コードが格納された非一時的機械可読記憶媒体（１２１８、１２４８）であって、前記コードが前記プロセッサによって遂行された場合に、
受信されたパケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てること（９０４）であって、前記複数のパケット処理スレッドそれぞれが、パケット処理スレッドの正常プールおよびパケット処理スレッドの未処理プールのうちの少なくとも１つに属する、ことと、
前記第１のパケット処理スレッドの状態を決定すること（９０６）であって、前記状態が前記第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされており、前記状態が未処理状態および正常状態を含んでいる複数の状態のうちの１つであるように決定され、前記状態が、前記第１のパケット処理スレッドが属しているパケット処理スレッドのプールを示す、ことと、
前記第１のパケット処理スレッドの前記状態が正常状態であると決定することに応答して、
前記パケットを前記第１のパケット処理スレッドにマッピングすること（１００２）と、
前記パケットを前記第１のパケット処理スレッドにおいて処理すること（１００４）と、
前記パケットの転送を引き起こすこと（１００６）とを実行することと、
前記第１のパケット処理スレッドの前記状態が未処理状態であると決定することに応答して、
前記パケットを、負荷バランシング方式に基づいて前記パケット処理スレッドの未処理プールからの第２のパケット処理スレッドにマッピングすること（１０１２）であって、前記パケット処理スレッドの未処理プールが前記第１のパケット処理スレッド、および前記複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、前記未処理プールからの前記パケット処理スレッドそれぞれの前記状態が未処理状態である、ことと、
前記パケットを前記第２のパケット処理スレッドにおいて処理すること（１０１４）と、
既定の順序に従って前記パケットの転送を引き起こすこと（１０１６）とを実行することであって、前記既定の順序が、前記ネットワークデバイスにおける受信時の他のパケットの位置に対する前記パケットの位置に基づく、こと
との操作を実行する、非一時的機械可読記憶媒体（１２１８、１２４８）とを備えるネットワークデバイス。
【請求項１６】
前記パケットが、先行するパケットの受信後に前記ネットワークデバイスで受信され、前記既定の順序に従って前記パケットの転送を引き起こすこと（１０１６）が、
前記先行するパケットが前記複数のパケット処理スレッドのうちの１つによってまだ処理されるかどうかを決定すること（６０６）と、
前記先行するパケットがまだ処理されると決定することに応答して、前記パケットのバッファへの格納を引き起こすこと（６０８）と、
前記先行するパケットの前記処理および出力の後に前記パケットの出力を引き起こすこと（６１２）とをさらに含む、請求項１５に記載のネットワークデバイス。
【請求項１７】
前記操作が、一意のシーケンス番号を前記パケットに割り当てることをさらに備え、
前記一意のシーケンス番号に従って前記パケットの転送を引き起こすことが実行される、
請求項１５に記載のネットワークデバイス。
【請求項１８】
前記ネットワークデバイスがソフトウェア定義ネットワーク（ＳＤＮ）システムの転送要素（７７０）である、請求項１５に記載のネットワークデバイス。
【請求項１９】
前記ネットワークデバイスが、ネットワーク機能仮想化（ＮＦＶ）を実装するシステムの汎用ネットワークデバイス（１２０４）である、請求項１５に記載のネットワークデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本出願は、２０１４年１２月２２日に出願された米国特許出願第１４／５７９，７２２の一部継続出願であり、この特許の全体的内容は、すべての目的に関して、参照によって本明細書に援用されている。
【０００２】
本発明の実施形態はネットワークの分野に関連し、さらに具体的には、パケット処理システム内のパケットの適応負荷バランシングに関連する。
【背景技術】
【０００３】
ネットワーク機能仮想化（ＮＦＶ）は、特定の機能、またはネットワークデバイスの機能のクラス全体を、一緒に接続（またはチェーン接続）して通信サービスを作成できる基本的要素として実装する、ネットワークアーキテクチャの概念である。これらの機能は、ネットワーク内に配置された商品ハードウェア上での機能の分散および実行を可能にする、仮想ソフトウェア環境内で実装される。
【０００４】
ＮＦＶは、企業レベルのソフトウェアで使用される技術などの、従来のサーバ仮想化技術を利用するが、それらの技術とは異なっている。仮想ネットワーク機能（ＶＮＦ）は、さまざまなソフトウェアおよびプロセスを実行する１つまたは複数の仮想マシンを介して、標準的なネットワークデバイスまたはサーバアーキテクチャ（スイッチやストレージシステムなど）の上に実装することができ、あるいはネットワーク機能ごとにカスタムハードウェア機器を持つ代わりに、クラウドコンピューティングインフラストラクチャ内に実装することもできる。
【０００５】
ＶＮＦは、レイヤ２、レイヤ２．５、またはレイヤ３のトラフィックのパケットの処理および転送を実行するように実装することができ、転送ＶＮＦと呼ばれる場合がある。転送ＶＮＦを実装するネットワーク要素で受信されたパケットは、転送タスクを実行するパケット処理スレッドに分散される。パケット処理スレッドは、各スレッドが転送ソフトウェア（例えば、Ｉｎｇｒｅｓｓ／Ｅｇｒｅｓｓ機能またはＣｏｌｌａｐｓｅｄ  Ｉｎｇｒｅｓｓ／Ｅｇｒｅｓｓ機能）のインスタンスを実行するｒｕｎ−ｔｏ−ｃｏｍｐｌｅｔｉｏｎモデルを使用することができる。パケットをパケット処理スレッドに分散するために、さまざまなアプローチを使用できる。
【発明の概要】
【０００６】
ネットワークデバイスにおけるパケットを転送する方法が開示される。この方法は、パケットをネットワークデバイスで受信することと、パケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てることと、第１のパケット処理スレッドの状態を決定することとを備え、この状態が第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされており、この状態が、未処理状態および正常状態を含む複数の状態のうちの１つになるように決定される。第１のパケット処理スレッドの状態が正常状態であると決定することに応答して、この方法は、パケットを第１のパケット処理スレッドにマッピングすることと、パケットを第１のパケット処理スレッドにおいて処理することと、パケットを転送することとをさらに備える。第１のパケット処理スレッドの状態が未処理状態であると決定することに応答して、この方法は、パケットを負荷バランシング方式に基づいてパケット処理スレッドのプールからの第２のパケット処理スレッドにマッピングすることであって、パケット処理スレッドのプールが複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、プールからのパケット処理スレッドそれぞれの状態が未処理状態である、ことと、第２のパケット処理スレッドにおいてパケットを処理することと、既定の順序に従ってパケットを転送することとを備え、この既定の順序が、ネットワークデバイスにおける受信時の他のパケットの位置に対するパケットの位置に基づく。
【０００７】
非一時的機械可読記憶媒体は命令を提供し、この命令は、ネットワークデバイスのプロセッサによって実行されたときに、前記プロセッサに操作を実行させ、この操作は、受信されたパケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てることと、第１のパケット処理スレッドの状態を決定することとを備え、この状態が第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされており、この状態が、未処理状態および正常状態を含む複数の状態のうちの１つになるように決定される。第１のパケット処理スレッドの状態が正常状態であると決定することに応答して、この操作は、パケットを第１のパケット処理スレッドにマッピングすることと、パケットを第１のパケット処理スレッドにおいて処理することと、パケットの転送を引き起こすこととをさらに備える。第１のパケット処理スレッドの状態が未処理状態であると決定することに応答して、この操作は、パケットを負荷バランシング方式に基づいてパケット処理スレッドのプールからの第２のパケット処理スレッドにマッピングすることであって、パケット処理スレッドのプールが複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、プールからのパケット処理スレッドそれぞれの状態が未処理状態である、ことと、第２のパケット処理スレッドにおいてパケットを処理することと、既定の順序に従ってパケットの転送を引き起こすこととをさらに備え、この既定の順序が、ネットワークデバイスにおける受信時の他のパケットの位置に対するパケットの位置に基づく。
【０００８】
ネットワークデバイスが開示される。このネットワークデバイスは、プロセッサと、コードが格納された非一時的機械可読記憶媒体とを備え、このコードは、プロセッサによって実行されたときに操作を実行し、この操作は、受信されたパケットを複数のパケット処理スレッドからの第１のパケット処理スレッドに割り当てることと、第１のパケット処理スレッドの状態を決定することとを含み、この状態が第１のパケット処理スレッドのキューの長さを監視することに基づいてセットされ、この状態が、未処理状態および正常状態を含む複数の状態のうちの１つであるように決定される。第１のパケット処理スレッドの状態が正常状態であると決定することに応答して、この処理は、パケットを第１のパケット処理スレッドにマッピングすることと、パケットを第１のパケット処理スレッドにおいて処理することと、パケットの転送を引き起こすこととをさらに含む。第１のパケット処理スレッドの状態が未処理状態であると決定することに応答して、この操作は、パケットを負荷バランシング方式に基づいてパケット処理スレッドのプールからの第２のパケット処理スレッドにマッピングすることであって、パケット処理スレッドのプールが複数のパケット処理スレッドからのパケット処理スレッドのサブセットを含み、プールからのパケット処理スレッドそれぞれの状態が未処理状態である、ことと、第２のパケット処理スレッドにおいてパケットを処理することと、既定の順序に従ってパケットの転送を引き起こすこととをさらに含み、この既定の順序が、ネットワークデバイスにおける受信時の他のパケットの位置に対するパケットの位置に基づく。
【０００９】
開示される技術の実施形態は、ネットワークデバイスにおける適応パケット処理メカニズムを提供し、受信されたフローごとに、パケットに割り当てられたパケット処理スレッドの状態に基づいて直接フローマッピングと負荷バランシングマッピングの間で選択することによって、高性能なパケット処理を提供することを目標とする。開示される技術の実施形態は、フローの大部分が（フロー−スレッド間の）直接マッピングに従って処理されることを可能にし、フローのその部分の順序変更のコストを防ぐ。開示される技術の実施形態は、必要な場合にのみ、パケット処理スレッドのサブセットのフローに対して負荷バランシングを実行することを可能にする。したがって、適応パケット処理は、必要な場合にのみパケットの順序を変更する。
【００１０】
本発明は、以降の説明、および本発明の実施形態の説明に使用される添付の図面を参照することによって、最も良く理解され得る。
【図面の簡単な説明】
【００１１】
【図１】本発明の一部の実施形態に記載されたパケット処理における適応負荷バランシングのためのネットワークデバイス内の操作を示す図である。
【図２】本発明の一部の実施形態に記載されたネットワークデバイスにおいて適応負荷バランシングを実行するための操作のフロー図である。
【図３】本発明の一部の実施形態に記載されたネットワークデバイスにおいて適応負荷バランシングを実行するための操作のフロー図である。
【図４】本発明の一部の実施形態に記載されたパケット処理における適応負荷バランシングのためのネットワークデバイス内の操作を示す図である。
【図５】本発明の一部の実施形態に記載された、パケット処理スレッドがバケットにマッピングされるときにネットワークデバイス内で実行される詳細な操作のフロー図である。
【図６】本発明の一部の実施形態に記載された、パケットの順序を変更するためにネットワークデバイス内で実行される詳細な操作のフロー図である。
【図７Ａ】本発明の一部の実施形態に記載された、例のネットワーク内のネットワークデバイス（ＮＤ）間の接続およびＮＤの３つの実装例を示す図である。
【図７Ｂ】本発明の一部の実施形態に記載された、専用ネットワークデバイス７０２を実装するための方法の例を示す図である。
【図７Ｃ】本発明の一部の実施形態に記載された、仮想ネットワーク要素（ＶＮＥ）を結合できるさまざまな方法の例を示す図である。
【図７Ｄ】本発明の一部の実施形態に記載された、各ＮＤ上に１つのネットワーク要素（ＮＥ）を含むネットワークを示し、この簡潔なアプローチにおいて、従来の分散アプローチ（従来のルータによって一般に使用される）と、到達可能性および転送情報を維持するための集中型アプローチ（ネットワーク制御とも呼ばれる）とを対比する図である。
【図７Ｅ】本発明の一部の実施形態に記載された、各ＮＤが１つのＮＥを実装するが、集中型制御プレーンが、異なるＮＤ内の複数のＮＥを、仮想ネットワークのうちの１つに含まれる１つのＮＥ（を表現するため）に抽象化した単純なケースを示す図である。
【図７Ｆ】本発明の一部の実施形態に記載された、複数のＶＮＥが異なるＮＤ上に実装されて互いに結合され、集中型制御プレーンが、仮想ネットワークのうちの１つに含まれる１つのＶＮＥとして現れるようにそれらの複数のＶＮＥを抽象化したケースを示す図である。
【図８】本発明の一部の実施形態に記載された、正常な挙動のフローに対する影響を最小限に抑えたパケット処理における適応負荷バランシングのためのネットワークデバイス内の操作を示す図である。
【図９】本発明の一部の実施形態に記載された、正常な挙動のフローに対する影響を最小限に抑えた適応パケット処理のネットワークデバイス内で実行される詳細な操作のフロー図である。
【図１０Ａ】本発明の一部の実施形態に記載された、パケット処理スレッドの状態が正常状態の場合にパケットをパケット処理スレッドにマッピングする、ネットワークデバイス内で実行される詳細な操作のフロー図である。
【図１０Ｂ】本発明の一部の実施形態に記載された、パケット処理スレッドの状態が未処理状態の場合にパケットをパケット処理スレッドにマッピングする、ネットワークデバイス内で実行される詳細な操作のフロー図である。
【図１０Ｃ】本発明の一部の実施形態に記載された、パケット処理スレッドの状態が移行状態の場合にパケットをパケット処理スレッドにマッピングする、ネットワークデバイス内で実行される詳細な操作のフロー図である。
【図１１】本発明の一部の実施形態に記載された、パケット処理スレッドの状態の更新のブロック図である。
【図１２】本発明の一部の実施形態に記載された、例のネットワーク内のネットワークデバイス（ＮＤ）間の接続およびＮＤの３つの実装例を示す図である。
【発明を実施するための形態】
【００１２】
以下では、パケット処理においてパケットに対して負荷バランシングを動的に実行するための方法および装置について説明する。以下の説明では、本発明を十分に理解するために、論理の実装、オペコード、オペランドを指定するための手段、リソースの分割／共有／複製の実装、システムコンポーネントの種類と相互関係、および論理の分割／統合の選択肢などの多くの具体的な詳細が示される。ただし、そのような具体的な詳細がなくても本発明を実施できるということが、当業者によって理解されるであろう。他の例では、本発明を曖昧にしないようにするために、制御構造、ゲートレベル回路、および完全なソフトウェア命令シーケンスが詳細に示されていない。当業者は、記載された説明に従って、過度な実験を行わずに適切な機能を実装できるであろう。
【００１３】
本明細書における「一実施形態」、「実施形態」、「実施形態例」などへの参照は、記載された実施形態が特定の特徴、構造、または特性を含むことができるが、必ずしもすべての実施形態が特定の特徴、構造、または特性を含むことができるわけではないということを示している。さらに、そのような語句は必ずしも同じ実施形態を参照していない。また、特定の特徴、構造、または特性がある実施形態に関連して説明される場合、明示的に説明されるかどうかにかかわらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内にあると考えられる。
【００１４】
括弧で囲まれたテキストおよび破線の境界（例えば、大きい破線、小さい破線、鎖線、および点線）を持つブロックは、本明細書では、追加の特徴を本発明の実施形態に追加するオプションの操作を示すために使用できる。ただし、そのような表記が、本発明の特定の実施形態においては、単なるオプションもしくはオプションの操作であること、および／または実線の境界を持つブロックがオプションではないことを意味していると受け取るべきではない。
【００１５】
以下の説明および請求項において、「結合された」および「接続された」という用語が、それらの派生語と共に使用される場合がある。それらの用語は、互いに同義語であることは意図されていないと理解されるべきである。「結合された」は、互いに物理的または電気的に直接接触している場合もあれば、ない場合もある２つ以上の要素が、連携または相互作用していることを示すために使用される。「接続された」は、相互に結合された２つ以上の要素間の通信の確立を示すために使用される。
【００１６】
電子デバイスは、機械可読記憶媒体（例えば磁気ディスク、光ディスク、読み取り専用メモリ（ＲＯＭ）、フラッシュメモリデバイス、相変化メモリ）および機械可読伝送媒体（キャリアとも呼ばれる）（例えば、電気、光、無線、音、またはその他の形態の、搬送波、赤外線信号などの伝搬信号）などの機械可読媒体（コンピュータ可読媒体とも呼ばれる）を使用して、コード（ソフトウェア命令で構成され、コンピュータプログラムコードまたはコンピュータプログラムと呼ばれる場合もある）および／またはデータを（内部で、および／またはネットワークを経由して他の電子デバイスを使用して）格納および伝送する。したがって、電子デバイス（例えばコンピュータ）は、一連のプロセッサ上で実行するためのコードを格納するため、および／またはデータを格納するための１つまたは複数の機械可読記憶媒体に結合された１つまたは複数のプロセッサのセットなどの、ハードウェアおよびソフトウェアを含む。例えば、電子デバイスは、コードを含んでいる不揮発性メモリを含むことができる。これは、電子デバイスがオフになった（電源が外された）場合でも不揮発性メモリがコード／データを維持できるためである。電子デバイスがオンになっている間は、電子デバイスのプロセッサによって実行されるコードの一部が、電子デバイスのより遅い不揮発性メモリから揮発性メモリ（例えばダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ））に通常はコピーされる。標準的な電子デバイスは、他の電子デバイスとのネットワーク接続を確立し、（伝搬信号を使用してコードおよび／またはデータを伝送および／または受信するために、）一連の、または１つまたは複数の物理ネットワークインターフェイスも含む。本発明の実施形態の１つまたは複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアのさまざまな組合せを使用して実装できる。
【００１７】
ネットワークデバイス（ＮＤ）は、ネットワーク上の他の電子デバイス（例えば他のネットワークデバイス、エンドユーザデバイス）と通信によって相互接続する電子デバイスである。一部のネットワークデバイスは、多重ネットワーク機能（例えば、ルーティング、ブリッジ、スイッチング、レイヤ２アグリゲーション、セッション境界制御、サービス品質、および／または加入者管理）のサポートを提供し、かつ／または多重アプリケーションサービス（例えばデータ、音声、およびビデオ）のサポートを提供する「多重サービスネットワークデバイス」である。ネットワークデバイス（ＮＤ）は、本明細書において下で詳細に説明されているように、１つまたは複数のネットワーク要素を含むことができる。
【００１８】
パケット処理におけるフロー分散の課題
転送ネットワーク要素を実装するネットワークデバイスでは、受信されたパケットを分類し、パケット処理スレッドにマッピングすることができる。例えば、転送ネットワーク要素は、パケット転送アーキテクチャ内の転送プレーンの一部である。転送ネットワーク要素は、転送タスクを実行する１つまたは複数のパケット処理スレッドを含むように実装することができる。各パケット処理スレッドは、受信されたパケットに対して、一連の適用可能な検索機能および転送機能を実行する。転送ネットワーク要素は、転送プロセス中にフローのパケットの順序がネットワーク要素によって変更されず、ネットワーク要素でパケットが受信された順序と同じ順序でパケットが出力されることを保証する必要がある。いくつかのアプローチを使用して、ネットワーク要素で受信されたパケットを複数のパケット処理スレッドに分散することができる。
【００１９】
第１のアプローチによれば、フローのパケットが、処理するために同じパケット処理スレッドにマッピングされる。この例では、パケットはパケット処理スレッドにおいて処理され、パケットが受信された順序でネットワーク要素から出力される。ただし、このアプローチは、同じフローからのパケットのバーストが存在する場合、またはフローが重いフロー（「エレファントフロー」と呼ばれる場合もある）である場合、適切に実行されず、その結果、パケットの喪失につながる可能性のあるパケット処理スレッドのオーバーサブスクリプションが発生する。エレファントフローが、パケット処理スレッドの処理時間の大部分（またはすべて）を占める場合がある。加えて、重いフローが存在しない場合でも、多数の相対的に重いパケットフローまたは多数のフロー（ハッシュスキュー）が同じパケット処理スレッドにマッピングされたときに、パケット処理スレッドでオーバーサブスクリプションが発生することがある。パケット処理スレッドのオーバーサブスクリプションは、スレッドで未処理のキューが発生することにつながり、その結果、パケットが喪失する。一方、ネットワーク要素内の他のパケット処理スレッドには、パケットの処理に使用できる十分な計算サイクルがまだ存在している可能性がある。
【００２０】
パケット処理スレッドのオーバーサブスクリプションを防ぐために、前述の例で説明したように、第２のアプローチが実行される。この第２のアプローチでは、ネットワーク要素で受信されたパケットが、負荷バランシング技術に従ってパケット処理スレッドに分散される。このアプローチによれば、重いフローからのパケットであるかどうかにかかわらず、受信されたすべてのパケットに対して負荷バランシングが実行される。異なるパケット処理スレッドが各パケットを処理するのにかかる時間は異なる可能性があるため、パケットを出力する前に、フローのパケットの順序を変更することが必要になる場合がある。それによって、パケットが受信された順序と同じ順序でネットワーク要素によってパケットが転送されることを保証する。１つのアプローチによれば、ネットワーク要素の入り口で、シーケンス番号をパケットに割り当てることができる。パケットの処理後、ネットワーク要素からの出力前に、割り当てられたシーケンス番号を使用してパケットの順序を変更できる。パケットの処理後にパケットの順序が変更されることを保証するために、少なくとも１つの先行するパケットがまだ処理されていないすべてのパケットを、グローバルバッファ領域に格納する。したがって、パケット処理スレッドにおいて受信されて処理されたすべてのパケットは、パケットの順序を出力前に変更するために、グローバルバッファ領域内のキューに入れられる可能性がある。順序変更は、パケット処理スレッドを背景にして遂行されるインライン関数として実装するか、または別のスレッドとして実装することができ、後者の場合、すべてのパケット処理スレッドは、処理済みのパケットを順序変更スレッドのキューに追加する。この後者の例では、順序変更スレッドは、このキューのサービスを継続的に提供し、パケットをバッファ領域に追加するか、または先行するすべてのパケットがすでに処理済みになっている場合、パケットをネットワーク要素の外に伝送する。すべてのパケットに対して負荷バランシングが実行されるアプローチにおいて、すべてのフローに属しているパケットにはペナルティが課される。これは、それらすべてのパケットに対して負荷バランシングが実行され、ネットワーク要素によって出力される前にそれらのパケットの順序を変更することが必要になる可能性があるためである。このペナルティは、ごく少数のフロー（例えば重いフロー）に対してのみ負荷バランシングが必要になる場合でも適用可能であり、負荷バランシングへの再分類および順序変更を行わずにフローの大部分を伝送することができる。さらに、順序変更がインライン関数として実装される例では、関連するステージング領域（すなわち、バッファ領域）にアクセスするために、パケット処理スレッド間の全体的同期が必要になる。
【００２１】
パケット処理における適応負荷バランシング
高性能なパケット処理を実装するという課題を前提にすると、パケット処理ネットワーク要素内に適応負荷バランシングが存在することが望ましく、それによって効率的なパケットの転送が可能になり、必要な場合にのみパケットの順序変更を実行する。
【００２２】
図１に、本発明の一実施形態に従うパケットの適応負荷バランシングのためのネットワークデバイス内の操作を示す。ネットワークデバイスは、マッピングブロック１１０を含むように設定または適応されたネットワーク要素１００、１つまたは複数のバケット１２０、負荷バランサー１３０、性能監視モジュール１４０、１つまたは複数のパケット処理スレッド１５０のセット、および順序変更ブロック１６０を含む。タスクボックス１〜７は、本発明の一実施形態に従って操作が実行される順序を示している。
【００２３】
タスクボックス１では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、マッピングブロック１１０に転送される。タスクボックス２で、マッピングブロック１１０がパケットをバケット１２０Ａ〜Ｎのうちの１つにマッピングする。一実施形態では、バケット１２０Ａ〜Ｎそれぞれが、パケット処理スレッド１５０Ａ〜Ｂのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック１１０はパケットを、第１のパケット処理スレッド１５０Ａに関連付けられたバケット１２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック１１０はパケットをバケット１２０Ｎにマッピングすることができ、次にバケット１２０Ｎが第２のパケット処理スレッド１５０Ｂに関連付けられる（図示されていない）。
【００２４】
タスクボックス３で、性能モニタ１４０が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。パケット処理スレッド１５０Ａおよび１５０Ｂはそれぞれ、パケットを受信するための各キュー１５５Ａ〜１５５Ｂを持っている。一部の実施形態によれば、バケット１２０それぞれが、パケット処理スレッドのキューに関連付けられ、処理するための受信パケットをこのキューに供給する。性能モニタ１４０は、各キューの状態を監視し、キューで未処理が発生したかどうかを決定する。
【００２５】
性能モニタ１４０が、パケット処理スレッド１５０Ａまたは１５０Ｂそれぞれでオーバーサブスクリプションが発生したかどうかを決定した後に、バケットがタスクボックス４で、パケットをパケット処理スレッド１５０のうちの１つにマッピングするように設定される。バケット（例えばバケット１２０Ａ）のパケットを、バケットに関連付けられたパケット処理スレッド（例えば、図１に示されているように、第１のパケット処理スレッド１５０Ａ）にマッピングすることができる。あるいは、負荷バランシング方法に従ってパケット処理スレッド１５０のうちの１つにさらにマッピングされる前に、パケットを負荷バランサー１３０にマッピングすることができる。直接マッピング（バケット−関連付けられたスレッド間）または負荷バランシングマッピング（バケット−負荷バランサー−パケット処理スレッド間）の選択は、バケットに関連付けられたパケット処理スレッドの状態によって決定される。性能モニタ１４０が、パケット処理スレッドでオーバーサブスクリプションが発生したと決定した場合、タスクボックス５で、このスレッドに関連付けられたバケットのパケットが、負荷バランサー１３０において実装された方法に従って複数のパケット処理スレッドに分散される。性能モニタ１４０が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、このスレッドに関連付けられたバケットのパケットがこのパケット処理スレッドにマッピングされる（すなわち、直接マッピング）。
【００２６】
タスクボックス６で、各キュー１５５Ａ〜１５５Ｂのパケットが対応するパケット処理スレッド１５０Ａ〜１５０Ｂにおいて処理される。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、２つ以上のスレッドを１つのプロセッサコア上で実行することができる。各パケット処理スレッド１５０Ａ〜Ｂは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス（ＮＩ）に出力されるか、または削除されるように、パケットを処理する。図１では２つのパケット処理スレッド１５０Ａおよび１５０Ｂが示されているが、本発明の代替の実施形態は任意の数のパケット処理スレッドを有することができる。
【００２７】
タスクボックス７でパケットが、既定の順序に従って転送される（すなわち、削除されるか、または適切なＮＩに出力される）。この順序は、ネットワーク要素での受信時の他のパケットに対するパケットの位置に基づく。一実施形態に従って、フローのパケットは、既定の順序（「入口の順序」）で受信され、同じバケットにマッピングされ、同じパケット処理スレッドに直接マッピングされる。この実施形態では、パケットを、順序変更ブロック１６０で順序変更を行う必要なく、この同じ順序で出力することができる。これらの一部の実施形態では、順序変更ブロック１６０をスキップすることができ、パケットをパケット処理スレッドで処理した後に出力することができる。別の実施形態に従って、フローのパケットが入り口の順序で受信され、１つのパケット処理スレッドに直接マッピングされるのではなく複数のパケット処理スレッドを使用して、パケットに対して負荷バランシングが実行される。この処理は、例えば、関連するパケット処理スレッドでオーバーサブスクリプションが発生したと決定された場合に発生する。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。したがってパケットは、入り口の順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。
【００２８】
タスクボックス１〜７のタスクは連続的順序で説明されているが、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる（直接的なタスクボックス４または間接的なタスクボックス５）。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
【００２９】
パケット処理において適応負荷バランシングを実装するためのフロー図
本明細書において前述したように、ネットワーク要素は、パケット処理において適応負荷バランシングを実行するように設定または適応される。ネットワーク要素で受信されたフローのパケットは、関連するパケット処理スレッドにマッピングされる。あるいはパケットは、関連するパケット処理スレッドでオーバーサブスクリプションが発生し、そのキューで未処理が発生したときに、複数のパケット処理スレッドに分散される。フローのパケットは、関連するパケット処理スレッドの負荷における変化に応答して、パケット処理スレッドにマッピングされること、または複数のスレッド間の負荷バランシングが実行されることから動的にシフトすることができる。
【００３０】
パケット処理における適応負荷バランシングを実装するネットワーク要素の操作は、図２および図３のフロー図を参照して説明される。ただし、パケット処理モジュール１００の操作は、図２および図３のフロー図を参照して説明される処理以外の処理を実行することができ、図２または図３のフロー図を参照して説明される実施形態は、図１を参照して説明された実施形態以外の本発明の実施形態によって実行できるということが理解されるべきである。
【００３１】
図２〜３は、本発明の一実施形態に従ってネットワークデバイス内で適応負荷バランシングを実行するための操作のフロー図を示している。ブロック２０２では、パケットは、ネットワークデバイスに実装されたネットワーク要素で受信される。一部の実施形態では、パケットはネットワークインターフェイス（ＮＩ）で受信され、マッピングブロック１１０に転送される。次にフローはブロック２０４に進む。
【００３２】
ブロック２０４で、マッピングブロック１１０がパケットをバケット１２０Ａ〜Ｎのうちの１つにマッピングする。一実施形態では、バケット１２０Ａ〜Ｎそれぞれが、パケット処理スレッド１５０Ａ〜Ｂのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック１１０はパケットを、第１のパケット処理スレッド１５０Ａに関連付けられたバケット１２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック１１０はパケットをバケット１２０Ｎにマッピングすることができ、次にバケット１２０Ｎが第２のパケット処理スレッド１５０Ｂに関連付けられる（図示されていない）。一実施形態では、マッピングはハッシュメカニズムに従って実行され、バケットはハッシュバケットである。例えば、パケットのＩＰヘッダーからの情報（送信先アドレス、送信元アドレス、ポート番号など）をハッシュテーブル内のインデックスとして使用して、パケットをマッピングするためのバケット識別情報を取り出すことができる。
【００３３】
フローは、特定のビットパターンに一致するヘッダーを持つ一連のパケットとして規定することができ、その意味で、従来のＩＰ転送もフローに基づく転送であり、そのフローは、例えば送信先ＩＰアドレスによって規定される。ただし、他の実装では、フローの規定に使用される特定のビットパターンは、パケットヘッダーにさらに多くの（例えば１０以上の）フィールドを含むことができる。一実施形態に従って、フローのパケットは同じバケットにマッピングされる。さらに、１つまたは複数のフローを同じバケットにマッピングすることができる。
【００３４】
ブロック２０６で、性能モニタ１４０が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。図１に示されているように、パケット処理スレッド１５０Ａおよび１５０Ｂはそれぞれ、処理されるパケットを受信するための各キュー１５５Ａ〜１５５Ｂを持っている。一部の実施形態によれば、バケット１２０それぞれが、パケット処理スレッドのキューに関連付けられ、パケットをこのキューに供給する。性能モニタ１４０は、各キューの状態を監視し、キューで未処理が発生したかどうかを決定するように設定される。一部の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ１４０は特定の瞬間に関連するキューの長さを測定し、キューの長さが既定のしきい値を超えているかどうかを決定する。代替の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ１４０は関連するキューの指数関数的加重移動平均（ＥＷＭＡ）キュー長を決定する。ＥＷＭＡ平均キュー長は、既定の期間にわたる平均キュー長の値を提供し、性能モニタ１４０が、パケットの短いバースト以外は正常な挙動のフローにおいて、パケットの短いバーストを考慮したり無視したりできるようにする。性能モニタ１４０は、ＥＷＭＡキュー長が既定のしきい値を超えたかどうかを決定し、対応するキューで未処理が発生してパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。
【００３５】
ブロック２０６で性能モニタ１４０が、パケット処理スレッド１５０Ａまたは１５０Ｂでオーバーサブスクリプションが発生したと決定した場合、フローは操作２１４に進む。あるいは、ブロック２０６で性能モニタ１４０が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、フローは操作２０８に進む。一部の実施形態では、キュー１５５Ａ〜１５５Ｂの監視が定期的に実行され、キューの不正な挙動（例えば、ＥＷＭＡキュー長が既定のしきい値を超えた）が決定されたときに、フローは必ずブロック２１４に進む。
【００３６】
ブロック２０８で、パケット処理スレッドに関連付けられたバケットに含まれるパケットが、対応するスレッドにマッピングされる。本発明の一実施形態では、キュー１５５Ａの状態の監視時に、性能モニタ１４０が、パケット処理スレッド１５０Ａでオーバーサブスクリプションが発生していないと決定する。バケット１２０Ａにマッピングされたパケットは、次に、それらのバケットに対応するパケット処理スレッド１５０Ａに直接マッピングされ、対応するキュー１５５Ａに追加される。次に、フローはブロック２０８からブロック２１０に進み、ブロック２１０でキューのパケットが、パケット処理スレッドにおいて処理される。
【００３７】
一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、２つ以上のスレッドを１つのプロセッサコア上で実行することができる。パケット処理スレッド１５０Ａ〜Ｂは、転送テーブル内のエントリに基づき、一致する転送テーブルのエントリにおいて識別された一連の動作をパケットに対して実行することによって、転送の決定を行い、パケットに対する動作を実行するように設定される。転送テーブルのエントリは、パケット分類操作（図１に示されていない）の間に識別することができる。転送テーブルのエントリは、特定の一致基準のセット（パケットヘッダー内の特定のフィールドに関して、または他のパケットの内容に関して照合機能によって規定される、値またはワイルドカードのセット、あるいは特定の値／ワイルドカードと比較する必要のあるパケットのどの部分かの指示）、および一致するパケットの受信時に実行するための、データプレーンに対する１つまたは複数の動作のセットの両方を含む。例えば動作は、特定のポートを使用するパケットに関してヘッダーをパケットにプッシュすること、パケットをデータで満たすこと、または単にパケットを削除することであることができる。したがって、特定の伝送制御プロトコル（ＴＣＰ）送信先ポートを使用するＩＰｖ４／ＩＰｖ６パケットの場合の転送テーブルのエントリは、それらのパケットを削除する必要があることを指定する動作を含むことができる。
【００３８】
パケット処理スレッド１５０は、品質サービス機能（例えば、トラフィック分類マーキング、トラフィックの調整およびスケジューリング）、セキュリティ機能（例えば、加入者宅内機器をネットワークからの攻撃から保護し、不正な形式のルートの通知を防ぐためのフィルタ）、および管理機能（例えば、完全な検出および処理）などの転送機能を含むようにさらに設定または適応することができる。一実施形態では、パケット処理スレッド１５０は、必要なカプセル化の変更を行ってパケットを転送することができる。例えば、ＩＰルータ機能を実装するネットワーク要素のパケット処理スレッドは、ＩＰパケット内のＩＰヘッダー情報の一部に基づいて、ＩＰパケットに対する転送、変更、削除、遅延、またはその他の処理を実行することができ、ＩＰヘッダー情報は、送信元ＩＰアドレス、送信先ＩＰアドレス、送信元ポート、送信先ポート（「送信元ポート」および「送信先ポート」は、ＮＤの物理ポートとは対照的に、本明細書ではプロトコルポートを指す）、トランスポートプロトコル（例えば、ユーザデータグラムプロトコル（ＵＤＰ）（インターネットエンジニアリングタスクフォース（ＩＥＴＦ）リクエストフォーコメンツ（ＲＦＣ）７６８、２４６０、２６７５、４１１３、および５４０５）、伝送制御プロトコル（ＴＣＰ）（ＩＥＴＦ  ＲＦＣ  ７９３および１１８０）、および差別化サービス（ＤＳＣＰ）の値（ＩＥＴＦ  ＲＦＣ  ２４７４、２４７５、２５９７、２９８３、３０８６、３１４０、３２４６、３２４７、３２６０、４５９４、５８６５、３２８９、３２９０、および３３１７））を含む。上の実施形態は、２つのパケット処理スレッド１５０Ａおよび１５０Ｂに関して説明されたが、代替の実施形態は任意の数のパケット処理スレッドを有することができる。
【００３９】
次に、フローは操作２１０から２１２に進む。ブロック２１２で、パケット処理スレッドにおけるパケットの処理の後に、（先行する操作で行われた転送の決定がパケットの削除ではなかった場合）既定の順序に従ってパケットが転送される。再び操作２０４を参照すると、一実施形態に従って、１つのフローのパケットが同じバケット（例えばバケット１２０Ａ）にマッピングされる。この実施形態によれば、バケット１２０Ａに関連付けられたパケット処理スレッド１５０Ａでオーバーサブスクリプションが発生していないと決定された場合、バケット１２０Ａにマッピングされたパケットは、キュー１５５Ａに追加され、ネットワーク要素でパケットが受信された順序（すなわち、入り口の順序）で処理され、したがって同じ順序で出力されることが可能である。代替の実施形態によれば、複数のフローからのパケットが同じバケット１２０Ａにマッピングされる。この代替の実施形態では、バケット１２０Ａに関連付けられたパケット処理スレッド１５０Ａでオーバーサブスクリプションが発生していないと決定され、各フローのパケットがキュー１５５Ａにマッピングされる。次にパケットは、入り口の順序で処理され、したがって同じ順序で出力される。
【００４０】
すぐ上で説明された実施形態では、フローのパケットはネットワーク要素で受信された順序と同じ順序で処理され、パケットを出力する前のパケットの順序変更は不要である。出力の順序は、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置によって規定される。あるいは、出力の順序は、ネットワーク要素におけるパケットの受信時の同じバケットにマッピングされた複数のフローの他のパケットに対するパケットの位置によって規定される。したがって、処理済みのフローを入り口の順序に従って出力する必要性は、パケット処理スレッドのキューで未処理が発生していない場合、パケットの効率的な転送を行いながら、ネットワーク要素によって満たされる。
【００４１】
再び操作２０６を参照すると、性能モニタ１４０が、パケット処理スレッド（例えばパケット処理スレッド１５０Ｂ）でオーバーサブスクリプションが発生していないと決定した場合、フローはブロック２０６からブロック２１４に進む。図３は、本発明の一実施形態に従って、パケット処理スレッドでオーバーサブスクリプションが発生していると決定された場合にネットワーク要素内で実行される詳細な操作を示している。ブロック３０２で、性能モニタ１４０は、オーバーサブスクリプションが発生したスレッドに関連付けられたバケットの状態を評価して、このバケットがオーバーサブスクリプションの原因であるかどうかを決定する。例えば、性能モニタ１４０は、バケットの状態が既定のしきい値よりも高いかどうかを決定することができる。バケットのカウンタ値に基づいてバケットの状態を評価することができ、このカウンタ値は、バケット内のパケットの数および／またはバケットのパケットレートの指数関数的加重移動平均（ＥＷＭＡ）値を示す。一例を挙げると、パケットカウンタおよび／またはＥＷＭＡパケットインクリメントがバケットごとに維持される。ＥＷＭＡパケットインクリメントは、周期的な時間間隔で受信される差分パケットのサンプリングによって決定できる。ＥＷＭＡパケットインクリメントは、最近ハッシュバケットにマッピングされたパケットの数を示す。パケット処理スレッドでオーバーサブスクリプションが発生したと決定されたときに、性能モニタ１４０はオーバーサブスクリプションが発生したスレッドにマッピングされた各バケットの状態を評価できる。
【００４２】
一実施形態では、１つのバケットが、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられる。この実施形態では、キューで未処理が発生したと決定されたときに、フローはブロック３０４に進む。別の実施形態では、複数のバケットが、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられ、性能モニタ１４０が、既定のしきい値を超えた状態にあるバケット（または、複数のバケットがオーバーサブスクリプションを引き起こしている場合は複数のバケット）を決定する。例えば、既定のしきい値よりも高い値のＥＷＭＡパケットインクリメントを持つバケットは、それに比例して高いトラフィックをパケット処理スレッドに最近送信しており、負荷バランシングが実行される必要がある。バケット１２０は、重いフロー（例えばエレファントフロー）がバケットにマッピングされた場合、またはマッピング方法（マッピングブロック１１０においてインクリメントされる）が同じバケットへの多数のフローのマッピング（ハッシュスキュー）につながる場合、パケット処理スレッドのオーバーサブスクリプションを引き起こす可能性がある。
【００４３】
ブロック３０４で、パケット処理スレッドのオーバーサブスクリプションを引き起こすと決定されたバケットごとに負荷バランシングフラグがセットされる。一実施形態では、図１に示されているように、１つのバケットがオーバーサブスクリプションの原因である場合があり、したがって、バケット１２０Ｎの負荷バランシングフラグがセットされるが、バケット１２０Ａ、１２０Ｂ、および２１０Ｃの負荷バランシングフラグは設定されない（すなわち、クリアされている）。別の実施形態では、複数のバケットがオーバーサブスクリプションの原因である場合があり（図示されていない）、それらのバケットの各負荷バランシングフラグがセットされる。すべての実施形態では、オーバーサブスクリプションを引き起こしていないバケットの負荷バランシングフラグがクリアされる。加えて、バケットの負荷バランシングフラグがセットされた場合、このフラグは、このバケットに対して負荷バランシングを実行する必要があることを示している。一実施形態では、負荷バランシングが実行されるバケットの状態が定期的に監視され、状態が既定のしきい値を下回ったときに負荷バランシングフラグがクリアされ、対応するバケットが操作の直接マッピングモードにシフトし、このモードでは、負荷バランシングが実行されずに、フローが関連するパケット処理スレッドに直接マッピングされる。一部の実施形態では、関連するパケット処理スレッドでオーバーサブスクリプションが発生しなくなったと決定された場合、バケットの負荷バランシングフラグがクリアされる。性能モニタ１４０は、スレッドのキューで未処理が発生しなくなったと決定されたときに、関連するバケットの負荷バランシングフラグのクリアを引き起こすことができる。フローはブロック３０４からブロック３０６に進む。
【００４４】
図２のブロック２０６に戻ると、代替の実施形態では、パケット処理スレッドのオーバーサブスクリプションの決定時に、ブロック３０２および／または３０４をスキップすることができ、ブロックの２０６の実行後にブロック３０６が直接実行される。
【００４５】
これらの実施形態に従って、バケットの状態が、フローのパケットが同じパケット処理スレッドにマッピングされる第１のモード（「直接マッピング」）から、フローのパケットが複数のパケット処理スレッドに分散される第２のモード（「負荷バランシング」）に動的にシフトされる。第１のモードから第２のモードへのバケットのシフトは、このバケットに関連付けられたパケット処理スレッドのキューで未処理が発生したかどうかの決定に基づく。さらに、第２のモードから第１のモードへのバケットのシフトは、バケットの状態および／またはこのバケットに関連するスレッドのキューの状態に基づくことができる。スレッドのキューおよび／またはバケットの状態の定期的な監視は、バケットを適切なモードに動的にセットすることを可能にし、それによってパケットの転送を効率的に実行しながら、必要とされない場合にフローに対して負荷バランシングを実行しないようにする。スレッドのキューの定期的な監視は、適切なモード（すなわち、直接マッピングまたは負荷バランシング）に従って、パケット処理スレッドへのフローのパケットの動的な分散を可能にし、それによってネットワーク要素内でパケットを効率的に処理しながら、必要とされない場合にフローの負荷バランシングおよびパケットの順序変更を実行しないようにする。
【００４６】
ブロック３０６で、オーバーサブスクリプションが発生したパケット処理スレッドに関連付けられたバケットに含まれるパケットが、負荷バランサー１３０に転送される。例えば、パケット処理スレッド１５０Ｂでオーバーサブスクリプションが発生したことが性能モニタ１４０によって決定されたときに、バケット１２０Ｎのパケットが負荷バランサー１３０に転送される。その後、パケットは、負荷バランシングメカニズムに従って、処理するために複数のパケット処理スレッド１５０に分散される。
【００４７】
一実施形態では、パケットはすべてのパケット処理スレッド（例えば１５０Ａおよび１５０Ｂ）に分散される。あるいは、パケットはパケット処理スレッド１５０のサブセットに分散される。例えば、スレッド１５０Ｂでオーバーサブスクリプションが発生したと決定された場合、オーバーサブスクリプションが発生したスレッド１５０Ｂを除くすべてのパケット処理スレッドにパケットを分散するように、負荷バランサーを設定することができる。バケットのパケットの負荷バランシングは、ラウンドロビンメカニズム、ランダム分散メカニズム、またはその他の要因（例えば、経験則、現在のワークロード、パケット処理スレッドでのキューの長さなど）を考慮できる別の分散メカニズムに従って実行できる。一実施形態によれば、１つのフローのパケットがバケットに含まれ、複数のパケット処理スレッドに分散される。別の実施形態では、複数のフローのパケットがバケットに含まれ、複数のパケット処理スレッドに分散される。次に、フローはブロック３０８に進む。
【００４８】
ブロック３０８で、パケットが、割り当てられたパケット処理スレッドで処理される。ブロック３０８でのパケット処理スレッドにおけるパケットの処理は、ブロック２１０で実行される処理と同様であることができる。次に、フローはブロック３１０に進む。
【００４９】
ブロック３１０で、既定の順序に従ってパケットが転送される（例えばパケットは、削除されない限り適切なＮＩを介して出力される）。既定の順序は、ネットワーク要素における受信時の他のパケットに対するパケットの位置に基づく。一実施形態によれば、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置に従って、パケットが転送される。別の実施形態では、ネットワーク要素におけるパケットの受信時の複数のフローの他のパケットに対するパケットの位置に従って、パケットが転送される。パケットの処理にかかる時間は、スレッドごとに変わる場合がある。したがって、パケットの入り口の順序に従ってパケットが転送されることを保証するために、ネットワーク要素からパケットが出力される前に、パケットの順序変更が必要になる場合がある。順序変更ブロック１６０は、複数のパケット処理スレッドにおいて処理されたパケットを受信し、パケットを転送する前に、フロー（またはアグリゲートフロー）のパケットの順序変更を実行する。受信されたパケットごとに、順序変更ブロック１６０は、パケットを出力する前に、ネットワーク要素でそれまでに受信されたすべてのパケットが回収された（削除された、または適切なネットワークインターフェイスに出力された）かどうかを決定する。複数のメカニズムを使用して、順序変更ブロック１６０を実装することができる。一部の実施形態に従って、割り当てられたシーケンス番号に従ってパケットの順序を変更できる。シーケンス番号は、パケットの受信時に、またはネットワーク要素におけるパケットの受信前に、ネットワーク要素内で割り当てることができる。例えば、シーケンス番号は、パケットのメタデータの一部であることができる。図４、図５、および図６を参照して説明される実施形態は、ネットワーク要素内で負荷バランシング実行済みパケットの順序変更を実行するための実施形態例を示す。
【００５０】
パケットの順序付けおよび順序変更
図４は、本発明の一実施形態に従う、パケット処理における適応負荷バランシングのためのネットワークデバイス内の操作を示している。図４は、図１に類似する要素およびタスクボックスを含む。同じまたは類似する参照は、同じまたは類似する機能を持っている要素またはコンポーネントを示している。図１を参照して説明されたモジュールに加えて、ネットワーク要素４００がシーケンス割り当て４１０を含むようにさらに設定される。タスクボックス１〜８は、本発明の一実施形態に従って操作が実行される順序を示している。
【００５１】
タスクボックス１では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て４１０に転送される。タスクボックス２．ａで、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック１６０で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる番号が割り当てられるようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー（例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど）のパケットに、同じシーケンスの異なる番号が割り当てられるようにする。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
【００５２】
タスクボックス２．ｂで、マッピングブロック１１０が、例えばハッシュメカニズムに従って、パケットをバケット１２０Ａ〜Ｎのうちの１つにマッピングする。一実施形態では、バケット１２０Ａ〜Ｎそれぞれが、パケット処理スレッド１５０Ａ〜Ｂのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック１１０はパケットを、第１のパケット処理スレッド１５０Ａに関連付けられたバケット１２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック１１０はパケットをバケット１２０Ｎにマッピングすることができ、次にバケット１２０Ｎが第２のパケット処理スレッド１５０Ｂに関連付けられる（図示されていない）。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック１１０を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造（またはキー）の構築に使用される（例えば、第１のキーフィールドを送信元媒体アクセス制御（ＭＡＣ）アドレスにすることができ、第２のキーフィールドを送信先ＭＡＣアドレスにすることができる）。
【００５３】
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のどのエントリ（転送テーブルエントリまたはフローエントリとも呼ばれる）かを決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応／一致することができ、その場合、システムは、規定された方式（例えば、一致する最初の転送テーブルエントリを選択する）に従って、多くの転送テーブルエントリから１つの転送テーブルエントリを決定するように通常は設定される。
【００５４】
タスクボックス３．ａで、性能モニタ１４０が、バケットに関連付けられたパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。性能モニタ１４０は、各キューの状態を追跡し、キューで未処理が発生したかどうかを決定する。タスクボックス３．ｂで、性能モニタ１４０が、各バケットの状態を追跡するようにさらに設定または適応される。バケットの状態は、最近バケットにマッピングされたパケットの数を示す。キューのオーバーサブスクリプションの決定時に、性能モニタ１４０は、キューのオーバーサブスクリプションを引き起こすと決定されたバケットごとに、タスクボックス３．ｃでバケットの状態を評価し、負荷バランシングフラグをセットする。
【００５５】
性能監視１４０が、パケット処理スレッド１５０Ａまたは１５０Ｂそれぞれでオーバーサブスクリプションが発生したかどうかを決定した後に、バケットがタスクボックス４で、パケットをパケット処理スレッド１５０のうちの１つにマッピングするように設定または適応される。バケット（例えばバケット１２０Ａ）のパケットを、バケットに関連付けられたパケット処理スレッド（例えば、図１に示されているように、第１のパケット処理スレッド１５０Ａ）にマッピングすることができる。あるいは、負荷バランシング方法に従ってパケット処理スレッド１５０のうちの１つにさらにマッピングされる前に、パケットを負荷バランサー１３０にマッピングすることができる。直接マッピング（バケット−関連付けられたスレッド間）または負荷バランシングマッピング（バケット−負荷バランサー−パケット処理スレッド間）の選択は、バケットに関連付けられたパケット処理スレッドの状態によって決定される。性能モニタ１４０が、パケット処理スレッドでオーバーサブスクリプションが発生したと決定した場合、このスレッドに関連付けられたバケットのパケットが、負荷バランサー１３０に実装された方法に従って複数のパケット処理スレッドに分散される。性能モニタ１４０が、パケット処理スレッドでオーバーサブスクリプションが発生していないと決定した場合、このスレッドに関連付けられたバケットのパケットがこのパケット処理スレッドにマッピングされる（すなわち、直接マッピング）。別の実施形態によれば、直接マッピングと負荷バランシングマッピングの間の選択が、バケットの状態および負荷バランシングフラグに基づいてさらに決定される。バケットの負荷バランシングフラグがセットされた場合、このバケットのパケットが、複数のパケット処理スレッドに分散するために負荷バランサー１３０に伝送される。バケットの負荷バランシングフラグがクリアされているか、またはセットされていない場合、パケットは関連するパケット処理スレッドに直接マッピングされる。
【００５６】
タスクボックス６で、各キュー１５５Ａ〜１５５Ｂのパケットが対応するパケット処理スレッド１５０Ａ〜１５０Ｂにおいて処理される。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、２つ以上のスレッドを１つのプロセッサコア上で実行することができる。各パケット処理スレッド１５０Ａ〜Ｂは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス（ＮＩ）に出力されるか、または削除されるように、パケットを処理する。図１では２つのパケット処理スレッド１５０Ａおよび１５０Ｂが示されているが、本発明の代替の実施形態は任意の数のパケット処理スレッドを有することができる。
【００５７】
タスクボックス７．ａで、処理済みのパケットの受信時に、順序変更ブロック１６０が、このパケットを転送する前に、受信されたパケットに先行するパケットがすでに転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック１６０をスキップすることができ、パケットを、順序変更することなく、パケット処理スレッドで処理した後に出力することができる。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、タスク２．ａで割り当てられたシーケンス番号に従って処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。タスクボックス８で、パケットが入り口の順序で出力される。
【００５８】
タスクボックス１〜８のタスクが連続的順序で説明されていても、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる（直接的なタスクボックス４または間接的なタスクボックス５）。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
【００５９】
図５および図６のフロー図の操作は、図４の実施形態例を参照して説明される。ただし、図４を参照して説明された実施形態以外の本発明の実施形態によってこれらのフロー図の操作を実行することができ、図４を参照して説明された本発明の実施形態は図５または図６のフロー図を参照して説明された処理とは異なる処理を実行できるということが理解されるべきである。
【００６０】
図５は、パケット処理スレッドがバケットにマッピングされた場合にネットワーク要素内で実行される詳細な操作を示している。ブロック５０２で、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、フローのパケットの順序を変更して、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック１６０で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる番号が割り当てられようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー（例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど）のパケットに、同じシーケンスの異なる番号が割り当てられるようにする。一実施形態では、ネットワーク要素で受信されたすべてのパケットに、単一の番号のグローバルプールからシーケンス番号が割り当てられる。言い換えると、ネットワーク要素で（１つまたは複数のポートを介して）受信された異なるフローからのすべてのパケットに、グローバルプールに従って番号が付けられる。別の実施形態では、個別のシーケンス番号のプールを使用できる。特定のプールから番号が割り当てられるように、複数のフローをグループ化できる。例えば、パケットは、入り口で基本的な分類が適用され、シーケンス番号プールのうちの１つにマッピングされることが可能である。その場合、プールを識別するために、パケットに関連付けられたメタデータに、プール識別情報（プールＩＤ）を付与することができる。割り当てられたシーケンス番号およびプールＩＤは、フローのパケットの順序を変更し、パケットに割り当てられたプールに関して、入った順序と同じ順序でパケットがネットワーク要素を出ることを保証するために、後で順序変更ブロック１６０で使用される。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
【００６１】
ブロック５０４で、マッピングブロック１１０が、例えばハッシュメカニズムに従って、パケットをバケット１２０Ａ〜Ｎのうちの１つにマッピングする。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック１１０を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造（またはキー）の構築に使用される（例えば、第１のキーフィールドを送信元媒体アクセス制御（ＭＡＣ）アドレスにすることができ、第２のキーフィールドを送信先ＭＡＣアドレスにすることができる）。
【００６２】
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のエントリ（転送テーブルエントリまたはフローエントリとも呼ばれる）を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応／一致することができ、その場合、システムは、規定された方式（例えば、一致する最初の転送テーブルエントリを選択する）に従って、多くの転送テーブルエントリから１つの転送テーブルエントリを決定するように通常は設定される。
【００６３】
図４に示された実施形態では、バケット１２０Ａ〜Ｎそれぞれが、パケット処理スレッド１５０Ａ〜Ｂのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック１１０はパケットを、第１のパケット処理スレッド１５０Ａに関連付けられたバケット１２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック１１０はパケットをバケット１２０Ｎにマッピングすることができ、次にバケット１２０Ｎが第２のパケット処理スレッド１５０Ｂに関連付けられる（図示されていない）。マッピングブロック１１０はパケットヘッダーを構文解析し、ハッシュテーブル検索を実行して、パケットをバケット（本明細書では「ハッシュバケット」と呼ばれる）にマッピングする。ハッシュバケットは、パケットを処理するパケット処理スレッドを提供する。一例を挙げると、マッピングは、（Ｎ  ｘ  合計スレッド数）個のエントリを含むハッシュテーブルを介して発生し、Ｎ個のバケットがパケット処理スレッドに関連付けられることができるようにする。数値Ｎは、妥当な大きさの値（例えば１６または３２）にセットできる。ハッシュテーブルは、１つのパケット処理スレッド１５０にマッピングするＮ個の複数のエントリを含む。１つのパケット処理スレッド当たり複数のバケットを使用することで、このスレッドにマッピングされた一連のフローを、より小さいサブセット（すなわち、バケット）に分解することが可能になる。
【００６４】
各ハッシュバケットは、バケットの操作モードを決定する負荷バランシングフラグを持つように設定または適応される。一実施形態では、負荷バランシングフラグがクリアされているか、またはセットされていない場合、バケットのパケットは、このバケットに関連付けられたパケット処理スレッドに直接マッピングされる。これに対して、負荷バランシングフラグがセットされた場合、バケットのパケットが、複数のパケット処理スレッド１５０に分散されるように、負荷バランサー１３０にマッピングされる。一部の実施形態では、バケット１２０の負荷バランシングフラグがデフォルトでクリアされる。バケットに関連付けられたパケット処理スレッドのオーバーサブスクリプションの検出に応答して、負荷バランシングフラグが第１の状態（すなわち、直接マッピング状態）から第２の状態（すなわち、負荷バランシング状態）に切り替えられる。パケット処理スレッドでオーバーサブスクリプションが発生していないことの検出に応答して、負荷バランシングフラグが第２の状態（負荷バランシング状態）から第１の状態（直接マッピング）にさらに切り替えられる。パケット処理スレッドのキューの定期的な監視は、バケットを適切なモードに動的にセットすることを可能にし、それによってパケットの転送を効率的に実行しながら、必要とされない場合にフローに対して負荷バランシングを実行しないようにする。一部の実施形態では、ハッシュバケットにマッピングされるすべてのパケットに関して、バケットの負荷バランシングフラグがメタヘッダーにコピーされる。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかの指示を含む。
【００６５】
一部の実施形態に従って、パケット処理スレッドの状態を決定するために、性能モニタ１４０は特定の瞬間に関連するキューの長さを測定し、キューの長さが既定のしきい値を超えているかどうかを決定する。代替の実施形態によれば、パケット処理スレッドの状態を決定するために、性能モニタ１４０は関連するキューの指数関数的加重移動平均（ＥＷＭＡ）キュー長を決定する。ＥＷＭＡ平均キュー長は、既定の期間にわたる平均キュー長の値を提供し、性能モニタ１４０が、パケットの短いバースト以外は正常な挙動のフローにおいて、パケットの短いバーストを考慮したり無視したりできるようにする。性能モニタ１４０は、ＥＷＭＡキュー長が既定のしきい値を超えたかどうかを決定し、対応するキューで未処理が発生してパケット処理スレッドでオーバーサブスクリプションが発生したかどうかを決定する。
【００６６】
一実施形態に従って、ネットワーク要素で受信されたパケットの各フローが個別のハッシュバケットにマッピングされる（すなわち、ハッシュバケットの数は、ネットワーク要素で受信されるフローの数以上になる）。したがって、パケット処理スレッドの不正な動作およびオーバーサブスクリプションの原因であるフローの識別は、オーバーサブスクリプションを引き起こしているバケットの識別によって実行される。
【００６７】
一実施形態では、負荷バランシングが実行されたバケットにマッピングされたフローは、さまざまな順序で処理することができ、入り口の順序とは異なる順序でパケット処理スレッドによって出力することができる。したがって、負荷バランシングが実行されたフローのパケットは、ネットワーク要素から出力される前に、順序変更することが必要になる場合がある。これに対して、関連するパケット処理スレッドに直接マッピングされたフローは、処理されて入り口の順序に従って出力され、順序変更を必要としない。
【００６８】
図６は、パケットを順序変更するためにネットワーク要素内で実行される詳細な操作を示している。パケット処理スレッド１５０におけるパケットの処理の後に、それらのパケットは順序変更ブロック１６０に転送される。順序変更ブロック１６０は、ネットワーク要素におけるパケットの受信時の同じフローの他のパケットに対するパケットの位置に従って、パケットの順序変更を実行する。ブロック６０４で、フローのパケットの受信時に、順序変更ブロック１６０は、パケットに負荷バランシングフラグがセットされているかどうかを決定し、この負荷バランシングフラグは、パケットが、負荷バランシングが実行されたフローの一部であることを示す。負荷バランシングフラグがセットされている場合、ブロック６０６で順序変更ブロックは、受信されたパケットに先行する少なくとも１つのパケットがパケット処理スレッドによってまだ処理される、つまり、まだ処理を完了していないかどうかを決定する。言い換えると、順序変更ブロック１６０は、受信されたパケットに先行するすべてのパケットが転送されたかどうかを決定する。受信されたパケットに先行するすべてのパケットがすでに処理されて転送された場合、受信されたパケットは、ブロック６１２に示されているように、出力される。少なくとも１つのパケットがまだ処理される、つまり、まだ処理を完了していない場合、受信されたパケットは、それに先行するすべてのパケットが処理されるまで、ブロック６０８でバッファ領域に格納される。負荷バランシングフラグがセットされたパケットは、パケットが入った順序と同じ順序でネットワーク要素を出ることを保証するために、バッファリングされることが可能である。一部の実施形態では、順序変更はブロック５０２で割り当てられるシーケンス番号に基づく。例えば、ネットワーク要素の入り口で複数のパケットが受信され、１〜１０３からシーケンス番号が割り当てられる。この例では、複数のパケットのうちの少なくとも一部が、負荷バランシング手法に従ってパケット処理スレッドにマッピングされる。例えば、パケット１０３に対して負荷バランシングが実行され、このパケットの負荷バランシングフラグがセットされる。パケット処理スレッドにおけるパケット１０３の処理の後に、このパケットは順序変更ブロック１０６で受信される。順序変更ブロック１６０は、シーケンス番号１〜１００を持つパケットを受信して出力しているが、パケット１０１および１０２を受信して出力していない場合がある。パケットの１０３の受信時に、順序変更ブロック１６０は、このパケットの負荷バランシングフラグがセットされているかどうかを（ブロック６０４で）決定し、このパケットに先行するすべてのパケット（パケット１〜１０２）が処理済みであるかどうかを決定する。パケット１０１および１０２がまだ処理されていないと決定されたときに、パケット１０３は、シーケンス番号１０１および１０２を持つ各パケットが受信されて出力されるか、または削除されてそれらのシーケンス番号が解放されるまで、（ブロック６０８で）バッファ領域に格納される。
【００６９】
ブロック６０４を再び参照すると、パケットの負荷バランシングフラグがセットされていないか、またはクリアされている（すなわち、パケットが、同じフローからのすべてのパケットと共に、関連するパケット処理スレッドに直接マッピングされ、このフローに対して負荷バランシングが実行されていない）と決定されたときに、ブロック６１２で順序変更せずにパケットが転送される。あるいは、一部の実施形態では、パケットが出力される前に、このパケットと同じシーケンス番号を持つトークンが作成され、ブロック６１０でバッファ領域に格納されることが可能であり、それとともに実際のパケットが（ブロック６１２で）出力される。例えば、１つのシーケンス番号のプールが、ネットワーク要素で受信された複数のフローに使用される。フローは、インターリーブ方式でネットワーク要素で受信できる。フローの第１のサブセット（例えば、パケットの少なくとも１つのフロー）は、第１のバケットにマッピングされ、フローの第２のサブセット（例えば、パケットの少なくとも１つのフロー）は、第２のバケットにマッピングされる。第２のバケットが負荷バランシングモードであるときに、第１のバケットは直接マッピングモードであることができる。この実施形態によれば、プールからのシーケンス番号を持つ一部のパケットが、それらのパケットが属しているフローの他のパケットに対して正しい順序で処理されている場合があり、第２のサブセットからのパケットが、それらのパケットに対して複数のパケット処理スレッドにわたる負荷バランシングが実行されているため、正しい順序で処理されない場合がある。したがって、第１のサブセットおよび第２のサブセットからのパケットは、（第１のサブセットおよび第２のサブセットからの）パケットがネットワーク要素に入ったときの互いに対する順序とは異なる互いに対してランダムな順序で、順序変更ブロックに到達する場合がある。しかしこの例では、順序変更モジュール１６０は、入り口の順序に従って、プールのシーケンス番号を使用してパケットを順序変更し、出力する。したがって、あるパケットに対して負荷バランシングが実行されない場合でも、順序変更モジュール１６０は、負荷バランシング実行済みパケットを順序変更しながら、負荷バランシングが実行されないパケットのシーケンス番号も考慮することが必要になる場合がある。この例では、トークンのシーケンス番号が、直接マッピングされたフローのパケットを考慮するために使用される。直接マッピングされたフローのパケットが出力されるが、それらのパケットのトークンは（ブロック６１０で）バッファ領域に格納され、同じプールからの負荷バランシング実行済みフローのパケットが正しい入り口の順序で出力されることを保証する。この特定の例では、第１のバケットのフローのパケットが直接出力され、各トークンをバッファ領域に格納することができ、第２のバケットのパケットはバッファ領域に格納される。
【００７０】
一部の実施形態では、ブロック５０２でパケットに、異なる番号のプールからシーケンス番号が割り当てられ、順序変更ブロック１６０においてパケットの順序を変更するときに、プールＩＤが考慮される。各パケットのメタヘッダー内にコピーされたプールＩＤが、順序変更中に使用される。同じプールＩＤを持つパケットに対する負荷バランシング実行済みパケットの順序が変更される。
【００７１】
開示される技術の実施形態は、適応パケット処理メカニズムを提供し、ネットワーク要素で受信されたフローごとに、パケットを転送するパケット処理スレッドの状態に応じて直接フローマッピングと負荷バランシングマッピングの間で選択することによって高性能なパケット処理を提供することを目標とする。開示される技術の実施形態は、フローの大部分が直接マッピング（フロー−スレッド間）に従って処理されることを可能にし、順序変更のコストを防ぐ。開示される技術の実施形態は、負荷バランシングが、必要な場合にのみ、フローに対して負荷バランシングを実行することをさらに可能にする。したがって、適応パケット処理は、必要な場合にのみパケットの順序を変更する。
【００７２】
図１〜６を参照して説明されたパケット処理における適応負荷バランシングの実施形態は、本明細書で詳細に説明されているように、ネットワーク要素（ＮＥ）内で実装することができる。具体的には、開示される技術の実施形態は、仮想ネットワーク要素（ＶＮＥ）の転送仮想ネットワーク機能（転送ＶＮＦ）において実装することができる。
【００７３】
本発明の実施形態を利用するＳＤＮおよびＮＦＶ環境
図７Ａは、本発明の一部の実施形態に従う、例のネットワーク内のネットワークデバイス（ＮＤ）間の接続およびＮＤの３つの実装例を示している。図７Ａに、ＮＤ７００Ａ〜Ｈを示し、Ａ−Ｂ間、Ｂ−Ｃ間、Ｃ−Ｄ間、Ｄ−Ｅ間、Ｅ−Ｆ間、Ｆ−Ｇ間、およびＡ−Ｇ間の線、ならびにＨと、Ａ、Ｃ、Ｄ、およびＧそれぞれとの間の線によってこれらのＮＤの接続を示す。これらのＮＤは、物理デバイスであり、これらのＮＤ間の接続は、無線または有線にすることができる（多くの場合、リンクと呼ばれる）。ＮＤ７００Ａ、Ｅ、およびＦから延びるその他の線は、これらのＮＤがネットワークの入り口ポイントおよび出口ポイントとして機能することを示している（したがって、これらのＮＤはエッジＮＤと呼ばれ、その他のＮＤはコアＮＤと呼ばれる場合がある）。
【００７４】
図７Ａでは、ＮＤの次の２つの実装例を示している。（１）カスタム特定用途向け集積回路（ＡＳＩＣ）および独自オペレーティングシステム（ＯＳ）を使用する専用ネットワークデバイス７０２、および（２）一般的に市販されている（ＣＯＴＳ）プロセッサおよび標準ＯＳを使用する汎用ネットワークデバイス７０４。
【００７５】
専用ネットワークデバイス７０２はネットワークハードウェア７１０を含み、ネットワークハードウェア７１０は、計算リソース７１２（通常は、１つまたは複数のプロセッサのセットを含む）、転送リソース７１４（通常は、１つまたは複数のＡＳＩＣおよび／またはネットワークプロセッサを含む）、および物理ネットワークインターフェイス（ＮＩ）７１６（物理ポートと呼ばれる場合もある）、ならびにネットワークソフトウェア７２０が格納された非一時的機械可読記憶媒体７１８を備える。物理ＮＩはＮＤ内のハードウェアであり、物理ＮＩを介して（例えば、無線ネットワークインターフェイスコントローラ（ＷＮＩＣ）を介して無線で、またはネットワークインターフェイスコントローラ（ＮＩＣ）に接続された物理ポートにケーブルを差し込むことによって）、ＮＤ７００Ａ〜Ｈ間の接続によって示されたネットワーク接続などのネットワーク接続が行われる。操作中に、ネットワークソフトウェア７２０は、ネットワークハードウェア７１０によって実行され、１つまたは複数のネットワークソフトウェアインスタンス７２２のセットをインスタンス化することができる。各ネットワークソフトウェアインスタンス７２２およびこのネットワークソフトウェアインスタンスを実行するネットワークハードウェア７１０の部分（このネットワークソフトウェアインスタンス専用のハードウェアおよび／またはこのネットワークソフトウェアインスタンスによって、ネットワークソフトウェアインスタンス７２２のうちの他のインスタンスと一次的に共有されるハードウェアのタイムスライス）は、個別の仮想ネットワーク要素７３０Ａ〜Ｒを形成する。各仮想ネットワーク要素（ＶＮＥ）７３０Ａ〜Ｒは、制御通信および設定モジュール７３２Ａ〜Ｒ（ローカル制御モジュールまたは制御通信モジュールと呼ばれる場合もある）および転送テーブル７３４Ａ〜Ｒを含み、特定の仮想ネットワーク要素（例えば７３０Ａ）が制御通信および設定モジュール（例えば７３２Ａ）、１つまたは複数の転送テーブル（例えば７３４Ａ）のセット、および仮想ネットワーク要素（例えば７３０Ａ）を遂行するネットワークハードウェア７１０の部分を含むようにする。
【００７６】
専用ネットワークデバイス７０２は、多くの場合、物理的にかつ／または論理的に次を含むと考えられる。（１）制御通信および設定モジュール７３２Ａ〜Ｒを遂行する計算リソース７１２を備えるＮＤ制御プレーン７２４（制御プレーンと呼ばれる場合もある）、および（２）転送テーブル７３４Ａ〜Ｒおよび物理ＮＩ７１６を利用する転送リソース７１４を備えるＮＤ転送プレーン７２６（転送プレーン、データプレーン、または媒体プレーンと呼ばれる場合もある）。例として、ＮＤがルータである（または、ルーティング機能を実装する）場合、ＮＤ制御プレーン７２４（制御通信および設定モジュール７３２Ａ〜Ｒを遂行する計算リソース７１２）は、通常はデータ（例えばパケット）がルーティングされる方法（例えば、データのネクストホップおよびそのデータ用の送信物理ＮＩ）を制御することに参加すること、およびこのルーティング情報を転送テーブル７３４Ａ〜Ｒに格納することに責任を負い、ＮＤ転送プレーン７２６は、物理ＮＩ７１６でこのデータを受信すること、および転送テーブル７３４Ａ〜Ｒに基づいてこのデータを物理ＮＩ７１６のうちの適切な物理ＮＩから転送することに責任を負う。仮想ネットワーク要素７３０Ａ〜Ｒは、図１〜６を参照して説明された本発明の実施形態を実装する適応パケット処理ソフトウェア（ＡＰＰ）７４８のインスタンス７２２Ａ〜７２２Ｒを含むことができる。各インスタンス７２２Ａは、パケット処理スレッドのキューの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス７０２で受信されたパケットを処理および転送するように設定される。
【００７７】
図７Ｂは、本発明の一部の実施形態に従って、専用ネットワークデバイス７０２を実装するための方法の例を示している。図７Ｂは、カード７３８（通常はホットプラグ可能）を含んでいる専用ネットワークデバイスを示している。一部の実施形態では、カード７３８は２種類（ＮＤ転送プレーン７２６（ラインカードと呼ばれる場合もある）として動作する１つまたは複数のカード、およびＮＤ制御プレーン７２４（制御カードと呼ばれる場合もある）を実装するように動作する１つまたは複数のカード）であるが、代替の実施形態は、機能を１つのカードに結合し、かつ／または追加のカードの種類（例えば、カードの１つの追加の種類はサービスカード、リソースカード、またはマルチアプリケーションカードと呼ばれる）を含むことができる。サービスカードは、特殊な処理（例えば、レイヤ４〜レイヤ７のサービス（例えば、ファイアウォール、インターネットプロトコルセキュリティ（ＩＰｓｅｃ）（ＲＦＣ  ４３０１および４３０９）、セキュアソケットレイヤ（ＳＳＬ）／トランスポート層セキュリティ（ＴＬＳ）、侵入検知システム（ＩＤＳ）、ピアツーピア（Ｐ２Ｐ）、ボイスオーバーアイピー（ＶｏＩＰ）セッションボーダーコントローラ、モバイル無線ゲートウェイ（ゲートウェイ汎用パケット無線サービス（ＧＰＲＳ）サポートノード（ＧＧＳＮ）、エボルブドパケットコア（ＥＰＣ）ゲートウェイ）））を提供できる。例として、サービスカードを使用して、ＩＰｓｅｃトンネルを終端し、受付認証アルゴリズムおよび暗号化アルゴリズムを遂行することができる。これらのカードは、バックプレーン７３６として示された１つまたは複数の相互接続メカニズム（例えば、ラインカードを結合する第１のフルメッシュおよびすべてのカードを結合する第２のフルメッシュ）を使用して一緒に結合される。
【００７８】
図７Ａに戻ると、汎用ネットワークデバイス７０４はハードウェア７４０を含み、ハードウェア７４０は１つまたは複数のプロセッサ７４２のセット（多くの場合、ＣＯＴＳプロセッサ）およびネットワークインターフェイスコントローラ７４４（ＮＩＣ、ネットワークインターフェイスカードとも呼ばれる）（物理ＮＩ７４６を含んでいる）、ならびにソフトウェア７５０が格納されている非一時的機械可読記憶媒体７４８を備えている。操作中に、プロセッサ７４２はソフトウェア７５０を遂行してハイパーバイザ７５４（仮想マシンモニタ（ＶＭＭ）と呼ばれる場合もある）およびハイパーバイザ７５４によって実行される１つまたは複数の仮想マシン７６２Ａ〜Ｒをインスタンス化する（これらのインスタンスは、総称してソフトウェアインスタンス７５２と呼ばれる）。仮想マシンは、プログラムを物理的な非仮想マシン上で遂行されているかのように実行する物理マシンのソフトウェア実装である。アプリケーションは、「ベアメタル」ホスト電子デバイス上で実行されるのとは対照的に、そのアプリケーションが仮想マシン上で実行されていることを通常は知らないが、一部のシステムは、最適化の目的で、オペレーティングシステムまたはアプリケーションが仮想化の存在を知ることができる準仮想化を提供する。各仮想マシン７６２Ａ〜Ｒ、およびこの仮想マシン（この仮想マシン専用のハードウェアおよび／またはこの仮想マシンによって仮想マシン７６２Ａ〜Ｒのうちの他の仮想マシンと一次的に共有されるハードウェアのタイムスライス）を遂行するハードウェア７４０の部分は、個別の仮想ネットワーク要素７６０Ａ〜Ｒを形成する。
【００７９】
仮想ネットワーク要素７６０Ａ〜Ｒは、仮想ネットワーク要素７３０Ａ〜Ｒに類似する機能を実行する。例えば、ハイパーバイザ７５４は、ネットワークハードウェア７１０のように見える仮想操作プラットフォームを仮想マシン７６２Ａに提供することができ、仮想マシン７６２Ａを使用して、制御通信および設定モジュール７３２Ａおよび転送テーブル７３４Ａに類似する機能を実装できる（ハードウェア７４０のこの仮想化は、ネットワーク機能仮想化（ＮＦＶ）と呼ばれる場合もある）。したがって、ＮＦＶを使用して、多くのネットワーク機器の種類を業界標準の大容量のサーバハードウェア、物理スイッチ、および物理記憶装置の上で統合し、データセンター、ＮＤ、および加入者宅内機器（ＣＰＥ）内に配置することができる。ただし、本発明の異なる実施形態は、仮想マシン７６２Ａ〜Ｒのうちの１つまたは複数を異なって実装することができる。例えば、本発明の実施形態は、１つのＶＮＥ７６０Ａ〜Ｒに対応する各仮想マシン７６２Ａ〜Ｒを使用して説明されているが、代替の実施形態は、この対応をさらに細かい粒度で実装することができる（例えば、ラインカード仮想マシンがラインカードを仮想化し、制御カード仮想マシンが制御カードを仮想化するなど）。ＶＮＥに対する仮想マシンの対応を参照して本明細書に記載された手法は、そのようなさらに細かい粒度が使用される実施形態にも適用されると理解されるべきである。仮想ネットワーク要素７６０Ａ〜Ｒは、図１〜６を参照して説明された本発明の実施形態を実装する適応パケット処理ソフトウェア（ＡＰＰ）７５０のインスタンス７６６Ａ〜７６６Ｒを含むことができる。各インスタンス７６６Ａは、パケット処理スレッドのキューの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス７０４で受信されたパケットを処理および転送するように設定される。
【００８０】
特定の実施形態では、ハイパーバイザ７５４は、物理イーサネットスイッチに類似する転送サービスを提供する仮想スイッチを含む。具体的には、この仮想スイッチは、仮想マシンとＮＩＣ７４４の間のトラフィック、および必要に応じて仮想マシン７６２Ａ〜Ｒ間のトラフィックを転送する。加えて、この仮想スイッチは、互いに通信することがポリシーによって（例えば、仮想ローカルエリアネットワーク（ＶＬＡＮ）に従うことによって）許可されないＶＮＥ７６０Ａ〜Ｒ間のネットワーク分離を強制することができる。
【００８１】
図７Ａの第３のＮＤの実装例は、ハイブリッドネットワークデバイス７０６であり、カスタムＡＳＩＣ／独自ＯＳとＣＯＴＳプロセッサ／標準ＯＳの両方を１つのＮＤまたはＮＤ内の１つのカードに含んでいる。そのようなハイブリッドネットワークデバイスの特定の実施形態では、プラットフォームＶＭ（すなわち、専用ネットワークデバイス７０２の機能を実装するＶＭ）は、準仮想化をハイブリッドネットワークデバイス７０６内に存在するネットワークハードウェアに提供できる。
【００８２】
上のＮＤの実装例にかかわらず、ＮＤによって実装された複数のＶＮＥのうちの１つが考慮されている（例えば、複数のＶＮＥのうちの１つのみが特定の仮想ネットワークの一部になる）場合、または１つのＶＮＥのみがＮＤによって現在実装されている場合は、短縮された用語であるネットワーク要素（ＮＥ）がこのＶＮＥを指すために使用される場合がある。また、上のすべての実装例において、各ＶＮＥ（例えば、ＶＮＥ７３０Ａ〜Ｒ、ＶＮＥ７６０Ａ〜Ｒ、およびハイブリッドネットワークデバイス７０６内のＶＮＥ）は物理ＮＩ（例えば７１６、７４６）でデータを受信し、このデータを複数の物理ＮＩ（例えば７１６、７４６）のうちの適切な物理ＮＩから転送する。例えば、ＩＰルータ機能を実装するＶＮＥが、ＩＰパケット内のＩＰヘッダー情報の一部に基づいてＩＰパケットを転送する。このＩＰヘッダー情報は、送信元ＩＰアドレス、送信先ＩＰアドレス、送信元ポート、送信先ポート（本明細書では「送信元ポート」および「送信先ポート」は、ＮＤの物理ポートとは対照的に、プロトコルポートを指す）、トランスポートプロトコル（例えば、ユーザデータグラムプロトコル（ＵＤＰ）（ＲＦＣ  ７６８、２４６０、２６７５、４１１３、および５４０５））、伝送制御プロトコル（ＴＣＰ）（ＲＦＣ  ７９３および１１８０）、および差別化サービス（ＤＳＣＰ）の値（ＲＦＣ  ２４７４、２４７５、２５９７、２９８３、３０８６、３１４０、３２４６、３２４７、３２６０、４５９４、５８６５、３２８９、３２９０、および３３１７）を含む。これらの一部の実施形態では、実際の転送機能（転送プレーン）は、ＡＰＰＩ７３３Ａ〜７３３ＲまたはＡＰＰＩ７６６Ａ〜７６６Ｒそれぞれによってインスタンス化された複数のパケット処理スレッドにおいて実行される。物理ＮＲで受信されたデータは、図１〜６に関して説明された本発明の実施形態のうちの１つに基づいてパケット処理スレッドに分散される。
【００８３】
図７Ｃは、本発明の一部の実施形態に従って、ＶＮＥを結合できるさまざまな方法の例を示している。図７Ｃは、ＮＤ７００Ａ内に実装されたＶＮＥ７７０Ａ．１〜７７０Ａ．Ｐ（および、必要に応じてＶＮＥ７７０Ａ．Ｑ〜７７０Ａ．Ｒ）およびＮＤ７００Ｈ内に実装されたＶＮＥ７７０Ｈ．１を示している。図７Ｃでは、ＶＮＥ７７０Ａ．１〜Ｐは、ＮＤ７００Ａの外部からパケットを受信し、ＮＤ７００Ａの外部にパケットを転送できるという意味において、互いに分離している。ＶＮＥ７７０Ａ．１はＶＮＥ７７０Ｈ．１に結合され、したがって、これらのＶＮＥはそれらの各ＮＤ間でパケットを通信する。ＶＮＥ７７０Ａ．２〜７７０Ａ．３は、ＮＤ７００Ａの外部にパケットを転送することなく、必要に応じてパケットをＶＮＥ７７０Ａ．２とＶＮＥ７７０Ａ．３の間で転送することができる。ＶＮＥ７７０Ａ．Ｐは、必要に応じて、ＶＮＥ７７０Ａ．Ｒが後に続くＶＮＥ７７０Ａ．Ｑを含んでいるＶＮＥのチェーン内の最初のＶＮＥであることができる（これは、動的サービスチェイニングと呼ばれる場合があり、このチェーンでは、一連のＶＮＥにおける各ＶＮＥが異なるサービス（例えば、１つまたは複数のレイヤ４〜７のネットワークサービス）を提供する）。図７ＣはＶＮＥ間のさまざまな関係の例を示しているが、代替の実施形態が他の関係（例えば、より多い／より少ないＶＮＥ、より多い／より少ない動的サービスチェーン、一部の共通のＶＮＥおよび一部の異なるＶＮＥを含む複数の異なる動的サービスチェーン）をサポートできる。
【００８４】
例えば、図７ＡのＮＤは、インターネットの一部またはプライベートネットワークを形成することができる。その他の電子デバイス（図示されていないが、ワークステーション、ラップトップ、ネットブック、タブレット、パームトップ、携帯電話、スマートフォン、マルチメディアフォン、ボイスオーバーインターネットプロトコル（ＶＯＩＰ）電話、端末、ポータブルメディアプレイヤー、ＧＰＳユニット、ウェアラブルデバイス、ゲームシステム、セットトップボックス、インターネット対応家庭用器具を含むエンドユーザデバイスなど）は、ネットワークに（直接的に、またはアクセスネットワークなどの他のネットワークを介して）結合して、ネットワーク（例えば、インターネットまたはインターネット上にオーバーレイされた（例えばインターネットをトンネルする）仮想プライベートネットワーク（ＶＰＮ））を経由して互いに（直接的に、またはサーバを介して）通信すること、ならびに／あるいはコンテンツおよび／またはサービスにアクセスすることができる。そのようなコンテンツおよび／またはサービスは、サービス／コンテンツプロバイダに属している１つまたは複数のサーバ（図示されていない）またはピアツーピア（Ｐ２Ｐ）サービスに参加している１つまたは複数のエンドユーザデバイス（図示されていない）によって通常は提供され、例えば、パブリックなＷｅｂページ（例えば、無料コンテンツ、ストアフロント、検索サービス）、プライベートなＷｅｂページ（例えば、電子メールサービスを提供する、ユーザ名／パスワードを使用してアクセスされるＷｅｂページ）、および／またはＶＰＮを経由する企業ネットワークを含むことができる。例えば、エンドユーザデバイスを（例えばアクセスネットワークに（有線または無線で）結合された加入者宅内機器を介して）エッジＮＤに結合することができ、これらのエッジＮＤは、サーバとして機能する電子デバイスに結合された他のエッジＮＤに（例えば１つまたは複数のコアＮＤを介して）結合される。ただし、計算およびストレージの仮想化によって、図７Ａ内のＮＤとして動作する電子デバイスのうちの１つまたは複数は、そのような１つまたは複数のサーバをホストすることもでき（例えば、汎用ネットワークデバイス７０４の場合は、仮想マシン７６２Ａ〜Ｒのうちの１つまたは複数はサーバとして動作することができ、それと同じことがハイブリッドネットワークデバイス７０６にも当てはまり、専用ネットワークデバイス７０２の場合は、そのような１つまたは複数のサーバは計算リソース７１２によって実行されているハイパーバイザ上で実行することもできる）、その場合、サーバは、このＮＤのＶＮＥと共に共同設置されたと言われる。
【００８５】
仮想ネットワークは、ネットワークサービス（例えば、Ｌ２および／またはＬ３サービス）を提供する物理ネットワーク（図７Ａ内の物理ネットワークなど）の論理的抽象化である。仮想ネットワークは、オーバーレイネットワーク（ネットワーク仮想化オーバーレイと呼ばれる場合もある）として実装することができ、このオーバーレイネットワークは、アンダーレイネットワーク（例えば、オーバーレイネットワークを作成するためにトンネル（例えば、一般ルーティングのカプセル化（ＧＲＥ）、レイヤ２トンネリングプロトコル（Ｌ２ＴＰ）、ＩＰＳｅｃ）を使用するインターネットプロトコル（ＩＰ）ネットワークなどのＬ３ネットワーク）上のネットワークサービス（例えば、レイヤ２（Ｌ２、データリンクレイヤ）サービスおよび／またはレイヤ３（Ｌ３、ネットワークレイヤ）サービス）を提供する。
【００８６】
ネットワーク仮想化エッジ（ＮＶＥ）は、アンダーレイネットワークのエッジに存在し、ネットワーク仮想化の実装に参加する。ＮＶＥのネットワークの方を向いている側は、アンダーレイネットワークを使用して、他のＮＶＥとの間でフレームをトンネルする。ＮＶＥの外部の方を向いている側は、ネットワークの外部のシステムとの間でデータを送信および受信する。仮想ネットワークインスタンス（ＶＮＩ）は、ＮＶＥ（例えば、ＮＤ上のＮＥ／ＶＮＥ、エミュレーションによってＮＥ／ＶＮＥが複数のＶＮＥに分割された場合は、ＮＤ上のＮＥ／ＶＮＥの一部）上の仮想ネットワークの特定のインスタンスである。１つまたは複数のＶＮＩは、ＮＶＥ上で（例えば、ＮＤ上の異なるＶＮＥとして）インスタンス化できる。仮想アクセスポイント（ＶＡＰ）は、外部システムを仮想ネットワークに接続するための、ＮＶＥ上の論理的接続ポイントである。ＶＡＰは、論理インターフェイス識別子（例えばＶＬＡＮ  ＩＤ）によって識別される物理ポートまたは仮想ポートにすることができる。
【００８７】
ネットワークサービスの例は、次を含む。１）イーサネットＬＡＮエミュレーションサービス（インターネットエンジニアリングタスクフォース（ＩＥＴＦ）のマルチプロトコルラベルスイッチング（ＭＰＬＳ）に類似するイーサネットベースのマルチポイントサービスまたはイーサネットＶＰＮ（ＥＶＰＮ）サービス）。このサービスでは外部システムが、アンダーレイネットワークを経由し、ＬＡＮ環境によってネットワーク上で相互接続される（例えば、ＮＶＥは、そのようなさまざまな仮想ネットワーク用の個別のＬ２  ＶＮＩ（仮想スイッチングインスタンス）、およびアンダーレイネットワーク上のＬ３（例えばＩＰ／ＭＰＬＳ）トンネリングカプセル化を提供する）。および（２）仮想化されたＩＰ転送サービス（サービス定義の観点から、ＩＥＴＦ  ＩＰ  ＶＰＮ（例えばボーダーゲートウェイプロトコル（ＢＧＰ）／ＭＰＬＳ  ＩＰＶＰＮ  ＲＦＣ  ４３６４）に類似する）。このサービスでは、外部システムが、アンダーレイネットワークを経由し、Ｌ３環境によってネットワーク上で相互接続される（例えば、ＮＶＥは、そのようなさまざまな仮想ネットワーク用の個別のＬ３  ＶＮＩ（転送インスタンスおよびルーティングインスタンス）、およびアンダーレイネットワーク上のＬ３（例えばＩＰ／ＭＰＬＳ）トンネリングカプセル化を提供する）。ネットワークサービスは、品質サービス機能（例えば、トラフィック分類マーキング、トラフィックの調整およびスケジューリング）、セキュリティ機能（例えば、加入者宅内機器をネットワークからの攻撃から保護し、不正な形式のルートの通知を防ぐためのフィルタ）、および管理機能（例えば、完全な検出および処理）も含むことができる。
【００８８】
図７Ｄは、本発明の一部の実施形態に従って、図７Ａの各ＮＤ上に１つのネットワーク要素を含むネットワークを示しており、この簡潔なアプローチにおいて、従来の分散アプローチ（従来のルータによって一般に使用される）と、到達可能性および転送情報を維持するための集中型アプローチ（ネットワーク制御とも呼ばれる）とを対比している。具体的には、図７Ｄは、図７ＡのＮＤ７００Ａ〜Ｈと同じ接続を持つネットワーク要素（ＮＥ）７７０Ａ〜Ｈを示している。
【００８９】
図７Ｄは、分散アプローチ７７２が、到達可能性および転送情報を生成する責任をＮＥ７７０Ａ〜Ｈ間で分散していることを示している。言い換えると、隣接するＮＥの発見およびトポロジーの発見のプロセスが分散される。
【００９０】
例えば、専用ネットワークデバイス７０２が使用される場合、ＮＤ制御プレーン７２４の制御通信および設定モジュール７３２Ａ〜Ｒは、ルートを交換するために他のＮＥと通信し、その後、１つまたは複数のルーティングメトリックに基づいてそれらのルートを選択する、１つまたは複数のルーティングプロトコル（例えば、ボーダーゲートウェイプロトコル（ＢＧＰ）（ＲＦＣ  ４２７１）などの外部ゲートウェイプロトコル、内部ゲートウェイプロトコル（ＩＧＰ）（例えば、オープンショーテストパスファースト（ＯＳＰＦ）（ＲＦＣ  ２３２８および５３４０）、中間システム間連携（ＩＳ−ＩＳ）（ＲＦＣ  １１４２）、ルーティング情報プロトコル（ＲＩＰ）（バージョン１  ＲＦＣ  １０５８、バージョン２  ＲＦＣ  ２４５３、および次世代のＲＦＣ２０８０））、ラベル分散プロトコル（ＬＤＰ）（ＲＦＣ  ５０３６）、リソース予約プロトコル（ＲＳＶＰ）（ＲＦＣ  ２２０５、２２１０、２２１１、２２１２、ならびにＲＳＶＰトラフィックエンジニアリング（ＴＥ）：ＬＳＰトンネルＲＦＣ３２０９に関するＲＳＶＰに対する拡張、Ｇｅｎｅｒａｌｉｚｅｄ  Ｍｕｌｔｉ−Ｐｒｏｔｏｃｏｌ  Ｌａｂｅｌ  Ｓｗｉｔｃｈｉｎｇ（ＧＭＰＬＳ）シグナリングＲＳＶＰ−ＴＥ  ＲＦＣ  ３４７３、ＲＦＣ  ３９３６、４４９５、および４４５８））を実装するための到達可能性および転送情報モジュールを通常は含む。したがって、ＮＥ  ７７０Ａ〜Ｈ（例えば、制御通信および設定モジュール７３２Ａ〜Ｒを遂行する計算リソース７１２）は、分散的にネットワーク内の到達可能性を決定し、各転送情報を計算することによって、データ（例えばパケット）をルーティングする方法（例えば、データのネクストホップおよびそのデータ用の送信物理ＮＩ）を制御することに参加する責任を果たす。ルートおよび隣接性は、ＮＤ制御プレーン７２４上の１つまたは複数のルーティング構造（例えば、ルーティング情報ベース（ＲＩＢ）、ラベル情報ベース（ＬＩＢ）、１つまたは複数の隣接性構造）に格納される。ＮＤ制御プレーン７２４は、ルーティング構造に基づく情報（例えば、隣接性およびルート情報）を使用してＮＤ転送プレーン７２６をプログラムする。例えば、ＮＤ制御プレーン７２４は、隣接性およびルート情報を、ＮＤ転送プレーン７２６上の１つまたは複数の転送テーブル７３４Ａ〜Ｒ（例えば、転送情報ベース（ＦＩＢ）、ラベル転送情報ベース（ＬＦＩＢ）、および１つまたは複数の隣接性構造）にプログラムする。レイヤ２転送の場合、ＮＤは、データ内のレイヤ２情報に基づいてそのデータを転送するのに使用される１つまたは複数のブリッジテーブルを格納できる。上の例は専用ネットワークデバイス７０２を使用しているが、同じ分散アプローチ７７２を、汎用ネットワークデバイス７０４およびハイブリッドネットワークデバイス７０６上に実装することができる。
【００９１】
図７Ｄは、トラフィックが送信される場所に関する決定を行うシステムを、トラフィックを選択された送信先に転送する下層のシステムから分離する集中型アプローチ７７４（ソフトウェア定義ネットワーキング（ＳＤＮ）とも呼ばれる）を示している。示された集中型アプローチ７７４は、集中型制御プレーン７７６（ＳＤＮ制御モジュール、コントローラ、ネットワークコントローラ、ＯｐｅｎＦｌｏｗコントローラ、ＳＤＮコントローラ、制御プレーンノード、Ｎｅｔｗｏｒｋ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  Ａｕｔｈｏｒｉｔｙ、または管理制御エンティティと呼ばれる場合もある）内の到達可能性および転送情報を生成する責任を持っており、したがって、隣接するＮＥの発見およびトポロジーの発見のプロセスが集中化される。集中型制御プレーン７７６は、ＮＥ７７０Ａ〜Ｈ（スイッチ、転送要素、データプレーン要素、またはノードと呼ばれる場合もある）を含んでいるデータプレーン７８０（インフラストラクチャレイヤ、ネットワーク転送プレーン、または転送プレーン（ＮＤ転送プレーンと混同されるべきではない）と呼ばれる場合もある）とのサウスバウンドインターフェイス７８２を持っている。集中型制御プレーン７７６はネットワークコントローラ７７８を含み、ネットワークコントローラ７７８は、ネットワーク内の到達可能性を決定し、転送情報をサウスバウンドインターフェイス７８２（ＯｐｅｎＦｌｏｗプロトコルを使用する場合がある）を経由してデータプレーン７８０のＮＥ７７０Ａ〜Ｈに分散する集中型到達可能性および転送情報モジュール７７９を含む。したがって、ネットワークのインテリジェンスは、ＮＤから通常は分離した電子デバイス上で遂行される集中型制御プレーン７７６内に集中化される。
【００９２】
例えば、専用ネットワークデバイス７０２がデータプレーン７８０内で使用される場合、ＮＤ制御プレーン７２４の制御通信および設定モジュール７３２Ａ〜Ｒはそれぞれ、サウスバウンドインターフェイス７８２のＶＮＥ側を提供する制御エージェントを通常は含む。その場合、ＮＤ制御プレーン７２４（制御通信および設定モジュール７３２Ａ〜Ｒを遂行する計算リソース７１２）は、制御エージェントを介してデータ（例えばパケット）をルーティンする方法（例えば、データのネクストホップおよびそのデータ用の送信物理ＮＩ）を制御することに参加する責任を果たし、この制御エージェントは、転送情報（および、場合によっては到達可能性情報）を集中型到達可能性および転送情報モジュール７７９から受信するために集中型制御プレーン７７６と通信する（本発明の一部の実施形態では、制御通信および設定モジュール７３２Ａ〜Ｒは、集中型制御プレーン７７６と通信することに加えて、分散アプローチの場合ほどではないが、到達可能性を決定することおよび／または転送情報を計算することにおける一部の役割を果たすこともできると理解されるべきであり、そのような実施形態は、集中型アプローチ７７４に分類されると一般に見なされるが、ハイブリッドアプローチであると見なすこともできる）。
【００９３】
上の例は専用ネットワークデバイス７０２を使用するが、同じ集中型アプローチ７７４を、汎用ネットワークデバイス７０４（例えば、各ＶＮＥ７６０Ａ〜Ｒは、転送情報（および、場合によっては到達可能性情報）を集中型到達可能性および転送情報モジュール７７９から受信するために集中型制御プレーン７７６と通信することによって、データ（例えばパケット）をルーティンする方法（例えば、データのネクストホップおよびそのデータ用の送信物理ＮＩ）を制御する責任を果たし、本発明の一部の実施形態では、ＶＮＥ７６０Ａ〜Ｒは、集中型制御プレーン７７６と通信することに加えて、分散アプローチの場合ほどではないが、到達可能性を決定することおよび／または転送情報を計算することにおける一部の役割を果たすこともできると理解されるべきである）およびハイブリッドネットワークデバイス７０６を使用して実装することができる。実際、ＳＤＮ手法を使用すると、ＳＤＮソフトウェアを実行できるインフラストラクチャを提供することによって、ＮＦＶがＳＤＮをサポートできるようになり、ＮＦＶとＳＤＮの両方が商品サーバハードウェアおよび物理スイッチを利用することを目指すようになるため、汎用ネットワークデバイス７０４またはハイブリッドネットワークデバイス７０６の実装で通常は使用されるＮＦＶ手法を拡張することができる。加えて、パケット処理において適応負荷バランシングを有効にするために、図１〜６を参照して説明された本発明の実施形態を実装する専用ネットワークデバイス７０２または汎用ネットワークデバイス７０４を使用して、集中型アプローチ７７４を実装することができる。
【００９４】
図７Ｄは、集中型制御プレーン７７６が、アプリケーション７８８が存在するアプリケーションレイヤ７８６へのノースバウンドインターフェイス７８４を有していることも示している。集中型制御プレーン７７６は、アプリケーション７８８のための仮想ネットワーク７９２（論理転送プレーン、ネットワークサービス、またはオーバーレイネットワーク（データプレーン７８０のＮＥ７７０Ａ〜Ｈがアンダーレイネットワークになる）と呼ばれる場合もある）を形成することができる。したがって、集中型制御プレーン７７６は、すべてのＮＤの全体的視野を維持し、ＮＥ／ＶＮＥを設定し、仮想ネットワークを（ハードウェア（ＮＤ、リンク、またはＮＤのコンポーネント）の障害、追加、または除去によって物理ネットワークが変化したときに、これらのマッピングを維持することを含めて）下層のＮＤに効率的にマッピングする。
【００９５】
図７Ｄは、集中型アプローチ７７４から分離した分散アプローチ７７２を示しているが、本発明の特定の実施形態では、ネットワーク制御の負担を異なった方法で、またはこれら２つを組み合わせて分散することができる。例えば、（１）実施形態は、集中型アプローチ（ＳＤＮ）７７４を一般に使用できるが、特定の機能がＮＥに委任される（例えば、分散アプローチを使用して、故障監視、性能監視、保護切り替え、および隣接するＮＥの発見および／またはトポロジーの発見のためのプリミティブのうちの１つまたは複数を実装するために使用できる）、または（２）本発明の実施形態は、集中型制御プレーンおよび分散プロトコルの両方を介して隣接するＮＥの発見およびトポロジーの発見を実行することができ、それらの結果が比較され、一致しない場合は例外を引き起こす。このような実施形態は、集中型アプローチ７７４に分類されると一般に見なされるが、ハイブリッドアプローチであると見なすこともできる。
【００９６】
図７Ｄは、ＮＤ７００Ａ〜Ｈがそれぞれ１つのＮＥ７７０Ａ〜Ｈを実装する単純なケースを示しているが、図７Ｄを参照して説明されたネットワーク制御アプローチは、ＮＤ７００Ａ〜Ｈのうちの１つまたは複数が複数のＶＮＥ（例えば、ＶＮＥ７３０Ａ〜Ｒ、ＶＮＥ７６０Ａ〜Ｒ、ハイブリッドネットワークデバイス７０６内のＶＮＥ）を実装するネットワークに対しても有効であると理解されるべきである。代わりに、または加えて、ネットワークコントローラ７７８は、１つのＮＤ内の複数のＶＮＥの実装をエミュレートすることもできる。具体的には、１つのＮＤ内の複数のＶＮＥを実装する代わりに（または、実装することに加えて）、ネットワークコントローラ７７８は、１つのＮＤ内のＶＮＥ／ＮＥの実装を、仮想ネットワーク７９２内の複数のＶＮＥ（複数の仮想ネットワーク７９２のうちの同じ１つの仮想ネットワーク内のすべてのＶＮＥ、複数の仮想ネットワーク７９２のうちの異なる仮想ネットワーク内の各ＶＮＥ、またはこれらの組合せ）として提示することができる。例えば、ネットワークコントローラ７７８は、ＮＤに、アンダーレイネットワーク内の１つのＶＮＥ（ＮＥ）を実装させ、その後、集中型制御プレーン７７６内のこのＮＥのリソースを論理的に分割して、仮想ネットワーク７９２内の異なるＶＮＥを提示する（オーバーレイネットワーク内のこれらの異なるＶＮＥは、アンダーレイネットワーク内のＮＤ上の１つのＶＮＥ／ＮＥの実装のリソースを共有する）。
【００９７】
一方、図７Ｅおよび７Ｆは、ネットワークコントローラ７７８が複数の仮想ネットワーク７９２のうちの異なる仮想ネットワークの一部として提示できるＮＥおよびＶＮＥの抽象化の例をそれぞれ示している。図７Ｅは、本発明の一部の実施形態に従って、ＮＤ７００Ａ〜Ｈそれぞれが１つのＮＥ７７０Ａ〜Ｈ（図７Ｄを参照）を実装するが、集中型制御プレーン７７６が、異なるＮＤ内の複数のＮＥ（ＮＥ７７０Ａ〜ＣおよびＧ〜Ｈ）を、図７Ｄの仮想ネットワーク７９２のうちの１つに含まれる１つのＮＥ７７０Ｉに（表現するために）抽象化した単純なケースを示している。図７Ｅは、この仮想ネットワーク内で、ＮＥ７７０ＩがＮＥ７７０Ｄおよび７７０Ｆに結合され、ＮＥ７７０Ｄおよび７７０Ｆの両方がＮＥ７７０Ｅにさらに結合されているのを示している。
【００９８】
図７Ｆは、本発明の一部の実施形態に従って、複数のＶＮＥ（ＶＮＥ７７０Ａ．１およびＶＮＥ７７０Ｈ．１）が異なるＮＤ（ＮＤ７００ＡおよびＮＤ７００Ｈ）上に実装されて互いに結合され、集中型制御プレーン７７６が、図７Ｄの仮想ネットワーク７９２のうちの１つに含まれる１つのＶＮＥ７７０Ｔとして現れるようにそれらの複数のＶＮＥを抽象化したケースを示している。したがって、ＮＥまたはＶＮＥの抽象化は、複数のＮＤにわたることができる。
【００９９】
本発明の一部の実施形態は、集中型制御プレーン７７６を１つのエンティティ（例えば、１つの電子デバイス上で実行されるソフトウェアの１つのインスタンス）として実装するが、代替の実施形態は、冗長性および／またはスケーラビリティの目的で、機能を複数のエンティティ（例えば、異なる電子デバイス上で実行されるソフトウェアの複数のインスタンス）に分散することができる。
【０１００】
ネットワークデバイスの実装と同様に、集中型制御プレーン７７６、ならびに集中型到達可能性および転送情報モジュール７７９を含んでいるネットワークコントローラ７７８を実行する電子デバイスは、さまざまな方法（例えば、専用デバイス、汎用（例えばＣＯＴＳ）デバイス、またはハイブリッドデバイス）で実装することができる。これらの電子デバイスは、計算リソース、セットまたは１つまたは複数の物理ＮＩＣ、および集中型制御プレーンソフトウェアが格納されている非一時的機械可読記憶媒体を同様に含む。
【０１０１】
ＯｐｅｎＦｌｏｗなどの規格は、メッセージに使用されるプロトコル、およびパケットを処理するためのモデルを規定する。パケットを処理するためのモデルは、ヘッダーの構文解析、パケット分類、および転送の決定を含む。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造（またはキー）の構築に使用される（例えば、第１のキーフィールドを送信元媒体アクセス制御（ＭＡＣ）アドレスにすることができ、第２のキーフィールドを送信先ＭＡＣアドレスにすることができる）。
【０１０２】
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する転送テーブル内のエントリ（転送テーブルエントリまたはフローエントリとも呼ばれる）を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応／一致することができ、その場合、システムは、規定された方式（例えば、一致する最初の転送テーブルエントリを選択する）に従って、多くの転送テーブルエントリから１つの転送テーブルエントリを決定するように通常は設定される。転送テーブルのエントリは、特定の一致基準のセット（パケットヘッダー内の特定のフィールドに関して、または他のパケットの内容に関して照合機能によって規定される、値またはワイルドカードのセット、あるいは特定の値／ワイルドカードと比較する必要のあるパケットのどの部分かの指示）、および一致するパケットの受信時に実行するための、データプレーンに対する１つまたは複数の動作のセットの両方を含む。例えば動作は、特定のポートを使用するパケットに関してヘッダーをパケットにプッシュすること、パケットをデータで満たすこと、または単にパケットを削除することであることができる。したがって、特定の伝送制御プロトコル（ＴＣＰ）送信先ポートを使用するＩＰｖ４／ＩＰｖ６パケットの場合の転送テーブルのエントリは、それらのパケットを削除する必要があることを指定する動作を含むことができる。
【０１０３】
転送の決定および動作の実行は、パケット分類時に識別された転送テーブルエントリに基づき、一致する転送テーブルエントリにおいて識別された一連の動作をパケットに対して遂行することよって発生する。
【０１０４】
ただし、未知のパケット（例えば、ＯｐｅｎＦｌｏｗの用語で使用される「ｍｉｓｓｅｄ  ｐａｃｋｅｔ」または「ｍａｔｃｈ−ｍｉｓｓ」）がデータプレーン７８０に到着した場合、そのパケット（または、パケットヘッダーおよび内容のサブセット）は、集中型制御プレーン７７６に通常は転送される。その後、集中型制御プレーン７７６は、未知のパケットのフローに属するパケットに対応するように、転送テーブルエントリをデータプレーン７８０にプログラムする。特定の転送テーブルエントリが、集中型制御プレーン７７６によってデータプレーン７８０にプログラムされた後に、一致する認証情報を含んでいる次のパケットがこの転送テーブルエントリに一致し、この一致したエントリに関連付けられた一連の動作が実行される。
【０１０５】
ネットワークインターフェイス（ＮＩ）は物理的または仮想的であることができ、ＩＰにおいては、インターフェイスアドレスは、ＮＩが物理ＮＩであろうと仮想ＮＩであろうと、ＮＩに割り当てられたＩＰアドレスである。仮想ＮＩは、物理ＮＩに関連付けられるか、別の仮想インターフェイスに関連付けられるか、または独立することができる（例えば、ループバックインターフェイス、ポイントツーポイントプロトコルインターフェイス）。ＮＩ（物理または仮想）には、番号を付けるか（ＩＰアドレスを持つＮＩ）、または番号を付けない（ＩＰアドレスを持たないＮＩ）ことができる。ループバックインターフェイス（およびそのループバックアドレス）は、多くの場合は管理目的に使用される、ＮＥ／ＶＮＥ（物理または仮想）の仮想ＮＩ（およびＩＰアドレス）の特定の種類であり、そのようなＩＰアドレスはノードループバックアドレスと呼ばれる。ＮＤのＮＩに割り当てられたＩＰアドレスは、そのＮＤのＩＰアドレスと見なされ、さらに細かい粒度では、ＮＤ上に実装されたＮＥ／ＶＮＥに割り当てられたＮＩに割り当てられたＩＰアドレスは、そのＮＥ／ＶＮＥのＩＰアドレスと見なされる。
【０１０６】
特定の送信先に関するルーティングシステムによるネクストホップの選択は、１つの経路に解決することができる（つまり、ルーティングプロトコルは最短経路上の１つのネクストホップを生成することができる）が、ルーティングシステムは、実行可能な複数のネクストホップが存在することを決定し（つまり、ルーティングプロトコルによって生成された転送の解が、最短経路上の複数のネクストホップ（複数のコストが等しいネクストホップ）を提供し）、何らかの追加の基準が使用される（例えば、コネクションレスネットワークでは、等価コストマルチパス（ＥＣＭＰ）（等価コストマルチパスルーティング、マルチパス転送、およびＩＰマルチパスとも呼ばれる）（ＲＦＣ２９９１および２９９２）を使用できる（例えば、標準的な実装は、パケットフローの順序を維持するために、基準として特定のヘッダーフィールドを使用して、特定のパケットフローのパケットが必ず同じネクストホップで転送されることを保証する））。マルチパス転送の目的では、パケットフローは、順序付け制約を共有する一連のパケットとして規定される。一例として、特定のＴＣＰ転送シーケンス内の一連のパケットは正しい順序で到着する必要があり、そのように到着しない場合、ＴＣＰロジックは、順序が正しくない配信を混雑状態と解釈してＴＣＰ転送速度を低下させる。
【０１０７】
レイヤ３（Ｌ３）リンクアグリゲーション（ＬＡＧ）リンクは、２つのＮＤを複数のＩＰアドレス割り当て済みリンク経路（各リンク経路には異なるＩＰアドレスが割り当てられる）に直接接続するリンクであり、それらの異なるリンク経路への負荷分散の決定がＮＤ転送プレーンで実行される。その場合、負荷分散の決定はリンク経路間で行われる。
【０１０８】
一部のＮＤは、認証、許可、および課金（ＡＡＡ）プロトコル（例えばＲＡＤＩＵＳ（リモート認証ダイヤルインユーザサービス））、ダイアメーター、および／またはＴＡＣＡＣＳ＋（Ｔｅｒｍｉｎａｌ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ  Ｓｙｓｔｅｍ  Ｐｌｕｓ）のための機能を含む。ＡＡＡは、クライアント／サーバモデルを使用して提供することができ、ＡＡＡクライアントはＮＤ上で実装され、ＡＡＡサーバはＮＤ上にローカルに実装するか、またはＮＤに結合されたリモート電子デバイス上に実装することができる。認証は、加入者を識別および検証するプロセスである。例えば、ユーザ名とパスワードの組合せによって、または一意の（固有の）キーによって、加入者を識別することができる。許可は、特定の電子デバイスの情報リソースへのアクセス権限を取得することなどの、認証された後に加入者が行うことができることを（例えばアクセス制御ポリシーを使用して）決定する。課金は、ユーザの活動を記録することである。概略的な例として、（ＡＡＡ処理をサポートする）エッジＮＤを介して（例えばアクセスネットワークを介して）エンドユーザデバイスを結合することができ、このエッジＮＤは、サービス／コンテンツプロバイダのサーバを実装している電子デバイスに結合されたコアＮＤに結合される。ＡＡＡ処理は、ある加入者に関して、その加入者用のＡＡＡサーバ内に格納された加入者レコードを識別するために実行される。加入者レコードは、その加入者のトラフィックの処理中に使用される一連の属性（例えば、加入者名、パスワード、認証情報、アクセス制御情報、速度制限情報、ポリシング情報）を含む。
【０１０９】
特定のＮＤ（例えば特定のエッジＮＤ）は、加入者回線を使用してエンドユーザデバイス（または、住宅用ゲートウェイ（例えば、ルータ、モデム）などの加入者宅内機器（ＣＰＥ）である場合もある）を内部で表現する。加入者回線は、ＮＤ内で加入者セッションを一意に識別し、セッションの存続期間にわたって通常は存在する。したがって、ＮＤは通常、加入者がこのＮＤに接続したときに加入者回線を割り当て、それに応じて、この加入者が接続を切ったときにこの加入者回線の割り当てを解除する。各加入者セッションは、別のプロトコルを経由するポイントツーポイントプロトコル（ＰＰＰｏＸ）（例えば、Ｘはイーサネットまたは非同期転送モード（ＡＴＭ））、イーサネット、８０２．１Ｑ仮想ＬＡＮ（ＶＬＡＮ）、インターネットプロトコル、またはＡＴＭなどのプロトコルを使用してＮＤとエンドユーザデバイス（または、住宅用ゲートウェイまたはモデムなどのＣＰＥである場合もある）の間で通信されるパケットの区別可能なフローを表す。加入者セッションは、さまざまなメカニズム（例えば、動的ホスト構成プロトコル（ＤＨＣＰ）、ＤＨＣＰ／クライアントレスインターネットプロトコルサービス（ＣＬＩＰＳ）、または媒体アクセス制御（ＭＡＣ）アドレス追跡を手動でプロビジョニングするメカニズム）を使用して開始できる。例えば、ポイントツーポイントプロトコル（ＰＰＰ）は、デジタル加入者ライン（ＤＳＬ）サービスに一般に使用され、加入者がユーザ名とパスワードを入力できるようにし、その後、加入者レコードの選択に使用できるＰＰＰクライアントのインストールを必要とする。ＤＨＣＰが使用される場合（例えば、ケーブルモデムサービスの場合）、通常はユーザ名が入力されないが、そのような状況では、他の情報（例えば、エンドユーザデバイス（またはＣＰＥ）内のハードウェアのＭＡＣアドレスを含んでいる情報）が入力される。ＮＤ上でＤＨＣＰおよびＣＬＩＰＳを使用することによってＭＡＣアドレスを捕捉し、それらのアドレスを使用して加入者を区別し、その加入者の加入者レコードにアクセスする。
【０１１０】
各ＶＮＥ（例えば、仮想ルータ、仮想ブリッジ（仮想プライベートＬＡＮサービス（ＶＰＬＳ）（ＲＦＣ  ４７６１および４７６２）内で仮想スイッチインスタンスとして機能できる））は、通常は独立して管理することができる。例えば、複数の仮想ルータの場合、各仮想ルータはシステムリソースを共有できるが、そのルータの管理ドメイン、ＡＡＡ（認証、許可、および課金）名前空間、ＩＰアドレス、およびルーティングデータベースに関しては、他の仮想ルータから分離している。複数のＶＮＥをエッジＮＤ内で採用し、直接ネットワークアクセスおよび／または異なるサービスのクラスを、サービスプロバイダおよび／またはコンテンツプロバイダの加入者に提供することができる。
【０１１１】
特定のＮＤ内で、物理ＮＩから独立した「インターフェイス」をＶＮＥの一部として設定し、上位レイヤのプロトコルおよびサービス情報（例えば、レイヤ３のアドレス指定）を提供することができる。ＡＡＡサーバ内の加入者レコードは、他の加入者設定要件に加えて、ＮＤ内で対応する加入者に結び付ける必要のあるコンテキスト（例えば、ＶＮＥ／ＮＥのコンテキスト）も識別する。本明細書で使用されているような結び付けによって、物理的エンティティ（例えば物理ＮＩ、チャネル）または論理的エンティティ（例えば、加入者回線または論理回線（１つまたは複数の加入者回線のセット）などの回線）と、コンテキストのインターフェイスとの間の関連性を形成し、この関連性の上に、このコンテキストのネットワークプロトコル（例えば、ルーティングプロトコル、ブリッジプロトコル）が設定される。何らかの上位レイヤプロトコルインターフェイスが設定され、物理的エンティティに関連付けられた場合に、加入者データが物理的エンティティ上を流れる。
【０１１２】
正常な挙動のフローに与える影響を最小限に抑える適応負荷バランシング
上で説明された実施形態では、ネットワークデバイスで受信されたフローが（例えば複数のバケットの１つにマッピングされることによって）サブセットに分割され、各バケットの状態が維持される。この状態は、重いフローを含んでいるバケットの識別に使用され、それに応じて、それらのバケットには、すべてのパケット処理スレッド間で負荷バランシングが実行されるようにマークが付けられる。残りのバケットのパケットが、それらのパケットに対応するパケット処理スレッドに引き続き直接マッピングされる。
【０１１３】
これらの実施形態は、バケットの粒度で状態を維持および監視することを含み、このことは、重いフローおよび／またはハッシュスキューフローの識別および決定において役立つ。これらの状態は、混雑の原因が少数のフローにある場合でも、すべてのフロー（すなわち、すべてのバケット）に関して維持される（例えば、混雑の原因が、マッピングされたフローのうちの１つのフローのみにある場合でも、１つのバケットにマッピングされたすべてのフローに対して負荷バランシングが実行され、それらのフローの順序が変更される場合がある）。一般に、マウスフロー（すなわち、「エレファント／重い」フローとは対照的な小さいフロー）がフローを支配することが予想され、すべてのフローの状態の追加的な監視を維持するためのコストを払うのが望ましくないことがある。これは、すべてのフローがパケット処理スレッドのオーバーサブスクリプションに寄与するわけではないためである。
【０１１４】
下で提示される実施形態は、ネットワークデバイス内のパケット処理ネットワーク要素が、必要な場合に少数のフローのセット７に対してのみ、処理済みのパケットを順序変更できるようにする。これらの実施形態は、ネットワーク要素で受信されたすべてのフローに関して、フローレベルまたはバケット（すなわち、フローのサブセット）レベルで計算オーバーヘッドの追加を防ぐ。上で説明された実施形態とは対照的に、下の実施形態では、フローのサブセットのみが状態監視の対象になる。これらの実施形態は、転送要素（パケット処理ネットワーク要素）のパケット処理スレッドが、負荷バランシング転送に参加していて、処理済みパケットの順序変更を必要とする可能性のあるパケット処理スレッドと、負荷バランシングに参加しておらず、順序変更を必要としない可能性のあるパケット処理スレッドとに分類されることを提案する。
【０１１５】
一部の実施形態では、パケット処理スレッドプール（またはスレッドカテゴリ）の概念が導入される。一部の実施形態によれば、システムの初期化段階では、すべてのパケット処理スレッドが「正常」プール／カテゴリ内にある。いずれかのパケット処理スレッドでキューの未処理が検出された場合、そのパケット処理スレッドは「未処理」プールに移動される。一部の実施形態では、未処理の多いパケット処理スレッドが未処理プールに移動されたときに、未処理の少ない少なくとも１つの追加パケット処理スレッドがこのプールに追加される。未処理プール内のパケット処理スレッドにマッピングされたすべてのパケットトラフィックに対して、このプールのすべてのスレッド間で負荷バランシングが実行される。監視メカニズムに基づいて、追加スレッドを未処理プールに追加して、スレッドの未処理プールにマッピングされたパケットの負荷バランシングを支援するか、あるいは、パケット処理スレッドを未処理プールから取り消すことができる。一部の実施形態では、未処理が発生したパケット処理スレッドを正常状態に戻す（すなわち、スレッドを未処理プールから正常プールに移動する）プロセスを支援するために、追加のパケット処理スレッドプールが存在することができる。この実施形態では、追加のスレッドプールが「移行」（または中間）プールとしてサーブし、未処理プールと正常プールの間でのスレッドの頻繁な移行を防ぐ。
【０１１６】
一部の実施形態では、未処理プールのパケット処理スレッドにマッピングされたパケットは、ステージング領域で順序変更される必要がある場合があり、（例えば正常プール内の）他のパケット処理スレッドにマッピングされたパケットは、順序変更されずに直接転送されることが可能である。
【０１１７】
図８は、本発明の一実施形態に従って、正常な挙動の（例えば、重くない、エレファントではない）フローに与える影響を最小限に抑えたパケット処理における適応負荷バランシングのためのネットワークデバイス内の処理を示している。タスクボックス１〜１０ｂは、本発明の一実施形態に従って操作が実行される順序を示している。
【０１１８】
タスクボックス１では、パケットがネットワークデバイスで受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て８１５に転送される。タスクボックス２で、シーケンス番号が各受信パケットに割り当てられる。割り当てられたシーケンス番号は、入った順序と同じ順序でパケットがネットワークデバイスを出ることを保証するために、後で順序変更ブロック８６０で使用される。一実施形態によれば、フローごとにパケットにシーケンス番号が割り当てられ、同じフローのパケットに、同じシーケンスの異なる（例えば連続する）番号が割り当てられるようにする。別の実施形態によれば、アグリゲートフローごとに、パケットにシーケンス番号が割り当てられ、複数のフロー（例えば、同じ物理ポートで受信されたフロー、同じプロトコルポートを持つフロー、またはネットワーク要素で受信されたすべてのフローなど）のパケットに、同じシーケンスの異なる（例えば連続する）番号が割り当てられるようにする。一部の実施形態では、各パケットは、シーケンス番号が割り当てられる前に、妥当性チェックに合格することができる。
【０１１９】
代替の実施形態では、タスクボックス２はオプションの操作であり、スキップされる。この実施形態では、ネットワークデバイスにおけるパケットの受信時に、このパケットが、シーケンス番号が割り当てられずにマッピングブロック８１０に転送される。既定の順序に従い、パケットに含まれている情報（パケットのヘッダーフィールド）に基づいてパケットが出力されるように、順序変更ブロック８６０でパケットの順序を変更することができる。この順序は、ネットワークデバイスでの受信時の他のパケットの位置に対するパケットの位置に基づくことができる。
【０１２０】
タスクボックス３では、マッピングブロック８１０がパケットを、パケット処理スレッド８５０からのパケット処理スレッドに割り当てる。一部の実施形態に従って、ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック８１０を設定または適応することができる。ヘッダーの構文解析は、既知の一連のプロトコルに基づいてパケットを解釈する方法を説明する。一部のプロトコルフィールドは、パケット分類に使用される一致構造（またはキー）の構築に使用される（例えば、第１のキーフィールドを送信元媒体アクセス制御（ＭＡＣ）アドレスにすることができ、第２のキーフィールドを送信先ＭＡＣアドレスにすることができる）。
【０１２１】
パケット分類は、メモリ内の検索を遂行し、転送テーブルエントリの一致構造またはキーに基づいてパケットに最も良く一致する１つまたは複数の転送テーブルのセット内のエントリ（転送テーブルエントリまたはフローエントリとも呼ばれる）を決定することによってパケットを分類することを含む。転送テーブルエントリにおいて表現された多くのフローはパケットに対応／一致することができ、その場合、システムは、規定された方式（例えば、一致する最初の転送テーブルエントリを選択する）に従って、多くの転送テーブルエントリから１つの転送テーブルエントリを決定するように通常は設定される。
【０１２２】
代替の実施形態では、タスクボックス３で、パケットをパケット処理スレッドに割り当てることが、パケットを割り当てられたパケット処理スレッドのキューに追加する前に、バケット８２０Ａ〜Ｎのうちの１つにマッピングすることをさらに含む。マッピングは、ハッシュメカニズムに従って実行できる。一実施形態では、バケット８２０Ａ〜Ｎそれぞれが、パケット処理スレッド８５０Ａ〜Ｄのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック８１０はパケットを、第１のパケット処理スレッド８５０Ａに関連付けられたバケット８２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック８１０はパケットをバケット８２０Ｎにマッピングすることができ、次にバケット８２０Ｎが別のパケット処理スレッドに関連付けられる。
【０１２３】
タスクボックス４では、マッピングブロック８１０が、パケットが割り当てられたパケット処理スレッドの状態を決定する。一実施形態によれば、パケット処理スレッドの状態は、正常状態または未処理状態のいずれかであることができる。代替の実施形態では、パケット処理スレッドの状態は、正常状態、移行状態、または未処理状態のいずれかであることができる。パケット処理スレッドの状態が未処理状態である場合、この状態は、このパケット処理スレッドがスレッドの「未処理プール」の一部であることを示している。未処理プールは、パケットのフローに対して負荷バランシングを実行するために負荷バランサー８３０によって使用される一連のパケット処理スレッドである。パケット処理スレッドの状態が正常状態である場合、この状態は、このパケット処理スレッドがスレッドの「正常プール」の一部であることを示している。正常プールは、（負荷バランシングが実行されずに）パケット処理スレッドに直接マッピングされたフローのパケットを受信する一連のパケット処理スレッドである。第３の状態（移行状態）を含んでいる実施形態では、パケット処理スレッドの状態が移行状態である場合、この状態は、このスレッドが最近、スレッドの未処理プールの一部だったが、スレッドの正常プールに移行する途中にあることを示している。各パケット処理スレッドの状態は、図８（性能モニタ８４０において実行されるタスクボックス１０ａおよび１０ｂ）および図１１を参照して下で説明される実施形態に従ってセットされ、更新される。
【０１２４】
タスクボックス５で、パケットが（タスクボックス３でパケットが割り当てられた）第１のパケット処理スレッドにマッピングされるか、あるいは、第１のパケット処理スレッドの状態に基づいて負荷バランサー８３０にマッピングされる。非限定的な例では、パケットが（タスクボックス３を参照して説明されたように）パケット処理スレッド８５０Ａに割り当てられ、タスクボックス４でパケット処理スレッド８５０Ａの状態が正常状態である（すなわち、パケット処理スレッドがスレッドの正常プールの一部である）と決定されたときに、このパケットが処理のためにパケット処理スレッド８５０Ａに直接マッピングされる。別の非限定的な例では、パケットがパケット処理スレッド８５０Ｂに割り当てられ、パケット処理スレッド８５０Ｂの状態が未処理状態である（すなわち、このスレッドがスレッドの未処理プールの一部である）と決定されたときに、未処理プールの一連のスレッド（例えば、８５０Ｂおよび８５０Ｄ）に分散されるように、このパケットが負荷バランサー８３０にマッピングされる。この例では、負荷バランサー８３０は、タスクボックス６で、負荷バランシング方式に基づいてパケットを未処理プールからの第２のパケット処理スレッドにマッピングする（例えば、第２のスレッドはパケット処理スレッド８５０Ｂまたは８５０Ｄのいずれかであることができる）。一部の実施形態では、パケットを代わりに移行スレッド（例えば８５０Ｃ）に割り当てることができ、このパケットが割り当てられたパケット処理スレッドの状態が移行状態である（すなわち、このスレッドが移行プールの一部である）と決定されたときに、このパケットは割り当てられたスレッド（すなわち、８５０Ｃ）に直接マッピングされる。
【０１２５】
一部の実施形態では、パケットがバケット８２０のうちの１つにマッピングされた後に、タスクボックス５のマッピングが実行される。代替の実施形態では、第１のパケット処理スレッドの状態の決定（タスクボックス４）後に、パケットがバケット８２０のうちの１つにマッピングされずに、タスクボックス５のマッピングがマッピングブロック８１０によって直接実行される。
【０１２６】
前述したように、タスクボックス６で、負荷バランサー８３０がパケットを未処理プールのパケット処理スレッドに分散（マッピング）する。一部の実施形態では、未処理プールが、ネットワークデバイス上で実行されている全パケット処理スレッドのうちのサブセットを含む。このスレッドのサブセットは、ネットワークデバイスに入るトラフィックに従って動的にセットされる。ネットワークデバイスで受信されたフローに従って、およびパケット処理スレッドのキューの監視に従って、スレッドを未処理プールに対して追加または削除することができる。プール（例えば未処理プール、正常プール、または移行プール）内の一連のスレッドは、各スレッドの状態に従って適応され、この状態は、図８（タスクボックス１０ａおよびタスクボックス１０ｂ）および図１１を参照して説明される実施形態に従って決定される。したがって、負荷バランサー８３０は、未処理プール内のパケット処理スレッドに従って、未処理プールを介してパケットのマッピングを適応させる。図８に示された例では、パケット処理スレッド８５０Ｂおよび８５０Ｄは未処理プールの一部であり、パケット処理スレッド８５０Ｃは移行プールに含まれ、パケット処理スレッド８５０Ａは正常プールに含まれている。示された例では、パケットの受信時に、負荷バランサー８３０はパケットを、負荷バランシング方式に基づいて未処理プールからのパケット処理スレッド８５０Ｂまたは８５０Ｄのうちの１つにマッピングする。パケットの負荷バランシングは、例えば、ラウンドロビンメカニズム、ランダム分散メカニズム、またはその他の要因（例えば、経験則、現在のワークロード、パケット処理スレッドでのキューの長さなど）を考慮できる別の分散メカニズムに従って実行できる。
【０１２７】
パケット処理スレッドの状態に基づいて、パケットを（負荷バランサー８３０を通じて、または直接）パケット処理スレッド８５０のうちの１つにマッピングしたときに、このパケットはこのパケット処理スレッドのキューに追加される。
【０１２８】
タスクボックス７ａで、パケットは対応するパケット処理スレッド（例えば、パケット処理スレッド８５０Ａ〜８５０Ｄのうちの１つ）で処理される。各パケット処理スレッドは、対応するキューからパケットを取り出し、このパケットを処理する。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、２つ以上のスレッドを１つのプロセッサコア上で実行することができる。各パケット処理スレッド８５０Ａ〜Ｄは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス（ＮＩ）に出力されるか、または削除されるように、パケットを処理する。４つのパケット処理スレッド８５０Ａ〜８５０Ｄが図８に示されているが、本発明の代替の実施形態は、任意の数のパケット処理スレッドを含むことができる（例えば、数百または数千のパケット処理スレッドをネットワークデバイス内で実行することができる）。具体的には、代替の実施形態では、さまざまな数のパケット処理スレッドを各プールに含めることができる。各プール（正常、未処理、および移行）は１つまたは複数のパケット処理スレッドを含むことができ、プールのサイズは、ネットワークデバイスで受信されたトラフィックに従って適応可能である。
【０１２９】
タスクボックス７ｂで、パケット処理スレッドで処理されたパケットの負荷バランシングフラグは、このパケット処理スレッドの状態に基づいてセットされる。一部の実施形態では、未処理プールからのスレッドで処理されたパケットごとに、そのパケットを順序変更する必要があることを示すフラグ（負荷バランシングフラグ）がセットされる。一部の実施形態では、負荷バランシングフラグが、未処理プールからのパケット処理スレッドにおいて処理されたすべてのパケットのメタヘッダーにセットされ、負荷バランシングフラグは、正常プールからのパケット処理スレッドにおいて処理されているすべてのパケットにはセットされない。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかを示す。代替の実施形態では、負荷バランシングフラグは、未処理プールまたは移行プールからのパケット処理スレッドにおいて処理されているパケットに対してセットされ、負荷バランシングフラグは、パケットが正常プールからのパケット処理スレッドにおいて処理される場合、セットされない。
【０１３０】
一部の実施形態では、パケット処理スレッドの状態に基づいて、このスレッドにおいて処理されたパケットが、順序変更ブロック８６０に送信されて処理される。
【０１３１】
タスクボックス８ａで、処理済みのパケットの受信時に、順序変更ブロック８６０が、受信されたパケットを転送する前に、受信されたパケットに先行するパケットがすでに処理されて転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック８６０をスキップすることができ、パケットは、順序変更されることなく、パケット処理スレッドで処理された後に出力される。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、タスク２で割り当てられたシーケンス番号に従ってもはや処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。一部の実施形態では、出て行くパケットごとに、順序変更メカニズムが、パケットを処理したスレッドのプールを考慮し、わずかな順序変更操作を実行するか（正常プールからのパケット処理スレッドにおいて処理されたパケットの場合）、またはステージング領域内でのパケットのバッファリング（すなわち、タスクボックス８ｂでの格納）を含む完全な順序変更を実行する（未処理プールまたは移行プールからのパケット処理スレッドにおいて処理されたパケットの場合）。タスクボックス９で、パケットが入り口の順序で出力される。
【０１３２】
パケット処理スレッドの状態の監視および更新
図１１は、本発明の一部の実施形態に従う、パケット処理スレッドの状態の更新のブロック図を示している。システムの初期化時には、すべてのパケット処理スレッドは正常状態（１１０２）にあり、正常プールに属している。どのパケット処理スレッドでも未処理が発生しておらず、したがって、それらすべてのパケット処理スレッドは、直接マッピングされたパケットを処理し、転送する。図８のタスクボックス１０ａで、性能モニタ８４０が各パケット処理スレッドのキューの長さを監視し、図８のタスクボックス１０ｂで、性能モニタ８４０が監視に基づいて各パケット処理スレッドの状態を更新する。言い換えると、ネットワークデバイスにおいて実行されている各パケット処理スレッドの状態が、このネットワークデバイスにおいて受信されて処理されたトラフィックに従って監視および更新される。
【０１３３】
一部の実施形態では、タスクボックス１０ａで、性能モニタ８４０が、各キューの状態を追跡し、キューで未処理が発生したかどうかを決定する。パケット処理スレッドのキューでオーバーサブスクリプションが発生したことが判明した（例えば、キューの指数関数的加重移動平均（ＥＷＭＡ）キュー長がしきい値を超えた）場合、このスレッドの状態が「未処理状態」にセットされ、このパケット処理スレッドはスレッドの未処理プールの一部であると見なされる。図１１を参照すると、スレッドの状態が、「正常スレッド１１０２」から「未処理スレッド１１０４」に更新されている。
【０１３４】
一部の実施形態では、パケット処理スレッドの未処理プールが１つのパケット処理スレッドを含んでおり、未処理プールの一連のスレッドにわたるパケットの負荷バランシングを有効にするために、別のパケット処理スレッドをこのプールに追加することができる。一実施形態では、未処理プールに追加される追加のパケット処理スレッドは、キューの長さに従って選択できる。１つの非限定的な例では、最短のＥＷＭＡキュー長（例えば、最小の負荷が与えられたキューを持つスレッド）を持つパケット処理スレッドが未処理プールに追加される（すなわち、このスレッドの状態も「未処理」にセットされる）。「未処理」パケット処理スレッドのいずれか１つにマッピングされたすべてのパケットに対して、負荷バランサー８３０によって、未処理プール内のすべてのスレッドへの負荷バランシングが実行される。これによって、オーバーサブスクリプションが発生したスレッドに割り当てられたパケットフローを処理するのに使用できる計算リソースを効率的に増やす。
【０１３５】
一部の実施形態では、未処理プール内のすべての「未処理」スレッドのＥＷＭＡキュー長も監視される。プール内の大部分の（例えばスレッドのうちの８０％を超える）スレッドのＥＷＭＡキュー長がしきい値を超えた場合、別の未処理が発生していないスレッド（例えば、プール内の最短のＥＷＭＡキュー長を持つパケット処理スレッド）が、「未処理」のマークが付けられて未処理プールに追加される。一部の実施形態では、スレッドの未処理プールに追加するためのパケット処理スレッドを選択するために、移行プールが最初に使用され、その後、正常プールがチェックされる。
【０１３６】
さらに、パケット処理スレッドに関連するキューのオーバーサブスクリプションが軽減しているように見える場合、このパケット処理スレッドの状態を「未処理スレッド１１０４」から「移行スレッド１１０６」に更新することができる。
【０１３７】
一部の実施形態では、パケット処理スレッドが未処理プールから取り消され、未処理プール全体でのパケットの負荷バランシングにもはや参加しなくなった場合、このパケット処理スレッドに「移行スレッド１１０６」のマークが付けられる（すなわち、このパケット処理スレッドの状態は移行状態である）。
【０１３８】
一部の実施形態では、移行パケット処理スレッドが「未処理」スレッドに類似しており、適切な順序でのパケットの出力を保証するために、順序変更ブロック８６０が、移行スレッドによって処理されたパケットをステージング領域にバッファリングする。移行状態は、パケット処理スレッドを未処理プールから正常プールに移動するための移行期間を提供する。未処理プールから取り消されたパケット処理スレッドは、負荷バランシング実行済みパケットをまだキューに含んでいる場合があり、これらのパケットは順序変更ブロック８６０を介して順序変更する必要があるため、このスレッドを正常プールに直ちに移動することはできない。移行スレッドによって処理されたすべてのパケットには、負荷バランシングフラグのマークが付けられる。負荷バランシングフラグは、それらのパケットがステージング領域に格納され、出力される前に順序変更される必要があることを順序変更ブロック８６０に示す。
【０１３９】
一部の実施形態では、スレッドを「未処理スレッド１１０４」であることから「移行スレッド１１０６」であることに移行するために、性能モニタ８４０が、スレッドの未処理プールからのスレッドの削除が未処理プール内の他のスレッドに対する重い負荷に直ちにつながらないということを決定できる。このような他のスレッドに対する重い負荷は、未処理が発生していないスレッドをさらに追加することによって未処理プールを再び拡張することが必要になる場合があるため、望ましくない振動につながる可能性がある。
【０１４０】
一部の実施形態では、未処理状態から移行状態へのスレッドの移行が、下で説明されるメカニズムに従って実行される。すべての未処理スレッドに対する平均ＥＷＭＡ未処理が監視される。例えば、ブルームフィルタまたはＥＷＭＡを使用して、未処理が発生したパケット処理スレッドにマッピングされたフローの中から重いフローを検出することができる。重いフローの量および数における変化を考慮して、スレッドを未処理プールから移行プールにいつ移行するべきかを決定することができる。非限定的な例では、非常に重いフローが未処理スレッドにマッピングされている場合、この特定のスレッドを移行プールに移行することが安全ではない場合がある。これは、このスレッドで再び未処理が発生して、再び未処理プールに移行することが必要になる可能性が高いからである。
【０１４１】
一部の実施形態では、パケット処理スレッドの状態を「未処理スレッド１１０４」から「移行スレッド１１０６」に移行した後に、タイマーが開始される。タイムアウト時に、このスレッドの状態が「正常スレッド１１０２」に変更される。
【０１４２】
図８のタスクボックス１〜１０ｂのタスクは連続的順序で説明されているが、一部のタスクを同時に実行するか、または上で説明された順序とは異なる順序で実行することができる。例えば、キューの状態の監視を定期的に実行し、それと同時に、パケット処理スレッドへのパケットのマッピングを実行することができる（直接的なタスクボックス４または間接的なタスクボックス５）。他の実施形態では、追加のタスクまたはより少ないタスクを実行できる。
【０１４３】
正常な挙動のフローに対する影響を最小限に抑えるパケット処理における適応負荷バランシングを実装するネットワークデバイスの操作が、図９および図１０Ａ〜Ｃのフロー図を参照して説明される。ただし、パケット処理モジュール８００は、図９および図１０Ａ〜Ｃのフロー図を参照して説明される操作以外の操作を実行することができ、図９および図１０Ａ〜Ｃのフロー図を参照して説明される実施形態は、図８を参照して説明された実施形態以外の本発明の実施形態によって実行できるということが理解されるべきである。
【０１４４】
図９は、一実施形態に従って、ネットワークデバイス内の正常な挙動のフローに対する影響を最小限に抑える適応パケット処理の操作のフロー図を示している。ボックス９０２では、パケットがネットワーク要素で受信される。パケットはネットワークインターフェイスを介して受信され、シーケンス割り当て８１５に転送することができる。ブロック９０４では、マッピングブロック８１０がパケットを、パケット処理スレッド８５０からのパケット処理スレッドに割り当てる。一部の実施形態に従って、（前述したように）ヘッダーの構文解析およびパケット分類を実行するように、マッピングブロック８１０を設定または適応することができる。
【０１４５】
代替の実施形態では、ボックス９０４で、パケットをパケット処理スレッドに割り当てることが、パケットを対応するパケット処理スレッドのキューに追加する前に、パケットをバケット８２０Ａ〜Ｎのうちの１つにマッピングすることをさらに含む。マッピングは、ハッシュメカニズムに従って実行できる。一実施形態では、バケット８２０Ａ〜Ｎそれぞれが、パケット処理スレッド８５０Ａ〜Ｄのうちの１つに関連付けられる。例えば、パケットの受信時に、マッピングブロック８１０はパケットを、第１のパケット処理スレッド８５０Ａに関連付けられたバケット８２０Ａにマッピングすることができる。別の例では、パケットの受信時に、マッピングブロック８１０はパケットをバケット８２０Ｎにマッピングすることができ、次にバケット８２０Ｎが別のパケット処理スレッドに関連付けられる。
【０１４６】
ブロック９０６では、マッピングブロック８１０が、パケットが割り当てられたパケット処理スレッドの状態を決定する。一実施形態によれば、パケット処理スレッドの状態は、正常状態または未処理状態のいずれかであることができる。代替の実施形態では、パケット処理スレッドの状態は、正常状態、移行状態、または未処理状態のいずれかであることができる。パケット処理スレッドの状態が未処理状態である場合、この状態は、このパケット処理スレッドがスレッドの「未処理プール」の一部であることを示している。未処理プールは、パケットのフローに対して負荷バランシングを実行するために負荷バランサー８３０によって使用される一連のパケット処理スレッドである。パケット処理スレッドの状態が正常状態である場合、この状態は、このパケット処理スレッドがスレッドの「正常プール」の一部であることを示している。正常プールは、（負荷バランシングが実行されずに）パケット処理スレッドに直接マッピングされたフローのパケットを受信する一連のパケット処理スレッドである。第３の状態（移行状態）を含んでいる実施形態では、パケット処理スレッドが移行状態を有している場合、この状態は、このスレッドが最近、スレッドの未処理プールの一部だったが、スレッドの正常プールに移行していることを示している。各パケット処理スレッドの状態は、図８（性能モニタ８４０において実行されるタスクボックス１０ａおよび１０ｂ）および図１１を参照して上で説明された実施形態に従ってセットされ、更新される。
【０１４７】
パケットが（ボックス９０４でパケットが割り当てられた）第１のパケット処理スレッドにマッピングされるか、あるいは、第１のパケット処理スレッドの状態に基づいて負荷バランサー８３０にマッピングされる。状態が正常状態であると決定された場合、フローはブロック９０８に進む。状態が未処理状態であると決定された場合、フローはブロック９１０に進む。状態が移行状態であると決定された場合、フローはブロック９１２に進む。
【０１４８】
図１０Ａ〜Ｃは、本発明の一部の実施形態に従ってパケット処理スレッドの状態に基づいてパケットをパケット処理スレッドにマッピングする、ネットワークデバイス内で実行される詳細な操作のフロー図を示している。非限定的な例では、パケットが（ブロック９０４を参照して説明されたように）図８のパケット処理スレッド８５０Ａに割り当てられ、パケット処理スレッド８５０Ａの状態が正常状態である（すなわち、パケット処理スレッドがスレッドの正常プールの一部である）と決定されたときに、このパケットがブロック１００２で、処理のためにパケット処理スレッド８５０Ａに直接マッピングされる。別の非限定的な例では、パケットが図８のパケット処理スレッド８５０Ｂに割り当てられ、パケット処理スレッド８５０Ｂの状態が未処理状態である（すなわち、スレッドがスレッドの未処理プールの一部である）と決定されたときに、このパケットがブロック１０１２で、負荷バランシング方式に基づいて、パケット処理スレッドのプールからの第２のパケット処理スレッドにマッピングされる。この例では、未処理プールがネットワークデバイスのパケット処理スレッドのサブセットを含み、このプールからの各パケット処理スレッドの状態は未処理状態である（例えばパケットは、一連の「未処理」スレッド（例えば、図８の８５０Ｂおよび８５０Ｄ）のうちの１つに分散されるように、ブロック１０１２で図８の負荷バランサー８３０にマッピングされる）。一部の実施形態では、パケットを代わりにブロック１０２２で移行スレッド（例えば図８の８５０Ｃ）にマッピングすることができ、このパケットが割り当てられたパケット処理スレッドの状態が移行状態である（すなわち、このスレッドが移行プールの一部である）と決定されたときに、このパケットはブロック１０２２で、処理のためにパケット処理スレッド８５０Ｃに直接マッピングされる。
【０１４９】
パケット処理スレッドの状態に基づいて、パケットを（負荷バランサー８３０を通じて、または直接）パケット処理スレッド８５０のうちの１つにマッピングするときに、このパケットはこのパケット処理スレッドのキューに追加される。
【０１５０】
ブロック１００４、１０１４、および１０２４で、パケットが、このパケットがマッピングされたパケット処理スレッド（例えば、パケット処理スレッド８５０Ａ〜８５０Ｄのうちの１つ）において処理される。各パケット処理スレッドは、対応するキューからパケットを取り出してパケットを処理する。一実施形態では、各パケット処理スレッドが異なるプロセッサコア上で実行される。代替の実施形態では、２つ以上のスレッドを１つのプロセッサコア上で実行することができる。各パケット処理スレッド８５０Ａ〜Ｄは、転送テーブルに従って、パケットが適切な物理ネットワークインターフェイス（ＮＩ）に出力されるか、または削除されるように、パケットを処理する。４つのパケット処理スレッド８５０Ａ〜８５０Ｄが図８に示されているが、本発明の代替の実施形態は、任意の数のパケット処理スレッドを含むことができる（例えば、数百または数千のパケット処理スレッドをネットワークデバイス内で実行することができる）。
【０１５１】
図１０Ａ〜Ｃには示されていないが、一部の実施形態では、パケット処理スレッドで処理されたパケットの負荷バランシングフラグは、このパケットが処理されるときのパケット処理スレッドの状態に基づいてセットされる。一部の実施形態では、未処理スレッド（未処理プールからのスレッド）で処理されたパケットごとに、そのパケットを順序変更する必要があることを示すフラグ（負荷バランシングフラグ）がセットされる。一部の実施形態では、負荷バランシングフラグが、「未処理」パケット処理スレッドにおいて処理されたすべてのパケットのメタヘッダーにセットされ、負荷バランシングフラグは、正常パケット処理スレッドにおいて処理されたすべてのパケットにはセットされない。したがって、各パケットは、パケットが同じフローのすべてのパケットと共にパケット処理スレッドに直接マッピングされているかどうか、あるいはフローのパケットに対して、複数のパケット処理スレッド間の負荷バランシングが実行されているかどうかを示す。代替の実施形態では、負荷バランシングフラグが、「未処理」パケット処理スレッドにおいて処理されているパケット、および移行パケット処理スレッドにおいて処理されているパケットにセットされ、負荷バランシングフラグは、正常パケット処理スレッドにおいて処理されているパケットにはセットされない。
【０１５２】
一部の実施形態では、その後、パケットは順序変更ブロック８６０に送信され、このパケットはパケット処理スレッドの状態に基づいて処理される。
【０１５３】
ブロック１００６、１０１６、および１０２６で、一部の実施形態では、処理済みのパケットの受信時に、順序変更ブロック８６０が、受信されたパケットを転送する前に、受信されたパケットに先行するパケットがすでに処理されて転送されたかどうかを決定する。パケットの出口の順序は、ネットワーク要素の入り口でパケットに割り当てられたシーケンス番号に基づく。これらの一部の実施形態では、順序変更ブロック８６０をスキップすることができ、パケットは、順序変更されることなく、パケット処理スレッドで処理された後に出力される。他の実施形態では、フローのパケットが複数のパケット処理スレッドに分散された場合、それらのパケットは、割り当てられたシーケンス番号に従ってもはや処理されない。この例では、パケットは、入り口の順序とは異なる順序でパケット処理スレッドから出力される場合がある。パケットは、入り口で割り当てられた順序に従ってネットワーク要素から出力されることを保証するために、転送される前に順序変更される。
【０１５４】
一部の実施形態では、パケット処理スレッドで処理されたパケットの順序変更が、図６を参照して上で説明された操作に従って実行される。これらの実施形態では、パケットごとにセットされた負荷バランシングフラグに従って、パケットは、ネットワーク要素で受信された順序で出力されるのを保証するために、転送されるまでステージング領域に格納される。「未処理」スレッドまたは移行スレッドにおいて処理されたパケットはステージング領域に格納され、順序変更ブロック８６０によって順序変更される。正常スレッドにおいて処理されたパケットは、順序変更されずに出力される。
【０１５５】
開示される技術の実施形態は、適応パケット処理メカニズムを提供し、ネットワーク要素で受信されたフローごとに、パケットを転送するパケット処理スレッドの状態に基づいて直接フローマッピングと負荷バランシングマッピングの間で選択することによって高性能なパケット処理を提供することを目標とする。開示される技術の実施形態は、フローの大部分が（フロー−スレッド間の）直接マッピングに従って処理されることを可能にし、フローのその部分の順序変更のコストを防ぐ。開示される技術の実施形態は、負荷バランシングが、必要な場合にのみ、フローに対して負荷バランシングを実行することをさらに可能にする。したがって、適応パケット処理は、必要な場合にのみパケットの順序を変更する。
【０１５６】
図８〜１１を参照して説明されたパケット処理における適応負荷バランシングの実施形態は、本明細書で詳細に説明されているように、ネットワーク要素（ＮＥ）内で実装することができる。具体的には、開示される技術の実施形態は、仮想ネットワーク要素（ＶＮＥ）の転送仮想ネットワーク機能（転送ＶＮＦ）において実装することができる。
【０１５７】
本発明の実施形態を利用するＳＤＮおよびＮＦＶ環境
図１２は、本発明の一部の実施形態に従う、例のネットワーク内のネットワークデバイス（ＮＤ）間の接続およびＮＤの３つの実装例を示している。図１２に、ＮＤ１２００Ａ〜Ｈを示し、Ａ−Ｂ間、Ｂ−Ｃ間、Ｃ−Ｄ間、Ｄ−Ｅ間、Ｅ−Ｆ間、Ｆ−Ｇ間、およびＡ−Ｇ間の線、ならびにＨと、Ａ、Ｃ、Ｄ、およびＧそれぞれとの間の線によってこれらのＮＤの接続を示す。これらのＮＤは、物理デバイスであり、これらのＮＤ間の接続は、無線または有線にすることができる（多くの場合、リンクと呼ばれる）。ＮＤ１２００Ａ、Ｅ、およびＦから延びるその他の線は、これらのＮＤがネットワークの入り口ポイントおよび出口ポイントとして機能することを示している（したがって、これらのＮＤはエッジＮＤと呼ばれ、その他のＮＤはコアＮＤと呼ばれる場合がある）。
【０１５８】
図１２では、ＮＤの次の２つの実装例を示している。（１）カスタム特定用途向け集積回路（ＡＳＩＣ）および独自オペレーティングシステム（ＯＳ）を使用する専用ネットワークデバイス１２０２、および（２）一般的に市販されている（ＣＯＴＳ）プロセッサおよび標準ＯＳを使用する汎用ネットワークデバイス１２０４。
【０１５９】
専用ネットワークデバイス１２０２はネットワークハードウェア１２１０を含み、ネットワークハードウェア１２１０は、計算リソース１２１２（通常は、１つまたは複数のプロセッサのセットを含む）、転送リソース１２１４（通常は、１つまたは複数のＡＳＩＣおよび／またはネットワークプロセッサを含む）、および物理ネットワークインターフェイス（ＮＩ）１２１６（物理ポートと呼ばれる場合もある）、ならびにネットワークソフトウェアが格納された非一時的機械可読記憶媒体１２１８を備える。物理ＮＩはＮＤ内のハードウェアであり、物理ＮＩを介して（例えば、無線ネットワークインターフェイスコントローラ（ＷＮＩＣ）を介して無線で、またはネットワークインターフェイスコントローラ（ＮＩＣ）に接続された物理ポートにケーブルを差し込むことによって）、ＮＤ１２００Ａ〜Ｈ間の接続によって示されたネットワーク接続などのネットワーク接続が行われる。操作中に、ネットワークソフトウェアは、ネットワークハードウェア１２１０によって遂行され、１つまたは複数のネットワークソフトウェアインスタンス１２２２のセットをインスタンス化することができる。各ネットワークソフトウェアインスタンス１２２２およびこのネットワークソフトウェアインスタンスを遂行するネットワークハードウェア１２１０の部分（このネットワークソフトウェアインスタンス専用のハードウェアおよび／またはこのネットワークソフトウェアインスタンスによって、ネットワークソフトウェアインスタンス１２２２のうちの他のインスタンスと一次的に共有されるハードウェアのタイムスライス）は、個別の仮想ネットワーク要素１２３０Ａ〜Ｒを形成する。各仮想ネットワーク要素（ＶＮＥ）１２３０Ａ〜Ｒは、制御通信および設定モジュール１２３２Ａ〜Ｒ（ローカル制御モジュールまたは制御通信モジュールと呼ばれる場合もある）および転送テーブル１２３４Ａ〜Ｒを含み、特定の仮想ネットワーク要素（例えば１２３０Ａ）が制御通信および設定モジュール（例えば１２３２Ａ）、１つまたは複数の転送テーブル（例えば１２３４Ａ）のセット、および仮想ネットワーク要素（例えば１２３０Ａ）を遂行するネットワークハードウェア１２１０の部分を含むようにする。
【０１６０】
専用ネットワークデバイス１２０２は、多くの場合、物理的にかつ／または論理的に次を含むと考えられる。（１）制御通信および設定モジュール１２３２Ａ〜Ｒを遂行する計算リソース１２１２を備えるＮＤ制御プレーン１２２４（制御プレーンと呼ばれる場合もある）、および（２）転送テーブル１２３４Ａ〜Ｒおよび物理ＮＩ１２１６を利用する転送リソース１２１４を備えるＮＤ転送プレーン１２２６（転送プレーン、データプレーン、または媒体プレーンと呼ばれる場合もある）。例として、ＮＤがルータである（または、ルーティング機能を実装する）場合、ＮＤ制御プレーン１２２４（制御通信および設定モジュール１２３２Ａ〜Ｒを遂行する計算リソース１２１２）は、通常はデータ（例えばパケット）がルーティングされる方法（例えば、データのネクストホップおよびそのデータ用の送信物理ＮＩ）を制御することに参加すること、およびこのルーティング情報を転送テーブル１２３４Ａ〜Ｒに格納することに責任を負い、ＮＤ転送プレーン１２２６は、物理ＮＩ１２１６でこのデータを受信すること、および転送テーブル１２３４Ａ〜Ｒに基づいてこのデータを物理ＮＩ１２１６のうちの適切な物理ＮＩから転送することに責任を負う。仮想ネットワーク要素１２３０Ａ〜Ｒは、図８〜１０Ｃを参照して説明された本発明の実施形態を実装する状態に基づくパケット処理ソフトウェア（ＳＰＰ）１２２０のインスタンス１２２２Ａ〜１２２２Ｒを含むことができる。各インスタンス１２２２Ａは、パケットに割り当てられたパケット処理スレッドの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス１２０２で受信されたパケットを処理および転送するように設定される。
【０１６１】
汎用ネットワークデバイス１２０４はハードウェア２４０を含み、ハードウェア２４０は１つまたは複数のプロセッサ２４２のセット（多くの場合、ＣＯＴＳプロセッサ）およびネットワークインターフェイスコントローラ１２４４（ＮＩＣ、ネットワークインターフェイスカードとも呼ばれる）（物理ＮＩ１２４６を含んでいる）、ならびにソフトウェア１２５０が格納されている非一時的機械可読記憶媒体１２４８を備えている。操作中に、プロセッサ１２４２はソフトウェア１２５０を遂行してハイパーバイザ１２５４（仮想マシンモニタ（ＶＭＭ）と呼ばれる場合もある）およびハイパーバイザ１２５４によって実行される１つまたは複数の仮想マシン１２６２Ａ〜Ｒをインスタンス化する（これらのインスタンスは、総称してソフトウェアインスタンス１２５２と呼ばれる）。仮想マシンは、プログラムを物理的な非仮想マシン上で実行されているかのように実行する物理マシンのソフトウェア実装である。アプリケーションは、「ベアメタル」ホスト電子デバイス上で実行されるのとは対照的に、そのアプリケーションが仮想マシン上で実行されていることを通常は知らないが、一部のシステムは、最適化の目的で、オペレーティングシステムまたはアプリケーションが仮想化の存在を知ることができる準仮想化を提供する。各仮想マシン１２６２Ａ〜Ｒ、およびこの仮想マシン（この仮想マシン専用のハードウェアおよび／またはこの仮想マシンによって仮想マシン１２６２Ａ〜Ｒのうちの他の仮想マシンと一時的に共有されるハードウェアのタイムスライス）を遂行するハードウェア１２４０の部分は、個別の仮想ネットワーク要素１２６０Ａ〜Ｒを形成する。
【０１６２】
仮想ネットワーク要素１２６０Ａ〜Ｒは、仮想ネットワーク要素１２３０Ａ〜Ｒに類似する機能を実行する。例えば、ハイパーバイザ１２５４は、ネットワークハードウェア１２１０のように見える仮想処理プラットフォームを仮想マシン１２６２Ａに提示することができ、仮想マシン１２６２Ａを使用して、制御通信および設定モジュール１２３２Ａおよび転送テーブル１２３４Ａに類似する機能を実装できる（ハードウェア１２４０のこの仮想化は、ネットワーク機能仮想化（ＮＦＶ）と呼ばれる場合もある）。したがって、ＮＦＶを使用して、多くのネットワーク機器の種類を業界標準の大容量のサーバハードウェア、物理スイッチ、および物理記憶装置の上で統合し、データセンター、ＮＤ、および加入者宅内機器（ＣＰＥ）内に配置することができる。ただし、本発明の異なる実施形態は、仮想マシン１２６２Ａ〜Ｒのうちの１つまたは複数を異なって実装することができる。例えば、本発明の実施形態は、１つのＶＮＥ１２６０Ａ〜Ｒに対応する各仮想マシン１２６２Ａ〜Ｒを使用して説明されているが、代替の実施形態は、この対応をさらに細かい粒度で実装することができる（例えば、ラインカード仮想マシンがラインカードを仮想化し、制御カード仮想マシンが制御カードを仮想化するなど）。ＶＮＥに対する仮想マシンの対応を参照して本明細書に記載された手法は、そのようなさらに細かい粒度が使用される実施形態にも適用されると理解されるべきである。仮想ネットワーク要素１２６０Ａ〜Ｒは、図８〜１０Ｃを参照して説明された本発明の実施形態を実装する状態に基づくパケット処理ソフトウェア（ＳＰＰ）１２５０のインスタンス１２６６Ａ〜１２６６Ｒを含むことができる。各インスタンス１２６６Ａは、パケットに割り当てられたパケット処理スレッドの状態に基づいて、直接マッピング方式または負荷バランシング方式に従って、パケットをパケット処理スレッドにマッピングすることによって、ネットワークデバイス１２０４で受信されたパケットを処理および転送するように設定される。
【０１６３】
特定の実施形態では、ハイパーバイザ１２５４は、物理イーサネットスイッチに類似する転送サービスを提供する仮想スイッチを含む。具体的には、この仮想スイッチは、仮想マシンとＮＩＣ１２４４の間のトラフィック、および必要に応じて仮想マシン１２６２Ａ〜Ｒ間のトラフィックを転送する。加えて、この仮想スイッチは、互いに通信することがポリシーによって（例えば、仮想ローカルエリアネットワーク（ＶＬＡＮ）に従うことによって）許可されないＶＮＥ１２６０Ａ〜Ｒ間のネットワーク分離を強制することができる。
【０１６４】
図１２の第３のＮＤの実装例は、ハイブリッドネットワークデバイス１２０６であり、カスタムＡＳＩＣ／独自ＯＳとＣＯＴＳプロセッサ／標準ＯＳの両方を１つのＮＤまたはＮＤ内の１つのカードに含んでいる。そのようなハイブリッドネットワークデバイスの特定の実施形態では、プラットフォームＶＭ（すなわち、専用ネットワークデバイス１２０２の機能を実装するＶＭ）は、準仮想化をハイブリッドネットワークデバイス１２０６内に存在するネットワークハードウェアに提供できる。
【０１６５】
本発明は複数の実施形態に関して説明されたが、当業者は、本発明が説明された実施形態に限定されず、添付された請求項の精神および範囲に含まれる修正および変更を伴って実施可能であるということを認識するであろう。したがって説明は、制限ではなく例と見なされるべきである。
【０１６６】
例えば、図内のフロー図は、本発明の特定の実施形態によって実行される操作の特定の順序を示しているが、そのような順序は例であると理解されるべきである（例えば、代替の実施形態は、操作を異なる順序で実行すること、特定の操作を組み合わせること、特定の操作を重ね合わせることなどを実行できる）。
【図１】
0006466595.tif 000002
【図２】
0006466595.tif 000003
【図３】
0006466595.tif 000004
【図４】
0006466595.tif 000005
【図５】
0006466595.tif 000006
【図６】
0006466595.tif 000007
【図７Ａ】
0006466595.tif 000008
【図７Ｂ】
0006466595.tif 000009
【図７Ｃ】
0006466595.tif 000010
【図７Ｄ】
0006466595.tif 000011
【図７Ｅ】
0006466595.tif 000012
【図７Ｆ】
0006466595.tif 000013
【図８】
0006466595.tif 000014
【図９】
0006466595.tif 000015
【図１０Ａ】
0006466595.tif 000016
【図１０Ｂ】
0006466595.tif 000017
【図１０Ｃ】
0006466595.tif 000018
【図１１】
0006466595.tif 000019
【図１２】
0006466595.tif 000020