(57)【要約】【課題】記憶媒体への入力アクセスと、記憶媒体からの出力アクセスの干渉を抑えて、記憶媒体へのアクセスの性能低下を防止する。【解決手段】記憶媒体１４が分割された記憶領域毎に異なる記憶媒体１４との組み合わせで冗長関係を有し且つ少なくとも１台の記憶媒体１４で冗長関係が無くなるよう設定され、２台の記憶媒体１４で冗長関係を有する各記憶領域にデータを書き込むのと並行して、１台の記憶媒体１４で冗長関係が無い記憶領域からデータを読み出して永続化記憶媒体１５への永続化書き込みを行う。【選択図】図１
2010170268.tif 000002
【特許請求の範囲】
【請求項１】
永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムにおいて、
前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、
前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、
前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す過程と、
前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む過程とを行う
ことを特徴とするストレージシステムの制御方法。
【請求項２】
前記永続化記憶媒体への書き込み要求に応じて前記各記憶領域にデータを書き込む際、前記書き込み要求に含まれる書き込みアドレスと書き込みデータのデータ長と、前記データが書き込まれる前記一時記憶媒体のアドレスとから構成された要素を、前記記憶領域毎にリスト構造で前記書き込みアドレスの順に並べて保持し、
データの読み出し要求に応じて、前記読み出し要求に対応する書き込みアドレスを持つ要素が前記リスト構造に複数存在していた場合に、前記複数の要素に設定されている前記一時記憶媒体のアドレスの大きさに応じて読み出すデータを選択し、選択したデータを前記一時記憶媒体から読み出す
ことを特徴とする請求項１に記載のストレージシステムの制御方法。
【請求項３】
前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込む際に、所定の順序で書き込みを行う前記記憶領域を選択し、
前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで有する冗長関係が、前記データ書き込みの際に前記記憶領域を選択する前記所定の順序に対応して、ある順序で選択される記憶領域について前記冗長関係を有する複数の一時記憶媒体の少なくとも１台の記憶媒体が、次の順序で選択される記憶領域については前記同一の複数の一時記憶媒体の他の記憶媒体と冗長関係を有しない
ことを特徴とする請求項１又は２に記載のストレージシステムの制御方法。
【請求項４】
前記永続化記憶媒体への書き込み要求に応じて、書き込みアドレスとデータ長とデータとをひとまとまりにして前記一時記憶媒体へのデータの書き込みが行われる
ことを特徴とする請求項１から３のいずれか１項に記載のストレージシステムの制御方法。
【請求項５】
永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムの制御装置において、
前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、
前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、
ストレージシステムの制御装置が、
前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す手段と、
前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む手段と
を備えることを特徴とするストレージ制御装置。
【請求項６】
永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムの制御装置において、
前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、
前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、
ストレージシステムの制御装置が、
前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す過程と、
前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む過程と
をコンピューターを用いて実行するための指令を含むことを特徴とするストレージ制御装置のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えばランダムアクセスに比してシーケンシャルアクセスが高速な記憶媒体を用いてキャッシュを構成する際に用いて好適なストレージシステムの制御方法、ストレージ制御装置及びプログラムに関する。
【背景技術】
【０００２】
従来のストレージシステムには、ホストコンピューターからのライトデータをキャッシュメモリに一時格納した後、他のストレージに書き込むようにしたものがある。このようなストレージシステムでは、ホストコンピューターから見たデータのライト性能を向上するために、ライトバックキャッシュアルゴリズムと呼ばれる手法が用いられてきた。ライトバックキャッシュアルゴリズムでは、キャッシュメモリにデータを格納した時点でホストコンピューターに対してライトデータがストレージに書き込まれた旨を示す応答が返される。そして、その後に、キャッシュメモリに書き込まれたライトデータが、キャッシュに比して低速ではあるが大容量である記憶媒体（磁気ディスクなど）に書き込まれる。この場合、キャッシュには揮発の半導体メモリ（ＤＲＡＭ（dynamic random access memory）等）が用いられるのが一般的で、これらの揮発メモリは、性能は良いが、ビットあたりの単価が高く大容量のキャッシュを実現は困難であった。
【０００３】
一方、磁気ディスクやフラッシュメモリ、フラッシュメモリを用いたシリコンディスク（以下ＳＳＤ（Solid State Drive））等の不揮発性記憶媒体はＤＲＡＭに比べ容易に大容量とすることができる。しかし、シーケンシャルアクセスに比して、ランダムアクセスの性能が悪い。そのため、そのままでは従来のＤＲＡＭ等を用いたキャッシュの代替としての用をなさない。ただし、これらの記憶媒体のシーケンシャルアクセスはランダムアクセスに比して高速である。そこで、磁気ディスクやフラッシュメモリに対しては、ランダムアクセスをシーケンシャルアクセスに変換することで高速化を図る手法であるログ書き込み方式が用いられてきた。ログ書き込みの技術として非特許文献１、非特許文献２等に記載されているような方式が挙げられる。ログ書き込み方式では、ディスク上の特定箇所に更新内容のログ書き込み用の領域、つまり磁気ディスクにライト専用の領域を確保する。磁気ディスクに対して書き込むデータは全てこのライト専用領域に先頭から順番に追記する。各ライトデータにはライト先のアドレスと、ライトデータのサイズを識別するためのデータが付加される。このようにしてログ書き込み方式では、ランダムライトアクセスがシーケンシャルライトアクセスに変換され、シーケンシャルアクセスがランダムアクセスに比して高速な記憶媒体におけるライト時の性能を向上することができる。
【０００４】
しかし、これらのログ書き込みの方式では連続したアドレスのデータと連続していないアドレスのデータとが混在する形でデータの順次書き込みが行われる。その為、連続したアドレスのデータが異なる位置に分散して記憶される可能性がある。その結果、リード時には、連続したアドレスのデータ読み出しであってもランダムアクセスとなる場合が発生する。
【０００５】
また、上述したようなログ書き込み方式の基本的な動作は、上位装置からのライトデータを記憶媒体上に順次記憶していくことである。この動作だけでは、同一アドレスのデータが記憶媒体上に複数存在することになる。このままデータの書き込みを続けると、使用するに従い、不要なデータによって記憶媒体の容量が減ることになる。そして、記憶媒体がいっぱいになった時点でライト不可能となってしまうことになる。この現象を避けるため、同一アドレスのデータのマージ等の処理を行うことになるが、これらの処理が性能上の問題となってきていた。
【０００６】
これに対しては、例えば、一度ログ書き込みを行った記憶媒体から順次読み出しを行い、１台、或いは複数台の記憶媒体に通常の書き込みを行うことで、データの永続化を行い、重複するアドレスのデータの排除を行うことが考えられる。また、それと共に、リード時にはこれら永続化されたデータを読み出すようにすることで、ログ書き込みされたデータを順次読み出す時に発生していたランダムアクセスを回避できると考えられる。
【０００７】
しかし、この方法では、ログ書き込みを行った記憶媒体からデータの読み出しを行う処理が新たに追加される。すなわち、例えば、ログ書き込みを行うと同時に読み出しを行う為のリードが発生することになる。この場合、ログ書き込みを行う記憶媒体に対してはライトアクセスとリードアクセスとが混在することになり、性能劣化が発生する要因となる。
【０００８】
なお、これらストレージに用いる記憶媒体、特にライトデータをキャッシュする記憶媒体に関しては、記憶媒体の故障がデータ喪失に繋がることになる。これに対しては、少なくともライトデータの記録を冗長化することが考えられる。例えば単純に２組の記憶装置に記録を行うミラー（ＲＡＩＤ１（Redundant Arrays of Inexpensive Disks 1））などの冗長化手法を用いることが考えられる。
【先行技術文献】
【非特許文献】
【０００９】
【非特許文献１】Rosenblum, Mendel and Ousterhout, John K. (June 1990) - "The LFS Storage Manager". Proceedings of the 1990 Summer Usenix. pp315-324.
【非特許文献２】Rosenblum, Mendel and Ousterhout, John K. (February 1992) - "The Design and Implementation of a Log-Structured File System". ACM Transactions on Computer Systems, Vol. 10 Issue 1. pp26-52.
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上述したように、ＤＲＡＭ等を用いた小容量のキャッシュよりも大容量のキャッシュを磁気ディスクやフラッシュメモリ、ＳＳＤ等の記憶媒体を用いて実現する場合、ライトデータを記憶媒体に高速に書き込むログ書き込み方式と、ログ書き込みを行った記憶媒体からデータを読み出すことでデータの永続化を行う手法を組み合わせることが考えられる。しかしながら、このような手法を用いた場合、ストレージあるいはストレージシステムにおいて、上位装置からの書き込みのアクセスと、データの永続化を行う為のアクセスが干渉し、性能低下が発生するという課題がある。
【００１１】
本発明の目的は、上記の事情を考慮し、例えば磁気ディスク、フラッシュメモリ等のランダムアクセスに比してシーケンシャルアクセスが高速な記憶媒体を用いてキャッシュを構成する場合に、記憶媒体への入力アクセスと、記憶媒体からの出力アクセスの干渉を抑えて、記憶媒体へのアクセスの性能低下を防止することができるストレージシステムの制御方法、ストレージ制御装置及びプログラムを提供することである。
【課題を解決するための手段】
【００１２】
上記課題を解決するため、本発明は、永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムにおいて、前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す過程と、前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む過程とを行うことを特徴とするストレージシステムの制御方法である。
【００１３】
また、本発明は、永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムの制御装置において、前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、ストレージシステムの制御装置が、前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す手段と、前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む手段とを備えることを特徴とするストレージ制御装置である。
【００１４】
また、本発明は、永続化記憶媒体に記憶するデータを、一旦一時記憶媒体に記憶して、前記一旦記憶したデータを前記一時記憶媒体から読み出して前記永続化記憶媒体へと転送するストレージシステムの制御装置において、前記一時記憶媒体が、少なくとも３台の一時記憶媒体から構成され、前記各一時記憶媒体が、２台以上の一時記憶媒体間で記憶領域毎に異なる一時記憶媒体との組み合わせで冗長関係を有し且つ少なくとも１台の一時記憶媒体で当該記憶領域との冗長関係が無くなるよう設定された複数の記憶領域をそれぞれ有し、ストレージシステムの制御装置が、前記少なくとも３台の一時記憶媒体のうち、少なくとも２台の一時記憶媒体で冗長関係を有する各記憶領域にデータを書き込むのと並行して、前記少なくとも１台の一時記憶媒体で当該記憶領域と冗長関係が無い記憶領域からデータを読み出す過程と、前記少なくとも１台の一時記憶媒体から読み出したデータを前記永続化記憶媒体に書き込む過程とをコンピューターを用いて実行するための指令を含むことを特徴とするストレージ制御装置のプログラムである。
【発明の効果】
【００１５】
本発明によれば、永続化の為の読み出しを、例えば上位装置からの書き込み要求に応じて選択される記憶領域が属する一時記憶媒体とは異なる一時記憶媒体に属する記憶領域を選択して行うことで、上位装置からのシーケンシャルライトを妨げる事無く永続化の為の読み出しを行うことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明を実施するための構成を示すブロック図である。
【図２】本発明を実施するための記憶媒体の領域の分割例を示す図である。
【図３】本発明を実施するための管理テーブルの構成を示す図である。
【図４】本発明を実施するための領域リストの構成を示す図である。
【図５】本発明を実施するための図２とは異なる記憶媒体の構成例と、領域の分割を示す図である。
【図６】図２の記憶媒体を用いて本発明の実施の形態の基本的動作を説明するための図である。
【図７】本発明を実施するための書き込み処理フローである。
【図８】本発明を実施するための永続化処理フローである。
【図９】本発明を実施するための読み出し処理フローである。
【発明を実施するための形態】
【００１７】
以下、本発明を実施するための形態について図面を参照して詳細に説明する。図１は、本発明によるストレージシステムの構成の一例を示すブロック図である。図１のストレージシステム１は、キャッシュ管理手段１１、管理テーブル１２、領域リスト１３、永続化記憶媒体１５及び複数の記憶媒体１４、１４、１４、…、とから構成されている。ただし、本発明によるストレージシステム（あるいはストレージ制御装置）の態様は、図１のストレージシステム１から永続化記憶媒体１５を除いた構成や、あるいは永続化記憶媒体１５と記憶媒体１４、１４、１４、…とを除いた構成としてとらえることもできる。
【００１８】
なお、本実施形態の説明においては、「ストレージシステム」（あるいは「ストレージ」）という語を、上位装置から直接的にアクセス対象となる記憶装置（あるいは記憶手段）を意味するものとして用いている。また、「記憶媒体」という語を、キャッシュ管理手段１１を介して上位装置から間接的にアクセス対象となる記憶装置（あるいは記憶手段）に用いている。すなわち、「ストレージシステム」、「ストレージ」あるいは「記憶媒体」は、他に記憶装置と呼んだり、あるいは記憶手段と呼んだりすることもできる。
【００１９】
図１において、キャッシュ管理手段１１は、内部に図示してないＣＰＵ（Central processing unit）と、ＲＡＭ、ＲＯＭ（Read Only Memory）、ＥＥＰＲＯＭ（Electrically Erasable and Programmable ROM）等の記憶装置と、上位装置や永続化記憶媒体１５との間のインターフェース装置などを備えて構成されている。キャッシュ管理手段１１は、内部のＲＯＭやＥＥＰＲＯＭに記憶されているプログラムに従って動作し、記憶媒体１４、１４、１４、…等の各部を制御する。キャッシュ管理手段１１に接続される上位装置は、サーバー、パーソナルコンピューター等の装置であり、ストレージシステム１へのデータの書き込み、あるいはデータの読み出しを行う装置である。本実施形態において、キャッシュ管理手段１１は、上位装置からの永続化記憶媒体１５へのデータの書き込み要求に応じて永続化記憶媒体１５に記憶するデータを、一旦記憶媒体１４に記憶した後、その一旦記憶したデータを記憶媒体１４から読み出して永続化記憶媒体１５へと転送するキャッシュ制御を行う装置として機能する。また、キャッシュ管理手段１１は、上位装置からの永続化記憶媒体１５へのデータの書き込み要求に応じて、記憶媒体１４にデータを一旦記憶する際に、その書き込み要求に含まれる書き込みアドレスとデータ長とデータとをひとまとまりにして記憶媒体１４へシーケンシャルに書き込むログ書き込み方式を用いてデータの書き込みを行うように構成されている。
【００２０】
また、キャッシュ管理手段１１は、記憶媒体１４にデータを書き込む際、記憶媒体１４全体に対して所定の記憶容量毎に割り当てられている媒体アドレスを用いて記憶媒体１４にアクセスする。その際、キャッシュ管理手段１１は、記憶媒体１４上の分割された複数の記憶領域毎に書き込み処理を管理する。この記憶媒体１４上の分割領域は、記憶媒体１４の複数の媒体アドレスを単位として設定されている。そして、記憶媒体１４における媒体アドレスと複数の分割された記憶領域との関係は、所定の変換表（あるいは対応表）を用いて設定したり、あるいは所定の数式を用いて設定したりすることができる。この変換表や数式は、例えばキャッシュ管理手段１１のＥＥＰＲＯＭ等の記憶装置内に格納されている。
【００２１】
なお、管理テーブル１２や領域リスト１３は、キャッシュ管理手段１１内またはキャッシュ管理手段１１外の所定の不揮発性記憶装置内等に格納することができる。ただし、動作時にキャッシュ管理手段１１内のＲＡＭなどに不揮発性記憶装置から読み出して参照・更新するようにすることもできる。
【００２２】
記憶媒体１４、１４、１４、…は、キャッシュ管理手段１１の制御に従い、上位装置から書き込み要求が行われたライトデータを一時的に記憶するためのキャッシュを構成する。記憶媒体１４、１４、１４、…は、磁気ディスク、フラッシュメモリ、ＳＳＤ等のランダムアクセスに比してシーケンシャルアクセスが高速な不揮発性の記憶媒体である。本実施の形態のストレージシステム１では、３台以上の記憶媒体１４、１４、１４、…が設けられている。
【００２３】
永続化記憶媒体１５は、上位装置から書き込み要求（ライトリクエスト）されたデータを、記憶媒体１４に一旦書き込んだ後にそれを読み出して、永続的に記憶するための記憶媒体である。永続化記憶媒体１５は、例えば磁気ディスクなどで構成されている。
【００２４】
管理テーブル１２は、記憶媒体１４、１４、１４、…に記憶するデータを、記憶媒体１４、１４、１４、…に設定した記憶領域毎に管理するための情報を記憶するテーブルである。領域リスト１３は、ライトリクエスト毎のホストアドレスとデータ長とを記憶媒体１４の分割された記憶領域毎に管理するための情報を示すリストである。
【００２５】
以下、図１〜図４を参照して、図１の各構成について詳細に説明する。なお、図２は図１の記憶媒体１４、１４、１４、…における分割された記憶領域を説明するための模式図である。図３は図１の管理テーブル１２の構成例を示す模式図である。そして、図４は図１の領域リスト１３の構成例を示す模式図である。
【００２６】
図１、図２、図３および図４を参照すると、本発明の実施の形態のストレージステム１は、複数の記憶媒体１４、１４、１４、…を少なくとも３台備えて構成されている。図２は、ストレージシステム１が３台の記憶媒体１４を備える場合の各記憶媒体１４の記憶領域の分割例を示している。ここでは３台の記憶媒体１４を、記憶媒体１（１４−１）、記憶媒体２（１４−２）、記憶媒体３（１４−３）として示している。ここで、複数の記憶媒体１４に割り当てられた番号１、２、３との区別のため、符号１４−１、１４−２等を括弧で囲んで示している。
【００２７】
この場合、記憶媒体１４−１、１４−２、１４−３は、それぞれ、図２の様な複数の記憶領域２１に分割され、各記憶領域２１に記憶されているデータが複数の（この場合、２台の）記憶媒体間で冗長化されている。この場合、各記憶領域２１は、複数の媒体アドレスに対応する所定の記憶容量を有している。また、各記憶領域２１には、符号２２で示される識別符号（図２では識別番号：１、２、３、４、５、６、…、以下では「領域番号」とも呼ぶ。）が割り当てられている。この各記憶領域２１の媒体アドレスと識別符号２２との関係は、上述したようにキャッシュ管理手段１１によって管理されている。なお、上位装置からキャッシュ管理手段１１に対して１回のライトリクエストで書き込みが要求されるライトデータのデータ長は、記憶媒体１〜３（１４−１〜３）の各記憶領域２１のデータ長（すなわち各記憶領域の記憶容量）よりも小さくなるように設定されているものとする。
【００２８】
記憶媒体１４間の冗長化については、例えば図２の記憶媒体１（１４−１）の記憶領域「１」（この「  」は識別符号２２を表す。以下、同様。）は記憶媒体２（１４−２）の記憶領域「１」との間で冗長化がなされ、記憶媒体１（１４−１）の記憶領域「２」は記憶媒体３（１４−３）の記憶領域「２」と冗長化がなされている。すなわち、記憶領域「１」に対するデータの書き込みは、記憶媒体１（１４−１）の記憶領域「１」と記憶媒体２（１４−２）の記憶領域「１」に対して行われる。また、記憶領域「２」に対するデータの書き込みは、記憶媒体１（１４−２）の記憶領域「２」と記憶媒体３（１４−３）の記憶領域「２」に対して行われる。なお、図２の例では、記憶媒体１（１４−１）に先頭から順に記憶領域「１」、記憶領域「２」、記憶領域「４」、記憶領域「５」が設定されている。記憶媒体２（１４−２）に先頭から順に記憶領域「１」、記憶領域「３」、記憶領域「４」、記憶領域「６」が設定されている。記憶媒体３（１４−３）に先頭から順に記憶領域「２」、記憶領域「３」、記憶領域「５」、記憶領域「６」が設定されている。
【００２９】
すなわち、本実施形態では、記憶媒体１４が、少なくとも３台の記憶媒体１４−１、１４−２、１４−３から構成され、各記憶媒体１４−１、１４−２、１４−３が、２台以上の記憶媒体（１４−１〜３のいずれか２台）間で記憶領域２１毎に異なる記憶媒体（１４−１〜３のいずれか２台）との組み合わせで冗長関係を有するように記憶領域２１の設定がなされている。それと共に、少なくとも１台の記憶媒体（１４−１〜３のいずれか１台）で冗長関係を有する記憶媒体（１４−１〜３のいずれか２台）の当該記憶領域２１との冗長関係が無くなるよう設定されている。このように設定された複数の記憶領域２１をそれぞれの記憶媒体１４−１、１４−２、１４−３が有している。
【００３０】
図２に示すように３台の記憶媒体１４を用いる場合、キャッシュ管理手段１１によって、３台の記憶媒体１４−１、１４−２、１４−３のうちの少なくとも２つの記憶媒体１４に同一のデータを記憶した記憶領域２１が存在するようにデータの書き込みが行われる。この同一のデータが記憶される記憶領域２１の配置は、冗長化の配置が記憶媒体１（１４−１）、記憶媒体２（１４−２）、記憶媒体３（１４−３）のそれぞれに分散し、かつ連続した記憶領域２１間（例えば記憶領域「１」と記憶領域「２」の間、記憶領域「２」と記憶領域「３」の間等）で１つは異なる記憶媒体１４に配置されるようにすればどの様な順番でもかまわない。例えば連続した記憶領域「１」と記憶領域「２」について、記憶領域「１」の冗長化が記憶媒体１（１４−１）と記憶媒体２（１４−２）で行われた場合、次の記憶領域「２」の冗長化は、記憶媒体１（１４−１）と記憶媒体３（１４−３）との間または記憶媒体２（１４−２）と記憶媒体３（１４−３）との間で行われるようにする。
【００３１】
なお、記憶媒体１４上の記憶領域２１の領域番号の割当であるが、連続した領域番号の間で、前回書き込み対象として選択された記憶領域２１の属する記憶媒体１４の内少なくとも１つが、新規に割り当てる記憶領域２１の記憶媒体１４に存在しないように行うようにする。図２の様に規則性を持たせれば数式にて算出可能であり、別途変換用のテーブルを持たせても良い。この割り当て方法を採用したのは新規の書き込み対象として選択される記憶領域２１の記憶媒体１４が前回と全く同じ記憶媒体１４から選択されると、永続化時の読み出しの選択が出来なくなり、永続化の効率が落ちるからである。
【００３２】
すなわち、本実施の形態では、少なくとも３台の記憶媒体１４のうち、少なくとも２台の記憶媒体１４で冗長関係を有する各記憶領域２１にデータの書き込みが行われる、その際に、所定の順序で（ここでは領域番号１つずつの順序で）書き込みを行う記憶領域２１が選択されるようになっている。ここで、各記憶媒体１４が、２台以上の記憶媒体１４間で記憶領域２１毎に異なる記憶媒体１４との組み合わせで冗長関係が設定されている。そして、データ書き込みの際に記憶領域１４を選択する所定の順序に対応して、ある順序で選択される記憶領域２１について冗長関係を有する複数の記憶媒体１４の少なくとも１台の記憶媒体１４が、次の順序で選択される記憶領域２１については同一の複数の記憶媒体１４の他の記憶媒体１４と冗長関係を有しないように設定されている。このようにして前回書き込み対象として選択された記憶領域２１の属する記憶媒体１４の内少なくとも１つが新規に割り当てる記憶領域２１の記憶媒体１４に存在しないようにすれば、永続化の効率の低下を抑えることができる。
【００３３】
上位装置からのライトリクエストが発生した場合、上位装置からのライトリクエストはキャッシュ管理手段１１で受信される。ライトリクエストを受信したキャッシュ管理手段１１は、管理テーブル１２を参照することでどの記憶領域に書き込みを行えば良いか判断する。管理テーブル１２は、図３に示されるようにそれぞれのレコードのオフセットを領域番号３１（図２の識別符号２２に対応）とする形式で構成されている。図３に示す場合、各レコードは、ステータスを示すフィールド３２と、媒体アドレスを示すフィールド３３と、永続化媒体番号を示すフィールド３５と、領域リストポインタを示すフィールド３４とから構成されている。
【００３４】
フィールド３２が示すステータスには、「書き込み対象領域」、「永続化対象領域」、「無効領域」および「永続化中」の４つがある。ステータスが「書き込み対象領域」であるということは、当該記憶領域２１が、上位装置からの１つの前のライトリクエストによってデータ書き込みが行われた領域であって、かつその領域にまだデータを書き込む余裕がある、という状態である。「永続化対象領域」は、領域全てに対して書き込みが終了し、データの永続化対象であることを示す。「無効領域」は、永続化が終了し、キャッシュとしては用をなさなく成ったか（すなわち記憶されているデータが今後使用されないものとなっているか）、或いはシステムの初期化時の無効なデータが格納されていることを示す。「永続化中」は、その領域を対象とする永続化が行われていることを示す。これらのステータスは別途コードを持つことで表されるが、ここではその具体的な実装方法については言及しない。
【００３５】
フィールド３３に設定される媒体アドレスは、記憶媒体１４の媒体アドレスであり、ステータス・フィールド３２に設定される記憶媒体１４の状態に応じて、書き込みが完了している位置や、永続化処理を行っている位置に対応する媒体アドレスが設定される。例えば、ステータス・フィールド３２が「書き込み対象領域」となっている場合には、記憶媒体１４上のどのアドレスまで書き込みが完了しているのかを示す媒体アドレスが設定される。また、「永続化中」であれば、永続化処理で読み出すべき媒体アドレスが設定される。また、「永続化対象領域」および「無効領域」の場合には、当該記憶領域２１の先頭の媒体アドレスが設定される。
【００３６】
書き込み処理時には、ライトリクエストを受信したキャッシュ管理手段１１が、領域番号を示すオフセット３１を持つレコード中のステータス・フィールド３２を参照することで、その領域番号（オフセット３１）で示される領域のステータスが「書き込み対象領域」であるかどうか判定する。そして、この判定結果に基づいてどの記憶領域２１に書き込みを行えば良いか判断する。すなわち、「書き込み対象領域」のステータスを持つ記憶領域２１が存在する場合、キャッシュ管理手段１１は、上位装置からのアドレス（以降、ホストアドレス）と、データ長と、データとを連続して、「書き込み対象領域」と判断した記憶領域２１に書き込む。その際、ホストアドレスと、データ長と、データとからなる一連のデータは、複数の記憶媒体１４上で冗長化が指定された同一領域番号の複数の記憶領域２１の同じアドレスに対して書き込まれる。書き込み処理の際、キャッシュ管理手段１１は、書き込みの最後のデータの次のアドレスを、管理テーブル１２の媒体アドレス・フィールド３３に書き込む。なお、「書き込み対象領域」のステータスを持つ記憶領域２１が存在しない場合、「無効領域」のステータスを持つ記憶領域２１のうち、例えば最小の領域番号の記憶領域２１を選択して、書き込み処理が行われる。
【００３７】
また、管理テーブル１２の各レコードにおける永続化媒体番号・フィールド３５は、現在永続化を行っている記憶媒体１４が何れかを示す。永続化の際には冗長化された記憶媒体１４の何れか一つからデータを読み出すだけでよい。そこで、本実施形態では、永続化の際に冗長化された記憶媒体１４の何れか一つからデータを読み出すこととしている。その為、同一の番号の記憶領域２１を持つ複数の記憶媒体１４のうちのどの記憶媒体１４に対して永続化処理を行っているかを、この永続化媒体番号・フィールド３５で示すようにしている。
【００３８】
また、本実施形態では、各記憶領域２１に格納されたデータのライトリクエスト毎のホストアドレスとデータ長をセットとして領域リスト１３で、記憶領域２１毎に管理するようにしている。そのため、管理テーブル１２の各レコードにおける領域リストポインタ・フィールド３４は、領域リスト１３の記憶領域２１毎のデータへのポインタを保持するようにしている。
【００３９】
図４（ａ）は、図１の領域リスト１３の構成例を示す模式図である。領域リスト１３は、その各要素が、個々のデータを示す複数のメンバと次の要素を示す情報であるリストポインタを示すメンバとから構成されるリスト構造を有している。すなわち、領域リスト１３は、それぞれが１または複数の「メンバ」からなる複数の「要素」から構成されている。ただし、「要素」と「メンバ」はいずれもデータ（情報）を表す語であるが、ここで用いる「要素」や「メンバ」の語は一例であり、例えば「要素」の代わりに「レコード」や「セル」を用いたり、「メンバ」の代わりに「データ」を用いたり、さらに他の語を用いることもできる。図４（ａ）に示す領域リスト１３は、空きリストの先頭を示すリストポインタからなる先頭要素４１と、先頭要素４１のリストポインタで示される要素４０ａと、最終要素である要素４０ｂとを含んで構成されている。要素４０ａは、上位装置からの各ライトリクエストに対応した、ホストアドレスを示すメンバ４２、データ長を示すメンバ４３、領域アドレスを示すメンバ４４と、次の要素へのリストポインタを示すメンバ４５とから構成されている。このメンバ４４には、ライトリクエストによるデータの書き込みを行った際の記憶媒体１４上の当該データの先頭アドレスを示す情報である領域アドレスが設定される。ここで、領域アドレスは、記憶領域２１毎の相対的な媒体アドレスを示すものであって、記憶領域２１毎に例えば０、１、…と割り当てられている。また、領域リスト１３の最終要素４０ｂは、リストポインタを表すメンバ４５に最終要素であることを示す特別な情報としての「ＮＵＬＬ（ヌル）」が設定されている。
【００４０】
キャッシュ管理手段１１は、複数の記憶媒体１４に対して一連の情報を書き込む際に、上位装置からのライトリクエスト毎に、領域リスト１３を更新する。キャッシュ管理手段１１は、まず、ライトリクエスト毎に、ホストアドレス、データ長および領域アドレスを、メンバ４２、メンバ４３およびメンバ４４に設定した要素４０ａを用意する。次に、この用意した要素４０ａを挿入する位置を検索する。位置の検索は、まず図４（ａ）の領域リスト１３の先頭要素４１を取り出してリンクポインタを参照し、次に各要素４０ａのメンバ４５が示すリンクポインタを辿りながら、リスト上の各要素４０ａのメンバ４２が示すホストアドレスと、受信したライトリクエストのホストアドレスとを比較することで行われる。そして、検索の結果得られたホストアドレスが昇順に並ぶ位置に、当該ライトリクエストに対応して新たに用意した要素４０ａが挿入される。
【００４１】
すなわち、本実施形態では、永続化記憶媒体１５へのライトリクエスト（書き込み要求）に応じて各記憶領域２１にデータを書き込む際のライトリクエストに含まれるホストアドレス（書き込みアドレス）とライトデータ（書き込みデータ）のデータ長と、そのデータが書き込まれる記憶媒体１４の記憶領域２１毎の相対的な媒体アドレスである領域アドレスとから構成された要素４０ａを、記憶領域２１毎にリスト構造で、ホストアドレス（書き込みアドレス）の順に並べて保持している。
【００４２】
また、キャッシュ管理手段１１は、永続化されていない記憶媒体１４から永続化のための読み出しを行う際に、領域リスト１３のメンバ４４の領域アドレスを参照することで、記憶媒体１４上のデータの存在する位置を確認することができる。また、キャッシュ管理手段１１は、領域リスト１３を参照することで、同一ホストアドレスのデータが重複して記憶されている領域を検知することができる。
【００４３】
ここで、図５を参照して、図１の記憶媒体１４、１４、１４、…における図２と異なる他の記憶領域２１の分割例について説明する。図５では、３台の記憶媒体１４−１、１４−２、１４−３に加え、４台目の記憶媒体４（１４−４）を設ける場合の記憶領域２１の分割例を示している。図５の例では、記憶媒体１（１４−１）に先頭から順に記憶領域「１」、記憶領域「４」、記憶領域「５」、記憶領域「８」が設定されている。記憶媒体２（１４−２）に先頭から順に記憶領域「２」、記憶領域「１」、記憶領域「６」、記憶領域「５」が設定されている。記憶媒体３（１４−３）に先頭から順に記憶領域「３」、記憶領域「２」、記憶領域「７」、記憶領域「６」が設定されている。記憶媒体４（１４−４）に先頭から順に記憶領域「４」、記憶領域「３」、記憶領域「８」、記憶領域「７」が設定されている。
【００４４】
図５に示すように、記憶媒体１４が増えるに従い、書き込み対象となる冗長化された複数の記憶媒体１４以外の記憶媒体１４の台数を増やすことができる。すなわち、データ書き込みの際に、書き込み対象とはなっておらず、データを読み出すことが可能となる記憶媒体１４の台数が増えることになる。これによれば、書き込み対象ではない複数の記憶媒体１４からデータを並列的に読み出すことで、永続化時の読み出しの帯域を広げることができる。また４台以上の場合では冗長化を、２台の記憶媒体１４間だけでは無く、３台あるいはそれ以上の記憶媒体１４間で行うようにすることもできる。
【００４５】
次に、図６を参照して、図１に示すストレージシステム１の上位装置からのライトリクエストに応じたデータの書き込みと、書き込みが完了した記憶領域２１に対する永続化処理の基本的な動作について説明する。図６（ａ）は、図２と同一の領域分割が行われた記憶媒体１４−１〜１４−３に対するデータの書き込み動作を示す模式図である。この場合、この書き込みの前に、記憶媒体１４−１〜１４−３は、キャッシュデータの書き込みがない状態（すべての記憶領域２１のステータス（フィールド３２）が「無効領域」の状態）であるとする。
【００４６】
ストレージシステム１は、キャッシュ管理手段１１によって、上位装置からのライトリクエストに基づくホストアドレスとデータ長とデータとの一連のデータを、最も若い番号の領域番号「１」の記憶領域２１に書き込む処理を行う。この場合、領域番号「１」の記憶領域２１は、記憶媒体１（１４−１）の記憶領域「１」２１ａと記憶媒体２（１４−２）の記憶領域「１」２１ｂである。キャッシュ管理手段１１は、記憶領域「１」２１ａと記憶領域「１」２１ｂの両方にホストアドレスとデータ長とデータとの一連のデータを書き込む。その際、キャッシュ管理手段１１は、管理テーブル１２と領域リスト１３を更新する。すなわち、図３の領域番号「１」をオフセットとするレコードのステータス・フィールド３２を「書き込み対象領域」に設定するとともに、媒体アドレス・フィールド３３に一連のデータの書き込みを行った最終の媒体アドレスの次の媒体アドレス（すなわち次の書き込みを行う媒体アドレス）を設定する。ただし、この場合、永続化媒体番号・フィールド３５に永続化媒体番号は設定されない。
【００４７】
また、この場合の書き込み対象の記憶領域「１」（２１ａ、２１ｂ）に対応する領域リスト１３の更新は、当該ライトリクエストのホストアドレスをメンバ４２に、データ長をメンバ４３に、当該データの記憶領域「１」（２１ａ、２１ｂ）における相対的な先頭アドレスをメンバ４４に設定した要素４０を作成することで行われる。またその要素４０の位置を示すリストポインタを管理テーブル１２の領域リストポインタ・フィールド３４に設定する。この領域リストポインタ・フィールド３４を参照することで、当該記憶領域「１」に対応するリスト構造を参照することが可能となる（図４（ｂ）参照）。以降、ライトリクエストを受信すると、記憶領域「１」（２１ａ、２１ｂ）にホストアドレスとデータ長とデータとの一連のデータが書き込まれるとともに、管理テーブル１２の媒体アドレス・フィールド３３の内容が更新され、さらに当該ライトリクエストに対応する新たな要素４０が作成されて当該記憶領域「１」に対応するリスト構造に挿入されて領域リスト１３が更新される。
【００４８】
次に、キャッシュ管理手段１１が上位装置から新たなライトリクエストを受けた場合に、記憶媒体１（１４−１）の記憶領域「１」２１ａと記憶媒体２（１４−２）の記憶領域「１」２１ｂに当該ライトリクエストのデータ長のデータの書き込みができなかったときについて説明する。この場合、管理テーブル１２の領域番号「１」のレコードのステータス・フィールド３２が「永続化対象領域」に更新されるとともに、媒体アドレス・フィールド３３に当該記憶領域２１の先頭アドレスが設定される。一方、次の領域番号「２」のステータス・フィールド３２が「書き込み対象領域」され、当該ライトリクエストの一連のデータは、記憶領域「２」２１ｃと記憶領域「２」２１ｄに書き込まれる（図６（ｂ）参照）。
【００４９】
この場合、記憶領域「２」２１ｃは記憶媒体１（１４−１）上の記憶領域であり、記憶領域「２」２１ｄは記憶媒体３（１４−３）上の記憶領域である。したがって、記憶媒体２（１４−２）に対してはデータの書き込み処理は行われない。また、記憶媒体２（１４−２）のステータスは「永続化対象領域」に設定されている。そのため、キャッシュ管理手段１１は、記憶媒体２（１４−２）の記憶領域「１」２１ｂからデータを読み出して永続化記憶媒体１５へ保存する永続化処理を開始する。また、この際、管理テーブル１２の記憶領域「１」に対応するレコードの永続化媒体番号・フィールド３５に、記憶媒体２（１４−２）を識別する情報（例えば番号「２」）が設定される。
【００５０】
次に、図７を参照して、図１に示すストレージシステム１による書き込み処理フローについて詳細に説明する。なお、管理テーブル１２は図３を参照して説明した構成を有しているものとする。領域リスト１４は図４（ａ）を参照して説明した構成を有しているものとする。また、記憶媒体１４は、図２に示すように記憶領域が分割された３台の記憶媒体１（１４−１）、記憶媒体２（１４−２）、記憶媒体３（１４−３）が用いられることとする。
【００５１】
図１〜図４の各図と図６のフローチャートを参照すると、上位装置がライトリクエスト（コマンド）とライトデータを送信すると、ライトリクエストはキャッシュ管理手段１１で受信される（ステップ６０１）。そのライトリクエストを受信したキャッシュ管理手段１１は、管理テーブル１２を参照し、記憶媒体１４中のどの記憶領域２１に書き込みを行えば良いか判断する（ステップ６０２）。ステップ６０２では、管理テーブル１２内の各レコード中の各ステータス・フィールド３２を参照することで、その領域番号３１で示される記憶領域２１のステータスが「書き込み対象領域」であるかどうか判定する。そして、現在どの記憶領域２１に書き込みを行えば良いか判断する。そして、書き込み対象の記憶領域２１を選択する。
【００５２】
次に、キャッシュ管理手段１１によって「書き込み対象領域」と判断された記憶領域２１に対して書き込み可能かどうかの判定を行う（ステップ６０３）。具体的には、管理テーブル１２の当該記憶領域２１のレコードの媒体アドレス・フィールド３３を参照することで、記憶媒体１４上のどのアドレスまでの書き込みが完了したかを確認する。さらに、記憶媒体１４の媒体アドレスと記憶領域の分割との対応を示す変換表などを参照して、上位装置からのライトリクエストで指定されたデータ長に基づき、その記憶領域２１の空き領域に当該データを書き込めるかどうかを判定する。
【００５３】
その結果、書き込み可能であれば、そのライトリクエストで指定されたホストアドレスとデータ長及びデータを連続して記憶媒体１４上の冗長化の指定された複数の記憶領域２１の同一媒体アドレスに対して書き込み処理が行われる（ステップ６０４）。キャッシュ管理手段１１は、書き込みの最後のデータの次のアドレスを、当該記憶領域２１に対応するレコードの媒体アドレス・フィールド３３に書き込むことで管理テーブル１２の更新を終了する（ステップ６０５）。更に、キャッシュ管理手段１１は、上位装置から受信したライトリクエストの内容に基づいて、書き込み指定された管理テーブル１２上の領域番号の領域リストポインタ・フィールド３４を参照し、記憶領域２１毎に設定された領域リスト１３の更新を行う（ステップ６０６）。
【００５４】
ステップ６０６での領域リスト１３の更新処理は、まず、図４（ａ）の空きリスト４１の先頭から要素４０ａを取り出し、あるいは図４（ｂ）の領域リストポインタ・フィールド３４に設定されているリストポインタに基づき図４（ｂ）の先頭の要素４０を取り出し、領域リスト１３上のホストアドレスと受信したライトリクエストのホストアドレスとを比較しながらリンクを辿り、そのホストアドレスの挿入される位置を検索する。そして、検索された位置、即ち領域リスト１３の各要素４０が昇順に並ぶように、当該ライトリクエストに対応する要素４０が挿入される。この挿入される要素４０は、ライトリクエストが持つホストアドレスおよびデータ長と、書き込みを行った際の記憶媒体１４上の当該記憶領域２１内の相対的な先頭アドレスを、それぞれホストアドレス・メンバ４２、データ長・メンバ４３と、領域アドレス・メンバ４４として構成されたものである。
【００５５】
一方、ステップ６０３にて、上位装置からのライトリクエストのデータ長が、指定された領域の書き込み可能容量を超える場合は、現在選択されている領域のステータスを「永続化対象領域」に、また媒体アドレス・フィールド３３を記憶領域２１の先頭アドレスに変更する（ステップ６０７）。そして新たに記憶領域２１を確保するとともに、確保した記憶領域２１の属する記憶媒体１４上の領域のいずれかが「永続化中」になっていないかチェックを行う（ステップ６０８）。
【００５６】
新たに記憶領域２１を確保する方法であるが、図３を参照して説明すると、現在領域番号「１」が書き込み対象領域であるとすると、領域番号が連続する記憶領域２１を確保する。これは永続化処理を行う際にも同様である。ただし、書き込み対象領域の選択順序と永続化対象領域の選択順序が一致していれば良い。選択順序を、一致させることで古いデータから順番に処理を行うことが可能となり、データ一貫性の維持を可能とする。ここでは、領域番号を順番に選択する方法で説明する。
【００５７】
この場合では領域番号「２」が次の書き込み対象として選択される。図２では記憶媒体１（１４−１）の領域番号が「２」で示される記憶領域「２」と、記憶媒体３（１４−３）の領域番号「２」で示される記憶領域「２」が書き込み対象となり、記憶媒体１（１４−１）と記憶媒体３（１４−３）で「永続化中」の領域が無いか判定する。それには管理テーブル１２中の各永続化媒体番号・フィールド３５を参照し、いずれの記憶媒体１４で永続化を行っているか参照することで実現する。
【００５８】
ステップ６０８の判定で「永続化中」が存在すれば（ステップ６０８で「Ｙｅｓ」）、永続化の処理を行っている記憶媒体１４とは異なる冗長化された記憶媒体１４が、書き込み対象として選択された記憶領域２１の記憶媒体１４と重ならないかチェックされる（ステップ６１１）。例えば図６（ｂ）で、記憶領域「２」２１ｃと記憶領域「２」２１ｄが新たな書き込み対象領域に選択されたとすると、ステップ６０８では、記憶媒体１（１４−１）と記憶媒体３（１４−３）で「永続化中」の記憶領域２１があるか否かが判定される。ここで記憶領域「１」２１ａが「永続化中」であったとすると、ステップ６０８で、新規指定領域が「永続化中」であると判定される（ステップ６０８で「Ｙｅｓ」）。この場合に、ステップ６１１では、「永続化中」の記憶領域「１」２１ａと冗長化されている記憶領域「１」２１ｂの記憶媒体２（１４−２）が書き込み対象領域に選択されているか否かが判定される。この場合、記憶媒体１（１４−１）と記憶媒体３（１４−３）が新たな書き込み対象なので、記憶媒体２（１４−２）は書き込み対象ではなく、ステップ６１１の判定結果は「Ｎｏ」となる。したがって、ステップ６１２で、書き込み対象の記憶媒体１４とは異なる記憶媒体１４である記憶媒体２（１４−２）で、永続化処理が再開される。
【００５９】
すなわち、ステップ６０８の判定の結果、冗長化された記憶媒体１４上の永続化中の記憶領域２１が、書き込み対象として選択された記憶領域２１が属する記憶媒体１４と重ならないのであれば（ステップ６０８で「Ｎｏ」）、冗長化された記憶媒体１４から永続化の再開を行う（ステップ６１２）。他方、ステップ６１１で重なると判定されれば永続化の中断を行う（ステップ６１３）。
【００６０】
ステップ６１３で、永続化処理の中断を行うには、まず、現在永続化を行っている記憶媒体１４への読み出し処理のリクエストの完了を待ち、処理が完了したら、中断を行った記憶領域２１のステータス・フィールド３２を「永続化中」から「永続化対象領域」に変更する。また、それと共に、その記憶領域２１の記憶媒体１４上に対して永続化処理を再開する際の媒体アドレスを媒体アドレス。フィールド３３に記録する。
【００６１】
ステップ６１３が終了するとステップ６１０に進み、ステップＳ６０８で選択した記憶領域２１を新たな書き込み対象領域として設定する処理を行い、続いて上位装置からの書き込み処理（ステップ６０４〜）が行われる。
【００６２】
一方、ステップ６０８で書き込み対象領域に選択された記憶領域２１の記憶媒体１４で永続化処理が行われていなければ（ステップ６０８で「Ｎｏ」）、永続化処理を起動し、以降上位装置からの書き込み処理（ステップ６０４〜）と並行して永続化処理が実行される（ステップ６０９）。書き込み処理と永続化処理を並行して実行するには、ＯＳ（オペレーティングシステム）やタスクディスパッチャーなどによるマルチタスク処理やマルチプロセッサなどの複数プログラムの並行処理技術を用いることとし、ここでは詳細に記述しない。
【００６３】
次に、図８のフローチャートを参照し、永続化の際の処理を説明する。図７のステップ６０９に於いて、少なくとも１つの領域が永続化対象領域となった時点で、永続化対象の選択を行う（ステップ７０１）。この選択は、図３の管理テーブル１２中の古い領域、即ち現在書き込み対象として選択されている領域番号の１つ後ろ（この場合、領域番号が１つ大きい領域番号を持つ記憶領域２１）の領域番号から順に辿り、書き込み対象の領域が発見されるまで、ステータス・フィールド３２が「永続化対象領域」である領域番号を探すことで実現する。このようにして最も速く見つかったステータス・フィールド３２が「永続化対象領域」である領域番号を永続化対象として選択する。
【００６４】
図３の管理テーブル１２は有限長のテーブルの形を取っているが、最後の領域番号（この図では領域番号が「６」）の次が領域番号「１」となるリングバッファで考えるものとする。同様の管理手段が取れれば他の手法を用いても良い。ここで、例えば領域番号「４」が書き込み対象となっていれば、この中で一番古い記憶領域２１は領域番号「５」となる。
【００６５】
ステップ７０１では、管理テーブル１２中で、一番古い記憶領域２１の領域番号から順に辿り（上の例では、「５」、「６」、「１」、…の順に辿り）、ステータス・フィールド３２が「永続化対象領域」であるレコードを探すこととなる。ここで例えば領域番号「２」が「永続化対象領域」であると判定されれば、現在書き込み対象となっている記憶領域２１の記憶媒体１４を求め、それらとは異なる記憶媒体１４の記憶領域２１を永続化対象として選択する（ステップ７０１）。
【００６６】
ステップ７０１で選択された永続化対象の領域番号の記憶領域２１を持つ冗長化された記憶媒体１４が、書き込み対象となっている記憶媒体１４と完全に一致するのであれば、すなわち永続化対象として選択された記憶媒体１４のいずれもが書き込み対象の記憶媒体１４である場合（ステップ７０２で「Ｙｅｓ」）、永続化処理の起動が出来なくなる。この場合、次の書き込み対象領域の選択まで永続化処理の起動を停止する。この場合には現段階において永続化処理は起動していない状態なので、単に処理の終了を行うだけである。
【００６７】
ステップ７０２で書き込み対象領域の記憶媒体１４と一致しない選択可能な永続化処理対象領域があれば、ステップ７０３で永続化処理を開始し、ステップ７０４で管理テーブル１２と領域リスト１３の更新処理を行う。管理テーブル１２の更新処理としては、永続化処理対象の記憶領域２１のステータス・フィールド３２を「永続化中」に変更する。また、選択された記憶媒体２１の番号を永続化媒体番号・フィールド３５に記録し、媒体アドレス・フィールド３３から読み出すべきライトリクエストに対応するデータが保存されている媒体アドレスを取り出し、そのアドレスから永続化処理が行われる。
【００６８】
媒体アドレス・フィールド３３には、当該記憶領域２１に対する全く新規の永続化処理であれば、当該記憶領域２１に対して書き込み処理が完了する際に記憶領域２１の先頭アドレスが保存されている。他方、永続化処理が中断されたものであれば、媒体アドレス・フィールド３３に中断されたときの再開すべき媒体アドレスが保存されている。そのため、媒体アドレス・フィールド３３を参照することで、新規／再開の両方に対処可能である。
【００６９】
またステップ７０４では、該当するライトリクエストの情報を、その領域番号の領域リストポインタ・フィールド３４で指定されるリスとポインタで示される領域リスト１３から取り除く処理を行う。また、その記憶領域２１に対する永続化処理が完了した際には、その記憶領域２１のステータス・フィールド３２を「無効領域」に変更し、永続化処理を完了とする（ステップ７０４）。
【００７０】
次にステップ７０１で新たな永続化対象の記憶領域３１の選択を行うが、その前にステップ７０５で前回の記憶領域２１の次の記憶領域２１のステータス・フィールド３２を参照することで、次の記憶領域２１が永続化対象であるかの判断を行う。ステップ７０５で、次の記憶領域２１のステータス・フィールド３２が「書き込み対象領域」であると確認された場合には、永続化対象の領域は存在しないこと、即ち書き込みに追いついたことになる。この場合、書き込みが完了した領域が少なくとも１つ溜まるまで永続化処理を停止する為に処理を終了する（ステップ７０５で「Ｎｏ」）。ステップ７０５で永続化対象の領域が存在すれば、ステップ７０１に戻り永続化対象領域の選択を行う。
【００７１】
次に、図９のフローチャートを参照し、上位装置から読み込みのリクエスト（リードリクエスト）が発生した場合の処理について説明する。なお、本実施形態においいて、上位装置からのリクエストがライトのみ行われる場合は本処理は不要であるが、更新した内容を参照する場合に本処理の実行が行われる。上位装置からリードリクエストが発生すると、キャッシュ管理手段１１がそのリクエストを受信する(ステップ８０１)。キャッシュ管理手段１１が受信したリードリクエストはライトリクエストと同様にホストアドレスとデータ長から成る。キャッシュ管理手段１１は、管理テーブル１５を参照し、リードのデータとしては最新のデータを転送する必要がある為、永続化されていない領域、即ちステータス・フィールド３２が「永続化対象領域」、「永続化中」、「書き込み対象領域」となっている記憶領域２１を対象とし、そのリードリクエストのホストアドレスで示されるデータが存在しないか検索を行う。
【００７２】
本実施の形態では、領域番号順にデータ書き込み処理と永続化処理が行われる。ここで、最新の更新データは、ステータス・フィールド３２が「書き込み対象領域」となっている記憶領域２１に存在する。そして、領域番号の逆順に（領域番号の降順に）次第に古いデータとなる。検索もこの順序で行う。すなわち、ステータス・フィールド３２が「書き込み対象領域」を最初に検索し、次ぎに１つ領域番号が小さい記憶領域に対する検索を行う。そして、「無効領域」のステータスを示す記憶領域２１が出た時点で検索を中止する。
【００７３】
該当するホストアドレスとデータ長の範囲で指定されたデータが記憶媒体１４内に全く無い場合は、キャッシュ管理手段１１は永続化記憶媒体１５に対してそのリードリクエストの発行を行う。キャッシュ管理手段１１は、永続化記憶媒体１５からデータを受信すると、そのデータを上位装置に対して送信し、リードリクエストの処理を完了する。
【００７４】
具体的には、キャッシュ管理手段１１は、リードリクエストコマンドを受信すると（ステップ８０１）、管理テーブル１２を参照して現在の書き込み対象領域の領域番号を取得する(ステップ８０２)。次に、管理テーブル１２内でその領域番号で指定される領域リストポインタ・フィールド３４に設定されているリストポインタで接続される領域リスト１３を先頭要素から順番に検索する（ステップ８０３）。この領域リスト１３の検索は、上位装置で指定されたホストアドレスとデータ長の範囲で、全く一致若しくは一部一致するメンバ４２とメンバ４３の値が無いか、領域リスト１３の最後の「ＮＵＬＬ」が出現するまでメンバ４５のリストポインタを順に辿ることで行われる。
【００７５】
ステップ８０３での検索処理で、領域リスト１３に同一のデータが複数の要素４０で表れた場合には、領域アドレス・メンバ４４内の領域アドレスの大きな方、即ち更新の時期の新しい方のデータを選択し、記憶媒体１４からそのデータを領域アドレス・メンバ４４で指定される場所から読み出し、一時的に所定の記憶装置（例えばキャッシュ管理手段１１内のＲＡＭ）にストアする。読み出しの際には冗長化されている複数の記憶媒体１４のどちらから読み出しても構わないが、上位装置から書き込み対象とされている記憶領域２１の記憶媒体１４とは異なる記憶媒体１４に属する記憶領域２１であれば、ライトリクエスト処理を妨げないので好都合である。それには、管理テーブル１２を参照し、書き込み対象となっている領域番号の情報を参照すれば判定可能である。
【００７６】
ステップ８０４では、上位装置から指定されるリードリクエストのデータが全て揃ったかどうか判定し、全てのデータの読み出しが完了すれば読み出し処理を終了する（ステップ８０４で「Ｙｅｓ」）。ステップ８０４で全くデータが読み出せないか、或いは部分的にしか読み出すことが出来なかった場合には、残りのデータに対して次の領域からの読み出しを行う為、現在の次に新しい領域を選択し、無効領域でないか、あるいは管理テーブル１２が一巡して書き込み対象領域で無いか判定を行うことで、新たな領域が有効かどうか判定を行う（ステップ８０５）。ステップ８０５で新たに検索を行う領域が存在しないと判定されれば（ステップ８０５で「Ｎｏ」）、全部若しくは部分的に読み出しが出来なかったデータを永続化記憶媒体１５に対してリードリクエストを発行し、永続化記憶媒体１５からのデータを受信し、データが全て揃った時点で上位装置にリードリクエストに対するデータ転送を行い、処理を完了する。（ステップ８０６）。一方、ステップ８０５で新たな領域が存在すれば（ステップ８０５で「Ｙｅｓ」）、部分的に読み出せた場合には残余のデータの検索を、全く読み出せなかった場合は全てのデータを対象として、ステップ８０３に戻り、次に新しい記憶領域２１にデータが存在しないか検索を行う。更に、ステップ８０４で全てのデータが揃った場合には（ステップ８０４で「Ｙｅｓ」）、そのデータを上位装置に転送し、リードリクエストに対する処理を完了する(ステップ８０７)。
【００７７】
上記のように、本実施形態では、キャッシュ管理手段１１によって、少なくとも３台の記憶媒体１４のうち、少なくとも２台の記憶媒体１４で冗長関係を有する各記憶領域２１にデータを書き込むのと並行して、少なくとも１台の記憶媒体１４で当該記憶領域２１と冗長関係が無い記憶領域２１から永続化のためのデータが読み出されるようになっている。そしてキャッシュ管理手段１１によって、少なくとも１台の記憶媒体１４から読み出されたデータは永続化記憶媒体１５に対して書き込まれるようになっている。また、キャッシュ管理手段１１によって、上位装置からのデータの読み出し要求に応じて、そのリードリクエストに対応するホストアドレス（書き込みアドレス）を持つ要素４０が領域リスト１３（リスト構造）に複数存在していた場合には、複数の要素４０に設定されている記憶媒体１４のアドレスの大きさに応じて読み出すデータを選択し、選択したデータが記憶媒体１４から読み出されるようになっている。
【００７８】
なお、本発明の実施の形態は上記に限定されず、例えばＤＲＡＭなどの揮発性記憶装置（あるいは記憶媒体）と記憶媒体１４や記憶媒体１５とを組み合わせて、揮発性記憶媒体を一時的な記憶手段として使用したり、上位装置の全部または一部の構成と本発明のストレージシステム１の一部または全部を組み合わせたりする変更が適宜可能である。また、本発明のストレージシステム１あるいはキャッシュ管理手段１１は、ＣＰＵとそのＣＰＵで実行されるプログラムとを用いて構成することができ、その場合のプログラムは所定の記憶媒体あるいは通信回線を介して提供することが可能である。
【００７９】
なお本発明のストレージシステムの一態様は、上位装置からの書き込み時のデータを一時的に高速に記憶するためのディスクキャッシュの構成に特徴を有するものである。ディスクキャッシュは、磁気ディスク装置や、フラッシュメモリ、ＳＳＤなどの不揮発性記憶媒体を用いて構成する。そのような不揮発性記憶媒体は、一般的には、順次アクセス（シーケンシャルアクセス）とランダムアクセスで、ランダムアクセスがシーケンシャルアクセスに比して低速な特性を有している。本発明のストレージシステムでは、上位装置からライトリクエストに含まれるホストアドレスに関わらず、ライトデータをシーケンシャルでキャッシュに記憶し、同時にキャッシュから他の永続化記憶を行う記憶媒体に対して読み出しを行うものである。その際、本発明のストレージシステムは、少なくとも３台の複数の記憶媒体でキャッシュを構成し、その記憶媒体はそれぞれ複数の記憶領域に分割される。このキャッシュを複数の記憶媒体から構成するのは、書き込みデータの信頼性保証の為、少なくとも２台の記憶媒体に同一内容を記録する為であり、各記憶媒体は例えば同一容量の領域を保持する。また、上位装置から受信したデータは、受信したデータを少なくとも２台の記憶媒体の同一容量の領域に対して書き込む。そして、その書き込みに参加していない記憶媒体の領域からデータを読み出し、それらの記憶媒体とは異なるストレージやストレージシステムを含む永続化記憶媒体に対してデータの転送を行い、永続化記憶媒体への書き込みを行う。この永続化処理が完了した後、その転送元の記憶媒体の分割された領域の開放を行うことで上位装置からの書き込みと永続化媒体に対するデータ転送の為のリードを異なる記憶媒体に分離することができる。本システムでは、複数の記憶媒体において、データの書き込みとデータの読み出しを異なる記憶媒体に分離することで、キャッシュデータの一時記憶のための書き込みと、永続化処理のための読み出しとを並列して実行することが可能である。
【００８０】
具体的には、上位装置からのライトリクエストとライトデータの受信を行うと、前述の異なる記憶媒体の少なくとも２箇所の記憶領域を、書き込みを行う記憶領域として選択し、その記憶領域の最後のライトリクエストで書き込まれた次の場所につづけて、ライトリクエストの内容で示されるデータのアドレス及びデータ長、さらにライトデータを連続して書き込みを行う。この際、ライトリクエストで示されるアドレス、データ長と書き込みを行った記憶媒体のアドレスを記憶領域毎に１つのリスト構造のデータとして記録する。
【００８１】
リスト構造のデータである領域リストは記憶領域毎に作成し、領域リストはライトリクエストを受信し、記憶媒体に書き込みを行う毎に、ライトリクエストで示されるアドレスによって並び替えを行う。この為、領域リストはリスト構造等の要素単位の順序の入れ換えや挿入を行い易い構造を取り、常に昇順の並び替えを実施するものとする。
【００８２】
なお、書き込み対象領域の選択には、現在書き込みを行っている複数領域を管理する為の管理テーブルを持ち、何れの領域が書き込み対象として選択されているか（書き込み対象領域）、或いは領域にキャッシュとして有効なデータが存在するか（永続化対象領域）或いは初期の無意味なデータもしくは永続化媒体に対する永続化が全て完了した領域（無効領域）、或いは永続化中であるか示すステータスを持つ。現在書き込み対象の領域がいっぱいになれば、領域のステータスを、書き込み対象を示す状態から、永続化対象領域に変更を行う。
【００８３】
そして、新規の領域に書き込むため、前回選択された領域の記憶媒体とは少なくとも１つの異なる記憶媒体から成る記憶媒体中の無効領域の複数を選択し、新たに書き込み対象領域とし、無効領域のフラグを書き込み対象領域に変更し、領域テーブルの初期化を行い、上位装置からのライトリクエストに備える。
【００８４】
一方、これらの書き込み動作と並行して永続化記憶媒体への書き込みを行う為の読み出しを行う際に、現在書き込み対象となっている記憶領域の属する記憶媒体とは異なる記憶媒体の永続化対象領域のうち、更新の一番古い記憶領域を対象として選択し、記憶領域の管理テーブルのフラグを永続化中に変更を行い、記憶領域から連続で読み出すことで永続化処理を実現する。こうすることで、上位装置からの書き込み時とは異なる記憶媒体の領域から永続化の為のデータを読み出すことが可能になる。よって、記憶媒体中の新たな記憶領域を選択する時に不連続のアドレスを指定し、ランダムアクセスになるが、それ以外は同じ記憶媒体が選択されるので、殆どの場合に於いてシーケンシャルアクセスを実現することが可能となる。
【００８５】
本発明によれば、磁気ディスクやフラッシュメモリ等のランダムアクセスに比してシーケンシャルアクセスが高速な記憶媒体をディスクキャッシュとする場合に、記憶媒体を３台以上で構成し、さらにそれぞれの記憶媒体を複数の領域に分割し、それぞれの記憶媒体の中から少なくとも２台の記憶媒体の記憶領域を選択し、選択の方法として上位装置からの書き込み対象として前回選択された領域とは少なくとも１つの異なる記憶媒体の領域を選択し、該領域に対して上位装置から順次入力されるデータ列をアドレスやデータ長と共にシーケンシャルに記憶するログ書き込みを行うとともに、これと同時に行われる永続化の為の読み出しは、上位装置からのログ書き込みで選択されている領域の記憶媒体とは異なる記憶媒体を選択して読み出すことで、上位装置からのシーケンシャルライトを妨げる事無く永続化の為の読み出しを行うことができる。
【００８６】
なお、記憶媒体１４（あるいは１４−１〜４）が特許請求の範囲の記載における「一時記憶媒体」に相当する。また、キャッシュ管理手段１１あるいはキャッシュシステム１が特許請求の範囲の記載における「キャッシュ制御装置」に相当する。
【産業上の利用可能性】
【００８７】
本発明によれば、ディスクアレイのキャッシュ制御やパーソナルコンピューターやサーバーなどの内部の磁気ディスクのキャッシュ、特にデータロギングなどの大容量の書き込みを主体とするシステムあるいは装置において適用可能である。
【符号の説明】
【００８８】
１１    キャッシュ管理手段
１２    管理テーブル
１３    領域リスト
１４    記憶媒体
１５    永続化記憶媒体
１４−１    記憶媒体１
１４−２    記憶媒体２
１４−３    記憶媒体３
１４−４    記憶媒体４
２１    記憶領域
２２    識別符号（領域番号）
３１    領域番号
３２    ステータス・フィールド
３３    媒体アドレス・フィールド
３４    領域リストポインタ・フィールド
３５    永続化媒体番号・フィールド
４１    空きリスト先頭
４２    ホストアドレス・メンバ
４３    データ長・メンバ
４４    領域アドレス・メンバ
４５    リストポインタ・メンバ
【図１】
2010170268.tif 000003
【図２】
2010170268.tif 000004
【図３】
2010170268.tif 000005
【図４】
2010170268.tif 000006
【図５】
2010170268.tif 000007
【図６】
2010170268.tif 000008
【図７】
2010170268.tif 000009
【図８】
2010170268.tif 000010
【図９】
2010170268.tif 000011