JP5500309B2 - ストレージ装置 - Google Patents
ストレージ装置 Download PDFInfo
- Publication number
- JP5500309B2 JP5500309B2 JP2013506369A JP2013506369A JP5500309B2 JP 5500309 B2 JP5500309 B2 JP 5500309B2 JP 2013506369 A JP2013506369 A JP 2013506369A JP 2013506369 A JP2013506369 A JP 2013506369A JP 5500309 B2 JP5500309 B2 JP 5500309B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- update information
- storage device
- value
- 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.)
- Active
Links
- 238000003860 storage Methods 0.000 title claims description 319
- 238000012217 deletion Methods 0.000 claims description 127
- 230000037430 deletion Effects 0.000 claims description 126
- 238000000034 method Methods 0.000 claims description 107
- 230000008569 process Effects 0.000 claims description 94
- 238000012545 processing Methods 0.000 claims description 44
- 230000010365 information processing Effects 0.000 claims description 17
- 238000003672 processing method Methods 0.000 claims description 12
- 230000001174 ascending effect Effects 0.000 claims description 8
- 230000014759 maintenance of location Effects 0.000 description 70
- 238000002474 experimental method Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 239000003550 marker Substances 0.000 description 16
- 238000010586 diagram Methods 0.000 description 10
- 238000012360 testing method Methods 0.000 description 9
- 238000005457 optimization Methods 0.000 description 8
- 238000007792 addition Methods 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 230000009977 dual effect Effects 0.000 description 7
- 239000012634 fragment Substances 0.000 description 7
- 238000010845 search algorithm Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 5
- 230000002085 persistent effect Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 241000243251 Hydra Species 0.000 description 3
- 241000406668 Loxodonta cyclotis Species 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- QRXWMOHMRWLFEY-UHFFFAOYSA-N isoniazide Chemical compound NNC(=O)C1=CC=NC=C1 QRXWMOHMRWLFEY-UHFFFAOYSA-N 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 230000000737 periodic effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000010923 batch production Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- VQLYBLABXAHUDN-UHFFFAOYSA-N bis(4-fluorophenyl)-methyl-(1,2,4-triazol-1-ylmethyl)silane;methyl n-(1h-benzimidazol-2-yl)carbamate Chemical compound C1=CC=C2NC(NC(=O)OC)=NC2=C1.C=1C=C(F)C=CC=1[Si](C=1C=CC(F)=CC=1)(C)CN1C=NC=N1 VQLYBLABXAHUDN-UHFFFAOYSA-N 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000002932 luster Substances 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000008450 motivation Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000008929 regeneration Effects 0.000 description 1
- 238000011069 regeneration method Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- 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/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1748—De-duplication implemented within the file system, e.g. based on file segments
- G06F16/1752—De-duplication implemented within the file system, e.g. based on file segments based on file chunks
-
- 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
- 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/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- 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/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- 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/14—Details of searching files based on file metadata
- G06F16/148—File search processing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段と、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段と、を備え、
前記データ書き込み手段は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記データ特定手段は、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
という構成をとる。
情報処理装置に、
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段と、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段と、を実現させると共に、
前記データ書き込み手段は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記データ特定手段は、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
ことを実現させるためのプログラムである。
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶してデータを書き込み、このとき、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定する際に、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
という構成をとる。
本発明の第1の実施形態を、図1乃至図11を参照して説明する。図1は、システム全体の構成を示すブロック図である。図2は、ストレージシステムの概略を示すブロック図であり、図3は、ストレージシステムの構成を示す機能ブロック図である。図4乃至図5は、ストレージシステムにおけるデータ書き込み処理の動作を説明するための説明図である。図6乃至図11は、ストレージシステムにおけるデータ検索処理の様子を説明するための説明図である。
換言すると、「reclamation tail」は以下のように計算される。
−まず、スナップショット「28」に対する「reclamation tail長さ」が「3」から、スナップショット「25」,「26」,「27」を選択する。
−スナップショット「25」,「26」,「27」のパススナップショット「1」,「2」,「4」,「8」,「16」,「24」,「26」を足す。
−最新のスナップショット「28」のパススナップショット「1」,「2」,「4」,「8」,「16」,「24」を引く。
結果として、上述した場合の「reclamation tail」は、「25」,「26」,「27」となる。
そして、データ特定部13は、このように「reclamation tail」として特定されたスナップショット「25」,「26」,「27」のバージョン情報を、非削除対象バージョン情報に含める。これにより、これら「reclamation tail」のスナップショットも、データ削除部14による削除対象から除外される。
換言すると、「reclamation tail」は以下のように計算される。
−まず、スナップショット「26」に対する「reclamation tail長さ」が「6」から、スナップショット「19」−「25」を選択する。
−スナップショット「19」−「25」のパススナップショット「1」,「2」,「4」,「8」,「16」,「18」,「20」,「22」,「24」を足す。
−最新のスナップショット「26」のパススナップショット「1」,「2」,「4」,「8」,「16」,「24」を引く。
結果として、上述した場合の「reclamation tail」は、「18」−「23」,「25」となる。
そして、データ特定部13は、このように「reclamation tail」として特定されたスナップショット「18」−「23」,「25」のバージョン情報を、非削除対象バージョン情報に含める。これにより、これら「reclamation tail」のスナップショットも、データ削除部14による削除対象から除外される。
本発明の第2の実施形態を、以下の論文形式にて説明する。
(イントロダクション)
コンテンツアドレスストレージシステム(CAS)は、不変のデータブロックがそれらのデータ内容から生成されたアドレスによって復元可能であり、永続的に保存可能なストレージモデルである。ブロックがそれらの位置にアドレス指定されるCASは、ハードディスク・ドライブ(HDD)のような、これまでのブロック格納方法とは対照的である。CASにおけるコンテンツベースのブロックアドレスは、「MD5」あるいは「SHA-1」のような、典型的な暗号ハッシュ関数で生成される。それらの機能は、効率的に数バイトにブロックの内容を要約した値を生成し、高い確率で、2つの異なるブロックでは、異なる要約の値を生成する。その結果、コンテンツベースのアドレスにより、高い確率で、固有のブロックを特定することができる。
この論文は、HYDRAstor "HYDRA09"といった分散CASシステム上で作動する高い可用性を有するトランザクションファイルシステムである、「Hydra トランザクションファイルシステム」(「Hydra TFS」と訳す)、と称する。ファイルシステムオペレーションにおけるトランザクションの方法は、ファイル内容の修正から、メタデータの構造を変更すること(例えば、ファイルやディレクトリを作成したり移動すること)まで、広くカバーしている。トランザクションが中断される場合は、常に、他のユーザに意識させずに、自動的にロールバックという結果となる。さらに、失敗したトランザクションを実行したアプリケーションは、再び作動しないかもしれず、そのような状況であっても、ロールバックは実行される。この特性は、基本的なCASシステムの特性である故障に対するロバスト性、原子性、ガベージコレクションによって達成される。
以降の章の構成は、以下のとおりである。
第2章では、HYDRAstorブロックストレージシステムの一般的な概要、および、HydraTFSにとって不可欠な構成について説明する。第3章では、HydraTFSの必要条件の概要について説明する。第4章では、HydraTFSの概要を説明する。後の3つの章では、HydraTFSがどのように作動するかを詳細に説明する。第5章では、クライアントによる分離された方法で準備されたファイルの単一バージョンであるスナップショット内のクライアントデータの構造について説明する。第6章では、スナップショットのコレクションとしてファイルを示す。この章では、スナップショットがファイルの有力なバージョンにどのように原子性によって進められるか、ということと、有力なファイルバージョンがどのように検索されるか、ということを説明する。
(HYDRAstorシステム)
この章では、HydraTFSにおいてブロック記憶の際に用いられるHYDRAstorの一般的な概要を説明する。
システムは、2層で構成されている(図12を参照)。(図12は、HYDRAstorのレイアウトを示す。アクセスノードとストレージノードの2つの層が設けられている。データは、ストレージノードに装備されたディスクに記憶される。)
HYDRAstorにおけるデータは、不変で、可変サイズであり、コンテンツアドレス指定されるブロックに記憶される。そして、3つのタイプのブロックが存在する(図13を参照)。
−レギュラーブロック
−リテンションルート
−デリーションルート
(図13:HYDRAstorにおけるデータ構造。影のついた矩形は、データブロックである。破線の四角はブロックポインタ(それらが参照するブロックのコンテンツアドレス)である。)
HYDRAstorにおける重要な問題は、単一ブロックが直ちに削除されないということである。その代わり、領域再生プロセスと呼ばれるガベージコレクターが定期的に実行される。そのタスクは、以下のブロックを削除するよう作動する。
−同じサーチキーを有し、デリーションルートと呼ばれる、特別なブロックが書き込まれることによって削除用にマークされたリテンションルート
−削除用にマークされておらず、存続しているリテンションルートから到達できないレギュラーブロック
ブロックC,I,H,Nは、いずれのリテンションルートからも到達可能ではないため、削除されなければならない。リテンションルートsk2は、デリーションルートが存在しているため、削除される。
HYDRAstorは専用ライブラリを使用して、アクセスノードからアクセスされる。HYDRAstorは分散型であるが、そのことはクライアントには見えない。インターフェースは以下のとおりである。
HYDRAstorは、実データあるいはユーザによって提供されるポインタのベクトル(あるいは、データとポインタの両方)を書き込む。代わりに、別のレギュラーブロックあるいはリテンションルートに格納されたポインタとして使用される、書き込まれたブロックのコンテンツアドレスを提供する。また、ブロックは、実際に書き込まれる必要はない。同一のブロックがHYDRAstorの中に既に存在する場合には、重複排除される。すなわち、ブロックは全く記憶されず、また、その代用として、既に書き込まれている同一のブロックのコンテンツアドレスが、ユーザに返される。このような処理は保障されないため、システムでは2つの同一ブロックが存在することも起こりうる。しかしながら、このことは、クライアントからはわからず、たいした問題ではない。
ユーザは、読み出すブロックのコンテンツアドレスを提供する。返答として、HYDRAstorは、データとポインタであるブロックコンテンツを返す。
ユーザは、実データおよびコンテンツアドレスとは別に、書き込むブロックのサーチキーを提供する。そのようなキーを有するリテンションルートがHYDRAstorに既に存在する場合には、内容が同じかどうか関係なく、エラーが返される。レギュラーブロックとは対照的に、リテンションルートを書き込むことは原子的である。すなわち、同じサーチキーだが異なる内容のブロックの2つ以上の書き込みが同時に起こる場合、一の書き込みが成功し、他はブロックが既に存在するという情報を得る。
ユーザはサーチキーを提供し、返答としてブロックコンテンツを受け取る。要求されたブロックが存在しないか、削除のためにマークされている(すなわち、デリーションルートによって指示されている)とき、エラー(それぞれ「存在しない」、「削除マークされている」)が返される。
リテンションルートを指すデリーションルートが書き込まれる。ユーザは、単一のリテンションルートを指す1つを超えるデリーションルートを書き込んでもよい。そのような状況で、デリーションルートは、重複排除されうる。削除用にマークされたリテンションルートを読み出すあるいは書き込むことは、ブロックが削除のためにマークされるという情報を返す。
HYDRAstorは、バックアップおよびデータ保存のために設計されているので、その主な特徴は、高い書き込み処理能力である。4つのSN及び4つのANのHYDRAstorにおける圧縮されていないデータの書き込み処理能力は、450MB/s "HYDRA09"に達する。この値は、重複していないデータと、アクセスノードのすべてから実行された書き込み、による。書き込みストリームにおいて重複するブロック割合が増加すると、処理能力は徐々に増加し、重複ブロックが100%のときに900MB/sに達する。
読み出し処理性能は、それよりもわずかに低い。HYDRAstorにとって極めて早く読み出すことは、それほど重要ではない。従って、それは特に最適化されていない。
読み出し待ち時間は、150msである。書き込みオペレーションの待ち時間は、約1500msに達する。書き込み待ち時間は、重複ブロックの割合に依存しない。このような動作は、おそらく利用された処理能力を増加あるいは減少させて、一定のレベルの待ち時間を維持するために動作するHYDRAstorのフロー制御によっておこる。
HYDRAstorの総容積は、インストールされたストレージノードおよびディスクの数に依存する。顧客に利用可能である2つのアクセスノード及び4つのストレージノードで構成された中型システムは、24テラバイトと48テラバイト両方の重複排除されたデータを記憶することが可能である"HydraModels"。
最大の利用可能なシステム(55個のアクセスノードおよび110ストレージノード)は、1.3PBの容量を有する。
[HydraTFSの必要条件]
HydraTFSは、HYDRAstorのために構築されたアプリケーションの具体的な目標に向かうことを予定しており、HYDRAstorの既存のファイルシステムによって扱われていない。従って、設計は、これらアプリケーションの要求に主に適用するよう調整される。HydraTFSの必要条件について説明するために、これらアプリケーションについて議論する。
アプリケーションは、複数のアクセスノードで作動しうる。異なるマシン上で機能するアプリケーションの実体は分離することができ、それらは連携する必要はない。さらに、アクセスノード間の物理的な接続が有効でなくても、アプリケーションは機能すべきである。
既存のアプリケーションは、メタデータ用のデータベースとして、及び、チェックポイントと回復を可能とするために部分的な結果を記憶する方法として、2つの方法でHydraTFSを使用する。
第1のユースケースでは、HydraTFSは、数キロバイトのデータレコードを格納するために使用される。各レコードは、アプリケーションのそれぞれ独立したタスクに対応し、このため、レコードは、それら自身独立している。あるレコードは、メモリの中に保持され、修正された時、永続的になるようHYDRAstorに保存されなければならない。
第2のユースケースでは、長期間作動するバッチ処理が、停止するか、あるいは、クラッシュ後に、回復することができるよう永続的な方法で、チェックポイントに定期的に結果を必要とする。格納された部分的な結果は、任意サイズのデータストリームである。データは、タスクが進むとともに、ストリームの終わりに追加される。タスクが再開されると、ストリーム全体が始めから読み取られ、その後、さらにチェックポイントの追加が生じる。
ストリームに付加されるデータの一部は、HYDRAstorに永続的に格納されなければならない。
上記のアプリケーションは、それらが格納したデータ項目(DBレコードと部分機能ストリームの両方)の全てをリストアップする。例えば、これはアプリケーションのスタートアップ中に必要とされる。さらに、アプリケーションの実体によって別のアクセスノードから保存されたデータ項目をリストアップするために、必要性が発生するかもしれない。また、クラッシュしたアクセスノードの処理が別のアクセスノードによって引き継がれる時に必要とされるかもしれない。さらに、アプリケーションの実体がクラッシュし、特別のアクセスノード上に再び到着しないようになる状況で、引き継がれなかったとしても、アプリケーションによって格納されたデータ項目は削除されなければならない。従って、削除されるために、最初にリストアップされなければならない。
(3.3.1.待ち時間と処理能力)
HydraTFS上でのオペレーションは、比較的例外的に行なわれ、アプリケーションのクリティカルパス上にない。従って、低い待ち時間は、主な条件ではない。しかしながら、アプリケーションが数百ギガバイトのような膨大な量のデータを書き込むかもしれないため、高処理能力が必要とされうる。
セクション3.2.1およびセクション3.2.2で述べたユースケースでは、DBレコードあるいはデータストリームは、通常、単一のプロセスによって用いられる。しかしながら、プロセスが衝突したと考えられる場合、同時にアクセスが生じるかもしれない。同時アクセスの発生は2つの原因による。
第2に、例えば、ネットワーク障害のため、アクセスノード上で作動するプロセスが間違って衝突したと考えられるかもしれない。しかしながら、それは、まだストレージノードと接続され、うまくHYDRAstorで作動するかもしれない。
もし、適切に作動しない場合には、同時アクセスはデータ不整合となるかもしれず、システムの信頼性を低下させる。このことは、HYDRAstorのような商品において容認できない。従って、HydraTFSの設計では、同時の問題に取り組まなければならない。
(HydraTFSの概要)
(4.1.HYDRAstorシステムの配置)
HYDRAstorシステムでは、HydraTFSプロセスは、そのために設計されたアプリケーションのプロセスと共に、アクセスノード上で実行される。それは任意の数のアクセスノードで、同時に実行されうる。
HYDRAstorシステムでの全てのHydraTFSプロセスは、単一のファイルシステム上で作動する。ファイルシステムの全体は、HYDRAstorに永続的に格納され、すべてのアクセスノードからの平等な権利を持ってアクセス可能である。さらに、HydraTFSのアーキテクチャは、一致を扱うことはアクセスノード間で同時を扱うことために接続することは要求していない。言い換えれば、内部プロセス通信全体は、永続的なブロック格納を介して実行される。従って、要求される接続は、各アクセスノードとストレージノードとのネットワークの間だけである。
このセクションは、HydraTFSの構造のボトムアップ記述について説明する。
ユーザ供給データに対して、単一の原子性構造を定義することで始める。バイトストリーム上で動作する古典的なファイルシステムインターフェースとは対照的に、HydraTFSは、分割不可能なデータチャンクに対して作動するよう設計されている。すなわち、既に書き込まれたデータのフラグメントは、全体として読み出されるだけである。そのようなフラグメントをレコードと呼ぶ。これは、単にオブジェクト(バイトの系列によって表わされた)と、コンテンツアドレス(ブロックポインタ)とを含む構造体である。
ファイルスナップショット(あるいは、略して、スナップショット)は、単一のクライアントプロセスによって作成されたレコードの一貫したシーケンスである。実際、HYDRAstorでは、それはレギュラーブロックのDAGを指しており、リテンションルートによって表わされる。ファイルが小さい場合、リテンションルートのみで表される。
単一のスナップショット内におけるレコードの構成は、第5章で詳細に説明する。スナップショットで許可されたI/Oオペレーションは、連続してレコードを読み出しており、終わりで新レコードを追加し、これにより、新しいスナップショットを形成している。
HydraTFSの中のファイルは、スナップショットの集合である。それらの1つである最も最近のスナップショットは、最後にコミットされたスナップショップであり、ファイルの最新バージョンである。すなわち、ファイルがアクセスされる場合、最も最近のスナップショットがユーザによって読まれることが可能となる。他のスナップショットは古いスナップショットとされる。しかしながら、それらのうちのいくつかは、別のスナップショットが最新となる前に読み始められたユーザによってまだアクセスされるかもしれない。他方、ユーザがファイルにアクセスし始めるときは、最新のスナップショットだけが利用可能となる。
コミットの原子性は、原則的に、HYDRAstorにおけるリテンションルート書き込みの事実からなる。従って、矛盾しない状態となり、最新のスナップショットを構成する、あるいは、失敗した場合には何も書き込まれない、といういずれかのブロックの書き込みが成功する。
HydraTFSは、ファイルとディレクトリで作られていた構造で構成されている。このファイルシステムレイアウトは、HydraTFSの使用法をユーザにより便利にしている。各ディレクトリは、それぞれ無制限の量の他のディレクトリを格納することができる。ファイルシステムツリーの深さも制限されていない。言いかえれば、ファイルシステム構造は自由に拡大してもよい。
ディレクトリは、レギュラーファイルに内部で類似しているが、特別のコンテンツである。レギュラーファイルへの類似性や、そのコンテンツの修正は、トランザクションである。従って、ディレクトリ構造(つまり、ファイルシステムツリー全体)は、常に一貫性のある状態である。
ファイルシステム構造は、ファイルを拡張可能な方法で、効率的に構造化することを可能とする。例えば、しばしばアクセスされるディレクトリは、いくつかのより小さなディレクトリと取り替えることができる。結果として、ディレクトリコンテンツの新バージョンをコミットすることに伴って、ファイルシステムオペレーション中に現れる同時の問題は減少する。異なるレギュラーファイルあるいはディレクトリは、同時の観点からは別である。
要約すると、グローバルなネームスペースとトランザクションオペレーションといった、2つの主な必要条件にどのように設計が対応しているかということに焦点を当てる。
「グローバルなネームスペース」という用語は、すべてのアクセスノードが平等な権利を持ってファイルシステム上で作動し、ファイルシステムの同じ「バージョン」にアクセスする、ことを意味する。アクセスノードのうちの1つから作られたファイルシステムにおけるオペレーションの結果は、コミットした後の他のすべてのマシンからわかる。しかしながら、オペレーションは、いかなるグローバルリーダーによっても調整されない。各アクセスノードはそれぞれ独立して作動し、他のアクセスノードを備えたネットワーク接続を要求しない。
グローバルなネームスペースのそのような特徴は、HYDRAstorからHydraFSで機能する別のファイルシステムによって、現在は提供されていない。ファイルシステムは、一度に単一のアクセスノードからのみアクセス可能である。
HydraTFSでは、レギュラーファイル又はディレクトリのコンテンツを修正するオペレーションが、トランザクション処理である。データベースのように、信頼できるトランザクションは、原子性、一貫性、独立性、耐久性といった4つの特性を保証しなければならない。これらの特性がHydraTFSでどのように達成されるかについて着目する。
(スナップショット)
既にセクション4.2.2で説明したファイルのスナップショットは、クライアントによって独立して作成されたレコードの集合である。コミットされた時、この集合はファイルの有力なバージョンになる。コミットオペレーションは、次の章で詳細に議論する。本章では、レコードを読むことと、スナップショットに書き込むことに着目する。
コミットオペレーションの前から、スナップショットはそこで作動するクライアントのみに見え、追加オペレーションはどのような同時処理も引き合わせない。
最初に、スナップショットが空であり、クライアントがある最初の書き込みの実行を試みている、と仮定する。クライアントは、あるレコードを書くことをHydraTFSに要求する。これらはメモリ内にバッファされる(図14(a))。メモリバッファのサイズがある限度を越えると、バッファされたコンテンツを含む新しいレギュラーブロックはHYDRAstorに書き込まれる。このような書き込みによって返されたコンテンツアドレスが記憶される。このようなアドレスを、「レベル-0アドレス」と呼ぶ。
記憶されたレベル-0アドレスの数が、単一ブロック内においてコンテンツアドレスの最大値以上となると、これらのコンテンツアドレスを含む中間ブロックが、HYDRAstorに書き込まれる。再び、このブロックのコンテンツアドレスが、「レベル-1アドレス」として記憶される(図14(c))。結果として、HYDRAstorに格納された「レベル-0アドレス」はメモリから除去することができる。このようにして、クライアントのレコードを含むリーフノードと、下位のレベルノードへのポインタを含む中間ノードを有する、3階層ツリーを得る。さらに高いレベルツリーは、簡素化のためサポートされない。
前のセクションで説明したアルゴリズム、つまり、ユーザによって追加されたレコードがHYDRAstorに物理的に格納されることが保証されない、ことに注意すべきである。これに対して、ユーザのレコードのうちのいくつかは、まだバッファされるかもしれず、いくつかのコンテンツアドレス(レベル-0あるいはレベル-1)は、メモリの中にまだ保持されるかもしれない。さらに、その構造は、どんなリテンションルートによっても参照されていない。この状況では、最も近いガーベジコレクション中に、スナップショットのコンテンツ全体の削除となるであろう。
−ツリーの現在の高さが「1」であり(少なくとも1つの「レベル-0」アドレスが記憶されている)、あるユーザデータがメモリバッファに存在する場合、バッファを含むブロックはHYDRAstorに書か込まれ、そのコンテンツアドレスは後の「レベル-0」アドレスとして記憶される。その後、記憶された「レベル-0」アドレスはすべて、リテンションルートの一部としてHYDRAstorに書き込まれる。
−ツリーの現在の高さが「2」である場合(少なくとも1つの「レベル-1」アドレスが記憶されている)、オペレーションは再帰的に作動する。最初に、バッファはレベル-0ブロック内に書き込まれ、その後、中間レベル-1ブロックが書き込まれる。最後に、記憶されたレベル-1はアドレス指定され、メタデータがリテンションルートとして保存される。各レベルで、多くて1つの永続的なブロックがあることに着目すべきである。
最後に、ブロックへのレベル-1アドレスがHYDRAstorから到着すると、スナップショットのサーチキーを備えたリテンションルートが、「write 3」で書き込まれる。
図15は、高さ2のスナップショットツリーのコミットを示す。破線ブロックはメモリ内にあり、書き込まれなければならない。残りのブロックは、既にHYDRAstorに書き込まれている。
上述したように、レコードは、実データ(バイト)とコンテンツアドレス(ポインタ)の両方から成る。スナップショットに全てを追加中に、1バイトあるいは1つのコンテンツアドレスをはじめとして、たくさんのデータ/アドレスが保存される。追加後に、クライアントはコミットすることが可能となる。そのようなコミットの後に、次の新しいHYDRAstorブロックにレコードを追加すると、最終的には、1つのブロックに1つのレコードように、少量のレコードを含んだ過剰な数のブロックで作られたスナップショットで終わる。そのようなスナップショットは、必要であるというよりはるかに多くのスペースの占領することの他に、読み取りの時間消費と資源消費に至るであろう。
読み取りプロセスは、適切なリテンションルート、すなわち、スナップショットのツリー構造のルートを読み取ることで始まる。その後、最初のリーフブロックは順番に見つかり、レコードの読み取りが始まる。スナップショット読み取りオペレーションは、単に、順次ツリーリーフを読むことに他ならない。
読み取りの間、最後のプロセスのリーフブロックと、ルートまでのスナップショットツリーの親の全ては、メモリ中でキャッシュされるべきである。これは多くの量のメモリを必要しない(3つのブロックまで)。そうでなければ、ツリーに位置だけを維持すれば、それがHYDRAstorからの3つまでの連続する読み取りから構成される、その後の読み取りはそれぞれかなりの時間続くであろう。
示された設計は、著しいデータのオーバーヘッド無しに、大きなスナップショットを作成し、有効な方法で、順次、スナップショットを読み取り、書き込むことができる。
追加オペレーションは、高いHYDRAstor活用に導くことができる方法で実行される。たとえ、クライアントが非常に小さいレコードの追加を発行続けたとしても、準備ができている場合、後のブロックに対する候補がバッファされ、HYDRAstorに書き込まれる。従って、HYDRAstorへの書き込みは、大きなサイズのチャンクで行なわれる。それとは別に、HYDRAstorへの書き込みは、どんな方法でもさらなる追加プロセスを中断せず、その後の準備ブロックのさらなる書き込みを可能とする。上記内容は、さらに中間のレベル-1ブロックを書くことに当てはまる。もしメモリバッファが十分に大きければ、追加プロセスはHYDRAstorによって提供される処理能力を完全に利用することができる。
レコードの読み出し性能は、書き込み性能よりも著しく低いかもしれない。主な理由は、レコードがツリーにおけるリーフブロックを占め、前のリーフブロックを読むことが必要かどうか、をチェックするためである。従って、HYDRAstorにおけるブロック読み取りの高い待ち時間のため、設計では、ブロックが1つずつ読み出される仮定し、処理能力が減少する。読み出し処理能力は、先読みによって改善され、あるいは、中間ツリーノードに追加のメタデータを格納することにより改善される。
(スナップショットのシーケンスとしてのファイル)
第5章で説明したように、スナップショットを構築することは、各クライアントプロセスによって分離されたやり方で実行される。リテンションルートである最上層のブロックの書き込みは、最後にグローバルネームスペースに触れ、他のクライアントと衝突するかもしれない。従って、前の章に定義された方法を使用して行なわれたリテンションルートのコンテンツを準備することと、ここで議論されるHYDRAstorへの実際の書き込みとの間の境界線を導入する。リテンションルートの書き込みが新しいスナップショットを他のクライアントに見えるようにするときのオペレーションを、「WriteSnapshot」と呼ぶ。ファイルが複数回(1、あるいは、多くのクライアントプロセスのいずれかによる)コミットされると、多数のスナップショットがHYDRAstorに生成される。
セクション6.1では、その問題への基本的なアプローチを説明する。その後のセクションでは、このソリューションを徐々に改良していく。
基本的なアプローチでは、ファイルをスナップショットの順序で表わす。最初に、ファイルは、「0」しかスナップショットがなく、その後、最初のコミットスナップショット「1」が作成される。続くコミットでは、スナップショット「2」,[3]等というように作成される。単に、最も最近のスナップショットは、最も高い数を有するものである。以後、「i番目」のスナップショットを「Si」と呼ぶ。
「GetMostRecentSnapshot」は、単にスナップショット上で繰り返し(HYDRAstorで読まれたリテンションルートを実行する)、存在する最新のスナップショットのコンテンツを返す。存在するスナップショットをチェックするためには、リテンションルートを読むべきである。
一致書き込みがある状態で、返された最も最近のスナップショットは、実際の最も最近のスナップショットより実は古いかもしれない。しかしながら、クライアントが、古いスナップショットに基づいてコミットする(「WriteSnapshot」を行う)場合、古いスナップショットに基づいて、それが既に述べられたように、オペレーションは失敗するため、これは問題ではない。このように、クライアントは、どんな矛盾も解決し、かつオペレーションをやり直す機会を得る。
ここでは、「GetMostRecentSnapshot」オペレーションのタスクに着目し、それを改善することを試みる。HYDRAstorの中で保存されているスナップショットS1、S2の,・・・,Snのシーケンスを与えられるが、このようなシーケンスの最後を効率的に見つける必要がある。
図16cで、サンプルアルゴリズム実行を示す。結果は「27」である。リーフスナップショットに到達し、それが存在しない場合には(図16d)、最も最近遭遇したスナップショットが結果となる。言いかえれば、結果となるスナップショットが存在するかもしれない連続の範囲は、以下のとおりである。
- (24,32) スナップショット24は存在する。
- (24,28) スナップショット28は存在しない。
- (24,26) スナップショット26は存在しない。
- (24,25) スナップショット25は存在しない。従って、結果は24。
上記のデュアルバイナリサーチアルゴリズムは、より大きな母数で検索することによって改善されうる。例えば、64の母数では、64個のリテンションルートを並行して読むことになる。最も最近のスナップショット番号が264未満であるとすると、一度の並列読み出しにより、最後のスナップショットの番号のための上界を見つけることができる。アルゴリズムの第2のステップは、一度にサーチツリーの6レベルを進むので、オリジナルのバイナリサーチよりも6倍速く行うことができる(64=26)。この単純な最適化は、「GetMostRecentSnapshot」の待ち時間を相当短縮する。
全てのシーケンス、つまり、ファイルの一生で作成された全てのスナップショットを格納することは、特にファイルサイズ(及び、スナップショットのサイズ)が何百ものギガバイトに達するかもしれないので、記憶装置を浪費する。さらに、各スナップショット中のクライアントレコードは、クライアントによってもはや必要でなく、HYDRAstorによって回収できるブロックへのポインタを含むことができる。スナップショットによって占められる実際の量は、さらに大きいかもしれない。従って、単一ファイル用に保存されたデータの量を減らす方法が要求されている。
上述した考察の時に、ファイルは変わらないと仮定し、すなわち、新しいスナップショットは書かれないとした。
「GetMostRecentSnapshot」オペレーション中に、デュアルバイナリサーチアルゴリズムは、スナップショットの小さな部分集合だけにアクセスする(ここでは、存在のためのチェック)。残されたものは、同様に削除される。それらの存在か欠如かは、「GetMostRecentSnapshot」の視点から見て違いはない。
形式的に無用のスナップショットを削除する方法を定義するために、スナップショットシーケンスを構築するスナップショットをグループ化する。初めに、次の記法を導入する。
- N - 2N =< M < 2N+1を満たす定数。
スナップショットを、以下のカテゴリーに分類する。
"the most recent スナップショット" スナップショットSM
"nonexisting スナップショット" 次の全てのスナップショット Si(i > M)
"landmark スナップショット" 次の全てのスナップショットS2i(0 =<i =< N)
"guiding スナップショット" このグループは、再帰的に定義される。
直観的に、上記の用語によると、デュアルバイナリサーチの考えは、landmark スナップショット上に繰り返すことによって、最初に上記Nを識別し、次に、guiding スナップショット上に繰り返すことにより、上記Mを見つける。
このようにすることで、サーチアルゴリズムで使用されないuninteresting スナップショットを安全に削除することができる。さらに、スナップショットがuninteresting スナップショットとなると、それはシーケンス成長にかかわらずuninteresting スナップショットのままであることが分かる。O(log(n))だけuninteresting スナップショットがあるので、uninteresting スナップショットを削除することで、多くの領域を節約する。
SMをサーチする間にシステムに存在するスナップショット(すなわち、guidingスナップショットと、landmarkスナップショット)を、SMのパススナップショットと呼ぶ。「AはBのパススナップショットである」という関係を、図18に示す。この関係は、過渡的であるため、各スナップショットの最も高いパススナップショットだけがマークされる。(図18は、パススナップショットを示す。スナップショットから最も高い値のパススナップショットへの矢印を破線で示す。)
ファイルが変更されないと仮定して、新しいスナップショットが書かれたときに何が起きているかを分析する。
Skで終了するスナップショットのシーケンスがあると仮定する。新しいSk+1を書いた後に、それがuninterestingスナップショットになっても、単に削除のために直ちにSkをマークすることはできない。新しいスナップショットを書くにもかかわらず、1つあるいは多くの古いものが、それらが最も最近のスナップショットだったときに、過去に読み取りを始めた人によってまだ読まれているかもしれない。もし、削除用にそれらをマークし、ガーベジコレクションがHYDRAstorで続行されると、nonexistingスナップショットを読むこととなり、リードエラーで終わる。従って、すべてのユーザに影響なしに読み終えることを望む。
スナップショットの積極的な削除は、偽陽性のコミットを引き起こすかもしれない。クライアントによって読まれたスナップショットと次のものの両方がuninterestingとなり(別のクライアントのオペレーションの結果)、削除のためにマークされることと仮定してみる。その後、HYDRAstorの中のガーベジコレクションが実行され、後で、クライアントがコミットする。新しくコミットした場所にはこれ以上スナップショットがないが、コミットは成功するであろう。
ファイルを使用し、reclamation tailのトラックも維持しているクライアントが衝突する状況に着目する。これがHYDRAstorにおける記憶の激しい漏れを引き起こすので、reclamation tailのスナップショットは忘れてはならない。他方で、チェックするスナップショットの数が潜在的に膨大であるため、スナップショット1から最も最近のスナップショットで終わる全てのスナップショットの存在をチェックできない。したがって、衝突の後にreclamation tailに関する情報を再構築するソリューションを示す。
tail長さは、最低の値kとして与えられているとき、スナップショットSM−1, SM−2, ..... , SM−kがそれらのパススナップショットと共に、現在のreclamation tailの上位集合を構成する。
上述したように、与えられたファイルを使用する各クライアントは、まだ未開拓のuninterestingスナップショットについての情報を維持し、可能ならいつでも、それらを削除のためマークする。スナップショットがuninterestingスナップショットと認められる場合は、常に、現在時刻に2Trを加算した終了時刻で収集に加えられる。期間が経過したスナップショットは、まず削除用にマークされ(すなわち、そのスナップショットルートに対応するデリーションルートがHYDRAstorの中で書かれる)、成功した後に、収集から取り除かれる。
「WriteSnapshot」オペレーション中に、reclamation tail長さは計算される。この計算は、収集に保持されたスナップショット、および、追加された最も最近のスナップショットに基づき、「WriteSnapshot」が成功すると、それがuninterestingスナップショットになる。その後、reclamation tail長さは、新しいスナップショットのスナップショットルートの始めであるリテンションルート内に書かれる。コミットが成功すると、既に前の最も最近のスナップショットが収集に加えられる。スナップショットに加えて、コミットされたスナップショットのパススナップショットではない、パススナップショットのパスが、uninterestingスナップショットの収集に加えられる。
最も最近のスナップショットのパススナップショットであるlandmarkスナップショットとguidingスナップショットは、かなりの時間(landmarkスナップショットの場合、ファイル自体の一生に等しい)、システム内に存続する。それらの存在中に、それらは、まだファイルのいくつかのより古いバージョンを含んでおり、それは相当なサイズになる。しかしながら、議論されたスナップショットについては、最も最近のスナップショットであることをやめた瞬間からのTr時間後に、その役割は、最も最近のスナップショットへのパスを決定するために縮小される。これは、マーカーブロックを導入する動機づけである。
(ファイルシステム内でのファイルの配置)
HydraTFS中におけるファイルは、ファイルシステムのようなディレクトリ構造へ整理される。これにより、クライアントによる使用がより便利となる。さらに、これにより、ファイルを効率的に、かつ、拡張可能に整理できる。例えば、クライアントがシステムに個人的なファイルを格納したい場合はいつでも、個別のディレクトリ(他のいかなるクライアントによってもアクセスされない)を作成し、その結果、ファイルを追加したり削除する間における同時問題を最小化することできる。他の誰も(セクション7.3.2で説明したガベージコレクションを除いて)、ディレクトリに触れず、矛盾する変更を加えることはできない。
ディレクトリは、特別なコンテンツを除いて、ユーザから見えないようファイルとして導入される。従って、この章で「ファイル」について説明するときは常に、通常のファイルあるいはディレクトリのいずれかに言及している。ディレクトリは、それぞれ、ファイルシステムツリーの子たちである、ファイルとサブディレクトリに対応するエントリのリストを含んでいる。エントリは、それぞれレコードに相当し、次のものを含んでいる。
−ファイルタイプ:エントリが通常のファイルあるいはディレクトリに一致するかどうかを示す。
−ファイルID。
ファイルIDは、従来のファイルシステムにおけるinodeナンバーとして考えられる識別子である。それは、作成される場所や時間に関係なく、常に固有となるよう生成される。この識別子(スナップショットの連続番号と共に接尾に付けられる)は、スナップショットツリー構造のルートのために設定される各リテンションルートに対するサーチキーとして使用される。
次のオペレーションは、ファイルシステム上で可能である。
”既存のファイルを開く” OpenFileオペレーションは、ファイルパスを与え、既存ファイルへのとっかかりとなるFileHandleを返す。そのようなハンドルは、すべてのさらなるオペレーションを行うために要求される。ファイルパスは、従来のファイルシステムにおけるパスと非常に似ている(例えば「/aDirectory/aSubdirectory/aFile」)。
”通常ファイルのアクセスコンテンツ” 通常ファイルのFileHandleを与えられたReadFileオペレーションは、ファイルの最も最近のスナップショットを検索するためにGetMostRecentSnapshotを実行し、ファイルコンテンツにReadオペレーションとAppendオペレーションを可能とするインターフェースを提供する。これらは、第5章で説明したものと同じオペレーションである。上記インターフェースは、CommitFileオペレーションも提供し、それは、ファイルコンテンツに対するCommitオペレーションを実行し、その後、新しい通常ファイルのスナップショットを作成するためにdoesWriteSnapshotを実行する。
”ファイルの削除” RemoveFileオペレーションは、削除するファイルとディレクトリを永続的にマークする。ファイル削除の方法はここでは省略する。より複雑であるので、後に別々に説明する。
ファイルシステムつまり全てのファイルは、異なるアクセスノードから並列にアクセスされる。特に、ディレクトリコンテンツを修正するオペレーション(CreateFileとRemoveFile)が同時に行われるかもしれない。
ディレクトリオペレーションの再開は、様々なクライアントによって頻繁に修正されるディレクトリにとって、比較的大きいオペレーション待ち時間を引き起こす。従って、クライアントが頻繁に同時に修正するようなディレクトリを保持しないようにする。ファイルシステムの構造は、多くのディレクトリを生成させる。従って、単一のクライアントによってのみ修正されるディレクトリを持つよう、できるだけ同時にアクセスされた構造を広げるほうがよい。
HydraTFSにおけるファイルの削除は、2つの個別の段階に分離されている。第1段階では、削除するファイルをマークする。このオペレーションの後、ファイルはもはや見えずアクセスできない。ディレクトリエントリとしてクライアントに見えず、開くことができない。内部では、削除のためにマークされたファイルは、まだディレクトリエントリとして存在する。しかし、それは、既存ファイルのリストの代わりに削除のためにマークされた子のリストに置かれる。
アルゴリズムが第2の段階に進む前、つまり、削除のためにスナップショットをマークとき、誰も削除ファイルを使用することができないようにする。ここで、関連するメカニズムについて簡単に説明する。
第1のステージは、実際にユーザによって実行されたRemoveFileオペレーションである。次に、第2のステージは、ガーベジコレクションルーチンで行われる。
ファイルが削除のためにマークされるとき、それはそれがもはや読み出されないか書き込まれないことを確実にする必要がある。簡単に言うと、メカニズムは、クライアントによって保持されたFileHandlesが、当該handleがまだ存在する(すなわち、削除のためにマークされていない)ファイルを保障するために、定期的にリフレッシュさせなければならない(Thとして期間を定義する)。ファイルが削除用にマークされると、クライアントはもはやそれを操作することができない。ファイルが操作されないことを保証するために、FileHandleリフレッシュ期間より長い期間の待機が実行される。待機持続は、2Thとして確立される。
はじめに、与えられたファイルのスナップショットおよびマーカブロックのすべてを削除するためにマークするアルゴリズムに着目する。その後、ファイルシステムの範囲で、削除プロセスの説明へと進む。
単一のファイルの削除は、一般的な削除ルーチンのように、多くのプロセスによって同時に行われる。さらに、HydraTFSのすべてのオペレーションと同様に、それはいつでも中断されるかもしれない。そのような状況でであっても、HYDRAstorブロックの漏れは容認されない。他方、存在しないリテンションルートにデリーションルートを書き、リテンションルートに複数のデリーションルートを書くことは許容される。
ファイル削除の方法は、3つのステップで作動する。初めは、reclamation tail全体が削除用にマークされる。reclamation tailの長さは、通常、最も最近のスナップショットのスナップショットルートに格納されたreclamation tail長さの値から取り出す。
最後に、第3のステップでは、第1のステップでreclamation tailスナップショットとマーカブロックに削除用マークすることとは対照的に、全てのデリーションルートの書き込み要求が並列に発行され、削除用のマーカブロックの特別なオーダーが必要となる。一つずつ、すべての最も最近のスナップショットのパススナップショットがマークされ、最も最近書かれたスナップショット(最も高い番号)から始まり、1番目のスナップショットで終わる。
ファイルを削除するプロセスは、実行の次のステップのうちの1つの間に、クラッシュするかもしれない。
−reclamation tailを削除するためにマークしている間。
−最も最近のスナップショットを削除するためにマークしている間。
−マーカーブロックを削除のためにマークしている間。
最も最近のスナップショットを指すデリーションルートの書き込みが成功する前にクラッシュが生じると、ステップ1と同じ原理が当てはまる。従って、不運にも再始動後に、ステップ1全体が必要以上に繰り返えされる。次に、クラッシュがデリーションルートを書いた後に生じると、再始動の後のプロセスは直ちにステップ3に移行する。
GetMostRecentSnapshot手段は、(セクション2.4.4で説明したように)削除のためにマークされたリテンションルートの存在を考慮しなければならない、ことに着目する。リテンションルートが削除用にマークされたことを表すエラー状態が読み出しの間にHYDRAstorによって返されると、アルゴリズムは存在しないブロックと同じ方法でそれを処理する。
削除用の単一ファイルのスナップショットとマーカブロックをマークすることは、複数のプロセスによって並列に実行される。そのような状況で、クラッシュに類似することが起こる。GetMostRecentSnapshotを実行することによって、削除をマークするブロックのセットし、それがまだ存在する場合には、最も最近のスナップショットからreclamation tail長さを読んだあとに、プロセスは、単に指定された順にデリーションルートを書き込む。唯一の欠点は、デリーションルートが、存在していないリテンションルートあるいは既にデリーションルートに対応するリテンションルートの両方に、同時プロセスによって書かれることである。しかしながら、HYDRAstorでは、それは耐えられる振る舞いである。
ファイルシステムの範囲におけるファイルの削除は、与えられたディレクトリのために、削除のためにマークされたすべての子を削除する、基本的なオペレーションである。後に、削除されたファイルは、ディレクトリエントリリストから除かれる。RemoveFileオペレーションが成功するとき、このオペレーションが引き起こされるか、あるいは、定期的なファイルシステム走査で実行される。しかしながら、両方の方法の組み合わせが望ましい。オペレーションが引き起こされると、削除のためにマークされたファイルは、すぐに削除される。次に、ファイルシステム全体の定期的な走査は、削除されないファイルを永続的に保証する。プロセスが削除用のファイルをマークした時に可能であるが、実際にそれらを削除する前に衝突する。
1.ディレクトリエントリが読まれる。
2.削除する子のセットCは、削除のためにマークされたディレクトリの子のリストに初期化される。
3.削除プロセスは、時間2Thの間、C内のファイルがユーザによってアクセスされないことを保証するのを待つ。
4.Cの各ファイルに対して、セクション7.3.1で説明したスナップショットの削除が実行される(おそらく並列に)。
5.ディレクトリが削除のためにマークされない、あるいは、一時的に削除されない(処理が終了して)ことが保証される。これは、ディレクトリを再び開くことにより行なわれる。
6.ディレクトリはもう一度読まれる。Cに含まれ、削除のためにマークされた子どものリスト中のエントリは撤去され、ディレクトリエントリの新しいスナップショットはトランザクション処理としてコミットされる。kのステップは、コミットが成功するまで繰り返される。
ステップ4で削除された子供が通常ファイルでななくディレクトリである場合、そのスナップショットが削除のためにマークされる前に、含まれたファイルを削除しなければならない。従って、ディレクトリのスナップショットが削除のためにマークされる前に、次のステップが行なわれる。
2.各子供cに対して、存在して削除用にマークされることに関係なく、cの削除が行なわれる(さらに、cがディレクトリである場合、このオペレーションは再帰的に実行される)。
(予備的評価)
本章は、HydraTFSで行なわれた実験の結果を示す。その実行は、実験中に完全には終わっていない。重要なことは、全てのファイルシステムの性能に、大きな影響を有する最適化が不足したことである。しかしながら、実験では、様々なセッティングでHydraTFSの振る舞いをよく反映している。
(8.1.1.現在の特徴)
実験が行われたとき、コア機能のほとんどが実行されていた。ただ、まだ開発中であった削除用のスナップショットをマークすることを除外している。従って、reclamation tail削除もファイル削除オペレーションも評価することができない。削除が機能しないにもかかわらず、セクション6.3.3で説明したマーカーブロックは既に存在していた。
評価する実験は、いくつかの主な最適化を行っていないが、HYDRAstorリクエストは集められたバンドルに送られていない。代わりに、それらは次々に処理され、性能、特にデータ伝送性能が著しく減少した。GetMostRecentSnapshotオペレーションについては、セクション6.1で説明した線形アルゴリズムが実行された。
上記実施は、C++環境で開発された。テストで使用されたバイナリサーチ機能は、GCCコンパイラー(最も高い最適化レベル(-O3)を備えたバージョン4.1.2)でコンパイルされた。その実施は、バージョン1.33.1のBoost libraryが利用された。
HydraTFSは、通信手段としてメッセージパスインターフェースを使用するマルチスレッドアプリケーションで、シングルスレッドモジュールとして実施された。HYDRAstorとの通信は、同じアプリケーションの別のモジュールで実行されるプロキシーによって実行される。両モジュールとも、すなわちプロキシーモジュールとHydraTFSは、並列に作動し、メッセージの受け渡しによって通信する。プロキシーとHYDRAstorの間の通信は、別の専用スレッドによってホストされたネットワークソケットを介している。
実験装置は、1つのアクセスノードおよび2つのストレージノードからなる単一のHYDRAstorで構成される。各ノードは、それぞれ2つのクワッドコアと、64ビット、3.0GHzのインテルXeonプロセッサを有する。アクセスノードは、8GBのメモリを装備し、ストレージノードは24GBのメモリを装備する。アクセスノードは、ハードウェアRAIDを用いる2つの15K RPM SASハードディスクを装備している。これらのディスクは、テスト中に記録するために使用された。コンピュータはすべて、2.6.18-128 Linuxを実行していた。
実験は、ロードされたユーザデータがないクリーンなHYDRAstorシステム上で行なわれた。テスト中にHYDRAstorを使用する他のプロセスはない。
HYDRAstorに保存された各レコードは、ランダムデータで満たされた。これは、HYDRAstorに既に存在する同一のデータを備えたレギュラーブロックの数を最小化させるためである。そのような場合では、書き込みオペレーションは重複排除のため著しく早く終了するかもしれず、その結果を変えることはできる。
この実験では、レコードを追加する性能を計測する。128MBのデータを含む単一のレギュラーファイルは、各テストケースに応じて作成された。最後に、単一のコミットにより、一連の書き込みが行われる。
図22に示すケースは、ファイルシステムに書かれたレコードのサイズが異なる。しかしながら、レギュラーブロック全体が満たされるまでリクエストがHYDRAstorに送信されないので、性能に違いはほとんどない。言いかえれば、性能に影響を及ぼす主な要因であるHYDRAstorリクエストの量およびサイズは、すべての場合に同じである。(図22は、ファイルにレコードを追加したときの性能を示す。)
約6MB/sという性能の結果は、100MB/sを超えるHYDRAstorシステムでの単一のアクセスノードの性能と比較して非常に低く、このことには何も価値がない。見つからないリクエスト集合の導入後に改善するべきである(セクション8.1.1を参照)。
この実験は、各追加後に変更内容がコミットされる(CommitFileが実行される)が、上記のものに類似する。8MBのデータを含む単一のレギュラーファイルは、テストケース毎に作成された。
図23を見ると、性能は、追加されたレコードのサイズ、従って、コミットオペレーションの数、に関係することがわかる。より大きなレコード、より小さなコミットが作られる。変更されたファイルに関連するHYDRAstorの書き込みレギュラーブロックリクエストの全ての保留を待つことを意味するため、コミットは、コストのかかるオペレーションである。(図23は、コミットと伴うレコード追加の性能を示す。)
HydraTFSで、レギュラーファイルを開いた後に、ファイル上で読み取りを実行することができる。ユーザは、それらのすべてが読み取られると、直ちに読み取るレコードの数を指定し、単一の返答でそれらのコンテンツを受け取る。続くリクエストは、連続するレコードを返す。すなわち、ファイルは連続して読まれる。スナップショットの構造は、一度に1つのレギュラーブロックに関して繰り返される。先読みも他の最適化も使用されない。
この実験では、単一のリクエストで読まれる様々な数のレコードで読み取り性能が測定される。4096のレコードから成る128MBのファイルや、32kBの各々および単一のスナップショットが読まれる。
この実験では、GetMostRecentSnapshotの時間が測定された。テストケースでは、スナップショットシーケンスの長さが変化するファイルが作成された。その後、そのようなファイルの最も最近のスナップショットを探すアルゴリズムが実行され、その所要時間が計測された。セクション6.2に、デュアルバイナリサーチアルゴリズムに対する分析的な評価を行っている。その結果を図25に示す。図25は、最も最近のスナップショットを検索するための時間を示す。
この実験では、多くのサブディレクトリが一つのディレクトリで作成されている。サブディレクトリ生成リクエストは、次々に出される。テストケースは、作成されたサブディレクトリの数によって異なる(図26参照)。(図26は、シングルスレッドによって実行されたcreate directoryオペレーションの時間を示す。)
サブディレクトリの数が多い場合については、単一オペレーションの平均時間が比較的より高いと言える。サブディレクトリの数が少ない場合については、速度は、毎秒約10オペレーションであるが、2048のサブディレクトリが作成される場合には、2〜3まで落ちる。それは、親ディレクトリエントリがリテンションルートによって指示されるレギュラーブロックに格納されているため、ディレクトリエントリのサイズが単一リテンションルートに適応することをやめると、サブディレクトリを作成することで、より多くのブロックを読み書きが生じる、という事実によって説明できる。そのような状況においては、HYDRAstorオペレーションの数は増加する(図27参照)。(図27は、フラット構造であることと比較して、ツリーの増加に伴うオペレーションの数が増加を示す。)
この実験では、複数プロセスは関係していない。各プロセスは、1つのディレクトリに128のサブディレクトリを作成し、すべてのプロセスに共通する。書込みプロセスの数は、テストケース間で変わる(図28、”同じファイル”を参照)。(図28は、"create directory"オペレーションの時間の比較を示す。)
この実験では、同じディレクトリへの並列書き込みアクセスのコストを示す。アクセスするプロセスの数を増加させることは、性能が著しく減少することとなる。これは、同時アクセスによりいくつかのオペレーションを再開しなければならないという事実によって引き起こされる。従って、HYDRAstorにおけるブロックオペレーションの数が増加する(図29(b)参照)。
比較のために、単一のプロセスによって同数のディレクトリ上で連続して作動する時間の試算を、図28に示す。期待されるように、コンフリクトがないため、シングルスレッドによって単一のディレクトリ上で実行される多くのオペレーションは、マルチスレッドによって並列に実行された同じ数のオペレーションよりも短い。従って、再開されるオペレーションはない。
この実験では、深さが変わるディレクトリ構造が作られている。各ディレクトリは、1つのスナップショットからなり、そのエントリーリストは、ゼロエントリ(リーフディレクトリ)か、あるいは、1つのエントリ(残りのディレクトリ)のいずれかからなる。
パス(すなわち、OpenFileオペレーションによる"/level1Dir/level2Dir/.../levelNDir")が与えられたリーフディレクトリの検索時間を、図30に示す。ファイルが構造的により深く位置している場合、オープン時間が多くかかることがわかる。これは、そのような構造では、ターゲットディレクトリへのパス上のディレクトリすべてが、連続して、すなわち、初めは「/」、次に「level1Dir」、「level2Dir」などと、開かなければならないからである。
(関連する研究)
(9.1.HydraFS)
HydraTFSに類似するHydra File System "HFS"は、HYDRAstor上で作動する。これらファイルシステム間の主な違いは、設計の目標である。その主用途がバックアップ機器の一部であるため、HydraFSは、高い読み取り/書き込みストリーミング性能を目指すファイルシステムである。さらに、それは、典型的なUnixファイルシステム・インターフェースを提供し、従って、標準、汎用のファイルシステムとして自由に使用されうる。一方で、アプリケーションモジュールとしてHydraTFSは機能する。
いくつかの既存のファイルシステムは、高い有効性を達成するために作成されている。Ivy "Ivy"は、分散化されたピア・ツー・ピア・ファイルシステムである。ファイルシステムにデータを書く各ユーザ(分散されたハッシュテーブルのまわりで置かれた)は、変更のログを保持する。参加者は全て、他のもののログを走査し、プライベートスナップショットに変更を適用する。ネットワーク分割の場合には、ファイルシステムに複数のバージョンが現われるかもしれない。そのような状況では、外部矛盾解決手段が使用されるかもしれない。
トランザクションNTFS(略してTxF)"TxF"は、NTFSファイルシステムでのトランザクションオペレーションを導入するWindowsシステムでのコンポーネントである。Windowsカーネルモードで作動する汎用のトランザクションエンジンであるKernel Transaction Manager "KTM"となズ蹴られたコンポーネントを使用する。
HFSとは別に、CASブロックストアのために設計された他のファイルシステムが存在する。企業市場を目的としたCASであるCentera "Centera"は、ファイルシステムインターフェースを提供する。しかしながら、ファイルシステムのメタデータは、ローカルに保存され、その定期的なバックアップはCASに作られる。Venti "Venti"では、ブロックは削除されない。従って、ファイルシステムのスナップショットは記憶装置を消耗しないように低周期で作られる。
列挙されたファイルシステムはどれも、HydraTFSの代わりに使用することができない。これは、コンテンツアドレスの格納が必要であり、要求されたファイルシステムがHYDRAstor上で作動しなければならないためである。HYDRAstorに既存のファイルシステムのいずれかを組み込むことができるのかどうかは疑わしい。しかしながら、それが可能であっても、必要条件を満たすようなプロセスは、新しいファイルシステムを設計して導入するよりは、おそらくはるかに多くの作業を必要とするであろう。
(結論)
本論文で説明したHydraTFSは、クライアントノード間のいかなる追加のネットワーク接続を必要としないCASシステムで機能する、分散型で拡張可能なトランザクションファイルシステムとして、設計される。実験結果は、HydraTFSが設計目標を達成し適度な性能で機能することを示しているが、それでもなお、多くの面でさらに最適化することができる。
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるストレージ装置(図31参照)、プログラム、情報処理方法の構成の概略を説明する。但し、本発明は、以下の構成に限定されない。
記憶装置120に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段111と、
前記記憶装置120に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段112と、を備え、
前記データ書き込み手段111は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置120に記憶し、
前記データ特定手段112は、前記記憶装置120内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
ストレージ装置100。
付記1に記載のストレージ装置であって、
前記データ特定手段は、
前記記憶装置内に前記更新情報が存在した最大の2iの値を第一更新情報とすると共に、2i+1の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定する、
ストレージ装置。
付記2に記載のストレージ装置であって、
最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除するデータ削除手段を備え、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報を非削除対象更新情報として特定し、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外する、
ストレージ装置。
付記3に記載のストレージ装置であって、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
ストレージ装置。
付記3又は4に記載のストレージ装置であって、
前記データ特定手段は、前記記憶装置内に存在する前記更新情報の最大値よりも小さい値の前記更新情報に関連付けられた前記実データにて構成される記憶データがアクセスされている場合に、当該アクセスされている記憶データを構成する前記実データに関連付けられている前記更新情報であるアクセス対象更新情報と、当該アクセス対象更新情報を前記データ特定手段にて前記更新情報の最大値として特定する場合に検索され前記非削除対象更新情報して特定される前記更新情報とを、当該非削除対象更新情報に含める、
ストレージ装置。
付記5に記載のストレージ装置であって、
前記データ特定手段は、前記記憶装置内に存在する前記更新情報の最大値よりも小さく、前記アクセス対象更新情報の値よりも大きい値の前記更新情報を、前記非削除対象更新情報に含める、
ストレージ装置。
付記3乃至6のいずれかに記載のストレージ装置であって、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報に関連付けられた前記実データを、前記記憶装置内から削除する、
ストレージ装置。
付記1乃至7のいずれかに記載のストレージ装置であって、
前記データ書き込み手段は、前記更新情報を、同一の前記記憶データを特定するデータ特定情報に関連付けて記憶する、
ストレージ装置。
付記8に記載のストレージ装置であって、
前記データ書き込み手段は、
前記記憶データを複数の実データに分割して前記記憶装置に記憶すると共に、当該各実データを参照する各参照データと、前記記憶データを構成する複数の実データを参照する複数の前記参照データにアクセス可能な前記データ特定情報と、を記憶し、
前記記憶データを更新する際に、前記記憶装置に既に記憶されている実データと同一内容の他の実データを記憶装置に記憶する場合には、当該記憶装置に既に記憶されている実データを、当該実データを参照する前記参照データを用いて前記他の実データとして参照させて当該他の実データを記憶し、前記記憶装置に記憶されていない実データを記憶する場合には、当該実データを記憶装置に新たに記憶し、
前記記憶データが更新される度に、当該更新された記憶データを構成する複数の実データを参照する複数の前記参照データにアクセス可能な前記データ特定情報を新たに生成して記憶する、
ストレージ装置。
情報処理装置に、
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段と、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段と、を実現させると共に、
前記データ書き込み手段は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記データ特定手段は、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
ことを実現させるためのプログラム。
付記10に記載のプログラムであって、
前記データ特定手段は、
前記記憶装置内に前記更新情報が存在した最大の2iの値を第一更新情報とすると共に、2i+1の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定する、
プログラム。
付記11に記載のプログラムであって、
情報処理装置に、最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除するデータ削除手段をさらに実現させると共に、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報を非削除対象更新情報として特定し、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外する、
プログラム。
付記12に記載のプログラムであって、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
プログラム。
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶してデータを書き込み、このとき、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定する際に、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定する、
情報処理方法。
付記14に記載の情報処理方法であって、
前記最新のデータを特定する際に、
前記記憶装置内に前記更新情報が存在した最大の2iの値を第一更新情報とすると共に、2i+1の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定する、
情報処理方法。
付記15に記載の情報処理方法であって、
前記最新のデータを特定する際に、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報を非削除対象更新情報として特定し、
最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除する際に、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外する、
情報処理方法。
付記16に記載の情報処理方法であって、
前記最新のデータを特定する際に、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
情報処理方法。
2 アクセラレータノード
3 ストレージノード
4 バックアップシステム
5 バックアップ対象装置
11 データ書き込み部
12 データ読み出し部
13 データ特定部
14 データ削除部
20 記憶装置
30 アプリケーション
100 ストレージ装置
111 データ書き込み手段
112 データ特定手段
120 記憶装置
Claims (11)
- 記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段と、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段と、を備え、
前記データ書き込み手段は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記データ特定手段は、
前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定するよう構成されると共に、
前記記憶装置内に前記更新情報が存在した最大の2 i の値を第一更新情報とすると共に、2 i+1 の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定するよう構成されており、
さらに、
最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除するデータ削除手段を備え、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2 i の値に対応する前記更新情報を非削除対象更新情報として特定し、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外する、
ストレージ装置。 - 請求項1に記載のストレージ装置であって、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
ストレージ装置。 - 請求項1又は2に記載のストレージ装置であって、
前記データ特定手段は、前記記憶装置内に存在する前記更新情報の最大値よりも小さい値の前記更新情報に関連付けられた前記実データにて構成される記憶データがアクセスされている場合に、当該アクセスされている記憶データを構成する前記実データに関連付けられている前記更新情報であるアクセス対象更新情報と、当該アクセス対象更新情報を前記データ特定手段にて前記更新情報の最大値として特定する場合に検索され前記非削除対象更新情報して特定される前記更新情報とを、当該非削除対象更新情報に含める、
ストレージ装置。 - 請求項3に記載のストレージ装置であって、
前記データ特定手段は、前記記憶装置内に存在する前記更新情報の最大値よりも小さく、前記アクセス対象更新情報の値よりも大きい値の前記更新情報を、前記非削除対象更新情報に含める、
ストレージ装置。 - 請求項1乃至4のいずれかに記載のストレージ装置であって、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報に関連付けられた前記実データを、前記記憶装置内から削除する、
ストレージ装置。 - 請求項1乃至5のいずれかに記載のストレージ装置であって、
前記データ書き込み手段は、前記更新情報を、同一の前記記憶データを特定するデータ特定情報に関連付けて記憶する、
ストレージ装置。 - 請求項6に記載のストレージ装置であって、
前記データ書き込み手段は、
前記記憶データを複数の実データに分割して前記記憶装置に記憶すると共に、当該各実データを参照する各参照データと、前記記憶データを構成する複数の実データを参照する複数の前記参照データにアクセス可能な前記データ特定情報と、を記憶し、
前記記憶データを更新する際に、前記記憶装置に既に記憶されている実データと同一内容の他の実データを記憶装置に記憶する場合には、当該記憶装置に既に記憶されている実データを、当該実データを参照する前記参照データを用いて前記他の実データとして参照させて当該他の実データを記憶し、前記記憶装置に記憶されていない実データを記憶する場合には、当該実データを記憶装置に新たに記憶し、
前記記憶データが更新される度に、当該更新された記憶データを構成する複数の実データを参照する複数の前記参照データにアクセス可能な前記データ特定情報を新たに生成して記憶する、
ストレージ装置。 - 情報処理装置に、
記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶するデータ書き込み手段と、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定するデータ特定手段と、を実現させると共に、
前記データ書き込み手段は、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記データ特定手段は、
前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定するよう構成されると共に、
前記記憶装置内に前記更新情報が存在した最大の2 i の値を第一更新情報とすると共に、2 i+1 の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定するよう構成されており、
さらに、前記情報処理装置に、最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除するデータ削除手段を実現させ、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2 i の値に対応する前記更新情報を非削除対象更新情報として特定するよう構成され、
前記データ削除手段は、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外するように構成された、
プログラム。 - 請求項8に記載のプログラムであって、
前記データ特定手段は、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
プログラム。 - 記憶装置に、書込み対象となる記憶データを構成する実データを記憶すると共に、当該記憶データの内容が更新される毎に当該更新された記憶データを構成する実データを新たに記憶してデータを書き込み、このとき、前記記憶データを構成する実データに、当該記憶データが更新される毎に値が1ずつ増加する更新情報を関連付けて前記記憶装置に記憶し、
前記記憶装置に記憶された同一の記憶データのうち、最新の記憶データを特定する際に、前記記憶装置内に、2i(iは、0以上の整数)の値の前記更新情報が存在するか否かを前記iの値が小さい順に調べ、前記更新情報が存在した最大の2iの値と2i+1との間の値から、存在する前記更新情報の最大値を特定し、当該更新情報の最大値に関連付けられた実データにて構成される記憶データを最新の記憶データとして特定し、
前記最新の記憶データを特定する際に、
前記記憶装置内に前記更新情報が存在した最大の2 i の値を第一更新情報とすると共に、2 i+1 の値を第二更新情報とし、
前記記憶装置内に、前記第一更新情報と前記第二更新情報との中間値に対応する前記更新情報が存在するか否かを調べる更新情報検索処理を行うと共に、
前記記憶装置内に、前記中間値に対応する前記更新情報が存在した場合は当該中間値を前記第一更新情報とし、前記中間値に対応する前記更新情報が存在しない場合には当該中間値を前記第二更新情報とする中間値置き換え処理を行い、
前記更新情報検索処理と前記中間値置き換え処理とを繰り返し実行して、前記記憶装置内に存在する前記更新情報の最大値を特定し、
さらに、前記最新の記憶データを特定する際に、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2 i の値に対応する前記更新情報を非削除対象更新情報として特定し、
最新ではない前記記憶データを構成する前記実データ及び当該実データに関連付けられた前記更新情報を前記記憶装置内から削除する際に、前記非削除対象更新情報として特定された前記更新情報を前記記憶装置内から削除する情報から除外する、
情報処理方法。 - 請求項10に記載の情報処理方法であって、
前記最新のデータを特定する際に、前記更新情報の最大値を特定する際に検索され、前記記憶装置内に存在した2iの値に対応する前記更新情報と、前記中間値とされた前記更新情報と、特定された最大値の前記更新情報と、を前記非削除対象更新情報として特定する、
情報処理方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161531966P | 2011-09-07 | 2011-09-07 | |
US61/531,966 | 2011-09-07 | ||
PCT/JP2012/005549 WO2013035295A1 (en) | 2011-09-07 | 2012-09-03 | Storage system |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013543601A JP2013543601A (ja) | 2013-12-05 |
JP5500309B2 true JP5500309B2 (ja) | 2014-05-21 |
Family
ID=47831767
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013506369A Active JP5500309B2 (ja) | 2011-09-07 | 2012-09-03 | ストレージ装置 |
Country Status (5)
Country | Link |
---|---|
US (1) | US9665304B2 (ja) |
EP (1) | EP2754053A4 (ja) |
JP (1) | JP5500309B2 (ja) |
CN (1) | CN103765393B (ja) |
WO (1) | WO2013035295A1 (ja) |
Families Citing this family (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9223790B1 (en) * | 2011-08-31 | 2015-12-29 | Amazon Technologies, Inc. | Managing deletion of data in a data storage system |
WO2013102506A2 (en) * | 2012-01-02 | 2013-07-11 | International Business Machines Corporation | Method and system for backup and recovery |
US9052824B2 (en) | 2012-01-26 | 2015-06-09 | Upthere, Inc. | Content addressable stores based on sibling groups |
US9183212B2 (en) * | 2012-01-26 | 2015-11-10 | Upthere, Inc. | Representing directory structure in content-addressable storage systems |
US9172670B1 (en) * | 2012-01-31 | 2015-10-27 | Google Inc. | Disaster-proof event data processing |
US9208082B1 (en) * | 2012-03-23 | 2015-12-08 | David R. Cheriton | Hardware-supported per-process metadata tags |
US9356939B1 (en) * | 2013-03-14 | 2016-05-31 | Ca, Inc. | System and method for dynamic access control based on individual and community usage patterns |
US9659023B2 (en) | 2013-11-21 | 2017-05-23 | Upthere, Inc. | Maintaining and using a cache of child-to-parent mappings in a content-addressable storage system |
CA2953657A1 (en) * | 2014-06-27 | 2015-12-30 | Nec Corporation | Storage device, program, and information processing method |
US9092376B1 (en) | 2014-08-29 | 2015-07-28 | Nimble Storage, Inc. | Methods and systems for ordering virtual machine snapshots |
CN106663052A (zh) * | 2014-09-11 | 2017-05-10 | 株式会社东芝 | 文件系统、数据重复排除方法以及用于文件系统的程序 |
WO2016043757A1 (en) * | 2014-09-18 | 2016-03-24 | Hewlett Packard Enterprise Development Lp | Data to be backed up in a backup system |
WO2016048263A1 (en) | 2014-09-22 | 2016-03-31 | Hewlett Packard Enterprise Development Lp | Identification of content-defined chunk boundaries |
US9778990B2 (en) | 2014-10-08 | 2017-10-03 | Hewlett Packard Enterprise Development Lp | Methods and systems for concurrently taking snapshots of a plurality of virtual machines |
EP3216177B1 (en) | 2014-11-06 | 2021-04-14 | Hewlett Packard Enterprise Development LP | Network policy graphs |
US9727252B2 (en) * | 2014-11-13 | 2017-08-08 | Hewlett Packard Enterprise Development Lp | Methods and systems for optimal snapshot distribution within a protection schedule |
US10621143B2 (en) * | 2015-02-06 | 2020-04-14 | Ashish Govind Khurange | Methods and systems of a dedupe file-system garbage collection |
JP6229684B2 (ja) * | 2015-03-19 | 2017-11-15 | 日本電気株式会社 | ストレージ装置、ストレージ制御方法、及びストレージ制御プログラム |
US10296219B2 (en) | 2015-05-28 | 2019-05-21 | Vmware, Inc. | Data deduplication in a block-based storage system |
US10120893B1 (en) * | 2015-09-17 | 2018-11-06 | Amazon Technologies, Inc. | Storing data to content-addressable storage |
US11157517B2 (en) * | 2016-04-18 | 2021-10-26 | Amazon Technologies, Inc. | Versioned hierarchical data structures in a distributed data store |
SG11201704732PA (en) | 2016-04-19 | 2017-11-29 | Huawei Tech Co Ltd | Vector processing for segmentation hash values calculation |
WO2017182062A1 (en) | 2016-04-19 | 2017-10-26 | Huawei Technologies Co., Ltd. | Concurrent segmentation using vector processing |
US11726979B2 (en) | 2016-09-13 | 2023-08-15 | Oracle International Corporation | Determining a chronological order of transactions executed in relation to an object stored in a storage system |
US10733159B2 (en) | 2016-09-14 | 2020-08-04 | Oracle International Corporation | Maintaining immutable data and mutable metadata in a storage system |
US10216417B2 (en) | 2016-10-26 | 2019-02-26 | Samsung Electronics Co., Ltd. | Method of consolidate data streams for multi-stream enabled SSDs |
US10860534B2 (en) * | 2016-10-27 | 2020-12-08 | Oracle International Corporation | Executing a conditional command on an object stored in a storage system |
US10169081B2 (en) | 2016-10-31 | 2019-01-01 | Oracle International Corporation | Use of concurrent time bucket generations for scalable scheduling of operations in a computer system |
US10956051B2 (en) | 2016-10-31 | 2021-03-23 | Oracle International Corporation | Data-packed storage containers for streamlined access and migration |
US10180863B2 (en) | 2016-10-31 | 2019-01-15 | Oracle International Corporation | Determining system information based on object mutation events |
US10552372B2 (en) * | 2017-01-31 | 2020-02-04 | Microsoft Technology Licensing, Llc | Systems, methods, and computer-readable media for a fast snapshot of application data in storage |
US10860550B1 (en) | 2017-03-30 | 2020-12-08 | Amazon Technologies, Inc. | Versioning schemas for hierarchical data structures |
US10671639B1 (en) | 2017-03-30 | 2020-06-02 | Amazon Technologies, Inc. | Selectively replicating changes to hierarchial data structures |
US11048624B2 (en) | 2017-04-25 | 2021-06-29 | Samsung Electronics Co., Ltd. | Methods for multi-stream garbage collection |
US11010401B2 (en) * | 2017-04-25 | 2021-05-18 | Microsoft Technology Licensing, Llc | Efficient snapshot generation of data tables |
US10698808B2 (en) | 2017-04-25 | 2020-06-30 | Samsung Electronics Co., Ltd. | Garbage collection—automatic data placement |
US10812342B2 (en) | 2017-04-28 | 2020-10-20 | Hewlett Packard Enterprise Development Lp | Generating composite network policy |
US20180314957A1 (en) * | 2017-04-28 | 2018-11-01 | Hewlett Packard Enterprise Development Lp | Inferring a label namespace |
US10176046B1 (en) * | 2017-06-29 | 2019-01-08 | EMC IP Holding Company LLC | Checkpointing of metadata into user data area of a content addressable storage system |
US10691666B1 (en) * | 2017-08-23 | 2020-06-23 | CloudBD, LLC | Providing strong consistency for object storage |
KR20190068197A (ko) * | 2017-12-08 | 2019-06-18 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
CN108287912A (zh) * | 2018-02-06 | 2018-07-17 | 广东暨通信息发展有限公司 | 一种大数据存储系统 |
CN110609807B (zh) * | 2018-06-15 | 2023-06-23 | 伊姆西Ip控股有限责任公司 | 用于删除快照数据的方法、设备和计算机可读存储介质 |
US12093316B2 (en) | 2019-01-31 | 2024-09-17 | Hewlett Packard Enterprise Development Lp | Partial file system instances |
US10802965B2 (en) * | 2019-02-05 | 2020-10-13 | Microsoft Technology Licensing, Llc | Reducing synchronization reliance in garbage collection marking |
US11392541B2 (en) * | 2019-03-22 | 2022-07-19 | Hewlett Packard Enterprise Development Lp | Data transfer using snapshot differencing from edge system to core system |
US12019873B2 (en) * | 2022-07-28 | 2024-06-25 | Netapp, Inc. | Methods and systems to improve resumption time of input/output (I/O) operations based on prefetching of configuration data and early abort of conflicting workflows during a non-disruptive automatic unplanned failover from a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
US20240143447A1 (en) | 2022-10-28 | 2024-05-02 | Netapp, Inc. | Methods and systems to reduce latency of input/output (i/o) operations based on consistency point optimizations during creation of common snapshots for synchronous replicated datasets of a primary copy of data at a primary storage system to a mirror copy of the data at a cross-site secondary storage system |
CN117130980B (zh) * | 2023-10-24 | 2024-02-27 | 杭州优云科技有限公司 | 一种虚拟机快照管理方法及装置 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5778368A (en) * | 1996-05-03 | 1998-07-07 | Telogy Networks, Inc. | Real-time embedded software respository with attribute searching apparatus and method |
US7836029B2 (en) * | 2003-07-08 | 2010-11-16 | Pillar Data Systems, Inc. | Systems and methods of searching for and determining modified blocks in a file system |
US7756844B2 (en) * | 2003-07-08 | 2010-07-13 | Pillar Data Systems, Inc. | Methods of determining and searching for modified blocks in a file system |
US7444389B2 (en) | 2003-12-09 | 2008-10-28 | Emc Corporation | Methods and apparatus for generating a content address to indicate data units written to a storage system proximate in time |
US7225371B2 (en) * | 2004-08-03 | 2007-05-29 | International Business Machines Corporation | Method and apparatus for storing and retrieving multiple point-in-time consistent data sets |
EP1966699A2 (en) * | 2005-12-22 | 2008-09-10 | Nxp B.V. | Memory with block-erasable locations and a linked chain of pointers to locate blocks with pointer information |
US8412682B2 (en) | 2006-06-29 | 2013-04-02 | Netapp, Inc. | System and method for retrieving and using block fingerprints for data deduplication |
US7849057B1 (en) * | 2007-03-30 | 2010-12-07 | Netapp, Inc. | Identifying snapshot membership for blocks based on snapid |
JP5084551B2 (ja) | 2008-02-26 | 2012-11-28 | Kddi株式会社 | 重複排除技術を用いたデータバックアップ方法、記憶制御通信装置及びプログラム |
JP5320557B2 (ja) | 2008-03-25 | 2013-10-23 | 株式会社日立製作所 | ストレージシステム |
US7567188B1 (en) * | 2008-04-10 | 2009-07-28 | International Business Machines Corporation | Policy based tiered data deduplication strategy |
US8335889B2 (en) * | 2008-09-11 | 2012-12-18 | Nec Laboratories America, Inc. | Content addressable storage systems and methods employing searchable blocks |
US7992037B2 (en) | 2008-09-11 | 2011-08-02 | Nec Laboratories America, Inc. | Scalable secondary storage systems and methods |
US8412688B1 (en) * | 2009-06-29 | 2013-04-02 | Emc Corporation | Delegated reference count base file versioning |
-
2012
- 2012-09-03 WO PCT/JP2012/005549 patent/WO2013035295A1/en active Application Filing
- 2012-09-03 US US13/818,226 patent/US9665304B2/en active Active
- 2012-09-03 CN CN201280043434.9A patent/CN103765393B/zh active Active
- 2012-09-03 JP JP2013506369A patent/JP5500309B2/ja active Active
- 2012-09-03 EP EP12829663.9A patent/EP2754053A4/en not_active Ceased
Also Published As
Publication number | Publication date |
---|---|
US9665304B2 (en) | 2017-05-30 |
JP2013543601A (ja) | 2013-12-05 |
EP2754053A4 (en) | 2015-12-23 |
US20140189270A1 (en) | 2014-07-03 |
CN103765393A (zh) | 2014-04-30 |
EP2754053A1 (en) | 2014-07-16 |
WO2013035295A1 (en) | 2013-03-14 |
CN103765393B (zh) | 2016-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5500309B2 (ja) | ストレージ装置 | |
Kwon et al. | Strata: A cross media file system | |
JP4699516B2 (ja) | 名前空間複製プログラム、名前空間複製装置、名前空間複製方法 | |
US8909610B2 (en) | Shared log-structured multi-version transactional datastore with metadata to enable melding trees | |
US8185551B2 (en) | Disk-resident streaming dictionary | |
US20170212680A1 (en) | Adaptive prefix tree based order partitioned data storage system | |
US7930559B1 (en) | Decoupled data stream and access structures | |
US7673099B1 (en) | Affinity caching | |
US9235535B1 (en) | Method and apparatus for reducing overheads of primary storage by transferring modified data in an out-of-order manner | |
Levandoski et al. | LLAMA: A cache/storage subsystem for modern hardware | |
US11755427B2 (en) | Fast recovery and replication of key-value stores | |
US11288128B2 (en) | Indexing a relationship structure of a filesystem | |
US11847028B2 (en) | Efficient export of snapshot changes in a storage system | |
US8560500B2 (en) | Method and system for removing rows from directory tables | |
US20040133608A1 (en) | Efficient search for migration and purge candidates | |
Graefe | A survey of B-tree logging and recovery techniques | |
Hu et al. | TxFS: Leveraging file-system crash consistency to provide ACID transactions | |
US20080172423A1 (en) | Hsm control program, hsm control apparatus, and hsm control method | |
Stender et al. | BabuDB: Fast and efficient file system metadata storage | |
Graefe et al. | Instant recovery with write-ahead logging | |
Shaull et al. | A Modular and Efficient Past State System for Berkeley {DB} | |
US10452496B2 (en) | System and method for managing storage transaction requests | |
Shaull et al. | Skippy: a new snapshot indexing method for time travel in the storage manager | |
Czezatk et al. | {LinLogFS--A}{Log-Structured} File System for Linux | |
US11829291B2 (en) | Garbage collection of tree structure with page mappings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131203 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20140120 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20140212 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140225 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5500309 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |