(57)【要約】【課題】  ホストから見たレスポンス性能を向上させ得るストレージシステム及びその制御方法を提案する。【解決手段】  ストレージコントローラのプロセッサが、フロントエンド部から転送されてきたコマンドに応じたパラメータを第１の記憶領域内の第１の領域に格納すると共に、当該第１の領域と対応付けられた第２の記憶領域内の第２の領域のアドレスをフロントエンド部に通知し、フロントエンド部が、通知されたアドレスをあて先とするデータパケットを生成し、生成したデータパケットを第２の記憶領域の当該アドレスに格納し、インタフェース部が、第２の記憶領域に格納されたデータパケットのヘッダに格納されたあて先のアドレスに基づいて、当該アドレスの第２の領域と対応付けられた第１の記憶領域内の第１の領域に格納されたパラメータを読み出して、コマンドに応じたシステム機能の処理を実行するようにした。【選択図】        図８
2019204463.tif 000002
【特許請求の範囲】
【請求項１】
双方向通信可能に接続された複数のストレージコントローラを有するストレージシステムにおいて、
各前記ストレージコントローラは、
ホストとの通信時におけるプロトコル制御を行うフロントエンド部と、
システム内の他の前記ストレージコントローラとの通信時におけるインタフェースとして機能するインタフェース部と、
前記ホストからのコマンドを処理するプロセッサと、
前記インタフェース部の内部又は外部にそれぞれ設けられた第１及び第２の記憶領域と
を備え、
前記第１の記憶領域は、複数の第１の領域に区分されて管理されると共に、前記第２の記憶領域は、各前記第１の領域にそれぞれ対応させて複数の第２の領域に区分されて管理され、
前記フロントエンド部は、
前記ホストからのコマンドを対応する前記ストレージコントローラに転送し、
前記プロセッサは、
前記フロントエンド部から自ストレージコントローラに転送されてきた前記コマンドに応じたシステム機能を実現するために必要なパラメータを前記第１の記憶領域内の前記第１の領域に格納すると共に、前記第２の記憶領域内の前記第２の領域のうち、当該第１の領域と対応付けられた前記第２の領域のアドレスを前記フロントエンド部に通知し、
前記フロントエンド部は、
通知された前記アドレスがあて先としてヘッダに格納されたデータパケットを生成し、生成した前記データパケットを前記第２の記憶領域の当該アドレスに格納し、
前記インタフェース部は、
前記第２の記憶領域に格納された前記データパケットの前記ヘッダに格納されたあて先の前記アドレスに基づいて、当該アドレスの前記第２の領域と対応付けられた前記第１の記憶領域内の前記第１の領域に格納された前記パラメータを読み出し、読み出した前記パラメータに基づいて、前記コマンドに応じた前記システム機能の処理を実行する
ことを特徴とするストレージシステム。
【請求項２】
前記コマンドは、ライトコマンドであり、
前記データパケットにはライトデータが格納され、
前記インタフェース部は、
前記第１の記憶領域から読み出した前記パラメータに基づいて、前記第２の記憶領域に格納された前記ライトデータを、前記パラメータにおいて指定されたライト先のアドレスに格納する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記ストレージコントローラには、複数の前記プロセッサが設けられ、
前記第１の記憶領域は、各前記プロセッサにそれぞれ対応させて複数の前記第１の領域に区分され、
前記プロセッサは、
前記第１の記憶領域における自己に割り当てられた前記第１の領域に前記パラメータを格納する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記第１の記憶領域の前記第１の領域に格納された前記パラメータに従って実行された前記システム機能の完了が、当該パラメータを当該第１の領域に格納した前記プロセッサに通知され、
前記プロセッサは、当該通知を待って前記第１の記憶領域の当該第１の領域を開放する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記インタフェース部は、
前記第２の記憶領域に格納された前記データパケットの前記ヘッダにおける前記あて先以外の情報に基づいて、当該情報に応じた処理を実行する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
双方向通信可能に接続された複数のストレージコントローラを有するストレージシステムの制御方法において、
各前記ストレージコントローラは、
ホストとの通信時におけるプロトコル制御を行うフロントエンド部と、
システム内の他の前記ストレージコントローラとの通信時におけるインタフェースとして機能するインタフェース部と、
前記ホストからのコマンドを処理するプロセッサと、
前記インタフェース部の内部又は外部にそれぞれ設けられた第１及び第２の記憶領域と
を有し、
前記第１の記憶領域は、複数の第１の領域に区分されて管理されると共に、前記第２の記憶領域は、各前記第１の領域にそれぞれ対応させて複数の第２の領域に区分されて管理され、
前記フロントエンド部が、前記ホストからのコマンドを対応する前記ストレージコントローラに転送する第１のステップと、
前記プロセッサが、前記フロントエンド部から自ストレージコントローラに転送されてきた前記コマンドに応じたシステム機能を実現するために必要なパラメータを前記第１の記憶領域内の前記第１の領域に格納すると共に、前記第２の記憶領域内の前記第２の領域のうち、当該第１の領域と対応付けられた前記第２の領域のアドレスを前記フロントエンド部に通知する第２のステップと、
前記フロントエンド部が、通知された前記アドレスがあて先としてヘッダに格納されたデータパケットを生成し、生成した前記データパケットを前記第２の記憶領域の当該アドレスに格納する第３のステップと、
前記インタフェース部が、前記第２の記憶領域に格納された前記データパケットの前記ヘッダに格納されたあて先の前記アドレスに基づいて、当該アドレスの前記第２の領域と対応付けられた前記第１の記憶領域内の前記第１の領域に格納された前記パラメータを読み出し、読み出した前記パラメータに基づいて、前記コマンドに応じた前記システム機能の処理を実行する第４のステップと
を備えることを特徴とするストレージシステムの制御方法。
【請求項７】
前記コマンドは、ライトコマンドであり、
前記第３のステップにおいて、前記フロントエンド部は、
前記データパケットを前記第２の記憶領域に格納し、
前記第４のステップにおいて、前記インタフェース部は、
前記第１の記憶領域から読み出した前記パラメータに基づいて、前記第２の記憶領域に格納された前記ライトデータを、前記パラメータにおいて指定されたライト先のアドレスに格納する
ことを特徴とする請求項６に記載のストレージシステムの制御方法。
【請求項８】
前記ストレージコントローラには、複数の前記プロセッサが設けられ、
前記第１の記憶領域は、各前記プロセッサにそれぞれ対応させて複数の前記第１の領域に区分され、
前記第２のステップにおいて、前記プロセッサは、
前記第１の記憶領域における自己に割り当てられた前記第１の領域に前記パラメータを格納する
ことを特徴とする請求項６に記載のストレージシステムの制御方法。
【請求項９】
前記第１の記憶領域の前記第１の領域に格納された前記パラメータに従って実行された前記システム機能の完了が、当該パラメータを当該第１の領域に格納した前記プロセッサに通知され、
前記プロセッサは、当該通知を待って前記第１の記憶領域の当該第１の領域を開放する
ことを特徴とする請求項６に記載のストレージシステムの制御方法。
【請求項１０】
前記第４のステップにおいて、前記インタフェース部は、
前記第２の記憶領域に格納された前記データパケットの前記ヘッダにおける前記あて先以外の情報に基づいて、当該情報に応じた処理を実行する
ことを特徴とする請求項６に記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びその制御方法に関し、複数のストレージコントローラを備えるストレージシステムに適用して好適なものである。
【背景技術】
【０００２】
従来、複数のストレージ装置により１つのクラスタを構成し、上位装置（以下、これをホストと呼ぶ）から与えられたデータやコマンドをクラスタ内のストレージ装置間で対応するストレージ装置に転送して処理することにより、ホストに対してクラスタを１つの大きなストレージ装置に見せる技術が広く用いられている（特許文献１参照）。
【０００３】
また、かかるクラスタにおいて、ホストからのライトデータを自動的に２重化することも広く行われている。例えば、特許文献１には、このようなストレージシステムにおいて、第１のストレージ装置が受領したデータを第２のストレージ装置を経由して第３のストレージ装置に転送する際に第２のストレージ装置にもデータを残し、第２及び第３のストレージ装置においてデータを速やかに冗長記憶できるようにする技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１７／１４９６７４号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところが、かかる特許文献１に開示されたストレージシステムでは、ホストから与えられたライト対象のユーザデータ（以下、これをライトデータと呼ぶ）を第１のストレージ装置内のメモリに一旦格納し、これを第２のストレージ装置が読み出す構成となっているために第１のストレージ装置から第２のストレージ装置へのデータ転送を迅速に行い難く、この結果としてホストから見たストレージシステム全体のレスポンス性能を向上させ難い問題があった。
【０００６】
本発明は以上の点を考慮してなされたもので、ホストから見たレスポンス性能を向上させ得るストレージシステム及びその制御方法を提案しようとするものである。
【課題を解決するための手段】
【０００７】
かかる課題を解決するため本発明においては、双方向通信可能に接続された複数のストレージコントローラを有するストレージシステムにおいて、各前記ストレージコントローラに、ホストとの通信時におけるプロトコル制御を行うフロントエンド部と、システム内の他の前記ストレージコントローラとの通信時におけるインタフェースとして機能するインタフェース部と、前記ホストからのコマンドを処理するプロセッサと、前記インタフェース部の内部又は外部にそれぞれ設けられた第１及び第２の記憶領域とを設け、前記第１の記憶領域は、複数の第１の領域に区分されて管理されると共に、前記第２の記憶領域は、各前記第１の領域にそれぞれ対応させて複数の第２の領域に区分されて管理され、前記フロントエンド部は、前記ホストからのコマンドを対応する前記ストレージコントローラに転送し、前記プロセッサは、前記フロントエンド部から自ストレージコントローラに転送されてきた前記コマンドに応じたシステム機能を実現するために必要なパラメータを前記第１の記憶領域内の前記第１の領域に格納すると共に、前記第２の記憶領域内の前記第２の領域のうち、当該第１の領域と対応付けられた前記第２の領域のアドレスを前記フロントエンド部に通知し、前記フロントエンド部は、通知された前記アドレスがあて先としてヘッダに格納されたデータパケットを生成し、生成した前記データパケットを前記第２の記憶領域の当該アドレスに格納し、前記インタフェース部は、前記第２の記憶領域に格納された前記データパケットの前記ヘッダに格納されたあて先の前記アドレスに基づいて、当該アドレスの前記第２の領域と対応付けられた前記第１の記憶領域内の前記第１の領域に格納された前記パラメータを読み出し、読み出した前記パラメータに基づいて、前記コマンドに応じた前記システム機能の処理を実行するようにした。
【０００８】
双方向通信可能に接続された複数のストレージコントローラを有するストレージシステムの制御方法において、各前記ストレージコントローラは、ホストとの通信時におけるプロトコル制御を行うフロントエンド部と、システム内の他の前記ストレージコントローラとの通信時におけるインタフェースとして機能するインタフェース部と、前記ホストからのコマンドを処理するプロセッサと、前記インタフェース部の内部又は外部にそれぞれ設けられた第１及び第２の記憶領域とを有し、前記第１の記憶領域は、複数の第１の領域に区分されて管理されると共に、前記第２の記憶領域は、各前記第１の領域にそれぞれ対応させて複数の第２の領域に区分されて管理され、前記フロントエンド部が、前記ホストからのコマンドを対応する前記ストレージコントローラに転送する第１のステップと、前記プロセッサが、前記フロントエンド部から自ストレージコントローラに転送されてきた前記コマンドに応じたシステム機能を実現するために必要なパラメータを前記第１の記憶領域内の前記第１の領域に格納すると共に、前記第２の記憶領域内の前記第２の領域のうち、当該第１の領域と対応付けられた前記第２の領域のアドレスを前記フロントエンド部に通知する第２のステップと、前記フロントエンド部が、通知された前記アドレスがあて先としてヘッダに格納されたデータパケットを生成し、生成した前記データパケットを前記第２の記憶領域の当該アドレスに格納する第３のステップと、前記インタフェース部が、前記第２の記憶領域に格納された前記データパケットの前記ヘッダに格納されたあて先の前記アドレスに基づいて、当該アドレスの前記第２の領域と対応付けられた前記第１の記憶領域内の前記第１の領域に格納された前記パラメータを読み出し、読み出した前記パラメータに基づいて、前記コマンドに応じた前記システム機能の処理を実行する第４のステップとを設けるようにした。
【０００９】
本発明のストレージシステム及びストレージシステムの制御方法によれば、中間バッファを介すことなく、必要な情報がホストからのコマンドを受領したストレージコントローラからそのコマンドを実行すべきストレージコントローラに転送される。
【発明の効果】
【００１０】
本発明によれば、ホストから見たレスポンス性能を向上させ得るストレージシステム及びその制御方法を実現できる。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態によるストレージシステムの全体構成を示すブロック図である。
【図２】ストレージコントローラの詳細構成を示すブロック図である。
【図３】ＬＤＥＶ−ＭＰ対応テーブルの構成例を示す図表である。
【図４】オーナ／ペア対応テーブルの構成例を示す図表である。
【図５】従来のストレージシステムにおけるライト処理の流れの説明に供するシーケンス図である。
【図６Ａ】従来のストレージシステムにおけるライト処理の流れの説明に供するブロック図である。
【図６Ｂ】従来のストレージシステムにおけるライト処理の流れの説明に供するブロック図である。
【図７】転送指示の構成例を示す概念図である。
【図８】本実施の形態のストレージシステムにおけるライト処理の流れの説明に供するシーケンス図である。
【図９Ａ】本実施の形態のストレージシステムにおけるライト処理の流れの説明に供するブロック図である。
【図９Ｂ】本実施の形態のストレージシステムにおけるライト処理の流れの説明に供するブロック図である。
【図１０】（Ａ）−（Ｃ）は、スイッチインタフェースパラメータの説明に供する図表であり、（Ｄ）は、２重ライトに関するスイッチインタフェースパラメータの構成例を示す図表である。
【図１１】スイッチインタフェースの詳細構成を示すブロック図である。
【図１２】パラメータ格納レジスタのパラメータ格納領域と、データバッファＲＡＭのデータ格納領域との対応関係の説明に供する概念図である。
【図１３】（Ａ）及び（Ｂ）は、２重ライト時におけるより具体的な処理の流れの説明に供するシーケンス図及びブロック図である。
【図１４】（Ａ）及び（Ｂ）は、２重ライト時におけるより具体的な処理の流れの説明に供するシーケンス図及びブロック図である。
【図１５】（Ａ）及び（Ｂ）は、２重ライト時におけるより具体的な処理の流れの説明に供するシーケンス図及びブロック図である。
【図１６】（Ａ）及び（Ｂ）は、２重ライト時におけるより具体的な処理の流れの説明に供するシーケンス図及びブロック図である。
【図１７】２重ライト処理の処理手順を示すフローチャートである。
【図１８】リード時における処理の流れの説明に供するシーケンス図である。
【発明を実施するための形態】
【００１２】
以下図面について、本発明の一実施の形態を詳述する。
【００１３】
（１）本実施の形態によるストレージシステムの構成
図１において、１は全体として本実施の形態によるストレージシステムを示す。このストレージシステム１は、例えば、ＰＣＩｅ（Peripheral Component Interconnect express）スイッチ２を介して双方向通信可能に接続された複数のストレージコントローラ３Ａ〜３Ｄを備えて構成される。図１では、４台のストレージコントローラ３Ａ〜３Ｄによりクラスタ（ストレージシステム１）が構成されている例を示しているが、クラスタ（ストレージシステム１）を構成するストレージコントローラの台数は４に限らない。以下においては、ストレージコントローラ３Ａ〜３Ｄを区別しない場合、ストレージコントローラ３と呼ぶものとする。
【００１４】
各ストレージコントローラ３は、それぞれ通信ネットワーク４Ａ〜４Ｄを介してホスト５Ａ〜５Ｄと双方向通信可能に接続される。なお、通信ネットワーク４Ａ〜４Ｄの少なくとも一部は共通してもよく、通信ネットワーク４Ａ〜４Ｄの全てが同一通信ネットワークであってもよい。同様に、ホスト５Ａ〜５Ｄの少なくとも一部は共通してもよく、ホスト５Ａ〜５Ｄの全てが同一のホストであってもよい。以下においては、通信ネットワーク４Ａ〜４Ｄを特に区別しない場合には、これらをまとめて通信ネットワーク４と呼び、ホスト５Ａ〜５Ｄを特に区別しない場合には、これらをまとめてホスト５と呼ぶものとする。
【００１５】
ホスト５は、ユーザ操作又は実装されたアプリケーションソフトウェアに基づいて、通信ネットワーク４を介してストレージコントローラ３にリードコマンドやライトコマンドを送信するコンピュータ装置であり、メインフレーム又はオープン系サーバなどから構成される。ホスト５がメインフレームの場合、ホスト５及びストレージコントローラ３間の通信は、例えば、ＦＩＣＯＮ（Fibre Connection：登録商標）、ＥＳＣＯＮ（Enterprise System Connection：登録商標）、ＡＣＯＮＡＲＣ（Advanced Connection Architecture：登録商標）、ＦＩＢＡＲＣ（Fibre Connection Architecture：登録商標）等の通信プロトコルに従って行われる。またホスト５がオープン系サーバの場合、ホスト５及びストレージコントローラ３間の通信は、例えば、ＦＣ（Fibre Channel）、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）、ｉＳＣＳＩ（Internet Small Computer System Interface）のような通信プロトコルに従って行われる。
【００１６】
各ストレージコントローラ３Ａ〜３Ｄには、それぞれ１又は複数の記憶デバイス６から構成される記憶装置７Ａ〜７Ｄが接続される。以下においては、記憶装置７Ａ〜７Ｄを特に区別しない場合には、これらをまとめて記憶装置７と呼ぶ。なお図１では、個々のストレージコントローラ３Ａ〜３Ｄに対してそれぞれ個別の記憶装置７Ａ〜７Ｄが接続されている場合について例示しているが、一部又は全部のストレージコントローラ３Ａ〜３Ｄが同一の記憶装置７Ａ〜７Ｄに接続されている構成であってもよい。１つのストレージコントローラ３と、１つの記憶装置７とによって１つのストレージ装置が構築される。
【００１７】
記憶デバイス６は、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス又は光磁気ディスクデバイスなどから構成される。記憶デバイス６としてハードディスクデバイスを用いる場合、ＦＣ（Fibre Channel）ディスク、ＳＣＳＩ（Small Computer System Interface）ディスク、ＳＡＴＡディスク、ＡＴＡ（AT Attachment）ディスク、ＳＡＳ（Serial Attached SCSI）ディスク等を用いることができる。また、例えば、フラッシュメモリ（SSD）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、相変化メモリ（Phase-Change Memory）、ＲｅＲＡＭ（Resistive random-access memory）、ＦｅＲＡＭ（Ferroelectric Random Access Memory）等の種々の記憶デバイス６を用いることもできる。さらに、例えば、種類の異なる記憶デバイスを記憶装置７内に混在させる構成でもよい。
【００１８】
１又は複数の記憶デバイス６が提供する記憶領域がプールとして管理され、プール上に１又は複数の論理的なボリューム（以下、これを論理ボリュームと呼ぶ）が定義されて、当該論理ボリュームがデータを読み書きするための記憶領域としてホスト５に提供される。なお論理ボリュームは、例えば図２に示すように、図中ではＬＤＥＶ（Logical DEVice）と表示する。論理ボリューム内の記憶領域は、論理ブロックと呼ばれる所定大きさの小領域に区分されて管理され、これら論理ブロックにＬＢＡ（Logical Block Address）と呼ばれる固有のアドレスがそれぞれ付与される。そしてホストは、論理ボリュームにデータをリード／ライトする場合、その論理ボリュームの識別子（ＬＵＮ：Logical Unit Number）と、その論理ボリューム内のデータを読み書きする領域の最初の論理ブロックのＬＢＡと、リード／ライトすべきデータのデータ長とを指定したリードコマンドやライトコマンドをストレージコントローラ３に送信する。
【００１９】
ストレージコントローラ３は、それぞれ１又は複数のＣＰＵ２０、メモリ２１、フロントエンド２２、バックエンド２３及びスイッチインタフェース２４を備えて構成される。
【００２０】
ＣＰＵ２０は、ストレージコントローラ３全体の動作制御を司るプロセッサである。またメモリ２１は、例えば、ＤＩＭＭ（Dual Inline Memory Module）などの半導体メモリ若しくはハードディスク装置又はこれら双方から構成され、各種プログラムやデータを保持するために利用される。
【００２１】
フロントエンド２２は、通信ネットワーク４を介したホスト５との通信時におけるプロトコル変換を行うインタフェース装置である。フロントエンド２２は、ＣＰＵ２０の制御に基づいて、ホスト５との間でコマンドやデータを送受信する。
【００２２】
バックエンド２３は、記憶装置７にデータを入出力するためのインタフェース装置である。ＣＰＵ２０は、ホスト５からの要求に応じて、バックエンド２３を介して、指定された論理ボリュームの記憶領域を提供する記憶デバイス６にデータをリード／ライトする。
【００２３】
スイッチインタフェース２４は、ＰＣＩｅスイッチ２を介して他のストレージコントローラ３と双方向通信する装置である。スイッチインタフェース２４の詳細については、後述する。スイッチインタフェース２４は、ＰＣＩｅスイッチ２を介して他のストレージコントローラ３内のスイッチインタフェース２４と接続される。
【００２４】
図２は、ストレージコントローラ３の詳細構成を示す。ＣＰＵ２０は、複数のマイクロプロセッサ２０Ａを含む。以下、マイクロプロセッサ２０ＡをＭＰ２０Ａと略記することがある。ＣＰＵ２０は、内蔵する各ＭＰ２０ＡのうちいずれかのＭＰ２０Ａにコマンド処理などを割り当てる。ＣＰＵ２０は、複数のコマンドを並行処理することができる。ＣＰＵ２０が担当する処理は、実際にはいずれかのＭＰ２０Ａが実行しているため、ＣＰＵ２０とＭＰ２０Ａとを厳密に区別する必要はない。
【００２５】
メモリ２１の記憶領域は、例えば、ＣＰＵ２０に提供する作業領域と、受信したホスト５や他のストレージコントローラ３からのデータを保持するキャッシュ領域と、各ＭＰ２０Ａが使用するテーブルを格納する管理情報領域と、各ＭＰ２０Ａが実行するコンピュータプログラムを格納するプログラム領域とに区分されて管理される。ただし領域ごとにメモリ２１を用意する構成でもよい。
【００２６】
プログラム領域には、例えば、図示しないオペレーティングシステムやドライバソフトウェアなどのほかに、マイクロプログラム３０が格納される。各ＭＰ２０Ａは、このマイクロプログラム３０に基づいて、後述のような各種の処理を実行する。管理情報領域には、例えば、後述するＬＤＥＶ−ＭＰ対応テーブル３１及びオーナ／ペア対応テーブル３２が格納される。
【００２７】
フロントエンド２２には、ホスト５との通信時におけるプロトコル制御を行うプロトコルチップ３４が設けられている。本実施の形態のプロトコルチップ３４は、後述のようにスイッチインタフェース２４にデータやコマンドを直接書き込むＤＭＡ機能を備える。またフロントエンド２２には、ＦＥメモリ３５も設けられている。ＦＥメモリ３５は、ホスト５からのライトデータや、記憶装置７から読み出したリードデータを一時的に記憶するために利用されるほか、必要な制御情報を保持するために利用される。後述するＬＤＥＶ−ＭＰ対応テーブル３６は、このＦＥメモリ３５に格納されて管理される。なお、ＦＥメモリ３５はプロトコルチップ３４へ内蔵されていてもよい。
【００２８】
スイッチインタフェース２４は、ユーザデータを一時的に格納する記憶領域としてデータバッファＲＡＭ（Random Access Memory）４３を備える。スイッチインタフェース２４の詳細については後述する。
【００２９】
図３は、フロントエンド２２のＦＥメモリ３５（図２）に格納されたＬＤＥＶ−ＭＰ対応テーブル３６（図２）と、メモリ２１に格納されたＬＤＥＶ−ＭＰ対応テーブル３１（図２）との構成例を示す。
【００３０】
ＬＤＥＶ−ＭＰ対応テーブル３１は、クラスタ（ストレージシステム１）内に作成されたすべての論理ボリュームを管理するために利用されるテーブルである。このＬＤＥＶ−ＭＰ対応テーブル３１は、ボリューム番号（ＬＤＥＶ＃）欄３１Ａ、コントローラ番号（ＣＴＬ＃）欄３１Ｂ及びＭＰ番号（ＭＰ＃）欄３１Ｃを備えて構成される。ＬＤＥＶ−ＭＰ対応テーブル３１では、１つの行がクラスタ内に作成された１つの論理ボリュームに対応する。
【００３１】
そしてボリューム番号欄３１Ａには、クラスタ内に作成された各論理ボリュームにそれぞれ付与されたその論理ボリュームに固有の識別番号（ボリューム番号）が格納される。またコントローラ番号欄３１Ｂには、対応する論理ボリュームを管理するストレージコントローラ３の識別番号（ストレージ番号）が格納される。
【００３２】
さらにＭＰ番号欄３１Ｃには、対応する論理ボリュームを担当するＭＰ２０Ａ（図２）に付与されたクラスタ内でそのＭＰ２０Ａに固有の識別番号（ＭＰ番号）が格納される。なお「論理ボリュームを担当するＭＰ」とは、その論理ボリュームを対象とするリードコマンドやライトコマンドがホスト５から与えられた場合に、そのリードコマンドやライトコマンドに従ってその論理ボリュームに要求されたデータを読み書きするＭＰ２０Ａを指す。
【００３３】
従って、図３の例の場合、「LDEV A」というボリューム番号の論理ボリュームは、「ＣＴＬ１」というコントローラ番号が付与されたストレージコントローラ３内の「MP#0」というＭＰ番号が付与されたＭＰ２０Ａにより管理されていることが示されている。
【００３４】
またＬＤＥＶ−ＭＰ対応テーブル３６は、当該ＬＤＥＶ−ＭＰ対応テーブル３６を保持するフロントエンド２２が設けられたストレージコントローラ３内のＭＰ２０Ａと論理ボリュームとの対応関係を管理するために利用されるテーブルであり、ＬＤＥＶ−ＭＰ対応テーブル３１から必要な情報だけを抽出して作成される。
【００３５】
このＬＤＥＶ−ＭＰ対応テーブル３６は、ボリューム番号（ＬＤＥＶ＃）欄３６Ａ及びＭＰ番号欄（ＭＰ＃）３６Ｂを備えて構成される。そしてボリューム番号欄３６Ａには、クラスタ（ストレージシステム１）内に作成された各論理ボリュームのボリューム番号がそれぞれ格納される。またＭＰ番号欄３６Ｂには、対応する論理ボリュームを担当するＭＰ２０ＡのＭＰ番号が格納される。
【００３６】
他のストレージコントローラ３の管理下にある論理ボリュームについては、本ＬＤＥＶ−ＭＰ対応テーブル３６の管轄外である。ただし、ＬＤＥＶ−ＭＰ対応テーブル３６では、他のストレージコントローラ３の管理下にある論理ボリュームであることを認識できるように、管轄外の論理ボリュームに対応するＭＰ番号欄３６Ｂには「他コントローラ」という値が設定される。
【００３７】
従って、図３の例の場合、「LDEV A」や「LDEV B」というボリューム番号の論理ボリュームは、このＬＤＥＶ−ＭＰ対応テーブル３６を保持するフロントエンド２２が搭載されたストレージコントローラ３により管理されており、これらの論理ボリュームがそれぞれ「MP#0」や「MP#4」というＭＰ番号のＭＰ２０Ａにより管理されているが、「LDEV C」及び「LDEV X」というボリューム番号の論理ボリュームは他ストレージコントローラ３内のＭＰ２０Ａにより管理されていることが示されている。
【００３８】
なおフロントエンド２２が管轄外の論理ボリュームを対象とするコマンドを受領した場合、ＭＰ２０Ａは、その論理ボリュームを管理下においているストレージコントローラ３に当該コマンドを転送する。
【００３９】
図４は、メモリ２１に格納されて管理されるオーナ／ペア対応テーブル３２の構成例を示す。オーナ／ペア対応テーブル３２は、コピーペアを構成するオーナとペアとの対応関係を管理するために利用されるテーブルであり、１つの行が１つのコピーペアに対応する。
【００４０】
ここで「オーナ」とは、コマンドの処理対象の論理ボリュームを管理するストレージコントローラ３を指す。すなわち、コマンドを処理するストレージコントローラ３である。また「ペア」とは、コマンドの処理対象のデータについて、オーナのストレージコントローラ３とコピーペアを形成するストレージコントローラ３を指す。以下においては、オーナとなるストレージコントローラ３をオーナコントローラ３と呼び、オーナコントローラ３とペアを形成するストレージコントローラ３をペアコントローラ３と呼び、ホスト５からのコマンドを受領したストレージコントローラ３を受領コントローラ３と呼ぶ場合がある。
【００４１】
オーナ／ペア対応テーブル３２は、図４に示すように、オーナ欄３２Ａ及びペア欄３２Ｂを備えて構成される。そしてオーナ欄３２Ａには、いずれかの論理ボリュームを管理するストレージコントローラ（その論理ボリュームのオーナコントローラ）３の識別番号（以下、これをコントローラ番号と呼ぶ）が格納され、ペア欄３２Ｂには、対応するオーナコントローラ３とコピーペアを構成するストレージコントローラ３のコントローラ番号が格納される。
【００４２】
従って、図４の例の場合、例えば、「ＣＴＬ１」というコントローラ番号のストレージコントローラ３は、「ＣＴＬ３」というコントローラ番号のストレージコントローラ３とコピーペアに設定されていることが示されている。オーナ／ペア対応テーブル３２に登録された組合せは固定されたものではなく、ストレージシステム１の状況に応じて動的に変更可能である。
【００４３】
（２）本ストレージシステムにおけるデータのライト処理の流れ
（２−１）ライト処理の概要
次に、本ストレージシステム１におけるライト処理の流れについて説明する。これに際して、まず、従来のストレージシステムにおけるライト処理の流れを、図５〜図７を参照して説明する。ここでは、本実施の形態によるストレージシステム１が従来の処理手順でライト処理を実行するものとして説明する。
【００４４】
また以下においては、ホスト５Ａ（図１）からストレージコントローラ３Ａに対して、ストレージコントローラ３ＢのＣＰＵ２０におけるいずれかのＭＰ２０Ａが担当する論理ボリュームをライト先とするライトコマンドが与えられたものとする（Ｓ１）。さらに以下においては、ライトデータを２重化するようストレージシステム１内の各ストレージコントローラ３が設定されているものとする。
【００４５】
この場合、かかるライトコマンドを受領したストレージコントローラ（受領コントローラ）３Ａのフロントエンド（以下、これをコマンド受領フロントエンドと呼ぶ）２２のプロトコルチップ３４（図２）は、ＬＤＥＶ−ＭＰ対応テーブル３６（図３）を参照して、ライトデータのライト先の論理ボリュームを担当するＭＰ（以下、これをオーナＭＰと呼ぶ）２０Ａを特定し、特定したオーナＭＰ２０Ａが存在するストレージコントローラ（オーナコントローラ）３Ｂのメモリ２１にそのライトコマンドを格納する（Ｓ２）。
【００４６】
また、かかるオーナＭＰ２０Ａは、メモリ２１に格納されたライトコマンドを読み出し（Ｓ３）、この後、ステップＳ２のライトコマンドに対するコマンドレスポンスを、コマンド受領フロントエンド２２のプロトコルチップ３４に送信する（Ｓ４）。かくして、このコマンドレスポンスを受信したプロトコルチップ３４は、かかるライトコマンドの送信元のホスト５Ａに対してコマンドレスポンスを送信する（Ｓ５）。
【００４７】
一方、コマンド受領フロントエンド２２のプロトコルチップ３４は、この後ホスト５Ａから転送されてくる（Ｓ６）ライトデータを自ストレージコントローラ（受領コントローラ）３Ａ内のメモリ２１に格納する（Ｓ７）。これは、一度に複数のホスト５からライトデータが転送されてきた場合、受領コントローラ３Ａのフロントエンド２２に設けられたデータバッファ（ＦＥメモリ３５）がオーバフローする可能性があることから、ホスト５からのライトデータをメモリ２１でバッファリングするためである。
【００４８】
そしてコマンド受領フロントエンド２２のプロトコルチップ３４は、かかるライトデータの転送が完了すると、その旨の転送完了ステータスをオーナＭＰ２０Ａに送信する（Ｓ８）。なお、この転送完了ステータスには、受領コントローラ３Ａのメモリ２１に格納されているかかるライトデータのアドレスが含まれる。
【００４９】
また転送完了ステータスを受信したオーナＭＰ２０Ａは、ＬＤＥＶ−ＭＰ対応テーブル３１（図３）を参照してペアコントローラ３Ｃを特定し、特定結果に基づいて、図８に示すように、転送元メモリアドレス、１段目メモリアドレス、２段目メモリアドレス及びライトデータ長を含む転送指示３３をオーナコントローラ３Ｂ内のスイッチインタフェース２４に送信する（Ｓ９）。
【００５０】
なお、この転送指示３３において、転送元メモリアドレスは、受領コントローラ３Ａのメモリ２１におけるライトデータの先頭アドレスである。また１段目メモリアドレスは、受領コントローラ３Ａのメモリ２１から読み出したライトデータの転送先のメモリアドレスである。ライトデータはオーナコントローラ３Ｂを経由してペアコントローラ３Ｃに転送されるため、１段目メモリアドレスとして、オーナコントローラ３Ｂのメモリ２１内のアドレスが指定される。また２段目メモリアドレスは、ペアコントローラ３Ｃにおけるライトデータのライト先のアドレスである。２段目メモリアドレスとしては、ペアコントローラ３Ｃのメモリ２１内のアドレスが指定される。
【００５１】
スイッチインタフェース２４は、かかる転送指示３３が与えられると、当該転送指示３３に基づいて、受領コントローラ３Ａのメモリ２１からライトデータを読み出し（Ｓ１０）、読み出したライトデータをオーナコントローラ３Ｂのメモリ２１における転送指示３３で指定されたアドレス位置に格納すると共に（Ｓ１１）、このライトデータをペアコントローラ３Ｃのメモリ２１における転送指示３３で指定されたアドレス位置に格納する（Ｓ１２）。
【００５２】
以上のように、従来のストレージシステムでは、ライトデータを受領コントローラ３Ａのメモリ２１でバッファリングし（Ｓ７参照）、これをオーナコントローラ３のスイッチインタフェース２４が読み出す構成となっているが、このような受領コントローラ３のメモリ２１を経由したオーナコントローラ３へのデータ転送のオーバヘッドが大きく、迅速なライト処理を実行し得ない問題があった。
【００５３】
そこで、本実施の形態のストレージシステム１では、受領コントローラ３のメモリ２１を経由することなく、ライトデータをオーナコントローラ３にＤＭＡ転送することを特徴の１つとしている。
【００５４】
図８〜図９Ｂは、このような本実施の形態のストレージシステム１におけるライト処理の流れを示す。ここでもホスト５Ａからストレージコントローラ３Ａに対して、ストレージコントローラ３ＢのＣＰＵ２０のいずれかのＭＰ２０Ａが担当する論理ボリュームをライト先とするライトコマンドが与えられたものとする（Ｓ２０）。また以下においても、ストレージシステム１内の各ストレージコントローラ３がライトデータを２重化するよう設定されているものとする。
【００５５】
この場合、かかるライトコマンドを受領したストレージコントローラ（受領コントローラ）３Ａのコマンド受領フロントエンド２２のプロトコルチップ３４（図２）は、ＬＤＥＶ−ＭＰ対応テーブル３６（図３）を参照してオーナＭＰ２０Ａを特定し、特定したオーナＭＰ２０Ａが存在するストレージコントローラ（オーナコントローラ）３Ｂのメモリ２１にそのライトコマンドを格納する（Ｓ２１）。
【００５６】
また、オーナＭＰ２０Ａは、メモリ２１に格納されたライトコマンドを読み出し（Ｓ２２）、読み出したライトコマンドに基づいて、対応するペアコントローラ３Ｃのメモリ２１上のアドレスと、自ストレージコントローラ（オーナコントローラ）３Ｂのメモリ２１上のアドレスと、そのとき実行すべき処理（以下、これを「機能」又は「システム機能」とも呼ぶ。ここでは「２重ライト」。）とをスイッチインタフェースパラメータ３７としてオーナコントローラ３Ｂ内のスイッチインタフェース２４に送信する（Ｓ２３）。
【００５７】
この後、オーナＭＰ２０Ａは、ステップＳ２１において受領コントローラ３Ａのコマンド受領フロントエンド２２のプロトコルチップ３４から与えられたライトコマンドに対するコマンドレスポンスをそのコマンド受領フロントエンド２２のプロトコルチップ３４に送信する。またオーナＭＰ２０Ａは、これと併せて自ストレージコントローラ（オーナコントローラ）３Ｂのスイッチインタフェース２４内のデータバッファＲＡＭ４３（図２）における自ＭＰに対応するデータ格納領域（パラメータ格納レジスタの自ＭＰに割り当てられたパラメータ格納領域と対応付けられたデータ格納領域）の先頭アドレスをプロトコルチップパラメータ３８としてそのプロトコルチップ３４に送信する（Ｓ２４）。
【００５８】
かくして、オーナＭＰ２０Ａからのコマンドレスポンスを受信したコマンド受領フロントエンド２２のプロトコルチップ３４は、かかるライトコマンドの送信元のホスト５Ａに対してコマンドレスポンスを送信する（Ｓ２５）。
【００５９】
一方、コマンド受領フロントエンド２２のプロトコルチップ３４は、ホスト５Ａから転送されてくるライトデータを受信すると（Ｓ２６）、受信したライトデータを、オーナコントローラ３Ｂのスイッチインタフェース２４のデータバッファＲＡＭ４３にＤＭＡ転送する（Ｓ２７）。
【００６０】
この際、プロトコルチップ３４は、ライトデータが格納されたデータパケット（以下においてはＰＣＩパケットとする）のヘッダにおいて、当該ＰＣＩパケットのあて先を、上述のステップＳ２４でオーナＭＰ２０Ａからプロトコルチップパラメータ３８として通知されたアドレスに設定する。これにより、かかるデータバッファＲＡＭ４３におけるかかるアドレス位置にライトデータが格納される。
【００６１】
そしてオーナコントローラ３Ｂのスイッチインタフェース２４は、データバッファＲＡＭ４３にライトデータが格納されると、ステップＳ２４でオーナＭＰ２０Ａから与えられたスイッチインタフェースパラメータ３７において指定された、自ストレージコントローラ（オーナコントローラ）３Ｂのメモリ２１内のアドレス位置にこのライトデータを格納する（Ｓ２８）。また、スイッチインタフェース２４は、かかるスイッチインタフェースパラメータ３７において指定された、ペアコントローラ３Ｃのメモリ２１内のアドレス位置にライトデータをＤＭＡ転送することにより格納する（Ｓ２９）。
【００６２】
このように本実施の形態のストレージシステム１では、受領コントローラ３Ａのコマンド受領フロントエンド２２が、ホスト５Ａから転送されてきたライトデータをオーナコントローラ３Ｂのスイッチインタフェース２４のデータバッファＲＡＭ４３に直接書き込むため、ライトデータを受領コントローラ３Ａのメモリ２１を経由してオーナコントローラ３に転送する際のオーバヘッドが発生せず、その分、ホスト５Ａから見たストレージシステム１全体としてのレスポンス性能を向上させることができる。
【００６３】
（２−２）スイッチインタフェースパラメータの構成
次に、スイッチインタフェースパラメータの構成を、図１０（Ａ）を参照して説明する。この図１０（Ａ）からも明らかなように、スイッチインタフェースパラメータ３７は、８ビットを１バイトとして２４バイトのデータサイズを有する。そして最初の２バイト（１６ビット）が、そのときスイッチインタフェース２４に実行させようとするシステム機能の機能番号を格納する機能番号フィールド（図１０（Ａ）の「機能番号」の欄）として利用される。
【００６４】
ここで、かかる「システム機能」としては、図１０（Ｂ）に示すように、ライトデータを多重化せずに記憶装置７（図１）に書き込む「１重ライト」や、ライトデータを２重化して記憶装置７に書き込む「２重ライト」、ライトデータに付加されたＣＲＣ（Cyclic Redundancy Check）コードに基づいて当該ライトデータの正誤を判定する「ＣＲＣチェック」、他のストレージコントローラ３からデータをリードする「他ＣＴＬリード（データ）」などがある。
【００６５】
本実施の形態においては、これらスイッチインタフェース２４が実行可能な各システム機能に対して予め固有の識別番号が機能番号としてそれぞれ付与されており、この機能番号がスイッチインタフェースパラメータ３７の機能番号フィールドに格納される。例えば、「２重ライト」というシステム機能の場合、図１０（Ｄ）に示すように、機能番号フィールドに「２重ライト」という機能に付与された機能番号（図１０（Ｄ）の例では「0x0001」）が格納される。
【００６６】
機能番号フィールドの次の１バイト（８ビット）は、機能番号フィールドに機能番号が格納されたシステム機能（以下、これを指定システム機能と呼ぶ）の補助機能の番号（以下、これを機能補助番号と呼ぶ）を格納するための機能補助番号フィールド（図１０（Ａ）の「機能補助番号」の欄）として利用される。なお、「１重ライト」や「２重ライト」の補助機能としては、図１０（Ｃ）に示すように、ライトデータをストレージコントローラ３間で転送する際にデータブロックごとにチェックコードを付加する「T10DIF Insert」や、このチェックコードに基づいてそのユーザデータの正誤を判定する「T10DIF Check」などがある。
【００６７】
機能補助番号フィールドの次の１バイト（８ビット）は、指定システム機能の対象となるストレージコントローラ３のコントローラ番号を格納する対象ＣＴＬ番号フィールド（図１０（Ａ）の「対象ＣＴＬ番号」の欄）として利用される。例えば、「２重ライト」というシステム機能の場合、図１０（Ｄ）に示すように、ペアコントローラ３のコントローラ番号がこの対象ＣＴＬ番号フィールドに格納される。
【００６８】
また対象ＣＴＬ番号フィールドに続く８バイト（６４ビット）は、指定システム機能を実現するために使用される、指定システム機能の対象となるストレージコントローラ３（対象ＣＴＬ番号フィールドにコントローラ番号が格納されたストレージコントローラ３）内のアドレス（以下、これをシステム機能使用アドレスと呼ぶ）を格納するシステム機能使用アドレスフィールド（図１０（Ａ）の「システム機能の使用アドレス」の欄）として利用される。例えば、指定システム機能が「２重ライト」の場合、図１０（Ｄ）に示すように、ペアコントローラ３内のメモリ２１におけるライトデータを格納すべきアドレスがこのシステム機能使用アドレスフィールドに格納される。
【００６９】
なお図１０（Ｄ）では、システム機能使用アドレスフィールドが４バイトずつの２つの領域（「ＣＴＬ２の書込み先アドレス１」及び「ＣＴＬ２の書込み先アドレス２」）に分けられているが、対象となるアドレスが３２ビット以内のビット数である場合には前半の４バイト（図１０（Ｄ）の「ＣＴＬ２の書込み先アドレス１」の欄）が使用され、対象となるアドレスが３２〜６４ビットのビット数である場合には前後半の合計８バイト（図１０（Ｄ）の「ＣＴＬ２の書込み先アドレス１」及び「ＣＴＬ２の書込み先アドレス２」の各欄）が使用される。
【００７０】
システム機能使用アドレスフィールドの次の８バイト（６４ビット）は、指定システム機能がそのシステム機能を実現するために使用する固有のアドレス（以下、これをシステム機能固有使用アドレスと呼ぶ）を格納するシステム機能固有使用フィールド（図１０（Ａ）の「システム機能固有の使用領域」の欄）として利用される。例えば、指定システム機能が「２重ライト」の場合、図１０（Ｄ）に示すように、自ストレージコントローラ（オーナコントローラ）３内のメモリ２１におけるライトデータを格納すべきアドレスがこのシステム機能固有使用アドレスフィールドに格納される。
【００７１】
なお図１０（Ｄ）では、システム機能固有使用アドレスフィールドが４バイトずつの２つの領域（「自ＣＴＬの書込み先アドレス１」及び「自ＣＴＬの書込み先アドレス２」）に分けられているが、対象となるアドレスが32ビット以内のビット数である場合には前半の４バイト（図１０（Ｄ）の「自ＣＴＬの書込み先アドレス１」の欄）が使用され、対象となるアドレスが３２〜６４ビットのビット数である場合には前後半の合計８バイト（図１０（Ｄ）の「自ＣＴＬの書込み先アドレス１」及び「自ＣＴＬの書込み先アドレス２」の各欄）が使用される。
【００７２】
システム機能固有使用フィールドの次の４バイト（３２ビット）は、そのスイッチインタフェースパラメータ３７のバイト０〜バイト１９に基づいて計算したパリティ（ＬＲＣ:Longitudinal Redundancy Check）が格納される。
【００７３】
図１０（Ｄ）は、ライトデータを自ストレージコントローラ３と、「CTL2」というストレージコントローラ３とに２重ライトすべき場合のスイッチインタフェースパラメータ３７の構成例を示す。この図１０（Ｄ）の詳細については上述の通りであるため、ここでの説明は省略する。
【００７４】
（２−３）スイッチインタフェースの詳細構成
図１１は、本実施の形態によるスイッチインタフェース２４の詳細構成を示す。この図１１に示すように、スイッチインタフェース２４は、第１の外部インタフェース部４０、第２の外部インタフェース部４１、パラメータ格納レジスタ４２、データバッファＲＡＭ（Random Access Memory）４３、ヘッダ／パラメータ読出し部４４、パラメータ解読部４５及び機能実現部４６を備えて構成される。
【００７５】
なお、これら第１の外部インタフェース部４０、第２の外部インタフェース部４１、パラメータ格納レジスタ４２、データバッファＲＡＭ４３、ヘッダ／パラメータ読出し部４４、パラメータ解読部４５及び機能実現部４６は、ハードウェア構成及びソフトウェア構成のいずれであってもよい。
【００７６】
第１及び第２の外部インタフェース部４０，４１は、同じストレージコントローラ３内のＭＰ２０Ａや、ＰＣＩｅスイッチ２（図１）を介した他のストレージコントローラ３との通信時におけるプロトコル制御を行うインタフェースである。またパラメータ格納レジスタ４２は、ＭＰ２０Ａから与えられた上述のスイッチインタフェースパラメータ３７を一時的に記憶保持するためのレジスタである。図１２に示すように、パラメータ格納レジスタ４２の記憶領域は、自ストレージコントローラ３内の各ＭＰ２０Ａにそれぞれ対応させて、複数のパラメータ格納領域４２Ａに区分されて管理される。
【００７７】
データバッファＲＡＭ４３は、上述のようにフロントエンド２２のプロトコルチップ３４（図１）からＤＭＡ転送されるＰＣＩパケット（ライトデータ）を一時的に記憶保持するためのメモリである。データバッファＲＡＭ４３の記憶領域も、パラメータ格納レジスタ４２の各パラメータ格納領域４２Ａにそれぞれ対応させて、複数のデータ格納領域４３Ａに区分されて管理される。
【００７８】
ヘッダ／パラメータ読出し部４４は、コマンド受領フロントエンド２２のプロトコルチップ３４によりデータバッファＲＡＭ４３にライトデータが格納された場合に、そのライトデータに対応するスイッチインタフェースパラメータ３７を読み出す機能を有する機能部である。
【００７９】
またパラメータ解読部４５は、ヘッダ／パラメータ読出し部４４から与えられるスイッチインタフェースパラメータ３７の内容を解読する機能を有する機能部である。具体的に、パラメータ解読部４５は、ヘッダ／パラメータ読出し部４４から与えられたスイッチインタフェースパラメータ３７から、当該スイッチインタフェースパラメータ３７において上述のように指定されたシステム機能、補助機能、対象ＣＴＬ番号、システム機能使用アドレス及びシステム機能固有使用アドレスを読み出し、読み出したこれらの情報を機能実現部４６に出力する。
【００８０】
機能実現部４６は、パラメータ解読部４５から与えられたスイッチインタフェースパラメータ３７の解読結果に基づいて２重ライト等のシステム機能を実行する機能を有する機能部である。機能実現部４６は、例えば、「２重ライト」というシステム機能を実現するため、データをＤＭＡ転送する機能を有するＤＭＡ（Direct Memory Access）部４７を備えており、このＤＭＡ部４７により、第２の外部インタフェース部４１を介してクラスタ（ストレージシステム１）内の必要なストレージコントローラ３のメモリ２１にデータやコマンドを格納する。
【００８１】
（２−４）２重ライト処理時におけるスイッチインタフェースでの処理の流れ
図８〜図９Ｂ及び図１１との対応部分に同一符号を付して示す図１３〜図１６は、図８〜図９Ｂについて上述した２重ライト処理時のより詳細な処理の流れを示す。
【００８２】
オーナＭＰ２０Ａは、図１３（Ａ）のＳ２３において、ホスト５Ａから与えられたライトコマンドに応じたスイッチインタフェースパラメータ３７をオーナコントローラ３Ｂのスイッチインタフェース２４に与える際、図１３（Ｂ）に示すように、このスイッチインタフェースパラメータ３７を、パラメータ格納レジスタ４２内のオーナＭＰ２０Ａに対応するパラメータ格納領域４２Ａに格納する。
【００８３】
またオーナＭＰ２０Ａは、パラメータ格納レジスタ４２におけるスイッチインタフェースパラメータ３７を格納したパラメータ格納領域４２Ａに対応する、データバッファＲＡＭ４３内のデータ格納領域４３Ａ（図１２）の先頭アドレスを、プロトコルチップパラメータ３８としてコマンド受領フロントエンド２２のプロトコルチップ３４に通知する（Ｓ２４）。
【００８４】
この後、かかるプロトコルチップ３４は、ホスト５Ａからライトデータが転送されてくると（図１４（Ａ）のＳ２６）、図１４（Ｂ）に示すように、そのライトデータをＰＣＩパケット化してオーナコントローラ３Ｂのスイッチインタフェース２４のデータバッファＲＡＭ４３にＤＭＡ転送する（Ｓ２７）。
【００８５】
この際、プロトコルチップ３４は、ＰＣＩパケットにおけるデータのライト先を、ステップＳ２４においてオーナＭＰ２０Ａからプロトコルチップパラメータ３８として通知されたアドレスに設定する。これにより、かかるライトデータが、かかるスイッチインタフェース２４のデータバッファＲＡＭ４３内のデータ格納領域４３Ａのうち、ステップＳ２３においてオーナＭＰ２０Ａがスイッチインタフェースパラメータ３７を書き込んだパラメータ格納レジスタ４２内のパラメータ格納領域４２Ａと対応付けられたデータ格納領域４３Ａに格納される。
【００８６】
一方、オーナコントローラ３Ｂのスイッチインタフェース２４のヘッダ／パラメータ読出し部４４は、データバッファＲＡＭ４３にライトデータが格納されると（図１５（Ａ）のＳ２７）、図１５（Ｂ）に示すように、ヘッド／パラメータ読出し部４４がそのＰＣＩパケットのヘッダＨＤを読み出す（Ｓ３０）。
【００８７】
またヘッダ／パラメータ読出し部４４は、読み出したＰＣＩパケットのヘッダＨＤに格納されているそのＰＣＩパケットのあて先のアドレスに基づいて、そのＰＣＩパケットが格納されているデータバッファＲＡＭ４３内のデータ格納領域４３Ａを特定すると共に、そのデータ格納領域４３Ａと対応付けられたパラメータ格納レジスタ４２内のパラメータ格納領域４２Ａを特定（選択）する。そしてヘッダ／パラメータ読出し部４４は、特定したパラメータ格納領域４２Ａからそのパラメータ格納領域４２Ａに格納されているスイッチインタフェースパラメータ３７を読み出し（Ｓ３２）、これをパラメータ解読部４５に出力する（Ｓ３３）。
【００８８】
またパラメータ解読部４５は、ヘッダ／パラメータ読出し部４４から出力されたスイッチインタフェースパラメータ３７を解読し（Ｓ３４）、解読結果を機能実現部４６に出力する（Ｓ３５）。このときパラメータ解読部４５から機能実現部４６に出力される解読結果としては、そのとき実行すべきシステム機能が「２重ライト」であることと、２重ライト先のストレージコントローラ３Ｃのコントローラ番号及び当該ストレージコントローラ３Ｃにおけるライトデータのライト先と、自ストレージコントローラ３Ｂが管理する論理ボリュームにおけるデータのライト先のアドレスなどのパラメータ５０である。
【００８９】
機能実現部４６は、図１６（Ｂ）に示すように、このパラメータ５０に基づいて対応するシステム機能を起動すると共に（Ｓ３６）、当該パラメータ５０を２重ライト用のＤＭＡパラメータ５１としてＤＭＡ部４７に与える（Ｓ３７）。
【００９０】
かくしてＤＭＡ部４７は、このＤＭＡパラメータ５１に従って、ライトデータをデータバッファＲＡＭ４３から読み出し（Ｓ３８）、読み出したライトデータを自ストレージコントローラ３Ｂ内のメモリ２１にＤＭＡ転送すると共に（Ｓ２８）、当該ライトデータをＰＣＩｅスイッチ２を経由して２重化先のストレージコントローラ（ペアコントローラ）３Ｃのメモリ２１にＤＭＡ転送する（Ｓ２９）。なお、このように自ストレージコントローラ３Ｂのメモリ２１や、ペアコントローラ３Ｃのメモリ２１にＤＭＡ転送されたライトデータは、この後、所定のタイミングで記憶装置７（図１）に格納される。
【００９１】
（２−５）スイッチインタフェースパラメータの管理方法
なお、スイッチインタフェース２４におけるスイッチインタフェースパラメータ３７の管理方法として、上述の図１３（Ａ）〜図１６（Ａ）のステップＳ２３において、オーナＭＰ２０Ａがスイッチインタフェースパラメータ３７をスイッチインタフェース２４のパラメータ格納レジスタ４２における自己に割り当てられたパラメータ格納領域４２Ａに常に上書きする第１の管理方法と、スイッチインタフェース２４がスイッチインタフェースパラメータ３７に従って実行したシステム機能の完了をステータスでオーナＭＰ２０Ａに通知するようにし、オーナＭＰ２０Ａがこの通知を待ってパラメータ格納領域４２Ａを開放する第２の管理方法とが考えられる。
【００９２】
この場合、１つのＭＰ２０Ａがホスト５からのコマンドに応じた１つのシステム機能のみを利用することを考慮すれば、第１の管理方法を適用することによって、ホスト５から見たストレージシステム１のレスポンス性能を向上させることができ、さらには実装も簡単化することができる。
【００９３】
ただし、上書きによって誤ったアドレスにスイッチインタフェースパラメータ３７が格納された場合、誤ったスイッチインタフェースパラメータ３７によって誤った処理が実行され、この結果としてデータ破壊やデータ化けを引き起こすおそれがある。従って、このような事態を防ぐ意味においても、スイッチインタフェース２４におけるスイッチインタフェースパラメータ３７の管理方法として第２の管理方法を適用することが望ましい。
【００９４】
（２−６）２重ライト処理
図１７は、図８のステップＳ２７において、コマンド受領フロントエンド２２のプロトコルチップ３４からのライトデータを受領した場合にオーナコントローラ３Ｂのスイッチインタフェース２４において実行される一連の処理（ここでは２重ライト処理）の流れを示す。この２重ライト処理は、１つのＰＣＩパケットについて実行される処理であり、１つのＰＣＩパケットがデータバッファＲＡＭに格納されるごとに同様の処理が繰り返される。
【００９５】
具体的に、スイッチインタフェース２４では、１つのＰＣＩパケットがデータバッファＲＡＭ４３に格納されたことをヘッダ／パラメータ読出し部４４が検知すると、この図１７に示すライト処理が開始され、まず、ヘッダ／パラメータ読出し部４４が、当該ＰＣＩパケットのヘッダＨＤ（図１５（Ｂ））の正誤チェックを実行し（Ｓ４０）、かかるヘッダＨＤが正常であるか否かを判定する（Ｓ４１）。
【００９６】
そしてヘッダ／パラメータ読出し部４４は、この判定で否定結果を得ると、オーナＭＰ２０Ａにエラーを通知し（Ｓ４２）、この後、この２重ライト処理を終了する。従って、この場合には、オーナＭＰ２０Ａがホスト５Ａにエラーを通知し、かかるライトデータを再度転送してもらうことになる。
【００９７】
これに対してヘッダ／パラメータ読出し部４４は、ステップＳ４１の判断で肯定結果を得ると、ステップＳ４０で正誤チェックを実行したヘッダＨＤからそのＰＣＩパケットのあて先のアドレス（そのＰＣＩパケットを格納すべきデータバッファＲＡＭ４３内のデータ格納領域４３Ａのアドレス）を読み出し、読み出したアドレスに基づいて、そのアドレスと対応付けられたパラメータ格納レジスタ４２内のパラメータ格納領域４２Ａを特定する（Ｓ４３）。
【００９８】
そしてヘッダ／パラメータ読出し部４４は、パラメータ格納レジスタ４２内のステップＳ４３で特定したパラメータ格納領域４２Ａからスイッチインタフェースパラメータ３７を読み出し、これをパラメータ解読部４５に転送する（Ｓ４４）。
【００９９】
パラメータ解読部４５は、ヘッダ／パラメータ読出し部４４から与えられたスイッチインタフェースパラメータ３７を解読し、解読結果を機能実現部に転送する（Ｓ４５）。またパラメータ解読部４５は、スイッチインタフェースパラメータ３７に含まれるＬＲＣに基づいて当該スイッチインタフェースパラメータ３７が正常であるか否かを判定する（Ｓ４６）。
【０１００】
そしてパラメータ解読部４５は、この判定で否定結果を得ると、オーナＭＰ２０Ａにエラーを通知し（Ｓ４７）、この後、この２重ライト処理を終了する。従って、この場合にはオーナＭＰ２０Ａがホスト５Ａにエラーを通知し、スイッチインタフェースパラメータ３７を再度転送してもらうことになる。
【０１０１】
これに対してパラメータ解読部４５は、ステップＳ４５の判断で肯定結果を得ると、機能実現部４６におけるスイッチインタフェースパラメータ３７において指定されたシステム機能を起動する（Ｓ４８）。また機能実現部４６は、起動されたシステム機能に基づいて、スイッチインタフェースパラメータ３７により指定された処理を実行する（Ｓ４９）。
【０１０２】
例えば、スイッチインタフェースパラメータ３７により指定された処理がライトデータの２重ライトであった場合、機能実現部４６は、ＤＭＡ部４７を起動して当該ＤＭＡ部４７に上述のＤＭＡパラメータ５１（図１６（Ｂ））を与える。かくしてＤＭＡ部４７は、このＤＭＡパラメータ５１に従って、上述のようにしてライトデータを自ストレージコントローラ３Ｂ内のメモリ２１にＤＭＡ転送すると共に、当該ライトデータをペアコントローラ３Ｃのメモリ２１にもＤＭＡ転送する。
【０１０３】
そして機能実現部４６は、かかるスイッチインタフェースパラメータ３７により指定された処理が完了すると、その旨の完了通知をオーナＭＰ２０Ａに送信し（Ｓ５０）、この後、この２重ライト処理を終了する。
【０１０４】
（３）他のシステム機能への応用
以上、２重ライト時の処理の流れについて説明したが、本ストレージシステム１では、２重ライトと同様の処理の流れで「リード」や「ＣＲＣチェック」といった他の処理（システム機能）を実行することもできる。一例として、リード処理の流れについて以下に説明する。
【０１０５】
図１８は、ホスト５Ａからストレージコントローラ３Ａにリードコマンドが与えられた場合のリード処理の流れを示す。ここでは、リードコマンドの対象となるデータがストレージコントローラ３ＢのいずれかのＭＰ２０Ａが管理する論理ボリュームに格納されているものとする。
【０１０６】
この場合、ストレージコントローラ３Ａのフロントエンド２２のプロトコルチップ３４は、かかるリードコマンドを受領すると（Ｓ６０）、ＬＤＥＶ−ＭＰ対応テーブル３６（図３）を参照してオーナＭＰ２０Ａを特定し、特定したオーナＭＰ２０Ａが存在するストレージコントローラ（オーナコントローラ）３Ｂのメモリ２１にそのリードコマンドをＤＭＡ転送により格納する（Ｓ６１）。
【０１０７】
また、オーナＭＰ２０Ａは、メモリ２１に格納されたリードコマンドを読み出し（Ｓ６２）、読み出したリードコマンドに基づいて、要求されたデータがメモリ２１内に存在するか否かを判定するキャッシュヒット判定を実行する（Ｓ６３）。ここでは、要求されたデータがメモリ２１内に存在していたものとする。
【０１０８】
そこで、オーナＭＰ２０Ａは、スイッチインタフェースパラメータ３７における機能番号フィールド（図１０（Ａ）の「機能番号」の欄）に「リード（データ）」というシステム機能に対応する機能番号を格納し、対象ＣＴＬ番号フィールド（図１０（Ａ）の「対象ＣＴＬ番号」の欄）に自ストレージコントローラのコントローラ番号を格納し、システム機能使用アドレスフィールド（図１０（Ａ）の「システム機能の使用アドレス」の欄）にリード先のアドレスを格納したスイッチインタフェースパラメータ３７を生成し、これをスイッチインタフェース２４のパラメータ格納レジスタ４２（図１１）における自ＭＰと対応付けられたパラメータ格納領域４２Ａ（図１２）に格納する（Ｓ６４）。
【０１０９】
この後、オーナＭＰ２０Ａは、ステップＳ６１において受領コントローラ３Ａのコマンド受領フロントエンド２２のプロトコルチップ３４から与えられたリードコマンドに対するコマンドレスポンスをそのコマンド受領フロントエンド２２のプロトコルチップ３４に送信する。またオーナＭＰ２０Ａは、これと併せて自ストレージコントローラ（オーナコントローラ）３Ｂのスイッチインタフェース２４内のデータバッファＲＡＭ４３（図２）における自ＭＰに対応するデータ格納領域４３Ａ（パラメータ格納レジスタ４２の自ＭＰに割り当てられたパラメータ格納領域４２Ａと対応付けられたデータ格納領域４３Ａ）の先頭アドレスをプロトコルチップパラメータ３８としてそのプロトコルチップ３４に送信する（Ｓ６５）。
【０１１０】
かくして、オーナＭＰ２０Ａからのコマンドレスポンスを受信したコマンド受領フロントエンド２２のプロトコルチップ３４は、オーナコントローラ３Ｂのスイッチインタフェース２４に対して、ステップＳ６５でプロトコルチップパラメータ３８として与えられたアドレスをあて先とするＰＣＩパケットを生成する。そしてプロトコルチップ３４は、生成したＰＣＩパケットを、オーナコントローラ３Ｂのスイッチインタフェース２４のデータバッファＲＡＭ４３におけるステップＳ６５でプロトコルチップパラメータ３８として与えられたアドレスに格納する（Ｓ６６）。
【０１１１】
この結果、かかるスイッチインタフェース２４のヘッダ／パラメータ読出し部４４（図１１）は、このＰＣＩパケットが格納されたデータバッファＲＡＭ４３のデータ格納領域４３Ａに対応するパラメータ格納レジスタ４２のパラメータ格納領域４２Ａからスイッチインタフェースパラメータ３７を読み出す。そしてスイッチインタフェース２４のパラメータ解読部４５（図１１）が、このスイッチインタフェースパラメータ３７を解読し、解読結果に基づいて、機能実現部４６（図１１）における「リード」のシステム機能を起動する。この結果、要求されたデータが機能実現部４６により対応する論理ボリュームから読み出され、これがリードデータとして外部インタフェース部４１（図１１）を介してコマンド受領フロントエンド２２のプロトコルチップ３４に転送される（Ｓ６７）。
【０１１２】
かくして、かかるリードデータを受信したコマンド受領フロントエンド２２のプロトコルチップ３４は、このリードデータをリードコマンドの送信元のホスト５Ａに転送する（Ｓ６８）。
【０１１３】
（４）本実施の形態の効果
以上のように本実施の形態のストレージシステムでは、ホスト５からのライトデータを中間バッファ（受領コントローラ３のメモリ２１）を介すことなく、直接オーナコントローラ３に転送することができるため、ホスト５から見たストレージシステム１全体としてのレスポンス性能を向上させることができる。
【０１１４】
また、本ストレージシステム１のように、複数のストレージコントローラ３によりクラスタを構成し、当該クラスタを１つのストレージ装置のようにホスト５に見せるストレージシステムでは、従来、制御の容易化のために、図６ＢのステップＳ７について上述したように中間バッファとして利用されるメモリ２１の記憶領域を各ストレージコントローラ３にそれぞれ対応させて分割して管理し、これら分割した記憶領域を各ストレージコントローラにそれぞれ固定的に割り当てている。このため、かかるクラスタ構成を有するストレージシステムでは、メモリ２１の容量によってはストレージシステムを構成するストレージコントローラ３の数に制限が生じたり、アクセスが少ないストレージコントローラ３に割り当てられた記憶領域の使用効率が悪くなってメモリ２１の記憶領域を有効活用できない問題があった。
【０１１５】
この点について、本ストレージシステム１では、ホスト５からのライトデータを直接オーナコントローラ３のスイッチインタフェース２４にＤＭＡ転送するため、各ストレージコントローラ３に対して固定的にメモリ２１の記憶領域を割り当てる必要がなく、この結果、ストレージシステム１を構成するストレージコントローラ３の数が制限されることがなく、またメモリ２１の記憶領域を有効活用することができるという効果をも得ることができる。
【０１１６】
（５）他の実施の形態
なお上述の実施の形態においては、本発明を、図１のように４つのストレージコントローラ３から構成されるストレージシステム１に適用するようにした場合について述べたが、本発明はこれに限らず、２つ、３つ又は４つ以上のストレージコントローラ３により構成されるストレージシステムにも本発明を広く適用することができる。
【０１１７】
また上述の実施の形態においては、フロントエンド２２のプロトコルチップ３４がＰＣＩパケットをスイッチインタフェース２４のデータバッファＲＡＭ４３に格納することにより「１重ライト」、「２重ライト」及び「リード」などの各種システム機能を起動できるようにした場合について述べたが、本発明はこれに限らず、プロトコルチップ３４以外のフロントエンド２２のＤＭＡ機能を有する構成部品や、フロントエンド２２以外のＤＭＡ機能を有するデバイスにより上述と同様にして必要なシステム機能を起動できるようにしてもよい。
【０１１８】
さらに上述の実施の形態においては、オーナＭＰ２０Ａがスイッチインタフェースパラメータ３７をパラメータ格納レジスタ４２における自ＭＰに割り当てられたパラメータ格納領域４２Ａに格納し、プロトコルチップ３４がそのオーナＭＰ２０Ａに対するコマンドやライトデータをデータバッファＲＡＭ４３の対応するデータ格納領域４３Ａに格納するようにした場合について述べたが、本発明はこれに限らず、メモリ２１上の一部領域をパラメータ格納レジスタ４２やデータバッファＲＡＭ４３の代わりに用いるようにしてもよい。要は、オーナＭＰ２０Ａがスイッチインタフェースパラメータ３７を格納するＭＰ２０Ａごとの記憶領域（パラメータ格納領域）と、プロトコルチップ３４がそのオーナＭＰ２０Ａに対するコマンドやライトデータを格納する記憶領域（データ格納領域）との対応関係を管理できるのであれば、パラメータ格納レジスタ４２やデータバッファＲＡＭ４３の代わりとなる記憶領域をスイッチインタフェース２４以外の場所に設けるようにしてもよい。
【０１１９】
さらに上述の実施の形態においては、スイッチインタフェース２４において、フロントエンド２２のプロトコルチップ３４から与えられるＰＣＩパケットのヘッダＨＤに格納されたそのＰＣＩパケットのあて先のアドレスのみを利用してシステム機能の実行を行うようにした場合について述べたが、本発明はこれに限らず、例えば、ＰＣＩパケットのヘッダＨＤに格納されるＴＬＰタイプ（リード、ライトなどのホスト５から与えられたコマンドのタイプ）の情報や、リクエスタＩＤ（そのＰＣＩパケットの送信元デバイスのＩＤ）をさらに利用して、スイッチインタフェース２４が実行すべきシステム機能を指定できるようにしてもよい。
【０１２０】
例えば、リクエスタＩＤがあるプロトコルチップ３４のＩＤであった場合にはライトデータに付加された保証コードを利用してそのライトデータの正誤を検証し、リクエスタＩＤがこれ以外のＩＤであった場合には、ライトデータの正誤を検証しない、といった制御を実行することができる。このようにすることによりＰＣＩパケットのヘッダＨＤをコマンドとして利用することができ、スイッチインタフェース２４において起動させるシステム機能の内容をより一層と詳細に指定することができる。
【０１２１】
さらに上述の実施の形態においては、ホスト５からコマンドが与えられるごとに、オーナＭＰ２０Ａが対応するスイッチインタフェースパラメータ３７を生成してスイッチインタフェース２４のパラメータ格納レジスタ４２における対応するパラメータ格納領域４２Ａに格納するようにした場合について述べたが、本発明はこれに限らず、一部又は全部のパラメータ格納領域４２Ａに固定的に固定のスイッチインタフェースパラメータ３７を格納しておくようにしてもよい。このようにすることにより、ホスト５から同じコマンドが繰り返し発行されるような場合に、より一層とホスト５から見たストレージシステム１のレスポンス性能を向上させることができる。
【０１２２】
さらに上述の実施の形態においては、１つのＭＰ２０Ａに対してパラメータ格納レジスタ４２の１つのパラメータ格納領域４２Ａを固定的に割り当てるようにした場合について述べたが、本発明はこれに限らず、ＭＰ２０Ａに対してパラメータ格納レジスタ４２の複数のパラメータ格納領域４２Ａを動的に割り当てるようにしてもよい。
【０１２３】
さらに上述の実施の形態においては、フロントエンド２２のプロトコルチップ３４がＰＣＩパケットによりシステム機能を起動するようにした場合について述べたが、本発明はこれに限らず、フロントエンド２２のプロトコルチップ３４がＰＣＩ以外の規格に応じたデータパケットによりシステム機能を起動できるようにしてもよい。
【０１２４】
本発明は、複数のストレージコントローラやストレージ装置から構成される種々の構成のストレージシステムに広く適用することができる。
【符号の説明】
【０１２５】
１……ストレージシステム、３，３Ａ〜３Ｄ……ストレージコントローラ、５，５Ａ〜５Ｄ……ホスト、６……記憶デバイス、７，７Ａ〜７Ｄ……記憶装置、２０……ＣＰＵ、２０Ａ……ＭＰ、２１……メモリ、２２……フロントエンド、２４……スイッチインタフェース、３４……プロトコルチップ、３７……スイッチインタフェースパラメータ、３８……プロトコルチップパラメータ、４２……パラメータ格納レジスタ、４２Ａ……パラメータ格納領域、４３……データバッファＲＡＭ、４３Ａ……データ格納領域、４４……ヘッダ／パラメータ読出し部、４５……パラメータ解読部、４６……機能実現部、４７……ＤＭＡ部、ＨＤ……ヘッダ。
【図１】
2019204463.tif 000003
【図２】
2019204463.tif 000004
【図３】
2019204463.tif 000005
【図４】
2019204463.tif 000006
【図５】
2019204463.tif 000007
【図６Ａ】
2019204463.tif 000008
【図６Ｂ】
2019204463.tif 000009
【図７】
2019204463.tif 000010
【図８】
2019204463.tif 000011
【図９Ａ】
2019204463.tif 000012
【図９Ｂ】
2019204463.tif 000013
【図１０】
2019204463.tif 000014
【図１１】
2019204463.tif 000015
【図１２】
2019204463.tif 000016
【図１３】
2019204463.tif 000017
【図１４】
2019204463.tif 000018
【図１５】
2019204463.tif 000019
【図１６】
2019204463.tif 000020
【図１７】
2019204463.tif 000021
【図１８】
2019204463.tif 000022