本開示は、「一実施形態」または「実施形態」を参照することを含む。語句「一実施形態内において」または「実施形態において」の出現は、同じ実施形態を必ずしも指さない。特定の機構、構造または特徴は本開示に整合する任意の好適なやり方で組み合わせられ得る。
本開示はまた、添付図面を含み、それらを参照する。添付図面では、文脈が規定しない限り同様の符号は通常、同様の構成部品を特定する。発明を実施するための形態、添付図面、および特許請求範囲に記載する具体的な実施形態は制限することを意図しない。本開示の範囲から逸脱することなく、他の実施形態が利用され得、他の変更がこれらの例示的実施形態になされ得る。
本開示における様々なユニット、回路または他の部品は、タスクまたはタスク群を行うように「構成された」と記載され請求され得る。このような文脈では、用語「構成された」は、ユニット/回路/部品が、動作中にそれらのタスクまたはタスク群を行う構造(例えば、回路)を含むということを示すことにより構造を暗示するために使用される。したがって、ユニット/回路/部品は、規定されたユニット/回路/部品が現在そのように動作していない(例えば、オンしていない)場合でも「タスクを行うように構成された」と言うことがある。用語「構成された」と共に使用されるユニット/回路/部品は、例えば回路、動作を実施するために実行可能なプログラム命令を格納するメモリなどのハードウェアを含む。加えて、用語「構成された」は、ソフトウェアにより操作される一般的構造(例えば、一般的回路)、および/または当該タスク(群)を行うことができるやり方で動作するファームウェア(例えば、ソフトウェアを実行するFPGAまたは汎用プロセッサ)を含み得る。ユニット/回路/部品が1つまたは複数のタスクを行うように「構成された」という表現は、当該ユニット/回路/部品に対し合衆国法典第35巻112章第6段落を発動しないように明示的に意図されている。
様々なユニット、回路または他の部品は「第1」、「第2」などの用語を使用して記載されることがある。名詞に先立つこれらの用語は名詞の標識として使用され、いかなるタイプの順番(例えば、空間的、時間的、論理的などの)も暗示しない。例えば、複数の格納ブロックを有する格納装置では、用語「第1」および「第2」の格納ブロックは任意の2つの格納ブロック(例えば、他の格納ブロック内に含まれる格納ブロックを含む)を指すために使用され得る。換言すれば、「第1」および「第2」の格納ブロックは格納装置の最初の2つの格納ブロックに限定されるものではない。
様々な実施形態は、本明細書ではデータのアトミック書き込みに関して説明される。用語「アトミック」は、当該技術領域のその通常のおよび一般的に認められた意味を有し、終了前に操作が失敗すれば操作は何の影響も及ぼさないような操作の実行を指す。したがって、アトミック書き込みは、書き込み終了前に操作が失敗すれば(例えば、すべてのデータが書き込まれる前に停電が発生すれば)、書き込み操作は格納装置の状態を変更しない(すなわち、格納装置上の既に格納されたデータに影響を与えない)書き込みである。用語「アトミック」はまた、一群の操作のうちの1つ操作の失敗が一群の操作にいかなる影響も及ぼさないようにする一群の操作を参照し得る。以下に論述されるように、一組のデータは、一群の書き込み操作(例えば、各格納装置に対する一組のデータの一部のそれぞれの書き込み操作)を行うことにより複数の格納装置全体にわたって書き込まれ得る(「ベクトル書き込み」と呼ばれる)。したがって、このような書き込みがアトミック的に行われ、複数の書き込み操作のうちの1つが失敗すれば(例えば、電力喪失が複数の格納装置のうちの1つに発生すれば)、一群の書き込み操作のうちのいずれも影響を与えない。いくつかの例では、失敗したアトミック書き込みのいかなる影響も取り除くために1つまたは複数の行為が行われ得る。これらの回復行為は一般的には「ロールバック」と呼ばれることがある。例えば、データが複数の装置全体にわたってアトミック的に書き込まれる場合、複数の装置のうちの特定のものに対する書き込み操作は正常に終了している可能性があるが他のものは失敗している可能性がある。このような場合、正常な書き込み操作のデータは無効として印が付けられ得る(代替的に、以下に述べるいくつかの実施形態では、たとえアトミック書き込みが失敗したとしても部分的に書き込まれたデータが格納装置上に留まれるようにする選択肢が与えられ得る)。
本開示はまず、図1を参照して、複数の格納装置全体にわたってデータをアトミック的に書き込むように構成された計算システムについて説明する。アトミック書き込み操作を容易にするために使用可能なドライバについては図2を参照して説明する。この説明を容易にするために、格納装置に関連する論理および物理アドレス空間について図3A〜3Cを参照して説明する。アトミック書き込み操作に使用可能なパケットの実施形態については図4A、4Bを参照して説明する。アトミック書き込み操作が行われる実施形態については、図5〜図7Bを参照してさらに詳細に説明する。このような計算システムを含む例示的格納システムについては、図8を参照して最後に説明する。
ここで図1を参照すると、計算システム100のブロック図が描写される。計算システム100は、サーバ、ラップトップ、デスクトップ、携帯装置などの任意の好適なタイプの計算装置であり得る。いくつかの実施形態では、計算システム100は協働する複数の計算装置を含み得る。例えば、一実施形態では、計算システム100は、複数のクライアントに代わってデータを格納するように構成されたデータセンタにおいて連結された複数のサーバ(図8に関連して以下に論述される格納システムなど)であり得る。示された実施形態では、計算システム100は、プロセッサユニット110、ランダムアクセスメモリ(RAM)120、および相互配線140を介し連結された1つまたは複数の格納装置130を含む。図示のように、RAM120は、1つまたは複数のアプリケーション122用のプログラム命令、およびプロセッサユニット110により実行可能なオペレーティングシステム(OS)124を含み得る。OS124は格納装置130のドライバ126を含み得、格納装置130はコントローラ132と1つまたは複数の格納バンク134を含み得る。
様々な実施形態では、ドライバ126は様々な機能を有するものとして記載される。この機能はソフトウェア、ハードウェアまたはそれらの組み合せで実施され得る。さらに、このような機能はOS124の外のソフトウェア(例えば、一実施形態ではアプリケーション122)により実現され得る。別の実施形態では、この機能はコントローラ132のメモリ内に格納されたソフトウェアにより実現され、コントローラ132のプロセッサにより実行され得る。さらに別の実施形態では、コントローラ132は、ドライバ126の機能を実現するために専用回路を含み得る。要するに、OS124内のソフトウェアで実現されるドライバ126の描写は制限と見なすべきでなく、むしろ例示的実施形態の描写と見なすべきである。
格納装置130は、データが記録され得る任意の物理的媒体を表す。本明細書で使用されるように、用語「記録された」は概して、その後の使用のために1つまたは複数のデータ値をいくつかの物理的記録媒体へ格納する、書き込む、またはそうでなければ転送する電子計算装置のプロセスを指す。したがって、「物理的記録媒体」は、データが電子計算装置により記録され得る任意の媒体を指すように本明細書では使用される。さらに、用語「格納装置」と「メモリ」は「物理的記録媒体」と同義であるように本明細書では使用される。この広義の定義を所与として、図1および本開示他のどこかの指定メモリ(RAM120を指す際の)と格納装置(格納装置130を指す際の)は揮発性および/または不揮発性媒体を指し得る。このような媒体はまた、本明細書では「メモリ」と呼ばれることがあり、このような媒体の一部は「ブロック」「セル」、「格納ブロック」、「メモリブロック」などと呼ばれることがある。集合的に、これらのブロックの一群は「記憶アレイ」、「メモリアレイ」などと呼ばれることがある。用語「固体格納アレイ」は、本明細書で使用されるように、以下に述べられる様々な形式の媒体などの不揮発性固体媒体を含む格納アレイを指す。
本開示において格納装置130内のデータに「アクセスする」ことへの言及は、データを格納装置130へ書き込むおよび/またはデータを格納装置130から読み出す、メモリ意味論下のTRIM操作、メンテナンスアクセス、発見アクセス、ロードおよび格納操作などを含む任意のタイプのトランザクションを指す。さらに、上に参照された「格納装置」と「メモリ」の広義の定義を所与として、これらのアクセスは、不揮発性メモリおよび/または揮発性部品を有する格納装置へ適用され得る。
いくつかの実施形態では、格納装置130は不揮発性メモリを含むように実現され得る。したがって、このような実施形態では、格納バンク134は、ハードディスク駆動装置など(例えば、集積化駆動エレクトロニクス(IDE:Integrated Drive Electronics)ドライブ、スモールコンピュータシステムインタフェース(SCSI)ドライブ、シリアルアタッチトSCSI(SAS)ドライブ、シリアルATアタッチメント(SATA)ドライブなど)の不揮発性格納装置、テープドライブ、書き込み可能光ドライブ(例えば、CDドライブ、DVDドライブ、Blu−Rayドライブなど)などを含み得る。
いくつかの実施形態では、格納装置130は不揮発性固体メモリを含むように実現され得る。したがって、このような実施形態では、格納バンク134は、これらに限定しないが、NANDフラッシュメモリ、NORフラッシュメモリ、ナノRAM(NRAM)、磁気抵抗RAM(MRAM:magneto−resistive RAM)、位相変化RAM(PRAM:phase change RAM)、レーストラックメモリ、記憶抵抗(memristor)メモリ、ナノクリスタルベースメモリ、酸化珪素ベースサブ10ナノメートルプロセスメモリ、グラフェンメモリ、珪素−酸化物−窒素−酸化物−シリコン(SONOS:Silicon−Oxide−Nitride−Oxide−Silicon)、抵抗性ランダムアクセスメモリ(RRAM:Resistive random−access memory)、プログラマブルメタライゼーションセル(PMC:programmable metallization cell)、導電性ブリッジングRAM(CBRAM:conductive−bridging RAM)などを含む任意の好適なタイプの固体格納媒体を含み得る。いくつかの実施形態では、格納バンク134は複数の異なるタイプの固体格納媒体を含み得る。
他の実施形態では、格納装置130は揮発性メモリを含むように実現され得る。したがって、格納バンク134は、これらに限定しないがRAM、ダイナミックRAM(DRAM)、スタティックRAM(SRAM)、シンクロナスダイナミックRAM(SDRAM)などを含む任意の好適な揮発性メモリに対応し得る。プロセッサユニット110とは独立に示されるが、いくつかの実施形態では、格納装置130は、プロセッサユニット110内の1つまたは複数のキャッシュレベル(例えば、L1、L2、L3など)などのプロセッサユニット110内のメモリに対応し得る。
要するに、様々な機能は、本明細書では格納装置130に関連して説明される。このような機能は、不揮発性および揮発性形式の両方を含む任意の好適な形式のメモリに適用可能な場合がある。したがって、ドライバ126の特定の実施形態は本明細書では不揮発性固体メモリアレイという文脈内で説明されるが、ドライバ126はまた、揮発性メモリと他のタイプの不揮発性メモリ(特には、再利用(reclamation)プロセスを含むもの)など他の記録媒体に適用可能な場合がある。
コントローラ132は、一実施形態では、格納装置130の操作を管理するように構成される。したがって、コントローラ132は、規定アドレス(例えば、以下に論述されるような「物理アドレス」)における読み出し操作(適切なバンク134を選択することとそれらのバンク内の適切なセル内のデータにアクセスすることとを含む)を容易に行えるようにし得る。コントローラ132は、書き込み操作(特定セルのプログラミングを含む)を容易に行えるようにし得る。コントローラ132はまた、格納装置130へのその後の書き込みを許容するための準備動作(例えば、一実施形態では、その後の再使用のためにセルのブロックを消去すること)を行い得る(セルのブロックをプログラムおよび消去するサイクルは「PEサイクル」と呼ばれることがある)。いくつかの実施形態では、コントローラ132は、読み出しおよび書き込み操作を並列に行うために別の読み出しおよび書き込みデータパイプラインを実装する。一実施形態では、コントローラ132はまた、相互配線140上でドライバ126(以下に論述される)と通信するように構成される。例えば、いくつかの実施形態では、コントローラ132は、DMAコントローラにより調整される直接メモリアクセス(DMA)トランザクションを介し読み出しおよび書き込み操作のための情報を伝達する。したがって、コントローラ132は、ペリフェラルコンポーネントインターコネクト(PCI:peripheral component interconnect)、PCIエクスプレス(PCI−e)、シリアルアドバンストテクノロジーアタッチメント(シリアルATAまたはSATA)、パラレルATA(PATA:parallel ATA)、スモールコンピュータシステムインターフェース(SCSI:small computer system interface)、IEEE1394(ファイアワイヤ)、ファイバチャンネル、ユニバーサルシリアルバス(USB)などの任意の好適な相互配線タイプを支援し得る。いくつかの実施形態では、コントローラ132はまた、エラーチェック、データ圧縮、暗号化および解読、パケット組み立て分解などの他の操作を行い得る。
様々な実施形態では、格納装置130はログ構造(log−structured)格納装置として編成される。本明細書で使用されるように、用語「ログ構造」は、どこにデータを格納するかを判断するために付加点(append point)が使用される格納媒体上のデータの配置を指し、付加点はデータが格納される「アドレス空間」を介し連続的に進められる。ログ構造格納装置は簡単には、ログ構造を使用することにより編成される格納装置である。ログ構造の使用はまた、「格納装置130が以前の状態(すなわち「ログチェックポイント」)へ回復されるのを許容するためにメタデータがデータと共に格納される」ということを暗示する。このような回復は、例えば、電力喪失が発生した場合にクラッシュ回復を容易にするために、およびデータ破損などが発生した場合に最新の既知の有効状態を回復するために行われ得る。本明細書で使用されるように、用語「アドレス空間」は、格納装置内のデータを規定するために使用され得るアドレス範囲(すなわち1つまたは複数のアドレスの集合)を指す。以下に示すように、ログ構造格納装置は論理および物理アドレス空間の両方を有し得る。用語「論理アドレス空間」は、格納装置130の物理媒体上にデータがどのように実際に編成されるかをアドレス空間が表さなくても、または実際に使用される、予約された、または上位レベルプロセスへ割り振られた物理アドレス位置の実際の数をこのアドレス空間が表さなくても、上位プロセス(例えば、アプリケーション122とOS124)により認識されるアドレス空間を指す。対照的に、用語「物理アドレス空間」は、下位プロセスにより使用されるアドレス空間を指し、格納装置130の物理媒体上にデータがどのように編成されるかと、上位プロセスにより使用される物理アドレス位置の実際の数とを示し得る。論理および物理アドレス空間の実施形態は、図3A、3Bそれぞれに関連してさらに詳細に論述される。ログ構造の一実施形態は図3Cに関連して論述される。
様々な実施形態では、ログ構造を使用することで、データが格納装置へ書き込まれ、修正され、書き換えられると一組のデータの複数のインスタンスが格納装置130内に存在することを許容するようにし得る。物理アドレス空間内のデータを追跡することの一部として、格納データの古いインスタンス(すなわち、現在のインスタンスでないインスタンス)が無効であると示され得る。例えば、一実施形態では、値が更新されると、値は、(値が既に格納されている位置ではなく)現在の付加点により規定された格納ブロックに書き込まれ得る。正常に行われた書き込みに応答して、当該値のすべての既に格納されたインスタンスは無効として印が付けられ得る。本明細書で使用されるように、用語「無効」は、(例えば、データのより新しい複製が存在するので)システムによりもはや格納される必要のないデータを指す。同様に、用語「無効にする」は、データを無効として印をつける(例えば、記録をデータ構造内に格納する際に)ことを指す。「無効にする」はまた、データのインスタンスが格納装置130上に存在するときにデータのインスタンスを格納装置130へ書き込む(前者のインスタンスは新しいインスタンスの書き込みにより不要にされ得る)ことを指し得る。
OS124は、一実施形態では、アプリケーション122によるデータの検索を容易にするためにファイルシステムを実装する。本明細書で使用されるように、用語「アプリケーション」(または「プロセス」)は通常、1つまたは複数のプロセッサにより実行可能なプログラム命令の集合を指す。アプリケーションの例として、OS124、ファイルシステムマネジャ、データベース管理システム(DBMS:database management system)、ユーザ空間ライブラリ、ドライバ(例えば、ドライバ126、フィルタドライバ、独立ディスク冗長アレイ(RAID:redundant array of independent disks)ドライバなど)が挙げられ得る。示された実施形態では、アプリケーション122はユーザレベルアプリケーションである。用語「ユーザレベル」は、コンピュータシステムの管理責任の無いアプリケーションを記述するために使用される。ユーザレベルアプリケーションの例として、文書処理アプリケーション、ウェブブラウザなどが挙げられ得る。ユーザレベルアプリケーションは、コンピュータシステムの動作を管理するカーネルレベル(またはシステムレベル)アプリケーションと対照をなす。カーネルレベルアプリケーションの例として、オペレーティングシステム、ドライバ、ハイパーバイザなどが挙げられ得る。一実施形態では、OS124は、ユーザレベルアプリケーションによるコンピュータシステム100のいくつかの機能(例えば、ファイル、アドレス、ハードウェアなど)へのアクセスを制限し得るが、カーネルレベルアプリケーションのこのような機能を制限しない場合がある。
いくつかの実施形態では、アプリケーション122のアプリケーションデータは「仮想格納ユニット」と呼ばれる1つまたは複数のパーティション内へ編成され得る。本明細書で使用されるように、用語「仮想格納ユニット」すなわち「VSU:virtual storage unit」は、アプリケーションデータを格納するために1つまたは複数のアプリケーションにより使用可能な割り振られた一組の格納ブロック(例えば、論理ブロック)を指す。いくつかの実施形態では、VSUは、実際の物理アドレス空間より大きな論理アドレス空間をアプリケーション122へ提示するように実現され得る。したがって、VSUへ割り振られる論理ブロックの総数は、物理媒体上で利用可能な格納ブロックの数を越え得る。この割り振り方式をうまく働かせるために、VSUは、その割り振られた論理ブロックのうちの少数を使用するVSUとその割り振りのうちの多数を使用するVSUとが物理媒体空間を共有するように管理され得る。いくつかの実施形態では、VSUはまた、二次ドライブからのデータのキャッシングを容易にするように使用され得る。本明細書で使用されるように、用語「格納ユニット」は通常、格納装置または格納装置内の仮想格納ユニットのいずれかを指す。
いくつかの例では、アプリケーション122は、アプリケーションプログラミングインターフェース(API:application programming interface)要求を介し当該ファイル名をOS124へ規定することにより格納装置130内のデータにアクセスし得る(他の例では、アプリケーション122は、読み出されるまたは書き込まれるべきアドレスを規定することによりデータへ直接アクセスし得る)。要求の受信に応答して、OS124は、ファイルのデータが格納される1つまたは複数のアドレスを判断するためにディレクトリとファイル(例えば、一組のアイノード(inode)、ファイルア割り振りテーブルなどの中の)に対応する様々なファイルシステム情報にアクセスし得る。
ドライバ126は、一実施形態では、アプリケーション122とOS124が格納装置130と相互作用するのを許容するように実行可能である。したがって、ドライバ126は、規定の論理ブロックアドレスにおいて読み出しおよび書き込み操作を行う要求を受信し得、それらの操作を実施するためにコントローラ132へ当該命令を発行し得る。いくつかの実施形態では、ドライバ126は、無効データを有する格納ブロックを格納装置130が再利用(reclaim)するガーベッジコレクション(garbage collection)を管理する。本明細書で使用されるように、格納ブロックを「再利用する」または格納ブロックの「再利用」は、再使用のために(すなわち、格納ブロックが新しいデータを格納し得るように)格納ブロックを用意することを指す。フラッシュ媒体の場合、再利用は、格納ブロックから有効データを複写することと同ブロックを消去することとを含み得る。いくつかの実施形態では、読み出しおよび書き込み操作の実行を容易にするために、ドライバ126はまた、論理アドレス(例えば、LBA)を当該物理アドレスへマッピングする(他の実施形態では、物理アドレスへ論理アドレスをマッピングすることは、コントローラ132など他のどこかで行われ得る)。したがって、ドライバ126はまた、1つまたは複数の翻訳マップ(図2に関連して以下に論述されるマップ222など)を管理し得る。管理は、データが格納装置130上で操作される際に翻訳を追加することと翻訳をマップから取り除くこととを含む。
様々な実施形態では、ドライバ126はアトミック書き込み操作の実行を支援し得る。上述のように、アトミック書き込みは、故障が発生した場合に影響を及ぼさない能力のために、従来の書き込み操作より有利な場合がある。したがって、一実施形態では、ドライバ126は、格納装置130のうちの1つへのアトミック書き込みを支援する。以下に示すように、いくつかの実施形態では、このような書き込み操作を容易にするために、データは、様々な形式のメタデータを有するヘッダを含む1つまたは複数のパケット内にカプセル化され得る。一実施形態では、このメタデータは、データがアトミック書き込みの一部として格納されるということを識別する1つまたは複数のビットを含み得る。ドライバ126はさらに、書き込みが正常に終了したかどうかを判断しそれが保証されればアトミック書き込みをロールバックするためにこのメタデータにアクセスし得る。様々な実施形態では、ドライバ126はまた、複数の格納装置130、仮想格納ユニット、またはそれらの組み合せ全体にわたるアトミック書き込みを支援する(したがって、特定の実施形態は本明細書では複数の格納装置全体にわたるアトミック書き込みに関して説明される場合があるが、このような説明はまた、単一の格納装置内に配置された複数の仮想格納ユニットを含む仮想格納ユニットへ適用可能な場合がある)。このような実施形態では、一組のデータは、格納ユニット間で分散される部分に分割され得る。例えば、ある範囲のアドレスに跨る一組のデータがアドレスに基づき分割され得る。このとき、一群の書き込み操作は、各書き込み操作が一組のデータの一部分をそれぞれの格納装置130へ格納するように行われ得る。示された実施形態では、アトミック書き込みを容易にするために、別のドライバ126はさらに、格納装置130に対して行われた複数の書き込み操作のそれぞれが正常にコミットされたかどうかを判断するためにアトミック書き込みの一部として注釈150を格納する。したがって、複数の書き込み操作のうちの1つが失敗すれれば(例えば、複数の格納装置130のうちの1つに対する停電が途中で発生すれば)、ドライバ126(またはアプリケーション122)は、ベクトル書き込みが正常に終了しなかったということを識別するために注釈150を使用して書き込みをロールバックし得る。
注釈150は、一実施形態では、複数の格納装置130のうちの少なくとも1つの格納装置130内の専用位置に格納されるメタデータである。すなわち、位置は、アトミック書き込みが行われるアプリケーションデータを含まない(但し、他の実施形態では、注釈150は非専用位置に格納され得る)。図3Aに関連して以下に示されるように、いくつかの実施形態では、この位置はアプリケーション122などのドライバ126以外のアプリケーションによりアクセス不能な場合がある。例えば、一実施形態では、ドライバ126(またはOS124)は、アプリケーション122のデータ要求がこの位置のアドレスを指定すればデータ要求を拒否し得る。別の実施形態では、アプリケーション122は、限定された表示の全アドレス空間を有し得、その結果、この限定された表示外のいかなるアドレスにも気付かない(位置はこれらの外部アドレスのうちの1つに存在し得る)。いくつかの実施形態では、この位置は静的であり得、例えば、ドライバ126は、同じ論理ブロックアドレス(LBA)または論理ブロックアドレス群へ注釈150を常に書き込み得る。但し、他の実施形態では、注釈150の位置は動的であり得る。一実施形態では、注釈150の位置は、格納されるデータのものとは独立し得、例えば、注釈150は、データが格納されるアドレスから切り離された論理ブロックアドレスに存在し得る。一実施形態では、注釈150は、ある時点で故障が発生すれば少なくとも注釈150が正常に格納される可能性が高くなるように、アトミック書き込みの始めに格納される。したがって、注釈150は、故障を識別することを容易にするためそしていかなるロールバックも容易にするために利用可能な場合がある。別の実施形態では、注釈150はアトミック書き込みの終わりに格納され得る。したがって、注釈150の単なる存在は、アトミック書き込みが正常に終了したということを意味し得る。
いくつかの実施形態では、ドライバ126は、アトミック書き込みのために複数の形式のロールバックを支援する。したがって、一実施形態では、ドライバ126は、書き込みが失敗すればアトミック書き込みのすべてのデータ(例えば、書き込まれる要求データおよび書き込みについてのすべての記録されたメタデータ)が無効にされる全ロールバックを支援する。いくつかの実施形態では、ドライバ126は代替的に、書き込みデータの一部が格納装置130上に留まることを許容され得る一方で他の部分は無効にされ得る部分的ロールバックを支援する。図2に関連して以下に説明されるように、このような実施形態では、ドライバ126は、書き込み失敗についての情報をアプリケーション122へ提供するためにおよびアトミック書き込みをロールバックするための異なる選択肢をアプリケーション122へ提供するためにアプリケーション122とインターフェースし得る。いくつかの実施形態では、アプリケーション122は、完全ロールバックを行う、部分的ロールバックを行う、またはロールバックを行わないかをドライバ126により提供される情報に依存して選択し得る。
様々な実施形態では、注釈150などのメタデータを記録することを通してアトミック書き込みを実施することは、複数の格納ユニット全体にわたってアトミック書き込みを行うためのオーバーヘッドを低減し得るので、有利な場合がある。例えば、複数の格納装置130全体にわたるアトミック書き込みは、ドライバ126が要求を送信して各格納装置130から当該確認応答を待つように各格納装置130とのハンドシェイクを行うことを含み得る。ドライバ126はさらに、格納装置130からいかなる確認応答も受信されない場合にアトミック書き込みが失敗したということを判断するために、送信された要求と受信された確認応答のログを維持する。しかし、このようにしてログおよびハンドシェイク通信を維持することは、かなりの量の追加のメタデータを維持することになり得、ドライバ126と格納装置130間のバストラフィックの量を著しく増加し得る。したがって、記録用メタデータが使用される様々な実施形態では、ドライバ126は、ハンドシェイク動作を行うことなく、確認応答を伝達することなく、およびログを維持することなく、注釈150などの記録用メタデータを介しアトミック書き込みを実行し得る。
次に図2を参照すると、ドライバ126のブロック図が描写される。示された実施形態では、ドライバ126はディストリビューション層210、格納層220A、220B、および入力/出力(I/O)層230A、230Bを含む。他の実施形態では、ドライバ126は示されたものとは異なるやり方で配置され得る。
ディストリビューション層210は、一実施形態では、複数の格納ユニット(例えば、示された実施形態の格納装置130)全体にわたるデータ格納を管理する(アトミック書き込みの実行を含む)。したがって、ディストリビューション層210は、アプリケーション122および/またはOS124から読み出しおよび書き込み要求を受信し得、適切な1つまたは複数の格納装置130を判断し得、以下に論述される格納層220へ当該命令を発行し得る。例えば、一実施形態では、所与の要求はある範囲のアドレスを規定し得、次に、ディストリビューション層210は、当該範囲内のアドレスに関連する格納装置130を識別するためにマップ(以下に説明されるマップ222と同様な)を使用し得る。いくつかの実施形態では、ディストリビューション層210はまた、アトミック書き込みを(例えば、APIを介し)行うためにアプリケーション122とインターフェースする。したがって、示された実施形態では、ディストリビューション層210は、書き込み状態204の指標を与えるアトミック書き込み要求202を受信し、ロールバック命令206を受信し得る。
アトミック書き込み要求202は、一実施形態では、アトミック書き込みを行うためのアプリケーション122からの要求である。いくつかの実施形態では、アトミック書き込み要求202は、書き込まれるデータのインスタンス(すなわち複製)、1つまたは複数のアドレス(例えば、LBA)、および/または要求がアトミック書き込みのためであるという指標(非アトミック書き込みとは対照的に)を含み得る。アトミック書き込み要求202に応答して、ディストリビューション層210は1つまたは複数の当該命令を下位層220、230へ発行し得る。分散書き込み(すなわち複数の格納装置130全体にわたる書き込み)の場合、ディストリビューション層210は、格納装置130Aなどの格納装置130上に注釈150を格納するために1つまたは複数の命令だけでなくデータも書き込む命令を格納層220へ指示し得る。いくつかの実施形態では、ディストリビューション層210はまた、所与の書き込みのための注釈150の複数の冗長インスタンスを複数の格納装置130(図2の点線ブロックにより示されるような)上に格納し得、例えば、注釈150は、複数の格納装置130のそれぞれ、格納装置130のサブセットなどの上に格納され得る。図4Bに関連して説明されるように、一実施形態では、注釈150は、シーケンス番号とアトミック書き込みに関連するアドレス範囲(例えば、アトミック書き込み要求202内に規定されたLBA範囲)とを含む。このような実施形態では、シーケンス番号は書き込み操作が発生した順番を示す。例えば、一実施形態では、ディストリビューション層210は、(アトミックまたは非アトミック)書き込み要求を受信するたびに調整されるカウンタを維持し得る。いくつかの実施形態では、ディストリビューション層210は格納装置130内に格納されたデータの各部分へシーケンス番号を付加し得る。すなわち、このような実施形態では、第1および第2の部分が格納装置130A、130Bへそれぞれ書き込まれれば、各部分はシーケンス番号のそれぞれのインスタンス(注釈150内に含まれるシーケンス番号のインスタンスに加えて)を含み得る。
いくつかの実施形態では、アトミック書き込み要求202はまた、注釈150内に格納するためのアプリケーション122により提供されるデータを含み得る。例えば、一実施形態では、アプリケーション122は、特にはアトミック書き込みの実行のためにまたはいくつかの他の目的のために維持され得る様々な形式のメタデータを維持し得る。このような実施形態では、アプリケーション122は、注釈150内に格納されるようにこのメタデータをドライバ126へ提供し得る。したがって、アプリケーション122は、いくつかの実施形態では、どのメタデータが注釈150内に格納されるかを規定し管理することができる場合がある。さらに、いくつかの実施形態では、アプリケーション122(ドライバ126とは対照的に)は、アトミック書き込みが失敗したかどうかを判断するためにこの情報を使用し得る。
様々な実施形態では、ディストリビューション層210は、上記のように、アトミック書き込みが正常に終了したかどうかを注釈150内のメタデータに基づき判断し得る(但し、別の実施形態では、この判断はドライバ126により提供される情報に基づきアプリケーション122により行われ得る(例えば、以下に論述される書き込み状態204を介し))。一実施形態では、ディストリビューション層210は、受信したアトミック書き込み要求202毎にこの判断を行う。代替的に、別の実施形態では、ディストリビューション層210は、書き込み失敗を引き起こし得るシステム障害が発生したという指標を受信した後にこの判断を行う。例えば、ディストリビューション層210は、計算システム100が再起動している、または適切なシャットダウン手順を経験せずに再起動した、計算システム100と格納装置130間の接続が遮断された等々の指標をOS124から受信し得る。一実施形態では、アトミック書き込みが正常に終了したかどうかを判断するために、ディストリビューション層210は当初、当該書き込みに関連する注釈150(または注釈群150)を読み出すことを試み得る。注釈150が存在しないまたは破損していれば、ディストリビューション層210は書き込みが正常に終了しなかったと判断し得る。しかし注釈150が正常に読み出されれば、一実施形態では、ディストリビューション層210は、書き込みデータが格納された場所を識別するために注釈内に規定されたアドレス範囲を読み出し得る。一実施形態では、ディストリビューション層210はさらに、データと共に格納されたシーケンス番号を読み出し、これらと注釈150内に格納されたシーケンス番号とを比較しようとし得る。これらの数が一致しなければ、ディストリビューション層210はアトミック書き込みが正常に終了しなかったと結論し得る。一方、シーケンス番号が一致すれば、ディストリビューション層210は書き込みが正常に終了したと結論し得る(書き込みが失敗したかどうかを判断するための他の技術については図4Bに関連して以下に論述される)。いずれにしても、ディストリビューション層210は、その結論の指標を書き込み状態204を介し、要求202を発行したアプリケーション122へ提供し得る。
書き込み状態204は、一実施形態では、アトミック書き込み要求202に関連する書き込み操作が正常に終了したかどうかを示す。いくつかの実施形態では、状態204は失敗または成功を示すブール値を単に含み得る。但し、様々な実施形態では、書き込み状態204はアプリケーション122により使用可能な追加情報を含み得る。例えば、一実施形態では、書き込み状態204は、書き込みが失敗したということを示し得、また、データが正常に書き込まれなかった(または、逆にデータが正常に書き込まれた)アドレス(例えば、LBA)を識別し得る。一実施形態では、書き込み状態204はさらに、失敗の潜在的原因(例えば、1つまたは複数の格納装置130と通信することができないこと)を識別するだけでなく失敗に関連する格納装置または装置群130を識別する。この情報に基づき、いくつかの実施形態では、アプリケーション122は、どのようにドライバ126に故障に対処してロールバック命令206などの当該指標を提供してほしいのかに関する合理的判断をなし得る。
いくつかの実施形態では、アトミック書き込みが終了したかどうかの明示的指示を含むのではなく、書き込み状態204は、アトミック書き込みが失敗したかどうかを推論するためにアプリケーション122により使用可能な情報を含み得る。例えば、一実施形態では、ドライバ126は、データを最初に書き込みその後注釈150を書き込むことによりアトミック書き込みを行い得る。さらに、ドライバ126は、特定アドレス(例えば、LBA)が書き込まれたかどうか(すなわち、有効データがそれらの位置に存在するかどうか)をアプリケーション122が問い合わせ得るようにするアプリケーション122からのAPI呼び出しを支援し得る。このような実施形態では、アプリケーション122はアトミック書き込み要求202を発行し、次に、注釈150のアドレスが書かれたかどうかをAPI呼び出しを介し問い合わせ得る。この例では、書き込み状態204は、問い合わせのためにディストリビューション層210により発行された応答に対応し得る。アドレスが書き込まれていないということを書き込み状態204が示せば、アプリケーション122は、注釈150が格納されなかったということとしたがってアトミック書き込みは失敗したということとを結論し得る。別の実施形態では、アプリケーション122は単に、注釈150を読み出し、読み出された注釈150により失敗を示す書き込み状態204を受信することを試み得る。その結果、アプリケーション122は、アトミック書き込みが不成功だったということを、試行された読み出しに基づき結論し得る。他の実施形態では、書き込み状態204は、注釈150の内容、チェックサム値、タイムスタンプなどアプリケーション122により使用可能な他の情報を含み得る。
ロールバック命令206は、一実施形態では、ドライバ126がアトミック書き込み(正常な(すなわち、終了した)アトミック書き込みだけでなく失敗したアトミック書き込みも含み得る)のロールバックを行うかどうかを規定する(別の実施形態では、ディストリビューション層210は、失敗を検出するとロールバックを自動的に(すなわち、そのようにする明示的な命令を受信すること無く)行い得る)。上述のように、いくつかの実施形態では、ドライバ126は、完全なロールバック、部分的ロールバックなど複数の形式のロールバックを支援し得る。したがって、このような実施形態では、ロールバック命令206は、行われるロールバックの形式を規定し得る。いくつかの実施形態では、ロールバック命令206はまた、ドライバ126が書き込み操作を正常に終了することができるように、間違って書き込まれたデータのインスタンスを含み得る。より具体的には、このような実施形態では、アトミック的に書き込まれるデータは、データが格納装置130へ正常に書き込まれたことが検証され得るまで計算システム100の他のどこか(例えば、RAM120またはプロセッサユニット110)にキャッシュされ得る(一実施形態では、このキャッシング能力はアプリケーション122の機能であり得、他の実施形態では、これはOS124、ドライバ126などにより行われ得る)。書き込み失敗が発生すれば、喪失データ(例えば、書き込み状態204内に規定されたアドレスにより識別される)は、格納装置130へ喪失データを書き込むことを試みることにより書き込み操作を終了するために、ロールバック命令206内に含まれ得る。一実施形態では、失敗したアトミック書き込み中の書き込みデータを取り除くために完全ロールバックまたは部分的ロールバックを行っている間にドライバ126はデータ(上述のように、書き込み中に記録されたすべてのメタデータだけでなく格納されている要求データも含み得る)を無効にする1つまたは複数のTRIM命令を発行し得る。他の実施形態では、ドライバ126は、失敗したアトミック書き込み中に書き込まれたデータを取り除くための他の技術(データを消去する、データに上書きするなど)を使用し得る。
格納層220は、一実施形態では、所与の格納装置130に関する操作を管理する。一実施形態では、格納層220は、論理アドレスを、図3A〜3Cに関連してさらに詳細に論述される当該物理アドレスへ翻訳する。示された実施形態では、各格納層220は、その装置130のためのそれぞれのマップ222を維持する(他の実施形態では、格納層220はマップを共有し得、マップはいくつかの他のブロックなどにより維持され得る)。様々な実施形態では、マップ222は、格納装置130内の物理アドレスへの論理アドレスの翻訳を維持する。したがって、データが移動され無効にされると、同データは格納装置130上の異なる物理アドレスに長期にわたって存在し得る。但し、マップ222の使用を通じてアプリケーションは、2つ以上のバージョンのデータが異なる物理アドレス内に存在し得るとしても、同じ論理アドレス(例えば、同じ論理ブロックアドレス(LBA))を規定することにより直近の一組のデータにアクセスすることができる場合がある。マップ222は任意の好適なデータ構造を使用することにより実現され得る。したがって、一実施形態では、マップ222はバイナリツリーデータ構造である。他の実施形態では、マップ222は、アレイ、リンクリスト、ハッシュ表などであり得る。いくつかの実施形態では、マップ222は複数のデータ構造を使用することにより実現され得る。様々な実施形態では、格納層220はそれぞれの格納装置130のグルーミング(すなわち、データを格納するようにその後プログラムされるように格納ブロックを識別および再利用すること−ガーベッジコレクションとも呼ばれる)を管理し得る。格納層220は、再利用のための格納ブロックを選択するための様々な判定基準(無効データの量、データの温度(どれぐらい頻繁にデータがアクセスされたか)、データがそれらのブロックから読み出される際に検知された誤ったデータの量など)のうちの任意のものを使用し得る。
ドライバ126のI/O層230は格納装置130上の格納コントローラ132とインターフェースする。したがって、I/O層230は、プログラムを発行する、消去する、コントローラ132への命令を読み出すなどの下位インターフェース動作を扱い得る。I/O層230はまた、格納装置130の様々な形式の駆動状態を追跡し得る。いくつかの実施形態では、I/O層230は、相互配線140全体にわたるDMAトランザクションのための1つまたは複数のチャネルを構成するようにDMAコントローラと通信し得る。互いに独立したブロックとして示されたが、I/O層230は一実施形態では1つのブロックであり得る。
次に図3Aを参照すると、論理アドレス空間302と物理アドレス空間304に関するアトミック格納のブロック図が描写される。一実施形態では、論理アドレス空間302は、アプリケーション122およびOS124などの上位プロセスにより認識されるデータの編成を表す。一実施形態では、物理アドレス空間304は物理媒体上のデータの編成を表す。
論理アドレス空間302は、一実施形態では、それぞれの論理ブロック(セクタとも呼ばれる)310A〜310Dに対応する論理アドレスに分割される。いくつかの実施形態では、論理アドレスは論理ブロックアドレス(LBA:logical block address)である(他の実施形態では、論理アドレスはいくつかの他の形式の論理的識別子に対応し得る)。一実施形態では、論理セクタ/ブロック310は、所与の論理アドレスに関連する最小データブロックを表す。単なる一例として、論理ブロック310は約512バイトのサイズであり得る(一方、以下に論述される論理的消去ブロックおよび論理ページはそれぞれ約40MBおよび8kBであり得る)。さらに別の例として、論理ブロック310は約4kBであり得る。
物理アドレス空間304は、一実施形態では、論理的記録ブロック上のデータの配置に対応する物理アドレスに分割される。図3Bに関してさらに詳細に論述されるように、一実施形態では、論理ブロック310の内容は論理的消去ブロック320内のパケット360として格納され得る。図3Cに関し論述されるように、様々な実施形態では、物理アドレス空間304は、書き込み操作が1つまたは複数の付加点においてだけ行われ得るログ構造として編成され得る。
いくつかの実施形態では、ドライバ126は、論理アドレス空間302が「スパース(sparse)アドレス空間」となるように、格納装置130の物理アドレス空間304より著しく大きい論理アドレス空間302を提示し得る(本開示の目的のため、スパースアドレス空間は下位格納装置の物理アドレス空間より少なくとも10%大きい任意の論理アドレス空間である)。例えば、一実施形態では、ドライバ126は、32ビット物理アドレス空間へ48ビットスパースアドレス空間を提示し得る。このような実施形態では、アプリケーション122は、論理アドレス空間302のうちのかなりの数の未使用部分が格納データのブロック間に存在し得るように、全アドレス範囲よりかなり狭い範囲の論理アドレス空間302を使用し得る。
いくつかの実施形態では、ドライバ126は、データ格納のために論理アドレス空間302の一部分をアプリケーション122へ割り振り得る。例えば、示された実施形態では、アプリケーション122A、122Bには論理アドレス範囲312A、312Bがそれぞれ割り振られた(但し、他の実施形態では、アプリケーション122は割り振られた範囲312を共有し得る)。したがって、アプリケーション122Aは、範囲312A内の論理ブロック310をアドレス指定することによりデータを読み出しおよび書き込み得る。例えば、一実施形態では、アプリケーション122Aは、論理ブロック310A1、310A2を含むアドレス範囲のアトミック書き込みを要求し得る。次に、これらの論理ブロック310はパケット360A、360Bとして格納装置130A、130B全体にわたって格納され得る。同様に、アプリケーション122Bは範囲312B内の論理ブロック310をアドレス指定することによりデータ(論理ブロック310Bのデータなど)にアクセスし得る。いくつかの実施形態では、範囲312は格納装置130上の分離パーティション(上述のように仮想格納ユニット(VSU)とも呼ばれる)に対応し得る。
様々な実施形態では、アトミック書き込み中に書き込まれたパケット360の位置は、当該物理アドレスへの論理アドレスのマッピングに依存し得る(同論理アドレスは、計算システム100内の格納装置130の特定配置だけでなくパーティションの特定配置にも依存し得る)。したがって、示された実施形態では、論理ブロック310A1、310A2のアトミック書き込みは、論理ブロック310A1、310A2の論理アドレスが格納装置130A、130B両方内の物理アドレスへマッピングされるので、格納装置130A、130B内にそれぞれ配置されたパケット360A、360Bに対し行われる。他の例では、論理ブロック310A1、310A2の論理アドレスは、データが複数の格納装置130のうちの1つだけ(または、格納装置130のいくつかのサブセットだけ)へ書き込まれるように異なるやり方でマッピングされ得る。したがって、一実施形態では、アプリケーション122Aは、データが格納装置130A、130B両方内に格納されるようにするアトミック書き込みの第1の要求を発行し得、そしてデータが格納装置130A上だけに格納されるようにする第2の後続要求を発行し得る。
上述のように、様々な実施形態では、ドライバ126は、アトミック書き込みの失敗を検知し、かつ、アトミック書き込みをロールバックするために使用可能な1つまたは複数の注釈150を格納し得る。示された実施形態では、注釈150は、説明目的のために専用ブロック314として示された論理ブロック310内に格納される。このような実施形態では、専用ブロック314は予約論理アドレス範囲316内に配置され得る。一実施形態では、専用範囲316は、専用ブロック314を格納するために予約された1つまたは複数の論理ブロックアドレスの範囲である(すなわち、範囲316は、上述のアプリケーション122などのユーザレベルアプリケーションからのアプリケーションデータを有する論理ブロック310を含まない)。いくつかの実施形態では、範囲316は、範囲312外に存在し得、アプリケーション122によりアクセス不能な場合がある(上述のように、これは、予約範囲316内のアドレスを規定するいかなるデータ要求も拒否するドライバ126に起因し得、アプリケーション122は予約範囲316内のいかなるアドレスの存在にも気付かない場合がある)。このような実施形態では、アプリケーション122は依然として、ドライバ126へのAPI呼び出しを介し注釈150の内容を読み出すことができる場合があるが、アプリケーション122は、注釈150のアドレス(またはアドレス群)を規定する読み出し要求を介し内容へ直接アクセスできない場合がある。予約論理アドレス範囲として描写されたが、他の実施形態では、アドレス範囲316は、格納装置130の1つまたは複数の物理アドレスを含む物理アドレス範囲であり得る。このような実施形態では、アドレス範囲316は複数の格納装置130に跨ってもよいし単一の格納装置130上にだけに存在してもよい。さらに他の実施形態では、アドレス範囲316は予約されない場合がある。すなわち、注釈150は、ユーザデータ(すなわちユーザレベルアプリケーションのデータ)を含む格納ブロックが点在する格納ブロック内に格納され得る。範囲316はまた、連続的または非連続的アドレスを含み得る。示された実施形態では、アプリケーション122A、122Bのそれぞれは範囲316A、316Bのそれぞれに関連する。このような実施形態では、各範囲316はそのそれぞれのアプリケーション122に関連する書き込みのための注釈150を格納し得る。例えば、専用ブロック314Aは、アプリケーション122Aにより要求された直近のアトミック書き込みのための注釈150を格納し得、専用ブロック314Bは、アプリケーション122Bにより要求された直近のアトミック書き込みのための注釈150を格納し得、したがって、ドライバ126は、いずれかのアトミック書き込みのためのロールバックを行うことができる場合がある。いくつかの実施形態では、範囲316は、一組の直近のアトミック書き込みのための複数の専用ブロック314を格納することができる場合がある。例えば、範囲316Aは最後の4つの要求されたアトミック書き込みの注釈150を格納し得る。他の実施形態では、アプリケーション122は予約範囲316を共有し得る。いくつかの実施形態では、範囲312はその当該範囲316と共に配置され得、例えば、範囲316Aは範囲312Aに隣接し得る。他の実施形態では、範囲316はそれぞれの範囲312から切り離され得る。いくつかの実施形態では、範囲316は一緒に配置され得、例えば、範囲316は論理アドレスの1つの隣接範囲を形成し得る。いくつかの実施形態では範囲316は静的であり得、他の実施形態では範囲316は動的であり得る。
示された実施形態では、専用ブロック314は注釈パケット362として格納される。いくつかの実施形態では、注釈パケット362は、アプリケーション122、ドライバ126のガーベッジコレクションプロセス等々により不注意に修正または削除されないように保護され得る。これを達成するために、一実施形態では、注釈パケット362は、格納装置130上の特定の予約領域(例えば、ドライバ126により維持されるメタデータを格納するために予約された特定の論理的消去ブロック320)内に格納され得る。格納装置130上の特定の予約領域へのアクセスは、アプリケーション122がそのアトミック格納操作のためのメタデータだけにアクセスし得るように制御され得る。注釈パケット362の一実施形態については図4Bに関連して以下に論述される。
次に図3Bを参照すると、格納装置130内の格納ブロックのブロック図が描写される。示された実施形態では、格納バンク134は、別のダイ306内に配置された複数の物理的消去ブロック(PEB:physical erase block)330を含む論理的消去ブロック(LEB)320へ編成される。論理的消去ブロック320はさらに、複数の論理ページ340に分割され、論理ページ340は複数の物理ページ350を含む。物理ページ350は、エラー訂正コード(ECC:error correction code)チャンク370へグループ化され得る複数のパケット360を含む。
本明細書で使用されるように、用語「消去ブロック」は概して、論理的消去ブロックまたは物理的消去ブロックを指す。一実施形態では、物理的消去ブロック330は、(例えば、ダイ上のセルの配線のために)所定の時間に消去され得る所与の格納バンク134を有する最小格納ブロックを表す。一実施形態では、論理的消去ブロック320は消去命令を受信することに応答してコントローラ132により消去可能な最小ブロックを表す。このような実施形態では、特定の論理的消去ブロック320を規定する消去命令を受信すると、コントローラ132は論理的消去ブロック320内の各物理的消去ブロック330を同時に消去し得る。所与の論理的消去ブロック320内の物理的消去ブロック330(例えば、ブロック330A、330B)は別のダイ306内に存在したとしても物理アドレス空間304内では隣接すると考えられ得るということに留意されたい。したがって、用語「隣接した」は、同じ物理的媒体内に格納されたデータだけでなく別の媒体内に格納されたデータへも適用可能な場合がある。
一実施形態では、物理ページ350は、所定の時刻に書き込まれ得る所与の格納バンク134内の最小格納ブロックを表す。一実施形態では、論理ページ340は、コントローラ132により支援される最小書き込み可能格納ブロックである(一実施形態では、コントローラ132は、最大で論理ページ分のデータまで格納するように構成されたバッファを含み得、バッファが一杯になると同時に、コントローラ132はバッファの内容を単一論理ページへ書き込み得る)。いくつかの例では、論理ページ340を複数のダイ306にわたって分割することで、複数のダイ306が並列にアクセスされる際の一組のデータのアクセス時間をより速くし得る。
一実施形態では、パケット360は、所定時刻に読み出され得る所与のバンク134内の最小格納ブロックを表す。一実施形態では、ECCチャンク370はコントローラ132により読み出し可能な最小格納ブロックである。いくつかの実施形態では、パケット360は、パケットヘッダだけでなく論理ブロック310(またはいくつかのインスタンス内の複数ブロック310)の内容も含み得るので論理ブロック310より若干大きい場合がある。
いくつかの実施形態では、ドライバ126はメタデータと格納ブロック320〜370のうちの1つまたは複数とを関連付け得る。本明細書で使用されるように、用語「メタデータ」は固体格納装置130の動作を容易にするように使用可能なシステムデータを指し、メタデータは、例えばアプリケーションにより生成されるデータ(すなわち「アプリケーションデータ」)またはオペレーティングシステムにより「ユーザデータ」と見なされる形式のデータとは対照的である。例えば、一実施形態では、論理的消去ブロック320は、限定しないが、使用統計値(例えば、当該ブロック320に対し行われたプログラム消去サイクルの数)、健康統計値(例えば、破損データがそのブロック320からどれくらい頻繁に読み出されたかを示す値)、セキュリティまたはアクセス制御パラメータ、シーケンス情報(例えば、手順指標)、持続的メタデータフラグ(例えば、アトミック格納操作内に含まれることを示す)、トランザクション識別子などを規定するメタデータを含み得る。図4Aに関連して説明されるように、パケット360はまた、様々な形式のメタデータを含み得る。様々な実施形態では、ドライバ126は格納装置130の動作を管理するために、他の形式のメタデータと共にこの情報を使用し得る。例えば、ドライバ126は、読み出しおよび書き込み操作の実行を容易にするために、格納装置130を以前の状態へ回復する(例えば、ドライバにより使用される様々なデータ構造の再構築および/または格納装置130に対し行われた一連の格納操作を再生することを含む)等々のためにこの情報を使用する可能性がある。
次に図3Cを参照すると、物理アドレス空間304内のログ構造380のブロック図が描写される。図示のように、様々な実施形態では、データは、最初の論理ページ340(例えば、ページ340A)から始まる付加点382(「ヘッド」とも呼ばれる)に連続的に格納される。追加データが格納されると、付加点382はログ構造380内の後続の論理ページ340(例えば、ページ340B、340Cなど)へ進む(本明細書で使用されるように、用語「隣接した」は、順番に次々と書き込まれる格納ブロックについて記述するために使用され得、例えば、図示のように、論理ページ340Aは論理ページ340Bに隣接し、LEB320AはLEB320Bに隣接する)。最終的に、十分なデータを格納した後、付加点382は格納装置130内の「最終」ページ340に到達し、この点で、付加点382は最初の論理ページ340へ折り返す。したがって、ログ構造380はループ/サイクルとして描写される。多くのデータが格納されると、使用可能な論理ページ340(陰影の無いページ340として示される)の数は減少し、使用済み論理ページ340(陰影付きページ340として示される)の数は増加する。上に論述したように、これらの論理ページ340を再使用する(すなわち、さらなる書き込みを受信するために利用可能にする)ために、一実施形態では、ドライバ126は論理的消去ブロック320に対し消去操作を行う。一実施形態では、テール384は、構造380内で依然として使用される最も古い論理ページ340を識別するために維持される(テールに位置するページ以外のページはテールに位置するページより若いと考えられる)。最も古い論理ページ340を有する論理的消去ブロック320が最終的に消去されると、テール384は、ログ構造380の端で使用される次の最も古い論理ページ340へ前進させられる。
一般的に、格納装置130内の他のデータほど頻繁に修正されないデータはテール384方向に移動することになる(このようなデータは「より冷たい温度」を有するとしてまたは単に「コールドデータ」として記載され得る)。一方、より頻繁に修正されるデータ(「より熱い温度」を有するとして、または「ホット」データとして記載される)は通常、ヘッド382近くに配置されることになる。したがって、LEB320A内に配置された有効データはLEB320B内のデータより恐らく「冷たい」。
複数の格納装置130が使用される実施形態では、各格納装置130は別個のそれぞれのログ構造として実現され得る。したがって、一実施形態では、各格納層220は、そのそれぞれの格納装置130の付加点を追跡し得る。したがって、書き込みが複数の格納装置130にわたって行われると、データの各部分は格納装置130の複数の付加点のうちのそれぞれの1つへ書き込まれ得る。言い換えれば、データの一部は格納装置130Aの付加点382へ書き込まれ得、データの一部は格納装置130Bの付加点382へ書き込まれ得る等々である。但し、他の実施形態では、格納装置130は非ログ構造フォーマットで編成され得る。
次に図4Aを参照すると、パケット360のブロック図が描写される。示された実施形態では、パケット360はヘッダ410とペイロード420を含む。上述のように、様々な実施形態では、パケット360は、ドライバ126により使用可能な様々な形式のメタデータを含み得る。示された実施形態では、このメタデータは、ペイロード420内のデータの論理ブロックアドレス(LBA)412、一組のアトミックビット414、およびエラー訂正コード(ECC)416を含む。パケットヘッダ410はまた、パケットサイズ、他のパケットへのリンケージなどの追加形式のメタデータ(雑(miscellaneous)ブロック418により示される)を含み得る。他の実施形態では、ブロック412〜420はまた、示されたものとは異なるやり方で配置され得る。
アトミックビット414は、一実施形態では、単一の格納装置130へのアトミック書き込みが失敗したかどうかを判断するために使用可能である。一実施形態では、アトミックビット414は、アトミック書き込み中に格納された一組のパケット360内の最初および最後のパケット360を示し得る。したがって、最初または最後のパケット360が欠落または破損していれば、ドライバ126は書き込みが正常に終了しなかったと結論し得る。様々な実施形態では、アトミックビット414は、上述のようにおよび次に説明するように複数の格納装置130全体にわたるアトミック書き込みが失敗したかどうかを判断するために使用可能な注釈150と異なる。
次に図4Bを参照すると、注釈パケット362のブロック図が描写される。示された実施形態では、注釈パケット362はヘッダ410とペイロード420を含み、ペイロード420は注釈150を含む。上述のように、いくつかの実施形態では、注釈150は、アトミック書き込みが行われたLBA範囲422と、アトミック書き込みが発生したときに対応するシーケンス番号424とを含む。すなわち、シーケンス番号424は、タイムスタンプ(例えば、データの時刻、計算システム100が動作した時間量などを示す)、行われた書き込み操作の数を示す値等々を含み得る。いくつかの実施形態では、複数の格納ユニット全体にわたる各アトミック書き込みにはそれぞれのシーケンス番号424が割り当てられる。他の実施形態では、アトミック書き込みを構成する格納ユニットへの各個々の書き込みにはそれぞれのシーケンス番号424が割り当てられ、したがって、例えば、4つの格納装置全体にわたるアトミック書き込みには、アトミック書き込みを構成する4つの個々の書き込みの4つのそれぞれのシーケンス番号が割り当てられであろう。いくつかの実施形態では、シーケンス番号424は、アトミック書き込みを容易にするために、発行された各メッセージへ割り当てられ得る。例えば、アトミック書き込みは、個々の書き込み操作毎に発行する複数のメッセージをさらに含む複数の個々の書き込み操作を各格納装置130に対し行うことを含み得、したがって、このような実施形態では、各メッセージにはシーケンス番号424が割り当てられ得る。注釈150はまた、アトミック書き込み中に使用される格納装置130の指示、アトミック書き込みを容易にするために使用されるもの以外のメタデータ(すなわち、いくつかの他の目的に使用されるメタデータ)等々の追加情報(雑ブロック426により示される)を含み得る。この情報はまた、上述のように、アプリケーション122により提供されるメタデータを含み得る。注釈パケット362内の注釈150はまた、示されたものとは異なるやり方で実現され得る。したがって、他の実施形態では、ブロック422〜426は異なるやり方で配置され得、より多くのまたはより少ないブロックが存在し得る。
ドライバ126は、アトミック書き込みが失敗したかどうかを注釈150内のメタデータに基づき判断するための様々な技術を使用し得る。一実施形態では、格納装置130へ書き込まれる各一組のパケット360と共にシーケンス番号のインスタンスが格納される。例えば、シーケンス番号は、各組内の最終パケット360のペイロード420内に書き込まれ得る。このような実施形態では、ドライバ126は、これらのシーケンス番号が格納される場所を識別するためにLBA範囲422を使用し得る。次に、ドライバ126はこれらの数とシーケンス番号424とを比較し得る。一致しなければ、ドライバ126は書き込みが失敗したと結論し得る。しかし、一致すれば、ドライバ126は書き込みが正常に終了したと結論し得る。別の実施形態では、ドライバ126は、範囲422内のLBAとパケット360内のLBA412とを比較し得る。一致しなければ、ドライバ126は書き込みが正常に終了しなかったと結論し得る。さらに別の実施形態では、ドライバ126は、様々な格納装置130上の関係パケット360を識別するためにLBA範囲422を使用し得る。次に、ドライバ126は、格納装置130に対して行われた個々の書き込み操作のうちのいずれかが失敗したかどうかを判断するためにアトミックビット414を使用し得る。したがって、アトミックビット414が複数の書き込み操作のうちの1つの失敗を示せば、ドライバ126は複数の格納装置130全体にわたるアトミック書き込みが失敗したと結論し得る。様々な実施形態では、ロールバックが行われれば、ドライバ126は、それらの位置でデータを無効にするために、アドレス範囲422内に規定されたアドレス(または、部分的ロールバックの場合にはアドレスのサブセット)のそれぞれのTRIM命令を発行し得る。
次に図5を参照すると、方法500の流れ図が描写される。方法500は、計算システム100または格納装置130などの装置により行われ得る方法の一実施形態である。したがって、一実施形態では、装置は、方法500を行うためにドライバ126などのドライバのプログラム命令を実行し得る。いくつかの実施形態では、方法500を実行することで、電力喪失、オペレーションシステム故障、格納装置故障などのクラッシュから回復するシステム能力を改善し得る。
工程510では、一組のデータのアトミック書き込み操作を行う要求(例えば、要求202)を受信する。いくつかの実施形態では、要求は、格納ユニット(例えば、格納装置130、1つまたは複数の格納装置130内の仮想格納ユニット、またはそれらの組み合せ)のアドレス範囲が割り当てられたアプリケーション(例えば、アプリケーション122A)から受信される。上述のように、このアドレス範囲は、隣接するまたは隣接しない論理的または物理的アドレス範囲であり得、また、単一の格納ユニットに限定され得る、または複数の格納ユニットに跨り得る。アドレス範囲は、データを格納するためのアプリケーション(例えば、論理ブロック310A)によりアクセス可能な場合がある。一実施形態では、要求は、データが格納される範囲の1つまたは複数のアドレスを規定し得る。
工程520では、要求に応答して、少なくとも1つの格納ユニット内の専用位置にメタデータ(例えば、注釈150)を格納することを含み、一組のデータが複数の格納ユニット(例えば、格納装置130A、130B)にわたって書き込まれる。いくつかの実施形態では、工程520は、複数の格納装置のうちの第1の格納装置内の専用位置にメタデータの第1のインスタンス(例えば、格納装置130A上に注釈150)を格納することと、複数の格納装置のうちの第2の格納装置内の専用位置にメタデータの第2のインスタンス(例えば、格納装置130B上に同じ注釈150の複製)を格納することとを含む。様々な実施形態では、メタデータは書き込みが正常に終了したかどうかを判断するために使用可能である。メタデータは、書き込み成功を判断するために明示的にまたは暗黙的に使用され得る。メタデータの明示的な使用は、メタデータが同じアトミック書き込みトランザクションの一部であるということを保証するためにメタデータの様々なインスタンス間でタイムスタンプまたはシーケンス識別子を比較することを含み得る。メタデータの暗黙の使用は、各格納ユニットのメタデータが存在するかどうかの簡単な照査を含み得る。特定の格納ユニットのメタデータが存在しなければ、これは、アトミック書き込みトランザクションが不成功だったという明確な暗黙の指標を提供し得る。
一実施形態では、専用位置(例えば、予約範囲316)はアドレス範囲(例えば、範囲312)外に存在する。いくつかの実施形態では、工程520は、書き込み操作が発生した順番をシーケンス番号が指示するように、ユニットに対して行われる書き込み操作へシーケンス番号を割り当てる工程を含む。一実施形態では、メタデータは、一組のデータが書き込まれたアドレス範囲(例えば、LBA範囲422)と、一組のデータの書き込みに対応するシーケンス番号(例えば、シーケンス番号424)とを規定する。いくつかの実施形態では、工程520は、一組のデータが書き込まれる格納ユニットのそれぞれの上にシーケンス番号のそれぞれのインスタンスを格納する工程と、書き込みが正常に終了したかどうかをシーケンス番号のインスタンスが一致したことを検証することにより判断する工程とを含む。いくつかの実施形態では、格納されたメタデータは、要求を提供したアプリケーションにより提供されるメタデータを含む。一実施形態では、工程520は、複数の格納ユニットのそれぞれからメタデータを読み出す工程と、アトミック書き込み操作が失敗したということをメタデータ読み出し工程に基づき判断する工程とを含む。一実施形態では、上記読み出し工程と判断行程はアトミック書き込みを要求するアプリケーションにより行われ得るが、別の実施形態では、上記読み出し工程と判断行程はドライバにより行われ得る。いくつかの実施形態では、工程520は、書き込みが正常に終了しなかったということを、要求を提出したアプリケーションへ(例えば、書き込み状態204を介し)指示する工程と、アトミック書き込み操作をロールバックする要求(例えば、ロールバック命令206)をアプリケーションから受信する工程とを含む。いくつかの実施形態では、上記指示する工程は、一組のデータが正常に書き込まれなかった1つまたは複数の論理ブロックアドレスを識別する工程を含む。一実施形態では、工程520はアトミック書き込み操作をロールバックする工程を含み、これは、規定アドレス範囲(例えば、LBA範囲422)へ書き込まれたデータを無効にする工程を含む。
方法500を行う計算システムと相互作用するアプリケーションのための同様な方法(例えば、一実施形態ではアプリケーション122を実行する計算システム)もまた企図されるということに留意されたい。
次に図6Aを参照すると、モジュールを含む装置600のブロック図が描写される。本明細書で使用されるように、用語「モジュール」は、操作を行うように構成された回路、または操作を行う1つまたは複数のプロセッサにより実行可能なプログラム命令が格納されたメモリを指す。したがって、モジュールは、様々なやり方で実現されるハードウェア回路として実現され得る。ハードウェア回路は、例えば、カスタム超大規模集積(VLSI:very−large−scale integration)回路またはゲートアレイ、ロジックチップ、トランジスタ、または他の個別部品などの市販半導体を含み得る。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスで実現され得る。モジュールはまた、規定動作を行うように実行可能なプログラム命令を格納する非一時的コンピュータ可能媒体のうちの任意の好適な形式であり得る。装置600は、本明細書で説明する機能のうちの任意のものを実行するモジュールを含み得る。例えば、示された実施形態では、装置600はベクトル格納モジュール610とロールバックモジュール620を含む。
ベクトル格納モジュール610は、一実施形態では、複数の格納装置に対し一組のデータの一群の格納操作を行うように構成される。一群の格納操作は一組のデータとは独立にメタデータ(例えば、注釈150)を格納することを含む。このような実施形態では、メタデータは一群の格納操作を示す。いくつかの実施形態では、ベクトル格納モジュール610は、格納ブロック内のメタデータ(例えば、注釈パケット362)を複数の格納装置のうちの少なくとも1つに格納するように構成される。格納ブロックは、一組のデータに関連するアプリケーションによりアクセス不能なアドレス(例えば、範囲316に関連するLBA)を有し得る。一実施形態では、ベクトル格納モジュール610は、一群の格納操作が正常に行われたかどうかを(例えば、書き込み状態204を介し)示すように構成される。いくつかの実施形態では、ベクトル格納モジュール610は一組のデータの一部の格納操作を行うように構成される。格納操作は、パケットヘッダ(例えば、ヘッダ410)を有するパケット(例えば、パケット360)内に一組のデータの一部をカプセル化することを含む。パケットヘッダは、格納操作が正常に行われたかどうかを判断するために使用可能な1つまたは複数のビット(例えば、アトミックビット414)を含み得る。このような実施形態では、1つまたは複数のビットは格納されたメタデータと異なる。
ロールバックモジュール620は、一実施形態では、格納されたメタデータに基づき一群の格納操作をロールバックするように構成される。一実施形態では、ロールバックモジュール620は要求(例えば、ロールバック命令206)を受信することに応答してロールバックを行うように構成される。いくつかの実施形態では、要求は部分的ロールバックを行うための要求であり得る。このような実施形態では、ロールバックモジュール620は、要求に応じて一群の格納操作のすべてではなく一群の格納操作のサブセットをロールバックするように構成される。様々な実施形態では、ロールバックモジュール620は、複数の格納装置へ1つまたは複数のTRIM命令を発行することにより一群の格納操作をロールバックするように構成される。
いくつかの実施形態では、ベクトル格納モジュール610および/またはロールバックモジュール620はコントローラ132などのコントローラ内に存在する。別の実施形態では、モジュール610および/または620はメモリ120などのメモリ内に存在し得る。要するに、装置600のモジュールは、本明細書で説明する機能を行うために任意の好適なやり方で実現され得る。装置600はまた、モジュール610、620の機能を有する任意の好適な構造に対応し得る。一実施形態では、装置600は、格納装置130などの格納装置を含む(またはそれに結合される)計算システムである。別の実施形態では、装置600は、コントローラ(コントローラ132など)および1つまたは複数の格納素子(格納バンク134など)を含むカードである。さらに別の実施形態では、装置600は、モジュール610、620を格納するメモリシステムを含む計算システムである。
次に図6Bを参照すると、モジュールを含む装置650のブロック図が描写される。装置650は、本明細書で説明する機能のうちの任意のものを実行するモジュールを含み得、装置600に関する上述のものなど任意の好適な構造に対応し得る。示された実施形態では、装置650は格納モジュール660とエラー検出モジュール670を含む。
格納モジュール660は、一実施形態では、一群の記憶装置に関連するアドレス範囲へ一組のデータのアトミック書き込みを試みるように構成される。このような実施形態では、格納モジュール660はさらに、アドレス範囲(例えば、範囲312A)外のアドレスを有する格納ブロック(例えば、専用ブロック314)内に、一組のデータを書き込むことを指示するメタデータ(例えば、注釈150)を格納するように構成される。いくつかの実施形態では、格納モジュール660は、シーケンス番号(例えば、パケット360のペイロード420内の)のそれぞれのインスタンス(アトミック書き込みが試みられた順番を示す)と共に、一組のデータのそれぞれの部分を一群の格納装置内の各格納装置へ(例えば、パケット360A、360Bを格納装置130A、130Bそれぞれへ)書き込むように構成される。いくつかの実施形態では、格納モジュール660は、各格納ブロックが当該アプリケーションの直近のアトミック書き込みに対応するメタデータを含むように複数のアプリケーション(例えば、アプリケーション122A、122B)の各アプリケーションの格納ブロック(例えば、専用ブロック314A、314B)を維持するように構成される。いくつかの実施形態では、格納モジュール660は、複数の格納ブロックがアプリケーションの複数の直近に行われたアトミック書き込みに対応するメタデータを含むようにアプリケーションの複数の格納ブロック(例えば、アプリケーション122Aの範囲316A内の複数の専用ブロック314A)を維持するように構成される。一実施形態では、アドレス範囲はスパースアドレス空間(例えば、論理アドレス空間302)の論理ブロックアドレス範囲(例えば、範囲312A)である。一実施形態では、外部アドレスは論理ブロックアドレス範囲に隣接しない論理ブロックアドレスである。
エラー検出モジュール670は、一実施形態では、アトミック書き込みが正常に終了したかどうかをメタデータに基づき判断するように構成される。いくつかの実施形態では、エラー検出モジュール670はアトミック書き込みが正常に終了したかどうかを、シーケンス番号のインスタンスとメタデータ内のシーケンス番号(例えば、シーケンス番号424)のインスタンスとを比較することにより判断するように構成される。
次に図7Aを参照すると、格納手段710およびアトミック書き込み手段720を含む装置700のブロック図が描写される。装置700は、格納手段710およびアトミック書き込み手段720の機能を有する任意の好適な構造に対応し得る。例えば、装置700は、サーバ、ラップトップ、デスクトップ、携帯装置などの任意の好適なタイプの計算装置であり得る。いくつかの実施形態では、装置700は、協働する複数の計算装置を含み得る。いくつかの実施形態では、装置700は、コントローラ(コントローラ132など)および1つまたは複数の格納素子(格納バンク134など)を含むカードである。
様々な実施形態では、格納手段710は、格納装置130に関して本明細書で説明した機能のうちの任意のものを実行し得る。したがって、一実施形態では、格納手段710は、ログ構造を使用してデータを格納する。格納手段710は、格納装置130に関して上述したものなど任意の好適な構造(例えば、1つまたは複数の格納バンク134、計算システム100、格納システム200など)に対応し得る。したがって、語句「ログ構造を使用してデータを格納する手段」は、それらの当該等価物だけでなく上に挙げた構造のうちの任意のものを指す。
様々な実施形態では、アトミック書き込み手段720は、ドライバ126に関して本明細書で説明した機能のうちの任意のものを実行し得る。したがって、一実施形態では、アトミック書き込み手段720は、複数の格納ブロックのサブセット(例えば、範囲312A)へデータをアトミック的に書き込み、かつ、サブセット内に存在しない格納ブロック(例えば、専用ブロック314A)へメタデータを書き込む。このような実施形態では、メタデータはデータの書き込みをロールバックするように使用可能である。いくつかの実施形態では、アトミック書き込み手段720はまた、ドライバ126に関連して説明したもの以外の機能を実行し得る。
アトミック書き込み手段720は任意の好適な構造に対応し得る。一実施形態では、アトミック書き込み手段720は操作を行うように構成されたハードウェア回路(例えば、コントローラ132)である。ハードウェア回路は、例えば、カスタム超大規模集積(VLSI)回路またはゲートアレイ、ロジックチップ、トランジスタ、または他の個別部品などの市販半導体を含み得る。手段720はまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスで実現され得る。別の実施形態では、手段720は、アルゴリズムを実施する1つまたは複数のプロセッサ(例えば、プロセッサユニット110)により実行可能なプログラム命令を格納したメモリ(例えば、RAM120)を含む。一実施形態では、手段720は、図7Bに関して論述されたアルゴリズムを実行する。いくつかの実施形態では、手段720は、モジュール610、620、660および/または670に対応する。したがって、語句「データを複数の格納ブロックのサブセットへアトミック的に書き込み、かつ、サブセット内に存在しない格納ブロックへメタデータを書き込む手段」は、それらの当該等価物だけでなく上に挙げた構造のうちの任意のものを指し得る。
次に図7Bを参照すると、アルゴリズム730を示す流れ図が描写される。アルゴリズム730は、アトミック書き込み手段720により実施されるアルゴリズムの一実施形態である。示された実施形態では、アルゴリズム730は、工程732において、上述のように、一組のデータを複数の格納装置全体にわたって書き込み、注釈を複数の格納装置のうちの少なくとも1つへ書き込むことを含む。アルゴリズム730はさらに、工程734において、一組のデータを書き込むことの正常な終了を検証するために注釈を使用することを含む。上述のように、いくつかの実施形態では、工程734は、シーケンス番号、論理アドレス、注釈などにより識別された位置におけるアトミックビットなどを比較することを含み得る。
次に図8を参照すると、計算システム100を含む格納システム800のブロック図が描写される。上述のように、計算システム100は、格納装置130内に格納されたデータを操作する1つまたは複数のアプリケーションを含み得る。示された実施形態では、計算システム100は、クライアントシステム820A、820Bがネットワーク830を介し1つまたは複数の格納装置130内のデータにアクセスし、かつ、データをその中に格納できるようにする格納サーバアプリケーション810を実行する。例えば、一実施形態では、格納システム800は、サーバアプリケーション810が格納装置130からの企業データをクライアント820へ配布する企業環境内に関連し得る。いくつかの実施形態では、クライアント820は、データを他の計算システムへさらに配布するために、ウェブサーバ、メールサーバ、仮想プライベートネットワーク(VPN:virtual private network)サーバなどの他のサーバアプリケーションを実行し得る。したがって、いくつかの実施形態では、格納サーバアプリケーション810は、ファイル転送プロトコル(FTP)、ネットワークファイルシステム(NFS)プロトコル、サーバメッセージブロック(SMB)プロトコル、Appleファイルプロトコル(AFP)など様々なネットワークアタッチトストレージ(NAS)プロトコルを実行し得る。いくつかの実施形態では、計算システム100は、格納領域ネットワーク(SAN)を実現するように構成されたいくつかの計算システム100のうちの1つであり得る。
本開示は様々な例示的実施形態を参照してなされた。しかし、当業者は、本開示の範囲から逸脱することなく変更と修正が例示的実施形態に対してなされ得るということを認識することになる。例えば、様々な操作工程および操作工程を行うための部品は、特定アプリケーションに依存して、またはシステムの操作に関連する任意の数の費用関数を考慮して(例えば、工程のうちの1つまたは複数は削除、修正、または他の工程と組み合わせられ得る)、別のやり方で実施され得る。したがって、本開示は限定的な意味よりも例示と見なされるべきであり、すべてのこのような修正は本開示の範囲内に含まれるように意図されている。同様に、恩恵、他の利点、および問題の解決策については様々な実施形態に関し上に述べた。しかし、恩恵、利点、問題の解決策、および任意の恩恵、利点または解決策を生じさせ得るまたはより顕著にさせ得る任意の要素は、極めて重要な、必要な、または必須な特徴または要素とみなされてはならない。本明細書で使用されるように、用語「含む」およびその任意の他の変形は非排他的包含をカバーするように意図されているので、一群の要素を含むプロセス、方法、物品または装置は、これらの素子だけを含むのではなく、このようなプロセス、方法、システム、物品または装置に対して明示的に列挙されないまたはそれらに固有である他の要素を含み得る。また、本明細書で使用されるように、用語「結合された」、「結合する」およびその任意の他の変形は、物理的接続、電気的接続、磁気的接続、光学的接続、通信接続、機能的結合、および/または任意の他の接続をカバーするように意図されている。
加えて、当業者により理解されるように、本開示の原理は、コンピュータプログラム製品内で、格納媒体で具現化された機械可読プログラムコード手段を有する機械可読格納媒体に反映され得る。磁気格納装置(ハードディスク、フロッピーディスクなど)、光学格納装置(CD−ROM、DVD、Blu−Rayディスクなど)、フラッシュメモリおよび/または同種のものを含む任意の有形かつ非一時的機械可読格納媒体が利用され得る。これらのコンピュータプログラム命令は、マシンを生成するために汎用コンピュータ、専用コンピュータまたは他のプログラマブルデータ処理装置上にロードされ得、その結果、コンピュータまたは他のプログラマブルデータ処理装置上で実行する命令は、規定機能を実施する手段を生成する。これらのコンピュータプログラム命令はまた、コンピュータまたは他のプログラマブルデータ処理装置に特定のやり方で機能するように指示し得る機械可読メモリ内に格納され得、その結果、機械可読メモリ内に格納された命令は、規定された機能を実施する実施手段を含む製造部品を生成する。コンピュータプログラム命令はまた、一連の操作工程がコンピュータ上で行われるようにするためにまたは他のプログラマブル装置にコンピュータ実施プロセスを生成させるようにするために、コンピュータまたは他のプログラマブルデータ処理装置上にロードされ得、その結果、コンピュータまたは他のプログラマブル装置上で実行する命令は規定された機能を実施する工程を提供する。
本開示の原理は様々な実施形態において示されたが、本開示の原理および範囲から逸脱することなく、特定の環境および動作要件に特に適応化された構造、構成、寸法、素子、材料および部品の多くの修正がなされ得る。これらおよび他の変更または修正は本開示の範囲内に含まれるように意図されている。