(57)【要約】【課題】高性能データストレージを提供すること。【解決手段】クライアントコンポーネントのためのデータを格納するストレージシステムであって、該システムは、通信インタフェースと、該通信インタフェースを介して受信されるデータの格納のためのメモリと、オブザーバロジックとを備え、該通信インタフェースは、該メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、メモリアクセスプロトコルに準拠する、ことと、該要求に応答して該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、該メモリに含まれるストレージボリュームに含まれる、こととを行うように構成される。【選択図】図２
2012181834.tif 000002
【特許請求の範囲】
【請求項１】
クライアントコンポーネントのためのデータを格納するストレージシステムであって、
該システムは、
通信インタフェースと、
該通信インタフェースを介して受信されるデータの格納のためのメモリと、
オブザーバロジックと
を備え、
該通信インタフェースは、
該メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、メモリアクセスプロトコルに準拠する、ことと、
該要求に応答して該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、該メモリに含まれるストレージボリュームに含まれる、こととを行うように構成され、
該オブザーバロジックは、該メモリアクセス動作の少なくとも１つの属性を識別することと、該メモリアクセス動作の該少なくとも１つの属性の識別に応答して、該メモリアクセス動作に関連するアクションを行うこととを行うように構成され、該通信インタフェースは、該オブザーバロジックを待つことなく、該メモリにおける該メモリアクセス動作を完了するようにさらに構成される、ストレージシステム。
【請求項２】
前記メモリは、第１のメモリであり、前記ストレージシステムは、前記通信インタフェースと、該第１のメモリと、前記オブザーバロジックとを含むストレージデバイスを備え、前記メモリアクセスプロトコルは、前記クライアントコンポーネントに含まれる第２のメモリとストレージデバイスに含まれる該第１のメモリとの間でデータを転送する通信プロトコルであり、該データの転送は、該クライアントコンポーネントおよびストレージデバイスに含まれる中央処理装置（ＣＰＵ）とは無関係である、請求項１に記載のストレージシステム。
【請求項３】
前記メモリは、前記ストレージボリュームのすべてのデータブロックに加えて、該データブロックについてのボリューム情報を含む、請求項１に記載のストレージシステム。
【請求項４】
前記メモリアクセス動作に関係するアクションは、メモリアクセス動作についての統計の決定を含む、請求項１に記載のストレージシステム。
【請求項５】
前記メモリアクセス動作に関係するアクションは、該メモリアクセス動作によって影響される前記メモリの領域の識別を含む、請求項１に記載のストレージシステム。
【請求項６】
前記メモリアクセス動作に関係するアクションは、補助記憶装置への前記メモリの領域の複製をさらに含む、請求項５に記載のストレージシステム。
【請求項７】
前記メモリと通信するプロセッサをさらに備え、該メモリは、前記オブザーバロジックを備え、該オブザーバロジックは、該プロセッサによって実行可能であり、前記通信インタフェースは、該プロセッサとは無関係に該メモリにおける前記メモリアクセス動作を行うようにさらに構成される、請求項１に記載のストレージシステム。
【請求項８】
コンピュータ実行可能命令によって符号化される有形のコンピュータ読み取り可能記憶媒体であって、該コンピュータ実行可能命令は、ストレージデバイス内のプロセッサによって実行可能であり、該コンピュータ読み取り可能媒体は、
メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令であって、該メモリアクセス動作は、該ストレージデバイスの通信インタフェースによる該メモリアクセス動作を行う要求の受信に応答して、該プロセッサとは無関係にストレージボリュームにおいて行われ、該要求は、メモリアクセスプロトコルに準拠し、該ストレージボリュームは、該ストレージデバイスのメモリに含まれる、命令と、
該メモリアクセス動作の少なくとも１つの属性に基づいて該メモリアクセス動作に関係するアクションを行うように実行可能である命令と
を含む、有形のコンピュータ読み取り可能記憶媒体。
【請求項９】
前記メモリアクセス動作は、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）動作である、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１０】
前記メモリアクセス動作の少なくとも１つの属性を識別する命令は、該メモリアクセス動作が完了した後に実行するように構成される、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１１】
前記要求は、前記メモリアクセス動作の少なくとも１つの属性を示すデータを含み、該メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該要求に含まれる該データから、該少なくとも１つの属性を識別するように実行可能である、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１２】
前記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信される前に、前記通信インタフェースにおいて受信される通知メッセージから、該少なくとも１つの属性を識別するようにさらに実行可能である、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１３】
前記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信された後に、前記通信インタフェースにおいて受信される通知メッセージから、該少なくとも１つの属性を識別するようにさらに実行可能である、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１４】
前記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該少なくとも１つの属性を示すデータのための前記メモリの領域を監視するようにさらに実行可能であり、該メモリアクセス動作は、第１のメモリアクセス動作であり、該第１のメモリアクセス動作の少なくとも１つの属性を示すデータは、第２のアクセス動作を行う要求に応答して、該メモリの領域に書き込まれる、請求項８に記載のコンピュータ読み取り可能記憶媒体。
【請求項１５】
ストレージシステムの通信インタフェースにおいて受信されるデータからメモリアクセス動作を識別するコンピュータ実装される方法であって、
該方法は、
メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、該通信インタフェースにおいて受信され、該要求は、メモリアクセスプロトコルに準拠している、ことと、
該要求に応答して、該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、ストレージボリュームに含まれ、該ストレージボリュームは、該メモリに含まれる、ことと、
該ストレージシステム内のプロセッサによって該メモリアクセス動作の少なくとも１つの属性を識別することであって、該メモリアクセス動作は、該プロッセッサとは無関係に該メモリの該一部分において行われる、ことと、
該プロセッサによって該メモリアクセス動作に関係するアクションを行うことと
を包含する、方法。
【請求項１６】
前記メモリアクセス動作に関係するアクションが行われる前に、該メモリアクセス動作は完了する、請求項１５に記載の方法。
【請求項１７】
前記メモリアクセス動作の少なくとも１つの属性が識別される前に、該メモリアクセス動作は完了する、請求項１５に記載の方法。
【請求項１８】
前記メモリアクセス動作は、第１のメモリアクセス動作であり、該第１のメモリアクセス動作に関係するアクションを行うことは、第２のメモリアクセス動作に応答してメモリ領域に書き込むことを包含する、請求項１５に記載の方法。
【請求項１９】
前記メモリ領域は、フラグを含み、該フラグは、前記メモリの前記一部分が補助記憶装置に最後にコピーされて以来、該メモリの該一部分が前記メモリアクセス動作によって更新されたかどうかを示す、請求項１８に記載の方法。
【請求項２０】
前記メモリアクセス動作は、前記要求を送信したクライアントコンポーネントに含まれる第２のプロセッサとは無関係に前記メモリの前記一部分において行われる、請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（背景）
（１．技術分野）
本出願は、データストレージに関し、特に高性能データストレージに関する。
【背景技術】
【０００２】
（２．関連技術）
一般的なストレージプロトコル、すなわちＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）は、要求／応答モデルを用いて動作する。読み取りトランザクションを実行するために、クライアントマシンなどのＳＣＳＩイニシエータは、物理的相互接続を用いて、どのストレージブロック（単数または複数）が読み取るかを示す符号化バッファを、ストレージデバイスなどのＳＣＳＩターゲットに送信する。ＳＣＳＩターゲットは、次いで要求されたデータを検索し、読み取り動作の結果と共に応答する。書き込み要求を実行するために、ＳＣＳＩイニシエータは、物理的相互接続を用いて、どのブロック（単数または複数）に書き込むかを示す符号化バッファをＳＣＳＩターゲットに送信する。一旦関連データがイニシエータからターゲットに送信され、ターゲットがデータを格納すると、ターゲットは、書き込み動作の結果と共に応答する。
【０００３】
１秒当りの要求される動作の数が増加すると、ＳＣＳＩの符号化読み取り／書き込み要求の処理は、任意の基礎となるプロトコル（単数または複数）と共に、クライアントマシンおよびストレージデバイスの計算リソースに対して有意な要求を出し得る。基礎となる物理的相互接続および／またはプロトコルに従って、読み取りおよび／または書き込みデータの転送は、イニシエータ、ターゲット、またはその両方によって管理され得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
（概要）
ストレージボリュームストレージボリュームへのアクセスの速度を改善するために、ストレージボリュームを含むメモリにおけるメモリアクセス動作を識別し、その動作を行うシステムが提供され得る。システムは、通信インタフェースと、ストレージボリュームを含むメモリと、メモリアクセス動作を識別するオブザーバロジックとを含み得る。通信インタフェースは、メモリにおけるメモリアクセス動作を行う要求を受信し得、ここで、要求は、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）などのメモリアクセスプロトコルに準拠する。通信インタフェースは、要求に応答してメモリの一部分に対してメモリアクセス動作を行い得る。メモリの部分は、メモリに格納されたストレージボリュームに含まれ得る。オブザーバロジックは、メモリアクセス動作の１つ以上の属性を識別し得、応答して、メモリの部分を補助記憶装置にコピーするなどメモリアクセス動作に関する動作を行い得る。
【０００５】
ストレージボリュームへのアクセスの速度を向上させるために、コンピュータ読み取り可能記憶媒体が提供され得る。ストレージボリュームに符号化された命令は、実行された場合、メモリアクセス動作の１つ以上の属性を識別し得る。メモリアクセス動作は、通信インタフェースにおけるメモリアクセス動作を行う要求の受信に応答して、ストレージボリュームにおいて行われ得る。要求は、メモリアクセスプロトコルに準拠し得る。ストレージボリュームは、ストレージデバイスのメモリに含まれ得る。コンピュータ読み取り可能媒体に符号化された命令は、実行された場合、メモリアクセス動作の属性（単数または複数）に基づいて、メモリアクセス動作に関係するアクションを行い得る。
【０００６】
ストレージボリュームを含むメモリにおいて行われるメモリアクセス動作を識別する方法が提供され得る。メモリにおけるメモリアクセス動作を行う要求は、通信インタフェースにおいて受信され得る。要求は、メモリアクセスプロトコルに準拠し得る。メモリアクセス動作は、要求に応答してメモリの一部分において行われ得る。メモリの部分は、ストレージボリュームに含まれ得る。メモリアクセス動作の１つ以上の属性は、識別され得る。メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性（単数または複数）の識別に基づいて行われ得る。
【０００７】
本発明のさらなる目的および利点は、以下の説明から明らかであり、添付の図面に参照がなされ、ここで、本発明の好ましい実施形態が示される。
【０００８】
例えば、本発明は以下の項目を提供する。
（項目１）
クライアントコンポーネントのためのデータを格納するストレージシステムであって、
該システムは、
通信インタフェースと、
該通信インタフェースを介して受信されるデータの格納のためのメモリと、
オブザーバロジックと
を備え、
該通信インタフェースは、
該メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、メモリアクセスプロトコルに準拠する、ことと、
該要求に応答して該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、該メモリに含まれるストレージボリュームに含まれる、こととを行うように構成され、
該オブザーバロジックは、該メモリアクセス動作の少なくとも１つの属性を識別することと、該メモリアクセス動作の該少なくとも１つの属性の識別に応答して、該メモリアクセス動作に関連するアクションを行うこととを行うように構成され、該通信インタフェースは、該オブザーバロジックを待つことなく、該メモリにおける該メモリアクセス動作を完了するようにさらに構成される、ストレージシステム。
（項目２）
上記メモリは、第１のメモリであり、上記ストレージシステムは、上記通信インタフェースと、該第１のメモリと、上記オブザーバロジックとを含むストレージデバイスを備え、上記メモリアクセスプロトコルは、上記クライアントコンポーネントに含まれる第２のメモリとストレージデバイスに含まれる該第１のメモリとの間でデータを転送する通信プロトコルであり、該データの転送は、該クライアントコンポーネントおよびストレージデバイスに含まれる中央処理装置（ＣＰＵ）とは無関係である、上記項目のいずれかに記載のストレージシステム。
（項目３）
上記メモリは、上記ストレージボリュームのすべてのデータブロックに加えて、該データブロックについてのボリューム情報を含む、上記項目のいずれかに記載のストレージシステム。
（項目４）
上記メモリアクセス動作に関係するアクションは、メモリアクセス動作についての統計の決定を含む、上記項目のいずれかに記載のストレージシステム。
（項目５）
上記メモリアクセス動作に関係するアクションは、該メモリアクセス動作によって影響される上記メモリの領域の識別を含む、上記項目のいずれかに記載のストレージシステム。
（項目６）
上記メモリアクセス動作に関係するアクションは、補助記憶装置への上記メモリの領域の複製をさらに含む、上記項目のいずれかに記載のストレージシステム。
（項目７）
上記メモリと通信するプロセッサをさらに備え、該メモリは、上記オブザーバロジックを備え、該オブザーバロジックは、該プロセッサによって実行可能であり、上記通信インタフェースは、該プロセッサとは無関係に該メモリにおける上記メモリアクセス動作を行うようにさらに構成される、上記項目のいずれかに記載のストレージシステム。
（項目８）
コンピュータ実行可能命令によって符号化される有形のコンピュータ読み取り可能記憶媒体であって、該コンピュータ実行可能命令は、ストレージデバイス内のプロセッサによって実行可能であり、該コンピュータ読み取り可能媒体は、
メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令であって、該メモリアクセス動作は、該ストレージデバイスの通信インタフェースによる該メモリアクセス動作を行う要求の受信に応答して、該プロセッサとは無関係にストレージボリュームにおいて行われ、該要求は、メモリアクセスプロトコルに準拠し、該ストレージボリュームは、該ストレージデバイスのメモリに含まれる、命令と、
該メモリアクセス動作の少なくとも１つの属性に基づいて該メモリアクセス動作に関係するアクションを行うように実行可能である命令と
を含む、有形のコンピュータ読み取り可能記憶媒体。
（項目９）
上記メモリアクセス動作は、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）動作である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１０）
上記メモリアクセス動作の少なくとも１つの属性を識別する命令は、該メモリアクセス動作が完了した後に実行するように構成される、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１１）
上記要求は、上記メモリアクセス動作の少なくとも１つの属性を示すデータを含み、該メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該要求に含まれる該データから、該少なくとも１つの属性を識別するように実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１２）
上記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信される前に、上記通信インタフェースにおいて受信される通知メッセージから、該少なくとも１つの属性を識別するようにさらに実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１３）
上記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信された後に、上記通信インタフェースにおいて受信される通知メッセージから、該少なくとも１つの属性を識別するようにさらに実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１４）
上記メモリアクセス動作の少なくとも１つの属性を識別するように実行可能である命令は、該少なくとも１つの属性を示すデータのための上記メモリの領域を監視するようにさらに実行可能であり、該メモリアクセス動作は、第１のメモリアクセス動作であり、該第１のメモリアクセス動作の少なくとも１つの属性を示すデータは、第２のアクセス動作を行う要求に応答して、該メモリの領域に書き込まれる、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
（項目１５）
ストレージシステムの通信インタフェースにおいて受信されるデータからメモリアクセス動作を識別するコンピュータ実装される方法であって、
該方法は、
メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、該通信インタフェースにおいて受信され、該要求は、メモリアクセスプロトコルに準拠している、ことと、
該要求に応答して、該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、ストレージボリュームに含まれ、該ストレージボリュームは、該メモリに含まれる、ことと、
該ストレージシステム内のプロセッサによって該メモリアクセス動作の少なくとも１つの属性を識別することであって、該メモリアクセス動作は、該プロッセッサとは無関係に該メモリの該一部分において行われる、ことと、
該プロセッサによって該メモリアクセス動作に関係するアクションを行うことと
を包含する、方法。
（項目１６）
上記メモリアクセス動作に関係するアクションが行われる前に、該メモリアクセス動作は完了する、上記項目のいずれかに記載の方法。
（項目１７）
上記メモリアクセス動作の少なくとも１つの属性が識別される前に、該メモリアクセス動作は完了する、上記項目のいずれかに記載の方法。
（項目１８）
上記メモリアクセス動作は、第１のメモリアクセス動作であり、該第１のメモリアクセス動作に関係するアクションを行うことは、第２のメモリアクセス動作に応答してメモリ領域に書き込むことを包含する、上記項目のいずれかに記載の方法。
（項目１９）
上記メモリ領域は、フラグを含み、該フラグは、上記メモリの上記一部分が補助記憶装置に最後にコピーされて以来、該メモリの該一部分が上記メモリアクセス動作によって更新されたかどうかを示す、上記項目のいずれかに記載の方法。
（項目２０）
上記メモリアクセス動作は、上記要求を送信したクライアントコンポーネントに含まれる第２のプロセッサとは無関係に上記メモリの上記一部分において行われる、上記項目のいずれかに記載の方法。
【０００９】
（摘要）
１つの実施例において、メモリに格納されたストレージボリュームに対してメモリアクセスを行い、行われたメモリアクセス動作を識別するシステムが提供される。メモリアクセス動作を行う要求は、通信インタフェースにおいて受信され得る。要求は、メモリアクセスプロトコルに従い得る。メモリアクセス動作は要求に応答してメモリの一部分において行われ得、ここで、メモリの一部分はストレージボリュームに含まれる。メモリアクセス動作の１つ以上の属性が、識別され得る。メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性に基づいて行われ得る。
【００１０】
複数の実施形態は、以下の図面および説明を参照してより良く理解され得る。図面における構成要素は必ずしも同一縮尺ではなく、代わりに本発明の原理を例示することに強調がなされている。さらに図において、同様に参照される数字は、異なる図全体にわたり対応する部分を示す。
【図面の簡単な説明】
【００１１】
【図１】図１は、例示的な高性能データストレージシステムのハードウェア図を例示する。
【図２】図２は、ストレージシステムのロジックの例のフロー図を例示する。
【図３】図３は、ストレージシステムにおいてメモリアクセス動作を観測する一例のフロー図を例示する。
【発明を実施するための形態】
【００１２】
（詳細な説明）
一例として、高性能データストレージのシステムは、ストレージボリュームのすべてのデータをストレージデバイスのメモリに格納し得る。ストレージデバイスにおけるボリュームアクセスロジックは、１つ以上の通信インタフェースを有するストレージボリューム−またはストレージボリュームに関連するメモリ領域−をストレージデバイスに登録し得る。あるいはまたはさらに、ボリュームアクセスロジックは、１つ以上のクライアントコンポーネントによってストレージボリュームへのアクセスを提供しかつ／または制御し得る。クライアントコンポーネントにおける通信インタフェースは、メモリへのクライアント側メモリアクセスを、メモリ内の領域にかつ／またはストレージデバイスにおけるストレージボリュームに提供し得る。相互接続またはネットワークは、クライアントコンポーネントの通信インタフェースとストレージデバイスの通信インタフェースとの間でデータを移送し得る。例えば、通信インタフェースは、ネットワークインタフェースコントローラであり得る。
【００１３】
クライアント側メモリアクセスは、クライントコンポーネントにおいてプロセッサを迂回し得、かつ／またはさもなければ、クライアントコンポーネントが、クライアントコンポーネント、ストレージデバイス、またはその両方に含まれるプロセッサによるアクションを待つことなく、ストレージデバイスのメモリにアクセスすることを容易にし得る。例えば、クライアント側メモリアクセスは、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）プロトコルに基づき得る。通信インタフェースは、メッセージの信頼性ある送達、および／またはクライアント側メモリアクセスを行う場合、実行される任意のメモリアクセス動作などのメモリアクセス動作の信頼性ある実行を提供し得る。あるいはまたはさらに、メッセージの送達および／またはメモリアクセスアクションの実行は、データがＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ（ＵＤＰ）を用いる通信インタフェース間において移送される場合など、信頼性がなくなり得る。クライアントコンポーネントは、クライアント側メモリアクセスを用いて、メモリ上の他の動作、メモリ内の領域、および／またはストレージデバイスにおけるストレージボリュームを読み取り、書き込み、かつ／または行い得る。クライアント側メモリアクセスを提供する際に、クライアントコンポーネントは、メモリアクセス動作を行う要求をストレージデバイスに送信し得る。応答して、ストレージデバイスは、メモリアクセス動作を実行し得る。ストレージデバイスは、メモリアクセス動作を観測するかまたはさもなければ識別し得る。メモリアクセス動作を識別することに応答して、ストレージデバイスは、例えば、メモリ上のメモリアクセス動作を実行することと無関係に、ストレージボリュームのデータを１つ以上のオプションの補助記憶装置にコピーし得る。補助記憶装置は、フラッシュメモリなどの１つ以上の持続性不揮発性記憶媒体、相変化メモリ、メモリスタ、ＥＥＰＲＯＭ、磁気ディスク、テープ、またはいくつかの他の媒体を含み得る。メモリおよび／または補助記憶装置（含まれている場合）は、ストレージボリュームに再分割され得る。
【００１４】
ストレージシステムの１つの技術的利点は、ストレージシステムが、メモリアクセスプロトコルを用いて読み取りおよび書き込みの動作に対してＤＭＡ同等の性能を提供し得、さらになおも、行われるメモリアクセス動作を識別し得ることである。従って、ストレージシステムは、メモリアクセス動作についての情報に基づいてさらなる動作を取り得る。例えば、さらなる動作は、メモリアクセス動作についての統計を総計すること、書き込まれたメモリの領域を追跡すること、領域の内容を補助記憶装置に持続すること、領域の内容をバックアップストレージボリュームまたは他のストレージデバイスに複製すること、および／またはメモリアクセス動作に関係する任意の他の動作を含む。１つ以上の例において、メモリの更新された領域の内容を複製することは、２０１０年２月２５日に出願された、名称が「ＳＹＳＴＥＭ  ＡＮＤ  ＭＥＴＨＯＤ  ＦＯＲ  ＲＡＰＩＤ  ＤＡＴＡ  ＳＮＡＰＳＨＯＴＳ」である米国特許出願第１２／７１２,８８４号に説明される技術を用いて達成され得る。従って、ストレージシステムは、主として相互接続ハードウェアによって処理されるメモリアクセス動作を用いてストレージボリュームに情報を迅速に格納し得、格納された情報が電力損および／またはシステム遮断の場合に持続されることをなおも確実にし得る。
【００１５】
図１は、例示的な高性能データストレージシステム１００のハードウェア図を例示する。ストレージシステム１００は、ストレージデバイス１０５と、クライアントコンポーネント１１０とを含み得る。ストレージシステム１００は、より多い要素、より少ない要素、または異なる要素を含み得る。例えば、ストレージシステム１００は、複数のクライアントデバイス、複数のストレージデバイス、またはその両方を含み得る。あるいは、ストレージシステム１００は、ストレージデバイス１０５だけを含み得る。
【００１６】
クライアントコンポーネント１１０およびストレージデバイス１０５は、相互接続１１５を介して互いに通信し得る。通信は、単方向または二方向であり得る。１つの実施例において、相互接続１１５は、ストレージデバイス１０５とクイアントコンポーネント１１０とを電気的に連結し得る。
【００１７】
相互接続１１５は、２つ以上のデバイス間で信号を移送する任意の物理的コンポーネントを含み得る。相互接続１１５の実施例は、ワイヤ、パラレルバス、シリアルバス、ネットワーク、交換ファブリック、無線リンク、またはデバイス間で信号を移送する複数のコンポーネントの組み合わせを含む。あるいはまたはさらに、クライアントコンポーネント１１０は、Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＳＡＮ）、（Ｂｅａｖｅｒｔｏｎ  ＯｒｅｇｏｎのＳｙｓｔｅｍ  Ｉ／Ｏ  Ｉｎｃ．の所有の登録商標である）ＩＮＦＩＮＩＢＡＮＤ（登録商標）ネットワーク、Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）、Ｗｉｒｅｌｅｓｓ  Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＬＡＮ）、Ｐｅｒｓｏｎａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＰＡＮ）、Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＷＡＮ）、または任意の他の現在公知であるかもしくは後に開発される通信ネットワークなどのネットワークもしくは交換ファブリックを介してストレージデバイス１０５と通信し得る。
【００１８】
ストレージデバイス１０５は、相互接続１１５を介して受信されるデータを格納し得る。ストレージデバイス１０５は、メモリ１２０と、プロセッサ１２５と、メモリコントローラ１３０と、通信インタフェース１３５とを含み得る。ストレージデバイス１０５は、より多い要素、より少ない要素、または異なる要素を含み得る。例えば、ストレージデバイス１０５は、補助記憶装置１４５と、ストレージコントローラ１４０と、複数の補助記憶装置と、複数のストレージコントローラ、またはこれらの任意の組み合わせを含み得る。ストレージデバイス１０５は、単一の電源または複数の電源によって電力を供給され得る。電源の実施例は、公共電気施設、内部もしくは外部のバッテリ、無停電電力系統（ＵＰＳ）、設備ＵＰＳ、発電機、太陽電池パネル、任意の他の電源、または複数の電源の組み合わせを含む。ストレージデバイス１０５は、ストレージデバイスに電力を供給する１つ以上の電源の状態を検出し得る。
【００１９】
メモリ１２０は、固体メモリ、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、フラッシュメモリ、リードオンリーメモリ（ＲＯＭ）、電気的消去可能プログラマブルリードオンリーメモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、相変化メモリ、メモリスタメモリ、プロセッサ１２５によってアドレス可能アドレス空間に構成される任意の種類のメモリ、またはこれらの任意の組み合わせなど、任意のメモリもしくは複数のメモリの組み合わせであり得る。メモリ１２０は、揮発性もしくは不揮発性、またはその両方の組み合わせであり得る。
【００２０】
メモリ１２０は、オブザーバロジック１５０と、ボリュームアクセスロジック１５５と、ストレージボリューム１６０とを含み得る。１つの実装において、オブザーバロジック１５０、ボリュームアクセスロジック１５５、およびストレージボリューム１６０のうちの対応する１つを含むメモリ１２０の各部分は、メモリ１２０の他の部分とは異なる種類であり得る。例えば、メモリ１２０は、ＲＯＭと、固体メモリとを含み得、ＲＯＭは、オブザーバロジック１５０と、ボリュームアクセスロジック１５５とを含み、固体メモリは、ストレージボリューム１６０を含む。メモリ１２０は、メモリコントローラ１３０によって制御され得る。メモリ１２０は、より多いコンポーネント、より少ないコンポーネント、または異なるコンポーネントを含み得る。
【００２１】
プロセッサ１２５は、一般的プロセッサ、中央処理装置、サーバ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル回路、アナログ回路、またはこれらの任意の組み合わせであり得る。プロセッサ１２５は、メモリ１２０または他のメモリにおいて実施されるコンピュータ実行可能命令またはコンピュータコードを実行するように動作可能である１つ以上のデバイスを含み、ストレージシステム１００の特徴を実行し得る。例えば、プロセッサ１２５は、オブザーバロジック１５０およびボリュームアクセスロジック１５５に含まれるコンピュータ実行可能命令を実行し得る。
【００２２】
プロセッサ１２５、メモリコントローラ１３０、および通信インタフェース１３５は、各々互いに通信し得る。プロセッサ１２５、メモリコントローラ１３０および通信インタフェース１３５のうちの各１つはまた、ストレージコントローラ１４０および補助記憶装置１４５などの追加のコンポーネントと通信し得る。ストレージデバイス１０５のコンポーネント１２０、１２５、１３０、１３５、１４０、および１４５間の通信は、バス１６５、ポイントツーポイント接続、交換ファブリック、ネットワーク、任意の他の種類の相互接続、または相互接続の任意の組み合わせを介して行われ得る。通信は、星状、メッシュ、ハイパーキューブ、環状、トーラス、または現在公知であるかもしくは後に発見される任意の他の種類のトポロジを含むがこれらに限定されない任意の種類のトポロジを用い得る。あるいはまたはさらに、任意のプロセッサ１２５、メモリ１２０、メモリコントローラ１３０、および／または通信インタフェース１３５は、互いに、またはストレージコントローラ１４０および／または補助記憶装置１４５などの他のコンポーネントと論理的もしくは物理的に組み合わせられ得る。
【００２３】
メモリコントローラ１３０は、プロセッサ１２５によって指定されたメモリアドレスを適切な信号方式に並進させてメモリ１２０における対応する位置にアクセスするハードウェアコンポーネントを含み得る。プロセッサ１２５は、バス１６５上にアドレスを指定し得る。プロセッサ１２５、バス１６５、およびメモリ１２０は、マザーボードなどの共通の回路基板に直接または間接に連結され得る。１つの実施例において、バス１６５は、物理的アドレスを指定するために用いられるアドレスバスを含み得、アドレスバスは、２つ以上のコンポーネントを接続する一連の回線を含む。メモリコントローラ１３０はまた、例えば、メモリ１２０の内容を周期的にリフレッシュするなどの背景処理タスクを行い得る。１つの実施例の実装において、メモリコントローラ１３０は、プロセッサ１２５に含まれ得る。
【００２４】
通信インタフェース１３５は、データ転送に用いられる任意の物理的相互接続を含み得る。特に、通信インタフェース１３５は、ストレージデバイス１０５とクライアントコンポーネント１１０との間、またはストレージデバイス１０５と任意の他のデバイスとの間の通信を容易にし得る。通信インタフェース１３５は、相互接続１１５を介して通信し得る。通信インタフェース１３５は、ハードウェアコンポーネントを含み得る。さらに、通信インタフェース１３５は、ソフトウェアコンポーネントを含み得る。通信インタフェース１３５の実施例は、Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＤＭＡ）コントローラ、ＲＤＭＡコントローラ、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ（ＮＩＣ）、Ｅｔｈｅｒｎｅｔ（登録商標）コントローラ、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  Ｉｎｔｅｒｆａｃｅ、（Ｂｅａｖｅｒｔｏｎ，ＯｒｅｇｏｎのＳｙｓｔｅｍ  Ｉ／Ｏ  Ｉｎｃ．の登録商標である）ＩＮＦＩＮＩＢＡＮＤ（登録商標）、ＳＡＴＡインタフェースか、ＳＣＳＩインタフェース、汎用シリアルバス（ＵＳＢ）インタフェース、Ｅｔｈｅｒｎｅｔ（登録商標）インタフェース、または任意の他の物理的通信インタフェースを含む。下記に説明されるように、通信インタフェース１３５は、クライアント側メモリアクセスを容易にし得る。
【００２５】
ストレージボリューム１６０は、現在公知であるかまたは後に発見される任意の記憶アクセスプロトコルおよび／またはストレージプロトコルを介してアクセス可能である、構成されるストレージ領域であり得る。ストレージプロトコルおよびメモリアクセスプロトコルは、下記に詳細に説明される。ストレージボリューム１６０は、データブロックのシーケンスをメモリ１２０における対応するメモリ位置にマップする物理的ボリュームであり得る。従って、データブロック自体に加えて、ストレージボリューム１６０は、メモリ位置またはデータブロックについての任意の他の情報へのデータブロックのマッピングなどのボリューム情報を含み得る。ボリュームアクセスロジック１５５によって構成され得る、ストレージボリューム１６０のデータブロックは、すべてメモリ１２０に格納され得る。ボリューム情報は、メモリ１２０に含まれ得るかまたは含まれない場合がある。従って、ストレージボリューム１６０がメモリ１２０に含まれるといわれる場合、少なくともストレージボリューム１６０のデータブロック（ストレージボリューム１６０に格納されたデータ）は、メモリ１２０に含まれる。
【００２６】
上記に示されるように、ストレージボリューム１６０は、固体メモリに含まれ得る。個体メモリは、データを格納する、デバイスまたは複数のデバイスの組み合わせを含み得、主として、導体、半導体および絶縁体から作成され、いかなる動く機械的部品も有しないと考えられる。固体メモリは、バイトアドレス指定可能、ワードアドレス指定可能またはブロックアドレス指定可能であり得る。例えば、ほとんどのダイナミックＲＡＭおよびいくらかのフラッシュＲＡＭは、バイトアドレス指定可能であるかまたはワードアドレス指定可能であり得る。フラッシュＲＡＭおよび他の持続性種類のＲＡＭは、ブロックアドレス指定可能であり得る。固体メモリは、ストレージデバイス１０５におけるバス１６５などのデータバスを介して、ストレージデバイス１０５におけるメモリコントローラ１３０などのメモリコントローラに接続するように設計され得る。
【００２７】
固体メモリは、任意の順序で（すなわち、ランダムに）格納されたデータが読み取られかつ／または書き込まれることを可能にするランダムアクセスメモリを含み得る。用語「ランダム」は、データの物理的位置に関わらず、またデータが以前に読み取られたかまたは書き込まれた一片のデータに関係するかどうかに関わらず、任意の一片のデータが一定の時間期間内に戻されかつ／または書き込まれ得るという事実をいう。対照的に、磁気ディスクまたは光ディスクなどのストレージデバイスは、記録媒体または読み取り／書き込みヘッドの物理的な動きに依存し、その結果、検索時間は読み取られる次の項目の物理的位置に基づいて変動し、書き込み時間は書き込まれる次の項目の物理的位置に基づいて変動する。個体メモリの実施例は、ＤＲＡＭと、ＳＲＡＭと、ＮＡＮＤフラッシュＲＡＭと、ＮＯＲフラッシュＲＡＭと、Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ（ＰＲＡＭ）と、ＥＥＰＲＯＭと、ＦｅＲＡＭと、ＭＲＡＭと、ＣＢＲＡＭと、ＰＲＡＭと、ＳＯＮＯＳと、ＲＲＡＭ（登録商標）と、Ｒａｃｅｔｒａｃｋメモリと、ＮＲＡＭと、Ｍｉｌｌｉｐｅｄｅと、Ｔ−ＲＡＭと、Ｚ−Ｒａｍと、ＴＴＲＡＭとを含むが、これらに限定されない。
【００２８】
固体メモリとは対照的に、固体ストレージデバイスは、専用のストレージコントローラを有する固体メモリをパッケージ化するシステムまたはデバイスであり、パッケージ化された固体メモリは、専用のストレージコントローラを介して、標準のストレージハードウェアインタフェースに準拠するハードウェア相互接続を用いてアクセスされ得る。例えば、固体ストレージデバイスは、ＳＡＴＡまたはＳＣＳＩインタフェースを含むフラッシュメモリドライブと、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌインタフェースを介するＳＣＳＩを含むＦｌａｓｈまたはＤＲＡＭドライブと、ＳＡＴＡまたはＳＣＳＩインタフェースを含むＤＲＡＭドライブと、ＵＳＢ（ユニバーサルシリアルバス）インタフェースを有するＵＳＢフラッシュドライブとを含むが、これらに限定されない。
【００２９】
ストレージコントローラ１４０は、補助記憶装置１４５において行われるストレージ動作を容易にするコンポーネントを含み得る。ストレージ動作は、補助記憶装置１４５内の位置からの読み取りまたは補助記憶装置１４５内の位置への書き込みを含み得る。ストレージコントローラ１４０は、ハードウェアコンポーネントを含み得る。あるいはまたはさらに、ストレージコントローラ１４０は、ソフトウェアコンポーネントを含み得る。
【００３０】
補助記憶装置１４５は、フラッシュメモリ、Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ、Ｍｅｍｒｉｓｔｏｒ、ＥＥＰＲＯＭ、磁気ディスク、テープ、または他の媒体などを含むがこれらに限定されない１つ以上の持続性媒体を備えているストレージ領域を含み得る。補助記憶装置１４５は、ストレージデバイス１０５の内部、別のストレージデバイスの一部、サーバの一部、バックアップデバイスの一部、Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋにおけるストレージデバイスか、またはある他の、外部に取り付けられた持続性ストレージであり得る。補助記憶装置１４５における媒体は、ストレージボリューム１６０が格納されるメモリ１２０より潜在的に遅い場合がある。補助記憶装置１４５および／またはストレージコントローラ１４０は、ストレージデバイス１０５の内部、ストレージデバイス１０５の外部にあってそれに連結された物理的に分離したコンポーネント、および／または第２のストレージデバイスにまたはストレージデバイス１０５とは異なるデバイスに含まれ得る。
【００３１】
クライアントコンポーネント１１０は、ストレージデバイス１０５から読み取り、ストレージデバイス１０５に書き込むデバイスを含み得る。クライアントコンポーネント１１０の実施例は、コンピュータ、サーバ、ブレードサーバ、デスクトップコンピュータ、タブレットコンピュータ、ラップトップ、ストレージデバイス、任意の種類のコンピューティングデバイス、またはプロセッサによって実行可能なプロセスを含み得る。
【００３２】
クライアントコンポーネント１１０は、メモリ１７０と、プロセッサ１７５と、通信インタフェース１８０と、メモリ１２０、プロセッサ１２５、通信インタフェース１３５、およびストレージデバイス１３５のメモリコントローラ１３０などのメモリコントローラ１８５とを含み得る。クライアントコンポーネント１１０は、より多いコンポーネント、より少ないコンポーネント、または異なるコンポーネントを含み得る。例えば、クライアントコンポーネント１１０は、ストレージコントローラ１９０、ストレージコンポーネント１９２、複数のストレージコントローラ、複数のストレージコンポーネント、またはこれらの任意の組み合わせを含み得る。あるいは、クライアントコンポーネント１１０は、プロセッサ１７５によって実行されるプロセスだけを含み得る。
【００３３】
ストレージコントローラ１９０および／またはストレージコンポーネント１９２は、クライアントコンポーネント１１０の内部、クライアントコンポーネント１１０に連結された、クライアントコンポーネント１１０の外部の分離したデバイス、および／またはストレージデバイス１０５など、クライアントコンポーネント１１０以外のデバイスに含まれ得る。クライアントコンポーネント１１０のメモリ１７０は、クライアントロジック１９４を含み得る。プロセッサ１７５は、クライアントロジック１９４に含まれるコンピュータ実行可能命令を実行し得る。クライアントコンポーネント１１０のコンポーネント１７０、１７５、１８０、１８５、１９０、および１９２は、ストレージデバイス１０５におけるバス１６５などのバス１９６を介するかまたは任意の他の種類の相互接続を介して、互いに通信し得る。
【００３４】
ストレージシステム１００の動作中、ボリュームアクセスロジック１５５は、クライアントコンポーネント１１０にストレージボリューム１６０へのクライアント側メモリアクセスを提供し得る。クライアント側メモリアクセスは、少なくとも１つのメモリアクセス動作を含み得る。メモリアクセス動作は、例えば、読み取りメモリ動作または書き込みメモリ動作を含み得る。メモリアクセス動作は、ストレージデバイス１０５の通信インタフェース１３５においてクライアントコンポーネント１１０からの要求１９８の受信に応答して、ストレージデバイス１０５によって行われ得る。要求１９８は、例えば、開始メモリオフセット、メモリのサイズ、開始メモリ位置、アクセスするメモリの個数、または要求されたメモリアクセス動作に関係する任意の他の属性を含み得る。リクエスト１９８は、ブロックアドレス指定可能ベース、ワードアドレス指定可能ベース、バイトアドレス指定可能ベース、またはメモリの任意の他の適切な装置の任意のベースで、メモリ１２０をアドレス指定し得る。ボリュームアクセスロジック１５５は、通信インタフェース１３５に、および／または、クライアントコンポーネント１１０など、ストレージデバイス１０５以外のデバイスにストレージボリューム１６０を登録し得る。あるいはまたはさらに、ボリュームアクセスロジック１５５は、ストレージボリューム１６０が位置を定められるストレージデバイス１０５のメモリ１２０に位置（単数または複数）を決定し得る。ボリュームアクセスロジック１５５は、通信インタフェース１３５に、および／または、クライアントコンポーネント１１０など、ストレージデバイス１０５以外のデバイスに位置（単数または複数）を登録し得る。
【００３５】
ボリュームアクセスロジック１５５は、ストレージボリューム１６０がアクセスされ得る仕方を制御しかつ／または指定し得る。例えば、ボリュームアクセスロジック１１６は、ストレージデバイス１０５においてどのボリュームが利用可能であるか、および／またはどの動作が行われ得るかを制御し得る。１つの実施例において、ボリュームアクセスロジック１５５は、現在の、時間、日、月もしくは年、通信インタフェース１３５の一致もしくは位置、クライアントコンポーネント１１０の一致もしくは位置、または、クライアントコンポーネント１１０、ストレージデバイス１０５、相互接続１１５、もしくはストレージデバイス１０５に電力を供給する電源の状態など、ボリュームアクセスロジック１５５によって検出可能である周囲環境の、ある他の属性に基づいて、アクセスを制御し得る。あるいはまたはさらに、ボリュームアクセスロジック１１６は、パスワード、キー、生体認証、または暗号認証を含むがこれらに限定されない認証機構に基づいて、アクセスを制御し得る。
【００３６】
ボリュームアクセスロジック１５５または通信インタフェース１３５は、現在公知であるかもしくは後に発見される任意のメモリアクセスプロトコルを用いてクライアント側メモリアクセスを提供し得る。メモリアクセスプロトコルは、クライアントコンポーネント１１０におけるメモリ１７０などの、第１のデバイスにおけるメモリとストレージデバイス１０５におけるメモリ１２０などの、第２のデバイスにおけるメモリとの間でデータを転送するために用いられる任意の通信プロトコルであり得、ここで、データは、クライアントコンポーネント１１０におけるプロセッサ１７５およびストレージデバイス１０５におけるプロセッサ１２５などの、第１および第２のデバイスにおける中央処理装置（ＣＰＵ）と無関係に転送される。従って、第１のデバイスがオペレーティングシステムを含む実施例において、データは、オペレーティングシステムが関与することなく、第１のデバイスのメモリから第２のデバイスのメモリに転送され得る。ＣＰＵによって実行される命令は、ハードウェアデータコントローラに第１のデバイスのメモリから第２のデバイスのメモリにデータを転送するように示し得るが、メモリ間の実際のデータ転送は、ＣＰＵが関与することなく、完了され得、第１のデバイスがオペレーティングシステムを含む場合、オペレーティングシステムが関与することなく、完了され得る。メモリアクセスプロトコルは、例えば、メモリアクセス動作が第２のデバイスまたはシステムにおいてメモリにおいて行われる要求１９８のフォーマットを記述し得る。
【００３７】
メモリアクセスプロトコルは、例えば、ストレージデバイス１０５における通信インタフェース１３５およびクライアントコンポーネント１１０における通信インタフェース１８０などの１つ以上のハードウェアコントローラを用いて実装され得る。ハードウェアコントローラのメモリアクセスプロトコルおよび電気的特性は、共通の規格の一部であり得る。従って、通信インタフェース１３５または１８０のメモリアクセスプロトコルおよび電気的特性は、１つの規格の一部であり得る。１つの実施例において、アクセスプロトコルは、通信インタフェース１３５および１８０において実装されるＲＤＭＡプロトコルであり得、ここで、メモリアクセスプロトコルならびに通信インタフェース１３５および１８０は、ＩＮＦＩＮＩＢＡＮＤ（登録商標）規格に準拠する。第２の実施例において、メモリアクセスプロトコルは、Ｉｎｔｅｒｎｅｔ  Ｗｉｄｅ  Ａｒｅａ  ＲＤＭＡ  Ｐｒｏｔｏｃｏｌ（ｉＷＡＲＰ）であり得、ここで、ｉＷＡＲＰは、通信インタフェース１３５および１８０において実装され、ここで、通信インタフェース１３５および１８０は、ｉＷＡＲＰおよびＥｔｈｅｒｎｅｔ（登録商標）規格に準拠する。Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ（ＩＥＴＦ）プロトコルであるｉＷＡＲＰ規格は、ＴＣＰ（Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ（伝送制御プロトコル））によるＲＤＭＡである。第３の実施例において、メモリアクセスプロトコルは、通信インタフェース１３５および１８０において実装されるＰＣＩバスマスタリングプロトコルであり得、ここで、通信インタフェース１３５および１８０は、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）規格に準拠する。ＲＤＭＡなどのメモリアクセスプロトコルは、ＴＣＰなどのトランスポートプロトコルによって直接、階層化され得る。
【００３８】
１つ以上の実施例において、ボリュームアクセスロジック１５５は、さらに、現在公知であるかまたは後に発見される任意のストレージプロトコルを用いてブロックレベルアクセスをストレージボリューム１６０に提供し得る。ストレージプロトコルは、ストレージデバイス１０５などのブロックストレージデバイスもしくはシステムとブロックストレージデバイスもしくはシステムにデータを格納しかつ／またはブロックストレージデバイスもしくはシステムからデータを検索する、クライアントコンポーネント１１０などのデバイスもしくはシステムとの間でデータを転送するために用いられる任意の通信プロトコルであり得る。ストレージプロトコルは、例えば、１つ以上のソフトウェアおよび／またはハードウェアのストレージコントローラを用いて実装され得る。ハードウェアストレージコントローラのストレージプロトコルおよび電気的特性は、共通の規格の一部であり得る。１つの実施例において、ストレージプロトコルは、汎用シリアルバスの大容量記憶デバイスクラス（ＵＳＢ  ＭＳＣまたはＵＭＳ）であり得、汎用シリアルバスの大容量記憶デバイスクラス（ＵＳＢ  ＭＳＣまたはＵＭＳ）は、ＵＳＢ規格に準拠する、相互接続１１５などのハードウェアバス上で実行するＵＳＢ  Ｉｍｐｌｅｍｅｎｔｅｒｓ  Ｆｏｒｕｍによって規定される一式のコンピューティング通信プロトコルである。第２の実施例において、ストレージプロトコルは、ＳＣＳＩコマンドプロトコルであり得る。第３の実施例において、ストレージプロトコルは、ＳＡＴＡプロトコルであり得る。ストレージプロトコルのさらなる実施例は、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）と、Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ｉＳＣＳＩ）とを含む。あるいはまたはさらに、ボリュームアクセスロジック１５５は、Ｆｉｂｒｅ  ＣｈａｎｎｅｌによるＳＣＳＩ、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）によるＳＣＳＩ  ＲＤＭＡ  Ｐｒｏｔｏｃｏｌ（ＳＲＰ）、ＴＣＰ／ＩＰによるｉＳＣＳＩ、または現在公知であるかもしくは将来発見される、ストレージプロトコルとデータ転送プロトコルとの任意の他の組み合わせなど、データ転送プロトコルによってデータを転送する任意のストレージプロトコルを用いてブロックレベルアクセスを提供し得る。
【００３９】
ストレージプロトコルを用いてストレージボリューム１６０にアクセスすることは、メモリアクセスプロトコルを用いてストレージボリューム１６０にアクセスすることより遅い。メモリアクセスプロトコルとは対照的に、クライアントコンポーネント１１０のＣＰＵは、ブロックストレージデバイスまたはシステムにデータを転送中、ストレージコントローラと相互に作用し得、ここで、ストレージコントローラは、ストレージプロトコルを実装する。従って、ストレージプロトコルは、メモリアクセスプロトコルとは異なる。
【００４０】
ボリュームアクセスロジック１５５を介してブロックアドレス指定可能クライアント側メモリアクセスおよび／またはブロックレベルアクセスを提供することによって、ストレージデバイス１０５は、少なくとも１つの実施例の実装においてブロックストレージデバイスであると考えられ得る。ブロックストレージデバイスはまた、ブロックデバイスとも呼ばれ得る。ブロックデバイスは、５１２または１０２４バイトなどの所定のサイズのブロックでデータを格納する。所定のサイズは、構成可能であり得る。ブロックデバイスは、ソフトウェアおよび／もしくはハードウェアストレージコントローラ、ならびに／または、通信インタフェース１８０などの通信インタフェースを介してアクセスされる。他のブロックデバイスの実施例は、スピニングディスクと、テープドライブと、フロッピー（登録商標）ディスクドライブと、ＵＳＢフラッシュペンドライブとを含む。
【００４１】
ボリュームアクセスロジック１５５は、メモリ１２０および／または補助記憶装置１４５を１つ以上のボリュームに再分割し得る。ストレージデバイス１０５のメモリ１２０におけるストレージボリューム１６０などのボリュームのうちの各１つは、任意のアクセスプロトコルおよび／またはストレージプロトコルを介してアクセス可能である構成されるストレージ領域であり得る。アクセスプロトコルおよびストレージプロトコルは、上記に説明される。
【００４２】
補助記憶装置１４５および／またはストレージコンポーネント１９２は、任意のブロックデバイスを含み得る。ブロックデバイスの実施例は、ハードディスクドライブ、ＣＤ−ＲＯＭドライブ、テープドライブ、固体ストレージデバイス、フラッシュドライブ、または任意の他の大容量記憶デバイスを含むが、これらに限定されない。
【００４３】
クライアントロジック１９４は、メモリアクセスプロトコルによるクライアント側メモリアクセスを用いて、ストレージデバイス１０５のメモリ１２０においてストレージボリューム１６０に対してメモリアクセス動作を行い得る。あるいはまたはさらに、クライアントロジック１９４は、動作を行って、接続されている場合ストレージデバイス１０５を発見し得るか、またはストレージデバイス１０５においてアクセス可能であり得る利用可能なボリュームを発見し得る。あるいはまたはさらに、クライアントロジック１９４は、管理動作を行って、ストレージボリューム１６０に関連する属性またはメタデータを修正し得る。１つの実施例において、クライアントロジック１９４は、管理動作を行って、ストレージボリューム１６０に関連する人間読み取り可能ラベルを設定し得る。第２の実施例において、クライアントロジック１９４は、管理動作を行って、クライアントコンポーネント１１０または他のクライアントコンポーネントに利用可能である動作を変更し得る。管理動作は、例えば、複数のクライアントによるストレージボリューム１６０への共用アクセスを調整するために用いられ得る。
【００４４】
クライアントロジック１９４は、クライアントロジック１９４によって要求されたかまたは要求される予定の一式の１つ以上のメモリアクセス動作についての情報をオブザーバロジック１５０に通信する動作を行い得る。例えば、クライアントロジック１９４は、クライアントコンポーネント１１０の通信インタフェース１８０を介して通知メッセージを送信し得る。オブザーバロジック１５０は、ストレージデバイス１０５の通信インタフェース１３５を介して通知メッセージを受信し得る。通知メッセージは、クライアントロジック１９４によって要求される一式のメモリアクセス動作に先行し得るかまたは後続し得る。通知メッセージは、一式のメモリアクセス動作の属性を識別し得る。あるいはまたはさらに、クライアントロジック１９４は、オブザーバロジック１５０によって直接観測可能であるかまたは識別されるメモリアクセス動作を行い得る。例えば、メモリアクセス動作を行う要求１９８は、イミディエート値動作を有するＲＤＭＡ書き込みなどの通知情報を含み得る。ストレージボリューム１６０におけるメモリ１２０への書き込みに加えて、イミディエート値動作による書き込みは、イミディエート値を有するＲＤＭＡ書き込みにおけるクライアントロジック１９４によって指定されるイミディート値を含む通知をオブザーバロジック１５０が受信するようにさせ得る。値は、メモリアクセス動作の１つ以上の属性を含み得る。例えば、値は、ＲＤＭＡ書き込み中にイミディエート値動作によってメモリ１２０のどの部分が書き込まれるかを示し得る。あるいはまたはさらに、クライアントロジック１９４は、オブザーバロジック１５０が検査し得る、ストレージデバイス１０５における状態を作る動作を行い得る。例えば、クライアントロジック１９４は、クライアント側メモリアクセス動作を行って、一式のメモリアクセス動作についての情報をストレージデバイス１０５におけるメモリ１２０の特定の領域に格納し得る。その領域に格納された情報は、例えば、行われる各メモリアクセス動作のオフセット、サイズ、および／または種類を含み得る。オブザーバロジック１５０は、メモリアクセス動作の１つ以上の属性を識別するために、領域を更新のため検査し得る。
【００４５】
クライアントロジック１９４は、クライアントロジック１９４の能力を用い得る任意の他のロジックと組み合わせられ得る。１つの実施例において、クライアントロジック１９４は、アプリケーションプログラミングインタフェース（ＡＰＩ）を実装し得、ストレージボリューム１６０に対して特定用途向け動作を行うために、データベースサーバなどのアプリケーションロジックは、アプリケーションプログラミングインタフェース（ＡＰＩ）を呼び出し得る。第２の実施例において、クライアントロジック１９４は、ストレージボリューム１６０に対してブロック動作を行うために、アプリケーションロジックが呼び出し得るブロックレベルＡＰＩを提供するデバイスドライバを含み得る。第３の実施例において、クライアントロジック１９４は、ストレージボリューム１６０に対して動作を行うために、アプリケーションロジックが通信し得るレジスタレベルおよび／またはメモリマップされたインタフェースを提供する回路として実装され得る。アプリケーションロジックの実施例は、ユーザが対話するプログラム、オペレーティングシステム、デバイスドライバ、ファイルシステム、状態マシン、データベース、またはクライアントロジック１９４を用いてストレージボリューム１６０に対して動作を行う任意の他のロジックを含み得る。
【００４６】
オブザーバロジック１５０は、ストレージボリューム１６０および／またはストレージデバイス１０５において行われる、クライアントロジック１９４によって要求される動作を観測するかさもなければ識別し得る。オブザーバロジック１５０は、クライアントコンポーネント１１０および／またはストレージデバイス１０５の間での直接通信に基づいて要求される動作を識別し得る。例えば、オブザーバロジック１５０は、通信インタフェース１３５においてクライアントロジック１９４から受信される入力通知メッセージに対してリスンし得る。あるいは、またはさらに、オブザーバロジック１５０は、クライアントコンポーネント１１０によって要求される動作を受動的に監視し得る。例えば、オブザーバロジック１５０は、クライアントロジック１９４によって行われる動作の結果として受信される通知メッセージに対してリスンし得る。あるいは、またはさらに、オブザーバロジック１５０は、クライアントロジック１９４、通信インタフェース１３５、または別のハードウェアコンポーネントによって作られる状態に対して検査し得る。例えば、オブザーバロジック１５０は、クライアント側メモリアクセスを用いるクライアントコンポーネント１１０によって、通信インタフェース１３５によって、または別のハードウェアコンポーネントによって、アクセス可能であるメモリ１２０の１つ以上の領域の内容を読み取り得る。例えば、メモリ領域は、１つ以上のフラグを含み得、１つ以上のフラグは、メモリ１２０の１つ以上の部分が補助記憶装置１４５に最後にコピーされて以来、メモリ１２０の１つ以上の部分がメモリアクセス動作によって更新されたかどうかを示す。
【００４７】
一式のメモリアクセス動作を識別することに応答して、オブザーバロジック１５０は、さらなるアクションをとり得る。１つの実施例において、さらなるアクションは、（動作の種類、動作数、影響されるメモリのサイズ、および／または各動作のメモリ位置を含むが、これらに限定されない）メモリアクセス動作に関係する統計を決定することを含み得る。第２の実施例において、さらなるアクションは、メモリアクセス動作によって書き込まれたかまたはさもなければ影響されたメモリ１２０の領域を追跡するかまたは識別することを含み得る。オブザーバロジック１５０は、メモリ１２０の影響された領域の内容を補助記憶装置１４５に持続し得、ブロックデバイス、外部サーバ、および／またはバックアップデバイスにメモリ１２０の影響された領域の内容を外部に記憶し、かつ／またはそれを複製する。あるいは、オブザーバロジック１５０は、メモリアクセス動作に関係する任意の他のアクションをとり得る。
【００４８】
メモリアクセス動作は、オブザーバロジック１５０がメモリアクセス動作を識別することを待つことなく、ストレージデバイス１０５において完了し得る。あるはまたはさらに、メモリアクセス動作は、オブザーバロジック１５０がメモリアクセス動作を識別することに応答して任意のさらなるアクションをとることを待つことなく、ストレージデバイス１０５において完了し得る。従って、クライアントロジック１９４は、書き込み動作を行う要求１９８が相互接続１１６にわたって走行し、ストレージデバイス１０５がメモリ１２０にデータを書き込む時間量で、ストレージボリューム１６０に書き込み動作を行い得る。ストレージプロトコルおよび／または補助記憶装置１４５にデータを書き込むことに関連するオーバヘッドは、回避され得る。
【００４９】
クライアントコンポーネント１１０およびストレージデバイス１０５は、任意の数の方法で構成され得る。１つの実施例において、ストレージデバイス１０５は、コンピュータに含まれ得る。例えば、プロセッサ１２５はコンピュータの中央処理装置（ＣＰＵ）であり得、メモリ１２０はコンピュータのメモリであり得、コンピュータは通信インタフェース１３５を含み得る。あるいはまたはさらに、ストレージデバイス１０５は、ＰＣＩデバイス、ＰＣＩ−Ｘデバイス、ＰＣＩｅデバイス、ＨＴＸデバイス、またはコンピュータに内部的または外部的に接続される任意の他の種類の周辺装置を含むがこれらに限定されない、コンピュータの周辺装置であり得る。
【００５０】
第２の実施例において、ストレージデバイス１０５は、ストレージデバイス１０５のデータにアクセスするコンピュータまたは別の種類のコンピューティングデバイスに追加され得る。例えば、ストレージデバイス１０５は、コンピュータにインストールされるデバイスであり得、ここで、クライアントコンポーネント１１０は、コンピュータの中央処理装置（ＣＰＵ）によって実行されるプロセスである。ストレージデバイス１０５におけるメモリ１２０は、コンピュータのＣＰＵによってアクセスされるメモリとは異なり得る。ストレージデバイス１０５におけるプロセッサ１２５は、コンピュータのＣＰＵとは異なり得る。
【００５１】
第３の実施例において、ストレージデバイス１０５、クライアントコンポーネント１１０、またはその両方は、Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＮＵＭＡ）を用いて実装され得る。ＮＵＭＡにおいて、プロセッサ１２５または１７５は、ポイントツーポイントリンクの交換ファブリックを介して一緒に接続される複数のプロセッサコアを備え得る。メモリコントローラ１３０または１８５は、複数のメモリコントローラを含み得る。メモリコントローラの各１つは、プロセッサコアのうちの対応する１つに電気的に連結され得る。複数のメモリコントローラの各１つは、その他のメモリコントローラとは異なる、メモリ１２０または１７０の部分にサービスし得る。
【００５２】
第４の実施例において、ストレージデバイス１０５のプロセッサ１２５は、バス１６５に電気的に連結される複数のプロセッサを含み得る。メモリ１２０、通信インタフェース１３５、メモリコントローラ１３０、およびストレージコントローラ１４０に含まれる複数のメモリなどの、ストレージデバイス１０５の他のコンポーネントもまた、バス１６５に電気的に連結され得る。
【００５３】
第５の実施形態において、ストレージシステム１００は、複数のストレージデバイス、複数のストレージボリューム、および／または複数のクライアントロジックを含み得る。ストレージシステム１００は、１つ以上のクライアントロジックに、より大きくかつ／またはより速いストレージボリュームとして複数のストレージデバイスおよび／またはストレージボリュームを提示し得る。例えば、クライアントロジック１９４は、複数のストレージデバイスおよび／または複数のストレージボリュームを実際に存在するより少ないストレージボリュームとして処理するアプリケーションが処理することを容易にするそれぞれのアプリケーションにインタフェースを提供し得る。例えば、クライアントロジック１９４は、ストレージデバイス１０５上の複数のボリュームおよび／または複数のストレージデバイスからの複数のボリュームを単一のストレージボリュームとしてアプリケーションに提示し得る。集約は、ストライピング、レプリケーション、パリティ、部分データ冗長性、現在公知であるかもしくは後に発見される任意の他の集約技術、または集約技術の任意の組み合わせを用い得る。
【００５４】
第６の実施例において、クライアントコンポーネント１１０は、他のシステムおよび／またはデバイスに追加のサービスを提供し得る。例えば、クライアントコンポーネント１１０は、Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ（ＮＡＳ）機器を含み得る。あるいはまたはさらに、クライアントコンポーネント１１０は、Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ（ＲＡＩＤ）ヘッドを含み得る。あるいはまたはさらに、クライアントコンポーネント１１０は、ストレージデバイス１０５に格納されたデータへのファイルレベルアクセスを提供し得る。
【００５５】
あるいはまたはさらに、クライアントコンポーネント１１０は、ストレージプロトコルを用いてストレージデバイス１０５に格納されたデータへのブロックレベルアクセスを提供し得る。例えば、クライアントロジック１９４は、ＳＣＳＩなどの１つ以上のストレージプロトコルを実装し得る。従って、アプリケーションまたはハードウェアは、クライアントロジック１９４においてストレージプロトコルの実装によって、ストレージデバイスにデータを転送し得、ストレージデバイスからデータを転送し得る。ストレージプロトコルの実装は、適切な場合、メモリアクセスプロトコルを用いてストレージデバイス１０５にアクセスし得る。あるいはまたはさらに、ストレージプロトコルの実装は、例えば、ストレージデバイス１０５とさらに通信することなしにストレージプロトコルによって必要とされ得るアプリケーションに肯定応答を戻すことによって、ストレージデバイス１０５との対話を減らし得る。
【００５６】
第７の実施例において、クライアントコンポーネント１１０は、クライアント要素１１０、またはクライアントコンポーネント１１０が連結されるかまたは含まれるコンピューティングデバイスに対してローカルのメモリの拡張としてストレージデバイス１０５を利用し得る。補助記憶装置１４５への低待ち時間アクセスおよび持続性などの、ストレージデバイス１０５の追加の能力は、クライアントコンポーネント１１０によって活用されて、アプリケーションクラッシュ、クライアントコンポーネント１１０に対する電力損失、またはクライアントコンポーネント１１０における任意の他のエラーイベントもしくは予期しないイベントに対して保護し得る。クライアントコンポーネント１１０は、例えば、ストレージデバイス１０５におけるストレージボリューム１６０にアプリケーションデータおよび／またはアプリケーション状態情報を格納することによってローカルメモリ１７０の拡張を提供し得る。クライアントコンポーネント１１０は、クライアントコンポーネント１１０は、ＰＣＩデバイス、ＰＣＩ−Ｘデバイス、ＰＣＩｅデバイス、ＨＴＸデバイス、またはコンピュータに内部的または外部的に接続される任意の他の種類の周辺装置を含むがこれらに限定されない、コンピュータの周辺装置であり得る。クライアントコンポーネント１１０は、メモリマップされたＩ／Ｏを用いて、図１に例示されるストレージデバイス１０５に含まれるボリューム１６０などの１つ以上のストレージデバイスに格納される１つ以上のストレージボリュームを表すコンピュータにアドレス空間を提供し得る。メモリマップされたＩ／Ｏは、アドレス指定可能メモリとしての物理的デバイスにアクセスすることを容易にする。コンピュータは、補助記憶装置１４５への低待ち時間アクセスおよび持続性などの、ストレージデバイス１０５の特徴を有する追加のメモリとして提示されたアドレス空間を用い得る。従って、例えば、アプリケーションのインスタンスまたは仮想マシンインスタンスが第１のデバイスにおいて故障した場合、アプリケーションまたは仮想マシンは、同じアプリケーションおよび／または同じ仮想マシンを実行する第２のデバイスにほとんど直ちにフェイルオーバーし得る。第２のデバイスにおけるアプリケーションまたは仮想マシンは、メモリがストレージデバイス１０５に格納されているので、第１のデバイスによって用いられるメモリと同じメモリを用いて続行し得る。
【００５７】
あるいは、またはさらに、クライアントコンポーネント１１０は、アプリケーションに対してチェックポイントを行い得る。チェックポイントを行うことは、ストレージデバイス１０５のストレージボリューム１６０にアプリケーションデータおよび／またはアプリケーション状態のすべてまたは一部分を周期的に格納することを伴い得る。チェックポイントを行うことは、スーパコンピューティングアプリケーションの場合などいくつかの種類のアプリケーションにおいて一般的である。従って、アプリケーションまたは仮想マシンのインスタンスが第１のデバイスにおいて故障した場合、アプリケーションまたは仮想マシンは、第２のデバイス上でほとんど直ちにフェイルオーバーし得る。アプリケーションまたは仮想マシンは、行われた最後のチェックポイントにおいて開始して続行し得る。
【００５８】
あるいはまたはさらに、複数のクライアントコンポーネントは、共有メモリとしてストレージデバイス１０５を利用し得る。例えば、クライアントコンポーネントは、大データセットの大規模並列化および／または共有に依存するアプリケーションロジックを含み得るかまたはそのアプリケーションロジックと相互運用し得る。大規模並列化を用い得るアプリケーションロジックの実施例は、タンパク質フォールディング遺伝的アルゴリズム、耐震解析、または、各結果が前の結果に基づく任意の他の計算集中アルゴリズムおよび／または反復計算を行うロジックを含む。アプリケーションロジックは、ストレージデバイス１０５のストレージボリューム１６０にアプリケーションデータ、アプリケーション状態、および／またはチェックポイントデータを格納し得る。補助記憶装置１４５への低待ち時間アクセスおよび持続性などの、ストレージデバイス１０５の追加の能力は、アプリケーションクラッシュ、クライアントコンポーネントに対する電力損失、または任意のクライアントコンポーネントにおける任意の他のエラーイベントもしくは予期しないイベントに対して保護するために、クライアントコンポーネント１１０によって活用され得る。クライアントコンポーネントは、アトミックアクセスを提供する方法でストレージデバイス１０５にアクセスし得る。例えば、クライアントコンポーネントによって要求されるメモリアクセス動作は、フェッチアンドアッド操作、比較交換操作、または現在公知であるかもしくは後に発見される任意の他のアトミック操作を含むがこれに限定されないアトミック操作を含み得る。アトミック操作は、グループとして実行するかまたは全く実行しない操作の組み合わせであり得る。操作の組み合わせを実行した結果は、操作の組み合わせの最初の操作と最後の操作の間で、操作の組み合わせ以外にいかなる操作も実行されなかったかのようであり得る。従って、クライアントコンポーネントは、データの汚染を引き起こすことなくストレージデバイス１０５に安全にアクセスし得る。
【００５９】
クライアントロジック１９４、オブザーバロジック１５０、および／またはボリュームアクセスロジック１５５は、共に位置を定められか、分離されるか、または組み合わされ得る。組み合わされたロジックによって行われるアクションは、組み合わされたロジックによって行われる特徴の集合体と同じかまたは類似する特徴を行い得る。第１の実施例において、すべての３つのロジックは、単一のデバイスに共に位置を定められ得る。第２の実施例において、ボリュームアクセスロジック１５５およびオブザーバロジック１５０は、単一のロジックに組み合わせられ得る。第３の実施形態において、クライアントロジック１９４およびオブザーバロジック１５０は、単一のロジックに組み合わせられ得る。第４の実施例において、クライアントロジック１９４およびボリュームアクセスロジック１５５は、組み合わせられ得る。第５の実施形態において、オブザーバロジック１５０は、メタデータサーバなど、ストレージデバイス１０５とは異なるデバイスにあり得る。メタデータサーバは、動作の処理に参加し得る１つ以上のハードウェアおよび／またはソフトウェアの実体であり得るが、ストレージボリューム１６０に格納されたデータを直接取り扱わない場合がある。メタデータサーバは、統計、座標持続性、座標データ複製を追跡し得、かつ／またはメモリアクセス動作に関係する任意の他のアクティビティを行い得る。
【００６０】
クライアントロジック１９４、オブザーバロジック１５０、および／またはボリュームアクセスロジック１５５は、コンピュータコードを含み得る。コンピュータコードは、プロセッサ１７５または１２５によって実行可能な命令を含み得る。コンピュータコードは、Ｃ、Ｃ＋＋、Ｃ＃、Ｊａｖａ（登録商標）、またはこれらの任意の組み合わせなどの、現在公知であるかまたは将来的に発見される任意のコンピュータ言語で書かれ得る。一実施例において、コンピュータコードは、ファームウェアであり得る。あるいはまたはさらに、クライアントロジック１９４のすべてもしくは一部分、オブザーバロジック１５０、ボリュームアクセスロジック１５５および／またはプロセッサ１７５もしくは１２５は、回路として実装され得る。例えば、回路は、クライアントロジック１９４の特徴を行うように構成されるＦＰＧＡ（フィールドプログラマブルゲートアレイ）、オブザーバロジック１５０、および／またはボリュームアクセスロジック１５５を含み得る。あるいは、またはさらに、回路は、クライアントロジック１９４の特徴を行うように構成されるＡＳＩＣ（特定用途向け集積回路）、オブザーバロジック１５０、および／またはボリュームアクセスロジック１５５を含み得る。あるいは、またはさらに、クライアントロジック１９４の一部分、オブザーバロジック１５０、および／またはボリュームアクセスロジック１５５ならびにプロセッサ１２５は、通信インタフェース１３５もしくは１８０の一部または他のハードウェアコンポーネントとして実装され得る。例えば、書き込み動作が行われる場合、通信インタフェース１３５もしくは１８０または他のハードウェアコンポーネントは、メモリ１２０もしくは１７０の領域を修正し得る。オブザーバロジック１５０は、メモリの領域を周期的に検査し得、領域および領域に関連するストレージボリューム１６０の内容に基づいてさらなるアクションをとり得る。さらなるアクションは、現在行われていてかつ／または過去に行われた動作に関係する統計を決定すること、現在書き込まれていてかつ／またはこれまで書き込まれ、かつ／または現在読み取られていてかつ／またはこれまで読み取られた領域を識別すること、補助記憶装置１４５に領域の内容を持続すること、異なるストレージボリューム、外部サーバ、および／またはバックアップデバイスに領域の内容を複製すること、および／または動作に関係する任意のアクションをとることを含み得る。
【００６１】
クライアントロジック１９４によって要求される動作を観測するかまたは識別する機構および動作の識別に応答してとられるアクションは、任意の多数の形式をとり得る。特定の機構は、とりわけ、個々の動作待ち時間、個々のクライアントコンポーネントからの１秒当りの動作、複数のクライアントコンポーネントからの１秒当りの集合体動作、クライアントコンポーネント１１０の計算リソースに対してなされる要求、ストレージデバイス１０５の計算リソースまたはオブザーバロジック１５０に対してなされる要求間のトレードオフのバランスをとり得る。
【００６２】
あるいはまたはさらに、ストレージシステム１００は、行われるメモリアクセス動作を観測または識別を行わない場合がある。あるいはまたはさらに、ストレージシステム１００は、メモリアクセス動作の特定の知識なしに１つ以上のアクションをとり得る。例えば、ストレージシステム１００は、補助記憶装置１４５にストレージボリューム１６０の全内容を持続し、別のストレージデバイス、外部サーバおよび／またはバックアップデバイスにストレージボリューム１６０の全内容を複製し、かつ／またはストレージボリューム１６０に関係するある他のアクションをとり得る。あるいはまたはさらに、ストレージデバイス１０５は、ストレージボリューム１６０の内容を補助記憶装置１４５の内容と比較し得る。あるいはまたはさらに、ストレージデバイス１０５は、計算されたハッシュ値を用いて、ストレージボリューム１６０のどの領域が修正されたかを決定し得る。計算されたハッシュ値は、２つの異なる入力バッファに対して異なる値を有することが高い可能性で予期され、入力バッファの１つまたは両方より小さい場合がある計算された出力であり得る。計算されたハッシュ値の実施例は、チェックサムと、周期冗長検査コードと、暗号ハッシュコードとを含む。ストレージデバイス１０５は、スケジュールに従うかまたはハードウェア中断などの特定のイベントに応答して、システム遮断の前に、メモリアクセス動作の知識なしに周期的にアクションを行い得る。
【００６３】
図２は、ストレージシステム１００のロジックの実施例のフロー図を例示する。図２に例示される実施例において、クライアントコンポーネント１１０は、メモリアクセス動作を要求し、オブザーバロジック１５０は、ストレージデバイス１０５において行われる動作を識別する。ストレージシステム１００のロジックは、追加か、異なるか、またはより少ない動作を含み得る。動作は、図２に例示される順序とは異なる順序で実行され得る。
【００６４】
クライアントロジック１９４は、１つ以上の通知メッセージをストレージデバイス１０５（２００）にオプションで送信することによって始まり得る。通知メッセージ（単数または複数）の受信に応答して、オブザーバロジック１５０は、１つ以上の次に行われる動作を通知され得る（２０５）。通知メッセージ（単数もしくは複数）は、例えば、動作に関連する一意の名前、行われるべき動作の種類、動作が行われるべきストレージボリューム１６０、動作が行われるストレージボリューム１６０内の位置、動作が行われるデータのサイズ、および／または行われるべき動作の他の属性をオブザーバロジック１５０に示し得るかまたはオブザーバロジック１５０に提供し得る。
【００６５】
通知されたことに応答して（２０５）、オブザーバロジック１５０は、１つ以上のアクションをとることよって反応し得る（２１０）。アクションは、例えば、行われるべき動作に関する統計を集約すること、書き込まれるかもしくは読み取られるべきストレージボリューム１６０の領域を追跡すること、および／または動作に関係するある他のアクションを含み得る。
【００６６】
あるいはまたはさらに、クライアントロジック１９４は、１つ以上のクライアント側メモリアクセス動作を行うことによって始まるかまたは継続し得る（２１５）。クライアント側メモリ動作は、オプションでオブザーバロジック１５０に動作が通知されるようにし得る（２２０）。例えば、クライアント側メモリ動作を行う際に、メモリアクセス動作の１つ以上の属性を識別する追加の情報は、メモリアクセス動作を行う要求１９８においてストレージデバイス１０５に送信され得る。
【００６７】
オブザーバロジック１５０に動作が通知されるようにし得、かつ／またはオブザーバロジック１５０にある追加の情報を伝えさせ得る実施例のクライアント側メモリ動作は、即時操作によるＲＤＭＡ書き込みである。即時操作によるＲＤＭＡ書き込みは、ストレージボリューム１６０に関連するメモリ領域に対して実行され得る。即時操作によるＲＤＭＡ書き込みによって指定されるイミディエート値は、動作に関連する一意の名前、行われるメモリアクセス動作の種類、メモリアクセス動作が行われるストレージボリューム１６０、メモリアクセス動作が行われるストレージボリューム１６０内の位置、および／またはメモリアクセス動作が行われるデータのサイズをストレージデバイス１０５に伝え得る。あるいはまたはさらに、イミディエート値は、行われる動作の任意の他の属性、異なる動作の任意の属性、またはバッチの動作の任意の属性を含み得る。
【００６８】
通知されることに応答して（２２０）、オブザーバロジック１５０は、１つ以上のアクションをとり得る（２２５）。アクションは、現在行われ、そして／または過去に行われたメモリアクセス動作についての統計を集約すること、書き込まれたかまたは読み取られたストレージボリューム１６０の領域を追跡すること、補助記憶装置１４５に追跡された領域の内容を持続すること、補助記憶装置１４５、外部サーバ、および／またはバックアップデバイスにおけるボリュームに、追跡された領域の内容を複製することを含み得る。
【００６９】
クライアントロジック１９４は、１つ以上のアクションをとるクライアントコンポーネント１１０によってオプションで継続し得（２３０）、このことは、ストレージデバイス１０５において完了した１つ以上のメモリアクセス動作がオブザーバロジック１５０に通知されるようにする（２３５）。例えば、クライアントコンポーネント１１０は、ストレージデバイス１０５に通知メッセージを送信し得る。通知メッセージは、動作に関連する一意の名前、行われたメモリアクセス動作の種類、メモリアクセス動作が行われたストレージボリューム１６０、メモリアクセス動作が行われたストレージボリューム１６０内の位置、および／またはメモリアクセス動作が行われたデータのサイズ、および／または行われたメモリアクセス動作のある他の属性をオブザーバロジック１５０に示し得る。
【００７０】
通知されることに応答して（２３５）、オブザーバロジック１５０は、１つ以上のアクションをとり得る（２４０）。アクションは、現在行われかつ／または過去に行われたメモリアクセス動作についての統計を集約すること、書き込まれたかまたは読み取られたストレージボリューム１６０の領域を追跡すること、補助記憶装置１４５に追跡された領域の内容を持続すること、または、補助記憶装置１４５、外部サーバ、および／もしくはバックアップデバイスにおけるボリュームに、追跡された領域の内容を複製することを含み得る。
【００７１】
クライアントロジック１９４が行うべき追加の動作を有する場合、クライアントロジック１９４は、後に行われるべきメモリアクセス動作をオブザーバロジック１５０に通知することによって（２００）、またはメモリアクセス動作（単数もしくは複数）を行うことによって（２１５）繰り返し得る。あるいは、さらなる動作が行われることにはなっていないが、追加の動作が予期される場合、クライアントロジック１９４は、１つの実施例において、追加の動作が実行する準備ができるのを待ち得る（２１５）。
【００７２】
行われたアクションおよび／または受信された通知は、複数の動作についての情報を集約し得る。データは、行われた動作の種類、動作（単数または複数）が行われたストレージボリューム１６０、動作（単数または複数）が行われたストレージボリューム１６０の領域、および／または動作（単数または複数）のある他の属性に基づいて集約され得る。
【００７３】
あるいはまたはさらに、メモリアクセス動作を行う前、行っている間、行った後、クライアントロジック１９４によってとられるアクションは、ストレージデバイス１０５、ストレージボリューム１６０、または通信インタフェース１３５とは別個であるがおそらく関連する手段を介して、オブザーバロジック１５０に通知されようにし得る。１つの実施例において、クライアントロジック１９４は、オブザーバロジック１５０にメッセージを送信し得、メッセージは、メモリアクセスコマンドが送信される通信インタフェース１８０とは異なる通信インタフェースを用いてかつ／または異なる種類の通信インタフェースを用いて、一式の１つ以上のメモリアクセス動作についての情報を伝える。第２の実施例において、クライアントロジック１９４は、動作についてより多くを知るために、ストレージデバイス１０５とは異なるストレージデバイス、ストレージボリューム１６０および／またはオブザーバロジック１５０がメモリ１２０の領域を検査することを容易にするメモリ領域に対して一式の動作を行い得る。検査されるメモリ１２０の領域は、進行中の動作についての情報を保持するスクラッチメモリ領域を含み得る。
【００７４】
クライアントコンポーネント１１０がストレージデバイス１０５を切断するかもしくはストレージデバイス１０５から切断されるかまたはタイムアウト満了などのイベントに応答して、オブザーバロジック１５０は、１つ以上のアクションをとり得る。例えば、アクションは、ストレージボリューム１６０の任意の領域が書き込まれたかもしくは読み取られたかどうかを検査すること、補助記憶装置１４５に領域の内容を持続すること、別のストレージデバイス、外部サーバ、および／もしくはバックアップデバイスに、領域の内容を複製すること、ならびに／またはメモリアクセス動作に関係するある他のアクションを含み得る。
【００７５】
ストレージシステム１００の１つの利点は、クライアントロジック１９４がオブザーバロジック１５０からのいかなるアクションまたは応答も待つことなく、図２に例示される実施例のロジックを実行し続け得ることであり得る。あるいはまたはさらに、クライアントロジック１９４は、図２に例示される実施例のロジックを実行し続ける前に、オブザーバロジック１５０からのアクションおよび／または応答を待ち得る。
【００７６】
ストレージシステム１００は、最高速の非持続性信号技術による場合を除き、以前に達成不可能であった性能レベルに近づく速度でデータを格納することを容易にする。従って、株式取引、データベース、または任意の他の種類のアプリケーションなどのアプリケーションは、最高速のネットワーキングフィードの理論的限界に近い速度で持続性ストレージにデータを格納し得る。クラスタ技術は、安全なバッファキャッシュを実装して、非持続性態様でのみ利用可能である速度でメモリの中におよびメモリから外に処理データセットを交換し得る。
【００７７】
クライアント側メモリアドレス指定可能ストレージは、並行して同期してまた非同期で異なる記憶媒体に存在し得るアプリケーションを作ることを容易にし得る。アプリケーションが何かの理由で故障した場合、本発明は、異なるマシン上で同一のアプリケーション構成にダイナミックに回復力に富むフェイルオーバーまたはリカバリを作るベースを提供する。
【００７８】
クライアントコンポーネント１１０におけるインタフェース１８０のような複数の通信インタフェースは、通信インタフェースを横切る性能を集約するために、かつ／または、通信インタフェースもしくは対応する相互接続のいずれでも故障するかまたはさもなければ使用不能になった場合、フェイルオーバーに対して備えるために、用いられ得る。例えば、クライアントロジック１９４および／またはクライアントコンポーネント１１０におけるアプリケーションは、ロードバランシング機構を用いることによって、通信インタフェースおよび／または対応する相互接続を横切ってメモリアクセス動作に対する要求をディスパッチし得る。ロードバランシング機構の実施例は、ラウンドロビン技術、帯域幅バランシング技術、および／または、現在公知でありまたは後に発見される任意のロードバランシング機構を含み得る。あるいはまたはさらに、動作が成功裏に完了しない場合、および／または相互接続１１５が切断され、論理接続が切断され、またはクライアントコンポーネント１１０とストレージデバイス１０５との間の通信の信頼性に関する任意の他のイベントなど、別のイベントが起った場合、クライアントコンポーネント１１０は、フェイルオーバー機構を用い得る。
【００７９】
図３は、ストレージシステム１００におけるメモリアクセス動作を観測するフロー図を例示する。ロジックは、追加の動作、異なる動作、またはより少ない動作を含み得る。動作は、図に例示される順序とは異なる順序で実行され得る。
【００８０】
ストレージデバイス１０５のメモリ１２０に対するメモリアクセス動作を行う要求１９８は、ストレージデバイス１０５の通信インタフェース１３５において受信され得る（３１０）。要求１９８は、メモリアクセスプロトコルに準拠し得る。
【００８１】
メモリアクセス動作は、要求１９８に応答してメモリ１２０の一部分に対して通信インタフェース１３５によって行われ得る（３２０）。メモリの部分は、ストレージボリューム１５５に含まれ得、メモリの全体は、例えばメモリ１２０に含まれ得る。
【００８２】
メモリアクセス動作の１つ以上の属性が識別され得る（３３０）。例えば、オブザーバロジック１５０は、通信インタフェース１３５がメモリアクセス動作を完了させた後、クライアントコンポーネント１１０から通知メッセージを受信するかまたはストレージデバイス１０５において通信インタフェース１３５からメモリアクセス動作の属性を受信することによって、メモリ１２０の部分がメモリアクセス動作によって影響されたことを決定し得る。
【００８３】
メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性に基づいて行われ得る（３４０）。例えば、オブザーバロジック１５０は、メモリアクセス動作によって影響されたメモリ１２０の部分を補助記憶装置１４５にコピーし得る。ストレージシステム１００の動作は、例えば、メモリアクセス動作を行う追加の要求に対するリスニングによって終了し得る。
【００８４】
説明された特定の実装に関わらず、考察のすべては、限定するよりはむしろ、性質上例示的である。例えば、実装の選択された局面、特徴、もしくはコンポーネントは、メモリに格納されることとして描かれているが、本革新に一致するシステムおよび方法のすべてもしくは一部は、例えば、ハードディスク、フロッピー（登録商標）ディスク、およびＣＤ−ＲＯＭなどの補助ストレージデバイスなどの他のコンピュータ読み取り可能記憶媒体、または現在公知であるかもしくは後に開発されるかのいずれかである他の形式のＲＯＭもしくはＲＡＭに格納されるか、それらの全体に分散されるか、もしくはそれらから読み取られ得る。コンピュータ読み取り可能記憶媒体は、非一時的コンピュータ読み取り可能記憶媒体であり得、非一時的コンピュータ読み取り可能媒体は、ＣＤ−ＲＯＭ、ＲＯＭおよびＲＡＭなどの揮発性メモリもしくは不揮発性メモリ、または任意の他の適切なストレージデバイスを含む。
【００８５】
さらに、革新の特定のコンポーネントが説明されたが、革新に一致する、製造の方法、システム、および物品は、追加のコンポーネントまたは異なるコンポーネントを含み得る。例えば、プロセッサは、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、離散ロジック、または他の種類の回路もしくはロジックの組み合わせとして実装され得る。同様に、メモリは、ＤＲＡＭ、ＳＲＡＭ、Ｆｌａｓｈまたは任意の他のタイプのメモリであり得る。フラグ、データ、データベース、表、実体、および他のデータ構造は、別個に格納および管理され得るか、単一のメモリもしくはデータベースに組み込まれ得るか、分散され得るか、または多くの異なる方法で論理的および物理的に編成され得る。コンポーネントは、独立して動作し得るか、または同じプログラムの一部であり得る。コンポーネントは、別個のリムーバブル回路基板などの別個のハードウェアに常駐し得るか、またはメモリから命令を実装する同じメモリおよびプロセッサなどの共通のハードウェアを共有し得る。プログラムは、単一のプログラムの部分、別個のプログラムであり得るか、またはいくつかのメモリおよびプロセッサ全体に分散され得る。
【００８６】
上記に考察された、プロセス、方法および／または技術を実装するそれぞれのロジック、ソフトウェアまたは命令は、コンピュータ読み取り可能媒体またはメモリ、またはキャッシュ、バッファ、ＲＡＭ、リムーバブル媒体、ハードドライブ、他のコンピュータ読み取り可能記憶媒体、または任意の他の有形の媒体などの他の有形の媒体、またはこれらの任意の組み合わせにおいて提供され得る。有形の媒体は、様々な種類の揮発性および不揮発性の記憶媒体を含み得る。図に例示されるかまたは本明細書に説明される機能、行為またはタスクは、コンピュータ読み取り可能媒体内またはコンピュータ読み取り可能媒体上に格納される一式以上のロジックまたは命令に応答して実行され得る。機能、行為もしくはタスクは、特定の種類の命令セット、記憶媒体、プロセッサもしくは処理戦略に無関係であり、ソフトウェア、ハードウェア、集積回路、ファームウェア、マイクロコード、または単独もしくは組み合わせて動作する任意の種類の他のプロセッサによって行われ得る。同様に、処理戦略は、マルチプロセッシング、マルチタスキング、並列処理および／または現在公知であるかもしくは後に発見される任意の他の処理戦略を含み得る。１つの実施形態において、命令は、ローカルシステムまたはリモートシステムによって読み取られるリムーバブル媒体デバイスに格納される。他の実施形態において、ロジックもしくは命令は、コンピュータネットワークを介するかまたは電話線を介する転送のために遠隔地に格納される。さらに別の実施形態において、ロジックもしくは命令は、所与のコンピュータ、中央処理装置（「ＣＰＵ」）、グラフィック処理装置（「ＧＰＵ」）、またはシステム内に格納される。
【００８７】
本革新の様々な実施形態が説明されたが、より多くの実施形態および実装が本革新の範囲内で可能であることは当業者に明らかである。従って、添付の特許請求の範囲およびそれらの均等物を考慮する場合を除き、本革新は、限定されるべきではない。
【符号の説明】
【００８８】
１００  ストレージシステム
１０５  ストレージデバイス
１１０  クライアントコンポーネント
１１５  相互接続
１２０  メモリ
１２５  プロセッサ
１３０  メモリコントローラ
１３５  通信インタフェース
１４０  ストレージコントローラ
１４５  補助記憶装置
【図１】
2012181834.tif 000003
【図２】
2012181834.tif 000004
【図３】
2012181834.tif 000005