(57)【要約】装置およびシステムは、インサーバストレージエリアネットワーク（「ＳＡＮ」）用に開示される。第１のストレージ制御部１５２ａは、第１のサーバ１１２ａ内に含まれる。前記第１のストレージ制御部１５２ａは、少なくとも１のストレージデバイス１５４ａを制御する。第１のサーバ１１２ａは、この第１のサーバと第１のストレージ制御部１５２ａとによって共有されるネットワークインターフェースを具える。ストレージ通信モジュール１６２が含まれ、第１のストレージ制御部１５２ａと、第１のサーバ１１２ａの外部にある少なくとも１つのデバイスとの通信を促進し、第１のストレージ制御部１５２ａと外部デバイスとの間の通信は、第１のサーバ１１２ａから独立している。インサーバＳＡＮモジュール１６４が含まれ、ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用して応答する。このインサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａから独立したストレージ要求に応答し、前記サーバ要求は、クライアント１１４から受信される。【選択図】図１Ｃ
2010515116.tif 000002
【特許請求の範囲】
【請求項１】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用装置において、
第１のサーバ内の第１のストレージ制御部であって、この第１のストレージ制御部が、少なくとも１つのストレージデバイスを制御し、前記第１のサーバは、この第１のサーバおよび前記第１のストレージ制御部によって共有されるネットワークインターフェースを具える、第１のストレージ制御部と、
前記第１のストレージ制御部と前記第１のサーバの外部にある少なくとも１つのデバイスとの間の通信を促進するストレージ通信モジュールであって、前記第１のストレージ制御部と外部デバイスとの間の通信が前記第１のサーバから独立している、ストレージ通信モジュールと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用してストレージ要求に応答するインサーバＳＡＮモジュールであって、このインサーバＳＡＮモジュールは第１のサーバから独立して前記ストレージ要求に応答し、サービス要求はクライアントから受信される、インサーバＳＡＮモジュールと、
を具えることを特徴とする装置。
【請求項２】
前記第１のサーバおよび前記第１のストレージ制御部が共有ネットワークアドレスを使用してアクセス可能なように、前記ネットワークインターフェース、前記第１のストレージ制御部および前記第１のサーバを設定する共通インターフェースモジュールをさらに具えることを特徴とする請求項１に記載の装置。
【請求項３】
前記第１のサーバの外部にあるデバイスが、第２のストレージ制御部を具え、前記第２のストレージは、少なくとも１つのストレージデバイスを制御し、前記インサーバＳＡＮモジュールが、ネットワークインターフェースを介し、第１のサーバから独立して、前記第１および第２のストレージ制御部間の通信を使用して、前記ストレージ要求に応答することを特徴とする請求項１に記載の装置。
【請求項４】
前記第２のストレージ制御部が、第２のサーバ内にあることを特徴とする請求項３に記載の装置。
【請求項５】
前記第２のストレージ制御部が、第２のサーバ以外のデバイスには位置されていることを特徴とする請求項３に記載の方法。
【請求項６】
前記第１のサーバを超えて拡張可能なプロトコルを使用するシステムバスを更に具え、前記ネットワークインターフェースが前記システムバスの一部であり、前記第１のストレージ制御部が、前記システムバスを介して前記第２のストレージ制御部と通信することを特徴とする請求項３に記載の装置。
【請求項７】
前記第１のストレージ制御部および前記第２のストレージ制御部は、コンピュータネットワークを介して通信することを特徴とする請求項３に記載の装置。
【請求項８】
前記第１のサーバの外部にあるデバイスが、クライアントと、外部クライアントに由来する前記ストレージ要求を具え、前記第１の制御部が、少なくともＳＡＮの一部として設定され、インサーバＳＡＮモジュールは、前記第１のサーバから独立して、前記ネットワークインターフェースを介した前記ストレージ要求に応答することを特徴とする請求項１に記載の装置。
【請求項９】
前記第１のサーバが利用不能なとき、前記インサーバＳＡＮモジュールが、前記外部クライアントからのストレージ要求に応答することを特徴とする請求項８に記載の装置。
【請求項１０】
前記第１のストレージ制御部は、コンピュータネットワークを介して、前記第１のサーバの外部にあるクライアントと通信することを特徴とする請求項１に記載の装置。
【請求項１１】
前記第１のストレージ制御部は、システムバスを介してクライアントと通信することを特徴とする請求項１に記載の装置。
【請求項１２】
前記クライアントが、前記第１のサーバの外部にあり、前記システムバスが、前記第１のサーバを超えて拡張可能なプロトコルを具え、前記ネットワークインターフェースが前記システムバスの一部であることを特徴とする請求項１１に記載の装置。
【請求項１３】
少なくとも１のクライアントに対してネットワーク接続ストレージ（「ＮＡＳ」）デバイスとしての前記第１のストレージ制御部を設定し、かつ前記少なくとも１のクライアントからのファイル要求に応答するＮＡＳモジュールを更に具えることを特徴とする請求項１に記載の装置。
【請求項１４】
ＤＡＳモジュールを更に具え、このＤＡＳモジュールは、前記第１のサーバを介して少なくとも１のクライアントからのストレージ要求に応答するために、前記第１のサーバに接続したダイレクト接続ストレージ（「ＤＡＳ」）デバイスとしての前記第１のストレージ制御部によって制御される少なくとも１のストレージデバイスの少なくとも一部を設定することを特徴とする請求項１に記載の装置。
【請求項１５】
前記第１のストレージ制御部が、ソリッドステートストレージ制御部を具え、前記第１のストレージ制御部によって制御される前記少なくとも１つのストレージデバイスは、ソリッドステートストレージを具えることを特徴とする請求項１に記載の装置。
【請求項１６】
前記ストレージ要求は、オブジェクト要求を具え、前記第１のストレージ制御部は、１又はそれ以上のオブジェクトを管理することを特徴とする請求項１に記載の装置。
【請求項１７】
前記第１のストレージ制御部と前記外部デバイスとの間の通信リンクを構築するリンクセットアップモジュールを更に具え、前記通信リンクによって、前記第１のサーバの制御から独立して通信が可能となり、通信は、前記第１のストレージ制御部と前記外部デバイスとの間でなされ、前記通信リンクは、前記ストレージ要求に応答するのに十分であり、前記外部デバイスは、クライアントの１つおよび第２のストレージ制御部を具えることを特徴とする請求項１に記載の装置。
【請求項１８】
前記リンクセットアップモジュールは、初期化プロセスとして通信リンクを構築し、この通信リンクを介したさらなる通信は、前記リンクセットアップモジュールから独立していることを特徴とする請求項１７に記載の装置。
【請求項１９】
前記第１のサーバを介してストレージ要求に応答する際に使用されるコマンドの少なくとも一部を指令するプロキシモジュールを更に具え、前記コマンドは、前記ストレージ要求の一部を具え、前記ストレージ要求と関連した少なくともデータは、前記第１のサーバから独立して、前記第１のストレージ制御部と前記外部デバイスとの間で通信されることを特徴とする請求項１に記載の装置。
【請求項２０】
前記第１のストレージ制御部は、第２のストレージ制御部を介してクライアントから送られるストレージ要求に応答し、前記第２のストレージ制御部および前記クライアントが前記第１のサーバの外部にあることを特徴とする請求項１に記載の装置。
【請求項２１】
バーチャルバスモジュールを更に具え、このバーチャルバスモジュールによって、前記第１のサーバ内の１又はそれ以上のサーバが、別のバーチャルバスを介して１又はそれ以上のストレージ制御部に独立してアクセス可能であることを特徴とする請求項１に記載の装置。
【請求項２２】
前記バーチャルバスが、周辺コンポーネントインターコネクトエクスプレス入力／出力バーチャリゼーション（「ＰＣＩｅ−ＩＯＶ」）を使用して、作成されることを特徴とすることを特徴とする請求項２１に記載の装置。
【請求項２３】
前記第１のサーバの外部にある１又はそれ以上のサーバが、別のバーチャルバスを介して１又はそれ以上のストレージ制御部に独立してアクセスすることを特徴とする請求項２１に記載の装置。
【請求項２４】
独立ドライブ冗長アレイ（「ＲＡＩＤ」）として２又はそれ以上のストレージ制御部を設定するフロントエンドＲＡＩＤモジュールを更に具え、前記クライアントからの前記ストレージ要求が、データを記憶する要求を具え、前記フロントエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致する前記ＲＡＩＤにデータを書き込むことによって、前記ストレージ要求に応答し、前記２又はそれ以上のストレージ制御部は、少なくとも前記第１のストレージ制御部および第２のストレージ制御部を具え、前記第２のストレージ制御部は、前記第１のサーバ内または前記第１のサーバの外部に配置されることを特徴とする請求項１に記載の装置。
【請求項２５】
ＲＡＩＤとして前記第１のストレージ制御部によって制御される２又はそれ以上のストレージデバイスを設定するバックエンドＲＡＩＤモジュールを更に具え、前記クライアントからの前記ストレージ要求は、データを記憶する要求を具え、前記バックエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致するＲＡＩＤに前記データを書き込むことによって前記ストレージ要求に応答し、ＲＡＩＤとして設定された前記ストレージデバイスは、前記第１のストレージ制御部によって制御される１のストレージデバイスとして前記クライアントによってアクセスされることを特徴とする請求項１に記載の装置。
【請求項２６】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用システムにおいて、
第１のサーバと、
前記第１のサーバ内の第１のストレージ制御部であって、この第１のストレージ制御部は、少なくとも１つのストレージデバイスを制御し、前記第１のサーバは、この第１のサーバと前記ストレージ制御部とによって共有されるネットワークインターフェースを具える、第１のストレージ制御部と、
前記第１のストレージ制御部と、前記第１のサーバの外部にある少なくとも１つのデバイスとの間の通信を促進するストレージ通信モジュールであって、前記通信は、前記第１のサーバから独立して、前記第１のストレージ制御部と、前記外部デバイスとの間でなされる、ストレージ通信モジュールと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用してストレージ要求に応答するインサーバＳＡＮモジュールであって、このインサーバＳＡＮモジュールが、前記第１のサーバから独立して前記ストレージ要求に応答し、前記サービス要求が、クライアントから受信されることを特徴とするシステム。
【請求項２７】
前記クライアントが、前記第１のサーバ内に存在するクライアントを具え、前記少なくとも１のストレージデバイスが、前記第１のサーバ内に少なくとも１のストレージデバイスを具えることを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記第１のサーバは、ブレードサーバを具え、前記第１のサーバと、少なくとも１の第２のストレージ制御部および少なくとも１のストレージデバイスを含む第２のサーバと、を含むコンピュータラックを更に具え、前記少なくとも１の第２のストレージ制御部は、前記少なくとも１のストレージデバイスを制御することを特徴とする請求項２６に記載のシステム。
【請求項２９】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用のオペレーションを行うために実行可能なコンピュータ使用可能プログラムコードを有するコンピュータ読み取り可能メディアを具えたコンピュータプログラム製品において、このコンピュータプログラム製品のオペレーションが、
第１のストレージ制御部と第１のサーバの外部にある少なくとも１のデバイスとの間の通信を促進し、この通信は、前記第１のサーバから独立して前記第１のストレージ制御部と外部デバイスとの間でなされ、第１のストレージ制御部は、前記第１のサーバ内にあり、前記第１のストレージ制御部は、少なくとも１のストレージデバイスを制御し、前記第１のサーバは、前記第１のサーバおよび前記第１のストレージ制御部によって共有されるネットワークインターフェースを具える、ステップと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用して、ストレージ要求に応答し、インサーバＳＡＮモジュールは、前記第１のサーバから独立して前記ストレージ要求に応答し、前記サーバ要求は、クライアントから受信される、ステップと、
を具えることを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願についての相互参照
この出願は、Ｄａｖｉｄ  Ｆｌｙｎｎらによって２００６年１２月６日に出願された米国仮出願番号第６０／８７３，１１１号、発明の名称「エレメンタルブレードシステム」と、Ｄａｖｉｄ  Ｆｌｙｎｎらによって２００７年９月２２日に出願された米国仮出願番号６０／９７４，４７０号、発明の名称「オブジェクト指向型ソリッドステージストレージ用の装置、システムおよび方法」と、の優先権を主張し、上記仮出願は、参照することで本明細書に組み込まれるものとする。
【背景技術】
【０００２】
発明の分野
本発明は、ストレージエリアネットワーク（「ＳＡＮ」）に関し、より具体的には、インサーバ（ｉｎ−ｓｅｒｖｅｒ）ＳＡＮオペレーションに関する。
【０００３】
関連技術の説明
典型的なストレージエリアネットワークは、ストレージデバイス群を管理するストレージ制御部を具える。通常、このストレージ制御部は、サーバまたは別のコンピュータ内にあるか、または、独立型デバイスでもよい。一般的に、ストレージデバイスは、ストレージ制御部を含むサーバまたはコンピュータの外部にある。一般的に、ストレージデバイスは、ケーブル、スイッチ、ルータなどを使用してストレージ制御部に接続されている。一般的に、ストレージエリアネットワークは、ファイバーチャネル（Ｆｉｂｅｒ  Ｃｈａｎｎｅｌ）、インターネットスモールコンピュータシステムインターフェース（Ｉｎｔｅｒｎｅｔ  ｓｍａｌｌ  ｃｏｍｐｕｔｅｒ  ｓｙｓｔｅｍ）（「ｉＳＣＳＩ」）など、ネットワークプロトコルに制限される。ストレージ制御部を有するサーバまたはコンピュータと、ストレージデバイスとの距離は、通常、いくつかの種類の信号緩衝を提供し、ストレージ制御部とストレージデバイスとの間の通信の信号強度を保証する。ＳＡＮを構築するのに必要なケーブル、ルータ、スイッチなどは、ＳＡＮの価格を上昇させてしまう。
【０００４】
大容量記憶装置に関する別の解決法は、サーバ内に１又はそれ以上のストレージデバイスを配置することである。通常、ストレージデバイスはシステムバスを用いて接続される。しかしながら、許容されるストレージデバイスの数は、一般的に、限界があり、ストレージデバイスは、サーバを介した通信に限定され、１つのＳＡＮを構成するように、他のサーバのストレージデバイスと組み合わせることができない。
【発明の概要】
【０００５】
上述の説明から、インサーバ（ｉｎ−ｓｅｒｖｅｒ）ストレージエリアネットワーク（「ＳＡＮ」）を構築する装置、システムおよび方法の必要性があることは明らかである。有利なことに、このような装置、システムおよび方法は、サーバから独立して外部のデバイスにアクセス可能なサーバ内のストレージデバイスを用いることで、従来のストレージエリアネットワークの費用および複雑性を低減することができる。
【０００６】
本発明は、当分野の現状、特に、現状で入手可能なＳＡＮによって完全に解決されない当分野の問題や必要性に応じて、開発された。従って、本発明は、当分野における上述した欠点の多くまたは全てを克服するインサーバＳＡＮ用の装置、システムおよび方法を提供すべく開発された。
【０００７】
インサーバＳＡＮ用の装置は、第１のサーバ内に第1のストレージ制御部を具える。第1のストレージ制御部は、少なくとも１つのストレージデバイスを制御する。第１のサーバは、第１のサーバおよび第１のストレージ制御部とともに配置されるネットワークインターフェースを具える。この装置は、第１のストレージ制御部と第１のサーバの外部にある少なくとも１つのデバイスとの間の通信を促進するストレージ通信モジュールを具える。第１のストレージ制御部と外部デバイスとの間の通信は、第１のサーバから独立している。この装置は、少なくともネットワークプロトコルまたはバスプロトコルを用いたストレージ要求に応答するインサーバＳＡＮモジュールを具える。このインサーバＳＡＮモジュールは、第１のサーバから独立してストレージ要求に応答する。サービス要求は、クライアントから受信される。一実施例においては、この装置は、ネットワークインターフェース、第１のストレージ制御部および第１のサーバを構成する共通インターフェースモジュールを具え、第１のサーバおよび第１のストレージ制御部が、共有したネットワークアドレスを用いてアクセス可能となる。
【０００８】
一実施例においては、第１のサーバの外部にあるデバイスは、第２のストレージ制御部を具え、第２のストレージ制御部は、少なくとも１つのストレージデバイスを制御し、インサーバＳＡＮモジュールは、第１のサーバから独立して、第１のストレージ制御部と第２のストレージ制御物との間のネットワークインタフェースを介した通信を使用してストレージ要求に応答する。関連した実施例においては、第２のストレージ制御部は第２のサーバ内にある。他の関連した実施例においては、第２のストレージ制御部は、第２のサーバ以外のデバイスに配置される。別の関連する実施例においては、この装置は、第１のサーバを超えて拡張可能なプロトコルを用いたシステムバスを具え、ネットワークインターフェースはシステムバスの一部であり、第１のストレージ制御部は、システムバスを介して、第２のストレージ制御部と通信する。さらに別の関連する実施例においては、第１のストレージ制御部および第２のストレージ制御部は、コンピュータネットワークを介して通信する。
【０００９】
一実施例においては、第１のサーバの外部にあるデバイスは、クライアントであり、ストレージ要求は、外部のクライアントからくる。一実施例においては、第１の制御部は、ＳＡＮの少なくとも一部として構成され、インサーバＳＡＮモジュールは、第１のサーバから独立したネットワークインターフェースを介したストレージ要求に応答する。一実施例においては、インサーバＳＡＮモジュールは、第１のサーバが利用不可能なとき、外部のクライアントからのストレージ要求に応答する。別の実施例においては、第１のストレージ制御部は、コンピュータネットワークを介して第１のサーバの外部にあるクライアントと通信する。
【００１０】
一実施例においては、ネットワークインターフェースは、第１のストレージ制御部および第１のサーバによって共有される。他の実施例においては、ネットワークインターフェースは、第１のネットワークインターフェースであり、この装置は、第１のサーバが、第２のネットワークインターフェースを介してコンピュータネットワークと通信するように、サーバと共に配置された第２のネットワークインターフェースを具える。別の実施例においては、第１のストレージ制御部は、システムバスを介してクライアントと通信する。更なる実施例においては、クライアントは、第１のサーバの外部にあり、システムバスは、第１のサーバを超えて拡張可能なプロトコルを使用し、ネットワークインターフェースはシステムバスの一部である。
【００１１】
一実施例においては、この装置は、少なくとも１のクライアント用のネットワーク接続ストレージ（「ＮＡＳ」）デバイスとして第１のストレージ制御部を構成し、少なくとも１のクライアントからのファイル要求に応答するＮＡＳモジュールを具える。別の実施例においては、この装置は、少なくとも１のストレージデバイスの少なくとも一部を構成するＤＡＳモジュールを具え、このストレージデバイスは、少なくとも１のクライアントから第１のサーバへのストレージ要求に応答すべく、第１のサーバに接続したダイレクト接続ストレージ（「ＤＡＳ」）デバイスとして第１のストレージ制御部によって制御される。別の実施例においては、第１のストレージ制御部は、ソリッドステートストレージ制御部であり、第１のストレージ制御部によって制御される少なくとも１のストレージデバイスは、ソリッドステートストレージを具える。一実施例においては、ストレージ要求は、オブジェクト要求を具え、第１のストレージ制御部は、１又はそれ以上のオブジェクトを管理する。別の実施例においては、第１のサーバから独立してストレージ要求に応答することは、第１のサーバ内で動作するクライアントと独立してストレージ要求に関連したデータを通信することを具える。
【００１２】
一実施例においては、装置は、第１のストレージ制御部と外部デバイスとの間の通信リンクを構築するリンクセットアップモジュールを具える。この通信リンクによって、第１のストレージ制御部と外部デバイスとの間の通信は第１のサーバの制御から独立することができる。通信リンクは、ストレージ要求に応答するのに十分であり、外部にあるデバイスは、クライアントおよび／または第２のストレージ制御部を具える。さらなる実施例においては、リンクセットアップモジュールは、初期化プロセスとして通信リンクを構築し、通信リンクを介したさらなる通信は、リンクセットアップモジュールから独立している。
【００１３】
一実施例においては、この装置は、第１のサーバを介してストレージ要求に応答するのに使用されるコマンドの少なくとも一部を送るプロキシモジュールを具える。これらのコマンドは、ストレージ要求の一部を具え、少なくともストレージ要求関連のデータは、第１のサーバから独立して、第１のストレージ制御部と外部デバイスとの間を通信する別の実施例においては、第１のストレージ制御部は、第２のストレージ制御部を介してクライアントから送られたストレージ要求に応答し、第２のストレージ制御部およびクライアントは、第１のサーバの外部にある。
【００１４】
一実施例においては、この装置は、仮想バスモジュールを具え、この仮想バスモジュールによって、第１のサーバ内の１又はそれ以上のサーバは、別の仮想バスを介して１又はそれ以上のストレージ制御部に独立的にアクセス可能となる。更なる実施例においては、仮想バスは、周辺コンポーネントのインターコネクトエクスプレス入力／出力ビジュアリゼーション（「ＰＣＩｅ−ＩＯＶ」）を用いて形成される。別の実施例においては、第１のサーバの外部にある１又はそれ以上のサーバは、別の仮想バスを介して、１又はそれ以上のストレージ制御部に独立してアクセスする。
【００１５】
一実施例においては、この装置は、独立ドライブ冗長アレイ（「ＲＡＩＤ」）として２又はそれ以上のストレージ制御部を構成するフロントエンドＲＡＩＤモジュールを具え、クライアントからのストレージ要求は、データを記憶する要求を具え、フロントエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致するＲＡＩＤにデータを書き込むことによってストレージ要求に応答する。実施例においては、２又はそれ以上のストレージ制御部は、少なくとも第１のストレージ制御部および第２のストレージ制御部を具え、第２のストレージ制御部は、第１のサーバ内、または、第１のサーバの外部に配置される。
【００１６】
別の実施例においては、装置は、ＲＡＩＤとしての第１のストレージ制御部によって制御された２又はそれ以上のデバイスを構成するバックエンドＲＡＩＤモジュールを具える。実施例においては、クライアントからのストレージ要求は、データを記憶する要求を具え、バックエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致するＲＡＩＤにデータを書き込むことによってストレージ要求に応答する。さらに、実施例において、ＲＡＩＤとして構成されたストレージデバイスは、第１のストレージ制御部によって制御される１のストレージデバイスとしてクライアントによってアクセスされる。
【００１７】
本発明のシステムは、インサーバＳＡＮ用にも示される。このシステムは、第１のサーバと、この第１のサーバ内の第１のストレージ制御部とによって実現され得る。第１のストレージ制御部は、少なくとも１のストレージデバイスを制御する。このシステムは、第１のサーバと第１のストレージ制御部とともに配置されるネットワークインターフェースを具える。このシステムは、第１のストレージ制御部と、第１のサーバの外部にある少なくとも１つのデバイスとの間の通信を促進するストレージ通信モジュールを具え、第１のストレージ制御部と外側デバイスとの間の通信は、第１のサーバから独立している。サーバは、少なくともネットワークプロトコルおよび／またはバスプロトコルを用いてストレージ要求に応答してインサーバＳＡＮモジュールを具える。インサーバＳＡＮモジュールは、第１のサーバから独立してストレージ要求に応答する。このサービス要求はクライアントから受信される。
【００１８】
一実施例においては、クライアントは、第１のサーバにあるクライアントを具え、少なくとも１つのストレージデバイスは、第１のサーバ内の少なくとも１つのストレージデバイスを具える。別の実施例においては、第１のサーバは、ブレードサーバを具え、このシステムは、第１のサーバと、少なくとも１つの第２のストレージ制御部および少なくとも１つのストレージデバイスを含む第２のサーバと、を有するコンピュータラックを具える。
【００１９】
さらに、本発明の方法は、インサーバＳＡＮに関して説明される。開示された実施例の方法は、記載した装置及びシステムの運転に関して上述した機能を実行するのに必要なステップを実質的に具える。一実施例においては、この方法は、第１のストレージ制御部と、第１のサーバの外部にある少なくとも１のデバイスとの間の通信を促進するステップを具える。第１のストレージ制御部と外部デバイスとの間の通信は、第１のサーバから独立している。第１のストレージ制御部は、第１のサーバ内にある。第１のストレージ制御部は、少なくとも１つのストレージデバイスを制御する。第１のサーバは、第１のサーバおよび第１のストレージ制御部とともに配置されるネットワークインターフェースを具える。この方法は、少なくともネットワークプロトコルおよび／またはバスプロトコルを用いてストレージ要求に応答する。インサーバＳＡＮモジュールは、第１のサーバから独立してストレージ要求に応答し、サービス要求はクライアントから受信される。
【００２０】
明細書全体における特徴部、利点または同様の用語については、本発明によって実現される特徴および利点の全てが、本発明の１の実施例において得られるべき、または、得られることを意味しない。むしろ、特徴部および利点に関する用語については、実施例に関連して記載された特定の特徴部、利点または特性が、本発明の少なくとも１つの実施例に含まれることを意味すると理解されたい。従って、本明細書全体における特徴部および利点および同様の用語の説明は、必須ではないが、同一の実施例を意味する。
【００２１】
さらに、本発明の記載された特徴部、利点および特性は、１又はそれ以上の実施例において適宜な方法で組み合わせることができる。当分野の当業者であれば、特定の実施例の１又はそれ以上の特定の特徴または利点なしで、実施され得ることを理解されたい。他の例としては、付加的な特徴部及び利点は、本発明の実施例で示されていない所定の実施例において実現されるであろう。
【００２２】
本発明のこれらの特徴部および利点は、以下の説明及び添付の特許請求の範囲からより完全に明らかになり、または、以下に記載される本発明の実施によって理解されるであろう。
【図面の簡単な説明】
【００２３】
本発明の特徴部を容易に理解するために、簡単に上述した発明のより具体的な説明を添付の図面に例示した特定の実施例を参照することで行う。これらの図面は、本発明の典型的な実施例のみを記載しており、従って、本発明の範囲が限定されることはなく、本発明は、添付の図面を利用してさらに具体的かつ詳細に記載および説明されると理解されたい。
【図１Ａ】図１Ａは、本発明によるソリッドステートストレージデバイスのデータ管理用システムの一実施例を示した概略ブロック図である。
【図１Ｂ】図１Ｂは、本発明によるストレージデバイスのオブジェクト管理用システムの一実施例を示した概略ブロック図である。
【図１Ｃ】図１Ｃは、本発明によるインサーバストレージエリアネットワーク用システムの一実施例を示した概略ブロック図である。
【図２Ａ】図２Ａは、本発明によるストレージデバイスのオブジェクト管理用装置の一実施例を示した概略ブロック図である。
【図２Ｂ】図２Ｂは、本発明によるソリッドステートストレージのソリッドステートストレージデバイス制御部の一実施例を示した概略ブロック図である。
【図３】図３は、本発明によるソリッドステートストレージデバイスのライトデータパイプラインおよびリードデータパイプラインを有するソリッドステートストレージ制御部を示す概略ブロック図である。
【図４Ａ】図４Ａは、本発明によるソリッドステートストレージ制御部のバンクインターリーブ制御部の一実施例を示した概略ブロック図である。
【図４Ｂ】図４Ｂは、本発明によるソリッドステートストレージ制御部のバンクインターリーブ制御部の代替実施例を示した概略ブロック図である。
【図５】図５は、本発明によるインサーバＳＡＮのための方法の一実施例を例示した概略フローチャートである。
【発明を実施するための形態】
【００２４】
本明細書に記載された多数の機能ユニットは、そのインプリメンテーション独立性をより具体的に強調するために、モジュールとしてラベルした。例えば、モジュールは、カスタムＶＬＳＩ回路またはゲートアレイ、論理チップなど標準規格の半導体、トランジスタまたは他のディスクリートコンポーネントを具えるハードウェア回路として実装可能である。さらに、モジュールは、フィールドプログラム可能ゲートアレイ、プログラム可能アレイロジック、プログラム可能ロジックデバイスなどプログラム可能ハードウェアデバイスに実装可能である。
【００２５】
さらに、モジュールは、各種プロセッサによって実行されるソフトウェアに実装可能である。例えば、実行可能コードからなる特定モジュールは、オブジェクト、プロシージャまたはファンクションとして組織される物理的又は論理的ブロックの１又はそれ以上のコンピュータ指令を具える。にもかかわらず、特定モジュールの実行ファイルは、物理的に一カ所に配置される必要はないが、異なるロケーションに記憶される異なる指令を具え、論理的に同時に接続されるときにモジュールを具え、モジュール用の宣言された目的を達成する。
【００２６】
実際に、実行可能コードからなるモジュールは、１つの指令または多数の指令であり、複数の異なるコードセグメントに亘って異なるプログラム中で、また、複数のメモリデバイスに亘って、分配され得る。同様に、オペレーションデータは、モジュール内で特定され、例示されており、適宜な形態で組み込まれ、あらゆる適宜な種類のデータ構造内で組織される。オペレーションデータは、１つのデータセットとして集められ、異なるストレージデバイスを含む異なるロケーションに亘って配置され、少なくとも部分的に、システムまたはネットワックの単なる電気信号として存在し得る。モジュールまたはモジュールの一部がソフトウェアに実装される場合、ソフトウェア部は、１又はそれ以上のコンピュータ可読メディアに記憶される。
【００２７】
実施例に関連して記載される特定の特徴部、構造または特性を意味する、本明細書全体における「一実施例」、「実施例」または同様の用語については、本発明の少なくとも１つの実施例を含む。従って、本明細書全体における「一実施例においては」、「実施例においては」および同様の用語のフレーズの様相は、必須ではないが、同一実施例を意味する。
【００２８】
信号担持媒体（ｓｉｇｎａｌ  ｂｅａｒｉｎｇ  ｍｅｄｉｕｍ）については、信号を生成可能なあらゆる形態、信号が生成可能なあらゆる形態、または、デジタル処理装置の機械可読指令からなるプログラムを実行可能なあらゆる形態をとることができる。信号担持媒体は、伝送線路、コンパクトディスク、デジタルビデオディスク、磁気テープ、ベルヌーイドライブ、磁気ディスク、パンチカード、フラッシュメモリ、集積回路または他のデジタル処理装置のメモリデバイスに組み込まれてもよい。
【００２９】
さらに、本発明の記載された特徴部、構造または特性は、１又はそれ以上の実施例の適宜な方法で組み合わせることができる。以下の説明において、多数の具体的詳細事項は、例えば、プログラミング、ソフトウェアモジュール、ユーザセレクション、ネットワーク処理、データベースクエリ、データベース構造、ハードウェアモジュール、ハードウェア回路、ハードウェアチップなどに設けられることで、本発明の実施例を完全に理解されたい。しかしながら、当分野の当業者であれば、本発明が１又はそれ以上の具体的詳細事項なしで実施でき、あるいは、他の方法、コンポーネント、材料などを用いて実施できることを理解されたい。別の例においては、本発明の側面をあいまいになるのを避けるために、周知な構造、材料またはオペレーションを示していないか、または、詳細に記載していない。
【００３０】
本明細書に含まれる概略的フローチャートは、論理フローチャート図として一般的に記載されている。このように、記載された順番およびラベルされたステップは、示される方法の一実施例を示す。他のステップ及び方法は、例示された方法の関数、論理または１又はそれ以上のステップに対する効果、またはその部分において同等であると考えられる。さらに、使用したフォーマットおよび記号は、方法の論理ステップを説明するために設けたものであり、この方法の範囲を限定するものではないと理解されたい。各種矢印および線がフローチャート図で使用されているが、対応する方法の範囲を限定するものではないことを理解されたい。実際に、いくつかの矢印または他のコネクタは、この方法の論理フローのみを示すために使用されている。例えば、矢印は、記載された方法の列挙されたステップ間における待機または不特定時間のモニタを示す。さらに、特定の方法が生じる順番は、示された対応するステップの順番に厳密に固執してもしなくてもよい。
【００３１】
ソリッドステートストレージシステム
図１Ａは、本発明によるソリッドステートストレージデバイスのデータ管理用のシステム１００の一実施例を示した概略ブロック図である。システム１００は、以下に示すように、ソリッドステートストレージデバイス１０２、ソリッドステートストレージ制御部１０４、ライトデータパイプライン１０６、リードデータパイプライン１０８、ソリッドステートストレージ１１０、コンピュータ１１２、クライアント１１４およびコンピュータネットワーク１１６を具える。
【００３２】
システム１００は、少なくとも１のソリッドステートストレージデバイス１０２を具える。別の実施例においては、システム１００は、２又はそれ以上のソリッドステートストレージ１０２を具える。各ソリッドステートストレージデバイス１０２は、フラッシュメモリ、ナノランダムアクセスメモリ（「ナノＲＡＭまたはＮＲＡＭ」）、磁気抵抗ＲＡＭ（「ＭＲＡＭ」）、ダイナミックＲＡＭ（「ＤＲＡＭ」）、フェーズチェンジＲＡＭ（「ＰＲＡＭ」）など、不揮発性ソリッドステートストレージ１１０を具える。このソリッドステートストレージデバイス１０２は、図２および図３で更に詳細に示す。ソリッドステートストレージデバイス１０２は、コンピュータネットワーク１１６を介して、クライアント１１４に接続したコンピュータ１１２内に示されている。一実施例においては、ソリッドステートストレージデバイス１０２は、コンピュータ１１２の内部にあり、周辺コンポーネントインターコネクトエクスプレス（「ＰＣＩ−ｅ」）バス、シリアルアドバンステクノロージアタッチメント（「シリアルＡＴＡ」）バスなど、システムバスを用いて接続されている。別の実施例においては、ソリッドステートストレージデバイス１０２は、コンピュータ１１２の外部にあり、ユニバーサルシリアルバス（「ＵＳＢ」）コネクション、米国電気電子技術者協会（「ＩＥＥＥ」）１３９４バス（「ＦｉｒｅＷｉｒｅ」）などを用いて接続される。その他の実施例においては、ソリッドステートストレージデバイス１０２は、ＩｎｆｉｎｉｂａｎｄまたはＰＣＩエクスプレスアドバンススイッチング（「ＰＣＩｅ−ＡＳ」）など、外部の電気または光学バスエクステンション、または、バスネットワーキングソリューション、を使用し、周辺コンポーネントインターコネクタ（「ＰＣＩ」）エクスプレスバスを用いたコンピュータ１１２に接続される。
【００３３】
各種実施例において、ソリッドステートストレージ１０２は、デュアルインラインメモリモジュール（「ＤＩＭＭ」）、ドーターカードまたはマイクロモジュールの形態でもよい。別の実施例においては、ソリッドステートストレージデバイス１０２は、ラック取付ブレード内のエレメントである。別の実施例においては、ソリッドステートストレージデバイス１０２は、より高いレベルのアッセンブリ（例えば、マザーボード、ラップトップ、画像処理装置）に直接統合したパッケージ内に含まれる。別の実施例においては、ソリッドステートストレージデバイス１０２を具える個々のコンポーネントは、中間パッケージングなしで、より高いレベルのアッセンブリに直接統合される。
【００３４】
ソリッドステートストレージデバイス１０２は、１又はそれ以上のソリッドステートストレージ制御部１０４を具え、各々は、ライトデータパイプライン１０６およびリードデータパイプラインを具え、各々は、ソリッドステートストレージ１１０を具え、これらは、図２および図３で以下に詳細に示す。
【００３５】
システム１００は、ソリッドステートストレージデバイス１０２に接続した１又はそれ以上のコンピュータ１１２を具える。コンピュータ１１２は、ホスト、サーバ、ストレージエリアネットワーク（「ＳＡＮ」）のストレージ制御部、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、手持ち型コンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータまたはアプライアンス、データベースまたはストレージアプライアンス、データ取得システムまたはデータ獲得システム、診断システム、試験システム、ロボット、携帯型電子機器、ワイヤレスデバイスなどでもよい。別の実施例においては、コンピュータ１１２は、クライアントでもよく、ソリッドステートストレージデバイス１０２は、コンピュータ１１２から送られるデータ要求に自動で応答するように機能する。この実施例においては、コンピュータ１１２およびソリッドステートストレージデバイス１０２は、コンピュータネットワーク、システムバス、または、コンピュータ１１２と自立性ソリッドステートストレージデバイス１０２との間の接続に適切なその他の通信手段を用いて、接続可能である。
【００３６】
一実施例においては、システム１００は、１又はそれ以上のコンピュータネットワーク１１６を介して、１又はそれ以上のコンピュータ１１２に接続された１又はそれ以上のクライアント１１４を具える。クライアント１１４は、ホスト、サーバ、ＳＡＮのストレージ制御部、ワークステーション、パーソナルコンピュータ、ラップトップコンピュータ、手持ち型コンピュータ、スーパーコンピュータ、コンピュータクラスタ、ネットワークスイッチ、ルータまたはアプライアンス、データベースまたはストレージアプライアンス、データ取得システムまたはデータ獲得システム、診断システム、試験システム、ロボット、携帯電子機器、ワイヤレスデバイスなどでもよい。コンピュータネットワーク１１６は、インターネット、ワイドエリアネットワーク（「ＷＡＮ」）、メトロポリタンエリアネットワーク（「ＭＡＮ」）、ローカルエリアネットワーク（「ＬＡＮ」）、トークンリング、ワイヤレスネットワーク、ファイバチャネルネットワーク、ＳＡＮ、ネットワーク接続ストレージ（「ＮＡＳ」）、ＥＳＣＯＮ、または、ネットワークの組み合わせを具える。さらに、コンピュータネットワーク１１６は、Ｅｔｈｅｒｎｅｔ（登録商標）、トークンリング、ＷｉＦｉ、ＷｉＭａｘなど、ネットワーク技術のＩＥＥＥ８０２ファミリのネットワークを含む。
【００３７】
コンピュータネットワーク１１６は、サーバ、スイッチ、ルータ、ケーブル、ラジオ、および、コンピュータ１１２とクライアント１１４とのネットワーク構築を容易にするのに使用するその他の設備を具える。一実施例においては、システム１００は、コンピュータネットワーク１１６を介して、同等に（ａｓ  ｐｅｅｒｓ）通信する複数のコンピュータ１１２を具える。別の実施例においては、システム１００は、コンピュータ１１６を介して同等に通信する複数のソリッドステートストレージデバイス１０２を具える。当分野の当業者であれば、１又はそれ以上のコンピュータネットワーク１１６を具える他のコンピュータネットワーク１１６と、１またはそれ以上のクライアント１１４間の単一または冗長接続を有する関連設備、または、１又はそれ以上のソリッドステートストレージデバイス１０２を有する他のコンピュータ、または、１又はそれ以上のコンピュータ１１２に接続された１又はそれ以上のソリッドステートストレージデバイス１０２と、を理解されたい。一実施例においては、システム１００は、コンピュータ１１２なしで、コンピュータネットワーク１１８を介して、クライアント１１６に接続した２又はそれ以上のソリッドステートストレージデバイス１０２を具える。
【００３８】
ストレージ制御部管理オブジェクト
図１Ｂは、本発明によるストレージデバイスのオブジェクト管理用システム１０１の一実施例を示す概略ブロック図である。このシステム１０１は、ストレージ制御部１５２および１又はそれ以上のデータストレージデバイス１５４を含む１又はそれ以上のストレージデバイス１５０と、１又はそれ以上の要求（ｒｅｑｕｅｓｔｉｎｇ）デバイス１５５と、を有する。これらのストレージデバイス１５２は、互いにネットワークで接続され、１又はそれ以上の要求デバイス１５５に結合される。要求デバイス１５５は、ストレージデバイス１５０ａにオブジェクト要求を送る。オブジェクト要求は、オブジェクトを構築する要求、オブジェクトにデータを書き込む要求、オブジェクトからデータを読み取る要求、オブジェクトを削除する要求、オブジェクトをチェック（ｃｈｅｃｋｐｏｉｎｔ）する要求、オブジェクトをコピーする要求などである。当分野の当業者であれば、その他のオブジェクト要求も理解されたい。
【００３９】
一実施例においては、ストレージ制御部１５２およびデータストレージデバイス１５４は別のデバイスである。別の実施例においては、ストレージ制御部１５２およびデータストレージデバイス１５４は、１つのストレージデバイス１５０に統合される。別の実施例においては、データストレージデバイス１５４は、ソリッドステートストレージ１１０であり、ストレージ制御部は、ソリッドステートストレージデバイス制御部２０２である。他の実施例においては、データストレージデバイス１５４は、ハードディスクドライブ、光学ドライブ、テープストレージなどでもよい。別の実施例においては、ストレージデバイス１５０は、異なる種類の２又はそれ以上のデータストレージデバイス１５４を具える。
【００４０】
一実施例においては、データストレージデバイス１５４は、ソリッドステートストレージ１１０であり、ソリッドステートストレージエレメント２１６、２１８、２２０のアレイとして構成させる。別の実施例においては、ソリッドステートストレージ１１０は２又はそれ以上のバンク２１４ａ−ｎにおいて構成される。ソリッドステートストレージ１１０は、以下の図２Ｂでより詳細に示す。
【００４１】
これらのストレージデバイス１５０ａ−ｎは、互いにネットワークで接続され、分散したストレージデバイスとして機能する。要求デバイス１５５に接続されたストレージデバイス１５０ａは、分散したストレージデバイスへのオブジェクト要求を制御する。一実施例においては、ストレージデバイス１５０および関連したストレージ制御部１５２は、オブジェクトを管理し、分散したオブジェクトファイルシステムとして要求デバイス１５５に対して存在する。この文脈において、並行オブジェクトファイルシステムは、分散したオブジェクトファイルシステム型の例である。別の実施例においては、ストレージデバイス１５０および関連するストレージ制御部１５２は、オブジェクトを管理し、分散したオブジェクトファイルサーバとして要求デバイス１５５に対して存在する。この文脈において、並行オブジェクトファイルサーバは、分散したオブジェクトファイルサーバ型の例である。これらの実施例およびその他の実施例において、要求デバイス１５５は、オブジェクトを排他的に管理するか、または、ストレージデバイス１５０と組み合わせたオブジェクトの管理に加わる；これは、通常、ストレージデバイス１５０の能力を制限せず、他のクライアント１１４のためのオブジェクトを完全に管理する。場合によっては、分散したストレージデバイスの各々、分散したオブジェクトファイルシステムおよび分散したオブジェクトファイルサーバは、１つのデバイスとして独立して機能することができる。ネットワーク接続されたストレージデバイス１５０ａ−ｎは、分散したストレージデバイス、分散したオブジェクトファイルシステム、分散したオブジェクトファイルサーバとして機能でき、また、これらの組み合わせであって、１又はそれ以上の要求デバイス１５５に対して設定された１又はそれ以上の上記性能のイメージを有する組み合わせとしても機能できる。例えば、ストレージデバイス１５０は、第１の要求デバイス１５５ａに対して分散したストレージデバイスとして機能するように設定でき、一方、要求デバイス１５５ｂに対して分散したストレージデバイスおよび分散したオブジェクトファイルシステムとして機能する。システム１０１が、１つのストレージデバイス１５０ａを具える場合、ストレージデバイス１５０ａのストレージ制御部１５２ａは、オブジェクトを管理し、オブジェクトファイルシステムまたはオブジェクトファイルサーバとして要求だバイス１５５に存在してもよい。
【００４２】
ストレージデバイス１５０が、分散したストレージデバイスとして互いにネットワークで接続される一実施例において、ストレージデバイス１５０は、１又はそれ以上の分散したストレージ制御部１５２によって管理された独立ドライブ冗長アレイ（「ＲＡＩＤ」）として機能する。例えば、オブジェクトのデータセグメントを書き込む要求は、ＲＡＩＤレベルに応じて、パリティストライプを用いてデータストレージデバイス１５４ａ−ｎに亘ってストライプ化されたデータセグメントとなる。このような構成の利点の１つは、オブジェクト管理システムが、ストレージ制御部１５２、データストレージデバイスまたはストレージデバイス１５０のその他のコンポーネントのいずれかのうち、１つのストレージデバイス１５０にエラーが生じたときに、利用可能なように継続できることである。
【００４３】
冗長ネットワークを使用してストレージデバイス１５０と要求デバイス１５５を相互接続するとき、オブジェクト管理システムは、ネットワークの１つが機能している限り、ネットワークエラーの存在下で利用可能となるように続けることができる。１つのストレージデバイス１５０ａを有するシステム１０１は、さらに、複数のデータストレージデバイス１５４ａを具えることができ、ストレージデバイス１５０ａのストレージ制御部１５２ａは、ＲＡＩＤ制御部として機能し、ストレージデバイス１５０ａのデータストレージデバイス１５４ａに亘ってデータセグメントをストライプ化し、ＲＡＩＤレベルに応じて、パリティストライプを具えることができる。
【００４４】
一実施例においては、１又はそれ以上のストレージデバイス１５０ａ−ｎは、ソリッドステートストレージデバイス制御部２０２およびソリッドステートストレージ１１０を有するソリッドステートストレージデバイス１０２であり、ソリッドステートストレージデバイス１０２は、ＤＩＭＭ設定、ドーターカード、マイクロモジュールなどで構成され、コンピュータ１１２内にあってもよい。コンピュータ１１２は、サーバでもよく、または、互いにネットワーク接続されたソリッドステートストレージデバイス１０２を有し、分散したＲＡＩＤ制御部として機能する同様のデバイスでもよい。有利には、ストレージデバイス１０２は、ＰＣＩ−ｅ、ＰＣＩｅ−ＡＳ、Ｉｎｆｉｎｉｂａｎｄまたはその他の高性能バス、スイッチ付きバス、ネットワーク接続バスまたはネットワークを用いて接続されてもよく、ソリッドステートストレージ１１０ａ−ｎに亘ってデータセグメントを自律的にストライプ化する１つ又は分散したソリッドステートストレージ制御部２０２を有する極めて小型で、高性能ＲＡＩＤストレージシステムを提供することができる。
【００４５】
一実施例においては、ストレージデバイス１５０と通信するために要求デバイス１５５によって使用される同一ネットワークは、同等のストレージデバイス１５０ｂ−ｎと通信しＲＡＩＤ機能を得るために、同等のストレージデバイス１５０ａによって使用される。別の実施例においては、別のネットワークは、ＲＡＩＤするために、ストレージデバイス１５０巻で使用される。別の実施例においては、要求デバイス１５５は、ストレージデバイス１５０に冗長要求を送ることによってＲＡＩＤプロセスに加わることができる。例えば、要求デバイス１５５は、第１のオブジェクトライト要求を第１のストレージデバイス１５０ａに送り、同一データを有する第２のオブジェクトライト要求を第２のストレージデバイス１５０ｂに送り、単純なミラーリングを行う。
【００４６】
ストレージデバイス１０２内でオブジェクト処理するための能力に関して、ストレージ制御部１５２は、１つのＲＡＩＤレベルを用いて、１つのデータセグメントまたはオブジェクトを記憶する能力を個別に備え、一方、別のデータセグメントまたはオブジェクトは、異なるＲＡＩＤレベルを用いて、または、ＲＡＩＤストライプ化せずに、記憶される。これらの複数のＲＡＩＤグループ分けは、ストレージデバイス１５０内の複数のパーティションに関連していてもよい。ＲＡＩＤ０、ＲＡＩＤ１、ＲＡＩＤ５、ＲＡＩＤ６およびコンポジットＲＡＩＤタイプ１０、５０、６０は、データストレージデバイス１５４ａ−ｎを具える各種ＲＡＩＤグループに亘って同時にサポート可能である。当分野の当業者であれば、同時にサポート可能なその他のＲＡＩＤタイプおよび設定も理解されたい。
【００４７】
さらに、ストレージ制御部１５２は、ＲＡＩＤ制御部として自律的に機能するので、ＲＡＩＤ制御部は、累進的ＲＡＩＤを行うことができ、要求デバイス１５５に影響を与えず、ＲＡＩＤレベルに変化を加えず、または、検出さえせずに、１つのＲＡＩＤレベルから別のＲＡＩＤレベルへと、データストレージデバイス１５４に亘ってストライプ化したオブジェクトまたはオブジェクトの一部をトランスフォーム可能である。好適な実施例においては、１つのレベルから別のレベルへとＲＡＩＤ設定をプログレス（ｐｒｏｇｒｅｓｓ）させることは、オブジェクトまたはパケットベースでも自律的に行われ、ストレージデバイス１５０の１つまたはストレージ制御部１５２において機能する分散したＲＡＩＤ制御モジュールによって起動される。通常、ＲＡＩＤの前進は、ＲＡＩＤ１などのより高性能でより低効率なストレージ設定から、ＲＡＩＤ５などのより低性能でより高いストレージ効率へのプログレスであり、トランスフォームは、アクセス頻度に基づいて動的に開始される。なお、ＲＡＩＤ５からＲＡＩＤ１へ設定をプログレスさせることも可能であることを理解されたい。ＲＡＩＤ前進を開始するその他のプロセスは、ストレージシステム管理サーバ要求など、クライアントまたは外部エージェントから設定または要求できる。当分野の当業者であれば、自律的にオブジェクトを管理するストレージ制御部１５２を用いたストレージデバイス１０２の特徴および利点を理解されたい。
【００４８】
インサーバＳＡＮを用いたソリッドステートストレージデバイス
図１Ｃは、本発明によるインサーバストレージエリアネットワーク（「ＳＡＮ」）用システム１０３の一実施例を示した概略ブロック図である。システム１０３は、通常、サーバ（「サーバ１１２」）として設定されるコンピュータ１１２を具える。各サーバ１１２は、１又はそれ以上のストレージデバイス１５０を具え、サーバ１１２およびストレージデバイス１５０は、共有されたネットワークインターフェース１５５に接続される。各ストレージデバイス１５０は、ストレージ制御部１５２および関連するデータストレージデバイス１５４を具える。システム１０３は、サーバ１１２の内部または外部にあるクライアント１１４、１１４ａ、１１４ｂを具える。クライアント１１４、１１４ａ、１１４ｂは、上述したものと実質的に同様の、１又はそれ以上のコンピュータネットワーク１１６を介して、各サーバ１１２および各ストレージデバイス１５０と通信することができる。
【００４９】
ストレージデバイス１５０は、ＤＡＳモジュール１５８、ＮＡＳモジュール１６０、ストレージ通信モジュール１６２、インサーバＳＡＮモジュール１６４、共通インターフェースモジュール１６６、プロキシモジュール１７０、仮想バスモジュール１７２、フロントエンドＲＡＩＤモジュール１７４およびバックエンドＲＡＩＤモジュール１７６を具え、これらは以下に示す。モジュール１５８−１７６はストレージデバイス１５０内に示される一方、各モジュール１５８−１７６の全てまたは一部は、ストレージデバイス１５０、サーバ１１２、ストレージ制御部１５２またはその他のロケーションにあってもよい。
【００５０】
インサーバＳＡＮと併せて使用されるサーバ１１２は、サーバとして機能するコンピュータである。このサーバ１１２は、ファイルサーバ機能など、少なくとも１つのサーバ機能を具えるが、その他のサーバ機能も具えてもよい。サーバ１１２は、いくつかのファームの一部であってもよく、他のクライアント１１４に応答する。他の実施例においては、サーバ１１２は、パーソナルコンピュータ、ワークステーションまたはストレージデバイス１５０を収容する他のコンピュータでもよい。サーバ１１２は、ダイレクト接続ストレージ（「ＤＡＳ」）、ＳＡＮ接続ストレージ、または、ネットワーク接続ストレージ（「ＮＡＳ」）としてのサーバ１１２の１又はそれ以上のストレージデバイス１５０にアクセスできる。インサーバＳＡＮまたはＮＡＳに関与するストレージ制御部１５０は、サーバ１１２の内部または外部にあってもよい。
【００５１】
一実施例においては、インサーバＳＡＮ装置は、少なくとも１つのデータストレージデバイス１５４の少なくとも一部を構成するＤＡＳモジュール１５８を具え、この少なくとも１のデータストレージデバイス１５４は、少なくとも１のクライアント１１４からサーバ１１２にストレージ要求を送るように、サーバ１１２に接続したＤＡＳデバイスとしてサーバ１１２のストレージ制御部１５２によって制御される。一実施例においては、第１のデータストレージデバイス１５４ａは、第１のサーバ１１２ａに対するＤＡＳとして設定され、さらに、第１のサーバ１１２ａに対するインサーバＳＡＮストレージデバイスとしても設定される。別の実施例においては、第１のデータストレージデバイス１５４ａは、１つのパーティションは、ＤＡＳであり、他方が、インサーバＳＡＮとなるようにパーティション化される。別の実施例においては、第１のデータストレージデバイス１５４ａ内の少なくともストレージスペースの一部は第１のサーバ１１２ａに対するＤＡＳとして設定され、第１のデータストレージデバイス１５４ａのストレージスペースの同一部分は、第１のサーバ１１２ａに対するインサーバＳＡＮとして設定される。
【００５２】
別の実施例においては、インサーバＳＡＮ装置は、少なくとも１つのクライアント１１４用のＮＡＳデバイスとしてストレージ制御部１５２を構成してクライアント１１４からのファイル要求に応答する、ＮＡＳモジュール１６０を具える。さらに、ストレージ制御部１５２は、第１のサーバ１１２ａ用のインサーバＳＡＮデバイスとして設定可能である。ストレージデバイス１５０は、ストレージデバイス１５０のあるサーバ１１２から独立して、共有されたネットワークインターフェース１５５を介して、コンピュータネットワーク１１６に直接接続できる。
【００５３】
一の構成要素形態において、インサーバＳＡＮ装置は、第１のサーバ１１２ａ内に第１のストレージ制御部１５２ａを具え、第１のストレージ制御部１５２ａが少なくとも１つのストレージデバイス１５４ａを制御する。第１のサーバ１１２ａは、第１のサーバ１１２ａおよび第１のストレージ制御部１５２ａによって共有されるネットワークインターフェース１５６を具える。インサーバＳＡＮ装置は、第１のストレージ制御部１５２ａと第１のサーバ１１２ａの外部にある少なくとも１つのデバイスとの間の通信を促進するストレージ通信モジュール１６２を具え、第１のストレージ制御部１５２ａと前記外部デバイスとの間の通信は、第１のサーバ１１２ａから独立している。ストレージ通信モジュール１６２によって、第１のストレージ制御部１５２ａは、外部通信用ネットワークインターフェース１５６ａに独立してアクセス可能になる。一実施例においては、ストレージ通信モジュール１６２は、ネットワークインターフェース１５６ａのスイッチにアクセスし、第１のストレージ制御部１５２ａと外部デバイスとの間のネットワークトラフィックを管理（ｄｉｒｅｃｔ）する。
【００５４】
さらに、インサーバＳＡＮ装置は、ネットワークプロトコルおよびバスプロトコルの一方又は両方を用いてストレージ要求に応答するインサーバＳＡＮモジュール１６４を具える。インサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａから独立したストレージ要求に応答し、サービス要求は、内部または外部クライアント１１４、１１４ａから受信する。
【００５５】
一実施例においては、第１のサーバ１１２ａの外部にあるデバイスは、第２のストレージ制御部１５２ｂである。第２のストレージ制御部１５２ｂは、少なくとも１のデータストレージデバイス１５４ｂを制御する。インサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａから独立して、第１および第２のストレージ制御部１５２ａ、１５２ｂ間において、ネットワークインターフェース１５６ａを介した通信を使用して、ストレージ要求に応答する。第２のストレージ制御部１５２ｂは、第２のサーバ１１２ｂまたはその他のデバイス内にあってもよい。
【００５６】
別の実施例においては、第１のサーバ１１２ａの外部にあるデバイスは、クライアント１１４であり、ストレージ要求は、外部クライアント１１４からきて、第１のストレージ制御部は、ＳＡＮの少なくとも１部として設定され、インサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａから独立してネットワークインターフェース１５６ａを介してストレージ要求に応答する。外部クライアント１１４は、第２のサーバ１１２ｂ内でもよく、第２サーバ１１２ｂの外部にあってもよい。一実施例においては、インサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａが利用できない場合であっても外部クライアント１１４からストレージ要求に応答することができる。
【００５７】
別の実施例においては、ストレージ要求を発するクライアント１１４ａは、第１のサーバ１１２ａの内部にあり、第１のストレージ制御部１５２ａは、ＳＡＮの少なくとも一部として設定され、インサーバＳＡＮモジュール１６４は、１又はそれ以上のネットワークインターフェース１５６ａおよびシステムバスを介してストレージ要求に応答する。
【００５８】
従来のＳＡＮ設定は、サーバ１１２から遠隔にあるストレージデバイスが、ダイレクト接続ストレージ（「ＤＡＳ」）としてサーバ１１２内にあるようにアクセスでき、ストレージデバイスは、ブロックストレージデバイスとしてみえた。一般的に、ＳＡＮとして接続されたストレージデバイスは、ファイバーチャネル、インターネットスモールコンピュータシステムインターフェース（「ｉＳＣＳＩ」）、ハイパーＳＣＳＩ、ファイバーコネクティビティ（「ＦＩＣＯＮ」）、イーサネット（登録商標）を介したアドバンステクノロージアタッチメント（「ＡＴＡ」）など、ＳＡＮプロトコルを要求する。インサーバＳＡＮは、サーバ１１２内部にストレージ制御部１５２を具え、ネットワークプロトコルおよび／またはバスプロトコルを用いて、ストレージ制御部１５２ａと、リモートストレージ制御部１５２ｂまたは外部クライアント１１４と、の間のネットワーク接続を可能にしている。
【００５９】
一般的に、ＳＡＮプロトコルは、ネットワークプロトコルのフォームであり、より多くのネットワークプロトコルは、ストレージ制御部１５０ａおよび関連するデータストレージデバイス１５４ａが、ＳＡＮとして設定され、外部クライアント１１４または第２のストレージ制御部１５２ｂと通信可能なＩｎｆｉｎｉｂａｎｄなどとして存在する。別の実施例においては、第１のストレージ制御部１５２ａは、イーサネット（登録商標）を使用して、外部クライアント１１４または第２のストレージ制御部１５２ｂと通信可能である。
【００６０】
ストレージ制御部１５２は、内部ストレージ制御部１５２またはクライアント１１４ａとバスを介して通信できる。例えば、ストレージ制御部１５２は、ＰＣＩエクスプレス入力／出力ビジュアリゼーション（「ＰＣＩｅ−ＩＯＶ」）をサポートできるＰＣＩ−ｅを用いてバスを介して通信できる。他の新規（ｅｍｅｒｇｉｎｇ）バスプロトコルによって、システムバスがコンピュータまたはサーバ１１２の外部に拡張可能となり、ストレージ制御部１５２ａをＳＡＮとして設定可能になる。このようなバスプロトコルの１つは、ＰＣＩｅ−ＡＳである。本発明は、単純なＳＡＮプロトコルに限定されないが、ストレージ要求に応答する新規ネットワークおよびバスプロトコルの利点を得ることができる。クライアント１１４または外部ストレージ制御部１５２ｂの形態の外部デバイスは、拡張システムバスまたはコンピュータネットワーク１１６を介して通信できる．本明細書で使用されるように、ストレージ要求は、データ書き込み、データ読み取り、データ消去、データクエリなどの要求を具え、オブジェクトデータ、メタデータおよび管理要求ならびにブロックデータ要求を具えることができる。
【００６１】
従来のサーバ１１２は、通常、サーバ１１２内のデバイスへのアクセスを制御するルートコンプレックスを有する。通常、サーバ１１２のルートコンプレックスは、ネットワークインターフェース１５６を有し、ネットワークインターフェース１５６を介したあらゆる通信は、サーバ１１２によって制御される。しかしながら、インサーバＳＡＮ装置の好適な実施例において、ストレージ制御部１５２は、独立してネットワークインターフェース１５６にアクセス可能であり、クライアント１１４は、ＳＡＮを形成する第１のサーバ１１２ａ内の１又はそれ以上のストレージ制御部１５２ａと直接通信することができるか、または、１又はそれ以上の第１のストレージ制御部１５２ａは、第２のストレージ制御部１５２ｂまたはその他のリモートストレージ制御部１５２と互いにネットワーク接続されＳＡＮを形成する。好適な実施例においては、第１のサーバ１１２ａから遠隔にあるデバイスは、１つの共有されたネットワークアドレスを介して第１のサーバ１１２ａまたは第１のストレージ制御部１５２ａにアクセスできる。一実施例においては、インサーバＳＡＮ装置は、ネットワークインターフェース１５６、ストレージ制御部１５２、およびサーバ１１２を構成する共通インターフェースモジュール１６６を具え、サーバ１１２およびストレージ制御部１５２は、共有されたネットワークアドレスを用いてアクセス可能である。
【００６２】
他の実施例においては、サーバ１１２は、２またはそれ以上のネットワークインターフェース１５６を具える。例えば、サーバ１１２は、１つのネットワークインターフェース１５６を介して通信可能であり、ストレージデバイス１５０は、別のインターフェースを介して通信できる。別の例においては、サーバ１１２は、各々がネット−ワークインターフェースを有する複数のストレージデバイス１５０を具える。当分野の当業者であれば、１又はそれ以上のストレージデバイス１５０および１又はそれ以上のネットワークインターフェース１５６を有するサーバ１１２のその他の設定であって、１又はそれ以上のストレージデバイス１５０がサーバ１１２から独立してネットワークインターフェース１５６にアクセスすることを理解されたい。当分野の当業者であれば、どのように各種設定が、ネットワーク冗長性をサポートし、有用性を改善するために拡張可能であることを理解されたい。
【００６３】
有利なことに、インサーバＳＡＮ装置は、複雑性と、従来のＳＡＮの費用を大幅に省いている。例えば、一般的なＳＡＮは、外部ストレージ制御部１５２および関連したデータストレージデバイス１５４を有するサーバ１１２を必要とする。このことは、ラックの更なる空間を塞ぎ、ケーブルやスイッチなどを要求する。ケーブル、スイッチング、従来のＳＡＮを設定するのに必要なその他のオーバヘッドは、空間を必要とし、帯域幅を低下させ、費用がかかる。インサーバＳＡＮ装置によって、ストレージ制御部１５２および関連ストレージ１５４は、サーバ１１２フォームファクタにおいて適合し、従って、必要な空間を低減し費用を減少させる。さらに、インサーバＳＡＮによって、内部および外部の高速データバスを介して比較的に高速な通信を使用した接続が可能になる。
【００６４】
一実施例においては、ストレージデバイス１５０は、ソリッドステートストレージデバイス１０２であり、ストレージ制御部１５２はソリッドステートストレージ制御部１０４であり、データストレージデバイス１５４はソリッドステートストレージ１１０である。本明細書で記載するようにソリッドステートストレージデバイス１０２のスピードにより、この実施例は有利である。さらに、ソリッドステートストレージデバイス１０２は、サーバ１１２内で適合可能であり必要とする空間の小さいＤＩＭＭ内で設定可能である。
【００６５】
サーバ１１２内の１又はそれ以上の内部クライアント１１４ａは、さらに、サーバのネットインターフェース１５６を介してコンピュータネットワーク１１６に接続可能であり、クライアントの接続は、通常、サーバ１１２によって制御される。これにはいくつかの利点がある。クライアント１１４ａは、直接ストレージデバイス１５０に、ローカルまたはリモートでアクセスでき、メモリクライアント１１４ａとストレージデバイス１５０との間においてローカルまたはリモートダイレクトメモリアクセス（「ＤＭＡ」、「ＲＤＭＡ」）データ移動を開始できる。
【００６６】
別の実施例においては、サーバ１１２の内部または外部にあるクライアント１１４、１１４ａは、１又はそれ以上のネットワーク１１６を介して、クライアント１１４に対するファイルサーバとして機能し、インサーバＳＡＮ、外部ＳＡＮおよびハイブリッドＳＡＮの一部として関与する、ローカルで接続されたソリッドステートストレージデバイス１０２を使用する。ストレージデバイス１５０は、ＤＡＳ、インサーバＳＡＮ、ＳＡＮ、ＮＡＳなど、および、これらの組み合わせに同時に関与することができる。さらに、各ストレージデバイスをパーティション化することで、第１のパーティションが、ＤＡＳとしてストレージデバイス１５０を利用可能にし、第２のパーティションが、インサーバＳＡＮの構成要素としてストレージデバイス１５０を利用可能にし、第３のパーティションがＮＡＳとしてストレージパーティション１５０を利用可能にし、第４のパーティションがＳＡＮなどの構成要素としてストレージデバイス１５０を利用可能にする。同様に、ストレージデバイス１５０は、安全およびアクセス制御要求に矛盾がないようにパーティション化できる。当分野の当業者であれば、ストレージデバイス、バーチャルストレージデバイス、ストレージネットワーク、バーチャルストレージネットワーク、プライベートストレージ、共有されたストレージ、パラレルファイルシステム、パラレルオブジェクトファイルシステム、ブロックストレージデバイス、オブジェクトストレージデバイス、ストレージアプライアンス、ネットワークアプライアンスなどの、多数の組み合わせおよび順列が、構築およびサポートされることを理解されたい。
【００６７】
さらに、コンピュータネットワーク１１６に直接接続されることによって、ストレージデバイス１５０は、互いに通信可能であり、インサーバＳＡＮとして機能することができる。サーバ１１２内のクライアント１１４ａと、コンピュータネットワーク１１６を介して接続されたクライアント１１４は、ＳＡＮとしてのストレージデバイス１５０にアクセスできる。ストレージデバイス１５０をサーバ１１２に移動し、ＳＡＮとしてストレージデバイス１５０を設定する能力を得ることで、サーバ１１２／ストレージデバイス１５０の組み合わせは、専用のストレージ制御部、ファイバチャネルネットワークおよび他の設備のための従来のＳＡＮの必要性を排除する。インサーバＳＡＮシステム１０３は、ストレージデバイス１５０が電力、冷房、管理および物理的空間などの共通リソースをクライアント１１４およびコンピュータ１１２と共有することができる利点を有する。例えば、ストレージデバイス１５０は、サーバ１１２の空スロットを満たし、ＳＡＮまたはＮＡＳの実行能力、信頼性および有用性を全てに付与する。当分野の当業者であれば、インサーバＳＡＮシステム１０３のその他の特徴および利点を理解されたい。
【００６８】
他の設定においては、複数のインサーバＳＡＮストレージデバイス１５０ａを１つのサーバ１１２ａインフラストラクチャ内に配置することができる。一実施例においては、サーバ１１２ａは、外部ネットワークインターフェース１５６、外部クライアント１１４、１１４ｂまたは外部ストレージデバイス１５０ｂなしで、ＰＣＩエクスプレスＩＯＶを用いて連結された１又はそれ以上の内部ブレード化サーバクライアント１１４ａからなる。
【００６９】
さらに、１又はそれ以上のコンピュータネットワーク１１６を介して、インサーバＳＡＮストレージデバイス１５０は、ピア（ｐｅｅｒ）ストレージデバイス１５０と通信可能であり、これらのピアストレージデバイス１５０は、コンピュータ１１２に位置しているか（図１Ａ）、または、ＳＡＮおよびインサーバＳＡＮの両方の全ての能力を有するハイブリッドＳＡＮを形成するコンピュータ１１２なしで、コンピュータネットワーク１１６に直接接続されている。このフレキシビリティは、各種の可能性のあるソリッドステートストレージネットワークインプリメンテーションの間で拡張性および移動を単純化する利点を有する。当分野の当業者であれば、その他の組み合わせ、設定、インプリメンテーション、およびソリッドステート制御部１０４を配置および相互接続する構造を理解されたい。
【００７０】
ネットワークインターフェース１５６ａは、サーバ１１２ａ内で機能する１つのエージェントのみによって制御可能であり、前記エージェント内で機能するリンクセットアップモジュール１６８は、ネットワークインターフェース１５６ａから外部ストレージデバイス１５０ｂおよびクライアント１１４、１１４ｂを介して、内部クライアント１１４ａとストレージデバイス１５０ａ／第１のストレージ制御部１５２ａとの間の通信パスをセットアップ可能である。好適な実施例においては、一旦通信パスが構築されると、個々の内部ストレージデバイス１５０ａおよび内部クライアント１１４ａは、自身のコマンドキューを構築し管理することができ、直接、および、ネットワークインターフェース１５６ａを制御するプロキシまたはエージェントから独立したＲＤＭＡを介して、いずれかの方向で、ネットワークインターフェース１５６ａから外部ストレージデバイス１５０ｂおよびクライアント１１４、１１４ｂを介し、コマンド及びデータの両方を転送することができる。一実施例においては、リンクセットアップモジュール１６８は、ハードウェアのスタートアップまたは初期化など、初期化プロセス中に通信リンクを構築する。
【００７１】
別の実施例においては、プロキシモジュール１７０は、第１のサーバ１１２ａを介してストレージ要求に応答するのに使用されるコマンドの少なくとも１部を指令し、少なくともデータ、および、ストレージ要求と関連したその他の可能性のあるコマンドは、第１のサーバから独立して、第１の制御部と外部ストレージデバイスとの間で通信される。別の実施例においては、ストレージデバイス１５０ａおよびクライアント１１４ａに変わって、プロキシモジュール１７０がコマンド又はデータを送る。
【００７２】
一実施例においては、第１のサーバ１１２ａは、第１のサーバ１１２ａ内の１又はそれ以上のサーバを具え、バーチャルバスモジュール１７２を具え、これによって、第１のサーバ１１２ａ内の１又はそれ以上のサーバが、別のバーチャルバスを介して、１又はそれ以上のストレージ制御部１５２ａに独立してアクセス可能となる。ＩＯＶをサポートするネットワークインターフェース１５６ａによって、１又はそれ以上のサーバおよび１又はそれ以上のストレージ制御部は、１又はそれ以上のネットワークインターフェース１５６ａを独立して制御可能になる。
【００７３】
各種実施例においては、インサーバＳＡＮ装置によって、２又はそれ以上のストレージデバイス１５０は、ＲＡＩＤ内に設定可能である。一実施例においては、インサーバＳＡＮ装置は、ＲＡＩＤとして２又はそれ以上のストレージ制御部１５２を構成するフロントエンドＲＡＩＤモジュール１７４を具える。クライアント１１４、１１４ａからのストレージ要求がデータを記憶する要求を具える場合、フロントエンドＲＡＩＤモジュール１７４は、特定の実装ＲＡＩＤレベルと一致するＲＡＩＤにデータを書き込むことによってストレージ要求に応答する。第２のストレージ制御部１５２は、第１のサーバ１１２ａ内または第１のサーバ１１２ａの外部に配置可能である。フロントエンドＲＡＩＤモジュール１７４によって、ストレージ制御部１５２のＲＡＩＤが許容され、ストレージ制御部１５２は、ストレージ要求を送るクライアント１１４、１１４ａに対してビジブル（ｖｉｓｉｂｌｅ）である。これによって、ストライプおよびパリティ情報は、マスターとして設計されたストレージ制御部１５２またはクライアント１１４、１１４ａによって管理可能となる。
【００７４】
別の実施例においては、インサーバＳＡＮ装置は、バックエンドＲＡＩＤモジュール１７６を具え、このモジュール１７６は、ＲＡＩＤとしてストレージ制御部によって制御される２又はそれ以上のデータストレージデバイス１５４を設定する。クライアントからのストレージ要求が、データを記憶する要求を具えている場合、バックエンドＲＡＩＤモジュール１７６は、実装されたＲＡＩＤレベルと一致するＲＡＩＤにデータを書き込むことによってストレージ要求に応答し、ＲＡＩＤとして設定されたストレージデバイス１５４は、第１のストレージ制御部１５２によって制御される１つのデータストレージデバイス１５４としてクライアント１１４、１１４ａによってアクセスされる。このＲＡＩＤ実装によって、ＲＡＩＤがデータストレージデバイス１５４にアクセスするあらゆるクライアント１１４、１１４ａに透明（ｔｒａｎｓｐａｒｅｎｔ）であるように、ストレージ制御部１５２によって制御されるデータストレージデバイス１５４のＲＡＩＤが可能となる。別の実施例においては、フロントエンドＲＡＩＤとバックエンドＲＡＩＤの両方が実装され、複数レベルのＲＡＩＤを有する。当分野の当業者であれば、本明細書に記載されるように、ソリッドステートストレージ制御部１０４と関連するソリッドステートストレージ１１０と一致するストレージデバイス１５２をＲＡＩＤするその他の方法を理解されたい。
【００７５】
ストレージ制御部管理オブジェクト用装置
図２Ａは、本発明によるストレージデバイス内のオブジェクト管理装置２００の実施例を例示する概略的ブロック図である。この装置２００は、オブジェクト要求レシーバモジュール２６０、パージング（ｐａｒｓｉｎｇ）モジュール２６２、コマンド実行モジュール２６４、オブジェクトインデックスモジュール２６６、オブジェクト要求キューイングモジュール２６８、メッセージモジュール２７０を有するパケッタイザ（ｐａｃｋｅｔｉｚｅｒ）３０２、および、オブジェクトインデックス再構築モジュール２７２を含むストレージ制御部１５２を具え、これらを以下に示す。
【００７６】
ストレージ制御部１５２は、図１Ｂのシステム１０２に関連して記載されたストレージ制御部１５２と実質的に同様で、図２と関連して記載されたソリッドステートストレージデバイス制御部２０２であってもよい。この装置２００は、１又はそれ以上の要求デバイス１５５からオブジェクト要求を受信するオブジェクト要求レシーバモジュール２６０を具える。例えば、記憶オブジェクトデータ要求に関して、ストレージ制御部１５２は、ストレージ制御部１５２に接続したデータストレージデバイス１５４内のデータパケットとしてデータセグメントを記憶する。オブジェクト要求は、一般的に、１又はそれ以上のオブジェクトデータパケットに記憶された、または、記憶されるべきデータセグメントで、ストレージ制御部によって管理されたオブジェクトに指令される。ストレージ制御部１５２が、ローカルまたはリモートダイレクトメモリアクセス（「ＤＭＡ」、「ＲＤＭＡ」）転送を使用できる後期オブジェクト要求を介してデータで後で埋められるように、オブジェクトを形成することを、オブジェクト要求は要求できる。
【００７７】
一実施例においては、オブジェクト要求は、既に形成されたオブジェクトにオブジェクトの全てまたは一部を書き込む、書き込み要求である。一例においては、書き込み要求は、オブジェクトのデータセグメント用である。オブジェクトのその他のデータセグメントは、ストレージデバイス１５０またはその他のストレージデバイス１５２に書き込まれてもよい。別の例においては、書き込み要求は、完全なオブジェクト用である。別の例においては、オブジェクト要求は、ストレージ制御部１５２によって管理されたデータセグメントからのデータを読み取ることである。オブジェクト要求は、データセグメントを削除する削除要求である。
【００７８】
有利には、ストレージ制御部１５２は、新規オブジェクトを書き込むか、または、データを既存のオブジェクトに加える以上の書き込み要求をアクセプト可能である。例えば、オブジェクト要求レシーバモジュール２６０が受信する書き込み要求は、ストレージ制御部１５２によって記録されるデータの先のデータを加える要求、記憶したデータにデータを挿入する要求またはデータのセグメントを置換する要求を具えることができる。ストレージ制御部１５２によって維持されるオブジェクトインデックスは、その他のストレージ制御部で利用可能ではないが、サーバや他のコンピュータのフィルシステムのストレージ制御部の外側でのみ現在利用可能である、上記のような複雑な書き込みオペレーションに必要なフレキシビリティを提供する。
【００７９】
装置２００は、オブジェクト要求を１又はそれ以上のコマンドにパージングするパージングモジュール２６２を具える。一般的に、パージングモジュール２６２は、オブジェクト要求を１又はそれ以上のバッファにパージングする。例えば、オブジェクト要求の１又はそれ以上のコマンドは、コマンドバッファにパージングできる。通常、パージングモジュール２６２は、オブジェクト要求を調整し、オブジェクト要求の情報は、ストレージ制御部１５２によって理解され実行される。当分野の当業者であれば、１又はそれ以上のコマンドにオブジェクト要求をパージングするパージングモジュール２６２のその他の機能も理解されたい。
【００８０】
装置２００は、オブジェクト要求からパージングされたコマンドを実行するコマンド実行モジュール２６４を具える。一実施例においては、コマンド実行モジュール２６４は、１つのコマンドを実行する。別の実施例においては、コマンド実行モジュール２６４は、複数のコマンドを実行する。通常、コマンド実行モジュール２６４は、書き込みコマンドなど、オブジェクト要求からパージングされたコマンドを解釈し、次いで、サブコマンドを形成して、キューイングして（ｑｕｅｕｅ）、実行する。例えば、オブジェクトからパージングされた書き込みコマンドは、ストレージ制御部１５２に指令し、複数のデータセグメントを記憶する。さらに、オブジェクト要求は、暗号化、圧縮など必要な特性を具えていてもよい。コマンド実行モジュール２６４は、ストレージ制御部１５２に指令して、データセグメントを圧縮し、データセグメントを暗号化し、１又はそれ以上のデータパケットおよび各データパケットの関連するヘッダを作成し、メディア暗号化キーを有するデータパケットを暗号化し、エラー修正コードを加え、そして、特定のロケーションにデータパケットを記憶することができる。特定のロケーションおよびその他のサブコマンドのデータパケットを記憶することは、その他のより低レベルのサブコマンドにブレークダウンされる。当分野の当業者であれば、コマンド実行モジュール２６４が、オブジェクト要求からパージングされる１又はそれ以上のコマンドを実行可能であるその他の方法を理解されたい。
【００８１】
装置２００は、オブジェクトインデックスモジュール２６６を具え、このモジュール２６６は、オブジェクトを作成するか、または、オブジェクトのデータセグメントを記憶するストレージ制御部１５２に対応して、オブジェクトインデックスのオブジェクト項目を作成する。一般的に、ストレージ制御部１５２は、データセグメントと、記憶されたデータパケットが、データセグメントが記憶されるときに、割り当てられたロケーションと、からデータパケットを作成する。データセグメント内で受信したオブジェクトメタデータまたはオブジェクト要求の一部としてのオブジェクトメタデータは、同様に記憶できる。
【００８２】
オブジェクトインデックスモジュール２６６は、データパケットが記憶され、データパケットの物理的アドレスが割り当てられるときに、オブジェクトインデックスにオブジェクト項目を作成する。オブジェクト項目は、オブジェクトのロジック識別子と、ストレージ制御部１５２が１又はそれ以上のデータパケットおよびあらゆるオブジェクトメタデータパケットを記憶したところに関連する１又はそれ以上の物理的アドレスと、の間におけるマッピングを具える。別の実施例においては、オブジェクトインデックスの項目は、オブジェクトのデータパケットが記憶される前に作成される。例えば、データパケットが早期に記憶される物理的アドレスをストレージ制御部１５２が決定する場合、オブジェクトインデックスモジュール２６６は、オブジェクトインデックスの項目を早期に作成できる。
【００８３】
一般的には、オブジェクト要求またはオブジェクト要求群が、読み取り−修正−書き込みおプレーション中、修正されたオブジェクトまたはデータセグメントになるとき、オブジェクトインデックスモジュール２６６は、修正したオブジェクトに関連するオブジェクトインデックス内の項目をアップデートする。一実施例においては、オブジェクトインデックスは、修正したオブジェクト用のオブジェクトインデックス中に、新規オブジェクトおよび新規項目を作成する。一般的に、オブジェクトの一部のみが修正され場合、オブジェクトは、修正されたデータパケットおよび未変化のいくつかのデータパケットを具える。この場合、新規項目は、もともと書き込まれていた未変化のデータパケットと、新規ロケーションに書き込まれた修正されたオブジェクトと、に対するマッピングを具える。
【００８４】
別の実施例においては、オブジェクト要求レシーバモジュール２６０は、データブロックまたはその他のオブジェクトエレメントを消去するコマンドを具えたオブジェクト要求を受信し、ストレージ制御部１５２は、オブジェクトに対する基準、オブジェクトの関連性、および、消去したデータブロックのサイズなどの情報を含む消去パケットなど、少なくとも１つのパケットを記憶することができる。さらに、それは、さらに、消去したオブジェクトエレメントがゼロで充填されていることを示してもよい。従って、消去オブジェクト要求は、実際のメモリまたは消去されるストレージをエミュレートするのに使用可能であり、メモリまたはストレージは、メモリ／ストレージのセル中でゼロを用いて実際に記憶された適宜なメモリ／ストレージの一部を実際に有している。
【００８５】
有利には、データセグメントとオブジェクトのメタデータとの間のマッピングを示す項目を含んだオブジェクトインデックスを作成することで、ストレージ制御部１５２が、オブジェクトを自律的に処理して管理することが可能になる。この能力によって、ストレージデバイス１５０内にデータを記憶する大きなフレキシビリティをもたせることができる。オブジェクトのインデックス項目が作成されると、続いて、オブジェクトに関するオブジェクト要求を、ストレージ制御部１５２が効率的に応答可能である。
【００８６】
一実施例においては、ストレージ制御部１５２は、パージングモジュール２６２によってパージングする前に、オブジェクト要求レシーバモジュール２６０によって受信される１又はそれ以上のオブジェクト要求をキューイングするオブジェクト要求キューイングモジュールを具える。オブジェクト要求キューイングモジュール２６８によって、オブジェクト要求が受信されるときと、オブジェクト要求が実行されるときとの間においてフレキシビリティをもたせることができる。
【００８７】
別の実施例においては、ストレージ制御部１５２は、１又はそれ以上のデータセグメントから１又はそれ以上のデータパケットを形成するパケッタイザ（ｐａｃｋｅｔｉｚｅｒ）３０２を具え、ここで、データパケットがデータストレージデバイス１５４のストレージに合うようにサイズ調整される。パケッタイザ３０２は、以下の図３でより詳細に示す。パケッタイザ３０２は、一実施例においては、各パケットのヘッダを作成するメッセージモジュール２７０を具える。このヘッダは、パケット識別子とパケット長を具える。パケット識別子は、パケットが形成されるためのオブジェクトにパケットを関連させる。
【００８８】
一実施例においては、各パケットは、自納式のパケット識別子を具え、ここで、パケット識別子は、オブジェクトと、パケット内に含まれるオブジェクトエレメントのオブジェクト内の関係性を識別するのに十分な情報を含んでいる。しかしながら、より効率的な好適な実施例は、コンテナにパケットを記憶することができる。
【００８９】
コンテナは、データを具え、このデータは、より効率的なパケットストレージを促進し、オブジェクトとデータパケット、メタデータパケット、コンテナ内に記憶されるオブジェクトに関連したその他のパケットと、の関連性を構築するのを補助する。ストレージ制御部１５２は、通常、同様の方法で、オブジェクトおよびデータセグメントの一部として受信されるオブジェクトメタデータを処理することに留意されたい。一般的に、「パケット」は、データ、メタデータを具えるメタデータパケット、または、別のパケットタイプのパケットを意味する。オブジェクトは、１又はそれ以上のコンテナに記憶可能で、コンテナは、一般的に、１の固有オブジェクトのみに対するパケットを具える。オブジェクトは、複数のコンテナ間に配置可能である。一般的に、コンテナは、１の論理消去ブロック（ストレージディビジョン）内に記憶され、論理消去ブロック間でスプリットされることはない。
【００９０】
一例においては、コンテナは、２又はそれ以上の論理／バーチャルページ間でスプリットされてもよい。コンテナは、オブジェクト内のコンテナに関連するコンテナラベルによって識別される。コンテナは、多くのパケットに対してゼロを含み、一般的に、コンテナ内のパケットは、１つのオブジェクトからなる。パケットは、オブジェクト属性エレメント、オブジェクトデータエレメント、オブジェクトインデックスエレメントなど、多数のオブジェクトエレメントタイプでもよい。２以上のオブジェクトエレメントタイプを含むハイブリッドパケットを作成できる。各パケットは、同一エレメントタイプの多数のエレメントに対してゼロを含む。コンテナ内の各パケットは、一般的に、オブジェクトとの関連性を識別する固有の識別子を含む。
【００９１】
各パケットは、１のコンテナに関連している。好適な実施例においては、コンテナは、消去ブロックに限定されず、各消去ブロックの開始点またはその付近で、コンテナパケットを見つけることができる。このことは、破損したパケットヘッダを有する消去ブロックに対するデータ損失を制限することを支援する。この実施例においては、オブジェクトインデックスが使用不能であり、消去ブロック内のパケットヘッダが破損している場合、パケットヘッダーから消去ブロックエンドまでの内容は、連続するパケットのロケーションを決定する信頼性のある機構がない可能性が高いので、損失してしまう。別の実施例においては、より信頼性のある方法は、ページバウンダリに限定されるコンテナを有することである。この実施例は、より多くのヘッダオーバヘッドを必要とする。別の実施例においては、コンテナは、ページを横切りフローして、ブロックバウンダリを消去することができる。これは、必要とするヘッダオーバヘッドは少なくなるが、パケットヘッダが破損している場合、データのより大きな部分が損失される。これらのいくつかの実施例に関して、いくつかのタイプのＲＡＩＤが、さらなるデータの完全性を保証するために使用されることが予測される。
【００９２】
一実施例においては、装置２００は、データストレージデバイス１５４に記憶されるパケットヘッダからの情報を使用して、オブジェクトインデックスの項目を再構築するオブジェクトインデックス再構築モジュール２７２を具える。一実施例においては、オブジェクトインデックス再構築モジュール２７２は、各パケットが属するオブジェクトを判定するヘッダと、オブジェクトにおけるデータまたはメタデータがどこに属するかを判定するシークエンス情報とを読み込むことによって、オブジェクトインデックスの項目を再構築する。オブジェクトインデックス再構築モジュール２７２は、各パケットおよびタイムスタンプの物理アドレス情報、または、パケットの物理ロケーションとオブジェクト識別子とデータセグメントシークエンスとの間のマッピングを作成するシークエンス情報を使用する。タイムスタンプまたはシークエンス情報をオブジェクトインデックス再構築モジュール２７２が使用して、インデックスに対して行われる変化シークエンスをリプレイし、これによって、通常、最新状態を再構築（ｒｅｅｓｔａｂｌｉｓｈ）する。
【００９３】
別の実施例においては、オブジェクトインデックス再構築モジュール２７２は、パケットの物理ロケーションと、オブジェクト識別子と、オブジェクトインデックス内に項目を再構築する各パケットのシークエンスナンバと、を識別する、コンテナパケット情報とともにパケットヘッダ情報を使用して、パケットを配置する。一実施例においては、消去ブロックは、タイムスタンプされるか、または、パケットが書き込まれときにシークエンスナンバが付与され、タイムスタンプまたは消去ブロックのシークエンス情報は、コンテナヘッダおよびパケットヘッダから集められた情報とともに使用され、オブジェクトインデックスを再構築する。別の実施例においては、消去ブロックがリカバリするときに、タイムスタンプまたはシークエンス情報が書き込まれる。
【００９４】
オブジェクトインデックスが揮発性メモリに記憶されるとき、エラー、電力損失、または、ストレージ制御部１５２がオブジェクトインデックスを保存せずにシャットダウンする問題が、オブジェクトインデックスが再構築できない場合に、問題になるであろう。オブジェクトインデックス再構築モジュール２７２によって、オブジェクトインデックスが揮発性メモリに記憶され、これにより迅速なアクセスなど揮発性メモリの利点を得る。オブジェクトインデックス再構築モジュール２７２によって、ストレージデバイス１５０の外部にあるデバイスに依存せず自律的に、オブジェクトインデックスの迅速な再構築が可能となる。
【００９５】
一実施例においては、揮発性メモリのオブジェクトインデックスは、データストレージデバイス１５４に一時的に記憶される。特定の実施例においては、オブジェクトインデックスまたは「インデックスメタデータ」は、ソリッドステートストレージ１１０に一時的に記憶される。別の実施例においては、インデックスメタデータが、パケットを記憶するソリッドステートストレージ１１０ａ−１１０ｎ−１から分離したソリッドステートストレージ１１０ｎに記憶される。インデックスメタデータは、データおよび要求デバイス１５５から伝達されるオブジェクトメタデータから独立的に管理され、ストレージ制御部１５２／ソリッドステートストレージデバイス制御部２０２によって管理される。オブジェクトからの他のデータおよびメタデータから分離したインデックスを管理して記憶することによって、オブジェクトメタデータを処理する必要なく、ストレージ制御部１５２／ソリッドステートストレージデバイス制御部２０２なしで、効率的データフローが可能となる。
【００９６】
一実施例においては、オブジェクト要求レシーバモジュール２６０によって受信されるオブジェクト要求が書き込み要求を具える場合、ストレージ制御部１５２は、ローカルまたはリモートダイレクトメモリアクセス（「ＤＭＡ」、「ＲＤＭＡ」）オペレーションとして、要求デバイス１５５のメモリからオブジェクトの１又はそれ以上のデータセグメントを受信される。好適な例において、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて要求デバイス１５５のメモリからデータを引き出す（ｐｕｌｌ）。別の例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、データセグメントをストレージ制御部１５２へプッシュする。別の実施例においては、オブジェクト要求は読み取り要求を具え、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、オブジェクトの１又はそれ以上のデータセグメントを要求デバイス１５５のメモリに伝達する。好適な例においては、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、データを要求デバイス１５５のメモリにプッシュする別の実施例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、ストレージ制御部１５２からデータを引き出す。別の例においては、ストレージ制御部１５２は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、要求デバイス１５５のメモリからオブジェクトコマンド要求セットを引き出す。別の実施例においては、要求デバイス１５５は、１又はそれ以上のＤＭＡまたはＲＤＭＡオペレーションにおいて、ストレージ制御部１５２にオブジェクトコマンド要求セットをプッシュする。
【００９７】
一実施例においては、ストレージ制御部１５２は、ブロックストレージをエミュレートし、要求デバイス１５５とストレージ制御部１５２との間で通信されるオブジェクトは、１又はそれ以上のデータブロックを具える。一実施例においては、要求デバイス１５５は、ドライバを具え、ストレージデバイス１５０はブロックストレージデバイスとして存在する。例えば、要求デバイス１５２は、要求デバイス１５５がデータブロックを記憶しようとする物理的アドレスとともに所定サイズのデータブロックを送ることができる。ストレージ制御部１５２は、データブロックを受信し、データブロックを転送された物理的ブロックアドレスを使用するか、または、オブジェクト識別子としての物理的ブロックアドレスのトランスフォーメーション（ｔｒａｎｓｆｏｒｍａｔｉｏｎ）を使用する。次いで、ストレージ制御部１５６は、データブロックをパケット化してデータブロックを自在に記憶することで、オブジェクトまたはオブジェクトのデータセグメントとしてデータブロックを記憶する。次いで、オブジェクトインデックスモジュール２６６は、物理的なブロックベースのオブジェクト識別子と、ストレージ制御部１５２がデータブロックのデータを具えるデータパケットを記憶した実際の物理ロケーションとを使用して、オブジェクト内に項目を作成する。
【００９８】
別の実施例においては、ストレージ制御部１５２は、ブロックオブジェクトをアクセプトすることでブロックストレージをエミュレートする。ブロックオブジェクトは、ブロック構造中に１又はそれ以上のデータブロックを具えることができる。一実施例においては、ストレージ制御部１５２は、その他のオブジェクトとしてブロックオブジェクトを処理する。別の実施例においては、オブジェクトは、完全なブロックデバイス、ブロックデバイスのパーティション、又は、トラック、セクタ、チャネルなどを含むブロックデバイスの他のロジック若しくは物理的サブエレメントを表す。特筆すべきことは、ブロックデバイスＲＡＩＤ群を、プログレッシブＲＡＩＤなどの異なるＲＡＩＤ構造をサポートするオブジェクトに再マッピング（ｒｅｍａｐ）する能力である。当分野の当業者であれば、従来または未来のブロックデバイスをオブジェクトへマッピングするその他のマッピングも理解されたい。
【００９９】
ソリッドステートストレージデバイス
図２Ｂは、本発明によるソリッドステートデバイス１０２内に書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を具えるソリッドステートデバイス制御部２０２の一実施例２０１を示す概略的ブロック図である。ソリッドステートストレージデバイス制御部２０２は、各々がソリッドステートストレージ１１０を制御する多数のソリッドステートストレージ制御部０−Ｎ１０４ａ−ｎを具えることができる。描いた実施例においては、２つのソリッドステート制御部を示す：ソリッドステート制御部０  １０４ａおよびソリッドステートストレージ制御部Ｎ  １０４ｎは、それぞれ、ソリッドステートストレージ１１０ａ−ｎを制御する。描いた実施例においては、ソリッドステートストレージ制御部０  １０４ａは、データチャネルを制御し、接続したソリッドステートストレージ１１０ａはデータを記憶する。ソリッドステートストレージ制御部Ｎ  １０４ｎは、記憶したデータと関連するインデックスメタデータチャネルを制御し、関連するソリッドステートストレージ１１０ｎはインデックスメタデータを記憶する。代替の実施例においては、ソリッドステートストレージデバイス制御部２０２は、１つのソリッドステートストレージ１１０ａを有する１つのソリッドステート制御部１０４ａを具える。別の実施例においては、複数のソリッドステートストレージ制御部１０４ａ−ｎおよび関連するソリッドステートストレージ１１０ａ−ｎがある。一実施例においては、１又はそれ以上のソリッドステート制御部１０４ａ−１０４ｎ−１に関連するソリッドステートストレージ１１０ａ−１１０ｎ−１に接続した制御部１０４ａ−１０４ｎ−１は、データを制御し、ソリッドステートストレージ制御部１０４ｎに関連するソリッドステートストレージ１１０ｎに接続した少なくとも１つの制御部１０４ｎは、インデックスメタデータを制御する。
【０１００】
一実施例においては、少なくとも１つのソリッドステート制御部１０４は、フィールドプログラマブルゲートアレイ（「ＦＰＧＡ」）であり、制御部機能は、ＦＰＧＡにプログラムされる。特定の実施例においては、ＦＰＧＡはＸｉｌｉｎｘ（登録商標）ＦＰＧＡである。別の実施例においては、ソリッドステートストレージ制御部１０４は、アプリケーション特異的集積回路（「ＡＳＩＣ」）またはカスタムロジックソリューションとして特別に設計されたコンポーネントを具える。各ソリッドステートストレージ制御部１０４は、通常、書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を具えており、これらは、図３でさらに説明する。別の実施例においては、少なくとも１つのソリッドステートストレージ制御部１０４は、ＦＰＧＡ、ＡＳＩＣおよびカスタムロジックコンポーネントの組み合わせから構成される。
【０１０１】
ソリッドステートストレージ
ソリッドステートストレージ１１０は、バンク２１４内で構成され、２方向性ストレージ入力／出力（「Ｉ／Ｏ」）バス２１０を介して並行してアクセスできる、非揮発性ソリッドステートストレージエレメント２１６、２１８、２２０のアレイである。一実施例においては、ストレージＩ／Ｏバス２１０は、一回につき、一方向性通信が可能である。例えば、データがソリッドステートストレージ１１０に書き込まれるとき、データは、ソリッドステートストレージ１１０から読み取ることはできない。別の実施例においては、データは、両方で同時にフローすることができる。なお、データバスに関して本明細書で使用されるように、２方向性が意味するのは、データパスウェイは、一回につき一方向のみしかデータフローできないが、２方向性データバス上で一方向のデータフローが停止したときは、データは、２方向性データバス上の反対方向にデータをフローすることができることである。
【０１０２】
ソリッドステートストレージエレメント（例えば、ＳＳＳ  ０．０  ２１６ａ）は、通常、回路基板上のチップ（１又はそれ以上のチップのパッケージ）またはダイとして構成される。示されているように、例え、以下の複数のエレメントが、チップパッケージ、チップパッケージスタックまたはいくつかのその他のパッケージエレメントに一緒にパッケージされている場合であっても、ソリッドステートストレージエレメント（例えば、２１６ａ）は、他のソリッドストレージエレメント（例えば、２１８ａ）から独立または半独立的に機能する。示されているように、ソリッドステートストレージ２１６、２１８、２２０のカラムは、バンク２１４として指定される。示されているように、ソリッドステートストレージ１１０内のｎ×ｍのソリッドステートストレージエレメント２１６、２１８、２２０のアレイにおいて、バンク当たり「ｎ」バンク２１４ａ−ｎおよび「ｍ」ソリッドステートストレージエレメント２１６ａ−ｍ、２１８ａ−ｍ、２２０ａ−ｍが存在していてもよい。一実施例においては、ソリッドステートストレージ１１０ａは、８つのバンク２１４を有するバンク２１４あたり２０のソリッドステートストレージエレメント２１６、２１８、２２０を具え、ソリッドステートストレージ１１０ｎは、１つのバンク２１４を有するバンク２１４当たり、２つのソリッドステートストレージエレメント２１６、２１８を具える。一実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、１つのレベルのセル（「ＳＬＣ」）デバイスからなっている。別の実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、複数レベルのセル（「ＭＬＣ」）デバイスからなっている。
【０１０３】
一実施例においては、共通ストレージＩ／Ｏバス２１０ａ列（例えば、２１６ｂ、２１８ｂ、２２０ｂ）を共有する複数のバンクのソリッドステートストレージエレメントは、一緒にパッケージされる。一実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０は、チップ当たり１又はそれ以上のダイを有することができ、１又はそれ以上のチップは、垂直方向にスタックされ、各ダイは独立してアクセス可能である。別の実施例においては、ソリッドステートストレージエレメント（例えば、ＳＳＳ０．０  ２１６ａ）は、ダイあたり１又はそれ以上のバーチャルダイと、チップ当たり１又はそれ以上のダイと、垂直方向にスタックされた１又はそれ以上のチップと、を有し、各バーチャルダイは独立してアクセス可能である。別の実施例においては、ソリッドステートストレージエレメントＳＳＳ０．０  ２１６ａは、ダイ当たり１又はそれ以上のバーチャルダイと、１又はそれ以上のいくつかまたは全部が垂直方向にスタックされたチップあたり１又はそれ以上のダイと、を有し、各バーチャルダイは、独立してアクセス可能である。
【０１０４】
一実施例においては、２つのダイが、グループ当たり４つのスタックとともに垂直方向にスタックされ、８つのストレージエレメント（例えば、ＳＳＳ  ０．０−ＳＳＳ  ０．８）２１６ａ−２２０ａを形成し、各々は、別のバンク２１４ａ−ｎにある。別の実施例においては、２０のストレージエレメント（例えば、ＳＳＳ０．０−ＳＳＳ２０．０）２１６は、バーチャルバンク２１４ａを形成し、８のバーチャルバンクの各々は、２０のストレージエレメント（例えば、ＳＳＳ０．０−ＳＳＳ２０．８）２１６、２１８、２２０を有する。データは、特定のグループのストレージエレメント（ＳＳＳ０．０−ＳＳＳ０．８）２１６ａ、２１８ａ、２２０ａの全てのストレージエレメントに対して、ストレージＩ／Ｏバス２１０を介して、ソリッドステートストレージ１１０に送られる。ストレージ制御バス２１２ａは、特定のバンク（例えば、バンク−０  ２１４ａ）を選択するために使用され、全てのバンク２１４に接続されたストレージＩ／Ｏバス２１０を介して受信するデータは、選択されたバンク２１４ａに書き込まれる。
【０１０５】
好適な実施例においては、ストレージＩ／Ｏバス２１０は、１又はそれ以上の独立Ｉ／Ｏバスからなり（２１０ａ．ａ−ｍ、２１０ｎ．ａ−ｍを具える「ＩＩＯＢａ−ｍ」）、各列内のソリッドステートストレージエレメントは、各ソリッドステートストレージエレメント２１６、２１８、２２０に並行してアクセスする独立Ｉ／Ｏバスの１つを共有するので、全てのバンク２１４は、同時にアクセスされる。例えば、ストレージＩ／Ｏバス２１０の１つのチャネルは、各バンク２１４ａ−ｎの第１のソリッドステートストレージエレメント２１６ａ、２１８ａ、２２０ａに同時にアクセスすることができる。ストレージＩ／Ｏバス２１０の第２のチャネルは、各バンク２１４ａ−ｎの第２のソリッドステートストレージエレメント２１６ｂ、２１８ｂ、２２０ｂに同時にアクセスできる。ソリッドステートストレージ２１６、２１８、２２０の各列は、同時にアクセスされる。一実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０が複数レベル（物理的にスタックされている）ある場合、ソリッドステートストレージエレメント２１６、２１８、２２０の全ての物理的レベルは、同時にアクセスされる。本明細書で使用されるように、「同時」は、ほぼ同時のアクセスを含み、デバイスは、スイッチングノイズを回避するために、わずかに異なる間隔でアクセスされる。「同時」は、このような文脈で使用され、シーケンシャルまたは連続（ｓｅｒｉａｌ）アクセスとは分け、コマンドおよび／またはデータは、交互に独立して送られる。
【０１０６】
一般的に、バンク２１４ａ−ｎは、ストレージ制御バス２１２を用いて独立して選択される。一実施例においては、バンク２１４は、使用可能チップまたは選択チップを用いて選択される。選択チップおよび使用可能チップの両方が使用可能な場合、ストレージ制御バス２１２は、複数レベルのソリッドステートストレージエレメント２１６、２１８、２２０の１つのレベルを選択することができる。その他の実施例においては、ストレージ制御バス２１２によって他のコマンドを使用して、複数レベルのソリッドステートストレージエレメント２１６、２１８、２２０の１つのレベルを独立して選択する。ソリッドステートストレージエレメント２１６、２１８、２２０は、ストレージＩ／Ｏバス２１０およびストレージ制御バス２１２上で伝達される制御情報とアドレス情報との組み合わせを介して選択されてもよい。
【０１０７】
一実施例においては、各ソリッドステートストレージエレメント２１６、２１８、２２０は、消去ブロックにパーティション化され、各消去ブロックは、ページにパーティション化される。一般的なページは、２０００バイト（「２ｋＢ」）である。一例においては、ソリッドステートストレージエレメント（例えば、ＳＳＳ０．０）は、２つのレジスタを備え、２つのページをプログラムすることができ、２つのレジスタソリッドステートストレージエレメント２１６、２１８、２２０は、４ｋＢの容量を有する。さらに、２０のソリッドステートストレージエレメント２１６、２１８、２２０のバンク２１４は、ストレージＩ／Ｏバス２１０のチャネルを通る同一アドレスでアクセスされる８０ｋＢ容量のページを有することが可能である。
【０１０８】
８０ｋＢのソリッドステートストレージエレメント２１６、２１８、２２０のバンク２１４における上記グループのページは、バーチャルページと呼ばれる。同様にバンク２１４ａの各ストレージエレメント２１６ａ−ｍの消去ブロックは、バーチャル消去ブロックを形成するようにグループ化されてもよい。好適な実施例においては、ソリッドステートストレージエレメント２１６、２１８、２２０内の消去ブロックページは、消去コマンドをソリッドステートストレージエレメント２１６、２１８、２２０内で受信したときに消去される。消去ブロック、ページ、プレーンまたはソリッドステートストレージエレメント２１６、２１８、２２０内のその他のロジックおよび物理的ディビジョンのサイズおよび数が、技術の進歩に伴い、所定時間に亘って変化することが予想されるが、新規構成に一致する多数の実施例が、可能であり、本明細書の一般的説明と一致すると理解されたい。
【０１０９】
一般的に、パケットは、ソリッドステートストレージエレメント２１６、２１８、２２０内の特定ロケーションに書き込まれるとき、このパケットは、特定バンクの特定エレメントの特定消去ブロックに特異的である特定ページ内のロケーションに書き込まれるように意図されており、物理的アドレスは、ストレージＩ／Ｏバス２１０上で送られ、パケットがそれに続く。物理的アドレスは、パケットをページ内の指定ロケーションへと指令するための、ソリッドステートストレージエレメント２１６、２１８、２２０の情報を十分に保有している。ストレージエレメント（例えば、ＳＳＳ０．０−ＳＳＳ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）の列における全てのストレージエレメントは、ストレージＩ／Ｏバス２１０ａ．ａ内の適宜なバスによって同時にアクセスされ、適宜なページに到達し、ストレージエレメント（ＳＳＳ０．０−ＳＳＳ０．Ｎ  ２１６ａ、２１８ａ、２２０ａ）の列において同様にアドレス化されたページに、データパケットを書き込むことを回避するので、データパケットが書き込まれるべき正規のページとともにソリッドステートストレージエレメントＳＳＳ０．０  ２１６ａを具えるバンク２１４ａは、ストレージ制御バス２１２によって同時に選択される。
【０１１０】
同様に、ストレージＩ／Ｏバス２１２上を伝達される読み取りコマンドは、１つのバンク２１４ａと、このバンク２１４ａ内の適宜なページとを選択するために、ストレージ制御バス２１２上の同時コマンドを必要とする。好適な実施例においては、読み取りコマンドは、ページ全体を読み取り、さらに、バンク２１４において、並行して複数のソリッドステートストレージエレメント２１６、２１８、２２０があるので、バーチャルページ全体は、読み取りコマンドを用いて読み取られる。なお、読み取りコマンドは、バンクインターリーブに関して以下で説明するように、サブコマンドにブレーク可能である。さらに、バーチャルページは、書き込みオペレーションでアクセス可能である。
【０１１１】
消去ブロック消去コマンドは、特定の消去ブロックを消去する特定の消去ブロックアドレスを用いて、ストレージＩ／Ｏバス２１０を介して、消去ブロックを消去するように送信される。一般的に、消去ブロック消去コマンドは、バーチャル消去ブロックを消去するために、ストレージＩ／Ｏバス２１０の並行パスを介して送信可能であり、特定の消去ブロックアドレスを有する各々が、特定の消去ブロックを消去する。同時に、特定バンク（例えば、バンク−０  ２１４ａ）がストレージ制御バス２１２を介して選択され、全てのバンク（バンク１−Ｎ２１４ｂ−ｎ）における同様にアドレス化されたブロックが消去されるのを防止する。さらに、その他のコマンドは、ストレージＩ／Ｏバス２１０とストレージ制御バス２１２との組み合わせを利用して特定ロケーションに送信可能である。当分野の当業者であれば、２方向性ストレージＩ／Ｏバス２１０およびストレージ制御バス２１２を用いて、特定のストレージロケーションを選択できるその他の方法を理解されたい。
【０１１２】
一実施例においては、パケットは、ソリッドステートストレージ１１０にシーケンシャルに書き込まれる。例えば、パケットは、ストレージエレメント２１６のバンク２１４ａのストレージ書き込みバッファへとストリームされ、バッファがフルの場合、パケットは、指定のバーチャルページにプログラムされる。次いで、パケットは、ストレージ書き込みバッファを補充（ｒｅｆｉｌｌ）し、フルの場合、パケットは、次のバーチャルページに書き込まれる。次のバーチャルページは、同一バンク２１４ａまたは他のバンク（例えば、２１４ｂ）内にあってもよい。このプロセスは、一般的に、バーチャル消去ブロックが満たされるまで、バーチャルページごとに繰り返される。別の実施例においては、ストリーミングは、バーチャル消去ブロックバウンダリに亘って繰り返され、このプロセスは、バーチャル消去ブロックごとに繰り返される。
【０１１３】
読み取り、修正、書き込みオペレーションにおいて、オブジェクト関連データパケットは、配置され、読み取りオペレーションで読み取られる。修正されたオブジェクトのデータセグメントは、データセグメントが読み取られるロケーションに書き込まれない。その代わり、修正されたデータセグメントは、データパケットに再度変換され、次いで、そのとき書き込まれているバーチャルページの次の利用可能ロケーションに書き込まれる。それぞれのデータパケットのオブジェクトインデックス項目は、修正されたデータセグメントを含むパケットのポイントに修正される。修正されていない同一オブジェクトに関連したデータパケットのオブジェクトインデックスの１又はそれ以上の項目は、未修正データパケットのもともとのロケーションに対するポインタを具える。従って、例えば、オブジェクトの前バージョンを維持するために、もともとのオブジェクトを維持している場合、もともとのオブジェクトは、もともと書き込まれていた全てのデータパケットに対するオブジェクトインデックスのポインタを有する。この新規オブジェクトは、もともとのデータパケットに対するオブジェクトインデックスのポインタと、その時に書き込まれているバーチャルページにおける修正データパケットに対するポインタとを有する。
【０１１４】
コピーオペレーションにおいて、オブジェクトインデックスは、ソリッドステートストレージ１１０に記憶された多数のパケットにマップされたもともとのオブジェクトの項目を具える。コピーが行われるとき、新規オブジェクトが作成され、新規項目が、もともとのパケットに新規オブジェクトをマッピングするオブジェクトインデックスに作成される。新規オブジェクトは、ソリッドステートストレージ１１０に書き込まれ、そのロケーションは、オブジェクトインデックスの新規項目にマッピングされる。新規オブジェクトパケットは、コピーに伝達されていないもともとのオブジェクトで変更が生じた場合またはオブジェクトインデックスが損失または破損した場合に、参照されるもともとのオブジェクト内のパケットを識別するために使用できる。
【０１１５】
有益なことに、パケットをシーケンシャルに書き込むことは、ソリッドステートストレージ１１０のより均等な利用を容易にし、ソリッドストレージデバイス制御部２０２がソリッドステートストレージ１１０内のストレージホットスポットおよび各種バーチャルページの利用レベルをモニタすることを可能にする。さらに、パケットをシーケンシャルに書き込むことは、下記で詳細に示すように、強力で有効な不要データ（ｇａｒｂａｇｅ）コレクションシステムを容易にする。当分野の当業者であれば、データパケットのシーケンシャルストレージのその他の利点を理解されたい。
【０１１６】
ソリッドステートストレージデバイス制御部
各種実施例においては、ソリッドステートストレージデバイス制御部２０２は、データバス２０４、ローカルバス２０６、バッファ制御部２０８、バッファ０−Ｎ  ２２２ａ−ｎ、マスタ制御部２２４、ダイレクトメモリアクセス（「ＤＭＡ」）制御部２２６、メモリ制御部２２８、ダイナミックメモリアレイ２３０、静的ランダムメモリアレイ２３２、管理制御部２３４、管理バス２３６、システムバス２４０へのブリッジ２３８、および、種々雑多なロジック２４２も具え、以下にこれを示す。他の実施例においては、システムバス２４０は、１又はそれ以上のネットワークインターフェースカード（「ＮＩＣｓ」）２４４に結合し、そのうちのいくつかは、リモートＤＭＡ（「ＲＤＭＡ」）制御部２４６、１又はそれ以上の中央処理装置（ＣＰＵ）２４８、１又はそれ以上の外部メモリ制御部２５０および関連する外部メモリアレイ２５２、１又はそれ以上のストレージ制御部２５４、ピア（ｐｅｅｒ）制御部２５６およびアプリケーション特異的処理装置２５８を具え、これらは以下で説明する。システムバス２４０に接続されたコンポーネント２４４−２５８は、コンピュータ１１２に配置されてもよく、その他のデバイスであってもよい。
【０１１７】
一般的に、ソリッドステートストレージ制御部１０４は、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０とデータを通信する。ソリッドステートストレージが、バンク２１４内に配列され、各々のバンク２１４が、同時にアクセスされる複数のストレージエレメント２１６、２１８、２２０を具える一般的な実施例においては、ストレージＩ／Ｏバス２１０は、バスのアレイであり、ストレージエレメント２１６、２１８、２２０の各列の１つは、バンク２１４に亘って存在している。本明細書で使用されるように、用語「ストレージＩ／Ｏバス」は、１つのストレージＩ／Ｏバス２１０、または、バス２０４に独立したデータアレイを意味する。好適な実施例においては、ストレージエレメントの列（例えば、２１６ａ、２１８ａ、２２０ａ）にアクセスする各ストレージＩ／Ｏバス２１０は、ストレージエレメントの列２１６ａ、２１８ａ、２２０ａにアクセスされるストレージディビジョン（例えば、消去ブロック）のロジック−物理マッピングを具えることができる。このマッピングによって、ストレージディビジョンの物理アドレスにマッピングされる論理アドレスが、第１のストレージディビジョンが機能していない場合、部分的に機能していない場合、アクセス不能な場合、または、その他何らかの問題がある場合に、異なるストレージディビジョンに再マップ可能である。再マップは、図３の再マップモジュール３１４に関連してさらに説明する。
データは、システムバス２４０、ブリッジ２３８、ローカルバス２０６、バッファ２２を介して、また、最終的にデータバス２０４を介して、要求デバイス１５５からソリッドステートストレージ制御部１０４と通信可能である。データバス２０４は、一般的に、バッファ制御部２０８を用いて制御される１又はそれ以上のバッファ２２２ａ−ｎに接続される。バッファ制御部２０８は、通常、ローカルバス２０６からバッファ２２２へ、データバス２０４からパイプラインインプットバッファ３０６およびアウトプットバッファ３３０を介して、データの転送を制御する。一般的に、バッファ制御部２２２は、どのように、要求デバイスからきたデータがバッファ２２２に一時的に記憶可能で、次いで、データバス２０４上を転送されるかを制御でき、あるいは、その逆も同様に制御でき、異なるクロックドメインを考慮し、データ不一致（ｃｏｌｌｉｓｉｏｎ）を防ぐことができる。バッファ制御部２０８は、通常、マスタ制御部２２４とともに作動し、データフローに調和させる。データがくるときは、データは、システムバス２４０の上に到達し、ブリッジ２３８を介してローカルバス２０６に転送される。
【０１１８】
一般的に、データは、マスタ制御部２２４およびバッファ制御部２０８によって指令されるように、ローカルバス２０６から１又はそれ以上のデータバッファ２２２へと転送される。次いで、データは、バッファ２２２からデータバス２０４へと、ソリッドステート制御部１０４を介して、ＮＡＮＤフラッシュまたはその他のストレージメディアなどソリッドステートストレージ１１０へとフローする。好適な実施例においては、データと、このデータとともにくる関連したアウトオブバンドメタデータ（「オブジェクトメタデータ」）は、１又はそれ以上のソリッドステートストレージ制御部１０４ａ−１０４ｎ−１および関連するソリッドステートストレージ１１０ａ−１１０ｎ−１を具える１又はそれ以上のデータチャンネルを用いて通信され、一方、少なくとも１つのチャネル（ソリッドステートストレージ制御部１０４ｎ、ソリッドステートストレージ１１０ｎ）は、インデックス情報や、ソリッドステートストレージデバイス１０２に内部生成されるその他のメタデータなど、インバンドメタデータ専用である。
【０１１９】
通常、ローカルバス２０６は、２方向性バスであるか、または、ソリッドステートストレージデバイス制御部２０２の内部のデバイス間、および、ソリッドステートストレージデバイス１０２の内部デバイスと、システムバス２４０に接続したデバイス２４４−２５８との間において、データおよびコマンドの通信を可能にするバスのセットである。ブリッジ２３８は、ローカルバス２０６とシステムバス２４０との間の通信を促進する。当分野の当業者であれば、リング構造またはスイッチ式スター設定、ならびに、バス２４０、２０６、２０４、２１０およびブリッジ２３８の機能など、その他の実施例を理解されたい。
【０１２０】
通常、システムバス２４０は、コンピュータ１１２のバスであり、または、ソリッドステートストレージデバイス１０２がインストールまたは接続されているその他のデバイスである。一実施例においては、システムバス２４０は、ＰＣＩ−ｅバス、シリアルアドバンステクノロジーアタッチメント（「シリアルＡＴＡ」）バス、パラレルＡＴＡなどでもよい。別の実施例においては、システムバス２４０は、スモールコンピュータシステムインターフェース（「ＳＣＳＩ」）、ＦｉｒｅＷｉｒｅ、ファイバーチャネル、ＵＳＢ、ＰＣＩｅ−ＡＳなど、外部バスである。ソリッドステートストレージデバイス１０２は、デバイスの内側に適用するように、または、外側に接続されたデバイスとして、パッケージされてもよい。
【０１２１】
ソリッドステートストレージデバイス制御部２０２は、ソリッドステートストレージ１０２内のより高レベルの機能を制御するマスタ制御部２２４を具える。マスタ制御部２２４は、各種実施例において、オブジェクト要求およびその他の要求を解釈することによってデータフローを制御し、インデックスの作成を指令し、データに関連したオブジェクト識別子を、関連するデータの物理ロケーションにマップして、ＤＭＡ要求と調和する本明細書に記載される機能の多くは、マスタ制御部２２４によって完全に、部分的に制御される。
【０１２２】
一実施例においては、マスタ制御部２２４は、内蔵型制御部を使用する。別の実施例においては、マスタ制御部２２４は、動的メモリアレイ２３０（動的ランダムアクセスメモリ「ＤＲＡＭ」）、静的メモリアレイ３２３（静的ランダムアクセスメモリ「ＳＲＡＭ」）など、ローカルメモリを使用する。一実施例においては、ローカルメモリは、マスタ制御部２２４を用いて制御される。別の実施例においては、マスタ制御部は、メモリ制御部２２８を介してローカルメモリにアクセスする。別の実施例においては、マスタ制御部は、Ｌｉｎｕｘサーバを運用し、ＷｏｒｌｄＷｉｄｅＷｅｂ、ハイパーテキストマークアップ言語（「ＨＴＭＬ」）など、各種共通サーバインターフェースをサポートすることができる。別の実施例においては、マスタ制御部２２４は、ナノプロセッサを使用する。マスタ制御部２２４は、プログラマブル若しくは標準ロジック、または、上記に挙げた制御部タイプの組み合わせ、を使用して構成されていてもよい。当分野の当業者であれば、マスタ制御部の多数の実施例を理解されたい。
【０１２３】
一実施例においては、ストレージデバイス１５２／ソリッドステートストレージデバイス制御部２０２は、複数のデータストレージデバイス／ソリッドステートストレージ１１０ａ−ｎを管理し、マスタ制御部２２４は、ソリッドステートストレージ制御部１０４ａ−ｎなど、内部制御部中のワークロードを分割する。例えば、マスタ制御部２２４は、データストレージデバイス（例えば、ソリッドステートストレージ１１０ａ−ｎ）に書き込まれるオブジェクトを分割することができ、オブジェクトの一部は、接続したデータストレージデバイスの各々に記憶される。この特徴は、オブジェクトのより迅速なストレージおよびアクセスを可能にする性能向上である。一実施例においては、マスタ制御部２２４は、ＦＰＧＡを使用して実装される。別の実施例においては、マスタ制御部２２４内のファームウェアは、管理バス２３６、ＮＩＣ２４４に接続したネットワークを介したシステムバス２４０、または、システムバス２４０に接続したその他のデバイスを介してアップデート可能である。
【０１２４】
一実施例においては、オブジェクトを管理するマスタ制御部２２４は、ブロックストレージをエミュレートし、コンピュータ１０２、または、ストレージデバイス１５２／ソリッドステートストレージ１０２に接続したその他のデバイスは、ブロックストレージデバイスとしてストレージデバイス１５２／ソリッドステートストレージデバイス１０２を観察（ｖｉｅｗ）し、ストレージデバイス１５２／ソリッドステートストレージデバイス１０２内の特定の物理アドレスにデータを送る。次いで、マスタ制御部２２４は、ブロックを分割し、それをオブジェクトとしてデータブロックに記憶する。さらに、マスタ制御部２２４は、ブロックと、このブロックとともに送られる物理アドレスを、マスタ制御部２２４によって決定される実際のロケーションにマップする。このマッピングは、オブジェクトインデックスに記憶される。通常、ブロックエミュレーションに関し、ブロックデバイスアプリケーションプログラムインターフェース（「ＡＰＩ」）は、コンピュータ１１２、クライアント１１４、または、ブロックストレージデバイスとしてストレージデバイス１５２／ソリッドステートストレージデバイス１０２を利用することを望むその他のデバイス内のドライバに設けられる。
【０１２５】
別の実施例においては、マスタ制御部２２４は、ＮＩＣ制御部２４４および内蔵型ＲＤＭＡ制御部２４６を調整し、データおよびコマンドセットをジャストインタイムＲＤＭＡ転送する。ＮＩＣ制御部２４４は、非透明ポートの背後に隠れ、カスタムドライバを使用することができる。さらに、クライアント１１４のドライバは、標準スタックＡＰＩを使用し、ＮＩＣ２４４とともに機能して、Ｉ／Ｏメモリドライバを介してコンピュータネットワーク１１８にアクセスできる。
【０１２６】
一実施例においては、マスタ制御部２２４も、独立ドライブ冗長アレイ（「ＲＡＩＤ」）制御部である。データストレージデバイス／ソリッドステートストレージデバイス１０２が、１又はそれ以上の他のデータストレージデバイス／ソリッドステートストレージデバイス１０２とネットワーク接続される場合、マスタ制御部２２４は、１段（ｔｉｅｒ）ＲＡＩＤ、複数段ＲＡＩＤ、プログレッシブＲＡＩＤ用のＲＡＩＤ制御部でもよい。さらに、マスタ制御部２２４によって、いくつかのオブジェクトはＲＡＩＤアレイに記憶でき、他のオブジェクトはＲＡＩＤ以外に記憶できる。別の実施例においては、マスタ制御部２２４は、分散型ＲＡＩＤ制御部エレメントでもよい。別の実施例においては、マスタ制御部２２４は、多数のＲＡＩＤ、分散型ＲＡＩＤ、本明細書に記載されるその他の機能を具えることができる。
【０１２７】
一実施例においては、マスタ制御部２２４は、単一または冗長ネットワークマネージャ（例えば、スイッチ）を調整して、ルーティングを構築し、バンド幅使用（ｂａｎｄｗｉｄｔｈ  ｕｔｉｌｉｚａｔｉｏｎ）、フェイルオーバ（ｆａｉｌｏｖｅｒ）のバランスをとる。別の実施例においては、マスタ制御部２２４は、統合型アプリケーション特異的ロジック（ローカルバス２０６を介して）と、関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、接続されたアプリケーション特異的ロジック２５８またはロジック（外部システムバス２４０）および関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、リモートアプリケーション特異的ロジック（コンピュータネットワーク１１８を介して）および関連するドライバソフトウェアを調整する。別の実施例においては、マスタ制御部２２４は、ローカルバス２０６または外部バス接続ハードディスクドライブ（「ＨＤＤ」）ストレージ制御部を調整する。
【０１２８】
一実施例においては、マスタ制御部２２４は、１又はそれ以上のストレージ制御部２５４と通信し、ストレージデバイス／ソリッドステートストレージデバイス１０２は、ＳＣＳＩバス、インターネットＳＣＳＩバス、インターネットＳＣＳＩ（「ｉＳＣＳＩ」）、ファイバチャネルを介して接続されたストレージデバイスとして存在してもよい。その間、ストレージデバイス／ソリッドステートストレージデバイス１０２は、オブジェクトを自律的に管理することができ、オブジェクトファイルシステムまたは分散型オブジェクトファイルシステムとして存在してもよい。マスタ制御部２２４は、ピア制御部２５６および／またはアプリケーション特異的プロセッサ２５８によってアクセスすることができる。
【０１２９】
別の実施例においては、マスタ制御部２２４は、自律的に統合された管理制御部を調整し、ＦＰＧＡコードおよび／または制御部ソフトウェアを定期的に確認し、実行中（リセット）ＦＰＧＡコードを確認し、および／または、電源が入っている間（リセット）制御部ソフトウェアを確認し、外部リセット要求をサポートし、ウォッチドッグタイムアウトによるリセット要求をサポートし、電圧、電流、電力、温度ならびにその他の環境測定値および中断閾値設定をサポートする。別の実施例においては、マスタ制御部２２４は、不要データコレクションを管理し、再利用のための消去ブロックをフリーにする。別の実施例においては、マスタ制御部２２４は、摩耗レベルを管理する。別の実施例においては、マスタ制御部２２４によって、データストレージデバイス／ソリッドステートストレージデバイス１０２が、複数のバーチャルデバイスにパーティション化され、パーティションベースメディアの暗号化が可能となる。さらなる別の実施例においては、マスタ制御部２２４は、有利な複数ビットＥＣＣ修正部を有するソリッドステートストレージ制御部１０４をサポートする。当分野の当業者であれば、ストレージ制御部１５２において、または、より具体的には、ソリッドステートストレージデバイス１０２において、マスタ制御部２２４のその他の特性および機能を理解されたい。
【０１３０】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、動的ランダムメモリアレイ２３０および／または静的ランダムメモリアレイ２３２を制御するメモリ制御部２２８を具える。上述したように、メモリ制御部２２８は、独立しているか、または、マスタ制御部２２４と統合されている。通常、メモリ制御部２２８は、ＤＲＡＭ（動的ランダムメモリアレイ２３０）およびＳＲＡＭ（静的ランダムメモリアレイ２３２）など、いくつかのタイプの揮発メモリを制御する。他の例においては、メモリ制御部２２８は、電気的商況可能プログラム可能読み取り専用メモリ（「ＥＥＰＲＯＭ」）などのその他のメモリタイプを制御できる。他の実施例においては、メモリ制御部２２８は、２又はそれ以上のタイプを制御し、メモリ制御部２２８は、１以上の制御部を具えてもよい。一般的に、メモリ制御部２２８は、できるだけ多くのＳＲＡＭ２３２が実行可能であるように、ＤＲＡＭ２３０によって制御し、ＳＲＡＭ２３２を補助する。
【０１３１】
一実施例においては、オブジェクトインデックスは、メモリ２３０、２３２に記憶され、次いで、ソリッドステートストレージ１１０ｎのチャネルまたはその他の非揮発性メモリに定期的にオフロードされる。当分野の当業者であれば、動的メモリアレイ２３０、メモリ制御部２２８および静的メモリアレイ２３２のその他の使用および設定を理解されたい。
【０１３２】
一実施例においては、ソリッドステートストレージデバイス制御部２０２はＤＭＡ制御部２２６を具え、このＤＭＡ制御部２２６は、ストレージデバイス／ソリッドステートストレージデバイス１０２および１又はそれ以上の外部メモリ制御部２５０、関連する外部メモリアレイ２５２およびＣＰＵ２４８間のＤＭＡオペレーションを制御する。なお、外部メモリ制御部２５０および関連する外部メモリアレイ２５２は、ストレージデバイス／ソリッドステートストレージデバイス１０２の外部にあるので、外部と呼ぶ。さらに、ＤＭＡ制御部２２６も、ＮＩＣ２４４を介した要求デバイスおよび関連するＲＤＭＡ制御部２４６を用いてＲＤＭＡオペレーションを制御することができる。ＤＭＡおよびＲＤＭＡは、以下でより詳細に説明する。
【０１３３】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、管理バス２３６に接続された管理制御部２３４を具える。通常、管理制御部２３４は、環境メトリクスおよびストレージデバイス／ソリッドステートストレージデバイス１０２のステータスを管理する。管理制御部２３４は、管理バス２３６を介してデバイス温度、ファンスピード、電力供給設定などをモニタすることができる。管理制御部は、ＦＰＧＡコードおよび制御部ソフトウェアのストレージに関して、消去可能プログラム可能読み取り専用メモリ（「ＥＥＰＲＯＭ」）の読み取りおよびプログラムをサポートすることができる。通常、管理バス２３６は、ストレージデバイス／ソリッドステートストレージデバイス１０２内に各種コンポーネントを接続させる。管理制御部２３４は、ローカルバス２０６を介して、アラート、中断などと通信でき、システムバス２４０または他のバスに対して別のコネクションを具えることができる。一実施例においては、管理バス２３６は、インターインテグレイテッド回路（Ｉｎｔｅｒ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：「Ｉ２Ｃ」）である。当分野の当業者であれば、管理バス２３６によってストレージデバイス／ソリッドステートストレージデバイス１０２のコンポーネントに接続された、管理制御部２３４のその他の関連する機能および利用を理解される。
【０１３４】
一実施例においては、ソリッドステートストレージデバイス制御部２０２は、特定のアプリケーションにカスタマイズ可能な種々雑多なロジック２４２を具える。通常、ソリッドステートデバイス制御部２０２またはマスタ制御部２２４が、ＦＰＧＡまたはその他の設定可能制御部を用いて設定される場合、特定のアプリケーション、カスタマ要求、ストレージ要求に基づいて、カスタムロジックが含まれる。
【０１３５】
データパイプライン
図３は、本発明によるソリッドステートストレージデバイス１０２における書き込みデータパイプライン１０６および読み取りデータパイプライン１０８を有する、ソリッドステートストレージ制御部１０４の一実施例３００を示した概略ブロック図である。実施例３００は、データバス２０４、ローカルバス２０６およびバッファ制御２０８を具え、これらは、図２のソリッドステートストレージデバイス制御部２０２に関連して記載されたものと実質的に同等である。書き込みデータパイプラインは、パケッタイザ３０２およびエラー修正コード（「ＥＣＣ」）ジェネレータ３０４を具える。他の実施例においては、書き込みデータパイプラインは、インプットバッファ３０６、書き込み同期バッファ３０８、書き込みプログラムモジュール３１０、圧縮モジュール３１２、暗号化モジュール３１４、不要データコレクタバイパス３１６（読み取りデータパイプライン内の一部を有する）、メディア暗号化モジュール３１８、および、書き込みバッファ３２０を具える。読み取りデータパイプライン１０８は、読み取り同期バッファ３２８、ＥＣＣ修正モジュール３２２、デパケッタイザ（ｄｅｐａｃｋｅｔｉｚｅｒ）３２４、アライメントモジュール３２６およびアウトプットバッファ３３０を具える。他の実施例においては、読み取りデータパイプライン１０８は、メディア解読モジュール３３２、不要データコレクタバイパス３１６の一部、解読モジュール３３４、展開（ｄｅｃｏｍｐｒｅｓｓｉｏｎ）モジュール３３６および読み取りプログラムモジュール３３８を具えることができる。ソリッドステートストレージ制御部１０４は、さらに、制御およびステータスレジスタ３４０、制御キュー３４２、バンクインターリーブ制御部３４４、同期バッファ３４６、ストレージバス制御部３４８および多重チャネル（「ＭＵＸ」）３５０を具えることができる。ソリッドステート制御部１０４のコンポーネントおよび関連する書き込みデータパイプライン１０６および読み取りデータパイプライン１０８は、以下で説明する。他の実施例においては、同期ソリッドステートストレージ１１０を使用することができ、同期バッファ３０８、３２８を省くことができる。
【０１３６】
書き込みデータパイプライン
書き込みデータパイプライン１０６は、直接または間接的に別の書き込みデータパイプラインを介して、ソリッドステートストレージに書き込まれるデータ又はメタデータセグメントを受信する、パケッタイザ３０２を具え、ソリッドステートストレージ１１０用のサイズの１又はそれ以上のパケットを作成する。データまたはメタデータセグメントは、通常、オブジェクトの一部であるが、オブジェクト全体を具えることもできる。別の実施例においては、データセグメントは、データブロックの一部であるが、データブロック全体を具えることもできる。一般的に、オブジェクトは、コンピュータ１１２、クライアント１１４またはその他のコンピュータ若しくはデバイスから受信し、ソリッドステートストレージデバイス１０２またはコンピュータ１１２にストリーミングされるデータセグメントでソリッドステートストレージデバイス１０２に転送される。さらに、データセグメントは、データパーセルなど、別の名称として周知であるが、本明細書で規定されるように、オブジェクトまたはデータブロックの全てまたは一部を具える。
【０１３７】
各オブジェクトは、１又はそれ以上のパケットとして記憶される。各オブジェクトは、１又はそれ以上のコンテナパケットを有することができる。各パケットはヘッダを含む。ヘッダは、ヘッダタイプフィールドを具えることができる。タイプフィールドは、データ、オブジェクト属性、メタデータ、データセグメントデリミタ（マルチパケット）、オブジェクトストラクチャ、オブジェクトリンケージなどを具えることができる。ヘッダは、パケットに含まれるデータのバイト数など、パケットサイズに関する情報を具えることができる。パケットの長さは、パケットタイプによって構築可能である。ヘッダは、オブジェクトパケットの関係性を構築する情報を具えることができる。一例では、オブジェクト内のデータセグメント野市を識別するために、データパケットのオフセットを使用することができる。当分野の当業者であれば、パケッタイザ３０２によってデータに加えられるヘッダに含まれるその他の情報、および、データパケットに加えられるその他の情報を理解されたい。
【０１３８】
各パケットは、データまたはデータセグメントからのヘッダおよび可能であればデータを具えることができる。各パケットのヘッダは、パケットが属するオブジェクトにパケットに関連させる、関連情報を具える。例えば、ヘッダは、データパケットを形成していたデータセグメント、オブジェクトまたはデータブロックを示すオブジェクト識別子およびオフセットを具えることができる。さらに、ヘッダは、パケットを記憶するための、ストレージバス制御部によって使用される論理アドレスを具えることができる。また、ヘッダは、パケットに含まれるバイト数など、パケット寸法に関する情報を具えることができる。さらに、ヘッダは、データセグメントまたはオブジェクトを再構築するとき、データセグメントがオブジェクト内のその他のパケットに対して属しているところを識別するシークエンス番号を具えることができる。ヘッダは、ヘッダタイプフィールドを具えることができる。タイプフィールドは、データ、オブジェクト属性、メータデータ、データセグメントデリミタ（マルチパケット）、オブジェクトストラクチャ、オブジェクトリンケージなどを具えることができる。当分野当業者であれば、パケッタイザ３０２によってデータ又はメタデータに加えられるヘッダに含まれてもよいその他の情報、および、パケットに加えることができる情報を理解されたい。
【０１３９】
書き込みデータパイプライン１０６は、パケッタイザ３０２から受信する１又はそれ以上のパケットに関する１又はそれ以上のエラー修正コード（「ＥＣＣ」）を生成するＥＣＣジェネレータ３０４を具える。ＥＣＣジェネレータ３０４は、通常、エラー修正アルゴリズムを使用し、パケットとともに記憶されるＥＣＣを生成する。パケットとともに記憶されたＥＣＣは、通常、トランスミッションおよびストレージを介してデータに入ったエラーを検出し修正するために使用される。一実施例においては、パケットは、長さＮの未コード化ブロックとしてＥＣＣジェネレータ３０４内にストリーミングされる。長さＳのシンドロームが計算され、追加され、長さＮ＋Ｓの符号化ブロックとして出力される。Ｎ値およびＳ値は、特別な性能、効率および強力（ｒｏｂｕｓｔｎｅｓｓ）メトリクスを得るために選択されるアルゴリズムの特性に基づいている。好適な実施例においては、ＥＣＣブロックとパケットとの間において、固定された関係性はなく、パケットは、１以上のＥＣＣブロックを具えることができ、ＥＣＣブロックは、１以上のパケットを具えることができ、第１のパケットは、ＥＣＣブロック内のいずれかで終了（ｅｎｄ）してもよく、第２のパケットは、同一のＥＣＣブロック内において第１のパケットのエンドの後から開始することができる。好適な実施例においては、ＥＣＣアルゴリズムは、動的に修正されない。好適な実施例においては、データパケットとともに記憶されたＥＣＣは、３以上のビットにおけるエラーを修正するのに十分に強力である。
【０１４０】
有利には、シングルビット以上の修正またはダブルビット修正でさえ可能な強力なＥＣＣアルゴリズムを用いることで、ソリッドステートストレージ１１０の寿命を延長させることができる。例えば、ソリッドステートストレージ１１０内のストレージ媒体としてフラッシュメモリが使用される場合、フラッシュメモリは、消去サイクルにつきエラーなしで、約１００，０００回書き込み可能である。この利用制限は、強力なＥＣＣアルゴリズムを使用して拡張することができる。ＥＣＣジェネレータ３０４を有し、ソリッドステートストレージデバイス１０２に搭載されたＥＣＣ修正モジュール３２２を対応させることで、ソリッドステートストレージデバイス１０２は、エラーを内部で修正することができ、シングルビット修正など、弱いＥＣＣアルゴリズムを使用した場合よりも長い寿命を持つことができる。なお、その他の実施例においては、ＥＣＣジェネレータ３０４は、より弱いアルゴリズムを使用することができ、シングルビットまたはダブルビットエラーを修正できる。別の実施例においては、ソリッドステートストレージデバイス１１０は、容量を増大するためにマルチレベルセル（「ＭＬＣ」）フラッシュなど信頼性が低いストレージを具えてもよく、ストレージは、より強力なＥＣＣアルゴリズムなしで、十分な信頼性がなくてもよい。
【０１４１】
一実施例においては、書き込みパイプライン１０６は、入力バッファ３０６を具え、この入力バッファ３０６は、ソリッドステートストレージ１１０に書き込まれるデータセグメントを受信し、パケッタイザ３０２（またはより複雑な書き込みデータパイプライン１０６用のその他のステージ）など、書き込みデータパイプライン１０６の次のステージが準備され、次のデータセグメントを処理されるまでに、入ってくるデータセグメントを記憶する。通常、入力バッファ３０６によって、受信したレートデータセグメントと、適宜なサイズのデータバッファを用いて書き込みデータパイプライン１０６によって処理されるデータセグメントとの間の不一致を許容することができる。さらに、入力バッファ３０６によって、データバス２０４のオペレーション効率を改善するために、データバス２０４は、書き込みデータパイプライン１０６によって維持できるよりも大きなレートで、データを書き込みデータパイプライン１０６に転送するができる。通常、書き込みデータパイプライン１０６は、入力バッファ３０６を具えていないときは、バッファリング機能は、書き込みパイプライン１０６の外側ではあるがソリッドステートストレージ１０２内、ネットワークインターフェースカード（「ＮＩＣ」）内などコンピュータ１１２内、または、例えば、リモートダイレクトメモリアクセス（「ＲＤＡＭ」）を使用するときの別のデバイスなど、あらゆる場所で実行される。
【０１４２】
別の実施例においては、書き込みデータパイプライン１０６は、ソリッドステートストレージ１１０にパケットを書き込む前に、ＥＣＣジェネレータ３０４から受信したパケットをバッファリングする書き込み同期バッファ３０８を具えることができる。書き込み同期バッファ３０８は、ローカルクロックドメインとソリッドステートストレージクロックドメインとの間のバウンダリに配置され、クロックドメイン差を考慮するためにバッファリングする。他の実施例においては、同期型ソリッドステートストレージ１１０を使用することができ、同期用バッファ３０８、３２８を省くことができる。
【０１４３】
一実施例においては、書き込みデータパイプライン１０６は、さらに、メディア暗号化モジュール３１８を具えることができ、このモジュール３１８は、パケッタイザ３０２から直接または間接的に、１又はそれ以上のパケットを受信して、パケットをＥＣＣジェネレータ３０４にパケットを送る前に、ソリッドステートストレージデバイス１０２に固有の暗号化キーを用いて、１又はそれ以上のパケットを暗号化する。通常、ヘッダを含む完全なパケットは暗号化される。別の実施例においては、ヘッダは、暗号化されない。本明細書においては、暗号化キーは、ソリッドステートストレージ１１０を統合する、暗号化保護を必要とする具体例の外部で管理されるシークレット暗号化キーを意味することを理解されたい。メディア暗号化モジュール３１８および関連するメディア暗号化モジュール３３２は、ソリッドステートストレージ１１０に記憶されるデータの安全レベルを提供する。例えば、データが、メディア暗号化モジュール３１８で暗合されるとき、ソリッドステートストレージ１１０が、異なるソリッドステートストレージ制御部１０４、ソリッドステートストレージデバイス１０２またはコンピュータ１１２に接続される場合、ソリッドステートストレージ１１０の内容は、通常、大きな労力を要さずに、ソリッドステートストレージ１１０にデータを書き込む間に使用される同一の暗号化キーを使用せずに読み取ることができない。
【０１４４】
通常の実施例においては、ソリッドステートストレージデバイス１０２は、非揮発性ストレージの暗号化キーを記憶できず、暗号化キーへのいかなる外部からのアクセスもできない。暗号化キーは、初期渦中、ソリッドステートストレージ制御部１０４に設けられる。ソリッドステートストレージデバイス１０２は、暗号化キーとともに使用される、非シークレット暗号化ナンス（ｎｏｎｃｅ）を使用および記憶することができない。異なるナンスは、パケット毎に記憶できる。データセグメントは、暗号化アルゴリズムによる保護を改善するために、独自のナンスを有する複数のパケット間にスプリットできる。暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、ソリッドステートストレージ制御部１０４によって使用される暗号化キーを管理するその他のデバイスから受信することができる。別の実施例においては、ソリッドステートストレージ１１０、は、２又はそれ以上のパーティションを有し、ソリッドステートストレージ制御部１０４は、まるで２又はそれ以上のソリッドステートストレージ制御部１０４かのように動作し、各々は、ソリッドステートストレージ１１０内の１のパーティションで機能する。この実施例においては、独自のメディア暗号化キーは、各パーティションで使用できる。
【０１４５】
別の実施例においては、書き込みデータパイプライン１０６は、さらに、パケッタイザ３０２にデータセグメントを送る前に、直接または間接的に、入力バッファ３０６から受信するデータまたはデータセグメントを暗号化する暗号化モジュール３１４を具えることができ、データセグメントは、データセグメントともに受信した暗号化キーを用いて暗号化される。暗号化モジュール３１４は、メディア暗号化モジュール３１８とは異なり、このメディア暗号化モジュールにおいては、データを暗号化する暗号化モジュール３１８が使用する暗号化キーは、ソリッドステートストレージデバイス１０２内に記憶される全てのデータに共通でなくてもよいが、以下で記載するように、受信するデータセグメントとともに受信されるオブジェクトベースに基づいて変化してもよい。例えば、暗号化モジュール３１８によって暗号化されるべきデータセグメント用の暗号化キーは、データセグメントとともに受信され、データセグメントが属するオブジェクトを書き込むコマンドの一部として受信される。ソリッドステートストレージデバイス１０２は、暗号化キーとともに使用される各オブジェクトパケットにおいて、非シークレット暗号法（ｃｒｙｐｔｏｇｒａｐｈｉｃ）ナンスを使用して記憶することができる。異なるナンスは、パケット毎に記憶できる。データセグメントは、暗号化アルゴリズムによる保護を改善する目的のために、独自のナンスを有する複数のパケット間にスプリットできる。一実施例においては、メディア暗号化モジュール３１８によって使用されるナンスは、暗号化モジュール３１４によって使用されるものと同一である。
【０１４６】
暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、データセグメントを暗号化するのに使用される暗号化キーを保持したその他デバイスから受信することができる。一実施例においては、ソリッドステートストレージデバイス１０２、コンピュータ１１２、クライアント１１４、または、プライベートキーおよびパブリックキーを安全に転送して保護する産業上の標準的な方法を実行する能力を有するその他の外部エージェント、のうちの１つから、暗号化キーは、ソリッドステートストレージ制御部１０４に転送される。
【０１４７】
一実施例においては、暗号化モジュール３１８は、第１のパケットを暗号化し、第１の暗号化キーはこのパケットとともに受信され、また、第２のパケットを暗号化し、第２の暗号化キーは第２のパケットとともに受信される。別の実施例においては、暗号化モジュール３１８は、第１のパケットを暗号化し、第１の暗号化キーは、このパケットとともに受信され、第２のデータパケットを暗号化せず次のステージにパスする。有利には、ソリッドステートストレージデバイス１０２の書き込みデータパイプライン１０６に含まれる暗号化モジュール３１８によって、オブジェクト毎またはセグメント毎のデータ暗号化が、１のファイルシステムまたはその他のファイルシステムなしで、対応するオブジェクトまたはデータセグメントを記憶するのに使用される暗号化キーのトラックを、保持することが可能となる。各要求デバイス１５５または対応するキーマネージャは、要求デバイス１５５によって送られるオブジェクトまたはデータセグメントのみを暗号化するのに使用される暗号化キーを独立して管理することができる。
【０１４８】
別の実施例においては、書き込みデータパイプライン１０６は、パケッタイザ３０２にデータセグメントを送る前に、メタデータセグメントに関するデータを圧縮する圧縮モジュール３１２を具える。圧縮モジュール３１２は、通常、セグメントのストレージサイズを低減するのに当分野で周知な圧縮ルーチンを用いて、データまたはメタデータセグメントを圧縮する。例えば、データセグメントは、５１２のゼロからなるストリングを具える場合、圧縮モジュール３１２は、５１２のゼロを、５１２のゼロを示すコード又はトークンで置換でき、コードは、５１２のゼロがとるスペースよりも大幅に小型である。
【０１４９】
一実施例においては、圧縮モジュール３１２は、第１の圧縮ルーチンを用いて第１のセグメントを圧縮し、圧縮せずに第２のセグメントをパスする。別の実施例においては、圧縮モジュール３１２は、第１の圧縮ルーチンを用いて第１のセグメントを圧縮し、第２の圧縮ルーチンを用いて第２のセグメントを圧縮する。ソリッドステートストレージデバイス１０２内にフレキシビリティを有することに利点があり、クライアント１１４、または、ソリッドステートストレージデバイス１０２にデータを書き込むその他のデバイスは圧縮ルーチンを各々特定でき、あるいは、一方が圧縮ルーチンを特定することができ、他方がいずれの圧縮ルーチンを特定しなくてもよい。圧縮ルーチンの選択は、オブジェクトごと（ｐｅｒ  ｏｂｊｅｃｔ）のタイプまたはオブジェクトクラスベースに基づいたデフォルトの設定に従って選択されてもよい。例えば、特定のオブジェクトの第１のオブジェクトは、デフォルトの圧縮ルーチン設定を作動しないようにでき、同一オブジェクトクラスおよびオブジェクトタイプの第２のオブジェクトは、デフォルトの圧縮ルーチンを使用することができ、同一オブジェクトクラスおよびオブジェクトタイプの第３のオブジェクトは、圧縮を利用しなくてもよい。
【０１５０】
一実施例においては、書き込みデータパイプライン１０６は、不要データコレクションシステムのデータバイパスの一部として、読み取りデータパイプライン１０８からデータセグメントを受信する不要データコレクションバイパス３１６を具える。不要コレクションシステムは、通常、パケットがデリーション用に標識されるか、修正されるので、もはや有効でないパケットを標識し、修正されたデータが、異なるロケーションに記憶される。いくつかのポイントでは、不要データコレクションシステムは、ストレージの特定のセクションがリカバリ可能かを判定する。この判定は、入手可能ストレージ容量の不足、閾値に達した無効データの割合、有効なデータの統合、閾値に達したストレージセクションのエラー検出率、または、データ分散に基づいた性能の向上によってもよい。いくつかの因子は、不要データコレクションアルゴリズムによって考慮され、ストレージセクションをリカバリするときを判定する。
【０１５１】
ストレージセクションがリカバリのために標識されると、通常、そのセクション中の有効なパケットは再配置されなければならない。不要データコレクタバイパス３１６によって、パケットは、読み取りデータパイプライン１０８に読み取られ、次いで、ソリッドステートストレージ制御部１０４からルートアウトされずに、書き込みデータパイプライン１０６に直接転送される。好ましい実施例においては、不要データコレクタバイパス３１６は、ソリッドステートストレージデバイス１０２内で機能する自律的不要データコレクタシステムの一部である。これによって、ソリッドステートストレージデバイス１０２は、データを管理することが可能となり、データは、ソリッドステートストレージ１１０に亘って系統的に分散され、性能、データ信頼性が改善し、ソリッドステートストレージ１１０のいずれか１のロケーションまたはエリアの過剰使用または使用不足を回避し、ソリッドステートストレージ１１０の寿命を延長させる。
【０１５２】
不要データコレクタバイパス３１６は、セグメントを書き込みデータパイプライン１０６に挿入し、その他のセグメントは、クライアント１１６またはその他のデバイスによって書き込まれるように調整する。描かれた実施例においては、不要データコレクタバイパス３１６は、読み取りデータパイプライン１０８において、書き込みデータパイプライン１０６内のパケッタイザ３０２（ｐａｃｋｅｔａｉｚｅｒ）の前およびデパケッタイザ３２４（ｄｅｐａｃｋｅｔｉｚｅｒ）の後にあるが、読み取りおよび書き込みデータパイプライン１０６、１０８内のどこかに配置されていてもよい。不要データコレクタバイパス３１６は、ソリッドステートストレージ１１０内のストレージ効率を改善するために、バーチャルページの残りの部分を埋めるように、書き込みパイプライン１０６のフラッシュ中に使用されてもよく、これにより、不要データコレクションの頻度を低減することができる。
【０１５３】
一実施例においては、書き込みデータパイプライン１０６は、有効な書き込みオペレーション用のデータをバッファする書き込みバッファ３２０を具える。通常、書き込みバッファ３２０は、ソリッドステートストレージ１１０の少なくとも１つのバーチャルページを埋めるのに十分なパケット容量を具える。これによって、書き込みオペレーションは、中断せずに、ソリッドステートストレージ１１０にページデータの全体を送ることができる。書き込みデータパイプライン１０６の書き込みバッファ３２０と、読み取りデータパイプライン１０８内のバッファを、同一容量、または、ソリッドステートストレージ１１０内のストレージ書き込みバッファよりも大きい容量にサイジングすることで、書き込みおよび読み取りデータは、複数コマンドの代わりに、１つの書き込みコマンドが、ソリッドステートストレージ１１０にバーチャルページデータの全体を送るようにクラフト化されるので、より効率的になる。
【０１５４】
書き込みバッファ３２０が埋められる一方、ソリッドステートストレージ１１０は、その他の読み取りオペレーションに使用されてもよい。このことが有利であるのは、書き込みバッファがより小さいか、または、書き込みバッファのないその他のデバイスが、データがストレージ書き込みバッファに書き込まれ、ストレージ書き込みバッファ内にフローするデータがストールするとき、ソリッドステートストレージをタイアップできるからである。読み取りオペレーションは、ストレージ書き込みバッファ全体がうまり、プログラム化されるまで、ブロックされる。書き込みバッファのないシステムまたは書き込みバッファが小さいシステムに対する別のアプローチは、読み取り可能にするために、フルではないストレージ書き込みバッファをフラッシュすることである。ページを埋めるのに複数の書き込み／プログラムサイクルも必要となるので、これは非効率的である。
【０１５５】
バーチャルべージよりも大きなサイズの書き込みバッファ３２０を有する描かれた実施例に関して、多数のサブコマンドを具える１つの書き込みコマンドは、次いで、１のプログラムコマンドが続き、各ソリッドステートストレージエレメント２１６、２１８、２２０におけるストレージ書き込みバッファから、各ソリッドステートストレージエレメント２１６、２１８、２２０内の指定されたページに、ページデータを転送する。この技術は、バッファが埋まっているとき、データ信頼性および耐久性を低下させ、読み取りコマンドおよびその他のコマンドのための指定バンクを解放させることで周知である部分的なページプログラミングを省くことができる利点がある。
【０１５６】
一実施例においては、書き込みバッファ３２０は、ピンポンバッファであり、このバッファの片面が埋まり、次いで、適宜な時間での転送が指定され、ピンポンバッファのもう一方の面が埋まる。別の実施例においては、書き込みバッファ３２０は、バーチャルページデータセグメントよりも大きい容量を有する先入れ先出し（「ＦＩＦＯ」）レジスタを具える。当分野の当業者であれば、バーチャルページデータがデータをソリッドステートストレージ１１０に書き込む前に記憶させることができるその他の書き込みバッファ３２０設定を理解されたい。
【０１５７】
別の実施例においては、書き込みバッファ３２０は、バーチャルページよりも小さなサイズであり、ページ情報よりも少ない情報が、ソリッドステートストレージ１１０内のストレージ書き込みバッファに書き込まれる。実施例においては、書き込みデータパイプライン１０６内のストールが読み取りオペレーションを妨害するのを防ぐために、データは、１つのロケーションから不要データコレクションプロセスの一部としての別のロケーションへと移動される必要がある、不要データコレクションシステム用いてデータをキューイングする。書き込みデータパイプライン１０６においてデータストールが生じた場合、データは、不要データコレクタバイパス３１６を介して、書き込みバッファ３２０へと供給可能であり、次いで、ソリッドステートストレージ１１０内のストレージ書き込みバッファに供給され、データをプログラミングする前に、バーチャルページのページを埋める。この方法では、書き込みデータパイプライン１０６内のデータストールは、ソリッドステートストレージデバイス１０６から読み取りをストールしない。
【０１５８】
別の実施例においては、書き込みデータパイプライン１０６は、書き込みデータパイプライン１０６内の１又はそれ以上のユーザ定義可能機能を有する書き込みプログラムモジュール３１０を具える。書き込みプログラムモジュール３１０によって、ユーザは書き込みデータパイプライン１０６をカスタマイズすることができる。ユーザは、特定のデータ要求またはアプリケーションに基づいて書き込みデータパイプライン１０６をカスタマイズすることができる。ソリッドステーストレージ制御部１０４はＦＰＧＡである場合、ユーザは、カスタムコマンドおよび機能を有する書き込みデータパイプライン１０６を比較的容易にプログラムすることができる。さらに、ユーザは、書き込みプログラムモジュール３１０を使用し、ＡＳＩＣを用いたカスタム機能を具えるが、しかしながら、ＡＳＩＣをカスタマイズすることは、ＦＰＧＡを用いるよりも難しい。書き込みプログラムモジュール３１０は、バッファおよびバイパス機構を具えることができ、これらによって、第１のデータセグメントが書き込みプログラムモジュール３１０で実行され、第２のデータセグメントは、書き込みデータパイプライン１０６を介して繰り返すことができる。別の実施例においては、書き込みプログラムモジュール３１０は、ソフトウェアを介してプログラム可能なプロセッサコアを具えることができる。
【０１５９】
書き込みプログラムモジュール３１０は、入力バッファ３０６と圧縮モジュール３１２との間に示されているが、書き込みプログラムモジュール３１０は、書き込みデータパイプライン１０６内のあらゆる位置に存在でき、各種ステージ３０２−３２０中に分散可能である。さらに、独立してプログラムおよびオペレーション可能な各種ステート３０２−３２０中に分散される、複数の書き込みプログラムモジュール３１０があってもよい。さらに、ステージ３０２−３２０の順番は変更可能である。当分野の当業者であれば、特定のユーザ要求に基づいてステージ３０２−３２０の順番を作動可能に変更したものを理解されたい。
【０１６０】
読み取りデータパイプライン
読み取りデータパイプライン１０８は、データエラーがＥＣＣブロックにある場合に、要求されたパケットが、要求されたパケットの各ＥＣＣブロックで記憶されるＥＣＣを用いることによって、ソリッドステートストレージ１１０から受信されることを判定するＥＣＣ修正モジュール３２２を具える。次いで、ＥＣＣコレクションモジュール３２２は、エラーが存在している場合、要求されたパケットにおけるエラーを修正し、これらのエラーは、ＥＣＣを用いて修正可能である。例えば、ＥＣＣが、６ビットのエラーを検出できるが、３ビットのエラーしか修正できない場合、ＥＣＣ修正モジュール３２２は、エラー中の３ビットまで、要求されたパケットのＥＣＣブロックを修正する。ＥＣＣ修正モジュール３２２は、エラー中のビットを、正しい１またはゼロのステートに変更することで、エラー中のビットを修正し、要求されたデータパケットは、ソリッドステートストレージ１１０に書き込まれたときのものと同一であり、ＥＣＣは、パケット用に生成された。
【０１６１】
ＥＣＣが修正できるよりも多く、要求されたパケットがエラー中のビットを含んでいると、ＥＣＣ修正モジュール３２２が判定した場合、ＥＣＣ修正モジュール３２２は、要求されたパケットの破損したＥＣＣブロック中のエラーを修正できず、中断信号を送る。一実施例においては、ＥＣＣ修正モジュール３２２は、要求されたパケットがエラー状態にあることを示すメッセージを有する中断信号を送る。メッセージは、ＥＣＣ修正モジュール３２２がエラーを修正できず、エラーを修正するためのＥＣＣ修正モジュール３２２の能力がないことが示される。別の実施例においては、ＥＣＣ修正モジュール３２２は、要求されたパケットの破損ＥＣＣブロックを、中断信号および／またはメッセージとともに送る。
【０１６２】
好適な実施例においては、ＥＣＣ修正モジュール３２２によって修正不可能な要求されたパケットの、破損したＥＣＣブロックまたは破損したＥＣＣブロックの一部は、マスタ制御部２２４によって読み取られ、修正され、ＥＣＣ修正モジュール３２２に返され、読み取りデータパイプライン１０８によってさらに処理される。一実施例においては、要求されたパケットの破損したＥＣＣブロックの一部ブロックまたはその一部は、データを要求しているデバイスに送られる。要求デバイス１５５は、ＥＣＣブロックを修正することができ、バックアップまたはミラーコピーなど、別のコピーを使用してデータを置換することができ、次いで、要求されたデータパケットの置換データを使用するか、それを読み取りデータパイプライン１０８に返すことができる。要求デバイス１５５は、エラー中の要求されたパケットのヘッダ情報を使用し、破損した要求パケットを置換するか、または、パケットが属するオブジェクトを置換するかを必要とするデータを識別する。別の好適な実施例においては、ソリッドステートストレージ制御部１０４は、いくつかのタイプのＲＡＩＤを使用してデータを記憶し、破損したデータをリカバリすることができる。別の実施例においては、ＥＣＣコレクションモジュール３２２は、中断信号および／またはメッセージを送り、受信するデバイスは、要求されたデータパケットに関連した読み取りオペレーションができない。当分野の当業者であれば、要求されたパケットの１又はそれ以上のＥＣＣブロックが破損していて、ＥＣＣ修正モジュール３２２がエラーを修正できないことを判定したＥＣＣ修正モジュール３２２の結果として、とるべきその他の選択肢やアクションを理解されたい。
【０１６３】
読み取りデータパイプライン１０８は、デパケッタイザ３２４を具え、このデパケッタイザ３２４は、直接または間接的に、ＥＣＣ修正モジュール３２２から要求パケットのＥＣＣブロックを受信し、チェックして、１又はそれ以上のパケットヘッダを除去する。一実施例においては、ヘッダは、読み取りデータパイプライン１０８に送られたパケットが、要求されたパケットであることを確証するために使用可能なハッシュコードを具える。さらに、デパケッタイザ３２４は、パケッタイザ３０２によって加えられた要求パケットからヘッダを除去することができる。デパケッタイザ３２４は、所定のパケット上で機能しないように指令できるが、修正されずに先に送られる。例としては、再構築プロセスの途中で要求されるコンテナラベルであってもよく、ヘッダ情報は、オブジェクトインデックス再構築モジュール２７２によって要求される。さらなる例としては、ソリッドステートストレージデバイス１０２内で使用されるように設計された各種タイプのパケットを転送することを含む。別の実施例においては、デパケッタイザ３２４オペレーションは、パケットタイプに応じたものであってもよい。
【０１６４】
読み取りデータパイプライン１０８は、デパケッタイザ３２４からデータを受信し、不要なデータを除去するアライメントモジュール３２６を具える。一実施例においては、ソリッドステートストレージ１１０に送られる読み取りコマンドは、パケットデータをリカバリさせる。データを要求しているデバイスは、リカバリしたパケットの全てのデータを必要としなくてもよく、アライメントモジュール３２６は、不要なデータを除去する。リカバリしたページ内の全てのデータが要求されているデータである場合、アライメントモジュール３２６は、いずれのデータも除去しない。
【０１６５】
アライメントモジュール３２６は、次のステージにデータセグメントを送る前に、データセグメントを要求しているデバイスと互換性のある形態で、オブジェクトのデータセグメントとしてのデータをリフォーマットする。通常、データは、読み取りデータパイプライン１０８によって処理されるとき、データセグメントまたはパケットのサイズは、各種ステージで変更される。アライメントモジュール３２６は、受信したデータを使用して、データを、要求デバイス１５５に送り、応答を形成するのに加えられるのに適したデータセグメントにフォーマットする。例えば、第１のデータパケットの一部は、第２のデータパケットの一部のデータと組み合わせることができる。データセグメントが、要求デバイスによって要求されるデータよりも長い場合、アライメントモジュール３２６は、不要データを捨てることができる。
【０１６６】
一実施例においては、読み取りデータパイプライン１０８は、読み取りデータパイプライン１０８によって処理される前に、ソリッドステートストレージ１１０から読み取られる１又はそれ以上の要求パケットをバッファリングする読み取り同期バッファ３２８を具える。読み取り同期バッファ３２８は、ソリッドステートストレージクロックドメインと、ローカルバスクロックドメインとの間のバウンダリにあり、クロックドメインの差を考慮するバッファリングを行う。
【０１６７】
別の実施例においては、読み取りデータパイプライン１０８は、出力バッファ３３０を具え、この出力バッファ３３０は、アライメントモジュール３２６からの要求パケットを受信し、要求デバイスに転送される前にパケットを記憶する。出力バッファ３３０は、データセグメントが、読み取りデータパイプライン１０８のステージから受信されるときと、データセグメントが、ソリッドステートストレージ制御部１０４のその他部分または要求デバイスに転送されるときと、の間の差を考慮している。さらに、出力バッファ３３０によって、データバス２０４は、データバス２０４のオペレーション効率を改善するために、読み取りデータパイプライン１０８によって維持可能なレートよりも高いレートで、読み取りデータパイプライン１０８からのデータを受信できる。
【０１６８】
一実施例においては、読み取りデータパイプライン１０８は、メディア解読モジュール３３２を具え、このメディア解読モジュール３３２は、ＥＣＣ修正モジュール３２２からの１又はそれ以上の暗号化された要求パケットを受信し、１又はそれ以上の要求されたパケットをデパケッタイザ３２４に送る前に、ソリッドステートストレージデバイス１０２に固有の暗号化キーを用いて１又はそれ以上の要求されたパケットを解読する。通常、メディア解読モジュール３３２によってデータを解読するのに使用される暗号化キーは、メディア解読モジュール３１８によって使用される暗号化キーと同一である。別の実施例においては、ソリッドステートストレージ１１０は、２又はそれ以上のパーティションを具えていてもよく、ソリッドステートストレージ制御部１０４は、２又はそれ以上のソリッドステートストレージ制御部１０４であるかのように動作し、各々は、ソリッドステートストレージ１１０内の１つのパーティションで機能する。この実施例においては、固有のメディア暗号化キーは、各パーティションで使用されてもよい。
【０１６９】
別の実施例においては、読み取りデータパイプライン１０８は、解読モジュール３３４を具え、この解読モジュールは、データセグメントを出力バッファ３３０に送る前に、でパケッタイザ３２４によってフォーマットされるデータセグメントを解読する。データセグメントは、読み取り要求と共に受信された暗号化キーを用いて解読され、読み取り要求は、読み取り同期バッファ３２８が受信する要求パケットのリカバリを開始させる。解読モジュール３３４は、第１のパケットの読み取り要求とともに受信される暗号化キーを有する第１のパケットを解読でき、次いで、異なる暗号化キーを有する第２のパケットを解読することができ、または、解読せずに読み取りデータパイプライン１０８の次のステージに第２のパケットを送ることができる。通常、解読モジュール３３４は、メディア解読モジュール３３２が要求されたパケットを解読するのに使用するものとは異なる暗号化キーを使用してデータセグメントを解読する。パケットが非シークレット暗号化法ナンスで記憶されているときは、ナンスを、暗号化キーとともに使用して、データパケットを解読する。暗号化キーは、クライアント１１４、コンピュータ１１２、キーマネージャ、または、ソリッドステートストレージ制御部１０４によって使用される暗号化キーを管理するその他のデバイスから、受信できる。
【０１７０】
別の実施例においては、読み取りデータパイプライン１０８は、デパケッタイザ３２４によってフォーマットされたデータセグメントを展開する展開モジュール３３６を具える。好適な実施例においては、展開モジュール３３６は、１又はそれ以上のパケットヘッダおよびコンテナラベルに記憶された圧縮情報を使用し、圧縮モジュール３１２によってデータを圧縮するのに使用されたルーチンと相補的なルーチンを選択する。別の実施例においては、展開モジュール３３６によって使用される展開ルーチンは、展開しようとするデータセグメントを要求しているデバイスによって、指令される。別の実施例においては、展開モジュール３３６は、オブジェクト毎（ｐｅｒ  ｏｂｊｅｃｔ）のタイプまたはオブジェクトクラスベースのデフォルトの設定によって、展開ルーチンを選択する。第１のオブジェクトの第１のパケットは、デフォルトの展開ルーチンを無効にすることができ、同一オブジェクトクラスおよびオブジェクトタイプの第２のオブジェクトの第２のパケットは、度フォルトの展開ルーチンを使用することができ、同一オブジェクトクラスおよびオブジェクトタイプの第３のオブジェクトの第３のパケットは、展開を利用しなくてもよい。
【０１７１】
別の実施例においては、読み取りデータパイプライン１０８は、読み取りデータパイプライン１０８内の１又はそれ以上のユーザ定義可能機能を含む読み取りプログラムモジュール３３８を具える。読み取りプログラムモジュール３３８は、書き込みプログラムモジュール３１０と同様の特性を有し、ユーザは、読み取りデータパイプライン１０８にカスタム機能を加えることができる。読み取りプログラムモジュール３３８は、図３に示されるように配置可能であり、または、読み取りデータパイプライン１０８内で別のポジションに配置可能であり、あるいは、読み取りデータパイプライン１０８内の複数のロケーションの複数の部分を具えてもよい。さらに、独立して機能する読み取りデータパイプライン１０８内の複数のロケーション内に、複数の読み取りプログラムモジュール３３８があってもよい。当分野の当業者であれば、読み取りデータパイプライン１０８内に、読み取りプログラムモジュール３３８のその他の形態を理解されたい。書き込みデータパイプライン１０６に関して、読み取りデータパイプライン１０８のステージは、再配置可能であり、当分野の当業者であれば、読み取りデータパイプライン１０８内のその他の順番を理解されたい。
【０１７２】
ソリッドステートストレージ制御部１０４は、制御およびステータスレジスタ３４０と、関連する制御キュー３４２を具える。制御およびステータスレジスタ３４０および制御キュー３４２は、書き込みデータパイプライン１０６および読み取りデータパイプライン１０８内で処理されるデータに関連した、制御およびシークエンスコマンドならびにサブコマンドを用意にする。例えば、パケッタイザ３０２のデータセグメントは、ＥＣＣジェネレータに関連した制御キュー３４２において、１又はそれ以上の関連する制御コマンドまたは指令を具えることができる。データセグメントが、パケット化されるとき、指令またはコマンドのいくるかは、パケッタイザ３０２内で実行されてもよい。その他のコマンドまたは指令は、データセグメントから作成された新規に形成されたデータパケットが、次のステージに送られるとき、制御およびステータスレジスタ３４０を介して次の制御キュー３４２に送られる。
【０１７３】
コマンドまたは指令は、制御キュー３４２に同時にロードされてもよく、パケットは、書き込みデータパイプライン１０６に送られ、各パイプラインステージは、各々のパケットがそのステージで実行されるとき、適宜なコマンドまたは指令を引き出す。同様に、コマンドまたは指令は、制御キュー３４２に同時にロード可能であり、パケットは、読み取りデータパイプライン１０８から要求されており、各パイプラインステージは、各々のパケットがそのステージで実行されるときに、適宜なコマンドまたは指令を引き出す。当分野の当業者であれば、制御およびステータスレジスタ３４０、ならびに、制御キュー３４２のその他の特性および機能を理解されたい。
【０１７４】
ソリッドステートストレージ制御部１０４またはソリッドステートストレージデバイス１０２も、バンクインターリーブ制御部３４４、同期バッファ３４６、ストレージバス制御部３４８およびマルチプレクサ（「ＭＵＸ」）３５０を具えることができ、これらは、図４Ａおよび図４Ｂに関連して記載される。
【０１７５】
バンクインターリーブ
図４Ａは、本発明によるソリッドステートストレージ制御部１０４内のバンクインターリーブ制御部３４４の一実施例４００を示した概略ブロック図である。バンクインターリーブ制御部３４４は、制御およびステータスレジスタ３４０に接続され、ＭＵＸ３５０を介してストレージＩ／Ｏバス２１０およびストレージ制御バス２１２に接続され、ストレージ制御部３４８および同期バッファ３４６に接続され、これらは以下で説明する。バンクインターリーブ制御部は、ソリッドステートストレージ１１０内のバンク２１４に関して、読み取りエージェント４０２、書き込みエージェント４０４、消去エージェント４０６、管理エージェント４０８、読み取りキュー４１０ａ−ｎ、書き込みキュー４１２ａ−ｎ、消去キュー４１４ａ−ｎ、管理キュー４１６ａ−ｎを具え、バンク制御部４１８ａ−ｎ、バスアービター４２０、ステータスＭＵＸ４２２を具え、これらは以下で説明する。ストレージバス制御部３４８は、リマッピングモジュール４３０を有するマッピングモジュール４２４、ステータス取得モジュール４２６、および、ＮＡＮＤバス制御部４２８を具え、これらは以下で説明する。
【０１７６】
バンクインターリーブ制御部３４４は、バンクインタリーブ制御部３４４において、１又はそれ以上のコマンドを２又はそれ以上のキューに指令し、ソリッドステートストレージ１１０のバンク２１４中で、上記キューに記憶されたコマンドを調整し、その結果、第１のタイプのコマンドは１つのバンク２１４ａで実行され、第２のタイプのコマンドは第２のバンク２１４ｂで実行される。１又はそれ以上のコマンドは、コマンドタイプによってキューに分けられる。ソリッドステートストレージ１１０の各バンク２１４は、バンクインターリーブ制御部３４４内の関連するキューセットを有し、各々のキューセットは、各コマンドタイプ用のキューを具える。
【０１７７】
バンクインターリーブ制御部３４４は、ソリッドステートストレージ１１０のバンク２１４中で、キューに記憶されたコマンドの実行を調整する。例えば、第１のタイプのコマンドは、１つのバンク２１４ａで実行され、第２位のタイプのコマンドは、第２のバンク２１４ｂで実行される。通常、コマンドタイプおよびキュータイプは、読み取りコマンドおよび書き込みコマンド、ならびに、キュー４１０、４１２を具えるが、さらに、ストレージメディア特異的なその他のコマンドおよびキューを具えることができる。例えば、図４Ａに描かれる実施例において、消去キューおよび管理キュー４１４、４１６が含まれ、フラッシュメモリ、ＮＲＡＭ、ＭＲＡＭ、ＤＲＡＭ、ＰＲＡＭなどに適している。
【０１７８】
その他のタイプのソリッドステートストレージ１１０に関し、その他のタイプのコマンドおよび対応するキューも、本発明の範囲から逸脱することなく含むことができる。ＦＰＧＡソリッドステートストレージ制御部１０４のフレキシブルな性質は、ストレージメディアにおけるフレキシビリティを付与する。フラッシュメモリが、別のソリッドステートストレージタイプに変更された場合、バンクインターリーブ制御部３４４、ストレージバス制御部３４８、および、ＭＵＸ３５０は、データパイプライン１０６、１０８、および、その他のソリッドステートストレージ制御部１０４機能に重大な影響を与えずに、メディアタイプを収容できるように変更可能である。
【０１７９】
図４Ａに描かれた実施例においては、バンクインターリーブ制御部３４４は、各バンク２１４に関して、ソリッドステートストレージ１１０からのデータを読み取るための読み取りキュー４１０、ソリッドステートストレージ１１０に対する書き込みコマンド用の書き込みキュー４１２、ソリッドステートストレージ中の消去ブロックを消去するための消去キュー４１４、管理コマンド用の管理キュー４１６を具える。さらに、バンクインターリーブ制御部３４４は、関連する読み取り、書き込み、消去および管理エージェント４０２、４０４、４０６、４０８を具える。別の実施例においては、制御およびステータスレジスタ３４０ならびに制御キュー３４２、または、同様のコンポーネントは、バンクインターリーブ制御部３４４なしで、ソリッドステートストレージ１１０のバンク２１４に送られるデータ用コマンドをキューイングする。
【０１８０】
エージェント４０２、４０４、４０６、４０８は、一実施例においては、特定のバンク２１４ａ用に設計された適宜なタイプのコマンドを、バンク２１４ａの正しいキューに指令する。例えば、読み取りエージェント４０２は、バンク−１  ２１４ｂ用の読み取りコマンドを受信し、読み取りコマンドをバンク−１読み取りキュー４１０ｂに指令できる。書き込みエージェント４０４は、ソリッドステートストレージ１１０のバンク−０  ２１４ａにおけるロケーションにデータを書き込むための書き込みコマンドを受信し、次いで、下記コマンドをバンク−０書き込みキュー４１２ａに送ることができる。同様に、消去エージェント４０６は、バンク−１  ２１４ｂの消去ブロックを消去する消去コマンドを受信し、次いで、消去コマンドをバンク−１消去キュー４１４ｂに送ることができる。管理エージェント４０８は、通常、バンク−０  ２１４ａなど、バンク２１４の設定レジスタを読み取るためのリセットコマンドまたは要求など、管理コマンド、ステータス要求など、を受信する。管理エージェント４０８は、管理コマンドをバンク−０管理キュー４１６ａに送る。
【０１８１】
さらに、エージェント４０２、４０４、４０６、４０８は、通常、キュー４１０、４１２、４１４、４１６のステータスをモニタし、ステータス、または、キュー４１０、４１２、４１４、４１６がフル、ほぼフル、機能しないときの中断信号またはメッセージを送る。一実施例においては、エージェント４０２、４０４、４０６、４０８は、コマンドを受信し、関連するサブコマンドを作成する。一実施例においては、エージェント４０２、４０４、４０６、４０８は、制御及びステータスレジスタ３４０を介したコマンドを受信し、キュー４１０、４１２、４１４、４１６に送られる関連サブコマンドを作成する。当分野の当業者であれば、エージェント４０２、４０４、４０６、４０８のその他の機能も理解されたい。
【０１８２】
キュー４１０、４１２、４１４、４１６は、通常、コマンドを受信し、ソリッドステートストレージバンク２１４に送られる必要があるまでコマンドを記憶する。通常の実施例においては、キュー４１０、４１２、４１４、４１６は、先入れ先出し（「ＦＩＦＯ」）レジスタまたはＦＩＦＯとして機能する同様のコンポーネントである。別の実施例においては、キュー４１０、４１２、４１４、４１６は、データにマッチする順番、重要度の順番またはその他の基準でコマンドを記憶する。
【０１８３】
バンク制御部４１８は、通常、キュー４１０、４１２、４１４、４１６からのコマンドを受信し、適宜なサブコマンドを作成する。例えば、バンク−０書き込みキュー４１２ａは、ページデータパケットをバンク−０  ２１４ａに書き込むコマンドを受信することができる。バンク−０制御部４１８ａは、適宜な時間で書き込みコマンドを受信し、１又はそれ以上の書き込みコマンドを作成することができ、書き込みバッファ３２０に記憶される各データパケットは、バンク−０  ２１４ａに書き込まれる。例えば、バンク−０制御部４１８ａは、バンク０  ２１４ａおよびソリッドステートストレージアレイ２１６を確認するコマンドを作成し、１又はそれ以上のデータパケットを書き込む適宜なロケーションを選択肢、ソリッドステートストレージメモリアレイ２１６内の入力バッファをクリアし、１又はそれ以上のデータパケットを入力バッファに転送し、入力バッファを選択したロケーションにプログラムし、データが正しくプログラムされたことを検証し、プログラムに破損がある場合、１又はそれ以上のマスタ制御部の中断を行い、同一の物理ロケーションへの書き込みを再度行い、異なる物理ロケーションへの書き込みを行う。さらに、例示の書き込みコマンドとともに、ストレージバス制御部３４８は、１又はそれ以上のコマンドを、ストレージＩ／Ｏバス２１０ａ用の第１の物理アドレスにマップされたコマンドの論理アドレス、および、ストレージＩ／Ｏバス２１０ｂ用の第２の物理アドレスにマップされたコマンドの論理アドレスで、ストレージＩ／Ｏバス２１０ａ−ｎの各々に複製し、さらなる説明は以下で行う。
【０１８４】
通常、バスアービター４２０は、バンク制御部４１８中から選択され、バンク制御部４１８内の出力キューからサブコマンドを引き出し、バンク２１４の性能を最適化するように、これらをシークエンス状態でストレージバス制御部３４８に送る。別の実施例においては、バスアービター４２０は、高レベル中断信号に応答し、通常の選択基準を修正することができる。別の実施例においては、マスタ制御部２２４は、制御およびステータスレジスタ３４０を介してバスアービター４２０を制御することができる。当分野の当業者であれば、バスアービター４２０が、バンク制御部４１８からソリッドステートストレージ１１０へのコマンドシークエンスを制御しインターリーブすることができるその他の手段を理解されたい。
【０１８５】
バスアービター４２０は、通常、適宜なコマンドと、コマンドタイプが必要とされるときは、バンク制御部４１８の関連データと、の選択を調整し、コマンド及びデータをストレージバウ制御部３４８に送る。一般的に、バスアービター４２０は、さらに、適宜なバンク２１４を選択するのに、ストレージ制御バス２１２にコマンドを送る。フラッシュメモリ、または、非同期式２方向性シリアルストレージＩ／Ｏバス２１０を有するその他のソリッドステートストレージ１１０の場合、１つのコマンド（制御情報）またはデータセットのみが、同時に転送可能である。例えば、書き込みコマンドまたはデータが、ストレージＩ／Ｏバス２１０のソリッドステートストレージ１１０に転送され、読み取りコマンド、データが読み取られるときは、消去コマンド、管理コマンドまたはその他のステータスコマンドは、ストレージＩ／Ｏバス２１０に転送できない。
【０１８６】
例えば、バンク−０の書き込みオペレーション中、バスアービター４２０は、バンク−０制御部４１８ａを選択し、この制御部４１８ａは、ストレージバス制御部３４８に次のシークエンスを実行させるキューのトップに書き込みコマンドまたは一連の書き込みサブコマンドを有することができる。バスアービター４２０は、書き込みコマンドをストレージバス制御部３４８に送り、ストレージ制御バス２１２を介してバンク−０  ２１４ａを選択することによって、書き込みコマンドをセットアップし、バンク−０  ２１４ａに関連したソリッドステートストレージエレメント１１０の入力バッファをクリアするコマンドを送り、バンク−０  ２１４ａに関連したソリッドステートストレージエレメント２１６、２１８、２２０のステータスを確認するコマンドを送る。次いで、ストレージバス制御部３４８は、ストレージＩ／Ｏバス２１０に書き込みサブコマンドを転送し、論理消去ブロックアドレスからマッピングされるときに、個々の物理的消去ソリッドステートストレージエレメント２１６ａ−ｍ用の論理消去ブロックのアドレスを含む、物理アドレスを具える。次いで、ストレージバス制御部３４８は、ＭＵＸ３５０を介して、書き込み同期バッファ３０８をストレージＩ／Ｏバス２１０へと書き込みバッファ３２０をマルチプレックス（ＭＵＸ）し、書き込みデータを適宜なページにストリーミングする。ページがフルのとき、次いで、ストレージバス制御部３４８は、バンク−０  ２１４ａに関連するソリッドステートストレージエレメント２１６ａ−ｍに、入力バッファを、ソリッドステートストレージエレメント２１６ａ−ｍ内のメモリセルにプログラムさせる。最終的に、ストレージバス制御部３４８は、ステータスを確認して、ページが正しくプログラムされていることを確かめる。
【０１８７】
読み取りオペレーションは、上述の書き込み例と同様である。読み取りデータパイプライン１０８中、通常、バスアービター４２０またはバンクインターリーブ制御部３４４のその他のコンポーネントは、データと、関連するステータス情報を受信し、データを読み取りデータパイプライン１０８に送り、ステータス情報を制御およびステータスレジスタ３４０に送る。通常、バスアービタ−４２０からストレージバス制御部３４８に送られる読み取りデータコマンドは、ＭＵＸ３５０に、ストレージＩ／Ｏバス２１０の読み取りデータを読み取りデータパイプライン１０８にゲート制御し、ステータスＭＵＸ４２２を介してステータス情報を適宜な制御及びステータスレジスタ３４０に送る。
【０１８８】
バスアービタ−４２０は、各種コマンドタイプとデータアクセスモードを調整し、適宜なコマンドタイプまたは関連するデータのみが、所定時間に、バスに存在する。バスアービタ−４２０が、書き込みコマンドを選択しており、書き込みサブコマンドと関連するデータとが、ソリッドステートストレージ１１０に書き込まれているとき、バスアービタ−４２０は、ストレージＩ／Ｏバス２１０のその他コマンドタイプを許可しない。有利には、バスアービター４２０は、バンク２１４ステータスに関して受信したステータス情報とともに、予測したコマンド実行時間など、タイミング情報を使用し、バスのアイドル時間を最小化または省く目的として、バスの各種コマンドの実行を調整する。
【０１８９】
バスアービター４２０を介してマスタ制御部２２４は、通常、ステータス情報とともに、キュー４１０、４１２、４１４、４１６に記憶されたコマンドの予測完了時間を使用し、コマンドに関連したサブコマンドが１つのバンク２１４ａで実行されているとき、他のコマンドの他のサブコマンドが、他のバンク２１４ｂ−ｎで実行される。１つのコマンドが、２１４ａで完全に実行されるとき、バスアービター４２０は、別のコマンドをバンク２１４ａに指令する。バスアービタ−４２０は、キュー４１０、４１２、４１４、４１６に記憶されたコマンドと、キュー４１０、４１２、４１４、４１６に記憶されていない他のコマンドを調整することができる。
【０１９０】
例えば、消去コマンドは、ソリッドステートストレージ１１０内の消去ブロック群を消去するように送信可能である。消去コマンドは、書き込みまたは読み取りコマンドよりも１０乃至１０００倍以上実行され、プログラムコマンドよりも１０乃至１００倍以上実行される。Ｎバンク２１４に関して、バンクインターリーブ制御部３４４は、消去コマンドをＮコマンドにスプリットすることができ、各々は、バンク２１４ａのバーチャル消去ブロックを消去する。バンク−０  ２１４ａが消去コマンドを実行している間、バスアービタ−４２０は、その他のバンク２１４ｂ−ｎで実行されるその他のコマンドを選択することができる。さらに、バスアービタ−４２０は、ストレージバス制御部３４８、マスタ制御部２２４など、他のコンポーネントとともに機能することができ、バス間のコマンド実行を調整する。バスアービター４２０、バンク制御部４１８、キュー４１０、４１２、４１４、４１６およびバンクインターリーブ制御部３４４のエージェント４０２、４０４、４０６、４０８を使用してコマンド実行を調整することで、バンクインターリーブ機能なしで、その他のソリッドステートストレージシステムを介して、大幅に性能を向上させることができる。
【０１９１】
一実施例においては、ソリッドステートストレージ制御部１０４は、ソリッドステートストレージ１１０のストレージエレメント２１６、２１８、２２０の全てをサーブする１つのバンクインターリーブ制御部３４４を具える。別の実施例においては、ソリッドステート制御部１０４は、ストレージエレメント２１６ａ−ｍ、２１８ａ−ｍ、２２０ａ−ｍの各列に対するバンクインターリーブ制御部３４４を具える。例えば、１つのバンクインターリーブ制御部３４４は、ストレージエレメントＳＳＳ０．０−ＳＳＳ０．Ｎ２１６ａ、２１８ａ、２２０ａの一列をサーブし、第２のバンクインターリーブ制御部３４４は、ストレージエレメントＳＳＳ１．０−ＳＳＳ１．Ｎ２１６ｂ、２１８ｂ、２２０ｂなどの第２の列をサーブする。
【０１９２】
図４Ｂは、本発明によるソリッドステートストレージ制御部のバンクインターリーブ制御部の代替実施例４０１を示した概略ブロック図である。図４Ｂに示された実施例に描かれたコンポーネント２１０、２１２、３４０、３４６、３４８、３５０、４０２−４３０は、図４Ａに関連して描かれたバンクインターリーブ装置４００と実質的に同じであるが、ただし、各バンク２１４が、１つのキュー４３２ａ−ｎを具えて、バンク（例えば、バンク０  ２１４ａ）用の読み取りコマンド、書き込みコマンド、消去コマンド、管理コマンドが、バンク２１４ａの１つのキュー４３２ａに対して指令される点を除く。一実施例においては、キュー４３２は、ＦＩＦＯである。別の実施例においては、キュー４３２は、キュー４３２が記憶されている順番とは別の順番で、キュー４３２から引き出されたコマンドを有することができる。別の代替実施例においては（図示せず）、読み取りエージェント４０２、書き込みエージェント４０４、消去エージェント４０６および管理エージェント４０８は、適宜なキュー４３２ａ−ｎに対して、１つのエージェント割当コマンドに組み込むことができる。
【０１９３】
別の代替実施例においては（図示せず）、コマンドは、１つのキューに記憶され、これらのコマンドは、記憶された方法以外の順番でキューから引き出し可能であり、バンクインターリーブ制御部３４４は、１つのバンク２１４ａでコマンドを実行でき、他のコマンドは、残りのバンク２１４ｂ−ｎで実行される。当分野の当業者であれば、他のコマンドが他のバンク２１４ｂ−ｎで実行されている間に、１つのバンク２１４ａでコマンドを実行できる、他のキュー設定およびタイプを容易に理解されたい。
【０１９４】
ストレージ特異的コンポーネント
ソリッドストレージ制御部１０４は、同期バッファ３４６を具え、この同期バッファ３４６は、ソリッドステートストレージ１１０から送られて受信したコマンドおよびステータスメッセージをバッファリングする。同期バッファ３４６は、ソリッドステートストレージクロックドメインとローカルバスクロックドメインとの間のバウンダリに配置され、クロックドメインの差を考慮するバッファリングを提供する。同期バッファ３４６、書き込み同期バッファ３０８および読み取り同期バッファ３２８は、独立しており、同時に機能して、データ、コマンド、ステータスメッセージなどをバッファリングすることができる。好適な実施例においては、同期バッファ３４６は、クロックドメインをクロスする信号が最小のところに配置される。当分野の当業者であれば、クロックドメイン間の同期は、設計事項のいくつかを最適にするために、ソリッドステートストレージデバイス１０２内の他のロケーションに自由に移動可能であることを理解されたい。
【０１９５】
ソリッドステートストレージ制御部１０４は、ストレージバス制御部３４８を具え、このストレージバス制御部３４８は、ソリッドステートストレージ１１０に送られ、読み取られるデータに関するコマンドと、ソリッドステートストレージ１１０のタイプに基づいてソリッドステートストレージ１１０から受信したステータスメッセージとを解釈し翻訳する。例えば、ストレージバス制御部３４８は、性能特性の異なるストレージ、製造者の異なるストレージなど、異なるタイプのストレージに対する異なるタイミング要求を具えることができる。さらに、ストレージバス制御部３４８は、ストレージ制御バス２１２に制御コマンドを送る。
【０１９６】
好適な実施例においては、ソリッドステートストレージ制御部１０４は、ＭＵＸ３５０を具え、ＭＵＸ３５０は、マルチプレクサ３５０ａ−ｎのアレイを具え、各マルチプレクサは、ソリッドステートストレージアレイ１１０の列の専用となる。例えば、マルチプレクサ３５０ａは、ソリッドステートストレージエレメント２１６ａ、２１８ａ、２２０ａに関連している。ＭＵＸ３５０は、書き込みデータパイプライン１０６からのデータと、ストレージＩ／Ｏバス２１０を介してストレージバス制御部３４８からソリッドステートストレージ１１０へのコマンドをルーティングし、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０から読み取りデータパイプライン１０６へのデータおよびステータスメッセージをルーティングし、ストレージバス制御部３４８、同期バッファ３４６およびバンクインターリーブ制御部３４４を介して制御およびステータスレジスタ３４０にルーティングする。
【０１９７】
好適な実施例においては、ソリッドステートストレージ制御部１０４は、ソリッドステートストレージエレメントの各列（例えば、ＳＳＳ０．１  ２１６ａ、ＳＳＳ０．２  ２１８ａ、ＳＳＳ０．Ｎ  ２２０ａ）用のＭＵＸ３５０を具える。ＭＵＸ３５０は、書き込みデータパイプライン１０６からのデータと、ストレージＩ／Ｏバス２１０を介してソリッドステートストレージ１１０へ送られるコマンドをコンバインし、コマンドから読み取りデータパイプライン１０８によって処理されるようにデータを分割する。書き込みバッファ３２０に記憶されたパケットは、ソリッドステートストレージエレメントの各列（ＳＳＳｘ．０からＳＳＳｘ．Ｎ２１６、２１８、２２０）用の書き込み同期バッファ３０８から、ソリッドステートストレージエレメントの各列（ＳＳＳｘ．０からＳＳＳｘ．Ｎ２１６、２１８、２２０）用のＭＵＸ３５０へと、書き込みバッファ３２０からのバスに指令される。コマンドおよび読み取りデータは、ストレージＩ／Ｏバス２１０からＭＵＸ３５０によって受信される。さらに、ＭＵＸ３５０は、ステータスメッセージをストレージバス制御部３４８に指令する。
【０１９８】
ストレージバス制御部３４８は、マッピングモジュール４２４を具える。マッピングモジュール４２４は、消去ブロックの１又はそれ以上の物理アドレスに消去ブロックの論理アドレスをマッピングする。例えば、ブロック２１４ａあたり２０のストレージエレメント（例えば、ＳＳＳ０．０からＳＳＳ  Ｍ．０  ２１６）のアレイを有するソリッドステートストレージ１１０は、ストレージエレメントあたり１の物理アドレスで、消去ブロックの２０の物理アドレスにマッピングされる特定の消去ブロック用論理アドレスを具えることができる。ストレージエレメントが同時にアクセスされるので、ストレージエレメント２１６ａ、２１８ａ、２２０ａの列の各ストレージエレメントにおける同一ポジションの消去ブロックは、物理アドレスを共有するであろう。列中の全ての消去ブロックではなく（例えば、ストレージエレメントＳＳＳ  ０．０  ０．１、、、０．Ｎ  ２１６ａ、２１８ａ、２２０ａにおいて）、１の消去ブロックを選択するために、１つのバンク（この場合、バンク−０  ２１４ａ）が選択される。
【０１９９】
このような消去ブロックに関する論理−物理マッピングは、１つの消去ブロックが損傷またはアクセス不能になった場合、マッピングが別の消去ブロックにマッピングされるように変更可能であるので、有益である。これによって、１つのエレメントの消去ブロックが失敗したとき、バーチャル消去ブロック全体を損失するロスを緩和することができる。再マッピングモジュール４３０は、消去ブロックの論理アドレスのマッピングを、バーチャル消去ブロックの１又はそれ以上の物理アドレス（ストレージエレメントのアレイに亘って分散させる）に変更する。例えば、バーチャル消去ブロック１は、ストレージエレメントＳＳＳ  ０．０  ２１６ａの消去ブロック１、ストレージエレメントＳＳＳ１．０  ２１６ｂの消去ブロック１、．．．、ストレージエレメントＭ．０  ２１６ｍの消去ブロック１にマッピング可能であり、バーチャル消去ブロック２は、ストレージエレメントＳＳＳ０．１  ２１８ａの消去ブロック２、ストレージエレメントＳＳＳ１．１  ２１８ｂの消去ブロック２、．．．、ストレージエレメントＭ．１  ２１８ｍの消去ブロック２などにマッピング可能である。
【０２００】
ストレージエレメントＳＳＳ０．０  ２１６ａの消去ブロック１が損傷し、摩耗などによるエラーが生じるか、何らかの理由で利用できない場合、再マッピングモジュールは、バーチャル消去ブロック１の消去ブロックをポインティングした論理アドレス用に、論理−物理マッピングを変更することができる。ストレージエレメントＳＳＳ０．０  ２１６ａのスペア消去ブロック（消去ブロック２２１と呼ぶ）が利用可能であり、その時点でマッピングされていない場合、再マッピングモジュールは、ストレージエレメントＳＳＳ０．０  ２１６ａの消去ブロック２２１をポインティングするために、バーチャル消去ブロック１の消去ブロックのマッピングを変更でき、ストレージエレメントＳＳＳ１．０  ２１６ｂの消去ブロック１、ストレージエレメントＳＳＳ２．０（図示せず）の消去ブロック１、．．．、ストレージエレメントＭ．０  ２１６ｍの消去ブロック１のポインティングを継続する。マッピングモジュール４２４または再マッピングモジュール４３０は、上述した順番（ストレージエレメントの消去ブロック１に対してバーチャル消去ブロック１、ストレージエレメントの消去ブロック２に対してバーチャル消去ブロック２）で消去ブロックをマッピングでき、あるいは、その他の基準に基づいた別の順番でストレージエレメント２１６、２１８、２２０の消去ブロックをマッピングできる。
【０２０１】
一実施例においては、消去ブロックは、アクセス時間によってグループ分け可能である。データを特定消去ブロックのページにプログラム（書き込み）するなど、コマンドを実行する時間を意味する、アクセス時間によるグループ分けは、コマンド完了を平均化（ｌｅｖｅｌ）することができ、バーチャル消去ブロックの消去ブロックに亘って実行されるコマンドは、最低の消去ブロックによって制限されることはない。他の実施例においては、消去ブロックは、摩耗レベル、健全（ｈｅａｌｔｈ）などによってグループ分け可能である。当分野の当業者であれば、消去ブロックをマッピングまたは再マッピングするときに考慮すべきその他のファクタを理解されたい。
【０２０２】
一実施例においては、ストレージバス制御部３４８は、ステータス獲得モジュール４２６を具え、このステータス獲得モジュール４２６は、ソリッドステートストレージ１１０からのステータスメッセージを受信し、ステータスメッセージをステータスＭＵＸ４２２に送る。別の実施例においては、ソリッドステートストレージ１１０は、フラッシュメモリであり、ストレージバス制御部３４８は、ＮＡＮＤバス制御部４２８を具える。ＮＡＮＤバス制御部４２８は、読み取りデータパイプライン１０６および書き込みデータパイプライン１０８からソリッドステートストレージ１１０内の正しいロケーションにコマンドを送り、フラッシュメモリの特性に基づいてコマンド実行のタイミングを調整する。ソリッドステートストレージ１１０が別のタイプのソリッドステートストレージである場合、ＮＡＮＤバス制御部４２８は、ストレージタイプ特異的なバス制御部によって置換できる。当分野の当業者であれば、ＮＡＮＤバス制御部４２８のその他の機能も理解されたい。
【０２０３】
フローチャート
図５は、本発明によるインサーバＳＡＮ用の方法野市実施例を示した概略的フローチャート図である。この方法５００がスタートし（５５２）、ストレージ通信モジュール１６２が、第１のストレージ制御部１５２ａと、第１のサーバ１１２ａの外部にある少なくとも１つのデバイスとの間の通信を促進する（５５４）。第１のストレージ制御部１５２ａと上記外部デバイスとの間の通信は、第１のサーバ１１２ａから独立している。第１のストレージ制御部１１２ａは、第１のサーバ１１２ａ内にあり、第１のストレージ制御部１５２ａは、少なくとも１つのストレージデバイス１５４ａを制御する。第１のサーバ１１２ａは、第１のサーバ１１２ａおよび第１のストレージ制御部１５２ａとともに配置されるネットワークインターフェース１５６ａを具える。インサーバＳＡＮモジュール１６４は、ストレージ要求に応答し（５５６）、方法５００は終了する（５５８）。インサーバＳＡＮモジュールは、ネットワークプロトコルおよび／またはバスプロトコルを使用してストレージ要求に応答する（５５６）。インサーバＳＡＮモジュール１６４は、第１のサーバ１１２ａから独立したストレージ要求に応答し（５５６）、サービス要求は、クライアント１１４、１１４ａで受信される。
【０２０４】
本発明は、本発明の意図または本質的な特徴から逸脱することなく、その他の特定の形態で実施できる。記載された実施例は、例示のみを目的とするものであって、限定を意図しない。従って、本発明の範囲は、上述の説明ではなく、添付の請求の範囲によって規定される。請求の範囲の意味するもの及び同等物となる変更の全ては、本発明の範囲内に含まれる。
【図１Ａ】
2010515116.tif 000003
【図１Ｂ】
2010515116.tif 000004
【図１Ｃ】
2010515116.tif 000005
【図２Ａ】
2010515116.tif 000006
【図２Ｂ】
2010515116.tif 000007
【図３】
2010515116.tif 000008
【図４Ａ】
2010515116.tif 000009
【図４Ｂ】
2010515116.tif 000010
【図５】
2010515116.tif 000011
【手続補正書】
【提出日】平成20年11月6日(2008.11.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用装置において、
第１のサーバ内の少なくとも１つの第１のストレージ制御部であって、この第１のストレージ制御部が、１又はそれ以上の第１のストレージデバイスを制御し、１又はそれ以上の前記第１のストレージデバイスは前記第１のサーバ内に存在し、各々が非揮発性ソリッドステートストレージデバイスを具え、前記第１のサーバは、この第１のサーバおよび前記第１のストレージ制御部によって共有されるネットワークインターフェースを具える、第１のストレージ制御部と、
前記第１のサーバ内に配置された第１のクライアントを、この第１のクライアントからのストレージ要求に応答するために、ダイレクト接続ストレージデバイス（「ＤＡＳ」）デバイスとして１又はそれ以上の前記第１のストレージデバイスの少なくとも１つにアクセス可能とする、ＤＡＳモジュールと、
前記第１のストレージ制御部と、前記第１のサーバの外部にある少なくとも１つの第２のサーバとの間の通信を促進するストレージ通信モジュールであって、前記第１のストレージ制御部と、前記第１のクライアントから独立している前記第２のサーバとの間で通信がなされ、前記第２のサーバが、少なくとも１つの第２のストレージ制御部を具え、前記少なくとも１つの第２のストレージ制御部は、前記第２のサーバにある１又はそれ以上の第２のストレージデバイスを制御し、前記１又はそれ以上の第２のストレージデバイスの各々が、非揮発性ソリッドステートストレージデバイスを具え、前記第２のサーバ内に配置されたクライアントが、前記第２のサーバ内に配置された前記クライアントからのストレージ要求に応答するために、ＤＡＳデバイスとして１又はそれ以上の第２のストレージデバイスの少なくとも１つにアクセスする、ストレージ通信モジュールと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用して、前記第１のクライアントからのストレージ要求に応答するインサーバＳＡＮモジュールであって、前記ストレージ要求は、前記１又はそれ以上の第２のストレージデバイスの少なくとも１つのデータにアクセスし、前記インサーバＳＡＮモジュールは第２のサーバに配置されたクライアントから独立して前記ストレージ要求に応答し、前記インサーバＳＡＮモジュールは、前記ネットワークインターフェースを介して、前記第１および第２のサーバ間における通信を使用し、前記ストレージ要求に応答する、インサーバＳＡＮモジュールと、
を具えることを特徴とする装置。
【請求項２】
前記第１のサーバおよび前記第１のストレージ制御部が共有ネットワークアドレスを使用してアクセス可能なように、前記ネットワークインターフェース、前記第１のストレージ制御部および前記第１のサーバを設定する共通インターフェースモジュールをさらに具えることを特徴とする請求項１に記載の装置。
【請求項３】
前記インサーバＳＡＮモジュールが、前記１又はそれ以上の第１のストレージデバイス中の少なくとも１つのデータにアクセスすることによって、前記ストレージ要求に更に応答することを特徴とする請求項１に記載の装置。
【請求項４】
前記第１のクライアントが、前記第１のサーバの外部にあるクライアントからの前記ストレージ要求を受信することを特徴とする請求項１に記載の装置。
【請求項５】
前記第１のクライアントが、前記第１のサーバで機能するファイルサーバを具えることを特徴とする請求項１に記載の方法。
【請求項６】
前記第１のサーバを超えて拡張可能なプロトコルを使用するシステムバスを更に具え、前記ネットワークインターフェースが前記システムバスの一部であり、前記第１のストレージ制御部が、前記システムバスを介して前記第２のストレージ制御部と通信することを特徴とする請求項１に記載の装置。
【請求項７】
前記第１のストレージ制御部および前記第２のストレージ制御部は、コンピュータネットワークを介して通信することを特徴とする請求項１に記載の装置。
【請求項８】
前記インサーバＳＡＮモジュールが、前記第１のサーバの外部にあるクライアントからのストレージ要求に更に応答することを特徴とする請求項１に記載の装置。
【請求項９】
前記第１のサーバが利用不能で、前記第１のストレージ制御部を使用して前記外部クライアントからの前記ストレージ要求に応答するとき、前記インサーバＳＡＮモジュールが、前記外部クライアントからの前記ストレージ要求に応答することを特徴とする請求項８に記載の装置。
【請求項１０】
前記第１のストレージ制御部は、コンピュータネットワークを介して、前記第１のサーバの外部にあるクライアントと通信することを特徴とする請求項１に記載の装置。
【請求項１１】
前記第１のストレージ制御部は、システムバスを介して前記第１のクライアントと通信することを特徴とする請求項１に記載の装置。
【請求項１２】
前記第１のストレージ制御部が、システムバスを介して前記第１のサーバの外部にあるクライアントと通信し、前記システムバスが、前記第１のサーバを超えて拡張可能なプロトコルを具え、前記ネットワークインターフェースが前記システムバスの一部であることを特徴とする請求項１に記載の装置。
【請求項１３】
少なくとも１のクライアントに対してネットワーク接続ストレージ（「ＮＡＳ」）デバイスとしての前記第１のストレージ制御部を設定し、かつ前記少なくとも１のクライアントからのファイル要求に応答するＮＡＳモジュールを更に具えることを特徴とする請求項１に記載の装置。
【請求項１４】
前記ＤＡＳモジュールが、前記第１のサーバを介して少なくとも１のクライアントからのストレージ要求に応答するために、前記第１のサーバに接続したダイレクト接続ストレージ（「ＤＡＳ」）デバイスとしての前記第１のストレージ制御部によって制御される１又はそれ以上のストレージデバイスの少なくとも１の一部を設定することを特徴とする請求項１に記載の装置。
【請求項１５】
前記ストレージ要求は、オブジェクト要求を具え、前記第１のストレージ制御部は、１又はそれ以上のオブジェクトを管理することを特徴とする請求項１に記載の装置。
【請求項１６】
前記第１のストレージ制御部と、前記第２のサーバ内の前記第２のストレージ制御部との間の通信リンクを構築するリンクセットアップモジュールを更に具え、前記通信リンクによって、前記第１のサーバまたは第１のクライアントの制御から独立して通信が可能となり、前記通信リンクは、ストレージ要求に応答するのに十分であることを特徴とする請求項１に記載の装置。
【請求項１７】
前記リンクセットアップモジュールは、初期化プロセスとして通信リンクを構築し、この通信リンクを介したさらなる通信は、前記リンクセットアップモジュールから独立していることを特徴とする請求項１６に記載の装置。
【請求項１８】
前記第１のクライアントを介してストレージ要求に応答する際に使用されるコマンドの少なくとも一部を指令するプロキシモジュールを更に具え、前記コマンドは、前記ストレージ要求の一部を具え、前記ストレージ要求と関連した少なくともデータは、前記第１のクライアントから独立して、前記第１のストレージ制御部と前記第２のサーバとの間で通信されることを特徴とする請求項１に記載の装置。
【請求項１９】
前記第１のストレージ制御部は、前記第２のストレージ制御部を介してクライアントから送られるストレージ要求に応答することを特徴とする請求項１に記載の装置。
【請求項２０】
バーチャルバスモジュールを更に具え、このバーチャルバスモジュールによって、前記第１のサーバ内の１又はそれ以上のサーバが、別のバーチャルバスを介して１又はそれ以上のストレージ制御部に独立してアクセス可能であることを特徴とする請求項１に記載の装置。
【請求項２１】
前記バーチャルバスが、周辺コンポーネントインターコネクトエクスプレス入力／出力バーチャリゼーション（「ＰＣＩｅ−ＩＯＶ」）を使用して、作成されることを特徴とすることを特徴とする請求項２０に記載の装置。
【請求項２２】
前記第１のサーバの外部にある１又はそれ以上のサーバが、別のバーチャルバスを介して１又はそれ以上のストレージ制御部に独立してアクセスすることを特徴とする請求項２０に記載の装置。
【請求項２３】
独立ドライブ冗長アレイ（「ＲＡＩＤ」）として２又はそれ以上のストレージ制御部を設定するフロントエンドＲＡＩＤモジュールを更に具え、前記クライアントからの前記ストレージ要求が、データを記憶する要求を具え、前記フロントエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致する前記ＲＡＩＤにデータを書き込むことによって、前記ストレージ要求に応答し、前記２又はそれ以上のストレージ制御部は、少なくとも前記第１のストレージ制御部および第２のストレージ制御部を具え、前記第２のストレージ制御部は、前記第１のサーバ内または前記第１のサーバの外部に配置されることを特徴とする請求項１に記載の装置。
【請求項２４】
ＲＡＩＤとして前記第１のストレージ制御部によって制御される２又はそれ以上のストレージデバイスを設定するバックエンドＲＡＩＤモジュールを更に具え、前記クライアントからの前記ストレージ要求は、データを記憶する要求を具え、前記バックエンドＲＡＩＤモジュールは、ＲＡＩＤレベルと一致するＲＡＩＤに前記データを書き込むことによって前記ストレージ要求に応答し、ＲＡＩＤとして設定された前記ストレージデバイスは、前記第１のストレージ制御部によって制御される１のストレージデバイスとして前記クライアントによってアクセスされることを特徴とする請求項１に記載の装置。
【請求項２５】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用システムにおいて、
第１のサーバと、
前記第１のサーバ内に配置された第１のクライアントと、
前記第１のサーバ内に存在する１又はそれ以上の第１のストレージデバイスであって、各々の第１のストレージデバイスが、非揮発性ソリッドステートストレージデバイスを具える、第１のストレージデバイスと、
前記第１のサーバ内の少なくとも１つの第１のストレージ制御部であって、この第１のストレージ制御部は、前記１又はそれ以上の第１のストレージデバイスを制御し、前記第１のサーバは、この第１のサーバと前記ストレージ制御部とによって共有されるネットワークインターフェースを具える、第１のストレージ制御部と、
前記第１のクライアントを、前記第１のクライアントからのストレージ要求に応答するために、ダイレクト接続ストレージ（「ＤＡＳ」）デバイスとして１又はそれ以上の第１のストレージデバイスの少なくとも１つにアクセス可能にするＤＡＳモジュールと、
前記第１のストレージ制御部と、前記第１のサーバの外部にある少なくとも１つの第２のサーバとの間の通信を促進するストレージ通信モジュールであって、前記通信は、前記第１のクライアントから独立して、前記第１のストレージ制御部と、前記第２のサーバとの間でなされ、前記第２のサーバは、少なくとも１つの第２のストレージ制御部を具え、前記少なくとも１つの第２のストレージ制御部は、前記第２のサーバ内にある１又はそれ以上の第２のストレージデバイスを制御し、前記１又はそれ以上の第２のストレージデバイスの各々が、非揮発性ソリッドステートストレージデバイスを具え、前記第２のサーバ内に配置されたクライアントが、前記第２のサーバ内に配置されたクライアントからのストレージ要求に応答するために、ＤＡＳデバイスとして、１又はそれ以上の第２のストレージデバイスの少なくとも１つにアクセスする、ストレージ通信モジュールと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用して、前記第１のクライアントからのストレージ要求に応答するインサーバＳＡＮモジュールであって、前記ストレージ要求が、前記１又はそれ以上の第２のストレージデバイスの少なくとも１つのデータにアクセスし、前記インサーバＳＡＮモジュールが、前記第２のサーバ内に配置されたクライアントから独立して前記ストレージ要求に応答し、前記インサーバＳＡＮモジュールは、前記ネットワークインターフェースを介した通信を使用し、前記第１および第２のサーバ間において、前記ストレージ要求に応答することを特徴とするシステム。
【請求項２６】
前記第１のサーバと通信する前記第１のサーバの外部にあるクライアントを更に具えることを特徴とする請求項２５に記載のシステム。
【請求項２７】
前記第１のサーバおよび第２のサーバは、ブレードサーバを具え、更に、前記第１のサーバおよび前記第２のサーバを具えるコンピュータラックを具えることを特徴とする請求項２５に記載のシステム。
【請求項２８】
インサーバストレージエリアネットワーク（「ＳＡＮ」）用のオペレーションを行うために実行可能なコンピュータ使用可能プログラムコードを有するコンピュータ読み取り可能メディアを具えたコンピュータプログラム製品において、このコンピュータプログラム製品のオペレーションが、
第１のサーバに配置された少なくとも１つの第１のストレージ制御部を使用して、１又はそれ以上の第１のストレージデバイスを制御し、前記１又はそれ以上の第１のストレージデバイスが前記第１のサーバに存在し、各々が、非揮発性ソリッドステートストレージデバイスを具え、前記第１のサーバが、前記第１のサーバと前記第１のストレージ制御部とによって共有されるネットワークインターフェースを具える、ステップと、
第１のサーバ内に配置された第１のクライアントが、前記第１のクライアントからのストレージ要求に応答するために、ダイレクト接続ストレージデバイス（「ＤＡＳ」）としての１又はそれ以上の第１のストレージデバイスの少なくとも１つにアクセス可能となる、ステップと、
前記第１のストレージ制御部と、前記第１のサーバの外部にある少なくとも１の第２のサーバとの間の通信を促進し、前記通信は、前記第１のクライアントから独立して、前記第１のストレージ制御部と、前記第２のサーバとの間でなされ、前記第２のサーバが、少なくとも１つの第２のストレージ制御部を具え、前記少なくとも１つの第２のストレージ制御部は、前記第２のサーバ内に存在する１又はそれ以上の第２のストレージデバイスを制御し、前記１又はそれ以上の第２のストレージデバイスの各々は、非揮発性ソリッドステートストレージデバイスを具え、前記第２のサーバに配置されたクライアントは、前記第２のサーバ内に配置されたクライアントからのストレージ要求に応答するために、ＤＡＳデバイスとしての１又はそれ以上の第２のストレージデバイスの少なくとも１つにアクセスする、ステップと、
ネットワークプロトコルおよびバスプロトコルの少なくとも一方を使用して、前記第１のクライアントからストレージ要求に応答し、前記ストレージ要求は、１又はそれ以上の第２のストレージデバイスの少なくとも１つのデータにアクセスし、前記ストレージ要求に応答することは、前記第２のサーバ内に配置されたクライアントから独立して前記ストレージ要求に応答することを含み、前記インサーバＳＡＮモジュールは、ネットワークインターフェースを介し、前記第１および第２のサーバとの間における通信を使用して、前記ストレージ要求に応答するステップと、
を具えることを特徴とするコンピュータプログラム製品。
【国際調査報告】
2010515116.tif 000012
2010515116.tif 000013
2010515116.tif 000014