(57)【要約】【課題】データ転送パスを冗長化したモジュール間通信におけるデータ転送を軽負荷にて保証可能にする。【解決手段】ストレージ装置１は、通信路６をメッシュ状に接続して通信可能な第１から第３のコントローラモジュール２ａ，２ｂ，２ｃを備える。第１のコントローラモジュール２ａが転送元となり、第２のコントローラモジュール２ｃが転送先となるデータ転送の場合、通信経路は、直接接続する通信路６ｃと、間接接続する通信路６ａ，６ｂがある。間接接続する通信路６ａ，６ｂを通信経路とする場合、第１のコントローラモジュール２ａの指示部５ａは、データ転送を中継する第３のコントローラモジュール２ｂにデータ転送を指示する。コントローラモジュール２ｂは、指示部５ａからの指示を受けてコントローラモジュール２ａを転送元とし、コントローラモジュール２ｃを転送先とするデータ転送を転送部４ｂによりおこなう。【選択図】図１
2014106940.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリを有しストレージデバイスを制御する第１、第２および第３のコントローラモジュールと、前記第１、第２および第３のコントローラモジュールをメッシュ状に接続する通信路と、を備えるストレージ装置であって、
前記第１のコントローラモジュールは、前記第１のコントローラモジュールを転送元とし、前記第２のコントローラモジュールを転送先とするデータ転送を、前記第１のコントローラモジュールおよび前記第２のコントローラモジュールと前記通信路によりそれぞれ直接接続する前記第３のコントローラモジュールに指示する指示部を備え、
前記第３のコントローラモジュールは、前記指示にもとづいて前記第１のコントローラモジュールのキャッシュメモリから前記第２のコントローラモジュールのキャッシュメモリへのデータ転送をおこなう転送部を備える、
ことを特徴とするストレージ装置。
【請求項２】
前記転送部は、前記第１のコントローラモジュールと前記第３のコントローラモジュールとを接続する通信路の通信状態の監視と、前記第３のコントローラモジュールと前記第２のコントローラモジュールとを接続する通信路の通信状態の監視とをおこない、前記通信状態の監視結果にもとづいて前記データ転送をおこなうことを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記指示部は、前記第１のコントローラモジュールのキャッシュメモリに転送制御情報を格納し、前記転送部は、前記転送制御情報を取得してデータ転送をおこなうことを特徴とする請求項２記載のストレージ装置。
【請求項４】
前記転送部は、前記転送制御情報で指定されたアドレスに、前記データ転送の結果を格納することを特徴とする請求項３記載のストレージ装置。
【請求項５】
前記データ転送の結果の格納先となるアドレスは、前記第１のコントローラモジュールのキャッシュメモリ上のアドレスであることを特徴とする請求項４記載のストレージ装置。
【請求項６】
前記第１、第２および第３のコントローラモジュールは、
前記通信路ごとの通信インタフェースを監視して通信路ごとの通信状態を監視する監視部と、
前記通信路ごとの通信状態を格納する格納部と、
を備え、
前記指示部は、前記第１のコントローラモジュールの格納部が格納する前記通信路ごとの前記通信状態にもとづいて前記第３のコントローラモジュールへの指示を決定することを特徴とする請求項１記載のストレージ装置。
【請求項７】
前記転送部は、ＤＭＡ（ダイレクトメモリアクセス）によるデータ転送をおこなうことを特徴とする請求項１乃至請求項６のいずれか１つに記載のストレージ装置。
【請求項８】
キャッシュメモリを有しストレージデバイスを制御する第１、第２および第３のコントローラモジュールと、前記第１、第２および第３のコントローラモジュールをメッシュ状に接続する通信路と、を備えるストレージ装置のモジュール間データ転送方法であって、
前記第１のコントローラモジュールが、前記第１のコントローラモジュールを転送元とし、前記第２のコントローラモジュールを転送先とするデータ転送を、前記第１のコントローラモジュールおよび前記第２のコントローラモジュールと前記通信路によりそれぞれ直接接続する前記第３のコントローラモジュールに指示し、
前記第３のコントローラモジュールが、前記指示にもとづいて前記第１のコントローラモジュールのキャッシュメモリから前記第２のコントローラモジュールのキャッシュメモリへのデータ転送をおこなう、
ことを特徴とするモジュール間データ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、およびモジュール間データ転送方法に関する。
【背景技術】
【０００２】
キャッシュメモリを保持しディスクへのアクセス制御をおこなうコントローラモジュールを複数備え、ＲＡＩＤ（Redundant Array of Inexpensive Disks）を構成するストレージ装置がある。ストレージ装置は、ホストコンピュータからディスクへのユーザデータの書き込み要求を受け付けると、１つのコントローラモジュールのキャッシュメモリにユーザデータを保持する。さらに、ストレージ装置は、ユーザデータを保護するために他のコントローラモジュールのキャッシュメモリにユーザデータをコピーし、非同期にディスクへの書き込みをおこなう。
【０００３】
コントローラモジュール間では、ユーザデータのコピーなどのデータ転送をおこなうために相互に通信可能な通信路を備える。ストレージ装置は、データ転送パスを冗長化するために、コントローラモジュール間を接続する２つのスイッチを通信路に備える。これにより、ストレージ装置は、コントローラモジュール間のデータ転送パスの冗長化と、通信負荷の分散を図っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２６６１１９号公報
【特許文献２】特開２００５−２７５８２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
スイッチによるデータ転送パスの冗長化は、スイッチの故障により冗長化構成とデータ転送能力が大きく損なわれる。また、スイッチによるデータ転送パスの冗長化は、転送元のコントローラモジュールがスイッチから転送先のコントローラモジュール間の通信状態を確認できない。そのため、転送元のコントローラモジュールは、転送先のコントローラモジュールへの確認を要し、ストレージ装置内のオーバヘッドとなっていた。
【０００６】
複数のコントローラモジュールをメッシュ接続したストレージ装置であっても、転送元のコントローラモジュールと転送先のコントローラモジュールとの間にデータ転送を中継するコントローラモジュールが介在する場合に同様のオーバヘッドがある。
【０００７】
１つの側面では、本発明は、データ転送パスを冗長化したモジュール間通信におけるデータ転送を軽負荷にて保証可能なストレージ装置、およびモジュール間データ転送方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、以下に示すような、キャッシュメモリを有しストレージデバイスを制御する第１、第２および第３のコントローラモジュールと、第１、第２および第３のコントローラモジュールをメッシュ状に接続する通信路と、を備えるストレージ装置が提供される。ストレージ装置は、第１のコントローラモジュールと、第２のコントローラモジュールと、第３のコントローラモジュールを備える。第１のコントローラモジュールは、指示部を備える。指示部は、第１のコントローラモジュールを転送元とし、第２のコントローラモジュールを転送先とするデータ転送を、第１のコントローラモジュールおよび第２のコントローラモジュールと通信路によりそれぞれ直接接続する第３のコントローラモジュールに指示する。第３のコントローラモジュールは、転送部を備える。転送部は、指示にもとづいて第１のコントローラモジュールのキャッシュメモリから第２のコントローラモジュールのキャッシュメモリへのデータ転送をおこなう。
【０００９】
また、上記目的を達成するために、キャッシュメモリを有しストレージデバイスを制御する第１、第２および第３のコントローラモジュールと、第１、第２および第３のコントローラモジュールをメッシュ状に接続する通信路と、を備えるストレージ装置のモジュール間データ転送方法が提供される。モジュール間データ転送方法は、以下に示すような処理を第１のコントローラモジュールと第３のコントローラモジュールに実行させる。第１のコントローラモジュールは、第１のコントローラモジュールを転送元とし、第２のコントローラモジュールを転送先とするデータ転送を、第１のコントローラモジュールおよび第２のコントローラモジュールと通信路によりそれぞれ直接接続する第３のコントローラモジュールに指示する。第３のコントローラモジュールは、指示にもとづいて第１のコントローラモジュールのキャッシュメモリから第２のコントローラモジュールのキャッシュメモリへのデータ転送をおこなう。
【発明の効果】
【００１０】
１態様によれば、ストレージ装置、およびモジュール間データ転送方法において、データ転送パスを冗長化したモジュール間通信におけるデータ転送を軽負荷にて保証することができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施形態のストレージ装置の構成例を示す図である。
【図２】第２の実施形態のストレージ装置の構成例を示す図である。
【図３】第２の実施形態のコントローラモジュール間のデータフローの一例を示す図である。
【図４】第２の実施形態のコントローラモジュールの構成例を示す図である。
【図５】第２の実施形態のデータ転送コントローラの構成例を示す図である。
【図６】第２の実施形態の性能情報送信バッファが保持する性能情報を示す図である。
【図７】第２の実施形態の性能情報格納バッファが保持する性能情報を示す図である。
【図８】第２の実施形態のＷｒｉｔｅ要求受付処理のフローチャートを示す図である。
【図９】第２の実施形態のＲｅａｄ要求受付処理のフローチャートを示す図である。
【図１０】第２の実施形態のユーザデータ転送処理のフローチャートを示す図である。
【図１１】第２の実施形態のディスクリプタを示す図である。
【図１２】第２の実施形態のデータ流量テーブル作成処理のフローチャートを示す図である。
【図１３】第２の実施形態のデータ流量テーブルを示す図である。
【図１４】第２の実施形態の転送先判定処理のフローチャートを示す図である。
【図１５】第２の実施形態の転送指示処理のフローチャートを示す図である。
【図１６】第２の実施形態の転送指示受付処理のフローチャートを示す図である。
【発明を実施するための形態】
【００１２】
以下、実施の形態を図面を参照して詳細に説明する。
［第１の実施形態］
まず、第１の実施形態のストレージ装置について図１を用いて説明する。図１は、第１の実施形態のストレージ装置の構成例を示す図である。
【００１３】
ストレージ装置１は、ストレージデバイス（情報記録装置）７のアクセス制御をおこなう制御装置である。ストレージ装置１は、図示しないホストコンピュータと通信可能に接続し、ホストコンピュータから指示（ＷｒｉｔｅコマンドやＲｅａｄコマンドなど）を受け付ける。
【００１４】
ストレージ装置１は、複数のストレージデバイス７を備えることで、ＲＡＩＤを構成する。
ストレージデバイス７は、ユーザデータや制御情報などの所要の情報を記録可能であり、たとえば、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive:フラッシュメモリドライブ）などである。なお、ストレージデバイス７は、複数のＨＤＤやＳＳＤにより構成されるディスクアレイであってもよい。
【００１５】
ストレージ装置１は、複数のコントローラモジュール２（第１のコントローラモジュール２ａ、第２のコントローラモジュール２ｂ、第３のコントローラモジュール２ｃ）を備える。第１のコントローラモジュール２ａと第２のコントローラモジュール２ｂと第３のコントローラモジュール２ｃは、通信路６をメッシュ状に接続して通信可能にしている。図１に示すメッシュ状の通信路６（６ａ，６ｂ，６ｃ）は、すべてのコントローラモジュール２を相互に接続する完全相互接続である。コントローラモジュール２ａとコントローラモジュール２ｂとは、通信路６ａにより直接接続し、通信路６ｂと通信路６ｃによりコントローラモジュール２ｃが中継してホップ数１で間接接続する。コントローラモジュール２ｂとコントローラモジュール２ｃとは、通信路６ｂにより直接接続し、通信路６ｃと通信路６ａによりコントローラモジュール２ａが中継してホップ数１で間接接続する。コントローラモジュール２ｃとコントローラモジュール２ａとは、通信路６ｃにより直接接続し、通信路６ａと通信路６ｂによりコントローラモジュール２ｂが中継してホップ数１で間接接続する。
【００１６】
コントローラモジュール２（２ａ，２ｂ，２ｃ）は、キャッシュメモリ３（３ａ，３ｂ，３ｃ）と、転送部４（４ａ，４ｂ，４ｃ）と、指示部５（５ａ，５ｂ，５ｃ）を有し、コントローラモジュール２と接続するストレージデバイス７のアクセス制御をおこなう。キャッシュメモリ３は、ユーザデータを格納し、ストレージデバイス７からデータを読み出したときのキャッシュとなり、ストレージデバイス７にデータを書き込むときのバッファとなる。また、キャッシュメモリ３は、所要の制御情報を格納するワークメモリを兼ねる。
【００１７】
転送部４は、キャッシュメモリ３を転送元または転送先とするデータ転送をおこなう。指示部５は、自身のコントローラモジュール２を転送元とし、転送先となるコントローラモジュール２へのデータ転送を中継するコントローラモジュール２がある通信経路を選択した場合に、中継するコントローラモジュール２にデータ転送を指示する。
【００１８】
コントローラモジュール２ａ（第１のコントローラモジュール）が転送元となり、コントローラモジュール２ｃ（第２のコントローラモジュール）が転送先となるデータ転送の場合、通信経路は、直接接続する通信路６ｃと、間接接続する通信路６ａ，６ｂがある。
【００１９】
直接接続する通信路６ｃを通信経路とする場合、コントローラモジュール２ａは、コントローラモジュール２ａを転送元とし、コントローラモジュール２ｃを転送先とするデータ転送を転送部４ａによりおこなう。転送部４ａは、キャッシュメモリ３ａからキャッシュメモリ３ｃへのデータ転送をおこなう。
【００２０】
一方、間接接続する通信路６ａ，６ｂを通信経路とする場合、コントローラモジュール２ａは、データ転送を中継するコントローラモジュール２ｂ（第３のコントローラモジュール）にデータ転送を指示部５ａにより指示する。コントローラモジュール２ｂは、指示部５ａからの指示を受けてコントローラモジュール２ａを転送元とし、コントローラモジュール２ｃを転送先とするデータ転送を転送部４ｂによりおこなう。転送部４ｂは、キャッシュメモリ３ａからキャッシュメモリ３ｃへのデータ転送をおこなう。
【００２１】
このように、ストレージ装置１は、スイッチなしにデータ転送パスを冗長化することができ、スイッチの故障により冗長化構成とデータ転送能力が大きく損なわれることがない。また、ストレージ装置１は、コントローラモジュール２間で直接にデータ転送をおこなう場合に転送元の転送部４が通信状態を確認可能であり、中継するコントローラモジュール２を介してデータ転送をおこなう場合に中継する転送部４が通信状態を確認可能である。したがって、ストレージ装置１は、データ転送パスを冗長化したモジュール間通信におけるデータ転送を軽負荷にて保証することができる。
【００２２】
［第２の実施形態］
次に、第２の実施形態のストレージ装置の構成例について図２を用いて説明する。図２は、第２の実施形態のストレージ装置の構成例を示す図である。
【００２３】
ストレージ装置１０は、ネットワーク８を介してホストコンピュータ９と通信可能に接続する。ネットワーク８は、１または複数のストレージ装置１０と、１または複数のホストコンピュータ９が接続するＳＡＮ（Storage Area Network）である。
【００２４】
ストレージ装置１０は、複数のコントローラモジュール２０（ＣＭ＃０，ＣＭ＃１，ＣＭ＃２，ＣＭ＃３）を備える。各コントローラモジュール２０は、それぞれディスク（ストレージデバイス）１１と接続し、ディスク１１のアクセス制御をおこなう。
【００２５】
なお、図示するストレージ装置１０は、コントローラモジュール２０を４台備えるが、データ転送の際に転送元となるコントローラモジュール２０、転送先となるコントローラモジュール２０、中継するコントローラモジュール２０の３台以上あればよい。たとえば、ストレージ装置１０は、コントローラモジュール２０を６台、あるいは８台を備えるようにしてもよい。
【００２６】
次に、第２の実施形態のコントローラモジュール間のデータフローについて図３を用いて説明する。図３は、第２の実施形態のコントローラモジュール間のデータフローの一例を示す図である。
【００２７】
各コントローラモジュール２０は、通信可能に相互接続する完全相互接続である。各コントローラモジュール２０間におけるコントローラモジュールＣＭ＃ｘからコントローラモジュールＣＭ＃ｙへの方向のデータフローをＤｘｙとする。たとえば、コントローラモジュールＣＭ＃０からコントローラモジュールＣＭ＃２への方向のデータフローは、Ｄ０２であり、その逆方向のデータフローは、Ｄ２０である。
【００２８】
すべてのコントローラモジュール２０は、データ転送の際の転送元となる際に、転送先のコントローラモジュール２０と直接接続する通信経路と、転送先までホップ数「１」で中継される通信経路とを有する。各通信経路は、双方向のデータフローがある。
【００２９】
たとえば、コントローラモジュールＣＭ＃０とコントローラモジュールＣＭ＃２を直接に接続するデータフローは、Ｄ０２，Ｄ２０がある。また、コントローラモジュールＣＭ＃０は、コントローラモジュールＣＭ＃２とホップ数「１」で接続する通信経路を２つ有する。コントローラモジュールＣＭ＃１が中継するデータフローは、コントローラモジュールＣＭ＃０，ＣＭ＃１の間がＤ０１，Ｄ１０であり、コントローラモジュールＣＭ＃１，ＣＭ＃２の間がＤ２１，Ｄ１２である。コントローラモジュールＣＭ＃３が中継するデータフローは、コントローラモジュールＣＭ＃０，ＣＭ＃３の間がＤ０３，Ｄ３０であり、コントローラモジュールＣＭ＃３，ＣＭ＃２の間がＤ２３，Ｄ３２である。
【００３０】
次に、第２の実施形態のコントローラモジュールの構成について図４を用いて説明する。図４は、第２の実施形態のコントローラモジュールの構成例を示す図である。
コントローラモジュール２０は、キャッシュメモリ２１と、プロセッサ２２と、ホストインタフェースコントローラ２３と、ディスクインタフェースコントローラ２４と、データ転送コントローラ３０を備える。
【００３１】
プロセッサ２２は、コントローラモジュール２０の統括的な制御やＲＡＩＤ処理を実行する制御部に相当する。プロセッサ２２は、図示しないバスを介してキャッシュメモリ２１とホストインタフェースコントローラ２３とディスクインタフェースコントローラ２４とデータ転送コントローラ３０と接続する。
【００３２】
プロセッサ２２は、たとえばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）などであってもよい。また、プロセッサ２２は、シングルプロセッサに限らず、マルチプロセッサであってもよい。またプロセッサ２２は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３３】
ホストインタフェースコントローラ２３は、ネットワーク８を介してホストコンピュータ９と接続する。ホストインタフェースコントローラ２３は、ホストコンピュータ９からアクセス要求（Ｒｅａｄ要求やＷｒｉｔｅ要求など）を受け付けてプロセッサ２２に通知する。また、ホストインタフェースコントローラ２３は、ホストコンピュータ９から受信したユーザデータをキャッシュメモリ２１に格納し、キャッシュメモリ２１が格納するユーザデータをホストコンピュータ９に送信する。
【００３４】
ディスクインタフェースコントローラ２４は、ディスク１１と接続する。ディスクインタフェースコントローラ２４は、プロセッサ２２からのアクセス要求（Ｒｅａｄ要求やＷｒｉｔｅ要求など）によりディスク１１へのアクセスをおこなう。ディスクインタフェースコントローラ２４は、ディスク１１から読み出したユーザデータをキャッシュメモリ２１に格納し、キャッシュメモリ２１が格納するユーザデータをディスク１１に書き込む。
【００３５】
キャッシュメモリ２１は、ＲＡＭ（Random Access Memory）や不揮発性メモリによって構成される。キャッシュメモリ２１は、ユーザデータを一時記憶してホストコンピュータ９からストレージ装置１０へのアクセス要求に対して高速応答を可能にする。また、キャッシュメモリ２１は、コントローラモジュール２０の主記憶装置として使用される。キャッシュメモリ２１には、プロセッサ２２に実行させるＯＳ（Operating System）のプログラムやファームウェア、アプリケーションプログラムの少なくとも一部が一時的に格納される。また、キャッシュメモリ２１には、プロセッサ２２による処理に必要な各種データが格納される。
【００３６】
不揮発性メモリは、ストレージ装置１０の電源遮断時において記憶内容を保持する。不揮発性メモリは、たとえば、ＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）やフラッシュメモリなどの半導体記憶装置や、ＨＤＤなどである。また、不揮発性メモリは、コントローラモジュール２０の補助記憶装置として使用される。不揮発性メモリには、ＯＳのプログラムやファームウェア、アプリケーションプログラム、および各種データが格納される。
【００３７】
データ転送コントローラ３０は、キャッシュメモリ２１に格納されているユーザデータのコピーを他のコントローラモジュール２０に転送する機能を有する。データ転送コントローラ３０は、プロセッサ２２の指示にもとづいてユーザデータのデータ転送をおこなう。
【００３８】
以上のようなハードウェア構成によって、第２の実施形態のコントローラモジュール２０の処理機能を実現することができる。なお、第１の実施形態に示したコントローラモジュール２も、コントローラモジュール２０と同様のハードウェアにより実現することができる。
【００３９】
次に、第２の実施形態のデータ転送コントローラの構成について図５を用いて説明する。図５は、第２の実施形態のデータ転送コントローラの構成例を示す図である。
データ転送コントローラ３０は、ＰＣＩｅ（ピーシーアイエクスプレス）インタフェース３１，３９と、パフォーマンスモニタ３８と、ＤＭＡ（Direct Memory Access）３２と、ディスクリプタ実行部３３と、転送先判定部３４を備える。さらに、データ転送コントローラ３０は、性能情報送信バッファ３５と、ルーティングテーブル３６と、性能情報格納バッファ３７を備える。
【００４０】
なお、ＰＣＩｅインタフェース３１，３９、パフォーマンスモニタ３８、ＤＭＡ３２、ディスクリプタ実行部３３、および転送先判定部３４は、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することができる。また、データ転送コントローラ３０、性能情報送信バッファ３５、ルーティングテーブル３６、および性能情報格納バッファ３７は、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することができる。
【００４１】
ＰＣＩｅインタフェース３１（ＰＣＩｅＩＮＦ＃ｐ）は、ＤＭＡ３２、ディスクリプタ実行部３３、およびルーティングテーブル３６と接続する。ＰＣＩｅインタフェース３１は、プロセッサ２２とデータ転送コントローラ３０をＰＣＩｅで通信可能に接続するデータ転送インタフェースである。
【００４２】
ＰＣＩｅインタフェース３９（ＰＣＩｅＩＮＦ＃０，ＰＣＩｅＩＮＦ＃１，ＰＣＩｅＩＮＦ＃２）は、性能情報送信バッファ３５、ルーティングテーブル３６、および性能情報格納バッファ３７と接続する。ＰＣＩｅインタフェース３９は、２つのコントローラモジュール２０をＰＣＩｅで通信可能に接続するデータ転送インタフェースである。
【００４３】
パフォーマンスモニタ３８（ＰＭ＃０，ＰＭ＃１，ＰＭ＃２）は、対応するＰＣＩｅインタフェース３９、性能情報送信バッファ３５、および性能情報格納バッファ３７と接続する。パフォーマンスモニタ３８は、対応するＰＣＩｅインタフェース３９を通じて他のコントローラモジュール２０に転送するデータの流量（データ流量）を観測する。たとえば、ＰＭ＃０は、ＰＣＩｅＩＮＦ＃０が他のコントローラモジュール２０に転送するデータ流量を観測する。パフォーマンスモニタ３８は、性能情報送信バッファ３５、および性能情報格納バッファ３７に観測したデータ流量を通知する。
【００４４】
性能情報送信バッファ３５は、ＰＣＩｅインタフェース３９、パフォーマンスモニタ３８、ルーティングテーブル３６、および性能情報格納バッファ３７と接続する。性能情報送信バッファ３５は、パフォーマンスモニタ３８が観測したデータ流量を含む性能情報を、ＰＣＩｅインタフェース３１を介して他のコントローラモジュール２０に送信する。
【００４５】
性能情報格納バッファ３７は、ＰＣＩｅインタフェース３９、パフォーマンスモニタ３８、ルーティングテーブル３６、性能情報送信バッファ３５、および転送先判定部３４と接続する。性能情報格納バッファ３７は、パフォーマンスモニタ３８の観測にもとづく性能情報と、他のコントローラモジュール２０から受信した性能情報を格納する。
【００４６】
ルーティングテーブル３６は、ＰＣＩｅインタフェース３１，３９、ＤＭＡ３２、ディスクリプタ実行部３３、性能情報送信バッファ３５、および性能情報格納バッファ３７と接続し、相互の接続をおこなう。
【００４７】
転送先判定部３４は、ディスクリプタ実行部３３、および性能情報格納バッファ３７と接続する。転送先判定部３４は、性能情報格納バッファ３７が格納する性能情報にもとづいてデータ転送時の転送先までの転送経路の判定をおこなう。
【００４８】
ディスクリプタ実行部３３は、ＰＣＩｅインタフェース３１、ＤＭＡ３２、転送先判定部３４、およびルーティングテーブル３６と接続する。ディスクリプタ実行部３３は、プロセッサ２２が生成してキャッシュメモリ２１に格納したディスクリプタを読み込み、ＤＭＡ起動指示を発行する。
【００４９】
ディスクリプタは、データ転送に関する制御情報（転送制御情報）である。ディスクリプタは、制御情報として転送元アドレス、転送先アドレス、データ転送量、転送結果通知先アドレスを含む。ディスクリプタ実行部３３は、転送先判定部３４が判定するコントローラモジュール２０に対してＤＭＡ起動指示を発行する。
【００５０】
ＤＭＡ３２は、ＰＣＩｅインタフェース３１、ディスクリプタ実行部３３、およびルーティングテーブル３６と接続する。ＤＭＡ３２は、ＤＭＡ起動指示にもとづいてプロセッサ２２を介さずにデータ転送をおこなう。ＤＭＡ３２は、複数あり、ＤＭＡ＃０、ＤＭＡ＃１、およびＤＭＡ＃２があり、それぞれがデータ転送を担う。
【００５１】
ＤＭＡ３２は、ディスクリプタを参照して指示されたアドレス範囲についてデータ転送をおこなう。転送元のコントローラモジュール２０のＤＭＡ３２は、キャッシュメモリ２１から転送先のコントローラモジュール２０へのデータ転送をおこなうことができる。また、データ転送を中継するコントローラモジュール２０のＤＭＡ３２は、転送元のコントローラモジュール２０から転送先のコントローラモジュール２０へのデータ転送をおこなうことができる。
【００５２】
次に、第２の実施形態の性能情報送信バッファが保持する性能情報について図６を用いて説明する。図６は、第２の実施形態の性能情報送信バッファが保持する性能情報を示す図である。
【００５３】
性能情報５０は、ＣＭ＃０の性能情報送信バッファ３５が保持する性能情報の一例である。性能情報５０は、ＣＭ＃０を送信元とする伝送路ごとの伝送路異常フラグの有無と、データ流量とを含む情報である。データ流量ＤＶｘｙは、ＣＭ＃ｘからＣＭ＃ｙを転送方向とする伝送路のデータ流量である。たとえば、データ流量ＤＶ０１はＣＭ＃０からＣＭ＃１を転送方向とする伝送路のデータ流量である。伝送路異常フラグは、たとえば、「０」が正常を表し、「０以外（たとえば１）」で異常を表す。
【００５４】
各伝送路のデータ流量と伝送路以上フラグは、対応するパフォーマンスモニタ３８から所定タイミング（たとえば、１秒ごと）で収集され、所定タイミング（たとえば、１秒ごと）で他のコントローラモジュール２０に向けて送信される。
【００５５】
次に、第２の実施形態の性能情報格納バッファが保持する性能情報について図７を用いて説明する。図７は、第２の実施形態の性能情報格納バッファが保持する性能情報を示す図である。
【００５６】
性能情報５２は、ＣＭ＃０の性能情報格納バッファ３７が保持する性能情報の一例である。性能情報５２は、ＣＭ＃０がパフォーマンスモニタ３８から収集した性能情報と、他のコントローラモジュール２０（ＣＭ３１，ＣＭ＃２，ＣＭ＃３）から受信した性能情報を含む情報である。
【００５７】
これにより、各コントローラモジュール２０は、すべての伝送経路のデータ流量と異常の有無を把握することができる。
次に、第２の実施形態のＷｒｉｔｅ要求受付処理とＲｅａｄ要求受付処理について説明する。Ｗｒｉｔｅ要求受付処理とＲｅａｄ要求受付処理は、それぞれホストコンピュータ９からＷｒｉｔｅ要求、Ｒｅａｄ要求を受け付けて、プロセッサ２２が実行する処理である。Ｗｒｉｔｅ要求は、ディスク１１へのユーザデータの書き込み要求であり、Ｒｅａｄ要求は、ディスク１１からのユーザデータの読み出し要求である。
【００５８】
まず、Ｗｒｉｔｅ要求受付処理について図８を用いて説明する。図８は、第２の実施形態のＷｒｉｔｅ要求受付処理のフローチャートを示す図である。
ホストコンピュータ９からストレージ装置１０へのＷｒｉｔｅ要求を、対応するコントローラモジュール２０のホストインタフェースコントローラ２３が受け付ける。Ｗｒｉｔｅ要求を受け付けたホストインタフェースコントローラ２３がＷｒｉｔｅ要求受付をプロセッサ２２に通知することで、プロセッサ２２は、Ｗｒｉｔｅ要求受付処理を実行する。
【００５９】
［ステップＳ１１］プロセッサ２２は、Ｗｒｉｔｅ要求のあったユーザデータをキャッシュメモリ２１に格納するようにホストインタフェースコントローラ２３に指示する。この指示を受けて、ホストインタフェースコントローラ２３は、ユーザデータをキャッシュメモリ２１に格納する。
【００６０】
［ステップＳ１２］プロセッサ２２は、ユーザデータ転送処理を実行する。ユーザデータ転送処理は、キャッシュメモリ２１上のユーザデータを保護するため、所要のコントローラモジュール２０にユーザデータをコピーする処理である。ユーザデータ転送処理の詳細は、図１０を用いて後で説明する。
【００６１】
［ステップＳ１３］プロセッサ２２は、キャッシュメモリ２１にユーザデータが格納されると、ホストインタフェースコントローラ２３を介してホストコンピュータ９に完了応答を通知する。
【００６２】
［ステップＳ１４］プロセッサ２２は、ディスクインタフェースコントローラ２４にディスク１１へのユーザデータの書き込みを指示し、Ｗｒｉｔｅ要求受付処理を終了する。この指示を受けて、ディスクインタフェースコントローラ２４は、完了応答と非同期にユーザデータをキャッシュメモリ２１から読み出してディスク１１に書き込む。
【００６３】
次に、Ｒｅａｄ要求受付処理について図９を用いて説明する。図９は、第２の実施形態のＲｅａｄ要求受付処理のフローチャートを示す図である。
ホストコンピュータ９からストレージ装置１０へのＲｅａｄ要求を、対応するコントローラモジュール２０のホストインタフェースコントローラ２３が受け付ける。Ｒｅａｄ要求を受け付けたホストインタフェースコントローラ２３がＲｅａｄ要求受付をプロセッサ２２に通知することで、プロセッサ２２は、Ｒｅａｄ要求受付処理を実行する。
【００６４】
［ステップＳ２１］プロセッサ２２は、Ｒｅａｄ要求のあったユーザデータがキャッシュメモリ２１に格納されているか否かを判定する。プロセッサ２２は、Ｒｅａｄ要求のあったユーザデータがキャッシュメモリ２１に格納されている場合にステップＳ２３にすすみ、ユーザデータがキャッシュメモリ２１に格納されていない場合にステップＳ２２にすすむ。
【００６５】
［ステップＳ２２］プロセッサ２２は、Ｒｅａｄ要求のあったユーザデータの読み出しとキャッシュメモリ２１への格納をディスクインタフェースコントローラ２４に指示する。この指示を受けて、ディスクインタフェースコントローラ２４は、ユーザデータをディスク１１から読み出してキャッシュメモリ２１に格納する。
【００６６】
［ステップＳ２３］プロセッサ２２は、Ｒｅａｄ要求のあったユーザデータをキャッシュメモリ２１から読み出してホストコンピュータ９に転送するようにホストインタフェースコントローラ２３に指示する。この指示を受けて、ホストインタフェースコントローラ２３は、ユーザデータをキャッシュメモリ２１から読み出してホストコンピュータ９に転送する。
【００６７】
［ステップＳ２４］プロセッサ２２は、ホストインタフェースコントローラ２３を介してホストコンピュータ９に完了応答を通知してＲｅａｄ要求受付処理を終了する。
次に、ユーザデータ転送処理について図１０を用いて説明する。図１０は、第２の実施形態のユーザデータ転送処理のフローチャートを示す図である。
【００６８】
ユーザデータ転送処理は、Ｒｅａｄ要求受付処理のステップＳ１３でプロセッサ２２が実行する処理である。
［ステップＳ３１］プロセッサ２２は、ディスクリプタを生成する。ここで、ディスクリプタを図１１を用いて説明する。図１１は、第２の実施形態のディスクリプタを示す図である。
【００６９】
ディスクリプタ５４は、データ転送元のアドレスと、データ転送先のアドレスと、データ転送量と、転送結果通知先のアドレスとを含むリスト状の情報である。データ転送元のアドレスは、データ転送元のコントローラモジュール２０のキャッシュメモリ２１のアドレスを、アドレス下位４ｂｙｔｅを示すＳＲＣ＿Ｌと、アドレス上位４ｂｙｔｅを示すＳＲＣ＿Ｕとで表す。データ転送先のアドレスは、データ転送先のコントローラモジュール２０のキャッシュメモリ２１のアドレスを、アドレス下位４ｂｙｔｅを示すＤＥＳＴ＿Ｌと、アドレス上位４ｂｙｔｅを示すＤＥＳＴ＿Ｕとで表す。データ転送量は、転送データの大きさをｂｙｔｅ数で表す。転送結果通知先のアドレスは、転送結果通知先となるコントローラモジュール２０のキャッシュメモリ２１のアドレスを、アドレス下位４ｂｙｔｅを示すＲＥＰ＿Ｌと、アドレス上位４ｂｙｔｅを示すＲＥＰ＿Ｕとで表す。転送結果通知先となるコントローラモジュール２０は、データ転送元のコントローラモジュール２０である。
【００７０】
［ステップＳ３２］プロセッサ２２は、生成したディスクリプタをキャッシュメモリ２１に保存する。
［ステップＳ３３］プロセッサ２２は、キャッシュメモリ２１に保存したディスクリプタを指定して、データ転送コントローラ３０に転送開始を指示する。
【００７１】
［ステップＳ３４］プロセッサ２２は、転送結果通知先となるキャッシュメモリ２１のアドレスに格納してある転送結果情報を参照する。プロセッサ２２は、転送結果情報を参照することでデータ転送が完了したか否かを把握することができる。
【００７２】
［ステップＳ３５］プロセッサ２２は、データ転送が完了していない場合にステップＳ３４にすすみデータ転送の完了を待つ。プロセッサ２２は、データ転送が完了している場合にユーザデータ転送処理を終了する。
【００７３】
ここで、データ流量テーブル作成処理について図１２を用いて説明する。図１２は、第２の実施形態のデータ流量テーブル作成処理のフローチャートを示す図である。データ流量テーブル作成処理は、性能情報格納バッファ３７が格納する性能情報から、転送元と転送先をホップ数「１」で中継する転送経路の性能情報をデータ流量テーブルとして作成する処理である。データ流量テーブル作成処理は、転送先判定部３４が所定タイミング（たとえば、１秒ごと）で実行する処理である。
【００７４】
［ステップＳ４１］転送先判定部３４は、性能情報格納バッファ３７から性能情報を取得する。
［ステップＳ４２］転送先判定部３４は、ＤＭＡ３２を起動するコントローラモジュール２０と、転送先となるコントローラモジュール２０の組み合わせを１つ選択する。転送先と転送元のコントローラモジュール２０を直接接続する通信経路では、ＤＭＡ３２を起動するコントローラモジュール２０は、転送元のコントローラモジュール２０となる。転送元と転送先を中継するコントローラモジュール２０を介した通信経路では、ＤＭＡ３２を起動するコントローラモジュール２０は、転送元と転送先を中継するコントローラモジュール２０となる。たとえば、ＣＭ＃０を転送元としＣＭ＃１を転送先として直接接続する通信経路では、ＣＭ＃０がＤＭＡ３２を起動するコントローラモジュール２０である。また、ＣＭ＃０を転送元としＣＭ＃１を転送先としてＣＭ＃２が中継する通信経路では、ＣＭ＃２がＤＭＡ３２を起動するコントローラモジュール２０である。
【００７５】
［ステップＳ４３］転送先判定部３４は、自らのコントローラモジュール２０（自ＣＭ）がＤＭＡ３２を起動するコントローラモジュール２０か否かを判定する。転送先判定部３４は、自ＣＭがＤＭＡ３２を起動するコントローラモジュール２０である場合にステップＳ４４にすすみ、ＤＭＡ３２を起動するコントローラモジュール２０でない場合にステップＳ４６にすすむ。
【００７６】
［ステップＳ４４］転送先判定部３４は、性能情報格納バッファ３７から取得した性能情報のうちから選択した通信経路に対応する伝送路異常フラグをデータ流量テーブルにセットする。
【００７７】
［ステップＳ４５］転送先判定部３４は、性能情報格納バッファ３７から取得した性能情報のうちから選択した通信経路に対応するデータ流量をデータ流量テーブルにセットする。
【００７８】
［ステップＳ４６］転送先判定部３４は、性能情報格納バッファ３７から取得した性能情報のうちから選択した通信経路に対応する２つの伝送路異常フラグにもとづいて通信経路の伝送路異常フラグをデータ流量テーブルにセットする。ここでは、転送先判定部３４は、選択した通信経路に対応する２つの伝送路異常フラグの論理和をデータ流量テーブルにセットする。
【００７９】
［ステップＳ４７］転送先判定部３４は、性能情報格納バッファ３７から取得した性能情報のうちから選択した通信経路に対応する２つのデータ流量にもとづいて通信経路のデータ流量をデータ流量テーブルにセットする。ここでは、転送先判定部３４は、選択した通信経路に対応する２つのデータ流量のうちの最大値をデータ流量テーブルにセットする。
【００８０】
［ステップＳ４８］転送先判定部３４は、ＤＭＡ３２を起動するコントローラモジュール２０と、転送先となるコントローラモジュール２０のすべての組み合わせを選択したか否かを判定する。転送先判定部３４は、ＤＭＡ３２を起動するコントローラモジュール２０と、転送先となるコントローラモジュール２０のすべての組み合わせを選択していない場合にステップＳ４２にすすみ、すべてを選択している場合にデータ流量テーブル作成処理を終了する。
【００８１】
ここで、データ流量テーブルについて図１３を用いて説明する。図１３は、第２の実施形態のデータ流量テーブルを示す図である。データ流量テーブル５６は、ＣＭ＃０の転送先判定部３４が生成し保持するデータ流量テーブルの一例である。データ流量テーブル５６は、ＣＭ＃０を転送元とし転送先まで直接接続する通信経路と、ＣＭ＃０を転送元とし中継ＣＭを介して転送先まで接続する通信経路とについて、通信経路ごとの伝送異常フラグとデータ流量とを表す情報である。
【００８２】
ＣＭ＃０を転送元とし転送先まで直接接続する通信経路は、ＣＭ＃０がＤＭＡ起動ＣＭとなる。ＣＭ＃０を転送元とし中継ＣＭを介して転送先まで接続する通信経路は、中継ＣＭがＤＭＡ起動ＣＭとなる。
【００８３】
ＣＭ＃０がＤＭＡ起動ＣＭとなる通信経路は、ＣＭ＃０からＣＭ＃１、ＣＭ＃０からＣＭ＃２、およびＣＭ＃０からＣＭ＃３の３つである。ＣＭ＃０がＤＭＡ起動ＣＭとなる通信経路の伝送路異常フラグは、性能情報格納バッファ３７から取得した性能情報の対応するデータフローＤ０１，Ｄ０２，Ｄ０３の伝送路異常フラグをコピーする。また、ＣＭ＃０がＤＭＡ起動ＣＭとなる通信経路のデータ流量は、性能情報格納バッファ３７から取得した性能情報の対応するデータフローＤ０１，Ｄ０２，Ｄ０３のデータ流量をコピーする。したがって、たとえば、ＤＭＡ起動ＣＭがＣＭ＃０であり、転送先ＣＭがＣＭ＃１は、Ｄ０１の伝送異常フラグと同一であり、データ流量Ｆ０１がデータ流量ＤＶ０１と同一である。
【００８４】
ＣＭ＃０がＤＭＡ起動ＣＭとならない通信経路は、ＣＭ＃０からＣＭ＃２を経てＣＭ＃１、ＣＭ＃３を経てＣＭ＃１、ＣＭ＃１を経てＣＭ＃２、ＣＭ＃３を経てＣＭ＃２、ＣＭ＃１を経てＣＭ＃３、およびＣＭ＃２を経てＣＭ＃３の６つである。ＣＭ＃０がＤＭＡ起動ＣＭとならない通信経路の伝送路異常フラグは、性能情報格納バッファ３７から取得した性能情報の対応する２つのデータフローの伝送路異常フラグの論理和である。たとえば、ＣＭ＃０からＣＭ＃２を経てＣＭ＃１の通信経路の場合、ＣＭ＃２がＤＭＡ起動ＣＭとなり、伝送路異常フラグは、ＯＲ（伝送路異常フラグ（Ｄ０２）、伝送路異常フラグ（Ｄ２１））となる。また、ＣＭ＃０がＤＭＡ起動ＣＭとならない通信経路のデータ流量は、性能情報格納バッファ３７から取得した性能情報の対応する２つのデータ流量の最大値とする。たとえば、ＣＭ＃０からＣＭ＃２を経てＣＭ＃１の通信経路の場合、ＣＭ＃２がＤＭＡ起動ＣＭとなり、データ流量Ｆ２１は、ＭＡＸ（ＤＶ０２、ＤＶ２１）である。
【００８５】
これにより、各コントローラモジュール２０は、通信経路ごとの最大データ流量と異常の有無を把握することができる。
次に、転送先判定処理について図１４を用いて説明する。図１４は、第２の実施形態の転送先判定処理のフローチャートを示す図である。
【００８６】
転送先判定処理は、データ流量テーブルからデータ転送をおこなう通信経路を判定する処理である。転送先判定処理は、転送先判定部３４が所定タイミング（たとえば、１秒ごと）で実行する処理である。
【００８７】
［ステップＳ５１］転送先判定部３４は、ディスクリプタ実行部３３からデータ転送の転送先となるコントローラモジュール２０を取得する。
［ステップＳ５２］転送先判定部３４は、特定したコントローラモジュール２０を転送先とする通信経路のうちから、データ流量テーブルの伝送路異常フラグを参照して正常な通信経路（伝送路）を抽出する。
【００８８】
［ステップＳ５３］転送先判定部３４は、抽出した通信経路のうちから、データ流量テーブルのデータ流量を参照してデータ流量（転送量）が最小の通信経路（伝送路）を抽出する。
【００８９】
［ステップＳ５４］転送先判定部３４は、ディスクリプタ実行部３３に通信経路（伝送路）を通知して転送先判定処理を終了する。
これにより、転送先判定部３４は、転送先判定タイミングにおける好適なデータ転送が可能な通信経路を決定することができる。
【００９０】
次に、転送指示処理について図１５を用いて説明する。図１５は、第２の実施形態の転送指示処理のフローチャートを示す図である。
転送指示処理は、データ転送をおこなうＤＭＡにデータ転送を指示する処理である。転送指示処理は、ディスクリプタを設定したプロセッサ２２がディスクリプタ実行部３３にデータ転送の開始指示をおこなうことで、ディスクリプタ実行部３３により実行される。
【００９１】
［ステップＳ６１］ディスクリプタ実行部３３は、プロセッサ２２に指定されたディスクリプタをキャッシュメモリ２１から取得する。
［ステップＳ６２］ディスクリプタ実行部３３は、転送先判定部３４から通信経路（伝送路）を取得する。
【００９２】
［ステップＳ６３］ディスクリプタ実行部３３は、通信経路（伝送路）が転送元から転送先までの直接転送か否かを判定する。ディスクリプタ実行部３３は、通信経路（伝送路）が直接転送である場合にステップＳ６５にすすみ、直接転送でない場合に、すなわち中継ＣＭを介して転送先まで接続する場合にステップＳ６４にすすむ。
【００９３】
［ステップＳ６４］ディスクリプタ実行部３３は、中継ＣＭのＤＭＡ３２にディスクリプタを指定してデータ転送を指示し、転送指示処理を終了する。ディスクリプタ実行部３３は、は、ルーティングテーブル３６からＰＣＩｅインタフェース３９を通して中継ＣＭのＤＭＡ３２へのデータ転送の指示をおこなう。中継ＣＭのＤＭＡ３２は、中継ＣＭのＰＣＩｅインタフェース３９から中継ＣＭのルーティングテーブル３６を通してデータ転送の指示を受け付ける。
【００９４】
たとえば、ＣＭ＃０の転送先判定部３４が、Ｄ０１からＤ１２をＣＭ＃１が中継する通信経路を判定した場合、ディスクリプタ実行部３３は、ルーティングテーブル３６からＰＣＩｅＩＮＦ＃０を通して、ＣＭ＃１のＤＭＡに転送指示を発行する。また、ＣＭ＃０の転送先判定部３４が、Ｄ０３からＤ３２をＣＭ＃３が中継する通信経路を判定した場合、ディスクリプタ実行部３３は、ルーティングテーブル３６からＰＣＩｅＩＮＦ＃２を通して、ＣＭ＃３のＤＭＡに転送指示を発行する。
【００９５】
［ステップＳ６５］ディスクリプタ実行部３３は、自ＣＭのＤＭＡ３２にディスクリプタを指定してデータ転送を指示し、転送指示処理を終了する。ディスクリプタ実行部３３は、ＤＭＡ３２へのデータ転送の指示をおこなう。
【００９６】
次に、転送指示受付処理について図１６を用いて説明する。図１６は、第２の実施形態の転送指示受付処理のフローチャートを示す図である。
転送指示受付処理は、データ転送の指示を受け付けたＤＭＡがデータ転送をおこなう処理である。転送指示受付処理は、転送元のコントローラモジュール２０のディスクリプタ実行部３３からデータ転送の指示を受け付けたＤＭＡ３２により実行される。
【００９７】
［ステップＳ７１］ＤＭＡ３２は、転送元のコントローラモジュール２０のキャッシュメモリ２１からディスクリプタを取得する。データ転送の指示を受け付けたＤＭＡ３２が転送元のコントローラモジュール２０にない場合は、ＰＣＩｅインタフェース３９を通して転送元のコントローラモジュール２０のキャッシュメモリ２１からディスクリプタを取得する。
【００９８】
［ステップＳ７２］ＤＭＡ３２は、ディスクリプタに指定されたデータ転送元のアドレスから指定されたデータ量のデータを読み出す。データ転送の指示を受け付けたＤＭＡ３２が転送元のコントローラモジュール２０にない場合は、ＰＣＩｅインタフェース３９を通して転送元のコントローラモジュール２０のキャッシュメモリ２１からデータを取得する。
【００９９】
［ステップＳ７３］ＤＭＡ３２は、ディスクリプタに指定されたデータ転送先のアドレスに読み出したデータを書き込む。データ転送の指示を受け付けたＤＭＡ３２が転送元のコントローラモジュール２０にない場合は、ＰＣＩｅインタフェース３９を通して転送先のコントローラモジュール２０のキャッシュメモリ２１にデータを書き込む。
【０１００】
［ステップＳ７４］ＤＭＡ３２は、ディスクリプタに指定されたデータ転送が完了したか否かを判定する。ＤＭＡ３２は、データ転送が完了した場合にステップＳ７５にすすみ、データ転送が完了していない場合にステップＳ７６にすすむ。
【０１０１】
［ステップＳ７５］ＤＭＡ３２は、ディスクリプタに指定された転送結果通知先アドレスにデータ転送完了を書き込み、転送指示受付処理を終了する。データ転送の指示を受け付けたＤＭＡ３２が転送元のコントローラモジュール２０にない場合は、ＰＣＩｅインタフェース３９を通して転送先のコントローラモジュール２０のキャッシュメモリ２１に転送結果を書き込む。
【０１０２】
［ステップＳ７６］ＤＭＡ３２は、データ転送中の通信経路（伝送路）を監視し、伝送路が正常か否かを判定する。ＤＭＡ３２は、伝送路が正常である場合にステップＳ７３にすすみ、伝送路が正常でない場合にステップＳ７７にすすむ。
【０１０３】
データ転送中の通信経路の監視は、性能情報格納バッファ３７が保存する性能情報の伝送路異常フラグを参照することによりおこなうことができる。また、データ転送中の通信経路の監視は、通信経路にあるＰＣＩｅインタフェース３９の状態を監視することによってもできる。
【０１０４】
通信経路の監視は、たとえば、転送元ＣＭ＃０から転送先ＣＭ＃２への直接転送の場合、転送元ＣＭ＃０のＤＭＡ３２がデータフローＤ０２を監視する。また、通信経路の監視は、転送元ＣＭ＃０から中継ＣＭ＃１を介して転送先ＣＭ＃２へ転送する場合、中継ＣＭ＃１のＤＭＡ３２がデータフローＤ０１，Ｄ１２を監視する。
【０１０５】
［ステップＳ７７］ＤＭＡ３２は、データ転送を中止する。
［ステップＳ７８］ＤＭＡ３２は、ディスクリプタに指定された転送結果通知先アドレスにデータ転送失敗を書き込み、転送指示受付処理を終了する。データ転送の指示を受け付けたＤＭＡ３２が転送元のコントローラモジュール２０にない場合は、ＰＣＩｅインタフェース３９を通して転送先のコントローラモジュール２０のキャッシュメモリ２１に転送結果を書き込む。
【０１０６】
このように、ストレージ装置１０は、スイッチなしにデータ転送パスを冗長化することができ、スイッチの故障により冗長化構成とデータ転送能力が大きく損なわれることがない。たとえば、スイッチを設ける場合、スイッチの故障によりデータ転送できなくなる伝送路の範囲が大きくなるが、コントローラモジュール２０間をメッシュ接続する場合、スイッチの故障によりデータ転送できなくなる伝送路の範囲は、故障個所に限られる。
【０１０７】
また、ストレージ装置１０は、コントローラモジュール２０間で直接にデータ転送をおこなう場合に転送元のコントローラモジュール２０が通信状態を確認可能である。中継するコントローラモジュール２０を介してデータ転送をおこなう場合には、ストレージ装置１０は、中継するコントローラモジュール２０のＤＭＡ３２が、転送元ＣＭと中継ＣＭ間の通信状態および中継ＣＭと転送先ＣＭ間の通信状態を確認可能である。したがって、ストレージ装置１０は、データの転送保証を容易におこなうことができる。
【０１０８】
また、ストレージ装置１０は、ディスクリプタにより転送結果通知先アドレスを転送元のコントローラモジュール２０のキャッシュメモリ２１上とすることで、転送元のコントローラモジュール２０のプロセッサ２２が転送結果を容易に把握することができる。
【０１０９】
また、ストレージ装置１０は、コントローラモジュール２０間をメッシュ接続することにより、通信経路ごとのデータ転送量を分散可能であり、１つの通信経路のデータ転送量を抑制することができる。ストレージ装置１０は、データ転送量の抑制により通信にかかるコストを低減可能である。
【０１１０】
したがって、ストレージ装置１０は、データ転送パスを冗長化したモジュール間通信におけるデータ転送を軽負荷にて保証することができる。
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、ストレージ装置１、ストレージ装置１０（コントローラモジュール２０）が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１１１】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１２】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１１３】
また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤなどの電子回路で実現することもできる。
【符号の説明】
【０１１４】
１，１０  ストレージ装置
２，２ａ，２ｂ，２ｃ，２０  コントローラモジュール
３，３ａ，３ｂ，３ｃ，２１  キャッシュメモリ
４，４ａ，４ｂ，４ｃ  転送部
５，５ａ，５ｂ，５ｃ  指示部
６，６ａ，６ｂ，６ｃ  通信路
７，７ａ，７ｂ，７ｃ  ストレージデバイス
８  ネットワーク
９  ホストコンピュータ
１１  ディスク
２２  プロセッサ
２３  ホストインタフェースコントローラ
２４  ディスクインタフェースコントローラ
３０  データ転送コントローラ
３１，３９  ＰＣＩｅインタフェース
３２  ＤＭＡ
３３  ディスクリプタ実行部
３４  転送先判定部
３５  性能情報送信バッファ
３６  ルーティングテーブル
３７  性能情報格納バッファ
３８  パフォーマンスモニタ
５０，５２  性能情報
５４  ディスクリプタ
５６  データ流量テーブル
【図１】
2014106940.tif 000003
【図２】
2014106940.tif 000004
【図３】
2014106940.tif 000005
【図４】
2014106940.tif 000006
【図５】
2014106940.tif 000007
【図６】
2014106940.tif 000008
【図７】
2014106940.tif 000009
【図８】
2014106940.tif 000010
【図９】
2014106940.tif 000011
【図１０】
2014106940.tif 000012
【図１１】
2014106940.tif 000013
【図１２】
2014106940.tif 000014
【図１３】
2014106940.tif 000015
【図１４】
2014106940.tif 000016
【図１５】
2014106940.tif 000017
【図１６】
2014106940.tif 000018