(57)【特許請求の範囲】
【請求項１】
各々複数のデータ格納領域から構成される複数の記憶装置と、
各々、１または複数個のデータ格納領域と前記１または複数個のデータ格納領域に格納されたデータの回復に用いられるパリティデータを格納する１または複数個のデータ格納領域とから構成される、複数のパリティグループを構成する、前記複数の記憶装置に接続される制御装置とを有する記憶装置システムにおいて、
前記制御装置は、前記制御装置と接続される処理装置から、前記複数のパリティグループのいずれかのデータ格納領域に格納されているデータに対する更新データを受信すると、受信した更新データを前記制御装置内のキャッシュメモリに格納し、
前記キャッシュメモリに格納されている複数の更新データのうち、第1の更新データについて、前記第1の更新データが属する第１のパリティグループを構成するデータ格納領域のうち、いずれかに、データが格納されていない空きデータ格納領域があるかどうかを判断し、
空きデータ格納領域があれば、前記複数の更新データのうち、第２のパリティグループに属する、第2の更新データを選択し、
前記第２の更新データを、前記第１のパリティグループ内の空きデータ格納領域に割り当て、
前記第１の更新データと前記第２の更新データを含む第１のパリティグループのパリティデータの更新を行うことを特徴とする記憶装置システム
【請求項２】
請求項１記載の記憶装置システムであって、
前記第2の更新データを選択する際、前記複数の更新データのうち、あらかじめ定めた記憶装置内での配置位置に配置されている更新データから、前記第2の更新データを選択することを特徴とする記憶装置システム
【請求項３】
請求項１記載の記憶装置システムであって、
前記第1のパリティグループのパリティデータを更新するために、更新後のパリティデータを作成する際、前記制御装置は、前記第1のパリティグループを構成するデータ格納領域に格納されているデータを用いて、前記更新後のパリティデータを作成することを特徴とする記憶装置システム
【請求項４】
請求項１記載の記憶装置システムであって、
前記第1のパリティグループのパリティデータを更新するために、更新後のパリティデータを作成する際、前記制御装置は、前記第1の更新データと、前記第1の更新データが更新される前のデータと、前記第２の更新データと、前記第2の更新データが更新される前のデータと、前記第1のパリティグループの更新前のパリティデータとを用いて、前記更新後のパリティデータを作成することを特徴とする記憶装置システム
【請求項５】
各々複数のデータ格納領域から構成される複数の記憶装置と、
各々、１または複数個のデータ格納領域と前記１または複数個のデータ格納領域に格納されたデータの回復に用いられるパリティデータを格納する１または複数個のデータ格納領域とから構成される、複数のパリティグループを構成する、前記複数の記憶装置に接続される制御装置とを有する記憶装置システムにおいて、前記制御装置により実行される制御方法であって、
前記制御装置と接続される処理装置から、前記複数のパリティグループのいずれかのデータ格納領域に格納されているデータに対する更新データを受信すると、受信した更新データを前記制御装置内のキャッシュメモリに格納するステップと、
前記キャッシュメモリに格納されている複数の更新データのうち、第1の更新データについて、前記第1の更新データが属する第１のパリティグループを構成するデータ格納領域のうち、いずれかに、データが格納されていない空きデータ格納領域があるかどうかを判断するステップと、
空きデータ格納領域があれば、前記複数の更新データのうち、第２のパリティグループに属する、第2の更新データを選択するステップと、
前記第２の更新データを、前記第１のパリティグループ内の空きデータ格納領域に割り当てるステップと、
前記第１の更新データと前記第２の更新データを含む第１のパリティグループのパリティデータの更新を行うステップを有することを特徴とする制御方法
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、計算機システムに用いられる記憶装置、特に、ディスクアレイ向きの高機能ディスク装置、および、ディスクアレイ向きの高機能ディスク装置と制御装置により構成される記憶装置サブシステムに関する。
【０００２】
【従来の技術】
計算機システムにおいて用いられる記憶装置として、Ｐａｔｔｅｒｓｏｎ等の論文、「ア  ケース  フォー  リダンダント  アレイズ  オブ  インイクスペンシブ  ディスクス」，エー．シー．エム．シグモッド コンファレンス プロシーディング，1988年，6月,ページ１０９−１１６（D.Patterson, et al.:A Case for Redundant Arrays of Inexpensive Disks(RAID),ACM SIGMOD conference proceeding,Chicago,IL,June1-3,1988,pp.109-116）に開示されているようなディスクアレイが知られている。Ｐａｔｔｅｒｓｏｎ等の論文には、特に、ディスクアレイ上でのデータ配置に関する技術が開示されている。
【０００３】
ディスクアレイは、ディスクシステムの高性能化、高信頼化を実現するために開発された機構である。ディスクアレイでは、物理的に複数のディスク装置を用い、これら複数のディスク装置を処理装置に対しては１台のディスク装置に見せかけることで高性能化を図っている。一方、高信頼化のために、データを格納したディスク装置の一部に障害が発生した場合、障害が発生したディスク装置のデータを回復するための冗長データを、別のディスク装置に格納しておく。以下の説明では、ディスク装置のリード／ライト単位となるデータの集合をレコードと呼ぶ。レコードの中で、処理装置が直接読み書きするデータを格納したレコードをデータレコードと呼び、冗長データを格納したレコードをパリティレコードと呼ぶ。
【０００４】
ディスクアレイでは、ｍ個（ｍ≧１）のデータレコードからｎ個（ｎ≧１）のパリティレコードが作成される。一般に、これらのｍ＋ｎ個のレコードの集合をパリティグループと呼ぶ。これらのｍ＋ｎ個のレコードは別々のディスク装置に格納される。通常、パリティグループ内のパリティレコードの数がｎ個であれば、ｎ台までのディスク装置の障害に対してパリティグループ内のデータを回復することが可能である。
【０００５】
パリティグループ内のデータレコードが書き替えられた場合には、これに伴いパリティレコードも書き替える必要がある。パリティグループ内のすべてのデータレコードが書き替えられれば、書き変わったデータレコードからパリティレコードの内容を作成できる。しかし、例えば、パリティグループ内の１つのデータレコードだけが書き替えられた場合には、書き変えられた内容と、そのデータレコードの更新前の値、及びパリティレコードの更新前の値とから、パリティレコードの更新値が作成される。
【０００６】
このようなディスクアレイにおけるライト処理を効率化するための技術として、例えば、ＰＣＴ  ＷＯ  ９１／２００２５には、動的マッピングと呼ばれる技術が開示されている。この技術では、ライト処理によりディスクに格納されているデータを更新する場合、そのデータを書き込むディスク上の位置が動的に変更される。具体的には、ライトされたデータだけで、パリティグループを構成し、これらのデータからパリティデータを作成して、ディスクアレイを構成するディスク装置への書き込みが行なわれる。ただし、以上の処理を実行するためには、パリティグループ全体を、新たな更新値の書き込みが可能な状態（このような状態を、本明細書では、未割当て状態と呼ぶ）にする必要がある。
【０００７】
また、電子情報通信学会技術研究報告、ＤＥ９３−４５（茂木他：仮想ストライピングによるＲＡＩＤ５型ディスクアレイの性能評価、1993年 9月、信学会技報Vol.25-No.251、pp.69-75）には、このような動的マッピングをさらに効率的にした技術が開示されている。本論文により開示される技術では、パリティグループそのもののディスク上の位置を動的に変更するために、より効率的にパリティグループ全体を未割当て状態にすることができる。
【０００８】
【発明が解決しようとする課題】
上述した、ＰＣＴ  ＷＯ  ９１／２００２５や茂木の論文に開示される技術では、ディスクアレイのライト処理を効率化するため、ライト処理が発生したデータレコードだけでパリティグループを構成し、これらのデータレコードからパリティレコードを作成する。したがって、このようにして新たに作成されたパリティグループのレコードを格納するために、ディスク装置に余分なレコードをいくつか用意しておき、処理装置からみて最新の更新内容を格納していない未割当て状態のレコードだけからなるパリティグループを用意しておく必要がある。このため、パリティグループ全体を未割当て状態にするための処理を、処理装置からのアクセス要求に対する処理とは非同期に実行しておく必要がある。しかしながら、従来技術におけるこのようなパリティグループ全体を未割当て状態にする処理は、ディスクアレイの性能をわかりにくいものにしている。
【０００９】
本発明の目的は、上述したような、動的マッピングの技法を、パリティグループ全体を未割当て状態にする処理ような特別の処理を行うことなく実現することを可能とし、記憶装置システムにおけるライト処理の効率化を図る点にある。
【００１０】
【課題を解決するための手段】
上述した目的を達成するために、本発明の記憶装置システムは、処理装置がリード／ライトの対象とする論理的なレコードが割り当てられるデータレコードと、障害発生時にデータレコード内のデータを回復するために用いられるパリティレコードとでパリティグループを構成し、パリティグループ内の各データレコード及びパリティレコードをそれぞれ異なるディスク装置に配置した記憶装置システムにおいて、パリティグループの中から、それぞれに属するデータレコードの状態に応じてパリティレコードの作成を行うべきパリティグループを決定し、決定したパリティレコードの作成を行うべきパリティグループに属し、論理レコードに割り当てられていないデータレコードを識別する。そして、パリティレコードの作成を行うべきパリティグループ以外のパリティグループに属するデータレコードに割り当てられている論理レコードであって、その更新値が前記キャッシュメモリに格納されている論理レコードに割り当てるデータレコードを、識別されたデータレコードに変更して、パリティレコードの作成を行うべきパリティグループの新たなパリティレコードを作成する。その後、パリティレコードの作成を行うべきパリティグループ内のデータレコード及びパリティレコードを前記ディスク装置のそれぞれに格納するように構成される。
【００１１】
より好ましい態様では、上述した各処理は、処理装置からのライト要求に応じて行われる論理レコードの更新値をキャッシュメモリへ格納する処理とは独立したタイミングで行われる。
【００１２】
また、パリティグループを決定するステップでは、パリティグループの中で、全てのデータレコードが、論理レコードを割り当てられていない空き状態のデータレコードであるパリティグループを探索し、探索の結果得られたパリティグループの中からパリティレコードの作成を行うべきパリティグループを決定する。探索の結果、該当するパリティグループが存在しない場合には、更新値がキャッシュメモリ内に存在する論理レコードに割り当てられているデータレコードを含むパリティグループの中から前記パリティレコードの作成を行うべきパリティグループを決定する。
【００１３】
さらに、割り当てを変更するステップでは、その対象となる論理レコードを、パリティレコードの作成を行うべきパリティグループ内のデータレコードのディスク装置内での配置位置に対して所定の範囲内に配置されているデータレコードに割り当てられている論理レコードの中から決定する。
【００１４】
【作用】
上述したように、本発明によれば、パリティレコードの作成を決定したパリティグループに、論理レコードが割り当てられていないデータレコードがある場合に、そのデータレコードを他のパリティグループのデータレコードに割り当てられている更新値を持つ論理レコードのために割り当てるよう割り当ての変更を行った後パリティレコードの更新値を作成するので、それぞれのパリティグループごとに別々にパリティレコードの更新値を作成する場合に比べ、パリティレコードの更新値作成のために必要となるディスクのアクセス回数を低減することができる。
【００１５】
また、パリティグループ内の一部のデータレコードに、論理レコードが割り当てられていない未割当て状態のデータレコードがあれば、そのデータレコードを他のパリティグループのデータレコードが割り当てられている論理レコードに割り当てるよう割り当ての変更を行っているので、このような未割り当て状態のデータレコードを有効に利用できる。さらに、これにより、上述した従来技術のように、パリティグループ内のすべてのデータレコードを未割当て状態にするような特別な処理を実行させる必要性をなくすことができる。
【００１６】
【実施例】
以下、本発明について実施例により詳細に説明する。
【００１７】
図１は、本発明の対象となる計算機システムの構成図である。本実施例において計算機システムは、大きく、処理装置１３００、制御装置１３０５、および、１台以上のディスク装置１３０４により構成される。
【００１８】
処理装置１３００は、ＣＰＵ１３０１、主記憶１３０２、および、チャネル１３０３により構成される。
【００１９】
制御装置１３０５は、処理装置１３００から発行されるリード／ライト要求にしたがって、処理装置１３００と、ディスク装置１３０４との間で、データの転送処理を実行する。制御装置１３０５は、１つ以上のディスク制御プロセッサ１３１０、キャッシュメモリ（以下、単にキャッシュと略す。）１３０８、ディレクトリ１３０９、不揮発性メモリ１４００、および、不揮発性メモリ管理情報１４０１を含む。キャッシュ１３０８は、ディスク装置１３０４に保持されているデータの中で、アクセス頻度の高いものがロードされる。ディレクトリ１３０９には、キャッシュ１３０８の管理情報が格納されている。不揮発性メモリ１４００は、不揮発の媒体であり、キャッシュ１３０８と同様に、ディスク装置１３０４に保持されているデータの中で、アクセス頻度の高いものがロードされる。不揮発性メモリ管理情報１４０１も不揮発の媒体であり、不揮発性メモリ１４００の管理情報を格納する。なお、キャッシュ１３０８や、ディレクトリ１３０９も不揮発化されていてもよい。ディスク制御プロセッサ１３１０は、制御装置１３０５内で、処理装置１３００が発行したリード／ライト要求を受取り、キャッシュ１３０８等を利用し、処理装置１３００と、ディスク装置１３０４の間で、転送処理を実行する機能をもつ。なお、制御装置１３０５は、必ずしも不揮発性メモリ１４００、および、不揮発性メモリ管理情報１４０１を含まなくてもよい。
【００２０】
本実施例において、制御装置１３０５は、処理装置１３００からライト要求があった場合、ディスク装置１３０４に書き込むべきデータを、キャッシュ１３０８、あるいは、キャッシュ１３０８と不揮発性メモリ１４００に格納した段階でその完了を処理装置１３００に通知する。ディスク装置１３０４へのデータの書き込みは、その後、制御装置１３０５が実行する。このような処理は、ライトアフタ処理と呼ばれる。なお、制御装置１３０５には、ディスク制御プロセッサ１３１０を複数設けることも可能である。図１において、破線で示した部分は、例えば、ディスク制御装置１３１０を２つ設けた場合の追加の構成を示している。
【００２１】
通常、処理装置１３００がディスク装置１３０４を対象として、リード／ライトするデータの単位は、レコードと呼ばれる。図２は、本実施例におけるレコードの考え方をまとめたレコード定義図である。本実施例では、処理装置１３００が制御装置との間でリード／ライトするレコードを論理レコード１７００と呼ぶ。また、ディスク装置１３０４上に格納されたレコードを物理レコード１５０２と呼ぶ。ディスク装置１３０４上に格納されている物理レコード１５０２には、データレコード１５００とパリティレコード１５０１の２種類のレコードが含まれる。データレコード１５００は、処理装置１３００がその処理に利用する論理レコード１７００の内容を格納した物理レコード１５０２である。一方、パリティレコード１５０１は、ディスク装置１３０４に障害が発生し、データレコード１５００の内容が消失した時、その消失した内容を回復する処理に用いられるレコードである。この場合、データレコード１５００の値が変更されると、これに対応する、パリティレコード１５０１の内容も変更される。
【００２２】
図３は、ディスクアレイにおけるパリティグループの概念図である。ディスク装置＃１からディスク装置＃ｍまでのｍ個のディスク装置１３０４上に、それぞれ対応するｍ個のデータレコード１５００が格納されている。これらのｍ個のデータレコード１５００から、ｎ個のパリティレコード１５０１が作成され、それぞれ対応するディスク装置＃ｍ＋１からディスク装置＃ｍ＋ｎに格納される。したがって、図３に示す例では、ｍ個のデータレコード１５００とｎ個のパリティレコード１５０１により、１つのパリティグループ１６００が構成されている。一般に、ｎ個のパリティレコード１５０１を含むパリティグループ１６００においては、そのパリティグループ１６００内のレコード１５０２が格納されているｍ＋ｎ個ディスク装置のうち、ｎ台までのディスク装置１３０４が故障しても、パリティグループ１６００内のすべてのレコード１５０２の内容を回復することができる。このように、ディスクアレイを適用すると、ディスク装置１３０４の高信頼化を実現することができる。
【００２３】
なお、図３では、ディスク装置＃１からディスク装置＃ｍにデータレコード１５００が、ディスク装置＃ｍ＋１からディスク装置＃ｍ＋ｎにパリティレコード１５０１が格納されているが、ディスク装置＃１からディスク装置＃ｍのディスク装置１３０４に格納するすべてのレコードを、データレコード１５００とする必要はない。同様に、ディスク装置＃ｍ＋１からディスク装置＃ｍ＋ｎまでのディスク装置１３０４上のすべてのレコード１５０２を、パリティレコード１５００とする必要もない。つまり、別のパリティグループでは、ディスク装置＃２から＃ｍ＋１にデータレコード１５００を格納し、ディスク装置＃１、及びディスク装置＃ｍ＋２から＃ｍ＋ｎにパリティレコード１５０１を格納するようにしてもよい。
【００２４】
なお、ディスク装置１３０４の数は、必ずしもパリティグループ内のレコードの数と対応している必要はない。例えば、図３に示すように、ｍ＋ｎ個のレコードでパリティグループが構成される場合に、ｍ＋ｎ台以上のディスク装置を用い、任意のｍ＋ｎ個のディスク装置にパリティグループ内のレコードを格納するように構成することもできる。同様に、パリティグループを構成するレコードの数もｍ＋ｎ個には限定されるものではない。
【００２５】
また、本実施例では、論理レコード１７００を、１つのデータレコード１５００に格納しても、１以上のデータレコード１５００に格納してもかまわない。
【００２６】
本実施例では、すべてのデータレコード１５００に格納できるデータの量は、すべての論理レコード１７００のデータの量より多いものとする。このため、データレコード１５００には、論理レコード１７００が割り当てられた状態と、そうでない状態（この状態を以下未割当て状態と呼ぶ。）が存在することになる。図４にこの関係を示す概念図を示す。例えば、最初、「内容ａ」を持つ論理レコードａ１７０２のために、パリティグループａ１７０４に含まれるデータレコードａ１７０１が割り当てられているとする。ここで、論理レコードａ１７０２に対して書き換えが発生し、その内容が「内容ｂ」になった時、本実施例では、以下に説明するように、「内容ｂ」に更新された論理レコードａ１７０２のために、パリティグループｂ１７０５に属するデータレコードｂ１７０３を割り当てる場合がある。この場合、更新前に論理レコードａ１７０２に割り当てられていたデータレコードａ１７０１は、論理レコード１７００が割り当てられていない未割当状態状態になる。ただし、この場合でも、データレコードａ１７０２に格納されている内容は、パリティグループａ１７０４に属する他のデータレコード１５００の内容を復元するために必要である。このため、データレコードａ１７０１の内容を単純に別の内容に変更することはできない。つまり、データレコードａ１７０１に、新たに論理レコード１７００を割り当てる場合には、その内容にしたがって、パリティレコードａ１７０６の値を書き換える必要が生じる。
【００２７】
図５は、キャッシュ１３０８の論理的な構造を示す構成図である。キャッシュ１３０８は、複数のセグメント２０００に分割されている。各セグメント２０００には、データレコード１５００、パリティレコード１５０１、論理レコード１７００の更新値等のいずれかが格納される。また、それぞれのセグメント２０００には、セグメントポインタ２００１が設けられている。セグメントポインタ２００１は、未割当状態にあるセグメント２０００をチェイン上に結合するために用いられる。
【００２８】
不揮発メモリ１４００も、特に図示しないが、論理的にキャッシュ１３０８と同様の構成を有している。
【００２９】
図６は、ディレクトリ１３０９の論理的な後続を示す構成図である。ディレクトリ１３０９は、マッピング情報２１００、データレコード未割当情報２１０１、キャッシュ割当情報２１０２、セグメント管理情報２１０３、空きセグメントキューポインタ２１０４、空きセグメント管理情報キューポインタ２１０５から構成される。セグメント管理情報２１０３は、キャッシュ１３０８を構成するセグメント２０００の数だけ存在する。ただし、後述するように、セグメント２０００に１対１に対応しているわけではない。以下、各情報を詳細に説明する。
【００３０】
図７は、マッピング情報２１００の論理的な構造を示す構成図である。マッピング情報２１００は、各論理レコード１７００が、ディスク装置１３０４上のどのデータレコード１５００に割当ててあるかを表している。論理レコードエントリ２２００は、各論理レコード１７００に対応して設けられる情報である。各論理レコードエントリ２２００は、対応する論理レコードのデータが、ディスク装置１３０４内のどのデータレコード１５００に割り当てられているかを示すデータレコードアドレス２２０１を含んでいる。本実施例では、各論理レコードエントリ２２００が、１つ以上のデータレコードアドレス２２０１を含んでいるものとする。
【００３１】
図８は、データレコード割当情報２１０１の論理的な構造を示す構成図である。データレコード割り当て情報２１０１には、各データレコード１５００に対応したエントリ２３００が設けられており、それぞれのデータレコードの状態を表している。各エントリ２３００には、対応するデータレコード１５００に、論理レコード１７００が割り当てられているか否かを表す情報が保持される。
【００３２】
図９は、キャッシュ割当情報２１０２の論理的な構造を示す構成図である。キャッシュ割り当て情報２１０２は、各物理レコード、すなわち、ディスク装置１３０４上のデータレコード１５００、及びパリティレコード１５０１に対応するエントリ２４００を有している。各エントリ２４００には、対応するデータレコード１５００、あるいはパリティレコード１５０１がキャッシュ１３０８に格納されているかどうかを表す情報を保持している。対応するデータレコード１５００、あるいはパリティレコード１５０１がキャッシュ１３０８に格納されていれば、そのエントリ２４００には、セグメント管理情報２１０３へのポインタ（レコード割当ポインタ）が保持される。一方、対応するデータレコード１５００、あるいはパリティレコード１５０１がキャッシュ１３０８に格納されていないエントリ２４００には、ヌル値が格納される。
【００３３】
図１０は、セグメント管理情報２１０３の論理的な構造を示す構成図である。セグメント管理情報２１０３は、キャッシュ１３０８の各セグメントを管理するために、各種の情報を有している。図１１に示すように、セグメント管理情報２１０３は、本発明に関係する情報として、更新前セグメントポインタ２５００、更新後セグメントポインタ２５０１、ダーティフラグ２５０２、バリッドフラグａ２５０３、バリッドフラグｂ２５０４、使用中フラグ２５０５、及び空きポインタ２５０６を有している。なお、図１０では、本発明に直接関係しない情報については、特に図示していない。
【００３４】
更新前セグメントポインタ２５００は、それを含むセグメント管理情報２１０３が、データレコード１５００のためのものである場合、パリティレコード１５０１の更新値が作成されていない値を格納したセグメント２０００をポイントする。また、セグメント管理情報２１０３が、パリティレコード１５０１のためのものである場合には、パリティレコード１５０１の更新値を作成する際に、一時的に利用するために確保したセグメント２０００をポイントする。
【００３５】
更新後セグメントポインタ２５０１は、それを含むセグメント管理情報２１０３が、データレコード１５００のためのものである場合は、パリティレコード１５０１の更新値が作成済の値を格納したセグメント２０００をポイントしている。また、セグメント管理情報２１０３が、パリティレコード１５０１のためのものである場合には、原則的に、本ポインタにより示されるセグメント２２００にその値が格納される。
【００３６】
ダーティフラグ２５０２は、更新後セグメントポインタ２５０１でポイントされているセグメント２０００に保持されたデータが、まだディスク装置１３０４に書き込まれていないことを表している。バリッドフラグａ２５０３は、更新前セグメントポインタ２５００によって、また、バリッドフラグｂ２５０３は、更新後セグメントポインタ２５０１によって、それぞれポイントされているセグメント２０００に保持されているデータが有効、すなわち、そのセグメント２０００の内にデータが入っていることを表す情報を保持する。使用中フラグ２５０４は、そのセグメント管理情報２１０３が使用中であることを表す情報を保持する。空きポインタ２５０５は、空き状態にあるセグメント管理情報２１０３同士を結合するためのポインタである。
【００３７】
図１１は、空きセグメントキューの論理的な構造を示す構成図である。図１１に示すように、空きセグメントキューは、ディレクトリ１３０９の空きセグメントキューポインタ２１０４を先頭として、空き状態にあるセグメント２０００が結合されて構成される。具体的には、ディレクトリ１３０９の空きセグメントキューポインタ２１０４の次に、空きセグメントキューポインタ２１０４により示されるセグメントが接続する。その後ろには、空きセグメントキューポインタ２１０４に接続するセグメント２０００が有するセグメントポインタ２００１によりポイントされるセグメント２０００が接続される。以下、セグメントポインタ２００１によりポイントされるセグメント２０００がチェイン状につながり、空きセグメントキューを構成する。なお、空きセグメントキューの最後部に接続されたセグメント２０００のセグメントポインタ２００１には、後続のセグメントがないことを示すために、例えば、Ｎｕｌｌが格納される。このことが、図中では、アース記号で示されている。
【００３８】
図１２は、空きセグメント管理情報キューの構造を示す構成図である。図１２に示すように、空きセグメント管理情報キューは、ディレクトリ１３０９の空きセグメント管理情報キューポインタ２１０５を先頭として、空き状態にある空きセグメント管理情報２１０３が結合されて構成される。セグメント管理情報２１０３同士の結合は、空きセグメントキューの場合と同様に、各セグメント管理情報２１０３の空きポインタ２５０６によりポイントされるセグメント管理情報を結合していくことにより行われる。また、空きセグメント管理情報キューの最後部に接続された空きセグメント管理情報２１０３の空きポインタには、後続の空きセグメント管理情報が存在しないことを示すために、例えば、Ｎｕｌｌが格納される。
【００３９】
以上、ディレクトリ１３０９の構造について説明したが、不揮発メモリ管理情報１４０１も、ディレクトリ１３０９と同様に構成されている。従って、ここでは、不揮発メモリ管理情報１４０１についての詳細な説明は行なわない。
【００４０】
図１３は、本実施例における制御装置により実施される処理の概要を示すデータフロー図である。本実施例において、ライト要求受付部１０１、パリティ生成スケジュール部１１０、ロード処理部１０２、デステージ処理部１０４、及びパリティ生成部１０３は、ディスク制御プロセッサ１３１０によるプログラム制御により実現される。
【００４１】
ライト要求受け付け部１０１は、処理装置１３００からのライト要求を受け付け、論理レコードの更新値をキャッシュ１３０８に格納する。パリティ生成スケジュール部１００は、処理装置１３００から受け付けた論理レコード１７００の更新値を、どのデータレコード１５００に格納し、これに伴う、パリティレコード１５０１の更新値をどのような手順で生成するかを決定する。ロード処理部１０２は、各ディスク装置１３０４からレコードを読み出し、キャッシュ１３０８への格納を行う。デステージ部１０４は、キャッシュ１３０８に格納された論理レコード、及びパリティレコードの更新値をデステージ処理によりディスク１３０４に格納する。また、パリティ生成部１０３は、パリティ生成スケジュール部１００の決定に従いパリティレコードの更新値を生成する。
【００４２】
以下、レコード更新時の処理について説明する。
【００４３】
図１４は、ライトデータ受付部１０１により行われる処理のフローチャートである。ライトデータ受付部１０１は、処理装置１３００からのライト要求に応じて実行を開始する。
【００４４】
ライトデータ受け付け部１０１は、ライト要求を受け付けると、まず、ライト要求の対象の論理レコード１７００が、ディスク装置１３０４上でどのデータレコード１５００に割り当てられているかチェックする（ステップ２６００）。ライト要求の対象の論理レコード１７００がどのデータレコード１５００に割り当てられているかは、ディレクトリ１３０９のマッピング情報２１００を参照することによりチェックすることができる。次に、そのデータレコード１５００のためにセグメント管理情報２１０３と、キャッシュ１３０８のセグメント２０００が割り当てられているかどうか判断する（ステップ２６０１）。この判断は、まず、ディレクトリ１３０９のキャッシュ割当情報２１０２を参照して、ステップ２６００で求めたデータレコードに対応してセグメント管理情報２１０３が割り当てられているか調べる。セグメント管理情報２１０３が割り当てられている場合には、さらに、そのセグメント管理情報２１０３の更新前セグメントポインタ２５０１で示されるセグメント２０００が割当てられているかどうか判断する。ステップ２６０１において、セグメント管理情報２１０３、および、セグメント２０００が割当られていないものがあれば、ステップ２６０２で、必要なセグメント管理情報２１０３、および、セグメント２０００を確保する。このとき、セグメント管理情報２１０３の使用中フラグ２５０４をオンにする。
【００４５】
続いて、不揮発性メモリ１４００にライトデータを書き込むかどうかを判断し（ステップ２６０３）、不揮発性メモリ１４００にもライトデータを書き込む場合には、ステップ２６０１、２６０２と同様の処理を、不揮発性メモリ管理情報１４０１を参照して実行する（ステップ２６０４、２６０５）。
【００４６】
ステップ２６０３で不揮発性メモリ１４００にライトデータを書き込まないと判断したとき、あるいは、ステップ２６０４、２６０５の処理の終了後、処理装置１３００から受け取ったライトデータをキャッシュ１３０８のセグメント２０００に格納する（ステップ２６０６）。また、このとき、ステップ２６０３で、不揮発性メモリ１４００にライトデータを書き込むと判断した場合は、不揮発性メモリ１４００にもそのレコードを格納する。そして、格納したセグメント２０００に対応するセグメント管理情報２１０３の管理情報を更新する。
【００４７】
以上のようにして論理レコードが更新されると、パリティ生成スケジュール部１００は、論理レコードの更新値をどのデータレコードに割り当てるとともに、パリティレコードの更新値を如何に生成するか決定する。パリティ生成スケジュール部１００によるこのような処理は、ライト要求受付部１０１による処理装置１３００からのライト要求の受け付けとは非同期で（独立して）行われる。図１５にパリティ生成スケジュール部１００の処理フローを示す。
【００４８】
パリティ生成スケジュール部１００は、まず、それに属する全てのデータレコードが空いている状態にあるパリティグループの有無を調べる（ステップ２７００）。ここで、データレコードが空いている状態とは、論理レコードが割り当てられていない状態であることを言う。すべてのデータレコード１５００が空いている状態のパリティグループがあれば、このパリティグループについてパリティレコードの更新値の作成をスケジュールすることとし、ステップ２７０２ヘジャンプする。全てのデータレコードが空き状態のパリティグループが存在しない場合には、パリティレコードに更新値の作成が必要なデータレコード１５００を探す（ステップ２７０１）。パリティレコードの更新値の作成が必要なデータレコードを見出すと、このデータレコードの属するパリティグループについてパリティレコードの更新値の作成をスケジュールすることとする。
【００４９】
ステップ２７０２では、パリティレコードの更新値を格納するために、キャッシュ１３０８のセグメント２０００、および、必要があれば、セグメント管理情報２１０３を確保する。この時、セグメント管理情報２１０３の使用中フラグ２５０４をオンにする。なお、セグメント管理情報２１０３の更新前セグメントポインタ２５００が、確保したセグメント２０００を示すようにする。
【００５０】
このようにして、パリティレコードの更新値の作成のスケジュールするパリティグループが決まると、続いて、このパリティグループ内に、論理レコードを割り当てていないデータレコードの有無を調べる（ステップ２７０３）。もし、論理レコードの割り当てられていないデータレコードがなければ、ステップ２７０６へジャンプする。該当するデータレコードがあれば、そのデータレコードに対して割り当てる論理レコードを探す（ステップ２７０４）。ここで探し出す論理レコードは、他のパリティグループのデータレコードに割り当てられており、処理装置１３００により更新されている論理レコードであって、かつ、その論理レコードが割り当てられているデータレコードに対応するパリティレコードに、更新値の作成が必要なものである。なおこのとき、各ディスク装置１３０４の全体を探索するのではなく、探索の範囲を各ディスク装置１３０４の一定の範囲に限定してもよい。探索の範囲を限定することにより、論理レコードの番号が近いものを、ディスク装置１３０４内で近い場所に配置することができ、論理レコードの番号順にリード／ライト処理が実行されるシーケンシャル処理を高速に処理できるようになる。
【００５１】
次に、論理レコードを割り当てていないデータレコードに対し、ステップ２７０４で見出した論理レコードを割当て直す（ステップ２７０５）。この処理によるセグメント管理情報２１０３の状態の変化の様子を図１６に示す。なおここでは、スケジュール対象とするパリティグループを、パリティグループ“ｆ”とし、パリティグループ“ｆ”の中で、論理レコードを割り当てていないデータレコードを、データレコード“ｊ”、データレコード“ｋ”とする。また、パリティグループ“ｆ”には属さないデータレコードの中で、論理レコードの更新値を受け取っているデータレコードとしてデータレコード“ｇ”、データレコード“ｈ”があるものとする。ステップ２７０５では、図１６に示すように、データレコード“ｇ”、データレコード“ｈ”に対応しているセグメント管理情報２１０３−ｇ、２１０３−ｈの更新前セグメントポインタ２５００によりポイントされているセグメント２０００−ｇ、２０００−ｈが、データレコード“ｊ”、データレコード“ｋ”に対応しているセグメント管理情報２１０３−ｊ、２１０３−ｋの更新前セグメントポインタ２５００によりポイントされるようにする。すなわち、セグメント管理情報２１０３−ｇの更新前セグメントポインタ２５００の値を、セグメント管理情報２１０３−ｊの更新前セグメントポインタ２５００にコピーし、セグメント管理情報２１０３−ｇの更新前セグメントポインタ２５００をＮｕｌｌにする。同様にして、セグメント管理情報２１０３−ｈの更新前セグメントポインタ２５００の値を、セグメント管理情報２１０３−ｋの更新前セグメントポインタ２５００にコピーし、セグメント管理情報２１０３−ｈの更新前セグメントポインタ２５００をＮｕｌｌにする。さらに、この割当変更に対応して、マッピング情報２１００、データレコード割当情報２１０１を更新する。
【００５２】
スケジュール対象として決定したパリティグループ内に空きデータレコードがなくなると、このパリティグループに属するパリティレコードのキャッシュ１３０８への格納状況を調べ、パリティレコードの更新値の作成に用いる情報を決定する（ステップ２７０６）。パリティレコードの更新値は次のうちのいずれかの情報により作成できる。
【００５３】
（１）パリティグループ内のすべてのデータレコードの最新値。この場合、パリティレコードの更新を必要とする値をもたないデータレコード（ディスク装置１３０４に書き込まれた後更新されていないデータレコード）の値も必要となる。
（２）データレコードの更新値と更新前の値、及びパリティレコードの更新前の値。
【００５４】
ここでは、（１）、（２）の情報の中で、キャッシュ１３０８に格納されていない情報が少ない方を、パリティレコードの更新値作成に用いる情報として決定する。これにより、ディスク装置１３０４からのロード処理を削減することができる。なお、このとき、パリティレコードの更新値作成に用いると決定した情報を格納している物理レコードに対応するセグメント管理情報２１０３の使用中フラグ２５０４をオンにする。
【００５５】
次に、ステップ２７０７で、ステップ２７０６でパリティレコードの更新値の作成に用いることを決定した情報の中で、キャッシュ１３０８に保持されていない情報があるかチェックする。必要な全ての情報がキャッシュ１３０８に保持されていれば、ステップ２７１０ヘジャンプする。キャッシュ１３０８に保持されていない情報があれば、その情報をキャッシュ１３０８に格納するために、キャッシュ１３０８内のセグメント２０００、および、必要があれば、セグメント管理情報２１０３を確保する（２７０８）。このとき、確保したセグメント管理情報２１０３の使用中フラグ２５０４をオンにする。また、セグメント管理情報２１０３の更新後セグメントポインタ２５０１が、確保したセグメント２０００を示すようにする。その後、ロード処理部により、必要な情報をディスク装置１３０４から読み出して、確保したセグメント２０００に格納する（ステップ２７０９）。
【００５６】
ステップ２７１０では、パリティ生成部１０３により、先に決定した情報を用いてパリティレコードの更新値を作成する。パリティレコードの更新値を作成すると、更新値を持つデータレコード、及びパリティレコードに対応しているセグメント管理情報２１０３の更新前セグメントポインタ２５００の値を、更新後セグメントポインタ２５０１に移し、更新値を格納しているセグメント２００が更新後セグメントポインタ２５０１によってポイントされるようにする（ステップ２７１１）。この様子を図１７に示す。具体的には、更新値を格納しているセグメント２０００を更新後セグメントポインタ２５０１が示すようにし、それまで、更新値を格納したセグメント２０００−ｍを示していた更新前セグメントポインタ２５００にＮｕｌｌを格納する。なお、このとき、更新値を持つセグメント２０００の内容をディスク装置１３０４に書き込むために、ダーティフラグ２５０２をオンにする。また、パリティレコード１５０１の更新値を作成するのに使用したデータレコード（更新値を持たないもの）に対応しているセグメント管理情報２１０３の使用中フラグ２５０４をオフにする。
【００５７】
最後に、デステージ処理部１０４により論理レコードの更新値、及びパリティレコードの更新値をディスク装置１３０４に書き込み処理を終える（ステップ２７１２）。
【００５８】
以上説明した処理による流れが、図１３において、矢印▲１▼〜▲５▼により示されている。矢印▲１▼は、処理装置１３００からのライト要求に応じて、論理レコードｃ、及び論理レコードｅの更新値がキャッシュに格納されることを示している。矢印▲２▼は、ステップ２７０５による論理レコードの割り当ての変更を示している。なお、上述したように、論理レコードの割り当ての変更は、その内容が更新値ｅに変更されたデータレコードのセグメント管理情報の更新前セグメントポインタを更新するだけでよく、更新値ｅを格納したセグメントを移動する必要はない。矢印▲３▼は、パリティレコードの更新値を作成するに当たって、キャッシュ１３０８に格納されていない必要な情報が、ステップ２７０９においてロードされる様子を示している。矢印▲４▼は、ステップ２７１０におけるパリティレコードの更新時のデータの流れを示している。また、矢印▲５▼は、ステップ２７１２におけるデステージ処理によりデータレコード、パリティレコードがディスク装置１３０４に格納される様子を示している。
【００５９】
以上説明した実施例では、ディスク装置と処理装置との間に接続される制御装置を備えたシステムを例に説明したが、本発明は、このようなシステムに限らず、処理装置とディスク装置とが制御装置を介さずに、直接接続されているようなシステムにも適用することができる。このような構成のシステムの一例を第２の実施例として図１８に示す。本実施例では、キャッシュ１３０８、ディレクトリ１３０４は、処理装置１３００の主記憶１３０２上に実現される。主記憶１３０２は、不揮発化されていても、いなくても本発明を実施するに当たっては特に問題がない。
【００６０】
図１８に示すように処理装置１３００上では、応用プログラム３００と管理プログラム３０１が実行される。第１の実施例においてディスク制御プロセッサが備えていた、キャッシュ１３０８、ディレクトリ１３０９、および、パリティグループ等の管理機能は、管理プログラム３０１がもつ。また、本実施例では、応用プログラム３００が論理レコードのリード／ライトを要求し、管理プログラム３０１が論理レコードとディスク装置に格納されるデータレコードのマッピングを行う。すなわち、図２における処理装置１３００が、図１９では、応用プログラム３００に相当し、制御装置１３０５が、管理プログラム３０１に相当する。したがって、管理プログラム３０１は、応用プログラム３００からのライト要求によるデータを、キャッシュ１３０８に格納した段階で完了させる。ディスク装置１３０４へのデータの書き込みは、後から、管理プログラム３００の制御により実行される。本実施例におけるディレクトリ１３０９、キャッシュ１３０８等の具体的な構成は、第１の実施例のものをそのまま適用することができる。また、本実施例において管理プログラムにより行われる処理は、先に説明した第１の実施例におけるディスク制御プロセッサのそれと同様であり、ここでは特に説明は省略する。
【００６１】
【発明の効果】
本発明によれば、ディスクアレイにおいて、各ディスク装置に、余分なレコードを設けることにより、パリティの更新値を作成するのに必要な情報を読出す回数、パリティをディスク装置に書き込む回数を削減できる。また、本発明の場合、未割当て状態の領域が１つでもあれば、それを有効に利用できるため、パリティグループ内のすべてのデータレコードを空いた状態にするといった特別な処理を実行させる必要はない。
【図面の簡単な説明】
【図１】第１の実施例における計算機システムの構成図。
【図２】レコードの定義図。
【図３】ディスクアレイにおけるパリティグループの概念図。
【図４】マッピングの変更の概念図。
【図５】キャッシュメモリの論理的な構成図。
【図６】ディレクトリの論理的な構成図。
【図７】マッピング情報の論理的な構成図。
【図８】データレコード割り当て情報の構成図。
【図９】キャッシュ割当て情報の構成図。
【図１０】セグメント管理情報の構成図。
【図１１】空きセグメントキューの構成図。
【図１２】空きセグメント管理情報キューの構成図。
【図１３】パリティレコードの更新値作成処理におけるデータの流れを示すデータフロー図。
【図１４】ライト要求受付時の処理フローチャート。
【図１５】パリティレコードの更新値作成時の処理フローチャート。
【図１６】論理レコードの割当て変更時のセグメント管理情報の変化の様子を示す概念図。
【図１７】セグメントの切り替え時のセグメント管理情報の変化の様子を示す概念図。
【図１８】第２の実施例における計算機システムの構成図。
【符号の説明】
１００…パリティ生成スケジュール部、１０１…ライト要求受付部、１０２…ロード処理部、１０３…パリティ生成部、１０４…デステージ処理部、３００…応用プログラム、３０１…管理プログラム、１３００…処理装置、１３０４…ディスク装置、１３０５…制御装置、１３０８…キャッシュメモリ、１３０９…ディレクトリ、１４００…不揮発性メモリ、１４０１…不揮発性メモリ管理情報、１５００…データレコード、１５０１…パリティレコード、１５０２…物理レコード、１６００…パリティレコード、１７００…論理レコード、１７０１…レコード、２０００…セグメント、２１００…マッピング情報、２１０１…データレコード割当情報、２１０２…キャッシュ割当情報、２１０３…セグメント管理情報、２１０４…空きセグメントキューポインタ、２１０５…空きセグメント管理情報。
【図１】
0003687111.tif 000002
【図２】
0003687111.tif 000003
【図３】
0003687111.tif 000004
【図４】
0003687111.tif 000005
【図５】
0003687111.tif 000006
【図６】
0003687111.tif 000007
【図７】
0003687111.tif 000008
【図８】
0003687111.tif 000009
【図９】
0003687111.tif 000010
【図１０】
0003687111.tif 000011
【図１１】
0003687111.tif 000012
【図１２】
0003687111.tif 000013
【図１３】
0003687111.tif 000014
【図１４】
0003687111.tif 000015
【図１５】
0003687111.tif 000016
【図１６】
0003687111.tif 000017
【図１７】
0003687111.tif 000018
【図１８】
0003687111.tif 000019