(58)【調査した分野】(Int.Cl.,DB名)
前記通信プロトコルは、ユーザデータグラムプロトコル(UDP)であり、前記パケットのヘッダー内の前記フィールドは、UDPヘッダーのソースポートフィールドである、請求項1に記載の方法。
前記パケットのヘッダー内の前記フィールドは、IPヘッダー内のソースIPアドレス、IPヘッダー内の宛先IPアドレス、IPv6ヘッダー内のFlowIDフィールド、またはマルチプロトコルラベルスイッチング(MPLS)ラベルである、請求項1または2に記載の方法。
前記パケットの送信後に、または前記パケットが前記宛先アドレスで受信された確認を受信した後に、アクティブパケットの前記シーケンス番号からパケットの前記シーケンス番号を除去することをさらに備える、請求項4に記載の方法。
1つ以上の物理的なポートを介して前記ネットワークへ前記複数のフローレットの各フローレット内のパケットを送信することをさらに備える、請求項1〜6のいずれかに記載の方法。
前記ネットワークへ前記複数のフローレットの各フローレット内の前記パケットを送信することは、各パケットが各パケットのヘッダー内の情報に基づき送信される1つの物理的なポートを、複数の物理的なポートから選択することを備える、請求項7に記載の方法。
送信される前記パケットについての前記フローレットを決定することは、前記ユーザアプリケーションからの前記データ以外のデータについてのパケットのヘッダー内の前記フィールド内に設定される値に基づく、請求項1〜8のいずれかに記載の方法。
フローレットについての元の経路が閾値を超えるレイテンシまたは廃棄率を有する判定に応答して、前記ネットワークを介して前記フローレット及びその関連したパケットを異なる経路へ割り当てることをさらに備える、請求項1〜10のいずれかに記載の方法。
それぞれの前記1つ以上の物理的なポートは、一意のIPアドレスを有し、前記パケットのヘッダー内の前記フィールドは、IPヘッダーのソースIPアドレスフィールドである、請求項12に記載の装置。
前記装置は、システムオンチップ(SOC)、プロセッサ、ネットワークインタフェースカード(NIC)、スイッチ特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)のうちの1つを含む、請求項12または請求項13に記載の装置。
前記コンピュータ可読ストレージデバイスは、前記処理ロジックに、前記パケットの送信後に、または前記パケットが前記宛先アドレスで受信された確認を受信した後に、前記アクティブパケットのシーケンス番号からその前記パケットのシーケンス番号を除去させるインストラクションをさらに含む、請求項12に記載の装置。
【発明を実施するための形態】
【0004】
以下の説明では多様な実施形態が説明される。説明の目的のため、特定の構成及び詳細が実施形態の完全な理解を提供するために記載される。しかしながら、本実施形態が特定の詳細なしに実施され得ることも当業者に明らかとなるだろう。さらに、周知の特徴は、説明されている実施形態を不明瞭にしないために省略され得る、または簡略化され得る。
【0005】
本明細書に使用されるように、フローまたはデータフローは、いくつかの事例において、順にネットワークのトラバースを行う、関連したデータパケットのストリームを一般的に指す。ソースエンドポイント上のユーザアプリケーションは、ネットワークを介してユーザアプリケーションデータストリームを宛先エンドポイントへ送信することが望ましい可能性がある。データは、1つ以上のメッセージ、1つ以上のコマンド、または1つ以上のトランザクションであってもよい。いくつかの事例において、ソースエンドポイント及び宛先エンドポイントは、一意のIPアドレスを各有することができる。これらのような事例において、単一のTCPまたはUDP接続においてソースIPアドレスから宛先IPアドレスへ転送されることを意図されるユーザアプリケーションデータストリームは、データフローまたはフローと称されることができる。いくつかの他の事例において、複数のエンドポイントは、IPアドレスを共有することができるため、エンドポイント間のユーザアプリケーションデータストリームは、1組のソース及び宛先IPアドレス間のIPレベルデータストリーム内で多重化されることが可能である。これらの事例において、単一のTCPまたはUDP接続においてソースIPアドレスから宛先IPアドレスへ転送されることを意図される複数のエンドポイントからのユーザアプリケーションデータストリームは、データフローまたはフローと称されることができ、ソースIPアドレスは、複数のエンドポイントにより共有される。いくつかの他の事例において、エンドポイントは、複数のIPアドレスを含むことができ、ユーザアプリケーションデータストリームは、複数のIPアドレスを使用して複数の経路を通り送信されることを意図されることができる。これらの事例において、単一のTCPまたはUDP接続においてソースIPアドレスから宛先IPアドレスへ転送されることを意図される、ユーザアプリケーションデータストリームの各部分は、データフローまたはフローと称されることができる。
【0006】
また本明細書に使用されるように、経路は、データパケットが2つのIPアドレス間のネットワークを経由するルートを一般的に指す。フローレットは、単一の経路を介して転送されるフローまたはデータフローと関連するパケットのグループを一般的に指す。
【0007】
本開示の実施形態は、高速データ転送のための方法及びシステムを提供し、これらの方法及びシステムは、データセンター環境などの、ネットワーク環境内のさまざまな経路間の負荷を分散させ、イコールコストマルチパス(ECMP)ルーティングを支援することが可能であるため、データセンター、高性能コンピューティング(HPC)、ストレージエリアネットワーク(SAN)、またはローカルエリアネットワーク(LAN)などの、アプリケーションについてのネットワーク容量のより良い使用率を達成することが可能である。
【0008】
いくつかの、またはすべての方法は、実行可能インストラクションにより構成される1つ以上のコンピュータシステムの制御下で実行されることができ、ハードウェアまたはそれらの組み合わせにより、1つ以上のプロセッサ上で集合的に実行するコード(例えば、実行可能なインストラクション、1つ以上のコンピュータプログラム、または1つ以上のアプリケーション)として実装されることができる。コードは、例えば、1つ以上のプロセッサにより実行可能な複数のインストラクションを含むコンピュータプログラムの形式で、コンピュータ可読記憶媒体に格納されることができる。コンピュータ可読記憶媒体は、非一時的であることができる。
【0009】
本明細書に記述される技術は、データフローのいくつかのパケットについてのパケットヘッダーに異なるソースポートを割り当てるような、データパケットヘッダー内でフィールドを操作することにより、ネットワークを介して異なる経路を各取る複数のフローレットに、2つのエンドポイント、または2つのIPアドレス間のデータフローを分割することを備えるため、パケットは、スイッチの異なる物理的なポートへルーティングされ、異なるIPアドレスを使用せずにスイッチングされたネットワークファブリックを通して異なる経路を取ることができる。フローレット数、及びフローレット内のパケット数を制御し、ネットワーク内の経路またはノードに過負荷をかけることを回避することができる。データフロー分割は、ユーザアプリケーションまたはホストが分割を認識することを不要であることができるように、ネットワークインタフェースカードまたはネットワークアダプタデバイスにおいて行われることができる。パケットは、順番に、または不順に宛先エンドポイントへ送達されることが可能である。異なるフローレットから宛先エンドポイントにより受信されるパケットは、パケットヘッダー内の情報に基づき宛先エンドポイントにおいてアプリケーションにより再順序付けされる、または再組み立てされることができる。
【0010】
I.高速ネットワーク
以下の節は、データセンターなどの例示的な環境内の本開示のさまざまな実施形態を記述する。本明細書に記述される方法及びシステムがネットワークにおいてスイッチファブリックを通すデータ通信を伴ういずれかの他のアプリケーションにおいて使用されることができることを理解する。
【0011】
データセンターは、スペース及び他のリソースの効率的な使用を行うために標準化されたアセンブリ(ラック)内に配置される複数のサーバを一般的に含む。各ラックは、16、32、64、またはそれ以上のサーバなどの、複数のサーバを含むことができる。同一のラックのサーバと異なるラックからのサーバとの間の相互接続は、1つ以上のスイッチファブリックにより達成されることが可能である。スイッチファブリックは、アクセスレイヤ、アグリゲーションレイヤ、及びコアレイヤを含むことができる。アクセスレイヤは、同一のラック(トップオブラック、またはToR)内に、またはエンドオブロー(EoR)においてのいずれか一方でサーバに直接接続される、スイッチなどのデバイスを含むことができる。アグリゲーションレイヤは、アクセスレイヤドメイン間の接続性を提供するためにアクセスレイヤデバイスを集約する、スイッチなどのデバイスを含むことができる。コアレイヤは、データセンター内に、または外界に関する地理的位置にわたり、のいずれか一方で複数のアグリゲーションレイヤデバイスを相互接続する、ルーターなどのデバイスを含むことができる。
【0012】
高性能コンピューティング、ビッグデータ、Web2.0、及び検索アプリケーションは、リアルタイムに大量のユーザ生成データを管理し、理解し、これらに対応することにより決まる。より多くのユーザがより多くのアプリケーション及びプラットフォームを提供するにつれ、データは、もはや算術的に増加せずに、指数関数的に増加している。データの増加に追いつくために、データセンターは、データにアクセスし、これを分析することが可能である、データ容量及び速度の両方において、同様に増加させる必要がある。今日、スケーラブルなデータセンターは、ハードウェア構成(コンピュータのクラスタ、及びストレージ)、及びソフトウェア構成の両方において、並列インフラストラクチャを一般的に有し、最もスケーラブルで、エネルギー効率の高い、高性能相互接続インフラストラクチャを採用する。
【0013】
図1は、データセンター環境についての例示的なネットワークアーキテクチャ100を示す。ネットワークアーキテクチャ100は、さまざまなデータセンター相互接続のために、複数のデータセンターサーバ102aから102d、及び1つ以上のスイッチファブリックを含むことができる。たとえば、
図1に示されるように、サーバ102aから102dは、高性能コンピューティング(HPC)クラスタ118、ローカルエリアネットワーク(LAN)116、またはストレージエリアネットワーク(SAN)114へ、またはこれからデータを転送することができる。
【0014】
各サーバ102aから102dは、アクセスレイヤスイッチ104a、104b、104c、または104dと接続されることができる。各アクセスレイヤスイッチは、データが異なる入力ポートに入り、異なる出力ポートへスイッチングされることができるように、複数の物理的なポートを含むことができる。アクセスレイヤスイッチ障害の事例の冗長性について、データセンター環境のためのネットワークアーキテクチャは、冗長化サーバ及びアクセスレイヤスイッチ(示されない)も含むことができる。サーバ102aから102dとアクセスレイヤスイッチ104aから104dとの間の通信経路は、InfiniBand、データセンターイーサネット(DCE)、ギガビットイーサネット、ファイバチャネル、またはファイバチャネルオーバーイーサネット(FCoE)などの、データセンターブリッジングまたは別個のチャネルを支援することができる。
【0015】
アクセスレイヤスイッチ104aから104dは、アグリゲーションレイヤにおいてアグリゲーションレイヤスイッチと接続されることができる。さらに、各ネットワーククラウドについて少なくとも2つのアグリゲーションレイヤスイッチは、スイッチ障害の事例において冗長性のために使用されることができる。たとえば、アグリゲーションレイヤスイッチ106a及び106bは、たとえば、コアレイヤ112を介して、アクセスレイヤスイッチ104a及び104bとHPC118との間のルーティングのためにHPC互換性であることができる。アクセスレイヤスイッチ104a及び104bとアグリゲーションレイヤスイッチ106a及び106bとの間の通信経路は、高速データ転送のためにInfiniBand接続であることができる。アグリゲーションレイヤスイッチ108は、アクセスレイヤスイッチ104cとSAN114との間のデータをルーティングするために使用されることができる。アクセスレイヤスイッチ104cとアグリゲーションレイヤスイッチ108とSAN114との間の通信経路は、ファイバチャネル(FC)であることができる。アグリゲーションレイヤスイッチ110は、アクセスレイヤスイッチ104dとLAN116との間のルーティングのために提供することができる。ギガビットイーサネットまたはデータセンターイーサネットは、アクセスレイヤスイッチ104dをアグリゲーションレイヤスイッチ110及びLAN116と接続するために使用されることができる。
【0016】
HPCシステムは、気候研究、分子モデリング、物理的なシミュレーション、暗号解読、地球物理学的モデリング、自動車及び航空宇宙機の設計、金融モデリング、及びデータマイニングなどの、高度な計算集約型タスクのより高速な実行を可能にする、並列処理を越える先進的な計算を実行する。所与の計算の実行時間は、中央処理装置(CPU)またはグラフィックプロセッシングユニット(GPU)コアの数、及びそれらの使用率、ならびに相互接続の性能、効率、及びスケーラビリティなどの、多くの要因に依存する。効率的なHPCシステムは、数千のマルチプロセッサノードと高速ストレージシステムとの間の高帯域幅、低レイテンシ接続を一般的に用いる。
【0017】
InfiniBand(IB)は、高性能コンピューティングにおいて使用される、非常に高いスループット、及び非常に低いレイテンシを備えるコンピュータネットワーキング通信規格である。それは、コンピュータまたはサーバ間、及びこれらの内の両方でデータ相互接続のために使用されることが可能である。またInfiniBandは、サーバとストレージシステムとの間の直接相互接続、またはスイッチングされた相互接続のいずれか一方として使用されることが可能である。ゼロコピー及びリモートダイレクトメモリアクセス(RDMA)などの、InfiniBandの特徴は、送信側メモリから受信側メモリへホストプロセッサを伴わずにデータを直接に転送することによりプロセッサオーバーヘッドを削減することを支援する。またIBインタフェースは、InfiniBandより低レベルの異なるインフラストラクチャを使用し、InfiniBandよりさらにスケーラブルである、RDMAオーバーイーサネット(RoCE)において使用されることが可能である。
【0018】
InfiniBandアーキテクチャは、処理ノード、ストレージノード、及びI/Oノードを相互接続するためにスイッチングされたネットワークファブリックを定義する。InfiniBandネットワークは、スイッチ、ホストチャネルアダプタ(HCA)またはターゲットチャネルアダプタ(TCA)などのアダプタ、及び通信用のリンクを含むことができる。通信のために、InfiniBandは、転送サービス(信頼性のある接続、信頼性のない接続、信頼性のあるデータグラム、及び信頼性のないデータグラム)のいくつかの異なるクラスを支援する。
【0019】
図2は、InfiniBandファブリック210を使用して高性能コンピューティング(HPC)環境200を示す。InfiniBandファブリック210は、シリアルポイントツーポイントリンクのスイッチングされたファブリックアーキテクチャに基づき、InfiniBandリンクは、サーバもしくはプロセッサノード内で主に使用されるホストチャネルアダプタ(HCA)、またはストレージサブシステムもしくはI/Oシャーシ内で主に使用されるターゲットチャネルアダプタ(TCA)のいずれか一方に接続されることが可能である。
図2に示されるように、InfiniBandファブリック210は、ファットツリーネットワークまたはClosネットワークなどの、階層化ネットワークに配置されることができる、複数のスイッチ204aから204dを含む。スイッチ204aから204dは、複数のノード202aから202hに接続され、いずれか2つのノード間に複数の経路を提供することができる。いくつかの事例において、2つのノード間の経路数は、1000超、10,000超、100,000超、または1,000,000超であることができる。ノード202aから202hは、ホストシステム、プロセッサノード、ストレージサブシステム、及びI/Oシャーシのいずれかの組み合わせであることができる。またInfiniBandファブリック210は、他のInfiniBandサブネット、LAN、ワイドエリアネットワーク(WAN)、またはインターネットなどの、他のネットワーク208との接続のために1つ以上のルーターを含むことができる。
【0020】
相互接続されたスイッチ204aから204d及びルーター206は、存在する場合に、スイッチファブリック、ファブリック、ネットワークファブリック、または単にネットワークと称されることができる。用語「ファブリック」、及び「ネットワーク」は、本明細書において互換的に使用されることができる。
【0021】
InfiniBandまたはRoCE動作は、通信ハードウェアにより実行されるインストラクションをキューに入れる機能に基づく。送信動作についての作業キュー、及び受信動作についての作業キューがあることができる。送信キューは、データが要求側メモリと受信側メモリとの間で転送される方法を決定するインストラクションを含むことができる。受信キューは、受信されたデータをどこに格納するかについてのインストラクションを含むことができる。要求を提示する場合に、そのインストラクションは、先入れ先出し(FIFO)などの順番に実行されることができる、適切な作業キューに配置される。
【0022】
ホストチャネルアダプタは、ローカルチャネルインタフェースを表すことができる。チャネルインタフェースは、InfiniBandサービスをホストに提供する、ハードウェア、ファームウェア、及びソフトウェアを含むことができる。送信動作の事例において、チャネルアダプタは、作業タイプを解釈し、メッセージを作成し、それを複数のパケットにセグメント化し(必要な場合)、ルーティング情報を追加し、これらのパケットをポートロジックへ送信する。ポートロジックは、その宛先へファブリックを介するリンクにわたりパケットを送信するために応答可能である。パケットが宛先に到達したときに、受信ポートロジックは、パケットを検証し、チャネルアダプタは、受信キュー内の宛先に受信したパケットを入れ、それらを処理する。要求される場合に、チャネルアダプタは、肯定応答(ACK)を作成し、このACKをソースホストへ返送することができる。
【0023】
送信作業キュー(SQ)及び受信作業キュー(RQ)は、通信−キューペア(QP)について一意のエンティティを作成するために組にされることが可能である。QPは、アプリケーションとデバイスとの間の直接メモリ間転送を介して通信を達成するメモリベースの抽象化である。アプリケーションは、キューペアを共有しない。QPは、HCAのホスト側に実装されるメッセージ転送エンジンであることができ、双方向である。それは、アダプタリソースをユーザまたはアプリケーション専用にし、データ送受信動作用にカーネルをバイパスするために使用されることが可能である。QPの送信キュー及び受信キューを使用して、HCAへ作業キュー要素(WQE)内のメッセージをバッファに格納し渡す。各QPはチャネルアダプタにより割り当てられるキューペア番号(QPN)を含む。QPNは、チャネルアダプタ内のQPを一意的に識別する。
【0024】
図3は、ソースエンドポイント302aと宛先エンドポイント302bとの間のInfiniBandネットワーク接続のブロック
図300を示す。ソースエンドポイント302aは、複数のアプリケーション304a、カーネル306a、及びネットワークインタフェースカード(NIC)またはアダプタ308aを含むことができる。各アプリケーション304aは、送信される、または受信されるメッセージを格納するためにそれと関連するバッファ310aを含むことができる。同様に、宛先エンドポイント302bは、複数のアプリケーション304b、カーネル306b、及びネットワークインタフェースカード(NIC)またはアダプタ308bを含むことができる。各アプリケーション304bは、送信される、または受信されるメッセージを格納するためにそれと関連するバッファ310bを含むことができる。QPは、InfiniBandファブリック350を介して、ソースエンドポイント302a上のアプリケーション304aと、宛先エンドポイント302b上のアプリケーション304bとの間に作成されることが可能である。
【0025】
QPを作成した後に、メッセージは、リモートデータメモリアクセス(RDMA)を使用してソースエンドポイント302aから宛先エンドポイント302bへ送信されることができる。RDMAは、InfiniBandファブリック上のサーバが直接に別のサーバのメモリにアクセスすることを可能にする。RDMAのアプリケーションの実施例は、データベースサーバクラスタである。データベースサーバクラスタは、RDMAエージェントをそのコア機能に追加することができ、RDMAエージェントは、異なるノード上で実行する2つのデータベースインスタンスが相互と直接通信することを可能にし、すべてのカーネルレベルの通信動作をバイパスするため、永続ストレージからクラスタノードのRAMメモリにデータをコピーする回数を減少させる。RDMA動作は、ローカルバッファ、ピアバッファのアドレス、及びリモートピアバッファの操作のためのアクセス権を指定することができる。
【0026】
図4は、ソースエンドポイント上のクライアントアプリケーションまたはプロセス402aと、宛先エンドポイント上のリモートアプリケーションまたはプロセス402bとの間のInfiniBand接続内のキューペアを示す。InfiniBandは、実行作業キューの使用を通してソフトウェアクライアントからトラフィック制御をオフロードする。クライアントは、作業キューを開始し、つぎにInfiniBandに作業キューの管理を任せる。デバイス間の各通信チャネルのために、作業キューペア(WQP)を各エンドに割り当てることができる。たとえば、クライアントプロセス402aは、トランザクションを作業キューエントリまたは要素(WQE)404a内に配置することができ、トランザクションは、つぎにQP410a内の送信キュー416aからのソースチャネルアダプタ408aにより処理され、宛先エンドポイント上のリモートプロセス402bへ送信される。送信キュー416a内のデータは、転送エンジン412aにより処理され、ソースチャネルアダプタ408aのポート414aを介してInfiniBandファブリック450へ送信されることができる。つぎにデータは、ポート414bを介して宛先チャネルアダプタ408bにより受信され、転送エンジン412bにより処理され、受信キュー418b内に入れられることができる。宛先エンドポイントが応答したときに、宛先チャネルアダプタ408bは、完了キューエントリまたはイベント(CQE)406aを介してクライアントプロセス402aへステータスを返す。ソースエンドポイントは、複数のWQEをポスティングすることができ、ソースチャネルアダプタ408aは、各通信要求を処理することができる。ソースチャネルアダプタ408aは、適切な優先順位で各WQEについてのステータスを提供する完了キューエントリ(CQE)406aを生成することができる。これは、トランザクションを処理しながら、ソースエンドポイントが他のアクティビティを継続することを可能にする。
【0027】
同様に、リモートプロセス402bは、トランザクションをWQE404b内に配置することができ、つぎにトランザクションは、QP410b内の送信キュー416bから宛先チャネルアダプタ408bにより処理され、ソースエンドポイント上のクライアントプロセス402aへ送信される。送信キュー416b内のデータは、転送エンジン412bにより処理され、宛先チャネルアダプタ408bのポート414bを介してInfiniBandファブリック450へ送信されることができる。つぎにデータは、ポート414aを介してソースチャネルアダプタ408aにより受信され、転送エンジン412aにより処理され、受信キュー418a内に入れられることができる。ソースエンドポイントは、CQE406bを介するリモートプロセス402bへステータスを返すことにより応答することができる。
【0028】
InfiniBandファブリック450は、
図2に説明されるように、ファブリック210などのファブリックであることができる。スパニングツリープロトコルを使用して構築されるネットワーク、またはレイヤ3ルーティングコアネットワークにおいて、単一の「最適な経路」は、1セットの代替の経路から通常選択される。すべてのデータトラフィックは、「最適な経路」が輻輳して、パケットを廃棄するポイントまでその「最適な経路」を取る。代替の経路は、ループを形成することを防止するために、トポロジーアルゴリズムがそれらをあまり望ましくないと、またはそれらを除去したとみなすことができるために利用されない。すべての利用可能なリンクを引き続き使用して、ループフリートポロジーを維持しながら、スパニングツリーを使用することから移行して離れることが望ましい。
【0029】
長年にわたり、さらに広範囲でClosまたは「ファットツリー」ネットワークを使用している。Closネットワークは、マルチステージスイッチングネットワークである。このようなネットワークの利点は、小型スイッチのみを使用することにより多数の入力及び出力ポート間の接続を行うことが可能であり、ネットワークを容易に拡張することが可能であることである。ポート間の2部マッチングは、すべてのステージでスイッチを構成することにより行われることが可能である。
【0030】
図5は、3ステージClosネットワーク500の実施例を示す。Closネットワーク500は、r n×mイングレスステージクロスバースイッチ502aから502d、m r×r中間ステージクロスバースイッチ504aから504e、及びr m×nイーグレスステージクロスバースイッチ506aから506dを含む。
図5において、nは、各rイングレスステージクロスバースイッチ502aから502d上の入力ポート数を表し、mは、各rイングレスステージクロスバースイッチ502aから502d上の出力ポート数を表す。各イングレスステージスイッチと各中間ステージスイッチとの間に1つの接続、及び各中間ステージスイッチと各イーグレスステージスイッチとの間に1つの接続がある。m≧nに関して、Closネットワークは、クロスバースイッチのようにノンブロッキングであることが可能である。
【0031】
図6は、データセンター内で使用される折り返しClosネットワーク600の実施例を示す。Closネットワーク600は、トップオブラック(ToR)スイッチ604a及び604b、ならびにスパインスイッチ606を含む。ToRスイッチ604a及び604bは、リーフスイッチであり、スパインスイッチ606に接続される。リーフスイッチ604aは、
図5においてクロスバースイッチ502aから502dとしてイングレススイッチと称されることができ、リーフスイッチ604bは、
図5においてクロスバースイッチ506aから506dとしてイーグレススイッチと称されることができる。リーフスイッチ604a及び604bは、複数のサーバ602に接続されることができる。スパインスイッチ606は、リーフスイッチ604a及び604bに接続する。リーフスイッチ604a及び604bは、相互に直接的に接続されないが、スパインスイッチ606を介して間接的に接続される。このスパイン−リーフアーキテクチャにおいて、リーフスイッチからのアップリンク数は、スパインスイッチ数に等しく、スパインスイッチからのダウンリンク数は、リーフスイッチ数に等しい。接続の総数は、リーフスイッチ数にスパインスイッチ数を乗算する、たとえば、
図6において8×6=48リンクである。
【0032】
Closネットワーク600において、すべての下位層スイッチ(リーフスイッチ)は、フルメッシュ型トポロジー内の各最上位層スイッチ(スパインスイッチ)に接続される。下位層スイッチとそれらのアップリンクとの間で行われるオーバーサブスクリプションがない場合に、つぎにノンブロッキングアーキテクチャを達成することが可能である。1セットの同一で、安価なスイッチを使用して、ツリーを作成し、本来であれば構築するためにはるかにコストがかかる高性能及び復元力を得ることが可能である。
【0033】
Closネットワーク600は、より大規模なネットワークを構築するために容易に拡張されることができる。たとえば、
図7は、コアスイッチまたはルーター702の追加のレイヤを使用して2つ以上のClosネットワーク600を接続することによるデータセンター環境内のマルチステージClosネットワーク700を示す。Closネットワーク700は、リーフまたはアクセスレイヤ704、スパインまたはアグリゲーションレイヤ706、及びコアレイヤ708を含むことができる。
【0034】
図6または
図7に示されるようなClosネットワーク内の経路は、トラフィック負荷をスパインまたはコアスイッチ間で均等に分散させることが可能であるようなルーティング技術を使用してスイッチまたはルーターのポートを選択することにより選択されることが可能である。スパインまたはコアスイッチのうちの1つに障害が発生する場合に、それは、データセンターの全体のパフォーマンスをわずかに低下させる可能性がある。
【0035】
II.マルチパスルーティング
ルーティングは、ネットワークにおいてソースノードから宛先ノードへのデータ転送について最適な経路を選択するプロセスである。ルーティング技術の実施例は、イコールコストマルチパス(ECMP)ルーティングである。ECMPは、実質的に均等に分散されたリンク負荷共有または負荷分散を達成することを目的に等コストの複数の経路沿いにパケットをルーティングするための転送メカニズムである。ECMPは、ネットワークにおいてソースノードから宛先ノードへ複数の等コスト経路の使用を可能にする。この利点は、より均等にネットワーク全体へデータトラフィックを分散させ、輻輳を回避し、帯域幅を広げることが可能であることである。またECMPは、リンク障害中に、トラフィックの重大な損失なしで別の等コスト経路へトラフィックフローを迅速に転送することが可能であることから、保護方法である。ECMPに関して、ルーターの転送レイヤ内の負荷分散テーブルに等コスト経路を格納することが可能である。リンク障害の検出時に、1秒以内に、トラフィックの重大な損失なしで残りの等しい経路間にデータトラフィックを分散させることが可能である。
【0036】
ECMPは、いずれかの特別な構成を使用しない。開放型最短経路優先(OSPF)技術などの最短経路優先(SPF)技術を使用して、等コスト経路を計算することが可能であり、つぎにこれらの経路を転送レイヤに通知することが可能である。ルーターは、データフローを識別するパケットヘッダーフィールド経由で、16ビット巡回冗長検査(CRC−16)などの、ハッシュを実行することによりキーを最初に選択することができる。ネットワークにおいてネクストホップは、キースペース内に一意の領域を割り当てられることができる。ルーターは、キーを使用して、どの領域、したがってどのネクストホップを使用するかを(及びどのポートをスイッチまたはルーター上のネクストホップへ接続するかを)決定することができる。
【0037】
ECMPは、発信インタフェースの帯域幅内のいかなる違いも考慮しない。さらに、データセンター環境内の現在のECMPルーティングについて、ハッシュ関数は、同一のフローについて同一のハッシュ値を得るほとんどの、またはすべてのデータセンターノードにつながることができる。したがって、同一の経路は、データセンター環境内のフローにパケットをルーティングするために使用されることができ、他の代替の経路は、十分に利用されていない可能性がある。
【0038】
マルチパスルーティングは、ネットワークパフォーマンスを向上させ、フォールトトレランスを提供するためのメカニズムである。マルチパスTCP(MPTCP)などのネットワーク内の負荷分散、及びInfiniBand内のマルチパス化のためのいくつかのマルチパス技術がある。
【0039】
TCP/IPにおいて、一般的にパケットを順に送達する。したがって、異なる経路上の遅延が異なる可能性があるためにインオーダー送達を確実にしながら、異なる経路上のTCP/IPを使用して、メッセージを複数のパケットに分割し、パケットを送信することは、困難である。MPTCPは、実際にいくつかのサブフローにわたりデータを拡散させながら、アプリケーションへ通常のTCPインタフェースであるようにみえるTCPの変更により、いくつかのIPアドレス/インタフェースを同時に使用する。この利点は、より良いリソース使用率、より良いスループット、及び障害へのより円滑な対応を有する。マルチパスTCPは、無線ネットワークのコンテキストにおいて特に有用である。スマートフォンは、セルラネットワーク、Wi−Fiネットワーク、及び場合によりBluetoothまたはUSBポートを介する他のネットワークへ別個で、同時のインタフェースを有することができる。それぞれのこれらのネットワークは、リモートホストへ到達する可能性がある方式を提供する。スループット内のゲインに加えて、エンドツーエンドTCP接続を中断させることなく、ユーザがネットワークカバレッジ内で、またはこの外で移動する場合に、リンクを追加する、または廃棄することができる。しかしながら、MPTCP内の各サブフローは、異なるソースまたは宛先IPアドレスを使用することができる。
【0040】
InfiniBand内のマルチパス化は、エンドポイントへ複数のローカル識別子(LID)を割り当てることにより達成されることができる。メッセージパッシングインタフェース(MPI)などの上位レベルプロトコルは、複数の経路(MPIマルチレイリングと称される)間でデータを分割する(メッセージをいくつかのチャンクに分割する)こと、及びこれを送信することにより複数のLIDを利用することが可能である。InfiniBand規格は、ネットワークの開発、構成、及びメンテナンスのために応答可能である、サブネットマネージャと言われるエンティティを定義する。ネットワーク内の各InfiniBandポートは、サブネットマネージャにより割り当てられる、1つ以上のLIDにより識別される。サブネット内の各デバイスは、サブネットマネージャによりそれに割り当てられる16ビットLIDを有することができる。サブネット内に送信されるパケットは、アドレスを指定するためにLIDを使用する。各ポートは、複数のLIDを割り当てられ、ネットワーク内に複数の経路を利用することが可能である。またInfiniBandは、LIDマスクコントロール(LMC)と言われるメカニズムを提供する。LMCは、LIDの最下位バイトをマスキングすることにより、複数の論理LIDを単一の物理的なポートと関連付ける方式を提供する。スイッチにおいてパケットを受信するときに、宛先LIDの8個の最下位ビットは、LMCによりマスキングされ、無視されることができる。したがって、異なる最下位バイトを含むいくつかのLIDを同一のポートへ割り当てることは、同一ペアのノード間にいくつかの経路を確立することを可能にする。
【0041】
上記に説明されるように、ルーティングアルゴリズムは、パケットヘッダー内の選択されたフィールド経由でハッシュを計算することができる。一般的に、IPヘッダー内のソース及び宛先アドレスをルーティングのために使用する。IPヘッダーのサービスフィールドのプロトコルフィールド及びタイプ、マルチプルアクセス制御(MAC)レイヤのソースアドレス及び宛先レイヤ、またはソース及び宛先ポートも使用することができる。
【0042】
ポートは、ポート番号により識別されるソフトウェア構造である。ポートは、ホストのIPアドレス、及び通信のプロトコルタイプと一般的に関連し、通信セッションの宛先またはソースアドレスの一部を形成する。ポートは、16ビットポート番号により各アドレス及びプロトコルのために一般的に識別される。ホスト上のアプリケーションは、データグラムソケットを使用して、ホスト間通信を確立することができる。アプリケーションは、IPアドレス及びサービスポートの組み合わせであることができる、ソケットをデータ伝送のそのエンドポイントにバインディングすることができる。
【0043】
ソース及び宛先アドレスならびに宛先ポートなどの、ハッシュ計算のために使用されるいくつかのフィールドは、固定されることができ、パケット送達のために変更されることが不可能である。いくつかの他のフィールドは、しかしながら、任意選択であり、変更されることができ、パケットをルーティングする経路に影響を与えることができるが、パケットの安全な送達に影響を与えないことができる。したがって、これらのようなフィールドは、同一のソースIPアドレス、宛先IPアドレス、及び宛先ポートを含むパケットが異なる経路上に送達されることができるように、異なるパケットについて異なって変更されることができる。
【0044】
図8は、ソースエンドポイント802aと宛先エンドポイント802bとの間のデータ通信についての複数の経路810を示す。
図8に示されるように、宛先アドレスへのソースコンテキストデータ804aは、複数のフローレット806aに分割されることができ、各フローレット内のパケットは、同一のパケットヘッダーを含むことができるため、同一の経路を通してルーティングされることができる。異なるフローレット内のパケットは、同一のソースIPアドレス、宛先IPアドレス、及び宛先ポートを含むことができるが、パケットヘッダーの特定のフィールド内で異なる値を有することができ、パケットヘッダーの特定のフィールド内のこれらの値は、ルーティングのために使用される。したがって、異なるフローレット806a内のパケットは、ネットワーク850を介して異なる経路810を取ることにより、同一のソースIPアドレス上の同一の物理的なポート808aから、同一の宛先IPアドレス上の同一の物理的なポート808b及び異なるフローレット806bへ移動することができる。トランスポート層プロトコルとしてUDPを使用して、ソースノードと宛先ノードとの間の複数のフローレット通信の実施例を以下に記述する。
【0045】
UDPは、最低限のメッセージ指向トランスポート層プロトコルである。UDPは、最低限のプロトコルメカニズムを有するコネクションレス型伝送モデルを使用する。それは、ハンドシェイクダイアログを含まないため、ユーザのプログラムへ基本的なネットワークプロトコルのいずれかの信頼性の欠如を公開する。UDPは、メッセージ送達のための上位レイヤプロトコルへギャランティを提供せず、UDPレイヤは、送信されるとUDPメッセージの状態を保持しない。送達、順序付け、または重複保護のギャランティがない。
【0046】
UDPに関して、コンピュータアプリケーションは、特別な伝送チャネルまたはデータ経路をセットアップする事前の通信なしで、インターネットプロトコル(IP)ネットワーク上の他のホストへ、データグラムと言われるメッセージを送信することが可能である。UDPは、データグラムのソース及び宛先に異なる機能のためのポート番号を使用する。UDPは、エラーチェック及び修正が不要であるか、アプリケーション内で実行されることが可能であるかのいずれか一方であるアプリケーションに適しているため、ネットワークインタフェースレベルにおけるこのような処理のオーバーヘッドを回避する。タイムセンシティブアプリケーションは、パケットの廃棄が遅延したパケットの待機より好ましいため、UDPをよく使用し、UDPは、リアルタイムシステムにおいて任意選択ではない可能性がある。
【0047】
図9は、UDP/IPパケットヘッダー900を示す。ソースアドレス902及び宛先アドレス904は、IPヘッダー内に含まれる。UDPヘッダーは、4つのフィールドを含み、各フィールドは、2バイト(16ビット)である。宛先ポートフィールド908は、受信側ポートを特定し、要求される。宛先ポートフィールド908は、プロトコルをUDPフレーム内にカプセル化することを一般的に示す。
【0048】
ソースポートフィールド906は、有意であるときに送信側ポートを識別し、必要であれば応答するポートであるとみなす。使用されない場合に、ソースポートフィールド906は、0に設定されることができる。ソースホストがクライアントである場合に、ソースポート番号は、エフェメラルポート番号である可能性がある。ソースホストがサーバである場合に、ソースポート番号は、周知の、または矛盾なく定められた、ポート番号である可能性がある。
【0049】
チェックサムフィールド及びソースポートフィールド906の使用は、インターネットプロトコルバージョン4(IPv4)において任意選択である。インターネットプロトコルバージョン6(IPv6)において、ソースポートフィールド906のみが任意選択である。
【0050】
上記に説明されるように、UDPは、インオーダー送達を保証しない。したがって、異なる経路を通る通信において異なるパケットをルーティングすることがアウトオブオーダー送達の原因となる可能性があっても、このようなアウトオブオーダー送達を少なくともUDPプロトコルにおいて予期する。さらに、またECMPの使用は、ECMPを使用せずにUDPと比較して再順序付けすることを増加させることができる。したがって、本開示の実施形態は、UDPプロトコルを使用するものなどの、順序付けする必要がないアプリケーションにより良く適合される。いくつかの実施形態において、UDPポートがプロトコルを検出するためにのみ使用され、エンドポイントIPアドレスにより一般的に決定される、エンドユーザアプリケーションへのパケットの送達のために使用されないため、UDPヘッダー内のソースポートフィールド906を変更し、異なる経路への通信に際して異なるパケットをルーティングすることが可能である。宛先ノードにおいて受信されるパケットは、たとえば、以下に記述されるような緩和され信頼性のあるデータグラム(RRD)転送サービスを使用して、パケット内の情報に基づき、宛先ノード上のアプリケーションにより再順序付けされる、または組み立てられることができる。
【0051】
いくつかの実施形態において、複数のフローレットを使用する1つのフローのマルチパスデータ転送は、異なるソースIPアドレス(ソースエンドポイントが複数のIPアドレスを含む場合に)、もしくは異なる宛先IPアドレス(宛先エンドポイントが複数のIPアドレスを含む場合に)を使用することにより、IPv6ヘッダー内のFlowIDフィールドを使用することにより、またはマルチプロトコルラベルスイッチング(MPLS)ラベルを使用することにより、トンネリングを介して達成されることができる。
【0052】
III.実施例
リモートダイレクトメモリアクセス(RDMA)カードにより提供される基本的な転送サービスは、信頼性のないデータグラム(UD)である。HPCデータパスのためにUDを使用することは、比較的にあまりみられない。UDは、通常、パケットが破損されない限り、パケットを廃棄しないロスレスファブリックに依存する。別の共通転送サービスタイプは、信頼性のある接続(RC)である。RCは、信頼性のあるインオーダー送達を提供するが、それは、スケーラブルではない。特に、RCは、通信スレッドの各組について別個の接続を要求する。
【0053】
大規模なシステムについての「理想的な」ソリューションは、信頼性のあるデータグラム(RD)であり、RDは、各スレッドについて単一の要求キュー、及び1組の通信ノード間の単一の接続を使用する。既存のInfiniBand RD規格は、その仕様における多くの問題により使用不可能である。別の既存のRDのような部分的なソリューションは、拡張された信頼性のある接続(XRC)であり、XRCは、非常に複雑であり、それが廃棄されたパケットに関連しないパケットの送達を遅延させる可能性があるため、パケット廃棄の事例において最適なレイテンシを提供しない。
【0054】
インオーダー送達は、パケット廃棄の事例において、スケーラビリティを制限する、または平均レイテンシを増加させる可能性がある。エンドポイント間フローレベルにおいてシーケンス番号を保持することは、使用されるスペース、及び接続管理オーバーヘッドのためにスケーラブルではない。多重化されたノード間接続レベルにおけるシーケンス番号は、損失した、または重複したパケットを検出するために十分な情報を提供することができるが、集約された接続においてアウトオブオーダーである到達するパケットがエンドポイント間フローにおいて実際にアウトオブオーダーであるかどうかを判定するために十分な情報を提供しない可能性がある。ホストへ集約された接続においてアウトオブオーダーである到達するパケットの送達を延期する場合に、欠落するパケットが再送信されるまで、またはアウトオブオーダーパケットが到達するまで、多くのパケットを遅延させる可能性があるため、大規模な中間バッファスペースは、望ましい可能性があり、平均レイテンシは、大幅に増大する可能性がある。これらのほとんどの、またはすべての遅延したパケットは、損失したパケットに、またはアウトオブオーダーパケットに関連しないことがあるため、このような遅延は、必要ではない可能性がある。アウトオブオーダーパケットの廃棄は、バッファリング問題を解決することができるが、レイテンシ問題を解決しない可能性があり、ネットワーク帯域幅消費量を増加させる可能性がある。
【0055】
緩和され信頼性のあるデータグラムは、簡単なUDのようなインタフェースを含むが、パケット損失からトランスペアレントリカバリを含む転送サービスのタイプである。パケット順序付けを保証することは、容易にスケーラブルではない、すべてのQP間フローのために状態を保持することか、関係のないフロー間の偽の依存性を生成するため、平均レイテンシ及び最大レイテンシを増大させる可能性がある、パケットの単一のシーケンス内に異なる論理フローに属するパケットのシリアル化かのいずれか一方を備えることができるために、RRDは、パケット順序付けを保証しない。RRDがパケット順序付けを保証しないときでさえ、単一のRRD接続が複数の多重化されたフローを含む可能性があるため、RRDレベルでアウトオブオーダーであるようにみえるパケットがそれらのQP間フローにおいて実際にインオーダーであることは可能である。ホストソフトウェアがそのメッセージフローの追跡を継続することができるため、順序付けは、ホストにより行われることができる。したがって、RRDは、各パケットが適切なキューへ最終的に送達されることのみを保証する。パケットは、それらがアウトオブオーダーであるときでも宛先エンドポイントキューへ送達されることが可能であり、シーケンス番号は、ノード間接続レベルにおいて追跡されることができる。フロー毎(エンドポイント間)の番号付けは、ホストドライバにより行われることが可能であり、シーケンス番号は、宛先ホスト上のドライバへパケットと転送されることが可能であるが、トランスポート層上で検査されない。またRRDは、アウトオブオーダーパケットを廃棄するように構成されるため、インオーダー送達を提供することが可能である。
【0056】
RRD転送は、輻輳した、または障害のある経路についての最新の情報を維持しながら、負荷分散のために利用可能な経路全体にわたりパケットを送信することができる。特定の宛先に単一の接続コンテキストを使用する場合に、RRD転送は、廃棄されたパケットにより引き起こされるアウトオブオーダー肯定応答(ACK)と、マルチパス送達により引き起こされるアウトオブオーダーACKパケットを容易に区別できない可能性がある。したがって、RRD状態は、経路毎の基準で配置され、特定の経路上の特定の宛先へ送信されるパケットは、別個のコンテキスト、及び独立したパケット番号付けを有する。換言すれば、特定の宛先についてのRRDコンテキストは、複数の一方向性フローレットコンテキストを含むことができ、各フローレットは、上記に説明されるように異なる経路を使用することができる。たとえば、各フローレットコンテキストは、外側ヘッダーに使用されるソースUDPポートフィールドを含むことができる。各フローレットは、タイムアウト、または過度のパケット損失の事例において再割り当てされることが可能である異なる経路と関連することができる。パケットシーケンス番号は、各フローレットにおいて独立して追跡されることが可能である。
【0057】
図10は、たとえば、RRD転送サービス及びUDP/IPプロトコルを使用して、1つの物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントの例示的なブロック図を示す。ユーザアプリケーション1002は、プロバイダライブラリ1004及びユーザスペースドライバライブラリ1006を使用して、送信または受信キューを介して非同期的にメッセージを送信する、または受信することができる。
図10は、メッセージ送信フローのみを示す。プロバイダライブラリ1004は、オープンファブリックインタフェース(OFI)Libfabricプロバイダライブラリ、またはオープンファブリックスエンタープライズディストリビューション(OFED)ライブラリを含むことができる。
【0058】
ユーザアプリケーション1002は、通信エンドポイントを介してメッセージを送信する/受信することができる。アプリケーションは、複数の通信エンドポイントを使用することが可能である。データグラム転送の事例において、各通信エンドポイントは、単一のQPへマッピングされることが可能である。QP番号は、アダプタファームウェアにより割り当てられることが可能であり、各仮想イーサネットインタフェースについて別個に維持されることが可能である。QP番号は、仮想イーサネットインタフェースのIPアドレスに加えて、通信エンドポイントアドレスの一部として使用されることが可能である。
【0059】
ユーザアプリケーション1002は、トランザクションまたはメッセージを複数のWQE1008aから1008d内に配置することができ、つぎにトランザクションまたはメッセージは、チャネルアダプタにより処理され、宛先エンドポイントへ送信されることが可能である。WQE1008aから1008dは、1つのローカルエンドポイントについて1つのWQEを使用することができるように、ローカルエンドポイントに基づき配置されることができる。
【0060】
ユーザアプリケーション1002は、UDP/IPパケットヘッダーを生成せず、むしろ、それは、宛先ネットワークアドレスマップインデックス(アドレスハンドル)を送信メッセージ記述子に渡す。これは、いずれかに譲歩することなく、より低いレイテンシ、及びより良いセキュリティを提供する。パフォーマンスの観点から、アドレスハンドルは、外側ヘッダーを含むヘッダーをチャネルアダプタが事前に生成すること、それらをいずれかの検査なしで(アプリケーションにより生成されるパケットヘッダーを妥当性確認することの代替に)送信すること、及びヘッダーをフェッチすることと、それをルーティングテーブル内でルックアップすることとを回避することにより全体のレイテンシを最低限にすることを可能にする。
【0061】
WQE1008aから1008d内のトランザクションまたはメッセージは、RRD転送コンテキストなどの、転送コンテキスト1010aから1010cを設置するように処理されることができ、転送コンテキスト1010aから1010cの各コンテキスト内のメッセージまたはトランザクションは、同一の宛先IPアドレスへ送信される。
【0062】
RRD転送コンテキストなどの、各転送コンテキスト1010aから1010c内のメッセージまたはトランザクションは、フローレットコンテキストを選択するためにチャネルアダプタによりさらに処理されることができる。たとえば、転送コンテキスト1010a内のメッセージは、複数のフローレットコンテキスト1012a内に配置されることができ、転送コンテキスト1010b内のメッセージは、複数のフローレットコンテキスト1012b内に配置されることができ、転送コンテキスト1010c内のメッセージは、複数のフローレットコンテキスト1012c内に配置されることができる。各WQE及び転送コンテキストは、ソフトウェアキューまたはハードウェアキュー、たとえば、先入れ先出し(FIFO)バッファなどのバッファとして実装されることができる。フローレットコンテキストは、アクティブパケットリストを維持することができ、たとえば、メモリ内に格納されることができる。つぎにフローレットコンテキスト1012aから1012cは、NX1014により処理され、チャネルアダプタとネットワークスイッチとの間のインタフェースにおいてハードウェアキュー1016内に入れられ、ネットワークへ送信されることが可能である。ハードウェアキュー1016は、FIFOであることができる。ハードウェアキュー1016内の各パケットは、アプリケーションメッセージペイロード、プロバイダの補助情報、及び宛先アドレスを含むことができる。
【0063】
本明細書に使用されるように、フローレットは、2つのネットワークインタフェース間で一方向(半二重)接続に転送されるフローまたはデータフローと関連するパケットのグループである。フローレットは、QPに関係がなく、ユーザアプリケーションに不可視である。フローレット内のパケットは、フローレットインデックス及びパケットシーケンス番号を搬送することができる。パケットシーケンス番号は、フローレットに関係する。ソースエンドポイントは、再送信のために必要な情報を含む、未確認未応答のパケット(シーケンス番号、及び未応答のWQEのリスト)上に情報を維持する。宛先エンドポイントは、たとえば、パケットのヘッダー内で、受信したパケットからフローレットインデックスまたはパケットシーケンス番号を復旧させ、ソースエンドポイントへパケットを受信する肯定応答を送信することができる。つぎにソースエンドポイントは、パケットを受信する肯定応答を宛先エンドポイントから受信した後に、パケットのシーケンス番号を除去することができる。またソースエンドポイントは、パケットを送信した後にパケットのシーケンス番号を除去することができる。
【0064】
各フローレットは、限定された数の未確認の伝送パケットを含むように制御されることができる。したがって、フローレットの選択時に、より遅い経路は、より速い経路よりもあまり頻繁に使用されない。フローレットは、アクティブ状態(すなわち、未確認未応答のパケットを含む)、またはアイドル状態(すべてのものが応答される)のいずれか一方にあることが可能である。
【0065】
一般に、パケットは、所与のアクティブフローレットについて同一の経路に送信される。いくつかの実施形態において、パケットをアイドルフローレットに割り当てるときに、送信器は、経路をランダムに変更することができる。また送信器は、タイムアウト後に、または過剰なレイテンシ、もしくは過剰なパケット廃棄を受けるときに、フローレットを異なる経路に再割り当てすることが可能である。
【0066】
宛先コンテキストは、最後のインオーダーパケットのシーケンス番号、及びアウトオブオーダーパケットのシーケンス番号を保持することができるが、それは、いずれのエンドポイントバッファ情報も保持しないことができる。到達する重複しないすべてのパケットは、適切なQPへパケットを送達することができる、RRDサービスのつぎのレベルへ送達されることができる。宛先コンテキストは、インオーダーパケットに応答する通常のACK、及び受信したパケットシーケンス内のいずれかのホールを報告する選択的ACK(SACK)パケットを生成することができる。
【0067】
特定のRRDコンテキスト内のフローレットは、短いインデックスを使用して番号付けされることができる。フローレットインデックスは、パケットヘッダー内に指定されることができる。同一のインデックスは、一方の側に送信フローレットコンテキストについての方向、及び他方の側に対応する受信フローレットコンテキストについての方向の両方に使用されることができる。RRDコンテキストあたりのフローレットの最大数は、予め定められ、ハードコード化されることができる、またはそれは、通信前に、もしくは通信中にネゴシエートされ、調整されることができる。
【0068】
ソースエンドポイントは、特定のアドレスを最初にマッピングするときに、新規のフローレットのみを初期化することができる。換言すれば、フローレット接続の確立は、送信側または受信側をリセットしない限り、一度限りの動作であることができる。いくつかの実施形態において、受信側が「シーケンス開始」パケットを許容するときに、受信側は、「シーケンス開始」パケットが無効であると判定しない限り、「シーケンス開始」パケットを許容することができ、いずれの以前のフローレット状態も破棄することができる。
【0069】
特定のフローレット上に送信されるパケットは、インオーダーに一般に到達するが、無効の「シーケンス開始」パケットは、たとえば、経路の遅さにより、たとえば、フローレットを初期化した直後にフローレットの経路をスイッチングする事例において、アウトオブオーダーに到達することができる。このような事例において、受信側は、受信した「シーケンス開始」パケット内の初期シーケンス番号を格納し、パケットが同一のシーケンス番号を搬送する場合に同一のフローレット上でいずれかの追加の「シーケンス開始」パケットを拒否し、任意選択で、明示的な否定応答(NAK)を生成することができる。
【0070】
新たに開始した送信側は、フローレット履歴のいずれの知識も含まない可能性があり、それが受信側からACKを取得するまで、「シーケンス開始」パケット後の追加のパケットを送信することができない。NAKのまれなイベントにおいて、たとえば、送信側がフローレットについて以前の「シーケンス開始」パケット内の初期シーケンス番号と同一の初期シーケンス番号を偶発的に生成する場合に、それは、異なる初期番号を生成し、再試行させることができる。
【0071】
IV.フローレット割り当て
通常、フローレットにパケットを割り当てるときに2つの目的を考慮に入れる。すべての経路を常に使用することは望ましい。また、いずれかの損失パケットを速やかに検出し、報告することを確実にするために十分なパケットをフローレットが取得することは望ましい。フローレット内の最後のパケットを廃棄する場合に、廃棄を検出する1つの方法は、タイムアウトである。代替に、少量ロードされたシステムにおいて、フローレット内の最後のパケット後に追加のダミーパケットを送信することができる。SACKベースの検出がより高速の復元を可能にするため、RRDがすべてのアクティブフローレット上にパケットを送信し続けることは好ましい。これは通常、大量のトラフィックのために行われることが可能であり、保留するパケット数は、多く、フローレットは、完全に乾ききったように少ない。いくつかの状況において、全体としてシステムが大量にロードされる可能性があるとしても、システム内に多くの少量ロードされたフローレットがあることができる。わずかな数の保留するパケットを含む少量にロードされたシステムについて、すべての利用可能なフローレットを介して均等にパケットを分散させることは、多くの、またはすべてのフローレット上の未確認のパケット数が0または1程度である可能性があり、SACKが無用になる状況につながる可能性がある。1つの解決策は、使用中のフローレット数を動的に調整し、フローレットがアイドルになると、または非常に遅くなると常に、1つのフローレットを1つの異なる経路へ再割り当てすることである。使用中のフローレットの総数は、たとえば、32個以下に限定されることができ、たとえば、ネットワークレイテンシ、ネットワーク帯域幅、またはネットワーク輻輳に基づき、調整されることができる。いくつかの実施形態において、空のフローレット上ではなく半分入ったフローレット上にパケットを配置することは好ましい。加えて、常に単一のフローレットを非アイドルに保つことができる、スローバットステディフローが経路を独占しないことを確実にするために、時には追加のアイドルフローレットは、この経路を最終的に変更することを確実にするように割り当てられることもあることが可能である。
【0072】
ユーザアプリケーションからのパケットを複数のフローレットに割り当てるために多くの異なる方式があることができる。たとえば、すべての利用可能なフローレット、またはすべての使用中のフローレット内の未確認のパケット数に基づきフローレットにパケットを割り当てることができる。アプリケーションの情報に基づきパケットをフローレットに割り当てることができる。また、アプリケーションからのインストラクション、要求、または指示に基づきパケットをフローレットに割り当てることができる。
【0073】
ユーザアプリケーションがフローラベルを指定しないいくつかの実施形態において、RRDなどの転送サービスを実装するトランスポート層にネットワークアダプタデバイスは、各フローレットの使用率に基づくフローレット数へ、たとえば、各フローレット内の未確認のパケット数へ、ユーザアプリケーションからのパケットを割り当てることができる。ネットワークアダプタデバイスは、未確認のパケットの総数、及び最後に使用されたフローレットの記録を保持することができる。また、それは、使用率によりフローレットの別個のリストを維持することができ、RRDコンテキストの各フローレットは、以下の3つのリスト、最大限、ほぼ空(半分未満)、及びほぼ最大限(半分超)のうちの1つにあることができる。他のアプリケーションによる使用のために、空のフローレットを共有されたプールへ返すことができる。
【0074】
トランスポート層においてネットワークアダプタデバイスは、フローレットが最大限ではない場合に、以前に使用された同一のフローレットを選択することができる。それ以外の場合に、ネットワークアダプタデバイスは、つぎの優先順位、ほぼ最大限、ほぼ空、及び空(共有されたプールから)に従い、使用率によりフローレットのリスト内の別のフローレットを選択することができる。
【0075】
いくつかの実施形態において、フローレット内で許容された未確認のパケットの総数は、たとえば、ネットワーク輻輳に基づき調整されることができる、調整可能な数に制限されることができる。たとえば、ネットワーク全体が輻輳する場合に、フローレット内で許容された未確認のパケットの総数は、増加することができる。ネットワーク全体があまり輻輳していない場合に、フローレット内で許容された未確認のパケットの総数は、減少することができる。
【0076】
また、利用可能なフローレット、または使用中のフローレットの各フローレットの観測されたレイテンシに基づきデータパケットをフローレットに割り当てることができる。より低い観測されたレイテンシを有するフローレットを一般的に選択することができる。また、利用可能なフローレット、または使用中のフローレットの各フローレットの廃棄率に基づきデータパケットをフローレットに割り当てることができる。より低い廃棄率を有するフローレットを一般的に選択することができる。
【0077】
またトランスポート層は、パケットを割り当てる方法についてユーザアプリケーションからの指示に基づきパケットを異なるフローレットに割り当てることができる。たとえば、ユーザアプリケーションは、オープンファブリックエンタープライズディストリビューション(OFED)内で支持されるフローラベルなどの、フローラベルにより伝送要求をマーク付けすることができる。フローラベルは、特定の経路上にパケットを送信するようにトランスポート層に指令することができないが、同一のラベルを含む他のメッセージと同一の経路上の同一の宛先へメッセージを送信するようにトランスポート層に指令することができる。トランスポート層マップは、フローラベルマップを保持することができ、このマップ内の各エントリは、フローレットインデックス、及びフローレット内の未確認のパケット数を含む。所望のフローレット内の未確認のパケット数が0である場合に、パケットに対し新規のフローレットを割り当てることが可能である。たとえば、他のアプリケーションまたはメッセージから、多すぎる未確認のパケットを所望のフローレットが含む場合に、新規のフローレットも割り当てることができる。
【0078】
またトランスポート層は、ユーザアプリケーションの情報に基づきユーザアプリケーションからのパケットを異なるフローレットへ割り当てることができる。たとえば、ファブリック経由で不揮発性メモリExpress(NVMe)について、トランスポート層は、同一のコマンド用のすべてのパケットを同一のフローレットへ割り当てることができる。メッセージパッシングインタフェース(MPI)などの、いくつかのアプリケーションについて、トランスポート層は、パケットを割り当て、アウトオブオーダー送達を最小限にすることができる。トランスポート層は、他のソースから情報を受信すること、または情報をヒューリスティックに決定することにより、ユーザアプリケーションについて情報を取得することができる。
【0079】
いくつかの実施形態において、複数のネットワークアダプタデバイスまたは複数のユーザアプリケーション間のフローレットまたは経路の選択は、異なるアプリケーションまたは異なるネットワークアダプタデバイスからのパケットを同一の経路に割り当て、経路を過負荷にすることができないように、調整される、またはランダム化されることができる。いくつかの実施態様において、他のアプリケーションにより使用されている、スイッチもしくはルーターのポート、またはソースUDPポートは、フローレットのために使用される適切なポートを決定するための入力として使用されることができる。
【0080】
フローレットを割り当てるときに、それは通常、フローレットに割り当てられるすべてのパケットが同一の経路を取るような経路と関連する。しかしながら、フローレットと関連する経路が閾値を超える過剰な廃棄率を有する、または閾値より長いレイテンシを有する場合に、フローレット及びその関連したパケットは、より低い廃棄率、またはより短いレイテンシを有する異なる経路へ再割り当てされることができる。
【0081】
V.複数の物理的なポートを含むネットワークアダプタ
ネットワークアダプタデバイスは、複数の物理的な出力または入力ポートを含むことができる。したがって、ネットワークアダプタデバイスは、デバイス上の異なる物理的なポートを介してパケットを送信する、または受信することができる。換言すれば、ネットワークアダプタデバイスは、スイッチ自体として動作することができ、ネットワークの一部、またはネットワークのスイッチファブリックを形成することができる。
【0082】
図11は、たとえば、RRD転送サービス及びUDP/IPプロトコルを使用する、複数の物理的なポートを介して複数の宛先エンドポイントと通信するソースエンドポイントのブロック図を示す。
図10と同様に、
図11において、ユーザアプリケーション1102は、プロバイダライブラリ1104及びユーザスペースドライバライブラリ1106を使用して、送信または受信キューを介して非同期的にメッセージを送信する、または受信することができる。プロバイダライブラリ1104は、オープンファブリックインタフェース(OFI)Libfabricプロバイダライブラリ、またはオープンファブリックエンタープライズディストリビューション(OFED)ライブラリを含むことができる。
【0083】
ユーザアプリケーション1102は、トランザクションまたはメッセージを複数のWQE1108aから1108d内に配置することができ、つぎにトランザクションまたはメッセージは、チャネルアダプタにより処理され、宛先エンドポイントへ送信されることが可能である。WQE1108aから1108dは、1つのローカルエンドポイントに対して1つのWQEを使用することができるように、ローカルエンドポイントに基づき配置されることができる。WQE1108aから1108d内のトランザクションまたはメッセージは、RRD転送コンテキストなどの、転送コンテキスト1110aから1110cを設置するように処理されることができ、各転送コンテキスト1110aから1110c内のメッセージまたはトランザクションは、同一の宛先IPアドレスへ送信される。
【0084】
RRD転送コンテキストなどの、各転送コンテキスト1110aから1110c内のメッセージまたはトランザクションは、フローレットコンテキストを選択するためにチャネルアダプタによりさらに処理されることができる。たとえば、転送コンテキスト1110a内のメッセージは、フローレットコンテキスト1112a内に配置されることができ、転送コンテキスト1110b内のメッセージは、フローレットコンテキスト1112b内に配置されることができ、転送コンテキスト1110c内のメッセージは、フローレットコンテキスト1112c内に配置されることができる。つぎにフローレットコンテキスト1112aから1112cは、NX1114により処理され、ハードウェアキュー1116に入れられることが可能である。
【0085】
つぎにハードウェアキュー1116内のパケットは、ネットワークアダプタデバイスと外部ネットワークとの間のインタフェース1118において異なる物理的な出力ポート1120にルーティングされることができる。異なる物理的な出力ポートを介してパケットをルーティングすることにより、ネットワークアダプタデバイスのスループットは、増加することができ、ネットワークアダプタデバイスと外部ネットワークとの間のインタフェースにおける輻輳は、減少することができる。
【0086】
VI.方法
図12は、本開示のいくつかの実施形態に従い、ネットワークを介して複数のフローレットによる2つのエンドポイント間のデータ通信方法を示すフローチャート1200である。
【0087】
ブロック1202において、ネットワークアダプタデバイスは、ネットワークを介してソースエンドポイント上のユーザアプリケーションから宛先エンドポイントへ送信されるデータストリームを受信することができる。データストリームは、1つ以上のメッセージ、1つ以上のコマンド、または1つ以上のトランザクションであってもよい。いくつかの実施形態において、ソースエンドポイント及び宛先エンドポイントは、一意のIPアドレスを各有することができる。いくつかの実施形態において、複数のエンドポイントは、IPアドレスを共有することができるため、IPアドレスを共有する複数のソースエンドポイントから、IPアドレスを共有する複数の宛先エンドポイントへユーザアプリケーションデータストリームは、1組のソース及び宛先IPアドレス間のIPレベルデータストリーム内で多重化されることが可能である。他の実施形態において、ソースまたは宛先エンドポイントは、複数のIPアドレスを有することができ、たとえば、マルチパスTCP(MPTCP)内のような、ソースIPアドレス及び宛先IPアドレスの異なる組み合わせを使用して、ユーザアプリケーションデータストリームの各部分をネットワーク内の異なる経路を介して送信することが望ましい可能性がある。単一のTCPまたはUDP接続内でソースIPアドレスから宛先IPアドレスへ転送されることを意図される、ユーザアプリケーションデータストリーム、またはユーザアプリケーションストリームの一部は、本明細書においてデータフローまたはフローと称されることができる。
【0088】
たとえば、
図10を参照して上記に説明されるように、ユーザアプリケーション1002は、トランザクションまたはメッセージを複数のWQE1008aから1008d内に配置することができ、WQE1008aから1008dは、1つのローカルエンドポイント対して1つのWQEを使用することができるように、ローカルエンドポイントに基づき配置されることができる。またユーザアプリケーション1002は、送信メッセージ記述子内に宛先ネットワークアドレスマップインデックス(アドレスハンドル)を渡すことができる。宛先ネットワークアドレスマップインデックスに基づき、WQE1008aから1008d内のトランザクションまたはメッセージは、RRD転送コンテキストなどの、転送コンテキスト1010aから1010cを設置するように処理されることができ、各転送コンテキスト1010aから1010c内のメッセージまたはトランザクションは、同一の宛先IPアドレスへ送信される。各転送コンテキストは、フローまたはデータフローと称されることができる。
【0089】
いくつかの実施例において、ユーザアプリケーションは、メッセージ及び送信メッセージ記述子を提供するだけではなく、ソースIPアドレス及び宛先IPアドレスを含むメッセージをデータパケット内に提供することができる。
【0090】
ブロック1204において、
図10内の各転送コンテキストなどの、各フロー内のユーザアプリケーションデータは、TCP/IPまたはUDP/IPなどの、通信プロトコルに従い複数のパケットに分割されることができる。複数のパケットは、ヘッダー及びペイロードを含むことができる。ヘッダーは、更新される必要がある、空のヘッダーである、または空のフィールドを含むことができる。ヘッダーは、TCP/IPまたはUDP/IPヘッダーの一部のみを含むことができる。
【0091】
ブロック1206において、複数のパケットの各パケットについて、ネットワークアダプタデバイスは、複数のフローレットから、送信されるパケットについてフローレットを決定することができる。この決定は、複数のフローレットの各フローレット内のパケット数を決定すること、ユーザアプリケーションの情報を取得すること、または複数のパケットが複数のフローレットに割り当てられる方法についてユーザアプリケーションから指示を受信することにより行われることができる。いくつかの実施形態において、少量にロードされない、または大量にロードされないフローレットを選択することは好ましい可能性がある。
【0092】
ブロック1208において、複数のパケットの各パケットについて、決定されたフローレットに基づき、ソースUDPポート番号などの、パケットをルーティングするためにネットワークのネットワークスイッチにより使用されるパケット内のフィールドの値を決定し、設定することができる。異なるフローレットに対して異なるソースUDPポートを使用することができる。結果として、異なるフローレットは、上記に説明されるようにルーティングのためにソースUDPポート番号を使用するルーターまたはスイッチによりネットワーク内の異なる経路を介して送信されることができる。
【0093】
ブロック1210において、複数のパケットの各パケットは、ネットワークへ送信するために割り当てられたフローレットへ送信されることができる。各パケットは、ソースUDPポート、フローレットインデックスまたは識別、及びパケットシーケンス番号などのヘッダー内のフローレット固有フィールドを含むことができる。フローレットを追加のパケットに割り当てるために、フローレットでの未確認のパケット数、平均レイテンシ、または推定されたパケット損失率などの、複数のフローレットの各フローレットのステータスを監視し、使用することができる。
【0094】
ブロック1212において、複数のフローレットの各フローレット内のパケットは、1つ以上の物理的なポートを介してネットワークファブリックへ送信されることができる。ネットワークアダプタデバイスと外部ネットワークとの間のインタフェースにおいてパケットをハードウェア送信キューに入れることができる。
【0095】
VII.デバイス及びシステム
本開示の実施形態は、アダプタカードなどのハードウェアか、ホストCPU上で実行されることができるソフトウェアかのいずれか一方に実装されることができる。
図13は、ネットワークアダプタデバイス1300の実施例を示す。この実施例において、ネットワークアダプタデバイス1300は、処理ロジック1302、構成モジュール1304、管理モジュール1306、バスインタフェースモジュール1308、メモリ1310、及びネットワークインタフェースモジュール1312を含むことができる。これらのモジュールは、ハードウェアモジュール、ソフトウェアモジュール、またはハードウェア及びソフトウェアの組み合わせであることができる。ネットワークアダプタデバイス1300は、本明細書に図示されない、追加のモジュールを含むことができる。いくつかの実施態様において、ネットワークアダプタデバイス1300は、より少数のモジュールを含むことができる。モジュールのうちの1つ以上は、通信チャネル1314経由で相互に通信することができる。通信チャネル1314は、1つ以上のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組み合わせ、またはいくつかの他の適切な通信チャネルを含むことができる。
【0096】
処理ロジック1302は、インストラクションを実行するように構成される1つ以上のプロセッサを含むことができる。処理ロジック1302内に含まれることができるプロセッサの実施例は、ARM、MIPS、AMD、Intel、Qualcomm、及び同様のものにより開発されるプロセッサを含む。また、処理ロジック1302内に含まれるプロセッサは、ASICまたはFPGA内に実装されることができる。いくつかの実施態様において、処理ロジック1302のプロセッサは、たとえば、バス、レベル1(L1)キャッシュ、及び/またはレベル2(L2)キャッシュなどの、特定のリソースを共有することができる。処理ロジック1302により実行されるインストラクションは、たとえば、コンピュータプログラムの形式で、コンピュータ可読記憶媒体に格納されることができる。コンピュータ可読記憶媒体は、非一時的であることができる。いくつかの事例において、コンピュータ可読媒体は、メモリ1310の部分であることができる。
【0097】
メモリ1310は、揮発性もしくは不揮発性のいずれか一方、または揮発性及び不揮発性の両方のタイプのメモリを含むことができる。メモリ1310は、たとえば、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電気的に消去プログラム可能な読み出し専用メモリ(EEPROM)、フラッシュメモリ、及び/またはいくつかの他の適切な記憶媒体を含むことができる。いくつかの事例において、いくつかの、またはすべてのメモリ1310は、ネットワークアダプタデバイス1300内部にあることができ、他の事例において、いくつかの、またはすべてのメモリは、ネットワークアダプタデバイス1300外部にあることができる。
【0098】
いくつかの実施態様において、構成モジュール1304は、1つ以上の構成レジスタを含むことができる。構成レジスタは、ネットワークアダプタデバイス1300の動作を制御することができる。いくつかの実施態様において、構成レジスタ内の1つ以上のビットは、ネットワークアダプタデバイス1300の特定の機能を表すことが可能である。構成レジスタは、処理ロジック1302内で実行するインストラクションにより、及び/またはホストデバイス、ホストデバイス上で実行するオペレーティングシステム、及び/またはリモートサーバなどの外部エンティティによりプログラミングされることができる。構成モジュール1304は、ネットワークアダプタデバイス1300の動作を制御する、ハードウェア及び/またはソフトウェアをさらに含むことができる。
【0099】
いくつかの実施態様において、管理モジュール1306は、ネットワークアダプタデバイス1300の異なるコンポーネントを管理するように構成されることができる。いくつかの事例において、管理モジュール1306は、電源投入において1つ以上の構成レジスタ内の1つ以上のビットを構成し、ネットワークアダプタデバイス1300の特定の機能を有効にする、または無効にすることができる。
【0100】
バスインタフェースモジュール1308は、外部通信媒体経由で、コンピューティングシステム内のホストデバイス及び/または他のコンポーネントなどの、外部エンティティと通信することを可能にすることができる。バスインタフェース1308モジュールは、ケーブル、ソケット、ポート、または外部通信媒体への他の接続へ接続するために物理的なインタフェースを含むことができる。バスインタフェースモジュール1308は、着信及び発信トランザクションを管理するためにハードウェア及び/またはソフトウェアをさらに含むことができる。バスインタフェース1308モジュールは、NVMe、AHCI、SCSI、SAS、SATA、PATA、PCI/PCIe、及び同様のものなどの、ローカルバスプロトコルを実装することができる。バスインタフェース1308モジュールは、コネクタ、電力管理、エラーハンドリングなどを有する、これらのバスプロトコルのいずれかについて少なくとも物理的なレイヤを含むことができる。いくつかの実施態様において、ネットワークアダプタデバイス1300は、複数の外部エンティティと通信するために複数のバスインタフェースモジュールを含むことができる。これら複数のバスインタフェースモジュールは、同一のローカルバスプロトコル、異なるローカルバスプロトコル、または同一の、及び異なるバスプロトコルの組み合わせを実装することができる。
【0101】
ネットワークインタフェースモジュール1312は、ネットワークと通信するためにハードウェア及び/またはソフトウェアを含むことができる。このネットワークインタフェースモジュール1312は、たとえば、ネットワークへ有線接続のための物理的なコネクタ、及び/またはネットワークへ無線通信のためのアンテナを含むことができる。ネットワークインタフェースモジュール1312は、ネットワークプロトコルスタックを実装するように構成されるハードウェア及び/またはソフトウェアをさらに含むことができる。ネットワークインタフェースモジュール1312は、たとえば、とりわけ、TCP/IP、InfiniBand、RoCE、Institute of Electrical and Electronics Engineers(IEEE)802.11無線プロトコル、ユーザデータグラムプロトコル(UDP)、非同期転送モード(ATM)、トークンリング、フレームリレー、ハイレベルデータリンク制御(HDLC)、ファイバ分散型データインタフェース(FDDI)、及び/またはポイントツーポイントプロトコル(PPP)などの、ネットワークプロトコルを使用するネットワークと通信することができる。いくつかの実施態様において、ネットワークアダプタデバイス1300は、異なるネットワークと通信するように各構成される、複数のネットワークインタフェースモジュールを含むことができる。たとえば、これらの実施態様において、ネットワークアダプタデバイス1300は、有線イーサネットネットワーク、無線802.11ネットワーク、セルラネットワーク、InfiniBandネットワークなどと通信するためにネットワークインタフェースモジュールを含むことができる。
【0102】
ネットワークアダプタデバイス1300は、システムオンチップ(SOC)、プロセッサ、ネットワークインタフェースカード(NIC)、スイッチ特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)のうちの1つとして実装されることができる。
【0103】
図14は、1つ以上のネットワークを介して接続される、1つ以上のサービスプロバイダコンピュータ、及び/またはユーザデバイスを含む本明細書に記述される機能及びシステムについての例示的なアーキテクチャを示す。
図1から
図13に考察されるデバイスは、
図14に記述されるコンピューティングデバイスの1つ以上のコンポーネントを使用することができる、または
図14に記述される1つ以上のコンピューティングデバイスを表すことができる。図示されたアーキテクチャ1400において、1人以上のユーザ1402は、ユーザコンピューティングデバイス1404(1)から(N)を使用して、1つ以上のネットワーク1408を介して、アプリケーション1406(たとえば、ウェブブラウザまたはモバイルデバイスアプリケーション)にアクセスすることができる。いくつかの態様において、アプリケーション1406は、コンピューティングリソースサービスまたはサービスプロバイダにより、ホストされる、管理される、及び/または提供されることができる。1つ以上のサービスプロバイダコンピュータ1410は、ユーザ(複数可)1402がインタラクトすることができる、ユーザデバイス1404上で実行するように構成されるネイティブアプリケーションを提供することができる。サービスプロバイダコンピュータ(複数可)1410は、いくつかの実施例において、限定されないが、クライアントエンティティ、低レイテンシデータストレージ、デュラブルデータストレージ、データアクセス、管理、仮想化、クラウドベースのソフトウェアソリューション、電子コンテンツパフォーマンス管理、及びその他のものなどの、コンピューティングリソースを提供することができる。またサービスプロバイダコンピュータ(複数可)1410は、ユーザ(複数可)1402へ、ウェブホスティング、コンピュータアプリケーション開発及び/または実装プラットフォーム、前述のものの組み合わせ、または同様のものを提供するように動作可能であることができる。サービスプロバイダコンピュータ(複数可)1410は、いくつかの実施例において、1つ以上の第三者コンピュータ1412と通信することができる。
【0104】
いくつかの実施例において、ネットワーク(複数可)1408は、ケーブルネットワーク、インターネット、無線ネットワーク、セルラネットワーク、及び他のプライベート及び/またはパブリックネットワークなどの、多くの異なるタイプのネットワークのうちのいずれか1つ、またはこれらの組み合わせを含むことができる。図示された実施例は、ネットワーク(複数可)1408経由でアプリケーション1406にアクセスするユーザ(複数可)1402を表すが、記述された技術は、ユーザ(複数可)1402が固定電話経由で、キオスクを介して、またはいくつかの他の方式において、ユーザデバイス(複数可)1404を介してサービスプロバイダコンピュータ(複数可)1410とインタラクトするインスタンス内に等しく適用することができる。また記述された技術は、他のクライアント/サーバ配置(たとえば、セットトップボックスなど)内に、及び非クライアント/サーバ配置(たとえば、ローカルに格納されたアプリケーションなど)内に適用することができる。
【0105】
簡潔に上記に説明されるように、アプリケーション1406は、ユーザ(複数可)1402がサービスプロバイダコンピュータ(複数可)1410とインタラクトし、たとえば、ウェブコンテンツ(たとえば、ウェブページ、音楽、ビデオなど)にアクセスすることを可能にすることができる。サービスプロバイダコンピュータ(複数可)1410は、サーバのクラスタ内に、またはサーバファームとして配置されることができ、アプリケーション1406及び/またはクラウドベースのソフトウェアサービスをホストすることができる。また他のサーバアーキテクチャを使用して、アプリケーション1406をホストすることができる。アプリケーション1406は、多くのユーザ1402からの要求を処理すること、及び応答してさまざまなアイテムのウェブページを提供することが可能であることができる。アプリケーション1406は、ソーシャルネットワーキングサイト、オンラインリテーラー、情報サイト、ブログサイト、検索エンジンサイト、ニュース及びエンターテイメントサイト、ならびにその他のものを含む、ユーザインタラクションを支援する、いずれかのタイプのウェブサイトを提供することが可能である。上記に考察されるように、記述された技術は、ユーザデバイス(複数可)1404上で実行する他のアプリケーションなどとの、アプリケーション1406の外側で同様に実施することが可能である。
【0106】
ユーザデバイス(複数可)1404は、限定されないが、携帯電話、スマートフォン、パーソナルデジタルアシスタント(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、シンクライアントデバイス、タブレットPC、電子ブック(eブック)リーダーなどのような、いずれかのタイプのコンピューティングデバイスであることができる。いくつかの実施例において、ユーザデバイス(複数可)1404は、ネットワーク(複数可)1408を介して、または他のネットワーク接続を介してサービスプロバイダコンピュータ(複数可)1410と通信することができる。加えて、ユーザデバイス(複数可)1404は、サービスプロバイダコンピュータ(複数可)1410(たとえば、サービスプロバイダコンピュータ1410と統合されるコンソールデバイス)より管理される、これにより制御される、またはそうでなければサービスプロバイダコンピュータ1410の一部である分散システムの部分であることができる。
【0107】
1つの例示的な構成において、ユーザデバイス(複数可)1404は、少なくとも1つのメモリ1414、及び1つ以上の処理ユニット(またはプロセッサ(複数可)1416)を含むことができる。プロセッサ(複数可)1416は、ハードウェア、コンピュータ実行可能インストラクション、ファームウェア、またはそれらの組み合わせにおいて実装されることができる。プロセッサ(複数可)1416のコンピュータ実行可能インストラクションまたはファームウェア実装は、記述されるさまざまな機能を実行するためにいずれかの適切なプログラミング言語において書き込まれるコンピュータ実行可能または機械実行可能インストラクションを含むことができる。またユーザデバイス(複数可)1404は、ユーザデバイス(複数可)1404と関連する地理的位置情報を提供する、及び/または記録するために、ジオロケーションデバイス(たとえば、全地球測位システム(GPS)デバイスまたは同様のもの)を含むことができる。
【0108】
メモリ1414は、プロセッサ(複数可)1416上でロード可能であり、実行可能であるプログラムインストラクション、及びこれらのプログラムの実行中に生成されるデータを格納することができる。ユーザデバイス(複数可)1404の構成及びタイプにより、メモリ1414は、揮発性(ランダムアクセスメモリ(RAM)などの)及び/または不揮発性(読み出し専用メモリ(ROM)、フラッシュメモリなどのような)であることができる。またユーザデバイス(複数可)1404は、限定されないが、磁気ストレージ、光学ディスク、及び/またはテープストレージを含む、追加のリムーバブルストレージ及び/または非リムーバブルストレージを含むことができる。ディスクドライブ及びそれらの関連したコンピュータ可読媒体は、コンピューティングデバイスのための、コンピュータ可読インストラクション、データ構造、プログラムモジュール、及び他のデータの不揮発性ストレージを提供することができる。いくつかの実施態様において、メモリ1414は、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、またはROMなどの、複数の異なるタイプのメモリを含むことができる。
【0109】
より詳細にメモリ1414のコンテンツを検討すると、メモリ1414は、たとえば、ブラウザアプリケーション1406または専用アプリケーション(たとえば、スマートフォンアプリケーション、タブレットアプリケーションなど)を介して、少なくともユーザ提供の入力要素、または電子サービスウェブページを含む、本明細書に開示される機能を実装するためにオペレーティングシステム及び1つ以上のアプリケーションプログラムまたはサービスを含むことができる。ブラウザアプリケーション1406は、サービスプロバイダコンピュータ(複数可)1410とインタラクトするためにウェブサイトまたは他のインタフェースを受信する、格納する、及び/または表示するように構成されることができる。加えて、メモリ1414は、アクセスクレデンシャル、及び/または限定されないが、ユーザID、パスワード及び/または他のユーザ情報などの、他のユーザ情報を格納することができる。いくつかの実施例において、ユーザ情報は、限定されないが、デバイスID、クッキー、IPアドレス、位置、または同様のものなどのアカウントアクセス要求を認証するための情報を含むことができる。加えて、ユーザ情報は、セキュリティ質問へのユーザ提供の応答、またはユーザデバイス1404により取得される地理的位置を含むことができる。
【0110】
いくつかの態様において、サービスプロバイダコンピュータ(複数可)1410は、限定されないが、携帯電話、スマートフォン、パーソナルデジタルアシスタント(PDA)、ラップトップコンピュータ、デスクトップコンピュータ、サーバコンピュータ、シンクライアントデバイス、タブレットPCなどのような、いずれかのタイプのコンピューティングデバイスであることもできる。加えて、いくつかの実施形態において、サービスプロバイダコンピュータ(複数可)1410がホストされたコンピューティング環境内で実装される1つ以上の仮想マシンにより実行されることに留意するべきである。ホストされたコンピューティング環境は、1つ以上の迅速にプロビジョニングされ、解放されたコンピューティングリソースを含むことができ、コンピューティングリソースは、コンピューティング、ネットワーキング及び/またはストレージデバイスを含むことができる。またホストされたコンピューティング環境は、クラウドコンピューティング環境と称されることができる。いくつかの実施例において、サービスプロバイダコンピュータ(複数可)1410は、ネットワーク(複数可)1408を介して、または他のネットワーク接続を介して、ユーザデバイス(複数可)1404及び/または他のサービスプロバイダと通信することができる。サービスプロバイダコンピュータ(複数可)1410は、サーバファームとして、または相互に関連しない個々のサーバとして、クラスタ内に配置されるかもしれない、1つ以上のサーバを含むことができる。これらのサーバは、統合された分散コンピューティング環境の部分として構成されることができる。
【0111】
1つの例示的な構成において、サービスプロバイダコンピュータ(複数可)1410は、少なくとも1つのメモリ1418、及び1つ以上の処理ユニット(またはプロセッサ1420)を含むことができる。プロセッサ(複数可)1420は、ハードウェア、コンピュータ実行可能インストラクション、ファームウェア、またはそれらの組み合わせにおいて実装されるいずれかの処理ロジックであることができる。プロセッサ(複数可)1420のコンピュータ実行可能インストラクションまたはファームウェア実装は、記述されるさまざまな機能を実行するために、いずれかの適切なプログラミング言語において書き込まれる、コンピュータ実行可能または機械実行可能インストラクションを含むことができる。
【0112】
いくつかの例において、ハードウェアプロセッサ(複数可)1420は、シングルコアプロセッサ、またはマルチコアプロセッサであることができる。マルチコアプロセッサは、同一のプロセッサ内に複数の処理ユニットを含むことができる。いくつかの実施形態において、マルチコアプロセッサは、バス、及び第二または第三レベルのキャッシュなどの、特定のリソースを共有することができる。いくつかの例において、シングルコアプロセッサ、またはマルチコアプロセッサにおいて各コアは、複数の実行論理プロセッサ(またはスレッド)を含むことができる。このようなコア(たとえば、複数の論理プロセッサを有するもの)において、実行パイプラインのいくつかのステージ、及びより低レベルのキャッシュも共有することができる。
【0113】
メモリ1418は、プロセッサ(複数可)1420上でロード可能であり、実行可能であるプログラムインストラクション、及びこれらのプログラムの実行中に生成されるデータを格納することができる。サービスプロバイダコンピュータ(複数可)1410の構成及びタイプにより、メモリ1418は、揮発性(RAMのような)及び/または不揮発性(ROM、フラッシュメモリなどのような)であることができる。またサービスプロバイダコンピュータ(複数可)1410またはサーバは、リムーバブルストレージ及び/または非リムーバブルストレージを含むことができる、追加のストレージ1422を含むことができる。追加のストレージ1422は、限定されないが、磁気ストレージ、光学ディスク、及び/またはテープストレージを含むことができる。ディスクドライブ及びそれらの関連したコンピュータ可読媒体は、コンピューティングデバイスのための、コンピュータ可読インストラクション、データ構造、プログラムモジュール、及び他のデータの不揮発性ストレージを提供することができる。いくつかの実施態様において、メモリ1418は、SRAM、DRAM、またはROMなどの、複数の異なるタイプのメモリを含むことができる。
【0114】
リムーバブル及び非リムーバブルの両方のメモリ1418及び追加のストレージ1422は、コンピュータ可読記憶媒体のすべての実施例である。たとえば、コンピュータ可読記憶媒体は、コンピュータ可読インストラクション、データ構造、プログラムモジュール、またはその他のデータなどの情報のストレージのためのいずれかの方法または技術において実装される、揮発性または不揮発性媒体、リムーバブルまたは非リムーバブルメディアを含むことができる。メモリ1418及び追加のストレージ1422は、コンピュータ記憶媒体のすべての実施例である。サービスプロバイダコンピュータ(複数可)1410内に存在することができる追加のタイプのコンピュータ記憶媒体は、限定されないが、PRAM、SRAM、DRAM、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD−ROM、DVDもしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、または所望の情報を格納するために使用されることが可能であり、サービスプロバイダコンピュータ(複数可)1410によりアクセスされることが可能である、いずれかの他の媒体を含むことができる。また上記のいずれかの組み合わせは、コンピュータ可読媒体の範囲内に含まれるべきである。
【0115】
代替に、コンピュータ可読通信媒体は、搬送波または他の伝送などのデータ信号内に送信される、コンピュータ可読インストラクション、プログラムモジュール、または他のデータを含むことができる。しかしながら、本明細書に使用されるように、コンピュータ可読記憶媒体は、コンピュータ可読通信媒体を含まない。
【0116】
またサービスプロバイダコンピュータ(複数可)1410は、ネットワーク(複数可)1408上の、格納されたデータベース、別のコンピューティングデバイスまたはサーバ、ユーザ端末、及び/または他のデバイスと、サービスプロバイダコンピュータ(複数可)1410が通信することを可能にする通信接続(複数可)1424を含むことができる。またサービスプロバイダコンピュータ(複数可)1410は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、ディスプレイ、スピーカー、プリンタ、及び同様のものなどの、I/Oデバイス(複数可)1426を含むことができる。ストレージ1422に加えて、通信接続(複数可)1424及びI/Oデバイス(複数可)1426は、周辺機器として記述されることができる。
【0117】
メモリ1418は、オペレーティングシステム1428、1つ以上のデータストア1430、及び/または1つ以上のアプリケーションプログラム1432、または本明細書に開示される機能を実装するためのサービスを含むことができる。
【0118】
またサービスプロバイダコンピュータ(複数可)1410は、1つ以上の通信チャネル1434を含むことができる。通信チャネル1434は、媒体を提供することができ、この媒体を介して、サービスプロバイダコンピュータ1410のさまざまなコンポーネントは、通信することが可能である。単一の通信チャネル、または複数の通信チャネル1434は、バス、リング、スイッチングファブリック、またはネットワークの形態を取ることができる。
【0119】
本明細書に記述されるモジュールは、ソフトウェアモジュール、ハードウェアモジュール、またはそれらの適切な組み合わせであることができる。モジュールがソフトウェアモジュールである場合に、これらのモジュールは、非一時的なコンピュータ可読媒体上に具現化され、本明細書に記述されるいずれかのコンピュータシステム内のプロセッサにより処理されることが可能である。リアルタイムか、任意のユーザインタラクション前の非同期モードかのいずれか一方において、記述されたプロセス及びアーキテクチャを実行することが可能であることに留意するべきである。モジュールは、
図14に提案される方式において構成されることができる、及び/または本明細書に記述される機能は、別個のモジュールとして存在する1つ以上のモジュールにより提供されることが可能である、及び/または本明細書に記述されるモジュール機能は、複数のモジュールに拡散されることが可能である。
【0120】
本開示の実施形態は、以下の条項を鑑みて説明されることが可能である。
条項1.ネットワークファブリックを介するデータ通信方法であって、
前記ネットワークファブリックを介する単一の接続を使用して、ソースインターネットプロトコル(IP)アドレスから宛先IPアドレスへ転送される関連したデータのストリームをユーザアプリケーションから受信し、
通信プロトコルに従い前記関連したデータのストリームを複数のパケットに分割し、
前記複数のパケットの各パケットについて、
前記関連したデータのストリームと関連する複数のフローレットから、送信される前記パケットについてのそれぞれのフローレットを決定し、
前記パケットについて前記決定されたフローレットに基づき、前記パケットをルーティングするために前記ネットワークファブリックのネットワークスイッチにより使用される前記パケットのヘッダー内のフィールドを設定し、
前記決定されたフローレットを介して前記パケットを送信し、
前記ネットワークファブリックを介して前記複数のフローレットの各フローレット内のパケットを送信する、
ことを備え、
前記通信プロトコルは、ユーザデータグラムプロトコル(UDP)であり、前記パケットの前記ヘッダー内の前記フィールドは、UDPヘッダーのソースポートフィールドである、前記方法。
【0121】
条項2.送信される前記パケットについての前記フローレットを決定することは、
前記複数のフローレットの各フローレット内のアクティブパケット数を決定すること、
前記複数のフローレットの各フローレットのレイテンシを決定すること、
前記複数のフローレットの各フローレットの廃棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも1つを備える、条項1に記載の方法。
【0122】
条項3.前記ネットワークファブリックへ前記複数のフローレットの各フローレット内のパケットを送信することは、1つの物理的なポート、または複数の物理的なポートを介して前記パケットを送信することを備える、条項1または2に記載の方法。
【0123】
条項4.ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるデータをユーザアプリケーションから受信し、
通信プロトコルに従い前記データを複数のパケットに分割し、
前記複数のパケットの各パケットについて、
複数のフローレットから、送信される前記パケットについてそれぞれのフローレットを決定し、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内にフィールドを、前記パケットについて前記決定されたフローレットに基づき設定し、
前記ネットワークを介して送信するために前記決定されたフローレットを介して前記パケットを送信する、
ことを備える、方法。
【0124】
条項5.前記通信プロトコルは、ユーザデータグラムプロトコル(UDP)であり、前記パケットの前記ヘッダー内の前記フィールドは、UDPヘッダーのソースポートフィールドである、条項4に記載の方法。
【0125】
条項6.前記パケットの前記ヘッダー内の前記フィールドは、IPヘッダー内のソースIPアドレス、IPヘッダー内の宛先IPアドレス、IPv6ヘッダー内のFlowIDフィールド、またはマルチプロトコルラベルスイッチング(MPLS)ラベルである、条項4または条項5に記載の方法。
【0126】
条項7.各パケットは、フローレットインデックスまたはパケットシーケンス番号のうちの少なくとも1つを含む、条項4から条項6のいずれかに記載の方法。
【0127】
条項8.前記宛先アドレスを含む宛先エンドポイントは、受信したパケットの前記ヘッダーから前記受信したパケットの前記フローレットインデックスまたは前記パケットシーケンス番号を取得する、条項7に記載の方法。
【0128】
条項9.各フローレットについてのアクティブパケットのシーケンス番号を維持することをさらに備える、条項4から条項8のいずれかに記載の方法。
【0129】
条項10.前記パケットの送信後に、または前記パケットが前記宛先アドレスで受信された確認を受信した後に、アクティブパケットの前記シーケンス番号からパケットの前記シーケンス番号を除去することをさらに備える、条項9に記載の方法。
【0130】
条項11.送信される前記パケットについての前記フローレットを決定することは、
前記複数のフローレットの各フローレット内のアクティブパケット数を決定すること、
前記複数のフローレットの各フローレットのレイテンシを決定すること、
前記複数のフローレットの各フローレットの廃棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも1つを備える、条項4から条項10のいずれかに記載の方法。
【0131】
条項12.1つ以上の物理的なポートを介して前記ネットワークへ前記複数のフローレットの各フローレット内のパケットを送信することをさらに備える、条項4から条項11のいずれかに記載の方法。
【0132】
条項13.前記ネットワークへ前記複数のフローレットの各フローレット内の前記パケットを送信することは、各パケットが各パケットの前記ヘッダー内の情報に基づき送信される1つの物理的なポートを、複数の物理的なポートから選択することを備える、条項12に記載の方法。
【0133】
条項14.送信される前記パケットについての前記フローレットを決定することは、前記ユーザアプリケーションから前記データ以外のデータについてのパケットの前記ヘッダー内の前記フィールド内で設定される値に基づく、条項4から条項13のいずれかに記載の方法。
【0134】
条項15.送信される前記パケットについての前記フローレットを決定することは、使用中のフローレット数を動的に調整することを備える、条項4から条項14のいずれかに記載の方法。
【0135】
条項16.使用中のフローレットの総数は、閾値未満であり、前記閾値は、ネットワークレイテンシ、ネットワーク帯域幅、またはネットワーク輻輳のうちの少なくとも1つに基づき決定される、条項15に記載の方法。
【0136】
条項17.各フローレット内のアクティブパケット数は、閾値未満であり、前記閾値は、ネットワーク輻輳に基づき調整可能である、条項4から条項16のいずれかに記載の方法。
【0137】
条項18.フローレットについての前記元の経路が閾値を超えるレイテンシまたは廃棄率を有する判定に応答して、前記ネットワークを介して異なる経路へ前記フローレット及びその関連したパケットを割り当てることをさらに備える、条項4から条項17のいずれかに記載の前記方法。
【0138】
条項19.処理ロジックと、
前記処理ロジックに結合され、これにより読み出し可能であるコンピュータ可読ストレージデバイスであって、前記処理ロジックが、
ネットワークを介する単一の接続を使用して、ソースアドレスから宛先アドレスへ送信されるメッセージをユーザアプリケーションから受信させ、
通信プロトコルに従い前記メッセージを複数のパケットに分割させ、
前記複数のパケットの各パケットについて、
送信される前記パケットについてのフローレットを複数のフローレットから割り当てさせ、
前記パケットをルーティングするために前記ネットワークのネットワークスイッチにより使用される前記パケット内のフィールドを前記割り当てられたフローレットに基づき設定させ、
前記ネットワークを介して送信するために前記割り当てられたフローレットを介して前記パケットを送信させる、インストラクションを含む前記コンピュータ可読ストレージデバイスと、
前記処理ロジックと結合され、これによりアクセス可能であり、パケットの複数のキューを格納するように構成されるメモリと、
前記ネットワークと通信する1つ以上の物理的なポートと、
を備え、
前記複数のパケットは、前記1つ以上の物理的なポートを介して前記ネットワークへ送信される、装置。
【0139】
条項20.前記通信プロトコルは、ユーザデータグラムプロトコル(UDP)であり、前記パケットの前記ヘッダー内の前記フィールドは、UDPヘッダーのソースポートフィールドである、条項19に記載の装置。
【0140】
条項21.それぞれの前記1つ以上の物理的なポートは、一意のIPアドレスを有し、前記パケットの前記ヘッダー内の前記フィールドは、IPヘッダーの前記ソースIPアドレスフィールドである、条項19または条項20に記載の装置。
【0141】
条項22.送信される前記パケットについての前記フローレットを決定することは、
使用中の前記複数のフローレットの各フローレット内のパケット数を決定すること、
前記複数のフローレットの各フローレットの観測されたレイテンシを決定すること、
前記複数のフローレットの各フローレットの破棄率を取得すること、
前記ユーザアプリケーションの情報を取得すること、または
前記複数のパケットが前記複数のフローレットに割り当てられる方法について前記ユーザアプリケーションから指示を受信すること、
のうちの少なくとも1つを備える、条項19から条項21のいずれかに記載の装置。
【0142】
条項23.前記コンピュータ可読ストレージデバイスは、前記処理ロジックが前記1つ以上の物理的なポートからパケットまたは肯定応答を受信させるインストラクションをさらに備える、条項19から条項22のいずれかに記載の装置。
【0143】
条項24.前記装置は、システムオンチップ(SOC)、プロセッサ、ネットワークインタフェースカード(NIC)、スイッチ特定用途向け集積回路(ASIC)、またはフィールドプログラマブルゲートアレイ(FPGA)のうちの1つを含む、条項19から条項23のいずれかに記載の装置。
【0144】
条項25.前記処理ロジックは、SOC、プロセッサ、ASICまたはFPGAのうちの1つを含む、条項19から条項24のいずれかに記載の装置。
【0145】
図15は、さまざまな実施形態に従い態様を実装するための例示的な環境1500の態様を示す。理解されるように、ウェブベースの環境が説明の目的のために使用されるが、多様な実施形態を実装するために異なる環境が必要に応じて使用され得る。環境は電子クライアントデバイス1502を含み、電子クライアントデバイスは、要求、メッセージ、または情報を適切なネットワーク1504を介して送信し、受信するように、及びデバイスのユーザに情報を搬送して戻すように動作可能である、任意の適切なデバイスを含み得る。係るクライアントデバイスの実施例には、パーソナルコンピュータ、携帯電話、ハンドヘルドメッセージングデバイス、ラップトップコンピュータ、セットトップボックス、パーソナルデータアシスタント、電子ブックリーダー等が挙げられる。ネットワークは、イントラネット、インターネット、セルラネットワーク、ローカルエリアネットワーク、もしくは任意の他の係るネットワークまたはその組合せを含む、任意の適切なネットワークを含むことがある。係るシステムのために使用される構成要素は、選択されるネットワーク及び/または環境の種類に少なくとも部分的に依存することがある。係るネットワークを介して通信するためのプロトコル及び構成要素は周知であり、本明細書において詳細に説明されない。ネットワークを介する通信は、有線接続または無線接続及びそれらの組合せによって可能にされることができる。この実施例では、環境は要求を受信し、要求に応えてコンテンツを提供するためのウェブサーバ1506を含むので、ネットワークはインターネットを含むが、他のネットワークの場合、当業者に明白であるように、同様の目的を果たす代替のデバイスが使用されることができる。
【0146】
例示的な環境には、少なくとも1つのアプリケーションサーバ1508及びデータストア1510が含まれる。いくつかのアプリケーションサーバ、レイヤ、もしくは他の要素、プロセス、またはコンポーネントが存在することがあり、これらは、チェーン接続されるか、またはそれ以外の方法で構成されることがあり、適切なデータストアからデータを得るなどのタスクを実行するためにインタラクトすることがあることを理解されたい。本明細書で使用されるように、用語「データストア」は、データを記憶する、データにアクセスする、及びデータを取り出すことができる任意のデバイスまたはデバイスの組合せを指し、これは、データサーバ、データベース、データ記憶装置、及びデータ記憶媒体の任意の組合せ及び数を、任意の標準的な環境、分散環境、またはクラスタ化された環境に含んでよい。アプリケーションサーバは、必要に応じてデータストアと統合してクライアントデバイスのための1つ以上のアプリケーションの態様を実行し、データアクセス及びアプリケーションのためのビジネスロジックの大多数を処理するための任意の適切なハードウェア及びソフトウェアを含むことがある。アプリケーションサーバは、データストアと協働してアクセス制御サービスを提供し、ユーザに転送されるテキスト、グラフィックス、音声、及び/またはビデオなどのコンテンツを生成することができ、このコンテンツは、この実施例ではハイパーテキストマークアップ言語(「HTML」)、拡張マークアップ言語(「XML」)、または別の適切な構造化言語の形でウェブサーバによってユーザに提供されてよい。すべての要求及び応答の処理、ならびにクライアントデバイス1502とアプリケーションサーバ1508との間のコンテンツの送達は、ウェブサーバによって処理されることができる。本明細書で説明される構造化コードは、本明細書の他の部分で説明される任意の適切なデバイスまたはホストマシンで実行されることができるので、ウェブサーバ及びアプリケーションサーバは不要であり、単に例のコンポーネントであることを理解されたい。
【0147】
データストア1510は、特定の態様に関するデータを格納するために、複数の別個のデータテーブル、データベースまたは他のデータストレージメカニズム、及び媒体を含み得る。たとえば、示されるデータストアは、生産側にコンテンツを提供するために使用されることができる生産データ1512及びユーザ情報1516を格納するためのメカニズムを含む。また、データストアは、報告、分析、または他の係る目的のために使用されることができる、ログデータ1514を格納するためのメカニズムを含むと示される。ページ画像情報及びアクセス権情報等のデータストアに格納される必要があり得る多くの他の態様が存在し得、それらは、必要に応じて上に列記されるメカニズムのうちのいずれか、またはデータストア1510内のさらなるメカニズムに格納され得ることを理解されたい。データストア1510は、データストアと関連付けられたロジックを通して、アプリケーションサーバ1508からインストラクションを受信し、インストラクションに応答してデータを入手、更新またはそれ以外の場合処理するよう動作可能である。一例では、ユーザは特定のタイプのアイテムに対する検索要求を提示する可能性がある。この場合、データストアは、ユーザ情報にアクセスしてユーザのアイデンティティを検証する可能性があり、そのタイプのアイテムについての情報を入手するためにカタログ詳細情報にアクセスすることができる。次いでユーザがユーザデバイス1502のブラウザを介して見ることができるウェブページ上に列記する結果などの情報は、ユーザに返すことができる。関心のある特定のアイテムの情報は、ブラウザの専用ページまたはウィンドウ内でみられることができる。
【0148】
各サーバは、通常そのサーバの一般的な管理及び操作のための実行可能なプログラム命令を提供するオペレーティングシステムを含み、通常サーバのプロセッサによって実行されるときに、サーバがその意図される機能を実行できるようにする命令を記憶するコンピュータ可読記憶媒体(例えば、ハードディスク、ランダムアクセスメモリ、読出し専用メモリ等)を含む。サーバのオペレーティングシステム及び一般的な機能性の適切な実装は既知であるまたは市販されており、特に、本明細書の開示に鑑みて当業者によって容易に実装される。
【0149】
一実施形態における環境は、1つ以上のコンピュータネットワークまたは直接接続を使用し、通信リンクを介して相互接続されるいくつかのコンピュータシステム及び構成要素を利用する、分散型コンピューティング環境である。しかしながら、係るシステムが
図15に示されるよりも少ない数または多い数のコンポーネントを含むシステムにおいて同等に良好に動作し得ることは、当業者によって理解される。したがって、
図15のシステム1500の描写は、本質的に例示であり、本開示の範囲を限定するものではないと見なされるべきである。
【0150】
多様な実施形態は多種多様な動作環境でさらに実装されることができ、該動作環境は場合によっては、いくつかのアプリケーションのいずれかを操作するために使用されることができる1つ以上のユーザコンピュータ、コンピューティングデバイス、または処理装置を含むことがある。ユーザデバイスまたはクライアントデバイスは、標準オペレーティングシステムを実行するデスクトップコンピュータまたはラップトップコンピュータのいくつかの汎用パーソナルコンピュータ等のいずれか、ならびに携帯電話向けソフトウェアを実行し、かついくつかのネットワーキングプロトコル及びメッセージングプロトコルをサポートできる、セルラーデバイス、無線デバイス、及びハンドヘルドデバイスを含むことがある。係るシステムは、さまざまな市販のオペレーティングシステムならびに開発及びデータベース管理等の目的のための他の既知のアプリケーションを実行するいくつかのワークステーションを含むこともある。また、これらのデバイスは、ダミー端末、シンクライアント、ゲーム機、及びネットワークを介して通信できる他のデバイス等の他の電子デバイスを含むこともある。
【0151】
大部分の実施形態は、伝送制御プロトコル/インターネットプロトコル(「TCP/IP」)、オープンシステムインターコネクション(「OSI」)、ファイル転送プロトコル(「FTP」)、ユニバーサルプラグアンドプレイ(「UpnP」)、ネットワークファイルシステム(「NFS」)、共通インターネットファイルシステム(「CIFS」)、及びAppleTalk等のさまざまな市販のプロトコルのいずれかを使用し、通信をサポートするための当業者によく知られているだろう少なくとも1つのネットワークを活用する。ネットワークは、例えば、ローカルエリアネットワーク、広域ネットワーク、仮想プライベートネットワーク、インターネット、イントラネット、エクストラネット、公衆交換電話網、赤外線ネットワーク、無線ネットワーク、及びその任意の組合せであることがある。
【0152】
ウェブサーバを利用する実施形態では、ウェブサーバは、ハイパーテキスト転送プロトコル(「HTTP」)サーバ、FTPサーバ、共通ゲートウェイインタフェース(「CGI」)サーバ、データサーバ、Javaサーバ、及びビジネスアプリケーションサーバを含むさまざまなサーバまたは中間層アプリケーションのいずれかを実行できる。また、サーバ(複数可)はJava(登録商標)、C、C#、もしくはC++などの任意のプログラミング言語、またはPerl、Python、もしくはTCLなどの任意のスクリプト言語、ならびにその組み合せで作成された1つ以上のスクリプトまたはプログラムとして実装されてよい1つ以上のウェブアプリケーションを実行することによってなど、ユーザデバイスからの要求に応えてプログラムまたはスクリプトを実行し得る。また、サーバ(複数可)は、Oracle(登録商標)、Microsoft(登録商標)、Sybase(登録商標)、及びIBM(登録商標)から市販されているものを含むがこれらに制限されないデータベースサーバを含んでもよい。
【0153】
環境は、上述のさまざまなデータストアならびに他のメモリ及び記憶媒体を含むことがある。これらは、コンピュータの1つ以上にローカルな(及び/もしくはそこに常駐する)またはネットワーク全体でのコンピュータのいずれかまたはすべてから遠く離れた記憶媒体上等のさまざまな場所に常駐することがある。実施形態の特定の一式では、情報は、当業者によく知られているストレージエリアネットワーク(「SAN」)に常駐することがある。同様に、コンピュータ、サーバ、または他のネットワークデバイスによる機能を実行するためのあらゆる必要なファイルは、必要に応じてローカルに及び/または遠隔に記憶されてよい。システムがコンピュータ化デバイスを含む場合、係るそれぞれのデバイスはバスを介して電気的に結合されてよいハードウェア要素を含むことがあり、該要素は、例えば、少なくとも1つの中央演算処理装置(「CPU」)、少なくとも1つの入力装置(例えば、マウス、キーボード、コントローラ、タッチスクリーン、またはキーパッド)及び少なくとも1つの出力装置(例えば、表示装置、プリンタ、またはスピーカー)を含むことがある。また、係るシステムは、例えば、ディスクドライブ、光学式記憶デバイス等の1つ以上の記憶装置、及び例えば、ランダムアクセスメモリ(「RAM」)または読出し専用メモリ(「ROM」)等のソリッドステート記憶装置、ならびに取り外し可能な媒体デバイス、メモリカード、フラッシュカード等を含んでもよい。
【0154】
また、係るデバイスは、上述のようにコンピュータ可読記憶媒体読取り装置、通信装置(例えば、モデム、ネットワークカード(無線または有線))、赤外線通信装置等)、及び作業メモリを含むこともある。コンピュータ可読記憶媒体読取り装置は、遠隔記憶装置、ローカル記憶装置、固定記憶装置、及び/または取外し可能な記憶装置を表すコンピュータ可読媒体、ならびにコンピュータ可読情報を一時的に及び/またはより恒久的に含む、記憶する、伝送する、及び取り出すための記憶媒体と接続できる、またはそれらを受け取るように構成できる。また、システム及び多様なデバイスは、通常、オペレーティングシステム及びクライアントアプリケーションもしくはウェブブラウザ等のアプリケーションプログラムを含む、いくつかのソフトウェアアプリケーション、モジュール、サービス、または少なくとも1つの作業用メモリデバイスの中に位置する他の要素を含む。代替の実施形態が、上述されたものの多数の変形形態も有してよいことが理解されるべきである。例えば、カスタマイズされたハードウェアが使用される可能性もある、及び/または特定の要素がハードウェア、(アプレット等のポータブルソフトウェアを含む)ソフトウェア、または両方で実装される可能性もある。さらに、ネットワーク入力/出力装置などの、他のコンピューティングデバイスへの接続が用いられてよい。
【0155】
コードまたはコードの部分を含むための記憶媒体及びコンピュータ可読媒体は、RAM、ROM、電子的消去プログラム可能型読取専用メモリ(「EEPROM」)、フラッシュメモリ、もしくは他のメモリ技術、コンパクトディスクリードオンリーメモリ(「CD−ROM])、デジタルバーサタイルディスク(DVD)、もしくは他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、または所望の情報を記憶するために使用されることができ、システムデバイスによってアクセスされることができる任意の他の媒体を含む、コンピュータ可読インストラクション、データ構造、プログラムモジュール、または他のデータなどの情報の記憶及び/または伝送のために任意の方法または技術で実装される揮発性及び不揮発性の媒体、リムーバブル及び非リムーバブルの媒体などであるが、これに限定されるものではない記憶媒体及び通信媒体を含む当該技術において既知の、または使用される任意の適切な媒体を含むことがある。本開示及び本明細書に示される教示に基づいて、当業者は多様な実施形態を実装するための他の方法及び/または手法を理解するであろう。
【0156】
したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考えられるべきである。しかしながら、特許請求の範囲で説明される本開示のより広範の精神及び範囲から逸脱することなく、多様な修正形態及び変形形態が本明細書に加えられ得ることは明らかである。
【0157】
他の変形形態は、本開示の趣旨内にある。したがって、開示された技術は多様な修正形態及び代替構成の影響を受けやすいが、その特定の示される実施形態は図面に示され、上記に詳細に説明されている。しかしながら、本開示を開示された特定の1つ以上の形に限定する意図はなく、逆に意図は、添付の特許請求の範囲によって定義される本開示の精神及び範囲に入るすべての修正形態、代替的な構成、及び均等物を包含することであることが理解されるべきである。
【0158】
開示される実施形態を説明する文脈における(特に以下の特許請求の範囲の文脈における)用語「a」、「an」、及び「the」ならびに同様の指示語の使用は、本明細書において別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、単数及び複数の双方を網羅すると解釈される。用語「comprising(備える)」、「having(有する)」「including(含む)」及び「containing(含む)」は、特に断りのない限り、オープンエンド用語(すなわち「を含むが、これらに限定されるものではない」を意味する)として解釈されるべきである。用語「connected(接続された)」は、たとえ介在するものがあっても部分的にまたは完全に、中に含まれる、取り付けられる、また互いに結合されるとして解釈されるべきである。本明細書での値の範囲の列挙は、本明細書に別段の指示がない限り、単に、範囲内に入るそれぞれの別個の値に個別に言及する短縮方法としての役割を果たすことが意図され、各個別の値は、それが個別に本明細書に記載されているかのように本明細書に組み込まれる。本明細書に記載されるすべての方法は、本明細書で別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、任意の適切な順序で実行できる。本明細書で示される任意の及びすべての例、または例示的な言語(例えば、「など」)は、単に本開示の実施形態をよりよく示すことを意図しており、別段の主張がない限り、本開示の範囲を限定するものではない。本明細書のいかなる言葉も、本開示の実施にとって必須として任意の請求されていない要素を示すものと解釈されるべきではない。
【0159】
特に断りのない限り、句「X、Y、またはZの少なくとも1つ」のような選言的な言葉は、項目、用語等がX、Y、もしくはZまたはそのいずれかの組合せ(例えば、X、Y、及び/またはZ)であってよいことを示すために一般的に用いられるとして文脈の中で理解されることが意図される。したがって、係る選言的言語は、特定の実施形態がXの少なくとも1つ、Yの少なくとも1つ、及びZの少なくとも1つがそれぞれ存在することを必要とすることを暗示することを概して意図しておらず、意味するべきではない。
【0160】
本開示を実施するために発明者に知られている最良の形態を含む本開示の好ましい実施形態が本明細書に説明される。これらの好ましい実施形態の変形形態は、前述の説明を読むと当業者に明らかになり得る。本発明者らは、当業者がこのような変形形態を必要に応じて利用することを期待し、本発明者らは本開示が本明細書に具体的に記載されたものとは別の方法で実施されることを意図する。したがって、本開示は、適用法によって許容されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正形態及び均等物を含む。さらに、本明細書に別段の指示がない限り、または文脈に明らかに矛盾するものでない限り、上述要素のすべての考え得る変形形態での上記要素の任意の組合せが本開示に包含される。
【0161】
あたかも各参考文献が個々にかつ具体的に参照によりその全体として本明細書に援用されることが示されるかのように、本明細書で引用した刊行物、特許出願及び特許を含むすべての参考文献は、同程度に参照により本明細書に援用される。