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

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

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特許7437400読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減
<>
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図1
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図2
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図3
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図4A
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図4B
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図5
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図6
  • 特許-読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-14
(45)【発行日】2024-02-22
(54)【発明の名称】読取要求及び読取完了通知のキューイング及びバッチ処理によるI/OあたりのCPUオーバーヘッドの低減
(51)【国際特許分類】
   G06F 16/16 20190101AFI20240215BHJP
   G06F 13/10 20060101ALI20240215BHJP
   G06F 3/06 20060101ALI20240215BHJP
【FI】
G06F16/16
G06F13/10 330A
G06F3/06 301F
G06F3/06 301K
【請求項の数】 13
(21)【出願番号】P 2021531897
(86)(22)【出願日】2020-01-04
(65)【公表番号】
(43)【公表日】2022-03-10
(86)【国際出願番号】 US2020012284
(87)【国際公開番号】W WO2020150019
(87)【国際公開日】2020-07-23
【審査請求日】2022-11-24
(31)【優先権主張番号】16/251,024
(32)【優先日】2019-01-17
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(74)【代理人】
【識別番号】100108213
【弁理士】
【氏名又は名称】阿部 豊隆
(74)【代理人】
【識別番号】100162950
【弁理士】
【氏名又は名称】久下 範子
(72)【発明者】
【氏名】ファン,シン
(72)【発明者】
【氏名】ニイツコウスキー,バルトシュ トマシュ
(72)【発明者】
【氏名】スターリング,マイケル スティーブン
(72)【発明者】
【氏名】マクナルティ,マーク ジェームズ
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】国際公開第2016/209737(WO,A1)
【文献】特開2017-228172(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/10-16/188
G06F 13/00-13/14
G06F 3/06- 3/08
(57)【特許請求の範囲】
【請求項1】
アプリケーションから受信されたファイルを読み取るという要求のバッチを第1のキューに格納することであって、前記要求が、前記ファイルに対するファイルオフセットを含む、格納することと、
前記ファイルに対する前記ファイルオフセットを含む要求前記バッチをディスクオフセットを含む要求のバッチに変換することであって、当該変換することは、
前記アプリケーションによって指定された第1の条件を満たすことであって、前記第1の条件がタイマーの終了を含む、こと、
前記アプリケーションによって指定された第2の条件を満たすことであって、前記第2の条件が、事前に定義された数の前記要求が前記第1のキューに入っていることを含む、こと、または、
前記アプリケーションによって指定された第3の条件を満たすことであって、前記第3の条件が、事前に定義された量のデータに対する要求が前記第1のキューに入っていることを含む、こと
の少なくとも1つに応答して実行される、ことと、
前記ディスクオフセットを含む求の前記バッチを第2のキューに格納することであって、前記第2のキューが、ストレージサブシステムがアクセス可能なものであり、前記ストレージサブシステムが、前記第2のキューから前記ディスクオフセットを含む要求の前記バッチを取得し、前記ディスクオフセットを使用して前記ファイルに対する読取動作を実行するように構成される、格納することと
を含む、コンピュータ実装方法。
【請求項2】
前記ストレージサブシステムが、前記読取動作に対する完了通知を第3のキューに格納するようにさらに構成され、前記方法
前記第3のキューの前記完了通知のバッチをファイル完了に変換することと、
前記アプリケーションがアクセス可能な第4のキューに前記ファイル完了を格納することと
をさらに含む、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記ファイルに対する前記ファイルオフセットをディスクオフセットに変換すること、前記アプリケーションからの要求を受信することに応答して実行される、請求項1に記載のコンピュータ実装方法。
【請求項4】
前記第3のキューの前記完了通知のバッチをファイル完了に変換することは、タイマーの前記終了に応答して実行される、請求項2に記載のコンピュータ実装方法。
【請求項5】
ファイルを読み取るという要求のバッチを第1のキューに格納することであって、前記要求が、前記ファイルに対するファイルオフセットを含み、ゲストオペレーティングシステム(OS)において実行しているアプリケーションから受信される、格納することと、
前記ファイルに対する前記ファイルオフセットを仮想ディスクオフセットに変換し、前記仮想ディスクオフセットを含む変換済みの要求のバッチをホストOSがアクセス可能な第2のキューに格納することであって、当該変換することは、
前記アプリケーションによって指定された第1の条件を満たすことであって、前記第1の条件がタイマーの終了を含む、こと、
前記アプリケーションによって指定された第2の条件を満たすことであって、前記第2の条件が、事前に定義された数の前記要求が前記第1のキューに入っていることを含む、こと、または、
前記アプリケーションによって指定された第3の条件を満たすことであって、前記第3の条件が、事前に定義された量のデータに対する要求が前記第1のキューに入っていることを含む、こと
の少なくとも1つに応答して実行される、ことと、
前記ファイルに対する前記仮想ディスクオフセットを物理ディスクオフセットに変換し、前記物理ディスクオフセットを含む変換済みの要求のバッチを第3のキューに格納することであって、前記第3のキューが、ストレージサブシステムがアクセス可能なものであり、前記ストレージサブシステムが、前記第3のキューから前記物理ディスクオフセットを含む前記変換済みの要求のバッチを取得し、前記物理ディスクオフセットを使用して前記ファイルに対する読取動作を実行するように構成される、格納することと
を含む、コンピュータ実装方法。
【請求項6】
前記ストレージサブシステムが、前記読取動作に対する完了通知を第4のキューに格納するようにさらに構成され、前記方法
前記第4のキューの前記完了通知を仮想ディスクオフセットを含む完了通知に変換し、前記仮想ディスクオフセットを含む前記完了通知を前記ゲストOSがアクセス可能な第5のキューに格納することと、
前記第5のキューの前記完了通知のバッチをファイル完了に変換し、前記ゲストOSにおいて実行している前記アプリケーションがアクセス可能な第6のキューに前記ファイル完了を格納することと
をさらに含む、請求項5に記載のコンピュータ実装方法。
【請求項7】
前記ファイルに対する前記ファイルオフセットをディスクオフセットに変換すること、前記アプリケーションからの要求を受信することに応答して実行される、請求項に記載のコンピュータ実装方法。
【請求項8】
前記第4のキューの前記完了通知のバッチを、仮想ディスクオフセットを含む完了通知に変換することは、タイマーの前記終了に応答して実行される、請求項6に記載のコンピュータ実装方法。
【請求項9】
アプリケーションプログラミングインタフェース(API)をアプリケーションに公開することであって、前記APIが、第1の関数および第2の関数を含む、公開することと、
前記アプリケーションから前記第2の関数の呼び出しを受信することに応答して、第1のキューを作成することと、
前記アプリケーションから前記第1の関数の呼び出しを受信することであって、前記呼び出しが、ファイルを読み取るという複数の要求を含み、前記複数の要求が、前記ファイルに対するファイルオフセットを含む、受信することと、
前記APIの前記第1の関数の前記呼び出しを受信することに応答して、
前記複数の要求を前記第1のキューに格納することと、
前記ファイルに対する前記ファイルオフセットをディスクオフセットに変換することと、
前記ディスクオフセットを含む変換済みの要求のバッチを第2のキューに格納することであって、前記第2のキューが、ストレージサブシステムがアクセス可能なものであり、前記ストレージサブシステムが、前記第2のキューから前記変換済みの要求のバッチを取得し、前記ディスクオフセットを使用して前記ファイルに対する読取動作を実行するように構成される、格納することと
を含む、コンピュータ実装方法。
【請求項10】
前記APIが、第3の関数を含み、前記方法、前記アプリケーションから前記第3の関数の呼び出しを受信することに応答して、前記第1のキューを閉じることをさらに含む、請求項9に記載のコンピュータ実装方法。
【請求項11】
前記APIが、第4の関数を含み、前記方法、前記アプリケーションから前記第4の関数の呼び出しを受信することに応答して、前記ファイルを開くことをさらに含む、請求項9に記載のコンピュータ実装方法。
【請求項12】
前記APIが、第5の関数を含み、前記読取動作に対する完了通知、第3のキューに格納され、前記方法、前記アプリケーションからの前記第5の関数の呼び出しに応答して、前記アプリケーションに前記完了通知を提供することをさらに含む、請求項9に記載のコンピュータ実装方法。
【請求項13】
前記APIが、第6の関数を含み、前記ファイルに対する前記ファイルオフセットをディスクオフセットに変換すること、および前記第2のキューに前記変換済みの前記要求のバッチを格納することは、前記アプリケーションからの前記第6の関数の呼び出しに応答して実行される、請求項9に記載のコンピュータ実装方法。
【発明の詳細な説明】
【背景技術】
【0001】
背景
[0001] モダンストレージインタフェース及びプロトコルは、特に、ソリッドステートドライブ(「SSD」)などの不揮発性メモリデバイスで使用される際、1秒あたりに膨大な数の入出力(「I/O」)操作(「IOPS」)の実行が可能である。しかし、多くの実装形態では、これらのインタフェース及びプロトコルは、本来ははるかに低速なインタフェース、プロトコル及びディスクベースの大容量記憶装置での使用のために設計されたレガシストレージスタックによって利用される。
【発明の概要】
【発明が解決しようとする課題】
【0002】
[0002] レガシストレージスタックは、よりモダンなストレージインタフェース及びプロトコルと相互運用することができるが、この組合せは、通常、中央処理装置(「CPU」)オーバーヘッドという代償を伴う。特に、モダンストレージインタフェース及びプロトコルの能力の完全な実現には、I/O操作あたり多数のCPUサイクルが必要とされる。
【0003】
[0003] また、レガシストレージスタックは、典型的には、基盤となる記憶装置にアクセスするためのプログラマフレンドリなファイルベースのインタフェースを提供する。しかし、これもまた、場合により、かなりのCPU使用率という代償を伴う。CPU使用率が低くIOPSが高い場合に、ユーザモードアプリケーションは利用可能な記憶装置へのほぼ直接的なアクセスを得ることは可能である。しかし、この場合、もはやファイルシステムにアクセスすることはできず、ブロックレベルで記憶装置にアクセスしなければならないため、アプリケーションをかなり複雑にしかねない。
【0004】
[0004] 本明細書で行われる開示は、これらの及び他の技術的課題に関する。
【課題を解決するための手段】
【0005】
概要
[0005] 本明細書では、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するための技術が開示される。開示される技術の実装形態を通じて、ユーザモードアプリケーションがストレージにアクセスするためにファイルベースのインタフェースを利用する際でさえ、CPU使用率を低減すると同時に、モダンストレージインタフェース及びプロトコルによって提供される数多くのIOPSの可能性を実現することができる。本明細書で具体的には言及されていない他の技術的利点もまた、開示される対象物の実装形態を通じて実現することができる。
【0006】
[0006] 上記で簡潔に言及される技術的利点及び潜在的には他の利点を実現するため、ストレージスタックは、ユーザモードアプリケーションによる使用のためのアプリケーションプログラミングインタフェース(「API」)を公開する。APIによって公開される関数の使用を通じて、ユーザモードアプリケーションは、ファイルベースのインタフェースを使用して、読取要求をストレージスタックに提出することができる。これを受けて、ストレージスタックは、モダンストレージインタフェース及びプロトコルを使用して、読取要求を実行し、それにより、I/O操作あたり利用されるCPUサイクルの数を低減することができる。
【0007】
[0007] 一実施形態では、本明細書で開示されるAPIは、ユーザモードアプリケーションによって生成された読取要求を格納するためのキュー(本明細書では、ファイル提出キュー(「FSQ」)と呼ばれる)を作成するための関数を公開する。また、APIは、呼び出された際に読み取りのために指定ファイルを開く関数も公開する。
【0008】
[0008] ユーザモードアプリケーションがAPIを利用してFSQを作成し、ファイルを開くと、ユーザモードアプリケーションは、ファイルから読み取るという要求(「読取要求」)をFSQにエンキューするために、APIによって公開される別の関数を呼び出すことができる。読取要求は、ファイル、読み取りが起こるファイル内のオフセット及び読み取るデータの量を識別する。読取要求は、これらに限定されないが、読取要求に対する優先度を指定するデータ又は要求グループをキャンセルするために利用することができるタグなどの他の情報を含み得る。
【0009】
[0009] いくつかの実施形態では、読取要求を提出するアプリケーションは、1つ又は複数の条件を指定することができ、この条件が満たされると、以下で説明される方法で、FSQの読取要求のバッチがデキューされ、処理される。例えば、制限されることなく、アプリケーションは、指定数の読取要求がFSQに入っている際又は指定量のデータを読み取るという要求がFSQに入っている際、タイマーの終了に応答してFSQの読取要求をデキューして処理するように指定することができる。また、APIは、アプリケーションによって呼び出された際に、以下で説明される方法で、FSQの読取要求を即時にデキューし、処理する関数を公開することもできる。
【0010】
[0010] 上記で簡潔に言及されるように、FSQに格納された読取要求は、バッチでデキューされる。次いで、FSQからデキューされた読取要求のバッチのファイルオフセットは、ディスクオフセットに変換される。次いで、変換済みの読取要求のバッチは、別のキュー(本明細書では、ストレージ提出キュー(「SSQ」)と呼ばれる)に格納される。ストレージサブシステムは、SSQから変換済みの読取要求のバッチを取得し、指定されたディスクオフセットを使用してファイルに対する読取要求を実行することができる。
【0011】
[0011] また、ストレージサブシステムは、読取要求に対する完了通知(本明細書では、「完了」と呼ぶこともできる)をキュー(本明細書では、ストレージ完了キュー(「SCQ」)と呼ばれる)に格納することもできる。完了通知のバッチは、SCQからデキューされ、読取要求において指定されたファイルオフセットに相当するファイル完了に変換される。変換済みのファイル完了のバッチは、別のキュー(本明細書では、ファイル完了キュー(「FCQ」)と呼ばれる)に格納される。
【0012】
[0012] また、開示されるAPIは、読取要求を提出したユーザモードアプリケーションがそれを通じてFCQから完了通知をデキューすることができる関数も公開する。ユーザモードアプリケーションがファイルからの読み取りを完了した時点で、アプリケーションは、APIによって公開される、ファイルを閉じるため及びFSQを閉じるための関数を呼び出すことができる。
【0013】
[0013] また、本明細書で開示される技術は、ユーザモードアプリケーションが仮想化される環境において利用することもできる。これらの実施形態では、読取要求のバッチは、ファイルオフセットから仮想ディスクオフセットに変換され、キュー(本明細書では、ディスク提出キュー(「DSQ」)と呼ばれる)に格納される。次いで、DSQに格納された読取要求のバッチは、物理ディスクオフセットに変換され、変換済みの要求は、SSQに格納され、ストレージサブシステムによって処理される。完了通知に対しては、同様だが逆の変換を実行することができる。
【0014】
[0014] 上記で簡潔に論じられるように、本明細書で開示される技術の実装形態は、ユーザモードアプリケーションによってストレージサブシステムとのファイルベースのインタフェースに対して行われる読取要求に対するI/OあたりのCPU使用率を低減することができる。本明細書で具体的には特定されていない他の技術的利点もまた、開示される技術の実装形態を通じて実現することができる。
【0015】
[0015] 上記で説明される対象物は、コンピュータ制御装置、コンピュータ実装方法、コンピューティングデバイス、又は、コンピュータ可読媒体などの製造品として実装できることを認識すべきである。これらの及び様々な他の特徴は、以下の詳細な説明を読み進めることで及び関連図面を再検討することで明らかになるであろう。
【0016】
[0016] この概要は、開示される技術のいくつかの態様の簡単な説明を簡素化した形式で紹介するために提供され、開示される技術のいくつかの態様については、以下の詳細な説明でさらに説明する。この概要は、特許請求される対象物の主要な特徴又は必須の特徴を特定することも、特許請求される対象物の範囲を制限するためにこの概要を使用することも意図しない。その上、特許請求される対象物は、この開示のいずれかの部分に記述される不利な点のいずれか又はすべてを解決する実装形態に限定されない。
【図面の簡単な説明】
【0017】
図面の簡単な説明
図1】[0017]読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するように構成された例証的なストレージスタックの態様を示すコンピューティングアーキテクチャ図である。
図2】[0018]図1に示されるストレージスタックによって提供される機能にアクセスするための本明細書で開示されるAPIの態様を示すソフトウェアアーキテクチャ図である。
図3】[0019]本明細書で開示される一実施形態による、図1及び2にそれぞれ示されるストレージスタック及びAPIの動作の態様を示すルーティンを示すフロー図である。
図4A】[0020]仮想化されたコンピューティング環境における、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するように構成された例証的なストレージスタックの態様を示すコンピューティングアーキテクチャ図である。
図4B】[0020]仮想化されたコンピューティング環境における、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するように構成された例証的なストレージスタックの態様を示すコンピューティングアーキテクチャ図である。
図5】[0021]本明細書で開示される一実施形態による、仮想化されたコンピューティング環境における、図4A及び4Bに示されるストレージスタックの動作の態様を示すルーティンを示すフロー図である。
図6】[0022]本明細書で提示される技術の態様を実装することができるコンピューティングデバイス用の例証的なコンピュータハードウェア及びソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図である。
図7】[0023]開示される技術の態様を実装することができる分散型コンピューティング環境を示すネットワーク図である。
【発明を実施するための形態】
【0018】
詳細な説明
[0024] 以下の詳細な説明は、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/O操作あたりのCPUオーバーヘッドを低減するための技術を対象とする。上記で簡潔に論じられるように、開示される技術の実装形態は、ユーザモードアプリケーションがストレージにアクセスするためにファイルベースのインタフェースを利用する際でさえ、I/O操作あたりのCPU使用率を低減することができる。本明細書で具体的には言及されていない他の技術的利点もまた、開示される対象物の実装形態を通じて実現することができる。
【0019】
[0025] 以下の詳細な説明では、添付の図面を参照し、添付の図面は、本明細書の一部を形成し、例証特有の構成又は例として示される。ここで図面を参照するが、図面では、いくつかの図全体を通じて、同様の番号は同様の要素を表し、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/O操作あたりのCPUオーバーヘッドを低減するための技術の態様について説明する。
【0020】
[0026] 図1は、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するように構成された例証的なストレージスタック102の態様を示すコンピューティングアーキテクチャ図である。上記で簡潔に説明されるように、ストレージスタック102は、アプリケーション104などのユーザモードアプリケーションによる使用のためのAPI 200(図2に示される)を公開する。API 200によって公開される関数202(これも図2に示される)の使用を通じて、ユーザモードアプリケーション104は、ファイルベースのインタフェースを使用して、読取要求106をストレージスタック102に提出することができる。これを受けて、ストレージスタック102は、不揮発性メモリエクスプレス(「NVMe」)対応のストレージサブシステム116などのモダンストレージインタフェース及びプロトコルを使用して、読取要求を実行し、それにより、I/O操作あたり利用されるCPUサイクルの数を低減することができる。
【0021】
[0027] 一実施形態では、API 200は、ユーザモードアプリケーション104によって生成されたファイル108を読み取るという要求106を格納するためのキュー(本明細書では、ファイル提出キュー(「FSQ」)110と呼ばれる)を作成するための関数202Aを公開する。また、API 200は、呼び出された際に読み取りのために指定ファイル108を開く関数202Bも公開することができる。
【0022】
[0028] いくつかの実施形態では、ファイルエクステントは、ファイル108を格納するストレージサブシステム116から得られ、ファイル108のロード時にキャッシュ126に格納される。ファイルエクステントは、記憶装置の物理的な場所を表す一連のブロック番号を特定のファイル108にマッピングする。以下でさらに詳細に説明されるように、ファイルエクステントキャッシュ126に格納されたファイルエクステントは、FSQ 110に格納された読取要求106のファイルオフセットをディスクオフセットに変換するために利用することができる。
【0023】
[0029] ユーザモードアプリケーション104がAPI 200を利用してFSQ 110を作成し、ファイル108を開くと、ユーザモードアプリケーション104は、ファイル108から読み取るという要求106(本明細書では、「読取要求」と呼ぶことができる)をFSQ 110にエンキューするために、API 200によって公開される別の関数202Cを呼び出すことができる。読取要求106は、ファイル108、指定された読取動作が起こるファイル108内のファイルオフセット及び読み取るデータの量を識別する。読取要求106は、これらに限定されないが、読取要求106に対する優先度を指定するデータ又は読取要求106のグループをキャンセルするために利用することができるタグなどの他の情報を含み得る。
【0024】
[0030] いくつかの実施形態では、読取要求106をFSQ 110に提出するアプリケーション104は、1つ又は複数の条件128を指定することができ、この条件128が満たされると、以下で説明される方法で、FSQ 110の読取要求のバッチがデキューされ、処理される。例えば、制限されることなく、アプリケーション104は、指定数の読取要求106がFSQ 110に入っている際又は指定量のデータを読み取るという要求106がFSQ 110に入っている際、タイマーの終了に応答してFSQ 110の読取要求106をデキューして処理するように指定することができる。また、API 200は、アプリケーション104によって呼び出された際に、以下で説明される方法で、FSQ 110の読取要求106を即時にデキューし、処理する関数を公開することもできる。
【0025】
[0031] 上記で簡潔に言及されるように、ワーカスレッド112Aは、FSQ 110に格納された読取要求106をバッチ106Aでデキューする。次いで、ワーカスレッド112Aは、ファイルエクステントキャッシュ126に格納されたファイルエクステントを使用して、読取要求のバッチ106Aのファイルオフセットをディスクオフセットに変換する。次いで、ワーカスレッド112Aは、ディスクオフセットを含む変換済みの読取要求のバッチ106Bを別のキュー(本明細書では、ストレージ提出キュー(「SSQ」)と呼ばれる)に格納する。ストレージサブシステム116は、SSQ 114から変換済みの読取要求のバッチ106Bを取得し、指定されたディスクオフセットを使用してファイル108に対する読取要求(すなわち、読取要求106)を実行することができる。
【0026】
[0032] また、ストレージサブシステム116は、処理済みの読取要求のバッチ106Bに対する完了通知118(本明細書では、「ストレージ完了118」又は「ブロック完了118」と呼ぶこともできる)をキュー122(本明細書では、ストレージ完了キュー(「SCQ」)122と呼ばれる)に格納することもできる。ストレージ完了118は、対応する読取要求106が完了したブロックを指定する。
【0027】
[0033] ストレージサブシステム116は、読取要求106Bを完了し、且つ、対応する完了通知118をSCQ 122に格納する際、割り込み120を生成することができる。SCQ 122の完了通知118は、以下で説明される方法で、割り込み120に応答して処理することができる。
【0028】
[0034] いくつかの実施形態では、完了通知118は、ストレージサブシステム116が割り込み120を生成する度に処理される。しかし、他の実施形態では、SCQ 122のコンテンツは、タイマーが経過するまで処理されない。この方法では、完了通知118は、SCQ 122における処理のためにバッチ処理され、割り込みごとに処理されていた場合より少ない頻度で処理される。
【0029】
[0035] ワーカスレッド112Bは、SCQ 122から完了通知のバッチ118Aをデキューし、ファイルエクステントキャッシュ126のコンテンツを使用して完了通知のブロック番号をファイルオフセットに変換する。次いで、ファイルオフセットを含む完了通知118B(本明細書では、「ファイル完了118B」と呼ぶことができる)は、別のキュー(本明細書では、ファイル完了キュー(「FCQ」)124と呼ばれる)に格納される。
【0030】
[0036] また、API 200は、もともと読取要求106を提出したユーザモードアプリケーション104がそれを通じてFCQ 124からファイル完了118Bのバッチをデキューすることができる関数202Eも公開する。ユーザモードアプリケーション104がファイル108からの読み取りを完了した時点で、アプリケーションは、API 200によって公開される、ファイル108を閉じるための関数202F及びFSQ 110を閉じるための別の関数202Gを呼び出すことができる。上記で説明されるストレージスタック102の動作に関する追加の詳細は、図3に関して以下で提示する。
【0031】
[0037] 図3は、本明細書で開示される一実施形態による、図1及び2にそれぞれ示されるストレージスタック102及びAPI 200の動作の態様を示すルーティン300を示すフロー図である。図3及び他の図に関する本明細書で説明される論理演算は、(1)コンピューティングデバイス上で起動している一続きのコンピュータ実施行為若しくはプログラムモジュールとして及び/又は(2)コンピューティングデバイス内の相互接続された機械論理回路若しくは回路モジュールとして実施できることを認識すべきである。
【0032】
[0038] 本明細書で開示される技術の特定の実装形態は、コンピューティングデバイスの性能及び他の要件に応じて選択できる問題である。それに従って、本明細書で説明される論理演算は、状態、動作、構造デバイス、行為又はモジュールと様々に呼ばれる。これらの状態、動作、構造デバイス、行為及びモジュールは、ハードウェア、ソフトウェア、ファームウェア、特殊用途デジタル論理及びそれらの任意の組合せにおいて実装することができる。図に示される及び本明細書で説明されるより多い又は少ない動作を実行できることを認識すべきである。また、これらの動作は、本明細書で説明されるものとは異なる順番で実行することができる。
【0033】
[0039] ルーティン300は、動作302から始まり、動作302では、アプリケーション104は、FSQ 110に読取要求106を入れる。次いで、ルーティン300は、動作300から動作304に進み、動作304では、FSQ 100を処理するためにアプリケーション104によって指定された条件128が満たされているかどうかに関する判断が行われる。上記で論じられるように、アプリケーション104は、指定数の読取要求106がFSQ 110に入っている際又は指定量のデータを読み取るという要求106がFSQ 110に入っている際、タイマーの終了に応答してFSQ110の読取要求106をデキューして処理するように指定することができる。また、アプリケーション104は、ワーカスレッド112Aによってキューされた要求106の即時の処理を開始するための関数202Dを呼び出すこともできる。
【0034】
[0040] アプリケーション104によって指定された条件128が満たされている場合(又はアプリケーションが関数202Dを呼び出した場合)は、ルーティン300は、動作304から動作306に進む。動作306では、ワーカスレッド112Aは、読取要求のバッチ106Aをデキューし、その中に含まれるファイルオフセットをディスクオフセットに変換し、変換済みの読取要求のバッチ106BをSSQ 114に格納する。次いで、ルーティン300は、動作306から動作308に進む。
【0035】
[0041] 動作308では、ストレージサブシステム116は、SSQ 114から変換済みの読取要求のバッチ106Aをデキューし、指定されたブロック読取動作を実行し、対応するブロック完了118をSCQ 122に格納する。次いで、ルーティン300は、動作310に進み、動作310では、ワーカスレッド112Bは、SCQ 122からブロック完了のバッチ118をデキューし、ブロック完了118をファイル完了118Bに変換し、ファイル完了118BをFCQ 124に格納する。
【0036】
[0042] 動作310から、ルーティン300は、動作312に進み、動作312では、アプリケーション104は、FCQ 124からファイル完了のバッチをデキューする。次いで、ルーティン300は、動作312から動作314に進み、そこで終了する。
【0037】
[0043] 図4A及び4Bは、仮想化されたコンピューティング環境における、読取要求106及び読取完了通知118Cのキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するように構成された例証的なストレージスタック200の態様を示すコンピューティングアーキテクチャ図である。上記で簡潔に論じられるように、本明細書で開示される技術は、ユーザモードアプリケーション104の実行が仮想化される環境において利用することもできる。図4A及び4Bに示される構成の例では、例えば、アプリケーション104は、ゲストオペレーティングシステム(「OS」)400Aにおいて実行し、ゲストオペレーティングシステム(「OS」)400Aは、ホストOS 400B(図4Bに示される)によって提供される仮想化された実行環境において実行する。
【0038】
[0044] 図4A及び4Bに示されるものなどの仮想化された環境では、ゲストOS 400A上で実行しているユーザモードアプリケーション104は、上記で説明される方法で、読取要求106をFSQ 110に提出する。ワーカスレッド112Cは、読取要求のバッチ106Aをデキューし、その中に含まれるファイルオフセットを仮想ディスクオフセットに変換する。次いで、ワーカスレッド112Cは、仮想ディスクオフセットを有する変換済みの読取要求のバッチ106Cをキュー(本明細書では、ディスク提出キュー(「DSQ」)402と呼ばれる)に格納する。
【0039】
[0045] 一時的に図4Bに移ると、ホストOS 400Bにおいて実行しているワーカスレッド112Dは、仮想ディスクオフセットを指定する読取要求のバッチ106CをDSQ 402からデキューする。次いで、ワーカスレッド112Dは、仮想ディスクオフセットをファイル108に対する物理ディスクオフセットに変換し、物理ディスクオフセットを指定する変換済みの読取要求のバッチ106DをSSQ 114に格納する。ストレージサブシステム116は、SSQ 114から変換済みの読取要求のバッチ106Dをデキューし、指定された読取動作を実行する。
【0040】
[0046] 上記で論じられるように、ストレージサブシステム116は、読取要求106Dの完了を示すブロック完了118をSCQ 122に格納する。ワーカスレッド112Eは、SCQ 122からブロック完了のバッチ118Aをデキューし(例えば、タイマーが終了した際)、その中に含まれる物理ディスクオフセットを仮想ディスクオフセットに変換する。次いで、ワーカスレッド112Eは、仮想ディスクオフセットを指定する完了通知118Cをキュー(本明細書では、ディスク完了キュー(「DCQ」)404と呼ばれる)に格納する。
【0041】
[0047] 図4Aに戻ると、ゲストOS 400Aにおいて実行しているワーカスレッド112Fは、DCQ 404から完了通知118Cのバッチをデキューする。次いで、ワーカスレッド112Fは、仮想ディスクオフセットを指定する完了通知118Cをファイル完了118Bに変換する。また、ワーカスレッド112Fは、ファイル完了118BをFCQ 124に格納する。次いで、アプリケーション104は、FCQ 124からファイル完了118Bをデキューすることができる。
【0042】
[0048] 図5は、本明細書で開示される一実施形態による、図4A及び4Bに示されるもの及び上記で説明されるものなどの仮想化されたコンピューティング環境における、ストレージスタック102の動作の態様を示すルーティン500を示すフロー図である。ルーティン500は、動作502から始まり、動作502では、ゲストOS 400A上で実行しているユーザモードアプリケーション104は、読取要求106をFSQ 110にエンキューする。次いで、ルーティン300は、動作502から動作504に進み、動作504では、ゲストOS 400Aのワーカスレッド112Cは、読取要求のバッチ106をデキューし、読取要求のファイルオフセットを仮想ディスクオフセットに変換し、変換済みの読取要求のバッチ106CをDSQ 402に格納する。
【0043】
[0049] 動作504から、ルーティン500は、動作506に進み、動作506では、ホストOS 400Bにおいて実行しているワーカスレッド112Dは、DSQ 402から読取要求106Cをデキューし、その中に含まれる仮想ディスクオフセットを物理ディスクオフセットに変換し、変換済みの読取要求のバッチ106DをSSQ 114に格納する。次いで、ルーティン500は、動作506から動作508に進み、動作508では、ストレージサブシステム116は、SSQ 114から読取要求のバッチ106Dをデキューし、指定されたブロック読取動作を実行し、ブロック完了118をSCQ 122に格納する。次いで、ルーティン500は、動作510に進む。
【0044】
[0050] 動作510では、ホストOS 400Bにおいて実行しているワーカスレッド112Eは、SCQ 122からブロック完了のバッチ118Aをデキューし、ブロック完了のバッチ118Aを仮想ディスクオフセットを有する完了通知118Cに変換し、変換済みの完了118CをDCQ 404に格納する。次いで、ルーティン500は、動作510から動作512に進み、動作512では、ゲストOS 400Aのワーカスレッド112Fは、仮想ディスクオフセットをファイル完了118Bに変換し、ファイル完了118BをFCQ 124に格納する。
【0045】
[0051] 動作512から、ルーティン500は、動作514に進み、動作514では、ゲストOS 400Aにおいて実行しているアプリケーション104は、FCQ 124からファイル完了118Bをデキューする。次いで、ルーティン500は、動作514から動作516に進み、そこで終了する。
【0046】
[0052] 上記では、単一のセットのキューが示され、説明されているが、他の実施形態では、複数のセットのキューを利用できることを認識されたい。例えば、一実施形態では、図1又は図4A及び4Bに示されるキュー構成の複数のインスタンスが利用される。各インスタンスは、異なる優先度を有する読取要求106を処理するために利用される。例えば、あるインスタンスは、高い優先度を有する読取要求106に対して利用することができ、別のインスタンスは、中程度の優先度を有する読取要求106に対して利用することができ、別のインスタンスは、低い優先度を有する読取要求106に対して利用することができる。この構成では、ストレージサブシステム116は、それらの優先度に従って読取要求106を処理するように構成することができる。当業者であれば、他の構成も明らかであろう。
【0047】
[0053] 図6は、本明細書で提示される様々な技術を実装することができるコンピューティングデバイス用の例証的なコンピュータハードウェア及びソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図である。特に、図6に示されるアーキテクチャは、ゲームコンソール、サーバコンピュータ、携帯電話、Eリーダ、スマートフォン、デスクトップコンピュータ、AR/VRデバイス、タブレットコンピュータ、ラップトップコンピュータ又は別のタイプのコンピューティングデバイスを実装するために利用することができる。
【0048】
[0054] 図6に示されるコンピュータ600は、中央処理装置602(「CPU」)と、ランダムアクセスのメモリ606(「RAM」)及び読み取り専用メモリ(「ROM」)608を含むシステムメモリ604と、メモリ604をCPU 602に結合するシステムバス610とを含む。スタートアップの間など、コンピュータ600内の要素間での情報の転送に役立つ基本的なルーティンを含む基本的な入力/出力システム(「BIOS」又は「ファームウェア」)は、ROM 608に格納することができる。コンピュータ600は、オペレーティングシステム622、ストレージスタック102のコンポーネント、アプリケーションプログラム及び他のタイプのプログラムを格納するための大容量記憶装置612をさらに含む。また、大容量記憶装置612は、他のタイプのプログラム及びデータを格納するように構成することもできる。
【0049】
[0055] 大容量記憶装置612は、バス610に接続された大容量記憶装置コントローラ(図示せず)を通じてCPU 602に接続される。大容量記憶装置612及びその関連コンピュータ可読媒体は、コンピュータ600用の不揮発性記憶装置を提供する。本明細書に含まれるコンピュータ可読媒体の説明は大容量記憶装置(ハードディスク、CD-ROMドライブ、DVD-ROMドライブ又はUSBストレージキーなど)を指すが、当業者であれば、コンピュータ可読媒体は、コンピュータ600がアクセスできる利用可能ないかなるコンピュータ記憶媒体又は通信媒体でもあり得ることを認識すべきである。
【0050】
[0056] 通信媒体は、搬送波又は他の輸送機構などの変調データ信号内のコンピュータ可読命令、データ構造、プログラムモジュール又は他のデータを含み、いかなる伝達媒体も含む。「変調データ信号」という用語は、信号内の情報を符号化するような方法で変更又は設定されたその特性のうちの1つ又は複数を有する信号を意味する。制限するものではなく、例として、通信媒体は、有線ネットワーク又は直接有線接続などの有線媒体、及び音響、高周波、赤外線及び他の無線媒体などの無線媒体を含む。また、上記のいずれかの組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0051】
[0057] 制限するものではなく、例として、コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール又は他のデータなどの情報を格納するための任意の方法又は技術において実装される揮発性及び不揮発性、取り外し可能及び取り外し不可能な媒体を含み得る。例えば、コンピュータ記憶媒体は、これらに限定されないが、RAM、ROM、EPROM、EEPROM、フラッシュメモリ若しくは他のソリッドステートメモリ技術、CD-ROM、デジタル多用途ディスク(「DVD」)、HD-DVD、BLU-RAY若しくは他の光学記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置若しくは他の磁気記憶装置、又は、所望の情報を格納するために使用することができ、且つ、コンピュータ600がアクセスできる他の任意の媒体を含む。特許請求の範囲の目的のため、「コンピュータ記憶媒体」という記載及びその変形語は、波若しくは信号自体又は通信媒体を含まない。
【0052】
[0058] 様々な構成によれば、コンピュータ600は、ネットワーク620などのネットワークを通じるリモートコンピュータとの論理接続を使用して、ネットワーク接続環境において動作することができる。コンピュータ600は、バス610に接続されたネットワークインタフェースユニット616を通じてネットワーク620に接続することができる。ネットワークインタフェースユニット616は、他のタイプのネットワーク及びリモートコンピュータシステムに接続するためにも利用できることを認識すべきである。また、コンピュータ600は、多くの他のデバイスからの入力の受信及び処理を行うための入力/出力コントローラ618も含み得、入力/出力コントローラ618は、キーボード、マウス、タッチ入力、電子スタイラス(図6には図示せず)又は物理センサ(ビデオカメラなど)を含む。同様に、入力/出力コントローラ618は、表示画面又は他のタイプの出力デバイス(同様に図6には図示せず)に出力を提供することができる。
【0053】
[0059] 本明細書で説明されるソフトウェアコンポーネントは、CPU 602にロードされて実行されると、CPU 602及びコンピュータ600全体を汎用コンピューティングデバイスから本明細書で提示される機能を促進するようにカスタマイズされた特殊用途コンピューティングデバイスに変換できることを認識すべきである。CPU 602は、任意の数の状態を個別に又は集合的に想定することができる任意の数のトランジスタ又は他の離散的な回路素子から構築することができる。より具体的には、CPU 602は、本明細書で開示されるソフトウェアモジュール内に含まれる実行可能命令に応答して、有限状態機械として動作することができる。これらのコンピュータ実行可能命令は、CPU 602がどのように状態間を遷移するかを指定することによってCPU 602を変換することができ、それにより、CPU 602を構成するトランジスタ又は他の離散的なハードウェア要素を変換する。
【0054】
[0060] また、本明細書で提示されるソフトウェアモジュールを符号化することにより、本明細書で提示されるコンピュータ可読媒体の物理構造を変換することもできる。物理構造の特定の変換は、この説明の異なる実装形態において、様々な要因に依存する。そのような要因の例は、これらに限定されないが、コンピュータ可読媒体を実装するために使用される技術、コンピュータ可読媒体が一次記憶装置として特徴付けられるか又は二次記憶装置として特徴付けられるか及び同様のものを含む。例えば、コンピュータ可読媒体が半導体ベースのメモリとして実装される場合は、本明細書で開示されるソフトウェアは、半導体メモリの物理状態を変換することによって、コンピュータ可読媒体上で符号化することができる。例えば、ソフトウェアは、半導体メモリを構成するトランジスタ、コンデンサ又は他の離散的な回路素子の状態を変換することができる。また、ソフトウェアは、データを格納するために、そのようなコンポーネントの物理状態を変換することもできる。
【0055】
[0061] 別の例として、本明細書で開示されるコンピュータ可読媒体は、磁気又は光技術を使用して実装することができる。そのような実装形態では、本明細書で提示されるソフトウェアは、ソフトウェアがその中で符号化される際、磁気又は光媒体の物理状態を変換することができる。これらの変換は、所定の磁気媒体内の特定の場所の磁気的特性を変更することを含み得る。また、これらの変換は、所定の光媒体内の特定の場所の物理的特徴又は特性を変更してそれらの場所の光学的特性を変化させることも含み得る。本説明の範囲及び精神から逸脱することなく、他の物理媒体の変換も可能であり、前述の例は、この論考を容易にするためだけに提供される。
【0056】
[0062] 上記を踏まえて、本明細書で開示されるソフトウェアコンポーネントの格納及び実行を行うため、コンピュータ600において多くのタイプの物理変換が起こることを認識すべきである。また、コンピュータ600に対して図6に示されるアーキテクチャ又は同様のアーキテクチャを利用して、ハンドヘルドコンピュータ、テレビゲームデバイス、埋め込みコンピュータシステム、モバイルデバイス(スマートフォン、タブレット、AR/VRデバイスなど)及び当業者に知られている他のタイプのコンピューティングデバイスを含む他のタイプのコンピューティングデバイスを実装できることも認識すべきである。また、コンピュータ600は、図6に示されるコンポーネントをすべて含むとは限らないこと、図6に明示的には示されていない他のコンポーネントを含み得ること、又は、図6に示されるものとは完全に異なるアーキテクチャを利用できることも企図される。
【0057】
[0063] 図7は、本明細書で提示される様々な実施形態による、開示される技術の態様を実装することができる分散型ネットワークコンピューティング環境700を示すネットワーク図である。図7に示されるように、1つ又は複数のサーバコンピュータ700Aは、通信ネットワーク620(固定有線若しくは無線LAN、WAN、イントラネット、エクストラネット、ピアツーピアネットワーク、仮想プライベートネットワーク、インターネット、Bluetooth通信ネットワーク、独自の低電圧通信ネットワーク又は他の通信ネットワークのいずれか又は組合せであり得る)を介して、多くのクライアントコンピューティングデバイス(これらに限定されないが、タブレットコンピュータ700B、ゲームコンソール700C、スマートウオッチ700D、スマートフォンなどの電話700E、パーソナルコンピュータ700F及びAR/VRデバイス700Gなど)と相互接続することができる。
【0058】
[0064] 例えば、通信ネットワーク620がインターネットであるネットワーク環境では、サーバコンピュータ700Aは、データの処理や、ハイパーテキスト転送プロトコル(「HTTP」)、ファイル転送プロトコル(「FTP」)又はシンプルオブジェクトアクセスプロトコル(「SOAP」)などの多くの公知のプロトコルのいずれかを介するクライアントコンピューティングデバイス700B~700Gへの及びクライアントコンピューティングデバイス700B~700Gからのデータの通信を行うように動作可能な専用サーバコンピュータであり得る。それに加えて、ネットワーク接続コンピューティング環境700は、セキュアソケットレイヤ(「SSL」)又はプリティグッドプライバシ(「PGP」)など、様々なデータセキュリティプロトコルを利用することができる。サーバコンピュータ700Aへのアクセスを得るため、クライアントコンピューティングデバイス700B~700Gの各々には、ウェブブラウザ(図7には図示せず)、他のグラフィカルユーザインタフェース(図7には図示せず)又はモバイルデスクトップ環境(図7には図示せず)など、1つ又は複数のコンピューティングアプリケーション又は端末セッションをサポートするように動作可能なオペレーティングシステムを装備することができる。
【0059】
[0065] サーバコンピュータ700Aは、他のコンピューティング環境(図7には図示せず)に通信可能に結合し、参加ユーザの対話/資源ネットワークに関するデータを受信することができる。例証的な動作では、ユーザ(図7には図示せず)は、所望のデータを得るため及び/又は他のコンピューティングアプリケーションを実行するために、クライアントコンピューティングデバイス700B~700G上で起動しているコンピューティングアプリケーションと対話することができる。
【0060】
[0066] データ及び/又はコンピューティングアプリケーションは、1つ又は複数のサーバ700Aに格納し、例示的な通信ネットワーク620上でクライアントコンピューティングデバイス700B~700Gを通じて協働ユーザに通信することができる。参加ユーザ(図7には図示せず)は、サーバコンピュータ6800Aに全体的に又は部分的に収納された特定のデータ及びアプリケーションへのアクセスを要求することができる。これらのデータは、処理及び格納のために、クライアントコンピューティングデバイス700B~700Gとサーバコンピュータ700Aとの間で通信することができる。
【0061】
[0067] サーバコンピュータ700Aは、データ及びアプリケーションの生成、認証、暗号化及び通信のためのコンピューティングアプリケーション、プロセス及びアプレットをホストし、他のサーバコンピューティング環境(図7には図示せず)、第三者サービスプロバイダ(図7には図示せず)、ネットワーク接続ストレージ(「NAS」)及びストレージエリアネットワーク(「SAN」)と協働して、アプリケーション/データトランザクションを実現することができる。
【0062】
[0068] 図6に示されるコンピューティングアーキテクチャ及び図7に示される分散型ネットワークコンピューティング環境は、論考し易くするために簡素化されていることを認識すべきである。また、コンピューティングアーキテクチャ及び分散型コンピューティングネットワークは、本明細書で具体的には説明されていないさらに多くのコンピューティングコンポーネント、デバイス、ソフトウェアプログラム、ネットワークデバイス及び他のコンポーネントを含み、それらを利用できることも認識すべきである。
【0063】
[0069] 本明細書で提示される開示は、以下の条項に記述される対象物も包含する。
【0064】
[0070] 条項1. アプリケーションから受信されたファイルを読み取るという要求のバッチを第1のキューに格納することであって、要求が、ファイルに対するファイルオフセットを含む、格納することと、ファイルに対するファイルオフセットのバッチをディスクオフセットに変換することと、ディスクオフセットを含む変換済みの要求のバッチを第2のキューに格納することであって、第2のキューが、ストレージサブシステムがアクセス可能なものであり、ストレージサブシステムが、第2のキューから変換済みの要求のバッチを取得し、ディスクオフセットを使用してファイルに対する読取動作を実行するように構成される、格納することとを含む、コンピュータ実装方法。
【0065】
[0071] 条項2. ストレージサブシステムが、読取動作に対する完了通知を第3のキューに格納するようにさらに構成される、条項1に記載のコンピュータ実装方法であって、第3のキューの完了通知のバッチをファイル完了に変換することと、アプリケーションがアクセス可能な第4のキューにファイル完了を格納することとをさらに含む、コンピュータ実装方法。
【0066】
[0072] 条項3. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、タイマーの終了を含む、条項1又は2に記載のコンピュータ実装方法。
【0067】
[0073] 条項4. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、事前に定義された数の要求が第1のキューに入っていることを含む、条項1~3のいずれか一項に記載のコンピュータ実装方法。
【0068】
[0074] 条項5. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、事前に定義された量のデータに対する要求が第1のキューに入っていることを含む、条項1~4のいずれか一項に記載のコンピュータ実装方法。
【0069】
[0075] 条項6. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションから要求を受信することに応答して実行される、条項1~5のいずれか一項に記載のコンピュータ実装方法。
【0070】
[0076] 条項7. 第3のキューの完了通知のバッチをファイル完了に変換することが、タイマーの終了に応答して実行される、条項1~6のいずれか一項に記載のコンピュータ実装方法。
【0071】
[0077] 条項8. ファイルを読み取るという要求のバッチを第1のキューに格納することであって、要求が、ファイルに対するファイルオフセットを含み、ゲストオペレーティングシステム(OS)において実行しているアプリケーションから受信される、格納することと、ファイルに対するファイルオフセットを仮想ディスクオフセットに変換し、仮想ディスクオフセットを含む変換済みの要求のバッチをホストOSがアクセス可能な第2のキューに格納することと、ファイルに対する仮想ディスクオフセットを物理ディスクオフセットに変換し、物理ディスクオフセットを含む変換済みの要求のバッチを第3のキューに格納することであって、第3のキューが、ストレージサブシステムがアクセス可能なものであり、ストレージサブシステムが、第3のキューから物理ディスクオフセットを含む変換済みの要求のバッチを取得し、物理ディスクオフセットを使用してファイルに対する読取動作を実行するように構成される、格納することとを含む、コンピュータ実装方法。
【0072】
[0078] 条項9. ストレージサブシステムが、読取動作に対する完了通知を第4のキューに格納するようにさらに構成される、条項8に記載のコンピュータ実装方法であって、第4のキューの完了通知を仮想ディスクオフセットを含む完了通知に変換し、仮想ディスクオフセットを含む完了通知をゲストOSがアクセス可能な第5のキューに格納することと、第5のキューの完了通知のバッチをファイル完了に変換し、ゲストOSにおいて実行しているアプリケーションがアクセス可能な第6のキューにファイル完了を格納することとをさらに含む、コンピュータ実装方法。
【0073】
[0079] 条項10. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、タイマーの終了を含む、条項8又は9に記載のコンピュータ実装方法。
【0074】
[0080] 条項11. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、事前に定義された数の要求が第1のキューに入っていることを含む、条項8~10のいずれか一項に記載のコンピュータ実装方法。
【0075】
[0081] 条項12. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションによって指定された条件を満たすことに応答して実行され、条件が、事前に定義された量のデータに対する要求が第1のキューに入っていることを含む、条項8~11のいずれか一項に記載のコンピュータ実装方法。
【0076】
[0082] 条項13. ファイルに対するファイルオフセットをディスクオフセットに変換することが、アプリケーションから要求を受信することに応答して実行される、条項8~12のいずれか一項に記載のコンピュータ実装方法。
【0077】
[0083] 条項14. 第4のキューの完了通知のバッチを仮想ディスクオフセットを含む完了通知に変換することが、タイマーの終了に応答して実行される、条項8~13のいずれか一項に記載のコンピュータ実装方法。
【0078】
[0084] 条項15. アプリケーションプログラミングインタフェース(API)をアプリケーションに公開することであって、APIが、第1の関数を含む、公開することと、アプリケーションから第1の関数の呼び出しを受信することであって、呼び出しが、ファイルを読み取るという複数の要求を含み、要求が、ファイルに対するファイルオフセットを含む、受信することと、APIの第1の関数の呼び出しを受信することに応答して、複数の要求を第1のキューに格納することと、ファイルに対するファイルオフセットをディスクオフセットに変換することと、ディスクオフセットを含む変換済みの要求のバッチを第2のキューに格納することであって、第2のキューが、ストレージサブシステムがアクセス可能なものであり、ストレージサブシステムが、第2のキューから変換済みの要求のバッチを取得し、ディスクオフセットを使用してファイルに対する読取動作を実行するように構成される、格納することとを含む、コンピュータ実装方法。
【0079】
[0085] 条項16. APIが、第2の関数を含む、条項15に記載のコンピュータ実装方法であって、アプリケーションから第2の関数の呼び出しを受信することに応答して、第1のキューを作成することをさらに含む、コンピュータ実装方法。
【0080】
[0086] 条項17. APIが、第3の関数を含む、条項15又は16に記載のコンピュータ実装方法であって、アプリケーションから第3の関数の呼び出しを受信することに応答して、第1のキューを閉じることをさらに含む、コンピュータ実装方法。
【0081】
[0087] 条項18. APIが、第4の関数を含む、条項15~17のいずれか一項に記載のコンピュータ実装方法であって、アプリケーションから第4の関数の呼び出しを受信することに応答して、ファイルを開くことをさらに含む、コンピュータ実装方法。
【0082】
[0088] 条項19. APIが、第5の関数を含む、条項15~18のいずれか一項に記載のコンピュータ実装方法であって、読取動作に対する完了通知が、第3のキューに格納される、コンピュータ実装方法であり、アプリケーションからの第5の関数の呼び出しに応答して、アプリケーションに完了通知を提供することをさらに含む、コンピュータ実装方法。
【0083】
[0089] 条項20. APIが、第6の関数を含み、ファイルに対するファイルオフセットをディスクオフセットに変換すること及び変換済みの要求のバッチを第2のキューに格納することが、アプリケーションから第6の関数の呼び出しを受信することに応答して実行される、条項15~19のいずれか一項に記載のコンピュータ実装方法。
【0084】
[0090] 前述に基づいて、本明細書では、読取要求及び読取完了通知のキューイング及びバッチ処理によってI/OあたりのCPUオーバーヘッドを低減するための技術を開示してきたことを認識すべきである。本明細書で提示される対象物は、コンピュータ構造フィーチャ、方法論的及び革新的な行為、特殊な演算機及びコンピュータ可読媒体に特有の言語で説明してきたが、添付の特許請求の範囲に記載される対象物は、必ずしも、本明細書で説明される特定のフィーチャ、行為又は媒体に限定されるとは限らないことを理解されたい。むしろ、特定のフィーチャ、行為及び媒体は、特許請求される対象物を実装する形態の例として開示される。
【0085】
[0091] 上記で説明される対象物は、単なる例示として提供され、制限するものと解釈すべきではない。本明細書で説明される対象物に対して、示される及び説明される実施形態及び適用の例に従うことなく、並びに、本開示の範囲から逸脱することなく、様々な変更及び変化が可能であり、本開示の範囲は、以下の特許請求の範囲に記載される。
図1
図2
図3
図4A
図4B
図5
図6
図7