(57)【要約】【課題】アウトオブオーダーが発生した場合もＬＡを正しく生成する。【解決手段】ディスクアレイシステムに接続されたホストとの間でデータや制御信号を送受信するホスト入出力部と、ディスクとの間でデータや制御信号を送受信するディスク入出力部と、前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；前記ホスト入出力部は、当該転送に係るセグメントの先頭ブロックの保証コードが含まれる転送情報を前記キャッシュコントローラに転送する。【選択図】  図１
2006040011.tif 000002
【特許請求の範囲】
【請求項１】
データが入出力される複数のディスクと、ホストからの要求に基づいて前記ディスクへのデータの入出力を制御する制御部とを含むディスクアレイシステムであって；
前記制御部は、
ディスクアレイシステムに接続された前記ホストとの間でデータや制御信号を送受信するホスト入出力部と、
前記ディスクとの間でデータや制御信号を送受信するディスク入出力部と、
前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、
制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、
前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；
前記ＭＰＵは、前記ホスト入出力部と前記キャッシュメモリとの間のデータ転送に係る情報として、当該転送に係るセグメントの先頭ブロックの保証コード(LA_SEG)、データ入出力要求を受信したホスト入出力部の識別番号、当該データ入出力要求の識別番号、当該データの入出力に係るキャッシュメモリのアドレス(ADR)を含むホスト側内部バス転送リストを生成し；
前記制御部は、
前記データ入出力に係るキャッシュメモリのアドレス(ADR)と、
前記データ入出力に係るキャッシュメモリのアドレス(ADR)を含むセグメントの先頭キャッシュアドレス(ADR_SEG)と、
前記ブロックのサイズ(BLK_SIZE)と、
前記転送に係るセグメントの先頭ブロックの保証コード(LA_SEG)と、を用い、
LA=((ADR-ADR_SEG)/BLK_SIZE)+LA_SEG によって、当該ブロックの保証コードを算出し、
前記ホストからのデータ書き込み要求時には、前記保証コードを付したデータを前記キャッシュメモリに記憶し、
前記ホストからのデータ読み出し要求時には、前記キャッシュメモリから読み出されたデータに付されている保証コードと、前記算出された保証コードとを比較して、データを検査するディスクアレイシステム。
【請求項２】
データが入出力される複数のディスクと、ホストからの要求に基づいて前記ディスクへのデータの入出力を制御する制御部とを含むディスクアレイシステムであって；
前記制御部は、
ディスクアレイシステムに接続された前記ホストとの間でデータや制御信号を送受信するホスト入出力部と、
前記ディスクとの間でデータや制御信号を送受信するディスク入出力部と、
前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、
制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、
前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；
前記ＭＰＵは、前記ホスト入出力部と前記キャッシュメモリとの間のデータ転送に係る情報として、当該セグメントが当該転送に係るセグメントの順序を表す通し番号(SEG_NUM)、データ入出力要求を受信したホスト入出力部の識別番号、当該データ入出力要求の識別番号、当該データの入出力に係るキャッシュメモリのアドレス(ADR)を含むホスト側内部バス転送リストを生成し；
前記制御部は、
データ入出力に係るキャッシュメモリのアドレス(ADR)と、
前記セグメント内のブロック数(SEG_SIZE)と、
前記転送に係る先頭セグメントの先頭ブロックの保証コード(LA_FIRST_SEG)と、
前記転送に係る先頭セグメントからの当該セグメントの通し番号(SEG_NUM)と、
前記データ入出力に係るキャッシュメモリのアドレス(ADR)を含むブロックの先頭キャッシュアドレス(ADR_SEG)と、を用い、
LA_SEG=LA_FIRST_SEG+(SEG_SIZE×SEG_NUM)、及び、LA=((ADR-ADR_SEG)/SEG_SIZE)+LA_SEG によって、当該ブロックの保証コードを算出し、
前記ホストからのデータ書き込み要求時には、前記保証コードを付したデータを前記キャッシュメモリに記憶し、
前記ホストからのデータ読み出し要求時には、前記キャッシュメモリから読み出されたデータに付されている保証コードと、前記算出された保証コードとを比較して、データを検査するディスクアレイシステム。
【請求項３】
データが入出力される複数のディスクと、ホストからの要求に基づいて前記ディスクへのデータの入出力を制御する制御部とを含むディスクアレイシステムであって；
前記制御部は、
ディスクアレイシステムに接続された前記ホストとの間でデータや制御信号を送受信するホスト入出力部と、
前記ディスクとの間でデータや制御信号を送受信するディスク入出力部と、
前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、
制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、
前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；
前記ホスト入出力部は、当該転送に係るセグメントの先頭ブロックの保証コードが含まれる転送情報を前記キャッシュコントローラに転送するディスクアレイシステム。
【請求項４】
前記キャッシュコントローラは、
前記ホストからのデータ書き込み要求時に、
前記転送に係るセグメントの先頭ブロックの保証コード、及び当該セグメントの先頭からの相対的なキャッシュアドレスを用いて当該ブロックの保証コードを算出し、
前記算出された保証コードを付したデータを、前記キャッシュメモリに記憶する請求項３に記載のディスクアレイシステム。
【請求項５】
前記キャッシュコントローラは、
前記ホストからのデータ読み出し要求時に、
前記転送に係るセグメントの先頭ブロックの保証コード、及び当該セグメントの先頭からの相対的なキャッシュアドレスを用いて当該ブロックの保証コードを算出し、
前記キャッシュメモリから読み出したデータに付されている保証コードと、前記算出された保証コードとを比較して、前記キャッシュメモリからのデータの読み出しが正しいかを検査する請求項３に記載のディスクアレイシステム。
【請求項６】
前記キャッシュコントローラは、前記ホスト入出力部と前記ホストとの間で用いられる通信方式がアウトオブオーダアクセスが生じるものであると判定したときに、
前記ホスト入出力部は、当該転送に係るセグメントの先頭ブロックの保証コードが含まれる転送アドレス情報を前記キャッシュコントローラに転送する請求項３に記載のディスクアレイシステム。
【請求項７】
データが入出力される複数のディスクと、ホストからの要求に基づいて前記ディスクへのデータの入出力を制御する制御部とを含むディスクアレイシステムであって；
前記制御部は、
ディスクアレイシステムに接続された前記ホストとの間でデータや制御信号を送受信するホスト入出力部と、
前記ディスクとの間でデータや制御信号を送受信するディスク入出力部と、
前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、
制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、
前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；
前記ホスト入出力部は、当該転送に係る先頭セグメントからの当該セグメントの通し番号が含まれる転送情報を前記キャッシュコントローラに転送するディスクアレイシステム。
【請求項８】
前記キャッシュコントローラは、
前記ホストからのデータ書き込み要求時に、
前記当該セグメントの通し番号、前記転送に係るセグメントの先頭ブロックの保証コード、及び当該セグメントの先頭からのキャッシュアドレスを用いて当該ブロックの保証コードを算出し、
前記算出された保証コードを付したデータを、前記キャッシュメモリに記憶する請求項７に記載のディスクアレイシステム。
【請求項９】
前記キャッシュコントローラは、
前記ホストからのデータ読み出し要求時に、
前記当該セグメントの通し番号、前記転送に係るセグメントの先頭ブロックの保証コード、及び当該セグメントの先頭からのキャッシュアドレスを用いて当該ブロックの保証コードを算出し、
前記キャッシュメモリから読み出したデータに付されている保証コードと、前記算出された保証コードとを比較して、前記キャッシュメモリからのデータの読み出しが正しいかを検査する請求項７に記載のディスクアレイシステム。
【請求項１０】
前記キャッシュコントローラは、前記ホスト入出力部と前記ホストとの間で用いられる通信方式がアウトオブオーダアクセスが生じるものであると判定したときに、
前記ホスト入出力部は、当該転送に係る先頭セグメントからの当該セグメントの通し番号が含まれる転送情報を前記キャッシュコントローラに転送する請求項７に記載のディスクアレイシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスクアレイシステムに関し、特に、データ保証コードの生成技術に関する。
【背景技術】
【０００２】
ディスクアレイシステムは、複数のディスク装置をアレイ状に配置したＲＡＩＤ(Redundant Arrays of Inexpensive Disks)構成をとり、ホストからのリード要求（データの読み出し要求）およびライト要求（データの書き込み要求）をディスクの並列動作によって高速に処理するとともに、冗長データを付加してディスク装置に記憶することによって信頼性を向上させている。
【０００３】
ホストからのライト要求時には、ディスクアレイ内部では、ホストから受け取ったデータを一時的にキャッシュに格納後、ディスク装置へと並列に書込む。また、ホストからのリード要求時には、データをディスク装置から並列に読み出してキャッシュへと格納し、さらにキャッシュから読み出したデータをホストへ転送する。
【０００４】
ＲＡＩＤ構成のディスクアレイにおいては、ディスク装置の障害時にもデータを復元できるように冗長データをディスク装置に保存している。さらに、ディスクに格納したデータが正しいことを保証する目的で、各論理データブロックごとにデータ保証コードを付加することが知られている。データ保証コードを付加する方法としては、ホスト入出力手段は、ＭＰＵが作成したＬＡを含む転送リストにしたがい、ホストとキャッシュとの間でデータを送受信し、ホスト情報保持手段の中のＬＡ保持手段は、ホスト入出力手段とキャッシュの間でデータが送受信される際にＬＡを獲得・保持し、ＬＡ付加手段は、ＬＡ保持手段に格納したＬＡをキャッシュに書き込まれるデータに付加する技術が提案されている。
【特許文献１】特開２０００−３４７８１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前述した従来のディスクアレイシステムでは、論理データブロックが複数続く転送の場合、ＬＡ付加手段は、ＬＡ保持手段に取りこんだＬＡ値をカウンタによりインクリメントして、ＬＡを付加していた。
【０００６】
しかし、ホスト入出力手段とホスト間のデータ転送においてデータが消失した場合、消失したデータは、再度キャッシュから読み出されて再送されるので、論理データブロックの順序が入れ替わって転送されるアウトオブオーダが発生する。このとき、従来のように転送されたデータ量をカウントしてＬＡを生成すると、正常なＬＡを生成することができず、ＬＡ検査においてＬＡエラーとなってしまう。例えば、ｉＳＣＳＩのように、ネットワーク上で消失したパケットを再送する場合には、アウトオブオーダが発生してしまう。
【０００７】
本発明は、アウトオブオーダーが発生した場合もＬＡを正しく生成することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、データが入出力される複数のディスクと、ホストからの要求に基づいて前記ディスクへのデータの入出力を制御する制御部とを含むディスクアレイシステムであって；前記制御部は、ディスクアレイシステムに接続された前記ホストとの間でデータや制御信号を送受信するホスト入出力部と、前記ディスクとの間でデータや制御信号を送受信するディスク入出力部と、前記ホスト入出力部と前記ディスク入出力部との間で転送されるデータを所定サイズのブロックが複数集合して構成されるセグメントを単位として一時的に記憶するキャッシュメモリと、制御プログラムを実行することによって前記制御部の動作を制御するＭＰＵと、前記キャッシュメモリに対するデータの入出力を制御するキャッシュコントローラと、を備え；前記ホスト入出力部は、当該転送に係るセグメントの先頭ブロックの保証コードが含まれる転送情報を前記キャッシュコントローラに転送する。
【発明の効果】
【０００９】
本発明によると、前記ホスト入出力部からキャッシュコントローラに転送される情報に基づいて保証コードを生成するので、論理データブロックの順序が入れ替わって転送されるアウトオブオーダが発生した場合も保証コードを正しく生成することができる。また、データ読み出し時にも適切なＬＡ検査をすることができる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態を図面を参照して説明する。
【００１１】
図１は、本発明の実施の形態のディスクアレイシステムの構成を示すブロック図である。
【００１２】
ホスト１０１、１０２、１０３は、ＣＰＵ、メモリ、記憶装置、インターフェース、入力装置及び表示装置が備わるコンピュータ装置であり、アプリケーションプログラムが動作している。アプリケーションプログラムは、ディスクアレイシステム１０５から提供されるデータを利用して、データベースサービスやウェブサービス等を利用可能にする。ホスト１０１、１０２、１０３は、ホストケーブルで接続されたバススイッチ１０４を介して、ホストケーブルで接続されたディスクアレイシステム１０５の中のホスト入出力部１０６、１０７、１０８に接続されている。なお、ホスト１０１、１０２、１０３は、少なくとも一つ以上設けられていればよい。
【００１３】
ホスト１０１、１０２、１０３とディスクアレイシステム１０５が接続されるホストケーブル及びスイッチ１０４によってＳＡＮ（Storage Area Network）が構成されている。このＳＡＮは、例えばファイバチャネル（Fibre Channel）やｉＳＣＳＩ（internet SCSI）のような、データの転送に適するプロトコルで通信可能なネットワークである。このＳＡＮで用いられるプロトコルは、ホスト１０１等及びホスト入出力部１０６によって定まり、ホスト入出力部識別プログラム１１５によって識別される。
【００１４】
ディスクアレイシステム１０５は、ホスト入出力部１０６、１０７、１０８と、ディスク入出力部１３３、１３４、１３５と、ディスク装置群１４０、１４１、１４２と、キャッシュ１２２と、ディスクアレイ全体の制御を行なうＭＰＵ１２５と、メモリ１２６と、キャッシュコントローラ１１１とから構成されている。
【００１５】
ホスト入出力部１０６、１０７、１０８は、ホスト１０１、１０２、１０３とキャッシュコントローラ１１１との間でデータを転送しており、ホスト側内部バス１１０を介してキャッシュコントローラ１１１に接続されている。ホスト側内部バス１１０には、例えばＰＣＩバスを用い、データを転送することができる。ホスト入出力部１０６は、ホスト側内部バス１１０上のデータを転送するＤＭＡ（Direct Memory Access）１０９を備えている。なお、ＤＭＡ１０９はメモリ１２６へアクセスすることもできる。
【００１６】
ホスト入出力部１０７、１０８も、ホスト入出力部１０６と同様の機能を有している。なお、ホスト入出力部１０６、１０７、１０８は、少なくとも一つ以上設けられていればよい。
【００１７】
ディスク装置群１４０、１４１、１４２は、各々が少なくとも１台以上のディスク装置から構成される。例えば、ディスク装置群１４０は、ディスク装置１４３、１４４、１４５から構成される。なお、ディスク装置群１４０、１４１、１４２は、少なくとも一つ以上設けられていればよい。
【００１８】
ディスク入出力部１３３、１３４、１３５は、ディスク装置群１４０とキャッシュコントローラ１１１との間でデータを転送しており、ディスクケーブル１３７を介してディスク装置群１４０と接続される。また、ディスク入出力部１３３等は、ディスク側内部バス１３２によってキャッシュコントローラ１１１と接続されている。ディスク側内部バス１３２には、例えば、ファイバチャネルを用いることができる。ディスク入出力部１３３は、ディスク側内部バス１３２上のデータを転送するＤＭＡ１３６を有している。ＤＭＡ１３６はメモリ１２６へアクセスすることもできる。
【００１９】
ディスク入出力部１３４、１３５も、ディスク入出力部１３３と同様に、各々ディスクケーブル１３８、１３９によって、ディスク装置群１４１、１４２と接続されており、ディスク側内部バス１３２を介してキャッシュコントローラ１１１と接続されている。ディスク入出力部１３４、１３５も、ディスク入出力部１３３と同様の機能を有している。なお、ディスク入出力部１３３、１３４、１３５は、少なくとも一つ以上設けられていればよい。
【００２０】
キャッシュコントローラ１１１は、ホスト側内部バスバッファ１１２、ＬＡ付加プログラム１１３、ホスト情報保持部１１４、ホスト入出力部識別プログラム１１５、ディスク情報保持部１１６、ＬＡ削除プログラム１１７、ＬＡ検査プログラムＡ１１８、キャッシュ制御プログラム１１９、ＬＡ検査プログラムＢ１２０、及びディスク側内部バスバッファ１２１を備えている。
【００２１】
ホスト側内部バスバッファ１１２は、ホスト入出力部１０６、１０７、１０８とキャッシュ１２２との間で転送されるデータを一時的に記憶する。ディスク側内部バスバッファ１２１は、ディスク入出力部１３３、１３４、１３５とキャッシュ１２２との間で転送されるデータを一時的に記憶する。
【００２２】
ＬＡ付加プログラム１１３は、ホスト入出力部１０６、１０７、１０８からキャッシュ１２２に転送されるデータにＬＡを付加する（この動作は図３を用いて詳述する）。
【００２３】
ホスト情報保持部１１４は、ホスト入出力部１０６、１０７、１０８とキャッシュ１２２との間でデータが転送される際に、取得したホスト側内部バス転送リスト（図６）に基づいてホストの転送情報パラメータを格納する（この構成は図８を用いて詳述する）。
【００２４】
ホスト入出力部識別プログラム１１５は、ホスト入出力部１０６が使用する通信プロトコルを識別する。すなわち、ホスト入出力部識別プログラム１１５が、ホスト入出力部１０６によって用いられる通信プロトコルがｉＳＣＳＩであると判定すると、論理データブロックの転送順序が入れ替わるアウトオブオーダが発生する可能性があることが分かる。
【００２５】
ディスク情報保持部１１６は、ディスク入出力部１３３、１３４、１３５とキャッシュ１２２との間でデータが転送される際に、取得したディスク側内部バス転送リストに基づいて、ディスクの転送情報パラメータを格納する。ディスク情報保持部１１６は、ＬＡ保持部、ＬＵＮ保持部、チャンネル番号保持部、ディスク番号保持部、タグ番号保持部、ＬＡ有効情報保持部、及び転送アドレス保持部によって構成されている。
【００２６】
ＬＡ保持部は、ＬＡの期待値を保持する。ＬＵＮ保持部は、ホストから見たディスクアレイの論理ユニット番号（ＬＵＮ）を保持する。チャンネル番号保持部は、転送に使用するディスク入出力部１３３、１３４、１３５を識別するチャンネル番号を保持する。ディスク番号保持部は、転送要求を出したディスクを識別するディスク番号を保持する。タグ番号保持部は、ディスクに対するコマンドを識別するタグ番号を保持する。ＬＡ有効情報保持部は、ＬＡの付加、検査、削除を論理データブロックに対して行なうかを識別するＬＡ有効情報を保持する。転送アドレス保持部は、転送するキャッシュ１２２のアドレスを保持する。
【００２７】
ＬＡ削除プログラム１１７は、ディスクアレイシステム１０５からホスト１０１等へのデータ読み出し時（ディスクアレイリード時）に、キャッシュ１２２からホスト入出力部１０６、１０７、１０８に転送されるデータに付加されているＬＡを削除する。ＬＡ削除プログラム１１７は、カウンタと、バッファ値削除プログラムを備えている。
【００２８】
ディスクアレイリード時に、キャッシュ制御プログラム１１９によってキャッシュ１２２から転送されたデータは、ホスト側内部バスバッファ１１２に一時的に記憶される。カウンタは、ホスト側内部バスバッファ１１２に記憶されたデータ数を計数し、ＬＡを削除する値に達したときにバッファ値削除プログラムに通知する。バッファ値削除プログラムは、カウンタからの通知を受けたタイミングでホスト側内部バスバッファ１１２内のデータに付加されているＬＡを削除する。
【００２９】
ＬＡ検査プログラムＡ１１８は、キャッシュ１２２からホスト入出力部１０６、１０７、１０８へ転送されるデータに付加されているＬＡと、ホスト情報保持部１１４に格納されている情報に基づいて生成されるＬＡの期待値とを比較し、両者が同一であるか否かの検査をする（この動作は図４を用いて詳述）。
【００３０】
キャッシュ制御プログラム１１９は、キャッシュコントローラ１１１とキャッシュ１２２との間のデータの転送を制御する。
【００３１】
ＬＡ検査プログラムＢ１２０は、ディスク入出力部１３３、１３４、１３５とキャッシュ１２２との間で転送されるデータに付加されているＬＡと、ディスク情報保持部１１６に格納されている情報に基づいて生成されるＬＡの期待値とを比較し、両者が同一であるか否かを検査する（この動作は図５を用いて詳述）。
【００３２】
本実施の形態ではキャッシュコントローラ１１１の各部をプログラム（ソフトウェア）で構成したが、キャッシュコントローラ１１１をＬＳＩの回路（ハードウェア）によって構成してもよい。
【００３３】
キャッシュ１２２は、ホスト入出力部１０６等とディスク入出力部１３３等との間で転送されるデータが一時的に記憶されるメモリであり、セグメント単位でデータが記憶される。本実施の形態では１ブロックが５１２バイトで、１セグメントは４ブロック（２０４８バイト）の固定値で構成されている。また、キャッシュ１２２は、キャッシュバス１３１によって、キャッシュコントローラ１１１と接続されている。
【００３４】
キャッシュ１２２には、ホスト側ＬＡ情報格納部１２３及びディスク側ＬＡ情報格納部１２４が設けられており、コマンドの先頭ブロックのＬＡが格納される。
【００３５】
メモリ１２６は、ＭＰＵの動作に必要なプログラムやデータを記憶するものであり、ディスクアレイ制御プログラム１２６、ＬＡ設定プログラム１２７、転送リスト格納部１２８及びコマンド情報格納部１２９が記憶されている。
【００３６】
ディスクアレイ制御プログラム１２７は、ＭＰＵ１２５の処理によってディスクアレイ内のデータの転送を制御する。
【００３７】
ＬＡ設定プログラム１２８は、キャッシュコントローラ１１１におけるＬＡの算出、付加、検査及び削除を制御する。
【００３８】
転送リスト格納部１２９は、ＭＰＵ１２５によって生成された、ホスト側内部バス転送リスト及びディスク側内部バス転送リストが格納される。ホスト入出力部１０６等は、転送リスト格納部１２９に格納された転送リストに基づいて、キャッシュ１２２をアクセスする。なお、転送リスト格納部１２９に格納された転送リスト（セグメント情報等）は、アドレス情報（例えば、ＰＣＩアドレス）として、ホスト側内部バス１１０及びディスク側内部バス１３２に送出される。
【００３９】
コマンド情報格納部１３０は、ホスト入出力部１０６等が受信したホストライトコマンド及びホストリードコマンドの内容が格納される。格納されたコマンドの内容は、ホスト入出力部１０６等が発行する割込を契機として、ＭＰＵ１２５によって読み出される。
【００４０】
図２は、本発明の実施の形態のキャッシュ１２２のデータ格納フォーマットの説明図であり、データ保証コードの格納状態を示す。
【００４１】
論理データブロック２０４、２０５、２０６は、ホスト１０１がディスクアレイシステム１０５にデータを転送するときのホストデータの一部であり、論理データブロック２０４、２０５、２０６の順に連続したデータである。論理データブロック２０４、２０５、２０６の最後尾にはデータ保証コードが格納されるＬＡ・ＬＲＣ部２０１、２０２、２０３が付加されている。ＬＡ・ＬＲＣ部２０１、２０２、２０３は、それぞれ論理データブロック２０４、２０５、２０６に対応する。
【００４２】
拡張データ２０７は論理データブロック２０４とＬＡ・ＬＲＣ部２０１を結合したものであり、拡張データ２０８は論理データブロック２０５とＬＡ・ＬＲＣ部２０２を結合したものであり、拡張データ２０９は論理データブロック２０６とＬＡ・ＬＲＣ部２０３を結合したものである。すなわち、論理データブロック２０４、ＬＡ・ＬＲＣ部２０１、論理データブロック２０５、ＬＡ・ＬＲＣ部２０２、論理データブロック２０６、ＬＡ・ＬＲＣ部２０３の順に連続したデータとなる。
【００４３】
データ保証コードはＬＡ（Logical Address）と、ＬＲＣ（Longitudinal Redundancy Check）で構成される。ＬＡは、２バイトの論理ユニット番号（ＬＵＮ）と２バイトの論理データブロックアドレス（ＬＢＡ）から生成される。論理ブロックデータ毎に、読み書きすべき論理データブロックのアドレスを識別可能なＬＡを付加し、読み書きしたアドレスが正しいことを確認することによってシステムの信頼性を向上させることができる。
【００４４】
ＬＲＣは、各論理データブロックの排他的論理和演算を算出して求めた４バイトのデータである。ＬＲＣによってディスクアレイ内部でのデータ転送中のデータビットエラーを検査することができ、システムの信頼性を向上させることができる。
【００４５】
図３は、本発明の実施の形態のＬＡ付加プログラム１１３の構成図である。
【００４６】
ＬＡ付加プログラム１１３は、バッファ値設定サブプログラム１００１及びＬＡ期待値生成サブプログラム１００２を備えており、ディスクアレイライト時に、ホスト入出力部１０６等からキャッシュ１２２に転送されるデータにＬＡを付加する。
【００４７】
ホスト入出力部１０６がホスト１０１等からライトコマンドを受信し、さらにライトデータを受信すると、ディスクアレイライト時にホスト入出力部１０６から転送されたデータは、ホスト側内部バスバッファ１１２に記憶される。キャッシュ制御プログラム１１９が、ホスト側内部バスバッファ１１２に対して、ホスト側内部バスバッファ１１２からデータを読み出す指示をすると、ホスト側内部バスバッファ１１２はＬＡ期待値生成サブプログラム１００２に制御信号を送信する。ＬＡ期待値生成サブプログラム１００２は、ホスト側内部バスバッファ１１２から送信された制御信号を検出すると、ホスト情報保持部１１４に格納された情報を用いて、当該ブロックのＬＡを生成し、バッファ値設定サブプログラム１００１にＬＡを送出する。
【００４８】
バッファ値設定サブプログラム１００１は、ホスト側内部バスバッファ１１２に記憶されたデータ（論理データブロック２０４）にＬＡを付加する。ＬＡが付加されたデータには、さらにＬＲＣが付加されて、キャッシュ制御プログラム１１９によってキャッシュ１２２に転送される。
【００４９】
図４は、本発明の実施の形態のＬＡ検査プログラムＡ１１８の構成図である。
【００５０】
ＬＡ検査プログラムＡ１１８は、バッファ値取得サブプログラム１１０１、比較部１１０２及びＬＡ期待値生成サブプログラム１１０３を備えており、ディスクアレイリード時に、キャッシュ１２２からホスト入出力部１０６等に転送されるデータに付加されているＬＡと、期待されるＬＡとを比較し、両者が同一であるか否かを検査する。
【００５１】
ディスクアレイリード時にキャッシュ制御プログラム１１９によってキャッシュ１２２から転送された１ブロックのデータのうち、論理データブロック２０４（５１２バイト）はホスト側内部バスバッファ１１２に記憶される。また、１ブロックのデータのうち、ＬＡ・ＬＲＣ部（８バイト）に記憶されているデータ保証コードはバッファ値取得サブプログラム１１０１に送られる。
【００５２】
バッファ値取得サブプログラム１１０１は、取得したデータ保証コードからＬＡを抽出し、比較部１１０２に送出する。
【００５３】
また、ホスト側内部バスバッファ１１２はキャッシュ１２２から１ブロックのデータを読み出すと、ＬＡ期待値生成サブプログラム１１０３に制御信号を送信する。ＬＡ期待値生成サブプログラム１１０３は、ホスト側内部バスバッファ１１２から送信された制御信号を検出すると、ホスト情報保持部１１４に格納されている情報に基づいて、当該ブロックのＬＡを生成し、比較部１１０２に送出する。
【００５４】
比較部１１０２は、ＬＡ期待値生成サブプログラム１１０３から取得したＬＡと、バッファ値取得サブプログラム１１０１から取得したＬＡとが同一であるか否かを比較する。その結果、両ＬＡが一致しない場合は、キャッシュ１２２から読み出したデータに異常があると判定し、ＬＡ検査プログラム１１８はＭＰＵ１２５にエラーを通知する。一方、両ＬＡが一致する場合は、キャッシュ１２２から読み出したデータは正常であると判定し、ホスト側内部バスバッファ１１２はホスト入出力手段１０６にデータを転送する。
【００５５】
図５は、本発明の実施の形態のＬＡ検査プログラムＢ１２０の構成図である。
【００５６】
ＬＡ検査プログラムＢ１２０は、カウンタ１１０４と、バッファ値取得サブプログラム１１０５と、比較部１１０６とを備えている。ＬＡ検査プログラムＢ１２０は、ディスクアレイリード時に、ディスク入出力部１３３等からキャッシュ１２２に転送されるデータに付加されているＬＡと、期待されるＬＡとを比較し、両者が同一であるか否かを検査する。また、ディスクアレイライト時に、キャッシュ１２２からディスク入出力部１３３等に転送されるデータに付加されているＬＡと、期待されるＬＡとを比較し、両者が同一であるか否かを検査する。
【００５７】
ホスト１０１等からディスクアレイシステム１０５へのデータ書き込み時（ディスクアレイライト時）には、キャッシュ制御プログラム１１９によってキャッシュ１２２から転送されたデータは、ディスク側内部バスバッファ１２１に一時的に記憶される。また、ディスクアレイリード時には、ディスク入出力部１３３から転送されたデータは、ディスク側内部バスバッファ１２１にバッファされる。
【００５８】
カウンタ１１０４は、ディスク側内部バスバッファ１２１に一時的に記憶されたデータ数をカウントし、ＬＡを取得するカウント値に達したときにバッファ値取得サブプログラム１１０５に通知する。バッファ値取得サブプログラム１１０５は、カウンタからの通知を受けたタイミングで、ディスク側内部バスバッファ１２１内のデータに付加されているＬＡを取得し、比較部１１０６に送出する。比較部１１０６は、ディスク情報保持部１１６のＬＡ保持部からＬＡを取得し、バッファ値取得サブプログラム１１０５が取得したＬＡと同一であるか否かを比較する。比較の結果ＬＡが同一でない場合は、ＬＡ検査プログラムＢ１２０は、ＭＰＵ１２５にエラーを通知する。
【００５９】
なお、論理データブロックが複数続く転送の場合は、ＬＡ検査プログラムＢ１２０は、ディスク入出力部１３３等とキャッシュ１２２との間で転送されるデータに付されたＬＡと、ＬＡ保持部から取得したＬＡ値をカウンタによって加算することによって生成されたＬＡの期待値とを比較して、連続してＬＡを検査する。
【００６０】
このように、ホスト１０１からディスクアレイシステム１０５にデータを転送する場合には、論理データブロックアドレスを指定して書き込む。このとき、ディスクアレイライト時にキャッシュ１２２にデータを書き込む際に、論理データブロックにデータ保証コードを付加する。なお、キャッシュ１２２から読み出してディスク装置１４３に書き込む際、論理データブロックに付加されているデータ保証コードと、生成したデータ保証コードの期待値を比較し検査する。
【００６１】
また、ディスクアレイリード時に、ディスク装置１４３から読み出してキャッシュ１２２に転送する際、及び、キャッシュ１２２から読み出したデータをホスト１０１に転送する際に、論理データブロックに付加されているデータ保証コードと、生成したデータ保証コードの期待値を比較し検査する。論理データブロックに付加されているデータ保証コードは、ホスト１０１に転送する際に削除し、元のデータの状態に戻す。なお、ディスク装置１４３から読み出してキャッシュ１２２に書き込む際にもデータ保証コードが検査される。
【００６２】
図６は、本発明の実施の形態のホスト側内部バス転送リストの構成図である。
【００６３】
ホスト側内部バス転送リストは、ＭＰＵ１２５が作成し、転送リスト格納部１２９に格納される。
【００６４】
ホスト側内部バス転送リストは、ホスト入出力部１０６がデータ転送を実行するためにＤＭＡ１０９を用いて取得する。ディスク側内部バス転送リストは、ディスク入出力部１３３がデータ転送を実行するためにＤＭＡ１３６を用いて取得する。
【００６５】
ホスト入出力部１０６、１０７、１０８は、ホスト側内部バス転送リストを用いることによって、ＤＭＡによるデータ転送を行うことができる。また、ディスク入出力部１３３、１３４、１３５は、ディスク側内部バス転送リストを用いることによって、ＤＭＡによるデータ転送を実行することができる。キャッシュコントローラ１１１は、ホスト入出力部１０６、１０７、１０８、及びディスク入出力部１３３、１３４、１３５から受け取った転送コマンドに従ってデータを送受信する。ホスト入出力部１０６とディスク入出力部１３３とが転送リスト獲得処理及びデータ転送処理を行うので、ＭＰＵ１２５はデータ転送が終了するまで介在する必要がない。
【００６６】
ホスト側内部バス転送リストは、キャッシュ１２２のアドレスを指定するホスト側内部バス転送アドレス７０１と、データの転送サイズを指定するホスト側内部バス転送サイズ７０２をそれぞれｍ個（ｍは自然数）格納する。
【００６７】
ホスト側内部バス転送アドレス７０１には、ホスト転送パラメータとして、セグメント情報７０３、チャンネル番号７０４、タグ番号７０５及び転送アドレス７０６（ＡＤＲ）が含まれる。また、ホスト側内部バス転送サイズ７０２には、転送されるデータのサイズ７０７が含まれる。
【００６８】
セグメント情報７０３には、キャッシュ内の当該セグメントに格納される複数の論理ブロックのうち当該セグメントの先頭に格納される論理ブロックのＬＡ（以下、「当該セグメントの先頭ブロックのＬＡ」（ＬＡ＿ＳＥＧ）と呼ぶ）が格納される。この他に、第２の実施の形態に示すように、当該セグメントが当該コマンドの中の何番目のセグメントかを表す通し番号（ＳＥＧ＿ＮＵＭ）を格納してもよい。チャンネル番号７０４には、データ入出力要求時を受信したホスト入出力部１０６等の識別番号が格納される。タグ番号７０５には、ホスト１０１等によって発行されたコマンドの識別番号が格納され、ホスト側ＬＡ情報格納部（図７）のタグ番号８０１や、ホスト情報保持部（図８）のタグ番号９０６に対応している。転送アドレス７０６には、データの転送元又は転送先であるキャッシュ１２２のアドレスが格納される。
【００６９】
キャッシュコントローラ１１１が転送アドレス７０６を受けると、タグ番号７０５に従って該当するコマンドを特定し、対応するＬＡ情報をキャッシュ１２２のホスト側ＬＡ情報格納部１２３から読み出す。ホスト側ＬＡ情報格納部１２３には、コマンドの先頭ブロックのＬＡが格納されている。
【００７０】
また、ホスト側内部バス転送リストとディスク側内部バス転送リストは、複数個存在してもよい。
【００７１】
図７は、本発明の実施の形態のホスト側ＬＡ情報格納部１２３の構成図である。
【００７２】
ホスト側ＬＡ情報格納部１２３は、ＭＰＵ１２５がキャッシュ１２２に格納するホスト入出力部からキャッシュへ転送される論理ブロックのＬＡ情報であって、キャッシュコントローラ１１１はＬＡの期待値を求めるために、転送リストに指定されたタグ番号に基づいて、このテーブルを参照して必要な情報を取得する。キャッシュコントローラ１１１が取得した情報は、ホスト情報保持部１１４に保持される。
【００７３】
ホスト側ＬＡ情報格納部１２３には、タグ番号８０１、ホストから受信したコマンドに基づき転送される複数の論理ブロックのうち先頭ブロックのＬＡ８０２（以下、「当該先頭ブロックのＬＡ」と呼ぶ）、ホストから受信したコマンドの先頭ブロックが格納されるキャッシュ内のセグメントの先頭に格納される論理ブロックのＬＡ８０３（以下、「当該コマンドの先頭ブロックが属するセグメントの先頭ＬＡ」と呼ぶ）、ＬＵＮ８０４及び転送アドレス８０５を含んでいる。
【００７４】
タグ番号８０１は、ホスト１０１等が発行するコマンドの識別番号であり、ホスト側内部バス転送リスト（図６）のタグ番号と同じものである。ホスト側ＬＡ情報格納部１２３には、ディスクアレイシステム１０５が同時に処理することができるコマンド数のエントリが設けられており、タグ番号８０１で識別されている。
【００７５】
該当コマンドの先頭ブロックが属するセグメントの先頭ＬＡ８０３には、例えば図１４に示す場合において、該当コマンドの先頭ブロックがＬＢＡｎ＋１であるときに、ＬＢＡｎのＬＡが保持される。
【００７６】
セグメント内には、論理ブロックが連結して格納される。ＭＰＵ１２５は、セグメント長、当該コマンドの先頭ブロックが格納されるキャッシュのアドレス、及び、論理ブロックを用いて、この値を求めることができる。
【００７７】
ＬＵＮ８０４には、データの転送に係る（転送されるデータの書き込み先又は読み出し元の）論理ユニットの番号が保持される。転送アドレス８０５には、当該コマンドによるデータの転送先又は転送元のキャッシュアドレスが保持される。
【００７８】
図８は、本発明の実施の形態のホスト情報保持部１１４の構成図である。
【００７９】
このホスト情報保持部１１４は、ホスト側ＬＡ情報格納部１２３（図７）及びホスト入出力部１０６等からホスト側内部バス１１０に送出された転送アドレスに格納された情報を保持するもので、転送が起動され、入出力アドレスを取得した後に、キャッシュコントローラ１１１によってエントリが生成される。
【００８０】
ホスト情報保持部１１４は、エントリ番号９０１、該当コマンドの先頭ブロックのＬＡ９０２、該当コマンドの先頭ブロックが属するセグメントの先頭ＬＡ９０３、ＬＵＮ９０４、チャンネル番号９０５、タグ番号９０６、ＬＡ有効情報９０７及び転送アドレス９０８を含んでいる。
【００８１】
該当コマンドの先頭ブロックが属するセグメントの先頭ＬＡ９０３は、後述する第２の実施の形態で用いられる情報で、例えば図１４に示す場合において、該当コマンドの先頭ブロックがＬＢＡｎ＋１であるときに、ＬＢＡｎのＬＡが保持される。
【００８２】
該当コマンドの先頭ブロックのＬＡ９０２、該当コマンドの先頭ブロックが属するセグメントの先頭ＬＡ９０３、ＬＵＮ９０４及びチャンネル番号９０５は、各々、ホスト側ＬＡ情報格納部１２３（図７）の、当該コマンドの先頭ブロックのＬＡ８０２、当該コマンドの先頭ブロックが属するセグメントの先頭ＬＡ８０３及びＬＵＮ８０４に対応する。これらの情報は、ホスト側ＬＡ情報格納部１２３から取得される。
【００８３】
ＬＵＮ９０４には、データの転送に係る（転送されるデータの書き込み先又は読み出し元の）論理ユニットの番号が保持される。
【００８４】
チャンネル番号９０５には、データ入出力要求を受信したホスト入出力部１０６等の識別番号が保持される。タグ番号９０６には、ホスト１０１等が発行するコマンドの識別番号が保持される。ＬＡ有効情報９０７には、このエントリが有効であるか、無効であるか、すなわち、ＬＡの付加、検査、削除を論理データブロックに対して行なうかを識別するＬＡ有効情報が保持されている。転送アドレス９０８には、データ転送に係るキャッシュ１２２のアドレスが保持される。
【００８５】
図９は、本発明の第１の実施の形態のホスト１０１からディスクアレイシステム１０５へのデータ書き込み時（ディスクアレイライト時）のデータ転送処理のシーケンス図である。
【００８６】
ホスト１０１等において動作するアプリケーションプログラムからデータ書き込み要求が発行されると、ホスト入出力部１０６等はホストライトコマンドを受信する（１２０１）。そして、ホスト入出力部１０６等は、該コマンドの内容をメモリ１２６内のコマンド情報格納部１３０に転送し（１２０２）、ＭＰＵ１２５に転送リストを作成させるために、割込信号を発行してコマンドを受信したことを通知する（１２０３）。
【００８７】
ＭＰＵ１２５は、割込信号を受信すると（１２０４）、コマンド情報格納部１３０に格納されているホストライトコマンドの内容を解析し、該コマンドから論理データブロックアドレスを抽出し、該論理データブロックアドレスを物理データブロックアドレスへ変換する、ディスクアレイ特有のアドレス変換を行なう（１２０５）。そして、ＭＰＵ１２５は、ライトデータをキャッシュに書き込むための転送コマンドを作成する（１２０６）。この転送コマンドは、コマンド情報格納部１３０に格納され、ホスト入出力部１０６（ＤＭＡ１０９）によって使用される。そして、論理ユニット番号と論理データブロックアドレスからＬＡを生成して、ホスト側ＬＡ情報格納部１２３にエントリを追加する。そして、ホスト１０１から送られてくるデータをキャッシュ１２２に分割して転送するためのホスト側内部バス転送リストを作成して、転送リスト格納部１２９に格納する（１２０７）。その後、ＭＰＵ１２５は、ホスト入出力部１０６に転送を起動させる。
【００８８】
一方、ホスト入出力部１０６は、ＭＰＵ１２５によって転送が起動されると、転送リスト１２９を読み出して、リストの全エントリに対するライトデータを指定されたキャッシュアドレスに格納する。まず、ホスト側内部バス転送リストが格納されていれば（１２０８）、ホスト入出力部１０６は、ＤＭＡ１０９によって転送リスト格納部１２９からホスト側内部バス転送リストを取得する（１２０９）。その後、キャッシュコントローラ１１１に対するライトコマンド（転送コマンド）をホスト側内部バス１１０に送出する（１２１０）。このライトコマンドは、キャッシュに記憶されているデータの転送を求める転送コマンドであって、転送リストの情報がＰＣＩアドレスとして含まれている。
【００８９】
一方、キャッシュコントローラ１１１は、ホスト入出力部１０６からライトコマンド（転送コマンド）を受信すると（１２１５）、受信したライトコマンド（転送コマンド）のホスト側内部バス転送アドレスからＬＡを取得し、ホスト情報保持部１１４に保持する（１２１６）。
【００９０】
一方、ホスト入出力部１０６がホスト側内部バス１１０にライトコマンド（転送コマンド）を送出（１２１０）した後、ＤＭＡ１０９は、ホスト側内部バス１１０に書き込みデータを送出する（１２１１）。
【００９１】
キャッシュコントローラ１１１は、ホスト入出力部１０６から書き込みデータを受信すると、ＬＡを生成し、そのデータに付加して（１２１８）、キャッシュ１２２にデータを送信する（１２１９）。本発明では、分割されたデータは、キャッシュ１２２の物理的に連続した領域に記憶されても、不連続な領域に記憶されてもよい。
【００９２】
また、ホスト入出力部１０６は、ホスト側内部バス１１０に書き込みデータを送出する（１２１１）。そして、データ転送が終了すると、ＭＰＵ１２５に割込信号を発行する（１２１２）。
【００９３】
ＭＰＵ１２５は、割込信号を受信すると（１２１３）、終了処理を行う（１２１４）。
【００９４】
このように、ディスクアレイライト時に分割されたデータを転送する際に、論理データブロックにデータ保証コードを付加して、システムとしての信頼性を向上させている。
【００９５】
なお、図示は省略するが、ＭＰＵ１２５は、その後、キャッシュ１２２に分割して記憶されたデータをディスク装置１４３に書き込むための転送リストを作成する。ディスク入出力部１３３は、この転送リストに従って、分割されたデータをキャッシュ１２２からディスク装置１４３に転送する。なお、この転送リストは、転送するすべてのディスク装置に対して作成する。
【００９６】
図１０は、本発明の第１の実施の形態のＬＡ生成・付加処理（図９のステップ１２１８）のフローチャートであり、ＬＡ付加プログラム１１３のＬＡ期待値生成サブプログラム１００２による処理を示す。
【００９７】
まず、ホスト入出力部１０６から受信したライトコマンド（転送コマンド）から書き込み対象のキャッシュアドレス（ADR）を取得する（１５０２）。
【００９８】
その後、ホスト入出力部１０６がキャッシュをアウトオブオーダアクセスするか否かを判定する（１５０３）。この判定は、ホスト入出力部識別プログラム１１５が、ホスト入出力部１０６がホスト１０１との通信に用いる通信プロトコルに基づいて行う。例えば、ホスト側内部バス１１０にファイバチャネルを用いている場合には、アウトオブオーダアクセスが生じないが、ｉＳＣＳＩを用いている場合には、アウトオブオーダアクセスが生じると判定する。
【００９９】
ステップ１５０３において、キャッシュに対するアウトオブオーダアクセスが生じないと判定したら、１ブロック分のデータを受信する毎に、ホスト情報保持部１１４に格納されている当該コマンドの先頭ブロックのＬＡ（９０２）に１ブロック分のアドレスを加算してＬＡを生成し（１５０４）、ステップ１５０８に進む。
【０１００】
一方、ステップ１５０３において、キャッシュに対するアウトオブオーダアクセスが生じると判定したら、ホスト入出力部１０６から転送される内部バスアドレス中の当該セグメントの先頭ブロックＬＡをセグメントＬＡ（LA_SEG）に設定する（１５０５）。このセグメントＬＡは、ホスト側内部バス転送リスト（図６）のセグメント情報７０３に設定される。
【０１０１】
そして、キャッシュアドレス（ADR）を含むセグメントの先頭キャッシュアドレスをセグメントアドレス（ADR_SEG）に設定する（１５０６）。具体的には、ADR_SEGは、ホスト側内部バス１１０におけるアドレス（ＰＣＩアドレス）をブロック長（５１２byte）で除算することによって求める。。
【０１０２】
そして、((ADR-ADR_SEG)/512)+LA_SEG によってＬＡ（NEW_LA）を算出する（１５０７）。なお、このとき、((ADR-ADR_SEG)/512)に剰余が生じれば、商のみを用いる。
【０１０３】
図１１は、NEW_LAの算出の説明図である。キャッシュアドレス（ADR）がセグメント１のブロック５中にある場合に、ブロック５の先頭アドレスをブロックアドレス（ADR_BLK）に設定し、セグメント１の先頭アドレスをセグメントアドレス（ADR_SEG）に設定し、セグメント１の先頭ブロックのＬＡをセグメントＬＡ（LA_SEG）に設定する。
【０１０４】
そして、当該セグメントの先頭ブロックからのブロック数 ((ADR-ADR_SEG)/512)+LA_SEG を、当該セグメントの先頭ブロックのＬＡに加算して、当該ブロックのＬＡ（ＬＡｎ＋５）を求める。
【０１０５】
NEW_LAを算出した後、キャッシュアドレスが５１２バイトのブロックの末尾アドレスであるか否かを判定する（１５０８）。キャッシュアドレスが５１２バイトのブロックの末尾アドレスであれば、ステップ１５０７で算出された NEW_LA を当該ブロックに対するＬＡとして、バッファ値設定サブプログラム１００１に転送する（１５０９）。
【０１０６】
図１２は、本発明の第１の実施の形態のディスクからキャッシュに読み出されたデータをホスト入出力部に転送する処理のシーケンス図である。
【０１０７】
ホスト１０１等において動作するアプリケーションプログラムからデータ読み出し要求が発行されると、ホスト入出力部１０６等はホストリードコマンドを受信する（１３０１）。そして、ホスト入出力部１０６等は、該コマンドの内容をメモリ１２６内のコマンド情報格納部１３０に転送し（１３０２）、ＭＰＵ１２５に転送リストを作成させるために、割込信号を発行してコマンドを受信したことを通知する（１３０３）。
【０１０８】
ＭＰＵ１２５は、割込信号を受信すると（１３０４）、コマンド情報格納部１３０に格納されているホストリードコマンドの内容を解析し、該コマンドから論理データブロックアドレスを抽出し、論理データブロックアドレスを物理データブロックアドレスへ変換する、ディスクアレイ特有のアドレス変換を行なう（１３０５）。そして、ＭＰＵ１２５は、変換された物理データブロックアドレスの全てからデータを読み出す転送コマンドを作成する（１３０６）。この転送コマンドは、コマンド情報格納部１３０に格納され、ホスト入出力部１０６（ＤＭＡ１０９）によって使用される。そして、論理ユニット番号と論理データブロックアドレスからＬＡを生成して、ホスト側ＬＡ情報格納部１２３にエントリを追加する。そして、読み出しが必要な全てのディスク装置に対応したホスト側内部バス転送リストを作成して、転送リスト格納部１２９に格納する（１３０７）。その後、ＭＰＵ１２５は、ホスト入出力部１０６に転送を起動させる。
【０１０９】
一方、ホスト入出力部１０６は、ＭＰＵ１２５によって転送が起動されると、転送リスト１２９を読み出して、リストの全エントリに対するリードデータを指定されたキャッシュアドレスに格納する。まず、ホスト側内部バス転送リストが格納されていれば（１３０８）、ホスト入出力部１０６は、ＤＭＡ１０９によって転送リスト格納部１２９からホスト側内部バス転送リストを取得する（１３０９）。その後、キャッシュコントローラ１１１に対するリードコマンドをホスト側内部バス１１０に送出する（１３１０）。このリードコマンドは、キャッシュに記憶されているデータの転送を求める転送コマンドであって、転送リストの情報がＰＣＩアドレスとして含まれている。
【０１１０】
一方、キャッシュコントローラ１１１は、ホスト入出力部１０６からリードコマンド（転送コマンド）を受信すると（１３１５）、受信したリードコマンド（転送コマンド）のホスト側内部バス転送アドレスからＬＡを取得し、ホスト情報保持部１１４に保持する（１３１６）。そして、キャッシュ１２２からデータを受信する（１３１７）。そして、受信したキャッシュデータに付与されたＬＡと、ホスト情報保持部１１４に保持されたデータを用いて生成されたＬＡとを比較して、受信したキャッシュデータのＬＡを検査する（１３１８）。
【０１１１】
ＬＡの検査が終了したら、受信したキャッシュデータからＬＡを削除して、論理データブロックのみにした後（１３１９）、キャッシュデータをホスト側内部バス１１０に送信する（１３２０）。
【０１１２】
ホスト入出力部１０６は、キャッシュデータを受信すると（１３１１）、ホストリードコマンドを送信したホストにデータを送信する。そして、データ転送が終了すると、ＭＰＵ１２５に割込信号を発行する（１３１２）。
【０１１３】
ＭＰＵ１２５は、割込信号受信すると（１３１３）、終了処理を行う（１３１４）。
【０１１４】
このように、ディスクアレイリード時に分割されたデータを転送する際に、論理データブロックにデータ保証コードを付加して、キャッシュ１２２の正常なアドレスからデータが読み出されたことを監視して、システムとしての信頼性を向上させている。
【０１１５】
なお、ディスク装置群１４０等に分割して格納されたデータは、ＭＰＵ１２５が作成した転送リストに基づいて、ディスク入出力部１３３等が発行するデータ転送コマンドに従って、ディスク入出力部１３３からキャッシュコントローラ１１１に送信され、キャッシュ１２２に書き込まれてキャッシュデータとなっている。
【０１１６】
図１３は、本発明の第１の実施の形態の期待値ＬＡ生成・ＬＡ検査処理（図１２のステップ１３１８）のフローチャートであり、ＬＡ検査プログラムＡ１１８のＬＡ期待値生成サブプログラム１００２による処理を示す。
【０１１７】
まず、リードコマンドから書き込み対象のキャッシュアドレス（ADR）を取得する（１６０２）。
【０１１８】
その後、ホスト入出力部１０６がキャッシュをアウトオブオーダアクセスするか否かを判定する（１６０３）。この判定は、ホスト入出力部識別プログラム１１５が、ホスト入出力部１０６がホスト１０１との通信に用いる通信プロトコルに基づいて行う。例えば、ホスト側内部バス１１０にファイバチャネルを用いている場合には、アウトオブオーダアクセスが生じないが、ｉＳＣＳＩを用いている場合には、アウトオブオーダアクセスが生じると判定される。
【０１１９】
ステップ１６０３において、キャッシュに対するアウトオブオーダアクセスが生じないと判定したら、１ブロック分のデータを受信する毎に、ホスト情報保持部１１４に格納されている当該コマンドの先頭ブロックのＬＡ（９０２）に１ブロック分のアドレスを加算してＬＡを生成し（１６０７）、ステップ１６０８に進む。
【０１２０】
一方、ステップ１６０３において、キャッシュに対するアウトオブオーダアクセスが生じると判定したら、ホスト入出力部１０６から転送される内部バスアドレス中の当該セグメントの先頭ブロックＬＡをセグメントＬＡ（LA_SEG）に設定する（１６０４）。
【０１２１】
そして、キャッシュアドレス（ADR）を含むセグメントの先頭キャッシュアドレスをセグメントアドレス（ADR_SEG）に設定する（１６０５）。
【０１２２】
そして、(ADR-ADR_SEG)/512)+LA_SEG をＬＡ（NEW_LA）に設定する（１６０６）。
【０１２３】
その後、キャッシュアドレスが５１２バイトのブロックの末尾アドレスであるか否かを判定する（１６０８）。キャッシュアドレスが５１２バイトのブロックの末尾アドレスであれば、バッファ値取得サブプログラム１１０１によってキャッシュ１２２から取得した５１２バイトのデータに付加されているＬＡを変数 REAL_LA に設定する（１６０９）。
【０１２４】
そして、ステップ１６０６で算出された NEW_LA と、ステップ１６０９で設定された REAL_LA とを比較する（１６１０）。そして、両者が一致すればＬＡは正常であると判定し（１６１１）、両者が一致しなければＬＡは不正であると判定して、ＭＰＵ１２５に対する割込によって異常を通知する（１６１２）。
【０１２５】
次に、本発明の第１の実施の形態の効果について説明する。
【０１２６】
図１４は、従来のインオーダーアクセス時のキャッシュアクセスの説明図である。すなわち、アウトオブオーダーアクセスが発生しない場合のキャッシュからホスト入出力部へのデータの転送を示す。
【０１２７】
なお、本図では、１ブロックが５１２バイトで、４ブロックが連続して１セグメント（２ｋバイト）の記憶領域が構成される場合を示すが、１セグメントが他の数のブロック（例えば、３２ブロックで１６ｋバイト）で構成されてもよい。また、８ブロック分のデータを転送する場合について示す。
【０１２８】
ホスト入出力部１０６がホスト１０１からデータ書き込み要求を受けると、その要求から抽出された書き込みデータの容量をキャッシュコントローラ１１１に送出する。
【０１２９】
キャッシュコントローラ１１１は、書き込むデータの容量を受信すると、キャッシュ１２２の管理情報を検索して、データを書き込むキャッシュ１２２の領域を確保して、その確保した領域のセグメント（アドレス）をＭＰＵ１２５に送信する。キャッシュ１２２の記憶領域はセグメント単位で管理されているので、ホストから送られるデータが格納されるキャッシュ１２２のアドレスはセグメント単位に不連続となる場合がある。
【０１３０】
そして、ホスト入出力部１０６は、ＭＰＵ１２５によって作成された転送リストに従ってホストが送信したデータをキャッシュコントローラ１１１に転送する。キャッシュコントローラ１１１は、データ保証コード（図中斜線で示す）を付してデータをキャッシュ１２２に格納する。
【０１３１】
また、ホスト入出力部１０６がホスト１０１からデータ読み出し要求を受けると、その要求から抽出された論理データブロックアドレスをキャッシュコントローラ１１１に送出する。
【０１３２】
キャッシュコントローラ１１１は、読み出すデータの論理データブロックアドレスを受信すると、キャッシュ１２２の管理情報を検索して、読み出すデータが記憶されているセグメント（アドレス）をＭＰＵ１２５に送信する。キャッシュ１２２の記憶領域はセグメント単位で管理されているので、ホストから指定される論理データブロックアドレスは連続していたとしても、データを読み出すキャッシュ１２２のアドレスはセグメント単位に不連続となる場合がある。
【０１３３】
そして、ホスト入出力部１０６は、ＭＰＵ１２５によって作成された転送リストに従ってキャッシュ１２２に記憶されたデータにアクセスし、キャッシュコントローラ１１１からホスト入出力部１０６にデータが転送される。キャッシュ１２２に格納されているデータにはデータ保証コード（図中斜線で示す）が付されている。本図に示すデータ転送時にはホスト入出力部が当該読み出し対象のデータが格納されたブロックをＬＢＡｎから順にＬＢＡｎ＋７まで順に読み出している。
【０１３４】
このように、ホスト１０１とホスト入出力部１０６の間の接続にファイバチャネルを用いる従来の構成では、ホスト入出力部１０６は論理データブロックアドレス順にデータを受け取る。よって、論理データブロックが複数続いて転送される場合でもブロックサイズ毎にＬＡを加算してＬＡの期待値を生成すれば、正しいＬＡを算出することができ、正確な検査をすることができる。
【０１３５】
図１５は、本発明の実施の形態のアウトオブオーダライト発生時のキャッシュアクセスの説明図である。
【０１３６】
ホスト入出力部１０６がホスト１０１からデータ読み出し要求を受けると、前述した従来のデータ転送（図１４）と同様に、ホスト入出力部１０６は、ＭＰＵ１２５によって作成された転送リストに従ってキャッシュ１２２に記憶されたデータにアクセスし、キャッシュコントローラ１１１からホスト入出力部１０６にデータが転送される。
【０１３７】
このとき、ホスト入出力部１０６は、ブロック単位でなくパケット単位でホスト１０１からデータを受信する。例えば、図示するように、３ブロックのデータでパケットが構成されてデータを転送する場合に、ホスト入出力部１０６がパケットを受信する順序は論理データブロックアドレスの順序と一致するとは限らない。
【０１３８】
すなわち、ホスト入出力部１０６が、パケット１、パケット０、パケット２の順でデータを受信した場合、ホスト入出力部１０６は受信したパケット順にキャッシュのデータを取得し、ホスト入出力部１０６によるアクセス順序はＬＢＡｎ＋３〜ＬＢＡｎ＋５、ＬＢＡｎ〜ＬＢＡｎ＋２、ＬＢＡｎ＋６〜ＬＢＡｎ＋７の順となる。このとき、複数の論理データブロックが連続して転送されるが、ブロックサイズ毎にＬＡを加算してＬＡの期待値を生成すると、カウンタ値とデータが書き込まれるアドレスが一致しないことから、正しいＬＡを算出することができず、誤ったＬＡが付されたデータがキャッシュ１２２に格納される。よって、データ読み出し時のＬＡ検査において、正常なデータを誤っていると判定してしまう。
【０１３９】
図１６は、本発明の実施の形態ののアウトオブオーダーリード時のキャッシュアクセスの説明図である。
【０１４０】
ホスト入出力部１０６がホスト１０１からデータ読み出し要求を受けると、前述した従来のデータ転送（図１４）と同様に、ホスト入出力部１０６は、ＭＰＵ１２５によって作成された転送リストに従ってキャッシュ１２２に記憶されたデータにアクセスし、キャッシュコントローラ１１１からホスト入出力部１０６にデータが転送される。
【０１４１】
このとき、ホスト入出力部１０６は、ブロック単位でなくパケット単位でネットワークを介して、ホスト１０１にデータを転送する。例えば、ホスト入出力部１０６が、パケット０、パケット１、パケット２の順にデータを送信したとき、パケット０がネットワーク上で消失すると（図中×で示す）、ホスト１０１はホスト入出力部１０６にパケット０の再送を要求する。このパケット０の再送要求は、キャッシュコントローラ１１１に送られる。
【０１４２】
すなわち、キャッシュコントローラ１１１は、ＬＢＡｎ〜ＬＢＡｎ＋７のデータを読み出した後、パケット０の再送要求に対応するＬＢＡｎ〜ＬＢＡｎ＋２のデータを再度読み出す。このとき、複数の論理データブロックが連続して読み出されるが、ブロックサイズ毎にＬＡを加算してＬＡの期待値を生成すると、カウンタ値とデータが読み出されるアドレスが一致しないことから、パケット０の再送要求に対応するＬＢＡｎ〜ＬＢＡｎ＋２のデータの読み出しの際に正しいＬＡを算出することができず、誤ったＬＡが付されたデータがキャッシュ１２２に格納される。よって、データ読み出し時のＬＡ検査において、正常なデータを誤っていると判定してしまう。
【０１４３】
しかし、第１の実施の形態によれば、図１５、図１６のようなアウトオブオーダアクセスが発生する場合であっても、当該転送コマンドに係る先頭アドレスからの当該セグメントのアドレスの差（ADR-ADR_SEG）を用いてＬＡ値を求めるので、正確なＬＡ値を付加することができ、データ読み出し時のＬＡ検査によって正常な判定をすることができる。
【０１４４】
次に、本発明の第２の実施の形態について説明する。第２の実施の形態は、前述した第１の実施の形態と、ＬＡ生成・付加処理（１２１８）及び期待値ＬＡ生成・検査処理（１３１８）の詳細が異なるが、他の構成は同じなので、それらの説明は省略する。
【０１４５】
図１７は、本発明の第２の実施の形態のＬＡ生成・付加処理（図９のステップ１２１８）のフローチャートである。
【０１４６】
まず、ライトコマンド（転送コマンド）から書き込み対象のキャッシュアドレス（ADR）を取得する（１９０２）。
【０１４７】
その後、ホスト入出力部１０６がキャッシュをアウトオブオーダアクセスするか否かを判定する（１９０３）。この判定は、前述した第１の実施の形態と同様に、ホスト入出力部１０６がホスト１０１との通信に用いる通信プロトコルに基づいて、ホスト入出力部識別プログラム１１５が行う。
【０１４８】
ステップ１９０３において、キャッシュに対するアウトオブオーダアクセスが生じないと判定したら、１ブロック分のデータを受信する毎に、ホスト情報保持部に格納されている当該コマンドの先頭ブロックのＬＡに１ブロック分のアドレスを加算してＬＡを生成して（１９０９）、ステップ１９１０に進む。
【０１４９】
一方、ステップ１９０３において、キャッシュに対するアウトオブオーダアクセスが生じると判定したら、ホスト情報保持部１１４から当該ライトコマンドの先頭ブロックが属するセグメントの先頭ブロックのＬＡ（LA_FIRST_SEG）を取得する（１９０４）。
【０１５０】
その後、ホスト入出力部１０６から転送される内部バスアドレス中の当該セグメントの通し番号（SEG_NUM）を取得する（１９０５）。このセグメントの通し番号は、第２の実施の形態では、ホスト側内部バス転送リスト（図６）のセグメント情報７０３に格納されている。
【０１５１】
そして、先頭セグメントＬＡ（LA_FIRST_SEG）に、セグメント内の最大ブロック数×セグメントの通し番号（SEG_NUM）を加算して、セグメントＬＡ（LA_SEG）に設定する（１９０６）。
【０１５２】
そして、キャッシュアドレス（ADR）を含むセグメントの先頭キャッシュアドレスをセグメントアドレス（ADR_SEG）に設定する（１９０７）。
【０１５３】
そして、((ADR-ADR_SEG)/512)+LA_SEG によってＬＡ（NEW_LA）を算出する（１９０８）。
【０１５４】
図１８は、NEW_LAの算出の説明図である。キャッシュアドレス（ADR）がセグメント１のブロック５中にある場合に、ブロック５の先頭アドレスをブロックアドレス（ADR_BLK）に設定し、セグメント１の先頭アドレスをセグメントアドレス（ADR_SEG）に設定し、セグメント０の先頭のブロック０のＬＡを先頭セグメントＬＡ（LA_FIRST_SEG）に設定し、先頭セグメント（セグメント０）からセグメントの通し番号（SEG_NUM）分進んだセグメント（セグメント１）の先頭のＬＡをセグメントＬＡ（LA_SEG）に設定する。
【０１５５】
そして、当該セグメントの先頭ブロックからのブロック数を、当該セグメントの先頭ブロックのＬＡに加算して、当該ブロックのＬＡ（ＬＡｎ＋５）を求める。
【０１５６】
NEW_LAを算出した後、キャッシュアドレスが５１２バイトのブロックの末尾アドレスであるか否かを判定する（１９１０）。キャッシュアドレスが５１２バイトのブロックの末尾アドレスであれば、ステップ１９０８で算出された NEW_LA を当該ブロックに対するＬＡとして、バッファ値設定サブプログラム１００１に転送する（１９１１）。
【０１５７】
図１９は、本発明の第２の実施の形態の期待値ＬＡ生成・検査処理（図１２のステップ１３１８）のフローチャートであり、ＬＡ検査プログラムＡ１１８のＬＡ期待値生成サブプログラム１００２による処理を示す。
【０１５８】
まず、リードコマンドから書き込み対象のキャッシュアドレス（ADR）を取得する（２００２）。
【０１５９】
その後、ホスト入出力部１０６がキャッシュをアウトオブオーダするか否かを判定する（２００３）。この判定は、前述した第１の実施の形態と同様に、ホスト入出力部１０６がホスト１０１との通信に用いる通信プロトコルに基づいて、ホスト入出力部識別プログラム１１５が行う。
【０１６０】
ステップ２００３において、キャッシュに対するアウトオブオーダアクセスが生じないと判定したら、１ブロック分のデータを受信する毎に、当該コマンドの先頭ブロックのＬＡに１ブロック分のアドレスを加算してＬＡを生成し（２０１０）、ステップ２０１１に進む。
【０１６１】
一方、ステップ２００３において、キャッシュに対するアウトオブオーダアクセスが生じると判定したら、ホスト情報保持部１１４から当該リードコマンドの先頭ブロックが属するセグメントの先頭ブロックのＬＡ（LA_FIRST_SEG）を取得する（２００４）。
【０１６２】
その後、ホスト入出力部１０６から転送される内部バスアドレス中の当該セグメントの通し番号（SEG_NUM）を取得する（２００５）。このセグメントの通し番号は、第２の実施の形態では、ホスト側内部バス転送リスト（図６）のセグメント情報７０３に格納されている。
【０１６３】
そして、先頭セグメントＬＡ（LA_FIRST_SEG）に、セグメント内の最大ブロック数×セグメントの通し番号（SEG_NUM）を加算して、セグメントＬＡ（LA_SEG）に設定する（２００６）。
【０１６４】
そして、キャッシュアドレス（ADR）を含むセグメントの先頭キャッシュアドレスをセグメントアドレス（ADR_SEG）に設定する（２００７）。
【０１６５】
そして、((ADR-ADR_SEG)/512)+LA_SEG をNEW_LAとして算出する（２００８）。
【０１６６】
その後、キャッシュアドレスが５１２バイトのブロックの末尾アドレスであるか否かを判定する（２００９）。キャッシュアドレスが５１２バイトのブロックの末尾アドレスであれば、バッファ値取得サブプログラム１１０１によってキャッシュ１２２から取得した５１２バイトのデータに付加されているＬＡを変数 REAL_LA に設定する（２０１１）。
【０１６７】
そして、ステップ１５０８で算出された NEW_LA と、ステップ１６１０で設定された REAL_LA とを比較する（２０１２）。そして、両者が一致すればＬＡは正常であると判定し（２０１３）、両者が一致しなければＬＡは不正であると判定して、ＭＰＵ１２５に対して割込によって異常を通知する（２０１４）。
【０１６８】
以上説明したように、第２の実施の形態によれば、アウトオブオーダアクセスが発生する場合であっても、当該データアクセス要求に係る先頭ブロックからのセグメントの通し番号（SEG_NUM）を用いてＬＡ値を求めるので、正確なＬＡ値を付加することができ、データ読み出し時のＬＡ検査によって正常な判定をすることができる。
【図面の簡単な説明】
【０１６９】
【図１】本発明の実施の形態のディスクアレイシステムの構成を示すブロック図である。
【図２】本発明の実施の形態のキャッシュのデータ格納フォーマットの説明図である。
【図３】本発明の第１の実施の形態のＬＡ付加プログラムの構成図である。
【図４】本発明の第１の実施の形態のＬＡ検査プログラムＡの構成図である。
【図５】本発明の第１の実施の形態のＬＡ検査プログラムＢの構成図である。
【図６】本発明の第１の実施の形態のホスト側内部バス転送リストの構成図である。
【図７】本発明の第１の実施の形態のホスト側ＬＡ情報格納部の構成図である。
【図８】本発明の第１の実施の形態のホスト情報保持部の構成図である。
【図９】本発明の第１の実施の形態のディスクアレイライト時のデータ転送処理のシーケンス図である。
【図１０】本発明の第１の実施の形態のＬＡ生成・付加処理のフローチャートである。
【図１１】本発明の第１の実施の形態のＬＡの算出の説明図である。
【図１２】本発明の第１の実施の形態のディスクアレイリード時のデータ転送処理のシーケンス図である。
【図１３】本発明の第１の実施の形態の期待値ＬＡ生成・ＬＡ検査処理のフローチャートである。
【図１４】従来のインオーダーリード／ライト時のキャッシュアクセスの説明図である。
【図１５】本発明の第１の実施の形態のアウトオブオーダーライト時のキャッシュアクセスの説明図である。
【図１６】本発明の第１の実施の形態のアウトオブオーダーリード時のキャッシュアクセスの説明図である。
【図１７】本発明の第２の実施の形態のＬＡ生成・付加処理のフローチャートである。
【図１８】本発明の第２の実施の形態のＬＡの算出の説明図である。
【図１９】本発明の第２の実施の形態の期待値ＬＡ生成・ＬＡ検査処理のフローチャートである。
【符号の説明】
【０１７０】
１０１、１０２、１０３  ホスト
１０４  バススイッチ
１０５  ディスクアレイ
１０６、１０７、１０８  ホスト入出力部
１０９、１３６  ＤＭＡ
１１１  キャッシュコントローラ
１１２  ホスト側内部バスバッファ
１１３  ＬＡ付加プログラム
１１４  ホスト情報保持部
１１５  ホスト入出力部識別プログラム
１１６  ディスク情報保持部
１１７  ＬＡ削除プログラム
１１８  ＬＡ検査プログラムＡ
１１９  キャッシュ制御プログラム
１２０  ＬＡ検査プログラムＢ
１２１  ディスク側内部バスバッファ
１２２  キャッシュ
１２３  ホスト側ＬＡ情報格納部
１２４  ディスク側ＬＡ情報格納部
１２５  ＭＰＵ
１２６  メモリ
１２７  ディスクアレイ制御プログラム
１２８  ＬＡ設定プログラム
１２９  転送リスト格納部
１３０  コマンド情報格納部
１３３、１３４、１３５  ディスク入出力部
１４０、１４１、１４２  ディスク装置群
１４３、１４４、１４５  ディスク装置
２０１、２０２、２０３  ＬＡ・ＬＲＣ部
２０４、２０５、２０６  論理データブロック
２０７、２０８、２０９  拡張データ
【図１】
2006040011.tif 000003
【図２】
2006040011.tif 000004
【図３】
2006040011.tif 000005
【図４】
2006040011.tif 000006
【図５】
2006040011.tif 000007
【図６】
2006040011.tif 000008
【図７】
2006040011.tif 000009
【図８】
2006040011.tif 000010
【図９】
2006040011.tif 000011
【図１０】
2006040011.tif 000012
【図１１】
2006040011.tif 000013
【図１２】
2006040011.tif 000014
【図１３】
2006040011.tif 000015
【図１４】
2006040011.tif 000016
【図１５】
2006040011.tif 000017
【図１６】
2006040011.tif 000018
【図１７】
2006040011.tif 000019
【図１８】
2006040011.tif 000020
【図１９】
2006040011.tif 000021