JP5932042B2 - 不揮発性媒体のダーティー領域追跡 - Google Patents

不揮発性媒体のダーティー領域追跡 Download PDF

Info

Publication number
JP5932042B2
JP5932042B2 JP2014529676A JP2014529676A JP5932042B2 JP 5932042 B2 JP5932042 B2 JP 5932042B2 JP 2014529676 A JP2014529676 A JP 2014529676A JP 2014529676 A JP2014529676 A JP 2014529676A JP 5932042 B2 JP5932042 B2 JP 5932042B2
Authority
JP
Japan
Prior art keywords
region
storage device
descriptor
storage
dirty
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
JP2014529676A
Other languages
English (en)
Other versions
JP2014530393A (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 JP2014530393A publication Critical patent/JP2014530393A/ja
Application granted granted Critical
Publication of JP5932042B2 publication Critical patent/JP5932042B2/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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2064Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring while ensuring consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1009Cache, i.e. caches used in RAID system with parity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1035Keeping track, i.e. keeping track of data and parity changes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/104Metadata, i.e. metadata associated with RAID systems with parity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/10Indexing scheme relating to G06F11/10
    • G06F2211/1002Indexing scheme relating to G06F11/1076
    • G06F2211/1061Parity-single bit-RAID4, i.e. RAID 4 implementations

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)
  • Retry When Errors Occur (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)
  • Hardware Redundancy (AREA)

Description

