(57)【要約】      （修正有）【課題】複数の冗長化されたコントローラを備えたストレージシステムにおいて、それぞれのコントローラで先読み動作を行い性能が低下するという課題を解消する。【解決手段】コントローラ１０ａ、１０ｂは、先読み処理手段１０１ａ、１０１ｂとキャッシュメモリ１０３ａ、１０３ｂを備え、コントローラ１０ａの先読み処理手段はホストからの一連のリード要求の結果先読みを行う判定を行った時、他のコントローラ１０ｂで同一領域のデータが既に先読みされたか又はこれから先読みを行うデータなのか、他のコントローラの先読み処理手段に問い合わせ、他のコントローラに先読み対象のデータが存在しない場合、通常通り先読み処理を行い、他のコントローラのキャッシュメモリに既に先読み済みのデータが存在する場合、該データを先読みデータとして先読みテーブルに登録しておく。【選択図】図１
2008123363.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置のデータの一部を保持するキャッシュメモリを備えたコントローラであって、
データの先読みにあたり、先読み対象のデータが他のコントローラのキャッシュメモリに既に格納されているか否か判定し、他のコントローラのキャッシュメモリに格納されている場合には、前記他のコントローラのキャッシュメモリに格納されたデータを先読みデータとして先読みテーブルに登録しておく手段と、
ホストからのリード要求が、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送するように制御する手段と、
を備えている、ことを特徴とするコントローラ。
【請求項２】
前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと先読みデータ長と、先読みデータ格納先のキャッシュメモリがどのコントローラであるかが登録され、
前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して前記他のコントローラの先読みデータが利用可能とされる、ことを特徴とする請求項１記載のコントローラ。
【請求項３】
前記キャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用して行い、同一箇所のデータに対する記憶装置へのリード要求の競合を回避可能としてなる、ことを特徴とする請求項１記載のコントローラ。
【請求項４】
データの先読みの制御を行う先読み処理手段と、
記憶装置のデータの一部を保持するキャッシュメモリと、
他のコントローラと通信する通信手段と、
を備え、
前記記憶装置及びホストと接続するコントローラを、複数備え、
一のコントローラにおいて、データの先読みにあたり、前記一のコントローラの前記先読み処理手段は、先読み対象のデータが、他のコントローラのキャッシュメモリに保持されているか否かを、前記通信手段を介して、前記他のコントローラの先読み処理手段に対して問い合わせ、前記他のコントローラのキャッシュメモリに格納されている場合には、前記他のコントローラのキャッシュメモリに格納されたデータを先読みデータとして先読みテーブルに登録し、
前記一のコントローラにおいて、前記ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する、ことを特徴とするストレージシステム。
【請求項５】
前記一のコントローラの前記先読み処理手段は、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、
前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する、ことを特徴とする請求項４記載のストレージシステム。
【請求項６】
前記一のコントローラの前記先読み処理手段は、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う、ことを特徴とする請求項４記載のストレージシステム。
【請求項７】
前記一のコントローラの前記先読み処理手段は、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定し、
先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断し、
前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記通信手段を介して、前記他のコントローラの先読み処理手段に対して問い合わせを行う、ことを特徴とする請求項４記載のストレージシステム。
【請求項８】
前記一のコントローラの前記先読み処理手段は、
前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送し、
前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定し、
他のコントローラに存在すると判定されると、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行い、
前記データの引き取りの要求を受け取った前記他のコントローラの先読み処理手段は、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラの先読み処理手段に転送し、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す、ことを特徴とする請求項７記載のストレージシステム。
【請求項９】
前記他のコントローラの先読み処理手段は、前記データの引き取りの要求を受けた際、前記他のコントローラのキャッシュメモリに引き取り要求対象のデータが揃っていない場合であって、前記データが先読み中と判断されると、前記要求対象のデータが揃うまで待機し、データが揃ったのちに前記一のコントローラの先読み処理手段に転送する、ことを特徴とする請求項８記載のストレージシステム。
【請求項１０】
前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと先読み長と、データ格納先のキャッシュメモリがどのコントローラであるかが登録され、
前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して、他のコントローラの先読みデータが利用可能とされる、ことを特徴とする請求項４記載のストレージシステム。
【請求項１１】
前記一のコントローラにおける前記キャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用して行い、
複数の前記コントローラによる、同一箇所のデータに対する、前記記憶装置へのリード要求の競合を回避可能としてなる、ことを特徴とする請求項４記載のストレージシステム。
【請求項１２】
複数のコントローラのそれぞれがキャッシュメモリを備えたストレージシステムのキャッシュメモリの制御方法であって、
一のコントローラは、先読み対象のデータを記憶装置からキャッシュメモリに先読みするにあたり、先読み対象のデータが他のコントローラに格納されているか判定し、他のコントローラに格納されていると判別された場合には、前記一のコントローラでは先読みは実行せず、前記他のコントローラで格納されたデータを先読みデータとして先読みテーブルに登録しておく工程と、
前記一のコントローラは、ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する工程と、
を含む、ことを特徴とするキャッシュメモリの制御方法。
【請求項１３】
前記一のコントローラは、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する、ことを特徴とする請求項１２記載のキャッシュメモリの制御方法。
【請求項１４】
前記一のコントローラは、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、
前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う、ことを特徴とする請求項１２記載のキャッシュメモリの制御方法。
【請求項１５】
前記一のコントローラにおいて、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定する工程と、
先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断する工程と、
前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記他のコントローラの先読み処理手段に対して問い合わせを行う工程と、
を含む、ことを特徴とする請求項１２記載のキャッシュメモリの制御方法。
【請求項１６】
前記一のコントローラは、前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送する工程と、
前記一のコントローラは、前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定する工程と、
他のコントローラに存在すると判定されると、前記一のコントローラは、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行う工程と、
前記データの引き取りの要求を受け取った前記他のコントローラは、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラに転送する工程と、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す工程と、
を含む、ことを特徴とする請求項１２記載のキャッシュメモリの制御方法。
【請求項１７】
前記他のコントローラは、前記データの引き取りの要求を受けた際に、前記他のコントローラのキャッシュメモリに引き取り要求対象のデータが揃っていない場合であって、前記データが先読み中と判断されると、前記要求対象のデータが揃うまで待機し、データが揃ったのちに、前記一のコントローラに転送する、ことを特徴とする請求項１６記載のキャッシュメモリの制御方法。
【請求項１８】
前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと、先読み長と、データ格納先のキャッシュメモリがどのコントローラであるかが登録され、
前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して、他のコントローラの先読みデータが利用可能とされる、ことを特徴とする請求項１２記載のキャッシュメモリの制御方法。
【請求項１９】
複数のコントローラのそれぞれがキャッシュメモリを備えたストレージシステムのキャッシュメモリの制御方法であって、
一のコントローラにおけるキャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用して行い、
複数の前記コントローラによる、同一箇所のデータに対する、前記記憶装置へのリード要求の競合を回避可能としてなる、ことを特徴とするキャッシュメモリの制御方法。
【請求項２０】
記憶装置からのデータをキャッシュメモリに先読みするコントローラに、
先読み対象のデータを前記記憶装置からキャッシュメモリに先読みするにあたり、先読み対象のデータが他のコントローラに格納されているか判定し、他のコントローラに格納されていると判別された場合には、前記一のコントローラでは先読みは実行せず、前記他のコントローラで格納されたデータを先読みデータとして先読みテーブルに登録しておく処理と、
前記一のコントローラは、ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する処理と、
ホストからのリード要求が、前記他のコントローラのキャッシュメモリに格納され、前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラに格納されている前記データを、前記他のコントローラから受け取って前記ホストへ転送する処理と、
を実行させるプログラム。
【請求項２１】
請求項２０記載のプログラムにおいて、
前記ホストからのリード要求の結果、先読みを行う判定を行った時、前記他のコントローラで先読み対象のデータが既に先読みされているか、又は、前記他のコントローラでこれから先読みを行うデータであるかを、前記他のコントローラに対して問い合わせ、前記他のコントローラから得た問い合わせ結果を記憶保持する処理と、
前記ホストからのリード要求のデータが、前記一のコントローラに先読みされていない場合、前記他のコントローラで、既に先読み済みのデータであれば、前記他のコントローラのキャッシュメモリに先読みされたデータを受け取って前記ホストに返す処理と、
を前記コントローラに実行させるプログラム。
【請求項２２】
請求項２０記載のプログラムにおいて、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する処理を、前記コントローラに実行させるプログラム。
【請求項２３】
請求項２０記載のプログラムにおいて、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、
前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う処理を、前記コントローラに実行させるプログラム。
【請求項２４】
請求項２０記載のプログラムにおいて、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定する処理と、
先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断する処理と、
前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記他のコントローラの先読み処理手段に対して問い合わせを行う処理と、
を前記コントローラに実行させるプログラム。
【請求項２５】
請求項２０記載のプログラムにおいて、
前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送する処理と、
前記一のコントローラは、前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定する処理と、
他のコントローラに存在すると判定されると、前記一のコントローラは、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行う処理と、
前記データの引き取りの要求を受け取った前記他のコントローラは、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラに転送する処理と、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す処理と、
を、前記コントローラに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関し、特にキャッシュメモリを持つコントローラを複数備えたストレージシステム、及びそのキャッシュの制御方法とコンピュータプログラムに関する。
【背景技術】
【０００２】
磁気ディスク装置アレイ装置に代表されるストレージシステムにおいて、磁気ディスク装置などのストレージ装置のアクセス速度の遅さを緩衝し、単位時間当りの入出力数やスループットなどの性能向上のために、キャッシュメモリが備えられている。
【０００３】
磁気ディスク装置アレイ装置の全容量の中でアクセス頻度の高い領域は限られていることから、アクセス頻度の高い領域のデータをキャッシュメモリ上に一時保存しておくことにより、磁気ディスク装置からのリードなしに、キャッシュメモリに保持されるデータをアクセスすることで、ホストコンピュータへの応答の高速化を図ることができる。
【０００４】
ストレージのキャッシュ処理は、それがホストコンピュータからのリード要求であれば、該リード要求のデータが、キャッシュメモリ上に存在するか否か検索を行う。検索の結果、該リード要求のデータがキャッシュメモリ上にあれば（キャッシュヒット時）、ホストコンピュータに、キャッシュメモリ上の該当するデータを返す。
【０００５】
該リード要求のデータが無ければ（キャッシュミスヒット時）、磁気ディスク装置から該リード要求に相当するデータを読み込み、キャッシュメモリ上に書き込むと同時に、読み込んだデータをホストコンピュータに返す。
【０００６】
キャッシュメモリを分散して配置するストレージシステムでは、ライトコマンドにより、ストレージシステムに書き込まれるライトデータは、コントローラの故障（例えばキャッシュメモリ故障）に備え、異なるコントローラにデータの冗長化（二重化）を行う。また、リード要求の場合には、磁気ディスク装置に同じデータが存在することから、冗長化の必要は無く、コマンドレスポンス改善を図るために、リード要求を受けたコントローラのキャッシュのみにデータを保持する。
【０００７】
さらに、リード要求のレスポンスを改善するために、連続したアドレスに続けてリード要求が行われると、予め予測した領域のデータを磁気ディスク装置から読み出しキャッシュメモリに予め格納しておく。これは、「先読み」と呼ばれている。次にホストコンピュータから来るリード要求が予測した範囲であれば、磁気ディスク装置からのリードなしに、キャッシュメモリ上のデータをホストコンピュータに返すことで、レスポンスを大幅に改善している。
【０００８】
このようなリードのデータの先読みキャッシュ制御を行うストレージに関する刊行物として、後記特許文献１の記載が参照される。
【０００９】
ストレージシステムは、磁気ディスク装置の応答性能を見かけ上改善するために、コントローラ上にキャッシュメモリを搭載しており、その動作は、ストレージに対するライトであれば、ストレージの上位に接続されたホスト（上位装置）からのデータをキャッシュメモリ上にライトを行った時点で、ライト動作を完了とする（ライト要求の応答をホストに返す）ことで、応答性能を改善する。
【００１０】
ライトキャッシュに書き込まれたデータは、例えば、
・ライトキャッシュが閾値を超えた場合、又は、
・ライトキャッシュに格納されてから一定時間経過した後、
磁気ディスク装置に書き込まれる。
【００１１】
また、ストレージに対するリードの場合、
・磁気ディスク装置から読み込んだデータをキャッシュメモリに残すことで、同一箇所のリードが行われたときの応答性能を改善するか、又は、
・リードが予想される箇所のデータを予めキャッシュに読み込むことで応答性能を改善する。
【００１２】
【特許文献１】特開２００３−３３７７２２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
前記したように、従来のストレージシステムにおいては、コントローラ上にキャッシュメモリを搭載し、磁気ディスク装置の応答性能の見かけ上の改善を図っている。また、キャッシュメモリを分散して配置する従来のストレージシステムにおいては、ライトコマンドにより、ストレージシステムに書き込まれるライトデータは、異なるコントローラにデータの冗長化（二重化）を行い、リード要求の場合は、該要求を受けたコントローラが磁気ディスク装置からのデータを読み出し、コントローラ上のキャッシュにデータを書き込んだ上で、ホストにデータの転送を行う。さらに、リード要求の場合は、先読み処理が行われる。
【００１４】
このような従来のストレージシステムにおいて、ホストがロードバランスと呼ばれる動作を行うと問題が発生する。ここで、ロードバランスとは、ホストとストレージシステム間のパスの負荷軽減（ネットワークそのものや、ストレージシステム側のコントローラ等が対象）の為に、複数のパスにコマンドを振り分けて発行する機能のことである。
【００１５】
前述の従来のストレージシステムにおいて、ホストが冗長化されたコントローラにまたがりロードバランス機能を使用し、ホストが連続したリード要求を順次それぞれのコントローラに発行すると、それぞれのコントローラではアドレスの一部は飛んでいるが、シーケンシャルなリード要求になる。
【００１６】
この場合、先にこれらのデータを磁気ディスク装置から読み込むことで、先読みの効果が得られるため、先読み動作を行うことが通常行われている。
【００１７】
しかしながら、それぞれのコントローラで先読み動作を個別に行っており、磁気ディスク装置上の同一アドレスの先読みのリードを、双方のコントローラが行うこととなる。
【００１８】
その結果、それぞれのコントローラからの磁気ディスク装置アクセス要求が二重に実行され、性能（スループット）が低下するという課題がある。
【００１９】
したがって、本発明は、上記課題の認識に基づき創案されたものであって、その目的は、複数のコントローラにキャッシュメモリを持つシステムの性能を改善するシステムと方法並びにコンピュータ・プログラムを提供することにある。
【課題を解決するための手段】
【００２０】
本発明は、複数のコントローラにキャッシュメモリを持つシステムにおいて、それぞれのコントローラに対して発行されるホストからのリード要求の結果行われる記憶装置（磁気ディスク装置）に対する先読み動作を行う際に、コントローラ間で同一の記憶装置（磁気ディスク装置）、同一アドレスに対する重複した先読み要求を避けることで、性能を改善する。
【００２１】
本発明において、コントローラは、先読み処理手段と先読みを行ったデータを格納するキャッシュメモリを備え、先読み処理手段では、ホストからの一連のリード要求の結果、先読みを行う判定を行った時、他のコントローラで同一領域のデータが既に先読みされたか、あるいはこれから先読みを行うデータなのか、他のコントローラの先読み処理手段に問い合わせ、無ければ先読み処理を行い、記憶装置からのデータをキャッシュメモリに格納する。他のコントローラで、既に先読み済みのデータがあれば、そのデータを該コントローラのキャッシュメモリからホストに返す。これから先読みを行うデータであれば、データが揃うまで待ち、その後にそのデータをホストに返す。かかる構成としたことで、各コントローラでの無駄な先読み動作を防止することが可能になり、磁気ディスク装置アクセス競合による性能劣化が防止される。
【００２２】
本発明に係るコントローラは、記憶装置のデータの一部を保持するキャッシュメモリを備え、データの先読みにあたり、先読み対象のデータが他のコントローラのキャッシュメモリに既に格納されているか否か判定し、他のコントローラのキャッシュメモリに格納されている場合には、前記他のコントローラのキャッシュメモリに格納されたデータを先読みデータとして先読みテーブルに登録しておく手段と、
ホストからのリード要求が、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送するように制御する手段と、を備えている。
【００２３】
本発明に係るコントローラにおいて、前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと先読み長と、格納先とが登録されており、前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して、他のコントローラの先読みデータが利用可能とされる。
【００２４】
本発明に係るコントローラにおいて、前記キャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用し、同一箇所のデータによる記憶装置へのリード要求の競合を回避可能としている。
【００２５】
本発明に係るストレージシステムは、データの先読みの制御を行う先読み処理手段と、
記憶装置のデータの一部を保持するキャッシュメモリと、
他のコントローラと通信する通信手段と、
を備え、前記記憶装置及びホストと接続するコントローラを、複数備え、
一のコントローラにおいて、データの先読みにあたり、前記一のコントローラの前記先読み処理手段は、先読み対象のデータが、他のコントローラのキャッシュメモリに保持されているか否かを、前記通信手段を介して、前記他のコントローラの先読み処理手段に対して問い合わせ、前記他のコントローラのキャッシュメモリに格納されている場合には、前記他のコントローラのキャッシュメモリに格納されたデータを先読みデータとして先読みテーブルに登録し、
前記一のコントローラにおいて、前記ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する。
【００２６】
本発明において、前記一のコントローラの前記先読み処理手段は、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、
前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する。
【００２７】
本発明において、前記一のコントローラの前記先読み処理手段は、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う。
【００２８】
本発明において、前記一のコントローラの前記先読み処理手段は、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定し、先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断し、前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記通信手段を介して、前記他のコントローラの先読み処理手段に対して問い合わせを行う。
【００２９】
本発明において、前記一のコントローラの前記先読み処理手段は、
前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送し、
前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定し、
他のコントローラに存在すると判定されると、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行い、
前記データの引き取りの要求を受け取った前記他のコントローラの先読み処理手段は、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラの先読み処理手段に転送し、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す。
【００３０】
本発明において、前記他のコントローラの先読み処理手段は、前記データの引き取りの要求を受け、前記他のコントローラのキャッシュメモリに引き取り要求対象のデータが揃っていない場合であって、前記データが先読み中と判断されると、前記要求対象のデータが揃うまで待機し、データが揃ったのちに、前記一のコントローラの先読み処理手段に転送する構成としてもよい。
【００３１】
本発明において、前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと、先読み長と、データ格納先のキャッシュメモリがどのコントローラであるかが登録され、前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して、他のコントローラの先読みデータが利用可能とされる。
【００３２】
本発明において、前記一のコントローラにおける前記キャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用して行い、複数の前記コントローラによる、同一箇所のデータによる前記記憶装置へのリード要求の競合を回避可能としている。
【００３３】
本発明に係る方法は、複数のコントローラのそれぞれがキャッシュメモリを備えたストレージシステムのキャッシュメモリの制御方法であって、
一のコントローラは、先読み対象のデータを記憶装置からキャッシュメモリに先読みするにあたり、先読み対象のデータが他のコントローラに格納されているか判定し、他のコントローラに格納されていると判別された場合には、前記一のコントローラでは先読みは実行せず、前記他のコントローラで格納されたデータを先読みデータとして先読みテーブルに登録しておく工程と、
前記一のコントローラは、ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する工程と、を含む。
【００３４】
本発明に係る方法において、前記一のコントローラは、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する。
【００３５】
本発明に係る方法において、前記一のコントローラは、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、
前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う。
【００３６】
本発明に係る方法において、前記一のコントローラにおいて、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定する工程と
先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断する工程と、
前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記他のコントローラの先読み処理手段に対して問い合わせを行う工程と、を含む。
【００３７】
本発明に係る方法において、
前記一のコントローラは、前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送する工程と、
前記一のコントローラは、前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定する工程と、
他のコントローラに存在すると判定されると、前記一のコントローラは、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行う工程と、
前記データの引き取りの要求を受け取った前記他のコントローラは、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラに転送する工程と、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す工程と、を含む。
【００３８】
本発明に係る方法において、前記他のコントローラは、前記データの引き取りの要求を受け、前記他のコントローラのキャッシュメモリに引き取り要求対象のデータが揃っていない場合であって、前記データが先読み中と判断されると、前記要求対象のデータが揃うまで待機し、データが揃ったのちに、前記一のコントローラに転送する。
【００３９】
本発明に係る方法において、前記先読みテーブルには、前記先読みデータの情報として、先読みの開始アドレスと、先読み長と、データ格納先のキャッシュメモリがどのコントローラであるかが登録され、前記先読みテーブルに登録された先読み範囲で、前記ホストからのリード要求がヒットする可能性がある間、前記リード要求に対して、他のコントローラの先読みデータが利用可能とされる。
【００４０】
本発明に係る方法において、一のコントローラにおけるキャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる他のコントローラのキャッシュメモリのデータを利用して行い、複数の前記コントローラによる、同一箇所のデータによる前記記憶装置へのリード要求の競合を回避可能としている。
【００４１】
本発明に係るコンピュータプログラムは、
先読み対象のデータを前記記憶装置からキャッシュメモリに先読みするにあたり、先読み対象のデータが他のコントローラに格納されているか判定し、他のコントローラに格納されていると判別された場合には、前記一のコントローラでは先読みは実行せず、前記他のコントローラで格納されたデータを先読みデータとして先読みテーブルに登録しておく処理と、
前記一のコントローラは、ホストからのリード要求のデータが、前記一のコントローラのキャッシュメモリに先読みされていない場合であって、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する処理と、
ホストからのリード要求が、前記他のコントローラのキャッシュメモリに格納され、前記先読みデータとして登録されたデータに該当する場合、前記他のコントローラに格納されている前記データを、前記他のコントローラから受け取って前記ホストへ転送する処理と、を実行させるプログラムよりなる。
【００４２】
本発明に係るプログラムにおいて、
前記ホストからのリード要求の結果、先読みを行う判定を行った時、前記他のコントローラで先読み対象のデータが既に先読みされているか、又は、前記他のコントローラでこれから先読みを行うデータであるかを、前記他のコントローラに対して問い合わせ、前記他のコントローラから得た問い合わせ結果を記憶保持する処理と、
前記ホストからのリード要求のデータが、前記一のコントローラに先読みされていない場合、前記他のコントローラで、既に先読み済みのデータであれば、前記他のコントローラのキャッシュメモリに先読みされたデータを受け取って前記ホストに返す処理と、を、前記コントローラに実行させるプログラムよりなる。
【００４３】
本発明に係るプログラムにおいて、
前記先読み対象のデータが、前記他のコントローラのキャッシュメモリに既に先読みされている場合、及び、
前記他のコントローラで先読み中の場合には、前記他のコントローラで先読みが終わるまで待ち該先読みが終了した後に、前記先読みテーブルに、前記先読み対象のデータが前記他のコントローラに先読みされている旨を登録する処理を、前記コントローラに実行させるプログラムよりなる。
【００４４】
本発明に係るプログラムにおいて、
前記先読み対象のデータが、前記他のコントローラでは先読みされていず、前記他のコントローラでこれから先読みを行うデータでもない場合には、
前記記憶装置から前記一のコントローラのキャッシュメモリにデータの先読みを行う処理を、前記コントローラに実行させるプログラムよりなる。
【００４５】
本発明に係るプログラムにおいて、
前記ホストからのリード要求に従い、先読みを行うかどうかを判定する処理と
先読みを行うと判定した際に、前記先読みテーブルに先読み対象のデータが登録されているか判断する処理と、
前記先読みテーブルに前記先読み対象のデータが登録されていない場合に、前記他のコントローラのキャッシュメモリに保持されているか否かを、前記他のコントローラの先読み処理手段に対して問い合わせを行う処理とを、前記コントローラに実行させるプログラムよりなる。
【００４６】
本発明に係るプログラムにおいて、
前記ホストからのリード要求に対して、前記リード要求のデータが前記一のコントローラのキャッシュメモリに存在するか判定し、存在する場合、前記一のコントローラのキャッシュメモリのデータを、前記ホストに転送する処理と、
前記一のコントローラは、前記リード要求のデータが前記一のコントローラの前記キャッシュメモリに存在しない場合には、前記一のコントローラの前記先読みテーブルを参照して、他のコントローラで先読みされているデータであるか否か判定する処理と、
他のコントローラに存在すると判定されると、前記一のコントローラは、前記先読みテーブルに記録された他のコントローラに対して、データの引き取りの要求の通知を行う処理と、
前記データの引き取りの要求を受け取った前記他のコントローラは、前記他のコントローラのキャッシュメモリに存在するデータを、前記一のコントローラに転送する処理と、
前記一のコントローラは、前記他のコントローラから転送された前記データを、前記ホストに対して、前記リード要求に対する応答として返す処理とを、前記コントローラに実行させるプログラムよりなる。
【発明の効果】
【００４７】
本発明によれば、複数のコントローラにキャッシュメモリを持つシステムの性能を改善することができる。その理由は、本発明においては、ホストから、異なるコントローラに対して、アドレス範囲が同一の連続したリード要求が発生したとき、最初に先読みを行ったコントローラのみが先読みを行い、残りのコントローラは、該コントローラの先読みデータを利用することで、重複する記憶装置に対するアクセスを防止することにより、システムの性能低下を回避しているためである。
【発明を実施するための最良の形態】
【００４８】
次に、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
【００４９】
本発明において、コントローラは、先読み処理手段と、先読みを行ったデータを格納するキャッシュメモリを備え、先読み処理手段は、ホストからの一連のリード要求の結果先読みを行う判定を行った時、他のコントローラで同一領域のデータが既に先読みされたか、又は、これから先読みを行うデータであるのかを、他のコントローラの先読み処理手段に問い合わせ、他のコントローラに先読み対象のデータが存在しない場合には、通常通り、先読み処理を行い、記憶装置からのデータをキャッシュメモリに格納する。一方、他のコントローラのキャッシュメモリに既に先読みされたデータが存在する場合、該他のコントローラに先読みされたデータを、先読みデータとして先読みテーブルに登録しておき、ホストからのリード要求のデータが、前記先読みテーブルに前記先読みデータとして登録されたデータに該当する場合、他のコントローラのキャッシュメモリに格納されているデータを前記ホストへ転送する。また、他のコントローラにおいて、これから先読みを行うデータであれば、データが揃うまで待ち、その後に、そのデータをホストに返す。各コントローラでの無駄な先読み動作を防止することが可能になり、ディスクアクセス競合による性能劣化が防止される。
【００５０】
図１は、本発明の一実施形態のシステムの構成例を示す図である。図１を参照すると、本発明の一実施の形態において、コントローラ１０ａは、ホスト要求処理手段１００ａと、先読み処理手段１０１ａと、通信手段１０２ａと、キャッシュメモリ１０３ａと、記憶装置制御手段１０４ａを備えている。記憶装置１０５ａが、コントローラ１０ａに接続されている。
【００５１】
ホスト要求処理手段１００ａは、不図示のホストからの要求やデータの送受信を行う。
【００５２】
先読み処理手段１０１ａは、ホスト要求処理手段１００ａで受け取ったリード要求に対して、
・先読みを行うかどうかの判定、
・リード要求のデータがキャッシュメモリ上に存在するか否かの判定、
・リード要求のデータが他のコントローラに存在するか否か先読みテーブルを用いて判定する。
【００５３】
図２は、先読み処理手段１０１ａ内に含まれる先読みテーブルの内容の一例を示す図である。この先読みテーブルは、各コントローラの先読み処理手段毎に備えている。先読み処理手段１０１ａが具備する先読みテーブルを２０１ａで表し、先読み処理手段１０１ｂであれば、先読みテーブルを２０２ｂと表す。
【００５４】
図２に示すように、先読みテーブルは、１エントリあたり、先読み開始アドレス２０２ａと、先読み長２０３ａと、データ格納先のコントローラ２０４ａの３つの項目（欄）の１セットを含み、該エントリを、複数有する。
【００５５】
なお、図１には、コントローラ１０ａ、コントローラ１０ｂ、コントローラ１０ｃ、コントローラ１０ｄの４つのコントローラが示されているが、本発明は、かかる構成に限定されず、コントローラの個数は２つ以上の任意の数であってよい。
【００５６】
先読み処理手段１０１ａは、
・ホスト要求処理手段１００ａで受け取った過去のアクセス要求と、
・今回受け取ったリード要求と、
から、現時点で、次にホストからリード要求が来ると予測されるリード要求を導出し、そのデータを、前もって、記憶装置から読み込む、先読み動作を行うべきか否かを判断する。
【００５７】
また、通信手段１０２ａは、先読みに先立ち、領域のデータが他のコントローラで先読みされているかどうか問い合わせのための通信を行う。
【００５８】
記憶装置制御手段１０４ａは、ホスト要求処理手段１００ａで受け取ったリード要求が、先読み処理手段１０１ａでキャッシュメモリ１０３ａに存在しないと判定されたときに、記憶装置１０５ａから、データを読み込む。
【００５９】
記憶装置１０５ａは、先読みを行うべきデータが保存されている。キャッシュメモリ１０３ａには、先読みのデータが格納される。
【００６０】
他のコントローラ１０ｂ〜１０ｄも、コントローラ１０ａと同一の構成を持ち、それぞれの通信手段により相互接続網２０を介して相互に接続される。相互接続網２０は、バス接続、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）であってもよく、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）網等であってもよい。
【００６１】
ホスト要求処理手段１００ａで先読みを行うと判断した場合には、通信手段１０２ａを用いて、他のコントローラに対して、先読み処理手段１０１ａで判定した先読み対象のアドレスが存在するか、又は先読みでこれから読み込まれるものか問い合わせを行う。
【００６２】
コントローラ１０ｂの通信手段１０２ｂが、コントローラ１０ａの通信手段１０２ａから、上記問い合わせを受け取ると、
通信手段１０２ｂは、先読み処理手段１０１ｂに対して、
・先読み対象のアドレスのデータがキャッシュメモリ１０３ｂに存在するか否か、又は、
・先読み処理手段１０１ｂにより、記憶装置から先読み中であるか否か、
を判定する。
【００６３】
上記判定の結果、先読み対象のデータが、
・先読み対象のアドレスのデータがキャッシュメモリ１０３ｂに存在するか、又は、
・先読み中である場合、
コントローラ１０ｂは、通信手段１０２ｂと、通信手段１０２ａを介し、コントローラ１０ａの先読み処理手段１０１ａに、判定結果を通知する。
【００６４】
先読み処理手段１０１ａは、自身が判定した先読み対象のデータが、キャッシュメモリ１０３ｂに格納されていることを、図２の先読みテーブル２０１ａに記録する。
【００６５】
判定の結果、先読み対象のデータが、
・コントローラ１０ｂのキャッシュメモリ１０３ｂに存在せず（キャッシュミスヒット）、且つ、
・コントローラ１０ｂで現在先読み中のデータでもない場合、
コントローラ１０ａの先読み処理手段１０１ａは、先読み対象のデータを、記憶装置１０５ａから読み込み、キャッシュメモリ１０３ａに格納する。
【００６６】
これらの先読み処理の動作と併せて、ホスト要求処理手段１００ａで受けたリード要求に対する処理も行われる。
【００６７】
先読み処理手段１０１ａは、ホスト要求処理手段１００ａで受信したリード要求のアドレスがキャッシュメモリ１０３ａに存在するか判定する。
【００６８】
リード要求のアドレスのデータがキャッシュメモリ１０３ａに存在する場合、キャッシュメモリ１０３ａのデータを、ホスト要求手段１００ａを介して、ホストに転送した後、リード要求を終了する。
【００６９】
リード要求のアドレスのデータが、コントローラ１０ａのキャッシュメモリ１０３ａ上に存在しない場合には、先読みテーブル２０１ａを参照し、他のコントローラのキャシュメモリに先読み等で存在するデータであるか判定する。
【００７０】
ここで、リード要求のデータが、他のコントローラにおいて先読み等で存在すると判定されると、先読みテーブルに記録された、該データの存在するコントローラに対して、データの引き取りの要求の通知を、通信手段１０２ａを介して行う。なお、他のコントローラにおいて、リード要求のデータは、先読み以外で格納されていても、該データの存在するコントローラに対して、データの引き取りの要求の通知を、通信手段１０２ａを介して行う。
【００７１】
例えば、このコントローラがコントローラ１０ｂであるとすると、該要求を受け取ったコントローラ１０ｂの通信手段１０２ｂは、先読み処理手段１０１ｂに対して、キャッシュメモリ１０３ｂに存在するデータを、通信手段１０２ｂ、通信手段１０２ａを経由して転送し、コントローラ１０ａのホスト要求処理手段１００ａを通じて、ホストに転送した後、該リード要求を終了する。
【００７２】
図３は、本実施の形態の動作の一例を説明するフローチャートである。図１、図２、及び図３を参照して、本実施の形態の全体の動作について詳細に説明する。
【００７３】
ホストから発行されたリード要求は、ホスト要求処理手段１００ａによって受信される（ステップＳ１００）。
【００７４】
先読み処理手段１０１ａは、ホスト要求処理手段１００ａで受け取った過去のアクセス要求と、今受け取ったリード要求から、次のリード要求を予測し、先読みすべきかどうかを判断する（ステップＳ１０１）。
【００７５】
ホスト要求処理手段１００ａで先読みを行わないと判断した時には（ステップＳ１０２のＮＯ分岐）、そのまま処理を終了する。
【００７６】
また、ホスト要求処理手段１００ａで先読みを行うと判断した時には（ステップＳ１０２のＹＥＳ分岐）、通信手段１０２ａを用いて、他のコントローラに先読み処理手段１０１ａで判定した先読み対象のデータが存在するか、他のコントローラに問い合わせを行う（ステップ１０３）。
【００７７】
該通信は、それぞれコントローラの通信手段１０２ｂ、１０２ｃ、１０２ｄのそれぞれで受け取る（ステップＳ１０７）。
【００７８】
本実施の形態では、コントローラ１０ａ、コントローラ１０ｂ、コントローラ１０ｃ、コントローラ１０ｄの４つのコントローラから成るシステムで説明するが、このコントローラは２つ以上の任意の数で構成するものとする。
【００７９】
コントローラ１０ｂの通信手段１０２ｂが該問い合わせを受け取ると（ステップＳ１０７）、通信手段１０２ｂは、先読み処理手段１０１ｂに、該先読み対象のアドレスのデータが現在先読み中であるか判定を指示する（ステップＳ１０８）。
【００８０】
コントローラ１０ｂの先読み処理手段１０１ｂは、先読み中であると判定された場合（ステップＳ１０８のＹＥＳ分岐）、先読みが完了するまで待つ（ステップＳ１０９）。
【００８１】
その後、コントローラ１０ｂの先読み処理手段１０１ｂは、通信手段１０２ｂに対し、先読みデータが存在する旨を示す情報をコントローラ１０ａの通信手段１０２ａに対して送信する（ステップＳ１１２）。
【００８２】
また、コントローラ１０ｂにおいて先読み中を行っていないと判断されると（ステップＳ１０８のＮＯ分岐）、コントローラ１０ａから受信した先読みデータ有無の問い合わせされたデータが、既に先読みを行いキャッシュメモリ１０３ｂに存在するものか否かを、判定する（ステップＳ１１０）。
【００８３】
その結果、コントローラ１０ｂのキャッシュメモリ１０３ｂに存在すれば（ステップＳ１１０のＹＥＳ分岐）、コントローラ１０ｂの先読み処理手段１０１ｂは、該要求のデータが存在することを、コントローラ１０ｂの通信手段１０２ｂを介してコントローラ１０ａの通信手段１０２ａに送信する（ステップＳ１１２）。
【００８４】
また、ステップＳ１１０の判定で、コントローラ１０ｂにおいて、データが無い（先読みデータ無し）と判断された場合、コントローラ１０ｂの先読み処理手段１０１ｂは、コントローラ１０ｂには該要求のデータが存在しない旨を、通信手段１０２ｂを介してコントローラ１０ａの通信手段１０２ａに通信する（ステップＳ１１１）。
【００８５】
これらの問い合わせ先のコントローラで行われる処理は、前述の説明では、コントローラ１０ｂとして、説明を行ったが、図１の他のコントローラ１０ｃ、１０ｄに対しても同時に行われ、その結果が、コントローラ１０ａの通信手段１０２ａに通知される。
【００８６】
ステップＳ１０３で、他のコントローラから、問い合わせの結果を示す通信をすべて受け取ると、受け取った結果の中から、コントローラ１０ａの先読み処理手段１０１ａが要求する先読みデータが、他のコントローラで、既に存在することを示す結果が無いか判断する（ステップＳ１０４）。
【００８７】
その結果、該当データをキャッシュメモリに有する他のコントローラが１つでも存在すれば、他のコントローラに存在する該等データを、先読みデータとして、図２の先読みテーブル２０１ａに登録を行う（ステップＳ１０６）。
【００８８】
先読みデータの登録において、
コントローラ１０ａの先読み処理手段１０１ａが要求する、
・先読みデータの先頭アドレスを、先読み開始アドレス２０２ａ、
・先読みを行った長さを先読み長２０３ａ、そして、
・先読みデータが存在する先を、格納先２０４ａ
にそれぞれ書き込む処理が行われる。
【００８９】
ステップＳ１０４において、問い合わせ先の他のコントローラから、１つもデータが存在しないと判定すれば、コントローラ１０ａの先読み処理手段１０１ａは、先読み対象のデータを、記憶装置１０５aから読み込みキャッシュメモリ１０３ａに格納し先読み処理を終了する（ステップＳ１０５）。
【００９０】
これらの先読み処理の動作と併せて、コントローラ１０ａのホスト要求処理手段１００ａで受けたリード要求に対する処理も、リード要求を受信した後で行われる。
【００９１】
図４は、本発明の一実施の形態における動作（ホストからのリード要求時の動作）を説明する流れ図である。
【００９２】
図１及び図４を参照すると、コントローラ１０ａの先読み処理手段１０１ａは、コントローラ１０ａのホスト要求処理手段１００ａで受信したリード要求のアドレスが、コントローラ１０ａのキャッシュメモリ１０３ａに存在するか判定する（ステップＳ３０１）。
【００９３】
ステップＳ３０１において、コントローラ１０ａのキャッシュメモリ１０３ａ上に存在すると判定された場合、コントローラ１０ａのホスト要求処理手段１００ａを介して、ホストにデータを転送した後リード要求を終了する（ステップＳ３０５）。
【００９４】
ステップＳ３０１において、コントローラ１０ａの先読み処理手段１０１ａは、コントローラ１０ａのキャッシュメモリ１０３ａ上に存在しないと判定されると（ステップＳ３０１のＮＯ分岐）、先読みテーブル２０１ａを参照し、他のコントローラで先読みが行われたデータであるか否かを判定する（ステップＳ３０２、ステップＳ３０３）。
【００９５】
ステップＳ３０３において、他のコントローラに存在すると判定されると（ステップＳ３０３のＹＥＳ分岐）、コントローラ１０ａの先読み処理手段１０１ａは、先読みテーブルに記録された、該データが存在するコントローラに対し、データの引き取りを、通信手段１０２ａを介して行う（ステップＳ３０６）。ここで、他のコントローラがコントローラ１０ｂであるすると、該要求を受け取ったコントローラ１０ｂの通信手段１０２ｂは、先読み処理手段１０１ｂに対してキャッシュメモリ１０３ｂに存在するデータを通信手段１０２ｂ、通信手段１０２ａ、ホスト要求処理手段１００ａを通じてホストに転送した後、該リード要求の処理を終了する。
【００９６】
コントローラ１０ａの先読み処理手段１０１ａは、ステップＳ３０３において、該リード要求のデータがどのコントローラでも先読みされていなければ、該リード要求を保持する記憶装置に対してリードを行い、キャッシュメモリ１０３ａに格納し、該データを、ホスト要求処理手段１００ａを通じてホストに転送し、リード要求の処理を終了する（ステップ３０４）。
【００９７】
コントローラ１０ａの先読み処理手段１０１ａは、ホストから受信される一連のリード要求に対し、先読みを行うべきと判断した場合、先読みテーブル２０１ａを用いて、他のコントローラで行われた先読み動作の結果格納されたデータのアドレスと所在を、自身のコントローラに記録する。
【００９８】
これにより、他のコントローラで行われた先読みデータと同一データを再び自身のコントローラで先読みを行うこと無く、既に先読みをおこなったコントローラのキャッシュメモリのデータを用いることで、異なるコントローラ間での冗長な先読み動作を省き、性能の改善を図ることが可能となる。
【実施例】
【００９９】
次に、図５、図６、図７、図８、図９を参照して、具体例を用いて、本発明を実施するための動作を説明する。
【０１００】
まずは、図５、図９を参照して、本実施例の構成を説明する。ストレージシステムは、２つのコントローラ１０ａと１０ｂを備えている。コントローラ１０ａ、１０ｂは同一の構成とされる。コントローラ１０ａは、不図示のホストからの要求やデータの送受信を行うホスト要求処理手段５００ａと、ホスト要求処理手段５００ａで受け取ったリード要求に対して、先読みを行うかどうかの判定やリード要求のデータがキャッシュメモリ上に存在するか否かの判定やリード要求のデータが他のコントローラに存在するか否か先読みテーブルを用いて判定する先読み処理手段５０１ａを持つ。
【０１０１】
図９（Ａ）、図９（Ｂ）の先読みテーブル９０１ａと９０１ｂは、コントローラ１０ａ、１０ｂの先読みテーブルの一例であり、それぞれ先読み開始アドレス９０２ａ、９０２ｂと先読み長９０３ａ、９０３ｂを１つのセットとする領域を複数持つ。本実施例においては、通信先が唯一１つのコントローラに決定するため、格納先の情報を持たない。
【０１０２】
さらに、先読みに先立ち該領域のデータが他のコントローラで先読みされているかどうか問い合わせの為の通信を行う通信手段５０２ａと、先読みのデータを格納するキャッシュメモリ５０３ａを持つ。
【０１０３】
また、各コントローラ１０ａと１０ｂの双方からアクセス可能な接続が行われる、複数の磁気ディスク装置（記憶装置）５０５と、記憶装置５０５に対してリード要求などのアクセスを行う為の処理を行う磁気ディスク装置制御手段（「ディスク制御手段」ともいう）５０４ａと５０４ｂをそれぞれ持つ。
【０１０４】
特に制限されないが、本実施例では、２つのコントローラ１０ａと１０ｂは、通信手段５０２ａと５０２ｂを介し、直接接続されている。なお、図１の相互接続網を介して接続する構成としてもよい。
【０１０５】
次に図５、図９、図１０、図１１と図６、図７、図８のフローチャートを用いて、具体的な動作を説明する。
【０１０６】
ホストから発行されるリード要求が、図１０（ａ）のように連続したアクセス（「シーケンシャルアクセス」と呼ぶ）であった場合、それぞれのコントローラの負荷を分散する目的で、１つのリード要求毎に、それぞれのコントローラ１０ａ、コントローラ１０ｂに交互に振り分ける動作を行う。
【０１０７】
この時のリード要求は、図１０（ｂ）に示すように、コントローラ１０ａには要求番号、１、３、５、７が発行され、図１０（ｃ）に示すように、コントローラ１０ｂに対しては要求番号２、４、６、８が発行され、以後ホストからのシーケンシャルアクセスが続く限り同様な繰り返しパターンとなる。図１１は、図１０のシーケンシャルなリードアクセスにおける各リード要求番号と、開始アドレス、データ長の一例を示す。
【０１０８】
この時の先読み動作を行う１つの条件として、
・１つのリード要求の最後のアドレス、すなわち、該リード要求の開始アドレスにデータ長を足したアドレスから、次のリード要求の開始アドレスまで１０以内であった場合、かつ、
・この条件を満たすリード要求が連続して３つ発生したときに、判定を行ったリード要求の最後のアドレスの次のアドレスから先読みを２０行うとする。
【０１０９】
この先読みを行う条件は１つの例であり、実際には、
・先読みを行う量や、
・先読みが成立するための判定条件（同一条件が３回連続で発生）等は、各種取りえる。
【０１１０】
また、キャッシュメモリ５０３ａ、５０３ｂは、それぞれデータが格納されていない状態であると仮定して説明を行う。
【０１１１】
まず、コントローラ１０ａ側に着目して動作を説明する（図６の流れ図参照）。
【０１１２】
ホストから発行されたリード要求はホスト要求処理手段５００ａにより受信される（ステップＳ６０１）。
【０１１３】
この時、図１０のリード要求１、３を既に受け取った状態で、リード要求５を受け取ったとする。
【０１１４】
先読み処理手段５０１ａは、リード要求５の開始アドレス、データ長で示されるデータが、キャッシュメモリ５０３ａにあるか否か判定する。
【０１１５】
このとき、リード要求５のデータはキャッシュメモリ５０３ａには格納されていず、先読み処理手段５０１ａは、該リード要求が自身のキャッシュメモリ５０３ａに無いと判定する（ステップＳ６０２）。
【０１１６】
次に、先読み処理手段５０１ａは、先読みテーブル９０１ａを参照し、該リード要求のデータが他方のコントローラ（コントローラ１０ｂ）で既にキャッシュメモリ５０３ｂに読み込まれているものか判定する。
【０１１７】
この時の先読みテーブル９０１ａには、まだ何も登録されていない為、相手先にも先読みデータが無いと判定する（ステップＳ６０３）。
【０１１８】
そして、該リード要求のデータを、磁気ディスク装置制御手段５０４ａを介し、磁気ディスク装置５０５からキャッシュメモリ５０３ａ上に読み込む（ステップＳ６０４）。
【０１１９】
その後、先読み処理手段５０１ａはキャッシュメモリ５０３ａ上に読み込んだ、該リード要求のデータを、ホスト要求処理手段５００ａを通じてホストに転送を行う（ステップＳ６０５）。
【０１２０】
しかる後、先読み処理手段５０１ａは、該リード要求が終了したことをホストに報告し、１つのリード要求の処理を終える（ステップＳ６０６）。
【０１２１】
この一連の処理は、コントローラ１０ａ側に発行されるリード要求１、３とコントローラ１０ｂ側に発行されるリード要求２、４、６に対しても同様に行われる。
【０１２２】
そして、リード要求の処理を終えた後、先読み処理手段５０１ａは、処理を終えたリード要求に対して、先読みを行うか否か判定を行う。
【０１２３】
先読み処理手段５０１ａは、ホスト要求処理手段５００ａで過去に受け取ったリード要求１、３と、今受け取ったリード要求５から、先読みを行う条件を満たしたと判定し、開始アドレス２８から２０の長さで先読みを行うと判断する（ステップＳ６０７）。
【０１２４】
この時、過去のリード要求１と３を受けたときには、先読みの条件を満たしていない為、なにもせずにそのまま終了する。
【０１２５】
ステップＳ６０７で先読みを行うと判断すると、該先読みの要求である開始アドレス２８から２０の長さのデータが相手のコントローラに存在するか通信手段５０２ａを用いて問い合わせる（ステップＳ６０９）。
【０１２６】
相手のコントローラ、この場合、コントローラ１０ｂの通信手段５０２ｂが該問合せを受信する（図８のステップＳ８０１）。
【０１２７】
コントローラ１０ｂの通信手段５０２ｂは、先読み処理手段５０１ｂに該問合せを伝え、先読み処理手段５０１ｂは開始アドレス２８、データ長２０の長さのデータがキャッシュメモリ５０３ｂに無いか判定を行う。
【０１２８】
この時、コントローラ１０ｂでは、既にリード要求４を受信しているが、まだ先読みを行っていず、リード要求４以降のデータは、コントローラ１０ｂのキャッシュメモリ５０３ｂには格納されていず、先読みも行われていない判定となる（図８のステップＳ８０２、ステップＳ８０３）。
【０１２９】
その結果、コントローラ１０ｂの先読み処理手段５０１ｂは、先読み無しの情報を、通信手段５０２ｂに設定し（図８のステップＳ８０４）、通信手段５０２ｂは、該問合せの結果（先読み無し）を、通信手段５０２ａに送信する（図８のステップＳ８０５）。
【０１３０】
該問合せ結果を受信したコントローラ１０ａの通信手段５０２ａは、その結果を先読み処理手段５０１ａに報告する（図６のステップＳ６０９）。
【０１３１】
コントローラ１０ａの先読み処理手段５０１ａは、該結果から先読みを行うか判定する。この時、相手側のコントローラ１０ｂに、該先読み要求のデータが存在しないため、自身のキャッシュメモリ５０３ａに対して先読みを行う判定となる（図６のステップＳ６１０）。
【０１３２】
その後、コントローラ１０ａの先読み処理手段５０１ａは、磁気ディスク装置制御手段５０４ａを介して、アドレス２８、データ長２０に相当する磁気ディスク装置５０５上のデータを、キャッシュメモリ５０３ａ上に読み込み、先読み処理を終了する（図６のステップＳ６１１）。
【０１３３】
一方、これらの処理を行っている間、もしくは、処理の完了後には、コントローラ１０ｂ側で、図１０のリード要求６に相当するアクセスが発生する。
【０１３４】
前述と同様に、コントローラ１０ｂのホスト要求処理手段５００ｂで、リード要求６が受信される（ステップ６０１）。
【０１３５】
コントローラ１０ｂの先読み処理手段５０１ｂは、リード要求６の開始アドレス、データ長で示されるデータが、コントローラ１０ｂのキャッシュメモリ５０３ｂにあるか否か判定する。
【０１３６】
このとき、リード要求６のデータはキャッシュメモリ５０３ｂには格納されていず、先読み処理手段５０１ｂは、該リード要求が自身のキャッシュメモリ５０３ｂに無いと判定する（ステップＳ６０２）。
【０１３７】
次に、コントローラ１０ｂの先読み処理手段５０１ｂは先読みテーブル９０１ｂを参照し、該リード要求のデータが他方のコントローラ（コントローラ１０ａ）で、既にキャッシュメモリ５０３ａに読み込まれているものか判定する。
【０１３８】
この時のコントローラ１０ｂの先読み処理手段５０１ｂの先読みテーブル９０１ｂには、何も登録されていないため、この時点では、相手先（コントローラ１０ａ）にも先読みデータが無いと判定する（ステップＳ６０３）。
【０１３９】
そして、該リード要求のデータを、磁気ディスク装置制御手段５０４ｂを介し、磁気ディスク装置５０５から、キャッシュメモリ５０３ｂ上に読み込む（ステップＳ６０４）。
【０１４０】
その後、コントローラ１０ｂの先読み処理手段５０１ｂは、キャッシュメモリ５０３ｂ上に読み込んだ、該リード要求のデータをホスト要求処理手段５００ｂを通じてホストに転送を行う（ステップＳ６０５）。
【０１４１】
しかる後、コントローラ１０ｂの先読み処理手段５０１ｂは、該リード要求が終了したことを、ホストに報告し、１つのリード要求の処理を終える（ステップＳ６０６）。
【０１４２】
そして、リード要求の処理を終えた後、コントローラ１０ｂの先読み処理手段５０１ｂは、処理を終えたリード要求に対して、先読みを行うか否か判定を行う。
【０１４３】
コントローラ１０ｂの先読み処理手段５０１ｂは、ホスト要求処理手段５００ｂで過去に受け取ったリード要求２、４と、今受け取ったリード要求６とから、先読みを行う条件を満たしたと判定し、開始アドレス３１から２０の長さで先読みを行うと判断する（ステップＳ６０７）。
【０１４４】
ステップＳ６０７で先読みを行うと判断すると、コントローラ１０ｂの先読み処理手段５０１ｂは、先読みテーブル９０１ｂを参照し、すでに相手で先読みをおこなっているデータであるか判定する。
【０１４５】
この場合、まだ先読みテーブル９０１ｂには何も登録されていないため、次の処理に進む（ステップＳ６１３）。
【０１４６】
それから、コントローラ１０ｂの先読み処理手段５０１ｂは、該先読みの要求である開始アドレス３１から２０の長さのデータが相手のコントローラに存在するか通信手段５０２ｂを用いて問い合わせる（ステップＳ６０９）。
【０１４７】
相手のコントローラ、この場合、コントローラ１０ａの通信手段５０２ａが該問合せを受信する（図８のステップＳ８０１）。
【０１４８】
コントローラ１０ａの通信手段５０２ａは、先読み処理手段５０１ａに該問合せを伝え、先読み処理手段５０１ａは、
開始アドレスが３１、
データ長が２０
のデータがキャッシュメモリ５０３ａに存在するか否かの判定を行う。
【０１４９】
この時、コントローラ１０ａでは、既に、
開始アドレスが２８、
データ長が２０
のデータを、先読み動作中か、又は、先読み動作の完了の状態である。
【０１５０】
該先読み動作は、問合せのアドレス、開始アドレス３１からデータ長２０の先読み要求の一部を含むため、コントローラ１０ａは、該問合せに対しては、先読み中、又は先読み完了を、コントローラ１０ｂに返すことで、先読みの競合を防ぐことが出来る。
【０１５１】
ここで、先読み中と判定したときには、コントローラ１０ａは、該先読みが完了するまで待つ（図８のステップＳ８０２、ステップＳ８０６）。
【０１５２】
その後、コントローラ１０ａの先読み処理手段５０１ａは、先読み有りの情報を通信手段５０２ａに設定する（ステップＳ８０７）。
【０１５３】
また、先読み中ではないと判定すれば、コントローラ１０ａの先読み処理手段５０１ａは、該問い合わせのデータがキャッシュメモリ５０３ａ上に無いか否かを判定する（ステップ８０３）。
【０１５４】
この時、キャッシュメモリ５０３ａ上には、開始アドレス２８からデータ長２０の間のデータが存在するため、コントローラ１０ａの先読み処理手段５０１ａは、先読み有りの情報を通信手段５０２ａに設定する（ステップＳ８０７）。
【０１５５】
図８のステップ８０７において、それぞれ、先読ありの情報を設定すると、コントローラ１０ａの先読み処理手段５０１ａは、通信手段５０２ａに対して、該問合せの結果のコントローラ１０ｂに対する通信を指示する（ステップＳ８０５）。
【０１５６】
該問合せ結果を受信したコントローラ１０ｂの通信手段５０２ｂは、その結果を先読み処理手段５０１ｂに報告する（図６のステップＳ６０９）。
【０１５７】
コントローラ１０ｂの先読み処理手段５０１ｂは、該結果から先読みを行うか否かを判定する。この時は、相手側のコントローラ１０ａに該先読み要求のデータが存在するので、相手のコントローラで先読みデータが存在すると判定する（図６のステップＳ６１０）。
【０１５８】
その後、コントローラ１０ｂの先読み処理手段５０１ｂは、先読みテーブル９０１ｂにアドレス２８、データ長２０で先読みデータが存在する旨登録を行い、処理を終了する（ステップＳ６１２）。
【０１５９】
以降、コントローラ１０ｂのホスト要求処理手段５００ｂで受信されるリード要求は先読みテーブル９０１ｂで登録されている範囲のデータであれば、磁気ディスク装置５０５にアクセスすることなく、相手のコントローラ１０ａのキャッシュメモリ５０３ａに格納された先読みデータを用いて、リード要求が処理可能である。
【０１６０】
これを具体的に説明すると、前述のリード要求６の処理の後のリード要求８をホスト要求処理手段が受信する（図６のステップＳ６０１）。
【０１６１】
すると、先読み処理手段５０１ｂは、リード要求８の開始アドレス、データ長で示されるデータが、キャッシュメモリ５０３ｂ上にあるか否か判定する。
【０１６２】
このとき、リード要求８のデータは、コントローラ１０ｂのキャッシュメモリ５０３ｂには格納されていず、コントローラ１０ｂの先読み処理手段５０１ｂは該リード要求が自身のキャッシュメモリ５０３ｂに無いと判定する（ステップＳ６０２）。
【０１６３】
次に、コントローラ１０ｂの先読み処理手段５０１ｂは先読みテーブル９０１ｂを参照し、該リード要求のデータが他方のコントローラ（コントローラ１０ａ）で既にキャッシュメモリ５０３ａに読み込まれているものか否かを判定する。
【０１６４】
この時のコントローラ１０ｂの先読みテーブル９０１ｂには、前回のリード要求６に対する処理で先読み開始アドレス２８、先読み長２０が登録されているので、相手先のコントローラで先読みデータを保持していると判定する（ステップＳ６０３）。
【０１６５】
コントローラ１０ｂの先読み処理手段５０１ｂは、コントローラ１０ａに対し該リード要求のデータを要求するため、通信手段５０２ｂに対し先読みデータ転送要求の通信を指示する（ステップＳ６０８）。
【０１６６】
図７は、図６のステップＳ６０８における相手先のコントローラの処理の一例を示す流れ図である。
【０１６７】
コントローラ１０ｂの通信手段５０２ｂは、コントローラ１０ａの通信手段５０２ａにデータ転送要求を送信する。コントローラ１０ａの通信手段５０２ａは、コントローラ１０ｂからの該データ転送要求を受信する（図７のステップＳ７０１）。
【０１６８】
コントローラ１０ａの通信手段５０２ａは、先読み処理手段５０１ａに該データ転送要求を通知し、これを受け取った先読み処理手段５０１aは、キャッシュメモリ５０３ａに該データ転送要求で示されるデータが存在するか否か判定する。
【０１６９】
ここでは、開始アドレスが３４、データ長が４のデータ転送要求であり、既に先読み対象のデータ内、すなわち開始アドレスが２８、データ長が２０の範囲内にあるため、
先読みが行われ、既にキャッシュメモリ５０３ａに存在するか、
先読み中でデータがまだ揃っていないが、いずれデータが揃うかの何れかの条件となる。
【０１７０】
ここで、該データ転送要求のデータが、既にコントローラ１０ａのキャッシュメモリ５０３ａに存在すると判定されるものとする（図７のステップＳ７０２）。
【０１７１】
すると、コントローラ１０ａのキャッシュメモリ５０３ａのデータを通信手段５０２ａと通信手段５０２ｂを介して、コントローラ１０ｂのキャッシュメモリ５０３ｂに転送を行う（ステップＳ７０５）。
【０１７２】
また、ステップＳ７０２において、コントローラ１０ａのキャッシュメモリ５０３ａにまだデータ揃っていない（先読み中）と判定されると（ステップＳ７０２）、次に、コントローラ１０ａの先読み処理手段５０１ａは、該要求の範囲が、先読み中であるか否か判定する（ステップ７０３）。
【０１７３】
ここで、コントローラ１０ａの先読み処理手段５０１ａは、先読み中と判定されると（ステップ７０３のＹＥＳ分岐）、該要求範囲のデータが揃うまで（キャッシュメモリに格納されるまで）待機する（ステップ７０７）。
【０１７４】
コントローラ１０ａのキャッシュメモリ５０３ａにデータが揃えば、前述と同様に、コントローラ１０ａのキャッシュメモリ５０３ａのデータを、相手のコントローラ１０ｂのキャッシュメモリ５０３ｂに転送する処理を行う（ステップＳ７０５）。
【０１７５】
それぞれ、ステップＳ７０５で、コントローラ１０ｂのキャッシュメモリ５０３ｂへのデータの転送が完了すると、コントローラ１０ａの先読み処理手段５０１ａは、通信手段５０２ａに対し、キャッシュメモリ５０３ｂへのデータが転送完了した旨を示す通知を、通信手段５０２ｂに送信することを指示する（ステップＳ７０６）。
【０１７６】
コントローラ１０ａの通信手段５０２ａは、該転送結果を受信すると、コントローラ１０ｂの先読み処理手段５０１ｂに対し、データ転送が終了した旨を通知する（図６のステップＳ６０８）。
【０１７７】
コントローラ１０ｂの先読み処理手段５０１ｂは、該通知を受け取ると、転送されたキャッシュメモリ５０３ｂのデータを、ホスト要求処理手段５００ｂを通じてホストに転送を行う（ステップＳ６０５）。
【０１７８】
その後、コントローラ１０ｂの先読み処理手段５０１ｂは、ホスト要求処理手段５００ｂを通じて、リード要求が終了した旨をホストに通知をし、リード要求に対する処理を完了する（ステップＳ６０６）。
【０１７９】
その後、コントローラ１０ｂの先読み処理手段５０１ｂは、該リード要求（図１０のリード要求８）による先読み対象であるかの判断を行う。
【０１８０】
この場合は、図１０のリード要求４、６、８に対して、先読みの判定が行われる、すると先読み要求の条件を満たしていると判断する（ステップＳ６０７）。
【０１８１】
ステップＳ６０７で先読みを行うと判断すると、コントローラ１０ｂの先読み処理手段５０１ｂは、先読みテーブル９０１ｂを参照し、すでに相手（コントローラ１０ａ）で先読みをおこなっているデータであるか判定する。
【０１８２】
この場合、先読みテーブル９０１ｂには、
開始アドレス２８、
先読み長２０、
が登録されており、リード要求８の時点での先読み判定である、
開始アドレス３８、
先読み長２０に重なるアドレスがあり、次のリード要求がヒットする可能性があるため、相手コントローラ１０aへの先読み問合せを行わずに完了する（ステップＳ６１３）。
【０１８３】
以下、先読みテーブルに登録された先読み範囲でリード要求がヒットする可能性がある間、リード要求が相手のコントローラの先読みデータを利用することが可能となる。
【０１８４】
こうすることで、自身のキャッシュメモリへの先読み動作を、既にキャッシュメモリに取り込んでいる相手のキャッシュメモリのデータを利用することができ、同一箇所のデータによる磁気ディスク装置へのリード要求の競合を防ぐことが可能となり、システムの性能を改善することができる。
【０１８５】
本発明によれば、磁気ディスク装置を複数持つ磁気ディスク装置アレイ装置や、複数の磁気ディスク装置アレイ装置を束ね仮想化を行う仮想化アプライアンスといった用途に適用できる。
【０１８６】
また、磁気ディスク装置だけではなく、光磁気ディスク装置集合装置やテープ装置などの他のストレージデバイスにも適用可能である。
【０１８７】
以上、本発明を上記実施例に即して説明したが、本発明は上記実施例の構成にのみ制限されるものでなく、本発明の範囲内で当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【０１８８】
【図１】本発明の一実施の形態の構成を示す図である。
【図２】本発明の一実施の形態のテーブルの情報を示す図である。
【図３】本発明の一実施の形態の動作の具体例を示す流れ図である。
【図４】本発明の一実施の形態の動作の具体例を示す流れ図である。
【図５】本発明の一実施例の構成を示す図である。
【図６】本発明の一実施例の動作の具体例を示す流れ図である。
【図７】本発明の一実施例の動作の具体例を示す流れ図である。
【図８】本発明の一実施例の動作の具体例を示す流れ図である。
【図９】本発明の一実施例のテーブルの情報を示す図である。
【図１０】本発明の一実施例において、ホストから発行されるリード要求列とそれぞれのコントローラ１０ａ、１０ｂへのリード要求列の対応を示す図である。
【図１１】図１０において、ホストから発行されるリード要求列の開始アドレスとデータ長の例を示す図である。
【符号の説明】
【０１８９】
１０ａ、１０ｂ、１０ｃ、１０ｄ  コントローラ
２０  相互接続網
１００ａ、１００ｂ、１００ｃ、１００ｄ  ホスト要求処理手段
１０１ａ、１０１ｂ、１０１ｃ、１０１ｄ  先読み処理手段
１０２ａ、１０２ｂ、１０２ｃ、１０２ｄ  通信手段
１０３ａ、１０３ｂ、１０３ｃ、１０３ｄ  キャッシュメモリ
１０４ａ、１０４ｂ、１０４ｃ、１０４ｄ  記憶装置制御手段
１０５ａ、１０５ｂ、１０５ｃ、１０５ｄ  記憶装置
２０１ａ  先読みテーブル
２０２ａ  先読み開始アドレス
２０３ａ  先読み長
２０４ａ  格納先
５００ａ、５００ｂ  ホスト要求処理手段
５０１ａ、５０１ｂ  先読み処理手段
５０２ａ、５０２ｂ  通信手段
５０３ａ、５０３ｂ  キャッシュメモリ
５０４ａ、５０４ｂ  磁気ディスク装置制御手段（ディスク制御手段）
５０５  磁気ディスク装置
９０１ａ、９０１ｂ  先読みテーブル
９０２ａ  ９０２ｂ  先読み開始アドレス
９０３ａ  ９０３ｂ  先読み長
９０４ａ  ９０４ｂ  格納先
【図１】
2008123363.tif 000003
【図２】
2008123363.tif 000004
【図３】
2008123363.tif 000005
【図４】
2008123363.tif 000006
【図５】
2008123363.tif 000007
【図６】
2008123363.tif 000008
【図７】
2008123363.tif 000009
【図８】
2008123363.tif 000010
【図９】
2008123363.tif 000011
【図１０】
2008123363.tif 000012
【図１１】
2008123363.tif 000013