(57)【要約】  データストレージサブシステムにおいてマッピングテーブルを保持するためのシステム及び方法。データストレージサブシステムが、複数のエントリを含む複数のマッピングテーブルをサポートする。エントリの各々は、キーを含むタプルを含む。データストレージコントローラは、可変長符号化を使用してマッピングテーブル内の各タプルを符号化するように構成される。また、マッピングテーブルは、各レベルが１又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成することができる。さらに、所与のタプルの符号化前のサイズ、所与のタプルの符号化後のサイズ、及び所与のタプルを符号化する時間に少なくとも部分的に基づいて、所与のタプルの複数の符号化のうちの特定の符号化を選択することができる。
2014532227.tif 000002
【特許請求の範囲】
【請求項１】
データストレージ媒体と、
前記データストレージ媒体に結合されたデータストレージコントローラと、
複数のエントリを含むマッピングテーブルと、
を備え、前記マッピングテーブルエントリの各々は、キーを含むタプルを含み、
前記データストレージコントローラは、可変長符号化を使用して前記マッピングテーブル内の各タプルを符号化するように構成される、
ことを特徴とするコンピュータシステム。
【請求項２】
前記マッピングテーブルは、各レベルが１又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
所与のタプルの複数の符号化のうちの特定の符号化が、前記所与のタプルの符号化前のサイズ、前記所与のタプルの符号化後のサイズ、及び前記所与のタプルを符号化する時間に少なくとも部分的に基づいて選択される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
前記データストレージコントローラは、所与のタプルの複数の符号化を行い、該複数の符号化の１つを最終的な符号化として選択するように構成される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項５】
前記データストレージコントローラは、所与のマッピングテーブルエントリを最初に復号することなく、該エントリがクエリを満たすかどうかを調べるように構成される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項６】
前記マッピングテーブルは、前記システム内の仮想ブロックに対応するキーを有するエントリを記憶する、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項７】
所与の仮想ブロック範囲のエントリは、該ブロック範囲を含むデータの場所を容易に検索できるようにする情報を記憶する、
ことを特徴とする請求項６に記載のコンピュータシステム。
【請求項８】
所与の仮想ブロック範囲のエントリは、該所与の仮想ブロック範囲内のデータに関して計算したハッシュ値を記憶する、
ことを特徴とする請求項６に記載のコンピュータシステム。
【請求項９】
所与の仮想ブロック範囲のエントリは、ストレージにさらにアクセスせずに前記仮想ブロック範囲を再構成するために使用できるデータパターンを記憶する、
ことを特徴とする請求項６に記載のコンピュータシステム。
【請求項１０】
前記マッピングテーブルは、前記データストレージ媒体内のページとして記憶されたデータを含み、前記データストレージコントローラは、前記ページの少なくとも一部に対して異なるデータ符号化を使用するように構成される、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１１】
タプルの符号化後の表現のサイズと前記タプルの符号化前の表現のサイズの比率が前記ページ毎に変化し得る、
ことを特徴とする請求項１０に記載のコンピュータシステム。
【請求項１２】
符号化前のタプルを表すために使用するビットの最大数を、前記タプルを再符号化する必要なく変更することができる、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１３】
前記マッピングテーブルのサイズは、有効なマッピングが存在する空間の量に比例する、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１４】
前記可変長符号化は、基準及びオフセットを含む、
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項１５】
ストレージシステムで使用する方法であって、
キーを含むタプルを各エントリが含む１又はそれ以上のマッピングテーブルエントリを各レベルが含む複数のレベルとして構成されたマッピングテーブルを記憶するステップと、
可変長符号化を使用して前記マッピングテーブル内の各タプルを符号化するステップと、
を含むことを特徴とする方法。
【請求項１６】
前記マッピングテーブルは、各レベルが１又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成される、
ことを特徴とする請求項１５に記載の方法。
【請求項１７】
所与のタプルの複数の符号化のうちの特定の符号化を、前記所与のタプルの符号化前のサイズ、前記所与のタプルの符号化後のサイズ、及び前記所与のタプルを符号化する時間に少なくとも部分的に基づいて選択するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１８】
所与のタプルの複数の符号化を行い、該複数の符号化の１つを最終的な符号化として選択するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項１９】
前記ページの少なくとも一部に対して異なるデータ符号化を使用するステップをさらに含む、
ことを特徴とする請求項１５に記載の方法。
【請求項２０】
符号化前のタプルを表すために使用するビットの最大数を、前記タプルを再符号化する必要なく変更することができる、
ことを特徴とする請求項１５に記載の方法。
【請求項２１】
前記マッピングテーブルのサイズは、有効なマッピングが存在する空間の量に比例する、
ことを特徴とする請求項１５に記載の方法。
【請求項２２】
プログラム命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記プログラム命令は、プロセッサにより、
キーを含むタプルを各エントリが含む１又はそれ以上のマッピングテーブルエントリを各レベルが含む複数のレベルとして構成されたマッピングテーブルを記憶し、
可変長符号化を使用して前記マッピングテーブル内の各タプルを符号化する、
ように実行可能である、
ことを特徴とする非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータネットワークに関し、具体的には、ストレージシステム内でマッピング構造を保持することに関する。
【背景技術】
【０００２】
コンピュータメモリの記憶域及びデータ帯域幅が増すにつれ、企業が日々管理するデータの量及び複雑性も増す。通常、データセンターなどの大規模分散型ストレージシステムは、多くの業務を実行する。サーバルームと呼ぶこともできるデータセンターは、１又はそれ以上の企業に関連するデータを記憶し、管理して広めるための物理的又は仮想的な集中型リポジトリである。分散型ストレージシステムは、１又はそれ以上のネットワークにより相互接続されたクライアントコンピュータに結合することができる。分散型ストレージシステムのいずれかの部分が不良を起こすと、企業活動が損なわれることがある。従って、分散型ストレージシステムは、データの利用可能性及び高パフォーマンス機能のための高度な基準を維持する。
【０００３】
分散型ストレージシステムは、ハードディスク、固体デバイス、別の記憶技術を使用するストレージデバイス、又はストレージデバイスのパーティションとすることができる物理ボリュームを含む。論理ボリュームマネージャ又はディスクアレイマネージャなどのソフトウェアアプリケーションは、大容量記憶アレイ上の空間割り当て手段を提供する。また、システム管理者は、このソフトウェアを使用して、論理ボリュームを含むストレージグループの単位を形成することもできる。ストレージ仮想化では、エンドユーザが物理ストレージを識別することなく論理ストレージにアクセスできるように、物理ストレージから論理ストレージが抽象化（分離）される。
【０００４】
ストレージ仮想化をサポートするために、ボリュームマネージャは、エンドユーザからの論理アドレスを用いた着信Ｉ／Ｏ要求を、ストレージデバイス内の物理的な位置に関連するアドレスを用いた新規要求に変換することにより、入出力（Ｉ／Ｏ）リダイレクションを実行する。ストレージデバイスによっては、固体ストレージデバイス内で使用できるアドレス変換レイヤなどの付加的なアドレス変換機構を含むものもあるので、上述した論理アドレスから別のアドレスへの変換が唯一の又は最終的なアドレス変換を表さない場合もある。リダイレクションでは、１又はそれ以上のマッピングテーブルに記憶されたメタデータを利用する。また、１又はそれ以上のマッピングテーブルに記憶された情報を使用して、ストレージの重複排除を行い、特定のスナップショットレベルの仮想セクタを物理的位置にマッピングすることもできる。ボリュームマネージャは、仮想ストレージのためのマッピング情報の一貫した概念を保持することができる。しかしながら、マッピングテーブルを保持するために使用されるストレージ容量により、サポートされるアドレス空間が制限されることがある。
【０００５】
ボリュームマネージャが使用する方法は、選択されるストレージディスクに関連する技術及び機構によって決まる。例えば、ハードディスク、ハードディスクパーティション、又は外部ストレージデバイスの論理ユニット番号（ＬＵＮ）の細粒度レベルのためのマッピングを提供するボリュームマネージャは、データのかなりの部分に関して、重複データをリダイレクトし、検索し、削除することなどに制限される。別のタイプのストレージディスクの一例として、固体ディスク（ＳＳＤ）がある。ＳＳＤは、ＨＤＤインターフェイスをエミュレートすることができるが、永続データの記憶に、ＨＤＤ内で見られるような電気機械デバイスではなく固体メモリを利用する。例えば、ＳＳＤは、フラッシュメモリのバンクを含むことができる。従って、記憶のためにＳＳＤを含む一方で、ＨＤＤに合わせて開発されたマッピングテーブル割り当てアルゴリズムを利用するシステムでは、１又はそれ以上のマッピングテーブルによる大規模サポートアドレス空間を実現することができない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
このため、複数の固体ストレージデバイスの１つに記憶されたデータのストレージ仮想化を効率的に実行するためのシステム及び方法が望まれている。
【課題を解決するための手段】
【０００７】
データストレージシステムにおいてマッピングテーブルを効率的に管理するためのコンピュータシステム及び方法の様々な実施形態を企図する。１つの実施形態では、ネットワークに結合されたデータストレージサブシステムが、クライアントコンピュータからネットワークを介して読み込み要求及び書き込み要求を受け取る。データストレージサブシステムは、複数のストレージデバイスを含むデバイスグループ上の複数のデータ記憶位置を含む。データストレージサブシステムは、少なくとも１つのマッピングテーブルをさらに含む。マッピングテーブルは複数のエントリを含み、これらのエントリの各々は、キーを含むタプルを含む。データストレージコントローラは、可変長符号化を使用してマッピングテーブル内の各タプルを符号化するように構成される。また、マッピングテーブルは、各レベルが１又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成することができる。さらに、所与のタプルの符号化前のサイズ、所与のタプルの符号化後のサイズ、及び所与のタプルを符号化する時間に少なくとも部分的に基づいて、所与のタプルの複数の符号化のうちの特定の符号化を選択することができる。データストレージコントローラが、所与のタプルの複数の異なる符号化を行い、これらの様々な符号化を比較し、最適と見なされる特定の符号化を選択するように構成される実施形態も企図する。
【０００８】
さらに、マッピングテーブルが、システム内の仮想ブロックに対応するキーを有するエントリを記憶する実施形態も企図する。様々な実施形態では、所与の仮想ブロック範囲のエントリが、その所与の仮想ブロック範囲内のデータに関して計算したハッシュ値を記憶し、これらのエントリが、そのブロック範囲を含むデータの位置を容易に検索できるようにする情報を記憶する。
【０００９】
以下の説明及び添付図面を検討すれば、これらの及びその他の実施形態が明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】ネットワークアーキテクチャの１つの実施形態を示す汎用ブロック図である。
【図２】マッピングテーブルの１つの実施形態の汎用ブロック図である。
【図３Ａ】マッピングテーブルへのアクセスに使用する一次インデックスの１つの実施形態の汎用ブロック図である。
【図３Ｂ】マッピングテーブルへのアクセスに使用する一次インデックスの別の実施形態の汎用ブロック図である。
【図４】一次インデックス及びマッピングテーブルの別の実施形態の汎用ブロック図である。
【図５Ａ】読み込みアクセスを行う方法の１つの実施形態を示す汎用フロー図である。
【図５Ｂ】書き込み動作を行う方法の１つの実施形態を示す汎用フロー図である。
【図５Ｃ】タプルを符号化して記憶する方法の１つの実施形態を示す汎用フロー図である。
【図５Ｄ】タプル符号化の１つの実施形態を示す図である。
【図５Ｅ】スキームを選択して符号化する方法の１つの実施形態を示す汎用フロー図である。
【図６】共有マッピングテーブルを有するマルチノードネットワークの１つの実施形態の汎用ブロック図である。
【図７】マッピングテーブルへのアクセスに使用する二次インデックスの１つの実施形態の汎用ブロック図である。
【図８】マッピングテーブルにアクセスする三次インデックスの１つの実施形態の汎用ブロック図である。
【図９】オーバーレイテーブルを利用する方法の１つの実施形態を示す図である。
【図１０】マッピングテーブル内のレベルの平坦化動作の１つの実施形態の汎用ブロック図である。
【図１１】マッピングテーブル内のレベルの平坦化動作の別の実施形態の汎用ブロック図である。
【図１２】マッピングテーブル内のレベルの平坦化方法の１つの実施形態を示す汎用フロー図である。
【図１３】マッピングテーブル内のバルクアレイタスクを効率的に処理する方法の１つの実施形態を示す汎用フロー図である。
【図１４】ストレージデバイス内のデータレイアウトアーキテクチャの実施形態を示す汎用ブロック図である。
【発明を実施するための形態】
【００１１】
本発明は様々な修正及び代替形態が可能であるが、図面には特定の実施形態を一例として示し、本明細書ではこれらについて詳細に説明する。しかしながら、図面及びその詳細な説明は、開示する特定の形態に本発明を限定することを意図するものではなく、むしろ添付の特許請求の範囲によって定められる本発明の思想及び範囲内にある全ての修正物、同等物及び代替物を含むことを意図するものであると理解されたい。
【００１２】
以下の説明では、本発明を完全に理解できるように数多くの具体的な詳細を示す。しかしながら、当業者であれば、これらの具体的な詳細を伴わずに本発明を実施できると認識すべきである。場合によっては、本発明を曖昧にしないように、周知の回路、構造、信号、コンピュータプログラム命令及び技術については詳細に示していないこともある。
【００１３】
図１を参照すると、ネットワークアーキテクチャ１００の１つの実施形態の汎用ブロック図を示している。後述するように、ネットワークアーキテクチャ１００の１つの実施形態は、ネットワーク１８０を介して互いに、及びデータストレージアレイ１２０ａ〜１２０ｂに相互接続されたクライアントコンピュータシステム１１０ａ〜１１０ｂを含む。ネットワーク１８０は、スイッチ１４０を介して第２のネットワーク１９０に結合することができる。このネットワーク１９０を介して、クライアントコンピュータシステム１１０ｃが、クライアントコンピュータシステム１１０ａ〜１１０ｂ及びデータストレージアレイ１２０ａ〜１２０ｂに結合される。また、ネットワーク１９０は、スイッチ１５０を介してインターネット１６０又はその他の外部ネットワークに結合することもできる。
【００１４】
なお、別の実施形態では、クライアントコンピュータ及びサーバ、スイッチ、ネットワーク、データストレージアレイ及びデータストレージデバイスの数及びタイプが図１に示すものに限定されない。１又はそれ以上のクライアントは、様々な時点でオフラインで動作することができる。また、動作中にユーザがネットワークアーキテクチャ１００への接続、切断及び再接続を行うと、個々のクライアントコンピュータの接続タイプが変化することもある。さらに、本明細書では、一般にネットワーク接続されたストレージについて説明するが、本明細書で説明するシステム及び方法は、直接的に接続されたストレージシステムに適用することもでき、説明する方法の１又はそれ以上の態様を実行するように構成されたホストオペレーティングシステムを含むこともできる。このような数多くの代替案が可能であり企図される。図１に示す構成要素の各々のさらなる説明を手短に行う。まず、データストレージアレイ１２０ａ〜１２０ｂにより提供される機能のいくつかの概要について説明する。
【００１５】
ネットワークアーキテクチャ１００では、データストレージアレイ１２０ａ〜１２０ｂの各々を、異なるサーバ及びクライアントコンピュータシステム１１０ａ〜１１０ｃなどのコンピュータ間におけるデータの共有に使用することができる。また、データストレージアレイ１２０ａ〜１２０ｂを、ディスクのミラーリング、バックアップ及び復元、保存データの保管及び検索、並びにストレージデバイス間のデータ移行に使用することもできる。別の実施形態では、クラスタを形成するために、１又はそれ以上のクライアントコンピュータシステム１１０ａ〜１１０ｃを、高速ローカルエリアネットワーク（ＬＡＮ）を介して互いにリンクさせることができる。このようなクライアントは、データストレージアレイ１２０ａ〜１２０ｂの１つに存在するクラスタ共有ボリュームなどのストレージリソースを共有することができる。
【００１６】
データストレージアレイ１２０ａ〜１２０ｂの各々は、データ記憶のためのストレージサブシステム１７０を含む。ストレージサブシステム１７０は、複数のストレージデバイス１７６ａ〜１７６ｍを含むことができる。これらのストレージデバイス１７６ａ〜１７６ｍは、クライアントコンピュータシステム１１０ａ〜１１０ｃにデータ記憶サービスを提供することができる。ストレージデバイス１７６ａ〜１７６ｍの各々は、特定の技術及び機構を使用してデータの記憶を行う。ストレージデバイス１７６ａ〜１７６ｍの各々で使用されるこの種の技術及び機構を少なくとも部分的に使用して、ストレージデバイス１７６ａ〜１７６ｍの各々との間の読み込み及び書き込み動作の制御及びスケジューリングを行うために使用するアルゴリズムを決定することができる。例えば、これらのアルゴリズムは、動作に対応する特定の物理的位置を特定することができる。また、これらのアルゴリズムは、動作のための入出力（Ｉ／Ｏ）リダイレクション、ストレージサブシステム１７０内の重複データの削除を行い、アドレスリダイレクション及び重複排除に使用する１又はそれ以上のマッピングテーブルをサポートすることもできる。
【００１７】
上記のアルゴリズムで使用されるロジックは、基本オペレーティングシステム（ＯＳ）１３２、ボリュームマネージャ１３４、ストレージサブシステムコントローラ１７４、各ストレージデバイス１７６ａ〜１７６ｍ内の制御ロジック、又はその他のうちの１つ又はそれ以上に含めることができる。また、本明細書で説明するロジック、アルゴリズム及び制御機構は、ハードウェア及び／又はソフトウェアを含むこともできる。
【００１８】
ストレージデバイス１７６ａ〜１７６ｍの各々は、読み込み及び書き込み要求を受け取るとともに、それぞれをアレイ内の行及び列としてアドレス指定可能な複数のデータ記憶位置を含むように構成することができる。１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｍ内のデータ記憶位置を、論理的で冗長なストレージコンテナ又はＲＡＩＤアレイ（低価格／独立ディスク冗長アレイ）の形で配置することができる。
【００１９】
いくつかの実施形態では、ストレージデバイス１７６ａ〜１７６ｍの各々が、従来のハードディスクドライブ（ＨＤＤ）とは異なる技術をデータ記憶に利用することができる。例えば、ストレージデバイス１７６ａ〜１７６ｍの１つ又はそれ以上は、永続データを記憶するための固体メモリから成るストレージを含み、又はこれにさらに結合することができる。他の実施形態では、ストレージデバイス１７６ａ〜１７６ｍの１つ又はそれ以上が、スピン注入法、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）法、瓦記録式ディスク（ｓｈｉｎｇｌｅｄ  ｄｉｓｋｓ）、メモリスタ、相変化メモリ、又はその他の記憶技術などの他の技術を使用するストレージを含み、又はこれにさらに結合することができる。これらの様々な記憶法及び記憶技術により、ストレージデバイス間で異なるＩ／Ｏ特性が生じ得る。
【００２０】
１つの実施形態では、含まれる固体メモリが固体ドライブ（ＳＳＤ）技術を含む。ＨＤＤ技術とＳＤＤ技術では技術及び機構が異なることにより、データストレージデバイス１７６ａ〜１７６ｍの入出力（Ｉ／Ｏ）特性に違いが生じることがある。固体ディスク（ＳＳＤ）は固体ドライブと呼ぶこともできる。ＳＳＤは、可動部品又は機械的遅延が無ければ、ＨＤＤよりも短い読み取りアクセス時間及びレイテンシを有することができる。しかしながら、ＳＳＤの書き込み性能は、一般に読み込み性能よりも遅く、ＳＳＤ内の未使用のプログラム可能なブロックの利用可能性によって大きく影響を受けることがある。
【００２１】
ユーザストレージと、ストレージデバイス１７６ａ〜１７６ｍ内の物理的位置との間にストレージ仮想化レイヤを形成することにより、ストレージアレイの効率を改善することができる。１つの実施形態では、ボリュームマネージャの仮想レイヤが、ストレージデバイス又はネットワーク内ではなく、オペレーティングシステム（ＯＳ）のデバイスドライバスタック内に配置される。多くのストレージアレイは、仮想−物理マッピングテーブル全体をメモリに記憶できるようにストレージ仮想化を粗粒度レベルで実行する。しかしながら、このようなストレージアレイは、データ圧縮、重複排除、及び修正時コピー（ｃｏｐｙ−ｏｎ−ｍｏｄｉｆｙ）動作などの機能を組み込むことができない。多くのファイルシステムは、細粒度の仮想−物理マッピングテーブルをサポートしてはいるものの、デバイスグループ１７３ａ〜１７３ｍなどの大規模ストレージアレイはサポートしていない。むしろ、デバイスグループ１７３ａ〜１７３のサポートには、ボリュームマネージャ又はディスクアレイマネージャが使用される。
【００２２】
１つの実施形態では、ＲＡＭ１７２、記憶媒体１３０、又はプロセッサ１２２内のキャッシュなどのメモリではなく、ストレージデバイス１７６ａ〜１７６ｍに１又はそれ以上のマッピングテーブルを記憶することができる。ストレージデバイス１７６ａ〜１７６は、フラッシュメモリを利用するＳＳＤとすることができる。ＳＳＤの短い読み取りアクセス時間及びレイテンシ時間により、クライアントコンピュータからのストレージアクセス要求への対処中に依存的読み込み動作が生じる回数を少なくすることができる。ストレージアクセス要求への対処中には、１又はそれ以上のインデックス、１又はそれ以上のマッピングテーブル及びユーザデータへのアクセスに依存的読み込み動作を使用することができる。
【００２３】
１つの例では、依存的読み込み動作によってＩ／Ｏリダイレクションを行うことができる。別の例では、依存的読み込み動作によってインライン重複排除を行うことができる。さらに別の例では、ユーザデータを保持する記憶位置にアクセスすることなく、大規模コピー、移動、ゼロ化動作などのバルクアレイタスクをもっぱらマッピングテーブル内で実行することができる。このような直接マップ操作により、ストレージデバイス１７６ａ〜１７６ｍ内のＩ／Ｏトラフィック及びデータの移動を大幅に減少させることができる。ＳＳＤからストレージアクセス要求に対処する時間と依存的読み込み動作を行う時間を組み合わせても、回転式ＨＤＤからストレージアクセス要求に対処する時間よりも短い場合がある。
【００２４】
また、マッピングテーブル内の情報は圧縮することもできる。個々の構成要素の識別を可能にするために、複数のレコードのうちのあるレコード内のキーなどの特定の圧縮アルゴリズムを選択することができる。従って、複数の圧縮されたレコードのうちの所与のキーの検索を行うことができる。様々な実施形態では、所与のキーの圧縮表現と、タプルの関連フィールドに記憶された圧縮情報とを比較することにより、各タプルを解凍することなくキーの検索を行うことができる。一致が見つかると、この一致するレコードのみを解凍することができる。マッピングテーブルのレコード内のタプルを圧縮することにより、細粒度レベルのマッピングをさらに可能にすることができる。この細粒度レベルのマッピングにより、一般的なバルクアレイタスクの代わりに直接マップ操作が可能なる。効率的なストレージ仮想化に関するさらなる詳細については後述する。
【００２５】
繰り返すが、図示のように、ネットワークアーキテクチャ１００は、ネットワーク１８０及び１９０を介して互いに及びデータストレージアレイ１２０ａ〜１２０ｂに相互接続されたクライアントコンピュータシステム１１０ａ〜１１０ｃを含む。ネットワーク１８０及び１９０は、無線接続、直接ローカルエリアネットワーク（ＬＡＮ）接続、インターネットなどの広域ネットワーク（ＷＡＮ）接続、ルータ、ストレージエリアネットワーク、イーサネット（登録商標）及びその他などを含む様々な技術を含むことができる。ネットワーク１８０及び１９０は、やはり無線とすることができる１又はそれ以上のＬＡＮを含むことができる。ネットワーク１８０及び１９０は、リモートダイレクトメモリアクセス（ＲＤＭＡ）ハードウェア及び／又はソフトウェア、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ハードウェア及び／又はソフトウェア、ルータ、リピータ、スイッチ、グリッド及び／又はその他などをさらに含むことができる。ネットワーク１８０及び１９０内では、ファイバチャネル、ファイバチャネルオーバーイーサネット（ＦＣｏＥ）及びｉＳＣＳＩなどのプロトコルを使用することができる。スイッチ１４０は、ネットワーク１８０及び１９０の両方に関連するプロトコルを利用することができる。ネットワーク１９０は、伝送制御プロトコル（ＴＣＰ）及びインターネットプロトコル（ＩＰ）、すなわちＴＣＰ／ＩＰなどの、インターネット１６０に使用される通信プロトコルの組と整合することができる。スイッチ１５０は、ＴＣＰ／ＩＰスイッチとすることができる。
【００２６】
クライアントコンピュータシステム１１０ａ〜１１０ｃは、デスクトップパソコン（ＰＣ）、サーバ、サーバファーム、ワークステーション、ラップトップ、ハンドヘルドコンピュータ、サーバ、携帯情報端末（ＰＤＡ）及びスマートフォンなどのあらゆる数の固定又はモバイルコンピュータを表す。一般的に言えば、クライアントコンピュータシステム１１０ａ〜１１０ｃは、１又はそれ以上のプロセッサコアを備えた１又はそれ以上のプロセッサを含む。各プロセッサコアは、所定の汎用命令セットに従って命令を実行するための回路を含む。例えば、ｘ８６命令セットアーキテクチャを選択することができる。或いは、Ａｌｐｈａ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、ＳＰＡＲＣ（登録商標）又はその他のいずれの汎用命令セットアーキテクチャを選択してもよい。プロセッサコアは、データ及びコンピュータプログラム命令を求めてキャッシュメモリサブシステムにアクセスすることができる。キャッシュサブシステムは、ランダムアクセスメモリ（ＲＡＭ）及びストレージデバイスを含む記憶階層に結合することができる。
【００２７】
クライアントコンピュータシステム内の各プロセッサコア及び記憶階層は、ネットワークインターフェイスに接続することができる。クライアントコンピュータシステム１１０ａ〜１１０ｃの各々は、ハードウェア構成要素に加え、記憶階層内に記憶された基本オペレーティングシステム（ＯＳ）を含むことができる。この基本ＯＳは、例えば、ＭＳ−ＤＯＳ（登録商標）、ＭＳ−ＷＩＮＤＯＷＳ（登録商標）、ＯＳ／２（登録商標）、ＵＮＩＸ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｓｏｌａｒｉｓ（登録商標）、ＡＩＸ（登録商標）、ＤＡＲＴ、又はその他などの様々なオペレーティングシステムのいずれかを表すことができる。従って、基本ＯＳは、エンドユーザに様々なサービスを提供するとともに、様々なプログラムの実行をサポートするソフトウェアフレームワークを提供することができる。また、クライアントコンピュータシステム１１０ａ〜１１０ｃの各々は、バーチャルマシン（ＶＭ）をサポートするために使用されるハイパーバイザを含むこともできる。当業者には周知のように、ＯＳなどのソフトウェアをシステムのハードウェアから完全に又は部分的に分離するには、デスクトップ及びサーバ内で仮想化を使用することができる。仮想化により、各々が独自のリソースを有するとともに、データストレージアレイ１２０ａ〜１２０ｂの各々におけるストレージデバイス１７６ａ〜１７６ｍ上に構築された（ＬＵＮなどの）論理記憶エンティティにアクセスできる複数のＯＳが同じ機械上で実行されているという錯覚をエンドユーザに与えることができる。
【００２８】
データストレージアレイ１２０ａ〜１２０ｂの各々は、クライアントコンピュータシステム１１０ａ〜１１０ｃなどの異なるサーバ間のデータの共有に使用することができる。データストレージアレイ１２０ａ〜１２０ｂの各々は、データを記憶するためのストレージサブシステム１７０を含む。ストレージサブシステム１７０は、複数のストレージデバイス１７６ａ〜１７６ｍを含むことができる。これらのストレージデバイス１７６ａ〜１７６ｍの各々はＳＳＤとすることができる。コントローラ１７４は、受け取った読み込み／書き込み要求を処理するためのロジックを含むことができる。受け取った書き込み要求などの動作のバッチ処理には、ランダムアクセスメモリ（ＲＡＭ）１７２を使用することができる。様々な実施形態では、書き込み動作（又はその他の動作）をバッチ処理する際に、（ＮＶＲＡＭなどの）不揮発性ストレージを使用することができる。
【００２９】
基本ＯＳ１３２、ボリュームマネージャ１３４（又はディスクアレイマネージャ１３４）、いずれかのＯＳドライバ（図示せず）、及び記憶媒体１３０に記憶されたその他のソフトウェアは、ファイル及びＬＵＮへのアクセスを可能にする機能を提供し、これらの機能を管理することができる。基本ＯＳ１３２は、ＮｅｔＡｐｐ  Ｄａｔａ  ＯＮＴＡＰ（登録商標）又はその他などのストレージオペレーティングシステムとすることができる。基本ＯＳ１３２及びＯＳドライバは、記憶媒体１３０上に記憶された、受け取った要求に対応する１又はそれ以上のメモリアクセス動作をストレージサブシステム１７０内で行うようにプロセッサ１２２により実行可能なプログラム命令を含むことができる。図１に示すシステムは、一般に１又はそれ以上のファイルサーバ及び／又はブロックサーバを含むことができる。
【００３０】
データストレージアレイ１２０ａ〜１２０ｂの各々は、ネットワークインターフェイス１２４を使用してネットワーク１８０に接続することができる。１つの実施形態では、クライアントコンピュータシステム１１０ａ〜１１０ｃと同様に、ネットワークインターフェイス１２４の機能をネットワークアダプタカード上に含めることができる。ネットワークインターフェイス１２４の機能は、ハードウェア及びソフトウェアの両方を使用して実装することができる。ネットワークインターフェイス１２４のネットワークカードによる実装には、ランダムアクセスメモリ（ＲＡＭ）及び読み取り専用メモリ（ＲＯＭ）の両方を含めることができる。１又はそれ以上の特定用途向け集積回路（ＡＳＩＣ）を使用してネットワークインターフェイス１２４の機能を提供することもできる。
【００３１】
上記の他に、データストレージアレイ１２０ａ〜１２０ｂ内のストレージコントローラ１７４の各々は、スナップショット、複製、及び高可用性などのストレージアレイ機能をサポートすることができる。また、ストレージコントローラ１７４の各々は、各々が複数のスナップショットを含む複数のボリュームを有するバーチャルマシン環境をサポートすることもできる。１つの例では、ストレージコントローラ１７４が、各々が数千枚のスナップショットを含む何十万ものボリュームをサポートすることができる。１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｍ内の４キロバイト（ＫＢ）のページなどの固定サイズのセクタ内にボリュームをマッピングすることができる。別の実施形態では、書き込み要求などのための可変サイズのセクタ内にボリュームをマッピングすることができる。所与のボリュームを識別するには、ボリュームＩＤ、スナップショットＩＤ及びセクタ番号を使用することができる。
【００３２】
アドレス変換テーブルは、対応するデータ構成要素の仮想−物理マッピングを各々が保持する複数のエントリを含むことができる。このマッピングテーブルを使用して、クライアントコンピュータシステム１１０ａ〜１１０ｃの各々からの論理読み込み／書き込み要求を、ストレージデバイス１７６ａ〜１７６ｍ内の物理的位置にマッピングすることができる。受け取った読み込み／書き込み要求に対応する検索動作中に、マッピングテーブルから「物理」ポインタ値を読み出すことができる。次に、この物理ポインタ値を使用して、ストレージデバイス１７６ａ〜１７６ｍ内の物理的位置を特定することができる。なお、この物理ポインタ値を使用して、ストレージデバイス１７６ａ〜１７６ｍのうちの所与のストレージデバイス内の別のマッピングテーブルにアクセスすることもできる。従って、物理ポインタ値と目的の記憶位置との間には、１又はそれ以上のレベルの間接的動作が存在することができる。
【００３３】
別の実施形態では、マッピングテーブルが、データの重複を排除するために使用する情報（重複排除テーブル関連情報）を含むことができる。重複排除テーブルに記憶される情報は、所与のデータ構成要素のための１又はそれ以上の計算されたハッシュ値と、ストレージデバイス１７６ａ〜１７６ｍのうちの１つにおける所与のデータ構成要素を保持する物理的位置への物理ポインタとの間のマッピングを含むことができる。また、重複排除テーブルには、所与のデータ構成要素の長さ及び対応するエントリのステータス情報を記憶することもできる。
【００３４】
ここで図２を参照すると、マッピングテーブルの１つの実施形態の汎用ブロック図を示している。上述したように、１又はそれ以上のマッピングテーブルは、Ｉ／Ｏリダイレクション又は変換、ユーザデータの複製の重複排除、ボリュームスナップショットマッピング、及びその他のために使用することができる。マッピングテーブルは、ストレージデバイス１７６ａ〜１７６ｍに記憶することができる。図２に示す図は、マッピングテーブルの構成及び記憶の１つの実施形態の論理表現を表す。図示の各レベルは、異なる期間に対応するマッピングテーブルエントリを含むことができる。例えば、レベル「１」は、レベル「２」に記憶されている情報よりも古い情報を含むことができる。同様に、レベル「２」は、レベル「３」に記憶されている情報よりも古い情報を含むことができる。図２に示すレコード、ページ及びレベルに記憶される情報は、ストレージデバイス１７６ａ〜１７６ｍ内にランダムアクセス方式で記憶することができる。また、所与のマッピングテーブルエントリの一部又は全部のコピーを、ＲＡＭ１７２、コントローラ１７４内のバッファ、記憶媒体１３０、及びプロセッサ１２２内の、又はプロセッサ１２２に結合された１又はそれ以上のキャッシュに記憶することもできる。様々な実施形態では、（後で図４に示すように）レベルの一部であるマッピングの各レベルに、対応するインデックスを含めることができる。このようなインデックスは、マッピングテーブルエントリについての、及びこれらのエントリがレベル内のどこに記憶されているかについての識別符号（例えば、ページの識別符号）を含むことができる。他の実施形態では、マッピングテーブルエントリに関連するインデックスを、論理的にレベル自体の一部ではない別個の１又は複数のエンティティとすることができる。
【００３５】
一般的に言えば、各マッピングテーブルは、一連の行及び列を含む。マッピングテーブルには、１つのレコードを行として記憶することができる。レコードは、エントリと呼ぶこともできる。１つの実施形態では、レコードが、キーを含む少なくとも１つのタプルを記憶する。タプルは、ストレージサブシステム１７０に記憶されたデータ構成要素の識別又は検索を行うために使用するポインタなどのデータを含むデータフィールドを含むこともできる（又は含まなくてもよい）。なお、様々な実施形態では、ストレージサブシステムが、内部マッピング機構を有するストレージデバイス（例えば、ＳＳＤ）を含むことができる。このような実施形態では、タプル内のポインタ自体が実際の物理アドレスでなくてもよい。むしろ、ポインタは、ストレージデバイスがデバイス内の物理的位置にマッピングする論理アドレスであってもよい。この論理アドレスと物理的位置との間の内部マッピングは、時間と共に変化することがある。他の実施形態では、マッピングテーブル内のレコードがキーフィールドのみを含み、その他のさらなる関連データフィールドを含まないこともある。テーブル内の列又はフィールドには、所与のレコードに対応するデータ構成要素に関連する属性を記憶することができる。図２に示すＦｉｅｌｄ０〜ＦｉｅｌｄＮなどのフィールドには、有効なインジケータ、データエイジ及びデータサイズなどのステータス情報を記憶することができる。様々な実施形態では、各列が、所与のタイプに対応する情報を記憶する。いくつかの実施形態では、選択したフィールドに圧縮技術を利用することができるが、場合によっては、そのフィールドの圧縮表現の長さがゼロビットになることもある。なお、以下の説明では、一般にマッピングテーブルをマッピングアドレス（仮想−物理アドレス）として説明するが、他の実施形態では、キーがファイル識別子又はオブジェクト識別子になるようにテーブル、方法及び機構を適用することもできる。例えば、このような実施形態では、システムをファイルサーバ又はオブジェクトサーバとして使用することができる。様々な実施形態では、本明細書で説明する方法及び機構を使用してブロック、オブジェクト及びファイルに対応し、これらの間の空間を動的に移動させることができる。このような数多くの実施形態が可能である。
【００３６】
キーとは、マッピングテーブル内の、データの１行を別の行と区別できるエンティティのことである。各行は、エントリ又はレコードと呼ぶこともできる。キーは、単一の列であることも、或いはレコードを識別するために使用される一群の列から成ることもできる。いくつかの実施形態では、キーが、単一の値ではなく値の範囲に対応することができる。例えば、範囲に対応するキーは、範囲の始点及び終点として、又は始点及び長さとして、又はその他の方法で表すことができる。また、キーに対応する範囲は、範囲又は個々の値を含む他のキーのいずれかと重複することがある。１つの例では、アドレス変換マッピングテーブルが、ボリューム識別子（ＩＤ）、論理アドレス又は仮想アドレスなどのアドレス、スナップショットＩＤ及びセクタ番号などを含むキーを利用することができる。受け取った所与の読み込み／書き込みストレージアクセス要求は、特定のボリューム、セクタ及び長さを識別することができる。セクタは、ボリュームに記憶されたデータの論理ブロックとすることができる。セクタは、異なるボリューム上では異なるサイズを有することができる。アドレス変換マッピングテーブルは、ボリュームをセクタサイズ単位でマッピングすることができる。
【００３７】
ボリューム識別子（ＩＤ）は、ボリュームＩＤ及び対応する現在のスナップショットＩＤを搬送するボリュームテーブルにアクセスするために使用することができる。この情報及び受け取ったセクタ番号を使用して、アドレス変換マッピングテーブルにアクセスすることができる。従って、このような実施形態では、ボリュームＩＤ、スナップショットＩＤ及び受け取ったセクタ番号の組み合わせが、アドレス変換マッピングテーブルにアクセスするためのキー値となる。１つの実施形態では、アドレス変換マッピングテーブル内のレコードがボリュームＩＤによってソートされた後に、セクタ番号、そしてスナップショットＩＤによってソートされる。この順序付けにより、異なるスナップショット内の異なるバージョンのデータ構成要素を共にグループ化することができる。従って、ストレージアクセス読み込み要求の検索中には、ストレージデバイス１７６ａ〜１７６ｍに対する読み込み動作を少なくして、対応するデータ構成要素を見つけることができる。
【００３８】
アドレス変換マッピングテーブルは、データストレージサブシステム１７０内の受け取ったデータストレージアクセス要求に対応するデータ構成要素を記憶する位置を示す物理ポインタ値を搬送することができる。キー値は、マッピングテーブルに記憶された１又はそれ以上のキー値と比較することができる。説明を容易にするために、図示の例では「０」、「２」及び「１２」などの単純なキー値を示している。この物理ポインタ値は、対応するレコード内のフィールドの１つ又はそれ以上に記憶することができる。
【００３９】
物理ポインタ値は、セグメント識別子（ＩＤ）、及び記憶位置を識別する物理アドレスを含むことができる。セグメントは、ストレージデバイス１７６ａ〜１７６ｍの各々における基本割り当て単位とすることができる。セグメントは、独立装置による冗長アレイ（ＲＡＩＤ）レベル及びデータタイプを有することができる。割り当て中、セグメントは、対応する記憶のために選択されたストレージデバイス１７６ａ〜１７６ｍの１つ又はそれ以上を有することができる。１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｍのうちの１又はそれ以上の選択されたストレージデバイスの各々において、セグメントに等量の記憶スペースを割り当てることができる。データストレージアクセス要求は複数のセクタに対応することができ、これにより複数の平行検索を行えるようになる。書き込み要求は、ＲＡＭ１７２などのＮＶＲＡＭバッファに入れることができ、クライアントコンピュータ１１０ａ〜１１０ｃのうちの対応するクライアントコンピュータに書き込み完了確認応答を送信することができる。その後、非同期処理により、バッファされた書き込み要求をストレージデバイス１７６ａ〜１７６ｍにフラッシュすることができる。
【００４０】
別の例では、図２に示すマッピングテーブルを重複排除テーブルとすることができる。重複排除テーブルは、ストレージアクセス要求に関連するデータ構成要素から求めたハッシュ値を含むキーを利用することができる。重複排除動作の最初のステップは、読み込み／書き込み要求、ガーベージコレクション動作及びトリミング動作などの他の動作と同時に行うことができる。所与の書き込み要求では、クライアントコンピュータシステム１１０ａ〜１１０ｃの１つから送信されたデータが、バイトストリームなどのデータストリームの場合がある。当業者には周知のように、データストリームは、一連の固定長又は可変長のチャンクに分割することができる。チャンクアルゴリズムは、データストリームを、「チャンク」と呼ぶことができる別個のデータ構成要素に分割することができる。チャンクは、データのサブファイル内容アドレス可能単位とすることができる。様々な実施形態では、テーブル又はその他の構造を用いて、所与のファイルタイプ又はデータタイプに使用すべき特定のチャンクアルゴリズムを決定することができる。ファイルタイプは、そのファイル名拡張子、個別識別情報、データ自体の内容、又はその他を参照することにより判断することができる。その後、結果として得られたチャンクを共有できるように、これらのチャンクをデータストレージアレイ１２０ａ〜１２０ｂの１つに記憶することができる。このようなチャンクは、様々な方法で別個に記憶することも、又は共にグループ化することもできる。
【００４１】
様々な実施形態では、チャンクからより大きなデータ構成要素の再構築を可能にするデータ構造によってチャンクを表すことができる（例えば、記憶したデータの１又はそれ以上のより小さなチャンクに基づいて特定のファイルを再構築することができる）。対応するデータ構造は、関連する計算したハッシュ値、データストレージアレイ１２０ａ〜１２０ｂの１つにおけるその位置への（物理及び／又は論理）ポインタ、及びその長さを含む対応するチャンクを記録することができる。各データ構成要素に関し、重複排除アプリケーションを使用して対応するハッシュ値を計算することができる。例えば、Ｍｅｓｓａｇｅ−Ｄｉｇｅｓｔ  ａｌｇｏｒｉｔｈｍ  ５（ＭＤ５）、Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ（ＳＨＡ）、又はその他などのハッシュ関数を用いて対応するハッシュ値を計算することができる。受け取った書き込み要求に対応する所与のデータ構成要素が、データストレージアレイ１２０ａ〜１２０ｂの１つに既に記憶されているかどうかを知るために、所与のデータ構成要素の計算したハッシュ値のビット（又はハッシュ値のビットの一部）を、データストレージアレイ１２０ａ〜１２０ｂの１つ又はそれ以上に記憶されたデータ構成要素のハッシュ値内のビットと比較することができる。
【００４２】
マッピングテーブルは、図２に示すような１又はそれ以上のレベルを含むことができる。マッピングテーブルは１６〜６４のレベルを含むことができるが、マッピングテーブル内で別の数のレベルをサポートすることも可能であり企図される。図２には、説明を容易にするために、レベル「１」、レベル「２」、及びレベル「Ｎ」で表す３つのレベルを示している。マッピングテーブル内の各レベルは、１又はそれ以上のパーティションを含むことができる。１つの実施形態では、各パーティションが４キロバイト（ＫＢ）のページである。例えば、図示のように、レベル「Ｎ」はページ２１０ａ〜２１０ｇを含み、レベル「２」はページ２１０ｈ〜２１０ｊを含み、レベル「１」はページ２１０ｋ〜２１０ｎを含む。マッピングテーブル内のレベルの各々について他のパーティションサイズを選択することも可能である。また、１又はそれ以上のレベルが、そのレベル自体である単一のパーティションを有することも可能である。
【００４３】
１つの実施形態では、マッピングテーブル内の複数のレベルが時間によってソートされる。例えば、図２では、レベル「１」をレベル「２」よりも古いものとすることができる。同様に、レベル「２」を「レベル「Ｎ」よりも古いものとすることができる。１つの実施形態では、マッピングテーブルに１又はそれ以上の新規レコードを挿入する条件が検出された時に、新たなレベルを作成することができる。様々な実施形態では、新たなレベルを作成する場合、この新たなレベルに与えられる数字／表示は、この新たなレベルよりも時間的に先行するレベルに与えられる数字よりも大きい。例えば、直近に作成されたレベルに８という値が割り当てられている場合、新たに作成されるレベルには９という値を割り当てることができる。このようにして、レベル間の時間的関係を確立又は決定することができる。理解できるように、数値は厳密に連続する必要はない。また、別の実施形態では、新たなレベルの方が小さな数字表示を有するように番号付けスキームを逆にすることもできる。さらに、他の実施形態では、非数値的表示を利用してレベル同士を区別することができる。このような数多くの実施形態が可能であり企図される。各２番目に古いレベルは、前の若いレベルのラベル整数値から１だけ減分したラベルを有する。図示していない別個のテーブルを用いてマッピングテーブルを論理的に記述することもできる。例えば、この別個テーブルの各エントリは、所与のレベルＩＤ、及びこの所与のレベルＩＤに記憶されたページＩＤのリストを含むことができる。
【００４４】
新規レコードを挿入するための新たな最上位レベルを作成することにより、マッピングテーブルは新規レコードを加えることにより更新される。１つの実施形態では、１つのレベルを新たな最上位レベルとして作成し、この１つのレベルに新規レコードの各々を挿入する。別の実施形態では、マッピングテーブルに挿入する前に、重複キーを探して新規レコードを検索することができる。１つのレベルを新たな最上位レベルとして作成することができる。重複キーを記憶した所与のレコードが見つかった場合、この所与のレコードよりも前にバッファされたレコードの各々を１つのレベルに挿入することができる。新規レコードは、順次的な要求の完了などのメモリ順を維持するようにバッファすることができる。その後、重複キーを記憶した別のレコードが見つからない限り、別の１つのレベルを作成し、この別の１つのレベルに新規レコードの残りを挿入することができる。このようなレコードが見つかった場合にはこれらのステップを繰り返す。新規レコードの挿入により、マッピングテーブル内の新規レコードの１つと同じキー値を記憶している既存のレコードがインプレースで編集又は上書きされることはない。
【００４５】
下位レベルが新たなレベルよりも大きくなるとレベルのサイズが増えるように示しているが、上位レベルが隣接レベルよりも大きくなったり又は小さくなったりを繰り返すこともある。マッピングテーブルに挿入される新規レコードの数は時間と共に変化し、流動的なレベルサイズを形成することができる。下位レベルが平坦化されることにより、下位レベルの方が新たなレベルより大きくなることもある。特定の条件が検出された場合、２又はそれ以上の下位レベルを単一レベルに平坦化することができる。さらなる詳細については後述する。
【００４６】
マッピングテーブルに記憶されているレコードのインプレース編集が行われない状況では、上位レベルに配置された新たなレコードが、下位レベルに配置された同じキー値を記憶しているレコードを上書きすることがある。例えば、所与のキー値がマッピングテーブルにアクセスした場合、この所与のキー値に一致するキー値を保持するレコードを記憶した１又はそれ以上のレベルが見つかることがある。このような場合には、これらの１又はそれ以上のレベルのうちの最も上位のレベルを選択して、対応するレコードに記憶されている情報をアクセスの結果として提供することができる。さらなる詳細については後述する。また、１又はそれ以上の新規レコードをマッピングテーブルに挿入するための検出される条件及び情報の記憶に関するさらなる詳細についても後述する。
【００４７】
１つの実施形態では、所与のページ内のエントリをキー別にソートすることができる。例えば、エントリに含まれるキーに従ってエントリを昇順でソートすることができる。また、様々な実施形態では、あらゆる所望のソート順に従ってレベル内のページをソートすることもできる。様々な実施形態では、（例えば、キー値又はその他に従って）レベル内のページをソートすることもできる。図２の例では、レベルＮのページ２１０ａが、キー値に従って昇順でソートされたレコードを含む。様々な実施形態では、１又はそれ以上の列を用いてキー値を記憶することができる。図２の例では、各タプル内に、キー値を記憶するための２つの列又はフィールドを示している。このようなキー値を利用すれば、レコードを所望の順序でソートすることができる。ソートは、レコードのキー値のいずれか、又はレコードのキー値のいずれかの組み合わせに基づいて行うことができる。図示の例では、最初のレコードが、２つの列に記憶された０及び８を含むキー値を記憶し、最後のレコードが、１２及び３３を含むキー値を記憶している。この図示の例では、ページ２１０ａ内の最初のレコードと最後のレコードの間の各ソートされたレコードが、最初の列に０〜１２までのキー値を記憶し、これらのレコードは、この最初の列に（少なくとも部分的に）基づいて、キー値を０〜１２までの昇順で記憶するように配置されている。同様に、ページ２１０ｂに含まれるソートされたレコードでは、最初のレコードがキー値１２及び３９を記憶し、最後のレコードがキー値３１及び１９を記憶している。この図示の例では、ページ２１０ｂ内の最初のレコードと最後のレコードの間の各ソートされたレコードが、最初の列に１２〜３１までのキー値を記憶し、これらのレコードは、キー値を１２〜３１までの昇順で記憶するように配置されている。
【００４８】
上記の他に、レベルＮ内のページも所望の順序に従ってソートされる。様々な実施形態では、レベル内のページを、ページ内のエントリのソート順を反映するようにソートすることができる。例えば、レベル内のページをキー値に従って昇順でソートすることができる。ページ２１０ａ内の最後のキー値よりもページ２１０ｂ内の最初のキー値の方が大きいので、このソート順では、ページ２１０ｂがページ２１０ａに後続する。従って、ページ２１０ｇは、ページ２１０ａ〜２１０ｆ（図示せず）に含まれるキー値よりも大きなキー値を有するエントリを含む。このようにして、レベル内の全てのエントリが共通スキームに従ってソートされる。これらのエントリは、ページ又はその他のサイズ単位に単純に細分化される。理解できるように、望み通りに他のソートスキームを使用することもできる。
【００４９】
ここで図３Ａを参照すると、マッピングテーブルへのアクセスに使用する一次インデックスの１つの実施形態の汎用ブロック図を示している。キージェネレータ３０４は、１又はそれ以上の要求者データ入力３０２を受け取ることができる。１つの実施形態では、マッピングテーブルがアドレス変換ディレクトリテーブルである。所与の受け取った読み込み／書き込み要求は、特定のボリューム、セクタ及び長さを識別することができる。キージェネレータ３０４は、ボリューム識別子（ＩＤ）、論理又は仮想アドレス、スナップショップＩＤ及びセクタ番号を含むクエリキー値３０６を生成することができる。他の組み合わせも可能であり、その他の又はさらなる値を使用することもできる。クエリキー値３０６の様々な部分を、マッピングテーブル内の連続していても又はしていなくてもよい列に記憶された値と比較することができる。図示の例では、説明を容易にするためにキー値「２２」を使用する。
【００５０】
上述したように、キージェネレータ３０４に関連するチャンクアルゴリズム及び／又はセグメント化アルゴリズムの両方により、ストレージアクセス要求に対応するデータ３０２を受け取ることができる。これらのアルゴリズムは、１又はそれ以上のデータ構成要素を生成し、このデータ構成要素毎に対応するハッシュ値又はクエリキー値３０６を計算するためのハッシュ関数を選択することができる。結果として得られるハッシュ値を用いて、重複排除テーブルにインデックスを付けることができる。
【００５１】
図３Ａに示すように、一次インデックス３１０は、ストレージデバイス１７６ａ〜１７６ｍに記憶されているデータの位置識別情報を提供することができる。例えば、再び図２を参照して、レベル「１」、レベル「２」及びレベル「Ｎ」の各々に、対応する一次インデックス３１０（又はこの一部）を論理的に含めることができる。この場合も、各レベル及び対応する各一次インデックスをストレージデバイス１７６ａ〜１７６ｍにランダムアクセス方式で物理的に記憶することができる。
【００５２】
１つの実施形態では、一次インデックス３１０をパーティション３１２ａ〜３１２ｂなどのパーティションに分割することができる。１つの実施形態では、パーティションのサイズが４キロバイト（ＫＢ）のページから２５６ＫＢに及ぶことができるが、他のサイズも可能であり企図される。一次インデックス３１０の各エントリはキー値を記憶することができる。また、各エントリは、対応する一意の仮想ページ識別子（ＩＤ）及びキー値に対応するレベルＩＤを記憶することもできる。各エントリは、妥当性情報などの対応するステータス情報を記憶することができる。クエリキー値を用いて一次インデックス３１０にアクセスした場合、キー値に一致又は別様に対応する１又はそれ以上のエントリを求めてインデックス３１０内のエントリを検索することができる。次に、一致するエントリからの情報を使用して、受け取った読み込み又は書き込み要求の対象である記憶位置を識別するマッピングを見つけて取り出すことができる。換言すれば、インデックス３１０はマッピングの位置を識別する。１つの実施形態では、インデックス内でヒットした場合、ストレージデバイス１７６ａ〜１７６ｍ内の、キー値及び対応する物理ポインタ値の両方を記憶しているページを識別する対応するページＩＤが提供される。この対応するページＩＤにより識別されるページをキー値によって検索し、物理ポインタ値を見つけることができる。
【００５３】
図３Ａの例では、受け取った要求がキー「２２」に対応する。従って、このキーを用いてインデックス３１０にアクセスする。インデックス３１０を検索すると、パーティション３１２ｂ内のエントリがヒットする。この場合の一致するエントリは、ページ２８及びレベル３などの情報を含む。この結果に基づいて、マッピングテーブルのレベル３内のページ２８として識別されるページ内で、要求に望ましいマッピングが見つかる。次に、この情報を使用してマッピングテーブルへのアクセスを行い、所望のマッピングを取得することができる。一次インデックス３１０へのアクセスがストレージへのアクセスを必要とする場合、所望のマッピングを取得するために少なくとも２回のストレージアクセスが必要になる。従って、上述したような様々な実施形態では、ストレージデバイスへの１回のアクセスを省略するために、一次インデックスの一部をキャッシュし、或いは比較的高速なアクセスメモリに別様に記憶する。様々な実施形態では、マッピングテーブルの一次インデックス全体をキャッシュする。いくつかの実施形態では、一次インデックスが、その全体をキャッシュするには大きくなりすぎ、又は望むよりも別様に大きくなる場合、キャッシュ内で二次、三次又はその他のインデックス部分を用いてサイズを低減することができる。二次タイプのインデックスについては後述する。上記の他に、様々な実施形態では、最新のヒットに対応するマッピングページも、少なくとも一定期間にわたってキャッシュされる。このようにして、一時的局所性を有するアクセスを示す処理に対し、より迅速に対処することができる（すなわち、最近アクセスされた位置については、そのマッピングがキャッシュされ容易に利用可能となる）。
【００５４】
ここで図３Ｂを参照すると、マッピングテーブルにアクセスするために使用するキャッシュされた一次インデックスの１つの実施形態の汎用ブロック図を示している。図３Ａの回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。キャッシュされた一次インデックス３１４は、一次インデックス３１０の各々に記憶されている、マッピングテーブル内の複数のレベルの情報のコピーを含むことができる。一次インデックス３１４は、ＲＡＭ１７２、コントローラ１７４内のバッファ、記憶媒体１３０及びプロセッサ１２２内のキャッシュのうちの１つ又はそれ以上に記憶することができる。１つの実施形態では、一次インデックス３１４をキー値によってソートすることができるが、その他のソートも可能である。一次インデックス３１４は、パーティション３１６ａ〜３１６ｂなどのパーティションに分割することもできる。１つの実施形態では、パーティション３１６ａ〜３１６ｂが、一次インデックス３１０内のパーティション３１２ａ〜３１２ｂと同じサイズを有することができる。
【００５５】
一次インデックス３１０と同様に、一次インデックス３１４の各エントリも、キー値、対応する一意の仮想ページ識別子（ＩＤ）、キー値に対応するレベルＩＤ、妥当性情報などのステータス情報のうちの１つ又はそれ以上を記憶することができる。一次インデックス３１４は、クエリキー値３０６によってアクセスされた場合、ストレージデバイス１７６ａ〜１７６ｍ内の、キー値及び対応するポインタ値の両方を記憶しているページを識別する対応するページＩＤを搬送することができる。この対応するページＩＤにより識別されるページをキー値によって検索し、ポインタ値を見つけることができる。図示のように、一次インデックス３１４は、同じキー値を記憶している複数のレコードを有することができる。従って、所与のキー値の検索から複数のヒットが得られることがある。１つの実施形態では、レベルＩＤの値が最も高いヒットを選択することができる（或いは最も若いレベル又は最新のエントリを識別するためにあらゆるインジケータが使用される）。この複数のヒットから１つのヒットを選択することは、ここに示していないマージロジックによって行うことができる。マージロジックのさらなる説明については後述する。
【００５６】
ここで図４を参照すると、マッピングテーブル、及びマッピングテーブルへのアクセスに使用する一次インデックスの別の実施形態の汎用ブロック図を示している。図３Ａの回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。マッピングテーブル３４０は、図２に示すマッピングテーブルと同様の構造を有することができる。しかしながら、対応する一次インデックス３１０のレベル毎の記憶については図示していない。一次インデックス部分３１０ａ〜３１０ｉの１又はそれ以上のコピーは、インデックスコピー３３０（例えば、キャッシュされたコピー）に含めることができる。一般に、コピー３３０は、図３Ｂに示すキャッシュされたインデックスに対応することができる。インデックスコピー３３０内の情報は、ＲＡＭ１７２、コントローラ１７４内のバッファ、記憶媒体１３０、及びプロセッサ１２２内のキャッシュに記憶することができる。図示の実施形態では、一次インデックス３１０ａ〜３１０ｉ内の情報を、マッピングのページと共にストレージデバイス１７６ａ〜１７６ｍに記憶することができる。図示の一次インデックス３１０ｉなどの一次インデックスへのアクセスに使用できる二次インデックス３２０も示している。同様に、マッピングテーブル３４０へのアクセス及びその更新も、上述したように行うことができる。
【００５７】
マッピングテーブル３４０は、レベル「１」〜レベル「Ｎ」などの複数のレベルを含む。図示の例では、レベルの各々が複数のページを含む。図示のように、レベル「Ｎ」は、ページ「０」〜「Ｄ」を含み、レベルＮ−１は、ページ「Ｅ」〜「Ｇ」を含み、以下同様である。この場合も、マッピングテーブル３１０内のレベルを時間別にソートすることができる。レベル「Ｎ」は、レベル「Ｎ−１」よりも若いものとすることができ、以下同様である。マッピングテーブル３４０には、少なくともキー値によってアクセスすることができる。図示の例では、マッピングテーブル３４０が、キー値「２７」及びページＩＤ「３２」によってアクセスされる。例えば、１つの実施形態では、レベルＩＤ「８」を使用して、検索すべきマッピングテーブル３４０の特定のレベル（又は「サブテーブル」）を識別することができる。所望のサブテーブルを識別し終えると、ページＩＤを使用してサブテーブル内の所望のページを識別することができる。最後に、キーを使用して所望のページ内の所望のエントリを識別することができる。
【００５８】
上述したように、キャッシュされたインデックス３３０にアクセスすると複数のヒットが得られることがある。１つの実施形態では、これらの複数のヒットの結果をマージロジック３５０に提供し、このマージロジック３５０が、どのヒットを使用してマッピングテーブル３４０にアクセスするかを識別する。マージロジック３５０は、ストレージコントローラに含まれるハードウェア及び／又はソフトウェアを表すことができる。１つの実施形態では、マージロジック３５０が、直近の（最新の）マッピングに対応するヒットを識別するように構成される。このような識別は、エントリの対応するレベルの識別又はその他に基づくことができる。図示の例では、レベル８、ページ３２、キー２７に対応するクエリが受け取られる。このクエリに応答して、レベル８のページ３２がアクセスを受ける。ページ３２内でキー２７が見つかった（ヒットした）場合、対応する結果が戻される（図示の例ではポインタｘＦ３２０９Ｂ２４）。ページ３２内でキー２７が見つからなかった場合、ミスインジケーションが戻される。この物理ポインタ値をマッピングテーブル３４０から出力して、キー値「２７」に対応するストレージアクセス要求に対処することができる。
【００５９】
１つの実施形態では、マッピングテーブル３４０がインラインマッピングをサポートする。例えば、十分に小さなターゲットを有することが検出されたマッピングは、ストレージデバイス１７６ａ〜１７６ｍ内にユーザデータを記憶している実際の物理セクタを伴わずに表すことができる。一例として、ユーザデータ内の反復パターンを挙げることができる。対応するマッピングは、反復パターン（例えば、一連のゼロ）の複数のコピーをストレージデバイス１７６ａ〜１７６ｍにユーザデータとして実際に記憶するのではなく、マッピングテーブル内のフィールド０〜フィールドＮのフィールドのうちの１つなどのステータス情報内でマーク付けされた、読み込み要求に対してどのデータ値を戻すべきかを示すインジケーションを有することができる。しかしながら、ストレージデバイス１７６ａ〜１７６ｍ内の対象の位置には、このユーザデータは実際に記憶されていない。また、一次インデックス３１０及び使用できるあらゆる追加のインデックス（ここには図示せず）のステータス情報内にインジケーションを記憶することもできる。
【００６０】
上記の他に、様々な実施形態では、ストレージシステムが、複数のバージョンのデータ構成、ストレージスキーム及びその他を同時にサポートすることができる。例えば、システムのハードウェア及びソフトウェアが進化するにつれ、新たな機能が組み込まれ又は別様に提供されることがある。新しいデータ、インデックス及びマッピング（例えば）は、これらの新たな機能を活用することができる。図４の例では、新たなレベルＮがシステムの１つのバージョンに対応し、それよりも古いレベルＮ−１が以前のバージョンに対応することができる。これらの異なるバージョンに対応するために、このレベルによってどのバージョン、どの機能及び圧縮スキームなどが使用されるかを示すメタデータを各レベルに関連付けて記憶することができる。このメタデータは、インデックスの一部として、ページ自体として、又はこれらの両方として記憶することができる。アクセスが行われると、このメタデータは、いかにしてデータを正しく処理すべきかを示す。また、システムを休止させる必要なく、新たなスキーム及び機能を動的に適用することもできる。このようにして、システム更新の柔軟性を高め、新たなスキーム及び方法を反映するために古いデータを再構築する必要性をなくす。
【００６１】
ここで図５Ａを参照すると、読み取りアクセスに対処する方法の１つの実施形態を示している。ネットワークアーキテクチャ１００内に具体化される構成要素及び上述したマッピングテーブル３４０は、一般に方法５００に従って動作することができる。本実施形態のステップは、説明目的で順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【００６２】
クライアント１１０ａ〜１１０ｃの１つからデータストレージアレイ１２０ａ〜１２０ｂの１つに、読み込み及び記憶（書き込み）要求を搬送することができる。図示の例では、読み込み要求５００を受け取り、ブロック５０２において対応するクエリキー値を生成することができる。いくつかの実施形態では、この要求自体がインデックスへのアクセスに使用するキーを含むことができ、キーの「生成」５０２が不要である。上述したように、クエリキー値は、ボリュームＩＤ、受け取った要求に関連する論理アドレス又は仮想アドレス、スナップショットＩＤ及びセクタ番号などを含む仮想アドレスインデックスとすることができる。重複排除のために使用される実施形態では、ハッシュ関数又はその他の関数を用いてクエリキー値を生成することができる。マッピングテーブルへのアクセスに使用されるクエリキー値には他の値も可能である。
【００６３】
ブロック５０４において、このクエリキー値を用いて、１又はそれ以上のキャッシュされたインデックスにアクセスし、キー値に対応するマッピングを記憶している可能性のあるマッピングテーブルの１又はそれ以上の部分を識別することができる。また、最近使用したキャッシュされているマッピングを検索することもできる。キャッシュされているマッピングのヒットが検出された場合（ブロック５０５）、このキャッシュされているマッピングを使用して、要求されたアクセスを実行することができる（ブロック５１２）。キャッシュされているマッピングのヒットがなかった場合、キャッシュされているインデックスのヒットがあるか否かを判定することができる（ブロック５０６）。ヒットがあった場合、このヒットに対応する結果を使用してマッピングテーブルを識別し、これにアクセスすることができる（ブロック５０８）。例えば、一次インデックス３１０では、クエリキー値を記憶しているエントリが、マッピングテーブル内の単一の特定のページを識別する一意の仮想ページＩＤを記憶していることもある。この単一の特定のページは、クエリキー値及び関連する物理ポインタ値の両方を記憶することができる。ブロック５０８において、マッピングテーブルの識別された部分にアクセスし、クエリキー値を使用して検索を行うことができる。これにより、マッピングテーブルの結果が戻され（ブロック５１０）、これを使用して元々の読み込み要求のターゲット位置に対応するストレージアクセスを行うことができる（ブロック５１２）。
【００６４】
いくつかの実施形態では、読み込み要求に応答するインデックスクエリがミスを生じることがある。このようなミスは、インデックスの一部しかキャッシュされていないこと、又はエラー状態（例えば、存在しない位置への読み取りアクセス、アドレス破損など）に起因して生じ得る。このような場合、記憶されているインデックスへのアクセスを行うことができる。記憶されているインデックスへのアクセスによりヒットが生じた場合（ブロック５２０）には結果が戻され（ブロック５２２）、これを使用してマッピングテーブルにアクセスする（ブロック５０８）。一方、記憶されているインデックスへのアクセスによりミスが生じた場合、エラー状態を検出することができる。エラー状態の処理は、様々な所望の方法のいずれかで行うことができる。１つの実施形態では、例外が生じることがあり（ブロック５２４）、その後この例外は要望通りに処理される。１つの実施形態では、ブロック５１０においてマッピングテーブルの一部が戻される。様々な実施形態では、この部分が、４ＫＢのページ又はその他とすることができるページである。上述したように、ページ内のレコードは、含まれている内容をより高速に検索できるようにソートすることができる。
【００６５】
１つの実施形態では、マッピングテーブルが、各ページに情報を記憶するために従来のデータベースシステム法を利用する。例えば、マッピングテーブル内の各レコード（或いは行又はエントリ）を次々に記憶する。この方法は、行指向データベース又は行記憶データベースにおいて、さらには相関データベースと共に使用することができる。これらのタイプのデータベースは、値に基づく記憶構造を利用する。値に基づく記憶（ＶＢＳ）アーキテクチャは、一意のデータ値を１度だけ記憶し、自動生成されたインデックスシステムが全ての値のコンテキストを保持する。様々な実施形態では、データを行毎に記憶することができ、行内の列（フィールド）に対して圧縮を使用することができる。いくつかの実施形態では、使用する技術が、基準値を記憶してオフセットのための小さなフィールドサイズを有すること、及び／又は基準値の組を有することを含み、行内の列は、基準セレクタ及びこの基準からのオフセットで構成される。いずれの場合にも、パーティション内（例えば、その先頭）に圧縮情報を記憶することができる。
【００６６】
いくつかの実施形態では、マッピングテーブルが、各ページに情報を記憶するために列指向データベースシステム（列記憶）法を利用する。列記憶では、各データベーステーブル列が別個に記憶される。また、同じ列に属する属性値を連続して記憶し、圧縮し、高密度に詰め込むことができる。従って、ページ内などのテーブルの列の一部を比較的素早く読み込むことができる。列データは一様なタイプとすることができ、行指向データでは利用できないことがある記憶サイズ最適化を使用することができる。Ｌｅｍｐｅｌ−Ｚｉｖ−Ｗｅｌｃｈ（ＬＺ）及びランレングス符号化（ＲＬＥ）などの圧縮スキームには、圧縮すべき隣接データの検出された類似性を活用するものもある。さらに、以下でより完全に説明するように、他の圧縮スキームでは、値を基準値との差分として符号化することができ、従ってこの差分を表すために必要なビット数は、完全な値を表すために必要なビット数よりも少なくて済む。ページ内の個々のレコードを識別してインデックスを付ける圧縮アルゴリズムを選択することができる。マッピングテーブル内のレコードを圧縮すると、細粒度のマッピングが可能になる。様々な実施形態では、特定のデータ部分に使用する圧縮のタイプを、そのデータに関連付けて記憶することができる。例えば、圧縮のタイプを、圧縮されるデータと同じページの一部（例えば、何らかのタイプのヘッダ内に）又はその他としてインデックスに記憶することができる。このようにして、ストレージシステム内で複数の圧縮技術及びアルゴリズムを並行して使用することができる。また、様々な実施形態では、データを記憶する際に、ページデータを記憶するために使用する圧縮のタイプを動的に決定することもできる。１つの実施形態では、圧縮されるデータの性質及びタイプ、及び／又は圧縮技術の予想リソース要件、及びシステム内の現在利用できるリソースに少なくとも部分的に基づいて、様々な圧縮技術の１つを選択することができる。いくつかの実施形態では、複数の圧縮技術を実行した後に、最良の圧縮を示す技術を選択してデータの圧縮に使用する。このような数多くの方法が可能である。
【００６７】
マッピングテーブルのレベルのいずれかにおいてクエリキー値３０６の一致が見つかった場合（ブロック５０８）、ブロック５１０において、マージロジック３５０にヒットについての１又はそれ以上のインジケーションを搬送することができる。例えば、図４に示すように、レベル「１」からレベル「Ｊ」に１又はそれ以上のヒットインジケーションを搬送することができる。マージロジック３５０は、ヒットインジケーションを搬送するレベル「１」から「Ｊ」のうちの最も若いレベルでもある最上位レベルを選択することができる。選択されたレベルは、対応するレコードに記憶された情報をアクセスの結果として提供することができる。
【００６８】
ブロック５１２において、選択されたページの一致するレコード内の１又はそれ以上の対応するフィールドを読み込んで対応する要求を処理することができる。１つの実施形態では、ページ内のデータが圧縮フォーマットで記憶されている場合、このページを解凍して対応する物理ポインタ値を読み出す。別の実施形態では、一致するレコードのみを解凍して対応する物理ポインタ値を読み出す。１つの実施形態では、物理ポインタ値全体を、マッピングテーブルと、対応するターゲットの物理的位置とに分割することができる。従って、ユーザデータを記憶している複数の物理的位置にアクセスしてデータストレージアクセス要求を完了することができる。
【００６９】
ここで図５Ｂを参照すると、受け取った書き込み要求に対応する方法の１つの実施形態を示している。受け取った書き込み要求（ブロック５３０）に応答して、この要求に対応する新たなマッピングテーブルエントリを作成することができる（ブロック５３２）。１つの実施形態では、書き込み要求の仮想アドレスと、対応するデータ構成要素を記憶している物理的位置とをペアにする新たな仮想−物理アドレスマッピングをマッピングテーブルに加えることができる（ブロック５３４）。様々な実施形態では、新たなマッピングを他の新たなマッピングと共にキャッシュして、マッピングテーブルエントリの新たな最上位レベルに加えることができる。その後、永続ストレージへの書き込み動作（ブロック５３６）を行うことができる。様々な実施形態では、永続ストレージ内のマッピングテーブルに新たなマッピングテーブルエントリを書き込むことを、効率が良いと見なされる後の時点まで実行しないでおくことができる（ブロック５３８）。上述したように、固体ストレージデバイスを使用するストレージシステムでは、ストレージからの読み込みよりもストレージへの書き込みの方がはるかに時間がかかる。従って、ストレージへの書き込みは、全体的なシステム性能に対する影響が最小になるようにスケジュールされる。いくつかの実施形態では、マッピングテーブルへの新規レコードの挿入を、他のより大規模なデータ更新と組み合わせることができる。このように更新を組み合わせると、書き込み動作をより効率的にすることができる。なお、５Ｂの方法では、説明を容易にするために、本明細書で説明する各方法と同様に動作が特定の順序で行われるものとして説明している。しかしながら、実際にはこれらの動作は異なる順序で行うことができ、場合によってはこれら動作の様々な動作を同時に行うこともできる。このような全ての実施形態が企図される。
【００７０】
上記の他に、いくつかの実施形態では重複排除機構を使用することもできる。図５Ｂには、一般に重複排除システム及び重複排除方法に対応する動作５５０を示している。図示の例では、受け取った書き込み要求に対応するハッシュを生成することができ（ブロック５４０）、これを使用して重複排除テーブルにアクセスする（ブロック５４２）。重複排除テーブル内でヒットがあった（すなわち、既にシステム内にデータのコピーが存在している）場合（ブロック５４４）、重複排除テーブルに新たなエントリを追加して（ブロック５４８）新たな書き込みを反映することができる。このような場合、ストレージにデータ自体を書き込む必要はなく、受け取った書き込みデータは破棄することができる。或いは、重複排除テーブル内にミスがある場合、新規データのための新たなエントリを作成して重複排除テーブルに記憶する（ブロック５４６）。また、ストレージへのデータの書き込みも行う（ブロック５３６）。さらに、インデックス内に新たなエントリを作成して新規データを反映することができる（ブロック５３８）。いくつかの実施形態では、インライン重複排除動作においてミスが生じた場合、この時点で重複排除テーブルへの挿入は行われない。代わりに、インライン重複排除動作中に、重複排除テーブル全体の一部のみ（例えば、重複排除テーブルのキャッシュ部分）に関してハッシュ値によるクエリを行うことができる。ミスが生じた場合には、新たなエントリを作成してキャッシュに記憶することができる。その後、ガーベージコレクション中に行われる動作などの重複排除動作の後処理中に、重複排除テーブル全体に関してハッシュ値によるクエリを行うことができる。ミスは、ハッシュ値が一意のハッシュ値であることを示すことができる。従って、ハッシュから物理ポインタへのマッピングなどの新たなエントリを重複排除テーブルに挿入することができる。或いは、重複排除の後処理中にヒットが検出された（すなわち、重複が検出された）場合、重複排除を行って、検出されたコピーの１つ又はそれ以上を削除することができる。
【００７１】
上述したように、マッピングテーブルに関連するデータの符号化には、必要な記憶量を減少させるために様々な圧縮方式を使用することができる。ここで図５Ｃを参照すると、あるタプルの組を圧縮する方法の１つの実施形態を示している。この方法を使用して、マッピングテーブル又はその他のテーブルにエントリを書き込むことができる。まず、符号化したタプルの組を記憶すべき目標サイズ（ブロック５６０）、及びデフォルトの符号化アルゴリズム（ブロック５６１）を選択することができる。その後、この選択されたサイズ及びアルゴリズムに基づいて、符号化してテーブル内に記憶するタプルを選択する（ブロック５６２）。このような実施形態では、現在選択されている符号化方式を使用して各タプルの符号化サイズを計算する。タプルを追加することにより、組内に現在蓄積されているタプルが目標サイズを超える場合（条件付きブロック５６４）、システムは、符号化したタプルに必要な全空間を減少させるために、この時点までに蓄積されている全てのタプルにとってより良い符号化アルゴリズムを見つけようとすることができる（ブロック５６５）。より小さな符号化法が見つからなかった（ブロック５６５）場合、最も新しいタプルを削除し、現在の符号化法を使用して残りのタプルを書き込む（ブロック５６７）。より小さな符号化法が見つかった（ブロック５６５）場合、この新規のより小さな符号化が目標サイズ内に収まるかどうかを判断する（ブロック５６６）。新規の符号化が目標サイズ内に収まらない場合、最も新しく提供されたタプルを削除し、現在の符号化方法を使用して残りのタプルを符号化し、テーブルに書き込むことができる（ブロック５６７）。検討中の現在のタプルにより、組内に現在蓄積されているタプルが目標サイズを超えない場合（条件付きブロック５６４）、別のタプルを追加しようと試みることができる（ブロック５６２）。同様に、条件付きブロック５６６において、要件を満たす新規の符号化が見つかった場合、別のタプルを追加しようと試みることができる（ブロック５６２）。
【００７２】
図５Ｄに、タプルを符号化する方法の１つの実施形態を示す。この例では、元々の符号化前のタプル５８４を示し、符号化ページ５６８内に符号化後のタプル５８０を示している。一般的に言えば、図示の例では、テーブル内の各フィールドを１つ又は２つの値を用いて表している。第１の値は、基準値を選択するために使用される基準値セレクタであり、第２の値は、選択された基準値からのオフセットである。１つの実施形態では、基準セレクタがｂビットを含み、オフセットがｋビットを含み、ｂ及びｋは整数である。値ｂ及びｋは、フィールド毎に別個に選択することができ、ｂ及びｋの一方又は両方がゼロの場合もある。各符号化後のフィールドでは、ｂ及びｋの値を最大２b個の基準と共に記憶することができ、これらの各々は、基準値を表すのに必要なだけのビット数とすることができる。ｂがゼロの場合、１つの基準のみが記憶される。従って、このようにして符号化される各フィールドには、符号化のために多くてもｂ＋ｋビットしか必要とされない。エンコーダは、フィールドの全体的な符号化後のサイズを最小限に抑えるようにｂ及びｋに関して異なる値を考慮することができ、通常、ｂの値が大きければｋの値を小さくする必要がある。
【００７３】
図５Ｄには、符号化前のタプル５８４、及び結果として得られる符号化後のページ５６８のサンプルを示している。このページはヘッダ５７０を含み、ヘッダ５７０の最初の２つの値は、各タプル内のフィールド数（５７２）及びページ内のタプル数（５７４）を含む。従って、ヘッダ５７０は、フィールド毎に値のテーブル又は組を１つ有する。このテーブルには、まず所与のフィールドの基準の数がリストされ、次にこの基準からのオフセットを符号化するために使用されるビット数ｋがリストされる。そして、ページには、ヘッダ内の情報を使用して符号化された各タプルが記憶される。例えば、ヘッダ５７０内の第１の値（５７２）は、各タプルに３つのフィールドが存在することを示す。第２の値（５７４）は、ページ５６８内に８４個のタプルが存在することを示す。そして、次の３つのテーブル５７６ａ〜５７６Ｃは、３つのフィールドの各々の基準値及び符号化情報を示す。テーブル５７６Ａは、第１のフィールドが１つの基準を有し、オフセットの符号化に４ビットが使用されることを示す。この第１のフィールドの唯一の基準は１２である（すなわち、ｂはゼロである）。第２のテーブル５７６Ｂは、第２のフィールドに３つの基準が存在し、オフセットの符号化に３ビットが使用されることを示す。第２のフィールド５７６Ｂの３つの基準は、５、１１３及び２０３である。最後に、第３のテーブル５７６Ｃは、第３のフィールドが２つの基準を有し、オフセットの符号化に０ビットが使用されることを示す。
【００７４】
符号化タプル５８０を見ると、様々な値を確認することができる。図示の例では、符号化タプル５８０の所与の行／列の値が、元々のタプルの同じ行／列の値に対応する。理解できるように、図中の値の順序及び位置は例示にすぎない。値及び対応する符号化値の実際の順序は、図示のものとは大きく異なることもある。第１のタプル５８２の第１のフィールドは３に符号化されているが、これは値１５（符号化前の値）を基準である１２から３オフセットしたもの（すなわち、１５−１２＝３）として表すことができるからである。この例では、基準がたった１つであり、ｂはゼロであることに留意されたい。従って、このフィールドでは、基準セレクタ値の符号化にビットは使用されない。オフセット値３は、８ビット、３２ビット又は６４ビットを必要とし得る典型的な符号化よりも大幅に少ない４ビットを使用して符号化される。第１のタプル５８２Ａの第２の値は、１，３に符号化されている。この１は、テーブル５７６Ｂ内で基準１（すなわち、選択基準１１３）が選択されたことを示し、３は、基準である１１３からのオフセットが３であることを示す。値１は２ビットで符号化され（基準の数よりも大きい又はこれに等しい２の最小累乗は２2である）、値３は３ビットで符号化され、合計は５ビットになる。この値もまた、フィールドを素直に符号化するよりもはるかに小さい。最後に、最終フィールドは、どの基準を使用すべきかを示すインデックスとして符号化されている。この場合、オフセットを表すのにビットは使用されない。ここでは、第１のタプルが０を有するが、これは記憶値が４９２７であり、ヘッダ５７０内のフィールド５７６Ｃのテーブル内のエントリ（基準）が０だからである。従って、各タプルの全体的な符号化後の空間は、（０＋４）＋（２＋３）＋（１＋０）＝１０ビットであり、符号化前の必要な空間よりも大きく減少している。
【００７５】
様々な実施形態では、より大きな仮想アドレス又はＬＵＮ識別子に対応するために行うことがある最大フィールドサイズの増分を行う場合、ページを再符号化する必要がない。最悪の場合、より大きな基準値に対応するようにヘッダをわずかに修正する必要が生じることもあるが、これに必要な努力は最小限で済む。また、ブロックの範囲を新たな位置にコピーする時に行うことがある多くの値の一定量だけの修正も、影響を受ける各タプルを解凍して再符号化する必要なく、基準を単純に修正することによって可能になる。
【００７６】
なお、特定のフィールドのｂ及びｋの最適な又は別様に望ましい値を見つけるには、様々な異なる方法が存在する。図５Ｅに、符号化スキームを評価して複数の可能性から選択する方法の１つの実施形態を示す。図示の方法では、ページ内フィールドに記録すべき各一意の値をリストに記録する（ブロック５８５）。この方法は、より効率性の高い符号化法を見つけるために、ｂがゼロ（基準が１つ）であり、ｋがリスト内の最大値をリスト内の最小値からの差分すなわちオフセットとして符号化するのに十分大きい（最小必要ビット数）（ブロック５８６）という表現から開始する。従って、エンコーダは、連続的に小さくなるｋの値を試行し、この結果ｂの値は大きくなる（基準が増える）。ｂとｋの各組み合わせを評価しながら、より良好（例えば、より小さい）と見なされる符号化を生じるものを、さらに可能性のある符号化と比較するために保持する。その後、アルゴリズムは、ヘッダ内のテーブル及びタプル内の符号化後のフィールドに必要な全空間を含め、全体のサイズが最も小さくなる符号化を選択することができる。例えば、最小値を基準として開始し（ブロック５８７）、現在の基準よりも少なくとも２ｋ大きいリスト内の最小値を見つける（ブロック５８８）。このような値が存在する（条件付きブロック５８９）場合、この値を次の基準として選択する（ブロック５９４）。このような値が存在しない（条件付きブロック５８９）場合、現在選択されている基準及びｋの値を使用して、ヘッダ及び符号化後のフィールドの全体的な符号化後のサイズを判定する。この符号化が望ましい（例えば、この時点で最小である）（条件付きブロック５９１）場合、この符号化を保持する（ブロック５９２）。符号化を保持するどうかに関わらず、ｋの値を１ずつ減分する（ブロック５９３）ことができ、ｋがゼロよりも大きいか又はこれに等しい（条件付きブロック５９５）場合、ブロック５８７に戻ることによって処理を繰り返すことができる。ｋを減分したことによりｋがゼロを下回った場合、この処理は終了し、それまでに見つかった最良の符号化を選択する（ブロック５９６）。
【００７７】
ここで図６を参照すると、共有マッピングテーブルを有するマルチノードネットワークの１つの実施形態の汎用ブロック図を示している。図示の例では、３つのノード３６０ａ〜３６０ｃを用いてマッピングノードのクラスタが形成されている。１つの実施形態では、ノード３６０ａ〜３６０ｃの各々が、１又はそれ以上の論理ユニット番号（ＬＵＮ）を担うことができる。図示の実施形態では、いくつかのマッピングテーブルレベル（レベル１−Ｎ）を示している。レベル１が最も古いレベルに対応し、レベルＮが最新のレベルに対応することができる。特定のノードによって管理されるＬＵＮのマッピングテーブルエントリでは、この特定のノード自体が、より新しいエントリをノード自体に記憶することができる。例えば、図示のように、ノード３６０ａは、マッピングサブテーブル３６２ａ及び３６４ａを記憶する。これらのサブテーブル３６２ａ及び３６２ｂは、一般にノード３６０ａが担うＬＵＮに対応することができる。同様に、ノード３６０ｂは、このノードによって管理されるＬＵＮに対応できるサブテーブル３６２ｂ及び３６４ｂを含み、ノード３６０ｃは、このノードによって管理されるＬＵＮに対応できるサブテーブル３６２ｃ及び３６４ｃを含む。このような実施形態では、これらの「より新しい」レベルのマッピングテーブルエントリが、これらの対応する管理ノードのみによって保持され、一般に他のノード上には見当たらない。
【００７８】
上述した比較的新しいレベルとは対照的に、より古いレベル（すなわち、レベルＮ−２〜レベル１）は、あらゆるノードがこれらのエントリのコピーを記憶できるという意味において、全てのノード３６０ａ〜３６０ｃが共有できるマッピングテーブルエントリを表す。図示の例では、これらのより古いレベル３７０、３７２及び３７４を、集合的に共有テーブル３８０として識別する。また、上述したように、様々な実施形態では、これらのより古いレベルは、後述するマージ又は同様の動作は別にして静的である。一般的に言えば、静的なレイヤとは、修正を受けないレイヤのことである（すなわち、「固定」されている）。このようなレベルがこの意味で固定されているすれば、これらのより低いレベルのあらゆるコピーには、別のコピーが修正されたか、又は修正中であるかを気にせずにアクセスすることができる。従って、あらゆるノードが共有テーブル３８０のコピーを安全に記憶し、要求に正しく対処できるという確信を持ってこれらのテーブルへの要求に対処することができる。共有テーブル３８０のコピーを複数のノード３６０に記憶すると、検索を行う際、及び別様に要求に対処する際に、様々な負荷バランシングスキームを使用できるようになる。
【００７９】
上記の他に、様々な実施形態では、共有できるレベル３８０を、ノード３６０自体を反映するように構成することができる。例えば、ノード３６０ａはＬＵＮ１及び２を担うことができ、ノード３６０ｂはＬＵＮ３及び４を担うことができ、ノード３６０ｃはＬＵＮ５及び６を担うことができる。様々な実施形態では、マッピングテーブルエントリが、対応するＬＵＮをそれ自体が識別するタプルを含むことができる。このような実施形態では、共有マッピングテーブル３８０を、キー値、絶対的な記憶スペースの幅又は量、或いはその他に従ってソートすることができる。レベル３８０のマッピングテーブルエントリのソートがＬＵＮに部分的に基づく場合、エントリ３７０ａはＬＵＮ１及び２に対応することができ、エントリ３７０ｂはＬＵＮ３及び４に対応することができ、エントリ３７０ｃはＬＵＮ５及び６に対応することができる。このような構成では、検索する必要があるデータ量を効果的に減少させ、特定のＬＵＮを担うノードを責任者が要求の対象として直接選択できるようにすることにより、特定のＬＵＮを対象とする要求に関して所与のノードによる検索を速めることができる。これらの及びその他の構成及びソートスキームが可能であり企図される。また、ＬＵＮの分担を１つのノードから別のノードに移すことが望ましい場合、このノードの元々のノードマッピングを共有レベルにフラッシュする（例えば、そしてマージする）ことができる。この結果、ＬＵＮの分担が新規ノードに移され、このノードがそのＬＵＮに対処し始める。
【００８０】
ここで図７を参照すると、マッピングテーブルへのアクセスに使用する二次インデックスの１つの実施形態の汎用ブロック図を示している。上述したように、要求者のデータ入力３０２がキージェネレータ３０４によって受け取られ、このキージェネレータ３０４がクエリキー値３０６を生成することができる。このクエリキー値３０６を用いてマッピングテーブルにアクセスする。いくつかの実施形態では、図３に示す一次インデックス３１０が大きすぎてＲＡＭ１７２又は記憶媒体１３０に記憶できない（又は望むよりも大きい）場合がある。例えば、図１０及び図１１において後述するマージ及び平坦化動作により、古いレベルのインデックスが非常に大きくなることがある。従って、一次インデックス３１０の対応する部分の代わりに、一次インデックスの少なくとも一部に関して二次インデックス３２０をキャッシュすることができる。二次インデックス３２０は、ストレージデバイス１７６ａ〜１７６ｍに記憶されているデータの位置識別の細粒度レベルを粗くすることができる。従って、二次インデックス３２０は、対応する一次インデックス３１０の部分よりも小さくなることができる。これにより、二次インデックス３２０をＲＡＭ１７２又は記憶媒体１３０に記憶することができる。
【００８１】
１つの実施形態では、二次インデックス３２０が、パーティション３２２ａ〜３２２ｂなどのパーティションに分割される。また、二次インデックスは、最新のレベルが最初に現れるようにレベルに基づいて構成することもできる。１つの実施形態では、古いレベルの数字の方が小さく、若いレベルの数字の方が大きい（例えば、各新たなレベルによってレベルＩＤを増分することができる）。二次インデックス３２０の各エントリは、キー値の範囲を識別することができる。例えば、この例に示す最初のエントリは、レベル２２内のキー値０〜１２の範囲を識別することができる。これらのキー値は、一次インデックス３１０の所与のページ内の最初のレコード及び最後のレコードに関連するキー値に対応することができる。換言すれば、二次インデックス内のエントリは、キー０という識別符号及びキー１２という識別符号を単純に記憶して、対応するページがこの範囲内のエントリを含むことを示すことができる。再び図３Ａを参照すると、パーティション３１２ａをページとすることができ、この最初のレコード及び最後のレコードのキー値はそれぞれ０及び１２である。従って、図７に示すように、二次インデックス３２０内のエントリは０〜１２の範囲を記憶している。マッピングテーブル内のレベルには再マッピングが保持されるので、キー値の範囲は、複数のページ及び関連するレベルに対応することができる。図７に示すように、二次インデックス３２０内のフィールドは、この情報を記憶することができる。各エントリは、１又はそれ以上の対応する一意の仮想ページ識別子（ＩＤ）、及びキー値の範囲に対応する関連するレベルＩＤを記憶することができる。各エントリは、妥当性情報などの対応するステータス情報を記憶することもできる。保持されるページＩＤ及び関連するレベルＩＤのリストは、所与のクエリキー値をどこに記憶できるかを示すことができるが、そのページ及びレベル内にキー値が存在することを裏付けるものではない。二次インデックス３２０は一次インデックス３１０よりも小さいが、ストレージデバイス１７６ａ〜１７６ｍに記憶されているデータの位置識別の細粒度レベルも粗い。二次インデックス３２０は、ＲＡＭ１７２又は記憶媒体１３０に記憶されるほど十分に小さくなることができる。
【００８２】
二次インデックス３２０は、クエリキー値３０６によってアクセスされた場合、１又はそれ以上の対応するページＩＤ及び関連するレベルＩＤを搬送することができる。次に、これらの結果を用いて、記憶されている一次インデックスの部分にアクセスしてこれを取得する。次に、１又はそれ以上の識別されたページをこのクエリキー値によって検索し、物理ポインタ値を見つけることができる。１つの実施形態では、レベルＩＤを使用して、やはりクエリキー値３０６を記憶している１又はそれ以上の識別されたレベルのうちの最も若いレベルを判定することができる。その後、対応するページ内のレコードを取得し、物理ポインタ値を読み出してストレージアクセス要求を処理することができる。図示の例では、クエリキー値２７がキー１６〜３１の範囲内に含まれる。対応するエントリに記憶されたページＩＤ及びレベルＩＤが、クエリキー値と共にマッピングテーブルに搬送される。
【００８３】
ここで図８を参照すると、マッピングテーブルへのアクセスに使用する三次インデックスの１つの実施形態の汎用ブロック図を示している。図４の回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。上述したように、図３に示す一次インデックス３１０は、大きすぎてＲＡＭ１７２又は記憶媒体１３０に記憶できない場合がある。また、マッピングテーブル３４０が大きくなるにつれ、二次インデックス３２０も大きくなりすぎてこれらのメモリに記憶できなくなる場合がある。従って、二次インデックス３２０にアクセスする前に、一次インデックス３１０にアクセスするよりも依然として高速な三次インデックス３３０にアクセスすることができる。
【００８４】
三次インデックス３３０が提供できるストレージデバイス１７６ａ〜１７６ｍに記憶されているデータの位置識別の細粒性レベルは、二次インデックス３２０よりも粗い。従って、三次インデックス３３０は、二次インデックス３２０の対応する部分よりも小さくなることができる。なお、一次インデックス３１０、二次インデックス３２０及び三次インデックス３３０などの各々は、圧縮フォーマットで記憶することができる。選択される圧縮フォーマットは、マッピングテーブル３４０内に情報を記憶するために使用する圧縮フォーマットと同じものとすることができる。
【００８５】
１つの実施形態では、三次インデックス３３０が、パーティション３３２ａ及び３３２ｂなどの複数のパーティションを含むことができる。三次インデックス３３０には、クエリキー値３０６によってアクセスすることができる。図示の例では、「２７」というクエリキー値３０６は、０〜７８のキー値の範囲内にあることが分かる。このキー値範囲には、三次インデックス３３０内の最初のエントリが対応する。三次インデックス３３０内の列は、二次インデックス３２０内のどのパーティションにアクセスすべきかを示すことができる。図示の例では、０〜７８のキー値範囲は、二次インデックス３２０内のパーティション０に対応する。
【００８６】
なお、クエリキー値がインデックス３１０〜３３０のいずれか１つの中に存在しないかどうかを判定するために、フィルタ（図示せず）にアクセスすることもできる。このフィルタは、ある要素がある組のメンバであるかどうかを判定する確率データ構造とすることができる。偽陽性は生じ得るが、偽陰性は生じ得ない。このようなフィルタの一例には、Ｂｌｏｏｍフィルタがある。このようなフィルタへのアクセスにより、全体のインデックス１４２内に特定の値が存在しないと判断された場合、クエリはストレージに送信されない。このようなフィルタへのアクセスにより、対応するインデックス内にクエリキー値が存在すると判断された場合、ストレージデバイス１７６ａ〜１７６ｍに対応する物理ポインタ値が記憶されているかどうかが分からないこともある。
【００８７】
上記の他に、様々な実施形態では、クエリに応答してマッピングテーブルにより提供されるタプルを修正又は省略するために、１又はそれ以上のオーバーレイテーブルを使用することができる。このようなオーバーレイテーブルを使用して、マッピングテーブルへのアクセスに応答する際に、又は新たなレベルを作成する時の平坦化動作中に使用するためのフィルタリング条件を適用することができる。いくつかの実施形態では、オーバーレイテーブルを、上述したマッピングテーブルと同様に時間順のレベルとして構成することができる。他の実施形態では、異なる方法で構成される。オーバーレイテーブルのキーは、基礎となるマッピングテーブルのキーに一致する必要はない。例えば、オーバーレイテーブルは、特定のボリュームが削除されたこと又は別様にアクセス不能である（例えば、このタプルにクエリを行うための自然なアクセス経路が存在しない）こと、及びこのボリューム識別子を参照するタプルに対応するクエリへの応答が代わりに無効であることを示す単一のエントリを含むことができる。別の例では、オーバーレイテーブル内のエントリが、記憶位置が開放された旨、及びこの記憶位置を参照するいずれのタプルも無効であり、従ってマッピングテーブルが使用するキーではなく検索の結果を無効とする旨を示すことができる。いくつかの実施形態では、オーバーレイテーブルが、基礎となるマッピングテーブルへのクエリに応答してフィールドを修正することができる。一部の実施形態では、キー範囲（キー値の範囲）を使用して、同じ動作（削除又は修正）が適用される複数の値を効果的に識別することができる。このようにして、オーバーレイテーブル内に「省略」エントリを作成することにより、マッピングテーブルを修正することなくマッピングテーブルからタプルを（効果的に）「削除」することができる。この場合、オーバーレイテーブルは、関連する非キーデータフィールドを有していないキーを含むことができる。
【００８８】
ここで図９を参照すると、マッピング及びオーバーレイテーブルを含むシステムにおいて読み込み要求を処理する方法の１つの実施形態を示している。読み込み要求を受け取ったこと（ブロック９００）に応答して、この要求に対応するマッピングテーブルキー（ブロック９０８）及び第１のオーバーレイテーブルキー（ブロック９０２）を生成する。この例では、オーバーレイ及びマッピングテーブルへのアクセスが同時に行われるものとして示している。しかしながら、他の実施形態では、テーブルへのアクセスを非同時的にあらゆる所望の順序で（例えば、連続して又は別様に異なる時間に）行うことができる。マッピングテーブルのための生成されたキーを使用して、マッピングテーブルから対応するタプルを取得することができる（ブロック９１０）。第１のオーバーレイテーブルが、オーバーレイテーブルキーに対応する「省略」エントリを含む場合（条件ブロック９０６）、マッピングテーブル内で見つかったあらゆるタプルが無効とみなされ、要求者にこの旨のインジケーションを戻すことができる。一方、オーバーレイテーブルが、オーバーレイテーブルキーに対応する「修正」エントリを含む場合（条件ブロック９１２）、第１のオーバーレイテーブルエントリ内の値を用いて、マッピングテーブルから取得したタプル内の１又はそれ以上のフィールドを修正することができる（ブロック９２２）。この処理が行われると、マッピングテーブルからのタプル（修正されていてもいなくても）に基づいて第２のオーバーレイテーブルキーが生成され（ブロック９１４）、第１のオーバーレイテーブルと同じテーブルであってもなくてもよい第２のオーバーレイテーブル内で第２の検索が行われる（ブロック９１６）。第２のオーバーレイテーブル内で「省略」エントリが見つかった場合（条件ブロック９２０）、マッピングテーブルからのタプルが無効とみなされる（ブロック９１８）。第２のオーバーレイテーブルで「修正」エントリが見つかった場合（条件ブロック９２４）、マッピングテーブルからのタプルの１又はそれ以上のフィールドを修正することができる（ブロック９２６）。このような修正は、タプルを脱落させること、タプルを正規化すること又はその他を含むことができる。その後、修正されたタプルを要求者に戻すことができる。第２のオーバーレイテーブルが修正エントリを含まない場合（条件ブロック９２４）には、タプルを修正せずに要求者に戻すことができる。いくつかの実施形態では、（単複の）オーバーレイテーブルのいくつかの部分をキャッシュして、これらの内容により高速にアクセスできるようにすることができる。様々な実施形態では、第１のオーバーレイテーブルで検出された省略エントリが、他のあらゆる対応する検索（例えば、ブロック９１４、９１６、その他）を省く役目を果たすことができる。他の実施形態では、同時にアクセスを実行して「競合」させることができる。このような数多くの実施形態が可能である。
【００８９】
ここで図１０を参照すると、マッピングテーブル内のレベルの平坦化動作の１つの実施形態の汎用ブロック図を示している。様々な実施形態では、１又はそれ以上の条件を検出したことに応答して平坦化動作を行うことができる。例えば、新規レコードの挿入によりマッピングテーブル３４０が時間と共に増大してレベルを蓄積するに伴い、さらなるレベルのクエリキー値を検索するコストが不要に高くなることがある。検索すべきレベルの数を制限するために、複数のレベルを単一の新たなレベルに平坦化することができる。例えば、時間的な順序で論理的に隣接又は連続する２又はそれ以上のレベルを平坦化動作のために選択することができる。２又はそれ以上のレコードが同じキー値に対応する場合には、最も若いレコードを保持し、その他のレコードを新たな「平坦化された」レベルに含めないようにすることができる。このような実施形態では、新たに平坦化されたレベルが、所与のキー値に関して、対応する複数のレベルの検索によって得られる結果と同じ検索結果を戻すようになる。新たな平坦化レベルでの検索結果は、取って代わる２又はそれ以上のレベルと比べて変化しないので、平坦化動作をマッピングテーブルの更新動作と同期させる必要はない。換言すれば、テーブルの平坦化動作は、テーブルの更新とは非同期的に行うことができる。
【００９０】
上述したように、より古いレベルは、そのマッピングが修正されないという意味で固定されている（すなわち、ＡからＢへのマッピングは変化しない）。従って、（例えば、ユーザの書き込みに起因する）平坦化されたレベルへの修正は行われず、レベルの同期ロックは不要である。また、（例えば、図６に関連して説明したような）各ノードがより古いレベルのインデックスのコピーを記憶できるノードベースのクラスタ環境では、あるノード上での平坦化動作を、他のノードにおける対応するレベルをロックする必要なく行うことができる。従って、いずれかのノードにおいて平坦化が非同期的に行われている間も、全てのノードにおいて処理を継続することができる。他のノードは、その後の時点でレベルを平坦化することができ、或いは既に平坦化されているレベルを使用することができる。１つの実施形態では、エラー回復、ミラーリング又はその他の目的で、平坦化されたレベルを形成するために使用した２又はそれ以上のレベルを保持することができる。上記の他に、様々な実施形態では、省略したレコードを新たなレベルに再挿入しなくてもよい。上述した平坦化は、例えば、マッピングテーブル内のレベルの数が所与の閾値に達したことを検出したことに応答して行うことができる。或いは、１又はそれ以上のレベルのサイズが閾値を越えたことを検出したことに応答して平坦化を行うこともできる。考えられるさらに別の条件は、システムの負荷である。レベルを平坦化すべきかどうかの判断は、これらの条件を個別に考慮するだけでなく、これらの条件を組み合わせて考慮することもできる。平坦化すべきかどうかの判断は、条件の現在値と将来的な条件の予測値の両方を考慮することもできる。平坦化を実行できるための条件は他にも可能である。
【００９１】
図示の例では、レコードを単純にキーとポインタの組み合わせとして示している。説明を容易にするために、これらのページを４つのレコードを含むものとして示している。平坦化動作では、レベル「Ｆ」、及びその次の論理的に隣接するレベル「Ｆ−１」を考慮することができる。レベル「Ｆ」は、レベル「Ｆ−１」よりも若いものとすることができる。ここでは２つのレベルが平坦化されるように示しているが、平坦化のために３又はそれ以上のレベルを選択することも可能であり企図される。図示の例では、レベル「Ｆ−１」が、レベル「Ｆ」で見つかったキー値と同じキー値を記憶しているレコードを有することができる。双方向矢印を使用して、２つの連続するレベルにわたって同じキー値を記憶しているレコードを識別している。
【００９２】
新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」及びレベル「Ｆ−１」で見つかった重複キー値に対応するキーを含む。また、この新たなレベル「Ｎｅｗ  Ｆ」は、これらの重複キー値を記憶しているレコードのうちの最も若い（又は、この場合はより若い）レコードに対応するポインタ値も含む。例えば、レベル「Ｆ」及びレベル「Ｆ−１」の各々は、キー値４を記憶しているレコードを含む。若い方のレコードはレベル「Ｆ」に存在し、このレコードはポインタ値５１２も記憶している。従って、レベル「Ｆ−１」は、キー値４と、より古いレベルである「Ｆ−１」で見つかったポインタ値６５６ではなくポインタ値５１２とを含む。また、新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」とレベル「Ｆ−１」との間で見つかった一意のキー値を有するレコードを含む。例えば、レベル「Ｆ−１」は、レベル「Ｆ」で見つかった６のキーと２４６のポインタの組み合わせ、並びにレベル「Ｆ−１」で見つかった２のキーと３９８のポインタの組み合わせを有するレコードを含む。図示のように、レベル内のページの各々はキー値によってソートされる。
【００９３】
上述したように、様々な実施形態では、オーバーレイテーブルを用いて、基礎となるマッピングテーブル内のキー値に対応するタプルを修正又は省略することができる。このような（単複の）オーバーレイテーブルは、マッピングテーブルと同様の方法で管理することができる。例えば、オーバーレイテーブルを平坦化し、隣接するエントリを共にマージして空間を節約することができる。或いは、マッピングテーブルの管理に使用する方法とは別の方法でオーバーレイテーブルを管理することもできる。いくつかの実施形態では、オーバーレイテーブルが、オーバーレイテーブルキーの範囲を参照する単一のエントリを含むことができる。このようにして、オーバーレイテーブルのサイズを制限することができる。例えば、マッピングテーブルがＫ個の有効なエントリを含む場合、（平坦化後の）オーバーレイテーブルは、マッピングテーブル内の有効なエントリ間のギャップに対応する範囲を無効として記すＫ＋１個のエントリしか含まなくてよい。従って、オーバーレイテーブルを使用して、マッピングテーブルから脱落させることができるタプルを比較的効率的な方法で識別することができる。上記に加え、これまでの説明では、要求に対する応答を（単複の）マッピングテーブルから省略又は修正するためにオーバーレイテーブルを使用すると説明したが、マッピングテーブルの平坦化動作中に値を省略又は修正するためにオーバーレイテーブルを使用することもできる。従って、マッピングテーブルの平坦化動作中に新たなレベルを作成した場合、この新たなレベルに挿入されたはずのキー値を省略することができる。或いは、新たなレベルへの挿入前に値を修正することができる。このような修正により、マッピングテーブル内の所与のキー値範囲に対応する単一のレコードが、（新たなレベルでは）各々が元々のレコードの部分的な範囲に対応する複数のレコードに置き換えられるようになる。また、レコードを、より狭い範囲に対応する新規レコードに置き換えること、或いは複数のレコードを、元々のレコードの全ての範囲をカバーする範囲を有する単一のレコードに置き換えることもできる。このような全ての実施形態が企図される。
【００９４】
ここで図１１を参照すると、マッピングテーブル内のレベルの平坦化動作の実施形態の汎用ブロック図を示している。上述したように、レベルは時間順とすることができる。図示の例では、１又はそれ以上のインデックス及び対応するマッピングを含むレベル「Ｆ」が、より古いレベルである「Ｆ−１」よりも論理的に上方に配置されている。また、レベル「Ｆ」は、より若いレベル「Ｆ＋１」よりも論理的に下方に配置されている。同様に、レベル「Ｆ−２」は、より若いレベル「Ｆ−１」よりも論理的に上方に配置され、レベル「Ｆ＋２」は、より古いレベル「Ｆ＋１」よりも論理的に下方に配置されている。１つの例では、平坦化動作のためにレベル「Ｆ」及び「Ｆ−１」を考慮することができる。双方向矢印を使用して、２つの連続するレベルにわたり同じキー値を記憶しているレコードを識別している。
【００９５】
上述したように、新たなレベル「Ｎｅｗ  Ｆ」は、レベル「Ｆ」及びレベル「Ｆ−１」内で見つかった重複キー値に対応するキー値を含む。また、新たなレベル「Ｎｅｗ  Ｆ」は、重複キー値を記憶しているレコードのうちの最も若い（又はこの場合はより若い）レコードに対応するポインタ値を含む。平坦化動作の完了時には、未だレベル「Ｆ」及びレベル「Ｆ−１」をマッピングテーブルから削除することはできない。この場合も、ノードベースのクラスタでは、各ノードが、レベル「Ｎｅｗ  Ｆ」などの新たな単一のレベルを利用し、この新たなレベルに取って代わられる２又はそれ以上のレベル（レベル「Ｆ」及びレベル「Ｆ−１」などの）をもはや使用しない準備ができていることを検証することができる。この検証は、新たなレベルが代用になる前に行うことができる。１つの実施形態では、レベル「Ｆ」及びレベル「Ｆ−１」などの２又はそれ以上の置き換えられるレベルを、エラー回復、ミラーリング又はその他の目的でストレージ内に保持することができる。これらのレベルの時間順及びマッピングを保持するために、新たな平坦化されたレベルＦは、論理的に、より若いレベル（例えば、レベルＦ＋１）よりも下方であって取って代わる元々のレベル（例えば、レベルＦ及びレベルＦ−１）よりも上方に配置される。
【００９６】
ここで図１２を参照すると、マッピングテーブル内のレベルを平坦化する方法１０００の１つの実施形態を示している。ネットワークアーキテクチャ１００内に具体化される構成要素及び上述したマッピングテーブル３４０は、一般に方法１０００に従って動作することができる。本実施形態のステップは、説明を目的として順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【００９７】
ブロック１００２において、マッピングテーブル及び対応するインデックスに記憶スペースを割り当てる。ブロック１００４において、マッピングテーブル内の２又はそれ以上のレベルを平坦化するための１又はそれ以上の条件を判断する。例えば、マッピングテーブル内の現在のレベル数を検索するコストは、平坦化動作を行うコストよりも高い場合がある。また、コストは、平坦化すべき構造内の現在の（又は予測される）レベル数、１又はそれ以上のレベル内のエントリ数、省略又は修正されるマッピングエントリ数、及びシステム上の負荷のうちの少なくとも１つに基づくこともできる。コストは、対応する動作の実行時間、１又はそれ以上のバスの占有、対応する動作中に使用される記憶スペース、及び一連のレベル内で何らかの閾値に達した重複エントリ数など含むこともできる。また、各レベル内のレコード数のカウントを使用して、２つの連続するレベルに対して行わる平坦化動作により、１つ前のレベル内のレコード数の倍に等しいレコード数を有する新たな単一のレベルをいつ作成できるかを推定することもできる。これらの条件は、単独で又はいずれかの組み合わせで、及びその他の方法で考慮することができ、これらの全てが実行することが出来る。
【００９８】
ブロック１００６において、データを記憶して新たなマッピングテーブルが見つかると、インデックス及びマッピングテーブルにアクセスしてこれらを更新する。マッピングテーブルに新規レコードが挿入されると、マッピングテーブル内のレベル数は増加する。マッピングテーブル内の２又はそれ以上のレベルを平坦化するための条件が検出された場合（条件ブロック１００８）、ブロック１０１０において、平坦化する１又はそれ以上のレベルグループを識別する。レベルグループは、２又はそれ以上のレベルを含むことができる。１つの実施形態では、この２又はそれ以上のレベルが連続するレベルである。平坦化にとっては、最も低いレベル又は最も古いレベルが最良の候補となり得るが、より若いグループを選択することもできる。
【００９９】
ブロック１０１２において、グループごとに、対応するグループ内の最も新しいレコードを含む新たな単一のレベルを作成する。先程の例では、新たな単一のレベル「Ｎｅｗ  Ｆ」が、レベル「Ｆ」及びレベル「Ｆ＋１」のうちの最も若いレコードを含む。ブロック１０１４において、ノードベースのクラスタでは、それぞれのノードが平坦化動作により作成された新たなレベルを利用する準備ができている旨を示すようにクラスタ内の各ノードに確認応答を要求することができる。ブロック１０１６において、各ノードが新たなレベルを利用できる旨を確認応答すると、識別されたグループ内の現在のレベルが新たなレベルに置き換えられる。他の実施形態では、ノード全体にわたって同期を行う必要はない。このような実施形態では、いくつかのノードが、他のノードよりも先に新たなレベルを使用し始めることができる。さらに、いくつかのノードは、新たに平坦化されたレベルが利用可能になった後でも、元々のレベルを使用し続けることができる。例えば、特定のノードが元々のレベルのデータをキャッシュしておいて、新たな平坦化されたレベルの非キャッシュデータの使用に優先して使用することができる。このような数多くの実施形態が可能である。
【０１００】
ここで図１３を参照すると、マッピングテーブル内でバルクアレイタスクを効率的に処理する方法１１００の１つの実施形態を示している。他の説明した方法と同様に、ネットワークアーキテクチャ１００内に具体化される構成要素及び上述したマッピングテーブル３４０は、一般に方法１１００に従って動作することができる。また、本実施形態のステップは順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【０１０１】
マッピングテーブル内に情報を圧縮フォーマットで記憶すると、細粒度のマッピングが可能になり、一般的なバルクアレイタスクの代わりにマッピングテーブル内のマッピング情報を直接操作できるようになる。この直接的なマップ操作により、Ｉ／Ｏネットワーク及びバストラフィックを低減することができる。上述したように、フラッシュメモリの「シークタイム」が減り、これにより多くの依存的読み込み動作を回転ディスクからの単一動作よりも短い時間で行えるようになる。これらの依存的読み込みを使用してオンライン細粒度マッピングを行い、圧縮及び重複排除などの空間節約機能を組み込むことができる。また、これらの依存的読み込み動作により、ストレージコントローラ１７４が、ストレージデバイス１７６ａ〜１７６ｍに記憶されたユーザデータにアクセス（読み込み及び書き込み）する代わりに、完全にマッピングテーブル内でバルクアレイタスクを実行できるようになる。
【０１０２】
ブロック１１０２において、大きな又はバルクアレイタスクを受け取る。例えば、バルクコピー又は移動要求は、バーチャルマシンによって企業アプリケーションデータが実行され更新されることに加え、何十台又は何百台ものバーチャルマシンのバックアップにも対応することができる。このデータの全ての移動、分岐、クローン又はコピーに伴う受け取った要求に関連するデータ量は、１６ギガバイト（ＧＢ）又はそれ以上もの大きさになる場合がある。この要求を処理するためにユーザデータにアクセスした場合、この要求に多くの処理時間が費やされ、システム性能が低下することがある。また、一般に仮想化環境の総入出力（Ｉ／Ｏ）リソースは物理環境よりも少ない。
【０１０３】
ブロック１１０４において、ストレージコントローラ１７４は、受け取った要求に対応する新たなキー範囲をやはり受け取った要求に対応する古いキー範囲に関連付ける受け取った要求に対応するインジケーションを記憶することができる。例えば、受け取った要求が１６ＧＢのデータをコピーすることである場合、１６ＧＢのデータに対応するスタートキー値及びエンドキー値を記憶することができる。この場合も、スタートキー値及びエンドキー値の各々は、ボリュームＩＤ、受け取った要求内の論理又は仮想アドレス、スナップショットＩＤ及びセクタ番号などを含むことができる。１つの実施形態では、この情報を、一次インデックス３１０、二次インデックス３２０及び三次インデックス３３０などのインデックスに記憶された情報とは別個に記憶することができる。しかしながら、その後の要求の処理中にインデックスにアクセスする場合には、この情報にアクセスすることもできる。
【０１０４】
ブロック１１０６において、データストレージコントローラ１７４は、受け取った要求が事前にユーザデータにアクセスすることなく完了した旨を示す応答を、クライアントコンピュータシステム１１０ａ〜１１０ｃの対応するクライアントに搬送することができる。従って、ストレージコントローラ１７４は、ダウンタイムをわずかしか又は全く伴わずに、かつプロセッサ１２２に負荷を与えずに、受け取った要求を処理することができる。
【０１０５】
ブロック１１０８において、ストレージコントローラ１７４は、条件、インジケーション、又はフラグ、又はバッファ更新動作を、マッピングテーブル内の古いキーに取って代わる新たなキーに対応するマッピングテーブル内の１又はそれ以上のレコードを更新するように設定することができる。移動要求及びコピー要求の両方に関し、新たなキーに対応する１又はそれ以上のレコードをマッピングテーブルに挿入することができる。上述したように、これらのキーは、作成された新たな最上位レベルに挿入することができる。移動要求の場合、対応する新規レコードをマッピングテーブルに挿入した後に、１又はそれ以上の古いレコードをマッピングテーブルから削除することができる。実際には、マッピングテーブル内のレコードは、即座に又は後の時点で更新される。
【０１０６】
ゼロ化要求又は消去要求の場合、キー値の範囲がこの時点で一連の２進ゼロに対応するインジケーションを記憶することができる。また、上述したように、オーバーレイテーブルを使用して、有効でない（又は有効でなくなる）キー値を識別することもできる。ユーザデータは上書きしなくてもよい。消去要求の場合、後続する記憶（書き込み）要求のための新たなデータが「解放された」記憶位置に後で割り当てられた時にユーザデータを上書きすることができる。外部に向けられたデフラグメンテーション要求の場合、連続するアドレスをセクタ再構成のために選択することができ、これによりクライアントコンピュータシステム１１０ａ〜１１０ｃのクライアント上で実行されるアプリケーションに恩恵がもたらされることがある。
【０１０７】
ストレージコントローラ１７４が、新たなキーの１つに対応するデータストレージアクセス要求を受け取り（条件ブロック１１１０）、この新たなキーが既にマッピングテーブルに挿入されている場合（条件ブロック１１１２）、ブロック１１１４において、この新たなキーでインデックス及びマッピングテーブルにアクセスすることができる。例えば、この新たなキーにより、一次インデックス３１０、二次インデックス３２０又は三次インデックス３３０のいずれかにアクセスすることができる。マッピングテーブルの１又はそれ以上のページがインデックスによって識別された場合、これらの識別されたページにアクセスすることができる。ブロック１１１６において、この新たなキーに関連するマッピングテーブル内で見つかった物理ポインタ値により、ストレージアクセス要求に対処することができる。
【０１０８】
ストレージコントローラ１７４が、新たなキーの１つに対応するデータストレージアクセス要求を受け取り（条件ブロック１１１０）、この新たなキーが未だマッピングテーブルに挿入されていない場合（条件ブロック１１１２）、ブロック１１１８において、対応する古いキーでインデックス及びマッピングテーブルにアクセスすることができる。古いキー範囲及び新たなキー範囲を保持するストレージにアクセスして、対応する古いキー値を判断することができる。マッピングテーブルの１又はそれ以上のページがインデックスによって識別された場合、これらの識別されたページにアクセスすることができる。ブロック１１２０において、この古いキーに関連するマッピングテーブル内で見つかった物理ポインタ値により、ストレージアクセス要求に対処することができる。
【０１０９】
ここで図１４を参照すると、ストレージデバイス内のデータレイアウトアーキテクチャの実施形態を示す汎用ブロック図を示している。１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｍ内のデータ記憶位置を、独立装置による冗長アレイ（ＲＡＩＤ）のアレイの形で配置することができる。図示のように、データレイアウトアーキテクチャに従い、ストレージデバイス１７６ａ〜１７６ｋに異なるタイプのデータを記憶することができる。１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｋの各々がＳＳＤである。ＳＳＤ内の割り当て単位は、ＳＳＤ内の１又はそれ以上の消去ブロックを含むことができる。
【０１１０】
ユーザデータ１２３０は、ストレージデバイス１７６ａ〜１７６ｋの１つ又はそれ以上に含まれる１又はそれ以上のページに記憶することができる。ＲＡＩＤのストライプとストレージデバイス１７６ａ〜１７６ｋの１つとの各交点内では、記憶されている情報を一連の論理ページとしてフォーマットすることができる。各論理ページは、ページ内のデータのためのヘッダ及びチェックサムをさらに含むことができる。読み込みが発令された場合、この読み込みは１又はそれ以上の論理ページに対するものであり、チェックサムによって各ページ内のデータの妥当性を確認することができる。各論理ページは、ページのチェックサム（「メディア」チェックサムと呼ぶこともできる）を含むページヘッダを含むことができるので、データの実際のページサイズは１論理ページよりも小さくなることができる。いくつかの実施形態では、ＲＡＩＤパリティ情報などのデバイス間回復データ１２５０を記憶するページの場合、ページヘッダをより小さくして、パリティページがデータページ内のページチェックサムを保護するようにすることができる。他の実施形態では、デバイス間回復データ１２５０を記憶しているパリティページ内のチェックサムを、データページチェックサムのチェックサムが、対応するデータページをカバーするパリティページのチェックサムと同じになるように計算することができる。このような実施形態では、パリティページのヘッダをデータページのヘッダよりも小さくする必要はない。
【０１１１】
デバイス間ＥＣＣデータ１２５０は、ユーザデータを保持する他のストレージデバイス上の１又はそれ以上のページから生成されたパリティ情報とすることができる。例えば、デバイス間ＥＣＣデータ１２５０は、ＲＡＩＤデータレイアウトアーキテクチャで使用されるパリティ情報とすることができる。図では、記憶されている情報をストレージデバイス１７６ａ〜１７６ｋ内の連続する論理ページとして示しているが、当業では、論理ページを順不動で配置することができ、ストレージデバイス１７６ａ〜１７６ｋの各々がＳＳＤであることが周知である。
【０１１２】
デバイス内ＥＣＣデータ１２４０は、デバイス内冗長スキームにより使用される情報を含むことができる。デバイス内冗長スキームは、所与のストレージデバイス内のパリティ情報などのＥＣＣ情報を利用する。このデバイス内冗長スキーム及びそのＥＣＣ情報は、所与のデバイスに対応するとともに所与のデバイス内に保持することができるが、デバイス自体が内部的に生成して保持できるＥＣＣとは異なる。一般的に言えば、デバイスが内部的に生成して保持するＥＣＣは、デバイスが含まれているシステムからは見えない。
【０１１３】
デバイス内ＥＣＣデータ１２４０は、デバイス内エラー回復データ１２４０と呼ぶこともできる。デバイス内エラー回復データ１２４０は、所与のストレージデバイスを潜在的セクタエラー（ＬＳＥ）から保護するために使用することができる。ＬＳＥとは、所与のセクタにアクセスするまで検出されないエラーのことである。従って、所与のセクタに予め記憶されているいずれかのデータが失われることがある。ストレージデバイス障害後のＲＡＩＤ再構築中に単一のＬＳＥに見舞われると、この単一のＬＳＥによりデータ損失が引き起こされることがある。通常、「セクタ」という用語は、ディスク上の所与のトラック内のセグメントなどの、ＨＤＤ上の基本記憶単位を意味する。ここでは、「セクタ」という用語が、ＳＳＤ上の基本割り当て単位を意味することもできる。潜在的セクタエラー（ＬＳＥ）は、ストレージデバイス内の所与のセクタ又はその他の記憶単位にアクセスできない場合に発生する。所与のセクタに対して読み込み又は書き込み動作を完了できないことがある。また、訂正不能な誤り訂正コード（ＥＣＣ）エラーが存在することもある。
【０１１４】
所与のストレージデバイス内に含まれるデバイス内エラー回復データ１２４０は、所与のストレージデバイス内のデータ記憶の信頼性を高めるために使用することができる。デバイス内エラー回復データ１２４０は、ＲＡＩＤデータレイアウトアーキテクチャで利用されるパリティ情報などの、別のストレージデバイスに含まれることがある他のＥＣＣ情報に加えて存在する。
【０１１５】
各ストレージデバイス内では、デバイス内エラー回復データ１２４０を１又はそれ以上のページに記憶することができる。当業者には周知のように、デバイス内エラー回復データ１２４０は、ユーザデータ１２３０内の情報の選択されたビットに対して関数を実行することにより取得することができる。ＸＯＲベースの演算を用いてパリティ情報を導出し、デバイス内エラー回復データ１２４０に記憶することができる。デバイス内冗長スキームの他の例としては、シングルパリティチェック（ＳＰＣ）、最大距離分離（ＭＤＳ）消去符号、インタリーブパリティチェック符号（ＩＰＣ）、ハイブリッドＳＰＣ及びＭＤＳ符号（ＭＤＳ＋ＳＰＣ）、及び列対角パリティ（ＣＤＰ）が挙げられる。これらのスキームは、提供される信頼性及びオーバーヘッドの点で、データ１２４０を計算する方法により様々である。
【０１１６】
システムは、上述したエラー回復情報に加え、デバイス上の領域のチェックサム値を計算するように構成することもできる。例えば、デバイスに情報を書き込む際にチェックサムを計算することができる。このチェックサムはシステムによって記憶される。システムは、デバイスから情報を読み戻す場合、再びチェックサムを計算して、元々記憶されていた値と比較することができる。これらの２つのチェックサムが異なる場合には情報が正しく読み出されておらず、システムは他のスキームを用いてデータを回復する。チェックサム関数の例としては、巡回冗長検査（ＣＲＣ）、ＭＤ５及びＳＨＡ−１が挙げられる。
【０１１７】
ＳＳＤ内の消去ブロックは、複数のページを含むことができる。ページは、４ＫＢのデータ記憶スペースを含むことができる。消去ブロックは、６４ページ又は２５６ＫＢを含むことができる。他の実施形態では、消去ブロックが１メガバイト（ＭＢ）もの大きさであり、２５６ページを含むことができる。割り当て単位のサイズは、十分に大きなサイズの単位及び比較的小さな数の単位の両方を提供して割り当て単位のオーバーヘッドトラッキングを低減するように選択することができる。１つの実施形態では、１又はそれ以上の状態テーブルが、割り当て単位の状態（割り当て済み、空き、消去済み、エラー）、摩耗レベル、及び割り当て単位内で発生したエラー数（訂正可能及び／又は訂正不能）のカウントを保持することができる。１つの実施形態では、割り当て単位が、ＳＳＤの総記憶容量に比べて比較的小さい。ページ、消去ブロック及びその他の単位構成に関しては、他のデータ記憶スペースの量も可能であり企図される。
【０１１８】
メタデータ１２６０は、ページヘッダ情報、ＲＡＩＤストライプ識別情報、及び１又はそれ以上のＲＡＩＤストライプのログデータなどを含むことができる。様々な実施形態では、各ストライプの先頭の単一のメタデータページを、他のストライプヘッダから再構築することができる。或いは、デバイス間パリティによってデータを保護できるように、このページをパリティシャード内で異なるオフセットにすることもできる。１つの実施形態では、メタデータ１２６０が、このデータを重複排除すべきでない旨を示す特定のフラグ値を記憶し、又はこのフラグ値に関連することができる。
【０１１９】
ストレージデバイス１７６ａ〜１７６ｋ内のページの各々は、デバイス間パリティ保護及びデバイス内パリティ保護に加え、各所与のページに記憶されたチェックサムなどの追加保護を含むこともできる。ページ内のヘッダの後であって対応するデータの前にチェックサム（８バイト、４バイト、又はその他）を配置して圧縮することができる。さらに別の保護レベルとして、チェックサム値にデータ位置情報を含めることができる。各ページ内のデータは、この情報を含むことができる。この情報は、仮想アドレス及び物理アドレスの両方を含むことができる。この情報には、セクタ番号、データチャンク及びオフセット番号、トラック番号及びプレーン番号などを含めることもできる。このマッピング情報は、テーブルの内容が失われた場合にアドレス変換マッピングテーブルを再構築するために使用することもできる。
【０１２０】
１つの実施形態では、ストレージデバイス１７６ａ〜１７６ｋ内の各ページが、データタイプ１２３０〜１２６０などの特定のデータタイプを記憶する。或いは、ページが１つよりも多くのデータタイプを記憶することもできる。ページヘッダは、対応するページのデータタイプを識別する情報を記憶することができる。１つの実施形態では、デバイス内冗長スキームが、デバイスを、ユーザデータを記憶するための位置グループに分割する。例えば、ＲＡＩＤレイアウト内のストライプに対応するデバイス内の位置グループに分割することができる。図示の例では、説明を容易にするために２つのストライプ１２７０ａ及び１２７０ｂしか示していない。
【０１２１】
１つの実施形態では、ストレージコントローラ１７４内のＲＡＩＤエンジンが、ストレージデバイス１７６ａ〜１７６ｋに使用する保護レベルを決定することができる。例えば、ＲＡＩＤエンジンは、ストレージデバイス１７６ａ〜１７６ｋにＲＡＩＤダブルパリティを利用すると決定することができる。デバイス間冗長データ１２５０は、対応するユーザデータから生成されたＲＡＩＤダブルパリティ値を表すことができる。１つの実施形態では、ストレージデバイス１７６ｊ及び１７６ｋがダブルパリティ情報を記憶することができる。他のレベルのＲＡＩＤパリティ保護も可能であり企図されると理解されたい。また、他の実施形態では、ダブルパリティ情報をＲＡＩＤストライプ毎にストレージデバイス１７６ｊ及び１７６ｋに記憶するのではなく、ストレージデバイス間で交代に記憶することができる。例示及び説明を容易にするために、ダブルパリティ情報はストレージデバイス１７６ｊ及び１７６ｋに記憶されるように示している。ストレージデバイス１７６ａ〜１７６ｋの各々は複数のページを含むが、説明を容易にするためにページ１２１２及びページ１２２０しか記していない。
【０１２２】
なお、上述した実施形態はソフトウェアを含むことができる。このような実施形態では、方法及び／又は機構を実現するプログラム命令をコンピュータ可読媒体上に搬送又は記憶することができる。プログラム命令を記憶するように構成された数多くのタイプの媒体が利用可能であり、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラマブルＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、及び様々な他の形の揮発性又は不揮発性ストレージを含む。
【０１２３】
様々な実施形態では、本明細書で説明した方法及び機能の１又はそれ以上の部分が、クラウドコンピューティング環境の一部を形成することができる。このような実施形態では、１又はそれ以上の様々なモデルによるサービスとして、インターネットを介してリソースを提供することができる。このようなモデルは、Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ  （ＩａａＳ）、Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＰａａＳ）、及びＳｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（ＳａａＳ）を含むことができる。ＩａａＳでは、コンピュータインフラストラクチャがサービスとして配信される。このような場合、一般にコンピュータ装置がサービスプロバイダにより所有され運用される。ＰａａＳモデルでは、開発者がソフトウェアソリューションを開発するために使用するソフトウェアツール及びその基礎となる装備を、サービスプロバイダがサービスとして提供し、ホストすることができる。通常、ＳａａＳは、オンデマンドサービスとして、サービスプロバイダの使用許諾ソフトウェアを含む。サービスプロバイダはソフトウェアをホストすることができ、或いは一定期間にわたって顧客にソフトウェアを配布することができる。上記のモデルの数多くの組み合わせが可能である。
【０１２４】
以上、実施形態についてかなり詳細に説明したが、上記の開示を完全に理解すると、当業者には数多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正を全て含むと解釈すべきであることが意図される。
【図１】
2014532227.tif 000003
【図２】
2014532227.tif 000004
【図３Ａ】
2014532227.tif 000005
【図３Ｂ】
2014532227.tif 000006
【図４】
2014532227.tif 000007
【図５Ａ】
2014532227.tif 000008
【図５Ｂ】
2014532227.tif 000009
【図５Ｃ】
2014532227.tif 000010
【図５Ｄ】
2014532227.tif 000011
【図５Ｅ】
2014532227.tif 000012
【図６】
2014532227.tif 000013
【図７】
2014532227.tif 000014
【図８】
2014532227.tif 000015
【図９】
2014532227.tif 000016
【図１０】
2014532227.tif 000017
【図１１】
2014532227.tif 000018
【図１２】
2014532227.tif 000019
【図１３】
2014532227.tif 000020
【図１４】
2014532227.tif 000021
【国際調査報告】
2014532227.tif 000022
2014532227.tif 000023