(57)【特許請求の範囲】
【請求項１】
複数のキュー及びマルチレイヤネットワーキングプロトコルスタックを提供するように構成されているネットワークインターフェースと、
アプリケーションを備える１つまたは複数の論理要素と、
前記アプリケーションに専用キューを割当て、
トップダウン方式で入来するパケットを検査し、前記ネットワーキングプロトコルスタックのアプリケーションレイヤにおける前記入来するパケットのアプリケーション識別子を特定し、
前記アプリケーション識別子が前記アプリケーションに対応すると判断し、
前記入来するパケットを前記アプリケーションの専用キューに割り当てるためのキューイングエンジンを備える１つまたは複数の論理要素と
を備える、装置。
【請求項２】
前記アプリケーション識別子がポート番号を含む、請求項１に記載の装置。
【請求項３】
前記アプリケーションに前記割り当てを通知するための手段をさらに備える、請求項１に記載の装置。
【請求項４】
前記アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施することを可能にするための手段をさらに備える、請求項１に記載の装置。
【請求項５】
前記キューイングエンジンがさらに、拡張ソケットオプションを介してソケットのキューマッピングを受信する、請求項１に記載の装置。
【請求項６】
前記アプリケーションが、ソケットのキュー割り当てを含むキュー割り当て通知を前記ネットワークインターフェースから受信し、前記ソケットを、前記キュー割り当てと関連付けられるスレッドに割り当てる、請求項１に記載の装置。
【請求項７】
前記スレッドが、１対１構成において前記キュー割り当てと一意に関連付けられる、請求項６に記載の装置。
【請求項８】
複数のキュー割り当てがｎ対１構成（ただし、ｎ＞１）において前記スレッドと関連付けられる、請求項６に記載の装置。
【請求項９】
前記アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施する、請求項６に記載の装置。
【請求項１０】
前記アプリケーションが、拡張ソケットオプションを介して前記ソケットのキューマッピングを設定する、請求項６に記載の装置。
【請求項１１】
キューイングエンジンに、
アプリケーションに専用キューを割当て、
トップダウン方式でネットワークインターフェース上で入来するパケットを検査し、ネットワーキングプロトコルスタックのアプリケーションレイヤにおける前記入来するパケットのアプリケーション識別子を特定し、
前記アプリケーション識別子が前記アプリケーションに対応すると判断し、
前記入来するパケットを前記アプリケーションの専用キューに割り当てる命令を実行させる、コンピュータプログラム。
【請求項１２】
前記アプリケーション識別子がポート番号を含む、請求項１１に記載のコンピュータプログラム。
【請求項１３】
前記アプリケーションに前記割り当てを通知するための命令をさらに含む、請求項１１に記載のコンピュータプログラム。
【請求項１４】
前記アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施することを可能にするための命令をさらに含む、請求項１１のコンピュータプログラム。
【請求項１５】
前記キューイングエンジンがさらに、拡張ソケットオプションを介してソケットのキューマッピングを受信する、請求項１１に記載のコンピュータプログラム。
【請求項１６】
アプリケーションに、
ソケットのキュー割り当てを含むキュー割り当て通知をネットワークインターフェースから受信させ、ここで、前記キュー割り当てはアプリケーションに固有であり、
前記ソケットを、前記キュー割り当てと関連付けられるスレッドに割り当てさせ、
前記アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施する、コンピュータプログラム。
【請求項１７】
前記スレッドが、１対１構成において前記キュー割り当てと一意に関連付けられる、請求項１６に記載のコンピュータプログラム。
【請求項１８】
複数のキュー割り当てがｎ対１構成（ただし、ｎ＞１）において前記スレッドと関連付けられる、請求項１６に記載のコンピュータプログラム。
【請求項１９】
前記アプリケーションが、拡張ソケットオプションを介して前記ソケットのキューマッピングを設定する、請求項１６に記載のコンピュータプログラム。
【請求項２０】
ネットワークインターフェース上で複数のキューを提供することと、
ネットワーク機能アプリケーションを提供することと、
前記アプリケーションに専用キューを割当てることと、
トップダウン方式で入来するパケットを検査し、ネットワーキングプロトコルスタックのアプリケーションレイヤにおける前記入来するパケットのアプリケーション識別子を特定することと、
前記アプリケーション識別子が前記アプリケーションに対応すると判断することと、
前記入来するパケットを前記アプリケーションの専用キューに割り当てることと
を含む、アプリケーションレベルネットワークキューイングを提供する方法。
【請求項２１】
前記アプリケーション識別子がポート番号を含む、請求項２０に記載の方法。
【請求項２２】
請求項１１乃至１９のうちいずれか１項記載のコンピュータプログラムを記憶した１つまたは複数の有形非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、コンピュータネットワーキングの分野に関し、排他的にではないが、より詳細には、アプリケーションレベルネットワークキューイングのためのシステムおよび方法に関する。
【背景技術】
【０００２】
「ビジーウェイト」または「スピニング」としても知られているビジーポーリングは、条件が真になったか否かを確かめるために、条件を繰り返しモニタリングするプロセスである。たとえば、プロセスが入力を必要とする場合、プロセスは、データが利用可能になったか否かを確かめるために入力バッファを監視しながら、連続的にループすることができる。他の用途は、キーが押下されたか否かを確かめること、または、ロックが利用可能であるか否かを確かめることであり得る。別の用途は、指定ミリ秒数にわたって「何もしない」ことなどによって、既知の時間遅延をもたらすことであるが、プロセッサ速度には変動があるため、これは完全に信頼できるとは言えないものである可能性がある。
【０００３】
ビジーポーリングは、割り込み駆動処理が非効率的であるかまたは煩わしいものであり得る低レベルプログラミングにおいて特に有用な技法であり得る。
【０００４】
本開示は、添付の図面とともに読まれる時に、以下の詳細な説明から最良に理解される。業界における標準的な実践に従って、様々な特徴は必ずしも原寸に比例して図示されてはおらず、例示のみを目的として使用されている。スケールが明示的または黙示的に示されている場合、これは、１つの説明例を与えているに過ぎない。他の実施形態において、様々な特徴の寸法は、論述を明瞭にするために任意に増大または低減されている場合がある。
【発明の概要】
【０００５】
一例において、複数のキューを提供するように構成されているネットワークインターフェースと、アプリケーションと、入来するパケットを検査し、入来するパケットを分類子に基づいてアプリケーションの専用キューに割り当てるためのキューイングエンジンを備える１つまたは複数の論理要素とを有するコンピューティング装置が開示される。キューイングエンジンを提供する方法、および、キューイングエンジンを提供するための実行可能命令が記憶されている１つまたは複数の有形非一時的コンピュータ可読記憶媒体も開示される。
【図面の簡単な説明】
【０００６】
【図１】本明細書の１つまたは複数の例によるセキュリティ有効ネットワークのブロック図である。
【図２】本明細書の１つまたは複数の例によるクライアントデバイスのブロック図である。
【図３】本明細書の１つまたは複数の例によるサーバデバイスのブロック図である。
【図４】本明細書の１つまたは複数の例によるネットワークキューイングシステムのブロック図である。
【図５】本明細書の１つまたは複数の例によるネットワークキューイングシステムのブロック図である。
【図６】本明細書の１つまたは複数の例による開放型システム間相互接続モデル（ＯＳＩ）７層スタックのブロック図である。
【図７】本明細書の１つまたは複数の例によるネットワークデバイスによって実施される方法の流れ図である。
【図８】本明細書の１つまたは複数の例によるアプリケーションによって実施される方法の流れ図である。
【図９】本明細書の１つまたは複数の例によるアプリケーションによって実施される方法の流れ図である。
【図１０】本明細書の１つまたは複数の例による送信動作の流れ図である。
【発明を実施するための形態】
【０００７】
以下の開示は、本開示の種々の特徴を実装するための多くの異なる実施形態または例を提供する。本開示を単純化するために、構成要素および構成の具体的な例を下記に記載する。無論、これらは例に過ぎず、限定であるようには意図されていない。さらに、本開示は、様々な例において参照数字および／または文字を繰り返す場合がある。この繰り返しは単純かつ明瞭にすることを目的としており、それ自体が論述されている様々な実施形態および／または構成の間の関係を決定づけるものではない。異なる実施形態が異なる利点を有し得、いかなる特定の利点も、任意の実施形態に必ず必要とされるものではない。
【０００８】
例として、最新のデータセンター層は、「Ｈａｄｏｏｐ」ソフトウェアフレームワークのような「ビッグデータ」バックエンドを有するウェブサーバおよびデータキャッシュサーバを含むことができる。これらは、リーフスパインアーキテクチャを使用してネットワーク接続することができる。一例において、これらの層は、それ自体で分散型のシステムであり、一般的に、数千の同時接続にサービスし、終点ノード上のコアの数が増大するにつれて、接続の数は将来増大すると予測される。
【０００９】
いくつかのデータセンターは、契約要求事項を満たすため、または、競争上の差別化要因としてのような、目標性能決定論を有し得る。この環境における分散型システムアプリケーションに対して所望の性能決定論（たとえば、一貫したスループットおよびＣＰＵ利用で９９．９９パーセンタイルの待ち時間）を提供することが課題であり得る。多くの事例において、ネットワーク接続インターフェースは、ビジーなハイエンドサーバにおけるアプリケーション性能に対するボトルネックになり得るため、この問題に寄与する主要な要因の１つである。
【００１０】
本明細書は、ネットワークインターフェースボトルネックにスケーラブルに対処する、アプリケーションレベルネットワークキューイング（ＡＬＮＱ）のためのシステムおよび方法を記載する。ＡＬＮＱの一実施形態において、改善されたネットワークインターフェースカード（ＮＩＣ）が提供され、開放型システム間相互接続（ＯＳＩ）または伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）スタックのような、既存のネットワークスタックに対する調整を行うこともできる。代替的に、いくつかの実施形態において、ホストネットワークスタックが全体的にまたは部分的にバイパスされ、並列なオフロードまたはオンロードされるスタックを作動することができる。
【００１１】
多くのＮＩＣは、入来するトラフィックを複数の別個の「キュー」に分割し、トラフィックは、たとえば、発信元媒体アクセス制御アドレス（ＭＡＣ）、宛先ＭＡＣ、および／またはプロトコルを含むソケットタプルに基づくハッシュアルゴリズムに基づいてキューに対して負荷平衡される。ＡＬＮＱは、アプリケーションが、それら自体の「見える」キュー、および、オペレーティングシステムのネットワーキングスタックを使用した負荷平衡制御を有することを所望し得ることのような問題に対処する。ＡＬＮＱは、ソケット層可視性を有するＮＩＣ上でスケーラブルなアプリケーション特有のキューを作成すること、ならびに、「ＥＰＯＬＬ」および「ＫＱＵＥＵＥ」のようなカーネル事象多重化インターフェースに適用される類縁化および起動アルゴリズムによって可能になる。選択される実施形態において、これによって、平均およびテイルレイテンシがより低く、決定論的になり、レイテンシ許容範囲境界内でスループットがより高くなり、分散型システムをスケーリングするのを助けることができる。
【００１２】
一実施形態において、ＡＬＮＱは、アプリケーションに対するトラフィックの誘導および低レイテンシ通信の送達に関してトップダウンの視点をとる。アプリケーションは、ネットワーキングの観点から、それら自体をポート番号によってシステム内で区別することができる。たとえば、ＨＴＴＰデーモンは、ポート８０上でリッスンすることができ、一方で、電子メールデーモンは、ポート２５上でリッスンすることができる。ＡＬＮＱは、ポート番号（他の関連する識別情報とともに）を、トラフィックをキュー、すなわち、アプリケーション特有のキューに割り当てるための主キーとして使用することができる。これらのキューに入るトラフィックは、ハッシュベース負荷平衡のための「Ｒｅｃｅｉｖｅ  Ｓｉｄｅ  Ｓｃａｌｉｎｇ」（ＲＳＳ）、または、決定論的なマッチングのためのＩｎｔｅｌ（登録商標）Ｅｔｈｅｒｎｅｔ  Ｆｌｏｗ  Ｄｉｒｅｃｔｏｒのような既存の方式によって多重化することができる。
【００１３】
割り当てられるキューに関する情報は、不透明な識別子としてアプリケーションまでわたすことができる。その後、アプリケーションは、位置整合のヒントのためにこの識別子を使用することができる。たとえば、ＥＰＯＬＬを使用するアプリケーションは、ファイル記述子を取り扱うアプリケーションスレッドをキューに位置整合し、したがって、アクセスを合理化し、ソケットおよびプロトコル関連データ構造のキャッシュラインバウンスからの影響を軽減することができる。これらのキューはコア間ではなくアプリケーション間で分散することができるため、アプリケーション挙動により良好に一致するように割り込みを調節することもでき、それによって、それらのキューがアプリケーションの間で共有されるようにすることができる。したがって、属性としての低レイテンシを、オープンであるソケット（またはフロー）ではなく、アプリケーション全体、すなわちキューセットに適用することができる。この分離によってまた、プロトコル処理が実施される前に起動するための直接アプリケーションシグナリング方式が可能になる。
【００１４】
有利には、ＡＬＮＱは、インターフェースもしくは仮想ソケットインターフェース（ＶＳＩ）を通じて、または、ＶＭもしくはトラフィッククラスによってではなく、ポート番号を通じてキューを割り当てることによってＮＩＣトラフィックを誘導し、ポート番号はアプリケーション識別子として機能する。ネットワーキングの観点から、ポート番号は、特定の機械上でアプリケーションを識別するための有用な基礎として動作することができる。アプリケーション識別子は、ポート番号以外の任意の適切なアプリケーション識別子であってもよいことは留意されたい。
【００１５】
さらに有利には、ＡＬＮＱは、ＲＳＳのような既知のハッシュベース方式またはＦｌｏｗ  Ｄｉｒｅｃｔｏｒのような正確なマッチ方式を使用して、アプリケーション／ポート番号に割り当てられるキューを負荷平衡させることができる。
【００１６】
さらに有利には、ＡＬＮＱは、ソケットインターフェース選択肢に対する増強などによって、キュー情報をトークンとしてアプリケーションにわたすことができる。
【００１７】
さらに有利には、アプリケーションは、これらのトークンを使用してスレッドをキューに位置整合させることができる。
【００１８】
さらに有利には、アプリケーション特有のトラフィックを早期に分離することによって、Ｂｕｓｙ  Ｐｏｌｌ  Ｓｏｃｋｅｔｓ（ＢＰＳ）のような既存の低レイテンシ方法を使用すること、キューをアプリケーションスレッドにスケーラブルに位置整合させることを可能にすること、または、サービス品質もしくはセキュリティポリシーを適用することのような、様々な類縁化選択肢を提供する。
【００１９】
さらに有利には、ＡＬＮＱは、割り込みが休止しているアプリケーションスレッドを直にシグナリングし、その後、デバイスキューからデータを引き出すことができる、割り込みシグナリング方式を有効にする。
【００２０】
ここで、添付の図面をより特定的に参照して、アプリケーションレベルネットワークキューイングのためのシステムおよび方法を説明する。図面全体を通じて、複数の図面にわたって特定のデバイスまたはブロックが完全にまたは実質的に一貫していることを示すために、特定の参照符号が繰り返されている場合があることに留意されたい。しかしながら、これは、開示されている様々な実施形態の間のいかなる特定の関係も暗示するものではない。特定の例において、ある属の要素が、特定の参照符号（「ウィジェット１０」）によって参照される場合があり、一方で、その属の個々の種または例が、ハイフンで結ばれた符号（「第１の特定のウィジェット１０−１」および「第２の特定のウィジェット１０−２」）によって参照される場合がある。
【００２１】
図１は、本明細書の１つまたは複数の例による、安全確保された企業１００のネットワークレベル図である。この例において、安全確保された企業１００は、外部ネットワーク１７２を介して情報またはサービスにアクセスし得る１者または複数の顧客１６０にサービスまたはデータを提供するように構成することができる。これには、安全確保された企業１００が、特定のサービスおよびネットワークを少なくとも部分的に外界に露出させ、したがって、論理的なセキュリティの開口部を作成する必要があり得る。
【００２２】
安全確保された企業内で、１者または複数のユーザ１２０が、１つまたは複数のクライアントデバイス１１０を操作する。各デバイスは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ、Ｌｉｎｕｘ(登録商標)、Ａｎｄｒｏｉｄ、Ｍａｃ  ＯＳＸ、Ａｐｐｌｅ  ｉＯＳ、Ｕｎｉｘなどのような、適切なオペレーティングシステムを含んでもよい。上記のいくつかは、別のタイプのデバイスよりも、１つのタイプのデバイス上でより頻繁に使用され得る。たとえば、デスクトップコンピュータまたはエンジニアリングワークステーションは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ、Ｌｉｎｕｘ(登録商標)、Ｕｎｉｘ、またはＭａｃ  ＯＳＸの１つを使用する傾向がより強いものであり得る。通常、カスタマイズオプションがより少ない既製のポータブルデバイスであるラップトップコンピュータは、Ｍｉｃｒｏｓｏｆｔ  ＷｉｎｄｏｗｓまたはＭａｃ  ＯＳＸを作動させる傾向がより強いものであり得る。モバイルデバイスは、ＡｎｄｒｏｉｄまたはｉＯＳを作動させる傾向がより強いものであり得る。しかしながら、これらの例は限定であるようには意図されていない。
【００２３】
クライアントデバイス１１０は、企業ネットワーク１７０を介して互いに、および、他のネットワークリソースに通信可能に結合することができる。企業ネットワーク１７０は、たとえば、非限定例として、ローカルエリアネットワーク、イントラネット、仮想ネットワーク、広域ネットワーク、無線ネットワーク、セルラネットワーク、またはインターネット（任意選択的にプロキシ、仮想機械、または他の同様のセキュリティメカニズムを介してアクセスされる）を含む、１つまたは複数の適切なネットワーク接続プロトコル上で動作する任意の適切なネットワークまたは１つもしくは複数のネットワークの組み合わせであってもよい。企業ネットワーク１７０はまた、一例においてワークロードクラスタ１４２内で仮想化することができる、１つまたは複数のサーバ、ファイアウォール、ルータ、スイッチ、セキュリティアプライアンス、アンチウイルスサーバ、または他の有用なネットワークデバイスをも含んでもよい。この図解において、企業ネットワーク１７０は、単純にするために単一のネットワークとして図示されているが、いくつかの実施形態においては、企業ネットワーク１７０は、インターネットに接続されている１つまたは複数の企業イントラネットのような、より多数のネットワークを含んでもよい。企業ネットワーク１７０はまた、外部ネットワーク１７２を介してインターネットのような外部ネットワークへのアクセスを可能にすることもできる。外部ネットワーク１７２は同様に、任意の適切なタイプのネットワークであってもよい。
【００２４】
ワークロードクラスタ１４２は、たとえば、複数のラックマウント式ブレードサーバ上のハイパーバイザ内で作動する仮想クラスタ、または、物理サーバのクラスタとして提供されてもよい。ワークロードクラスタ１４２は、１つもしくは複数のサーバ機能、または、１つもしくは複数のハイパーバイザ内の１つもしくは複数の「マイクロクラウド」を提供することができる。たとえば、ｖＣｅｎｔｅｒのような仮想化環境は、複数の「テナント」を規定する機能を提供することができ、各テナントは、各他のテナントから機能的に別個のものであり、各テナントは、単一目的マイクロクラウドとして動作する。各マイクロクラウドは、個別の機能を供給することができ、エージェント有りおよびエージェント無しの仮想機械（ＶＭ）を含む、多くの異なる特色の複数のＶＭを含むことができる。
【００２５】
エンドポイントデバイス１１０のいくつかの機能を、ワークロードクラスタ１４２を介して提供することもできることは留意されたい。たとえば、１つのマイクロクラウドは、エンドポイント１１０を操作するユーザ１２０がリモート企業デスクトップにリモートでログインし、企業アプリケーション、ワークスペース、およびデータにアクセスすることを可能にする、Ｃｉｔｒｉｘワークスペースのようなリモートデスクトップハイパーバイザを提供することができる。その事例において、エンドポイント１１０は、余分な機能を取り除いたオペレーティングシステムのみを作動させる、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅｂｏｏｋのような「シンクライアント」であってもよく、依然としてユーザ１２０に、企業リソースに対する有用なアクセスを提供する。
【００２６】
管理コンソール１４０として構成されている１つまたは複数のコンピューティングデバイスもまた、企業ネットワーク１７０上で動作することができる。管理コンソール１４０は、管理コンソール１４０が企業ネットワーク１７０に対して、ならびに、クライアントデバイス１１０およびワークロードクラスタ１４２にわたって強制することができる企業セキュリティポリシーを規定するための、セキュリティ管理者１５０のためのユーザインターフェースを提供することができる。一例において、管理コンソール１４０は、Ｌｉｎｕｘ(登録商標)、Ｕｎｉｘ、またはＷｉｎｄｏｗｓ  Ｓｅｒｖｅｒのような、サーバクラスオペレーティングシステムを作動させることができる。他の事例において、管理コンソール１４０は、デスクトップクラスマシン上に、または、ワークロードクラスタ１４２内でセットアップされているＶＭを介して、ウェブインターフェースとして提供することができる。
【００２７】
安全確保された企業１００は、企業境界１０４を越えて外部ネットワーク１７２と通信することができる。企業境界１０４は、物理的、論理的、または他の境界を表すことができる。外部ネットワーク１７２は、たとえば、ウェブサイト、サーバ、ネットワークプロトコル、および他のネットワークベースのサービスを含んでもよい。別の例において、安全確保された企業１００は、単に、セキュリティ管理者１５０の役割を負う親がいる家族であってもよい。親は、自身の子を、非限定例として、ポルノ、アドウェア、スパイウェア、年齢にふさわしくないコンテンツ、特定の政治的、宗教的、もしくは社会的運動の意見、または、違法もしくは危険な活動を論じるためのフォーラムのような、望ましくないコンテンツから保護することを所望し得る。この事例において、親は、セキュリティ管理者１５０の任務のいくつかまたはすべてを実施することができる。
【００２８】
ワークロードクラスタ１４２は、クライアントデバイス１１０およびエンドユーザデバイス１８０のようなクライアントデバイスに任意の適切なネットワークサービスを提供するように構成することができる。たとえば、ワークロードクラスタ１４２は、非限定例として、ファイアウォール、ウイルス対策、ディープパケットインスペクション、負荷平衡、およびスイッチングのようなセキュリティおよびインフラストラクチャサービスを提供するラックマウントクラウドシステムであってもよい。ワークロードクラスタ１４２はまた、非限定例として、法人ファイルサーバ、データベースファイルシステム、イントラネットサーバ、またはデータベースサーバのような実体的なネットワークサービスを提供することもできる。企業ユーザ１２０は、企業ネットワーク１７０を介してワークロードクラスタ１４２上のサービスにアクセスするために、クライアントデバイス１１０上のクライアントアプリケーション１１２を使用することができる。
【００２９】
エンドユーザ１６０もまた、ネットワークリソースにアクセスすることができる。エンドユーザ１６０は、エンドユーザデバイス１８０上のエンドユーザアプリケーション１６２を操作して、外部ネットワーク１７２および企業ネットワーク１７０を介してワークロードクラスタ１４２にアクセスすることができる。良好な法人セキュリティ実践によれば、安全確保された企業１００の外部からのネットワークは、企業トラフィックおよび外部トラフィックを異なるサブネットワーク上に配置することなどによって、法人ネットワークトラフィックから分離することができる。
【００３０】
ワークロードクラスタ１４２は、外部エンドユーザ１６０に、ハイパーテキスト転送プロトコル（ＨＴＴＰ）を介したウェブサイト、簡易メール転送プロトコル（ＳＭＴＰ）を介した電子メール、ファイル転送プロトコル（ＦＴＰ）、セキュアＦＴＰ（ＳＦＴＰ）を介したファイル共有、または、テルネットもセキュアシェル（ＳＳＨ）のようなプロトコルを介した仮想シェルのような、様々な適切なネットワークサービスを提供することができる。
【００３１】
エンドユーザ１６０および法人ユーザ１２０は、ここでは非限定例として２つの別個の異なるエンティティとして開示されているが、厳密な分離は必要ないことに留意されたい。エンドユーザ１６０はまた法人ユーザでもあってもよく、Ｃｉｔｒｉｘまたはリモートデスクトッププロトコル（ＲＤＰ）のようなリモートクライアントを介して法人リソースにアクセスすることができる。法人ユーザ１２０はまた、企業リソースに対してフルアクセスよりも制限されたアクセス権を有するゲストユーザでもあってもよい。
【００３２】
例示として単純化された例を提供するために、本明細書は、ワークロードクラスタ１４２が、１つまたは複数のネットワークインターフェースカード（ＮＩＣ）を有する単一のワークロードサーバ１４２であると仮定する。しかしながら、本明細書において開示されている方法は、独立型サーバ、サービスアプライアンス、複数のプロトコルを操作する個々のサーバ、または、１つもしくは複数の物理デバイス上で動作する複数の仮想サーバのような、任意の適切な様式で構成されている任意の適切な数のサーバにスケーリングされてもよい。
【００３３】
この例において、ワークロードサーバ１４２は、ポート８０上でトラフィックを受信するＨＴＴＰウェブサーバと、ポート２５上でトラフィックを受信するＳＭＴＰメールサーバの両方をホストする。ワークロードサーバ１４２は、クライアントデバイスとの各接続のために、固有の通信「ソケット」または他の論理接続を開くことができる。したがって、たとえば、法人ユーザ１２０もしくはエンドユーザ１６０、またはそれらの任意の組み合わせである、１００，０００人のユーザが所与の一時点においてウェブサイトにアクセスしている場合、１００，０００個のＨＴＴＰソケットがポート８０上でオープンである。同様に、５０，０００人の電子メールユーザが電子メールサービスにアクセスしている場合、５０，０００個のＳＭＴＰソケットがポート２５上でオープンである。これらの量は例示のみを目的として与えられている。より少数のまたは独立したサーバは、はるかにより少数の同時ソケットをオープンにし得る一方、大規模な、一般的なウェブサービスはより多くのソケットをオープンにし得る。
【００３４】
本明細書において示されているように、同時接続が多数ある場合、キューイングが大きな課題になり得る。パケットがＯＳＩネットワークモデルのより低いレベルから開始してハッシュされる、ＲＳＳのような従来の「ボトムアップ」ハッシュベースキューイングの特定の実施形態は、同じキューを共有する他のアプリケーションからのトラフィックに起因して相当のレイテンシをもたらす場合がある。したがって、本明細書は、レイテンシを低減し、性能を改善するために、アプリケーションレベルネットワークキューイングを提供するためのシステムおよび方法を提供する。例示的な論理的実施形態が図４および図５に示されており、一方で、例示的な方法が、図７〜図９に示されている。
【００３５】
図２は、本明細書の１つまたは複数の例によるクライアントデバイス２００のブロック図である。クライアントデバイス２００は、任意の適切なコンピューティングデバイスであってもよい。様々な実施形態において、「コンピューティングデバイス」は、非限定例として、コンピュータ、ワークステーション、サーバ、メインフレーム、仮想機械（エミュレートされるか、または「ベアメタル」ハイパーバイザ上にある）、内蔵コンピュータ、内蔵コントローラ、内蔵センサ、個人情報端末、ラップトップコンピュータ、携帯電話、ＩＰ電話、スマートフォン、タブレットコンピュータ、コンバーチブルタブレットコンピュータ、コンピューティングアプライアンス、ネットワークアプライアンス、受信機、ウェアラブルコンピュータ、ハンドヘルドコンピュータ、または、データを処理および通信するための任意の他の電子、マイクロ電子、もしくは微小電気機械デバイスもしくは装置であってもよく、または、それらを含んでもよい。任意のコンピューティングデバイスは、ネットワーク上のホストとして指定することができる。各コンピューティングデバイスは、それ自体「ローカルホスト」として参照することができ、一方で、その外部の任意のコンピューティングデバイスは、「リモートホスト」として指定することができる。
【００３６】
特定の実施形態において、クライアントデバイス１１０はすべて、クライアントデバイス２００の例であってもよい。
【００３７】
クライアントデバイス２００は、オペレーティングシステム２２２および少なくともクライアントエージェント２２４のソフトウェア部分を提供するための実行可能命令を記憶されているメモリ２２０に接続されているプロセッサ２１０を含む。クライアントデバイス２００の他の構成要素は、ストレージ２５０と、ネットワークインターフェース２６０と、周辺インターフェース２４０とを含む。このアーキテクチャは、例示としてのみ与えられており、非排他的で非限定的であるように意図されている。さらに、開示されている様々な部品は、論理的区分であるように意図されているに過ぎず、必ずしも物理的に別個のハードウェアおよび／またはソフトウェア構成要素を表している必要はない。特定のコンピューティングデバイスは、たとえば、単一の物理メモリデバイス内にメインメモリ２２０およびストレージ２５０を提供し、他の事例においては、メモリ２２０および／またはストレージ２５０は、多くの物理デバイスにわたって機能的に分散される。仮想機械またはハイパーバイザの事例において、機能のすべてまたは部分は、開示されている論理機能を提供するために仮想化層にわたって作動しているソフトウェアまたはファームウェアの形態で提供されてもよい。他の例において、ネットワークインターフェース２６０のようなデバイスは、その論理演算を実施するために必要な最小限のハードウェアインターフェースのみを提供することができ、追加の必要な論理を提供するために、ソフトウェアドライバに依拠することができる。したがって、本明細書において開示されている各論理ブロックは、そのブロックの開示されている論理演算を提供するように構成されており、動作可能である１つまたは複数の論理要素を含むように広範に意図されている。本明細書全体を通じて使用されているものとしては、「論理要素」は、ハードウェア、外部ハードウェア（デジタル、アナログ、または混合信号）、ソフトウェア、レシプロケーティングソフトウェア、サービス、ドライバ、インターフェース、コンポーネント、モジュール、アルゴリズム、センサ、ファームウェア、マイクロコード、プログラム可能論理、または、論理演算を達成するように協働することができるオブジェクトを含んでもよい。
【００３８】
一例において、プロセッサ２１０は、メモリバス２７０−３を介してメモリ２２０に通信可能に結合されており、当該バスは、たとえば、例としてダイレクトメモリアクセス（ＤＭＡ）バスであってもよいが、メモリ２２０がシステムバス２７０−１または何らかの他のバスを介してプロセッサ２１０と通信するものを含む、他のメモリアーキテクチャが可能である。プロセッサ２１０は、システムバス２７０−１を介して他のデバイスに通信可能に結合することができる。本明細書全体を通じて使用されているものとしては、「バス」は、任意の有線もしくは無線相互接続線、ネットワーク、接続、バンドル、単一のバス、複数のバス、クロスバーネットワーク、単段ネットワーク、多段ネットワーク、または、コンピューティングデバイスの部品間、もしくは、コンピューティングデバイス間でデータ、信号、もしくは電力を搬送するように動作可能な他の伝導媒体を含む。これらの用途は非限定例としてのみ開示されていること、および、いくつかの実施形態は上記のバスの１つまたは複数を省略してもよく、一方で、他の実施形態は追加のまたは異なるバスを利用してもよいことに留意されたい。
【００３９】
様々な例において、「プロセッサ」は、非限定例として、マイクロプロセッサ、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ、グラフィックスプロセッシングユニット、プログラム可能論理アレイ、特定用途向け集積回路、または仮想機械プロセッサを含む、メモリからロードされるか、または、ハードウェア内に直に実装されるかを問わない、命令を実行するように動作可能な論理要素の任意の組み合わせを含んでもよい。特定のアーキテクチャにおいて、マルチコアプロセッサが提供されてもよく、その事例において、プロセッサ２１０は適宜、マルチコアプロセッサの１つのコアとしてのみ取り扱われてもよく、または、マルチコアプロセッサ全体として取り扱われてもよい。いくつかの実施形態において、１つまたは複数のコプロセッサはまた、特殊化した機能またはサポート機能のために提供されてもよい。
【００４０】
プロセッサ２１０は、ＤＭＡバス２７０−３（または他の同様のメモリ相互接続）を介してＤＭＡ構成でメモリ２２０に接続されてもよい。本開示を単純にするために、メモリ２２０は、単一の論理ブロックとして開示されているが、物理的な実施形態においては、たとえば、ＤＤＲ  ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、キャッシュ、Ｌ１またはＬ２メモリ、オンチップメモリ、レジスタ、フラッシュ、ＲＯＭ、光媒体、仮想メモリ領域、磁気またはテープメモリなどを含む、１つまたは複数の任意の適切な揮発性または不揮発性メモリ技術の１つまたは複数のブロックを含んでもよい。特定の実施形態において、メモリ２２０は、相対的にレイテンシの低い揮発性メインメモリを含んでもよく、一方で、ストレージ２５０は、相対的にレイテンシの高い不揮発性メモリを含んでもよい。しかしながら、メモリ２２０およびストレージ２５０は、物理的に別個のデバイスである必要はなく、いくつかの例においては、単純に機能の論理的分離を表してもよい。非限定例としてＤＭＡが開示されているが、ＤＭＡは本明細書と適合する唯一のプロトコルではないこと、および、他のメモリアーキテクチャが利用可能であることにも留意されたい。
【００４１】
ストレージ２５０は、任意の種類のメモリ２２０であってもよく、または、別個のデバイスであってもよい。ストレージ２５０は、非限定例として、ハードドライブ、ソリッドステートドライブ、外部ストレージ、独立ディスクの冗長アレイ（ＲＡＩＤ）、ネットワーク接続ストレージ、光ストレージ、テープドライブ、バックアップシステム、クラウドストレージ、または上記の任意の組み合わせを含む、１つまたは複数の非一時的コンピュータ可読媒体を含んでもよい。ストレージ２５０は、１つもしくは複数のデータベースまたは他の構成で記憶されるデータであってもよく、またはそれらを内部に含んでもよく、オペレーティングシステム２２２およびクライアントエージェント２２４のソフトウェア部分のような動作ソフトウェアの記憶されているコピーを含んでもよい。多くの他の構成も可能であり、本明細書の広範な範囲内に包含されるように意図されている。
【００４２】
ネットワークインターフェース２６０は、クライアントデバイス２００を有線または無線ネットワークに通信可能に結合するために提供することができ、ネットワークインターフェースカード（ＮＩＣ）、ホストファブリックインターフェース（ＨＦＩ）、または任意の他の適切なデバイスであってもよい。本明細書全体を通じて使用されているものとしての「ネットワーク」は、非限定例として、アドホックローカルネットワーク、コンピューティングデバイスに電子的対話の機能を提供するインターネットアーキテクチャ、コンピューティングデバイスが人間のオペレータによって支援され得るかまたはコンピューティングデバイスが手動でデータを電話もしくは他の適切な電子機器にキーイングすることができるトランザクションを実施するためにコンピューティングデバイスが使用し得る一般電話回線（ＰＯＴＳ）、システム内の任意の２つのノードの間に通信インターフェースまたは交換を提供する任意のパケットデータネットワーク（ＰＤＮ）、もしくは、任意のローカルエリアネットワーク（ＬＡＮ）、都市規模ネットワーク（ＭＡＮ）、広域ネットワーク（ＷＡＮ）、無線ローカルエリアネットワーク（ＷＬＡＮ）、仮想プライベートネットワーク（ＶＰＮ）、イントラネット、または、ネットワークもしくは電話環境における通信を促進する任意の他の適切なアーキテクチャもしくはシステムを含む、コンピューティングデバイスの中または間でデータまたは情報を交換するように動作可能な任意の通信プラットフォームを含んでもよい。
【００４３】
クライアントエージェント２２４は一例において、本明細書において記載されているようなコンピュータ実施方法を実行するように動作可能である。クライアントエージェント２２４は、プロセッサに、クライアントエージェント２２４を提供するように命令するように動作可能な実行可能命令が記憶されている１つまたは複数の有形非一時的コンピュータ可読媒体を含んでもよい。本明細書全体を通じて使用されているものとしては、「エンジン」は、エンジンによって提供される１つまたは複数の方法を実施するように動作可能であり、そのように構成されている、同様のまたは異なる種類の１つまたは複数の論理要素の任意の組み合わせを含む。したがって、クライアントエージェント２２４は、本明細書において開示されるような方法を提供するように構成されている１つまたは複数の論理要素を含んでもよい。いくつかの事例において、クライアントエージェント２２４は、方法またはその一部分を実行するように設計されている専用集積回路を含んでもよく、また、プロセッサに、当該方法を実施するように命令するように動作可能であるソフトウェア命令をも含んでもよい。いくつかの事例において、クライアントエージェント２２４は、「デーモン」プロセスとして作動してもよい。「デーモン」は、バックグラウンドプロセス、常駐プログラム、サービス、システム拡張、コントロールパネル、起動手順、ＢＩＯＳサブルーチン、または、直接ユーザと対話することなく動作する任意の同様のプログラムとして作動する、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせにおいて実装されるかを問わない、任意のプログラムまたは一連の実行可能命令を含んでもよい。特定の実施形態において、デーモンプロセスは、「ドライバ空間」内で高位の特権をもって、または、保護リングアーキテクチャ内のリング０、１、もしくは２において作動することができる。クライアントエージェント２２４はまた、非限定例として、構成ファイル、レジストリエントリ、対話またはユーザモードソフトウェアを含む、他のハードウェアおよびソフトウェアをも含んでもよいことにも留意されたい。
【００４４】
一例において、クライアントエージェント２２４は、本明細書による方法を実施するように動作可能な非一時的媒体上に記憶されている実行可能命令を含む。クライアントデバイス２００の起動時、または、オペレーティングシステム２２２もしくはユーザ１２０からのコマンドを受けてなど、適切な時点において、プロセッサ２１０は、ストレージ２５０から命令のコピーを取り出し、これをメモリ２２０にロードすることができる。プロセッサ２１０はその後、所望の方法を提供するために、クライアントエージェント２２４の命令を反復的に実行することができる。
【００４５】
クライアントエージェント２２４は、法人ユーザ１２０または顧客１６０のようなエンドユーザが、サーバ３００によって提供されるサービスにアクセスするためのインターフェースおよびサービスを提供することができる。たとえば、クライアントエージェント２２４は、ウェブブラウザ、電子メールクライアント、または、ファイル転送プロトコル（ＦＴＰ）、テルネット、セキュアシェル（ＳＳＨ）、ネットワークタイムプロトコル（ＮＴＰ）、もしくは任意の他の適切なネットワークベースのプログラムのようなプログラムのためのクライアントであってもよく、または、それらを含んでもよい。
【００４６】
周辺インターフェース２４０は、クライアントデバイス２００に接続するが、必ずしもクライアントデバイス２００のコアアーキテクチャの一部分であるとは限らない任意の補助デバイスとインターフェースするように構成することができる。周辺機器は、クライアントデバイス２００に拡張機能を提供するように動作可能であってもよく、全体的にクライアントデバイス２００に依存してもよく、または、依存しなくてもよい。いくつかの事例において、周辺機器は、独立しているコンピューティングデバイスであってもよい。周辺機器は、非限定例として、ディスプレイ、端子、プリンタ、キーボード、マウス、モデム、データポート（たとえば、シリアル、パラレル、ＵＳＢ、ファイアワイヤなど）、ネットワークコントローラ、光媒体、外部ストレージ、センサ、トランスデューサ、アクチュエータ、コントローラ、データ取得バス、カメラ、マイクロフォン、またはスピーカのような入力および出力デバイスを含んでもよい。
【００４７】
一例において、周辺機器は、ディスプレイアダプタ２４２、オーディオドライバ２４４、および入出力（Ｉ／Ｏ）ドライバ２４６を含む。ディスプレイアダプタ２４２は、コマンドラインインターフェース（ＣＬＩ）、または、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ、Ａｐｐｌｅ  ＯＳＸデスクトップ、もしくはＵｎｉｘ／Ｌｉｎｕｘ(登録商標)  Ｘ  Ｗｉｎｄｏｗシステムベースデスクトップのようなグラフィカルデスクトップのような、人間が読解可能な視覚出力を提供するように構成することができる。ディスプレイアダプタ２４２は、非限定例として、同軸出力、コンポジットビデオ、コンポーネントビデオ、ＶＧＡ、または、ＤＶＩもしくはＨＤＭＩ(登録商標)のようなデジタル出力のような、任意の適切なフォーマットの出力を提供することができる。いくつかの例において、ディスプレイアダプタ２４２は、それ自体のメモリおよびそれ自体のグラフィックスプロセッシングユニット（ＧＰＵ）を有することができる、ハードウェアグラフィックスカードを含んでもよい。オーディオドライバ２４４は、可聴音のためのインターフェースを提供することができ、いくつかの例において、ハードウェアサウンドカードを含んでもよい。音声出力は、アナログ（３．５ｍｍステレオジャックなど）、コンポーネント（「ＲＣＡ」）ステレオ、または、非限定例として、Ｓ／ＰＤＩＦ、ＡＥＳ３、ＡＥＳ４７、ＨＤＭＩ(登録商標)、ＵＳＢ、Ｂｌｕｅｔｏｏｔｈ(登録商標)またはＷｉ−Ｆｉオーディオのようなデジタルオーディオフォーマットで提供されてもよい。
【００４８】
図３は、本明細書の１つまたは複数の例によるサーバクラスデバイス３００のブロック図である。サーバ３００は、図２に関連して記載されているような、任意の適切なコンピューティングデバイスまたは装置であってもよい。概して、図２の定義および例は、別途具体的に記述されない限り、図３に等しく適用可能であると考えることができる。サーバ３００は、特定の実施形態において、本明細書による論理演算をクライアント−サーバモデルに沿って分割することができ、クライアントデバイス２００は特定の局在化されたタスクを提供し、一方でサーバ３００は特定の他の集中化されたタスクを提供することを示すために、本明細書においては別個に記載される。現代の実践において、サーバ３００はクライアントデバイス２００よりも、コンピューティングクラスタ上で作動する「ヘッドレス」ＶＭとして、または、独立型アプライアンスとして提供される傾向が強いが、これらの構成は必須ではない。
【００４９】
サーバ３００は、複数のコアを含むことができ、オペレーティングシステム３２２および少なくともサーバエンジン３２４のソフトウェア部分を提供するための実行可能命令が記憶されているメモリ３２０に接続することができるプロセッサ３１０を含む。サーバ３００の他の構成要素は、ストレージ３５０、およびネットワークインターフェース３６０を含む。図２に記載されているように、各論理ブロックは、１つまたは複数の同様のまたは異なる論理要素によって提供することができる。
【００５０】
一例において、プロセッサ３１０は、たとえば、ダイレクトメモリアクセス（ＤＭＡ）バスまたは保管および適切なメモリ相互接続であってもよいメモリバス３７０−３を介してメモリ３２０に通信可能に結合される。プロセッサ３１０は、システムバス３７０−１を介して他のデバイスに通信可能に結合することができる。
【００５１】
プロセッサ３１０は、ＤＭＡバス３７０−３を介して、または、任意の他の適切なメモリ相互接続を介してＤＭＡ構成でメモリ３２０に接続されてもよい。図２において論じられているように、メモリ３２０は、任意の適切なタイプの１つまたは複数の論理要素を含んでもよい。
【００５２】
ストレージ３５０は、図２のストレージ２５０に関連して記載されているように、任意の種類のメモリ３２０であってもよく、または、別個のデバイスであってもよい。ストレージ３５０は、１つもしくは複数のデータベースまたは他の構成で記憶されるデータであってもよく、またはそれらを内部に含んでもよく、オペレーティングシステム３２２およびサーバエンジン３２４のソフトウェア部分のような動作ソフトウェアの記憶されているコピーを含んでもよい。
【００５３】
ネットワークインターフェース３６０は、図２において記載されているように、サーバ１４０を有線または無線ネットワークに通信可能に結合することができ、１つまたは複数の論理要素を含むことができる。ネットワークインターフェース３６０は、ＮＩＣ、ＨＦＩ、または任意の他の適切なデバイスであってもよい。
【００５４】
サーバエンジン３２４は、図２において記載されているようなエンジンであり、一例において、本明細書において記載されているようなコンピュータ実施方法を実行するように動作可能な１つまたは複数の論理要素を含む。サーバエンジン３２４のソフトウェア部分は、デーモンプロセスとして作動することができる。
【００５５】
サーバエンジン３２４は、プロセッサに、セキュリティエンジンを提供するように命令するように動作可能な実行可能命令が記憶されている１つまたは複数の非一時的コンピュータ可読媒体を含んでもよい。サーバ１４０の起動時、または、オペレーティングシステム３２２もしくはユーザ１２０もしくはセキュリティ管理者１５０からのコマンドを受けてなど、適切な時点において、プロセッサ３１０は、ストレージ３５０からサーバエンジン３２４（またはそのソフトウェア部分）のコピーを取り出し、これをメモリ３２０にロードすることができる。プロセッサ３１０はその後、所望の方法を提供するために、サーバエンジン３２４の命令を反復的に実行することができる。
【００５６】
サーバエンジン３２４は、ネットワークベースのサービスを提供するための、デーモンを含む、任意の適切なサーバプログラムであってもよい。これらは、非限定例として、ＨＴＴＰもしくはウェブサーバ、電子メールサーバ、ＦＴＰサーバ、テルネットサーバ、ＳＳＨサーバ、ＮＴＰサーバ、または任意の他の適切なサーバを含んでもよい。特定の実施形態において、サーバエンジン３２４は、本明細書において記載されているようなＡＬＮＱの「アプリケーション」である。特定の実施形態において、サーバエンジン３２４は、図８の方法または関連方法を実施することができる。
【００５７】
キューイングエンジン３２６も提供することができ、これは、本明細書において記載されているようなエンジンであってもよい。キューイングエンジン３２６は、図７の方法または関連方法を実施することを含む、ＡＬＮＱキューイングサービスを提供するように構成することができる。
【００５８】
図４は、本明細書の１つまたは複数の例によるサーバ３００の選択された要素のブロック図である。この例において、ＮＩＣ３６０がサーバ３００をネットワーク１７０に接続しており、ネットワーク１７０は、複数のエンドユーザデバイス４６２に通信可能に結合されている。数千またはそれ以上のエンドユーザデバイス４６２を含む、多くのエンドユーザデバイス４６２があってもよい。エンドユーザデバイス４６２は、サーバエンジン３２４または任意の他の適切なアプリケーションなどを介して、サーバ３００によって提供されるサービスにアクセスする目的で、サーバ３００にアクセスする。
【００５９】
この例において、サーバ３００は８つのコア３１０を含む。各コア３１０は適宜、異なるサービスまたはサービスのスレッドに専用のものとすることができるが、これは非限定例に過ぎず、プロセッサ３１０が複数の異なるプロセスを共有することも可能である。この例において、ウェブサーバ４２０が提供される。ウェブサーバ４２０は、４つの別個のスレッドに分割される。具体的には、ウェブ０  ４２０−０はコア０  ３１０−０上で作動する。ウェブ１  ４２０−１はコア１  ３１０−１上で作動する。ウェブ２  ４２０−２はコア２  ３１０−２上で作動する。ウェブ３  ４２０−３はコア３  ３１０−３上で作動する。
【００６０】
電子メールサーバ４３０も提供される。この例において、２つのコアが電子メールサーバ４３０に専用とされる。具体的には、電子メール０  ４３０−０はコア４  ３１０−４上で作動する。電子メール１  ４３０−１はコア５  ３１０−５上で作動する。
【００６１】
最後の２つのコアは、バックグラウンドプロセスをサポートすることに寄与する。具体的には、サポートアプリケーション４５０がコア６  ３１０−６上で作動する。オペレーティングシステム３２２が、コア７  ３１０−７上で作動する。コアの数、スレッドの数、および、いくつかのコアの間でのスレッドの分散は、非限定例として与えられている。他の実施形態においては、他の構成が可能である。いくつかの事例において、機械はより多くのコアを有してもよく、より多くのスレッドを有してもよい。他の事例において、機械はより少ないコアを有してもよく、より少ないスレッドを有してもよい。コアおよびスレッドの任意の適切な組み合わせが利用可能である。
【００６２】
この例において、ＮＩＣ３６０は、０〜１５の番号を付されたキュー４５０を露出させる。本明細書において開示されている例によれば、グループ４５２を含むキュー０〜３は、ポート８０上のトラフィックに専用とされる。グループ４５４を含むキュー４および５は、ポート２５上のトラフィックに専用とされる。キュー６〜１５は補助キューと考えられ、オペレーティングシステム３２２およびサポートアプリケーション４５０によって使用されるために割り当てられる。
【００６３】
入来するパケットがＮＩＣ３６０に対してネットワーク１７０から来ると、キューイングエンジン３２６は、パケットをトップダウン式に検査する。言い換えれば、キューイングエンジン３２６は、上層の情報を最初に検査する。この例において、キューイングエンジン３２６は具体的には、いずれの論理ポートにパケットが指定されているかを見ている。一例において、パケットは、パケットがポート８０トラフィックである時かつその時に限り、グループ４５２に割り当てられる。したがって、すべてのポート８０トラフィックがグループ４５２に割り当てられ、ポート８０トラフィックでないトラフィックはグループ４５２には割り当てられない。
【００６４】
同様に、入力するトラフィックがポート２５上の電子メールトラフィックである時かつその時に限り、トラフィックはグループ４５４に割り当てられる。言い換えれば、すべてのポート２５トラフィックがグループ４５４に割り当てられ、ポート２５トラフィックでないトラフィックはグループ４５４には割り当てられない。
【００６５】
ポート８０またはポート２５のいずれでもない任意のトラフィックは、標準的な割り当て方法に従って、６〜１５の番号を付された補助ポートの１つに割り当てられる。この方法は、ハッシングなどを含んでもよい。これは、ウェブサーバ４２０には、そのトラフィックのすべてがグループ４５２内に現れることになり、外部トラフィックはそのグループ内には現れないことが分かることを意味する。同様に、電子メールサーバ４３０には、そのトラフィックのすべてがグループ４５４内に現れることになり、外部トラフィックはそのグループ内には現れないことが分かる。反対に、オペレーティングシステム３２２には、それら２つのグループがそれらのそれぞれのアプリケーションによって完全に「占有」されていることが分かり、そのため、ＯＳ３２２は、適切な状況において、その通常のセキュリティ手順のいくらかを迂回し、それらのアプリケーションがそれら自体の内部セキュリティを処理するようにすることができる。
【００６６】
補助ポート６〜１５へのトラフィックの割り当ては、いくつかの実施形態においては、ＲＳＳ、Ｆｌｏｗ  Ｄｉｒｅｃｔｏｒなどのような従来技術の方法を含む、任意の適切な方法を用いて達成することができる。同様に、パケットがグループ４５２または４５４のいずれかに割り当てられると、グループ内のキューへのパケットの割り当ては、ＲＳＳ、Ｆｌｏｗ  Ｄｉｒｅｃｔｏｒなどを含む任意の適切な手段によって達成することができる。
【００６７】
有利には、グループ４５２がウェブサーバ４２０に指定されているポート８０上のトラフィックしか含まないことは分かっているため、ここでオペレーティングシステムは、アプリケーション特有のポリシーおよび最適化を直に課すための柔軟性を有する。一例として、オペレーティングシステムは、他のアプリケーションからのトラフィックを有することに起因するセキュリティ違反を考慮する必要なしに、キューをアプリケーションに直にわたすことができる。
【００６８】
図５は、本明細書の１つまたは複数の例による追加の実施形態の図である。図５の例において、グループ４５２および４５４は、図４の例におけるそれらの２倍の大きさである。これは、キューとスレッドとの間の１対１のマッピングが可能である時、１よりも大きい任意のｎについて、ｎ対１のマッピングも可能であることを示すためのものである。
【００６９】
図５の例において、グループ４５２および４５４は両方とも、各スレッドについて２つの別個のキューを確保する。これは、ウェブサーバ４２０および電子メールサーバ４３０が、サーバ３００の機能に対して、サポート機能４５０およびオペレーティングシステム３２２よりも相対的に重要であり得るという原則を示している。したがって、特定の実施形態において、各スレッドに対して追加のキューを割り当て、通信におけるボトルネックを回避することが有利であり得る。したがって、この例では、キュー０および１がウェブサーバスレッド４２０−０のために確保されている。キュー２および３は、ウェブサーバスレッド４２０−１のために確保されている。キュー４および５は、ウェブサーバスレッド４２０−２のために確保されている。キュー６および７は、ウェブサーバスレッド４２０−３のために確保されている。
【００７０】
同様に、キュー８および９は、電子メールサーバスレッド４３０−０のために確保されている。キュー１０および１１は、電子メールサーバスレッド４３０−１のために確保されている。
【００７１】
最後に、キュー１２〜１５は汎用に割り当てられており、ポート８０か２５上にないすべてのトラフィックを含め、サポート機能４５０およびオペレーティングシステム３２２のために使用することができる。
【００７２】
図４および図５の例は、可能性のある構成の非限定例であることに留意されたい。キューの数がコアの数に正確に一致する構成、または、キューの数が非整数関数によってコアの数に関連付けられる構成を含む、他の構成が可能である。
【００７３】
図６は、従来のＯＳＩネットワークスタックモデルのブロック図解である。従来のＯＳＩモデルにおいて、ネットワークスタックは７つの層、具体的には、物理層６１０、データリンク層６２０、ネットワーク層６３０、トランスポート層６４０、セッション層６５０、プレゼンテーション層６６０、およびアプリケーション層６７０を含む。ＯＳＩモデルはここでは例示を目的として提示されており、ＯＳＩモデルは非限定例に過ぎないことは理解されたい。「インターネットプロトコル群」（ＴＣＰ／ＩＰとして参照されることが多い）も、一般的に使用される。ＴＣＰ／ＩＰ層は、ＯＳＩ層と同様であり得るが、同一ではない。
【００７４】
ＯＳＩモデルの７つの層は、ここでは、本明細書の関連部分の文脈の目的のために、簡潔に記載されている。これらの層は、要約すると以下の通りである。
【００７５】
物理層６１０−物理層（レイヤ１）は、ネットワーキングハードウェアおよび送信技術を提供する。この層は、物理ワイヤ、クロック、電圧、および、論理データパケットではなく生のビットの送信を可能にするための他の物理構造を含む。各ビットストリームはコード語またはシンボルにグループ化され、ハードウェア伝送媒体を介して送信される物理信号に変換されてもよい。物理層は、伝送媒体に対する電気的、機械的、および手続き的インターフェースを提供する。７層モデルの文脈の中で、物理層は、データリンク層からの論理通信要求をハードウェア特有の動作に変換して、電子信号の送信または受信を実行する。
【００７６】
データリンク層６２０−データリンク層（レイヤ２）は、ネットワークエンティティ間のデータの機能的および手続き的転送を可能にするために、隣接するネットワークノード間でデータを転送するプロトコル層である。特定の実施形態において、データリンク層はまた、エラー検出および補正をも可能にする。この層における基本データ単位はデータリンクフレームであり、これは、ローカルネットワーク境界をまたぐようには意図されていない。ネットワーク間のルーティングおよび大域的アドレス指定は、より高い層において実施される。これによって、データリンク層がローカルな送達、アドレス指定、および媒体仲裁に集中することが可能である。データリンクプロトコルは、デバイスがどのように衝突を検出し、衝突から回復するかを指定し、それらを低減または防止するためのメカニズムを提供することができる。したがって、特定の既存のアーキテクチャにおいて、パケットのキューイングは、ＭＡＣアドレスのような、この層において利用可能な値または絶対値のハッシュを使用することに基づく。
【００７７】
ネットワーク層６３０−レイヤ３はネットワーク層である。ネットワーク層は、中間ルータを通じたルーティングを含む、パケット転送の役割を担う。ネットワーク層は、サービス品質機能を維持しながら、発信元から１つまたは複数のネットワークを介して宛先ホストへと可変長データシーケンスを転送する機能的および手続き的手段を提供する。ネットワーク層の機能は、以下を含む。
【００７８】
接続モデル：コネクションレス通信。たとえば、ＩＰは、受信者が確認応答を送信する必要なしに、データグラムが送信者から受信者へと進行することができるという点において、コネクションレスである。ＯＳＩモデルの他のより高い層にはコネクション型のプロトコルが存在する。
【００７９】
ホストアドレス指定。ネットワーク内のすべてのホストは、それがどこにあるかを決定づける固有のアドレスを有しなければならない。このアドレスは通常、階層システムから割り当てられる。ＴＣＰ／ＩＰにおいて、これは、３２ビットＩＰｖ４（たとえば、１９２．１６８．１．１）、または、１２８ビットＩＰｖ６（たとえば、２００１：０ＤＢ８：ＡＣ１０：ＦＥ０１：００００：００００：００００：００００）のいずれかのＩＰアドレスである。ＩＰｖ４アドレスは、大域的に固有であってもよく、または、ローカルに固有（すなわち、ローカルサブネットワークにおいて使用される場合）であってもよい。ＩＰｖ６アドレスは、大域的に固有であるように意図されている。
【００８０】
メッセージ転送。多くのネットワークがサブネットワークに区分化され、広域通信のために他のネットワークに接続するため、ネットワークは、ネットワーク間でパケットを転送するために、ゲートウェイまたはルータと呼ばれる専用のホストを使用する。これはまた、ユーザが１つの箇所から別の箇所へと移動する場合があり、ユーザのメッセージがユーザに追従するように構成されなければならないモバイルアプリケーションにとっても関心事である。
【００８１】
ネットワーク層は、トランスポート層からのサービス要求に応答し、データリンク層にサービス要求を発行する。
【００８２】
トランスポート層６４０−レイヤ４は、アプリケーションのエンドツーエンドまたはホストツーホスト通信サービスを可能にするトランスポート層である。トランスポート層は、接続型データストリームサポート、信頼性、フロー制御、および多重化のようなサービスを提供する。単純なコネクションレス（ステートレス）実施態様は、レイヤ４におけるユーザデータグラムプロトコル（ＵＤＰ）を使用することができ、一方で、コネクション型（ステートフル）実施態様は、伝送制御プロトコル（ＴＣＰ）を使用することができる。非限定例として、データグラム輻輳制御プロトコル（ＤＣＣＰ）およびストリーム制御転送プロトコル（ＳＣＴＰ）も提供される。
【００８３】
セッション層６５０−レイヤ５はセッション層である。セッション層は、図１のエンドユーザアプリケーション１６２またはクライアントアプリケーション１１２のようなエンドユーザアプリケーションおよび図４のウェブサーバ４２０の間のセッションを開き、閉じ、管理する。通信セッションは、アプリケーション間で発生する要求および応答から構成される。セッション層サービスは、遠隔手続き呼び出し（ＲＰＣ）を利用するアプリケーション環境において一般的に使用されている。セッション層は、プレゼンテーション層からのサービス要求に応答することができ、トランスポート層にサービス要求を発行する。
【００８４】
プレゼンテーション層６６０−レイヤ６は、構文層とも呼ばれるプレゼンテーション層である。プレゼンテーション層は、データ構造のフラットなバイト配列へのシリアライゼーションを含む、さらなる処理または表示のためのアプリケーション層への情報の送達およびフォーマット化の役割を担う。この層は、エンドユーザシステム内でのデータ表現の構文上の相違を処理する。たとえば、ＥＢＣＤＩＣコード化データは、アプリケーションによって使用するためにＡＳＣＩＩに変換することができる。この層はまた、多様なデータ型の問題も処理する。たとえば、明確な整数長を有するパスカル形式文字列は、Ｃスタイルヌル終端文字列とは別様に解釈される必要があり得る。適切な場合、暗号化もこの層において実施されてもよい。
【００８５】
アプリケーション層６７０−レイヤ７は、アプリケーション層である。ＯＳＩモデルにおいて、レイヤ７は、受信された情報をユーザに表示する役割を担う。
【００８６】
特定の既存のネットワーキングアーキテクチャにおいて、ＮＩＣ３６０のようなネットワークインターフェースへと入来するトラフィックは、キュー４５０のようなキューに割り当てられる。
【００８７】
図７は、本明細書の１つまたは複数の例による、キューイングエンジン３２６によって、特に受信されるパケットに対して実施される方法７００の流れ図である。
【００８８】
ブロック７２０において、ＮＩＣ３６０が、入来するパケットを受信する。これは、物理インターフェースが、入来するデータパケットを提供する電気信号を受信することを意味する。
【００８９】
ブロック７３０において、キューイングエンジン３２６が、パケットをトップダウン式に構文解析する。具体的には、この例においては、キューイングエンジン３２６は、パケットの宛先ポートを抽出するが、他の値が使用されてもよい。
【００９０】
ブロック７４０において、キューイングエンジン３２６は、ポートが「リッスン」するポートとして構成されているか否かを判定する。そうである場合、キューイングエンジン３２６は、このポートに割り当てられているグループ内のいくつかのキューを識別する。
【００９１】
ブロック７５０において、キューイングエンジン３２６は、パケットを負荷平衡させて、その割り当てられているキューへと分散させる。たとえば、グループ４５２がＨＴＴＰトラフィックのために指定されている場合、かつ、入来するパケットがポート８０に対するものである場合、キューイングエンジン３２６は、パケットを、適切な負荷平衡アルゴリズムに従ってグループ４５２内のキューの１つに割り当てることができる。パケットを割り当てるための特定のキューを識別するためにＲＳＳ、Ｆｌｏｗ  Ｄｉｒｅｃｔｏｒなどを使用することができる。パケットはその後、適切な場合にプロセッサから独立してアクセスすることができるように、ダイレクトメモリアクセス（ＤＭＡ）を介して利用可能にすることができる。
【００９２】
ブロック７６０において、割り込みが有効化され（たとえば、「ビジーポーリング」ではなく）、割り込み抑止タイマが満了している場合、キューイングエンジン３２６は、割り込みをホストに送信する。言い換えれば、割り込みドライバは、すべての入来するパケットについて割り込みをトリガするのではない。むしろ、割り込みは、パケットの閾値または時間に達した時にのみトリガされる。その後、割り込みサービスルーチンが、サーバエンジン３２４に直にシグナリングする。割り込みは、トリガ論理に応じてアサートされ、アサートされる場合、アプリケーションにシグナリングする。いずれにせよ、サーバエンジン３２４からのポーリングが、パケットフローをトリガし得る。
【００９３】
ブロック７８０において、キューイングエンジン３２６は、キューイング通知を、サーバエンジン３２４のスレッドのような、適切なプロセスに送信する。たとえば、ウェブサーバ４２０の事例において、キューイングエンジン３２６は、プロセスのスレッド０  ４２０−０のような適切なスレッドに通知を送信することができる。具体的には、ドライバは、キューからパケットを拾い出し、そのパケットとともに、特定のキューを識別した不透明な情報をわたすことができる。この情報は、ソケット層内に記憶され、アプリケーションに対して利用可能である。
【００９４】
ブロック７９９において、方法は終了する。
【００９５】
図８は、本明細書の１つまたは複数の例による、サーバエンジン３２４のようなアプリケーションによって実施される方法８００の流れ図である。
【００９６】
ブロック８１０において、アプリケーションスレッドが非同期ポール呼び出しを行う。たとえば、Ｌｉｎｕｘ(登録商標)オペレーティングシステムは、ＥＰＯＬＬとして知られている呼び出しを与える。ＥＰＯＬＬなどを使用する場合、アプリケーションは、アプリケーションが監視しているソケットの不透明なキュー識別子を取得し、特定のイベントファイル記述子について監視している他のソケットのキュー識別子と一致するか否かを調べるためにチェックする。そうである場合、アプリケーションはこのソケットをウォッチリストに追加する。そうでない場合、アプリケーションは、一致するキュー記述子を有し、そのウォッチリストに追加されるイベントファイル記述子にソケットをわたす。一例において、単一のスレッドが、単一のイベントファイル記述子に対して動作する。したがって、監視しているソケットの、同じキュー識別子との一致を作成することによって、他のアプリケーションからの干渉なしにトラフィックフローが合理化される。
【００９７】
ブロック８２０において、アプリケーションスレッドが、非同期ポーリングによって提供されるソケット／イベントファイル記述子に従って、その割り当てられているキューをポーリングする。データがない（また、それ故にそのためにする作業がない）ためにスレッドが休止した場合、休止しているスレッドに対して起動を直に実施することができ、スレッドが復帰してそのキューからパケットを引き出すことが可能になる。言い換えれば、プロトコルおよび記述子処理は、割り込み、または、割り込みの結果としてスケジューリングされる遅延プロシージャコール（ＤＰＣ）（Ｗｉｎｄｏｗｓ）／ＳｏｆｔＩＲＱ（Ｌｉｎｕｘ(登録商標)）の文脈においてではなく、スレッドの文脈において行われる。その際に、スケジューリング親和性が確保される。アプリケーション（サーバエンジン３２６など）のスケジューラ起動によって、同じキャッシング／スケジューリング領域内のパケット送達および送信と関連付けられる、すべての共有カーネル構造が保持され、オペレーティングシステム／ハイパーバイザのスケジューリングポリシーと整合される。
【００９８】
ブロック８３０において、アプリケーションスレッドは、タイムアウトになるまでビジーポーリングを実施する。ソケットのビジーポーリングは、アプリケーション特有のキューからパケットを直に引き出すために合理化することができる。
【００９９】
判断ブロック８４０において、データが利用可能である場合、ブロック８７０において、図９の方法９００が実施される。
【０１００】
データが利用可能でない場合、ブロック８８０において、スレッドは、割り込みが有効化されて休止状態になる。
【０１０１】
ブロック８９９において、方法は終了する。
【０１０２】
図９は、本明細書の１つまたは複数の例による、データ消費の追加の詳細を開示する方法９００の流れ図である。
【０１０３】
ブロック９４０において、ＮＩＣ３６０は、パケットと関連付けられるキュー識別子トークンをスタンピングし、識別子を、ネットワークスタックを上方へと伝播させる。アプリケーション３２４がその後、ＮＩＣ３６０からキュー識別子を受信する。２つ以上のＮＩＣ３６０がある場合、これはまた、デバイス識別子（たとえば、ＮＩＣ０，キュー１、ＮＩＣ１，キュー１など）をも含み得ることに留意されたい。
【０１０４】
ブロック９６０において、ソケット層が、キュー識別子をその状態の一部分として記憶する。ここでも、キュー識別子はデバイス特有であり得る。
【０１０５】
ブロック９８０において、アプリケーション３２４がデータを消費する。
【０１０６】
ブロック９９９において、方法は終了する。
【０１０７】
図１０は、本明細書の１つまたは複数の例による、ＡＬＮＱを用いて送信動作を実施する方法１０００の流れ図である。この方法は、非限定例として理解され、特に、特定のネットワーク層が、例としてこの流れ図の動作を割り当てられる。
【０１０８】
ブロック１０１０において、アプリケーション３２４が、拡張ソケットオプションなどを介して、ソケットのキューマッピングを設定することができる。これは、送信先のキューが最後の送信動作と異なる場合にのみ必要とされ得ることに留意されたい。
【０１０９】
ブロック１０３０において、アプリケーション３２４は、通常のパケットＳＥＮＤコールを使用してパケットを送信する。
【０１１０】
ブロック１０４０において、ネットワークスタックのソケット層が、キュー識別子を送信パケットに付加する。
【０１１１】
ブロック１０５０において、プロトコルおよびネットワーク層が、それらの通常の、知られている機能を実施する。
【０１１２】
ブロック１０６０において、デバイス層が、キュー識別子をチェックし、パケットを送信のために指定されているキューに配置する。
【０１１３】
ブロック１０８０において、デバイス層が、パケットが送信のために準備ができていることを、適切なＮＩＣ３６０にシグナリングする。
【０１１４】
ブロック１０９０において、ＮＩＣ３６０がパケットを送信する。
【０１１５】
ブロック１０９９において、方法は終了する。
【０１１６】
上記は、いくつかの実施形態の特徴を、当業者が本開示の様々な態様をよりよく理解することができるように、概説している。当業者は、自身が本明細書において紹介されている実施形態の同じ目的を実行し、および／または、同じ利点を達成するために、他のプロセスおよび構造を設計または修正するための基礎として、本開示を容易に使用することができることを了解するはずである。当業者はまた、そのような均等な構造が本開示の趣旨および範囲から逸脱しないこと、ならびに、自身が本開示の趣旨および範囲から逸脱することなく本発明において様々な変更、置換、および改変を行うことができることも認識するはずである。クライアントデバイス２００およびサーバ３００は両方とも、コンピューティング装置または他のコンピューティングデバイスの例であり得ることに留意されたい。
【０１１７】
本明細書において開示されている任意のハードウェア要素のすべてまたは一部分は、中央処理装置（ＣＰＵ）パッケージを含むシステムオンチップ（ＳｏＣ）において容易に提供することができる。ＳｏＣは、コンピュータまたは他の電子システムの構成要素を単一のチップに集積する集積回路（ＩＣ）を表す。したがって、たとえば、クライアントデバイス１１０かサーバデバイス３００は、全体的にまたは部分的に、ＳｏＣ内に設けることができる。ＳｏＣは、デジタル、アナログ、混合信号、および無線周波数機能を含むことができ、それらのすべてを、単一のチップ基板上に設けることができる。他の実施形態は、複数のチップが単一の電子パッケージ内に配置され、電子パッケージを通じて互いと近密に相互作用するように構成されている、マルチチップモジュール（ＭＣＭ）を含んでもよい。様々な他の実施形態において、本明細書において開示されているコンピューティング機能は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、および他の半導体チップ内の１つまたは複数のシリコンコアにおいて実装されてもよい。
【０１１８】
また、特定の実施形態において、構成要素のいくつかは省略または統合されてもよいことも留意されたい。一般的な意味において、図面に示されている構成は、それらの表現においてより論理的であり得、一方で、物理アーキテクチャは、これらの要素の様々な置換、組み合わせ、および／またはハイブリッドを含んでもよい。本明細書において概説されている動作目的を達成するために無数の可能な設計構成を使用することができることに留意しなければならない。したがって、関連するインフラストラクチャは、無数の代替的な構成、設計選択肢、デバイスの可能性、ハードウェア構成、ソフトウェア実施態様、および機器オプションを有する。
【０１１９】
一般的な意味において、プロセッサ３１０のような任意の適切に構成されているプロセッサが、本明細書において詳述されている動作を達成するために、データと関連付けられる任意のタイプの命令を実行することができる。本明細書において開示されている任意のプロセッサは、要素または物品（たとえば、データ）を、１つの状態または物から別の状態または物へと変換し得る。別の例において、本明細書において概説されているいくつかの活動は、固定論理またはプログラム可能論理（たとえば、プロセッサによって実行されるソフトウェアおよび／またはコンピュータ命令）によって実施されてもよく、本明細書において識別されている要素は、何らかのタイプのプログラム可能プロセッサ、プログラム可能デジタル論理（たとえば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ））、デジタル論理を含むＡＳＩＣ、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤ  ＲＯＭ、磁気もしくは光カード、電子命令を記憶するのに適した他のタイプの機械可読媒体、または、それらの任意の適切な組み合わせであってもよい。
【０１２０】
動作時、ストレージ３５０のようなストレージが、適宜、特定の需要に基づいて、任意の適切なタイプの有形非一時的記憶媒体（たとえば、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）など）、ソフトウェア、ハードウェア（たとえば、プロセッサ命令またはマイクロコード）内、または、任意の他の適切な構成要素、デバイス、要素、またはオブジェクト内に情報を記憶することができる。さらに、追跡、送信、受信、またはプロセッサ内に記憶される情報は、特定の需要および実施態様に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、制御リスト、またはストレージ構造において提供されてもよく、それらのすべてが任意の適切な時間枠内で参照され得る。メモリ３２０およびストレージ３５０のような、本明細書において開示されているメモリまたは記憶要素のいずれかは、適宜、「メモリ」および「ストレージ」という広範な用語の中に包含される物として解釈されるべきである。非一時的記憶媒体は本明細書において、開示されている動作を提供し、または、プロセッサ３１０のようなプロセッサに開示されている動作を実施させるように構成されている任意の非一時的専用またはプログラム可能ハードウェアを含むように明示的に意図されている。
【０１２１】
本明細書において記載されている機能のすべてまたは一部分を実施するコンピュータプログラム論理は、決して限定はされないが、ソースコード形態、コンピュータ実行可能形態、機械命令またはマイクロコード、プログラム可能ハードウェア、および様々な中間形態（たとえば、アセンブラ、コンパイラ、リンカ、またはロケータによって生成される形態）を含む、様々な形態で具現化される。一例において、ソースコードは、オブジェクトコード、アセンブリ言語、または、様々なオペレーティングシステムや動作環境とともに使用するためのＯｐｅｎＣＬ、Ｆｏｒｔｒａｎ、Ｃ、Ｃ＋＋、ＪＡＶＡ(登録商標)、もしくはＨＴＭＬのような高水準言語、または、Ｓｐｉｃｅ、Ｖｅｒｉｌｏｇ、およびＶＨＤＬのようなハードウェア記述言語において実装される一連のコンピュータプログラム命令を含む。ソースコードは、様々なデータ構造および通信メッセージを定義し、使用することができる。ソースコードは、（たとえば、インタープリタを介して）コンピュータ実行可能形態にあってもよく、または、ソースコードは、（たとえば、変換装置、アセンブラ、またはコンパイラを介して）コンピュータ実行可能形態に変換されてもよく、もしくは、バイトコードのような中間形態に変換されてもよい。適宜、上記のいずれかを、順序、組み合わせ、状態機械、またはその他であるかを問わず、適切なディスクリートまたは集積回路を構築または記述するために使用することができる。
【０１２２】
１つの例示的な実施形態において、図面の任意の数の電気回路を、関連電子デバイスの基板上に実装することができる。基板は、電子デバイスの内部電子システムの様々な構成要素を保持し、さらに、他の周辺機器のためのコネクタを提供することができる、一般的な回路基板であってもよい。より具体的には、基板は、それによってシステムの他の構成要素が電気的に通信することができる、電気接続を提供することができる。任意の適切なプロセッサおよびメモリが、特定の構成需要、処理需要、およびコンピューティング設計に基づいて基板に適切に結合することができる。外部ストレージ、追加のセンサ、オーディオ／ビデオディスプレイのためのコントローラ、および周辺デバイスのような他の構成要素が、プラグインカードとして、ケーブルを介して基板に付加されてもよく、または、基板自体に集積されてもよい。別の例において、図面の電気回路は、独立型モジュール（たとえば、特定のアプリケーションまたは機能を実施するように構成されている関連構成要素および回路を有するデバイス）として実装されてもよく、または、プラグインモジュールとして、電子デバイスの特定用途向けハードウェア内に実装されてもよい。
本明細書において与えられている多数の例によれば、相互作用は、２つ、３つ、４つ、またはそれ以上の電気的構成要素に関して説明され得ることに留意されたい。しかしながら、これは、明瞭にすることおよび例示することのみを目的として行われている。システムは、任意の適切な様式で統合または再構成することができることは了解されたい。同様の設計代替形態に沿って、図面の例示されている構成要素、モジュール、および要素は、様々な可能な構成において組み合わされてもよく、それらのすべてが、本明細書の広範な範囲内にある。特定の事例において、限られた数の電気的要素のみを参照することによって、所与のフローセットの機能の１つまたは複数を説明することがより容易であり得る。図面の電気回路およびその教示は容易にスケーラブルであり、多数の構成要素、ならびにより複雑な／洗練された配列および構成に適合することができることは了解されたい。したがって、与えられている例は、無数の他のアーキテクチャに適用される可能性があるような、電気回路の範囲を限定すべきではなく、または、その広範な教示を阻害するべきではない。
【０１２３】
多数の他の変更、置換、変形、代替、および修正が当業者によって究明され得、本開示は、添付の特許請求項の範囲内に入るものとしての、すべてのそのような変更、置換、変形、代替、および修正を包含することが意図されている。米国特許商標庁（ＵＳＰＴＯ）、および、加えて、本出願に対して発行される任意の特許の任意の読者が本明細書に添付されている特許請求項を解釈するのを補助するために、本出願人が、（ａ）「〜するための手段」または「〜するステップ」という文言が特定の特許請求項において具体的に使用されていない限り、特許請求項は本明細書の出願日付で存在するため、添付の特許請求項のいずれも、米国特許法第１１２条（旧法）の第６段落または同条項（改正法）の段落（ｆ）を行使するようには意図せず、（ｂ）本明細書におけるいずれの陳述によっても、添付の特許請求項に別途明示的に反映されていないいずれの様式においても、本開示を限定することを意図しないことに留意することを、本出願人は所望する。
【０１２４】
例示的な実施態様
複数のキューを提供するように構成されているネットワークインターフェースと、アプリケーションと、入来するパケットを検査し、入来するパケットを分類子に基づいてアプリケーションの専用キューに割り当てるためのキューイングエンジンを備える１つまたは複数の論理要素とを備える装置が、実施例１において開示される。
【０１２５】
分類子がアプリケーション識別子を含む、実施例１の装置が、実施例２において開示される。
【０１２６】
分類子がポート番号を含む、実施例１の装置が、実施例３において開示される。
【０１２７】
アプリケーションに割り当てを通知するための手段をさらに備える、実施例１の装置が、実施例４において開示される。
【０１２８】
アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施することを可能にするための手段を備える、実施例１の装置が、実施例５において開示される。
【０１２９】
キューイングエンジンがさらに、拡張ソケットオプションを介してソケットのキューマッピングを受信する、実施例１の装置が、実施例６において開示される。
【０１３０】
アプリケーションが、ソケットのキュー割り当てを含むキュー割り当て通知をネットワークインターフェースから受信し、ソケットを、キュー割り当てと関連付けられるスレッドに割り当てる、実施例１の装置が、実施例７において開示される。
【０１３１】
スレッドが、１対１構成においてキュー割り当てと一意に関連付けられる、実施例７の装置が、実施例８において開示される。
【０１３２】
複数のキュー割り当てがｎ対１構成においてスレッドと関連付けられる、実施例７の装置が、実施例９において開示される。
【０１３３】
アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施する、実施例７の装置が、実施例１０において開示される。
【０１３４】
アプリケーションが、拡張ソケットオプションを介してソケットのキューマッピングを設定する、実施例７の装置が、実施例１１において開示される。
【０１３５】
ネットワークインターフェース上で入来するパケットを検査し、入来するパケットを、分類子に基づいてアプリケーションの専用キューに割り当てるためのキューイングエンジンを提供するための命令が記憶されている１つまたは複数の有形非一時的コンピュータ可読媒体が、実施例１２において開示される。
【０１３６】
分類子がアプリケーション識別子を含む、実施例１２の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１３において開示される。
【０１３７】
分類子がポート番号を含む、実施例１２の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１４において開示される。
【０１３８】
アプリケーションに割り当てを通知するための命令をさらに含む、実施例１２の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１５において開示される。
【０１３９】
アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施することを可能にするための命令をさらに含む、実施例１２の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１６において開示される。
【０１４０】
キューイングエンジンがさらに、拡張ソケットオプションを介してソケットのキューマッピングを受信する、実施例１２の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１７において開示される。
【０１４１】
ソケットのキュー割り当てを含むキュー割り当て通知をネットワークインターフェースから受信し、ここで、キュー割り当てはアプリケーションに固有であり、ソケットを、キュー割り当てと関連付けられるスレッドに割り当てるためのアプリケーションを提供するための命令が記憶されている１つまたは複数の有形非一時的コンピュータ可読媒体が、実施例１８において開示される。
【０１４２】
スレッドが、１対１構成においてキュー割り当てと一意に関連付けられる、実施例１８の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例１９において開示される。
【０１４３】
複数のキュー割り当てがｎ対１構成においてスレッドと関連付けられる、実施例１８の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例２０において開示される。
【０１４４】
アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施する、実施例１８の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例２１において開示される。
【０１４５】
アプリケーションが、拡張ソケットオプションを介してソケットのキューマッピングを設定する、実施例１８の１つまたは複数の有形非一時的コンピュータ可読記憶媒体が、実施例２２において開示される。
【０１４６】
ネットワークインターフェース上で複数のキューを提供するステップと、ネットワーク機能アプリケーションを提供するステップと、キューイングエンジンを備える１つまたは複数の論理要素が、入来するパケットを検査するステップと、入来するパケットを分類子に基づいてアプリケーションの専用キューに割り当てるステップとを含む、アプリケーションレベルネットワークキューイングを提供する方法が、実施例２３において開示される。
【０１４７】
分類子がアプリケーション識別子を含む、実施例２３の方法が、実施例２４において開示される。
【０１４８】
分類子がポート番号を含む、実施例２３の方法が、実施例２５において開示される。
【０１４９】
アプリケーションに割り当てを通知するステップをさらに含む、実施例２３の方法が、実施例２６において開示される。
【０１５０】
アプリケーションが割り込みメカニズムを迂回し、スレッドごとに干渉のないビジーポーリングを実施することを可能にすることをさらに含む、実施例２３の方法が、実施例２７において開示される。
【０１５１】
拡張ソケットオプションを介してソケットのキューマッピングを受信するステップをさらに含む、実施例２３の方法が、実施例２８において開示される。
【０１５２】
アプリケーションが、ソケットのキュー割り当てを含むキュー割り当て通知をネットワークインターフェースから受信するステップと、ソケットを、キュー割り当てと関連付けられるスレッドに割り当てるステップとをさらに含む、実施例２３の方法が、実施例２９において開示される。
【０１５３】
スレッドが、１対１構成においてキュー割り当てと一意に関連付けられる、実施例２９の方法が、実施例３０において開示される。
【０１５４】
複数のキュー割り当てがｎ対１構成においてスレッドと関連付けられる、実施例３１の方法。
【０１５５】
アプリケーションが割り込みメカニズムを迂回するステップと、スレッドごとに干渉のないビジーポーリングを実施するステップとをさらに含む、実施例２９の方法が、実施例３２において開示される。
【０１５６】
アプリケーションが、拡張ソケットオプションを介してソケットのキューマッピングを設定する、実施例２９の方法が、実施例３３において開示される。
【０１５７】
実施例２３〜３３のいずれかの方法を実施するための手段を備える装置が、実施例３４において開示される。
【０１５８】
方法を実施するための手段が、プロセッサおよびメモリを含む、実施例３４の装置が、実施例３５において開示される。
【０１５９】
メモリが、実行されると装置に実施例２３〜３３のいずれかの方法を実施させる機械可読命令を含む、実施例３５の装置が、実施例３６において開示される。
【０１６０】
装置がコンピューティングシステムである、実施例３４〜３６のいずれかの装置が、実施例３７において開示される。
【０１６１】
実行されると、実施例２３〜３７のいずれかに記載の方法を実施するかまたは装置を実現する命令を含む、少なくとも１つのコンピュータ可読媒体が、実施例３８において開示される。
【０１６２】
ネットワークスタックのレイヤ１において入来するパケットを受信するステップと、アプリケーションに一意に割り当てられる高レベル分類属性を抽出するために、パケットをトップダウン式に構文解析するステップと、アプリケーションに割り当てられているいくつかのキューを判定するステップと、アプリケーションに割り当てられているいくつかのキューからのキューに対するパケットを負荷平衡させるステップと、キュー通知をアプリケーションに送信するステップとを含む、アプリケーションレベルネットワークキューイングを提供する方法が、実施例３９において開示される。
【０１６３】
高レベル分類属性がアプリケーション識別子である、実施例３９の方法が、実施例４０において開示される。
【０１６４】
高レベル分類属性がポート番号である、実施例３９の方法が、実施例４１において開示される。
【０１６５】
パケットを負荷平衡させるステップが、ハッシングを含む、実施例３９の方法が、実施例４２において開示される。
【０１６６】
パケットを負荷平衡させるステップが、決定論的負荷平衡アルゴリズムを含む、実施例３９の方法が、実施例４３において開示される。
【０１６７】
実施例３９〜４３のいずれかの方法を実施するための手段を備える装置が、実施例４４において開示される。
【０１６８】
方法を実施するための手段が、プロセッサおよびメモリを含む、実施例４４の装置が、実施例４５において開示される。
【０１６９】
メモリが、実行されると装置に実施例３９〜４３のいずれかの方法を実施させる機械可読命令を含む、実施例４５の装置が、実施例４６において開示される。
【０１７０】
装置がコンピューティングシステムである、実施例４４〜４６のいずれかの装置が、実施例４７において開示される。
【０１７１】
実行されると、実施例３９〜４７のいずれかに記載の方法を実施するかまたは装置を実現する命令を含む、少なくとも１つのコンピュータ可読媒体が、実施例４８において開示される。
【０１７２】
ソケットまたはイベントファイル記述子に従って複数の専用の割り当てられるキューをポーリングするために非同期ポール動作を呼び出すステップと、タイムアウトが満了するまでキューをビジーポーリングするステップと、１つまたは複数のデータが利用可能であることを判定するステップと、ネットワークインターフェースデバイスからキュー識別子通知を受信するステップと、ソケット状態を有するキュー識別子を記憶するステップと、データを消費するステップとを含む、アプリケーションがアプリケーションレベルネットワークキューイングを使用する方法が、実施例４９において開示される。
【０１７３】
実施例４９の方法を実施するための手段を備える装置が、実施例５０において開示される。
【０１７４】
方法を実施するための手段が、プロセッサおよびメモリを含む、実施例５０の装置が、実施例５１において開示される。
【０１７５】
メモリが、実行されると装置に実施例４９の方法を実施させる機械可読命令を含む、実施例５１の装置が、実施例５２において開示される。
【０１７６】
装置がコンピューティングシステムである、実施例５０〜５２のいずれかの装置が、実施例５３において開示される。
【０１７７】
実行されると、実施例４９〜５３のいずれかに記載の方法を実施するかまたは装置を実現する命令を含む、少なくとも１つのコンピュータ可読媒体が、実施例５４において開示される。
【符号の説明】
【０１７８】
２５  ポート
８０  ポート
１００  安全確保された企業
１０４  企業境界
１１０  クライアントデバイス、エンドポイントデバイス
１１２  クライアントアプリケーション
１２０  ユーザ
１４０  管理コンソール、サーバ
１４２  ワークロードクラスタ、ワークロードサーバ
１５０  セキュリティ管理者
１６０  エンドユーザ、顧客
１６２  エンドユーザアプリケーション
１７０  企業ネットワーク
１７２  外部ネットワーク
１８０  エンドユーザデバイス
２００  クライアントデバイス
２１０  プロセッサ
２２０  メモリ
２２２  オペレーティングシステム
２２４  クライアントエージェント
２４０  周辺インターフェース
２４２  ディスプレイアダプタ
２４４  オーディオドライバ
２４６  入出力ドライバ
２５０  ストレージ
２６０  ネットワークインターフェース
２７０−１  システムバス
２７０−３  メモリバス、ＤＭＡバス
３００  サーバ、サーバデバイス
３１０  コア、プロセッサ
３１０−０  コア０
３１０−１  コア１
３１０−２  コア２
３１０−３  コア３
３１０−４  コア４
３１０−５  コア５
３１０−６  コア６
３１０−７  コア７
３２０  メモリ
３２２  オペレーティングシステム
３２４  サーバエンジン
３２６  キューイングエンジン
３５０  ストレージ
３６０  ネットワークインターフェース
３７０−１  システムバス
３７０−３  メモリバス
４２０  ウェブサーバ
４２０−０  ウェブサーバスレッド
４２０−１  ウェブサーバスレッド
４２０−２  ウェブサーバスレッド
４２０−３  ウェブサーバスレッド
４３０  電子メールサーバ
４３０−０  電子メールサーバスレッド
４３０−１  電子メールサーバスレッド
４５０  キュー、  サポートアプリケーション  サポート機能
４５２  グループ
４５４  グループ
４６２  エンドユーザデバイス
６１０  物理層
６２０  データリンク層
６３０  ネットワーク層
６４０  トランスポート層
６５０  セッション層
６６０  プレゼンテーション層
６７０  アプリケーション層
７００  方法
８００  方法
９００  方法
１０００  方法
【図１】
0006513627.tif 000002
【図２】
0006513627.tif 000003
【図３】
0006513627.tif 000004
【図４】
0006513627.tif 000005
【図５】
0006513627.tif 000006
【図６】
0006513627.tif 000007
【図７】
0006513627.tif 000008
【図８】
0006513627.tif 000009
【図９】
0006513627.tif 000010
【図１０】
0006513627.tif 000011