IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧 ▶ ザ ボード オブ トラスティーズ オブ ザ ユニバーシティー オブ イリノイの特許一覧

特許7539202コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス
<>
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図1
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図2
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図3
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図4
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図5A
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図5B
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図5C
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図6
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図7A
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図7B
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図7C
  • 特許-コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-15
(45)【発行日】2024-08-23
(54)【発明の名称】コンピューティング環境におけるアクセラレータとストレージとの間のダイレクト・データ・アクセス
(51)【国際特許分類】
   G06F 12/0862 20160101AFI20240816BHJP
   G06F 9/455 20180101ALI20240816BHJP
   G06F 13/16 20060101ALI20240816BHJP
   G06F 12/0806 20160101ALI20240816BHJP
   G06F 13/28 20060101ALI20240816BHJP
【FI】
G06F12/0862 100
G06F9/455 150
G06F13/16 520B
G06F12/0806 100
G06F13/28 310A
【請求項の数】 21
(21)【出願番号】P 2022522731
(86)(22)【出願日】2020-10-13
(65)【公表番号】
(43)【公表日】2022-12-15
(86)【国際出願番号】 IB2020059590
(87)【国際公開番号】W WO2021074779
(87)【国際公開日】2021-04-22
【審査請求日】2023-03-24
(31)【優先権主張番号】16/656,295
(32)【優先日】2019-10-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(73)【特許権者】
【識別番号】507084187
【氏名又は名称】ザ ボード オブ トラスティーズ オブ ザ ユニバーシティー オブ イリノイ
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】クレシ、ザイド
(72)【発明者】
【氏名】チャン、イーシン
(72)【発明者】
【氏名】ウー、ウェン-メイ
(72)【発明者】
【氏名】シィォン、ジンジュン
【審査官】松平 英
(56)【参考文献】
【文献】国際公開第2017/187582(WO,A1)
【文献】特表2015-524979(JP,A)
【文献】特開2012-181860(JP,A)
【文献】米国特許出願公開第2017/0285968(US,A1)
【文献】特開2019-175445(JP,A)
【文献】特表2020-501249(JP,A)
【文献】特開2016-170696(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
9/455-9/54
12/00-12/128
13/00-13/42
(57)【特許請求の範囲】
【請求項1】
プロセッサによりコンピューティング環境内の不揮発性ストレージへのダイレクト・アクセスを提供するための方法であって、
オブジェクトのデータの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること
を含み、
前記ホストCPUは、前記不揮発性ストレージから前記1つ又はそれ以上のアクセラレータにオブジェクト・マップの転送を開始し、
前記オブジェクト・マップは、前記不揮発性ストレージ上の前記オブジェクトを識別する、
方法。
【請求項2】
さらに、前記1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内に1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”キュー及びレジスタをマッピングすること
を含む、請求項1に記載の方法。
【請求項3】
さらに、前記データにおける局在性を使用するため、前記1つ又はそれ以上のアクセラレータのメモリ内で前記1つ又はそれ以上のアクセラレータにより管理されるページ・キャッシュを使用すること
を含む、請求項1に記載の方法。
【請求項4】
さらに、前記データにおける局在性を使用するため、前記1つ又はそれ以上のアクセラレータのメモリ内で前記1つ又はそれ以上のアクセラレータにより管理される分散ページ・キャッシュを使用すること
を含む、請求項1に記載の方法。
【請求項5】
さらに、
前記不揮発性ストレージから1つ又はそれ以上のページをページ・キャッシュにコピーすること及びページ・マッピング・テーブルをアップデートすること、又は、
前記不揮発性ストレージから前記1つ又はそれ以上のアクセラレータへと前記データをコピーする際に、前記ホストCPUを前記制御パス又は前記データ・パスから除外すること
を含む、請求項1に記載の方法。
【請求項6】
さらに、前記APIを使用して前記データをプリフェッチすること及び計算及び前記データの移動がオーバーラップするように計算サイクルを節約すること
を含む、請求項1に記載の方法。
【請求項7】
さらに、
前記1つ又はそれ以上のアクセラレータにより開始された前記読み出し操作又は前記書き込み操作について1つ又はそれ以上のAPIを受領した際に、ページキャッシュ・ミスの発生を判断すること、
1つ又はそれ以上のページを、1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”データ・バッファからページ・キャッシュへとコピーすること、及び
ページ・マッピング・テーブルをアップデートすること
を含む、請求項1に記載の方法。
【請求項8】
プロセッサによりコンピューティング環境内の不揮発性ストレージへのダイレクト・アクセスを提供するための方法であって、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内に1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”キュー及びレジスタをマッピングすること
を含む、方法。
【請求項9】
プロセッサによりコンピューティング環境内の不揮発性ストレージへのダイレクト・アクセスを提供するための方法であって、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記APIを使用して前記データをプリフェッチすること及び計算及び前記データの移動がオーバーラップするように計算サイクルを節約すること
を含む、方法。
【請求項10】
プロセッサによりコンピューティング環境内の不揮発性ストレージへのダイレクト・アクセスを提供するための方法であって、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記1つ又はそれ以上のアクセラレータにより開始された前記読み出し操作又は前記書き込み操作について1つ又はそれ以上のAPIを受領した際に、ページキャッシュ・ミスの発生を判断すること、
1つ又はそれ以上のページを、1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”データ・バッファからページ・キャッシュへとコピーすること、及び
ページ・マッピング・テーブルをアップデートすること
を含む、方法。
【請求項11】
不揮発性ストレージへのダイレクト・アクセスを提供するためのシステムであって、
実行可能な命令を有する1つ又はそれ以上のコンピュータであって、前記システムにより実行された場合に、システムをして、
オブジェクトのデータの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること
を実行させ
前記ホストCPUは、前記不揮発性ストレージから前記1つ又はそれ以上のアクセラレータにオブジェクト・マップの転送を開始し、
前記オブジェクト・マップは、前記不揮発性ストレージ上の前記オブジェクトを識別する、
コンピュータ・システム。
【請求項12】
前記実行可能な命令は、前記1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内の1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”キュー及びレジスタをマップする
請求項11に記載のシステム。
【請求項13】
前記実行可能な命令は、前記データにおける局在性を使用するため、前記1つ又はそれ以上のアクセラレータのメモリ内で前記1つ又はそれ以上のアクセラレータにより管理されるページ・キャッシュを使用する
請求項11に記載のシステム。
【請求項14】
前記実行可能な命令は、前記データにおける局在性を使用するため、前記1つ又はそれ以上のアクセラレータのメモリ内で前記1つ又はそれ以上のアクセラレータにより管理される分散ページ・キャッシュを使用する
請求項11に記載のシステム。
【請求項15】
前記実行可能な命令は、
前記不揮発性ストレージから1つ又はそれ以上のページをページ・キャッシュにコピーすること及びページ・マッピング・テーブルをアップデートすること、又は、
前記不揮発性ストレージから前記1つ又はそれ以上のアクセラレータへと前記データをコピーする際に、前記ホストCPUを前記制御パス又は前記データ・パスから除外すること
を含む、請求項11に記載のシステム。
【請求項16】
前記実行可能な命令は、前記APIを使用して前記データをプリフェッチすること及び計算及び前記データの移動がオーバーラップするように計算サイクルを節約すること
を含む、請求項11に記載のシステム。
【請求項17】
前記実行可能な命令は、
前記1つ又はそれ以上のアクセラレータにより開始された前記読み出し操作又は前記書き込み操作について1つ又はそれ以上のAPIを受領した際に、ページキャッシュ・ミスの発生を判断すること、
1つ又はそれ以上のページを、1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”データ・バッファからページ・キャッシュへとコピーすること、及び
ページ・マッピング・テーブルをアップデートすること
を含む、請求項11に記載のシステム。
【請求項18】
不揮発性ストレージへのダイレクト・アクセスを提供するためのシステムであって、
実行可能な命令を有する1つ又はそれ以上のコンピュータであって、前記システムにより実行された場合に、システムをして、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内の1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”キュー及びレジスタをマップすること
を実行させる、
コンピュータ・システム。
【請求項19】
不揮発性ストレージへのダイレクト・アクセスを提供するためのシステムであって、
実行可能な命令を有する1つ又はそれ以上のコンピュータであって、前記システムにより実行された場合に、システムをして、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記APIを使用して前記データをプリフェッチすること及び計算及び前記データの移動がオーバーラップするように計算サイクルを節約すること
を実行させる、
コンピュータ・システム。
【請求項20】
不揮発性ストレージへのダイレクト・アクセスを提供するためのシステムであって、
実行可能な命令を有する1つ又はそれ以上のコンピュータであって、前記システムにより実行された場合に、システムをして、
データの読み出し操作及び書き込み操作を実行するために、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース“API”を介して、制御パス又はデータ・パス上のホスト中央プロセッシング・ユニット“CPU”とは独立して、前記不揮発性ストレージへのダイレクト・アクセスを提供すること、
前記1つ又はそれ以上のアクセラレータにより開始された前記読み出し操作又は前記書き込み操作について1つ又はそれ以上のAPIを受領した際に、ページキャッシュ・ミスの発生を判断すること、
1つ又はそれ以上のページを、1つ又はそれ以上の不揮発性メモリ・エキスプレス“NVMe”データ・バッファからページ・キャッシュへとコピーすること、及び
ページ・マッピング・テーブルをアップデートすること
を実行させる、
コンピュータ・システム。
【請求項21】
請求項1~10の何れか1項に記載の方法をコンピュータが実行するためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概ねコンピューティング・システムに関し、より詳細には、コンピューティング環境内で、アクセラレータと、不揮発性メモリ及びストレージとの間のダイレクト・アクセスを提供することに関する。
【背景技術】
【0002】
大規模コンピューティングの一般的なタイプは、クラウド・コンピューティングであり、そこでは、リソースは、コンピュータ・ネットワークといった通信システムを介して相互作用、又はアクセス、又はそれら両方がなされる。リソースは、コンピューティング・デバイス、ストレージ・デバイス、アプリケーション、又はサーバといった1つ又はそれ以上のコンピューティング・デバイス上で動作する他のコンピュータに関連するデバイス、又はサービス、又はこれらの組み合わせの、ソフトウェアが提供するシミュレーション、又はエミュレーションとすることができる。例えば、複数のサーバは、情報を通信し、又は共有し、又はそれらの両方を行い、プロセッシング能力の量、ストレージ空間、又は要求されたタスクを達成するために必要な他のコンピューティング・リソース、又はそれらの組み合わせに応じて、サーバを横断して拡張し、又は収縮し、又はそれらの両方を行うことができる。用語“クラウド”は、コンピューティング・デバイス、コンピュータ・ネットワーク、又はアレンジメントと言ったものにおいて相互作用する他のコンピュータに関連するデバイス、又はそれらの組み合わせにおける相互接続性のダイアグラムの雲形の外観を暗に言う。
【発明の概要】
【0003】
コンピューティング環境内における不揮発性メモリへのダイレクト・アクセスを提供するための種々の側面が提供される。1つの側面においては、コンピューティング環境内において、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・メモリ・アクセスを提供する方法が提供される。アプリケーション・プログラミング・インタフェース“(API)”を介して、制御パス又はデータ・パス上でホスト・制御プロセッシング・ユニット(“CPU”)とは独立して不揮発性ストレージにダイレクト・アクセスする、1つ又はそれ以上のアクセラレータ(例えば、グラフィックス・プロセッシング・ユニット“GPUs”が提供される。
【0004】
本発明の効果がより容易に理解されるために、上記の簡単に説明した本発明のさらなる特定的な説明が、添付する図面に記載された特定の実施形態を参照することにより提供されるであろう。これらの図面は、本発明の典型的な実施形態のみを図示すると共に、したがって、その範囲を限定するべきものと判断されることはないことを理解した上で、本発明が、それに伴う図面の使用を通して追加的な特徴及び詳細を使用して記述され、かつ説明されるであろう:
【図面の簡単な説明】
【0005】
図1図1は、本発明の実施形態による、例示的なコンピューティング・ノードを示すブロック図である。
図2図2は、本発明の実施形態による、例示的なクラウド・コンピューティング環境を示す追加的なブロック図である。
図3図3は、本発明の実施形態による、抽象モデル・レイヤを示す追加的なブロック図である。
図4図4は、本発明の種々の側面を実現することができるクラウド・コンピューティング・ネットワークを示す。
図5A図5Aは、本発明の側面による、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための例示的操作を示すブロック図である。
図5B図5Bは、本発明の側面による、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための例示的操作を示すブロック図である。
図5C図5Cは、本発明の側面による、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための例示的操作を示すブロック図である。
図6図6は、本発明の種々の側面を実現することができる、例示的なアクセラレータ・ページキャッシュの組織化及びアプリケーション・プログラミング・インタフェース(“API”)を示すブロック図である。
図7A図7A~7Cは、本発明の種々の側面を実現することができる、アクセラレータと共に使用するためのアプリケーション・プログラミング・インタフェース(“API”)呼び出しの説明を示すテーブルである。
図7B図7Bは、本発明の種々の側面を実現することができる、アクセラレータと共に使用するためのアプリケーション・プログラミング・インタフェース(“API”)呼び出しの説明を示すテーブルである。
図7C図7Cは、本発明の種々の側面を実現することができる、アクセラレータと共に使用するためのアプリケーション・プログラミング・インタフェース(“API”)呼び出しの説明を示すテーブルである。
図8】再度、本発明の種々の側面が実現される、アクセラレータと不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための例示的な方法を示すフローチャート図である。
【発明を実施するための形態】
【0006】
現在、多くのコンピュータ・システムは、アクセラレータ(例えば、グラフィカル・プロセッシング・ユニット(GPUs)といったコプロセッサ)を使用して、プログラムが中央プロセッシング・ユニット(“CPU”)及びアクセラレータの両方上で動作するようなシステムの性能を向上させている。例えば、GPUsは、複雑な数学的計算の実行に関係することがある。また、アクセラレータの並列構造は、それらをして、データの大きなブロックを処理することが可能なアプリケーション/操作に対してCPUsよりもより効率化することができる。
【0007】
さらに、アプリケーション・データは、現在、データがGPU/CPUメモリ内に格納するには何倍も大きすぎることになるので、不揮発性メモリに格納される。不揮発性メモリは、CPUにより管理されるので、CPUは、GPUメモリを管理するか(複数のメモリ・コピー及びカーネル呼び出しを通して)、又はGPUカーネルがCPUに対して、それに対してデータを提供するようにリクエストすると共に、CPUとの同期化が必要であり、かつリクエストをキューアップするかの何れかにより管理される。GPUsが高出力スループットのデバイスなので、複数のスレッドは同時に実行する。すべての並列スレッドは、データを待機する可能性が有るので、大きなレイテンシが存在し、かつ発生する。一度ブロックがGPUのストリーミング・マイクロプロセッサ(“SM”)上でスケジュールされると、ブロックは、それが完了するまで滞在する。もし、スレッドがデータを待機するように強制された場合、実行リソースが保持され、そのデータが利用可能なブロックは実行できない。このため、GPUリソースは、非効率的に管理されており、かつホストCPUでの同期オペレーションの浪費及びデータの待機を招く。
【0008】
したがって、例えば、低レイテンシ及び広帯域幅を有するGPUsに、データを供給、又は提供することは、データが集中するアプリケーションにおいてボトルネックとなっている。現在、上述したように、例えばGPUsといったアクセラレータは、ホスト中央プロセッシング・ユニット(“CPU”)に依存してアクセラレータのメモリを管理すると共に、不揮発性ストレージに依存して、アクセラレータへとデータを提供する。これは、データ・コピーのオーバーヘッドを追加するばかりではなく、高スループットのアクセラレータと、CPUとの間の同期の形態における制御オーバーヘッドを追加する。加えて、これは追加のホスト・リソースを要求するばかりではなく、近年の不揮発性メモリ・エキスプレス(“NVMe”)デバイスに対して、サブマイクロセカンドのアクセス・レイテンシが与えられ、これが1オーダの大きさのレイテンシを追加すると共に、以下の図5Aに記載されるように、データ・アクセスの帯域幅を実質的に低下する。
【0009】
大容量のNVMeデバイスの低レイテンシ/広帯域幅を完全に利用するために、本発明の種々の実施形態は、例えばGPUsといったアクセラレータが、制御プレーン又はデータプレーンにおいてホストCPUを関与させることなく、それらに直接アクセスすることを可能とする。1つの側面においては、1つ又はそれ以上のアクセラレータ(例えば、グラフィックス・プロセッシング・ユニット“GPUs”)に対して、アプリケーション・プログラミング・インタフェース(“API”)を介して制御パス又はデータ・パス上で、ホスト中央プロセッシング・ユニット(“CPU”)とは独立して、不揮発性ストレージへのダイレクト・アクセスが提供される。
【0010】
したがって、本明細書で説明する種々の実施形態は、GPUメモリ容量が現在、GPUの計算能力にミスマッチしているので、GPU上で利用可能な計算ユニットの計算効率及び使用性を向上する。また、本発明は、CPUsを開放して、GPUsと、ストレージとの間のデータ転送をまさしく管理する代わりに、並列的に他の有用な作業を実行させる。本発明はさらに、GPUスレッドがそれらが必要とするデータに直接アクセスすることができるようにGPUメモリ管理をCPUに依存する代わりに、GPUスレッドにGPUメモリを監視させることを可能としながら、GPUスレッドに対してテラバイトの不揮発性メモリへのアクセスを提供することによって、コスト削減及び計算電力消費の低減を提供することができる。
【0011】
追加的に、GPUsは、データがGPUsメモリに適合しない場合にでも使用することが可能であり、このことが、大量のデータを使用する、よりイレギュラーなアプリケーション(大きなグラフ処理)に対してGPUsを使用することを可能とする。本発明は、さらにGPUへとさらなるデータを取得させるために、CPUと、GPUとの間の同期化を排除する。また、本明細書で説明するプリフェッチ操作は、プロフェッチされたブロックがGPUメモリ内で準備されるまで、GPUの計算資源を開放することを可能とする(例えば、リクエストされたデータ・ブロックのデータは、それらが使用可能な状態でGPUメモリ内に存在する)。また、ここでは、CPUへの依存性が低下するという事実のため、本発明は、ホストCPUsの数を増加させる追加的なコストを招くこと無しに、スケールアップ及びさらなるGPUsを可能とする。本発明はさらに、輻輳を回避すると共に局所性を使用するため、1つ又はそれ以上のGPUs上で共スケジュール・タスク及びI/Oの使用を可能としつつ、フォールト耐性及び管理を改善する。
【0012】
例示される実施形態の種々の側面の他の実施例及び対応する利益は、本明細書においてさらに説明されるであろう。
【0013】
あらかじめ、本開示は、クラウド・コンピューティングの詳細な説明を含むが、本明細書において列挙される教示の実装は、クラウド・コンピューティング環境、又はインターネット・オブ・シングス(IoT)ネットワーク環境に限定されることは無いことについて理解されよう。そうではなく、本発明の実施形態は、現在知られ、また後に開発される如何なる他のタイプのコンピューティング環境との組み合わせにおいても実装することができる。IoTは、電気製品といった物体に組み込まれ、ネットワークを通して接続することができるコンピューティング・デバイスを含む新しい概念であることに留意するべきである。IoTネットワークは、1つ又はそれ以上のIoTデバイス、又は“スマート・デバイス”を含むことができ、これらは、その内部に組み込まれたコンピューティング・デバイスを有する電気製品といった物理的な物体である。多くのIoTデバイスは、独立して操作可能であるが、それらはまた、制御システム、又はクラウド・コンピューティング環境で実行されるような分散制御システムと組み合わせることもできる。制御システムは、本明細書に記載するものに類似のエンドツウエンド・フローモニタリング機構を含むことができる。
【0014】
クラウド・コンピューティングは、最小限の管理労力又はサービス・プロバイダとの交流によって、迅速に提供及び開放可能な、コンピューティング資源(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン及びサービス)の共用プールにアクセスするための利便性のある、オンデマンドのネットワークアクセスのためのサービス提供のモデルである。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービスモデル、及び少なくとも4つの配置モデルを含むことができる。
【0015】
特徴は以下のとおりである:
【0016】
オンデマンド・セルフサービス:クラウドのコンシューマは、サーバ時間、及びネットワーク・ストレージといったコンピューティング能力を、サービスのプロバイダとの人間的交流を必要とすることなく必要に応じて自動的に一方向的に提供される。
【0017】
広範なネットワークアクセス:能力は、ネットワーク上で利用可能であり、かつ様々なシン又はシック・クライアント・プラットフォーム(例えば、モバイルホン、ラップトップ及びPDA)による利用を容易にする標準的な機構を通してアクセスされる。
【0018】
リソースの共用:プロバイダのコンピューティング資源は、マルチテナント・モデルを使用し、必要に応じて、動的に割当てられ、再割り当てされる、異なった物理的及び仮想化資源を複数の消費者に提供するべく共用される。コンシューマは概ね、提供される資源の正確な位置(例えば、国、州、又はデータセンタ)に関する制御又は知識を有さず、抽象化の高いレベルにおいて位置を特定することができるというように、位置非依存の感覚が存在する。
【0019】
迅速な順応性:機能は、迅速かつ弾力的に、場合によっては自動的に供給されて素早くスケールアウトし、迅速に解放して素早くスケールインすることが可能である。コンシューマにとっては、供給のために利用可能な機能は、多くの場合、制限がないように見え、いつでも任意の量で購入することができる
【0020】
従量制サービス:クラウド・システムは、サービスの種類(例えば、ストレージ、処理、帯域幅、及びアクティブ・ユーザ・アカウント)に適したいくつかの抽象化レベルで計量機能を活用することによって、リソースの使用を自動的に制御し、最適化する。リソース使用量を監視し、制御し、報告することで、使用されているサービスのプロバイダ及びコンシューマの両方に対して透明性を提供することができる。
【0021】
サービスモデルは、以下のとおりである:
【0022】
ソフトウェア・アズ・ア・サービス(SaaS):コンシューマに提供される機能は、クラウド・インフラストラクチャ上で実行されるプロバイダのアプリケーションを使用することである。アプリケーションは、ウェブ・ブラウザ(例えば、ウェブベースの電子メール)のようなシン・クライアント・インターフェースを通じて、種々のクライアント・デバイスからアクセス可能である。コンシューマは、限定されたユーザ固有のアプリケーション構成設定を除いて、ネットワーク、サーバ、オペレーティング・システム、ストレージ、又は個々のアプリケーションの機能も含む、基盤となるクラウド・インフラストラクチャを管理又は制御することはない。
【0023】
プラットフォーム・アズ・ア・サービス(PaaS):コンシューマに提供される機能は、プロバイダがサポートするプログラミング言語及びツールを用いて作成された、コンシューマが作成又は獲得したアプリケーションを、クラウド・インフラストラクチャ上に配置することである。コンシューマは、ネットワーク、サーバ、オペレーティング・システム、又はストレージを含む、基盤となるクラウド・インフラストラクチャを管理又は制御することはないが、配置されたアプリケーションを制御し、可能であればアプリケーション・ホスティング環境の構成を制御する。
【0024】
インフラストラクチャ・アズ・ア・サービス(IaaS):
コンシューマに提供される機能は、処理、ストレージ、ネットワーク、及びその他の基本的なコンピューティング・リソースの提供であり、コンシューマは、オペレーティング・システム及びアプリケーションを含む任意のソフトウェアを配置し、実行させることが可能である。コンシューマは、基盤となるクラウド・インフラストラクチャを管理又は制御することはないが、オペレーティング・システム、ストレージ、配置されたアプリケーションの制御を有し、可能であれば選択ネットワーキング・コンポーネント(例えば、ホストのファイアウォール)の限定的な制御を有する。
【0025】
配置モデルは、以下の通りである。
【0026】
プライベート・クラウド:クラウド・インフラストラクチャは、1つの組織のためだけに動作する。これは、その組織又は第三者によって管理することができ、オン・プレミス又はオフ・プレミスで存在することができる。
【0027】
コミュニティ・クラウド:クラウド・インフラストラクチャは、いくつかの組織によって共有され、共通の利害関係(例えば、任務、セキュリティ要件、ポリシー、及びコンプライアンスの考慮事項)を有する特定のコミュニティをサポートする。これは、それらの組織又は第三者によって管理することができ、オン・プレミス又はオフ・プレミスに存在することができる。
【0028】
パブリック・クラウド:クラウド・インフラストラクチャは、公衆又は大きな産業グループが利用可能できるようにされており、クラウド・サービスを販売する組織によって所有される。
【0029】
ハイブリッド・クラウド:クラウド・インフラストラクチャは、2つ又はそれより多いクラウド(プライベート、コミュニティ、又はパブリック)を組み合わせたものであり、これらのクラウドは、固有のエンティティのままであるが、データ及びアプリケーションのポータビリティを可能にする標準化技術又は専有技術によって互いに結合される(例えば、クラウド間の負荷バランスのためのクラウド・バースティング)。
【0030】
クラウド・コンピューティング環境は、無国籍性、粗結合性、モジュール性、及びセマンティックな相互運用性に焦点を合わせたサービス指向のものである。クラウド・コンピューティングの心臓部には、相互接続された複数のノードを含むインフラストラクチャがある。
【0031】
ここで、図1を参照すると、クラウド・コンピューティング・ノードの実施例の概略が示されている。クラウド・コンピューティング・ノード10は、好適なクラウド・コンピューティング・ノードの1つの実施例に過ぎず、本明細書で説明する本発明の実施形態の使用又は機能の範囲としての如何なる限定を示唆することを意図するものではない。それに関わらず、クラウド・コンピューティング・ノード10は、本明細書で上述した如何なる機能も実装され、又は実行でき、又はそれらの両方が可能である。
【0032】
クラウド・コンピューティング・ノード10には、コンピュータ・システム/サーバ12が存在し、これは数多くの他の汎用目的又は特定目的のコンピューティング・システムの環境又は構成と共に操作可能である。コンピュータ・システム/サーバ12と共に使用することに好適な周知のコンピューティング・システム、環境又は構成、又はそれらの組み合わせは、これらに限定されることは無く、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルド又はラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セットトップ・ボックス、プログラム可能なコンシューマ電子機器、ネットワークPC(複数)、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、及び上述のシステム又はデバイスなどのいずれをも含む、分散クラウド・コンピューティング環境を含む。
【0033】
コンピュータ・システム/サーバ12は、コンピュータ・システムにより実行されるプログラム・モジュールといったコンピュータ・システムが実行可能な命令の一般的なコンテキストにおいて記述することができる。一般には、プログラム・モジュールは、特定のタスクを遂行するか又は特定の抽象データ・タイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム/サーバ12は、タスクが通信ネットワーク又はIoTネットワークを通してリンクされたリモート処理システム・デバイスにより遂行される、分散クラウド・コンピューティング環境において実装することができる。分散クラウド・コンピューティング環境においては、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカル及びリモート・コンピュータのストレージ媒体の両方に位置することができる。
【0034】
図1に示すように、クラウド・コンピューティング・システム10のコンピュータ・システム/サーバ12は、汎用目的のコンピューティング・デバイスの形式で示されている。コンピュータ・システム/サーバ12のコンポーネントは、限定されることは無く、1つ又はそれ以上のプロセッサ又はプロセッシング・ユニット16と、システム・メモリ28と、システム・メモリ28を含む種々のシステム・コンポーネントをプロセッサ16に結合するバス18とを含む。
【0035】
バス18は、メモリ・バス又はメモリ・コントローラ、ペリフェラル・バス、グラフィックス・アクセラレータ・ポート、及びプロセッサ又は種々のバス・アーキテクチャの如何なるものを使用するローカル・バスを含む、1つ又はそれ以上のバス構造のいくつかのタイプの如何なるものも表す。例示の目的で、限定的でなく、そのようなアーキテクチャは、インダストリー・スタンダード・アーキテクチャ(ISA)バス、マイクロ-チャネル・アーキテクチャ(MCA)バス、拡張ISA(EISA)バス、ビデオ・エレクトロニクス・スタンダード・アソシエーション(VESA)ローカル・バス、及びペリフェラル・インタコネクト(PCI)バスを含む。
【0036】
コンピュータ・システム/サーバ12は、典型的には、種々のコンピュータ可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によりアクセス可能な利用可能な如何なる媒体とすることができ、揮発性及び不揮発性の媒体、取り外し可能及び取り外し不可能な媒体を含む。
【0037】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM)30といった揮発性メモリ又はキャッシュ・メモリ32又はそれら両方といったコンピュータ可読な媒体を含むことができる。コンピュータ・サーバ12は、さらに、他の取り外し可能/取り外し不可能、揮発性/不揮発性のコンピュータシステム・ストレージ媒体を含むことができる。例示の目的のみで、ストレージ・システム34は、取り外し不可能で、不揮発性の磁性媒体(図示しておらず、かつ典型的には“ハードドライブ”と呼ばれる。)との間で読み込み及び書き込みのために提供することができる。図示していないが、取り外し可能な不揮発性の磁気ディスク・ドライブ(例えば、“フロッピー・ディスク(登録商標)”)及びCD-ROM、DVD-ROM又は他の光学的媒体といった取り外し可能で不揮発性の光学ディスクとの間で読み込み及び書き込みが可能な光学ディスク・ドライブを提供することができる。そのような例においては、それぞれは、1つ又はそれ以上の媒体インタフェースによりバス18へと接続することができる。さらに図示し、かつ以下に説明するように、メモリ28は、本発明の実施形態の機能を遂行するように構成されたプログラム・モジュールのセット(少なくとも1つ)を有する少なくとも1つのプログラム製品を含むことができる。
【0038】
プログラム/ユーティリティ40は、プログラム・モジュール42のセット(少なくとも1つ)を有しており、実施例の目的で、非限定的に、オペレーティング・システムに加え、1つ又はそれ以上のアプリケーション・プログラム、他のプログラム・モジュール及びプログラム・データを、メモリ28内に格納することができる。オペレーティング・システム、1つ又はそれ以上のアプリケーション・プログラム、他のプログラム・モジュール及びプログラム・データ又はそれらのいくつかの組み合わせのそれぞれは、ネットワーク環境の実装を含むことができる。プログラム・モジュール42は、一般には、本明細書で説明したように本発明の実施形態の機能又は方法論又はそれら両方を遂行する。
【0039】
コンピュータ・システム/サーバ12は、また、キーボード、ポインティング・デバイス、ディスプレイ24など、1つ又はそれ以上の外部デバイス14;ユーザを、コンピュータ・システム/サーバ12と対話可能とする1つ又はそれ以上のデバイス;又はコンピュータ・システム/サーバ12が1つ又はそれ以上の他のコンピューティング・デバイスと通信を可能とする如何なるデバイス(例えばネットワーク・カード、モデムなど)、又はそれらの組み合わせと通信することができる。そのような通信は、入力/出力(I/O)インタフェース22を介して発生することができる。さらに、コンピュータ・サーバ12は、ローカル・エリア・ネットワーク(LAN)、汎用ワイド・エリア・ネットワーク(WAN)、IoTネットワーク、又は公衆ネットワーク(インターネット)又はそれらの組み合わせといった、1つ又はそれ以上のネットワークとネットワーク・アダプタ20を介して通信可能である。図示するように、ネットワーク・アダプタ20は、コンピュータ・システム/サーバ12の他のコンポーネントとバス18を介して通信する。図示しないが、他のハードウェア又はソフトウェア又はそれら両方のコンポーネントは、コンピュータ・システム/サーバ12との組み合わせで使用することができるであろうことは理解されるべきである。実施例は、限定することではなく、マイクロ・コード、デバイス・ドライバ、冗長処理ユニット、及び外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、及びデータ・アーカイブ・ストレージ・システムなどを含む。
【0040】
図2は、例示的なクラウド・コンピューティング環境50を示す。図示するように、クラウド・コンピューティング環境50は、1つ又はそれ以上のクラウド・コンピューティング・ノード10を含み、それらと、クラウド・コンシューマにより使用される、例えばパーソナル・デジタル・アシスタント(PDA)又はセルラ電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、インテリジェント(“スマート”)マットレス54D、又は自動車コンピュータ・システム54N又はこれらの組合せといったローカル・コンピューティング・デバイスとが通信する。本明細書で使用するように、例えば、マットレス54Dは、パッド、マット、クッション、フオーム、又は例えばベッド、(又はベッドの部分)、寝椅子、ソファー、リクライナ、シート、椅子、又はシートとすることができる。
【0041】
ノード10は、互いに通信することができる。これらは、上述したプライベート、コミュニティ、パブリック、又はハイブリッド・クラウド、又はそれらの組合せといった、1つ又はそれ以上のネットワーク内で、物理的又は仮想的にグループ化することができる(図示せず)。これは、クラウド・コンピューティング環境50が、クラウド・コンシューマがローカルなコンピューティング・デバイス上のリソースを維持する必要を無くするための、インフラストラクチャ、プラットホーム、又はソフトウェア・アズ・ア・サービスを提供することを可能とする。図2に示すコンピューティング・デバイス54A-Nのタイプは、例示を意図するためのみのものであり、コンピューティング・ノード10及びクラウド・コンピューティング環境50は、任意のタイプのネットワーク、又はアドレス可能なネットワーク接続(例えばウェブ・ブラウザ)、又はそれらの両方を通じて、いかなるタイプのコンピュータ化デバイスとも通信することができることが理解される。
【0042】
ここで、図3を参照すると、図2のクラウド・コンピューティング環境50により提供される機能的抽象レイヤのセットが示される。予め、図3に示したコンポーネント、レイヤ、及び機能は、例示することのみを意図したものであり、本発明の実施形態は、これらに限定されることは無いことは理解されるべきである。図示したように、後述するレイヤ及び対応する機能が提供される。
【0043】
デバイス・レイヤ55は、物理的、又は仮想デバイス、又は組み込み、又はスタンド・アローンの電子機器、センサ、アクチュエータ、及びクラウド・コンピューティング環境50内で種々のタスクを実行する他の物体、又はこれらの組み合わせを含む。デバイス・レイヤ55内のそれぞれのデバイスは、他の機能的抽象レイヤとネットワークする能力を含んでいるので、デバイスにより受領された情報は、それに対して提供することができるか、若しくは他の抽象レイヤからの情報がデバイスへと提供されるか、又はこれらの両方することができる。1つの実施形態においては、デバイス・レイヤ55に含まれる種々のデバイスは、“インターネット・オブ・シングス”(IoT)として集合的に知られるエンティティのネットワークを含むことができる。そのようなエンティティのネットワークは、当業者が認識するであろうように、きわめて多種の目的を達成するために、データの相互通信、収集及び配布を可能とする。
【0044】
デバイス・レイヤ55は、図示するように、センサ52、アクチュエータ53、一体化された処理を含む“学習”サーモスタット56、センサ、ネットワーク電子機器、カメラ57、制御可能な家庭用コンセント出力部/受容部58及び制御可能な電子スイッチ59を含む。他の可能なデバイスは、これらに限定されることは無いが、種々の追加的なセンサ・デバイス、ネットワーク・デバイス、電子デバイス(リモート・コントロール・デバイスといった)、追加的なアクチュエータ・デバイス、冷蔵庫、又は洗濯機/ドライヤといったいわゆる“スマート”電子機器、及び広範な多様性の相互接続された如何なる他の物体を含むことができる。
【0045】
ハードウェア及びソフトウェアレイヤ60は、ハードウェア及びソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61;RISC(縮小命令セットコンピュータ)アーキテクチャに基づく複数のサーバ62;複数のサーバ63;複数のブレード・サーバ64;複数のストレージ・デバイス65;及びネットワーク及びネットワーキング・コンポーネント66を含むことができる。いくつかの実施形態ではソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67及びデータベース・ソフトウェア68を含む。
【0046】
可視化レイヤ70は、それから後述する仮想エンティティの実施例が提供される抽象レイヤ;仮想サーバ71;仮想ストレージ72;仮想プライベート・ネットワークを含む仮想ネットワーク73;仮想アプリケーション及びオペレーティング・システム74;及び仮想クライアント75を提供する。
【0047】
1つの実施例では、マネージメント・レイヤ80は、下記の機能を提供することができる。リソース提供部81は、コンピューティング資源及びクラウド・コンピューティング環境内でタスクを遂行するために用いられる他の資源の動的獲得を提供する。計測及び価格設定部82は、クラウド・コンピューティング環境内で資源が使用されるとコストの追跡を提供すると共に、これらの資源の消費に対する課金又は請求を提供する。1つの実施例では、これら資源としてはアプリケーション・ソフトウェア・ライセンスを含むことができる。セキュリティ部は、クラウト・コンシューマ及びタスクの同定及び認証と共にデータ及び他の資源の保護を提供する。ユーザ・ポータル部83は、コンシューマに対するクラウド・コンピューティング環境及びシステム・アドミニストレータへのアクセス性を提供する。サービスレベル・マネージメント部84は、クラウド・コンピューティング資源の割り当て及び管理を提供し、必要なサービス・レベルに適合させる。サービス・レベル・アグリーメント(SLA)プランニング・フルフィルメント部85は、SLAにしたがって将来的な要求が要求されるクラウド・コンピューティング資源の事前準備を行うと共にその獲得を行う。
【0048】
ワークロード・レイヤ90は、クラウド・コンピューティング環境を利用するための機能の例示を提供する。このレイヤによって提供されるワークロード及び機能の例としては、マッピング及びナビゲーション91;ソフトウェア開発及びライフタイム・マネージメント92;仮想教室教育伝達93;データ分析処理94;トランザクション・プロセッシング95;及び本発明の例示的な実施形態にコンテキストにおいては、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための種々のワークロード及び機能96を含むことができる。加えて、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するためのワークロード及び機能96は、データ分析(種々の環境センサからデータ収集及び処理を含む)、ネットワーキング、データ送信/受信、仮想化/仮想計算、クラウド・コンピューティング通信、又は管理機能、又はこれらの組みわせといった操作を含むことができる。当業者は、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための種々のワークロード及び機能96は、また、ハードウェア及びソフトウェア60、仮想化70、マネージメント80、及び他のワークロード90(例えば、データ分析処理94といった)といった種々の抽象レイヤの他の部分との組み合わせにおいて動作し、本発明の例示した実施形態の種々の目的を達成することができることを認識するであろう。
【0049】
以前に述べたように、本発明の機構は、コンピューティング環境内でアクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供するための、再度プロセッサにより提供される新奇なアプローチを提供する。1つ又はそれ以上のアクセラレータ(例えば、グラフィックス・プロセッシング・ユニット“GPUs”)には、アプリケーション・プログラミング・インタフェース(“API”)を介して、データの読み出し操作及び書き込み操作の実行のための制御パス、又はデータ・パス上で、ホスト中央プロセッシング・ユニット(“CPU”)とは独立して、不揮発性ストレージへのダイレクト・アクセスが提供される。
【0050】
ここで、図4に転じると、例示される実施形態の種々の機構による、例示的な機能コンポーネント400を示すブロック図が示される。1つの側面においては、図1~3に示した1つ又はそれ以上のコンポーネント、モジュール、サービス、アプリケーション、又は機能又はそれらの組み合わせが、図4において使用することができる。本発明の種々の側面による、種々の計算、データ処理、及び他の機能を実行するためのプロセッシング・ユニット420(“プロセッサ”)を含むダイレクト・データ・アクセス・サービス410が示されている。1つの側面においては、プロセッサ420及びメモリ430は、ダイレクト・アクセス・サービス410の内部、又は外部又はその両方のものとすることができると共に、コンピューティング・システム/サーバ12の内部又は外部のものとすることができる。ダイレクト・データ・アクセス・サービス410は、図1に記載されるように、コンピュータ・システム/サーバ12に含まれることができる。
【0051】
1つの側面においては、コンピュータ・システム/サーバ12は、例えばGPUs492(例示のみの目的で記載)といった、1つ又はそれ以上のアクセラレータ及び不揮発性メモリ490(例えば、“SDD”といったソリッド・ステート・ドライブ)と通信することができる。1つの側面においては、GPUs492は、コンピュータ・システム/サーバ12に含まれることができる(例えば、内部的に配置されるか、又はコンピュータ・システム/サーバ12に対して外部に配置されるか、又はそれら両方)。加えて、不揮発性メモリ490は、コンピュータ・システム/サーバ12に含まれることができる(例えば、コンピュータ・システム/サーバ12の内部に配置されるか、又は外部に配置されるか、又はこれらの両方)、若しくは、不揮発性メモリ490は、コンピュータ・システム/サーバ12の外部に配置されることができる。
【0052】
プロセッシング・ユニット420は、メモリ430と通信可能である。ダイレクト・データアクセス・サービス410は、ダイレクト・データアクセス・コンポーネント440と、ページ・キャッシュ・コンポーネント450と、プリフェッチ・コンポーネント460と、オブジェクト管理コンポーネント470、又はこれらの組み合わせを含む。
【0053】
当業者は認識できるであろう様に、ダイレクト・データアクセス・サービス410における種々の機能的ユニットの図示は、機能ユニットがダイレクト・データアクセス・サービス410内に配置されることができるか、又は分散コンピューティング・コンポーネント内またはその間の何処かに配置されるか、又はそれら両方に配置できるものとしての、例示の目的のためである。
【0054】
1つの側面においては、ダイレクト・データアクセス・サービス410は、1つ又はそれ以上のアクセラレータに対して、アプリケーション・プログラミング・インタフェース(“API”)を介して、データの読み出し操作及び書き込み操作の実行のための制御パス又はデータ・パス上で、ホスト中央プロセッシング・ユニット(“CPU”)とは独立して、不揮発性ストレージへのダイレクト・アクセスを提供する。
【0055】
ダイレクト・データアクセス・サービス410は、不揮発性メモリ490の1つ又はそれ以上の不揮発性メモリ・エキスプレス(“NVMe”)のキュー及びレジスタを、1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内にマップする。
【0056】
ページ・キャッシュ・コンポーネント450は、データにおける局所性を利用するために、1つ又はそれ以上のアクセラレータのメモリ内のうちの、1つ又はそれ以上のアクセラレータによって管理されるページ・キャッシュを使用する。複数のアクセラレータ(例えば複数のGPUs)が存在する場合、ページ・キャッシュ・コンポーネント450は、データにおける局所性を利用するために、複数のアクセラレータのメモリ内の1つ又はそれ以上のアクセラレータにより管理される分散ページ・キャッシュを使用することができる。
【0057】
ページ・キャッシュ・コンポーネント450は、不揮発性メモリ490からの1つ又はそれ以上のページを、ページ・キャッシュにコピーすると共に、ページ・マッピング・テーブルをアップデートする。ダイレクト・データアクセス・サービス410は、データを不揮発性メモリ490から例えばGPUs492といった、1つ又はそれ以上のアクセラレータへとコピーすると、制御パス又はデータ・パスからホストCPUを取り除く。
【0058】
プリフェッチ・コンポーネント460は、APIを使用して、データをプリフェッチすると共に、計算及びデータ移動がオーバーラップするようにそれぞれのコンピューティング・サイクルを格納する。
【0059】
ダイレクト・データアクセス・サービス410は、ページ・キャッシュ・コンポーネント450、又はプリフェッチ・コンポーネント、又はこれらの両方に関連して、1つ又はそれ以上のアクセラレータにより開始された読み出し操作又は書き込み操作についての1つ又はそれ以上のAPI呼び出しを受領して、ページキャッシュ・ミスの発生を判断すること、1つ又はそれ以上の不揮発性メモリ・エキスプレス(“NVMe”)のデータ・バッファから1つ又はそれ以上のページを、ページ・キャッシュへとコピーすること、又はページ・マッピング・テーブルをアップデートすること、又はこれらの組み合わせを実行する。
【0060】
ホストCPU(例えばコンピュータ・システム・サーバ12及びGPUs492の内部又は外部又はそれら両方)内のオブジェクト管理コンポーネント470は、アプリケーションが開始されるや否や、不揮発性メモリ490内のそれぞれのオブジェクトについてのオブジェクト・アドレスを管理することができる。それぞれのオブジェクト識別子(“ID”)のマップ、オブジェクト開始ブロック・アドレス、オブジェクト・サイズは、ホストCPUにより管理することができ、かつ不揮発性メモリ490の予約セクションにおいて、持続的に維持することができる。800の操作は、1つ又はそれ以上のAPI呼び出しを使用したそれぞれのオブジェクトについてのページのサブレンジを、1つ又はそれ以上のアクセラレータに割り当てる。
【0061】
例えば、アプリケーションが開始されると、ホストCPU(例えば、コンピュータ・システム/サーバ12が、API呼び出し(例えば“get_object_map”API呼び出し)を使用してマップを読み出す。カーネル呼び出しに際して、ポインタを渡す代わりに、ホストCPU(例えば、コンピュータ・システム/サーバ12)は、そのサイズと共にそれぞれのオブジェクトの開始ブロック・アドレスを渡す。GPUs492は、それ故に、所望のデータ構造の位置を知ることができる。ホストCPU(例えばコンピュータ・システム/サーバ12)は、もう1つのAPI呼び出し(例えば“pcreate”API呼び出し)を使用して、新たなオブジェクトについての空間及びマッピングを生成することができる。例えば、GPUs492のうちの1つといったGPUは、これらのページについてのホームと呼ばれる(例えば、GPUは、そのページを所有している場合、ページのホームGPUである。)。
【0062】
ここで、図5A~5Cに転じると、アクセラレータと、不揮発性メモリ・ストレージとの間のダイレクト・アクセスを提供することに関連する、例示的な機能500のブロック図が図示されている。図示されるように、機能の種々のブロックが、ブロック500の相互の関係を示すと共に、プロセス・フローを示すための矢線を以て図示されている。加えて、それぞれの機能ブロック500(又は“アクション・ステップ”又は単に“ステップ”)に関連する説明的な情報もまた示される。示されるように、複数の機能ブロックは、図1~4で以前に説明したと同一の説明的な意味合いにおいて、機能“モジュール”とも考えることができる。前述のことを念頭に置き、モジュール・ブロック500は、また、本発明によるアクセラレータ間や、不揮発性メモリ・ストレージへのダイレクト・アクセスを提供するため、システムの種々の、ハードウェア、又はソフトウェア・コンポーネントに組み込むことができる。多くの機能ブロック500は、分散コンピューティング・コンポーネント内、又はユーザ・デバイス上、又は他の場所のいずれかで、一般にはユーザに気づかれることなく、種々のコンポーネント上のバックグラウンド・プロセスとして実行することができる。本明細書で説明する他の実施形態における同様の要素、コンポーネント、モジュール、サービス、アプリケーション、又は機能、又はこれらの組み合わせの反復した説明は、簡略化のため、省略する。
【0063】
前述したように、図5Aは、例えば、GPU510のメモリを管理し、不揮発性ストレージ520に依存して、GPU510へとデータを提供するための、ホストCPU530及びCPUのダイナミック・アクセス・メモリ“DRAM”など、ホスト・ファイル・システム“FS”に依存するGPU510を記載する。これは、データ・コピーのオーバーヘッドを追加するばかりではなく、高スループットのアクセラレータと、CPU530との間の同期を形成することにおける制御オーバーヘッドも追加する。ホストCPU530は、ステップ1及び2の、GPU510と不揮発性メモリ520との間のメモリ管理のオーバーヘッドを招く。複数のデータのコピーは、ステップ3で、不揮発性ストレージ520とCPU530との間で、かつステップ4のように、GPU510と、CPU530との間で渡され/供給されることができる。追加的に、GPUスレッド、ブロック、グリッドは、ステップ4に示すように、データがGPU510へと転送されるまで、停止される可能性がある。GPU510と、不揮発性ストレージ520との間での直接的なダイレクト・メモリ・アクセス(“DMA”)を実行することによるデータ・コピーのオーバーヘッドを削減しようとする試みが存在するものの、これは、依然としてCPU530からのCPU制御/同期オーバーヘッドを招くことに留意するべきである。
【0064】
しかしながら、図5Bは、本発明の種々の実施形態を使用する、アクセラレータ間、及び不揮発性メモリ・ストレージへのダイレクト・アクセスを提供するための1つのアクセラレータ(例えば単一のGPU510)を使用する操作を記載する。すなわち、図5Bは、アクセス・オーバーヘッド/レイテンシを削減すること及びGPU510のGPUスレッドがCPU530とは独立して不揮発性ストレージ520に直接アクセスすることを可能とすることを示す。1つの側面においては、GPU510は、ファイル・システム“FS”(単純なオブジェクト格納に類似する)を使用して不揮発性ストレージ520を管理すると共に、GPU510上で動作するNVMeドライバ(例えばGPU Directを使用する)を影響下に置く。CPU530は、ステップ1において制御パスから、及びステップ2においてデータ・パスから除外される。GPU510は、不揮発性ストレージ520の全体に対するアクセスを有する。
【0065】
より具体的には、図5Bは、例えば、アクセス・オーバーヘッド/レイテンシを削減し、かつGPU510のGPUスレッドがCPU530とは独立して直接、不揮発性ストレージ520にアクセスすることを許容するために、GPU510といった単一のアクセラレータから読み出し及び書き込みリクエストを発行する操作を示す。1つの側面においては、以下のステップに例示されるように、APIは、GPU510のGPUスレッドが、NVMeを使用し、かつ制御又はデータ・パス上でCPU530なく、不揮発性ストレージ520上でデータを読み出し及び書き込みすることを可能とする。
【0066】
ステップ1では、ホストCPU530は、GPUと、不揮発性ストレージ520との間のインタフェース(例えばキュー及びDMA)を初期化する(NVMe及び例えばGPUDirect/DirectGMAと言ったDMAマッピング)。ステップ2で、ホストCPU530は、不揮発性ストレージ520から、GPU510のGPUメモリへのオブジェクト・マップの転送を開始することができるので、GPUスレッドは、不揮発性ストレージ520上で、それぞれのオブジェクトがどこにあるかを知ることができる。ステップ2(1)において、マップ内のエントリは、キーとしてのオブジェクト識別子(“ID”)と、値としての不揮発性ストレージ520上での開始アドレスとを含むキー値ペアとすることができる。ステップ2(2)においては、ホストCPU530のアプリケーションは、GPUカーネル起動のパラメータとして、適切なオブジェクトIDsを渡すことにより、どのオブジェクトを使用するべきかをGPU510に示すことができる。ステップ3においては、ホストCPU530は、例えば、パラメータとしてオブジェクトIDsを除く通常のアプリケーションにおいてGPUカーネルを作動することができる(ステップ2(2)から)。
【0067】
ステップ4で、GPUカーネルのスレッドは、例えば提供された“pread”及び“pwrite”API呼び出しといった、提供された1つ又はそれ以上のAPI呼び出しを使用して、不揮発性ストレージ520との間でデータの読み出し、又は書き込み、又はそれら両方を行うことができる。
【0068】
ステップ5において、GPUスレッドは、preadAPI呼び出しを発行する場合、GPUページ・キャッシュがGPUスレッド(例えば、APIを呼び出し、かつGPUスレッドによりチェックされるスレッド)によりチェックされ、リクエストされたページが、GPU510のGPUメモリ内に有るか否かを判断する。ステップ5(1)においては、ページがGPU510のメモリ内に存在する場合には、その後、データはページ・キャッシュからユーザが割り当てたあて先バッファへとコピーされる(例えば、あて先バッファは、ユーザが読み出し及び書き込みすることができ、かつ1つ又はそれ以上のAPIsを使用してGPUメモリ内でユーザが割り当てたものとすることができる。)。ステップ5(2)においては、ページ(又はページのサブセット)が、GPUページ・キャッシュ内に配置されていない場合、呼び出しGPUスレッドは、ステップ5(2)(1)のように、無いページについてのNVMeコマンドを準備し、ステップ5(2)(2)(1)のように制御パス内でCPU530を使用することなく、ステップ5(2)(2)のように、NVMeサブミッション・キューへとNVMeコマンドをアトミックに追加して、NVMeドアベルを鳴らし、ステップ5(2)(3)のように、リクエストが完了するまでNVMe完了キューをポーリングし、ステップ5(2)(3)(1)のように、GPU510と、NVMeデバイスとの間のデータが互いの間でCPU520の干渉無しに直接コピーされ、ステップ5(2)(4)のようにNVMeIOバッファ領域からユーザが提供したバッファへとデータがコピーされ、ステップ5(2)(5)のようにページ・キャッシュ状態をアップデートする。
【0069】
追加的に、ステップ6では、GPUスレッドがpwriteAPIを発行する場合、呼び出しスレッドは:ステップ(6)(1)のようにページ・キャッシュ状態をアップデートし、ステップ(6)(2)のように、不揮発性ストレージにページを書き込むためのNVMeコマンドを準備し、ステップ5(2)(3)(1)のようにステップ(6)(3)で、このコマンドをNVMeサブミッション・キューにアトミックに追加して、NVMeドアベルを鳴らし(例えば、制御パス内でCPU530を使用することなく)、ステップ5(2)(3)(1)のようにステップ(6)(4)で、リクエストが完了するまで、NVMe完了キューをポーリングし(例えば、GPU510と、NVMeデバイスとの間でデータが、CPU530の干渉無しに互いの間で直接コピーされる。)、ステップ(6)(7)のように、そのバッファを開放する。
【0070】
ステップ7では、GPUスレッドは、pread及びpwiteAPI呼び出しを発行することができるが、それが何度も要求され、ステップ1(5)及び1(6)がそれぞれ反復される可能性がある。
【0071】
複数のGPUの場合において、図5Cは、複数のGPUs510(例えば図5Cの510は、GPUsのグループを記載する。)と不揮発性メモリ・ストレージ520との間でダイレクト・アクセスを提供するための操作を記載する。NVMeにアクセスする前に、GPUs510は、互いの間でそれぞれデータを交換して、データが異なるGPUキャッシュ内に既に存在するか否かを確認する。
【0072】
1つの側面においては、オブジェクト・ページは、1つ又はそれ以上の特定のGPUs510へとハッシュされる。GPUs510は、オブジェクト・ページが1つ又はそれ以上の特定のGPUs510のキャッシュ内に配置することができる場合、若しくはGPUs510がオブジェクト・ページを検索する責任がある可能性がある場合の何れかにおいて、オブジェクト・ページを有することができる。また、GPUs510は、GPUs510のグループの有するGPUからページを要求することができる。
【0073】
ここで、図6を参照すると、ブロック図600は、アクセラレータ・ページキャッシュの組織化及びアプリケーション・プログラミング・インタフェース(“API”)を使用するための例示的な操作を示す。1つの側面においては、図1図5A~5Cに記載した、それぞれのデバイス、コンポーネント、モジュール、操作、又は機能、又はそれらの組み合わせが図6の1つ又はそれ以上の操作を適用するか、又は実行する。
【0074】
ステップ1では、API呼び出し(例えば、preadAPI呼び出し、又はpwriteAPI呼び出し、又はそれら両方)が、GPUメモリ620内のGPUページ・キャッシュ(“gpcache”)へと発行される。ステップ2では、1つ又はそれ以上のアクセラレータ(例えばGPUスレッド610)により開始されたデータの読み出し操作、又は書き込み操作のための1つ又はそれ以上のAPI呼び出し(例えば、preadAPI呼び出し、又はpwriteAPI呼び出し又はそれら両方)を受領すると、ページキャッシュ・ミスの発生を判断し、かつNVMeデバイス630にアクセスするためのNVMeリクエストを、NVMeサブミッション・キュー624へと発行する。ステップ3では、NVMeデバイス630を使用してNVMeリクエスト完了のポーリングが完了して、NVMe完了キュー626へと提供される。
【0075】
ステップ4では、ページは、NVMeデータ・バッファ628からページ・キャッシュ622へとコピーされ、ページ/オブジェクト・マッピング・テーブルをアップデートすることができる。
【0076】
単一のアクセラレータ(例えば、図5Bの単一のGPU)を使用して、アクセラレータ間、及び不揮発性メモリ・ストレージへのダイレクト・アクセスを提供する場合において、以下の操作ステップが、データの局所性を利用するためにGPUメモリ内のページ・キャッシュ(例えば、アプリケーション/ソフトウェアで管理されたページ・キャッシュ)を使用して実行されることができる。
【0077】
ステップ1では、ページ・テーブルは、オブジェクト・データからGPUメモリ620(例えばGPUグローバル・メモリ)のGPUグローバル・メモリ・アドレスへのページのマッピングを格納するGPUメモリ620(例えば、GPUのグローバル・メモリ)内に格納することができる。ステップ(1)(1)では、マッピングは、ページがGPUメモリ620内に配置されている場合には、マッピングのみが存在する。
【0078】
ステップ2では、ページ・キャッシュのページは、リースト・リセントリ・ユーズド(“LRU”)リスト内に保持される。ステップ2(1)では、pread又はwriteAPI呼び出しに際して、空きページが不十分の場合(例えば、空きページが十分ではない)、LRUページは、ダーティであれば書き戻しされ、以前のマッピングからアンマップされ、かつ新たなマッピングのために再マップされることができる。
【0079】
ステップ3(1)では、preadAPI呼び出しに際して、それぞれのリクエスト・ページは、ページ・キャッシュでチェックされることができる。ページがページ・キャッシュにある場合、ステップ3(2)のように、データは、そこからユーザ提供のバッファへとコピーされることができる。ステップ3(2)では、ページ・キャッシュ622内に配置されていないページについての入力/出力(“I/O”)リクエストが生成される可能性がある。ステップ3(2)(1)では、ページ・テーブル内のマッピングを、新たにリクエストされたページについて生成することができる。
【0080】
ステップ4(1)では、pwiteAPI呼び出しに際して、ページ・キャッシュのLRUリストからのページを割り当て、ユーザが特定したバッファからのデータが、これらのページへとコピーされ、かつ不揮発性ストレージ630上のオブジェクト内のあて先ページについてのページ・マッピングを、適切なページをポイントするようにアップデートすることができる。ステップ4(2)では、pwriteI/Oリクエストが完了すると、ページ(複数でもよい)についてのページ・テーブルのエントリ内にビットが設定される。ステップ4(2)(1)では、エビクションの場合には、追加的な書き戻し操作(ステップ2(2)(4)(1))が実行される。ステップ5)では、1つ又はそれ以上の読み出し/書き込み操作を実行することができる。
【0081】
複数のアクセラレータ(例えば、マルチGPUコンピューティング環境についての分散ページを使用する図5CのGPU510のグループ)を使用してアクセラレータ間、及び不揮発性メモリ・ストレージへのダイレクト・アクセスを提供する場合において、ページ・キャッシュ(例えば、アプリケーション/ソフトウェアに管理されたページ・キャッシュ)を使用して、データにおける局在性を利用するために、以下の操作ステップが実行可能であることにつき、留意されるべきである。
【0082】
ステップ1では、GPU(例えば図5のGPU510)は、オブジェクトについてのページのサブレンジに割り当てられることができる。GPUは、これらのページについてのホームと呼ばれることができる。ステップ1(1)では、それぞれのGPUは、また、固有のIDが割り当てられる。
【0083】
ステップ2では、ホームGPU510は、GPU510がホームとして指定されているこれらのページのマッピングを維持/保存する。ステップ2(1)では、マッピング操作は、他のどのGPUsがページをキャッシュするのかをマップすることができる。ステップ2(2)(2)では、ページがGPUsのページ・キャッシュ内に配置されている場合、GPU ID及びメモリ・アドレスがGPUsのグループ内のその特定のGPUのページ・キャッシュ内に維持される可能性がある。ステップ2(3)では、代替的に、ページがGPUsのページ・キャッシュ内に配置されていない場合、ページは、不揮発性ストレージ520内に配置される。
【0084】
ステップ3では、GPUメモリ620のpreadAPI呼び出しがローカル・ページ・キャッシュ内でリクエストされたページを配置できない場合、GPUメモリ620は、これらのページのホームGPU(複数でもよい)にリクエストを発行する。ステップ3(1)では、ホームGPUは、ページがもう1つのGPUのページ・キャッシュに配置されているか否かをチェックすることができる。ステップ3(1)(1)では、ページがもう1つのGPUのページ・キャッシュ内に配置されている場合、GPUメモリ620は、GPU ID及びページ・キャッシュのアドレスで応答することができるので、リクエストしたGPUは、そのGPUのページ・キャッシュからページ(複数でもよい)をコピーすることができ、そうでない場合、ステップ3(1)(2)のように、ホームGPUは、リクエストしたGPUがそのページが不揮発性メモリ620内にあることを知らせ、かつそのマッピング・テーブルをアップデートすることを可能とすると共に、リクエストしたGPUは、ステップ3(2)(1)のように、I/Oリクエストを発行する。
【0085】
ステップ4では、GPUスレッド610がいくつかのページにpwriteを実行する場合、GPUスレッド610は、これらのページのホームGPU(複数でもよい)に対してリクエストを発行する。ステップ4(1)では、ホームGPUは、他のGPUsがそれらのページ・キャッシュ内で上書きされようとするページを有するか否かをチェックすることができる。ステップ4(1)(1)において、他のGPUsがそれらのページ・キャッシュにおいて上書きされようとするページを有する場合、ホームGPUは、それらの代替GPUのページ・キャッシュ内のそれらのページ全部を無効化すると共に、その所有するマッピングをアップデートすることができる。ステップ4(1)(2)では、他のGPUsがそれらのページ・キャッシュ内に上書きされようとするページを有していない場合、ホームGPUは、リクエストしたGPUに対してそのページが不揮発性メモリ620内にあることを知らせると共に、リクエストしたGPUがI/Oリクエストを終了した後にアップデートするようにして、マッピング・テーブルをアップデートする。ステップ4(1)(2)(1)では、リクエストしたGPUは、I/Oリクエストを発行することができる。
【0086】
ステップ5)では、それぞれのGPU上のスレッドは、他のGPUsからのリクエストを処理することを決定することができる。
【0087】
本明細書で説明するように(例えば図4~5B~5C)、プリフェッチ操作は、1つ又はそれ以上の操作を使用して実行することができることについて留意されるべきである。例えば、プリフェッチ操作を実行するために、以下の2つの操作を考察する。
【0088】
プリフェッチ操作1においては、データをプリフェッチし、かつそれをスレッド・ブロックの間で渡すための操作を以下のようにして実行することができる。ステップ1では、例えばGPU510といったGPUは、pread_prefetchAPI呼び出しを使用して、これらのブロックのpreadのために対応するI/Oリクエストを発行することについてのみ責任を有する1つ又はそれ以上のスレッド・ブロック(複数でもよい)(以下、I/Oブロックとして参照する。)を起動させることができる。
【0089】
ステップ2では、I/Oブロック内のスレッドは、NVMeリクエストを生成し、発行することができる。ステップ2(1)は、単一のGPUからの読み出し及び書き込みリクエストについての1(5)(2)(2)を実行することができるまで、ステップ1(5)(2)(1)のステップで実行されたのとすべて同一の動作である。ステップ2(2)では、スレッドは、完了をポーリングしない(例えば、非同期)。ステップ2(3)では、スレッドは、NVMeコマンドIDsへのI/Oリクエストのためのマッピングを生成する。このマッピングは後に、プリフェッチのために発行されたコマンドについての完了エントリを見出すため完了キューをポーリングする場合に、GPUスレッドによって使用される。
【0090】
ステップ3では、実際に計算するスレッド・ブロックが、スケジュールされ、かつGPUスレッドが、preadAPI呼び出しを発行する場合、ステップ3(1)のように、最初に、マッピングをチェックして、リクエストがすでに行われているか否かを見出すことができる。もし、リクエストが発行/行われていた場合、GPUスレッドは、ステップ3(2)のように、consume_prefetch_preadAPI呼び出しを使用して、そのNVMeコマンドIDについて、NVMe完了キュー626をポーリングし、そうでなければステップ3(3)のように、それは進行する(単一のGPUからの読み出し及び書き込みリクエストについてのステップ1(5)(2)(4)同様に実行することができる)。このやり方において、GPUストリーミング・マルチプロセッサ(“SMs”)の1つ又はそれ以上のサイクルは、I/Oを完了するために待機することに浪費されない。
【0091】
プリフェッチ操作2において、データをプリフェッチし、計算及びデータ移動をオーバーラップするための以下の操作は、以下のように実行することができる。ステップ1では、それぞれのGPUスレッド・ブロックは、複数のスレッド・ブロックについての計算を実行するために多重化することができる。
【0092】
ステップ2では、GPUスレッド・ブロックは、ブロックをパイプライン化することによって、それにマップされた複数のスレッド・ブロックを処理することができる。
【0093】
ステップ3では、GPUスレッド・ブロックは、pread_prefetchAPI呼び出しを使用して、1つのブロックについてのI/Oリクエストを開始することができる。
【0094】
ステップ4では、GPUスレッド・ブロックは、ブロックのバッファ内にデータがあるもう1つのスレッド・ブロックのための計算を実行することができる。
【0095】
ステップ5では、GPUスレッド・ブロックは、consume_prefetch_preadAPI呼び出しを使用して、第3のブロックについてブロックのバッファへと発行されたI/Oリクエストについてのデータを消費することができる。ステップ5(1)では、本明細書で説明したステップ3(2)(3)についてのI/Oリクエストは、ステップ3(2)(4)における、計算にオーバーラップさせることができる。
【0096】
ステップ6では、それぞれのGPUスレッド・ブロックは、全部のスレッド・ブロックが消費されるまで、マルチGPUコンピューティング環境についての分散ページ・キャッシュを使用するためのステップ3(2)(2)からステップ3(2)(5)までを実行することができる。
【0097】
ここで、図7A~7Cに転じると、GPUで使用するためのアプリケーション・プログラミング・インタフェース(“API”)を例示するテーブル700が図示されている。1つの側面においては、図1~6に記載された、デバイス、コンポーネント、モジュール、操作、又は機能、又はそれらの組み合わせのそれぞれが、図7A図7Cの1つ又はそれ以上のAPI呼び出しを使用することができる。
【0098】
“initialize()”API呼び出しは、GPUDirect/DirectGMAのセットアップ、NVMeキューのセットアップ、及びGPUメモリ内でのNVMeキュー及びGPUに渡されるべきNVMeNVMeキュー・ポインタの検索/取得及び状態をマップするために使用することができる。
【0099】
“get_object_map()”API呼び出しは、不揮発性ストレージ上のオブジェクト・マップを読み出すことができるので、GPUスレッドは、それぞれのオブジェクトが不揮発性ストレージ上の何処で開始するのかを知ることができる。戻されたマップは、呼び出されたすべてのGPUカーネルへと渡すことができる。
【0100】
“int_create(size_tn_bytes)”API呼び出しは、不揮発性ストレージ上に、サイズがバイト数“n_バイト”の、新たなオブジェクトを生成することができると共に、新たなオブジェクトを、オブジェクト・マップへと追加することができる。オブジェクトIDは返されることができる。
【0101】
“size_t pread(int obj_id,size_t offset_t n_bytes,char* buffer)”は、不揮発性ストレージ上でオブジェクトID“obj_id”を有するオブジェクト内の、特定された“offset”で開始するバイト数“n_バイト”を読み出すと共に、ユーザが提供したバッファ内に読み出されたデータを格納するAPI呼び出しとすることができる。すなわち、オブジェクトID(例えば、“obj_id”)は、オブジェクトについての固有の識別子とすることができる。不揮発性メモリ内に格納されたそれぞれのオブジェクトは、固有の識別子を有することができるので、それは、一般的なAPI様のpreadを使用する場合に、オブジェクトを特定するために使用することができる。オブジェクトID(例えば、“obj_id”)は、ファイル・デスクリプタ又はファイル・パスとすることができる。
【0102】
“int pread_prefetch(int obj_id, size_t offset,size_t n_bytes)”API呼び出しは、preadのためのIOリクエストを発行し、I/Oリクエストと、NVMeコマンドIDとの間のマッピングを設定する。
【0103】
“size_t consume_prefetch_pread(int ID,char* buffer,size_t n_bytes)”API呼び出しは、特定されたコマンドが完了され、かつ特定されたバッファ内の結果が消費されるまで待機させる。
【0104】
“sze_t pwrite(int obj_id, size_t offset, size_t n_bytes,char* buffer)”API呼び出しは、不揮発性ストレージ上でオブジェクトID“obj_id”を有するオブジェクト内のオフセットで開始してバイト数“n_バイト”を書き込むことができる。
【0105】
“flush()”API呼び出しは、すべてのNVMewriteコマンドが終了するまで、NVMeキュー内で待機する古いエントリをクリーンアップすることができる。
【0106】
ここで、図8を参照すると、コンピューティング環境内において、アクセラレータ(例えば、グラフィックス・プロセッシング・ユニット“GPUs”)と、不揮発性メモリ・ストレージとの間でダイレクト・アクセスを提供するための方法800が図示されている。1つの側面においては、図1~7で説明したデバイス、コンポーネント、モジュール、操作、又は機能又はこれらの組み合わせは、また、図8の1つ又はそれ以上の操作又は動作を適用し、又実行することができる。機能800は、機械上の命令として実行される方法として実装することができ、ここで、命令は、少なくとも1つのコンピュータ可読な媒体又は1つの非過渡的な機械可読な記録媒体上に含まれる。機能800は、ブロック802で開始することができる。
【0107】
1つ又はそれ以上のアクセラレータは、ブロック804でアプリケーション・プログラミング・インタフェース(“API”)を介して、制御パス、又はデータ・パス上でホスト中央プロセッシング・ユニット(“CPU”)とは独立して、データの読み出し操作及び書き込み操作を実行するため不揮発性ストレージへのダイレクト・アクセスを提供することができる。機能800は、ブロック806のように終了することができる。
【0108】
1つの側面においては、図8の少なくとも1つのブロックとの組み合わせ、又はその一部分、又はそれらの両方において、操作800は、以下のそれぞれの1つ又はそれ以上を含むことができる。操作800は、1つ又はそれ以上のアクセラレータのメモリ・アドレス空間内で、1つ又はそれ以上の不揮発性メモリ・エキスプレス(“NVMe”)キュー及びレジスタをマップすることができる。800の操作は、データにおける局在性を利用するために、1つ又はそれ以上のメモリ内の1つ又はそれ以上のアクセラレータにより管理されるページ・キャッシュを使用することができるか、又はデータの局在性を利用するために、複数のアクセラレータのメモリ内で、1つ又はそれ以上のアクセラレータにより管理される分散ページ・キャッシュを使用することができるか、又はこれらの両方を使用することができる。
【0109】
800の操作は、不揮発性ストレージから1つ又はそれ以上のページをページ・キャッシュにコピーすることができると共に、ページ・マッピング・テーブルをアップデートすることができる。800の操作は、不揮発性ストレージから1つ又はそれ以上のアクセラレータへとデータをコピーする際に、制御パス又はデータ・パス上からホストCPUを除外することができる。800の操作は、APIを使用してデータをプリフェッチし、計算及びデータ移動がオーバーラップするようにして、計算サイクルを節約することができる。800の操作は、1つ又はそれ以上のアクセラレータにより開始された読み出し操作又は書き込み操作についての1つ又はそれ以上のAPI呼び出しを受領すると、ページキャッシュ・ミスの発生を判断し、1つ又はそれ以上の不揮発性メモリ・エキスプレス(“NVMe”)データ・バッファから、ページ・キャッシュへと、1つ又はそれ以上のページをコピーすること、又はページ・マッピングをアップデートすること、又はこれらの組み合わせを行うことができる。
【0110】
800の操作は、アプリケーションが開始されると、不揮発性ストレージ内のそれぞれのオブジェクトについてオブジェクト・アドレスを受領することができる。それぞれのオブジェクトの識別子(“ID”)のマップ、オブジェクト開始アドレス、オブジェクト・サイズは、ホストCPUにより管理することができ、かつ不揮発性ストレージの予約セクションにおいて持続的に保持されることができる。800の操作は、1つ又はそれ以上のAPIを使用して、それぞれのオブジェクトについてのページのサブレンジを、1つ又はそれ以上のアクセラレータへと割り当てることができる。
【0111】
本発明は、システム、方法、コンピュータ・プログラム製品及びこれらの組み合わせとすることができる。コンピュータ・プログラム製品は、それ上にプロセッサが本発明の特徴を遂行するためのコンピュータ可読なプログラム命令を有するコンピュータ可読な記録媒体(又は複数)を含むことができる。
【0112】
コンピュータ可読な記録媒体は、命令実行デバイスが使用するための複数の命令を保持し格納することができる有形のデバイスとすることができる。コンピュータ可読な媒体は、例えば、これらに限定されないが、電気的記録デバイス、磁気的記録デバイス、光学的記録デバイス、電気磁気的記録デバイス、半導体記録デバイス又はこれらのいかなる好ましい組み合わせとすることができる。コンピュータ可読な記録媒体のより具体的な実施例は、次のポータブル・コンピュータ・ディスク、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリー・メモリ(ROM)、消去可能なプログラマブル・リード・オンリー・メモリ(EPROM又はフラッシュ・メモリ(登録商標))、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・イオンリー・メモリ(CD-ROM)、デジタル多目的ディスク(DVD)、メモリ・スティック、フロッピー・ディスク(登録商標)、パンチ・カード又は命令を記録した溝内に突出する構造を有する機械的にエンコードされたデバイス、及びこれらの好ましい如何なる組合せを含む。本明細書で使用するように、コンピュータ可読な記録媒体は、ラジオ波又は他の自由に伝搬する電磁波、導波路又は他の通信媒体(例えば、光ファイバ・ケーブルを通過する光パルス)といった電磁波、又はワイヤを通して通信される電気信号といったそれ自体が一時的な信号として解釈されることはない。
【0113】
本明細書において説明されるコンピュータ可読なプログラムは、コンピュータ可読な記録媒体からそれぞれのコンピューティング/プロセッシング・デバイスにダウンロードでき、又は例えばインターネット、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)又はワイヤレス・ネットワーク及びそれからの組み合わせといったネットワークを介して外部コンピュータ又は外部記録デバイスにダウンロードすることができる。ネットワークは、銅通信ケーブル、光通信ファイバ、ワイヤレス通信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ及びエッジ・サーバ又はこれらの組み合わせを含むことができる。それぞれのコンピューティング/プロセッシング・デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読なプログラム命令を受領し、このコンピュータ可読なプログラム命令を格納するためにそれぞれのコンピューティング/プロセッシング・デバイス内のコンピュータ可読な記録媒体内に転送する。
【0114】
本発明の操作を遂行するためのコンピュータ可読なプログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械語命令、マシン依存命令、マイクロ・コード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は1つ又はそれ以上の、Smalltalk(登録商標)、C++などのオブジェクト指向プログラミング言語、“C”プログラミング言語又は類似のプログラム言語といった従来の手続き型プログラミング言語を含むプログラミング言語のいかなる組合せにおいて記述されたソース・コード又はオブジェクト・コードのいずれかとすることができる。コンピュータ可読なプログラム命令は、全体がユーザ・コンピュータ上で、部分的にユーザ・コンピュータ上でスタンドアローン・ソフトウェア・パッケージとして、部分的にユーザ・コンピュータ上で、かつ部分的にリモート・コンピュータ上で、又は全体がリモート・コンピュータ又はサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)、ワイド・エリア・ネットワーク(WAN)を含むいかなるタイプのネットワークを通してユーザ・コンピュータに接続することができ、又は接続は、外部コンピュータ(例えばインターネット・サービス・プロバイダを通じて)へと行うことができる。いくつかの実施形態では、例えばプログラマブル論理回路、フィールド・プログラマブル・ゲートアレイ(FPGA)、又はプログラマブル論理アレイ(PLA)を含む電気回路がコンピュータ可読なプログラム命令を、コンピュータ可読なプログラム命令の状態情報を使用して、本発明の特徴を実行するために電気回路をパーソナライズして実行することができる。
【0115】
本明細書で説明した本発明の側面を、本発明の実施形態にしたがい、フローチャート命令及び方法のブロック図、又はそれらの両方、装置(システム)、及びコンピュータ・プログラム製品を参照して説明した。フローチャートの図示及びブロック図又はそれら両方及びフローチャートの図示におけるブロック、又はブロック図、又はそれらの両方のいかなる組合せでもコンピュータ可読なプログラム命令により実装することができることを理解されたい。
【0116】
コンピュータ可読なプログラム命令は、コンピュータのプロセッサ又は機械を生成するための汎用目的、特定目的のコンピュータ、又は他のプログラマブル・データ・プロセッシング装置に提供することができ、コンピュータのプロセッサ又は他のプログラマブル・データ・プロセッシング装置による実行がフローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装するための手段を生成する。コンピュータ、プログラマブル・データ・プロセッシング装置及び他の装置又はこれらの組み合わせが特定の仕方で機能するように指令するこれらのコンピュータ可読なプログラム命令は、またコンピュータ可読な記録媒体に格納することができ、その内に命令を格納したコンピュータ可読な記録媒体は、フローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作の側面を実装する命令を含む製造品を構成する。
【0117】
コンピュータ可読なプログラム命令は、またコンピュータ、他のプログラマブル・データ・プロセッシング装置、又は他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、又は他のデバイス上で操作ステップのシリーズに対してコンピュータ実装プロセスを生じさせることで、コンピュータ、他のプログラマブル装置又は他のデバイス上でフローチャート及びブロック図のブロック又は複数のブロック又はこれらの組み合わせで特定される機能/動作を実装させる。
【0118】
図のフローチャート及びブロック図は、本発明の種々の実施形態にしたがったシステム、方法及びコンピュータ・プログラム製品のアーキテクチャ、機能、及び可能な実装操作を示す。この観点において、フローチャート又はブロック図は、モジュール、セグメント又は命令の部分を表すことかでき、これらは、特定の論理的機能(又は複数の機能)を実装するための1つ又はそれ以上の実行可能な命令を含む。いくつかの代替的な実装においては、ブロックにおいて記述された機能は、図示した以外で実行することができる。例えば、連続して示された2つのブロックは、含まれる機能に応じて、実際上1つのステップとして遂行され、同時的、実質的に同時的に、部分的又は完全に一時的に重ね合わされた仕方で実行することができ、又は複数のブロックは、時として逆の順番で実行することができる。またブロック図及びフローチャートの図示、又はこれらの両方及びブロック図中のブロック及びフローチャートの図示又はこれらの組み合わせは、特定の機能又は動作を実行するか又は特定の目的のハードウェア及びコンピュータ命令を遂行する特定目的のハードウェアに基づいたシステムにより実装することができることを指摘する。
図1
図2
図3
図4
図5A
図5B
図5C
図6
図7A
図7B
図7C
図8