本願は不揮発性媒体のダーティー領域追跡に関する。
コンピューティングの分野において、多くのシナリオは一組の記憶装置(たとえば、安価なディスクの冗長アレイ(RAID: Redundant Array of Inexpensive Disks)に基づいて相互運用されるハードディスクドライブのアレイ)によって提供され、さまざまな型のデータを記憶および取得するためにさまざまな装置およびプロセスによってアクセスされうる記憶セット(storage set)に関わる。多くのそのようなシナリオにおいて、記憶セットの異なる部分に記憶されたデータが関係をもつことがある。第一の例として、データベース・システムにおける関係したレコードのように、記憶セットに記憶されている第一のデータセットと第二のデータセットが互いを参照することがありうる。第二の例として、さまざまな利点を提供するためにデータの二つ以上の同一のバージョンが保持されることがある。たとえば、二つの記憶装置が同じデータセットを記憶し、これへのアクセスを提供してもよく、それによりそのデータへのアクセス・レートを事実上二倍にする。データの同一のコピーは、データの完全性を保護するために保持されてもよい。たとえば、データの第一のコピーが、データ破損またはハードウェア故障(たとえばハードドライブのクラッシュ)のような障害のために失われる場合、障害から回復するために、そのデータの同一の第二のコピーがアクセスされ、複製されてもよい。
第三のそのような例では、データに対する誤りまたは意図されない変化を検出するおよび/またはそれに対して防護するためにデータが関連付けられてもよい。たとえば、装置の読み出しまたは記憶論理におけるエラー、バッファー・アンダーランまたはオーバーラン、記憶媒体における欠陥または(宇宙線のような)外的な妨害が、時に記憶媒体上に記憶されているデータまたは記憶媒体からのデータの読み出しに意図しない変化を引き起こすことがある。したがって、そのような多くのシナリオにおいて、記憶装置上に記憶されるデータのそれぞれの部分について、チェックサムのような検証子が計算され、記憶されてもよく、データセットの内容が有効に記憶装置に記憶されたおよび/または記憶装置から読み出されたことを確証するために使用されてもよい。そのような一つの例として、ビットのセットを含むデータセットを記憶するコンテキストでは、ビットに対して排他的OR(XOR)演算が適用され、結果として一ビットのチェックサムを生じてもよく、そのチェックサムが記憶されて、このデータセットと関連付けられてもよい。のちにデータセットが読まれるとき、もう一度それにXOR演算が適用されてもよく、その結果が上記一ビットのチェックサムと比較されてもよい。任意の一ビットの変化はこれらのXOR計算の不一致につながり、それがデータが誤って記憶、変更されたまたは誤って記憶装置から読み出されたことを示す。多くの型の検証子が同定されてもよい。そうした検証子はいくつかの特徴において変わりうる(たとえば、計算の簡単さ、データセットのどのビットが変わったかの同定能力およびデータの誤って読まれた部分が訂正されうる誤り訂正能力)。
さまざまな形のデータ複製がしばしば安価なディスクの冗長アレイ(RAID: Redundant Array of Inexpensive Disks)のアレイ、たとえば改善されたスループットおよび自動データ・ミラーリングのようなさまざまな集合属性を達成するために一緒にプールされている一組のハードディスクドライブの使用を通じて達成される。第一のそのような例として、RAID 1アレイでは、同じサイズの二つ以上のハードディスクドライブのセットが記憶セットの同一のコピーを記憶し、記憶セットへのいかなる更新も、すべてのハードディスクドライブを横断して同一に伝搬させられる。したがって、ハードディスクドライブ障害、さらには複数のそのような障害の場合でも、一つでもハードディスクドライブが機能してアクセス可能なよう残っている限り、記憶セットはアクセス可能のままに留まる。第二のそのような例として、RAID 4アレイは二つ以上のディスクのセットに関わる。ここで、一つのディスクはユーザー・データを記憶するためではなく、他のディスクに記憶されているデータの検証子を記憶するためにアレイに含められる。たとえば、それぞれが一テラバイトのデータを記憶する四つのディスクに関わるRAID 4アレイについて、最初の三つのディスクの容量はプールされてユーザー・データのための三テラバイトの記憶スペースをなし、四番目のディスクは最初の三つのディスクに記憶されているデータセットについての検証子を保持するためにアレイに含められる(たとえば、他の三つのディスクにそれぞれ記憶されている三つの64ビット語毎に、四番目のディスクは、それらの三つの64ビット語の完全性を検証する64ビットの検証子を含む)。RAIDアレイ・コントローラは、設けられる一組のハードディスクドライブについて、選択されたRAIDレベルの詳細を実装する(たとえば、データセットを受領すると、自動的に、三つのユーザー・ディスクを横断してデータを割り振り、データセットの検証子を計算し、四番目のディスク上に検証子を記憶する)よう構成されている回路を有する。使用されるRAID技法は、追加的な保護または特徴をも可能にしてもよい。たとえば、RAID 4アレイにおけるどれか一つの記憶装置が障害を起こしたら、障害を起こした装置に記憶されているデータが、残りの記憶装置の使用を通じてそっくり再構成されてもよい。
この概要は、詳細な説明においてさらに後述される概念のセレクションを簡略化された形で紹介するために設けられている。この概要は、特許請求される主題の鍵となる因子または本質的な特徴を特定することは意図されていないし、特許請求される主題の範囲を限定するために使われることも意図されていない。
記憶装置上にデータの関連付けられた諸セットを書き込む際、該書き込み中に、関連付けられたデータセットの間の非一貫性を引き起こす問題が生じることがある。第一の例として、ミラーリングされたデータセットにおいて、ミラーの一つへの書き込み中にエラーが起こりうることがある。たとえば、宇宙線、物理的媒体中の欠陥または読み書きプロセスにおける論理的なエラーに起因する、データの意図しない変化である。結果として、データセットのそれらのミラーは一致しなくなり、データの正しいバージョンを選ぶことが難しいことがある。第二の例として、データセットと検証子の記憶の間の遅延(またはその逆)のために問題が生じることがある。たとえば、多くの記憶装置は一時に一つの位置(たとえば、ハードディスクドライブの書き込みヘッドの下の位置または半導体記憶デバイスにおけるアドレス・レジスタによって指定される位置)への書き込みをサポートするだけであり、データのシーケンシャルな記憶は、検証子より前にデータセットを書き込むこと、あるいは逆にデータセットより前に検証子を書き込むことに関わる。もう一つの例として、データセットと検証子が異なる記憶装置上に記憶される場合、第一の記憶装置がデータセットを記憶する瞬間を第二の記憶装置がデータセットの検証子を記憶する瞬間と同期させることは難しいことがある。結果として、データセットおよび対応する検証子の記憶は、同期的な仕方ではなく、逐次的な仕方で行なわれる。電力喪失、ハードウェア障害、ソフトウェア・クラッシュまたは予期されなかったアレイからの記憶装置の除去など、多くの障害源が記憶プロセスを中断させうる。そのような障害が、データセットの記憶後、検証子の記憶より前の瞬間に生じると、のちに読み込みの際に検証子エラーが生じ、データの正確さに対する信頼を危うくすることがありうる。データが能動的に記憶装置(単数または複数)によって書き込まれることに加えて、障害は、書き込みバッファ内に記憶されておりすぐにも書き込みするためにスケジューリングされているデータなどの、完了していない他の書き込みを攪乱することもある。
これらおよび他のシナリオにおいて、データセットの一貫性は、検証プロセスを通じて検出されうる。それはたとえば、同一のデータセットを比較するまたは検証子を対応するデータと比較することによる。よって、破局的な障害を検出したら、一つまたは複数の記憶装置上のデータは、データを検証し、可能性としては非一貫性を訂正することによって、「クリーニング」されうる。しかしながら、障害の発生は簡単に検出できるかもしれないが(たとえば不正なシャットダウンまたは故障した記憶装置の交換)、書き込みの時点で記憶セットのどの部分が書き込まれており、障害によって損なわれている可能性があるかを決定することが可能でないことがある。そのような情報なしでは、記憶セット中の全データセットを検証する(たとえばミラーリングされたデータセットの各コピーの全体を比較して非一貫性を検出するおよび記憶セット中の全データセットの検証子を試験する)ことによって、記憶セット全体がクリーニングされる必要があることがある。記憶セット全体のクリーニングは、特に記憶セットの容量のペタバイト領域への成長に鑑み、長い時間がかかることがあり、結果として、たとえ短期間の破局的な障害後であっても長引く回復期間につながることがある。それに、この高価なクリーニング・プロセスは記憶セットの完全性を保証するかもしれないが、ボリューム全体のクリーニング・プロセスの広がり(しばしば長期間書き込まれていないデータセットおよびさらには記憶装置さえ巻き込む)は、障害の時点で進行中であったことがありうる比較的少数の書き込みに対して不相応であることがある。
本稿では、記憶セットのクリーニングを、障害によって損なわれた可能性があるデータに集中させる技法が提示される。本技法によれば、記憶セット中のある位置に書き込む前に、記憶装置は、同じ不揮発性物理媒体上に、書き込みが行なわれようとしている位置を示す記述子を記憶してもよく、書き込みが完了したのちに該記述子を消去してもよい。このようにして、記憶装置は記憶セットの「ダーティー」な領域を追跡でき、障害から回復したら、記憶セットの「ダーティー」な領域のみのクリーニングを開始しうる。しかしながら、すべての書き込みの不揮発性物理媒体上でのアドレスを記憶(およびフラッシュ)することおよび物理媒体への書き込み完了を確認したのちに該アドレスを消去(およびフラッシュ)することは、各データセットを書き込むのに関わるシークおよび書き込みの数を著しく(たとえば三倍に)増大させ、それにより記憶セットのパフォーマンス(たとえばレイテンシーおよびスループット)が低下しうることは理解されうる。逆に、記憶装置、パーティションまたはボリュームごとなど、高いレベルでのみ「ダーティー」情報を追跡するのでは、クリーニング・プロセスを集中させる効率が悪くなりうる。たとえば、「ダーティー」情報がボリュームごとに追跡される場合、クリーニング・プロセスは書き込みの時点で使用中であった特定のボリュームに集中しうるが、ボリュームは何テラバイトものデータを含むこともあり、その結果、たった数メガバイトのデータが書き込み中だった場合でも、長期間のクリーニング・プロセスとなってしまう。結果として、本稿に提示される技法によれば、記憶セットは、ある領域サイズの諸領域に分配され、「ダーティー」情報は、各領域について追跡されうる。たとえば、記憶セットを一ギガバイトの諸領域に配分すれば、ダーティー領域情報の更新の頻度を低下もさせながら、領域の比較的精密な追跡を可能にしうる(たとえば、ある領域において書き込みが開始されるとき、その領域は「ダーティー」としてマークされ、その領域内での長大な逐次的な諸書き込みを通じてそのようにマークされたままでありうる)。したがって、領域サイズの選択は、より集中した、より短いクリーニング・プロセスにつながるダーティー領域情報における精密さと、ダーティー領域追跡プロセスを実装するパフォーマンス・コストの削減との間のトレードオフと見なすことができる。
さらなる技法は、ダーティー領域情報に対する更新の頻度をさらに低下させうる。第一の例として、書き込みが要求された領域についてダーティー領域記述子を書き込む前に、ある実施形態は、その領域が記憶媒体上ですでにダーティーとマークされているかどうかを判定してもよく、その領域を冗長にダーティーとしてマークすることを回避してもよい。第二の例として、書き込みが最近完了した領域は、同じ領域に対してすぐにもその後の書き込みがある可能性が高いことがある。したがって、書き込みの完了後にその領域をすぐにクリーンとしてマークするのではなく、「クリーン」のマーク付けは短期間遅らされてもよい。同じ領域に対するその後の書き込みが受領されたら、その領域をクリーンとマークしたすぐあとにその領域をダーティーとマークしなければならないのではなく、その領域はダーティーとマークされたままに留まりうる。一つのそのような実施形態では、そのような領域をダーティーまたはクリーンとしてマークするときを決定するために、ダーティー領域記述子の揮発性メモリ表現が生成され、使用されてもよい。たとえば、このメモリ内表現は、各領域への最後の書き込み要求の時刻を記録してもよく、ある定義された期間にわたって書き込まれなかった領域があればそれをクリーンとマークしてもよい。さらに、このメモリ内表現は、「クリーン」領域のバッチ記録を可能にしてもよく、ダーティー領域追跡プロセスに関わる記憶媒体書き込みの量をさらに減らす。ダーティー領域の「作業セット」のメモリ内追跡のこれらおよびその他の使用は、クリーニング・プロセスの精密さを著しく低下させることなく、記憶装置へのアクセスの数を、よって不揮発性ダーティー領域追跡の実行コストを減らしうる。これらおよびその他の技法は、記憶セットの障害からの回復の際に、クリーニング・プロセスを著しく長引かせることなく、ダーティー領域追跡を実装する実行コストをさらに低下させうる。
上記および関係する目的の達成に向け、以下の記述および付属の図面はある種の例示的な側面および実装を記述する。これらは、一つまたは複数の側面が用いられうるさまざまな仕方のほんのいくつかを示す。本開示の他の側面、利点および新規な特徴は、付属の図面との関連で考慮されるとき、以下の詳細な記述から明白となるであろう。
いくつかの記憶装置上に記憶されるミラーリングされたデータを有しうる記憶セットの障害を表わす例示的なシナリオの図解である。 データセットと該データセットの検証子(たとえばチェックサム)の一貫性を損ないうる記憶セットの障害を表わす例示的なシナリオの図解である。 障害によって引き起こされる、データセット中の損なわれたデータの発生を減らしうるが、かなりのコストおよび/または非効率をもってそうしうる二つの技法の図解である。 記憶セットの物理媒体上のダーティー領域を追跡するための、本稿に提示される技法の使用を表わす例示的なシナリオの図解である。 本稿に提示される技法に基づく、記憶セットのダーティー領域の追跡および不揮発性媒体記録の例示的な方法のフローチャート図解である。 本稿に提示される技法に基づく、記憶セットの不揮発性記憶媒体記録上で示されるダーティー領域に従って記憶セットをクリーニングする例示的な方法のフローチャート図解である。 本稿に記載される一つまたは複数の仕組みを具現するよう構成されたプロセッサ実行可能命令を有する例示的なコンピュータ可読媒体の図解である。 本稿に提示される技法に基づく、記憶セットの不揮発性物理媒体上のダーティー領域を追跡するために使用されうるデータ構造の一つの型を表わす例示的なシナリオの図解である。 本稿に提示される技法に基づく、記憶セットのダーティー領域を追跡するための記憶装置上のダーティー領域テーブルを更新するための例示的なプロセスの図解である。 本稿に提示される技法に基づく、記憶セットのダーティー領域を追跡するプロセスを具現する例示的な状態機械の図解である。 本稿に記載される仕組みの一つまたは複数が実装されうる例示的なコンピューティング環境を示す図である。
特許請求される主題についてここで図面を参照して述べる。図面を通じて、同様の要素を指すために同様の参照符号が使われる。以下の記述では、説明の目的で、特許請求される主題の十全な理解を与えるために、数多くの個別的詳細が記述される。しかしながら、特許請求される主題がそうした個別的詳細なしでも実施されうることは明白であろう。他方、特許請求される主題の記述を容易にするために、構造および装置がブロック図の形で示される。
〈A.序〉
コンピューティングの分野において、多くのシナリオは、一つまたは複数の不揮発性記憶装置(たとえば円盤ベースの磁気および/または光ハードディスクドライブ、半導体記憶デバイスおよび不揮発性メモリ回路)上に記憶セットをなすデータを保存することに関わる。語サイズ、アドレッシング方法、記憶装置の記憶スペースの一つまたは複数のパーティションへの分割および記憶装置内の割り当てられたスペースをコンピューティング環境内の一つまたは複数のボリュームとして露出させることなど、データ記憶の多くの詳細は変わりうる。さらに、記憶装置は、記憶セットを提供するために、独立して、またはゆるやかな協働をもって動作しうる。たとえば、RAID 0方式に従って構成されたアレイでは、記憶セットは単に、それぞれが他のディスクとは独立して動作しうる各記憶装置によって提供される容量から総合されてもよい。あるいはまた、記憶装置はさまざまな度合いの緊密な協調を通じてさまざまな機能を提供するよう構成されてもよい。たとえば、RAID 1方式に従って構成されたアレイでは、一組の記憶装置はそれぞれ記憶セット全体の同一のコピーを記憶してもよい。たとえば、一テラバイトの記憶セットが四つの一テラバイト記憶装置上で四つの同一のコピーとして記憶されてもよい。それら四つの記憶装置は、同期を維持するため、記憶セットを変更するいかなる要求も四つすべての記憶装置に等しく適用されることを保証するよう協働してもよい。この種の「ミラーされた」アーカイブは改善されたアクセス・レートを呈しうる。たとえば、異なるプロセスが異なる記憶装置を通じてその記憶セットにアクセスしうるので、潜在的には、その記憶セットへのアクセス・レートを、どの単独の装置によって達成可能でありうるよりも四倍にしうる。さらに、この型のアレイは堅牢な耐久性を実証する。一つまたは複数のハードディスクドライブが(たとえばデータ破損、損傷または喪失のため)障害を起こす場合、記憶セットはそれでも他のハードディスクドライブを通じてアクセス可能であり、少なくとも一つの他のハードディスクドライブが有効かつアクセス可能に留まっている限り、無傷のままである。しかしながら、これらの特徴の利点は、RAID 1アレイでは、かなりの容量の損失によって相殺される(たとえば、四テラバイトのハードディスクドライブ・スペースを一テラバイトのデータを記憶するために使う)。他の記憶方式は、それよりは低い容量低減でこうしたセキュリティおよびパフォーマンス特徴のいくつかを提供しうる(たとえば、RAID 4方式では、スペースsのn個のドライブのセットが一つを除いた全ハードディスクドライブの記憶容量をフルに現わし、その一つはパリティ情報を記憶するためにリザーブされ、アレイ内のどの一つのハードディスクドライブの障害からも回復できる)。
これらおよび他のシナリオにおいて、データセットはさまざまな装置およびプロセスによって記憶セットに記憶されうる。しかしながら、記憶セットの使用中に、データの記憶を損ないうる多くの形の障害が起こりうる。たとえば、さまざまなプロセスのための記憶セットへの書き込みがデータセットにアクセスしている間に、当該書き込みプロセスにおいて、記憶セット管理プロセスにおいて、ソフトウェアのためのデバイス・ドライバにおいてまたはオペレーティング・システムにおいて、ソフトウェア障害が起こることがある;コンピュータは記憶装置との連絡を失うことがある(たとえば、記憶装置は接続を外されることがあり、あるいはコンピュータと記憶装置を接続する有線または無線のネットワークが障害を起こすことがある);あるいは記憶装置はハードウェア障害を経験することがある(たとえばハードディスクドライブにおけるヘッド・クラッシュまたは電力中断)。これらおよび他の形の障害は突然、警告なしに起こることがあり、記憶セットにデータを書き込むプロセスを中断することがある。
一つまたは複数の書き込みの間の記憶セットの障害の場合、いくつかの型の障害は回復可能でありうるか、結果として生ずるデータの損失が取るに足りないものであることがある。たとえば、障害はデータが記憶セットに書き込まれたあとまもなく起こることがあり、それは回復可能である;再生成できるまたは貴重ではないデータの喪失を引き起こすことがある;または比較的大規模なデータセットにおける少量のデータの喪失、たとえば非常に大きな電子メール・メッセージ・アーカイブにおける少数の電子メール・メッセージの喪失を引き起こすことがある。しかしながら、他の型の障害は著しい問題を呈することがある。特に、記憶セットに書き込まれるデータの二つ以上のセットの間に何らかの関連づけが存在することがあり、第一のデータセットを書き込んでいる間に生じる障害は、関連付けられたデータセットにおける非一貫性につながることがある。そのような非一貫性は、障害の時点で書き込まれつつあったデータセットばかりでなく、関連付けられたデータセットの完全性をも損なうことがある。実際、いくつかのシナリオでは、書き込みの完全な失敗および書き込まれるべきデータの喪失は、記憶セットの不完全な書き込みよりも生じる問題が少ないことがある。第一の例として、ミラーされたデータセットの第一のコピーの更新の際に障害が起こる場合、このコピーと別のコピーとの間の検出される非一貫性は、両方のコピーの完全性に疑義を生じさせることがある。さらに、両方のコピーが障害の時点に更新されつつあってその後非一貫性が検出される場合には、どちらのコピーが障害前に書き込みを成功裏に完了させ、どちらのコピーがそうでなかったかを判別するのが難しいことがある。第二の例として、データセットとそのチェックサムとの間で非一貫性が検出される場合、データセットまたはチェックサムのどちらが誤っているかを判別するのが難しいことがある。さらに、チェックサムがいくつかのデータセットから計算されている場合、一つのデータセットへの書き込みを完了しないことは、正しくないチェックサムにつながることがあり、そのデータセットおよびチェックサムの完全性のみならず、そのチェックサムによって代表される他のデータセットすべての信頼性をも低下させることがある。これらおよびその他のシナリオにおいて、データセットへの書き込みを完了しないことは、不完全に書き込まれたデータセットにかする程度に関係しているだけの他のデータセットさえも含む、記憶セット中の広い範囲のデータの信頼性を損なう非一貫性を生じうる。
図1および図2は、記憶セットへの書き込み中の障害の帰結を示す二つの異なるシナリオを示している。図1の例示的なシナリオ100では、さまざまなデータセット104(たとえば、ビット、バイト、語、セクタ、ファイルまたはレコード)を含む記憶セット102が記憶装置106のセットに記憶される。ここで、データセット104の間にはミラーリング関係が存在する。具体的には、この例示的なシナリオ100における記憶装置106は、RAID 1方式のように、データセット104の同一コピーを記憶するよう構成される。(ミラーリングは物理的な仕方で、たとえば、記憶装置106の同一サイズのセット上の各物理的位置に同じデータを書き込んで、実行されてもよいし、あるいは論理的な仕方で、たとえば、記憶セット102のある論理アドレスに対応する各記憶装置106の物理的位置にデータを書き込んで、実行されてもよい。)よって、記憶セット102におけるある特定の位置108における特定のデータセット104に書き込み110が要求される第一の時点112において、記憶装置106はそれぞれ要求された位置108への書き込み110を実行してもよい。しかしながら、この例示的なシナリオ100においてさらに示されるように、記憶装置106の不完全な同期のために問題が生じることがある。たとえば、各記憶装置106への書き込み110が、異なる記憶装置106によって、異なる時刻に開始され、実行され、完了されることがある。そのようなタイミング差は、ハードウェアの相違のために生じることがある(たとえば、第一の記憶装置106はデータセット104をただちに物理媒体にコミットしうるが、第二の記憶装置106はデータセット104をまず書き込みバッファに記憶することがある)が、同一設備の記憶装置でさえ生じることがある(たとえば、異なる記憶装置106の入出力待ち行列における相違または書き込み要求の最初における異なるハードディスクドライブの書き込みヘッドの初期セクタ位置の相違)。結果として、第二の時点114において、記憶装置106のうちの二つへの書き込み110は完了しているが、第三の記憶装置106は書き込み110を完了させようと継続していることがありうる(実は記憶セット102にデータセット104をコミットすることを開始していないこともありうる)。
記憶装置106の同期のそのような喪失は、たとえば第一の記憶装置106による書き込み110の完了後かつ第二の記憶装置106による同じ書き込み110の完了前に障害が発生する場合、著しい問題を生ずることがある。たとえば、第三の書き込み110が記憶装置106に対して実行されつつある第三の時点116において、すべての記憶装置106への書き込み110を中断する障害118が生じる。障害118が一時的(たとえば瞬間的な電源喪失)、さらには短命であったとしても、障害118は、記憶装置106におけるタイミング差のため、非一貫性122を生じることがある(たとえば、書き込み110は第一および第二の記憶装置106上では障害118前に完了していたが、第三の記憶装置106上では完了していなかったことがありうる)。障害118から回復する際に、同一であることが期待されるデータセット104の間で非一貫性122を同定するとき、どのデータセット108が正確であるかを判定するのが難しいことがありうる。この例示的なシナリオ100において、記憶装置106の過半数(majority)に記憶されているデータセット108のバージョンを選ぶことが論理的であることがある。しかしながら、この例示的なシナリオ100の軽微な変形では、そのような選択がそれほど論理的ではなくなることがある。たとえば、非一貫性122は、偶数個の記憶装置106に関わるシナリオにおいて生じることがあり、多数決選択が利用可能でないことがある。
図1の例示的なシナリオ100のようなシナリオでは、非一貫性122は、最近書き込まれたデータセット110のみにあてはまることがある。しかしながら、他のシナリオでは、同様の障害118は、長い間書き込まれていない、あるいはアクセスさえされていないデータセット104、さらには障害118の時点で使用されていなかった他の記憶装置106に記憶されているものの信頼性をも危うくすることがある。図2の例示的なシナリオ200では、四つの記憶装置106のセットがRAID 4方式の仕方で構成されており、記憶セット102は三つの記憶装置106を横断して割り当てられ、第四の記憶装置106は、最初の三つの記憶装置106に記憶されているさまざまなデータセット104に対応する検証子202のセットを記憶するよう構成されている。検証子202は、他の記憶装置106のそれぞれの対応する位置に記憶されているビットを一緒にXORすることによって計算されるパリティ・ビットのようなチェックサムであってもよい。(たとえば、各記憶装置106の記憶セット102内のある特定の物理的または論理的な位置に記憶されている一メガバイトのデータセット104について、該一メガバイトのデータセット104のそれぞれが合わせてXORされて、一メガバイトのパリティ・データを生成し、それが第四の記憶装置106に記憶されてもよい。)この相互運用により、記憶装置106は、データ損失のいくつかの形を通じて、記憶セット102の完全性を維持できるようになりうる。たとえば、最初の三つの記憶装置106のうちのいずれか一つが失われる場合、失われた記憶装置106に記憶されていた記憶セット120の部分は、他の二つの記憶装置106に記憶されているデータと、第四の記憶装置106に記憶されている対応するパリティ・データをXORすることによって再構成されてもよい。第四の記憶装置106が失われた場合には、パリティ・データは単に、最初の三つの記憶装置に記憶されている対応するデータセット104から代わりの記憶装置106上に再生成されてもよい。
このようにして、図2の例示的なシナリオ200に示したような記憶装置106の相互運用は、いずれか一つの記憶装置106が突然、恒久的に失われる場合においても故障耐性を可能にする。しかしながら、この例示的なシナリオ200における記憶装置106も、図1の例示的なシナリオ100において提示された不完全な同期を示す。たとえば、第一の時点204において、第二の記憶装置106に記憶されているデータセット104に対して書き込み110が開始されることがあり、この書き込みは第四の記憶装置106に記憶されている対応するデータセット104について検証子202を更新することに関わる。しかしながら、書き込み110は同時に完了しないことがある。たとえば、第二の時点206においては、第二の記憶装置106への書き込み110は完了していることがあるが、第四の記憶装置106上の検証子202の書き込み110は完了してないことがある。さらに、後者の書き込み110が完了する前に障害118が生じることがあり、第四の記憶装置106が正しくない検証子118を保持することがある。たとえ限定的で短期間だったとしても、この障害118は、第四の記憶装置106に不完全に書き込まれた検証子116および最近だが完全に書き込まれた第二の記憶装置106に記憶されたデータセット104のみならず、やはり検証子122によって代表されていている第一および第三の記憶装置106に記憶されているデータセット104をも危うくすることがある。たとえば、第三の時点208において、第三の記憶装置106が障害118を経験することがある。第四の時点210において、第一および第二の記憶装置106上の対応するデータセット104および第四の記憶装置106上の対応する検証子202を合わせてXORすることによって代替記憶装置118上にデータセット104を再構成するよう回復プロセスが開始されうる。しかしながら、第二の時点206における第四の記憶装置106への書き込み110の失敗118によって引き起こされた非一貫性122のため、XOR演算は、第三の記憶装置106上の正しくないデータ212の再構成につながりうる。この正しくないデータ212は、第三の記憶装置106上のこのデータセット104が書き込み110の障害118に関わっていなかったとしても、このデータセットが長期間書き込まれていなかったとしても、また第三の記憶装置106が第四の記憶装置106への書き込み110の障害118の際に使用中でなかったまたさらにはアクセス可能でさえなかったとしても、生成されうる。このように、書き込み202の単一の障害が、記憶セット102の故障耐性能力を損なうことがありうる。(すなわち、RAID 4方式の実装にもかかわらず、記憶セット102は単一の記憶装置106の障害118から回復する能力を失う。)他のシナリオではさらに深刻な帰結が生じることがありうる。たとえば、失敗した書き込み110がマスター・ブート・レコードを含むデータセット104に対して行なわれていた場合、可能性としては記憶セット106全体を含む、記憶セット106内のボリューム全体が損なわれ、アクセス不能となることがありうる。
書き込み110の失敗118の潜在的に破局的な帰結のため、結果として生じる非一貫性122を検出し、訂正するための諸技法が利用されてもよい。第一のそのような技法として、記憶セット102中の非一貫性を検出するために、さまざまな型のクリーニング・プロセスが利用されてもよい。たとえば、不一致を検出するためにデータセット104が検証子202と比較されてもよいし、あるいは同一であることが期待されるデータセット104のコピーどうしが比較されてもよい。他のデータセット104または検証子202と関連付けられていないデータセット104さえ、データ破損のような非一貫性について検査されることがあり、時として自動的に修復されることがある。しかしながら、記憶セット102全体のスキャンは、多くのシナリオにおいて、非効率的および/または禁止的でありうる。たとえば、スキャンは、記憶セット102のサイズのため、記憶セット102のスループットのため(たとえば地理的に分散された記憶セット102は比較的低スループットのネットワーク接続を通じてアクセス可能であることがある)、および/またはスキャンの複雑さのため(たとえば、洗練されたパリティ・チェックの数学を集中的に使う(math-intensive)計算)、長引くことがありうる。スキャン中、記憶セット102は可能性としては非一貫性があり、図2の例示的なシナリオ200に描かれているような記憶装置106の障害118の場合に脆弱であるままとなる。正しくないデータを与える可能性のため、記憶セット102にアクセスすることをプロセスに許容するのは賢明でないことがありうる。したがって、そのようなプロセスは、スキャンが完了するまで(あるいは少なくとも、当該プロセスによって利用されるデータセット104がクリーニング済みとなるまで)ブロックされる必要があることがある。その結果、サービスの中断またはダウンタイムが生じる。さらに、記憶セット102全体のこの長引く、コスト高なスキャンは、ほんの一つの記憶装置106の潜在的には短期間の障害118によってトリガーされることがあり、障害118の際のペンディングの書き込み110の数に対して不相応であることがありうる。実際、たとえ障害118の時点で進行中の書き込み110がなかったとしても、破局的な結果をもちうる非一貫性122の可能性のため、ペンディングの書き込み110の数が判別できなければ、記憶セット102全体のスキャンを呼び出す必要があることがある。
これらの考察に鑑み、ハードウェアおよび/またはソフトウェアの突然の障害118に備えて、記憶セット102の通常の動作中に、ペンディングの書き込み110についての情報を記憶する機構を提供することが望ましいことがありうる。この情報は、障害が起こった場合に非一貫性122を呈しうる記憶セット102の「ダーティー」な状態についての情報として記録されてもよい。さらに、電力障害の場合にその情報を保持するために、その情報を不揮発性メモリに記録することが望ましいことがありうる。この追跡は、障害118後に呼び出されるクリーニング・プロセスであって、該クリーニング・プロセスが、障害118の時点においてペンディングの書き込み110に関わっていた記憶セット102の領域のみをスキャンすることに限定されるようなものを可能にしうる。
図3は、一組の記憶装置106によって提供される記憶セット102のための、不揮発性メモリにおいて「ダーティー」状態を記録する二つの技法を提示している。第一の例示的な技法300として、記憶セット102に記憶されるデータの各ビットについて、そのビットへのペンディングの書き込み202を示す「ダーティー」指示子302が記憶されてもよい。ビットについての「ダーティー」指示子302は、ビットへの書き込み202を開始する前にセットされてもよく、書き込み202が完了した後にクリアされてもよい。記憶セット102をクリーニングするために、ビットの「ダーティー」指示子302が検査されてもよく、セットされている「ダーティー」指示子302があればそれが関連付けられたビットのクリーニングを開始しうる(たとえば、非一貫性のあるビットの上に、異なる記憶装置106に記憶されているデータセット102の同一のコピーから対応するビットをコピーすることによる)。
この第一の例示的な技法300は、いくつかの利点を呈しうる。たとえば、不揮発性記憶媒体におけるペンディングの書き込み104についての情報の記憶を達成しうるし、少量の追加的なハードウェアまたはソフトウェアに関わる比較的単純なクリーニング・プロセスを伴いうるし、他の検出方法(たとえばいくつかの記憶装置106から取得された大きなデータセット104に対してXOR演算を実行すること)に比べてクリーニングの計算量を低減しうる。しかしながら、この第一の例示的な技法300も多くの不都合な点を呈する。第一の例として、「ダーティー」指示子302は記憶セット102の記憶スペースの半分を費消してしまう。第二の例として、スキャン・プロセスは相変わらず記憶セット102全体のスキャンに関わり、たとえスキャン検出の相対的な単純さのため、必要とされる計算パワーが低減されるとしても、記憶セット102全体へのアクセスはそれでも長引くクリーニング・プロセスにつながりうる。さらに、記憶セット102へのアクセス・レートがクリーニング・プロセスにおけるボトルネックである場合には、クリーニング・プロセスの継続時間は変わらないことがありうる。第三の例として、「ダーティー」指示子302が記憶装置106の追跡されるビットとの物理的な近傍に(たとえば記憶装置106の物理媒体上の各ビットまたはバイトに後続して)記憶されている場合、ビットの破損につながる障害108は「ダーティー」指示子302の破損にもつながることがある。あるいはまた、「ダーティー」指示子302が同じ記憶装置106の異なる領域に記憶される場合、いかなる単一のビットの書き込み202も、記憶装置106の三つの異なる部分への三つのアクセスに関わる――たとえば、ビットをダーティーとしてマークするための、「ダーティー」指示子302を記憶する領域への第一のシークおよびアクセス;書き込み202を実行するための、ビットを記憶する領域への第二のシークおよびアクセス;およびビットをクリーンとしてマークするための「ダーティー」指示子302を記憶している領域への第三のシークおよびアクセスである。これら複数のアクセスは、記憶装置106のパフォーマンス(たとえばレイテンシーおよびスループット)を大幅に低下させることがありうる。さらに、「ダーティー」ビット追跡のこの変形によって引き起こされる記憶装置106の組織的な使用に関わる増大した物理的な摩滅は、意図せずして、記憶装置104の物理的障害118を早めることになりかねない。
図3は、一組の記憶装置106によって提供される記憶セット(storage set)102についての「ダーティー」情報を追跡するための第二の例示的な技法304をも描いている。この第二の例示的な技法304は、記憶セット102のそれぞれのバイトについての「ダーティー」指示子が記録されうる別個の不揮発性メモリ306、たとえば別個のバッテリー308を有する半導体記憶デバイスを含めることに関わる。たとえば、それぞれのデータセット104の書き込み202の要求はモニタリングされ、この別個の不揮発性メモリ306に記録され、書き込み202が完了したときにクリアされてもよい。
この第二の例示的な技法304は、一般的に、また図3に示した第一の例示的な技法304に対して、いくつかの利点を呈する。第一の例として、別個の不揮発性メモリ306のアクセスは記憶セット102への書き込み202の実行と同時並行して起こりうるので、記憶装置106のパフォーマンス(たとえばレイテンシーおよびスループット)は、この技法を含めることによって減退しないことがありうる。第二の例として、「ダーティー」指示子306をメモリの別個の部分に記憶することは、記憶セット102の容量を減らすことを回避しうる。第三の例として、「ダーティー」指示子302の記憶を記憶装置106の物理的な媒体から分離することは、記憶セット102の障害118の場合に「ダーティー」指示子302を保存しうる。たとえば、記憶装置106の一部における物理的な欠陥が、欠陥のある部分に記憶されたバイトについての「ダーティー」指示子302の記憶や取り出しに影響しないことがあり、電力障害の場合、別個の不揮発性メモリ306はバッテリー308を使って動作し続けることができる。第四の例として、別個の不揮発性メモリ306においてダーティーと示されているバイトのみに集中することによって、クリーニング・プロセスが、かなり長引かされることができる。
しかしながら、この第二の例示的な技法304も独特の不都合な点を呈する。第一の例として、別個のハードウェアを含めることは、記憶セット102のコストおよび複雑さを有意に高める。第二の例として、記憶装置106の障害の可能性に加えて、記憶セット102の管理は、別個の不揮発性メモリ306の障害にも対処しなければならないことがある。さらに、別個の不揮発性メモリ306は記憶セット102に記憶されていないので、記憶セット102の冗長性および故障耐性を増進するための機構には含まれず、別個の不揮発性メモリ306の単一の障害が記憶セット102全体についての「ダーティー」指示子302の喪失につながりうる。第三の例として、記憶セット102のそれぞれのバイトについての「ダーティー」指示子302の追跡は、このタスクを満たすために高いスループットおよび大きな容量を提供しなければならないことがありうる別個の不揮発性メモリ306のアクセスの数の多さおよびレートの高さにつながりうる。実際、別個の不揮発性メモリ306は、記憶セット102中の最高の記憶装置106についてのみならず、別個の不揮発性メモリ306によってサービスされる全記憶装置106の活動の組み合わされたレートについて書き込み活動を記録するための十分なスループットを提供しなければならないことがありうる。第四の例として、別個の不揮発性メモリ306が記憶装置106と統合されない場合(たとえば、RAIDコントローラにおいて実装される場合)、「ダーティー」指示子302は、記憶装置106ほどポータブル(portable)ではないことがありうる。たとえば、RAIDコントローラの無関係な障害の場合、記憶装置106は異なるRAIDコントローラに再配置され、該異なるRAIDコントローラによってアクセスされてもよいが、「ダーティー」指示子302は、フルに動作している障害を起こしたRAIDコントローラの別個の不揮発性メモリ306内に留まることがありうる。実際、別個のRAIDコントローラ中に挿入されているときは、ユーザーにとって、RAIDコントローラの障害に関わっていなかった記憶装置106がなぜ非一貫でありえ、よってクリーニングされなければならないことがありうるのか、はっきりしないことがありうる。これらおよびその他の不都合な点は、記憶セット102への書き込み202の状態を追跡することによって障害118からの記憶セット102の回復を容易にする、図3のものに似た多くの技法によって示されることがある。
〈B.提示される技法〉
本稿に提示されるのは、故障耐性があり、高性能で、コスト効率のよい仕方で高速なクリーニング・プロセスを可能にしうる、一組の記憶装置106によって提供される記憶セット102への書き込み202の状態を追跡するための技法である。これらの技法によれば、記憶セット102は、特定の領域サイズの諸領域(たとえば一ギガバイトの領域)に配分されてもよく、各領域内の一つまたは複数の位置108への書き込み110のペンディング状態を記録するために、領域記述子が生成されてもよい。領域記述子は、領域が位置しているのと同じ記憶装置106上に、または記憶セット102の異なる記憶装置106上に記憶されていてもよい。特定の位置108への書き込み110の要求が受領されると、本技法のある実施形態は、まず、位置108を含んでいる領域を同定してもよく、次いで、位置108を含んでいる領域の領域指示子がすでにダーティーとマークされているかどうかを判別してもよい。すでにダーティーとマークされていなければ、本実施形態は、まず、その領域をダーティーとマークするようその領域指示子を更新してもよい。だが、すでにダーティーとマークされていたら、本実施形態は、領域指示子を更新する必要なく書き込み110を進めてもよい。書き込み110が完了したのち、本実施形態は、その領域の領域指示子をクリーンとしてマークしてもよい。特に、本実施形態は、すぐにその領域をクリーンとして更新しないよう構成されていてもよく、そうする前に短期間待ってもよい。同じ領域に対する書き込み110(同じ位置108の上書きまたはシーケンシャルに後続するデータセット104もしくは他の仕方で近くのデータセット104への書き込み110のいずれであれ)のその後の要求が最初の書き込み110のすぐあとに続く場合に備えてである。この遅延は、領域指示子の「クリーン」への書き換えのすぐあとに領域指示子を「ダーティー」に書き換えることを避けることができ、よって記憶装置106へのアクセスを節約し、記憶装置106のパフォーマンスおよび寿命を向上させることができる。
図4は、本稿で提示される技法に基づく二つの記憶装置106によって提供される記憶装置102へのペンディングしている書き込み110の追跡を現わす例示的なシナリオの図解を示している。ここで、記憶装置106は協調して、記憶セット102の同一のコピーを記憶する(たとえば、RAID 1方式に基づく記憶セット102のミラーリング)。この例示的なシナリオ400において、本技法によれば、記憶装置106によって提供される記憶セット102はある領域サイズの領域402(たとえば、一ギガバイトの領域)に配分される。各領域402は、記憶セット102内の位置108のあるセット(たとえばある範囲のアドレス)内に記憶されるデータセット104を含んでいる。各記憶装置106上で、領域記述部404が生成されてもよい。ここで、領域402は、その領域402をなすデータセット104に対して実行される書き込み110のペンディングまたは完了状態に従って「ダーティー」または「クリーン」とマークされてもよい。たとえば、第一の時点408では、記憶セット102内の第一の位置108に対して第一の書き込み110が要求され、記憶装置106は、まず、第一の位置108を含んでいる領域402を同定し、次いで領域記述子404においてその領域402をダーティーとマークすることによって、第一の書き込み110の実行を開始する。領域402をダーティーとマークしたら、記憶装置106は次いで記憶セット102内の位置108への第一の書き込み110を開始する。第二の時点410において、第一の記憶装置106は第一の書き込みを完了していることがありうるが、まだ領域記述子404において領域402をクリーンとマークしていなくてもよい。しかしながら、記憶装置106の不完全な同期のため、第二の時点410において、第二の記憶装置106がまだ第一の書き込み110を完了していないことがありうる。
図4の例示的なシナリオにおいてさらに示されるように、第三の時点412において、記憶セット102内の異なる位置108に対して第二の書き込み110が要求されてもよい。したがって、記憶装置106は第二の書き込み110の位置106に関連付けられた領域402を同定し、この位置106も第一の領域402内であることを判別する。さらに、第一の領域402はすでに領域記述子404においてダーティーとマークされているので、記憶装置106は領域記述子404を冗長に更新することを控える。次いで、記憶装置106は書き込み110の実行を開始し、第二の記憶装置106は最終的には書き込み110を完了し、次いで(可能性としては、第一の領域402へのさらなる書き込み110が要求されない短い遅延ののちに)領域記述子404を更新して第一の領域402をクリーンとマークする。しかしながら、第一の記憶装置106によって実行された書き込み110は障害118(たとえば、一時的な切断、ソフトウェア・クラッシュまたは電力障害)によって中断される。第四の時点414では、第一の記憶装置106は再びアクセス可能になり、障害118によって中断され、訂正されなければ記憶セット102中の潜在的には破局的な非一貫性122(たとえば、記憶装置106上に記憶された記憶セット102の同一の諸コピーの乖離)を呈しうる書き込み110の訂正を保証するよう、第一の記憶装置106をクリーニング416するタスクが開始される。しかしながら、データセット104のすべてを第二の記憶装置106の対応するデータセット104と比較するのではなく、クリーニング416は、領域記述子404を利用してもよく、ダーティーとマークされた領域402のみをクリーニングしてもよい。このように、第四の時点414においては、第一の記憶装置106の領域記述子404において第一の領域402のみがダーティーとマークされているので、クリーニング416は第一の領域402のデータセット102を第二の記憶装置106の対応するデータセット416と比較してもよく、非一貫性を見出したら、第一の記憶装置106上の正しくないデータセット104上にデータセット104をコピーしてもよい。
このようにして、図4の例示的なシナリオ400に一例が描かれている本稿に提示される技法は、障害118後の記憶装置106のクリーニング416を可能にしうる。さらに、これらの技法は、図3に示したものを含め他の技法と比べて有利な仕方でこのクリーニング416を達成する。第一の例示的な例として、第一の記憶装置106のクリーニング416は、クラッシュ118の時点で少なくとも一回の書き込み110が最近発生していた領域402の部分集合に記憶されているデータセット104に限定される。たとえば、第二の領域402はしばらくの間書き込み110を経験していないので、第二の領域402はクリーニング416に含められない。第二の例示的な利点として、一組の領域402を含む領域406についてのダーティーおよびクリーン情報のマーク406ならびに書き込み110後にそのような領域402を遅れてクリーンとマークすることは、ダーティー領域の追跡によって引き起こされるパフォーマンス損失を著しく軽減しうる。たとえば、第一の書き込み110後に短期間にわたって第一の領域402のダーティーとのマーク付け406をそのままにしておくことにより、記憶装置106は、同じ領域402内の別の位置106への第二の書き込み110を受け取った際に再びダーティーとマークするだけのために領域402をダーティーとマークすること406を省略できる。それにより、領域記述子404への各記憶装置106によるアクセスが三回から一回に低減される。この効率性の利得は、ダーティー領域情報が位置108ごとに追跡されたり、あるいは記憶装置106が各書き込み110に続いて領域記述子404をすぐに更新したりしたとしたら(たとえば図3の第一の例示的な技法300に示されるように)、達成し得なかったものである。第三の例示的な利点として、単独位置108ではなく領域406についての領域記述子404の記憶は、記憶装置106の利用可能な容量を著しく縮小することはない(これは、記憶装置106の全容量の50%が利用可能な容量のダーティーまたはクリーンを追跡するために使われる図3の第一の例示的な技法300とは対照的である)。第四の例示的な利点として、ダーティー領域の追跡は、追加的なハードウェアなしで達成され、よって、図3の第二の例示的な技法304と比べ、コスト、複雑さ、電力消費および追跡技法の障害の機会を低減する。これらおよびその他の例示的な利点は、本稿に提示される技法に基づく、記憶セット102を提供する記憶装置106のためのダーティー領域情報の追跡を通じて達成可能でありうる。
〈C.例示的実施形態〉
図5は、記憶セット104へのペンディングの書き込みを記録する例示的な方法500として描かれている、これらの技法の第一の例示的な実施形態の図解を示している。例示的な方法500は、たとえば装置のメモリ・コンポーネント(たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク)に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法500は、502において開始され、プロセッサ上で命令を実行する(504)ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置106上で、該記憶装置106上に記憶される記憶セット102を、ある領域サイズに従って少なくとも二つの領域402に配分して領域記述子404を生成する(506)よう構成されている。前記命令はまた、記憶セット102中の位置108に記憶されるべきデータセット104を受領(508)したら、データセット102の位置108を含んでいる記憶セット102内の領域402を同定し(510);領域記述子404においてその領域402をダーティーとしてマークし(512);記憶セット102中の位置108におけるデータセット104の記憶を開始する(514)ようにも構成される。前記命令はまた、記憶セット102中の位置108にデータセット104を記憶した後、領域記述子404において領域402をクリーンとしてマークする(516)ようにも構成される。このようにして、前記命令は、本稿に提示される技法に基づく、記憶セット102内でペンディングの書き込み110の記録を達成し、よって例示的な方法500は518において終了する。
図6は、プロセッサを有するコンピュータにアクセス可能な少なくとも一つの記憶装置106によって記憶される記憶セット102をクリーニングする(416)例示的な方法600として描かれている、これらの技法の第二の例示的な実施形態の図解を示している。例示的な方法600は、たとえば装置のメモリ・コンポーネント(たとえば、メモリ回路、ハードディスクドライブの円盤、半導体メモリ・コンポーネントまたは磁気もしくは光ディスク)に記憶された命令のセットであって、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実行させるものとして実装されてもよい。例示的な方法600は、602において開始され、プロセッサ上で命令を実行する(604)ことに関わる。具体的には、前記命令は、少なくとも一つの記憶装置106から、該記憶装置106上に記憶される記憶セット102をある領域サイズに従って少なくとも二つの領域402に配分する領域記述子404を取得する(606)よう構成されている。前記命令はまた、領域記述子404においてダーティーとマークされているそれぞれの領域402について(608)、それらの領域402内のデータセット104のクリーニング416を開始し、領域402内のデータセット104のクリーニングを完了したら、領域記述子404においてその領域402をクリーンとマークするようにも構成されている。このようにして、前記命令は、本稿に提示される技法に基づく、障害によって中断された書き込み110によって引き起こされた非一貫性122を訂正することによって記憶セット102のクリーニングを達成し、よって例示的な方法600は518において終了する。
図7は、本稿に提示される技法を適用するよう構成されたプロセッサ実行可能命令702を有する例示的なコンピュータ可読媒体700として示される、これらの技法の第三の例示的な実施形態を提示している。そのようなコンピュータ可読媒体はたとえば、メモリ半導体(たとえば、静的ランダム・アクセス・メモリ(SRAM)、動的ランダム・アクセス・メモリ(DRAM)および/または同期動的ランダム・アクセス・メモリ(SDRAM)技術を利用した半導体)、ハードディスクドライブの円盤、フラッシュメモリ・デバイスまたは磁気もしくは光ディスク(たとえばCD-R、DVD-Rまたはフロッピー(登録商標)ディスク)のような有体なデバイスに関わるコンピュータ可読記憶媒体を含んでいてもよく、装置710のプロセッサ712によって実行されたときに該装置710に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。そのようなコンピュータ可読媒体は、さまざまな物理現象を通じて伝搬させられうる信号(たとえば電磁信号、音波信号または光信号)のようなさまざまな型の通信媒体をも(コンピュータ可読記憶媒体とは異なる技術のクラスとして)含みうる。そのような伝搬は、さまざまな有線シナリオ(たとえばイーサネット〔登録商標〕または光ファイバーケーブルを介する)および/または無線シナリオ(たとえばWiFiのような無線ローカル・エリア・ネットワーク(WLAN)、ブルートゥースのようなパーソナル・エリア・ネットワーク(PAN)またはセルラーもしくは電波ネットワーク)においてでありうる。そのような媒体は、装置のプロセッサによって実行されたときに該装置に本稿に提示される技法を実装させるコンピュータ可読命令のセットをエンコードしていてもよい。あるそのような実施形態では、プロセッサ実行可能命令702は、図5の例示的な方法500のような記憶セット(storage set)102をなす記憶装置106にペンディングの書き込み110を記録する方法を実行するよう構成されていてもよい。もう一つのそのような実施形態では、プロセッサ実行可能命令702は、図6の例示的な方法600のような記憶装置106のうちの少なくとも一つに記憶された領域記述子404を使って記憶セット102をなす記憶装置106をクリーニングする方法を実行するよう構成されていてもよい。本稿に提示される技法に基づいて動作するよう構成される、多くのそのようなコンピュータ可読媒体が当業者によって考案されうる。
〈D.変形〉
本稿で論じられる技法は、多くの側面における変形をもって考案されてもよい。いくつかの変形は、追加的な利点を提示し、および/またはこれらおよび他の技法の他の変形に関する不都合な点を軽減しうる。さらに、いくつかの変形は、組み合わせて実装されてもよく、いくつかの組み合わせは、相乗作用を通じて追加的な利点および/または軽減された不都合な点を特徴としうる。そうした変形は、さまざまな実施形態(たとえば図5の例示的な方法500および図6の例示的な方法600)に組み込まれてそのような実施形態に対して個別的および/または相乗的な利点を付与しうる。
〈D1.シナリオ〉
これらの技法の実施形態の間で変わりうる第一の側面は、そうした技法が利用されうるシナリオに関する。この第一の側面の第一の変形として、これらの技法は、さまざまな型のデータセット104を有する多くの型の記憶セット102との関連で使用されうる。それには、さまざまな型のバイナリー・オブジェクトを記憶するバイナリー記憶システム;ファイルを記憶するファイル・システム;メディア・オブジェクトを記憶するメディア・ライブラリ;多くの型のオブジェクトを記憶するオブジェクト・システム;レコードを記憶するデータベース;電子メール・メッセージを記憶する電子メール・システムが含まれる。この第一の側面の第二の変形として、これらの技法は、ハードディスクドライブ、半導体記憶デバイス、不揮発性メモリ回路、テープ・ベースの記憶デバイスおよび磁気および光ディスクを含む多くの型の記憶デバイス106とともに使用されうる。そのような記憶装置106は、本技法を実装する(コンピュータのような)装置710に直接接続されてもよいし;有線または無線のローカル・エリア・ネットワーク(たとえば802.11 WiFiネットワークまたはアドホック接続または赤外線接続)を通じてアクセス可能であってもよいし;および/または有線または無線の広域ネットワーク(たとえば、セルラー・ネットワークまたはインターネット)を通じてアクセス可能であってもよい。さらに、これらの技法は二つ以上の記憶装置106とともに使われてもよいく、それら二つ以上の記憶装置106は、独立して動作する(たとえば、ソフトウェア・プロセスを通じて独立してアクセスされる記憶装置106);ゆるやかに協働しつつ動作する(たとえば、独立して動作するが、記憶セット102を共有する他の記憶装置106について知らされており、これと通信してもよい記憶装置106);または緊密な協働をもって動作する(たとえば、安価なディスクの冗長アレイ(RAID)コントローラがいくつかの記憶装置106を記憶システムのコンポーネントとして管理する)。この側面の第四の変形として、これらの技法の一部または全部が、コンピューティング環境内の一つまたは複数のコンポーネント内で、記憶装置106へのアクセスをもつコンピュータまたは装置の揮発性または不揮発性に記憶されているソフトウェア命令のセット(たとえば、オペレーティング・システム・プロセスまたはハードウェア・ドライバ)のように;記憶装置106とインターフェースをもつよう構成された記憶システム(たとえばRAIDコントローラ)によって;あるいは記憶セット102のそれぞれの記憶装置106において、実装されてもよい。
この第一の側面の第五の変形として、領域102内のデータセット104をクリーニングするために多くの型のクリーニング技法が使用されうる。第一の例として、図1の例示的なシナリオ100において例示されているように、記憶セット102は(同じ記憶装置106上におよび/または異なる記憶装置106上に)データセット104の同一のコピーを記憶してもよい。この変形では、データセット104のコピーを、非一貫性122を検出および訂正するために当該データセット104の別のコピーと比較することによってクリーニングするために、ミラーリング・クリーニング技法が使用されてもよい。(たとえば、記憶セット102の第二の領域402に記憶されているミラー・データセットに対応する領域402のそれぞれのデータセット104について、該データセット104をミラー・データセットと同期させる。)第二の例として、図2の例示的なシナリオ200に示されるように、記憶セット102は(同じ記憶装置106上におよび/または異なる記憶装置106上に)チェックサムまたはハッシュコードのような、それぞれのデータセット104の検証子202を記憶してもよく、非一貫性122を検出するために、そうした検証子がデータセット104(および可能性としては記憶セット102内の他のデータセット104)の内容と比較されてもよい。そのようなシナリオでは、多くの型の検証子を含めることができる。たとえば、パリティ・ビットのような比較的簡単な検証子202はデータセット104について効率的に計算されることができ、データセット104における非一貫性122の存在または不在の迅速な検出につながりうる。あるいはまた、向上した信頼性、向上した詳細さ(たとえば、データセット104のうち非一貫的である部分を示す)および/または誤り訂正機能など、追加的な特徴を呈する複雑な検証子202が利用されてもよい。これらの変形では、非一貫性122を同定し、可能性としては訂正するために、データセット104の検証子を検証することによってデータセット104をクリーニングするために、検証子クリーニング技法が使用されてもよい。第三の例として、データセット104は、以前に存在していなかったデータセット104の破損など、単に内容を検査することによってクリーニングされてもよい。非一貫性122が検出されたとき、破損したデータを修復するおよび/またはデータセット104中の残りのデータをサルベージするために、再構成技法が利用されてもよい。当業者は、本稿に提示される技法が有用となりうるシナリオの多くの型および変形を識別しうる。
〈D2.領域記述子構造の変形〉
これらの技法の実施形態の間で変わりうる第二の側面は、領域記述子404の性質に関する。この第二の側面の第一の変形として、記憶セット102は、多くの仕方で、領域記述子404内で同定される諸領域402に配分されてもよい。この第一の変形の第一の例として、領域サイズの選択が、本技法のさまざまな側面に影響しうる。たとえば、記憶セット102中の全位置108のダーティーまたはクリーンな状態を追跡することは、記憶セット102の容量のかなりの――おそらくは50%もの――損失につながることがあり、実際、クリーニング・プロセスの継続時間を有意に改善しないことがありうることが理解されうる。各ビットについてダーティーおよびクリーン・ビットを読むために記憶セット102全体をスキャンすることは、非一貫性122を検出するために記憶セット102全体をスキャンするのと同じくらいかかることがありうるからである。各ボリューム、各パーティションまたは各記憶装置106について単一の「クリーン」または「ダーティー」のマーク付け406を記憶するなど、記憶セット102の非常に大きな部分についてクリーンまたはダーティー状態を追跡することは、復旧がきわめて引き延ばされるという性質を、受け容れられるくらいには軽減しえないことも理解されうる。大きなボリュームまたは記憶装置106における単一位置206への書き込みがボリュームまたは記憶装置106全体のクリーニング416につながることがあるからである。これらの考察に鑑み、領域サイズの選択が本稿で提示される技法のパフォーマンスにかなり影響しうることが理解されうる。しかしながら、領域サイズについて、それぞれ何らかのトレードオフを呈しうる、受け容れ可能な選択肢の範囲が存在しうる。たとえば、より大きな領域サイズを選択することは、より粗い粒度レベルで「ダーティー」および「クリーン」領域の追跡を可能にでき、これはペンディングの書き込み110の追跡の使用のための記憶セット102の容量の消費を軽減するとともに、領域記述子404が領域402をクリーンまたはダーティーとしてマークするために更新される頻度も低下させるが、障害118後のより長いクリーニング416を必要とすることがありうる。ある領域402がダーティーとしてマーク付け406されている場合により大きな領域402のクリーニング416につながるからである。逆に、より小さな領域サイズを選択することは、より細かい粒度でのペンディングの書き込み110の追跡となって、障害118後、クリーニングされるべきデータセット104の、より限定された、精密な指定のため、比較的迅速なクリーニング416を可能にしうるが、記憶セット102の容量のより大きな消費(領域記述子404がより多くの領域402についての情報を含むため)および/または記憶セット102のルーチン動作におけるより大きなパフォーマンス・ペナルティ(さまざまな位置108への書き込み110のセットが、それぞれ記憶セットのより小さな諸部分をカバーするより多くの領域402と関連付けられる可能性が高いため)につながりうる。
これらの考察に鑑み、記憶セット102の領域402の領域サイズ(単数または複数)を選択または指定するために、多くの技法が使用されうる。たとえば、領域サイズは、特定の記憶セット102または記憶装置106について固定的に定義されてもよい。異なる領域サイズが、異なる記憶装置106について(たとえば、アーカイブ化のような、パフォーマンス特性がコンピューティング環境に有意に影響しない状況で使われる記憶装置106は、パフォーマンスをより著しく低下させるが、より速いクリーニング416および障害118からの復旧を提供するより小さな領域サイズを使ってもよい)、および/または異なる記憶セット102について(たとえば、アクセシビリティが貴重であるデータは、より速いクリーニング416および障害118からの復旧を可能にする、より小さな領域サイズを使って追跡されてもよい)選択されてもよい。同じデータセット102中の異なる領域402について異なる領域サイズを利用してもよい。領域サイズはまた、記憶装置106および/または記憶セット102のパフォーマンス特性に基づいて、および/またはユーザー選好に基づいて調整されてもよい。代替的または追加的に、ユーザーが領域サイズを選ぶことが許されてもよい。たとえば、ある実施形態は、領域サイズについてユーザーにいくつかの選択肢を提示してもよく、各領域サイズに鑑みての障害118からの復旧に係る回復時間を予測してもよい。もう一つの代替として、ユーザーが、最大の受け容れ可能な回復期間を指定してもよく、本技法のある実施形態は、最大の受け容れ可能な回復期間内で障害118からの回復を可能にする可能性が高い領域サイズを選択してもよい。
この第二の側面の第二の変形として、領域記述子404はさまざまな仕方で、たとえばアレイ、連結リスト、テーブル、データベースまたはビットマップとして、構成されてもよい。さまざまなデータ構造は特定の利点を呈してもよい。一つのそのような例として、単一の次元をもつアドレッシング・システムをもって(たとえば、アドレスの単一の数値シーケンスとして)記憶されているアドレスを有する記憶セット102について、領域記述子404は、記憶セット102の諸領域402に逐次対応する諸アレイ・エントリーのセットを有するダーティー領域アレイとして実装されてもよく、単に該ダーティー領域アレイのアレイ・エントリーにアクセスすることによって領域402をダーティーまたはクリーンとしてマークしてもよい。これは、任意の領域402についてのマーク付け406へのO(1)のアクセス時間を達成する。あるいはまた、領域記述子404は、シーケンシャルなジャーナルとして実装されてもよい。ここで、各マーク付け406は、マークされたデータセット104の記憶セット102中の位置108に関わりなく、以前にコミットされたマーク付け406にシーケンスにおいて続いて書き込まれる。この領域記述子404は、特定の領域402についてのマーク付け406に対してより遅い読み出しアクセスにつながりうる(あるエントリーについての現在のマーク付け406を同定することは、エントリーを見出すためにジャーナルのかなりの部分、可能性としてはジャーナル全体をスキャンすることになるため)が、領域記述子402へのシーケンシャルな諸書き込みのさらなるパフォーマンス利点を可能にしうる。さらに、領域記述子404の意味内容は種々の仕方で情報を含んでいてもよい。たとえば、領域術子404は、領域402を表わすレコードまたはビットを特定的にマークする406ことによって領域402を「クリーン」としてマークしてもよいし、あるいは、クリーニングされた領域402についてのレコードを領域記述子404から放逐することによってそれを行なってもよい。これらの変形は、領域記述子404内にレコードをもたない領域402がクリーンとしてマークされたか(おそらくは最近)、あるいは単にダーティーともクリーンともマークされなかったのか(たとえばかなりの時間の長さにわたって書き込み104を受けなかった)について内容的な差を表わす。
この第二の側面の第三の変形として、領域記述子404はさまざまな仕方で記憶セット102内の領域402の位置108を示しうる。図8は、それぞれの領域402によって表わされる記憶セット102内の位置を指定するためのいくつかの異なる技法を備える例示的なシナリオ800の図解を示している。この例示的なシナリオ800では、ハードディスクドライブのような記憶装置106は、記憶セット102の少なくとも一部を含むデータを記憶するよう構成される。記憶装置106は、それぞれの物理アドレス802にデータを記憶するよう構成されており、該アドレスを記憶媒体(たとえば、円盤、セクタおよびトラック)上の物理位置に変換するハードウェアを含む。記憶装置106上に記憶されるデータは、標準化されたフォーマットに従って記憶されてもよい。たとえば、物理的な媒体上に記憶されるデータは、一つまたは複数のパーティション804の位置および記述を指定するパーティション・テーブルで始まっていてもよい。各パーティションは一つまたは複数の論理ボリューム806(たとえば、コンピュータの操作環境において提示されるドライブ)を含む。記憶セット102は、一つまたは複数の論理ボリューム806内に記憶されてもよく、ある論理ボリューム806において、あるいはいくつかの論理ボリューム806を横断して、データセット104を割り当ててもよい。よって、領域記述子404は、さまざまな仕方で記憶セット102内のさまざまな位置108について領域402を同定しうる。たとえば、領域記述子404は、記憶セット102の記憶装置106上のそれぞれの領域402の物理的な位置を同定する物理的領域参照方式を利用してもよい。第一のそのような例として、領域記述子404は、各領域402によって表わされる記憶装置106の記憶媒体上の物理的な諸位置106の範囲を示すレコードを含む第一の領域テーブル808として実装されてもよい。第二のそのような例として、領域記述子404は、それぞれの領域402について、パーティション804およびパーティション804内で各領域402が始まるところのオフセットを示すレコードを含む第二の領域テーブル810として実装されてもよい。領域記述子404はまた、一つまたは複数の領域の領域サイズ(単数または複数)を記憶し、表現してもよい(たとえば、記憶セット102の領域レコードまたは別個の記述子として)。第三の例として、領域記述子404は、領域ビットマップ812として実装されてもよい。領域ビットマップでは、諸パーティション804が特定の領域サイズの一連の領域402に配分されてもよく、該ビットマップは、領域402の「ダーティー」または「クリーン」状態の一ビット指標を記憶してもよい。あるいはまた、領域記述子404は、記憶セット102中のデータの論理的な配置内でそれぞれの領域402の論理的な位置を同定する論理的領域参照方式を利用してもよい。一つのそのような例として、領域記述子404は、各領域402が始まる各論理ボリューム806内の論理的な位置を同定する第三の領域テーブル814として実装されてもよい。記憶装置106の記憶媒体上の物理的な位置106とより密接に同定されるアドレッシング技法は、記憶装置106にとってはほとんど計算を必要とせず、論理的に領域402にアクセスするプロセスにとってはより多くの計算を含み、逆もまたしかりであることが理解されうる。
この第二の側面の第四の変形として、これらの技法の実施形態は、記憶装置106上のさまざまな位置において領域記述子404を記憶するよう構成されていてもよい。この第四の変形の第一の例として、領域記述子404は、記憶装置404上の特定の位置に記憶されてもよい(たとえば、記憶セット102の諸データセット104を記憶しているあるパーティション804の上に、あるいは該諸データセット104を記憶している諸パーティション804の外部のある定義された位置に)。この第四の変形の第二の例として、領域記述子404は、第二の記憶装置10の諸領域402へのペンディングの書き込み110を追跡するために第一の記憶装置106に記憶されてもよい。
この第二の例の第五の変形として、これらの技法のある実施形態は、記憶セット102について二つ以上の領域記述子404を記憶するよう構成されていてもよい。この第五の変形の第一の例として、記憶セット102の領域402の同じセットを表わす領域記述子404の二つ以上の同一のコピーが、同じおよび/または異なる記憶装置106に記憶されてもよい。同一のコピーの記憶は、記憶セット102の故障耐性を改善しうる(たとえば、記憶装置106の回復不能な障害、領域記述子404を記憶している記憶装置106の部分の障害または領域記述子404内のデータの破損、たとえば領域記述子404への書き込み110を実行している間の障害118の発生の場合)。障害118からの回復は、領域記述子404の別のコピーの使用を通じて実行されてもよい。バックアップ施策として記憶セット102の完全クリーニング416が実行されうるので、領域記述子404の障害が破局的となる可能性は高くないものの、それでも、第一のコピーが破損または利用不能となっても回復をすみやかに行なうために、領域記述子404の第二のコピーを記憶しておくことが有利であることがあることは理解されうる。さらに、領域記述子404の同一のコピーを複数の記憶装置106上に、あるいは同じ記憶装置106の異なる領域に記憶することが有利でありうる。(たとえば、ファイル・システムの第一の物理セクタまたは第一の部分など領域記述子404の第一のコピーが記憶されている記憶装置106の部分への損傷の場合、記憶装置106の異なる部分に記憶されていた当該領域記述子404の第二の同一のコピーが取得可能かつ使用可能でありうる。)
この第五の変形の第二の例として、領域402の特定のセットについての領域記述子404の複数のコピーが一つまたは複数の記憶装置106に記憶されてもよいが、常に同一であるのではなく、それらの領域記述子404は、種々の時点における記憶セット102のクリーンおよびダーティー状態を反映させるよう逐次更新されてもよい。この逐次的な更新は、たとえば領域記述子404のコピーを更新している間に障害118が発生して領域記述子404が非一貫的なまたは破損した状態となる場合に、有利でありうる。クリーニング416および回復において他方のコピーが利用可能でありうるからである。この第二の例についての第一のシナリオとして、いずれも領域402の同じセットを表わす、領域記述子404の二つのコピーが記憶装置104上で保持されてもよい。だが、それらの領域記述子404を更新するために、第一の更新は、領域記述子404の一方のコピーを上書きすることによって行なわれてもよく、次の更新は領域記述子404の他方のコピーを上書きすることによって行なわれてもよい。さらに、本技法のある技法が領域記述子404に上書きするとき、該実施形態は、領域記述子404のための検証子202(たとえばチェックサム)およびシーケンス・インジケーター(たとえばインクリメントする整数または上書きの時刻)をも書き込んでもよい。障害118に続いて、本実施形態は、利用可能な領域記述子404のすべてを検査してもよく、その検証子202に基づいて有効であるもののうち最高のシーケンス・インジケーター(たとえば、最高のインクリメントする整数または最新の書き込み時刻)を有する領域記述子404を、クリーニングにおいて使うために選択してもよい。領域セットのわずかに古くなったバージョンを使ってクリーニング416を実行することが、非一貫性118をもつ領域402をクリーニングし損なうこと(たとえば、擬陰性)につながらないことがあることは理解されうる。領域402への書き込み110は、該領域402のマーク付け406が、最高のシーケンス・インジケーターおよび有効な検証子202をもつ完全に書き込まれた領域記述子404の形で記憶セット102にフルにコミットされたあとにのみ始まるからである。そのため、領域記述子406を書き込んでいる間の障害118はペンディングの書き込み110を記録し損なうことにつながらいのである。逆に、古くなった領域記述子402は擬陽性につながりうる。(たとえば、ある領域記述子404の書き込みの際の障害118は、以前にダーティーだった領域404をクリーンとするマーク付け404が失われることにつながることがあり、領域404は、古くなった領域記述子404に見出されるマーク付け406のために回復の際に誤ってダーティーとして扱われることがありうる。)だが、この不正確さは単に、クリーンであるとわかっていた領域404のクリーニング416に関わるわずかに引き延ばされた回復につながるのみである。
代替的または追加的に、領域402のあるセットについての領域記述子404の二つ以上のコピーが、記憶セット102の記憶装置106のそれぞれに冗長に記憶されてもよい。記憶セット102について領域記述子404を更新するために、ある実施形態は、記憶装置106のすべてで並列に領域記述子404の上書きを開始してもよい。さらに、各記憶装置106は、記憶装置106の一つまたは複数が領域記述子106を更新している間に障害118が発生するといけないから、領域記述子404とともに検証子202およびシーケンス・インジケーターを含んでいてもよい。記憶セット102の一つまたは複数の記憶装置106の障害118からの回復は、まず、それぞれの検証子202によって有効確認される全コピーのうちで最も大きなシーケンス・インジケーターをもつコピーを同定するために、利用可能な領域記述子106全部を検査することを含んでいてもよい。実際、各記憶装置106上に領域記述子494の二つのコピーを記憶するよう記憶セット102を構成することが有利でありうる。たとえば、記憶装置106全部の上の領域記述子404を更新している間に障害118が発生する場合、いずれかの記憶装置106上のわずかに古くなったコピーが使用可能であることがある。あるいはまた、同様に、領域記述子404のすべてを同時に更新せず、領域記述子404の第一の更新を記憶装置106の第一の部分集合に記憶されているコピーに対して実行し、領域記述子404の後続の更新を記憶装置106の第二の部分集合に記憶されているコピーに対して実行することが有利であることがある。
この第五の変形の第三の例として、記憶セット102は、該記憶セット102の異なる領域402に対する更新をそれぞれ記録する二つ以上の領域記述子404を含んでいてもよい。第一のそのような例として、第一の領域記述子404は、第一の記憶装置104に記憶されている記憶セット102の諸領域402についてダーティーおよびクリーン領域情報を記録してもよく、第二の領域記述子404は、第二の記憶装置104に記憶されている記憶セット102の諸領域402についてダーティーおよびクリーン領域情報を記録してもよい。第二のそのような例として、記憶セット102を諸領域402に配分したのち、本技法のある実施形態は、それぞれ(領域402の記憶セット102の記憶装置106の間での物理的な位置に関わりなく)領域402の部分集合を含む領域セットについて「ダーティー」および「クリーン」情報を記憶する二つ以上の領域記述子404を生成してもよい。それは、生成され、一つまたは複数の記憶装置106に記憶されてもよい。諸領域402の諸記憶セットへの配分は、たとえば、それぞれのデータセット104の特性に鑑みて選択されてもよい。(たとえば、第一の領域セットは、より貴重なまたはより機微なデータを記憶する領域402を含んでいてもよく、第二の領域セットはそれほど貴重でないデータを記憶する領域402を含んでいてもよい。)代替的または追加的に、二つ以上の領域記述子404に対するそれらの領域の分配は、明示的に達成されてもよいし(たとえば、それぞれ領域402の指定されたセットを表わす二つ以上の独立した領域記述子404を生成することによって)、あるいは暗黙的に達成されてもよい(たとえば、当該領域記述子404についての記憶スペースを、二つ以上の記憶装置106など二つ以上のスペース割り当てを横断して、分配することによって)。さらに、いくつかのシナリオでは、記憶セット102の領域402のある部分集合についてのみダーティーおよびクリーン情報を追跡することが望ましいことがある。たとえば、キャッシュまたはインデックスのような、破損したら記憶セット102の他のデータから再生成できる、処分可能なデータを含む領域402は全く追跡されなくてもよい。
この第二の側面の第六の変形として、領域記述子(単数または複数)404は、記憶セット102の同期技法に適合する仕方で記憶されてもよく、異なる記憶装置106上の領域記述子404のいずれかの同一のコピーにアクセスする機能および/または記憶セット102と同様の故障耐性を通じて、領域記述子404に対して、向上したパフォーマンスなど、さまざまな特徴および利点を提供してもよい。(たとえば、記憶セット102が、記憶装置障害許容度の範囲内の記憶装置106の障害からの回復機能など、故障耐性のある記憶技法を実装する場合、領域記述子404は、同じ障害耐性のある記憶技法を使って記憶されてもよい。)あるいはまた、領域記述子404は、別個の技法のセットを可能にする仕方で記憶されてもよい。たとえば、それぞれの領域記述子404は、該領域記述子404の領域記述子検証子とともに記憶されてもよく、領域402が該領域記述子404において「クリーン」または「ダーティー」としてマークされるときに更新されてもよく、よって、領域記述子404の完全性の検証を可能にしてもよい。当業者は、本稿に提示される技法に基づいて生成および利用されうる領域記述子404の多くの型およびフォーマットを考案しうる。
〈D3.領域記述子の使用の変形〉
これらの技法の実施形態の間で変わりうる第三の側面は、記憶セット102の領域402をクリーンまたはダーティーとしてマークするための領域記述子404の使用に関する。この第三の側面の第一の変形として、領域記述子404の使用は、該領域記述子404の容量の管理を容易にするよう設計されてもよい。いくつかの型の領域記述子404では、図8の例示的なシナリオ800における領域ビットマップ814のように、領域402がマークされるときに容量は変わらなくてもよい。しかしながら、他のシナリオでは、図8の例示的なシナリオ800において描かれた領域テーブルにおけるように、領域402のマーク付け406が領域記述子404の容量に影響してもよい。たとえば、領域記述子404がそれぞれの領域402についてのレコードを記憶しており、領域記述子404がある領域402を「クリーン」としてマークするのを、単に当該レコードを放逐することによって行なってもよい。あるいはまた、領域記述子404は「クリーン」とマーク付けされた領域402についてのレコードを記憶し続けてもよく、後刻(たとえば、その領域402への別の書き込み110が行なわれることなく指定された時間期間が過ぎたのちに、あるいは領域記述子404の容量が尽きたときに)、「クリーン」領域402についてのレコードを放逐してもよい。この第三の側面の第二の例として、領域記述子404の容量は静的に(たとえば、固定サイズの領域記述子404)または動的に(たとえば初期にはある領域記述子スペースを割り当てられているが、領域記述子404が、合わせると領域記述子404の容量を使い果たす諸領域402についてのレコードで満たされる際に拡張されうるサイズ変更可能な領域記述子404)割り当てられてもよい。
この第三の側面の第二の変形として、領域記述子404の使用は、領域記述子404への書き込み110の数および頻度を減らすために選択されてもよい。たとえば、領域記述子404が一つまたは複数の記憶装置106の物理的な媒体上に記憶されるので、領域記述子404の更新は、データセット104の位置108へのシークおよび書き込み110に加えて、領域記述子404へのシークおよび書き込み110を追加しうる。このように、領域記述子404が、さまざまな領域402の「ダーティー」および「クリーン」マーク付け406への変化を反映させるようすぐに自動的に更新されるとしたら、領域記述子404を含めることは、記憶装置106および記憶セット102のパフォーマンスをかなり低減させることがあり、可能性としては、各アクセスのコストを三倍まで増すことがありうる。本技法のある実施形態がそれぞれの領域402の「クリーン」および「ダーティー」状態を読むために領域記述子404にアクセスするとしたら(たとえば、領域402を「ダーティー」としてマークする406前にまず領域402が「クリーン」としてマークされているかどうかを判定するために)、さらなるパフォーマンス劣化が起こりうる。よって、領域記述子404へのアクセスを減らすことが望ましいことがありうる。
この第二の変形の第一の例として、領域402を「クリーン」および「ダーティー」としてマーク付け406することの意味がいくらか非対称的であることが理解されうる。たとえば、領域記述子404を「ダーティー」とマーク付けするために領域記述子404へのアクセスを遅らせることは受け容れ可能ではないことがある。その遅れの間に障害が起こる場合、そのような遅延は領域402を誤ってクリーンとしてリストしうるからである(それにより、障害118の際の不完全な書き込み110のため非一貫的であるかもしれない領域402がクリーンとしてマークされ、よって障害118からの回復の際のクリーニング416から除外される擬陰性状況を呈する)。しかしながら、書き込み完了後に領域402を「クリーン」としてマークする406のを遅らせるのは受け容れ可能であることがある。このシナリオは単に、擬陽性結果につながる。その場合、障害118の時点でクリーンである(たとえばペンディングの書き込み110なし)とわかっていた領域402が、回復の際にクリーニング416に含められる。だがこのスキャンは、クリーニング416の継続時間をわずかに増すだけでありえ(特に領域サイズが小さい場合)、記憶セット102の完全性を損なうものではない。さらに、書き込み110の完了後すぐに領域402を「クリーン」とマークする実施形態は、その後まもなく、同じ領域402内のデータセット104への書き込み110のもう一つの要求(たとえばシーケンシャルに後続するデータセット104または同じデータセット104の上書き)を受け取ることがあり、領域402を「ダーティー」とマークし直す必要があることがある。領域402の「クリーン」としてのマーク付け406を、領域402への切迫した二番目の書き込み110の可能性が高いことがありうる短い期間だけ遅らせることによって、それぞれ領域記述子404へのアクセスに関わる両方のマーク付け406が回避されうる。
これらの考察に鑑み、本技法のある実施形態は、領域402に記憶されているデータセット104への書き込み110の完了後、領域402の「クリーン」としてのマーク付け406を遅らせるよう構成されていてもよい。領域記述子404への「クリーン」マーク付け406の遅らされたコミットの実装は、さまざまな仕方で達成されうる。第一のそのような例として、この遅れは、「クリーン」マーク付け406のみを記憶する不揮発性メモリ、書き込みバッファを提供し、(定期的にまたは要求があったときに)すべてのそのような書き込みを一つのバッチとしてコミットすることによって実装されてもよい。たとえば、本実施形態は、領域402内のある位置108におけるデータセット106の記憶を完了したときには領域402をクリーンとして同定するよう構成されていてもよく、領域記述子404においてクリーニングされた諸領域402をクリーンとしてマーク付けする要求を受領したときに、記憶装置106上の領域記述子404において、クリーニングされた領域402をクリーンとしてマーク付けしてもよい。この要求は、たとえば、マーク付け406をフラッシュするという、プロセス(装置のオペレーティング・システムを含む)による特定的な要求を含んでいてもよく、あるいはさまざまな基準によってトリガーされてもよい。基準としては、クリーニングされた継続時間基準(たとえば、定期的に領域402のマーク付け406をコミットする)または領域記述子404のダーティー領域容量に関わる領域記述子容量基準(たとえば、領域記述子404が、指定された数の「クリーン」マーク付け406または領域記述子404の全利用可能容量の閾値などの特定の容量に達したときに領域のマーク付け406をコミットし、これは、「クリーン」なレコード406の放逐を促しうる)といったものがある。第二のそのような例として、上記遅れは、「クリーン」マーク付け406を短時間にわたってホールドして、短時間後、同じ領域402に対してその後の書き込み110が要求されなかったときにはじめて領域記述子404に「クリーン」マーク付け406をコミットすることに関わってもよい。このように、ある実施形態は、領域402内のある位置108へ書き込む110要求を受け取ると、まず、その領域402が領域記述子404においてすでにクリーンとしてマークされているかどうかを判別し、その領域492が領域記述子404において現在クリーンとマークされていると判別したときにのみ、その領域402をダーティーとマークしてもよい。
この第二の変形の第三の例として、本技法のある実施形態は、領域記述子404の揮発性メモリ表現を実装することによって領域記述子404へのアクセスの数を減らしてもよい。たとえば、記憶装置106の物理的な媒体上にそれぞれの領域402のマーク付け406を記憶することに加えて、ある装置上で動作する本技法のある実施形態は、該装置の揮発性メモリにマーク付け406を記憶してもよい。この表現の使用は、「クリーン」マーク付け406のバッチの遅らされた書き込みならびに、「クリーン」とマークされるべき領域406が現在、媒体上の領域記述子404において「クリーン」または「ダーティー」のどちらにマーク付けされているかの判定を容易にすることがある。このように、前記表現は、記憶装置106上の領域記述子404においておよび前記揮発性メモリ表現においてクリーンとマークされている領域402ならびに記憶装置106上の領域記述子404においておよび前記揮発性メモリ表現においてダーティーとマークされている領域402に加えて、いくつかの領域402が領域記述子404ではダーティーとマークされているが前記揮発性メモリ表現では(一時的に)クリーンとマークされていることがありうることを示しうる。そのようなクリーン・マーク付け406はのちに媒体上の領域記述子404にコミットされうる。
図9は、領域記述子404の揮発性メモリ表現902の実装および使用を表わす例示的なシナリオ900の図解を示している。この例示的なシナリオ900では、二つの記憶装置106が、(たとえばRAID 1方式の仕方で)記憶セット102のデータセット104の同一のコピーを記憶することによって、記憶セット102をミラーリングするよう構成されており、記憶装置106の不完全な同期によって引き起こされる潜在的な問題を克服するために、本稿に提示される技法に従って、記憶装置902(たとえば、記憶セット102を記憶する記憶装置106の一方または両方および/または別の記憶装置106)上で領域記述子404が生成され、記憶セット102のさまざまな領域402に対してペンディングの書き込み110を追跡するために利用されてもよい。しかしながら、これに加えて、揮発性メモリ904において、領域記述子404の表現906が生成されてもよく、記憶装置902に記憶されている領域記述子404と相互運用されてもよい。たとえば、第一の時点908において、記憶セット102の第二および第四の領域402内に配分されているデータセット104に対して書き込み110がペンディングであることがありうる。それらの書き込み110の要求を受け取ると、本技法のある実施形態は、記憶装置902に記憶されている領域記述子404において、また揮発性メモリ904内の表現906においては領域402をダーティーとマークしてもよく、領域402をすぐにダーティーとマークしてもよい。しかしながら、第四の領域402への書き込みが両方の記憶装置104上で完了した第二の時点910では、第四の領域402は、揮発性メモリ904内の表現906ではクリーンとマークされてもよいが、記憶装置902上の領域記述子404ではまだクリーンとマークされなくてもよい。同様に、第三の時点912では、第二の領域402への書き込み110が両方の記憶装置104において完了しており、第二の領域402は、揮発性メモリ904内の表現906ではクリーンとマークされてもよいが、記憶装置902上の領域記述子404ではまだで、第四の時点914まで遅らされてもよい。第四の時点では、記憶装置902上の領域記述子404において、両方の領域402がともにクリーンとしてマークされてもよい。揮発性メモリ904内の表現906のこの使用は、いくつかのパフォーマンス改善を呈しうる。(たとえば、記憶装置902上に記憶されている領域記述子404にアクセスする判別よりも、どの領域402がクリーンまたはダーティーとしてマークされているかをより迅速に判別することを可能にする;記憶装置902に記憶されている領域記述子404に対する、クリーン・マーク付け406のバッチ化したコミットを可能にする;そして、記憶装置902へのアクセスの数を減らす、たとえば、第三の時点912において第二の領域420への追加的な書き込み110が受領される場合、記憶装置902に記憶されている領域記述子404において領域402をクリーンとマークしてその後再びダーティーとマーク406するのではなく、領域402は単に揮発性メモリ904における表現906においてダーティーとマークされてもよい。)
図10は、決定論的な仕方で領域記述子404を更新する本技法のある実施形態によって利用されうる、例示的な状態図1000の図解を示している。最初、本技法のある実施形態は、クリーン状態1002にあってもよい。ここで、クリーンな領域402が領域記述子404においてクリーンとしてマークされている。そこであるとき、その領域402内のある位置108におけるデータセット102への書き込み110を実行するよう要求が受領され、本技法のある実施形態は、領域402をダーティーとマーク406しつつ(たとえば、記憶装置106上に記憶されている領域記述子404への書き込みを行ないながら)、マーク付け状態1004に遷移してもよい。マーク付け406が完了すると、本実施形態は、領域402がダーティーとマークされたダーティー状態1004に遷移してもよく、領域402内の追加的な諸位置に書き込む110さらなる要求のため、本実施形態は、このダーティー状態1004に留まってもよい。ダーティー領域402をフラッシュするよう要求が受領されたら、記憶装置106がフラッシュの準備ができているかどうかについて判定がなされる。(たとえば、記憶装置106が現在、記憶セットの同期を実行中である場合、あるいは記憶装置106が一時的にアクセス不能である場合には、ダーティー書き込みをフラッシュする要求は、記憶装置106の準備ができるまでホールドされる。)記憶装置106がフラッシュの準備ができている場合には、本実施形態は、フラッシュ動作を開始しつつ、フラッシュ状態1008にはいってもよい。その領域104への書き込み110の別の要求を受け取ることなくフラッシュ動作が完了する場合には、本実施形態は、クリーンとマークされた状態1010にはいってもよい。ここで、領域102はすでにフラッシュされている(たとえば、領域402への書き込み110が完了している)が、領域402は記憶装置106上の領域記述子404ではいまだダーティーとマークされている(だが、装置のメモリ904内の揮発性メモリ表現906ではクリーンとマークされていてもよい)。最後に、領域記述子404において、クリーニングされた領域402をクリーンとマークするよう要求が受領されると、本実施形態はそのマーク付け406を開始してもよく、このマーク付け406が完了すると、クリーン状態1002に戻ってもよい。しかしながら、フラッシュ中状態1008またはクリーンとマークされている状態1010の間に領域402に書き込む110何らかの要求が受領される場合には、本実施形態はダーティー状態1006に戻ることがある。このようにして、本技法のある実施形態は、ステートフルで、決定論的で、かつ比較的単純な仕方で、領域記述子404を更新しうる。本稿に提示される技法に適合しうる、領域記述子402の更新における多くの変形が、当業者によって考案されうる。
〈D4.回復の変形〉
これらの技法の実施形態の間で変わりうる第四の側面は、障害118の場合に記憶セット102の回復(クリーニング416を含む)を実行するために領域記述子404を使う仕方に関する。第一の変形では、前記回復は、障害118から生じる記憶セット102における非一貫性122を検出し、除去するために記憶セット102をクリーニング416する多くの型の技法に関わりうる。第一の例として、同一であることが期待される二つ以上のコピーとして記憶されている記憶セット102のあるデータセット104について、クリーニング416は、それらのコピーを比較して非一貫性122を検出することに関わってもよい。(たとえば、実際の内容のビットごとの比較;内容の論理的な比較、たとえば同じファイルのセットを有するが該ファイル・システムを異なるビット毎構造で表わす二つのファイル・システムのような、非実質的な構造上の相違の場合でもデータセット104の間の等価性を検出するなど;あるいはデータセット104のホールマーク(hallmark)の比較、たとえば各コピーの内容に対して計算されたハッシュコードの比較。)第二の例として、クリーニング416は、データセット104の内容の一貫性を検証するために、データセット104を表わす検証子202、たとえばチェックサムに対して一つまたは複数のデータセット104を検証することに関わっていてもよい。第三の例として、クリーニング416は、単にエラーがあるかどうかデータセット104を検査することに関わってもよい。たとえば、標準化された型のデータセット104のバイナリー内容が形式定義に従った有効な構造を呈することを検証するなど。さらに、クリーニング416は、非一貫性112の存在の単純な検出を可能にしてもよい;前記少なくとも一つの比較されるデータセット104内および/または該データセット104間での非一貫性の位置の同定を可能にしてもよい(たとえば、エラーが存在することを検出するだけでなく、データセット104の特定の部分が非一貫的であるまたは期待されたとおりでないことを検出する);および/または、非一貫性122の訂正を可能にしてもよい(たとえば、正しいデータの決定を可能にする、ハミング符号のような誤り訂正チェックサム、あるいはフォーマット上の非一貫性の訂正を可能にし、データ損失を回復または低減しうる、バイナリー・オブジェクトに適用される修復技法)。異なる型のクリーニング416が記憶セット102内の異なるデータセット104に適用されてもよい。(たとえば、より貴重なデータセット102はより複雑だが洗練された誤り訂正技法に適合する仕方で記憶されてもよく、それほど貴重でないデータセット102は単純で比較的込み入っていない仕方で記憶されてもよい。)さらに、呼び出されるクリーニング416の型は、それぞれのデータセット104の利用可能なコピーの数、検出された障害118の型、記憶装置106の型(たとえば、装置上に実装されるRAID方式)およびユーザーの関心(たとえば、ユーザーは、クリーニング416の複雑さ、信頼性および継続時間の面で異なるさまざまなクリーニング・オプションのうちから選択することが許されていてもよい)に依存してもよい。いくつかのシナリオでは、複数の型のクリーニング416が実行されてもよい。(たとえば、簡単に検出される非一貫性122の迅速な同定およびデータセット102へのアクセスの即座の回復に関わるクイック・クリーニング416と、それに続く、訂正および修復するのがより難しい非一貫性122に対処するために記憶セット102の完全性を検証する複雑なクリーニング416。)
この第三の側面の第二の変形として、記憶セット102の回復は特定の順序で実行されてもよい。たとえば、記憶セット102は多くの記憶装置上に記憶されている多くの型のデータセット104を含んでいてもよい。いくつかのシナリオでは、素朴な回復は、クリーニング416を、任意の順序で記憶セット102に適用してもよい。一方、順序付けられた回復は、記憶セット102の、それほど貴重でないまたは頻繁に要求されないデータセット104(たとえばアーカイブ・データ)を含む他の部分にクリーニング416(たとえば使用中のデータ)を適用する前にまず、記憶セット102の、貴重なまたはより多く使われるデータセット104を含むいくつかの部分にクリーニング416を適用してもよい。一つのそのような例として、記憶セット102のそれぞれの領域402は、それぞれ領域記述子404をもつ一つまたは複数の領域セットに配分されてもよく、回復は、第二の領域記述子404によって表わされる第二の領域セットの領域402をクリーニングする前に、第一の領域記述子404によって表わされる第一の領域セットの領域402をクリーニング416することに関わってもよい。
この第三の側面の第三の変形として、回復は、領域記述子404に基づいてクリーニング416を開始する前に、(たとえば領域記述子404とともに記憶されている検証子202に従って)領域記述子404の完全性を検証することを含んでいてもよい。領域記述子404の一部が検証不能である(たとえば、領域記述子404の一部に書き込んでいる際の障害118のために非一貫的となっているまたは破損している)ことが見出される場合には、回復は、領域記述子404の検証可能な部分を使って、領域記述子404の破損した部分において表わされている領域402のフル・クリーニング416を実行することに関わってもよい。あるいはまた、回復は、領域記述子404の別のコピー(たとえば、記憶セット102の同じ記憶装置106の別のどこかまたは別の記憶装置106上に記憶されている領域記述子404の、同一のまたはやや古くなっているが検証可能なコピー)を位置特定して使うことに関わっていてもよい。実際、二つ以上の領域記述子404がそれぞれ部分的に破損していることが見出される場合、回復は、それぞれの領域記述子404の有効な部分を使うことによってフルに達成できることがある。あるいはまた、領域記述子404の検証可能なコピーが利用可能でない場合には、回復は、記憶セット102のフル・クリーニング(たとえば、記憶セット102全体のフル・スキャンおよび再同期)を開始してもよい。これらの方法では、本技法のある実施形態は、記憶セット102の種々の型の障害118から回復するよう構成されうる。当業者は、本稿で提示される技法に基づく、記憶セット102の障害118から回復する多くの方法を考案しうる。
〈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 (11)

  1. プロセッサによって実行される、少なくとも一つの記憶装置を含む記憶装置セット内でペンディングの書き込みを記録する方法であって:
    前記記憶装置セットの少なくとも一つの記憶装置上で、前記記憶装置上のある領域サイズの少なくとも二つの領域のペンディング状態を記述する領域記述子を生成する段階と;
    前記記憶装置セット中のある位置にデータセットを記憶する要求を受領したら:
    前記少なくとも二つの領域のうちのどの領域が前記データセットを記憶すべき前記位置を含んでいるを同定し;
    前記領域記述子において前記位置を含んでいる領域をダーティーとしてマークし;
    前記記憶装置セット中の前記位置に前記データセットの記憶を開始する段階と;
    前記記憶装置セット中の前記位置に前記データセットを記憶したのちに、前記領域記述子において前記位置を含んでいる領域をクリーンとしてマークする段階とを含
    前記領域記述子において領域がダーティーとしてマークされていることは、その領域に対するペンディングの書き込みがある可能性があることを示し、
    前記領域記述子において領域がクリーンとしてマークされていることは、その領域に対するペンディングの書き込みがないことを示す、
    方法。
  2. それぞれのダーティー領域が、
    前記記憶装置セットの記憶装置上の領域の物理的な位置または前記記憶装置セットの論理装置上の領域の論理的な位置を同定する、
    請求項1記載の方法。
  3. 前記記憶装置セットが、領域からなる少なくとも二つの領域セットを有しており、
    それぞれの領域セットが前記領域セットの領域を表わす少なくとも一つの領域記述子を有する、
    請求項1記載の方法。
  4. 前記記憶装置セットが、それぞれ更新シーケンス・インジケーターを有する少なくとも二つの領域記述子を有しており、前記更新シーケンス・インジケーターは各領域記述子の更新のシーケンス順を反映し、
    当該方法が、前記記憶装置セット中のある位置にデータセットを記憶したときに:
    前記領域記述子のうちで最も新しい更新シーケンス・インジケーターを有していない古くなった領域記述子を選択する段階と;
    前記古くなった領域記述子において、前記データセットの前記位置を有する前記領域を、更新されたとマークする段階と;
    前記更新シーケンス・インジケーターを、前記領域記述子のうちで最も新しい更新シーケンス・インジケーターに更新する段階とを含む、
    請求項1記載の方法。
  5. 記憶装置上で前記領域記述子を生成する段階が:前記領域記述子を記憶するための領域記述子スペースを前記記憶装置上に割り当てる段階を含み;
    当該方法が、前記領域記述子スペースをダーティー領域で満たしたら、前記領域記述子スペースを拡張する段階を含む、
    請求項1記載の方法。
  6. 少なくとも一つの領域記述子において領域をダーティーとしてマークすることが:
    前記領域記述子において前記領域がクリーンとマークされているかどうかを判定し;
    前記領域記述子において前記領域がクリーンとマークされていると判定したら、前記領域をダーティーとマークすることを含む、
    請求項1記載の方法。
  7. 少なくとも一つの領域記述子において領域をクリーンとしてマークすることが:
    前記領域内のある位置にデータセットを記憶することを完了したのちに、前記領域をクリーンと同定し;
    前記領域記述子においてクリーニングされた領域をクリーンとマークする要求を受領したら、前記領域記述子において少なくとも一つのクリーニングされた領域をクリーンとマークすることを含む、
    請求項1記載の方法。
  8. なくとも二つのデータセットを記憶している、少なくとも一つの記憶装置を含む記憶装置セットをクリーニングする方法であって、それぞれの記憶装置は、その記憶装置上のある領域サイズの少なくとも二つの領域のペンディング状態を記述する領域記述子を有しており、当該方法は、前記記憶装置セットの前記それぞれの記憶装置について:
    前記記憶装置上に記憶されている前記領域記述子を取得する段階と;
    前記記憶装置の、前記領域記述子においてダーティーとマークされたそれぞれの領域について:
    前記領域内のデータセットをクリーニングすることを開始する段階と;
    前記領域内のデータセットをクリーニングすることを完了したら、その領域を前記領域記述子においてクリーンとマークする段階とを含
    前記領域記述子において領域がダーティーとしてマークされていることは、その領域に対するペンディングの書き込みがある可能性があることを示し、
    前記領域記述子において領域がクリーンとしてマークされていることは、その領域に対するペンディングの書き込みがないことを示す、
    方法。
  9. 前記記憶装置セットが、それぞれ更新シーケンス・インジケーターを有する少なくとも二つの領域記述子を有しており、前記更新シーケンス・インジケーターは各領域記述子の更新のシーケンス順を反映し、
    前記記憶装置セットにおける前記少なくとも一つのダーティーな領域を同定することが:
    前記領域記述子のうちで最も新しい更新シーケンス・インジケーターを有する最も新しい領域記述子を選択し;
    選択された前記領域記述子に従って前記記憶装置セットにおける前記少なくとも一つのダーティーな領域を同定することを含む、
    請求項8記載の方法。
  10. それぞれの領域記述子がその領域記述子の領域記述子検証子を有しており;
    前記ダーティーな領域を同定することが:前記領域記述子の前記領域記述子検証子を検証することを含み;
    当該方法は、前記領域記述子の前記領域記述子検証子の検証に失敗したとき、前記記憶装置セットの記憶装置のフル・クリーニングを開始することを含む、
    請求項8記載の方法。
  11. コンピュータのプロセッサに、請求項1記載の方法を実行させるためのコンピュータ・プログラム。
