JP2017045454A - 同時の、増分の及び世代のマークアンドスィープガーベッジコレクション - Google Patents
同時の、増分の及び世代のマークアンドスィープガーベッジコレクション Download PDFInfo
- Publication number
- JP2017045454A JP2017045454A JP2016161570A JP2016161570A JP2017045454A JP 2017045454 A JP2017045454 A JP 2017045454A JP 2016161570 A JP2016161570 A JP 2016161570A JP 2016161570 A JP2016161570 A JP 2016161570A JP 2017045454 A JP2017045454 A JP 2017045454A
- Authority
- JP
- Japan
- Prior art keywords
- new
- logical clock
- objects
- wave
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/128—Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1873—Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
【課題】ストレージ内のオブジェクトのガーベッジコレクションのためのシステム及び方法を提供する。
【解決手段】方法は、単調に増加する論理クロックを提供することを含む。各オブジェクトは、第1の数及び第2の数に関連付けられる。第2の数は、オブジェクトが参照するサブツリー内のオブジェクトの第1の数のうちの最小値である。論理クロックが増加するとき、論理クロックより小さい第1の数を有するオブジェクトがストレージから削除される。新しいオブジェクトがストレージに追加されるとき、新しいオブジェクトの第1の数は新しい第1の数に設定される。新しい第1の数は論理クロックに等しいか又はより大きい。新しいオブジェクトが参照するサブツリー内の各オブジェクトの第1の数が更新される。更新された第1の数は、前の第1の数と前の論理クロックとの関数である。
【選択図】図3
【解決手段】方法は、単調に増加する論理クロックを提供することを含む。各オブジェクトは、第1の数及び第2の数に関連付けられる。第2の数は、オブジェクトが参照するサブツリー内のオブジェクトの第1の数のうちの最小値である。論理クロックが増加するとき、論理クロックより小さい第1の数を有するオブジェクトがストレージから削除される。新しいオブジェクトがストレージに追加されるとき、新しいオブジェクトの第1の数は新しい第1の数に設定される。新しい第1の数は論理クロックに等しいか又はより大きい。新しいオブジェクトが参照するサブツリー内の各オブジェクトの第1の数が更新される。更新された第1の数は、前の第1の数と前の論理クロックとの関数である。
【選択図】図3
Description
関連出願の相互参照
本出願は、2015年8月24日に申請された米国仮出願第62/209,1925号の優先の利益を主張する。前述された出願の開示は、すべての目的について本明細書において参照により援用される。
本出願は、2015年8月24日に申請された米国仮出願第62/209,1925号の優先の利益を主張する。前述された出願の開示は、すべての目的について本明細書において参照により援用される。
本開示は、概してデータに関し、より具体的にはガーベッジコレクションの方法及びシステムに関する。
本セクションに説明されるアプローチは、追求されたことがある可能性があるが、必ずしもこれまでに着想され、あるいは追求されてきたアプローチではない。それゆえに、他に示されない限り、本セクションに説明されるアプローチのいずれも、単に本セクションに含まれるという理由で従来技術と見なすと仮定されるべきではない。
コンピュータファイルシステムは、大抵、オブジェクト及びこれらオブジェクトを指し示す参照として構築される。オブジェクトは、オブジェクトストア内に位置する。オブジェクトは、該オブジェクトを指し示す多くの参照を有することができ、さらに、オブジェクト自体が、他のオブジェクトを指し示す参照を保有することができる。ゆえに、典型的に、データはデータオブジェクトのグラフとして、より具体的には有向非巡回グラフとして編成される。様々な記憶装置のリソースを効率的に利用するために、もはや必要とされないオブジェクトを除去する手順をセットアップすることが重要である。
イミュータブルデータストアのためのファイルシステムを構築することは、最終的に、廃れたデータを削除することと、該データに関連付けられた記憶空間を回収することとを伴い得る。空間を決して回収せず、必要とされるとおり新しいストレージを単に追加することは、同様に利用されることが可能なアプローチである。このアプローチは多数の利点を有しており、そのうち少なくないのが、その簡素さである。しかしながら、このアプローチは、商業製品に対して実際的でない。
さらに、スナップショット(ファイルシステムのバージョン)の大規模な使用とデータの重複排除とは、所与のオブジェクトが依然として使用されているかどうかを決定することを伴い、フルのオブジェクトグラフの解析を必要とする。
ガーベッジコレクション(GC)といわれる特別な手法を適用して、オブジェクトグラフを解析して、他のオブジェクトによってもはや参照されないオブジェクトを見つけ、除去することができる。いくつかの伝統的なGC手法は、マーク及びコレクション手法を使用して、参照されないオブジェクトをオブジェクトストアから除去し、データオブジェクトストアが位置するメモリ、ハードディスク、又は他の記憶装置の中の空間を回収する。
本発明の概要は、以下に詳細な説明においてさらに説明される概念のうち選択されたものを簡素化された形式において導入するために提供される。本発明の概要は、請求される対象事項の重要な特徴又は必須の特徴を識別するものではなく、請求される対象事項の範囲を決定することの助けとして用いられるべきものでもない。
本明細書に開示されるテクノロジーは、ストレージ内のオブジェクトのガーベッジコレクションのシステム及び方法に関する。オブジェクトは、ファイルシステムを表現し得る。一例示的な方法が、論理クロックを提供することを含む。論理クロックは、単調に増加するように構成される。方法は、オブジェクトの各々を第1の数に関連付けることを含む。方法は、オブジェクトの各々を第2の数に関連付けることを可能にする。第2の数は、さらなるオブジェクトに関連付けられた第1の数のうちの最小値であり、さらなるオブジェクトは、オブジェクトが参照するサブツリーに属する。論理クロックが増加するとき、方法は、論理クロックより小さい第1の数を有するオブジェクトをストレージから削除することを含む。少なくとも1つの新しいオブジェクトがストレージに追加されるとき、方法は、新しいオブジェクトに関連付けられた第1の数を新しい第1の数に設定することを含み、新しい第1の数は、論理クロックに対して等しいか又はより大きい。方法は、新しいオブジェクトが参照している新しいサブツリー内の各オブジェクトの第1の数を更新することを可能にし、更新された第1の数は、各オブジェクトに関連付けられた第1の数と該第1の数が設定された論理クロックの値との関数である。
いくつかの実施形態において、新しいサブツリー内の各オブジェクトの第1の数は、新しいサブツリーをトラバースすることと、新しい第1の数に等しいか又はより大きい第2の数を有する前オブジェクトにより参照される新しいサブツリー内の分岐をスキップすることとによって、更新される。
特定の実施形態において、第1の数は、式UN=SW+2*(FN-SW)によって更新される。これにおいて、UNは更新された第1の数であり、FNは第1の数であり、SWは、第1の数が設定された論理クロックの値である。
いくつかの実施形態において、新しいオブジェクトに関連付けられた第1の値を設定する前に、上記方法は、コンセンサスストア内に予約数(reservation number)を公開することを含む。予約数は、論理クロックより大きい。特定の実施形態において、新しい第1の数は、予約数に対してより大きいか又は等しい。いくつかの実施形態において、予約数は、ストレージに対するさらなるオブジェクトのさらなる追加に応答してコンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく。
いくつかの実施形態において、論理クロックの増加は、公開された予約数とさらなる予約数とのうちの最小値によって限定される。
いくつかの実施形態において、上記方法は、新しいオブジェクトをストレージに追加することに関連付けられた新しいルートを公開することをさらに含む。
いくつかの実施形態において、上記方法は、新しいルートが公開されていると決定することを可能にする。この決定に応答して、方法は、論理クロックを、公開された予約数とさらなる予約数とのうちの最小値に増加させることと、公開された予約数をコンセンサスストアから除去することと、新しいルートから到達可能な各オブジェクトの第1の数を更新することとを含む。
本開示のさらなる例示的な実施形態において、上記方法ステップが、命令を含むマシン読取可能媒体上に記憶され、上記命令は、1つ以上のプロセッサにより実施されるときに列挙されたステップを実行する。またさらなる例示的な実施形態において、ハードウェアシステム又は装置が、列挙されたステップを実行するように適合されることが可能である。他の特徴、例、及び実施形態が、以下に説明される。
実施形態は、添付図面の図において限定ではなく例として例示され、同様の参照は類似の要素を示す。
ファイルシステムを表現するオブジェクトのグラフの一例を表すブロック図である。
GCシステムのコンポーネントを示すブロック図である。
波動タイムクロックとオブジェクトストア内のオブジェクトに対する波動の影響との概略表現である。
オブジェクトに関連付けられたマークを示すブロック図である。
一例示的な実施形態に従う、GCシステムのモジュールの相互作用を示す処理フロー図である。
一例示的なオブジェクトツリーと、ミューテータ波動で更新されたオブジェクトツリーとを示すブロック図である。
一例示的なオブジェクトツリーと、ミューテータ波動で更新されたオブジェクトツリーと、マーカで更新されたオブジェクトツリーとを示すブロック図である。
コンピュータシステムの例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の1つ以上をマシンに実行させる命令セットが実行されることができる。
下記の詳細な説明は添付図面に対する参照を含み、添付図面は本詳細な説明の一部を形成する。図面は、例示的な実施形態に従い例示を示す。こうした例示的な実施形態は、本明細書において「例」とさらに呼ばれ、十分詳細に説明されて、当業者が本対象事項を実施することを可能にする。実施形態は組み合わせられてもよく、他の実施形態が利用されてもよく、あるいは、構造的、論理的、及び電気的な変更が、請求されるものの範囲から逸脱することなく行われてもよい。ゆえに、下記の詳細な説明は、限定的な意味においてとられるべきではなく、その範囲は、別記の請求項及びその均等物によって定義される。本文献において、特許文献において一般的であるとおり、用語“a”及び“an”は、1つ又は1つより多くを含むように使用される。本文献において、用語「又は」は、非排他的な「又は」を参照するように使用され、したがって、別段指示されない限り、「A又はB」は、「BでなくA」、「AでなくB」、及び「A及びB」を含む。
本明細書に開示される実施形態の手法は、様々なテクノロジーを用いて実施されることができる。例えば、本明細書に説明される方法は、コンピュータシステム上で実行されるソフトウェアにおいて、あるいは、マイクロプロセッサの組み合わせ、又は他の特別に設計された特定用途向け集積回路(ASIC)、プログラマブルロジック装置、若しくはこれらの様々な組み合わせのいずれかを利用するハードウェアにおいて実施されることができる。具体的に、本明細書に説明される方法は、ディスクドライブ又はコンピュータ読取可能媒体などの記憶媒体上に存在する一連のコンピュータ実行可能命令によって実施されてもよい。本明細書に開示される方法は、コンピュータ(例えば、デスクトップコンピュータ、タブレットコンピュータ、ラップトップコンピュータ)、ゲームコンソール、ハンドヘルドゲーミング装置、セルラーフォン、スマートフォン、スマートテレビジョンシステムなどによって実施され得ることが留意されるべきである。
本明細書に開示されるテクノロジーは、ファイルシステム内のガーベッジコレクションに関する。ファイルシステムは、ストレージ内の変えられない(イミュータブル)オブジェクト(immutable objects)のコレクションとして編成されることが可能であり、各オブジェクトは、ファイルシステム内のファイル又はディレクトリエントリの部分を表現する。
本開示の一例示的な実施形態に従い、ストレージ内のオブジェクトのガーベッジコレクションのための方法が、論理クロックを提供することを含む。論理クロックは、単調に増加するように構成される。方法は、オブジェクトの各々を第1の数に関連付けることを含む。方法は、オブジェクトの各々を第2の数に関連付けることを可能にする。第2の数は、さらなるオブジェクトに関連付けられた第1の数のうちの最小値であり、さらなるオブジェクトは、オブジェクトが参照するサブツリー(subtree)に属する。論理クロックが増加するとき、方法は、論理クロックより小さい第1の数を有するオブジェクトをストレージから削除することを含む。少なくとも1つの新しいオブジェクトがストレージに追加されるとき、方法は、新しいオブジェクトに関連付けられた第1の数を新しい第1の数に設定することを含み、新しい第1の数は、論理クロックに対して等しいか又はより大きい。方法は、新しいサブツリーをトラバースする(traversing)ことによって、新しいオブジェクトが参照している新しいサブツリー内の各オブジェクトの第1の数を更新することを可能にする。更新された第1の数は、各オブジェクトに関連付けられた第1の数と、該第1の数が設定された論理クロックの値との関数である。新しいサブツリーをトラバースする間、方法は、新しい第1の数に等しいか又はより大きい第2の数を有する前オブジェクト(previous objects)により参照される新しいサブツリー内の分岐をスキップすることを可能にする。
データモデル
特定の実施形態において、ファイルシステムのデータは、データオブジェクトのグラフとして表現される。いくつかのデータオブジェクトは、他のデータオブジェクトに対するポインタを保有することができる。同時に、データオブジェクトは、該データオブジェクトを指し示すいくつかの他のデータオブジェクトによって参照されることが可能である。すべてのオブジェクトは、オブジェクトストア内に位置する。
特定の実施形態において、ファイルシステムのデータは、データオブジェクトのグラフとして表現される。いくつかのデータオブジェクトは、他のデータオブジェクトに対するポインタを保有することができる。同時に、データオブジェクトは、該データオブジェクトを指し示すいくつかの他のデータオブジェクトによって参照されることが可能である。すべてのオブジェクトは、オブジェクトストア内に位置する。
図1は、オブジェクト102〜116の一例示的なグラフ100を示すブロック図である。例示されるグラフ100は、オブジェクトについての2つの重なったツリーを含む。第1のツリーはルート102で始まり、第2のツリーはルート104で始まる。ルート102は、ファイルシステムのより早いバージョンに対応することが可能であり、ルート104は、第1のバージョンに対する修正が実施された後の、ファイルシステムのより後のバージョンに対応することが可能である。オブジェクト102〜116の各々は、マーク410で属性を付けられる(attributed)ことが可能である。マーク410がGC処理によって使用されて、古い(より早期の)オブジェクトをオブジェクトストアからの除去の候補として決定し、メモリ、ハードディスク、及びクラスタ内の古いオブジェクトにより予約されたメモリを回収する(reclaiming)ことができる。
ガーベッジコレクションシステム
図2は、一例示的な実施形態に従う、GCシステム200のコンポーネントを示すブロック図である。GCシステム200は、少なくとも1つのマーク付け器(マーカ)210、少なくとも1つの変化器(ミューテータ)(mutator)220、及び少なくとも1つの一掃器(スィーパ)(sweeper)230を含むことができる。モジュール210、220、及び230の各々は、その残りとは実質的に独立してオブジェクトストアと相互作用することができる。モジュール210、220、及び230の各々は、モジュールが維持しなければならないいくつかの不変性(invariant)を含み、このことは、広範なポリシーが異なる動作トレードオフを作り出すことを可能にする。
図2は、一例示的な実施形態に従う、GCシステム200のコンポーネントを示すブロック図である。GCシステム200は、少なくとも1つのマーク付け器(マーカ)210、少なくとも1つの変化器(ミューテータ)(mutator)220、及び少なくとも1つの一掃器(スィーパ)(sweeper)230を含むことができる。モジュール210、220、及び230の各々は、その残りとは実質的に独立してオブジェクトストアと相互作用することができる。モジュール210、220、及び230の各々は、モジュールが維持しなければならないいくつかの不変性(invariant)を含み、このことは、広範なポリシーが異なる動作トレードオフを作り出すことを可能にする。
いくつかの実施形態において、GCシステム200は下記の特徴を含む:
1)同時的 − マーカ210、ミューテータ220、及びスィーパ230は、最小限の同期で同時的に実行されるように動作可能である;
2)増分的 − マーカ210は、事前のマークとは異なるオブジェクトに対して接触し及び更新する必要しかない;
3)世代的 − 直近のオブジェクトがより古いものから区分されて、世代仮説(generational hypothesis)の利点を活かすことができる。世代仮説は、直近のオブジェクトがすぐにごみ(ガーベッジ)になる最も見込みのある候補であることを言明する。
1)同時的 − マーカ210、ミューテータ220、及びスィーパ230は、最小限の同期で同時的に実行されるように動作可能である;
2)増分的 − マーカ210は、事前のマークとは異なるオブジェクトに対して接触し及び更新する必要しかない;
3)世代的 − 直近のオブジェクトがより古いものから区分されて、世代仮説(generational hypothesis)の利点を活かすことができる。世代仮説は、直近のオブジェクトがすぐにごみ(ガーベッジ)になる最も見込みのある候補であることを言明する。
波動
本開示の様々な実施形態に従い、波動(Wave)は、GCシステムの時間基準を形成する論理クロックである。波動は、すべての他の論理クロック(例えば、ファイルシステムのスナップショットなど)から独立であり、ただし、これらと相互作用することができる。
本開示の様々な実施形態に従い、波動(Wave)は、GCシステムの時間基準を形成する論理クロックである。波動は、すべての他の論理クロック(例えば、ファイルシステムのスナップショットなど)から独立であり、ただし、これらと相互作用することができる。
いくつかの実施形態において、変数250が、さらに現在の波動250ともいわれ、GCシステム200に関連付けられることが可能である。いくつかの実施形態において、現在の波動250はクラスタ幅の合意された値である。現在の波動250は、GCシステム200の現在のステートを表現することができる。現在の波動250は、単調に増加するように構成されることが可能である。
図3は、一例示的な実施形態に従う、波動タイムクロック310と、オブジェクトストア230内のオブジェクトに対する波動の影響とを示す概略である。いくつかの実施形態において、マーカ210がオブジェクトグラフをトラバースし、現在の波動250より大きい波動を有するグラフ内の各オブジェクトをマーク付けする。ミューテータ220は、現在の波動250より大きい波動を有する新しいオブジェクトを作成する。これら変更のすべてが、クラスタコンセンサスストア(cluster consensus store)内に公開されることが可能である。
様々な実施形態に従い、オブジェクトストア内の各オブジェクトは、波動(さらに、マーク又は「マーク波動」といわれる)でマーク付けされる。オブジェクトストア320からのオブジェクトが現在の波動250と比較されて、オブジェクトが生きている(alive)かどうかを決定することができる。現在の波動250に等しいか又はより大きいマークを有するオブジェクト340が、生きていると考えられる。現在の波動より小さいマークを有するオブジェクト360は、死んでいると考えられる。
いくつかの実施形態において、ミューテータ220は、ミューテータ予約波動(reservation wave)330を公開する。ミューテータ予約波動330は、マーカ210に対してまだ可視でないオブジェクト350の波動マークについての下限(lower bound)を示す。ミューテータ予約波動330は、オブジェクトが書き込まれるときに該オブジェクトに対して付与されるマークを表現する。ミューテータ220により書き込まれるマークは、現在の波動250より大きい。
いくつかの実施形態において、現在の波動250は、GCシステム200のための主要な論理クロックを表す。ミューテータ予約波動330は、オブジェクト(ブロック)が書き込まれるときに該オブジェクト(ブロック)に対して提供される。ミューテータ予約波動330は、現在の波動250に対してより大きいか又は等しく、次の波動に対してより大きいか又は等しくなければならない。最小予約(“minresv”)波動は、マーカ210がいったん実行を開始すると、除去される。最小予約波動は、直近に書き込まれたマーク付けされていないオブジェクトを保護することに必要とされる。
オブジェクト
本開示において使用される用語「オブジェクト」は、コンテンツアドレス可能データ(content-addressable data)の特定部分の複製のコレクションを参照し、各複製は、その独自の独立したマーカ/波動メタデータセットを有するように仮定される。一貫性のある又はコヒーレントなメタデータを有するための、オブジェクトの複製に対する要件はない。しかしながら、2つ以上の複製がメタデータを共有する場合、「単調に増加する」不変性が維持される限りにおいて、問題はない。表現「オブジェクト上にマーク波動を設定する」は、「オブジェクトのすべての複製上にマーク波動を設定する」を簡潔にしたものである。
本開示において使用される用語「オブジェクト」は、コンテンツアドレス可能データ(content-addressable data)の特定部分の複製のコレクションを参照し、各複製は、その独自の独立したマーカ/波動メタデータセットを有するように仮定される。一貫性のある又はコヒーレントなメタデータを有するための、オブジェクトの複製に対する要件はない。しかしながら、2つ以上の複製がメタデータを共有する場合、「単調に増加する」不変性が維持される限りにおいて、問題はない。表現「オブジェクト上にマーク波動を設定する」は、「オブジェクトのすべての複製上にマーク波動を設定する」を簡潔にしたものである。
さらに、モジュール(例えば、マーカ210)が、あるオブジェクトの特定の複製上にステートを設定することを要し、しかしこのオブジェクトが存在しない場合、該ステートをその初期ステートとして有するオブジェクトを作成することが合理的である。同様に、モジュールが、予期される箇所内にオブジェクトのいかなる複製も見つけることができない場合、このモジュールは、複製を見つけるためにすべてのあり得る場所を検索することができる。
いくつかの実施形態において、オブジェクトストアからのオブジェクトは、少なくとも3つの数を用いてマーク付けされることが可能である。図4は、オブジェクト400とそのマークとのブロック図である。マーク410がGCシステム200によって使用されて、オブジェクトが生きているかどうかが決定される。サブグラフ(subgraph)(SG)マーク420は、オブジェクト400が参照する子オブジェクト、該子オブジェクトが参照するオブジェクト、などのマーク410のうちの最小値である。換言すると、SGマーク420は、オブジェクト400から開始して下に移動することによって到達されることが可能なオブジェクトのマーク410のうちの最小値である。設定波動(SW)マーク430は、オブジェクト400がマーク付けされた瞬間における現在の波動250の値に設定される。マーカ210がオブジェクトを更新するとき、SWマーク430が使用されてマーク410のための新しい値を算出することができる。
図5は、一例示的な実施形態に従う、GCシステムのモジュール間の相互作用500を示すフローチャートである。いくつかの実施形態において、GCシステムのモジュール(すなわち、図2のマーカ210、ミューテータ220、及びスィーパ230)は、その独自のサイクルを実行するように構成される。
スィーパ/オブジェクトストレージ
いくつかの実施形態において、スィーパ230は、ブロック514において現在の波動250を読み出すように構成される。ブロック516において、スィーパは、現在の波動250より小さいマーク410を有するオブジェクトを削除するようにさらに構成される。
いくつかの実施形態において、スィーパ230は、ブロック514において現在の波動250を読み出すように構成される。ブロック516において、スィーパは、現在の波動250より小さいマーク410を有するオブジェクトを削除するようにさらに構成される。
スィーパ230は、下記の不変性:
1)スィーパ230は、現在の波動より大きいか又は等しい波動でマーク付けされたすべてのオブジェクトを存続させる;及び
2)所与の波動を書き込まれたオブジェクトを受け取るとき、スィーパ230は、既存オブジェクトの波動を自動的に調整するか、あるいは上記所与の波動を有するオブジェクトの新しいコピーを書き込むかのいずれかをする
によって制約されるように構成される。
1)スィーパ230は、現在の波動より大きいか又は等しい波動でマーク付けされたすべてのオブジェクトを存続させる;及び
2)所与の波動を書き込まれたオブジェクトを受け取るとき、スィーパ230は、既存オブジェクトの波動を自動的に調整するか、あるいは上記所与の波動を有するオブジェクトの新しいコピーを書き込むかのいずれかをする
によって制約されるように構成される。
様々な実施形態において、あらゆる個々の記憶装置が、その独自の独立したスィーパ230を実行することができる。スィーパ230は、記憶装置上に存在するすべてのオブジェクトをトラバースし、現在の波動についてのスィーパの視野で、マーク付けされている任意のオブジェクトにより消費される空間を解放する。スィーパ230は、現在の波動250より大きいか又は等しい波動を有するすべてのオブジェクトを保全し、その残りを回収することができる。
スィーパ230は、新しいブロックのストレージと競争する可能性がある。ブロックが古く、回収される処理中である場合、同じコンテンツの新しいインスタンスが新しい波動を書き込まれ、記憶装置は、既存オブジェクトが回収されることを防止してオブジェクトのマーク付けされた波動を更新するか、あるいは、オブジェクトの新しいコピーを書き込んで古いものが回収されることを可能にするかのいずれかをする。
スィーパ230は、読み出し要求に応答するとき、オブジェクトの現在の波動を考慮しなくてもよい。いくつかの実施形態において、読み出しは、現在の波動より小さいマーク波動を有するオブジェクトについて成功する場合がある。ゆえに、成功のオブジェクト読み出しは、装置が該オブジェクトを実際に記憶させていることの指標ではない。装置がオブジェクトのコピーを有すると保証するための唯一の方法は、現在のマークをそれに書き込み、あるいは、既存オブジェクト上に現在のマークを成功裏に設定することである。
不変性の制約内で、スィーパ230は、異なるポリシーを実施するための幅広い自由度を有する。ポリシーのうち1つが、オブジェクトをスキャンして生存性を決定するレートのidに関係する。大部分が空きであるストレージは、空間を解放することについて心配する必要なく、書込みを単に受け入れることができる。一方、ストレージがいっぱいに近づくとき、このストレージは、空間を解放することにリソースを費やして、ライタにバックプレッシャー(back-pressure)を適用することができる。スィーパ230は、該スィーパが波動により各オブジェクトを索引付けする表を維持する場合、回収可能空間についてスキャンする必要がなくてもよく、これにより、スィーパ230は、回収可能である空間を直接識別し及び回集することが可能にされる。
スィーパ230は、世代的なスキームを実施することをさらに選んでもよい。オブジェクトが、現在の波動をあまり越えないマークを書き込まれる場合、このことは、オブジェクトが長い寿命を有するように予期されないことを暗示する。こうしたオブジェクトは、該オブジェクトがメインのストレージプールに対して昇格されるほど十分に長く生き残らないかぎり、及びそうなるまで、若いオブジェクト領域の中に隔離される。
装置統合
ストレージを含むように事前に使用され、しかし除去された装置が、再導入されるとき、この装置を扱うためのいくつかのオプションが存在する。この装置上にのみ記憶された生きているオブジェクトがない場合、即座に一掃(スィーピング)を有効にすることは悪い影響を有さないことになる。
ストレージを含むように事前に使用され、しかし除去された装置が、再導入されるとき、この装置を扱うためのいくつかのオプションが存在する。この装置上にのみ記憶された生きているオブジェクトがない場合、即座に一掃(スィーピング)を有効にすることは悪い影響を有さないことになる。
しかしながら、装置が、失われたオブジェクトの最後のコピーを該装置上に有する可能性がある場合、装置上のすべてのオブジェクトが配慮される(accounted for)まで、この装置上でのスィーピングはおそらく無効にされるべきである。一般に、このことはおそらく、オブジェクトをあちこちに動かす間に新しい装置を収容するいかなる装置挿入に対しても、良い発想である(既存オブジェクトの再複製等)。スィーパ230がディスク帯域幅について競合しないように、上記のことが行われるまで、スィーパ230を無効にすることが最良であろう。
ミューテータ
引き続き図5を参照すると、ブロック502において、ミューテータ220は、次の波動を読み出し、現在の波動250より大きいミューテータ予約波動330を公開するように構成されることが可能である。ブロック504において、ミューテータ220は、ミューテータ予約波動330に等しいか又はより大きいマーク波動を有するオブジェクトを書き込むように動作可能である。ブロック506において、ミューテータ220は、グラフルートを公開する。
引き続き図5を参照すると、ブロック502において、ミューテータ220は、次の波動を読み出し、現在の波動250より大きいミューテータ予約波動330を公開するように構成されることが可能である。ブロック504において、ミューテータ220は、ミューテータ予約波動330に等しいか又はより大きいマーク波動を有するオブジェクトを書き込むように動作可能である。ブロック506において、ミューテータ220は、グラフルートを公開する。
様々な実施形態において、ミューテータ220は、下記の不変性:
1)ミューテータ220は、現在の波動250より大きいミューテータ予約波動330を公開する;
2)ミューテータ220は、すべての新しいオブジェクトを書き込み、あるいは、そのミューテータ予約波動より大きいか又は等しいマーク波動を有する既存のオブジェクトを更新する;及び
3)ミューテータ220は、そのミューテータ予約波動を、新しいオブジェクトグラフルートを公開した後にのみ除去する
に準拠する。
1)ミューテータ220は、現在の波動250より大きいミューテータ予約波動330を公開する;
2)ミューテータ220は、すべての新しいオブジェクトを書き込み、あるいは、そのミューテータ予約波動より大きいか又は等しいマーク波動を有する既存のオブジェクトを更新する;及び
3)ミューテータ220は、そのミューテータ予約波動を、新しいオブジェクトグラフルートを公開した後にのみ除去する
に準拠する。
様々な実施形態において、ミューテータ220は、クライアント要求に応答して新しいオブジェクトを生成し、ガーベッジを生成するエンティティである。ミューテータ220はハッシュを周期的に公開し、このハッシュはグラフのルートであり、マーカ210はこのグラフをトレースして、すべての参照されるオブジェクトを見つけることができる。これらルートの公開の間、ミューテータ220は、マーカ210に対して可視でないいかなるオブジェクトも適切に高い波動ですでにマーク付けされて、これらをスィーパ230から保護することと、マーカ210が上記波動を越えて現在の波動を前進させないこととを確実にしなければならない。
ゆえに、各ミューテータ220は下記を公開する:
1)ミューテータ予約波動。最も低い波動であり、これを用いてミューテータは新しいオブジェクトをタグ付けし(ただし、ミューテータはより高いものを選んでもよい)、ゆえに、マーカが設定することができる何らかの現在の波動に対する下限を設定する。ミューテータ予約波動は現在の波動250より大きい;
2)マーカ210がスキャンを開始するための、オブジェクトグラフに対する最も直近のルートのオブジェクト識別(ID);
3)現在の波動及び次の波動。これらから、ミューテータ220はミューテータ予約波動を決定する。ミューテータ予約波動は現在の波動より大きく、次の波動に影響される可能性がある。
1)ミューテータ予約波動。最も低い波動であり、これを用いてミューテータは新しいオブジェクトをタグ付けし(ただし、ミューテータはより高いものを選んでもよい)、ゆえに、マーカが設定することができる何らかの現在の波動に対する下限を設定する。ミューテータ予約波動は現在の波動250より大きい;
2)マーカ210がスキャンを開始するための、オブジェクトグラフに対する最も直近のルートのオブジェクト識別(ID);
3)現在の波動及び次の波動。これらから、ミューテータ220はミューテータ予約波動を決定する。ミューテータ予約波動は現在の波動より大きく、次の波動に影響される可能性がある。
アクティブなミューテータ220がミューテータ予約波動を常時公開しなければならず、ミューテータ予約波動はマーカ210とのインターロックを形成して、マーカ210が現在の波動を早まって前進させることを防止することが留意されるべきである。ミューテータ220が、新しいオブジェクトをもはや書き込んでおらず、現在の波動を追跡し続ける必要がもはやない(すなわち、ミューテータの最後の公開されたグラフルートが、このミューテータが気にするすべてのオブジェクトを包含する)場合、ミューテータ220はミューテータ予約波動を除去して、この波動がマーカを阻止することを防止することができる。
しかしながら、マーカ210が実行されている間に予約が除去される場合、マーカ210が現在の波動250を前の予約を越えた値に設定しようとし得る可能性があることが留意されるべきである。しかしながら、マーカ210が、上記予約の下で書き込まれたオブジェクトを包含するルートから開始されない場合、このことは、オブジェクトが不適切に回収されることにつながる可能性がある。上記の問題に対処するために、予約が除去されるときはいつでも、“minresv”キーがその現在の値と除去される予約とのうちの最小値に更新される。マーカ210が現在の波動250を前進させているとき、マーカ210は既存の予約によってだけでなく、さらに“minresv”によっても制約され、したがって、マーク付けされていないオブジェクトが依然として保護される。
ミューテータ220が、再度書き込みを開始することを必要とされる場合、ミューテータ220は、何らかを書き込む前に新しいミューテータ予約波動を確立し、これがマーカ210に対して可視であることを確実にする(現在の波動を読み出し、ミューテータ予約波動を書き込むためのアトミックな読み出し書き込みシーケンスが、十分であるべきである)。
マーカコーディネータ及びマーカ
いくつかの実施形態において、GCシステム200は、マーカコーディネータ(Marker Coordinator)530をさらに含むことができる。図5に示されるとおり、ブロック508において、マーカコーディネータ530は、ミューテータ予約波動及び(グラフ)ルートを読み出すように動作可能である。ブロック510において、マーカ210は、現在の波動250より大きいマーク波動でオブジェクトをマーク付けするように動作可能である。ブロック512において、マーカコーディネータ530は現在の波動250を公開する。現在の波動250は、ミューテータ予約波動のうちの最小値に設定される。次の波動は、ミューテータ予約波動のうちの最大値に設定される。
いくつかの実施形態において、GCシステム200は、マーカコーディネータ(Marker Coordinator)530をさらに含むことができる。図5に示されるとおり、ブロック508において、マーカコーディネータ530は、ミューテータ予約波動及び(グラフ)ルートを読み出すように動作可能である。ブロック510において、マーカ210は、現在の波動250より大きいマーク波動でオブジェクトをマーク付けするように動作可能である。ブロック512において、マーカコーディネータ530は現在の波動250を公開する。現在の波動250は、ミューテータ予約波動のうちの最小値に設定される。次の波動は、ミューテータ予約波動のうちの最大値に設定される。
マーカコーディネータ530及びマーカ210は、下記の不変性:
1)ミューテータ予約波動のうちの最小値において又は未満で現在の波動250を保持する;
2)次の現在の波動より大きいか又は等しいすべての到達可能オブジェクトをマーク付けする;及び
3)オブジェクト上のマーク波動を単調に増加させる
に準拠することが可能である。
1)ミューテータ予約波動のうちの最小値において又は未満で現在の波動250を保持する;
2)次の現在の波動より大きいか又は等しいすべての到達可能オブジェクトをマーク付けする;及び
3)オブジェクト上のマーク波動を単調に増加させる
に準拠することが可能である。
いくつかの実施形態において、マーカコーディネータ530は、オブジェクトストア320内で共存するファイルシステムの各々についてマーカ210を管理し、そのアクションのうち保守的な最小限を見つけるように動作可能である。各ファイルシステムについて、マーカコーディネータ530は、並列なマーカ210をその公開されたオブジェクトグラフルート上で開始する。すべてのマーカ210が終わったとき、マーカコーディネータ530は、公開されたミューテータ予約波動のうちの最小値を見つけ、現在の波動250を更新して最小値にマッチさせる。それから、マーカコーディネータ530は、少なくとも1つのファイルシステムが新しいルートを公開し、この新しいルートからマーク付けを開始するまで、待つように動作可能である。マーカコーディネータ530は、最小のミューテータ予約波動が変更されるまで、現在の波動250を前進させることができない。
いくつかの実施形態において、マーカコーディネータ530は、
1)グラフルートとミューテータ予約波動とを一緒に、アトミックに読み出し、
2)グラフルートからマーク付けして、現在の波動250に対してより大きいか又は等しいようにあらゆるオブジェクトのマークを更新し、
3)現在の波動250を、マーク付けの終わりにおけるすべてのミューテータ予約波動と最小ミューテータ予約波動とのうちの最小値に前進させ、ミューテータ220に対する助言として現在の波動より大きい次の波動を設定する
ことが必要とされる。
1)グラフルートとミューテータ予約波動とを一緒に、アトミックに読み出し、
2)グラフルートからマーク付けして、現在の波動250に対してより大きいか又は等しいようにあらゆるオブジェクトのマークを更新し、
3)現在の波動250を、マーク付けの終わりにおけるすべてのミューテータ予約波動と最小ミューテータ予約波動とのうちの最小値に前進させ、ミューテータ220に対する助言として現在の波動より大きい次の波動を設定する
ことが必要とされる。
最後の点は、マーカ210がルートからスキャンしている間にミューテータ220がルートとミューテータ予約波動とを更新する可能性があるため、必要とされる。しかしながら、マーカコーディネータ530が更新されたミューテータ予約波動を読み出し、これに従って現在の波動を更新する場合、マーカコーディネータ530は、該マーカコーディネータ530が対応するグラフルートからマーク付けしていなかったとき、その不変性に違反する必要があることになる。
複製されたオブジェクトをマーク付けするとき、オブジェクトのすべての複製がマーク付けされる。オブジェクトが複製を欠いている(あるいは、複製が置き間違えられる)場合、マーク付けは、これらを正しい箇所に再書き込みすることができる(既存のオブジェクトをマーク付けすることとその新しい重複を書き込むこととの間に意味的な差はまったくなく、新しいコピーをマーク付けすることと書き込むこととの間には、データが存在せずにマークが失敗することを除き、ほとんどない)。
内部的に、各ファイルシステムのマーカ実装は、完全にファイルシステム次第である。上記実装は直列化されることが可能であり、あるいは、一般にオブジェクトグラフマーク付けが高度に並列化可能であるため、高度に並列化されることが可能である。
マーカ210が有向グラフ上で動作し、マーカ210が深さ第1の後行順の(depth-first post-order)やり方において進む場合、マーカ210は、グラフの構造特性に依存して、オブジェクトを再マーク付けすることを回避することができる。マーカ210が、ルートからリーフにグラフを下へトラバースするとき、マーカ210が、マーカの波動に対してより大きいか又は等しいマーク波動ですでにマーク付けされているノードに直面する場合、マーカ210は、ノードがすでにマーク付けされているため、このグラフの部分をこれ以上探索する必要がない。上記のことは、グラフのうちすでにマーク付けされた部分を再訪することを回避することになり、このことは、共有されたノードをグラフが有することにより重複排除及びスナップショット差分を実装する場合に有用である。
マーカ210の唯一の要件は、マーカ210が現在の波動250より大きいマーク410でオブジェクトをマーク付けすることである。しかしながら、マーカ210は、オブジェクトが長い寿命を有するとマーカ210が決定することができる場合、現在の波動+1をかなり越えるオブジェクトマーク波動を設定することができる。例えば、オブジェクトが遠い将来に時間基準の満了を有するスナップショットの一部である場合、マーカ210は、現在の波動250をかなり越えて波動を増加させて、このオブジェクト空間を再トラバースする必要を回避することができる。この推定が正確である場合、グラフは再トラバースされる必要がなく、さらなるマーカ労力なしに回収されることが可能である。
マーカ210が、すべてのオブジェクトを少なくとも1回と、(冗長性のための複製を使用する場合に)オブジェクトのすべてのコピーとを訪問するため、マーカ210はさらに、あらゆるオブジェクトの十分なコピーが存在することと、これらが予期された箇所にあることとを確認し、あるいはより正確には、全体的に失われたオブジェクトを検出するのに、良い位置にいる。こうした上乗せ分の義務でマーカ210に過負荷をかけるか否か、又はこれを冗長性管理のための何らかの他のメカニズムに対する入力として使用するか否かは、全体的に実装の選択である。
いくつかの実施形態において、マーカコーディネータ530は、ミューテータ220がそのミューテータ予約波動を次に更新するときにミューテータ220が対象にするための「次の波動」をさらに公開することができる。このことは、現在の波動がミューテータ予約波動によって制約されるとしても、現在の波動が如何に迅速に前進するかをマーカ210が間接的に制御することを可能にする。次の波動なしでは、ミューテータ220は、その次のミューテータ予約波動についてどんな波動を対象にすべきか分からないことになり、「現在の波動+1」のようなものを選びがちであることになる。というのは、マーカコーディネータが、最も低いミューテータ予約波動を越えて現在の波動を前進させることができないからであり、このことは、システムが正しいであろう間、現在の波動が如何に迅速に前進することができるかにおいてシステムが柔軟性を失うことを意味する。次の波動が「最大(ミューテータ予約波動)+1」をデフォルトにする場合、このことは、すべてのミューテータがほぼ同じ波動を有するオブジェクトを書き込むことを可能にし、しかしさらに、現在の波動を劇的に前進させるための柔軟性を可能にする。例えば、マーカ210は、次の波動を「現在の波動+1,000,000」に設定して、あらゆるものが近い期間内に再マーク付けされることを効率的に引き起こし、システムのGCステートがリセットされることを可能にすることができる。
図5に示されるとおり、GCシステム200のモジュールの各々は、他のコンポーネントに対するゆるい結合で大部分は自律的に動作する。モジュールは、やりとりについての2つのチャネル、すなわち、オブジェクト上に残されたマークと、クラスタコンセンサスストア内の合意された値とを有する。クラスタコンセンサスストア合意は強力に順序付けられ、トランザクションの意味を提供し、ゆえに、任意的な読み出し・修正・書き込み動作がアトミックに実行されることが可能である。オブジェクト上のマークはとてもゆるく順序付けられ、所与のオブジェクトのマークを更新するときの唯一の制約は、オブジェクト上のマークが減少することができないことであり、マークはただ同じであるか又は増加することが可能である。しかしながら、任意のクラスタコンセンサスストアキーを変更する前に、すべてのオブジェクト更新が完了しなければならない。
非巡回グラフの増分的なマーク付け
非巡回グラフ(マークル木)を正しくマーク付けするために、オブジェクトごとの情報の第2の部分が必要とされる。いくつかの実施形態において、「マーク波動」は、オブジェクト生存性を決定するようにスィーパ230によって使用され、ゆえに、マーク付け段階の出力である。しかしながら、ミューテータ220がグラフに対して行う修正に面して増分のマーク付けを適切に機能させるために、第2の値が必要とされる。
非巡回グラフ(マークル木)を正しくマーク付けするために、オブジェクトごとの情報の第2の部分が必要とされる。いくつかの実施形態において、「マーク波動」は、オブジェクト生存性を決定するようにスィーパ230によって使用され、ゆえに、マーク付け段階の出力である。しかしながら、ミューテータ220がグラフに対して行う修正に面して増分のマーク付けを適切に機能させるために、第2の値が必要とされる。
図6は、オブジェクトごとに単一のマーク波動を有する一例示的なグラフ600を示すブロック図である。ミューテータ220は、(右側に図示されるとおり)ツリーの一部分に対して新しいオブジェクトを書き込むこととこれらに80のマーク波動を付与することとによって、ツリーの新しいバージョンを生成する。マーカ210が、80に対してより小さいか又は等しいマークを有するマークツリーに来る場合、マーカ210は、ルートノード上に80を見るとすぐに停止し、残りの波動76ノードをマーク付けされないままに残し、結果として、スィーパ230がこれらを過度に早く回収することになる。このことは、マーク波動Wを有するノードがWより小さいマーク波動を有するノードを決して指し示すべきでないという不変性についての違反から生じる。
しかしながら、単一のオブジェクトごとの波動数で上記不変性を維持することは、実行不可能である。上記のことは、ポインタ含有オブジェクトについてのあらゆる書き込みが、該オブジェクトが参照するサブグラフ内のあらゆるオブジェクト上の波動をさらに更新することを暗示するからである。
この問題を解決するために、第2のオブジェクトごとの値、(図4にさらに示されている)サブグラフ(SG)波動420が、導入される。サブグラフ波動420は、ポインタ含有オブジェクトのサブグラフ内のすべてのオブジェクトのうちの最小マーク波動の保守的な推定である。これを用いて、マーク波動がオブジェクト自体に対する生存性判断に依然として使用され、しかしサブグラフ波動420が、グラフを通してマーカ210をガイドするのに使用されることが可能である。サブグラフ波動420は純粋にマーカの内部の配慮に関し、他のGCモジュールのいずれによっても検査されない。
図7は、一例示的なグラフ700のブロック図であり、これにおいて、ノードはマーク波動410とサブグラフ波動420とでラベル付けされている(「マーク波動|サブグラフ波動」)。グラフは、最初、ミューテータ波動80で更新され(結果が右側に図示されている)、それから、グラフのノードがマーカによって訪問される(結果が下側に図示されている)。新たに書き込まれたノードはマーク波動80を書き込まれ、このマーク波動80は、現在の波動(76)と、サブグラフ波動の保守的な最小値の0とを上回る。マーカが、波動82に対してマーク付けするように通り抜けるとき、マーカは、82より小さいサブグラフ波動を有するノードを介して、82より小さいマーク波動を有するすべてのノードを訪問する。マーカが、波動90をすでにマーク付けされているサブグラフに直面するとき、マーカは、このサブグラフを全体的に回避することができる。オブジェクトのサブグラフ波動を設定することは、実際、サブグラフ内の波動のいずれかを調べることを必要としない。具体的な波動Wがマーク付けされ、マーカがあるオブジェクト下のサブグラフを完了した場合、マーカは、このオブジェクトをサブグラフ波動Wでマーク付けすることができる。マーカが、サブグラフオブジェクトのすべてが少なくとも上記波動を有すると知っているからである。
上記アプローチは、ポインタを含む各ノードがただ1つの解釈を有することを必要とする。すなわち、サブグラフオブジェクトの別個のセットを含む同じビットパターンの代替的な解釈は存在しない。このことは、単一のサブグラフフィールドを有することを可能にする。実際には、上記のことは配置するのが容易である。あらゆるポインタ担体オブジェクトが、そのフォーマットを識別することに使用可能な一意のマジックナンバーを有する場合、上記オブジェクトは、2つの異なるフォーマットが同じビット単位コンテンツを有し得ないことをさらに保証する。
リーフノードは、上記の検討から除外される。リーフノードは、定義によって他のオブジェクトに対するいかなるポインタも有さないからである。こうした場合、マーカはサブグラフフィールドを無視する。マーカはサブグラフフィールドを検査せず、サブグラフフィールドを修正しない。このことは、リーフノードがポインタ担体ノードと同じビットパターンを有さない(例えば、ファイルシステム内にファイルシステムイメージを記憶している)場合、重要である。この場合、ノードは、ポインタ担体オブジェクト及びリーフオブジェクトの双方として、マーカによって2回訪問される。
一般に、オブジェクトグラフのうちの多くの共有された部分は、スナップショット生成の結果として予期されることが可能である。このスキームは、(以下に説明される)ならされたマーク付けのない場合でさえ、スナップショットをマーク付けする増分のコストが、その合計サイズというよりも他のスナップショットからの差に比例することを意味する。
ならされたマーク付け
マーカ210は、その不変性を維持するために各オブジェクトに対してマーカ210が適用しなければならない下限マーク波動を有する。すべてのマーカ210が下限マークを常時適用した場合、これらマーカ210はあらゆるマーク段階におけるあらゆるライブオブジェクトを訪問することになる。この簡素なアプローチでは、各々のマーク付け段階のコストは、O(n)(これにおいて、nはオブジェクトの数である)、及び、mのマーク付け段階を生き残るオブジェクトについて全体でO(nm)である。
マーカ210は、その不変性を維持するために各オブジェクトに対してマーカ210が適用しなければならない下限マーク波動を有する。すべてのマーカ210が下限マークを常時適用した場合、これらマーカ210はあらゆるマーク段階におけるあらゆるライブオブジェクトを訪問することになる。この簡素なアプローチでは、各々のマーク付け段階のコストは、O(n)(これにおいて、nはオブジェクトの数である)、及び、mのマーク付け段階を生き残るオブジェクトについて全体でO(nm)である。
上記の下限を越えてマーク波動を適用することは、オブジェクト及びそのサブグラフに対するいかなるさらなるマーク付けも遅らせる効果を有し、このことは、マークをすることのコストをならす(amortizes)。例えば、オブジェクトのサブグラフが、遠い将来に時間の満了ポイントを有するスナップショットを表現し、それから、これらオブジェクトのすべてが、現在の波動をかなり越えたマーク波動でマーク付けされることが可能である。理想的には、マーク波動は、現在の波動が如何に迅速に前進しているかから外挿されて、満了の時間においてこれが何であることになるかが推定される。正確に行われる場合、このことは、サブグラフが1回だけマーク付けされ、オブジェクトのすべてがこれらが満了する時点において回収可能ガーベッジになることを意味する。上記推定を誤って得ることはいかなる正確さ問題も引き起こさず、単に非効率さを引き起こす。すなわち、非常に低く、サブグラフが再度マーク付けされる必要があり、非常に高く、オブジェクトが非常に長く存続される。
様々な実施形態において、マーク付けはポリシー駆動され、アプリケーション固有の知識、ユーザ/プログラム的入力、ストレージ使用見込みなどを使用することによってならされることが可能である。
幾何級数のならされたマーク付け
他の実施形態において、ならされたマーク付けのストラテジは、幾何級数マーク付けスキームの使用を含む。オブジェクトが現在の波動+1のマーク波動を書き込まれ、それから毎回オブジェクトが再訪されるたびに倍増パターンでマーク付けされる場合、実質上、オブジェクトは、1回、それから2つの段階の後、4などとマーク付けされることになる。
他の実施形態において、ならされたマーク付けのストラテジは、幾何級数マーク付けスキームの使用を含む。オブジェクトが現在の波動+1のマーク波動を書き込まれ、それから毎回オブジェクトが再訪されるたびに倍増パターンでマーク付けされる場合、実質上、オブジェクトは、1回、それから2つの段階の後、4などとマーク付けされることになる。
幾何級数マーク付けスキームの明らかなマイナス面は、毎回オブジェクトが倍増の波動でマーク付けされるたび、オブジェクトの寿命が倍増されることである。オブジェクトが明らかに無限の命をいずれにせよ有する場合、このことは何ら問題を引き起こさない。しかし、オブジェクトがその時間内に満了する場合、オブジェクトは不必要に存続されることになる。上記が問題であるかどうかを決定することは、オブジェクト寿命が実際に如何に分散されるかに依存する。オブジェクトが時間Nの間、生きて続けている場合、このオブジェクトがさらなる2N時間の間、生存することになる見込みはどれだけ?であろうか。
マークスケジューリング
オブジェクトグラフをマーク付けすることと現在の波動250を前進させることとの各サイクルは、マーク段階として知られる。スィーパ230が、現在の波動の前にマーク付けされたオブジェクトのみ解除することができるため、スィーパ230は、現在の波動250が前進するまで作業することができない。マーク付けが長時間かかる場合、任意のストレージが解除されることができる前に、長いレイテンシが存在する。最終的に、同じ数のブロックが解除されることになり、スループットは平均において良好であり、しかしこのことはでこぼこ効果(lumpy effect)につながる。
オブジェクトグラフをマーク付けすることと現在の波動250を前進させることとの各サイクルは、マーク段階として知られる。スィーパ230が、現在の波動の前にマーク付けされたオブジェクトのみ解除することができるため、スィーパ230は、現在の波動250が前進するまで作業することができない。マーク付けが長時間かかる場合、任意のストレージが解除されることができる前に、長いレイテンシが存在する。最終的に、同じ数のブロックが解除されることになり、スループットは平均において良好であり、しかしこのことはでこぼこ効果(lumpy effect)につながる。
上記の問題に対処するために、いくつかの実施形態は、前もっていずれかの1つの段階において実行される必要があるマーク付け作業の量を平滑化することができる。オブジェクトのセットをどんな波動でマーク付けするかを決めるとき、いくつかの実施形態は、他のオブジェクトをマーク付けすることに使用された波動とは区別可能な波動を選ぶことができる。こうしたオブジェクトが、再マーク付けに対して出現するときにオブジェクトグラフ内で依然として到達可能である場合、マーカ210は、このサブセットに対して労力を費やし、それから別の段階において他のオブジェクトをマーク付けする必要だけあることになる。
このことは各マーク段階を制限された量の作業にし、現在の波動を固定レートで前進させ続け、(仮に解除される何かが存在すると仮定して)スィーパ(230)に回収可能ストレージの連続的なストリームを与えることになる。
コンセンサスデータモデル
いくつかの実施形態において、GCシステム200の様々なモジュールによって互いにステートをやりとりすることに使用されるすべてのキーが記憶される。
いくつかの実施形態において、GCシステム200の様々なモジュールによって互いにステートをやりとりすることに使用されるすべてのキーが記憶される。
例示的なGCキー(フラグ)が下記の表に提示される。
Smashfs細目
基本的なGCシステム200が、使用されるファイルシステム及びデータモデルに対して断定的でない可能性がある間、ファイルシステムが特定の詳細において如何に機能するかを探索することには価値があり得る。
基本的なGCシステム200が、使用されるファイルシステム及びデータモデルに対して断定的でない可能性がある間、ファイルシステムが特定の詳細において如何に機能するかを探索することには価値があり得る。
スナップショット及びメタルート
オブジェクトストア内の各ファイルシステムインスタンスは、メタルートを有する。メタルートは、すべてのスナップショットルートを指し示すツリーのルートである。ゆえに、特定のメタルートオブジェクトに対するポインタは、(ファイルシステムについてのライブの現在のステートが単純に最も直近のスナップショットである場合、)存在するすべてのスナップショットとすべてのそのコンテンツとであるファイルシステムの合計ステートを完全に説明する。
オブジェクトストア内の各ファイルシステムインスタンスは、メタルートを有する。メタルートは、すべてのスナップショットルートを指し示すツリーのルートである。ゆえに、特定のメタルートオブジェクトに対するポインタは、(ファイルシステムについてのライブの現在のステートが単純に最も直近のスナップショットである場合、)存在するすべてのスナップショットとすべてのそのコンテンツとであるファイルシステムの合計ステートを完全に説明する。
メタルートは、各ファイルシステムについて、単独のオブジェクトである。一時にただ1つのメタルートが存在し、いったん新しいメタルートがファイルシステムに対して合意されると、前のメタルートはガーベッジになる。しかしながら、ファイルシステム内の大抵のデータは、スナップショットからスナップショットへ変更されないまま残ることになることが予期される。
スナップショット寿命モデル
時間基準
いくつかの実施形態において、各smashfsインスタンスはスナップショットポリシーを有し、このポリシーは純粋に時間ベースである。すなわち、具体的な時間境界をカバーするある範囲の時間について存在するスナップショットは、この境界の関数として、ある時間の期間について保全されることになる。例えば、分の境界に及ぶスナップショットは、1時間の間保たれることが可能であり、時間の境界に及ぶスナップショットは、1日の間保全されることが可能である。このことは、スナップショットに、その満了時間として関連付けられる。
時間基準
いくつかの実施形態において、各smashfsインスタンスはスナップショットポリシーを有し、このポリシーは純粋に時間ベースである。すなわち、具体的な時間境界をカバーするある範囲の時間について存在するスナップショットは、この境界の関数として、ある時間の期間について保全されることになる。例えば、分の境界に及ぶスナップショットは、1時間の間保たれることが可能であり、時間の境界に及ぶスナップショットは、1日の間保全されることが可能である。このことは、スナップショットに、その満了時間として関連付けられる。
満了時間は、スナップショットが新しいユーザに対して可視であるのをいつ止めるかを決定する。しかしながら、スナップショットについての現在のアクティブなユーザが存在する間にスナップショットが満了する場合、スナップショット全体が、これをユーザが使用し終えるまで保全される。このことは、スナップショットがその満了時間を越えて無期限に生きたまま保たれることが可能であることを意味する。
非時間基準
他の実施形態において、スナップショットは非時間基準スナップショットでない。非時間基準スナップショットは、ユーザアクションによってか又はプログラム的にかのいずれかで明示的に作成され、決して満了しなくてもよく、あるいは広範囲のとり得るポリシー条件下でのみ満了してもよい。これらスナップショットはそれ自体が満了時間を有さず、しかし、既存のユーザが残ることを可能にすると同時に新しいユーザを防止する満了のステートを依然として有する。
他の実施形態において、スナップショットは非時間基準スナップショットでない。非時間基準スナップショットは、ユーザアクションによってか又はプログラム的にかのいずれかで明示的に作成され、決して満了しなくてもよく、あるいは広範囲のとり得るポリシー条件下でのみ満了してもよい。これらスナップショットはそれ自体が満了時間を有さず、しかし、既存のユーザが残ることを可能にすると同時に新しいユーザを防止する満了のステートを依然として有する。
いくつかの方法において、このことは、時間基準モデルが如何に最後のスナップショットを扱うかの一般化であり、ライブファイルシステムステートを表現する。これは、より新しいライブファイルシステムスナップショットで置換されるまで、決して満了しないことが可能である。
メタルート実装
各スナップショットは、メタルート内でエントリとして表現されることが可能である。エントリは、キーを有してもよい。キーには、be64としてエンコードされたsnapidを含むことができる。いくつかの実施形態において、キー空間は、他の索引を収容するように拡張されてもよい。エントリは下記を含む。
各スナップショットは、メタルート内でエントリとして表現されることが可能である。エントリは、キーを有してもよい。キーには、be64としてエンコードされたsnapidを含むことができる。いくつかの実施形態において、キー空間は、他の索引を収容するように拡張されてもよい。エントリは下記を含む。
ファイルシステムデータモデル
スナップショット非巡回グラフに関して考慮すべき2つのデータモデルがある。スナップショットは、共通のサブツリーを共有することができる。マーカは、この特性の利点を活かして再マーク付けを回避することができる。
スナップショット非巡回グラフに関して考慮すべき2つのデータモデルがある。スナップショットは、共通のサブツリーを共有することができる。マーカは、この特性の利点を活かして再マーク付けを回避することができる。
名前空間マークル木
各スナップショットは、ファイルシステム名前空間に基づくマークル木である。ルートノードはルートディレクトリであり、ディレクトリはエントリを含む。ディレクトリ内の各エントリは、(name, inum, inodeハッシュ)タプルからなる。これのうち、マーカ210に関連のある唯一の成分は、inodeハッシュである。
各スナップショットは、ファイルシステム名前空間に基づくマークル木である。ルートノードはルートディレクトリであり、ディレクトリはエントリを含む。ディレクトリ内の各エントリは、(name, inum, inodeハッシュ)タプルからなる。これのうち、マーカ210に関連のある唯一の成分は、inodeハッシュである。
各inodeは、さらなるハッシュ、xhash及びchashを含む。xhashはファイルの拡張された属性を参照し、chashは(小さいファイルについて)ファイルのデータを直接参照するか、あるいは、ファイルオフセットによって暗黙的に索引付けされるファイルの内容を通じてマークル木のルートを参照するかのいずれかである。ディレクトリinodeの場合、chashはディレクトリブロックを参照し、ディレクトリブロックは次いでさらなるファイル及びディレクトリinodeを参照する。このことは、単一の空でないファイルをマーク付けすることが少なくとも3つのオブジェクトアクセスをとることを意味する。
B木Smashfs
B木Smashfs(B+マークル木におけるSmashfsを参照)は完全なマークル木である(イミュータブルコンテンツアドレス可能ストア内に構築されるいかなるツリーもそうでなければならないため)。
B木Smashfs(B+マークル木におけるSmashfsを参照)は完全なマークル木である(イミュータブルコンテンツアドレス可能ストア内に構築されるいかなるツリーもそうでなければならないため)。
B+木ノードはオブジェクトストレージ内に1:1で記憶され、ゆえに、用語のノード及びオブジェクトは、上記文脈において交換可能に使用されることが可能である。名前空間マークル木とは違って、B+木深度は約O(log n)に制限され、これにおいて、nはツリー内のノードの数である。さらに、マーク付けすべき、より少ないノード(=オブジェクト)が存在する。なぜならば、多くの小さいファイルシステムエンティティがB+木ノードへ一緒にパックされる(packed)からである。
基本的なマーク付けアルゴリズムは名前空間マークルと同じであり、しかし、取り扱うべき、より少ない区別可能な場合が存在する。マーク付けのコアは、B+木自体の中のすべてのオブジェクトを列挙することと、それから、B+木のリーフ内のデータアイテムが他のオブジェクト(すなわち、ツリーへインライン展開するのには大きすぎるファイルの部分と、大きいxattrs)に対して有する任意の外部参照をマーク付けすることとである。
このことは、多くのファイルシステムエンティティが各オブジェクトマークでマーク付けされ、ツリー深度が制限されるので再帰的なマーク付けを使用することが安全であることを意味する。さらに、B+木が幅広く浅いツリーであるため、このことは、ツリーのうちすでにマーク付けされた部分をスキップすることがとても効果的であることを意味する。
図8は、コンピュータシステム800の例示的な電子形態におけるマシンのコンピューティング装置の概略表現を示し、これにおいて、本明細書に論じられる方法論のうち任意の1つ以上をマシンに実行させる命令セットが実行されることができる。様々な例示的な実施形態において、マシンはスタンドアロン装置として動作し、あるいは他のマシンに接続され(例えば、ネットワーク化され)てもよい。ネットワーク化された展開において、マシンは、サーバクライアントネットワーク環境の中でサーバ又はクライアントマシンの能力において、又は、ピアツーピア(又は、分散型)ネットワーク環境においてピアマシンとして動作し得る。マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、パーソナルデジタルアシスタント、セルラー電話、ポータブル音楽プレーヤ(例えば、MP3(Moving Picture Experts Group Audio Layer 3)プレーヤなどのポータブルハードドライブオーディオ装置)、ゲーミングパッド、ポータブルゲーミングコンソール、車載(in-vehicle)コンピュータ、スマートホームコンピュータ、又は、マシンにより行われるべきアクションを指定する命令セット(順次の、又はその他の)を実行することができる任意のマシンであり得る。さらに、単一のマシンだけが例示されているが、用語「マシン」は、さらに、命令の一セット(又は、複数のセット)を個々に又は共同で実行して本明細書に論じられる方法論のうち任意の1つ以上を遂行するマシンの任意の集合を含むものとみなされるべきである。
例示的なコンピュータシステム800は、一のプロセッサ又は複数のプロセッサ805(例えば、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、又は双方)と、メインメモリ810及びスタティックメモリ815とを含み、これらは、バス820を介して互いに通信する。コンピュータシステム800は、ビデオディスプレイユニット825(例えば、液晶ディスプレイ(LCD))をさらに含み得る。コンピュータシステム800は、少なくとも1つの入力装置830、例えば、英数字入力装置(例えば、キーボード)、カーソル制御装置(例えば、マウス)、マイクロフォン、デジタルカメラ、ビデオカメラなどをさらに含み得る。コンピュータシステム800は、ディスクドライブユニット835、信号生成装置840(例えば、スピーカー)、及びネットワークインターフェース装置845をさらに含む。
ディスクドライブユニット835はコンピュータ読取可能媒体850を含み、コンピュータ読取可能媒体850は、本明細書に説明される方法論又は機能のうち任意の1つ以上を具現化し又はこれらにより利用される1つ以上の命令セット及びデータ構造(例えば、命令855)を記憶する。命令855は、さらに、コンピュータシステム800による命令855の実行の間、メインメモリ810内及び/又はプロセッサ805内に、完全に又は少なくとも部分的に存在し得る。メインメモリ810及びプロセッサ805もまた、マシン読取可能媒体を構成する。
命令855は、さらに、複数の周知のトランスファープロトコルのうち任意のもの(例えば、ハイパーテキストトランスファープロトコル(HTTP)、CAN、シリアル、及びモドバス(Modbus))を利用するネットワークインターフェース装置845を介して、ネットワーク860を通じて送信され又は受信されることができる。例えば、ネットワーク860には、インターネット、ローカルイントラネット、PAN(パーソナルエリアネットワーク)、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、MAN(メトロポリタンエリアネットワーク)、仮想プライベートネットワーク(VPN)、ストレージエリアネットワーク(SAN)、フレームリレー接続、高度インテリジェントネットワーク(AIN)接続、同期型光ネットワーク(SONET)接続、デジタルT1、T3、E1、若しくはE3回線、デジタルデータサービス(DDS)接続、DSL(デジタル加入者回線)接続、イーサネット(登録商標)接続、ISDN(統合サービスデジタルネットワーク)回線、ケーブルモデム、ATM(非同期転送モード)接続、又はFDDI(ファイバ分散データインターフェース)若しくはCDDI(銅線分散データインターフェース)接続のうち、1つ以上が含まれ得る。さらに、通信が、GPRS(General Packet Radio Service)、GSM(登録商標)(Global System for Mobile Communication)、CDMA(符号分割多元接続)若しくはTDMA(時分割多元接続)、セルラーフォンネットワーク、GPS(グローバルポジショニングシステム)、CDPD(セルラーデジタルパケットデータ)、RIM(リサーチインモーション社)デュプレックスページングネットワーク、Bluetooth(登録商標)無線、又はIEEE802.11ベースの無線周波数ネットワークを含む、様々なワイヤレスネットワークのうち任意のものに対するリンクをさらに含み得る。
コンピュータ読取可能媒体850が、一例示的な実施形態において単一の媒体であるように図示されているが、用語「コンピュータ読取可能媒体」は、1つ以上の命令セットを記憶する単一の媒体又は複数の媒体(例えば、集中型又は分散型のデータベース及び/又は関連付けられたキャッシュ及びサーバ)を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、さらに、マシンによる実行のための命令セットを記憶し、エンコードし、又は運ぶことができて、本出願の方法論のうち任意の1つ以上をマシンに実行させ、あるいは上記の命令セットにより利用され又はこれに関連付けられたデータ構造を記憶し、エンコードし、又は運ぶことができる任意の媒体を含むようにみなされるべきである。用語「コンピュータ読取可能媒体」は、したがって、これらに限られないが、ソリッドステートメモリ、光及び磁気媒体を含むようにみなされるべきである。こうした媒体には、さらに、限定でなく、ハードディスク、フロッピーディスク、フラッシュメモリカード、デジタルビデオディスク(DVD)、ランダムアクセスメモリ(RAM)、読取専用メモリ(ROM)などが含まれ得る。
本明細書に説明される例示的な実施形態は、コンピュータ上にインストールされるコンピュータ実行可能命令(例えば、ソフトウェア)を含む動作環境において、ハードウェアにおいて、又はソフトウェアとハードウェアとの組み合わせにおいて実装され得る。コンピュータ実行可能命令は、コンピュータプログラミング言語において書かれてもよく、あるいはファームウェアロジックにおいて具現化されてもよい。認識されている標準に合うプログラミング言語において書かれる場合、上記の命令は、様々なハードウェアプラットフォーム上で、及び、様々なオペレーティングシステムに対するインターフェースのために実行されることができる。これらに限定されないが、本願方法を実施するコンピュータソフトウェアプログラムは、任意数の適切なプログラミング言語、例えば、ハイパーテキストマークアップ言語(HTML)、ダイナミックHTML、拡張可能マークアップ言語(Extensible Markup Language)(XML)、拡張可能スタイルシート言語(Extensible Stylesheet Language)(XSL)、文書スタイル意味指定言語(Document Style Semantics and Specification Language)(DSSSL)、カスケーティングスタイルシート(CSS)、同期型マルチメディア統合言語(Synchronized Multimedia Integration Language)(SMIL)、ワイヤレスマークアップ言語(WML)、Java(登録商標)TM、Jini(登録商標)TM、C、C++、Perl、UNIXシェル、ビジュアルベーシック若しくはビジュアルベーシックスクリプト、仮想現実マークアップ言語(Virtual Reality Markup Language)(VRML)、ColdFusion(登録商標)TM、又は、他のコンパイラ、アセンブラ、インタプリタ、若しくは他のコンピュータの言語若しくはプラットフォームにおいて書かれることができる。
こうして、ストレージ内のオブジェクトのガーベッジコレクションに関してオブジェクトをマーク付けする手法が開示された。実施形態が、特定の例示的な実施形態を参照して説明されたが、本出願のより広い主旨及び範囲から逸脱することなく、上記の例示的な実施形態に対して様々な修正及び変更がなされ得ることが明らかであろう。したがって、明細書及び図面は、限定的ではなく例示的な意味において考慮されるべきである。
Claims (20)
- ストレージ内のオブジェクトのガーベッジコレクションのための、コンピュータにより実施される方法であって、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第1の数に関連付けるステップと、
前記オブジェクトの各々を第2の数に関連付けるステップであって、前記第2の数は、さらなるオブジェクトに関連付けられた第1の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第1の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも1つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも1つの新しいオブジェクトに関連付けられた第1の数を新しい第1の数に設定するステップであって、前記新しい第1の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも1つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第1の数を更新するステップであって、前記の更新された第1の数は、各オブジェクトに関連付けられた第1の数と、該第1の数が設定された前記論理クロックの値との関数である、ステップと、
を含む方法。 - 前記新しいサブツリー内の各オブジェクトの第1の数は、前記新しいサブツリーをトラバースすることと、前記新しい第1の数に等しいか又はより大きい第2の数を有する前オブジェクトにより参照される前記新しいサブツリー内の分岐をスキップすることとによって更新される、請求項1に記載の方法。
- 前記第1の数を更新することは式UN=SW+2*(FN-SW)によって定義され、UNは前記更新された第1の数であり、FNは前記第1の数であり、SWは前記第1の数が設定された前記論理クロックの値である、請求項1に記載の方法。
- 前記第1の数を設定する前にコンセンサスストア内に予約数を公開するステップであって、前記予約数は前記論理クロックより大きい、ステップ、をさらに含む請求項1に記載の方法。
- 前記新しい第1の数は前記予約数に対してより大きいか又は等しい、請求項4に記載の方法。
- 前記予約数は、ストレージに対するオブジェクトのさらなる追加に応答して前記コンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく、請求項4に記載の方法。
- 前記論理クロックの増加は、前記の公開された予約数と前記さらなる予約数とのうちの最小値によって限定される、請求項5に記載の方法。
- 前記少なくとも1つの新しいオブジェクトを前記ストレージに追加することに関連付けられた新しいルートを公開するステップ、をさらに含む請求項4に記載の方法。
- 前記新しいルートが公開されていると決定するステップと、前記の決定に応答して、
前記論理クロックを、前記の公開された予約数と前記さらなる予約数とのうちの最小値に増加させるステップと、
前記新しいルートから到達可能な各オブジェクトの第1の数を更新するステップと、
をさらに含む請求項8に記載の方法。 - 前記の公開された予約数を前記コンセンサスストアから除去するステップ、をさらに含む請求項8に記載の方法。
- ストレージ内のオブジェクトのガーベッジコレクションのためのシステムであって、
少なくとも1つのプロセッサと、
前記少なくとも1つのプロセッサに通信可能に結合されたメモリと、を含み、
前記メモリは命令を記憶し、前記命令は前記少なくとも1つのプロセッサにより実行されるときに、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第1の数に関連付けるステップと、
前記オブジェクトの各々を第2の数に関連付けるステップであって、前記第2の数は、さらなるオブジェクトに関連付けられた第1の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第1の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも1つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも1つの新しいオブジェクトに関連付けられた第1の数を新しい第1の数に設定するステップであって、前記新しい第1の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも1つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第1の数を更新するステップであって、前記の更新された第1の数は、各オブジェクトに関連付けられた第1の数と、該第1の数が設定された前記論理クロックの値との関数である、ステップと、
を含む方法を実行する、システム。 - 前記新しいサブツリー内の各オブジェクトの第1の数は、前記新しいサブツリーをトラバースすることと、前記新しい第1の数に等しいか又はより大きい第2の数を有する前オブジェクトにより参照される前記新しいサブツリー内の分岐をスキップすることとによって更新される、請求項11に記載のシステム。
- 前記第1の数を更新することは式UN=SW+2*(FN-SW)によって定義され、UNは前記更新された第1の数であり、FNは前記第1の数であり、SWは前記第1の数が設定された前記論理クロックの値である、請求項11に記載のシステム。
- 前記方法は、前記第1の数を設定する前にコンセンサスストア内に予約数を公開するステップであって、前記予約数は前記論理クロックより大きい、ステップをさらに含む、請求項11に記載のシステム。
- 前記新しい第1の数は前記予約数に対してより大きいか又は等しい、請求項14に記載のシステム。
- 前記予約数は、ストレージに対するオブジェクトのさらなる追加に応答して前記コンセンサスストア内に公開されるさらなる予約数のうちの最大値に基づく、請求項14に記載のシステム。
- 前記論理クロックの増加は、前記の公開された予約数と前記さらなる予約数とのうちの最小値によって限定される、請求項15に記載のシステム。
- 前記方法は、前記少なくとも1つの新しいオブジェクトを前記ストレージに追加することに関連付けられた新しいルートを公開するステップをさらに含む、請求項14に記載のシステム。
- 前記方法は、前記新しいルートが公開されていると決定するステップと、前記の決定に応答して、
前記論理クロックを、前記の公開された予約数と前記さらなる予約数とのうちの最小値に増加させるステップと、
前記の公開された予約数を前記コンセンサスストアから除去するステップと、
前記新しいルートから到達可能な各オブジェクトの第1の数を更新するステップと、
をさらに含む、請求項18に記載のシステム。 - 1つ以上のプロセッサにより実行されるときにストレージ内のオブジェクトのガーベッジコレクションのための方法を実行する命令を具現化させた非一時的コンピュータ読取可能記憶媒体であって、前記方法は、
論理クロックを提供するステップであって、前記論理クロックは単調に増加するように構成される、ステップと、
前記オブジェクトの各々を第1の数に関連付けるステップと、
前記オブジェクトの各々を第2の数に関連付けるステップであって、前記第2の数は、さらなるオブジェクトに関連付けられた第1の数のうちの最小値であり、前記さらなるオブジェクトは、前記オブジェクトが参照するサブツリーに属する、ステップと、
前記論理クロックが増加するとき、
前記論理クロックより小さい第1の数を有するオブジェクトを前記ストレージから削除するステップと、
少なくとも1つの新しいオブジェクトがストレージに追加されるとき、
前記少なくとも1つの新しいオブジェクトに関連付けられた第1の数を新しい第1の数に設定するステップであって、前記新しい第1の数は前記論理クロックに対して等しいか又はより大きい、ステップと、
前記少なくとも1つの新しいオブジェクトが参照する新しいサブツリー内の各オブジェクトの第1の数を更新するステップであって、前記の更新された第1の数は、各オブジェクトに関連付けられた第1の数と、該第1の数が設定された前記論理クロックの値との関数である、ステップと、
を含む、非一時的コンピュータ読取可能記憶媒体。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201562209192P | 2015-08-24 | 2015-08-24 | |
US62/209,192 | 2015-08-24 | ||
US15/240,809 US10379779B2 (en) | 2015-08-24 | 2016-08-18 | Concurrent, incremental, and generational mark and sweep garbage collection |
US15/240,809 | 2016-08-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2017045454A true JP2017045454A (ja) | 2017-03-02 |
Family
ID=56787326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2016161570A Pending JP2017045454A (ja) | 2015-08-24 | 2016-08-19 | 同時の、増分の及び世代のマークアンドスィープガーベッジコレクション |
Country Status (3)
Country | Link |
---|---|
US (1) | US10379779B2 (ja) |
EP (1) | EP3136246A1 (ja) |
JP (1) | JP2017045454A (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160110261A1 (en) * | 2013-05-07 | 2016-04-21 | Axcient, Inc. | Cloud storage using merkle trees |
US10949309B2 (en) * | 2015-12-28 | 2021-03-16 | Netapp Inc. | Snapshot creation with synchronous replication |
US10776210B2 (en) * | 2016-09-30 | 2020-09-15 | Hewlett Packard Enterprise Development Lp | Restoration of content of a volume |
CN107957918B (zh) * | 2016-10-14 | 2019-05-10 | 腾讯科技(深圳)有限公司 | 数据恢复方法和装置 |
US10901957B2 (en) * | 2018-08-29 | 2021-01-26 | International Business Machines Corporation | Checkpointing for increasing efficiency of a blockchain |
US11334439B2 (en) | 2018-08-29 | 2022-05-17 | International Business Machines Corporation | Checkpointing for increasing efficiency of a blockchain |
US11196542B2 (en) | 2018-08-29 | 2021-12-07 | International Business Machines Corporation | Checkpointing for increasing efficiency of a blockchain |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5530846A (en) * | 1993-12-29 | 1996-06-25 | International Business Machines Corporation | System for decoupling clock amortization from clock synchronization |
US20070022149A1 (en) * | 2005-07-22 | 2007-01-25 | International Business Machines Corporation | System and method for concurrent garbage collection |
US8364642B1 (en) * | 2010-07-07 | 2013-01-29 | Palantir Technologies, Inc. | Managing disconnected investigations |
US8510499B1 (en) * | 2010-08-30 | 2013-08-13 | Symantec Corporation | Solid state drive caching using memory structures to determine a storage space replacement candidate |
JP2016526717A (ja) * | 2013-06-12 | 2016-09-05 | エグザブロックス・コーポレーション | ハイブリッドガベージコレクション |
US8886601B1 (en) * | 2013-06-20 | 2014-11-11 | Palantir Technologies, Inc. | System and method for incrementally replicating investigative analysis data |
-
2016
- 2016-08-18 US US15/240,809 patent/US10379779B2/en active Active
- 2016-08-19 EP EP16185048.2A patent/EP3136246A1/en not_active Withdrawn
- 2016-08-19 JP JP2016161570A patent/JP2017045454A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3136246A1 (en) | 2017-03-01 |
US10379779B2 (en) | 2019-08-13 |
US20170060473A1 (en) | 2017-03-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7170701B2 (ja) | 高速コピー可能データベースを効率的に実装するための方法及び機器 | |
US10379779B2 (en) | Concurrent, incremental, and generational mark and sweep garbage collection | |
JP7410181B2 (ja) | ハイブリッド・インデックス作成方法、システム、プログラム | |
JP5656563B2 (ja) | 文書管理システム、文書管理システムの制御方法、プログラム | |
ES2969620T3 (es) | Métodos, dispositivos y sistemas para mantener la consistencia de metadatos y datos en todos los centros de datos | |
US9514137B2 (en) | Hybrid garbage collection | |
JP6309103B2 (ja) | スナップショットおよびクローンの複製 | |
US9646030B2 (en) | Computer-readable medium storing program and version control method | |
US8655896B2 (en) | Apparatus and methods for organizing data items having time of life intervals | |
AU2009258015B2 (en) | Paging hierarchical data | |
JP2011513853A (ja) | 連想ストレージのシステムと方法 | |
US20150106335A1 (en) | Hierarchical data archiving | |
CN102667772A (zh) | 文件级分级存储管理系统、方法和设备 | |
US20130132439A1 (en) | Organizing versioning according to permissions | |
US9438672B2 (en) | Method for client specific database change propagation | |
CN110352410A (zh) | 跟踪索引节点的访问模式以及预提取索引节点 | |
JP4971717B2 (ja) | ディレクトリ分散型記憶装置及びデータ処理要求移譲プログラム | |
US9922043B1 (en) | Data management platform | |
US20170061032A1 (en) | Systems and Methods for Organizing Data | |
JP6082029B2 (ja) | 情報処理方法、情報処理装置、及び、プログラム | |
JP2007156844A (ja) | データ登録・検索システムおよびデータ登録・検索方法 | |
US20190079948A1 (en) | Directory tree clones | |
CN118227565A (zh) | 一种数据管理方法、装置和电子设备 | |
US20110282911A1 (en) | Method and apparatus for providing a relational document-based datastore | |
CN116263758A (zh) | 数据写入方法、装置及计算设备 |