(57)【要約】      （修正有）【課題】データを１つまたは複数の記録媒体へアトミック的に書き込む方法及び装置を提供する。【解決手段】一組のデータのアトミック書き込みを行う要求を受信すると、上記要求に応答して複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを格納することを含み複数の格納ユニット全体にわたって一組のデータを書き込む。メタデータは、書き込みが正常に終了したかどうかを判断するために使用可能である。上記要求は、複数の格納ユニットのアドレス範囲が割り当てられたアプリケーションから送信される。アドレス範囲は、データを格納するためのアプリケーションによりアクセス可能であり、専用位置はアドレス範囲外に存在する。メタデータは、一組のデータが書き込まれたアドレス範囲とシーケンス番号とを規定する。【選択図】図３Ａ
2018152127.tif 000002
【特許請求の範囲】
【請求項１】
一組のデータのアトミック書き込み操作を行う要求を受信する工程と、
前記要求に応答して、複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを格納することを含み前記複数の格納ユニット全体にわたって前記一組のデータを書き込む工程とを含む方法であって、
前記メタデータは書き込みが終了したかどうかを判断するために使用可能である、方法。
【請求項２】
前記要求は、前記複数の格納ユニットのアドレス範囲が割り当てられたアプリケーションから受信され、専用位置は前記アドレス範囲外に存在する、請求項１に記載の方法。
【請求項３】
前記複数の格納ユニットに対して行われた書き込み操作へ少なくとも１つのシーケンス番号を割り当てる工程をさらに含む、請求項１に記載の方法であって、
前記シーケンス番号は、前記書き込み操作が発生した順番を示し、
前記メタデータは、前記一組のデータが書き込まれるアドレス範囲と、前記一組のデータの書き込みに対応するシーケンス番号とを規定する、方法。
【請求項４】
前記アトミック書き込み操作をロールバックする工程をさらに含む、請求項３に記載の方法であって、前記ロールバック工程は、前記規定アドレス範囲へ書き込まれたデータを無効にする工程を含む、方法。
【請求項５】
前記書き込む工程は、前記一組のデータが書き込まれた前記複数の格納ユニットのそれぞれにシーケンス番号のそれぞれのインスタンスを格納する工程を含み、
前記メタデータは前記シーケンス番号の別のインスタンスを含み、
前記方法はさらに、前記書き込む工程が終了したかどうかを前記シーケンス番号の前記インスタンスが一致したことを検証することにより判断する工程を含む、請求項１に記載の方法。
【請求項６】
前記複数の格納ユニットのそれぞれからメタデータを読み出す工程と、前記アトミック書き込み操作が失敗したということを前記メタデータを読み出すことに基づき判断する工程とをさらに含む請求項１に記載の方法。
【請求項７】
前記書き込みが正常に終了しなかったということをアプリケーションへ指示する工程であって、前記一組のデータが正常に書き込まれなかった１つまたは複数の論理ブロックアドレスを識別する工程を含む、指示する工程と、
前記アトミック書き込み操作をロールバックする要求を前記アプリケーションから受信する工程とをさらに含む請求項１に記載の方法。
【請求項８】
前記格納されたメタデータは、前記要求を提供したアプリケーションにより提供されるメタデータを含む、請求項１に記載の方法。
【請求項９】
前記メタデータを格納する工程は、
前記複数の格納装置のうちの第１の格納装置内の専用位置に前記メタデータの第１のインスタンスを格納する工程と、
前記複数の格納装置のうちの第２の格納装置内の専用位置に前記メタデータの第２のインスタンスを格納する工程とを含み、
前記第１および第２のインスタンスは冗長である、請求項１に記載の方法。
【請求項１０】
一組のデータの一群の格納操作であって、前記一組のデータと無関係なメタデータを格納することを含む一群の格納操作を複数の格納装置に対して行うように構成されたベクトル格納モジュールであって、前記メタデータは前記一群の格納操作を示す、ベクトル格納モジュールと、
前記格納されたメタデータに基づき前記一群の格納操作をロールバックするように構成されたロールバックモジュールとを含む装置。
【請求項１１】
前記ベクトル格納モジュールは、格納ブロック内の前記メタデータを前記複数の格納装置のうちの少なくとも１つに格納するように構成され、
前記格納ブロックは、前記一組のデータに関連するアプリケーションによりアクセス不能なアドレスを有する、請求項１０に記載の装置。
【請求項１２】
前記ベクトル格納モジュールは前記一群の格納操作が正常に行われたかどうかを示すように構成され、
前記ロールバックモジュールは、要求を受信することに応答して前記ロールバックを行うように構成される、請求項１０に記載の装置。
【請求項１３】
前記要求は部分的ロールバックを行う要求であり、
前記ロールバックモジュールは、前記要求に応答して前記一群の格納操作のすべてではなく前記一群の格納操作のサブセットをロールバックするように構成される、請求項１２に記載の装置。
【請求項１４】
前記ロールバックモジュールは前記複数の格納装置へ１つまたは複数のＴＲＩＭ命令を発行することにより前記一群の格納操作をロールバックするように構成される、請求項１０に記載の装置。
【請求項１５】
前記ベクトル格納モジュールは前記一組のデータの一部の格納操作を行うように構成され、
前記格納操作はパケットヘッダを有するパケット内へ前記一部をカプセル化することを含み、
前記パケットヘッダは前記格納操作が正常に行われたかどうかを判断するために使用可能な１つまたは複数のビットを含み、
前記１つまたは複数のビットは前記格納されたメタデータと異なる、請求項１０に記載の装置。
【請求項１６】
一群の格納装置に関連するアドレス範囲へ一組のデータのアトミック書き込みを試みるように構成され、かつ、前記アドレス範囲外のアドレスを有する格納ブロック内にメタデータを格納するように構成された格納モジュールであって、前記メタデータは前記一組のデータを書き込むことを指示する、格納モジュールと、
前記アトミック書き込みが正常に終了したかどうかを前記メタデータに基づき判断するように構成されたエラー検出モジュールとを含む装置。
【請求項１７】
前記格納モジュールは、前記アトミック書き込みが試みられた順番を示すシーケンス番号のそれぞれのインスタンスと共に、前記一組のデータのそれぞれの一部を前記一群の格納装置内の各格納装置へ書き込むように構成され、
前記エラー検出モジュールは、前記アトミック書き込みが正常に終了したかどうかを、前記シーケンス番号の前記インスタンスと前記メタデータ内の前記シーケンス番号のインスタンスとを比較することにより判断するように構成される、請求項１６に記載の装置。
【請求項１８】
前記格納モジュールは、複数のアプリケーションのそれぞれのアプリケーションのそれぞれの格納ブロックを維持するように構成され、各格納ブロックは、前記アプリケーションの直近のアトミック書き込みに対応するメタデータを含む、請求項１６に記載の装置。
【請求項１９】
前記格納モジュールはアプリケーションの複数の格納ブロックを維持するように構成され、前記複数の格納ブロックは、前記アプリケーションの複数の直近のアトミック書き込みに対応するメタデータを含む、請求項１６に記載の装置。
【請求項２０】
前記アドレス範囲はスパースアドレス空間の論理ブロックアドレス範囲であり、外部アドレスは前記論理ブロックアドレス範囲に隣接しない論理ブロックアドレスである、請求項１６に記載の装置。
【請求項２１】
ログ構造を使用してデータを格納する第１の手段であって、複数の格納ブロックを含む、第１の手段と、
前記複数の格納ブロックのサブセットへデータをアトミック的に書き込み、前記サブセット内に存在しない格納ブロックへメタデータを書き込む第２の手段であって、前記メタデータは前記データの書き込みをロールバックするために使用可能である、第２の手段とを含む装置。
【請求項２２】
アトミック書き込み操作の要求を発行するアプリケーションであって、前記アトミック書き込み操作は、一組のデータを複数の格納ユニット全体にわたって書き込む工程と、前記複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを書き込む工程とを含み、
前記アプリケーションは前記アトミック書き込み操作が終了したかどうかを前記メタデータを読み出す試みに基づき判断する、アプリケーションを含む装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は一般的には、データを物理的記録媒体上へ格納することに関し、より具体的にはデータをアトミック的に格納することに関する。
【背景技術】
【０００２】
いくつかの例では、格納装置へのデータ書き込みは、データが格納装置へ正常に完全には書き込まれないように中断されることがある。このタイプの故障は、例えば、格納装置への電力の喪失、格納装置の機械的故障、オペレーティングシステムクラッシュ、格納装置をコンピュータシステムへ結合する接続の切断、ネットワークアタッチトストレージ（ＮＡＳ：ｎｅｔｗｏｒｋ  ａｔｔａｃｈｅｄ  ｓｔｏｒａｇｅ）またはストレージエリアネットワーク（ＳＡＮ：ｓｔｏｒａｇｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）などへのネットワーク接続の喪失に応じて発生し得る。
【０００３】
格納失敗に対処するために様々な試みが行われてきた。例えば、いくつかの格納装置は、格納装置への書き込み中にデータを格納するために電池支援キャッシュを使用する。停電が発生した場合、キャッシュされたデータは、電力が回復されると書き込みを終了するために使用され得る。別の例として、いくつかのファイルシステムは、格納装置に対してなされた変更を追跡するためにジャーナルを維持する。故障が発生した場合、ジャーナルは、以前有効であった状態へ駆動装置を戻すために精査され得る。このようなファイルシステムの例としては、ニューテクノロジィファイルシステム（ＮＴＦＳ：ｎｅｗ  ｔｅｃｈｎｏｌｏｇｙ  ｆｉｌｅ  ｓｙｓｔｅｍ）、ジャーナルファイルシステム（ＪＦＳ：ｊｏｕｒｎａｌｅｄ  ｆｉｌｅ  ｓｙｓｔｅｍ）、第３拡張ファイルシステム（ｅｘｔ３）などが挙げられる。いくつかのアプリケーション（クラウド計算環境内の分散アプリケーションなど）は、データが格納装置へ正常にコミットされたことが検証され得るまでデータを維持し得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示は、複数の格納装置全体にわたってデータがアトミック的に書き込まれる実施形態について説明する。様々な実施形態では、複数の格納装置全体にわたるアトミック書き込みの実行とともに注釈（ａｎｎｏｔａｔｉｏｎ）が格納される。注釈は、複数の格納装置のうちの少なくとも１つの格納装置内の専用位置に格納され得、アトミック書き込みが正常に終了したかどうかを判断するために使用可能なメタデータを含む。例えば、一実施形態では、注釈は、データの一部が格納装置のホットスワップ後に複数の格納装置のうちの１つへ正常に書き込まれなかったということを識別するために使用され得る。いくつかの実施形態では、注釈はさらに、格納装置を以前の有効状態へ戻すためにアトミック書き込みをロールバックするために使用可能である。
【０００５】
一実施形態では、一組のデータのアトミック書き込み操作を行う要求を受信する工程を含む方法が開示される。本方法はさらに、要求に応じて一組のデータを複数の格納ユニット全体にわたって書き込む工程を含み、この工程は複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを格納する工程を含む。メタデータは書き込みが正常に終了したかどうかを判断するために使用可能である。
【０００６】
別の実施形態では、ベクトル格納モジュールとロールバックモジュールを含む装置が開示される。ベクトル格納モジュールは、一組のデータの一群の格納操作を複数の格納装置に対して行うように構成される。一群の格納操作は、一組のデータとは無関係なメタデータを格納することを含む。このような実施形態では、メタデータは一群の格納操作を指示する。ロールバックモジュールは、格納されたメタデータに基づき一群の格納操作をロールバックするように構成される。
【０００７】
さらに別の実施形態では、格納モジュールとエラー検出モジュールを含む装置が開示される。格納モジュールは、一群の格納装置に関連するアドレス範囲へ一組のデータのアトミック書き込みを試みるように構成される。格納モジュールはまた、メタデータが一組のデータを書き込むことを指示するように、アドレス範囲外のアドレスを有する格納ブロック内にメタデータを格納するように構成される。エラー検出モジュールは、アトミック書き込みが正常に終了したかどうかをメタデータに基づき判断するように構成される。
【０００８】
さらに別の実施形態では、第１の手段と第２の手段を含む装置が開示される。第１の手段はログ構造を使用することによりデータを格納する。第１の手段は複数の格納ブロックを含む。第２の手段は、データを複数の格納ブロックのサブセットへアトミック的に書き込み、かつ、サブセット内に存在しない格納ブロックへメタデータを書き込む。メタデータは、データの書き込みをロールバックするためは使用不能である。
【０００９】
別の実施形態では、方法が開示される。本方法は、アトミック書き込み操作の要求を発行するアプリケーションを含む。このような実施形態では、アトミック書き込み操作は、複数の格納ユニット全体にわたって一組のデータを書き込む工程と複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを書き込む工程とを含む。本方法はさらに、アトミック書き込み操作が終了したかどうかを、メタデータを読み出す試みに基づき判断するアプリケーションを含む。
【図面の簡単な説明】
【００１０】
【図１】複数の格納装置へデータをアトミック的に書き込むように構成された計算機システムの一実施形態を示すブロック図である。
【図２】アトミック書き込み操作を行うように実行可能な格納装置のドライバの一実施形態を示すブロック図である。
【図３Ａ】論理および物理アドレス空間の実施形態を示すブロック図である。
【図３Ｂ】論理および物理アドレス空間の実施形態を示すブロック図である。
【図３Ｃ】論理および物理アドレス空間の実施形態を示すブロック図である。
【図４Ａ】アトミック的格納を容易にするために使用可能なパケットの実施形態を示すブロック図である。
【図４Ｂ】アトミック的格納を容易にするために使用可能なパケットの実施形態を示すブロック図である。
【図５】方法の一実施形態を示す流れ図である。
【図６Ａ】モジュールを含む装置の実施形態を示すブロック図である。
【図６Ｂ】モジュールを含む装置の実施形態を示すブロック図である。
【図７Ａ】格納手段およびアトミック書き込み手段を有する装置の別の実施形態を示すブロック図である。
【図７Ｂ】アトミック書き込み手段により実施されるアルゴリズムの一実施形態を示す流れ図である。
【図８】計算システムを含む格納システムの一実施形態を示すブロック図である。
【発明を実施するための形態】
【００１１】
本開示は、「一実施形態」または「実施形態」を参照することを含む。語句「一実施形態内において」または「実施形態において」の出現は、同じ実施形態を必ずしも指さない。特定の機構、構造または特徴は本開示に整合する任意の好適なやり方で組み合わせられ得る。
【００１２】
本開示はまた、添付図面を含み、それらを参照する。添付図面では、文脈が規定しない限り同様の符号は通常、同様の構成部品を特定する。発明を実施するための形態、添付図面、および特許請求範囲に記載する具体的な実施形態は制限することを意図しない。本開示の範囲から逸脱することなく、他の実施形態が利用され得、他の変更がこれらの例示的実施形態になされ得る。
【００１３】
本開示における様々なユニット、回路または他の部品は、タスクまたはタスク群を行うように「構成された」と記載され請求され得る。このような文脈では、用語「構成された」は、ユニット／回路／部品が、動作中にそれらのタスクまたはタスク群を行う構造（例えば、回路）を含むということを示すことにより構造を暗示するために使用される。したがって、ユニット／回路／部品は、規定されたユニット／回路／部品が現在そのように動作していない（例えば、オンしていない）場合でも「タスクを行うように構成された」と言うことがある。用語「構成された」と共に使用されるユニット／回路／部品は、例えば回路、動作を実施するために実行可能なプログラム命令を格納するメモリなどのハードウェアを含む。加えて、用語「構成された」は、ソフトウェアにより操作される一般的構造（例えば、一般的回路）、および／または当該タスク（群）を行うことができるやり方で動作するファームウェア（例えば、ソフトウェアを実行するＦＰＧＡまたは汎用プロセッサ）を含み得る。ユニット／回路／部品が１つまたは複数のタスクを行うように「構成された」という表現は、当該ユニット／回路／部品に対し合衆国法典第３５巻１１２章第６段落を発動しないように明示的に意図されている。
【００１４】
様々なユニット、回路または他の部品は「第１」、「第２」などの用語を使用して記載されることがある。名詞に先立つこれらの用語は名詞の標識として使用され、いかなるタイプの順番（例えば、空間的、時間的、論理的などの）も暗示しない。例えば、複数の格納ブロックを有する格納装置では、用語「第１」および「第２」の格納ブロックは任意の２つの格納ブロック（例えば、他の格納ブロック内に含まれる格納ブロックを含む）を指すために使用され得る。換言すれば、「第１」および「第２」の格納ブロックは格納装置の最初の２つの格納ブロックに限定されるものではない。
【００１５】
様々な実施形態は、本明細書ではデータのアトミック書き込みに関して説明される。用語「アトミック」は、当該技術領域のその通常のおよび一般的に認められた意味を有し、終了前に操作が失敗すれば操作は何の影響も及ぼさないような操作の実行を指す。したがって、アトミック書き込みは、書き込み終了前に操作が失敗すれば（例えば、すべてのデータが書き込まれる前に停電が発生すれば）、書き込み操作は格納装置の状態を変更しない（すなわち、格納装置上の既に格納されたデータに影響を与えない）書き込みである。用語「アトミック」はまた、一群の操作のうちの１つ操作の失敗が一群の操作にいかなる影響も及ぼさないようにする一群の操作を参照し得る。以下に論述されるように、一組のデータは、一群の書き込み操作（例えば、各格納装置に対する一組のデータの一部のそれぞれの書き込み操作）を行うことにより複数の格納装置全体にわたって書き込まれ得る（「ベクトル書き込み」と呼ばれる）。したがって、このような書き込みがアトミック的に行われ、複数の書き込み操作のうちの１つが失敗すれば（例えば、電力喪失が複数の格納装置のうちの１つに発生すれば）、一群の書き込み操作のうちのいずれも影響を与えない。いくつかの例では、失敗したアトミック書き込みのいかなる影響も取り除くために１つまたは複数の行為が行われ得る。これらの回復行為は一般的には「ロールバック」と呼ばれることがある。例えば、データが複数の装置全体にわたってアトミック的に書き込まれる場合、複数の装置のうちの特定のものに対する書き込み操作は正常に終了している可能性があるが他のものは失敗している可能性がある。このような場合、正常な書き込み操作のデータは無効として印が付けられ得る（代替的に、以下に述べるいくつかの実施形態では、たとえアトミック書き込みが失敗したとしても部分的に書き込まれたデータが格納装置上に留まれるようにする選択肢が与えられ得る）。
【００１６】
本開示はまず、図１を参照して、複数の格納装置全体にわたってデータをアトミック的に書き込むように構成された計算システムについて説明する。アトミック書き込み操作を容易にするために使用可能なドライバについては図２を参照して説明する。この説明を容易にするために、格納装置に関連する論理および物理アドレス空間について図３Ａ〜３Ｃを参照して説明する。アトミック書き込み操作に使用可能なパケットの実施形態については図４Ａ、４Ｂを参照して説明する。アトミック書き込み操作が行われる実施形態については、図５〜図７Ｂを参照してさらに詳細に説明する。このような計算システムを含む例示的格納システムについては、図８を参照して最後に説明する。
【００１７】
ここで図１を参照すると、計算システム１００のブロック図が描写される。計算システム１００は、サーバ、ラップトップ、デスクトップ、携帯装置などの任意の好適なタイプの計算装置であり得る。いくつかの実施形態では、計算システム１００は協働する複数の計算装置を含み得る。例えば、一実施形態では、計算システム１００は、複数のクライアントに代わってデータを格納するように構成されたデータセンタにおいて連結された複数のサーバ（図８に関連して以下に論述される格納システムなど）であり得る。示された実施形態では、計算システム１００は、プロセッサユニット１１０、ランダムアクセスメモリ（ＲＡＭ）１２０、および相互配線１４０を介し連結された１つまたは複数の格納装置１３０を含む。図示のように、ＲＡＭ１２０は、１つまたは複数のアプリケーション１２２用のプログラム命令、およびプロセッサユニット１１０により実行可能なオペレーティングシステム（ＯＳ）１２４を含み得る。ＯＳ１２４は格納装置１３０のドライバ１２６を含み得、格納装置１３０はコントローラ１３２と１つまたは複数の格納バンク１３４を含み得る。
【００１８】
様々な実施形態では、ドライバ１２６は様々な機能を有するものとして記載される。この機能はソフトウェア、ハードウェアまたはそれらの組み合せで実施され得る。さらに、このような機能はＯＳ１２４の外のソフトウェア（例えば、一実施形態ではアプリケーション１２２）により実現され得る。別の実施形態では、この機能はコントローラ１３２のメモリ内に格納されたソフトウェアにより実現され、コントローラ１３２のプロセッサにより実行され得る。さらに別の実施形態では、コントローラ１３２は、ドライバ１２６の機能を実現するために専用回路を含み得る。要するに、ＯＳ１２４内のソフトウェアで実現されるドライバ１２６の描写は制限と見なすべきでなく、むしろ例示的実施形態の描写と見なすべきである。
【００１９】
格納装置１３０は、データが記録され得る任意の物理的媒体を表す。本明細書で使用されるように、用語「記録された」は概して、その後の使用のために１つまたは複数のデータ値をいくつかの物理的記録媒体へ格納する、書き込む、またはそうでなければ転送する電子計算装置のプロセスを指す。したがって、「物理的記録媒体」は、データが電子計算装置により記録され得る任意の媒体を指すように本明細書では使用される。さらに、用語「格納装置」と「メモリ」は「物理的記録媒体」と同義であるように本明細書では使用される。この広義の定義を所与として、図１および本開示他のどこかの指定メモリ（ＲＡＭ１２０を指す際の）と格納装置（格納装置１３０を指す際の）は揮発性および／または不揮発性媒体を指し得る。このような媒体はまた、本明細書では「メモリ」と呼ばれることがあり、このような媒体の一部は「ブロック」「セル」、「格納ブロック」、「メモリブロック」などと呼ばれることがある。集合的に、これらのブロックの一群は「記憶アレイ」、「メモリアレイ」などと呼ばれることがある。用語「固体格納アレイ」は、本明細書で使用されるように、以下に述べられる様々な形式の媒体などの不揮発性固体媒体を含む格納アレイを指す。
【００２０】
本開示において格納装置１３０内のデータに「アクセスする」ことへの言及は、データを格納装置１３０へ書き込むおよび／またはデータを格納装置１３０から読み出す、メモリ意味論下のＴＲＩＭ操作、メンテナンスアクセス、発見アクセス、ロードおよび格納操作などを含む任意のタイプのトランザクションを指す。さらに、上に参照された「格納装置」と「メモリ」の広義の定義を所与として、これらのアクセスは、不揮発性メモリおよび／または揮発性部品を有する格納装置へ適用され得る。
【００２１】
いくつかの実施形態では、格納装置１３０は不揮発性メモリを含むように実現され得る。したがって、このような実施形態では、格納バンク１３４は、ハードディスク駆動装置など（例えば、集積化駆動エレクトロニクス（ＩＤＥ：Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）ドライブ、スモールコンピュータシステムインタフェース（ＳＣＳＩ）ドライブ、シリアルアタッチトＳＣＳＩ（ＳＡＳ）ドライブ、シリアルＡＴアタッチメント（ＳＡＴＡ）ドライブなど）の不揮発性格納装置、テープドライブ、書き込み可能光ドライブ（例えば、ＣＤドライブ、ＤＶＤドライブ、Ｂｌｕ−Ｒａｙドライブなど）などを含み得る。
【００２２】
いくつかの実施形態では、格納装置１３０は不揮発性固体メモリを含むように実現され得る。したがって、このような実施形態では、格納バンク１３４は、これらに限定しないが、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ナノＲＡＭ（ＮＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ：ｍａｇｎｅｔｏ−ｒｅｓｉｓｔｉｖｅ  ＲＡＭ）、位相変化ＲＡＭ（ＰＲＡＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ＲＡＭ）、レーストラックメモリ、記憶抵抗（ｍｅｍｒｉｓｔｏｒ）メモリ、ナノクリスタルベースメモリ、酸化珪素ベースサブ１０ナノメートルプロセスメモリ、グラフェンメモリ、珪素−酸化物−窒素−酸化物−シリコン（ＳＯＮＯＳ：Ｓｉｌｉｃｏｎ−Ｏｘｉｄｅ−Ｎｉｔｒｉｄｅ−Ｏｘｉｄｅ−Ｓｉｌｉｃｏｎ）、抵抗性ランダムアクセスメモリ（ＲＲＡＭ（登録商標）：Ｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ−ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、プログラマブルメタライゼーションセル（ＰＭＣ：ｐｒｏｇｒａｍｍａｂｌｅ  ｍｅｔａｌｌｉｚａｔｉｏｎ  ｃｅｌｌ）、導電性ブリッジングＲＡＭ（ＣＢＲＡＭ：ｃｏｎｄｕｃｔｉｖｅ−ｂｒｉｄｇｉｎｇ  ＲＡＭ）などを含む任意の好適なタイプの固体格納媒体を含み得る。いくつかの実施形態では、格納バンク１３４は複数の異なるタイプの固体格納媒体を含み得る。
【００２３】
他の実施形態では、格納装置１３０は揮発性メモリを含むように実現され得る。したがって、格納バンク１３４は、これらに限定しないがＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、シンクロナスダイナミックＲＡＭ（ＳＤＲＡＭ）などを含む任意の好適な揮発性メモリに対応し得る。プロセッサユニット１１０とは独立に示されるが、いくつかの実施形態では、格納装置１３０は、プロセッサユニット１１０内の１つまたは複数のキャッシュレベル（例えば、Ｌ１、Ｌ２、Ｌ３など）などのプロセッサユニット１１０内のメモリに対応し得る。
【００２４】
要するに、様々な機能は、本明細書では格納装置１３０に関連して説明される。このような機能は、不揮発性および揮発性形式の両方を含む任意の好適な形式のメモリに適用可能な場合がある。したがって、ドライバ１２６の特定の実施形態は本明細書では不揮発性固体メモリアレイという文脈内で説明されるが、ドライバ１２６はまた、揮発性メモリと他のタイプの不揮発性メモリ（特には、再利用（ｒｅｃｌａｍａｔｉｏｎ）プロセスを含むもの）など他の記録媒体に適用可能な場合がある。
【００２５】
コントローラ１３２は、一実施形態では、格納装置１３０の操作を管理するように構成される。したがって、コントローラ１３２は、規定アドレス（例えば、以下に論述されるような「物理アドレス」）における読み出し操作（適切なバンク１３４を選択することとそれらのバンク内の適切なセル内のデータにアクセスすることとを含む）を容易に行えるようにし得る。コントローラ１３２は、書き込み操作（特定セルのプログラミングを含む）を容易に行えるようにし得る。コントローラ１３２はまた、格納装置１３０へのその後の書き込みを許容するための準備動作（例えば、一実施形態では、その後の再使用のためにセルのブロックを消去すること）を行い得る（セルのブロックをプログラムおよび消去するサイクルは「ＰＥサイクル」と呼ばれることがある）。いくつかの実施形態では、コントローラ１３２は、読み出しおよび書き込み操作を並列に行うために別の読み出しおよび書き込みデータパイプラインを実装する。一実施形態では、コントローラ１３２はまた、相互配線１４０上でドライバ１２６（以下に論述される）と通信するように構成される。例えば、いくつかの実施形態では、コントローラ１３２は、ＤＭＡコントローラにより調整される直接メモリアクセス（ＤＭＡ）トランザクションを介し読み出しおよび書き込み操作のための情報を伝達する。したがって、コントローラ１３２は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ：ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩエクスプレス（ＰＣＩ−ｅ）、シリアルアドバンストテクノロジーアタッチメント（シリアルＡＴＡまたはＳＡＴＡ）、パラレルＡＴＡ（ＰＡＴＡ：ｐａｒａｌｌｅｌ  ＡＴＡ）、スモールコンピュータシステムインターフェース（ＳＣＳＩ：ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ  ｉｎｔｅｒｆａｃｅ）、ＩＥＥＥ１３９４（ファイアワイヤ）、ファイバチャンネル、ユニバーサルシリアルバス（ＵＳＢ）などの任意の好適な相互配線タイプを支援し得る。いくつかの実施形態では、コントローラ１３２はまた、エラーチェック、データ圧縮、暗号化および解読、パケット組み立て分解などの他の操作を行い得る。
【００２６】
様々な実施形態では、格納装置１３０はログ構造（ｌｏｇ−ｓｔｒｕｃｔｕｒｅｄ）格納装置として編成される。本明細書で使用されるように、用語「ログ構造」は、どこにデータを格納するかを判断するために付加点（ａｐｐｅｎｄ  ｐｏｉｎｔ）が使用される格納媒体上のデータの配置を指し、付加点はデータが格納される「アドレス空間」を介し連続的に進められる。ログ構造格納装置は簡単には、ログ構造を使用することにより編成される格納装置である。ログ構造の使用はまた、「格納装置１３０が以前の状態（すなわち「ログチェックポイント」）へ回復されるのを許容するためにメタデータがデータと共に格納される」ということを暗示する。このような回復は、例えば、電力喪失が発生した場合にクラッシュ回復を容易にするために、およびデータ破損などが発生した場合に最新の既知の有効状態を回復するために行われ得る。本明細書で使用されるように、用語「アドレス空間」は、格納装置内のデータを規定するために使用され得るアドレス範囲（すなわち１つまたは複数のアドレスの集合）を指す。以下に示すように、ログ構造格納装置は論理および物理アドレス空間の両方を有し得る。用語「論理アドレス空間」は、格納装置１３０の物理媒体上にデータがどのように実際に編成されるかをアドレス空間が表さなくても、または実際に使用される、予約された、または上位レベルプロセスへ割り振られた物理アドレス位置の実際の数をこのアドレス空間が表さなくても、上位プロセス（例えば、アプリケーション１２２とＯＳ１２４）により認識されるアドレス空間を指す。対照的に、用語「物理アドレス空間」は、下位プロセスにより使用されるアドレス空間を指し、格納装置１３０の物理媒体上にデータがどのように編成されるかと、上位プロセスにより使用される物理アドレス位置の実際の数とを示し得る。論理および物理アドレス空間の実施形態は、図３Ａ、３Ｂそれぞれに関連してさらに詳細に論述される。ログ構造の一実施形態は図３Ｃに関連して論述される。
【００２７】
様々な実施形態では、ログ構造を使用することで、データが格納装置へ書き込まれ、修正され、書き換えられると一組のデータの複数のインスタンスが格納装置１３０内に存在することを許容するようにし得る。物理アドレス空間内のデータを追跡することの一部として、格納データの古いインスタンス（すなわち、現在のインスタンスでないインスタンス）が無効であると示され得る。例えば、一実施形態では、値が更新されると、値は、（値が既に格納されている位置ではなく）現在の付加点により規定された格納ブロックに書き込まれ得る。正常に行われた書き込みに応答して、当該値のすべての既に格納されたインスタンスは無効として印が付けられ得る。本明細書で使用されるように、用語「無効」は、（例えば、データのより新しい複製が存在するので）システムによりもはや格納される必要のないデータを指す。同様に、用語「無効にする」は、データを無効として印をつける（例えば、記録をデータ構造内に格納する際に）ことを指す。「無効にする」はまた、データのインスタンスが格納装置１３０上に存在するときにデータのインスタンスを格納装置１３０へ書き込む（前者のインスタンスは新しいインスタンスの書き込みにより不要にされ得る）ことを指し得る。
【００２８】
ＯＳ１２４は、一実施形態では、アプリケーション１２２によるデータの検索を容易にするためにファイルシステムを実装する。本明細書で使用されるように、用語「アプリケーション」（または「プロセス」）は通常、１つまたは複数のプロセッサにより実行可能なプログラム命令の集合を指す。アプリケーションの例として、ＯＳ１２４、ファイルシステムマネジャ、データベース管理システム（ＤＢＭＳ：ｄａｔａｂａｓｅ  ｍａｎａｇｅｍｅｎｔ  ｓｙｓｔｅｍ）、ユーザ空間ライブラリ、ドライバ（例えば、ドライバ１２６、フィルタドライバ、独立ディスク冗長アレイ（ＲＡＩＤ：ｒｅｄｕｎｄａｎｔ  ａｒｒａｙ  ｏｆ  ｉｎｄｅｐｅｎｄｅｎｔ  ｄｉｓｋｓ）ドライバなど）が挙げられ得る。示された実施形態では、アプリケーション１２２はユーザレベルアプリケーションである。用語「ユーザレベル」は、コンピュータシステムの管理責任の無いアプリケーションを記述するために使用される。ユーザレベルアプリケーションの例として、文書処理アプリケーション、ウェブブラウザなどが挙げられ得る。ユーザレベルアプリケーションは、コンピュータシステムの動作を管理するカーネルレベル（またはシステムレベル）アプリケーションと対照をなす。カーネルレベルアプリケーションの例として、オペレーティングシステム、ドライバ、ハイパーバイザなどが挙げられ得る。一実施形態では、ＯＳ１２４は、ユーザレベルアプリケーションによるコンピュータシステム１００のいくつかの機能（例えば、ファイル、アドレス、ハードウェアなど）へのアクセスを制限し得るが、カーネルレベルアプリケーションのこのような機能を制限しない場合がある。
【００２９】
いくつかの実施形態では、アプリケーション１２２のアプリケーションデータは「仮想格納ユニット」と呼ばれる１つまたは複数のパーティション内へ編成され得る。本明細書で使用されるように、用語「仮想格納ユニット」すなわち「ＶＳＵ：ｖｉｒｔｕａｌ  ｓｔｏｒａｇｅ  ｕｎｉｔ」は、アプリケーションデータを格納するために１つまたは複数のアプリケーションにより使用可能な割り振られた一組の格納ブロック（例えば、論理ブロック）を指す。いくつかの実施形態では、ＶＳＵは、実際の物理アドレス空間より大きな論理アドレス空間をアプリケーション１２２へ提示するように実現され得る。したがって、ＶＳＵへ割り振られる論理ブロックの総数は、物理媒体上で利用可能な格納ブロックの数を越え得る。この割り振り方式をうまく働かせるために、ＶＳＵは、その割り振られた論理ブロックのうちの少数を使用するＶＳＵとその割り振りのうちの多数を使用するＶＳＵとが物理媒体空間を共有するように管理され得る。いくつかの実施形態では、ＶＳＵはまた、二次ドライブからのデータのキャッシングを容易にするように使用され得る。本明細書で使用されるように、用語「格納ユニット」は通常、格納装置または格納装置内の仮想格納ユニットのいずれかを指す。
【００３０】
いくつかの例では、アプリケーション１２２は、アプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）要求を介し当該ファイル名をＯＳ１２４へ規定することにより格納装置１３０内のデータにアクセスし得る（他の例では、アプリケーション１２２は、読み出されるまたは書き込まれるべきアドレスを規定することによりデータへ直接アクセスし得る）。要求の受信に応答して、ＯＳ１２４は、ファイルのデータが格納される１つまたは複数のアドレスを判断するためにディレクトリとファイル（例えば、一組のアイノード（ｉｎｏｄｅ）、ファイルア割り振りテーブルなどの中の）に対応する様々なファイルシステム情報にアクセスし得る。
【００３１】
ドライバ１２６は、一実施形態では、アプリケーション１２２とＯＳ１２４が格納装置１３０と相互作用するのを許容するように実行可能である。したがって、ドライバ１２６は、規定の論理ブロックアドレスにおいて読み出しおよび書き込み操作を行う要求を受信し得、それらの操作を実施するためにコントローラ１３２へ当該命令を発行し得る。いくつかの実施形態では、ドライバ１２６は、無効データを有する格納ブロックを格納装置１３０が再利用（ｒｅｃｌａｉｍ）するガーベッジコレクション（ｇａｒｂａｇｅ  ｃｏｌｌｅｃｔｉｏｎ）を管理する。本明細書で使用されるように、格納ブロックを「再利用する」または格納ブロックの「再利用」は、再使用のために（すなわち、格納ブロックが新しいデータを格納し得るように）格納ブロックを用意することを指す。フラッシュ媒体の場合、再利用は、格納ブロックから有効データを複写することと同ブロックを消去することとを含み得る。いくつかの実施形態では、読み出しおよび書き込み操作の実行を容易にするために、ドライバ１２６はまた、論理アドレス（例えば、ＬＢＡ）を当該物理アドレスへマッピングする（他の実施形態では、物理アドレスへ論理アドレスをマッピングすることは、コントローラ１３２など他のどこかで行われ得る）。したがって、ドライバ１２６はまた、１つまたは複数の翻訳マップ（図２に関連して以下に論述されるマップ２２２など）を管理し得る。管理は、データが格納装置１３０上で操作される際に翻訳を追加することと翻訳をマップから取り除くこととを含む。
【００３２】
様々な実施形態では、ドライバ１２６はアトミック書き込み操作の実行を支援し得る。上述のように、アトミック書き込みは、故障が発生した場合に影響を及ぼさない能力のために、従来の書き込み操作より有利な場合がある。したがって、一実施形態では、ドライバ１２６は、格納装置１３０のうちの１つへのアトミック書き込みを支援する。以下に示すように、いくつかの実施形態では、このような書き込み操作を容易にするために、データは、様々な形式のメタデータを有するヘッダを含む１つまたは複数のパケット内にカプセル化され得る。一実施形態では、このメタデータは、データがアトミック書き込みの一部として格納されるということを識別する１つまたは複数のビットを含み得る。ドライバ１２６はさらに、書き込みが正常に終了したかどうかを判断しそれが保証されればアトミック書き込みをロールバックするためにこのメタデータにアクセスし得る。様々な実施形態では、ドライバ１２６はまた、複数の格納装置１３０、仮想格納ユニット、またはそれらの組み合せ全体にわたるアトミック書き込みを支援する（したがって、特定の実施形態は本明細書では複数の格納装置全体にわたるアトミック書き込みに関して説明される場合があるが、このような説明はまた、単一の格納装置内に配置された複数の仮想格納ユニットを含む仮想格納ユニットへ適用可能な場合がある）。このような実施形態では、一組のデータは、格納ユニット間で分散される部分に分割され得る。例えば、ある範囲のアドレスに跨る一組のデータがアドレスに基づき分割され得る。このとき、一群の書き込み操作は、各書き込み操作が一組のデータの一部分をそれぞれの格納装置１３０へ格納するように行われ得る。示された実施形態では、アトミック書き込みを容易にするために、別のドライバ１２６はさらに、格納装置１３０に対して行われた複数の書き込み操作のそれぞれが正常にコミットされたかどうかを判断するためにアトミック書き込みの一部として注釈１５０を格納する。したがって、複数の書き込み操作のうちの１つが失敗すれれば（例えば、複数の格納装置１３０のうちの１つに対する停電が途中で発生すれば）、ドライバ１２６（またはアプリケーション１２２）は、ベクトル書き込みが正常に終了しなかったということを識別するために注釈１５０を使用して書き込みをロールバックし得る。
【００３３】
注釈１５０は、一実施形態では、複数の格納装置１３０のうちの少なくとも１つの格納装置１３０内の専用位置に格納されるメタデータである。すなわち、位置は、アトミック書き込みが行われるアプリケーションデータを含まない（但し、他の実施形態では、注釈１５０は非専用位置に格納され得る）。図３Ａに関連して以下に示されるように、いくつかの実施形態では、この位置はアプリケーション１２２などのドライバ１２６以外のアプリケーションによりアクセス不能な場合がある。例えば、一実施形態では、ドライバ１２６（またはＯＳ１２４）は、アプリケーション１２２のデータ要求がこの位置のアドレスを指定すればデータ要求を拒否し得る。別の実施形態では、アプリケーション１２２は、限定された表示の全アドレス空間を有し得、その結果、この限定された表示外のいかなるアドレスにも気付かない（位置はこれらの外部アドレスのうちの１つに存在し得る）。いくつかの実施形態では、この位置は静的であり得、例えば、ドライバ１２６は、同じ論理ブロックアドレス（ＬＢＡ）または論理ブロックアドレス群へ注釈１５０を常に書き込み得る。但し、他の実施形態では、注釈１５０の位置は動的であり得る。一実施形態では、注釈１５０の位置は、格納されるデータのものとは独立し得、例えば、注釈１５０は、データが格納されるアドレスから切り離された論理ブロックアドレスに存在し得る。一実施形態では、注釈１５０は、ある時点で故障が発生すれば少なくとも注釈１５０が正常に格納される可能性が高くなるように、アトミック書き込みの始めに格納される。したがって、注釈１５０は、故障を識別することを容易にするためそしていかなるロールバックも容易にするために利用可能な場合がある。別の実施形態では、注釈１５０はアトミック書き込みの終わりに格納され得る。したがって、注釈１５０の単なる存在は、アトミック書き込みが正常に終了したということを意味し得る。
【００３４】
いくつかの実施形態では、ドライバ１２６は、アトミック書き込みのために複数の形式のロールバックを支援する。したがって、一実施形態では、ドライバ１２６は、書き込みが失敗すればアトミック書き込みのすべてのデータ（例えば、書き込まれる要求データおよび書き込みについてのすべての記録されたメタデータ）が無効にされる全ロールバックを支援する。いくつかの実施形態では、ドライバ１２６は代替的に、書き込みデータの一部が格納装置１３０上に留まることを許容され得る一方で他の部分は無効にされ得る部分的ロールバックを支援する。図２に関連して以下に説明されるように、このような実施形態では、ドライバ１２６は、書き込み失敗についての情報をアプリケーション１２２へ提供するためにおよびアトミック書き込みをロールバックするための異なる選択肢をアプリケーション１２２へ提供するためにアプリケーション１２２とインターフェースし得る。いくつかの実施形態では、アプリケーション１２２は、完全ロールバックを行う、部分的ロールバックを行う、またはロールバックを行わないかをドライバ１２６により提供される情報に依存して選択し得る。
【００３５】
様々な実施形態では、注釈１５０などのメタデータを記録することを通してアトミック書き込みを実施することは、複数の格納ユニット全体にわたってアトミック書き込みを行うためのオーバーヘッドを低減し得るので、有利な場合がある。例えば、複数の格納装置１３０全体にわたるアトミック書き込みは、ドライバ１２６が要求を送信して各格納装置１３０から当該確認応答を待つように各格納装置１３０とのハンドシェイクを行うことを含み得る。ドライバ１２６はさらに、格納装置１３０からいかなる確認応答も受信されない場合にアトミック書き込みが失敗したということを判断するために、送信された要求と受信された確認応答のログを維持する。しかし、このようにしてログおよびハンドシェイク通信を維持することは、かなりの量の追加のメタデータを維持することになり得、ドライバ１２６と格納装置１３０間のバストラフィックの量を著しく増加し得る。したがって、記録用メタデータが使用される様々な実施形態では、ドライバ１２６は、ハンドシェイク動作を行うことなく、確認応答を伝達することなく、およびログを維持することなく、注釈１５０などの記録用メタデータを介しアトミック書き込みを実行し得る。
【００３６】
次に図２を参照すると、ドライバ１２６のブロック図が描写される。示された実施形態では、ドライバ１２６はディストリビューション層２１０、格納層２２０Ａ、２２０Ｂ、および入力／出力（Ｉ／Ｏ）層２３０Ａ、２３０Ｂを含む。他の実施形態では、ドライバ１２６は示されたものとは異なるやり方で配置され得る。
【００３７】
ディストリビューション層２１０は、一実施形態では、複数の格納ユニット（例えば、示された実施形態の格納装置１３０）全体にわたるデータ格納を管理する（アトミック書き込みの実行を含む）。したがって、ディストリビューション層２１０は、アプリケーション１２２および／またはＯＳ１２４から読み出しおよび書き込み要求を受信し得、適切な１つまたは複数の格納装置１３０を判断し得、以下に論述される格納層２２０へ当該命令を発行し得る。例えば、一実施形態では、所与の要求はある範囲のアドレスを規定し得、次に、ディストリビューション層２１０は、当該範囲内のアドレスに関連する格納装置１３０を識別するためにマップ（以下に説明されるマップ２２２と同様な）を使用し得る。いくつかの実施形態では、ディストリビューション層２１０はまた、アトミック書き込みを（例えば、ＡＰＩを介し）行うためにアプリケーション１２２とインターフェースする。したがって、示された実施形態では、ディストリビューション層２１０は、書き込み状態２０４の指標を与えるアトミック書き込み要求２０２を受信し、ロールバック命令２０６を受信し得る。
【００３８】
アトミック書き込み要求２０２は、一実施形態では、アトミック書き込みを行うためのアプリケーション１２２からの要求である。いくつかの実施形態では、アトミック書き込み要求２０２は、書き込まれるデータのインスタンス（すなわち複製）、１つまたは複数のアドレス（例えば、ＬＢＡ）、および／または要求がアトミック書き込みのためであるという指標（非アトミック書き込みとは対照的に）を含み得る。アトミック書き込み要求２０２に応答して、ディストリビューション層２１０は１つまたは複数の当該命令を下位層２２０、２３０へ発行し得る。分散書き込み（すなわち複数の格納装置１３０全体にわたる書き込み）の場合、ディストリビューション層２１０は、格納装置１３０Ａなどの格納装置１３０上に注釈１５０を格納するために１つまたは複数の命令だけでなくデータも書き込む命令を格納層２２０へ指示し得る。いくつかの実施形態では、ディストリビューション層２１０はまた、所与の書き込みのための注釈１５０の複数の冗長インスタンスを複数の格納装置１３０（図２の点線ブロックにより示されるような）上に格納し得、例えば、注釈１５０は、複数の格納装置１３０のそれぞれ、格納装置１３０のサブセットなどの上に格納され得る。図４Ｂに関連して説明されるように、一実施形態では、注釈１５０は、シーケンス番号とアトミック書き込みに関連するアドレス範囲（例えば、アトミック書き込み要求２０２内に規定されたＬＢＡ範囲）とを含む。このような実施形態では、シーケンス番号は書き込み操作が発生した順番を示す。例えば、一実施形態では、ディストリビューション層２１０は、（アトミックまたは非アトミック）書き込み要求を受信するたびに調整されるカウンタを維持し得る。いくつかの実施形態では、ディストリビューション層２１０は格納装置１３０内に格納されたデータの各部分へシーケンス番号を付加し得る。すなわち、このような実施形態では、第１および第２の部分が格納装置１３０Ａ、１３０Ｂへそれぞれ書き込まれれば、各部分はシーケンス番号のそれぞれのインスタンス（注釈１５０内に含まれるシーケンス番号のインスタンスに加えて）を含み得る。
【００３９】
いくつかの実施形態では、アトミック書き込み要求２０２はまた、注釈１５０内に格納するためのアプリケーション１２２により提供されるデータを含み得る。例えば、一実施形態では、アプリケーション１２２は、特にはアトミック書き込みの実行のためにまたはいくつかの他の目的のために維持され得る様々な形式のメタデータを維持し得る。このような実施形態では、アプリケーション１２２は、注釈１５０内に格納されるようにこのメタデータをドライバ１２６へ提供し得る。したがって、アプリケーション１２２は、いくつかの実施形態では、どのメタデータが注釈１５０内に格納されるかを規定し管理することができる場合がある。さらに、いくつかの実施形態では、アプリケーション１２２（ドライバ１２６とは対照的に）は、アトミック書き込みが失敗したかどうかを判断するためにこの情報を使用し得る。
【００４０】
様々な実施形態では、ディストリビューション層２１０は、上記のように、アトミック書き込みが正常に終了したかどうかを注釈１５０内のメタデータに基づき判断し得る（但し、別の実施形態では、この判断はドライバ１２６により提供される情報に基づきアプリケーション１２２により行われ得る（例えば、以下に論述される書き込み状態２０４を介し））。一実施形態では、ディストリビューション層２１０は、受信したアトミック書き込み要求２０２毎にこの判断を行う。代替的に、別の実施形態では、ディストリビューション層２１０は、書き込み失敗を引き起こし得るシステム障害が発生したという指標を受信した後にこの判断を行う。例えば、ディストリビューション層２１０は、計算システム１００が再起動している、または適切なシャットダウン手順を経験せずに再起動した、計算システム１００と格納装置１３０間の接続が遮断された等々の指標をＯＳ１２４から受信し得る。一実施形態では、アトミック書き込みが正常に終了したかどうかを判断するために、ディストリビューション層２１０は当初、当該書き込みに関連する注釈１５０（または注釈群１５０）を読み出すことを試み得る。注釈１５０が存在しないまたは破損していれば、ディストリビューション層２１０は書き込みが正常に終了しなかったと判断し得る。しかし注釈１５０が正常に読み出されれば、一実施形態では、ディストリビューション層２１０は、書き込みデータが格納された場所を識別するために注釈内に規定されたアドレス範囲を読み出し得る。一実施形態では、ディストリビューション層２１０はさらに、データと共に格納されたシーケンス番号を読み出し、これらと注釈１５０内に格納されたシーケンス番号とを比較しようとし得る。これらの数が一致しなければ、ディストリビューション層２１０はアトミック書き込みが正常に終了しなかったと結論し得る。一方、シーケンス番号が一致すれば、ディストリビューション層２１０は書き込みが正常に終了したと結論し得る（書き込みが失敗したかどうかを判断するための他の技術については図４Ｂに関連して以下に論述される）。いずれにしても、ディストリビューション層２１０は、その結論の指標を書き込み状態２０４を介し、要求２０２を発行したアプリケーション１２２へ提供し得る。
【００４１】
書き込み状態２０４は、一実施形態では、アトミック書き込み要求２０２に関連する書き込み操作が正常に終了したかどうかを示す。いくつかの実施形態では、状態２０４は失敗または成功を示すブール値を単に含み得る。但し、様々な実施形態では、書き込み状態２０４はアプリケーション１２２により使用可能な追加情報を含み得る。例えば、一実施形態では、書き込み状態２０４は、書き込みが失敗したということを示し得、また、データが正常に書き込まれなかった（または、逆にデータが正常に書き込まれた）アドレス（例えば、ＬＢＡ）を識別し得る。一実施形態では、書き込み状態２０４はさらに、失敗の潜在的原因（例えば、１つまたは複数の格納装置１３０と通信することができないこと）を識別するだけでなく失敗に関連する格納装置または装置群１３０を識別する。この情報に基づき、いくつかの実施形態では、アプリケーション１２２は、どのようにドライバ１２６に故障に対処してロールバック命令２０６などの当該指標を提供してほしいのかに関する合理的判断をなし得る。
【００４２】
いくつかの実施形態では、アトミック書き込みが終了したかどうかの明示的指示を含むのではなく、書き込み状態２０４は、アトミック書き込みが失敗したかどうかを推論するためにアプリケーション１２２により使用可能な情報を含み得る。例えば、一実施形態では、ドライバ１２６は、データを最初に書き込みその後注釈１５０を書き込むことによりアトミック書き込みを行い得る。さらに、ドライバ１２６は、特定アドレス（例えば、ＬＢＡ）が書き込まれたかどうか（すなわち、有効データがそれらの位置に存在するかどうか）をアプリケーション１２２が問い合わせ得るようにするアプリケーション１２２からのＡＰＩ呼び出しを支援し得る。このような実施形態では、アプリケーション１２２はアトミック書き込み要求２０２を発行し、次に、注釈１５０のアドレスが書かれたかどうかをＡＰＩ呼び出しを介し問い合わせ得る。この例では、書き込み状態２０４は、問い合わせのためにディストリビューション層２１０により発行された応答に対応し得る。アドレスが書き込まれていないということを書き込み状態２０４が示せば、アプリケーション１２２は、注釈１５０が格納されなかったということとしたがってアトミック書き込みは失敗したということとを結論し得る。別の実施形態では、アプリケーション１２２は単に、注釈１５０を読み出し、読み出された注釈１５０により失敗を示す書き込み状態２０４を受信することを試み得る。その結果、アプリケーション１２２は、アトミック書き込みが不成功だったということを、試行された読み出しに基づき結論し得る。他の実施形態では、書き込み状態２０４は、注釈１５０の内容、チェックサム値、タイムスタンプなどアプリケーション１２２により使用可能な他の情報を含み得る。
【００４３】
ロールバック命令２０６は、一実施形態では、ドライバ１２６がアトミック書き込み（正常な（すなわち、終了した）アトミック書き込みだけでなく失敗したアトミック書き込みも含み得る）のロールバックを行うかどうかを規定する（別の実施形態では、ディストリビューション層２１０は、失敗を検出するとロールバックを自動的に（すなわち、そのようにする明示的な命令を受信すること無く）行い得る）。上述のように、いくつかの実施形態では、ドライバ１２６は、完全なロールバック、部分的ロールバックなど複数の形式のロールバックを支援し得る。したがって、このような実施形態では、ロールバック命令２０６は、行われるロールバックの形式を規定し得る。いくつかの実施形態では、ロールバック命令２０６はまた、ドライバ１２６が書き込み操作を正常に終了することができるように、間違って書き込まれたデータのインスタンスを含み得る。より具体的には、このような実施形態では、アトミック的に書き込まれるデータは、データが格納装置１３０へ正常に書き込まれたことが検証され得るまで計算システム１００の他のどこか（例えば、ＲＡＭ１２０またはプロセッサユニット１１０）にキャッシュされ得る（一実施形態では、このキャッシング能力はアプリケーション１２２の機能であり得、他の実施形態では、これはＯＳ１２４、ドライバ１２６などにより行われ得る）。書き込み失敗が発生すれば、喪失データ（例えば、書き込み状態２０４内に規定されたアドレスにより識別される）は、格納装置１３０へ喪失データを書き込むことを試みることにより書き込み操作を終了するために、ロールバック命令２０６内に含まれ得る。一実施形態では、失敗したアトミック書き込み中の書き込みデータを取り除くために完全ロールバックまたは部分的ロールバックを行っている間にドライバ１２６はデータ（上述のように、書き込み中に記録されたすべてのメタデータだけでなく格納されている要求データも含み得る）を無効にする１つまたは複数のＴＲＩＭ命令を発行し得る。他の実施形態では、ドライバ１２６は、失敗したアトミック書き込み中に書き込まれたデータを取り除くための他の技術（データを消去する、データに上書きするなど）を使用し得る。
【００４４】
格納層２２０は、一実施形態では、所与の格納装置１３０に関する操作を管理する。一実施形態では、格納層２２０は、論理アドレスを、図３Ａ〜３Ｃに関連してさらに詳細に論述される当該物理アドレスへ翻訳する。示された実施形態では、各格納層２２０は、その装置１３０のためのそれぞれのマップ２２２を維持する（他の実施形態では、格納層２２０はマップを共有し得、マップはいくつかの他のブロックなどにより維持され得る）。様々な実施形態では、マップ２２２は、格納装置１３０内の物理アドレスへの論理アドレスの翻訳を維持する。したがって、データが移動され無効にされると、同データは格納装置１３０上の異なる物理アドレスに長期にわたって存在し得る。但し、マップ２２２の使用を通じてアプリケーションは、２つ以上のバージョンのデータが異なる物理アドレス内に存在し得るとしても、同じ論理アドレス（例えば、同じ論理ブロックアドレス（ＬＢＡ））を規定することにより直近の一組のデータにアクセスすることができる場合がある。マップ２２２は任意の好適なデータ構造を使用することにより実現され得る。したがって、一実施形態では、マップ２２２はバイナリツリーデータ構造である。他の実施形態では、マップ２２２は、アレイ、リンクリスト、ハッシュ表などであり得る。いくつかの実施形態では、マップ２２２は複数のデータ構造を使用することにより実現され得る。様々な実施形態では、格納層２２０はそれぞれの格納装置１３０のグルーミング（すなわち、データを格納するようにその後プログラムされるように格納ブロックを識別および再利用すること−ガーベッジコレクションとも呼ばれる）を管理し得る。格納層２２０は、再利用のための格納ブロックを選択するための様々な判定基準（無効データの量、データの温度（どれぐらい頻繁にデータがアクセスされたか）、データがそれらのブロックから読み出される際に検知された誤ったデータの量など）のうちの任意のものを使用し得る。
【００４５】
ドライバ１２６のＩ／Ｏ層２３０は格納装置１３０上の格納コントローラ１３２とインターフェースする。したがって、Ｉ／Ｏ層２３０は、プログラムを発行する、消去する、コントローラ１３２への命令を読み出すなどの下位インターフェース動作を扱い得る。Ｉ／Ｏ層２３０はまた、格納装置１３０の様々な形式の駆動状態を追跡し得る。いくつかの実施形態では、Ｉ／Ｏ層２３０は、相互配線１４０全体にわたるＤＭＡトランザクションのための１つまたは複数のチャネルを構成するようにＤＭＡコントローラと通信し得る。互いに独立したブロックとして示されたが、Ｉ／Ｏ層２３０は一実施形態では１つのブロックであり得る。
【００４６】
次に図３Ａを参照すると、論理アドレス空間３０２と物理アドレス空間３０４に関するアトミック格納のブロック図が描写される。一実施形態では、論理アドレス空間３０２は、アプリケーション１２２およびＯＳ１２４などの上位プロセスにより認識されるデータの編成を表す。一実施形態では、物理アドレス空間３０４は物理媒体上のデータの編成を表す。
【００４７】
論理アドレス空間３０２は、一実施形態では、それぞれの論理ブロック（セクタとも呼ばれる）３１０Ａ〜３１０Ｄに対応する論理アドレスに分割される。いくつかの実施形態では、論理アドレスは論理ブロックアドレス（ＬＢＡ：ｌｏｇｉｃａｌ  ｂｌｏｃｋ  ａｄｄｒｅｓｓ）である（他の実施形態では、論理アドレスはいくつかの他の形式の論理的識別子に対応し得る）。一実施形態では、論理セクタ／ブロック３１０は、所与の論理アドレスに関連する最小データブロックを表す。単なる一例として、論理ブロック３１０は約５１２バイトのサイズであり得る（一方、以下に論述される論理的消去ブロックおよび論理ページはそれぞれ約４０ＭＢおよび８ｋＢであり得る）。さらに別の例として、論理ブロック３１０は約４ｋＢであり得る。
【００４８】
物理アドレス空間３０４は、一実施形態では、論理的記録ブロック上のデータの配置に対応する物理アドレスに分割される。図３Ｂに関してさらに詳細に論述されるように、一実施形態では、論理ブロック３１０の内容は論理的消去ブロック３２０内のパケット３６０として格納され得る。図３Ｃに関し論述されるように、様々な実施形態では、物理アドレス空間３０４は、書き込み操作が１つまたは複数の付加点においてだけ行われ得るログ構造として編成され得る。
【００４９】
いくつかの実施形態では、ドライバ１２６は、論理アドレス空間３０２が「スパース（ｓｐａｒｓｅ）アドレス空間」となるように、格納装置１３０の物理アドレス空間３０４より著しく大きい論理アドレス空間３０２を提示し得る（本開示の目的のため、スパースアドレス空間は下位格納装置の物理アドレス空間より少なくとも１０％大きい任意の論理アドレス空間である）。例えば、一実施形態では、ドライバ１２６は、３２ビット物理アドレス空間へ４８ビットスパースアドレス空間を提示し得る。このような実施形態では、アプリケーション１２２は、論理アドレス空間３０２のうちのかなりの数の未使用部分が格納データのブロック間に存在し得るように、全アドレス範囲よりかなり狭い範囲の論理アドレス空間３０２を使用し得る。
【００５０】
いくつかの実施形態では、ドライバ１２６は、データ格納のために論理アドレス空間３０２の一部分をアプリケーション１２２へ割り振り得る。例えば、示された実施形態では、アプリケーション１２２Ａ、１２２Ｂには論理アドレス範囲３１２Ａ、３１２Ｂがそれぞれ割り振られた（但し、他の実施形態では、アプリケーション１２２は割り振られた範囲３１２を共有し得る）。したがって、アプリケーション１２２Ａは、範囲３１２Ａ内の論理ブロック３１０をアドレス指定することによりデータを読み出しおよび書き込み得る。例えば、一実施形態では、アプリケーション１２２Ａは、論理ブロック３１０Ａ１、３１０Ａ２を含むアドレス範囲のアトミック書き込みを要求し得る。次に、これらの論理ブロック３１０はパケット３６０Ａ、３６０Ｂとして格納装置１３０Ａ、１３０Ｂ全体にわたって格納され得る。同様に、アプリケーション１２２Ｂは範囲３１２Ｂ内の論理ブロック３１０をアドレス指定することによりデータ（論理ブロック３１０Ｂのデータなど）にアクセスし得る。いくつかの実施形態では、範囲３１２は格納装置１３０上の分離パーティション（上述のように仮想格納ユニット（ＶＳＵ）とも呼ばれる）に対応し得る。
【００５１】
様々な実施形態では、アトミック書き込み中に書き込まれたパケット３６０の位置は、当該物理アドレスへの論理アドレスのマッピングに依存し得る（同論理アドレスは、計算システム１００内の格納装置１３０の特定配置だけでなくパーティションの特定配置にも依存し得る）。したがって、示された実施形態では、論理ブロック３１０Ａ１、３１０Ａ２のアトミック書き込みは、論理ブロック３１０Ａ１、３１０Ａ２の論理アドレスが格納装置１３０Ａ、１３０Ｂ両方内の物理アドレスへマッピングされるので、格納装置１３０Ａ、１３０Ｂ内にそれぞれ配置されたパケット３６０Ａ、３６０Ｂに対し行われる。他の例では、論理ブロック３１０Ａ１、３１０Ａ２の論理アドレスは、データが複数の格納装置１３０のうちの１つだけ（または、格納装置１３０のいくつかのサブセットだけ）へ書き込まれるように異なるやり方でマッピングされ得る。したがって、一実施形態では、アプリケーション１２２Ａは、データが格納装置１３０Ａ、１３０Ｂ両方内に格納されるようにするアトミック書き込みの第１の要求を発行し得、そしてデータが格納装置１３０Ａ上だけに格納されるようにする第２の後続要求を発行し得る。
【００５２】
上述のように、様々な実施形態では、ドライバ１２６は、アトミック書き込みの失敗を検知し、かつ、アトミック書き込みをロールバックするために使用可能な１つまたは複数の注釈１５０を格納し得る。示された実施形態では、注釈１５０は、説明目的のために専用ブロック３１４として示された論理ブロック３１０内に格納される。このような実施形態では、専用ブロック３１４は予約論理アドレス範囲３１６内に配置され得る。一実施形態では、専用範囲３１６は、専用ブロック３１４を格納するために予約された１つまたは複数の論理ブロックアドレスの範囲である（すなわち、範囲３１６は、上述のアプリケーション１２２などのユーザレベルアプリケーションからのアプリケーションデータを有する論理ブロック３１０を含まない）。いくつかの実施形態では、範囲３１６は、範囲３１２外に存在し得、アプリケーション１２２によりアクセス不能な場合がある（上述のように、これは、予約範囲３１６内のアドレスを規定するいかなるデータ要求も拒否するドライバ１２６に起因し得、アプリケーション１２２は予約範囲３１６内のいかなるアドレスの存在にも気付かない場合がある）。このような実施形態では、アプリケーション１２２は依然として、ドライバ１２６へのＡＰＩ呼び出しを介し注釈１５０の内容を読み出すことができる場合があるが、アプリケーション１２２は、注釈１５０のアドレス（またはアドレス群）を規定する読み出し要求を介し内容へ直接アクセスできない場合がある。予約論理アドレス範囲として描写されたが、他の実施形態では、アドレス範囲３１６は、格納装置１３０の１つまたは複数の物理アドレスを含む物理アドレス範囲であり得る。このような実施形態では、アドレス範囲３１６は複数の格納装置１３０に跨ってもよいし単一の格納装置１３０上にだけに存在してもよい。さらに他の実施形態では、アドレス範囲３１６は予約されない場合がある。すなわち、注釈１５０は、ユーザデータ（すなわちユーザレベルアプリケーションのデータ）を含む格納ブロックが点在する格納ブロック内に格納され得る。範囲３１６はまた、連続的または非連続的アドレスを含み得る。示された実施形態では、アプリケーション１２２Ａ、１２２Ｂのそれぞれは範囲３１６Ａ、３１６Ｂのそれぞれに関連する。このような実施形態では、各範囲３１６はそのそれぞれのアプリケーション１２２に関連する書き込みのための注釈１５０を格納し得る。例えば、専用ブロック３１４Ａは、アプリケーション１２２Ａにより要求された直近のアトミック書き込みのための注釈１５０を格納し得、専用ブロック３１４Ｂは、アプリケーション１２２Ｂにより要求された直近のアトミック書き込みのための注釈１５０を格納し得、したがって、ドライバ１２６は、いずれかのアトミック書き込みのためのロールバックを行うことができる場合がある。いくつかの実施形態では、範囲３１６は、一組の直近のアトミック書き込みのための複数の専用ブロック３１４を格納することができる場合がある。例えば、範囲３１６Ａは最後の４つの要求されたアトミック書き込みの注釈１５０を格納し得る。他の実施形態では、アプリケーション１２２は予約範囲３１６を共有し得る。いくつかの実施形態では、範囲３１２はその当該範囲３１６と共に配置され得、例えば、範囲３１６Ａは範囲３１２Ａに隣接し得る。他の実施形態では、範囲３１６はそれぞれの範囲３１２から切り離され得る。いくつかの実施形態では、範囲３１６は一緒に配置され得、例えば、範囲３１６は論理アドレスの１つの隣接範囲を形成し得る。いくつかの実施形態では範囲３１６は静的であり得、他の実施形態では範囲３１６は動的であり得る。
【００５３】
示された実施形態では、専用ブロック３１４は注釈パケット３６２として格納される。いくつかの実施形態では、注釈パケット３６２は、アプリケーション１２２、ドライバ１２６のガーベッジコレクションプロセス等々により不注意に修正または削除されないように保護され得る。これを達成するために、一実施形態では、注釈パケット３６２は、格納装置１３０上の特定の予約領域（例えば、ドライバ１２６により維持されるメタデータを格納するために予約された特定の論理的消去ブロック３２０）内に格納され得る。格納装置１３０上の特定の予約領域へのアクセスは、アプリケーション１２２がそのアトミック格納操作のためのメタデータだけにアクセスし得るように制御され得る。注釈パケット３６２の一実施形態については図４Ｂに関連して以下に論述される。
【００５４】
次に図３Ｂを参照すると、格納装置１３０内の格納ブロックのブロック図が描写される。示された実施形態では、格納バンク１３４は、別のダイ３０６内に配置された複数の物理的消去ブロック（ＰＥＢ：ｐｈｙｓｉｃａｌ  ｅｒａｓｅ  ｂｌｏｃｋ）３３０を含む論理的消去ブロック（ＬＥＢ）３２０へ編成される。論理的消去ブロック３２０はさらに、複数の論理ページ３４０に分割され、論理ページ３４０は複数の物理ページ３５０を含む。物理ページ３５０は、エラー訂正コード（ＥＣＣ：ｅｒｒｏｒ  ｃｏｒｒｅｃｔｉｏｎ  ｃｏｄｅ）チャンク３７０へグループ化され得る複数のパケット３６０を含む。
【００５５】
本明細書で使用されるように、用語「消去ブロック」は概して、論理的消去ブロックまたは物理的消去ブロックを指す。一実施形態では、物理的消去ブロック３３０は、（例えば、ダイ上のセルの配線のために）所定の時間に消去され得る所与の格納バンク１３４を有する最小格納ブロックを表す。一実施形態では、論理的消去ブロック３２０は消去命令を受信することに応答してコントローラ１３２により消去可能な最小ブロックを表す。このような実施形態では、特定の論理的消去ブロック３２０を規定する消去命令を受信すると、コントローラ１３２は論理的消去ブロック３２０内の各物理的消去ブロック３３０を同時に消去し得る。所与の論理的消去ブロック３２０内の物理的消去ブロック３３０（例えば、ブロック３３０Ａ、３３０Ｂ）は別のダイ３０６内に存在したとしても物理アドレス空間３０４内では隣接すると考えられ得るということに留意されたい。したがって、用語「隣接した」は、同じ物理的媒体内に格納されたデータだけでなく別の媒体内に格納されたデータへも適用可能な場合がある。
【００５６】
一実施形態では、物理ページ３５０は、所定の時刻に書き込まれ得る所与の格納バンク１３４内の最小格納ブロックを表す。一実施形態では、論理ページ３４０は、コントローラ１３２により支援される最小書き込み可能格納ブロックである（一実施形態では、コントローラ１３２は、最大で論理ページ分のデータまで格納するように構成されたバッファを含み得、バッファが一杯になると同時に、コントローラ１３２はバッファの内容を単一論理ページへ書き込み得る）。いくつかの例では、論理ページ３４０を複数のダイ３０６にわたって分割することで、複数のダイ３０６が並列にアクセスされる際の一組のデータのアクセス時間をより速くし得る。
【００５７】
一実施形態では、パケット３６０は、所定時刻に読み出され得る所与のバンク１３４内の最小格納ブロックを表す。一実施形態では、ＥＣＣチャンク３７０はコントローラ１３２により読み出し可能な最小格納ブロックである。いくつかの実施形態では、パケット３６０は、パケットヘッダだけでなく論理ブロック３１０（またはいくつかのインスタンス内の複数ブロック３１０）の内容も含み得るので論理ブロック３１０より若干大きい場合がある。
【００５８】
いくつかの実施形態では、ドライバ１２６はメタデータと格納ブロック３２０〜３７０のうちの１つまたは複数とを関連付け得る。本明細書で使用されるように、用語「メタデータ」は固体格納装置１３０の動作を容易にするように使用可能なシステムデータを指し、メタデータは、例えばアプリケーションにより生成されるデータ（すなわち「アプリケーションデータ」）またはオペレーティングシステムにより「ユーザデータ」と見なされる形式のデータとは対照的である。例えば、一実施形態では、論理的消去ブロック３２０は、限定しないが、使用統計値（例えば、当該ブロック３２０に対し行われたプログラム消去サイクルの数）、健康統計値（例えば、破損データがそのブロック３２０からどれくらい頻繁に読み出されたかを示す値）、セキュリティまたはアクセス制御パラメータ、シーケンス情報（例えば、手順指標）、持続的メタデータフラグ（例えば、アトミック格納操作内に含まれることを示す）、トランザクション識別子などを規定するメタデータを含み得る。図４Ａに関連して説明されるように、パケット３６０はまた、様々な形式のメタデータを含み得る。様々な実施形態では、ドライバ１２６は格納装置１３０の動作を管理するために、他の形式のメタデータと共にこの情報を使用し得る。例えば、ドライバ１２６は、読み出しおよび書き込み操作の実行を容易にするために、格納装置１３０を以前の状態へ回復する（例えば、ドライバにより使用される様々なデータ構造の再構築および／または格納装置１３０に対し行われた一連の格納操作を再生することを含む）等々のためにこの情報を使用する可能性がある。
【００５９】
次に図３Ｃを参照すると、物理アドレス空間３０４内のログ構造３８０のブロック図が描写される。図示のように、様々な実施形態では、データは、最初の論理ページ３４０（例えば、ページ３４０Ａ）から始まる付加点３８２（「ヘッド」とも呼ばれる）に連続的に格納される。追加データが格納されると、付加点３８２はログ構造３８０内の後続の論理ページ３４０（例えば、ページ３４０Ｂ、３４０Ｃなど）へ進む（本明細書で使用されるように、用語「隣接した」は、順番に次々と書き込まれる格納ブロックについて記述するために使用され得、例えば、図示のように、論理ページ３４０Ａは論理ページ３４０Ｂに隣接し、ＬＥＢ３２０ＡはＬＥＢ３２０Ｂに隣接する）。最終的に、十分なデータを格納した後、付加点３８２は格納装置１３０内の「最終」ページ３４０に到達し、この点で、付加点３８２は最初の論理ページ３４０へ折り返す。したがって、ログ構造３８０はループ／サイクルとして描写される。多くのデータが格納されると、使用可能な論理ページ３４０（陰影の無いページ３４０として示される）の数は減少し、使用済み論理ページ３４０（陰影付きページ３４０として示される）の数は増加する。上に論述したように、これらの論理ページ３４０を再使用する（すなわち、さらなる書き込みを受信するために利用可能にする）ために、一実施形態では、ドライバ１２６は論理的消去ブロック３２０に対し消去操作を行う。一実施形態では、テール３８４は、構造３８０内で依然として使用される最も古い論理ページ３４０を識別するために維持される（テールに位置するページ以外のページはテールに位置するページより若いと考えられる）。最も古い論理ページ３４０を有する論理的消去ブロック３２０が最終的に消去されると、テール３８４は、ログ構造３８０の端で使用される次の最も古い論理ページ３４０へ前進させられる。
【００６０】
一般的に、格納装置１３０内の他のデータほど頻繁に修正されないデータはテール３８４方向に移動することになる（このようなデータは「より冷たい温度」を有するとしてまたは単に「コールドデータ」として記載され得る）。一方、より頻繁に修正されるデータ（「より熱い温度」を有するとして、または「ホット」データとして記載される）は通常、ヘッド３８２近くに配置されることになる。したがって、ＬＥＢ３２０Ａ内に配置された有効データはＬＥＢ３２０Ｂ内のデータより恐らく「冷たい」。
【００６１】
複数の格納装置１３０が使用される実施形態では、各格納装置１３０は別個のそれぞれのログ構造として実現され得る。したがって、一実施形態では、各格納層２２０は、そのそれぞれの格納装置１３０の付加点を追跡し得る。したがって、書き込みが複数の格納装置１３０にわたって行われると、データの各部分は格納装置１３０の複数の付加点のうちのそれぞれの１つへ書き込まれ得る。言い換えれば、データの一部は格納装置１３０Ａの付加点３８２へ書き込まれ得、データの一部は格納装置１３０Ｂの付加点３８２へ書き込まれ得る等々である。但し、他の実施形態では、格納装置１３０は非ログ構造フォーマットで編成され得る。
【００６２】
次に図４Ａを参照すると、パケット３６０のブロック図が描写される。示された実施形態では、パケット３６０はヘッダ４１０とペイロード４２０を含む。上述のように、様々な実施形態では、パケット３６０は、ドライバ１２６により使用可能な様々な形式のメタデータを含み得る。示された実施形態では、このメタデータは、ペイロード４２０内のデータの論理ブロックアドレス（ＬＢＡ）４１２、一組のアトミックビット４１４、およびエラー訂正コード（ＥＣＣ）４１６を含む。パケットヘッダ４１０はまた、パケットサイズ、他のパケットへのリンケージなどの追加形式のメタデータ（雑（ｍｉｓｃｅｌｌａｎｅｏｕｓ）ブロック４１８により示される）を含み得る。他の実施形態では、ブロック４１２〜４２０はまた、示されたものとは異なるやり方で配置され得る。
【００６３】
アトミックビット４１４は、一実施形態では、単一の格納装置１３０へのアトミック書き込みが失敗したかどうかを判断するために使用可能である。一実施形態では、アトミックビット４１４は、アトミック書き込み中に格納された一組のパケット３６０内の最初および最後のパケット３６０を示し得る。したがって、最初または最後のパケット３６０が欠落または破損していれば、ドライバ１２６は書き込みが正常に終了しなかったと結論し得る。様々な実施形態では、アトミックビット４１４は、上述のようにおよび次に説明するように複数の格納装置１３０全体にわたるアトミック書き込みが失敗したかどうかを判断するために使用可能な注釈１５０と異なる。
【００６４】
次に図４Ｂを参照すると、注釈パケット３６２のブロック図が描写される。示された実施形態では、注釈パケット３６２はヘッダ４１０とペイロード４２０を含み、ペイロード４２０は注釈１５０を含む。上述のように、いくつかの実施形態では、注釈１５０は、アトミック書き込みが行われたＬＢＡ範囲４２２と、アトミック書き込みが発生したときに対応するシーケンス番号４２４とを含む。すなわち、シーケンス番号４２４は、タイムスタンプ（例えば、データの時刻、計算システム１００が動作した時間量などを示す）、行われた書き込み操作の数を示す値等々を含み得る。いくつかの実施形態では、複数の格納ユニット全体にわたる各アトミック書き込みにはそれぞれのシーケンス番号４２４が割り当てられる。他の実施形態では、アトミック書き込みを構成する格納ユニットへの各個々の書き込みにはそれぞれのシーケンス番号４２４が割り当てられ、したがって、例えば、４つの格納装置全体にわたるアトミック書き込みには、アトミック書き込みを構成する４つの個々の書き込みの４つのそれぞれのシーケンス番号が割り当てられであろう。いくつかの実施形態では、シーケンス番号４２４は、アトミック書き込みを容易にするために、発行された各メッセージへ割り当てられ得る。例えば、アトミック書き込みは、個々の書き込み操作毎に発行する複数のメッセージをさらに含む複数の個々の書き込み操作を各格納装置１３０に対し行うことを含み得、したがって、このような実施形態では、各メッセージにはシーケンス番号４２４が割り当てられ得る。注釈１５０はまた、アトミック書き込み中に使用される格納装置１３０の指示、アトミック書き込みを容易にするために使用されるもの以外のメタデータ（すなわち、いくつかの他の目的に使用されるメタデータ）等々の追加情報（雑ブロック４２６により示される）を含み得る。この情報はまた、上述のように、アプリケーション１２２により提供されるメタデータを含み得る。注釈パケット３６２内の注釈１５０はまた、示されたものとは異なるやり方で実現され得る。したがって、他の実施形態では、ブロック４２２〜４２６は異なるやり方で配置され得、より多くのまたはより少ないブロックが存在し得る。
【００６５】
ドライバ１２６は、アトミック書き込みが失敗したかどうかを注釈１５０内のメタデータに基づき判断するための様々な技術を使用し得る。一実施形態では、格納装置１３０へ書き込まれる各一組のパケット３６０と共にシーケンス番号のインスタンスが格納される。例えば、シーケンス番号は、各組内の最終パケット３６０のペイロード４２０内に書き込まれ得る。このような実施形態では、ドライバ１２６は、これらのシーケンス番号が格納される場所を識別するためにＬＢＡ範囲４２２を使用し得る。次に、ドライバ１２６はこれらの数とシーケンス番号４２４とを比較し得る。一致しなければ、ドライバ１２６は書き込みが失敗したと結論し得る。しかし、一致すれば、ドライバ１２６は書き込みが正常に終了したと結論し得る。別の実施形態では、ドライバ１２６は、範囲４２２内のＬＢＡとパケット３６０内のＬＢＡ４１２とを比較し得る。一致しなければ、ドライバ１２６は書き込みが正常に終了しなかったと結論し得る。さらに別の実施形態では、ドライバ１２６は、様々な格納装置１３０上の関係パケット３６０を識別するためにＬＢＡ範囲４２２を使用し得る。次に、ドライバ１２６は、格納装置１３０に対して行われた個々の書き込み操作のうちのいずれかが失敗したかどうかを判断するためにアトミックビット４１４を使用し得る。したがって、アトミックビット４１４が複数の書き込み操作のうちの１つの失敗を示せば、ドライバ１２６は複数の格納装置１３０全体にわたるアトミック書き込みが失敗したと結論し得る。様々な実施形態では、ロールバックが行われれば、ドライバ１２６は、それらの位置でデータを無効にするために、アドレス範囲４２２内に規定されたアドレス（または、部分的ロールバックの場合にはアドレスのサブセット）のそれぞれのＴＲＩＭ命令を発行し得る。
【００６６】
次に図５を参照すると、方法５００の流れ図が描写される。方法５００は、計算システム１００または格納装置１３０などの装置により行われ得る方法の一実施形態である。したがって、一実施形態では、装置は、方法５００を行うためにドライバ１２６などのドライバのプログラム命令を実行し得る。いくつかの実施形態では、方法５００を実行することで、電力喪失、オペレーションシステム故障、格納装置故障などのクラッシュから回復するシステム能力を改善し得る。
【００６７】
工程５１０では、一組のデータのアトミック書き込み操作を行う要求（例えば、要求２０２）を受信する。いくつかの実施形態では、要求は、格納ユニット（例えば、格納装置１３０、１つまたは複数の格納装置１３０内の仮想格納ユニット、またはそれらの組み合せ）のアドレス範囲が割り当てられたアプリケーション（例えば、アプリケーション１２２Ａ）から受信される。上述のように、このアドレス範囲は、隣接するまたは隣接しない論理的または物理的アドレス範囲であり得、また、単一の格納ユニットに限定され得る、または複数の格納ユニットに跨り得る。アドレス範囲は、データを格納するためのアプリケーション（例えば、論理ブロック３１０Ａ）によりアクセス可能な場合がある。一実施形態では、要求は、データが格納される範囲の１つまたは複数のアドレスを規定し得る。
【００６８】
工程５２０では、要求に応答して、少なくとも１つの格納ユニット内の専用位置にメタデータ（例えば、注釈１５０）を格納することを含み、一組のデータが複数の格納ユニット（例えば、格納装置１３０Ａ、１３０Ｂ）にわたって書き込まれる。いくつかの実施形態では、工程５２０は、複数の格納装置のうちの第１の格納装置内の専用位置にメタデータの第１のインスタンス（例えば、格納装置１３０Ａ上に注釈１５０）を格納することと、複数の格納装置のうちの第２の格納装置内の専用位置にメタデータの第２のインスタンス（例えば、格納装置１３０Ｂ上に同じ注釈１５０の複製）を格納することとを含む。様々な実施形態では、メタデータは書き込みが正常に終了したかどうかを判断するために使用可能である。メタデータは、書き込み成功を判断するために明示的にまたは暗黙的に使用され得る。メタデータの明示的な使用は、メタデータが同じアトミック書き込みトランザクションの一部であるということを保証するためにメタデータの様々なインスタンス間でタイムスタンプまたはシーケンス識別子を比較することを含み得る。メタデータの暗黙の使用は、各格納ユニットのメタデータが存在するかどうかの簡単な照査を含み得る。特定の格納ユニットのメタデータが存在しなければ、これは、アトミック書き込みトランザクションが不成功だったという明確な暗黙の指標を提供し得る。
【００６９】
一実施形態では、専用位置（例えば、予約範囲３１６）はアドレス範囲（例えば、範囲３１２）外に存在する。いくつかの実施形態では、工程５２０は、書き込み操作が発生した順番をシーケンス番号が指示するように、ユニットに対して行われる書き込み操作へシーケンス番号を割り当てる工程を含む。一実施形態では、メタデータは、一組のデータが書き込まれたアドレス範囲（例えば、ＬＢＡ範囲４２２）と、一組のデータの書き込みに対応するシーケンス番号（例えば、シーケンス番号４２４）とを規定する。いくつかの実施形態では、工程５２０は、一組のデータが書き込まれる格納ユニットのそれぞれの上にシーケンス番号のそれぞれのインスタンスを格納する工程と、書き込みが正常に終了したかどうかをシーケンス番号のインスタンスが一致したことを検証することにより判断する工程とを含む。いくつかの実施形態では、格納されたメタデータは、要求を提供したアプリケーションにより提供されるメタデータを含む。一実施形態では、工程５２０は、複数の格納ユニットのそれぞれからメタデータを読み出す工程と、アトミック書き込み操作が失敗したということをメタデータ読み出し工程に基づき判断する工程とを含む。一実施形態では、上記読み出し工程と判断行程はアトミック書き込みを要求するアプリケーションにより行われ得るが、別の実施形態では、上記読み出し工程と判断行程はドライバにより行われ得る。いくつかの実施形態では、工程５２０は、書き込みが正常に終了しなかったということを、要求を提出したアプリケーションへ（例えば、書き込み状態２０４を介し）指示する工程と、アトミック書き込み操作をロールバックする要求（例えば、ロールバック命令２０６）をアプリケーションから受信する工程とを含む。いくつかの実施形態では、上記指示する工程は、一組のデータが正常に書き込まれなかった１つまたは複数の論理ブロックアドレスを識別する工程を含む。一実施形態では、工程５２０はアトミック書き込み操作をロールバックする工程を含み、これは、規定アドレス範囲（例えば、ＬＢＡ範囲４２２）へ書き込まれたデータを無効にする工程を含む。
【００７０】
方法５００を行う計算システムと相互作用するアプリケーションのための同様な方法（例えば、一実施形態ではアプリケーション１２２を実行する計算システム）もまた企図されるということに留意されたい。
【００７１】
次に図６Ａを参照すると、モジュールを含む装置６００のブロック図が描写される。本明細書で使用されるように、用語「モジュール」は、操作を行うように構成された回路、または操作を行う１つまたは複数のプロセッサにより実行可能なプログラム命令が格納されたメモリを指す。したがって、モジュールは、様々なやり方で実現されるハードウェア回路として実現され得る。ハードウェア回路は、例えば、カスタム超大規模集積（ＶＬＳＩ：ｖｅｒｙ−ｌａｒｇｅ−ｓｃａｌｅ  ｉｎｔｅｇｒａｔｉｏｎ）回路またはゲートアレイ、ロジックチップ、トランジスタ、または他の個別部品などの市販半導体を含み得る。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスで実現され得る。モジュールはまた、規定動作を行うように実行可能なプログラム命令を格納する非一時的コンピュータ可能媒体のうちの任意の好適な形式であり得る。装置６００は、本明細書で説明する機能のうちの任意のものを実行するモジュールを含み得る。例えば、示された実施形態では、装置６００はベクトル格納モジュール６１０とロールバックモジュール６２０を含む。
【００７２】
ベクトル格納モジュール６１０は、一実施形態では、複数の格納装置に対し一組のデータの一群の格納操作を行うように構成される。一群の格納操作は一組のデータとは独立にメタデータ（例えば、注釈１５０）を格納することを含む。このような実施形態では、メタデータは一群の格納操作を示す。いくつかの実施形態では、ベクトル格納モジュール６１０は、格納ブロック内のメタデータ（例えば、注釈パケット３６２）を複数の格納装置のうちの少なくとも１つに格納するように構成される。格納ブロックは、一組のデータに関連するアプリケーションによりアクセス不能なアドレス（例えば、範囲３１６に関連するＬＢＡ）を有し得る。一実施形態では、ベクトル格納モジュール６１０は、一群の格納操作が正常に行われたかどうかを（例えば、書き込み状態２０４を介し）示すように構成される。いくつかの実施形態では、ベクトル格納モジュール６１０は一組のデータの一部の格納操作を行うように構成される。格納操作は、パケットヘッダ（例えば、ヘッダ４１０）を有するパケット（例えば、パケット３６０）内に一組のデータの一部をカプセル化することを含む。パケットヘッダは、格納操作が正常に行われたかどうかを判断するために使用可能な１つまたは複数のビット（例えば、アトミックビット４１４）を含み得る。このような実施形態では、１つまたは複数のビットは格納されたメタデータと異なる。
【００７３】
ロールバックモジュール６２０は、一実施形態では、格納されたメタデータに基づき一群の格納操作をロールバックするように構成される。一実施形態では、ロールバックモジュール６２０は要求（例えば、ロールバック命令２０６）を受信することに応答してロールバックを行うように構成される。いくつかの実施形態では、要求は部分的ロールバックを行うための要求であり得る。このような実施形態では、ロールバックモジュール６２０は、要求に応じて一群の格納操作のすべてではなく一群の格納操作のサブセットをロールバックするように構成される。様々な実施形態では、ロールバックモジュール６２０は、複数の格納装置へ１つまたは複数のＴＲＩＭ命令を発行することにより一群の格納操作をロールバックするように構成される。
【００７４】
いくつかの実施形態では、ベクトル格納モジュール６１０および／またはロールバックモジュール６２０はコントローラ１３２などのコントローラ内に存在する。別の実施形態では、モジュール６１０および／または６２０はメモリ１２０などのメモリ内に存在し得る。要するに、装置６００のモジュールは、本明細書で説明する機能を行うために任意の好適なやり方で実現され得る。装置６００はまた、モジュール６１０、６２０の機能を有する任意の好適な構造に対応し得る。一実施形態では、装置６００は、格納装置１３０などの格納装置を含む（またはそれに結合される）計算システムである。別の実施形態では、装置６００は、コントローラ（コントローラ１３２など）および１つまたは複数の格納素子（格納バンク１３４など）を含むカードである。さらに別の実施形態では、装置６００は、モジュール６１０、６２０を格納するメモリシステムを含む計算システムである。
【００７５】
次に図６Ｂを参照すると、モジュールを含む装置６５０のブロック図が描写される。装置６５０は、本明細書で説明する機能のうちの任意のものを実行するモジュールを含み得、装置６００に関する上述のものなど任意の好適な構造に対応し得る。示された実施形態では、装置６５０は格納モジュール６６０とエラー検出モジュール６７０を含む。
【００７６】
格納モジュール６６０は、一実施形態では、一群の記憶装置に関連するアドレス範囲へ一組のデータのアトミック書き込みを試みるように構成される。このような実施形態では、格納モジュール６６０はさらに、アドレス範囲（例えば、範囲３１２Ａ）外のアドレスを有する格納ブロック（例えば、専用ブロック３１４）内に、一組のデータを書き込むことを指示するメタデータ（例えば、注釈１５０）を格納するように構成される。いくつかの実施形態では、格納モジュール６６０は、シーケンス番号（例えば、パケット３６０のペイロード４２０内の）のそれぞれのインスタンス（アトミック書き込みが試みられた順番を示す）と共に、一組のデータのそれぞれの部分を一群の格納装置内の各格納装置へ（例えば、パケット３６０Ａ、３６０Ｂを格納装置１３０Ａ、１３０Ｂそれぞれへ）書き込むように構成される。いくつかの実施形態では、格納モジュール６６０は、各格納ブロックが当該アプリケーションの直近のアトミック書き込みに対応するメタデータを含むように複数のアプリケーション（例えば、アプリケーション１２２Ａ、１２２Ｂ）の各アプリケーションの格納ブロック（例えば、専用ブロック３１４Ａ、３１４Ｂ）を維持するように構成される。いくつかの実施形態では、格納モジュール６６０は、複数の格納ブロックがアプリケーションの複数の直近に行われたアトミック書き込みに対応するメタデータを含むようにアプリケーションの複数の格納ブロック（例えば、アプリケーション１２２Ａの範囲３１６Ａ内の複数の専用ブロック３１４Ａ）を維持するように構成される。一実施形態では、アドレス範囲はスパースアドレス空間（例えば、論理アドレス空間３０２）の論理ブロックアドレス範囲（例えば、範囲３１２Ａ）である。一実施形態では、外部アドレスは論理ブロックアドレス範囲に隣接しない論理ブロックアドレスである。
【００７７】
エラー検出モジュール６７０は、一実施形態では、アトミック書き込みが正常に終了したかどうかをメタデータに基づき判断するように構成される。いくつかの実施形態では、エラー検出モジュール６７０はアトミック書き込みが正常に終了したかどうかを、シーケンス番号のインスタンスとメタデータ内のシーケンス番号（例えば、シーケンス番号４２４）のインスタンスとを比較することにより判断するように構成される。
【００７８】
次に図７Ａを参照すると、格納手段７１０およびアトミック書き込み手段７２０を含む装置７００のブロック図が描写される。装置７００は、格納手段７１０およびアトミック書き込み手段７２０の機能を有する任意の好適な構造に対応し得る。例えば、装置７００は、サーバ、ラップトップ、デスクトップ、携帯装置などの任意の好適なタイプの計算装置であり得る。いくつかの実施形態では、装置７００は、協働する複数の計算装置を含み得る。いくつかの実施形態では、装置７００は、コントローラ（コントローラ１３２など）および１つまたは複数の格納素子（格納バンク１３４など）を含むカードである。
【００７９】
様々な実施形態では、格納手段７１０は、格納装置１３０に関して本明細書で説明した機能のうちの任意のものを実行し得る。したがって、一実施形態では、格納手段７１０は、ログ構造を使用してデータを格納する。格納手段７１０は、格納装置１３０に関して上述したものなど任意の好適な構造（例えば、１つまたは複数の格納バンク１３４、計算システム１００、格納システム２００など）に対応し得る。したがって、語句「ログ構造を使用してデータを格納する手段」は、それらの当該等価物だけでなく上に挙げた構造のうちの任意のものを指す。
【００８０】
様々な実施形態では、アトミック書き込み手段７２０は、ドライバ１２６に関して本明細書で説明した機能のうちの任意のものを実行し得る。したがって、一実施形態では、アトミック書き込み手段７２０は、複数の格納ブロックのサブセット（例えば、範囲３１２Ａ）へデータをアトミック的に書き込み、かつ、サブセット内に存在しない格納ブロック（例えば、専用ブロック３１４Ａ）へメタデータを書き込む。このような実施形態では、メタデータはデータの書き込みをロールバックするように使用可能である。いくつかの実施形態では、アトミック書き込み手段７２０はまた、ドライバ１２６に関連して説明したもの以外の機能を実行し得る。
【００８１】
アトミック書き込み手段７２０は任意の好適な構造に対応し得る。一実施形態では、アトミック書き込み手段７２０は操作を行うように構成されたハードウェア回路（例えば、コントローラ１３２）である。ハードウェア回路は、例えば、カスタム超大規模集積（ＶＬＳＩ）回路またはゲートアレイ、ロジックチップ、トランジスタ、または他の個別部品などの市販半導体を含み得る。手段７２０はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスで実現され得る。別の実施形態では、手段７２０は、アルゴリズムを実施する１つまたは複数のプロセッサ（例えば、プロセッサユニット１１０）により実行可能なプログラム命令を格納したメモリ（例えば、ＲＡＭ１２０）を含む。一実施形態では、手段７２０は、図７Ｂに関して論述されたアルゴリズムを実行する。いくつかの実施形態では、手段７２０は、モジュール６１０、６２０、６６０および／または６７０に対応する。したがって、語句「データを複数の格納ブロックのサブセットへアトミック的に書き込み、かつ、サブセット内に存在しない格納ブロックへメタデータを書き込む手段」は、それらの当該等価物だけでなく上に挙げた構造のうちの任意のものを指し得る。
【００８２】
次に図７Ｂを参照すると、アルゴリズム７３０を示す流れ図が描写される。アルゴリズム７３０は、アトミック書き込み手段７２０により実施されるアルゴリズムの一実施形態である。示された実施形態では、アルゴリズム７３０は、工程７３２において、上述のように、一組のデータを複数の格納装置全体にわたって書き込み、注釈を複数の格納装置のうちの少なくとも１つへ書き込むことを含む。アルゴリズム７３０はさらに、工程７３４において、一組のデータを書き込むことの正常な終了を検証するために注釈を使用することを含む。上述のように、いくつかの実施形態では、工程７３４は、シーケンス番号、論理アドレス、注釈などにより識別された位置におけるアトミックビットなどを比較することを含み得る。
【００８３】
次に図８を参照すると、計算システム１００を含む格納システム８００のブロック図が描写される。上述のように、計算システム１００は、格納装置１３０内に格納されたデータを操作する１つまたは複数のアプリケーションを含み得る。示された実施形態では、計算システム１００は、クライアントシステム８２０Ａ、８２０Ｂがネットワーク８３０を介し１つまたは複数の格納装置１３０内のデータにアクセスし、かつ、データをその中に格納できるようにする格納サーバアプリケーション８１０を実行する。例えば、一実施形態では、格納システム８００は、サーバアプリケーション８１０が格納装置１３０からの企業データをクライアント８２０へ配布する企業環境内に関連し得る。いくつかの実施形態では、クライアント８２０は、データを他の計算システムへさらに配布するために、ウェブサーバ、メールサーバ、仮想プライベートネットワーク（ＶＰＮ：ｖｉｒｔｕａｌ  ｐｒｉｖａｔｅ  ｎｅｔｗｏｒｋ）サーバなどの他のサーバアプリケーションを実行し得る。したがって、いくつかの実施形態では、格納サーバアプリケーション８１０は、ファイル転送プロトコル（ＦＴＰ）、ネットワークファイルシステム（ＮＦＳ）プロトコル、サーバメッセージブロック（ＳＭＢ）プロトコル、Ａｐｐｌｅファイルプロトコル（ＡＦＰ）など様々なネットワークアタッチトストレージ（ＮＡＳ）プロトコルを実行し得る。いくつかの実施形態では、計算システム１００は、格納領域ネットワーク（ＳＡＮ）を実現するように構成されたいくつかの計算システム１００のうちの１つであり得る。
【００８４】
本開示は様々な例示的実施形態を参照してなされた。しかし、当業者は、本開示の範囲から逸脱することなく変更と修正が例示的実施形態に対してなされ得るということを認識することになる。例えば、様々な操作工程および操作工程を行うための部品は、特定アプリケーションに依存して、またはシステムの操作に関連する任意の数の費用関数を考慮して（例えば、工程のうちの１つまたは複数は削除、修正、または他の工程と組み合わせられ得る）、別のやり方で実施され得る。したがって、本開示は限定的な意味よりも例示と見なされるべきであり、すべてのこのような修正は本開示の範囲内に含まれるように意図されている。同様に、恩恵、他の利点、および問題の解決策については様々な実施形態に関し上に述べた。しかし、恩恵、利点、問題の解決策、および任意の恩恵、利点または解決策を生じさせ得るまたはより顕著にさせ得る任意の要素は、極めて重要な、必要な、または必須な特徴または要素とみなされてはならない。本明細書で使用されるように、用語「含む」およびその任意の他の変形は非排他的包含をカバーするように意図されているので、一群の要素を含むプロセス、方法、物品または装置は、これらの素子だけを含むのではなく、このようなプロセス、方法、システム、物品または装置に対して明示的に列挙されないまたはそれらに固有である他の要素を含み得る。また、本明細書で使用されるように、用語「結合された」、「結合する」およびその任意の他の変形は、物理的接続、電気的接続、磁気的接続、光学的接続、通信接続、機能的結合、および／または任意の他の接続をカバーするように意図されている。
【００８５】
加えて、当業者により理解されるように、本開示の原理は、コンピュータプログラム製品内で、格納媒体で具現化された機械可読プログラムコード手段を有する機械可読格納媒体に反映され得る。磁気格納装置（ハードディスク、フロッピーディスクなど）、光学格納装置（ＣＤ−ＲＯＭ、ＤＶＤ、Ｂｌｕ−Ｒａｙディスクなど）、フラッシュメモリおよび／または同種のものを含む任意の有形かつ非一時的機械可読格納媒体が利用され得る。これらのコンピュータプログラム命令は、マシンを生成するために汎用コンピュータ、専用コンピュータまたは他のプログラマブルデータ処理装置上にロードされ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置上で実行する命令は、規定機能を実施する手段を生成する。これらのコンピュータプログラム命令はまた、コンピュータまたは他のプログラマブルデータ処理装置に特定のやり方で機能するように指示し得る機械可読メモリ内に格納され得、その結果、機械可読メモリ内に格納された命令は、規定された機能を実施する実施手段を含む製造部品を生成する。コンピュータプログラム命令はまた、一連の操作工程がコンピュータ上で行われるようにするためにまたは他のプログラマブル装置にコンピュータ実施プロセスを生成させるようにするために、コンピュータまたは他のプログラマブルデータ処理装置上にロードされ得、その結果、コンピュータまたは他のプログラマブル装置上で実行する命令は規定された機能を実施する工程を提供する。
【００８６】
本開示の原理は様々な実施形態において示されたが、本開示の原理および範囲から逸脱することなく、特定の環境および動作要件に特に適応化された構造、構成、寸法、素子、材料および部品の多くの修正がなされ得る。これらおよび他の変更または修正は本開示の範囲内に含まれるように意図されている。
【図１】
2018152127.tif 000003
【図２】
2018152127.tif 000004
【図３Ａ】
2018152127.tif 000005
【図３Ｂ】
2018152127.tif 000006
【図３Ｃ】
2018152127.tif 000007
【図４Ａ】
2018152127.tif 000008
【図４Ｂ】
2018152127.tif 000009
【図５】
2018152127.tif 000010
【図６Ａ】
2018152127.tif 000011
【図６Ｂ】
2018152127.tif 000012
【図７Ａ】
2018152127.tif 000013
【図７Ｂ】
2018152127.tif 000014
【図８】
2018152127.tif 000015
【手続補正書】
【提出日】平成30年7月6日(2018.7.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
一組のデータのアトミック書き込み操作を行うアプリケーションからの要求を、ドライバによって受信する工程と、
前記要求に応答して、複数の格納ユニットの全てにわたって前記一組のデータを一部分ずつ、前記ドライバによってアトミック書き込みする工程であって、
前記アトミック書き込みする工程は、前記複数の格納ユニットのうちの少なくとも１つの格納ユニット内の動的位置にメタデータを格納する工程を備え、
前記メタデータは、
前記一組のデータを前記アトミック書き込みする工程に対応するシーケンス番号と、
前記一組のデータが前記アトミック書き込み操作の一部として格納されることを識別する複数のビットと、を備え、
前記複数のビットは、前記シーケンス番号とは別個である、アトミック書き込みする工程と、
前記一組のデータが前記ドライバによって書き込まれた前記動的位置への前記アプリケーションのアクセスを、前記ドライバによって拒否する工程であって、
前記アプリケーションには、前記複数の格納ユニットのアクセス可能なアドレス範囲が割り当てられている、拒否する工程と、
前記アトミック書き込み操作が正常に完了したことを前記複数のビットが示すことを検証することによって、前記アトミック書き込みする工程が完了したか否かを前記ドライバによって判断する工程と、を備える、方法。
【請求項２】
前記ドライバによって、前記複数の格納ユニットに対して行われる書き込み操作へ少なくとも１つのシーケンス番号を割り当てる工程をさらに備え、
前記シーケンス番号は、前記書き込み操作が発生した順番を示し、
前記メタデータは、前記一組のデータが書き込まれるアドレス範囲を特定する、請求項１に記載の方法。
【請求項３】
前記一組のデータをアトミック書き込みする工程の後、前記ドライバによって前記アトミック書き込み操作をロールバックする工程をさらに備え、
前記ロールバックする工程は、前記メタデータによって特定された前記アドレス範囲へ書き込まれたデータを無効にする工程を備える、請求項２に記載の方法。
【請求項４】
前記アトミック書き込みする工程が正常に完了しなかったことを、前記ドライバによって前記アプリケーションへ指示する工程と、
前記アトミック書き込み操作をロールバックする前記アプリケーションからの要求を受信する工程と、をさらに備え、
前記指示する工程は、前記一組のデータが正常に書き込まれなかった１以上の論理ブロックアドレスを識別する工程を備える、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
格納された前記メタデータは、前記要求を提供した前記アプリケーションにより提供されるメタデータを備える、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記メタデータを格納する工程は、
前記複数の格納ユニットのうちの第１の格納ユニット内の動的位置に前記メタデータの第１のインスタンスを前記ドライバによって格納する工程と、
前記複数の格納ユニットのうちの第２の格納ユニット内の動的位置に前記メタデータの第２のインスタンスを前記ドライバによって格納する工程と、を備え、
前記第１のインスタンスおよび第２のインスタンスは冗長である、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
一組のデータの一群の格納操作を行うためにアプリケーションからの要求を受信することに応答して、複数の格納装置に対して前記一群の格納操作を行うように構成されるベクトル格納モジュールであって、前記一群の格納操作は、前記一組のデータとは別個のメタデータを格納することを備える、ベクトル格納モジュールと、
格納された前記メタデータに基づき、前記一群の格納操作が正常に実行されなかったことを判断することに応答して、前記一群の格納操作をロールバックするように構成されるロールバックモジュールと、を備え、
前記一群の格納操作は、データをアトミック的に格納することを備え、
前記メタデータは、前記一組のデータから独立したメタデータを格納することを備える前記一群の格納操作において格納され、
前記メタデータは、前記一組のデータが前記一群の格納操作の一部として格納されることを識別する複数のビットを備え、
前記ベクトル格納モジュールは、前記複数の格納装置のうちの少なくとも１つの格納装置の動的格納ブロック内に前記メタデータを格納するように構成され、
前記一組のデータに関連する前記アプリケーションは、前記動的格納ブロックへのアクセスを拒否され、
前記ロールバックモジュールは、要求を受信することに応答して、前記一群の格納操作のうち正常に実行された格納操作の全てをロールバックするようにさらに構成され、
前記一群の格納操作は、前記一組のデータが書き込まれる前記複数の格納装置のそれぞれに、シーケンス番号のインスタンスをそれぞれ格納することを備え、
前記メタデータは、前記シーケンス番号を特定し、
前記シーケンス番号は、前記一組のデータをアトミック的に格納することに対応し、
前記シーケンス番号は、前記複数のビットとは別個であり、
前記一群の格納操作が正常に実行されたことを判断することは、前記一群の格納操作が正常に完了したことを前記複数のビットが示すことを検証することを備え、
前記ベクトル格納モジュールおよび前記ロールバックモジュールは、非一時的コンピュータ可読媒体に格納される１以上の回路および指示を備え、
前記非一時的コンピュータ可読媒体に格納される前記指示は、前記ベクトル格納モジュールおよび前記ロールバックモジュールとは別個の１以上のプロセッサによって実行可能である、装置。
【請求項８】
前記ベクトル格納モジュールは、前記動的格納ブロック内に格納された前記メタデータに基づき、前記一群の格納操作が正常に行われたか否かを示すように構成され、
前記ロールバックモジュールは、要求を受信することに応答してロールバックするように構成される、請求項７に記載の装置。
【請求項９】
前記要求は、部分的ロールバックを行う要求であり、
前記ロールバックモジュールは、前記要求に応答して、前記一群の格納操作のすべてではなく、前記一群の格納操作のサブセットをロールバックするように構成される、請求項８に記載の装置。
【請求項１０】
前記ロールバックモジュールは、前記複数の格納装置へ１以上のＴＲＩＭ命令を発行することにより前記一群の格納操作をロールバックするように構成される、請求項７〜９のいずれか一項に記載の装置。
【請求項１１】
一群の格納装置に関連するアドレス範囲への一組のデータのアトミック書き込みを試みるように構成され、
前記アドレス範囲の外部の動的アドレスを有する格納ブロック内にメタデータを格納するように構成され、
前記メタデータに基づき、前記アトミック書き込みが正常に完了したか否かを判断するように構成される、コントローラを備え、
前記アドレス範囲は、前記一組のデータに関連するアプリケーションにアクセス可能であり、
前記アプリケーションは、前記アドレス範囲の外部の前記動的アドレスへのアクセスを拒否され、
前記メタデータは、前記一組のデータをアトミック書き込みすることを指示し、
前記メタデータは、前記一組のデータが前記アトミック書き込みの一部として格納されることを識別する複数のビットを備え、
前記メタデータは、シーケンス番号を特定し、
前記シーケンス番号は、前記一組のデータの前記アトミック書き込みに対応し、
前記複数のビットは、前記シーケンス番号とは別個であり、
前記コントローラは、前記アトミック書き込みが正常に完了したことを前記複数のビットが示すことを検証することによって、前記アトミック書き込みが完了したか否かを判断するようにさらに構成されており、
前記コントローラは、非一時的コンピュータ可読媒体に格納される１以上の回路および指示を備え、
前記非一時的コンピュータ可読媒体に格納される前記指示は、前記コントローラとは別個の１以上のプロセッサによって実行可能である、装置。
【請求項１２】
前記コントローラは、複数のアプリケーションのそれぞれの格納ブロックを維持するように構成され、
各格納ブロックは、当該アプリケーションの直近のアトミック書き込みに対応するメタデータを含む、請求項１１に記載の装置。
【請求項１３】
前記コントローラは、アプリケーションの複数の格納ブロックを維持するように構成され、
前記複数の格納ブロックは、前記アプリケーションの複数の直近のアトミック書き込みに対応するメタデータを含む、請求項１１に記載の装置。
【請求項１４】
前記アドレス範囲は、スパースアドレス空間の論理ブロックアドレス範囲であり、
前記アドレス範囲の外部の前記動的アドレスは、前記論理ブロックアドレス範囲に隣接しない論理ブロックアドレスである、請求項１１〜１３のいずれか一項に記載の装置。
【請求項１５】
アプリケーションが、コントローラに対してアトミック書き込み操作のための要求を発行する工程であって、
前記アトミック書き込み操作は、
ドライバによって、複数の格納ユニットの全てにわたって一組のデータを書き込む工程と、
前記アトミック書き込み操作の終わりに、前記複数の格納ユニットのうちの少なくとも１つの格納ユニット内の動的位置にメタデータを書き込む工程と、を備え、
前記アプリケーションは、前記動的位置へのアクセスを拒否され、
前記メタデータは、前記一組のデータが前記アトミック書き込み操作の一部として格納されることを識別する複数のビットを備える、発行する工程と、
前記メタデータを読み出す試みが成功したか否かに基づき、前記アトミック書き込み操作が完了したか否かを判断する工程であって、
前記アトミック書き込み操作は、前記一組のデータが書き込まれる前記複数の格納ユニットのそれぞれに、シーケンス番号のインスタンスをそれぞれ格納する工程を備え、
前記メタデータは、前記シーケンス番号を特定し、
前記シーケンス番号は、前記一組のデータの前記アトミック書き込み操作に対応し、
前記複数のビットは、前記シーケンス番号とは別個であり、
前記アトミック書き込み操作が完了したか否かを判断する工程は、前記アトミック書き込み操作が正常に完了したことを前記複数のビットが示すことを検証することによって実行される、判断する工程と、を備える、方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００８６
【補正方法】変更
【補正の内容】
【００８６】
本開示の原理は様々な実施形態において示されたが、本開示の原理および範囲から逸脱することなく、特定の環境および動作要件に特に適応化された構造、構成、寸法、素子、材料および部品の多くの修正がなされ得る。これらおよび他の変更または修正は本開示の範囲内に含まれるように意図されている。
以下の項目は、本出願時の特許請求の範囲に記載の要素である。
（項目１）
一組のデータのアトミック書き込み操作を行う要求を受信する工程と、
前記要求に応答して、複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを格納することを含み前記複数の格納ユニット全体にわたって前記一組のデータを書き込む工程とを含む方法であって、
前記メタデータは書き込みが終了したかどうかを判断するために使用可能である、方法。
（項目２）
前記要求は、前記複数の格納ユニットのアドレス範囲が割り当てられたアプリケーションから受信され、専用位置は前記アドレス範囲外に存在する、項目１に記載の方法。
（項目３）
前記複数の格納ユニットに対して行われた書き込み操作へ少なくとも１つのシーケンス番号を割り当てる工程をさらに含む、項目１に記載の方法であって、
前記シーケンス番号は、前記書き込み操作が発生した順番を示し、
前記メタデータは、前記一組のデータが書き込まれるアドレス範囲と、前記一組のデータの書き込みに対応するシーケンス番号とを規定する、方法。
（項目４）
前記アトミック書き込み操作をロールバックする工程をさらに含む、項目３に記載の方法であって、前記ロールバック工程は、前記規定アドレス範囲へ書き込まれたデータを無効にする工程を含む、方法。
（項目５）
前記書き込む工程は、前記一組のデータが書き込まれた前記複数の格納ユニットのそれぞれにシーケンス番号のそれぞれのインスタンスを格納する工程を含み、
前記メタデータは前記シーケンス番号の別のインスタンスを含み、
前記方法はさらに、前記書き込む工程が終了したかどうかを前記シーケンス番号の前記インスタンスが一致したことを検証することにより判断する工程を含む、項目１に記載の方法。
（項目６）
前記複数の格納ユニットのそれぞれからメタデータを読み出す工程と、前記アトミック書き込み操作が失敗したということを前記メタデータを読み出すことに基づき判断する工程とをさらに含む項目１に記載の方法。
（項目７）
前記書き込みが正常に終了しなかったということをアプリケーションへ指示する工程であって、前記一組のデータが正常に書き込まれなかった１つまたは複数の論理ブロックアドレスを識別する工程を含む、指示する工程と、
前記アトミック書き込み操作をロールバックする要求を前記アプリケーションから受信する工程とをさらに含む項目１に記載の方法。
（項目８）
前記格納されたメタデータは、前記要求を提供したアプリケーションにより提供されるメタデータを含む、項目１に記載の方法。
（項目９）
前記メタデータを格納する工程は、
前記複数の格納装置のうちの第１の格納装置内の専用位置に前記メタデータの第１のインスタンスを格納する工程と、
前記複数の格納装置のうちの第２の格納装置内の専用位置に前記メタデータの第２のインスタンスを格納する工程とを含み、
前記第１および第２のインスタンスは冗長である、項目１に記載の方法。
（項目１０）
一組のデータの一群の格納操作であって、前記一組のデータと無関係なメタデータを格納することを含む一群の格納操作を複数の格納装置に対して行うように構成されたベクトル格納モジュールであって、前記メタデータは前記一群の格納操作を示す、ベクトル格納モジュールと、
前記格納されたメタデータに基づき前記一群の格納操作をロールバックするように構成されたロールバックモジュールとを含む装置。
（項目１１）
前記ベクトル格納モジュールは、格納ブロック内の前記メタデータを前記複数の格納装置のうちの少なくとも１つに格納するように構成され、
前記格納ブロックは、前記一組のデータに関連するアプリケーションによりアクセス不能なアドレスを有する、項目１０に記載の装置。
（項目１２）
前記ベクトル格納モジュールは前記一群の格納操作が正常に行われたかどうかを示すように構成され、
前記ロールバックモジュールは、要求を受信することに応答して前記ロールバックを行うように構成される、項目１０に記載の装置。
（項目１３）
前記要求は部分的ロールバックを行う要求であり、
前記ロールバックモジュールは、前記要求に応答して前記一群の格納操作のすべてではなく前記一群の格納操作のサブセットをロールバックするように構成される、項目１２に記載の装置。
（項目１４）
前記ロールバックモジュールは前記複数の格納装置へ１つまたは複数のＴＲＩＭ命令を発行することにより前記一群の格納操作をロールバックするように構成される、項目１０に記載の装置。
（項目１５）
前記ベクトル格納モジュールは前記一組のデータの一部の格納操作を行うように構成され、
前記格納操作はパケットヘッダを有するパケット内へ前記一部をカプセル化することを含み、
前記パケットヘッダは前記格納操作が正常に行われたかどうかを判断するために使用可能な１つまたは複数のビットを含み、
前記１つまたは複数のビットは前記格納されたメタデータと異なる、項目１０に記載の装置。
（項目１６）
一群の格納装置に関連するアドレス範囲へ一組のデータのアトミック書き込みを試みるように構成され、かつ、前記アドレス範囲外のアドレスを有する格納ブロック内にメタデータを格納するように構成された格納モジュールであって、前記メタデータは前記一組のデータを書き込むことを指示する、格納モジュールと、
前記アトミック書き込みが正常に終了したかどうかを前記メタデータに基づき判断するように構成されたエラー検出モジュールとを含む装置。
（項目１７）
前記格納モジュールは、前記アトミック書き込みが試みられた順番を示すシーケンス番号のそれぞれのインスタンスと共に、前記一組のデータのそれぞれの一部を前記一群の格納装置内の各格納装置へ書き込むように構成され、
前記エラー検出モジュールは、前記アトミック書き込みが正常に終了したかどうかを、前記シーケンス番号の前記インスタンスと前記メタデータ内の前記シーケンス番号のインスタンスとを比較することにより判断するように構成される、項目１６に記載の装置。
（項目１８）
前記格納モジュールは、複数のアプリケーションのそれぞれのアプリケーションのそれぞれの格納ブロックを維持するように構成され、各格納ブロックは、前記アプリケーションの直近のアトミック書き込みに対応するメタデータを含む、項目１６に記載の装置。
（項目１９）
前記格納モジュールはアプリケーションの複数の格納ブロックを維持するように構成され、前記複数の格納ブロックは、前記アプリケーションの複数の直近のアトミック書き込みに対応するメタデータを含む、項目１６に記載の装置。
（項目２０）
前記アドレス範囲はスパースアドレス空間の論理ブロックアドレス範囲であり、外部アドレスは前記論理ブロックアドレス範囲に隣接しない論理ブロックアドレスである、項目１６に記載の装置。
（項目２１）
ログ構造を使用してデータを格納する第１の手段であって、複数の格納ブロックを含む、第１の手段と、
前記複数の格納ブロックのサブセットへデータをアトミック的に書き込み、前記サブセット内に存在しない格納ブロックへメタデータを書き込む第２の手段であって、前記メタデータは前記データの書き込みをロールバックするために使用可能である、第２の手段とを含む装置。
（項目２２）
アトミック書き込み操作の要求を発行するアプリケーションであって、前記アトミック書き込み操作は、一組のデータを複数の格納ユニット全体にわたって書き込む工程と、前記複数の格納ユニットのうちの少なくとも１つの格納ユニット内の専用位置にメタデータを書き込む工程とを含み、
前記アプリケーションは前記アトミック書き込み操作が終了したかどうかを前記メタデータを読み出す試みに基づき判断する、アプリケーションを含む装置。
【外国語明細書】
2018152127000001.pdf
2018152127000002.pdf
2018152127000003.pdf
2018152127000004.pdf