(57)【要約】【課題】ライトリクエストに対する応答時間の増加を抑制すること。【解決手段】ＣＭ＃ｉは、ＣＡ＃ｉに直接接続されるＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、ホスト装置１２０からのライトリクエストを受け付けたことに応じて、対応情報リストを参照して、ライトリクエストから特定されるＬＵＮに対応する担当ＣＭの論理アドレスを特定する。そして、ＣＭ＃ｉは、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、特定した担当ＣＭの論理アドレスを宛先に設定して、ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する。【選択図】図２
2018032061.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置に接続されるインターフェースと、
前記インターフェースに直接接続される、内部の回路を再構成可能な集積回路または専用の集積回路と、を有し、
前記集積回路は、
前記インターフェースを介して前記ホスト装置からのライトリクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、前記ライトリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、
特定した前記論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、ことを特徴とするストレージ制御装置。
【請求項２】
前記対応情報は、さらに、前記記憶装置と、前記記憶装置へのリクエストにかかるライトデータのミラーリングを行う第２のストレージ装置との対応関係を示し、
前記集積回路は、
前記対応情報を参照して、さらに、前記ライトリクエストから特定される記憶装置に対応する第２のストレージ制御装置の論理アドレスを特定し、
特定した前記第２のストレージ制御装置の論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記集積回路は、
前記インターフェースを介して前記ホスト装置からのリードリクエストを受け付けたことに応じて、前記対応情報を参照して、前記リードリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、
特定した前記論理アドレスを宛先に設定して、前記リードリクエストを転送する、ことを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
複数のストレージ制御装置を含むストレージシステムであって、
前記複数のストレージ制御装置のうちのいずれかのストレージ制御装置は、
ホスト装置に接続されるインターフェースと、
前記インターフェースを介して前記ホスト装置からのライトリクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、前記ライトリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、特定した前記論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、内部の回路を再構成可能な集積回路または専用の集積回路と、
を有することを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、およびストレージシステムに関する。
【背景技術】
【０００２】
従来、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の複数の記憶装置を格納した筐体を複数搭載して、ホスト装置へ記憶装置の記憶領域を提供するストレージシステムがある。また、このようなストレージシステムでは、ホスト装置と記憶装置との間のアクセス制御を行うストレージ制御装置が複数設けられることがある。
【０００３】
先行技術としては、例えば、データの書き込みが指示された場合に、ローカルキャッシュとミラーキャッシュへデータを書き込み、また、プライマリディスクへローカルキャッシュのデータを書き込むとともに、セカンダリディスクへミラーキャッシュのデータを書き込むものがある。また、複数のＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）コントローラが、複数のホスト・コンピュータに共用ストレージ・デバイスへの読取り／書込みアクセスを提供するＲＡＩＤシステムでキャッシュ・コヒーレンシを提供するためのものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２００４／１１４１１５号
【特許文献２】特表２００４−５３８５３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、複数のストレージ制御装置を含むストレージシステムにおいて、ホスト装置からのライトリクエストに対する応答時間が増大する場合がある。例えば、ホスト装置からのデータのストレージ制御装置間の転送処理に時間がかかり、ライトリクエストに対する応答時間が増大する場合がある。
【０００６】
一つの側面では、本発明は、ライトリクエストに対する応答時間の増加を抑制することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様によれば、ホスト装置からリクエストを受け付けるインターフェースと、前記インターフェースに直接接続される、内部の回路を再構成可能な集積回路または専用の集積回路と、を有し、前記集積回路が、前記インターフェースから前記リクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、受け付けた前記リクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、特定した前記論理アドレスを宛先に設定して、受け付けた前記リクエストを転送するストレージ制御装置が提案される。
【０００８】
本発明の一態様によれば、複数のストレージ制御装置を含むストレージシステムであって、前記複数のストレージ制御装置のうちのいずれかのストレージ制御装置が、ホスト装置からリクエストを受け付けるインターフェースと、前記インターフェースから前記リクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、受け付けた前記リクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、特定した前記論理アドレスを宛先に設定して、受け付けた前記リクエストを転送する、内部の回路を再構成可能な集積回路または専用の集積回路と、を有するストレージシステムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、ライトリクエストに対する応答時間の増加を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかるストレージ制御方法の一実施例を示す説明図である。
【図２】図２は、ＣＭ＃ｉのハードウェア構成例を示すブロック図である。
【図３】図３は、対応情報リスト３００の具体例を示す説明図である。
【図４】図４は、ＣＭ＃ｉのＦＰＧＡ＃ｉの機能的構成例を示すブロック図である。
【図５】図５は、ライトリクエスト時のストレージシステム１００の動作例を示す説明図である。
【図６】図６は、ライトリクエスト時のアドレス変換例を示す説明図である。
【図７Ａ】図７Ａは、ストレージシステム１００のライトリクエスト処理手順の一例を示すシーケンス図（その１）である。
【図７Ｂ】図７Ｂは、ストレージシステム１００のライトリクエスト処理手順の一例を示すシーケンス図（その２）である。
【図８】図８は、ストレージシステム１００のリードリクエスト処理手順の一例を示すシーケンス図である。
【図９】図９は、ＦＰＧＡ＃ｉのリクエスト処理の具体的処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、本発明にかかるストレージ制御装置、およびストレージシステムの実施の形態を詳細に説明する。
【００１２】
（実施の形態）
図１は、実施の形態にかかるストレージ制御方法の一実施例を示す説明図である。図１において、ストレージシステム１００は、ＣＥ（Ｃｏｎｔｒｏｌｌｅｒ  Ｅｎｃｌｏｓｕｒｅ）＄０，＄１と、ＤＥ（Ｄｅｖｉｃｅ  Ｅｎｃｌｏｓｕｒｅ）＄０，＄１と、を含む。ストレージシステム１００は、例えば、ＲＡＩＤ５，６等のデータを冗長化して記憶するＲＡＩＤ構成のシステムである。
【００１３】
ＣＥ＄０は、ＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）＃０，＃１を有する。ＣＥ＄１は、ＣＭ＃２，＃３を有する。各ＣＭ＃０〜＃３は、自配下のストレージに対するアクセスを制御するストレージ制御装置の一例である。各ＣＭ＃０〜＃３は、ＦＲＴ（Ｆｒｏｎｔ  Ｅｎｄ  Ｒｏｕｔｅｒ）１１０を介して、互いに通信可能に接続される。
【００１４】
なお、ＣＭ＃０〜＃３のハードウェア構成例については、図２を用いて後述する。
【００１５】
ＦＲＴ１１０は、ＦＲＴ−ＳＷ（ｓｗｉｔｃｈ）１１１を有し、ＣＭ間を互いに通信可能に接続する接続部の一例である。ＦＲＴ１１０は、例えば、ＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）に準拠したアダプタを複数有し、各ＣＭ＃０〜＃３とＰＣＩｅに対応したケーブル等によって接続されてもよい。
【００１６】
なお、図１では、ＣＭ間を接続するＦＲＴとして、ＦＲＴ１１０のみ表記したが、２以上のＦＲＴにより冗長化されていてもよい。
【００１７】
また、ＣＭ＃０〜＃３には、ホスト装置１２０が接続される。ＣＭ＃０〜＃３とホスト装置１２０は、例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）やｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）などを用いたＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）を介して接続される。また、ＣＭ＃０〜＃３とホスト装置１２０は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）やインターネット等を介して接続されることにしてもよい。
【００１８】
なお、図１では、１台のホスト装置１２０がＣＭ＃０〜＃３に接続される場合を例に挙げて説明したが、これに限らない。例えば、複数台のホスト装置のそれぞれが、ＣＭ＃０〜＃３のうちの１以上のＣＭに接続されることにしてもよい。
【００１９】
ＤＥ＄０，＄１は、複数の記憶装置Ｄを有する。記憶装置Ｄは、例えば、ＨＤＤやＳＳＤなどであってもよく、また、論理的な記憶装置である論理ユニット（ＬＵ：Ｌｏｇｉｃａｌ  Ｕｎｉｔ）であってもよい。なお、図１では、ＤＥ＄０，＄１が記憶装置Ｄを有することにしたが、例えば、ＣＥ＄０，＄１が記憶装置Ｄを有することにしてもよい。
【００２０】
ＣＭ＃０，＃１には、ＤＥ＄０が接続される。ＣＭ＃０，＃１は、ホスト装置１２０または他のＣＭからのリクエストに応じて、ＤＥ＄０に搭載された記憶装置Ｄに対するアクセスを制御する。図１の例では、ＤＥ＄０には、ＣＭ＃０が担当するＲＡＩＤグループＲＧ０〜ＲＧ３と、ＣＭ＃１が担当するＲＡＩＤグループＲＧ４〜ＲＧ７と、が含まれる。ＲＡＩＤグループは、複数の記憶装置Ｄをまとめて一つの記憶装置としたものである。この場合、例えば、ＣＭ＃０は、ホスト装置１２０または他のＣＭからのリクエストに応じて、ＲＡＩＤグループＲＧ０〜ＲＧ３に対するアクセスを制御する。
【００２１】
また、ＣＭ＃２，＃３には、ＤＥ＄１が接続される。ＣＭ＃２，＃３は、ホスト装置１２０または他のＣＭからのリクエストに応じて、ＤＥ＄１に搭載された記憶装置Ｄに対するアクセスを制御する。図１の例では、ＤＥ＄１には、ＣＭ＃２が担当するＲＡＩＤグループＲＧ０〜ＲＧ３と、ＣＭ＃３が担当するＲＡＩＤグループＲＧ４〜ＲＧ７と、が含まれる。この場合、例えば、ＣＭ＃２は、ホスト装置１２０または他のＣＭからのリクエストに応じて、ＲＡＩＤグループＲＧ０〜ＲＧ３に対するアクセスを制御する。
【００２２】
なお、ＣＥ＄０とＤＥ＄０は、例えば、１つの筐体に搭載されるストレージ装置として実現される。同様に、ＣＥ＄１とＤＥ＄１は、１つの筐体に搭載されるストレージ装置として実現される。また、ストレージシステム１００に含まれるＣＥの数は２台に限定されるものではなく、各ＣＥに含まれるＣＭの数も２台に限定されるものではない。
【００２３】
ここで、従来のストレージシステムでは、ライトリクエスト時に、ホスト装置からＲＡＩＤ演算するデータを、当該ＲＡＩＤ演算を担当する第１のＣＭ（以下、「担当ＣＭ」という）に転送後、転送したデータを第２のＣＭ（以下、「ミラーＣＭ」という）のメモリにコピー（ミラーリング）することで、データの冗長化を行っている。
【００２４】
しかし、冗長化完了をもってホスト装置へ応答を返すため、ライトリクエストに対する応答時間がその分増加する。なお、ＲＡＩＤ演算は、例えば、ホスト装置１２０からリクエスト（ライトリクエスト、リードリクエスト）に応じて行われるデータの分割、パリティ計算等を含む。
【００２５】
一方で、ホスト装置からＲＡＩＤ演算するデータを担当ＣＭに転送するにあたり、物理的な接続関係が要因となって、他のＣＭを経由することがある。この際、ホスト装置からデータを受け取ったＣＭ（以下、「レシーブＣＭ」という）は、当該データから担当ＣＭを判断して、担当ＣＭに転送するため、レシーブＣＭが担当ＣＭである場合に比べて、ライトリクエストに対する応答時間が増加する。
【００２６】
具体的には、例えば、レシーブＣＭが、ホスト装置からデータを受信すると、当該データをメモリに一旦格納する。そして、レシーブＣＭのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が、メモリに格納したデータを解析して、どのＣＭでＲＡＩＤ演算するものであるかを判断し、担当ＣＭに当該データを転送する。
【００２７】
担当ＣＭは、レシーブＣＭからデータを受信すると、当該データをメモリに格納する。そして、担当ＣＭのＣＰＵが、メモリに格納したデータを解析して、どのＣＭにコピー（ミラーリング）するのかを判断し、ミラーＣＭに当該データ（コピーデータ）を転送する。また、担当ＣＭは、ミラーＣＭからミラーリング処理の完了を受けると、レシーブＣＭを介して、ホスト装置に応答を返す。
【００２８】
このように、従来のストレージシステムでは、ホスト装置から受信したデータは、一旦メモリに格納してからＣＰＵが処理するようになっている。したがって、レシーブＣＭが担当ＣＭでなくても、ホスト装置から受信したデータは一旦メモリに格納され、メモリアクセスにかかる処理負荷や処理時間がかかる。
【００２９】
なお、レシーブＣＭを経由せずにＰＣＩｅツリー外のＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）にアクセスする場合、ホスト装置からのライトリクエスト時に、ＣＡから全ＣＭに対し、割り込みとしてライトリクエストをブロードキャストすることで、ホスト装置からのライトリクエストを担当ＣＭが直接受信できるようにすることが考えられる。
【００３０】
ライトリクエストのパケットの中にはデータのＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）、サイズの情報が格納されている。このため、各ＣＭは受け取ったライトリクエストの内容を確認して、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を指示する。また、ホスト装置からのライトデータもブロードキャストする場合、全てのＣＭに全てのＣＡから送信されるデータを格納するキャッシュ域を準備すれば、ミラーリングも可能である。
【００３１】
ところが、ＣＭが多数の場合、例えば、２４ＣＭ構成になると、割込頻度が２４倍となり、各ＣＭの割込（例外）処理が増える。割込処理はＲＡＩＤ演算などの通常動作を止めて実施するため、割込が増えた場合はシステムの性能ダウンを引き起こしてしまう。また、ＣＡが増えると、ホスト装置からのライトデータを格納する領域（数）も増えるため、システム資源の無駄が多くなる。
【００３２】
そこで、本実施の形態では、レシーブＣＭにおいて、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や専用ＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）などの集積回路を用いて、ＣＰＵやメモリを介さずに、ホスト装置１２０からのリクエストを解析して転送先を特定し、担当ＣＭやミラーＣＭへのデータ転送を行うことで、ホスト装置１２０からのリクエストに対する応答時間の増加を抑制する。
【００３３】
（ＣＭ＃０〜＃３のハードウェア構成例）
つぎに、ＣＭ＃０〜＃３のハードウェア構成例について説明する。以下の説明では、ＣＭ＃０〜＃３のうちの任意のＣＭを「ＣＭ＃ｉ」と表記する場合がある（ｉ＝０，１，２，３）。
【００３４】
図２は、ＣＭ＃ｉのハードウェア構成例を示すブロック図である。図２において、ＣＭ＃ｉは、ＣＰＵ＃ｉと、ＭＥＭ（Ｍｅｍｏｒｙ）＃ｉと、ＩＯＣ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｃｏｎｔｒｏｌｌｅｒ）＃ｉと、ＣＡ＃ｉと、ＦＰＧＡ＃ｉと、ＳＷ＃ｉと、を含む。各構成部は、バスによってそれぞれ接続される。
【００３５】
ＣＰＵ＃ｉは、ＣＭ＃ｉの全体の制御を司る。ＣＰＵ＃ｉは、ＤＭＡの機能を有する。ＤＭＡは、例えば、ＰＣＩｅバスから直接（ＣＰＵ＃ｉの演算を介さずに）ＭＥＭ＃ｉにリード、ライトする技術である。なお、ここではＣＰＵ＃ｉがＤＭＡの機能を有することにしたが、ＣＰＵ＃ｉとは別に、ＤＭＡ転送における通信を制御するＤＭＡコントローラを有することにしてもよい。
【００３６】
ＭＥＭ＃ｉは、データやプログラムを格納する。ＭＥＭ＃ｉは、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ＃ｉのワークエリアとして使用される。ＭＥＭ＃ｉに記憶されるプログラムは、ＣＰＵ＃ｉにロードされることで、コーディングされている処理をＣＰＵ＃ｉに実行させる。ＭＥＭ＃ｉは、データやプログラムを一時的に記憶するキャッシュメモリとしても用いられてもよい。
【００３７】
ＩＯＣ＃ｉは、記憶装置Ｄへのアクセス（Ｉ／Ｏ）を制御するＩ／Ｏ制御部である。ＣＡ＃ｉは、ホスト装置１２０と通信するためのインターフェースである。ＣＡ＃ｉは、例えば、ＬＡＮ、ＳＡＮ、ＦＣ等に準拠したアダプタを有する。ＦＰＧＡ＃ｉは、内部の回路を再構成可能な集積回路である。ＳＷ＃ｉは、他のＣＭと通信するためのインターフェースである。ＳＷ＃ｉは、例えば、他のＣＭと接続するためのポートを有するＰＣＩｅスイッチである。
【００３８】
ＣＭ＃ｉにおいて、ＣＰＵ＃ｉ／ＳＷ＃ｉ間、ＩＯＣ＃ｉ／ＳＷ＃ｉ間およびＦＰＧＡ＃ｉ／ＳＷ＃ｉ間は、例えば、ＰＣＩｅバスによって接続される。また、ＣＰＵ＃ｉ／ＭＥＭ＃ｉ間は、メモリバスによって接続される。また、ＩＯＣ＃ｉ／ＤＥ（ＤＥ＄０，＄１）間は、例えば、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）により接続される。
【００３９】
なお、図２では、ＣＭ＃ｉがＦＰＧＡ＃ｉを有することにしたが、これに限らない。例えば、ＣＭ＃ｉにおいてＦＰＧＡ＃ｉが行う処理を、専用ＬＳＩにより実現することにしてもよい。
【００４０】
（対応情報リスト３００の具体例）
つぎに、図２に示したＣＭ＃ｉのＦＰＧＡ＃ｉが有する対応情報リスト３００の具体例について説明する。
【００４１】
図３は、対応情報リスト３００の具体例を示す説明図である。図３において、対応情報リスト３００は、ＬＵＮ情報と、担当ＣＭ情報と、ミラーＣＭ情報と、を対応付けて表す対応情報３００−１〜３００−１０を含む。ＬＵＮ情報は、アクセス先となる論理ユニット（ＬＵ）を識別するＬＵＮを示す。担当ＣＭ情報は、担当ＣＭの論理アドレスを示す。ミラーＣＭ情報は、ミラーＣＭの論理アドレスを示す。
【００４２】
例えば、対応情報３００−１は、ＬＵＮ０へのリクエストが発生した際の担当ＣＭ＃０の論理アドレス「００００＿２０００＿００００＿００００」を示す。また、対応情報３００−１は、ＬＵＮ０へのリクエストが発生した際のミラーＣＭ＃２の論理アドレス「００００＿２２００＿００００＿００００」を示す。
【００４３】
（ＣＭ＃ｉのＦＰＧＡ＃ｉの機能的構成例）
図４は、ＣＭ＃ｉのＦＰＧＡ＃ｉの機能的構成例を示すブロック図である。図４において、ＦＰＧＡ＃ｉは、受付部４０１と、特定部４０２と、転送部４０３と、を含む構成である。具体的には、例えば、各機能（受付部４０１〜転送部４０３）をＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を用いて機能定義し、そのＨＤＬ記述を論理合成してＦＰＧＡ＃ｉに与えることにより、その機能を実現する。
【００４４】
受付部４０１は、ＣＡ＃ｉを介して、ホスト装置１２０からのリクエストを受け付ける。ここで、リクエストは、例えば、ＤＥ＄０，＄１内のいずれかのＲＡＩＤグループに対するライトリクエスト（書込要求）またはリードリクエスト（読出要求）である。リクエストには、例えば、アクセス先のＬＵＮ情報やライトデータ（書込データ）またはリードデータ（読出データ）のデータサイズなどが含まれている。
【００４５】
具体的には、例えば、まず、ＣＡ＃ｉが、ホスト装置１２０からリクエストを受け付けたことに応じて、当該リクエストのＤＭＡ  ＷｒｉｔｅをＦＰＧＡ＃ｉに指示する。この結果、ホスト装置１２０からのリクエストは、ＭＥＭ＃ｉに格納されることなく直接ＦＰＧＡ＃ｉに送られる。
【００４６】
特定部４０２は、ホスト装置１２０からのリクエストを受け付けたことに応じて、当該リクエストの宛先を特定する。具体的には、例えば、特定部４０２は、当該リクエストのコマンド種別を判断する。ここで、特定部４０２は、ライトリクエストであると判断した場合には、当該ライトリクエストに含まれるＬＵＮを特定する。このＬＵＮは、アクセス先となる論理ユニットを識別する情報である。そして、特定部４０２は、対応情報リスト３００を参照して、特定したＬＵＮに対応する担当ＣＭ情報およびミラーＣＭ情報を特定する。
【００４７】
これにより、ライトリクエストの宛先として、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋの論理アドレスを特定することができる。担当ＣＭ＃ｊは、ライトリクエストにかかるライトデータのＲＡＩＤ演算を担当するＣＭである。ミラーＣＭ＃ｋは、ライトリクエストにかかるライトデータのミラーリングを担当するＣＭである。なお、ライトリクエスト時は、ＣＭ＃ｉが担当ＣＭ＃ｊまたはミラーＣＭ＃ｋのいずれかである場合がある。
【００４８】
また、特定部４０２は、リードリクエストであると判断した場合、当該リードリクエストに含まれるＬＵＮを特定する。このＬＵＮは、アクセス先となる論理ユニットを識別する情報である。そして、特定部４０２は、対応情報リスト３００を参照して、特定したＬＵＮに対応する担当ＣＭ情報を特定する。
【００４９】
これにより、リードリクエストの宛先として、担当ＣＭ＃ｊの論理アドレスを特定することができる。担当ＣＭ＃ｊは、リードリクエストにかかるリードデータのＲＡＩＤ演算を担当するＣＭである。なお、リードリクエスト時は、ＣＭ＃ｉが担当ＣＭ＃ｊである場合がある。
【００５０】
転送部４０３は、ホスト装置１２０からのリクエストを、特定部４０２によって特定された当該リクエストの宛先に転送する。具体的には、例えば、ライトリクエストの場合には、転送部４０３は、特定された担当ＣＭ＃ｊの論理アドレスおよびミラーＣＭ＃ｋの論理アドレスをそれぞれ宛先に設定して、ライトリクエストをＳＷ＃ｉに転送する。
【００５１】
この結果、ＳＷ＃ｉにおいてアドレス変換が行われ、ホスト装置１２０からのライトリクエストが、ＦＲＴ１１０を介して、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋにそれぞれ転送される。また、ライトリクエストの場合、ホスト装置１２０からライトリクエストが送られてきたあとに、当該ライトリクエストにかかるライトデータが転送されてくる。転送部４０３は、直前の宛先（ライトリクエストの宛先）を記憶しており、ホスト装置１２０からのライトデータを、その宛先に転送する。なお、ライトリクエストの転送例については、図５および図６を用いて後述する。
【００５２】
また、リードリクエストの場合には、転送部４０３は、リードリクエストの宛先に、特定された担当ＣＭ＃ｊの論理アドレスを設定して、ＳＷ＃ｉに転送する。この結果、ＳＷ＃ｉにおいてアドレス変換が行われ、ホスト装置１２０からのリードリクエストが、ＦＲＴ１１０を介して、担当ＣＭ＃ｊに転送される。
【００５３】
なお、ＰＣＩｅのバスでは、基本的にはピアツーピア（Ｐ２Ｐ）の通信が行われるが、これではＦＰＧＡ＃ｉは、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋのいずれから送られてきたデータであるかを判断できなくなる。このため、ＦＰＧＡ＃ｉは、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋそれぞれとやり取りができるように、例えば、ミラーＣＭ＃ｋに仮想的なＢｕｓ（バス）／Ｄｅｖ（デバイス）／Ｆｕｎｃ（機能）を割り当てる。
【００５４】
これにより、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋそれぞれとやり取りするための受け口を設けることができる。仮想的なＢｕｓ／Ｄｅｖ／Ｆｕｎｃを割り当てる技術としては、例えば、既存のＳＲ−ＩＯＶ（Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉ／Ｏ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ）を用いることができる。ＳＲ−ＩＯＶは、ＰＣＩデバイス側で仮想化をサポートする機能である。
【００５５】
また、上述したＦＰＧＡ＃ｉの各機能は、専用の集積回路（例えば、専用ＬＳＩ）により実現することにしてもよい。具体的には、例えば、ＦＰＧＡ＃ｉの各機能（特定部４０２〜転送部４０３）をＨＤＬ（あるいは、回路図）を用いて機能定義し、そのＨＤＬ記述を論理合成して得られる回路情報に基づいて、その機能を実現する専用ＬＳＩを製造することができる。
【００５６】
（ライトリクエストの転送例）
つぎに、図５および図６を用いて、ライトリクエストの転送例について説明する。
【００５７】
図５は、ライトリクエスト時のストレージシステム１００の動作例を示す説明図である。また、図６は、ライトリクエスト時のアドレス変換例を示す説明図である。ここでは、ＣＭ＃０のＣＡ＃０が、ホスト装置１２０からＬＵＮ３の「００００＿００００＿００００＿００００」へのライトリクエストを受け付けた場合を想定する。すなわち、ＣＭ＃０は、レシーブＣＭである。
【００５８】
この場合、ＦＰＧＡ＃０は、ＣＡ＃０からライトリクエストを受け付けると、当該ライトリクエストに含まれるＬＵＮ３を特定する。そして、図６に示すように、ＦＰＧＡ＃０は、対応情報リスト３００を参照して、ＬＵＮ３に対応する担当ＣＭ＃３の論理アドレス「００００＿２３００＿００００＿００００」およびミラーＣＭ＃１の論理アドレス「００００＿２１００＿００００＿００００」を特定する。
【００５９】
つぎに、ＦＰＧＡ＃０は、ライトリクエストの宛先に、担当ＣＭ＃３の論理アドレス「００００＿２３００＿００００＿００００」およびミラーＣＭ＃１の論理アドレス「００００＿２１００＿００００＿００００」をそれぞれ設定して、ＳＷ＃０に転送する。
【００６０】
ＳＷ＃０は、ＦＰＧＡ＃０からライトリクエストを受け付けると、メモリマップ６００を参照して、当該ライトリクエストのアドレス変換を行って、ＦＲＴ１１０に出力する。具体的には、ＳＷ＃０は、担当ＣＭ＃３の論理アドレス宛のライトリクエストを受け付けると、当該ライトリクエストを論理アドレス「００００＿２３００＿００００＿００００〜００００＿２３８０＿００００＿００００」の範囲に対応するパスに出力する。また、ＳＷ＃０は、担当ＣＭ＃１の論理アドレス宛のライトリクエストを受け付けると、当該ライトリクエストを論理アドレス「００００＿２１００＿００００＿００００〜００００＿２１８０＿００００＿００００」の範囲に対応するパスに出力する。
【００６１】
この結果、ＮＴＶ（Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｖｉｒｔｕａｌ）アドレス変換され、ＦＲＴ１１０において、物理アドレス空間へのアドレス変換が行われる（ＮＴＬ（Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｌｉｎｋ）アドレス変換）。具体的には、ＦＲＴ−ＳＷ１１１において、各パスに対応する担当ＣＭ＃３のＳＷ＃３およびミラーＣＭ＃１のＳＷ＃１の論理アドレスへの変換が行われ、ライトリクエストが各ＳＷ＃１，＃３に転送される。各スイッチＳＷ＃１，＃３では、各ＭＥＭ＃１，＃３上の物理アドレスへの変換が行われて、ライトリクエストがＭＥＭ＃１，＃３に書き込まれる。
【００６２】
（ストレージシステム１００のライトリクエスト処理手順）
つぎに、ストレージシステム１００のライトリクエスト処理手順について説明する。ここでは、レシーブＣＭが担当ＣＭおよびミラーＣＭと異なる場合を例に挙げて説明する。
【００６３】
図７Ａおよび図７Ｂは、ストレージシステム１００のライトリクエスト処理手順の一例を示すシーケンス図である。図７Ａのシーケンス図において、まず、レシーブＣＭ＃ｉのＣＡ＃ｉは、ホスト装置１２０からライトリクエスト（ＦＣＰ  Ｃｏｍｍａｎｄ）を受け付けると、ホスト装置１２０からのライトリクエストをＦＰＧＡ＃ｉに出力する（ステップＳ７０１）。
【００６４】
つぎに、レシーブＣＭ＃ｉのＦＰＧＡ＃ｉは、ＣＡ＃ｉからライトリクエストを受け付けると、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋにライトリクエストを転送するリクエスト処理を実行する（ステップＳ７０２）。この際、ＦＰＧＡ＃ｉは、ミラーＣＭ＃ｋに対して仮想的なＢｕｓ／Ｄｅｖ／Ｆｕｎｃを割り当てる。
【００６５】
この結果、担当ＣＭ＃ｊのＭＥＭ＃ｊおよびミラーＣＭ＃ｋのＭＥＭ＃ｋのＲｅｓｐｏｎｓｅ  ｑｕｅｕｅにＩＯＣＢ（Ｉ／Ｏコマンド（制御）・ブロック）が格納される。ＩＯＣＢは、プロトコルのフロー制御等に使用されるデータであり、例えば、ライトリクエストの内容を示す情報が含まれる。
【００６６】
なお、ＦＰＧＡ＃ｉのリクエスト処理の具体的な処理手順は、図９を用いて後述する。
【００６７】
つぎに、ＣＡ＃ｉは、ＦＰＧＡ＃ｉを介して、担当ＣＭ＃ｊのＣＰＵ＃ｊ（ドライバ）およびミラーＣＭ＃ｋのＣＰＵ＃ｋ（ドライバ）に割り込みを通知する（ステップＳ７０３）。ＦＰＧＡ＃ｉでは、直前の宛先、すなわち、ライトリクエストの転送先である担当ＣＭ＃ｊおよびミラーＣＭ＃ｋの論理アドレスが記憶されている。このため、ＣＡ＃ｉからの割り込みは、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋの論理アドレス宛にそれぞれ通知される。
【００６８】
担当ＣＭ＃ｊのＣＰＵ＃ｊおよびミラーＣＭ＃ｋのＣＰＵ＃ｋは、割り込みを受けると割込要因を読み込む（ステップＳ７０４）。この際、担当ＣＭ＃ｊのＣＰＵ＃ｊは、直接ＣＡ＃ｉへアクセスして割込要因を読み込む。一方、ミラーＣＭ＃ｋのＣＰＵ＃ｋは、ＦＰＧＡ＃ｉの仮想的なＢｕｓ／Ｄｅｖ／Ｆｕｎｃにアクセスして、コピーされた割込要因を読み込む。
【００６９】
ここで、割込要因がＩＯＣＢであれば、各ＣＰＵ＃ｊ，＃ｋにおいて、ＭＥＭ＃ｊ，＃ｋ内のＤＭＡ情報（ライトデータのサイズ等）を参照して、ライトデータ用のキャッシュ領域の確保等の準備が行われる。
【００７０】
そして、ＦＰＧＡ＃ｉは、各ＣＰＵ＃ｊ，＃ｋにおける準備が完了するのを待ち合わせて、各ＣＰＵ＃ｊ，＃ｋの準備が完了すると、その旨をＣＡ＃ｉに通知する（ステップＳ７０５）。ＣＡ＃ｉは、各ＣＰＵ＃ｊ，＃ｋの準備が完了すると、ホスト装置１２０にデータ転送を要求する（ステップＳ７０６）。
【００７１】
図７Ｂのシーケンス図において、まず、ホスト装置１２０は、ＣＡ＃ｉからデータ転送の要求を受け付けると、ライトデータの転送を開始する（ステップＳ７０７）。ＣＡ＃ｉは、ＦＰＧＡ＃ｉを介して、担当ＣＭ＃ｊのＭＥＭ＃ｊおよびミラーＣＭ＃ｋのＭＥＭ＃ｋにライトデータを転送する（ステップＳ７０８）。ライトデータには、例えば、データ訂正コード（ＢＣＣ：Ｂｌｏｃｋ  Ｃｈｅｃｋ  Ｃｏｄｅ）が付加される。
【００７２】
そして、ＣＡ＃ｉは、データ転送が完了すると、ＦＰＧＡ＃ｉを介して、各ＭＥＭ＃ｊ，＃ｋのＲｅｓｐｏｎｓｅ  ｑｕｅｕｅにＤａｔａ転送完了のＩＯＣＢをそれぞれ格納する（ステップＳ７０９）。つぎに、ＣＡ＃ｉは、ＦＰＧＡ＃ｉを介して、担当ＣＭ＃ｊのＣＰＵ＃ｊ（ドライバ）およびミラーＣＭ＃ｋのＣＰＵ＃ｋ（ドライバ）に割り込みを通知する（ステップＳ７１０）。
【００７３】
各ＣＰＵ＃ｊ，＃ｋは、割り込みを受けると、割込要因を読み込んで刈り取る（ステップＳ７１１）。そして、各ＣＰＵ＃ｊ，＃ｋは、データ転送が正常に完了したことを確認したら、各ＭＥＭ＃ｊ，＃ｋのＲｅｓｐｏｎｓｅ  ｑｕｅｕｅにデータ転送正常完了のＩＯＣＢを格納して、レジスタ（ＩＯＣＢ  ＤＭＡ起動）への書き込みを行う（ステップＳ７１２）。この際、ＣＰＵ＃ｊは、直接ＣＡ＃ｉへアクセスする一方で、ＣＰＵ＃ｋは、ＦＰＧＡ＃ｉの仮想的なＢｕｓ／Ｄｅｖ／Ｆｕｎｃにアクセスする。
【００７４】
つぎに、ＦＰＧＡ＃ｉは、各ＣＰＵ＃ｊ，＃ｋにおけるデータ転送完了を待ち合わせて、各ＣＰＵ＃ｊ，＃ｋのデータ転送が正常に完了すると、その旨をＣＡ＃ｉに通知する（ステップＳ７１３）。そして、ＣＡ＃ｉは、各ＣＰＵ＃ｊ，＃ｋのデータ転送が正常に完了すると、ホスト装置１２０にＳｔａｔｕｓ転送正常完了通知を送信する（ステップＳ７１４）。
【００７５】
なお、ホスト装置１２０にＳｔａｔｕｓ転送正常完了通知が送信されると、各ＣＰＵ＃ｊ，＃ｋに対して処理が正常に完了したことが通知され、その結果、各ＣＰＵ＃ｊ，＃ｋにおいて、キャッシュ領域を解放するなどの後処理が行われる。
【００７６】
これにより、レシーブＣＭ＃ｉのＦＰＧＡ＃ｉにおいて、ホスト装置１２０からのライトリクエストの宛先を解析して、ライトリクエストおよびライトデータを担当ＣＭ＃ｊおよびミラーＣＭ＃ｋに転送することができる。
【００７７】
（ストレージシステム１００のリードリクエスト処理手順）
つぎに、ストレージシステム１００のリードリクエスト処理手順について説明する。ここでは、レシーブＣＭが担当ＣＭと異なる場合を例に挙げて説明する。
【００７８】
図８は、ストレージシステム１００のリードリクエスト処理手順の一例を示すシーケンス図である。図８のシーケンス図において、まず、レシーブＣＭ＃ｉのＣＡ＃ｉは、ホスト装置１２０からリードリクエスト（ＦＣＰ  Ｃｏｍｍａｎｄ）を受け付けると、ホスト装置１２０からのリードリクエストをＦＰＧＡ＃ｉに出力する（ステップＳ８０１）。
【００７９】
つぎに、レシーブＣＭ＃ｉのＦＰＧＡ＃ｉは、ＣＡ＃ｉからリードリクエストを受け付けると、担当ＣＭ＃ｊにリードリクエストを転送するリクエスト処理を実行する（ステップＳ８０２）。この結果、担当ＣＭ＃ｊのＭＥＭ＃ｊのＲｅｓｐｏｎｓｅ  ｑｕｅｕｅにＩＯＣＢが格納される。
【００８０】
なお、ＦＰＧＡ＃ｉリクエスト処理の具体的な処理手順は、図９を用いて後述する。
【００８１】
つぎに、レシーブＣＭ＃ｉのＣＡ＃ｉは、ＦＰＧＡ＃ｉを介して、担当ＣＭ＃ｊのＣＰＵ＃ｊ（ドライバ）に割り込みを通知する（ステップＳ８０３）。ＦＰＧＡ＃ｉでは、直前の宛先、すなわち、リードリクエストの転送先である担当ＣＭ＃ｊの論理アドレスが記憶されている。このため、ＣＡ＃ｉからの割り込みは、担当ＣＭ＃ｊの論理アドレス宛に通知される。
【００８２】
担当ＣＭ＃ｊのＣＰＵ＃ｊは、割り込みを受けると、直接ＣＡ＃ｉへアクセスして割込要因を読み込む（ステップＳ８０４）。ここで、割込要因がＩＯＣＢであれば、ＣＰＵ＃ｊにおいて、ＭＥＭ＃ｊ内のＤＭＡ情報を参照して、ＣＡ＃ｉが読み込むＭＥＭ＃ｊ内の領域にリードデータを書き込む等の準備が行われる。
【００８３】
ＣＡ＃ｉは、ＣＰＵ＃ｊの準備が完了し、転送データ（リードデータ）の転送準備が完了すると、ＭＥＭ＃ｊからリードデータを読み出して、ホスト装置１２０にリードデータ（ＢＣＣ取外）を転送する（ステップＳ８０５）。そして、ＣＡ＃ｉは、リードデータの転送が完了すると、ホスト装置１２０にＲｅａｄデータ送信正常完了通知を送信する（ステップＳ８０６）。
【００８４】
なお、ホスト装置１２０にＲｅａｄデータ送信正常完了通知が送信されると、ＣＰＵ＃ｊに対して処理が正常に完了したことが通知され、その結果、ＣＰＵ＃ｊにおいて、ＭＥＭ＃ｊ内のリードデータを削除するなどの後処理が行われる。
【００８５】
これにより、レシーブＣＭ＃ｉのＦＰＧＡ＃ｉにおいて、ホスト装置１２０からのライトリクエストの宛先を解析して、リードリクエストを担当ＣＭ＃ｊに転送することができる。
【００８６】
（リクエスト処理の具体的処理手順）
つぎに、ＦＰＧＡ＃ｉのリクエスト処理の具体的な処理手順について説明する。
【００８７】
図９は、ＦＰＧＡ＃ｉのリクエスト処理の具体的処理手順の一例を示すフローチャートである。図９のフローチャートにおいて、まず、ＦＰＧＡ＃ｉは、ホスト装置１２０からのリクエストをＣＡ＃ｉから受け付ける（ステップＳ９０１）。つぎに、ＦＰＧＡ＃ｉは、受け付けたリクエストがライトリクエストであるか否かを判断する（ステップＳ９０２）。
【００８８】
ここで、ライトリクエストの場合（ステップＳ９０２：Ｙｅｓ）、ＦＰＧＡ＃ｉは、ライトリクエスト（ＦＣＰ  Ｃｏｍｍａｎｄ）に含まれるアクセス先のＬＵＮを特定する（ステップＳ９０３）。つぎに、ＦＰＧＡ＃ｉは、対応情報リスト３００を参照して、特定したアクセス先のＬＵＮに対応する担当ＣＭ＃ｊおよびミラーＣＭ＃ｋの論理アドレスを特定する（ステップＳ９０４）。
【００８９】
そして、ＦＰＧＡ＃ｉは、特定した担当ＣＭ＃ｊおよびミラーＣＭ＃ｋの論理アドレスをライトリクエストの宛先にそれぞれ設定して、当該ライトリクエストをＳＷ＃ｉに転送し（ステップＳ９０５）、本フローチャートによる一連の処理を終了する。これにより、ＦＰＧＡ＃ｉにより、ホスト装置１２０からのライトリクエストを担当ＣＭ＃ｊおよびミラーＣＭ＃ｋに転送することができる。
【００９０】
また、ステップＳ９０２において、リードリクエストの場合（ステップＳ９０２：Ｎｏ）、ＦＰＧＡ＃ｉは、ライトリクエスト（ＦＣＰ  Ｃｏｍｍａｎｄ）に含まれるアクセス先のＬＵＮを特定する（ステップＳ９０６）。つぎに、ＦＰＧＡ＃ｉは、対応情報リスト３００を参照して、特定したアクセス先のＬＵＮに対応する担当ＣＭ＃ｊの論理アドレスを特定する（ステップＳ９０７）。
【００９１】
そして、ＦＰＧＡ＃ｉは、特定した担当ＣＭ＃ｊの論理アドレスをリードリクエストの宛先に設定して、当該リードリクエストをＳＷ＃ｉに転送し（ステップＳ９０８）、本フローチャートによる一連の処理を終了する。これにより、ＦＰＧＡ＃ｉにより、ホスト装置１２０からのリードリクエストを担当ＣＭ＃ｊに転送することができる。
【００９２】
以上説明したように、実施の形態にかかるＣＭ＃ｉによれば、ＣＡ＃ｉに直接接続されるＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、ホスト装置１２０からのライトリクエストを受け付けたことに応じて、対応情報リスト３００を参照して、ライトリクエストから特定されるＬＵＮに対応する担当ＣＭ＃ｊの論理アドレスを特定することができる。そして、ＣＭ＃ｉによれば、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、特定した担当ＣＭ＃ｊの論理アドレスを宛先に設定して、ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送することができる。
【００９３】
これにより、ＣＡ＃ｉに直接接続されたＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）を用いて、ＣＰＵ＃ｉやＭＥＭ＃ｉを介さずに、ホスト装置１２０からのライトリクエストの転送先を解析して、担当ＣＭ＃ｊへライトリクエストおよびライトデータを転送することができる。この結果、ライトリクエスト時に、ホスト装置１２０からのデータをＭＥＭ＃ｉに一旦格納する必要がなくなり、ＣＰＵ＃ｉが処理する場合に比べて、ライトリクエストに対する応答時間の増加を抑制することができる。また、ライトリクエスト時に、ＣＰＵ＃ｉへの割り込みが発生しないため、ＣＰＵ＃ｉで実行中の処理が中断されるのを防いで、ストレージシステム１００の性能向上を図ることができる。
【００９４】
また、ＣＭ＃ｉによれば、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、対応情報リスト３００を参照して、さらに、ライトリクエストから特定されるＬＵＮに対応するミラーＣＭ＃ｋの論理アドレスを特定することができる。そして、ＣＭ＃ｉによれば、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、特定したミラーＣＭ＃ｋの論理アドレスを宛先に設定して、ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送することができる。
【００９５】
これにより、ＣＡ＃ｉに直接接続されたＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）を用いて、ＣＰＵ＃ｉやＭＥＭ＃ｉを介さずに、ミラーＣＭ＃ｋへライトリクエストおよびライトデータを転送して、ライトデータの冗長化を行うことができる。また、担当ＣＭ＃ｊおよびミラーＣＭ＃ｋに対して一斉にデータ転送することができるため、担当ＣＭ＃ｋからミラーＣＭ＃ｋへデータ転送する場合に比べて、ライトリクエストに対する応答時間を短縮することができる。
【００９６】
また、ＣＭ＃ｉによれば、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、ホスト装置１２０からのリードリクエストを受け付けたことに応じて、対応情報リスト３００を参照して、リードリクエストから特定されるＬＵＮに対応する担当ＣＭ＃ｊの論理アドレスを特定することができる。そして、ＣＭ＃ｉによれば、ＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）により、特定した担当ＣＭ＃ｊの論理アドレスを宛先に設定して、リードリクエストを転送することができる。
【００９７】
これにより、ＣＡ＃ｉに直接接続されたＦＰＧＡ＃ｉ（あるいは、専用ＬＳＩ）を用いて、ＣＰＵ＃ｉやＭＥＭ＃ｉを介さずに、ホスト装置１２０からのリードリクエストの転送先を解析して、担当ＣＭ＃ｊへリードリクエストを転送することができる。また、リードリクエスト時に、ＣＰＵ＃ｉへの割り込みが発生しないため、ＣＰＵ＃ｉで実行中の処理が中断されるのを防いで、ストレージシステム１００の性能向上を図ることができる。
【００９８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９９】
（付記１）ホスト装置に接続されるインターフェースと、
前記インターフェースに直接接続される、内部の回路を再構成可能な集積回路または専用の集積回路と、を有し、
前記集積回路は、
前記インターフェースを介して前記ホスト装置からのライトリクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、前記ライトリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、
特定した前記論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、ことを特徴とするストレージ制御装置。
【０１００】
（付記２）前記対応情報は、さらに、前記記憶装置と、前記記憶装置へのリクエストにかかるライトデータのミラーリングを行う第２のストレージ装置との対応関係を示し、
前記集積回路は、
前記対応情報を参照して、さらに、前記ライトリクエストから特定される記憶装置に対応する第２のストレージ制御装置の論理アドレスを特定し、
特定した前記第２のストレージ制御装置の論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、ことを特徴とする付記１に記載のストレージ制御装置。
【０１０１】
（付記３）前記集積回路は、
前記インターフェースを介して前記ホスト装置からのリードリクエストを受け付けたことに応じて、前記対応情報を参照して、前記リードリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、
特定した前記論理アドレスを宛先に設定して、前記リードリクエストを転送する、ことを特徴とする付記１または２に記載のストレージ制御装置。
【０１０２】
（付記４）前記内部の回路を再構成可能な集積回路は、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）であることを特徴とする付記１〜３のいずれか一つに記載のストレージ制御装置。
【０１０３】
（付記５）複数のストレージ制御装置を含むストレージシステムであって、
前記複数のストレージ制御装置のうちのいずれかのストレージ制御装置は、
ホスト装置に接続されるインターフェースと、
前記インターフェースを介して前記ホスト装置からのライトリクエストを受け付けたことに応じて、記憶装置と、互いに通信可能な複数のストレージ制御装置のうちの前記記憶装置へのリクエストを処理するストレージ制御装置の論理アドレスとの対応関係を示す対応情報を参照して、前記ライトリクエストから特定される記憶装置に対応するストレージ制御装置の論理アドレスを特定し、特定した前記論理アドレスを宛先に設定して、前記ライトリクエストおよび当該ライトリクエストにかかるライトデータを転送する、内部の回路を再構成可能な集積回路または専用の集積回路と、
を有することを特徴とするストレージシステム。
【符号の説明】
【０１０４】
１００  ストレージシステム
１１０  ＦＲＴ
１１１  ＦＲＴ−ＳＷ
１２０  ホスト装置
３００  対応情報リスト
４０１  受付部
４０２  特定部
４０３  転送部
＃０〜＃３，＃ｉ，＃ｊ，＃ｋ  ＣＭ
＃ｉ  ＣＰＵ
＃ｉ  ＭＥＭ
＃ｉ  ＩＯＣ
＃ｉ  ＣＡ
＃ｉ  ＦＰＧＡ
＃ｉ  ＳＷ
【図１】
2018032061.tif 000003
【図２】
2018032061.tif 000004
【図３】
2018032061.tif 000005
【図４】
2018032061.tif 000006
【図５】
2018032061.tif 000007
【図６】
2018032061.tif 000008
【図７Ａ】
2018032061.tif 000009
【図７Ｂ】
2018032061.tif 000010
【図８】
2018032061.tif 000011
【図９】
2018032061.tif 000012