(57)【要約】      （修正有）【課題】ストレージ内のオブジェクトのガーベッジコレクションのためのシステム及び方法を提供する。【解決手段】方法は、単調に増加する論理クロックを提供することを含む。各オブジェクトは、第１の数及び第２の数に関連付けられる。第２の数は、オブジェクトが参照するサブツリー内のオブジェクトの第１の数のうちの最小値である。論理クロックが増加するとき、論理クロックより小さい第１の数を有するオブジェクトがストレージから削除される。新しいオブジェクトがストレージに追加されるとき、新しいオブジェクトの第１の数は新しい第１の数に設定される。新しい第１の数は論理クロックに等しいか又はより大きい。新しいオブジェクトが参照するサブツリー内の各オブジェクトの第１の数が更新される。更新された第１の数は、前の第１の数と前の論理クロックとの関数である。【選択図】図３
2017045454.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ内のオブジェクトのガーベッジコレクションのための、コンピュータにより実施される方法であって、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第１の数に関連付けるステップと、
前記オブジェクトの各々を第２の数に関連付けるステップであって、前記第２の数は、さらなるオブジェクトに関連付けられた第１の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第１の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも１つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも１つの新しいオブジェクトに関連付けられた第１の数を新しい第１の数に設定するステップであって、前記新しい第１の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも１つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第１の数を更新するステップであって、前記の更新された第１の数は、各オブジェクトに関連付けられた第１の数と、該第１の数が設定された前記論理クロックの値との関数である、ステップと、
を含む方法。
【請求項２】
前記新しいサブツリー内の各オブジェクトの第１の数は、前記新しいサブツリーをトラバースすることと、前記新しい第１の数に等しいか又はより大きい第２の数を有する前オブジェクトにより参照される前記新しいサブツリー内の分岐をスキップすることとによって更新される、請求項１に記載の方法。
【請求項３】
前記第１の数を更新することは式UN=SW+2*(FN-SW)によって定義され、UNは前記更新された第１の数であり、FNは前記第１の数であり、SWは前記第１の数が設定された前記論理クロックの値である、請求項１に記載の方法。
【請求項４】
前記第１の数を設定する前にコンセンサスストア内に予約数を公開するステップであって、前記予約数は前記論理クロックより大きい、ステップ、をさらに含む請求項１に記載の方法。
【請求項５】
前記新しい第１の数は前記予約数に対してより大きいか又は等しい、請求項４に記載の方法。
【請求項６】
前記予約数は、ストレージに対するオブジェクトのさらなる追加に応答して前記コンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく、請求項４に記載の方法。
【請求項７】
前記論理クロックの増加は、前記の公開された予約数と前記さらなる予約数とのうちの最小値によって限定される、請求項５に記載の方法。
【請求項８】
前記少なくとも１つの新しいオブジェクトを前記ストレージに追加することに関連付けられた新しいルートを公開するステップ、をさらに含む請求項４に記載の方法。
【請求項９】
前記新しいルートが公開されていると決定するステップと、前記の決定に応答して、
前記論理クロックを、前記の公開された予約数と前記さらなる予約数とのうちの最小値に増加させるステップと、
前記新しいルートから到達可能な各オブジェクトの第１の数を更新するステップと、
をさらに含む請求項８に記載の方法。
【請求項１０】
前記の公開された予約数を前記コンセンサスストアから除去するステップ、をさらに含む請求項８に記載の方法。
【請求項１１】
ストレージ内のオブジェクトのガーベッジコレクションのためのシステムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに通信可能に結合されたメモリと、を含み、
前記メモリは命令を記憶し、前記命令は前記少なくとも１つのプロセッサにより実行されるときに、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第１の数に関連付けるステップと、
前記オブジェクトの各々を第２の数に関連付けるステップであって、前記第２の数は、さらなるオブジェクトに関連付けられた第１の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第１の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも１つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも１つの新しいオブジェクトに関連付けられた第１の数を新しい第１の数に設定するステップであって、前記新しい第１の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも１つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第１の数を更新するステップであって、前記の更新された第１の数は、各オブジェクトに関連付けられた第１の数と、該第１の数が設定された前記論理クロックの値との関数である、ステップと、
を含む方法を実行する、システム。
【請求項１２】
前記新しいサブツリー内の各オブジェクトの第１の数は、前記新しいサブツリーをトラバースすることと、前記新しい第１の数に等しいか又はより大きい第２の数を有する前オブジェクトにより参照される前記新しいサブツリー内の分岐をスキップすることとによって更新される、請求項１１に記載のシステム。
【請求項１３】
前記第１の数を更新することは式UN=SW+2*(FN-SW)によって定義され、UNは前記更新された第１の数であり、FNは前記第１の数であり、SWは前記第１の数が設定された前記論理クロックの値である、請求項１１に記載のシステム。
【請求項１４】
前記方法は、前記第１の数を設定する前にコンセンサスストア内に予約数を公開するステップであって、前記予約数は前記論理クロックより大きい、ステップをさらに含む、請求項１１に記載のシステム。
【請求項１５】
前記新しい第１の数は前記予約数に対してより大きいか又は等しい、請求項１４に記載のシステム。
【請求項１６】
前記予約数は、ストレージに対するオブジェクトのさらなる追加に応答して前記コンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく、請求項１４に記載のシステム。
【請求項１７】
前記論理クロックの増加は、前記の公開された予約数と前記さらなる予約数とのうちの最小値によって限定される、請求項１５に記載のシステム。
【請求項１８】
前記方法は、前記少なくとも１つの新しいオブジェクトを前記ストレージに追加することに関連付けられた新しいルートを公開するステップをさらに含む、請求項１４に記載のシステム。
【請求項１９】
前記方法は、前記新しいルートが公開されていると決定するステップと、前記の決定に応答して、
前記論理クロックを、前記の公開された予約数と前記さらなる予約数とのうちの最小値に増加させるステップと、
前記の公開された予約数を前記コンセンサスストアから除去するステップと、
前記新しいルートから到達可能な各オブジェクトの第１の数を更新するステップと、
をさらに含む、請求項１８に記載のシステム。
【請求項２０】
１つ以上のプロセッサにより実行されるときにストレージ内のオブジェクトのガーベッジコレクションのための方法を実行する命令を具現化させた非一時的コンピュータ読取可能記憶媒体であって、前記方法は、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第１の数に関連付けるステップと、
前記オブジェクトの各々を第２の数に関連付けるステップであって、前記第２の数は、さらなるオブジェクトに関連付けられた第１の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第１の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも１つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも１つの新しいオブジェクトに関連付けられた第１の数を新しい第１の数に設定するステップであって、前記新しい第１の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも１つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第１の数を更新するステップであって、前記の更新された第１の数は、各オブジェクトに関連付けられた第１の数と、該第１の数が設定された前記論理クロックの値との関数である、ステップと、
を含む、非一時的コンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、2015年8月24日に申請された米国仮出願第62/209,1925号の優先の利益を主張する。前述された出願の開示は、すべての目的について本明細書において参照により援用される。
【０００２】
本開示は、概してデータに関し、より具体的にはガーベッジコレクションの方法及びシステムに関する。
【背景技術】
【０００３】
本セクションに説明されるアプローチは、追求されたことがある可能性があるが、必ずしもこれまでに着想され、あるいは追求されてきたアプローチではない。それゆえに、他に示されない限り、本セクションに説明されるアプローチのいずれも、単に本セクションに含まれるという理由で従来技術と見なすと仮定されるべきではない。
【０００４】
コンピュータファイルシステムは、大抵、オブジェクト及びこれらオブジェクトを指し示す参照として構築される。オブジェクトは、オブジェクトストア内に位置する。オブジェクトは、該オブジェクトを指し示す多くの参照を有することができ、さらに、オブジェクト自体が、他のオブジェクトを指し示す参照を保有することができる。ゆえに、典型的に、データはデータオブジェクトのグラフとして、より具体的には有向非巡回グラフとして編成される。様々な記憶装置のリソースを効率的に利用するために、もはや必要とされないオブジェクトを除去する手順をセットアップすることが重要である。
【０００５】
イミュータブルデータストアのためのファイルシステムを構築することは、最終的に、廃れたデータを削除することと、該データに関連付けられた記憶空間を回収することとを伴い得る。空間を決して回収せず、必要とされるとおり新しいストレージを単に追加することは、同様に利用されることが可能なアプローチである。このアプローチは多数の利点を有しており、そのうち少なくないのが、その簡素さである。しかしながら、このアプローチは、商業製品に対して実際的でない。
【０００６】
さらに、スナップショット（ファイルシステムのバージョン）の大規模な使用とデータの重複排除とは、所与のオブジェクトが依然として使用されているかどうかを決定することを伴い、フルのオブジェクトグラフの解析を必要とする。
【０００７】
ガーベッジコレクション（ＧＣ）といわれる特別な手法を適用して、オブジェクトグラフを解析して、他のオブジェクトによってもはや参照されないオブジェクトを見つけ、除去することができる。いくつかの伝統的なＧＣ手法は、マーク及びコレクション手法を使用して、参照されないオブジェクトをオブジェクトストアから除去し、データオブジェクトストアが位置するメモリ、ハードディスク、又は他の記憶装置の中の空間を回収する。
【発明の概要】
【０００８】
本発明の概要は、以下に詳細な説明においてさらに説明される概念のうち選択されたものを簡素化された形式において導入するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲を決定することの助けとして用いられるべきものでもない。
【０００９】
本明細書に開示されるテクノロジーは、ストレージ内のオブジェクトのガーベッジコレクションのシステム及び方法に関する。オブジェクトは、ファイルシステムを表現し得る。一例示的な方法が、論理クロックを提供することを含む。論理クロックは、単調に増加するように構成される。方法は、オブジェクトの各々を第１の数に関連付けることを含む。方法は、オブジェクトの各々を第２の数に関連付けることを可能にする。第２の数は、さらなるオブジェクトに関連付けられた第１の数のうちの最小値であり、さらなるオブジェクトは、オブジェクトが参照するサブツリーに属する。論理クロックが増加するとき、方法は、論理クロックより小さい第１の数を有するオブジェクトをストレージから削除することを含む。少なくとも１つの新しいオブジェクトがストレージに追加されるとき、方法は、新しいオブジェクトに関連付けられた第１の数を新しい第１の数に設定することを含み、新しい第１の数は、論理クロックに対して等しいか又はより大きい。方法は、新しいオブジェクトが参照している新しいサブツリー内の各オブジェクトの第１の数を更新することを可能にし、更新された第１の数は、各オブジェクトに関連付けられた第１の数と該第１の数が設定された論理クロックの値との関数である。
【００１０】
いくつかの実施形態において、新しいサブツリー内の各オブジェクトの第１の数は、新しいサブツリーをトラバースすることと、新しい第１の数に等しいか又はより大きい第２の数を有する前オブジェクトにより参照される新しいサブツリー内の分岐をスキップすることとによって、更新される。
【００１１】
特定の実施形態において、第１の数は、式UN=SW+2*(FN-SW)によって更新される。これにおいて、UNは更新された第１の数であり、FNは第１の数であり、SWは、第１の数が設定された論理クロックの値である。
【００１２】
いくつかの実施形態において、新しいオブジェクトに関連付けられた第１の値を設定する前に、上記方法は、コンセンサスストア内に予約数（reservation  number）を公開することを含む。予約数は、論理クロックより大きい。特定の実施形態において、新しい第１の数は、予約数に対してより大きいか又は等しい。いくつかの実施形態において、予約数は、ストレージに対するさらなるオブジェクトのさらなる追加に応答してコンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく。
【００１３】
いくつかの実施形態において、論理クロックの増加は、公開された予約数とさらなる予約数とのうちの最小値によって限定される。
【００１４】
いくつかの実施形態において、上記方法は、新しいオブジェクトをストレージに追加することに関連付けられた新しいルートを公開することをさらに含む。
【００１５】
いくつかの実施形態において、上記方法は、新しいルートが公開されていると決定することを可能にする。この決定に応答して、方法は、論理クロックを、公開された予約数とさらなる予約数とのうちの最小値に増加させることと、公開された予約数をコンセンサスストアから除去することと、新しいルートから到達可能な各オブジェクトの第１の数を更新することとを含む。
【００１６】
本開示のさらなる例示的な実施形態において、上記方法ステップが、命令を含むマシン読取可能媒体上に記憶され、上記命令は、１つ以上のプロセッサにより実施されるときに列挙されたステップを実行する。またさらなる例示的な実施形態において、ハードウェアシステム又は装置が、列挙されたステップを実行するように適合されることが可能である。他の特徴、例、及び実施形態が、以下に説明される。
【図面の簡単な説明】
【００１７】
実施形態は、添付図面の図において限定ではなく例として例示され、同様の参照は類似の要素を示す。
【図１】ファイルシステムを表現するオブジェクトのグラフの一例を表すブロック図である。
【図２】ＧＣシステムのコンポーネントを示すブロック図である。
【図３】波動タイムクロックとオブジェクトストア内のオブジェクトに対する波動の影響との概略表現である。
【図４】オブジェクトに関連付けられたマークを示すブロック図である。
【図５】一例示的な実施形態に従う、ＧＣシステムのモジュールの相互作用を示す処理フロー図である。
【図６】一例示的なオブジェクトツリーと、ミューテータ波動で更新されたオブジェクトツリーとを示すブロック図である。
【図７】一例示的なオブジェクトツリーと、ミューテータ波動で更新されたオブジェクトツリーと、マーカで更新されたオブジェクトツリーとを示すブロック図である。
【図８】コンピュータシステムの例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の１つ以上をマシンに実行させる命令セットが実行されることができる。
【発明を実施するための形態】
【００１８】
下記の詳細な説明は添付図面に対する参照を含み、添付図面は本詳細な説明の一部を形成する。図面は、例示的な実施形態に従い例示を示す。こうした例示的な実施形態は、本明細書において「例」とさらに呼ばれ、十分詳細に説明されて、当業者が本対象事項を実施することを可能にする。実施形態は組み合わせられてもよく、他の実施形態が利用されてもよく、あるいは、構造的、論理的、及び電気的な変更が、請求されるものの範囲から逸脱することなく行われてもよい。ゆえに、下記の詳細な説明は、限定的な意味においてとられるべきではなく、その範囲は、別記の請求項及びその均等物によって定義される。本文献において、特許文献において一般的であるとおり、用語“ａ”及び“ａｎ”は、１つ又は１つより多くを含むように使用される。本文献において、用語「又は」は、非排他的な「又は」を参照するように使用され、したがって、別段指示されない限り、「Ａ又はＢ」は、「ＢでなくＡ」、「ＡでなくＢ」、及び「Ａ及びＢ」を含む。
【００１９】
本明細書に開示される実施形態の手法は、様々なテクノロジーを用いて実施されることができる。例えば、本明細書に説明される方法は、コンピュータシステム上で実行されるソフトウェアにおいて、あるいは、マイクロプロセッサの組み合わせ、又は他の特別に設計された特定用途向け集積回路（ＡＳＩＣ）、プログラマブルロジック装置、若しくはこれらの様々な組み合わせのいずれかを利用するハードウェアにおいて実施されることができる。具体的に、本明細書に説明される方法は、ディスクドライブ又はコンピュータ読取可能媒体などの記憶媒体上に存在する一連のコンピュータ実行可能命令によって実施されてもよい。本明細書に開示される方法は、コンピュータ（例えば、デスクトップコンピュータ、タブレットコンピュータ、ラップトップコンピュータ）、ゲームコンソール、ハンドヘルドゲーミング装置、セルラーフォン、スマートフォン、スマートテレビジョンシステムなどによって実施され得ることが留意されるべきである。
【００２０】
本明細書に開示されるテクノロジーは、ファイルシステム内のガーベッジコレクションに関する。ファイルシステムは、ストレージ内の変えられない（イミュータブル）オブジェクト（immutable  objects）のコレクションとして編成されることが可能であり、各オブジェクトは、ファイルシステム内のファイル又はディレクトリエントリの部分を表現する。
【００２１】
本開示の一例示的な実施形態に従い、ストレージ内のオブジェクトのガーベッジコレクションのための方法が、論理クロックを提供することを含む。論理クロックは、単調に増加するように構成される。方法は、オブジェクトの各々を第１の数に関連付けることを含む。方法は、オブジェクトの各々を第２の数に関連付けることを可能にする。第２の数は、さらなるオブジェクトに関連付けられた第１の数のうちの最小値であり、さらなるオブジェクトは、オブジェクトが参照するサブツリー（subtree）に属する。論理クロックが増加するとき、方法は、論理クロックより小さい第１の数を有するオブジェクトをストレージから削除することを含む。少なくとも１つの新しいオブジェクトがストレージに追加されるとき、方法は、新しいオブジェクトに関連付けられた第１の数を新しい第１の数に設定することを含み、新しい第１の数は、論理クロックに対して等しいか又はより大きい。方法は、新しいサブツリーをトラバースする（traversing）ことによって、新しいオブジェクトが参照している新しいサブツリー内の各オブジェクトの第１の数を更新することを可能にする。更新された第１の数は、各オブジェクトに関連付けられた第１の数と、該第１の数が設定された論理クロックの値との関数である。新しいサブツリーをトラバースする間、方法は、新しい第１の数に等しいか又はより大きい第２の数を有する前オブジェクト（previous  objects）により参照される新しいサブツリー内の分岐をスキップすることを可能にする。
【００２２】
データモデル
特定の実施形態において、ファイルシステムのデータは、データオブジェクトのグラフとして表現される。いくつかのデータオブジェクトは、他のデータオブジェクトに対するポインタを保有することができる。同時に、データオブジェクトは、該データオブジェクトを指し示すいくつかの他のデータオブジェクトによって参照されることが可能である。すべてのオブジェクトは、オブジェクトストア内に位置する。
【００２３】
図１は、オブジェクト１０２〜１１６の一例示的なグラフ１００を示すブロック図である。例示されるグラフ１００は、オブジェクトについての２つの重なったツリーを含む。第１のツリーはルート１０２で始まり、第２のツリーはルート１０４で始まる。ルート１０２は、ファイルシステムのより早いバージョンに対応することが可能であり、ルート１０４は、第１のバージョンに対する修正が実施された後の、ファイルシステムのより後のバージョンに対応することが可能である。オブジェクト１０２〜１１６の各々は、マーク４１０で属性を付けられる（attributed）ことが可能である。マーク４１０がＧＣ処理によって使用されて、古い（より早期の）オブジェクトをオブジェクトストアからの除去の候補として決定し、メモリ、ハードディスク、及びクラスタ内の古いオブジェクトにより予約されたメモリを回収する（reclaiming）ことができる。
【００２４】
ガーベッジコレクションシステム
図２は、一例示的な実施形態に従う、ＧＣシステム２００のコンポーネントを示すブロック図である。ＧＣシステム２００は、少なくとも１つのマーク付け器（マーカ）２１０、少なくとも１つの変化器（ミューテータ）（mutator）２２０、及び少なくとも１つの一掃器（スィーパ）（sweeper）２３０を含むことができる。モジュール２１０、２２０、及び２３０の各々は、その残りとは実質的に独立してオブジェクトストアと相互作用することができる。モジュール２１０、２２０、及び２３０の各々は、モジュールが維持しなければならないいくつかの不変性（invariant）を含み、このことは、広範なポリシーが異なる動作トレードオフを作り出すことを可能にする。
【００２５】
いくつかの実施形態において、ＧＣシステム２００は下記の特徴を含む：
１）同時的  −  マーカ２１０、ミューテータ２２０、及びスィーパ２３０は、最小限の同期で同時的に実行されるように動作可能である；
２）増分的  −  マーカ２１０は、事前のマークとは異なるオブジェクトに対して接触し及び更新する必要しかない；
３）世代的  −  直近のオブジェクトがより古いものから区分されて、世代仮説（generational  hypothesis）の利点を活かすことができる。世代仮説は、直近のオブジェクトがすぐにごみ（ガーベッジ）になる最も見込みのある候補であることを言明する。
【００２６】
波動
本開示の様々な実施形態に従い、波動（Wave）は、ＧＣシステムの時間基準を形成する論理クロックである。波動は、すべての他の論理クロック（例えば、ファイルシステムのスナップショットなど）から独立であり、ただし、これらと相互作用することができる。
【００２７】
いくつかの実施形態において、変数２５０が、さらに現在の波動２５０ともいわれ、ＧＣシステム２００に関連付けられることが可能である。いくつかの実施形態において、現在の波動２５０はクラスタ幅の合意された値である。現在の波動２５０は、ＧＣシステム２００の現在のステートを表現することができる。現在の波動２５０は、単調に増加するように構成されることが可能である。
【００２８】
図３は、一例示的な実施形態に従う、波動タイムクロック３１０と、オブジェクトストア２３０内のオブジェクトに対する波動の影響とを示す概略である。いくつかの実施形態において、マーカ２１０がオブジェクトグラフをトラバースし、現在の波動２５０より大きい波動を有するグラフ内の各オブジェクトをマーク付けする。ミューテータ２２０は、現在の波動２５０より大きい波動を有する新しいオブジェクトを作成する。これら変更のすべてが、クラスタコンセンサスストア（cluster  consensus  store）内に公開されることが可能である。
【００２９】
様々な実施形態に従い、オブジェクトストア内の各オブジェクトは、波動（さらに、マーク又は「マーク波動」といわれる）でマーク付けされる。オブジェクトストア３２０からのオブジェクトが現在の波動２５０と比較されて、オブジェクトが生きている（alive）かどうかを決定することができる。現在の波動２５０に等しいか又はより大きいマークを有するオブジェクト３４０が、生きていると考えられる。現在の波動より小さいマークを有するオブジェクト３６０は、死んでいると考えられる。
【００３０】
いくつかの実施形態において、ミューテータ２２０は、ミューテータ予約波動（reservation  wave）３３０を公開する。ミューテータ予約波動３３０は、マーカ２１０に対してまだ可視でないオブジェクト３５０の波動マークについての下限（lower  bound）を示す。ミューテータ予約波動３３０は、オブジェクトが書き込まれるときに該オブジェクトに対して付与されるマークを表現する。ミューテータ２２０により書き込まれるマークは、現在の波動２５０より大きい。
【００３１】
いくつかの実施形態において、現在の波動２５０は、ＧＣシステム２００のための主要な論理クロックを表す。ミューテータ予約波動３３０は、オブジェクト（ブロック）が書き込まれるときに該オブジェクト（ブロック）に対して提供される。ミューテータ予約波動３３０は、現在の波動２５０に対してより大きいか又は等しく、次の波動に対してより大きいか又は等しくなければならない。最小予約（“minresv”）波動は、マーカ２１０がいったん実行を開始すると、除去される。最小予約波動は、直近に書き込まれたマーク付けされていないオブジェクトを保護することに必要とされる。
【００３２】
オブジェクト
本開示において使用される用語「オブジェクト」は、コンテンツアドレス可能データ（content-addressable  data）の特定部分の複製のコレクションを参照し、各複製は、その独自の独立したマーカ／波動メタデータセットを有するように仮定される。一貫性のある又はコヒーレントなメタデータを有するための、オブジェクトの複製に対する要件はない。しかしながら、２つ以上の複製がメタデータを共有する場合、「単調に増加する」不変性が維持される限りにおいて、問題はない。表現「オブジェクト上にマーク波動を設定する」は、「オブジェクトのすべての複製上にマーク波動を設定する」を簡潔にしたものである。
【００３３】
さらに、モジュール（例えば、マーカ２１０）が、あるオブジェクトの特定の複製上にステートを設定することを要し、しかしこのオブジェクトが存在しない場合、該ステートをその初期ステートとして有するオブジェクトを作成することが合理的である。同様に、モジュールが、予期される箇所内にオブジェクトのいかなる複製も見つけることができない場合、このモジュールは、複製を見つけるためにすべてのあり得る場所を検索することができる。
【００３４】
いくつかの実施形態において、オブジェクトストアからのオブジェクトは、少なくとも３つの数を用いてマーク付けされることが可能である。図４は、オブジェクト４００とそのマークとのブロック図である。マーク４１０がＧＣシステム２００によって使用されて、オブジェクトが生きているかどうかが決定される。サブグラフ（subgraph）（ＳＧ）マーク４２０は、オブジェクト４００が参照する子オブジェクト、該子オブジェクトが参照するオブジェクト、などのマーク４１０のうちの最小値である。換言すると、ＳＧマーク４２０は、オブジェクト４００から開始して下に移動することによって到達されることが可能なオブジェクトのマーク４１０のうちの最小値である。設定波動（ＳＷ）マーク４３０は、オブジェクト４００がマーク付けされた瞬間における現在の波動２５０の値に設定される。マーカ２１０がオブジェクトを更新するとき、ＳＷマーク４３０が使用されてマーク４１０のための新しい値を算出することができる。
【００３５】
図５は、一例示的な実施形態に従う、ＧＣシステムのモジュール間の相互作用５００を示すフローチャートである。いくつかの実施形態において、ＧＣシステムのモジュール（すなわち、図２のマーカ２１０、ミューテータ２２０、及びスィーパ２３０）は、その独自のサイクルを実行するように構成される。
【００３６】
スィーパ／オブジェクトストレージ
いくつかの実施形態において、スィーパ２３０は、ブロック５１４において現在の波動２５０を読み出すように構成される。ブロック５１６において、スィーパは、現在の波動２５０より小さいマーク４１０を有するオブジェクトを削除するようにさらに構成される。
【００３７】
スィーパ２３０は、下記の不変性：
１）スィーパ２３０は、現在の波動より大きいか又は等しい波動でマーク付けされたすべてのオブジェクトを存続させる；及び
２）所与の波動を書き込まれたオブジェクトを受け取るとき、スィーパ２３０は、既存オブジェクトの波動を自動的に調整するか、あるいは上記所与の波動を有するオブジェクトの新しいコピーを書き込むかのいずれかをする
によって制約されるように構成される。
【００３８】
様々な実施形態において、あらゆる個々の記憶装置が、その独自の独立したスィーパ２３０を実行することができる。スィーパ２３０は、記憶装置上に存在するすべてのオブジェクトをトラバースし、現在の波動についてのスィーパの視野で、マーク付けされている任意のオブジェクトにより消費される空間を解放する。スィーパ２３０は、現在の波動２５０より大きいか又は等しい波動を有するすべてのオブジェクトを保全し、その残りを回収することができる。
【００３９】
スィーパ２３０は、新しいブロックのストレージと競争する可能性がある。ブロックが古く、回収される処理中である場合、同じコンテンツの新しいインスタンスが新しい波動を書き込まれ、記憶装置は、既存オブジェクトが回収されることを防止してオブジェクトのマーク付けされた波動を更新するか、あるいは、オブジェクトの新しいコピーを書き込んで古いものが回収されることを可能にするかのいずれかをする。
【００４０】
スィーパ２３０は、読み出し要求に応答するとき、オブジェクトの現在の波動を考慮しなくてもよい。いくつかの実施形態において、読み出しは、現在の波動より小さいマーク波動を有するオブジェクトについて成功する場合がある。ゆえに、成功のオブジェクト読み出しは、装置が該オブジェクトを実際に記憶させていることの指標ではない。装置がオブジェクトのコピーを有すると保証するための唯一の方法は、現在のマークをそれに書き込み、あるいは、既存オブジェクト上に現在のマークを成功裏に設定することである。
【００４１】
不変性の制約内で、スィーパ２３０は、異なるポリシーを実施するための幅広い自由度を有する。ポリシーのうち１つが、オブジェクトをスキャンして生存性を決定するレートのidに関係する。大部分が空きであるストレージは、空間を解放することについて心配する必要なく、書込みを単に受け入れることができる。一方、ストレージがいっぱいに近づくとき、このストレージは、空間を解放することにリソースを費やして、ライタにバックプレッシャー（back-pressure）を適用することができる。スィーパ２３０は、該スィーパが波動により各オブジェクトを索引付けする表を維持する場合、回収可能空間についてスキャンする必要がなくてもよく、これにより、スィーパ２３０は、回収可能である空間を直接識別し及び回集することが可能にされる。
【００４２】
スィーパ２３０は、世代的なスキームを実施することをさらに選んでもよい。オブジェクトが、現在の波動をあまり越えないマークを書き込まれる場合、このことは、オブジェクトが長い寿命を有するように予期されないことを暗示する。こうしたオブジェクトは、該オブジェクトがメインのストレージプールに対して昇格されるほど十分に長く生き残らないかぎり、及びそうなるまで、若いオブジェクト領域の中に隔離される。
【００４３】
装置統合
ストレージを含むように事前に使用され、しかし除去された装置が、再導入されるとき、この装置を扱うためのいくつかのオプションが存在する。この装置上にのみ記憶された生きているオブジェクトがない場合、即座に一掃（スィーピング）を有効にすることは悪い影響を有さないことになる。
【００４４】
しかしながら、装置が、失われたオブジェクトの最後のコピーを該装置上に有する可能性がある場合、装置上のすべてのオブジェクトが配慮される（accounted  for）まで、この装置上でのスィーピングはおそらく無効にされるべきである。一般に、このことはおそらく、オブジェクトをあちこちに動かす間に新しい装置を収容するいかなる装置挿入に対しても、良い発想である（既存オブジェクトの再複製等）。スィーパ２３０がディスク帯域幅について競合しないように、上記のことが行われるまで、スィーパ２３０を無効にすることが最良であろう。
【００４５】
ミューテータ
引き続き図５を参照すると、ブロック５０２において、ミューテータ２２０は、次の波動を読み出し、現在の波動２５０より大きいミューテータ予約波動３３０を公開するように構成されることが可能である。ブロック５０４において、ミューテータ２２０は、ミューテータ予約波動３３０に等しいか又はより大きいマーク波動を有するオブジェクトを書き込むように動作可能である。ブロック５０６において、ミューテータ２２０は、グラフルートを公開する。
【００４６】
様々な実施形態において、ミューテータ２２０は、下記の不変性：
１）ミューテータ２２０は、現在の波動２５０より大きいミューテータ予約波動３３０を公開する；
２）ミューテータ２２０は、すべての新しいオブジェクトを書き込み、あるいは、そのミューテータ予約波動より大きいか又は等しいマーク波動を有する既存のオブジェクトを更新する；及び
３）ミューテータ２２０は、そのミューテータ予約波動を、新しいオブジェクトグラフルートを公開した後にのみ除去する
に準拠する。
【００４７】
様々な実施形態において、ミューテータ２２０は、クライアント要求に応答して新しいオブジェクトを生成し、ガーベッジを生成するエンティティである。ミューテータ２２０はハッシュを周期的に公開し、このハッシュはグラフのルートであり、マーカ２１０はこのグラフをトレースして、すべての参照されるオブジェクトを見つけることができる。これらルートの公開の間、ミューテータ２２０は、マーカ２１０に対して可視でないいかなるオブジェクトも適切に高い波動ですでにマーク付けされて、これらをスィーパ２３０から保護することと、マーカ２１０が上記波動を越えて現在の波動を前進させないこととを確実にしなければならない。
【００４８】
ゆえに、各ミューテータ２２０は下記を公開する：
１）ミューテータ予約波動。最も低い波動であり、これを用いてミューテータは新しいオブジェクトをタグ付けし（ただし、ミューテータはより高いものを選んでもよい）、ゆえに、マーカが設定することができる何らかの現在の波動に対する下限を設定する。ミューテータ予約波動は現在の波動２５０より大きい；
２）マーカ２１０がスキャンを開始するための、オブジェクトグラフに対する最も直近のルートのオブジェクト識別（ＩＤ）；
３）現在の波動及び次の波動。これらから、ミューテータ２２０はミューテータ予約波動を決定する。ミューテータ予約波動は現在の波動より大きく、次の波動に影響される可能性がある。
【００４９】
アクティブなミューテータ２２０がミューテータ予約波動を常時公開しなければならず、ミューテータ予約波動はマーカ２１０とのインターロックを形成して、マーカ２１０が現在の波動を早まって前進させることを防止することが留意されるべきである。ミューテータ２２０が、新しいオブジェクトをもはや書き込んでおらず、現在の波動を追跡し続ける必要がもはやない（すなわち、ミューテータの最後の公開されたグラフルートが、このミューテータが気にするすべてのオブジェクトを包含する）場合、ミューテータ２２０はミューテータ予約波動を除去して、この波動がマーカを阻止することを防止することができる。
【００５０】
しかしながら、マーカ２１０が実行されている間に予約が除去される場合、マーカ２１０が現在の波動２５０を前の予約を越えた値に設定しようとし得る可能性があることが留意されるべきである。しかしながら、マーカ２１０が、上記予約の下で書き込まれたオブジェクトを包含するルートから開始されない場合、このことは、オブジェクトが不適切に回収されることにつながる可能性がある。上記の問題に対処するために、予約が除去されるときはいつでも、“minresv”キーがその現在の値と除去される予約とのうちの最小値に更新される。マーカ２１０が現在の波動２５０を前進させているとき、マーカ２１０は既存の予約によってだけでなく、さらに“minresv”によっても制約され、したがって、マーク付けされていないオブジェクトが依然として保護される。
【００５１】
ミューテータ２２０が、再度書き込みを開始することを必要とされる場合、ミューテータ２２０は、何らかを書き込む前に新しいミューテータ予約波動を確立し、これがマーカ２１０に対して可視であることを確実にする（現在の波動を読み出し、ミューテータ予約波動を書き込むためのアトミックな読み出し書き込みシーケンスが、十分であるべきである）。
【００５２】
マーカコーディネータ及びマーカ
いくつかの実施形態において、ＧＣシステム２００は、マーカコーディネータ（Marker  Coordinator）５３０をさらに含むことができる。図５に示されるとおり、ブロック５０８において、マーカコーディネータ５３０は、ミューテータ予約波動及び（グラフ）ルートを読み出すように動作可能である。ブロック５１０において、マーカ２１０は、現在の波動２５０より大きいマーク波動でオブジェクトをマーク付けするように動作可能である。ブロック５１２において、マーカコーディネータ５３０は現在の波動２５０を公開する。現在の波動２５０は、ミューテータ予約波動のうちの最小値に設定される。次の波動は、ミューテータ予約波動のうちの最大値に設定される。
【００５３】
マーカコーディネータ５３０及びマーカ２１０は、下記の不変性：
１）ミューテータ予約波動のうちの最小値において又は未満で現在の波動２５０を保持する；
２）次の現在の波動より大きいか又は等しいすべての到達可能オブジェクトをマーク付けする；及び
３）オブジェクト上のマーク波動を単調に増加させる
に準拠することが可能である。
【００５４】
いくつかの実施形態において、マーカコーディネータ５３０は、オブジェクトストア３２０内で共存するファイルシステムの各々についてマーカ２１０を管理し、そのアクションのうち保守的な最小限を見つけるように動作可能である。各ファイルシステムについて、マーカコーディネータ５３０は、並列なマーカ２１０をその公開されたオブジェクトグラフルート上で開始する。すべてのマーカ２１０が終わったとき、マーカコーディネータ５３０は、公開されたミューテータ予約波動のうちの最小値を見つけ、現在の波動２５０を更新して最小値にマッチさせる。それから、マーカコーディネータ５３０は、少なくとも１つのファイルシステムが新しいルートを公開し、この新しいルートからマーク付けを開始するまで、待つように動作可能である。マーカコーディネータ５３０は、最小のミューテータ予約波動が変更されるまで、現在の波動２５０を前進させることができない。
【００５５】
いくつかの実施形態において、マーカコーディネータ５３０は、
１）グラフルートとミューテータ予約波動とを一緒に、アトミックに読み出し、
２）グラフルートからマーク付けして、現在の波動２５０に対してより大きいか又は等しいようにあらゆるオブジェクトのマークを更新し、
３）現在の波動２５０を、マーク付けの終わりにおけるすべてのミューテータ予約波動と最小ミューテータ予約波動とのうちの最小値に前進させ、ミューテータ２２０に対する助言として現在の波動より大きい次の波動を設定する
ことが必要とされる。
【００５６】
最後の点は、マーカ２１０がルートからスキャンしている間にミューテータ２２０がルートとミューテータ予約波動とを更新する可能性があるため、必要とされる。しかしながら、マーカコーディネータ５３０が更新されたミューテータ予約波動を読み出し、これに従って現在の波動を更新する場合、マーカコーディネータ５３０は、該マーカコーディネータ５３０が対応するグラフルートからマーク付けしていなかったとき、その不変性に違反する必要があることになる。
【００５７】
複製されたオブジェクトをマーク付けするとき、オブジェクトのすべての複製がマーク付けされる。オブジェクトが複製を欠いている（あるいは、複製が置き間違えられる）場合、マーク付けは、これらを正しい箇所に再書き込みすることができる（既存のオブジェクトをマーク付けすることとその新しい重複を書き込むこととの間に意味的な差はまったくなく、新しいコピーをマーク付けすることと書き込むこととの間には、データが存在せずにマークが失敗することを除き、ほとんどない）。
【００５８】
内部的に、各ファイルシステムのマーカ実装は、完全にファイルシステム次第である。上記実装は直列化されることが可能であり、あるいは、一般にオブジェクトグラフマーク付けが高度に並列化可能であるため、高度に並列化されることが可能である。
【００５９】
マーカ２１０が有向グラフ上で動作し、マーカ２１０が深さ第１の後行順の（depth-first  post-order）やり方において進む場合、マーカ２１０は、グラフの構造特性に依存して、オブジェクトを再マーク付けすることを回避することができる。マーカ２１０が、ルートからリーフにグラフを下へトラバースするとき、マーカ２１０が、マーカの波動に対してより大きいか又は等しいマーク波動ですでにマーク付けされているノードに直面する場合、マーカ２１０は、ノードがすでにマーク付けされているため、このグラフの部分をこれ以上探索する必要がない。上記のことは、グラフのうちすでにマーク付けされた部分を再訪することを回避することになり、このことは、共有されたノードをグラフが有することにより重複排除及びスナップショット差分を実装する場合に有用である。
【００６０】
マーカ２１０の唯一の要件は、マーカ２１０が現在の波動２５０より大きいマーク４１０でオブジェクトをマーク付けすることである。しかしながら、マーカ２１０は、オブジェクトが長い寿命を有するとマーカ２１０が決定することができる場合、現在の波動＋１をかなり越えるオブジェクトマーク波動を設定することができる。例えば、オブジェクトが遠い将来に時間基準の満了を有するスナップショットの一部である場合、マーカ２１０は、現在の波動２５０をかなり越えて波動を増加させて、このオブジェクト空間を再トラバースする必要を回避することができる。この推定が正確である場合、グラフは再トラバースされる必要がなく、さらなるマーカ労力なしに回収されることが可能である。
【００６１】
マーカ２１０が、すべてのオブジェクトを少なくとも１回と、（冗長性のための複製を使用する場合に）オブジェクトのすべてのコピーとを訪問するため、マーカ２１０はさらに、あらゆるオブジェクトの十分なコピーが存在することと、これらが予期された箇所にあることとを確認し、あるいはより正確には、全体的に失われたオブジェクトを検出するのに、良い位置にいる。こうした上乗せ分の義務でマーカ２１０に過負荷をかけるか否か、又はこれを冗長性管理のための何らかの他のメカニズムに対する入力として使用するか否かは、全体的に実装の選択である。
【００６２】
いくつかの実施形態において、マーカコーディネータ５３０は、ミューテータ２２０がそのミューテータ予約波動を次に更新するときにミューテータ２２０が対象にするための「次の波動」をさらに公開することができる。このことは、現在の波動がミューテータ予約波動によって制約されるとしても、現在の波動が如何に迅速に前進するかをマーカ２１０が間接的に制御することを可能にする。次の波動なしでは、ミューテータ２２０は、その次のミューテータ予約波動についてどんな波動を対象にすべきか分からないことになり、「現在の波動＋１」のようなものを選びがちであることになる。というのは、マーカコーディネータが、最も低いミューテータ予約波動を越えて現在の波動を前進させることができないからであり、このことは、システムが正しいであろう間、現在の波動が如何に迅速に前進することができるかにおいてシステムが柔軟性を失うことを意味する。次の波動が「最大（ミューテータ予約波動）＋１」をデフォルトにする場合、このことは、すべてのミューテータがほぼ同じ波動を有するオブジェクトを書き込むことを可能にし、しかしさらに、現在の波動を劇的に前進させるための柔軟性を可能にする。例えば、マーカ２１０は、次の波動を「現在の波動＋1,000,000」に設定して、あらゆるものが近い期間内に再マーク付けされることを効率的に引き起こし、システムのＧＣステートがリセットされることを可能にすることができる。
【００６３】
図５に示されるとおり、ＧＣシステム２００のモジュールの各々は、他のコンポーネントに対するゆるい結合で大部分は自律的に動作する。モジュールは、やりとりについての２つのチャネル、すなわち、オブジェクト上に残されたマークと、クラスタコンセンサスストア内の合意された値とを有する。クラスタコンセンサスストア合意は強力に順序付けられ、トランザクションの意味を提供し、ゆえに、任意的な読み出し・修正・書き込み動作がアトミックに実行されることが可能である。オブジェクト上のマークはとてもゆるく順序付けられ、所与のオブジェクトのマークを更新するときの唯一の制約は、オブジェクト上のマークが減少することができないことであり、マークはただ同じであるか又は増加することが可能である。しかしながら、任意のクラスタコンセンサスストアキーを変更する前に、すべてのオブジェクト更新が完了しなければならない。
【００６４】
非巡回グラフの増分的なマーク付け
非巡回グラフ（マークル木）を正しくマーク付けするために、オブジェクトごとの情報の第２の部分が必要とされる。いくつかの実施形態において、「マーク波動」は、オブジェクト生存性を決定するようにスィーパ２３０によって使用され、ゆえに、マーク付け段階の出力である。しかしながら、ミューテータ２２０がグラフに対して行う修正に面して増分のマーク付けを適切に機能させるために、第２の値が必要とされる。
【００６５】
図６は、オブジェクトごとに単一のマーク波動を有する一例示的なグラフ６００を示すブロック図である。ミューテータ２２０は、（右側に図示されるとおり）ツリーの一部分に対して新しいオブジェクトを書き込むこととこれらに８０のマーク波動を付与することとによって、ツリーの新しいバージョンを生成する。マーカ２１０が、８０に対してより小さいか又は等しいマークを有するマークツリーに来る場合、マーカ２１０は、ルートノード上に８０を見るとすぐに停止し、残りの波動７６ノードをマーク付けされないままに残し、結果として、スィーパ２３０がこれらを過度に早く回収することになる。このことは、マーク波動Ｗを有するノードがＷより小さいマーク波動を有するノードを決して指し示すべきでないという不変性についての違反から生じる。
【００６６】
しかしながら、単一のオブジェクトごとの波動数で上記不変性を維持することは、実行不可能である。上記のことは、ポインタ含有オブジェクトについてのあらゆる書き込みが、該オブジェクトが参照するサブグラフ内のあらゆるオブジェクト上の波動をさらに更新することを暗示するからである。
【００６７】
この問題を解決するために、第２のオブジェクトごとの値、（図４にさらに示されている）サブグラフ（ＳＧ）波動４２０が、導入される。サブグラフ波動４２０は、ポインタ含有オブジェクトのサブグラフ内のすべてのオブジェクトのうちの最小マーク波動の保守的な推定である。これを用いて、マーク波動がオブジェクト自体に対する生存性判断に依然として使用され、しかしサブグラフ波動４２０が、グラフを通してマーカ２１０をガイドするのに使用されることが可能である。サブグラフ波動４２０は純粋にマーカの内部の配慮に関し、他のＧＣモジュールのいずれによっても検査されない。
【００６８】
図７は、一例示的なグラフ７００のブロック図であり、これにおいて、ノードはマーク波動４１０とサブグラフ波動４２０とでラベル付けされている（「マーク波動｜サブグラフ波動」）。グラフは、最初、ミューテータ波動８０で更新され（結果が右側に図示されている）、それから、グラフのノードがマーカによって訪問される（結果が下側に図示されている）。新たに書き込まれたノードはマーク波動８０を書き込まれ、このマーク波動８０は、現在の波動（７６）と、サブグラフ波動の保守的な最小値の０とを上回る。マーカが、波動８２に対してマーク付けするように通り抜けるとき、マーカは、８２より小さいサブグラフ波動を有するノードを介して、８２より小さいマーク波動を有するすべてのノードを訪問する。マーカが、波動９０をすでにマーク付けされているサブグラフに直面するとき、マーカは、このサブグラフを全体的に回避することができる。オブジェクトのサブグラフ波動を設定することは、実際、サブグラフ内の波動のいずれかを調べることを必要としない。具体的な波動Ｗがマーク付けされ、マーカがあるオブジェクト下のサブグラフを完了した場合、マーカは、このオブジェクトをサブグラフ波動Ｗでマーク付けすることができる。マーカが、サブグラフオブジェクトのすべてが少なくとも上記波動を有すると知っているからである。
【００６９】
上記アプローチは、ポインタを含む各ノードがただ１つの解釈を有することを必要とする。すなわち、サブグラフオブジェクトの別個のセットを含む同じビットパターンの代替的な解釈は存在しない。このことは、単一のサブグラフフィールドを有することを可能にする。実際には、上記のことは配置するのが容易である。あらゆるポインタ担体オブジェクトが、そのフォーマットを識別することに使用可能な一意のマジックナンバーを有する場合、上記オブジェクトは、２つの異なるフォーマットが同じビット単位コンテンツを有し得ないことをさらに保証する。
【００７０】
リーフノードは、上記の検討から除外される。リーフノードは、定義によって他のオブジェクトに対するいかなるポインタも有さないからである。こうした場合、マーカはサブグラフフィールドを無視する。マーカはサブグラフフィールドを検査せず、サブグラフフィールドを修正しない。このことは、リーフノードがポインタ担体ノードと同じビットパターンを有さない（例えば、ファイルシステム内にファイルシステムイメージを記憶している）場合、重要である。この場合、ノードは、ポインタ担体オブジェクト及びリーフオブジェクトの双方として、マーカによって２回訪問される。
【００７１】
一般に、オブジェクトグラフのうちの多くの共有された部分は、スナップショット生成の結果として予期されることが可能である。このスキームは、（以下に説明される）ならされたマーク付けのない場合でさえ、スナップショットをマーク付けする増分のコストが、その合計サイズというよりも他のスナップショットからの差に比例することを意味する。
【００７２】
ならされたマーク付け
マーカ２１０は、その不変性を維持するために各オブジェクトに対してマーカ２１０が適用しなければならない下限マーク波動を有する。すべてのマーカ２１０が下限マークを常時適用した場合、これらマーカ２１０はあらゆるマーク段階におけるあらゆるライブオブジェクトを訪問することになる。この簡素なアプローチでは、各々のマーク付け段階のコストは、O(n)（これにおいて、ｎはオブジェクトの数である）、及び、ｍのマーク付け段階を生き残るオブジェクトについて全体でO(nm)である。
【００７３】
上記の下限を越えてマーク波動を適用することは、オブジェクト及びそのサブグラフに対するいかなるさらなるマーク付けも遅らせる効果を有し、このことは、マークをすることのコストをならす（amortizes）。例えば、オブジェクトのサブグラフが、遠い将来に時間の満了ポイントを有するスナップショットを表現し、それから、これらオブジェクトのすべてが、現在の波動をかなり越えたマーク波動でマーク付けされることが可能である。理想的には、マーク波動は、現在の波動が如何に迅速に前進しているかから外挿されて、満了の時間においてこれが何であることになるかが推定される。正確に行われる場合、このことは、サブグラフが１回だけマーク付けされ、オブジェクトのすべてがこれらが満了する時点において回収可能ガーベッジになることを意味する。上記推定を誤って得ることはいかなる正確さ問題も引き起こさず、単に非効率さを引き起こす。すなわち、非常に低く、サブグラフが再度マーク付けされる必要があり、非常に高く、オブジェクトが非常に長く存続される。
【００７４】
様々な実施形態において、マーク付けはポリシー駆動され、アプリケーション固有の知識、ユーザ／プログラム的入力、ストレージ使用見込みなどを使用することによってならされることが可能である。
【００７５】
幾何級数のならされたマーク付け
他の実施形態において、ならされたマーク付けのストラテジは、幾何級数マーク付けスキームの使用を含む。オブジェクトが現在の波動＋１のマーク波動を書き込まれ、それから毎回オブジェクトが再訪されるたびに倍増パターンでマーク付けされる場合、実質上、オブジェクトは、１回、それから２つの段階の後、４などとマーク付けされることになる。
【００７６】
【数１】
2017045454.tif 000003
この級数は２に収束する。すなわち、この手法を用いてオブジェクトグラフを生きたままに保つマークパスの数はO(1)であり、グラフがどれほど長く生きるかから独立である（O(n)、オブジェクトの数）。最初のマークは、これがオブジェクトが書き込まれるときに発生するので「フリー」であり、ゆえに、後続マークの級数は合計で１つの追加のマーク付けパスになることが留意されるべきである。
【００７７】
幾何級数マーク付けスキームの明らかなマイナス面は、毎回オブジェクトが倍増の波動でマーク付けされるたび、オブジェクトの寿命が倍増されることである。オブジェクトが明らかに無限の命をいずれにせよ有する場合、このことは何ら問題を引き起こさない。しかし、オブジェクトがその時間内に満了する場合、オブジェクトは不必要に存続されることになる。上記が問題であるかどうかを決定することは、オブジェクト寿命が実際に如何に分散されるかに依存する。オブジェクトが時間Ｎの間、生きて続けている場合、このオブジェクトがさらなる２Ｎ時間の間、生存することになる見込みはどれだけ？であろうか。
【００７８】
マークスケジューリング
オブジェクトグラフをマーク付けすることと現在の波動２５０を前進させることとの各サイクルは、マーク段階として知られる。スィーパ２３０が、現在の波動の前にマーク付けされたオブジェクトのみ解除することができるため、スィーパ２３０は、現在の波動２５０が前進するまで作業することができない。マーク付けが長時間かかる場合、任意のストレージが解除されることができる前に、長いレイテンシが存在する。最終的に、同じ数のブロックが解除されることになり、スループットは平均において良好であり、しかしこのことはでこぼこ効果（lumpy  effect）につながる。
【００７９】
上記の問題に対処するために、いくつかの実施形態は、前もっていずれかの１つの段階において実行される必要があるマーク付け作業の量を平滑化することができる。オブジェクトのセットをどんな波動でマーク付けするかを決めるとき、いくつかの実施形態は、他のオブジェクトをマーク付けすることに使用された波動とは区別可能な波動を選ぶことができる。こうしたオブジェクトが、再マーク付けに対して出現するときにオブジェクトグラフ内で依然として到達可能である場合、マーカ２１０は、このサブセットに対して労力を費やし、それから別の段階において他のオブジェクトをマーク付けする必要だけあることになる。
【００８０】
このことは各マーク段階を制限された量の作業にし、現在の波動を固定レートで前進させ続け、（仮に解除される何かが存在すると仮定して）スィーパ（２３０）に回収可能ストレージの連続的なストリームを与えることになる。
【００８１】
コンセンサスデータモデル
いくつかの実施形態において、ＧＣシステム２００の様々なモジュールによって互いにステートをやりとりすることに使用されるすべてのキーが記憶される。
【００８２】
例示的なＧＣキー（フラグ）が下記の表に提示される。
【００８３】
【表１】
2017045454.tif 000004
コンセンサスに対する要件は、複数のキーをアトミックに読み出してそれから更新し、副作用なしにこのことをアトミックに成功させ又は失敗させることが可能であることである。上記要件は、すべてのメンバが即座に更新されることを必要とせず、上記メンバが各キーの古い値において動作し続けることは、常時正しい。具体的に、「マーク付け有効（markingenabled）」又は「スィーピング有効（sweepingenabled）」フラグをクリアすることは、マーク付け／スィーピングをアトミックに無効にするために仮定されることができない。代わって、マーク付け／スィーピングは、すべてのマーカ／スィーパがフラグの現在のステートを観察する機会をいったん有すると、止まることになる。
【００８４】
Smashfs細目
基本的なＧＣシステム２００が、使用されるファイルシステム及びデータモデルに対して断定的でない可能性がある間、ファイルシステムが特定の詳細において如何に機能するかを探索することには価値があり得る。
【００８５】
スナップショット及びメタルート
オブジェクトストア内の各ファイルシステムインスタンスは、メタルートを有する。メタルートは、すべてのスナップショットルートを指し示すツリーのルートである。ゆえに、特定のメタルートオブジェクトに対するポインタは、（ファイルシステムについてのライブの現在のステートが単純に最も直近のスナップショットである場合、）存在するすべてのスナップショットとすべてのそのコンテンツとであるファイルシステムの合計ステートを完全に説明する。
【００８６】
メタルートは、各ファイルシステムについて、単独のオブジェクトである。一時にただ１つのメタルートが存在し、いったん新しいメタルートがファイルシステムに対して合意されると、前のメタルートはガーベッジになる。しかしながら、ファイルシステム内の大抵のデータは、スナップショットからスナップショットへ変更されないまま残ることになることが予期される。
【００８７】
スナップショット寿命モデル
時間基準
いくつかの実施形態において、各smashfsインスタンスはスナップショットポリシーを有し、このポリシーは純粋に時間ベースである。すなわち、具体的な時間境界をカバーするある範囲の時間について存在するスナップショットは、この境界の関数として、ある時間の期間について保全されることになる。例えば、分の境界に及ぶスナップショットは、１時間の間保たれることが可能であり、時間の境界に及ぶスナップショットは、１日の間保全されることが可能である。このことは、スナップショットに、その満了時間として関連付けられる。
【００８８】
満了時間は、スナップショットが新しいユーザに対して可視であるのをいつ止めるかを決定する。しかしながら、スナップショットについての現在のアクティブなユーザが存在する間にスナップショットが満了する場合、スナップショット全体が、これをユーザが使用し終えるまで保全される。このことは、スナップショットがその満了時間を越えて無期限に生きたまま保たれることが可能であることを意味する。
【００８９】
非時間基準
他の実施形態において、スナップショットは非時間基準スナップショットでない。非時間基準スナップショットは、ユーザアクションによってか又はプログラム的にかのいずれかで明示的に作成され、決して満了しなくてもよく、あるいは広範囲のとり得るポリシー条件下でのみ満了してもよい。これらスナップショットはそれ自体が満了時間を有さず、しかし、既存のユーザが残ることを可能にすると同時に新しいユーザを防止する満了のステートを依然として有する。
【００９０】
いくつかの方法において、このことは、時間基準モデルが如何に最後のスナップショットを扱うかの一般化であり、ライブファイルシステムステートを表現する。これは、より新しいライブファイルシステムスナップショットで置換されるまで、決して満了しないことが可能である。
【００９１】
メタルート実装
各スナップショットは、メタルート内でエントリとして表現されることが可能である。エントリは、キーを有してもよい。キーには、be64としてエンコードされたsnapidを含むことができる。いくつかの実施形態において、キー空間は、他の索引を収容するように拡張されてもよい。エントリは下記を含む。
【００９２】
【表２】
2017045454.tif 000005
liveは、このスナップショットが新しいユーザに対して依然として可視であるかどうかを示すフラグである。スナップショットがlive=trueで作成され、しかしいったん何らかのポリシーがスナップショットに適用されることを介してこれが満了されると、liveは、新しいユーザを防止するfalseに設定される。しかしながら、スナップショットはメタルート内に依然として存在し、したがってスナップショットは、最後のアクティブユーザが終えるときに一緒に除去されるまで、マーカに対して可視である。メタルート内のいかなる非ライブエントリも、クラスタ起動において除去されることが可能である。定義により、アクティブユーザが存在しないからである（少なくとも、永続的なファイルハンドルが実装されるまで。ただし、ファイルハンドルは、おそらくマーカに対しても可視であることになる）。
【００９３】
ファイルシステムデータモデル
スナップショット非巡回グラフに関して考慮すべき２つのデータモデルがある。スナップショットは、共通のサブツリーを共有することができる。マーカは、この特性の利点を活かして再マーク付けを回避することができる。
【００９４】
名前空間マークル木
各スナップショットは、ファイルシステム名前空間に基づくマークル木である。ルートノードはルートディレクトリであり、ディレクトリはエントリを含む。ディレクトリ内の各エントリは、（name,  inum,  inodeハッシュ）タプルからなる。これのうち、マーカ２１０に関連のある唯一の成分は、inodeハッシュである。
【００９５】
各inodeは、さらなるハッシュ、xhash及びchashを含む。xhashはファイルの拡張された属性を参照し、chashは（小さいファイルについて）ファイルのデータを直接参照するか、あるいは、ファイルオフセットによって暗黙的に索引付けされるファイルの内容を通じてマークル木のルートを参照するかのいずれかである。ディレクトリinodeの場合、chashはディレクトリブロックを参照し、ディレクトリブロックは次いでさらなるファイル及びディレクトリinodeを参照する。このことは、単一の空でないファイルをマーク付けすることが少なくとも３つのオブジェクトアクセスをとることを意味する。
【００９６】
B木Smashfs
B木Smashfs（B+マークル木におけるSmashfsを参照）は完全なマークル木である（イミュータブルコンテンツアドレス可能ストア内に構築されるいかなるツリーもそうでなければならないため）。
【００９７】
B+木ノードはオブジェクトストレージ内に１：１で記憶され、ゆえに、用語のノード及びオブジェクトは、上記文脈において交換可能に使用されることが可能である。名前空間マークル木とは違って、B+木深度は約O(log  n)に制限され、これにおいて、nはツリー内のノードの数である。さらに、マーク付けすべき、より少ないノード（＝オブジェクト）が存在する。なぜならば、多くの小さいファイルシステムエンティティがB+木ノードへ一緒にパックされる（packed）からである。
【００９８】
基本的なマーク付けアルゴリズムは名前空間マークルと同じであり、しかし、取り扱うべき、より少ない区別可能な場合が存在する。マーク付けのコアは、B+木自体の中のすべてのオブジェクトを列挙することと、それから、B+木のリーフ内のデータアイテムが他のオブジェクト（すなわち、ツリーへインライン展開するのには大きすぎるファイルの部分と、大きいxattrs）に対して有する任意の外部参照をマーク付けすることとである。
【００９９】
このことは、多くのファイルシステムエンティティが各オブジェクトマークでマーク付けされ、ツリー深度が制限されるので再帰的なマーク付けを使用することが安全であることを意味する。さらに、B+木が幅広く浅いツリーであるため、このことは、ツリーのうちすでにマーク付けされた部分をスキップすることがとても効果的であることを意味する。
【０１００】
図８は、コンピュータシステム８００の例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の１つ以上をマシンに実行させる命令セットが実行されることができる。様々な例示的な実施形態において、マシンはスタンドアロン装置として動作し、あるいは他のマシンに接続され（例えば、ネットワーク化され）てもよい。ネットワーク化された展開において、マシンは、サーバクライアントネットワーク環境の中でサーバ又はクライアントマシンの能力において、又は、ピアツーピア（又は、分散型）ネットワーク環境においてピアマシンとして動作し得る。マシンは、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント、セルラー電話、ポータブル音楽プレーヤ（例えば、ＭＰ３（Moving  Picture  Experts  Group  Audio  Layer  3）プレーヤなどのポータブルハードドライブオーディオ装置）、ゲーミングパッド、ポータブルゲーミングコンソール、車載（in-vehicle）コンピュータ、スマートホームコンピュータ、又は、マシンにより行われるべきアクションを指定する命令セット（順次の、又はその他の）を実行することができる任意のマシンであり得る。さらに、単一のマシンだけが例示されているが、用語「マシン」は、さらに、命令の一セット（又は、複数のセット）を個々に又は共同で実行して本明細書に論じられる方法論のうち任意の１つ以上を遂行するマシンの任意の集合を含むものとみなされるべきである。
【０１０１】
例示的なコンピュータシステム８００は、一のプロセッサ又は複数のプロセッサ８０５（例えば、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、又は双方）と、メインメモリ８１０及びスタティックメモリ８１５とを含み、これらは、バス８２０を介して互いに通信する。コンピュータシステム８００は、ビデオディスプレイユニット８２５（例えば、液晶ディスプレイ（ＬＣＤ））をさらに含み得る。コンピュータシステム８００は、少なくとも１つの入力装置８３０、例えば、英数字入力装置（例えば、キーボード）、カーソル制御装置（例えば、マウス）、マイクロフォン、デジタルカメラ、ビデオカメラなどをさらに含み得る。コンピュータシステム８００は、ディスクドライブユニット８３５、信号生成装置８４０（例えば、スピーカー）、及びネットワークインターフェース装置８４５をさらに含む。
【０１０２】
ディスクドライブユニット８３５はコンピュータ読取可能媒体８５０を含み、コンピュータ読取可能媒体８５０は、本明細書に説明される方法論又は機能のうち任意の１つ以上を具現化し又はこれらにより利用される１つ以上の命令セット及びデータ構造（例えば、命令８５５）を記憶する。命令８５５は、さらに、コンピュータシステム８００による命令８５５の実行の間、メインメモリ８１０内及び／又はプロセッサ８０５内に、完全に又は少なくとも部分的に存在し得る。メインメモリ８１０及びプロセッサ８０５もまた、マシン読取可能媒体を構成する。
【０１０３】
命令８５５は、さらに、複数の周知のトランスファープロトコルのうち任意のもの（例えば、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、ＣＡＮ、シリアル、及びモドバス（Modbus））を利用するネットワークインターフェース装置８４５を介して、ネットワーク８６０を通じて送信され又は受信されることができる。例えば、ネットワーク８６０には、インターネット、ローカルイントラネット、ＰＡＮ（パーソナルエリアネットワーク）、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）、ＭＡＮ（メトロポリタンエリアネットワーク）、仮想プライベートネットワーク（ＶＰＮ）、ストレージエリアネットワーク（ＳＡＮ）、フレームリレー接続、高度インテリジェントネットワーク（ＡＩＮ）接続、同期型光ネットワーク（ＳＯＮＥＴ）接続、デジタルＴ１、Ｔ３、Ｅ１、若しくはＥ３回線、デジタルデータサービス（ＤＤＳ）接続、ＤＳＬ（デジタル加入者回線）接続、イーサネット（登録商標）接続、ＩＳＤＮ（統合サービスデジタルネットワーク）回線、ケーブルモデム、ＡＴＭ（非同期転送モード）接続、又はＦＤＤＩ（ファイバ分散データインターフェース）若しくはＣＤＤＩ（銅線分散データインターフェース）接続のうち、１つ以上が含まれ得る。さらに、通信が、ＧＰＲＳ（General  Packet  Radio  Service）、ＧＳＭ（登録商標）（Global  System  for  Mobile  Communication）、ＣＤＭＡ（符号分割多元接続）若しくはＴＤＭＡ（時分割多元接続）、セルラーフォンネットワーク、ＧＰＳ（グローバルポジショニングシステム）、ＣＤＰＤ（セルラーデジタルパケットデータ）、ＲＩＭ（リサーチインモーション社）デュプレックスページングネットワーク、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線、又はＩＥＥＥ８０２．１１ベースの無線周波数ネットワークを含む、様々なワイヤレスネットワークのうち任意のものに対するリンクをさらに含み得る。
【０１０４】
コンピュータ読取可能媒体８５０が、一例示的な実施形態において単一の媒体であるように図示されているが、用語「コンピュータ読取可能媒体」は、１つ以上の命令セットを記憶する単一の媒体又は複数の媒体（例えば、集中型又は分散型のデータベース及び／又は関連付けられたキャッシュ及びサーバ）を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、さらに、マシンによる実行のための命令セットを記憶し、エンコードし、又は運ぶことができて、本出願の方法論のうち任意の１つ以上をマシンに実行させ、あるいは上記の命令セットにより利用され又はこれに関連付けられたデータ構造を記憶し、エンコードし、又は運ぶことができる任意の媒体を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、したがって、これらに限られないが、ソリッドステートメモリ、光及び磁気媒体を含むようにみなされるべきである。こうした媒体には、さらに、限定でなく、ハードディスク、フロッピーディスク、フラッシュメモリカード、デジタルビデオディスク（ＤＶＤ）、ランダムアクセスメモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）などが含まれ得る。
【０１０５】
本明細書に説明される例示的な実施形態は、コンピュータ上にインストールされるコンピュータ実行可能命令（例えば、ソフトウェア）を含む動作環境において、ハードウェアにおいて、又はソフトウェアとハードウェアとの組み合わせにおいて実装され得る。コンピュータ実行可能命令は、コンピュータプログラミング言語において書かれてもよく、あるいはファームウェアロジックにおいて具現化されてもよい。認識されている標準に合うプログラミング言語において書かれる場合、上記の命令は、様々なハードウェアプラットフォーム上で、及び、様々なオペレーティングシステムに対するインターフェースのために実行されることができる。これらに限定されないが、本願方法を実施するコンピュータソフトウェアプログラムは、任意数の適切なプログラミング言語、例えば、ハイパーテキストマークアップ言語（ＨＴＭＬ）、ダイナミックＨＴＭＬ、拡張可能マークアップ言語（Extensible  Markup  Language）（ＸＭＬ）、拡張可能スタイルシート言語（Extensible  Stylesheet  Language）（ＸＳＬ）、文書スタイル意味指定言語（Document  Style  Semantics  and  Specification  Language）（ＤＳＳＳＬ）、カスケーティングスタイルシート（ＣＳＳ）、同期型マルチメディア統合言語（Synchronized  Multimedia  Integration  Language）（ＳＭＩＬ）、ワイヤレスマークアップ言語（ＷＭＬ）、Ｊａｖａ（登録商標）ＴＭ、Ｊｉｎｉ（登録商標）ＴＭ、Ｃ、Ｃ＋＋、Ｐｅｒｌ、ＵＮＩＸシェル、ビジュアルベーシック若しくはビジュアルベーシックスクリプト、仮想現実マークアップ言語（Virtual  Reality  Markup  Language）（ＶＲＭＬ）、ＣｏｌｄＦｕｓｉｏｎ（登録商標）ＴＭ、又は、他のコンパイラ、アセンブラ、インタプリタ、若しくは他のコンピュータの言語若しくはプラットフォームにおいて書かれることができる。
【０１０６】
こうして、ストレージ内のオブジェクトのガーベッジコレクションに関してオブジェクトをマーク付けする手法が開示された。実施形態が、特定の例示的な実施形態を参照して説明されたが、本出願のより広い主旨及び範囲から逸脱することなく、上記の例示的な実施形態に対して様々な修正及び変更がなされ得ることが明らかであろう。したがって、明細書及び図面は、限定的ではなく例示的な意味において考慮されるべきである。
【図１】
2017045454.tif 000006
【図２】
2017045454.tif 000007
【図３】
2017045454.tif 000008
【図４】
2017045454.tif 000009
【図５】
2017045454.tif 000010
【図６】
2017045454.tif 000011
【図７】
2017045454.tif 000012
【図８】
2017045454.tif 000013
【外国語明細書】
2017045454000001.pdf