(57)【特許請求の範囲】
【請求項１】
ネットワーク環境における効率的なパケット処理をサポートするためのシステムであって、
１つ以上のマイクロプロセッサと、
前記１つ以上のマイクロプロセッサ上で動くスレッドスケジューリングエンジンとを含み、前記スレッドスケジューリングエンジンは、複数のソフトウェアスレッドにおける各ソフトウェアスレッドにスレッドキーを割当てるように動作し、前記システムはさらに、
前記ネットワーク環境においてパケットを処理するために使用される直接メモリアクセス（ＤＭＡ）リソースのプールを含み、
前記各ソフトウェアスレッドは、割当てられたスレッドキーを提示することによって、前記ＤＭＡリソースのプールにおけるあるＤＭＡリソースへのアクセスを要求するように動作する、システム。
【請求項２】
前記パケットは、仮想マシンによって生成される制御パケットである、請求項１に記載のシステム。
【請求項３】
前記ＤＭＡリソースのプールは、１つ以上のＤＭＡエンジンに関連付けられる、請求項１または２に記載のシステム。
【請求項４】
前記ＤＭＡリソースは、待ち時間要件と、各前記ＤＭＡエンジンが維持している必要があるデータレートとのうちの少なくとも１つに依存して割当てられる、請求項３に記載のシステム。
【請求項５】
前記スレッドスケジューリングエンジンは、オペレーティングシステム（ＯＳ）に基づいて構築されたスレッドスケジューラである、請求項１〜４のいずれか１項に記載のシステム。
【請求項６】
ソフトウェアスレッドから要求を受信し、物理的なＤＭＡリソースが利用可能な場合には当該ＤＭＡリソースを割当てるように動作するリソースマネージャをさらに含む、請求項１〜５のいずれか１項に記載のシステム。
【請求項７】
別のソフトウェアスレッドが前記ＤＭＡリソースにすでに割当てられていた場合、前記ＤＭＡリソースへのアクセスは拒否される、請求項６に記載のシステム。
【請求項８】
すべてのＤＭＡリソースが使用されている場合、要求しているソフトウェアスレッドは待たされる、請求項６または７に記載のシステム。
【請求項９】
単一のソフトウェアスレッドが複数のＤＭＡリソースにアクセスすることが可能にされる、請求項１〜８のいずれか１項に記載のシステム。
【請求項１０】
前記単一のソフトウェアスレッドは、前記複数のＤＭＡリソース間の順序付けを決定するように動作する、請求項９に記載のシステム。
【請求項１１】
ネットワーク環境における効率的なパケット処理をサポートするための方法であって、
１つ以上のマイクロプロセッサ上で動くスレッドスケジューリングエンジンを提供するステップを含み、前記スレッドスケジューリングエンジンは、複数のソフトウェアスレッドにおける各ソフトウェアスレッドにスレッドキーを割当てるように動作し、前記方法はさらに、
前記ネットワーク環境においてパケットを処理するために使用される直接メモリアクセス（ＤＭＡ）リソースのプールを提供するステップと、
前記各ソフトウェアスレッドが、割当てられたスレッドキーを提示することによって、前記ＤＭＡリソースのプールにおけるあるＤＭＡリソースへのアクセスを要求することを可能にするステップとを含む、方法。
【請求項１２】
実行されると、複数のステップをシステムに行なわせる命令を含むマシン読取可能なプログラムであって、前記複数のステップは、
１つ以上のマイクロプロセッサ上で動くスレッドスケジューリングエンジンを提供するステップを含み、前記スレッドスケジューリングエンジンは、複数のソフトウェアスレッドにおける各ソフトウェアスレッドにスレッドキーを割当てるように動作し、前記複数のステップはさらに、
ネットワーク環境においてパケットを処理するために使用される直接メモリアクセス（ＤＭＡ）リソースのプールを提供するステップと、
前記各ソフトウェアスレッドが、割当てられたスレッドキーを提示することによって、前記ＤＭＡリソースのプールにおけるあるＤＭＡリソースへのアクセスを要求することを可能にするステップとを含む、マシン読取可能なプログラム。
【請求項１３】
ネットワーク装置における効率的なパケット処理をサポートするためのシステムであって、
前記ネットワーク装置上のメモリにおける複数のパケットバッファと、
直接メモリアクセス（ＤＭＡ）リソースプールとを含み、前記ＤＭＡリソースプールは１つ以上のＤＭＡリソースを含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、前記メモリにおけるパケットバッファのチェーンを指し示し、
各前記ＤＭＡリソースは、パケット処理スレッドが、前記パケット処理スレッドに予め割当てられたスレッドキーを使用して、前記メモリにおけるパケットバッファのチェーンにアクセスすることを可能にする、システム。
【請求項１４】
前記パケット処理スレッドは、予め割当てられた同じスレッドキーを使用して、前記メモリにおけるパケットバッファの複数のチェーンにアクセスするように動作する、請求項１３に記載のシステム。
【請求項１５】
前記パケット処理スレッドは、前記パケットバッファの複数のチェーンにおけるパケットを処理するために依存リストを設定するように動作する、請求項１４に記載のシステム。
【請求項１６】
複数のパケット処理スレッドが、前記メモリにおけるパケットバッファの別々のチェーンに同時にアクセスするように動作する、請求項１３〜１５のいずれか１項に記載のシステム。
【請求項１７】
少なくとも１つのＤＭＡリソースは、パケットバッファのリンクリストを指し示す、請求項１３〜１６のいずれか１項に記載のシステム。
【請求項１８】
前記リンクリストにおける各パケットバッファは、識別子と連結している、請求項１７に記載のシステム。
【請求項１９】
少なくとも１つのＤＭＡリソースは、識別子のリニアアレイを指し示す、請求項１３〜１８のいずれか１項に記載のシステム。
【請求項２０】
前記識別子のリニアアレイにおける各識別子は、パケットバッファを指し示す、請求項１９に記載のシステム。
【請求項２１】
前記複数のパケットバッファは、リンクリストとリニアアレイとの混合に基づいて構成される、請求項１３〜２０のいずれか１項に記載のシステム。
【請求項２２】
前記ＤＭＡリソースプールは、パケット処理スレッドがリンクリストに基づいてバッファのチェーンにアクセスすべきか、またはリニアアレイに基づいてバッファのチェーンにアクセスすべきかを動的に判断するように動作する、請求項２１に記載のシステム。
【請求項２３】
ネットワーク環境における効率的なパケット処理をサポートするための方法であって、
ネットワーク装置上のメモリにおける複数のパケットバッファを提供するステップと、
直接メモリアクセス（ＤＭＡ）リソースプールを提供するステップとを含み、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、前記メモリにおけるパケットバッファのチェーンを指し示し、前記方法はさらに、
各前記ＤＭＡリソースを介して、パケット処理スレッドが、前記パケット処理スレッドに予め割当てられたスレッドキーを使用して、前記メモリにおけるパケットバッファのチェーンにアクセスすることを可能にするステップを含む、方法。
【請求項２４】
実行されると、複数のステップをシステムに行なわせる命令を含むマシン読取可能なプログラムであって、前記複数のステップは、
ネットワーク装置上のメモリにおける複数のパケットバッファを提供するステップと、
直接メモリアクセス（ＤＭＡ）リソースプールを提供するステップとを含み、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、前記メモリにおけるパケットバッファのチェーンを指し示し、前記複数のステップはさらに、
各前記ＤＭＡリソースを介して、パケット処理スレッドが、前記パケット処理スレッドに予め割当てられたスレッドキーを使用して、前記メモリにおけるパケットバッファのチェーンにアクセスすることを可能にするステップを含む、マシン読取可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示
この特許文献の開示の一部は、著作権保護の対象となる資料を含む。この特許文献または特許開示は特許商標庁の特許ファイルまたは記録に記載されているため、著作権保有者は、その複写複製に対して異議はないが、その他の場合には何であれすべての著作権を保有する。
【０００２】
発明の分野
この発明は一般にコンピュータシステムに関し、特に、ミドルウェアおよびアプリケーション実行のための工学システムに関する。
【背景技術】
【０００３】
背景
より大きいクラウド・コンピューティング・アーキテクチャが導入されるにつれて、従来のネットワークおよびストレージに関する性能および管理上の障害が、著しい問題になっている。オラクル工学システムなどの工学システムは、優れた処理速度、著しくより速いデプロイメント、綿密な分析用の即時のビジュアル、および扱いやすいビッグデータ能力を提供できる。これは、この発明の実施形態が取組むよう意図される一般領域である。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
ここに説明されるのは、ネットワーク環境における効率的なパケット処理をサポートできるシステムおよび方法である。システムは、複数のソフトウェアスレッドにおける各ソフトウェアスレッドにスレッドキーを割当てるように動作するスレッドスケジューリングエンジンを含み得る。さらに、システムは、ネットワーク環境においてパケットを処理するために使用可能な直接メモリアクセス（direct memory access：ＤＭＡ）リソースのプールを含み得る。加えて、前記各ソフトウェアスレッドは、割当てられたスレッドキーを提示することによって、ＤＭＡリソースのプールにおけるあるＤＭＡリソースへのアクセスを要求するように動作し、同じスレッドキーを使用して、単一のソフトウェアスレッドが複数のＤＭＡリソースにアクセスすることが可能にされる。
【０００５】
ここに説明されるのは、ネットワーク環境における効率的なパケット処理をサポートできるシステムおよび方法である。システムは、ＤＭＡリソースの１つ以上を含む直接メモリアクセス（ＤＭＡ）リソースプールを含み得る。さらに、システムは、メモリにおける複数のパケットバッファを使用でき、各前記ＤＭＡリソースは、メモリにおけるパケットバッファのチェーンを指し示すことができる。ここで、パケットバッファのチェーンは、リンクリストデータ構造および／またはリニアアレイデータ構造に基づいて実装され得る。加えて、各前記ＤＭＡリソースは、パケット処理スレッドが、予め割当てられたスレッドキーを使用してパケットバッファのチェーンにアクセスすることを可能にする。
【図面の簡単な説明】
【０００６】
【図１】この発明の一実施形態に従った、ネットワーク環境における高性能ネットワーキング装置をサポートする図である。
【図２】この発明の一実施形態に従った、ネットワーキング装置における効率的なパケット処理モデルをサポートする図である。
【図３】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理モデルをサポートする図である。
【図４】この発明の一実施形態に従った、ネットワーク環境における効率的なパケット処理をサポートするための例示的なフローチャートである。
【図５】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のための効率的なバッファ利用をサポートする図である。
【図６】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のためにバッファチェーンを使用する図である。
【図７】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のためにバッファの１つ以上のリンクリストを使用する図である。
【図８】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理をサポートするために１つ以上のリニアアレイを使用する図である。
【図９】この発明の一実施形態に従った、ネットワーキング装置におけるフレキシブルなパケット処理をサポートするためにリンクリストとリニアアレイとの混合を使用する図である。
【図１０】この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のための効率的なバッファ利用をサポートするための例示的なフローチャートである。
【発明を実施するための形態】
【０００７】
詳細な説明
この発明を、限定のためではなく例示のために、添付図面の図に示す。図中、同じ参照符号は同様の要素を示す。なお、この開示における「ある」または「１つの」または「いくつかの」実施形態への言及は、必ずしも同じ実施形態に対するものではなく、そのような言及は「少なくとも１つ」という意味である。
【０００８】
以下のようなこの発明の説明は、高性能ネットワーキング装置のために、一例としてインフィニバンド（InfiniBand：ＩＢ）ネットワークスイッチを使用する。他のタイプの高性能ネットワーキング装置が限定なしで使用可能であることは、当業者には明らかであろう。
【０００９】
ここに説明されるのは、ネットワーク環境におけるマルチスレッドの直接メモリアクセス（ＤＭＡ）処理をサポートすることができるシステムおよび方法である。この発明の一実施形態によれば、このシステムは、ＤＭＡ処理がフレキシブルであること、および低いメモリフットプリントを有することを可能にする。
【００１０】
高性能ネットワーキング装置
図１は、この発明の一実施形態に従った、ネットワーク環境における高性能ネットワーキング装置をサポートする図を示す。図１に示すように、ネットワーク環境１００においてパケットフローを差し向けるために、ネットワークファブリック１０２においてネットワークスイッチなどの高性能ネットワーキング装置１０１を使用することができる。
【００１１】
この発明の一実施形態によれば、（たとえば、制御パケットおよびデータパケット双方を含む）パケット１２１〜１２４などのパケットを処理するために、ネットワーキング装置１０１において、組込プロセッサ、たとえばＤＭＡエンジン１１０を使用することができる。ここで、これらのパケット１２１〜１２４の送受信は、ネットワーキング装置１０１のネットワークポート１１１〜１１２で起こり得る。
【００１２】
図１に示すように、ネットワーキング装置１０１は、仮想化ファブリックをサポートすることができる。システムは、仮想化アプリケーション１０８が、１つ以上のホストマシン１０３〜１０４を使用してサポートされる１つ以上の仮想マシン（virtual machine：ＶＭ）１０５〜１０７上で動くことを可能にする。
【００１３】
さらに、ネットワーキング装置１０１が仮想化ファブリックをサポートする場合、制御パケット１２１〜１２４を処理するためのスループット要件は、異なる仮想化アプリケーション１０８の要件に従って変わる場合がある。図１に示すように、ネットワークファブリック１０２は、さまざまなホスト１０３〜１０４／ＶＭ１０５〜１０７からの複数のパケットストリームを差し向けるために、ネットワーキング装置１０１を使用することができる。
【００１４】
仮想化アプリケーション１０８をサポートするために、さまざまなＶＭ１０５〜１０７からのこれらの異なる制御パケットストリームは、パケット処理のために、ネットワーキング装置１０１におけるハードウェアリソースにマッピングされ得る。この発明の一実施形態によれば、ＤＭＡエンジン１１０などの組込プロセッサは、異なるタイプのパケット処理を行なうことができ、多数のソフトウェアスレッド（または作業待ち行列）を実行することができる。
【００１５】
かなりのＣＰＵ能力およびシステムメモリを有し得る従来のネットワークインターフェイスカード（network interface card：ＮＩＣ）上で動くＤＭＡエンジンとは異なり、組込システムは、限られたＣＰＵ能力およびシステムメモリを有する場合がある。このため、ソフトウェアスレッドを組込システムにおけるハードウェアリソースにマッピングすることは、著しいソフトウェア性能ペナルティを招く場合がある。たとえば、これらの性能ペナルティは、ソフトウェアスレッド・ロッキングオーバーヘッド、パケットバッファ管理の形、および他の形で現われる場合があり、それは、利用可能なＣＰＵ能力をさらに低下させ得る。
【００１６】
この発明の一実施形態によれば、システムは、ネットワーク環境１００における効率的なパケット処理モデルをサポートするためのフレームワークを提供することができる。このフレームワークは、ロッキングおよびスレッド競合なく、多数のソフトウェアスレッドを、限られた一組のハードウェアＤＭＡ処理スレッドにマッピングすることができる。加えて、システムは、ネットワーキング装置１０１におけるパケット処理のためのバッファ利用を最適化することができる。
【００１７】
パケット処理モデル
図２は、この発明の一実施形態に従った、ネットワーキング装置における効率的なパケット処理をサポートする図を示す。図２に示すように、ハードウェアは空いているＤＭＡリソースプール２１０を提供でき、それは１つ以上のＤＭＡリソース２１１〜２１３を含む。
【００１８】
この発明の一実施形態によれば、ＤＭＡリソース２１１〜２１３は、データ移動に使用されるＤＭ識別子、バッファ管理およびＤＭＡエンジンを表わし得る。たとえば、ＤＭＡリソース２１１〜２１３は、パケット転送が起こり得る物理的媒体を表わす１つ以上のＤＭＡエンジン２２０に結合され得る。
【００１９】
図２に示すように、システムは、効率的なパケット処理モデル２００を提供することができ、それは、多数のソフトウェアスレッド２０２を、限られた一組のハードウェアＤＭＡ処理スレッド２０１にマッピングすることができる。ＤＭＡリソース２１１〜２１３は、必要に応じてさまざまなソフトウェアスレッド２２１〜２２９のためにオンデマンドで割当てられ得る。また、ＤＭＡリソース２１１〜２１３は、ソフトウェアスレッド２２１〜２２９によって動的に放棄され得る。
【００２０】
たとえば、ＤＭＡリソース２１１〜２１３は、各ＤＭＡエンジンが維持できるデータレートに従って割当てられ得る。ここで、ＤＭＡリソース２１１〜２１３の割当ては、所与のＤＭＡエンジン上で動くソフトウェアスレッドの数に依存していなくてもよい。これは、トラフィック処理が複数のソフトウェアスレッド中に広がるかもしれず、これらのソフトウェアスレッドの各々は動作処理時間の間のみアクティブであるかもしれないためである。
【００２１】
図３は、この発明の一実施形態に従った、ネットワーキング装置における効率的なパケット処理モデルをサポートする図を示す。図３に示すように、ネットワーキング装置３００におけるソフトウェアスレッド３０１〜３０９の各々に異なるスレッドキー（たとえば、キー０  ３１１〜キー９  ３１９）を割当てるために、スレッドスケジューラ３１０などのスレッドスケジューリングエンジンを使用することができる。ここで、スレッドスケジューラ３１０は、標準リアルタイムＯ／ＳまたはカスタマイズされたＯ／Ｓに基づいて構築可能である。
【００２２】
この発明の一実施形態によれば、あるソフトウェアスレッドがネットワークデータ転送の実行を必要とする場合、そのソフトウェアスレッドは、割当てられたスレッドキーをあるＤＭＡリソースに提示することによって、そのＤＭＡリソースへのアクセを要求できる。図３に示すように、各ソフトウェアスレッド３０１〜３０９はスレッドキーをリソースマネージャ３３０に提示することができ、それは、異なるソフトウェアスレッド３０１〜３０９のためにＤＭＡリソースを割当てるために使用される。
【００２３】
たとえば、スレッドＩＤ  Ｔｈｉｄ０を有するソフトウェアスレッド３０１は、ＤＭＡリソースプール３２０からあるＤＭＡリソースを割当てるために、割当てられたスレッドキーであるキー０  ３１１を使用できる。また、スレッドＩＤ  Ｔｈｉｄ１を有するソフトウェアスレッド３０２は、ＤＭＡリソースプール３２０からあるＤＭＡリソースを割当てるために、割当てられたスレッドキーであるキー１  ３１２を使用できる。同様に、スレッドＩＤ  Ｔｈｉｄ９を有するソフトウェアスレッド３０９は、ＤＭＡリソースプール３２０からあるＤＭＡリソースを割当てるために、割当てられたスレッドキーであるキー９  ３１９を使用できる。
【００２４】
ＤＭＡリソースプール３２０におけるいずれかのＤＭＡリソースが空いている場合、その利用可能なＤＭＡリソースを、要求しているソフトウェアスレッドに割当てることができる。たとえば、割当てられたＤＭＡリソースは、要求しているソフトウェアスレッドに関連付けられた割当てられたスレッドキーにマッピングされ得る。一方、ＤＭＡリソースが別のソフトウェアスレッドにすでに割当てられていた場合、要求しているソフトウェアスレッドは、ＤＭＡリソースへのアクセスを防止（または拒否）されるかもしれない。加えて、システムは、要求しているソフトウェアスレッドのために適切なステータスを設定することができる。さらに、すべてのＤＭＡリソースが使用されている場合、要求しているソフトウェアスレッドは、ＤＭＡリソースプール３２０におけるあるＤＭＡリソースが空くまで待たなければならないかもしれない。
【００２５】
この発明の一実施形態によれば、ＤＭＡリソースがソフトウェアスレッドに割当てられた後、割当てられたスレッドキーを使用して、要求しているソフトウェアスレッドはさらに、それが必要とするようにＤＭＡリソースを構成することができる。たとえば、要求しているソフトウェアスレッドは、（たとえば、リング構造の代わりにリンクリストを使用して）識別子特性を設定することができる。
【００２６】
加えて、必要であれば、単一のソフトウェアスレッドが複数のＤＭＡリソースに対して要求を行なうことができる。システムは、割当てられた同じスレッドキーに基づいて、空いているプール３２０において利用可能な複数のＤＭＡリソース３２１〜３２３を、要求しているソフトウェアスレッドに割当てることができる。さらに、これらのＤＭＡリソース３２１〜３２３が一旦割当てられると、ソフトウェアスレッドは、それが複数の割当てられたリソース間の順序付けを維持したいかどうかを決定することができる。たとえば、順序付けが必要とされる場合、ソフトウェアスレッドは、ハードウェアに依存リストを提供することができる。
【００２７】
この発明の一実施形態によれば、システムは、複数のスレッドが同時に（パケットバッファを含む）ＤＭＡリソース３２１〜３２３にアクセスすることを可能にする。各スレッドが異なるスレッドキーを有することを可能にすることにより、システムは、相互排除ロックまたはセマフォを実装する必要なく、ネットワークファブリックからパケットを送受信することができる。
【００２８】
この発明の一実施形態によれば、スレッドキースペースは、多数の可能なソフトウェアスレッドをサポートするために多数のエントリを含むように構成可能である。このため、システムは、多数のソフトウェアスレッドを、限られた一組のハードウェアリソースにマッピングすることができる。
【００２９】
図４は、この発明の一実施形態に従った、ネットワーク環境における効率的なパケット処理をサポートするための例示的なフローチャートを示す。図４に示すように、ステップ４０１で、システムはスレッドスケジューリングエンジンを提供でき、前記スレッドスケジューリングエンジンは、複数のソフトウェアスレッドにおける各ソフトウェアスレッドにスレッドキーを割当てるように動作する。さらに、ステップ４０２で、システムは、ネットワーク環境においてパケットを処理するように動作する直接メモリアクセス（ＤＭＡ）リソースのプールを提供できる。次に、ステップ４０３で、前記各ソフトウェアスレッドは、割当てられたスレッドキーを提示することによって、ＤＭＡリソースのプールにおけるあるＤＭＡリソースへのアクセスを要求するように動作する。
【００３０】
パケット処理のための効率的なバッファ利用
図５は、この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のための効率的なバッファ利用をサポートする図である。図５に示すように、ＤＭＡリソースプール５２０におけるＤＭＡリソース５２１〜５２３は、１つ以上のバッファチェーン５３１〜５３３に関連付けられることができ、それらは各々、ネットワーキング装置５００においてさまざまな数のパケットバッファを含むことができる。
【００３１】
この発明の一実施形態によれば、あるＤＭＡリソースが初期化されると、そのＤＭＡリソースは空のコンテナを指し示すことができ、それはパケットバッファを含むために使用可能である。さらに、さまざまなパケットバッファが配置される、メモリにおけるバッファチェーン５３１〜５３３は、リンクリストまたはリニアアレイの形をとり得る。固定リング構造とは異なり、バッファチェーン５３１〜５３３のサイズは増大可能である（メモリ制限に従う）。加えて、バッファチェーン５３１〜５３３を使用して、システムは、待ち行列構造へのマルチスレッドアクセスを可能にする。
【００３２】
図５に示すように、ソフトウェアスレッド５０１〜５０９は、（キー０  ５１１〜キー９  ５１９などの）予め割当てられたスレッドキーを提示することによって、バッファチェーン５３１〜５３３におけるパケットバッファにアクセスすることを要求できる。たとえば、ソフトウェアスレッド５０１は、予め割当てられたスレッドキーであるキー０  ５１１を使用して、バッファチェーン５３１におけるパケットバッファにアクセスできる。また、ソフトウェアスレッド５０２は、予め割当てられたスレッドキーであるキー１  ５１２を使用して、バッファチェーン５３２におけるパケットバッファにアクセスできる。
【００３３】
さらに、パケット処理ソフトウェアスレッドが２組以上のバッファチェーンを処理する必要がある場合（たとえば、第１の組のパケット処理待ち行列が終わる前に第２の組のパケット処理待ち行列をスケジューリングする場合）、要求しているソフトウェアスレッドは、同じハードウェアＤＭＡリソースプール５２０から別のＤＭＡリソースを得て使用することができる。図５に示すように、ソフトウェアスレッド５０１は、予め割当てられた同じスレッドキーであるキー０  ５１１を使用して、バッファチェーン５３３におけるパケットバッファにアクセスすることを要求できる。
【００３４】
加えて、複数のパケット処理プロセス間で順序付けが必要とされる場合、システムは、構成の一部としてリソース依存数を設定することができる。依存リストが設定される場合、ハードウェアプロセッサはパケット処理をシリアル化することができる。その他の場合、システムは任意の態様でパケットを処理してもよい。
【００３５】
さらに、ある特定のタスクが、ハードウェアスレッドによる潜在的に並列の処理を必要とするとともに、結果が順番に送信されることも必要とする場合、システムは、依存属性セットを有するＤＭＡエンジンにタスクを発送することができる。このため、システムは、ＤＭＡリソースをオンデマンドで割当てるとともに、作業をパイプライン化することができ、アイドルＣＰＵ時間が利用可能な場合にはそれを利用することができる。
【００３６】
この発明の一実施形態によれば、各ソフトウェアスレッド５０１〜５０９には（キー０  ５１１〜キー９  ５１９などの）スレッドキーが予め割当てられているため、システムは、相互排除ロックまたはセマフォを実装する必要なく、異なるバッファチェーン５３１〜５３３におけるパケットバッファに同時にアクセスするように複数のスレッドをセットアップすることができる。これは、ネットワークファブリックからのパケットの送信および受信双方について当てはまり得る。また、独立した流れが送信されている場合、上述のスキームは、パケットがバッチ状で直列または並列にハードウェアに渡されることを可能にする。
【００３７】
図６は、この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のためにバッファチェーンを使用する図を示す。図６に示すように、ネットワーキング装置６００において複数のソフトウェアスレッド６０１〜６０９を空いているプール６２０における別々のＤＭＡリソースにマッピングするために、リソースマネージャ６１０が使用可能である。
【００３８】
空いているプール６２０におけるＤＭＡリソースの各々は、ＲＩＤ０  ６２１、ＲＩＤ３  ６２２、およびＲＩＤＮ  ６２３などのリソースＩＤに関連付けられ得る。さらに、各ＤＭＡリソースは、異なるバッファチェーンにアクセスするために使用可能であるスレッドキー、および／または、異なるバッファチェーンを割当てて管理するために使用可能であるスレッドＩＤを保持することができる。
【００３９】
たとえば、（キー０というスレッドキーを有する）ソフトウェアスレッド０  ６０１は、ＤＭＡリソースの割当てを要求するために、そのスレッドキー（キー０）をリソースマネージャ６１０に提示することができる。リソースマネージャ６１０は次に、スレッドキー（キー０）を、利用可能なＤＭＡリソース、たとえばＲＩＤ０  ６２１に提供することができる。さらに、スレッド６０１がより多くのハードウェアリソースを必要とする場合、リソースマネージャ６１０は、スレッドキー（キー０）を、別の利用可能なＤＭＡリソース、たとえばＲＩＤＮ  ６２３に提供することができる。
【００４０】
次に、リソースマネージャ６１０は、ＤＭＡリソースのステータスおよびすべての関連するリソース番号（たとえばＲＩＤ０  ６２１およびＲＩＤＮ  ６２３）をソフトウェアスレッド６０１に戻すことができる。このため、ソフトウェアスレッド０  ６０１は、バッファ６３１〜６３３および６３７〜６３９のチェーン双方へのアクセスを有することができ、パケット処理終了後に関連するＤＭＡリソースの割当てを解除することができる。
【００４１】
同様に、（キー１というスレッドキーを有する）ソフトウェアスレッド１  ６０２は、ＤＭＡリソースの割当てを要求するために、そのスレッドキー（キー１）をリソースマネージャ６１０に提示することができる。リソースマネージャ６１０は次に、スレッドキー（キー１）を、利用可能なＤＭＡリソース、たとえばＲＩＤ３  ６２２に提供することができる。このため、ソフトウェアスレッド１  ６０２は、バッファ６３４〜６３６のチェーンへのアクセスを有することができる。
【００４２】
図７は、この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のためにバッファの１つ以上のリンクリストを使用する図を示す。図７に示すように、ネットワーキング装置７００における空いているＤＭＡリソースプール７１０は、１つ以上のＤＭＡリソースを維持することができ、それらは各々、ＲＩＤ、順序、ヘッドアドレス、およびヘッド長などのいくつかの異なる特性に関連付けられ得る。ここで、ＲＩＤ特性は、バッファチェーンに割当てられたリソース番号を含むことができ、順序特性は、ある特定のバッファチェーンが、別のバッファチェーンに続いて処理されるように構成されることを示すことができる。
【００４３】
図７に示すように、システムは、さまざまなパケットを保持するためのバッファチェーンを実装するために、リンクリストデータ構造を使用することができる。たとえば、リソース番号１を有するＤＭＡリソースは、ヘッドアドレスｈ１を有するパケットバッファ７１１から始まるパケットバッファのリンクリストを指し示すことができる。ここで、パケットバッファ７１１は識別子と連結される。リンクリスト内で、パケットバッファ７１１は次のパケットバッファ７１２を指し示すことができ、パケットバッファ７１２は次のパケットバッファ７１３を指し示すことができる（パケットバッファ７１２およびパケットバッファ７１３の各々も、識別子と連結される）。
【００４４】
加えて、リソース番号２を有するＤＭＡリソースは、ヘッドアドレスｈ２を有するパケットバッファ７１４から始まるパケットバッファのリンクリストを指し示すことができる。ここで、パケットバッファ７１４は識別子と連結され、別のパケットバッファ７１５を指し示すことができる。
【００４５】
さらに、リソース番号１を有するＤＭＡリソースにアクセスしているソフトウェアスレッドは、追加のハードウェアリソースにアクセスすることを要求してもよい。たとえば、ソフトウェアスレッドは、リソース番号３２を有するＤＭＡリソースにアクセスでき、それは、ヘッドアドレスｈ３２を有するパケットバッファ７１６から始まるパケットバッファのリンクリストを指し示す。同様に、パケットバッファ７１６は識別子と連結され、リンクリストにおける他のパケットバッファ７１７および７１８を指し示すことができる。
【００４６】
また、図７に示すように、システムは、リソース番号３２を有するＤＭＡリソースのための順序値を１に設定することにより、（パケットバッファ７１３からパケットバッファ７１６を指し示す矢印７２０として示すように）パケットバッファ７１１〜７１３を処理してからパケットバッファ７１６〜７１８を処理するよう、ハードウェアに強制することができる。
【００４７】
この発明の一実施形態によれば、リンクリストに基づいたスキームを使用して、システムは、メモリの限られたフットプリントを提供でき、それは組込システムの場合には有利になり得る。たとえば、Ｌｉｎｕｘ（登録商標）環境のためのパケットバッファのリンクリストの実装は、単純明快であり得る。なぜなら、パケットのＬｉｎｕｘ実装はリンクリストに基づいているためである。このため、システムは、Ｌｉｎｕｘ環境におけるパケットのリンクリストを、メモリにおけるパケットバッファのハードウェアリンクリストへと直接変換することができる。
【００４８】
さらに、実装はＯＳから独立し得る。たとえば、システムは、あらゆる汎用ＯＳ、カスタムＯＳ、または組込ＲＴＯＳ上で実装され得る。
【００４９】
図８は、この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理をサポートするために１つ以上のリニアアレイを使用する図を示す。図８に示すように、ネットワーキング装置８００における空いているＤＭＡリソースプール８１０は、１つ以上のＤＭＡリソースを維持することができる。さらに、各ＤＭＡリソースは、ＲＩＤ、順序、ヘッドアドレス、およびヘッド長などのいくつかの異なる特性に関連付けられ得る。ここで、ＲＩＤ特性は、バッファチェーンに割当てられたリソース番号を含むことができ、順序特性は、ある特定のバッファチェーンが、別のバッファチェーンに続いて処理されるように構成されることを示すことができる。
【００５０】
この発明の一実施形態によれば、システムは、さまざまなパケットを保持するためのバッファチェーンを実装するために、識別子のリニアアレイを使用することができる。さらに、識別子のリニアアレイにおける各識別子は、別個のパケットバッファを指し示すことができ、システムは、異なるパケット識別子から各パケットバッファに達することができる。
【００５１】
図８に示すように、リソース番号２を有するＤＭＡリソースは、ヘッドアドレスｈ２を有する識別子８１１のリニアアレイを指し示すことができる。また、リソース番号３を有するＤＭＡリソースは、ヘッドアドレスｈ３を有する識別子８１２のリニアアレイを指し示すことができる。ここで、識別子８１１〜８１２のリニアアレイはパケットバッファと連結されていない。
【００５２】
加えて、システムは、パケットバッファが予め構成された順序に従って処理されることを可能にする。たとえば、システムは、（識別子８１１のリニアアレイから識別子８１２のリニアアレイを指し示す矢印８２０として示すように）識別子８１１のリニアアレイに関連付けられたパケットバッファを処理してから識別子８１２のリニアアレイに関連付けられたパケットバッファを処理するよう、ハードウェアエンジンに強制するために、リソース番号３を有するＤＭＡリソースのための順序値を２に設定する。
【００５３】
この発明の一実施形態によれば、システムは、各パケットを連続して別個に扱う必要なく、複数のパケットを１回で扱うことができる。このため、識別子のリニアアレイを使用して、システムは少ない待ち時間を提供でき、それは、たとえばキャッシュ効率的なスキームとして有利であり得る。
【００５４】
図９は、この発明の一実施形態に従った、ネットワーキング装置におけるフレキシブルなパケット処理をサポートするためにリンクリストとリニアアレイとの混合を使用する図を示す。図９に示すように、ネットワーキング装置９００における空いているＤＭＡリソースプール９１０は、１つ以上のＤＭＡリソースを維持することができる。さらに、各ＤＭＡリソースは、ＲＩＤ、順序、ヘッドアドレス、ヘッド長、およびアレイ／リンクなどのいくつかの異なる特性に関連付けられ得る。ここで、ＲＩＤ特性は、バッファチェーンに割当てられたリソース番号を含むことができ、順序特性は、ある特定のバッファチェーンが、別のバッファチェーンに続いて処理されるように構成されることを示すことができる。
【００５５】
この発明の一実施形態によれば、空いているプール９１０における別々のＤＭＡリソースが、別々のタイプのバッファチェーンに関連付けられ得る。
【００５６】
たとえば、リソース番号２を有するＤＭＡリソースは、ヘッドアドレスｈ２を有する識別子９１１のリニアアレイを指し示すことができ、識別子は各々、パケットを指し示すことができる。同様に、リソース番号３を有するＤＭＡリソースは、ヘッドアドレスｈ３を有する識別子９１２のリニアアレイを指し示すことができ、識別子は各々、パケットを指し示すことができる。
【００５７】
加えて、リソース番号１に関連付けられたＤＭＡリソースは、ヘッドアドレスｈ１を有するパケットバッファ９１３から始まるパケットバッファのリンクリストを指し示すことができる。リンクリストデータ構造内で、識別子と連結するパケットバッファ９１３は、別のパケットバッファ９１５を指し示すことができる。同様に、リソース番号３２に関連付けられたＤＭＡリソースは、ヘッドアドレスｈ３２を有するパケットバッファ９１７から始まるパケットバッファのリンクリストを指し示すことができる。また、識別子と連結するパケットバッファ９１７は、リンクリストデータ構造における他のパケットバッファ９１８および９１９を指し示すことができる。
【００５８】
さらに、システムは、（識別子９１１のリニアアレイから識別子９１２のリニアアレイを指し示す矢印９２１、およびパケットバッファ９１５からパケットバッファ９１７を指し示す矢印９２２として示すように）パケットバッファが予め構成された順序に従って処理されることを可能にする。
【００５９】
この発明の一実施形態によれば、システムは、要求しているソフトウェアスレッドのためにどのタイプのバッファチェーンを割当てることができるかを動的に判断することができる。そのような判断は、特定のパケット処理スレッドのメモリ使用要件と待ち時間要件とのバランスに基づき得る。たとえば、特定のパケット処理スレッドがメモリ使用により敏感な場合、システムは、リンクリストに基づいたバッファチェーンを割当てることができる。一方、特定のパケット処理スレッドが待ち時間により敏感な場合、システムは、リニアアレイに基づいたバッファチェーンを割当てることができる。
【００６０】
図１０は、この発明の一実施形態に従った、ネットワーキング装置におけるパケット処理のための効率的なバッファ利用をサポートするための例示的なフローチャートを示す。図１０に示すように、ステップ１００１で、システムは、ネットワーク装置上のメモリにおける複数のパケットバッファを提供できる。さらに、ステップ１００２で、システムは、直接メモリアクセス（ＤＭＡ）リソースプールを提供でき、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、メモリにおけるパケットバッファのチェーンを指し示す。次に、ステップ１００３で、各前記ＤＭＡリソースは、パケット処理スレッドが、パケット処理スレッドに予め割当てられたスレッドキーを使用して、メモリにおけるパケットバッファのチェーンにアクセスすることを可能にする。
【００６１】
この発明の一実施形態は、ネットワーク装置における効率的なパケット処理をサポートするためのシステムであって、ネットワーク装置上のメモリにおける複数のパケットバッファと、直接メモリアクセス（ＤＭＡ）リソースプールとを含み、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、メモリにおけるパケットバッファのチェーンを指し示し、各前記ＤＭＡリソースは、パケット処理スレッドが、パケット処理スレッドに予め割当てられたスレッドキーを使用して、メモリにおけるパケットバッファのチェーンにアクセスすることを可能にする、システムを含む。
【００６２】
上に提供されるようなシステムでは、前記パケット処理スレッドは、予め割当てられた同じスレッドキーを使用して、メモリにおけるパケットバッファの複数のチェーンにアクセスするように動作する。
【００６３】
上に提供されるようなシステムでは、前記パケット処理スレッドは、前記パケットバッファの複数のチェーンにおけるパケットを処理するために依存リストを設定するように動作する。
【００６４】
上に提供されるようなシステムでは、複数のパケット処理スレッドが、メモリにおけるパケットバッファの別々のチェーンに同時にアクセスするように動作する。
【００６５】
上に提供されるようなシステムでは、少なくとも１つのＤＭＡリソースは、パケットバッファのリンクリストを指し示す。
【００６６】
上に提供されるようなシステムでは、リンクリストにおける各パケットバッファは、識別子と連結している。
【００６７】
上に提供されるようなシステムでは、少なくとも１つのＤＭＡリソースは、識別子のリニアアレイを指し示す。
【００６８】
上に提供されるようなシステムでは、識別子のリニアアレイにおける各識別子は、パケットバッファを指し示す。
【００６９】
上に提供されるようなシステムでは、複数のパケットバッファは、リンクリストとリニアアレイとの混合に基づいて構成される。
【００７０】
上に提供されるようなシステムでは、前記ＤＭＡリソースプールは、パケット処理スレッドがリンクリストに基づいてバッファのチェーンにアクセスすべきか、またはリニアアレイに基づいてバッファのチェーンにアクセスすべきかを動的に判断するように動作する。
【００７１】
この発明の一実施形態は、ネットワーク環境における効率的なパケット処理をサポートするための方法であって、ネットワーク装置上のメモリにおける複数のパケットバッファを提供するステップと、直接メモリアクセス（ＤＭＡ）リソースプールを提供するステップとを含み、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、メモリにおけるパケットバッファのチェーンを指し示し、前記方法はさらに、各前記ＤＭＡリソースを介して、パケット処理スレッドが、パケット処理スレッドに予め割当てられたスレッドキーを使用して、メモリにおけるパケットバッファのチェーンにアクセスすることを可能にするステップを含む、方法を含む。
【００７２】
上に提供されるような方法は、前記パケット処理スレッドが、予め割当てられた同じスレッドキーを使用して、メモリにおけるパケットバッファの複数のチェーンにアクセスすることを可能にするステップをさらに含む。
【００７３】
上に提供されるような方法は、前記パケット処理スレッドが、前記パケットバッファの複数のチェーンにおけるパケットを処理するために依存リストを設定することを可能にするステップをさらに含む。
【００７４】
上に提供されるような方法は、複数のパケット処理スレッドが、メモリにおけるパケットバッファの別々のチェーンに同時にアクセスすることを可能にするステップをさらに含む。
【００７５】
上に提供されるような方法は、少なくとも１つのＤＭＡリソースが、パケットバッファのリンクリストを指し示すことを可能にするステップをさらに含む。
【００７６】
上に提供されるような方法は、リンクリストにおける各パケットバッファが、識別子と連結することを可能にするステップをさらに含む。
【００７７】
上に提供されるような方法は、少なくとも１つのＤＭＡリソースが、識別子のリニアアレイを指し示すことを可能にするステップをさらに含む。
【００７８】
上に提供されるような方法は、識別子のリニアアレイにおける各識別子が、パケットバッファを指し示すことを可能にするステップをさらに含む。
【００７９】
上に提供されるような方法は、リンクリストとリニアアレイとの混合に基づいて複数のパケットバッファを構成するステップと、パケット処理スレッドがリンクリストに基づいてバッファのチェーンにアクセスすべきか、またはリニアアレイに基づいてバッファのチェーンにアクセスすべきかを動的に判断するステップとをさらに含む。
【００８０】
この発明の一実施形態は、実行されると、以下のステップをシステムに行なわせる命令を格納した、非一時的なマシン読取可能記憶媒体であって、前記以下のステップは、ネットワーク装置上のメモリにおける複数のパケットバッファを提供するステップと、直接メモリアクセス（ＤＭＡ）リソースプールを提供するステップとを含み、前記ＤＭＡリソースプールはＤＭＡリソースの１つ以上を含み、前記ＤＭＡリソースプールにおける各前記ＤＭＡリソースは、メモリにおけるパケットバッファのチェーンを指し示し、前記以下のステップはさらに、各前記ＤＭＡリソースを介して、パケット処理スレッドが、パケット処理スレッドに予め割当てられたスレッドキーを使用して、メモリにおけるパケットバッファのチェーンにアクセスすることを可能にするステップを含む、非一時的なマシン読取可能記憶媒体を含む。
【００８１】
この発明の多くの特徴は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せにおいて、それを使用して、またはその助けを借りて行なわれ得る。従って、この発明の特徴は、（たとえば、１つ以上のプロセッサを含む）処理システムを使用して実現され得る。
【００８２】
この発明の特徴は、ここに提示された特徴のうちのいずれかを行なうように処理システムをプログラミングするために使用可能な命令を格納した記憶媒体またはコンピュータ読取可能媒体であるコンピュータプログラム製品において、それを使用して、またはその助けを借りて実現され得る。記憶媒体は、フロッピー（登録商標）ディスク、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、および光磁気ディスクを含む任意のタイプのディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリ装置、磁気カードまたは光カード、ナノシステム（分子メモリＩＣを含む）、もしくは、命令および／またはデータを格納するのに好適な任意のタイプの媒体または装置を含み得るものの、それらに限定されない。
【００８３】
マシン読取可能媒体のうちのいずれかに格納されて、この発明の特徴は、処理システムのハードウェアを制御するために、および処理システムがこの発明の結果を利用する他の機構とやりとりすることを可能にするために、ソフトウェアおよび／またはファームウェアに取込まれ得る。そのようなソフトウェアまたはファームウェアは、アプリケーションコード、装置ドライバ、オペレーティングシステム、および実行環境／コンテナを含み得るものの、それらに限定されない。
【００８４】
この発明の特徴はまた、たとえば、特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）などのハードウェアコンポーネントを使用して、ハードウェアにおいて実現されてもよい。ここに説明された機能を行なうようにハードウェアステートマシンを実現することは、関連技術の当業者には明らかであろう。
【００８５】
加えて、この発明は、この開示の教示に従ってプログラミングされた１つ以上のプロセッサ、メモリおよび／またはコンピュータ読取可能記憶媒体を含む、１つ以上の従来の汎用または特殊デジタルコンピュータ、コンピューティング装置、マシン、またはマイクロプロセッサを使用して都合よく実現されてもよい。ソフトウェア技術の当業者には明らかであるように、この開示の教示に基づいて、適切なソフトウェアコーディングが、熟練したプログラマによって容易に準備され得る。
【００８６】
この発明のさまざまな実施形態が上述されてきたが、それらは限定のためではなく例示のために提示されたことが理解されるべきである。この発明の精神および範囲から逸脱することなく、形および詳細のさまざまな変更を行なうことができる、ということは、関連技術の当業者には明らかであろう。
【００８７】
この発明は、特定された機能およびそれらの関係の実行を示す機能的構築ブロックの助けを借りて上述されてきた。説明の便宜上、これらの機能的構築ブロックの境界はしばしば、ここに任意に規定されてきた。特定された機能およびそれらの関係が適切に実行される限り、代替的な境界を規定することができる。このため、そのようないかなる代替的な境界も、この発明の範囲および精神に含まれる。
【００８８】
この発明の前述の説明は、例示および説明のために提供されてきた。それは、網羅的であるよう、またはこの発明を開示された形そのものに限定するよう意図されてはいない。この発明の幅および範囲は、上述の例示的な実施形態のいずれによっても限定されるべきでない。多くの修正および変形が、当業者には明らかであろう。これらの修正および変形は、開示された特徴の関連するあらゆる組合せを含む。実施形態は、この発明の原理およびその実用的応用を最良に説明するために選択され説明されたものであり、それにより、考えられる特定の使用に適したさまざまな実施形態についての、およびさまざまな修正を有するこの発明を、当業者が理解できるようにする。この発明の範囲は、請求項およびそれらの均等物によって定義されるよう意図されている。
【図１】
0006449872.tif 000002
【図２】
0006449872.tif 000003
【図３】
0006449872.tif 000004
【図４】
0006449872.tif 000005
【図５】
0006449872.tif 000006
【図６】
0006449872.tif 000007
【図７】
0006449872.tif 000008
【図８】
0006449872.tif 000009
【図９】
0006449872.tif 000010
【図１０】
0006449872.tif 000011