JP6026538B2 - 検証されたデータセットの不揮発性媒体ジャーナリング - Google Patents

検証されたデータセットの不揮発性媒体ジャーナリング Download PDF

Info

Publication number
JP6026538B2
JP6026538B2 JP2014529692A JP2014529692A JP6026538B2 JP 6026538 B2 JP6026538 B2 JP 6026538B2 JP 2014529692 A JP2014529692 A JP 2014529692A JP 2014529692 A JP2014529692 A JP 2014529692A JP 6026538 B2 JP6026538 B2 JP 6026538B2
Authority
JP
Japan
Prior art keywords
data set
journal
storage
stored
volatile memory
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
Application number
JP2014529692A
Other languages
English (en)
Other versions
JP2014526735A5 (ja
JP2014526735A (ja
Inventor
モス,ダレン
メーラ,カラン
ナガー,ラジーヴ
ヴェルマ,スレンドラ
ラジパル,シヴ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2014526735A publication Critical patent/JP2014526735A/ja
Publication of JP2014526735A5 publication Critical patent/JP2014526735A5/ja
Application granted granted Critical
Publication of JP6026538B2 publication Critical patent/JP6026538B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本願は検証されたデータセットの不揮発性媒体ジャーナリング(journaling)に関する。
コンピューティングの分野において、多くのシナリオは一つまたは複数の不揮発性記憶装置(たとえば円盤ベースの磁気および/または光ハードディスクドライブ、半導体記憶デバイスおよび不揮発性メモリ回路)上にデータを保存することに関わる。語サイズ、アドレッシング方法、記憶装置の記憶スペースの一つまたは複数のパーティションへの分割および記憶装置内の割り当てられたスペースをコンピューティング環境内の一つまたは複数のボリュームとして露出させることなど、データ記憶の多くの詳細は変わりうる。
多くのそのような記憶シナリオにおいて、データに対する意図されない変化を検出するための諸技法が利用されうる。たとえば、装置の読み出しまたは記憶論理におけるエラー、バッファー・アンダーランまたはオーバーラン、記憶媒体における欠陥または(宇宙線のような)外的な妨害が、時に記憶媒体上に記憶されているデータまたは記憶媒体からのデータの読み出しに意図しない変化を引き起こすことがある。したがって、そのような多くのシナリオにおいて、データは、それぞれのデータセット(たとえば、種々の語、セクタ、領域または他のデータのセット)について計算された検証子(たとえばパリティ・ビットまたはチェックサム)に関わる何らかの誤り検出方式に従って記憶装置に記憶される。検証子は、データセットの内容が有効に記憶装置に記憶されたおよび/または記憶装置から読み出されたことを確証するために使用されうる。そのような一つの例として、ビットのセットを含むデータセットを記憶するコンテキストでは、ビットに対して排他的OR(XOR)演算が適用され、結果としてパリティ・ビットを生じてもよく、そのパリティ・ビットが記憶されて、このデータセットと関連付けられてもよい。のちにデータセットが読まれるとき、もう一度XOR演算が適用されて、その結果が上記パリティ・ビットと比較される。任意の一ビットの変化はこれらのXOR計算の不一致につながり、それがデータが誤って記憶、変更されたまたは誤って記憶装置から読み出されたことを示す。多くの型の検証子が同定されてもよい。そうした検証子はいくつかの特徴において変わりうる(たとえば、計算の簡単さ、データセットのどのビットが変わったかの同定能力およびデータの誤って読まれた部分が訂正されうる誤り訂正能力)。
誤り検出方式はしばしば安価なディスクの冗長アレイ(RAID: Redundant Array of Inexpensive Disks)のアレイ、たとえば改善されたスループットおよび自動データ・ミラーリングのようなさまざまな集合属性を達成するために一緒にプールされている一組のハードディスクドライブにおいて利用される。そのような一つの例として、RAID 4アレイは二つ以上のディスクのセットに関わる。ここで、一つのディスクはユーザー・データを記憶するためではなく、他のディスクに記憶されているデータの検証子を記憶するためにアレイに含められる。たとえば、それぞれが一テラバイトのデータを記憶する四つのディスクに関わるRAID 4アレイについて、最初の三つのディスクの容量はプールされてユーザー・データのための三テラバイトの記憶スペースをなし、四番目のディスクは最初の三つのディスクに記憶されているデータセットについての検証子を保持するためにアレイに含められる(たとえば、他の三つのディスクにそれぞれ記憶されている三つの64ビット語毎に、四番目のディスクは、それらの三つの64ビット語の完全性を検証する64ビットの検証子を含む)。RAIDアレイ・コントローラは、設けられる一組のドライブについて選択されたRAIDレベルの詳細を実装する(たとえば、データセットを受領すると、自動的に、三つのユーザー・ディスクを横断してデータを割り振り、データセットの検証子を計算し、四番目のディスク上に検証子を記憶する)よう構成されている回路を有する。使用されるRAID技法は、追加的な保護または特徴をも可能にしてもよい。たとえば、RAID 4アレイにおけるどれか一つの記憶装置が障害を起こしたら、障害を起こした装置に記憶されているデータが、残りの記憶装置の使用を通じてそっくり再構成されてもよい。
この概要は、詳細な説明においてさらに後述される概念のセレクションを簡略化された形で紹介するために設けられている。この概要は、特許請求される主題の鍵となる因子または本質的な特徴を特定することは意図されていないし、特許請求される主題の範囲を限定するために使われることも意図されていない。
記憶装置へのデータの書き込みは、非効率および潜在的な問題のいくつかの源を呈することがありうる。第一の例として、記憶装置に書き込まれるデータセットは、記憶装置上の一連の物理的アドレスに書き込まれるデータのようなデータのシーケンスに関わることがある。このシーケンスに従ってデータセットを書き込むことによって(たとえば、データの連続的なブロックのシーケンシャルな書き込み)、記憶装置はより高速なシーク時間、より高いスループットおよび/またはシーク時間および書き込み動作の低減に起因する低下した電力消費および物理的摩耗を達成しうる。しかしながら、さまざまな状況のため、記憶装置はデータのシーケンスを二つ以上のサブシーケンスとして書き込むことがあり、こうした効率を達成しないことがある。第一の例として、データセットを書き込む要求は、シーケンスの一部を書き込む二つ以上の要求(たとえば、アドレス1000-1015を書き込む第一の要求およびアドレス1016-1031を書き込む第二の要求)を含んでいることがあり、記憶装置は、シーケンス全体を一緒にコミットするのではなく、シーケンスの各部分を別個にコミットすることがある。第二の例として、記憶装置はいくつかの書き込み要求を受け取ることがあり、シーケンスの第一の部分とシーケンスの第二の部分の書き込みの間に、異なるデータセットを異なる位置に記憶することがありうる。これにより、第一の部分と第二の部分の間の二回の追加的シークが生じてしまう。これらおよびその他の状況は、パフォーマンス、電力効率および記憶装置の寿命における効率利得の機会を逃すこととして同定されうる。
検証子に基づく記憶セットを記憶する際に生じうる第二の問題は、データセットの記憶とその検証子との間の遅延(またはその逆)に関わる。第一の例では、多くの記憶装置は一時に一つの位置(たとえば、ハードディスクドライブの書き込みヘッドの下の位置または半導体記憶デバイスにおけるアドレス・レジスタによって指定される位置)への書き込みをサポートするだけであり、データのシーケンシャルな記憶は、検証子より前にデータセットを書き込むこと、あるいは逆にデータセットより前に検証子を書き込むことに関わる。第二の例として、データセットと検証子が異なる記憶装置上に記憶される場合、第一の記憶装置がデータセットを記憶する瞬間を第二の記憶装置がデータセットの検証子を記憶する瞬間と同期させることは難しいことがある。これらおよびその他の例において、データセットおよび対応する検証子の記憶は、同期的な仕方ではなく、シーケンシャルな仕方で行なわれうる。しかしながら、電力喪失、ハードウェア障害、ソフトウェア・クラッシュまたは予期されなかったアレイからの記憶装置の除去といった記憶装置(単数または複数)の障害が、データセットの記憶後、検証子の記憶より前に起こることがありうる。結果として、検証子は検証子によって代表されるデータに一致しない。時にRAID書き込みホール(RAID write hole)として同定される、非原子的書き込みによって引き起こされるこの問題は、多くの結果として生ずる帰結として現われうる。たとえば、記憶装置(単数または複数)がいかにしてこのエラーを治癒するかを、たとえば不一致が誤った検証子を表わしているのか、データセットへの意図されない変化(たとえば、記憶セットのビット誤り率(BER: bit error rate)の表明)を表わしているのか、あるいはデータセットもしくは検証子のいずれかの読み込み誤りを表わしているのかを、決定するのが難しいことがある。この情報欠如は、最近書き込まれていないデータセットの部分の正確さに対する信頼を危険にさらすことさえありうる。たとえば、記憶装置の一つが故障した場合、(誤った検証子を使って)残っている記憶装置からその記憶装置上のデータを復元する試みは、誤ったデータ再構成につながりうる。たとえば、失われたまたは破損して、修理されたまたは代わりの記憶装置をもって置換された特定のボリュームからのデータを復元するために、欠けている記憶装置上のデータの各語は同じ位置(たとえば他の装置上の同じ物理的または論理的アドレス)にある語ならびに前記アドレスにある語のセットについてのチェックサムをまとめてXORすることによって計算されてもよく、その結果が欠けている語を与える。しかしながら、チェックサムが意図せずして変わっていたら、XOR演算は正しくない結果を与え、代用されたボリューム上の語の正しくないデータによる置換につながる。もう一つの例として、検証子Cが部分AおよびBを含むデータセットのために記憶されていて、AおよびCを更新している間に破局的な障害が生じる場合、コンピュータはデータセット[A,B]と検証子Cの間の不一致を同定できることがありうる。この不可能性は、破局的な障害の瞬間に書き込みに参加していたAおよびCのみならず、長い間アクセスされてさえいないことがありうるBに対する信頼性をも損なうことがありうる。
本稿では、RAID書き込みホールのような問題によって引き起こされる、データ損失および長引く回復時間のリスクを軽減するとともに、記憶セットの効率を改善するための技法が提示される。これらの技法によれば、記憶セット(storage set)の一つまたは複数の記憶装置上で、記憶セットにコミットされるべきデータセットを記憶するよう構成されたジャーナルが生成されてもよい。ジャーナル(journal)は、たとえば、ループ・アレイとして構成されたレコードのシーケンスを有していてもよい。ここで、各レコードはデータセットおよび該データセットのために計算された検証子を記憶する容量をもつ。記憶セットに書き込まれるべきすべてのデータセットはまず、受領のシーケンシャルな順序で、該データセットについて計算された検証子とともに、ジャーナルに記憶されてもよい。
これらの技法は、非原子的な書き込みが、記憶セット内の位置にコミットされる前に記憶装置の不揮発性メモリ上に記憶されうる機構を提供することによって、RAID書き込みホールの帰結を軽減しうる。データセットがジャーナルに書き込まれつつある間に障害が起こると、記憶セットに記憶されているデータセットのバージョンは手つかずのまま残り、データセットが記憶セットに書き込まれつつある間に障害が起こると、障害は、ジャーナルから記憶セットに、データセットの書き込みを再開始することによって復元されうる。さらに、ジャーナルの使用は、シーケンシャルな書き込みを増進することによって記憶装置のパフォーマンスを改善しうる。第一の例として、非シーケンシャルな諸データセットがまずシーケンシャルにジャーナルに書き込まれ、非シーケンシャルな諸データセットについてさえ、通して、迅速な、シーケンシャルな書き込みを提供する。第二の例として、ジャーナルは、書き込み要求と記憶セットとの間の書き込みバッファとして機能しうる。それにより、記憶装置の連続的な諸物理的位置に記憶されているデータのシーケンスを含む諸書き込み要求の融合を可能にする。さらなるパフォーマンス改善が、たとえば不揮発性記憶装置上に記憶されているジャーナルの揮発性メモリ表現を生成することによって、達成されうる。ここで、揮発性メモリ表現は、リーチ(reach)キャッシュおよび/または書き込みバッファのはたらきをする。これらおよびその他の利点は、本稿に提示される技法の使用を通じて達成可能でありうる。
上記および関係する目的の達成に向け、以下の記述および付属の図面はある種の例示的な側面および実装を記述する。これらは、一つまたは複数の側面が用いられうるさまざまな仕方のほんのいくつかを示す。本開示の他の側面、利点および新規な特徴は、付属の図面との関連で考慮されるとき、以下の詳細な記述から明白となるであろう。
記憶装置上の記憶セットを有するデータセットの例示的な記憶の図解である。 記憶セット内の書き込み動作中の障害の帰結を描く例示的なシナリオの図解である。 本稿に提示される技法に基づく、記憶装置上の記憶セットを有するデータセットの例示的な記憶の図解である。 本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶する第一の例示的な方法を示すフローチャートである。 本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶する第二の例示的な方法を示すフローチャートである。 本稿に提示される技法に基づく、少なくとも一つの記憶装置上の記憶セットを有するデータセットを記憶するよう構成されたプロセッサ実行可能命令を有する例示的なコンピュータ可読記憶媒体の図解である。 データセットの検証子を計算するためのさまざまな技法を表わす例示的なシナリオの図解である。 記憶装置の不揮発性媒体上に記憶されたジャーナルの揮発性メモリ表現の使用を表わす例示的なシナリオの図解である。 記憶装置上に記憶されるジャーナルと該ジャーナルの揮発性メモリ表現との間の、記憶装置の書き込みバッファとの対話を表わす第一の例示的なシナリオの図解である。 記憶装置上に記憶されるジャーナルと該ジャーナルの揮発性メモリ表現との間の、記憶装置の書き込みバッファとの対話を表わす第二の例示的なシナリオの図解である。 本稿に記載される仕組みの一つまたは複数が実装されうる例示的なコンピューティング環境を示す図である。
特許請求される主題についてここで図面を参照して述べる。図面を通じて、同様の要素を指すために同様の参照符号が使われる。以下の記述では、説明の目的で、特許請求される主題の十全な理解を与えるために、数多くの個別的詳細が記述される。しかしながら、特許請求される主題がそうした個別的詳細なしでも実施されうることは明白であろう。他方、特許請求される主題の記述を容易にするために、構造および装置がブロック図の形で示される。
〈A.序〉
コンピューティングの分野において、多くのシナリオは、一連のデータセットを有する記憶セット(storage set)の、一つまたは複数の記憶装置のセット上への記憶に関わる。たとえば、ユーザーは、一組のハードディスクドライブを横断してアーカイブを生成したいことがあり、該アーカイブ内に一つまたは複数のデータセット(たとえばバイト、語、ブロックまたはデータ、ファイルもしくはレコードのシーケンス)を記憶することがありうる。いくつかのシナリオでは、記憶装置はデータの記憶のために全体的に割り当てられていてもよい。たとえば、二テラバイトのハードディスクドライブは、二テラバイトの記憶セットを与えるよう構成されていてもよい。他のシナリオでは、記憶セットは、データへのアクセスしやすさおよび/または復元を増進する仕方で記憶装置上に冗長に記憶されてもよい。たとえば、一方のコピーが破損した場合にバックアップを提供するために、一テラバイトのデータセットが二つの一テラバイト・ハードディスクドライブ上に同一の形で記憶されてもよい。記憶セットを記憶するために、複数の記憶装置が、さまざまな仕方で協働するよう構成されていてもよい。
多くのそのような記憶方式および特徴が、安価なディスクの冗長アレイ(RAID)の諸変形において含まれる。第二の例として、RAID 0記憶方式では、二つ以上のハードディスクドライブの記憶スペース全体がデータの記憶に割り当てられてもよい。そのため、第一のハードディスクドライブは、記憶セットの一部に記憶されるデータへのアクセスを提供してもよく、一方、第二のハードディスクドライブは、記憶セットの別の部分に記憶されるデータへの並列アクセスを提供してもよく、事実上、データセットへのアクセスのレートを二倍にする(そして可能性としては、他のハードディスクドライブ上に記憶される記憶セットの諸部分についてさらなる倍加を含む)。第二の例として、RAID 1記憶方式では、第一のハードディスクドライブは記憶セットを記憶するために全体的に割り当てられていてもよく、ミラーとして機能する追加的な諸ディスクドライブは記憶セットの同一のコピーを記憶してもよい。パフォーマンス改善は、異なるハードディスクドライブによって与えられる記憶セットへの同時並行アクセスを通じて達成されてもよい。さらに、記憶セットの完全なコピーが任意のハードディスクドライブ上でアクセスされてもよく、(たとえば破損、無反応、不在または損傷のために)障害を起こした任意のハードディスクドライブは、そこに含まれるデータの可用性を危険にさらすことなく、置き換えられる。しかしながら、RAID 1方式は記憶セットの容量を有意に減らしてしまう(たとえば、ハードディスクドライブの追加が記憶セットの容量を増さない)。さらなるRAID変形は、記憶セットの容量を最大化しつつ、RAID 0とRAID 1アレイのアクセスしやすさ、パフォーマンスおよび故障回復属性のバランスを取りうる。たとえば、特定のサイズのハードディスクドライブのセットを有するRAID 4アレイでは、一つを除いた全部のハードディスクドライブの全容量が記憶スペースを提供してもよく、取っておかれるハードディスクドライブは、他のハードディスクドライブ上に記憶されたデータセットそれぞれについてのパリティ情報(たとえば排他的OR(XOR)計算)を記憶しうる。この構成は、記憶スペースを最大にし(たとえば、四つの一テラバイト・ハードディスクドライブを有するRAID 4アレイは三テラバイトの記憶スペースを提供する)、その一方で、一ドライブ障害に耐える。たとえば、ハードディスクドライブのどれか一つが完全に故障したとしても、故障したドライブは代わりのハードディスクドライブで置換されることができ、故障したハードディスクドライブ上のデータは残りのハードディスクドライブ上に記憶されているデータを使って再構成されうる。たとえば、障害パリティ・ハードディスクドライブは、単に諸ハードディスクドライブ上に記憶されているそれぞれのデータセットについてのXOR値を計算し直すことによって再構成されうる。他のハードディスクドライブの障害を起こしたものに記憶されていたデータは、利用可能なデータセットおよびXORパリティ値の使用を通じて再構成されうる。
しかしながら、一つまたは複数の記憶装置上のさまざまなデータセットを有する記憶セットの記憶に関わるシナリオ内では、記憶セットのパフォーマンスおよび/または信頼性に影響するさまざまな不十分および問題が生じうる。図1および図2は、本稿に提示される技法によって対処されうるそのような二つの問題の例を描いている。
図1の例示的なシナリオ100では、一連のデータセット104(たとえば、当該記憶セット102のさまざまなバイト、語、データ・ブロック、ファイルまたはレコード)を含む記憶セット102が記憶装置106(たとえばハードディスクドライブ)上に記憶されうる。記憶セット102を生成するまたは記憶セット102にアクセスするプロセスは、さまざまなデータセット104に関わる読み出しおよび/または書き込み要求のセットを生成してもよく、記憶装置106によって受領され、充足されてもよい。たとえば、ハードディスクドライブは、回転する物理的媒体上に懸下される読み書きヘッド108を有していてもよい。読み書きヘッド108は、該読み書きヘッド108の下で回転させられる物理的な媒体の任意のセクタのもとに記憶されているデータ(たとえば動径方向の線のデータ)を読むことができる。よって、記憶セット102中の第一の位置110に記憶されるべき第一のデータセット104が受領されるとき、ハードディスクドライブは、記憶セット102中の位置110に合致する物理的な位置が読み書きヘッド108の下に回転させられるまで、物理的な媒体を回転させてもよく、次いで、物理的な媒体にデータセット104を書き込んでもよい。しかしながら、そのようなハードディスクドライブのパフォーマンスはしばしば、物理的な媒体を適切な位置まで回転させる間の遅延によって制限される。この遅延は、シーケンシャルなアクセスを通じて緩和されうる。たとえば、物理的な媒体上の物理的な位置のシーケンスを含む三つのデータセット104が逐次書き込まれてもよく、それによりそれらの位置を読み書きヘッド108の下に正しく位置させることにおける回転遅延の数を3から1に減少させる。回転遅延はしばしばハードディスクドライブのスループットにおいて速度を制限する要因なので、シーケンシャルなアクセスは記憶装置106のスループットを著しく改善しうる。さらに、各データセット104について、検証子112(各四バイト・データセット104について計算されるパリティ・バイトとして図1の例示的なシナリオ100において表現されている)が計算され、データセット104とともに記憶され、データセット104の完全性を検証するために使用されうる。図1の例示的なシナリオ100は、セクタ中のデータセット104に検証子をアペンドし、それによりデータセット104と検証子112が一つの回転シークおよび書き込み要求を実行することによって記憶されうるようにすることによる効率改善を提示している。
図1は、記憶セット102のデータセットの、記憶装置106への記憶を表わす例示的なシナリオ110を示している。この例示的なシナリオ100において、四つのデータセット104のシーケンスが記憶装置106によって受領され、処理される。第一の時点114では、第一のデータセット104が記憶セット102中の第一の位置110における記憶のために受領され、記憶装置106は、読み書きヘッド108を物理的な媒体上の対応する位置の上に位置させるために第一の回転シークを実行し、第一のデータセット104およびその検証子112を物理的な媒体に書き込む。第二の時点116では、第二のデータセット104が記憶セット102中の第一の位置110における記憶のために受領され、記憶装置106は、読み書きヘッド108を物理的な媒体上の対応する位置の上に位置させるために第二の回転シークを実行し、第二のデータセット104およびその検証子112を物理的な媒体に書き込む。第三の時点108および第四の時点110において、それぞれ第三のデータセット104および第四のデータセット104を記憶するために追加的な回転シーク動作が実行される。
しかしながら、図1の例示的なシナリオ100は、記憶セット102へのデータセット104の書き込みにおける非効率のいくつかの源を描いている。第一の例として、第一のデータセット104および第三のデータセット104がシーケンス(たとえば記憶セット102中の相続く位置110に記憶されたデータセット102)をなし、第二のデータセット104および第四のデータセット104がシーケンスをなす。たとえば、第一のプロセスが記憶セット102への書き込みの第一のシーケンスを要求し、その間、第二のプロセスが並行して記憶セット102の異なる位置への書き込みの第二のシーケンスを要求してもよい。記憶装置106はインターリーブされた仕方でそれらの要求を受領してもよい。しかしながら、この例示的なシナリオ100では、記憶装置106はデータセット104を受領のシーケンシャル順に物理的な媒体に書き込み、よってデータセット104を書き込むために四回の回転シークを実行する。この書き込みプロセスは、書き込み要求が受領される順序を厳密に保存しうるものの、第一のデータセット104および第三のデータ102を記憶するための第一の回転シークおよび第二のデータセット104および第四のデータセット104を記憶するための第二の回転シークを実行することによってスループットの改善が達成されたところである。
図1に描かれる非効率の第二の源は、その後の書き込みによってすぐに上書きされる記憶セット102へのデータを不要に書き込むことから生じる。第一の例として、第二のデータセット104および第四のデータセット104はいずれも記憶セット102中の同じ位置110に書き込まれる。上書きの認識があれば、最も後の書き込み202のみを書き込むことによって記憶装置106のパフォーマンスを改善する機会を提供しうる(特に、上書きが先の書き込みと同じデータを書き込む場合)。しかしながら、この例示的なシナリオ100における記憶装置はこの認識を達成せず、記憶セット102中の同じ位置110への同じデータセット104の二回の書き込みを不必要に実行する。第二の例として、第一の検証子112が、第一のデータセット104および第三のデータセット104を含むデータセット104の第一のセット(たとえば位置0x0044-0047)のために計算されてもよく、第二の検証子112が、第二のデータセット104および第四のデータセット104を含むデータセット104の第二のセット(たとえば位置0xA0F0-A0F3)のために計算されてもよい。それらの書き込み要求が受領されるシーケンスのため、記憶装置106は各検証子110を二回計算し、書き込む(たとえば、第一の検証子110の第一の計算が第一のデータセット104のために実行されて第一のデータセット104とともに記憶され、第二の検証子110の第一の計算が第二のデータセット104のために実行されて第二のデータセット104とともに記憶され、第一の検証子110の再計算が第三のデータセット104のために実行されて第三のデータセット104とともに記憶され、第二の検証子110の再計算が第四のデータセット104のために実行されて第四のデータセット104とともに記憶される)。これらの再計算は、第一のデータセット104および第三のデータセット104について一回、第一の検証子112を計算し、第二のデータセット104および第四のデータセット104について一回、第二の検証子112を計算することによって、回避できたかもしれない。それにより計算および書き込みの数が削減される。これらおよび他の非効率は、記憶装置106が、記憶セット102中にシーケンシャルに記憶される諸データセット104のための諸書き込み要求のために含まれる、計算および/または書き込みを減らす機会を同定できないことから生ずることがありうる。
図2は、記憶セット102において生じうる第二の型の問題を描く例示的なシナリオ200の図解を示している。この例示的なシナリオ200では、記憶装置106のセットが、検証子112のセットをもつ記憶セット102を記憶するために相互運用される。特に、記憶装置106のうちの三つが、特定の位置110に関連付けられた三つのデータセット104を記憶し、第四の記憶装置106がそれら三つのデータセット104についての検証子112を記憶する。たとえば、各データセット104は単一のビットを有していてもよく、検証子112は三つのビットを合わせてXORすることによって計算されてもよい。(図2の例示的なシナリオ200は、以下の説明を簡単にするために各データセット104を単一のビットとして描いているが、データセット104がいかなるサイズであってもよいことは理解されるであろう。)何らかのデータセット104が書き込まれるとき、第四の記憶装置106に記憶されている検証子112が、更新されたデータセット104に合致するよう更新される。しかしながら、この例示的なシナリオ200において示されるように、さまざまな記憶装置106への書き込みは、原子的かつ厳密に同時並行の仕方では行なわれないことがあり、異なる時刻に行なわれることがありうる。たとえば、ある記憶装置106に記憶されているデータセット104および第四の記憶装置106に記憶されている検証子112の両方を更新するよう要求が受領されることがありうるが、記憶装置106が、他の記憶装置106が書き込み動作に従事している間にアイドルでありうるならば、第一の記憶装置106は第二の記憶装置106より前にその書き込み動作を開始および/または完了することがありうる。パフォーマンス(たとえば回転スピード)および状況(たとえば、物理的な媒体の現在の回転位置からの書き込み位置の距離)における記憶装置104間の変動も、記憶装置106間のタイミング相違に寄与しうる。たとえば、第一の時点204において、第三の記憶装置106上に記憶されたデータセット104および第四の記憶装置106に記憶された対応する検証子112を更新するために書き込み202が要求されることがある。しかしながら、第三の記憶装置106は第一の時点204において書き込み202を開始および/または完了しうる一方、第四の記憶装置106は第二の時点206において検証子112への書き込み202を完了することがありうる。
図2の例示的なシナリオ200において描かれている記憶装置106の不完全な同期は、記憶サービスの障害の際に非一貫性を生じうる。たとえば、第三の時点208において、第三の記憶装置106によって記憶されているデータセット104および第四の記憶装置106によって記憶されている対応する検証子112の両方に対してもう一つの書き込み202が要求されることがある。しかしながら、この書き込みプロセスの間にコンピューティング環境の障害210(電源障害またはハードウェアもしくはソフトウェアのクラッシュ)が発生することがありうる。記憶装置106および記憶アレイはしばしば、多くのそのような障害210に耐えるよう設計されるものの、この障害210は第三の記憶装置106が更新されたデータセット104の書き込みを完了した後だが第四の記憶装置106が更新された検証子112を書き込む前に起こることがありうる。記憶装置106が再びアクセス可能である(たとえば電力が回復した)第四の時点212において、第三の記憶装置106によって記憶されているデータセット104の更新と第四の記憶装置106が検証子112を更新していないこととは、非一貫性を呈する。検証子112はもはや対応するデータに合致しないのである。単一の記憶装置106の使用でも同様のシナリオは発生しうる。たとえば、単一の読み書きヘッド108による記憶装置106上に記憶されたデータセット104の冗長なコピーは、データセット104の第一のコピーと第二のコピーの更新の間に障害210が生じる場合には、非一貫性を呈することがありうる。
時に「RAID書き込みホール」として同定されるこの非一貫性は、いくつかの問題につながりうる。第一の例として、前記一つまたは複数のデータセット104および/または検証子112のどれが誤っているかを識別することが可能でないことがある。(たとえば、同様に、障害は第四の記憶装置106が検証子112を更新した後だが第三の記憶装置106がデータセット104の更新を完了する前に発生したこともありうる。)そのため、検証子112によって表わされるデータセット104すべて――書き込み202に関わってさえいなかった第一および第二の記憶装置106に記憶されているデータセット104さえも――の完全性を危機にさらすことになる。第二の例として、この非一貫性はすぐに発見されないことがあり、記憶セット102内に残ることがありうる。その後、記憶装置106が利用不能になったとき(たとえば第一の記憶装置106が完全に故障するまたは除去される場合)、第一の記憶装置106上のデータを再構成しようとする試みは他の記憶装置上のデータを利用しうるが、非一貫性の結果として、データの正しくない再構成につながることがありうる。したがって、アレイは単一の記憶装置106の障害から回復する期待される機能を提供し損なう。これらおよびその他の問題は、関係するデータセット104を記憶セット102に記憶する間の諸記憶装置106の相互運用における不完全な同期から生じうる。
〈B.提示される技法〉
本稿に提示されるのは、可能性としては図1および図2の例示的なシナリオにおいて例解されているものを含む記憶シナリオにおいて生じうる問題および/または非効率のいくらかに対処するための技法である。これらの技法によれば、記憶セット102を記憶する記憶装置106の一つまたは複数上でジャーナルが生成されうる。記憶セット102に書き込まれるべきデータセット104および検証子112はまずジャーナルに書き込まれてもよい。さらに、ジャーナルは、データセット104の書き込み順のシーケンスにおいて構成されたデータセット104のシーケンスとして構成されてもよい。それにより、記憶セット102のさまざまな(シーケンシャルでない)位置においてデータセット104を書き込む要求のストリームを受領する記憶装置106はまず、ジャーナル中にシーケンシャルにデータセット104を記憶してもよい。さらに、記憶セット102中の要求された諸位置110にデータをコミットするために、バッチとして書き込まれてもよいいくつかのデータセットが選択されてもよい。たとえば、ジャーナルは、記憶セット102に書き込まれるべきデータセット104をシーケンシャルに待ち行列に入れてもよく、定期的に、待ち行列の前から、同じバッチ内で書き込みされうるデータセット104のセットを選択してもよい。
図3は、記憶装置106の不揮発性媒体上に記憶されたジャーナル302の使用を通じた、記憶セット102へのデータセット104および対応する検証子112の記憶を描く例示的なシナリオ330の図解を示している。この例示的なシナリオ300では、記憶セットの少なくとも一部を含むデータセット104を記憶するよう構成された記憶装置106上で、データセット104および対応する検証子112を、かかるデータが記憶セット102にコミットされる前に記憶するよう構成されたジャーナル302が生成される。特に、この例示的なシナリオ300におけるジャーナル302は、データセット104、記憶セット102におけるデータセット104の位置110およびデータセット104についての検証子112を記憶するレコード304のシーケンスとして構成される。ジャーナル302のレコード304は、待ち行列の先頭(すなわち、ジャーナル304中の最も古いデータセット104)を同定する尾部ポインタ306および待ち行列の終端(すなわち、ジャーナル304中に書き込まれる最も遅いデータセット104)を同定する頭部ポインタ308によって待ち行列として構成される。第一の時点310において、ジャーナル302は初期には空である(すなわち、頭部ポインタ308および尾部ポインタ306が同じレコード304をポイントする)。記憶セット102に記憶されるべき三つのデータセット104のシーケンスを受領すると、記憶装置106はそれら三つのデータセット104を順にジャーナル302に記録してもよい(たとえば、頭部ポインタ308を動かしてレコード304を割り当て、次いでそれらのレコード304にデータセット104を書き込むことによって)。第二の時点312では、三つの追加的なデータセット104を書き込む要求のシーケンスが受領されてもよく、頭部ポインタ308をインクリメントしてジャーナル302のレコード304にデータセット104を書き込むことによって、ジャーナル302に記憶されてもよい。さらに、第三の時点314において、記憶装置106は各データセット104についての検証子112を計算し、各検証子112をジャーナル302に書き込んでもよい(可能性としては、ジャーナル302および/または記憶セット102に記憶されている他のデータセット104を使って)。第四の時点316では、記憶装置106は、たとえばジャーナル392からコミットされるべきデータセット104のバッチ318を選択してそれらのデータセット104および対応する検証子112を記憶セット102に書き込むことによって、データセット104のバッチ318を記憶セット102にコミットしてもよい。次いで、記憶セット102にコミットされたデータセット104についてのレコード304がジャーナル302から除去されてもよい(たとえば、尾部ポインタ306をそれらのレコード302を過ぎるところまで進めることによって)。このようにして、本稿に提示される技法によれば、データセット104は記憶セット102にコミットされてもよい。
本稿に提示される技法のいくつかの例示的な使用の図3の描出は、それにより達成されうるいくつかの潜在的な利点を示している。第一の例として、データセットのバッチ化は、記憶セット102中の位置110の連続的なシーケンスに書き込まれうる二つ以上のデータセット104を融合しうる。これは、たとえ該シーケンスをなすデータセット104についての書き込み要求が記憶セット102の他の位置110に記憶されるべき他のデータセット104とインターリーブされていたとしても;そのようなデータセット104が厳密なシーケンシャル順に受領されなくても;および/またはデータセット104を書き込む要求の間に短い遅延があったとしても、できる。第二の例として、データセット104のバッチ化は、短い時間フレームにおいて受領される同じデータの上書きを減らすことによって、記憶装置106の効率を改善しうる。たとえば、特定のデータセット104を上書きする複数の要求がバッチにグループ化されてもよく、記憶セット102内の位置110へのデータセット104の単一の書き込みを通じて充足されてもよい。たとえば、図3の例示的なシナリオ300におけるバッチ318の選択は、尾部ポインタに近いがジャーナル302に記憶されているその後の書き込み202によって上書きされるデータセット104を省略してもよい。第三の例として、同じ検証子112によって表わされるデータセット104を書き込む別個の諸要求は、同じバッチにグループ化されれば、検証子112のいくつかの別個の更新ではなく、検証子112の単一の計算および書き込みにつながりうる。第四の例として、バッチ318を保守的に選択する(たとえばジャーナル302を積極的に空にするのではなく、その中のいくつかのレコード304を残す)ことによって、本技法は、将来の効率性利得のための機会を同定および達成しうる。たとえば、位置0x03C0に書き込まれるべきデータセット104はあたかも最近受領されたかのように、バッチ318のために選択されず、追加的なデータセット104を書き込む要求がすぐあとに続いてもよい。こうして、位置0x03C1にデータセット104を書き込むその後の要求が受領され、ジャーナル302に記憶されるとき、両方のデータセット104が将来のバッチ318のために選択されてもよい。それにより、両方のデータセット104が、二つの別個の書き込み220を発するのではなく、シーケンスをなして一緒にコミットされる。
図3の例示的なシナリオ300に示される本願で開示される技法の第二の潜在的な利点は、RAID書き込みホールの発生および帰結の低減である。データセット104を更新する要求をまず記憶装置106の不揮発性媒体上のジャーナルにコミットして、次いでデータセット104および検証子112を記憶セット102に移すことは、両者の間の非一貫性を回避しうる。たとえば、データセット104および/または検証子112がジャーナルに書き込まれつつある間に障害210が発生する場合、回復プロセスはジャーナルの書き込みが不完全であったことを検出でき、ジャーナルの不完全な部分を破棄しうる。この破棄は書き込み202の喪失につながりうるが、そのような書き込み202はまだ記憶セット102にコミットされておらず、そのような書き込み202を要求するプロセスに対して確証されていなかったので、安全に喪失されることができる。さらに、記憶セット102の一貫性は、RAID書き込みホールに関わる不完全な書き込みによって損なわれない。さらに、ジャーナルの内容が記憶セット102にコミットされつつある間に障害が起こる場合、記憶装置106は、ジャーナルに記憶されているデータセット104を記憶セット102に再コミットすることによって、障害210から回復しうる。このようにして、記憶セット102への書き込み202は、改善されたパフォーマンスおよび/またはRAID書き込みホールのような問題によって引き起こされる非一貫性の低減した発生をもって充足されうる。これらおよびその他の利点は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を通じて達成されうる。
〈C.例示的実施形態〉
図4は、少なくとも一つの記憶装置106によって提供される記憶セット102においてデータセット104を記憶する第一の例示的な方法400として描かれている、これらの技法の第一の例示的な実施形態の図解を示している。例示的な方法400は、たとえば装置のメモリ・コンポーネント(たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク)に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法400は、402において開始され、プロセッサ上で命令を実行する(404)ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置106上で、それぞれ検証子112と関連付けられたデータセット104を記憶するよう構成されたジャーナル302を生成する(406)よう構成されている。前記命令はまた、記憶セット102中の位置110にデータセット104を記憶する要求を受領すると、該データセット104をジャーナル302に記憶する(408)よう構成されている。前記命令はまた、記憶セット102にコミットされるべき、ジャーナル302に記憶された諸データセット104のバッチ318を選択する(410)よう構成されている。前記命令は、記憶セット102へのこのコミットを、バッチ318のそれぞれのデータセット104について(412)、検証子112を計算し(414);検証子112をジャーナル302に記憶し(416);データセット104およびデータセット104の検証子112を記憶セット102に記憶する(418)ことによって達成しうる。前記命令はまた、データセット104およびデータセット104の検証子112を記憶セット102に記憶した(418)のち、ジャーナル302から前記データセット104を除去するよう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を達成し、よって例示的な方法400は420において終了する。
図5は、少なくとも一つの記憶装置106によって提供される記憶セット102においてデータセット104を記憶する第二の例示的な方法500として描かれている、これらの技法の第二の例示的な実施形態の図解を示している。例示的な方法500は、たとえば装置のメモリ・コンポーネント(たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク)に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法500は、502において開始され、装置に命令を送る(504)ことに関わる。具体的には、前記命令は、記憶装置106上で、レコード304のシーケンス、頭部ポインタ308および尾部ポインタ306を有するジャーナル302を生成する(506)よう構成される。前記命令はまた、記憶セット102中の位置110に記憶されるべきデータセット104を受領する(508)と、ジャーナル302の頭部ポインタ308を新たなレコード304を過ぎるところまで進め(510)、新たなレコード304にデータセット104を記憶する(512)よう構成されている。前記命令はまた、記憶セット102へのコミットのために、ジャーナル302の尾部ポインタ306の近くの少なくとも一つの選択されたデータセット104を選択する(514)よう構成されている。それぞれの選択されたデータセット104について(516)、前記命令は、データセット104についての検証子112を計算し(518);選択されたデータセット104の検証子112をジャーナル302に記憶し(520);選択されたデータセット104およびデータセット104の検証子112を記憶セット102にコミットする(522)よう構成される。前記命令はまた、ジャーナル302の尾部ポインタ306を、前記少なくとも一つの選択されたデータセット104を含むレコード304を過ぎたところまで進める(524)よう構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット102へのデータセット104の記憶を達成し、よって例示的な方法500は526において終了する。
図6は、本稿に提示される技法を適用するよう構成されたプロセッサ実行可能命令602を有する例示的なコンピュータ可読媒体600として示される、これらの技法の第三の例示的な実施形態を提示している。そのようなコンピュータ可読媒体はたとえば、メモリ半導体(たとえば、静的ランダム・アクセス・メモリ(SRAM)、動的ランダム・アクセス・メモリ(DRAM)および/または同期動的ランダム・アクセス・メモリ(SDRAM)技術を利用した半導体)、ハードディスクドライブの円盤、フラッシュメモリ・デバイスまたは磁気もしくは光ディスク(たとえばCD-R、DVD-Rまたはフロッピー(登録商標)ディスク)のような有体なデバイスに関わるコンピュータ可読記憶媒体を含んでいてもよく、コンピュータのような装置610のプロセッサ612によって実行されたときに該装置610に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。そのようなコンピュータ可読媒体は、さまざまな物理現象を通じて伝搬させられうる信号(たとえば電磁信号、音波信号または光信号)のようなさまざまな型の通信媒体をも(コンピュータ可読記憶媒体とは異なる技術のクラスとして)含みうる。そのような伝搬は、さまざまな有線シナリオ(たとえばイーサネット〔登録商標〕または光ファイバーケーブルを介する)および/または無線シナリオ(たとえばWiFiのような無線ローカル・エリア・ネットワーク(WLAN)、ブルートゥースのようなパーソナル・エリア・ネットワーク(PAN)またはセルラーもしくは電波ネットワーク)においてでありうる。そのような媒体は、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。あるそのような実施形態では、プロセッサ実行可能命令602は、図4の第一の例示的な方法400または図5の第二の例示的な方法500のような少なくとも一つの記憶装置106によって提供される記憶セット(storage set)102にデータセット104を記憶する方法を実行するよう構成されていてもよい。本稿に提示される技法に基づいて動作するよう構成される、多くのそのようなコンピュータ可読媒体が当業者によって考案されうる。
〈D.変形〉
本稿で論じられる技法は、多くの側面における変形をもって考案されてもよい。いくつかの変形は、追加的な利点を提示し、および/またはこれらおよび他の技法の他の変形に関する不都合な点を軽減しうる。さらに、いくつかの変形は、組み合わせて実装されてもよく、いくつかの組み合わせは、相乗作用を通じて追加的な利点および/または軽減された不都合な点を特徴としうる。そうした変形は、さまざまな実施形態(たとえば図4の第一の例示的な方法400および図5の第二の例示的な方法500)に組み込まれてそのような実施形態に対して個別的および/または相乗的な利点を付与しうる。
〈D1.シナリオ〉
これらの技法の実施形態の間で変わりうる第一の側面は、そうした技法が利用されうるシナリオに関する。第一の変形として、これらの技法は、多くの型の記憶セット102およびデータセット104を管理するために使用されうる。それには、それぞれのアドレスに記憶されている値のセットをそれぞれ含む一つまたは複数のボリューム;それぞれファイルのセットを含むファイル・システム;それぞれレコードのセットを含むデータベース;それぞれメディア・オブジェクトのセットを含むメディア・ライブラリ;それぞれアプリケーションのセットを含むアプリケーション・セット;およびそれぞれボリュームおよび/または仮想マシンのメモリのセットを含むコンピューティング環境サーバーが含まれる。さらに、記憶セット102内でのデータセット104の識別は、種々のシナリオ間では粒度において異なりうる。たとえば、ボリュームを含む記憶セット102は、これらの技法を、ビット、バイト、さまざまな長さの語、さまざまな長さのデータ・ブロックまたはセクタを含むデータセット104をジャーナリングし、記憶セット102にコミットするために利用してもよい。
第二の変形として、これらの技法は、ハードディスクドライブ、半導体記憶デバイス、磁気もしくは光テープ記憶ドライブおよび磁気もしくは光ディスクを含むさまざまな型の揮発性および不揮発性記憶装置106上の記憶セット102およびデータセット104の記憶を管理するために使われてもよい。記憶セット102を記憶することに関わる記憶装置106の数も変わりうる。たとえば、これらの技法は、単一の記憶装置106上、小さな緊密に統合された記憶装置106のセット(たとえばRAIDアレイ)上または潜在的には大規模および/または潜在的には広範囲に分散していてもよい記憶装置106のゆるく統合されたセット(たとえば、世界の異なる領域に展開され、インターネットを通じて通信する記憶装置106のセット)上で記憶セット102の記憶を管理するために使われてもよい。ほんの一例として、これらの技法は、記憶装置106のさまざまな型のRAIDアレイにおいて実装される種々のRAIDレベルとともに使用するために適応されてもよい。さらに、記憶セット102を記憶する記憶装置106は、混合型であってもよく、さまざまな階層的な構成に従って編成されていてもよい(たとえば、記憶セット102はまず比較的高性能の一次記憶装置106上に記憶されてもよく、該一次記憶装置が比較的低性能のオフサイトのアーカイブ記憶装置106にバックアップされる)。本技法は、コスト、可用性、信頼性、および感度およびパフォーマンス要求および記憶セット102に適用されるセキュリティ施策および記憶装置106の機能を含む、記憶セット102および記憶装置106のさまざまな属性に鑑みて実装されてもよく、それに合わせて調整されていてもよい。
この第一の側面の第三の変形は、特に記憶セット102が複数の記憶装置106にまたがる場合の、ジャーナル(journal)302の記憶装置106との関係に関する。第一のそのような例として、ジャーナル302は、一つまたは複数の別個の記憶装置106にまたがって割り当てられた記憶セット102について、ある記憶装置106のみに記憶されてもよい。あるいはまた、ジャーナル302は、記憶セット102の一部または全部と同じ記憶装置106に記憶されてもよい。そのような第二の例として、複数のジャーナル302が諸記憶装置106の間で生成されてもよい。たとえば、いくつかの記憶装置106にまたがる記憶セット102について、各記憶装置106上でジャーナル302が、その記憶装置106上に記憶される記憶セット102の部分内に記憶される諸データセット104のために、生成されてもよい。あるいはまた、別個の諸記憶装置106上の諸ジャーナル302は記憶セット102内の特定の諸位置に関連付けられなくてもよい。たとえば、記憶セット102に書き込まれるべきデータセット104は、記憶セット102にコミットされる前は、どのジャーナルに記憶されていてもよい。この変形は、脱中央集中型のジャーナリング・プロセスを提供しうる。たとえば、データセット104は、最も短いI/O待ち行列をもつ記憶装置106のジャーナル302に書き込まれてもよく、あるいはまた、記憶装置106の地理的に分散されたセットの間で供給される記憶セット102については、書き込みプロセスに対して最も高いアクセス可能性を呈する記憶装置106(たとえば、当該プロセスに地理的に最も近いおよび/または書き込みプロセスと通信する際に最も低いレイテンシーまたは最も高い帯域幅を示す記憶装置106)に書き込まれてもよい。第三のそのような例として、ジャーナル302に対してさまざまなRAID記憶方式によって提供されるのと同様の障害耐性機能を与えるために、ジャーナル302は二つ以上のコピーとして同じ記憶装置106上に冗長に記憶されてもよく、二つ以上の記憶装置106上にミラー・コピーとして記憶されてもよく、あるいは二つ以上の記憶装置106を横断して(たとえばストライピングにより)分散されてもよい。
この第一の側面の第四の変形は、それぞれのデータセット104の完全性を検証するために使われる検証子112の型に関する。いくつかのシナリオでは、データセット104のXORとして計算されるパリティ・ビットまたはデータセット104の和もしくはハッシュコードのような比較的単純な検証子112が使用されもよい。単純な検証子112は、比較的低価値の記憶セット102、比較的低パワーの記憶装置106(たとえば比較的遅いハードウェア、限られた容量のメモリおよび限られたバッテリー寿命をもつポータブル装置上の記憶装置)および/またはパフォーマンスがきわめて重要でありより高速に計算可能な検証子112が有利でありうるような記憶セット102に好適でありうる。他のシナリオでは、追加的なデータ安全性特徴を提供しうる、比較的複雑な検証子112が使用されてもよい。たとえば、データセット104が正確であるかどうかを判別するのみならずデータセット104および/または検証子112の一つへの変化によって非一貫性が引き起こされたかどうかをも判別するハミング符号のような誤り訂正型の検証子112が使用されてもよい。さらに、記憶セット102におけるデータセット104の異なるセットまたは型のために、異なる型の検証子112が利用されてもよい(たとえば、より貴重なデータについてはより複雑だが堅牢な検証子112が利用されてもよい)。当業者は、これらおよびその他の型の変形および詳細をもつ多くのシナリオにおいて、本稿に提示される技法を実装しうる。
〈D2.要素〉
実施形態の間で変わりうる第二の側面は、そうした技法の要素の変形に関わる。第一の変形としては、ジャーナル302を生成する(406)際に多くの技法が使用されうる。たとえば、ジャーナル302はアレイ、リンクされたリスト、テーブル、データベース、スタック、待ち行列、ヒープまたは二分木のような多くの型のデータ構造を含みうる。種々の実装はさまざまな利点および不都合な点を呈しうる(たとえば、パフォーマンス、更新の容易さ、スペース効率、コンピューティング経済および記憶装置106および/または記憶セット102の特性との適合性)。記憶セット102を記憶する異なる記憶装置106上で、および/または異なる型のデータセット104について、異なる型のジャーナル302が実装されてもよい。たとえば、頭部ポインタ308および尾部ポインタ306を含むアレイとして構成されたジャーナル302は、ジャーナル302の任意のレコード304への迅速なインデックス(たとえばO(1)のアクセス時間)、頭部ポインタ308および尾部ポインタ306の操作を通じたレコード304の効率的な割り当ておよび再利用ならびにジャーナル302におけるデータセット104の効率的な記憶(たとえば単に、ジャーナル302をなすレコード304のシーケンスに新たなデータセット104をアペンドすることによる)という利点を提供しうる。
この第二の側面の第二の変形として、記憶セット102にコミットされるべきバッチ318の選択410は、多くの仕方で実行されうる。第一の例として、選択410は、多くの型のイベントによって開始されてもよい。たとえば、装置610、記憶装置106またはこれらの技法を実装する他の型の装置が、多くの型のコミット・イベントの検出に際してバッチ318の選択410を開始してもよい。(例示的なコミット・イベント・セットをなす)そのようなコミット・イベントのいくつかの例は、ジャーナル302の容量に関わるジャーナル容量イベント(たとえばジャーナル302がいっぱいになる);ジャーナル302に記憶されているデータセット104の継続時間に関わる継続時間イベント(たとえば、1分前より前にジャーナル302に記憶されたデータセット104のような、ある年齢より古いデータセット104);ジャーナル302内の少なくとも一つのデータセット104を記憶セット102にコミットする要求に関わるコミット要求イベント(たとえば、データセット104の書き込み202を要求したプロセスが記憶セット102への該データセット104のコミットを要求しうる);および記憶セット102の少なくとも一つの記憶装置106の作業負荷に関わる記憶装置作業負荷イベント(たとえば、記憶装置106は、入出力作業のアイドルな瞬間を検出してもよく、該アイドルな瞬間を使っていくつかのデータセット104をジャーナル302からフラッシュしてもよい)を含みうる。他の多くの型のイベントが、データセット104を記憶セット102にコミットするプロセスの開始を促しうる。
この第二の側面のこの第二の変形の第二の例として、記憶セット102にコミットされるべきバッチ318の選択は、多くの仕方で実行されうる。たとえば、記憶セット102への第一のデータセット104のコミットを、その後の書き込み202が該第一のデータセット104の上書きを指定するおよび/またはシーケンシャルに第一のデータセット104に後続しよって記憶セット102に一緒に書き込みされうる追加的なデータセット104を提供する(図3の例示的なシナリオ300において第四の時点316において描かれているように)場合に備えて、書き込み要求の受領後、短時間遅らせることが有利であることがある。しかしながら、シーケンシャルに後続する第二のデータセット104をすぐ受領する低下した確率よりもデータセット104をジャーナル302のレコード304として記憶することに関わるコストおよび複雑さのほうが重みがあるには、データセット104のコミットを長期間遅らせることが不都合なことがある。さらに、記憶セット102へのコミットの効率を改善するためにバッチ318をなす諸データセット104を選択することが有利であることがある。第一のそのような例として、ジャーナル302に記憶された第一のデータセット104が記憶セット102内の第一の位置110に記憶されるべきバッチ318に含めるために選択される場合、ある実施形態は、やはりジャーナル302内に記憶されていて、記憶セット102内の第一の位置110に近い第二の位置110に記憶されるべき第二のデータセット104(たとえば、記憶装置106の物理的な媒体上で連続しているまたは少なくとも物理的に近くにあり、同じバッチ318において一緒に書き込まれるのが効率的でありうるデータセット104)も前記バッチ318に含めるために選択してもよい。第二のそのような例として、これらの技法のある実施形態は、バッチ318から、ジャーナル302に記憶されており、記憶セット102内のある位置110に記憶されるべき第一のデータセット104を、該実施形態が、ジャーナル302が該第一のデータセット104より新しく記憶セット102における同じ位置110に記憶されるべき第二のデータセット104(すなわちその後の上書き)を含んでいることを判別する場合には、省いてもよい。データセット104をバッチ318に含めるのではなく、この実施形態は、単に、ジャーナル302から古いほうのデータセット104を除去しうる。
この第二の側面の第三の変形として、検証子112の計算が多くの仕方で行なわれうる。上記第一の側面の記載された変形として、多くの型の検証子112がそのようなシナリオにおいて利用されうるが、さらに、検証子112は利用可能なデータからさまざまな仕方で計算されうる。第一の例として、検証子112は、それにより表わされる現在データセット104に基づいて完全に再計算されてもよい。しかしながら、第二の例としては、検証子112がいくつかのデータセット104を表わし、そのうちの部分集合のデータセット104が変化する場合には、検証子112から古くなったデータセット104を除去し、検証子112に更新されたデータセット104を含めることが可能であることがあり、しばしば、現在データセット104から検証子112を再計算するより効率的であることがある。再計算は、記憶セット102からデータセット104の残りを取得することを含みうる。
図7は、検証子112を計算する種々の仕方を表わす例示的なシナリオ700の例示を提示している。第一の時点702において、データセット104および対応する検証子112のためのスペースが記憶セット102において割り当てられている。しかしながら、データセット104のどの部分も検証子112もまだ記憶セット102に書き込まれてはいない。第二の時点704では、データセット104の一部が受領されており、データセット104を記憶セット102にコミットする要求が開始されている。検証子112を計算するために、これらの技法のある実施形態は、データセット104をなす残りのデータがジャーナル302にも記憶セット102にも存在しないことを識別しうる。よって、本実施形態は、データセット104の提供された部分を使って、検証子112を計算してもよく、データセット104の残りについてデフォルト値(たとえばゼロ)を推定および使用してもよい。こうして、第二の時点704では、検証子112は、データセット104の存在する部分のみを使って計算される。第三の時点706では、検証子112は、データセット104についての現在データを使って計算される。たとえば、データセット104をフルに指定する新しい更新されたデータが提供されてもよく(たとえば、フル・データセット104をなす一連の書き込み202がジャーナル302内に存在していてもよく、あるいはジャーナル302に存在しないデータセット104の部分が記憶セット102から取得されてもよい)、検証子112は、データセット104をなす現在データを使って(たとえば現在データ全部のXORとして)完全に再計算されてもよい。しかしながら、第四の時点708において、検証子112は、データセット104への変化に鑑みて、もとの検証子112ならびにデータセット104のもとのバージョンおよび新たなバージョンのみを使って再計算される。たとえば、新たな検証子112は、もとの検証子112をデータセット104のもとのバージョンとXORし、それによりもとの検証子112からデータセット104のその部分の加算を取り消し、次いでこの値をデータセット104の新たなバージョンとXORすることによって計算されてもよい。この再計算は、ジャーナル302に完全には記憶されていないデータセット104についてより効率的でありうる。たとえば、この再計算は、ジャーナル302に記憶されていないデータセット104の部分を記憶セット102から読むことを回避しうる。さらに、こうした再計算技法の間の選択は、データセット104のこの部分を記憶セット102から取り出すことの比較的なコストに基づいてなされてもよい(たとえば、大きなデータセット104を表わす検証子112については、データセット104の小さな部分を除去してその更新を含め、データセット104の大きな部分の更新についての現在データから検証112を再計算することがより効率的でありうる)。
この第二の側面の第四の変形として、記憶セット102(たとえば電力障害またはソフトウェア・クラッシュ)および/または一つまたは複数の記憶装置106(たとえば記憶装置106との通信の中断、記憶装置106のハードウェア、ファームウェアもしくはドライバの障害または記憶装置106の除去または記憶装置106への損傷およびそれに続く通信の再確立または記憶装置107の置換)の障害210の場合、これらの技法のある実施形態は、障害210から回復するためにジャーナル302を多くの仕方で利用しうる。この第二の側面のこの第四の変形の第一の例として、これらの技法のある実施形態は、単に、ジャーナル302を概観して、ジャーナル302中の不完全なまたは一貫しないレコード304(たとえば障害210の時点において不完全に書き込まれていたレコード)を破棄し、次いでジャーナル302から記憶セット102へのデータセット104のコミットを再開してもよい。このプロセスにおいて、記憶セット102に不完全に書き込まれていたかもしれないデータセット104があったとしても、記憶セット102への該データセット104の不完全な書き込みを検出することさえなしに、復元プロセスの間に正しく再書き込みされうる。
この第二の側面のこの第四の変形の第二の例として、障害210からの復元は、段階的な仕方で実行されてもよい。たとえば、記憶セット102へのアクセスが有効かつ一貫したデータを与えることをも保証しながら、できるだけ迅速に障害210から回復することが有利であることがある(たとえば記憶セット102を利用するサービスの休止時間を短縮するために)。よって、復元の第一段階の間は、これらの技法のある実施形態は、記憶セット102へのアクセスがジャーナル302から充足されるべきかまたは記憶セット102から充足されるべきかを決定するために、まずジャーナル302の内容(たとえば、データセット104がジャーナル302中に記憶されている記憶セット102内の位置110)を読んでもよい。次いで、復元は、障害210によって引き起こされた、不完全におよび/または非一貫的に書き込まれたデータセット104を正すために、記憶セット102へのジャーナル302からのデータセット104のコミットを再開することに関わる第二の段階に進んでもよい。こうして、本実施形態はブロックしうる。
復元プロセスの追加的な例示的な変形は、たとえば、記憶セット102の一部または全部をスキャンしてその完全性を検証すること;障害に関わった記憶装置106にのみ復元プロセスを適用すること(たとえば、一時的に除去された記憶装置106にジャーナル302からデータセット104を再書き込みするだけ);および異なる記憶装置106および/または異なるデータセット104について異なる復元プロセスを適用すること(たとえば、第一の記憶装置106に記憶されている第一のジャーナル302に前記復元プロセスを適用し、その復元を完了したあとで、第二の記憶装置106に記憶されている第二のジャーナル302に前記復元プロセスを適用すること)に関わっていてもよい。当業者は、種々のシナリオにおける適用のために、本稿に提示される技法の要素を変形する多くのそのような仕方を考案しうる。
〈D3.ジャーナルの揮発性メモリ表現〉
これらの技法の実施形態の間で変わりうる第三の側面は、そのような技法を実装する装置610の揮発性メモリにおける、ジャーナル302の揮発性メモリ表現の生成に関わる。たとえば、記憶装置106の不揮発性媒体上で生成されたジャーナル302に加えて、これらの技法のある実施形態は、やはりジャーナル302に記憶されているデータセット104を記憶する、ジャーナル302と同期を保たれる揮発性メモリ表現を生成してもよい。ジャーナル302への揮発性メモリ表現の生成および維持は複雑さを追加し、追加的な計算資源を消費することがありうるものの、揮発性メモリ表現はこれらの技法の諸実施形態において、多くの潜在的な用途および利点を提供する。第一の例示的な利点として、揮発性メモリ表現は、ジャーナル302への書き込みバッファのはたらきをしうる。たとえば、個々のデータセット104をジャーナル302に書き込む代わりに、ある実施形態は、最初、データセット104を揮発性メモリ表現に記憶してもよく、ジャーナル302にデータセット104のブロックをコミットしてもよい。それにより、ジャーナル302への書き込み202のバッチ化によるジャーナル302へのデータセット104のシーケンシャル書き込み202の効率性利得が拡張される。第二の例示的な利点として、揮発性メモリ表現は最近書き込まれたデータセット104の読み出しキャッシュのはたらきをしうる。たとえば、比較的遅い記憶装置106上に記憶されているジャーナル302から最近書き込まれたデータセット104を読む代わりに、ある実施形態は、揮発性メモリ表現から該データセット104を提供してもよい。よって、これらの技法のある実施形態は、ジャーナル302および揮発性メモリ表現におけるその可用性に従って、要求されたデータセット104を取得しようと努力しうる。たとえば、上記実施形態は、データセット104が揮発性メモリ内のジャーナル302の揮発性メモリ表現に記憶されていることを判別すると、該揮発性メモリ表現に記憶されているデータセット104を取得し、提示し;データセット104が記憶装置106上のジャーナル302に記憶されていることを判別すると、ジャーナル302に記憶されているデータセット104を取得し、提示し;それ以外の場合には、記憶装置106上の記憶セット102に記憶されているデータセット104を取得し、提示するのでもよい。データセット104はこれらの資源の二つ以上にまたがってもよい。たとえば、要求されたデータセット104の第一の部分はジャーナル302に存在し、ジャーナル302から取得されてもよく、一方、要求されたデータセット104の第二の部分は揮発性メモリ表現に存在し、該揮発性メモリ表現から取得されてもよい(この第二の部分がアクセス可能性〔アクセシビリティ〕がより低いジャーナル302および/または記憶セット104に存在するか否かに関わりなく)。第三の例示的な利点として、バッチ318の選択のような、ジャーナル302に記憶されているデータセット104に関する決定が、揮発性メモリ表現の内容を評価することによってより効率的に実行されうる。これはしばしば、ジャーナル302の内容を評価するよりも迅速なアクセスを提供する。装置610の高速だが揮発性のメモリにおいてデータセット104にアクセスできることのこれらの利点は、不揮発性記憶装置106上のジャーナル302における記憶を通じたデータセット104の耐久性と並行して達成されうる。
この第三の側面の第一の変形として、揮発性メモリ表現は、ジャーナル302と同様に構成されてもよく、あるいは異なる仕方で生成されてもよい。たとえば、ハードディスクドライブのような記憶装置106上でのシーケンシャルな書き込みを増進するようジャーナル302を構成することが有利であることがあるが、この利点は、比較的等価なシーケンシャル・アクセスおよびランダム・アクセスを提供するメモリ回路においては減じられることがある。よって、揮発性メモリ表現は、ハッシュテーブルまたはアデルソン・ヴェルスキー・ランディス木(Adelson-Velskii-Landis tree)のようなB木のように、データセット104が記憶されるべき記憶セット102内の諸位置110に従ってインデックス付けされるなど、別の仕方で生成されてもよい。
この第三の側面の第二の変形として、揮発性メモリ表現は、ジャーナル302に記憶されている同じデータセット104を記憶してもよいし、あるいは異なる記憶セット104を記憶してもよい。第一のそのような例として、揮発性メモリ表現は、書き込みバッファの仕方で、ジャーナル302に一緒に書き込まれるべき新しい諸データセット104を一時的に蓄積してもよい。第二のそのような例として、揮発性メモリ表現の余剰容量の揮発性メモリ読み出しキャッシュとしての使用を押し進めて、揮発性メモリ表現は、ジャーナル302から除去されるデータセット104を保持してもよい。たとえば、データセット104が記憶セット102にコミットされ、ジャーナル302から除去され(そしておそらくは上書きさえされ)たのちに、該最近書き込まれたデータセット104をプロセスが要求しうる比較的高い確率のため、揮発性メモリ表現は、データセット104をメモリ内に保持していてもよい。(ジャーナル302および/または記憶セット102へのデータセット104のコミット後の)揮発性メモリ表現におけるデータセット104のこの保持は、揮発性メモリ表現に容量が残っている限り続けられてもよく、揮発性メモリ表現は、新たに受領された、まだコミットされていないデータセット104のための容量を提供するために、以前にコミットされたデータセット104を放逐(evict)してもよい。このシナリオにおいては、揮発性メモリ表現にとって、ジャーナル302および/または記憶セット102にコミットされたデータセットを、コミットされていないデータセット104から区別することが有利でありうる。たとえば、ジャーナル302にデータセット104を記憶する際、ある実施形態は、該データセット104をジャーナル302の揮発性メモリ表現に記憶して、該データセット104を除去不可能とマークしてもよい。ジャーナル302に記憶されたデータセット104を記憶セット102にコミットすると、この実施形態は、揮発性メモリ表現に記憶されているデータセット104を除去可能とマークしてもよい。その後、揮発性メモリ表現における容量を解放するために、本実施形態は、ジャーナル302の揮発性メモリ表現から、除去可能とマークされているデータセット104だけを、安全に除去しうる。この変形は、揮発性メモリ表現の予備の容量を読み出しキャッシュとして有利に利用しながら、ジャーナル302および揮発性メモリ表現の同期を維持する。
逆に、この第三の側面の第三の変形として、コミットされたまたはコミットされていないデータセット104を記憶することにおいて、揮発性メモリ表現の容量を使い尽くさずに、はいってくるデータセット104を記憶するために、揮発性メモリ内の揮発性メモリ表現内の十分な容量をリザーブしておくことが有利であることがある。特に、ジャーナル302が他のデータセット104をジャーナル302にコミットすることに関わっている間、記憶セット102に記憶されるべきデータセット104を記憶するよう構成されたバッファのために十分な容量がリザーブされてもよい。この変形はさらに、データセット104をジャーナル302から記憶セット102にコミットするタスクを記憶装置106に中断させることなく、揮発性メモリ表現を、はいってくるデータセット104を受け入れるための書き込みバッファとして利用する。
この第三の側面の第四の変形として、障害210の回復は、ジャーナル302の揮発性メモリ表現802の再構築に関わっていてもよい。たとえば、回復プロセスは、揮発性メモリ表現302を再生成するためにジャーナル302を読むことによって始まってもよい。このようにして再構築を開始することは、たとえば、揮発性メモリ表現802の読み出しキャッシュおよび/または書き込みバッファ機能を再確立し、それによりジャーナル302を記憶する記憶装置106の読み出し/書き込み作業負荷を低減し、障害210によって引き起こされた不完全なまたは一貫しない書き込み202を上書きするためにジャーナル302中のデータセット104を記憶セット102にコミットするタスクを容易にすることによって、有利でありうる。
図8は、不揮発性記憶装置106上で生成されたジャーナルが、装置610の揮発性メモリ内のジャーナル302の揮発性メモリ表現802と対にされている例示的なシナリオ800の図解を示している。この例示的なシナリオ800では、揮発性メモリ表現802は、ジャーナル302に記憶されているデータセット104の位置110の十六進アドレスに基づいて編成されたB木として記憶されている。第一の時点804において、ジャーナル302および揮発性メモリ表現802はデータセット104の特定のセット〔集合〕を記憶していてもよい。第二の時点806において、ジャーナル302に書き込まれるべき第二のデータセット104が受領されるとき、第二のデータセット104は揮発性メモリ表現802に記憶されてもよく、次いで(直接的にまたは書き込みバッファを通じて)ジャーナル302に書き込まれてもよい。さらに、第三の時点806では、ジャーナル302に記憶されている一つまたは複数のデータセット104が記憶装置106上に記憶されている記憶セット102にコミットされるとき、データセット104はジャーナル302から除去されてもよい(たとえば尾部ポインタ306をコミットされたデータセット104を含むレコード302を過ぎたところまで進めることによって)。だが、揮発性メモリ表現802の予備の容量が利用可能である場合には、これらのデータセット104は揮発性メモリ表現802内に保持されてもよく、ただし除去可能とマークされてもよい(図8の例示的なシナリオ800において破線の枠によって示したように)。揮発性メモリ表現802はこのように、新たに受領されるデータセット104(たとえば第四の時点810における第四のデータセット104の受領)のための容量を提供してもよい。したがって、読み出し要求は、揮発性メモリ表現802、ジャーナル302および記憶セット102におけるデータセット104の可用性に従って充足されてもよい。たとえば、第五の時点812において、三つのデータセット104について三つの読み出し要求が受領されてもよい。そのうち第一のデータセット104は揮発性メモリ表現802から提供されてもよい(ジャーナル302からの放逐にもかかわらず揮発性メモリ表現802に存在);第二のデータセット104はジャーナル302から提供されてもよい(ジャーナル302にコミットされたのち揮発性メモリ表現802からは除去されていた);第三のデータセット104(揮発性メモリ表現802およびジャーナル302から放逐されていた)は記憶セット102から取得されて提供されてもよい。このように、図8の例示的なシナリオ800において示されるこうした技法の実施形態は、ジャーナル302の揮発性メモリ表現802の実装を通じていくつかの利点を達成する。当業者は、本稿に提示される技法に基づき、ジャーナル302のそのような揮発性メモリ表現802のそのような使用を考案しうる。
〈D2.書き込みバッファとの相互運用〉
これらの技法の実施形態の間で変わりうる第四の側面は、記憶セット102を記憶する記憶装置106に書き込みバッファを含めてこれを利用することに関する。多くの場合、記憶装置106は有利には、たとえばフラッシュ要求が開始されるまでデータセット104の書き込み202を揮発性メモリにおいてバッチ化して、データセット104の全部を記憶装置106上に記憶されている記憶セット102にコミットすることによって、パフォーマンスを改善するために、書き込みバッファを利用してもよい。しかしながら、記憶装置106上の書き込みバッファの動作は、本稿で提示される技法のパフォーマンスを低下させることがあり、実のところいくつかの問題を引き起こすことがある。たとえば、ジャーナル302にデータセット104を記憶する要求が揮発性書き込みバッファにおいて遅延される場合、障害210が発生すれば、該データセット104が失われることがありうる。特に、書き込みバッファはしばしば透明な仕方で実装され、(フラッシュ動作が肯定的に要求され、完了したと検証されるのでない限り)オペレーティング・システムまたは諸プロセスはデータセット104が実際にジャーナル302にコミットされたかどうかを、またさらには記憶装置104のために書き込みバッファが存在するか否かさえも判定することが難しいことがある。よって、プロセスがデータセット104をジャーナル302に書き込むことを要求するとき、たとえその書き込みがジャーナル302の不揮発性記憶ではなく揮発性書き込みバッファに記憶されるとしても、記憶装置106はすぐにそのプロセスに対して、要求が充足されたことを示すことがある。したがって、その適用は、あたかもデータセット104がコミットされたかのように、正しくない動作をすることがあり、記憶装置106がデータセット104を書き込みバッファからフラッシュする前に障害210が発生する場合、非一貫性および予期されないデータ損失が生じることがある。同様に、ジャーナル302と記憶セット102との間での書き込みバッファの動作は、データセット104が持続的に記憶されたかのように、ジャーナル302に正しくない動作をさせることがある。たとえば、ジャーナルは、まだ記憶セット102にコミットされていないデータセット104を除去し、それにより、書き込みバッファがフラッシュされるまでに障害210があった場合には、不完全で一貫しないデータセット104を生じることがある。さらに、書き込みバッファが提案しうる利点(たとえば、バッチ化された書き込み202、逐次の諸書き込み202の融合および上書きの削減)はすでに、本稿に提示される技法の他の構成要素によってすでに提供される。よって、書き込みバッファの存在および動作は追加される複雑さ、増加する費用、潜在的なパフォーマンス劣化および予期されない結果を引き起こすが、それでいて本稿に提示される技法によってすでに達成されていない利点はほとんどまたは全く提供しないことが理解されうる。
これらの潜在的な不利益に鑑み、本技法のある実施形態は、書き込みバッファの存在に鑑みて調整されてもよい。この第四の側面の第一の変形として、本技法のある実施形態は、さまざまな仕方で書き込みバッファの使用および効果を回避してもよい。この第一の変形の第一の例として、データセット104および検証子112をジャーナル302に書き込むとき、たとえばジャーナル302への書き込みをライトスルー要求として発することによって、あるいは単に記憶装置106上の書き込みバッファを無効にすることによって、書き込みフィルタをバイパスする。この第一の変形の第二の例として、本実施形態は、ジャーナル302および/または記憶装置106に記憶されている記憶セット102への各書き込み202後にフラッシュ要求を開始することによって、書き込みバッファの効果を打ち消してもよい。フラッシュ要求を頻繁に発することは記憶装置106のパフォーマンスを低下させうるが、パフォーマンスの損失はさまざまな仕方で軽減されうる。たとえば、記憶セット102および/またはジャーナル302がそれぞれ書き込みバッファを有していてもいなくてもよい記憶装置106のセット上に分散されている場合、本技法のある実施形態は、最近書き込まれたデータセット104を記憶する記憶装置106のみにフラッシュ要求を発するよう構成されていてもよい。
この第四の側面の第二の変形として、本技法のある実施形態は、書き込みバッファと相互運用されてもよく、書き込みバッファの動作を、ジャーナル302および/またはジャーナル302のメモリ内表現802の動作と協調させてもよい。この第二の変形の第一の例として、ジャーナル302を記憶している記憶装置106がフラッシュされるとき、ジャーナル302にフラッシュされたデータセット104(ジャーナル302に対して書き込み要求が発されたが書き込みバッファに残っていることがありうるデータセット104ではなく)を表わす、ジャーナル302のフラッシュ点(flush point)が同定されてもよい。たとえば、ジャーナル302の揮発性メモリ表現802を備えるある実施形態では、揮発性メモリ表現802に記憶されているデータセット104は初期には除去不可能とマークされていてもよく、ジャーナル302のフラッシュ点がデータセット104を過ぎたところに動かされるまでそのようにマークされたままであってもよい。そのようにフラッシュ点が動かされた時点において、揮発性メモリ表現802はデータセット104を除去可能とマークしてもよい。
図9は、ジャーナル302を記憶している記憶装置106の書き込みバッファ902と相互運用される揮発性メモリ表現802の適応を備える例示的なシナリオ900の図解を示している。この例示的なシナリオ900では、記憶セット102に書き込まれるべきデータセット104はまず揮発性メモリ表現802に記憶され、次いで記憶セット102にコミットされる前にジャーナル302に書き込まれる。しかしながら、書き込みバッファ902がジャーナル302を記憶する記憶装置106上に存在することがあり、非一貫性および問題を引き起こすことがある。たとえば、ジャーナル302に書き込まれたと想定されるデータセット104がそうではなく書き込みバッファ902の揮発性メモリに記憶されており、障害210によってデータセット104がジャーナル302に書き込まれることなく失われる場合である。よって、揮発性メモリ表現902はそれぞれのデータセット104の状態を記録してもよい。たとえば、第一の時点904において、データセット104のセット〔集合〕をジャーナル302に移す要求を開始すると、揮発性メモリ表現802はデータセット104の状態を、記憶装置106に書き込まれている過程にあるとして記録してもよい(すなわち、記憶装置106にデータセット104を書き込む要求が開始されたが記憶装置106はまだ書き込み要求が受領されたことを示していないことを示す)。第二の時点906において、記憶装置106はデータセット104が受領されたと応答する。しかしながら、揮発性メモリ表現はデータセット104がジャーナル302にコミットされたかどうか、あるいはデータセット104が書き込みバッファ902に存在するかどうかを判定できないことがありうる。よって、第二の時点906では、揮発性メモリ表現902は、データセット104を、記憶装置106によってバッファリングされたものとしてマークする。その間、記憶装置104がまだフルに受領したとアクノレッジしていない他のデータセット104は、記憶装置106に書き込まれる過程にあるとマークされ続けてもよい。第三の時点908において、揮発性メモリ表現802は、書き込みバッファ902をフラッシュする要求を発してもよく、書き込みバッファ902は、ジャーナル302を含む不揮発性記憶媒体にフルに受領されたデータセット104をコミットすることを開始してもよい。記憶装置106がフラッシュ要求が充足されたことを示す第四の時点910では、揮発性メモリ表現は、バッファリングされたと以前にマークされたデータセット104のすべて(すなわち、記憶装置106が前記フラッシュ要求前にフルに受領されたとアクノレッジしたデータセット104のすべて)を、フルにジャーナリングされた(journaled)と、また任意的には除去可能とマークしてもよい。第五の時点912では、記憶装置106はその後、追加的なデータセット104がフルに受領されたことを示してもよく、揮発性メモリ表現802はこれらのデータセット104を、バッファリングされ、第二のフラッシュ要求を通じたジャーナル302へのコミットの準備ができているとマークしてもよい。このようにして、記憶装置106の書き込みバッファ902に関して、揮発性メモリ表現802はデータセット104の状態を追跡する。
この第四の側面の第三の変形として、書き込みバッファ902が介在することがあり、データセット104のジャーナル302から記憶セット106へのコミットに干渉することがある。同様に、揮発性メモリ表現802および/またはジャーナル302に記憶されているデータセット104の状態が、該データセット104がジャーナル302から記憶セット102にフラッシュされたかどうかを示してもよい。たとえば、本技法のある実施形態は、書き込みバッファ902から記憶セット12へのデータセット104のコミットを検出すると(たとえば、フラッシュ要求のアクノレッジ)、ジャーナル302および/または揮発性メモリ表現902内のデータセット104に、コミット済みとしてマークしてもよく、ジャーナル302および揮発性メモリ表現902から、記憶セット104にコミット済みであるとマークされているデータセット104のみを除去してもよい。
図10は、記憶セット102を記憶する記憶装置106の書き込みバッファ902と相互運用されるためのジャーナル302の調整を表わす例示的なシナリオ1000を示している。この例示的なシナリオ1000では、ジャーナル302は、三つの記憶装置106を横断して分散されている記憶セット102にコミットされるべきデータセット104を記憶している。各記憶装置は書き込みバッファ902を有する。データセット104が、記憶セット102を記憶している記憶装置106の物理的な媒体にフルにコミットされることを保証するために、ジャーナル302は、ジャーナル302が記憶セット102に書き込まれるよう要求したデータセット104の状態を記録してもよい。たとえば、第一の時点1002において、コミットされるべきデータセット104のバッチ318を同定すると、ジャーナル302は、各データセット104についての書き込み要求を、該データセット104を記憶する記憶装置106に送ってもよい。しかしながら、記憶装置106がデータセット104の受領をアクノレッジするとき、ジャーナル302は、データセット104が記憶セット102にコミットされたと想定することはできないが、各装置106の揮発性書き込みバッファ902に記憶されていることはありえ、よってジャーナル302内の各データセット104を、バッファリングされたものとしてマークしてもよい。第二の時点1004では、ジャーナル302は記憶装置106に(特に、バッファリングされたデータセット106を記憶している記憶装置にのみ)フラッシュ要求を発してもよい(たとえば、第三の記憶装置106は最近コミットされたデータセット104を一つも記憶しておらず、フラッシュ要求を発されない)。記憶装置106がフラッシュ要求が充足されたことを示す第三の時点1004では、ジャーナル302はデータセット104を、コミット済みとしてマークしてもよい。ジャーナル302はまた、頭部ポインタ308と尾部ポインタ306との間のフラッシュ点1008を、フラッシュ点と尾部ポインタ306の間のすべてのデータセット104が記憶セット102にコミット済みとなるよう、同定してもよい。次いで第四の時点1010では、ジャーナル302は、尾部ポインタ308をフラッシュ点1008に動かすことによってデータセット104を放逐してもよい。途中にあるどのデータセット104も、記憶セット102にフルにコミットされているからである。このようにして、ジャーナル302は記憶セット102を記憶している諸記憶装置106の諸書き込みバッファ902の動作を考慮するよう適応されてもよい。当業者は、本稿に提示される技法を実装しながら、書き込みバッファ902の存在および動作を考慮する多くの仕方を考案しうる。
〈E.コンピューティング環境〉
図11は、本稿に提示される技法が実装されうるコンピューティング装置1102内の例示的なコンピューティング環境の図解を示している。例示的なコンピューティング装置は、これに限られないが、パーソナル・コンピュータ、サーバー・コンピュータ、ハンドヘルドもしくはラップトップ装置、モバイル装置(携帯電話、携帯情報端末(PDA)、メディア・プレーヤーなど)、マルチプロセッサ・システム、消費者電子装置、ミニコンピュータ、メインフレーム・コンピュータおよび上記のシステムもしくは装置のいずれかを含む分散式のコンピューティング環境を含む。
図11は、本稿に提示される一つまたは複数の実施形態を実装するよう構成されているコンピューティング装置1102を有するシステム1100の例を示している。ある構成では、コンピューティング装置1102は少なくとも一つのプロセッサ1106および少なくとも一つのメモリ・コンポーネント1108を含む。コンピューティング装置の厳密な構成および型に依存して、メモリ・コンポーネント1108は揮発性(たとえばRAM)、不揮発性(たとえばROM、フラッシュメモリなど)または中間的もしくはハイブリッド型のメモリ・コンポーネントでありうる。この構成は、図11では破線1104によって示されている。
いくつかの実施形態では、装置1102は追加的な特徴/機能を含んでいてもよい。たとえば、装置1102は、これに限られないがハードディスクドライブ、半導体記憶デバイスおよび/または他のリムーバブルもしくは非リムーバブルな磁気もしくは光学式媒体を含む一つまたは複数の追加的な記憶コンポーネント1110を含んでいてもよい。ある実施形態では、本稿で与えられる一つまたは複数の実施形態を実装するコンピュータ可読かつプロセッサ実行可能な命令が記憶コンポーネント1110に記憶される。記憶コンポーネント1110は、オペレーティング・システムのコンポーネント、一つまたは複数のアプリケーションをなす実行可能なバイナリー、プログラミング・ライブラリ(たとえば、アプリケーション・プログラミング・インターフェース(API))、メディア・オブジェクトおよび文書類のような他のデータ・オブジェクトをも記憶していてもよい。コンピュータ可読命令は、プロセッサ1106による実行のためにメモリ・コンポーネント1108にロードされてもよい。
コンピューティング装置1102はまた、コンピューティング装置1102に他の装置と通信することを許容する一つまたは複数の通信コンポーネント1116をも含んでいてもよい。一つまたは複数の通信コンポーネント1116は(たとえば)モデム、ネットワーク・インターフェース・カード(NIC)、電波周波数送信機/受信機、赤外線ポートおよびユニバーサル・シリアル・バス(USB)USB接続を有していてもよい。そのような通信コンポーネント1116は有線接続(物理的なコード、ケーブルまたはワイヤを通じてネットワークに接続する)または無線接続(可視光、赤外線または一つもしくは複数の電波周波数などを通じてネットワーキング装置と無線で通信する)を有していてもよい。
コンピューティング装置1102は、キーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラまたはビデオ入力装置のような一つまたは複数の入力コンポーネント1114および/または一つまたは複数のディスプレイ、スピーカーおよびプリンターのような一つまたは複数の出力コンポーネント1112を含んでいてもよい。入力コンポーネント1114および/または出力コンポーネント1112は有線接続、無線接続またはそれらの任意の組み合わせを介してコンピューティング装置1102に接続されてもよい。ある実施形態では、別のコンピューティング装置からの入力コンポーネント1114または出力コンポーネント1112がコンピューティング装置1102のための入力コンポーネント1114および/または出力コンポーネント1112として使用されてもよい。
コンピューティング装置1102のコンポーネントは、バスのようなさまざまな相互接続によって接続されてもよい。そのような相互接続は、PCIエクスプレスのような周辺コンポーネント相互接続(PCI)、ユニバーサル・シリアル・バス(USB)、ファイアワイヤ(IEEE1394)、光学式バス構造などを含みうる。別の実施形態では、コンピューティング装置1102のコンポーネントはネットワークによって相互接続されてもよい。たとえば、メモリ・コンポーネント1108は、ネットワークによって相互接続された種々の物理的位置に位置されている複数の物理的メモリ・ユニットから構成されてもよい。
当業者は、コンピュータ可読命令を記憶するために利用される記憶装置がネットワークを横断して分散されてもよいことを認識するであろう。たとえば、ネットワーク1118を介してアクセス可能なコンピューティング装置1120が本稿で与えられる一つまたは複数の実施形態を実装するためのコンピュータ可読命令を記憶してもよい。コンピューティング装置1102はコンピューティング装置1120にアクセスし、コンピュータ可読命令の一部または全部を実行のためにダウンロードしてもよい。あるいはまた、コンピューティング装置1102は必要に応じてコンピュータ可読命令の諸片をダウンロードしてもよく、あるいはいくつかの命令はコンピューティング装置1102において実行され、いくつかはコンピューティング装置1120において実行されてもよい。
〈F.用語の用法〉
主題は構造的な特徴および/または方法論的な工程に固有の言辞で記述されているが、付属の請求項において定義される主題は必ずしも上記で述べた個別的な特徴や工程に限定されるものではないことは理解しておくものとする。むしろ、上記の個別的な特徴および工程は請求項を実装する例示的な形として開示されているのである。
本願での用法では、用語「コンポーネント」、「モジュール」、「システム」、「インターフェース」などは、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェアまたは実行中のソフトウェアのいずれであれコンピュータ関係のエンティティを指すことが一般に意図されている。たとえば、コンポーネントは、これに限られないが、プロセッサ上で走っているプロセス、プロセッサ、オブジェクト、実行可能物、実行のスレッド、プログラムおよび/またはコンピュータであってもよい。例として、コントローラ上で走るアプリケーションおよび前記コントローラの両方がコンポーネントであることができる。一つまたは複数のコンポーネントがプロセスおよび/または実行のスレッド内に存在することができ、コンポーネントは一つのコンピュータ上に局在することもできるし、および/または二つ以上のコンピュータの間で分散させられることもできる。
さらに、特許請求される主題は、開示される主題を実装するようコンピュータを制御するためのソフトウェア、ファームウェア、ハードウェアまたはそれらの任意の組み合わせを製造するための標準的なプログラミングおよび/またはエンジニアリング技法を使って、方法、装置または製造物として実装されてもよい。本稿で用いるところの用語「製造物」は、任意のコンピュータ可読デバイス、担体または媒体からアクセス可能なコンピュータ・プログラムを包含することが意図されている。むろん、当業者は、特許請求される主題の範囲および精神から外れることなく、この構成に多くの修正がなしうることを認識するであろう。
本稿では諸実施形態のさまざまな動作が与えられている。ある実施形態では、記載される動作の一つまたは複数は、一つまたは複数のコンピュータ可読媒体上に記憶されているコンピュータ可読命令であって、コンピューティング装置によって実行されたら、記載される動作を該コンピューティング装置に実行させるものをなしてもよい。動作の一部または全部が記載される順序は、それらの動作が必ず順序依存であることを含意するものと解釈すべきではない。代替的な順序付けが、本稿の恩恵を受ける当業者によって理解されるであろう。さらに、すべての動作が本稿で与えられる各実施形態において必ず存在するわけではないことは理解されるであろう。
さらに、「例示的」という語は、本稿では、例、事例または例解のはたらきをすることを意味するために使われる。本稿に「例示的」として記載される任意の側面または設計は、必ずしも、他の側面または設計に対して有利であると解釈されるものではない。むしろ、例示的という語の使用は、概念を具体的な仕方で提示することを意図したものである。本願での用法では、用語「または」は排他的な「または」ではなく包含的な「または」を意味することが意図されている。すなわち、特に断わりのない限りまたは文脈から明らかではない限り、「XはAまたはBを用いる」は自然な包含的な置換の任意のものを意味することが意図されている。すなわち、XがAを用いる;XがBを用いる;またはXがAおよびBの両方を用いるのであれば、「XはAまたはBを用いる」は上記の事例のいずれかのもとで満たされる。さらに、本願および付属の請求項で使われるところの冠詞「a」および「an」は、そうでないことが記載されているまたは単数形に向けられていることが文脈から明らかなのでない限り、「一つまたは複数」を意味する。
また、本開示は、一つまたは複数の実装に関して図示され記述されたが、本明細書および付属の図面を読み、理解することに基づいて、他の当業者にも等価な変更および修正が思いつくであろう。本開示はそのようなすべての修正および変更を含み、付属の請求項の範囲によってのみ限定される。特に上記のコンポーネント(たとえば要素、資源など)によって実行されるさまざまな機能に関し、そのようなコンポーネントを記述するために使われる用語は、特にそうでないことが示されていない限り、本開示の本稿で例解された例示的な実装における当該機能を実行する開示された構造と構造的に等価でないとしても、記述されるコンポーネントの指定される機能(たとえば、機能的に等価な)を実行する任意のコンポーネントに対応することが意図されている。さらに、本開示の特定の特徴はいくつかの実装の一つのみに関して開示されたことがありうるが、そのような特徴は、任意の所与のまたは特定の応用のために所望されるまたは有利でありうるように、他の実装の一つまたは複数の他の特徴と組み合わされてもよい。さらに、用語「含む」「有する」「もつ」またはそれらの変形が詳細な説明または請求項において使用される限りにおいて、そのような用語は用語「comprising」と同様の仕方で包含的であることが意図されている。

Claims (18)

  1. コンピュータのプロセッサが、少なくとも一つの不揮発性記憶装置によって提供される記憶セットにおいてデータセットを記憶する方法であって:
    不揮発性記憶装置上で、それぞれ検証子と関連付けられたデータセットを記憶するよう構成されたジャーナルを生成する段階と;
    前記記憶セット中のある位置にデータセットを記憶する要求を受領すると、前記データセットについての検証子を計算し;前記検証子および前記データセットを前記ジャーナルに記憶する段階と;
    前記ジャーナルから、前記記憶セットにコミットされる第一のデータセットおよび第二のデータセットを含むバッチを、前記第一のデータセットおよび前記第二のデータセットを一緒に前記記憶セットを書き込むことが前記第一のデータセットおよび前記第二のデータセットを個々に前記記憶セットに書き込むより速くなるように選択する段階と;
    前記バッチのそれぞれのデータセットについて前記第一のデータセット、前記第一のデータセットの前記検証子、前記第二のデータセットおよび前記第二のデータセットの前記検証子を前記記憶セットに記憶する段階と;
    前記バッチの前記データセットすべてを前記記憶セットに記憶したのち、前記ジャーナルから前記バッチの前記第一のデータセットおよび前記第二のデータセットを除去する段階とを含む、
    方法。
  2. 前記ジャーナルがデータセットのシーケンスを含み、
    前記ジャーナルにデータセットを記憶することが、該データセットを前記データセットのシーケンスにアペンドすることを含む、
    請求項1記載の方法。
  3. バッチを選択する前記段階が:
    前記ジャーナルの容量に関わるジャーナル容量イベント;
    前記ジャーナルに記憶されている前記データセットの継続時間に関わる継続時間イベント;
    前記ジャーナル内の少なくとも一つのデータセットを前記記憶セットにコミットする要求に関わるコミット要求イベント;および
    前記記憶セットの少なくとも一つの不揮発性記憶装置の作業負荷に関わる記憶装置作業負荷イベント
    を含むコミット・イベント集合から選択されるコミット・イベントを検出したときに、
    前記記憶セットに記憶されるべき第一のデータセットおよび第二のデータセットを前記ジャーナルから選択することを含む、
    請求項1記載の方法。
  4. データセットの前記バッチの選択が:
    前記ジャーナルに記憶されており、前記記憶セット中の第一の位置に記憶されるべき第一のデータセットを前記バッチに含めるよう選択し;
    前記ジャーナルに記憶されており、前記記憶セット中の前記第一の位置に近い第二の位置に記憶されるべき第二のデータセットを前記バッチに含めるよう選択することを含む、
    請求項1記載の方法。
  5. データセットの前記バッチの選択が、前記ジャーナルに記憶されており、前記記憶セット中のある位置に記憶されるべき第一のデータセットを、前記ジャーナルが前記第一のデータセットより新しくかつ前記記憶セット中の前記位置に記憶されるべき第二のデータセットを含んでいる場合には、前記バッチから省略することを含む、請求項1記載の方法。
  6. それぞれの要求がデータセットについて前記記憶セット中での位置を指定しており;
    データセットについての検証子を計算することが:
    前記ジャーナルに完全に記録されているデータセットについては、そのデータセットから検証子を計算し;
    前記ジャーナルに完全には記録されていないデータセットについては:
    前記記憶セット中での前記位置における前記データセットのもとのバージョンを読み;
    前記データセットの前記もとのバージョンのもとの検証子を読み;
    前記もとの検証子から前記データセットの前記もとのバージョンを除去し;
    前記もとの検証子に前記データセットを含める、
    ことを含む、請求項1記載の方法。
  7. 前記ジャーナルの揮発性メモリ表現を再構築する段階をさらに含み、該再構築が:
    前記ジャーナル中に記憶されているそれぞれのデータセットについて、前記記憶セット中のそのデータセットの位置を読む段階と;
    前記データセットの位置を読んだのちに、前記ジャーナル中の前記データセットを読む段階と;
    前記データセットの位置を読んでいる間は、諸プロセスからの前記記憶セットにアクセスする要求をブロックする段階とを含む、
    請求項1記載の方法。
  8. 前記コンピュータが揮発性メモリを有しており;
    当該方法が:
    前記揮発性メモリ中に、前記不揮発性記憶装置上に記憶されている前記ジャーナルの揮発性メモリ表現を生成し;
    前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを記憶する段階を含む、
    請求項1記載の方法。
  9. 前記ジャーナルの前記揮発性メモリ表現が、前記記憶セット中で、前記データセットが記憶されるべき位置に従ってインデックス付けされる、請求項8記載の方法。
  10. 請求項8記載の方法であって、当該方法が、データセットを読み出す要求を受領すると:
    前記データセットが前記揮発性メモリ内の前記ジャーナルの前記揮発性メモリ表現内に記憶されていることを判別すると、前記揮発性メモリ表現内に記憶されている前記データセットを提示し;
    前記データセットが前記不揮発性記憶装置上の前記ジャーナルに記憶されていることを判別すると、前記ジャーナルに記憶されている前記データセットを提示し;
    前記データセットが前記不揮発性記憶装置上の前記記憶セットに記憶されていることを判別すると、前記不揮発性記憶装置の前記記憶セットに記憶されている前記データセットを提示することを含む、
    方法。
  11. 請求項8記載の方法であって、当該方法が、前記記憶セットにバッチを記憶したのち、そのバッチを前記ジャーナルの前記揮発性メモリ表現から除去する段階を含む、方法。
  12. 請求項11記載の方法であって、当該方法が:
    前記ジャーナルにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に前記データセットを、除去不可能とマークして記憶し;
    前記記憶セットにデータセットを記憶するときに、前記ジャーナルの前記揮発性メモリ表現中に記憶されている前記データセットを、除去可能とマークする段階を含み、
    データセットを前記揮発性メモリ中の前記ジャーナルの前記揮発性メモリ表現から除去することが、除去可能とマークされたデータセットのみを前記ジャーナルの前記揮発性メモリ表現から除去することを含む、
    方法。
  13. 前記コンピュータが、前記不揮発性記憶装置上に記憶されている前記ジャーナルに関連付けられた書き込みバッファを有しており、
    当該方法が:
    前記書き込みバッファから前記記憶セットへのデータセットのコミットを検出する段階と;
    データセットのコミットを検出すると、前記ジャーナルの前記揮発性メモリ表現において、そのデータセットにコミット済みとマークする段階とを含み、
    前記ジャーナルからデータセットを除去することが、コミット済みとマークされたデータセットのみを前記ジャーナルから除去することを含む、
    請求項11記載の方法。
  14. 請求項8記載の方法であって:
    前記ジャーナルの前記揮発性メモリ表現がある容量のデータセットをもち;
    前記揮発性メモリ中に前記ジャーナルの前記揮発性メモリ表現を生成することが:
    前記ジャーナルの前記揮発性メモリ表現中の前記容量のデータセット;
    前記ジャーナルの前記揮発性メモリ表現の前記容量を含む前記データセットの前記検証子;
    前記ジャーナルに記憶されているデータセットが前記記憶セットに記憶されつつある間に前記記憶セットに記憶されるべきデータセットを記憶するよう構成されたバッファとを記憶するよう前記揮発性メモリ中の容量をリザーブしておくことを含む、
    方法。
  15. 前記コンピュータの障害から回復したときに、
    前記ジャーナルを使って、前記コンピュータの前記揮発性メモリ内に前記ジャーナルの前記揮発性メモリ表現を再構築し、
    前記揮発性メモリ内に前記ジャーナルの前記揮発性メモリ表現を再構築したのち、前記記憶セットに記憶されるべき前記ジャーナルに記憶されているデータセットのバッチを選択することを再開始する段階をさらに含む、
    請求項8記載の方法。
  16. 前記コンピュータが前記ジャーナルを記憶する前記不揮発性記憶装置に関連付けられた書き込みバッファを有しており、
    当該方法は、前記ジャーナルにデータセットおよび検証子を書き込んでいる間、前記書き込みバッファをバイパスすることを含む、
    請求項1記載の方法。
  17. 前記コンピュータが前記ジャーナルを記憶する前記不揮発性記憶装置に関連付けられた書き込みバッファを有しており、
    当該方法は、前記ジャーナルを記憶している不揮発性記憶装置の書き込みバッファをフラッシュするときに、その不揮発性記憶装置にフラッシュされたデータセットを示すフラッシュ点を同定する段階を含む、
    請求項1記載の方法。
  18. 少なくとも一つの不揮発性記憶装置が前記ジャーナルに関連付けられた書き込みバッファを有しており、
    当該方法は、バッチの記憶セットを前記記憶セットに記憶したのち、前記不揮発性記憶装置の前記書き込みバッファをフラッシュする段階を含む、
    請求項1記載の方法。
JP2014529692A 2011-09-11 2011-10-11 検証されたデータセットの不揮発性媒体ジャーナリング Active JP6026538B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/229,736 2011-09-11
US13/229,736 US9229809B2 (en) 2011-09-11 2011-09-11 Nonvolatile media journaling of verified data sets
PCT/US2011/055818 WO2013036265A1 (en) 2011-09-11 2011-10-11 Nonvolatile media journaling of verified data sets

Publications (3)

Publication Number Publication Date
JP2014526735A JP2014526735A (ja) 2014-10-06
JP2014526735A5 JP2014526735A5 (ja) 2014-11-13
JP6026538B2 true JP6026538B2 (ja) 2016-11-16

Family

ID=47728149

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014529692A Active JP6026538B2 (ja) 2011-09-11 2011-10-11 検証されたデータセットの不揮発性媒体ジャーナリング

Country Status (6)

Country Link
US (1) US9229809B2 (ja)
EP (1) EP2754051B1 (ja)
JP (1) JP6026538B2 (ja)
KR (1) KR101863406B1 (ja)
CN (1) CN102945201B (ja)
WO (1) WO2013036265A1 (ja)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9229809B2 (en) 2011-09-11 2016-01-05 Microsoft Technology Licensing Llc Nonvolatile media journaling of verified data sets
US8456972B2 (en) 2011-09-12 2013-06-04 Microsoft Corporation Efficient access to storage devices with usage bitmaps
US8977826B1 (en) * 2011-12-28 2015-03-10 Emc Corporation Extent commands in replication
WO2014066986A1 (en) * 2012-11-02 2014-05-08 Vod2 Inc. Data distribution methods and systems
GB2503600B (en) * 2012-12-21 2014-05-14 Mobile Content Man Solutions Ltd Digital memory imaging system and method
CN103488433B (zh) * 2013-09-18 2016-05-11 北京思特奇信息技术股份有限公司 一种基于分布式文件系统的批量文件操作方法及系统
TWI498902B (zh) * 2013-11-28 2015-09-01 Phison Electronics Corp 資料管理方法、記憶體儲存裝置及記憶體控制電路單元
US9628333B2 (en) * 2013-12-04 2017-04-18 International Business Machines Corporation Operating a dual chipset network interface controller (‘NIC’) that includes a high performance media access control chipset and a low performance media access control chipset
CN104021049B (zh) * 2014-05-16 2017-11-03 华为技术有限公司 分布式存储系统中数据统一的方法和以太接口硬盘
US9720774B2 (en) * 2015-06-29 2017-08-01 Sap Se Adaptive recovery for SCM-enabled databases
US20170031791A1 (en) * 2015-07-27 2017-02-02 Futurewei Technologies, Inc. Maintaining a parity-inconsistent table to identify stripes affected by a write hole effect
JP6734536B2 (ja) * 2016-07-29 2020-08-05 富士通株式会社 情報処理装置及びメモリコントローラ
CN106599046B (zh) * 2016-11-09 2020-06-30 北京同有飞骥科技股份有限公司 分布式文件系统的写入方法及装置
US10496319B2 (en) 2017-02-28 2019-12-03 Sap Se Lifecycle management for data in non-volatile memory including blocking creation of a database savepoint and associating non-volatile memory block identifiers with database column fragments
CN114089915B (zh) * 2017-03-27 2022-12-20 珠海极海半导体有限公司 基于flash存储器的文件追加写操作方法及装置
US10936206B1 (en) * 2017-04-05 2021-03-02 Tintri By Ddn, Inc. Handling a device in a latency state in a redundant storage system
CN107315616B (zh) * 2017-06-30 2020-08-21 苏州浪潮智能科技有限公司 一种固件的加载方法、装置及电子设备
KR102441997B1 (ko) * 2017-11-01 2022-09-08 한국전자통신연구원 네트워크에서 메타데이터의 동기화를 제어하는 장치 및 그 방법
CN110018783B (zh) * 2018-01-09 2022-12-20 阿里巴巴集团控股有限公司 一种数据存储方法、装置及系统
CN108920094B (zh) * 2018-06-01 2021-06-08 深圳忆联信息系统有限公司 擦除单元raid方法、装置、计算机设备及存储介质
US11347653B2 (en) 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
KR102697883B1 (ko) 2018-09-27 2024-08-22 삼성전자주식회사 스토리지 장치의 구동 방법, 이를 수행하는 스토리지 장치 및 이를 포함하는 스토리지 시스템
CN111208933B (zh) 2018-11-21 2023-06-30 昆仑芯(北京)科技有限公司 数据访问的方法、装置、设备和存储介质
CN112003815A (zh) * 2019-05-27 2020-11-27 阿里巴巴集团控股有限公司 通信系统、方法和装置、定位系统、计算设备和存储介质
US10970170B2 (en) * 2019-08-29 2021-04-06 Micron Technology, Inc. Shared parity protection
CN113126887B (zh) * 2020-01-15 2024-09-06 伊姆西Ip控股有限责任公司 用于重建盘阵列的方法、电子设备和计算机程序产品
US11429308B2 (en) * 2020-03-18 2022-08-30 Vmware, Inc. Adaptive metadata batching based on input/output rate

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2888958B2 (ja) 1990-10-20 1999-05-10 富士通株式会社 部分書き換え可能な記憶媒体におけるファイル管理方式
JP3250861B2 (ja) 1993-03-09 2002-01-28 株式会社日立製作所 ディスク装置システム
JPH08147110A (ja) 1994-11-18 1996-06-07 Sony Corp データ記録媒体管理方法、データ記録媒体管理装置およびデータ記録媒体
JP2000305860A (ja) 1999-04-23 2000-11-02 Toshiba Corp 情報記憶システム及び同システムに於ける記憶制御方法
JP2001051806A (ja) 1999-08-05 2001-02-23 Fujitsu Ltd ディスクアレイ装置
JP2001166993A (ja) 1999-12-13 2001-06-22 Hitachi Ltd 記憶制御装置およびキャッシュメモリの制御方法
US6516380B2 (en) 2001-02-05 2003-02-04 International Business Machines Corporation System and method for a log-based non-volatile write cache in a storage controller
JP2003196032A (ja) 2001-12-26 2003-07-11 Nec Corp ストレージ装置のライトキャッシュ制御方法及びストレージ装置
JP3788961B2 (ja) * 2002-08-30 2006-06-21 株式会社東芝 ディスクアレイ装置及び同装置におけるレイドレベル変更方法
US7035974B2 (en) 2002-11-06 2006-04-25 Synology Inc. RAID-5 disk having cache memory implemented using non-volatile RAM
US7675828B2 (en) 2003-02-25 2010-03-09 Lg Electronics Inc. Recording medium having data structure for managing at least a data area of the recording medium and recording and reproducing methods and apparatuses
JP4026517B2 (ja) 2003-03-12 2007-12-26 ソニー株式会社 記録媒体、記録装置、記録方法
US7162401B1 (en) 2003-03-28 2007-01-09 Applied Micro Circuits Corporation Monitoring of resources that are being modeled by simulation or emulation
US20050188248A1 (en) * 2003-05-09 2005-08-25 O'brien John Scalable storage architecture
JP2005032413A (ja) 2003-06-19 2005-02-03 Nec Corp 光ディスクの未記録領域への記録方法、光デイスクの記録装置,光ディスク及び光ディスクのデータ記録用プログラム
GB0318384D0 (en) 2003-08-06 2003-09-10 Ibm A storage controller and a method for recording diagnostic information
US7010721B2 (en) 2003-09-29 2006-03-07 International Business Machines Corporation File system journal management
US7197599B2 (en) * 2003-12-29 2007-03-27 Intel Corporation Method, system, and program for managing data updates
JP4144549B2 (ja) 2004-03-31 2008-09-03 日本電気株式会社 データ保存システムおよび該システムの制御方法
WO2005109426A1 (en) 2004-05-10 2005-11-17 Matsushita Electric Industrial Co., Ltd. Pseudo-overwriting data on write-once discs
US7873782B2 (en) 2004-11-05 2011-01-18 Data Robotics, Inc. Filesystem-aware block storage system, apparatus, and method
JP4435705B2 (ja) * 2005-03-14 2010-03-24 富士通株式会社 記憶装置、その制御方法及びプログラム
US7562188B2 (en) 2005-06-17 2009-07-14 Intel Corporation RAID power safe apparatus, systems, and methods
US7516268B2 (en) 2005-08-01 2009-04-07 Infortrend Technology, Inc. Method for improving writing data efficiency and storage subsystem and system implementing the same
US7774346B2 (en) 2005-08-26 2010-08-10 Oracle International Corporation Indexes that are based on bitmap values and that use summary bitmap values
US7533298B2 (en) 2005-09-07 2009-05-12 Lsi Corporation Write journaling using battery backed cache
US7457928B2 (en) 2005-10-28 2008-11-25 International Business Machines Corporation Mirroring system memory in non-volatile random access memory (NVRAM) for fast power on/off cycling
US7845008B2 (en) * 2005-12-07 2010-11-30 Lenovo (Singapore) Pte. Ltd. Virus scanner for journaling file system
US7574560B2 (en) 2006-01-03 2009-08-11 Emc Corporation Methods, systems, and computer program products for dynamic mapping of logical units in a redundant array of inexpensive disks (RAID) environment
JP4741371B2 (ja) 2006-01-05 2011-08-03 株式会社日立製作所 システム、サーバ装置及びスナップショットの形式変換方法
US7752402B2 (en) * 2006-08-18 2010-07-06 Isilon Systems, Inc. Systems and methods for allowing incremental journaling
JP2008225616A (ja) 2007-03-09 2008-09-25 Hitachi Ltd ストレージシステム、リモートコピーシステム、及びデータ復元方法
KR101424782B1 (ko) 2007-07-19 2014-08-04 삼성전자주식회사 솔리드 스테이트 디스크 컨트롤러 및 솔리드 스테이트디스크 컨트롤러의 데이터 처리 방법
US8145604B2 (en) * 2007-10-19 2012-03-27 Apple Inc. Method and apparatus for relocating an active five system journal
US7877626B2 (en) 2007-12-31 2011-01-25 Datadirect Networks, Inc. Method and system for disk storage devices rebuild in a data storage system
JP5029513B2 (ja) * 2008-06-30 2012-09-19 ソニー株式会社 情報処理装置、情報処理装置の制御方法、およびプログラム
JP5156518B2 (ja) 2008-07-23 2013-03-06 株式会社日立製作所 記憶制御装置及び方法
US20100138603A1 (en) 2008-12-03 2010-06-03 Atul Mukker System and method for preventing data corruption after power failure
JP2010267164A (ja) * 2009-05-15 2010-11-25 Toshiba Storage Device Corp 記憶装置、データ転送制御装置、データ転送方法およびデータ転送プログラム
KR101562794B1 (ko) 2009-08-04 2015-10-26 삼성전자주식회사 데이터 저장 장치
US9229809B2 (en) 2011-09-11 2016-01-05 Microsoft Technology Licensing Llc Nonvolatile media journaling of verified data sets
US8456972B2 (en) 2011-09-12 2013-06-04 Microsoft Corporation Efficient access to storage devices with usage bitmaps

Also Published As

Publication number Publication date
KR20140060521A (ko) 2014-05-20
CN102945201A (zh) 2013-02-27
US9229809B2 (en) 2016-01-05
CN102945201B (zh) 2016-02-17
EP2754051B1 (en) 2020-01-01
WO2013036265A1 (en) 2013-03-14
JP2014526735A (ja) 2014-10-06
US20130067174A1 (en) 2013-03-14
EP2754051A4 (en) 2015-11-25
EP2754051A1 (en) 2014-07-16
KR101863406B1 (ko) 2018-06-29

Similar Documents

Publication Publication Date Title
JP6026538B2 (ja) 検証されたデータセットの不揮発性媒体ジャーナリング
AU2017228544B2 (en) Nonvolatile media dirty region tracking
EP3724764B1 (en) Write-ahead style logging in a persistent memory device
US9715521B2 (en) Data scrubbing in cluster-based storage systems
JP6243028B2 (ja) アトミック記憶操作のためのシステム及び方法
TWI465906B (zh) 用以執行無原子元資料之電力故障安全快取的技術
WO2017190604A1 (zh) 数据库系统中事务恢复的方法与数据库管理系统
KR101870521B1 (ko) 스토리지 저널링을 개선하는 방법 및 시스템
JP5582418B2 (ja) トランザクションメモリ
US10521148B2 (en) Data storage device backup
TW201337561A (zh) 資料可得性之掛接時間重新調整
US12079084B2 (en) Distributed raid for parity-based flash storage devices

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140919

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140919

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150523

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150729

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150804

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151030

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160617

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: 20160913

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161012

R150 Certificate of patent or registration of utility model

Ref document number: 6026538

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250