(57)【要約】ネットワークを介する単一の接続を使用してソースアドレスから宛先アドレスへ送信されるデータをユーザアプリケーションから受信すること、及び通信プロトコルに従いこのデータを複数のパケットに分割することを備える方法が本明細書に開示される。複数のパケットの各パケットについて、送信されるパケットについてのそれぞれのフローレットは、複数のフローレットから決定され、パケットをルーティングするためにネットワークのネットワークスイッチにより使用されるパケット内のフィールドは、パケットについて決定されたフローレットに基づき設定され、パケットは、ネットワークを介して送信するために決定されたフローレットを介して送信される。【選択図】図１
2019503123.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるデータをユーザアプリケーションから受信し、
通信プロトコルに従い前記データを複数のパケットに分割し、
前記複数のパケットの各パケットについて、
送信される前記パケットについてのそれぞれのフローレットを複数のフローレットから決定し、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内にフィールドを、前記パケットについて前記決定されたフローレットに基づき設定し、
前記ネットワークを介して送信するために前記決定されたフローレットを介して前記パケットを送信する、
ことを備える、方法。
【請求項２】
前記通信プロトコルは、ユーザデータグラムプロトコル（ＵＤＰ）であり、前記パケットの前記ヘッダー内の前記フィールドは、ＵＤＰヘッダーのソースポートフィールドである、請求項１に記載の方法。
【請求項３】
前記パケットの前記ヘッダー内の前記フィールドは、ＩＰヘッダー内のソースＩＰアドレス、ＩＰヘッダー内の宛先ＩＰアドレス、ＩＰｖ６ヘッダー内のＦｌｏｗＩＤフィールド、またはマルチプロトコルラベルスイッチング（ＭＰＬＳ）ラベルである、いずれかの先行請求項に記載の方法。
【請求項４】
各パケットは、フローレットインデックスまたはパケットシーケンス番号のうちの少なくとも１つを含む、いずれかの先行請求項に記載の方法。
【請求項５】
各フローレットについてのアクティブパケットのシーケンス番号を維持することをさらに備える、いずれかの先行請求項に記載の方法。
【請求項６】
前記パケットの送信後に、または前記パケットが前記宛先アドレスで受信された確認を受信した後に、アクティブパケットの前記シーケンス番号からパケットの前記シーケンス番号を除去することをさらに備える、請求項５に記載の方法。
【請求項７】
送信される前記パケットについての前記フローレットを決定することは、
前記複数のフローレットの各フローレット内のアクティブパケット数を決定すること、
前記複数のフローレットの各フローレットのレイテンシを決定すること、
前記複数のフローレットの各フローレットの廃棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも１つを備える、先行請求項のいずれかに記載の方法。
【請求項８】
１つ以上の物理的なポートを介して前記ネットワークへ前記複数のフローレットの各フローレット内のパケットを送信することをさらに備える、先行請求項のいずれかに記載の方法。
【請求項９】
前記ネットワークへ前記複数のフローレットの各フローレット内の前記パケットを送信することは、各パケットが各パケットの前記ヘッダー内の情報に基づき送信される１つの物理的なポートを、複数の物理的なポートから選択することを備える、請求項８に記載の方法。
【請求項１０】
送信される前記パケットについての前記フローレットを決定することは、前記ユーザアプリケーションからの前記データ以外のデータについてのパケットの前記ヘッダー内の前記フィールド内に設定される値に基づく、先行請求項のいずれかに記載の方法。
【請求項１１】
各フローレット内のアクティブパケット数は、閾値未満であり、前記閾値は、ネットワーク輻輳に基づき調整可能である、先行請求項のいずれかに記載の方法。
【請求項１２】
フローレットについての前記元の経路が閾値を超えるレイテンシまたは廃棄率を有する判定に応答して、前記ネットワークを介して前記フローレット及びその関連したパケットを異なる経路へ割り当てることをさらに備える、先行請求項のいずれかに記載の方法。
【請求項１３】
処理ロジックと、
前記処理ロジックに結合され、これにより読み出し可能であるコンピュータ可読ストレージデバイスであって、前記処理ロジックが、
ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるメッセージをユーザアプリケーションから受信させ、
通信プロトコルに従い前記メッセージを複数のパケットに分割させ、
前記複数のパケットの各パケットについて、
送信される前記パケットについてのフローレットを複数のフローレットから割り当てさせ、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内のフィールドを前記割り当てられたフローレットに基づき設定させ、  前記ネットワークを介して送信するために前記割り当てられたフローレットを介して前記パケットを送信させる、インストラクションを含む前記コンピュータ可読ストレージデバイスと、
前記処理ロジックと結合され、これによりアクセス可能であり、パケットの複数のキューを格納するように構成されるメモリと、
前記ネットワークと通信する１つ以上の物理的なポートと、
を備え、
前記複数のパケットは、前記１つ以上の物理的なポートを介して前記ネットワークへ送信される、装置。
【請求項１４】
それぞれの前記１つ以上の物理的なポートは、一意のＩＰアドレスを有し、前記パケットの前記ヘッダー内の前記フィールドは、ＩＰヘッダーの前記ソースＩＰアドレスフィールドである、請求項１３に記載の装置。
【請求項１５】
前記装置は、システムオンチップ（ＳＯＣ）、プロセッサ、ネットワークインタフェースカード（ＮＩＣ）、スイッチ特定用途向け集積回路（ＡＳＩＣ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）のうちの１つを含む、請求項１３または請求項１４に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
データセンターなどのネットワーク環境において、一方のノードと他方のノードとの間のデータトラフィックは、非常に大量である可能性がある。したがって、ＩｎｆｉｎｉＢａｎｄ（ＩＢ）、ギガビットイーサネット、またはファイバチャネルなどの高速データ接続は、大量のデータトラフィックを取り扱うように設計される。しかしながら、これまでデータ量が増加しているため、接続についての帯域幅及びスループット要求が増加している状態で、これらの高速データ接続にさえ、ネットワーク内の輻輳の原因となる、過負荷をかける可能性がある。したがって、ネットワーク経由でのデータ転送のスループットをさらに向上させ、利用可能なネットワーク容量をより良く利用することによりネットワーク輻輳を回避することが望ましい。
【０００２】
本開示に従った多様な実施形態を、図面を参照して説明する。
【図面の簡単な説明】
【０００３】
【図１】データセンター環境についての例示的なネットワークアーキテクチャを示す。
【図２】高性能コンピューティング（ＨＰＣ）環境を示す。
【図３】ソースエンドポイントと宛先エンドポイントとの間のＩｎｆｉｎｉＢａｎｄネットワーク接続を示す。
【図４】ソースエンドポイントと宛先エンドポイントとの間のＩｎｆｉｎｉＢａｎｄ接続内のキューペア（ＱＰ）を示す。
【図５】マルチステージＣｌｏｓネットワークを示す。
【図６】データセンター環境のＣｌｏｓネットワークを示す。
【図７】ネットワークファブリックのトポロジーを示す。
【図８】ソースエンドポイントと宛先エンドポイントとの間のデータ通信についての複数のフローレットを示す。
【図９】ＵＤＰ／ＩＰパケットヘッダーを示す。
【図１０】ネットワークへ１つの物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントのブロック図を示す。
【図１１】ネットワークへ複数の物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントのブロック図を示す。
【図１２】ネットワークを介する複数のフローレットによる２つのエンドポイント間のデータ通信方法を示すフローチャートである。
【図１３】ネットワークアダプタデバイスのブロック図である。
【図１４】いくつかの実施形態に従い、１つ以上のネットワークを介して接続される１つ以上のサービスプロバイダコンピュータ及び／またはユーザデバイスを含む本明細書に記述される機能及びシステムについての例示的なアーキテクチャを示す。
【図１５】多様な実施形態を実装できる環境を示す。
【発明を実施するための形態】
【０００４】
以下の説明では多様な実施形態が説明される。説明の目的のため、特定の構成及び詳細が実施形態の完全な理解を提供するために記載される。しかしながら、本実施形態が特定の詳細なしに実施され得ることも当業者に明らかとなるだろう。さらに、周知の特徴は、説明されている実施形態を不明瞭にしないために省略され得る、または簡略化され得る。
【０００５】
本明細書に使用されるように、フローまたはデータフローは、いくつかの事例において、順にネットワークのトラバースを行う、関連したデータパケットのストリームを一般的に指す。ソースエンドポイント上のユーザアプリケーションは、ネットワークを介してユーザアプリケーションデータストリームを宛先エンドポイントへ送信することが望ましい可能性がある。データは、１つ以上のメッセージ、１つ以上のコマンド、または１つ以上のトランザクションであってもよい。いくつかの事例において、ソースエンドポイント及び宛先エンドポイントは、一意のＩＰアドレスを各有することができる。これらのような事例において、単一のＴＣＰまたはＵＤＰ接続においてソースＩＰアドレスから宛先ＩＰアドレスへ転送されることを意図されるユーザアプリケーションデータストリームは、データフローまたはフローと称されることができる。いくつかの他の事例において、複数のエンドポイントは、ＩＰアドレスを共有することができるため、エンドポイント間のユーザアプリケーションデータストリームは、１組のソース及び宛先ＩＰアドレス間のＩＰレベルデータストリーム内で多重化されることが可能である。これらの事例において、単一のＴＣＰまたはＵＤＰ接続においてソースＩＰアドレスから宛先ＩＰアドレスへ転送されることを意図される複数のエンドポイントからのユーザアプリケーションデータストリームは、データフローまたはフローと称されることができ、ソースＩＰアドレスは、複数のエンドポイントにより共有される。いくつかの他の事例において、エンドポイントは、複数のＩＰアドレスを含むことができ、ユーザアプリケーションデータストリームは、複数のＩＰアドレスを使用して複数の経路を通り送信されることを意図されることができる。これらの事例において、単一のＴＣＰまたはＵＤＰ接続においてソースＩＰアドレスから宛先ＩＰアドレスへ転送されることを意図される、ユーザアプリケーションデータストリームの各部分は、データフローまたはフローと称されることができる。
【０００６】
また本明細書に使用されるように、経路は、データパケットが２つのＩＰアドレス間のネットワークを経由するルートを一般的に指す。フローレットは、単一の経路を介して転送されるフローまたはデータフローと関連するパケットのグループを一般的に指す。
【０００７】
本開示の実施形態は、高速データ転送のための方法及びシステムを提供し、これらの方法及びシステムは、データセンター環境などの、ネットワーク環境内のさまざまな経路間の負荷を分散させ、イコールコストマルチパス（ＥＣＭＰ）ルーティングを支援することが可能であるため、データセンター、高性能コンピューティング（ＨＰＣ）、ストレージエリアネットワーク（ＳＡＮ）、またはローカルエリアネットワーク（ＬＡＮ）などの、アプリケーションについてのネットワーク容量のより良い使用率を達成することが可能である。
【０００８】
いくつかの、またはすべての方法は、実行可能インストラクションにより構成される１つ以上のコンピュータシステムの制御下で実行されることができ、ハードウェアまたはそれらの組み合わせにより、１つ以上のプロセッサ上で集合的に実行するコード（例えば、実行可能なインストラクション、１つ以上のコンピュータプログラム、または１つ以上のアプリケーション）として実装されることができる。コードは、例えば、１つ以上のプロセッサにより実行可能な複数のインストラクションを含むコンピュータプログラムの形式で、コンピュータ可読記憶媒体に格納されることができる。コンピュータ可読記憶媒体は、非一時的であることができる。
【０００９】
本明細書に記述される技術は、データフローのいくつかのパケットについてのパケットヘッダーに異なるソースポートを割り当てるような、データパケットヘッダー内でフィールドを操作することにより、ネットワークを介して異なる経路を各取る複数のフローレットに、２つのエンドポイント、または２つのＩＰアドレス間のデータフローを分割することを備えるため、パケットは、スイッチの異なる物理的なポートへルーティングされ、異なるＩＰアドレスを使用せずにスイッチングされたネットワークファブリックを通して異なる経路を取ることができる。フローレット数、及びフローレット内のパケット数を制御し、ネットワーク内の経路またはノードに過負荷をかけることを回避することができる。データフロー分割は、ユーザアプリケーションまたはホストが分割を認識することを不要であることができるように、ネットワークインタフェースカードまたはネットワークアダプタデバイスにおいて行われることができる。パケットは、順番に、または不順に宛先エンドポイントへ送達されることが可能である。異なるフローレットから宛先エンドポイントにより受信されるパケットは、パケットヘッダー内の情報に基づき宛先エンドポイントにおいてアプリケーションにより再順序付けされる、または再組み立てされることができる。
【００１０】
Ｉ．高速ネットワーク
以下の節は、データセンターなどの例示的な環境内の本開示のさまざまな実施形態を記述する。本明細書に記述される方法及びシステムがネットワークにおいてスイッチファブリックを通すデータ通信を伴ういずれかの他のアプリケーションにおいて使用されることができることを理解する。
【００１１】
データセンターは、スペース及び他のリソースの効率的な使用を行うために標準化されたアセンブリ（ラック）内に配置される複数のサーバを一般的に含む。各ラックは、１６、３２、６４、またはそれ以上のサーバなどの、複数のサーバを含むことができる。同一のラックのサーバと異なるラックからのサーバとの間の相互接続は、１つ以上のスイッチファブリックにより達成されることが可能である。スイッチファブリックは、アクセスレイヤ、アグリゲーションレイヤ、及びコアレイヤを含むことができる。アクセスレイヤは、同一のラック（トップオブラック、またはＴｏＲ）内に、またはエンドオブロー（ＥｏＲ）においてのいずれか一方でサーバに直接接続される、スイッチなどのデバイスを含むことができる。アグリゲーションレイヤは、アクセスレイヤドメイン間の接続性を提供するためにアクセスレイヤデバイスを集約する、スイッチなどのデバイスを含むことができる。コアレイヤは、データセンター内に、または外界に関する地理的位置にわたり、のいずれか一方で複数のアグリゲーションレイヤデバイスを相互接続する、ルーターなどのデバイスを含むことができる。
【００１２】
高性能コンピューティング、ビッグデータ、Ｗｅｂ２．０、及び検索アプリケーションは、リアルタイムに大量のユーザ生成データを管理し、理解し、これらに対応することにより決まる。より多くのユーザがより多くのアプリケーション及びプラットフォームを提供するにつれ、データは、もはや算術的に増加せずに、指数関数的に増加している。データの増加に追いつくために、データセンターは、データにアクセスし、これを分析することが可能である、データ容量及び速度の両方において、同様に増加させる必要がある。今日、スケーラブルなデータセンターは、ハードウェア構成（コンピュータのクラスタ、及びストレージ）、及びソフトウェア構成の両方において、並列インフラストラクチャを一般的に有し、最もスケーラブルで、エネルギー効率の高い、高性能相互接続インフラストラクチャを採用する。
【００１３】
図１は、データセンター環境についての例示的なネットワークアーキテクチャ１００を示す。ネットワークアーキテクチャ１００は、さまざまなデータセンター相互接続のために、複数のデータセンターサーバ１０２ａから１０２ｄ、及び１つ以上のスイッチファブリックを含むことができる。たとえば、図１に示されるように、サーバ１０２ａから１０２ｄは、高性能コンピューティング（ＨＰＣ）クラスタ１１８、ローカルエリアネットワーク（ＬＡＮ）１１６、またはストレージエリアネットワーク（ＳＡＮ）１１４へ、またはこれからデータを転送することができる。
【００１４】
各サーバ１０２ａから１０２ｄは、アクセスレイヤスイッチ１０４ａ、１０４ｂ、１０４ｃ、または１０４ｄと接続されることができる。各アクセスレイヤスイッチは、データが異なる入力ポートに入り、異なる出力ポートへスイッチングされることができるように、複数の物理的なポートを含むことができる。アクセスレイヤスイッチ障害の事例の冗長性について、データセンター環境のためのネットワークアーキテクチャは、冗長化サーバ及びアクセスレイヤスイッチ（示されない）も含むことができる。サーバ１０２ａから１０２ｄとアクセスレイヤスイッチ１０４ａから１０４ｄとの間の通信経路は、ＩｎｆｉｎｉＢａｎｄ、データセンターイーサネット（ＤＣＥ）、ギガビットイーサネット、ファイバチャネル、またはファイバチャネルオーバーイーサネット（ＦＣｏＥ）などの、データセンターブリッジングまたは別個のチャネルを支援することができる。
【００１５】
アクセスレイヤスイッチ１０４ａから１０４ｄは、アグリゲーションレイヤにおいてアグリゲーションレイヤスイッチと接続されることができる。さらに、各ネットワーククラウドについて少なくとも２つのアグリゲーションレイヤスイッチは、スイッチ障害の事例において冗長性のために使用されることができる。たとえば、アグリゲーションレイヤスイッチ１０６ａ及び１０６ｂは、たとえば、コアレイヤ１１２を介して、アクセスレイヤスイッチ１０４ａ及び１０４ｂとＨＰＣ１１８との間のルーティングのためにＨＰＣ互換性であることができる。アクセスレイヤスイッチ１０４ａ及び１０４ｂとアグリゲーションレイヤスイッチ１０６ａ及び１０６ｂとの間の通信経路は、高速データ転送のためにＩｎｆｉｎｉＢａｎｄ接続であることができる。アグリゲーションレイヤスイッチ１０８は、アクセスレイヤスイッチ１０４ｃとＳＡＮ１１４との間のデータをルーティングするために使用されることができる。アクセスレイヤスイッチ１０４ｃとアグリゲーションレイヤスイッチ１０８とＳＡＮ１１４との間の通信経路は、ファイバチャネル（ＦＣ）であることができる。アグリゲーションレイヤスイッチ１１０は、アクセスレイヤスイッチ１０４ｄとＬＡＮ１１６との間のルーティングのために提供することができる。ギガビットイーサネットまたはデータセンターイーサネットは、アクセスレイヤスイッチ１０４ｄをアグリゲーションレイヤスイッチ１１０及びＬＡＮ１１６と接続するために使用されることができる。
【００１６】
ＨＰＣシステムは、気候研究、分子モデリング、物理的なシミュレーション、暗号解読、地球物理学的モデリング、自動車及び航空宇宙機の設計、金融モデリング、及びデータマイニングなどの、高度な計算集約型タスクのより高速な実行を可能にする、並列処理を越える先進的な計算を実行する。所与の計算の実行時間は、中央処理装置（ＣＰＵ）またはグラフィックプロセッシングユニット（ＧＰＵ）コアの数、及びそれらの使用率、ならびに相互接続の性能、効率、及びスケーラビリティなどの、多くの要因に依存する。効率的なＨＰＣシステムは、数千のマルチプロセッサノードと高速ストレージシステムとの間の高帯域幅、低レイテンシ接続を一般的に用いる。
【００１７】
ＩｎｆｉｎｉＢａｎｄ（ＩＢ）は、高性能コンピューティングにおいて使用される、非常に高いスループット、及び非常に低いレイテンシを備えるコンピュータネットワーキング通信規格である。それは、コンピュータまたはサーバ間、及びこれらの内の両方でデータ相互接続のために使用されることが可能である。またＩｎｆｉｎｉＢａｎｄは、サーバとストレージシステムとの間の直接相互接続、またはスイッチングされた相互接続のいずれか一方として使用されることが可能である。ゼロコピー及びリモートダイレクトメモリアクセス（ＲＤＭＡ）などの、ＩｎｆｉｎｉＢａｎｄの特徴は、送信側メモリから受信側メモリへホストプロセッサを伴わずにデータを直接に転送することによりプロセッサオーバーヘッドを削減することを支援する。またＩＢインタフェースは、ＩｎｆｉｎｉＢａｎｄより低レベルの異なるインフラストラクチャを使用し、ＩｎｆｉｎｉＢａｎｄよりさらにスケーラブルである、ＲＤＭＡオーバーイーサネット（ＲｏＣＥ）において使用されることが可能である。
【００１８】
ＩｎｆｉｎｉＢａｎｄアーキテクチャは、処理ノード、ストレージノード、及びＩ／Ｏノードを相互接続するためにスイッチングされたネットワークファブリックを定義する。ＩｎｆｉｎｉＢａｎｄネットワークは、スイッチ、ホストチャネルアダプタ（ＨＣＡ）またはターゲットチャネルアダプタ（ＴＣＡ）などのアダプタ、及び通信用のリンクを含むことができる。通信のために、ＩｎｆｉｎｉＢａｎｄは、転送サービス（信頼性のある接続、信頼性のない接続、信頼性のあるデータグラム、及び信頼性のないデータグラム）のいくつかの異なるクラスを支援する。
【００１９】
図２は、ＩｎｆｉｎｉＢａｎｄファブリック２１０を使用して高性能コンピューティング（ＨＰＣ）環境２００を示す。ＩｎｆｉｎｉＢａｎｄファブリック２１０は、シリアルポイントツーポイントリンクのスイッチングされたファブリックアーキテクチャに基づき、ＩｎｆｉｎｉＢａｎｄリンクは、サーバもしくはプロセッサノード内で主に使用されるホストチャネルアダプタ（ＨＣＡ）、またはストレージサブシステムもしくはＩ／Ｏシャーシ内で主に使用されるターゲットチャネルアダプタ（ＴＣＡ）のいずれか一方に接続されることが可能である。図２に示されるように、ＩｎｆｉｎｉＢａｎｄファブリック２１０は、ファットツリーネットワークまたはＣｌｏｓネットワークなどの、階層化ネットワークに配置されることができる、複数のスイッチ２０４ａから２０４ｄを含む。スイッチ２０４ａから２０４ｄは、複数のノード２０２ａから２０２ｈに接続され、いずれか２つのノード間に複数の経路を提供することができる。いくつかの事例において、２つのノード間の経路数は、１０００超、１０，０００超、１００，０００超、または１，０００，０００超であることができる。ノード２０２ａから２０２ｈは、ホストシステム、プロセッサノード、ストレージサブシステム、及びＩ／Ｏシャーシのいずれかの組み合わせであることができる。またＩｎｆｉｎｉＢａｎｄファブリック２１０は、他のＩｎｆｉｎｉＢａｎｄサブネット、ＬＡＮ、ワイドエリアネットワーク（ＷＡＮ）、またはインターネットなどの、他のネットワーク２０８との接続のために１つ以上のルーターを含むことができる。
【００２０】
相互接続されたスイッチ２０４ａから２０４ｄ及びルーター２０６は、存在する場合に、スイッチファブリック、ファブリック、ネットワークファブリック、または単にネットワークと称されることができる。用語「ファブリック」、及び「ネットワーク」は、本明細書において互換的に使用されることができる。
【００２１】
ＩｎｆｉｎｉＢａｎｄまたはＲｏＣＥ動作は、通信ハードウェアにより実行されるインストラクションをキューに入れる機能に基づく。送信動作についての作業キュー、及び受信動作についての作業キューがあることができる。送信キューは、データが要求側メモリと受信側メモリとの間で転送される方法を決定するインストラクションを含むことができる。受信キューは、受信されたデータをどこに格納するかについてのインストラクションを含むことができる。要求を提示する場合に、そのインストラクションは、先入れ先出し（ＦＩＦＯ）などの順番に実行されることができる、適切な作業キューに配置される。
【００２２】
ホストチャネルアダプタは、ローカルチャネルインタフェースを表すことができる。チャネルインタフェースは、ＩｎｆｉｎｉＢａｎｄサービスをホストに提供する、ハードウェア、ファームウェア、及びソフトウェアを含むことができる。送信動作の事例において、チャネルアダプタは、作業タイプを解釈し、メッセージを作成し、それを複数のパケットにセグメント化し（必要な場合）、ルーティング情報を追加し、これらのパケットをポートロジックへ送信する。ポートロジックは、その宛先へファブリックを介するリンクにわたりパケットを送信するために応答可能である。パケットが宛先に到達したときに、受信ポートロジックは、パケットを検証し、チャネルアダプタは、受信キュー内の宛先に受信したパケットを入れ、それらを処理する。要求される場合に、チャネルアダプタは、肯定応答（ＡＣＫ）を作成し、このＡＣＫをソースホストへ返送することができる。
【００２３】
送信作業キュー（ＳＱ）及び受信作業キュー（ＲＱ）は、通信−キューペア（ＱＰ）について一意のエンティティを作成するために組にされることが可能である。ＱＰは、アプリケーションとデバイスとの間の直接メモリ間転送を介して通信を達成するメモリベースの抽象化である。アプリケーションは、キューペアを共有しない。ＱＰは、ＨＣＡのホスト側に実装されるメッセージ転送エンジンであることができ、双方向である。それは、アダプタリソースをユーザまたはアプリケーション専用にし、データ送受信動作用にカーネルをバイパスするために使用されることが可能である。ＱＰの送信キュー及び受信キューを使用して、ＨＣＡへ作業キュー要素（ＷＱＥ）内のメッセージをバッファに格納し渡す。各ＱＰはチャネルアダプタにより割り当てられるキューペア番号（ＱＰＮ）を含む。ＱＰＮは、チャネルアダプタ内のＱＰを一意的に識別する。
【００２４】
図３は、ソースエンドポイント３０２ａと宛先エンドポイント３０２ｂとの間のＩｎｆｉｎｉＢａｎｄネットワーク接続のブロック図３００を示す。ソースエンドポイント３０２ａは、複数のアプリケーション３０４ａ、カーネル３０６ａ、及びネットワークインタフェースカード（ＮＩＣ）またはアダプタ３０８ａを含むことができる。各アプリケーション３０４ａは、送信される、または受信されるメッセージを格納するためにそれと関連するバッファ３１０ａを含むことができる。同様に、宛先エンドポイント３０２ｂは、複数のアプリケーション３０４ｂ、カーネル３０６ｂ、及びネットワークインタフェースカード（ＮＩＣ）またはアダプタ３０８ｂを含むことができる。各アプリケーション３０４ｂは、送信される、または受信されるメッセージを格納するためにそれと関連するバッファ３１０ｂを含むことができる。ＱＰは、ＩｎｆｉｎｉＢａｎｄファブリック３５０を介して、ソースエンドポイント３０２ａ上のアプリケーション３０４ａと、宛先エンドポイント３０２ｂ上のアプリケーション３０４ｂとの間に作成されることが可能である。
【００２５】
ＱＰを作成した後に、メッセージは、リモートデータメモリアクセス（ＲＤＭＡ）を使用してソースエンドポイント３０２ａから宛先エンドポイント３０２ｂへ送信されることができる。ＲＤＭＡは、ＩｎｆｉｎｉＢａｎｄファブリック上のサーバが直接に別のサーバのメモリにアクセスすることを可能にする。ＲＤＭＡのアプリケーションの実施例は、データベースサーバクラスタである。データベースサーバクラスタは、ＲＤＭＡエージェントをそのコア機能に追加することができ、ＲＤＭＡエージェントは、異なるノード上で実行する２つのデータベースインスタンスが相互と直接通信することを可能にし、すべてのカーネルレベルの通信動作をバイパスするため、永続ストレージからクラスタノードのＲＡＭメモリにデータをコピーする回数を減少させる。ＲＤＭＡ動作は、ローカルバッファ、ピアバッファのアドレス、及びリモートピアバッファの操作のためのアクセス権を指定することができる。
【００２６】
図４は、ソースエンドポイント上のクライアントアプリケーションまたはプロセス４０２ａと、宛先エンドポイント上のリモートアプリケーションまたはプロセス４０２ｂとの間のＩｎｆｉｎｉＢａｎｄ接続内のキューペアを示す。ＩｎｆｉｎｉＢａｎｄは、実行作業キューの使用を通してソフトウェアクライアントからトラフィック制御をオフロードする。クライアントは、作業キューを開始し、つぎにＩｎｆｉｎｉＢａｎｄに作業キューの管理を任せる。デバイス間の各通信チャネルのために、作業キューペア（ＷＱＰ）を各エンドに割り当てることができる。たとえば、クライアントプロセス４０２ａは、トランザクションを作業キューエントリまたは要素（ＷＱＥ）４０４ａ内に配置することができ、トランザクションは、つぎにＱＰ４１０ａ内の送信キュー４１６ａからのソースチャネルアダプタ４０８ａにより処理され、宛先エンドポイント上のリモートプロセス４０２ｂへ送信される。送信キュー４１６ａ内のデータは、転送エンジン４１２ａにより処理され、ソースチャネルアダプタ４０８ａのポート４１４ａを介してＩｎｆｉｎｉＢａｎｄファブリック４５０へ送信されることができる。つぎにデータは、ポート４１４ｂを介して宛先チャネルアダプタ４０８ｂにより受信され、転送エンジン４１２ｂにより処理され、受信キュー４１８ｂ内に入れられることができる。宛先エンドポイントが応答したときに、宛先チャネルアダプタ４０８ｂは、完了キューエントリまたはイベント（ＣＱＥ）４０６ａを介してクライアントプロセス４０２ａへステータスを返す。ソースエンドポイントは、複数のＷＱＥをポスティングすることができ、ソースチャネルアダプタ４０８ａは、各通信要求を処理することができる。ソースチャネルアダプタ４０８ａは、適切な優先順位で各ＷＱＥについてのステータスを提供する完了キューエントリ（ＣＱＥ）４０６ａを生成することができる。これは、トランザクションを処理しながら、ソースエンドポイントが他のアクティビティを継続することを可能にする。
【００２７】
同様に、リモートプロセス４０２ｂは、トランザクションをＷＱＥ４０４ｂ内に配置することができ、つぎにトランザクションは、ＱＰ４１０ｂ内の送信キュー４１６ｂから宛先チャネルアダプタ４０８ｂにより処理され、ソースエンドポイント上のクライアントプロセス４０２ａへ送信される。送信キュー４１６ｂ内のデータは、転送エンジン４１２ｂにより処理され、宛先チャネルアダプタ４０８ｂのポート４１４ｂを介してＩｎｆｉｎｉＢａｎｄファブリック４５０へ送信されることができる。つぎにデータは、ポート４１４ａを介してソースチャネルアダプタ４０８ａにより受信され、転送エンジン４１２ａにより処理され、受信キュー４１８ａ内に入れられることができる。ソースエンドポイントは、ＣＱＥ４０６ｂを介するリモートプロセス４０２ｂへステータスを返すことにより応答することができる。
【００２８】
ＩｎｆｉｎｉＢａｎｄファブリック４５０は、図２に説明されるように、ファブリック２１０などのファブリックであることができる。スパニングツリープロトコルを使用して構築されるネットワーク、またはレイヤ３ルーティングコアネットワークにおいて、単一の「最適な経路」は、１セットの代替の経路から通常選択される。すべてのデータトラフィックは、「最適な経路」が輻輳して、パケットを廃棄するポイントまでその「最適な経路」を取る。代替の経路は、ループを形成することを防止するために、トポロジーアルゴリズムがそれらをあまり望ましくないと、またはそれらを除去したとみなすことができるために利用されない。すべての利用可能なリンクを引き続き使用して、ループフリートポロジーを維持しながら、スパニングツリーを使用することから移行して離れることが望ましい。
【００２９】
長年にわたり、さらに広範囲でＣｌｏｓまたは「ファットツリー」ネットワークを使用している。Ｃｌｏｓネットワークは、マルチステージスイッチングネットワークである。このようなネットワークの利点は、小型スイッチのみを使用することにより多数の入力及び出力ポート間の接続を行うことが可能であり、ネットワークを容易に拡張することが可能であることである。ポート間の２部マッチングは、すべてのステージでスイッチを構成することにより行われることが可能である。
【００３０】
図５は、３ステージＣｌｏｓネットワーク５００の実施例を示す。Ｃｌｏｓネットワーク５００は、ｒ  ｎ×ｍイングレスステージクロスバースイッチ５０２ａから５０２ｄ、ｍ  ｒ×ｒ中間ステージクロスバースイッチ５０４ａから５０４ｅ、及びｒ  ｍ×ｎイーグレスステージクロスバースイッチ５０６ａから５０６ｄを含む。図５において、ｎは、各ｒイングレスステージクロスバースイッチ５０２ａから５０２ｄ上の入力ポート数を表し、ｍは、各ｒイングレスステージクロスバースイッチ５０２ａから５０２ｄ上の出力ポート数を表す。各イングレスステージスイッチと各中間ステージスイッチとの間に１つの接続、及び各中間ステージスイッチと各イーグレスステージスイッチとの間に１つの接続がある。ｍ≧ｎに関して、Ｃｌｏｓネットワークは、クロスバースイッチのようにノンブロッキングであることが可能である。
【００３１】
図６は、データセンター内で使用される折り返しＣｌｏｓネットワーク６００の実施例を示す。Ｃｌｏｓネットワーク６００は、トップオブラック（ＴｏＲ）スイッチ６０４ａ及び６０４ｂ、ならびにスパインスイッチ６０６を含む。ＴｏＲスイッチ６０４ａ及び６０４ｂは、リーフスイッチであり、スパインスイッチ６０６に接続される。リーフスイッチ６０４ａは、図５においてクロスバースイッチ５０２ａから５０２ｄとしてイングレススイッチと称されることができ、リーフスイッチ６０４ｂは、図５においてクロスバースイッチ５０６ａから５０６ｄとしてイーグレススイッチと称されることができる。リーフスイッチ６０４ａ及び６０４ｂは、複数のサーバ６０２に接続されることができる。スパインスイッチ６０６は、リーフスイッチ６０４ａ及び６０４ｂに接続する。リーフスイッチ６０４ａ及び６０４ｂは、相互に直接的に接続されないが、スパインスイッチ６０６を介して間接的に接続される。このスパイン−リーフアーキテクチャにおいて、リーフスイッチからのアップリンク数は、スパインスイッチ数に等しく、スパインスイッチからのダウンリンク数は、リーフスイッチ数に等しい。接続の総数は、リーフスイッチ数にスパインスイッチ数を乗算する、たとえば、図６において８×６＝４８リンクである。
【００３２】
Ｃｌｏｓネットワーク６００において、すべての下位層スイッチ（リーフスイッチ）は、フルメッシュ型トポロジー内の各最上位層スイッチ（スパインスイッチ）に接続される。下位層スイッチとそれらのアップリンクとの間で行われるオーバーサブスクリプションがない場合に、つぎにノンブロッキングアーキテクチャを達成することが可能である。１セットの同一で、安価なスイッチを使用して、ツリーを作成し、本来であれば構築するためにはるかにコストがかかる高性能及び復元力を得ることが可能である。
【００３３】
Ｃｌｏｓネットワーク６００は、より大規模なネットワークを構築するために容易に拡張されることができる。たとえば、図７は、コアスイッチまたはルーター７０２の追加のレイヤを使用して２つ以上のＣｌｏｓネットワーク６００を接続することによるデータセンター環境内のマルチステージＣｌｏｓネットワーク７００を示す。Ｃｌｏｓネットワーク７００は、リーフまたはアクセスレイヤ７０４、スパインまたはアグリゲーションレイヤ７０６、及びコアレイヤ７０８を含むことができる。
【００３４】
図６または図７に示されるようなＣｌｏｓネットワーク内の経路は、トラフィック負荷をスパインまたはコアスイッチ間で均等に分散させることが可能であるようなルーティング技術を使用してスイッチまたはルーターのポートを選択することにより選択されることが可能である。スパインまたはコアスイッチのうちの１つに障害が発生する場合に、それは、データセンターの全体のパフォーマンスをわずかに低下させる可能性がある。
【００３５】
ＩＩ．マルチパスルーティング
ルーティングは、ネットワークにおいてソースノードから宛先ノードへのデータ転送について最適な経路を選択するプロセスである。ルーティング技術の実施例は、イコールコストマルチパス（ＥＣＭＰ）ルーティングである。ＥＣＭＰは、実質的に均等に分散されたリンク負荷共有または負荷分散を達成することを目的に等コストの複数の経路沿いにパケットをルーティングするための転送メカニズムである。ＥＣＭＰは、ネットワークにおいてソースノードから宛先ノードへ複数の等コスト経路の使用を可能にする。この利点は、より均等にネットワーク全体へデータトラフィックを分散させ、輻輳を回避し、帯域幅を広げることが可能であることである。またＥＣＭＰは、リンク障害中に、トラフィックの重大な損失なしで別の等コスト経路へトラフィックフローを迅速に転送することが可能であることから、保護方法である。ＥＣＭＰに関して、ルーターの転送レイヤ内の負荷分散テーブルに等コスト経路を格納することが可能である。リンク障害の検出時に、１秒以内に、トラフィックの重大な損失なしで残りの等しい経路間にデータトラフィックを分散させることが可能である。
【００３６】
ＥＣＭＰは、いずれかの特別な構成を使用しない。開放型最短経路優先（ＯＳＰＦ）技術などの最短経路優先（ＳＰＦ）技術を使用して、等コスト経路を計算することが可能であり、つぎにこれらの経路を転送レイヤに通知することが可能である。ルーターは、データフローを識別するパケットヘッダーフィールド経由で、１６ビット巡回冗長検査（ＣＲＣ−１６）などの、ハッシュを実行することによりキーを最初に選択することができる。ネットワークにおいてネクストホップは、キースペース内に一意の領域を割り当てられることができる。ルーターは、キーを使用して、どの領域、したがってどのネクストホップを使用するかを（及びどのポートをスイッチまたはルーター上のネクストホップへ接続するかを）決定することができる。
【００３７】
ＥＣＭＰは、発信インタフェースの帯域幅内のいかなる違いも考慮しない。さらに、データセンター環境内の現在のＥＣＭＰルーティングについて、ハッシュ関数は、同一のフローについて同一のハッシュ値を得るほとんどの、またはすべてのデータセンターノードにつながることができる。したがって、同一の経路は、データセンター環境内のフローにパケットをルーティングするために使用されることができ、他の代替の経路は、十分に利用されていない可能性がある。
【００３８】
マルチパスルーティングは、ネットワークパフォーマンスを向上させ、フォールトトレランスを提供するためのメカニズムである。マルチパスＴＣＰ（ＭＰＴＣＰ）などのネットワーク内の負荷分散、及びＩｎｆｉｎｉＢａｎｄ内のマルチパス化のためのいくつかのマルチパス技術がある。
【００３９】
ＴＣＰ／ＩＰにおいて、一般的にパケットを順に送達する。したがって、異なる経路上の遅延が異なる可能性があるためにインオーダー送達を確実にしながら、異なる経路上のＴＣＰ／ＩＰを使用して、メッセージを複数のパケットに分割し、パケットを送信することは、困難である。ＭＰＴＣＰは、実際にいくつかのサブフローにわたりデータを拡散させながら、アプリケーションへ通常のＴＣＰインタフェースであるようにみえるＴＣＰの変更により、いくつかのＩＰアドレス／インタフェースを同時に使用する。この利点は、より良いリソース使用率、より良いスループット、及び障害へのより円滑な対応を有する。マルチパスＴＣＰは、無線ネットワークのコンテキストにおいて特に有用である。スマートフォンは、セルラネットワーク、Ｗｉ−Ｆｉネットワーク、及び場合によりＢｌｕｅｔｏｏｔｈまたはＵＳＢポートを介する他のネットワークへ別個で、同時のインタフェースを有することができる。それぞれのこれらのネットワークは、リモートホストへ到達する可能性がある方式を提供する。スループット内のゲインに加えて、エンドツーエンドＴＣＰ接続を中断させることなく、ユーザがネットワークカバレッジ内で、またはこの外で移動する場合に、リンクを追加する、または廃棄することができる。しかしながら、ＭＰＴＣＰ内の各サブフローは、異なるソースまたは宛先ＩＰアドレスを使用することができる。
【００４０】
ＩｎｆｉｎｉＢａｎｄ内のマルチパス化は、エンドポイントへ複数のローカル識別子（ＬＩＤ）を割り当てることにより達成されることができる。メッセージパッシングインタフェース（ＭＰＩ）などの上位レベルプロトコルは、複数の経路（ＭＰＩマルチレイリングと称される）間でデータを分割する（メッセージをいくつかのチャンクに分割する）こと、及びこれを送信することにより複数のＬＩＤを利用することが可能である。ＩｎｆｉｎｉＢａｎｄ規格は、ネットワークの開発、構成、及びメンテナンスのために応答可能である、サブネットマネージャと言われるエンティティを定義する。ネットワーク内の各ＩｎｆｉｎｉＢａｎｄポートは、サブネットマネージャにより割り当てられる、１つ以上のＬＩＤにより識別される。サブネット内の各デバイスは、サブネットマネージャによりそれに割り当てられる１６ビットＬＩＤを有することができる。サブネット内に送信されるパケットは、アドレスを指定するためにＬＩＤを使用する。各ポートは、複数のＬＩＤを割り当てられ、ネットワーク内に複数の経路を利用することが可能である。またＩｎｆｉｎｉＢａｎｄは、ＬＩＤマスクコントロール（ＬＭＣ）と言われるメカニズムを提供する。ＬＭＣは、ＬＩＤの最下位バイトをマスキングすることにより、複数の論理ＬＩＤを単一の物理的なポートと関連付ける方式を提供する。スイッチにおいてパケットを受信するときに、宛先ＬＩＤの８個の最下位ビットは、ＬＭＣによりマスキングされ、無視されることができる。したがって、異なる最下位バイトを含むいくつかのＬＩＤを同一のポートへ割り当てることは、同一ペアのノード間にいくつかの経路を確立することを可能にする。
【００４１】
上記に説明されるように、ルーティングアルゴリズムは、パケットヘッダー内の選択されたフィールド経由でハッシュを計算することができる。一般的に、ＩＰヘッダー内のソース及び宛先アドレスをルーティングのために使用する。ＩＰヘッダーのサービスフィールドのプロトコルフィールド及びタイプ、マルチプルアクセス制御（ＭＡＣ）レイヤのソースアドレス及び宛先レイヤ、またはソース及び宛先ポートも使用することができる。
【００４２】
ポートは、ポート番号により識別されるソフトウェア構造である。ポートは、ホストのＩＰアドレス、及び通信のプロトコルタイプと一般的に関連し、通信セッションの宛先またはソースアドレスの一部を形成する。ポートは、１６ビットポート番号により各アドレス及びプロトコルのために一般的に識別される。ホスト上のアプリケーションは、データグラムソケットを使用して、ホスト間通信を確立することができる。アプリケーションは、ＩＰアドレス及びサービスポートの組み合わせであることができる、ソケットをデータ伝送のそのエンドポイントにバインディングすることができる。
【００４３】
ソース及び宛先アドレスならびに宛先ポートなどの、ハッシュ計算のために使用されるいくつかのフィールドは、固定されることができ、パケット送達のために変更されることが不可能である。いくつかの他のフィールドは、しかしながら、任意選択であり、変更されることができ、パケットをルーティングする経路に影響を与えることができるが、パケットの安全な送達に影響を与えないことができる。したがって、これらのようなフィールドは、同一のソースＩＰアドレス、宛先ＩＰアドレス、及び宛先ポートを含むパケットが異なる経路上に送達されることができるように、異なるパケットについて異なって変更されることができる。
【００４４】
図８は、ソースエンドポイント８０２ａと宛先エンドポイント８０２ｂとの間のデータ通信についての複数の経路８１０を示す。図８に示されるように、宛先アドレスへのソースコンテキストデータ８０４ａは、複数のフローレット８０６ａに分割されることができ、各フローレット内のパケットは、同一のパケットヘッダーを含むことができるため、同一の経路を通してルーティングされることができる。異なるフローレット内のパケットは、同一のソースＩＰアドレス、宛先ＩＰアドレス、及び宛先ポートを含むことができるが、パケットヘッダーの特定のフィールド内で異なる値を有することができ、パケットヘッダーの特定のフィールド内のこれらの値は、ルーティングのために使用される。したがって、異なるフローレット８０６ａ内のパケットは、ネットワーク８５０を介して異なる経路８１０を取ることにより、同一のソースＩＰアドレス上の同一の物理的なポート８０８ａから、同一の宛先ＩＰアドレス上の同一の物理的なポート８０８ｂ及び異なるフローレット８０６ｂへ移動することができる。トランスポート層プロトコルとしてＵＤＰを使用して、ソースノードと宛先ノードとの間の複数のフローレット通信の実施例を以下に記述する。
【００４５】
ＵＤＰは、最低限のメッセージ指向トランスポート層プロトコルである。ＵＤＰは、最低限のプロトコルメカニズムを有するコネクションレス型伝送モデルを使用する。それは、ハンドシェイクダイアログを含まないため、ユーザのプログラムへ基本的なネットワークプロトコルのいずれかの信頼性の欠如を公開する。ＵＤＰは、メッセージ送達のための上位レイヤプロトコルへギャランティを提供せず、ＵＤＰレイヤは、送信されるとＵＤＰメッセージの状態を保持しない。送達、順序付け、または重複保護のギャランティがない。
【００４６】
ＵＤＰに関して、コンピュータアプリケーションは、特別な伝送チャネルまたはデータ経路をセットアップする事前の通信なしで、インターネットプロトコル（ＩＰ）ネットワーク上の他のホストへ、データグラムと言われるメッセージを送信することが可能である。ＵＤＰは、データグラムのソース及び宛先に異なる機能のためのポート番号を使用する。ＵＤＰは、エラーチェック及び修正が不要であるか、アプリケーション内で実行されることが可能であるかのいずれか一方であるアプリケーションに適しているため、ネットワークインタフェースレベルにおけるこのような処理のオーバーヘッドを回避する。タイムセンシティブアプリケーションは、パケットの廃棄が遅延したパケットの待機より好ましいため、ＵＤＰをよく使用し、ＵＤＰは、リアルタイムシステムにおいて任意選択ではない可能性がある。
【００４７】
図９は、ＵＤＰ／ＩＰパケットヘッダー９００を示す。ソースアドレス９０２及び宛先アドレス９０４は、ＩＰヘッダー内に含まれる。ＵＤＰヘッダーは、４つのフィールドを含み、各フィールドは、２バイト（１６ビット）である。宛先ポートフィールド９０８は、受信側ポートを特定し、要求される。宛先ポートフィールド９０８は、プロトコルをＵＤＰフレーム内にカプセル化することを一般的に示す。
【００４８】
ソースポートフィールド９０６は、有意であるときに送信側ポートを識別し、必要であれば応答するポートであるとみなす。使用されない場合に、ソースポートフィールド９０６は、０に設定されることができる。ソースホストがクライアントである場合に、ソースポート番号は、エフェメラルポート番号である可能性がある。ソースホストがサーバである場合に、ソースポート番号は、周知の、または矛盾なく定められた、ポート番号である可能性がある。
【００４９】
チェックサムフィールド及びソースポートフィールド９０６の使用は、インターネットプロトコルバージョン４（ＩＰｖ４）において任意選択である。インターネットプロトコルバージョン６（ＩＰｖ６）において、ソースポートフィールド９０６のみが任意選択である。
【００５０】
上記に説明されるように、ＵＤＰは、インオーダー送達を保証しない。したがって、異なる経路を通る通信において異なるパケットをルーティングすることがアウトオブオーダー送達の原因となる可能性があっても、このようなアウトオブオーダー送達を少なくともＵＤＰプロトコルにおいて予期する。さらに、またＥＣＭＰの使用は、ＥＣＭＰを使用せずにＵＤＰと比較して再順序付けすることを増加させることができる。したがって、本開示の実施形態は、ＵＤＰプロトコルを使用するものなどの、順序付けする必要がないアプリケーションにより良く適合される。いくつかの実施形態において、ＵＤＰポートがプロトコルを検出するためにのみ使用され、エンドポイントＩＰアドレスにより一般的に決定される、エンドユーザアプリケーションへのパケットの送達のために使用されないため、ＵＤＰヘッダー内のソースポートフィールド９０６を変更し、異なる経路への通信に際して異なるパケットをルーティングすることが可能である。宛先ノードにおいて受信されるパケットは、たとえば、以下に記述されるような緩和され信頼性のあるデータグラム（ＲＲＤ）転送サービスを使用して、パケット内の情報に基づき、宛先ノード上のアプリケーションにより再順序付けされる、または組み立てられることができる。
【００５１】
いくつかの実施形態において、複数のフローレットを使用する１つのフローのマルチパスデータ転送は、異なるソースＩＰアドレス（ソースエンドポイントが複数のＩＰアドレスを含む場合に）、もしくは異なる宛先ＩＰアドレス（宛先エンドポイントが複数のＩＰアドレスを含む場合に）を使用することにより、ＩＰｖ６ヘッダー内のＦｌｏｗＩＤフィールドを使用することにより、またはマルチプロトコルラベルスイッチング（ＭＰＬＳ）ラベルを使用することにより、トンネリングを介して達成されることができる。
【００５２】
ＩＩＩ．実施例
リモートダイレクトメモリアクセス（ＲＤＭＡ）カードにより提供される基本的な転送サービスは、信頼性のないデータグラム（ＵＤ）である。ＨＰＣデータパスのためにＵＤを使用することは、比較的にあまりみられない。ＵＤは、通常、パケットが破損されない限り、パケットを廃棄しないロスレスファブリックに依存する。別の共通転送サービスタイプは、信頼性のある接続（ＲＣ）である。ＲＣは、信頼性のあるインオーダー送達を提供するが、それは、スケーラブルではない。特に、ＲＣは、通信スレッドの各組について別個の接続を要求する。
【００５３】
大規模なシステムについての「理想的な」ソリューションは、信頼性のあるデータグラム（ＲＤ）であり、ＲＤは、各スレッドについて単一の要求キュー、及び１組の通信ノード間の単一の接続を使用する。既存のＩｎｆｉｎｉＢａｎｄ  ＲＤ規格は、その仕様における多くの問題により使用不可能である。別の既存のＲＤのような部分的なソリューションは、拡張された信頼性のある接続（ＸＲＣ）であり、ＸＲＣは、非常に複雑であり、それが廃棄されたパケットに関連しないパケットの送達を遅延させる可能性があるため、パケット廃棄の事例において最適なレイテンシを提供しない。
【００５４】
インオーダー送達は、パケット廃棄の事例において、スケーラビリティを制限する、または平均レイテンシを増加させる可能性がある。エンドポイント間フローレベルにおいてシーケンス番号を保持することは、使用されるスペース、及び接続管理オーバーヘッドのためにスケーラブルではない。多重化されたノード間接続レベルにおけるシーケンス番号は、損失した、または重複したパケットを検出するために十分な情報を提供することができるが、集約された接続においてアウトオブオーダーである到達するパケットがエンドポイント間フローにおいて実際にアウトオブオーダーであるかどうかを判定するために十分な情報を提供しない可能性がある。ホストへ集約された接続においてアウトオブオーダーである到達するパケットの送達を延期する場合に、欠落するパケットが再送信されるまで、またはアウトオブオーダーパケットが到達するまで、多くのパケットを遅延させる可能性があるため、大規模な中間バッファスペースは、望ましい可能性があり、平均レイテンシは、大幅に増大する可能性がある。これらのほとんどの、またはすべての遅延したパケットは、損失したパケットに、またはアウトオブオーダーパケットに関連しないことがあるため、このような遅延は、必要ではない可能性がある。アウトオブオーダーパケットの廃棄は、バッファリング問題を解決することができるが、レイテンシ問題を解決しない可能性があり、ネットワーク帯域幅消費量を増加させる可能性がある。
【００５５】
緩和され信頼性のあるデータグラムは、簡単なＵＤのようなインタフェースを含むが、パケット損失からトランスペアレントリカバリを含む転送サービスのタイプである。パケット順序付けを保証することは、容易にスケーラブルではない、すべてのＱＰ間フローのために状態を保持することか、関係のないフロー間の偽の依存性を生成するため、平均レイテンシ及び最大レイテンシを増大させる可能性がある、パケットの単一のシーケンス内に異なる論理フローに属するパケットのシリアル化かのいずれか一方を備えることができるために、ＲＲＤは、パケット順序付けを保証しない。ＲＲＤがパケット順序付けを保証しないときでさえ、単一のＲＲＤ接続が複数の多重化されたフローを含む可能性があるため、ＲＲＤレベルでアウトオブオーダーであるようにみえるパケットがそれらのＱＰ間フローにおいて実際にインオーダーであることは可能である。ホストソフトウェアがそのメッセージフローの追跡を継続することができるため、順序付けは、ホストにより行われることができる。したがって、ＲＲＤは、各パケットが適切なキューへ最終的に送達されることのみを保証する。パケットは、それらがアウトオブオーダーであるときでも宛先エンドポイントキューへ送達されることが可能であり、シーケンス番号は、ノード間接続レベルにおいて追跡されることができる。フロー毎（エンドポイント間）の番号付けは、ホストドライバにより行われることが可能であり、シーケンス番号は、宛先ホスト上のドライバへパケットと転送されることが可能であるが、トランスポート層上で検査されない。またＲＲＤは、アウトオブオーダーパケットを廃棄するように構成されるため、インオーダー送達を提供することが可能である。
【００５６】
ＲＲＤ転送は、輻輳した、または障害のある経路についての最新の情報を維持しながら、負荷分散のために利用可能な経路全体にわたりパケットを送信することができる。特定の宛先に単一の接続コンテキストを使用する場合に、ＲＲＤ転送は、廃棄されたパケットにより引き起こされるアウトオブオーダー肯定応答（ＡＣＫ）と、マルチパス送達により引き起こされるアウトオブオーダーＡＣＫパケットを容易に区別できない可能性がある。したがって、ＲＲＤ状態は、経路毎の基準で配置され、特定の経路上の特定の宛先へ送信されるパケットは、別個のコンテキスト、及び独立したパケット番号付けを有する。換言すれば、特定の宛先についてのＲＲＤコンテキストは、複数の一方向性フローレットコンテキストを含むことができ、各フローレットは、上記に説明されるように異なる経路を使用することができる。たとえば、各フローレットコンテキストは、外側ヘッダーに使用されるソースＵＤＰポートフィールドを含むことができる。各フローレットは、タイムアウト、または過度のパケット損失の事例において再割り当てされることが可能である異なる経路と関連することができる。パケットシーケンス番号は、各フローレットにおいて独立して追跡されることが可能である。
【００５７】
図１０は、たとえば、ＲＲＤ転送サービス及びＵＤＰ／ＩＰプロトコルを使用して、１つの物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントの例示的なブロック図を示す。ユーザアプリケーション１００２は、プロバイダライブラリ１００４及びユーザスペースドライバライブラリ１００６を使用して、送信または受信キューを介して非同期的にメッセージを送信する、または受信することができる。図１０は、メッセージ送信フローのみを示す。プロバイダライブラリ１００４は、オープンファブリックインタフェース（ＯＦＩ）Ｌｉｂｆａｂｒｉｃプロバイダライブラリ、またはオープンファブリックスエンタープライズディストリビューション（ＯＦＥＤ）ライブラリを含むことができる。
【００５８】
ユーザアプリケーション１００２は、通信エンドポイントを介してメッセージを送信する／受信することができる。アプリケーションは、複数の通信エンドポイントを使用することが可能である。データグラム転送の事例において、各通信エンドポイントは、単一のＱＰへマッピングされることが可能である。ＱＰ番号は、アダプタファームウェアにより割り当てられることが可能であり、各仮想イーサネットインタフェースについて別個に維持されることが可能である。ＱＰ番号は、仮想イーサネットインタフェースのＩＰアドレスに加えて、通信エンドポイントアドレスの一部として使用されることが可能である。
【００５９】
ユーザアプリケーション１００２は、トランザクションまたはメッセージを複数のＷＱＥ１００８ａから１００８ｄ内に配置することができ、つぎにトランザクションまたはメッセージは、チャネルアダプタにより処理され、宛先エンドポイントへ送信されることが可能である。ＷＱＥ１００８ａから１００８ｄは、１つのローカルエンドポイントについて１つのＷＱＥを使用することができるように、ローカルエンドポイントに基づき配置されることができる。
【００６０】
ユーザアプリケーション１００２は、ＵＤＰ／ＩＰパケットヘッダーを生成せず、むしろ、それは、宛先ネットワークアドレスマップインデックス（アドレスハンドル）を送信メッセージ記述子に渡す。これは、いずれかに譲歩することなく、より低いレイテンシ、及びより良いセキュリティを提供する。パフォーマンスの観点から、アドレスハンドルは、外側ヘッダーを含むヘッダーをチャネルアダプタが事前に生成すること、それらをいずれかの検査なしで（アプリケーションにより生成されるパケットヘッダーを妥当性確認することの代替に）送信すること、及びヘッダーをフェッチすることと、それをルーティングテーブル内でルックアップすることとを回避することにより全体のレイテンシを最低限にすることを可能にする。
【００６１】
ＷＱＥ１００８ａから１００８ｄ内のトランザクションまたはメッセージは、ＲＲＤ転送コンテキストなどの、転送コンテキスト１０１０ａから１０１０ｃを設置するように処理されることができ、転送コンテキスト１０１０ａから１０１０ｃの各コンテキスト内のメッセージまたはトランザクションは、同一の宛先ＩＰアドレスへ送信される。
【００６２】
ＲＲＤ転送コンテキストなどの、各転送コンテキスト１０１０ａから１０１０ｃ内のメッセージまたはトランザクションは、フローレットコンテキストを選択するためにチャネルアダプタによりさらに処理されることができる。たとえば、転送コンテキスト１０１０ａ内のメッセージは、複数のフローレットコンテキスト１０１２ａ内に配置されることができ、転送コンテキスト１０１０ｂ内のメッセージは、複数のフローレットコンテキスト１０１２ｂ内に配置されることができ、転送コンテキスト１０１０ｃ内のメッセージは、複数のフローレットコンテキスト１０１２ｃ内に配置されることができる。各ＷＱＥ及び転送コンテキストは、ソフトウェアキューまたはハードウェアキュー、たとえば、先入れ先出し（ＦＩＦＯ）バッファなどのバッファとして実装されることができる。フローレットコンテキストは、アクティブパケットリストを維持することができ、たとえば、メモリ内に格納されることができる。つぎにフローレットコンテキスト１０１２ａから１０１２ｃは、ＮＸ１０１４により処理され、チャネルアダプタとネットワークスイッチとの間のインタフェースにおいてハードウェアキュー１０１６内に入れられ、ネットワークへ送信されることが可能である。ハードウェアキュー１０１６は、ＦＩＦＯであることができる。ハードウェアキュー１０１６内の各パケットは、アプリケーションメッセージペイロード、プロバイダの補助情報、及び宛先アドレスを含むことができる。
【００６３】
本明細書に使用されるように、フローレットは、２つのネットワークインタフェース間で一方向（半二重）接続に転送されるフローまたはデータフローと関連するパケットのグループである。フローレットは、ＱＰに関係がなく、ユーザアプリケーションに不可視である。フローレット内のパケットは、フローレットインデックス及びパケットシーケンス番号を搬送することができる。パケットシーケンス番号は、フローレットに関係する。ソースエンドポイントは、再送信のために必要な情報を含む、未確認未応答のパケット（シーケンス番号、及び未応答のＷＱＥのリスト）上に情報を維持する。宛先エンドポイントは、たとえば、パケットのヘッダー内で、受信したパケットからフローレットインデックスまたはパケットシーケンス番号を復旧させ、ソースエンドポイントへパケットを受信する肯定応答を送信することができる。つぎにソースエンドポイントは、パケットを受信する肯定応答を宛先エンドポイントから受信した後に、パケットのシーケンス番号を除去することができる。またソースエンドポイントは、パケットを送信した後にパケットのシーケンス番号を除去することができる。
【００６４】
各フローレットは、限定された数の未確認の伝送パケットを含むように制御されることができる。したがって、フローレットの選択時に、より遅い経路は、より速い経路よりもあまり頻繁に使用されない。フローレットは、アクティブ状態（すなわち、未確認未応答のパケットを含む）、またはアイドル状態（すべてのものが応答される）のいずれか一方にあることが可能である。
【００６５】
一般に、パケットは、所与のアクティブフローレットについて同一の経路に送信される。いくつかの実施形態において、パケットをアイドルフローレットに割り当てるときに、送信器は、経路をランダムに変更することができる。また送信器は、タイムアウト後に、または過剰なレイテンシ、もしくは過剰なパケット廃棄を受けるときに、フローレットを異なる経路に再割り当てすることが可能である。
【００６６】
宛先コンテキストは、最後のインオーダーパケットのシーケンス番号、及びアウトオブオーダーパケットのシーケンス番号を保持することができるが、それは、いずれのエンドポイントバッファ情報も保持しないことができる。到達する重複しないすべてのパケットは、適切なＱＰへパケットを送達することができる、ＲＲＤサービスのつぎのレベルへ送達されることができる。宛先コンテキストは、インオーダーパケットに応答する通常のＡＣＫ、及び受信したパケットシーケンス内のいずれかのホールを報告する選択的ＡＣＫ（ＳＡＣＫ）パケットを生成することができる。
【００６７】
特定のＲＲＤコンテキスト内のフローレットは、短いインデックスを使用して番号付けされることができる。フローレットインデックスは、パケットヘッダー内に指定されることができる。同一のインデックスは、一方の側に送信フローレットコンテキストについての方向、及び他方の側に対応する受信フローレットコンテキストについての方向の両方に使用されることができる。ＲＲＤコンテキストあたりのフローレットの最大数は、予め定められ、ハードコード化されることができる、またはそれは、通信前に、もしくは通信中にネゴシエートされ、調整されることができる。
【００６８】
ソースエンドポイントは、特定のアドレスを最初にマッピングするときに、新規のフローレットのみを初期化することができる。換言すれば、フローレット接続の確立は、送信側または受信側をリセットしない限り、一度限りの動作であることができる。いくつかの実施形態において、受信側が「シーケンス開始」パケットを許容するときに、受信側は、「シーケンス開始」パケットが無効であると判定しない限り、「シーケンス開始」パケットを許容することができ、いずれの以前のフローレット状態も破棄することができる。
【００６９】
特定のフローレット上に送信されるパケットは、インオーダーに一般に到達するが、無効の「シーケンス開始」パケットは、たとえば、経路の遅さにより、たとえば、フローレットを初期化した直後にフローレットの経路をスイッチングする事例において、アウトオブオーダーに到達することができる。このような事例において、受信側は、受信した「シーケンス開始」パケット内の初期シーケンス番号を格納し、パケットが同一のシーケンス番号を搬送する場合に同一のフローレット上でいずれかの追加の「シーケンス開始」パケットを拒否し、任意選択で、明示的な否定応答（ＮＡＫ）を生成することができる。
【００７０】
新たに開始した送信側は、フローレット履歴のいずれの知識も含まない可能性があり、それが受信側からＡＣＫを取得するまで、「シーケンス開始」パケット後の追加のパケットを送信することができない。ＮＡＫのまれなイベントにおいて、たとえば、送信側がフローレットについて以前の「シーケンス開始」パケット内の初期シーケンス番号と同一の初期シーケンス番号を偶発的に生成する場合に、それは、異なる初期番号を生成し、再試行させることができる。
【００７１】
ＩＶ．フローレット割り当て
通常、フローレットにパケットを割り当てるときに２つの目的を考慮に入れる。すべての経路を常に使用することは望ましい。また、いずれかの損失パケットを速やかに検出し、報告することを確実にするために十分なパケットをフローレットが取得することは望ましい。フローレット内の最後のパケットを廃棄する場合に、廃棄を検出する１つの方法は、タイムアウトである。代替に、少量ロードされたシステムにおいて、フローレット内の最後のパケット後に追加のダミーパケットを送信することができる。ＳＡＣＫベースの検出がより高速の復元を可能にするため、ＲＲＤがすべてのアクティブフローレット上にパケットを送信し続けることは好ましい。これは通常、大量のトラフィックのために行われることが可能であり、保留するパケット数は、多く、フローレットは、完全に乾ききったように少ない。いくつかの状況において、全体としてシステムが大量にロードされる可能性があるとしても、システム内に多くの少量ロードされたフローレットがあることができる。わずかな数の保留するパケットを含む少量にロードされたシステムについて、すべての利用可能なフローレットを介して均等にパケットを分散させることは、多くの、またはすべてのフローレット上の未確認のパケット数が０または１程度である可能性があり、ＳＡＣＫが無用になる状況につながる可能性がある。１つの解決策は、使用中のフローレット数を動的に調整し、フローレットがアイドルになると、または非常に遅くなると常に、１つのフローレットを１つの異なる経路へ再割り当てすることである。使用中のフローレットの総数は、たとえば、３２個以下に限定されることができ、たとえば、ネットワークレイテンシ、ネットワーク帯域幅、またはネットワーク輻輳に基づき、調整されることができる。いくつかの実施形態において、空のフローレット上ではなく半分入ったフローレット上にパケットを配置することは好ましい。加えて、常に単一のフローレットを非アイドルに保つことができる、スローバットステディフローが経路を独占しないことを確実にするために、時には追加のアイドルフローレットは、この経路を最終的に変更することを確実にするように割り当てられることもあることが可能である。
【００７２】
ユーザアプリケーションからのパケットを複数のフローレットに割り当てるために多くの異なる方式があることができる。たとえば、すべての利用可能なフローレット、またはすべての使用中のフローレット内の未確認のパケット数に基づきフローレットにパケットを割り当てることができる。アプリケーションの情報に基づきパケットをフローレットに割り当てることができる。また、アプリケーションからのインストラクション、要求、または指示に基づきパケットをフローレットに割り当てることができる。
【００７３】
ユーザアプリケーションがフローラベルを指定しないいくつかの実施形態において、ＲＲＤなどの転送サービスを実装するトランスポート層にネットワークアダプタデバイスは、各フローレットの使用率に基づくフローレット数へ、たとえば、各フローレット内の未確認のパケット数へ、ユーザアプリケーションからのパケットを割り当てることができる。ネットワークアダプタデバイスは、未確認のパケットの総数、及び最後に使用されたフローレットの記録を保持することができる。また、それは、使用率によりフローレットの別個のリストを維持することができ、ＲＲＤコンテキストの各フローレットは、以下の３つのリスト、最大限、ほぼ空（半分未満）、及びほぼ最大限（半分超）のうちの１つにあることができる。他のアプリケーションによる使用のために、空のフローレットを共有されたプールへ返すことができる。
【００７４】
トランスポート層においてネットワークアダプタデバイスは、フローレットが最大限ではない場合に、以前に使用された同一のフローレットを選択することができる。それ以外の場合に、ネットワークアダプタデバイスは、つぎの優先順位、ほぼ最大限、ほぼ空、及び空（共有されたプールから）に従い、使用率によりフローレットのリスト内の別のフローレットを選択することができる。
【００７５】
いくつかの実施形態において、フローレット内で許容された未確認のパケットの総数は、たとえば、ネットワーク輻輳に基づき調整されることができる、調整可能な数に制限されることができる。たとえば、ネットワーク全体が輻輳する場合に、フローレット内で許容された未確認のパケットの総数は、増加することができる。ネットワーク全体があまり輻輳していない場合に、フローレット内で許容された未確認のパケットの総数は、減少することができる。
【００７６】
また、利用可能なフローレット、または使用中のフローレットの各フローレットの観測されたレイテンシに基づきデータパケットをフローレットに割り当てることができる。より低い観測されたレイテンシを有するフローレットを一般的に選択することができる。また、利用可能なフローレット、または使用中のフローレットの各フローレットの廃棄率に基づきデータパケットをフローレットに割り当てることができる。より低い廃棄率を有するフローレットを一般的に選択することができる。
【００７７】
またトランスポート層は、パケットを割り当てる方法についてユーザアプリケーションからの指示に基づきパケットを異なるフローレットに割り当てることができる。たとえば、ユーザアプリケーションは、オープンファブリックエンタープライズディストリビューション（ＯＦＥＤ）内で支持されるフローラベルなどの、フローラベルにより伝送要求をマーク付けすることができる。フローラベルは、特定の経路上にパケットを送信するようにトランスポート層に指令することができないが、同一のラベルを含む他のメッセージと同一の経路上の同一の宛先へメッセージを送信するようにトランスポート層に指令することができる。トランスポート層マップは、フローラベルマップを保持することができ、このマップ内の各エントリは、フローレットインデックス、及びフローレット内の未確認のパケット数を含む。所望のフローレット内の未確認のパケット数が０である場合に、パケットに対し新規のフローレットを割り当てることが可能である。たとえば、他のアプリケーションまたはメッセージから、多すぎる未確認のパケットを所望のフローレットが含む場合に、新規のフローレットも割り当てることができる。
【００７８】
またトランスポート層は、ユーザアプリケーションの情報に基づきユーザアプリケーションからのパケットを異なるフローレットへ割り当てることができる。たとえば、ファブリック経由で不揮発性メモリＥｘｐｒｅｓｓ（ＮＶＭｅ）について、トランスポート層は、同一のコマンド用のすべてのパケットを同一のフローレットへ割り当てることができる。メッセージパッシングインタフェース（ＭＰＩ）などの、いくつかのアプリケーションについて、トランスポート層は、パケットを割り当て、アウトオブオーダー送達を最小限にすることができる。トランスポート層は、他のソースから情報を受信すること、または情報をヒューリスティックに決定することにより、ユーザアプリケーションについて情報を取得することができる。
【００７９】
いくつかの実施形態において、複数のネットワークアダプタデバイスまたは複数のユーザアプリケーション間のフローレットまたは経路の選択は、異なるアプリケーションまたは異なるネットワークアダプタデバイスからのパケットを同一の経路に割り当て、経路を過負荷にすることができないように、調整される、またはランダム化されることができる。いくつかの実施態様において、他のアプリケーションにより使用されている、スイッチもしくはルーターのポート、またはソースＵＤＰポートは、フローレットのために使用される適切なポートを決定するための入力として使用されることができる。
【００８０】
フローレットを割り当てるときに、それは通常、フローレットに割り当てられるすべてのパケットが同一の経路を取るような経路と関連する。しかしながら、フローレットと関連する経路が閾値を超える過剰な廃棄率を有する、または閾値より長いレイテンシを有する場合に、フローレット及びその関連したパケットは、より低い廃棄率、またはより短いレイテンシを有する異なる経路へ再割り当てされることができる。
【００８１】
Ｖ．複数の物理的なポートを含むネットワークアダプタ
ネットワークアダプタデバイスは、複数の物理的な出力または入力ポートを含むことができる。したがって、ネットワークアダプタデバイスは、デバイス上の異なる物理的なポートを介してパケットを送信する、または受信することができる。換言すれば、ネットワークアダプタデバイスは、スイッチ自体として動作することができ、ネットワークの一部、またはネットワークのスイッチファブリックを形成することができる。
【００８２】
図１１は、たとえば、ＲＲＤ転送サービス及びＵＤＰ／ＩＰプロトコルを使用する、複数の物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントのブロック図を示す。図１０と同様に、図１１において、ユーザアプリケーション１１０２は、プロバイダライブラリ１１０４及びユーザスペースドライバライブラリ１１０６を使用して、送信または受信キューを介して非同期的にメッセージを送信する、または受信することができる。プロバイダライブラリ１１０４は、オープンファブリックインタフェース（ＯＦＩ）Ｌｉｂｆａｂｒｉｃプロバイダライブラリ、またはオープンファブリックエンタープライズディストリビューション（ＯＦＥＤ）ライブラリを含むことができる。
【００８３】
ユーザアプリケーション１１０２は、トランザクションまたはメッセージを複数のＷＱＥ１１０８ａから１１０８ｄ内に配置することができ、つぎにトランザクションまたはメッセージは、チャネルアダプタにより処理され、宛先エンドポイントへ送信されることが可能である。ＷＱＥ１１０８ａから１１０８ｄは、１つのローカルエンドポイントに対して１つのＷＱＥを使用することができるように、ローカルエンドポイントに基づき配置されることができる。ＷＱＥ１１０８ａから１１０８ｄ内のトランザクションまたはメッセージは、ＲＲＤ転送コンテキストなどの、転送コンテキスト１１１０ａから１１１０ｃを設置するように処理されることができ、各転送コンテキスト１１１０ａから１１１０ｃ内のメッセージまたはトランザクションは、同一の宛先ＩＰアドレスへ送信される。
【００８４】
ＲＲＤ転送コンテキストなどの、各転送コンテキスト１１１０ａから１１１０ｃ内のメッセージまたはトランザクションは、フローレットコンテキストを選択するためにチャネルアダプタによりさらに処理されることができる。たとえば、転送コンテキスト１１１０ａ内のメッセージは、フローレットコンテキスト１１１２ａ内に配置されることができ、転送コンテキスト１１１０ｂ内のメッセージは、フローレットコンテキスト１１１２ｂ内に配置されることができ、転送コンテキスト１１１０ｃ内のメッセージは、フローレットコンテキスト１１１２ｃ内に配置されることができる。つぎにフローレットコンテキスト１１１２ａから１１１２ｃは、ＮＸ１１１４により処理され、ハードウェアキュー１１１６に入れられることが可能である。
【００８５】
つぎにハードウェアキュー１１１６内のパケットは、ネットワークアダプタデバイスと外部ネットワークとの間のインタフェース１１１８において異なる物理的な出力ポート１１２０にルーティングされることができる。異なる物理的な出力ポートを介してパケットをルーティングすることにより、ネットワークアダプタデバイスのスループットは、増加することができ、ネットワークアダプタデバイスと外部ネットワークとの間のインタフェースにおける輻輳は、減少することができる。
【００８６】
ＶＩ．方法
図１２は、本開示のいくつかの実施形態に従い、ネットワークを介して複数のフローレットによる２つのエンドポイント間のデータ通信方法を示すフローチャート１２００である。
【００８７】
ブロック１２０２において、ネットワークアダプタデバイスは、ネットワークを介してソースエンドポイント上のユーザアプリケーションから宛先エンドポイントへ送信されるデータストリームを受信することができる。データストリームは、１つ以上のメッセージ、１つ以上のコマンド、または１つ以上のトランザクションであってもよい。いくつかの実施形態において、ソースエンドポイント及び宛先エンドポイントは、一意のＩＰアドレスを各有することができる。いくつかの実施形態において、複数のエンドポイントは、ＩＰアドレスを共有することができるため、ＩＰアドレスを共有する複数のソースエンドポイントから、ＩＰアドレスを共有する複数の宛先エンドポイントへユーザアプリケーションデータストリームは、１組のソース及び宛先ＩＰアドレス間のＩＰレベルデータストリーム内で多重化されることが可能である。他の実施形態において、ソースまたは宛先エンドポイントは、複数のＩＰアドレスを有することができ、たとえば、マルチパスＴＣＰ（ＭＰＴＣＰ）内のような、ソースＩＰアドレス及び宛先ＩＰアドレスの異なる組み合わせを使用して、ユーザアプリケーションデータストリームの各部分をネットワーク内の異なる経路を介して送信することが望ましい可能性がある。単一のＴＣＰまたはＵＤＰ接続内でソースＩＰアドレスから宛先ＩＰアドレスへ転送されることを意図される、ユーザアプリケーションデータストリーム、またはユーザアプリケーションストリームの一部は、本明細書においてデータフローまたはフローと称されることができる。
【００８８】
たとえば、図１０を参照して上記に説明されるように、ユーザアプリケーション１００２は、トランザクションまたはメッセージを複数のＷＱＥ１００８ａから１００８ｄ内に配置することができ、ＷＱＥ１００８ａから１００８ｄは、１つのローカルエンドポイント対して１つのＷＱＥを使用することができるように、ローカルエンドポイントに基づき配置されることができる。またユーザアプリケーション１００２は、送信メッセージ記述子内に宛先ネットワークアドレスマップインデックス（アドレスハンドル）を渡すことができる。宛先ネットワークアドレスマップインデックスに基づき、ＷＱＥ１００８ａから１００８ｄ内のトランザクションまたはメッセージは、ＲＲＤ転送コンテキストなどの、転送コンテキスト１０１０ａから１０１０ｃを設置するように処理されることができ、各転送コンテキスト１０１０ａから１０１０ｃ内のメッセージまたはトランザクションは、同一の宛先ＩＰアドレスへ送信される。各転送コンテキストは、フローまたはデータフローと称されることができる。
【００８９】
いくつかの実施例において、ユーザアプリケーションは、メッセージ及び送信メッセージ記述子を提供するだけではなく、ソースＩＰアドレス及び宛先ＩＰアドレスを含むメッセージをデータパケット内に提供することができる。
【００９０】
ブロック１２０４において、図１０内の各転送コンテキストなどの、各フロー内のユーザアプリケーションデータは、ＴＣＰ／ＩＰまたはＵＤＰ／ＩＰなどの、通信プロトコルに従い複数のパケットに分割されることができる。複数のパケットは、ヘッダー及びペイロードを含むことができる。ヘッダーは、更新される必要がある、空のヘッダーである、または空のフィールドを含むことができる。ヘッダーは、ＴＣＰ／ＩＰまたはＵＤＰ／ＩＰヘッダーの一部のみを含むことができる。
【００９１】
ブロック１２０６において、複数のパケットの各パケットについて、ネットワークアダプタデバイスは、複数のフローレットから、送信されるパケットについてフローレットを決定することができる。この決定は、複数のフローレットの各フローレット内のパケット数を決定すること、ユーザアプリケーションの情報を取得すること、または複数のパケットが複数のフローレットに割り当てられる方法についてユーザアプリケーションから指示を受信することにより行われることができる。いくつかの実施形態において、少量にロードされない、または大量にロードされないフローレットを選択することは好ましい可能性がある。
【００９２】
ブロック１２０８において、複数のパケットの各パケットについて、決定されたフローレットに基づき、ソースＵＤＰポート番号などの、パケットをルーティングするためにネットワークのネットワークスイッチにより使用されるパケット内のフィールドの値を決定し、設定することができる。異なるフローレットに対して異なるソースＵＤＰポートを使用することができる。結果として、異なるフローレットは、上記に説明されるようにルーティングのためにソースＵＤＰポート番号を使用するルーターまたはスイッチによりネットワーク内の異なる経路を介して送信されることができる。
【００９３】
ブロック１２１０において、複数のパケットの各パケットは、ネットワークへ送信するために割り当てられたフローレットへ送信されることができる。各パケットは、ソースＵＤＰポート、フローレットインデックスまたは識別、及びパケットシーケンス番号などのヘッダー内のフローレット固有フィールドを含むことができる。フローレットを追加のパケットに割り当てるために、フローレットでの未確認のパケット数、平均レイテンシ、または推定されたパケット損失率などの、複数のフローレットの各フローレットのステータスを監視し、使用することができる。
【００９４】
ブロック１２１２において、複数のフローレットの各フローレット内のパケットは、１つ以上の物理的なポートを介してネットワークファブリックへ送信されることができる。ネットワークアダプタデバイスと外部ネットワークとの間のインタフェースにおいてパケットをハードウェア送信キューに入れることができる。
【００９５】
ＶＩＩ．デバイス及びシステム
本開示の実施形態は、アダプタカードなどのハードウェアか、ホストＣＰＵ上で実行されることができるソフトウェアかのいずれか一方に実装されることができる。図１３は、ネットワークアダプタデバイス１３００の実施例を示す。この実施例において、ネットワークアダプタデバイス１３００は、処理ロジック１３０２、構成モジュール１３０４、管理モジュール１３０６、バスインタフェースモジュール１３０８、メモリ１３１０、及びネットワークインタフェースモジュール１３１２を含むことができる。これらのモジュールは、ハードウェアモジュール、ソフトウェアモジュール、またはハードウェア及びソフトウェアの組み合わせであることができる。ネットワークアダプタデバイス１３００は、本明細書に図示されない、追加のモジュールを含むことができる。いくつかの実施態様において、ネットワークアダプタデバイス１３００は、より少数のモジュールを含むことができる。モジュールのうちの１つ以上は、通信チャネル１３１４経由で相互に通信することができる。通信チャネル１３１４は、１つ以上のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組み合わせ、またはいくつかの他の適切な通信チャネルを含むことができる。
【００９６】
処理ロジック１３０２は、インストラクションを実行するように構成される１つ以上のプロセッサを含むことができる。処理ロジック１３０２内に含まれることができるプロセッサの実施例は、ＡＲＭ、ＭＩＰＳ、ＡＭＤ、Ｉｎｔｅｌ、Ｑｕａｌｃｏｍｍ、及び同様のものにより開発されるプロセッサを含む。また、処理ロジック１３０２内に含まれるプロセッサは、ＡＳＩＣまたはＦＰＧＡ内に実装されることができる。いくつかの実施態様において、処理ロジック１３０２のプロセッサは、たとえば、バス、レベル１（Ｌ１）キャッシュ、及び／またはレベル２（Ｌ２）キャッシュなどの、特定のリソースを共有することができる。処理ロジック１３０２により実行されるインストラクションは、たとえば、コンピュータプログラムの形式で、コンピュータ可読記憶媒体に格納されることができる。コンピュータ可読記憶媒体は、非一時的であることができる。いくつかの事例において、コンピュータ可読媒体は、メモリ１３１０の部分であることができる。
【００９７】
メモリ１３１０は、揮発性もしくは不揮発性のいずれか一方、または揮発性及び不揮発性の両方のタイプのメモリを含むことができる。メモリ１３１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、電気的に消去プログラム可能な読み出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、及び／またはいくつかの他の適切な記憶媒体を含むことができる。いくつかの事例において、いくつかの、またはすべてのメモリ１３１０は、ネットワークアダプタデバイス１３００内部にあることができ、他の事例において、いくつかの、またはすべてのメモリは、ネットワークアダプタデバイス１３００外部にあることができる。
【００９８】
いくつかの実施態様において、構成モジュール１３０４は、１つ以上の構成レジスタを含むことができる。構成レジスタは、ネットワークアダプタデバイス１３００の動作を制御することができる。いくつかの実施態様において、構成レジスタ内の１つ以上のビットは、ネットワークアダプタデバイス１３００の特定の機能を表すことが可能である。構成レジスタは、処理ロジック１３０２内で実行するインストラクションにより、及び／またはホストデバイス、ホストデバイス上で実行するオペレーティングシステム、及び／またはリモートサーバなどの外部エンティティによりプログラミングされることができる。構成モジュール１３０４は、ネットワークアダプタデバイス１３００の動作を制御する、ハードウェア及び／またはソフトウェアをさらに含むことができる。
【００９９】
いくつかの実施態様において、管理モジュール１３０６は、ネットワークアダプタデバイス１３００の異なるコンポーネントを管理するように構成されることができる。いくつかの事例において、管理モジュール１３０６は、電源投入において１つ以上の構成レジスタ内の１つ以上のビットを構成し、ネットワークアダプタデバイス１３００の特定の機能を有効にする、または無効にすることができる。
【０１００】
バスインタフェースモジュール１３０８は、外部通信媒体経由で、コンピューティングシステム内のホストデバイス及び／または他のコンポーネントなどの、外部エンティティと通信することを可能にすることができる。バスインタフェース１３０８モジュールは、ケーブル、ソケット、ポート、または外部通信媒体への他の接続へ接続するために物理的なインタフェースを含むことができる。バスインタフェースモジュール１３０８は、着信及び発信トランザクションを管理するためにハードウェア及び／またはソフトウェアをさらに含むことができる。バスインタフェース１３０８モジュールは、ＮＶＭｅ、ＡＨＣＩ、ＳＣＳＩ、ＳＡＳ、ＳＡＴＡ、ＰＡＴＡ、ＰＣＩ／ＰＣＩｅ、及び同様のものなどの、ローカルバスプロトコルを実装することができる。バスインタフェース１３０８モジュールは、コネクタ、電力管理、エラーハンドリングなどを有する、これらのバスプロトコルのいずれかについて少なくとも物理的なレイヤを含むことができる。いくつかの実施態様において、ネットワークアダプタデバイス１３００は、複数の外部エンティティと通信するために複数のバスインタフェースモジュールを含むことができる。これら複数のバスインタフェースモジュールは、同一のローカルバスプロトコル、異なるローカルバスプロトコル、または同一の、及び異なるバスプロトコルの組み合わせを実装することができる。
【０１０１】
ネットワークインタフェースモジュール１３１２は、ネットワークと通信するためにハードウェア及び／またはソフトウェアを含むことができる。このネットワークインタフェースモジュール１３１２は、たとえば、ネットワークへ有線接続のための物理的なコネクタ、及び／またはネットワークへ無線通信のためのアンテナを含むことができる。ネットワークインタフェースモジュール１３１２は、ネットワークプロトコルスタックを実装するように構成されるハードウェア及び／またはソフトウェアをさらに含むことができる。ネットワークインタフェースモジュール１３１２は、たとえば、とりわけ、ＴＣＰ／ＩＰ、ＩｎｆｉｎｉＢａｎｄ、ＲｏＣＥ、Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ（ＩＥＥＥ）８０２．１１無線プロトコル、ユーザデータグラムプロトコル（ＵＤＰ）、非同期転送モード（ＡＴＭ）、トークンリング、フレームリレー、ハイレベルデータリンク制御（ＨＤＬＣ）、ファイバ分散型データインタフェース（ＦＤＤＩ）、及び／またはポイントツーポイントプロトコル（ＰＰＰ）などの、ネットワークプロトコルを使用するネットワークと通信することができる。いくつかの実施態様において、ネットワークアダプタデバイス１３００は、異なるネットワークと通信するように各構成される、複数のネットワークインタフェースモジュールを含むことができる。たとえば、これらの実施態様において、ネットワークアダプタデバイス１３００は、有線イーサネットネットワーク、無線８０２．１１ネットワーク、セルラネットワーク、ＩｎｆｉｎｉＢａｎｄネットワークなどと通信するためにネットワークインタフェースモジュールを含むことができる。
【０１０２】
ネットワークアダプタデバイス１３００は、システムオンチップ（ＳＯＣ）、プロセッサ、ネットワークインタフェースカード（ＮＩＣ）、スイッチ特定用途向け集積回路（ＡＳＩＣ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）のうちの１つとして実装されることができる。
【０１０３】
図１４は、１つ以上のネットワークを介して接続される、１つ以上のサービスプロバイダコンピュータ、及び／またはユーザデバイスを含む本明細書に記述される機能及びシステムについての例示的なアーキテクチャを示す。図１から図１３に考察されるデバイスは、図１４に記述されるコンピューティングデバイスの１つ以上のコンポーネントを使用することができる、または図１４に記述される１つ以上のコンピューティングデバイスを表すことができる。図示されたアーキテクチャ１４００において、１人以上のユーザ１４０２は、ユーザコンピューティングデバイス１４０４（１）から（Ｎ）を使用して、１つ以上のネットワーク１４０８を介して、アプリケーション１４０６（たとえば、ウェブブラウザまたはモバイルデバイスアプリケーション）にアクセスすることができる。いくつかの態様において、アプリケーション１４０６は、コンピューティングリソースサービスまたはサービスプロバイダにより、ホストされる、管理される、及び／または提供されることができる。１つ以上のサービスプロバイダコンピュータ１４１０は、ユーザ（複数可）１４０２がインタラクトすることができる、ユーザデバイス１４０４上で実行するように構成されるネイティブアプリケーションを提供することができる。サービスプロバイダコンピュータ（複数可）１４１０は、いくつかの実施例において、限定されないが、クライアントエンティティ、低レイテンシデータストレージ、デュラブルデータストレージ、データアクセス、管理、仮想化、クラウドベースのソフトウェアソリューション、電子コンテンツパフォーマンス管理、及びその他のものなどの、コンピューティングリソースを提供することができる。またサービスプロバイダコンピュータ（複数可）１４１０は、ユーザ（複数可）１４０２へ、ウェブホスティング、コンピュータアプリケーション開発及び／または実装プラットフォーム、前述のものの組み合わせ、または同様のものを提供するように動作可能であることができる。サービスプロバイダコンピュータ（複数可）１４１０は、いくつかの実施例において、１つ以上の第三者コンピュータ１４１２と通信することができる。
【０１０４】
いくつかの実施例において、ネットワーク（複数可）１４０８は、ケーブルネットワーク、インターネット、無線ネットワーク、セルラネットワーク、及び他のプライベート及び／またはパブリックネットワークなどの、多くの異なるタイプのネットワークのうちのいずれか１つ、またはこれらの組み合わせを含むことができる。図示された実施例は、ネットワーク（複数可）１４０８経由でアプリケーション１４０６にアクセスするユーザ（複数可）１４０２を表すが、記述された技術は、ユーザ（複数可）１４０２が固定電話経由で、キオスクを介して、またはいくつかの他の方式において、ユーザデバイス（複数可）１４０４を介してサービスプロバイダコンピュータ（複数可）１４１０とインタラクトするインスタンス内に等しく適用することができる。また記述された技術は、他のクライアント／サーバ配置（たとえば、セットトップボックスなど）内に、及び非クライアント／サーバ配置（たとえば、ローカルに格納されたアプリケーションなど）内に適用することができる。
【０１０５】
簡潔に上記に説明されるように、アプリケーション１４０６は、ユーザ（複数可）１４０２がサービスプロバイダコンピュータ（複数可）１４１０とインタラクトし、たとえば、ウェブコンテンツ（たとえば、ウェブページ、音楽、ビデオなど）にアクセスすることを可能にすることができる。サービスプロバイダコンピュータ（複数可）１４１０は、サーバのクラスタ内に、またはサーバファームとして配置されることができ、アプリケーション１４０６及び／またはクラウドベースのソフトウェアサービスをホストすることができる。また他のサーバアーキテクチャを使用して、アプリケーション１４０６をホストすることができる。アプリケーション１４０６は、多くのユーザ１４０２からの要求を処理すること、及び応答してさまざまなアイテムのウェブページを提供することが可能であることができる。アプリケーション１４０６は、ソーシャルネットワーキングサイト、オンラインリテーラー、情報サイト、ブログサイト、検索エンジンサイト、ニュース及びエンターテイメントサイト、ならびにその他のものを含む、ユーザインタラクションを支援する、いずれかのタイプのウェブサイトを提供することが可能である。上記に考察されるように、記述された技術は、ユーザデバイス（複数可）１４０４上で実行する他のアプリケーションなどとの、アプリケーション１４０６の外側で同様に実施することが可能である。
【０１０６】
ユーザデバイス（複数可）１４０４は、限定されないが、携帯電話、スマートフォン、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、シンクライアントデバイス、タブレットＰＣ、電子ブック（ｅブック）リーダーなどのような、いずれかのタイプのコンピューティングデバイスであることができる。いくつかの実施例において、ユーザデバイス（複数可）１４０４は、ネットワーク（複数可）１４０８を介して、または他のネットワーク接続を介してサービスプロバイダコンピュータ（複数可）１４１０と通信することができる。加えて、ユーザデバイス（複数可）１４０４は、サービスプロバイダコンピュータ（複数可）１４１０（たとえば、サービスプロバイダコンピュータ１４１０と統合されるコンソールデバイス）より管理される、これにより制御される、またはそうでなければサービスプロバイダコンピュータ１４１０の一部である分散システムの部分であることができる。
【０１０７】
１つの例示的な構成において、ユーザデバイス（複数可）１４０４は、少なくとも１つのメモリ１４１４、及び１つ以上の処理ユニット（またはプロセッサ（複数可）１４１６）を含むことができる。プロセッサ（複数可）１４１６は、ハードウェア、コンピュータ実行可能インストラクション、ファームウェア、またはそれらの組み合わせにおいて実装されることができる。プロセッサ（複数可）１４１６のコンピュータ実行可能インストラクションまたはファームウェア実装は、記述されるさまざまな機能を実行するためにいずれかの適切なプログラミング言語において書き込まれるコンピュータ実行可能または機械実行可能インストラクションを含むことができる。またユーザデバイス（複数可）１４０４は、ユーザデバイス（複数可）１４０４と関連する地理的位置情報を提供する、及び／または記録するために、ジオロケーションデバイス（たとえば、全地球測位システム（ＧＰＳ）デバイスまたは同様のもの）を含むことができる。
【０１０８】
メモリ１４１４は、プロセッサ（複数可）１４１６上でロード可能であり、実行可能であるプログラムインストラクション、及びこれらのプログラムの実行中に生成されるデータを格納することができる。ユーザデバイス（複数可）１４０４の構成及びタイプにより、メモリ１４１４は、揮発性（ランダムアクセスメモリ（ＲＡＭ）などの）及び／または不揮発性（読み出し専用メモリ（ＲＯＭ）、フラッシュメモリなどのような）であることができる。またユーザデバイス（複数可）１４０４は、限定されないが、磁気ストレージ、光学ディスク、及び／またはテープストレージを含む、追加のリムーバブルストレージ及び／または非リムーバブルストレージを含むことができる。ディスクドライブ及びそれらの関連したコンピュータ可読媒体は、コンピューティングデバイスのための、コンピュータ可読インストラクション、データ構造、プログラムモジュール、及び他のデータの不揮発性ストレージを提供することができる。いくつかの実施態様において、メモリ１４１４は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、またはＲＯＭなどの、複数の異なるタイプのメモリを含むことができる。
【０１０９】
より詳細にメモリ１４１４のコンテンツを検討すると、メモリ１４１４は、たとえば、ブラウザアプリケーション１４０６または専用アプリケーション（たとえば、スマートフォンアプリケーション、タブレットアプリケーションなど）を介して、少なくともユーザ提供の入力要素、または電子サービスウェブページを含む、本明細書に開示される機能を実装するためにオペレーティングシステム及び１つ以上のアプリケーションプログラムまたはサービスを含むことができる。ブラウザアプリケーション１４０６は、サービスプロバイダコンピュータ（複数可）１４１０とインタラクトするためにウェブサイトまたは他のインタフェースを受信する、格納する、及び／または表示するように構成されることができる。加えて、メモリ１４１４は、アクセスクレデンシャル、及び／または限定されないが、ユーザＩＤ、パスワード及び／または他のユーザ情報などの、他のユーザ情報を格納することができる。いくつかの実施例において、ユーザ情報は、限定されないが、デバイスＩＤ、クッキー、ＩＰアドレス、位置、または同様のものなどのアカウントアクセス要求を認証するための情報を含むことができる。加えて、ユーザ情報は、セキュリティ質問へのユーザ提供の応答、またはユーザデバイス１４０４により取得される地理的位置を含むことができる。
【０１１０】
いくつかの態様において、サービスプロバイダコンピュータ（複数可）１４１０は、限定されないが、携帯電話、スマートフォン、パーソナルデジタルアシスタント（ＰＤＡ）、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ、シンクライアントデバイス、タブレットＰＣなどのような、いずれかのタイプのコンピューティングデバイスであることもできる。加えて、いくつかの実施形態において、サービスプロバイダコンピュータ（複数可）１４１０がホストされたコンピューティング環境内で実装される１つ以上の仮想マシンにより実行されることに留意するべきである。ホストされたコンピューティング環境は、１つ以上の迅速にプロビジョニングされ、解放されたコンピューティングリソースを含むことができ、コンピューティングリソースは、コンピューティング、ネットワーキング及び／またはストレージデバイスを含むことができる。またホストされたコンピューティング環境は、クラウドコンピューティング環境と称されることができる。いくつかの実施例において、サービスプロバイダコンピュータ（複数可）１４１０は、ネットワーク（複数可）１４０８を介して、または他のネットワーク接続を介して、ユーザデバイス（複数可）１４０４及び／または他のサービスプロバイダと通信することができる。サービスプロバイダコンピュータ（複数可）１４１０は、サーバファームとして、または相互に関連しない個々のサーバとして、クラスタ内に配置されるかもしれない、１つ以上のサーバを含むことができる。これらのサーバは、統合された分散コンピューティング環境の部分として構成されることができる。
【０１１１】
１つの例示的な構成において、サービスプロバイダコンピュータ（複数可）１４１０は、少なくとも１つのメモリ１４１８、及び１つ以上の処理ユニット（またはプロセッサ１４２０）を含むことができる。プロセッサ（複数可）１４２０は、ハードウェア、コンピュータ実行可能インストラクション、ファームウェア、またはそれらの組み合わせにおいて実装されるいずれかの処理ロジックであることができる。プロセッサ（複数可）１４２０のコンピュータ実行可能インストラクションまたはファームウェア実装は、記述されるさまざまな機能を実行するために、いずれかの適切なプログラミング言語において書き込まれる、コンピュータ実行可能または機械実行可能インストラクションを含むことができる。
【０１１２】
いくつかの例において、ハードウェアプロセッサ（複数可）１４２０は、シングルコアプロセッサ、またはマルチコアプロセッサであることができる。マルチコアプロセッサは、同一のプロセッサ内に複数の処理ユニットを含むことができる。いくつかの実施形態において、マルチコアプロセッサは、バス、及び第二または第三レベルのキャッシュなどの、特定のリソースを共有することができる。いくつかの例において、シングルコアプロセッサ、またはマルチコアプロセッサにおいて各コアは、複数の実行論理プロセッサ（またはスレッド）を含むことができる。このようなコア（たとえば、複数の論理プロセッサを有するもの）において、実行パイプラインのいくつかのステージ、及びより低レベルのキャッシュも共有することができる。
【０１１３】
メモリ１４１８は、プロセッサ（複数可）１４２０上でロード可能であり、実行可能であるプログラムインストラクション、及びこれらのプログラムの実行中に生成されるデータを格納することができる。サービスプロバイダコンピュータ（複数可）１４１０の構成及びタイプにより、メモリ１４１８は、揮発性（ＲＡＭのような）及び／または不揮発性（ＲＯＭ、フラッシュメモリなどのような）であることができる。またサービスプロバイダコンピュータ（複数可）１４１０またはサーバは、リムーバブルストレージ及び／または非リムーバブルストレージを含むことができる、追加のストレージ１４２２を含むことができる。追加のストレージ１４２２は、限定されないが、磁気ストレージ、光学ディスク、及び／またはテープストレージを含むことができる。ディスクドライブ及びそれらの関連したコンピュータ可読媒体は、コンピューティングデバイスのための、コンピュータ可読インストラクション、データ構造、プログラムモジュール、及び他のデータの不揮発性ストレージを提供することができる。いくつかの実施態様において、メモリ１４１８は、ＳＲＡＭ、ＤＲＡＭ、またはＲＯＭなどの、複数の異なるタイプのメモリを含むことができる。
【０１１４】
リムーバブル及び非リムーバブルの両方のメモリ１４１８及び追加のストレージ１４２２は、コンピュータ可読記憶媒体のすべての実施例である。たとえば、コンピュータ可読記憶媒体は、コンピュータ可読インストラクション、データ構造、プログラムモジュール、またはその他のデータなどの情報のストレージのためのいずれかの方法または技術において実装される、揮発性または不揮発性媒体、リムーバブルまたは非リムーバブルメディアを含むことができる。メモリ１４１８及び追加のストレージ１４２２は、コンピュータ記憶媒体のすべての実施例である。サービスプロバイダコンピュータ（複数可）１４１０内に存在することができる追加のタイプのコンピュータ記憶媒体は、限定されないが、ＰＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤもしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望の情報を格納するために使用されることが可能であり、サービスプロバイダコンピュータ（複数可）１４１０によりアクセスされることが可能である、いずれかの他の媒体を含むことができる。また上記のいずれかの組み合わせは、コンピュータ可読媒体の範囲内に含まれるべきである。
【０１１５】
代替に、コンピュータ可読通信媒体は、搬送波または他の伝送などのデータ信号内に送信される、コンピュータ可読インストラクション、プログラムモジュール、または他のデータを含むことができる。しかしながら、本明細書に使用されるように、コンピュータ可読記憶媒体は、コンピュータ可読通信媒体を含まない。
【０１１６】
またサービスプロバイダコンピュータ（複数可）１４１０は、ネットワーク（複数可）１４０８上の、格納されたデータベース、別のコンピューティングデバイスまたはサーバ、ユーザ端末、及び／または他のデバイスと、サービスプロバイダコンピュータ（複数可）１４１０が通信することを可能にする通信接続（複数可）１４２４を含むことができる。またサービスプロバイダコンピュータ（複数可）１４１０は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、ディスプレイ、スピーカー、プリンタ、及び同様のものなどの、Ｉ／Ｏデバイス（複数可）１４２６を含むことができる。ストレージ１４２２に加えて、通信接続（複数可）１４２４及びＩ／Ｏデバイス（複数可）１４２６は、周辺機器として記述されることができる。
【０１１７】
メモリ１４１８は、オペレーティングシステム１４２８、１つ以上のデータストア１４３０、及び／または１つ以上のアプリケーションプログラム１４３２、または本明細書に開示される機能を実装するためのサービスを含むことができる。
【０１１８】
またサービスプロバイダコンピュータ（複数可）１４１０は、１つ以上の通信チャネル１４３４を含むことができる。通信チャネル１４３４は、媒体を提供することができ、この媒体を介して、サービスプロバイダコンピュータ１４１０のさまざまなコンポーネントは、通信することが可能である。単一の通信チャネル、または複数の通信チャネル１４３４は、バス、リング、スイッチングファブリック、またはネットワークの形態を取ることができる。
【０１１９】
本明細書に記述されるモジュールは、ソフトウェアモジュール、ハードウェアモジュール、またはそれらの適切な組み合わせであることができる。モジュールがソフトウェアモジュールである場合に、これらのモジュールは、非一時的なコンピュータ可読媒体上に具現化され、本明細書に記述されるいずれかのコンピュータシステム内のプロセッサにより処理されることが可能である。リアルタイムか、任意のユーザインタラクション前の非同期モードかのいずれか一方において、記述されたプロセス及びアーキテクチャを実行することが可能であることに留意するべきである。モジュールは、図１４に提案される方式において構成されることができる、及び／または本明細書に記述される機能は、別個のモジュールとして存在する１つ以上のモジュールにより提供されることが可能である、及び／または本明細書に記述されるモジュール機能は、複数のモジュールに拡散されることが可能である。
【０１２０】
本開示の実施形態は、以下の条項を鑑みて説明されることが可能である。
条項１．ネットワークファブリックを介するデータ通信方法であって、
前記ネットワークファブリックを介する単一の接続を使用して、ソースインターネットプロトコル（ＩＰ）アドレスから宛先ＩＰアドレスへ転送される関連したデータのストリームをユーザアプリケーションから受信し、
通信プロトコルに従い前記関連したデータのストリームを複数のパケットに分割し、
前記複数のパケットの各パケットについて、
前記関連したデータのストリームと関連する複数のフローレットから、送信される前記パケットについてのそれぞれのフローレットを決定し、
前記パケットについて前記決定されたフローレットに基づき、前記パケットをルーティングするために前記ネットワークファブリックのネットワークスイッチにより使用される前記パケットのヘッダー内のフィールドを設定し、
前記決定されたフローレットを介して前記パケットを送信し、
前記ネットワークファブリックを介して前記複数のフローレットの各フローレット内のパケットを送信する、
ことを備え、
前記通信プロトコルは、ユーザデータグラムプロトコル（ＵＤＰ）であり、前記パケットの前記ヘッダー内の前記フィールドは、ＵＤＰヘッダーのソースポートフィールドである、前記方法。
【０１２１】
条項２．送信される前記パケットについての前記フローレットを決定することは、
前記複数のフローレットの各フローレット内のアクティブパケット数を決定すること、
前記複数のフローレットの各フローレットのレイテンシを決定すること、
前記複数のフローレットの各フローレットの廃棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも１つを備える、条項１に記載の方法。
【０１２２】
条項３．前記ネットワークファブリックへ前記複数のフローレットの各フローレット内のパケットを送信することは、１つの物理的なポート、または複数の物理的なポートを介して前記パケットを送信することを備える、条項１または２に記載の方法。
【０１２３】
条項４．ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるデータをユーザアプリケーションから受信し、
通信プロトコルに従い前記データを複数のパケットに分割し、
前記複数のパケットの各パケットについて、
複数のフローレットから、送信される前記パケットについてそれぞれのフローレットを決定し、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内にフィールドを、前記パケットについて前記決定されたフローレットに基づき設定し、
前記ネットワークを介して送信するために前記決定されたフローレットを介して前記パケットを送信する、
ことを備える、方法。
【０１２４】
条項５．前記通信プロトコルは、ユーザデータグラムプロトコル（ＵＤＰ）であり、前記パケットの前記ヘッダー内の前記フィールドは、ＵＤＰヘッダーのソースポートフィールドである、条項４に記載の方法。
【０１２５】
条項６．前記パケットの前記ヘッダー内の前記フィールドは、ＩＰヘッダー内のソースＩＰアドレス、ＩＰヘッダー内の宛先ＩＰアドレス、ＩＰｖ６ヘッダー内のＦｌｏｗＩＤフィールド、またはマルチプロトコルラベルスイッチング（ＭＰＬＳ）ラベルである、条項４または条項５に記載の方法。
【０１２６】
条項７．各パケットは、フローレットインデックスまたはパケットシーケンス番号のうちの少なくとも１つを含む、条項４から条項６のいずれかに記載の方法。
【０１２７】
条項８．前記宛先アドレスを含む宛先エンドポイントは、受信したパケットの前記ヘッダーから前記受信したパケットの前記フローレットインデックスまたは前記パケットシーケンス番号を取得する、条項７に記載の方法。
【０１２８】
条項９．各フローレットについてのアクティブパケットのシーケンス番号を維持することをさらに備える、条項４から条項８のいずれかに記載の方法。
【０１２９】
条項１０．前記パケットの送信後に、または前記パケットが前記宛先アドレスで受信された確認を受信した後に、アクティブパケットの前記シーケンス番号からパケットの前記シーケンス番号を除去することをさらに備える、条項９に記載の方法。
【０１３０】
条項１１．送信される前記パケットについての前記フローレットを決定することは、
前記複数のフローレットの各フローレット内のアクティブパケット数を決定すること、
前記複数のフローレットの各フローレットのレイテンシを決定すること、
前記複数のフローレットの各フローレットの廃棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも１つを備える、条項４から条項１０のいずれかに記載の方法。
【０１３１】
条項１２．１つ以上の物理的なポートを介して前記ネットワークへ前記複数のフローレットの各フローレット内のパケットを送信することをさらに備える、条項４から条項１１のいずれかに記載の方法。
【０１３２】
条項１３．前記ネットワークへ前記複数のフローレットの各フローレット内の前記パケットを送信することは、各パケットが各パケットの前記ヘッダー内の情報に基づき送信される１つの物理的なポートを、複数の物理的なポートから選択することを備える、条項１２に記載の方法。
【０１３３】
条項１４．送信される前記パケットについての前記フローレットを決定することは、前記ユーザアプリケーションから前記データ以外のデータについてのパケットの前記ヘッダー内の前記フィールド内で設定される値に基づく、条項４から条項１３のいずれかに記載の方法。
【０１３４】
条項１５．送信される前記パケットについての前記フローレットを決定することは、使用中のフローレット数を動的に調整することを備える、条項４から条項１４のいずれかに記載の方法。
【０１３５】
条項１６．使用中のフローレットの総数は、閾値未満であり、前記閾値は、ネットワークレイテンシ、ネットワーク帯域幅、またはネットワーク輻輳のうちの少なくとも１つに基づき決定される、条項１５に記載の方法。
【０１３６】
条項１７．各フローレット内のアクティブパケット数は、閾値未満であり、前記閾値は、ネットワーク輻輳に基づき調整可能である、条項４から条項１６のいずれかに記載の方法。
【０１３７】
条項１８．フローレットについての前記元の経路が閾値を超えるレイテンシまたは廃棄率を有する判定に応答して、前記ネットワークを介して異なる経路へ前記フローレット及びその関連したパケットを割り当てることをさらに備える、条項４から条項１７のいずれかに記載の前記方法。
【０１３８】
条項１９．処理ロジックと、
前記処理ロジックに結合され、これにより読み出し可能であるコンピュータ可読ストレージデバイスであって、前記処理ロジックが、
ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるメッセージをユーザアプリケーションから受信させ、
通信プロトコルに従い前記メッセージを複数のパケットに分割させ、
前記複数のパケットの各パケットについて、
送信される前記パケットについてのフローレットを複数のフローレットから割り当てさせ、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内のフィールドを前記割り当てられたフローレットに基づき設定させ、
前記ネットワークを介して送信するために前記割り当てられたフローレットを介して前記パケットを送信させる、インストラクションを含む前記コンピュータ可読ストレージデバイスと、
前記処理ロジックと結合され、これによりアクセス可能であり、パケットの複数のキューを格納するように構成されるメモリと、
前記ネットワークと通信する１つ以上の物理的なポートと、
を備え、
前記複数のパケットは、前記１つ以上の物理的なポートを介して前記ネットワークへ送信される、装置。
【０１３９】
条項２０．前記通信プロトコルは、ユーザデータグラムプロトコル（ＵＤＰ）であり、前記パケットの前記ヘッダー内の前記フィールドは、ＵＤＰヘッダーのソースポートフィールドである、条項１９に記載の装置。
【０１４０】
条項２１．それぞれの前記１つ以上の物理的なポートは、一意のＩＰアドレスを有し、前記パケットの前記ヘッダー内の前記フィールドは、ＩＰヘッダーの前記ソースＩＰアドレスフィールドである、条項１９または条項２０に記載の装置。
【０１４１】
条項２２．送信される前記パケットについての前記フローレットを決定することは、
使用中の前記複数のフローレットの各フローレット内のパケット数を決定すること、
前記複数のフローレットの各フローレットの観測されたレイテンシを決定すること、
前記複数のフローレットの各フローレットの破棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも１つを備える、条項１９から条項２１のいずれかに記載の装置。
【０１４２】
条項２３．前記コンピュータ可読ストレージデバイスは、前記処理ロジックが前記１つ以上の物理的なポートからパケットまたは肯定応答を受信させるインストラクションをさらに備える、条項１９から条項２２のいずれかに記載の装置。
【０１４３】
条項２４．前記装置は、システムオンチップ（ＳＯＣ）、プロセッサ、ネットワークインタフェースカード（ＮＩＣ）、スイッチ特定用途向け集積回路（ＡＳＩＣ）、またはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）のうちの１つを含む、条項１９から条項２３のいずれかに記載の装置。
【０１４４】
条項２５．前記処理ロジックは、ＳＯＣ、プロセッサ、ＡＳＩＣまたはＦＰＧＡのうちの１つを含む、条項１９から条項２４のいずれかに記載の装置。
【０１４５】
図１５は、さまざまな実施形態に従い態様を実装するための例示的な環境１５００の態様を示す。理解されるように、ウェブベースの環境が説明の目的のために使用されるが、多様な実施形態を実装するために異なる環境が必要に応じて使用され得る。環境は電子クライアントデバイス１５０２を含み、電子クライアントデバイスは、要求、メッセージ、または情報を適切なネットワーク１５０４を介して送信し、受信するように、及びデバイスのユーザに情報を搬送して戻すように動作可能である、任意の適切なデバイスを含み得る。係るクライアントデバイスの実施例には、パーソナルコンピュータ、携帯電話、ハンドヘルドメッセージングデバイス、ラップトップコンピュータ、セットトップボックス、パーソナルデータアシスタント、電子ブックリーダー等が挙げられる。ネットワークは、イントラネット、インターネット、セルラネットワーク、ローカルエリアネットワーク、もしくは任意の他の係るネットワークまたはその組合せを含む、任意の適切なネットワークを含むことがある。係るシステムのために使用される構成要素は、選択されるネットワーク及び／または環境の種類に少なくとも部分的に依存することがある。係るネットワークを介して通信するためのプロトコル及び構成要素は周知であり、本明細書において詳細に説明されない。ネットワークを介する通信は、有線接続または無線接続及びそれらの組合せによって可能にされることができる。この実施例では、環境は要求を受信し、要求に応えてコンテンツを提供するためのウェブサーバ１５０６を含むので、ネットワークはインターネットを含むが、他のネットワークの場合、当業者に明白であるように、同様の目的を果たす代替のデバイスが使用されることができる。
【０１４６】
例示的な環境には、少なくとも１つのアプリケーションサーバ１５０８及びデータストア１５１０が含まれる。いくつかのアプリケーションサーバ、レイヤ、もしくは他の要素、プロセス、またはコンポーネントが存在することがあり、これらは、チェーン接続されるか、またはそれ以外の方法で構成されることがあり、適切なデータストアからデータを得るなどのタスクを実行するためにインタラクトすることがあることを理解されたい。本明細書で使用されるように、用語「データストア」は、データを記憶する、データにアクセスする、及びデータを取り出すことができる任意のデバイスまたはデバイスの組合せを指し、これは、データサーバ、データベース、データ記憶装置、及びデータ記憶媒体の任意の組合せ及び数を、任意の標準的な環境、分散環境、またはクラスタ化された環境に含んでよい。アプリケーションサーバは、必要に応じてデータストアと統合してクライアントデバイスのための１つ以上のアプリケーションの態様を実行し、データアクセス及びアプリケーションのためのビジネスロジックの大多数を処理するための任意の適切なハードウェア及びソフトウェアを含むことがある。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供し、ユーザに転送されるテキスト、グラフィックス、音声、及び／またはビデオなどのコンテンツを生成することができ、このコンテンツは、この実施例ではハイパーテキストマークアップ言語（「ＨＴＭＬ」）、拡張マークアップ言語（「ＸＭＬ」）、または別の適切な構造化言語の形でウェブサーバによってユーザに提供されてよい。すべての要求及び応答の処理、ならびにクライアントデバイス１５０２とアプリケーションサーバ１５０８との間のコンテンツの送達は、ウェブサーバによって処理されることができる。本明細書で説明される構造化コードは、本明細書の他の部分で説明される任意の適切なデバイスまたはホストマシンで実行されることができるので、ウェブサーバ及びアプリケーションサーバは不要であり、単に例のコンポーネントであることを理解されたい。
【０１４７】
データストア１５１０は、特定の態様に関するデータを格納するために、複数の別個のデータテーブル、データベースまたは他のデータストレージメカニズム、及び媒体を含み得る。たとえば、示されるデータストアは、生産側にコンテンツを提供するために使用されることができる生産データ１５１２及びユーザ情報１５１６を格納するためのメカニズムを含む。また、データストアは、報告、分析、または他の係る目的のために使用されることができる、ログデータ１５１４を格納するためのメカニズムを含むと示される。ページ画像情報及びアクセス権情報等のデータストアに格納される必要があり得る多くの他の態様が存在し得、それらは、必要に応じて上に列記されるメカニズムのうちのいずれか、またはデータストア１５１０内のさらなるメカニズムに格納され得ることを理解されたい。データストア１５１０は、データストアと関連付けられたロジックを通して、アプリケーションサーバ１５０８からインストラクションを受信し、インストラクションに応答してデータを入手、更新またはそれ以外の場合処理するよう動作可能である。一例では、ユーザは特定のタイプのアイテムに対する検索要求を提示する可能性がある。この場合、データストアは、ユーザ情報にアクセスしてユーザのアイデンティティを検証する可能性があり、そのタイプのアイテムについての情報を入手するためにカタログ詳細情報にアクセスすることができる。次いでユーザがユーザデバイス１５０２のブラウザを介して見ることができるウェブページ上に列記する結果などの情報は、ユーザに返すことができる。関心のある特定のアイテムの情報は、ブラウザの専用ページまたはウィンドウ内でみられることができる。
【０１４８】
各サーバは、通常そのサーバの一般的な管理及び操作のための実行可能なプログラム命令を提供するオペレーティングシステムを含み、通常サーバのプロセッサによって実行されるときに、サーバがその意図される機能を実行できるようにする命令を記憶するコンピュータ可読記憶媒体（例えば、ハードディスク、ランダムアクセスメモリ、読出し専用メモリ等）を含む。サーバのオペレーティングシステム及び一般的な機能性の適切な実装は既知であるまたは市販されており、特に、本明細書の開示に鑑みて当業者によって容易に実装される。
【０１４９】
一実施形態における環境は、１つ以上のコンピュータネットワークまたは直接接続を使用し、通信リンクを介して相互接続されるいくつかのコンピュータシステム及び構成要素を利用する、分散型コンピューティング環境である。しかしながら、係るシステムが図１５に示されるよりも少ない数または多い数のコンポーネントを含むシステムにおいて同等に良好に動作し得ることは、当業者によって理解される。したがって、図１５のシステム１５００の描写は、本質的に例示であり、本開示の範囲を限定するものではないと見なされるべきである。
【０１５０】
多様な実施形態は多種多様な動作環境でさらに実装されることができ、該動作環境は場合によっては、いくつかのアプリケーションのいずれかを操作するために使用されることができる１つ以上のユーザコンピュータ、コンピューティングデバイス、または処理装置を含むことがある。ユーザデバイスまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップコンピュータまたはラップトップコンピュータのいくつかの汎用パーソナルコンピュータ等のいずれか、ならびに携帯電話向けソフトウェアを実行し、かついくつかのネットワーキングプロトコル及びメッセージングプロトコルをサポートできる、セルラーデバイス、無線デバイス、及びハンドヘルドデバイスを含むことがある。係るシステムは、さまざまな市販のオペレーティングシステムならびに開発及びデータベース管理等の目的のための他の既知のアプリケーションを実行するいくつかのワークステーションを含むこともある。また、これらのデバイスは、ダミー端末、シンクライアント、ゲーム機、及びネットワークを介して通信できる他のデバイス等の他の電子デバイスを含むこともある。
【０１５１】
大部分の実施形態は、伝送制御プロトコル／インターネットプロトコル（「ＴＣＰ／ＩＰ」）、オープンシステムインターコネクション（「ＯＳＩ」）、ファイル転送プロトコル（「ＦＴＰ」）、ユニバーサルプラグアンドプレイ（「ＵｐｎＰ」）、ネットワークファイルシステム（「ＮＦＳ」）、共通インターネットファイルシステム（「ＣＩＦＳ」）、及びＡｐｐｌｅＴａｌｋ等のさまざまな市販のプロトコルのいずれかを使用し、通信をサポートするための当業者によく知られているだろう少なくとも１つのネットワークを活用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク、及びその任意の組合せであることがある。
【０１５２】
ウェブサーバを利用する実施形態では、ウェブサーバは、ハイパーテキスト転送プロトコル（「ＨＴＴＰ」）サーバ、ＦＴＰサーバ、共通ゲートウェイインタフェース（「ＣＧＩ」）サーバ、データサーバ、Ｊａｖａサーバ、及びビジネスアプリケーションサーバを含むさまざまなサーバまたは中間層アプリケーションのいずれかを実行できる。また、サーバ（複数可）はＪａｖａ（登録商標）、Ｃ、Ｃ＃、もしくはＣ＋＋などの任意のプログラミング言語、またはＰｅｒｌ、Ｐｙｔｈｏｎ、もしくはＴＣＬなどの任意のスクリプト言語、ならびにその組み合せで作成された１つ以上のスクリプトまたはプログラムとして実装されてよい１つ以上のウェブアプリケーションを実行することによってなど、ユーザデバイスからの要求に応えてプログラムまたはスクリプトを実行し得る。また、サーバ（複数可）は、Ｏｒａｃｌｅ（登録商標）、Ｍｉｃｒｏｓｏｆｔ（登録商標）、Ｓｙｂａｓｅ（登録商標）、及びＩＢＭ（登録商標）から市販されているものを含むがこれらに制限されないデータベースサーバを含んでもよい。
【０１５３】
環境は、上述のさまざまなデータストアならびに他のメモリ及び記憶媒体を含むことがある。これらは、コンピュータの１つ以上にローカルな（及び／もしくはそこに常駐する）またはネットワーク全体でのコンピュータのいずれかまたはすべてから遠く離れた記憶媒体上等のさまざまな場所に常駐することがある。実施形態の特定の一式では、情報は、当業者によく知られているストレージエリアネットワーク（「ＳＡＮ」）に常駐することがある。同様に、コンピュータ、サーバ、または他のネットワークデバイスによる機能を実行するためのあらゆる必要なファイルは、必要に応じてローカルに及び／または遠隔に記憶されてよい。システムがコンピュータ化デバイスを含む場合、係るそれぞれのデバイスはバスを介して電気的に結合されてよいハードウェア要素を含むことがあり、該要素は、例えば、少なくとも１つの中央演算処理装置（「ＣＰＵ」）、少なくとも１つの入力装置（例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド）及び少なくとも１つの出力装置（例えば、表示装置、プリンタ、またはスピーカー）を含むことがある。また、係るシステムは、例えば、ディスクドライブ、光学式記憶デバイス等の１つ以上の記憶装置、及び例えば、ランダムアクセスメモリ（「ＲＡＭ」）または読出し専用メモリ（「ＲＯＭ」）等のソリッドステート記憶装置、ならびに取り外し可能な媒体デバイス、メモリカード、フラッシュカード等を含んでもよい。
【０１５４】
また、係るデバイスは、上述のようにコンピュータ可読記憶媒体読取り装置、通信装置（例えば、モデム、ネットワークカード（無線または有線））、赤外線通信装置等）、及び作業メモリを含むこともある。コンピュータ可読記憶媒体読取り装置は、遠隔記憶装置、ローカル記憶装置、固定記憶装置、及び／または取外し可能な記憶装置を表すコンピュータ可読媒体、ならびにコンピュータ可読情報を一時的に及び／またはより恒久的に含む、記憶する、伝送する、及び取り出すための記憶媒体と接続できる、またはそれらを受け取るように構成できる。また、システム及び多様なデバイスは、通常、オペレーティングシステム及びクライアントアプリケーションもしくはウェブブラウザ等のアプリケーションプログラムを含む、いくつかのソフトウェアアプリケーション、モジュール、サービス、または少なくとも１つの作業用メモリデバイスの中に位置する他の要素を含む。代替の実施形態が、上述されたものの多数の変形形態も有してよいことが理解されるべきである。例えば、カスタマイズされたハードウェアが使用される可能性もある、及び／または特定の要素がハードウェア、（アプレット等のポータブルソフトウェアを含む）ソフトウェア、または両方で実装される可能性もある。さらに、ネットワーク入力／出力装置などの、他のコンピューティングデバイスへの接続が用いられてよい。
【０１５５】
コードまたはコードの部分を含むための記憶媒体及びコンピュータ可読媒体は、ＲＡＭ、ＲＯＭ、電子的消去プログラム可能型読取専用メモリ（「ＥＥＰＲＯＭ」）、フラッシュメモリ、もしくは他のメモリ技術、コンパクトディスクリードオンリーメモリ（「ＣＤ−ＲＯＭ］）、デジタルバーサタイルディスク（ＤＶＤ）、もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、または所望の情報を記憶するために使用されることができ、システムデバイスによってアクセスされることができる任意の他の媒体を含む、コンピュータ可読インストラクション、データ構造、プログラムモジュール、または他のデータなどの情報の記憶及び／または伝送のために任意の方法または技術で実装される揮発性及び不揮発性の媒体、リムーバブル及び非リムーバブルの媒体などであるが、これに限定されるものではない記憶媒体及び通信媒体を含む当該技術において既知の、または使用される任意の適切な媒体を含むことがある。本開示及び本明細書に示される教示に基づいて、当業者は多様な実施形態を実装するための他の方法及び／または手法を理解するであろう。
【０１５６】
したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考えられるべきである。しかしながら、特許請求の範囲で説明される本開示のより広範の精神及び範囲から逸脱することなく、多様な修正形態及び変形形態が本明細書に加えられ得ることは明らかである。
【０１５７】
他の変形形態は、本開示の趣旨内にある。したがって、開示された技術は多様な修正形態及び代替構成の影響を受けやすいが、その特定の示される実施形態は図面に示され、上記に詳細に説明されている。しかしながら、本開示を開示された特定の１つ以上の形に限定する意図はなく、逆に意図は、添付の特許請求の範囲によって定義される本開示の精神及び範囲に入るすべての修正形態、代替的な構成、及び均等物を包含することであることが理解されるべきである。
【０１５８】
開示される実施形態を説明する文脈における（特に以下の特許請求の範囲の文脈における）用語「ａ」、「ａｎ」、及び「ｔｈｅ」ならびに同様の指示語の使用は、本明細書において別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、単数及び複数の双方を網羅すると解釈される。用語「ｃｏｍｐｒｉｓｉｎｇ（備える）」、「ｈａｖｉｎｇ（有する）」「ｉｎｃｌｕｄｉｎｇ（含む）」及び「ｃｏｎｔａｉｎｉｎｇ（含む）」は、特に断りのない限り、オープンエンド用語（すなわち「を含むが、これらに限定されるものではない」を意味する）として解釈されるべきである。用語「ｃｏｎｎｅｃｔｅｄ（接続された）」は、たとえ介在するものがあっても部分的にまたは完全に、中に含まれる、取り付けられる、また互いに結合されるとして解釈されるべきである。本明細書での値の範囲の列挙は、本明細書に別段の指示がない限り、単に、範囲内に入るそれぞれの別個の値に個別に言及する短縮方法としての役割を果たすことが意図され、各個別の値は、それが個別に本明細書に記載されているかのように本明細書に組み込まれる。本明細書に記載されるすべての方法は、本明細書で別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、任意の適切な順序で実行できる。本明細書で示される任意の及びすべての例、または例示的な言語（例えば、「など」）は、単に本開示の実施形態をよりよく示すことを意図しており、別段の主張がない限り、本開示の範囲を限定するものではない。本明細書のいかなる言葉も、本開示の実施にとって必須として任意の請求されていない要素を示すものと解釈されるべきではない。
【０１５９】
特に断りのない限り、句「Ｘ、Ｙ、またはＺの少なくとも１つ」のような選言的な言葉は、項目、用語等がＸ、Ｙ、もしくはＺまたはそのいずれかの組合せ（例えば、Ｘ、Ｙ、及び／またはＺ）であってよいことを示すために一般的に用いられるとして文脈の中で理解されることが意図される。したがって、係る選言的言語は、特定の実施形態がＸの少なくとも１つ、Ｙの少なくとも１つ、及びＺの少なくとも１つがそれぞれ存在することを必要とすることを暗示することを概して意図しておらず、意味するべきではない。
【０１６０】
本開示を実施するために発明者に知られている最良の形態を含む本開示の好ましい実施形態が本明細書に説明される。これらの好ましい実施形態の変形形態は、前述の説明を読むと当業者に明らかになり得る。本発明者らは、当業者がこのような変形形態を必要に応じて利用することを期待し、本発明者らは本開示が本明細書に具体的に記載されたものとは別の方法で実施されることを意図する。したがって、本開示は、適用法によって許容されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正形態及び均等物を含む。さらに、本明細書に別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、上述要素のすべての考え得る変形形態での上記要素の任意の組合せが本開示に包含される。
【０１６１】
あたかも各参考文献が個々にかつ具体的に参照によりその全体として本明細書に援用されることが示されるかのように、本明細書で引用した刊行物、特許出願及び特許を含むすべての参考文献は、同程度に参照により本明細書に援用される。
【図１】
2019503123.tif 000003
【図２】
2019503123.tif 000004
【図３】
2019503123.tif 000005
【図４】
2019503123.tif 000006
【図５】
2019503123.tif 000007
【図６】
2019503123.tif 000008
【図７】
2019503123.tif 000009
【図８】
2019503123.tif 000010
【図９】
2019503123.tif 000011
【図１０】
2019503123.tif 000012
【図１１】
2019503123.tif 000013
【図１２】
2019503123.tif 000014
【図１３】
2019503123.tif 000015
【図１４】
2019503123.tif 000016
【図１５】
2019503123.tif 000017
【国際調査報告】
2019503123.tif 000018
2019503123.tif 000019
2019503123.tif 000020