(58)【調査した分野】(Int.Cl.,DB名)
前記メモリは、第1のメモリであり、前記ストレージシステムは、前記通信インタフェースと、該第1のメモリと、前記オブザーバロジックとを含むストレージデバイスを備え、前記メモリアクセスプロトコルは、前記クライアントコンポーネントに含まれる第2のメモリとストレージデバイスに含まれる該第1のメモリとの間でデータを転送するための通信プロトコルであり、該データの転送は、該クライアントコンポーネントおよび該ストレージデバイスに含まれる中央処理装置(CPU)とは無関係である、請求項1に記載のストレージシステム。
前記メモリは、前記ストレージボリュームのすべてのデータブロックに加えて、該データブロックについてのボリューム情報を含む、請求項1に記載のストレージシステム。
前記メモリと通信するプロセッサをさらに備え、該メモリは、前記オブザーバロジックを備え、該オブザーバロジックは、該プロセッサによって実行可能であり、前記通信インタフェースは、該プロセッサとは無関係に該メモリに対して前記メモリアクセス動作を実行するようにさらに構成されている、請求項1に記載のストレージシステム。
コンピュータ実行可能な命令によって符号化される有形のコンピュータ読み取り可能な記憶媒体であって、該コンピュータ実行可能な命令は、ストレージデバイス内のプロセッサによって実行可能であり、該コンピュータ読み取り可能な媒体は、
メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令であって、該メモリアクセス動作は、該ストレージデバイスの通信インタフェースによる該メモリアクセス動作を実行するための要求の受信に応答して、該プロセッサとは無関係にストレージボリュームにおいて行われ、該要求は、メモリアクセスプロトコルに準拠し、該ストレージボリュームは、該ストレージデバイスのメモリに含まれる、命令と、
該メモリアクセス動作の少なくとも1つの属性に基づいて該メモリアクセス動作に関係するアクションを実行するように実行可能である命令と
を含む、有形のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作は、Remote Direct Memory Access(RDMA)動作である、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作の少なくとも1つの属性を識別するための命令は、該メモリアクセス動作が完了した後に実行するように構成されている、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記要求は、前記メモリアクセス動作の少なくとも1つの属性を示すデータを含み、該メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該要求に含まれる該データから、該少なくとも1つの属性を識別するように実行可能である、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該メモリアクセス動作を実行するための要求が受信される前に、前記通信インタフェースにおいて受信される通知メッセージから、該少なくとも1つの属性を識別するようにさらに実行可能である、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該メモリアクセス動作を実行するための要求が受信された後に、前記通信インタフェースにおいて受信される通知メッセージから、該少なくとも1つの属性を識別するようにさらに実行可能である、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該少なくとも1つの属性を示すデータのための前記メモリの領域を監視するようにさらに実行可能であり、該メモリアクセス動作は、第1のメモリアクセス動作であり、該第1のメモリアクセス動作の少なくとも1つの属性を示すデータは、第2のアクセス動作を実行するための要求に応答して、該メモリの領域に書き込まれる、請求項8に記載のコンピュータ読み取り可能な記憶媒体。
前記メモリアクセス動作は、第1のメモリアクセス動作であり、該第1のメモリアクセス動作に関係するアクションを実行することは、第2のメモリアクセス動作に応答してメモリ領域に書き込むことを含む、請求項15に記載の方法。
前記メモリ領域は、フラグを含み、該フラグは、前記メモリの前記一部分が補助記憶装置に最後にコピーされて以来、該メモリの該一部分が前記メモリアクセス動作によって更新されたかどうかを示す、請求項18に記載の方法。
前記メモリアクセス動作は、前記要求を送信したクライアントコンポーネントに含まれる第2のプロセッサとは無関係に前記メモリの前記一部分において行われる、請求項15に記載の方法。
【発明の概要】
【課題を解決するための手段】
【0004】
(概要)
ストレージボリュームストレージボリュームへのアクセスの速度を改善するために、ストレージボリュームを含むメモリにおけるメモリアクセス動作を識別し、その動作を行うシステムが提供され得る。システムは、通信インタフェースと、ストレージボリュームを含むメモリと、メモリアクセス動作を識別するオブザーバロジックとを含み得る。通信インタフェースは、メモリにおけるメモリアクセス動作を行う要求を受信し得、ここで、要求は、Remote Direct Memory Access(RDMA)などのメモリアクセスプロトコルに準拠する。通信インタフェースは、要求に応答してメモリの一部分に対してメモリアクセス動作を行い得る。メモリの部分は、メモリに格納されたストレージボリュームに含まれ得る。オブザーバロジックは、メモリアクセス動作の1つ以上の属性を識別し得、応答して、メモリの部分を補助記憶装置にコピーするなどメモリアクセス動作に関する動作を行い得る。
【0005】
ストレージボリュームへのアクセスの速度を向上させるために、コンピュータ読み取り可能記憶媒体が提供され得る。ストレージボリュームに符号化された命令は、実行された場合、メモリアクセス動作の1つ以上の属性を識別し得る。メモリアクセス動作は、通信インタフェースにおけるメモリアクセス動作を行う要求の受信に応答して、ストレージボリュームにおいて行われ得る。要求は、メモリアクセスプロトコルに準拠し得る。ストレージボリュームは、ストレージデバイスのメモリに含まれ得る。コンピュータ読み取り可能媒体に符号化された命令は、実行された場合、メモリアクセス動作の属性(単数または複数)に基づいて、メモリアクセス動作に関係するアクションを行い得る。
【0006】
ストレージボリュームを含むメモリにおいて行われるメモリアクセス動作を識別する方法が提供され得る。メモリにおけるメモリアクセス動作を行う要求は、通信インタフェースにおいて受信され得る。要求は、メモリアクセスプロトコルに準拠し得る。メモリアクセス動作は、要求に応答してメモリの一部分において行われ得る。メモリの部分は、ストレージボリュームに含まれ得る。メモリアクセス動作の1つ以上の属性は、識別され得る。メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性(単数または複数)の識別に基づいて行われ得る。
【0007】
本発明のさらなる目的および利点は、以下の説明から明らかであり、添付の図面に参照がなされ、ここで、本発明の好ましい実施形態が示される。
【0008】
例えば、本発明は以下の項目を提供する。
(項目1)
クライアントコンポーネントのためのデータを格納するストレージシステムであって、
該システムは、
通信インタフェースと、
該通信インタフェースを介して受信されるデータの格納のためのメモリと、
オブザーバロジックと
を備え、
該通信インタフェースは、
該メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、メモリアクセスプロトコルに準拠する、ことと、
該要求に応答して該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、該メモリに含まれるストレージボリュームに含まれる、こととを行うように構成され、
該オブザーバロジックは、該メモリアクセス動作の少なくとも1つの属性を識別することと、該メモリアクセス動作の該少なくとも1つの属性の識別に応答して、該メモリアクセス動作に関連するアクションを行うこととを行うように構成され、該通信インタフェースは、該オブザーバロジックを待つことなく、該メモリにおける該メモリアクセス動作を完了するようにさらに構成される、ストレージシステム。
(項目2)
上記メモリは、第1のメモリであり、上記ストレージシステムは、上記通信インタフェースと、該第1のメモリと、上記オブザーバロジックとを含むストレージデバイスを備え、上記メモリアクセスプロトコルは、上記クライアントコンポーネントに含まれる第2のメモリとストレージデバイスに含まれる該第1のメモリとの間でデータを転送する通信プロトコルであり、該データの転送は、該クライアントコンポーネントおよびストレージデバイスに含まれる中央処理装置(CPU)とは無関係である、上記項目のいずれかに記載のストレージシステム。
(項目3)
上記メモリは、上記ストレージボリュームのすべてのデータブロックに加えて、該データブロックについてのボリューム情報を含む、上記項目のいずれかに記載のストレージシステム。
(項目4)
上記メモリアクセス動作に関係するアクションは、メモリアクセス動作についての統計の決定を含む、上記項目のいずれかに記載のストレージシステム。
(項目5)
上記メモリアクセス動作に関係するアクションは、該メモリアクセス動作によって影響される上記メモリの領域の識別を含む、上記項目のいずれかに記載のストレージシステム。
(項目6)
上記メモリアクセス動作に関係するアクションは、補助記憶装置への上記メモリの領域の複製をさらに含む、上記項目のいずれかに記載のストレージシステム。
(項目7)
上記メモリと通信するプロセッサをさらに備え、該メモリは、上記オブザーバロジックを備え、該オブザーバロジックは、該プロセッサによって実行可能であり、上記通信インタフェースは、該プロセッサとは無関係に該メモリにおける上記メモリアクセス動作を行うようにさらに構成される、上記項目のいずれかに記載のストレージシステム。
(項目8)
コンピュータ実行可能命令によって符号化される有形のコンピュータ読み取り可能記憶媒体であって、該コンピュータ実行可能命令は、ストレージデバイス内のプロセッサによって実行可能であり、該コンピュータ読み取り可能媒体は、
メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令であって、該メモリアクセス動作は、該ストレージデバイスの通信インタフェースによる該メモリアクセス動作を行う要求の受信に応答して、該プロセッサとは無関係にストレージボリュームにおいて行われ、該要求は、メモリアクセスプロトコルに準拠し、該ストレージボリュームは、該ストレージデバイスのメモリに含まれる、命令と、
該メモリアクセス動作の少なくとも1つの属性に基づいて該メモリアクセス動作に関係するアクションを行うように実行可能である命令と
を含む、有形のコンピュータ読み取り可能記憶媒体。
(項目9)
上記メモリアクセス動作は、Remote Direct Memory Access(RDMA)動作である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目10)
上記メモリアクセス動作の少なくとも1つの属性を識別する命令は、該メモリアクセス動作が完了した後に実行するように構成される、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目11)
上記要求は、上記メモリアクセス動作の少なくとも1つの属性を示すデータを含み、該メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該要求に含まれる該データから、該少なくとも1つの属性を識別するように実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目12)
上記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信される前に、上記通信インタフェースにおいて受信される通知メッセージから、該少なくとも1つの属性を識別するようにさらに実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目13)
上記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該メモリアクセス動作を行う要求が受信された後に、上記通信インタフェースにおいて受信される通知メッセージから、該少なくとも1つの属性を識別するようにさらに実行可能である、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目14)
上記メモリアクセス動作の少なくとも1つの属性を識別するように実行可能である命令は、該少なくとも1つの属性を示すデータのための上記メモリの領域を監視するようにさらに実行可能であり、該メモリアクセス動作は、第1のメモリアクセス動作であり、該第1のメモリアクセス動作の少なくとも1つの属性を示すデータは、第2のアクセス動作を行う要求に応答して、該メモリの領域に書き込まれる、上記項目のいずれかに記載のコンピュータ読み取り可能記憶媒体。
(項目15)
ストレージシステムの通信インタフェースにおいて受信されるデータからメモリアクセス動作を識別するコンピュータ実装される方法であって、
該方法は、
メモリにおけるメモリアクセス動作を行う要求を受信することであって、該要求は、該通信インタフェースにおいて受信され、該要求は、メモリアクセスプロトコルに準拠している、ことと、
該要求に応答して、該メモリの一部分において該メモリアクセス動作を行うことであって、該メモリの該一部分は、ストレージボリュームに含まれ、該ストレージボリュームは、該メモリに含まれる、ことと、
該ストレージシステム内のプロセッサによって該メモリアクセス動作の少なくとも1つの属性を識別することであって、該メモリアクセス動作は、該プロッセッサとは無関係に該メモリの該一部分において行われる、ことと、
該プロセッサによって該メモリアクセス動作に関係するアクションを行うことと
を包含する、方法。
(項目16)
上記メモリアクセス動作に関係するアクションが行われる前に、該メモリアクセス動作は完了する、上記項目のいずれかに記載の方法。
(項目17)
上記メモリアクセス動作の少なくとも1つの属性が識別される前に、該メモリアクセス動作は完了する、上記項目のいずれかに記載の方法。
(項目18)
上記メモリアクセス動作は、第1のメモリアクセス動作であり、該第1のメモリアクセス動作に関係するアクションを行うことは、第2のメモリアクセス動作に応答してメモリ領域に書き込むことを包含する、上記項目のいずれかに記載の方法。
(項目19)
上記メモリ領域は、フラグを含み、該フラグは、上記メモリの上記一部分が補助記憶装置に最後にコピーされて以来、該メモリの該一部分が上記メモリアクセス動作によって更新されたかどうかを示す、上記項目のいずれかに記載の方法。
(項目20)
上記メモリアクセス動作は、上記要求を送信したクライアントコンポーネントに含まれる第2のプロセッサとは無関係に上記メモリの上記一部分において行われる、上記項目のいずれかに記載の方法。
【0009】
(摘要)
1つの実施例において、メモリに格納されたストレージボリュームに対してメモリアクセスを行い、行われたメモリアクセス動作を識別するシステムが提供される。メモリアクセス動作を行う要求は、通信インタフェースにおいて受信され得る。要求は、メモリアクセスプロトコルに従い得る。メモリアクセス動作は要求に応答してメモリの一部分において行われ得、ここで、メモリの一部分はストレージボリュームに含まれる。メモリアクセス動作の1つ以上の属性が、識別され得る。メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性に基づいて行われ得る。
【0010】
複数の実施形態は、以下の図面および説明を参照してより良く理解され得る。図面における構成要素は必ずしも同一縮尺ではなく、代わりに本発明の原理を例示することに強調がなされている。さらに図において、同様に参照される数字は、異なる図全体にわたり対応する部分を示す。
【発明を実施するための形態】
【0012】
(詳細な説明)
一例として、高性能データストレージのシステムは、ストレージボリュームのすべてのデータをストレージデバイスのメモリに格納し得る。ストレージデバイスにおけるボリュームアクセスロジックは、1つ以上の通信インタフェースを有するストレージボリューム−またはストレージボリュームに関連するメモリ領域−をストレージデバイスに登録し得る。あるいはまたはさらに、ボリュームアクセスロジックは、1つ以上のクライアントコンポーネントによってストレージボリュームへのアクセスを提供しかつ/または制御し得る。クライアントコンポーネントにおける通信インタフェースは、メモリへのクライアント側メモリアクセスを、メモリ内の領域にかつ/またはストレージデバイスにおけるストレージボリュームに提供し得る。相互接続またはネットワークは、クライアントコンポーネントの通信インタフェースとストレージデバイスの通信インタフェースとの間でデータを移送し得る。例えば、通信インタフェースは、ネットワークインタフェースコントローラであり得る。
【0013】
クライアント側メモリアクセスは、クライントコンポーネントにおいてプロセッサを迂回し得、かつ/またはさもなければ、クライアントコンポーネントが、クライアントコンポーネント、ストレージデバイス、またはその両方に含まれるプロセッサによるアクションを待つことなく、ストレージデバイスのメモリにアクセスすることを容易にし得る。例えば、クライアント側メモリアクセスは、Remote Direct Memory Access(RDMA)プロトコルに基づき得る。通信インタフェースは、メッセージの信頼性ある送達、および/またはクライアント側メモリアクセスを行う場合、実行される任意のメモリアクセス動作などのメモリアクセス動作の信頼性ある実行を提供し得る。あるいはまたはさらに、メッセージの送達および/またはメモリアクセスアクションの実行は、データがUser Datagram Protocol(UDP)を用いる通信インタフェース間において移送される場合など、信頼性がなくなり得る。クライアントコンポーネントは、クライアント側メモリアクセスを用いて、メモリ上の他の動作、メモリ内の領域、および/またはストレージデバイスにおけるストレージボリュームを読み取り、書き込み、かつ/または行い得る。クライアント側メモリアクセスを提供する際に、クライアントコンポーネントは、メモリアクセス動作を行う要求をストレージデバイスに送信し得る。応答して、ストレージデバイスは、メモリアクセス動作を実行し得る。ストレージデバイスは、メモリアクセス動作を観測するかまたはさもなければ識別し得る。メモリアクセス動作を識別することに応答して、ストレージデバイスは、例えば、メモリ上のメモリアクセス動作を実行することと無関係に、ストレージボリュームのデータを1つ以上のオプションの補助記憶装置にコピーし得る。補助記憶装置は、フラッシュメモリなどの1つ以上の持続性不揮発性記憶媒体、相変化メモリ、メモリスタ、EEPROM、磁気ディスク、テープ、またはいくつかの他の媒体を含み得る。メモリおよび/または補助記憶装置(含まれている場合)は、ストレージボリュームに再分割され得る。
【0014】
ストレージシステムの1つの技術的利点は、ストレージシステムが、メモリアクセスプロトコルを用いて読み取りおよび書き込みの動作に対してDMA同等の性能を提供し得、さらになおも、行われるメモリアクセス動作を識別し得ることである。従って、ストレージシステムは、メモリアクセス動作についての情報に基づいてさらなる動作を取り得る。例えば、さらなる動作は、メモリアクセス動作についての統計を総計すること、書き込まれたメモリの領域を追跡すること、領域の内容を補助記憶装置に持続すること、領域の内容をバックアップストレージボリュームまたは他のストレージデバイスに複製すること、および/またはメモリアクセス動作に関係する任意の他の動作を含む。1つ以上の例において、メモリの更新された領域の内容を複製することは、2010年2月25日に出願された、名称が「SYSTEM AND METHOD FOR RAPID DATA SNAPSHOTS」である米国特許出願第12/712,884号に説明される技術を用いて達成され得る。従って、ストレージシステムは、主として相互接続ハードウェアによって処理されるメモリアクセス動作を用いてストレージボリュームに情報を迅速に格納し得、格納された情報が電力損および/またはシステム遮断の場合に持続されることをなおも確実にし得る。
【0015】
図1は、例示的な高性能データストレージシステム100のハードウェア図を例示する。ストレージシステム100は、ストレージデバイス105と、クライアントコンポーネント110とを含み得る。ストレージシステム100は、より多い要素、より少ない要素、または異なる要素を含み得る。例えば、ストレージシステム100は、複数のクライアントデバイス、複数のストレージデバイス、またはその両方を含み得る。あるいは、ストレージシステム100は、ストレージデバイス105だけを含み得る。
【0016】
クライアントコンポーネント110およびストレージデバイス105は、相互接続115を介して互いに通信し得る。通信は、単方向または二方向であり得る。1つの実施例において、相互接続115は、ストレージデバイス105とクイアントコンポーネント110とを電気的に連結し得る。
【0017】
相互接続115は、2つ以上のデバイス間で信号を移送する任意の物理的コンポーネントを含み得る。相互接続115の実施例は、ワイヤ、パラレルバス、シリアルバス、ネットワーク、交換ファブリック、無線リンク、またはデバイス間で信号を移送する複数のコンポーネントの組み合わせを含む。あるいはまたはさらに、クライアントコンポーネント110は、Storage Area Network(SAN)、(Beaverton OregonのSystem I/O Inc.の所有の登録商標である)INFINIBAND(登録商標)ネットワーク、Local Area Network(LAN)、Wireless Local Area Network(WLAN)、Personal Area Network(PAN)、Wide Area Network(WAN)、または任意の他の現在公知であるかもしくは後に開発される通信ネットワークなどのネットワークもしくは交換ファブリックを介してストレージデバイス105と通信し得る。
【0018】
ストレージデバイス105は、相互接続115を介して受信されるデータを格納し得る。ストレージデバイス105は、メモリ120と、プロセッサ125と、メモリコントローラ130と、通信インタフェース135とを含み得る。ストレージデバイス105は、より多い要素、より少ない要素、または異なる要素を含み得る。例えば、ストレージデバイス105は、補助記憶装置145と、ストレージコントローラ140と、複数の補助記憶装置と、複数のストレージコントローラ、またはこれらの任意の組み合わせを含み得る。ストレージデバイス105は、単一の電源または複数の電源によって電力を供給され得る。電源の実施例は、公共電気施設、内部もしくは外部のバッテリ、無停電電力系統(UPS)、設備UPS、発電機、太陽電池パネル、任意の他の電源、または複数の電源の組み合わせを含む。ストレージデバイス105は、ストレージデバイスに電力を供給する1つ以上の電源の状態を検出し得る。
【0019】
メモリ120は、固体メモリ、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、フラッシュメモリ、リードオンリーメモリ(ROM)、電気的消去可能プログラマブルリードオンリーメモリ(EEPROM)、フラッシュメモリ、相変化メモリ、メモリスタメモリ、プロセッサ125によってアドレス可能アドレス空間に構成される任意の種類のメモリ、またはこれらの任意の組み合わせなど、任意のメモリもしくは複数のメモリの組み合わせであり得る。メモリ120は、揮発性もしくは不揮発性、またはその両方の組み合わせであり得る。
【0020】
メモリ120は、オブザーバロジック150と、ボリュームアクセスロジック155と、ストレージボリューム160とを含み得る。1つの実装において、オブザーバロジック150、ボリュームアクセスロジック155、およびストレージボリューム160のうちの対応する1つを含むメモリ120の各部分は、メモリ120の他の部分とは異なる種類であり得る。例えば、メモリ120は、ROMと、固体メモリとを含み得、ROMは、オブザーバロジック150と、ボリュームアクセスロジック155とを含み、固体メモリは、ストレージボリューム160を含む。メモリ120は、メモリコントローラ130によって制御され得る。メモリ120は、より多いコンポーネント、より少ないコンポーネント、または異なるコンポーネントを含み得る。
【0021】
プロセッサ125は、一般的プロセッサ、中央処理装置、サーバ、マイクロコントローラ、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、デジタル回路、アナログ回路、またはこれらの任意の組み合わせであり得る。プロセッサ125は、メモリ120または他のメモリにおいて実施されるコンピュータ実行可能命令またはコンピュータコードを実行するように動作可能である1つ以上のデバイスを含み、ストレージシステム100の特徴を実行し得る。例えば、プロセッサ125は、オブザーバロジック150およびボリュームアクセスロジック155に含まれるコンピュータ実行可能命令を実行し得る。
【0022】
プロセッサ125、メモリコントローラ130、および通信インタフェース135は、各々互いに通信し得る。プロセッサ125、メモリコントローラ130および通信インタフェース135のうちの各1つはまた、ストレージコントローラ140および補助記憶装置145などの追加のコンポーネントと通信し得る。ストレージデバイス105のコンポーネント120、125、130、135、140、および145間の通信は、バス165、ポイントツーポイント接続、交換ファブリック、ネットワーク、任意の他の種類の相互接続、または相互接続の任意の組み合わせを介して行われ得る。通信は、星状、メッシュ、ハイパーキューブ、環状、トーラス、または現在公知であるかもしくは後に発見される任意の他の種類のトポロジを含むがこれらに限定されない任意の種類のトポロジを用い得る。あるいはまたはさらに、任意のプロセッサ125、メモリ120、メモリコントローラ130、および/または通信インタフェース135は、互いに、またはストレージコントローラ140および/または補助記憶装置145などの他のコンポーネントと論理的もしくは物理的に組み合わせられ得る。
【0023】
メモリコントローラ130は、プロセッサ125によって指定されたメモリアドレスを適切な信号方式に並進させてメモリ120における対応する位置にアクセスするハードウェアコンポーネントを含み得る。プロセッサ125は、バス165上にアドレスを指定し得る。プロセッサ125、バス165、およびメモリ120は、マザーボードなどの共通の回路基板に直接または間接に連結され得る。1つの実施例において、バス165は、物理的アドレスを指定するために用いられるアドレスバスを含み得、アドレスバスは、2つ以上のコンポーネントを接続する一連の回線を含む。メモリコントローラ130はまた、例えば、メモリ120の内容を周期的にリフレッシュするなどの背景処理タスクを行い得る。1つの実施例の実装において、メモリコントローラ130は、プロセッサ125に含まれ得る。
【0024】
通信インタフェース135は、データ転送に用いられる任意の物理的相互接続を含み得る。特に、通信インタフェース135は、ストレージデバイス105とクライアントコンポーネント110との間、またはストレージデバイス105と任意の他のデバイスとの間の通信を容易にし得る。通信インタフェース135は、相互接続115を介して通信し得る。通信インタフェース135は、ハードウェアコンポーネントを含み得る。さらに、通信インタフェース135は、ソフトウェアコンポーネントを含み得る。通信インタフェース135の実施例は、Direct Memory Access(DMA)コントローラ、RDMAコントローラ、Network Interface Controller(NIC)、Ethernet(登録商標)コントローラ、Fibre Channel Interface、(Beaverton,OregonのSystem I/O Inc.の登録商標である)INFINIBAND(登録商標)、SATAインタフェースか、SCSIインタフェース、汎用シリアルバス(USB)インタフェース、Ethernet(登録商標)インタフェース、または任意の他の物理的通信インタフェースを含む。下記に説明されるように、通信インタフェース135は、クライアント側メモリアクセスを容易にし得る。
【0025】
ストレージボリューム160は、現在公知であるかまたは後に発見される任意の記憶アクセスプロトコルおよび/またはストレージプロトコルを介してアクセス可能である、構成されるストレージ領域であり得る。ストレージプロトコルおよびメモリアクセスプロトコルは、下記に詳細に説明される。ストレージボリューム160は、データブロックのシーケンスをメモリ120における対応するメモリ位置にマップする物理的ボリュームであり得る。従って、データブロック自体に加えて、ストレージボリューム160は、メモリ位置またはデータブロックについての任意の他の情報へのデータブロックのマッピングなどのボリューム情報を含み得る。ボリュームアクセスロジック155によって構成され得る、ストレージボリューム160のデータブロックは、すべてメモリ120に格納され得る。ボリューム情報は、メモリ120に含まれ得るかまたは含まれない場合がある。従って、ストレージボリューム160がメモリ120に含まれるといわれる場合、少なくともストレージボリューム160のデータブロック(ストレージボリューム160に格納されたデータ)は、メモリ120に含まれる。
【0026】
上記に示されるように、ストレージボリューム160は、固体メモリに含まれ得る。個体メモリは、データを格納する、デバイスまたは複数のデバイスの組み合わせを含み得、主として、導体、半導体および絶縁体から作成され、いかなる動く機械的部品も有しないと考えられる。固体メモリは、バイトアドレス指定可能、ワードアドレス指定可能またはブロックアドレス指定可能であり得る。例えば、ほとんどのダイナミックRAMおよびいくらかのフラッシュRAMは、バイトアドレス指定可能であるかまたはワードアドレス指定可能であり得る。フラッシュRAMおよび他の持続性種類のRAMは、ブロックアドレス指定可能であり得る。固体メモリは、ストレージデバイス105におけるバス165などのデータバスを介して、ストレージデバイス105におけるメモリコントローラ130などのメモリコントローラに接続するように設計され得る。
【0027】
固体メモリは、任意の順序で(すなわち、ランダムに)格納されたデータが読み取られかつ/または書き込まれることを可能にするランダムアクセスメモリを含み得る。用語「ランダム」は、データの物理的位置に関わらず、またデータが以前に読み取られたかまたは書き込まれた一片のデータに関係するかどうかに関わらず、任意の一片のデータが一定の時間期間内に戻されかつ/または書き込まれ得るという事実をいう。対照的に、磁気ディスクまたは光ディスクなどのストレージデバイスは、記録媒体または読み取り/書き込みヘッドの物理的な動きに依存し、その結果、検索時間は読み取られる次の項目の物理的位置に基づいて変動し、書き込み時間は書き込まれる次の項目の物理的位置に基づいて変動する。個体メモリの実施例は、DRAMと、SRAMと、NANDフラッシュRAMと、NORフラッシュRAMと、Phase Change Memory(PRAM)と、EEPROMと、FeRAMと、MRAMと、CBRAMと、PRAMと、SONOSと、RRAM(登録商標)と、Racetrackメモリと、NRAMと、Millipedeと、T−RAMと、Z−Ramと、TTRAMとを含むが、これらに限定されない。
【0028】
固体メモリとは対照的に、固体ストレージデバイスは、専用のストレージコントローラを有する固体メモリをパッケージ化するシステムまたはデバイスであり、パッケージ化された固体メモリは、専用のストレージコントローラを介して、標準のストレージハードウェアインタフェースに準拠するハードウェア相互接続を用いてアクセスされ得る。例えば、固体ストレージデバイスは、SATAまたはSCSIインタフェースを含むフラッシュメモリドライブと、Fibre Channelインタフェースを介するSCSIを含むFlashまたはDRAMドライブと、SATAまたはSCSIインタフェースを含むDRAMドライブと、USB(ユニバーサルシリアルバス)インタフェースを有するUSBフラッシュドライブとを含むが、これらに限定されない。
【0029】
ストレージコントローラ140は、補助記憶装置145において行われるストレージ動作を容易にするコンポーネントを含み得る。ストレージ動作は、補助記憶装置145内の位置からの読み取りまたは補助記憶装置145内の位置への書き込みを含み得る。ストレージコントローラ140は、ハードウェアコンポーネントを含み得る。あるいはまたはさらに、ストレージコントローラ140は、ソフトウェアコンポーネントを含み得る。
【0030】
補助記憶装置145は、フラッシュメモリ、Phase Change Memory、Memristor、EEPROM、磁気ディスク、テープ、または他の媒体などを含むがこれらに限定されない1つ以上の持続性媒体を備えているストレージ領域を含み得る。補助記憶装置145は、ストレージデバイス105の内部、別のストレージデバイスの一部、サーバの一部、バックアップデバイスの一部、Storage Area Networkにおけるストレージデバイスか、またはある他の、外部に取り付けられた持続性ストレージであり得る。補助記憶装置145における媒体は、ストレージボリューム160が格納されるメモリ120より潜在的に遅い場合がある。補助記憶装置145および/またはストレージコントローラ140は、ストレージデバイス105の内部、ストレージデバイス105の外部にあってそれに連結された物理的に分離したコンポーネント、および/または第2のストレージデバイスにまたはストレージデバイス105とは異なるデバイスに含まれ得る。
【0031】
クライアントコンポーネント110は、ストレージデバイス105から読み取り、ストレージデバイス105に書き込むデバイスを含み得る。クライアントコンポーネント110の実施例は、コンピュータ、サーバ、ブレードサーバ、デスクトップコンピュータ、タブレットコンピュータ、ラップトップ、ストレージデバイス、任意の種類のコンピューティングデバイス、またはプロセッサによって実行可能なプロセスを含み得る。
【0032】
クライアントコンポーネント110は、メモリ170と、プロセッサ175と、通信インタフェース180と、メモリ120、プロセッサ125、通信インタフェース135、およびストレージデバイス135のメモリコントローラ130などのメモリコントローラ185とを含み得る。クライアントコンポーネント110は、より多いコンポーネント、より少ないコンポーネント、または異なるコンポーネントを含み得る。例えば、クライアントコンポーネント110は、ストレージコントローラ190、ストレージコンポーネント192、複数のストレージコントローラ、複数のストレージコンポーネント、またはこれらの任意の組み合わせを含み得る。あるいは、クライアントコンポーネント110は、プロセッサ175によって実行されるプロセスだけを含み得る。
【0033】
ストレージコントローラ190および/またはストレージコンポーネント192は、クライアントコンポーネント110の内部、クライアントコンポーネント110に連結された、クライアントコンポーネント110の外部の分離したデバイス、および/またはストレージデバイス105など、クライアントコンポーネント110以外のデバイスに含まれ得る。クライアントコンポーネント110のメモリ170は、クライアントロジック194を含み得る。プロセッサ175は、クライアントロジック194に含まれるコンピュータ実行可能命令を実行し得る。クライアントコンポーネント110のコンポーネント170、175、180、185、190、および192は、ストレージデバイス105におけるバス165などのバス196を介するかまたは任意の他の種類の相互接続を介して、互いに通信し得る。
【0034】
ストレージシステム100の動作中、ボリュームアクセスロジック155は、クライアントコンポーネント110にストレージボリューム160へのクライアント側メモリアクセスを提供し得る。クライアント側メモリアクセスは、少なくとも1つのメモリアクセス動作を含み得る。メモリアクセス動作は、例えば、読み取りメモリ動作または書き込みメモリ動作を含み得る。メモリアクセス動作は、ストレージデバイス105の通信インタフェース135においてクライアントコンポーネント110からの要求198の受信に応答して、ストレージデバイス105によって行われ得る。要求198は、例えば、開始メモリオフセット、メモリのサイズ、開始メモリ位置、アクセスするメモリの個数、または要求されたメモリアクセス動作に関係する任意の他の属性を含み得る。リクエスト198は、ブロックアドレス指定可能ベース、ワードアドレス指定可能ベース、バイトアドレス指定可能ベース、またはメモリの任意の他の適切な装置の任意のベースで、メモリ120をアドレス指定し得る。ボリュームアクセスロジック155は、通信インタフェース135に、および/または、クライアントコンポーネント110など、ストレージデバイス105以外のデバイスにストレージボリューム160を登録し得る。あるいはまたはさらに、ボリュームアクセスロジック155は、ストレージボリューム160が位置を定められるストレージデバイス105のメモリ120に位置(単数または複数)を決定し得る。ボリュームアクセスロジック155は、通信インタフェース135に、および/または、クライアントコンポーネント110など、ストレージデバイス105以外のデバイスに位置(単数または複数)を登録し得る。
【0035】
ボリュームアクセスロジック155は、ストレージボリューム160がアクセスされ得る仕方を制御しかつ/または指定し得る。例えば、ボリュームアクセスロジック116は、ストレージデバイス105においてどのボリュームが利用可能であるか、および/またはどの動作が行われ得るかを制御し得る。1つの実施例において、ボリュームアクセスロジック155は、現在の、時間、日、月もしくは年、通信インタフェース135の一致もしくは位置、クライアントコンポーネント110の一致もしくは位置、または、クライアントコンポーネント110、ストレージデバイス105、相互接続115、もしくはストレージデバイス105に電力を供給する電源の状態など、ボリュームアクセスロジック155によって検出可能である周囲環境の、ある他の属性に基づいて、アクセスを制御し得る。あるいはまたはさらに、ボリュームアクセスロジック116は、パスワード、キー、生体認証、または暗号認証を含むがこれらに限定されない認証機構に基づいて、アクセスを制御し得る。
【0036】
ボリュームアクセスロジック155または通信インタフェース135は、現在公知であるかもしくは後に発見される任意のメモリアクセスプロトコルを用いてクライアント側メモリアクセスを提供し得る。メモリアクセスプロトコルは、クライアントコンポーネント110におけるメモリ170などの、第1のデバイスにおけるメモリとストレージデバイス105におけるメモリ120などの、第2のデバイスにおけるメモリとの間でデータを転送するために用いられる任意の通信プロトコルであり得、ここで、データは、クライアントコンポーネント110におけるプロセッサ175およびストレージデバイス105におけるプロセッサ125などの、第1および第2のデバイスにおける中央処理装置(CPU)と無関係に転送される。従って、第1のデバイスがオペレーティングシステムを含む実施例において、データは、オペレーティングシステムが関与することなく、第1のデバイスのメモリから第2のデバイスのメモリに転送され得る。CPUによって実行される命令は、ハードウェアデータコントローラに第1のデバイスのメモリから第2のデバイスのメモリにデータを転送するように示し得るが、メモリ間の実際のデータ転送は、CPUが関与することなく、完了され得、第1のデバイスがオペレーティングシステムを含む場合、オペレーティングシステムが関与することなく、完了され得る。メモリアクセスプロトコルは、例えば、メモリアクセス動作が第2のデバイスまたはシステムにおいてメモリにおいて行われる要求198のフォーマットを記述し得る。
【0037】
メモリアクセスプロトコルは、例えば、ストレージデバイス105における通信インタフェース135およびクライアントコンポーネント110における通信インタフェース180などの1つ以上のハードウェアコントローラを用いて実装され得る。ハードウェアコントローラのメモリアクセスプロトコルおよび電気的特性は、共通の規格の一部であり得る。従って、通信インタフェース135または180のメモリアクセスプロトコルおよび電気的特性は、1つの規格の一部であり得る。1つの実施例において、アクセスプロトコルは、通信インタフェース135および180において実装されるRDMAプロトコルであり得、ここで、メモリアクセスプロトコルならびに通信インタフェース135および180は、INFINIBAND(登録商標)規格に準拠する。第2の実施例において、メモリアクセスプロトコルは、Internet Wide Area RDMA Protocol(iWARP)であり得、ここで、iWARPは、通信インタフェース135および180において実装され、ここで、通信インタフェース135および180は、iWARPおよびEthernet(登録商標)規格に準拠する。Internet Engineering Task Force(IETF)プロトコルであるiWARP規格は、TCP(Transport Control Protocol(伝送制御プロトコル))によるRDMAである。第3の実施例において、メモリアクセスプロトコルは、通信インタフェース135および180において実装されるPCIバスマスタリングプロトコルであり得、ここで、通信インタフェース135および180は、PCI(Peripheral Component Interconnect)規格に準拠する。RDMAなどのメモリアクセスプロトコルは、TCPなどのトランスポートプロトコルによって直接、階層化され得る。
【0038】
1つ以上の実施例において、ボリュームアクセスロジック155は、さらに、現在公知であるかまたは後に発見される任意のストレージプロトコルを用いてブロックレベルアクセスをストレージボリューム160に提供し得る。ストレージプロトコルは、ストレージデバイス105などのブロックストレージデバイスもしくはシステムとブロックストレージデバイスもしくはシステムにデータを格納しかつ/またはブロックストレージデバイスもしくはシステムからデータを検索する、クライアントコンポーネント110などのデバイスもしくはシステムとの間でデータを転送するために用いられる任意の通信プロトコルであり得る。ストレージプロトコルは、例えば、1つ以上のソフトウェアおよび/またはハードウェアのストレージコントローラを用いて実装され得る。ハードウェアストレージコントローラのストレージプロトコルおよび電気的特性は、共通の規格の一部であり得る。1つの実施例において、ストレージプロトコルは、汎用シリアルバスの大容量記憶デバイスクラス(USB MSCまたはUMS)であり得、汎用シリアルバスの大容量記憶デバイスクラス(USB MSCまたはUMS)は、USB規格に準拠する、相互接続115などのハードウェアバス上で実行するUSB Implementers Forumによって規定される一式のコンピューティング通信プロトコルである。第2の実施例において、ストレージプロトコルは、SCSIコマンドプロトコルであり得る。第3の実施例において、ストレージプロトコルは、SATAプロトコルであり得る。ストレージプロトコルのさらなる実施例は、Serial Attached SCSI(SAS)と、Internet Small Computer System Interface(iSCSI)とを含む。あるいはまたはさらに、ボリュームアクセスロジック155は、Fibre ChannelによるSCSI、Remote Direct Memory Access(RDMA)によるSCSI RDMA Protocol(SRP)、TCP/IPによるiSCSI、または現在公知であるかもしくは将来発見される、ストレージプロトコルとデータ転送プロトコルとの任意の他の組み合わせなど、データ転送プロトコルによってデータを転送する任意のストレージプロトコルを用いてブロックレベルアクセスを提供し得る。
【0039】
ストレージプロトコルを用いてストレージボリューム160にアクセスすることは、メモリアクセスプロトコルを用いてストレージボリューム160にアクセスすることより遅い。メモリアクセスプロトコルとは対照的に、クライアントコンポーネント110のCPUは、ブロックストレージデバイスまたはシステムにデータを転送中、ストレージコントローラと相互に作用し得、ここで、ストレージコントローラは、ストレージプロトコルを実装する。従って、ストレージプロトコルは、メモリアクセスプロトコルとは異なる。
【0040】
ボリュームアクセスロジック155を介してブロックアドレス指定可能クライアント側メモリアクセスおよび/またはブロックレベルアクセスを提供することによって、ストレージデバイス105は、少なくとも1つの実施例の実装においてブロックストレージデバイスであると考えられ得る。ブロックストレージデバイスはまた、ブロックデバイスとも呼ばれ得る。ブロックデバイスは、512または1024バイトなどの所定のサイズのブロックでデータを格納する。所定のサイズは、構成可能であり得る。ブロックデバイスは、ソフトウェアおよび/もしくはハードウェアストレージコントローラ、ならびに/または、通信インタフェース180などの通信インタフェースを介してアクセスされる。他のブロックデバイスの実施例は、スピニングディスクと、テープドライブと、フロッピー(登録商標)ディスクドライブと、USBフラッシュペンドライブとを含む。
【0041】
ボリュームアクセスロジック155は、メモリ120および/または補助記憶装置145を1つ以上のボリュームに再分割し得る。ストレージデバイス105のメモリ120におけるストレージボリューム160などのボリュームのうちの各1つは、任意のアクセスプロトコルおよび/またはストレージプロトコルを介してアクセス可能である構成されるストレージ領域であり得る。アクセスプロトコルおよびストレージプロトコルは、上記に説明される。
【0042】
補助記憶装置145および/またはストレージコンポーネント192は、任意のブロックデバイスを含み得る。ブロックデバイスの実施例は、ハードディスクドライブ、CD−ROMドライブ、テープドライブ、固体ストレージデバイス、フラッシュドライブ、または任意の他の大容量記憶デバイスを含むが、これらに限定されない。
【0043】
クライアントロジック194は、メモリアクセスプロトコルによるクライアント側メモリアクセスを用いて、ストレージデバイス105のメモリ120においてストレージボリューム160に対してメモリアクセス動作を行い得る。あるいはまたはさらに、クライアントロジック194は、動作を行って、接続されている場合ストレージデバイス105を発見し得るか、またはストレージデバイス105においてアクセス可能であり得る利用可能なボリュームを発見し得る。あるいはまたはさらに、クライアントロジック194は、管理動作を行って、ストレージボリューム160に関連する属性またはメタデータを修正し得る。1つの実施例において、クライアントロジック194は、管理動作を行って、ストレージボリューム160に関連する人間読み取り可能ラベルを設定し得る。第2の実施例において、クライアントロジック194は、管理動作を行って、クライアントコンポーネント110または他のクライアントコンポーネントに利用可能である動作を変更し得る。管理動作は、例えば、複数のクライアントによるストレージボリューム160への共用アクセスを調整するために用いられ得る。
【0044】
クライアントロジック194は、クライアントロジック194によって要求されたかまたは要求される予定の一式の1つ以上のメモリアクセス動作についての情報をオブザーバロジック150に通信する動作を行い得る。例えば、クライアントロジック194は、クライアントコンポーネント110の通信インタフェース180を介して通知メッセージを送信し得る。オブザーバロジック150は、ストレージデバイス105の通信インタフェース135を介して通知メッセージを受信し得る。通知メッセージは、クライアントロジック194によって要求される一式のメモリアクセス動作に先行し得るかまたは後続し得る。通知メッセージは、一式のメモリアクセス動作の属性を識別し得る。あるいはまたはさらに、クライアントロジック194は、オブザーバロジック150によって直接観測可能であるかまたは識別されるメモリアクセス動作を行い得る。例えば、メモリアクセス動作を行う要求198は、イミディエート値動作を有するRDMA書き込みなどの通知情報を含み得る。ストレージボリューム160におけるメモリ120への書き込みに加えて、イミディエート値動作による書き込みは、イミディエート値を有するRDMA書き込みにおけるクライアントロジック194によって指定されるイミディート値を含む通知をオブザーバロジック150が受信するようにさせ得る。値は、メモリアクセス動作の1つ以上の属性を含み得る。例えば、値は、RDMA書き込み中にイミディエート値動作によってメモリ120のどの部分が書き込まれるかを示し得る。あるいはまたはさらに、クライアントロジック194は、オブザーバロジック150が検査し得る、ストレージデバイス105における状態を作る動作を行い得る。例えば、クライアントロジック194は、クライアント側メモリアクセス動作を行って、一式のメモリアクセス動作についての情報をストレージデバイス105におけるメモリ120の特定の領域に格納し得る。その領域に格納された情報は、例えば、行われる各メモリアクセス動作のオフセット、サイズ、および/または種類を含み得る。オブザーバロジック150は、メモリアクセス動作の1つ以上の属性を識別するために、領域を更新のため検査し得る。
【0045】
クライアントロジック194は、クライアントロジック194の能力を用い得る任意の他のロジックと組み合わせられ得る。1つの実施例において、クライアントロジック194は、アプリケーションプログラミングインタフェース(API)を実装し得、ストレージボリューム160に対して特定用途向け動作を行うために、データベースサーバなどのアプリケーションロジックは、アプリケーションプログラミングインタフェース(API)を呼び出し得る。第2の実施例において、クライアントロジック194は、ストレージボリューム160に対してブロック動作を行うために、アプリケーションロジックが呼び出し得るブロックレベルAPIを提供するデバイスドライバを含み得る。第3の実施例において、クライアントロジック194は、ストレージボリューム160に対して動作を行うために、アプリケーションロジックが通信し得るレジスタレベルおよび/またはメモリマップされたインタフェースを提供する回路として実装され得る。アプリケーションロジックの実施例は、ユーザが対話するプログラム、オペレーティングシステム、デバイスドライバ、ファイルシステム、状態マシン、データベース、またはクライアントロジック194を用いてストレージボリューム160に対して動作を行う任意の他のロジックを含み得る。
【0046】
オブザーバロジック150は、ストレージボリューム160および/またはストレージデバイス105において行われる、クライアントロジック194によって要求される動作を観測するかさもなければ識別し得る。オブザーバロジック150は、クライアントコンポーネント110および/またはストレージデバイス105の間での直接通信に基づいて要求される動作を識別し得る。例えば、オブザーバロジック150は、通信インタフェース135においてクライアントロジック194から受信される入力通知メッセージに対してリスンし得る。あるいは、またはさらに、オブザーバロジック150は、クライアントコンポーネント110によって要求される動作を受動的に監視し得る。例えば、オブザーバロジック150は、クライアントロジック194によって行われる動作の結果として受信される通知メッセージに対してリスンし得る。あるいは、またはさらに、オブザーバロジック150は、クライアントロジック194、通信インタフェース135、または別のハードウェアコンポーネントによって作られる状態に対して検査し得る。例えば、オブザーバロジック150は、クライアント側メモリアクセスを用いるクライアントコンポーネント110によって、通信インタフェース135によって、または別のハードウェアコンポーネントによって、アクセス可能であるメモリ120の1つ以上の領域の内容を読み取り得る。例えば、メモリ領域は、1つ以上のフラグを含み得、1つ以上のフラグは、メモリ120の1つ以上の部分が補助記憶装置145に最後にコピーされて以来、メモリ120の1つ以上の部分がメモリアクセス動作によって更新されたかどうかを示す。
【0047】
一式のメモリアクセス動作を識別することに応答して、オブザーバロジック150は、さらなるアクションをとり得る。1つの実施例において、さらなるアクションは、(動作の種類、動作数、影響されるメモリのサイズ、および/または各動作のメモリ位置を含むが、これらに限定されない)メモリアクセス動作に関係する統計を決定することを含み得る。第2の実施例において、さらなるアクションは、メモリアクセス動作によって書き込まれたかまたはさもなければ影響されたメモリ120の領域を追跡するかまたは識別することを含み得る。オブザーバロジック150は、メモリ120の影響された領域の内容を補助記憶装置145に持続し得、ブロックデバイス、外部サーバ、および/またはバックアップデバイスにメモリ120の影響された領域の内容を外部に記憶し、かつ/またはそれを複製する。あるいは、オブザーバロジック150は、メモリアクセス動作に関係する任意の他のアクションをとり得る。
【0048】
メモリアクセス動作は、オブザーバロジック150がメモリアクセス動作を識別することを待つことなく、ストレージデバイス105において完了し得る。あるはまたはさらに、メモリアクセス動作は、オブザーバロジック150がメモリアクセス動作を識別することに応答して任意のさらなるアクションをとることを待つことなく、ストレージデバイス105において完了し得る。従って、クライアントロジック194は、書き込み動作を行う要求198が相互接続116にわたって走行し、ストレージデバイス105がメモリ120にデータを書き込む時間量で、ストレージボリューム160に書き込み動作を行い得る。ストレージプロトコルおよび/または補助記憶装置145にデータを書き込むことに関連するオーバヘッドは、回避され得る。
【0049】
クライアントコンポーネント110およびストレージデバイス105は、任意の数の方法で構成され得る。1つの実施例において、ストレージデバイス105は、コンピュータに含まれ得る。例えば、プロセッサ125はコンピュータの中央処理装置(CPU)であり得、メモリ120はコンピュータのメモリであり得、コンピュータは通信インタフェース135を含み得る。あるいはまたはさらに、ストレージデバイス105は、PCIデバイス、PCI−Xデバイス、PCIeデバイス、HTXデバイス、またはコンピュータに内部的または外部的に接続される任意の他の種類の周辺装置を含むがこれらに限定されない、コンピュータの周辺装置であり得る。
【0050】
第2の実施例において、ストレージデバイス105は、ストレージデバイス105のデータにアクセスするコンピュータまたは別の種類のコンピューティングデバイスに追加され得る。例えば、ストレージデバイス105は、コンピュータにインストールされるデバイスであり得、ここで、クライアントコンポーネント110は、コンピュータの中央処理装置(CPU)によって実行されるプロセスである。ストレージデバイス105におけるメモリ120は、コンピュータのCPUによってアクセスされるメモリとは異なり得る。ストレージデバイス105におけるプロセッサ125は、コンピュータのCPUとは異なり得る。
【0051】
第3の実施例において、ストレージデバイス105、クライアントコンポーネント110、またはその両方は、Non−Uniform Memory Architecture(NUMA)を用いて実装され得る。NUMAにおいて、プロセッサ125または175は、ポイントツーポイントリンクの交換ファブリックを介して一緒に接続される複数のプロセッサコアを備え得る。メモリコントローラ130または185は、複数のメモリコントローラを含み得る。メモリコントローラの各1つは、プロセッサコアのうちの対応する1つに電気的に連結され得る。複数のメモリコントローラの各1つは、その他のメモリコントローラとは異なる、メモリ120または170の部分にサービスし得る。
【0052】
第4の実施例において、ストレージデバイス105のプロセッサ125は、バス165に電気的に連結される複数のプロセッサを含み得る。メモリ120、通信インタフェース135、メモリコントローラ130、およびストレージコントローラ140に含まれる複数のメモリなどの、ストレージデバイス105の他のコンポーネントもまた、バス165に電気的に連結され得る。
【0053】
第5の実施形態において、ストレージシステム100は、複数のストレージデバイス、複数のストレージボリューム、および/または複数のクライアントロジックを含み得る。ストレージシステム100は、1つ以上のクライアントロジックに、より大きくかつ/またはより速いストレージボリュームとして複数のストレージデバイスおよび/またはストレージボリュームを提示し得る。例えば、クライアントロジック194は、複数のストレージデバイスおよび/または複数のストレージボリュームを実際に存在するより少ないストレージボリュームとして処理するアプリケーションが処理することを容易にするそれぞれのアプリケーションにインタフェースを提供し得る。例えば、クライアントロジック194は、ストレージデバイス105上の複数のボリュームおよび/または複数のストレージデバイスからの複数のボリュームを単一のストレージボリュームとしてアプリケーションに提示し得る。集約は、ストライピング、レプリケーション、パリティ、部分データ冗長性、現在公知であるかもしくは後に発見される任意の他の集約技術、または集約技術の任意の組み合わせを用い得る。
【0054】
第6の実施例において、クライアントコンポーネント110は、他のシステムおよび/またはデバイスに追加のサービスを提供し得る。例えば、クライアントコンポーネント110は、Network Attached Storage(NAS)機器を含み得る。あるいはまたはさらに、クライアントコンポーネント110は、Redundant Array of Independent Disks(RAID)ヘッドを含み得る。あるいはまたはさらに、クライアントコンポーネント110は、ストレージデバイス105に格納されたデータへのファイルレベルアクセスを提供し得る。
【0055】
あるいはまたはさらに、クライアントコンポーネント110は、ストレージプロトコルを用いてストレージデバイス105に格納されたデータへのブロックレベルアクセスを提供し得る。例えば、クライアントロジック194は、SCSIなどの1つ以上のストレージプロトコルを実装し得る。従って、アプリケーションまたはハードウェアは、クライアントロジック194においてストレージプロトコルの実装によって、ストレージデバイスにデータを転送し得、ストレージデバイスからデータを転送し得る。ストレージプロトコルの実装は、適切な場合、メモリアクセスプロトコルを用いてストレージデバイス105にアクセスし得る。あるいはまたはさらに、ストレージプロトコルの実装は、例えば、ストレージデバイス105とさらに通信することなしにストレージプロトコルによって必要とされ得るアプリケーションに肯定応答を戻すことによって、ストレージデバイス105との対話を減らし得る。
【0056】
第7の実施例において、クライアントコンポーネント110は、クライアント要素110、またはクライアントコンポーネント110が連結されるかまたは含まれるコンピューティングデバイスに対してローカルのメモリの拡張としてストレージデバイス105を利用し得る。補助記憶装置145への低待ち時間アクセスおよび持続性などの、ストレージデバイス105の追加の能力は、クライアントコンポーネント110によって活用されて、アプリケーションクラッシュ、クライアントコンポーネント110に対する電力損失、またはクライアントコンポーネント110における任意の他のエラーイベントもしくは予期しないイベントに対して保護し得る。クライアントコンポーネント110は、例えば、ストレージデバイス105におけるストレージボリューム160にアプリケーションデータおよび/またはアプリケーション状態情報を格納することによってローカルメモリ170の拡張を提供し得る。クライアントコンポーネント110は、クライアントコンポーネント110は、PCIデバイス、PCI−Xデバイス、PCIeデバイス、HTXデバイス、またはコンピュータに内部的または外部的に接続される任意の他の種類の周辺装置を含むがこれらに限定されない、コンピュータの周辺装置であり得る。クライアントコンポーネント110は、メモリマップされたI/Oを用いて、
図1に例示されるストレージデバイス105に含まれるボリューム160などの1つ以上のストレージデバイスに格納される1つ以上のストレージボリュームを表すコンピュータにアドレス空間を提供し得る。メモリマップされたI/Oは、アドレス指定可能メモリとしての物理的デバイスにアクセスすることを容易にする。コンピュータは、補助記憶装置145への低待ち時間アクセスおよび持続性などの、ストレージデバイス105の特徴を有する追加のメモリとして提示されたアドレス空間を用い得る。従って、例えば、アプリケーションのインスタンスまたは仮想マシンインスタンスが第1のデバイスにおいて故障した場合、アプリケーションまたは仮想マシンは、同じアプリケーションおよび/または同じ仮想マシンを実行する第2のデバイスにほとんど直ちにフェイルオーバーし得る。第2のデバイスにおけるアプリケーションまたは仮想マシンは、メモリがストレージデバイス105に格納されているので、第1のデバイスによって用いられるメモリと同じメモリを用いて続行し得る。
【0057】
あるいは、またはさらに、クライアントコンポーネント110は、アプリケーションに対してチェックポイントを行い得る。チェックポイントを行うことは、ストレージデバイス105のストレージボリューム160にアプリケーションデータおよび/またはアプリケーション状態のすべてまたは一部分を周期的に格納することを伴い得る。チェックポイントを行うことは、スーパコンピューティングアプリケーションの場合などいくつかの種類のアプリケーションにおいて一般的である。従って、アプリケーションまたは仮想マシンのインスタンスが第1のデバイスにおいて故障した場合、アプリケーションまたは仮想マシンは、第2のデバイス上でほとんど直ちにフェイルオーバーし得る。アプリケーションまたは仮想マシンは、行われた最後のチェックポイントにおいて開始して続行し得る。
【0058】
あるいはまたはさらに、複数のクライアントコンポーネントは、共有メモリとしてストレージデバイス105を利用し得る。例えば、クライアントコンポーネントは、大データセットの大規模並列化および/または共有に依存するアプリケーションロジックを含み得るかまたはそのアプリケーションロジックと相互運用し得る。大規模並列化を用い得るアプリケーションロジックの実施例は、タンパク質フォールディング遺伝的アルゴリズム、耐震解析、または、各結果が前の結果に基づく任意の他の計算集中アルゴリズムおよび/または反復計算を行うロジックを含む。アプリケーションロジックは、ストレージデバイス105のストレージボリューム160にアプリケーションデータ、アプリケーション状態、および/またはチェックポイントデータを格納し得る。補助記憶装置145への低待ち時間アクセスおよび持続性などの、ストレージデバイス105の追加の能力は、アプリケーションクラッシュ、クライアントコンポーネントに対する電力損失、または任意のクライアントコンポーネントにおける任意の他のエラーイベントもしくは予期しないイベントに対して保護するために、クライアントコンポーネント110によって活用され得る。クライアントコンポーネントは、アトミックアクセスを提供する方法でストレージデバイス105にアクセスし得る。例えば、クライアントコンポーネントによって要求されるメモリアクセス動作は、フェッチアンドアッド操作、比較交換操作、または現在公知であるかもしくは後に発見される任意の他のアトミック操作を含むがこれに限定されないアトミック操作を含み得る。アトミック操作は、グループとして実行するかまたは全く実行しない操作の組み合わせであり得る。操作の組み合わせを実行した結果は、操作の組み合わせの最初の操作と最後の操作の間で、操作の組み合わせ以外にいかなる操作も実行されなかったかのようであり得る。従って、クライアントコンポーネントは、データの汚染を引き起こすことなくストレージデバイス105に安全にアクセスし得る。
【0059】
クライアントロジック194、オブザーバロジック150、および/またはボリュームアクセスロジック155は、共に位置を定められか、分離されるか、または組み合わされ得る。組み合わされたロジックによって行われるアクションは、組み合わされたロジックによって行われる特徴の集合体と同じかまたは類似する特徴を行い得る。第1の実施例において、すべての3つのロジックは、単一のデバイスに共に位置を定められ得る。第2の実施例において、ボリュームアクセスロジック155およびオブザーバロジック150は、単一のロジックに組み合わせられ得る。第3の実施形態において、クライアントロジック194およびオブザーバロジック150は、単一のロジックに組み合わせられ得る。第4の実施例において、クライアントロジック194およびボリュームアクセスロジック155は、組み合わせられ得る。第5の実施形態において、オブザーバロジック150は、メタデータサーバなど、ストレージデバイス105とは異なるデバイスにあり得る。メタデータサーバは、動作の処理に参加し得る1つ以上のハードウェアおよび/またはソフトウェアの実体であり得るが、ストレージボリューム160に格納されたデータを直接取り扱わない場合がある。メタデータサーバは、統計、座標持続性、座標データ複製を追跡し得、かつ/またはメモリアクセス動作に関係する任意の他のアクティビティを行い得る。
【0060】
クライアントロジック194、オブザーバロジック150、および/またはボリュームアクセスロジック155は、コンピュータコードを含み得る。コンピュータコードは、プロセッサ175または125によって実行可能な命令を含み得る。コンピュータコードは、C、C
++、C#、Java(登録商標)、またはこれらの任意の組み合わせなどの、現在公知であるかまたは将来的に発見される任意のコンピュータ言語で書かれ得る。一実施例において、コンピュータコードは、ファームウェアであり得る。あるいはまたはさらに、クライアントロジック194のすべてもしくは一部分、オブザーバロジック150、ボリュームアクセスロジック155および/またはプロセッサ175もしくは125は、回路として実装され得る。例えば、回路は、クライアントロジック194の特徴を行うように構成されるFPGA(フィールドプログラマブルゲートアレイ)、オブザーバロジック150、および/またはボリュームアクセスロジック155を含み得る。あるいは、またはさらに、回路は、クライアントロジック194の特徴を行うように構成されるASIC(特定用途向け集積回路)、オブザーバロジック150、および/またはボリュームアクセスロジック155を含み得る。あるいは、またはさらに、クライアントロジック194の一部分、オブザーバロジック150、および/またはボリュームアクセスロジック155ならびにプロセッサ125は、通信インタフェース135もしくは180の一部または他のハードウェアコンポーネントとして実装され得る。例えば、書き込み動作が行われる場合、通信インタフェース135もしくは180または他のハードウェアコンポーネントは、メモリ120もしくは170の領域を修正し得る。オブザーバロジック150は、メモリの領域を周期的に検査し得、領域および領域に関連するストレージボリューム160の内容に基づいてさらなるアクションをとり得る。さらなるアクションは、現在行われていてかつ/または過去に行われた動作に関係する統計を決定すること、現在書き込まれていてかつ/またはこれまで書き込まれ、かつ/または現在読み取られていてかつ/またはこれまで読み取られた領域を識別すること、補助記憶装置145に領域の内容を持続すること、異なるストレージボリューム、外部サーバ、および/またはバックアップデバイスに領域の内容を複製すること、および/または動作に関係する任意のアクションをとることを含み得る。
【0061】
クライアントロジック194によって要求される動作を観測するかまたは識別する機構および動作の識別に応答してとられるアクションは、任意の多数の形式をとり得る。特定の機構は、とりわけ、個々の動作待ち時間、個々のクライアントコンポーネントからの1秒当りの動作、複数のクライアントコンポーネントからの1秒当りの集合体動作、クライアントコンポーネント110の計算リソースに対してなされる要求、ストレージデバイス105の計算リソースまたはオブザーバロジック150に対してなされる要求間のトレードオフのバランスをとり得る。
【0062】
あるいはまたはさらに、ストレージシステム100は、行われるメモリアクセス動作を観測または識別を行わない場合がある。あるいはまたはさらに、ストレージシステム100は、メモリアクセス動作の特定の知識なしに1つ以上のアクションをとり得る。例えば、ストレージシステム100は、補助記憶装置145にストレージボリューム160の全内容を持続し、別のストレージデバイス、外部サーバおよび/またはバックアップデバイスにストレージボリューム160の全内容を複製し、かつ/またはストレージボリューム160に関係するある他のアクションをとり得る。あるいはまたはさらに、ストレージデバイス105は、ストレージボリューム160の内容を補助記憶装置145の内容と比較し得る。あるいはまたはさらに、ストレージデバイス105は、計算されたハッシュ値を用いて、ストレージボリューム160のどの領域が修正されたかを決定し得る。計算されたハッシュ値は、2つの異なる入力バッファに対して異なる値を有することが高い可能性で予期され、入力バッファの1つまたは両方より小さい場合がある計算された出力であり得る。計算されたハッシュ値の実施例は、チェックサムと、周期冗長検査コードと、暗号ハッシュコードとを含む。ストレージデバイス105は、スケジュールに従うかまたはハードウェア中断などの特定のイベントに応答して、システム遮断の前に、メモリアクセス動作の知識なしに周期的にアクションを行い得る。
【0063】
図2は、ストレージシステム100のロジックの実施例のフロー図を例示する。
図2に例示される実施例において、クライアントコンポーネント110は、メモリアクセス動作を要求し、オブザーバロジック150は、ストレージデバイス105において行われる動作を識別する。ストレージシステム100のロジックは、追加か、異なるか、またはより少ない動作を含み得る。動作は、
図2に例示される順序とは異なる順序で実行され得る。
【0064】
クライアントロジック194は、1つ以上の通知メッセージをストレージデバイス105(200)にオプションで送信することによって始まり得る。通知メッセージ(単数または複数)の受信に応答して、オブザーバロジック150は、1つ以上の次に行われる動作を通知され得る(205)。通知メッセージ(単数もしくは複数)は、例えば、動作に関連する一意の名前、行われるべき動作の種類、動作が行われるべきストレージボリューム160、動作が行われるストレージボリューム160内の位置、動作が行われるデータのサイズ、および/または行われるべき動作の他の属性をオブザーバロジック150に示し得るかまたはオブザーバロジック150に提供し得る。
【0065】
通知されたことに応答して(205)、オブザーバロジック150は、1つ以上のアクションをとることよって反応し得る(210)。アクションは、例えば、行われるべき動作に関する統計を集約すること、書き込まれるかもしくは読み取られるべきストレージボリューム160の領域を追跡すること、および/または動作に関係するある他のアクションを含み得る。
【0066】
あるいはまたはさらに、クライアントロジック194は、1つ以上のクライアント側メモリアクセス動作を行うことによって始まるかまたは継続し得る(215)。クライアント側メモリ動作は、オプションでオブザーバロジック150に動作が通知されるようにし得る(220)。例えば、クライアント側メモリ動作を行う際に、メモリアクセス動作の1つ以上の属性を識別する追加の情報は、メモリアクセス動作を行う要求198においてストレージデバイス105に送信され得る。
【0067】
オブザーバロジック150に動作が通知されるようにし得、かつ/またはオブザーバロジック150にある追加の情報を伝えさせ得る実施例のクライアント側メモリ動作は、即時操作によるRDMA書き込みである。即時操作によるRDMA書き込みは、ストレージボリューム160に関連するメモリ領域に対して実行され得る。即時操作によるRDMA書き込みによって指定されるイミディエート値は、動作に関連する一意の名前、行われるメモリアクセス動作の種類、メモリアクセス動作が行われるストレージボリューム160、メモリアクセス動作が行われるストレージボリューム160内の位置、および/またはメモリアクセス動作が行われるデータのサイズをストレージデバイス105に伝え得る。あるいはまたはさらに、イミディエート値は、行われる動作の任意の他の属性、異なる動作の任意の属性、またはバッチの動作の任意の属性を含み得る。
【0068】
通知されることに応答して(220)、オブザーバロジック150は、1つ以上のアクションをとり得る(225)。アクションは、現在行われ、そして/または過去に行われたメモリアクセス動作についての統計を集約すること、書き込まれたかまたは読み取られたストレージボリューム160の領域を追跡すること、補助記憶装置145に追跡された領域の内容を持続すること、補助記憶装置145、外部サーバ、および/またはバックアップデバイスにおけるボリュームに、追跡された領域の内容を複製することを含み得る。
【0069】
クライアントロジック194は、1つ以上のアクションをとるクライアントコンポーネント110によってオプションで継続し得(230)、このことは、ストレージデバイス105において完了した1つ以上のメモリアクセス動作がオブザーバロジック150に通知されるようにする(235)。例えば、クライアントコンポーネント110は、ストレージデバイス105に通知メッセージを送信し得る。通知メッセージは、動作に関連する一意の名前、行われたメモリアクセス動作の種類、メモリアクセス動作が行われたストレージボリューム160、メモリアクセス動作が行われたストレージボリューム160内の位置、および/またはメモリアクセス動作が行われたデータのサイズ、および/または行われたメモリアクセス動作のある他の属性をオブザーバロジック150に示し得る。
【0070】
通知されることに応答して(235)、オブザーバロジック150は、1つ以上のアクションをとり得る(240)。アクションは、現在行われかつ/または過去に行われたメモリアクセス動作についての統計を集約すること、書き込まれたかまたは読み取られたストレージボリューム160の領域を追跡すること、補助記憶装置145に追跡された領域の内容を持続すること、または、補助記憶装置145、外部サーバ、および/もしくはバックアップデバイスにおけるボリュームに、追跡された領域の内容を複製することを含み得る。
【0071】
クライアントロジック194が行うべき追加の動作を有する場合、クライアントロジック194は、後に行われるべきメモリアクセス動作をオブザーバロジック150に通知することによって(200)、またはメモリアクセス動作(単数もしくは複数)を行うことによって(215)繰り返し得る。あるいは、さらなる動作が行われることにはなっていないが、追加の動作が予期される場合、クライアントロジック194は、1つの実施例において、追加の動作が実行する準備ができるのを待ち得る(215)。
【0072】
行われたアクションおよび/または受信された通知は、複数の動作についての情報を集約し得る。データは、行われた動作の種類、動作(単数または複数)が行われたストレージボリューム160、動作(単数または複数)が行われたストレージボリューム160の領域、および/または動作(単数または複数)のある他の属性に基づいて集約され得る。
【0073】
あるいはまたはさらに、メモリアクセス動作を行う前、行っている間、行った後、クライアントロジック194によってとられるアクションは、ストレージデバイス105、ストレージボリューム160、または通信インタフェース135とは別個であるがおそらく関連する手段を介して、オブザーバロジック150に通知されようにし得る。1つの実施例において、クライアントロジック194は、オブザーバロジック150にメッセージを送信し得、メッセージは、メモリアクセスコマンドが送信される通信インタフェース180とは異なる通信インタフェースを用いてかつ/または異なる種類の通信インタフェースを用いて、一式の1つ以上のメモリアクセス動作についての情報を伝える。第2の実施例において、クライアントロジック194は、動作についてより多くを知るために、ストレージデバイス105とは異なるストレージデバイス、ストレージボリューム160および/またはオブザーバロジック150がメモリ120の領域を検査することを容易にするメモリ領域に対して一式の動作を行い得る。検査されるメモリ120の領域は、進行中の動作についての情報を保持するスクラッチメモリ領域を含み得る。
【0074】
クライアントコンポーネント110がストレージデバイス105を切断するかもしくはストレージデバイス105から切断されるかまたはタイムアウト満了などのイベントに応答して、オブザーバロジック150は、1つ以上のアクションをとり得る。例えば、アクションは、ストレージボリューム160の任意の領域が書き込まれたかもしくは読み取られたかどうかを検査すること、補助記憶装置145に領域の内容を持続すること、別のストレージデバイス、外部サーバ、および/もしくはバックアップデバイスに、領域の内容を複製すること、ならびに/またはメモリアクセス動作に関係するある他のアクションを含み得る。
【0075】
ストレージシステム100の1つの利点は、クライアントロジック194がオブザーバロジック150からのいかなるアクションまたは応答も待つことなく、
図2に例示される実施例のロジックを実行し続け得ることであり得る。あるいはまたはさらに、クライアントロジック194は、
図2に例示される実施例のロジックを実行し続ける前に、オブザーバロジック150からのアクションおよび/または応答を待ち得る。
【0076】
ストレージシステム100は、最高速の非持続性信号技術による場合を除き、以前に達成不可能であった性能レベルに近づく速度でデータを格納することを容易にする。従って、株式取引、データベース、または任意の他の種類のアプリケーションなどのアプリケーションは、最高速のネットワーキングフィードの理論的限界に近い速度で持続性ストレージにデータを格納し得る。クラスタ技術は、安全なバッファキャッシュを実装して、非持続性態様でのみ利用可能である速度でメモリの中におよびメモリから外に処理データセットを交換し得る。
【0077】
クライアント側メモリアドレス指定可能ストレージは、並行して同期してまた非同期で異なる記憶媒体に存在し得るアプリケーションを作ることを容易にし得る。アプリケーションが何かの理由で故障した場合、本発明は、異なるマシン上で同一のアプリケーション構成にダイナミックに回復力に富むフェイルオーバーまたはリカバリを作るベースを提供する。
【0078】
クライアントコンポーネント110におけるインタフェース180のような複数の通信インタフェースは、通信インタフェースを横切る性能を集約するために、かつ/または、通信インタフェースもしくは対応する相互接続のいずれでも故障するかまたはさもなければ使用不能になった場合、フェイルオーバーに対して備えるために、用いられ得る。例えば、クライアントロジック194および/またはクライアントコンポーネント110におけるアプリケーションは、ロードバランシング機構を用いることによって、通信インタフェースおよび/または対応する相互接続を横切ってメモリアクセス動作に対する要求をディスパッチし得る。ロードバランシング機構の実施例は、ラウンドロビン技術、帯域幅バランシング技術、および/または、現在公知でありまたは後に発見される任意のロードバランシング機構を含み得る。あるいはまたはさらに、動作が成功裏に完了しない場合、および/または相互接続115が切断され、論理接続が切断され、またはクライアントコンポーネント110とストレージデバイス105との間の通信の信頼性に関する任意の他のイベントなど、別のイベントが起った場合、クライアントコンポーネント110は、フェイルオーバー機構を用い得る。
【0079】
図3は、ストレージシステム100におけるメモリアクセス動作を観測するフロー図を例示する。ロジックは、追加の動作、異なる動作、またはより少ない動作を含み得る。動作は、図に例示される順序とは異なる順序で実行され得る。
【0080】
ストレージデバイス105のメモリ120に対するメモリアクセス動作を行う要求198は、ストレージデバイス105の通信インタフェース135において受信され得る(310)。要求198は、メモリアクセスプロトコルに準拠し得る。
【0081】
メモリアクセス動作は、要求198に応答してメモリ120の一部分に対して通信インタフェース135によって行われ得る(320)。メモリの部分は、ストレージボリューム155に含まれ得、メモリの全体は、例えばメモリ120に含まれ得る。
【0082】
メモリアクセス動作の1つ以上の属性が識別され得る(330)。例えば、オブザーバロジック150は、通信インタフェース135がメモリアクセス動作を完了させた後、クライアントコンポーネント110から通知メッセージを受信するかまたはストレージデバイス105において通信インタフェース135からメモリアクセス動作の属性を受信することによって、メモリ120の部分がメモリアクセス動作によって影響されたことを決定し得る。
【0083】
メモリアクセス動作に関係するアクションは、メモリアクセス動作の属性に基づいて行われ得る(340)。例えば、オブザーバロジック150は、メモリアクセス動作によって影響されたメモリ120の部分を補助記憶装置145にコピーし得る。ストレージシステム100の動作は、例えば、メモリアクセス動作を行う追加の要求に対するリスニングによって終了し得る。
【0084】
説明された特定の実装に関わらず、考察のすべては、限定するよりはむしろ、性質上例示的である。例えば、実装の選択された局面、特徴、もしくはコンポーネントは、メモリに格納されることとして描かれているが、本革新に一致するシステムおよび方法のすべてもしくは一部は、例えば、ハードディスク、フロッピー(登録商標)ディスク、およびCD−ROMなどの補助ストレージデバイスなどの他のコンピュータ読み取り可能記憶媒体、または現在公知であるかもしくは後に開発されるかのいずれかである他の形式のROMもしくはRAMに格納されるか、それらの全体に分散されるか、もしくはそれらから読み取られ得る。コンピュータ読み取り可能記憶媒体は、非一時的コンピュータ読み取り可能記憶媒体であり得、非一時的コンピュータ読み取り可能媒体は、CD−ROM、ROMおよびRAMなどの揮発性メモリもしくは不揮発性メモリ、または任意の他の適切なストレージデバイスを含む。
【0085】
さらに、革新の特定のコンポーネントが説明されたが、革新に一致する、製造の方法、システム、および物品は、追加のコンポーネントまたは異なるコンポーネントを含み得る。例えば、プロセッサは、マイクロプロセッサ、マイクロコントローラ、特定用途向け集積回路(ASIC)、離散ロジック、または他の種類の回路もしくはロジックの組み合わせとして実装され得る。同様に、メモリは、DRAM、SRAM、Flashまたは任意の他のタイプのメモリであり得る。フラグ、データ、データベース、表、実体、および他のデータ構造は、別個に格納および管理され得るか、単一のメモリもしくはデータベースに組み込まれ得るか、分散され得るか、または多くの異なる方法で論理的および物理的に編成され得る。コンポーネントは、独立して動作し得るか、または同じプログラムの一部であり得る。コンポーネントは、別個のリムーバブル回路基板などの別個のハードウェアに常駐し得るか、またはメモリから命令を実装する同じメモリおよびプロセッサなどの共通のハードウェアを共有し得る。プログラムは、単一のプログラムの部分、別個のプログラムであり得るか、またはいくつかのメモリおよびプロセッサ全体に分散され得る。
【0086】
上記に考察された、プロセス、方法および/または技術を実装するそれぞれのロジック、ソフトウェアまたは命令は、コンピュータ読み取り可能媒体またはメモリ、またはキャッシュ、バッファ、RAM、リムーバブル媒体、ハードドライブ、他のコンピュータ読み取り可能記憶媒体、または任意の他の有形の媒体などの他の有形の媒体、またはこれらの任意の組み合わせにおいて提供され得る。有形の媒体は、様々な種類の揮発性および不揮発性の記憶媒体を含み得る。図に例示されるかまたは本明細書に説明される機能、行為またはタスクは、コンピュータ読み取り可能媒体内またはコンピュータ読み取り可能媒体上に格納される一式以上のロジックまたは命令に応答して実行され得る。機能、行為もしくはタスクは、特定の種類の命令セット、記憶媒体、プロセッサもしくは処理戦略に無関係であり、ソフトウェア、ハードウェア、集積回路、ファームウェア、マイクロコード、または単独もしくは組み合わせて動作する任意の種類の他のプロセッサによって行われ得る。同様に、処理戦略は、マルチプロセッシング、マルチタスキング、並列処理および/または現在公知であるかもしくは後に発見される任意の他の処理戦略を含み得る。1つの実施形態において、命令は、ローカルシステムまたはリモートシステムによって読み取られるリムーバブル媒体デバイスに格納される。他の実施形態において、ロジックもしくは命令は、コンピュータネットワークを介するかまたは電話線を介する転送のために遠隔地に格納される。さらに別の実施形態において、ロジックもしくは命令は、所与のコンピュータ、中央処理装置(「CPU」)、グラフィック処理装置(「GPU」)、またはシステム内に格納される。
【0087】
本革新の様々な実施形態が説明されたが、より多くの実施形態および実装が本革新の範囲内で可能であることは当業者に明らかである。従って、添付の特許請求の範囲およびそれらの均等物を考慮する場合を除き、本革新は、限定されるべきではない。