(57)【特許請求の範囲】
【請求項１】
異なる複数の物理記憶デバイス群に対応付けられ記憶空間を構成する連続的な複数の記憶ブロックの各々についてフリーか否かの状態指標を記憶ブロックの並び順に有するフリーブロックオブジェクトにおける２以上の状態指標をポインタから特定される状態指標から不連続的に参照することにより、異なる２以上の物理記憶デバイス群に分散されている必要数のフリー記憶ブロックを検索し、前記ポインタを次の検索で参照される状態指標が特定されるよう維持するステップと、
前記検索によって得られた必要数のフリー記憶ブロックの各々をデータの書込み先として使用するステップと
を包含する、方法。
【請求項２】
前記フリーブロックオブジェクトは、連続した複数のセクションに論理的に分割されており、
各セクションに、連続した２以上の記憶ブロックが対応しており、
前記検索するステップでは、参照先セクションがセクションの並び順と異なる順序となるよう状態指標を参照する都度に参照先セクションを切り替えることで、前記必要数のフリー記憶ブロックを不連続的に検索する、
請求項１に記載の方法。
【請求項３】
前記複数のセクションは、複数の仮想記憶構成体と関連付けられる、
請求項２に記載の方法。
【請求項４】
前記複数の仮想記憶構成体の各々は、物理記憶デバイス群に基づくストライプセットであり、
１つのストライプセットに２以上のセクションが関連付けられており、
前記検索するステップでは、参照先セクションが属するストライプセットが切り替わるよう状態指標を参照する都度に参照先セクションを切り替えることで、前記必要数のフリー記憶ブロックを不連続的に検索する、
請求項３に記載の方法。
【請求項５】
各セクションをいくつかのサブセクションに論理的に分割するステップをさらに包含し、
（１）前記検索するステップは、前記セクションの前記サブセクションを通して不連続的に検索するステップを包含し、かつ／または、
（２）前記セクションは、前記サブセクションが異なるセクションにおいて異なるサイズになり得るように、等しい数のサブセクションに論理的に分割され、かつ／または、
（３）前記セクションは、異なるセクションが異なる数のサブセクションを有することができるように、等しいサイズのサブセクションに論理的に分割され、かつ／または、
（４）前記セクションの前記サブセクションを通して不連続的に検索するステップは、別のセクションに移る前に、特定のセクションの中の１つのサブセクションを通して検索するステップを包含する、
請求項２乃至４のうちのいずれか１項に記載の方法。
【請求項６】
前記記憶空間に２以上の記憶ブロックが追加されたことにより前記フリーブロックオブジェクトに新しいセクションが追加された後の前記検索するステップでは、所定の閾値または条件に到達するまで、前記追加されたセクションにおける２以上の状態指標を連続的に参照することにより前記必要数のフリー記憶ブロックのうちの少なくとも１つを検索する、
請求項２乃至５のうちのいずれか１項に記載の方法。
【請求項７】
異なる複数の物理記憶デバイス群に対応付けられ記憶空間を構成する連続的な複数の記憶ブロックの各々についてフリーか否かの状態指標を記憶ブロックの並び順に有するフリーブロックオブジェクトを記憶するメモリと、
前記フリーブロックオブジェクトにおける２以上の状態指標をポインタから特定される状態指標から不連続的に参照することにより、異なる２以上の物理記憶デバイス群に分散されている必要数のフリー記憶ブロックを検索し、前記ポインタを次の検索で参照される状態指標が特定されるよう維持し、前記検索によって得られた必要数のフリー記憶ブロックの各々をデータの書込み先として使用するプロセッサと
を備える計算機。
【請求項８】
前記フリーブロックオブジェクトは、連続した複数の連続セクションに論理的に分割されており、
各セクションに、連続した２以上の記憶ブロックが対応しており、
前記プロセッサは、参照先セクションがセクションの並び順と異なる順序となるよう状態指標を参照する都度に参照先セクションを切り替えることで、前記必要数のフリー記憶ブロックを不連続的に検索する、
請求項７に記載の計算機。
【請求項９】
前記複数のセクションは、複数の仮想記憶構成体と関連付けられる、
請求項８に記載の計算機。
【請求項１０】
前記複数の仮想記憶構成体の各々は、物理記憶デバイス群に基づくストライプセットであり、
１つのストライプセットに２以上のセクションが関連付けられており、
前記プロセッサは、参照先セクションが属するストライプセットが切り替わるよう状態指標を参照する都度に参照先セクションを切り替えることで、前記必要数のフリー記憶ブロックを不連続的に検索する、
請求項９に記載の計算機。
【請求項１１】
前記プロセッサは、各セクションをいくつかのサブセクションに論理的に分割するようにさらに構成され、
（１）前記プロセッサは、前記セクションの前記サブセクションを通して不連続的に検索するように構成され、かつ／または、
（２）前記セクションは、前記サブセクションが異なるセクションにおいて異なるサイズになり得るように、等しい数のサブセクションに論理的に分割され、かつ／または、
（３）前記セクションは、異なるセクションが異なる数のサブセクションを有することができるように、等しいサイズのサブセクションに論理的に分割され、かつ／または、
（４）前記プロセッサは、別のセクションに移る前に、特定のセクションの中の１つのサブセクションを通して検索するように構成されている、
請求項８乃至１０のうちのいずれか１項に記載の計算機。
【請求項１２】
前記プロセッサは、前記記憶空間に２以上の記憶ブロックが追加されたことにより前記フリーブロックオブジェクトに新しいセクションが追加された後の検索では、所定の閾値または条件に到達するまで、前記追加されたセクションにおける２以上の状態指標を連続的に参照することにより前記必要数のフリー記憶ブロックのうちの少なくとも１つを検索する、
請求項８乃至１１のうちのいずれか１項に記載の計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
このＰＣＴ出願は、２００８年６月３０日出願の米国特許出願第１２／１６４，７４５号からの優先権を主張し、当該特許出願の全体が本明細書において参照により援用される。
【０００２】
本発明は、以下の米国特許出願のうちの１つ以上に関連し得、これら特許出願のそれぞれ全体が本明細書において参照により援用される。これら特許出願は、
「ＭＵＬＴＩ−ＷＡＹ  ＣＨＥＣＫＰＯＩＮＴＳ  ＩＮ  Ａ  ＤＡＴＡ  ＳＴＯＲＡＧＥ  ＳＹＳＴＥＭ」と題された、本願と同日出願の米国特許出願（代理人整理番号２３３７／１１０）、
「Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｒ  Ａｃｃｅｌｅｒａｔｉｏｎ  ｏｆ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｆｕｎｃｔｉｏｎｓ」と題された、２００１年６月１２日出願の米国特許出願第０９／８７９，７９８号、現在は米国特許第６，８２６，６１５号（代理人整理番号２３３７／１０３）、
「Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｒ  Ａｃｃｅｌｅｒａｔｉｏｎ  ｏｆ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｆｕｎｃｔｉｏｎｓ」と題された、２００４年７月１２日出願の米国特許出願第１０／８８９，１５８号（代理人整理番号２３３７／１０８）、
「Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｈａｒｄｗａｒｅ−Ｂａｓｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ」と題された、Ｇｅｏｆｆｒｅｙ  Ｓ．Ｂａｒｒａｌｌらの名前の下２００２年１１月１日出願の米国特許出願第１０／２８６，０１５号（代理人整理番号２３３７／１０４）、および、
「Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｈａｒｄｗａｒｅ−Ｂａｓｅｄ  Ｆｉｌｅ  Ｓｙｓｔｅｍ」と題された、Ｇｅｏｆｆｒｅｙ  Ｓ．Ｂａｒｒａｌｌらの名前の下２００７年８月２０日出願の米国特許出願第１１／８４１，３５３号（代理人整理番号２３３７／１１７）である。
【０００３】
（発明の分野）
本発明は、データ記憶システムに関し、より具体的には、データ記憶システムにおける動的な書き込み平衡化に関する。
【背景技術】
【０００４】
（背景）
今日の情報時代において、データ記憶システムはしばしば、膨大な量の記憶空間を含むファイルシステムを管理する。ファイルシステムが、複数の記憶デバイスに広がる、多数テラバイトの記憶空間を含むことは一般的である。
【０００５】
動的ファイルシステム環境では、記憶空間のブロックはしばしば、ファイルが作り出され、修正され、削除される間に、使用され、解放され、再使用される。かかるファイルシステムは、ファイルシステムによってもはや使用されていないブロックを、特定し、解放し、再使用するためのメカニズムを含むことが一般的である。再使用のためのフリーブロックを設置するために、ファイルシステム記憶空間を通して連続的に検索する、従来のブロック再使用方式は、後にファイルシステムの性能に影響を与え得る、不均衡な書き込み操作をもたらし得る。
【発明の概要】
【課題を解決するための手段】
【０００６】
本発明の一側面に従い、複数の連続記憶場所を有するデータ記憶システムにおいて、書き込み操作を分配する方法が提供される。この方法は、複数の連続記憶場所のそれぞれの可用性を示すフリーブロックオブジェクトを維持するステップと、データを記憶域に書き込むための利用可能な記憶場所を識別するために、フリーブロックオブジェクトを通して不連続的に検索するステップとを含む。
【０００７】
本発明の別の側面に従い、複数の連続記憶場所を有するデータ記憶システムにおいて、書き込み操作を分配するための装置が提供される。この装置は、メモリと、複数の連続記憶場所のそれぞれの可用性を示すフリーブロックオブジェクトをメモリ内に維持し、かつ、データを記憶域に書き込むための利用可能な記憶場所を識別するために、フリーブロックオブジェクトを通して不連続的に検索するように構成される、記憶プロセッサとを含む。
【０００８】
種々の代替的実施形態では、フリーブロックオブジェクトを通して不連続的に検索するステップは、フリーブロックオブジェクトを複数の連続セクションに論理的に分割するステップと、セクションを通して不連続的に検索するステップとを含み得る。セクションのぞれぞれは、個別の仮想記憶構成体と関連付けられてもよく（例えば、レンジ、ストライプセット（ｓｔｒｉｐｅｓｅｔ）、スパン、システムドライブ、または他の仮想記憶構成体）、その場合、セクションを通して不連続的に検索するステップは、仮想記憶構成体を通して不連続的に検索するステップをもたらしてもよい。
【０００９】
さらなる代替的実施形態において、各セクションは、いくつかのサブセクションに論理的に分割されてもよく、その場合、セクションを通して不連続的に検索するステップは、セクションのサブセクションを通して不連続的に検索するステップを含み得る。セクションは、サブセクションが、異なるセクション内で異なるサイズになり得るように、等しい数のサブセクションに論理的に分割されてもよく、または、異なるセクションが異なる数のサブセクションを有することができるように、等しいサイズのサブセクションに論理的に分割されてもよい。
【００１０】
またさらなる代替的実施形態では、いくつかの追加される記憶場所の可用性を示すためのフリーブロックオブジェクトに新しいセクションを追加すると、方法は、所定の閾値または条件に到達するまで、追加されたセクションを通して検索するように進行するステップを含み得、その後、上記の不連続検索が開始または再開されてもよい。
【００１１】
例示的実施形態では、フリーブロックオブジェクトは、記憶場所ごとに少なくとも１つの状態指標ビットを有する、ビットマップの形態であるが、フリーブロック一覧は、例えば、リンクされた一覧、表、または他のデータ構造といった他の形態で維持されてもよい。
【００１２】
上記の実施形態では、データ記憶システムは、複数の記憶デバイス（例えば、ハードディスク、固体記憶域）を含んでもよく、かかる不連続検索は、記憶デバイスの利用の平衡を保つのに役立つ場合がある。
【図面の簡単な説明】
【００１３】
本発明の上述の特性は、添付図面を参照の上、以下の詳細な説明を参照することで、より容易に理解されるであろう。
【図１】図１は、本発明の例示的実施形態に従う、ファイル記憶システムの概略ブロック図である。
【図２】図２は、本発明の例示的実施形態に従う、ファイルシステムの一般フォーマットを示す概略ブロック図である。
【図３】図３は、本発明の例示的実施形態において、ファイルシステム記憶ブロックとストライプセットとの間の関係を示す概略図である。
【図４】図４は、本発明の例示的実施形態に従う、フリーブロックビットマップの該略図である。
【図５】図５は、本発明の例示的実施形態に従う、動的な書き込み平衡化のための不連続検索を描写する概略図である。
【図６】図６は、本発明の第１の代替的実施形態に従う、ストライプセットから独立している不連続検索を描写する概略図である。
【図７】図７は、本発明の第２の代替的実施形態に従う、ストライプセットから独立している不連続検索を描写する概略図である。
【発明を実施するための形態】
【００１４】
（特定の実施形態の詳細な説明）
定義。本説明および添付の特許請求の範囲で使用される通り、以下の用語は、文脈上異なる解釈を要する場合を除き、指示される意味を有するものとする。
【００１５】
「記憶デバイス」は、データを記憶するために使用される、デバイスまたはシステムである。記憶デバイスは、１つ以上の磁気または光磁気、あるいは、光ディスクドライブ、固体記憶デバイス、もしくは磁気テープを含んでもよい。便宜上、記憶デバイスは時に、「ディスク」または「ハードディスク」と呼ばれる。データ記憶システムは、同じまたは異なる記憶容量を有する、同じまたは異なるタイプの記憶デバイスを含んでもよい。
【００１６】
「ＲＡＩＤコントローラ」は、いくつかの記憶デバイスの記憶容量を組み合わせて、「システムドライブ」（「ＳＤ」）、「論理ユニット」（「ＬＵ」または「ＬＵＮ」）、または「ボリューム」と代替として呼ばれる場合がある１つの仮想記憶空間を作る、デバイスまたはシステムである。通常、ＳＤは、いくつかの記憶デバイスから空間を引き出して、単一記憶デバイスよりも大きく、データ損失なしに一定数のディスクの不具合に耐えることができるように、冗長な情報を含む。例示的実施形態では、各ＳＤは、以下「論理ユニット識別子」または「ＬＵＩＤ」と呼ばれる一意の識別子と関連付けられ、かつ各ＳＤは、例えば、２ＴＢ〜６４ＴＢ以上等の所定の最大サイズほどには大きくはないであろう。コマンドがＳＤに送信されると、ＲＡＩＤコントローラは、通常、同時にＳＤの全記憶デバイスにコマンドを転送する。ＲＡＩＤコントローラは、典型的な記憶デバイスの主要制限のうちの３つ、すなわち、記憶デバイスが通常、記憶システムの最も遅い構成要素であること、通常壊滅的な不具合を最も被りがちであること、および通常比較的小さい記憶容量を有することを克服するのに役立つ。
【００１７】
「ＲＡＩＤシステム」は、１つ以上のＲＡＩＤコントローラ、およびいくつかの記憶デバイスを含む、デバイスまたはシステムである。通常、ＲＡＩＤシステムは、２つのＲＡＩＤコントローラ（１つに不具合が起きた場合、他方は作動し続けることができるように、また、両方が正常である間は、負荷を共有するため）、および数十の記憶デバイスを内包するであろう。例示的実施形態では、ＲＡＩＤシステムは、通常、２個から３２個の間のＳＤで構成される。ファイルサーバは、データを記憶するか、または読み出す必要がある時、ＲＡＩＤシステムのＲＡＩＤコントローラにコマンドを送信し、次いでＲＡＩＤコントローラが、個々の記憶デバイスへのコマンドの経路を選択すること、および必要に応じてデータの記憶または読み出しに対して責任を有する。一部のＲＡＩＤシステムでは、１つのＳＤ（「１次ＳＤ」と呼ばれる）に書き込まれるデータが、冗長性の目的で、ＲＡＩＤシステムによって別のＳＤ（本明細書では「２次ＳＤ」または「ミラーＳＤ」と呼ばれる）に自動的に書き込まれるように、ＳＤ間にミラー関係を確立することができる。２次ＳＤは、１次ＳＤと同じＲＡＩＤシステムによって、あるいは異なる局所または遠隔のＲＡＩＤシステムによって、管理されてもよい。ＳＤをミラーリングすることで、ＳＤまたは場合により一部の状況では複数のＳＤまでもの、損失もしくは破損からの回復を提供するために、複数のＳＤにわたるＲＡＩＤ１＋０機能性を効果的に提供する。
【００１８】
「ファイルシステム」は、ファイル記憶システムに記憶される、ファイルおよびディレクトリ（フォルダ）の構造である。ファイル記憶システム内で、ファイルシステムは通常、いくつかの仮想記憶構成体を使用して管理され、例示的実施形態では、ファイルシステムは、レンジ、ストライプセット、およびスパンと呼ばれる仮想記憶構成体の階層を使用して管理される。「レンジ」は、それ自体上にある１次ＳＤ、または、同一データを内包し、それゆえ単一ＳＤと同じ記憶容量を提供することが想定される１次／２次ＳＤペアのいずれかから成る。「ストライプセット」は、１つ以上のレンジから成る。「スパン」は、１つ以上のストライプセットから成る。したがって、スパンは、最終的には１つ以上のＳＤ（通常、４個から５０個のＳＤ）から成る。スパンは、１つ以上のファイルシステムに分割されることができ、各ファイルシステムは、個別の名前および識別子、ならびに潜在的に異なる特徴（例えば、１つのファイルシステムは３２ＫＢのクラスタで、別のファイルシステムは４ＫＢのクラスタでフォーマットされてもよく、１つのファイルシステムはＷｏｒｍで、別のファイルシステムはそうではなくてもよい、など）を有する。スパン上の各ファイルシステムは、個別にフォーマットされ、マウントされ、アンマウントされる。ファイルシステムは、いずれの順番でも、かつ、いつでも、作り出され、削除されてもよい。ファイルシステムは、自動的に拡張する（あるいは代替として、自動拡張を防止または制限する）ように構成することができ、または手動で拡張することができる。
【００１９】
図１は、本発明の例示的実施形態に従う、ファイル記憶システムの概略ブロック図である。とりわけ、ファイル記憶システムは、インターネットプロトコルネットワーク（例えば、インターネット）等の通信ネットワーク９００４を介して種々のクライアントデバイス９００６１−９００６Ｍと通信し、また、ＦｉｂｒｅＣｈａｎｎｅｌネットワーク等の記憶ネットワーク９０１０を介して種々のＲＡＩＤシステム９００８１−９００８Ｎとも通信する、いくつかのファイルサーバ（単一ファイルサーバ９００２が、簡略化のため便宜上示されている）を含む。クライアントデバイス９００６１−９００６Ｍおよびファイルサーバ９００２は、ＣＩＦＳおよび／またはＮＦＳ等の１つ以上のネットワークファイルプロトコルを使用して通信する。ファイルサーバ９００２およびＲＡＩＤシステム９００８１−９００８Ｎは、ＳＣＳＩ等の記憶プロトコルを使用して通信する。ファイル記憶システムは、冗長で切り替えられるＦｉｂｒｅＣｈａｎｎｅｌネットワークを介していずれのファイルサーバがいずれのＲＡＩＤシステムとも通信することができるフルメッシュ構成を含む、種々の構成において、相互接続される複数のファイルサーバおよび複数のＲＡＩＤシステムを含み得ることに留意すべきである。
【００２０】
ファイルサーバ９００２は、１つ以上のファイルシステムを管理する。ファイルサーバ９００２は、指定される名前の下でのツリーまたはサブツリー等の、ファイルシステムの部分へのクライアントアクセスを可能にするように構成することができる。ＣＩＦＳ用語では、かかるアクセスは「共有」と呼ばれ得る一方、ＮＦＳ用語では、かかるアクセスは「エクスポート」と呼ばれ得る。ファイルサーバ９００２は内部に、例えば、米国特許出願第０９／８７９，７９８号および第１０／８８９，１５８号（これら出願は参照により援用される）に記載されるような、種々のハードウェア実装型サブシステムおよび／またはハードウェア促進型サブシステムを含んでもよく、かつ、ファイルサーバ９００２は、例えば、米国特許出願第１０／２８６，０１５号および第１１／８４１，３５３号（これら出願は参照により援用される）に記載されるような、複数のリンクされたサブモジュールを含む、ハードウェアベースのファイルシステムを含んでもよい。
【００２１】
各ＲＡＩＤシステム９００８は、通常、少なくとも１つのＲＡＩＤコントローラ（および大抵、冗長性のために２つのＲＡＩＤコントローラ）だけでなく、ＲＡＩＤコントローラ（単数または複数）によって管理される、いくつかの物理的記憶デバイス（例えば、ディスク）も含む。ＲＡＩＤシステム９００８は、その記憶資源をいくつかのＳＤに統合する。例えば、各ＲＡＩＤシステム９００８は、２個から３２個の間のＳＤで構成されてもよい。各ＳＤは、所定の最大サイズ（例えば、２ＴＢ〜６４ＴＢ以上）に限定されてもよい。いくつかの記憶デバイスを組み合わせて１つのＳＤにすることで、増加した速度（個々の記憶デバイスは比較的遅いが、データは、ボトルネックを解消するために、いくつかの記憶デバイスに渡ってストライプ化され得る）、増加した容量（個々の記憶デバイスは比較的小さいが、より多くの使用可能な空間を提供するために、いくつかの記憶デバイスを組み合わせることができる）、抽象化（使用される空間の量は、単一記憶デバイスのサイズより大きいか、または小さいかのいずれかであり得る）、および復元力（パリティまたは冗長性情報は、ＳＤが記憶デバイスの損失に耐えることができるように、各記憶デバイス上に記憶することができる）を含む、いくつかの恩恵を提供することができる。
【００２２】
ファイルサーバ９００２は、１つ以上のＳＤを使用するように構成され、単一ＲＡＩＤシステムから、または複数のＲＡＩＤシステムから成ることができる。ファイルサーバ９００２は、通常、各ＳＤが１次または２次であるかを調べるために、ＲＡＩＤシステムに問い合わせることができる。どのＳＤがファイルサーバ９００２によって使用されるかを制御する方法は、本明細書では「ライセンス供与」と呼ばれる。すなわち、実際は、ファイルサーバ９００２は通常、一部のＳＤにライセンスを供与し、他には供与しないであろう。
【００２３】
ファイルサーバ９００２は内部で、いくつかのＳＤを組み合わせて、本明細書では「スパン」と呼ばれる、より大きな記憶プールにすることができる。基本的にスパンは、いくつかのＳＤのＲＡＩＤ０アレイである。いくつかのＳＤを組み合わせてスパンにすることで、増加した速度（複数のＲＡＩＤシステム上の複数のＳＤ間にＩ／Ｏを分散することで、記憶ボトルネックをさらに解消し得る）、増加した記憶容量（スパンは、単一ＳＤよりも大きくなることが可能であり、２テラバイトに限定される場合がある）、および、より柔軟な記憶空間割り当てを可能にするさらなる抽象化を含む、複数の物理ディスクを組み合わせてＳＤにすることによって得られる恩恵と類似のいくつかの恩恵を提供することができる。
【００２４】
図２は、本発明の例示的実施形態に従う、スパンの概略ブロック図である。示す通り、スパン９０１１は、論理的に連続記憶空間を提供する、９０１２１−９０１２Ｋと番号付けされたいくつかのストライプセットから成る。次に、各ストライプセット９０１２は、１つ以上のレンジ、すなわち１つ以上のＳＤから成る。本実施例では、ストライプセット９０１２１は、９０１３１−９０１３Ｊと番号付けされたレンジを含む。
【００２５】
大量のデータがストライプセットに書き込まれる時、ファイルサーバ９００２は概して、データの全てを単一レンジ／ＳＤに書き込むよりむしろ、ストライプセットの中の複数のレンジ／ＳＤに渡って、データを「ストライプ化する」。例えば、大量のデータが書き込まれる時、ファイルサーバ９００２は、第１の４ＭＢのデータをレンジ／ＳＤ９０１３１に書き込み、次の４ＭＢのデータをレンジ／ＳＤ９０１３２に書き込む等してもよく、データをレンジ／ＳＤ９０１３Ｊへ書き込んだ後、レンジ／ＳＤ９０１３１に戻り再循環する。とりわけ、かかる「ストライプ化」は、ファイルサーバ９００２がいくつかのＳＤ（したがって、いくつかの記憶デバイス）を使用している機会を増加させ、いくつかのＲＡＩＤシステムによって管理され得る。
【００２６】
例示的実施形態では、スパンが作り出される時、スパン９０１１は最初、単一ストライプセットを内包するが、さらなるストライプセットが時間とともにスパンに追加されてもよく、異なるストライプセットが異なる数のレンジ／ＳＤを有してもよいことに留意すべきである。例示的実施形態では、各ストライプセットは、その容量にかかわらず、最大３２個のＳＤを内包することができる。各ＳＤはミラーリングされてもよいが、かかるミラーリングは、ファイルサーバ９００２によってよりもむしろ、ＲＡＩＤシステムによって行われ、それゆえ、ミラーリングされたＳＤに対して、ファイルサーバ９００２は１次ＳＤにのみコマンドを送信し、１次ＳＤのみが、ストライプセット当たり３２個のＳＤという制限に向かって加算される。また、例示的実施形態では、ストライプセットが作り出されると、それ以上のＳＤはそのストライプセットには追加されない。したがって、ＳＤをスパンに追加するために、新しいストライプセットがさらなるＳＤに対して形成され、新しいストライプセットは基本的に、スパンの中の既存のストライプセット（単数または複数）に連結される。
【００２７】
それゆえ、例えば、スパンは最初、０〜３と番号付けされた４つのＳＤを有する単一のストライプセットを含んでもよい。５〜７と番号付けされた３つの新しいＳＤをスパンに追加するために、ＳＤ５〜７を含む第２のストライプセットが作り出され、第２のストライプセットは、第１のストライプセットに連結される。既存のデータは、スパンの中の７つのＳＤ全てに渡って「再ストライプ化」はされない。
【００２８】
本質的に、ファイルシステムは、Ｎ個の連続的な記憶のブロックを有する連続記憶空間として見なすことができる。本考察のために、ブロックには論理的に、連続的に０からＮ−１までの番号を付けることができる。実際は、ファイルシステム記憶空間は、スパン内では物理的に非連続であってよく、複数のストライプセットからの記憶域を含んでもよい。一般的に言えば、ファイルサーバ９００２は、スパン内において、ファイルシステム記憶ブロックを物理的記憶場所にマッピングする。したがって、ファイルシステムが複数のストライプセットからの記憶域を含む例示的実施形態では、ファイルシステム記憶ブロックの第１の組は、第１のストライプセットにマッピングされ、ファイルシステム記憶ブロックの第２の組は、第２のストライプセットにマッピングされる等である。
【００２９】
図３は、本発明の例示的実施形態における、ファイルシステム記憶ブロックとストライプセットと間の関係を示す概略図である。本実施例では、Ｎ個のファイルシステム記憶ブロックおよび２つのストライプセットがあり、第１のＭ個のブロック（０からＭ−１の番号が付けられる）は、ストライプセット１にマッピングされ、残りのＮ−Ｍ個のブロック（ＭからＮ−１の番号が付けられる）は、ストライプセット２にマッピングされる。各ストライプセットと関連付けられる何百万ものブロックが存在してもよく、ブロックの数は各ストライプセットで異なってもよいことが留意されるべきである。
【００３０】
データをファイルシステム用の記憶域の中へ書き込むために、ファイルサーバ９００２は、そのデータ用に、ファイルシステム記憶空間内に、フリー記憶ブロックを設置する必要がある。そのため、ファイルサーバ９００２は通常、各ブロックに対して、ブロックがフリーか使用されているかを示す、フリーブロックオブジェクトを維持する（例えば、メモリの中および／またはディスク上に）。例示的実施形態では、フリーブロックオブジェクトは、ブロックがフリーか使用されているかを示すように、ブロック当たり２ビットの状態指標を有する、連続的に配列されたフリーブロックビットマップの形態である（２ビットは、ブロック当たり４つの状態の表示を可能にし、状態のうちの１つは「フリー」を表す）。本考察のため、フリーブロックビットマップにおける状態指標は、論理的にゼロからＮ−１までの番号を付けることができ、各状態指標は対応して番号を付けられたブロックと関連付けられる。しかしながら、フリーブロックオブジェクトは、例えば、リンクされた一覧、表、または他のデータ構造といった、他の形態であり得ることに留意すべきである。
【００３１】
図４は、本発明の例示的実施形態に従う、フリーブロックビットマップの概略図である。本実施例では、「Ｘ」状態指標は使用中であるブロックを表し、「Ｏ」状態指標はフリーであるブロックを表す。行番号０は、０〜７の番号を付けられたブロックに対する状態指標を含み、行番号１は、８〜１５の番号を付けられたブロックに対する状態指標を含む等である。それゆえ、本実施例では、ブロック番号２、４、６、８、９、１０、１１、１５、１６、２１、および２３はフリーである。
【００３２】
フリー記憶ブロックは通常、フリーブロックオブジェクトを通して、連続的にフリーブロックを順次探すことによって設置され、フリーブロックオブジェクト全体が検索された後、フリーブロックオブジェクトの先頭に戻って循環する。例示的実施形態では、例えば、ファイルサーバ９００２は、「フリー」と印が付いた（対応するファイルシステム記憶ブロックがフリーであること示す）状態指標を、フリーブロックビットマップを通して順次探してもよい。ファイルサーバ９００２は通常、フリーブロックビットマップの中のその位置を追跡するために、書き込みポインタを維持する。
【００３３】
ここで、かかる連続的な検索を、再び図４を参照した例示により説明することにする。書き込みポインタがビットマップの先頭にあり（すなわち、行０の状態指標０）、ファイルサーバ９００２は５つのフリーブロックが必要であると想定すると、ファイルサーバ９００２は、５つの「フリー」状態指標を設置するまで、行０の状態指標０から開始して、ビットマップを通して連続的に順次進行する。それゆえ、本実施例において、ファイルサーバ９００２は、３、４、６、８、および９の番号を付けられたフリーブロックを選択する。書き込みポインタは、後続の検索動作のために、行１の状態指標２に残される。
【００３４】
ファイルシステムが、例えば図３に示す通り、複数のストライプセットからの記憶域を含む場合、ファイルサーバ９００２は、別のストライプセットと関連付けられるフリーブロックを探す前に、ある１つのストライプセットと関連付けられるファイルシステム記憶ブロックの全てを検索するであろうから、上記の連続的な検索は、複数のストライプセットにわたる不均衡な書き込みパターンをもたらし得る。ビットマップの先頭から開始すると、例えば、ファイルサーバ９００２は、ストライプセット２と関連付けられる、残りのブロックと関連付けられる状態指標を通して順次進行する前に、ストライプセット１と関連付けられる、第１のＭ個のブロックと関連付けられる状態指標を通して順次進行するであろう。典型的な記憶システムの中の膨大な量の記憶空間（すなわち、多数テラバイト）に起因して、ファイルサーバ９００２が、特定のストライプセットと関連付けられるブロックを通して順次進行するには、非常に長い時間がかかる場合がある（例えば、おそらく数日のオーダー）。この連続的な検索を使用して、大量のデータ（おそらく多数ギガバイト）は、概して、データが、別のストライプセットと関連付けられるブロックに書き込まれる前に、ある１つのストライプセットと関連付けられるブロックに書き込まれるであろう。特定のストライプセットが遅い場合（例えば、それが少なすぎるＳＤしか内包しないため、またはそのストライプセットによって使用されるＲＡＩＤコントローラがオーバーロードであるため）、ファイルシステム全体に対する書き込み性能は、書き込みポインタが異なるストライプセットに移るまで、ファイルサーバ９００２がそのストライプセットと関連付けられるフリーブロックを使用している期間中、遅い場合がある。
【００３５】
そのため、本発明の例示的実施形態では、ファイルサーバ９００２は、記憶空間に渡って書き込み操作を分配するために（例えば、ディスク利用の平衡を保つのに役立つために）、不連続的な態様において、フリーブロックオブジェクトを通して検索する。例えば、ファイルサーバ９００２は、フリーブロックオブジェクトをいくつかのセクションに論理的に分割し、それらセクションを通して不連続的に順次進行してもよく、次のセクションに移る前にセクション全体を通して検索する。フリーブロックオブジェクトの異なる部分が異なるストライプセットに対応する、複数のストライプセットまたは類似の構成体を有する実施形態では、ファイルサーバ９００２は、種々のストライプセット間をジャンプしてもよく、種々のストライプセット間で書き込み操作を分散するために、別のストライプセットに対応するフリーブロックオブジェクトのセクションに移る前に、ある１つのストライプセットに対応するフリーブロックオブジェクトのセクションを検索する（例えば、ファイルサーバ９００２は、１つのストライプセットと関連付けられるセクション、次いで次のストライプセットと関連付けられるセクションを通して等、順次進行してもよい）。
【００３６】
図５は、本発明の例示的実施形態に従う、動的な書き込み平衡化のためのかかる不連続的な検索を描写する概略図である。本実施例では、ストライプセット１と関連付けられるブロックは、５つのセクション（ここでは便宜上、１〜５の番号を付ける）に論理的に分割される一方、ストライプセット２と関連付けられるブロックは、４つのセクション（ここでは便宜上、１〜４の番号を付ける）に論理的に分割される。例えば、セクションが種々のストライプセットに渡って固定サイズであり、ストライプセット２がたまたまストライプセット１の４／５のサイズであるので、または、２つのストライプセットが同じサイズであるが、それらを異なる数のセクションに論理的に分割する他の理由があるので、ストライプセットは、異なる数のセクションを有してもよい。
【００３７】
セクションの中に示す数は、本実施例において、セクションがファイルサーバ９００２によって検索される順序を示す。具体的には、ビットマップの先頭から開始して、ファイルサーバ９００２は最初に、ストライプセット１のセクション１を通して検索し（ステップ１）、次いで、ストライプセット２のセクション１を通して検索し（ステップ２）、その後、ストライプセット１のセクション２を通して検索する（ステップ３）等である。本実施例では、ファイルサーバ９００２がストライプセットの最後のセクションを通して検索した後、ファイルサーバ９００２は、そのストライプセット内の検索を継続するために、ストライプセットの最初のセクションに戻り循環する。このパターンは図５に見ることができ、例えば、ここで、ステップ８におけるストライプセット２のセクション４を通して検索した後、次にファイルサーバ９００２が、ステップ１０におけるストライプセット２のセクション１内で検索する（すなわち、ステップ９におけるストライプセット１のセクション５を通して検索した後）。種々の代替的実施形態では、ストライプセットは、異なる手段で論理的に分割することができ、異なるパターンで検索され得ることに留意されるべきである。例えば、ストライプセット（したがって、およびセクション）が異なるストライプセットにおいて異なるサイズである場合でさえ、ストライプセットは、等しい数のセクションに論理的に分割され得る。
【００３８】
動的な書き込み平衡化のための不連続的な検索を補助するために、例えば、まさに記載する通り、ファイルサーバ９００２は通常、例えば、各ストライプセットのサイズ、ファイルシステム空間内の各ストライプセットの開始オフセット、および、次のストライプセットに移る前にストライプセットの中で検索されるべき空間の量を含む、種々のタイプの情報を維持する。ファイルサーバ９００２はまた通常、例えば、各ストライプセット内での検索場所を維持するための、各ストライプセット用の書き込みポインタ、および現在の検索場所／ストライプセットを維持するための、グローバル書き込みポインタを含む、種々のポインタも維持する。
【００３９】
上記実施形態の種々の側面が、種々の代替的実施形態においてより一般的に使用されてもよいことに留意されるべきである。例えば、ファイルシステム記憶空間が、ストライプセットまたは他の類似する記憶構成体にマッピングされる必要性はない。ある実施形態では、他の理由で、ファイルシステム記憶空間を通した不連続的な検索を使用するのが望ましい場合もある。
【００４０】
図６は、本発明の第１の代替的実施形態に従う、ストライプセットから独立している不連続的な検索を描写する概略図である。本実施例では、ファイルシステム記憶空間は、８つのセクション（便宜上、１〜８の番号を付ける）に局所的に分割される。本実施例において、セクションの中に示す数字は、セクションがファイルサーバ９００２によって検索される順序を示す。具体的には、ファイルシステム記憶空間の先頭から開始して、ファイルサーバ９００２は先ず、セクション１を通して検索し（ステップ１）、次いでセクション３を通して検索し（ステップ２）、その後セクション５を通して検索する（ステップ３）等である。
【００４１】
図７は、本発明の第２の代替的実施形態に従う、ストライプセットから独立している不連続的な検索を描写する概略図である。本実施例では、ファイルシステム記憶空間は、８つのセクション（便宜上、１〜８の番号を付ける）に局所的に分割される。本実施例において、セクションの中に示す数字は、セクションがファイルサーバ９００２によって検索される順序を示す。具体的には、ファイルシステム記憶空間の先頭から開始して、ファイルサーバ９００２は先ず、セクション１を通して検索し（ステップ１）、次いでセクション５を通して検索し（ステップ２）、その後セクション２を通して検索する（ステップ３）等である。
【００４２】
上記の通り、ファイルシステム記憶空間は、１つ以上の新しいストライプセットを追加することによって、時間とともに拡張されてもよい。新しいストライプセットが追加されると、フリーブロックオブジェクトは、ストライプセットによって提供される新しい記憶空間を含むように、効果的に拡張される（フリーブロックオブジェクトは、ストライプセットが追加される時に、物理的に拡張してもよいか、または拡張しなくてもよい）。上記の通り、フリーブロックオブジェクトを通して不連続的に検索するのに加えて、またはかかる不連続的な検索の代替として、ファイルサーバ９００２は、新しいストライプセットが追加される時、新しく追加されたストライプセットからフリーブロックを使用し始めるように構成されてもよい。新しく追加されたストライプセットからフリーブロックを使用する１つの理由は、新しく追加されたストライプセットは通常、最初は非常に効率的であるからである。それゆえ、新しいストライプセットが追加されると、ファイルサーバ９００２は、フリーブロックを最初に新しく追加されたストライプセットから取るように、新しく追加されたストライプセットを参照するように、グローバル書き込みポインタを更新してもよい。ファイルサーバ９００２は、ある所定の閾値または条件に達成するまで、新しく追加されたストライプセットからフリーブロックを取るように構成されてもよく、達成した時点で、ファイルサーバ９００２は、フリーブロックオブジェクトの不連続的な検索を開始または再開してもよい。
【００４３】
それゆえ、例示的実施形態では、記憶サーバは、メモリと、記憶プロセッサであって、複数の連続記憶場所のうちのそれぞれの可用性を示すフリーブロックオブジェクトをメモリの中に維持し、データを記憶域に書き込むための利用可能な記憶場所を識別するために、フリーブロックオブジェクトを通して不連続的に検索するように構成される記憶プロセッサとを含んでもよい。
【００４４】
例示的実施形態では、ファイルサーバは、他のシステムオブジェクトと並行してディスク上にフリーブロックオブジェクトを維持するが、必要な時にはフリーブロックオブジェクトを作業メモリの中に複製し（すなわち、メモリの中にキャッシュされる）、フリーブロックオブジェクトのキャッシュされた複製を使用してフリーブロックを検索することに留意すべきである。
【００４５】
用語「サーバ」は、通信システムにおいて使用され得るデバイスを記載するために本明細書で使用され、本発明をいずれかの特定のタイプのデバイスに限定するように解釈されるべきではないことに留意すべきである。それゆえ、本発明の実施形態は、クライアント、サーバ、コンピュータ、スイッチ、または他のタイプの通信デバイスに実装されてもよい。
【００４６】
本発明は、プロセッサと共に使用するためのコンピュータプログラム論理（例えば、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ、または汎用コンピュータ）、プログラマブル論理デバイスと共に使用するためのプログラマブル論理（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他のＰＬＤ）、個別部品、集積回路（例えば、特定用途向け集積回路（ＡＳＩＣ））、またはそれらのいずれの組み合わせを含むいずれの他の手段を含むがそれらに決して限定されない、多くの異なる形態において実現されてもよい。
【００４７】
本明細書において前述した機能性の全てまたは一部を実装するコンピュータプログラム論理は、ソースコード形態、コンピュータで実行可能な形態、および様々な中間形態（例えば、アセンブラ、コンパイラ、リンカ、またはロケータによって生成される形態）を含むがそれらに決して限定されない、種々の形態において実現されてもよい。ソースコードは、種々のオペレーティングシステムまたはオペレーティング環境と共に使用するための、適切なプログラミング言語（例えば、オブジェクトコード、アセンブリ言語、あるいは、Ｆｏｒｔｒａｎ、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、またはＨＴＭＬ等の高水準言語）に実装される、一連のコンピュータプログラム命令を含んでもよい。ソースコードは、種々のデータ構造および通信メッセージを定義および使用してもよい。ソースコードは、コンピュータで実行可能な形態（例えば、インタプリタを介して）であってもよく、またはソースコードは、コンピュータで実行可能な形態に変換されてもよい（例えば、トランスレータ、アセンブラ、またはコンパイラを介して）。
【００４８】
コンピュータプログラムは、半導体メモリデバイス（例えば、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ、またはＦｌａｓｈプログラマブルＲＡＭ）、磁気メモリデバイス（例えば、ディスケットまたは固定ディスク）、光学メモリデバイス（例えば、ＣＤ−ＲＯＭ）、ＰＣカード（例えば、ＰＣＭＣＩＡカード）、または他のメモリデバイス等、有形の記憶媒体の中に、永久的または一時的のいずれかで、いずれの形態（例えば、ソースコード形態、コンピュータで実行可能な形態、または中間形態）に固定されてもよい。コンピュータプログラムは、アナログ技術、デジタル技術、光学技術、無線技術（例えば、Ｂｌｕｅｔｏｏｔｈ）、ネットワーク技術、およびネットワーク間通信技術を含むがそれらに決して限定されない、種々の通信技術のうちのいずれかを使用して、コンピュータに伝送可能である信号の中にいずれの形態で固定されてもよい。コンピュータプログラムは、印刷または電子書類（例えば、パッケージソフトウェア）が付随するリムーバブルな記憶媒体としていずれの形態で配布されるか、コンピュータシステムにあらかじめ搭載されるか（例えば、システムＲＯＭまたは固定ディスク上に）、あるいは通信システム（例えば、インターネットまたはＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）を介してサーバまたは電子掲示板から配布されてもよい。
【００４９】
本明細書において前述した機能性の全てまたは一部を実装する、ハードウェア論理（プログラマブル論理デバイスと共に使用するためのプログラマブル論理を含む）は、従来の手動方法を使用して設計されてもよく、あるいは、コンピュータ支援設計（ＣＡＤ）、ハードウェア記述言語（例えば、ＶＨＤＬまたはＡＨＤＬ）、またはＰＬＤプログラミング言語（例えば、ＰＡＬＡＳＭ、ＡＢＥＬ、またはＣＵＰＬ）等の種々のツールを使用して、電子的に設計されるか、キャプチャされるか、シミュレーションされるか、または文書化されてもよい。
【００５０】
プログラマブル論理は、半導体メモリデバイス（例えば、ＲＡＭ、ＲＯＭ、ＰＲＯＭ、ＥＥＰＲＯＭ、またはＦｌａｓｈプログラマブルＲＡＭ）、磁気メモリデバイス（例えば、ディスケットまたは固定ディスク）、光学メモリデバイス（例えば、ＣＤ−ＲＯＭ）、または他のメモリデバイス等、有形の記憶媒体の中に、永久的または一時的のいずれかで固定されてもよい。プログラマブル論理は、アナログ技術、デジタル技術、光学技術、無線技術（例えば、Ｂｌｕｅｔｏｏｔｈ）、ネットワーク技術、およびネットワーク間通信技術を含むがそれらに決して限定されない、種々の通信技術のうちのいずれかを使用して、コンピュータに伝送可能である信号の中に固定されてもよい。プログラマブル論理は、印刷または電子書類（例えば、パッケージソフトウェア）が付随するリムーバブルな記憶媒体として配布されるか、コンピュータシステムにあらかじめ搭載されるか（例えば、システムＲＯＭまたは固定ディスク上に）、あるいは通信システム（例えば、インターネットまたはＷｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）を介してサーバまたは電子掲示板から配布されてもよい。
【００５１】
本発明は、本発明の真の範囲から逸脱することなく、他の特定の形態において実現されてもよい。記載した実施形態は、全ての点において例示的であるようにのみ考慮されるべきであり、限定的ではない。
【図１】
0005712127.tif 000002
【図２】
0005712127.tif 000003
【図３】
0005712127.tif 000004
【図４】
0005712127.tif 000005
【図５】
0005712127.tif 000006
【図６】
0005712127.tif 000007
【図７】
0005712127.tif 000008