(57)【特許請求の範囲】
【請求項１】
データストレージシステムにて、一つ以上の論理空間を含むボリュームを複数のデータオブジェクトに対する論理コンテナとして維持するステップであって、前記複数のデータオブジェクトが前記データストレージシステムの複数の論理空間のうちの一つ以上に格納され、前記複数のデータオブジェクトがオブジェクト識別子により一意的に特定される、ステップと、
前記複数のデータオブジェクトを配置するために第１と第２のインデクスを維持するステップとを含み、
第１のインデクスは第１レンジの複数のオブジェクト識別子を第２のインデクスにマップし、
第２のインデクスは前記第１レンジの複数のオブジェクト識別子に関連する複数のデータオブジェクトのストレージロケーションを示し、
第１のインデクスはデータストレージシステムのメモリ内に格納され、第２のインデクスは複数の論理空間のうちの一つの空間に格納される、
方法。
【請求項２】
複数の論理空間の各々は、一つ以上のスラブの少なくとも一部を含み、個々のスラブは一つ以上の物理ストレージデバイス内の、ストレージのブロックのセットとして定義される、
請求項１に記載の方法。
【請求項３】
第１のインデクスは第２レンジの複数のオブジェクト識別子を第３のインデクスにマップし、
第３のインデクスは前記第２レンジの複数のオブジェクト識別子に関連する複数のデータオブジェクトの各々のストレージロケーションを示す、
請求項１に記載の方法。
【請求項４】
第２のインデクスと第３のインデクスは、異なる論理空間内に格納される
請求項１に記載の方法。
【請求項５】
第１のインデクスは、
第２のインデクスが格納される空間に対する識別子と、第２のインデクスが格納される空間内部でのオフセットとを、提供することにより、
前記第１レンジのオブジェクト識別子を第２のインデクスにマップする、
請求項１に記載の方法。
【請求項６】
データオブジェクトのストレージロケーションを示すことが、
第１レンジのデータオブジェクトの各々が格納される空間の識別子と、
第１レンジのデータオブジェクトの各々が格納される空間の各々内部でのオフセットと、
第１レンジのデータオブジェクトの各々の長さとを提供することを含む、
請求項５に記載の方法。
【請求項７】
第２のインデクス内で示されるデータオブジェクトのストレージロケーションが、関連するオブジェクト識別子に基づいて発生順に配置される、
請求項１に記載の方法。
【請求項８】
更に、
データオブジェクトの一つに対するクライアント要求を受信するステップと、
第１のレンジと第２のレンジから、要求されたデータオブジェクトに関連するレンジを選択するステップと、
選択されたレンジが第１レンジならば、第２のインデクスから要求されたデータオブジェクトのストレージロケーションを判別し、選択されたレンジが第２レンジならば、第３のインデクスから要求されたデータオブジェクトのストレージロケーションを判別するステップと、
判別されたストレージロケーションから要求されたデータオブジェクトを検索するステップとを含む、
請求項１に記載の方法。
【請求項９】
更に、
データストレージシステムに格納するために、クライアントから新しいデータオブジェクトを受信するステップと、
ストレージスペースを、複数の論理空間のうちの一つにアロケートするステップと、
新しいデータオブジェクトを、アロケートされたストレージスペースに書き込むステップと、
アロケートされたストレージスペースのロケーションに基づいて、第１と第２のインデクスを更新するステップと
を含む、請求項１に記載の方法。
【請求項１０】
新しいデータオブジェクトが、複数のブロックとしてクライアントから受信され、ストレージスペースが、ブロックの全てが受信されるまでアロケートされない、
請求項９に記載の方法。
【請求項１１】
システムメモリと、
複数の論理空間であって、一つ以上の物理ストレージデバイス内の一つ以上のストレージのブロックが複数の論理空間の各々にアロケートされる、複数の論理空間と、
プロセッサとを含み、
前記プロセッサは、
ボリュームを複数のデータオブジェクトに対する論理コンテナとして維持するステップであって、ボリュームは一つ以上の論理空間を含む、ステップと、
複数の論理空間のうちの一つ以上にデータオブジェクトを格納するステップであって、データオブジェクトはオブジェクト識別子により一意的に特定される、ステップと、
第１のインデクスを維持するステップであって、第１のインデクスはシステムメモリに格納され、第１レンジの複数のオブジェクト識別子を第２のインデクスにマップする、ステップと、
第２のインデクスを維持するステップであって、第２のインデクスは複数の論理空間のうちの一つの論理空間に格納され、第１レンジの複数のオブジェクト識別子に関連するデータオブジェクトのストレージロケーションを示す、ステップと
を行うように構成され、
第１のインデクスはデータストレージシステムのメモリ内に格納され、第２のインデクスは複数の論理空間のうちの一つの空間に格納される、
データストレージシステム。
【請求項１２】
第１のインデクスは第２レンジのオブジェクト識別子を第３のインデクスにマップし、
第３のインデクスは前記第２レンジのオブジェクト識別子に関連するデータオブジェクトの各々のストレージロケーションを示す、
請求項１１に記載のデータストレージシステム。
【請求項１３】
第１のインデクスは、
第２のインデクスが格納される空間に対する識別子と、第２のインデクスが格納される空間内部でのオフセットとを、提供することにより、
前記第１レンジのオブジェクト識別子を第２のインデクスにマップする、
請求項１１に記載のデータストレージシステム。
【請求項１４】
第２のインデクス内で示されるデータオブジェクトのストレージロケーションが、関連するオブジェクト識別子に基づいて発生順に配置される、
請求項１１に記載のデータストレージシステム。
【請求項１５】
更に、プロセッサは、
データストレージシステムに格納するために、クライアントから新しいデータオブジェクトを受信するステップと、
新しいオブジェクト識別子を新しいデータオブジェクトに割り当てるステップと、
ストレージスペースを、複数の論理空間のうちの一つ内にアロケートするステップと、
新しいデータオブジェクトを、アロケートされたストレージスペースに書き込むステップと、
第１と第２のインデクスを更新するステップとを
行うように構成されている、請求項１１に記載のデータストレージシステム。
【請求項１６】
データオブジェクトの一つに関連する更なるメタデータがデータオブジェクトと共に格納される、請求項１１に記載のデータストレージシステム。
【請求項１７】
プロセッサに、請求項１ないし１０いずれか一項に記載の方法のステップを実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２０１２年４月２７日提出の米国特許出願第１３／４５８３２３号の優先権を主張するものであり、その内容は全体として参照の上、本明細書に組み込まれる。
【０００２】
本発明の少なくとも一つの実施形態は、データストレージシステムに関し、特に、データストレージシステム内にデータオブジェクトを効率的に格納する技術に関する。
【背景技術】
【０００３】
ネットワークストレージは、データをバックアップし、大量のデータを種々のクライアントへアクセス可能とする一般的アプローチである。ネットワークストレージ環境では、ストレージサーバは、一つ以上のデータの論理コンテナをクライアントへ示す若しくはエクスポートすることにより、データをクライアントシステムに利用可能とする。ネットワーク接続｛せつぞく｝ストレージ（ＮＡＳ）及びストレージエリアネットワーク（ＳＡＮ）を含む、様々なフォームのネットワークストレージがある。ＮＡＳのコンテクストでは、ストレージサーバは、クライアントからのファイルレベルのリクエストにサービスを提供する。ＳＡＮのコンテクストでは、ストレージサーバは、ブロックレベルのリクエストにサービスを提供する。ファイルレベルのリクエストとブロックレベルのリクエストの両方にサービスを提供できる、ストレージサーバもある。
【０００４】
技術市場は、現存のネットワークストレージ技術に影響を与える多数のトレンドを経験してきた。第１に、ネットワークストレージシステムを用いて格納されるデータ量は増え続ける。第２に、ランダムにデータオブジェクトが検索されるアプリケーションの数も増えている。フォトアーカイブなどのアプリケーションは、膨大な数のデータオブジェクトのための、ランダムにアクセスされることが多いストレージを提供する。これらのデータオブジェクトは殆ど変更されないこともある。従来のファイルシステムレイアウトは、これら状況下でデータオブジェクトを格納し検索するには不十分であると示されていた。多数の従来のファイルシステムレイアウトで用いられる階層ネームスペース及びｉｎｏｄｅストラクチャは、データオブジェクトを格納し若しくは検索するための三つ以上のディスクインプット／アウトプット（Ｉ／Ｏ）オペレーションを要求する。一つのＩ／Ｏは、通常、データオブジェクトのネームをｉｎｏｄｅに翻訳するのに必要な情報を検索するように要求される。第２のＩ／Ｏは、ｉｎｏｄｅを検索するのに必要である。少なくとも第３のＩ／Ｏは、通常、データオブジェクトを検索するのに要求される。これらの従来のレイアウトは、通常、これらのアプリケーションで必要とされ得ないメタデータ属性のストレージも含む。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
更に、ネットワークストレージシステムが様々なアプリケーション及びパフォーマンスプロファイルに高度に適応可能であることは、より重要になりつつある。従来のネットワークストレージシステムは夫々、概略単一のデータレイアウトを用いるが、このことはある用途には適切であるものの、市場が要求する多数の様々な構成にとっては概略最適ではない。結果として、ネットワークストレージシステムデザイナは、システムに関する種々の潜在的な利用がどのようにデザインを駆動するか、について種々の設計上の選択肢を作成しなければならない。ひいてはこれらの選択は、システムのパフォーマンス特性を決定する。設計が実装され生成されると、成果としてのシステムオペレーション特性を変更することは、不可能ではないにせよ、非常に困難である。
【課題を解決するための手段】
【０００６】
以下に記載するのは、ネットワークストレージシステム内でオブジェクトを格納するファイルシステムレイアウト、並びに関連する方法及び装置である。ファイルシステムレイアウトを実装する種々の装置及び方法は、以下の説明では、まとめて「本明細書に記載のシステム」と、又は、単に「システム」と称される。システムは、異なる利用のケースの様々な必要に適合するように変更され得る柔軟なデータレイアウトにて、システムは効率的なデータオブジェクトの格納及び検索を、提供する。とりわけ、システムは空間内にデータオブジェクトを格納し、非階層ストラクチャを用いてそれらを管理する。従来のシステムと比較して、大容量記憶装置内でデータオブジェクトを格納し若しくは検索するのに要求されるインプット／アウトプット動作（Ｉ／Ｏｓ）の数を減少させ、更に、データオブジェクトを格納するのに必要とされるストレージスペースの量を減少させることにより、システムは効率性を向上させる。Ｉ／Ｏは、プロセッサなどの情報処理デバイスと別のデバイスとの間の通信を要求するオペレーションである。データストレージシステムでは、Ｉ／Ｏは通常、ストレージサーバとストレージデバイスとの間の通信のことを指す。しかしながら、他のタイプのＩ／Ｏも可能である。システムに関する利点は多数の利用例で実現され得るが、システムは、データオブジェクトの高頻度のランダムアクセスを含む利用例に特によく適合する。個々のデータオブジェクトのために必要とされるメタデータの量が少なくてよい利用例にて、特に有益である。
【０００７】
このシステムは、ストレージサーバの内部にある他のタイプのメモリからデータを検索するのに比べて、Ｉ／Ｏは比較的時間消費し非効率的である、という認識に一部基づくものである。回転格納媒体上のデータオブジェクトにランダムにアクセスすることに係る固有の待ち時間により、ディスクＩ／Ｏは特に時間消費するものである。半導体メモリは非常に速い応答時間を有するが、メガバイト単位では通常非常に高価である。その結果として、半導体メモリは、データストレージシステム内にて、ディスクベースのストレージスペースよりも利用可能性がより限定されてしまい、より用途が搾られて選択されなければならない。本明細書に記載のシステムは、データオブジェクトのロケーションが二つのインデクスを用いて管理され得るファイルシステムレイアウトを実装する。インデクスは、一つ以上の情報のストレージロケーションを特定するリストである。二つのインデクスのうちの最初のものは十分に小さく、ストレージサーバのシステムメモリの内部で維持され得る。この実装では、二つのインデクスを用いてデータオブジェクトを検索することは、更に三つのステップを要求する。第１のインデクスにアクセスするステップ、第２のインデクスにアクセスするステップ、及び、データオブジェクトを検索するステップ、である。しかしながら、第１のインデクスはＩ／Ｏを実行すること無く実行され得るメモリロケーション内に格納され得るので、データオブジェクトを検索するのに要求されるＩ／Ｏは二つに過ぎない。ディスクＩ／Ｏの数を減少させることにより、ストレージシステムの全体パフォーマンスが向上する。データオブジェクトに関して、メタデータ対データの比率を減少させることでも、キャッシュがより効率的になり得る。より多くのデータがメモリに格納され得るからである。
【０００８】
更に、第２のインデクスは、それが若しくはその一部がシステムメモリ内にキャッシュされ得るような、密度を有する。データオブジェクトにアクセスするのに必要とされる第２のインデクスの一部がシステムメモリ内で利用可能であるならば、データオブジェクトにアクセスするのに必要なＩ／Ｏの数は更に減少され得る。続いてアクセスされるデータオブジェクトが局所性を示す場合、キャッシュされる第２のインデクスの一部からであっても、パフォーマンス上の利点が取得され得る。
【０００９】
システムは、（単に「空間」とも称する）「論理空間」、「リージョン」及び「スラブ」を含む、データのための論理コンストラクトを利用する。空間は、システムに関する基本的格納管理単位である。リージョンは、データに関する一つ以上の論理空間を含む。スラブは、一つ以上の物理ストレージデバイスの物理ブロックの集合体であり、個別のリージョンに分配される物理ストレージの単位である。空間は、論理空間を含むリージョンを構成する一つ以上のスラブの少なくとも一部にアロケートされる。システムは、リージョンレイヤの上のボリュームレイヤ内で、データの論理コンテナとして多重の「ボリューム」も維持し得る。個々のボリュームは、リージョンの一つ以上からの、論理空間の一つ以上を含み得る。個々のボリュームは、所定のパフォーマンス特徴を提供するように調整され得る。
【００１０】
システムは、高頻度でランダムにアクセスされる多数のデータオブジェクトを含む、フォトストレージなどの利用例に十分に適合的である。システムは、データオブジェクトと連結して格納されるメタデータが更に要求されることが少ない利用例や、データオブジェクトが殆ど変更されない利用例にも、十分に適合的である。
【００１１】
一つの実施形態では、システムは、プロセッサ、システムメモリ、及び論理空間を含む。一つ以上の物理ストレージデバイス内のストレージのブロックは、論理空間の各々にアロケートされる。プロセッサは、データオブジェクトのために論理コンテナとしてボリュームを維持し、ボリュームは論理空間の一つ以上を含む。プロセッサは、論理空間内にて、オブジェクト識別子により一意的に識別されるデータオブジェクトを格納する。プロセッサは、システムメモリ内に格納されオブジェクト識別子のレンジを第２のインデクスにマップする、第１のインデクスも維持する。第２のインデクスも論理空間内に格納され、オブジェクト識別子のレンジに関連するデータオブジェクトのストレージロケーションを示す。
【００１２】
添付の図面から、及び以下の詳細な説明から、本技術の他の形態も明白である。
【図面の簡単な説明】
【００１３】
添付の図面の利用を介して、本発明に係る一つ以上の実施形態を記載し説明する。
【図１】図１は、本発明が実装され得るネットワークストレージ環境を示す。
【図２】図２は、本明細書に記載の技術に係る、データストレージシステム内のデータストレージの種々のレイアウトを示す。
【図３】図３は、本明細書に記載の技術に係る、論理コンテナとしてボリュームを維持するための、２つのインデクスを用いる方法を示す。
【図４】図４は、本明細書に記載の技術を実装するデータストレージシステムを示す。
【図５】図５は、本明細書に記載の技術に係る、データストレージシステムを動作する方法を示す。
【図６】図６は、本明細書に記載の技術に係るデータオブジェクトのための論理コンテナとしてボリュームを維持するための、多重範囲で格納されるインデクスを用いる方法を示す。
【図７】図７は、断片化したデータオブジェクトを含むボリュームを維持するための、インデクスを用いる方法を示す。
【図８】図８は、本明細書に記載の技術に係る、データストレージシステムを動作する方法を示す。
【図９】図９は、本明細書に記載の技術を実装するのに用いられ得るストレージサーバのブロック図である。
【発明を実施するための形態】
【００１４】
「実施形態」、「一つの実施形態」などの本明細書における言及は、記載する特定の特性、構造若しくは特徴が本発明の少なくとも一つの実施形態に含まれることを意味する。本明細書におけるそれらフレーズの発生は、必ずしも全て同じ実施形態に言及するものでは無い。
【００１５】
本明細書に記載されるシステムは、ネットワークストレージシステム内でオブジェクトを格納するためのファイルシステムレイアウトを提供する。システムは、様々な利用のケースの要求に適合して変更され得る柔軟性のあるデータレイアウト内の、十分なデータオブジェクトストレージ及び検索を提供する。システムは、論理空間内にデータオブジェクトを格納し、更にデータオブジェクトを配置するのに２つのインデクスを用いる非階層ファイルストラクチャでデータオブジェクトの配置を管理することにより、部分的にこのことを遂行して、データオブジェクトを格納するのに必要なストレージスペースの量を減少する。
【００１６】
システムは、データオブジェクトにアクセスするのに要求されるディスクＩ／Ｏの数を減少することにより従来のファイルレイアウトシステムに関する効率性を改良し、個々のオブジェクトに関するメタデータの量を減少する。データオブジェクトを格納するのに必要なストレージスペースの量を減少する。実際は非階層であり、且つ通常階層ファイルレイアウトシステムと関連するパス、パス名、及びディレクトリに付随するメタデータオーバヘッドにより負担を負わされない、フラットネームスペースファイルを、システムは提供する。一つの実施形態では、これらの便益は、２つのインデクスを用いてファイルレイアウトを管理することにより得られる。２つのインデクスは、多くの場合それらのうちの一方が低遅延システムメモリ（例えば、ＲＡＭ）に格納されるのに十分に小さいように構成される。このように、データオブジェクトは、２つのディスクＩ／Ｏと同程度に少なくアクセスされ得る。従来、階層ファイルシステムレイアウトは、データオブジェクトにアクセスするために、通常、３以上のディスクＩ／Ｏを要求する。システムは、データオブジェクトの格納のための論理空間を使用するボリュームと連結して２つのインデクスを実装する。
【００１７】
図１は、本明細書に記載する技術に係る或る実施形態が利用され得る動作環境１００を示す。動作環境１００は、ストレージサーバシステム１３０、クライアント１８０Ａ及び１８０Ｂ、並びにネットワーク１９０を含む。
【００１８】
ストレージサーバシステム１３０は、ストレージサーバ１４０、ハードディスクドライブ（ＨＤＤ）１５０Ａ、ＨＤＤ１５０Ｂ，半導体ドライブ（ＳＳＤ）１６０Ａ、及びＳＳＤ１６０Ｂを含む。ストレージサーバシステム１３０は、データ若しくはデータストレージリソースを管理し、包含し、又はそれらのへのアクセスを提供するのに用いられる、様々なタイプの他のデバイス若しくはストレージコンポーネントも含み得る。ストレージサーバ１４０は、一つ以上のファイルシステムを実装するストレージオペレーティングシステムを含むコンピュータ装置である。ストレージサーバ１４０は、ＨＤＤ１５０Ａ、ＨＨＤ１５０Ｂ，ＳＳＤ１６０Ａ、及びＳＳＤ１６０Ｂなどの、書き込み可能な持続性格納媒体上での情報の編成に関するストレージサービスを提供するサーバクラスコンピュータであってよい。
【００１９】
通常のストレージサーバシステムは、図１に示すよりも多くのＨＤＤ及び／又はＳＳＤを含み得る。当然ながら、ストレージサーバシステム１３０は、ＨＤＤ及びＳＳＤに代わりに、若しくはそれらと組み合わせて、他のタイプの持続性ストレージデバイスを用いても実装され得る。これらの他のタイプの持続性ストレージデバイスは、例えば、フラッシュメモリ、ＮＶＲＡＭ、微小電気機械（ＭＥＭｓ）ストレージデバイス、又はそれらの組み合わせを含んでもよい。ストレージサーバシステム１３０は、持続性ストレージデバイスにアクセスし管理するための、ストレージコントローラを含む、他のデバイスも含んでもよい。ストレージサーバシステム１３０は、モノリシックシステムとして示されているが、種々な地理的位置間に分散されるシステム若しくはデバイスを含み得る。ストレージサーバシステム１３０は、ストレージサーバシステム１３０は、４０と同じ若しくは異なるストレージオペレーティングシステムを用いて動作する更なるストレージサーバも含んでもよい。
【００２０】
本明細書に記載の技術によると、ストレージサーバ１４０は、一つ以上の論理空間内に格納されるデータオブジェクトのための論理コンテナとしてボリュームを管理する。論理空間は夫々、ＨＤＤ１５０Ａ、ＨＤＤ１５０Ｂ、ＳＳＤ１６０Ａ、及びＳＳＤ１６０Ｂのうちの一つ以上により提供される。ストレージサーバ１４０は、データオブジェクトのための第１と第２のインデクスを維持する。第１のインデクスはオブジェクト識別子の範囲を第２のインデクスにマップし、第２のインデクスはオブジェクト識別子の範囲に関連するデータオブジェクトの格納位置を示す。システムのパフォーマンスを向上させるために、第１のインデクスは、半導体メモリ、又は、従来のＨＤＤよりも良好な読み出しパフォーマンスを示す別のタイプのメモリ内に、格納される。半導体メモリがストレージサーバ１４０内に配置されることもある。半導体メモリは、或る実装においてはＳＳＤ１６０Ａ若しくは１６０Ｂにより設けられてもよい。
【００２１】
図２は、本明細書に記載の技術に従って用いられ得るデータストレージシステムの一つの例の、種々のデータストレージのレイヤ、及び、それらレイヤ間の関係を示す。データストレージは、レイド（ＲＡＩＤ）レイヤ２４０の頂部に載るスラブレイヤ２３０、スラブレイヤ２３０の頂部に載るリージョンレイヤ２２０、及び、リージョンレイヤ２２０の頂部に載るボリュームレイヤ２１０を含む、複数の明確なデータレイヤを含む。一つの実施形態では、これらのレイヤは、ストレージサーバ１４０により実装される。
【００２２】
ＲＡＩＤレイヤ２４０は、ＨＤＤで構成されるＲＡＩＤパリティグループを含む。ＲＡＩＤレイヤ２４０は、図のようにＳＳＤを含んでもよい。システムは、ＲＡＩＤパリティグループをストレージブロックの２次元アレイに分割する。ストレージブロックの２次元アレイはスラブレイヤ２３０にて様々なスラブに割り当てられる。システムは更に、リージョンレイヤ２２０にて多数のリージョンを規定する。スラブレイヤ２３０からの一つ以上のスラブが、リージョンレイヤ２２内の個々のリージョンに割り当てられる。図に示すように、個々のリージョンは、一つ以上の論理空間（例えば、Ｅ１、Ｅ２など）をサポートするためにスラブを用いることができる。結果として、論理空間を含むリージョンに割り当てられる一つ以上のスラブの少なくとも一部に、個々の論理空間が割り当てられる。個々のスラブは、リージョンの異なる空間に割り当てられる部位も含み得る。
【００２３】
システムは、ボリュームレイヤ２１０の論理コンテナとして、一つ以上のボリューム、即ちファイルシステムを維持する。ボリュームレイヤ２１０内の個々のボリュームは、リージョンレイヤ２２０内の一つ以上のリージョンからの一つ以上の論理空間を含む。リージョンレイヤ２２０は、ボリュームレイヤ２１０のボリュームから、更には、システムのクライアント及びユーザから、種々のリージョン内部の論理空間のレイアウトを隠蔽する。フラッシュメモリ、ＳＳＤ、ＨＤＤ、又は他のストレージデバイスについての、二つ以上の異なるタイプのスラブから、任意の所与のリージョンが延在して構築されてもよい。スラブレイヤ２３０から種々の特徴を伴うスラブを選択することにより、種々の仕様若しくはパフォーマンス上の要求を満たすように、論理的にリージョンが構成されてもよい。それら仕様若しくはパフォーマンスが変動すればリージョンが論理的に再構成されてもよい。
【００２４】
ボリュームを構成する空間は、種々の特徴を有するように構成されたリージョン内のプール間から選択され若しくは割り当てられ得る。ボリュームは、特定のタイプ若しくはクラスのものであるように構成され得、サービスレベルオブジェクティブ（ＳＬＯｓ）の範囲内で関連し得る。あるボリュームタイプは、従来のネットワークファイルシステム（ＮＦＳ）タイプファイルサービスを実装し得、別のボリュームタイプはＬＵＮｓへのアクセスを設定でき、更に別のボリュームタイプはコンテンツリポジトリにより使用のためのオブジェクトストアを実装し得る。
【００２５】
リージョンは、スラブレイヤからの連続ストレージとして空間を割り当て得る場合もある。連続スペースの割り当ては、リージョンに対する読み出しパフォーマンスを向上させる。あるアプリケーションに対しては、大きい空間（即ち、数ギガバイト）の割り当ては、ストレージスペースの効率性を向上させる。個々の空間及びその内容を追跡するのにメタデータが必要であるが、少数の空間であればメタデータの空間を追跡するのに要求されるメタデータの全体量が削減されることから、効率性が向上する。
【００２６】
図３は、本明細書に記載の技術に係る、データオブジェクトのための論理コンテナとしてボリュームを維持するために２つのインデクスを用いる方法を示す。この例では、２つのインデクスのうちの第一のものはレンジインデクス３１０である。２つのインデクスのうちの第二のものはオブジェクト識別子（ＯＩＤ）インデクス３２０である。レンジインデクス３１０及びＯＩＤインデクス３２０は、ストレージシステムマネジャにより用いられ、ボリュームに割り当てられる空間内部に格納されるデータオブジェクトを位置づける。ＯＩＤインデクス３２０は、ボリュームの空間の一つに格納されることもある。ボリュームは多数の空間を有し得るが、ボリュームの単一の空間のみが、図示される。
【００２７】
ボリューム内に格納されたデータの各々は、固有のＯＩＤインデクス３２０を割り当てられる。データオブジェクトが最初にボリュームに格納されたとき、若しくはボリュームが生成されたとき、ＯＩＤは割り当てられる。一つの実施形態では、ＯＩＤは数値である。レンジインデクス３１０は、ＯＩＤのレンジに対するエントリを含む。レンジインデクス３１０は、ＯＩＤの二つのレンジに対するエントリを含む。第一のレンジは、１〜ＮのレンジのＯＩＤを伴うボリューム内のデータオブジェクトに属する。第二のレンジは、Ｎ＋１〜２ＮのレンジのＯＩＤを伴うボリューム内のデータオブジェクトに属し、Ｎは任意の数でよい。図３では明確さのために２つのレンジのみが示されているが、更なるレンジに対する更に多くのエントリも可能である。エントリは、変動するサイズのレンジに属するが、サイズＮに限定されるものでもなく、同じサイズに限定されるものでもない。とりわけ、レンジインデクス３１０は、個々のデータオブジェクトに対する個別のエントリを含まない。レンジインデクス３１０内の第一のエントリは、１〜ＮのレンジのＯＩＤを伴うオブジェクトのグループに適用可能である。
【００２８】
レンジインデクス３１０は、ＯＩＤのレンジの各々に関連するＯＩＤインデクスロケーションを含む。ＯＩＤインデクスロケーションは、ＯＩＤの関連するレンジに対するＯＩＤインデクスエントリのロケーションを示し、指し示し、若しくは、参照する。レンジインデクス３１０内のＯＩＤインデクスロケーションエントリは、レンジ内のＯＩＤに関するオブジェクトの絶対位置の表示ではない。
【００２９】
図３の例では、ＯＩＤインデクスロケーションエントリは、空間の識別、及び、識別された空間内部でのオフセットを含む。ＯＩＤレンジに関する第二のインデクスエントリが始まるのは、この識別されたロケーションである。当然ながら、ＯＩＤのレンジに対するＯＩＤインデクスロケーションエントリは、ＯＩＤのレンジに対してＯＩＤインデクスエントリを指定する他の方法を用いることができる。例えば、ＯＩＤレンジ１〜Ｎに対して、「空間１、オフセット０」を指し示すのでは無く、レンジインデクス３１０は、絶対ストレージロケーション、特定メモリアドレス、若しくは、ボリューム範囲内に無いストレージロケーションを、指し示すようにしてもよい。
【００３０】
ＯＩＤ１として識別される、ボリューム内のデータオブジェクトは、以下のように配置され検索され得る。データオブジェクトのＯＩＤは、レンジインデクス３１０（１〜Ｎ）内の第一のエントリのレンジに含まれるので、このＯＩＤに対するＯＩＤインデクスロケーションは、「空間１、オフセット０」である。続いてシステムは、空間１のオフセット１に関連する第一のストレージロケーションから読み出す。前述のように、「空間１」は特定の物理ロケーションを参照するものではなく、前述のボリューム／リージョン／スラブシステムにより規定されたように、論理ロケーションを参照する。ＯＩＤインデクス３２０内の指定されたストレージロケーション「空間１、オフセット０」は、レンジ１〜Ｎ内のＯＩＤの各々と関連するデータオブジェクトの各々のストレージロケーションを特定するエントリを含む。この場合、要求されるデータオブジェクトは第一のものであり、よってストレージロケーションは、空間１、オフセット０における第一のエントリ内に含まれる。この第一のエントリは、データオブジェクトＯＩＤ１は「空間４、オフセット０」に格納されることを示す。データオブジェクトは、空間４、オフセット０（図示せず）におけるストレージロケーションにアクセスし読み出しすることにより、検索され得る。
【００３１】
比較のために、ＯＩＤ３と識別されるボリューム内のデータオブジェクトは、以下のように配置され検索され得る。ＯＩＤはレンジインデクス３１０内の第一のエントリのレンジに含まれるので、このＯＩＤに対するＯＩＤインデクスロケーションは「空間１、オフセット０」である。続いてシステムは、空間１のオフセット０に関連するストレージロケーションから読み出す。留意すべきことは、この時点まで、プロセスは前述のＯＩＤ１に関するものとは異ならない、ということである。これは、ＯＩＤ１及びＯＩＤ３は両方とも１〜Ｎ（Ｎは３以上とする）の範囲内に含まれ、レンジインデクス３１０は個別のＯＩＤに固有の情報を含まないからである。ＯＩＤインデクス３２０内の、指定されたストレージロケーション「空間１、オフセット０」は、レンジ１〜ＮのＯＩＤの各々のストレージロケーションを特定するエントリを含む。この場合、要求されるデータオブジェクトはレンジ内の第三のものであり、よって、データオブジェクトのストレージロケーションは空間１、オフセット０から開始して第三のエントリ内にて見出される。この第三のエントリは、データオブジェクトＯＩＤ３が「空間６、オフセット２１２」にて格納されることを示す。データオブジェクトは、空間６、オフセット２１２（図示せず）におけるストレージロケーションにアクセスし読み出しすることにより、検索され得る。或る例では、一つ以上のインデクスエントリは、指定されたロケーションに格納されたデータ長を示す情報を含む。
【００３２】
レンジＮ＋１〜２Ｎに含まれるオブジェクトは、前述のオブジェクトと同様にして配置され検索される。例えば、ＯＩＤ  Ｎ＋２を伴うデータオブジェクトはレンジインデクス３１０内の第二の電取りに関連する。それがレンジＮ＋１〜２Ｎに含まれるからである。ＯＩＤのこのレンジに対するＯＩＤインデクスロケーションは「空間１、オフセット１０００」である。データオブジェクトＯＩＤ  Ｎ＋２のストレージロケーションを判別するために、空間１、オフセット１００から開始する第二のエントリがアクセスされる。この場合、データオブジェクトに対するストレージロケーションは、空間Ｙ、オフセット２０である。
【００３３】
レンジインデクス３１０は、ボリュームの個別のＯＩＤ毎に対するエントリを含むインデクス若しくはテーブルと比較して、相対的に小さい。各々のエントリはＯＩＤのレンジに属するからである。小さいために、レンジインデクス３１０は、空間、若しくは他のディスクベースのストレージロケーション内に格納されるのではなく、アクセスするのにＩ／Ｏを要求しない半導体メモリ若しくはシステムの他のメモリ内に、維持され得る。このことは、前述の２つのステップインデクス検索プロセスのうちの第一のステップが、ディスクＩ／Ｏを実行すること無く、実行され得るということを意味する。従って、データオブジェクトは、二つのディスクＩ／Ｏのみで検索され得る。ＯＩＤインデクス３２０にアクセスするためにレンジインデクス３１０から検索される情報を、システムが用いるとき、第一のディスクＩ／Ｏが発生する。ＯＩＤインデクス３２０からの情報を用いて、システムは第二のディスクＩ／Ｏを実行して特定のロケーションからデータオブジェクトを検索する。
【００３４】
従来のファイルシステムのｉｎｏｄｅ及びｉｎｏｄｅストラクチャは、通常、あまりに大きく、システムの半導体メモリ内に格納できない。半導体メモリはディスクベースデバイスよりも待ち時間がずっと短いので、特にランダムアクセスに対しては、より少ないディスクＩ／Ｏによりストレージ動作を実行することで、大いなるパフォーマンス上の利点を得られる。図１及び図２のＳＳＤはＨＤＤにより実行される機能と同様の機能を実行するように構成されていることがあり、従来の磁気ベースのディスクストレージデバイスにおいてＳＳＤが為しうるパフォーマンスの向上によって、ＳＳＤ内の一つ以上のインデクスの格納は本明細書に記載のタイプのもののパフォーマンスの向上をもたらす。ＳＳＤにてデータにアクセスすることはＩ／Ｏとはなるが、通常、ＨＤＤのＩ／Ｏよりも迅速に実行されるＩ／Ｏである。従って、本明細書に記載の本発明に係る利点は、第一のインデクスがＳＳＤに格納されているならば実現され得る。この構成はデータオブジェクトにアクセスするのに三つのＩ／Ｏを要求するが、第一のものは、ディスクベースのデバイスに係る固有の待ち時間を有するものでは無い、ＳＳＤ  Ｉ／Ｏである。
【００３５】
上記例にて言及されるオフセットは、空間内部の特定のストレージロケーションを参照する。或る場合では、オフセットは、固定されたサイズのストレージスペースのブロックを参照する。例えば、個々のオフセットは、ストレージスペースの４Ｋバイトブロックであればよい。この例では、空間６、オフセット２１２は、空間６の開始から８４８Ｋバイト（オフセット２１２×４Ｋ＝８４８Ｋ）であるアドレスにおけるストレージを参照することになる。オフセットは、可変サイズを含む、他のサイズのものでもよい。可変サイズのオフセットの場合、オフセットが開始し終了するところを示すのに他のインジケータ若しくは情報が必要とされ得る。
【００３６】
レンジインデクス３１０及びＯＩＤインデクス３２０に含まれる情報は、多数の様々な方法でフォーマットされ若しくはエンコードされ得る。例示のために、図３にてファーマットを示す。レンジインデクス３１０及びＯＩＤインデクス３２０の情報がフォーマットされ若しくはエンコードされ得る可能は方法の全ての記載は、本明細書の範囲を超えるものである。本発明は、図３に示すフォーマットに、若しくは他のどの特定のフォーマットに限定されるべきものではない。
【００３７】
レンジインデクス３１０は、ＯＩＤのレンジの各々に属する他の情報も含み得る。一つの例では、ＯＩＤレンジは、ＳＬＯにより若しくはリージョンタイプにより、分離されてもよく、この情報はレンジインデクス３１０に格納されてもよい。ＯＩＤレンジは、様々なユーザ若しくはグループによる利用がレンジインデクス３１０内に示されるマルチテナントのためにも分離され得る。同様に、ＯＩＤインデクス３２０内のエントリは、データオブジェクトの各々に関するメタデータも含んでもよい。しかしながら、メタデータ対データの比率を下げ更に格納効率を向上させるために、個々のデータオブジェクトに関するメタデータの量を減少することが、本発明の更なる目的である。例えば、サイズなどの基本的属性はＯＩＤインデクス３２０に格納され得、オーナ、作成タイム、アクセスタイムなどの他の属性は、他のどこかに（例えば、データオブジェクトそれ自身内に、若しくは、データオブジェクトに関する別のデータオブジェクト内に）格納される。
【００３８】
図４は、本明細書に記載される技術が実装され得るデータストレージシステム４００を示す。データストレージシステムは、プロセッサ４１０、インタフェース４８０、システムメモリ４２０、及びボリューム４５０を含む。プロセッサ４１０は、どのタイプの、コンピュータ、マイクロプロセッサ、中央処理装置（ＣＰＵ）、若しくはプログラマブルロジックでもよく、それらの組み合わせも含み得る。インタフェース４８０により、プロセッサ４１０は、他のデバイス、システム、クライアント、ネットワーク、若しくはそれらの組み合わせと通信し得る。インタフェース４８０は、単体のインタフェースとして示されているが、様々なデバイス若しくはシステムへの多重インタフェースを含んでもよい。
【００３９】
システムメモリ４２０は、ランダムアクセスメモリ（ＲＡＭ）、不揮発メモリＲＡＭ（ＮＶＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、若しくはフラッシュメモリを含む、更にはそれらの組み合わせを含む、計算目的のために用いられるどのタイプの半導体メモリであってもよい。システムメモリ４２０は、オペレーティングシステム４２２及び第１のインデクス４２４を含む。第１のインデクス４２０は、レンジインデクス３１０の例である。システムメモリ４２０は、ストレージオペレーションを実行するのに用いられる他のプログラム若しくはアプリケーションを含んでもよい。
【００４０】
ボリューム４５０は、データストレージシステム４００により格納されるデータオブジェクトのための論理コンテナである。ボリューム４５０は、論理空間４５１−５４を含む。ボリューム４５０は、他の論理空間を、若しくは、他の手段により割り当てられる他のストレージスペースを、含んでもよい。マルチプルデータオブジェクトはボリューム４５０に格納される。例示のために、これらのデータオブジェクトは、データオブジェクト４５８として集合的に参照される。データオブジェクト４５８を含む個別のデータオブジェクトは夫々、一つ以上の空間４５１−５３内に格納される。空間４５１−５３の各々は、一つ以上のスラブを含み、個々のスラブは、ＨＤＤなどの、一つ以上の物理ストレージデバイス内のブロックのセットとして定義される。或る例では、データストレージシステム４００は、更なるボリュームを含み得る。
【００４１】
空間４５１は、第２のインデクス４５５を含む。第２のインデクス４５５は、ＯＩＤインデクス３２０の例である。空間４５２は第３のインデクス４５６を含む。第３のインデクス４５６は、第２のインデクス４５５に類似する別のＯＩＤインデクスの例でもよく、後続の例で記載される他の目的のために用いられるインデクスであってもよい。
【００４２】
図５は、本明細書に記載する技術を実装するデータストレージシステムを動作する方法５００を示す。方法５００は、データストレージシステム４００の動作に関して記載されているが、他のタイプのデータストレージシステムによる、若しくは、データストレージシステム４００の他の構成による、利用に対して適用され得る。
【００４３】
方法５００は、データストレージシステム４００内のデータオブジェクト４５８のために論理コンテナとしてボリューム４５０を維持するステップを含む。データオブジェクト４５８は、一つ以上の論理空間４５１−４５３に格納される。データオブジェクト４５８は夫々、ＯＩＤにより一意的に特定される（ステップ５１０）。方法５００は、データオブジェクト４５８の範囲内に個別のデータオブジェクトを配置するために第１のインデクス４２４と第２のインデクス４５５を維持するステップを、含む。第１のインデクス４２４は、ＯＩＤのレンジを第２のインデクス４５５にマップする（ステップ５２０）。第２のインデクス４５５は、ＯＩＤのレンジに関するデータオブジェクト４５８の個別のデータオブジェクトのストレージロケーションを示す（ステップ５３０）。
【００４４】
データストレージシステム４００の一つの変形では、ボリューム４５０は、アペンドオンリとして定義される。このことは、データオブジェクト４５８、及びボリューム４５０に格納される他のどのデータオブジェクトも付加され得るが変更され得ないことを、意味する。変更は、新しいデータオブジェクトの生成を要求する。データオブジェクトが通常一度書き込まれしばしばランダムにアクセスされるがそれらを変更する要求が殆ど若しくは全く無い（即ち、ソーシャルメディアプラットフォームのフォトストレージ）、アプリケーションに、この構成は適切である。このアペンドオンリの実装により、レンジ及びＯＩＤインデクスはより効率的に管理され得、更にこのアペンドオンリの実装は、利用可能なストレージスペースのより効率的な全体的利用を提供する。オーバライトサポートが現存のレンジの変更のためのサポートを要求する（例えば、オーバライトされるデータオブジェクトのためにマッピングする空間は二つのセグメントに分けられる必要があり得る）ので、この実装はより効率的である。このことは結果として、データオブジェクトが継続して書き込まれる場合に必要とされるよりも多くのメタデータに繋がる。言い換えれば、メタデータの観点から付加は上書きよりも効率的である。付加は、古いマッピングを変更するのではなく、新しいマッピングを加えることを要求するからである。
【００４５】
本明細書の例示は、システムのパフォーマンスを向上させるためにレンジインデクスがシステムメモリ若しくは半導体メモリに格納される実装を最初に記載する。しかしながら、レンジインデクスのバックアップコピーは、信頼性の目的のために、一つ以上の空間のストレージを含む、ディスクベースのストレージに通常格納されることになる。レンジインデクスは、システムシャットダウン、故障、若しくは予想しない出来事の後、システムリカバリを促進するために、不揮発性ストレージに格納される必要がある。最初のインスタンスが一つ以上の空間に格納される間、一つ以上のレンジインデクスのワーキングコピーがシステム若しくは半導体メモリ内に格納され得る。レンジインデクスの変更が必要であるとき、変更はシステム若しくは半導体メモリ内のコピーに対して行われ、このときそれらの変更は周期的にディスクベースのコピーにフラッシュされる。電源喪失やシステム障害の発生の際に、レンジインデクスの損失、若しくはレンジインデクスへの最近の変更の損失を回避するために、レンジインデクスはＮＶＲＡＭに格納されてもよい。
【００４６】
上記の例に記載されるファイルシステムレイアウトは、システムメモリとディスクベースのストレージスペースの両方（即ち、両方のインデクス）にて空間効率のよいメタデータストラクチャを提供する。例えば、４Ｋバイトのディスクページを利用するシステムでは、個々のページは（３２バイトエントリを想定する）１２８ＯＩＤインデクスエントリ
を含み得る。一方で、個々の４Ｋバイトディスクページは、（２０バイトエントリを想定する）２０２レンジインデクスエントリを含み得る。この例では、システムは、レンジインデクスを格納する約１６３Ｍバイトと、１ビリオンデータオブジェクトエントリのためのＯＩＤインデクスを格納する約３２Ｇバイトとのみを必要とする。ＯＩＤは、そのような小量のディスクスペースを要求するので、システムメモリ内に格納され得る。本明細書に記載の技術は、上記の例で説明した特定のエントリ若しくはディスクページサイズに限定されない。他のエントリサイズが利用されるとき同様の結果が実現される。
【００４７】
図６は、本明細書に記載の技術に係る、データオブジェクトのための論理コンテナとしてボリュームを維持するため、マルチプル空間に格納されるインデクスを利用する方法を示す。図６のレンジインデクスは二つのエントリを含む。ＯＩＤが１〜Ｎのレンジであるデータオブジェクトのための一つのエントリと、ＯＩＤがＮ＋１〜２Ｎのレンジであるデータオブジェクトのための第二のエントリ、である。ＯＩＤの第一のレンジに対するＯＩＤインデクスロケーションは「空間２、オフセット０」である。ＯＩＤの第二のレンジに対するＯＩＤインデクスロケーションは「空間４、オフセット０」である。結果として、システムが、ＯＩＤが１〜Ｎのレンジであるデータオブジェクトを検索しているときは、データオブジェクトのロケーションを見つけることは、空間２内のＯＩＤインデクスＡに向けられている。システムが、ＯＩＤがＮ＋１〜２Ｎのレンジであるデータオブジェクトを検索しているときは、空間４内のＯＩＤインデクスＢに向けられている。レンジインデクスは、データオブジェクト検索プロセスの第一のステップがディスクＩ／Ｏを実行せずに実行され得るように、短い待ち時間のアクセスで、システムメモリ、半導体メモリ、若しくは別のメモリで維持される。
【００４８】
ＯＩＤインデクスＡは、第一のレンジに関するデータオブジェクトの各々のための、オフセット０にて開始する、個別のストレージロケーションエントリを含む。ＯＩＤ１に関するデータオブジェクトは、空間７、オフセット０に配置される。図３の例とは対照的に、関連するデータオブジェクトは、ＯＩＤインデクスとは異なる空間に配置される。同時に、同じレンジの他のＯＩＤに関するデータオブジェクトは、他の空間に配置され得る。例えば、ＯＩＤ  Ｎに関するデータオブジェクトは、空間Ｘに配置される（図示せず。）。ＯＩＤインデクスＡのエントリの各々は、関連するデータオブジェクトの長さも含む。長さは、ブロックで、若しくは、システムで用いられる計測に関する或る他の単位で、示され得る。
【００４９】
ＯＩＤレンジＮ＋１〜２Ｎのためのレンジインデクスエントリは、このレンジに対するＯＩＤインデクスが空間３に配置されることを示す。ＯＩＤインデクスＡと同様に、ＯＩＤインデクスＢは、関連するデータオブジェクトのストレージロケーションを示すレンジのＯＩＤの各々に対する個別のエントリを含む。二つの異なる空間に含まれるＯＩＤインデクスは、同じ空間に格納されるオブジェクトのストレージロケーションを示し得る。例えば、ＯＩＤ  １とＯＩＤ  ２Ｎとに関するＯＩＤインデクスエントリは二つの異なるＯＩＤインデクス内にあり、それらは、データオブジェクト１とデータオブジェクト２Ｎとが両方、空間７に格納されていても、二つの異なる空間に格納されている。ＯＩＤインデクスＢのＯＩＤインデクスエントリは、長さ指標を含まない。この場合、システムは、データオブジェクトそれ自身で利用可能な情報に基づいて、データオブジェクトの長さを判別し得る。ＯＩＤインデクスＡ及びＯＩＤインデクスＢは、夫々、空間２及び３の、オフセット０にて開始する。システム管理の理由からＯＩＤインデクスをオフセット０に配置することは好ましいが、それらを空間内部のどのオフセットに配置することも可能である。
【００５０】
図７は、断片化したデータオブジェクトを含むボリュームを維持するため、インデクスを用いる方法を示す。先の例に記載したＯＩＤインデクス情報に加えて、ＯＩＤインデクスＡの個々のエントリは、「より多く」や「最後」を示すフラグも含む。「より多く」のフラグは、関連するデータオブジェクトが断片化している（即ち、それは、異なるロケーションに格納される二つ以上の部位を有する）ことを示す。このことは次のような事情から生じ得る。つまり、データオブジェクトがその初期の断片化の無い格納の後、ある時点で付加され若しくは上書きされるため、又は、利用可能なストレージスペースの境界のあるブロック（即ち、ホール）を利用するために初期の格納の時点でデータオブジェクトが断片化されたため、などである。「より多く」や「最後」は、例示のために記述上用いられるのであり、特定のＯＩＤインデクスエントリに関して更なるＯＩＤインデクスエントリが在るかどうかについての管理は、様々に実装され得る。
【００５１】
ＯＩＤインデクスＡは、空間７のオフセット０にて開始して格納される。そのロケーションで格納される部位は５の長さを有する。ＯＩＤインデクスエントリ上の「より多く」のフラグは、ＯＩＤ１に関して更なるＯＩＤインデクスＡが在る、ということを示す。第二のエントリも、ＯＩＤインデクスＡに含まれ、それは、ＯＩＤ１の第二の部位は空間１２のオフセット５に格納されて４の長さを有することを示す。このエントリは、それがＯＩＤ１に対する最後のＯＩＤインデクスエントリであることを示す「最後」のフラグを含む。従って、ＯＩＤ１に対して、更なるＯＩＤインデクスエントリを探す必要は無い。システムは、データオブジェクトＯＩＤ１を検索するとき、空間７内の部位と空間１２内の部位の両方を検索しなければならない。データオブジェクトは、二つ以上の部位に分かれてもよい。データオブジェクトの多重部位も、同じ空間に格納されてもよい。
【００５２】
一つ以上のオブジェクトに対するマルチプルＯＩＤインデクスエントリの存在は、レンジインデクスに影響を与えない。レンジインデクスは、データオブジェクトのレンジに対するＯＩＤインデクスの開始ロケーションを示すに過ぎない。従って、データオブジェクトが付加されても、ＯＩＤインデクスの更なるエントリは、レンジインデクスの変更若しくは拡張を必要とするものでは無い。レンジインデクスをできるだけコンパクトに維持することで、レンジインデクスは前述のシステムメモリ内に維持され得る。
【００５３】
しかしながら、システムが新しいデータオブジェクトを書き込んでいる際、レンジインデクスはその新しいオブジェクトに順応するように更新される必要があり得る。図８は、新しいデータオブジェクトを書き込むために、データストレージシステムを動作する方法８００を示す。システムは、クライアントからデータストレージシステムに格納する新しいデータオブジェクトを受信する（ステップ８１０）。システムは、新しいデータオブジェクトのために、複数の論理空間のうちの一つにストレージスペースを割り当てる（ステップ８２０）。或る場合には、好ましくないにせよ、新しいデータオブジェクトは、図７に関して説明したように、断片化して格納されることもある。オブジェクト識別子が新しいデータオブジェクトに割り付けられ、割り当てられたストレージスペース内に書き込まれる（ステップ８３０）。
【００５４】
新しいＯＩＤに拠って、レンジインデクスは更新される必要があり得る（ステップ８４０）。新しいＯＩＤが、レンジインデクス内の現存エントリのレンジの範囲内に無いならば、新しいエントリが形成され得る。例えば、図７に関して、新しいデータオブジェクトが２Ｎ＋１のＯＩＤを有するならば、それに対するレンジインデクス内に現存のエントリは無い。従って、新しいエントリは、２Ｎ＋１を含むＯＩＤのレンジをカバーするレンジインデクス内に形成されなければならない。新しいデータオブジェクトのＯＩＤが、レンジインデクス内の現存のレンジの範囲内にある場合、新しいエントリが形成される必要は無い。例えば、新しいデータオブジェクトが２Ｎ−１のＯＩＤを有するならば、レンジインデクス内の現存の第二の部位によりそれは既にアドレスされている。
【００５５】
最後に、ＯＩＤインデクス内のエントリは、新しいデータオブジェクトのストレージロケーションを反映するように更新される（ステップ８５０）。更新するステップは、新しいデータオブジェクトのロケーションを、若しくは、新しいデータオブジェクトの断片のロケーションを、反映するように、一つ以上の新しいエントリを一つ以上ＯＩＤインデクスに加えることを含む。
【００５６】
システムは、遅延書き込みアロケーションを用いて新しいデータオブジェクトを書き込むプロセスを実行し得る。遅延書き込みアロケーションは、新しいデータオブジェクトに関連するブロックの全てが受信され更に書き込む準備がされるまで、空間内の新しいデータオブジェクトのためのストレージスペースがアロケートされない、プロセスである。アロケーション／書き込みプロセスは、データオブジェクトに関連する全てのメタデータ若しくは情報も受信されるまで、遅延される、というものであってもよい。アロケーション若しくは書き込みプロセスの前に、データオブジェクトのストレージスペース要件は知られる。遅延書き込みアロケーションは、新しいデータオブジェクトのために継続的にストレージスペースを割り当てるシステムの能力を改善させるので、データレイアウトを改善することになる。継続的なストレージスペースは、データオブジェクトのための読み出しパフォーマンスを改善する。多くの場合、システムは、より良い読み出しパフォーマンスのために、更には、関連するメタデータの量を減少させるために、単一の空間で継続してデータオブジェクトを格納するのが好ましい。しかしながら、空間は論理的に適宜されるので、二つの異なる空間のストレージスペースは、実際には物理的に連続するストレージスペースであることがある。
【００５７】
遅延書き込みアロケーションを促進するために、システムは、遅延書き込みアロケーションが完了するまで、若しくは、特定の期間、新たに形成されたデータオブジェクトの、受信されたブロック若しくはフラグメントを格納する、ライトキャッシュを利用してもよい。ライトキャッシュは不揮発性メモリに実装され、これにより、新しいデータオブジェクトがライトキャッシュ内に配置された後、且つ一つ以上のアロケートされた空間に書き込まれる前に、新しいデータオブジェクトのためのクライアントからの書き込み要求がクライアントに確認され得る。そのようにすることによってのみ、ディスクベースのデバイスのアクセス待ち時間がクライアント応答時間から除去され得、また、システムがクライアント応答時間に影響を与えることの無いより柔軟なやり方でディスクオペレーションを優先することができる。本明細書に記載の遅延書き込みアロケーション及びライトキャッシングプロセスは、新しいデータオブジェクトの形成にのみ適用可能ではなく、現存のデータオブジェクトを付加する際にも用いられ得る。
【００５８】
図９は、ストレージシステムのコンポーネントを実装するのに用いられ得るストレージサーバ９００のブロック図である。例えば、図９のシステムは、クライアントシステム、コンピュータ、ネットワークデバイス、若しくはストレージサーバを実装するのに用いられ得る。他の構成及び動作も可能であるが、図１のストレージサーバ１４０はストレージサーバ９００の例である。例示の実施形態では、ストレージサーバ９００は、一つ以上のプロセッサ９１０、メモリ９２０、ネットワークアダプタ９４０、及びストレージアダプタ９５０を含み、それら全ては相互接続９６０により相互に接続される。
【００５９】
メモリ９２０は、本明細書に記載の技術に係るソフトウエアプログラムコード及びデータストラクチャを格納するための、プロセッサ９１０及びアダプタ９４０、９５０によりアクセスされ得るストレージロケーションを含む。プロセッサ９１０及びアダプタ９４０、９５０は、ソフトウエアコードを実行しデータストラクチャを操作するように構成された、処理要素及び／又は論理回路を含んでもよい。本明細書に記載の技術に属するプログラム命令を格納し実行するために、種々の機械読み取り可能格納媒体を含む他の処理及びメモリ実装が利用され得ることは、当業者には明白である。
【００６０】
ポイントツーポイントリンクに亘る一つ以上の他のシステム、ワイドエリアネットワーク、パブリックネットワークに亘って実装される仮想プライベートネットワーク、又は、共有ローカルエリアネットワークと、ストレージサーバ９００を連結する、複数のポートを、ネットワークアダプタ９４０は含む。ネットワークアダプタ９４０は、ストレージサーバ９００をネットワーク１９０などのネットワークと接続するのに必要とされる、機械コンポーネント及び電気回路を、含み得る。ＴＣＰ／ＩＰなどの予め定義されたプロトコルに従ってパケット若しくはフレームを交換することにより、一つ以上のシステムはネットワーク１９０に亘って他のシステムと通信できる。
【００６１】
ストレージアダプタ９５０はプロセッサ９１０上で稼働するオペレーティングシステムとインタフェースして、付属のストレージデバイス上の情報とアクセスする。情報は、ＨＤＤ、磁気テープ、光ディスク、フラッシュメモリ、ＳＳＤ、ＲＡＭ、ＭＥＭｓ、及び／又は情報を格納するように適合された他の任意の類似の媒体などの、どのタイプの、付属の書き込み可能ストレージ媒体のアレイに格納されてもよい。ストレージアダプタ９５０は、Ｉ／Ｏ相互接続構成に亘ってディスク若しくは他のストレージ関連デバイスと結合するＩ／Ｏインタフェース回路を有する、複数のポートを含む。
【００６２】
本発明の実施形態は、前述の、種々のステップ及びオペレーションを含む。種々のこれらステップ及びオペレーションは、ハードウエアコンポーネントにより実行され得、又は、機械実行可能命令で埋め込まれ、それらは、命令がプログラムされた一つ以上の汎用若しくは専用プロセッサにステップを実行させるのに用いられる。一方で、ステップは、ハードウエア、ソフトウエア、及び／又は、ファームウエアの組み合わせにより、実行され得る。
【００６３】
本発明の実施形態は、本明細書に記載のオペレーションの一部若しくは全てを実行するコンピュータ若しくは他の電子デバイスをプログラムするのに用いられ得る、持続性命令を格納した機械読み取り可能媒体を含み得るコンピュータプログラムプロダクトとして、提供され得る。機械読み取り可能媒体は、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、光磁気ディスク、フロッピディスク、ＲＯＭ,ＲＡＭ、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気的消去可能ＰＲＯＭ（ＥＥＰＲＯＭ）、磁気若しくは光カード、フラッシュメモリ、又は、電子命令を格納するのに適した他のタイプの機械読み取り可能媒体を含み得るが、それらに限定されない。更に、本発明の実施形態は、コンピュータプログラムプロダクトとしてダウンロードすることも可能であり、プログラムは、通信リンクを介して搬送波若しくは他の伝搬媒体に埋め込まれたデータ信号により、遠隔コンピュータから要求中のコンピュータへ伝達され得る。
【００６４】
「或る実施形態において」「或る実施形態によると」「図示される実施形態において」「他の実施形態において」「或る例において」などのフレーズは、概略、そのフレーズに続く特定の特性、構造、若しくは特徴が、本発明の少なくとも一つの実施形態に含まれ、更に本発明の一つ以上の実施形態に含まれ得る。更に、それらフレーズは、同じ実施形態若しくは異なる実施形態に、必ずしも言及するものでは無い。
【００６５】
本発明の一つ以上の実施形態に関する詳細な記載を前述にて説明したが、本発明の精神から乖離すること無く、当業者には種々の代替物、修正物、及び均等物が明白である。例えば、前述の実施形態は特定の特性に言及するが、この発明の範囲は、特性についての異なる組み合わせを有する実施形態、及び、既述の特性の全てを含むものでは無い実施形態も、含む。従って、本発明の範囲は、請求項の範囲にあるようなそれら代替物、修正物、及び変形物の全て、並びにそれらの均等物の全てを含むことを意図するものである。従って、前記記載は、請求項により規定された、本発明の範囲を限定するものとして捉えられるべきではない。
【符号の説明】
【００６６】
１３０・・・ストレージサーバシステム、１４０・・・ストレージサーバ、１５０Ａ、１５０Ｂ・・・ＨＤＤ、１６０Ａ、１６０Ｂ・・・ＳＳＤ、１８０Ａ、１８０Ｂ・・・クライアント、１９０・・・ネットワーク。
【図１】
0006664218.tif 000002
【図２】
0006664218.tif 000003
【図３】
0006664218.tif 000004
【図４】
0006664218.tif 000005
【図５】
0006664218.tif 000006
【図６】
0006664218.tif 000007
【図７】
0006664218.tif 000008
【図８】
0006664218.tif 000009
【図９】
0006664218.tif 000010