(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-09
(54)【発明の名称】記憶容量を節約するためのデータのグループ化
(51)【国際特許分類】
G06F 16/13 20190101AFI20231226BHJP
【FI】
G06F16/13 200
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023537291
(86)(22)【出願日】2021-01-12
(85)【翻訳文提出日】2023-06-19
(86)【国際出願番号】 US2021013015
(87)【国際公開番号】W WO2022154777
(87)【国際公開日】2022-07-21
(81)【指定国・地域】
(71)【出願人】
【識別番号】520155228
【氏名又は名称】ヒタチ ヴァンタラ エルエルシー
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】スミス, ジョナサン
(72)【発明者】
【氏名】レべリントン, マーク
(72)【発明者】
【氏名】クロスランド, サイモン
(57)【要約】
いくつかの例では、コンピューティングデバイスは、グループルートメタデータファイルシステムブロックにルートメタデータデータ構造(DS)をまとめて記憶し、少なくとも、第1ルートメタデータDSに参照される第1ファイルデータ及び第2ルートメタデータDSに参照される第2ファイルデータをデータファイルシステムブロックに記憶する。第1ルートメタデータDSに参照される第1ファイルデータ及び第2ルートメタデータDSに参照される第2ファイルデータに基づいて、データファイルシステムブロックのリファレンスカウントを決定してもよい。さらに、第1ファイルデータと整合するコンテンツを有し、且つ第3ルートメタデータDSに参照される第3ファイルデータを決定してもよい。第1ファイルデータを参照するように第3ルートメタデータDSを更新し、第3ルートメタデータDSの更新に基づいて、リファレンスカウントを更新してもよい。
【特許請求の範囲】
【請求項1】
ファイルデータ及び前記ファイルデータのメタデータを記憶するための動作を実行するように構成された1又は複数のプロセッサを含む少なくとも1つのコンピューティングデバイスを含むシステムであって、前記メタデータは、ルートメタデータデータ構造(DS)を含み、前記動作は、
複数のルートメタデータDSをまとめてグループルートメタデータDSファイルシステムブロックに記憶することであって、前記複数のルートメタデータDSは、第1ルートメタデータDSを含む、記憶することと、
少なくとも、前記第1ルートメタデータDSによって参照される第1ファイルデータ及び第2ルートメタデータDSによって参照される第2ファイルデータをデータファイルシステムブロックに記憶することであって、前記第2ルートメタデータDSは、前記グループルートメタデータDS又は別のグループルートメタデータDSに記憶される、記憶することと、
少なくとも前記第1ルートメタデータDSによって参照される前記第1ファイルデータ及び前記第2ルートメタデータDSによって参照される前記第2ファイルデータに基づいて、前記データファイルシステムブロックのリファレンスカウントを決定することと、
前記第1ファイルデータと整合するコンテンツを有する第3ファイルデータを決定することであって、前記第3ファイルデータは、第3ルートメタデータDSによって参照される、決定することと、
前記第3ルートメタデータDSを前記第1ファイルデータを参照するように更新することと、
前記第3ルートメタデータDSの更新に基づいて、前記データファイルシステムブロックの前記リファレンスカウントを更新することと
を含む、システム。
【請求項2】
前記動作は、
新しいルートメタデータDSを記憶する際に、前記グループルートメタデータDSファイルシステムブロックが前記新しいルートメタデータDSのための十分なストレージスペースを有するかどうかを判断することと、
前記グループルートメタデータDSファイルシステムブロックが十分なストレージスペースを有する際に、前記新しいルートメタデータDSを前記グループルートメタデータDSファイルシステムブロックに記憶することと、
前記グループルートメタデータDSファイルシステムブロックが不十分なストレージスペースを有する際に、前記新しいルートメタデータDSを新しいグループルートメタデータDSファイルシステムブロックに記憶することと
をさらに含む、請求項1に記載のシステム。
【請求項3】
前記グループルートメタデータDSファイルシステムブロックが前記新しいルートメタデータDSのための十分なストレージスペースを有するかどうかを判断する前記動作は、前記グループルートメタデータDSファイルシステムブロックに対するリファレンスカウントを決定するためにビットマップにアクセスすることを含む、請求項1に記載のシステム。
【請求項4】
前記動作は、書き込み要求に応答して自動的に実行される、請求項1に記載のシステム。
【請求項5】
前記第1ルートメタデータDS及び前記第2ルートメタデータDSは、同じグループルートメタデータDSファイルシステムブロックに含まれる、請求項1に記載のシステム。
【請求項6】
別のルートメタデータDSファイルシステムブロックの別のルートメタデータDSが前記ファイルデータファイルシステムブロックのファイルデータを参照する際に、前記ファイルデータファイルシステムブロックの前記リファレンスカウントはインクリメントされる、請求項1に記載のシステム。
【請求項7】
中間メタデータDSを他の中間メタデータDSと共にグループ中間メタデータDSファイルシステムブロックに記憶することをさらに含む、請求項1に記載のシステム。
【請求項8】
前記動作は、
新しい中間メタデータDSを記憶する際に、前記グループ中間メタデータDSファイルシステムブロックが前記中間メタデータDSのための十分なストレージスペースを有するかどうかを判断することと、
前記グループ中間メタデータDSファイルシステムブロックが十分なストレージスペースを有する際に、前記中間メタデータDSを既存のグループ中間メタデータDSファイルシステムブロックに記憶することと、
前記グループ中間メタデータDSファイルシステムブロックが不十分なストレージスペースを有する際に、前記中間メタデータDSを新しいグループ中間メタデータDSファイルシステムブロックに記憶することと
をさらに含む、請求項7に記載のシステム。
【請求項9】
前記グループ中間メタデータDSファイルシステムブロックの第1中間メタデータDSは、前記グループ中間メタデータDSファイルシステムブロックの第2中間メタデータDSを参照する、請求項1に記載のシステム。
【請求項10】
前記第1中間メタデータDSは、前記グループルートメタデータDSファイルシステムブロックの前記それぞれのルートメタデータDSによって参照される、請求項9に記載のシステム。
【請求項11】
前記第2中間メタデータDSは、データファイルシステムブロックを参照する、請求項10に記載のシステム。
【請求項12】
コンピューティングデバイスによって、複数のルートメタデータDSをまとめて、グループルートメタデータDSファイルシステムブロックに記憶することであって、前記複数のルートメタデータDSは、第1ルートメタデータDSを含む、記憶することと、
少なくとも、前記第1ルートメタデータDSによって参照される第1ファイルデータ及び第2ルートメタデータDSによって参照される第2ファイルデータをデータファイルシステムブロックに記憶することであって、前記第2ルートメタデータDSは、前記グループルートメタデータDS又は別のグループルートメタデータDSに記憶される、記憶することと、
少なくとも前記第1ルートメタデータDSによって参照される前記第1ファイルデータ及び前記第2ルートメタデータDSによって参照される前記第2ファイルデータに基づいて、前記データファイルシステムブロックのリファレンスカウントを決定することと、
前記第1ファイルデータと整合するコンテンツを有する第3ファイルデータを決定することであって、前記第3ファイルデータは、第3ルートメタデータDSによって参照される、決定することと、
前記第3ルートメタデータDSを前記第1ファイルデータを参照するように更新することと、
前記第3ルートメタデータDSの更新に基づいて、前記データファイルシステムブロックの前記リファレンスカウントを更新することと
を含む、方法。
【請求項13】
新しいルートメタデータDSを記憶する際に、前記グループルートメタデータDSファイルシステムブロックが前記新しいルートメタデータDSのための十分なストレージスペースを有するかどうかを判断することと、
前記グループルートメタデータDSファイルシステムブロックが十分なストレージスペースを有する際に、前記新しいルートメタデータDSを前記グループルートメタデータDSファイルシステムブロックに記憶することと、
前記グループルートメタデータDSファイルシステムブロックが不十分なストレージスペースを有する際に、前記新しいルートメタデータDSを新しいグループルートメタデータDSファイルシステムブロックに記憶することと
をさらに含む、請求項12に記載の方法。
【請求項14】
1又は複数のプロセッサを動作を実行するように構成するための前記1又は複数のプロセッサによって実行可能な命令を記憶する1又は複数の非一時的なコンピュータ可読媒体であって、前記動作は、
複数のルートメタデータDSをまとめてグループルートメタデータDSファイルシステムブロックに記憶することであって、前記複数のルートメタデータDSは、第1ルートメタデータDSを含む、記憶することと、
少なくとも、前記第1ルートメタデータDSによって参照される第1ファイルデータ及び第2ルートメタデータDSによって参照される第2ファイルデータをデータファイルシステムブロックに記憶することであって、前記第2ルートメタデータDSは、前記グループルートメタデータDS又は別のグループルートメタデータDSに記憶される、記憶することと、
少なくとも前記第1ルートメタデータDSによって参照される前記第1ファイルデータ及び前記第2ルートメタデータDSによって参照される前記第2ファイルデータに基づいて、前記データファイルシステムブロックのリファレンスカウントを決定することと、
前記第1ファイルデータと整合するコンテンツを有する第3ファイルデータを決定することであって、前記第3ファイルデータは、第3ルートメタデータDSによって参照される、決定することと、
前記第3ルートメタデータDSを前記第1ファイルデータを参照するように更新することと、
前記第3ルートメタデータDSの更新に基づいて、前記データファイルシステムブロックの前記リファレンスカウントを更新することと
を含む、1又は複数の非一時的なコンピュータ可読媒体。
【請求項15】
前記動作は、
新しいルートメタデータDSを記憶する際に、前記グループルートメタデータDSファイルシステムブロックが前記新しいルートメタデータDSのための十分なストレージスペースを有するかどうかを判断することと、
前記グループルートメタデータDSファイルシステムブロックが十分なストレージスペースを有する際に、前記新しいルートメタデータDSを前記グループルートメタデータDSファイルシステムブロックに記憶することと、
前記グループルートメタデータDSファイルシステムブロックが不十分なストレージスペースを有する際に、前記新しいルートメタデータDSを新しいグループルートメタデータDSファイルシステムブロックに記憶することと
をさらに含む、請求項14に記載の1又は複数の非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は、概して、データストレージに関し、より具体的には、データストレージシステムにおける無駄な記憶容量の低減に関する。
【背景技術】
【0002】
ファイル及び同様のものなどのオブジェクトは、典型的には、オブジェクトデータ及びオブジェクトメタデータを含んでもよい。例えば、オブジェクトデータは、オブジェクトのコンテンツを含む一方で、オブジェクトメタデータは、オブジェクトデータについての情報、及びファイルシステム内のオブジェクトデータの場所を含んでもよい。さらに、ファイルシステムでは、オブジェクトデータ及びメタデータは、典型的には、固定サイズのファイルシステムブロックに記憶されてもよい。単一のファイルシステムブロックより大きなオブジェクトに対するオブジェクトデータは、複数のファイルシステムブロックに分割されて記憶されてもよい。特定のオブジェクトに対するオブジェクトデータを含むファイルシステムブロック(すなわち、データブロック)の場所は、オブジェクトに対して作成されたファイルシステムメタデータの形式によって指し示されてもよい。オブジェクトに対するファイルシステムメタデータもまた、固定ブロックサイズのファイルシステムブロックのうちの1又は複数に記憶されてもよい。それに従って、固定ブロックサイズのファイルシステムは、固定ブロックサイズより小さなファイルがファイルシステムに記憶される際は常に、ストレージスペースを無駄にし得る。同様に、固定ブロックサイズのファイルシステムは、固定ブロックサイズより小さなメタデータデータ構造が別個のメタデータファイルシステムブロックに記憶される際は常に、スペースを無駄にし得る。
【発明の概要】
【課題を解決するための手段】
【0003】
本明細書のいくつかの例は、グループルートメタデータファイルシステムブロックにルートメタデータデータ構造(DS)をまとめて記憶し、及びデータファイルシステムブロックに、少なくとも、第1ルートメタデータDSによって参照される第1ファイルデータ及び第2ルートメタデータDSによって参照される第2ファイルデータを記憶してもよいコンピューティングデバイスを含む。コンピューティングデバイスは、第1ルートメタデータDSによって参照される第1ファイルデータ及び第2ルートメタデータDSによって参照される第2ファイルデータに基づいて、データファイルシステムブロックのリファレンスカウントを決定してもよい。それに加えて、コンピューティングデバイスは、第1ファイルデータと整合するコンテンツを有し、且つ第3ルートメタデータDSによって参照される第3ファイルデータを決定してもよい。コンピューティングデバイスは、第1ファイルデータを参照するように第3ルートメタデータDSを更新し、第3ルートメタデータDSの更新に基づいて、データファイルシステムブロックのリファレンスカウントを更新してもよい。
【図面の簡単な説明】
【0004】
詳細な説明は、添付の図を参照して記載されている。図では、参照番号の最左端の数字は、参照番号が最初に現れる図を識別する。異なる図における同じ参照番号の使用は、同様の又は同一のアイテム又は特徴を示す。
【0005】
【
図1】
図1は、いくつかの実装形態に係るメタデータデータ構造(メタデータDS)及びオブジェクトデータのグループ化を可能にすると同時に、重複排除も可能にするように構成されたシステムの例示的なアーキテクチャを示す。
【0006】
【
図2】
図2は、いくつかの実装形態に係るオブジェクト木構造の例示的なフォーマットを示す。
【0007】
【
図3】
図3は、いくつかの実装形態に係るストレージを割り当てるための例示的なプロセスを示すフロー図である。
【0008】
【
図4】
図4は、いくつかの実装形態に係るストレージを解放するための例示的なプロセスを示す。
【0009】
【
図5】
図5は、いくつかの実装形態に係る記憶データのグループ化に基づいて記憶容量を節約する例を示す。
【0010】
【
図6】
図6は、いくつかの実装形態に係るメタデータDS及びデータのグループ化に基づいて記憶容量を節約する例を示す。
【0011】
【
図7】
図7は、いくつかの実装形態に係るグループ化されたデータの重複排除を含む例を示す。
【0012】
【
図8】
図8は、いくつかの実装形態に係る記憶データのグループ化に基づいて記憶容量を節約する例を示す。
【発明を実施するための形態】
【0013】
本明細書のいくつかの実装形態は、固定ブロックサイズのファイルシステムにおける無駄な記憶容量を低減することができる。例えば、ファイルシステムは、複数の異なる小さなデータファイルからのデータを単一のファイルシステムブロックにグループ化できるようにするために、ファイルシステムフリースペースビットマップにおけるリファレンスカウントを採用してもよい。同様に、複数の異なる小さなメタデータデータ構造(メタデータDS)は単一のファイルシステムブロックにグループ化されてもよい。それに加えて、いくつかの例は、ファイルデータを他の無関係のファイルデータと共に単一のファイルシステムブロックにグループ化してもよく、また、メタデータを他の無関係のメタデータと共に単一のファイルシステムブロックにグループ化してもよい。したがって、本明細書の実装形態は、従来のソリューションより高いデータ密度を達成すると同時に、さらなる記憶容量節約を達成するためにグループ化されたファイルデータの重複排除を行うことができる。
【0014】
本明細書の例は、ファイルシステムの無駄なスペースの量を低減することができ、従って、同じデータ量の記憶に対して、全体的により少ない記憶容量を使用することができる。その上、より少ないファイルシステムブロックが使用されるため、ファイルシステムがフリーブロックを見つけるために実行する作業の量を低減することができ、それにより、ファイルシステムのファイルサービング性能を改善すること例えば、効果的にスループットを改善すること及びレイテンシを低減することができる。それに加えて、使用されるファイルシステムスペースの量が低減されるため、ファイルシステムを記憶するために使用される根本的なストレージシステムに、より少ないデータが書き込まれるようにでき、それにより、ストレージシステムへの負荷を低減し、さらに、それにより、ストレージシステムの性能を改善する。
【0015】
詳解の目的のため、いくつかの例示的な実装形態は、1又は複数のストレージ及び1又は複数のクライアントデバイスと通信する1又は複数のコンピューティングデバイスの環境において説明される。しかし、本明細書の実装形態は、本明細書の開示を踏まえれば当業者に明らかであるように、提供される特定の例に限定されず、他のタイプのコンピューティングシステム、他のタイプのストレージ環境、他のシステムアーキテクチャ等まで拡張されてもよい。
【0016】
図1は、いくつかの実装形態に係るメタデータデータ構造(メタデータDS)及びオブジェクトデータのグループ化を可能にすると同時に、重複排除も可能にするように構成されたシステム100の例示的なアーキテクチャを示す。システム100は、1又は複数のストレージ108と通信することができる1又は複数のサービスコンピューティングデバイス102を含む。サービスコンピューティングデバイス102は、1つ又は複数のクライアントデバイス114に対する処理能力及びストレージアクセスを提供してもよい。複数のサービスコンピューティングデバイス102の事例では、サービスコンピューティングデバイス102は、典型的には、プライベートネットワーク、高速相互接続及び/又は他の適切な高速ネットワーク接続技術(
図1には図示せず)を介して互いに接続されてもよい。例えば、システム100は、サービスコンピューティングデバイス102上で走らせることができる様々なフロントエンドプロトコルを介して、外部のアクセスが許容されてもよい。アクセスの形式は、NASプロトコル、ブロックプロトコル、オブジェクトベースのプロトコル、並びに/或いは、他の標準プロトコル及び/又は専用プロトコルを介してもよい。
【0017】
図1に示されるように、サービスコンピューティングデバイス102は、1つ又は複数のストレージネットワーク110を介して、ストレージ108と通信される又は接続されてもよい。さらに、サービスコンピューティングデバイス102は、1又は複数のクライアント側ネットワーク112上で、例えば、サービスコンピューティングデバイス102にアクセスすることができるユーザデバイス又は他のデバイスのような、1又は複数のクライアントデバイス114と通信可能であってもよい。従って、サービスコンピューティングデバイス102は、クライアントデバイス114のためのデータの記憶及び管理を行ってもよく、クライアントデバイス114にとって、統合ストレージサービスのように見えてもよい。
【0018】
いくつかの例では、サービスコンピューティングデバイス102は、数々の方法で具体化することができる複数の物理サーバ又は他のタイプのコンピューティングデバイスを含んでもよい。例えば、サーバの事例では、モジュール、プログラム、他の機能コンポーネント及びデータストレージの一部分は、それに加えて又はその代替として、他のコンピュータアーキテクチャが使用されてもよいが、例えば、サーバファーム又はデータセンタ、クラウドホスト型コンピューティングサービス等のサーバのクラスタなどのサーバ上に実装されてもよい。示される例では、各サービスコンピューティングデバイス102は、1又は複数のプロセッサ116、1又は複数の通信インタフェース118及び1又は複数のコンピュータ可読媒体120を含むか、又は、それらと関連付けられてもよい。さらに、ある1つのサービスコンピューティングデバイス102の説明が提供されているが、他のサービスコンピューティングデバイス102が含まれる場合、他のサービスコンピューティングデバイス102は同じ又は同様のハードウェア及びソフトウェア構成及びコンポーネントを有してもよい。
【0019】
各プロセッサ116は、単一の処理ユニット又は多くの処理ユニットであってもよく、単一の若しくは複数のコンピューティングユニット又は複数の処理コアを含んでもよい。プロセッサ116は、1つ若しくは複数の中央処理装置、マイクロプロセッサ、マイクロコンピュータ、マイクロコントローラ、デジタル信号プロセッサ、ステートマシン、論理回路、及び/又は、動作命令に基づいて信号を操作する任意のデバイスとして実装され得る。例えば、プロセッサ116は、1又は複数のハードウェアプロセッサ及び/又は本明細書で説明されるアルゴリズム及びプロセスを実行するように具体的にプログラムされるか又は構成される任意の適切なタイプの論理回路であってもよい。プロセッサ116は、コンピュータ可読媒体120に記憶されたコンピュータ可読命令のフェッチ及び実行を行うように構成され得、コンピュータ可読命令は、本明細書で説明される機能を実行するようにプロセッサ116をプログラムすることができる。
【0020】
コンピュータ可読媒体120は、コンピュータ可読命令、データ構造、プログラムモジュール又は他のデータなどの情報の記憶のための任意のタイプの技術で実装された揮発性及び不揮発性メモリ並びに/或いは取り外し可能な及び取り外し不可能な媒体を含んでもよい。例えば、コンピュータ可読媒体120は、これらに限定されないが、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術、光学ストレージ、ソリッドステートストレージ、磁気テープ、磁気ディスクストレージ、RAIDストレージシステム、ストレージアレイ、ネットワークアタッチドストレージ、ストレージエリアネットワーク、クラウドストレージ、又は、所望の情報を記憶するために使用することができ、コンピューティングデバイスによるアクセスが可能な、他の任意の媒体を含んでもよい。サービスコンピューティングデバイス102の構成に応じて、言及される際に非一時的なコンピュータ可読媒体がエネルギー、搬送波信号、電磁波及び/又は信号自体などの媒体を除外する限り、コンピュータ可読媒体120は、有形の非一時的な媒体であってもよい。いくつかの事例では、コンピュータ可読媒体120は、サービスコンピューティングデバイス102と同じ場所に位置してもよい一方で、他の例では、コンピュータ可読媒体120は、サービスコンピューティングデバイス102から分離されるか又は部分的に離れていてもよい。
【0021】
コンピュータ可読媒体120は、プロセッサ116により実行可能な数々の機能コンポーネントを記憶するために使用されてもよい。多くの実装形態では、これらの機能コンポーネントは、プロセッサ116による実行が可能であり、実行されると、本明細書においてサービスコンピューティングデバイス102に属するアクションを実行するようにプロセッサ116を具体的にプログラムする、命令、モジュール、又はプログラムを含む。コンピュータ可読媒体120に記憶された機能コンポーネントは、サービスアプリケーション122、オペレーティングシステム(OS)124、及びソフトウェアファイルシステムマネージャ126を含んでもよく、それらの各々は、1又は複数のコンピュータプログラム、アプリケーション、実行可能コード、コンピュータ可読命令又はその一部分を含んでもよい。例えば、ソフトウェアファイルシステムマネージャ126は、OS124のモジュール、サービスアプリケーション122のモジュールであってもよく、OS124上で独立して走らせてもよい。さらに、サービスアプリケーション122は、クライアントデバイス114と対話するため、クライアントデバイス114のためのデータをストレージ108に記憶するため、及び/又はストレージ108に記憶されたデータへのアクセスをクライアントデバイス114に提供するためなど、様々なデータ処理タスクを実行するためにプロセッサ116によって実行されてもよい。例えば、サービスアプリケーション122は、ネームスペース管理、プロセス管理、範囲割り当て管理、ロック管理、複製/データ移動セッション管理、及び負荷分散含み得る1又は複数のサービスを提供するようにサービスコンピューティングデバイス102を構成してもよい。さらに、OS124は、サービスコンピューティングデバイス102の様々な機能の制御し、管理してもよい。さらに、サービスコンピューティングデバイスは、ソフトウェアファイルシステムマネージャ126と対話するハードウェアファイルシステムマネージャ128を含んでもよく、それについては、以下で追加説明する。
【0022】
それに加えて、コンピュータ可読媒体120は、本明細書で説明される機能及びサービスを実行するために使用されるデータ及びデータ構造を記憶してもよい。例えば、コンピュータ可読媒体120は、ソフトウェアファイルシステムマネージャ126、サービスアプリケーション122、及び/又はOS124によって使用される、データ、メタデータ、データ構造、及び/又は他の情報を記憶してもよい。また、サービスコンピューティングデバイス102は、他の機能コンポーネント及びデータを含んでもよく、維持してもよく、機能コンポーネントは、プログラム、ドライバなど、及び機能コンポーネントによって使用又は生成される他のデータを含んでもよい。さらに、サービスコンピューティングデバイス102は、他の多くの論理コンポーネント、プログラムコンポーネント、及び物理コンポーネントを含んでもよく、その中の上記で説明されるものは、本明細書の詳解に関連する単なる例である。
【0023】
通信インタフェース118は、ネットワーク110、112上でなど、他の様々なデバイスとの通信を可能にするための1つ又は複数のインタフェース及びハードウェアコンポーネントを含んでもよい。従って、通信インタフェース118は、他のサービスコンピューティングデバイス102への接続、ストレージ108との通信のためのストレージネットワーク110への接続、及びクライアントデバイス114との通信のためのクライアント側ネットワーク112への接続を提供する1又は複数のポートを含んでもよく、または、それらと接続してもよい。例えば、通信インタフェース118は、本明細書の他の場所で追加列挙されるように、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、インターネット、ケーブルネットワーク、セルラネットワーク、無線ネットワーク(例えば、Wi-Fi)、有線ネットワーク(例えば、ファイバチャネル、光ファイバ、イーサネット)、直接接続、BLUETOOTH(登録商標)など近距離通信等ののうちの1又は複数を介して、通信が可能であってもよい。
【0024】
ストレージネットワーク110及びクライアント側ネットワーク112は、インターネットなどのWANイントラネットなどのLAN、セルラネットワーク、Wi-Fiなどのローカル無線ネットワーク及び/又は、BLUETOOTH(登録商標)などの近距離無線通信などの無線ネットワーク、ファイバチャネル、光ファイバ、イーサネット、又は他の任意のそのようなネットワーク、直接有線接続を含む有線ネットワーク(、或いはそれらの任意の組合せを含む、任意の適切な通信技術を含んでもよい。一例として、ストレージネットワーク110は、ファイバチャネル技術又は他の適切なストレージネットワーク接続技術を採用してもよい。さらに、例として、クライアント側ネットワーク112は、インターネット、LAN、WAN、又はそれらの組合せを含んでもよい。しかし、本明細書の実装形態は、特定のネットワーク接続技術に限定されない。従って、ネットワーク110、112は、有線及び/又は無線通信技術を含んでもよい。さらに、ネットワーク110及び/又は112は、クライアントデバイス114及び他の適切なコンピューティングデバイスのうちの1つを使用して実装してもよいなど、管理コンピュータシステムを介してサービスコンピューティングデバイス102への外部の管理アクセスを可能にするストレージサポートネットワークを含んでもよい。
【0025】
ネットワーク110、112のために使用されるコンポーネントは、ネットワークのタイプ、選択された環境、所望の性能等に少なくとも部分的に依存し得る。例えば、ネットワーク110及び/又は112のうちの1又は複数は、スイッチ又はスイッチセットなどの転送デバイスを含んでもよい。一例として、これらのスイッチは、1Gb/s、10Gb/s、40Gb/s、100Gb/s、若しくはより大きなデータレートが可能なイーサネットスイッチ又は他の任意の適切なタイプのスイッチであってもよい。従って、サービスコンピューティングデバイス102は、有線及び/又は無線接続、及びそれらの組合せを使用して、互いに通信すること、ストレージネットワーク110上でストレージ108と通信すること、及び、クライアント側ネットワーク112上でクライアントデバイス114と通信することができる。さらに、いくつかの例では、ネットワーク110、112のいくつか又はすべては、同じネットワークであってもよい。
【0026】
各クライアントデバイス114は、デスクトップ、ワークステーション、サーバ、ラップトップ、タブレットコンピューティングデバイス、モバイルデバイス、スマートフォン、ウェアラブルコンピューティングデバイスなどの任意の適切なタイプのコンピューティングデバイス、又は、ネットワーク上でデータを送信することができる他の任意のタイプのコンピューティングデバイスであってもよい。例えば、クライアントデバイス114は、データストレージ、バックアップストレージ、長期リモートストレージ又は他の任意の種類のデータストレージのためにサービスコンピューティングデバイス102に送信されるデータを生成するか又は提供してもよい。いくつかの事例では、クライアントデバイス114は、サービスコンピューティングデバイス102に対して説明されるものと同様のハードウェア構成を含んでもよいが、クライアントデバイス114が本明細書で論じられる様々な機能を実行できるようにするために、異なるデータ及び機能コンポーネントを有する。いくつかの事例では、ユーザは、ユーザアカウント、ユーザログイン認証情報等を介して、それぞれのクライアントデバイス114と関連付けられてもよい
【0027】
各クライアントデバイス114(1)~114(M)は、クライアントデバイス114上で実行されるブラウザ又は他のアプリケーションなど、クライアントアプリケーション131(1)~131(M)のそれぞれのインスタンスを介して、サービスコンピューティングデバイス102のうちの1つ又は複数にアクセスしてもよい。例えば、クライアントアプリケーション131は、グラフィックユーザインタフェース(GUI)及びコマンドラインインタフェースを提供してもよく、並びに/或いは、サービスコンピューティングデバイス102上のサービスアプリケーション122と通信するためのアプリケーションプログラミングインタフェース(API)を採用してもよい。さらに、本明細書では、クライアント/サーバ構成の一例が説明されているが、本明細書の開示の利益を享受する当業者には、本明細書のコンピューティングシステム100に対する他の多くの可能な変形形態及び用途が明らかであろう。
【0028】
ストレージ108は、データコンテンツ及びコンテンツについてのメタデータを含み得るファイルデータ又は他のオブジェクトデータなどのデータの記憶のために、サービスコンピューティングデバイス102用の記憶容量を提供してもよい。ストレージ108は、ネットワークアタッチドストレージ(NAS)システム、ストレージエリアネットワーク(SAN)システム、又はストレージ仮想化システムなどのストレージアレイを含んでもよい。さらに、ストレージ108は、サービスコンピューティングデバイス102のうちの1又は複数と同一場所に位置してもよく、サービスコンピューティングデバイス102から離れて位置してもよく又は外部に位置してもよい。
【0029】
示される例では、ストレージ108は、ストレージコントローラ132と呼ばれる1又は複数のストレージコンピューティングデバイスを含み、ストレージコントローラ132は、サービスコンピューティングデバイス102に関して上記で論じられた例のいずれかなどの)1若しくは複数のサーバ又は他の任意の適切なコンピューティングデバイスを含んでもよい。ストレージコントローラ132の各々は、1又は複数のプロセッサ134と、1又は複数のコンピュータ可読媒体136と、1又は複数の通信インタフェース138とを含んでもよい。例えば、プロセッサ134は、プロセッサ116に関して上記で論じられた例のいずれかに相当してもよく、コンピュータ可読媒体136は、コンピュータ可読媒体120に関して上記で論じられる例のいずれかに相当してもよく、通信インタフェース138は、通信インタフェース118に関して上記で論じられる例のいずれかに相当してもよい。
【0030】
さらに、ストレージコントローラ132のコンピュータ可読媒体136は、プロセッサ134による実行が可能な数々の機能コンポーネントを記憶するために使用されてもよい。多くの実装形態では、これらの機能コンポーネントは、命令、モジュール、又はプログラムを含み、命令、モジュール、又はプログラムは、プロセッサ134によって実行可能であり、また、実行されると、本明細書においてストレージコントローラ132に属するアクションを実行するようにプロセッサ134を具体的にプログラムする。コンピュータ可読媒体136に記憶される機能コンポーネントは、記憶管理プログラム140及びOS142を含んでもよく、それらの各々は、1又は複数のコンピュータプログラム、アプリケーション、実行可能コード、コンピュータ可読命令、又はその一部分を含んでもよい。例えば、記憶管理プログラム140は、ストレージコントローラ132に接続された複数の記憶装置144内のデータの記憶を制御し、又は管理してもよい。OS142は、ストレージコントローラ132の様々な機能を制御し、及び管理してもよい。
【0031】
それに加えて、記憶装置144は、いくつかの事例では、物理ストレージデバイス148の1又は複数のアレイ146(1)~146(L)を含んでもよい。例えば、ストレージコントローラ132は、RAID(Redundant array of independent disks)構成又は他の所望のストレージ構成でアレイを構成するためなど、1又は複数のアレイ146を制御してもよい。ストレージコントローラ132は、物理デバイスに基づいて論理ユニットをサービスコンピューティングデバイス102に提示してもよく、また、根本的な物理デバイス148に記憶されたデータを管理してもよい。物理デバイス148は、ハードディスクドライブ、ソリッドステートデバイス、光学デバイス、磁気テープなど又はそれらの組合せなど、いかなるタイプのストレーでデバイスであってよい。いくつかの例では、ストレージ108は、オンデマンド記憶容量を提供するように構成されたシンプロビジョニング能力を含んでもよく、また、フェイルオーバー保護、自動複製、バックアップ、アーカイビング等を含んでもよい。或いは、他の例では、サービスコンピューティングデバイス102のうちの1又は複数は、ストレージコントローラとして働いてもよく、ストレージコントローラ132は取り除いてもよい。
【0032】
示される例では、サービスコンピューティングデバイス102及びストレージ108は、クライアントデバイス114用のデータストレージシステム150として働くように構構成される。本明細書のファイルシステムブロックの各々は、ストレージストレージ108の物理ストレージの一部分に相当するストレージのユニットであってもよい。サービスコンピューティングデバイス102上のサービスアプリケーション122は、クライアントデバイス114からのデータ受信及びストレージ108へのデータ記憶並びに/或いは後続のストレージ108からのデータ回収及びクライアントデバイス114へのデータ提供を行うように実行されてもよい。データストレージシステム150は、特定の動作環境を提供するために、要望通りにサービスコンピューティングデバイス102及び/又はストレージ108の数を増減するようにスケーリング可能であってもよい。例えば、ストレージシステム150の性能は、サービスコンピューティングデバイス102の追加に伴って、実質的に線形的にスケーリングすることができる。ストレージ108に含まれる記憶容量もまた、要望通りにスケーリングすることができる。いくつかの実装形態では、ストレージ108は、数ペタバイト又はそれ以上のデータストレージスペースにスケーリングされてもよい。
【0033】
さらに、サービスコンピューティングデバイス102及びクライアントデバイス114は、任意の数の異なるコンピュータシステムを含んでもよく、本明細書で開示される実装形態は、特定の数のコンピュータシステムにも、特定のハードウェア構成にも限定されない。さらに、フォールトトレランスを増加するため、サービスコンピューティングデバイス102の通信インタフェース118は、サービスコンピューティングデバイス102が接続されたネットワークの各々への冗長ネットワーク接続を含んでもよい。さらに、いくつかの事例では、データストレージシステム150のマルチファイルサーバアーキテクチャは、フォールトトレランス及びファイルサーバフェイルオーバーを提供してもよい。例えば、サービスコンピューティングデバイス102のうちの1つが故障することがあれば、他のサービスコンピューティングデバイス102のうちの1又は複数は、故障を検出し、適切な交換品が配備されて動作可能になるまで、故障したサービスコンピューティングデバイス102によって以前に実行されていた1又は複数のプロセスを自動的に実行するように構成されてもよい。また、本明細書で開示されるコンポーネントの少なくともいくつかは、サービスコンピューティングデバイス102の他のものの故障にもかかわらず、中断されることなく機能し続けてもよい。
【0034】
いくつかの例では、サービスコンピューティングデバイス102の各々は、本明細書で説明されるストレージ割り当て及び重複排除をデータストレージシステム150に実行させるように構成された、サービスアプリケーション122、ソフトウェアファイルシステムマネージャ126、ハードウェアファイルシステムマネージャ128並びに/或いは他の実行可能コード及びデータ構造を含む。例えば、ハードウェアファイルシステムマネージャ128は、フリースペースアロケータ152及びメモリ154を含んでもよい。例えば、メモリ154は、典型的には、フリースペースビットマップ156と、ファイルシステム158の少なくとも一部分とを含んでもよい。例えば、ファイルシステム158は、コンピュータ可読媒体120に持続的に記憶され、ハードウェアファイルシステムマネージャ128の動作の間にメモリ154のキャッシュにロードされてもよい。フリースペースビットマップ156は、ビットマップ156のそれぞれのビットセットの各々がファイルシステム158における特定のそれぞれのファイルシステムブロックに対応する一連のビットであってもよい。一例として、ビットマップ156は、1つのファイルシステムブロックあたり8ビットのセットを含んでもよく、8ビットは、どれほどの数のメタデータDSがまとめてグループ化されて同じ特定のファイルシステムブロックに記憶されているか又はどれほどの数の小さな(すなわち、固定ブロックサイズより小さな)データファイルが特定のファイルシステムブロックに記憶されているかを示すために使用されてもよい。
【0035】
また、フリースペースビットマップ156のビットの数は有限であるため、ブロックが有することができるリファレンスの最大数が存在する。重複排除を実行してからその後にデータをブロックにグループ化する予定であれば、重複排除プロセスにより、リファレンスカウントがその最大値に達してしまう可能性がある。それは、ファイルシステムブロックが他のどれに対するそのファイルシステムブロックへのグループ化も行えずに、データグループ化が失敗することを意味することになる。同様に、重複排除プロセスにより、リファレンスカウントがその最大値にかなり近づくことになれば、そのファイルシステムブロックにグループ化できるものは他にあまりなく、データグループ化は部分的にしか成功しないことになる。しかし、本明細書のいくつかの実装形態は、常に、ファイルシステムブロックへのグループ化を最初に実行することができ、その結果、グループ化が常に成功し、重複排除が常に成功する。
【0036】
一例として、フリースペースアロケータ152は、1又は複数のフィールドプログラマブルゲートアレイ(FPGA)など、1又は複数のハードウェアコンポーネントを含んでもよい。例えば、FPGAは、ハードウェア記述言語(HDL)を使用して、本明細書で説明される動作を実行するように構成されてもよい。いくつかの例では、FPGAは、ソフトウェアファイルシステムマネージャ126と協働して本明細書で詳解されるアルゴリズムの少なくとも一部分を実行するようにHDLによって構成されたプログラマブル論理ブロックのアレイを含んでもよい。それに従って、サービスコンピューティングデバイス102は、ソフトウェアファイルシステムマネージャ126とハードウェアファイルシステムマネージャ128との間での処理の分割を通じて、スペース割り当てを実行してもよい。ソフトウェアファイルシステムマネージャ126は、オペレーティングシステム124の下で走らせる様々なソフトウェアコンポーネントを含む。ハードウェアファイルシステムマネージャ128は、メタデータ及びファイルデータの記憶のためにファイルシステムブロックを割り当てるためにフリースペースビットマップ156を使用するように構成されたフリースペースアロケータ152を含む。ハードウェア/ソフトウェアインタフェース160は、ソフトウェアファイルシステムマネージャ126とハードウェアファイルシステムマネージャ128との間の通信を可能にするために提供されてもよい。
【0037】
ソフトウェアファイルシステムマネージャ126は、ブロック割り当て及び重複排除がハードウェアファイルシステムマネージャ128の性能に与える影響を制御するために、ブロック割り当て及び重複排除機能をバックグラウンドで指示してもよい。ソフトウェアファイルシステムマネージャ126とハードウェアファイルシステムマネージャ128は両方とも、以下で詳解されるブロック割り当て及び重複排除を実行するために必要な処理及び通信の量を低減するための様々な最適化を含んでもよい。いくつかの例では、ファイルシステム158は、複数の異なる小さな(例えば、ファイルシステムブロックの固定サイズより小さな)データファイルからのデータを単一のファイルシステムブロックにグループ化できるようにするために、フリースペースビットマップ156にリファレンスカウントを含むように構成されてもよい。同様に、複数の異なるメタデータデータ構造(メタデータDS)は単一のファイルシステムブロックにグループ化され得る。さらに、いくつかの例は、ファイルデータを他の無関係のファイルデータと共に単一のファイルシステムブロックにグループ化してもよく、また、メタデータを他の無関係のメタデータと共に単一のファイルシステムブロックにグループ化してもよい。例えば、ファイルシステムフリースペースビットマップ156のリファレンスカウントは、複数の異なる小さなファイルからのデータを単一のファイルシステムブロックにグループ化されるようにするために使用されてもよい。
【0038】
同様に、複数の異なるメタデータ構造(例えば、ルートメタデータDS及び中間メタデータDS)を単一のファイルシステムブロックにグループ化され得る。さらに、ファイルデータは、同じタイプのファイルデータと共にグループ化されてもよく、メタデータは、同じタイプのメタデータと共にグループ化されてもよく、それにより、より高いブロックストレージ密度を提供でき、リファレンスカウントを使用して、グループ化されたファイルデータの重複排除を可能にする。結果的に、以下で追加詳解されるように、本明細書の技術及び配置は、記憶容量の実質的な節約を達成し得る。
【0039】
データストレージシステム150は、
図1に示される特定の構成に限定されない。この構成は、説明に役立てる目的のためだけに含まれている。本明細書の様々な例は、本明細書で説明されるプロセス及び機能を実行するように構成された、多様なハードウェアコンポーネント、ソフトウェアコンポーネント、及び、ハードウェアコンポーネントとソフトウェアコンポーネントの組合せを利用する。さらに、いくつかの例では、上記で説明されたハードウェアコンポーネントのいくつかは、仮想化されてもよい。例えば、サービスコンピューティングデバイス102のいくつか又はすべては、1又は複数のハードウェアプロセッサ116又はその一部分において動作する仮想マシンを含んでもよい。本明細書の開示の利益を享受する当業者には、他の多くのハードウェア及びソフトウェア構成が明らかであろう。従って、本明細書で開示される例の範囲は、特定のセットのハードウェア、ソフトウェア、又はそれらの組合せに限定されない。
【0040】
図2は、いくつかの実装形態に係るオブジェクト木構造200の例示的なフォーマットを示す。サービスコンピューティングデバイス102は、様々なタイプのオブジェクトをファイルシステム158に記憶してもよい。オブジェクトは、一般に、ファイルオブジェクト及びシステムオブジェクトとして分類されてもよい。ファイルオブジェクトは、テキストファイル、画像ファイル、マルチメディアファイル等のユーザデータ及び関連属性を記憶するために作成されてもよい。システムオブジェクトは、ファイルシステム158に対して情報を管理するために作成されてもよい。本明細書の例では、ファイルシステム158は、各記憶オブジェクトに対して作成された木構造200を使用して管理されてもよい。例えば、ルートメタデータDS202(「ルートノード」と呼ぶこともできる)は、ファイルデータブロックを直接指し示すか又は1若しくは複数の中間メタデータDS203を指し示し、それらの少なくとも1つは、ファイルデータブロックを直接指し示す、ポインタを含んでもよい。
【0041】
ファイルシステム158に記憶される各オブジェクトは、別個のルートメタデータDS 202を含む別個の木構造200を使用して記憶されてもよい。
図2の例では、ルートメタデータDS202は、間接メタデータDS204又は直接メタデータDS206であり得る中間メタデータDS203を指し示す。この例では、ルートメタデータDS202は、1又は複数の間接メタデータDS204を指し示し、その各々は、1又は複数の直接メタデータDS206を指し示してもよい。直接メタデータDS206は、オブジェクトデータを記憶するデータブロック208を直接指し示す。
【0042】
例えば、記憶されているデータのサイズに応じて、木構造200は、1又は複数の中間メタデータDS203を含んでもよく、中間メタデータDS203は、ファイルデータブロック208を直接指し示す直接メタデータDS206、又は、直接メタデータDS206若しくは他の間接メタデータDS204を指し示す間接メタデータDS204であってもよい。間接メタデータDS204が使用される場合は、ルートメタデータDS202は、間接メタデータDS204へのポインタを含む。間接メタデータDS204は、他の間接メタデータDS204へのポインタ又は直接メタデータDS206へのポインタを含んでもよい。
【0043】
直接メタデータDS206は、複数のデータブロック208を指し示す。実際には、オブジェクト木構造200は、記憶されているオブジェクトのサイズに応じて大きく異なり得る。また、特定のオブジェクトの木構造200は、オブジェクトへのデータの追加又はオブジェクトからのデータの削除に伴って、経時的に異なり得る。例えば、中間メタデータDS203及びデータブロック208は、オブジェクトデータの記憶のためのより多くのストレージスペースの使用に伴って、木構造200に動的に追加されてもよく、木200の拡大に伴って、必要に応じて、複数のレベルの間接メタデータDS204は使用されてもよい。
【0044】
一例として、ルートメタデータDS 202が固定バイト数(例えば、256、512、1024など)などの既定のサイズを有すると想定する。ルートメタデータDS202は、オブジェクトについての情報などの様々なメタデータを含んでもよく、また、ファイルシステムストレージ場所情報も含んでもよい。この例では、固定サイズのルートメタデータDS202により、ルートメタデータDS202は、オブジェクトデータの最大で16のデータブロック208を指し示すことができると仮定する。
【0045】
オブジェクトに対するオブジェクトデータが16データブロックより多くを含む際、1又は複数の直接メタデータDS206はデータブロック208を直接指し示すために使用されてもよく、間接メタデータDS 204が使用される場合、ルートメタデータDS202は、直接メタデータDS206又は間接メタデータDS204を指し示してもよい。いくつかの事例では、直接DS206及び間接DS204は、ルートメタデータDS202のサイズより大きい固定サイズのものであってもよい。例えば、ルートメタデータDSが512バイトである場合は、直接メタデータDS206及び間接メタデータDS204は1024バイトであってもよく、従って、直接メタデータDS206は、ルートメタデータDS202より多くのデータブロック208を指し示すことができてもよい。一例として、各直接メタデータDSは、例えば、60のデータブロック208を指し示してもよく、各間接メタデータDS204は、例えば、60の直接メタデータDS206を指し示すか又は合計で60の直接メタデータDS206とデータブロック208の組合せを指し示すことができる。例えば、ルートメタデータDSは、直接及び間接メタデータDSに含まれない追加のメタデータを含んでもよく、従って、ルートメタデータDSのサイズの2倍である直接及び間接メタデータDSは、ルートメタデータDSの2倍を超えるポインタを記憶することができる。従って、本明細書のファイルシステム158は、データオブジェクトの記憶のためのストレージ場所情報を提供するために、メタデータの木200を共に形成する異なる固定サイズのメタデータDSを使用してもよい。
【0046】
オブジェクトが記憶される予定である際、オブジェクトに対して、最初にルートメタデータDS202が作成される。そのような「空の」オブジェクトのルートメタデータDS202は、任意の中間メタデータDS203(すなわち、間接メタデータDS204又は直接メタデータDS206)へのポインタも、データブロック208へのポインタも有さない。オブジェクトに対するファイルデータの記憶に伴って、ファイルデータは、最初に、ルートメタデータDS202から直接指し示されているファイルデータブロック208に入れられてもよい。ルートメタデータDS202のすべての直接ブロックポインタが埋まった時点で、記憶すべきデータが依然として存在する場合は、1又は複数の中間メタデータDS203は、ルートメタデータDSから中間メタデータDS203へのポインタを用いて生成されてもよい。
【0047】
従来の固定ブロックサイズのファイルシステムは、固定ブロックサイズより小さなファイルデータがファイルシステムに記憶される際は常に、ストレージスペースを無駄にし得る。同様に、従来の固定ブロックサイズのファイルシステムは、メタデータDSが固定ブロックサイズより小さい場合にオブジェクトのメタデータDSがファイルシステムに記憶される際は常に、スペースを無駄にし得る。従って、本明細書の実装形態は、この無駄なスペースの量を低減するための配置及び方法を含む。一例として、本明細書のメタデータDS(すなわち、ルートメタデータDS202及び中間メタデータDS203)は、ファイルシステム158の固定ブロックサイズがメタデータDSの倍数であるように選択された、すなわち、ファイルシステムの固定ブロックサイズがルートメタデータDSサイズの倍数であり、中間メタデータDSサイズの異なる倍数であるように選択された、異なる固定サイズのものであってもよい。例えば、例として、ルートメタデータDS202が中間メタデータDS203の半分のサイズである場合は、ルートメタデータDS202の2倍が中間メタデータDS203として単一のファイルシステムブロックに収まり得る。
【0048】
いくつかの事例では、ルートメタデータDS202と中間メタデータDS203は両方とも、特定の数の各メタデータDS202、203がスペースを無駄にすることなく固定サイズのファイルシステムブロックに収まるようにサイズ指定されてもよい。例えば、ファイルシステムブロックサイズが32KiBである場合は、ルートメタデータDS200は、64のルートメタデータDSがスペースを無駄にすることなくファイルシステムブロックに収まるようなサイズになるように指定されてもよく、中間メタデータDS203は、例えば、32の中間メタデータDS203がスペースを無駄にすることなく単一のファイルシステムブロックに収まるように、ルートメタデータDSより大きなサイズになるように指定されてもよい。さらに、いくつかの例では、間接メタデータDS204は、直接メタデータDS206とは異なるサイズであってもよいが、両方とも、固定ブロック全体のサイズが間接メタデータDSと直接メタデータDSのサイズの倍数であるようなサイズになるように指定されてもよい。
【0049】
図2の例では、210に示されるように、ルートメタデータDS202は、他のルートメタデータDS(
図2には図示せず)と共に、32キロバイトのブロックなどの第1ファイルシステムブロックにグループ化されてもよい。さらに、212、214にそれぞれ示されるように、間接メタデータデータ構造204及び直接メタデータデータ構造206は、他の中間メタデータDS(
図2には図示せず)と共に第2ファイルシステムブロックにグループ化されてもよい。さらに、この例では、216に示されるように、オブジェクトデータは、複数のファイルシステムデータブロック208に広がり、データブロック208の各々が1つのファイルシステムブロックに対応するように複数のデータブロックの間で分割されており、最後のデータブロック208には、データは部分的にしか埋まっていない可能性が高い。
【0050】
図3及び4は、いくつかの実装形態に係る例示的なプロセスを示すフロー図である。プロセスは、動作の一連の順序を表す論理フロー図のブロックの集合体として示されており、それらのいくつか又はすべては、ハードウェア、ソフトウェア又はそれらの組合せにおいて実装され得る。ソフトウェアの文脈では、ブロックは、1又は複数のコンピュータ可読媒体に記憶されたコンピュータ実行可能命令を表してもよく、コンピュータ実行可能命令は、1又は複数のプロセッサによって実行されると、列挙される動作を実行するようにプロセッサをプログラムする。一般に、コンピュータ実行可能命令は、特定の機能を実行するか又は特定のデータタイプを実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。ブロックが説明されている順番は、制限されるものとして解釈すべきではない。説明されている数々のブロックは、任意の順番で及び/又は並列に組み合わせて、そのプロセス又は代替のプロセスを実施することができ、すべてのブロックを実行する必要があるわけでもない。詳解の目的のため、プロセスは、本明細書の例で説明される環境、システム及びデバイスを参照して説明されているが、プロセスは、他の多種多様な環境、システム及びデバイスにおいて実施されてもよい。
【0051】
図3は、いくつかの実装形態に係るストレージを割り当てるための例示的なプロセス300を示すフロー図である。いくつかの例では、プロセスは、サービスコンピューティングデバイス102の1又は複数のプロセッサ116によって実行されるソフトウェアファイルシステムマネージャ126と通信するハードウェアファイルシステムマネージャ128のフリースペースアロケータ152等によって、少なくとも部分的に実行されてもよい。
【0052】
302では、フリースペースアロケータ152は、データを記憶するためのファイルシステムのフリースペースを探してもよい。例えば、プロセス300は、受信データを記憶するためのスペースを探すための書き込み要求を受信し次第、実行されてもよい。例えば、メタデータデータ構造及び/又はファイルデータは、ファイルシステム158に記憶する必要があってもよい。或いは、プロセスは、管理者によって手動で開始されてもよく、スペースを解放できるかどうかを判断するために定期的になど、自動的に開始されてもよい。プロセス300を実行するため、フリースペースアロケータ152は、
図1に関して上記で詳解されたフリースペースビットマップ156をトラバースしてもよい。
【0053】
304では、フリースペースアロケータ152は、プロセスがルートメタデータDSを記憶するために実行されているかどうかを判断してもよい。該当する場合は、プロセスは、306に進む。該当しない場合は、プロセスは、312に進む。
【0054】
306では、プロセスがルートメタデータDSに対して実行されている場合に、フリースペースアロケータ152は、ルートメタデータDSのためのスペースが、既存のグループルートメタデータDS(MDDS)ファイルシステムブロックにあるかどうか、すなわち、1又は複数のルートメタデータDSが既に記憶されている既存のファイルシステムブロックにあるかどうかを判断してもよい。該当する場合は、プロセスは、308に進む。該当しない場合は、プロセスは、310に進む。
【0055】
308では、十分なスペースを有する既存のグループルートメタデータDSファイルシステムブロックがある場合に、コンピューティングデバイスは、既存のルートメタデータDSファイルシステムブロックにルートメタデータDSを記憶し、既存のグループルートメタデータDSファイルシステムブロックのリファレンスカウントを1つインクリメントする。上記で言及した通り、リファレンスカウントは、フリースペースビットマップ156から決定され、フリースペースビットマップ156においてインクリメントされ、どれほどの数のルートメタデータDSが既存のグループルートメタデータDSファイルシステムブロックに記憶されているかを示してもよく、その最大値は、ルートメタデータDSの既定のサイズ及びファイルシステムブロックの固定サイズに基づく。
【0056】
他方では、310において、十分なスペースを有する既存のグループルートメタデータDSファイルシステムブロックがない場合に、フリースペースアロケータ152は、新しいグループルートメタデータDSファイルシステムブロックを作成するためにフリーファイルシステムブロックを入手してもよく、新しいグループルートメタデータDSファイルシステムブロックにルートメタデータDSを記憶し、そのブロックに対するリファレンスカウントを1に設定する。
【0057】
312では、プロセスがルートメタデータDSに対して実行されていない場合に、フリースペースアロケータ152は、プロセスが中間メタデータDSに対して実行されているかどうかを判断してもよい。
【0058】
314では、プロセスが中間メタデータDSに対して実行されている場合に、フリースペースアロケータ152は、中間メタデータDSのためのスペースが、既存のグループ中間メタデータDSファイルシステムブロック、すなわち、1又は複数の直接/間接メタデータDSを有する既存のファイルシステムブロックにあるかどうかを判断するために、フリースペースビットマップ156をチェックしてもよい。
【0059】
316では、十分なスペースを有する既存のグループ中間メタデータDSファイルシステムブロックがある場合に、コンピューティングデバイスは、既存のグループ中間メタデータDSファイルシステムブロックに中間メタデータDSを記憶し、既存のグループ中間メタデータDSファイルシステムブロックのリファレンスカウントを1つインクリメントする。
【0060】
他方では、318において、十分なスペースを有する既存のグループ中間メタデータDSファイルシステムブロックがない場合に、コンピューティングデバイスは、新しいグループ中間メタデータDSファイルシステムブロックを作成するためにフリーブロックを入手し、新しいフリー中間メタデータDSファイルシステムブロックに中間メタデータDSを記憶し、そのブロックに対するリファレンスカウントに1を設定する。
【0061】
320では、プロセスがルートメタデータDSに対しても、中間メタデータDSに対しても実行されていない場合に、フリースペースアロケータ152は、プロセスが閾値サイズを超えないファイルデータに対して実行されているかどうかを判断してもよい。例えば、閾値サイズは、少なくとも、ファイルシステムブロックの固定ブロックサイズより小さいものであってもよい。ファイルデータが既定のサイズのものであるかどうかの判断は、ファイルシステムブロックのサイズの半分、又は、複数の異なるファイルからのファイルデータを同じファイルシステムブロックにグループ化するだけの価値があるようになるほど小さいなどファイルシステムブロックの固定ブロックサイズより小さいプリセットされたサイズ閾値に基づいてもよい。それが該当する場合は、プロセスは322に進む。該当しない場合は、プロセスは328に進む。
【0062】
322では、ファイルデータサイズが閾値より小さい場合に、フリースペースアロケータ152は、ファイルデータのためのスペースが、既存のグループファイルデータファイルシステムブロック、すなわち、その中に記憶された1又は複数の他のファイルに対するデータを有する既存のファイルシステムブロックにあるかどうかを判断してもよい。
【0063】
324では、十分なスペースを有する既存のグループファイルデータファイルシステムブロックがある場合に、フリースペースアロケータ152は、既存のグループファイルデータファイルシステムブロックにファイルデータを記憶し、既存のファイルデータファイルシステムブロックのリファレンスカウントを1つインクリメントしてもよい。
【0064】
他方では、326において、十分なスペースを有するグループファイルデータファイルシステムブロックがない場合に、フリースペースアロケータ152は、新しいグループファイルデータファイルシステムブロックを作成するためにフリーファイルシステムブロックを入手してもよく、新しいグループファイルデータファイルシステムブロックにファイルデータを記憶し、そのブロックに対するリファレンスカウントに1に設定する。
【0065】
他方では、328において、ファイルデータが閾値サイズより小さくない場合に、フリースペースアロケータ152は、ファイルデータを記憶するために使用するためのフリーファイルシステムブロックを入手してもよい。
【0066】
図4は、いくつかの実装形態に係るストレージを解放するための例示的なプロセス400を示す。いくつかの例では、プロセス400は、サービスコンピューティングデバイス102の1又は複数のプロセッサ116によって実行されるソフトウェアファイルシステムマネージャ126と通信するハードウェアファイルシステムマネージャ128のフリースペースアロケータ152又は同様のものによって、少なくとも部分的に実行されてもよい。
【0067】
402では、フリースペースアロケータ152は、ファイルシステムからのファイルの削除に基づいてなど、スペースを解放することができるかどうかを判断するためのプロセスを開始してもよい。
【0068】
404では、スペースを解放するためのプロセスを開始した後、フリースペースアロケータ152は、例えば、ルートメタデータDS及び/又は中間メタデータDSの削除のように、もはや別のブロックによって指し示されないことを理由などに、特定のファイルシステムブロックのリファレンスカウントをデクリメントしてもよい。
【0069】
406では、フリースペースアロケータ152は、特定のファイルシステムブロックに対するリファレンスカウントが現在ゼロであるかどうかを判断してもよい。それが該当する場合は、プロセスは410に進む。該当しない場合は、プロセスは408に進む。
【0070】
408では、リファレンスカウントがゼロでない場合に、ブロックは依然として使用中であり、従って、フリーとしては示されない。
【0071】
410では、リファレンスカウントがゼロである場合に、ブロックは、特定のブロックに対するフリースペースビットマップを更新すること、及び/又はフリーブロックリストにブロックを追加すること、及び/又は利用可能なファイルシステムブロックのプールにブロックを追加すること等によって、フリーであるとして示される。
【0072】
上記で言及した通り、フリースペースを管理するため、ファイルシステムは、フリースペースビットマップ156を使用してもよい。いくつかの例では、本明細書のファイルシステムは、各ファイルシステムブロックの状態を表すために8ビットを使用してもよく、また、ファイルデータの重複排除のためにも8ビットを使用してもよい。8ビットの特定の値は、重複排除された、すなわち、データのすべての重複は処分されており、単一の共通のブロックが残っている、データを含むブロックに対して、どれくらいの数のリファレンスが存在するかを示すために使用されてもよい。これは、リファレンスカウントとして知られている。データを含むブロックに対するリファレンスカウントは、1(すなわち、ファイルシステムのブロックに対してリファレンスが1つある)と何らかの最大値との間にあってもよい。最大値を超えるブロックの重複排除の試みは、新しいブロックが使用され、次いで、新しいブロックに対する重複排除が行われてもよい。
【0073】
本明細書の実装形態では、同じ8ビット値は、どれくらいの数のメタデータDSがグループルートメタデータDSファイルシステムブロック及び/又はグループ中間メタデータDSファイルシステムブロックにまとめてグループ化されているかを示すためにも使用される。例えば、ルートメタデータDSが512バイトである場合は、最大で64のルートメタデータDSは単一の32kBファイルシステムブロックにまとめてグループ化されてもよい。同様に、例えば、中間メタデータDSが1024バイトである場合は、最大で32の中間メタデータDSは単一の32kBファイルシステムブロックにまとめてグループ化されてもよい。
【0074】
図5は、いくつかの実装形態に係る記憶データのグループ化に基づいて記憶容量を節約する例500を示す。
図5には、複数のファイルシステムブロック502~514が示されている。ファイルシステムブロック502は、まとめてグループ化され、同じグループファイルシステムブロック502に記憶された、6つのルートメタデータDS A、B、C、D、E、及びFを含む。ルートメタデータDSはそれぞれ、6つの異なるファイルデータ、すなわち、ファイルデータA、ファイルデータB、ファイルデータC、ファイルデータE、及びファイルデータFを含む6つの異なるファイルオブジェクトA、B、C、D、E、Fに対応する。ファイルシステムブロック502に対するリファレンスカウントは、6である。ファイルシステムブロック504~514の各々は、ファイルシステムブロック502に記憶された6つのルートメタデータDS A~Fのそれぞれによって指し示されるか又は参照される1つのファイルデータを記憶する。各ファイルシステムブロック504~514の各々はファイルデータを1つのみ記憶するので、ファイルシステムブロック504~514の各々に対するリファレンスカウントは、示されるように、1である。例えば、ファイルシステムブロック504は、ファイルシステムブロック502のルートメタデータDS Aによって指し示されたファイルデータAを記憶し、ファイルシステムブロック506は、ファイルシステムブロック502のルートメタデータDS Bによって指し示されたファイルデータBを記憶し、ファイルシステムブロック508は、ファイルシステムブロック502のルートメタデータDS Cによって指し示されたファイルデータCを記憶し、ファイルシステムブロック510は、ファイルシステムブロック502のルートメタデータDS Dによって指し示されたファイルデータDを記憶し、ファイルシステムブロック512は、ファイルシステムブロック502のルートメタデータDS Eによって指し示されたファイルデータEを記憶し、ファイルシステムブロック514は、ファイルシステムブロック502のルートメタデータDS Fによって指し示されたファイルデータFを記憶する。
【0075】
上記で詳解されたように、いくつかの実装形態では、フリースペースビットマップ156の8ビット値は、各ファイルシステムブロックに対してそのファイルシステムブロックにどれくらいの数のデータ片がまとめてグループ化されているかを示すために使用されてもよい。例えば、ファイルシステムブロックポインタが512バイトの粒度を有する場合は、ポインタは、512バイトの解像度/粒度を有するブロックを指し示すことができるようにサイズ指定される。例えば、ブロック粒度が小さいほど、より大きなサイズのポインタが必要とされ、それにより、各ルート又は中間メタデータDSで、より大きなスペースを占めることになる。さらに、ブロックポインタ粒度が512バイトであり、ファイルシステムのブロックサイズが32kBである場合は、最大で64のデータ片(各サイズは最大で512バイトである)は単一のファイルシステムブロックにまとめてグループ化されてもよい。これらのデータ片は、最大で64のファイル(各ファイルデータの長さは最大で512バイトである)に対するもの、より少ない数のより大きなファイル(各長さはファイルシステムブロックサイズより短い)に対するもの、又は合計で最大32kBの任意の組合せに対するものであってもよい。
【0076】
データは、ファイルシステムブロックの割り当てに伴ってまとめてグループ化され得るため、重複排除は、データグループ化から独立して、割り当ての後に実行され得る。或いは、重複排除は、以下で論じられるように、割り当ての前に実行され得るが、これは、重複データを他のデータと共にグループ化される必要がないことを意味する。或いは、重複排除が実行されなくとも、ストレージスペースの節約は、より少ない数のファイルシステムブロックにデータをグループ化することによって、依然として実現される。
【0077】
図6は、いくつかの実装形態に係るメタデータDS及びデータのグループ化に基づいて記憶容量を節約する例600を示す。
図6では、ファイルシステムブロック602は、上記で詳解された
図5の例と同様に、6つの異なるファイルデータA~Fに対してまとめてグループ化された6つのルートメタデータDS A~Fを有する。その一方で、ファイルシステムブロック604は、まとめてグループ化され、それぞれのルートメタデータDS A~Fによって指し示された、6つの異なる対応するファイルデータA~Fを有する。この例では、ルートメタデータDSを他のルートメタデータDSと共にグループ化することにより、ファイルシステムブロック602がルートメタデータDSで完全に埋められると、ルートメタデータDSによって無駄になるスペースはなくなるが、ただし、ファイルシステム固定ブロックサイズがルートメタデータDSの固定サイズの倍数であることを条件とする。
【0078】
さらに、この例では、ファイルデータA~Fの各々は、
図3の320に関して上記で詳解された閾値サイズより小さく、ファイルデータA~Fの各々は、少なくともこれらの6つのファイルデータA~Fを単一のファイルシステムブロック604に収容できるほど十分に小さい。したがって、ファイルシステムブロック604に対するリファレンスカウントは、6である。ファイルデータA~Fは、可変サイズのものであってもよい。したがって、
図3のプロセスは、さらなるファイルデータをファイルシステムブロック604に追加できるかどうかを判断するために実行されてもよい。
【0079】
この例では、ブロック604は部分的にしか埋められていないと想定する。したがって、ブロック604の残りのスペース内に収まるファイルデータの記憶が必要である場合は、システムは、別のファイルデータをブロック604に追加してもよい。例えば、上記で詳解された
図3のプロセス300に基づいて、新しいファイルデータ片がブロック604の残りのスペースに収まらない場合は、本明細書の実装形態では新しいファイルデータ片は「分ける」ことをされないため、新しいブロックが使用される。それにもかかわらず、新しいファイルデータ片がより小さなそのファイルシステムブロックサイズであるサイズのものである場合は、部分的に埋まっているブロック604は現状のままで残され、新しいブロックが埋め尽くされて新しいデータセグメントを収められなくなるまで後続のファイルデータの記憶を試みるための代わりに新しいブロックは使用されてもよい。或いは、新しいブロックは、新しいファイルデータ片に対して使用されてもよいが、後続のファイルデータをグループ化するためには使用されず、代わりに、既存の部分的に埋まっているブロック604が続けて使用されてもよい。さらなる別の例として、システムは、ブロック604と新しいブロックの各々の利用可能なスペースの量に応じて、ブロック604と新しいブロックとの両方を埋めようと試みてもよい。したがって、本明細書の実装形態は、ファイルデータを最も効率的にグループ化するために、どのオプションが最も多くのスペースを節約するかに基づいて、ありとあらゆるデータセグメントに対してどのオプションを使用すべきかを動的に決定してもよい。
【0080】
図7は、いくつかの実装形態に係るグループ化されたデータの重複排除を含む例700を示す。
図7では、ファイルシステムブロック702は、上記で詳解された
図6の例と同様に、6つの異なるオブジェクト及び6つの対応する異なるファイルデータA~Fに対してまとめてグループ化された6つのルートメタデータDS A~Fを有する。さらに、ファイルシステムブロック704(1)は、第1の時点において、まとめてグループ化され、それぞれのルートメタデータDS A~Fによって指し示された、6つの異なる対応するファイルデータA~Fを有する。この例では、ルートメタデータDSを他のルートメタデータDSと共にグループ化することにより、ファイルシステムブロック702がルートメタデータDSで完全に埋められ次第、ルートメタデータDSによって無駄になるスペースはなくなるが、ただし、ファイルシステム固定ブロックサイズはルートメタデータDSの固定サイズの倍数であることを条件とする。
【0081】
この例では、第1の時点におけるファイルシステムブロック704(1)は、6のリファレンスカウントを有する。704(2)で示されるような第2の時点では、ファイルデータAは、別のファイルシステムブロック(
図7には図示せず)で記憶されている別のオブジェクトGに含まれ、別のルートメタデータDS Gによって指し示されたファイルデータGと同一であると想定する。したがって、同一のデータを他のファイルシステムブロックに維持するというよりむしろ、ファイルデータGは、ファイルシステムブロック704(2)のファイルデータAもまたルートメタデータDS Gによって指し示されるように、重複排除され得る。この追加のポインタに基づいて、ファイルシステムブロック704(2)のリファレンスカウントは、第2の時点では、7に増加される。
【0082】
同様に、704(3)で示されるような第3の時点では、ファイルデータAは、別のファイルシステムブロック(
図7には図示せず)で記憶されている別のオブジェクトHに含まれ、別のルートメタデータDS Hによって指し示されたファイルデータHと同一であると想定すると、この場合もやはり、リファレンスカウントは増加され得る。さらに、ファイルデータFは、別のファイルシステムブロック(
図7には図示せず)で記憶されている別のオブジェクトJに含まれ、別のルートメタデータDS Jによって指し示されたファイルデータJと同一であると想定する。したがって、ファイルシステムブロック704(3)に対して示されるような第3の時点では、リファレンスカウントは、9に増加されてもよい。ファイルシステムブロック704のリファレンスカウントは、ファイルシステムブロック704に含まれるファイルデータを指し示すルートメタデータDS(又は中間メタデータDS(
図7には図示せず))の数に応じて、増加され続けるか又は減少され続け得る。
【0083】
図8は、いくつかの実装形態に係る記憶データのグループ化に基づいて記憶容量を節約する例800を示す。
図8では、ファイルシステムブロック802は、6つの異なるファイルデータA~Fに対してまとめてグループ化された6つのルートメタデータDS A~Fを有し、この例では、オブジェクトAに対するファイルデータAの一部分のみが示されている。具体的には、この例では、オブジェクトAに対するファイルデータAは、3つのファイルシステムブロックより大きいと想定し、したがって、ファイルデータAの最初の3つの部分は、ファイルシステムブロック806、808、810にそれぞれ含まれるものとして示されている。具体的には、ファイルデータA(1)はファイルシステムブロック806に記憶され、ファイルデータA(2)はファイルシステムブロック808に記憶され、ファイルデータA(3)はファイルシステムブロック810に記憶される等である。
【0084】
さらに、この例では、複数の中間メタデータデータ構造は、グループ中間メタデータDSファイルシステムブロック804にまとめて記憶される。中間メタデータDSを他の中間メタデータDSと共にグループ化することにより、中間メタデータDSがグループファイルシステムブロック804を完全に埋め次第、中間メタデータDSによってスペースが無駄になることはなくなるが、ただし、固定ファイルシステムブロックサイズが中間メタデータDSサイズの倍数であることを条件とする。この例では、ブロック802に記憶されたルートメタデータDS Aは、ブロック804に記憶された中間メタデータDS A(1)を指し示すと想定する。同様に、ブロック802に記憶されたルートメタデータDS Bは、ブロック804に記憶された中間メタデータDS Bを指し示し、ブロック802に記憶されたルートメタデータDS Cは、ブロック804に記憶された中間メタデータDS Cを指し示す。さらに、この例では、中間メタデータDS A(1)は、同様にブロック804に記憶されている別の中間メタデータDS A(2)を指し示す。中間メタデータDS A(2)は、ファイルシステムブロック806に記憶されたファイルデータA(1)、ファイルシステムブロック808に記憶されたファイルデータA(2)、及びファイルシステムブロック810に記憶されたファイルデータA(3)を指し示す。したがって、
図2に関して上記で詳解されたように、中間メタデータDS A(1)は間接メタデータDSである一方で、中間メタデータDS A(2)は直接メタデータDSである。
【0085】
一例として、オブジェクトAが最初に記憶された際、最初は中間メタデータDS a(1)はファイルデータA(1)、A(2)、A(3)、…を指し示しているが、オブジェクトAへのさらなるデータの追加に伴って、中間メタデータDS A(2)はファイルデータA(1)、A(2)、A(3)、…を有するデータブロック806~810を指し示すように追加され、中間メタデータデータ構造A(1)は、データブロック806、808、810…というよりむしろ、中間メタデータデータ構造A(2)を参照するように変更されたと想定する。
【0086】
本明細書で説明される例示的なプロセスは、詳解の目的のために提供されるプロセスの単なる例である。他の多くの変形形態は、本明細書の開示を踏まえれば当業者に明らかであろう。さらに、本明細書の開示は、プロセスを実行するための適切なフレームワーク、アーキテクチャ及び環境のいくつかの例を記載しているが、本明細書の実装形態は、示され、詳解される特定の例に限定されない。その上、この開示は、説明され、及び図面で示されるように、様々な例示的な実装形態を提供する。しかし、この開示は、当業者に知られているように又は知られることになるように、本明細書で説明され及び示される実装形態に限定されず、他の実装形態まで拡張し得る。
【0087】
本明細書で説明される様々な命令、方法、及び技法は、コンピュータ可読媒体に記憶されるコンピュータプログラム及びアプリケーションなど、コンピュータ実行可能命令の一般的な文脈において考慮され得、本明細書のプロセッサによってされ得る。一般に、プログラム及びアプリケーションという用語は、交換可能に使用され得、特定のタスクを実行するか又は特定のデータタイプを実施するための、命令、ルーチン、モジュール、オブジェクト、コンポーネント、データ構造、実行可能コードなどを含んでもよい。これらのプログラム、アプリケーション等は、ネイティブコードとして実行されても、仮想マシン又は他のジャストインタイムのコンパイル実行環境においてダウンロードされ、実行されてもよい。典型的には、プログラム及びアプリケーションの機能は、様々な実装形態において要望通りに組み合わされても、分散されてもよい。これらのプログラム、アプリケーション、及び技法の実装形態は、コンピュータ記憶媒体に記憶されても、何らかの形態の通信媒体上で送信されてもよい。
【0088】
主題については、構造上の特徴及び/又は方法論的行為に特有の言語で説明してきたが、添付の特許請求の範囲において定義される主題は、必ずしも説明される特定の特徴又は行為に限定されるとは限らないことを理解されたい。むしろ、特定の特徴及び行為は、特許請求の範囲を実装する例示的な形態として開示される。
【国際調査報告】