(57)【特許請求の範囲】
【請求項１】
ホスト計算機とコマンドパケットを含むパケットを送受信するチャネルアダプタと、
前記パケットの転送に関する制御情報を記憶するメモリと、
前記パケットの転送先を切り替えるスイッチと、そして、
前記ホスト計算機から送受信されるライト又はリードリクエストの対象となる記憶資源と、
を有し、前記制御情報に基づいて前記パケットの転送を制御するモジュールを、複数備える、ストレージサブシステムであって、
前記複数のモジュールのそれぞれのスイッチがリンクによって接続されることにより、前記複数のモジュール間で前記パケットの転送が実行され、
前記リンクは複数のパスを備え、
前記リンクを介して前記パケットの転送を実行しようとする複数のモジュールは、前記複数のパスについて、前記コマンドパケットの転送方向を一方向に規制する、
ストレージサブシステム。
【請求項２】
前記複数のモジュールのうちの第１のモジュールは、第１のパスに沿って、前記複数のモジュールのうちの第２のモジュールへ第１のコマンドパケットを転送し、
前記第２のモジュールは、前記第１のパスとは異なる第２のパスに沿って、前記第１のモジュールへ第２のコマンドパケットを転送する、
請求項１記載のストレージサブシステム。
【請求項３】
前記第２のモジュールは、前記第１のパスに沿って、前記第１のコマンドパケットに対する応答パケットを前記第１のモジュールに転送し、
前記第１のモジュールは、前記第２のパスに沿って、前記第２のコマンドパケットに対する応答パケットを前記第２のモジュールに転送する、
請求項２記載のストレージサブシステム。
【請求項４】
前記スイッチは、送信バッフア及び受信バッフアを有し、
前記パスは、前記パケットの送信元の送信バッフア、送信元の受信バッフア、送信先の送信バッフア、及び、送信先の受信バッフアからなる、
請求項３記載のストレージサブシステム。
【請求項５】
前記パケットがホップできる複数のモジュール間のパス数に関する制限値が前記制御情報として前記メモリに記録され、
前記パケットの転送を実行する複数のモジュールは、前記メモリの前記制御情報から前記制限値を参照し、当該制限値に基づいて、前記パケットの転送を実行する、請求項３記載のストレージサブシステム。
【請求項６】
前記制御情報は、前記パケットの送信元のスイッチの識別番号、及び、送信先のスイッチの識別番号、を含む、請求項５記載のストレージサブシステム。
【請求項７】
それぞれ記憶資源を有する複数の構成単位と、
前記複数の構成単位を連結するスイッチと、
ホスト計算機からのライト又はリードアクセスに基づくパケットを、前記スイッチを介して前記複数の構成単位のうち目的の構成単位に転送することを制御するコントローラと、
前記パケットがホップできる、前記複数の構成単位間のパス数に関する制限値を含む転送規則が格納されたメモリと、
を備え、
前記複数の構成単位のスイッチ間は複数パスで接続され、さらに、前記構成単位は前記スイッチを介して他の構成単位に加重的に連結可能に構成されている、ストレージサブシステムであって、
前記コントローラは、
前記転送規則に基づいて、前記複数の構成単位の一つから他の構成単位に向いたコマンドパケットを前記複数のパスの一つを介して転送し、前記他の構成単位から前記一つの構成単位へ向いたコマンドパケットを前記一つのパスとは異なるパスを介して転送し、
さらに、前記複数の構成単位間を転送される複数のパケットの少なくとも一つのデータを前記複数の構成単位の少なくとも一つに一時記憶させる、
ストレージサブシステム。
【請求項８】
それぞれ記憶資源を有する複数の構成単位と、
前記複数の構成単位を連結するスイッチと、
ホスト計算機からのライト又はリードアクセスに基づくパケットを、前記スイッチを介して前記複数の構成単位のうち目的の構成単位に転送することを制御するコントローラと、
前記パケットがホップできる前記複数の構成単位間のパス数に関する制限値を含む転送規則が格納されたメモリと、
を備え、
前記構成単位は前記スイッチを介して他の構成単位に加重的に連結可能に構成される、ストレージサブシステムであって、
前記コントローラは、
前記複数の構成単位の前記スイッチ同士の間のパスを流れるコマンドパケットの転送方向を前記転送規則によって特定方向に規制し、
前記複数の構成単位間を転送される複数のパケットの少なくとも一つのデータを前記複数の構成単位の少なくとも一つに一時記憶させる、
ストレージサブシステム。
【請求項９】
それぞれ記憶資源を有する複数の構成単位と、
前記複数の構成単位を連結するスイッチと、
ホスト計算機からのライト又はリードアクセスに基づくパケットの転送規則が格納されたメモリと、
前記パケットを、前記転送規則に基づいて、前記スイッチを介して前記複数の構成単位のうち目的の構成単位に転送することを制御するコントローラと、
を備え、
前記構成単位は前記スイッチを介して他の構成単位に加重的に連結可能に構成され、
第１の冗長系を構成する前記スイッチの複数と、第２の冗長系を構成する、前記第１の冗長機を構成する複数のスイッチ以外の前記スイッチの複数と、によって、前記複数の構成単位が互いに連結され、
前記第１の冗長系と第２の冗長系に対する前記パケットが一度に跨げる、前記複数のスイッチ間のパス数に関する制限値が、前記制御情報として、前記メモリに記録されている、
ストレージサブシステムであって、
前記コントローラは、
前記複数の構成単位の前記スイッチ同士の間のパスを流れるコマンドパケットの転送方向を前記転送規則によって特定方向に規制し、
前記第１の冗長系と第２の冗長系に属するスイッチに対する前記パケットが、当該パケットの転送元からその転送先までの前記パス数に関する前記制限値を超え場合には、前記パケットの転送の途中で、データを前記モジュール内のコンポーネントに一時記憶する、ストレージサブシステム。
【請求項１０】
それぞれ記憶資源を有する複数の構成単位と、
前記複数の構成単位を連結するスイッチと、
ホスト計算機からのライト又はリードアクセスに基づくパケットの転送規則が格納されたメモリと、
前記パケットを、前記転送規則に基づいて、前記スイッチを介して前記複数の構成単位のうち目的の構成単位に転送することを制御するコントローラと、
を備え、
前記構成単位は前記スイッチを介して他の構成単位に加重的に連結可能に構成され、
第１の冗長系を構成する前記スイッチの複数と、第２の冗長系を構成する、前記第１の冗長機を構成する複数のスイッチ以外の前記スイッチの複数と、によって、前記複数の構成単位が互いに連結され、
前記第１の冗長系と第２の冗長系に対する前記パケットが一度に跨げる、前記複数のスイッチ間のパス数に関する制限値が、前記制御情報として、前記メモリに記録されている、
ストレージサブシステムであって、
前記コントローラは、
前記複数の構成単位の前記スイッチ同士の間のパスを流れるコマンドパケットの転送方向を前記転送規則によって特定方向に規制し、
前記第１の冗長系に属する前記少なくとも一つのスイッチが障害を受けた際に、前記第２の冗長系を介して、前記パケットを前記複数のモジュールのうち目的のモジュールの対象コンポーネントに転送する、ストレージサブシステム。
【請求項１１】
互いに連結される複数のモジュールを備え、当該複数のモジュールの少なくとも一つに接続されたホスト計算機からのライト又はリードアクセスを受領し、
前記複数のモジュールは、前記ホスト計算機からの前記ライト又はリードアクセスに基づくパケットを転送する転送ルートを構成し、前記パケットは当該転送ルートを構成する前記複数のモジュールを順に通過して、目的とするモジュールまで転送される、ストレージサブシステムであって、
前記各モジュールは、
前記ホスト装置との入出力を制御する第１のアダプタと、
前記パケットのデータを保存記憶する主記憶装置と、
キャッシュメモリと、
前記主記憶装置との入出力を制御する第２のアダプタと、
コントローラと、
前記第１のアダプタと、前記主記憶装置と、前記キャッシュメモリと、前記第２のアダプタと、前記コントローラと、に接続するスイッチと、を有し、
前記コントローラは、前記スイッチを介して、前記第１のアダプタと、前記主記憶装置と、前記キャッシュメモリと、前記第２のアダプタとにアクセスして前記パケットの転送を制御するものであり、
前記複数のモジュールの各モジュールは、前記スイッチ間に設けられたパスを介して互いに接続されて前記転送ルートを構成し、
前記コントローラは、前記転送ルートを転送されるパケットが通過できる前記パスの上限値を認識し、前記パケットが前記上限値を超えて前記転送ルートを転送されるものである場合には、前記パケットが前記上限値を超える前に前記転送ルート上にある前記モジュールの前記キャッシュメモリに前記パケットに含まれるデータを一時記憶し、次いで、当該キャッシュメモリに記憶された前記パケットを他のモジュールに向けて転送する、ストレージサブシステム。
【請求項１２】
前記ホスト計算機からのライトアクセスを受領した前記モジュールの第１のコントローラが、前記ライトデータを記憶する記憶領域が割り当てられていないと判定した場合、当該第１のコントローラが属するモジュールの前記主記憶装置に当該ライトデータの割り当てが可能か否かを判定し、
前記第１のコントローラがこの判定を否定した場合、当該第１のコントローラは前記上限値を超えない範囲にある他のモジュールの第２のコントローラに前記パケットを送信し、
当該第２のコントローラは前記第１のコントローラから送られた前記パケットの前記ライトデータを当該他のモジュールの前記主記憶装置の記憶領域に前記割り当て可能かを判定する、請求項１１記載のストレージサブシステム。
【請求項１３】
前記各モジュールは第1の冗長系に属する第１のスイッチと、第２の冗長系に属する第２のスイッチと、を備え、
同一冗長系の前記スイッチ同士が前記パスによって接続されることにより、前記複数のモジュールが接続され、
前記各モジュールの第１のアダプタ、前記第２のアダプタ、前記キャッシュメモリ、及び前記コントローラとは、当該モジュールの前記第１のスイッチと前記第２のスイッチとに接続している、請求項１１記載のストレージサブシステム。
【請求項１４】
前記第１のスイッチ及び第２のスイッチはそれぞれ複数のスイッチアダプタから構成されてなり、
前記各スイッチアダプタには前記上限値が設定され、
前記スイッチアダプタに転送された前記パケットは当該スイッチアダプタから先の他のスイッチアダプタに転送される際に前記上限値の規制を受け、
前記パケットを他のモジュールに至るように転送する第１のスイッチアダプタの前記上限値は、前記パケットを同一モジュール内で転送する第２のスイッチアダプタの前記上限値よりも小さい値に設定されてなり、
前記モジュールは前記第１のスイッチアダプタに前記第２のスイッチアダプタを接続し、当該第1のスイッチアダプタを他のモジュールの前記第１のスイッチアダプタに接続している、請求項１３記載のストレージサブシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージサブシステムに係わり、特に、ストレージサブシステム内ネットワークでのパケット通信においてデッドロックが発生することを抑制できるストレージサブシステムに関するものである。
【背景技術】
【０００２】
従来からコンピュータシステムに、デッドロックが発生しないようにする取り組みがなされている。デッドロックとは、コンピュータシステムの通信ネットワークで複数のパケットの処理に競合が発生し、複数のパケットが互いにすくみを起こして、パケットの処理が進まない状況である。
【０００３】
例えば、特開２００２―３４４４６３号公報には、処理装置と接続されたノード装置が双方向に通信可能なリンクによってリング状に接続された双方向リングネットワークにおいて、パケットのルーティングを容易に変更できるようにするために、ノード装置はデッドロック回避のためにネットワーク中のどの部分で依存関係を切断するかを記録する切断点記録レジスタを有し、処理装置から入力されたパケットに関し、このレジスタ値を元にして、パケットを双方向リングネットワーク上のどちらの方向に送出するかを決定することが記載されている。
【０００４】
また、特開２００３―３０１６６号公報にはタスクの処理効率の低下を防ぎながら、デッドロックが解消される疎結合マルチプロセッサシステムを提供するために、複数の資源を共有しながら複数のタスクを実行するホスト群と、デッドロックチェック装置とを備え、デッドロックチェック装置は、複数のタスクのうちの一のタスクが、資源のうちの一を待つ待ち状態に入ることにより発生するデッドロックを検出し、デッドロックが検出されたとき、タスクそれぞれの処理の進行程度と、タスクそれぞれに定められたプライオリティとに基づいて、既述の複数のタスクのうちから、ロックしている資源を解放する資源解放タスクを選択することが開示されている。
【０００５】
さらにまた、特開２００４−２４６４３９号公報には、クラスタシステムを構成するホスト間でのデッドロックによるクラスタシステム全体のストールを防止するために、タイマ監視手段が共有資源に対する資源ロック待ちを監視し、共有資源長時間ロックチェック手段が共有資源に対する資源ロック待ちの原因となっているホストおよびプロセスを調査し、共有資源に対する資源ロック待ちの原因となっているプロセスを強制停止してプロセスが確保していた共有資源のロックを解放し、共有資源に対する資源ロック待ちの原因となっているプロセスが動作しているホストを強制停止して、ホストがロックしていた共有資源に対する資源ロック要求をパージすることが記載されている。
【特許文献１】特開２００２―３４４４６３号公報
【特許文献２】特開２００３―０３０１６６号公報
【特許文献３】特開２００４−２４６４３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特開２００２―３４４４６３号公報に係る従来例では、リングネットワークの全域に渡って切断点を管理しなければならず管理負荷が大きくなるという課題がある。
【０００７】
特開２００３―０３０１６６号公報に係る従来例では、デッドロックが検出されたとき、タスクそれぞれの処理の進行程度と、タスクそれぞれに定められたプライオリティとに基づいて、既述の複数のタスクのうちから、ロックしている資源を解放する資源解放タスクを選択しなければならないが、これはタスクの処理に対してオーバヘッドとなり、特にシステムに拡張性を持たせようとするとした場合にその実現性が乏しい。
【０００８】
また、特開２００４−２４６４３９号公報に係る従来例にかかるクラスタスステムをストレージシステムの内部ネットワークに応用しようとすると、資源ロック状態が検知されるまでに、ストレージシステムにコマンドを発行したホスト計算機がそのコマンドのタイムアウトを起こしてしまい、ホスト計算機が目的のノードにタイムアウト前にパケットを送ることができなくなるという課題がある。
【０００９】
ところで、ユーザの事業の成長に合わせて、記憶容量などの規模を拡大できるストレージシステムとして、グリッドストレージシステムが存在する。このストレージシステムは、チャネルアダプタやディスクアダプタ等を有する比較的小規模なノードの複数を、スイッチを介してストレージサブシステムの内部ネットワークに順次追加して、ユーザに対して提供される記憶資源の規模を拡大できるグリッドアーキテクスチャを実現する。
【００１０】
ストレージシステムのあるノードがホスト計算機からコマンドを受領すると、コマンドを受領したノードは、スイッチを介して目的のノードにリードコマンドやライトコマンドのパケットを転送し、このパケットを受けたノードは、キャッシュメモリや記憶デバイスとの間でデータの書き込み・データの読み出しを行うことで、ストレージシステムはホスト計算機に応答する。
【００１１】
ストレージサブシステムの内部ネットワークでの複数のパケットの転送が、複数のスイッチに及ぶと、複数のパケットがノードのパスやバッファなどのリソースを同時に取り合い、この時のリソースの依存関係がループを構成すると、ホスト計算機からの命令に基づく処理が先に進めなくなる、既述のデッドロックが発生する。
【００１２】
従来は、グリッドストレージシステムなどのスケーラブル（拡張容易性）に優れたストレージシステムの分野において、このデッドロックを解消するための有効な提案がなされてこなかった。
【００１３】
そこで、本発明は、スケーラブル性に優れたグリッドストレージシステムにおいて、デッドロックを回避することを目的とするものである。本発明の他の目的は、デッドロックの検出器など特別のハードウエアを必要とすることなく、デッドロックの発生を防ぐことができるストレージサブシステムを提供することにある。本発明のさらに他の目的は、処理オーバヘッドを起こすことなく、さらに、ホスト計算機のタイムアウトを起こすことなくデッドロックの発生を防ぐことができるストレージサブシステムを提供することにある。
【課題を解決するための手段】
【００１４】
前記目的を達成するために、本発明は、ユーザの事業の成長に合わせて、記憶容量などの規模を拡大できるグリッドストレージシステムにおいて、前記デッドロックが起きないようなパケットの転送規則を備え、この転送規則に基づいて内部ネットワーク中のパケットの転送を制御することを特徴とするものである。
【発明の効果】
【００１５】
本発明は、スケーラブル性に優れたグリッドストレージシステムにおいて、デッドロックを回避することができる。また、本発明によれば、デッドロックの検出器など特別のハードウエアを必要とすることなく、デッドロックの発生を防ぐことができるストレージサブシステムを提供することができる。
【００１６】
さらにまた、本発明によれば、処理オーバヘッドを起こすことなく、かつ、ホスト計算機のタイムアウトを起こすことなくデッドロックの発生を防ぐことができるストレージサブシステムを提供することができる。
【発明を実施するための最良の形態】
【００１７】
次に、本発明の実施形態について説明する。図１は、本発明に関するストレージシステムのブロック図である。このストレージシステムは、複数のホスト計算機１０がネットワーク手段としてのＳＡＮ１２を経由して、ストレージサブシステム１４に接続されている構成を有している。
【００１８】
このストレージサブシステム１４は、グリッドストレージとしての構造を有している。すなわち、モジュール１６がストレージサブシステムに順次追加できる。モジュール１６はストレージ資源と、チャネルアダプタなどのストレージ資源に対するデータの入出力を制御する複数の内部コンポーネントとを備えている。
【００１９】
個々のモジュール１６は、チャネルアダプタ（ＣＨＡ）２０と、マイクロプロセッサ（ＭＰ）１８と、キャッシュメモリアダプタ（ＣＭＡ又はＣＭとして図示）２１と、ディスクアダプタ（ＤＫＡ）２２と、ストレージ資源としての、ハードディスクドライブ（ＨＤＤ）などの記憶デバイス（主記憶装置）２６、そしてスイッチアダプタ（ＳＷ）２４とを備えている。
【００２０】
チャネルアダプタ２０はホスト計算機１０との間でのデータ転送を制御する。ディスクアダプタ２２は記憶デバイス２６との間でのデータ転送を制御する。キャッシュメモリアダプタ２１はホスト計算機１０と記憶デバイス２６との間で転送されるデータを一時記憶する。マイクロプロセッサ１８は、チャネルアダプタ２０とディスアダプタ２２とを制御して、スイッチアダプタ２４を介するパケット転送を制御する。
【００２１】
個々のモジュールのスイッチアダプタ２４は、自身のモジュールのＣＨＡ２０、ＭＰ１８、ＣＭＡ２１、そしてＤＫＡ２２を互いに接続させるとともに、これらの内部コンポーネントを他のモジュールのスイッチアダプタとを接合させ、一つのモジュール内及び他のモジュールとの間でのパケット転送を実現する内部ネットワークを構成する。
【００２２】
したがって、ホスト計算機１０からのリード又はライトコマンドは、各モジュールのスイッチアダプタ２４を介し、さらに他のモジュールのスイッチアダプタを経由したパケット転送によって、目的とするモジュールのＤＫＡ２２に伝達される。
【００２３】
図２は、ホスト計算機１０からリード要求のフレームがストレージサブシステム１４に発行された場合での、ストレージサブシステムのスイッチ内・スイッチ間でのパケット転送の処理の流れを説明するラダーチャートを表している。
【００２４】
点線は、いわゆるPosted Access（ポスティッドアクセス）と呼ばれる、コマンドパケットの転送先コンポーネントからの応答パケットをパケットの転送元コンポーネントが要求しないアクセスを示し、実線は、いわゆるNon-Posted Access（ノンポスティッドアクセス）と呼ばれる、コマンドの転送先コンポーネントからの応答をコマンドの転送元コンポーネントが要求するアクセスを示している。データのリード又はライトを要求するコマンドパケットは、データが保護されるべきであるとの観点から、通常は、ノンポスティッドアクセスの形式に従って転送される。
【００２５】
ホスト計算機１０からフレームＳ０１がＣＨＡに発行されるとＣＨＡはこのフレームを解析して、フレームの種類(リード要求)とデータが存在するアドレスを表すパケットＳ１０を形成して、これを、ＳＷを経由してＭＰに伝える。
【００２６】
この応答を受けたＭＰは、データがどのＤＫＡの配下にある記憶デバイスにあるか、あるいはどのＣＭＡにあるかを解析して、ＣＭＡにデータが格納されていなければ当該ＤＫＡにデータを求めるコマンドパケットＳ１２を形成してこれを送信する。
【００２７】
図２の例では、データは当初ＣＭＡに格納されておらずＨＤＤ２６のみにある場合を示している。ＤＫＡ、ＣＭＡ、及びＨＤＤはＭＰと同一のモジュールにあるかあるいは他のモジュールにあるかはデータの存在場所によって異なるものである。
【００２８】
ＤＫＡは、ＭＰからのパケットＳ１２に基づいて、ＨＤＤ２６の特定領域にアクセスしてデータを読み出し、このデータをノンポスティッドアクセスＳ１４によってＣＭＡにステージングするとともに、ＣＭＡへのライトが終了した時点で、この旨を表すパケットＳ１５をＭＰに送信する。
【００２９】
ＭＰがパケットを受領すると、ＣＭＡにデータがステージングされた旨と、データが存在するＣＭＡのアドレスを通知するパケットＳ１６をＣＨＡに送信する。すると、ＣＨＡはＣＭＡの特定アドレスにアクセスして目的のデータをリードして（Ｓ１８）、このデータをホスト計算機に通知する（Ｓ１９）。
【００３０】
ＣＨＡ２０がホスト計算機にデータの転送を終了すると、その旨のパケットＳ１９ＡをＭＰ１８に通知する。次いで、ＭＰは、データをリードした一連の処理にエラーが無かったことをデータの保証コードなどにより確認し、ＣＨＡにホスト計算機へ正常リード終了の応答フレームＳ２１を出すことを求めるパケットＳ２０を通知する。
【００３１】
次に、図３は、ＣＨＡがホスト計算機からライト要求のフレームＳ３０を受けた場合のラダーチャートである。ＣＨＡがホスト計算機からライト要求を受けると、ＣＨＡはライト要求に対応するパケットＳ３０をＭＰに送り、ＭＰはデータをどのＣＭＡのどのアドレスに格納すべきかを解析し、次いで、ＭＰはＣＨＡにホスト計算機からのデータ送信を要求するコマンドパケットＳ３４をＣＨＡに送信する。ＣＨＡはホスト計算機にデータの送信を要求するフレームＳ３６を送信する。
【００３２】
ＣＨＡがホストからデータのフレーム３８を受領すると、ＣＨＡはＭＰから通知されたＣＭＡの特定番地にデータを書き込むコマンドパケットＳ４０を該当するＣＭＡにノンポスティッドアクセスとして通知する。
【００３３】
ＣＭＡからの応答を受けたＣＨＡは、データの転送を終了したことのパケットＳ４２をＭＰに通知する。この通知を受けたＭＰはデータがＣＭＡに正しく書き込まれたことを確認して、パケットＳ４４をＣＨＡに発行する。ＣＨＡは、正常終了を示す応答フレームＳ４６をホスト計算機に発行する。
【００３４】
ＭＰは、データを格納すべきＨＤＤ２６を制御するＤＫＡに、ＣＭＡのデータをデステージングするために、データが存在するＣＭＡのアドレスと、このデータが書き込まれるハードディスクドライブ２６のアドレスとを通知するパケットＳ４８を発行する。
【００３５】
ＤＫＡはＣＭＡの当該アドレスにアクセスして、該当データを取り出し、これをＤＫＡに送ることを求めるコマンドパケットをノンポステッィドアクセスとして発行する（Ｓ５０）。
【００３６】
このデータを受けたＤＫＡはＨＤＤ２６の特定アドレスに該当するデータを保存する（Ｓ５２）。次いで、ＤＫＡはＭＰにデータをデステージ処理したことを通知する(Ｓ５４)。ＭＰは自身が有するメモリに、ディレクトリ情報（一時的にたまたまデータを格納したＣＭ上のアドレスとホスト装置から一意に指定される論理アドレスとの対比）を保存する。
【００３７】
図４はキャッシュメモリのハードウエアブロック図を示す。キャッシュメモリは、キャッシュデータを格納するメモリモジュール３４とメモリモジュールコントローラ３２とを備えている。メモリモジュールコントローラはパケット処理部３０を介して内部ネットワーク制御部２８と接続されている。
【００３８】
内部ネットワーク制御部２８は、パケットの送受信を制御するブロックであって、パケットを順番に受信する受信バッファ２８Ａと、パケットを順番に送信するための送信バッファ２８Ｂとを有する。受信バッファ２８Ａと送信バッファ２８ＢはＦＩＦＯ構造のメモリから構成されている。
【００３９】
パケット処理部３０は、コマンドパケット解析部３０Ａと、応答パケット作成部３０Ｂとを備えている。コマンドパケット解析部３０Ａは、受信バッファ２８Ａからコマンドパケットを順番に受け取り、コマンドパケットに含まれるアドレスとデータとを解析する。ＳＢ２はアドレスをメモリモジュールコントローラ３２に通知するアドレス信号線であり、ＳＢ４はデータを通知するためのデータ信号送出線である。
【００４０】
メモリモジュールコントローラ３２は、コマンドがライトであった場合には、コマンドパケット解析部３０Ａから通知されたアドレスとデータに基づいて、メモリモジュールの当該アドレスに当該データを格納する。一方、コマンドがリードであった場合には、メモリモジュールコントローラ３２はメモリモジュールの当該アドレスから、データをリードする。リードされたデータはデータ読み出し線ＳＢ６を介して応答パケット作成部３０Ｂに送られる。
【００４１】
応答パケット作成部は、データのライト応答あるいはデータのリード応答を表すパケットを作成するブロックであり、アドレス信号線ＳＢ２のアドレス信号ＳＢ８を参照して応答パケットを作成する。応答パケットは順番に送信バッファＢに送られる。
【００４２】
図５はスイッチアダプタのブロック構成を示す。スイッチアダプタ２４は、それぞれ受信バッファ３６Ａと送信バッファ３６Ｂとを有する内部ネットワーク制御部３６を複数備えている。各内部ネットワーク制御部は相互接続網３８に接続して、各内部ネットワーク制御部の受信バッファと送信バッファはそれぞれ他の内部ネットワーク制御部の受信バッファと送信バッファと相互に接続可能である。
【００４３】
さらに、各内部ネットワーク制御部３６はコマンドや応答のパケット解析部４２を介して相互接続網３８に接続している。
【００４４】
パケット解析部４２は、ルーティングテーブル（ＲＴ）を備え、パケットをＲＴに従ってどの送信バッファ（ポート）に送信して良いかを決定する。４６はポートのアドレス、又は、複数ある送信バッファから目的の送信バッファを特定する信号を相互接続網３８に送出する信号線であり、４４はパケットを相互接続網３８に送出する信号線である。
【００４５】
相互接続網３８はポートアドレスに基づいて送信バッファ３６Ｂを特定し、この送信バッファにパケットを送出する。なお、受信バッファ３６Ａ及び送信バッファともＦＩＦＯ構造から構成されている。
【００４６】
図６は、マイクロプロセッサ１８のブロック構成を示すものである。内部ネットワーク制御部４８と、パケット解析部５０と、そして、パケット作成部５２を備えている。内部ネットワーク制御部４８は受信バッファ４８Ａと送信バッファ４８Ｂとを備えている。これらの構成はキャッシュメモリアダプタ(図４)で説明したものと同様である。
【００４７】
マイクロプロセッサ１８は、さらにメモリモジュール５８とプロセッサ５６が接続された周辺回路部５４を備えている。パケット解析部５０及びパケット作成部５２は周辺回路部５４に接続されている。プロセッサ５６はメモリモジュール５８に格納された管理ブロックに基づいて、各コンポーネントなどを制御する。
【００４８】
メモリモジュール５８は、ストレージサブシステム（内部コンポーネント）を制御するための制御プログラム５８Ａと、ＣＭＡへのユーザデータの格納状況を示すディレクトリ情報５８Ｂと、ストレージサブシステムの構成情報５８Ｃと、さらに、他の内部コンポーネントと通信を行うために使用される通信領域５８Ｅを備えている。
【００４９】
図７は、ＣＨＡ/ＤＫＡのブロック構成を示すものである。ＣＨＡとＤＫＡは別ＩＣで構成されても、同一ＩＣによって構成されてもどちらでもよい。ＣＨＡ/ＤＫＡは、プロトコル処理部６０を備え、このプロトコル処理部は、ＣＨＡの場合はホスト計算機やＳＡＮあるいはＬＡＮに接続され、ＤＫＡの場合には記憶デバイスに接続されて、ホスト計算機又はハードディスクドライブとの間でプロトコルの変換処理を行うものである。さらに、ＣＨＡ/ＤＫＡはスイッチアダプタに接続されるポートを備え、このポートには内部ネットワーク制御部６８が接続されている。
【００５０】
さらに、内部ネットワーク制御部６８にはバッファと６６とＤＭＡコントローラ６４Ａとが接続されている。ＤＭＡコントローラ及びバッファは相互接続網６２を介してプロトコル処理部６０に接続されている。内部ネットワーク制御部６８は相互接続網６２に接続されている。相互接続網６２はスイッチによって構成され、プロトコル制御部６０は相互接続網６２を介して、DMAコントローラ６４、バッファ６６、あるいは内部ネットワーク制御部６８に接続することができる。
【００５１】
ＤＭＡコントローラ６４は、ＭＰによってセットされた命令を命令解析部６４Ａで解析してデータの転送を行う。命令にはリード機能６４Ｃ、ライト機能６４Ｄ、又はコピー機能６４Ｅを実現するためのものや、キャッシュアドレスで示されるパケットの転送先や転送元が含まれている。ＤＭＡコントローラ６４は、複数命令をまとめて命令リスト６４Ｂの形式で格納することができる。
【００５２】
ＣＨＡの場合には、ＭＰからの制御によりプロトコル制御部６０を通じてホスト計算機とプロトコルのやり取りを行う。
【００５３】
ホスト計算機からライトの命令が来た場合にはホスト計算機からのライトデータは一端プロトコル制御部６０からバッファ６６に一端格納される。さらに、ＤＭＡコントローラ６４は、バッファに格納されたデータを、受信バッファ６８Ａを介してＣＭＡに転送制御をする。
【００５４】
ホスト計算機などの情報処理装置からのコマンドがリードの場合は、ＤＭＡコントローラ６４は受信バッファ６８Ａを介してＣＭＡからリードしてきたデータをバッファ６６に一旦格納し、プロトコル制御部６０はこのデータをホスト計算機に送る。ＤＫＡの場合は対象がホスト計算機からハードディスクドライブに換わるだけで、処理動作はＣＨＡと同様である。また、ＤＫＡの場合は、ハードディスクドライブをＲＡＩＤ制御するための演算回路を設けても良い。
【００５５】
図８は、二つのモジュール間で、ホスト計算機からのリード要求がノンポスティッドアクセスに伴う、コマンドパケット及び応答パケットによって処理される過程を示したブロック図である。
【００５６】
ＣＨＡ２０−１と、スイッチアダプタ（ＳＷ）２４−１と、ＣＭＡ２１−１は第１のモジュールのコンポーネントの内部コンポーネントである。ＣＨＡ２０−２と、スイッチアダプタ２４−２と、ＣＭＡ２１−２は第２のモジュールの内部コンポーネントである。
【００５７】
ＳＷ２４−１のポートとＳＷ２４−２のポートとの間には一つのパス８００が形成されている。ＣＨＡ２０−１は第２のモジュールのＣＭＡ２１―２のデータをリードするために、二つのＳＷ間のパス８００を経由してＣＭＡ２１−２にアクセスしようとする。
【００５８】
ホスト計算機１０からリード要求を受けたＣＨＡ２０−１は、送信バッファ２８Ａ−１からパケットをＳＷ２４−１の受信バッファ３６Ａ−１に転送する。受信バッファ３６Ａ−１はルーティングテーブル（ＲＴ）にしたがって送信バッファ３６Ｂ（１）−１にパケットを出力する。送信バッファ３６Ｂ（１）−１はパス８００を介してＳＷ２４−２の受信バッファ３６Ａ（１）−２にコマンドパケットを転送する。
【００５９】
このパケットはＳＷ２４−２の送信パケット３６Ｂ（１）−２を介してＣＭＡ２１−２の受信バッファ２８Ａ−２に転送される。ＣＭＡ２１−２はメモリモジュール３４−２のデータとともに応答パケットを、送信バッファ２８Ｂ−２を介してＳＷ２４−２の受信バッファ３６Ａ（１）−２に送出する。
【００６０】
ＳＷ２４−２はこのパケットを送信バッファ３６Ｂ(１)−２とパス８００を介してＳＷ２４−１の受信パケット３６Ｂ−１に送出する。ＳＷ２４−１は送信バッファ３６Ｂ−１を介してデータを含むパケットをＣＨＡ２０−１の受信バッファ２８Ｂ−１に転送する。
【００６１】
図９は、第１のモジュールのＣＨＡ２０−１と第２のモジュールのＣＨＡ２０−２とにそれぞれホスト計算機１０からのリード要求が同時に発行された場合に、ＣＨＡやＣＭＡからスイッチアダプタ（ＳＷ）に連続して発信された複数のパケットが、ＳＷのバッファのバッファを占有してデッドロックを起こしている状態を示している。
【００６２】
ＣＨＡ２０−１は第１のホスト計算機からのリード要求に基づいて、ＣＭＡ２１−２からデータをリードしようとし、ＣＨＡ２０−２は第２のホスト計算機からのリード要求に基づいてＣＭＡ２１−１からデータをリードしようとする。この結果、ＳＷ２４−１からＳＷ２４−２へ向いたコマンドパケット８００（２）と、その反対方向のコマンドパケット８００（１）とが同じパス８００上を流れようとする。
【００６３】
この際、ホスト計算機から第１のＣＨＡ２０−１へのリード要求に基づくパケットが、送信バッファ３６Ｂ（１）−１を占有して、ホスト計算機から第２のＣＨＡ２０−２へのリード要求に基づくパケット８０２がロックしてしまう。
【００６４】
さらに、ＣＨＡ２０−２へのリード要求に基づくパケットが、送信バッファ３６Ｂ（１）−２を占有して、ホスト計算機から第１のＣＨＡ２０−１へのリード要求に基づくパケット８０４がロックしてしまう。この結果、双方のパケットがそれぞれ送信バッファ３６Ｂ（１）−１と送信バッファ３６Ｂ（１）−２を占有して、パケットに対する転送処理がお互いに進まない“すくみ”を起こしデッドロックに至ってしまう。
【００６５】
このデッドロックは、一つのモジュールのＳＷから他のモジュールのＳＷへ送られるコマンドパケットが、同一のパス８００上を双方向に転送されるから生じる。
【００６６】
そこで、デッドロックを防ぐための、パケットの転送規則の第１として、複数のスイッチアダプタ間のパス上を転送されるコマンドパケットの方向を一つの方向に規制することとした。但し、図９の例では、パス８００のコマンドパケットの方向をＳＷ２４−１からＳＷ２４−２に規制すると、ＣＨＡ２０−２はＣＭＡ２１−１へコマンドパケットを送ることができなくなる。
【００６７】
これを解消するために、図１０に示すように、ＳＷ２４−１とＳＷ２４−２との間にパス８００の他に第２のパス８００Ａを形成した。さらに、ＳＷ２４−１に、パス８００Ａにそれぞれ接続する、受信バッファ３６Ａ（２）−１と送信バッファ３６Ｂ（２）−１とを設け、ＳＷ２４−２に、パス８００Ａにそれぞれ接続する、受信バッファ３６Ａ（２）−２と送信バッファ３６Ｂ（２）−２とを設ける。
【００６８】
そして、各モジュールのＭＰは、メモリモジュール５８に、既述の第１の転送規則を実現するための制御テーブルを作成して格納する。この制御テーブルに基づき、スイッチのルーティングテーブル４０を設定する。この制御テーブル又はルーティングテーブルにしたがってパケットの転送を行って転送制御規則が実現される。なお、この制御テーブルについては後述する。
【００６９】
この制御テーブルに基づくルーティングテーブルの設定によって、ＳＷ２４−１からＳＷ２４−２に向けたコマンドパケットは、パス８００に沿って８００（１）のように転送され、ＳＷ２４−２からＳＷ２４−１に向けたコマンドパケットは、パス８００ではなくパス８００Ａに沿って８００（２）のように転送される。
【００７０】
ＣＭＡ２１−２からＣＨＡ２０−１への応答パケットはコマンドパケットが転送されたパス８００に沿ってコマンドパケットの転送方向８００（１）とは反対方向に転送され、ＣＭＡ２１−１からＣＨＡ２０−２への応答パケットはパス８００Ａに沿って８００（２）とは反対方向に転送される。
【００７１】
この結果、パケット送信のためのリソースが拡充されて、複数のパケットが互いに競合する状況から解放されるために、図９のデッドロックの発生を防止することができる。
【００７２】
このように少なくともコマンドパケットが転送される方向を規制することによってデッドロックが防止される。なお、コマンドパケットが転送されるパスとは別に応答パケットが転送されるパスを形成することによりデッドロックがより予防されるが、一方このようにするとモジュールのバッファの構成及びスイッチ間のパス構成が複雑になるために、この実施形態ではコマンドパケットを流れるパスと同一パス上をコマンドパケットに対する応答パケットがながれるようにした。
【００７３】
図１１は、第１のモジュールのＳＷ２４−１がパス１１００を介して第２のモジュールのＳＷ２４−２と接続し、第２のモジュールのＳＷ２４−２がパス１１００Ｂを介して第３のモジュールのＳＷ２４−３と接続し、第３のモジュールのＳＷ２４−３がパス１１００Ａを介してＳＷ２４−１と接続していることを示すブロック図である。
【００７４】
これらのパスに沿って転送されるコマンドパケットの方向は既述の第１の転送規則に基づいて、ＳＷ２４−１からＳＷ２４−３へ、ＳＷ２４−３からＳＷ２４−２へ、ＳＷ２４−２からＳＷ２４−１への向きに規制されている。
【００７５】
今、第１のモジュールのＣＨＡ２０−１がホスト計算機から第２のモジュールのＣＭＡ２１−２にデータをライトすべき要求を受けると、コマンドパケットは、ＳＷ２４−１の、受信バッファ３６Ａ−１と送信バッファ３６Ｂ（３）−１、ＳＷ２４−３の、受信バッファ３６Ａ（１）−３と送信バッファ３６Ｂ（３）−３、ＳＷ−２の、受信バッファ３６Ａ（３）−２と送信バッファ３６Ｂ（２）−２を、この順に通過して、ＣＭＡ２４−２の受信バッファ２８Ａ−２からメモリモジュール３４−２にデータが書き込まれる。図１１に示した破線はコマンドパケットの流れである。
【００７６】
ＣＭＡ２１−２は応答パケットを作成し、次いで、この応答パケットはコマンドパケットと逆に、ＳＷ２４−２からＳＷ２４−３を経て、ＳＷ２４−１に至りＣＨＡ２０−１に送られる。
【００７７】
ＣＨＡ２０−２にＣＭＡ２１−３にデータを書き込むべきライト要求が供給されると、コマンドパケットはＳＷ２４−２、次いでＳＷ２４−１を経てＳＷ２４−３まで供給され、さらにＣＨＡ２０−３にＣＭＡ２１−１にデータを書き込むライト要求が供給されるとコマンドパケットはＳＷ２４−３、次いでＳＷ２４−２を経てＳＷ２４−１まで供給される。
【００７８】
今、ＣＨＡ２０−１,ＣＨＡ２０−２、そしてＣＨＡ２０−３にライト要求が同時に供給されると、図１２に「×」で示すように、コマンドパケットの転送がループ状にすくんで、複数のコマンドパケットが互いに競合してデッドロックが発生する。
【００７９】
このデッドロックの発生は、複数のパケットのそれぞれの転送において、各パケットが複数のモジュールを、ＳＷとモジュール間のパスを介して、跨ごうとすることに基づくものであり、少なくとも一つのパケットが一度に跨ぐことができるパスの数（ホップ数）を制限することによって解消できる。これを第２の転送制御規則とする。
【００８０】
そこで、図１３に示すように、ＳＷ２４―１からのコマンパケットのホップ数を図１２の「２」から「１」に制限するための一つの手段として、ＣＨＡ２０−１からのコマンドパケットのライトデータをＳＷ２４−３に接続するＣＭＡ２１−３に一時記憶することにした(１３００)。
【００８１】
これによって、図１２ではパケットのホップ数がＳＷ２４−１からＳＷ２４−３を経てＳＷ２４−２への「２」であったものが、図１３ではコマンドパケットのホップ数がＳＷ２４−３で一回途切れ、ＳＷ２４−１からＳＷ２４−３への１回、又はＳＷ２４−３からＳＷ２４−２への１回に制限される。
【００８２】
これによって、デッドロックの原因となった競合する３つのパケットの転送ループ(図１２参照)から一つのパケットを解放することができることになって、デッドロックの発生を未然に防ぐことができる。
【００８３】
パケットのホップ数を制限するという第２の転送制御規則は、各モジュールのＭＰのメモリに転送制御テーブルの形で格納される。ＭＰはこの転送制御規則に基づき、パケットの転送をＳＷ制御することによって第２の転送制御規則を達成する。
【００８４】
図１４及び図１５に、既述の第１の転送制御規則及び第２の転送制御規則に基づいて、ホスト計算機からのリード命令を処理する実施形態について説明する。複数のモジュール間での内部コンポーネントの接続構成を図１５に示し、パケットの転送を表すラダーチャートを図１４に示す。
【００８５】
第１のモジュール１５００のＣＨＡ２０−１にホスト計算機から第３のモジュール１５０４の記憶デバイス２６−３に格納されているデータに対するリード要求がなされると、ＣＨＡ２０−１のプロトコル処理部６０がホストリード要求を解析して、これをコマンドパケット１４００として同一モジュールのＳＷ２４−１を介してＭＰ１８−１に転送する。
【００８６】
このＭＰはコマンドパケットのデータ存在アドレスを解析して、該当データがすでにＣＭＡに格納されていない場合は、第３のモジュール１５０４のＤＫＡ２２−３に、コマンドパケット１４０２を作成してこれを転送する。
【００８７】
ＤＫＡ２２−３はＨＤＤ２６−３の目的の領域にアクセスしてデータを読み込んで、データを同一モジュールのＣＭＡ２１−３に一時格納するために、ＣＭＡ２１−３にノンポスティッドアクセス１４０４をする。
【００８８】
ＤＫＡ２２−３はＭＰ１８−１にデータを記憶したＣＭＡ２１−３のアドレスを含む応答パケット１４０６を送信する。これを受けてＭＰ１８−１はＣＨＡ２０−２(第２のモジュール１５０２のもの)にＣＭＡ２１−３のアドレスを含むリードコマンドパケット１４０７を送信する。
【００８９】
このパケットを受けてＣＨＡ２０−２は、図１５にも示すように、ＣＭＡ２１−３にノンポスティッドアクセス１４０８を行ってＣＭＡ２１−３から目的のデータを読み出す。
【００９０】
ＣＨＡ２０−２は読み出したデータを、図１５にも示すように、ノンポスティッドアクセス１４１０によって第２のモジュール１５０２のＣＭＡ２１−２に一時的に書き込む。
【００９１】
ＣＨＡ２０−２はデータを書き込んだＣＭＡ２１−２のアドレスを含むパケット１４１２を形成して、これをＭＰ１８−１に送信する。ＭＰ１８−１はＣＨＡ２０−１にデータが格納されているＣＭＡ２１−２のアドレスを含むパケット１４１１を送信する。
【００９２】
ＣＨＡ２０−１は、図１５にも示すように、ＣＭＡ２１−２にノンポスティッドアクセスによってデータを要求するコマンドパケット１４１４を送信してこのデータを取得する。次いで、ＣＨＡ２０−１はホスト計算機に当該データを転送し、そして、ＣＨＡ２０−１はＭＰ１８−１に、ＣＨＡ２０−１がデータを取得する一例の処理にエラーがなかったか否かをチェックすることを求めるコマンドパケット１４１５を発行する。
【００９３】
ＭＰ１８−１はこのチェックを行い、エラーが無かったことの応答パケット１４１６を作成してＣＨＡ２０−１に送出する。ＣＨＡ２０−１は、ホスト計算機にデータが正しいことを意味する応答フレーム１４１８を送出する。
【００９４】
図１４及び図１５では、ＣＭＡへのデータの格納のためのパケットをノンポスティッドアクセスで行い、このノンポスティッドアクセスで行われるパケット転送（１４１４）について、複数のＳＷ間のパスを通過することがあってもそれを「１ホップ」に限定している。
【００９５】
ノンポスティッドアクセスでは、パケット送信元がパケット送信先の応答を待つために、他のパケットとノードの資源（パス或いはバッファ）を取り合い、デッドロックが発生し易いものではあるが、ノンポスティッドアクセスを「１ホップ」にすることによってこのデッドロックを防ぐことができる。
【００９６】
図１６は、パケットの詳細を示すパケットフレームである。パケットフォーマットは、（１）のように、リードコマンド、ライトコマンド、メッセージ、リード応答、そしてライト応答などのパケット種を表すパケット種部と、パケットの送信先アドレス部と、パケットの送信元アドレス部と、データ長部（リードコマンドの場合は要求データ長）、データ部（パケット種がリードコマンドまたはライト応答の場合は存在しない）、そしてチェックコード部から構成されている。
【００９７】
送信先アドレス部の詳細は、（２）に示すように、スイッチ番号(ＳＷ＃)と、モジュールのコンポーネントの特定情報と、コンポーネット内のアドレスとから構成される。送信元アドレス部も同様に構成される。
【００９８】
図１７は、あるスイッチに着目した場合での、他のＳＷや、ＣＨＡなど同一モジュールの内部コンポーネントとの接続関係を設定したパス状態テーブルである。図１８は図１７のパス設定状況をブロック図で示したものである。ＭＰがＳＷの各ポートについて図１７のテーブルを作成し、これをＭＰのメモリモジュールに格納することによって、図１８のように、一つのモジュールのＳＷについてのパスの特性を設定あるいは定義することができる。
【００９９】
図１７に示すテーブルは、図１８のＳＷ０に対するものであって、図１８に示すように、ポート０にはＣＨＡ０が接続され、ポート１にはＭＰ０が接続され、ポート２にはＤＫＡ０が接続され、ポート３にはＣＭＡ０が接続され、ポート４には他のモジュールのＳＷ３が接続され、さらにポート５にはさらに他のモジュールのＳＷ１が接続されることを示している。パス状態テーブルはスイッチアダプタ毎に設定される。
【０１００】
さらに、ＳＷの各ポートから送出可能なパケットの種類がパス状態テーブルに登録されている。ポート０はＣＨＡ０からコマンドパケットを受けて応答パケットを送出できるものであり、ポート１はＭＰ０からのコマンドパケットを受けて応答パケットを送出できるものであり、ポート２はＤＫＡ０からコマンドパケットを受けて応答パケットを送出できるものであり、ポート３はＣＭＡ０から応答パケットを受けてコマンドパケットを送出することができるものであり、ポート４はＳＷ３からコマンドパケットを受けて応答パケットを送出することができるものであり、そしてポート５はＳＷ１へコマンドパケットを送出することができるものである。
【０１０１】
したがって、コマンドパケットが転送される向きを矢印で示すと、図１８のようになる。ＭＰがパス状態テーブルに従ってＳＷでのパケットの転送を制御すると、図１８のようになる。既述の第１のパケット転送制御規則(図１０)はパス状態テーブルと、このテーブルに基づくＭＰの制御によって実現される。図１０ではＳＷ２４―１とＳＷ２４−２との間のパスを流れるコマンドパケットの方向を規制したが、これは図１８によれば、ポート５から送出可能なパケット種がＳＷ１へのコマンドパケットであること、そして、図１７には説明していないが、ＳＷ１のポート１の接続先はＳＷ０であり、その送出可能なパケット種が応答であることにより、実現できる。パケット種はパケットフレームによって検出可能である。なお、後述するメッセージパケットについてはノンポステッドパケットであり、コマンド・応答パケットの関係はなく、例えばＭＰに接続されるポートにも送受信できる。
【０１０２】
次に、図５のルーティングテーブル（ＲＴ）の詳細について説明する。ＳＷはあるポートから受領したパケットを受信バッファに格納し、ＲＴにしたがって受信パケットをどの転送ポートの送信バッファに送るかを決定する。ルーティングテーブルは、ＳＷのポート毎について設定される。
【０１０３】
図１９は図１８のＳＷ０のＣＨＡ０が接続する受信ポート０について設定されたＲＴである。パケットが転送されるべき送信先アドレスは、ＳＷ♯とコンポーネントの特定情報（ＩＤ）から構成される。送信先アドレスのＳＷ♯がＳＷ０の場合には、同一モジュールの目的とするコンポーネントに宛てられたもので、ＲＴにしたがって、対応する転送ポートに向けてパケットがルーティングされる。
【０１０４】
送信先アドレスのＳＷ♯がＳＷ０以外の場合には、ＳＷ０が受信したパケットが、他のモジュールのＳＷの受信ポートに向けるために、ポート５に対してルーティングされる。図１９のＲＴの転送ポートは図１７のパス状態テーブルに整合している。
【０１０５】
図２０はパス状態テーブルに基づいて、ＳＷが属するモジュールのＭＰが、ＲＴを設定する場合の動作について説明するフローチャートである。ＭＰはＲＴが設定されていないポートからＲＴを設定すべきポートを選択する(２０００)。
【０１０６】
次いで、ＭＰはパス設定テーブルの「接続先」とＲＴの「コンポーネント」が一致するポートについて、ＲＴの「転送ポート♯」をパス設定テーブルの「ポート＃」とする(Ｓ２００２)。
【０１０７】
いまＲＴを設定しているポートのパス設定テーブルの送出可能パケット種が「応答」ならば、このいまＲＴを設定しているポートが受信するのは、「応答」の対となる「コマンド」パケットである。この「コマンド」パケットの転送先ポートを決定するのがＲＴである。そこで、さらに、ＭＰは、パス設定テーブルから、「接続先」=ＳＷ、かつ「送出可能パケット種」が「コマンド」のポート＃を選択して、「送信先アドレス」を「他ＳＷ」の「転送ポート＃」とする(２００４)。いまＲＴを設定しているポートの送出可能パケット種が「コマンド」ならば、ここで選択するのは、「接続先」=ＳＷ、かつ「送出可能パケット種」が「応答」のポート＃となる。
【０１０８】
次いで、ＭＰはＳＷ中の全てのポートの設定を行ったかを判定し（２００６）、これを肯定する場合にはＲＴの設定のための処理を終了し、これを否定する場合には２０００にリターンする。
【０１０９】
既述の図１３及び図１４では、データをＣＭＡに一時記憶して、コマンドパケット或いは応答パケットのホップ数を「１」とした。複数のモジュールの各ＭＰはメッセージパケットを交換して相互に連携して、このパケット転送制御規則を実現する。
【０１１０】
図２１はメッセージフォーマットの詳細を示すものであり、メッセージにはリード(ＲＤ)要求メッセージ（１）、リード応答メッセージ（２）、ライト(ＷＲ)要求メッセージ（３）、ライト応答メッセージ（４）、そしてコピー完了メッセージ（５）がある。
【０１１１】
msg種とはメッセージの種類を示し、メッセージの欄の「ｔｏ」はメッセージの最終宛先のＭＰ♯、「ｆｒｏｍ」はメッセージ発行元のＭＰ♯である。「ｔｅｍｐ」の欄の「ｔｏ」は、メッセージの転送の過程で経由すべきＭＰ先♯であり、「ｆｒｏｍ」は「ｔｏ」のＭＰ♯に対するメッセージの発行元ＭＰ♯である。
【０１１２】
リード要求メッセージ（１）の「要求データ」はリード要求に係わるデータの論理位置を示すものであり、「ＬＤＥＶ」と略称された「Logical Device」を特定する情報と、ＬＢＡ(論理ブロックアドレス)と、ＬＥＮ（データ長）とから構成される。
【０１１３】
リード応答メッセージ（２）の「データ存在アドレス」の欄は、リードされたデータのＣＭＡ上のアドレスを示すものであり、ＣＭＡ＃(キャッシュメモリ番号)、ＡＤＲ(ＣＭＡのメモリブロック上のアドレス)、ＬＥＮ(データ長)から構成される。コピーとはＣＭＡにデータがコピーされることをいう。
【０１１４】
ライト要求メッセージ（３）の「要求データ」はライトデータが書き込まれる論理アドレスを示すものであり、「データ存在アドレス」はライトデータが存在するキャッシュメモリ上のアドレスである。
【０１１５】
ライト応答メッセージ（４）の「要求データ」はライトデータが書き込まれた論理アドレスを示すものである。
【０１１６】
コピー完了メッセージはキャッシュメモリにコピーされるデータが存在する他のキャッシュメモリについてのアドレスを示すものである。
【０１１７】
図２２は、ＭＰのメモリに記録されたＬＤＥＶ―ＤＫＡテーブルである。このテーブルは、データが存在するＬＤＥＶ番号及びＬＤＥＶの論理アドレスと、このデータを格納するＨＤＤを制御するＤＫＡとの関係を規定するテーブルである。
【０１１８】
図２３は、ＰＤＥＶ（Physical Device）と、データが存在するＬＤＥＶ番号及びＬＤＥＶの論理アドレスとの対応関係を示したＤＫＡテーブルである。図２３の制御方式はＲＡＩＤレベルを記載したものである。
【０１１９】
これらテーブルはＭＰのメモリに記録されている。ＭＰはホストからのライトコマンド又はリードコマンドを解析して、これらテーブルを参照してアクセスすべきＤＫＡ及びＰＤＥＶを特定することができる。
【０１２０】
次に、ストレージサブシステムがホスト計算機からのリード要求を処理する動作について詳しく説明する。図２４は4つのモジュールのＳＷが直列に接続されたストレージサブシステムのブロック図である。
【０１２１】
第１のモジュールのＣＨＡ０がホスト計算機から第３のモジュールのＤＫＡ2へのリード要求Ｓ２４００を受け取ると、第1のモジュールのＭＰ０は、図２５のフローチャートに示すように、ＣＨＡ０からのコマンドパケットをＬＤＥＶ―ＤＫＡテーブルを参照して解析し(２５００)、コマンドパケットが対象とするＭＰが自身（=ＭＰ０）であるか否かをチェックする（２５０２）。
【０１２２】
対象ＭＰが自ＭＰ（ＭＰ０）である場合には、ＣＭＡ０にＳＷ０に接続するＤＫＡ０を介してＤＫＡ０配下のハードディスクからデータをステージングする（２５０４）。次いで、ＭＰ０は、リードコマンドを発行したホスト計算機に接続する該当ＣＨＡ(ＣＨＡ０)にホスト計算機に応答処理を行う旨を指示する（２５０６）。
【０１２３】
一方、ステップ２５０２において、ＭＰ０がコマンドパケットにおける対象ＭＰを他のモジュールのＭＰであると判定した場合には、当該他のＭＰに宛てたリード要求メッセージ（図２１（１））を作成する（２５０６）。
【０１２４】
このリード要求メッセージを作成するに当たって、ＭＰ０は図２６のメッセージ転送先テーブルを参照する。このメッセージ転送先テーブルは最終宛先ＭＰ♯と、メッセージが一度に通過するホップ数を少なくするために経由すべきＭＰ（転送先ＭＰ＃）、最終宛先ＭＰ＃と転送先ＭＰ＃との間でメッセージが通過するホップ数が登録されている。
【０１２５】
ＭＰ０はリード要求メッセージを作成すると転送先ＭＰ＃にリード要求メッセージを送信する。図２４では、ＭＰ０はメッセージの最終転送先がＭＰ２であることを認識すると(図２５の２５０２)、図２６の転送先テーブルで転送先ＭＰ＃がＭＰ１であることを把握し、図２１（１）に示すリード要求メッセージを作成する。
【０１２６】
このリード要求メッセージにおいて、メッセージ欄の「ｔｏ」はＭＰ２となり、「ｆｒｏｍ」はＭＰ０となり、ｔｅｍｐ欄の「ｔｏ」はメッセージ転送先テーブルからＭＰ１となり、その「ｆｒｏｍ」はＭＰ０となる。
【０１２７】
この結果、図２４の（１）に示すリード要求メッセージ（REQmsg）がＭＰ０からＭＰ１に転送される。この時のメッセージのスイッチ間のパスを跨ぐ回数（残ホップ数）はＳＷ０とＳＷ１との間の「１」となる。
【０１２８】
さらに、リード要求メッセージがＭＰ１に至ると、ＭＰ１はこのリード要求メッセージを解析して、さらに図２６のメッセージ転送テーブルを参照してＭＰ２宛てにリード要求メッセージ(図２４（２）)を転送する。
【０１２９】
メッセージ転送先テーブルはストレージサブシステムの管理コンピュータなどによって事前に作成され、各ＭＰのメモリに格納される。
【０１３０】
図２７は、ＭＰのメッセージ処理を説明するフローチャートであって、ＭＰはメモリのメッセージ領域をチェックしてメッセージの有無を確認する(２７００)。次いで、ＭＰは「メッセージあり？」を判定し（２７０２）、「メッセージなし」の場合にはステップ２７００にリターンする。
【０１３１】
一方、「メッセージあり」の場合にはメッセージ（msg)の種類がリード要求メッセージか、リード応答メッセージか、ライト要求メッセージか、ライト完了メッセージか、又はコピー完了メッセージかを判断して（２７０４）、それぞれメッセージの処理を行う。
【０１３２】
図２８はリード要求メッセージを受領したＭＰの処理を説明するフローチャートである。リード要求メッセージを受領したＭＰは、リード要求メッセージでの最終宛先となったＭＰ（図２１（１）のリード要求メッセージのメッセージ欄の「ｔｏ」）が自身か否かをチェックする（２８００）。
【０１３３】
これが肯定された場合には、ＭＰは同一モジュールのＣＭＡにリードデータをステージ処理する（２８０２）。次いで、データがステージングされた領域をロック、すなわち当該領域が無効化されるのを不許可にする（２８０４）。次いで、ＭＰはリード応答メッセージ（図２１（２））を作成してこれをリード要求メッセージの送信元ＭＰに送信する(２８０６)。
【０１３４】
リード応答メッセージのデータ存在アドレスには、リードデータが存在するＣＭＡと当該ＣＭＡのデータ格納領域が登録される。メッセージ欄の「ｆｒｏｍ」にはリード要求メッセージを受領したＭＰ♯が登録され、その「ｔｏ」にはホストリード要求を受けたＭＰが登録される。
【０１３５】
ステップ２８００において、リード要求メッセージを受領したＭＰは、リード要求メッセージでの最終宛先となったＭＰが自身でないと判定した場合には、リード要求メッセージの再転送を行う（２８０８）。リード要求メッセージ(図２１（１）)のｔｅｍｐ欄の「ｆｒｏｍ」にはこのＭＰ♯が登録され、「ｔｏ」にはメッセージ転送先テーブルに規定された転送先ＭＰ♯が登録される。
【０１３６】
図２４において、ＭＰ１がＭＰ０からリード要求メッセージ（１）を受けると、このリード要求メッセージはＭＰ２に宛てたものであるために、ＭＰ１はステップ２８００の判定を否定し、ステップ２８０８に移行してＭＰ２に宛ててリード要求メッセージを転送する（２８０８）。
【０１３７】
ＭＰ２がＭＰ１からリード要求メッセージを受領すると、リード要求メッセージはＭＰ２宛であるため、ステップ２８００の判定を肯定し、図２９にも示すように、ステップ２８０４において、ＭＰ２はＣＭＡ２にＤＫＡ２によって得られたHDD２のデータを格納する領域を確保する(図２９（３）)。そして、ステップ２８０６に示すように、リード応答メッセージをＭＰ１に送り、データが存在するＣＭＡのマスタエリアをＭＰ１に通知する(図２９（４）)。
【０１３８】
ＭＰ２からＭＰ１へのリード応答メッセージのメッセージ欄の「ｔｏ」にはＭＰ０が登録され、その「ｆｒｏｍ」の欄にはＭＰ２が登録される。ＭＰ２はメッセージ転送先テーブルを参照して、リード応答メッセージのｔｅｍｐ欄の「ｔｏ」にはＭＰ１が登録され、その「ｆｒｏｍ」の欄にはＭＰ２が登録される。
【０１３９】
図３０には、リード応答メッセージを受信したＭＰの動作に係るフローチャートが示されている。リード応答メッセージを受信したＭＰ（自ＭＰ）は、リード応答メッセージの送り先となった宛先ＭＰ（メッセージ欄の「ｔｏ」に登録されたＭＰ）と自ＭＰとが同じか否かを判定する(３０００)。
【０１４０】
自ＭＰがこの判定を肯定すると、リードメッセージを他のＭＰに転送させる必要は無く、自ＭＰのモジュールのＣＨＡにアクセスしたホスト計算機に、自ＭＰが受信したリード応答メッセージのデータ存在アドレス、すなわち目的とするデータが格納されている領域をホスト計算機に応答するよう当該ＣＨＡにコマンドパケットを送る（３００２）。
【０１４１】
次いで、自ＭＰはＣＨＡからホスト応答処理完了の応答パケットを待ち(３００４)、自ＭＰが当該応答パケットを受領すると、リード応答メッセージの送信元（リード応答メッセージのｔｅｍｐの欄の「ｆｒｏｍ」に記録されているＭＰ）に対してコピー完了メッセージを送る（３００６）。
【０１４２】
自ＭＰがステップ３０００の判定を否定すると、自ＭＰと同一モジュールのＳＷのＣＭＡにあるバッファ領域（メモリモジュール）に目的データを一時格納する領域を確保する（３００８）。
【０１４３】
次いで、自ＭＰは、受信したリード応答メッセージのデータ存在アドレスのデータを、ステップ３００８において確保した一時格納領域にコピーするよう、同一モジュールのＣＨＡ/ＤＫＡにコマンドパケットを送ってこれを指示する（３０１０）。さらに、自ＭＰは当該ＣＨＡ/ＤＫＡから前記コピーを完了した報告としての応答パケットを待つ（３０１２）。
【０１４４】
自ＭＰが当該応答パケットを受領すると、リード応答メッセージの送信元（リード応答メッセージのｔｅｍｐの欄の「ｆｒｏｍ」に記録されているＭＰ）に対してコピー完了メッセージを送る（３０１４）。
【０１４５】
さらに、自ＭＰはメッセージが最終のＭＰに行くまでのパス或いはルートにおいて中継となるＭＰを定めたメッセージ転送テーブルを参照してリード応答メッセージの転送先を決定する（３０１６）。
【０１４６】
次いで、自ＭＰはリード応答メッセージを転送する際に、そのデータ存在アドレスにステップ３００８で確保された一時格納エリアの識別情報を登録し、ｔｅｍｐの欄の「ｔｏ」にリード応答メッセージの転送先を記録し、「ｆｒｏｍ」に自ＭＰの識別情報を登録する(３０１８)。
【０１４７】
図２４に続いて、リード応答メッセージの伝達の様子を示す図２９に基づいて説明すると、ＭＰ１がＭＰ２からリード応答メッセージ（４）を受領すると、このリード応答メッセージは他ＭＰ（ＭＰ０）に宛てたものであるので、ＭＰ１はＣＭＡ１に一時格納エリアを確保し、ＣＨＡ１によって、ＣＭＡ２にある目的データをＣＭＡ１にコピーする（５）。
【０１４８】
次いで、ＭＰ１はＭＰ０に宛ててリード応答メッセージを転送する（６）。そして、リード応答メッセージを受けたＭＰ０（自ＭＰ）は、ＣＨＡ０によってＣＭＡ１にある目的データを取得し、これをホスト計算機に転送する。
【０１４９】
次に、図２４で説明したグリッド構造を備えるストレージサブシステムが、ホスト計算機からライト要求を受領した場合の動作について説明する。図３１はそれを説明するブロック図である。ＣＨＡ２がホスト計算機からライト要求を受領している。
【０１５０】
図３２はホスト計算機からのライト要求を受領したＭＰの動作を説明するフローチャートである。ＭＰはＬＤＥＶ―ＤＫＡテーブルを参照して、ライトデータをハードディスクドライブに格納する処理を行うＤＫＡを特定し、このＤＫＡと同一モジュールのＭＰ(対象ＭＰ)特定する（３２００）。
【０１５１】
一方、ライト要求でのデータのライト先ＬＥＤＶ（該当領域）がＬＥＤＶ―ＤＫＡテーブルに割り当てられていない場合（３２０２）には、自ＭＰのＳＷに接続しているＤＫＡについて、自ＭＰはＤＫＡテーブルを参照して、ＰＤＥＶに空領域があるか否かをチェックする(３２０４)。
【０１５２】
ＰＤＥＶに空領域がある場合には、自ＭＰは、ＤＫＡテーブルにライト要求に含まれるＬＤＥＶ、ＬＢＡ（該当領域）を割り当ててＬＤＥＶ―ＤＫＡテーブル及びＤＫＡテーブルを更新してこれをそのメモリに登録するとともに、この割り当てに関する情報、或いは更新後のこれらテーブルを他のＭＰに通知する（３２０６）。
【０１５３】
次いで、自ＭＰは同一モジュールのＣＭＡに存在するライトデータを当該ＣＭＡから同一モジュールのＤＫＡによって当該ＤＫＡの配下のハードディスクにデステージ処理する（３２１４）。
【０１５４】
ステップ３２０２において、ライト要求でのデータのライト先ＬＥＤＶ（該当領域）がＬＥＤＶ―ＤＫＡテーブルに割り当てられている場合には、自ＭＰが対象ＭＰか否かが判定され（３２１２）、自ＭＰが対象ＭＰである場合には、既述のものと同様にデステージ処理する。一方、ステップ３２１２において自ＭＰが対象ＭＰでないと判定された場合には、ライト要求メッセージ(図２１（３）)を、メッセージ転送テーブルを参照して作成し、これを転送先ＭＰに転送する(３２１６)。このライト要求メッセージは、既述のリード要求メッセージと同様にして作成される。
【０１５５】
ステップ３２０４において、自ＭＰが自ＭＰのＤＫＡに空領域が無いと判断すると、自ＭＰは該当領域の割り当てを求めるコマンドをより近いモジュールのＭＰに要求する(３２０８）。
【０１５６】
自ＭＰは要求を受けたＭＰからの応答パケットをチェックし、自ＭＰは、まずはコピーせずにアクセスできる範囲で、その範囲で割り当てができないならば１回のコピーでアクセスできる範囲でというように、該当領域の割り当てが達成されるまで自ＭＰに近い順に、モジュール毎に他のＭＰに接触する。
【０１５７】
自ＭＰからの要求を承認した他ＭＰは、自身のテーブルを更新し、これを他のＭＰに通知する（３２１０）。そして、自ＭＰはライト要求メッセージを作成して、これを該当領域の割り当てを承認したＭＰに通知する。
【０１５８】
図３３は、ライト要求メッセージを受けたＭＰの処理動作を示すフローチャートである。ライト要求メッセージを受けたＭＰは、ライト要求が自ＭＰ宛か他のＭＰ宛かをチェックする（３３００）。
【０１５９】
宛先ＭＰが自ＭＰと判定されると、自ＭＰと同一モジュールのＣＭＡからそのＤＫＡ配下のＨＤＤに当該ＣＭＡに存在するライトデータがデステージ処理される（３３０２）。
【０１６０】
このデステージ処理の際に自ＭＰは同一モジュールのＣＭＡに、ライト要求メッセージのデータ存在アドレスのデータをＣＨＡ/ＤＫＡを介して当該ＣＭＡにコピーしておく。
【０１６１】
次いで、自ＭＰはライト応答メッセージを作成する(３３０４)。ライト応答メッセージ(図２１（４）)の要求データにはライト要求メッセージの要求データを登録し、そのメッセージ欄の「ｆｒｏｍ」には自ＭＰを記録し、そのメッセージ欄の「ｔｏ」にはライト要求メッセージのメッセージ欄の「ｆｒｏｍ」に記録されたＭＰを記録する。
【０１６２】
一方、宛先ＭＰが自ＭＰで無いと判定されると、自ＭＰは同一モジュールのＣＭＡにライトデータを一時格納する領域を確保する（３３０６）。
【０１６３】
次いで、自ＭＰは受信したライト要求メッセージのデータ存在アドレスからデータを読み出して、当該データをステップ３３０６の一時格納領域にコピーするように、同一モジュールのＣＨＡにコマンドパケットを送信する(３３０８)。
【０１６４】
次いで、自ＭＰは受信したライト要求メッセージの送信元(ｔｅｍｐ ｆｒｏｍ)にコピー完了メッセージを送信する（３３１０）。この際、自ＭＰは、コピー完了メッセージ(図２１（５）)のｔｅｍｐの「ｆｒｏｍ」には自ＭＰを、その「ｔｏ」にはライト要求メッセージの送信元(ｔｅｍｐ ｆｒｏｍ)を、データ存在アドレスはステップ３３０６の一時格納領域を記録する。
【０１６５】
次いで、自ＭＰは他ＭＰへライト要求メッセージを転送するために、メッセージ転送テーブルを参照して、当該ライト要求メッセージの転送先ＭＰを決定する（３３１２）。
【０１６６】
そして、自ＭＰはライト要求メッセージ転送するに際して、データ存在アドレスにステップ３３０６の一時格納エリアを記録し、ｔｅｍｐの欄の「ｆｒｏｍ」に自ＭＰを、その「ｔｏ」に転送先ＭＰを記録する。
【０１６７】
図３４は、図３３のステップ３３０４で作成されたライト応答メッセージを受領したＭＰの動作を示すフローチャートである。ライト応答メッセージを受けた自ＭＰがライト応答メッセージでの転送先ＭＰ(宛先ＭＰ)であるか否かをチェックする(３４００)。
【０１６８】
自ＭＰが宛先ＭＰでないと判定すると、メッセージ転送先テーブルを参照してライト応答メッセージの転送先を決定する（３４０２）。次いで自ＭＰは、ライト応答メッセージのｔｅｍｐの欄の「ｆｒｏｍ」に自ＭＰを、その「ｔｏ」に転送先ＭＰを記録してライト応答メッセージの転送を行う(３４０４)。
【０１６９】
そして、ステップ３４００において自ＭＰが宛先ＭＰであると判定されると、自ＭＰと同一モジュールのＣＨＡに、当該ＣＨＡへのホスト計算機からのライト要求(該当要求)に対して、ライト処理が終了したことを示す応答フレームを発行すべきコマンドを送る（３４０６）。
【０１７０】
図３１に示すように、ＣＨＡ／ＤＫＡ２はホスト計算機からのライト要求を受領するとＣＭＡ２にライトデータの格納領域を確保し、ホスト計算機にデータ転送準備完了を通知する。そして、ＣＨＡ２はホスト計算機からデータを受信し、これをＣＭＡ２に転送する（３）。
【０１７１】
ＭＰ２がライト要求を受領すると、データライト先ＤＫＡ０と同一モジュールのＭＰ０に当ててライト要求メッセージを作成して、これを、メッセージ転送先テーブルを参照してＭＰ１に送る（４）。ＭＰ１はライト要求メッセージによってＣＭＡ０のマスタエリア(データ格納先アドレス)を知る。
【０１７２】
このライト要求メッセージを受けたＭＰ１はメッセージがＭＰ０に宛てられたものであることから、同一モジュールのＣＭＡ１に一時格納領域を確保し、ＣＨＡ/ＤＫＡ１にＣＭＡ２のライトデータをＣＭＡ１にコピーすることを指示する。ＣＭＡ２からＣＭＡ１にライトデータをコピー（５）したＣＨＡ/ＤＫＡ１は、ＭＰ１及びＭＰ２にコピーの終了を通知する。
【０１７３】
ＭＰ１は、ＭＰ２からのライト要求メッセージの宛先ＭＰがＭＰ０であることから、ライト要求メッセージをＭＰ２に転送する（６）。ＭＰ２はＣＭＡ１のデータの格納領域を知ることになり、ＭＰ２はＣＨＡ/ＤＫＡ０にＣＭＡ１のデータをＣＭＡ０にコピーする（７）ことを指示する。
【０１７４】
ＣＨＡ０がこのコピーを終了すると、これをＭＰ１とＭＰ０に通知する。ＭＰ０は、ＤＫＡ０にＣＭＡ０のライトデータをＨＤＤ０にデステージ処理するコマンドパケットを送信する。
【０１７５】
ＭＰ０はライト応答メッセージを作成し、これを、ＳＷ１を介してＭＰ１に送る。ＭＰ１はＳＷ２を介してライト応答メッセージをＭＰ２に転送する。ＭＰ０はＭＰ２がライト応答メッセージを受信してからＣＨＡ２を介してホスト計算機にライト応答のフレームを返信するとよい。
【０１７６】
図２４、図３１などにおいて、メッセージのホップ数は、「１」に制限されているために、ストレージサブシステムの第２のモジュール、第３のモジュール、及び第４のモジュールの少なくとも一つのモジュールに第１のモジュールと同様に、ホスト計算機から要求フレームが供給されても、パケットのデッドロックの発生を避けることができる。
【０１７７】
図３５にスイッチ構成、キャッシュメモリ、ＣＨＡ／ＤＫＡが共に冗長化されたストレージサブシステムのブロック構成を示す。このストレージサブシステムは、二つのモジュール３５００及び３５０２を備え、各モジュールはスイッチ同士のパスによって接続されている。
【０１７８】
モジュール３５００は、ＣＨＡ／ＤＫＡ１、ＣＭＡ１、ＣＭＡ２、ＣＨＡ／ＤＫＡ２、そして第１の冗長系スイッチ（ＳＷ１Ａ及びＳＷ２Ａ）、そして、第２の冗長系スイッチ（ＳＷ１Ｂ及びＳＷ２Ｂ）と、を備えている。
【０１７９】
ＣＨＡ/ＤＫＡ１、ＣＭＡ１、ＣＭＡ２、そしてＣＨＡ/ＤＫＡ２の各コンポーネントは第１の冗長系（Ａ系）スイッチと第２の冗長系（Ｂ系）スイッチに対して矢印で示すように接続されている。
【０１８０】
ＣＨＡ/ＤＫＡ１及びＣＨＡ/ＤＫＡ２はそれぞれ、第１の冗長系スイッチおよび第２の冗長系スイッチのいずれを介してもＣＭＡ１又はＣＭＡ２に接続できる。即ち、交替パス構造が実現される。矢印の向きはコマンドパケットの転送方向を示している。同一冗長系のＳＷ間(ＳＷ１Ａ―ＳＷ２Ａ、ＳＷ１Ｂ―ＳＷ２Ｂ)は２パスによって接続されている。
【０１８１】
モジュール３５０２もモジュール３５００と同様、図示するよう構成されている。モジュール３５００と３５０２間は同一冗長系のスイッチが１パスにおって接続されている。すなわち、ＳＷ２ＡとＳＷ３Ａとが１パスによって接続され、ＳＷ４ＡとＳＷ１Ａとが同様に１パスによって接続されている。Ｂ系の冗長系スイッチについても同様である。
【０１８２】
図３５において、簡潔化のためＭＰを図示していない。実際には、ＣＨＡ／ＤＫＡと同様な形態で接続してもよいし、ＣＨＡ／ＤＫＡにＭＰの機能を追加しＭＰの機能を代行してもよい。ここでは後者とする。
【０１８３】
なお、図３５ではＣＨＡとＤＫＡとをＣＨＡ／ＤＫＡのように便宜上一体に表記したが、ＣＨＡとＤＫＡと同一回路によって実現し、あるいは別回路によってそれぞれ実現するようにしても良い。
【０１８４】
コンポーネントと接続スイッチの定義は、図３６の接続テーブルに基づく。この接続テーブルはＣＨＡ／ＤＫＡ１、ＣＨＡ／ＤＫＡ２、ＣＨＡ／ＤＫＡ３、ＣＨＡ／ＤＫＡ４の各メモリに設定されている。起点となるスイッチからのコマンドパケットに対して許容される、スイッチ間ホップ数は、図３７の制御テーブルに規定されている。
【０１８５】
例えば、ＳＷ１Ａからのコマンドパケットは２ホップまでを許されているので、ＣＨＡ／ＤＫＡ１からＣＭＡ３へのデータのライトは、ＳＷ１ＡからＳＷ２Ａを介してＳＷ３Ａまで、途中でデータをＣＭＡにリダイレクト(コピー)することなく一気にＣＭＡ３まで転送することができる。
【０１８６】
一方、ＣＨＡ／ＤＫＡ１からＣＭＡ３へのデータのライトをＢの冗長系を利用しようとすると、異なるモジュールのスイッチ間で許容されるコマンドパケットの方向がＡの冗長系と逆であるために、ＳＷ２ＢからＳＷ1Ｂ、ＳＷ１ＢからＳＷ４Ｂ、ＳＷ4ＢからＳＷ３Ｂの３ホップが必要となるので、ＣＨＡ／ＤＫＡ３がＳＷ４ＢからＣＭＡ４へ一旦データをコピーし、次いで、ＣＭＡ４からデータをリードしてＳＷ４ＢからＳＷ３Ｂへ送り、ＣＨＡ／ＤＫＡ４がこのデータをＣＭＡ３にコピーする必要がある。よって、ＣＨＡ／ＤＫＡ１からＣＭＡ３へのデータのライトはＡ系を利用して行われる。
【０１８７】
ＳＷ１Ａに対して許容ホップ数が「２」であり、ＳＷ２Ａに対する許容ホップ数が「１」の理由は、ＳＷ１ＡとＳＷ２Ａとの間はコマンドパケットが２パスの双方向で送信できるので、図１０に示すように、デッドロックの発生には支障が無いのに対して、異なるモジュールを跨ぐＳＷ２ＡとＳＷ３Ａとの間では１パスから構成されているので、デッドロックを防ぐ観点からＳＷ２Ａを起点するパケットの送信をＳＷ２ＡとＳＷ３Ａとの間で１ホップに制限したためである。他のスイッチについても同様である。
【０１８８】
送信元ＳＷ、送信先ＳＷ、送信元ＳＷの次のＳＷ、送信元ＳＷから送信先ＳＷの間のホップ（ホップ）数、そして図３７の許容ホップ数を前提としたリダイレクト数はトポロジテーブル(図３８)として纏められ、ＣＨＡ／ＤＫＡのメモリに格納される。さらに、送信元（ＣＨＡ／ＤＫＡ）から送信先（ＣＭＡ）へパケットを転送する際に、どの冗長系がパケットの転送に使われるかは転送使用冗長系テーブル(図３９)として纏められている。
【０１８９】
図４０は転送使用冗長系テーブルを作成するためのフローチャートである。このフローチャートはストレージサブシステムの管理コンピュータによって実行される。管理コンピュータは、ｘをパケット送信元コンポーネントとし、ｙをパケットの送信先コンポーネントとする(４０００)。
【０１９０】
次いで管理コンピュータは、図３６の接続テーブルに基づいて、各々の冗長系に関してｘおよびｙの接続スイッチを調査する(４００２)。管理コンピュータは、図３８のトポロジテーブルから、各冗長系について、ｘを送信元ＳＷとし、ｙを送信先ＳＷとして、これらＳＷ間のリダイレクト数、ホップ数を調査する（４００４）。
【０１９１】
次いで、管理コンピュータは両冗長系のリダイレクト数が同一か否かをチェックし(４００６)、同一の場合にはＳＷ間のホップ数が少ない冗長系をパケットの転送について使用する（４００８）。
【０１９２】
一方、両冗長系のリダイレクト数が同一で無い場合には、リダイレクト数が少ない冗長系を使用する(４０１０)。そして、全てのｘ，ｙについて調査したかをチェックして(４０１２)、これを肯定した場合にはフローチャートを終了し、これを否定する場合にはステップ４０００にリターンする。なお、両冗長系でリダイレクト数及びホップ数が同じ場合には、どちらの冗長系スイッチをパケット転送において使用してもよい。
【０１９３】
図４１は管理コンピュータによるリダイレクト数の計算を示すフローチャートである。管理コンピュータはｘをパケット送信元コンポーネント、ｙをパケット送信先コンポーネントとし、接続テーブルについて、各冗長系についてｘ、ｙの接続スイッチを調査する(４１００)。
【０１９４】
管理コンピュータは、許容ホップ数テーブル(図３７)を参照して、パケット転送での送信元（起点）となるＳＷについて許容ホップ数を特定する。次いで、トポロジテーブルに基づいて送信元ＳＷと送信先ＳＷとの間の実ホップ数を特定する（４１０２）。
【０１９５】
次いで、管理コンピュータは実ホップ数から許容ホップ数を減算し、その結果が０以下か否かをチェックする(４１０４)。減算結果が０以下の場合には、リダイレクト数カウンタの値を「リダイレクト数」として図３８のトポロジテーブルに登録する（４１０６）。なお、図３６乃至図３９のテーブルは管理コンピュータのメモリに設定されても良い。
【０１９６】
リダイレクトカウンタも管理コンピュータのメモリに設定されている。リダイレクトカウンタの初期値は「０」である。
【０１９７】
リダイレクトカウンタ値をトポロジテーブルに登録した後、同カウンタをリセットして（４１０８）、次のｘ，ｙについてリダイレクト数の計算を行う（４１１０）。
【０１９８】
一方、ステップ４１０４での減算結果が１以上の場合は、リダイレクトカウンタ値を「＋１」し(４１１２)、次いで、トポロジテーブルの「次のＳＷ」を起点ＳＷと読み替えて(４１１４)、実ホップ数から許容ホップ数を減算し、減算結果が０以下か否かのチェックを行う。
【０１９９】
以上はステップ全てのｘ，ｙについて終了するまで実行する(４１１０)。
【０２００】
図４２はコンポーネントのＳＷからの抜去、コンポーネントの障害の検知に対する処理を説明するフローチャートである。管理コンピュータがＳＷ♯（＝K）に接続するコンポーネントについて、“抜去”又は“障害”を検知すると（４２００）、当該ＳＷｋに接続しているコンポーネントで動作しているものがあるか否かをチェックする（４２０２）。
【０２０１】
この判定が肯定されたときには、当該ＳＷｋにはコンポーネントからコマンドが入力されずその分デッドロックの発生の恐れが少ないため、許容ホップ数テーブルにおいてＳＷｋを起点ＳＷとしたＳＷ間許容ホップ数を＋１する（４２０４）。
【０２０２】
次いで、管理コンピュータは、ＳＷｋを転送元ＳＷとするリダイレクト数を再計算して転送使用冗長系テーブルを再作成する（４２０６）。
【０２０３】
一方、ステップ４２０２において、該ＳＷｋに接続しているコンポーネントで動作しているものがある場合には、このコンポーネントに対するパケットがデッドロックを起こす可能性があるために、ステップ４２０４とステップ４２０６の処理をキャンセルする。
【０２０４】
図４０から図４２の説明において管理コンピュータが実行するとしたが、各ＭＰやＣＨＡ／ＤＫＡが許容ホップ数テーブルなどの写しを持ち、それを参照してこれらが各々実行してもよい。
【０２０５】
図３５に示すストレージサブシステムは、転送元ＳＷから転送先ＳＷへのパケット転送において、使用冗長系テーブルによって冗長系を使い分けることによって、パケット転送の過程でＣＭＡへデータを一時コピーすることなく、ＣＨＡ／ＤＫＡからどのＣＭＡにもアクセスすることができる。
【０２０６】
一方、冗長系のあるＳＷに障害が発生した場合には、パケット転送の過程でＣＭＡへデータをコピーすれば交替系パスを利用してＣＨＡ／ＤＫＡからどのＣＭＡにもアクセスすることができる。
【０２０７】
図４３は、ＣＨＡ／ＤＫＡ１からＣＭＡ４へアクセスする場合、使用冗長系であるＢのＳＷ１Ｂに障害が発生した場合におけるパケット転送処理を説明している。
【０２０８】
ＣＨＡ／ＤＫＡ１からＣＭＡ４へアクセスはＡの冗長系を利用し、ＳＷ１Ａについては２ホップまでが許容されているので、パケットをＳＷ１ＡからＳＷ３Ａまで２ホップさせる。
【０２０９】
ＣＨＡ／ＤＫＡ３はＳＷ３ＡからデータをＣＭＡ３に一旦リダイレクトし、ＣＨＡ／ＤＫＡ4がＣＭＡ３からデータをリードしてこれをＣＭＡ４にコピーする。
【０２１０】
これによって、データのリダイレクトを認めれば、冗長系の一方のＳＷに障害が発生しても、ＣＨＡ／ＤＫＡ（ＭＰ）は、他の冗長系から目的とするコンポーネント（ＣＭＡ）にアクセスすることができる。
【０２１１】
次に図３５の変形例を図４４に基づいて説明する。図４４の実施形態が図３５の実施形態と異なる点は、電源が電源Ａと電源Ｂに二重化されていること、電源Ａは冗長系Ａのスイッチに電力を供給していること、電源Ｂは冗長系Ｂに電力を供給していること、そして、各ＣＭＡを電源に配置に合わせてさらに二重化したことである。ＣＭＡ１はＣＭＡ１ＡとＣＭＡ１Ｂにさらに二重化され、ＣＭＡ１Ａには電源Ａから電力が供給され、ＣＭＡ１Ｂには電源Ｂから電力が供給されている。ＳＷ１Ａ及びＳＷ１ＢはそれぞれＣＭＡ１ＡとＣＭＡ１Ｂに接続されている。他のＣＭＡ及びスイッチも図４４に示すように、ここで説明した内容と同様に構成されている。
【０２１２】
図４４によれば万一一方の電源が落ちても上位装置からのライトデータが今回さらに二重化されたＣＭＡの両方に格納されていることによりライトデータが主記憶装置ＨＤＤに格納されていなくてもライトデータは失われない。
【０２１３】
なお、図４４はＣＨＡ／ＤＫＡを二重化された電源に合わせて２重化されていないが、図４５に示すように二重化された電源に合わせて各ＣＨＡ／ＤＫＡを二重化しても良い。この構成によれば、各電源について、ＣＨＡ／ＤＫＡ１０とＣＨＡ／ＤＫＡ２０のように、ＣＨＡ／ＤＫＡが二重化されているために、スイッチ及びＣＭＡの冗長化と合わせてライトデータが失われることはない。なお、図４５−図４８では便宜上冗長化電源についての描画を省略している。
【０２１４】
次に図４４の動作の特徴点を図４６に基づいて説明する。図４６に係るストレージサブシステム（図３５及び図４６とも、隣接する二つのモジュールを、ストレージサブシステムを象徴的に示すものとして図示している。）において、既述のデッドロックを防止するために、ＣＨＡ／ＤＫＡ１からＣＭＡ４に送られるライトデータはＳＷ１ＡからＳＷ２Ａ及びＳＷ３Ａを一気に通過してＣＭＡ４に転送されるのではなく、ＣＭＡ３に一時的にバッファリングされた後、ＣＭＡ４に転送される。ＣＭＡ４のデータ格納領域はマスタ領域（ライトデータの最終的な格納先）であり、この格納領域からデータが記憶媒体・記憶デバイス（ＨＤＤ或いはフラッシュメモリなどの半導体メモリ、磁気テープ、又は光ディスクなど）にデステージングされる。
【０２１５】
なお、キャッシュメモリに一時的に格納されるべきものはデータを含むパケットであり、またパケットのデータ部分以外は再構成可能であるために必ずしも一時バッファリングは必要ではない。
【０２１６】
図４６においてＣＨＡ／ＣＫＡ４がＳＷ４ＡからデータをＣＭＡ４のマスタ領域に格納する際にＣＭＡ４ＡとＣＭＡ４Ｂに２重にデータを格納する。そして、ストレージサブシステムは、ＣＭＡ４ＡとＣＭＡ４Ｂに２重にデータを格納した時点で上位装置にライト終了を報告する。
【０２１７】
ＣＭＡ４ＡとＣＭＡ４Ｂにはそれぞれ別の電源から電力が供給されておりライトデータのロストは通常ないからである。このようにストレージサブシステムがＨＤＤにデータを格納する以前にホスト装置にライト完了の報告ができることにより、ホスト装置からのライト命令に対するパケット処理に係る負荷をストレージサブシステムから軽減することが出来る。
【０２１８】
図４７は図４６の変形例である。図４６では、モジュール３５０２がＣＭＡ４ＡとＣＭＡ４Ｂにライトデータを二重に格納した時点でホスト計算機にライト完了報告を行っていたが、図４７では、一時格納領域であるＣＭＡ３Ａのライトデータ格納領域を無効化しないで正式なマスタ領域に格上げするとともに、ライトデータをＣＭＡ４Ｂのマスタ領域に格納し、この時点でモジュール３５０２はホスト装置にライト完了報告を行う。ＣＭＡ３Ａの一格納領域をマスタ領域に格納することにより、ライトデータがＣＭＡ４Ｂのマスタ領域にも二重書されるからである。なお、ＣＭＡ３ＡはＡ系統の電源が供給され、ＣＭＡ４ＢにはＢ系統の電源が供給されるため、電源不良に対する冗長化も達成されている。
【０２１９】
図４８はＭＰ機能をＣＨＡ／ＤＫＡに兼ねさせない場合のブロック図である。ＭＰが、各モジュールで電源Ａから電力が供給されるＡ系（例えばＭＰ１Ａ）と電源Ｂから電力が供給されるＢ系(例えばＭＰ１Ｂ)に二重化されている。各ＭＥはそれぞれすべてのスイッチ（ＳＷ１Ａ,ＳＷ２Ａ,ＳＷ１Ｂ,ＳＷ２Ｂ）に接続されている。
【０２２０】
ＭＰが扱う制御のための情報はデータ長が短いため、ＭＰとスイッチとの間のパスは、ホスト装置との間での入出力データを転送するＣＭＡ,ＣＨＡ／ＤＫＡと各スイッチとを結ぶパスよりも帯域幅の狭いものでよい。各スイッチとＭＰとの間のパス数を多くすることは比較的容易となる。このようにモジュール内の４つのSWにＭＰからのパスを形成することで、ＭＰ間のメッセージの転送に関しては既述のリダイレクトが不要となる。例えば、図２９に対応させると（４）(６)が途切れず、ＭＰ２→ＭＰ０が１ホップにてメッセージの転送ができる。
【０２２１】
図４９は図３５に示したストレージサブシステムのモジュールの複数がメッシュ状に互いに結合することによって得られたグリッドシステムの要部を示したブロック図である。モジュール１に注目すると、モジュール１は隣接する３つのモジュールとお互いＢ系のスイッチを介して接続されている。モジュール１のスイッチ２Ｂには隣接する他の３つのモジュールの３つからのコマンドパケットをそれぞれ受領するようにパスが形成され、モジュール１のスイッチ１Ｂから隣接する他の３つのモジュールにコマンドパケットをそれぞれ送信するようにパスが形成されている。
【図面の簡単な説明】
【０２２２】
【図１】本発明に関するストレージシステムのブロック図である。
【図２】ホスト計算機からリード要求がストレージサブシステムに発行された場合での、パケット転送の処理を説明するラダーチャートである。
【図３】ＣＨＡがホスト計算機からライト要求のフレームマンドを受けた場合のラダーチャートである。
【図４】キャッシュメモリのハードウエアブロック図。
【図５】スイッチアダプタのブロック構成を示す。
【図６】マイクロプロセッサのブロック構成を示すものである。
【図７】ＣＨＡ/ＤＫＡのブロック構成を示すものである。
【図８】二つのモジュール間でホスト計算機からのリード要求が、ノンポスティッドアクセスに伴うパケットによって処理される過程を示したブロック図である。
【図９】第１のモジュールと第２のモジュールとにそれぞれホスト計算機からのリード要求が同時に発行された場合に、複数のパケットがデッドロックを起こしている状態を示すブロック図。
【図１０】二つのスイッチ間に２重にパスを形成したことを表すブロック図。
【図１１】第１のモジュールがパスを介して第２のモジュールに接続し、第２のモジュールがパスを介して第３のモジュールに接続し、第３のモジュールがパスを解して第１のモジュールに接続していることを示すブロック図である。
【図１２】図１１にパケット転送におけるデッドロックが発生している状態を示すブロック図である。
【図１３】図１１のデッドロックが解消されている様子を説明するブロック図である。
【図１４】第１の転送制御規則及び第２の転送制御規則に基づいて、ホスト計算機からのリード命令を処理する実施形態に係わるラダーチャート。
【図１５】図１４のラダーチャートに係わる、複数のモジュール間での内部コンポーネントの接続構成を示すブロック図。
【図１６】パケットフレームである。
【図１７】あるスイッチに着目した場合での、他のＳＷや、ＣＨＡなど同一モジュールの内部コンポーネントとの接続関係を設定したパス状態テーブルである。
【図１８】図１７のパス設定状態を示すブロック図である。
【図１９】ルーティングテーブルの一例である。
【図２０】パス状態テーブルに基づいて、ＳＷが属するモジュールのＭＰが、ＲＴを設定する場合の動作を説明するフローチャートである。
【図２１】メッセージフォーマットである。
【図２２】LDEV―ＤＫＡテーブルである。
【図２３】ＰＤＥＶ（Physical Device）と、データが存在するＬＤＥＶ番号及びＬＤＥＶの論理アドレスとの対応関係を示したＤＫＡテーブルである。
【図２４】４つのモジュールのＳＷが直列に接続されたストレージサブシステムのブロック図である。
【図２５】ホストリード要求受領ＭＰが行う処理手順を示すフローチャートである。
【図２６】メッセージ転送先テーブルである。
【図２７】ＭＰのメッセージ処理を説明するフローチャートである。
【図２８】ＭＰのリード要求メッセージ処理を説明するフローチャートである。
【図２９】リード応答メッセージの伝達を説明するストレージサブシステムのブロック図である。
【図３０】、  リード応答メッセージを受信したＭＰの動作に係るフローチャートである。
【図３１】ホストライトアクセスを処理するストレージサブシステムのブロック図である。
【図３２】ホストライト要求を受領したＭＰの動作を説明するフローチャートである。
【図３３】ライト要求メッセージを受けたＭＰの処理動作を示すフローチャートである。
【図３４】ライト応答メッセージを受領したＭＰの動作を示すフローチャートである。
【図３５】スイッチ構成が冗長化されたストレージサブシステムのブロック構成である。
【図３６】モジュールのコンポーネントとスイッチとの接続関係を示す接続テーブルである。
【図３７】パケットに対して許容されるスイッチ間の許容ホップ数を規定する許容ホップ数テーブルである。
【図３８】送信元ＳＷ、送信先ＳＷ、送信先ＳＷの次のＳＷ、送信元ＳＷから送信先ＳＷの間のホップ数、そして許容ホップ数を前提としたリダイレクト数を記録したトポロジテーブルである。
【図３９】パケットの転送に使われるかは冗長系を定めた転送使用冗長系テーブルである。
【図４０】転送使用冗長系テーブルを作成するためのフローチャートである。
【図４１】リダイレクト数の計算の詳細を示すフローチャートである。
【図４２】ＳＷに接続するコンポーネントをスイッチから抜去し、あるいはコンポーネントに障害が発生した場合でのスイッチ間ホップ数を緩和するなどの補正処理を説明するフローチャートである。
【図４３】一方の冗長系スイッチに障害が発生した場合でのパケット転送を説明するストレージサブシステムのブロック図である。
【図４４】図３５の変形例に係わるブロック図である。
【図４５】二重化された電源に合わせて各ＣＨＡ／ＤＫＡを二重化してなる図４４の変形例を示すブロック図である。
【図４６】図４４に係る実施形態の動作を説明するブロック図である。
【図４７】図４６の変形例に係るブロック図である。
【図４８】ＭＰ機能をＣＨＡ／ＤＫＡに兼ねさせない実施形態に係るブロック図である。
【図４９】図３５に示したストレージサブシステムのモジュールの複数がメッシュ状に互いに結合することによって得られた。
【符号の説明】
【０２２３】
１０：ホスト計算機、１２：ＳＡＮ、１４：ストレージサブシステム、１６：モジュール(構成単位)、１８：マイクロプロセッサ、２０：チャネルアダプタ、２１：キャッシュメモリ、２２：ディスクアダプタ、２４：スイッチ、２６：ＨＤＤ
【図１】
0004639223.tif 000002
【図２】
0004639223.tif 000003
【図３】
0004639223.tif 000004
【図４】
0004639223.tif 000005
【図５】
0004639223.tif 000006
【図６】
0004639223.tif 000007
【図７】
0004639223.tif 000008
【図８】
0004639223.tif 000009
【図９】
0004639223.tif 000010
【図１０】
0004639223.tif 000011
【図１１】
0004639223.tif 000012
【図１２】
0004639223.tif 000013
【図１３】
0004639223.tif 000014
【図１４】
0004639223.tif 000015
【図１５】
0004639223.tif 000016
【図１６】
0004639223.tif 000017
【図１７】
0004639223.tif 000018
【図１８】
0004639223.tif 000019
【図１９】
0004639223.tif 000020
【図２０】
0004639223.tif 000021
【図２１】
0004639223.tif 000022
【図２２】
0004639223.tif 000023
【図２３】
0004639223.tif 000024
【図２４】
0004639223.tif 000025
【図２５】
0004639223.tif 000026
【図２６】
0004639223.tif 000027
【図２７】
0004639223.tif 000028
【図２８】
0004639223.tif 000029
【図２９】
0004639223.tif 000030
【図３０】
0004639223.tif 000031
【図３１】
0004639223.tif 000032
【図３２】
0004639223.tif 000033
【図３３】
0004639223.tif 000034
【図３４】
0004639223.tif 000035
【図３５】
0004639223.tif 000036
【図３６】
0004639223.tif 000037
【図３７】
0004639223.tif 000038
【図３８】
0004639223.tif 000039
【図３９】
0004639223.tif 000040
【図４０】
0004639223.tif 000041
【図４１】
0004639223.tif 000042
【図４２】
0004639223.tif 000043
【図４３】
0004639223.tif 000044
【図４４】
0004639223.tif 000045
【図４５】
0004639223.tif 000046
【図４６】
0004639223.tif 000047
【図４７】
0004639223.tif 000048
【図４８】
0004639223.tif 000049
【図４９】
0004639223.tif 000050