JP2014529676A 2011-09-12 2011-10-10 不揮発性媒体のダーティー領域追跡 Active JP5932042B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/229,871 2011-09-12
US13/229,871 US9003103B2 (en) 2011-09-12 2011-09-12 Nonvolatile media dirty region tracking
PCT/US2011/055590 WO2013039522A1 (en) 2011-09-12 2011-10-10 Nonvolatile media dirty region tracking

Publications (2)

Publication Number Publication Date
JP2014530393A JP2014530393A (ja) 2014-11-17
JP5932042B2 true JP5932042B2 (ja) 2016-06-08

Family

ID=47644555

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014529676A Active JP5932042B2 (ja) 2011-09-12 2011-10-10 不揮発性媒体のダーティー領域追跡

Country Status (11)

Country Link
US (1) US9003103B2 (ja)
EP (1) EP2756405B1 (ja)
JP (1) JP5932042B2 (ja)
KR (1) KR101921365B1 (ja)
CN (1) CN102929750B (ja)
AU (2) AU2011376904A1 (ja)
BR (1) BR112014005623B1 (ja)
CA (1) CA2847841C (ja)
MX (1) MX336226B (ja)
RU (2) RU2014109361A (ja)
WO (1) WO2013039522A1 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9003103B2 (en) 2011-09-12 2015-04-07 Microsoft Technology Licensing, Llc Nonvolatile media dirty region tracking
US8898408B2 (en) * 2011-12-12 2014-11-25 Dell Products L.P. Memory controller-independent memory mirroring
US9396110B2 (en) * 2012-12-21 2016-07-19 Advanced Micro Devices, Inc. Non-volatile hybrid memory
US9542306B2 (en) 2013-03-13 2017-01-10 Seagate Technology Llc Dynamic storage device provisioning
US9448896B2 (en) 2013-08-07 2016-09-20 Seagate Technology Llc Torn write mitigation
US9128972B2 (en) * 2013-09-21 2015-09-08 Oracle International Corporation Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
US9141486B2 (en) 2014-01-15 2015-09-22 Avago Technologies General Ip (Singapore) Pte Ltd Intelligent I/O cache rebuild in a storage controller
US9838346B2 (en) 2014-03-17 2017-12-05 Splunk Inc. Alerting on dual-queue systems
US9838467B2 (en) 2014-03-17 2017-12-05 Splunk Inc. Dynamically instantiating dual-queue systems
US9660930B2 (en) 2014-03-17 2017-05-23 Splunk Inc. Dynamic data server nodes
US9753818B2 (en) * 2014-09-19 2017-09-05 Splunk Inc. Data forwarding using multiple data pipelines
US9836358B2 (en) 2014-03-17 2017-12-05 Splunk Inc. Ephemeral remote data store for dual-queue systems
CN104123900A (zh) * 2014-07-25 2014-10-29 西安诺瓦电子科技有限公司 Led灯板校验系统及校验方法
US9430272B2 (en) 2014-12-17 2016-08-30 Microsoft Technology Licensing, Llc Efficiently providing virtual machine reference points
CN104484427B (zh) * 2014-12-19 2017-12-29 武汉长江通信智联技术有限公司 一种录像文件存储装置及方法
US9547555B2 (en) 2015-01-12 2017-01-17 Microsoft Technology Licensing, Llc Change tracking using redundancy in logical time
US9946607B2 (en) * 2015-03-04 2018-04-17 Sandisk Technologies Llc Systems and methods for storage error management
US9946496B2 (en) * 2015-07-27 2018-04-17 Elastifile Ltd. SSD with non-blocking flush command
US10684994B2 (en) * 2015-09-25 2020-06-16 Netapp Inc. Data synchronization
US10373665B2 (en) * 2016-03-10 2019-08-06 Micron Technology, Inc. Parallel access techniques within memory sections through section independence
KR20180062062A (ko) 2016-11-30 2018-06-08 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
WO2018166072A1 (zh) * 2017-03-13 2018-09-20 华为技术有限公司 一种数据处理方法及装置
US10459807B2 (en) * 2017-05-23 2019-10-29 International Business Machines Corporation Determining modified portions of a RAID storage array
US10331363B2 (en) 2017-11-22 2019-06-25 Seagate Technology Llc Monitoring modifications to data blocks
KR102410306B1 (ko) 2018-01-29 2022-06-20 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
JP2020086483A (ja) * 2018-11-15 2020-06-04 株式会社日立製作所 計算機システム及び記憶デバイスの制御方法
US20210200672A1 (en) * 2019-12-30 2021-07-01 Lalla Fatima Drissi Corrupted storage portion recovery in a memory device
US11755226B2 (en) * 2020-09-18 2023-09-12 Hewlett Packard Enterprise Development Lp Tracking changes of storage volumes during data transfers
KR20220045343A (ko) * 2020-10-05 2022-04-12 에스케이하이닉스 주식회사 데이터 처리 시스템 내 데이터 전송에서 발생한 에러를 정정하는 장치 및 방법

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3058743B2 (ja) * 1992-01-21 2000-07-04 株式会社日立製作所 ディスクアレイ制御装置
ZA973609B (en) * 1997-03-21 1998-07-17 Canal Plus Sa Computer memory organization.
US7055058B2 (en) 2001-12-26 2006-05-30 Boon Storage Technologies, Inc. Self-healing log-structured RAID
JP2003288250A (ja) * 2002-03-28 2003-10-10 Sanyo Electric Co Ltd ファイル管理方法
US7103796B1 (en) 2002-09-03 2006-09-05 Veritas Operating Corporation Parallel data change tracking for maintaining mirrored data consistency
JP3798773B2 (ja) * 2003-07-24 2006-07-19 株式会社東芝 ディスク制御装置及び冗長化論理ディスクドライブの一貫性回復方法
US7904678B1 (en) 2004-02-27 2011-03-08 Symantec Operating Corporation Technique for recovering mirror consistency in cooperative virtual storage
US7526684B2 (en) * 2004-03-24 2009-04-28 Seagate Technology Llc Deterministic preventive recovery from a predicted failure in a distributed storage system
US8275951B2 (en) * 2004-06-10 2012-09-25 Hewlett-Packard Development Company, L.P. Local bitmaps for an array of redundant storage devices
US7415488B1 (en) 2004-12-31 2008-08-19 Symantec Operating Corporation System and method for redundant storage consistency recovery
US7395378B1 (en) 2005-01-04 2008-07-01 Symantec Operating Corporation System and method for updating a copy-on-write snapshot based on a dirty region log
CN100456253C (zh) 2005-12-28 2009-01-28 英业达股份有限公司 存储系统的高速缓存数据的保护方法
US8996826B2 (en) 2009-04-28 2015-03-31 Symantec Corporation Techniques for system recovery using change tracking
US9003103B2 (en) 2011-09-12 2015-04-07 Microsoft Technology Licensing, Llc Nonvolatile media dirty region tracking

