JP2023524665A - ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用すること - Google Patents
ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用すること Download PDFInfo
- Publication number
- JP2023524665A JP2023524665A JP2022565532A JP2022565532A JP2023524665A JP 2023524665 A JP2023524665 A JP 2023524665A JP 2022565532 A JP2022565532 A JP 2022565532A JP 2022565532 A JP2022565532 A JP 2022565532A JP 2023524665 A JP2023524665 A JP 2023524665A
- Authority
- JP
- Japan
- Prior art keywords
- network
- buffers
- queuing
- applications
- shared
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1652—Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/36—Handling requests for interconnection or transfer for access to common bus or bus system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9005—Buffering arrangements using dynamic buffer space allocation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9047—Buffering arrangements including multiple buffers, e.g. buffer pools
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Software Systems (AREA)
- Multi Processors (AREA)
- Computer And Data Communications (AREA)
- Stackable Containers (AREA)
- Packaging For Recording Disks (AREA)
- Pallets (AREA)
- Small-Scale Networks (AREA)
- Stacking Of Articles And Auxiliary Devices (AREA)
Abstract
コンピューティング環境において拡張ネットワーク・スタック・フレームワークを実施するための実施形態を提供する。1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファが、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら共有され得る。
Description
本発明は、概して、コンピューティング・システムに関し、より詳細には、コンピューティング環境でネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェース(coherently attached interface)を利用するための様々な実施形態に関する。
今日の社会では、消費者、実業家、教育者などが、多様な設定において増加した頻度で様々なコンピューティング・ネットワーク・システムを使用する。コンピュータ・システムは、職場、家庭、または学校で見られ得る。コンピュータ・システムは、データを処理し記憶するためのデータ記憶システム、またはディスク記憶システムを含み得る。近年、ソフトウェア技術およびハードウェア技術の両方が、驚くべき進歩を経験している。新たな技術を用いて、ますます多くの機能が追加され、これらのコンピューティング・システムでの使用に、さらに大きな利便性がもたらされる。
コンピューティング環境でネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するための様々な実施形態が提供される。1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファが、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイパスしながら共有され得る。
第1の態様から見ると、本発明は、プロセッサによって、コンピューティング環境において拡張ネットワーク・スタック・フレームワークを利用する方法であって、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有することを含む、方法を提供する。
好ましくは、本発明は、共有ライブラリによって複数のネットワーク・バッファを制御することをさらに含む方法を提供する。
好ましくは、本発明は、ネットワーク・インターフェースを用いて1つまたは複数のアプリケーション間で複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有することをさらに含み、複数のネットワーク・バッファが入力/出力(I/O)制御に使用される、方法を提供する。
好ましくは、本発明は、循環バッファを用いて、メモリ・ポインタをコヒーレントにアタッチされたデバイスと交換することをさらに含む方法を提供する。
好ましくは、本発明は、ネットワーク・バッファ送信、受信、および操作のために複数のネットワーク・バッファについてキューイングおよびプーリング動作を実行することをさらに含む方法を提供する。
好ましくは、本発明は、キューイングおよびプーリング動作が、1つまたは複数のキューおよび1つまたは複数のプールから複数のネットワーク・バッファのうちの1つを移動すること、割り当てること、または再割り当てすることをさらに含む方法を提供する。
好ましくは、本発明は、複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立することをさらに含む方法を提供する。
別の態様から見ると、本発明は、拡張ネットワーク・スタック・フレームワークを利用するシステムであって、実行時にシステムに、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有させる実行可能命令を有する1つまたは複数のコンピュータを備えるシステムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、共有ライブラリによって複数のネットワーク・バッファを制御させる、システムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、ネットワーク・インターフェースを用いて1つまたは複数のアプリケーション間で複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有させ、複数のネットワーク・バッファが入力/出力(I/O)制御に使用される、システムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、循環バッファを用いてメモリ・ポインタをコヒーレントにアタッチされたデバイスと交換させる、システムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、ネットワーク・バッファ送信、受信、および操作のために複数のネットワーク・バッファについてキューイングおよびプーリング動作を実行させる、システムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから複数のネットワーク・バッファのうちの1つを移動させ、割り当てさせ、または再割り当てさせる、システムを提供する。
好ましくは、本発明は、実行可能命令が、実行時にシステムに、複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立させる、システムを提供する。
別の態様から見ると、本発明は、プロセッサによって拡張ネットワーク・スタック・フレームワークを利用するためのコンピュータ・プログラム製品であって、コンピュータ・プログラム製品が、コンピュータ可読プログラム・コード部が記憶された非一過性コンピュータ可読記憶媒体を含み、コンピュータ可読プログラム・コード部が、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイパスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有する、実行可能部を含む、コンピュータ・プログラム製品を提供する。
好ましくは、本発明は、共有ライブラリによって複数のネットワーク・バッファを制御する実行可能部をさらに含むコンピュータ・プログラム製品を提供する。
好ましくは、本発明は、ネットワーク・インターフェースを用いて1つまたは複数のアプリケーション間で複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有する実行可能部をさらに含み、複数のネットワーク・バッファが入力/出力(I/O)制御に使用される、コンピュータ・プログラム製品を提供する。
好ましくは、本発明は、循環バッファを用いてメモリ・ポインタをコヒーレントにアタッチされたデバイスと交換し、ネットワーク・バッファ送信、受信、および操作のために複数のネットワーク・バッファについてキューイングおよびプーリング動作を実行する、実行可能部をさらに含むコンピュータ・プログラム製品を提供する。
好ましくは、本発明は、キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから複数のネットワーク・バッファのうちの1つを移動し、割り当て、または再割り当てする、実行可能部をさらに含むコンピュータ・プログラム製品を提供する。
好ましくは、本発明は、複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立する実行可能部をさらに含むコンピュータ・プログラム製品を提供する。
本発明の利点が容易に理解されるために、簡潔に上述した本発明のより詳細な説明が、添付図面において例示される特定の実施形態に対する参照によって表されている。これらの図面が、単に本発明の典型的な実施形態のみを示し、したがってその範囲を限定するものと考えられるべきではないと理解して、本発明は、添付図面の使用を通して、追加の特殊性および詳細と共に記載され説明される。
導入として、メモリ・コヒーレンスとも呼ばれるキャッシュ・コヒーレンスは、2つ以上のプロセッサまたはコアがメモリの共通領域を共有するコンピュータ・システムの設計に影響を及ぼす問題である。単一プロセッサ・システムでは、作業の全てを行う処理要素が1つだけ存在し、したがって、所与のメモリ位置から読み出しまたは書き込み可能な処理要素は1つだけである。その結果、値が変更されるとき、対応するメモリ位置の後続の読み出し動作は全て、たとえそれがキャッシュされているとしても、更新された値を見ることとなる。
一方、マルチプロセッサ(またはマルチコア・システム)では、同時に動作する処理要素が2つ以上存在し、よってそれらは、同時に同じメモリ位置にアクセスすることが可能である。どのプロセッサもこの位置のデータを変更しなければ、プロセッサは、いつまでもデータを共有し、好きなようにデータをキャッシュし得る。しかし、あるプロセッサがその位置を更新するとすぐに、他のプロセッサは、そのローカル・キャッシュに存在し得る古いコピーに対して動作する可能性がある。その結果、共有される値に対する変更を全ての処理要素に通知するために何らかの方式が必要であり、そのような方式は、「キャッシュ・コヒーレンス・プロトコル」と呼ばれ、そのようなプロトコルが採用される場合、システムは「キャッシュ・コヒーレンス」を有すると言われる。キャッシュ・コヒーレンスの厳密な性質および意味は、コヒーレンス・プロトコルが実施する一貫性モデルによって決定される。
キャッシュ・コヒーレンス・プロトコルは、典型的には、メモリ・ブロックのキャッシュされたコピーに関連付けられて記憶されたキャッシュ状態のセット、およびキャッシュ状態と遷移が行われた先のキャッシュ状態との間の遷移をトリガするイベントを定義する。したがって、システムにわたってデータのコヒーレンスを維持するためには、システム・メモリのコンテンツの様々なプロセッサ・コアの「ビュー」間で少なくとも最低限必要なコヒーレンス・レベルを保証するように、例えば、ディレクトリベース・プロトコル、スヌープベース・プロトコル、それらの組み合わせ、または他の変形などのキャッシュ・コヒーレンス・プロトコルが用いられる。
加えて、様々なシステム・バス、システム・イントラコネクト、および様々なアプリケーションとローカルまたは近接システムとの間のインターコネクト(相互接続)を有する現代のコンピューティング・システムは、様々なコンポーネント間でデータを伝送し、メモリを共有するための様々なプロトコルを有する。例えば、コンピューティング・システムは、キャッシュ・コヒーレンスを用いて汎用プロセッサと異種コンピューティングのためのアクセラレーション・デバイスとの間のコヒーレントなインターコネクトを可能にする、向上した性能を提供することを目指している。アクセラレーション・デバイスは、例えば、PCI Express(PCIe)バス(PCIeは、1つのレーンから多くのレーンへスケールし得る、マルチレーンのポイントツーポイント・インターコネクトである)などの何らかの接続において固有の帯域幅制限またはレイテンシの回避を試みる。即ち、コンピューティング・システムは、様々な種類のプロセッサのメモリ空間にわたるデータ・アクセスを提供するときに、キャッシュ・コヒーレンスを維持しつつ、向上した計算効率を提供しようとする。例えば、オープン・コヒーレント・アクセラレータ・プロセッサ・インターフェース(CAPI)は、帯域幅を増加させ、かつより低いレイテンシを提供するためのプロセッサとアクセラレータとの間のインターフェースである。別の例として、アクセラレータ用キャッシュ・コヒーレント・インターコネクト(「CCIX」)が用いられてもよく、これは、高速ハードウェア・アクセラレータ用チップ間インターコネクトを提供するためにPCI Express(PCIe)上に構築され、特定のアプリケーションを対象とする。
しかしながら、これらの最新のコンピューティング・システム内でさえ、様々なアプリケーションとローカルまたは近接システムとの間のデータの伝送、通信、または受信、あるいはそれらの組み合わせは、依然としてネットワーク経路に沿ったネットワーク・レイテンシを経験する。例えば、スイッチング・レイヤをほとんど有しない密接に統合された高性能コンピュータ(「HPC」)・システムの状況では、対象アプリケーションへのデータの配信は、サーバ間の(例えば、特にネットワーク・スタックを横断する必要がある場合に、少なくとも、少数の共同設置ラックのスケールの範囲内の)データ伝送よりも高速の数ナノ秒(「nsec」)であり得る、ネットワーク経路遅延(宛先デバイス内部に入ると)を含む。したがって、キャッシュ・コヒーレント・インターコネクト・システムを提供して、キャッシュ・コヒーレンスを維持し、帯域幅を増加させ、HPC/異種コンピューティング・システムにおいてネットワーク・アクセス・レイテンシ経路を減少させ/除去する必要が存在する。この場合に、ネットワーク・アクセス・レイテンシは、データ信号がネットワーク・インターフェースに到着した時から始まり、受信側アプリケーションがデータを使用することを可能にするように共有メモリがデータを有することで終了(例えば、宛先メモリ/メモリ・セルへのデータの実際のデータ・コピーで終了)し得る。
したがって、本明細書に記載される様々な実施形態は、オフチップ周辺装置によるシステム・メモリへのローカル・システム・バス・アーキテクチャに依存しないロードおよびストア動作のダイレクト・マスタリングを可能にする、プロセッサのキャッシュ・コヒーレント・アタッチメントを活用する拡張ネットワーク・アーキテクチャを提供する。このように、メモリ・トランザクションが特定のバス・アーキテクチャから分離され、(アクセラレータ、ネットワーク・インターフェースなどの)同一の修正されていないコヒーレントにアタッチされたロジックが、異なるSoCアーキテクチャにインターフェースされ得る。一態様では、様々な実施形態が、ネットワーク・アクセス・レイテンシ経路を改善し、1つまたは複数のドライバおよびオペレーティング・システムをバイパスしながら、1つまたは複数のアプリケーションと1つまたは複数のネットワーク・インターフェースとの間に共有メモリを提供する。
拡張ネットワーク・アーキテクチャの例示される実施形態のメカニズムは、オフチップ・アクセラレータが、システム・オン・チップ(「SoC」)と統合され、同一のメモリ・アクセス・データ経路(例えば、比較可能なレイテンシおよび帯域幅を有するオンチップ・エンティティ(例えば、プロセッサ、コプロセッサ)に類似のハードウェア・データ経路)を用いてシステム・メモリにダイレクト・マスタリングし、キャッシュ・コヒーレントにロードおよびストアすることを可能にする。
追加態様において、本発明は、メモリ内データへのダイレクト・アクセス、割り込みの発生を提供し、CPUとスピンロックに対してアトミックに競合する能力も、コヒーレントにアタッチされたポートによって提供される。これは、アプリケーションおよびコヒーレントにアタッチされたデバイスがデータ・フォーマットについて合意する場合に、任意のオペレーティング・システムのデバイス・ドライバ・サポートおよびスキャッタ/ギャザー・データ転送に使用されるDMAプログラマブル・ハードウェアを必要としないことを意味する。ドライバなしの統合を可能にすることおよび提供することによって、スレッド相互排他のように見える、即ちネットワークI/Oがハードウェア・スレッドの特殊形式として統合される、プログラミング・モデルおよびアプリケーション・プログラミング・インターフェース(「API」)が、さらに簡易化されて向上した計算効率をもたらす。
したがって、本発明は、様々なアプリケーションとネットワーク・インターフェースとの間でメモリ・バッファ(例えば、ネットワーク・バッファ)を共有するネットワーク・フレームワーク・スタックを提供する。一態様では、メモリ・バッファは、ネットワーク・バッファと相互交換可能に使用され得る。ネットワーク・バッファは、オペレーティング・システム(「OS」)によって1つまたは複数のアプリケーションの代わりに割り当てられてもよく、ライブラリ(例えば、共有ライブラリ)の制御下で供給される。一態様では、共有メモリのメカニズムに対して確立される全ての関与アプリケーション間の共有アドレス空間が、入力/出力(「I/O」)制御(即ち、ポインタの交換およびスピンロック・ハンドリング)のために提供および使用され得る。その際、各アプリケーションは、アプリケーション・ネットワーク・バッファを含む共通アドレス空間でのアクセラレータを用いた共有アクセスを保護されるメモリ管理ユニット(「MMU」)を有し得る。
このようにして、本発明は、コヒーレントにアタッチされたポート技術を用いて、「ブラック・ボックス」内のデータ配信について先例のないレイテンシを達成し(例えば、現在のRDMAの往復レイテンシは、1つのスイッチング・レイヤで1.2マイクロ秒「μsec」であり、コヒーレントにアタッチされたインターフェースが、このレイテンシを600~700ナノ秒「nsec」まで減少させ得る)、ネットワーク媒体が極めて高いバーストを活用することを可能にする(即ち、全アプリケーション・レベルのメッセージ・サイズに対して単一ハードウェア・レベルのバーストがここで可能である)ことによって、リモート・ダイレクト・メモリ・アクセス(「RDMA」)型ネットワーク通信をさらに簡易化するようにポインタおよびスピンロックをハンドリングすることのみにより、アプリケーションがネットワーク上でメモリ内データをシームレスに交換することを可能にする。ネットワーク・スタック・フレームワーク・システムの例示される実施形態は、いかなるネットワーク媒体アクセス・プロトコル(「MAC」)またはリンク・レイヤ制御プロトコル(「LLC」)にも依存しないフレームワークであり、したがって、任意のパケットまたは回路ネットワーク技術と潜在的に統合可能である。
本開示は、クラウド・コンピューティングについての詳細な説明を含むが、本明細書に列挙される教示の実装は、クラウド・コンピューティング環境に限定されないと予め理解されたい。むしろ、本発明の実施形態は、現在既知の、または後に開発される任意の他の種類のコンピューティング環境と併せて実装されることが可能である。
クラウド・コンピューティングは、最小の管理労力またはサービス・プロバイダとの対話で迅速に供給され、リリースされ得る、構成可能なコンピューティング・リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想機械、およびサービス)の共有プールへの便利なオンデマンド・ネットワーク・アクセスを可能にするためのサービス配信のモデルである。このクラウド・モデルは、少なくとも5つの特性、少なくとも3つのサービス・モデル、および少なくとも4つの展開モデルを含み得る。
特性は、以下の通りである。
オンデマンド・セルフサービス:クラウド消費者は、サービス・プロバイダとの人的対話を必要とすることなく、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングし得る。
幅広いネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種シン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを通してアクセスされる。
リソースの共用:プロバイダのコンピューティング・リソースが、マルチテナント型モデルを使用して複数の消費者にサービスするためにプールされ、異なる物理リソースおよび仮想リソースが要求に従って動的に割り当ておよび再割り当てされる。消費者が、概して、提供されるリソースの正確な位置に対する制御または知識を有しないが、より高い抽象レベル(例えば、国、州、またはデータセンタ)において位置を指定することが可能であり得るという点において、位置独立性がある。
スピーディな拡張性:機能は、場合によっては自動的に、即座にスケール・アウトするようにスピーディかつ弾力的に供給され、即座にスケール・インするようにスピーディに解放され得る。消費者に対しては、供給に利用可能な機能が、多くの場合無制限であるように見え、いつでも任意の量で購入可能である。
サービスが計測可能であること:クラウド・システムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブ・ユーザ・アカウント)に適したある抽象レベルにおいて計測機能を活用することによって、リソース使用を自動的に制御し、最適化する。リソース使用量は、モニタリングされ、制御され、報告されて、利用サービスのプロバイダおよび消費者の両方に透明性をもたらし得る。
オンデマンド・セルフサービス:クラウド消費者は、サービス・プロバイダとの人的対話を必要とすることなく、必要に応じて自動的に、サーバ時間およびネットワーク・ストレージなどのコンピューティング機能を一方的にプロビジョニングし得る。
幅広いネットワーク・アクセス:機能は、ネットワーク上で利用可能であり、異種シン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による使用を促進する標準的なメカニズムを通してアクセスされる。
リソースの共用:プロバイダのコンピューティング・リソースが、マルチテナント型モデルを使用して複数の消費者にサービスするためにプールされ、異なる物理リソースおよび仮想リソースが要求に従って動的に割り当ておよび再割り当てされる。消費者が、概して、提供されるリソースの正確な位置に対する制御または知識を有しないが、より高い抽象レベル(例えば、国、州、またはデータセンタ)において位置を指定することが可能であり得るという点において、位置独立性がある。
スピーディな拡張性:機能は、場合によっては自動的に、即座にスケール・アウトするようにスピーディかつ弾力的に供給され、即座にスケール・インするようにスピーディに解放され得る。消費者に対しては、供給に利用可能な機能が、多くの場合無制限であるように見え、いつでも任意の量で購入可能である。
サービスが計測可能であること:クラウド・システムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブ・ユーザ・アカウント)に適したある抽象レベルにおいて計測機能を活用することによって、リソース使用を自動的に制御し、最適化する。リソース使用量は、モニタリングされ、制御され、報告されて、利用サービスのプロバイダおよび消費者の両方に透明性をもたらし得る。
サービス・モデルは、以下の通りである。
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウド・インフラストラクチャ上で動作するプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通して、様々なクライアント・デバイスからアクセス可能である。消費者は、限定されたユーザ固有アプリケーションの構成設定は例外である可能性があるが、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能でさえも含む、基礎的なクラウド・インフラストラクチャを管理または制御しない。
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、消費者が作成したアプリケーションまたは消費者が取得したアプリケーションを、クラウド・インフラストラクチャ上に展開することである。消費者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基礎的なクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーション、および、場合によっては、環境構成をホストするアプリケーションに対して制御を有する。
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、処理、ストレージ、ネットワーク、ならびに消費者がオペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを展開および実行することが可能な、他の基本コンピューティング・リソースをプロビジョニングすることである。消費者は、基礎となるクラウド・インフラを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションに対して制御を有し、かつ場合によっては、選択されたネットワーキング・コンポーネント(例えば、ホスト・ファイアウォール)に対する限定的な制御を有する。
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウド・インフラストラクチャ上で動作するプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(例えば、ウェブ・ベースの電子メール)などのシン・クライアント・インターフェースを通して、様々なクライアント・デバイスからアクセス可能である。消費者は、限定されたユーザ固有アプリケーションの構成設定は例外である可能性があるが、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能でさえも含む、基礎的なクラウド・インフラストラクチャを管理または制御しない。
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、消費者が作成したアプリケーションまたは消費者が取得したアプリケーションを、クラウド・インフラストラクチャ上に展開することである。消費者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基礎的なクラウド・インフラストラクチャを管理または制御しないが、展開されたアプリケーション、および、場合によっては、環境構成をホストするアプリケーションに対して制御を有する。
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、処理、ストレージ、ネットワーク、ならびに消費者がオペレーティング・システムおよびアプリケーションを含み得る任意のソフトウェアを展開および実行することが可能な、他の基本コンピューティング・リソースをプロビジョニングすることである。消費者は、基礎となるクラウド・インフラを管理または制御しないが、オペレーティング・システム、ストレージ、展開されたアプリケーションに対して制御を有し、かつ場合によっては、選択されたネットワーキング・コンポーネント(例えば、ホスト・ファイアウォール)に対する限定的な制御を有する。
展開モデルは、以下の通りである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに動作される。クラウド・インフラストラクチャは、その組織または第三者によって管理されてもよく、構内または構外に存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャは、複数の組織によって共有され、共有の関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、組織または第三者によって管理されてもよく、構内または構外に存在し得る。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆または大きな業界団体に利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、一意なエンティティのままであるが、データおよびアプリケーション・ポータビリティを可能にする標準化技術または独自技術(例えば、クラウド間のロードバランシングのためのクラウド・バースティング)によって結合された、2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の構成である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、および意味相互運用性に重点を置いたサービス指向型である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
プライベート・クラウド:クラウド・インフラストラクチャは、ある組織のためだけに動作される。クラウド・インフラストラクチャは、その組織または第三者によって管理されてもよく、構内または構外に存在し得る。
コミュニティ・クラウド:クラウド・インフラストラクチャは、複数の組織によって共有され、共有の関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。クラウド・インフラストラクチャは、組織または第三者によって管理されてもよく、構内または構外に存在し得る。
パブリック・クラウド:クラウド・インフラストラクチャは、一般公衆または大きな業界団体に利用可能とされ、クラウド・サービスを販売する組織によって所有される。
ハイブリッド・クラウド:クラウド・インフラストラクチャは、一意なエンティティのままであるが、データおよびアプリケーション・ポータビリティを可能にする標準化技術または独自技術(例えば、クラウド間のロードバランシングのためのクラウド・バースティング)によって結合された、2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の構成である。
クラウド・コンピューティング環境は、無国籍性、低結合性、モジュール性、および意味相互運用性に重点を置いたサービス指向型である。クラウド・コンピューティングの中心は、相互接続されたノードのネットワークを含むインフラストラクチャである。
ここで図1を参照すると、クラウド・コンピューティング・ノードの例の概略が示されている。クラウド・コンピューティング・ノード10は、適当なクラウド・コンピューティング・ノードの単なる一例であり、本明細書に記載される発明の実施形態の使用または機能性の範囲に関するいかなる限定も示唆するように意図されない。それにかかわらず、クラウド・コンピューティング・ノード10は、上記で述べた機能性のいずれかを実装されること、または実行すること、あるいはその両方が可能である。
クラウド・コンピューティング・ノード10には、コンピュータ・システム/サーバ12が存在し、コンピュータ・システム/サーバ12は、多数の他の汎用または専用コンピューティング・システム環境または構成を用いて動作可能である。コンピュータ・システム/サーバ12を用いた使用に適当であり得る周知のコンピューティング・システム、環境、または構成、あるいはそれらの組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式またはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル家電、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、これらに限定されない。
コンピュータ・システム/サーバ12は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的文脈において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム/サーバ12は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体内に位置し得る。
図1に示されるように、クラウド・コンピューティング・ノード10内のコンピュータ・システム/サーバ12は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム/サーバ12のコンポーネントは、1つまたは複数のプロセッサまたは処理ユニット16、システム・メモリ28、およびシステム・メモリ28を含む様々なシステム・コンポーネントをプロセッサ16に連結するバス18を含み得るが、これらに限定されない。
バス18は、メモリ・バスまたはメモリ・コントローラ、周辺バス、高速グラフィック・ポート、および多様なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、複数種類のバス構造のいずれかの1つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、業界標準アーキテクチャ(ISA)・バス、マイクロ・チャネル・アーキテクチャ(MCA)・バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション(VESA)・ローカル・バス、および周辺コンポーネント相互接続(PCI)・バスを含む。
コンピュータ・システム/サーバ12は、典型的には多様なコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方を含む。
システム・メモリ28は、コンピュータ・システム可読媒体を、ランダム・アクセス・メモリ(RAM)30またはキャッシュ・メモリ32あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム/サーバ12は、他のリムーバブル/非リムーバブル、揮発性/不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単なる例として、記憶システム34は、非リムーバブル不揮発性磁気媒体(図示せず、かつ典型的には「ハード・ドライブ」と呼ばれる)からの読み出しおよび非リムーバブル不揮発性磁気媒体への書き込みのために提供され得る。図示されないが、リムーバブル不揮発性磁気ディスク(例えば、「フロッピー(R)・ディスク」)からの読み出しおよびリムーバブル不揮発性磁気ディスクへの書き込みのための磁気ディスク・ドライブ、およびCD-ROM、DVD-ROM、もしくは他の光学媒体などのリムーバブル不揮発性光ディスクからの読み出しまたはリムーバブル不揮発性光ディスクへの書き込みのための光学ディスク・ドライブが、提供されてもよい。そのような事例では、それぞれが、1つまたは複数のデータ媒体インターフェースによってバス18に接続され得る。さらに図示され、後述されるように、システム・メモリ28は、本発明の実施形態の機能を実行するように構成されるプログラム・モジュールのセット(例えば、少なくとも1つ)を有する少なくとも1つのプログラム製品を含み得る。
プログラム・モジュール42のセット(少なくとも1つ)を有するプログラム/ユーティリティ40は、限定ではなく例として、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、システム・メモリ28に記憶され得る。オペレーティング・システム、1つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組み合わせは、ネットワーキング環境の実装を含み得る。プログラム・モジュール42は、概して、本明細書に記載される発明の実施形態の機能または手法あるいはその両方を実行する。
コンピュータ・システム/サーバ12は、また、キーボード、ポインティング・デバイス、ディスプレイ24などの1つもしくは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と対話することを可能にする1つもしくは複数のデバイス、またはコンピュータ・システム/サーバ12が1つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス(例えば、ネットワーク・カード、モデムなど)、あるいはそれらの組み合わせと通信し得る。そのような通信は、入力/出力(I/O)インターフェース22を介して発生し得る。さらに、コンピュータ・システム/サーバ12は、ネットワーク・アダプタ20を介して、ローカル・エリア・ネットワーク(LAN)、汎用ワイド・エリア・ネットワーク(WAN)、または公衆ネットワーク(例えば、インターネット)、あるいはそれらの組み合わせなどの1つまたは複数のネットワークと通信し得る。図示されるように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム/サーバ12と併せて使用され得ると理解されたい。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ記憶システムなどを含むが、それらに限定されない。
本発明の文脈において、当業者が理解するように、図1に示される様々なコンポーネントは、移動する車両内に位置し得る。例えば、例示した実施形態のメカニズムに関連付けられた処理およびデータ記憶機能のいくつかは、ローカル処理コンポーネントを介してローカルに行われ得るが、同じコンポーネントが、本発明の様々な目的を達成するために、リモートに位置する分散型コンピューティング・データ処理および記憶コンポーネントにネットワークを介して接続される。重ねて、当業者によって理解されるように、本例示は、様々な発明的態様をまとめて達成する分散型コンピューティング・コンポーネントの接続ネットワーク全体であり得るもののサブセットのみを伝達するように意図される。
ここで図2を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されるように、クラウド・コンピューティング環境50は、クラウド消費者によって使用されるローカル・コンピューティング・デバイス、例えば、携帯情報端末(PDA)もしくは携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはそれらの組み合わせなどが通信し得る、1つまたは複数のクラウド・コンピューティング・ノード10を含む。ノード10は、互いに通信し得る。それらは、上述のようなプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、もしくはハイブリッド・クラウド、またはそれらの組み合わせなどの、1つまたは複数のネットワーク内で物理的または仮想的にグループ化され得る(図示せず)。これによって、クラウド・コンピューティング環境50が、インフラ、プラットフォーム、またはソフトウェア、あるいはそれらの組み合わせを、クラウド消費者がローカル・コンピューティング・デバイス上でリソースを維持する必要がないサービスとして提案することが可能となる。図2に示されるコンピューティング・デバイス54A~Nの種類は、単なる例示であるように意図され、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続あるいはその両方を経て(例えば、ウェブ・ブラウザを用いて)、任意の種類のコンピュータ化デバイスと通信し得ると理解されたい。
ここで図3を参照すると、クラウド・コンピューティング環境50(図2)によって提供される機能抽象化レイヤのセットが示されている。図3に示されるコンポーネント、レイヤ、および機能は、単なる例示であるように意図され、本発明の実施形態はそれらに限定されないと、予め理解されたい。図示されるように、以下のレイヤおよび対応する機能が提供される。
デバイス・レイヤ55は、クラウド・コンピューティング環境50において様々なタスクを実行するための電子部品、センサ、アクチュエータ、および他のオブジェクトが組み込まれた、またはスタンドアロンの電子部品、センサ、アクチュエータ、および他のオブジェクトである、あるいはその両方の、物理デバイスまたは仮想デバイスあるいはその両方を含む。デバイス・レイヤ55内の各デバイスは、ネットワーキング機能を他の機能抽象化レイヤに組み込み、それによって、デバイスから取得された情報が他の機能抽象化レイヤに提供されてもよく、または他の抽象化レイヤからの情報がデバイスに提供されてもよく、あるいはその両方であってもよい。一実施形態では、デバイス・レイヤ55を含む様々なデバイスは、モノのインターネット(IoT)とまとめて呼ばれるエンティティのネットワークを組み込み得る。そのようなエンティティのネットワークは、当業者により理解されるように、多様な目的を達成するためにデータの相互通信、収集、および配布を可能にする。
図示されるデバイス・レイヤ55は、図示されるセンサ52、アクチュエータ53、統合処理、センサ、およびネットワーク電子部品を有する「学習」サーモスタット56、カメラ57、制御可能家庭用コンセント/ソケット58、ならびに制御可能電気スイッチ59を含む。他の可能なデバイスは、様々な追加センサ・デバイス、ネットワーキング・デバイス、電子デバイス(リモート制御デバイスなど)、追加アクチュエータ・デバイス、冷蔵庫または洗濯機/乾燥機などのいわゆる「スマート」家電、および多岐にわたる他の可能な相互接続されたオブジェクトを含み得るが、それらに限定されない。
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例は、メインフレーム61、RISC(縮小命令セット・コンピュータ)アーキテクチャ・ベース・サーバ62、サーバ63、ブレード・サーバ64、記憶デバイス65、ならびにネットワークおよびネットワーキング・コンポーネント66を含む。いくつかの実施形態において、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
仮想化レイヤ70は、仮想エンティティの以下の例、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75が提供され得る、抽象化レイヤを提供する。
一例では、管理レイヤ80は、後述する機能を提供し得る。リソース・プロビジョニング供給81は、クラウド・コンピューティング環境内でタスクを実行するために利用される、コンピューティング・リソースおよび他のリソースの動的な調達を提供する。測定および価格設定82は、リソースがクラウド・コンピューティング環境内で利用されるときにコスト追跡を提供し、これらのリソースの消費に対する課金または請求を提供する。一例では、これらのリソースは、アプリケーション・ソフトウェア・ライセンスを含み得る。セキュリティは、データおよび他のリソースについての保護だけでなく、クラウド消費者およびタスクの識別情報検証を提供する。ユーザ・ポータル83は、消費者およびシステム管理者にクラウド・コンピューティング環境へのアクセスを提供する。サービス・レベル管理84は、要求されるサービス・レベルが満たされるように、クラウド・コンピューティング・リソース割り当ておよび管理を提供する。サービス水準合意(SLA)計画および遂行85は、SLAに従って将来の要件が予期されるクラウド・コンピューティング・リソースの事前配置および調達を提供する。
ワークロード・レイヤ90は、クラウド・コンピューティング環境が利用され得る機能の例を提供する。このレイヤから提供され得るワークロードおよび機能の例は、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育配信93、データ分析処理94、トランザクション処理95、ならびに本発明の例示する実施形態の文脈では、ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するための様々なワークロードおよび機能96を含む。加えて、ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するためのワークロードおよび機能96は、そのような動作をデータ分析として含み得る。ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するためのワークロードおよび機能96は、ハードウェアおよびソフトウェア60、仮想化70、管理80、ならびに本発明の例示する実施形態の様々な目的を達成するための他のワークロード90(例えば、データ分析処理94など)におけるものなどの、様々な抽象化レイヤの他の部分と併せて動作し得ることを、当業者であれば理解するであろう。
ここで図4を参照すると、例示される実施形態の様々なメカニズムによる例示的機能コンポーネント400を示すブロック図が示されている。図4は、ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するためのシステム400を示す。図示されるように、機能ブロックの多くが、図1~図3において前述されているのと同じ説明的な意味において、機能の「モジュール」または「コンポーネント」とも考えられ得る。前述したことを念頭に置いて、モジュール/コンポーネント・ブロック400は、また、本発明による知的な因果関係知識抽出のためにシステムの様々なハードウェアおよびソフトウェア・コンポーネントに組み込まれ得る。機能ブロック400の多くが、分散型コンピューティング・コンポーネントにおいて、またはユーザ・デバイス上で、あるいは他のどこかにおいて、様々なコンポーネント上でバックグラウンド・プロセスとして実行し得る。
図4に示されるように、処理ユニット420(「プロセッサ」)およびメモリ430を組み込むネットワーク・スタック共有サービス410が示されている。処理ユニット420およびメモリ430は、また、本発明の様々な態様に従って様々な計算、データ処理、および他の機能を実行するための図1の処理ユニット16(「プロセッサ」)およびメモリ28であってもよい。処理ユニット420は、メモリ430と通信状態であってもよい。ネットワーク・スタック共有サービス410は、図1のコンピュータ・システム/サーバ12によって提供され得る。
当業者が理解するように、機能ユニットは、ネットワーク・スタック共有サービス410内に、あるいは分散型コンピューティング・コンポーネント内もしくは分散型コンピューティング・コンポーネント間またはその両方のどこかに位置し得るため、ネットワーク・スタック共有サービス410内の様々な機能ユニットの描写は、例示のためのものである。
ネットワーク・スタック共有サービス410は、共有コンポーネント440、アプリケーション・バッファ・コンポーネント450、循環バッファ・コンポーネント460、ならびにキューイングおよびプーリング・コンポーネント470を含み得る。このように、ネットワーク・スタック共有サービス410は、ドライバおよびOSを完全にバイパスしてネットワーク・インターフェースのシステム・メモリへのコヒーレントなアタッチを可能にする。
一実施形態では、単なる例として、共有コンポーネント440(またはアプリケーション・バッファ・コンポーネント、循環バッファ・コンポーネント460、キューイングおよびプーリング・コンポーネント470、もしくはそれらの組み合わせと関連付けられた共有コンポーネント440、あるいはその両方)は、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有し得る。
共有コンポーネント440は、共有ライブラリによって複数のネットワーク・バッファを制御する共有ライブラリ(図5A~図5Bの共有ライブラリ504も参照)を含んでもよく、または共有ライブラリに関連付けられてもよく、あるいはその両方であってもよい。
共有コンポーネント440は、ネットワーク・インターフェースを用いて1つまたは複数のアプリケーション間で複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有してもよく、複数のネットワーク・バッファが入力/出力(I/O)制御に使用される。
アプリケーション・バッファ・コンポーネント450は、複数のネットワーク・バッファの1つまたは複数のアプリケーション仮想アドレス空間をコヒーレントにアタッチされたネットワーク・インターフェース(図5のコヒーレントにアタッチされたネットワーク・インターフェース512を参照)と安全に共有し得る。循環バッファ・コンポーネント460は、メモリ・ポインタを1つまたは複数のコヒーレントにアタッチされたデバイスと交換し得る。
キューイングおよびプーリング・コンポーネント470は、ネットワーク・バッファ送信、受信、および操作のために複数のネットワーク・バッファについてキューイングおよびプーリング動作を実行し得る。キューイングおよびプーリング・コンポーネント470は、キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから複数のネットワーク・バッファのうちの1つを移動し、割り当て、または再割り当てし得る。即ち、キューイングおよびプーリング・コンポーネント470は、ネットワーク・バッファ送信、受信、操作を提供し、異なるアプリケーション仮想アドレス空間に属するバッファをコヒーレント・ドメインのネットワーク・インターフェースと共有し得る。
共有コンポーネント440は、複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立し得る。
ここで図5A~図5Bを参照すると、図は、コヒーレントにアタッチされたインターフェースを利用するためのネットワーク・スタック・フレームワーク500および515の概略図を示す。図示されるように、機能ブロックの多くが、図1~図4において前述されているのと同じ説明的な意味において、機能の「モジュール」または「コンポーネント」とも考えられ得る。また、図1~図4の動作およびステップの1つまたは複数が、図5A~図5Bの1つまたは複数の動作またはアクションにも含まれ得る。本明細書に記載される他の実施形態において採用される類似の要素、コンポーネント、モジュール、サービス、アプリケーション、または機能、あるいはそれらの組み合わせについての説明の繰り返しは、簡潔化のために省略される。
図示されるように、ネットワーク・スタック・フレームワーク500は、1つもしくは複数のアプリケーション(例えば、App1即ち「アプリケーション502A」およびAppN即ち「アプリケーションN」)を含むか、または1つもしくは複数のアプリケーションに関連付けられるか、あるいはその両方である。また、1つまたは複数のアプリケーション502A~502Nは、共有ライブラリ504と通信状態にあり得る。ネットワーク・スタック・フレームワーク500は、例えば、ネットワーク・バッファ510A~510Cなどの1つまたは複数のネットワーク・バッファも含み得る。一態様において、ネットワーク・バッファ510A~510Cは、共有されてもよく、または「プライベート」として制限されてもよく、あるいはその両方であってもよい。例えば、ネットワーク・バッファ510Aは、共有ネットワーク・バッファであり得るが、ネットワーク・バッファ510Bおよび510Cは、プライベート・ネットワーク・バッファであり得る。ネットワーク・バッファ510A~510Cは、コヒーレントにアタッチされたネットワーク・インターフェース512と通信状態にあってもよく/関連付けられてもよい。このように、ネットワーク・バッファ510A~510Cは、アプリケーション・バッファ、循環バッファ(図6A~図6Bも参照)、ならびにキューイングおよびプーリング動作(図6A~図6Bも参照)を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイパスしながら、1つまたは複数のアプリケーション(例えば、アプリケーション502A~502N)とネットワーク・インターフェース(例えば、コヒーレントにアタッチされたネットワーク・インターフェース512)との間にコヒーレントにアタッチされ得る。
一態様では、単なる例として、ネットワーク・バッファ510A~510Cについてのアドレス空間の構成が、例えば、アプリケーション502A~502NなどのN個の例としてのアプリケーションに対して示される。共有ライブラリ504は、共有メモリにわたる共通領域(例えば、ネットワーク・バッファ510Aにおけるアプリケーションについてのアクセス共有のための「APP_SHARED」)およびプライベート領域(例えば、ネットワーク・バッファ510B~510Cにおけるアプリケーションについてのプライベート・アクセスを提供する「APP_PRIVATE」)を確立し得る。また、本明細書に記載されるように、ネットワーク・バッファ・スタックを含む様々な構成体は、また、使用されるアドレス空間を参照し、コヒーレントにアタッチされたネットワーク・インターフェース512は、例えばPCI PASID(「周辺コンポーネント・インターフェース(「PCI」)・プロセス・アドレス空間識別子(「PASID」))などの、ハードウェア・レベルのサポートを同時に活用することによって別個のアプリケーション・アドレス空間に関連付けられ得る。
一態様では、1つまたは複数のリモートの相手側との接続確立の一部として、アプリケーション(例えば、ユーザ・アプリケーションであり得るアプリケーション502A~502N)は、通信用にいくつかの関連ネットワーク・バッファを確保していてもよく、それは、プライベート領域(例えば、ネットワーク・バッファ510B~510Cにおけるアプリケーションについてのプライベート・アクセスを提供する「APP_PRIVATE」)に存在する。各アプリケーションの状況において、ネットワーク・バッファ(例えば、ネットワーク・バッファ510A~510Cのうちの1つ)は、所定の時点で以下の6つの構成体のうちの1つだけに属してもよく、それは、共有ライブラリ504によってアプリケーション毎に別々に維持され得る。また、本明細書に記載される、キューおよびプールのそれぞれが、実行用に、かつ記載されるキューおよびプールのそれぞれの様々な機能を実行するために、図6A~図6Bの循環バッファ620A~620Nを使用し得る。
第1の構成体または「第1のプール」において、「グローバル・ソフトウェア」(「s/w」)フリー・プール(例えば、デフォルト状態)は、全てのアプリケーションにわたる全ての接続についての共通プールであってもよく、全てのネットワーク・バッファが、アクションがとられるまで初期化の間ここに属する。全てのこれらのネットワーク・バッファへのポインタが、アクティブ・アプリケーション毎に分類されて、ネットワーク・バッファ510A内の「APP_SHARED」領域において共有ライブラリ504によって維持され、ネットワーク・バッファ・ポインタのみを含む。
第2の構成体または「第2のプール」において、グローバル・ハードウェア(「H/w」)フリー・プールは、積極的に、このグローバル・ハードウェア・フリー・プールにプッシュされるいくつかのフリー・ネットワーク・バッファであってもよく、フリー・ネットワーク・バッファは、グローバル・ソフトウェア(「s/w」)フリー・プールから移動され得る。各アプリケーションは、このプール(例えば、グローバル・ソフトウェア(「s/w」)・フリー・プール)にバッファを与えていてもよく、ネットワーク・バッファがデータ受信用に消費されると、グローバル・ソフトウェア(「s/w」)・フリー・プールを常に補充すべきである。グローバル・ソフトウェア(「s/w」)・フリー・プールが、所与のアプリケーションに対して空になる場合、グローバル・ソフトウェア(「s/w」)・フリー・プールは、リモート・ノードからそのアプリケーション宛のネットワーク・バッファを受け取ることを止める。このグローバル・ソフトウェア(「s/w」)・フリー・プールについてのポインタが、ネットワーク・バッファ510A内の「APP_SHARED」領域に存在し、ネットワーク・バッファ・ポインタのみを含む。
第3の構成体または「第3のプール」において、処理プールは、ローカル・プロセッサ、グラフィック処理ユニット(「GPU」)、アクセラレータなどによりアクティブに修正されているネットワーク・バッファを含んでもよく、それは、「アプリケーション・プール毎」であり、ガベージ・コレクション目的で維持されている。ネットワーク・バッファが返されない場合、ネットワーク・バッファは、所有者アプリケーションが退出すると共有ライブラリ504によってガベージ・コレクションされる。処理プールは、ネットワーク・バッファ510A内の「APP_SHARED」領域に存在してもよく、ネットワーク・バッファ・ポインタのみを含む。
第3の構成体または「第3のキュー」において、受信キューは、通信が確立したリモート・ホストから送信されたコンテンツで更新されるネットワーク・バッファを含んでもよく、そこで、1つの受信キューが、リモート接続毎にネットワーク・バッファ510A内の「APP_SHARED」領域において生成される(例えば、バッファ・ポインタのみをホストする)。受信キューは、先入れ先出し方式(「FIFO」)キューであってもよい。
第4の構成体または「第4のキュー」において、グローバル送信キューは、送信についてマークされるネットワーク・バッファを含んでもよく、グローバル送信キューは、全てのアプリケーションにわたる全ての接続間で共有され、それによって、ハードウェアが、全てのネットワーク・バッファにアクセスし、送信を実行する(例えば、グローバル送信キューがネットワーク・バッファ・ポインタのみをホストする)。グローバル送信キューは、ポインタを含むFIFOキューであり、ネットワーク・バッファ510A内の「APP_SHARED」領域にある。
第5の構成体または「第5のキュー」において、送信済みキューは、送信が完了したネットワーク・バッファを含んでもよく、このキューを介して所有者アプリケーションに返され得る。送信済みキューは、(保護されたネットワーク・バッファ空間である)ネットワーク・バッファ510A内の「APP_SHARED」領域に存在するポインタを有するFIFOキューであり得る。
追加の態様では、図5Bに示されるように、全てのキューおよびプールが例えば、ネットワーク・バッファ510A内の「APP_SHARED」領域に維持されてもよく、(ネットワーク・バッファ510B~510C内の「APP_PRIVATE」領域の)各アプリケーション・アドレス空間に存在する様々なアプリケーション・バッファ(例えば、APP1バッファおよびAPPNバッファ)を指す仮想アドレス・ポインタを含んでもよい。
アプリケーション・バッファ(例えば、APP1バッファおよびAPPNバッファ)は、1つまたは複数のアプリケーション・プログラミング・インターフェース(「API」)・コールまたはハードウェア・イベントあるいはその両方への応答として、(上述のような)様々なプールおよびキュー間で移転/移動され得る。即ち、アプリケーションは、グローバルS/wフリー・プールからそれらの処理プールへネットワーク・バッファを移動し得る。アプリケーション処理プールに属する各ネットワーク・バッファは、所有者アプリケーションによってグローバル送信キューに移動され得る。アプリケーションは、1つまたは複数のネットワーク・バッファを処理プールへ戻して移転/移動することによって、アプリケーションの送信済みキューから1つまたは複数のネットワーク・バッファを再使用し得る。送信済みキューは、アプリケーション毎に固定サイズを有してもよく、送信済みキューがアプリケーションを無視すると、送信済みキューが一杯の場合に、送信済みキューは、バッファをグローバルS/wフリー・プールに返し始め得る。受信キュー内の全てのネットワーク・バッファが、共有ライブラリ504によって読み出されると、処理プールへと除去され得る。受信キューに返される全てのネットワーク・バッファについて、共有ライブラリ504は、グローバルS/wフリー・プールからグローバルH/wフリー・プールにネットワーク・バッファを移動し、よって、ハードウェアは、リモート・ホストからデータを受信し続け得る。
追加の態様では、ネットワーク・アドレシングおよび論理接続(即ち、ローカル・ホスト上で動作するローカル・アプリケーションとリモート・ホスト上で動作するリモート・アプリケーションとの間で確立された通信)について、共有ライブラリ504(ソフトウェア・ライブラリであり得る)は、ローカルからリモートへのアプリケーションのアクティブ接続の全てを有する接続スタックを維持する。接続タプル(即ち、ローカル・ホスト上で動作するローカル・アプリケーションとリモート・ホスト上で動作するリモート・アプリケーションとの間で双方向通信を確立するために必要なルーティングおよび識別子情報全てを保持するタプル)は、固定サイズであってもよく、それらが記憶される専用スタックに対するオフセットとしても働く、一意な識別子によってアクセス可能である。各接続タプルは、1)(接続確立中に取得され、基礎ネットワーク・アーキテクチャ/技術に固有であり得る)宛先接続識別子(「ID」)およびネットワーク識別子、2)様々なキューにアクセスするためのローカル識別子、3)接続タプルがアクセス権を有する様々なキューのための認証証明書、または4)ネットワーク・バッファがアプリケーションに与えられ得るような内部ポート情報、あるいはそれらの組み合わせを特徴とし得る。
図6A~図6Bは、コンピューティング環境でネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するための循環バッファの使用の図600および615である。図示されるように、機能ブロックの多くが、図1、図5A、および図5Bにおいて前述されているのと同じ説明的な意味において、機能の「モジュール」または「コンポーネント」とも考えられ得る。また、図1、図5A、および図5Bの動作およびステップの1つまたは複数は、図6A~図6Bの1つまたは複数の動作またはアクションにも含まれ得る。本明細書に記載される他の実施形態において採用される類似の要素、コンポーネント、モジュール、サービス、アプリケーション、または機能、あるいはそれらの組み合わせについての説明の繰り返しは、簡潔化のために省略される。
図示されるように、システム・メモリに存在し得る循環バッファ620(例えば、図6Aの循環バッファ620および図6Bの循環バッファ620A~620N)が示される。一態様では、スピンロックに対してアトミックに競合するハードウェア・コンポーネントの能力を考慮すると、ハードウェア・ソフトウェア・コデザインは、循環バッファ620との循環バッファ通信のために使用され得る。
一態様では、循環バッファ620は、プロセッサの振る舞い(例えば、CPUがどのように競合するか)と同様の動作に類似し得る/反映し得るが、全てのハードウェア・スレッドが、ネットワーク・インターフェース(例えば、ネットワーク・インターフェース・ハードウェア630)によって実装されてもよく、ネットワーク・インターフェース(例えば、ネットワーク・インターフェース・ハードウェア630)の方に/から、システム・メモリからのデータを「プッシュ/プル」することを必要とし得る。CPUスレッドは、また、アプリケーションへの配信に必要であってもよく、ライブラリ610によって大量に発生する。例えば、特定のアトミック・コマンド(例えば、レジスタ内のビットをアトミックにアサートおよびデアサートし得る、特定のプロセッサ・アーキテクチャのアトミック組み込みコマンド)が、循環バッファ620への共有アクセスを実装するために用いられ得る。各循環バッファ・インスタンスは、循環バッファのどのフィールドが有効エントリを有するかを表す単一レジスタを特徴とする。より具体的には、各ビット位置は、ビット位置の値が論理値に等しい場合、対応する特定の循環バッファ・エントリが有効データを有し、ビット位置の値がゼロに等しい場合、それがデータを含まないことを表す。どのエントリが循環バッファ620において有効であるかを示す前述のレジスタに対してアトミック動作を利用すると、コヒーレントにアタッチされたネットワーク・インターフェースは、(ソフトウェア・ライブラリが動作する)対応するCPUとバッファを安全に共有し、データを交換し得る。
図6Bにより明確に示されるように、循環バッファ620A~620Nは、共有ライブラリ610(例えば、ソフトウェア・ライブラリまたは「ソフトウェア側」)とネットワーク・インターフェース・ハードウェア630(例えば、ハードウェア・バッファ、ネットワーク・バッファ、ネットワーク・バッファ・ディスパッチャ、または「ハードウェア側」)との間のエンドツーエンド接続を示す。循環バッファ620A~620Nは、単一方向のハードウェア・ソフトウェア共有循環バッファ(例えば、ソフトウェア・ライブラリ610およびネットワーク・インターフェース・ハードウェア630が循環バッファを共有する)であってもよく、対話のために使用(例えば、ポインタ交換に使用)されてもよい。
循環バッファ620A~620Nは、単一方向であってもよく、異なるインスタンスが、例えば、グローバル・ソフトウェア(「s/w」)・フリー・プール602A、グローバル・ハードウェア(「H/w」)・フリー・プール602B、処理プール(即ち、ローカル・ホスト上で動作するアプリケーション・コードによって現在操作されているバッファのプール)、受信キュー608A~608B(例えば、接続毎の受信キュー)、グローバル送信キュー(即ち、コヒーレントにアタッチされたネットワーク・インターフェースによって送信される必要があるがまだ送信されていない全てのバッファを含む、ホスト上の全てのアプリケーション間で共有される、単一のホスト全体のキュー)604Aおよび604B、またはグローバル送信済みキュー606A~606B(即ち、接続毎の1つの送信済みキューが、コヒーレントにアタッチされたネットワーク・インターフェースによってリモート・ホストに送信されているバッファを含み、したがって、アプリケーションがそれらを再使用し得る)、あるいはそれらの組み合わせなどの、異なるプール/キュー・タイプに使用される必要がある。
一態様において、ソフトウェア側では、ディスパッチャ・スレッド640が使用されてもよく、ハードウェア側では、優先/アービタ・ディスパッチ640(例えば、ハードウェア・バッファ・ディスパッチャ)が、ネットワーク・インターフェースの方へ/からシステム・メモリ間のデータをプッシュまたはプルあるいはその両方を行うために、循環バッファ620A~620Nによって使用され得る。このように、循環バッファ620A~620Nのそれぞれが、ソフトウェア機能およびハードウェア機能の両方のために使用され得る。
したがって、単なる例として、循環バッファ620A~620Nのそれぞれが、ハードウェア側(例えば、ネットワーク・インターフェース・ハードウェア630)からスピンロックのためにプルしてもよく、ハードウェア・スレッドが、データを取得するためにソフトウェア・スレッドからそれ自体を相互に排除してもよい。
一態様において、循環バッファ620A~620Nは、即時伝送のためだけに使用されてもよく、したがって、ソフトウェア(例えばアプリケーション)およびハードウェア(ネットワーク/メモリ)側の両方が、非同期動作をサポートするために先入れ先出し「FIFO」動作を有し得る。したがって、循環バッファ620A~620Nは、アドレス空間へのポインタを取り出し、様々なキューおよびプールを使用してアプリケーションおよびネットワーク内からネットワーク・バッファを除去、移動、または移転し得、あるいはそれらの組み合わせを行い得る。
動作中、例として、各アプリケーションは状態を有し、状態は、ネットワーク・バッファがキューおよびプール内のどこにあるか(例えば、グローバル・ソフトウェア(「s/w」)・フリー・プール602A、グローバル・ハードウェア(「H/w」)・フリー・プール602B、処理プール(これらは任意の他のプールに属しない、したがってアプリケーションによって操作されているバッファに対するそれらの参照としての仮想プールである)、受信キュー608A~608B、グローバル送信キュー604Aおよび604B、またはグローバル送信済みキュー606A~606B、あるいはそれらの組み合わせ)を示すキューおよびプールの状態であってもよい。ディスパッチャ・スレッド640を用いて、キューおよびプールの各状態は、ソフトウェア側(S/W)からハードウェア側(H/W)にポインタを交換することのみによって反映される。キューおよびプールの状態を反映することによって、任意の変化および任意の更新に気付くことが可能となる。ハードウェア側は、ここで、ソフトウェア・ライブラリ610と同一のビューを有し、ハードウェアにオフロードされ得るアクションを実行する。このようにして、ソフトウェア側(S/W)からハードウェア側(H/W)の両方が、ソフトウェア側からハードウェア側へポインタを交換すること、ならびにキューおよびプールへのポインタを使用することによって、ネットワーク・バッファのどれが送出され、移転/受信され、または空いているか、あるいはそれらの組み合わせであり得るかを理解する。したがって、例えば、ハードウェアは、決定を実行し、動作を実行し、アプリケーションから日付を取り出し、トランスパリティ(transparity)で結果をアプリケーションにプッシュして戻し得る。
図7は、コンピューティング環境でネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するための例示的なエンドツーエンド・ドライバレス接続システム700を示すブロック図である。図示されるように、機能ブロックの多くが、図1、図6A、および図6Bにおいて前述されているのと同じ説明的な意味において、機能の「モジュール」または「コンポーネント」とも考えられ得る。また、図1、図6A、および図6Bの動作およびステップの1つまたは複数は、図7の1つまたは複数の動作またはアクションにも含まれ得る。本明細書に記載される他の実施形態において採用される類似の要素、コンポーネント、モジュール、サービス、アプリケーション、または機能、あるいはそれらの組み合わせについての説明の繰り返しは、簡潔化のために省略される。
図示されるように、ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するためのシステム700は、1つまたは複数のシステム・インターコネクト710Aおよび710Bを含み得る。システム・インターコネクト710A(コヒーレンス・ドメイン1を有する)および710B(コヒーレンス・ドメイン2を有する)は、1つまたは複数のアプリケーション・バッファ710Cをネットワーク・バッファ・ハードウェア710Aおよび710B(例えば、ハードウェア側)に接続し、それは、ネットワーク・スイッチング・レイヤ712にも接続されるネットワーク・インターフェース・ハードウェア730を介して可能にされ得る。また、ローカル・インターフェース712は、また、各ネットワーク・バッファ・ハードウェア710Aおよび710Bをネットワーク・スイッチング・レイヤ712(例えば、ローカル・ネットワーク・インターフェース)に接続するために使用され得る。要するに、ネットワーク・インターフェース・ハードウェア730は、アプリケーション702A~702N(例えば、App1、...、AppN、およびソフトウェア側)、ライブラリ704、ならびにバッファ710が、ネットワーク・インターフェース・ハードウェア730を介してエンドツーエンドで直接接続されることを可能にする。したがって、システム700は、ドライバおよびOSを完全にバイパスしてシステム・インターコネクト710A~710Bを介したネットワーク・インターフェース・ハードウェア730のコヒーレント・アタッチメントを可能にする。アプリケーション・バッファは、オペレーティング・システムからのいかなる干渉もなくネットワーク・インターフェース・ハードウェア出力バッファに直接コピーされる。
図8は、例示される実施形態の様々な態様が実装され得る、コンピューティング環境でネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用するための例示的方法800を示すフローチャート図である。機能800は、マシン上の命令として実行される方法として実装されてもよく、その場合に、命令は、少なくとも1つのコンピュータ可読記憶媒体または1つの非一過性機械可読記憶媒体上に含まれる。機能800は、ブロック802において開始し得る。
ブロック804において、1つまたは複数のネットワーク・バッファは、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされる。ブロック806において、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされたネットワーク・バッファは、ネットワーク通信のためにアプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら共有され得る。機能800は、ブロック808において終了し得る。
一態様では、図8の少なくとも1つのブロックと併せて、またはその一部として、あるいはその両方で、方法800の動作が、以下のそれぞれの1つまたは複数を含み得る。方法800の動作は、共有ライブラリによって複数のネットワーク・バッファを制御し得る。
方法800の動作は、ネットワーク・インターフェースを用いて1つまたは複数のアプリケーション間で複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有し得る。複数のネットワーク・バッファは、入力/出力(I/O)制御に使用され得る。循環バッファは、メモリ・ポインタをコヒーレントにアタッチされたデバイスと交換し得る。
方法800の動作は、ネットワーク・バッファ送信、受信、および操作のために複数のネットワーク・バッファについてキューイングおよびプーリング動作を実行し得る。方法800の動作は、キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから複数のネットワーク・バッファのうちの1つを移動し、割り当て、または再割り当てし得る。方法800の動作は、複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立し得る。
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶し得る有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令をその上に記録させる溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を通って送信される電気信号などの、一過性信号それ自体であると解釈されるべきではない。
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを通してユーザのコンピュータに接続されてもよく、または、接続は、(例えば、インターネット・サービス・プロバイダを用いてインターネットを通して)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
本発明の態様は、発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書に記載される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実装する手段を生成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブル・データ処理装置のプロセッサに提供されてもよい。命令がその中に記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実装する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、また、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方式で機能するように指示し得る、コンピュータ可読記憶媒体に記憶されてもよい。
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実装するように、コンピュータ可読プログラム命令は、また、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させてコンピュータ実装プロセスを生み出すために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされてもよい。
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実装のアーキテクチャ、機能性、および動作を例示している。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実装するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替実装において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される2つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実現され得ることにも留意されたい。
Claims (20)
- プロセッサによって、コンピューティング環境において拡張ネットワーク・スタック・フレームワークを利用する方法であって、
アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有することを含む、方法。 - 共有ライブラリによって前記複数のネットワーク・バッファを制御することをさらに含む、請求項1に記載の方法。
- 前記ネットワーク・インターフェースを用いて前記1つまたは複数のアプリケーション間で前記複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有することをさらに含み、前記複数のネットワーク・バッファが入力/出力(I/O)制御に使用される、請求項1に記載の方法。
- 前記循環バッファを用いてメモリ・ポインタをコヒーレントにアタッチされたデバイスと交換することをさらに含む、請求項1に記載の方法。
- ネットワーク・バッファ送信、受信、および操作のために前記複数のネットワーク・バッファについて前記キューイングおよびプーリング動作を実行することをさらに含む、請求項1に記載の方法。
- 前記キューイングおよびプーリング動作が、1つまたは複数のキューおよび1つまたは複数のプールから前記複数のネットワーク・バッファのうちの1つを移動すること、割り当てること、または再割り当てすることをさらに含む、請求項1に記載の方法。
- 前記複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立することをさらに含む、請求項1に記載の方法。
- 拡張ネットワーク・スタック・フレームワークを利用するシステムであって、
実行時に前記システムに、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有させる実行可能命令を有する1つまたは複数のコンピュータを備える、システム。 - 前記実行可能命令が、実行時に前記システムに、共有ライブラリによって前記複数のネットワーク・バッファを制御させる、請求項8に記載のシステム。
- 前記実行可能命令が、実行時に前記システムに、前記ネットワーク・インターフェースを用いて前記1つまたは複数のアプリケーション間で前記複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有させ、前記複数のネットワーク・バッファが、入力/出力(I/O)制御に使用される、請求項8に記載のシステム。
- 前記実行可能命令が、実行時に前記システムに、前記循環バッファを用いてメモリ・ポインタをコヒーレントにアタッチされたデバイスと交換させる、請求項8に記載のシステム。
- 前記実行可能命令が、実行時に前記システムに、ネットワーク・バッファ送信、受信、および操作のために前記複数のネットワーク・バッファについて前記キューイングおよびプーリング動作を実行させる、請求項8に記載のシステム。
- 前記実行可能命令が、実行時に前記システムに、前記キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから前記複数のネットワーク・バッファのうちの1つを移動させ、割り当てさせ、または再割り当てさせる、請求項8に記載のシステム。
- 前記実行可能命令が、実行時に前記システムに、前記複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立させる、請求項8に記載のシステム。
- プロセッサによって拡張ネットワーク・スタック・フレームワークを利用するためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品が、コンピュータ可読プログラム・コード部が記憶された非一過性コンピュータ可読記憶媒体を含み、前記コンピュータ可読プログラム・コード部が、アプリケーション・バッファ、循環バッファ、ならびにキューイングおよびプーリング動作を用いて1つまたは複数のドライバおよびオペレーティング・システムをバイバスしながら、1つまたは複数のアプリケーションとネットワーク・インターフェースとの間にコヒーレントにアタッチされた複数のネットワーク・バッファを共有する、実行可能部を含む、コンピュータ・プログラム製品。
- 共有ライブラリによって前記複数のネットワーク・バッファを制御する実行可能部をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
- 前記ネットワーク・インターフェースを用いて前記1つまたは複数のアプリケーション間で前記複数のネットワーク・バッファの1つまたは複数のアドレス空間を共有する実行可能部をさらに含み、前記複数のネットワーク・バッファが入力/出力(I/O)制御に使用される、請求項15に記載のコンピュータ・プログラム製品。
- 前記循環バッファを用いてメモリ・ポインタをコヒーレントにアタッチされたデバイスと交換し、
ネットワーク・バッファ送信、受信、および操作のために前記複数のネットワーク・バッファについて前記キューイングおよびプーリング動作を実行する、
実行可能部をさらに含む、請求項15に記載のコンピュータ・プログラム製品。 - 前記キューイングおよびプーリング動作を実行するために1つまたは複数のキューおよび1つまたは複数のプールから前記複数のネットワーク・バッファのうちの1つを移動し、割り当て、または再割り当てする実行可能部をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
- 前記複数のネットワーク・バッファを用いて共有メモリ領域およびプライベート・メモリ領域を確立する実行可能部をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/929,518 US11863469B2 (en) | 2020-05-06 | 2020-05-06 | Utilizing coherently attached interfaces in a network stack framework |
US15/929,518 | 2020-05-06 | ||
PCT/IB2021/053622 WO2021224739A1 (en) | 2020-05-06 | 2021-04-30 | Utilizing coherently attached interfaces in a network stack framework |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023524665A true JP2023524665A (ja) | 2023-06-13 |
Family
ID=78413384
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022565532A Pending JP2023524665A (ja) | 2020-05-06 | 2021-04-30 | ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用すること |
Country Status (10)
Country | Link |
---|---|
US (1) | US11863469B2 (ja) |
JP (1) | JP2023524665A (ja) |
KR (1) | KR20220158804A (ja) |
CN (1) | CN115485671A (ja) |
AU (1) | AU2021269201B2 (ja) |
CA (1) | CA3173088A1 (ja) |
DE (1) | DE112021001408T5 (ja) |
GB (1) | GB2610750A (ja) |
IL (1) | IL296397A (ja) |
WO (1) | WO2021224739A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11863469B2 (en) | 2020-05-06 | 2024-01-02 | International Business Machines Corporation | Utilizing coherently attached interfaces in a network stack framework |
US11595472B2 (en) | 2021-01-19 | 2023-02-28 | Mellanox Technologies, Ltd. | Controlling packet delivery based on application level information |
US11740900B2 (en) * | 2021-06-22 | 2023-08-29 | Marvell Asia Pte Ltd | Associatively indexed circular buffer |
US11792139B2 (en) | 2022-01-24 | 2023-10-17 | Mellanox Technologies, Ltd. | Efficient packet reordering using hints |
CN116455849B (zh) * | 2023-06-15 | 2023-08-11 | 中国人民解放军国防科技大学 | 一种面向众核处理器的并发通信方法、装置、设备和介质 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7668841B2 (en) * | 2003-03-10 | 2010-02-23 | Brocade Communication Systems, Inc. | Virtual write buffers for accelerated memory and storage access |
US7555597B2 (en) * | 2006-09-08 | 2009-06-30 | Intel Corporation | Direct cache access in multiple core processors |
US8909872B1 (en) | 2006-10-31 | 2014-12-09 | Hewlett-Packard Development Company, L. P. | Computer system with coherent interconnection |
US7987469B2 (en) * | 2006-12-14 | 2011-07-26 | Intel Corporation | RDMA (remote direct memory access) data transfer in a virtual environment |
US20090089475A1 (en) | 2007-09-28 | 2009-04-02 | Nagabhushan Chitlur | Low latency interface between device driver and network interface card |
KR101466573B1 (ko) | 2008-01-22 | 2014-12-10 | 삼성전자주식회사 | 통신 단말 장치 및 통신 단말 장치에 탑재된 복수개의네트워크 인터페이스를 이용하여 통신을 수행하는 방법 |
CN102006241B (zh) | 2010-12-17 | 2013-11-27 | 曙光信息产业股份有限公司 | 一种多个应用共享一个缓冲区的报文接收方法 |
US9143467B2 (en) | 2011-10-25 | 2015-09-22 | Mellanox Technologies Ltd. | Network interface controller with circular receive buffer |
US20140036680A1 (en) * | 2012-07-31 | 2014-02-06 | Futurewei Technologies, Inc. | Method to Allocate Packet Buffers in a Packet Transferring System |
JP6276273B2 (ja) * | 2012-09-07 | 2018-02-07 | オラクル・インターナショナル・コーポレイション | 分散型データグリッドクラスタにおけるメッセージ前処理をサポートするシステムおよび方法 |
US9256537B2 (en) | 2013-02-14 | 2016-02-09 | International Business Machines Corporation | Coherent attached processor proxy supporting coherence state update in presence of dispatched master |
US9311230B2 (en) * | 2013-04-23 | 2016-04-12 | Globalfoundries Inc. | Local direct storage class memory access |
US9773292B2 (en) * | 2014-06-26 | 2017-09-26 | Intel Corporation | Graphics workload submissions by unprivileged applications |
US9607120B2 (en) | 2014-12-30 | 2017-03-28 | International Business Machines Corporation | Implementing system irritator accelerator FPGA unit (AFU) residing behind a coherent attached processors interface (CAPI) unit |
US10397140B2 (en) | 2015-04-23 | 2019-08-27 | Hewlett-Packard Development Company, L.P. | Multi-processor computing systems |
US20170139849A1 (en) | 2015-11-17 | 2017-05-18 | HGST Netherlands B.V. | Driverless storage device using serially-attached non-volatile memory |
TWI604308B (zh) | 2015-11-18 | 2017-11-01 | 慧榮科技股份有限公司 | 資料儲存裝置及其資料維護方法 |
GB2544515B (en) | 2015-11-19 | 2020-02-12 | Canon Kk | System for receiving or transmitting data with a fast-path protocol processing architecture |
US10375168B2 (en) * | 2016-05-31 | 2019-08-06 | Veritas Technologies Llc | Throughput in openfabrics environments |
WO2017209876A1 (en) | 2016-05-31 | 2017-12-07 | Brocade Communications Systems, Inc. | Buffer manager |
US20180122037A1 (en) | 2016-10-31 | 2018-05-03 | Intel Corporation | Offloading fused kernel execution to a graphics processor |
US10310811B2 (en) | 2017-03-31 | 2019-06-04 | Hewlett Packard Enterprise Development Lp | Transitioning a buffer to be accessed exclusively by a driver layer for writing immediate data stream |
US10338847B1 (en) | 2017-08-28 | 2019-07-02 | Amazon Technologies, Inc. | Coherent buffer mapping for virtualized graphics processing |
US11443072B2 (en) | 2018-06-29 | 2022-09-13 | Microsoft Technology Licensing, Llc | Peripheral device with resource isolation |
US11347643B2 (en) | 2018-06-29 | 2022-05-31 | Intel Corporation | Control logic and methods to map host-managed device memory to a system address space |
CN109558226B (zh) | 2018-11-05 | 2021-03-30 | 上海无线通信研究中心 | 一种基于核间中断的dsp多核并行计算调度方法 |
US11210216B2 (en) | 2019-06-25 | 2021-12-28 | Intel Corporation | Techniques to facilitate a hardware based table lookup |
CN115269717B (zh) | 2019-08-22 | 2023-06-02 | 华为技术有限公司 | 存储设备、分布式存储系统以及数据处理方法 |
US11030129B2 (en) * | 2019-09-19 | 2021-06-08 | Samsung Electronics Co., Ltd. | Systems and methods for message tunneling |
US11863469B2 (en) | 2020-05-06 | 2024-01-02 | International Business Machines Corporation | Utilizing coherently attached interfaces in a network stack framework |
-
2020
- 2020-05-06 US US15/929,518 patent/US11863469B2/en active Active
-
2021
- 2021-04-30 DE DE112021001408.0T patent/DE112021001408T5/de active Pending
- 2021-04-30 WO PCT/IB2021/053622 patent/WO2021224739A1/en active Application Filing
- 2021-04-30 CA CA3173088A patent/CA3173088A1/en active Pending
- 2021-04-30 AU AU2021269201A patent/AU2021269201B2/en active Active
- 2021-04-30 CN CN202180032670.XA patent/CN115485671A/zh active Pending
- 2021-04-30 GB GB2218232.3A patent/GB2610750A/en active Pending
- 2021-04-30 JP JP2022565532A patent/JP2023524665A/ja active Pending
- 2021-04-30 KR KR1020227037307A patent/KR20220158804A/ko active Search and Examination
- 2021-04-30 IL IL296397A patent/IL296397A/en unknown
Also Published As
Publication number | Publication date |
---|---|
US11863469B2 (en) | 2024-01-02 |
AU2021269201A1 (en) | 2022-11-10 |
IL296397A (en) | 2022-11-01 |
KR20220158804A (ko) | 2022-12-01 |
CN115485671A (zh) | 2022-12-16 |
WO2021224739A1 (en) | 2021-11-11 |
GB2610750A (en) | 2023-03-15 |
CA3173088A1 (en) | 2021-11-11 |
AU2021269201B2 (en) | 2024-01-11 |
DE112021001408T5 (de) | 2023-03-09 |
US20210352023A1 (en) | 2021-11-11 |
GB202218232D0 (en) | 2023-01-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3754498B1 (en) | Architecture for offload of linked work assignments | |
JP2023524665A (ja) | ネットワーク・スタック・フレームワークにおいてコヒーレントにアタッチされたインターフェースを利用すること | |
CN107690622B (zh) | 实现硬件加速处理的方法、设备和系统 | |
CN113287286B (zh) | 通过rdma进行分布式存储节点中的输入/输出处理 | |
KR102220528B1 (ko) | 데이터 액세스 장치 및 그것의 동작 방법 | |
US9575657B2 (en) | Dataset replica migration | |
US11048447B2 (en) | Providing direct data access between accelerators and storage in a computing environment, wherein the direct data access is independent of host CPU and the host CPU transfers object map identifying object of the data | |
US20140244941A1 (en) | Affinity group access to global data | |
JP2020537227A (ja) | アプリケーションによって制御された早期書込み確認応答をサポートするメモリ・アクセス・ブローカ・システム | |
JP2020532803A (ja) | 同期入出を介して生成されたキャッシュ・ヒットに応答してメタデータ・トラックの非同期更新をする方法、システム、コンピュータ・プログラムおよび記憶制御装置 | |
US11144230B2 (en) | Data copy amount reduction in data replication | |
US11347512B1 (en) | Substitution through protocol to protocol translation | |
US10108349B2 (en) | Method and system that increase storage-stack throughput | |
US20240069795A1 (en) | Access request reordering across a multiple-channel interface for memory-based communication queues | |
US11481255B2 (en) | Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator | |
US10936219B2 (en) | Controller-based inter-device notational data movement system | |
US9176910B2 (en) | Sending a next request to a resource before a completion interrupt for a previous request | |
US9251100B2 (en) | Bitmap locking using a nodal lock | |
US11966338B2 (en) | Prefetching management in database system based on number of pages being prefetched | |
US11281612B2 (en) | Switch-based inter-device notational data movement system | |
US11520713B2 (en) | Distributed bus arbiter for one-cycle channel selection using inter-channel ordering constraints in a disaggregated memory system | |
US20240069805A1 (en) | Access request reordering for memory-based communication queues | |
JP2023536973A (ja) | ダイレクト・メモリ・アクセス(dma)マッピングされたページを移行する際の遅延の最小化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230925 |