(57)【要約】  本発明は、一連の通信処理に含まれる複数のコマンドを複数の回路部で分担して処理することができ、信頼性と処理性能を向上する。  通信用半導体集積回路２１２は、上位装置４との通信を担当する複数の第１回路部２１２１と、一連の通信処理に含まれるコマンドを解析する複数の第２回路部であって、一連の処理が含む複数のコマンドの処理を他の第２回路部と分担する複数の第２回路部２１２２と、第１回路部と第２回路部を接続する共通接続部２１２３と、いずれかの回路部で障害が発生した場合、処理停止が必要な停止対象の回路部の処理を停止させる障害管理部２１２４と、を含む。
2015151239.tif 000002
【特許請求の範囲】
【請求項１】
上位装置と通信するための通信用半導体集積回路であって、
前記上位装置との通信を担当する複数の第１回路部と、
前記複数の第１回路部のうち接続先の第１回路部を制御し、前記上位装置との間で行われる一連の通信処理に含まれるコマンドを解析する複数の第２回路部であって、前記一連の処理が含む複数のコマンドの処理を他の第２回路部と分担する複数の第２回路部と、
前記複数の第１回路部と前記複数の第２回路部を予め規定される接続関係に基づいて接続する共通接続部と、
前記複数の第１回路部および前記複数の第２回路部のいずれかで障害が発生した場合、前記障害の発生した回路部に関連する関連回路部であって処理停止が必要な停止対象の関連回路部を、前記複数の第１回路部および前記複数の第２回路部の中から検出し、前記検出した停止対象の関連回路部での処理を停止させる障害管理部と、
を含む通信用半導体集積回路。
【請求項２】
前記障害管理部は、前記停止対象の関連回路部に障害を注入することで、前記停止対象の関連回路部で実行されるコマンド処理を停止させる、
請求項１に記載の通信用半導体集積回路。
【請求項３】
前記障害管理部は、前記共通接続部に設けられている、
請求項２に記載の通信用半導体集積回路。
【請求項４】
前記共通接続部は、所定のテーブルを用いて、前記複数の第１回路部と前記複数の第２回路部を前記接続関係に基づいて接続し、
前記所定のテーブルは、前記接続関係と、障害の発生した回路部と前記関連回路部との対応関係を示す情報と、前記停止対象の関連回路部を特定する情報と、を記憶し、
前記障害管理部は、前記所定のテーブルを用いることで、前記停止対象の関連回路部を検出する、
請求項３に記載の通信用半導体集積回路。
【請求項５】
前記関連回路部のうち前記停止対象の関連回路部以外の他の関連回路部は、通知対象の関連回路部として扱われるようになっており、
前記障害管理部は、前記通知対象の関連回路部に対して、前記複数の第１回路部および前記複数の第２回路部のうち前記通知対象の関連回路部に関連する回路部において障害が発生した旨を通知する、
請求項４に記載の通信用半導体集積回路。
【請求項６】
前記障害管理部は、前記複数の第１回路部のいずれかに障害が発生した場合、前記複数の第２回路部のうち前記障害の発生した第１回路部に接続された第２回路部を前記通知対象の関連回路部として扱い、障害が発生した旨を通知する、
請求項５に記載の通信用半導体集積回路。
【請求項７】
前記障害管理部は、前記複数の第２回路部のうちいずれに障害が発生した場合、前記複数の第１回路部のうち前記障害の発生した第２回路部に接続された第１回路部を前記停止対象の関連回路部として扱い、コマンド処理を停止させる、
請求項５に記載の通信用半導体集積回路。
【請求項８】
前記複数の第２回路部は、
障害の発生を検知した場合は、前記障害管理部に通知し、
前記検知した障害が前記第２回路部の内部プログラムに関する障害である場合は、処理を直ちに停止し、
前記検知した障害が前記第２回路部の内部プログラムに関する障害ではない場合は、前記障害管理部から障害を注入されると処理を停止する、
請求項７に記載の通信用半導体集積回路。
【請求項９】
前記所定のテーブルは複数用意されており、
所定のタイミングで、前記複数の所定のテーブルの中からいずれか一つを選択して使用する、
請求項４に記載の通信用半導体集積回路。
【請求項１０】
前記上位装置は、ストレージ装置が提供する記憶領域を使用する装置であり、
前記複数の第１回路部は、通信ネットワークを介して前記上位装置と通信可能に接続されることができ、
前記複数の第２回路部は、ストレージ装置に設けられる複数のマイクロプロセッサのうちいずれか所定のマイクロプロセッサに対して、前記上位装置から受領したコマンドの実行を依頼することができる、
請求項１〜５のいずれかに記載の通信用半導体集積回路。
【請求項１１】
上位装置に記憶領域を提供するストレージ装置であって、
前記上位装置と通信する第１通信制御部であって、通信用半導体集積回路を有する第１通信制御部と、
記憶装置と通信する第２通信制御部と、
前記第１通信制御部および前記第２通信制御部に使用されるメモリ部と、
前記第１通信制御部が前記上位装置から受領したコマンドを処理して、前記第２通信制御部を介して前記記憶装置にデータを読み書きし、前記コマンドの処理結果を前記第１通信制御部から前記上位装置へ送信するプロセッサ部であって、複数のマイクロプロセッサを有するプロセッサ部と、
を備え、
前記通信用半導体集積回路は、
前記上位装置との通信を担当する複数の第１回路部と、
前記複数の第１回路部のうち接続先の第１回路部を制御し、前記上位装置から受領する入出力要求内のコマンドを解析する複数の第２回路部であって、前記入出力要求に含まれる複数のコマンドの処理を他の第２回路部と分担する複数の第２回路部と、
前記複数の第１回路部と前記複数の第２回路部を予め規定される接続関係に基づいて接続する共通接続部と、
前記複数の第１回路部および前記複数の第２回路部のいずれかで障害が発生した場合、前記障害の発生した回路部に関連する関連回路部であって処理停止が必要な停止対象の関連回路部を、前記複数の第１回路部および前記複数の第２回路部の中から検出し、前記検出した停止対象の関連回路部での処理を停止させる障害管理部と、
を含み、
前記複数の第２回路部は、前記複数のマイクロプロセッサのうちいずれか所定のマイクロプロセッサに対して、前記上位装置から受領したコマンドの実行を依頼することができる、
ストレージ装置。
【請求項１２】
前記障害管理部は、前記停止対象の関連回路部に障害を注入することで、前記停止対象の関連回路部で実行されるコマンド処理を停止させる、
請求項１１に記載のストレージ装置。
【請求項１３】
前記共通接続部は、所定のテーブルを用いて、前記複数の第１回路部と前記複数の第２回路部を前記接続関係に基づいて接続し、
前記所定のテーブルは、前記接続関係と、障害の発生した回路部と前記関連回路部との対応関係を示す情報と、前記停止対象の関連回路部を特定する情報と、を記憶し、
前記障害管理部は、前記共通接続部に設けられており、前記所定のテーブルを用いることで、前記停止対象の関連回路部を検出する、
請求項１２に記載のストレージ装置。
【請求項１４】
前記関連回路部のうち前記停止対象の関連回路部以外の他の関連回路部は、通知対象の関連回路部として扱われるようになっており、
前記障害管理部は、前記通知対象の関連回路部に対して、前記複数の第１回路部および前記複数の第２回路部のうち前記通知対象の関連回路部に関連する回路部において障害が発生した旨を通知する、
請求項１３に記載のストレージ装置。
【請求項１５】
上位装置に記憶領域を提供するストレージ装置で生じる障害を管理するための方法であって、
前記ストレージ装置は、前記上位装置と通信する第１通信制御部であって、通信用半導体集積回路を有する第１通信制御部と、記憶装置と通信する第２通信制御部と、前記第１通信制御部および前記第２通信制御部に使用されるメモリ部と、前記第１通信制御部が前記上位装置から受領したコマンドを処理して、前記第２通信制御部を介して前記記憶装置にデータを読み書きし、前記コマンドの処理結果を前記第１通信制御部から前記上位装置へ送信するプロセッサ部であって、複数のマイクロプロセッサを有するプロセッサ部と、を備えており、
前記通信用半導体集積回路は、前記上位装置との通信を担当する複数の第１回路部と、前記複数の第１回路部のうち接続先の第１回路部を制御し、前記上位装置から受領する入出力要求内のコマンドを解析する複数の第２回路部であって、前記入出力要求に含まれる複数のコマンドの処理を他の第２回路部と分担する複数の第２回路部と、前記複数の第１回路部と前記複数の第２回路部を予め規定される接続関係に基づいて接続する共通接続部とを備えており、
前記複数の第１回路部および前記複数の第２回路部のいずれかで障害が発生したか監視し、
前記障害の発生を検出した場合は、前記障害の発生した回路部に関連する関連回路部であって処理停止が必要な停止対象の関連回路部を、前記複数の第１回路部および前記複数の第２回路部の中から検出し、
前記検出した停止対象の関連回路部での処理を停止させる、
ストレージ装置の障害管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信用半導体集積回路、ストレージ装置およびストレージ装置の障害管理方法に関する。
【背景技術】
【０００２】
特許文献１に記載のように、一つの物理パス上に複数の論理パスが設けられる場合において、ある論理パスに関して発生した障害が、物理パスを共有する他の論理パスに波及するのを抑制できるようにした技術は知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２９４７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
通常の場合、関連する複数の構成要素（例えば特許文献１の論理パス）のいずれかに障害が発生したときには、正常に動作する他の構成要素に影響が及ばないように制御し、他の構成要素を可能な限り利用しようとする。【０００５】
しかし、上位装置との一連の通信処理を複数の回路で分担して処理する場合において、いずれかの回路に障害が発生したとすると、例えば送信順序が変わったり、データ漏れが生じたりして、上位装置へ送信する通信内容が不正確となる。一連の通信処理を分担する複数の回路のうち正常な他の回路をそのまま作動させると、誤った通信が継続することになり、信頼性が低下する。【０００６】
本発明は、上記課題に鑑みてなされたもので、上位装置との間で行われる一連の通信処理に含まれる複数のコマンドを複数の回路部で分担して正常かつ迅速に処理することができ、信頼性と処理性能を向上できるようにした通信用半導体集積回路、ストレージ装置およびストレージ装置の障害管理方法を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決すべく、本発明に従う通信用半導体集積回路は、上位装置と通信するための通信用半導体集積回路であって、上位装置との通信を担当する複数の第１回路部と、複数の第１回路部のうち接続先の第１回路部を制御し、上位装置との間で行われる一連の通信処理に含まれるコマンドを解析する複数の第２回路部であって、一連の処理が含む複数のコマンドの処理を他の第２回路部と分担する複数の第２回路部と、複数の第１回路部と複数の第２回路部を予め規定される接続関係に基づいて接続する共通接続部と、複数の第１回路部および複数の第２回路部のいずれかで障害が発生した場合、障害の発生した回路部に関連する関連回路部であって処理停止が必要な停止対象の関連回路部を、複数の第１回路部および複数の第２回路部の中から検出し、検出した停止対象の関連回路部での処理を停止させる障害管理部と、を含む。
【発明の効果】
【０００８】
本発明によれば、一連の通信処理に含まれる複数のコマンドの処理を分担する複数の第２回路部は、自回路に障害が発生するか、または、障害管理部から障害を注入されるまで稼働することができ、各第２回路部は互いの処理状態を確認しながら処理を進める必要がない。従って、本発明によれば、処理性能が向上する。また、本発明によれば、ある回路部に障害が発生した場合に、停止対象の関連回路部に障害を注入して処理を停止させるため、上位装置への通信内容に不整合が生じたりするのを抑制でき、信頼性を向上することができる。
【図面の簡単な説明】
【０００９】
【図１】通信用半導体集積回路を使用するストレージ装置の全体構成を示すブロック図である。
【図２】ホストとの通信を担当する通信制御部（CHM）などの構成例を示すブロック図である。
【図３】ホストからのリードコマンドを処理するフローチャートである。
【図４】図３中のコマンド受信処理の詳細を示すフローチャートである。
【図５】図３中のコマンド応答送信処理の詳細を示すフローチャートである。
【図６】図３中のリードデータ送信処理の詳細を示すフローチャートである。
【図７】図３中のステータス送信処理およびステータス応答受信処理の詳細を示すフローチャートである。
【図８】プロトコルチップで障害が発生した場合の処理の詳細を示すフローチャートである。
【図９】障害の注入先などを管理する障害対策テーブルの第１例を示す。
【図１０】障害対策テーブルの第２例を示す。
【図１１】障害対策テーブルの第３例を示す。
【図１２】障害発生時の動作を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、図面に基づいて、本発明の実施の形態を説明する。以下に述べるように、本実施形態では、「通信用半導体集積回路」としてのプロトコルチップ２１２を、例えばストレージ装置１の「第１通信制御部」としてのチャネルアダプタ（図中、ＣＨＡ）２１に使用する。
【００１１】
プロトコルチップ２１２は、それぞれ後述するように、「第１回路部」としての複数のポート制御部２１２１と、「第２回路部」としてのサブコントローラ２１２２と、共通接続部２１２３と、「障害管理部」としての障害通知部２１２４とを含む。複数のサブコントローラ２１２２が連携して、一つのＩ／Ｏ要求に含まれる複数のコマンドを並行処理できるようになっている。なお、図中では、ポート制御部をＰＯＲＴ＿ＣＴＬと表示し、サブコントローラをＳＵＢ＿ＣＴＬと表示する。さらに、サブコントローラ２１２２を、障害対策テーブルＴ１１では便宜上「コア」と表示する。
【００１２】
障害通知部２１２４は、例えば共通接続部２１２３内に設けることができる。障害通知部２１２４は、各ポート制御部２１２１および各サブコントローラ２１２２のいずれかで障害が発生した場合、所定の障害対策処理を実施する。
【００１３】
障害対策処理には、後述のように、第１対策処理としての停止処理と、第２対策処理としての通知処理とがある。停止処理では、障害の発生した回路（２１２１、２１２２）と関連する回路のうち処理停止が必要な回路に障害を注入して停止させる。通知処理では、関連する回路に対して、障害が発生した旨を通知する。
【実施例１】
【００１４】
図１は、ストレージ装置１を含む情報処理システムの全体構成を示す。情報処理システムは、少なくとも一つのストレージ装置１と、少なくとも一つの「上位装置」としてのホスト計算機４を備える。システム管理者などがストレージ装置１を管理するための管理端末５を情報処理システムに備えてもよい。管理端末５に代えて、ホスト計算機４がストレージ装置１を管理する構成にしてもよい。【００１５】
ストレージ装置１は、コントロールユニット（以下、ＤＫＣ）２と、ディスクコントローラ２により制御されるデータ格納ユニット（以下、ＤＫＵ）３を備える。先にＤＫＵ３の構成を説明し、次にＤＫＣ２の構成を説明する。【００１６】
ＤＫＵ３は、複数のディスク搭載ボックス（以下、ＳＢＢ）３１を有する。各ＳＢＢ３１は、複数の記憶装置３１１と、それら記憶装置３１１をスイッチングを制御するスイッチ回路（ＳＳＷ）３１２とを有する。記憶装置３１１としては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス等のデータを読み書き可能な種々のドライブを利用可能である。【００１７】
ハードディスクデバイスを用いる場合、例えば、ＦＣ（Fibre Channel）ディスク、ＳＣＳＩ（Small Computer System Interface）ディスク、ＳＡＴＡディスク、ＡＴＡ（AT Attachment）ディスク、ＳＡＳ（Serial Attached SCSI）ディスク等を用いることができる。また、例えば、フラッシュメモリ、ＭＲＡＭ（Magnetoresistive Random Access Memory）、相変化メモリ（Phase-Change Memory）、ＲｅＲＡＭ（Resistive random-access memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等の種々のドライブを用いることもできる。さらに、例えば、種類の異なるドライブを混在させる構成でもよい。【００１８】
複数の記憶装置３１１の有する物理的記憶領域からＲＡＩＤ（Redundant Arrays of Inexpensive Disks ）グループを形成することができる。ＲＡＩＤグループ内の論理的記憶領域から論理的記憶装置としての論理ボリューム（図示せず）を生成できる。ストレージ装置１は、ホスト計算機４に論理ボリュームを提供する。ホスト計算機４は、論理ボリュームに対してデータを読み書きする。【００１９】
ＤＫＣ２の構成を説明する。ＤＫＣ２は、例えば、複数のチャネルアダプタ２１と、複数のディスクアダプタ（図中、ＤＫＡ）２２と、複数のメモリ部（図中、キャッシュ）２３と、複数のプロセッサ部（図中、ＭＰＢ）２４とを備える。ＤＫＣ２は、さらにサービスプロセッサ（図中、ＳＶＰ）２５を含んでも良い。管理端末５は、サービスプロセッサ２５を介して、ストレージ装置１に関する情報を取得したり、ストレージ装置１の構成を変更したりする。【００２０】
チャネルアダプタ２１は、ホスト計算機４との通信を制御する制御パッケージであり、例えば、複数の接続部（図中、ＳＦＰ）２１１と、複数のプロトコルチップ２１２と、データ転送部２１３と、バッファメモリ２１４とを有する。【００２１】
接続部２１１には、光ファイバまたはメタルケーブルから構成されるファイバチャネルケーブルが接続される。接続部２１１は、ファイバチャネルケーブルを介してホスト計算機４に接続される。接続部２１１とホスト計算機４の間に、ファイバチャネルスイッチを設けることもできる。【００２２】
プロトコルチップ２１２は、ホスト計算機４との通信処理を担当する半導体集積回路である。ホスト計算機４がメインフレームである場合、例えば、ＦＩＣＯＮ（Fibre Connection：登録商標）、ＥＳＣＯＮ（Enterprise System Connection：登録商標）、ＡＣＯＮＡＲＣ（Advanced Connection Architecture：登録商標）、ＦＩＢＡＲＣ（Fibre Connection Architecture：登録商標）等の通信プロトコルに従って、プロトコルチップ２１２はホスト計算機４と通信する。プロトコルチップ２１２の詳細は、図２で後述する。【００２３】
データ転送部２１３は、バッファメモリ２１４とメモリ部２３のキャッシュメモリ２３１との間のデータ転送を行う。さらに、バッファメモリ２１４内のデータは、データ転送部２１３からプロトコルチップ２１２および接続部２１１を介してホスト計算機４に送信される。バッファメモリ２１４は、プロトコルチップ２１２とキャッシュメモリ２３１との間のデータ転送を中継するための一時的記憶領域である。【００２４】
ディスクアダプタ２２は、ＤＫＵ３内の記憶装置３１１との通信を制御するパッケージであり、例えば、複数の接続部（図中、ＰＯＲＴ）２２１と、複数のプロトコルチップ２１２と、データ転送部２２２と、バッファメモリ２２４を有する。【００２５】
接続部２２１は、ＳＢＢ３１のスイッチ３１２とケーブルを介して接続される。プロトコルチップ２１２は、記憶装置３１１との通信処理を担当する集積回路である。データ転送部２２３は、バッファメモリ２２４とメモリ部２３との間のデータ転送を行う。さらに、バッファメモリ２２４内のデータはデータ転送部２２３からプロトコルチップ２１２および接続部２２１などを介して所定の記憶装置３１１に転送される。バッファメモリ２２４は、プロトコルチップ２１２とキャッシュメモリ２３１との間のデータ転送を中継するための一時的記憶領域である。【００２６】
メモリ部２３は、例えば、複数のキャッシュメモリ２３１と、スイッチ（図中、ＭＳＷ）２３２を備える。キャッシュメモリ２３１は、記憶装置３１１から読み出したデータを一時的に記憶したり、ホスト計算機４から受信したデータを一時的に記憶したりするための一時的な記憶領域である。スイッチ２３２は、チャネルアダプタ２１、ディスクアダプタ２２、プロセッサ部２４とキャッシュメモリ２３１との接続を制御する。【００２７】
プロセッサ部２４は、ＤＫＣ２の動作を制御する。プロセッサ部２４は、例えば、少なくとも一つのＣＰＵ（Central Processing Unit）２４１と、少なくとも一つのローカルメモリ２４２を有する。ＣＰＵ２４１は、図２に示すように、複数のマイクロプロセッサ（図中、ＭＰ）２４１１を有する。【００２８】
ＣＰＵ２４１は、ローカルメモリ２４２に記憶されている所定のコンピュータプログラムを実行することで、ホスト計算機４から受領するコマンドを処理し、その処理結果をホスト計算機４へ送信する。【００２９】
図２を用いて、プロトコルチップ２１２の構成例を説明する。図２は、ＣＨＡ２１、メモリ部２３およびプロセッサ部２４の関係を拡大して示す。【００３０】
プロトコルチップ２１２は、例えば、複数のポート制御部２１２１と、複数のサブコントローラ２１２２と、それらポート制御部２１２１とサブコントローラ２１２２を接続する共通接続部２１２３と、障害通知部２１２４を備える。【００３１】
ポート制御部２１２１は、接続部２１１に接続されており、ホスト計算機４との間でコマンドやデータを送受信するための論理部位である。サブコントローラ２１２２は、プロトコル解析を行う論理部位である。サブコントローラ２１２２は、Ｉ／Ｏ要求を解析し、Ｉ／Ｏ要求に含まれているコマンドの処理を所定のマイクロプロセッサ２４１１に依頼するようになっている。【００３２】
ここで、本実施例では、チャネルアダプタ２１は２つのプロトコルチップ２１２を有し、各プロトコルチップ２１２はそれぞれ４つずつのポート制御部２１２１およびサブコントローラ２１２２を有する。そして、プロセッサ部２４のＣＰＵ２４１は、８個のマイクロプロセッサ２４１１を有する。従って、本実施例では、ストレージ装置１内において、ポート制御部２１２１の総数、サブコントローラ２１２２の総数、マイクロプロセッサ２４１１の総数は一致している。サブコントローラ２１２２は、複数のマイクロプロセッサ２４１１のうちいずれか一つに対して、コマンドの処理を依頼する。さらに、複数のサブコントローラ２１２２のうちいずれか一つまたは複数を代表サブコントローラ２１２２として設定することができる。代表サブコントローラ２１２２は、他のサブコントローラ２１２２および当該他のサブコントローラ２１２２に対応するマイクロプロセッサ２４１１に対して、コマンド処理を任せることができる。【００３３】
共通接続部２１２３は、接続構成テーブルＴ１０（図９〜図１０で後述）に基づいて、ポート制御部２１２１とサブコントローラ２１２２とを接続する。共通接続部２１２３は、例えば、ストレージ装置１が起動したときに、接続構成テーブルＴ１０に従ってポート制御部２１２１とサブコントローラ２１２２を接続する。【００３４】
なお、共通接続部２１２３は、管理端末５から指示されたときに、ポート制御部２１２１とサブコントローラ２１２２の接続構成を変えることもできる。さらには、共通接続部２１２３は、Ｉ／Ｏ要求を受領するたびに、ポート制御部２１２２とサブコントローラ２１２２の接続構成を変えることもできる。本実施例では、ストレージ装置１が起動するときにポート制御部２１２１とサブコントローラ２１２２の接続構成が決定し、その後は変化しないものとして説明する。【００３５】
ホスト計算機４から発行されるＩ／Ｏ要求（例えばリード要求）は、複数のコマンドＣ１、Ｃ２を含む。Ｉ／Ｏ要求内の最初のコマンドＣ１を受け付けたポート制御部２１２１は、接続先のサブコントローラ２１２２（代表サブコントローラ）にそのコマンドを引き渡す。最初のコマンドＣ１を処理するサブコントローラ２１２２（代表サブコントローラ）は、その管理下にある他のサブコントローラ２１２２にコマンド処理の分担を求めることができる。即ち、同一のＩ／Ｏ要求に含まれる次のコマンドＣ２は、他のサブコントローラ２１２２に引き渡される。これにより、複数のコマンドＣ１、Ｃ２は、それぞれ別々のサブコントローラ２１２２およびマイクロプロセッサ２４１１により処理される。【００３６】
図３は、ホスト計算機４からのリードコマンドを処理するフローチャートである。ホスト計算機４は、ストレージ装置１からデータを読み出す場合、リード要求を発行する。そのリード要求には、複数のリードコマンドを含む（Ｓ１１）。【００３７】
ストレージ装置１のＤＫＣ２は、リードコマンドを受信すると（Ｓ１２）、ホスト計算機４に対して、リードコマンドを受領した旨を示す応答を送信する（Ｓ１３）。ＤＫＣ２は、要求されたリードデータをホスト計算機４へ送信する（Ｓ１４）。続いて、ＤＫＣ２は、リードコマンドの処理を終了した旨を示すステータスを、ホスト計算機４へ送信する（Ｓ１５）。【００３８】
ホスト計算機４は、ストレージ装置１のＤＫＣ２からステータスを受領すると、ステータスを受領した旨を示すステータス応答をストレージ装置１へ送信する（Ｓ１６）。ＤＫＣ２は、ホスト計算機４からのステータス応答を受信すると（Ｓ１７）、リード処理を終了する。以下、上述した各ステップの詳細を説明する。【００３９】
図４は、図３中にステップＳ１２として示すコマンド受信処理の詳細を示すフローチャートである。ここでは、一方のサブコントローラ２１２２（＃０）と他方のサブコントローラ２１２２（＃１）とがグループを構成しており、一方のサブコントローラ２１２２（＃０）は一方のマイクロプロセッサ２４１１（＃０）に対応付けられており、他方のサブコントローラ２１２２（＃１）は他方のマイクロプロセッサ２４１１（＃１）に対応付けられているものとする。一方のサブコントローラ２１２２は、グループを代表する代表サブコントローラであるとする。【００４０】
ホスト計算機４から送信されたリードコマンドは（Ｓ１１）、チャネルアダプタ２１のプロトコルチップ２１２が受信する。プロトコルチップ２１２のポート制御部２１２１は、受信したリードコマンドをサブコントローラ２１２２（＃０）へ送る。【００４１】
サブコントローラ２１２２（＃０）は、リードコマンドを受信すると（Ｓ２１）、そのリードコマンドを解析する（Ｓ２２）。サブコントローラ２１２２（＃０）は、リード要求内の複数のリードコマンド処理をＤＫＣ２内で分担して実行すべく、グループ内の他のサブコントローラ２１２２（＃１）へリードコマンドの処理を振り分けることができる（Ｓ２３）。【００４２】
ここで、コマンド処理を他のサブコントローラ２１２２へ振り分けるとは、そのコマンドの処理を他のサブコントローラ２１２２に任せることを意味する。コマンド処理を振り分けることを、コマンド処理を割り当てる、コマンドを分担して処理する、などと表現することもある。【００４３】
サブコントローラ２１２２（＃０）は、ステップＳ２１で受信したリードコマンドの処理を他のサブコントローラ２１２２（＃１）に振り分けない場合（Ｓ２３：ＮＯ）、対応付けられているマイクロプロセッサ２４１１（＃０）に対し、リードコマンドを受信した旨を通知する（Ｓ２４）。【００４４】
これに対し、サブコントローラ２１２２（＃０）は、ステップＳ２１で受信したリードコマンドの処理を他のサブコントローラ２１２２（＃１）に振り分けることもできる（Ｓ２３：ＹＥＳ）。サブコントローラ２１２２（＃１）は、サブコントローラ２１２２（＃０）からリードコマンド処理の振り分けを示す通知を受領すると（Ｓ２５）、対応付けられているマイクロプロセッサ２４１１（＃１）に対し、リードコマンドを受信した旨を通知する（Ｓ２６）。【００４５】
図５は、図３中にステップＳ１３として示すコマンド応答送信処理の詳細を示すフローチャートである。【００４６】
マイクロプロセッサ２４１１は、図４のステップＳ２５またはＳ２６に示すように、サブコントローラ２１２２からリードコマンドを受領した旨の通知を受け取ると（Ｓ３１）、そのリードコマンドについて応答済みであるか判定する（Ｓ３２）。応答していない場合（Ｓ３２：ＮＯ）、マイクロプロセッサ２４１１は、サブコントローラ２１２２に対して、ホスト計算機４へコマンド応答を送信するように要求する（Ｓ３３）。既に他のサブコントローラ２１２２からホスト計算機４にコマンド応答が送られている場合（Ｓ３２：ＹＥＳ）、マイクロプロセッサ２４１１のコマンド応答に関する処理は終了する。【００４７】
サブコントローラ２１２２は、対応付けられているマイクロプロセッサ２４１１から、コマンド応答を送信するようにとの要求を受信すると（Ｓ３４）、ホスト計算機４に対してコマンド応答を送信する（Ｓ３５）。ホスト計算機４は、ストレージ装置１のＤＫＣ２からコマンド応答を受信すると、リードコマンドが受け付けられたことを知る。【００４８】
図６は、図３中にステップＳ１４として示すリードデータ送信処理の詳細を示すフローチャートである。【００４９】
リードコマンドを受領したマイクロプロセッサ２４１１は、要求されたデータ（リードデータ）のステージング処理を実行する（Ｓ４１）。ステージング処理とは、リードデータを記憶装置３１１からキャッシュメモリ２３１へ転送させる処理である。図中、記憶装置３１１をディスクと表示している。【００５０】
図１に示すように、マイクロプロセッサ２４１１は、リードデータを格納している記憶装置３１１からそのリードデータを読み出して、ディスクアダプタ２２のバッファメモリ２２４へ転送する（Ｓ４１Ａ）。続いて、マイクロプロセッサ２４１１は、ディスクアダプタ２２のバッファメモリ２２４内のリードデータをメモリ部２３のキャッシュメモリ２３１へ転送させる（Ｓ４１Ｂ）。これにより、リードデータがキャッシュメモリ２３１に格納され、ステージング処理が終了する。【００５１】
図６に戻る。マイクロプロセッサ２４１１は、キャッシュメモリ２３１内のリードデータを、チャネルアダプタ２１のバッファメモリ２１４へ転送させる（Ｓ４２）。二点鎖線で示すステップＳ４７〜Ｓ４９は後述する。【００５２】
マイクロプロセッサ２４１１は、サブコントローラ２１２２に対して、リードデータをホスト計算機４へ送信するように要求する（Ｓ４３）。サブコントローラ２１２２は、マイクロプロセッサ２４１１からのデータ送信要求を受領すると（Ｓ４４）、バッファメモリ２１４に格納されたリードデータを接続部２１１からホスト計算機４に向けて送信する（Ｓ４５）。【００５３】
マイクロプロセッサ２４１１は、リードコマンドで要求された全てのリードデータをホスト計算機４へ送信したか判定する（Ｓ４６）。未送信のリードデータがある場合（Ｓ４６：ＮＯ）、マイクロプロセッサ２４１１は、ステップＳ４１へ戻る。リードコマンドで要求された全てのリードデータの送信が完了した場合（Ｓ４６：ＹＥＳ）、リードデータ送信処理を終了する。【００５４】
図６中に二点鎖線で示すステップＳ４７〜Ｓ４９について説明する。これらのステップＳ４７〜Ｓ４９は、本発明を適用しない場合に必要になるであろうと思われる処理を示している。【００５５】
複数のサブコントローラ２１２２で、リード要求に含まれる複数のリードコマンドを分担して処理する場合、各サブコントローラ２１２２は、リードコマンドを分担して処理する他のサブコントローラ２１２２の動作を確認しながら処理を進める必要がある。もしも、一方のサブコントローラ２１２２に障害が生じて機能を停止した場合、他方のサブコントローラ２１２２が何も知らずにリードコマンドの処理を進めると、ストレージ装置１からホスト計算機４へ送信するデータの順序を保証することができなくなる。その場合、ホスト計算機４は、間違った順番でデータを受領してしまうことになり、ストレージ装置１の信頼性が低下する。【００５６】
従って、複数のサブコントローラ２１２２がコマンド処理を分担する場合、一般的には、各サブコントローラ２１２２は互いの状態を確認しながら処理を進める必要がある。そこで、互いに状態を確認しながら処理を進める構成の例としてステップＳ４７〜Ｓ４９を図６に示す。それらステップＳ４７〜４９は、本発明の優位性を説明するための比較例であり、従来技術として記載するものではない。【００５７】
比較例において、マイクロプロセッサ２４１１は、自分の担当するリードデータの送信前に、一つ前のリードデータの送信が正常に完了していることを確認する。そこで、マイクロプロセッサ２４１１は、サブコントローラ２１２２に対して、送信診断を要求する（Ｓ４７）。サブコントローラ２１２２は、一つ前のリードデータの送信が正常に完了しているか確認し、その結果をマイクロプロセッサ２４１１へ返す（Ｓ４８）。【００５８】
マイクロプロセッサ２４１１は、一つ前のリードデータの送信が正常に完了していることを確認すると（Ｓ４９：ＹＥＳ）、記憶装置３１１からチャネルアダプタ２１内のバッファメモリ２１４へ転送させたリードデータをホスト計算機４へ送信するようにサブコントローラ２１２２に対して要求する。【００５９】
このようにリードコマンド処理を分担する複数のサブコントローラ２１２２が、互いの状態を確認しながら処理を進める場合、確認のための通信オーバ−ヘッド時間が生じるため、ストレージ装置１の処理性能が低下する。【００６０】
これに対し、本実施例では、複数のサブコントローラ２１２２がリードコマンド処理を分担する場合において、各サブコントローラ２１２２は、他のサブコントローラ２１２２の状態を確認することなく、コマンド処理を実行する。本実施例では、図６に示すように、ステップＳ４７〜Ｓ４９不要となるため、通信オーバヘッド時間が発生しない。従って、ストレージ装置１の処理性能を向上できる。【００６１】
さらに、本実施例では、リードコマンド処理を分担するサブコントローラ２１２２のいずれかに障害が発生した場合、障害通知部２１２４は障害発生元のサブコントローラ２１２２と関連する他のサブコントローラ２１２２に障害を注入して停止させる。【００６２】
従って、リードコマンド処理を分担する全てのサブコントローラ２１２２が処理を停止するため、誤った処理結果がホスト計算機４へ送信されるのを未然に防止でき、ストレージ装置１の信頼性が向上する。【００６３】
このように本実施例では、障害発生時には、停止すべきサブコントローラ２１２２を全て停止させる構成のため、各サブコントローラ２１２２は、障害通知部から障害を注入されて停止しない限り、コマンド処理を実行することができ、サブコントローラ間で状態を確認する必要がない。【００６４】
図７は、図３中にステップＳ１５として示すステータス送信処理およびステップＳ１７として示すステータス応答受信処理の詳細を示すフローチャートである。【００６５】
リードコマンドを処理し、全てのリードデータをホスト計算機４へ送信させた後で、マイクロプロセッサ２４１１は、コマンド処理結果を示すステータスをホスト計算機４へ送信したか判定する（Ｓ５１）。ステータスを送信していない場合（Ｓ５１：ＮＯ）、マイクロプロセッサ２４１１は、サブコントローラ２１２２に対して、ホスト計算機４へステータスを送信するように要求する（Ｓ５２）。【００６６】
サブコントローラ２１２２は、マイクロプロセッサ２４１１からステータス送信要求を受信すると（Ｓ５３）、ホスト計算機４へステータスを送信する（Ｓ５４）。ただし、他のサブコントローラ２１２２が先にホスト計算機４へステータスを送信している場合、ステップＳ５４はスキップする。【００６７】
ホスト計算機４は、サブコントローラ２１２２からステータスを受信すると、ステータス受領を示すステータス応答をサブコントローラ２１２２へ送信する（Ｓ５５）。サブコントローラ２１２２は、ホスト計算機４からステータス応答を受信すると（Ｓ５６）、リードコマンドの処理を完了する（Ｓ５７）。【００６８】
図８は、プロトコルチップ２１２で発生する障害をプロトコルチップ２１２内で処理する障害処理の例を示すフローチャートである。【００６９】
本実施例において、プロトコルチップ２１２で生じる障害は、論理部位としてのポート制御部２１２１やサブコントローラ２１２２の内部要因に基づく障害と、障害通知部２１２４からサブコントローラ２１２２へ注入される障害（外部要因に基づく障害）とに大別することができる。さらに、内部要因に基づく障害は、内部プログラムに関する障害と、内部プログラム以外の構成に関する障害とに分けることができる。本実施例では、以下に述べるように、障害の種類に応じて異なる対策を実行する。【００７０】
なお、図８では、障害の発生する論理部位としてサブコントローラ２１２２を例に挙げて説明するが、ポート制御部２１２１でも同様である。【００７１】
サブコントローラ２１２２は、障害が発生したか監視しており、障害の発生を検知すると（Ｓ６１）、障害通知部２１２４へ障害が発生した旨を通知する（Ｓ６２）。【００７２】
サブコントローラ２１２２は、検出した障害が内部プログラムに関するものであるか判定する（Ｓ６３）。内部のプログラム処理に関する障害である場合（Ｓ６３：ＹＥＳ）、プログラムの解析をし易くするために、ただちにサブコントローラ２１２２を停止する（Ｓ６４）。内部のプログラム処理に関する障害以外の障害としては、例えば、サブコントローラ２１２２内のハードウェア回路の障害がある。サブコントローラ２１２２は、内部のプログラム処理に関する障害ではないと判定した場合（Ｓ６３：ＮＯ）、ただちに処理を停止する必要はない。【００７３】
障害通知部２１２４は、サブコントローラ２１２２からの障害発生通知により、障害が発生したことを検出する（Ｓ６５）。障害通知部２１２４は、障害対策テーブルＴ１１（図９で後述）を参照し、障害の発生した論理部位（ここではサブコントローラ２１２２）と関連する論理部位（サブコントローラやポート制御部）を解析する（Ｓ６７）。【００７４】
障害通知部２１２４は、プロトコルチップ２１２内の全ての論理部位について（Ｓ６８）、障害の発生した論理部位と関連するか否か判定し（Ｓ６９）、障害の発生した論理部位と関連する論理部位には障害を注入する（Ｓ７０）。【００７５】
障害通知部２１２４は、論理部位の接続構成によっては、関連する論理部位の全てに障害を注入する必要はない。障害通知部２１２４は、停止させるべき論理部位にのみ障害を注入し、障害の発生した論理部位と関連する論理部位であっても停止させる必要のない論理部位には障害発生を知らせるだけでよい。【００７６】
サブコントローラ２１２２は、障害通知部２１２４から注入された障害を検出すると、処理を停止する（Ｓ７１）。マイクロプロセッサ２４１１は、サブコントローラ２１２２の処理停止を、後述する定期診断処理により検知する。定期診断処理については、図１２のステップＳ１１０を参照しながら後述する。【００７７】
なお、図８では、障害の発生したサブコントローラ２１２２を例に挙げているが、正常に動作しているサブコントローラ２１２２の場合は、ステップＳ６１〜Ｓ６４は実行されず、障害通知部２１２４から障害が通知されたときにステップＳ７１を実行する。【００７８】
図８に示す処理に代えて、障害通知部２１２４は、障害対策テーブルＴ１１に設定されている内容に基づいて、停止すべき論理部位には障害を注入し、障害の発生した論理部位に関連はしても停止させる必要の無い論理部位には障害発生通知だけを送るようにしてもよい。この場合は、例えばステップＳ６７〜Ｓ６９まで省略可能である。【００７９】
図９〜図１１を用いて、接続構成テーブルＴ１０および障害対策テーブルＴ１１の例を説明する。【００８０】
接続構成テーブルＴ１０は、ポート制御部２１２１とサブコントローラ２１２２との接続関係を設定した管理情報である。障害対策テーブルＴ１１は、ある論理部位で障害が発生した場合に、その障害発生元の論理部位と関連する論理部位に対して、所定の障害対策を適用するための管理情報である。接続構成テーブルＴ１０は主に共通接続部２１２３が使用し、障害対策テーブルＴ１１は障害通知部２１２４が使用する。接続構成テーブルＴ１０と障害対策テーブルＴ１１とは一体化することもできる。以下では、３種類の接続構成を例に挙げて、各接続構成における障害発生箇所と所定の障害対策を施す箇所との関係を説明する。【００８１】
図９は、第１接続構成を示す。接続構成テーブルＴ１０（１）に示すように、第１接続構成では、２つのサブコントローラ２１２２と２つのポート制御部２１２１とで複数のグループを形成し、各グループ内では各サブコントローラ２１２２が各ポート制御部２１２１をそれぞれ制御する。【００８２】
図示の例では、サブコントローラ２１２２（＃０）、２１２２（＃１）と、ポート制御部２１２１（＃０）、２１２１（＃１）とで第１グループＡを形成している。第１グループＡ内の一方のサブコントローラ２１２２（＃０）は、ポート制御部２１２１（＃０）と２１２１（＃１）の両方を制御する。さらに、一方のサブコントローラ２１２２（＃０）は、同じグループ内の他方のサブコントローラ２１２２（＃１）と連携可能に接続されている。第１グループＡ内の他方のサブコントローラ２１２２（＃１）も、ポート制御部２１２１（＃０）と２１２１（＃１）との両方を制御することができ、かつ、一方のサブコントローラ２１２２（＃０）とも連携可能に接続されている。第１グループＡ内のポート制御部２１２１（＃０）と２１２１（＃１）は接続されている。【００８３】
第２グループＢは、サブコントローラ２１２２（＃２）、２１２２（＃３）と、ポート制御部２１２１（＃２）、２１２１（＃３）とから形成されている。第２グループＢ内の一方のサブコントローラ２１２２（＃２）は、ポート制御部２１２１（＃２）と２１２１（＃３）の両方を制御し、かつ、他方のサブコントローラ２１２２（＃３）と連携可能に接続されている。第１グループＢ内の他方のサブコントローラ２１２２（＃３）も、ポート制御部２１２１（＃２）と２１２１（＃３）との両方を制御し、かつ、一方のサブコントローラ２１２２（＃２）とも連携可能に接続されている。第２グループＢ内のポート制御部２１２１（＃２）と２１２１（＃３）は接続されている。【００８４】
接続構成テーブルＴ１０（１）で定義される第１接続構成において障害が発生した場合に使用する障害対策テーブルＴ１１（１）を説明する。【００８５】
障害対策テーブルＴ１１において、白い丸印は障害の発生した論理部位を示す。黒い丸印は、障害の発生した論理部位に関連する論理部位のうち停止対象の論理部位であって、障害通知部２１２４が障害を注入する論理部位を示す。白い三角印は、障害の発生した論理部位に関連する論理部位のうち通知対象の論理部位であって、障害通知部２１２４が障害の発生を通知する論理部位を示す。ハイフンは、障害の発生した論理部位と無関係の論理部位を示す。【００８６】
第１グループＡの一方のサブコントローラ２１２２（＃０）で障害が発生した場合、ペアを形成する他方のサブコントローラ２１２２（＃１）には障害が注入されるため、処理が停止する。さらに、障害発生元であるサブコントローラ２１２２（＃０）が制御する各ポート制御部２１２１（＃０）、２１２１（＃１）にもそれぞれ障害が注入されて、処理が停止する。【００８７】
第１グループＡの他方のサブコントローラ２１２２（＃１）で障害が発生した場合も前記同様に、関連する全ての論理部位、即ち、一方のサブコントローラ２１２２（＃０）、各ポート制御部２１２１（＃０）、２１２１（＃１）にそれぞれ障害が注入されて、処理が停止する。【００８８】
第２グループＢについても、第１グループＡと同様の障害対策が実施される。サブコントローラ２１２２（＃２）で障害が発生した場合は、サブコントローラ２１２２（＃３）、各ポート制御部２１２１（＃２）、２１２１（＃３）に障害が注入されて、処理が停止する。サブコントローラ２１２２（＃３）で障害が発生した場合は、サブコントローラ２１２２（＃２）、各ポート制御部２１２１（＃２）、２１２１（＃３）に障害が注入されて、処理が停止する。【００８９】
つまり、第１接続構成の場合、グループ内のいずれかのサブコントローラ２１２２で障害が発生した場合は、同一グループに属する他の全ての論理部位に障害が注入される。これにより、グループ全体で処理がほぼ同時に停止する。コマンド処理の結果に整合性を持たせ、誤った処理結果がホスト計算機４へ送信されるのを防止するためである。【００９０】
ポート制御部２１２１で障害が発生した場合の障害対策を説明する。第１グループＡの一方のポート制御部２１２１（＃０）で障害が発生した場合、第１グループＡ内の各サブコントローラ２１２２（＃０）、２１２２（＃１）に障害発生が通知される。第１グループＡ内の他方のポート制御部２１２１（＃１）には何の対策も行われない。サブコントローラ２１２２（＃０）、２１２２（＃１）は、正常なポート制御部２１２１（＃１）を使用することができる。【００９１】
第１グループＡ内の他方のポート制御部２１２１（＃１）で障害が発生した場合も前記同様に、第１グループＡ内の各サブコントローラ２１２２（＃０）、２１２２（＃１）に障害発生が通知される。第２グループＢについても同様なので、説明を省略する。【００９２】
このように、ポート制御部２１２１で障害が発生した場合、障害発生元のポート制御部２１２１を制御するサブコントローラ２１２２には、障害が発生したことのみを通知し、障害は注入しない。つまり、障害発生元のポート制御部２１２１に関連するサブコントローラ２１２２は、処理を停止させない。障害の発生したポート制御部２１２１を制御するサブコントローラ２１２２は、正常に動作している他方のポート制御部２１２１も制御している。このため、正常なポート制御部２１２１に障害が波及するのを防止すべく、サブコントローラ２１２２には障害発生のみを通知し、停止させない。【００９３】
図１０は、第２接続構成を示す。接続構成テーブルＴ１０（２）に示すように、第２接続構成では、一つのサブコントローラ２１２２（＃０）と全てのポート制御部２１２１（＃０）〜２１２１（＃３）とで第１グループＡを形成し、残された他のサブコントローラ２１２２（＃１）〜２１２２（＃３）が第２グループＢを形成する。【００９４】
第１グループＡのサブコントローラ２１２２（＃０）が代表サブコントローラとなり、全てのポート制御部２１２１（＃０）〜２１２１（＃３）を制御する。代表サブコントローラ２１２２（＃０）は、他の全てのサブコントローラ２１２２（＃１）〜２１２２（＃３）と連携可能に接続されている。つまり、第２接続構成では、ポート制御を一つのサブコントローラ２１２２（＃０）がまとめて実施し、他のサブコントローラ２１２２（＃１）〜２１２２（＃３）でコマンド処理を分担する。【００９５】
第２接続構成に対応する障害対策テーブルＴ１１（２）を説明する。全てのポート制御部２１２１（＃０）〜２１２１（＃３）を制御するサブコントローラ２１２２（＃０）に障害が発生した場合、全てのポート制御部２１２１（＃０）〜２１２１（＃３）を使用することができない。従って、この場合は、全てのポート制御部２１２１（＃０）〜２１２１（＃３）および他の全てのサブコントローラ２１２２（＃１）〜２１２２（＃３）にそれぞれ障害を注入して、処理を停止させる。【００９６】
これに対し、ポート制御を行わない他のいずれかのサブコントローラ２１２２（＃１）〜２１２２（＃３）で障害が発生した場合、障害の発生したサブコントローラ２１２２とは異なるサブコントローラ２１２２を用いてコマンド処理を再開すればよい。従って、この場合、関連する他のサブコントローラ２１２２に障害を注入しない。代表サブコントローラ２１２２（＃０）には、障害発生を通知する。各ポート制御部２１２１（＃０）〜２１２１（＃３）は、障害の発生したサブコントローラ２１２２と直接の関係はないため、障害対策は何も行われない。【００９７】
ポート制御部２１２１（＃０）〜２１２１（＃３）のいずれかで障害が発生した場合も、代表サブコントローラ２１２２（＃０）のみに障害発生を通知し、他の論理部位を停止させない。代表サブコントローラ２１２２（＃０）は、障害の発生したポート制御部２１２１とは異なるポート制御部２１２１を用いて、ホスト計算機４と通信できる。【００９８】
図１１は、第３接続構成を示す。接続構成テーブルＴ１０（３）に示すように、第３接続構成では、一つのサブコントローラ２１２２（＃０）と２つのポート制御部２１２１（＃０）、２１２１（＃１）とで第１グループＡを形成する。他の一つのサブコントローラ２１２２（＃１）と他の２つのポート制御部２１２１（＃２）、２１２１（＃３）とで第２グループＢを形成する。残されたサブコントローラ２１２２（＃２）、２１２２（＃３）は、第３グループＣを形成する。【００９９】
第１グループＡおよび第２グループＢでは、それぞれ１つのサブコントローラ２１２２が２つずつのポート制御部２１２１を制御しており、第３グループＣの各サブコントローラ２１２２（＃２）、２１２２（＃３）にコマンド処理を分担させる。具体的には、第１グループＡを例に挙げると、サブコントローラ２１２２（＃０）は、同一グループ内のポート制御部２１２１（＃０）、２１２１（＃１）を制御し、第３グループＣの各サブコントローラ２１２２（＃２）、２１２２（＃３）と連携する。第２グループＢと第３グループＣとの関係も、第１グループＡと第３グループＣの関係と同様である。換言すれば、第３接続構成は、図１０に示す第２接続構成がプロトコルチップ２１２内に複数設けられている場合を示す。【０１００】
各グループにおいて、ポート制御を担当するサブコントローラ２１２２に障害が発生した場合は、制御対象のポート制御部２１２１に障害を注入して停止させる。障害発生元のサブコントローラ２１２２が連携するグループＣ内のサブコントローラ２１２２（＃２）、２１２２（＃３）には障害発生だけを通知する。【０１０１】
例えば、第１グループＡのサブコントローラ２１２２（＃０）に障害が発生した場合は、ポート制御部２１２１（＃０）、２１２１（＃１）に障害を注入して停止させ、連携先のサブコントローラ２１２２（＃２）、２１２２（＃３）には障害発生を通知する。第２グループＢのサブコントローラ２１２２（＃１）に障害が発生した場合は、ポート制御部２１２１（＃２）、２１２１（＃３）に障害を注入して停止させ、連携先のサブコントローラ２１２２（＃２）、２１２２（＃３）には障害発生を通知する。【０１０２】
ポート制御部２１２１（＃０）〜２１２１（＃３）のいずれかで障害が発生した場合、障害の発生したポート制御部２１２１を制御するサブコントローラ２１２２に障害発生を通知する。【０１０３】
図１２は、ホスト計算機４から受信したコマンドを複数のサブコントローラ２１２２で分担して処理している間に、一方のサブコントローラ２１２２で障害が発生した場合の処理の様子を示す。図１２では、一方のサブコントローラ２１２２（＃０）は、一つのポート制御部２１２１（＃０）を制御しており、他方のサブコントローラ２１２２（＃１）と連携してコマンドを処理する場合を例に挙げる。【０１０４】
ステップＳ１０において、サブコントローラ２１２２（＃０）に障害が発生すると、サブコントローラ２１２２（＃０）は、図９のステップＳ６１、Ｓ６２で述べたように障害が発生した旨を障害通知部２１２４に通知する。【０１０５】
障害通知部２１２４は、障害対策テーブルＴ１１を用いて、停止対象のポート制御部２１２１（＃０）およびサブコントローラ２１２２（＃１）を検出する。障害通知部２１２４は、停止対象のサブコントローラ２１２２（＃１）に障害を注入するとともに（Ｓ１０２）、停止対象のポート制御部２１２１（＃０）にも障害を注入する。【０１０６】
サブコントローラ２１２２（＃１）は、注入された障害を検出すると（Ｓ１０４）、コマンド処理を停止する（Ｓ１０６）。ポート制御部２１２１（＃０）も、注入された障害を検出すると（Ｓ１０５）、処理を停止する（Ｓ１０６）。【０１０７】
上述のようにように、障害が発生したことにより、または、外部から意図的に障害が注入されたことにより、プロトコルチップ２１２内でコマンド処理を分担して担当する各サブコントローラ２１２２（＃０）、２１２２（＃１）およびポート制御部２１２１（＃０）は、それぞれ停止する（Ｓ１０６）。【０１０８】
サブコントローラ２１２２（＃０）に対応付けられたマイクロプロセッサ２４１１（＃０）は、図６で述べたように、障害発生前のサブコントローラ２１２２（＃０）から受領したリードコマンドに従って、リードデータをキャッシュメモリ２３１へ転送させる。ステージング処理を終えたマイクロプロセッサ２４１１（＃０）は、キャッシュメモリ２３１上のリードデータをホスト計算機４に送信するよう、サブコントローラ２１２２（＃０）に要求する（Ｓ１０７）。しかし、サブコントローラ２１２２（＃０）は、障害が発生したために停止している。従って、マイクロプロセッサ２４１１（＃０）が担当したリードデータは、ホスト計算機４に送信されない。【０１０９】
同様に、サブコントローラ２１２２（＃１）に対応付けられたマイクロプロセッサ２４１１（＃１）も、障害が注入される前のサブコントローラ２１２２（＃１）から受領したリードコマンドに従って、リードデータをキャッシュメモリ２３１へ転送させる。その後、マイクロプロセッサ２４１１（＃１）は、サブコントローラ２１２２（＃１）に対して、キャッシュメモリ２３１上のリードデータをホスト計算機４へ送信するよう要求する（Ｓ１０８）。しかし、サブコントローラ２１２２（＃１）は、障害通知部２１２４から障害が注入されたために停止している。従って、マイクロプロセッサ２４１１（＃１）が担当したリードデータは、ホスト計算機４へ送信されない。【０１１０】
マイクロプロセッサ２４１１は、定期的に実行する定期診断処理Ｓ１１０により、サブコントローラ２１２２が停止したことを検出することができる。図１２では、マイクロプロセッサ２４１１（＃１）を例に挙げて説明するが、マイクロプロセッサ２４１１（＃０）も同様の定期診断処理Ｓ１１０を実行する。【０１１１】
マイクロプロセッサ２４１１（＃１）は、所定の定期診断時期が到来すると、所定のサブコントローラ２２１２に対して、診断情報の送信を要求する（Ｓ１１１）。所定のサブコントローラ２２１２とは、ポート制御を担当するサブコントローラ２１２２、および／または、要求元のマイクロプロセッサ２４１１に対応付けられているサブコントローラ２１２２である。図１２では、ポート制御を担当するサブコントローラ２１２２（＃０）に診断情報の送信を要求する場合を示す。【０１１２】
サブコントローラ２１２２（＃０）は、マイクロプロセッサ２４１１（＃１）から診断情報の送信要求を受領すると、診断情報を採取し（Ｓ１１２）、マイクロプロセッサ２４１１（＃１）へ送信する（Ｓ１１３）。これにより、マイクロプロセッサ２４１１（＃１）は、プロトコルチップ２１２で障害が発生し、コマンド処理を正常に終了できなかったことを確認できる。【０１１３】
本実施例によれば、複数のサブコントローラ２１２２とマイクロプロセッサ２４１１とにより、複数のコマンド処理を平行して実施できるため、処理時間を短縮できる。【０１１４】
しかし、もしも分担して処理する複数のサブコントローラ２１２２のうちいずれかのサブコントローラ２１２２で障害が発生した場合は、ホスト計算機４へ送信するリードデータの順序を保証することができない。このため、ホスト計算機４へ異常な送信をしてしまうおそれがある。【０１１５】
そこで、本実施例では、サブコントローラ２１２２で障害が発生した場合は、ポート制御に関連する他のサブコントローラ２１２２に対して障害を注入する。これにより、ポート制御に関連する動作を全て停止させることができる。従って、本実施例によれば、障害発生後に、ホスト計算機４に異常な送信をするのを未然に防止できる。【０１１６】
これに対し、図６で述べた比較例ステップＳ４７〜Ｓ４９では、ホスト計算機４へ正常な応答をしていることを確認すべく、サブコントローラ２１２２を診断した後でリードデータの送信をサブコントローラ２１２２へ要求する。【０１１７】
従って、比較例では、ホスト計算機４に対するデータ送信要求を発行するたびに、サブコントローラ２１２２を診断する必要があり、コマンド処理に要する時間が長い。本実施例では、各マイクロプロセッサ２４１１は、サブコントローラ２１２２の状態を気にせずに、サブコントローラ２１２２に対してデータ送信を要求することができる。マイクロプロセッサ２４１１は、定期的な診断処理Ｓ１１０を実行することで、サブコントローラ２１２２で生じた障害を検出すればよい。【０１１８】
なお、本発明は、上述した実施形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【符号の説明】
【０１１９】
１：ストレージ装置、２：コントロールユニット（ＤＫＣ）、３：データ格納ユニット（ＤＫＵ）、４：ホスト計算機、２１：チャネルアダプタ（ＣＨＡ）、２２：ディスクアダプタ（ＤＫＡ）、２３：メモリ部、２４：プロセッサ部、２１２：プロトコルチップ、２１２１：ポート制御部、２１２２：サブコントローラ、２１２３：共通接続部、２１２４：障害通知部
【図１】
2015151239.tif 000003
【図２】
2015151239.tif 000004
【図３】
2015151239.tif 000005
【図４】
2015151239.tif 000006
【図５】
2015151239.tif 000007
【図６】
2015151239.tif 000008
【図７】
2015151239.tif 000009
【図８】
2015151239.tif 000010
【図９】
2015151239.tif 000011
【図１０】
2015151239.tif 000012
【図１１】
2015151239.tif 000013
【図１２】
2015151239.tif 000014
【国際調査報告】
2015151239.tif 000015
2015151239.tif 000016