特許第6124902号(P6124902)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6124902
(24)【登録日】2017年4月14日
(45)【発行日】2017年5月10日
(54)【発明の名称】ストレージシステムにおける可変長符号化
(51)【国際特許分類】
   G06F 3/06 20060101AFI20170424BHJP
   G06F 13/10 20060101ALI20170424BHJP
   G06F 12/00 20060101ALI20170424BHJP
【FI】
   G06F3/06 301Z
   G06F3/06 301K
   G06F13/10 340A
   G06F12/00 514E
【請求項の数】11
【全頁数】41
(21)【出願番号】特願2014-533314(P2014-533314)
(86)(22)【出願日】2012年9月27日
(65)【公表番号】特表2014-532227(P2014-532227A)
(43)【公表日】2014年12月4日
(86)【国際出願番号】US2012057541
(87)【国際公開番号】WO2013049339
(87)【国際公開日】20130404
【審査請求日】2015年9月28日
(31)【優先権主張番号】13/250,579
(32)【優先日】2011年9月30日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】513076589
【氏名又は名称】ピュア・ストレージ・インコーポレイテッド
(74)【代理人】
【識別番号】100064621
【弁理士】
【氏名又は名称】山川 政樹
(74)【代理人】
【識別番号】100098394
【弁理士】
【氏名又は名称】山川 茂樹
(72)【発明者】
【氏名】コルグローヴ,ジョン
(72)【発明者】
【氏名】ヘイズ,ジョン
(72)【発明者】
【氏名】ミラー,イーサン
【審査官】 桜井 茂行
(56)【参考文献】
【文献】 特開2010−211681(JP,A)
【文献】 特開2007−094472(JP,A)
【文献】 米国特許出願公開第2007/0073783(US,A1)
【文献】 米国特許出願公開第2009/0300084(US,A1)
【文献】 米国特許出願公開第2010/0082562(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06− 3/08
G06F 13/10−13/14
G06F 12/00−12/12
(57)【特許請求の範囲】
【請求項1】
データストレージ媒体と、
前記データストレージ媒体に結合されたデータストレージコントローラと、
複数のエントリを含むマッピングテーブルと、を備え、前記マッピングテーブルの前記エントリの各々は、キーを含むタプルを含み、
前記データストレージコントローラは、可変長符号化を使用して前記マッピングテーブル内の各タプルを符号化するように構成され、
前記マッピングテーブルは、前記データストレージ媒体内のページとして記憶されたデータを含み、各ページは符号化された前記ページ内のタプルの1又はそれ以上の基準値を識別するヘッダを含む、
ことを特徴とするコンピュータシステム。
【請求項2】
前記マッピングテーブルは、各レベルが1又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成される、ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項3】
所与のタプルの複数の符号化のうちの特定の符号化が、前記所与のタプルの符号化前のサイズ、及び前記所与のタプルの符号化後のサイズに少なくとも基づいて選択される、ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項4】
各タプルは基準値の符号化を含まないことを特徴とする請求項1に記載のコンピュータシステム。
【請求項5】
前記マッピングテーブル内の1又はそれ以上の符号化後のタプルは、オフセット1つのみを含むことを特徴とする請求項1に記載のコンピュータシステム。
【請求項6】
前記マッピングテーブル内の1又はそれ以上の符号化後のタプルは、オフセット1つと基準値セレクタ1つのみを含むことを特徴とする請求項1に記載のコンピュータシステム。
【請求項7】
タプルの符号化後の表現のサイズと前記タプルの符号化前の表現のサイズの比率が前記ページ毎に変化し得る、ことを特徴とする請求項に記載のコンピュータシステム。
【請求項8】
符号化前のタプルを表すために使用するビットの最大数を、前記タプルを再符号化する必要なく変更することができる、ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項9】
前記マッピングテーブルのサイズは、有効なマッピングが存在する空間の量に比例する、ことを特徴とする請求項1に記載のコンピュータシステム。
【請求項10】
ストレージシステムで使用する方法であって、
キーを含むタプルを各エントリが含む1又はそれ以上のマッピングテーブルエントリを各レベルが含む複数のレベルとして構成されたマッピングテーブルを記憶するステップと、
変長符号化を使用して前記マッピングテーブル内の各タプルを符号化するステップと、を含み、
前記マッピングテーブルは、データストレージ媒体内のページとして記憶されたデータを含み、各ページは符号化された前記ページ内のタプルの1又はそれ以上の基準値を識別するヘッダを含む、
ことを特徴とする方法。
【請求項11】
プログラム命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記プログラム命令は、プロセッサにより、
キーを含むタプルを各エントリが含む1又はそれ以上のマッピングテーブルエントリを各レベルが含む複数のレベルとして構成されたマッピングテーブルを記憶し、
変長符号化を使用して前記マッピングテーブル内の各タプルを符号化するように実行可能であ
前記マッピングテーブルは、データストレージ媒体内のページとして記憶されたデータを含み、各ページは符号化された前記ページ内のタプルの1又はそれ以上の基準値を識別するヘッダを含む、
ことを特徴とする非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータネットワークに関し、具体的には、ストレージシステム内でマッピング構造を保持することに関する。
【背景技術】
【0002】
コンピュータメモリの記憶域及びデータ帯域幅が増すにつれ、企業が日々管理するデータの量及び複雑性も増す。通常、データセンターなどの大規模分散型ストレージシステムは、多くの業務を実行する。サーバルームと呼ぶこともできるデータセンターは、1又はそれ以上の企業に関連するデータを記憶し、管理して広めるための物理的又は仮想的な集中型リポジトリである。分散型ストレージシステムは、1又はそれ以上のネットワークにより相互接続されたクライアントコンピュータに結合することができる。分散型ストレージシステムのいずれかの部分が不良を起こすと、企業活動が損なわれることがある。従って、分散型ストレージシステムは、データの利用可能性及び高パフォーマンス機能のための高度な基準を維持する。
【0003】
分散型ストレージシステムは、ハードディスク、固体デバイス、別の記憶技術を使用するストレージデバイス、又はストレージデバイスのパーティションとすることができる物理ボリュームを含む。論理ボリュームマネージャ又はディスクアレイマネージャなどのソフトウェアアプリケーションは、大容量記憶アレイ上の空間割り当て手段を提供する。また、システム管理者は、このソフトウェアを使用して、論理ボリュームを含むストレージグループの単位を形成することもできる。ストレージ仮想化では、エンドユーザが物理ストレージを識別することなく論理ストレージにアクセスできるように、物理ストレージから論理ストレージが抽象化(分離)される。
【0004】
ストレージ仮想化をサポートするために、ボリュームマネージャは、エンドユーザからの論理アドレスを用いた着信I/O要求を、ストレージデバイス内の物理的な位置に関連するアドレスを用いた新規要求に変換することにより、入出力(I/O)リダイレクションを実行する。ストレージデバイスによっては、固体ストレージデバイス内で使用できるアドレス変換レイヤなどの付加的なアドレス変換機構を含むものもあるので、上述した論理アドレスから別のアドレスへの変換が唯一の又は最終的なアドレス変換を表さない場合もある。リダイレクションでは、1又はそれ以上のマッピングテーブルに記憶されたメタデータを利用する。また、1又はそれ以上のマッピングテーブルに記憶された情報を使用して、ストレージの重複排除を行い、特定のスナップショットレベルの仮想セクタを物理的位置にマッピングすることもできる。ボリュームマネージャは、仮想ストレージのためのマッピング情報の一貫した概念を保持することができる。しかしながら、マッピングテーブルを保持するために使用されるストレージ容量により、サポートされるアドレス空間が制限されることがある。
【0005】
ボリュームマネージャが使用する方法は、選択されるストレージディスクに関連する技術及び機構によって決まる。例えば、ハードディスク、ハードディスクパーティション、又は外部ストレージデバイスの論理ユニット番号(LUN)の細粒度レベルのためのマッピングを提供するボリュームマネージャは、データのかなりの部分に関して、重複データをリダイレクトし、検索し、削除することなどに制限される。別のタイプのストレージディスクの一例として、固体ディスク(SSD)がある。SSDは、HDDインターフェイスをエミュレートすることができるが、永続データの記憶に、HDD内で見られるような電気機械デバイスではなく固体メモリを利用する。例えば、SSDは、フラッシュメモリのバンクを含むことができる。従って、記憶のためにSSDを含む一方で、HDDに合わせて開発されたマッピングテーブル割り当てアルゴリズムを利用するシステムでは、1又はそれ以上のマッピングテーブルによる大規模サポートアドレス空間を実現することができない。
【発明の概要】
【発明が解決しようとする課題】
【0006】
このため、複数の固体ストレージデバイスの1つに記憶されたデータのストレージ仮想化を効率的に実行するためのシステム及び方法が望まれている。
【課題を解決するための手段】
【0007】
データストレージシステムにおいてマッピングテーブルを効率的に管理するためのコンピュータシステム及び方法の様々な実施形態を企図する。1つの実施形態では、ネットワークに結合されたデータストレージサブシステムが、クライアントコンピュータからネットワークを介して読み込み要求及び書き込み要求を受け取る。データストレージサブシステムは、複数のストレージデバイスを含むデバイスグループ上の複数のデータ記憶位置を含む。データストレージサブシステムは、少なくとも1つのマッピングテーブルをさらに含む。マッピングテーブルは複数のエントリを含み、これらのエントリの各々は、キーを含むタプルを含む。データストレージコントローラは、可変長符号化を使用してマッピングテーブル内の各タプルを符号化するように構成される。また、マッピングテーブルは、各レベルが1又はそれ以上のマッピングテーブルエントリを含む複数の時間順レベルとして構成することができる。さらに、所与のタプルの符号化前のサイズ、所与のタプルの符号化後のサイズ、及び所与のタプルを符号化する時間に少なくとも部分的に基づいて、所与のタプルの複数の符号化のうちの特定の符号化を選択することができる。データストレージコントローラが、所与のタプルの複数の異なる符号化を行い、これらの様々な符号化を比較し、最適と見なされる特定の符号化を選択するように構成される実施形態も企図する。
【0008】
さらに、マッピングテーブルが、システム内の仮想ブロックに対応するキーを有するエントリを記憶する実施形態も企図する。様々な実施形態では、所与の仮想ブロック範囲のエントリが、その所与の仮想ブロック範囲内のデータに関して計算したハッシュ値を記憶し、これらのエントリが、そのブロック範囲を含むデータの位置を容易に検索できるようにする情報を記憶する。
【0009】
以下の説明及び添付図面を検討すれば、これらの及びその他の実施形態が明らかになるであろう。
【図面の簡単な説明】
【0010】
図1】ネットワークアーキテクチャの1つの実施形態を示す汎用ブロック図である。
図2】マッピングテーブルの1つの実施形態の汎用ブロック図である。
図3A】マッピングテーブルへのアクセスに使用する一次インデックスの1つの実施形態の汎用ブロック図である。
図3B】マッピングテーブルへのアクセスに使用する一次インデックスの別の実施形態の汎用ブロック図である。
図4】一次インデックス及びマッピングテーブルの別の実施形態の汎用ブロック図である。
図5A】読み込みアクセスを行う方法の1つの実施形態を示す汎用フロー図である。
図5B】書き込み動作を行う方法の1つの実施形態を示す汎用フロー図である。
図5C】タプルを符号化して記憶する方法の1つの実施形態を示す汎用フロー図である。
図5D】タプル符号化の1つの実施形態を示す図である。
図5E】スキームを選択して符号化する方法の1つの実施形態を示す汎用フロー図である。
図6】共有マッピングテーブルを有するマルチノードネットワークの1つの実施形態の汎用ブロック図である。
図7】マッピングテーブルへのアクセスに使用する二次インデックスの1つの実施形態の汎用ブロック図である。
図8】マッピングテーブルにアクセスする三次インデックスの1つの実施形態の汎用ブロック図である。
図9】オーバーレイテーブルを利用する方法の1つの実施形態を示す図である。
図10】マッピングテーブル内のレベルの平坦化動作の1つの実施形態の汎用ブロック図である。
図11】マッピングテーブル内のレベルの平坦化動作の別の実施形態の汎用ブロック図である。
図12】マッピングテーブル内のレベルの平坦化方法の1つの実施形態を示す汎用フロー図である。
図13】マッピングテーブル内のバルクアレイタスクを効率的に処理する方法の1つの実施形態を示す汎用フロー図である。
図14】ストレージデバイス内のデータレイアウトアーキテクチャの実施形態を示す汎用ブロック図である。
【発明を実施するための形態】
【0011】
本発明は様々な修正及び代替形態が可能であるが、図面には特定の実施形態を一例として示し、本明細書ではこれらについて詳細に説明する。しかしながら、図面及びその詳細な説明は、開示する特定の形態に本発明を限定することを意図するものではなく、むしろ添付の特許請求の範囲によって定められる本発明の思想及び範囲内にある全ての修正物、同等物及び代替物を含むことを意図するものであると理解されたい。
【0012】
以下の説明では、本発明を完全に理解できるように数多くの具体的な詳細を示す。しかしながら、当業者であれば、これらの具体的な詳細を伴わずに本発明を実施できると認識すべきである。場合によっては、本発明を曖昧にしないように、周知の回路、構造、信号、コンピュータプログラム命令及び技術については詳細に示していないこともある。
【0013】
図1を参照すると、ネットワークアーキテクチャ100の1つの実施形態の汎用ブロック図を示している。後述するように、ネットワークアーキテクチャ100の1つの実施形態は、ネットワーク180を介して互いに、及びデータストレージアレイ120a〜120bに相互接続されたクライアントコンピュータシステム110a〜110bを含む。ネットワーク180は、スイッチ140を介して第2のネットワーク190に結合することができる。このネットワーク190を介して、クライアントコンピュータシステム110cが、クライアントコンピュータシステム110a〜110b及びデータストレージアレイ120a〜120bに結合される。また、ネットワーク190は、スイッチ150を介してインターネット160又はその他の外部ネットワークに結合することもできる。
【0014】
なお、別の実施形態では、クライアントコンピュータ及びサーバ、スイッチ、ネットワーク、データストレージアレイ及びデータストレージデバイスの数及びタイプが図1に示すものに限定されない。1又はそれ以上のクライアントは、様々な時点でオフラインで動作することができる。また、動作中にユーザがネットワークアーキテクチャ100への接続、切断及び再接続を行うと、個々のクライアントコンピュータの接続タイプが変化することもある。さらに、本明細書では、一般にネットワーク接続されたストレージについて説明するが、本明細書で説明するシステム及び方法は、直接的に接続されたストレージシステムに適用することもでき、説明する方法の1又はそれ以上の態様を実行するように構成されたホストオペレーティングシステムを含むこともできる。このような数多くの代替案が可能であり企図される。図1に示す構成要素の各々のさらなる説明を手短に行う。まず、データストレージアレイ120a〜120bにより提供される機能のいくつかの概要について説明する。
【0015】
ネットワークアーキテクチャ100では、データストレージアレイ120a〜120bの各々を、異なるサーバ及びクライアントコンピュータシステム110a〜110cなどのコンピュータ間におけるデータの共有に使用することができる。また、データストレージアレイ120a〜120bを、ディスクのミラーリング、バックアップ及び復元、保存データの保管及び検索、並びにストレージデバイス間のデータ移行に使用することもできる。別の実施形態では、クラスタを形成するために、1又はそれ以上のクライアントコンピュータシステム110a〜110cを、高速ローカルエリアネットワーク(LAN)を介して互いにリンクさせることができる。このようなクライアントは、データストレージアレイ120a〜120bの1つに存在するクラスタ共有ボリュームなどのストレージリソースを共有することができる。
【0016】
データストレージアレイ120a〜120bの各々は、データ記憶のためのストレージサブシステム170を含む。ストレージサブシステム170は、複数のストレージデバイス176a〜176mを含むことができる。これらのストレージデバイス176a〜176mは、クライアントコンピュータシステム110a〜110cにデータ記憶サービスを提供することができる。ストレージデバイス176a〜176mの各々は、特定の技術及び機構を使用してデータの記憶を行う。ストレージデバイス176a〜176mの各々で使用されるこの種の技術及び機構を少なくとも部分的に使用して、ストレージデバイス176a〜176mの各々との間の読み込み及び書き込み動作の制御及びスケジューリングを行うために使用するアルゴリズムを決定することができる。例えば、これらのアルゴリズムは、動作に対応する特定の物理的位置を特定することができる。また、これらのアルゴリズムは、動作のための入出力(I/O)リダイレクション、ストレージサブシステム170内の重複データの削除を行い、アドレスリダイレクション及び重複排除に使用する1又はそれ以上のマッピングテーブルをサポートすることもできる。
【0017】
上記のアルゴリズムで使用されるロジックは、基本オペレーティングシステム(OS)132、ボリュームマネージャ134、ストレージサブシステムコントローラ174、各ストレージデバイス176a〜176m内の制御ロジック、又はその他のうちの1つ又はそれ以上に含めることができる。また、本明細書で説明するロジック、アルゴリズム及び制御機構は、ハードウェア及び/又はソフトウェアを含むこともできる。
【0018】
ストレージデバイス176a〜176mの各々は、読み込み及び書き込み要求を受け取るとともに、それぞれをアレイ内の行及び列としてアドレス指定可能な複数のデータ記憶位置を含むように構成することができる。1つの実施形態では、ストレージデバイス176a〜176m内のデータ記憶位置を、論理的で冗長なストレージコンテナ又はRAIDアレイ(低価格/独立ディスク冗長アレイ)の形で配置することができる。
【0019】
いくつかの実施形態では、ストレージデバイス176a〜176mの各々が、従来のハードディスクドライブ(HDD)とは異なる技術をデータ記憶に利用することができる。例えば、ストレージデバイス176a〜176mの1つ又はそれ以上は、永続データを記憶するための固体メモリから成るストレージを含み、又はこれにさらに結合することができる。他の実施形態では、ストレージデバイス176a〜176mの1つ又はそれ以上が、スピン注入法、磁気抵抗ランダムアクセスメモリ(MRAM)法、瓦記録式ディスク(shingled disks)、メモリスタ、相変化メモリ、又はその他の記憶技術などの他の技術を使用するストレージを含み、又はこれにさらに結合することができる。これらの様々な記憶法及び記憶技術により、ストレージデバイス間で異なるI/O特性が生じ得る。
【0020】
1つの実施形態では、含まれる固体メモリが固体ドライブ(SSD)技術を含む。HDD技術とSDD技術では技術及び機構が異なることにより、データストレージデバイス176a〜176mの入出力(I/O)特性に違いが生じることがある。固体ディスク(SSD)は固体ドライブと呼ぶこともできる。SSDは、可動部品又は機械的遅延が無ければ、HDDよりも短い読み取りアクセス時間及びレイテンシを有することができる。しかしながら、SSDの書き込み性能は、一般に読み込み性能よりも遅く、SSD内の未使用のプログラム可能なブロックの利用可能性によって大きく影響を受けることがある。
【0021】
ユーザストレージと、ストレージデバイス176a〜176m内の物理的位置との間にストレージ仮想化レイヤを形成することにより、ストレージアレイの効率を改善することができる。1つの実施形態では、ボリュームマネージャの仮想レイヤが、ストレージデバイス又はネットワーク内ではなく、オペレーティングシステム(OS)のデバイスドライバスタック内に配置される。多くのストレージアレイは、仮想−物理マッピングテーブル全体をメモリに記憶できるようにストレージ仮想化を粗粒度レベルで実行する。しかしながら、このようなストレージアレイは、データ圧縮、重複排除、及び修正時コピー(copy−on−modify)動作などの機能を組み込むことができない。多くのファイルシステムは、細粒度の仮想−物理マッピングテーブルをサポートしてはいるものの、デバイスグループ173a〜173mなどの大規模ストレージアレイはサポートしていない。むしろ、デバイスグループ173a〜173のサポートには、ボリュームマネージャ又はディスクアレイマネージャが使用される。
【0022】
1つの実施形態では、RAM172、記憶媒体130、又はプロセッサ122内のキャッシュなどのメモリではなく、ストレージデバイス176a〜176mに1又はそれ以上のマッピングテーブルを記憶することができる。ストレージデバイス176a〜176は、フラッシュメモリを利用するSSDとすることができる。SSDの短い読み取りアクセス時間及びレイテンシ時間により、クライアントコンピュータからのストレージアクセス要求への対処中に依存的読み込み動作が生じる回数を少なくすることができる。ストレージアクセス要求への対処中には、1又はそれ以上のインデックス、1又はそれ以上のマッピングテーブル及びユーザデータへのアクセスに依存的読み込み動作を使用することができる。
【0023】
1つの例では、依存的読み込み動作によってI/Oリダイレクションを行うことができる。別の例では、依存的読み込み動作によってインライン重複排除を行うことができる。さらに別の例では、ユーザデータを保持する記憶位置にアクセスすることなく、大規模コピー、移動、ゼロ化動作などのバルクアレイタスクをもっぱらマッピングテーブル内で実行することができる。このような直接マップ操作により、ストレージデバイス176a〜176m内のI/Oトラフィック及びデータの移動を大幅に減少させることができる。SSDからストレージアクセス要求に対処する時間と依存的読み込み動作を行う時間を組み合わせても、回転式HDDからストレージアクセス要求に対処する時間よりも短い場合がある。
【0024】
また、マッピングテーブル内の情報は圧縮することもできる。個々の構成要素の識別を可能にするために、複数のレコードのうちのあるレコード内のキーなどの特定の圧縮アルゴリズムを選択することができる。従って、複数の圧縮されたレコードのうちの所与のキーの検索を行うことができる。様々な実施形態では、所与のキーの圧縮表現と、タプルの関連フィールドに記憶された圧縮情報とを比較することにより、各タプルを解凍することなくキーの検索を行うことができる。一致が見つかると、この一致するレコードのみを解凍することができる。マッピングテーブルのレコード内のタプルを圧縮することにより、細粒度レベルのマッピングをさらに可能にすることができる。この細粒度レベルのマッピングにより、一般的なバルクアレイタスクの代わりに直接マップ操作が可能なる。効率的なストレージ仮想化に関するさらなる詳細については後述する。
【0025】
繰り返すが、図示のように、ネットワークアーキテクチャ100は、ネットワーク180及び190を介して互いに及びデータストレージアレイ120a〜120bに相互接続されたクライアントコンピュータシステム110a〜110cを含む。ネットワーク180及び190は、無線接続、直接ローカルエリアネットワーク(LAN)接続、インターネットなどの広域ネットワーク(WAN)接続、ルータ、ストレージエリアネットワーク、イーサネット(登録商標)及びその他などを含む様々な技術を含むことができる。ネットワーク180及び190は、やはり無線とすることができる1又はそれ以上のLANを含むことができる。ネットワーク180及び190は、リモートダイレクトメモリアクセス(RDMA)ハードウェア及び/又はソフトウェア、伝送制御プロトコル/インターネットプロトコル(TCP/IP)ハードウェア及び/又はソフトウェア、ルータ、リピータ、スイッチ、グリッド及び/又はその他などをさらに含むことができる。ネットワーク180及び190内では、ファイバチャネル、ファイバチャネルオーバーイーサネット(FCoE)及びiSCSIなどのプロトコルを使用することができる。スイッチ140は、ネットワーク180及び190の両方に関連するプロトコルを利用することができる。ネットワーク190は、伝送制御プロトコル(TCP)及びインターネットプロトコル(IP)、すなわちTCP/IPなどの、インターネット160に使用される通信プロトコルの組と整合することができる。スイッチ150は、TCP/IPスイッチとすることができる。
【0026】
クライアントコンピュータシステム110a〜110cは、デスクトップパソコン(PC)、サーバ、サーバファーム、ワークステーション、ラップトップ、ハンドヘルドコンピュータ、サーバ、携帯情報端末(PDA)及びスマートフォンなどのあらゆる数の固定又はモバイルコンピュータを表す。一般的に言えば、クライアントコンピュータシステム110a〜110cは、1又はそれ以上のプロセッサコアを備えた1又はそれ以上のプロセッサを含む。各プロセッサコアは、所定の汎用命令セットに従って命令を実行するための回路を含む。例えば、x86命令セットアーキテクチャを選択することができる。或いは、Alpha(登録商標)、PowerPC(登録商標)、SPARC(登録商標)又はその他のいずれの汎用命令セットアーキテクチャを選択してもよい。プロセッサコアは、データ及びコンピュータプログラム命令を求めてキャッシュメモリサブシステムにアクセスすることができる。キャッシュサブシステムは、ランダムアクセスメモリ(RAM)及びストレージデバイスを含む記憶階層に結合することができる。
【0027】
クライアントコンピュータシステム内の各プロセッサコア及び記憶階層は、ネットワークインターフェイスに接続することができる。クライアントコンピュータシステム110a〜110cの各々は、ハードウェア構成要素に加え、記憶階層内に記憶された基本オペレーティングシステム(OS)を含むことができる。この基本OSは、例えば、MS−DOS(登録商標)、MS−WINDOWS(登録商標)、OS/2(登録商標)、UNIX(登録商標)、Linux(登録商標)、Solaris(登録商標)、AIX(登録商標)、DART、又はその他などの様々なオペレーティングシステムのいずれかを表すことができる。従って、基本OSは、エンドユーザに様々なサービスを提供するとともに、様々なプログラムの実行をサポートするソフトウェアフレームワークを提供することができる。また、クライアントコンピュータシステム110a〜110cの各々は、バーチャルマシン(VM)をサポートするために使用されるハイパーバイザを含むこともできる。当業者には周知のように、OSなどのソフトウェアをシステムのハードウェアから完全に又は部分的に分離するには、デスクトップ及びサーバ内で仮想化を使用することができる。仮想化により、各々が独自のリソースを有するとともに、データストレージアレイ120a〜120bの各々におけるストレージデバイス176a〜176m上に構築された(LUNなどの)論理記憶エンティティにアクセスできる複数のOSが同じ機械上で実行されているという錯覚をエンドユーザに与えることができる。
【0028】
データストレージアレイ120a〜120bの各々は、クライアントコンピュータシステム110a〜110cなどの異なるサーバ間のデータの共有に使用することができる。データストレージアレイ120a〜120bの各々は、データを記憶するためのストレージサブシステム170を含む。ストレージサブシステム170は、複数のストレージデバイス176a〜176mを含むことができる。これらのストレージデバイス176a〜176mの各々はSSDとすることができる。コントローラ174は、受け取った読み込み/書き込み要求を処理するためのロジックを含むことができる。受け取った書き込み要求などの動作のバッチ処理には、ランダムアクセスメモリ(RAM)172を使用することができる。様々な実施形態では、書き込み動作(又はその他の動作)をバッチ処理する際に、(NVRAMなどの)不揮発性ストレージを使用することができる。
【0029】
基本OS132、ボリュームマネージャ134(又はディスクアレイマネージャ134)、いずれかのOSドライバ(図示せず)、及び記憶媒体130に記憶されたその他のソフトウェアは、ファイル及びLUNへのアクセスを可能にする機能を提供し、これらの機能を管理することができる。基本OS132は、NetApp Data ONTAP(登録商標)又はその他などのストレージオペレーティングシステムとすることができる。基本OS132及びOSドライバは、記憶媒体130上に記憶された、受け取った要求に対応する1又はそれ以上のメモリアクセス動作をストレージサブシステム170内で行うようにプロセッサ122により実行可能なプログラム命令を含むことができる。図1に示すシステムは、一般に1又はそれ以上のファイルサーバ及び/又はブロックサーバを含むことができる。
【0030】
データストレージアレイ120a〜120bの各々は、ネットワークインターフェイス124を使用してネットワーク180に接続することができる。1つの実施形態では、クライアントコンピュータシステム110a〜110cと同様に、ネットワークインターフェイス124の機能をネットワークアダプタカード上に含めることができる。ネットワークインターフェイス124の機能は、ハードウェア及びソフトウェアの両方を使用して実装することができる。ネットワークインターフェイス124のネットワークカードによる実装には、ランダムアクセスメモリ(RAM)及び読み取り専用メモリ(ROM)の両方を含めることができる。1又はそれ以上の特定用途向け集積回路(ASIC)を使用してネットワークインターフェイス124の機能を提供することもできる。
【0031】
上記の他に、データストレージアレイ120a〜120b内のストレージコントローラ174の各々は、スナップショット、複製、及び高可用性などのストレージアレイ機能をサポートすることができる。また、ストレージコントローラ174の各々は、各々が複数のスナップショットを含む複数のボリュームを有するバーチャルマシン環境をサポートすることもできる。1つの例では、ストレージコントローラ174が、各々が数千枚のスナップショットを含む何十万ものボリュームをサポートすることができる。1つの実施形態では、ストレージデバイス176a〜176m内の4キロバイト(KB)のページなどの固定サイズのセクタ内にボリュームをマッピングすることができる。別の実施形態では、書き込み要求などのための可変サイズのセクタ内にボリュームをマッピングすることができる。所与のボリュームを識別するには、ボリュームID、スナップショットID及びセクタ番号を使用することができる。
【0032】
アドレス変換テーブルは、対応するデータ構成要素の仮想−物理マッピングを各々が保持する複数のエントリを含むことができる。このマッピングテーブルを使用して、クライアントコンピュータシステム110a〜110cの各々からの論理読み込み/書き込み要求を、ストレージデバイス176a〜176m内の物理的位置にマッピングすることができる。受け取った読み込み/書き込み要求に対応する検索動作中に、マッピングテーブルから「物理」ポインタ値を読み出すことができる。次に、この物理ポインタ値を使用して、ストレージデバイス176a〜176m内の物理的位置を特定することができる。なお、この物理ポインタ値を使用して、ストレージデバイス176a〜176mのうちの所与のストレージデバイス内の別のマッピングテーブルにアクセスすることもできる。従って、物理ポインタ値と目的の記憶位置との間には、1又はそれ以上のレベルの間接的動作が存在することができる。
【0033】
別の実施形態では、マッピングテーブルが、データの重複を排除するために使用する情報(重複排除テーブル関連情報)を含むことができる。重複排除テーブルに記憶される情報は、所与のデータ構成要素のための1又はそれ以上の計算されたハッシュ値と、ストレージデバイス176a〜176mのうちの1つにおける所与のデータ構成要素を保持する物理的位置への物理ポインタとの間のマッピングを含むことができる。また、重複排除テーブルには、所与のデータ構成要素の長さ及び対応するエントリのステータス情報を記憶することもできる。
【0034】
ここで図2を参照すると、マッピングテーブルの1つの実施形態の汎用ブロック図を示している。上述したように、1又はそれ以上のマッピングテーブルは、I/Oリダイレクション又は変換、ユーザデータの複製の重複排除、ボリュームスナップショットマッピング、及びその他のために使用することができる。マッピングテーブルは、ストレージデバイス176a〜176mに記憶することができる。図2に示す図は、マッピングテーブルの構成及び記憶の1つの実施形態の論理表現を表す。図示の各レベルは、異なる期間に対応するマッピングテーブルエントリを含むことができる。例えば、レベル「1」は、レベル「2」に記憶されている情報よりも古い情報を含むことができる。同様に、レベル「2」は、レベル「3」に記憶されている情報よりも古い情報を含むことができる。図2に示すレコード、ページ及びレベルに記憶される情報は、ストレージデバイス176a〜176m内にランダムアクセス方式で記憶することができる。また、所与のマッピングテーブルエントリの一部又は全部のコピーを、RAM172、コントローラ174内のバッファ、記憶媒体130、及びプロセッサ122内の、又はプロセッサ122に結合された1又はそれ以上のキャッシュに記憶することもできる。様々な実施形態では、(後で図4に示すように)レベルの一部であるマッピングの各レベルに、対応するインデックスを含めることができる。このようなインデックスは、マッピングテーブルエントリについての、及びこれらのエントリがレベル内のどこに記憶されているかについての識別符号(例えば、ページの識別符号)を含むことができる。他の実施形態では、マッピングテーブルエントリに関連するインデックスを、論理的にレベル自体の一部ではない別個の1又は複数のエンティティとすることができる。
【0035】
一般的に言えば、各マッピングテーブルは、一連の行及び列を含む。マッピングテーブルには、1つのレコードを行として記憶することができる。レコードは、エントリと呼ぶこともできる。1つの実施形態では、レコードが、キーを含む少なくとも1つのタプルを記憶する。タプルは、ストレージサブシステム170に記憶されたデータ構成要素の識別又は検索を行うために使用するポインタなどのデータを含むデータフィールドを含むこともできる(又は含まなくてもよい)。なお、様々な実施形態では、ストレージサブシステムが、内部マッピング機構を有するストレージデバイス(例えば、SSD)を含むことができる。このような実施形態では、タプル内のポインタ自体が実際の物理アドレスでなくてもよい。むしろ、ポインタは、ストレージデバイスがデバイス内の物理的位置にマッピングする論理アドレスであってもよい。この論理アドレスと物理的位置との間の内部マッピングは、時間と共に変化することがある。他の実施形態では、マッピングテーブル内のレコードがキーフィールドのみを含み、その他のさらなる関連データフィールドを含まないこともある。テーブル内の列又はフィールドには、所与のレコードに対応するデータ構成要素に関連する属性を記憶することができる。図2に示すField0〜FieldNなどのフィールドには、有効なインジケータ、データエイジ及びデータサイズなどのステータス情報を記憶することができる。様々な実施形態では、各列が、所与のタイプに対応する情報を記憶する。いくつかの実施形態では、選択したフィールドに圧縮技術を利用することができるが、場合によっては、そのフィールドの圧縮表現の長さがゼロビットになることもある。なお、以下の説明では、一般にマッピングテーブルをマッピングアドレス(仮想−物理アドレス)として説明するが、他の実施形態では、キーがファイル識別子又はオブジェクト識別子になるようにテーブル、方法及び機構を適用することもできる。例えば、このような実施形態では、システムをファイルサーバ又はオブジェクトサーバとして使用することができる。様々な実施形態では、本明細書で説明する方法及び機構を使用してブロック、オブジェクト及びファイルに対応し、これらの間の空間を動的に移動させることができる。このような数多くの実施形態が可能である。
【0036】
キーとは、マッピングテーブル内の、データの1行を別の行と区別できるエンティティのことである。各行は、エントリ又はレコードと呼ぶこともできる。キーは、単一の列であることも、或いはレコードを識別するために使用される一群の列から成ることもできる。いくつかの実施形態では、キーが、単一の値ではなく値の範囲に対応することができる。例えば、範囲に対応するキーは、範囲の始点及び終点として、又は始点及び長さとして、又はその他の方法で表すことができる。また、キーに対応する範囲は、範囲又は個々の値を含む他のキーのいずれかと重複することがある。1つの例では、アドレス変換マッピングテーブルが、ボリューム識別子(ID)、論理アドレス又は仮想アドレスなどのアドレス、スナップショットID及びセクタ番号などを含むキーを利用することができる。受け取った所与の読み込み/書き込みストレージアクセス要求は、特定のボリューム、セクタ及び長さを識別することができる。セクタは、ボリュームに記憶されたデータの論理ブロックとすることができる。セクタは、異なるボリューム上では異なるサイズを有することができる。アドレス変換マッピングテーブルは、ボリュームをセクタサイズ単位でマッピングすることができる。
【0037】
ボリューム識別子(ID)は、ボリュームID及び対応する現在のスナップショットIDを搬送するボリュームテーブルにアクセスするために使用することができる。この情報及び受け取ったセクタ番号を使用して、アドレス変換マッピングテーブルにアクセスすることができる。従って、このような実施形態では、ボリュームID、スナップショットID及び受け取ったセクタ番号の組み合わせが、アドレス変換マッピングテーブルにアクセスするためのキー値となる。1つの実施形態では、アドレス変換マッピングテーブル内のレコードがボリュームIDによってソートされた後に、セクタ番号、そしてスナップショットIDによってソートされる。この順序付けにより、異なるスナップショット内の異なるバージョンのデータ構成要素を共にグループ化することができる。従って、ストレージアクセス読み込み要求の検索中には、ストレージデバイス176a〜176mに対する読み込み動作を少なくして、対応するデータ構成要素を見つけることができる。
【0038】
アドレス変換マッピングテーブルは、データストレージサブシステム170内の受け取ったデータストレージアクセス要求に対応するデータ構成要素を記憶する位置を示す物理ポインタ値を搬送することができる。キー値は、マッピングテーブルに記憶された1又はそれ以上のキー値と比較することができる。説明を容易にするために、図示の例では「0」、「2」及び「12」などの単純なキー値を示している。この物理ポインタ値は、対応するレコード内のフィールドの1つ又はそれ以上に記憶することができる。
【0039】
物理ポインタ値は、セグメント識別子(ID)、及び記憶位置を識別する物理アドレスを含むことができる。セグメントは、ストレージデバイス176a〜176mの各々における基本割り当て単位とすることができる。セグメントは、独立装置による冗長アレイ(RAID)レベル及びデータタイプを有することができる。割り当て中、セグメントは、対応する記憶のために選択されたストレージデバイス176a〜176mの1つ又はそれ以上を有することができる。1つの実施形態では、ストレージデバイス176a〜176mのうちの1又はそれ以上の選択されたストレージデバイスの各々において、セグメントに等量の記憶スペースを割り当てることができる。データストレージアクセス要求は複数のセクタに対応することができ、これにより複数の平行検索を行えるようになる。書き込み要求は、RAM172などのNVRAMバッファに入れることができ、クライアントコンピュータ110a〜110cのうちの対応するクライアントコンピュータに書き込み完了確認応答を送信することができる。その後、非同期処理により、バッファされた書き込み要求をストレージデバイス176a〜176mにフラッシュすることができる。
【0040】
別の例では、図2に示すマッピングテーブルを重複排除テーブルとすることができる。重複排除テーブルは、ストレージアクセス要求に関連するデータ構成要素から求めたハッシュ値を含むキーを利用することができる。重複排除動作の最初のステップは、読み込み/書き込み要求、ガーベージコレクション動作及びトリミング動作などの他の動作と同時に行うことができる。所与の書き込み要求では、クライアントコンピュータシステム110a〜110cの1つから送信されたデータが、バイトストリームなどのデータストリームの場合がある。当業者には周知のように、データストリームは、一連の固定長又は可変長のチャンクに分割することができる。チャンクアルゴリズムは、データストリームを、「チャンク」と呼ぶことができる別個のデータ構成要素に分割することができる。チャンクは、データのサブファイル内容アドレス可能単位とすることができる。様々な実施形態では、テーブル又はその他の構造を用いて、所与のファイルタイプ又はデータタイプに使用すべき特定のチャンクアルゴリズムを決定することができる。ファイルタイプは、そのファイル名拡張子、個別識別情報、データ自体の内容、又はその他を参照することにより判断することができる。その後、結果として得られたチャンクを共有できるように、これらのチャンクをデータストレージアレイ120a〜120bの1つに記憶することができる。このようなチャンクは、様々な方法で別個に記憶することも、又は共にグループ化することもできる。
【0041】
様々な実施形態では、チャンクからより大きなデータ構成要素の再構築を可能にするデータ構造によってチャンクを表すことができる(例えば、記憶したデータの1又はそれ以上のより小さなチャンクに基づいて特定のファイルを再構築することができる)。対応するデータ構造は、関連する計算したハッシュ値、データストレージアレイ120a〜120bの1つにおけるその位置への(物理及び/又は論理)ポインタ、及びその長さを含む対応するチャンクを記録することができる。各データ構成要素に関し、重複排除アプリケーションを使用して対応するハッシュ値を計算することができる。例えば、Message−Digest algorithm 5(MD5)、Secure Hash Algorithm(SHA)、又はその他などのハッシュ関数を用いて対応するハッシュ値を計算することができる。受け取った書き込み要求に対応する所与のデータ構成要素が、データストレージアレイ120a〜120bの1つに既に記憶されているかどうかを知るために、所与のデータ構成要素の計算したハッシュ値のビット(又はハッシュ値のビットの一部)を、データストレージアレイ120a〜120bの1つ又はそれ以上に記憶されたデータ構成要素のハッシュ値内のビットと比較することができる。
【0042】
マッピングテーブルは、図2に示すような1又はそれ以上のレベルを含むことができる。マッピングテーブルは16〜64のレベルを含むことができるが、マッピングテーブル内で別の数のレベルをサポートすることも可能であり企図される。図2には、説明を容易にするために、レベル「1」、レベル「2」、及びレベル「N」で表す3つのレベルを示している。マッピングテーブル内の各レベルは、1又はそれ以上のパーティションを含むことができる。1つの実施形態では、各パーティションが4キロバイト(KB)のページである。例えば、図示のように、レベル「N」はページ210a〜210gを含み、レベル「2」はページ210h〜210jを含み、レベル「1」はページ210k〜210nを含む。マッピングテーブル内のレベルの各々について他のパーティションサイズを選択することも可能である。また、1又はそれ以上のレベルが、そのレベル自体である単一のパーティションを有することも可能である。
【0043】
1つの実施形態では、マッピングテーブル内の複数のレベルが時間によってソートされる。例えば、図2では、レベル「1」をレベル「2」よりも古いものとすることができる。同様に、レベル「2」を「レベル「N」よりも古いものとすることができる。1つの実施形態では、マッピングテーブルに1又はそれ以上の新規レコードを挿入する条件が検出された時に、新たなレベルを作成することができる。様々な実施形態では、新たなレベルを作成する場合、この新たなレベルに与えられる数字/表示は、この新たなレベルよりも時間的に先行するレベルに与えられる数字よりも大きい。例えば、直近に作成されたレベルに8という値が割り当てられている場合、新たに作成されるレベルには9という値を割り当てることができる。このようにして、レベル間の時間的関係を確立又は決定することができる。理解できるように、数値は厳密に連続する必要はない。また、別の実施形態では、新たなレベルの方が小さな数字表示を有するように番号付けスキームを逆にすることもできる。さらに、他の実施形態では、非数値的表示を利用してレベル同士を区別することができる。このような数多くの実施形態が可能であり企図される。各2番目に古いレベルは、前の若いレベルのラベル整数値から1だけ減分したラベルを有する。図示していない別個のテーブルを用いてマッピングテーブルを論理的に記述することもできる。例えば、この別個テーブルの各エントリは、所与のレベルID、及びこの所与のレベルIDに記憶されたページIDのリストを含むことができる。
【0044】
新規レコードを挿入するための新たな最上位レベルを作成することにより、マッピングテーブルは新規レコードを加えることにより更新される。1つの実施形態では、1つのレベルを新たな最上位レベルとして作成し、この1つのレベルに新規レコードの各々を挿入する。別の実施形態では、マッピングテーブルに挿入する前に、重複キーを探して新規レコードを検索することができる。1つのレベルを新たな最上位レベルとして作成することができる。重複キーを記憶した所与のレコードが見つかった場合、この所与のレコードよりも前にバッファされたレコードの各々を1つのレベルに挿入することができる。新規レコードは、順次的な要求の完了などのメモリ順を維持するようにバッファすることができる。その後、重複キーを記憶した別のレコードが見つからない限り、別の1つのレベルを作成し、この別の1つのレベルに新規レコードの残りを挿入することができる。このようなレコードが見つかった場合にはこれらのステップを繰り返す。新規レコードの挿入により、マッピングテーブル内の新規レコードの1つと同じキー値を記憶している既存のレコードがインプレースで編集又は上書きされることはない。
【0045】
下位レベルが新たなレベルよりも大きくなるとレベルのサイズが増えるように示しているが、上位レベルが隣接レベルよりも大きくなったり又は小さくなったりを繰り返すこともある。マッピングテーブルに挿入される新規レコードの数は時間と共に変化し、流動的なレベルサイズを形成することができる。下位レベルが平坦化されることにより、下位レベルの方が新たなレベルより大きくなることもある。特定の条件が検出された場合、2又はそれ以上の下位レベルを単一レベルに平坦化することができる。さらなる詳細については後述する。
【0046】
マッピングテーブルに記憶されているレコードのインプレース編集が行われない状況では、上位レベルに配置された新たなレコードが、下位レベルに配置された同じキー値を記憶しているレコードを上書きすることがある。例えば、所与のキー値がマッピングテーブルにアクセスした場合、この所与のキー値に一致するキー値を保持するレコードを記憶した1又はそれ以上のレベルが見つかることがある。このような場合には、これらの1又はそれ以上のレベルのうちの最も上位のレベルを選択して、対応するレコードに記憶されている情報をアクセスの結果として提供することができる。さらなる詳細については後述する。また、1又はそれ以上の新規レコードをマッピングテーブルに挿入するための検出される条件及び情報の記憶に関するさらなる詳細についても後述する。
【0047】
1つの実施形態では、所与のページ内のエントリをキー別にソートすることができる。例えば、エントリに含まれるキーに従ってエントリを昇順でソートすることができる。また、様々な実施形態では、あらゆる所望のソート順に従ってレベル内のページをソートすることもできる。様々な実施形態では、(例えば、キー値又はその他に従って)レベル内のページをソートすることもできる。図2の例では、レベルNのページ210aが、キー値に従って昇順でソートされたレコードを含む。様々な実施形態では、1又はそれ以上の列を用いてキー値を記憶することができる。図2の例では、各タプル内に、キー値を記憶するための2つの列又はフィールドを示している。このようなキー値を利用すれば、レコードを所望の順序でソートすることができる。ソートは、レコードのキー値のいずれか、又はレコードのキー値のいずれかの組み合わせに基づいて行うことができる。図示の例では、最初のレコードが、2つの列に記憶された0及び8を含むキー値を記憶し、最後のレコードが、12及び33を含むキー値を記憶している。この図示の例では、ページ210a内の最初のレコードと最後のレコードの間の各ソートされたレコードが、最初の列に0〜12までのキー値を記憶し、これらのレコードは、この最初の列に(少なくとも部分的に)基づいて、キー値を0〜12までの昇順で記憶するように配置されている。同様に、ページ210bに含まれるソートされたレコードでは、最初のレコードがキー値12及び39を記憶し、最後のレコードがキー値31及び19を記憶している。この図示の例では、ページ210b内の最初のレコードと最後のレコードの間の各ソートされたレコードが、最初の列に12〜31までのキー値を記憶し、これらのレコードは、キー値を12〜31までの昇順で記憶するように配置されている。
【0048】
上記の他に、レベルN内のページも所望の順序に従ってソートされる。様々な実施形態では、レベル内のページを、ページ内のエントリのソート順を反映するようにソートすることができる。例えば、レベル内のページをキー値に従って昇順でソートすることができる。ページ210a内の最後のキー値よりもページ210b内の最初のキー値の方が大きいので、このソート順では、ページ210bがページ210aに後続する。従って、ページ210gは、ページ210a〜210f(図示せず)に含まれるキー値よりも大きなキー値を有するエントリを含む。このようにして、レベル内の全てのエントリが共通スキームに従ってソートされる。これらのエントリは、ページ又はその他のサイズ単位に単純に細分化される。理解できるように、望み通りに他のソートスキームを使用することもできる。
【0049】
ここで図3Aを参照すると、マッピングテーブルへのアクセスに使用する一次インデックスの1つの実施形態の汎用ブロック図を示している。キージェネレータ304は、1又はそれ以上の要求者データ入力302を受け取ることができる。1つの実施形態では、マッピングテーブルがアドレス変換ディレクトリテーブルである。所与の受け取った読み込み/書き込み要求は、特定のボリューム、セクタ及び長さを識別することができる。キージェネレータ304は、ボリューム識別子(ID)、論理又は仮想アドレス、スナップショップID及びセクタ番号を含むクエリキー値306を生成することができる。他の組み合わせも可能であり、その他の又はさらなる値を使用することもできる。クエリキー値306の様々な部分を、マッピングテーブル内の連続していても又はしていなくてもよい列に記憶された値と比較することができる。図示の例では、説明を容易にするためにキー値「22」を使用する。
【0050】
上述したように、キージェネレータ304に関連するチャンクアルゴリズム及び/又はセグメント化アルゴリズムの両方により、ストレージアクセス要求に対応するデータ302を受け取ることができる。これらのアルゴリズムは、1又はそれ以上のデータ構成要素を生成し、このデータ構成要素毎に対応するハッシュ値又はクエリキー値306を計算するためのハッシュ関数を選択することができる。結果として得られるハッシュ値を用いて、重複排除テーブルにインデックスを付けることができる。
【0051】
図3Aに示すように、一次インデックス310は、ストレージデバイス176a〜176mに記憶されているデータの位置識別情報を提供することができる。例えば、再び図2を参照して、レベル「1」、レベル「2」及びレベル「N」の各々に、対応する一次インデックス310(又はこの一部)を論理的に含めることができる。この場合も、各レベル及び対応する各一次インデックスをストレージデバイス176a〜176mにランダムアクセス方式で物理的に記憶することができる。
【0052】
1つの実施形態では、一次インデックス310をパーティション312a〜312bなどのパーティションに分割することができる。1つの実施形態では、パーティションのサイズが4キロバイト(KB)のページから256KBに及ぶことができるが、他のサイズも可能であり企図される。一次インデックス310の各エントリはキー値を記憶することができる。また、各エントリは、対応する一意の仮想ページ識別子(ID)及びキー値に対応するレベルIDを記憶することもできる。各エントリは、妥当性情報などの対応するステータス情報を記憶することができる。クエリキー値を用いて一次インデックス310にアクセスした場合、キー値に一致又は別様に対応する1又はそれ以上のエントリを求めてインデックス310内のエントリを検索することができる。次に、一致するエントリからの情報を使用して、受け取った読み込み又は書き込み要求の対象である記憶位置を識別するマッピングを見つけて取り出すことができる。換言すれば、インデックス310はマッピングの位置を識別する。1つの実施形態では、インデックス内でヒットした場合、ストレージデバイス176a〜176m内の、キー値及び対応する物理ポインタ値の両方を記憶しているページを識別する対応するページIDが提供される。この対応するページIDにより識別されるページをキー値によって検索し、物理ポインタ値を見つけることができる。
【0053】
図3Aの例では、受け取った要求がキー「22」に対応する。従って、このキーを用いてインデックス310にアクセスする。インデックス310を検索すると、パーティション312b内のエントリがヒットする。この場合の一致するエントリは、ページ28及びレベル3などの情報を含む。この結果に基づいて、マッピングテーブルのレベル3内のページ28として識別されるページ内で、要求に望ましいマッピングが見つかる。次に、この情報を使用してマッピングテーブルへのアクセスを行い、所望のマッピングを取得することができる。一次インデックス310へのアクセスがストレージへのアクセスを必要とする場合、所望のマッピングを取得するために少なくとも2回のストレージアクセスが必要になる。従って、上述したような様々な実施形態では、ストレージデバイスへの1回のアクセスを省略するために、一次インデックスの一部をキャッシュし、或いは比較的高速なアクセスメモリに別様に記憶する。様々な実施形態では、マッピングテーブルの一次インデックス全体をキャッシュする。いくつかの実施形態では、一次インデックスが、その全体をキャッシュするには大きくなりすぎ、又は望むよりも別様に大きくなる場合、キャッシュ内で二次、三次又はその他のインデックス部分を用いてサイズを低減することができる。二次タイプのインデックスについては後述する。上記の他に、様々な実施形態では、最新のヒットに対応するマッピングページも、少なくとも一定期間にわたってキャッシュされる。このようにして、一時的局所性を有するアクセスを示す処理に対し、より迅速に対処することができる(すなわち、最近アクセスされた位置については、そのマッピングがキャッシュされ容易に利用可能となる)。
【0054】
ここで図3Bを参照すると、マッピングテーブルにアクセスするために使用するキャッシュされた一次インデックスの1つの実施形態の汎用ブロック図を示している。図3Aの回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。キャッシュされた一次インデックス314は、一次インデックス310の各々に記憶されている、マッピングテーブル内の複数のレベルの情報のコピーを含むことができる。一次インデックス314は、RAM172、コントローラ174内のバッファ、記憶媒体130及びプロセッサ122内のキャッシュのうちの1つ又はそれ以上に記憶することができる。1つの実施形態では、一次インデックス314をキー値によってソートすることができるが、その他のソートも可能である。一次インデックス314は、パーティション316a〜316bなどのパーティションに分割することもできる。1つの実施形態では、パーティション316a〜316bが、一次インデックス310内のパーティション312a〜312bと同じサイズを有することができる。
【0055】
一次インデックス310と同様に、一次インデックス314の各エントリも、キー値、対応する一意の仮想ページ識別子(ID)、キー値に対応するレベルID、妥当性情報などのステータス情報のうちの1つ又はそれ以上を記憶することができる。一次インデックス314は、クエリキー値306によってアクセスされた場合、ストレージデバイス176a〜176m内の、キー値及び対応するポインタ値の両方を記憶しているページを識別する対応するページIDを搬送することができる。この対応するページIDにより識別されるページをキー値によって検索し、ポインタ値を見つけることができる。図示のように、一次インデックス314は、同じキー値を記憶している複数のレコードを有することができる。従って、所与のキー値の検索から複数のヒットが得られることがある。1つの実施形態では、レベルIDの値が最も高いヒットを選択することができる(或いは最も若いレベル又は最新のエントリを識別するためにあらゆるインジケータが使用される)。この複数のヒットから1つのヒットを選択することは、ここに示していないマージロジックによって行うことができる。マージロジックのさらなる説明については後述する。
【0056】
ここで図4を参照すると、マッピングテーブル、及びマッピングテーブルへのアクセスに使用する一次インデックスの別の実施形態の汎用ブロック図を示している。図3Aの回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。マッピングテーブル340は、図2に示すマッピングテーブルと同様の構造を有することができる。しかしながら、対応する一次インデックス310のレベル毎の記憶については図示していない。一次インデックス部分310a〜310iの1又はそれ以上のコピーは、インデックスコピー330(例えば、キャッシュされたコピー)に含めることができる。一般に、コピー330は、図3Bに示すキャッシュされたインデックスに対応することができる。インデックスコピー330内の情報は、RAM172、コントローラ174内のバッファ、記憶媒体130、及びプロセッサ122内のキャッシュに記憶することができる。図示の実施形態では、一次インデックス310a〜310i内の情報を、マッピングのページと共にストレージデバイス176a〜176mに記憶することができる。図示の一次インデックス310iなどの一次インデックスへのアクセスに使用できる二次インデックス320も示している。同様に、マッピングテーブル340へのアクセス及びその更新も、上述したように行うことができる。
【0057】
マッピングテーブル340は、レベル「1」〜レベル「N」などの複数のレベルを含む。図示の例では、レベルの各々が複数のページを含む。図示のように、レベル「N」は、ページ「0」〜「D」を含み、レベルN−1は、ページ「E」〜「G」を含み、以下同様である。この場合も、マッピングテーブル310内のレベルを時間別にソートすることができる。レベル「N」は、レベル「N−1」よりも若いものとすることができ、以下同様である。マッピングテーブル340には、少なくともキー値によってアクセスすることができる。図示の例では、マッピングテーブル340が、キー値「27」及びページID「32」によってアクセスされる。例えば、1つの実施形態では、レベルID「8」を使用して、検索すべきマッピングテーブル340の特定のレベル(又は「サブテーブル」)を識別することができる。所望のサブテーブルを識別し終えると、ページIDを使用してサブテーブル内の所望のページを識別することができる。最後に、キーを使用して所望のページ内の所望のエントリを識別することができる。
【0058】
上述したように、キャッシュされたインデックス330にアクセスすると複数のヒットが得られることがある。1つの実施形態では、これらの複数のヒットの結果をマージロジック350に提供し、このマージロジック350が、どのヒットを使用してマッピングテーブル340にアクセスするかを識別する。マージロジック350は、ストレージコントローラに含まれるハードウェア及び/又はソフトウェアを表すことができる。1つの実施形態では、マージロジック350が、直近の(最新の)マッピングに対応するヒットを識別するように構成される。このような識別は、エントリの対応するレベルの識別又はその他に基づくことができる。図示の例では、レベル8、ページ32、キー27に対応するクエリが受け取られる。このクエリに応答して、レベル8のページ32がアクセスを受ける。ページ32内でキー27が見つかった(ヒットした)場合、対応する結果が戻される(図示の例ではポインタxF3209B24)。ページ32内でキー27が見つからなかった場合、ミスインジケーションが戻される。この物理ポインタ値をマッピングテーブル340から出力して、キー値「27」に対応するストレージアクセス要求に対処することができる。
【0059】
1つの実施形態では、マッピングテーブル340がインラインマッピングをサポートする。例えば、十分に小さなターゲットを有することが検出されたマッピングは、ストレージデバイス176a〜176m内にユーザデータを記憶している実際の物理セクタを伴わずに表すことができる。一例として、ユーザデータ内の反復パターンを挙げることができる。対応するマッピングは、反復パターン(例えば、一連のゼロ)の複数のコピーをストレージデバイス176a〜176mにユーザデータとして実際に記憶するのではなく、マッピングテーブル内のフィールド0〜フィールドNのフィールドのうちの1つなどのステータス情報内でマーク付けされた、読み込み要求に対してどのデータ値を戻すべきかを示すインジケーションを有することができる。しかしながら、ストレージデバイス176a〜176m内の対象の位置には、このユーザデータは実際に記憶されていない。また、一次インデックス310及び使用できるあらゆる追加のインデックス(ここには図示せず)のステータス情報内にインジケーションを記憶することもできる。
【0060】
上記の他に、様々な実施形態では、ストレージシステムが、複数のバージョンのデータ構成、ストレージスキーム及びその他を同時にサポートすることができる。例えば、システムのハードウェア及びソフトウェアが進化するにつれ、新たな機能が組み込まれ又は別様に提供されることがある。新しいデータ、インデックス及びマッピング(例えば)は、これらの新たな機能を活用することができる。図4の例では、新たなレベルNがシステムの1つのバージョンに対応し、それよりも古いレベルN−1が以前のバージョンに対応することができる。これらの異なるバージョンに対応するために、このレベルによってどのバージョン、どの機能及び圧縮スキームなどが使用されるかを示すメタデータを各レベルに関連付けて記憶することができる。このメタデータは、インデックスの一部として、ページ自体として、又はこれらの両方として記憶することができる。アクセスが行われると、このメタデータは、いかにしてデータを正しく処理すべきかを示す。また、システムを休止させる必要なく、新たなスキーム及び機能を動的に適用することもできる。このようにして、システム更新の柔軟性を高め、新たなスキーム及び方法を反映するために古いデータを再構築する必要性をなくす。
【0061】
ここで図5Aを参照すると、読み取りアクセスに対処する方法の1つの実施形態を示している。ネットワークアーキテクチャ100内に具体化される構成要素及び上述したマッピングテーブル340は、一般に方法500に従って動作することができる。本実施形態のステップは、説明目的で順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【0062】
クライアント110a〜110cの1つからデータストレージアレイ120a〜120bの1つに、読み込み及び記憶(書き込み)要求を搬送することができる。図示の例では、読み込み要求500を受け取り、ブロック502において対応するクエリキー値を生成することができる。いくつかの実施形態では、この要求自体がインデックスへのアクセスに使用するキーを含むことができ、キーの「生成」502が不要である。上述したように、クエリキー値は、ボリュームID、受け取った要求に関連する論理アドレス又は仮想アドレス、スナップショットID及びセクタ番号などを含む仮想アドレスインデックスとすることができる。重複排除のために使用される実施形態では、ハッシュ関数又はその他の関数を用いてクエリキー値を生成することができる。マッピングテーブルへのアクセスに使用されるクエリキー値には他の値も可能である。
【0063】
ブロック504において、このクエリキー値を用いて、1又はそれ以上のキャッシュされたインデックスにアクセスし、キー値に対応するマッピングを記憶している可能性のあるマッピングテーブルの1又はそれ以上の部分を識別することができる。また、最近使用したキャッシュされているマッピングを検索することもできる。キャッシュされているマッピングのヒットが検出された場合(ブロック505)、このキャッシュされているマッピングを使用して、要求されたアクセスを実行することができる(ブロック512)。キャッシュされているマッピングのヒットがなかった場合、キャッシュされているインデックスのヒットがあるか否かを判定することができる(ブロック506)。ヒットがあった場合、このヒットに対応する結果を使用してマッピングテーブルを識別し、これにアクセスすることができる(ブロック508)。例えば、一次インデックス310では、クエリキー値を記憶しているエントリが、マッピングテーブル内の単一の特定のページを識別する一意の仮想ページIDを記憶していることもある。この単一の特定のページは、クエリキー値及び関連する物理ポインタ値の両方を記憶することができる。ブロック508において、マッピングテーブルの識別された部分にアクセスし、クエリキー値を使用して検索を行うことができる。これにより、マッピングテーブルの結果が戻され(ブロック510)、これを使用して元々の読み込み要求のターゲット位置に対応するストレージアクセスを行うことができる(ブロック512)。
【0064】
いくつかの実施形態では、読み込み要求に応答するインデックスクエリがミスを生じることがある。このようなミスは、インデックスの一部しかキャッシュされていないこと、又はエラー状態(例えば、存在しない位置への読み取りアクセス、アドレス破損など)に起因して生じ得る。このような場合、記憶されているインデックスへのアクセスを行うことができる。記憶されているインデックスへのアクセスによりヒットが生じた場合(ブロック520)には結果が戻され(ブロック522)、これを使用してマッピングテーブルにアクセスする(ブロック508)。一方、記憶されているインデックスへのアクセスによりミスが生じた場合、エラー状態を検出することができる。エラー状態の処理は、様々な所望の方法のいずれかで行うことができる。1つの実施形態では、例外が生じることがあり(ブロック524)、その後この例外は要望通りに処理される。1つの実施形態では、ブロック510においてマッピングテーブルの一部が戻される。様々な実施形態では、この部分が、4KBのページ又はその他とすることができるページである。上述したように、ページ内のレコードは、含まれている内容をより高速に検索できるようにソートすることができる。
【0065】
1つの実施形態では、マッピングテーブルが、各ページに情報を記憶するために従来のデータベースシステム法を利用する。例えば、マッピングテーブル内の各レコード(或いは行又はエントリ)を次々に記憶する。この方法は、行指向データベース又は行記憶データベースにおいて、さらには相関データベースと共に使用することができる。これらのタイプのデータベースは、値に基づく記憶構造を利用する。値に基づく記憶(VBS)アーキテクチャは、一意のデータ値を1度だけ記憶し、自動生成されたインデックスシステムが全ての値のコンテキストを保持する。様々な実施形態では、データを行毎に記憶することができ、行内の列(フィールド)に対して圧縮を使用することができる。いくつかの実施形態では、使用する技術が、基準値を記憶してオフセットのための小さなフィールドサイズを有すること、及び/又は基準値の組を有することを含み、行内の列は、基準セレクタ及びこの基準からのオフセットで構成される。いずれの場合にも、パーティション内(例えば、その先頭)に圧縮情報を記憶することができる。
【0066】
いくつかの実施形態では、マッピングテーブルが、各ページに情報を記憶するために列指向データベースシステム(列記憶)法を利用する。列記憶では、各データベーステーブル列が別個に記憶される。また、同じ列に属する属性値を連続して記憶し、圧縮し、高密度に詰め込むことができる。従って、ページ内などのテーブルの列の一部を比較的素早く読み込むことができる。列データは一様なタイプとすることができ、行指向データでは利用できないことがある記憶サイズ最適化を使用することができる。Lempel−Ziv−Welch(LZ)及びランレングス符号化(RLE)などの圧縮スキームには、圧縮すべき隣接データの検出された類似性を活用するものもある。さらに、以下でより完全に説明するように、他の圧縮スキームでは、値を基準値との差分として符号化することができ、従ってこの差分を表すために必要なビット数は、完全な値を表すために必要なビット数よりも少なくて済む。ページ内の個々のレコードを識別してインデックスを付ける圧縮アルゴリズムを選択することができる。マッピングテーブル内のレコードを圧縮すると、細粒度のマッピングが可能になる。様々な実施形態では、特定のデータ部分に使用する圧縮のタイプを、そのデータに関連付けて記憶することができる。例えば、圧縮のタイプを、圧縮されるデータと同じページの一部(例えば、何らかのタイプのヘッダ内に)又はその他としてインデックスに記憶することができる。このようにして、ストレージシステム内で複数の圧縮技術及びアルゴリズムを並行して使用することができる。また、様々な実施形態では、データを記憶する際に、ページデータを記憶するために使用する圧縮のタイプを動的に決定することもできる。1つの実施形態では、圧縮されるデータの性質及びタイプ、及び/又は圧縮技術の予想リソース要件、及びシステム内の現在利用できるリソースに少なくとも部分的に基づいて、様々な圧縮技術の1つを選択することができる。いくつかの実施形態では、複数の圧縮技術を実行した後に、最良の圧縮を示す技術を選択してデータの圧縮に使用する。このような数多くの方法が可能である。
【0067】
マッピングテーブルのレベルのいずれかにおいてクエリキー値306の一致が見つかった場合(ブロック508)、ブロック510において、マージロジック350にヒットについての1又はそれ以上のインジケーションを搬送することができる。例えば、図4に示すように、レベル「1」からレベル「J」に1又はそれ以上のヒットインジケーションを搬送することができる。マージロジック350は、ヒットインジケーションを搬送するレベル「1」から「J」のうちの最も若いレベルでもある最上位レベルを選択することができる。選択されたレベルは、対応するレコードに記憶された情報をアクセスの結果として提供することができる。
【0068】
ブロック512において、選択されたページの一致するレコード内の1又はそれ以上の対応するフィールドを読み込んで対応する要求を処理することができる。1つの実施形態では、ページ内のデータが圧縮フォーマットで記憶されている場合、このページを解凍して対応する物理ポインタ値を読み出す。別の実施形態では、一致するレコードのみを解凍して対応する物理ポインタ値を読み出す。1つの実施形態では、物理ポインタ値全体を、マッピングテーブルと、対応するターゲットの物理的位置とに分割することができる。従って、ユーザデータを記憶している複数の物理的位置にアクセスしてデータストレージアクセス要求を完了することができる。
【0069】
ここで図5Bを参照すると、受け取った書き込み要求に対応する方法の1つの実施形態を示している。受け取った書き込み要求(ブロック530)に応答して、この要求に対応する新たなマッピングテーブルエントリを作成することができる(ブロック532)。1つの実施形態では、書き込み要求の仮想アドレスと、対応するデータ構成要素を記憶している物理的位置とをペアにする新たな仮想−物理アドレスマッピングをマッピングテーブルに加えることができる(ブロック534)。様々な実施形態では、新たなマッピングを他の新たなマッピングと共にキャッシュして、マッピングテーブルエントリの新たな最上位レベルに加えることができる。その後、永続ストレージへの書き込み動作(ブロック536)を行うことができる。様々な実施形態では、永続ストレージ内のマッピングテーブルに新たなマッピングテーブルエントリを書き込むことを、効率が良いと見なされる後の時点まで実行しないでおくことができる(ブロック538)。上述したように、固体ストレージデバイスを使用するストレージシステムでは、ストレージからの読み込みよりもストレージへの書き込みの方がはるかに時間がかかる。従って、ストレージへの書き込みは、全体的なシステム性能に対する影響が最小になるようにスケジュールされる。いくつかの実施形態では、マッピングテーブルへの新規レコードの挿入を、他のより大規模なデータ更新と組み合わせることができる。このように更新を組み合わせると、書き込み動作をより効率的にすることができる。なお、5Bの方法では、説明を容易にするために、本明細書で説明する各方法と同様に動作が特定の順序で行われるものとして説明している。しかしながら、実際にはこれらの動作は異なる順序で行うことができ、場合によってはこれら動作の様々な動作を同時に行うこともできる。このような全ての実施形態が企図される。
【0070】
上記の他に、いくつかの実施形態では重複排除機構を使用することもできる。図5Bには、一般に重複排除システム及び重複排除方法に対応する動作550を示している。図示の例では、受け取った書き込み要求に対応するハッシュを生成することができ(ブロック540)、これを使用して重複排除テーブルにアクセスする(ブロック542)。重複排除テーブル内でヒットがあった(すなわち、既にシステム内にデータのコピーが存在している)場合(ブロック544)、重複排除テーブルに新たなエントリを追加して(ブロック548)新たな書き込みを反映することができる。このような場合、ストレージにデータ自体を書き込む必要はなく、受け取った書き込みデータは破棄することができる。或いは、重複排除テーブル内にミスがある場合、新規データのための新たなエントリを作成して重複排除テーブルに記憶する(ブロック546)。また、ストレージへのデータの書き込みも行う(ブロック536)。さらに、インデックス内に新たなエントリを作成して新規データを反映することができる(ブロック538)。いくつかの実施形態では、インライン重複排除動作においてミスが生じた場合、この時点で重複排除テーブルへの挿入は行われない。代わりに、インライン重複排除動作中に、重複排除テーブル全体の一部のみ(例えば、重複排除テーブルのキャッシュ部分)に関してハッシュ値によるクエリを行うことができる。ミスが生じた場合には、新たなエントリを作成してキャッシュに記憶することができる。その後、ガーベージコレクション中に行われる動作などの重複排除動作の後処理中に、重複排除テーブル全体に関してハッシュ値によるクエリを行うことができる。ミスは、ハッシュ値が一意のハッシュ値であることを示すことができる。従って、ハッシュから物理ポインタへのマッピングなどの新たなエントリを重複排除テーブルに挿入することができる。或いは、重複排除の後処理中にヒットが検出された(すなわち、重複が検出された)場合、重複排除を行って、検出されたコピーの1つ又はそれ以上を削除することができる。
【0071】
上述したように、マッピングテーブルに関連するデータの符号化には、必要な記憶量を減少させるために様々な圧縮方式を使用することができる。ここで図5Cを参照すると、あるタプルの組を圧縮する方法の1つの実施形態を示している。この方法を使用して、マッピングテーブル又はその他のテーブルにエントリを書き込むことができる。まず、符号化したタプルの組を記憶すべき目標サイズ(ブロック560)、及びデフォルトの符号化アルゴリズム(ブロック561)を選択することができる。その後、この選択されたサイズ及びアルゴリズムに基づいて、符号化してテーブル内に記憶するタプルを選択する(ブロック562)。このような実施形態では、現在選択されている符号化方式を使用して各タプルの符号化サイズを計算する。タプルを追加することにより、組内に現在蓄積されているタプルが目標サイズを超える場合(条件付きブロック564)、システムは、符号化したタプルに必要な全空間を減少させるために、この時点までに蓄積されている全てのタプルにとってより良い符号化アルゴリズムを見つけようとすることができる(ブロック565)。より小さな符号化法が見つからなかった(ブロック565)場合、最も新しいタプルを削除し、現在の符号化法を使用して残りのタプルを書き込む(ブロック567)。より小さな符号化法が見つかった(ブロック565)場合、この新規のより小さな符号化が目標サイズ内に収まるかどうかを判断する(ブロック566)。新規の符号化が目標サイズ内に収まらない場合、最も新しく提供されたタプルを削除し、現在の符号化方法を使用して残りのタプルを符号化し、テーブルに書き込むことができる(ブロック567)。検討中の現在のタプルにより、組内に現在蓄積されているタプルが目標サイズを超えない場合(条件付きブロック564)、別のタプルを追加しようと試みることができる(ブロック562)。同様に、条件付きブロック566において、要件を満たす新規の符号化が見つかった場合、別のタプルを追加しようと試みることができる(ブロック562)。
【0072】
図5Dに、タプルを符号化する方法の1つの実施形態を示す。この例では、元々の符号化前のタプル584を示し、符号化ページ568内に符号化後のタプル580を示している。一般的に言えば、図示の例では、テーブル内の各フィールドを1つ又は2つの値を用いて表している。第1の値は、基準値を選択するために使用される基準値セレクタであり、第2の値は、選択された基準値からのオフセットである。1つの実施形態では、基準セレクタがbビットを含み、オフセットがkビットを含み、b及びkは整数である。値b及びkは、フィールド毎に別個に選択することができ、b及びkの一方又は両方がゼロの場合もある。各符号化後のフィールドでは、b及びkの値を最大2b個の基準と共に記憶することができ、これらの各々は、基準値を表すのに必要なだけのビット数とすることができる。bがゼロの場合、1つの基準のみが記憶される。従って、このようにして符号化される各フィールドには、符号化のために多くてもb+kビットしか必要とされない。エンコーダは、フィールドの全体的な符号化後のサイズを最小限に抑えるようにb及びkに関して異なる値を考慮することができ、通常、bの値が大きければkの値を小さくする必要がある。
【0073】
図5Dには、符号化前のタプル584、及び結果として得られる符号化後のページ568のサンプルを示している。このページはヘッダ570を含み、ヘッダ570の最初の2つの値は、各タプル内のフィールド数(572)及びページ内のタプル数(574)を含む。従って、ヘッダ570は、フィールド毎に値のテーブル又は組を1つ有する。このテーブルには、まず所与のフィールドの基準の数がリストされ、次にこの基準からのオフセットを符号化するために使用されるビット数kがリストされる。そして、ページには、ヘッダ内の情報を使用して符号化された各タプルが記憶される。例えば、ヘッダ570内の第1の値(572)は、各タプルに3つのフィールドが存在することを示す。第2の値(574)は、ページ568内に84個のタプルが存在することを示す。そして、次の3つのテーブル576a〜576Cは、3つのフィールドの各々の基準値及び符号化情報を示す。テーブル576Aは、第1のフィールドが1つの基準を有し、オフセットの符号化に4ビットが使用されることを示す。この第1のフィールドの唯一の基準は12である(すなわち、bはゼロである)。第2のテーブル576Bは、第2のフィールドに3つの基準が存在し、オフセットの符号化に3ビットが使用されることを示す。第2のフィールド576Bの3つの基準は、5、113及び203である。最後に、第3のテーブル576Cは、第3のフィールドが2つの基準を有し、オフセットの符号化に0ビットが使用されることを示す。
【0074】
符号化タプル580を見ると、様々な値を確認することができる。図示の例では、符号化タプル580の所与の行/列の値が、元々のタプルの同じ行/列の値に対応する。理解できるように、図中の値の順序及び位置は例示にすぎない。値及び対応する符号化値の実際の順序は、図示のものとは大きく異なることもある。第1のタプル582の第1のフィールドは3に符号化されているが、これは値15(符号化前の値)を基準である12から3オフセットしたもの(すなわち、15−12=3)として表すことができるからである。この例では、基準がたった1つであり、bはゼロであることに留意されたい。従って、このフィールドでは、基準セレクタ値の符号化にビットは使用されない。オフセット値3は、8ビット、32ビット又は64ビットを必要とし得る典型的な符号化よりも大幅に少ない4ビットを使用して符号化される。第1のタプル582Aの第2の値は、1,3に符号化されている。この1は、テーブル576B内で基準1(すなわち、選択基準113)が選択されたことを示し、3は、基準である113からのオフセットが3であることを示す。値1は2ビットで符号化され(基準の数よりも大きい又はこれに等しい2の最小累乗は22である)、値3は3ビットで符号化され、合計は5ビットになる。この値もまた、フィールドを素直に符号化するよりもはるかに小さい。最後に、最終フィールドは、どの基準を使用すべきかを示すインデックスとして符号化されている。この場合、オフセットを表すのにビットは使用されない。ここでは、第1のタプルが0を有するが、これは記憶値が4927であり、ヘッダ570内のフィールド576Cのテーブル内のエントリ(基準)が0だからである。従って、各タプルの全体的な符号化後の空間は、(0+4)+(2+3)+(1+0)=10ビットであり、符号化前の必要な空間よりも大きく減少している。
【0075】
様々な実施形態では、より大きな仮想アドレス又はLUN識別子に対応するために行うことがある最大フィールドサイズの増分を行う場合、ページを再符号化する必要がない。最悪の場合、より大きな基準値に対応するようにヘッダをわずかに修正する必要が生じることもあるが、これに必要な努力は最小限で済む。また、ブロックの範囲を新たな位置にコピーする時に行うことがある多くの値の一定量だけの修正も、影響を受ける各タプルを解凍して再符号化する必要なく、基準を単純に修正することによって可能になる。
【0076】
なお、特定のフィールドのb及びkの最適な又は別様に望ましい値を見つけるには、様々な異なる方法が存在する。図5Eに、符号化スキームを評価して複数の可能性から選択する方法の1つの実施形態を示す。図示の方法では、ページ内フィールドに記録すべき各一意の値をリストに記録する(ブロック585)。この方法は、より効率性の高い符号化法を見つけるために、bがゼロ(基準が1つ)であり、kがリスト内の最大値をリスト内の最小値からの差分すなわちオフセットとして符号化するのに十分大きい(最小必要ビット数)(ブロック586)という表現から開始する。従って、エンコーダは、連続的に小さくなるkの値を試行し、この結果bの値は大きくなる(基準が増える)。bとkの各組み合わせを評価しながら、より良好(例えば、より小さい)と見なされる符号化を生じるものを、さらに可能性のある符号化と比較するために保持する。その後、アルゴリズムは、ヘッダ内のテーブル及びタプル内の符号化後のフィールドに必要な全空間を含め、全体のサイズが最も小さくなる符号化を選択することができる。例えば、最小値を基準として開始し(ブロック587)、現在の基準よりも少なくとも2k大きいリスト内の最小値を見つける(ブロック588)。このような値が存在する(条件付きブロック589)場合、この値を次の基準として選択する(ブロック594)。このような値が存在しない(条件付きブロック589)場合、現在選択されている基準及びkの値を使用して、ヘッダ及び符号化後のフィールドの全体的な符号化後のサイズを判定する。この符号化が望ましい(例えば、この時点で最小である)(条件付きブロック591)場合、この符号化を保持する(ブロック592)。符号化を保持するどうかに関わらず、kの値を1ずつ減分する(ブロック593)ことができ、kがゼロよりも大きいか又はこれに等しい(条件付きブロック595)場合、ブロック587に戻ることによって処理を繰り返すことができる。kを減分したことによりkがゼロを下回った場合、この処理は終了し、それまでに見つかった最良の符号化を選択する(ブロック596)。
【0077】
ここで図6を参照すると、共有マッピングテーブルを有するマルチノードネットワークの1つの実施形態の汎用ブロック図を示している。図示の例では、3つのノード360a〜360cを用いてマッピングノードのクラスタが形成されている。1つの実施形態では、ノード360a〜360cの各々が、1又はそれ以上の論理ユニット番号(LUN)を担うことができる。図示の実施形態では、いくつかのマッピングテーブルレベル(レベル1−N)を示している。レベル1が最も古いレベルに対応し、レベルNが最新のレベルに対応することができる。特定のノードによって管理されるLUNのマッピングテーブルエントリでは、この特定のノード自体が、より新しいエントリをノード自体に記憶することができる。例えば、図示のように、ノード360aは、マッピングサブテーブル362a及び364aを記憶する。これらのサブテーブル362a及び362bは、一般にノード360aが担うLUNに対応することができる。同様に、ノード360bは、このノードによって管理されるLUNに対応できるサブテーブル362b及び364bを含み、ノード360cは、このノードによって管理されるLUNに対応できるサブテーブル362c及び364cを含む。このような実施形態では、これらの「より新しい」レベルのマッピングテーブルエントリが、これらの対応する管理ノードのみによって保持され、一般に他のノード上には見当たらない。
【0078】
上述した比較的新しいレベルとは対照的に、より古いレベル(すなわち、レベルN−2〜レベル1)は、あらゆるノードがこれらのエントリのコピーを記憶できるという意味において、全てのノード360a〜360cが共有できるマッピングテーブルエントリを表す。図示の例では、これらのより古いレベル370、372及び374を、集合的に共有テーブル380として識別する。また、上述したように、様々な実施形態では、これらのより古いレベルは、後述するマージ又は同様の動作は別にして静的である。一般的に言えば、静的なレイヤとは、修正を受けないレイヤのことである(すなわち、「固定」されている)。このようなレベルがこの意味で固定されているすれば、これらのより低いレベルのあらゆるコピーには、別のコピーが修正されたか、又は修正中であるかを気にせずにアクセスすることができる。従って、あらゆるノードが共有テーブル380のコピーを安全に記憶し、要求に正しく対処できるという確信を持ってこれらのテーブルへの要求に対処することができる。共有テーブル380のコピーを複数のノード360に記憶すると、検索を行う際、及び別様に要求に対処する際に、様々な負荷バランシングスキームを使用できるようになる。
【0079】
上記の他に、様々な実施形態では、共有できるレベル380を、ノード360自体を反映するように構成することができる。例えば、ノード360aはLUN1及び2を担うことができ、ノード360bはLUN3及び4を担うことができ、ノード360cはLUN5及び6を担うことができる。様々な実施形態では、マッピングテーブルエントリが、対応するLUNをそれ自体が識別するタプルを含むことができる。このような実施形態では、共有マッピングテーブル380を、キー値、絶対的な記憶スペースの幅又は量、或いはその他に従ってソートすることができる。レベル380のマッピングテーブルエントリのソートがLUNに部分的に基づく場合、エントリ370aはLUN1及び2に対応することができ、エントリ370bはLUN3及び4に対応することができ、エントリ370cはLUN5及び6に対応することができる。このような構成では、検索する必要があるデータ量を効果的に減少させ、特定のLUNを担うノードを責任者が要求の対象として直接選択できるようにすることにより、特定のLUNを対象とする要求に関して所与のノードによる検索を速めることができる。これらの及びその他の構成及びソートスキームが可能であり企図される。また、LUNの分担を1つのノードから別のノードに移すことが望ましい場合、このノードの元々のノードマッピングを共有レベルにフラッシュする(例えば、そしてマージする)ことができる。この結果、LUNの分担が新規ノードに移され、このノードがそのLUNに対処し始める。
【0080】
ここで図7を参照すると、マッピングテーブルへのアクセスに使用する二次インデックスの1つの実施形態の汎用ブロック図を示している。上述したように、要求者のデータ入力302がキージェネレータ304によって受け取られ、このキージェネレータ304がクエリキー値306を生成することができる。このクエリキー値306を用いてマッピングテーブルにアクセスする。いくつかの実施形態では、図3に示す一次インデックス310が大きすぎてRAM172又は記憶媒体130に記憶できない(又は望むよりも大きい)場合がある。例えば、図10及び図11において後述するマージ及び平坦化動作により、古いレベルのインデックスが非常に大きくなることがある。従って、一次インデックス310の対応する部分の代わりに、一次インデックスの少なくとも一部に関して二次インデックス320をキャッシュすることができる。二次インデックス320は、ストレージデバイス176a〜176mに記憶されているデータの位置識別の細粒度レベルを粗くすることができる。従って、二次インデックス320は、対応する一次インデックス310の部分よりも小さくなることができる。これにより、二次インデックス320をRAM172又は記憶媒体130に記憶することができる。
【0081】
1つの実施形態では、二次インデックス320が、パーティション322a〜322bなどのパーティションに分割される。また、二次インデックスは、最新のレベルが最初に現れるようにレベルに基づいて構成することもできる。1つの実施形態では、古いレベルの数字の方が小さく、若いレベルの数字の方が大きい(例えば、各新たなレベルによってレベルIDを増分することができる)。二次インデックス320の各エントリは、キー値の範囲を識別することができる。例えば、この例に示す最初のエントリは、レベル22内のキー値0〜12の範囲を識別することができる。これらのキー値は、一次インデックス310の所与のページ内の最初のレコード及び最後のレコードに関連するキー値に対応することができる。換言すれば、二次インデックス内のエントリは、キー0という識別符号及びキー12という識別符号を単純に記憶して、対応するページがこの範囲内のエントリを含むことを示すことができる。再び図3Aを参照すると、パーティション312aをページとすることができ、この最初のレコード及び最後のレコードのキー値はそれぞれ0及び12である。従って、図7に示すように、二次インデックス320内のエントリは0〜12の範囲を記憶している。マッピングテーブル内のレベルには再マッピングが保持されるので、キー値の範囲は、複数のページ及び関連するレベルに対応することができる。図7に示すように、二次インデックス320内のフィールドは、この情報を記憶することができる。各エントリは、1又はそれ以上の対応する一意の仮想ページ識別子(ID)、及びキー値の範囲に対応する関連するレベルIDを記憶することができる。各エントリは、妥当性情報などの対応するステータス情報を記憶することもできる。保持されるページID及び関連するレベルIDのリストは、所与のクエリキー値をどこに記憶できるかを示すことができるが、そのページ及びレベル内にキー値が存在することを裏付けるものではない。二次インデックス320は一次インデックス310よりも小さいが、ストレージデバイス176a〜176mに記憶されているデータの位置識別の細粒度レベルも粗い。二次インデックス320は、RAM172又は記憶媒体130に記憶されるほど十分に小さくなることができる。
【0082】
二次インデックス320は、クエリキー値306によってアクセスされた場合、1又はそれ以上の対応するページID及び関連するレベルIDを搬送することができる。次に、これらの結果を用いて、記憶されている一次インデックスの部分にアクセスしてこれを取得する。次に、1又はそれ以上の識別されたページをこのクエリキー値によって検索し、物理ポインタ値を見つけることができる。1つの実施形態では、レベルIDを使用して、やはりクエリキー値306を記憶している1又はそれ以上の識別されたレベルのうちの最も若いレベルを判定することができる。その後、対応するページ内のレコードを取得し、物理ポインタ値を読み出してストレージアクセス要求を処理することができる。図示の例では、クエリキー値27がキー16〜31の範囲内に含まれる。対応するエントリに記憶されたページID及びレベルIDが、クエリキー値と共にマッピングテーブルに搬送される。
【0083】
ここで図8を参照すると、マッピングテーブルへのアクセスに使用する三次インデックスの1つの実施形態の汎用ブロック図を示している。図4の回路及び論理部分に対応する回路及び論理部分には同じ番号を付している。上述したように、図3に示す一次インデックス310は、大きすぎてRAM172又は記憶媒体130に記憶できない場合がある。また、マッピングテーブル340が大きくなるにつれ、二次インデックス320も大きくなりすぎてこれらのメモリに記憶できなくなる場合がある。従って、二次インデックス320にアクセスする前に、一次インデックス310にアクセスするよりも依然として高速な三次インデックス330にアクセスすることができる。
【0084】
三次インデックス330が提供できるストレージデバイス176a〜176mに記憶されているデータの位置識別の細粒性レベルは、二次インデックス320よりも粗い。従って、三次インデックス330は、二次インデックス320の対応する部分よりも小さくなることができる。なお、一次インデックス310、二次インデックス320及び三次インデックス330などの各々は、圧縮フォーマットで記憶することができる。選択される圧縮フォーマットは、マッピングテーブル340内に情報を記憶するために使用する圧縮フォーマットと同じものとすることができる。
【0085】
1つの実施形態では、三次インデックス330が、パーティション332a及び332bなどの複数のパーティションを含むことができる。三次インデックス330には、クエリキー値306によってアクセスすることができる。図示の例では、「27」というクエリキー値306は、0〜78のキー値の範囲内にあることが分かる。このキー値範囲には、三次インデックス330内の最初のエントリが対応する。三次インデックス330内の列は、二次インデックス320内のどのパーティションにアクセスすべきかを示すことができる。図示の例では、0〜78のキー値範囲は、二次インデックス320内のパーティション0に対応する。
【0086】
なお、クエリキー値がインデックス310〜330のいずれか1つの中に存在しないかどうかを判定するために、フィルタ(図示せず)にアクセスすることもできる。このフィルタは、ある要素がある組のメンバであるかどうかを判定する確率データ構造とすることができる。偽陽性は生じ得るが、偽陰性は生じ得ない。このようなフィルタの一例には、Bloomフィルタがある。このようなフィルタへのアクセスにより、全体のインデックス142内に特定の値が存在しないと判断された場合、クエリはストレージに送信されない。このようなフィルタへのアクセスにより、対応するインデックス内にクエリキー値が存在すると判断された場合、ストレージデバイス176a〜176mに対応する物理ポインタ値が記憶されているかどうかが分からないこともある。
【0087】
上記の他に、様々な実施形態では、クエリに応答してマッピングテーブルにより提供されるタプルを修正又は省略するために、1又はそれ以上のオーバーレイテーブルを使用することができる。このようなオーバーレイテーブルを使用して、マッピングテーブルへのアクセスに応答する際に、又は新たなレベルを作成する時の平坦化動作中に使用するためのフィルタリング条件を適用することができる。いくつかの実施形態では、オーバーレイテーブルを、上述したマッピングテーブルと同様に時間順のレベルとして構成することができる。他の実施形態では、異なる方法で構成される。オーバーレイテーブルのキーは、基礎となるマッピングテーブルのキーに一致する必要はない。例えば、オーバーレイテーブルは、特定のボリュームが削除されたこと又は別様にアクセス不能である(例えば、このタプルにクエリを行うための自然なアクセス経路が存在しない)こと、及びこのボリューム識別子を参照するタプルに対応するクエリへの応答が代わりに無効であることを示す単一のエントリを含むことができる。別の例では、オーバーレイテーブル内のエントリが、記憶位置が開放された旨、及びこの記憶位置を参照するいずれのタプルも無効であり、従ってマッピングテーブルが使用するキーではなく検索の結果を無効とする旨を示すことができる。いくつかの実施形態では、オーバーレイテーブルが、基礎となるマッピングテーブルへのクエリに応答してフィールドを修正することができる。一部の実施形態では、キー範囲(キー値の範囲)を使用して、同じ動作(削除又は修正)が適用される複数の値を効果的に識別することができる。このようにして、オーバーレイテーブル内に「省略」エントリを作成することにより、マッピングテーブルを修正することなくマッピングテーブルからタプルを(効果的に)「削除」することができる。この場合、オーバーレイテーブルは、関連する非キーデータフィールドを有していないキーを含むことができる。
【0088】
ここで図9を参照すると、マッピング及びオーバーレイテーブルを含むシステムにおいて読み込み要求を処理する方法の1つの実施形態を示している。読み込み要求を受け取ったこと(ブロック900)に応答して、この要求に対応するマッピングテーブルキー(ブロック908)及び第1のオーバーレイテーブルキー(ブロック902)を生成する。この例では、オーバーレイ及びマッピングテーブルへのアクセスが同時に行われるものとして示している。しかしながら、他の実施形態では、テーブルへのアクセスを非同時的にあらゆる所望の順序で(例えば、連続して又は別様に異なる時間に)行うことができる。マッピングテーブルのための生成されたキーを使用して、マッピングテーブルから対応するタプルを取得することができる(ブロック910)。第1のオーバーレイテーブルが、オーバーレイテーブルキーに対応する「省略」エントリを含む場合(条件ブロック906)、マッピングテーブル内で見つかったあらゆるタプルが無効とみなされ、要求者にこの旨のインジケーションを戻すことができる。一方、オーバーレイテーブルが、オーバーレイテーブルキーに対応する「修正」エントリを含む場合(条件ブロック912)、第1のオーバーレイテーブルエントリ内の値を用いて、マッピングテーブルから取得したタプル内の1又はそれ以上のフィールドを修正することができる(ブロック922)。この処理が行われると、マッピングテーブルからのタプル(修正されていてもいなくても)に基づいて第2のオーバーレイテーブルキーが生成され(ブロック914)、第1のオーバーレイテーブルと同じテーブルであってもなくてもよい第2のオーバーレイテーブル内で第2の検索が行われる(ブロック916)。第2のオーバーレイテーブル内で「省略」エントリが見つかった場合(条件ブロック920)、マッピングテーブルからのタプルが無効とみなされる(ブロック918)。第2のオーバーレイテーブルで「修正」エントリが見つかった場合(条件ブロック924)、マッピングテーブルからのタプルの1又はそれ以上のフィールドを修正することができる(ブロック926)。このような修正は、タプルを脱落させること、タプルを正規化すること又はその他を含むことができる。その後、修正されたタプルを要求者に戻すことができる。第2のオーバーレイテーブルが修正エントリを含まない場合(条件ブロック924)には、タプルを修正せずに要求者に戻すことができる。いくつかの実施形態では、(単複の)オーバーレイテーブルのいくつかの部分をキャッシュして、これらの内容により高速にアクセスできるようにすることができる。様々な実施形態では、第1のオーバーレイテーブルで検出された省略エントリが、他のあらゆる対応する検索(例えば、ブロック914、916、その他)を省く役目を果たすことができる。他の実施形態では、同時にアクセスを実行して「競合」させることができる。このような数多くの実施形態が可能である。
【0089】
ここで図10を参照すると、マッピングテーブル内のレベルの平坦化動作の1つの実施形態の汎用ブロック図を示している。様々な実施形態では、1又はそれ以上の条件を検出したことに応答して平坦化動作を行うことができる。例えば、新規レコードの挿入によりマッピングテーブル340が時間と共に増大してレベルを蓄積するに伴い、さらなるレベルのクエリキー値を検索するコストが不要に高くなることがある。検索すべきレベルの数を制限するために、複数のレベルを単一の新たなレベルに平坦化することができる。例えば、時間的な順序で論理的に隣接又は連続する2又はそれ以上のレベルを平坦化動作のために選択することができる。2又はそれ以上のレコードが同じキー値に対応する場合には、最も若いレコードを保持し、その他のレコードを新たな「平坦化された」レベルに含めないようにすることができる。このような実施形態では、新たに平坦化されたレベルが、所与のキー値に関して、対応する複数のレベルの検索によって得られる結果と同じ検索結果を戻すようになる。新たな平坦化レベルでの検索結果は、取って代わる2又はそれ以上のレベルと比べて変化しないので、平坦化動作をマッピングテーブルの更新動作と同期させる必要はない。換言すれば、テーブルの平坦化動作は、テーブルの更新とは非同期的に行うことができる。
【0090】
上述したように、より古いレベルは、そのマッピングが修正されないという意味で固定されている(すなわち、AからBへのマッピングは変化しない)。従って、(例えば、ユーザの書き込みに起因する)平坦化されたレベルへの修正は行われず、レベルの同期ロックは不要である。また、(例えば、図6に関連して説明したような)各ノードがより古いレベルのインデックスのコピーを記憶できるノードベースのクラスタ環境では、あるノード上での平坦化動作を、他のノードにおける対応するレベルをロックする必要なく行うことができる。従って、いずれかのノードにおいて平坦化が非同期的に行われている間も、全てのノードにおいて処理を継続することができる。他のノードは、その後の時点でレベルを平坦化することができ、或いは既に平坦化されているレベルを使用することができる。1つの実施形態では、エラー回復、ミラーリング又はその他の目的で、平坦化されたレベルを形成するために使用した2又はそれ以上のレベルを保持することができる。上記の他に、様々な実施形態では、省略したレコードを新たなレベルに再挿入しなくてもよい。上述した平坦化は、例えば、マッピングテーブル内のレベルの数が所与の閾値に達したことを検出したことに応答して行うことができる。或いは、1又はそれ以上のレベルのサイズが閾値を越えたことを検出したことに応答して平坦化を行うこともできる。考えられるさらに別の条件は、システムの負荷である。レベルを平坦化すべきかどうかの判断は、これらの条件を個別に考慮するだけでなく、これらの条件を組み合わせて考慮することもできる。平坦化すべきかどうかの判断は、条件の現在値と将来的な条件の予測値の両方を考慮することもできる。平坦化を実行できるための条件は他にも可能である。
【0091】
図示の例では、レコードを単純にキーとポインタの組み合わせとして示している。説明を容易にするために、これらのページを4つのレコードを含むものとして示している。平坦化動作では、レベル「F」、及びその次の論理的に隣接するレベル「F−1」を考慮することができる。レベル「F」は、レベル「F−1」よりも若いものとすることができる。ここでは2つのレベルが平坦化されるように示しているが、平坦化のために3又はそれ以上のレベルを選択することも可能であり企図される。図示の例では、レベル「F−1」が、レベル「F」で見つかったキー値と同じキー値を記憶しているレコードを有することができる。双方向矢印を使用して、2つの連続するレベルにわたって同じキー値を記憶しているレコードを識別している。
【0092】
新たなレベル「New F」は、レベル「F」及びレベル「F−1」で見つかった重複キー値に対応するキーを含む。また、この新たなレベル「New F」は、これらの重複キー値を記憶しているレコードのうちの最も若い(又は、この場合はより若い)レコードに対応するポインタ値も含む。例えば、レベル「F」及びレベル「F−1」の各々は、キー値4を記憶しているレコードを含む。若い方のレコードはレベル「F」に存在し、このレコードはポインタ値512も記憶している。従って、レベル「F−1」は、キー値4と、より古いレベルである「F−1」で見つかったポインタ値656ではなくポインタ値512とを含む。また、新たなレベル「New F」は、レベル「F」とレベル「F−1」との間で見つかった一意のキー値を有するレコードを含む。例えば、レベル「F−1」は、レベル「F」で見つかった6のキーと246のポインタの組み合わせ、並びにレベル「F−1」で見つかった2のキーと398のポインタの組み合わせを有するレコードを含む。図示のように、レベル内のページの各々はキー値によってソートされる。
【0093】
上述したように、様々な実施形態では、オーバーレイテーブルを用いて、基礎となるマッピングテーブル内のキー値に対応するタプルを修正又は省略することができる。このような(単複の)オーバーレイテーブルは、マッピングテーブルと同様の方法で管理することができる。例えば、オーバーレイテーブルを平坦化し、隣接するエントリを共にマージして空間を節約することができる。或いは、マッピングテーブルの管理に使用する方法とは別の方法でオーバーレイテーブルを管理することもできる。いくつかの実施形態では、オーバーレイテーブルが、オーバーレイテーブルキーの範囲を参照する単一のエントリを含むことができる。このようにして、オーバーレイテーブルのサイズを制限することができる。例えば、マッピングテーブルがK個の有効なエントリを含む場合、(平坦化後の)オーバーレイテーブルは、マッピングテーブル内の有効なエントリ間のギャップに対応する範囲を無効として記すK+1個のエントリしか含まなくてよい。従って、オーバーレイテーブルを使用して、マッピングテーブルから脱落させることができるタプルを比較的効率的な方法で識別することができる。上記に加え、これまでの説明では、要求に対する応答を(単複の)マッピングテーブルから省略又は修正するためにオーバーレイテーブルを使用すると説明したが、マッピングテーブルの平坦化動作中に値を省略又は修正するためにオーバーレイテーブルを使用することもできる。従って、マッピングテーブルの平坦化動作中に新たなレベルを作成した場合、この新たなレベルに挿入されたはずのキー値を省略することができる。或いは、新たなレベルへの挿入前に値を修正することができる。このような修正により、マッピングテーブル内の所与のキー値範囲に対応する単一のレコードが、(新たなレベルでは)各々が元々のレコードの部分的な範囲に対応する複数のレコードに置き換えられるようになる。また、レコードを、より狭い範囲に対応する新規レコードに置き換えること、或いは複数のレコードを、元々のレコードの全ての範囲をカバーする範囲を有する単一のレコードに置き換えることもできる。このような全ての実施形態が企図される。
【0094】
ここで図11を参照すると、マッピングテーブル内のレベルの平坦化動作の実施形態の汎用ブロック図を示している。上述したように、レベルは時間順とすることができる。図示の例では、1又はそれ以上のインデックス及び対応するマッピングを含むレベル「F」が、より古いレベルである「F−1」よりも論理的に上方に配置されている。また、レベル「F」は、より若いレベル「F+1」よりも論理的に下方に配置されている。同様に、レベル「F−2」は、より若いレベル「F−1」よりも論理的に上方に配置され、レベル「F+2」は、より古いレベル「F+1」よりも論理的に下方に配置されている。1つの例では、平坦化動作のためにレベル「F」及び「F−1」を考慮することができる。双方向矢印を使用して、2つの連続するレベルにわたり同じキー値を記憶しているレコードを識別している。
【0095】
上述したように、新たなレベル「New F」は、レベル「F」及びレベル「F−1」内で見つかった重複キー値に対応するキー値を含む。また、新たなレベル「New F」は、重複キー値を記憶しているレコードのうちの最も若い(又はこの場合はより若い)レコードに対応するポインタ値を含む。平坦化動作の完了時には、未だレベル「F」及びレベル「F−1」をマッピングテーブルから削除することはできない。この場合も、ノードベースのクラスタでは、各ノードが、レベル「New F」などの新たな単一のレベルを利用し、この新たなレベルに取って代わられる2又はそれ以上のレベル(レベル「F」及びレベル「F−1」などの)をもはや使用しない準備ができていることを検証することができる。この検証は、新たなレベルが代用になる前に行うことができる。1つの実施形態では、レベル「F」及びレベル「F−1」などの2又はそれ以上の置き換えられるレベルを、エラー回復、ミラーリング又はその他の目的でストレージ内に保持することができる。これらのレベルの時間順及びマッピングを保持するために、新たな平坦化されたレベルFは、論理的に、より若いレベル(例えば、レベルF+1)よりも下方であって取って代わる元々のレベル(例えば、レベルF及びレベルF−1)よりも上方に配置される。
【0096】
ここで図12を参照すると、マッピングテーブル内のレベルを平坦化する方法1000の1つの実施形態を示している。ネットワークアーキテクチャ100内に具体化される構成要素及び上述したマッピングテーブル340は、一般に方法1000に従って動作することができる。本実施形態のステップは、説明を目的として順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【0097】
ブロック1002において、マッピングテーブル及び対応するインデックスに記憶スペースを割り当てる。ブロック1004において、マッピングテーブル内の2又はそれ以上のレベルを平坦化するための1又はそれ以上の条件を判断する。例えば、マッピングテーブル内の現在のレベル数を検索するコストは、平坦化動作を行うコストよりも高い場合がある。また、コストは、平坦化すべき構造内の現在の(又は予測される)レベル数、1又はそれ以上のレベル内のエントリ数、省略又は修正されるマッピングエントリ数、及びシステム上の負荷のうちの少なくとも1つに基づくこともできる。コストは、対応する動作の実行時間、1又はそれ以上のバスの占有、対応する動作中に使用される記憶スペース、及び一連のレベル内で何らかの閾値に達した重複エントリ数など含むこともできる。また、各レベル内のレコード数のカウントを使用して、2つの連続するレベルに対して行わる平坦化動作により、1つ前のレベル内のレコード数の倍に等しいレコード数を有する新たな単一のレベルをいつ作成できるかを推定することもできる。これらの条件は、単独で又はいずれかの組み合わせで、及びその他の方法で考慮することができ、これらの全てが実行することが出来る。
【0098】
ブロック1006において、データを記憶して新たなマッピングテーブルが見つかると、インデックス及びマッピングテーブルにアクセスしてこれらを更新する。マッピングテーブルに新規レコードが挿入されると、マッピングテーブル内のレベル数は増加する。マッピングテーブル内の2又はそれ以上のレベルを平坦化するための条件が検出された場合(条件ブロック1008)、ブロック1010において、平坦化する1又はそれ以上のレベルグループを識別する。レベルグループは、2又はそれ以上のレベルを含むことができる。1つの実施形態では、この2又はそれ以上のレベルが連続するレベルである。平坦化にとっては、最も低いレベル又は最も古いレベルが最良の候補となり得るが、より若いグループを選択することもできる。
【0099】
ブロック1012において、グループごとに、対応するグループ内の最も新しいレコードを含む新たな単一のレベルを作成する。先程の例では、新たな単一のレベル「New F」が、レベル「F」及びレベル「F+1」のうちの最も若いレコードを含む。ブロック1014において、ノードベースのクラスタでは、それぞれのノードが平坦化動作により作成された新たなレベルを利用する準備ができている旨を示すようにクラスタ内の各ノードに確認応答を要求することができる。ブロック1016において、各ノードが新たなレベルを利用できる旨を確認応答すると、識別されたグループ内の現在のレベルが新たなレベルに置き換えられる。他の実施形態では、ノード全体にわたって同期を行う必要はない。このような実施形態では、いくつかのノードが、他のノードよりも先に新たなレベルを使用し始めることができる。さらに、いくつかのノードは、新たに平坦化されたレベルが利用可能になった後でも、元々のレベルを使用し続けることができる。例えば、特定のノードが元々のレベルのデータをキャッシュしておいて、新たな平坦化されたレベルの非キャッシュデータの使用に優先して使用することができる。このような数多くの実施形態が可能である。
【0100】
ここで図13を参照すると、マッピングテーブル内でバルクアレイタスクを効率的に処理する方法1100の1つの実施形態を示している。他の説明した方法と同様に、ネットワークアーキテクチャ100内に具体化される構成要素及び上述したマッピングテーブル340は、一般に方法1100に従って動作することができる。また、本実施形態のステップは順番に示している。しかしながら、別の実施形態では、いくつかのステップを図示の順序とは異なる順序で行うこともでき、いくつかのステップを同時に行うこともでき、いくつかのステップを他のステップと組み合わせることもでき、いくつかのステップを削除することもできる。
【0101】
マッピングテーブル内に情報を圧縮フォーマットで記憶すると、細粒度のマッピングが可能になり、一般的なバルクアレイタスクの代わりにマッピングテーブル内のマッピング情報を直接操作できるようになる。この直接的なマップ操作により、I/Oネットワーク及びバストラフィックを低減することができる。上述したように、フラッシュメモリの「シークタイム」が減り、これにより多くの依存的読み込み動作を回転ディスクからの単一動作よりも短い時間で行えるようになる。これらの依存的読み込みを使用してオンライン細粒度マッピングを行い、圧縮及び重複排除などの空間節約機能を組み込むことができる。また、これらの依存的読み込み動作により、ストレージコントローラ174が、ストレージデバイス176a〜176mに記憶されたユーザデータにアクセス(読み込み及び書き込み)する代わりに、完全にマッピングテーブル内でバルクアレイタスクを実行できるようになる。
【0102】
ブロック1102において、大きな又はバルクアレイタスクを受け取る。例えば、バルクコピー又は移動要求は、バーチャルマシンによって企業アプリケーションデータが実行され更新されることに加え、何十台又は何百台ものバーチャルマシンのバックアップにも対応することができる。このデータの全ての移動、分岐、クローン又はコピーに伴う受け取った要求に関連するデータ量は、16ギガバイト(GB)又はそれ以上もの大きさになる場合がある。この要求を処理するためにユーザデータにアクセスした場合、この要求に多くの処理時間が費やされ、システム性能が低下することがある。また、一般に仮想化環境の総入出力(I/O)リソースは物理環境よりも少ない。
【0103】
ブロック1104において、ストレージコントローラ174は、受け取った要求に対応する新たなキー範囲をやはり受け取った要求に対応する古いキー範囲に関連付ける受け取った要求に対応するインジケーションを記憶することができる。例えば、受け取った要求が16GBのデータをコピーすることである場合、16GBのデータに対応するスタートキー値及びエンドキー値を記憶することができる。この場合も、スタートキー値及びエンドキー値の各々は、ボリュームID、受け取った要求内の論理又は仮想アドレス、スナップショットID及びセクタ番号などを含むことができる。1つの実施形態では、この情報を、一次インデックス310、二次インデックス320及び三次インデックス330などのインデックスに記憶された情報とは別個に記憶することができる。しかしながら、その後の要求の処理中にインデックスにアクセスする場合には、この情報にアクセスすることもできる。
【0104】
ブロック1106において、データストレージコントローラ174は、受け取った要求が事前にユーザデータにアクセスすることなく完了した旨を示す応答を、クライアントコンピュータシステム110a〜110cの対応するクライアントに搬送することができる。従って、ストレージコントローラ174は、ダウンタイムをわずかしか又は全く伴わずに、かつプロセッサ122に負荷を与えずに、受け取った要求を処理することができる。
【0105】
ブロック1108において、ストレージコントローラ174は、条件、インジケーション、又はフラグ、又はバッファ更新動作を、マッピングテーブル内の古いキーに取って代わる新たなキーに対応するマッピングテーブル内の1又はそれ以上のレコードを更新するように設定することができる。移動要求及びコピー要求の両方に関し、新たなキーに対応する1又はそれ以上のレコードをマッピングテーブルに挿入することができる。上述したように、これらのキーは、作成された新たな最上位レベルに挿入することができる。移動要求の場合、対応する新規レコードをマッピングテーブルに挿入した後に、1又はそれ以上の古いレコードをマッピングテーブルから削除することができる。実際には、マッピングテーブル内のレコードは、即座に又は後の時点で更新される。
【0106】
ゼロ化要求又は消去要求の場合、キー値の範囲がこの時点で一連の2進ゼロに対応するインジケーションを記憶することができる。また、上述したように、オーバーレイテーブルを使用して、有効でない(又は有効でなくなる)キー値を識別することもできる。ユーザデータは上書きしなくてもよい。消去要求の場合、後続する記憶(書き込み)要求のための新たなデータが「解放された」記憶位置に後で割り当てられた時にユーザデータを上書きすることができる。外部に向けられたデフラグメンテーション要求の場合、連続するアドレスをセクタ再構成のために選択することができ、これによりクライアントコンピュータシステム110a〜110cのクライアント上で実行されるアプリケーションに恩恵がもたらされることがある。
【0107】
ストレージコントローラ174が、新たなキーの1つに対応するデータストレージアクセス要求を受け取り(条件ブロック1110)、この新たなキーが既にマッピングテーブルに挿入されている場合(条件ブロック1112)、ブロック1114において、この新たなキーでインデックス及びマッピングテーブルにアクセスすることができる。例えば、この新たなキーにより、一次インデックス310、二次インデックス320又は三次インデックス330のいずれかにアクセスすることができる。マッピングテーブルの1又はそれ以上のページがインデックスによって識別された場合、これらの識別されたページにアクセスすることができる。ブロック1116において、この新たなキーに関連するマッピングテーブル内で見つかった物理ポインタ値により、ストレージアクセス要求に対処することができる。
【0108】
ストレージコントローラ174が、新たなキーの1つに対応するデータストレージアクセス要求を受け取り(条件ブロック1110)、この新たなキーが未だマッピングテーブルに挿入されていない場合(条件ブロック1112)、ブロック1118において、対応する古いキーでインデックス及びマッピングテーブルにアクセスすることができる。古いキー範囲及び新たなキー範囲を保持するストレージにアクセスして、対応する古いキー値を判断することができる。マッピングテーブルの1又はそれ以上のページがインデックスによって識別された場合、これらの識別されたページにアクセスすることができる。ブロック1120において、この古いキーに関連するマッピングテーブル内で見つかった物理ポインタ値により、ストレージアクセス要求に対処することができる。
【0109】
ここで図14を参照すると、ストレージデバイス内のデータレイアウトアーキテクチャの実施形態を示す汎用ブロック図を示している。1つの実施形態では、ストレージデバイス176a〜176m内のデータ記憶位置を、独立装置による冗長アレイ(RAID)のアレイの形で配置することができる。図示のように、データレイアウトアーキテクチャに従い、ストレージデバイス176a〜176kに異なるタイプのデータを記憶することができる。1つの実施形態では、ストレージデバイス176a〜176kの各々がSSDである。SSD内の割り当て単位は、SSD内の1又はそれ以上の消去ブロックを含むことができる。
【0110】
ユーザデータ1230は、ストレージデバイス176a〜176kの1つ又はそれ以上に含まれる1又はそれ以上のページに記憶することができる。RAIDのストライプとストレージデバイス176a〜176kの1つとの各交点内では、記憶されている情報を一連の論理ページとしてフォーマットすることができる。各論理ページは、ページ内のデータのためのヘッダ及びチェックサムをさらに含むことができる。読み込みが発令された場合、この読み込みは1又はそれ以上の論理ページに対するものであり、チェックサムによって各ページ内のデータの妥当性を確認することができる。各論理ページは、ページのチェックサム(「メディア」チェックサムと呼ぶこともできる)を含むページヘッダを含むことができるので、データの実際のページサイズは1論理ページよりも小さくなることができる。いくつかの実施形態では、RAIDパリティ情報などのデバイス間回復データ1250を記憶するページの場合、ページヘッダをより小さくして、パリティページがデータページ内のページチェックサムを保護するようにすることができる。他の実施形態では、デバイス間回復データ1250を記憶しているパリティページ内のチェックサムを、データページチェックサムのチェックサムが、対応するデータページをカバーするパリティページのチェックサムと同じになるように計算することができる。このような実施形態では、パリティページのヘッダをデータページのヘッダよりも小さくする必要はない。
【0111】
デバイス間ECCデータ1250は、ユーザデータを保持する他のストレージデバイス上の1又はそれ以上のページから生成されたパリティ情報とすることができる。例えば、デバイス間ECCデータ1250は、RAIDデータレイアウトアーキテクチャで使用されるパリティ情報とすることができる。図では、記憶されている情報をストレージデバイス176a〜176k内の連続する論理ページとして示しているが、当業では、論理ページを順不動で配置することができ、ストレージデバイス176a〜176kの各々がSSDであることが周知である。
【0112】
デバイス内ECCデータ1240は、デバイス内冗長スキームにより使用される情報を含むことができる。デバイス内冗長スキームは、所与のストレージデバイス内のパリティ情報などのECC情報を利用する。このデバイス内冗長スキーム及びそのECC情報は、所与のデバイスに対応するとともに所与のデバイス内に保持することができるが、デバイス自体が内部的に生成して保持できるECCとは異なる。一般的に言えば、デバイスが内部的に生成して保持するECCは、デバイスが含まれているシステムからは見えない。
【0113】
デバイス内ECCデータ1240は、デバイス内エラー回復データ1240と呼ぶこともできる。デバイス内エラー回復データ1240は、所与のストレージデバイスを潜在的セクタエラー(LSE)から保護するために使用することができる。LSEとは、所与のセクタにアクセスするまで検出されないエラーのことである。従って、所与のセクタに予め記憶されているいずれかのデータが失われることがある。ストレージデバイス障害後のRAID再構築中に単一のLSEに見舞われると、この単一のLSEによりデータ損失が引き起こされることがある。通常、「セクタ」という用語は、ディスク上の所与のトラック内のセグメントなどの、HDD上の基本記憶単位を意味する。ここでは、「セクタ」という用語が、SSD上の基本割り当て単位を意味することもできる。潜在的セクタエラー(LSE)は、ストレージデバイス内の所与のセクタ又はその他の記憶単位にアクセスできない場合に発生する。所与のセクタに対して読み込み又は書き込み動作を完了できないことがある。また、訂正不能な誤り訂正コード(ECC)エラーが存在することもある。
【0114】
所与のストレージデバイス内に含まれるデバイス内エラー回復データ1240は、所与のストレージデバイス内のデータ記憶の信頼性を高めるために使用することができる。デバイス内エラー回復データ1240は、RAIDデータレイアウトアーキテクチャで利用されるパリティ情報などの、別のストレージデバイスに含まれることがある他のECC情報に加えて存在する。
【0115】
各ストレージデバイス内では、デバイス内エラー回復データ1240を1又はそれ以上のページに記憶することができる。当業者には周知のように、デバイス内エラー回復データ1240は、ユーザデータ1230内の情報の選択されたビットに対して関数を実行することにより取得することができる。XORベースの演算を用いてパリティ情報を導出し、デバイス内エラー回復データ1240に記憶することができる。デバイス内冗長スキームの他の例としては、シングルパリティチェック(SPC)、最大距離分離(MDS)消去符号、インタリーブパリティチェック符号(IPC)、ハイブリッドSPC及びMDS符号(MDS+SPC)、及び列対角パリティ(CDP)が挙げられる。これらのスキームは、提供される信頼性及びオーバーヘッドの点で、データ1240を計算する方法により様々である。
【0116】
システムは、上述したエラー回復情報に加え、デバイス上の領域のチェックサム値を計算するように構成することもできる。例えば、デバイスに情報を書き込む際にチェックサムを計算することができる。このチェックサムはシステムによって記憶される。システムは、デバイスから情報を読み戻す場合、再びチェックサムを計算して、元々記憶されていた値と比較することができる。これらの2つのチェックサムが異なる場合には情報が正しく読み出されておらず、システムは他のスキームを用いてデータを回復する。チェックサム関数の例としては、巡回冗長検査(CRC)、MD5及びSHA−1が挙げられる。
【0117】
SSD内の消去ブロックは、複数のページを含むことができる。ページは、4KBのデータ記憶スペースを含むことができる。消去ブロックは、64ページ又は256KBを含むことができる。他の実施形態では、消去ブロックが1メガバイト(MB)もの大きさであり、256ページを含むことができる。割り当て単位のサイズは、十分に大きなサイズの単位及び比較的小さな数の単位の両方を提供して割り当て単位のオーバーヘッドトラッキングを低減するように選択することができる。1つの実施形態では、1又はそれ以上の状態テーブルが、割り当て単位の状態(割り当て済み、空き、消去済み、エラー)、摩耗レベル、及び割り当て単位内で発生したエラー数(訂正可能及び/又は訂正不能)のカウントを保持することができる。1つの実施形態では、割り当て単位が、SSDの総記憶容量に比べて比較的小さい。ページ、消去ブロック及びその他の単位構成に関しては、他のデータ記憶スペースの量も可能であり企図される。
【0118】
メタデータ1260は、ページヘッダ情報、RAIDストライプ識別情報、及び1又はそれ以上のRAIDストライプのログデータなどを含むことができる。様々な実施形態では、各ストライプの先頭の単一のメタデータページを、他のストライプヘッダから再構築することができる。或いは、デバイス間パリティによってデータを保護できるように、このページをパリティシャード内で異なるオフセットにすることもできる。1つの実施形態では、メタデータ1260が、このデータを重複排除すべきでない旨を示す特定のフラグ値を記憶し、又はこのフラグ値に関連することができる。
【0119】
ストレージデバイス176a〜176k内のページの各々は、デバイス間パリティ保護及びデバイス内パリティ保護に加え、各所与のページに記憶されたチェックサムなどの追加保護を含むこともできる。ページ内のヘッダの後であって対応するデータの前にチェックサム(8バイト、4バイト、又はその他)を配置して圧縮することができる。さらに別の保護レベルとして、チェックサム値にデータ位置情報を含めることができる。各ページ内のデータは、この情報を含むことができる。この情報は、仮想アドレス及び物理アドレスの両方を含むことができる。この情報には、セクタ番号、データチャンク及びオフセット番号、トラック番号及びプレーン番号などを含めることもできる。このマッピング情報は、テーブルの内容が失われた場合にアドレス変換マッピングテーブルを再構築するために使用することもできる。
【0120】
1つの実施形態では、ストレージデバイス176a〜176k内の各ページが、データタイプ1230〜1260などの特定のデータタイプを記憶する。或いは、ページが1つよりも多くのデータタイプを記憶することもできる。ページヘッダは、対応するページのデータタイプを識別する情報を記憶することができる。1つの実施形態では、デバイス内冗長スキームが、デバイスを、ユーザデータを記憶するための位置グループに分割する。例えば、RAIDレイアウト内のストライプに対応するデバイス内の位置グループに分割することができる。図示の例では、説明を容易にするために2つのストライプ1270a及び1270bしか示していない。
【0121】
1つの実施形態では、ストレージコントローラ174内のRAIDエンジンが、ストレージデバイス176a〜176kに使用する保護レベルを決定することができる。例えば、RAIDエンジンは、ストレージデバイス176a〜176kにRAIDダブルパリティを利用すると決定することができる。デバイス間冗長データ1250は、対応するユーザデータから生成されたRAIDダブルパリティ値を表すことができる。1つの実施形態では、ストレージデバイス176j及び176kがダブルパリティ情報を記憶することができる。他のレベルのRAIDパリティ保護も可能であり企図されると理解されたい。また、他の実施形態では、ダブルパリティ情報をRAIDストライプ毎にストレージデバイス176j及び176kに記憶するのではなく、ストレージデバイス間で交代に記憶することができる。例示及び説明を容易にするために、ダブルパリティ情報はストレージデバイス176j及び176kに記憶されるように示している。ストレージデバイス176a〜176kの各々は複数のページを含むが、説明を容易にするためにページ1212及びページ1220しか記していない。
【0122】
なお、上述した実施形態はソフトウェアを含むことができる。このような実施形態では、方法及び/又は機構を実現するプログラム命令をコンピュータ可読媒体上に搬送又は記憶することができる。プログラム命令を記憶するように構成された数多くのタイプの媒体が利用可能であり、ハードディスク、フロッピー(登録商標)ディスク、CD−ROM、DVD、フラッシュメモリ、プログラマブルROM(PROM)、ランダムアクセスメモリ(RAM)、及び様々な他の形の揮発性又は不揮発性ストレージを含む。
【0123】
様々な実施形態では、本明細書で説明した方法及び機能の1又はそれ以上の部分が、クラウドコンピューティング環境の一部を形成することができる。このような実施形態では、1又はそれ以上の様々なモデルによるサービスとして、インターネットを介してリソースを提供することができる。このようなモデルは、Infrastructure as a Service (IaaS)、Platform as a Service(PaaS)、及びSoftware as a Service(SaaS)を含むことができる。IaaSでは、コンピュータインフラストラクチャがサービスとして配信される。このような場合、一般にコンピュータ装置がサービスプロバイダにより所有され運用される。PaaSモデルでは、開発者がソフトウェアソリューションを開発するために使用するソフトウェアツール及びその基礎となる装備を、サービスプロバイダがサービスとして提供し、ホストすることができる。通常、SaaSは、オンデマンドサービスとして、サービスプロバイダの使用許諾ソフトウェアを含む。サービスプロバイダはソフトウェアをホストすることができ、或いは一定期間にわたって顧客にソフトウェアを配布することができる。上記のモデルの数多くの組み合わせが可能である。
【0124】
以上、実施形態についてかなり詳細に説明したが、上記の開示を完全に理解すると、当業者には数多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正を全て含むと解釈すべきであることが意図される。
図1
図2
図3A
図3B
図4
図5A
図5B
図5C
図5D
図5E
図6
図7
図8
図9
図10
図11
図12
図13
図14