(57)【特許請求の範囲】
【請求項１】
外部通信路から入力されるデータ入出力要求を受信して、前記データ入出力要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により通信可能に接続された第１及び第２のデータコントローラを備え、
前記第１のデータコントローラは、
前記データ入出力要求としてデータ書き込み要求および書き込み対象データを受信すると、受信した前記書き込み対象データを、前記第１及び第２のデータコントローラの処理負荷に応じて複数のデータブロックに分割し、分割した各データブロックの前記記憶資源への書き込み処理を担当する前記データコントローラを決定し、自身の処理担当の前記データブロックを前記記憶資源に書き込む一方、前記第２のデータコントローラの処理担当の前記データブロックについてのデータ書き込み要求を前記データ通信路を通じて前記第２のデータコントローラに送信し、
前記第２のデータコントローラは、
前記第１のデータコントローラから前記データ書き込み要求を受信すると、自身の処理担当の前記データブロックを前記記憶資源に書き込むこと
を特徴とする記憶制御装置。
【請求項２】
請求項１に記載の記憶制御装置であって、
前記第１及び第２のデータコントローラはＲＡＩＤ３〜６の方式で前記記憶資源を管理し、
前記第１のデータコントローラは、前記書き込み対象データを前記複数のデータブロックに分割するに際し、前記書き込み対象のデータをＲＡＩＤ３〜６における書き込み単位のデータブロックに分割することを特徴とする記憶制御装置。
【請求項３】
請求項１に記載の記憶制御装置であって、
前記第１及び第２のデータコントローラはＲＡＩＤ３〜６の方式で前記記憶資源を管理し、
前記第１及び第２のデータコントローラの処理負荷に応じて、前記ＲＡＩＤ３〜６の方式におけるパリティ計算を担当するデータコントローラを決定することを特徴とする記憶制御装置。
【請求項４】
外部通信路から入力されるデータ入出力要求を受信して、前記データ入出力要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により通信可能に接続された第１及び第２のデータコントローラを備え、
前記第１のデータコントローラは、
前記データ入出力要求としてデータ読み出し要求を受信すると、受信した前記データ読み出し要求についての読み出し対象データの前記記憶資源における記憶領域を複数のデータブロックに分割し、第１及び第２のデータコントローラの処理負荷に応じて、分割した各データブロックの前記記憶資源からの読み出し処理を担当する前記データコントローラを決定し、自身の処理担当の前記データブロックからデータを読み出す一方、前記第２のデータコントローラの処理担当の前記データブロックからのデータ読み出し要求を前記データ通信路を通じて前記第２のデータコントローラに送信し、
前記第２のデータコントローラは、
前記第１のデータコントローラから前記データ読み出し要求を受信すると、受信した前記データ読み出し要求についての前記記憶資源からのデータの読み出しを行い、読み出した前記データを前記第１のデータコントローラに送信し、
前記第１のデータコントローラは、
自身が読み出したデータと前記第２のデータコントローラから送られてくるデータとを前記外部通信路に送信すること
を特徴とする記憶制御装置。
【請求項５】
請求項４に記載の記憶制御装置であって、
前記第１及び第２のデータコントローラはＲＡＩＤ３〜６の方式で前記記憶資源を管理し、
前記第１のデータコントローラは、前記読み出し対象データの前記記憶資源における記憶領域を前記複数のデータブロックに分割するに際し、前記記憶領域をＲＡＩＤ３〜６における書き込み単位のデータブロックに分割することを特徴とする記憶制御装置。
【請求項６】
外部通信路から入力されるデータ入出力要求を受信して、前記データ入出力要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により通信可能に接続された第１及び第２のデータコントローラを備える記憶制御装置の制御方法であって、
前記第１のデータコントローラは、
前記データ入出力要求としてデータ書き込み要求および書き込み対象データを受信すると、受信した前記書き込み対象データを、前記第１及び第２のデータコントローラの処理負荷に応じて複数のデータブロックに分割し、分割した各データブロックの前記記憶資源への書き込み処理を担当する前記データコントローラを決定し、自身の処理担当の前記データブロックを前記記憶資源に書き込む一方、前記第２のデータコントローラの処理担当の前記データブロックについてのデータ書き込み要求を前記データ通信路を通じて前記第２のデータコントローラに送信し、
前記第２のデータコントローラは、
前記第１のデータコントローラから前記データ書き込み要求を受信すると、自身の処理担当のデータブロックを前記記憶資源に書き込むこと
を特徴とする記憶制御装置の制御方法。
【請求項７】
外部通信路から入力されるデータ入出力要求を受信して、前記データ入出力要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により通信可能に接続された第１及び第２のデータコントローラを備える記憶制御装置の制御方法であって、
前記第１のデータコントローラは、
前記データ入出力要求としてデータ読み出し要求を受信すると、受信した前記データ読み出し要求についての読み出し対象データの前記記憶資源における記憶領域を複数のデータブロックに分割し、第１及び第２のデータコントローラの処理負荷に応じて、分割した各データブロックの前記記憶資源からの読み出し処理を担当する前記データコントローラを決定し、自身の処理担当の前記データブロックからデータを読み出す一方、前記第２のデータコントローラの処理担当の前記データブロックからのデータ読み出し要求を前記データ通信路を通じて前記第２のデータコントローラに送信し、
前記第２のデータコントローラは、
前記第１のデータコントローラから前記データ読み出し要求を受信すると、受信した前記データ読み出し要求についての前記記憶資源からのデータの読み出しを行い、読み出した前記データを前記第１のデータコントローラに送信し、
前記第１のデータコントローラは、
自身が読み出したデータと前記第２のデータコントローラから送られてくるデータとを前記外部通信路に送信すること
を特徴とする記憶制御装置の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ディスクアレイ装置などの記憶制御装置に関し、とくに、データ入出力要求を効率よく処理することができるようにする技術に関する。
【０００２】
【従来の技術】
近年、ＩＴ技術の急速な進展によりディスクアレイ装置などの記憶制御装置の需要が増大している。このようなディスクアレイ装置の中には、信頼性向上や高性能化を目的として、内部装置を冗長に構成していることも多く、例えば、特開平８−３２８７５８号公報にも開示されているように、ディスクドライブなどの記憶資源に対するデータの入出力処理を行うデータコントローラが複数実装されているものがある。
【０００３】
【発明が解決しようとする課題】
ところで、このように冗長にデータコントローラを有するディスクアレイ装置においては、一方のデータコントローラが受け付けたデータ入出力処理は、基本的にそのデータコントローラ自身が受け持つ。
【０００４】
このため、外部から一方のデータコントローラに対してデータ入出力要求が入力され、その際、たとえその時に他のデータコントローラの処理に余裕がある場合でも、前記データ入出力要求についての処理を他のデータコントローラに分担させるようなことは無く、基本的に入力のあった側のディスクアレイコントローラ自身がその処理を担当することになる。
【０００５】
この発明は、このような点に着目してなされたもので、データ入出力要求を効率よく処理することができる記憶制御装置およびその制御方法を提供することを目的とする。
【０００６】
【課題を解決するための手段】
この目的を達成するための本発明の主たる発明は、外部通信路から入力されるデータ入出力要求を受信して、前記データ入出力要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により通信可能に接続された第１及び第２のデータコントローラを備え、
前記第１のデータコントローラは、
前記データ入出力要求としてデータ書き込み要求および書き込み対象データを受信すると、受信した前記書き込み対象データを、前記第１及び第２のデータコントローラの処理負荷に応じて複数のデータブロックに分割し、分割した各データブロックの前記記憶資源への書き込み処理を担当する前記データコントローラを決定し、自身の処理担当の前記データブロックを前記記憶資源に書き込む一方、前記第２のデータコントローラの処理担当の前記データブロックについてのデータ書き込み要求を前記データ通信路を通じて前記第２のデータコントローラに送信し、
前記第２のデータコントローラは、
前記第１のデータコントローラから前記データ書き込み要求を受信すると、自身の処理担当の前記データブロックを前記記憶資源に書き込むこと
を特徴とする。
【０００７】
【発明の実施の形態】
＝＝＝開示の概要＝＝＝
以下の開示により、少なくとも次のことが明らかにされる。
外部通信路から入力されるデータ入出力要求を受信して、この要求に対応して記憶資源に対するデータ入出力処理を行う、データ通信路により互いに通信可能に接続された複数のデータコントローラを備える記憶制御装置であって、
前記データコントローラの一つに前記データ入出力要求が入力された場合に、前記データ通信路を通じた通信により前記データ入出力処理を複数の前記データコントローラが分担して実行することを特徴とする記憶制御装置。
【０００８】
この記憶制御装置においては、外部通信路から入力されるデータ入出力要求を受信した場合に、記憶資源に対するデータ入出力処理が複数のデータコントローラによって分担して実行されるため、複数のデータコントローラ間で負荷の分散が図られ、記憶制御装置を効率よく動作させることができ、記憶制御装置の処理速度の向上が図られる。
【０００９】
具体的には、例えば、前記データコントローラのうち一のデータコントローラＡが、前記データ入出力要求としてデータ書き込み要求を受信した場合に、データコントローラＡは、書き込み対象となるデータの一部を前記記憶資源に書き込む一方、前記データ通信路を通じて前記書き込み対象となる前記データの他の部分についてのデータ書き込み要求を他のデータコントローラに送信し、他のデータコントローラは、前記データ書き込み要求を受信した場合にそのデータ書き込み要求についての処理を実行する。
【００１０】
また、前記データコントローラは、ＲＡＩＤ３〜６のいずれかの方式で前記記憶資源を管理し、前記データコントローラＡは、前記データ入出力としてデータ書き込み要求を受信した場合に、書き込み対象のデータを前記ＲＡＩＤ３〜６のいずれか方式における書き込み単位で分割し、その分割単位ごとにそれぞれの書き込み処理を担当する前記データコントローラを割り当てる。
【００１１】
従って、記憶制御装置の記憶資源がＲＡＩＤ方式で運用されている場合には、ＲＡＩＤの仕組みを利用して本発明の仕組みを容易に実現することができる。
【００１２】
また、パリティ計算を担当する前記データコントローラを選出し、そのデータコントローラによりパリティ計算を実行するようにすることもできる。また、ＲＡＩＤ方式の運用において編成されるストライプごとに各ストライプについてのパリティ計算を担当するデータコントローラの割り当てを記憶し、前記記憶資源へのデータの書き込みに際し、その書き込み対象となるストライプの計算を担当するデータコントローラがそのストライプについての前記パリティ計算を実行するようにすることもできる。また、パリティ計算を担当するデータコントローラの前記割り当ては動的に変化させてもよい。さらに、ＲＡＩＤ方式の運用において編成される１のストライプとして書き込まれるデータについての記憶資源への書き込みを、複数の前記データコントローラが分担して実行するようにしてもよい。
【００１３】
＝＝＝記憶制御装置の構成＝＝＝
図１は本発明の一実施例として説明する記憶制御装置１０の概略構成である。記憶制御装置１０は、ＬＡＮ（Local Area Network）やＳＡＮ（Storage Area Network）などの外部通信路１２を通じてホストコンピュータなどの外部装置１４と接続する。記憶制御装置１０の具体例としては、例えば、ディスクアレイ装置があげられる。
【００１４】
図１に示す記憶制御装置１０は、２つの制御部２０，３０と、ディスクドライブなどの記憶デバイスにより構成される記憶資源４０とを備えるが、記憶資源４０については適宜なインタフェースを介して外部接続する構成となっていることもある。
【００１５】
制御部２０，３０は、各種制御情報や設定情報などが記憶される制御メモリ２１、３１、外部通信路１２と接続するためのホストインタフェース（ホストI/F）２２，３２、外部通信路１２を通じてホストインタフェース２２，３２に入力されるデータ入出力コマンドに従い、記憶資源４０に対するデータ入出力処理を制御・実行するデータコントローラ２３，３３（以下、「ＣＴＬ」と表記する）、キャッシュメモリ２４，３４、ＳＣＳＩなどの所定の通信規格に従って動作しデータコントローラ２３，３３と記憶資源４０との間の入出力インタフェースであるディスクインタフェース（ディスクI/F）２５，３５などを備える。
【００１６】
制御部２０と制御部３０との間は、データ通信路である制御バス５０により接続されている。データコントローラ２３，３３は、ホストインタフェース２２，３２を通じて入力されるデータ入出力命令を受信して、記憶資源４０に対するデータ入出力に関する処理を実行する機能を備えるほか、制御バス５０を介して他方のデータコントローラにデータ入出力命令やデータを送信する機能を備えている。
【００１７】
＝＝＝書き込み処理＝＝＝
図２は、制御部２０が、外部装置１４から出力され外部通信路１２を通じて入力されるデータ書き込みコマンド（以下、「WRコマンド」と称する）を受信した場合に、記憶制御装置１０において行われる処理の流れを説明するフローチャートである。
【００１８】
記憶制御装置１０が受信したWRコマンドは、ホストインタフェース２２に入力された後、ＣＰＵにより解釈され、ＣＰＵは対応するコマンドをＣＴＬ２３に入力する（S210）。ＣＴＬ２３は、WRコマンドとともに外部通信路１２を通じて入力される書き込み対象データ（以下、「WRデータ」と称する）をキャッシュメモリ２４に書き込むとともに、このWRコマンドに付与したWRコマンドIDを、制御メモリ２１上に記憶している図３に示すWRデータ管理テーブルに登録する（S211）。WRデータ管理テーブルは、制御部３０の制御メモリ３１にも記憶され、制御バス５０を通じた制御部２０，３０間の通信により双方のWRデータ管理テーブルの内容はリアルタイムに同期更新される。
【００１９】
なお、制御メモリ２１，３１の一方のみにWRデータ管理テーブルを記憶するようにし、記憶していない側の制御部が、制御バス５０を通じて前記テーブルを記憶している側に問い合わせる構成としてもよい。
【００２０】
前記の登録完了後、記憶制御装置１０は、外部通信路１２を通じて、外部アドレス（外部装置１４が記憶制御装置１０にデータ入出力要求を行う際に記憶制御装置１０の管理下にあるデータを特定する情報であり、例えば、ＵＮＩＸ（登録商標）系のシステムでは、外部装置１４から送られてくるコマンドに付帯していたID番号（タグ）である）を付帯させた書き込み完了通知を外部装置１４に送信する（S212）。
【００２１】
つぎに、ＣＴＬ２３は、キャッシュメモリ２４に記憶されているWRデータを複数のデータブロックに分割し、分割したデータブロックごとにその記憶資源４０への書き込み処理を担当するＣＴＬ２３，３３を割り当てる（S213）。ここでWRデータをどのように分割するか（データブロックの数や各データブロックのサイズなど）を決定するアルゴリズムは、例えば、各データブロックのサイズを固定したもの、ＣＴＬ２３，３３のリアルタイムな処理負荷などをパラメータとするものなどがある。また、各データブロックの処理を担当するＣＴＬを割り当てるアルゴリズムは、例えば、処理すべきデータ量がほぼ均等になるように割り当てるようにしたもの、各ＣＴＬ２３，３３の負荷状態に応じて動的に割り当てるようにしたものなどがある。
【００２２】
ＣＴＬ２３は、WRデータの分割により生成された各データブロックのキャッシュメモリ２４上の先頭アドレス、および各データブロックの処理担当となるＣＴＬを示す識別子を、WRコマンドIDに対応づけてWRデータ管理テーブルに登録する（S214）。
【００２３】
つぎに、ＣＴＬ２３は、各データブロックのデータが記憶される記憶資源４０上の領域を確保する。ここでこの領域確保は、制御メモリ２１もしくはキャッシュメモリ２４などに管理されている記憶資源４０の使用状況を示す資源管理テーブルを参照して行われる。
【００２４】
確保される前記の領域は、例えば、記憶資源４０を構成するディスクドライブのドライブ番号や各ディスクドライブ上の記憶位置を特定する物理アドレスなどを用いて指定される。また、記憶資源４０が、例えば、ＲＡＩＤ（Redundant Array of Inexpensive Disks）３〜６の方式で運用されている場合には、前記領域は、複数のディスクドライブ上に編成されるストライプを指定するIDと、ストライプ上の記憶位置を特定する論理アドレスとで指定される。なお、必ずしもＲＡＩＤ３〜６の方式に限定されず、ストライプを編成する方式であれば、他の方式でも同様である。
【００２５】
前記のストライプとは、よく知られているように、例えば、１のデータを複数のディスクドライブにバイト単位、ワード単位、ブロック単位（通所はセクタの倍数）などの単位（以下、「書き込み単位」と称する）に分割して書き込む際に編成される、分割される１のデータに対応するグループであり、パリティ計算を行う方式の場合にはこのグループを単位としてパリティ計算が行われる。ＲＡＩＤグループと呼ばれることもある。
【００２６】
ＣＴＬ２３は、各データブロックについて確保した領域を特定する情報を、各データブロックに対応づけてWRデータ管理テーブルに登録する。
【００２７】
領域を確保すると、つぎにＣＴＬ２３は自分の処理担当のデータブロックについての書き込みコマンドを、制御メモリ２１に記憶しているWR処理キューに登録する（S215）。また、ＣＴＬ２３は、ＣＴＬ３３の処理担当であるデータブロックについての記憶資源４０への書き込み依頼コマンドを、制御バス５０を通じてＣＴＬ３３に送信する（S216）。
【００２８】
ＣＴＬ３３は、前記書き込み依頼コマンドを受信すると、制御メモリ３１上のWRデータ管理テーブルを参照し、自身の書き込み担当であるデータブロックについての書き込みコマンドを、制御メモリ３１上に記憶しているWR処理キュー（不図示）に登録する（S217）。
【００２９】
ＣＴＬ２３は、制御メモリ２１のWR処理キューに登録されている前記WRコマンドIDについての記憶資源４０へのデータ書き込み処理を、適宜なタイミングで実行する（S218）。そして、ＣＴＬ２３は、制御メモリ２１上に記憶しているWRデータ管理テーブルの書き込みが終了したデータブロックに対応する「完了フラグ」の欄に、書き込みが完了した旨を示すフラグをセットする（S219）。
【００３０】
一方、ＣＴＬ３３も、制御メモリ３１のWR処理キューに登録されている前記WRコマンドIDについての記憶資源４０へのデータ書き込み処理を適宜なタイミングで実行する（S220）。
【００３１】
なお、書き込み対象となるデータブロックのデータは、書き込み処理実行時にＣＴＬ３３が制御バス５０を通じてＣＴＬ２３に要求するか、もしくは、ＣＴＬ３３が事前に制御バス５０を通じてＣＴＬ２３から受信してキャッシュメモリ３４に記憶しておく。また、ＣＴＬ２３，３３が双方のキャッシュメモリ２４，３４に同時に書き込む機能を備えている場合には、ＣＴＬ２３がキャッシュメモリ２３にデータを書き込む際にそのデータを制御バス５０を介してＣＴＬ３３側にも送信し、ＣＴＬ３３においてもＣＴＬ２３と同時並行的にキャッシュメモリ３４への前記データの書き込みが行われるようにしてもよい。
【００３２】
ＣＴＬ３３は、書き込み処理が終了したデータブロックに対応する前記WRデータ管理テーブルの「完了フラグ」の欄に、書き込みが完了したことを示すフラグをセットする（S221）。ＣＴＬ２３は、自身の書き込み担当となっているデータブロックと合わせて、当該WRコマンドに対応づけられている全てのデータブロックについての完了フラグが書き込み完了になっているかどうかを監視し（S222）、これを確認すると、当該テーブルの当該WRコマンドの「全完了フラグ」の欄に、当該WRコマンドについてのWRデータの書き込みが完了したことを示すフラグをセットする（Ｓ223）。
【００３３】
以上のようにして、外部装置１４から受信した前記WRコマンドについての処理が完了する。このように以上の処理では、１つのWRデータについての書き込み処理が２つのデータコントローラにより行われる。このため、とくに一方のコントローラの処理負荷が大きく、他方の処理負荷が小さい場合には、負荷分散が図られ、各種資源の有効利用が図られる。
【００３４】
また、このようにしてＣＴＬ間で負荷分散が図られることで、記憶制御装置１０の処理性能が向上する。とくに、高速のホストインタフェースがつぎつぎに登場する昨今では、ディスクインタフェースの処理速度の低さがボトルネックとなり、記憶制御装置１０の処理速度に影響を与えることが多いが、このような場合に本発明の仕組みは有効である。
【００３５】
ところで、ＲＡＩＤ３〜６の方式では、データはバイト単位、ワード単位、ブロック単位（通所はセクタの倍数）などの書き込み単位に分割され、データはこの単位で複数のディスクドライブに分散書き込みされる。そこで、記憶資源４０がＲＡＩＤ方式で運用されている場合には、前述したデータブロックを、その記憶資源４０の運用に採用されているＲＡＩＤ方式に対応させた、バイト単位やワード単位、もしくは、ブロック単位としてもよい。
【００３６】
また、ＲＡＩＤ方式の運用において編成される１のストライプとして書き込まれるデータの記憶資源４０への書き込み処理に際し、この書き込み対象となる各ディスクドライブについての書き込みを、複数のＣＴＬで分担して実行するようにしてもよい。
【００３７】
また、ＲＡＩＤ３〜６の方式での記憶資源４０の管理においては、パリティ計算が必要であり、このパリティ計算は通常はＣＴＬ２３，３３が担当している。そこで、例えば、パリティ計算に際し、各ＣＴＬの負荷状態を調べ、その結果に応じてパリティ計算を実行するＣＴＬを決定するなど、パリティ計算を担当するＣＴＬ２３，３３を動的に割り当てるようにしてもよい。
【００３８】
また、ＲＡＩＤ方式で記憶資源４０を運用する記憶制御装置１０の中には、負荷分散などを目的として、書き込み対象となるストライプの各パリティディスクドライブの処理を担当するＣＴＬが割り当てられている場合もある。そこで、このような記憶制御装置１０においては、いずれかのＣＴＬが外部装置１４からWRコマンドを受信した場合、そのWRコマンドについての書き込み対象となるストライプのパリティディスクドライブについてのパリティ計算を担当するＣＴＬにパリティ計算を実行させるようにしてもよい。
【００３９】
具体的には、例えば、WRコマンドを受信した側のＣＴＬが、そのWRコマンドに対応するデータを記憶資源４０に書き込もうとする際に、その書き込み対象となるストライプにおけるパリティドライブについてのパリティ計算を担当するＣＴＬを調べ、その結果自身の担当であればそのＣＴＬがパリティ計算を行い、自身の担当でなければ、制御バス５０を介してパリティ計算を依頼する命令や必要な情報を担当のＣＴＬに送信し、担当のＣＴＬにてパリティ計算を実行するようにする。このような仕組みにより、負荷分散がより一層徹底して行われ、記憶制御装置１０をより一層効率よく運用することができる。
【００４０】
なお、例えば、ＲＡＩＤ５のようにパリティ格納用ディスクを固定的に定めない方式では、書き込み対象となるストライプのパリティディスクドライブが、動的に変化する（例えば、１つのデータを書き込むたびに）が、この場合、各パリティディスクドライブの処理を担当するＣＴＬも動的に変化していくことになる。
【００４１】
ところで、前記の説明では、WRデータ管理テーブルを、ＣＴＬ２３の制御メモリ２１に記憶しているが、ＣＴＬ２３，２４の双方の制御メモリ２１，３１に記憶し、それぞれのテーブルを、制御バス５０を介してリアルタイムに更新するようにしてもよい。
【００４２】
＝＝＝読み出し処理＝＝＝
図４は、制御部２０が、外部装置１４から出力され外部通信路１２を通じて入力されるデータ読み出しコマンド（以下、「RDコマンド」と称する）を受信した場合に、記憶制御装置１０において行われる処理の流れを説明するフローチャートである。
【００４３】
記憶制御装置１０が受信したRDコマンドは、ホストインタフェース２２に入力された後、ＣＰＵにより解釈され、ＣＰＵは対応するコマンドをＣＴＬ２３に入力する（S410）。ＣＴＬ２３は、RDコマンドに固有のRDコマンドIDを付与し、このRDコマンドIDに付帯させて、RDコマンドに付帯して送られてくる外部アドレスと読み出し対象となるデータ（以下、「RDデータ」と称する）のデータ長とを、制御メモリ２１に記憶している図５に示すRDデータ管理テーブルに登録する。
【００４４】
RDデータ管理テーブルは、制御部３０の制御メモリ３１にも記憶され、制御バス５０を通じた制御部２０，３０間の通信により双方のRDデータ管理テーブルの内容はリアルタイムに同期更新される。なお、制御メモリ２１，３１の一方のみにRDデータ管理テーブルを記憶するようにし、記憶していない側の制御部が、制御バス５０を通じて前記テーブルを記憶している側に問い合わせる構成としてもよい。
【００４５】
つぎに、ＣＴＬ２３は、制御メモリ２１上に記憶され、外部アドレス（例えば、論理ＬＢＡ（Logical Block Address））と記憶資源４０上の記憶位置指定情報（ディスクドライブ番号（もしくはストライプID）と物理アドレス（もしくはストライプ上の論理アドレス））との対応づけが記録された、制御メモリ２１上に記憶されている変換テーブル（不図示）を参照し、前記RDコマンドに付帯して送られてくる外部アドレスとデータ長とから、RDデータが記憶されている記憶資源４０上の記憶領域を調べる（S411）。なお、変換テーブルは、前述した資源管理テーブルと同じものであってもよい。
【００４６】
つぎに、ＣＴＬ２３は、RDデータの前記記憶領域を、複数のデータブロックに分割し、各データブロックについてのデータ読み出し処理を担当するＣＴＬを決定する（S412）。担当のＣＴＬを決定する方法としては、あらかじめ定められた比率で各ＣＴＬに処理を振り分ける方法、ＣＴＬ２３，３３の負荷状態に応じて決定する方法、所定のアルゴリズムに従って割り当てる方法などがある。ＣＴＬ２３は、生成された各データブロックの記憶位置（例えば、ディスクドライブ上の先頭アドレスもしくはストライプ上の論理アドレス）とデータ長、およびそのデータブロックの処理担当となるＣＴＬを示す識別子とを、RDデータ管理テーブルに登録する（S413）。
【００４７】
つぎに、ＣＴＬ２３は、自身の読み出し担当となるデータブロックについてのデータ読み出しコマンドを、制御メモリ２１上に記憶されているRD処理キュー（不図示）に登録する（S414）。また、ＣＴＬ２３は、制御バス５０を通じてＣＴＬ３３が担当するデータブロックについての読み出し依頼コマンドを送信する（S415）。この読み出し指示コマンドには、各データブロックが記憶されている記憶資源４０上の記憶領域を特定する情報（例えば、読み出し開始位置とそのデータブロックのデータ長）が含まれる。ＣＴＬ３３は、読み出し依頼コマンドを受信すると、これを制御メモリ３１に記憶しているRD処理キューに登録する（S416）。
【００４８】
ＣＴＬ２３は、適宜なタイミングでRD処理キューにセットされているRDコマンドを実行し（S417）、対応するデータブロックから読み出したデータをキャッシュメモリ２４に記憶する。なお、この際、ＣＴＬ２３は、各データブロックから読み出したデータが記憶されているキャッシュメモリ２４上の先頭アドレスを、制御メモリ２４上のRDデータ管理テーブルに登録する。また、RDデータ管理テーブルの該当のデータブロックについての「完了フラグ」の欄に、該当データブロックについての読み出しを完了した旨を示すフラグをセットする。
【００４９】
一方、ＣＴＬ３３は、RD処理キューに登録されているRDコマンドを順に実行し（S418）、読み出したデータをキャッシュメモリ３４に記憶する。また、ＣＴＬ３３は、キャッシュメモリ３４に記憶されているデータを、制御バス５０を介してＣＴＬ２３に送信する（S419）。なお、ここで送信されるデータには、そのデータが前記のどのデータブロックに対応するデータであるかを特定する情報（例えば、データブロックごとに付与したID）が付帯する。
【００５０】
ＣＴＬ２３は、ＣＴＬ３３から送られてくる前記データをキャッシュメモリ２４に記憶する（S420）。一方、ＣＴＬ２３は、RDデータ管理テーブルを参照することで、前記RDコマンドについての全ての前記データブロックに対応するデータの読み出しが完了したかどうかを監視する（S421）。そして、全ての前記データブロックに対応するデータの読み出しが完了した場合、ＣＴＬ２３は、キャッシュメモリ２４に書き込まれている各データブロックに対応するデータを外部通信路１２を通じて外部装置１４に送信する（S422）。なお、このデータには、必要に応じて前記外部アドレス等を付帯させる。
【００５１】
また、RDデータ管理テーブルの該当RDコマンドの「全完了フラグ」の欄に当該RDコマンドについての読み出しを完了した旨を示すフラグをセットする（S423）。以上のようにして、読み出し処理が完了する。
【００５２】
ところで、書き込み処理のところで説明したように、読み出し処理の場合も同様に、データブロックの単位を、その記憶資源４０の運用に採用されているＲＡＩＤ方式に対応させたバイト単位やワード単位、もしくは、ブロック単位で分割するようにしてもよい。
【００５３】
また、以上に説明したデータ読み出し処理において、キャッシュメモリ２４，３４上に読み出そうとするデータが残存している場合には、記憶資源４０からの読み出すのではなく、キャッシュメモリ２４，３４上のデータを用いてRDデータを編成するようにしてもよい。
【００５４】
＝＝＝その他＝＝＝
以上では、記憶制御装置１０が、２つのデータコントローラを備える場合について説明したが、本発明はデータコントローラが３つ以上の場合にも拡張することができる。
【００５５】
なお、ＣＴＬ２３は、他の処理に並行して、WR処理キューやRD処理キューにセットされている読み出しコマンドを実行することができ、例えば、ＣＴＬ３３に書き込み依頼コマンドや読み出し依頼コマンドを送信するのに並行して、WR処理キューやRD処理キューにセットされているコマンドを実行することもできる。
【００５６】
【発明の効果】
本発明によれば、複数のデータコントローラを有する記憶制御装置において、データ入出力要求を効率よく処理することができる。
【図面の簡単な説明】
【図１】本発明の一実施例による、記憶制御装置の構成を示す図である。
【図２】本発明の一実施例による、データ書き込み処理の流れを説明するフローチャートである。
【図３】本発明の一実施例による、WRデータ管理テーブルを示す図である。
【図４】本発明の一実施例による、データ読み出し処理を説明するフローチャートである。
【図５】本発明の一実施例による、RDデータ管理テーブルを示す図である。
【符号の説明】
１２  外部通信路
２０，３０  制御部
２１，３１  制御メモリ
２３，３３  データコントローラ（ＣＴＬ）
２４，３４  キャッシュメモリ
４０  記憶資源
５０  制御バス
【図１】
0004219602.tif 000002
【図２】
0004219602.tif 000003
【図３】
0004219602.tif 000004
【図４】
0004219602.tif 000005
【図５】
0004219602.tif 000006