Also Published As

Publication number Publication date
BR112014005623A2 (pt) 2017-03-21
RU2016138143A (ru) 2018-12-12
CN102929750B (zh) 2015-05-20
RU2016138143A3 (ja) 2020-03-04
BR112014005623B1 (pt) 2021-10-05
JP2014530393A (ja) 2014-11-17
US20130067179A1 (en) 2013-03-14
EP2756405A4 (en) 2015-09-02
CN102929750A (zh) 2013-02-13
AU2011376904A1 (en) 2014-03-27
BR112014005623A8 (pt) 2018-02-06
CA2847841C (en) 2018-03-06
RU2014109361A (ru) 2015-09-20
MX336226B (es) 2016-01-07
AU2017228544A1 (en) 2017-10-05
CA2847841A1 (en) 2013-03-21
MX2014002960A (es) 2014-07-09
EP2756405A1 (en) 2014-07-23
WO2013039522A1 (en) 2013-03-21
KR20140062063A (ko) 2014-05-22
EP2756405B1 (en) 2021-07-14
RU2728816C2 (ru) 2020-07-31
AU2017228544B2 (en) 2019-05-16
KR101921365B1 (ko) 2018-11-22
US9003103B2 (en) 2015-04-07

Similar Documents

Publication Publication Date Title
JP5932042B2 (ja) 不揮発性媒体のダーティー領域追跡
JP6026538B2 (ja) 検証されたデータセットの不揮発性媒体ジャーナリング
US10169383B2 (en) Method and system for scrubbing data within a data storage subsystem
US9715521B2 (en) Data scrubbing in cluster-based storage systems
US7640412B2 (en) Techniques for improving the reliability of file systems
US9053075B2 (en) Storage control device and method for controlling storages
US8117496B2 (en) Detecting and recovering from silent data errors in application cloning systems
KR101870521B1 (ko) 스토리지 저널링을 개선하는 방법 및 시스템
EP3724764A1 (en) Write-ahead style logging in a persistent memory device
CN104077375A (zh) 一种cc-numa系统中节点的错误目录的处理方法和节点
US8938641B2 (en) Method and apparatus for synchronizing storage volumes

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140910

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140910

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

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

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160427

R150 Certificate of patent or registration of utility model

Ref document number: 5932042

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250