(57)【要約】      （修正有）【課題】アクセス性能を向上させ得るストレージ装置を提供する。【解決手段】上位装置及び記憶デバイスと接続され、上位装置及び記憶デバイスとのデータの転送を制御するコントローラの複数と、コントローラ同士を接続するデータの転送路と、コントローラと接続され、コントローラを制御する複数のプロセッサとを備え、コントローラは、それぞれ同一又は異なるプロセッサに接続され、第１のプロセッサは、当該転送命令に基づいて、データの転送元となる第１のコントローラ及び当該データの転送先となる第２のコントローラを決定し、第１のコントローラ及び第２のコントローラ間の、転送路に属する経路を判定し、経路が複数あるときに、第２のプロセッサが当該第２のコントローラ以外に接続されているコントローラの数が最大となる経路を特定経路として選択し、経路に沿って、第１のコントローラ及び第２のコントローラ間で前記データを転送する。【選択図】図１４
2009266119.tif 000002
【特許請求の範囲】
【請求項１】
上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、
前記コントローラ同士を接続するデータの転送路と、
前記コントローラと接続され、前記コントローラを制御する複数のプロセッサと
を備え、
前記複数のコントローラは、
それぞれ同一又は異なるプロセッサに接続され、
前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサは、
当該転送命令に基づいて、データの転送元となる第１のコントローラ及び当該データの転送先となる第２のコントローラを決定し、
前記第１のコントローラ及び第２のコントローラ間の、前記転送路に属する経路を判定し、
前記経路が複数あるときに、前記第２のコントローラに接続されている第２のプロセッサが当該第２のコントローラ以外に接続されているコントローラの数が最大となる経路を特定経路として選択し、
前記複数のプロセッサは、
前記特定経路に沿って、前記第１のコントローラ及び第２のコントローラ間で前記データを転送する
ことを特徴とするストレージ装置。
【請求項２】
前記複数のコントローラは、
２の倍数であり、かつ、４つ以上の数のコントローラであり、
前記複数のプロセッサは、
２の倍数であり、かつ、２つ以上の数のプロセッサであると共に、前記コントローラの数よりも少ない数のプロセッサであり、１つの前記プロセッサに対して、前記コントローラの数を前記プロセッサの数で割った数のコントローラが接続されている
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記コントローラは、
前記転送路を介するデータ転送において、転送タイムアウト又はデータ転送の際に付加されるパリティに基づいて、前記転送路の通信エラーの障害情報を検出し、
前記第１のプロセッサは、
前記通信エラーの障害情報が検出されたときに、前記通信エラーの障害情報が検出されていない別の前記転送路を含む経路を特定経路として選択する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記コントローラは、
前記転送路を介するデータ転送の転送パケットに対して、無効なデータが含まれるパケット転送を検出することにより、前記接続路の帯域の浪費を検出し、
前記第１のプロセッサは、
前記転送路の帯域の浪費が最小の前記転送路を含む経路を特定経路として選択する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記コントローラは、
転送先となる前記第２のコントローラが同一であり、かつ、複数の接続先から転送される転送パケットが時分割多重されているときに、前記転送路に出力される際の転送パケットの多重度を検出し、
前記第１のプロセッサは、
前記転送路に対する多重度が最小の前記転送路を含む経路を特定経路として選択する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記コントローラは、
転送先となる前記第２のコントローラが同一であり、かつ、複数の接続先から転送される転送パケットが時分割多重されているときに、前記転送路に出力される際の転送パケットの多重度を検出し、
前記第１のプロセッサは、
前記転送路の帯域の浪費に差異がないときに、前記転送路に対する多重度が最小の前記転送路を含む経路を特定経路として選択する
ことを特徴とする請求項４に記載のストレージ装置。
【請求項７】
前記コントローラは、
前記転送路を介するデータ転送において、転送タイムアウト又はデータ転送の際に付加されるパリティに基づいて、前記転送路の通信エラーの障害情報を検出し、
前記第１のプロセッサは、
前記特定経路を選択する際、前記通信エラーの障害情報が検出されたときに、前記通信エラーの障害情報が検出されていない別の前記転送路を含む経路を特定経路として最優先に選択する
ことを特徴とする請求項６に記載のストレージ装置。
【請求項８】
前記コントローラは、
前記特定経路に沿って、前記データの転送を開始した後に、前記転送路の通信エラーの障害情報を検出する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項９】
前記コントローラは、
前記通信エラーの障害情報が検出されなかったときに、前記転送路を介するデータ転送の転送パケットに対して、無効なデータが含まれるパケット転送を検出することにより、前記転送路の帯域の浪費を検出し、
前記第１のプロセッサは、
前記転送路の帯域の浪費が最小の前記転送路を含む経路を特定経路として改めて選択し、
前記データの転送を開始した前記特定経路と、改めて選択した特定経路とが不一致のときに、前記データの転送を停止し、前記改めて選択した特定経路を選択し、
前記複数のプロセッサは、
前記改めて選択した特定経路に沿って、前記データの転送を再開する
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記コントローラは、
前記転送路の帯域の浪費に差異がないときに、転送先となる前記第２のコントローラが同一であり、かつ、複数の接続先から転送される転送パケットが時分割多重されているときに、前記転送路に出力される際の転送パケットの多重度を検出し、
前記第１のプロセッサは、
前記転送路の帯域の浪費に差異がないときに、前記転送路に対する多重度が最小の前記転送路を含む経路を特定経路として改めて選択し、
前記データの転送を開始した前記特定経路と、改めて選択した特定経路とが不一致のときに、前記データの転送を停止し、前記改めて選択した特定経路を選択し、
前記複数のプロセッサは、
前記改めて選択した特定経路を介して前記データの転送を再開する
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１１】
前記第１のプロセッサは、
前記特定経路を改めて選択する際、前記通信エラーの障害情報が検出されたときに、前記通信エラーの障害情報が検出されていない別の前記転送路を含む経路を特定経路として最優先に選択し、
前記通信エラーの障害情報が検出されなかったときに、前記コントローラにより検出された前記転送路の帯域の浪費が最小の前記転送路を含む経路を特定経路として改めて選択し、
前記転送路の帯域の浪費に差異がないときに、前記転送路に対する多重度が前記転送路を含む経路を特定経路として改めて選択する
ことを特徴とする請求項１０に記載のストレージ装置。
【請求項１２】
上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、
前記コントローラ同士を接続するデータの転送路と、
前記コントローラと接続され、前記コントローラを制御する複数のプロセッサと
を備え、
前記複数のコントローラは、
それぞれ同一又は異なるプロセッサに接続され、
前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサは、
転送元となる第１のコントローラのパケットのヘッダー情報として、当該第１のコントローラ及び転送先となる第２のコントローラの識別情報と、前記第１のコントローラ及び第２のコントローラ間の前記転送路の識別情報と、前記データを転送する際に経由するコントローラの識別情報とを生成する
ことを特徴とするストレージ装置。
【請求項１３】
前記第１のプロセッサは、
前記データ転送命令に含まれるパケットのヘッダー情報を受信元において保持し、
前記第１のコントローラのパケットのヘッダー情報に従って、前記第１のコントローラのパケットを前記第２のコントローラにおいて受信すると、前記第１のコントローラのパケットのヘッダー情報を、前記受信元において保持した前記転送命令に含まれるパケットのヘッダー情報に変更した後、変更したパケットを該当する接続先に送信する
ことを特徴とする請求項１２に記載のストレージ装置。
【請求項１４】
上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、
前記コントローラ同士を接続するデータの転送路と、
前記コントローラと接続され、前記コントローラを制御する複数のプロセッサと
を備え、
前記複数のコントローラは、
それぞれ同一又は異なるプロセッサに接続され、
前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサが、
当該転送命令に基づいて、データの転送元となる第１のコントローラ及び当該データの転送先となる第２のコントローラを決定し、
前記第１のコントローラ及び第２のコントローラ間の、前記転送路に属する経路を判定し、
前記経路が複数あるときに、前記第２のコントローラに接続されている第２のプロセッサが当該第２のコントローラ以外に接続されているコントローラの数が最大となる経路を特定経路として選択し、
前記複数のプロセッサが、
前記特定経路に沿って、前記第１のコントローラ及び第２のコントローラ間で前記データを転送する
ことを特徴とするデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びデータ転送方法に関し、特に、キャッシュメモリやホスト、ＨＤＤ（Hard Disc Drive）ドライブとの各Ｉ／Ｏ（データ転送経路のことを示す。以下同じ。）を備えるコントローラにより構成されるストレージ装置及びデータ転送方法に関する。
【背景技術】
【０００２】
従来、ストレージ装置は、例えば、ホストインターフェイス、キャッシュメモリ、ＨＤＤが接続されるドライブインターフェイスと、データ転送を制御するコントローラと、これらを接続するＩ／Ｏ、システム全体の制御を行うマイクロプロセッサを一つの単位（モジュール）として構成し、複数のモジュール間を、専用Ｉ／Ｏで接続することで構成される。各モジュールは、電源供給を独立させ、さらに、ホスト転送データを別モジュールのキャッシュメモリへ二重書きを行うなど、データ消失に対する信頼性向上を図っている（以上の内容は特許文献１を参照。）。
【０００３】
一方、ストレージ装置は、複数のモジュールを接続することで、ホストやＨＤＤドライブを拡張する構成とする場合がある。Ｉ／Ｏによるデータ転送は、転送元から転送先が同一でも経由するモジュール間Ｉ／Ｏの選択が可能な場合がある。従って、ストレージ装置では、各Ｉ／Ｏによる転送状況、障害状況に従い、最適な経路選択（ルーティング）が可能となる。経路選択方法の一例として、ノード間接続、つまりコントローラ間接続の利用状況に応じて重み付けを与え、転送元から転送先の間に含まれるノード間の重み付け総和から、最適経路を選択する方法が特許文献２に開示されている。
【特許文献１】特開２００５−４４０１０号公報
【特許文献２】特開平１１−３１３０６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ストレージ装置は、ホストとのＩ／ＯやＨＤＤドライブとのＩ／Ｏの数を増すことで、拡張性（スケーラビリティ）に対応する。よって、ストレージ装置では、データ転送を制御するコントローラのホストとのＩ／Ｏ、ＨＤＤドライブとのＩ／Ｏの数を追加することで対応可能である。しかしながら、ストレージ装置におけるリード及びライトは、複数のＩ／Ｏにより同時に転送が行われる。従って、ストレージ装置では、Ｉ／Ｏ数の増加に比例して、コントローラ内で行われるＩ／Ｏの切り替え速度（スイッチ帯域）、キャッシュリード、ライト動作に対する帯域の向上が必要となる。特に、大規模なストレージ装置を構成する場合、必要なＩ／Ｏの数に対し、スイッチ帯域、キャッシュ帯域の確保が困難となる。つまり、ストレージ装置では、必要な帯域を備えたコントローラ等のデバイスが実現性困難となる。
【０００５】
従って、ストレージ装置では、コントローラ間を接続するモジュール間Ｉ／Ｏの追加で、モジュールを４個、８個と接続し、拡張性に対応する。つまり、ストレージ装置では、マルチコントローラ構成で拡張性に対応する。各コントローラは、Ｉ／Ｏの数に必要なスイッチ帯域、キャッシュ帯域を備えており、インターフェイスに対する転送レートを確保しながら、ストレージ装置に必要なＩ／Ｏの数の確保が可能である。
【０００６】
マルチコントローラ構成では、転送先及び転送元のＩ／Ｏが同一のコントローラに含まれる場合に限定されず、別のコントローラの場合もある。この場合、データ転送は、コントローラ間に備えたモジュール間Ｉ／Ｏを経由して行われる。ストレージ装置では、複数のコントローラを経由してデータ転送が行われる場合に、複数の転送経路が存在する場合がある。一方で、コントローラ間のモジュール間Ｉ／Ｏは、転送障害や、同一Ｉ／Ｏに複数のコントローラからの転送が集中することによる転送レート低下が発生する。ストレージ装置では、そのようなＩ／Ｏを避け、転送に最適な経路選択をすることが望ましい。
【０００７】
経路選択の例として、全てのノード間の重み付けを一元管理しながら、重み付けの総和計算、経路選択を行う方法が特許文献２に開示されている。ここで、ノードは、ストレージ装置におけるコントローラ、コントローラ間のＩ／Ｏに相当する。この方法をマルチコントローラ構成のストレージ装置に適用する場合には、次の課題がある。
【０００８】
この場合、インターフェイスに障害発生を考慮した重み付けが必要である。さらに、転送が発生するホストとのＩ／ＯやＨＤＤドライブとのＩ／Ｏの数の変動により、各ノードの重みは、刻々と変化するため、転送前の経路選択に加え、転送中も経路判定を行うことが必要である。
【０００９】
また、実際のストレージ装置では、１つの制御手段（マイクロプロセッサ等）に対するコントローラ数を制限し、制御手段の処理能力不足による転送性能の低下を回避する。転送中に発生する障害管理は、一つのコントローラに集中させることが望ましいが、上記ストレージ装置では不可能である。従って、マルチコントローラ構成のストレージ装置における障害管理を考慮した転送経路選択が必要となる。
【００１０】
さらに、重み付け要素である障害状況と、転送状況、制御手段が管理するコントローラ数により、転送経路を決定する際には、各要素で重み付けを行い、最適な転送経路の選択を行う必要がある。
【００１１】
本発明は以上の点を考慮してなされたもので、アクセス性能を向上させ得るストレージ装置及びデータ転送方法を提案しようとするものである。
【課題を解決するための手段】
【００１２】
かかる課題を解決するために本発明においては、ストレージ装置であって、上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、前記コントローラ同士を接続するデータの転送路と、前記コントローラと接続され、前記コントローラを制御する複数のプロセッサとを備え、前記複数のコントローラは、それぞれ同一又は異なるプロセッサに接続され、前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサは、当該転送命令に基づいて、データの転送元となる第１のコントローラ及び当該データの転送先となる第２のコントローラを決定し、前記第１のコントローラ及び第２のコントローラ間の、前記転送路に属する経路を判定し、前記経路が複数あるときに、前記第２のコントローラに接続されている第２のプロセッサが当該第２のコントローラ以外に接続されているコントローラの数が最大となる経路を特定経路として選択し、前記複数のプロセッサは、前記特定経路に沿って、前記第１のコントローラ及び第２のコントローラ間で前記データを転送する。
【００１３】
また、本発明においては、ストレージ装置であって、上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、前記コントローラ同士を接続するデータの転送路と、前記コントローラと接続され、前記コントローラを制御する複数のプロセッサとを備え、前記複数のコントローラは、それぞれ同一又は異なるプロセッサに接続され、前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサは、転送元となる第１のコントローラのパケットのヘッダー情報として、当該第１のコントローラ及び転送先となる第２のコントローラの識別情報と、前記第１のコントローラ及び第２のコントローラ間の前記転送路の識別情報と、前記データを転送する際に経由するコントローラの識別情報とを生成する。
【００１４】
さらに、本発明においては、データ転送方法であって、上位装置及び記憶デバイスと接続され、前記上位装置及び前記記憶デバイスとのデータの転送を制御するコントローラの複数と、前記コントローラ同士を接続するデータの転送路と、前記コントローラと接続され、前記コントローラを制御する複数のプロセッサとを備え、前記複数のコントローラは、それぞれ同一又は異なるプロセッサに接続され、前記上位装置から転送命令を受信したコントローラに接続されている第１のプロセッサが、当該転送命令に基づいて、データの転送元となる第１のコントローラ及び当該データの転送先となる第２のコントローラを決定し、前記第１のコントローラ及び第２のコントローラ間の、前記転送路に属する経路を判定し、前記経路が複数あるときに、前記第２のコントローラに接続されている第２のプロセッサが当該第２のコントローラ以外に接続されているコントローラの数が最大となる経路を特定経路として選択し、前記複数のプロセッサが、前記特定経路に沿って、前記第１のコントローラ及び第２のコントローラ間で前記データを転送する。
【００１５】
従って、マルチコントローラ構成のストレージ装置において、転送元から転送先までのデータ転送に複数の経路選択が可能な場合、その選択を適切に行うことができるため、所望のデータに効率的にアクセスさせることができる。
【発明の効果】
【００１６】
本発明によれば、アクセス性能を向上させ得るストレージ装置及びデータ転送方法を実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の一実施の形態を、図面を参照して詳細に説明する。なお、これにより本発明が限定されるものではない。
【００１８】
（１）実施例１
図１は、本発明のストレージ装置１００について、第１の実施例を示す装置ブロック図である。図において、コントローラ１（１ａ〜１ｄ）（CTL 0〜CTL 3）は、キャッシュメモリ４（４ａ〜４ｄ）（Cache 0〜Cache 3）、ホストインターフェイス２（２ａ〜２ｄ）（Host I/F 0〜Host I/F 3）、ドライブインターフェイス３（３ａ〜３ｄ）（Drv I/F 0〜Drv I/F 3）、マイクロプロセッサ５（５ａ、５ｂ）（MP0,MP1）との間のそれぞれのＩ／Ｏ（データ転送経路のことを示す。以下同じ。）を介したデータ転送を制御するコントローラである。コントローラ１同士は、Ｉ／Ｏ（デュアルＩ／Ｏ（Dual I/O）、クロスＩ／Ｏ（Cross I/O）により接続されている。
【００１９】
図１においては、コントローラ１ａ及びコントローラ１ｂは、クロス０Ｉ／Ｏ（Cross 0 I/O）により接続されており、コントローラ１ａ及びコントローラ１ｃは、デュアル０Ｉ／Ｏ（Dual 0 I/O）により接続されており、コントローラ１ｂ及びコントローラ１ｃは、クロス１Ｉ／Ｏ（Cross 1 I/O）により接続されており、コントローラ１ｂ及びコントローラ１ｄは、デュアル１Ｉ／Ｏ（Dual 1 I/O）により接続されており、ループ状アーキテクチャを構成する。デュアルＩ／Ｏ及びクロスＩ／Ｏの利用方法の違いについては図４及び図５にて説明する。
【００２０】
ホストインターフェイス２ａ〜２ｄは、ホストとの通信プロトコルに従い、パケット単位での転送を制御するホストインターフェイスである。ドライブインターフェイス３a〜３ｄは、ハードディスクドライブとの通信プロトコルに従い、セクタ単位でデータ転送を制御するドライブインターフェイスである。
【００２１】
さらに、本発明のストレージ装置１００は、ホストインターフェイス２ａ〜２ｄ及びドライブインターフェイス３a〜３ｄからの転送データを一時的に蓄積するキャッシュメモリ４a〜４ｄを備える。ストレージ装置１００では、キャッシュメモリ４a〜４ｄを設けることで、ドライブ書き込み時のホスト転送データの消失防止や、キャッシュヒットによるホストリード性能の向上が可能となる。ドライブインターフェイス３a〜３ｄには、ハードディスクドライブが接続され、ホスト側から見たアクセス空間である論理ボリューム８ａ〜８ｄ（LU0〜LU3, LU: Logical Unit）が割り当てられる。
【００２２】
マイクロプロセッサ５ａ、５ｂは、各コントローラコントローラ１ａ〜１ｄ、ホストインターフェイス２ａ〜２ｄ、ドライブインターフェイス３a〜３ｄの制御手段である。マイクロプロセッサ５ａ、５ｂは、メモリコントローラハブ６ａ、６ｂ（Memory Controller Hub :MCH）を介して、コントローラ１ａ〜１ｄ及びプロセッサメモリ７ａ、７ｂ（MP Mem 0, MP Mem 1）と接続されている。例えば、メモリコントローラハブ６ａは、コントローラ１ａ（CTL 0）及びコントローラ１ｂ（CTL 1）と接続されており、マイクロプロセッサ５ａは、コントローラ１ａ、コントローラ１ｂ、ホストインターフェイス２ａ、ホストインターフェイス２ｂ、ドライブインターフェイス３ａ、ドライブインターフェイス３ｂを直接の制御対象とする。また、メモリコントローラハブ６ａ及び６ｂは、ＭＰＩ／Ｏ（MP I/O）によりコントローラ１ａ、１ｂ及びコントローラ１ｃ、１ｄに接続されている。ストレージ装置１００は、以上の要素より構成される。
【００２３】
次に、ストレージ装置１００を構成するコントローラ１ａ〜１ｄの内部構成を説明する。図２は、コントローラ１ａ〜１ｄのブロック図である。図２では、コントローラ１に接続される各Ｉ／Ｏ（ＭＰＩ／Ｏ、クロスＩ／Ｏ、ホストＩ／Ｏ（Host I/O）、ドライブＩ／Ｏ（Drv I/O）、デュアルＩ／Ｏ）を介したデータ転送方法として、例えば、高速シリアルバス規格であるＰＣＩエクスプレス（PCI-Express）が採用される。
【００２４】
ＤＤＲＩ／Ｆ１０は、キャッシュメモリ４とコントローラ１間のデータ転送を制御する。この場合、キャッシュメモリ４には、ＤＤＲ（Double Data Rate Synchronous DRAM）に代表される高速メモリが用いられる。ＤＤＲＩ／Ｆ１０及びキャッシュメモリ４は、キャッシュＩ／Ｏにより接続されている。
【００２５】
ＰＣＩＩ／Ｆ１１ａ〜１１ｅ（PCI I/F）は、物理レイヤー、リンクレイヤー、トランザクションレイヤーの各レイヤーにおける通信プロトコルに従い、データ転送を制御する。トランザクションレイヤーのデータ転送は、ＴＬＰ（Transaction Layer Packet）形式のパケット単位で行われる。
【００２６】
メモリコントローラ１２（MEM CTL）は、キャッシュメモリに対するリード、ライト、ＲＭＷ（Read Modify Write）、ＤＲＡＭに対するリフレッシュ動作などＤＲＡＭ対する各種コマンド発行を制御する。また、メモリコントローラ１２は、コントローラ１ａ内部の高速スイッチ（SW）１５と接続されている。
【００２７】
各ブリッジ回路１３ａ〜１３ｅ（BRG MP, BRG Cross, BRG D, BRG Dual, BRG D）は、コントローラ１ａ内部の高速スイッチ１５と接続され、転送されたＴＬＰに対する受信バッファ、送信バッファを含むブリッジ回路である。ブリッジ回路１３ａ〜１３ｅは、バッファを備えることで、ＴＬＰを構成するヘッダー情報の保持、書き換えが可能であり、コントローラ１内、コントローラ１間のＴＬＰ転送に適したパケット変換機能も備える。これについては、図８〜図１３にて説明する。
【００２８】
ＤＭＡ回路１４ａ、１４ｂ（D DMA, H DMA）は、ブリッジ回路１３ｅ（BRG H）、ブリッジ回路１３ｃ（BRG D）と接続されており、転送元の各Ｉ／Ｏを介したリクエスタとして、転送動作を制御する。ＤＭＡ回路２０（Multi DMA）は、マイクロプロセッサ５、キャッシュメモリ４との各Ｉ／Ｏを介した転送を制御する。
【００２９】
高速スイッチ１５は、異なるＩ／Ｏを介して、同一のＩ／ＯへのＴＬＰ転送要求（REQ）が発生した場合、アービタ１６に従い、各Ｉ／Ｏを介したＴＬＰ転送を時分割多重して転送する。
【００３０】
アービタ１６は、同時発生のＴＬＰ転送要求（REQ）に対し、決められた優先順位に従ったＩ／Ｏ選択命令を生成する。また、アービタ１６は、同時発生のＴＬＰ転送要求（REQ）の数、或いは、一定時間内にTLP転送要求（REQ）を生成した転送I/O数とある一定時間辺りに発生したＴＬＰ転送要求（REQ）回数から転送先のＩ／Ｏ上のＴＬＰ多重度を検出する。
【００３１】
トラフィックモニタ１７（Traffic Mon.）は、ある一定時間間隔で、転送先のＩ／Ｏ上のＴＬＰ転送の占有時間を計測することで、トラフィック量を算出する。トラフィックモニタ１７は、例えば、単位時間当たりで、転送元のＩ／Ｏを介して、出力のＩ／Ｏに接続される時間を計測する。計測は、アービタ１６で生成される選択信号を利用したり、高速スイッチ１５に、転送先のＩ／Ｏ上を流れるＴＬＰ転送の期間に同期して、転送状態を示すステータス検出機能を持たせることで実現する。
【００３２】
ダミー転送モニタ２１（Dmy Xfer Mon.）は、コントローラ１内部でダミーデータを伴う転送を検出する機能である。ダミーデータを伴う転送は、受信したＴＬＰデータ量が、受信バッファ量を満たさず、一定時間それ以降の受信がない場合に、ダミーデータを付加して受信バッファ量を強制的に満たし、転送（吐き出し）を行う処理である。
【００３３】
障害モニタ１８（障害Mon.）は、特に、コントローラ間Ｉ／Ｏ（デュアルＩ／Ｏ及びクロスＩ／Ｏ）の障害検出機能を備える。Ｉ／Ｏ障害は、例えば、ノン・ポステッド（Non-Posted）でＴＬＰ転送を行う際に応答（コンプリーションステータス）タイムアウトや、ＰＣＩエクスプレスで転送の際に付加されるパリティエラーを受信側で検出した場合などが挙げられる。
【００３４】
ＭＳＩ・ＭＰＩ／Ｆレジスタ１９は、各モニタ１７、１８、２１で検出した多重度、トラフィック量、ダミーデータ転送の検出、障害検出を反映し、ＭＰＩ／Ｏを介してマイクロプロセッサ５ａ、５ｂや、プロセッサメモリ７ａ、７ｂに転送する。
【００３５】
ここで、上述した多重度、トラフィック量、ダミーデータ転送検出の具体例について説明する。図３は、各転送元Ｉ／Ｏ（MP I/O、Host I/O、Drv I/O）介した、転送先Ｉ／Ｏ（Dual I/O）へのＴＬＰ転送、多重化の方法である。
【００３６】
転送元Ｉ／Ｏ（MP I/O、Host I/O、Drv I/O）のブリッジ回路１３ａ、１３ｃ、１３ｅ（BRG MP, BRG H, BRG D）は、受信ＴＬＰを格納するバッファと、ＴＬＰ受信間隔を計測するタイマーから構成される。バッファ容量は、例えば、ストレージ装置１００を構成するハードディスクドライブのアクセス単位（セクタ）が５１２バイトに対し、２倍の容量（１０２４バイト（Byte）、１ｋバイト）を備える。バッファは、高速スイッチ１５で他Ｉ／Ｏと多重する際のオーバーヘッドを最小とするためであり、あるＩ／Ｏを介した転送中に、別のＩ／ＯのＴＬＰ転送を継続するために設けられる。
【００３７】
転送元Ｉ／Ｏに対するブリッジ回路１３ａ、１３ｃ、１３ｅは、コントローラ１内レジスタの数バイト単位アクセスから、数Ｋバイト単位のデータ転送のＴＬＰ転送に対応した構成である。ブリッジ回路１３ａ、１３ｃ、１３ｅは、ＴＬＰの受信でタイマーを起動し、次のＴＬＰ受信までの時間間隔を測定する。ブリッジ回路１３ａ、１３ｃ、１３ｅは、タイムアウト検出なら、受信ＴＬＰにダミーデータを付加することで１ｋバイトのバッファ容量を強制的に満たし、高速スイッチ１５へ転送する。ブリッジ回路１３ａ、１３ｃ、１３ｅは、同時に、アービタ１６へＴＬＰ転送要求（REQ）を出力する。アービタ１６は、ＴＬＰ転送要求（REQ）発生の順に、アクナリッジ（Acknowledge: ACK）を各ブリッジ回路１３ａ、１３ｃ、１３ｅへ返す。アービタ１６は、ＴＬＰ転送要求（REQ）が同時発生した場合には、優先順位に従い、ＡＣＫを返す。ブリッジ回路１３ａ、１３ｃ、１３ｅは、ＡＣＫを受信後、バッファ内のデータを転送する。アービタ１６は、ＡＣＫを返した順に高速スイッチ１５に転送されたＴＬＰを時分割多重し、出力Ｉ／Ｏ上に伝送させる。
【００３８】
アービタ１６は、一方で、同時発生のＴＬＰ転送要求（REQ）の数、或いは、ある一定時間辺りに発生したＴＬＰ転送要求（REQ）の回数から、転送先のＩ／Ｏ上のＴＬＰ多重度を検出する。トラフィックモニタ１７は、ある一定時間間隔で、出力Ｉ／Ｏ（Dual I/O）上のＴＬＰ占有時間を計測することで、トラフィック量を算出する。ダミー転送モニタ２１は、コントローラ１内部でダミーデータを伴う転送を検出する機能であり、ブリッジ回路１３ａ、１３ｃ、１３ｅを構成するタイマーのタイムアウト検出に相当する。ダミー転送モニタ２１は、一定時間単位でタイムアウト検出回数を計測し、閾値との比較を行う。ダミー転送モニタ２１は、閾値との比較で、ダミーデータ転送の頻度を計測することでＩ／Ｏ帯域の浪費を検出可能となる。
【００３９】
次に、Ｉ／Ｏ帯域の浪費について、図４を用いて説明する。図４では、例えば、ＭＰＩ／Ｏにデータ量小のＴＬＰが受信され、ブリッジ回路１３ａ、１３ｃ、１３ｅを構成するバッファ量を満たさないまま、ダミーデータと共に転送される場合を示している。ダミーデータは、転送先では無意味なデータであるが、出力Ｉ／Ｏ上にはデータとして存在するため、Ｉ／Ｏ帯域の浪費が発生する。ストレージ装置１００では、ダミーデータ転送の発生頻度が高い場合、Ｉ／Ｏ帯域の浪費が増加し、他Ｉ／Ｏの転送レート低下を引き起こすこととなる。
【００４０】
図４では、一例としてＭＰＩ／Ｏを用いて説明したが、ホスト Ｉ／Ｏ、ドライブ Ｉ／Ｏに接続されるホストインターフェイス２、ドライブインターフェイス３との間のレジスタアクセス等が発生する場合にも、ダミーデータを伴う転送が発生する。従って、図３では、全てのブリッジ回路１３ａ、１３ｃ、１３ｅにタイマーとダミーデータ付加機能を備える。
【００４１】
次に、各コントローラ１で検出の多重度、トラフィック量、ダミーデータ検出、障害検出など各ステータスの共有方法を説明する。この場合、マイクロプロセッサ５ａ（MP 0）は、直接制御するコントローラ１ａ、１ｂ（CTL 0,CTL 1）、ホストインターフェイス２ａ、２ｂ（Host I/F 0,1）、ドライブインターフェイス３ａ、３ｂ（Drv I/F 0,1）に対するステータスや、制御レジスタへのアクセスを、メモリコントローラハブ６ａ（MCH 0）を介したプロセッサメモリ７a（MP Mem 0）との間のＴＬＰ転送や、マイクロプロセッサのレジスタアクセスによって行う（自系（CTL0/1）ステータス）。マイクロプロセッサ５ｂ（MP 1）は、マイクロプロセッサ５ａと同様に、コントローラ１ｃ、１ｄ（CTL 2,CTL 3）、ホストインターフェイス２ｃ、２ｄ（Host I/F 2,3）、ドライブインターフェイス３ｃ、３ｄ（Drv I/F 2,3）からのステータスを取得し、プロセッサメモリ７ｂに更新する（自系（CTL2/3）ステータス）。
【００４２】
ここで、１つのマイクロプロセッサ５から見て、直接制御可能なコントローラ１、ホストインターフェイス２、ドライブインターフェイス３を「自系」と定義し、デュアルＩ／Ｏを挟み、反対側にあるコントローラ等を「他系」と定義する。例えば、マイクロプロセッサ５aにおいては、コントローラ１ａ、１ｂは「自系」、コントローラ１ｃ、１ｄは「他系」となり、マイクロプロセッサ５ｂにおいては、コントローラ１ｃ、１ｄは「自系」、コントローラ１ａ、１ｂは「他系」となる。
【００４３】
一方、各マイクロプロセッサ５は、「他系」のコントローラ１やＩ／Ｏのステータスの取得が必要な場合がある。例えば、マイクロプロセッサ５ａが、コントローラ１ｃあるいは１ｄのステータスや、Ｉ／Ｏを介してホストインターフェイス２ｃ、２ｄ、ドライブインターフェイス３ｃ、３ｄへアクセスする場合がこれに相当する。
【００４４】
この場合、ストレージ装置１００では、マイクロプロセッサ５ａが、デュアルＩ／Ｏを介して、「他系」のプロセッサメモリ７ｂから、「自系」のプロセッサメモリ７aにデータ転送を行うことで、ステータスを共有する。また、ストレージ装置１００では、マイクロプロセッサ５ａが、直接、「他系」のコントローラ１ｃ、１ｄ内のレジスタ、Ｉ／Ｏに対してアクセスすることも考えられる。ここで、ストレージ装置１００では、プロセッサメモリ７ａ、７ｂ間の通信でステータスを共有する場合、転送経路が２種類存在する。そこで、ストレージ装置１００では、例えば、ステータス等をプロセッサメモリ７ｂからプロセッサメモリ７ａへ転送する場合には、マイクロプロセッサ５aが、「他系」のコントローラ１ｃ、１ｄのデュアルＩ／Ｏに対する障害、多重度、トラフィック量、ダミーデータ転送検出から、転送に最適なデュアルＩ／Ｏを選択する。
【００４５】
なお、ＭＳＩ・ＭＰＩ／Ｆレジスタ１９及びマイクロプロセッサ５間の通信は、ＭＰＩ／Ｏ経由の通信に限定されず、例えば、ハードワイヤーで直接マイクロプロセッサ５に接続される割り込み信号や、専用のレジスタＩ／Ｆバスを設ける場合も考えられる。ストレージ装置１００では、割り込み通知に、ＭＳＩ（Message Signaled Interrupt）（図示せず）を用いる場合、ＭＰＩ／Ｏを経由し、ＴＬＰとしてプロセッサメモリ７へ転送する。
【００４６】
次に、図１のストレージ装置１００で行われるホスト、ＨＤＤドライブ（ＬＵ８a）間のデータ転送について説明する。図６は、ホストへのデータ転送（ＬＵリード）の一例として、LU８a（LU 0）を再生し、キャッシュメモリ４ａ（Cache 0）に書き込み、キャッシュメモリ４ａから、各ホストインターフェイス２ａ〜２ｄ（Host I/F0−3）に転送する場合のデータ転送経路を示している。ＬＵ８aのキャッシュメモリ４aへの書き込みは、ＬＵ８aが属するコントローラ１a（CTL 0）を制御するマイクロプロセッサ５a（MP 0）が、コントローラ１aのＤＭＡ回路１４ｂ（D DMA）を起動することで行われる。
【００４７】
キャッシュメモリ４aへの書き込み後、転送先のホストインターフェイス２が属するコントローラ１内のＤＭＡ回路１４ａ（H DMA）を、各コントローラ１を制御するマイクロプロセッサ５が起動し、ＬＵ８ａのデータを転送する。図６では、各ホストインターフェイス２への転送経路（xfer0, xfer1, xfer2, xfer3）を図示している。図６中、転送元（キャッシュメモリ４ａ）と、転送先（Host I/F 3）が属するコントローラ１ｄが互いに隣接しない転送（xfer３）では、複数の転送経路が発生する。ここで、デュアルＩ／Ｏ、クロスＩ／Ｏで接続されないコントローラ１間の転送経路（xfer３）を「対角経路」と呼ぶことにする）。図６において、コントローラ１ｃ（CTL 2）経由の対角経路xfer３の場合、転送先コントローラ１ｄ（CTL 3）のＤＭＡ回路１４ａ（H DMA）を起動し、コントローラ１ｃ、１ｄを同一のマイクロプロセッサ５ｂ（MP 1）で転送管理する。
【００４８】
一方で、コントローラ１ａ（ＬＵ８ａのデータが書き込まれたキャッシュメモリ４ａ）とコントローラ１ｃとはデュアル０Ｉ／Ｏ（Dual 0 I/ O）で接続され、そのＩ／Ｏ障害はコントローラ１ｃ側で受信データの転送タイムアウトにより管理される。従って、転送時の障害把握をマイクロプロセッサ５ｂで一元管理可能となる。なお、ＬＵ８aのデータのキャッシュメモリ４ａへの書込みは、図６の一例に限定されず、例えば、転送先のホストインターフェイス３の属するコントローラ１へ転送し、転送先のホストインターフェイス３の属するキャッシュメモリ４に書き込むことも考えられる。この場合も、ＬＵ８aからキャッシュメモリ４ｄまでの伝送経路は、コントローラ１ｂ又はコントローラ１ｃを経由する経路が存在する。本発明の内容は、この場合にも適用される。
【００４９】
図７は、ホストインターフェイス２ａから各ＬＵ８へのデータ転送（ＬＵ書込み）経路を示している。図７において、ホストインターフェイス２ａの受信データは、それぞれが属するコントローラ１aのキャッシュメモリ４ａと、デュアル０Ｉ／Ｏを介して対称位置にあるコントローラ１ｃのキャッシュメモリ４ｃに二重書きされる。ストレージ装置１００では、二重書きによりホストからの転送データの消失を回避することができる。マイクロプロセッサ５aは、二重書き終了後、目的のＬＵ８aが存在するドライブインターフェイス３aへ転送し、ＬＵ８aを更新する。マイクロプロセッサ５aは、転送先のコントローラ１ａのＤＭＡ回路１４ｂ（D DMA）で転送を制御する。なお、ホストインターフェイス２ａから受信されたデータのキャッシュメモリ４への書き込みは、図７に限定されず、例えば、キャッシュメモリ４ｂやキャッシュメモリ４ｄに二重書きする場合も考えられる。
【００５０】
以上、図５〜図７により、コントローラ１間を接続するデュアルＩ／Ｏ、クロスＩ／Ｏ上を通過するＩ／Ｏアクセスについて説明する。デュアル０Ｉ／Ｏ、デュアル１Ｉ／Ｏには、「他系」のプロセッサメモリ７の共有や、「他系」のコントローラ１、ホストインターフェイス２、ドライブインターフェイス３のレジスタへのアクセスに伴う通信（図５）と、ホストからの転送データ二重書き処理（図７）、ホストへの転送時に発生するデータ転送（図６）が多重される。特に、マイクロプロセッサ５や、ホストインターフェイス２、ドライブインターフェイス３のレジスタアクセスは、図４で説明したダミーデータ転送を伴うため、デュアルＩ／Ｏは、それらアクセスの発生によって、帯域の浪費が発生しやすいことになる。一方で、クロス０Ｉ／Ｏ、クロス１Ｉ／Ｏは、コントローラ１間のデータ通信のみに利用されるため、上記問題が発生しない。
【００５１】
次に、図６及び図７で説明したホスト及びＬＵ８間のデータ転送について、コントローラ１、マイクロプロセッサ５で行われる具体的な転送方法を説明する。
【００５２】
図８〜図１２は、図１、図６及び図７のストレージ装置１００を構成するコントローラ１内、コントローラ１間のデータ転送のみに適用されるＴＬＰフォーマットを示す図である。ＴＬＰフォーマットは、ＰＣＩエクスプレスのＴＬＰ形式に準拠し、さらに、コントローラ１内、コントローラ１間のＴＬＰ転送に最適化している。
【００５３】
図８は、転送元からのライトコマンド３１を示し、ヘッダー部とライトデータから構成される。図９は、ライトコマンド３１に対するステータス応答を必要とするノン・ポステッド（Non-Posted）転送の応答パケット（ライト応答３２）であり、ヘッダーとエラーステータスから構成される。図１０は、リードコマンド３３を示し、ヘッダーのみで構成される。図１１は、リードコマンドに対するリード応答３４（コンプリーション）であり、ヘッダーと転送元（コンプリータ）からの転送データより構成される。
【００５４】
図１２は、各コマンドのヘッダー構成ビットに対し、コントローラ１内、コントローラ１間のＴＬＰ転送に最適化した部分を示す。図１２において、ＴＬＰフォーマット（３１〜３４）には、データの転送元を示すコンプリータＩＤとデータの転送先を示すリクエスタＩＤに含める情報として、コンプリータ、或いは、リクエスタが属するコントローラを識別するＬＳＩ番号や、リクエスタ、或いは、リクエスタが接続されるＩ／Ｏを識別するＦｕｎｃ.（Function）番号が与えられる。さらに、ＴＬＰフォーマット（３１〜３４）には、図６における転送経路（xfer３）の対角経路選択に対応する目的で、リクエスタ、コンプリータがそれぞれ属するコントローラ１に挟まれた経由コントローラを識別するルートＩＤ１、ルートＩＤ２が与えられる。なお、コンプリータＩＤ、リクエスタＩＤ、ルートＩＤ１及びルートＩＤ２は、マイクロプロセッサ５により付与される。
【００５５】
ルートＩＤ１には、コントローラ１ａ〜１ｄのコントローラ番号（０〜３）が与えられる。しかしながら、図６の転送経路（xfer 0-2）や、図７の転送経路（xfer 0-3）の各経路識別のため、０〜３以外のコード値は、無効、つまり、経由するコントローラ１がないことを示す。ルートＩＤ２は、例えば、経由するコントローラ１におけるデータの転送元、つまり、コントローラ１への入力Ｉ／Ｏ（デュアルＩ／Ｏ又はクロスＩ／Ｏ）を規定する。ルートＩＤ２では、逆に、転送先、つまりコントローラ１からの出力Ｉ／Ｏの規定も考えられる。タグ（Tag）番号は、例えば、あるリード命令に対し、そのＴＬＰに含まれるタグ番号を、全てのリード応答３４に引継ぎ、リクエスタ要求に対する応答パケットの識別に用いる。
【００５６】
なお、図８〜図１２は、全てＰＣＩエクスプレスのＴＬＰフォーマットに準拠しており、その他ヘッダーを構成する各ビットについての説明は省略する。
【００５７】
また、コントローラと接続されるＩ／Ｏ（Host I/O, Drv I/O, MP I/O）間のＴＬＰ転送には、以上説明したＴＬＰヘッダーは適用されない。当該ＴＬＰ転送には、ＰＣＩエクスプレスのＴＬＰフォーマットに完全に準拠したフォーマットが適用され、転送互換性を維持する。ＴＬＰ互換については、図１３で説明する。
【００５８】
図１３は、図８〜図１２で説明したＴＬＰ形式で行われるコントローラ１内、コントローラ１間のデータ転送の説明図であり、一例として、図６における転送経路（xfer 3）（コントローラ２経由の転送）に適用した場合を示している。つまり、図１３は、ホストインターフェイス２ｃ（H0st I/F 3）にリード命令が受信され、キャッシュメモリ４ａ（Cache 0）にＬＵ８ａ（LU 0）のデータを書込み、コントローラ２ｂ（CTL 2）経由でキャッシュデータのホストインターフェイス２ｃへの転送を行う場合である。
【００５９】
図１３において、ホストインターフェイス２ｃよりリード命令を含むＴＬＰが受信されると、コントローラ１ｄを管理するマイクロプロセッサ５ｂ（MP 1）は、受信ＴＬＰから転送命令を解析し、再生するＬＵ８を検索する（ＬＵ検索は、図１４を用いて後述する）。一方、コントローラ１ｄのブリッジ回路１３ｅ（BRG H）においてヘッダーを一時退避する。ヘッダー退避は、例えば、ブリッジ回路１３ｅを構成するバッファからヘッダー部分をプロセッサメモリ７ｂへ転送することで行われる。
【００６０】
マイクロプロセッサ５ｂは、ＬＵサーチ後、ＤＭＡ回路１４ｂ（D DMA）の起動で再生ＬＵ８ａのデータをキャッシュメモリ４ａに格納する。一方、マイクロプロセッサ５ｂは、退避したリード命令に対するヘッダー情報を、リード命令を受信したＩ／Ｏと、コントローラ１ｃの番号（３）に対応したリクエスタＩＤに変換する。さらに、マイクロプロセッサ５ｂは、タグ番号を含む引き継がれるヘッダー情報も、プロセッサメモリ７ｂを介してコントローラ１ａのメモリコントローラ１２に転送する。
【００６１】
つまり、マイクロプロセッサ５ｂは、リード命令に対するコンプリーションステータス（Cpl STS）に、転送先を示すコンプリータＩＤのＬＳＩ番号としてコントローラ１ｃの番号（３）を与え、転送先Ｉ／Ｏとしてホストインターフェイス２を示すＤＭＡ回路１４ａ（HDMA）（０ｘ１３）を与える。また、マイクロプロセッサ５ｂは、リクエスタＩＤのＬＳＩ番号としてコントローラ１ａの番号（０）を与え、転送元Ｉ／Ｏとしてキャッシュを示すメモリコントローラ１２（０ｘ０５）を与える。マイクロプロセッサ５ｂは、タグ番号を継承する。さらに、マイクロプロセッサ５ｂは、ルーティング結果に基づき、経由コントローラ番号、Ｉ／Ｏ（Route ID 1-2）を格納する。図１３の場合、コントローラ１ｃ経由であるため、コントローラ１ｃにおける入力は、デュアルＩ／Ｏであり、ルートＩＤ１にコントローラ１ｃの番号（２）、ルートＩＤ２にデュアルＩ／Ｏの番号（０ｘ０１）を格納する。ルーティングについては、図１４以降で説明する。
【００６２】
マイクロプロセッサ５ｂは、コントローラ１ａでのコンプリーションステータス転送準備が完了すると、転送先のコントローラ１ｃのＤＭＡ回路１４ａ（H DMA）を起動し、ＴＬＰ単位でキャッシュデータ転送を制御する。コントローラ１ａのメモリコントローラ１２（MEM CTL）では、ルートＩＤ１、ルートＩＤ２により、高速スイッチ１５に対し、転送先Ｉ／Ｏへのデータ転送を要求する。コントローラ１ａのメモリコントローラ１２では、ルートＩＤ２が「０ｘ０１」であることから、転送先Ｉ／ＯとしてデュアルＩ／Ｏへの転送を要求し、コントローラ１ａ（CTL 0）からコントローラ１ｃ（CTL 2）へのＴＬＰ転送を行う。
【００６３】
コントローラ１ｃにおいて、デュアル０Ｉ／Ｏ経由でＴＬＰを受信したブリッジ回路１３ｄ（BRG Dual）は、ルートＩＤ１が「０ｘ０２」であることを検出し、自己のコントローラ番号（２）との一致を検出して、経由コントローラであることを識別する。ブリッジ回路１３ｄは、その認識結果と、ルートＩＤ２が「０ｘ０１」であることと、入力が「デュアルＩ／Ｏ」であることから、コントローラ１間のＩ／Ｏであるクロス１Ｉ／Ｏを転送先Ｉ／Ｏとして認識する。さらに、ブリッジ回路１３ｄは、高速スイッチ１５に対し、転送先Ｉ／Ｏ（クロス１Ｉ／Ｏ）へのデータ転送を要求し、コントローラ１ｃのクロス１Ｉ／Ｏに接続されるコントローラ１ｄ（CTL 3）に転送する。
【００６４】
コントローラ１ｄにおいて、クロス１Ｉ／Ｏ経由でＴＬＰを受信したブリッジ回路１３ｂ（BRG Cross）は、コンプリータＩＤから、コントローラ識別情報である「０ｘ０３」を検出する。さらに、ブリッジ回路１３ｂは、自己のコントローラ番号との一致を検出し、コンプリーションステータスの受信コントローラであることを識別する。また、ブリッジ回路１３ｂは、転送先Ｉ／ＯがＤＭＡ回路１４ａ（H DMA）（０ｘ１３）であることから、ホストＩ／Ｏを転送先として認識する。そして、ブリッジ回路１３ｂは、高速スイッチ１５に対し、ホストＩ／Ｏへのデータ転送を要求、ホストインターフェイス２ｄ（Host I/F 3）へＴＬＰ転送する。一方、ブリッジ回路１３ｅ（BRG H）は、リードコマンド受信時に保持しておいたタグ番号と転送ＴＬＰに対するタグ番号との比較を行い、一致したものに対し、受信時のヘッダーに付け替え、外部Ｉ／Ｏの応答用コンプリーションステータスに変換する。
【００６５】
以上より、コントローラ１間の転送は、図８〜図１２のＴＬＰフォーマットを用い、外部Ｉ／Ｏ間の転送は、ＴＬＰヘッダー付け替えでＰＣＩエクスプレスに完全に準拠したＴＬＰを用い、データ転送が行われる。
【００６６】
次に、図６で説明したデータ転送制御について、図１４のフローチャートを用いて説明する。図１４では、コマンド受信、再生ＬＵの検索から、データ転送経路選択の要否判定、経路選択処理、データ転送までの制御を示す。図１４のフローチャートは、マイクロプロセッサ５がコントローラ１等を制御することで成し遂げられる。まず、マイクロプロセッサ５は、ホストからの転送命令をホストインターフェイス２により受信する（Ｓ８０１）。続いて、転送命令を受信したホストインターフェイス２を制御するマイクロプロセッサ５は、転送命令の受信をホストインターフェイス２、或いは、コントローラ１からの割り込み（MSI）を介して検知する。さらに、マイクロプロセッサ５は、受信した転送命令をプロセッサメモリ７に転送し、命令を解析する（Ｓ８０２）。
【００６７】
次に、Ｓ８０３からＳ８０７の範囲で行われるＬＵ検索、キャッシュ書込み処理を説明する。続いて、マイクロプロセッサ５は、Ｓ８０２の処理後、ＬＵ再生命令を検出し、「自系」のコントローラ１で管理するＬＵ８を検索する（Ｓ８０３）。そして、マイクロプロセッサ５は、再生目的のＬＵ８が検出された場合（Ｓ８０３：検出）、Ｓ８０６にジャンプし、再生ＬＵ８が属するコントローラ１のＤＭＡ回路１４ｂ（D DMA）を起動し、キャッシュメモリ４へ再生ＬＵ８のデータを書き込む。
【００６８】
これに対して、マイクロプロセッサ５は、Ｓ８０３で該当ＬＵ８がない場合（Ｓ８０３：該当なし）、「他系」のマイクロプロセッサ５へ処理を引き継ぐ（Ｓ８０４）。具体的には、「自系」のプロセッサメモリ７内の受信コマンドを、「他系」のプロセッサメモリ７に転送する。「他系」のマイクロプロセッサ５は、自己の管理するＬＵ８を検索し、再生ＬＵを検出し（Ｓ８０５）、再生ＬＵ８が属するコントローラ１のＤＭＡ回路１４ｂ（D DMA）を起動し、キャッシュメモリ４へ再生ＬＵ８のデータを書き込む（Ｓ８０６）。
【００６９】
図６の例では、転送命令を受信したホストインターフェイス２ｄ（Host I/F 3）を制御するマイクロプロセッサ５ｂ（MP 1）は、管理するＬＵ８ｃ、８ｄ（LU 2, LU 3）の範囲内でＬＵ８ａ（LU 0）を検索する。続いて、マイクロプロセッサ５ｂは、結果該当ＬＵ８ａがないため、マイクロプロセッサ５ａ（MP 0）に処理を引き継ぎ、マイクロプロセッサ５ａが管理するＬＵ８ａ、８ｂ（LU 0, LU 1）の範囲内でＬＵ８ａの検索を行う。そして、マイクロプロセッサ５ａは、検索の結果、ＬＵ８ａを検出し、キャッシュメモリ４（Cache 0）への書き込みを制御する。
【００７０】
最後に、マイクロプロセッサ５は、Ｓ８０７で再生ＬＵ８のキャッシュメモリ４への書込み完了を、ステータスとしてマイクロプロセッサ５間で共有する。ステータスの共有方法については、図５で説明の方法が適用される。
【００７１】
なお、マイクロプロセッサ５別に管理されるＬＵ情報は、プロセッサメモリ７やキャッシュメモリ４の一部を用いて、共有する場合も考えられる。従って、ＬＵ検索処理（Ｓ８０３〜Ｓ８０５）は、単独のマイクロプロセッサ５で行うこともできる。
【００７２】
続いて、マイクロプロセッサ５は、再生ＬＵ８のキャッシュメモリ４への書込み後、キャッシュメモリ４から転送先までの経路選択可否を判定する（Ｓ８０８）。図６の転送経路（xfer 0, xfer 1, xfer 2）は、経路上に障害が発生しない限り、最適経路は一意に決まる。しかしながら、転送経路（xfer 3）は、経路長、つまり、通過するコントローラ１の数が同一であり、転送経路が複数存在することから、各コントローラ１の動作状態の変化に応じて、最適な転送経路の選択が可能である。
【００７３】
続いて、マイクロプロセッサ５は、Ｓ８０８の経路選択可否判定の際において、再生ＬＵ８のデータが書き込まれたキャッシュメモリ４、転送命令を受信したホストインターフェイス２それぞれが属するコントローラ情報を、プロセッサメモリ７で共有している。そして、マイクロプロセッサ５は、例えば、キャッシュメモリ４ａ（Cache 0）と、ホストインターフェイス２ｄ（Host I/F 3）について、コントローラ１同士が隣接せず、対角位置であることから、転送経路が「xfer 3」と判定し、転送経路の選択処理を行う（Ｓ８０８：ＹＥＳ）。
【００７４】
続いて、マイクロプロセッサ５は、Ｓ８０９、Ｓ８０Ａのルーティング判定１、２を順に行い、コントローラ障害や、コントローラ間Ｉ／Ｏの多重度、トラフィック量、ダミーデータ転送検出から、最適な転送経路を判定する（Ｓ８０９、Ｓ８０Ａ）。マイクロプロセッサ５は、転送を行う際には、図８〜図１３で説明したコンプリーションステータス（ＴＬＰフォーマット）の生成方法、ＤＭＡ起動による転送方法に従い、キャッシュメモリ４上の再生ＬＵ８のデータを転送する（Ｓ８０Ｂ）。
【００７５】
これに対して、マイクロプロセッサ５は、Ｓ８０８で経路選択が不要の場合（Ｓ８０８：ＮＯ）（図６の転送経路の「xfer 0, xfer 1, xfer2」）、Ｓ８０Ｂの処理に移行する（Ｓ８０Ｂ）。なお、マイクロプロセッサ５は、Ｓ８０Ｂ実行前にＳ８０９を実行し、経路上のＩ／Ｏに障害がある場合に対応する場合も考えられる。
【００７６】
最後に、マイクロプロセッサ５は、コンプリーションステータス転送中にも、Ｓ８０９及びＳ８０Ａ相当の処理であるＳ８０Ｃのルーティング判定３を行い、変化するコントローラ１の状態に応じて最適な経路選択を行う（Ｓ８０Ｃ）。
【００７７】
具体例として、図６の転送経路が「xfer 3」を図１４のフローチャートに適用した場合を説明する。図６、図１４において、マイクロプロセッサ５ｂ（MP 1）は、ホストインターフェイス２ｄ（Host I/F 3）により転送命令を受信する（Ｓ８０１）。続いて、マイクロプロセッサ５ｂは、転送命令を、ホストインターフェイス２ｄを制御するプロセッサメモリ７ｂ（MP Mem 1）に転送する。
【００７８】
続いて、マイクロプロセッサ５ｂは、命令内容の解析を行い、再生ＬＵ８ａを検出する（Ｓ８０２）。この場合、マイクロプロセッサ５ｂは、当該マイクロプロセッサ５ｂの管理ＬＵがＬＵ８ｃ、８ｄ（LU 2, LU 3）であり、該当なしと判断する（Ｓ８０３：該当なし）。続いて、マイクロプロセッサ５ｂは、「他系」のマイクロプロセッサ５ａ（MP 0）へ処理を引き渡す（Ｓ８０４）。
【００７９】
続いて、マイクロプロセッサ５ａは、当該マイクロプロセッサ５ａの管理ＬＵがＬＵ８ａ、８ｂ（LU 0, LU 1）であり、再生ＬＵ８ａを検出する（Ｓ８０５）。続いて、マイクロプロセッサ５ａは、コントローラ１ａ（CTL 0）のＤＭＡ回路１４ｂ（D DMA）を起動し、再生ＬＵ８ａのデータをキャッシュメモリ４ａ（Cache 0）へ書き込む（Ｓ８０６）。続いて、マイクロプロセッサ５ａは、キャッシュメモリ４ａの再生ＬＵ８ａのデータの書込み終了ステータスを、プロセッサメモリ７ａ、７ｂ（MP Mem 0, MP Mem 1）で共有する（Ｓ８０７）。
【００８０】
続いて、マイクロプロセッサ５ａは、キャッシュメモリ４ａと転送命令を受信したホストインターフェイス２ｄを対角位置と判断し（Ｓ８０８：ＹＥＳ）、Ｓ８０９の移行の処理を行い、最適な転送経路である「xfer 3」の選択を行う（ルーティング判定１（Ｓ８０９）、ルーティング判定２（Ｓ８０Ａ））。続いて、マイクロプロセッサ５ａは、キャッシュメモリ４ａから再生ＬＵ８ａのデータの転送を行う（Ｓ８０Ｂ）。続いて、マイクロプロセッサ５ａは、Ｓ８０Ｃにより、最適な転送経路の選択を常に行う（ルーティング判定３（Ｓ８０Ｃ））。
【００８１】
次に、Ｓ８０９のルーティング判定１について説明する。図１５のフローチャートは、コントローラ１の障害状況に応じた経路判定方法を示している。特に、経路選択に関係の深い各コントローラ間Ｉ／Ｏ（デュアルＩ／Ｏ及びクロスＩ／Ｏ）の障害に対する判定方法である。マイクロプロセッサ５は、Ｓ９０１にて、各コントローラ間Ｉ／Ｏ（デュアルＩ／Ｏ及びクロスＩ／Ｏ）の障害状況を取得し、各プロセッサメモリへの書込みで全てのコントローラ間Ｉ／Ｏの障害状況を共有する。障害検出方法の一例として、ノンポステッド（Non-Posted）転送される応答パケットの受信でタイムアウトが発生した場合や、ストレージ装置起動の際に行われるＩ／Ｏの自己診断で、コントローラ１間の通信不良が検出された場合などが挙げられる。
【００８２】
続いて、マイクロプロセッサ５は、Ｓ９０２において、共有している障害情報から「自系」のコントローラ１におけるコントローラ間Ｉ／Ｏ障害の有無を確認する。例えば、「自系」のマイクロプロセッサ５ｂは、図６の「xfer 3」の場合、コントローラ１ｃ、１ｄのコントローラ間Ｉ／Ｏ障害を確認する（デュアル０Ｉ／Ｏ、クロス１Ｉ／Ｏ）。続いて、「自系」のマイクロプロセッサ５ｂは、コントローラ間Ｉ／Ｏ障害が無い場合（Ｓ９０２：ＮＯ）、コントローラ１ｃ経由を選択する（Ｓ９０３）。
【００８３】
これにより、ストレージ装置１００では、「xfer 3」の選択経路に対する障害管理が、転送先であるホストインターフェイス２ｄを制御するマイクロプロセッサ５ｂで一元管理可能となる。つまり、ストレージ装置１００では、転送元直後のコントローラ間Ｉ／Ｏから、転送先のコントローラ間Ｉ／Ｏまで唯一のマイクロプロセッサ５ｂで管理されるため、障害発生を速やかに把握することができる。障害は、プロセッサメモリ７で共有することも考えられるが、デュアルＩ／Ｏで障害発生の場合には、共有不可能である。従って、Ｓ９０２からＳ９０３の優位性が理解される。
【００８４】
続いて、マイクロプロセッサ５は、Ｓ９０２でコントローラ間Ｉ／Ｏ障害発生の場合（Ｓ９０２：ＹＥＳ）、Ｓ９０４において、「他系」のコントローラ１のコントローラ間Ｉ／Ｏ障害を確認する（Ｓ９０４）。具体的に、Ｓ９０２では、「自系」のマイクロプロセッサ５ｂが、デュアル０Ｉ／Ｏ、クロス１Ｉ／Ｏを判定し、コントローラ１ｃ経由の可否を判定する（Ｓ９０２）。Ｓ９０４では、「他系」のマイクロプロセッサ５ａが、デュアル１Ｉ／Ｏ、クロス０Ｉ／Ｏを判定し、コントローラ１ｂ経由の可否を判定する（Ｓ９０４）。
【００８５】
そして、マイクロプロセッサ５は、Ｓ９０４で障害検出した場合（Ｓ９０４：ＹＥＳ）、経路確保が不可能と判断する（Ｓ９０５）。最後に、マイクロプロセッサ５は、Ｓ９０１からのリトライを判断する（Ｓ９０６）。そして、マイクロプロセッサ５は、リトライ回数を超えた場合や、リトライ処理を行わない場合（Ｓ９０６：ＮＯ）、エラー終了とする。これに対して、マイクロプロセッサ５は、Ｓ９０４でコントローラ間Ｉ／Ｏ障害が無いと判断した場合（Ｓ９０４：ＮＯ）、コントローラ１ｂ経由を選択する（Ｓ９０７）。
【００８６】
次に、Ｓ８０Ａのルーティング判定２について説明する。図１６のフローチャートは、図２、図３で説明したコントローラ間Ｉ／Ｏの多重度、トラフィック量、ダミーデータ検出に基づいた転送経路の選択方法を示している。
【００８７】
マイクロプロセッサ５は、Ｓ１０１において、ルーティング判定１（Ｓ８０９）の結果から、各コントローラ間Ｉ／Ｏ障害の有無を確認する。そして、マイクロプロセッサ５は、障害Ｉ／Ｏが有る場合（Ｓ１０１：ＹＥＳ）、経路選択は不可能であり、ルーティング判定１の結果を、最終判定結果とする（Ｓ１０２）。また、マイクロプロセッサ５は、各コントローラ間Ｉ／Ｏ障害が無く、ルーティング判定１（Ｓ８０９）の結果を優先する場合にも適用され（Ｓ１０１：ＹＥＳ）、ルーティング判定１の結果を、最終判定結果とする（Ｓ１０２）。つまり、ストレージ装置１００では、ルーティング判定１（Ｓ８０９）のＳ９０３による経路判定が行われた場合に相当するため、このような場合、前述のように転送経路の障害管理に有利である。
【００８８】
これに対して、マイクロプロセッサ５は、Ｓ１０１からＳ１０３に遷移の場合（Ｓ１０１：ＮＯ）、各コントローラ間Ｉ／Ｏ（デュアルＩ／Ｏ及びクロスＩ／Ｏ）に対する多重度、トラフィック量、ダミーデータ検出の各ステータス情報を取得する（Ｓ１０３）。各情報は、プロセッサメモリ７への共有や、コントローラ１内のＭＳＩ・ＭＰＩ／Ｆレジスタ１９から直接取得する。続いて、マイクロプロセッサ５は、Ｓ１０４からＳ１０６において、取得したステータス情報から経路判定を行う。
【００８９】
マイクロプロセッサ５は、最初の判定条件として、デュアルＩ／Ｏにおけるダミーデータ転送から判定する（Ｓ１０４）。さらに、マイクロプロセッサ５は、Ｓ１０４でダミーデータ転送検出がある場合（Ｓ１０４：ＹＥＳ）、Ｓ１０８において、ダミーデータ転送の発生Ｉ／Ｏを判定し（デュアル０Ｉ／Ｏ又はデュアル１Ｉ／Ｏ）、ダミーデータ転送の無いデュアルＩ／Ｏに対する経路を選択する（Ｓ１０８）。マイクロプロセッサ５は、図６の「xfer 3」適用の場合、例えば、デュアル０Ｉ／Ｏにダミーデータ転送を検出の場合、デュアル１Ｉ／Ｏ経由、つまりコントローラ１ｂ経由を選択する。
【００９０】
なお、マイクロプロセッサ５は、デュアル０Ｉ／Ｏ及びデュアル１Ｉ／Ｏが共にダミーデータ転送を検出の場合、ステータス情報の更新、取得を繰り返し、検出頻度の低いデュアルＩ／Ｏの経路を選択する。もしくは、マイクロプロセッサ５は、Ｓ１０５以降の判定に委ねるようにすることも考えられる。
【００９１】
これに対して、マイクロプロセッサ５は、Ｓ１０４でダミーデータ転送検出がない場合（Ｓ１０４：ＮＯ）、Ｓ１０５において、デュアル０Ｉ／Ｏ及びデュアル１Ｉ／Ｏのパケット多重度を比較する（Ｓ１０５）。そして、マイクロプロセッサ５は、多重度に差が発生の場合（Ｓ１０５：ＹＥＳ）、Ｓ１０８に処理を移し、多重度が小さいデュアルＩ／Ｏを選択する（Ｓ１０８）。これにより、マイクロプロセッサ５は、高速スイッチ１５で多重化の際に発生するオーバーヘッドの転送への影響に配慮した経路選択を行うことができる。
【００９２】
これに対して、マイクロプロセッサ５は、Ｓ１０５において多重度に差が無い場合（Ｓ１０５：ＮＯ）、Ｓ１０６において、デュアル０Ｉ／Ｏ及びデュアル１Ｉ／Ｏのトラフィック量から判断する（Ｓ１０６）。そして、マイクロプロセッサ５は、トラフィック量に差が発生の場合（Ｓ１０６：ＹＥＳ）、Ｓ１０８において、トラフィック量が小さいデュアルＩ／Ｏを選択する（Ｓ１０８）。これにより、マイクロプロセッサ５は、トラフィック量、つまり、デュアルＩ／Ｏに対する転送帯域に余裕がある転送経路の選択を行うことができる。
【００９３】
以上より、マイクロプロセッサ５は、デュアルＩ／Ｏによる経路判定について、Ｓ１０４（ダミーデータ転送の有無）に最大の重み付けを与え、次に、Ｓ１０５（多重度の差）、Ｓ１０６（トラフィック量の差）の順に重み付ける。Ｓ１０６によりもＳ１０５に重み付けを与える（多重度優先）理由は、パケット多重化により発生する転送オーバーヘッド増加が、転送効率の低下、つまり、デュアルＩ／Ｏの帯域を浪費するためである。
【００９４】
これに対して、マイクロプロセッサ５は、Ｓ１０６においてトラフィック量の差が無い場合（Ｓ１０６：ＮＯ）、Ｓ１０７において、クロスＩ／Ｏにおける同様のステータス情報（多重度、トラフィック量等）から、クロス０Ｉ／Ｏ又はクロス１Ｉ／Ｏ経由を判断する（Ｓ１０７）。この場合、マイクロプロセッサ５は、Ｓ１０７における判定の優先順位について、Ｓ１０５からＳ１０６と同様、「（多重度）＞（トラフィック量）」の重み付けを与える。
【００９５】
また、クロスＩ／Ｏは、デュアルＩ／Ｏのようなプロセッサアクセス、キャッシュ二重書きも無いため、帯域の浪費は発生しない。従って、マイクロプロセッサ５は、経路選択を行う際には「（Ｄｕａｌ Ｉ／Ｏ）＞（Cross Ｉ／Ｏ）」とし、デュアルＩ／Ｏに重み付けをおいた判定を行う。
【００９６】
以上より、マイクロプロセッサ５は、上記において説明したルーティング判定１（図１５）及びルーティング判定２（図１６）を順番に行うことで、図６の「xfer 3」の経路選択を最適に行うことが可能となる。
【００９７】
次に、Ｓ８０Cのルーティング判定３についてについて説明する。図１７のフローチャートは、図１４のＳ８０Ｂの起動後で、ステータス情報の変化が発生した場合の制御方法を示している。マイクロプロセッサ５は、Ｓ８０Ｂ起動後、まず、各コントローラ１に対するステータス情報からデュアルＩ／Ｏ及びクロスＩ／Ｏの障害有無を判定する（Ｓ１１１）。マイクロプロセッサ５は、障害発生の場合（Ｓ１１１：ＹＥＳ）、図１５のルーティング判定１を行う（Ｓ１１２）。続いて、マイクロプロセッサ５は、Ｓ１１３にて障害が発生したデュアルＩ／Ｏ及びクロスＩ／Ｏを回避したルーティングが可能な場合（Ｓ１１３：ＮＯ）、Ｓ１１５に進む一方、当該ルーティングが不可能な場合（Ｓ１１３：ＹＥＳ）、エラー終了する。
【００９８】
これに対して、マイクロプロセッサ５は、Ｓ１１１で障害が無い場合（Ｓ１１１：ＮＯ）、図１６のルーティング判定２を行う（Ｓ１１４）。続いて、マイクロプロセッサ５は、Ｓ１１５において、Ｓ１１４或いはＳ１１２〜Ｓ１１３の判定結果から、前回のルーティング結果と比較する（Ｓ１１５）。
【００９９】
そして、マイクロプロセッサ５は、差異が無い場合（Ｓ１１５：ＮＯ）、Ｓ１１１に遷移し、以降の処理を継続する（Ｓ１１１〜Ｓ１１５）。これに対して、マイクロプロセッサ５は、差異発生の場合（Ｓ１１５：ＹＥＳ）、転送を一時停止するか否かを判定し（Ｓ１１６）、一時停止の場合（Ｓ１１６：ＹＥＳ）、Ｓ１１７にて、ＤＭＡ回路１４を一時停止し、新しい転送経路の選択を、コンプリーションステータスにおけるルートＩＤ１、ルートＩＤ２を付け替えることで行い、ＤＭＡ回路１４を再起動する（Ｓ１１７）。続いて、マイクロプロセッサ５は、Ｓ１１６で転送一時停止をしない場合（Ｓ１１６：ＮＯ）、判定３を終了し、受信命令に対する転送終了まで、経路を維持したまま転送する。
【０１００】
以上より、マイクロプロセッサ５は、転送途中においても、コントローラ１の動作状況の変化に応じて経路を最適化することが可能となる。
【０１０１】
（２）実施例２
図１８は、本発明のストレージ装置１００の別の構成例を示している。図１８の本実施例におけるストレージ装置１００では、図１のストレージ装置１００の構成におけるコントローラ１ａ〜１ｄの代わりに、メモリコントローラハブ（Memory Controller Hub :MCH）６ａ〜６ｄに、ホストインターフェイス２ａ〜２ｄ、ドライブインターフェイス３ａ〜３ｄを接続する。また、キャッシュメモリ４ａ〜４ｄは、マイクロプロセッサ５ａ〜５ｄに接続され、プロセッサメモリ７ａ、７ｂ（MP Mem）は、キャッシュメモリ４ａ〜４ｄに統合される。なお、プロセッサメモリ７は、統合されることに限らず、マイクロプロセッサ５ａ〜５ｄ上の別Ｉ／Ｏに接続されることも考えられる。
【０１０２】
さらに、本実施例におけるストレージ装置１００では、メモリコントローラハブ６間のＴＬＰ転送を制御する目的で、ＭＣＨブリッジ２２a〜２２ｄを備える。メモリコントローラハブ６間の接続は、図１と同様、メモリコントローラハブ６a及びメモリコントローラハブ６ｂをクロス０Ｉ／Ｏで接続し、メモリコントローラハブ６ａ及びメモリコントローラハブ６ｃをデュアル０Ｉ／Ｏで接続し、メモリコントローラハブ６ｂ及びメモリコントローラハブ６ｄをデュアル１Ｉ／Ｏで接続し、メモリコントローラハブ６ｃ及びメモリコントローラハブ６ｄをクロス１Ｉ／Ｏで接続する。なお、本実施例におけるストレージ装置１００では、その他の構成は図１と同様であり、同一の参照数字をつけ説明を省略する。
【０１０３】
図１８の構成に対するデータ転送の一例として、ＬＵ８ａからホストインターフェイス２ｄへのデータ転送を示している。これは、図６の「xfer 3」と同様の転送であり、転送経路が２種類存在することを示している。従って、実施例１と同様、最適な転送経路の選択が必要となる。
【０１０４】
この場合、マイクロプロセッサ５は、最適経路選択の際には、第１の実施例と同様、最初に、各マイクロプロセッサ５の制御対象であるメモリコントローラハブ６の間のＩ／Ｏ障害を判定する。マイクロプロセッサ５は、メモリコントローラハブ６とＭＣＨブリッジ２２より全てのメモリコントローラハブ間Ｉ／Ｏに対する障害の有無を検出する。マイクロプロセッサ５は、取得したメモリコントローラハブ間Ｉ／Ｏの障害情報より、障害の無い経路選択を行う。
【０１０５】
一方、マイクロプロセッサ５は、実施例１の図３で説明したダミーデータ転送、Ｉ／Ｏ多重度、トラフィック量それぞれの検出を、例えば、メモリコントローラハブ６内に同様の回路を設けることで、行うことができる。トラフィック量の検出については、ＭＣＨブリッジ２２に含めることも可能である。マイクロプロセッサ５は、メモリコントローラハブ６、ＭＣＨブリッジ２２から得られる検出情報を用い、図１６で説明した方法に従い、経路選択を行う。
【０１０６】
メモリコントローラハブ６間を流れるＴＬＰについては、図８〜図１２のヘッダー構成を用いることで、選択した転送経路に従ったパケット転送が可能となる。具体的に、メモリコントローラハブ６間を流れるＴＬＰについては、第１の実施例と同様、コントローラ番号を、転送元、転送先、経由するメモリコントローラハブ６の識別情報、転送に利用するＩ／Ｏの識別情報に置き換えることで対応可能である。
【０１０７】
図１３で説明のパケットヘッダの付け替えについては、同様の要領でメモリコントローラハブ６にて行われる。
【０１０８】
図８〜図１２のヘッダー構成を備えるＴＬＰ転送は、メモリコントローラハブ６間のＩ／Ｏに限定して行う。マイクロプロセッサ５、ホストインターフェイス２、ドライブインターフェイス３への転送時は、メモリコントローラハブ６間を転送したＴＬＰが到着後、各Ｉ／Ｏにおける転送命令受信時に保持したヘッダーに付け替えを行うことで、ＴＬＰ互換性を維持する。
【０１０９】
このようにして、ストレージ装置１００では、マイクロプロセッサ５が、ホストから受信した転送命令を解析することにより、データの転送経路を判定し、データの転送経路が複数存在するときに、転送先の転送経路に接続されているコントローラ１を制御するマイクロプロセッサ５について、当該マイクロプロセッサ５に接続されているコントローラ１の数が最大となるデータの転送経路を選択して、当該転送経路を介してデータを転送する。
【０１１０】
従って、コントローラ１を複数有するマルチコントローラ構成のストレージ装置において、転送元から転送先までのデータ転送に複数の経路選択が可能な場合、その選択を適切に行うことができるため、所望のデータに効率的にアクセスさせることができる。
【産業上の利用可能性】
【０１１１】
本発明は、キャッシュメモリやホスト、ＨＤＤドライブとの各Ｉ／Ｏを備えるコントローラにより構成されるストレージ装置に広く適用することができる。
【図面の簡単な説明】
【０１１２】
【図１】本発明が適用されるストレージ装置の構成図である。
【図２】ストレージ装置を構成するコントローラの内部構成図である。
【図３】Ｉ／Ｏポートに対する多重度、トラフィック量、ダミー転送検出の説明図である。
【図４】Ｉ／Ｏポートに対する多重度、トラフィック量、ダミー転送検出の説明図である。
【図５】ストレージ装置におけるマイクロプロセッサ管理のコントローラ割当とプロセッサメモリによるステータス共有方法を示す説明図である。
【図６】ストレージ装置におけるデータ転送経路の説明図である。
【図７】ストレージ装置におけるデータ転送経路の説明図である。
【図８】コントロール内、コントロール間のデータ転送に用いられるパケットフォーマットの説明図である。
【図９】コントロール内、コントロール間のデータ転送に用いられるパケットフォーマットの説明図である。
【図１０】コントロール内、コントロール間のデータ転送に用いられるパケットフォーマットの説明図である。
【図１１】コントロール内、コントロール間のデータ転送に用いられるパケットフォーマットの説明図である。
【図１２】コントロール内、コントロール間のデータ転送に用いられるパケットフォーマットの説明図である。
【図１３】コントロール内、コントロール間のパケットデータ転送例に対する説明図である。
【図１４】本発明のデータ転送方法のメインルーチンを説明するフローチャートである。
【図１５】コントローラ障害発生時に適用されるルーティング方法を説明するフローチャートである。
【図１６】コントローラ間Ｉ／Ｏのパケット多重度、トラフィック量、ダミー転送検出の各状況からルーティング判定の方法を説明するフローチャートである。
【図１７】データ転送中に行われるルーティング判定の方法を説明するフローチャートである。
【図１８】本発明が適用されるストレージ装置の第２の構成図である。
【符号の説明】
【０１１３】
１……コントローラ、２……ホストインターフェイス、３……ドライブインターフェイス、４……キャッシュ、５……マイクロプロセッサ、６……メモリコントローラハブ、７……プロセッサメモリ、８……ＬＵ、１０……ＤＤＲメモリインターフェイス回路（ＤＤＲＩ／Ｆ）、１１……ＰＣＩインターフェイス回路（ＰＣＩＩ／Ｆ）、１２……メモリコントローラ、１３……Ｉ／Ｏブリッジ回路、１４……ＤＭＡ回路、１５……高速スイッチ、１６……アービタ、１７……トラフィックモニタ、１８……障害モニタ、１９……ＭＳＩ・ＭＰＩ／Ｆレジスタ、２０……ダミーマルチＤＭＡ回路、２１……ダミー転送検出回路、２２……ＭＣＨブリッジ、１００……ストレージ装置
【図１】
2009266119.tif 000003
【図２】
2009266119.tif 000004
【図３】
2009266119.tif 000005
【図４】
2009266119.tif 000006
【図５】
2009266119.tif 000007
【図６】
2009266119.tif 000008
【図７】
2009266119.tif 000009
【図８】
2009266119.tif 000010
【図９】
2009266119.tif 000011
【図１０】
2009266119.tif 000012
【図１１】
2009266119.tif 000013
【図１２】
2009266119.tif 000014
【図１３】
2009266119.tif 000015
【図１４】
2009266119.tif 000016
【図１５】
2009266119.tif 000017
【図１６】
2009266119.tif 000018
【図１７】
2009266119.tif 000019
【図１８】
2009266119.tif 000020