(57)【特許請求の範囲】
【請求項１】
装置であって、
要求側デバイスから、記憶要求を受信する記憶要求受信モジュールであって、該記憶要求はデータセグメントのためのソースパラメータを含み、該ソースパラメータは仮想アドレスを含んでいる、記憶要求受信モジュールと、
前記記憶要求を１又は複数の追加データ記憶コマンドに翻訳する翻訳モジュールであって、該追加データ記憶コマンドはそれぞれ、不揮発性で固体のデータ記憶デバイスに、前記データセグメントのデータを、シーケンシャルログの１つの追加点に格納するように指示し、前記追加データ記憶コマンドはそれぞれ、前記データセグメントの受信された順番を保持して、該データセグメントが受信された順番に、該データセグメントをシーケンシャルログが記憶するように、構成されている、翻訳モジュールと、
マッピングに応じて、前記データセグメントの前記ソースパラメータを、前記データ記憶デバイス上の前記データセグメントの１つのロケーションにマッピングするマッピングモジュールであって、前記データセグメント及び前記ソースパラメータは、前記ソースパラメータと前記データ記憶デバイス上の前記データセグメントの前記ロケーションとの間のマッピングが、前記ソースパラメータを決定するためにチェックポイントから前記シーケンシャルログを再生することによって、現在の状態に回復可能となるように、記憶される、マッピングモジュールと
を備えることを特徴とする装置。
【請求項２】
請求項１記載の装置において、前記シーケンシャルログの再生は、前記シーケンシャルログにおけるチェックポイントの後に記憶されたデータセグメントをシーケンシャルに読み出して、前記マッピングを現在の状態に回復することを含み、前記追加データ記憶コマンドにより、前記データ記憶デバイスが、前記データセグメントのデータ及び前記ソースパラメータを前記追加点に格納することを特徴とする装置。
【請求項３】
請求項２記載の装置において、前記データはデータパケットとして格納され、前記データと共に前記ソースパラメータを格納することは、データパケットヘッダ内に前記ソースパラメータを格納することを含み、前記データパケットヘッダは前記データパケットの前記データと一緒に格納されることを特徴とする装置。
【請求項４】
請求項１記載の装置において、該装置はさらに、ガーベージコレクションモジュールを備え、該ガーベージコレクションモジュールは、有効データを前記シーケンシャルログの前記追加点に移動させて、前記データ記憶デバイスの領域を回復し、前記マッピングモジュールは、前記有効データの移動に応じて、前記有効データの前記ソースパラメータを、前記データ記憶デバイスが前記有効データを追加した１又は複数の新たなロケーションにリマッピングするよう構成されていることを特徴とする装置。
【請求項５】
請求項１記載の装置において、前記データは前記データ記憶デバイスの或る領域内に順次に格納され、該領域は、他の領域にデータを書き込まれた時点に対する当該領域にデータを書き込まれた時点を特定するシーケンス情報を含み、前記シーケンシャルログが前記領域の前記シーケンス情報と、データが各領域に格納されるシーケンスとを含むことを特徴とする装置。
【請求項６】
請求項１記載の装置において、前記翻訳モジュールは、前記データ記憶デバイスの外部に配置され、コンピュータネットワークを介して前記データ記憶デバイスに前記１又は複数の追加データ記憶コマンドを送信するよう構成されていることを特徴とする装置。
【請求項７】
請求項１記載の装置において、該装置は更に、前記データ記憶デバイスから１又は複数の記憶コマンド応答を受信する記憶応答受信モジュールを備え、前記データ記憶応答は、前記データ記憶デバイスが前記データセグメントの前記データを追加した１又は複数のロケーションを含み、前記マッピングモジュールは、前記１又は複数の記憶コマンド応答から、前記データ記憶デバイスが前記データセグメントの前記データを追加した前記１又は複数のロケーションを受信するよう構成されていることを特徴とする装置。
【請求項８】
請求項１記載の装置において、前記翻訳モジュールはさらに、前記１又は複数の追加データ記憶コマンドの中にそれぞれ、前記追加点のロケーションを含ませ、前記マッピングモジュールは、前記翻訳モジュールから、前記データ記憶デバイスが前記データセグメントの前記データを追加した１又は複数のロケーションを受信するよう構成されていることを特徴とする装置。
【請求項９】
請求項１記載の装置において、該装置は、前記記憶要求によって指示されるようにデータを格納するランダムアクセス論理ブロック記憶デバイスをエミュレートし、前記データセグメントの前記仮想アドレスは論理ブロックアドレスを含むことを特徴とする装置。
【請求項１０】
請求項９記載の装置において、前記ソースパラメータは、前記論理ブロックアドレスに加えて仮想識別子を含み、該仮想識別子は前記データセグメントのファイル又はオブジェクトを特定することを特徴とする装置。
【請求項１１】
請求項１記載の装置において、該装置はさらに、前記データ記憶デバイス上に前記データを記憶する前に、前記追加データ記憶コマンドのデータを圧縮する圧縮モジュールを備え、前記追加データ記憶コマンドは前記データセグメントに関連付けられていることを特徴とする装置。
【請求項１２】
請求項１１記載の装置において、前記圧縮されたデータと共に圧縮情報が格納されることを特徴とする装置。
【請求項１３】
請求項１記載の装置において、該装置はさらに、２つ以上の未処理の追加データ記憶コマンドが実行されるシーケンスを変更するコマンド並べ替えモジュールを備えることを特徴とする装置。
【請求項１４】
請求項１記載の装置において、前記記憶要求受信モジュールは２つ以上の記憶要求を受信し、前記装置はさらに、該２つ以上の記憶要求がサービスされるシーケンスを並べ替える要求並べ替えモジュールを備えることを特徴とする装置。
【請求項１５】
請求項１記載の装置において、前記記憶要求受信モジュールによって受信される前記記憶要求は、データを伴うことなく受信されることを特徴とする装置。
【請求項１６】
請求項１記載の装置において、前記データ記憶デバイスに送信される前記追加データ記憶コマンドは、データを伴うことなく送信されることを特徴とする装置。
【請求項１７】
請求項１記載の装置において、前記ソースパラメータは、前記データセグメントに関連付けられる仮想識別子、デバイス識別子、区画識別子、前記データセグメントの前記１又は複数のデータパケットの長さ、前記データセグメントが前記記憶要求の前に又は後に位置するホストのメモリ内の１又は複数のメモリロケーション、該１又は複数のメモリロケーション内のデータの１又は複数の長さ、前記データセグメントの属性、前記データセグメントのメタデータ及び前記データセグメントの制御パラメータのうちの少なくとも１つをさらに含んでいることを特徴とする装置。
【請求項１８】
請求項１記載の装置において、前記ソースパラメータは、前記記憶要求の結果として前記データセグメントが読み出される１又は複数の物理的なメモリアドレスを含んでいることを特徴とする装置。
【請求項１９】
請求項１８記載の装置において、前記記憶要求及び前記１又は複数の追加データ記憶コマンドのうちの少なくとも１つは、ダイレクトメモリアクセス（「ＤＭＡ」）プロセス又はリモートＤＭＡ（「ＲＤＭＡ」）プロセスを開始し、それにより前記データセグメントの前記データを前記データ記憶デバイスに転送することを特徴とする装置。
【請求項２０】
請求項１記載の装置において、前記記憶要求受信モジュール、前記翻訳モジュール及び前記マッピングモジュールのうちの１又は複数の少なくとも一部は、前記要求側デバイス、前記データ記憶デバイス、記憶デバイスコントローラ、並びに前記要求側デバイス、前記データ記憶デバイス、及び該記憶デバイスコントローラとは別個のコンピューティングデバイスのうちの１又は複数の中に配置されることを特徴とする装置。
【請求項２１】
請求項１記載の装置において、前記１又は複数の追加データ記憶コマンドは、セット追加点コマンド、読出しコマンド、消去コマンド、リセットコマンド、移動コマンド、同期コマンド、フラッシュコマンド、読出し制御レジスタコマンド、変更制御レジスタコマンド、プログラムページコマンド、転送コマンドリストコマンド、及び要求状態コマンドのうちの１又は複数をさらに含むことを特徴とする装置。
【請求項２２】
請求項１記載の装置において、該装置はさらに、前記要求側デバイスに記憶要求応答を送信する応答送信モジュールを備え、該記憶要求応答は、前記記憶要求の実行に関する情報を含んでいることを特徴とする装置。
【請求項２３】
システムであって、
データ記憶デバイスと、
前記データ記憶デバイスに接続された記憶コントローラであって、
要求側デバイスから、前記データ記憶デバイス上にファイル又はオブジェクトのデータセグメントを格納するための記憶要求であって、該データセグメントのためのソースパラメータを含む記憶要求を受信し、
前記記憶要求を、前記データ記憶デバイスに対して、前記データセグメントのデータをシーケンシャルログの１つの追加点に格納するように指示するための１又は複数の記憶コマンドに翻訳し、
マッピングに応じて、前記データセグメントの前記ソースパラメータを、前記データ記憶デバイスが前記データセグメントの前記データを追加した前記データ記憶デバイス内の１つのロケーションにマッピングし、
チェックポイントからシーケンシャルログを再生することによって、前記マッピングを現在の状態に回復する
よう構成された記憶コントローラと
を備えていることを特徴とするシステム。
【請求項２４】
請求項２３記載のシステムにおいて、前記記憶コントローラは、前記要求側デバイスとコンピュータネットワークを介して接続されていることを特徴とするシステム。
【請求項２５】
請求項２４記載のシステムにおいて、前記１又は複数の記憶コマンドにより、前記データ記憶デバイスが前記データと共に前記ソースパラメータを記憶するよう構成されていることを特徴とするシステム。
【請求項２６】
請求項２３記載のシステムにおいて、該システムはサーバをさらに備え、前記記憶コントローラは該サーバ内にあることを特徴とするシステム。
【請求項２７】
請求項２３記載のシステムにおいて、前記データ記憶デバイスは固体記憶デバイスを含み、前記記憶コントローラは、前記データセグメントを１又は複数のデータパケットとして該固体記憶デバイス内に格納するよう構成されていることを特徴とするシステム。
【請求項２８】
方法であって、
要求側デバイスから、データ記憶デバイス上にデータセグメントを格納するための記憶要求であって、仮想アドレスを特定する記憶要求を受信するステップと、
前記記憶要求を１又は複数の記憶コマンドに翻訳するステップであって、前記記憶コマンドは、前記データ記憶デバイスに、前記データセグメントのデータを１又は複数の追加点に格納するように指示する、翻訳ステップと、
マッピングに応じて、前記仮想アドレスを、前記データ記憶デバイスが前記データセグメントの前記データを追加した前記データ記憶デバイス内の１つのロケーションにマッピングするステップと、
前記データ記憶デバイスのシーケンシャルログのためのチェックポイントの後に記憶されたデータセグメントを再生することにより、マッピングを回復するステップと
からなることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータを格納することに関し、より詳細には、データ記憶デバイスへの記憶要求を追加データ記憶コマンドに変換することに関する。
【０００２】
なお、本出願は、参照により本明細書に援用される、David Flynn等によって２００８年４月６日に出願された「Apparatus, System, and Method for Converting a Storage Request into an Append Data Storage Command」と題する米国特許出願第１２／０９８，４３３号の一部継続出願であり、その特許出願に対する優先権を主張する。
【背景技術】
【０００３】
ディスクドライブ、光ドライブ等の従来のデータ記憶デバイスは、データを格納するために、多くの場合にランダムアクセスデバイスとして動作する。ランダムアクセスは、一般には、均等な時間配分で或るシーケンスの任意の要素にアクセスする能力である。これは、データが順次に格納され、同じく順次にアクセスされるためにデータのロケーションに応じてアクセス時間が著しく異なるようになる順次アクセスとは異なる。例えば、データを格納するためのテープは順次デバイスである。或るデータ要素は、読取りヘッドが配置される場所の近くに位置する場合があるが、別のデータ要素に到達するにはテープを進めるか、又は戻さなければならないために、アクセスするのにより長い時間を要する場合があるので、データ要素にアクセスするのに異なる時間を要する可能性がある。ランダムアクセスデバイス上のどのデータ要素にアクセスするのに要する時間も概ね同じアクセス時間であるので、メモリチップ、ディスクドライブ又は固体記憶デバイスのようなランダムアクセスデバイスは、ランダムアクセスデバイスとして動作する。データアクセスが予測可能でありかつ効率的であることから、ランダムアクセスが望ましい。メモリチップのような或るデバイスは、ランダム読出し及びランダム書込みの両方をサポートし、一般にはデータを更新されるデータで上書きする能力をサポートする。フラッシュメモリのような或るデバイスは、ランダム読出しをサポートするが、データを書き込めるようにするには、予めメモリの全領域（例えば、消去ブロック又は消去領域）を消去する必要がある。
【０００４】
通常、ファイルシステムは、低レベルコマンドを用いてランダムアクセス記憶デバイスと通信する。ファイルシステムは、どこにデータが配置されるべきかを管理する。低レベルコマンドは、通常、データを格納するか、又はデータにアクセスするためのコマンド内に物理アドレス及びデータ長を含む。ランダムアクセス記憶デバイス内のデータは、一般には、読み出し・変更・書込み動作において更新される場合があり、その動作では、或る特定のアドレスにあるデータが読み出され、変更され、その後、そのデータが格納されていたのと同じロケーションに書き込まれる。
【０００５】
ランダムアクセスデバイスのコンセプトは望ましいが、或るタイプのデータ記憶では、ランダムアクセスが問題を引き起こす場合がある。例えば、ランダムアクセスによって、記憶デバイス内の或る特定のロケーションが、他のロケーションよりもはるかに多く使用される場合がある。ランダムアクセスのこの態様は、フラッシュメモリでは有害な場合ある。これは、一般に、フラッシュメモリ内の各メモリセルは特定の回数しか使用することができないので、それ以降は、再調整されなければならないか又は信頼性がなくなるためである。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記から、記憶要求を追加データ記憶コマンドに変換する装置、システム及び方法が必要とされていることが明らかであろう。そして、そのような装置、システム及び方法は、ランダムアクセスをエミュレートしながら、データを均等に分配する、書込み回数を削減する等の順次記憶の利点を提供することができる。また、そのような装置、システム及び方法によれば、記憶デバイスがランダムアクセスデバイスをエミュレートすることができるようになり、それにより、記憶デバイスがストリーミング順次書込み記憶デバイスとして動作していることを知らなくても、ファイルシステムが、ディスクドライブであるかのように記憶デバイスとインタラクトすることができるようになる。
【課題を解決するための手段】
【０００７】
本発明は、現在の最新技術に応えて、そして特に、現時点で利用可能なデータ記憶方法ではまだ十分には解決されていない当該技術分野における問題及び要求に応えて開発された。したがって、本発明は、当該技術分野における上記の短所の多く又は全てを克服する、記憶要求を追加データ記憶コマンドに変換するための装置、システム及び方法を提供するために開発された。
【０００８】
記憶要求を追加データ記憶コマンドに変換する装置は、データセグメントを格納するように記憶要求を受信するステップ、記憶要求を１又は複数の追加データ記憶コマンドに翻訳するステップ、及びデータセグメントの記憶パラメータを、そのデータセグメントから生成されるデータが格納された１又は複数のロケーションにマッピングするステップから成る必要なステップを機能的に実行するように構成される複数のモジュールを設けられる。上記の実施形態におけるこれらのモジュールは、要求側デバイスから記憶要求を受信する記憶要求受信モジュールを含む。記憶要求は、ファイル又はオブジェクトのデータセグメントをデータ記憶デバイス上に格納することである。記憶要求は、データセグメントのための１又は複数のソースパラメータを含む。ソースパラメータは仮想アドレスを含む。ただし、仮想アドレスは論理ブロックアドレスに限定されるものではない。
【０００９】
装置は、記憶要求を１又は複数の記憶コマンドに翻訳する翻訳モジュールを備える。少なくとも１つの記憶コマンドは追加データ記憶コマンドを含む。追加データ記憶コマンドはそれぞれ、データ記憶デバイスに、データセグメントのデータ及び１又は複数のパラメータを１又は複数の追加点に格納するように指示する。１又は複数のソースパラメータはデータと共に格納され、ソースパラメータのうちの少なくとも１つは仮想アドレスである。装置は、データセグメントの１又は複数のソースパラメータを、データ記憶デバイスがデータセグメントのデータ及びソースパラメータを追加したデータ記憶デバイス内の１又は複数のロケーションにマッピングするマッピングモジュールとを備える。
【００１０】
一実施形態では、データと共に１又は複数のソースパラメータを格納することは、データ及びソースパラメータを同時に格納することを含む。別の実施形態では、データと共に１又は複数のソースパラメータを格納することは、仮想アドレスに加えて、１又は複数のソースパラメータを格納することを含む。別の実施形態では、データはデータパケットとして格納され、データと共に１又は複数のソースパラメータを格納することは、データパケットヘッダ内にソースパラメータを格納することを含む。データパケットヘッダはデータパケットのデータと一緒に格納される。
【００１１】
一実施形態では、データはデータ記憶デバイスの或る領域内に順次に格納され、その装置は、他の領域がデータを書き込まれた時点に対する、その領域がデータを書き込まれた時点を特定する、その領域のシーケンス情報を格納することを含む。その装置のための記憶ログは、それらの領域のシーケンス情報、及び各領域にデータが格納されるシーケンスを含む。データが格納されるシーケンスは、その領域内の相対的な位置から暗示される場合がある。一実施形態では、翻訳モジュールはデータ記憶デバイスの外部に配置され、コンピュータネットワークを介して、１又は複数の追加データ記憶コマンドをデータ記憶デバイスに送信する。
【００１２】
別の実施形態では、データセグメントのデータの物理的なロケーションが、そのデータと共に格納されるソースパラメータと共に、一次仮想−物理マッピングを構成し（comprise）、マッピングモジュールによって生成されるマッピングは二次仮想−物理マッピングを構成する。この実施形態では、二次仮想−物理マッピングは、一次マッピングの変形とすることができ、その変形は探索性能及び効率を改善することを目的とする。さらに別の実施形態では、その装置は、データセグメントのためにマッピングモジュールによって生成される二次仮想−物理マッピングを再構築するインデックス再構築モジュールを含む。インデックス再構築モジュールは、データセグメントのデータと共に格納されるソースパラメータのうちの１又は複数を用いることによって、かつデータセグメントのデータが格納されるデータ記憶デバイス上の物理的なロケーションを用いることによって、一次仮想−物理マッピングを用いてマッピングを再構築する。
【００１３】
一実施形態では、装置は、データ記憶デバイスから１又は複数の記憶コマンド応答を受信する記憶応答受信モジュールを備える。データ記憶応答は、データ記憶デバイスがデータセグメントのデータ及び関連するソースパラメータを追加した１又は複数のロケーションを含む。一実施形態では、マッピングモジュールは、１又は複数の記憶コマンド応答から、データ記憶デバイスがデータセグメントのデータ及び関連するソースパラメータを追加した１又は複数のロケーションを受信する。別の実施形態では、翻訳モジュールは、１又は複数の追加データ記憶コマンドの中にそれぞれ、１又は複数の追加点のロケーションをさらに含み、マッピングモジュールは、翻訳モジュールから、データ記憶デバイスがデータセグメントのデータを追加した１又は複数のロケーションを受信する。
【００１４】
一実施形態では、データが格納されることになる追加点はコンテキストに依存しない。別の実施形態では、追加点は、データ記憶デバイス上に以前に格納されたデータの終わりに続いて、データ記憶デバイス内にデータを格納するために利用可能である次のロケーションである。別の実施形態では、データセグメントの各データパケットが新たな追加点に格納されるように、データがデータ記憶デバイス上に順次に格納される。別の実施形態では、その装置はランダムアクセス論理ブロック記憶デバイスをエミュレートし、データセグメントの仮想アドレスが論理ブロックアドレスを含むような記憶要求によって指示された通りにデータを格納する。さらに別の実施形態では、ソースパラメータは、論理ブロックアドレスに加えて、仮想識別子を含む。仮想識別子は、データセグメントのファイル又はオブジェクトを特定する。
【００１５】
一実施形態では、その装置は圧縮モジュールを含み、圧縮モジュールは、データ記憶デバイス上にデータを格納する前に、データセグメントに関連付けられる追加データ記憶コマンドのデータを圧縮する。別の実施形態では、圧縮情報が、圧縮されたデータと共に格納される。別の実施形態では、各追加データ記憶コマンドは、データセグメントの１又は複数のデータパケットと共に格納されることになるソースパラメータのうちの１又は複数も含む。
【００１６】
一実施形態では、装置は、２つ以上の未処理の追加データ記憶コマンドが実行されるシーケンスを変更するコマンド並べ替えモジュールを備える。別の実施形態では、記憶要求受信モジュールは２つ以上の記憶要求を受信し、装置は、２つ以上の記憶要求がサービスされるシーケンスを並べ替える要求並べ替えモジュールを備える。
【００１７】
一実施形態では、記憶要求受信モジュールによって受信される記憶要求は、実質的にデータを伴うことなく受信される。別の実施形態では、データ記憶デバイスに送信される追加データ記憶コマンドは実質的にデータを伴うことなく送信される。別の実施形態では、１又は複数のソースパラメータは、データセグメントに関連付けられる仮想識別子、デバイス識別子、区画識別子、データセグメントの１又は複数のデータパケットの長さ、データセグメントが記憶要求の前に又は後に位置するホストのメモリ内の１又はメモリロケーション、１又は複数のメモリロケーション内のデータの１又は複数の長さ、データセグメントの属性、データセグメントのメタデータ及びデータセグメントの制御パラメータのうちの少なくとも１つを含む。
【００１８】
一実施形態では、ソースパラメータは、記憶要求の結果としてデータセグメントが読み出される１又は複数の物理的なメモリアドレスを含む。別の実施形態では、記憶要求及び１又は複数の追加データ記憶コマンドのうちの少なくとも１つは、ダイレクトメモリアクセス（「ＤＭＡ」）プロセス又はリモートＤＭＡ（「ＲＤＭＡ」）プロセスを開始し、それによりデータセグメントのデータをデータ記憶デバイスに転送する。別の実施形態では、記憶要求受信モジュール、翻訳モジュール、記憶コマンド送信モジュール及びマッピングモジュールのうちの１又は複数の少なくとも一部は要求側デバイス、データ記憶デバイス、記憶デバイスコントローラ、並びに要求側デバイス、データ記憶デバイス、及び記憶デバイスコントローラとは別個のコンピューティングデバイスのうちの１又は複数の中に配置される。
【００１９】
一実施形態では、その装置はガーベージコレクションモジュールを含み、ガーベージコレクションモジュールは、回復を行なうことが確認されたデータ記憶デバイス上の記憶領域から有効データ及び関連するソースパラメータを移動し、次にデータを記憶するためにその記憶領域をデータ記憶デバイス内の利用可能空間のプールに戻す前に、その記憶領域からデータを消去する。その実施形態では、ガーベージコレクションモジュールは、非同期バックグラウンドプロセスとして動作する。その実施形態では、マッピングモジュールは、有効データの１又は複数のソースパラメータを、そのデータ記憶デバイスが有効データ及び関連するソースパラメータを追加した１又は複数の新たなロケーションにリマッピングする。
【００２０】
一実施形態では、１又は複数の追加記憶コマンドは、セット追加点コマンド、読出しコマンド、消去コマンド、リセットコマンド、移動コマンド、同期コマンド、フラッシュコマンド、読出し制御レジスタコマンド、変更制御レジスタコマンド、プログラムページコマンド、消去コマンド、転送コマンドリストコマンド、及び要求状態コマンドのうちの１又は複数を含む。別の実施形態では、装置は、要求側デバイスに記憶要求応答を送信する応答送信モジュールを備え、記憶要求応答は、記憶要求の実行に関する情報を含む。
【００２１】
記憶要求を追加データ記憶コマンドに変換する本発明のシステムも提示される。システムは、データ記憶デバイスと、データ記憶デバイスを制御する記憶コントローラとによって具現化することができる。詳細には、一実施形態では、システムは、要求側デバイスから記憶要求を受信する記憶要求受信モジュールを備える。記憶要求はデータ記憶デバイス上にファイル又はオブジェクトのデータセグメントを格納するための要求である。記憶要求はデータセグメントのための１又は複数のソースパラメータを含む。ソースパラメータは仮想アドレスを含む。ただし、仮想アドレスは論理ブロックアドレスには限定されるものではない。
【００２２】
システムは、記憶要求を１又は複数の記憶コマンドに翻訳する翻訳モジュールを備える。少なくとも１つの記憶コマンドは追加データ記憶コマンドを含む。追加データ記憶コマンドはそれぞれ、データ記憶デバイスに、データセグメントのデータ及び１又は複数のパラメータを１又は複数の追加点に格納するように指示する。１又は複数のソースパラメータはデータと共に格納され、ソースパラメータのうちの少なくとも１つは仮想アドレスである。システムは、データセグメントの１又は複数のソースパラメータを、データ記憶デバイスがデータセグメントのデータ及びソースパラメータを追加したデータ記憶デバイス内の１又は複数のロケーションにマッピングするマッピングモジュールを備える。
【００２３】
一実施形態では、要求側デバイスは、コンピュータネットワークを介して記憶コントローラと通信するクライアントである。別の実施形態では、記憶要求受信モジュール、翻訳モジュール、記憶コマンド送信モジュール、及びマッピングモジュールのうちの１又は複数はクライアントから独立して動作する。別の実施形態では、システムは、サーバを備え、記憶コントローラはサーバ内にある。さらに別の実施形態では、データ記憶デバイスは固体記憶デバイスであり、データセグメントの１又は複数のデータパケットは固体記憶デバイスに格納される。
【００２４】
また、本発明は、記憶要求を追加データ記憶コマンドに変換するための方法も提供する。開示される実施形態における方法は、実質的に、上記の装置及びシステムの動作に関して上記で提示された機能を実行するのに必要なステップを含む。一実施形態では、その方法は、要求側デバイスから記憶要求を受信することを含む。記憶要求は、ファイル又はオブジェクトのデータセグメントをデータ記憶デバイス上に格納するための要求である。記憶要求は、データセグメントのための１又は複数のソースパラメータを含む。ソースパラメータは仮想アドレスを含む。ただし、仮想アドレスは論理ブロックアドレスには限定されるものではない。
【００２５】
その方法は、記憶要求を１又は複数の記憶コマンドに翻訳することを含む。少なくとも１つの記憶コマンドは、追加データ記憶コマンドを含む。各追加データ記憶コマンドは、データ記憶デバイスに、データセグメントのデータ及び１又は複数のソースパラメータを或る追加点に格納するように指示する。１又は複数のソースパラメータはデータと共に格納され、ソースパラメータのうちの少なくとも１つが仮想アドレスである。その方法は、データセグメントの１又は複数のソースパラメータを、データ記憶デバイスがデータセグメントのデータ及びソースパラメータを追加したデータ記憶デバイス内の１又は複数のロケーションにマッピングすることを含む。
【００２６】
本明細書全体を通じて、特徴、利点又は類似の言葉を参照することは、本発明で実現される場合がある特徴及び利点の全てが、本発明の任意のただ１つの実施形態の中にあるべきであること、又はあることを暗示しない。むしろ、特徴及び利点を参照する言葉は、１つの実施形態に関連して記述される具体的な特徴、利点又は特性が本発明の少なくとも１つの実施形態に含まれることを意味するものと理解されたい。したがって、本明細書全体を通じて、特徴、利点及び類似の言葉が検討される際に、同じ実施形態が参照される場合があるが、必ずしも同じ実施形態が参照されなくてもよい。
【００２７】
さらに、本発明の上記の特徴、利点及び特性は、１又は複数の実施形態において任意の適切な方法で組み合わせられる場合がある。或る特定の実施形態の具体的な特徴又は利点のうちの１又は複数を用いることなく本発明が実施される場合があることは当業者には理解されよう。他の事例では、或る特定の実施形態において、さらに別の特徴及び利点が認識される場合があるが、それらは本発明の全ての実施形態の中に存在しない場合がある。
【００２８】
本発明のこれらの特徴及び利点は、以下の説明及び添付の特許請求の範囲からさらに十分に明らかになるか、又は以下に記述されるように本発明を実施することにより明らかになるであろう。
【図面の簡単な説明】
【００２９】
【図１】本発明による、記憶要求を追加データコマンドに変換するためのシステムの一実施形態を示す概略ブロック図である。
【図２】本発明による、記憶要求を追加データコマンドに変換するための装置の一実施形態を示す概略ブロック図である。
【図３】本発明による、記憶要求を追加データコマンドに変換するための代替の装置の一実施形態を示す概略ブロック図である。
【図４】本発明による、記憶要求を追加データコマンドに変換するための方法の一実施形態を示す概略フロー図である。
【図５】本発明による、記憶要求を追加データコマンドに変換するための別の方法の一実施形態を示す概略フロー図である。
【図６】本発明による、記憶要求を追加データコマンドに変換する一例の概略ブロック図である。
【図７】本発明による、仮想アドレス及び物理アドレスを効率的にマッピングするための装置の一実施形態を示す概略ブロック図である。
【図８】本発明による、仮想アドレス及び物理アドレスを効率的にマッピングするための装置の別の実施形態を示す概略ブロック図である。
【図９】本発明による、仮想アドレス及び物理アドレスを効率的にマッピングするための方法の一実施形態を示す概略フロー図である。
【図１０】本発明による、仮想アドレス及び物理アドレスを効率的にマッピングするための方法の別の実施形態を示す概略フロー図である。
【図１１】本発明による、順方向マップ及び逆方向マップの一例の概略ブロック図である。
【図１２】本発明による、記憶要求を調整するための装置の一実施形態を示す概略ブロック図である。
【図１３】本発明による、記憶要求を調整するための装置の別の実施形態を示す概略ブロック図である。
【図１４】本発明による、記憶要求を調整するための方法の一実施形態を示す概略フロー図である。
【図１５】本発明による、記憶要求を調整するための方法の別の実施形態を示す概略フロー図である。
【図１６Ａ】本発明による、記憶要求を調整するための装置の一例を示す概略ブロック図の第１の部分の図である。
【図１６Ｂ】本発明による、記憶要求を調整するための装置の一例を示す概略ブロック図の第２の部分の図である。
【図１６Ｃ】本発明による、記憶要求を調整するための装置の一例を示す概略ブロック図の第３の部分の図である。
【発明を実施するための形態】
【００３０】
本発明の利点が容易に理解されるようにするために、上記で略述された本発明のさらに詳細を、添付の図面において示される具体的な実施形態を参照して説明する。これらの図面が本発明の一般な実施形態を示すにすぎないこと、したがって、本発明の範囲を制限するものと見なされるべきでないことを前提として、添付の図面を参照して、本発明をさらに具体的にかつ詳細に記述及び説明する。
【００３１】
本明細書において記述される機能単位の多くは、それらの機能単位の実現の独立性をより詳細に強調するために、モジュールと呼ばれている。例えば、モジュールは、カスタムＶＬＳＩ回路若しくはゲートアレイを含むハードウエア回路、論理チップ、トランジスタのような既製の半導体、又は他の個別部品として実現される場合がある。また、モジュールは、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブル論理デバイス等のプログラマブルハードウエアデバイスにおいて実現される場合もある。
【００３２】
また、モジュールは、種々のタイプのプロセッサによって実行するためのソフトウエアにおいて実現される場合もある。例えば、実行可能コードから成る既知のモジュールは、コンピュータ命令（インストラクション）からなる１又は複数の物理ブロック又は論理ブロックを含む場合があり、それらのブロックは、例えば、オブジェクト、手順又は関数として編成される場合がある。それにもかかわらず、既知のモジュールの実行可能コードは物理的に一緒に配置される必要はなく、異なるロケーションに格納される異種の命令を含む場合があり、それらの命令は論理的に共に結合されるときに、モジュールを構成し、そのモジュールのための所定の目的を果たす。
【００３３】
実際には、実行可能コードのモジュールは単一の命令、又は多数の命令とすることができ、いくつかの異なるコードセグメントにわたって、異なるプログラム間で、さらにはいくつかのメモリデバイスにわたって分散される場合さえある。同様に、本明細書において、モジュール内で演算データが特定され、示される場合があり、任意の適切な形において具現され、任意の適切なタイプのデータ構造内に編成される場合がある。それらの演算データは、単一のデータセットとして集められる場合があるか、又は異なる記憶デバイスを含む、異なるロケーションにわたって分散される場合があり、少なくとも部分的には、システム又はネットワーク上に単なる電子信号として存在する場合もある。１つのモジュール又は１つのモジュールの部分がソフトウエアにおいて実現される場合、そのソフトウエア部分は１又は複数のコンピュータ可読媒体上に格納される。
【００３４】
本明細書全体を通じて、「一実施形態」、「１つの実施形態」又は類似の文言に言及することは、その実施形態に関連して記述される特定の特徴、構造又は特性が本発明の少なくとも１つの実施形態に含まれることを意味する。したがって、本明細書全体を通じて、「一実施形態において」、「１つの実施形態において」という言い回し又は類似の文言が現れるとき、全て同じ実施形態を参照する場合があるが、必ずしも同じ実施形態を参照しなくてもよい。
【００３５】
コンピュータ可読媒体（コンピュータ読取可能記憶媒体）は、デジタル処理装置上に機械可読命令を格納することができる任意の形のものである。コンピュータ可読媒体は、伝送線路、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ、磁気ディスク、パンチカード、フラッシュメモリ、集積回路、又は他のデジタル処理装置メモリデバイスによって実現される。
【００３６】
さらに、本発明の上記の特徴、構造又は特性は、１又は複数の実施形態において任意の適切な方法で組み合わせることができる。以下の説明において、本発明の実施形態を完全に理解してもらうために、プログラミング、ソフトウエアモジュール、ユーザ選択、ネットワークトランザクション、データベース問い合わせ、データベース構造、ハードウエアモジュール、ハードウエア回路、ハードウエアチップ等の例のような多数の具体的な細部が提供される。しかしながら、本発明が、それらの具体的な細部のうちの１又は複数を用いることなく、又は他の方法、構成要素、材料等を用いて実施される場合があることは、当業者には理解されよう。他の事例では、本発明の態様を分かりにくくするのを避けるために、既知の構造、材料又は動作は詳しく説明しない。
【００３７】
本明細書に含まれる概略的なフロー図は、包括的には、論理フロー図として記述される。したがって、図示される順序及び表示されるステップは、提示される方法の一実施形態を示す。示される方法の１又は複数のステップ、又はその部分に対して機能、論理、又は効果に関して等価である他のステップ及び方法が考えられる場合がある。さらに、用いられるフォーマット及び記号は、その方法の論理ステップを説明するために提供されており、その方法の範囲を制限しないものと理解されたい。フロー図において種々の矢印タイプ及びラインタイプが用いられる場合があるが、それらは、対応する方法の範囲を制限しないものと理解されたい。実際には、いくつかの矢印及び他の結合子は、その方法の論理的な流れを指示するためにのみ用いられる場合がある。例えば、矢印が、図示される方法の列挙されるステップ間の明示されていない持続時間の待機又は監視を指示する。さらに、特定の方法が行なわれる順序は、図示される対応するステップの順序に厳密に従う場合も、従わない場合もある。
【００３８】
図１は、本発明による、記憶要求を追加データコマンドに変換し、かつ物理アドレス及び仮想アドレスを効率的にマッピングするためのシステム１００の一実施形態を示す概略的なブロック図である。システム１００は記憶デバイス１０２を含み、その記憶デバイスは、記憶コントローラ１０４及びデータ記憶デバイス１０６を含む。記憶デバイス１０２は、コンピュータネットワーク１１２を通じて１又は複数のクライアント１１０に接続されるサーバ１０８内にある。
【００３９】
一実施形態では、システム１００は、記憶コントローラ１０４及びデータ記憶デバイス１０６を備える記憶デバイス１０２を含む。記憶コントローラ１０４及びデータ記憶デバイス１０６は、記憶デバイス１０２である単一の筐体内に収容される場合がある。別の実施形態では、記憶コントローラ１０４及びデータ記憶デバイス１０６は離れて位置する。記憶コントローラ１０４は一般には、データ記憶デバイス１０６のためのデータ記憶及びアクセスを制御する。データ記憶デバイス１０６は、一実施形態において、データ記憶デバイス１０６の全体にわたって、データへの概ね同様のアクセス回数を有することができる。例えば、データ記憶デバイス１０６は、フラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭ又はＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）、相変化ＲＡＭ（「ＰＲＡＭ」）等のような固体記憶デバイスとすることができる。また、データ記憶デバイス１０６は、ハードディスクドライブ、コンパクトディスク（「ＣＤ」）ドライブ、光ドライブ等とすることもできる。
【００４０】
図１において、データ記憶デバイス１０６は単一の記憶デバイスとして示されるが、データ記憶デバイス１０６は２つ以上の記憶デバイスを含んでもよい。データ記憶デバイス１０６は、ＲＡＩＤ（「redundant array of independent device」）、ＪＢＯＤ（「just a bunch of disks」）等として構成される場合もある。データ記憶デバイス１０６は、固体記憶装置のような、高性能の短期記憶装置として構成される１又は複数のデータ記憶デバイス１０６、及びハードディスクドライブのような、低性能の長期記憶装置として構成される１又は複数のデータ記憶デバイス１０６で構成される場合がある。この実施形態では、記憶コントローラ１０４は、種々のタイプのデータ記憶デバイス１０６を管理することができる。当業者は、他のタイプ及び構成のデータ記憶デバイス１０６も使用可能であることは理解するであろう。
【００４１】
記憶コントローラ１０４は、１又は複数のデータ記憶デバイス１０６を制御する場合があり、ＲＡＩＤコントローラ、ストレージエリアネットワーク（「ＳＡＮ」）のためのコントローラ等とすることができる。記憶コントローラ１０４は、１又は複数のサブコントローラを含む場合がある。記憶コントローラ１０４は、データ記憶デバイス１０６と一体に構成されるか又は離間して位置する場合があり、すなわち、一体化又は分散化される場合がある。例えば、記憶コントローラ１０４の一部はマスターコントローラとすることができ、記憶コントローラ１０４の他の部分はサブコントローラ又はスレーブコントローラとすることができる。マスターコントローラは、他のサブコントローラと通信するデバイスとすることができ、他のサブコントローラがさらにデータ記憶デバイス１０６を制御するか、又はマスターコントローラは、スレーブコントローラだけでなく、データ記憶デバイス１０６も制御するマスターコントローラとすることができる。当業者は、他の形及び機能の記憶コントローラ１０４を採用可能であることを理解するであろう。
【００４２】
一実施形態では、記憶デバイス１０２はサーバ１０８に含まれる。種々の実施形態において、記憶コントローラ１０４又はデータ記憶デバイス１０６のいずれか一方、又はその両方がサーバ１０８の外部に配置される場合がある。ＰＣＩ-ｅ（「peripheral component interconnect express」）バス、シリアルＡＴＡ（「Serial Advanced Technology Attachment」）バス等のシステムバスを介して、サーバ１０８が記憶コントローラ１０４に接続されるか、又は記憶コントローラ１０４がデータ記憶デバイス１０６に接続される。別の実施形態では、固体記憶デバイス１０２は、サーバ１０８の外部にあり、ＵＳＢ（「universal serial bus」）接続、ＩＥＥＥ（「Institute of Electrical and Electronics Engineers」）１３９４バス（「ファイアワイヤ」）等を通じて接続される。他の実施形態では、ＰＣＩ（「peripheral component interconnect」）エクスプレスバスを用いて、又はイーサネット（登録商標） 、ファイバチャネル、インフィニバンド、若しくはＰＣＩｅ−ＡＳ（「PCI Express Advanced Switching」）等の外部の電気的若しくは光学的なバス延長又はネットワーキングソリューションを用いて、記憶デバイス１０２がサーバ１０８に接続されるか、又は記憶コントローラ１０４がデータ記憶デバイス１０６に接続される。当業者は、多種多様の実現可能な接続方法を理解されるであろう。
【００４３】
サーバ１０８は、パーソナルコンピュータ、ラップトップコンピュータ、メインフレームコンピュータ、ワークステーション、電子デバイス等である。サーバ１０８は、クライアント１１０を含むか、又はコンピュータネットワーク１１２を介してクライアント１１０に接続される。システム１００が記憶デバイス１０２に記憶要求を送信することができる限り、システム１００は、任意の数のコンピュータ、クライアント１１０、コンピュータネットワーク１１２又は他の電子デバイスを含む。クライアント１１０は、サーバ１０８上で、或いは別のコンピュータ又は電子デバイス上で実行されるプロセスである。また、クライアント１１０は、パーソナルコンピュータ、ラップトップコンピュータ、メインフレームコンピュータ、ワークステーション、電子デバイス等とすることもできる。当業者は、記憶デバイス１０２に記憶要求を送信することができるシステム１００の他の構成要素及び構成を理解されるであろう。
【００４４】
図２は、本発明による、記憶要求を追加データコマンドに変換するための装置２００の一実施形態を示す概略的なブロック図である。装置２００は、記憶要求受信モジュール２０２と、翻訳モジュール２０４と、マッピングモジュール２０６とを含み、それらのモジュールが以下に説明される。装置２００は、図２において、記憶コントローラ１０４内にあるものとして示されるが、モジュール２０２、２０４、２０６の全て又はそのうちの一部が記憶コントローラ１０４の外部に配置されてもよく、システム１００の種々の構成要素を通じて分散されていてもよい。
【００４５】
装置２００は、要求側デバイスから記憶要求を受信する記憶要求受信モジュール２０２を含む。一実施形態では、要求側デバイスはサーバ１０８である。別の実施形態では、要求側デバイスはクライアント１１０である。要求側デバイスは、記憶要求を送信することができる任意のデバイスである。
【００４６】
記憶要求は、ファイル又はオブジェクトのデータセグメントをデータ記憶デバイス１０６上に格納するための要求を含む。記憶要求は、オブジェクト要求、ファイル要求、論理ブロック記憶要求等である。記憶要求は、データセグメントのための１又は複数のソースパラメータを含む。ソースパラメータは、データセグメントのデータが導出されたファイル又はオブジェクトの仮想アドレスを含む。一般には、仮想アドレスは、ファイル又はオブジェクトのための識別子である。仮想アドレスは、ファイル名、オブジェクト名、又は記憶デバイス１０２に接続されるファイルシステムに知られている他の識別子である。
【００４７】
論理アドレス及び論理アドレス空間と仮想アドレス及び仮想アドレス空間とは区別される。この文脈において、仮想アドレス空間は、間接アドレス指定の取り得る最も広い範囲を含むことを意図している。本明細書において用いられるときに、仮想アドレス空間は、１又は複数の仮想アドレス空間、１又は複数の論理アドレス空間、１又は複数のメモリ空間、１又は複数の論理ブロックアドレス空間、１又は複数の固定ブロックアドレス空間等を同時に含む場合がある。
【００４８】
例えば、クライアントは、複数の仮想オペレーティングシステムを実行している場合がある。この実施形態では、各仮想オペレーティングシステムは１つの仮想記憶空間を有し、仮想記憶空間はそれぞれ、そのデバイスの仮想アドレス空間及び仮想−物理マッピングに従って、記憶デバイス内に格納されるデータにマッピングされる。別の例では、いくつかのクライアント内のオブジェクトが、多対１の関係において、格納される同じデータに独立してマッピングされ、クライアントに特有の仮想アドレスを用いて共用データを参照する。本明細書においては１対１の関係を例示するが、それらの方法、装置及びシステムは、多対１、１対多、さらには多対多の仮想−物理アドレスマッピングをサポートするものである。
【００４９】
仮想−物理マッピング法は、識別情報、アドレス、長さ及びメタデータ変換における広い間接化をサポートすることによって、疎なアドレス指定（sparse addressing）（物理アドレス空間の過剰供給）、シンプロビジョニング（thin provisioning）、仮想区画及びデータ変換（例えば、圧縮、暗号化）をサポートすることが意図されている。
【００５０】
本明細書においては、仮想ＩＤは、クライアントの仮想空間内に格納されるデータエンティティを一意に特定するものとする。より具体的には、仮想アドレスは、仮想エンティティのためのデータをアドレス指定する。例えば、仮想アドレスは、仮想ＩＤと、データセット内のオフセットとを含む。別の例では、仮想アドレスは、仮想ＩＤと、仮想エンティティ内のインデックスとを含み、そのインデックスは、不均一な（例えば、可変長の）記録の構造内の１つの記録である。
【００５１】
一実施形態では、装置２００は論理ブロック記憶デバイスをエミュレートし、ソースパラメータは、記憶要求を通じて要求側デバイスによってデータセグメントが格納されるように要求される１又は複数の論理ブロックアドレスを含む。この実施形態では、仮想アドレスは、論理ブロックアドレスを含む。例えば、記憶要求が論理ブロック記憶要求である場合には、要求側デバイスは、データセグメントがデータ記憶デバイス１０６内に格納されることが意図される場所を指示する。論理ブロックアドレスは、ＲＡＩＤグループ番号、データ記憶デバイス識別子、区画、シリンダ番号、セクタ、オフセット等のような情報を含む。当業者は、論理ブロックアドレスに含まれる場合がある他の要素を理解されるであろう。
【００５２】
記憶要求は、データセグメントを２つ以上のロケーションに格納するための要求を含むか、又はデータセグメントの部分を２つ以上のロケーションに格納するための要求を含む場合があるので、記憶要求は２つ以上の論理ブロックアドレスを含むことがある。記憶要求が論理ブロックアドレスを含む場合、その記憶要求は一般には、１又は複数の論理ブロックアドレスに対応する１又は複数のオフセット及びデータ長も含む。論理ブロックが固定のサイズを有する場合には、オフセット及びデータ長は暗示される。オフセットは一般には、データセグメントが、一般にはファイル又はオブジェクトの先頭から開始して、そのファイル又はオブジェクトのどの位置にあるかである。データ長は一般には、記憶デバイスのどのくらいの量が、論理ブロックアドレスに関連付けられるデータセグメント、又はデータセグメントの部分によって占有されることになるかを含む。一般には、オフセット及びデータ長は、記憶コントローラ１０４及びデータ記憶デバイス１０６が理解することができる或る単位を用いて表される。例えば、オフセット及びデータ長は、バイト、ブロック、セクタ、又はデータ記憶デバイス１０６を分割するために用いられる他の単位によって表される場合がある。当業者は、データセグメントの全体及び部分のためのオフセット及びデータ長を表す他の方法を理解されるであろう。
【００５３】
システム１００は翻訳モジュール２０４を含み、翻訳モジュールは、記憶要求を１又は複数の記憶コマンドに翻訳し、この場合少なくとも１つの記憶コマンドが追加データ記憶コマンドである。各追加データ記憶コマンドは、データ記憶デバイス１０６に、そのデータセグメントから生成されたデータ及び１又は複数のソースパラメータを１又は複数の追加点に格納するように指示する。ソースパラメータはデータと共に格納され、ソースパラメータのうちの少なくとも１つが仮想アドレスである。
【００５４】
データ記憶デバイス１０６はデータをデータパケットとして格納することが好ましい。データパケットは、データパケットヘッダと共に、データセグメントのデータを含む。一実施形態では、データパケットヘッダはソースパラメータを含む。別の実施形態では、ソースパラメータは、データと同時に格納される。例えば、データは、データ記憶デバイス上の１つのロケーションにある追加点に順次に格納され、一方、ソースパラメータは、データ記憶デバイス内の別のロケーションに同時にかつ順次に格納される。その実施形態では、ソースパラメータ及びデータが格納されるシーケンスを用いて、読出し動作中に、又はデータ及びソースパラメータが検索される他の動作中に、データ及びソースパラメータを対にすることができる。
【００５５】
一実施形態では、データ記憶デバイス１０６は、ページ、区分又は他の指定された領域内にデータを格納し、以前に格納されたデータの終わりの直後にある次に利用可能なアドレスに追加点を移動し、データをその追加点に格納し、格納されたばかりのデータの直後にある次に利用可能なアドレスに追加点を再び移動すること等によって、データ（又はデータパケット）を順次に格納する。ページ又は区分が一杯になるまで、ページ、区分等にデータが格納され、その後、追加点が移動され、データが次のページ、区分等に格納される。追加点は、記憶デバイス１０２によって、特定の要求に応答して独立して移動される。
【００５６】
データを順次に格納することは固体記憶デバイスにとって特に好都合である。なぜなら、データを均等に分散し、ホットスポット、又は他のアドレスよりも高い頻度で書き込まれるアドレスを防ぐことができるためである。データを順次に格納することは、シーク時間を削減し、関連する消去を伴う読み出し・変更・書込み動作を解消し、それゆえ、固体記憶デバイスのデータ信頼性を高め、耐用年数を延ばすので、固体記憶デバイスにとって特に好都合である。また、固体記憶デバイスにおける順次記憶は一般には、読出しアクセス時間にも悪影響を及ぼさない。なぜなら、一般な固体記憶デバイスは、固体記憶デバイス内のどの場所に格納されたデータに対しても概ね同じ読出しアクセス時間を有するためである。この特徴によって、データ記憶デバイス１０６は、ランダムアクセスデバイスをエミュレートすることができるようになり、それにより、読出し性能に悪影響を及ぼすことなく、書込みシーク時間に起因するレイテンシを実効的に削減し、かつ固体記憶デバイス１０６の媒体信頼性を高め、耐用年数を延ばすことができる。
【００５７】
順次記憶は、データ記憶デバイス１０６にとって他の利点を有する。アクセス時間に関連するような順次記憶の利点は、いずれもDavid Flynn等によって２００７年１２月６日に出願された「Apparatus System, and Method for Managing Commands of Solid-State Storage Using Bank Interleave」と題する米国特許出願第１１／９５２，０９５号、及び「Apparatus System, and Method for Storage Space Recovery In Solid-State Storage」と題する米国特許出願第１１／９５２，１０１号（これ以降、「記憶空間回復出願」）にさらに十分に説明されており、それらの特許出願はいずれも参照により本明細書に援用される。
【００５８】
１つの大きな利点は、データを順次に格納し、かつデータと共にソースパラメータを（パケットヘッダ内に、又は同時に）格納することによって、データ記憶デバイス１０６がログ記憶デバイスになることである。ログ記憶デバイスは一般には、データ記憶のシーケンス又は順序を追跡し、第２のデータパケット後に第１のデータパケットが格納される場合でも、この記憶順序がわかり、確定することができるようにする。
【００５９】
一実施形態では、データが格納されることになる追加点はコンテキストに依存しない。データが順次に格納されるのに対して、記憶要求と共に受信されるデータがデータ記憶ログ内の次に利用可能な物理的なロケーションに格納されることができるように、追加点が記憶デバイスによって保持される場合がある。この追加点に対する外部コンテキストは存在しない。クライアントとの明示的又は暗示的な関係によって、データがデバイスの異なる物理的領域内に格納されないことを意味する。例えば、第１のクライアントが第１の区画を用いてデバイスにアクセスし、第２のクライアントが第２の区画を用いてデバイスにアクセスする場合を考える。これらの区画は厳密には、仮想アドレス指定方式内の論理構成体である。２つの異種の区画内にある２つのクライアントのためのデータはそれでも順次に追加される。このようにして、そのデバイスはオープンファイルの数を制限しないか、又はそれにより、そのデバイスに同時にアクセスすることができるクライアントの数を制限しない。さらに別の利点は、記憶空間が最適な効率で使用され、必然的に、シンプロビジョニングのような容量利用を改善する記憶方法をサポートすることである。
【００６０】
追加点は一般には、以前に格納されたデータ又はデータパケットの直後のアドレスに設定されるが、他の実施形態では、ページ、消去ブロック、区分等の開始アドレスに設定され、使用不可能であるアドレスブロックの直後に設定される場合等もある。一実施形態では、データ記憶デバイス１０６は追加点のアドレスを保持し、翻訳モジュール２０４は単に、追加点にデータを格納するようにデータ記憶デバイス１０６に指示する追加データ記憶コマンドを生成するにすぎない。データが格納されると、その後、データ記憶デバイス１０６は、データが格納された物理アドレスをマッピングモジュール２０６に、或いは別のデバイス又はモジュールに報告する。別の実施形態では、翻訳モジュール２０４は、データ記憶デバイス１０６内の追加点の物理アドレスを知っているか又は保持し、追加点の物理アドレスを用いて追加データ記憶コマンドを作成する。
【００６１】
一実施形態では、追加点、すなわち、現在の消去領域が満たされた後に書き込まれるべき次の消去領域（又は消去ブロック）を指示する消去領域ポインタは、予め待ち行列に入れられ、データ記憶デバイス１０６又は翻訳モジュール２０４によって、その待ち行列から取り出される。別の実施形態では、追加点（消去領域ポインタ）は、所定のパターンに従って部分領域間で移動される。所定のパターンは、領域シーケンス情報を含むことができる。
【００６２】
追加データ記憶コマンドは一般には、追加点においてデータを格納するためのコマンドである。そのデータはデータセグメントから作成され、一般には、データセグメントのデータはそのデータセグメントに及ぶ。翻訳モジュール２０４は１又は複数の追加データ記憶コマンドを作成する場合がある。例えば、データセグメントが分割され、データの２以上の部分が連続していないロケーションに格納される場合には、２以上の追加データ記憶コマンドが必要とされる。別の実施形態では、単一の追加データ記憶コマンドが、連続していない複数のロケーションにデータセグメントを格納することができる。
【００６３】
データセグメントのデータは種々のソースによってもたらされる。一実施形態では、データは、新しく、かつデータ記憶デバイス１０６上に以前に格納されていないファイルからのデータである。別の実施形態では、データセグメントのデータはデータ記憶デバイス１０６から読み出されており、データ記憶デバイス１０６内にデータパケットとして再びデータを格納する前に変更されている。別の実施形態では、データセグメントのデータは、記憶回復（ガーベージコレクション）動作において回復される別の消去領域（消去ブロック等）、ページ、区画等からもたらされる。その実施形態では、データは有効データである場合、将来のデータ記憶のために消去領域を回復する動作を行う前に、選択された消去領域から移動される。別の実施形態では、データは、インデックス又はマップを保護するために格納されているインデックスデータ又はマッピングデータである。当業者は、記憶要求受信モジュール２０２によって受信されるデータセグメント内に存在する場合がある他のデータを理解されよう。
【００６４】
種々の実施形態において、翻訳モジュール２０４は、記憶要求に関連する他のコマンドを作成する。例えば、翻訳モジュール２０４は、セット追加点コマンド、読出しコマンド、消去コマンド、リセットコマンド、移動コマンド、同期コマンド、フラッシュコマンド、読出し制御レジスタコマンド、変更制御レジスタコマンド、プログラムページコマンド、消去ブロックに対する消去コマンド、転送コマンドリストコマンド、要求状態コマンド等を作成する。他のコマンドは一般には、記憶要求をサービスするために、追加データ記憶コマンドを補う。当業者は、記憶要求をサービスするために翻訳モジュール２０４によって作成される他の関連するコマンド及びコマンドのシーケンスを理解されであろう。
【００６５】
一実施形態では、記憶要求受信モジュール２０２によって受信される記憶要求は、実質的にデータを含むことなく受信される。この場合、記憶要求はデータを転送することを求める要求であり、概ねデータを含まない。別の実施形態では、追加データ記憶コマンドは、実質的にデータを伴うことなく、データ記憶デバイス１０６に送信される。この場合、追加データ記憶コマンドはデータを転送するためのコマンドであり、概ねデータを含まない。さらに別の実施形態では、ソースパラメータは、記憶要求の結果としてデータセグメントが読み出されるホスト又はクライアント１１０内の１又は複数の物理メモリアドレスを含む。その実施形態では、記憶要求、すなわち、追加データ記憶コマンドのような翻訳モジュール２０４によって作成されるコマンドは、ダイレクトメモリアクセス（「ＤＭＡ」）又はリモートダイレクトメモリアクセス（「ＲＤＭＡ」）プロセスを開始又は要求してデータセグメントのデータをデータ記憶デバイス１０６に転送する。例えば、追加データ記憶コマンドによってＤＭＡプロセスが、クライアント１１０からデータ記憶デバイス１０６内の或るロケーションへのＤＭＡデータに対して開始することができる。当業者は、ＤＭＡ又はＲＤＭＡプロセスを開始又は要求する他の方法を理解するであろう。
【００６６】
一般なＤＭＡ又はＲＤＭＡプロセスでは、データ記憶デバイス１０６が、書込み動作中にホストのメモリからデータを取り出し、読出し動作中にホストにデータを入れる。ホストは、データがデータ記憶デバイス１０上に格納されることになる場所を知る必要はないないので、これは好都合である。ホストは、書き込まれるデータが取り出されることになる場所、又は読出しのためのデータが格納されることになる場所を、記憶デバイス１０２に知らせることができるにすぎない。
【００６７】
装置２００はマッピングモジュール２０６を含み、該マッピングモジュールは、データセグメントの１又は複数のソースパラメータを、データ記憶デバイス１０６がデータセグメントのデータ及びソースパラメータを追加したデータ記憶デバイス１０６内の１又は複数のロケーションにマッピングする。ソースパラメータは、データセグメントに関連付けられる仮想識別子、デバイス識別子、区画識別子、データセグメントの１又は複数のデータパケットの長さ、記憶要求前又は後にデータセグメントが位置するホストのメモリ内の１又は複数のメモリロケーション、１又は複数のメモリロケーション内のデータの１又は複数の長さ、データセグメントの属性、データセグメントのメタデータ、データセグメントの制御パラメータ等を含む。
【００６８】
データセグメントのソースパラメータとデータセグメントのデータが格納された物理的なロケーションとの間のマッピングによって、装置２００は、データが順次に格納されるデータ記憶デバイス１０６を用いて、ランダムアクセスデバイスをエミュレートすることができるようになる。記憶デバイス１０２、すなわち装置２００を有する記憶コントローラ１０４は、ランダムアクセスデバイスとして接続され、要求を区別することなく、オブジェクト要求、ファイル要求及び論理ブロック記憶要求を受信することができるので、これは好都合である。装置２００は種々の要求からのデータを平等に取り扱い、記憶要求において受信される論理ブロックアドレスを仮想アドレスと概ね同じようにしてマッピングする。言い換えると、論理ブロック記憶要求において受信される論理ブロックアドレス、データ長等は、そのデータ要求のデータがデータ記憶デバイス１０６上に格納されるロケーションの物理アドレスにマッピングされることになる仮想アドレスになる。
【００６９】
図３は、本発明による、記憶要求を追加データコマンドに変換するための代替の装置３００の一実施形態を示す概略的なブロック図である。装置３００は、記憶要求受信モジュール２０２、翻訳モジュール２０４及びマッピングモジュール２０６を含み、それらのモジュールは、図２の装置２００に関連して上述したものと実質的に同じである。装置３００は、記憶応答受信モジュール３０２、応答送信モジュール３０４、圧縮モジュール３０６、インデックス再構築モジュール３０８、コマンド並べ替えモジュール３１０、要求並べ替えモジュール３１２、ガーベージコレクションモジュール３１４を含み、それらのモジュールは以下で説明される。装置３００は、図３において記憶コントローラ１０４内にあるものとして示されるが、モジュール２０２、２０４、２０６、３０２〜３１４の全て、又はその一部が記憶コントローラ１０４の外部に配置されてもよく、システム１００の種々の構成要素を通じて分散されてもよい。モジュール２０２〜２０６に加えて、装置３００の３０２〜３１４は、クライアント１１０から独立して動作することができる。
【００７０】
一実施形態では、装置３００は記憶応答受信モジュール３０２を含み、該記憶応答受信モジュールは、１又は複数の記憶コマンド応答をデータ記憶デバイス１０６から受信する。記憶コマンド応答は、データ記憶デバイス１０６がデータセグメントのデータを追加した１又は複数のロケーションを含む。該実施形態では、データ記憶デバイス１０６がデータを格納したロケーションは、データ記憶デバイス１０６が応答し、データが追加されたロケーションを指示するまで、装置３００にはわからない。データ記憶デバイス１０６がデータを格納した後まで、データ記憶デバイス１０６がデータを追加した物理的なロケーションがわからないとき、マッピングモジュール２０６は、一般には１又は複数の記憶コマンド応答によって、データ記憶デバイス１０６から、データ記憶デバイス１０６がデータセグメントのデータを追加した１又は複数のロケーションを受信する。別の実施形態では、上記のように、翻訳モジュール２０４が、データセグメントのデータが格納される物理アドレスを追跡又は管理し、マッピングモジュール２０６は、データが格納されたロケーションの物理アドレスを翻訳モジュール２０４から受信する。
【００７１】
別の実施形態では、装置３００は応答送信モジュール３０４を含み、応答送信モジュールは、記憶要求応答を要求側デバイスに送信する。記憶要求応答は、記憶要求の実行に関する情報を含む。例えば、記憶要求応答は、記憶要求の実行に成功したこと、又は他の状態情報を指示する。別の実施形態では、記憶要求応答は、データ及び関連するソースパラメータが格納された場所を指示する情報を含む。装置３００がランラムアクセスデバイスをエミュレートしている場合には、この実施形態は望ましくないことがある。一実施形態では、記憶要求受信モジュール３０２が、データセグメントのデータ及び関連するソースパラメータの全てをデータ記憶デバイス１０６上に格納するのに成功したことを指示する記憶コマンド応答を受信した後に、応答送信モジュール３０４は記憶要求応答を送信する。別の実施形態では、応答送信モジュール３０４は、記憶コマンド応答を受信するのとは無関係に、記憶要求応答を送信する。当業者は、記憶要求応答において送信される他の情報、及びその応答を送信するタイミングを理解されるであろう。
【００７２】
一実施形態では、装置３００は圧縮モジュール３０６を含み、圧縮モジュールは、データ記憶デバイス１０６上に格納する前に、追加データ記憶コマンドのデータを圧縮してデータを形成する。一般には、圧縮モジュール３０６は、データセグメントのデータの一部（又はデータパケット）のデータ長を変更する。これは、データが格納される場所及び次の追加点に影響を及ぼす。この場合、各追加点は、圧縮が終了するまでわからない場合がある。圧縮が用いられる場合、データ記憶デバイス１０６、又は圧縮モジュール３０６の下流にあるモジュールは、一般には、データ記憶デバイス１０６上のデータの追加点及び物理的なロケーションを追跡し、データが圧縮されるまで待ち、データの一部（又はデータパケット）のデータ長、及び次の追加点を判断する。追加点がわかり、データが圧縮されると、物理アドレスの形をとるロケーションを、データ長と共に、マッピングモジュール２０６に折り返し報告することができる。一実施形態では、圧縮モジュール３０６は、一般にはデータのためのデータパケットヘッダ内に、圧縮されたデータと共に圧縮情報を格納する。当業者は、データ記憶デバイス１０６上に格納する前にデータを圧縮する他の特徴及び結果を理解されるであろう。
【００７３】
別の実施形態では、装置３００はインデックス再構築モジュール３０８を含み、インデックス再構築モジュールは、ソースパラメータのうちの１又は複数、及びデータセグメントのデータのデータ記憶デバイス１０６上の物理的なロケーションを用いて、そのデータセグメントのためにマッピングモジュール２０６によって生成されたマッピングを再構築する。アクセスの速度を改善するために、そのインデックスは一般には、ＤＲＡＭのようなより高速の揮発性メモリ内に格納されるが、そのメモリは、電源障害、システムリセット等に起因してデータが失われる。順次記憶デバイス内にデータと共にソースパラメータを格納することによって、ソースパラメータと物理アドレス及びデータ長との間のインデックスマッピングを作成し直すためにインデックス再構築モジュール３０８が使用するシーケンシャルログ内に不揮発性のデータ記録が作成される。
【００７４】
ソースパラメータは、ヘッダ内に、又はデータパケット内の特定のロケーションに、又はデータパケットの最後に格納される。一般には、ソースパラメータは、データパケットのためのヘッダ内に格納される。データ長は一般にはデータヘッダ内に格納され、インデックス又はマッピングが利用することができない場合には、データを順次に探索することができるようにする。一実施形態では、インデックス再構築モジュール３０８は、ページ又は消去ブロックのような、データ記憶デバイス１０６の或る領域を追跡してデータセグメントのためのマッピングを含むインデックスを再構築する。
【００７５】
好適には、データ記憶デバイス１０６上に格納されるデータの物理的なロケーションは、データと共に格納されるソースパラメータと共に、一次仮想−物理マップを構成する。マッピングモジュール２０６によって生成されるマッピングは、二次仮想−物理マップを構成する。二次仮想−物理マップは一般にはＲＡＭ内に格納され、電源供給が断たれた場合には、又は障害が発生した場合には、又は他の理由からマッピングモジュール２０６によって作成されるマップが無効になった場合には、一次仮想−物理マップを用いて、二次仮想−物理マップを作成し直すことができるようにする。
【００７６】
例えば、インデックス再構築モジュール３０８は、データ記憶デバイス１０６内のデータのページの開始時にデータヘッダを調べる。インデックス再構築モジュール３０８は、第１のデータパケットの物理アドレスを読み出し、その後、ヘッダ内のデータ長を含むソースパラメータを読み出す。その後、インデックス再構築モジュール３０８は、データパケット内のソースパラメータを、データパケットの物理アドレス及びデータ長にマッピングする。その後、インデックス再構築モジュール３０８は、データ長を用いて、次のデータパケットに移動する。その後、インデックス再構築モジュール３０８は再構築プロセスを繰り返し、そのページ内の全てのデータパケットを追跡して、二次仮想−物理マップを構築する。このように、データ記憶デバイス１０６はシーケンシャルログであり、そのログを用いて、物理アドレスと、仮想識別子、オフセット、論理ブロックアドレス、ソース物理長等のようなソースパラメータとの間のマッピングを含むインデックスを再構築することができる。
【００７７】
一実施形態では、インデックスは周期的にチェックポイントに通されるか又は特定の時点又は特定の状態において不揮発性メモリ内に格納される。各ページがデータで満たされるときの順序がインバンド（in-band）で保持され、その順序はチェックポイントと相互に関連付けられる。インデックスが利用することができなくなる場合には、直前のチェックポイントに対応する最新のインデックスを検索することができる。その後、チェックポイント直後にデータパケットがセーブされるロケーションにおいて開始するログを再生することによって、インデックスが現在のものに導かれる場合がある。インデックスを現在の状態に更新するために、チェックポイント後に格納されたデータパケットから、直前に格納されたデータパケットまでデータパケットを順次に追跡することによって、インデックス再構築モジュール３０８は同期することができる。都合のよいことに、インデックス再構築モジュール３０８によれば、チェックポイントを通されたインデックスを、効率的かつ迅速に復元することができるようになる。
【００７８】
一実施形態では、装置３００はコマンド並べ替えモジュール３１０を含み、コマンド並べ替えモジュールは、２つ以上の未処理の追加データ記憶コマンドが実行されるシーケンスを変更する。コマンド並べ替えモジュール３１０は、コマンドに、より効率的に順序を付けるのに好都合である。一実施形態では、同じデータセグメントのための書込みコマンドが完了するまで、読出しコマンドが延期される場合がある。別の実施形態では、複数のチャネルをサポートする記憶デバイス１０２によって、第１のチャネルがビジーである間に、そのチャネルに向かうことになっているコマンドを延期することができるようになり、第１のチャネルが利用することができる時点まで、他のチャネルへの他のコマンドを継続することができるようになる。別の実施形態では、記憶要求受信モジュール２０２が２つ以上の記憶要求を受信するとき、装置３００は要求並べ替えモジュール３１２を含み、要求並べ替えモジュールが、記憶要求がサービスされるシーケンスを並べ替える。コマンド並べ替えモジュール３１０及び要求並べ替えモジュール３１２は、コマンド及び要求に、より効率的に順序を付けるのに好都合である。
【００７９】
別の実施形態では、装置３００はガーベージコレクションモジュール３１４を含み、ガーベージコレクションモジュールは、回復を行うことが特定されたデータ記憶デバイス１０６上の記憶領域から有効データを移動し、次にデータを記憶するためにその記憶領域をデータ記憶デバイス１０６内の利用可能空間のプールに戻す前に、その記憶領域から無効データを消去する。この実施形態では、マッピングモジュール２０６は、データ記憶デバイス１０６内の１又は複数のロケーションに対する有効データのソースパラメータのマッピングを、データ記憶デバイス１０６が有効データ及び関連するソースパラメータを追加した新たなロケーションに更新する。一実施形態では、回復を行うために選択された領域から有効データを移動することは、他の記憶要求と同じようにして取り扱われる。
【００８０】
図４は、本発明による、記憶要求を追加データコマンドに変換するための方法４００の一実施形態を示す概略フロー図である。方法４００が開始し、記憶要求受信モジュール２０２が、クライアント１１０又はサーバ１０８のような要求側デバイスから記憶要求を受信する（４０２）。記憶要求は、ファイル又はオブジェクトのデータセグメントをデータ記憶デバイス１０６上に格納するための要求を含む。記憶要求は、データセグメントのための１又は複数のソースパラメータを含み、ソースパラメータは少なくとも、記憶要求によってデータセグメントが格納されるように要求される１又は複数の論理ブロックアドレスと、１又は複数の論理ブロックアドレスに対応する１又は複数のデータ長とを含む。
【００８１】
翻訳モジュール２０４が、記憶要求を１又は複数の記憶コマンドに翻訳する（４０４）。記憶コマンドのうちの少なくとも１つは追加データ記憶コマンドである。各追加データ記憶コマンドは、データ記憶デバイス１０６に、１又は複数の追加点にデータセグメントのデータを格納するように指示する。追加点は、データ記憶デバイス１０６上に格納された直前のデータセグメント後の次のアドレスである、データ記憶デバイス１０６内のロケーションである。翻訳モジュール２０４がデータセグメントを２つ以上のセグメントに分割する場合には、一般には２つ以上のデータ追加コマンドが作成される。これは、データセグメントから生じるデータが追加点において、ページ、消去ブロック等の終わりに納まらない場合に必要とされる。第２の追加点は、別のページ、消去ブロック等の先頭に設定される。
【００８２】
マッピングモジュール２０６が、データセグメントの１又は複数のソースパラメータを、データ記憶デバイス１０６がデータセグメントのデータを追加したデータ記憶デバイス１０６内の１又は複数のロケーションにマッピングし（４０６）、方法４００は終了する。一般には、マッピングは、将来にデータにアクセスすることができるようにするインデックスの一部である。データの物理的なロケーション及びデータ長をソースパラメータにマッピングすることによって、装置２００は、データをデータ記憶デバイス１０６上に順次に格納しながら、ランダムアクセスデバイスをエミュレートすることができる。
【００８３】
図５は、本発明による、記憶要求を追加データコマンドに変換するための別の方法５００の一実施形態を示す概略フロー図である。方法５００が開始し、記憶要求受信モジュール２０２がクライアント１１０又はサーバ１０８のような要求側デバイスから記憶要求を受信する（５０２）。翻訳モジュール２０４が、その記憶要求を１又は複数の記憶コマンドに翻訳する（５０４）。ただし、記憶コマンドのうちの少なくとも１つが追加データ記憶コマンドである。再び、各追加データ記憶コマンドが、データ記憶デバイス１０６に、データセグメントのデータを１又は複数の追加点に格納するように指示する。
【００８４】
圧縮モジュール３０６が、データセグメントに関連する１又は複数の追加データ記憶コマンドのデータを圧縮して（５０６）、圧縮されたデータを生成し、データ記憶デバイス１０６が、追加データ記憶コマンドに応答して、圧縮されたデータを格納する（５０８）。記憶応答受信モジュール３０２が、データ記憶デバイス１０６から１又は複数の記憶コマンド応答を受信する（５１０）。記憶コマンド応答は、データ記憶デバイス１０６がデータセグメントのデータを追加した１又は複数のロケーションを含む。記憶コマンド応答の一部として受信される記憶ロケーションに基づいて、マッピングモジュール２０６が、データセグメントの１又は複数のソースパラメータを、データ記憶デバイス１０６がデータセグメントのデータを追加したデータ記憶デバイス１０６内の１又は複数のロケーションにマッピングし（５１２）、方法５００は終了する。圧縮は一般にはデータのデータ長を変更するので、データを圧縮するには、一般には、ソースパラメータを、データが格納された後の記憶ロケーションにマッピングする必要がある。
【００８５】
図６は、本発明による、記憶要求を追加データコマンドに変換するための例６００の概略的なブロック図である。例６００は、記憶要求を追加データ記憶コマンドに変換するための装置２００、３００の一実施形態の例示にすぎず、発明を限定することは意図していない。当業者は、図６の例６００とは異なる、本発明を実施する数多くの方法が存在することを理解されるであろう。
【００８６】
例６００は論理ブロック記憶要求を表し、その要求において、要求側デバイスは、記憶デバイス１０２に、データセグメントを或る特定の物理アドレスに格納するように指示する。クライアント１１０又はサーバ１０８のような要求側デバイスは、ソースデータ記憶デバイスからデータを書き込むための記憶要求を開始する。ソースデータ記憶デバイスからのデータ６０２の一部が、データ６０２のその部分に格納されるデータセグメント６０６と共に示される。この場合、データセグメント６０６は、セクタ１の物理アドレスに、オフセット５、及び８のデータ長で記憶デバイス１０２上に格納されるように意図されている。一実施形態では、要求側デバイスは、論理ブロックアドレス及びデータ長を含むソースパラメータを有するヘッダを含む記憶要求６０８を作成し、記憶要求６０８を記憶デバイス１０２に送信する。
【００８７】
簡単にするために、例６００は、データセグメント６０６のデータが圧縮されないものと想定する。この例６００では、データセグメント６０６のデータ長は８であり、現在のページ６１６にはデータパケットが入る余地がある。ただし、そのページには、データ長５のデータパケットのためのデータが格納される。この事例では、翻訳モジュール２０４は、データセグメント６０６が、データが現在格納されている現在のページ６１６の終わりに納まらないので、データセグメント６０６から２つの追加データ記憶コマンド６１４を作成して、２つのデータパケット、すなわちデータ１  ６１０及びデータ２  ６１２を格納するものと判断する。
【００８８】
データが現在格納されているページ６１６は、有効データ６１８を含む。他のページには、有効データ及び無効データが含まれる。１つの追加データ記憶コマンド６１４がデータ１  ６１０を追加点１  ６２０に格納し、その追加点は、データが最新に格納されたロケーション６２２の直後にある。その際、データパケット  データ１  ６１０は、６２４に示されるように、現在のページ６１６の終わりに格納される。
【００８９】
第２の追加データ記憶コマンド６１４がデータ２  ６１２を、データが格納されることになる次のページ６２６に格納する。一実施形態では、次のページ６２６は、データ１  ６１０が格納されるページ６１６とは異なる消去ブロック内にある。この実施形態では、追加点１  ６２０に格納されるデータは次のページ６２６に流れる場合があるが、次のページが別の消去ブロック内にない限り、新たな追加点を次のページの先頭に設定する必要はない。別の実施形態では、次のページ６２６は、データ１  ６１０が格納されるページ６１６に隣接するページであるか、又はとにかく論理的には次のページであるが、次のページ６２６の先頭に新たな追加点２  ６３０が必要とされる。当業者は、データを格納し続けるために第２の追加点６３０が必要とされる場合を理解するであろう。次のページ６２６は消去されているので、又は記憶空間回復プロセスが、次のページ６２６内にもはや有効データは存在しないものと判断したので、次のページ６２６は無効データ６２８を含む。第２の追加データ記憶コマンド６１４は、６３２において示されるように、データパケット  データ２  ６１２を追加点２  ６３０に格納する。
【００９０】
この例６００は、データセグメント６０６から作成されるデータパケット６１０、６１２がページ６１６の境界に位置するので、データセグメント６０６が分割される事例を示すが、他の事例では、データセグメント６０６のデータは一緒に格納されるか、又は３つ以上のデータパケットに分割される場合がある。他の事例では、圧縮モジュール３０６が、データセグメント６０６のデータを圧縮して、１又は複数のデータパケット６１０、６１２を形成する。
【００９１】
図７は、本発明による、物理アドレス及び仮想アドレスを効率的にマッピングするための装置７００の一実施形態を示す概略ブロック図である。装置７００は、順方向マッピングモジュール７０２と、逆方向マッピングモジュール７０４と、記憶空間回復モジュール７０６とを含み、それらのモジュールは以下で説明される。順方向マッピングモジュール７０２、逆方向マッピングモジュール７０４及び記憶空間回復モジュール７０６の１又は複数のうちの少なくとも一部は、記憶要求を送信する要求側デバイス、データ記憶デバイス１０６、記憶コントローラ１０４、並びに要求側デバイス、データ記憶デバイス１０６及び記憶コントローラ１０４とは別個のコンピューティングデバイスのうちの１又は複数の中に配置される。
【００９２】
一実施形態では、順方向マッピングモジュール７０２及び逆方向マッピングモジュール７０４は、マッピングモジュール２０６と共に機能する。順方向マッピングモジュール７０２及び逆方向マッピングモジュール７０４は、マッピングモジュール２０６の一部とするか、又は別個のモジュールであり、マッピングモジュール２０６と共に機能することができる。
【００９３】
装置７００は順方向マッピングモジュール７０２を含み、順方向マッピングモジュールは、順方向マップを用いて、データセグメントのデータの１又は複数の物理アドレスを特定する。物理アドレスはデータセグメントの１又は複数の仮想アドレスから特定され、仮想アドレスはデータ記憶デバイス１０６に向けられる記憶要求において特定される。例えば、記憶要求は、データ記憶デバイス１０６内に格納されるデータを読み出すための要求を含む場合がある。データを読み出すための記憶要求は、データ記憶デバイス１０６上に格納されるデータに関連付けられる仮想アドレス又は仮想識別子を含む。読出し要求は、データセグメントが発生したファイルの仮想アドレスを含む場合があり、読出し要求は、仮想アドレスに関連付けられるデータセグメント全体を読み出すための要求であると解釈される。
【００９４】
別の例では、読出し要求は、その読出し要求において要求されるデータのオフセット及びデータ長と共に、仮想アドレスを含む。例えば、データセグメントが２０ブロックである場合に、読出し要求が１６ブロックのオフセット（すなわち、２０ブロックのうちのブロック１６において開始する）及び５のデータ長を含む場合があり、それにより、読出し要求によって、デーセグメントのうちの最後の５ブロックが読み出されるようになる。読出し要求は、データセグメント全体を読み出すための要求、又はデータセグメントの先頭から読み出す要求においても、オフセット及びデータ長を含む場合がある。記憶要求の中に、状態要求のような他の要求が含まれる場合もある。他のタイプ及び他の形の記憶要求も本発明の技術的範囲内で想定されることは、当業者に明白であろう。
【００９５】
装置７００は順方向マップを含み、順方向マップは、１又は複数の仮想アドレスをデータ記憶デバイス１０６内に格納されるデータの１又は複数の物理アドレスにマッピングする。仮想アドレスは、データ記憶デバイス１０６内に格納されるデータに関連する１又は複数のデータセグメントに対応する。１又は複数の仮想アドレスは一般には、仮想アドレス空間内の個別のアドレスを含み、仮想アドレスは仮想アドレス空間に疎らに存在する。データセグメントの１つの仮想アドレスに対して、データ長情報がその仮想アドレスに関連付けられ、順方向マップ内に含まれる。データ長は一般には、データセグメントのサイズに対応する。仮想アドレスと、その仮想アドレスに関連付けられるデータ長情報とを組み合わせて用いることにより、データセグメント内の特定の部分を読み出すのを容易にすることができる。
【００９６】
多くの場合に、格納されたデータを特定するために用いられる仮想アドレスは、取り得る仮想アドレスのネーム空間又は範囲内で取り得る極めて少数の仮想アドレスを表す。この疎らに存在する空間を探索することは煩わしい場合がある。このため、順方向マップは一般には、仮想アドレスに基づいて物理アドレスを見つけるために、順方向マップを迅速に横断するのを容易にするデータ構造である。例えば、順方向マップは、Ｂツリー、連想記憶メモリ（「ＣＡＭ」）、２進ツリー、ハッシュテーブル、又は疎らに存在する空間又は範囲を迅速に探索するのを容易にする他のデータ構造を含む場合がある。疎らに存在する仮想ネーム空間を迅速に探索する順方向マップを用いることによって、装置７００は、仮想アドレスから１又は複数の物理アドレスを確定する効率的な方法を提供する。
【００９７】
順方向マップは、仮想アドレスから物理アドレスを迅速に確定するために最適化されるか、又は少なくともそのように設計されるが、順方向マップは一般には、データ記憶デバイス１０６の特定の領域内の全てのデータの位置を特定するために最適化されない。このため、装置７００は逆方向マッピングモジュール７０４を含み、逆方向マッピングモジュールは、逆方向マップを用いて、物理アドレスからデータセグメントの仮想アドレスを確定する。逆方向マップは、１又は複数の物理アドレスを１又は複数の仮想アドレスにマッピングするために用いられ、逆方向マッピングモジュール７０４によって、又は物理アドレスから仮想アドレスを確定する他のプロセスによって用いられることができる。逆方向マップは、逆方向マップの一部が記憶空間回復動作中に一緒に消去されるデータ記憶デバイス１０６の消去領域に及ぶように、データ記憶デバイス１０６を消去領域の中にマッピングするのに好都合である。記憶空間回復動作（又はガーベージコレクション動作）は、データを将来に記憶するために消去領域を回復する。消去領域によって逆方向マップを編成することにより、記憶空間回復モジュール７０６は、記憶空間回復のための消去領域を効率的に特定し、有効データを特定することができる。記憶空間回復モジュール７０６は、以下でさらに詳細に検討される。
【００９８】
順方向マップにおいて仮想アドレスＡが物理アドレスＢにマッピングされる場合には、逆方向マップにおいて物理アドレスＢが仮想アドレスＡにマッピングされるように、逆方向マップ内の物理アドレスが順方向マップに関連付けられるか又はリンクされる。一実施形態では、順方向マップは逆方向マップ内のエントリにリンクされる物理アドレスを含む。別の実施形態では、順方向マップは、逆方向マップ、又は他の中間リスト、テーブル等の中にある物理アドレスへのポインタを含む。当業者は、物理アドレスを順方向マップ及び逆方向マップにリンクする他の方法を理解するであろう。
【００９９】
一実施形態では、逆方向マップは１又は複数のソースパラメータを含む。ソースパラメータは一般には記憶要求と共に受信され、少なくとも１又は複数の仮想アドレスを含む。ソースパラメータは、記憶要求と共に受信されるデータセグメントのデータに関連付けられるデータ長を含む。別の実施形態では、逆方向マップは、仮想アドレス又はデータ長の形のソースパラメータを含まず、ソースパラメータはデータ記憶デバイス１０６上に格納されるデータセグメントのデータと共に格納される。この実施形態では、ソースパラメータは、データと共に格納されるソースパラメータに導く逆方向マップ内の物理アドレスから見つけられる。言い換えると、逆方向マップは、二次論理−物理マップではなく、一次仮想−物理マップを使用する。
【０１００】
データ記憶デバイス１０６内に格納されるデータは、順方向マップ及び逆方向マップを再構築するために再生することができるログになるので、データと共にソースパラメータを格納することは、順次記憶デバイスにおいて好都合である。これは、記憶要求が受信される時刻と一致するシーケンスにおいてデータが格納されるという事実に起因しており、それゆえ、ソースデータは２つの役割；すなわち、順方向マップ及び逆方向マップを再構築する役割と、物理アドレスから仮想アドレスを確定する役割とを果たす。
【０１０１】
装置７００は記憶空間回復モジュール７０６を含み、記憶空間回復モジュールは、消去領域を回復する動作に先行して、逆方向マップを使用して、消去領域内の有効データを特定する。特定された有効データは、回復動作に先行して、別の消去領域に移動される。消去領域によって逆方向マップを編成することにより、記憶空間回復モジュール７０６は、消去領域に対応する逆方向マップの部分を走査し、有効データを迅速に特定することができるか、又はその消去領域内の有効データの量を確定することができる。消去領域は、一緒に消去される消去ブロック、一定の数のページ等を含む。逆方向マップは、特定の消去領域のためのエントリが走査されると、消去領域の内容がわかるように編成される。
【０１０２】
消去領域によって逆方向マップを編成することにより、消去領域の内容を探索することが、Ｂツリー、２進ツリー、又は仮想−物理アドレス探索のために用いられる他の類似の構造を探索することよりも効率的である。Ｂツリー、２進ツリー等は、消去領域の全ての有効データを特定するために、その全体が頻繁に探索されなければならないので、Ｂツリー、２進ツリー等の形をとる順方向マップを探索することは煩わしい。逆方向マップは、テーブル、データベース、又は消去領域のデータのためのエントリを一緒に格納することができるようにして消去領域のデータに関する操作を容易にする他の構造を含む。
【０１０３】
一実施形態では、順方向マップ及び逆方向マップは、サーバ１０８又はクライアント１１０内で動作するファイルサーバ又はクライアントのような、記憶要求を送信する要求側デバイスのためのデータを編成するファイル構造、ネーム空間、ディレクトリ等から独立している。順方向マップ及び逆方向マップを要求側デバイスの任意のファイルサーバから離しておくことによって、装置７００は、記憶要求によって要求されるようにデータを格納するランダムアクセス論理ブロック記憶デバイスをエミュレートすることができる。
【０１０４】
順方向マップ及び逆方向マップを使用することによって、装置７００は、実際にはデータ記憶デバイス１０６内にデータを順次に格納しながら、記憶要求によって指示されるように特定のロケーション内にデータを格納しているように見えるようにすることができる。都合のよいことに、装置７００は、実際にはデータを順次に格納しながら、論理ブロック記憶装置をエミュレートすることによって、フラッシュメモリのような固体記憶装置の場合にランダムアクセスが引き起こす問題を克服する。また、１つの記憶要求が論理ブロック記憶要求で、一方、第２の記憶要求がオブジェクト記憶要求、ファイル記憶要求等の場合があるので、装置７００は自由度を高めることもできる。要求側デバイスのファイル構造、ネーム空間等からの独立性を保持することは、どのタイプの記憶要求が装置７００によってサービスされる場合があるかに関して、高い自由度を提供する。
【０１０５】
図８は、本発明による、仮想アドレス及び物理アドレスを効率的にマッピングするための装置８００の別の実施形態を示す概略的なブロック図である。装置８００は、順方向マッピングモジュール７０２と、逆方向マッピングモジュール７０４と、記憶空間回復モジュール７０６とを含み、それらのモジュールは図７の装置２００に関連して上記で説明されたのと概ね同じである。また、装置８００は、マップ再構築モジュール８０２と、チェックポイントモジュール８０４と、マップ同期モジュール８０６と、無効化モジュール８０８と、マップ更新モジュール８１０とを含み、それらのモジュールは以下で説明される。
【０１０６】
装置８００はマップ再構築モジュール８０２を含み、マップ再構築モジュールは、データと共に格納されるソースパラメータを用いて、順方向マップ及び逆方向マップを再構築する。データ記憶デバイス１０６内の消去領域又は消去ブロックが満たされた順序を追跡することによって、かつデータと共にソースパラメータを格納することによって、データがデータ記憶デバイス１０６上に順次に格納される場合、データ記憶デバイス１０６はシーケンシャルログになる。マップ再構築モジュール８０２は、データ記憶デバイス１０６上に格納されるデータパケットを順次に読み出すことによって、そのログを再生する。各物理アドレス及びデータパケット長が各データパケット内で見つけられたソースパラメータと対にされ、順方向マップ及び逆方向マップが作成し直される。
【０１０７】
別の実施形態では、装置８００はチェックポイントモジュール８０４を含み、チェックポイントモジュールは、順方向マップ及び逆方向マップに関連する情報を格納する。ただし、チェックポイントはデータ記憶デバイスの時点又は状態に関連する。格納される情報は、順方向マップ及び逆方向マップをチェックポイントに関連する状態に復元するのに十分である。例えば、格納される情報は、状態又は時間チェックポイントを指示する或る識別子と共に、データ記憶デバイス上のような、不揮発性記憶装置内に順方向マップ及び逆方向マップを格納するための情報を含む。
【０１０８】
例えば、チェックポイント情報と共にタイムスタンプを格納することができる。その際、タイムスタンプは、チェックポイントにおいてデータパケットがその時点で格納されていたデータ記憶デバイス１０６内のロケーションと相互に関連付けることができる。別の例では、チェックポイント情報と共に、データが現在格納されているデータ記憶デバイス１０６内のロケーションのような状態情報が格納される。当業者は、順方向マップ及び逆方向マップをチェックポイントに復元するためにチェックポイントモジュール８０４によって格納される場合がある他のチェックポイント情報を理解するであろう。
【０１０９】
別の実施形態では、装置８００はマップ同期モジュール８０６を含み、マップ同期モジュールは、ソースパラメータ及び物理アドレスを順次に適用することによって、順方向マップ及び逆方向マップをチェックポイントに関連する状態から現在の状態に更新する。適用されるソースパラメータは、チェックポイント後に順次に格納されたデータと共に格納される。物理アドレスは、データ記憶デバイス１０６上のデータのロケーションから導出される。
【０１１０】
好適には、マップ同期モジュール８０６は、スクラッチから開始し、データ記憶デバイス１０６の内容全体を再生するのではなく、順方向マップ及び逆方向マップをチェックポイントから現在の状態に復元する。マップ同期モジュール８０６は、チェックポイントを用いて、チェックポイント直後に格納されたデータパケットまで進み、その後、データパケットを、そのポイントから、データパケットがデータ記憶デバイス１０６上に現在格納されている現在の状態まで再生する。マップ同期モジュール８０６は一般には、マップ再構築モジュール８０２よりも順方向マップ及び逆方向マップを復元するのに時間をかけない。
【０１１１】
一実施形態では、順方向マップ及び逆方向マップはデータ記憶デバイス１０６上に格納され、別の１組の順方向マップ及び逆方向マップを作成して、格納された順方向マップ及び逆方向マップをマッピングする。例えば、データパケットが第１の記憶チャネル上に格納され、一方、格納されたデータパケットのための順方向マップ及び逆方向マップは、第２の記憶チャネル上にデータとして格納される場合がある。第２の記憶チャネル上のデータのための順方向マップ及び逆方向マップは、第３の記憶チャネル上にデータとして格納され、それ以降も同様である。この再帰的プロセスは、さらに別の順方向マップ及び逆方向マップに対して必要に応じて続けることができる。記憶チャネルは、単一のデータ記憶デバイス１０６上に、又は別個のデータ記憶デバイス１０６上に存在する。
【０１１２】
装置８００は無効化モジュール８０８を含み、無効化モジュールは、結果としてデータが無効される動作に応答して、逆方向マップ内のデータのためのエントリをマークし、そのエントリによって参照されるデータが無効であることを指示する。無効化モジュール８０８は、削除要求、読み出し・変更・書込み要求等の結果としてエントリを無効としてマークすることができる。逆方向マップは、或るタイプの無効マーカ又はタグを含み、それは、逆方向マップ内のエントリに関連付けられるデータが無効であることを指示するために、無効化モジュール８０８によって変更される。
【０１１３】
一実施形態では、逆方向マップは、データ記憶デバイス１０６内に格納される有効データ及び無効データのための情報を含み、順方向マップは、データ記憶デバイス１０６内に格納される有効データのための情報を含む。逆方向マップは記憶空間回復動作にとって有用であるので、消去ブロック内のデータが無効であることを指示する情報は逆方向マップに含まれる。逆方向マップ内に無効データを指示する情報を保持することによって、一実施形態では、順方向マップは、データ記憶デバイス１０６上に格納される有効データに関連する情報しか保持する必要がないので、順方向探索の効率及び速度を改善される。
【０１１４】
その後、記憶空間回復モジュール７０６は、無効マーカを用いて、消去領域を見つけるために逆方向マップを走査することによって消去領域内の無効データの量を確定し、その消去領域の記憶容量に対する無効データの量を確定することができる。その後、記憶空間回復モジュール７０６は、消去領域内の確定された無効データの量を用いて、回復を行なうための消去領域を選択することができる。いくつかの消去領域を、さらには全ての利用可能な消去領域を走査することによって、記憶空間回復モジュール７０６は、消去領域内の無効データの最大量のような選択判定基準を用いて、回復を行うための消去領域を選択することができる。
【０１１５】
回復を行うための消去領域が選択されると、一実施形態では、その後、記憶空間回復モジュール７０６は、有効データを、選択された消去領域からデータ記憶デバイス１０６内の新たなロケーションに書き込む。新たなロケーションは一般には、データが現在順次に格納されている消去領域のページ内にある。記憶空間回復モジュール７０６は、参照により本明細書に援用される、David Flynn等によって２００７年１２月６日に出願された、「Apparatus System, and Method for Managing Data Using a Data Pipeline」と題する米国特許出願第１１／９５２，０９１号において記述されるようなデータパイプラインを用いて有効データを書き込むことができる。
【０１１６】
一実施形態では、記憶空間回復モジュール７０６はまた、新たなロケーションに書き込まれた有効データが選択された消去領域において無効であることを指示するために逆方向マップを更新し、新たなロケーションに書き込まれた有効データに基づいて順方向マップ及び逆方向マップを更新する。別の実施形態では、記憶空間回復モジュール７０６は、マップ更新モジュール８１０（以下で説明される）と協働して順方向マップ及び逆方向マップを更新する。
【０１１７】
好ましい実施形態では、記憶空間回復モジュール７０６は、記憶要求及び他のコマンドに関連付けられるデータ記憶及び検索に対して自律的に動作する。記憶空間回復モジュール７０６に組み込まれる場合がある記憶空間回復動作は、上記で参照された記憶空間回復出願においてさらに詳細に説明されている。
【０１１８】
一実施形態では、装置８００はマップ更新モジュール８１０を含み、マップ更新モジュールは、データ記憶デバイス１０６の内容が変更されるのに応答して、順方向マップ及び／又は逆方向マップを更新する。さらに別の実施形態では、マップ更新モジュール８１０は、データ記憶デバイスがデータを格納したロケーションに基づいて、データ記憶デバイスから、格納されたデータの物理アドレスを仮想アドレスにリンクする情報を受信する。その実施形態では、データ記憶デバイス１０６がデータパケットを格納するまで、データパケットが格納されるロケーションは利用することができないことがある。
【０１１９】
例えば、データセグメントからのデータを圧縮してデータパケットを形成する場合、圧縮後まで、各データパケットのサイズはわからない。データ記憶デバイス１０６がデータを順次に格納する場合、データパケットが圧縮及び格納されると、格納されたデータパケット後のロケーションに追加点が設定され、次のデータパケットが格納される。追加点がわかると、その後、データ記憶デバイス１０６は、次のデータパケットが格納される追加点に対応する物理アドレスを折り返し報告することができる。マップ更新モジュール８１０は、格納されたデータパケットに関して報告された物理アドレス及び関連するデータ長を用いて、順方向マップ及び逆方向マップを更新する。当業者は、データ記憶デバイス１０６上に格納されるデータの物理アドレス及び関連するデータ長に基づいて順方向マップ及び逆方向マップを更新するマップ更新モジュール８１０の他の実施形態を理解するであろう。
【０１２０】
図９は、本発明による、仮想アドレス及び物理アドレスの効率的なマッピングのための方法９００の一実施形態を示す概略的なフロー図である。方法９００が開始されると、順方向マッピングモジュール７０２が順方向マップを用いて、データセグメントのデータの１又は複数の物理アドレスを特定する（９０２）。物理アドレスはデータセグメントの１又は複数の仮想アドレスから特定され、データセグメントはデータ記憶デバイス１０６に向けられる記憶要求において特定される。順方向マップは、１又は複数の仮想アドレスと、データ記憶デバイス１０６に格納されるデータの１又は複数の物理アドレスとのマッピングを含む。仮想アドレスは仮想アドレス空間内の離散的なアドレスであり、仮想アドレスは仮想アドレス空間に疎らに存在する。
【０１２１】
逆方向マッピングモジュール７０４が、逆方向マップを用いて、物理アドレスからデータセグメントの仮想アドレスを確定する（９０４）。逆方向マップは、１又は複数の物理アドレスを１又は複数の仮想アドレスにマッピングする。逆方向マップ内の物理アドレスは、ポインタ、リンク等を用いて、順方向マップにも関連付けられる。逆方向マップ内の仮想アドレスは、データ記憶デバイス１０６内に格納されるデータに関連する１又は複数のデータセグメントに対応する。また、逆方向マップは、逆方向マップの一部が１つの消去領域に及ぶように、データ記憶デバイスを消去領域の中にマッピングする。データ記憶デバイス１０６の消去領域は、記憶空間回復動作中に一緒に消去される。記憶空間回復動作は、将来のデータ記憶のために消去領域を回復する。
【０１２２】
記憶空間回復モジュール７０６が、消去領域を回復する動作に先行して、逆方向マップを用いて消去領域内の有効データを特定し（９０６）、方法９００は終了する。記憶空間回復モジュール７０６又は記憶空間回復に関連付けられる他のモジュールは、回復動作に先行して、特定された有効データを別の消去領域に移動する。ステップ９０２、９０４、９０６は任意の順序で独立して実施されるので、方法９００のステップ９０２、９０４、９０６は並列に示されていることに留意されたい。
【０１２３】
図１０は、本発明による、仮想アドレス及び物理アドレスの効率的なマッピングのための方法１０００の別の実施形態を示す概略フロー図である。方法１０００が開始されると、記憶空間回復モジュール７０６が、消去領域を見つけるために逆方向マップを走査することによって消去領域内の無効データの量を確定して（１００２）、去領域の記憶容量に対する無効データの量を確定する。その後、記憶空間回復モジュール７０６が、評価すべき別の消去領域が存在するか否かを判断する（１００４）。記憶空間回復モジュール７０６が、評価すべき別の消去領域が存在するものと判断する場合には（１００４）、記憶空間回復モジュール７０６は、次の消去領域のための無効データの量を確定する。
【０１２４】
記憶空間回復モジュール７０６が、評価すべき別の消去領域が存在しないものと判断すると（１００４）、記憶空間回復モジュール７０６は、選択判定基準を用いることによって回復を行うための消去領域を選択する（１００６）。ただし、選択判定基準は、消去領域内の無効データの量を用いることを含む。記憶空間回復モジュール７０６が、選択された消去領域内の有効データを特定し（１００８）、有効データを、データが現在書き込まれている消去領域に移動する（１０１０）。その後、マップ更新モジュール８１０が順方向マップ及び逆方向マップを更新し（１０１２）て、有効データがデータ記憶デバイス１０６内の別のロケーションに書き込まれたことを反映させる。
【０１２５】
一実施形態では、記憶空間回復モジュール７０６が、選択された消去領域を消去し（１０１４）、選択された記憶領域をデータ記憶のために利用可能としてマークし（１０１４）、方法１０００は終了する。別の実施形態では、記憶空間回復モジュール７０６が選択された消去領域内の全ての有効データを別のロケーションに書き込むと、記憶空間回復モジュール７０６は、消去することなく、選択された記憶領域をデータ記憶のために利用可能としてマークする（１０１４）。
【０１２６】
図１１は、本発明による、順方向マップ及び逆方向マップの一例の概略的なブロック図である。一般には、装置７００、８００は、読み出し及びアドレス指定するための記憶要求のような記憶要求を受信する。例えば、装置７００、８００は、論理ブロック記憶要求１１０２を受信し、読出しアドレス１８２を読み出し始め、３ブロックを読み出すことができる。一般には、順方向マップ１１０４は、他の仮想アドレスと共に、仮想アドレスとして論理ブロックアドレスを格納するので、順方向マッピングモジュール７０２は順方向マップ１１０４を用いて、記憶要求１１０２の仮想アドレス１８２から物理アドレスを特定する。その例では、簡単にするために、数字である仮想アドレスだけが示されるが、当業者は、順方向マップ１１０４において任意の仮想アドレスが用いられて表される場合があることは理解されるであろう。他の実施形態では、順方向マップ１１０４は、英数字文字、１６進数文字等を含んでいる。
【０１２７】
一例では、順方向マップ１１０４は簡単なＢツリーである。他の実施形態では、順方向マップ１１０４は、連想記憶メモリ（「ＣＡＭ」）、２進ツリー、ハッシュテーブル、又は当業者に知られている他のデータ構造とすることができる。その実施形態では、Ｂツリーは、２つの仮想アドレスを含む場合があるノード（例えば、ルートノード１１０８）を含む。各仮想アドレスは或る範囲とすることができる。例えば、仮想アドレスは、或る範囲（例えば、オフセット及び長さ）を有する仮想識別子の形をとるか、又は最初及び最後のアドレス又はロケーションを用いて範囲を表す。
【０１２８】
単一の仮想アドレスが、ルートノード１１０８のような或る特定のノードにおいて含まれる場合、探索される仮想アドレス１１０６がそのノードの仮想アドレスよりも小さい場合には、ノード１１０８の左に向かう方向辺（directed edge）１１１０を下方に探索が続けられるであろう。探索される仮想アドレス１１０６が現在のノード１１０８に一致する（すなわち、ノードにおいて特定される範囲内に位置する）場合には、探索が中止され、現在のノード１１０８におけるポインタ、リンク、物理アドレス等が特定される。探索される仮想アドレス１１０６が現在のノード１１０８の範囲よりも大きい場合には、現在のノード１１０８の右に向かう方向辺１１１２を下方に探索が続けられる。ノードが２つの仮想アドレスを含み、探索される仮想アドレス１１０６が、そのノードの列挙される仮想アドレス間に入る場合には、現在のノード１１０８の２つの仮想アドレス間に入る仮想アドレスを有するノードに向かって、中央の方向辺（図示せず）を下方に探索が続けられる。所望の仮想アドレスを特定するか、又は探索される仮想アドレス１１０６がそのＢツリー内に存在しないものと判断するまで、そのＢツリーを下方に探索が続けられる。
【０１２９】
図１１に示された例では、順方向マッピングモジュール７０２は、ルートノード１１０８から始めて、仮想アドレス１８２  １１０６を探索する。探索される仮想アドレス１１０６はルートノードの仮想アドレス２００５〜２１２よりも小さいので、順方向マッピングモジュール７０２は、次のノード１１１４まで左に向かって方向辺１１１０を下方に探索する。探索される仮想アドレス１８２  １１０６は次のノード１１１４に格納される仮想アドレス（０７２〜０８３）よりも大きいので、順方向マッピングモジュール７０２は、次のノード１１１８まで、ノード１１１４の右に向かって方向辺１１１６を下方に探索する。この例では、探索される仮想アドレス１８２  １１０６はノード１１１８の範囲１７８〜１９２内に入ることになるので、次のノード１１１８は、探索される仮想アドレス１８２  １１０６はこのノード１１１８の仮想アドレス１７８〜１９２と一致するように１７８〜１９２の仮想アドレスを含む。
【０１３０】
順方向マッピングモジュール７０２が、順方向マップ１１０４において一致を確定すると、順方向マッピングモジュール７０２は、ノード１１１８内で見つけられるか、又はノード１１１８にリンクされる物理アドレスを返す。図示される例では、順方向マッピングモジュール７０２によって、探索される仮想アドレス１１０６を含むものと特定されたノード１１１８は、逆方向マップ１１２２内のエントリ１１２０にマッピングするリンク「ｆ」を含む。
【０１３１】
図示される実施形態では、逆方向マップ１１２２内のエントリ１１２０毎に（テーブルにおいて行として示される）、逆方向マップ１１２２はエントリＩＤ１１２４、物理アドレス１１２６、データ記憶デバイス１０６上の物理アドレス１１２６に格納されるデータに関連付けられるデータ長１１２８（この場合には、データは圧縮される）、有効タグ１１３０、仮想アドレス１１３２（オプション）、仮想アドレス１１３２に関連付けられるデータ長１１３４（オプション）、及び他の多種多様のデータ１１３６を含む。逆方向マップ１１２２は消去ブロック（消去領域）に編成される。この例では、選択されたノード１１１８に対応するエントリ１１２０は消去ブロックｎ１１３８内に位置する。消去ブロックｎ１１３８の前に消去ブロックｎ−１  １１４０があり、その後に消去ブロックｎ＋１  １１４２がある（消去ブロックｎ−１及びｎ＋１の内容は図示されない）。消去ブロックは、所定の数のページを含む或る消去領域とすることができる。消去領域は、記憶回復動作において一緒に消去されるデータ記憶デバイス１０６内のエリアである。
【０１３２】
エントリＩＤ１１２４は逆方向マップ１１２２の一部として示されるが、エントリＩＤ１１２４は、アドレス、仮想リンク、又は逆方向マップ１１２２内のエントリを順方向マップ１１０４内のノードに結ぶ他の手段とすることができる。物理アドレス１１２６は、探索される仮想アドレス１１０６に対応するデータが存在するデータ記憶デバイス１０６内のアドレスである。物理アドレス１１２６に関連付けられるデータ長１１２８は物理アドレス１１２６において格納されるデータパケットの長さを特定する（便宜上、物理アドレス１１２６及びデータ長１１２８は合わせて宛先パラメータ１１４４と呼ばれる場合があり、仮想アドレス１１３２及び関連するデータ長１１３４はソースパラメータ１１４６と呼ばれる場合がある）。その例では、データ記憶デバイス１０６上に格納されるデータパケットが記憶前に圧縮される、圧縮の一実施形態において、宛先パラメータ１１４４のデータ長１１２０はソースパラメータ１１４６のデータ長１１３４とは異なる。エントリ１１２０に関連付けられるデータの場合、データは大きく圧縮することができ、６４ブロックから１ブロックに圧縮された。
【０１３３】
有効タグ１１３０は、エントリ１１２０にマッピングされたデータが有効であるか否かを指示する。この事例では、エントリ１１２０に関連付けられるデータは有効であり、図１１では、エントリ１１２０の行内に「Ｙ」として示される。一般には、逆方向マップ１１２２は、有効データ及び無効データの両方を追跡し、順方向マップ１１０４は有効データを追跡する。その例では、エントリ「ｃ」１１４８は、エントリ１１４８に関連付けられるデータが無効であることを指示する。順方向マップ１１０４は仮想アドレスを含まないことに留意されたい。逆方向マップ１１２２は、一般には、無効データのためのエントリを保持し、記憶回復動作中に、有効データ及び無効データを迅速に区別することができるようにする。
【０１３４】
図示される逆方向マップ１１２２は、便宜上、ソースパラメータ１１４６を含むが、逆方向マップ１１２２は、ソースパラメータ１１４６を含んでも含まなくてもよい。例えば、ソースパラメータ１１４６が、格納されるデータのおそらくヘッダにおいて、データと共に格納される場合には、逆方向マップ１１２２は、データに関連付けられる物理アドレス１１２６を含むことによって仮想アドレスを間接的に特定することができ、ソースパラメータ１１４６は、格納されたデータから特定されることができる。当業者は、逆方向マップ１１２２内にソースパラメータ１１４６を格納することが好都合であることを理解するであろう。
【０１３５】
逆方向マップ１１２２は、ファイル名、オブジェクト名、ソースデータ等の他の多種多様のデータ１１３６を含む。当業者は、逆方向マップ１１２２において有用な他の情報も含むことが可能であることを理解するであろう。逆方向マップ１１２２内に物理アドレス１１２６が示されるが、他の実施形態では、物理アドレス１１２６、又は他の宛先パラメータ１１４４は、順方向マップ１１０４、中間テーブル又は他のデータ構造内等の他のロケーションに含まれる場合がある。
【０１３６】
消去ブロック（例えば、消去ブロックｎ１１３８）に関連付けられるマップの部分を横断することによって、記憶空間回復モジュール７０６が消去ブロック１１３８内の有効データを特定し、かつ消去ブロック１１３８内の有効データ又は逆に無効データの量を定量することができるように、逆方向マップ１１２２は一般には、消去ブロック又は消去領域によって配列される。インデックスは探索及び記憶回復動作のために最適化される場合があるので、インデックスを、仮想アドレス１１０６から物理アドレス１１２６を特定するために迅速に探索することができる順方向マップ１１０４、及び消去ブロック１１３８内の有効データ及び有効データの量を特定するために迅速に探索することができる逆方向マップ１１２２に配列することは好都合である。当業者は、順方向マップ１１０４及び逆方向マップ１１２２と共にインデックスの他の利点を理解するであろう。
【０１３７】
図１２は、本発明による、記憶要求を調整するための装置１２００の一実施形態を示す概略的なブロック図である。装置１２００は、追加／無効化モジュール１２０２及び再構成モジュール１２０４を有する記憶コントローラ１０４を含み、それらのモジュールは以下で説明される。追加／無効化モジュール１２０２及び再構成モジュール１２０４のうちの１又は複数の少なくとも一部は、記憶要求を送信する要求側デバイス、データ記憶デバイス１０６、記憶コントローラ１０４、並びに要求側デバイス、データ記憶デバイス１０６及び記憶コントローラ１０４とは別個のコンピューティングデバイスのうちの１又は複数の中に配置される。
【０１３８】
装置１２００は追加／無効化モジュール１２０２を含み、追加／無効化モジュールは、第１の記憶要求を受信するのに応答して第１の追加データ記憶コマンドを生成し、第２の記憶要求を受信するのに応答して第２の追加データ記憶コマンドを生成する。第１の記憶要求及び第２の記憶要求は、１又は複数の要求側デバイスから受信される。要求側デバイスは、サーバ１０８、又はサーバ１０８上にあるか若しくはコンピュータネットワーク１１２を介してサーバ１０８と通信するクライアント１１０とすることができる。
【０１３９】
第１の記憶要求は、データセグメントの既存のデータを第１のデータで上書きするための要求を含む。そのデータセグメントはデータ記憶デバイス１０６上に格納される。第２の記憶要求は、同じデータセグメントの既存のデータを第２のデータで上書きするための要求を含む。第１のデータ及び第２のデータは、データセグメント内の共通のオフセットにおいて格納される重なり合うデータの少なくとも一部を含み、第２の記憶要求は、第１の記憶要求後に受信される。
【０１４０】
また、追加／無効化モジュール１２０２は、第１の記憶要求に応答して、データセグメントのデータを無効としてマークすることによってインデックスを更新する。無効としてマークされるデータは、第１のデータに置き換えられるデータである。また、追加／無効化モジュール１２０２は、第２の記憶要求に応答して、データセグメントのデータを無効としてマークすることによってインデックスを更新する。ただし、無効としてマークされるデータは、第２のデータに置き換えられるデータである。一実施形態では、追加／無効化モジュール１２０２は、逆方向マップ１１２２を更新することによってインデックスを更新する。一実施形態では、追加／無効化モジュール１２０２は、逆方向マップ１１２２を更新して、データセグメントが無効であることを指示する。別の実施形態では、追加／無効化モジュール１２０２は、第１のデータ又は第２のデータに対応するデータのみを無効としてマークする。これは、順方向マップ１１０４及び逆方向マップ１１２２の変更を必要とする場合があり、以下で詳細に説明される。
【０１４１】
別の実施形態では、データセグメントのデータを無効としてマークすることは、第１のデータ及び第２のデータに置き換えられるデータセグメントの部分が無効であることを指示すると共に、置き換えられないデータセグメントの部分が依然として有効であることも指示するリストを生成することを含む場合がある。そのリストは、データセグメント全体を無効としてマークすることなくインデックスを更新する際に再構成モジュール１２０４によって用いられる場合がある。
【０１４２】
装置１２００は再構成モジュール１２０４を含み、再構成モジュールは、第１のデータに基づいてインデックスを更新すると共に、第２のデータに基づいてインデックスを更新し、更新されたインデックスは、第２のデータが第１のデータよりも最新であることを指示するように編成される。第２のインデックスに基づいて更新される前にインデックスが第１のデータに基づいて更新されるときに、又は第１のインデックスに基づいて更新される前にインデックスが第２のデータに基づいて更新されるときに、このインデックス編成は保持される。
【０１４３】
一実施形態では、重なり合うデータの場合に、第２のデータが第１のデータよりも最新であることを指示するようにインデックスを編成することは、更新の順序にかかわらず、第２のデータに対応する重なり合うデータのためのインデックス内に、ポインタ、リンク等を保持することを含む。例えば、元のデータセグメントがブロック３を含み、そのブロックが第１のデータによって３’で上書きされかつ第２のデータによって３”で上書きされる場合には、そのインデックスが第１のデータ前に第２のデータで更新されたか、逆に第２のデータ前に第１のデータで更新されたかにかかわらず、そのインデックスは更新後に３”を指す。図１６に関する記述おいて、以下でさらに説明される。
【０１４４】
第２のデータが第１のデータよりも最新であることを指示するようにインデックスを編成することは、一般には、重なり合うデータにマッピングされるインデックスの部分を第２のデータで更新すること、及び第１のデータに基づいてインデックスを更新する前に、再構成モジュール１２０４が第２のデータに基づいてインデックスを更新する場合であっても、第２のデータへのマッピングを保持することを含む。
【０１４５】
追加／無効化モジュール１２０２がインデックスを更新している間、追加／無効化モジュール１２０２は、別のプロセス又はモジュールがインデックスにアクセスすることができないようにし、データ保全性を確保する。例えば、追加／無効化モジュール１２０２が第１のデータに基づいてインデックスを更新している場合には、追加／無効化モジュール１２０２は、追加／無効化モジュール１２０２又は再構成モジュール１２０４の別のインスタンスが第２のデータに基づいてインデックスを更新するのを防ぐ。インデックスが更新される間に、インデックスへのアクセスを防ぐ（すなわち、インデックスをロックする）ことによって、装置１２００は、複数のプロセッサにおいて、又は複数のスレッドにおいて実行される装置のモジュール１２０２、１２０４の複数のインスタンスをサポートする。上記で２つの記憶要求が検討されてきたが、本発明は、３つ以上の記憶要求が同時に処理される状況にも同じく当てはまることに留意されたい。
【０１４６】
図１３は、本発明による、記憶要求を調整するための装置１３００の別の実施形態を示す概略的なブロック図である。装置１３００は追加／無効化モジュール１２０２及び再構成モジュール１２０４を含み、それらのモジュールは図１２の装置１２００に関連して説明されたのと実質的に同じである。また、装置１３００は、データロケーションモジュール１３０２と、読出しモジュール１３０４と、読出し遅延モジュール１３０６と、シーケンス番号モジュール１３０８とを含み、それらのモジュールは以下で説明される。装置１３００のモジュール１２０２、１２０４、１３０２〜１３０８は記憶コントローラ１０４内に示されるが、モジュール１２０２、１２０４、１３０２〜１３０８の全て、又は一部は、データ記憶デバイス１０６、クライアント１１０、サーバ１０８或いは他のデバイス又はロケーションに含まれる。
【０１４７】
一実施形態では、装置１３００はデータロケーションモジュール１３０２を含み、データロケーションモジュールは、データ記憶デバイス１０６が第１のデータを格納した第１の物理的なロケーションでインデックスを更新すると共に、データ記憶デバイス１０６が第２のデータを格納した第２の物理的なロケーションでインデックスを更新する。装置１３００は、データ記憶デバイス１０６が、データ記憶デバイス１０６から受信された第１のデータ及び第２のデータを格納した物理的なロケーションを受信する。上記のように、データ記憶デバイス１０６がデータを順次に格納する場合、所与のデータパケットのためのデータが格納されるロケーションは、先行するデータパケットが格納されるまでわからない。
【０１４８】
更新されたインデックスは、インデックスが、第２の物理的なロケーションに基づいて更新される前に第１の物理的なロケーションに基づいて更新されるか、第１の物理的なロケーションに基づいて更新される前に第２の物理的なロケーションに基づいて更新されるかにかかわらず、第２の物理的なロケーションが第１の物理的なロケーションよりも最新であることを指示するように編成される。例えば、第１の記憶要求に応答して第１のデータの重なり合う部分がアドレス１に格納され、かつ第２のデータの重なり合う部分がアドレス２に格納される場合には、データロケーションモジュール１３０２は、重なり合うデータに関連するインデックスの部分のために、インデックス内にアドレス２を格納する。第１のデータに対して更新される前に、インデックスが第２のデータに対して更新される場合には、アドレス２をアドレス１で置き換えるのではなく、インデックスは、重なり合うデータに対してアドレス２を保持する。
【０１４９】
データロケーション更新モジュール１３０２がインデックスを更新するのを完了するまで、データロケーション更新モジュール１３０２は、データロケーション更新モジュール１３０２の別のインスタンス、或いは追加／無効化モジュール１２０２又は再構成モジュール１２０４のような別のモジュールが、インデックスにアクセスするのを防ぐ。データロケーション更新モジュール１３０２がインデックスにアクセスしている間にインデックスにアクセスするのを防ぐことによって、データの信頼性を高めることができる。
【０１５０】
一般には、追加／無効化モジュール１２０２による特定の記憶要求の処理は、再構成モジュール１２０４による記憶要求の処理に先行し、再構成モジュール１２０４による記憶要求の処理は、データロケーション更新モジュール１３０２による記憶要求の処理に先行する。しかしながら、２つの記憶要求の到着順序が確定されると、追加／無効化モジュール１２０２の或るインスタンスによる第２の記憶要求の処理が、追加／無効化モジュール１２０２の別のインスタンスによる第１の記憶要求の処理の前に行なわれる。同様に、再構成モジュール１２０４による第２の記憶要求の処理は、追加／無効化モジュール１２０２による、又は再構成モジュール１２０４の別のインスタンスによる第１の記憶要求の処理前に行なわれる。
【０１５１】
同様に、データロケーションモジュール１３０２の或るインスタンスによる第２の記憶要求の処理は、追加／無効化モジュール１２０２、再構成モジュール１２０４、又はデータロケーション更新モジュール１３０２の別のインスタンスによる第１の記憶要求の処理の前に行なわれる。本発明のこの特徴によれば、記憶要求を非同期に、かつ独立してマルチプロセッサ及び／又はマルチスレッドで処理することができるようになる。モジュール１２０２、１２０４、１３０２の別のインスタンスがインデックスを更新しており、処理の順序ではなく到着の順序に基づいてインデックスを編成している間に、モジュール１２０２、１２０４、１３０２へのアクセスを防ぐことによって、記憶要求を複数のプロセッサ又はスレッドによって並列に処理するのが容易になる。
【０１５２】
装置１３００は逆方向読出しモジュール１３０４を含み、逆方向読出しモジュールは、読出し要求を含む記憶要求に応答して、データセグメントの少なくとも一部を読み出す。読出し要求は、記憶要求に合わせて調整されなければならず、記憶要求の結果としてデータセグメントが変更されるので、装置１３００は、第１の記憶要求が追加／無効化モジュール１２０２、再構成モジュール１２０４及びデータロケーション更新モジュール１３０２によってサービスされるまで、要求される読出しをサービスするのを遅らせる読出し遅延モジュール１３０６も含む。データセグメントの内容が更新される間に、又はデータセグメントにマッピングされるインデックスが更新される間に読出しを防ぐことによって、読出し遅延モジュール１３０６はデータ保全性を保持する。
【０１５３】
一実施形態では、データセグメントを読み出すための読出し要求が、データセグメントの少なくとも一部を上書きする第１の記憶要求の後であるが、同じくデータセグメントの少なくとも一部を上書きする第２の記憶要求前に受信されるとき、読出し遅延モジュール１３０６は、第１の記憶要求及び第２の記憶要求の両方が追加／無効化モジュール１２０２、再構成モジュール１２０４及びデータロケーション更新モジュール１３０２によってサービスされるまで、読出し要求をサービスするのを遅らせる。この実施形態では、読出しモジュール１３０４が最新バージョンのデータセグメントを読み出すことになるように、読出し遅延モジュール１３０６によって、第２のデータ記憶要求に基づいてデータセグメントを更新することができるようにする。
【０１５４】
一実施形態では、装置１３００はシーケンス番号モジュール１３０８を含み、シーケンス番号モジュールはシーケンス番号を記憶要求と関連付ける。ただし、割り当てられるシーケンス番号は、装置１３００によって記憶要求が受信される順序を表す。シーケンス番号は、第２の記憶要求に基づく更新が第１の記憶要求に基づく更新よりも先行することをインデックスが反映するようにインデックスを編成するのを容易にする。この実施形態では、第１の記憶要求及び第２の記憶要求のそれぞれに割り当てられるシーケンス番号を用いることによって、再構成モジュール１２０４は、第２のデータが第１のデータよりも最新であることを指示するようにインデックスを編成する。同様に、データロケーションモジュール１３０２も、第２のデータが第１のデータよりも最新であることを指示するようにインデックスを編成する。シーケンス番号は、タイムスタンプ、或る一連の番号、又は或るシーケンス番号が別のシーケンス番号に先行することを特定するために用いることができる任意の他の仕組みとすることができる。当業者は、他の形のシーケンス番号を理解するであろう。
【０１５５】
一実施形態では、追加／無効化モジュール１２０２、再構成モジュール１２０４、又はデータロケーション更新モジュール１３０２の或るインスタンスは、インデックス更新中にインデックス全体へのアクセスを妨げない。インデックスは２つ以上の領域に分割される場合がある。例えば、或る領域はデータ記憶デバイス１０６の或るエリアに関連する場合があり、インデックスの別の領域は、データ記憶デバイス１０６の別のエリアに関連する場合がある。その実施形態では、インデックスの第１の領域に関連する記憶要求がサービスされる間に、追加／無効化モジュール１２０２、再構成モジュール１２０４、又はデータロケーション更新モジュール１３０２のさらに別のインスタンスが、第２の領域に関連する第２の記憶要求をサービスする場合がある。別の実施形態では、インデックスは、独立して処理される場合がある複数の仮想アドレス領域を作成するように分割される場合がある。或る領域が更新される間にその領域へのアクセスを制限することが、同時に更新されている他の領域のデータ保全性に影響を及ぼさない限り、インデックスの領域はブランチ、又はサブブランチ、さらにはノードとすることができる。
【０１５６】
一実施形態では、第１の記憶要求及び第２の記憶要求は、データセグメントの少なくとも一部を置き換えることになるデータと共に受信される。別の実施形態では、第１の記憶要求及び第２の記憶要求のいずれか又は両方が、実質的にデータを伴うことなく受信される。さらに、対応する追加データ記憶要求が、データを伴うことなく、データ記憶デバイス１０６に送信される。例えば、記憶要求は、データを含まない場合があり、データ記憶デバイス１０６にデータセグメントのデータを転送するためのダイレクトメモリアクセス（「ＤＭＡ」）プロセス又はリモートＤＭＡ（「ＲＤＭＡ」）プロセスのいずれかを開始する。同様に、データ記憶デバイス１０６に送信される追加データ記憶コマンドは、データ記憶デバイス１０６に、ＤＭＡプロセス又はＲＤＭＡプロセスを開始してデータを転送するように指示する。装置１２００、１３００は、データを伴う１つの記憶要求、回復プロセスの一部である別の要求、ＤＭＡ処理又はＲＤＭＡ処理を開始する別の要求を取り扱うことが可能なように十分に自由度がある。
【０１５７】
本発明は、追加／無効化モジュール１２０２、再構成モジュール１２０４及びデータロケーション更新モジュール１３０２のインスタンスが、概ね同時に受信されると共に単一のセグメントに影響を及ぼす要求をいかに取り扱うかを開示するが、当業者は、追加／無効化モジュール１２０２、再構成モジュール１２０４及びデータロケーション更新モジュール１３０２が、単一のデータセグメントの種々の部分に影響を及ぼす種々の他の記憶要求を取り扱うことができ、さらには２つ以上の別個のデータセグメントに影響を及ぼす記憶要求も取り扱うことができることを理解するであろう。
【０１５８】
図１４は、本発明による、記憶要求を調整するための方法１４００の一実施形態を示す概略フロー図である。方法１４００が開始し、装置１２００が第１の記憶要求を受信する（１４０２）。装置１２００が第２の記憶要求を受信する（１４０４）。第１の記憶要求及び第２の記憶要求は、データセグメントの少なくとも一部を上書きすることによって、単一のデータセグメントに影響を及ぼす。さらに、第１の記憶要求及び第２の記憶要求は、第１の記憶要求及び第２の記憶要求の両方に共通のデータセグメントの少なくとも１つの重なり合う部分を上書きする。
【０１５９】
追加／無効化モジュール１２０２のインスタンスが、データセグメントの少なくとも一部を第１のデータで上書きする第１の追加データ記憶コマンドを生成する（１４０６）。また、追加／無効化モジュール１２０２のインスタンスが、データセグメントの少なくとも一部を第２のデータで上書きする第２の追加データ記憶コマンドを生成する（１４０８）。また、第１のデータ要求をサービスしている追加／無効化モジュール１２０２のインスタンスは、第１のデータに置き換えられるデータセグメントのデータを無効化することによってインデックスを更新する（１４１０）。また、第２のデータ要求をサービスしている追加／無効化モジュール１２０２のインスタンスは、第２のデータに置き換えられるデータセグメントのデータを無効化することによってインデックスを更新する（１４１２）。
【０１６０】
再構成モジュール１２０４のインスタンスが第１のデータに基づいてインデックスを更新する（１４１４）。また、再構成モジュール１２０４のインスタンスが第２のデータに基づいてインデックスを更新し（１４１６）、方法１４００は終了する。追加／無効化モジュール１２０２又は再構成モジュール１２０４の任意のインスタンスがインデックスを更新している間、モジュール１２０２、１２０４の他のインスタンスは、インデックスにアクセスすることはできない。
【０１６１】
追加／無効化モジュール１２０２及び再構成モジュール１２０４のインスタンスに関連するステップ１４０６〜１４１６の順序は１つの実施形態にすぎない。再構成モジュール１２０４によって第１の記憶要求がサービスされる前に、追加／無効化モジュール１２０２によって第１の記憶要求がサービスされ、かつ再構成モジュール１２０４によって第２の記憶要求がサービスされる前に、追加／無効化モジュール１２０２によって第２の記憶要求がサービスされる限り、ステップ１４０６〜１４１６を他の順序にすることも可能であり、本発明の１つの重要な特徴である。例えば、追加／無効化モジュール１２０２の或るインスタンス及び再構成モジュール１２０４の或るインスタンスが、追加／無効化モジュール１２０２の別のインスタンスが第１の記憶要求をサービスする前に、第２の記憶要求をサービスする場合がある。記憶要求をサービスするのに可能な順序付けは、図１６において示される例に関して以下でさらに詳細に検討される。
【０１６２】
図１５は、本発明による、記憶要求を調整するための方法１５００の別の実施形態を示す概略フロー図である。方法１５００は、クライアント１１０、記憶コントローラ１０４又は上記の装置１２００、１３００の他のロケーションにおいて、及びデータ記憶デバイス１０６において記憶要求を調整するために行なわれるステップを示す一例である。方法１５００は３つのデバイスにおける動作を示すが、方法１５００は、本発明が２つ以上のデバイスに及ぶ必要があることを暗示するものではなく、それらのモジュールが図１２及び図１３に示されるように配置されなければならないことを暗示するものでもないことに留意されたい。
【０１６３】
本発明は、記憶コントローラ１０４、又はデータ記憶デバイス１０６の記憶コントローラ１０４と通信する他の単一のデバイス内で実現されるか、又はクライアント１１０、サーバ１０８等の中にあるドライバの一部を含む場合もある。クライアント１１０及びデータ記憶デバイス１０６内に示される動作は一般には、本発明とは無関係であり、記憶要求を送信するために、かつ記憶要求に応答してデータを格納するために、クライアント１１０及びデータ記憶デバイス１０６内で一般に何が起こるかを例示するためだけに示される。
【０１６４】
方法１５００は単一のクライアント１１０を示すが、一般には複数のクライアント１１０が存在し、それぞれが記憶コントローラ１０４の１又は複数のインスタンスを通じてデータ記憶デバイス１０６にアクセスする。方法１５００は、クライアント１１０が、他のクライアント１１０とデータの書込みを調整するクライアント間ロックを開始する（１５０２）ときに始まるので、図示されるクライアント１１０は、或る特定の時刻において書込み要求を伴う記憶要求を送信する唯一のクライアント１１０である。書込み要求は、新たなデータを書き込む要求、又は既存のデータセグメントを置き換えるか又は変更するための要求とすることができる。インデックスにアクセスすることができないようにしながら、新たなデータを書き込むための書込み要求をサービスすることは重要であるが、本発明は、既存のデータセグメントを置き換えるか又は変更するときに、同じデータセグメントを変更する／置き換えるための２つ以上の要求が存在する際にデータ保全性を確保するのに特に有用である。その実施形態では、クライアント間ロックが機能して２つ以上のクライアント１１０からの書込み要求の同期が確保されると、クライアント１１０は、記憶コントローラ１０４に書込み要求を送信する（１５０４）。別の実施形態では、クライアント間同期は利用されず、記憶要求は所定の順序を持たない。図示される実施形態では、その書込み要求は実質的にデータを伴わず、クライアント１１０又は他のロケーションからデータ記憶デバイス１０６にデータを転送するためにＤＭＡプロセスを開始する。
【０１６５】
その際、追加／無効化モジュール１２０２は、インデックスを「ロック」することによって（１５０６）、インデックスに対して複数のアクセスが行なわれないようにする。その後、シーケンスモジュール１３０８がシーケンス番号を入手し（１５０８）、シーケンス番号を書込み要求に関連付ける。その後、追加／無効化モジュール１２０２が、書込み要求に基づいて、追加データ記憶コマンドを作成する（１５１０）。追加データ記憶コマンドは、割り当てられたシーケンス番号を含み、書込み要求によって上書きされることが要求されるデータセグメント内のデータに関連する。その後、追加／無効化モジュール１２０２、又は記憶コントローラ１０４内の他のモジュールが、シーケンス番号１５１１と共に、データ記憶デバイス１０６に追加データ記憶コマンドを送信する（１５１１）。追加データ記憶コマンドは、クライアント１１０又は他のロケーションからデータ記憶デバイス１０６にデータを転送するためのＤＭＡプロセスを開始するコマンドを含む。
【０１６６】
さらに、追加／無効化モジュール１２０２が、既存のデータを無効としてマークすることによって、インデックスを更新する（１５１２）。既存のデータは、データセグメントの一部であるデータであり、書込み要求において参照されるデータに置き換えられることになる。その後、追加／無効化モジュール１２０２が、インデックスへのロックを解除して（１５１４）、他の書込み要求をサービスすることができるようにする。さらに、クライアント１１０が、書込み要求送信のロックを解除し（１５１５）、別のクライアント１１０が記憶コントローラ１０４に書込み要求を送信することができるようにする。一実施形態では、追加／無効化モジュール１２０２は、インデックスが更新されるまで、データセグメント全体を一時的に無効化する。インデックスが更新された後に、書込み要求によって影響を及ぼされないデータセグメントの部分が有効としてマークされる。別の実施形態では、追加／無効化モジュール１２０２は、上書きされるデータに関連付けられるインデックスの部分だけを無効化する。
【０１６７】
追加データ記憶コマンドを作成すること（１５１０）は、データを無効化すること（１５１３）と並列に示されていることに留意されたい。別の実施形態では、データを無効化し（１５１２）、インデックスへのロックを解除した（１５１４）後に、追加／無効化モジュール１２０２が追加データ記憶コマンドを作成する（１５１０）。好ましい実施形態では、データ記憶デバイス１０６は、シーケンス番号の順序でデータパケットを格納する。シーケンス番号１５１１を追加データ記憶コマンドに関連付けることによって、追加／無効化モジュール１２０２は、一実施形態において、データを無効化すること（１５１２）及びインデックスのロックを解除すること（１５１２）とは無関係に、追加データ記憶コマンドを作成する（１５１０）。
【０１６８】
追加コマンド及びシーケンス番号がデータ記憶デバイス１０６によって受信されると、データ記憶デバイス１０６は、ＤＭＡプロセスを開始し（１５１６）、それにより書込み要求に関連付けられるデータをデータ記憶デバイス１０６に転送する。また、データ記憶デバイス１０６は、格納されることになるこのデータの読出しを阻止し（１５１８）、受信されたデータを処理する（１５２０）。データを処理することは、先頭にヘッダを追加すること、データを圧縮すること、データを暗号化すること、誤り訂正符号（「ＥＣＣ」）を生成すること等を含む。また、処理は、１つしか示されていないが、複数のＤＭＡ転送を含む場合もある。その後、データ記憶デバイス１０６が、シーケンス番号に関連付けられる追加データ記憶コマンドのためのＤＭＡを完了し、その後追加データ記憶コマンドを完了する（１５２４）。
【０１６９】
他の実施形態では、追加／無効化モジュール１２０２は、追加データ記憶コマンドに加えて、書込み要求に関連付けられる他のコマンドを作成し、それらのコマンドをシーケンス番号に関連付ける。その後、記憶コントローラ１０４は、各コマンドに添付されるシーケンス番号と共に、それらのコマンドを送信する。その後、データ記憶デバイス１０６が、シーケンス番号に関連付けられる全てのコマンドを完了する（１５２４）。当業者は、書込み要求をサービスするために生成される場合がある、書込み要求に関連付けられる他のコマンドを理解されよう。データ記憶デバイス１０６が、ＤＭＡを通じて受信されたデータを処理すると（１５２０）、データ記憶デバイス１０６はデータを格納し（１５２６）、データの読出しを解除する（１５２８）。データを格納すること（１５２６）は、他のプロセスよりも長い時間を要する場合があるプロセスであることに留意されたい。好ましい実施形態では、記憶コントローラ１０４は、データが格納されている間に、数多くの他の記憶要求を処理するであろう。
【０１７０】
追加／無効化モジュール１２０２がインデックスのロックを解除した（１５１４）後に、再構成モジュール１２０４がインデックスをロックし（１５３０）、クライアント１１０から受信される書込み要求に関して書き込まれるように要求されるデータに基づいて、インデックスを更新する（１５３２）。その後、再構成モジュール１２０４が、インデックスのロックを解除する（１５３４）。ロックが解除されると、追加／無効化モジュール１２０２及び再構成モジュール１２０４の他のインスタンスがインデックスにアクセスすることができる。一実施形態では、追加／無効化モジュール１２０２がインデックスのロックを解除し（１５１４）、再構成モジュール１２０４がインデックスを再度ロックする（１５３０）代わりに、追加／無効化モジュール１２０２の無効化プロセス及び再構成モジュール１２０４のインデックス更新全体を通じて、インデックスはロックされたままである。
【０１７１】
データ記憶デバイス１０６がシーケンス番号１５１１に関連付けられるコマンド（複数可）を完了すると（１５２４）、データ記憶デバイス１０６は、データ記憶デバイス１０６が関連するデータを格納した（１５２６）１又は複数の物理アドレスを送信する（１５３６）。一実施形態では、コマンド完了１５２４が、シーケンス番号１５３６と共に送信される。好ましい実施形態では、コマンド完了１５２４と共に送信されるシーケンス番号１５３６は、データ記憶デバイス１０６に最初に送信されるシーケンス番号１５１１と同じである。データロケーション更新モジュール１３０２がインデックスをロックし（１５３８）、データ記憶デバイス１０６が関連するデータを格納した（１５２６）ロケーション（複数可）を指すように、インデックスを更新する（１５４０）。その実施形態では、追加／無効化モジュール１２０２は、関連するデータセグメントのための無効化フラグをクリアする。追加／無効化モジュール１２０２が書込み要求に関連付けられるデータセグメント全体を無効化する別の実施形態では、データロケーションモジュール１３０２は、書込み要求によって影響を及ぼされなかったデータに関する無効化フラグをクリアする。その後、データロケーション更新モジュール１３０２が、インデックスのロックを解除し（１５４２）、記憶コントローラ１０４が書込み要求を完了し（１５４４）、クライアント１１０に確認を送信する。その後、クライアント１１０がその確認を受信し（１５４６）、処理して、方法１５００は終了する。
【０１７２】
一実施形態では、インデックスがロックされる度に（１５０６、１５３０、１５３８）、インデックス全体がロックされる。別の実施形態では、インデックスの一部のみがロックされる。例えば、ブランチがロックされる場合があるか、又はデータセグメントに対応するノードがロックされる場合もある。
【０１７３】
図１６（図１６Ａ、図１６Ｂ及び図１６Ｃを含む）は、本発明による、記憶要求を調整するための装置１２００、１３００の一例１６００を示す概略的なブロック図である。その例１６００において、データセグメントを格納するための以前の書込み要求に基づいて、元の状態にあるデータセグメント１６０２がデータ記憶デバイス１０６上に格納されるものと想定される。またその例では、装置１２００、１３００は２つのクライアント１１０から２つの記憶要求を受信する。クライアントＡは要求１を送信し、クライアントＢは要求２を送信する。いずれの記憶要求とも、データセグメントの一部を上書きしようと試みる。クライアントＡからの要求１は、クライアントＢからの要求２の前に受信される。
【０１７４】
要求が受信されるときの時間のシーケンス１６０４が示されており、それは、記憶コントローラ１０４がデータ記憶デバイス１０６をランダムアクセスデバイスとしてエミュレートする場合に、クライアント１１０がデータセグメントに対する変更をいかに認識することになるかを表す。データセグメントの元の状態１６０２は１〜５の番号を付される５つのブロックを含む。元の状態１６０２のブロックは白抜きで示される。クライアントＡは第１のデータに関連付けられる要求１を送信し、そのデータはブロック２及び３を変更する。第１のデータ１６０６は、ブロック２及び３内の新たなデータをそれぞれ２’及び３’として示す。第１のデータ１６０６を有するブロックは水平なクロスハッチを付けて示される。クライアントＡが第２のデータに関連付けられる要求２を送信し、そのデータはブロック３及び４を変更する。第２のデータ１６０８は、ブロック３及び４内の新たなデータをそれぞれ３”及び４”として示す。第２のデータ１６０８を有するブロックは、左上から右下に向かって斜めのクロスハッチを付けて示される。最後の状態１６１０が示されており、第１のデータ及び第２のデータがブロック２、３及び４を上書きする。
【０１７５】
最後の状態１６１０において、ブロック３は第２のデータ３”を含むことに特に留意されたい。これは、要求２が要求１の後に到着することに起因する。要求２は、時間的に要求１の次になるので、要求２は要求１よりも最新であると見なされる。その例１６００は、インデックスの最後の状態がいずれの場合でも同じであり、第２のデータが第１のデータよりも最新であるように、データセグメントのためのインデックスを更新する場合のいくつかのシナリオを示す。
【０１７６】
例１６００では、要求が受信されると、その要求は３つのステップにおいて処理される。第一に、追加／無効化モジュール１２０２のインスタンスが書込み要求のデータに置き換えられることになるデータセグメント内のデータを無効化する。第二に、インデックスが、Ｂツリー、２進ツリー又は類似の構造の形とる順方向マップ１１０４を有するものと想定され、再構成モジュール１２０４のインスタンスがそのツリーを再構成することによってインデックスを更新する。第三に、データロケーションモジュール１３０２が、データ記憶デバイス１０６がデータを格納した１又は複数のロケーションを用いて、インデックスを更新する。例えば、データロケーションモジュール１３０２は逆方向マップ１１２２を更新する場合がある。要求Ａの場合の３つの動作がＡ１、Ａ２及びＡ３として示される。要求Ｂの場合の３つの動作がＢ１、Ｂ２及びＢ３として示される。別の実施形態では、ステップＡ１及びＡ２を組み合わせて単一のステップにすることができる。同様に、Ａ２及びＡ３を組み合わせることができる。ステップ又はステップ内で実行されるプロセスを並べ替えること、及び組み合わせることは、本発明の広範な範囲と一致する。
【０１７７】
例１６００は、要求Ａ及び要求Ｂに関連付けられる動作の種々の組み合わせに基づいてツリーを更新する１０個の異なるシーケンス（Ｓ１〜Ｓ１０）の場合のツリーの状態を示す。１０個の取り得る全てのシーケンスの場合の最後の状態は同じであり、それは望ましい結果であることに留意されたい。シーケンスＳ１〜Ｓ１０は全てステップＡ１から開始する。これは、追加／無効化モジュール１２０２がシーケンス番号を割り当て、クライアントＡからの要求１が受信された直後に、要求１のためのデータを無効化するものと想定する。別の実施形態では、シーケンス番号を割り当てることは、データを無効化することから切り離される場合がある。この実施形態では、クライアントＢからの要求２の前にクライアントＡからの要求１が受信され、追加／無効化モジュール１２０２の１又は複数のインスタンスが到着順に基づいて各要求にシーケンス番号を最初に割り当てる場合、各要求が割り当てられたシーケンス番号を有するので、ステップＡ１においてデータを無効化する処理が遅延され、データを無効化するために最初にＢ１が処理される場合がある。この事例では、Ｂ１がＡ１に先行する追加的なシーケンスの最後の状態（図示せず）は、シーケンスＳ１〜Ｓ１０において示される状態と同じになる。
【０１７８】
第１のシーケンスＳ１は、データセグメントのブロック１〜５を表す、ツリー内のノードの元の状態を表す（元の状態を表すノードは上記で示されたブロックの元の状態と合わせるために白抜きであることに留意されたい）。そのノードは、元の状態１６０２にあるブロック１〜５に対応する１〜５の範囲（「１：５」）を示す。シーケンスＳ１の第１のステップは、追加／無効化モジュール１２０２がデータセグメントのノードを無効化することである。これはステップＡ１において示されており、そのステップではノードは無効化されて示され、ノードの下のＡは、要求Ａがデータを無効化するためにサービスされていることを指示する。その範囲を無効化することは、右上から左下に向かうクロスハッチと、要求がデータを無効化したことを指示するノードの下の文字で表される。
【０１７９】
簡単にするために、例１６００において示されるシーケンスＳ１〜Ｓ１０において、範囲１〜５の全体が無効化されているとして示されることに留意されたい。しかしながら、好ましい実施形態では、要求によって影響を及ぼされるブロックだけが無効化される。この無効化プロセス中に、追加／無効化モジュール１２０２は、インデックスの全て又は一部をロックする。
【０１８０】
Ａ２として示される、シーケンスＳ１の第２のステップは、再構成モジュール１２０４が、ツリーを再構成してブロック２及び３を分割することであり、それらのブロックは２’及び３’を指すであろう。この段階では、ブロック１、４及び５のためのロックが解除され、そのデータは元の状態において読み出すためにアクセス可能なままである。ブロック２及び３はツリーの中央ノードにおいて無効として示される。Ａ３として示されるシーケンスＳ１の第３のステップは、データロケーションモジュール１３０２が、ブロック２’及び３’がデータ記憶デバイス１０６上に格納されたロケーションに基づいてツリーを更新することである。これは新たなブロック２’及び３’を示す中央ノードとして示されており、そのノードは、上記のクライアントＡの更新１６０６の完了において示されるように、ステップＡ３の終了時にブロックの最後の状態に対応する水平のクロスハッチを有する。これは、逆方向マップ１１２２内の１又は複数のエントリを指すように順方向マップ１１０４のノード内のポインタを更新することによって果たされる場合がある。ここで、逆方向マップ１１２２内のエントリは第１のデータの物理アドレスを有する。この事例では、逆方向マップ１１２２は２’及び３’のための物理アドレスを有する。
【０１８１】
Ｂ１として示される、シーケンスＳ１の第４のステップは、追加／無効化モジュール１２０２のインスタンスが第２のデータ３”及び４”によって上書きされることになるツリー内のノードを無効化することである。この事例では、第２のノード（２’：３’）及び第３のノード（４：５）が影響を及ぼされるので、いずれのノードも無効として示される（右から左へのクロスハッチ）。Ｂ２として示される、シーケンスＳ１の第５のステップは、再構成モジュール１２０４が２つのノードを再構成し、それにより２’を指すノード、３”：４”を指すノード、及びブロック５を指すノードを形成することである。３”：４”を指すノードは無効として示される。
【０１８２】
Ｂ３として示される、シーケンスＳ１の第６のステップは、データ記憶デバイス１０６がブロック３”及び４”を格納した物理アドレス情報を用いてインデックスを更新するデータロケーションモジュール１３０２のインスタンスに対応する。この時点で、３”及び４”を表すノードは、最後の状態において示されており、左から右に向かうクロスハッチを付けられる。ステップＢ３は、最後の状態にあるブロック１〜５を表すツリーの部分を示し、ブロック１及び５は変更されず、ブロック２は、第１のデータ２’で更新されていることを示し、ブロック３及び４は第２のデータ３”及び４”で更新されていることを示す。ブロック３が第２のデータ３”で適切に示されること、及び図示されるシーケンスＳ１〜Ｓ１０の全ての最後の状態は処理の順序にかかわらず同じであることに留意されたい。
【０１８３】
シーケンスＳ２は、処理ステップＡ３及びＢ１の順序が入れ替えられることを除いてシーケンスＳ１と同じである。ステップＢ１において、要求Ｂをサービスする再構成モジュール１２０４のインスタンスが、ブロック３及び４を指す２つのノードを無効化する。ステップＡ３において、要求Ａをサービスするデータロケーションモジュール１３０２のインスタンスが、２’及び３’が格納されたロケーションを用いてインデックスを更新するが、要求Ｂをサービスする再構成モジュール１２０４のインスタンスが第２のノード及び第３のノードから３及び４を未だ分離していないので、第２のノード（２”：３”）及び第３のノード（４：５）は無効のままである。再構成モジュール１２０４が、２’を指すノード及び５を指すノードを残して、３”：４”を指すノードを含むようにノードを再構成すると、２’及び５を指すノードは最後の状態にある。シーケンスＳ１におけるステップＢ３と同じであるステップＢ３の後に、シーケンスＳ２のノードは最後の状態にあり、シーケンスＳ１の最後の状態と一致する。
【０１８４】
図１６Ｂ及び図１６Ｃにおいて示されるシーケンスＳ３〜Ｓ１０は、ステップが並べ替えられることを除いて、シーケンスＳ１及びＳ２手順及び解析と同様の手順及び解析に従う。全てのシーケンスＳ１〜Ｓ１０において、最後の状態は同じであることに留意されたい。本発明によれば、複数のプロセッサ又は複数のスレッドが、共通のデータ記憶デバイス１０６上に格納される同じデータセグメントに、又はデータ記憶デバイス１０６のアレイにわたってストライピングされるデータセグメントにアクセスすることができるようになる。本発明によれば、複数のプロセッサ又はスレッドが、データ保全性を保持しながら複数のサービス要求をサービスするために異なる完了時間を有することができるようになる。２つの記憶要求が示されるが、本発明は、同じデータセグメントにアクセスする３つ以上の同時に生じる記憶要求にも適用することができる。当業者は、本発明の他の利点、及び装置１２００、１３００のモジュール１２０２、１２０４、１３０２〜１３０８を実現する他の方法を理解するであろう。
【０１８５】
本発明は、その精神又は不可欠な特徴から逸脱することなく、他の具体的な形で具現される場合もある。記述される実施形態は、あらゆる点において、例示にすぎず、限定するものと見なされるべきではない。それゆえ、本発明の範囲は、これまでの説明によってではなく、添付の特許請求の範囲によって指示される。特許請求の範囲の均等の範囲内に入る全ての変更が、特許請求の範囲内に含まれるべきである。
【図１】
0005431453.tif 000002
【図２】
0005431453.tif 000003
【図３】
0005431453.tif 000004
【図４】
0005431453.tif 000005
【図５】
0005431453.tif 000006
【図６】
0005431453.tif 000007
【図７】
0005431453.tif 000008
【図８】
0005431453.tif 000009
【図９】
0005431453.tif 000010
【図１０】
0005431453.tif 000011
【図１１】
0005431453.tif 000012
【図１２】
0005431453.tif 000013
【図１３】
0005431453.tif 000014
【図１４】
0005431453.tif 000015
【図１５】
0005431453.tif 000016
【図１６Ａ】
0005431453.tif 000017
【図１６Ｂ】
0005431453.tif 000018
【図１６Ｃ】
0005431453.tif 000019