(57)【特許請求の範囲】
【請求項１】
データを記憶し、ＲＡＩＤグループを形成する複数の記憶装置と、
上位装置と通信するための第１通信制御部と、前記複数の記憶装置と通信するための第２通信制御部と、タイムアウト時間を第１値に設定するかまたは前記第１値よりも小さい第２値に設定するかを判定するためのタイムアウト時間設定用情報、前記複数の記憶装置内で発生した障害に関する情報を記憶する第１管理領域及び前記複数の記憶装置内で発生したタイムアウトエラーに関する情報を記憶する第２管理領域が含まれるメモリと、を有するコントローラと、を備え、
前記タイムアウト時間設定用情報は、前記複数の記憶装置のそれぞれを対象とするキューの数と、キューイングモードが先入れ先出しモードに設定されている場合の先入れ先出し用閾値と、キューイングモードが論理アドレスの近い順番に並び替える並び替えモードに設定されている場合の、前記先入れ先出し用閾値よりも小さい並び替え用閾値とを含んでおり、
前記第１管理領域は、前記複数の記憶装置のそれぞれに対し、発生した障害の数と、所定の回復措置を開始させる第１の回復用閾値とを対応付けて記憶しており、
前記第２管理領域は、前記第１管理領域とは異なる領域であり、前記複数の記憶装置のそれぞれに対し、発生したタイムアウトエラーの回数と、前記所定の回復措置を開始させる第２の回復用閾値とを対応付けて記憶しており、
前記第２の回復用閾値は、前記第１の回復用閾値よりも大きく設定されており、
前記第２通信制御部は、前記第１通信制御部が前記上位装置からの前記リード要求を受信すると、前記タイムアウト時間設定用情報に基づいて、
前記リード要求先の記憶装置を対象とする前記キューの数が、前記リード要求先の記憶装置に設定されているキューイングモードに対応する前記先入れ先出し用閾値または前記並び替え用閾値のいずれかの値以上である場合は、前記第１値を前記タイムアウト時間として設定し、
前記リード要求先の記憶装置を対象とする前記キューの数が、前記リード要求先の記憶装置に設定されているキューイングモードに対応する前記先入れ先出し用閾値または前記並び替え用閾値のいずれかの値未満である場合は、前記第１値よりも小さい前記第２値を前記タイムアウト時間として設定し、
前記第２通信制御部は、前記データのリードを前記リード要求先の記憶装置に要求し、
前記第２通信制御部は、設定された前記第１値または前記第２値の前記タイムアウト時間内に前記リード要求先の記憶装置から前記データを取得できない場合、前記タイムアウトエラーと判定し、
前記第２通信制御部は、前記タイムアウトエラーと判定された場合は、前記タイムアウトエラーの回数を前記第２管理領域に記憶させ、
前記第２通信制御部は、
前記第１値が前記タイムアウト時間として設定されている場合、前記リード要求先の記憶装置が含まれる前記ＲＡＩＤグループ内の他の記憶装置に、前記データと同一のストライプ列に属する他のデータのリードを要求し、
前記第２値が前記タイムアウト時間として設定されていて、設定された前記第２値の前記タイムアウト時間内に前記リード要求先の記憶装置から前記データを取得できない場合、前記タイムアウト時間を前記第１値に変更して、前記ＲＡＩＤグループ内の他の記憶装置に、前記データと同一のストライプ列に属する前記他のデータのリードを要求し、
前記第２通信制御部は、前記他の記憶装置から取得される前記他のデータに基づいて前記データを生成し、
前記第１通信制御部は、生成された前記データを前記上位装置に転送し、
前記第２通信制御部は、前記他の記憶装置から前記他のデータを設定された前記第１値または前記第２値の前記タイムアウト時間内に取得できない場合、前記リード要求が異常終了したことを前記第１通信制御部に報告する、
記憶制御装置。
【請求項２】
前記リード要求先の記憶装置に、所定時間内の応答を保証するための保証モードが設定されている場合、前記タイムアウト時間を前記第２値に設定する、
請求項１に記載の記憶制御装置。
【請求項３】
前記リード要求先の記憶装置が予め指定されている低速な記憶装置以外の記憶装置である場合に、前記リード要求先の記憶装置から前記データを読み出す場合のタイムアウト時間を前記第２値に設定する、
請求項１に記載の記憶制御装置。
【請求項４】
上位装置と複数の記憶装置とに接続される記憶制御装置を制御する方法であって、
前記記憶制御装置は、データを記憶し、ＲＡＩＤグループを形成する複数の記憶装置と、前記上位装置と通信するための第１通信制御部と、前記複数の記憶装置と通信するための第２通信制御部と、タイムアウト時間を第１値に設定するかまたは前記第１値よりも小さい第２値に設定するかを判定するためのタイムアウト時間設定用情報、前記複数の記憶装置内で発生した障害に関する情報を記憶する第１管理領域及び前記複数の記憶装置内で発生したタイムアウトエラーに関する情報を記憶する第２管理領域が含まれるメモリと、を有するコントローラと、を備え、
前記タイムアウト時間設定用情報は、前記複数の記憶装置のそれぞれを対象とするキューの数と、キューイングモードが先入れ先出しモードに設定されている場合の先入れ先出し用閾値と、キューイングモードが論理アドレスの近い順番に並び替える並び替えモードに設定されている場合の、前記先入れ先出し用閾値よりも小さい並び替え用閾値とを含んでおり、
前記第１管理領域は、前記複数の記憶装置のそれぞれに対し、発生した障害の数と、所定の回復措置を開始させる第１の回復用閾値とを対応付けて記憶しており、
前記第２管理領域は、前記第１管理領域とは異なる領域であり、前記複数の記憶装置のそれぞれに対し、発生したタイムアウトエラーの回数と、前記所定の回復措置を開始させる第２の回復用閾値とを対応付けて記憶しており、
前記第２の回復用閾値は、前記第１の回復用閾値よりも大きく設定されており、
前記第２通信制御部は、前記第１通信制御部が前記上位装置からの前記リード要求を受信すると、前記タイムアウト時間設定用情報に基づいて、
前記リード要求先の記憶装置を対象とする前記キューの数が、前記リード要求先の記憶装置に設定されているキューイングモードに対応する前記先入れ先出し用閾値または前記並び替え用閾値のいずれかの値以上である場合は、前記第１値を前記タイムアウト時間として設定し、
前記リード要求先の記憶装置を対象とする前記キューの数が、前記リード要求先の記憶装置に設定されているキューイングモードに対応する前記先入れ先出し用閾値または前記並び替え用閾値のいずれかの値未満である場合は、前記第１値よりも小さい前記第２値を前記タイムアウト時間として設定し、
前記第２通信制御部は、前記データのリードを前記リード要求先の記憶装置に要求し、
前記第２通信制御部は、設定された前記第１値または前記第２値の前記タイムアウト時間内に前記リード要求先の記憶装置から前記データを取得できない場合、前記タイムアウトエラーと判定し、
前記第２通信制御部は、前記タイムアウトエラーと判定された場合は、前記タイムアウトエラーの回数を前記第２管理領域に記憶させ、
前記第２通信制御部は、
前記第１値が前記タイムアウト時間として設定されている場合、前記リード要求先の記憶装置が含まれる前記ＲＡＩＤグループ内の他の記憶装置に、前記データと同一のストライプ列に属する他のデータのリードを要求し、
前記第２値が前記タイムアウト時間として設定されていて、設定された前記第２値の前記タイムアウト時間内に前記リード要求先の記憶装置から前記データを取得できない場合、前記タイムアウト時間を前記第１値に変更して、前記ＲＡＩＤグループ内の他の記憶装置に、前記データと同一のストライプ列に属する前記他のデータのリードを要求し、
前記第２通信制御部は、前記他の記憶装置から取得される前記他のデータに基づいて前記データを生成し、
前記第１通信制御部は、生成された前記データを前記上位装置に転送し、
前記第２通信制御部は、前記他の記憶装置から前記他のデータを設定された前記第１値または前記第２値の前記タイムアウト時間内に取得できない場合、前記リード要求が異常終了したことを前記第１通信制御部に報告する、
記憶制御装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及び記憶制御装置の制御方法に関する。
【背景技術】
【０００２】
企業等のユーザは、記憶制御装置を用いてデータを管理する。記憶制御装置は、複数の記憶装置がそれぞれ有する物理的記憶領域をＲＡＩＤ（Redundant Array of Independent Disks）に基づく冗長な記憶領域としてグループ化する。記憶制御装置は、グループ化された記憶領域を用いて論理ボリュームを生成し、ホストコンピュータ（以下、ホスト）に提供する。【０００３】
記憶制御装置は、ホストからのリード要求を受信すると、ハードディスクにデータの読出しを指示する。ハードディスクから読み出されたデータは、アドレス変換されて、キャッシュメモリに記憶され、ホストに送信される。【０００４】
ハードディスクは、記録媒体または磁気ヘッド等に何らかの問題が生じて、記録媒体からデータを読み出せなかった場合、時間をおいてリトライする。リトライ処理を実行しても記録媒体からデータを読み出せない場合、記憶制御装置は、コレクションコピーを実行して、ホストから要求されたデータを生成する。コレクションコピーとは、障害の生じたハードディスクと同一パリティグループに属する他の各ハードディスクから、データ及びパリティを読出して、データを回復させる方法である（特許文献１）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２１３７２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ハードディスク内でリトライ処理が行われると、ホストから発行されたリード要求が処理されるまでの時間が長くなる。そのため、記憶制御装置の応答性能が悪化し、ホスト上のアプリケーションプログラムにより提供されるサービスの品質が低下する。【０００７】
ホスト上で稼働するアプリケーションプログラムが、応答時間を気にしないのであれば、特に問題は生じない。しかし、例えば、発券プログラム、予約プログラム、動画配信プログラム等のように、クライアントマシンからの多量のアクセスを短時間で処理しなければならないアプリケーションプログラムの場合、記憶制御装置の応答時間が長くなると、サービス品質が低下する。【０００８】
そこで、本発明の目的は、記憶装置の応答時間が長い場合でも、記憶制御装置から上位装置への応答時間が長くなるのを抑制できるようにした記憶制御装置及び記憶制御装置の制御方法を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００９】
上記課題を解決すべく、本発明の第１観点に従う記憶制御装置は、上位装置からの要求に応じてデータを入出力する記憶制御装置であって、データを記憶する複数の記憶装置と、上位装置及び各記憶装置に接続され、上位装置からの要求に応じて各記憶装置のうち所定の記憶装置にデータを入出力させるコントローラと、を備え、コントローラは、上位装置からアクセス要求を受信すると、所定の場合にタイムアウト時間を第１値よりも短い第２値に設定して、各記憶装置のうち所定の記憶装置にアクセス要求に対応する所定のデータの読出しを要求し、設定されたタイムアウト時間内に所定の記憶装置からデータを取得できない場合は、タイムアウトエラーの発生であると検出し、タイムアウトエラーが検出された場合は、各記憶装置内で発生した障害を管理するための第１管理部とは異なる第２管理部により、タイムアウトエラーの発生を管理させ、さらに、所定の記憶装置と関連する他の記憶装置に、所定のデータに対応する他のデータの読み出しを要求し、他の記憶装置から取得される他のデータに基づいて所定のデータを生成し、生成された所定のデータを上位装置に転送する。【００１０】
第２観点では、第１観点において、コントローラは、上位装置と通信するための第１通信制御部と、各記憶装置と通信するための第２通信制御部と、第１通信制御部及び第２通信制御部により使用されるメモリとを備え、メモリには、タイムアウト時間を第１値または第２値のいずれに設定するかを判定するためのタイムアウト時間設定用情報が記憶されており、タイムアウト時間設定用情報は、各記憶装置を対象とするキューの数と、キューイングモードが先入れ先出しモードに設定されている場合の先入れ先出し用閾値と、キューイングモードが論理アドレスの近い順番に並び替える並び替えモードに設定されている場合の、先入れ先出し用閾値よりも小さい並び替え用閾値とを含んでおり、第１通信制御部が上位装置からのアクセス要求を受信すると、第２通信制御部は、タイムアウト時間設定用情報に基づいて、所定の記憶装置を対象とするキューの数が、所定の記憶装置に設定されているキューイングモードに対応する先入れ先出し用閾値または並び替え用閾値のいずれかの値以上である場合は、第１値を、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間として選択し、所定の記憶装置を対象とするキューの数が、所定の記憶装置に設定されているキューイングモードに対応する先入れ先出し用閾値または並び替え用閾値のいずれかの値未満である場合は、第１値よりも小さい第２値を、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間として選択し、第２通信制御部は、所定のデータの読出しを所定の記憶装置に要求し、第２通信制御部は、設定されたタイムアウト時間内に所定の記憶装置から所定のデータを取得できない場合、タイムアウトエラーの発生を検出し、第２通信制御部は、タイムアウトエラーが検出された場合は、各記憶装置内で発生した障害を管理するための第１管理部とは異なる第２管理部により、タイムアウトエラーの発生を管理させ、障害の生じた記憶装置に関する所定の回復措置を開始させるための回復用閾値の値は、第１管理部よりも第２管理部の方が大きく設定されており、第２通信制御部は、第１値が選択される他のタイムアウト時間を設定して、所定の記憶装置と関連する他の記憶装置に、所定のデータに対応する他のデータの読み出しを要求し、他の記憶装置から取得される他のデータに基づいて所定のデータを生成し、生成された所定のデータを上位装置に転送し、第２通信制御部は、もしも他の記憶装置から他のデータを他のタイムアウト時間内に取得できない場合であって、タイムアウト時間として第２値が選択されていた場合、タイムアウト時間を第１値に変更して、所定のデータの読出しを所定の記憶装置に再度要求する。【００１１】
第３観点では、第１観点において、第１管理部は、各記憶装置に発生した障害の数と、障害の発生した記憶装置に関する所定の回復措置を開始させるための回復用閾値とを対応付けて管理しており、第２管理部は、各記憶装置に発生したタイムアウトエラーの数と、タイムアウトエラーの発生した記憶装置に関する所定の回復措置を開始させるための他の回復用閾値とを対応付けて管理しており、第２管理部により管理される他の回復用閾値は、第１管理部により管理される回復用閾値よりも大きく設定されている。【００１２】
第４観点では、第１観点において、コントローラは、所定の記憶装置に、所定時間内の応答を保証するための保証モードが設定されている場合、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間を第２値に設定する。【００１３】
第５観点では、コントローラは、所定の記憶装置に関するキューイングモードが先入れ先出しモードに設定されている場合、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間を第２値に設定する。【００１４】
第６観点では、第１観点において、コントローラは、所定の記憶装置が予め指定されている低速な記憶装置以外の記憶装置である場合に、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間を第２値に設定する。【００１５】
第７観点では、第１観点において、コントローラは、所定の記憶装置を対象とするキューの数が所定の閾値よりも小さい場合に、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間を第２値に設定する。【００１６】
第８観点では、第１観点において、コントローラは、タイムアウト時間を第１値または第２値のいずれに設定するかを判定するためのタイムアウト時間設定用情報であって、各記憶装置を対象とするキューの数と、キューイングモードが先入れ先出しモードに設定されている場合の先入れ先出し用閾値と、キューイングモードが論理アドレスの近い順番に並び替える並び替えモードに設定されている場合の、先入れ先出し用閾値よりも小さい並び替え用閾値とを含むタイムアウト時間設定用情報を備えており、さらに、コントローラは、所定の記憶装置を対象とするキューの数が、所定の記憶装置に設定されているキューイングモードに対応する先入れ先出し用閾値または並び替え用閾値のいずれかの値以上である場合は、第１値を、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間として選択し、所定の記憶装置を対象とするキューの数が、所定の記憶装置に設定されているキューイングモードに対応する先入れ先出し用閾値または並び替え用閾値のいずれかの値未満である場合は、第１値よりも小さい第２値を、所定の記憶装置から所定のデータを読み出す場合のタイムアウト時間として選択する。【００１７】
第９観点では、第１観点において、コントローラは、タイムアウトエラーが検出された場合、第１値が選択される他のタイムアウト時間を設定して、所定の記憶装置と関連する他の記憶装置に、所定のデータに対応する他のデータの読み出しを要求する。【００１８】
第１０観点では、第１観点において、コントローラは、タイムアウトエラーが検出された場合、第２値が選択される他のタイムアウト時間を設定して、所定の記憶装置と関連する他の記憶装置に、所定のデータに対応する他のデータの読出しを要求する。【００１９】
第１１観点では、第１０観点において、コントローラは、他の記憶装置から他のタイムアウト時間内に他のデータを取得できなかった場合、タイムアウト時間を第１値に変更して、所定のデータの読出しを所定の記憶装置に再度要求する。【００２０】
第１２観点では、第１０観点において、コントローラは、他の記憶装置から他のタイムアウト時間内に他のデータを取得できなかった場合、ユーザに通知する。【００２１】
本発明は、記憶制御装置の制御方法として把握することもできる。さらに、本発明の構成の少なくとも一部は、コンピュータプログラムとして構成できる。このコンピュータプログラムは、記録媒体に固定して配布したり、通信ネットワークを介して配信することができる。さらに、前記観点の組合せ以外の他の組合せも本発明の範囲に含まれる。
【図面の簡単な説明】
【００２２】
【図１】図１は、本発明の実施形態の全体概念を示す説明図である。
【図２】図２は、記憶制御装置を含むシステムの全体構成を示す説明図である。
【図３】図３は、記憶制御装置のブロック図である。
【図４】図４は、スロットと記憶装置とのマッピング状態を示す説明図である。
【図５】図５は、キューイングモードの相違を示す説明図である。
【図６】図６は、記憶装置と仮想デバイス（RAIDグループ）との関係を管理するテーブルである。
【図７】図７は、仮想デバイスを管理するテーブルである。
【図８】図８は、管理端末から設定可能なモードを管理するテーブルである。
【図９】図９は、ジョブを管理するためのテーブルである。
【図１０】図１０は、リード処理を示すフローチャートである。
【図１１】図１１は、ステージング処理を示すフローチャートである。
【図１２】図１２は、コレクションリード処理を示すフローチャートである。
【図１３】図１３は、エラーカウント処理を示すフローチャートである。
【図１４】図１４は、エラーカウントを管理するテーブルを示す。
【図１５】図１５は、タイムアウト時間を通常値よりも短く設定するための方法を示す説明図である。
【図１６】図１６は、第２実施例に係り、タイムアウト時間を設定するための閾値を管理するテーブルである。
【図１７】図１７は、第３実施例に係り、コレクションリード処理を示すフローチャートである。
【図１８】図１８は、第４実施例に係り、ステージング処理の状態を管理するテーブルである。
【図１９】図１９は、ステージング処理を示すフローチャートである。
【図２０】図２０は、図１９に続くフローチャートである。
【図２１】図２１は、コレクションリード処理のフローチャートである。
【図２２】図２２は、第５実施例に係り、ステージング処理を示すフローチャートである。
【図２３】図２３は、各記憶装置の応答時間を管理するテーブルである。
【図２４】図２４は、第６実施例に係るシステムの全体構成図である。
【図２５】図２５は、ステージング処理のフローチャートである。
【図２６】図２６は、図２５に続くフローチャートである。
【発明を実施するための形態】
【００２３】
以下、図面に基づいて、本発明の実施の形態を説明する。最初に、図１を参照して本発明の概要を説明し、次に、図２以降を参照して実施例について説明する。図１は、本発明の理解及び実施に必要な程度で記載されている。本発明の範囲は、図１に記載の構成に限定されない。図１に記載されていない特徴は、後述の実施例で明らかにされる。
【００２４】
図１は、全体概要を示す。図１の左側にはコンピュータシステムの構成が、その右側には処理の概略がそれぞれ示されている。コンピュータシステムは、記憶制御装置１と、上位装置としてのホスト２とを備えている。記憶制御装置１は、コントローラ３と、記憶装置４とを備える。コントローラ３は、第１通信制御部としてのチャネルアダプタ５と、メモリ６と、第２通信制御部としてのディスクアダプタ７とを備える。以下の説明では、チャネルアダプタをＣＨＡと、ディスクアダプタをＤＫＡと略記する。図１中の点線で囲われた範囲は、ＤＫＡ７による処理内容を示す。
【００２５】
記憶装置４としては、例えば、ハードディスク装置、半導体メモリ装置、光ディスク装置、光磁気ディスク装置、磁気テープ装置、フレキシブルディスク装置等の、データを読み書き可能な種々の装置を利用可能である。
【００２６】
記憶装置としてハードディスク装置を用いる場合、例えば、ＦＣ（Fibre Channel）ディスク、ＳＣＳＩ（Small Computer System Interface）ディスク、ＳＡＴＡディスク、ＡＴＡ（AT Attachment）ディスク、ＳＡＳ（Serial Attached SCSI）ディスク等を用いることができる。記憶装置として半導体メモリ装置を用いる場合、例えば、フラッシュメモリ、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、ＭＲＡＭ（MagnetoresistiveRandom Access
Memory）、相変化メモリ（Ovonic Unified Memory）、ＲＲＡＭ（Resistance RAM）、ＰＲＡＭ（Phase change RAM）等の種々のメモリ装置を利用可能である。
【００２７】
ホスト２上で稼働するアプリケーションプログラムは、記憶制御装置１に向けてアクセス要求（図中「ＩＯ」）を発行させる。アクセス要求には、リード要求とライト要求とがある。リード要求は、記憶装置４からのデータ読出しを要求する。ライト要求は、記憶装置４へのデータ書込みを要求する。記憶制御装置１がライト要求を処理する場合、最初に、既存データの読出しが行われる場合も多い。つまり、ライト要求を処理する場合、記憶制御装置１内ではデータの読出しが行われる。
【００２８】
ＣＨＡ５は、ホスト２からのアクセス要求（例えば、リード要求）を受信すると、要求されたデータを取得するためのジョブを生成する（Ｓ１）。
【００２９】
ＤＫＡ７は、ＣＨＡ５により作成されたジョブを検出すると、ホスト２の要求するデータを記憶している所定の記憶装置４に、リード要求を発行する（Ｓ２）。リード要求を受領した記憶装置４は、記録媒体からデータを読み出そうとする（Ｓ３）。
【００３０】
ＤＫＡ７は、記憶装置４からデータを取得するまでに要する上限時間（タイムアウト時間）を設定する（Ｓ４）。以下、タイムアウト時間をＴＯＶ（Time Out Value）と略記する場合がある。
【００３１】
予め複数のＴＯＶが用意されている。第１値としてのＴＯＶ１と、第２値としてのＴＯＶ２である。ＴＯＶ１は、通常設定される値である。ＴＯＶ２は、応答性能を重視する場合に設定される値であり、ＴＯＶ１よりも短く設定される。従って、ＴＯＶ１を通常値、ＴＯＶ２を短縮値と呼び変えることもできる。
【００３２】
一つの例では、ＴＯＶ１は、４−６秒程度に設定される。ＴＯＶ２は、１秒前後、例えば、０．９秒程度に設定される。ＴＯＶ２は、コレクションリード処理に要する時間とＴＯＶ２との合計値が例えば２秒程度の所定時間に収まるように設定される。
【００３３】
ＤＫＡ７は、予め設定されている条件に基づいて、タイムアウト時間をＴＯＶ１またはＴＯＶ２のいずれか一つに設定する。詳細は後述するが、例えば、記憶制御装置１の応答時間を保証するモードが設定されている場合、ＴＯＶ２が選択される。読出し対象の記憶装置３に関するキューイングモード（キューの処理方法）が、先入れ先出し（FIFO：First In First Out）モードに設定されている場合、ＴＯＶ２が選択される。読出し対象の記憶装置４が低速な記憶装置以外の場合は、ＴＯＶ２が選択される。さらに、読出し対象の記憶装置４の稼働状況（負荷状況）に基づいて、ＴＯＶ１またはＴＯＶ２のいずれかを選択することもできる。
【００３４】
設定されたタイムアウト時間内に記憶装置４から応答があった場合、記憶装置４から読み出されたデータはＣＨＡ５を介してホスト２に送信される。これに対し、記憶装置４の内部で何らかのエラーが発生して、タイムアウト時間内に応答することができなかった場合、ＤＫＡ７は、タイムアウトエラーの発生であると判断する（Ｓ５）。
【００３５】
ＤＫＡ７は、タイムアウトエラー（タイムアウト障害）の発生をタイムアウトエラーを管理するための管理部（第２管理部）に記憶させる。記憶装置４から報告される通常の障害は、記憶装置の通常の障害を管理するための管理部（第１管理部）に記憶される。
【００３６】
ＤＫＡ７は、タイムアウトエラーを検出すると、Ｓ３で発行した読出し要求をリセットする（Ｓ７）。ＤＫＡ７は、コレクションリード処理を開始する（Ｓ８）。コレクションリード処理とは、タイムアウトエラーの検出された記憶装置４と同一のパリティグループに属する他の各記憶装置４から、最初の読出し対象データと同一ストライプ列に属する他のデータ（及びパリティ）を読出し、論理演算により最初の読出し対象データを生成する処理である。コレクションリード処理はコレクションコピー処理とも呼ばれる。
【００３７】
ＤＫＡ７は、復元されたデータをキャッシュメモリに転送させる（Ｓ９）。図示は省略するが、ＣＨＡ５は、キャッシュメモリに転送されたデータをホスト２に送信する。これにより、ホスト２から受信したリード要求（リードコマンド）の処理が完了する。
【００３８】
このように構成される本実施形態では、ＤＫＡ７は、所定の条件を満たす場合に、記憶装置４に送信したリード要求について短いタイムアウト時間ＴＯＶ２を設定し、タイムアウトエラーが生じた場合は、リード要求をリセットさせて、コレクションリード処理を実行する。
【００３９】
従って、高負荷等の原因によって、読出し対象の記憶装置４の応答性能が低下している場合でも、ＴＯＶ２が経過したときはコレクションリード処理を行うため、記憶制御装置１の応答性能が低下するのを防止できる。記憶制御装置１の応答時間は、ＴＯＶ２にコレクションリード処理に要する時間を加えた値となり、所定の応答時間内にホスト２にデータを送信することができる。
【００４０】
本実施形態では、例えば、応答時間保証モードが設定されている場合、キューイングモードがＦＩＦＯの場合、低速な記憶装置ではない場合、記憶装置が高負荷ではない場合に、記憶装置４からデータを読み出す場合のタイムアウト時間を通常よりも短い値ＴＯＶ２に設定する。従って、本実施形態では、状況に応じて、記憶制御装置１の応答性能低下を防止することができる。
【００４１】
本実施形態では、通常の記憶装置の障害を管理する管理部とは別の管理部で、タイムアウトエラーを管理する。従って、本実施形態では、障害の発生した記憶装置４に関する回復措置（例えば、その記憶装置４のデータを予備の記憶装置にコピーする処理、または、その記憶装置４内のデータをコレクションコピー処理により復元させる処理）の起動を、タイムアウトエラーと通常の障害とで分けて制御できる。
【００４２】
つまり、本実施形態では、記憶制御装置１の応答性能の低下を防止するために、所定条件下で、記憶装置４からデータを読み出す場合のタイムアウト時間を従来の値ＴＯＶ１よりも短い値ＴＯＶ２に設定する。従って、記憶装置４の状態によっては、タイムアウトエラーが比較的多く発生する可能性がある。タイムアウトエラーと通常の障害とを共通に管理すると、両方を合わせた障害カウント数が閾値を超える可能性が高くなり、回復措置の行われる回数が増加する。回復措置が頻繁に行われると、記憶制御装置１の負荷が増大し、記憶制御装置１の応答性能に悪影響を与える可能性がある。そこで、本実施形態では、タイムアウトエラーと通常の記憶装置障害とを分けて管理する。
【実施例１】
【００４３】
図２は、本実施例に係る記憶制御装置１０を含むシステムの全体構成を示す。このシステムは、例えば、少なくとも一つの記憶制御装置１０と、一つまたは複数のホスト２０と、少なくとも一つの管理端末３０とを含んで構成することができる。【００４４】
先に図１で述べた実施形態との対応関係を説明する。記憶制御装置１０は図１の記憶制御装置１に、記憶装置２１０は図１の記憶装置４に、ホスト２０は図１のホスト２に、コントローラ１００は図１のコントローラ３に、チャネルアダプタ１１０は図１のＣＨＡ５に、ディスクアダプタ１２０は図１のＤＫＡ７に、キャッシュメモリ１３０及び共有メモリ１４０は図１のメモリ６に、それぞれ対応する。【００４５】
先に、ホスト２０及び管理端末３０について説明し、次に記憶制御装置１０について説明する。ホスト２０は、例えば、メインフレームコンピュータまたはサーバコンピュータとして構成される。ホスト２０は、通信ネットワークＣＮ１を介して記憶制御装置１０に接続されている。通信ネットワークＣＮ１は、例えば、ＦＣ−ＳＡＮ（Fibre Channel-Storage Area Network）、または、ＩＰ−ＳＡＮ（Internet Protocol_SAN）のような通信ネットワークとして構成することができる。【００４６】
管理端末３０は、記憶制御装置１０内のサービスプロセッサ１６０と通信ネットワークＣＮ３を介して接続される。サービスプロセッサ１６０は、内部ネットワークＣＮ４を介してＣＨＡ１１０等に接続されている。通信ネットワークＣＮ３，ＣＮ４は、例えば、ＬＡＮ（Local Area Network）のような通信ネットワークとして構成される。管理端末３０は、サービスプロセッサ（以下、ＳＶＰ）１６０を介して、記憶制御装置１０内の各種情報を収集する。さらに、管理端末３０は、ＳＶＰ１６０を介して、記憶制御装置１０内の各種設定を指示することができる。【００４７】
記憶制御装置１０の構成を説明する。記憶制御装置１０は、コントローラ１００と、記憶装置搭載部２００とに大別することができる。コントローラ１００は、例えば、少なくとも一つ以上のＣＨＡ１１０と、少なくとも一つ以上のＤＫＡ１２０と、少なくとも一つ以上のキャッシュメモリ１３０と、少なくとも一つ以上の共有メモリ１４０と、接続部（図中「ＳＷ」）１５０と、ＳＶＰ１６０とを備えて構成される。なお、複数のコントローラ１００をスイッチを介して相互に接続する構成でもよい。例えば、複数のコントローラ１００からクラスタを構成することもできる。【００４８】
ＣＨＡ１１０は、ホスト２０との間のデータ通信を制御するためのもので、例えば、マイクロプロセッサ及びローカルメモリ等を備えたコンピュータ装置として構成される。各ＣＨＡ１１０は、少なくとも一つ以上の通信ポートを備えている。【００４９】
ＤＫＡ１２０は、各記憶装置２１０との間のデータ通信を制御するためのもので、ＣＨＡ１１０と同様に、マイクロプロセッサ及びローカルメモリ等を備えたコンピュータ装置として構成される。【００５０】
各ＤＫＡ１２０と各記憶装置２１０とは、例えば、ファイバチャネルプロトコルに従う通信経路ＣＮ２を介して接続されている。各ＤＫＡ１２０と各記憶装置２１０とは、ブロック単位のデータ転送を行う。【００５１】
コントローラ１００が各記憶装置２１０にアクセスする経路は、冗長化されている。いずれか一方のＤＫＡ１２０または通信経路ＣＮ２に障害が発生した場合でも、コントローラ１００は、他方のＤＫＡ１２０または通信経路ＣＮ２を用いて、記憶装置２１０にアクセス可能である。同様に、ホスト２０とコントローラ１００との間の経路も冗長化することができる。ＣＨＡ１１０及びＤＫＡ１２０の構成は、図３で後述する。【００５２】
ＣＨＡ１１０及びＤＫＡ１２０の動作を簡単に説明する。ＣＨＡ１１０は、ホスト２０から発行されたリードコマンドを受信すると、このリードコマンドを共有メモリ１４０に記憶させる。ＤＫＡ１２０は、共有メモリ１４０を随時参照しており、未処理のリードコマンドを発見すると、記憶装置２１０からデータを読み出して、キャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０に移されたデータを読み出し、ホスト２０に送信する。ＤＫＡ１２０が記憶装置２１０から読み出したデータをキャッシュメモリ１３０に転送させる処理をステージング処理と呼ぶ。ステージング処理の詳細は後述する。【００５３】
一方、ＣＨＡ１１０は、ホスト２０から発行されたライトコマンドを受信すると、ライトコマンドを共有メモリ１４０に記憶させる。また、ＣＨＡ１１０は、受信したライトデータをキャッシュメモリ１３０に記憶させる。ＣＨＡ１１０は、キャッシュメモリ１３０にライトデータを記憶させた後、ホスト２０に書込み完了を報告する。ＤＫＡ１２０は、共有メモリ１４０に記憶されたライトコマンドに従って、キャッシュメモリ１３０に記憶されたデータを読出し、所定の記憶装置２１０に記憶させる。【００５４】
キャッシュメモリ１３０は、例えば、ホスト２０から受信したユーザデータ等を記憶するものである。キャッシュメモリ１３０は、例えば、揮発性メモリまたは不揮発性メモリから構成される。共有メモリ１４０は、例えば、不揮発メモリから構成される。共有メモリ１４０には、後述する各種テーブルＴや管理情報等が記憶される。【００５５】
共有メモリ１４０及びキャッシュメモリ１３０は、同一のメモリ基板上に混在して設けることができる。あるいは、メモリの一部をキャッシュ領域として使用し、他の一部を制御領域として使用することもできる。【００５６】
接続部１５０は、各ＣＨＡ１１０と、各ＤＫＡ１２０と、キャッシュメモリ１３０及び共有メモリ１４０をそれぞれ接続させる。これにより、全てのＣＨＡ１１０，ＤＫＡ１２０は、キャッシュメモリ１３０及び共有メモリ１４０にそれぞれアクセス可能である。接続部１５０は、例えばクロスバスイッチ等として構成することができる。【００５７】
ＳＶＰ１６０は、内部ネットワークＣＮ４を介して、各ＣＨＡ１１０及び各ＤＫＡ１２０とそれぞれ接続されている。また、ＳＶＰ１６０は、通信ネットワークＣＮ３を介して、管理端末３０に接続される。ＳＶＰ１６０は、記憶制御装置１０内部の各種状態を収集し、管理端末３０に提供する。なお、ＳＶＰ１６０は、ＣＨＡ１１０またはＤＫＡ１２０のいずれか一方にのみ接続されてもよい。ＳＶＰ１６０は、共有メモリ１４０を介して、各種のステータス情報を収集可能だからである。【００５８】
コントローラ１００の構成は、上述した構成に限定されない。例えば、一つまたは複数の制御基板上に、ホスト２０との間のデータ通信を行う機能と、記憶装置２１０との間のデータ通信を行う機能と、データを一時的に保存する機能と、各種テーブル類を書換可能に保存する機能とを、それぞれ設ける構成でもよい。【００５９】
記憶装置搭載部２００の構成について説明する。記憶装置搭載部２００は、複数の記憶装置２１０を備えている。各記憶装置２１０は、例えば、ハードディスク装置として構成される。ハードディスク装置に限らず、フラッシュメモリ装置、光磁気記憶装置、ホログラフィックメモリ装置等を用いることができる場合もある。【００６０】
ＲＡＩＤ構成等によっても相違するが、例えば、２個１組や４個１組等の所定数の記憶装置２１０によって、パリティグループ２２０が構成される。パリティグループ２２０は、パリティグループ２２０内の各記憶装置２１０がそれぞれ有する物理的記憶領域を仮想化したものである。【００６１】
従って、パリティグループ２２０は、仮想化された物理的記憶領域である。この仮想化された物理的記憶領域を、本実施例ではＶＤＥＶと呼ぶ場合がある。その仮想化された物理的記憶領域には、論理的記憶装置（ＬＤＥＶ）２３０を一つまたは複数設けることができる。論理的記憶装置２３０は、ＬＵＮ（Logical Unit Number ）に対応付けられて、ホスト２０に提供される。論理的記憶装置２３０は、論理ボリュームとも呼ばれる。【００６２】
図３は、ＣＨＡ１１０及びＤＫＡ１２０の構成を示すブロック図である。ＣＨＡ１１０は、例えば、プロトコルチップ１１１と、ＤＭＡ回路１１２と、マイクロプロセッサ１１３とを備えている。プロトコルチップ１１１は、ホスト２０との通信を行うための回路である。マイクロプロセッサ１１３は、ＣＨＡ１１０の全体動作を制御する。ＤＭＡ回路１１２は、プロトコルチップ１１１とキャッシュメモリ１３０との間のデータ転送をＤＭＡ（Direct Memory Access）方式で行うための回路である。【００６３】
ＤＫＡ１２０は、ＣＨＡ１１０と同様に、例えば、プロトコルチップ１２１と、ＤＭＡ回路１１２とマイクロプロセッサ１２３を備える。さらに、ＤＫＡ１２０は、パリティ生成回路１２４も備えている。【００６４】
プロトコルチップ１２１は、各記憶装置２１０と通信するための回路である。マイクロプロセッサ１２３は、ＤＫＡ１２０の全体動作を制御する。パリティ生成回路１２４は、キャッシュメモリ１３０に記憶されたデータに基づいて所定の論理演算を行うことにより、パリティデータを生成する回路である。ＤＭＡ回路１２２は、記憶装置２１０とキャッシュメモリ１３０との間のデータ転送を、ＤＭＡ方式で行うための回路である。【００６５】
図４は、スロット３００と記憶装置２１０とのマッピング状態を模式的に示す説明図である。図４（ａ）はＲＡＩＤ５の場合を、図４（ｂ）はＲＡＩＤ１の場合を示す。【００６６】
図４（ａ）は、３個のデータディスク（＃０，＃１，＃２）と１個のパリティディスク（＃３）とから、３Ｄ＋１ＰのＲＡＩＤ５を構成する場合を示す。データディスク（＃０）にはスロット＃０〜スロット＃７が、データディスク（＃１）にはスロット＃８〜スロット＃１５が、データディスク（＃２）にはスロット＃１６〜スロット＃２３が、右側のパリティディスク（＃３）にはパリティ＃０〜＃７が、それぞれ配置される。即ち、各データディスクには、それぞれ連続する８個のスロットが配置される。【００６７】
パリティが８スロット分（＃０〜＃７）のサイズを、パリティサイクルと呼ぶ。図示するパリティサイクルの次のパリティサイクルでは、ディスク（＃３）の左隣のディスク（＃２）にパリティが記憶される。さらに次のパリティサイクルでは、ディスク（＃１）にパリティが記憶される。このように、パリティデータを記憶するディスクは、パリティサイクル毎に移動する。図４（ａ）からわかるように、一つのパリティサイクルに含まれるスロットの数は、データディスクの数に８を乗ずることにより求められる。【００６８】
図５は、キューの処理方法を模式的に示す。図５（ａ）には、１番から７番までの合計７個のキューが示されている。図５（ａ）の横軸は、記憶装置２１０の記憶領域上の論理アドレスを示す。キューの番号は、コマンドの受付順番を示す。キュー間の距離は、論理アドレス上の距離に対応する。【００６９】
図５（ｂ）は、キューの処理方法（モード）を示す。キューイングモードとしては、例えば、ＦＩＦＯモードと、並び替えモードとが知られている。ＦＩＦＯモードでは、先に受信したキューから処理される。従って、１番目のキューから７番目のキューまで順番通りに処理されていく。これに対し、並び替えモードでは、できるだけ回転待ち時間及びシーク待ち時間を短縮させるためにキューを並び替える。図示の例では、１番目のキュー、６番目のキュー、３番目のキュー、５番目のキュー、４番目のキュー、２番目のキューの順番で処理される。２番目のキューは、早い時期に生成されているにもかかわらず、その処理は後回しにされる。もしも、４番目のキューの処理が完了する前に、７番目のキューを受信した場合、４番目のキューの直後に、７番目のキューが処理され、２番目のキューは最後に処理される。【００７０】
図５に示すように特定の狭い領域にアクセスが集中し、希に、離れた位置にアクセスするコマンドが受領された場合は、その一つだけ離れたコマンドの処理は、後から受領されたコマンドに次々に追い抜かされる。その一つだけ離れたコマンドは、長時間（例えば、１秒程度）処理されない可能性がある。このように、並び替えモードは、ＦＩＦＯモードよりも平均応答時間は高速になるが、応答時間の最大値も大きくなる。【００７１】
図６は、装置ＩＤとＶＤＥＶとの対応関係を管理するテーブルＴ１０を示す。この管理テーブルＴ１０は共有メモリ１４０に記憶される。ＣＨＡ１１０，ＤＫＡ１２０は、テーブルＴ１０の少なくとも一部を、ＣＨＡ１１０，ＤＫＡ１２０内のローカルメモリにコピーして使用することができる。【００７２】
装置ＩＤ−ＶＤＥＶ対応関係管理テーブルＴ１０は、論理ボリューム２３０と仮想的な中間記憶装置としてのＶＤＥＶ２２０との対応関係を管理する。管理テーブルＴ１０は、例えば、装置ＩＤ欄Ｃ１１と、ＶＤＥＶ番号欄Ｃ１２と、開始スロット欄Ｃ１３とスロット数欄Ｃ１４とを対応付けて管理する。【００７３】
装置ＩＤ欄Ｃ１１には、論理ボリューム２３０を識別するための情報が記憶される。ＶＤＥＶ番号欄Ｃ１２には、ＶＤＥＶ２２０を識別するための情報が記憶される。開始スロット欄Ｃ１３には、論理ボリューム２３０がＶＤＥＶ２２０内のどのスロットから始まるのを示すスロット番号が記憶される。スロット数欄Ｃ１４には、論理ボリューム２３０を構成するスロット数が記憶される。【００７４】
図７は、ＶＤＥＶ２２０を管理するためのテーブルＴ２０を示す。管理テーブルＴ２０は、共有メモリ１４０に記憶される。ＣＨＡ１１０及びＤＫＡ１２０は、管理テーブルＴ２０の少なくとも一部を、ローカルメモリにコピーして使用することができる。【００７５】
ＶＤＥＶ管理テーブルＴ２０は、例えば、ＶＤＥＶ番号欄Ｃ２１と、スロットサイズ欄Ｃ２２と、ＲＡＩＤレベル欄Ｃ２３と、データドライブ数欄Ｃ２４と、パリティサイクルスロット数欄Ｃ２４と、ディスクタイプ欄Ｃ２６と、キューイングモード欄Ｃ２７と、応答時間保証モード欄Ｃ２８とを対応付けて管理する。【００７６】
ＶＤＥＶ番号欄Ｃ２１には、各ＶＤＥＶ２２０を識別する情報が記憶される。スロットサイズ欄Ｃ２２には、ＶＤＥＶに対応付けられるスロットの数が記憶されるを示す。ＲＡＩＤレベル欄Ｃ２３には、ＲＡＩＤ１〜ＲＡＩＤ６のような、ＲＡＩＤの種類を示す情報が記憶される。データドライブ数欄Ｃ２４には、データを記憶する記憶装置２１０の数が記憶される。【００７７】
パリティサイクルスロット数欄Ｃ２４には、一つのパリティサイクルに含まれるスロットの数が記憶される。そのスロット数は、記憶装置２１０にスロットを配置する場合に、何個のスロットで折り返して次の記憶装置２１０に移るのかを示す。ディスクタイプ欄Ｃ２５には、ＶＤＥＶ２２０を構成する記憶装置２１０の種類が記憶される。【００７８】
キューイングモード欄Ｃ２７には、ＶＤＥＶ２２０に適用されるキューイングモードの種類が記憶される。ＦＩＦＯモードの場合は「０」が、並び替えモードの場合は「１」がキューイングモード欄Ｃ２７に設定される。応答時間保証モード欄Ｃ２８は、応答時間保証モードの設定値が記憶される。応答時間保証モードとは、ＶＤＥＶ２２０の応答時間を所定時間内に収めることを保証するモードである。「１」が記憶されている場合は、応答時間保証モードが設定されていることを示す。【００７９】
図８は、モード設定テーブルＴ３０を示す。モード設定テーブルＴ３０は、管理端末３０からＳＶＰ１６０を介して設定される。モード設定テーブルＴ３０は、記憶制御装置１０の全体について、キューイングモード及び応答時間保証モードを設定する。モード設定テーブルＴ３０は、項目欄Ｃ３１と、設定値欄Ｃ３２とを備える。項目欄Ｃ３１には、キューイングモードと応答時間保証モードとが記憶される。設定値欄Ｃ３２には、各モードを設定するか否かを示す値が記憶される。【００８０】
なお、モード設定テーブルＴ３０とＶＤＥＶ管理テーブルＴ２０のキューイングモード欄Ｃ２７及び応答時間保証モード欄Ｃ２８とは、いずれか一方が設けられていればよく、両方のテーブルＴ２０，Ｔ３０を記憶制御装置１０が備えている必要はない。【００８１】
つまり、キューイングモードは、ＶＤＥＶ単位で設定するか（Ｃ２７）、または、記憶制御装置１０の全体で設定する（Ｔ３０）。応答時間保証モードも、ＶＤＥＶ単位で設定するか（Ｃ２８）、または、記憶制御装置１０の全体で設定する（Ｔ３０）。【００８２】
なお、ＶＤＥＶ管理テーブルＴ２０とモード設定テーブルＴ３０とを共存させる構成でもよい。例えば、例えば、モード設定テーブルＴ３０の設定値を全てのＶＤＥＶ２２０に適用し、その後、各ＶＤＥＶ２２０についてキューイングモードまたは応答時間保証モードを個別に設定できる構成とすればよい。【００８３】
図９は、ジョブを管理するためのテーブルＴ４０を示す。ジョブ管理テーブルＴ４０は、ジョブ制御ブロック（ＪＣＢ）とも呼ばれる。ジョブ管理テーブルＴ４０は、カーネルにより生成されるジョブの状態を管理する。【００８４】
ジョブ管理テーブルＴ４０は、例えば、ＪＣＢ番号欄Ｃ４１と、ジョブ状態欄Ｃ４２と、ＷＡＩＴ満了時刻欄Ｃ４３と、起動フラグ欄Ｃ４４と、障害発生フラグ欄Ｃ４５と、引継ぎ情報欄Ｃ４６とを対応付けて管理する。【００８５】
ＪＣＢ番号欄Ｃ４１には、各ジョブを制御するためのＪＣＢを識別するための番号が記憶される。ジョブ状態欄Ｃ４２には、ＪＣＢにより管理されているジョブの状態が記憶される。【００８６】
ジョブ状態としては、例えば、「ＲＵＮ」、「ＷＡＩＴ」、「未使用」がある。「ＲＵＮ」とは、ジョブが起動状態にあることを示す。ＤＫＡ１２０がＣＨＡ１１０からのメッセージを受信すると、ＤＫＡ１２０のカーネルは、ジョブを生成し、そのジョブに未使用のＪＣＢを一つ割り当てる。ＤＫＡ１２０は、ジョブに割り当てられたＪＣＢのジョブ状態欄Ｃ４２を「未使用」から「ＲＵＮ」に変更させる。「ＷＡＩＴ」は、ジョブの処理完了を待っている状態を示す。「未使用」は、そのＪＣＢがジョブに割り当てられていないことを示す。【００８７】
ＷＡＩＴ満了時刻欄Ｃ４３には、現在時刻に処理待ち時間（タイムアウト時間）を加えた値が記憶される。現在時刻はシステムタイマから取得される。例えば、現在時刻が「００００」であり、タイムアウト時間として「１０００」が設定された場合、ＷＡＩＴ満了時刻は１０００（＝００００＋１０００）となる。【００８８】
起動フラグ欄Ｃ４４には、ジョブを再起動させるか否かを判定するためのフラグの値が記憶される。記憶装置２１０のデータ入出力が正常終了または異常終了すると、割込処理により、起動フラグが「１」に設定される。【００８９】
障害発生フラグ欄Ｃ４５には、記憶装置２１０で障害が生じたか否かを示すフラグの値が記憶される。記憶装置２１０に障害が発生した場合、障害発生フラグ欄Ｃ４５には「１」が設定される。【００９０】
引継ぎ情報欄Ｃ４６には、ジョブの再起動時に必要となる情報が記憶される。そのような情報としては、例えば、ＶＤＥＶ番号、スロット番号等が挙げられる。【００９１】
リードメッセージの受領により作成されたジョブは、記憶装置２１０からのデータ読出しが開始されると、その状態が「ＲＵＮ」から「ＷＡＩＴ」に変化する。カーネルは、「ＷＡＩＴ」状態のジョブのうち、起動フラグに「１」が設定されたジョブ、または、ＷＡＩＴ満了時刻が現在時刻を超えているジョブが有るか否かを定期的に監視している。【００９２】
起動フラグに「１」の設定されたジョブ、または、ＷＡＩＴ満了時刻が過ぎたジョブを発見した場合、ＤＫＡ１２０のカーネルは、そのジョブを再起動させる。再起動されるジョブの状態は「ＷＡＩＴ」から「ＲＵＮ」に変更される。再起動されたジョブは、引継ぎ情報を参照して処理を進める。ジョブが完了すると、その状態は「ＲＵＮ」から「未使用」に変更される。【００９３】
図１０−図１３のフローチャートを参照して記憶制御装置１０の動作を説明する。各フローチャートは、各処理の概要を示しており、実際のコンピュータプログラムとは相違する場合がある。いわゆる当業者であれば、図示されたステップの一部を変更または削除したり、新たなステップを追加したりすることができるであろう。【００９４】
図１０は、ＣＨＡ１１０により実行されるリード処理のフローチャートである。ＣＨＡ１１０は、ＣＨＡ１１０内に記憶されている所定のコンピュータプログラムをマイクロプロセッサが読み込んで実行することにより、図１０に示す機能を実現する。【００９５】
ＣＨＡ１１０は、ホスト２０からリードコマンドを受信すると（Ｓ１０）、そのリードコマンドで指定されている論理アドレスを、ＶＤＥＶ番号とスロット番号の組合せに変換する（Ｓ１１）。【００９６】
ＣＨＡ１１０は、キャッシュヒットであるか否かを判定する（Ｓ１２）。読出し対象スロット番号に対応するキャッシュ領域が既に確保されており、かつ、読出し対象の論理ブロック範囲のステージングビットがオンに設定されている場合は、キャッシュヒットであると判定される。【００９７】
キャッシュヒットではない場合（Ｓ１２：ＮＯ）、ＣＨＡ１１０は、ＤＫＡ１２０にリードメッセージを送信する（Ｓ１３）。そのリードメッセージには、ＶＤＥＶ番号と、スロット番号と、スロット内の開始ブロック番号と、対象ブロック数とが含まれる。【００９８】
ＣＨＡ１１０は、リードメッセージをＤＫＡ１２０に送った後、ＤＫＡ１２０によるデータの読出し処理（ステージング処理）が完了するのを待つ（Ｓ１４）。ＣＨＡ１１０は、ＤＫＡ１２０から完了報告を受領すると（Ｓ１５）、記憶装置からのデータ読出しが正常に終了したか否かを判定する（Ｓ１６）。【００９９】
記憶装置からのデータ読出しが正常に終了した場合（Ｓ１６：ＹＥＳ）、ＣＨＡ１１０は、キャッシュメモリ１３０に記憶されたデータをホスト２０に送信して（Ｓ１７）、本処理を終了する。記憶装置からのデータ読出しが失敗した場合（Ｓ１６：ＮＯ）、ＣＨＡ１１０は、ホスト２０にエラーを通知し（Ｓ１８）、本処理を終了する。【０１００】
図１１は、ステージング処理のフローチャートである。ステージング処理とは、記憶装置からデータを読み出してキャッシュメモリに転送させる処理であり、ＤＫＡ１２０により実行される。【０１０１】
ＤＫＡ１２０は、ＣＨＡ１１０からのメッセージを受領すると（Ｓ２０）、データを格納させるための領域をキャッシュメモリ上に確保し、さらに、メッセージで指定されたアドレスを物理アドレスに変換する（Ｓ２１）。つまり、ＤＫＡ１２０は、読出し先のアドレスを、記憶装置番号と論理アドレスと論理ブロック数との組合せに変換して、記憶装置２１０にデータ読出しを要求する（Ｓ２２）。【０１０２】
ＤＫＡ１２０は、記憶装置２１０にデータ読出しを要求するに際して、タイムアウト時間（図中、ＴＯＶ）を設定し、待機状態に移行する（Ｓ２３）。ＤＫＡ１２０は、比較的長時間の通常値ＴＯＶ１または比較的短時間の短縮値ＴＯＶ２のいずれか一方を、タイムアウト時間として設定する。タイムアウト時間の選択方法は、図１５で後述する。【０１０３】
図９で述べたように、記憶装置２１０からデータを読み出すためのジョブは、「ＷＡＩＴ」状態に変化する。起動フラグに「１」が設定された場合、または、ＷＡＩＴ満了時刻が過ぎた場合に、ジョブ処理が再起動される（Ｓ２４）。【０１０４】
ＤＫＡ１２０は、データの読出しが正常に終了したか、それとも異常終了したかを判定する（Ｓ２５）。記憶装置２１０からキャッシュメモリ１３０にデータを転送できた場合、正常終了と判定される。正常終了の場合、ＤＫＡ１２０は、ステージングビットをオンに設定し（Ｓ２６）、ＣＨＡ１１０にデータの読出しが正常に終了した旨を報告する（Ｓ２７）。【０１０５】
これに対し、記憶装置２１０からのデータ読出しが異常終了した場合、ＤＫＡ１２０は、タイムアウトエラーが生じたか否かを判定する（Ｓ２８）。タイムアウトエラーとは、設定されたタイムアウト時間内に記憶装置２１０からデータを読み出すことができなかった場合のエラーである。【０１０６】
タイムアウトエラーが発生した場合（Ｓ２８：ＹＥＳ）、ＤＫＡ１２０は、記憶装置２１０にリセット命令を発行する（Ｓ２９）。リセット命令により、記憶装置２１０へのデータ読出し要求は取り消される。【０１０７】
ＤＫＡ１２０は、データ読出し要求を取り消した後、コレクションリード処理を実行する（Ｓ３０）。コレクションリード処理の詳細は、図１２で後述する。記憶装置２１０にタイムアウトエラー以外の障害が生じた場合（Ｓ２８：ＮＯ）、ＤＫＡ１２０は、Ｓ２９をスキップしてＳ３０に移る。【０１０８】
そして、ＤＫＡ１２０は、コレクションリード処理が正常に終了したか否かを判定する（Ｓ３１）。コレクションリード処理が正常に終了した場合（Ｓ３１：ＹＥＳ）、ＤＫＡ１２０は、リード要求が正常に終了した旨をＣＨＡ１１０に報告する（Ｓ２７）。コレクションリード処理が正常に終了しなかった場合（Ｓ３１：ＮＯ）、ＤＫＡ１２０は、リード要求の処理が異常終了したことをＣＨＡ１１０に報告する（Ｓ３２）。【０１０９】
図１２は、図１１中にＳ３０として示されているコレクションリード処理のフローチャートである。ＤＫＡ１２０は、読出し対象の記憶装置２１０が属するＶＤＥＶ２２０のＲＡＩＤレベルを判定する（Ｓ４０）。本実施例では、一例として、ＲＡＩＤ１と、ＲＡＩＤ５またはＲＡＩＤ６とのいずれであるかを判定する。【０１１０】
ＲＡＩＤレベルがＲＡＩＤ５またはＲＡＩＤ６のいずれかである場合、ＤＫＡ１２０は、エラースロットに関連する他の各スロットの番号を特定する（Ｓ４１）。エラースロットとは、データを読み出すことのできなかったスロットであり、何らかの障害が生じているスロットである。エラースロットに関連する他の各スロットとは、エラースロットと同一のストライプ列に含まれる他のスロットである。【０１１１】
ＤＫＡ１２０は、他の各スロットから取得するデータを格納させるための領域をキャッシュメモリ１３０に確保した後、Ｓ４１で特定された他の各スロットを有する各記憶装置２１０にリード要求を発行する（Ｓ４２）。さらに、ＤＫＡ１２０は、各記憶装置２１０からデータを読み出す場合のタイムアウト時間を、通常値に設定する（Ｓ４３）。本実施例では、エラースロット内のデータを復元するために必要なデータをより確実に取得するために、タイムアウト時間を通常値に設定する。【０１１２】
一方、ＲＡＩＤレベルがＲＡＩＤ１の場合、ＤＫＡ１２０は、エラーの発生した記憶装置２１０とペアを形成する記憶装置２１０にリード要求を発行して（Ｓ４４）、Ｓ４３に移る。【０１１３】
リード要求に係るジョブはＷＡＩＴ状態となる。起動フラグが設定されるか、または、ＷＡＩＴ満了時刻を経過すると、再起動される（Ｓ４５）。ＤＫＡ１２０は、データの読出しが正常に終了したか否かを判定する（Ｓ４６）。正常に終了しなかった場合、ＤＫＡ１２０は、本処理を異常終了させる。【０１１４】
データの読出しが正常に終了した場合、ＤＫＡ１２０は、ＲＡＩＤレベルを判定する（Ｓ４７）。ＲＡＩＤ５またはＲＡＩＤ６のいずれかである場合、ＤＫＡ１２０は、各記憶装置２１０から読み出されたデータ及びパリティに基づいて、データを復元し、復元されたデータをエラースロットに対応するキャッシュ領域に記憶させる（Ｓ４８）。ＤＫＡ１２０は、そのスロットに関するステージングビットをオンに設定する（Ｓ４９）。ＲＡＩＤ１の場合、ＤＫＡ１２０は、Ｓ４８をスキップしてＳ４９に移る。【０１１５】
図１３は、エラーカウント処理のフローチャートである。本処理は。ＤＫＡ１２０により実行される。ＤＫＡ１２０は、記憶装置２１０にエラー（障害）が発生したか否かを監視している（Ｓ６０）。エラーが発生した場合（Ｓ６０：ＹＥＳ）、ＤＫＡ１２０は、タイムアウトエラーであるか否かを判定する（Ｓ６１）。【０１１６】
記憶装置２１０で発生したエラーがタイムアウトエラーである場合（Ｓ６１：ＹＥＳ）、ＤＫＡ１２０は、そのタイムアウトエラーを、図１４に示すエラーカウント管理テーブルＴ５０のタイムアウト障害欄Ｃ５３に記録する（Ｓ６２）。【０１１７】
記憶装置２１０で発生したエラーがタイムアウトエラー以外の記憶装置エラーである場合（Ｓ６１：ＮＯ）、ＤＫＡ１２０は、そのエラーを、エラーカウント管理テーブルＴ５０のＨＤＤ障害欄Ｃ５２に記録する（Ｓ６３）。【０１１８】
図１４を参照してエラーカウント管理テーブルＴ５０を説明する。エラーカウント管理テーブルＴ５０は、記憶装置２１０で発生したエラーの数と回復措置を実行させるための閾値とを管理する。エラー管理テーブルＴ５０は共有メモリ１４０に記憶されており、ＤＫＡ１２０は、その一部をローカルメモリにコピーして使用することができる。【０１１９】
エラーカウント管理テーブルＴ５０は、例えば、ＨＤＤ番号欄Ｃ５１と、ＨＤＤ障害欄Ｃ５２と、タイムアウト障害欄Ｃ５３とを対応付けて管理する。ＨＤＤ番号欄Ｃ５１は、各記憶装置２１０を識別するための情報を記憶する。【０１２０】
ＨＤＤ障害欄Ｃ５２は、記憶装置２１０に生じる通常の障害を管理する。ＨＤＤ障害欄Ｃ５２は、エラーカウント欄Ｃ５２０と、スペアの記憶装置へのコピーを開始させるための閾値欄Ｃ５２１と、コレクションコピーを開始させるための閾値欄Ｃ５２２とを備えている。【０１２１】
エラーカウント欄Ｃ５２０は、記憶装置で生じた通常の障害の回数を記憶する。閾値欄Ｃ５２１は、エラーを生じた記憶装置から予備の記憶装置へデータをコピーさせるという「スペアリング処理」を開始させるための閾値ＴＨ１ａを記憶する。他の閾値欄Ｃ５２２は、コレクションコピー処理を開始させるための閾値ＴＨ１ｂを記憶する。【０１２２】
タイムアウト障害欄Ｃ５３は、記憶装置２１０に生じるタイムアウトエラーを管理するもので、エラーカウント欄Ｃ５３０と、スペアリング処理を開始させるための閾値欄Ｃ５３１と、コレクションコピーを開始させるための閾値欄Ｃ５３２とを備えている。【０１２３】
つまり、通常の障害の発生回数（エラーカウント値）とタイムアウトエラーの発生回数とはそれぞれ別々に管理される。さらに、回復措置としてのスペアリング処理及びコレクションコピー処理を実行させるための閾値も、通常の障害とタイムアウトエラーとでそれぞれ別々に設定される。さらに、本実施例では、タイムアウトエラーに関する閾値ＴＨ１ｂ，ＴＨ２ｂの方が、通常の障害に関する閾値ＴＨ１ａ，ＴＨ２ａよりも大きく（例えば、ＴＨ１ｂ＝ＴＨ１ａ×２，ＴＨ２ｂ＝ＴＨ２ａ×２）設定されている。【０１２４】
従って、本実施例では、記憶装置２１０からデータを読み出す場合のタイムアウト時間を短く設定した結果として、タイムアウトエラーが頻発した場合でも、スペアリング処理またはコレクションコピー処理のような回復措置の実行機会を低減できる。本実施例では、回復措置の起動を抑えることにより、記憶制御装置１０の負荷が増大するのを防止している。【０１２５】
図１５は、記憶装置２１０からデータを読み出す場合に設定されるタイムアウト時間の選択方法を示す。上述の通り、本実施例では、複数のタイムアウト時間ＴＯＶ１，ＴＯＶ２が用意されている。第１のタイムアウト時間ＴＯＶ１は、例えば、数秒程度の比較的長い時間に設定されており、通常値とも呼ばれる。第２のタイムアウト時間ＴＯＶ２は、例えば、１秒以下の比較的短い時間に設定されており、短縮値とも呼ばれる。以下に示すような所定条件を満たす場合に、ＤＫＡ１２０は、タイムアウト時間を短い値ＴＯＶ２に設定することができる。【０１２６】
（所定条件１）
図７に示すＶＤＥＶ管理テーブルＴ２０の応答時間保証モード欄Ｃ２８に「１」が設定されている場合。つまり、所定時間内に応答するモードが選択されている場合は、タイムアウト時間として短縮値を選択する。【０１２７】
（所定条件２）
図８に示すモード設定テーブルＴ３０の応答時間保証モードに「１」が設定されている場合。所定条件１と同様である。但し、所定条件１では、ＶＤＥＶ単位で応答時間保証モードを設定可能であるが、所定条件２では、記憶制御装置１０の全体で応答時間保証モードを設定可能である。【０１２８】
（所定条件３）
読出し対象の記憶装置２１０が、ＳＡＴＡのような低速な記憶装置ではない場合。読出し対象の記憶装置が低速な場合（応答性能が低い場合）、タイムアウト時間を短くすると、障害が発生していないのにタイムアウトエラーを生じる可能性がある。【０１２９】
（所定条件４）
ＶＤＥＶ管理テーブルＴ２０のキューイングモード欄Ｃ２７またはモード設定テーブルのいずれかにおいて、キューイングモードに「１」が設定されている場合（キューイングモード＝ＦＩＦＯモード）。ＦＩＦＯモードの場合は、発行順にキューが処理されるため、論理アドレスの離れているキューの処理が後回しにされて、極端に長時間待たされたりすることはない。これに対し、並び替えモードの場合、孤立した場所のキューは長時間待たされる可能性があるため、タイムアウト時間を短縮すると、障害が発生していないのにタイムアウトエラーを生じる可能性が高くなる。【０１３０】
（所定条件５）
読出し対象の記憶装置２１０の負荷状態が所定値以下の場合。記憶装置２１０の負荷が所定値以上の場合、データの読出しに時間を要し、障害が発生していないのにタイムアウトエラーを生じる可能性がある。従って、記憶装置２１０が高負荷状態ではない場合に、タイムアウト時間を短く設定する。【０１３１】
このように構成される本実施例では、ＤＫＡ１２０は、所定の条件を満たす場合に、記憶装置２１０に送信したリード要求について短いタイムアウト時間ＴＯＶ２を設定し、タイムアウトエラーが生じた場合はリード要求をリセットして、コレクションリード処理を実行する。【０１３２】
従って、読出し対象の記憶装置２１０の応答性能が低下している場合でも、タイムアウト時間が経過したときはコレクションリード処理を行うことができる。このため、記憶制御装置１０の応答性能が低下するのを防止できる。【０１３３】
本実施例では、例えば、応答時間保証モードが設定されている場合、キューイングモードがＦＩＦＯの場合、低速な記憶装置ではない場合、記憶装置が高負荷ではない場合に、記憶装置２１０からデータを読み出す場合のタイムアウト時間を通常よりも短い値に設定する。従って、本実施例では、状況に応じて、記憶制御装置１０の応答性能低下を防止することができる。【０１３４】
本実施例では、タイムアウトエラーを通常の記憶装置の障害とは別に管理する。従って、タイムアウト時間を通常よりも短く設定した場合でも、スペアリング処理またはコレクションコピー処理等の回復措置が実行されるのを抑制できる。このため、回復措置の実行により記憶制御装置１０の負荷が増大して、応答性能が低下するのを防止できる。
【実施例２】
【０１３５】
図１６を参照して第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に相当する。そこで、第１実施例との相違点を中心に述べる。本実施例では、キューイングモードと記憶装置２１０の負荷状態とに応じて、タイムアウト時間を短く設定する。本実施例は、第１実施例で述べた（所定条件５）の応用例である。【０１３６】
図１６は、タイムアウト時間を設定するための閾値を記憶するテーブルＴ７０である。閾値テーブルＴ７０は、例えば、ＨＤＤ番号欄Ｃ７１と、キューイングコマンド数欄Ｃ７２と、ＦＩＦＯモード時の閾値欄Ｃ７３と、並び替えモード時の閾値欄Ｃ７４とを対応付けて管理する。【０１３７】
ＨＤＤ番号欄Ｃ７１には、各記憶装置２１０を識別するための情報が記憶される。キューイングコマンド数欄Ｃ７２には、記憶装置２１０を対象とする未処理のコマンド数が記憶される。ＦＩＦＯモード時の閾値欄Ｃ７３には、キューイングモードがＦＩＦＯモードに設定されている場合の閾値ＴＨ３が記憶されている。並び替えモード時の閾値欄Ｃ７４には、キューイングモードが並び替えモードに設定されている場合の閾値ＴＨ４が記憶されている。【０１３８】
記憶装置２１０を対象とする未処理のコマンドの数が、キューイングモードで定まる閾値ＴＨ３またはＴＨ４のいずれかに達した場合、その記憶装置２１０を読出し対象とするリード要求のタイムアウト時間は、通常の値に設定される。【０１３９】
ＦＩＦＯモード時の閾値ＴＨ３は、並び替えモード時の閾値ＴＨ４よりも大きい値に設定されている（例えば、ＴＨ３＝ＴＨ４×４）。キューイングモードがＦＩＦＯモードに設定されている場合は、極端に処理の遅れるコマンドは生じないため、閾値ＴＨ３を並び替えモード時のＴＨ４よりも大きく設定している。キューイングモードが並び替えモードの場合は、コマンドの対象とする論理アドレス次第で、処理が後回しにされる可能性があるため、閾値ＴＨ４をＦＩＦＯモード時のＴＨ３よりも小さく設定している。【０１４０】
記憶装置２１０に未処理のコマンドが多く滞留している場合は、障害と無関係にタイムアウトエラーを生じる可能性がある。未処理のコマンドを処理する方法によっても、タイムアウトエラーを生じる可能性が変化する。【０１４１】
そこで、本実施例では、未処理のコマンド数とキューイングモードとに基づいて、タイムアウト時間を設定する。これにより、障害と無関係なタイムアウトエラーが生じる可能性を抑制できる。本実施例も第１実施例と同様の効果を奏する。
【実施例３】
【０１４２】
図１７を参照して第３実施例を説明する。本実施例では、コレクションリード時のタイムアウト時間を短い値に設定する。図１７は、コレクションリード処理のフローチャートである。本処理は、図１２に示す処理と共通のステップＳ４０−Ｓ４２，Ｓ４４−Ｓ４９を備える。本処理は、Ｓ４３Ａの点で図１２と相違する。つまり、本実施例のコレクションリード処理では、タイムアウト時間を通常よりも短い値に設定して、各記憶装置２１０からデータ及びパリティを読み出す。【０１４３】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、コレクションリード時のタイムアウト時間を短く設定するため、記憶制御装置１０の応答性能低下をより一層防止できる。
【実施例４】
【０１４４】
図１８−図２１を参照して第４実施例を説明する。本実施例では、コレクションリード処理が失敗した場合に、最初の読出し対象の記憶装置２１０からのデータ読出しに再挑戦する。【０１４５】
図１８は、ステージング処理の進行状況を管理するための状態管理テーブルＴ８０である。状態管理テーブルＴ８０は、例えば、項番欄Ｃ８１と、内容欄Ｃ８２と、値欄Ｃ８３とを備える。内容欄Ｃ８１には、記憶装置２１０からデータを読み出してキャッシュメモリ１３０に転送させるステージング処理の各段階が示されている。ステージング処理が各段階に到達すると、値欄Ｃ８３には、「１」が設定される。ステージング処理の各段階の一例は、以下の通りである。【０１４６】
（段階１）
第１段階では、タイムアウト時間を短縮値ＴＯＶ２に設定して、記憶装置２１０にデータ読出しを要求する。
（段階２）
第２段階では、最初の読出し要求についてタイムアウトエラーが発生する。
（段階３）
第３段階では、コレクションリード処理を試みるが失敗する。
（段階４）
第４段階では、タイムアウト時間を通常値ＴＯＶ１に設定して、読出し対象の記憶装置２１０に２回目のデータ読出しを要求する。【０１４７】
図１９及び図２０は、ステージング処理のフローチャートである。本処理は、図１１に示すステージング処理に対応する。本処理と図１１に示す処理との相違点は、Ｓ７０−Ｓ７６である。【０１４８】
図１９に示すように、ＤＫＡ１２０は、ＣＨＡ１１０からリードメッセージを受領すると（Ｓ２０）、状態管理テーブルＴ８０の値欄Ｃ８３を初期化する（Ｓ８３）。ＤＫＡ１２０は、アドレス変換等を行った後（Ｓ２１）、記憶装置２１０にリード要求を発行する（Ｓ２２）。【０１４９】
ＤＫＡ１２０は、そのリード要求のタイムアウト時間を通常よりも短い値ＴＯＶ２に設定する（Ｓ７１）。なお、同一の記憶装置２１０から再度データを読み出そうとする場合、タイムアウト時間は通常値ＴＯＶ１に設定される（Ｓ７１）。【０１５０】
ＤＫＡ１２０は、タイムアウト時間を短縮値ＴＯＶ２に設定した場合、状態管理テーブルの段階１の値を「１」に設定する（Ｓ７２）。これにより、最初の読出しが開始されたことがテーブルＴ８０に記録される。【０１５１】
図２０に移る。記憶装置２１０からの１回目のデータ読出しがタイムアウトとなって失敗すると（Ｓ２８：ＹＥＳ）、ＤＫＡ１２０は、リセット命令を発行してリード要求を取り消す（Ｓ２９）。ＤＫＡ１２０は、状態管理テーブルＴ８０の段階２の値に「１」を設定する（Ｓ７３）。これにより、１回目のリード要求に関するタイムアウトエラーの発生が、状態管理テーブルＴ８０に記録される。【０１５２】
ＤＫＡ１２０は、状態管理テーブルＴ８０を参照し、ステージング処理が第３段階に到達したか否かを判定する（Ｓ７４）。ここでは、未だコレクションリード処理は開始されていないので、第３段階に到達していないと判定される（Ｓ７４：ＮＯ）。そこで、ＤＫＡ１２０は、コレクションリード処理を実行する（Ｓ７５）。【０１５３】
コレクションリード処理が正常に終了した場合（Ｓ３１：ＹＥＳ）、ＤＫＡ１２０は、リード要求を正常に終了した旨をＣＨＡ１１０に通知する（Ｓ２７）。コレクションリード処理が正常に終了しなかった場合（Ｓ３１：ＮＯ）、ＤＫＡ１２０は、状態管理テーブルＴ８０を参照し、ステージング処理の進捗状況が第２段階まで到達しているか否かを判定する（Ｓ７６）。【０１５４】
ここでは、図１９のＳ７２と図２０のＳ７３とで、状態管理テーブルＴ８０の第１段階及び第２段階にそれぞれ「１」が設定されている。従って、ＤＫＡ１２０は、第２段階に到達していると判定し（Ｓ７６：ＹＥＳ）、図１９のＳ２２に戻る。ＤＫＡ１２０は、読出し対象の記憶装置２１０にもう一度リード要求を発行する（Ｓ２２）。その際、ＤＫＡ１２０は、２回目のリード要求に関するタイムアウト値を通常値ＴＯＶ１に設定する（Ｓ７１）。２回目のリード要求であり、タイムアウト値は短縮されていないため、Ｓ７２はスキップされる。【０１５５】
２回目のリード要求により、タイムアウト時間内に記憶装置２１０からデータを正常に読み出すことができた場合、ＤＫＡ１２０は、ステージングビットをオンに設定し（Ｓ２６）、ＣＨＡ１１０に正常終了を報告する（Ｓ２７）。【０１５６】
２回目のリード要求も失敗し、タイムアウトエラーが発生した場合（Ｓ２８：ＹＥＳ）、ＤＫＡ１２０は、２回目のリード要求をリセットする（Ｓ２９）。なお、状態管理テーブルＴ８０の第２段階に「１」が設定されているので、Ｓ７３では再度「１」を設定せずにＳ７３に移る。【０１５７】
ＤＫＡ１２０は、状態管理テーブルＴ８０を参照し、第３段階に到達しているか否かを判定する（Ｓ７４）。ここでは、コレクションリード処理を試みて失敗しているため（Ｓ７４：ＹＥＳ）、ＤＫＡ１２０は、リード要求の処理に失敗した旨をＣＨＡ１１０に通知する（Ｓ３２）。つまり、２回目のリード要求が失敗した場合は、２回目のコレクションリード処理を行わずに、本処理を終了させる。【０１５８】
図２１は、コレクションリード処理のフローチャートである。本処理は、図１２に示す処理に比べて、Ｓ８０及びＳ８１が相違する。ＤＫＡ１２０は、コレクションリード時のタイムアウト時間として通常値を設定する（Ｓ８０）。コレクションリード処理が異常終了した場合、ＤＫＡ１２０は、状態管理テーブルＴ８０の第３段階に「１」を設定し、コレクションリードに失敗したことを記録する（Ｓ８１）。【０１５９】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、コレクションリードに失敗した場合、通常のタイムアウト時間で、記憶装置２１０からのデータ読出しを再び試みる。従って、記憶装置２１０からデータを読み出せる可能性を高めることができ、記憶制御装置１０の信頼性を向上できる。
【実施例５】
【０１６０】
図２２及び図２３を参照して第５実施例を説明する。本実施例では、コレクションリードの対象となる各記憶装置２１０の状態に基づいて、コレクションリード処理の実行を制御する。【０１６１】
図２２は、ステージング処理のフローチャートである。図２２の処理は、図１１の処理に比べて、Ｓ９０及びＳ９１が相違する。タイムアウトエラーが生じた場合（Ｓ２８：ＹＥＳ）、ＤＫＡ１２０は、応答時間管理テーブルＴ９０を参照し（Ｓ９０）、コレクションリードの対象となる全ての記憶装置２１０の応答時間が基準値よりも長いか否かを判定する（Ｓ９１）。【０１６２】
コレクションリード対象の各記憶装置２１０の応答時間が長い場合（Ｓ９１：ＹＥＳ）、ＤＫＡ１２０は、コレクションリード処理を実行せずに、リード要求の処理に失敗した旨をＣＨＡ１１０に通知する（Ｓ３２）。【０１６３】
コレクションリード対象の各記憶装置２１０の応答時間が基準値以上ではない場合（Ｓ９１：ＮＯ）、ＤＫＡ１２０は、リード要求をリセットして（Ｓ２９）、コレクションリード処理を実行する（Ｓ３０）。【０１６４】
なお、コレクションリード対象の全記憶装置２１０の応答時間が遅い場合に限らず、コレクションリード対象の全記憶装置２１０のうち所定数以上の記録装置２１０の応答時間が基準値以上の場合、または、コレクションリード対象の全記憶装置２１０のうち１つ以上の記憶装置２１０の応答時間が基準値以上の場合に、コレクションリード処理を行わない構成としてもよい。【０１６５】
図２３は、各記憶装置２１０の応答時間を管理するテーブルＴ９０を示す。応答時間管理テーブルＴ９０は、例えば、ＶＤＥＶ番号欄Ｃ９１と、ＨＤＤ番号欄Ｃ９２と、応答時間欄Ｃ９３と、判定欄Ｃ９４とを対応付けて管理する。【０１６６】
応答時間欄Ｃ９３には、各記憶装置２１０の最新の応答時間が記録される。判定欄Ｃ９４には、各記憶装置２１０の応答時間と所定の基準値とを比較した結果が記録される。応答時間が基準値以上の場合「遅」と記録され、応答時間が基準値未満の場合「通常」と記憶される。【０１６７】
応答時間管理テーブルＴ９０を用いることにより、コレクションリードを短時間で完了させることができるか否かを判定することができる。なお、応答時間を直接管理するのではなく、各記憶装置についての未処理のコマンド数を管理してもよい。さらには、未処理のコマンド数と記憶装置２１０の種別等に基づいて、コレクションリード処理に要する時間を推測する構成でもよい。
【実施例６】
【０１６８】
図２４−図２６を参照して第６実施例を説明する。本実施例では、コレクションリード処理に失敗した場合はユーザに通知して、待機系の記憶制御装置１０（２）に切り替えさせる。【０１６９】
図２４は、本実施例のシステム構成図である。本実施例では、現用系の記憶制御装置１０（１）と、待機系の記憶制御装置１０（２）とを備える。通常の場合、ユーザは、現用系の記憶制御装置１０（１）を使用する。【０１７０】
図２５及び図２６はステージング処理のフローチャートである。図２５のフローチャートは、図１９のフローチャートに比べて、結合子２を含まない点で相違する。図２６のフローチャートは、図２０のフローチャートに比べて、コレクションリード処理に失敗した後の処理が異なる。【０１７１】
本実施例では、コレクションリード処理に失敗した場合（Ｓ３１：ＮＯ，Ｓ７６：ＹＥＳ）、ユーザに通知して本処理を終了する（Ｓ１００）。その通知は、管理端末３０を介してユーザに知らされる。ユーザは、ホスト２０から現用系記憶制御装置１０（１）にリード要求を再発行させるか、それとも、現用系記憶制御装置１０（１）から待機系記憶制御装置１０（２）に切り替えるかを決定することができる。このように構成される本実施例も第１実施例と同様の効果を奏する。【０１７２】
なお、本発明は、上述した実施例に限定されない。当業者であれば、例えば、上記各実施例を適宜組み合わせる等のように、本発明の範囲内で、種々の追加や変更等を行うことができる。
【符号の説明】
【０１７３】
１：記憶制御装置、２：ホスト、３：コントローラ、４：記憶装置、５：チャネルアダプタ（ＣＨＡ）、６：メモリ、７：ディスクアダプタ（ＤＫＡ）、１０：記憶制御装置、２０：ホスト、３０：管理端末、１００：コントローラ、１１０：ＣＨＡ、１２０：ＤＫＡ、１３０：キャッシュメモリ、１４０：共有メモリ、２１０：記憶装置、２２０：パリティグループ（ＶＤＥＶ）、２３０：論理ボリューム（ＬＤＥＶ）。
【図１】
0005451874.tif 000002
【図２】
0005451874.tif 000003
【図３】
0005451874.tif 000004
【図４】
0005451874.tif 000005
【図５】
0005451874.tif 000006
【図６】
0005451874.tif 000007
【図７】
0005451874.tif 000008
【図８】
0005451874.tif 000009
【図９】
0005451874.tif 000010
【図１０】
0005451874.tif 000011
【図１１】
0005451874.tif 000012
【図１２】
0005451874.tif 000013
【図１３】
0005451874.tif 000014
【図１４】
0005451874.tif 000015
【図１５】
0005451874.tif 000016
【図１６】
0005451874.tif 000017
【図１７】
0005451874.tif 000018
【図１８】
0005451874.tif 000019
【図１９】
0005451874.tif 000020
【図２０】
0005451874.tif 000021
【図２１】
0005451874.tif 000022
【図２２】
0005451874.tif 000023
【図２３】
0005451874.tif 000024
【図２４】
0005451874.tif 000025
【図２５】
0005451874.tif 000026
【図２６】
0005451874.tif 000027