(57)【特許請求の範囲】
【請求項１】
永続ストレージにデータを格納するための方法であって、
前記永続ストレージにおける複数のストレージデバイス（ＳＤ）のうちの１つであるターゲットストレージデバイス（ＳＤ）を決定することと、
前記複数のＳＤのうち少なくとも前記ターゲットＳＤおよび第２のＳＤがデータを格納するのに利用可能であることを示すバッドＳＤマップを使用して、あらかじめ規定されたマルチキャストアドレスグループのセットからあらかじめ規定されたマルチキャストアドレスグループを選択することと、
前記あらかじめ規定されたマルチキャストアドレスグループに関連付けられる物理アドレスを選択することと、
前記物理アドレスを使用して、前記ターゲットＳＤに前記データを書き込み、かつ、前記第２のＳＤに前記データのコピーを書き込むこととを含む、方法。
【請求項２】
前記あらかじめ規定されたマルチキャストアドレスグループを選択する前に、前記あらかじめ規定されたマルチキャストアドレスグループを有するインプット／アウトプット（ＩＯ）ファブリックを構成することをさらに含み、
前記ターゲットＳＤおよび前記第２のＳＤに前記データを書き込むことは、前記ターゲットＳＤに前記データを書き込むよう前記ＩＯファブリックを使用することを含む、請求項１に記載の方法。
【請求項３】
前記ターゲットＳＤおよび前記第２のＳＤは前記永続ストレージ内のスライスに存在し、
前記ターゲットＳＤおよび前記第２のＳＤは前記ＩＯファブリックを介してアクセス可能である、請求項２に記載の方法。
【請求項４】
前記スライスは第２の複数のＳＤを含み、前記第２の複数のＳＤは前記ターゲットＳＤおよび前記第２のＳＤを含み、前記複数のＳＤは前記第２の複数のＳＤを含み、
前記バッドＳＤマップは、前記第２の複数のＳＤの各々の状態を含む、請求項３に記載の方法。
【請求項５】
前記ターゲットＳＤは、複数のボールテッドメモリセグメントを含むボールテッドメモリを含み、前記データは、前記複数のボールテッドメモリセグメントの１つに書き込まれる、請求項１に記載の方法。
【請求項６】
前記ターゲットＳＤはソリッドステートストレージをさらに含み、
前記方法はさらに、前記ボールテッドメモリセグメントにおける前記データを前記ソリッドステートストレージへコピーすることを含む、請求項５に記載の方法。
【請求項７】
永続ストレージにデータを格納するための方法であって、
永続ストレージにおける複数のストレージデバイス（ＳＤ）のうちの１つであるターゲットストレージデバイス（ＳＤ）を決定することと、
前記ターゲットＳＤにおいてボールテッドメモリセグメントを識別することと、
前記ボールテッドメモリセグメントおよび前記複数のＳＤの第２のＳＤにおける第２のボールテッドメモリセグメントに関連付けられるあらかじめ規定されたマルチキャストアドレスグループを識別することと、
前記あらかじめ規定されたマルチキャストアドレスグループに関連付けられる物理アドレスを選択することと、
前記物理アドレスを使用して前記永続ストレージに前記データを書き込むことと、
前記あらかじめ規定されたマルチキャストアドレスグループを識別する前に、前記あらかじめ規定されたマルチキャストアドレスグループを有するインプット／アウトプット（ＩＯ）ファブリックを構成することを含む、方法。
【請求項８】
前記永続ストレージに前記データを書き込むことは、前記ターゲットＳＤに前記データを書き込むために前記ＩＯファブリックを使用することを含み、
前記ターゲットＳＤおよび前記第２のＳＤは前記永続ストレージ内のスライスに存在し、
前記ターゲットＳＤおよび前記第２のＳＤは前記ＩＯファブリックを介してアクセス可能である、請求項７に記載の方法。
【請求項９】
前記ターゲットＳＤは、複数のボールテッドメモリセグメントを含むボールテッドメモリを含み、前記ボールテッドメモリセグメントは、前記複数のボールテッドメモリセグメントの１つである、請求項７に記載の方法。
【請求項１０】
前記ターゲットＳＤはＮＡＮＤフラッシュをさらに含み、
前記方法はさらに、前記ボールテッドメモリセグメントにおける前記データを前記ＮＡＮＤフラッシュにコピーすることを含む、請求項７に記載の方法。
【請求項１１】
前記ボールテッドメモリセグメントを識別することは、
バッドＳＤマップを得ることを含み、前記バッドＳＤマップは前記ターゲットＳＤの状態を含み、
前記ボールテッドメモリセグメントは、少なくとも部分的に、前記バッドＳＤマップを使用して識別される、請求項７に記載の方法。
【請求項１２】
前記ボールテッドメモリセグメントを識別することは、
第２の複数のＳＤを含むスライスを識別することを含み、前記第２の複数のＳＤは前記ターゲットＳＤおよび前記第２のＳＤを含み、前記複数のＳＤは前記第２の複数のＳＤを含み、前記ボールテッドメモリセグメントを識別することはさらに、
前記スライスについて、第１の複数のＳＤの各々の状態を含むバッドＳＤマップを得ることと、
前記スライスにおいて前記ターゲットＳＤについて論理ＳＤインデックスを決定することとを含み、
前記ボールテッドメモリセグメントは、少なくとも部分的に、前記スライスについて前記論理ＳＤインデックスおよび前記バッドＳＤマップを使用して識別される、請求項７に記載の方法。
【請求項１３】
前記スライスについて前記論理ＳＤインデックスおよび前記バッドＳＤマップを少なくとも部分的に使用して、前記第２のボールテッドメモリセグメントを識別することをさらに含む、請求項１２に記載の方法。
【請求項１４】
ストレージ機器であって、
プロセッサと、
メモリと、
永続ストレージと、
前記プロセッサと前記永続ストレージとの間に配置されるインプット／アウトプット（ＩＯ）ファブリックとを含み、前記永続ストレージは、
ボールテッドメモリセグメントおよび第１のソリッドステートストレージを含む第１のストレージデバイス（ＳＤ）と、
第２のボールテッドメモリセグメントおよび第２のソリッドステートストレージを含む第２のＳＤとを含み、
前記ストレージ機器は、
少なくとも前記第１のＳＤおよび前記第２のＳＤがデータを格納するのに利用可能であることを示すバッドＳＤマップを使用して、あらかじめ規定されたマルチキャストアドレスグループのセットからあらかじめ規定されたマルチキャストアドレスグループを選択することと、
前記あらかじめ規定されたマルチキャストアドレスグループに関連付けられる物理アドレスを選択することと、
前記物理アドレスを使用して、前記第１のＳＤに前記データを書き込み、かつ、前記第２のＳＤに前記データのコピーを書き込むことを行うようにプログラムされる、ストレージ機器。
【請求項１５】
前記ストレージ機器はさらに、
前記あらかじめ規定されたマルチキャストアドレスグループを選択する前に、前記あらかじめ規定されたマルチキャストアドレスグループを有するインプット／アウトプット（ＩＯ）ファブリックを構成するようにプログラムされ、
前記第１のＳＤおよび前記第２のＳＤに前記データを書き込むことは、前記第１のＳＤに前記データを書き込むよう前記ＩＯファブリックを使用することを含む、請求項１４に記載のストレージ機器。
【請求項１６】
前記第１のＳＤおよび前記第２のＳＤは前記永続ストレージ内のスライスに存在し、
前記第１のＳＤおよび前記第２のＳＤは前記ＩＯファブリックを介してアクセス可能である、請求項１５に記載のストレージ機器。
【請求項１７】
前記スライスは第２の複数のＳＤを含み、前記第２の複数のＳＤは前記第１のＳＤおよび前記第２のＳＤを含み、前記複数のＳＤは前記第２の複数のＳＤを含み、
前記バッドＳＤマップは、第２の複数のＳＤの各々の状態を含む、請求項１６に記載のストレージ機器。
【請求項１８】
前記第１のＳＤは、複数のボールテッドメモリセグメントを含むボールテッドメモリを含み、前記データは、前記複数のボールテッドメモリセグメントの１つに書き込まれる、請求項１４に記載のストレージ機器。
【請求項１９】
前記第１のＳＤはさらにソリッドステートストレージを含み、
前記ボールテッドメモリセグメントにおける前記データは、前記ソリッドステートストレージへコピーされる、請求項１８に記載のストレージ機器。
【請求項２０】
前記ＩＯファブリックは、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ： Peripheral Component Interconnect Express）を使用して実現される、請求項１４に記載のストレージ機器。
【発明の詳細な説明】
【背景技術】
【０００１】
関連出願への相互参照
この出願は、２０１５年５月１９日に出願された米国仮特許出願連続番号第６２／１６３，７５４号の優先権を主張する。米国仮特許出願連続番号第６２／１６３，７５４号は、ここでその全文が参照により援用される。
【０００２】
背景
システムが永続ストレージにデータを書き込みかつ永続ストレージからデータを読み出し得るスピードはしばしば、システムの全体の性能の重大なファクタである。永続ストレージシステムにデータを転送するまたは永続ストレージシステムからデータを転送する従来のアプローチは、クライアントシステムおよび永続ストレージシステムの両方上のソフトウェア、ファームウェアおよびハードウェアの複数のレイヤーによる処理を必要とする。ストレージシステムがクライアントデータについて障害レジリエンシーの増加を提供することを望む場合、書込データの複数のコピーがストレージシステムによって作成される。結果として、柔軟性の増加を達成するために、存在するストレージ媒体に一度書き込むのに必要なレイテンシーを越えて余分なレイテンシーが引き起こされる。
【図面の簡単な説明】
【０００３】
【図１】当該技術の１つ以上の実施形態に従った例示的なシステムを示す図である。
【図２】当該技術の１つ以上の実施形態に従った例示的なストレージデバイスを示す図である。
【図３Ａ】当該技術の１つ以上の実施形態に従った、ボールテッドメモリにデータを格納するための方法を示す図である。
【図３Ｂ】当該技術の１つ以上の実施形態に従った、ボールテッドメモリにデータを格納するための方法を示す図である。
【図３Ｃ】当該技術の１つ以上の実施形態に従った、ボールテッドメモリにデータを格納するための方法を示す図である。
【図４Ａ】当該技術の１つ以上の実施形態に従った例を示す図である。
【図４Ｂ】当該技術の１つ以上の実施形態に従った例を示す図である。
【発明を実施するための形態】
【０００４】
詳細な説明
ここで、当該技術の特定の実施形態を添付の図面を参照して詳細に記載する。さまざまな図における同様の要素には、一貫性のために、同様の参照番号が示される。
【０００５】
当該技術の実施形態の以下の詳細な説明において、当該技術のより完全な理解を提供するために多くの特定の詳細が記載される。しかしながら、当該技術がこれらの特定の詳細がなくても実施されてもよいことは当業者には明らかであろう。他の例では、説明を不必要に複雑にすることを回避するよう周知の特徴は詳細に記載されない。
【０００６】
この出願の全体にわたって、順序数（たとえば、第１、第２、第３など）は、ある要素（すなわち当該出願における任意の名詞）についての形容詞として使用され得る。順序数の使用は、要素の任意の特定の順序を暗示または作り出すものではなく、また、たとえば「後に」、「前に」、「単一の」および他のそのような用語といった用語の使用によって明らかに開示されていなければ、任意の要素をただ単一の要素に限定するものではない。むしろ、順序数の使用は要素を区別するためのものである。例として、第１の要素は第２の要素とは異なり、第１の要素は１つより多い要素を含み得、要素の順序において第２の要素に後続する（または先行する）。
【０００７】
一般に、当該技術の実施形態は、レイテンシーを犠牲にすることなく、永続ストレージにデータを信頼性のために複数のコピーとともに書き込むとともに、物理的なストレージ構成における変更に適合するための方法およびシステムに関する。より具体的には、当該技術の実施形態は、マルチキャスティングを使用して、ストレージモジュールのセットにおいて永続メモリセグメントにデータを書き込むことに関する。さらに、当該技術の実施形態は、動的に適切なマルチキャスト構成を選択するために、ストレージモジュールの現在の状態を考慮する。
【０００８】
より具体的には、当該技術の実施形態は、あらかじめ規定されたマルチキャストアドレスグループのセットを作成することに関し、あらかじめ規定されたマルチキャストアドレスグループの各々は、データの少なくとも２つのコピーが永続ストレージにおける異なる位置に書き込まれることを可能にする。あらかじめ規定されたマルチキャストアドレスグループのセットは、データを格納するためにさまざまなストレージデバイスが存在しないか、またはそうでなければ、利用可能ではない場合でも、データの少なくとも２つのコピーが永続ストレージに書き込まれ得るように作成される。さらに、あらかじめ規定されたマルチキャストアドレスグループのセットからの特定のあらかじめ規定されたマルチキャストアドレスグループの選択は、永続ストレージの現在の状態（すなわちどのストレージデバイスがデータを格納するのに利用可能であるか）に基づく。この態様で、当該技術の実施形態は、永続ストレージの状態に関する情報と組み合わせて、あらかじめ規定されたマルチキャストアドレスグループのセットを使用して、Ｉ／Ｏファブリックの動的なマルチキャストインプリメンテーションを可能にする。換言すると、当該技術の実施形態は、永続ストレージの状態と組み合わせて、永続ストレージにおいてデータの少なくとも２つのコピーをどこに書き込むべきかを動的に決定するよう、あらかじめ規定されたマルチキャストアドレスグループのセットを使用する。
【０００９】
当該技術の実施形態は、クライアントからの書込要求に応答して、ストレージ機器が効率的にデータの複数のコピーを格納することを可能にし得る。マルチキャストアドレスグループを有するようにあらかじめ構成される（あらかじめ規定されたマルチキャストアドレスグループとも称される）ＩＯファブリックを使用して、（ソリッドステートストレージに直接的に書き込む代わりに）メモリロケーションにデータを書き込むことにより、効率（または低レイテンシー）が達成され得る。当該技術の一実施形態において、個々のマルチキャストアドレスグループの構成は、Ｉ／Ｏファブリックのオペレーションの間に変化し得ない。換言すると、ひとたびマルチキャストアドレスグループが構成され、かつ、Ｉ／Ｏファブリックがマルチキャストアドレスグループを使用して要求を処理している場合、Ｉ／Ｏファブリックが特定のマルチキャストアドレスグループの使用を、再構成される間に一時停止しなければ、マルチキャストアドレスグループの構成は変更され得ない。
【００１０】
図１は、当該技術の１つ以上の実施形態に従った例示的なシステムを示す。当該システムは、１つ以上のストレージ機器（１０２）に動作可能に接続される１つ以上のクライアント（１００）を含む。これらのコンポーネントの各々は以下に記載される。
【００１１】
当該技術の一実施形態において、各クライアント（１００）は、プロセッサ（または別のタイプの処理コンポーネント）と、メモリと、ストレージ機器におけるインプット／アウトプット（ＩＯ）ファブリック（１０４）に接続することを可能にする物理インターフェイスとを含む物理デバイスである。クライアントの各々は、クライアントとＩＯファブリックとの間で、リンク、すなわち物理的接続、を介してＩＯファブリックに接続され得る。
【００１２】
さらに、各クライアントは、当該技術の１つ以上の実施形態を実現するために、通信プロトコル（またはその部分）を実現するための機能を含み得る。より具体的には、各クライアントは、要求および／もしくはデータをストレージ機器に（通信プロトコルを使用して）送り、ならびに／または、（通信プロトコルを使用して）ストレージ機器から応答および／もしくはデータを受け取る機能を含み得る。
【００１３】
当該技術の一実施形態において、ペリフェラルコンポーネントインターコネクト（ＰＣＩ：Peripheral Component Interconnect）、ＰＣＩエクスプレス（ＰＣＩｅ: PCI-Express）、ＰＣＩエクステンデッド（ＰＣＩ−Ｘ： PCI-eXtended）、ノンボラタイルメモリエクスプレス（ＮＶＭｅ：Non-Volatile Memory Express）、ノンボラタイルメモリエクスプレス（ＮＶＭｅ）オーバＰＣＩエクスプレスファブリック（Non-Volatile Memory Express (NVMe) over a PCI-Express fabric）、ノンボラタイルメモリエクスプレス（ＮＶＭｅ）オーバイーサネット（登録商標）ファブリック（Non-Volatile Memory Express (NVMe) over an Ethernet fabric）、およびノンボラタイルメモリエクスプレス（ＮＶＭｅ）オーバインフィニバンドファブリック（Non-Volatile Memory Express (NVMe) over an Infiniband fabric）といった通信プロトコルの１つ以上を使用して、クライアント（１００）はストレージ機器（１０２）と通信するように構成される。当業者であれば、当該技術は上記のプロトコルに限定されないということを理解するであろう。
【００１４】
当該技術の一実施形態において、ストレージ機器（１０２）は、ＩＯファブリック（１０４）、プロセッサ（１０６）、メモリ（１０８）および永続ストレージ（１１０）を含む。これらのコンポーネントの各々は以下に記載される。
【００１５】
当該技術の一実施形態において、ＩＯファブリック（１０４）は、ストレージ機器（１０２）において、クライアントとさまざまなコンポーネントとの間の物理的な接続性を提供する１つ以上の物理コンポーネントである。たとえば、図１に示されるように、ＩＯファブリックは、プロセッサ（１０６）および永続ストレージ（１１０）（または、より具体的には、そこに位置するストレージデバイス（１１４Ａ，１１４Ｎ））に物理的に接続される。
【００１６】
さらに、ＩＯファブリックは、マルチキャスティングを実現する機能を含む（たとえば図３Ａ〜図３Ｃを参照）。より具体的には、当該技術の１つ以上の実施形態において、ＩＯファブリックは、（ｉ）データおよび物理アドレスを含むＩＯトランザクションを受け取り、（ｉｉ）物理アドレスがマルチキャストアドレスグループの一部であると決定し、（ｉｉｉ）（ｉｉ）でなされた決定に基づいて、マルチキャスト書込を実行する（すなわちストレージ機器内の２つ以上のメモリロケーション（下に記載される）へのデータのコピーの書き込みを開始する）（たとえば図３Ｂおよび図３Ｃを参照）機能を含む。
【００１７】
当該技術の一実施形態において、ＩＯファブリックは、ここで参照により援用される米国特許出願連続番号第１４／２２４，８４６号に記載されるＰＣＩｅファブリックのようなＰＣＩｅファブリックである。ＩＯファブリックはＰＣＩｅファブリックとして実現されているが、当該技術は、他の通信プロトコルを使用して実現され、および／または、米国特許出願連続番号第１４／２２４，８４６号に記載されるＰＣＩｅファブリックとは異なるアーキテクチャを含むＩＯファブリックを使用して実現され得る。
【００１８】
当該技術の一実施形態において、プロセッサ（１０６）は、命令を実行するように構成される単一コアまたはマルチコアを有する電子回路のグループである。当該技術の一実施形態において、プロセッサは、複合命令セット（ＣＩＳＣ： Complex Instruction Set）アーキテクチャまたは縮小命令セット（ＲＩＳＣ： Reduced Instruction Set）アーキテクチャを使用して実現され得る。プロセッサは、（ＰＣＩｅプロトコルによって規定されるように）ルートコンプレックスを含み得る。そのような場合、メモリ（１０８）は、ルートコンプレックスを介してプロセッサに接続され得る。代替的には、メモリ（１０８）は、別の接続メカニズムを使用して、プロセッサに直接的に接続され得る。当該技術の一実施形態において、メモリ（１０８）は任意の揮発性メモリに対応する。当該揮発性メモリは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ、ＳＤＲ  ＳＤＲＡＭおよびＤＤＲ  ＳＤＲＡＭを含むが、これらに限定されない。
【００１９】
当該技術の一実施形態において、永続ストレージ（１１０）は、各々がデータを格納するように構成される２つ以上のストレージデバイス（１１４Ａ，１１４Ｎ）を含む。ストレージデバイスは、スライス（１１２Ａ，１１２Ｍ）へグループ化され得、各スライスは少なくとも２つのストレージデバイスを含む。さらに、各ストレージデバイスは単一のスライスにのみ関連付けられ得る。当該技術の一実施形態において、ＩＯファブリックは１つ以上のスイッチ（図示せず）を含んでおり、各スイッチは、物理的なポートのセットと、１つの物理的なポート上で要求および／またはデータを受け取り、かつ、１つ以上の他の物理的なポートに要求および／またはデータをルーティングする機能とを含む。そのような場合、所与のスライスに関連付けられるすべてのストレージデバイスは、ポートのセットにおける１つのポートを介して同じスイッチに接続される。換言すると、１つのスライス当たり１つのスイッチが存在し得、また、スイッチに接続されるすべてのストレージデバイスは同じスライスに関連付けられる。ストレージデバイスに関する付加的な詳細が図２において以下に提供される。
【００２０】
図２は、当該技術の１つ以上の実施形態に従った例示的なストレージデバイスを示す。ストレージデバイス（２００）は、ストレージデバイスコントローラ（２０２）、ボールテッドメモリ（vaulted memory）（２０６）、ソリッドステートストレージ（２０４）およびキャパシタ（２１０）を含み得る。これらのコンポーネントの各々は以下に記載される。
【００２１】
当該技術の一実施形態において、ストレージデバイスコントローラ（２０２）は、要求および／またはデータをＩＯファブリックから受け取るように構成される。さらに、ストレージデバイスコントローラは、永続であるか、または、ソリッドステートストレージへのボールティング（vaulting）により永続化されるメモリへのデータを受け取るように構成される。ストレージデバイスコントローラはさらに、永続メモリおよび／またはソリッドステートストレージからデータを読み出すとともにストレージシステムにおける他のコンポーネントにデータを提供するように構成され得る。
【００２２】
当該技術の一実施形態において、ボールテッドメモリ（２０６）は、２つ以上のボールテッドメモリセグメント（２０８Ａ，２０８Ｐ）へ論理的または物理的に分割され、各ボールテッドメモリセグメントはボールテッドメモリセグメントＩＤに関連付けられる。ボールテッドメモリセグメントは、データがストレージ機器に書き込まれる書込パスの一部として使用される（図３Ａ〜図３Ｃを参照）。当該技術の一実施形態において、ストレージデバイスコントローラ（２０２）は、ストレージデバイスにおける電源障害の通知（またはストレージデバイスが電力を失うかもしれない任意の他のイベント）の場合には、ソリッドステートストレージ（２０４）にボールテッドメモリ（２０６）の全コンテンツを書き込むように構成される。より具体的には、ストレージデバイスコントローラは、電源障害の通知の時間と、ストレージデバイスへの電力の実際の損失との間に、ソリッドステートストレージ（２０４）にボールテッドメモリの全コンテンツを書き込むように構成される。当該技術の一実施形態において、キャパシタ（２１０）は、ボールテッドメモリにおけるすべてのデータがソリッドステートストレージに書き込まれるために、ストレージデバイス（２００）に十分な量の電力を放電し得るようにサイズ決めされる。
【００２３】
当該技術の一実施形態において、ソリッドステートストレージ（２０４）は、永続データを格納するようソリッドステートメモリを使用する任意のデータストレージデバイスに対応する。当該技術の一実施形態において、ソリッドステートメモリは、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、磁気ＲＡＭメモリ（Ｍ−ＲＡＭ）、スピントルク磁気ＲＡＭメモリ（ＳＴ−ＭＲＡＭ）、相変化メモリ（ＰＣＭ）、メモリジスティブメモリ（memristive memory）、または不揮発性ストレージクラスメモリ（ＳＣＭ）として規定される任意の他のメモリを含んでもよいが、これらに限定されない。当業者であれば、当該技術の実施形態はストレージクラスメモリに限定されないということを理解するであろう。
【００２４】
図３Ａ〜図３Ｃは、当該技術の１つ以上の実施形態に従った、ボールテッドメモリにデータを格納するための方法を示す。フローチャートにおけるさまざまなステップが順次、提示および記載されるが、当業者であれば、ステップのうちのいくつかまたはすべてが異なる順番で実行されてもよいこと、ステップのうちのいくつかまたはすべてが組み合わせられてもよくまたは省略されてもよいこと、およびステップのうちのいくつかまたはすべてが並列に実行されてもよいことを理解するであろう。
【００２５】
より具体的には、当該技術の１つ以上の実施形態において、クライアントからの書込要求に応答して、ストレージ機器は、データの少なくとも２つのコピーを格納するように構成される。ストレージ機器は、データの複数のコピーを格納するようマルチキャスティングを使用し得る。そのような場合、ＩＯファブリックは、１つ以上のマルチキャストアドレスグループを有するようあらかじめ構成され得、ストレージ機器は、マルチキャストアドレスグループ内の物理アドレスを選択し、その後、選択された物理アドレスを使用して永続ストレージにデータを格納する機能を含み得る。図３Ａ〜図３Ｃを参照して、図３Ａは、永続ストレージにデータを書き込むために物理アドレスを決定するための方法を示す。図３Ｂおよび図３Ｃは、永続ストレージにデータを書き込むために前述の物理アドレスを使用するためのさまざまな方法を示す。
【００２６】
図３Ａを参照して、ステップ３００では、書込要求がストレージ機器によってクライアントから受け取られる。書込要求は、クライアントに格納されるデータの論理アドレスを含み得る。書込要求はさらにそれ自体データを含み得る。当該技術の一実施形態では、論理アドレスは、データがクライアントの視点から見て存在するように思われるアドレスである。当該技術の一実施形態では、論理アドレスは、ｎタプルにハッシュ関数（たとえばＳＨＡ−１、ＭＤ−５など）を適用することによって生成されるハッシュ値であり（または当該ハッシュ値を含む）、ｎタプルは、＜オブジェクトＩＤ，オフセット＞である。そのような実施形態において、オブジェクトＩＤはファイルを識別し得、オフセットは、ファイルの開始アドレスに対する位置を特定する。当該技術の別の実施形態において、ｎタプルは＜オブジェクトＩＤ，オフセット，発生時間＞であり、発生時間は、（オブジェクトＩＤを使用して識別される）ファイルが作成された時間に対応する。代替的には、論理アドレスは、論理オブジェクトＩＤおよび論理バイトアドレスか、または論理オブジェクトＩＤおよび論理アドレスオフセットを含んでもよい。当該技術の別の実施形態では、論理アドレスは、オブジェクトＩＤおよびオフセットを含む。当業者は、論理アドレスが上記の実施形態に限定されないということを認識するであろう。
【００２７】
図３Ａの議論を継続して、ステップ３０２では、ターゲットストレージデバイス（ＳＤ）は、永続ストレージにおいて現在利用可能であるストレージデバイスのセットから選択される。ＳＤは、ストレージ機器がデータをＳＤから読み出すとともにＳＤにデータを書き込むことが可能である場合、利用可能であると考えられ得る。したがって、ＳＤがストレージ機器において物理的に存在し得る間、別の問題によってＳＤが読出要求および書込要求を処理することを妨げられていれば、ＳＤは必ずしも利用可能ではない場合がある。ストレージ機器は、ストレージ機器におけるどのＳＤが利用可能かトラッキングし得る。
【００２８】
ステップ３０４では、ターゲットＳＤがひとたび選択されると、ターゲットＳＤが位置するスライス（たとえば図１を参照）が識別される。ストレージ機器は、ターゲットＳＤが存在するスライスを識別するよう、ＳＤスライスマッピングを使用し得る。たとえば、ターゲットＳＤは、（３６のうち）ＳＤナンバー７であり得、ＳＤスライスマッピングに基づいて、（スライス０〜５のうちの）スライスナンバー１に位置し得る。
【００２９】
ステップ３０６では、ステップ３０４において識別されたスライス内のターゲットＳＤの論理ＳＤインデックスが決定される。たとえば、ターゲットＳＤがＳＤナンバー７であり、ターゲットＳＤが位置するスライスがＳＤ５、７〜９および１４〜１５を含む場合、当該スライスについての論理ＳＤインデックスは２である（可能な論理ＳＤインデックスは１〜６と番号付けされる）。
【００３０】
ステップ３０８では、バッドＳＤマッピング（bad SD mapping）が得られる。バッドＳＤマッピングは、スライス（すなわちステップ３０４において識別されたスライス）についてのバッドＳＤマッピングか、ステップ３０４において識別されたスライスを含むスライスのセットについてのバッドＳＤマッピングか、または、ストレージ機器におけるすべてのスライスについてのバッドＳＤマッピングであり得る。バッドＳＤマッピングの範囲にかかわらず、バッドＳＤマッピングは、少なくともステップ３０４において識別されるスライスにおけるＳＤの利用可能性を特定する。たとえば、スライスがＳＤ５、７〜９および１４〜１５を含み、かつ、ＳＤ５および８が利用不可能である場合、バッドＳＤマッピングは＜０１１０１１＞であり得、０はＳＤ（論理ＳＤインデックスによって参照される）が利用可能ではないことを示しており、また、１はＳＤ（論理ＳＤインデックスによって参照される）が利用可能であることを示す。バッドＳＤマッピングの他の表現（すなわちビットマップでない表現）は、当該技術から逸脱することがなければ、使用され得る。
【００３１】
ステップ３１０では、（ステップ３０６において得られた）論理ＳＤインデックスと、ステップ３０８において得られたバッドＳＤマッピングとが、ボールテッドメモリセグメントＩＤを決定するように使用される。より具体的には、当該技術の一実施形態では、バッドＳＤマッピングおよび論理ＳＤインデックスは、マルチキャストアドレスグループＩＤ（ＭＣ  ＧＩＤ）を決定するよう使用され、ＭＣ  ＧＩＤは少なくとも１つのボールテッドメモリセグメントＩＤに関連付けられる。ＭＣ  ＧＩＤがひとたび識別されると、論理ＳＤインデックスは、ＭＣ  ＧＩＤに関連付けられるボールテッドメモリセグメントＩＤを識別するように使用される。
【００３２】
以下に、当該技術の１つ以上の実施形態に従った、ボールテッドメモリセグメントＩＤを識別する一例を記載する。この例は当該技術を限定するようには意図されない。
【００３３】
論理ＳＤインデックスが２でありバッドＳＤマッピングが＜００１０１１＞であるシナリオを考える。ボールテッドメモリセグメントＩＤは、上記の情報およびテーブル１を使用して決定され得る。
【００３４】
【表１】
0006348928.tif 000002
【００３５】
上記の例を継続して、論理ＳＤインデックス（すなわち２）およびバッドＳＤマッピング（すなわち＜００１０１１＞）は、ＭＣ  ＧＩＤ＝Ｇ１を識別するために使用される。より具体的には、まず、論理ＳＤインデックスは、Ｇ０〜Ｇ７からＧ０〜Ｇ３にＭＣ  ＧＩＤを絞るよう使用され得る。バッドＳＤマッピング（またはバッドＳＤマッピングにおける少なくとも最初の３ビット）が、Ｇ０〜Ｇ３のセットからＧ１を識別するように使用され得る。ひとたびＧ１が識別されると、論理ＳＤインデックスは、Ｖ１をボールテッドメモリセグメントＩＤとして識別するよう使用される。
【００３６】
ステップ３１２では、（物理アドレスの範囲を特定する）マルチキャストアドレスグループは、ステップ３１０において識別されるボールテッドメモリセグメントＩＤに基づいて決定される。より具体的には、当該技術の一実施形態において、論理ＳＤインデックスおよびボールテッドメモリセグメントＩＤの組合せは、マルチキャストアドレス範囲を識別するために使用される。当該技術の一実施形態において、マルチキャストアドレスグループは、論理ＳＤインデックスに関連付けられるＳＤにおける選択されたボールテッドメモリセグメントへのデータの書込と、ステップ３０２において選択されたＳＤと同じスライス内の異なるＳＤにおける別のボールテッドメモリセグメントへのデータのコピーの書込とを可能にするために、ＩＯファブリック内にあらかじめ構成される。
【００３７】
以下に、当該技術の１つ以上の実施形態に従ったマルチキャストアドレスグループを識別することの一例を記載する。この例は、当該技術を限定するようには意図されない。
【００３８】
ボールテッドメモリセグメントＩＤがＶ１であり、論理ＳＤインデックスが２であるシナリオを考える。マルチキャストアドレスグループが、上記の情報およびテーブル２を使用して決定され得る。テーブル２は、ボールテッドメモリセグメントＩＤとマルチキャストアドレスグループとの間のマッピングを提供する。このマッピングの一部として、テーブル２は、ストレージ機器内においてデータがどのようにミラーリングされるか示す。たとえば、Ｖ０がボールテッドメモリセグメントＩＤである場合、データの１つのコピーは、論理ＳＤインデックス１を使用して識別されたＳＤにおけるボールテッドメモリに格納され、データの第２のコピーは、論理インデックス２を使用して識別されたＳＤにおけるボールテッドメモリに格納される。
【００３９】
【表２】
0006348928.tif 000003
【００４０】
上記のテーブルを使用して、１つ以上の行を選択するためにボールテッドセグメントメモリＩＤが使用される。ボールテッドメモリセグメントＩＤを使用して１つより多い行が識別される場合、上記のテーブルにおいて、適切な行を識別するよう論理ＳＤインデックスが使用される。当該例において、ボールテッドメモリセグメントＩＤはＶ１であり、そのため、Ｖ１に関連付けられる１つの行だけが存在する。しかしながら、Ｖ１に関連付けられる２つの可能なマルチキャストアドレスグループ、すなわちＧ１およびＧ３、が存在する。（バッドＳＤマッピングを使用して決定されるように）すべてのＳＤが利用可能な場合、マルチキャストアドレスグループとしてＧ３が選択される。しかしながら、すべてのＳＤが利用可能であるわけではない場合、マルチキャストアドレスグループＧ１が選択される。当該例では、すべてのＳＤが利用可能であるわけではないので、Ｇ１がマルチキャストアドレスグループとして選択される。
【００４１】
テーブル２がクライアントからのデータのミラーリングを示している一方、当該技術は、永続ストレージに対するデータの２つより多いコピーの書込を含むよう実現され得る。
【００４２】
図３Ａの議論を継続して、ステップ３１４では、選択されたマルチキャストアドレスグループに関連付けられるアドレス範囲内の物理アドレスが選択される。
【００４３】
このステージでは、物理アドレスが決定されている。前述のマルチキャストアドレスを使用して永続ストレージにデータを書き込むためにさまざまな方法が使用されてもよい。図３Ｂおよび図３Ｃは、マルチキャストアドレスを使用するための２つの例示的な方法を示す。（図３Ｂおよび図３Ｃに示される方法を除く）他の方法が、当該技術から逸脱することなく、永続ストレージにデータを書き込むために実現され得る。
【００４４】
図３Ｂを参照して、図３Ｂは、データがまずストレージ機器のメモリ（たとえば図１の１０８を参照）に格納され、その後、プロセッサ（たとえば図１の１０６を参照）が永続ストレージへのデータの書込を開始するシナリオを記載する。より具体的には、ステップ３２０では、ストレージ機器は、そのメモリ（たとえば図１の１０８を参照）にクライアントからのデータのコピーを格納する。ステップ３２０は、ステップ３２２に先立って任意の時点に行なわれ得る（たとえば、図３Ａのステップと並行して行なわれ得る）。当該技術の別の実施形態において、書込要求は、データ（たとえば図３Ａのステップ３００を参照）を含み得、そのような場合、ステップ３２０はステップ３００の一部として実行され得る。
【００４５】
ステップ３２２では、プロセッサは、ＩＯファブリックへのＩＯトランザクションを発行し、ＩＯトランザクションは、クライアントがその書込要求において特定した（たとえば図３Ａのステップ３００参照）データと、物理アドレスとを含む。ＩＯトランザクションは、任意のフォーマットであり得、かつ、データが永続ストレージに書き込まれるために、ＩＯファブリックがＩＯトランザクションを処理するように必要とされる任意の他のコンテンツを含む。当該技術の一実施形態において、ＩＯトランザクションはＰＣＩｅトランザクションである。当該技術はＰＣＩｅトランザクションに限定されない。
【００４６】
ステップ３２４では、ターゲットＳＤにおいてボールテッドメモリセグメントにデータの１つのコピーを格納し、同じスライスにおける別のＳＤのボールテッドメモリにデータの第２のコピーを格納するために、ＩＯファブリックは、ＩＯトランザクションを受け取って処理する。ＩＯトランザクションを処理することは、（ｉ）ＩＯトランザクションにおける物理アドレスがマルチキャストアドレスグループに関連付けられていると決定することと、（ｉｉ）（ｉ）での決定に基づいて、ターゲットＳＤへの１つのＩＯトランザクションを発行し（図３Ａのステップ３０４を参照）、別のＳＤ（図３Ａのステップ３１２において決定される）に第２のＩＯトランザクションを発行することとを含み得る。ステップ３２４の後に、メモリ（１０８）における１つのコピーと、ターゲットＳＤでのボールテッドメモリにおける１つのコピーと、ターゲットＳＤと同じスライスにおける別のＳＤでのボールテッドメモリにおける１つのコピーといったデータの３つのコピーがストレージ機器に存在し得る。
【００４７】
図３Ｃを参照して、図３Ｃは、ステップ３１４で得られた物理アドレスを使用して、クライアントがＩＯトランザクションを生成するシナリオを記載する。
【００４８】
ステップ３３０では、ストレージ機器はクライアントに物理アドレスを提供する。
ステップ３３２では、クライアントは、ＩＯファブリックにＩＯトランザクションを発行し、ＩＯトランザクションは、クライアントからのデータと物理アドレスとを含む。ＩＯトランザクションは、任意のフォーマットであり得、かつ、データが永続ストレージに書き込まれるために、ＩＯファブリックがＩＯトランザクションを処理するように必要とされる任意の他のコンテンツを含む。当該技術の一実施形態において、ＩＯトランザクションはＰＣＩｅトランザクションである。当該技術はＰＣＩｅトランザクションに限定されない。
【００４９】
ステップ３３４では、ＩＯファブリックは、メモリにデータの１つのコピーを格納し、ターゲットＳＤにおけるボールテッドメモリセグメントにデータの１つのコピーを格納し、同じスライスにおける別のＳＤのボールテッドメモリにデータの１つのコピーを格納するために、ＩＯトランザクションを受け取るとともに処理する。ＩＯトランザクションを処理することは、（ｉ）ＩＯトランザクションにおける物理アドレスがマルチキャストアドレスグループに関連付けられていると決定することと、（ｉｉ）（ｉ）での決定に基づいて、ターゲットＳＤへの１つのＩＯトランザクションを発行し（図３Ａのステップ３０４を参照）、別のＳＤ（図３Ａのステップ３１２において決定される）に第２のＩＯトランザクションを発行し、プロセッサに第３のＩＯトランザクションを発行することとを含み得る。ステップ３２４の後に、メモリ（１０８）における１つのコピーと、ターゲットＳＤでのボールテッドメモリにおける１つのコピーと、ターゲットＳＤと同じスライスにおける別のＳＤでのボールテッドメモリにおける１つのコピーといったデータの３つのコピーがストレージ機器に存在し得る。
【００５０】
図３Ｂまたは図３Ｃが永続ストレージ内にデータを格納するように実現されるかどうかにかかわらず、何らかの後の時点で、ボールテッドメモリにおけるデータのコピーの各々は、ボールテッドメモリが位置するＳＤのソリッドステートストレージに格納される。
【００５１】
図４Ａ〜図４Ｂは、当該技術の１つ以上の実施形態に従った例を示す。当該技術は上記の例に限定されない。
【００５２】
図４Ａを参照して、ストレージ機器が複数のスライスを含み、スライス１がＳＤ１、ＳＤ２およびＳＤ３を含む（図４Ａを参照）シナリオを考える。さらに、スライス１における前述のＳＤの論理ＳＤインデックスは、それぞれ１、２および３である。
【００５３】
この例において、クライアントがストレージ機器に書込要求を送信すると仮定する。当該要求に応答して、ストレージ機器はターゲットＳＤとしてＳＤ１を選択する。この情報に基づいて、ＳＤ１についての論理ＳＤインデックスは１である。その後、ストレージ機器は、スライス１について、＜１１０＞というバッドＳＤマッピングを得る。論理ＳＤインデックスおよびバッドＳＤマッピングは、テーブル１（上記）を使用してＭＣ  ＧＩＤとしてＧ０を識別するために使用される。論理ＳＤインデックスとともに、ＭＣ  ＧＩＤおよびテーブル１が、Ｖ０をボールテッドメモリセグメントＩＤとして識別するよう使用される。
【００５４】
バッドＳＤマッピングとともに、ボールテッドメモリセグメントＩＤ（Ｖ０）およびテーブル２が、Ｇ１をマルチキャストアドレスグループとして識別するよう使用される。テーブル２に示されるように、Ｇ１の使用（またはより具体的にはＧ１内の物理アドレス）によって、データのコピーが、ＳＤ１におけるボールテッドメモリセグメントＩＤ  Ｖ０に関連付けられるボールテッドメモリセグメントに格納され、かつ、データの別のコピーがＳＤ２におけるボールテッドメモリセグメントＩＤ  Ｖ０に関連付けられるボールテッドメモリセグメントに格納される（図４Ａを参照）。
【００５５】
図４Ｂを参照して、ストレージ機器が複数のスライスを含み、スライス１がＳＤ１、ＳＤ２およびＳＤ３を含む（図４Ｂを参照）シナリオを考える。さらに、スライス１における前述のＳＤの論理ＳＤインデックスは、それぞれ１、２および３である。
【００５６】
この例において、クライアントがストレージ機器に書込要求を送信すると仮定する。当該要求に応答して、ストレージ機器はターゲットＳＤとしてＳＤ１を選択する。この情報に基づいて、ＳＤ１についての論理ＳＤインデックスは１である。その後、ストレージ機器は、スライス１について、＜１０１＞というバッドＳＤマッピングを得る。論理ＳＤインデックスおよびバッドＳＤマッピングは、テーブル１（上記）を使用してＭＣ  ＧＩＤとしてＧ２を識別するために使用される。論理ＳＤインデックスとともに、ＭＣ  ＧＩＤおよびテーブル１が、Ｖ３をボールテッドメモリセグメントＩＤとして識別するよう使用される。
【００５７】
バッドＳＤマッピングとともに、ボールテッドメモリセグメントＩＤ（Ｖ３）およびテーブル２が、Ｇ２をマルチキャストアドレスグループとして識別するよう使用される。テーブル２に示されるように、Ｇ２の使用（またはより具体的にはＧ２内の物理アドレス）によって、データのコピーが、ＳＤ１におけるボールテッドメモリセグメントＩＤ  Ｖ３に関連付けられるボールテッドメモリセグメントに格納され、かつ、データの別のコピーがＳＤ３におけるボールテッドメモリセグメントＩＤ  Ｖ３に関連付けられるボールテッドメモリセグメントに格納される（図４Ｂを参照）。
【００５８】
当該技術の実施形態を実行するコンピュータ読取可能プログラムコードの形態にあるソフトウェア命令は、全体的または部分的に、一時的にまたは永久的に、ＣＤ、ＤＶＤ、ストレージデバイス、ディスケット、テープ、フラッシュメモリ、物理メモリまたは任意の他のコンピュータ読取可能記憶媒体のような一時的でないコンピュータ読取可能媒体上に格納され得る。具体的には、ソフトウェア命令は、プロセッサによって実行されると、当該技術の実施形態を実行するように構成されるコンピュータ読取可能プログラムコードに対応し得る。
【００５９】
当該技術を限られた数の実施形態に関して記載したが、この開示の利益を有する当業者であれば、本願明細書において開示される当該技術の範囲から逸脱しない他の実施形態が作り出され得るということを理解するであろう。したがって、当該技術の範囲は、添付の特許請求の範囲によってのみ限定されるべきである。
【図１】
0006348928.tif 000004
【図２】
0006348928.tif 000005
【図３Ａ】
0006348928.tif 000006
【図３Ｂ】
0006348928.tif 000007
【図３Ｃ】
0006348928.tif 000008
【図４Ａ】
0006348928.tif 000009
【図４Ｂ】
0006348928.tif 000010