(57)【要約】【課題】ストレージ制御部間の効率的な通信を可能とする。【解決手段】ストレージシステムは、第１のプロセッサ、第２のプロセッサ及び１以上の記憶デバイスを接続する、１以上のバックエンドスイッチを含む。各バックエンドスイッチは、第１のプロセッサから受信したフレームを参照して当該フレームの送付先を同定する。フレームの送付先が前記第２のプロセッサである場合、各バックエンドスイッチは、フレームに含まれ、第１のプロセッサのアドレス空間において第２のメモリ上の場所を特定する第１のアドレスを、第２のプロセッサのアドレス空間において第２のメモリ上の前記場所を特定する第２のアドレスに変換し、第２のアドレスを含む前記フレームを第２のストレージ制御部に送付する。【選択図】図５Ａ
2018190368.tif 000002
【特許請求の範囲】
【請求項１】
第１のプロセッサと第１のメモリを含む第１のストレージ制御部と、
第２のプロセッサと第２のメモリを含む第２のストレージ制御部と、
１以上の記憶デバイスと、
前記第１のプロセッサ、前記第２のプロセッサ及び前記１以上の記憶デバイスを接続する、１以上のバックエンドスイッチと、を含み、
前記１以上のバックエンドスイッチのそれぞれは、
前記第１のプロセッサから受信したフレームを参照して当該フレームの送付先を同定し、
前記フレームの送付先が前記第２のプロセッサである場合、前記フレームに含まれ、前記第１のプロセッサのアドレス空間において前記第２のメモリ上の場所を特定する第１のアドレスを、前記第２のプロセッサのアドレス空間において前記第２のメモリ上の前記場所を特定する第２のアドレスに変換し、
前記第２のアドレスを含む前記フレームを、前記第２のストレージ制御部に送付し、
前記フレームの送付先が、前記１以上の記憶デバイスにおける第１の記憶デバイスである場合、前記フレームに含まれ、前記第１のプロセッサのアドレス空間において前記第１の記憶デバイスを特定する第３のアドレスを変換することなく、前記フレームを前記第１の記憶デバイスに送付する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記フレームが、前記第１のストレージ制御部から前記第２のストレージ制御部にデータを送付するフレームである場合、
前記フレームは、前記第１のストレージ制御部から前記第２のストレージ制御部に送付する第１のデータと、前記第１のアドレスとを含み、
前記第２のプロセッサは、前記第１のデータを、前記第２のメモリにおいて前記第２のアドレスが特定する場所に格納する、ストレージシステム。
【請求項３】
第１のプロセッサと第１のメモリを含む第１のストレージ制御部と、
第２のプロセッサと第２のメモリを含む第２のストレージ制御部と、
１以上の記憶デバイスと、
前記第１のプロセッサ、前記第２のプロセッサ及び前記１以上の記憶デバイスを接続する、１以上のバックエンドスイッチと、を含み、
前記１以上のバックエンドスイッチのそれぞれは、
前記第１のプロセッサのアドレス空間における前記第１のメモリ上の第１の場所を特定する第４のアドレスと、前記第１のプロセッサのアドレス空間において前記第２のメモリ上の第２の場所を特定する第５のアドレスと、転送するデータ長と、を含むデータ転送指示を、前記第１のプロセッサから受信し、
前記第５のアドレスを、前記第２のプロセッサのアドレス空間において前記第２のメモリ上の前記第２の場所を特定する第６のアドレスに変換し、
前記第１のメモリ上の前記第１の場所と前記第２のメモリ上の前記第２の場所との間において、前記データ長の第１のデータを転送する、ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記データ転送指示は、さらに、データの転送方向が前記第１のメモリから前記第２のメモリへの方向であるか、前記第２のメモリから前記第１のメモリへの方向であるか、の指定を含み、
前記バックエンドスイッチは、
前記データの転送方向の指定が、前記第１のメモリから前記第２のメモリへの方向の場合、前記第１のメモリの前記第１の場所から前記第１のデータを取得し、前記第２のメモリの前記第２の場所に格納し、
前記データの転送方向の指定が前記第２のメモリから前記第１のメモリへの方向の場合、前記第２のメモリの前記第２の場所から、前記第１のデータを取得し、前記第１のメモリの前記第１の場所に格納する、ストレージシステム。
【請求項５】
請求項２に記載のストレージシステムであって、
前記バックエンドスイッチは、前記第１のデータの送付を前記第２のプロセッサに通知する、ストレージシステム。
【請求項６】
請求項４に記載のストレージシステムであって、
前記データの転送方向の指定が、前記第１のメモリから前記第２のメモリへの方向の場合、前記バックエンドスイッチは、前記第２のメモリの前記第２の場所に前記第１のデータを格納したことを、前記第２のプロセッサに通知し、
前記データの転送方向の指定が前記第２のメモリから前記第１のメモリへの方向の場合、前記バックエンドスイッチは、前記第１のメモリの前記第１の場所に前記第１のデータを格納したことを、前記第１のプロセッサに通知する、ストレージシステム
【請求項７】
請求項４に記載のストレージシステムであって、
前記データ転送指示は、さらに、データチェックコードを含み、
前記データの転送方向の指定が、前記第１のメモリから前記第２のメモリへの方向の場合、前記バックエンドスイッチは、
前記データチェックコードに従って、前記第１のメモリから取得した前記第１のデータに誤りがあるかの検査を行い、
前記検査の結果を前記第１のプロセッサに通知し、
前記検査の結果が、誤りがないことを示す場合、前記第１のデータを前記第２のメモリの前記第２の場所に格納し、
前記データの転送方向の指定が、前記第２のメモリから前記第１のメモリへの方向の場合、前記バックエンドスイッチは、
前記データチェックコードに従って、前記第２のメモリから取得した前記第１のデータに誤りがあるかの検査を行い、
前記検査の結果を前記第１のプロセッサに通知し、
前記検査の結果が、誤りがないことを示す場合、前記第１のデータを前記第１のメモリの前記第１の場所に格納する、ストレージシステム。
【請求項８】
請求項３に記載のストレージシステムであって、
前記バックエンドスイッチは、
前記第１のメモリから取得した前記第１のデータを前記第２のメモリに格納した後、前記第２のメモリから前記第１のデータの少なくとも一部を読み出し、
前記第２のメモリから前記第１のデータの前記少なくとも一部を読み出せたことを、前記第１のプロセッサに通知する、ストレージシステム。
【請求項９】
請求項８に記載のストレージシステムであって、
前記第１のストレージ制御部は、
上位装置より前記１以上の記憶デバイスに書き込むためにホストデータを受信し、
前記ホストデータを、前記第１のデータとして、前記１以上の記憶デバイスに書き込む前に、前記第１のメモリの前記第１の場所に格納し、
前記第１のプロセッサは、前記ホストデータが前記第１のメモリの前記第１の場所に格納された後、前記データ転送指示を前記バックエンドスイッチに送信し、
前記第２のメモリから前記第１のデータの全部または一部が読み出せたことを前記バックエンドスイッチから通知されると、前記上位装置に前記第１のデータの書込みが完了したことを通知する、ストレージシステム。
【請求項１０】
請求項２に記載のストレージシステムであって、
前記第１のストレージ制御部は
上位装置より前記１以上の記憶デバイスに書き込むためにホストデータを受信し、
前記ホストデータを、前記１以上の記憶デバイスに書き込む前に、前記第１のメモリに格納し、
前記第１のプロセッサは、
前記ホストデータが前記第１のメモリに格納された後、前記ホストデータを前記第１のメモリから取得し、
前記ホストデータを前記第１のデータとして前記フレームを生成し、
前記フレームを前記バックエンドスイッチに送付し、
前記第１のアドレスを含み、前記第２のメモリに格納された前記第１のデータの少なくとも一部を読み出すことを要求する、第２のフレームを、前記バックエンドスイッチに送付し、
前記バックエンドスイッチは、前記第２のフレームに含まれる前記第１のアドレスを前記第２のアドレスに変換して、前記第２のプロセッサに送付し、
前記第２のプロセッサは、前記第２のフレームの要求に従って、前記第２のメモリに格納された前記第１のデータの前記少なくとも一部を読み出して、前記バックエンドスイッチに返送し、
前記バックエンドスイッチは、前記第２のプロセッサが返送した前記第１のデータの前記少なくとも一部を、前記第１のプロセッサに返送し、
前記第１のプロセッサは、前記バックエンドスイッチから前記第１のデータの前記少なくとも一部を受信した後、前記上位装置に、前記ホストデータの書込みが完了したことを通知する、ストレージシステム。
【請求項１１】
請求項２に記載のストレージシステムであって、
前記第１のストレージ制御部は
上位装置より前記１以上の記憶デバイスに書き込むためにホストデータを受信し、
前記ホストデータを、前記１以上の記憶デバイスに書き込む前に、前記第１のメモリに格納し、
前記第１のプロセッサは、
前記ホストデータが前記第１のメモリに格納された後、前記ホストデータを前記第１のメモリから取得し、
前記ホストデータを前記第１のデータとして前記フレームを生成し、
前記フレームを前記バックエンドスイッチに送付し、
前記第２のプロセッサに、前記第１のデータを送付したことを通知し、
前記第２のプロセッサは、前記第１のプロセッサから前記第１のデータを送付したことを通知されると、
前記第２のメモリに格納された前記第１のデータを読み出し、
前記第１のデータに誤りがあるかの判定を実行し、
前記判定の結果を前記第１のプロセッサに通知し、
前記第１のプロセッサは、前記判定の前記結果に基づき、前記第２のメモリに格納された前記第１のデータに誤りがあるかを、前記上位装置に通知する、ストレージシステム。
【請求項１２】
請求項２に記載のストレージシステムであって、
前記バックエンドスイッチは、前記第１のデータを含む前記フレームを前記第２のストレージ制御部に送付した後、前記第１のデータの少なくとも一部を取得する要求を、前記第２のプロセッサに送付し、
前記第２のプロセッサは、前記要求に応答して、前記第１のデータの少なくとも一部を前記第２のメモリから読出し、前記バックエンドスイッチに返送し、
前記バックエンドスイッチは、前記第２のメモリ上の前記第１のデータの前記少なくとも一部が前記第２のプロセッサから返送されてきたことを、前記第１のプロセッサに通知する、ストレージシステム。
【請求項１３】
請求項１に記載のストレージシステムであって、
前記１以上のバックエンドスイッチは、
第１のスイッチと、第２のスイッチと、前記第１のスイッチと前記第２のスイッチとを接続する第１のアドレス変換機能部と、を含む第１のバックエンドスイッチと、
第３のスイッチと、第４のスイッチと、前記第３のスイッチと前記第４のスイッチとを接続する第２のアドレス変換機能部と、を含む第２のバックエンドスイッチと、を含み、
前記１以上の記憶デバイスはそれぞれ２以上のポートを含み、
前記第１のストレージ制御部は、前記第１のスイッチ及び前記第３のスイッチそれぞれのアップストリームポートと接続し、
前記第２のストレージ制御部は、前記第２のスイッチ及び前記第４のスイッチそれぞれのアップストリームポートと接続し、
前記第１のアドレス変換機能部及び前記第２のアドレス変換機能部は、それぞれ、前記第１のプロセッサのアドレス空間と前記第２のプロセッサのアドレス空間との間のアドレス変換を実行し、
前記１以上の記憶デバイスそれぞれの第１のポートは、前記第１のスイッチ及び前記第２のスイッチの一方のダウンストリームポートと接続され、
前記１以上の記憶デバイスそれぞれの第２のポートは、前記第３のスイッチ及び前記第４のスイッチの一方のダウンストリームポートと、接続されている、ストレージシステム。
【請求項１４】
請求項１３に記載のストレージシステムであって、
さらに、前記第１のバックエンドスイッチ、前記第２のバックエンドスイッチ、及び前記１以上の記憶デバイスを収容するドライブ筐体を含み、
前記第１のスイッチから前記第４のスイッチは、それぞれ、仮想スイッチである、ストレージシステム。
【請求項１５】
請求項１３に記載のストレージシステムであって、
前記第２のバックエンドスイッチの障害時に、前記第２のストレージ制御部は、前記第１のバックエンドスイッチを介して、前記１以上の記憶デバイスにおける第２の記憶デバイスからの第１のデータの読出しを、前記第１のストレージ制御部に依頼し、
前記第１のストレージ制御部は、前記依頼に応じて、前記第２の記憶デバイスに、前記第１のデータを前記第２のストレージ制御部に送信することを指示し、
前記第２の記憶デバイスは、
前記指示に応じて、前記第１のデータを前記第１のバックエンドスイッチを介して、前記第２のストレージ制御部に送信し、
前記指示に対する完了応答を前記第１のストレージ制御部に送信する、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
ストレージシステムは、一般にストレージ制御部と複数のランダムアクセス可能な不揮発記憶デバイスを有する。不揮発記憶デバイスは、例えば、ハードディスクドライブ（ＨＤＤ）またはソリッドステートドライブ（ＳＳＤ）である。両者が混在する例もある。
【０００３】
ストレージシステムはこのような多数の記憶デバイスを備えるため、例えば、バックエンドスイッチで多数の記憶ドライブへの接続を集約して、ストレージ制御部に接続して制御する。例えば、特許文献１は、バックエンドスイッチを有するストレージシステムを開示する。
【０００４】
またストレージシステムは、例えば、二つのストレージ制御部を備え、どちらか一方が動作を停止しても残った一方によりストレージシステムとしての動作を継続できるようにして、可用性を保つ。二つのストレージ制御部は、バックエンドスイッチとは異なる特別な通信路で接続され、種々の制御情報を交換する。特許文献１は、二つのストレージ制御部と、それらの間にバックエンドスイッチとは異なるバスを持つ構成を開示する。
【０００５】
二つのストレージ制御部の間の通信路は、通信に係わるオーバーヘッドを抑制するため、ストレージ制御部が備えるプロセッサに直接接続し易い通信規格を使用する。このようなプロセッサに直接接続し易い通信規格の例は、プロセッサと入出力デバイスとの間の通信規格であるＰＣＩ  Ｅｘｐｒｅｓｓである。
【０００６】
これに対して、バックエンドスイッチで集約される、ストレージ制御部と記憶デバイスとの間の通信規格としては、一般にＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ、またはＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）が用いられる。
【０００７】
これらのストレージ制御部と記憶デバイスとの間の通信規格の通信路は、ストレージ制御部が備えるプロセッサに直接接続できず、ストレージ制御部の間の通信に使用するためには、専用のインターフェースを必要とする。
【０００８】
例えば、特許文献２は、異なるストレージ制御部の間の通信を、バックエンドスイッチを介して行う技術を開示する。特許文献２に開示される技術は、バックエンドスイッチが備える共有記憶領域により、異なるストレージ制御部の間の通信を可能とする。また特許文献３にも２個のストレージ制御部の間で共有メモリを備えて二重化するための特別な通信路を備える技術が開示されている。
【０００９】
またストレージ制御部と記憶デバイスの間の通信規格として、近年、ＰＣＩ  Ｅｘｐｒｅｓｓと互換性のあるＮＶＭ  Ｅｘｐｒｅｓｓも新しく用いられるようになってきた。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】米国特許出願公開２００９／０２０４７４３号
【特許文献２】米国特許出願公開２００８／０１４７９３４号
【特許文献３】米国特許出願公開２０１３／０２５４４８７号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上述のように、従来技術を用いて構成されるストレージシステムは、二つのストレージ制御部の間の通信のため、ＰＣＩ  Ｅｘｐｒｅｓｓのようなストレージ制御部のプロセッサに接続し易い通信規格を用いる。このため、従来のストレージシステムは、特別な通信路を、ストレージ制御部の間に専用に必要とする。
【００１２】
ＰＣＩ  Ｅｘｐｒｅｓｓは、プロセッサと入出力デバイスとの間の通信規格であり、二つのストレージ制御部の二つのプロセッサの間の通信について、なんら規定していない。よって、ＰＣＩ  Ｅｘｐｒｅｓｓを用いるだけでは、例え物理的な通信路をプロセッサに直接接続できたとしても、二つのプロセッサの間の通信手順が定まらないので、二つのプロセッサ間で通信を行うことはできない。
【００１３】
一方、ストレージ制御部と、バックエンドスイッチで集約される記憶デバイスと、の間の通信規格は、このようなストレージ制御部の間の通信規格とは互換性がない。バックエンドスイッチ経由でのストレージ制御部間の通信は、困難である。例えば、特許文献２が開示する技術は、バックエンドスイッチの共有記憶領域、及び、ストレージ制御部による通信検知のための共有領域の定期的な検査を、必要とする。このように、バックエンドスイッチ経由でのストレージ制御部間の通信は特別な手段を必要とし、性能的なオーバーヘッドを生じさせる。
【００１４】
ＰＣＩ  Ｅｘｐｒｅｓｓと互換性のあるＮＶＭ  Ｅｘｐｒｅｓｓは一つのストレージ制御部と記憶デバイスとの間の通信規格であり、二つのストレージ制御部の間での通信については、なんら規定していない。このため、ＮＶＭ  Ｅｘｐｒｅｓｓにより、二つのストレージ制御部の間の通信を行うことはできない。
【００１５】
従って、二つのストレージ制御部の間に特別な専用通信路を必要とすることなく、ストレージ制御部と記憶デバイスの間を接続するバックエンドスイッチを介して、ストレージ制御部間の効率的な通信を可能とする技術が望まれる。特にバックエンドスイッチを介して、二つのストレージ制御部のプロセッサ間の通信を可能とする通信手順を定める技術が望まれる。
【課題を解決するための手段】
【００１６】
本発明の一例は、第１のプロセッサと第１のメモリを含む第１のストレージ制御部と、第２のプロセッサと第２のメモリを含む第２のストレージ制御部と、１以上の記憶デバイスと、前記第１のプロセッサ、前記第２のプロセッサ及び前記１以上の記憶デバイスを接続する、１以上のバックエンドスイッチと、を含み、前記１以上のバックエンドスイッチのそれぞれは、前記第１のプロセッサから受信したフレームを参照して当該フレームの送付先を同定し、前記フレームの送付先が前記第２のプロセッサである場合、前記フレームに含まれ、前記第１のプロセッサのアドレス空間において前記第２のメモリ上の場所を特定する第１のアドレスを、前記第２のプロセッサのアドレス空間において前記第２のメモリ上の前記場所を特定する第２のアドレスに変換し、前記第２のアドレスを含む前記フレームを、前記第２のストレージ制御部に送付し、前記フレームの送付先が、前記１以上の記憶デバイスにおける第１の記憶デバイスである場合、前記フレームに含まれ、前記第１のプロセッサのアドレス空間において前記第１の記憶デバイスを特定する第３のアドレスを変換することなく、前記フレームを前記第１の記憶デバイスに送付する、ストレージシステムである。
【００１７】
本発明の他の一例は、第１のプロセッサと第１のメモリを含む第１のストレージ制御部と、第２のプロセッサと第２のメモリを含む第２のストレージ制御部と、１以上の記憶デバイスと、前記第１のプロセッサ、前記第２のプロセッサ及び前記１以上の記憶デバイスを接続する、１以上のバックエンドスイッチと、を含み、前記１以上のバックエンドスイッチのそれぞれは、前記第１のプロセッサのアドレス空間における前記第１のメモリ上の第１の場所を特定する第４のアドレスと、前記第１のプロセッサのアドレス空間において前記第２のメモリ上の第２の場所を特定する第５のアドレスと、転送するデータ長と、を含むデータ転送指示を、前記第１のプロセッサから受信し、前記第５のアドレスを、前記第２のプロセッサのアドレス空間において前記第２のメモリ上の前記第２の場所を特定する第６のアドレスに変換し、前記第１のメモリ上の前記第１の場所と前記第２のメモリ上の前記第２の場所との間において、前記データ長の第１のデータを転送する、ストレージシステムである。
【発明の効果】
【００１８】
本発明の一態様によれば、ストレージ制御部と記憶デバイスとの間を接続するバックエンドスイッチを介して、ストレージ制御部間の効率的な通信を可能とする。
【図面の簡単な説明】
【００１９】
【図１】図１は、ストレージシステムの構成例である。
【図２】図２は、ストレージシステムの別の構成例である。
【図３Ａ】図３Ａは、ストレージ制御部間で通信される、データ要求、データ返送、及びデータ送付のフレームの例を示す。
【図３Ｂ】図３Ｂは、バックエンドスイッチにおいて、プロセッサから送付されたフレームに付与されたアドレスに対してスイッチング動作を決定するスイッチング情報テーブルの例である。
【図３Ｃ】図３Ｃは、バックエンドスイッチがプロセッサからデータ送付またはデータ要求を受信した時の処理手順を示すフローチャートの例を示す図である。
【図４Ａ】図４Ａは、スイッチング情報テーブルの例を示す。
【図４Ｂ】図４Ｂは、バックエンドスイッチが記憶デバイスからデータ送付またはデータ要求を受信した時の処理手順を示すフローチャートの例を示す図である。
【図５Ａ】図５Ａは、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの例を示す図である。
【図５Ｂ】図５Ｂは、第１のストレージ制御部が第２のストレージ制御部からデータを取得する処理のシーケンスの例を示す図である。
【図６Ａ】図６Ａは、ストレージ制御部が記憶デバイスにデータを送信する処理のシーケンスの例を示す図である。
【図６Ｂ】図６Ｂは、ストレージ制御部が記憶デバイスからデータを取得する処理のシーケンスの例を示す図である。
【図７Ａ】図７Ａは、記憶デバイスがストレージ制御部にデータを送信する処理のシーケンスの例を示す図である。
【図７Ｂ】図７Ｂは、記憶デバイスがストレージ制御部からデータを取得する処理のシーケンスの例を示す図である。
【図８Ａ】図８Ａは、ストレージシステムで用いることのできるデータ転送指示のフレームフォーマット例である。
【図８Ｂ】図８Ｂは、バックエンドスイッチがストレージ制御部よりデータ転送指示を受信した時の処理手順を示すフローチャートの例を示す図である。
【図９Ａ】図９Ａは、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの別の例を示す図である。
【図９Ｂ】図９Ｂは、第１のストレージ制御部が第２のストレージ制御部からデータを取得する処理のシーケンスの別の例を示す図である。
【図１０】図１０は、バックエンドスイッチがプロセッサからデータ送付またはデータ要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図１１】図１１は、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの別の例を示す図である。
【図１２】図１２は、バックエンドスイッチがストレージ制御部よりデータ転送指示を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図１３Ａ】図１３Ａは、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの別の例を示す図である。
【図１３Ｂ】図１３Ｂは、第１のストレージ制御部が第２のストレージ制御部からデータを取得する処理のシーケンスの別の例を示す図である。
【図１４】図１４は、バックエンドスイッチがストレージ制御部よりデータ転送指示を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図１５】図１５は、バックエンドスイッチがストレージ制御部よりデータ転送指示を受信した時の処理手順を示すフローチャートのまた更に別の例を示す図である。
【図１６】図１６は、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの別の例を示す図である。
【図１７】図１７は、ストレージシステムと他のストレージシステムを接続する構成例である。
【図１８】図１８は、ストレージシステムと他のストレージシステムを接続する別の構成例である。
【図１９】図１９は、ストレージシステムの一つのストレージ制御部が上位装置から要求を受信した時の処理手順を示すフローチャートの例を示す図である。
【図２０】図２０は、ストレージ制御部が上位装置からデータ書込み要求を受信した場合の処理のシーケンスの例を示す図である。
【図２１】図２１は、ストレージシステムの一つのストレージ制御部が上位装置から要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図２２】図２２は、ストレージ制御部が上位装置からデータ書込み要求を受信した場合の処理のシーケンスのの別の例を示す図である。
【図２３】図２３は、ストレージシステムの一つのストレージ制御部が上位装置から要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図２４】図２４は、ストレージ制御部が上位装置からデータ書込み要求を受信した場合の処理のシーケンスのの別の例を示す図である。
【図２５】図２５は、ストレージシステムの一つのストレージ制御部が上位装置から要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図２６】図２６は、ストレージ制御部が上位装置からデータ書込み要求を受信した場合の処理のシーケンスのの別の例を示す図である。
【図２７】図２７は、バックエンドスイッチがプロセッサからデータ送付またはデータ要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図２８】図２８は、バックエンドスイッチがプロセッサからデータ送付またはデータ要求を受信した時の処理手順を示すフローチャートの別の例を示す図である。
【図２９】図２９は、第１のストレージ制御部が第２のストレージ制御部にデータを送信する処理のシーケンスの別の例を示す図である。
【図３０】図３０は、ストレージシステムの別の構成例である。
【図３１】図３１は、バックエンドスイッチの構成例である。
【図３２】図３２は、バックエンドスイッチの別の構成例である。
【図３３】図３３は、ＮＴＢにおけるアドレス変換動作の例を示す図である。
【図３４】図３４は、ストレージ制御部間のデータ転送経路の例を示す図である。
【図３５】図３５は、ストレージ制御部間のデータ転送経路の別の例を示す図である。
【図３６】図３６は、ストレージシステム内のＰＣＩｅツリーの例を示す図である。
【図３７】図３７は、ＰＣＩｅツリーと記憶デバイスとプロセッサ等の関係の例を示す図である。
【図３８】図３８は、バックエンドスイッチの障害影響範囲の例を示す図である。
【図３９】図３９は、ストレージ制御部の障害影響範囲の例を示す図である。
【図４０】図４０は、バックエンドスイッチ保守または交換時の代替処理または代替経路要否の例を示す図である。
【図４１】図４１は、記憶デバイスからのデータ読出し経路の例を示す図である。
【図４２】図４２は、バックエンドスイッチ障害発生時の記憶デバイスからのデータ読出し手順を示すフローチャートの例である。
【図４３】図４３は、バックエンドスイッチの保守または交換手順を示すフローチャートの例である。
【図４４】図４４は、記憶デバイスからのデータ読出し経路の別の例を示す図である。
【図４５】図４５は、バックエンドスイッチ障害発生時の記憶デバイスからのデータ読出し手順を示すフローチャートの別の例である。
【図４６】図４６は、ストレージシステムの別の構成例である。
【図４７】図４７は、ストレージシステムの別の構成例である。
【図４８】図４８は、バックエンドスイッチの別の構成例である。
【図４９】図４９は、バックエンドスイッチの別の構成例である。
【図５０】図５０は、ＮＴＢにおけるアドレス変換動作の別の例を示す図である。
【図５１】図５１は、ストレージシステムの別の構成例である。
【図５２】図５２は、バックエンドスイッチの別の構成例である。
【図５３】図５３は、バックエンドスイッチの別の構成例である。
【図５４】図５４は、ストレージシステムの別の構成例である。
【図５５】図５５は、バックエンドスイッチの別の構成例である。
【図５６】図５６は、バックエンドスイッチの別の構成例である。
【図５７】図５７は、記憶デバイスからのデータ読出し経路の別の例を示す図である。
【図５８】図５８は、記憶デバイスからのデータ読出し経路の別の例を示す図である。
【図５９】図５９は、負荷分散動作時の記憶デバイスからのデータ読出し手順を示すフローチャートの例である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。実施例は、ストレージシステムの冗長性を確保するためのストレージ制御部の間でのデータ通信制御を説明する。
【実施例１】
【００２１】
図１、図３Ａ〜図７Ｂを用いて実施例１を説明する。図１は、実施例１に係るストレージシステムの構成例である。図１において、ストレージシステムは、二つのストレージ制御部１０３Ａと１０３Ｂを備える。ストレージ制御部１０３Ａは、プロセッサ１０１Ａ及びメモリ１０２Ａを含んで構成され、ストレージ制御部１０３Ｂは、プロセッサ１０１Ｂ及びメモリ１０２Ｂを含んで構成される。プロセッサ１０１Ａと１０１Ｂは、バックエンドスイッチ１０４にそれぞれパス１０６Ａと１０６Ｂによって接続される。
【００２２】
実施例１に係るストレージシステムは、記憶デバイス１０５Ａ〜１０５Ｆを備え、記憶デバイス１０５Ａ〜１０５Ｆは、バックエンドスイッチ１０４にそれぞれパス１０７Ａ〜１０７Ｆによって接続される。なお、図１は、六つの記憶デバイス１０５Ａ〜１０５Ｆを示すが、記憶デバイスの数は任意である。
【００２３】
バックエンドスイッチ１０４の機能の一部または全部は、例えば集積回路で設計する等によりハードウェアで実現してもよく、または、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【００２４】
図３Ａは、ストレージ制御部間で通信される、データ要求、データ返送、及びデータ送付のフレームの例を示す。各フレームは、一つのユニットとして送付されてもよく、パケットに分割して送付されてもよい。図３Ａはフレームフォーマットの一例を示し、他のフォーマット、例えばＰＣＩ  Ｅｘｐｒｅｓｓで用いられるパケットフォーマットが使用されてもよい。
【００２５】
データ要求のフレーム３３１は、先頭フィールドにおいて、データ要求を表す番号（図３Ａの例において「０」）を示す。次のフィールドは、複数のデータ要求フレームを区別するタグ番号(t)を示す。一般に、タグ番号は、一つのデータ要求に関してデータ返送が行われる前に次のデータ要求を送付することを可能とする。
【００２６】
次のフィールドは、データ長を示す。データ長は、例えば、バイト単位、または、所定サイズのデータブロック数で表わされる。次のフィールドは、要求先アドレスを示す。要求先アドレスは、要求先ストレージ制御部におけるプロセッサが使用するアドレス空間のアドレスを示す。要求先アドレスは、要求元ストレージ制御部におけるプロセッサが使用するアドレス空間のアドレスから、要求先ストレージ制御部におけるプロセッサが使用するアドレスに、バックエンドスイッチ１０４によって変換される。
【００２７】
データ返送のフレーム３３２は、先頭フィールドにおいて、データ返送を表す番号(図３Ａの例において「１」)を示す。次のフィールドは、データ要求のフレームに付けられたタグ番号を示し、いずれのデータ要求に対するデータ返送かを同定する。次のフィールドは、データ長を示す。最後のフィールドは、返送されるデータを格納する。
【００２８】
データ送付のフレーム３３３は、先頭フィールドにおいて、データ送付を表す番号(図３Ｂの例において「２」)を示す。次のフィールドは、データ長を示す。次のフィールドは、送付先アドレスを示す。送付先アドレスは、送付先ストレージ制御部におけるプロセッサが使用するアドレス空間のアドレスを示す。送付先アドレスは、送付元ストレージ制御部におけるプロセッサが使用するアドレス空間のアドレスから、送付先ストレージ制御部におけるプロセッサが使用するアドレスに、バックエンドスイッチ１０４によって変換される。最後のフィールドは、送付するデータを格納する。
【００２９】
図３Ｂは、バックエンドスイッチ１０４において、プロセッサ１０１Ａから送付されたフレームに付与されたアドレスに対してスイッチング動作を決定するスイッチング情報テーブル３５０の例である。図３Ｂにおいて、アドレスは１６進数で表記されている。
【００３０】
プロセッサ１０１Ａが使用するアドレス空間において、異なるアドレス範囲が異なるデバイス（メモリ、プロセッサ（メモリ）及び記憶デバイス）に割り当てられている。図３Ｂの例において、アドレス００００〜００ｆｆは、プロセッサ１０１Ａがメモリ１０２Ａに割り当てたアドレスである。このアドレス領域におけるアドレスを持つフレームは、プロセッサ１０１Ａからバックエンドスイッチ１０４に送付されることはない。プロセッサ１０１Ａは、直接にメモリ１０２Ａへアクセスする。
【００３１】
アドレス０１００以降のアドレスを付与されたフレームが、プロセッサ１０１Ａからバックエンドスイッチ１０４に到着する。例えば、アドレス０１８０の行き先は、プロセッサ１０１Ｂ（メモリ１０２Ｂ）であり、パス１０６Ｂへ送付される。後述するように、バックエンドスイッチ１０４は、プロセッサ１０１Ｂ（メモリ１０２Ｂ）へのフレームの宛先アドレスを変換する。図３Ｂの例において、プロセッサ１０１Ａのアドレス０１８０はプロセッサ１０１Ｂのアドレス００８０に変換される。
【００３２】
プロセッサ１０１Ａから送付されたフレームに付与されたアドレスが０２２０であれば、行き先は記憶デバイス１０５Ｃと判定され、フレームは、記憶デバイス１０５ｃに接続されるパス１０７ｃに向けて送付される。後述するように、記憶デバイスへのフレームは、バックエンドスイッチ１０４によるアドレス変換を受けない。
【００３３】
プロセッサ１０１Ｂから受信したフレームのスイッチングも、同様構成のスイッチング情報テーブルを参照する。行き先がプロセッサ１０１Ａ（メモリ１０２Ａ）のフレームは、上記アドレス変換を受け、記憶デバイスへのフレームは、上記アドレス変換を受けない。後述するバックエンドスイッチ１０４がプロセッサ１０１Ａまたはプロセッサ１０１Ｂよりデータ転送指示を受信してアドレス変換する構成においても、同様構成のアドレス変換情報及び行き先情報を保持するスイッチング情報テーブルが使用される。
【００３４】
図３Ｃは、バックエンドスイッチ１０４がプロセッサ１０１Ａよりデータ送付またはデータ要求を受信した場合の処理手順を示すフローチャートの例である。バックエンドスイッチ１０４が、プロセッサ１０１Ｂからデータ送付またはデータ要求を受信した時の処理手順も同様である。その場合、図３Ｃにおけるプロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられる。
【００３５】
ステップ３００において、バックエンドスイッチ１０４は、プロセッサ１０１Ａよりデータ送付またはデータ要求を受信する。ステップ３０１において、バックエンドスイッチ１０４は、送付先アドレスまたは要求先アドレス（宛先アドレス）及びスイッチング情報テーブル３５０を参照して、当該データ送付またはデータ要求の行き先を判定する。行き先がプロセッサ１０１Ｂである場合（３０１：プロセッサ１０１Ｂ）、バックエンドスイッチ１０４は、ステップ３０２に進む。ステップ３０２において、バックエンドスイッチ１０４は、プロセッサ１０１Ｂへの経路を選択する。この経路は、図１のパス１０６Ｂに相当する。
【００３６】
ステップ３０３において、バックエンドスイッチ１０４は、受信したデータ送付またはデータ要求の宛先アドレスを、スイッチング情報テーブル３５０を参照して変換する。変換前のアドレスは、プロセッサ１０１Ａが使用するアドレス空間のアドレスであり、変換後のアドレスは、プロセッサ１０１Ｂが使うアドレス空間におけるアドレスである。
【００３７】
プロセッサ１０１Ａとプロセッサ１０１Ｂは互いに独立であり、それぞれが使用するアドレス空間及びメモリ内の場所を特定するアドレスは、各々独立に定められる。このため、スイッチング情報テーブル３５０により定義される所定の規則に従って互いのアドレスを変換することで、プロセッサ（メモリ）間のデータ転送が可能となる。
【００３８】
次にステップ３０４において、バックエンドスイッチ１０４は、プロセッサ１０１Ｂに当該データまたはデータ要求を送付して、終了する。
【００３９】
ステップ３０１において、行き先が記憶デバイス１０５Ａ〜１０５Ｆのいずれかであれば（３０１：記憶デバイス１０５Ａ〜１０５Ｆ）、バックエンドスイッチ１０４は、ステップ３０５に進む。ステップ３０５において、バックエンドスイッチ１０４は、該記憶デバイス１０５Ａ〜１０５Ｆへのパス１０７Ａ〜１０７Ｆのいずれか一つを選択する。次にステップ３０６で、バックエンドスイッチ１０４は、該データ送付またはデータ要求を、該記憶デバイスに送付して、終了する。
【００４０】
次に、バックエンドスイッチ１０４が記憶デバイス１０５Ａ〜１０５Ｆよりデータ送信またはデータ要求を受信した場合の処理を説明する。記憶デバイス１０５Ａ〜１０５Ｆは、プロセッサ１０１Ａまたは１０１Ｂよりフレームを受信し、指定されたデータを読み書きする。さらに、記憶デバイス１０５Ａ〜１０５Ｆは、特定の動作を指示するコマンドコードをエンコードした特殊なデータパターンを受信して、指示された動作を行う。
【００４１】
記憶デバイス１０５Ａ〜Ｆ１０５は、バックエンドスイッチ１０４に対して、フレームを送付する。例えば、記憶デバイス１０５Ａ〜１０５Ｆより受信するフレームの送付先は、バックエンドスイッチ１０４において、記憶デバイス１０５Ａ〜１０５Ｆそれぞれに対して予め定められている。送付先は、例えば、プロセッサ１０１Ａまたはプロセッサ１０１Ｂである。
【００４２】
バックエンドスイッチ１０４は、予め定められた設定に従って、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータフレームを、プロセッサ１０１Ａへのパス１０６Ａまたはプロセッサ１０１Ｂへのパス１０６Ｂへ向けて送付するようにスイッチングを行う。
【００４３】
これに代えて、バックエンドスイッチ１０４は、スイッチング情報テーブルを用いて、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータフレームに付与されたアドレスに基づいて、スイッチング動作を行ってもよい。
【００４４】
図４Ａは、スイッチング情報テーブル４５０の例を示す。スイッチング情報テーブル４５０は、記憶デバイスのアドレス空間におけるアドレス範囲、行き先、及びプロセッサのアドレス空間におけるアドレス範囲の関係を定義する。
【００４５】
バックエンドスイッチ１０４は、記憶デバイスより、例えばアドレス０４４０が付与されたデータフレームを受信する。バックエンドスイッチ１０４は、当該データフレームをパス１０６Ａへ向けて送付するように、スイッチングを行う。バックエンドスイッチ１０４は、アドレス０４４０を、プロセッサ１０１Ａがメモリ１０２Ａをアクセスするのに用いるアドレス００４０に変換する。これにより、プロセッサ１０１Ａがメモリ１０２Ａを正しくアクセスできる。
【００４６】
また、バックエンドスイッチ１０４は、例えばアドレス０５６０が付与されたデータフレームを記憶デバイスより受信すると、当該データフレームをパス１０６Ｂに向けて送付するようにスイッチングを行う。バックエンドスイッチ１０４は、アドレス０５６０を、アドレス００６０に変換する。
【００４７】
図４Ｂは、バックエンドスイッチ１０４が記憶デバイス１０５Ａ〜１０５Ｆよりデータ送付またはデータ要求を受信した場合の処理手順を示すフローチャートの例である。ステップ４００において、バックエンドスイッチは、記憶デバイス１０５Ａ〜１０５Ｆの一つより、データ送付またはデータ要求を受信する。
【００４８】
ステップ４０１において、バックエンドスイッチ１０４は、当該データ送付またはデータ要求の行き先を判定する。判定方法は、上述の通りである。行き先がプロセッサ１０１Ａである場合（４０１：プロセッサ１０１Ａ）、バックエンドスイッチは、ステップ４０２に進む。ステップ４０２において、バックエンドスイッチ１０４は、プロセッサ１０１Ａへの経路を選択する。この経路は図１におけるパス１０６Ａに相当する。バックエンドスイッチ１０４は、当該データ送付またはデータ要求をメモリ１０２Ａまたは１０２Ｂ上の場所の指定と共にプロセッサ１０１Ａまたは１０１Ｂに送付する。本例において、指定されたメモリは１０２Ａである。
【００４９】
次に、バックエンドスイッチ１０４は、ステップ４０３に進み、選択した経路を用いて、当該データ送付またはデータ要求を、プロセッサ１０１Ａに送付して、処理を終了する。
【００５０】
ステップ４０１において、行き先がプロセッサ１０１Ｂであれば（４０１：プロセッサ１０１Ｂ）、バックエンドスイッチ１０４は、ステップ４０４に進む。ステップ４０４において、バックエンドスイッチ１０４は、プロセッサ１０１Ｂへの経路を選択する。この経路は図１では、パス１０６Ｂに相当する。バックエンドスイッチ１０４は、当該データ送付またはデータ要求をメモリ１０２Ａまたは１０２Ｂ上の場所の指定と共にプロセッサ１０１Ａまたは１０１Ｂに送付する。本例において、指定されたメモリは１０２Ｂである。次に、バックエンドスイッチ１０４は、ステップ４０３に進み、選択した経路を用いて、当該データ送付またはデータ要求を、プロセッサ１０１Ｂに送付して、処理を終了する。
【００５１】
図５Ａ及び５Ｂは、それぞれ、ストレージ制御部１０３Ａがストレージ制御部１０３Ｂにデータを送信する処理のシーケンス例、及びストレージ制御部１０３Ａがストレージ制御部１０３Ｂからデータを取得する処理のシーケンス例を示す。
【００５２】
なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａにデータを送信する、またはストレージ制御部１０３Ａからデータを取得する処理のシーケンスも同様である。その場合、図５Ａ及び５Ｂにおいて、ストレージ制御部１０３Ａとストレージ制御部１０３Ｂとが入れ替えられ、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【００５３】
図５Ａにおいて、ステップ５０１で、プロセッサ１０１Ａはメモリ１０２Ａよりデータを取得する。次にステップ５０２において、プロセッサ１０１Ａは、取得したデータにプロセッサ１０１Ａがメモリ１０２Ｂ上の場所を識別するアドレスＡを付与して、バックエンドスイッチ１０４に送付する。アドレスＡは、プロセッサ１０１Ａのアドレス空間において、メモリ１０２Ｂ上の特定の場所を識別する。
【００５４】
なお、ステップ５０１及び５０２はは、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてよく、それらの全部または一部は、ソフトウェアの指示により動作する、プロセッサ１０１内に実装された機能ハードウェア（回路）により実行されてもよい。
【００５５】
例えば、ソフトウェアは、メモリ１０２Ａ上のデータの場所を識別するアドレス、メモリ１０２Ｂ上の場所を識別するアドレスＡ、送付するデータの長さを指定する。機能ハードウェアは、指定されたメモリ１０２Ａ上のアドレスから、指定された長さのデータを読み出し、当該データ及び指定された送付先アドレス含むフレームを生成して、バックエンドスイッチ１０４に送付する。
【００５６】
ステップ５０３において、バックエンドスイッチ１０４は、スイッチング情報テーブル３５０を参照し、アドレスＡをプロセッサ１０１Ｂがメモリ１０２Ｂ上の場所を識別するのに使用するアドレスＢに変換して、プロセッサ１０１Ｂに送付する。アドレスＡをアドレスＢに変換する理由は、図３Ｃのステップ３０３において説明した通りである。
【００５７】
プロセッサ１０１Ｂは、アドレスＢが付与されたフレームをバックエンドスイッチ１０４より受信する。ステップ５０４において、プロセッサ１０１Ｂは、アドレスＢに従ってメモリ１０２Ｂにデータを格納する。ステップ５０４は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよい。バックエンドスイッチ１０４からアドレスＢが付与されたデータを受信すると自動的にアドレスＢに従ってメモリ１０２Ｂに格納する機能ハードウェア（回路）が、プロセッサ１０１Ｂに実装されていてもよい。
【００５８】
図５Ｂを参照して、ステップ５１１で、プロセッサ１０１Ａは、プロセッサ１０１Ａのアドレス空間においてメモリ１０２Ｂ上の場所を識別するアドレスＣを付与して、データ要求をバックエンドスイッチ１０４に送付する。ステップ５１１は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。
【００５９】
例えば、プロセッサ１０１Ａ上で動作するソフトウェアは、メモリ１０２Ｂ上の場所を識別するアドレスＣ、取得したデータを格納するメモリ１０２Ａ上の場所、取得するデータの長さを指定する。機能ハードウェアは、指定された情報を含むデータ要求を生成し、送付する。
【００６０】
バックエンドスイッチ１０４は、プロセッサ１０１ＡよりアドレスＣが付与されたデータ要求を受信する。ステップ５１２において、バックエンドスイッチ１０４は、アドレスＣをプロセッサ１０１Ｂがメモリ１０２Ｂ上の場所を識別するのに使用するアドレスＤに変換して、データ要求をプロセッサ１０１Ｂに送付する。アドレスＣをアドレスＤに変換する理由は、図３Ｃのステップ３０３において説明した通りである。
【００６１】
プロセッサ１０１Ｂは、バックエンドスイッチ１０４よりアドレスＤが付与されたデータ要求を受信する。ステップ５１３において、プロセッサ１０１Ｂは、アドレスＤに従って、メモリ１０２Ｂよりデータを取得する。ステップ５１４において、プロセッサ１０１Ｂは、メモリ１０２Ｂより取得したデータをバックエンドスイッチ１０４に返送する。
【００６２】
ステップ５１３及び５１４は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。バックエンドスイッチ１０４からアドレスＤが付与されたデータ要求を受信すると、機能ハードウェアは、例えば、自動的にアドレスＤに従ってメモリ１０２Ｂからデータを取得して、バックエンドスイッチ１０４に返送する。
【００６３】
バックエンドスイッチ１０４は、プロセッサ１０１Ｂより、ステップ５１２で送付したデータ要求に対して返送されたデータを受信する。ステップ５１５において、バックエンドスイッチ１０４は、返送されたデータを、更にプロセッサ１０１Ａに返送する。
【００６４】
プロセッサ１０１Ａは、バックエンドスイッチ１０４よりステップ５１１で送付したデータ要求に対するデータの返送を受信する。ステップ５１６において、プロセッサ１０１Ａは、返送されたデータをメモリ１０２Ａに格納する。ステップ５１６は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。例えば、機能ハードウェアは、バックエンドスイッチ１０４からデータの返送を受信すると、自動的にメモリ１０２Ａに格納する。
【００６５】
図６Ａは、ストレージ制御部１０３Ａが記憶デバイス１０５Ａ〜１０５Ｆへデータを送信する処理のシーケンスの例である。以下の説明は、ストレージ制御部１０３Ｂも適用できる。この場合、ストレージ制御部１０３Ａ、プロセッサ１０１Ａ及びメモリ１０２Ａは、それぞれ、ストレージ制御部１０３Ｂ、プロセッサ１０１Ｂ及びメモリ１０２Ｂに置き換えられる。この点は、図６Ｂの説明について同様である。
【００６６】
ステップ６０１において、プロセッサ１０１Ａはメモリ１０２Ａよりデータを取得する。次にステップ６０２において、プロセッサ１０１Ａは、取得したデータを、記憶デバイス１０５Ａ〜１０５Ｆのいずれにに送付するかの指定を付与して、バックエンドスイッチ１０４に送付する。
【００６７】
ステップ６０１及び６０２は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、それらの全部または一部は、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。例えば、ソフトウェアは、メモリ１０２Ａ上のデータ取得する場所、送付先記憶デバイス、及び送付するデータ長を指定し、機能ハードウェアは、指定された情報に従って動作する。
【００６８】
バックエンドスイッチ１０４は、プロセッサ１０１Ａより記憶デバイスに送付するデータを受信する。ステップ６０３において、バックエンドスイッチ１０４は、受信したデータに付与された送付先記憶デバイスの指定に従って、当該データを記憶デバイス１０５Ａ〜１０５Ｆの一つに送付する。
【００６９】
図６Ｂは、ストレージ制御部１０３Ａが記憶デバイス１０５Ａ〜１０５Ｆよりデータを取得する処理のシーケンスの例である。ステップ６１１で、プロセッサ１０１Ａは、記憶デバイス１０５Ａ〜１０５Ｆのいずれからデータを取得するかの指定を付与して、データ要求をバックエンドスイッチ１０４に送付する。ステップ６１１は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。例えば、ソフトウェアは、どの記憶デバイスのどこからデータを取得するか、取得したデータを格納するメモリ１０２Ａ上の場所、及び取得するデータ長さを指定する。機能ハードウェアは、指定された情報に従って動作する。
【００７０】
バックエンドスイッチ１０４は、プロセッサ１０１Ａよりどの記憶デバイスのどこからデータを取得するかの指定が付与されたデータ要求を受信する。ステップ６１２において、バックエンドスイッチ１０４は、当該データ要求を指定された記憶デバイスに送付する。
【００７１】
記憶デバイスは、バックエンドスイッチ１０４からデータ要求を受信すると、ステップ６１３において、要求されたデータをバックエンドスイッチ１０４に返送する。
【００７２】
ステップ６１２で送付したデータ要求に対して、記憶デバイスよりデータがバックエンドスイッチ１０４に返送される。ステップ６１４において、バックエンドスイッチ１０４は、当該データ要求送付元のプロセッサ１０１Ａに返送されたデータを更に返送する。
【００７３】
ステップ６１１でバックエンドスイッチ１０４に送付したデータ要求に対してデータが返送さると、ステップ６１５において、プロセッサ１０１Ａは、返送されたデータをメモリ１０２Ａに格納する。ステップ６１５は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、バックエンドスイッチ１０４からデータの返送を受信すると、自動的にメモリ１０２Ａに格納する。
【００７４】
図７Ａは、記憶デバイス１０５Ａ〜１０５Ｆの一つがメモリ１０２Ａにデータを送付する処理のシーケンスの例である。以下の説明は、メモリ１０２Ｂにも適用できる。その場合、プロセッサ１０１Ａ及びメモリ１０２Ａは、それぞれ、プロセッサ１０１Ｂ及びメモリ１０２Ｂに置き換えられる。この点は、図７Ｂの説明に同様である。
【００７５】
図７Ａにおいて、記憶デバイス１０５Ａ〜１０５Ｆの一つは、ステップ７０１で、メモリ１０２Ａ上の場所を指定して、バックエンドスイッチ１０４にデータを送付する。このデータの送付は、例えば図３Ａに示したデータ送付のフレーム３３３を用いる。
【００７６】
バックエンドスイッチ１０４は、記憶デバイス１０５Ａ〜１０５Ｆの一つよりデータを受信すると、ステップ７０２において、指定されたメモリがメモリ１０２Ａかメモリ１０２Ｂかに従って、受信したデータをメモリ１０２Ａまたは１０２Ｂ上の場所の指定と共にプロセッサ１０１Ａまたは１０１Ｂに送付する。本例において、指定されたメモリは１０２Ａである。
【００７７】
なお、指定されるメモリがメモリ１０２Ａであるかメモリ１０２Ｂであるかは、先に説明したように、記憶デバイス１０５Ａ〜１０５Ｆそれぞれに対し予め定められていてもよい。バックエンドスイッチ１０４は、図４Ａに示したスイッチング情報テーブル４５０を用いて、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータフレームに付与されたアドレスに基づいて、決定してもよい。この場合、図４Ａで説明したように、バックエンドスイッチ１０４は、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータ送付のフレームに含まれる送付先アドレスを、スイッチング情報テーブル４５０の情報を用いて、プロセッサ１０１Ａが使用するアドレス空間のアドレスに変換する。
【００７８】
プロセッサ１０１Ａは、バックエンドスイッチ１０４よりデータを受信すると、ステップ７０３において、指定されたメモリ１０２Ａ上の場所に受信したデータを格納する。ステップ７０３は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、処理を行っても良いし、プロセッサ１０１Ａまたは１０１Ｂに、バックエンドスイッチ１０４からデータを受信すると、自動的にメモリ１０２Ａまたは１０２Ｂに格納するハードウェアの機能を設けても良い。
【００７９】
図７Ｂは、記憶デバイス１０５Ａ〜１０５Ｆの一つがメモリ１０２Ａよりデータを取得する処理のシーケンスの例である。記憶デバイス１０５Ａ〜１０５Ｆの一つは、ステップ７１１で、データを取得するメモリ１０２Ａ上の場所を指定して、バックエンドスイッチ１０４にデータ要求を送付する。このデータ要求の送付は、例えば図３Ａに示したデータ要求のフレーム３３１を用いる。
【００８０】
バックエンドスイッチ１０４は、ステップ７１２において、指定されたメモリがメモリ１０２Ａかメモリ１０２Ｂかに従って、受信したデータ要求を、メモリ１０２Ａまたは１０２Ｂ上の場所の指定と共に、プロセッサ１０１Ａまたは１０１Ｂに送付する。本例において、メモリ１０２Ａが指定されている。
【００８１】
なお、指定されるメモリがメモリ１０２Ａであるかメモリ１０２Ｂであるかは、ステップ７０２の説明と同じく、記憶デバイス１０５Ａ〜１０５Ｆそれぞれに対し予め定められていてもよい。バックエンドスイッチ１０４は、図４Ａに示したスイッチング情報テーブル４５０を用いて、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータフレームに付与されたアドレスに基づいて、決定してもよい。この場合、図４Ａで説明したように、バックエンドスイッチ１０４は、記憶デバイス１０５Ａ〜１０５Ｆより受信したデータ送付のフレームに含まれる送付先アドレスを、スイッチング情報テーブル４５０の情報を用いて、プロセッサ１０１Ａが使用するアドレス空間のアドレスに変換する。
【００８２】
プロセッサ１０１Ａは、バックエンドスイッチ１０４からデータ要求を受信すると、ステップ７１３において、指定されたメモリ１０２Ａ上の場所からデータを取得する。プロセッサ１０１Ａは更に、ステップ７１４において、メモリ１０２Ａより取得したデータをバックエンドスイッチ１０４に返送する。
【００８３】
ステップ７１３及び７１４は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。に、バックエンドスイッチ１０４からデータ要求を受信すると、機能ハードウェアは、自動的に指定されたメモリ１０２Ａ上の場所に従ってメモリ１０２Ａからデータを取得して、バックエンドスイッチ１０４に返送する。
【００８４】
バックエンドスイッチ１０４は、ステップ７１２で送付したデータ要求に対して、プロセッサ１０１Ａからデータが返送されてくると、ステップ７１５で、更に当該データを、ステップ７１１でデータ要求を送付してきた記憶デバイス１０５Ａ〜１０５Ｆの一つに返送する。
【００８５】
上述のように、実施例１において、互換性のある通信規格が、ストレージ制御部間の通信及びストレージ制御部と記憶デバイスとの間の通信に適用される。実施例１によって、ストレージ制御部１０３Ａと１０３Ｂは、バックエンドスイッチ１０４を用いて互いに通信を行うことができる。
【００８６】
例えば、図１に図示されない上位装置から記憶デバイス１０５Ａ〜１０５Ｆに書き込むためのデータを受信した場合、ストレージ制御部１０３Ａ、１０３Ｂは、バックエンドスイッチ１０４を介して当該データを二重化することができる。記憶デバイス１０５Ａ〜１０５Ｆへの書込みが完了しなくとも充分な信頼性と可用性を確保することができるので、記憶デバイス１０５Ａ〜１０５Ｆへ書き込む前に上位装置に書込み完了を通知することが可能である。更にバックエンドスイッチ１０４に、共有記憶領域は不要である。
【実施例２】
【００８７】
次に図２〜図７Ｂを用いて本発明の実施例２を説明する。図２は、実施例２に係るストレージシステムの構成例である。図２において、ストレージシステムは、二つのストレージ制御部２０３Ａ、２０３Ｂを備える。ストレージ制御部２０３Ａは、プロセッサ２０１Ａ及びメモリ２０２Ａを含んで構成される。ストレージ制御部２０３Ｂは、プロセッサ２０１Ｂ及びメモリ２０２Ｂを含んで構成される。
【００８８】
実施例２に係わるストレージシステムは、二つの互いに独立なバックエンドスイッチ２０４Ａと２０４Ｂを備える。プロセッサ２０１Ａは、バックエンドスイッチ２０４Ａ及び２０４Ｂそれぞれに、パス２０６Ａ及び２０８Ａによって接続される。プロセッサ２０１Ｂは、バックエンドスイッチ２０４Ａ及び２０４Ｂそれぞれに、パス２０６Ｂ及び２０８Ｂによって接続される。
【００８９】
実施例２に係るストレージシステムは、記憶デバイス２０５Ａ〜２０５Ｆを備える。記憶デバイス２０５Ａ〜２０５Ｆは、バックエンドスイッチ２０４Ａにそれぞれパス２０７Ａ〜２０７Ｆによって接続される。記憶デバイス２０５Ａ〜２０５Ｆは、バックエンドスイッチ２０４Ｂにそれぞれパス２０９Ａ〜２０９Ｆによって接続される。
【００９０】
プロセッサ２０１Ａ及び２０１Ｂは、バックエンドスイッチ２０４Ａまたは２０４Ｂのどちらか一方のみを用いても、すべての記憶デバイス２０５Ａ〜２０５Ｆ及び他方のプロセッサ２０１Ｂ及び２０１Ａに接続される。
【００９１】
この構成により、バックエンドスイッチ２０４Ａ及び２０４Ｂの一方が動作を停止しても、またはバックエンドスイッチ２０４Ａ及び２０４Ｂへのパスのいずれかが切断されても、プロセッサ２０１Ａ及び２０１Ｂとの間の通信、及びプロセッサ２０１Ａまたは２０１Ｂと記憶デバイス２０５Ａ〜２０５Ｆの間の通信をすべて継続できる。これによりシステムの可用性を高めることができる。
【００９２】
なお、図２は、六つの記憶デバイスは２０５Ａ〜２０５Ｆを示すが、記憶デバイスの数に任意である。
【００９３】
実施例２に係わるストレージシステムに対して、実施例１における図３Ａ〜図７Ｂの説明が適用できる。実施例２においては、ストレージ制御部１０３Ａ、１０３Ｂ、プロセッサ１０１Ａ、１０１Ｂ、メモリ１０２Ａ、１０２Ｂは、それぞれ、ストレージ制御部２０３Ａ、２０３Ｂ、プロセッサ２０１Ａ、２０１Ｂ、メモリ２０２Ａ、２０２Ｂに、置き換えられる。また、バックエンドスイッチ１０４は、バックエンドスイッチ２０４Ａまたは２０４Ｂに置き換えられ、記憶デバイス１０５Ａ〜１０５Ｆは、記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【００９４】
よって、実施例１と同じく、ストレージ制御部２０３Ａと２０３Ｂは、バックエンドスイッチ２０４Ａまたは２０４Ｂを用いて互いに通信を行うことができる。例えば図２に図示されない上位装置から記憶デバイス２０５Ａ〜２０５Ｆに書き込むためのデータを受信した場合、ストレージ制御部２０３Ａ、２０３Ｂは、バックエンドスイッチ２０４Ａまたは２０４Ｂを介して当該データを二重化することができる。
【００９５】
以上により、記憶デバイス２０５Ａ〜２０５Ｆへの書込みが完了しなくとも充分な信頼性と可用性を確保することができるので、記憶デバイス２０５Ａ〜２０５Ｆへ書き込む前に上位装置に書込み完了を通知することが可能である。更にバックエンドスイッチ２０４Ａまたは２０４Ｂには、共有記憶領域は不要である。
【実施例３】
【００９６】
図１、図４Ａ、図４Ｂ、図６Ａ〜図９Ｂ、図２７を用いて実施例３を説明する。実施例３において、図１、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂの説明は、実施例１と同じである。
【００９７】
図２７は、バックエンドスイッチ１０４がプロセッサ１０１Ａよりデータ送付またはデータ要求を受信した場合の処理手順を示すフローチャートの例である。バックエンドスイッチ１０４がプロセッサ１０１Ｂからデータ送付またはデータ要求を受信した時の処理手順も同じである。その場合、図２７でプロセッサ１０１Ａは、プロセッサ１０１Ｂに置き換えられる。
【００９８】
バックエンドスイッチ１０４が、ステップ２７００で、プロセッサ１０１Ａよりデータまたはデータ要求を受信する。ステップ２７０１で、バックエンドスイッチ１０４は、記憶デバイス１０５Ａ〜１０５Ｆへのパス１０７Ａ〜１０７Ｆの対象となる一つを選択する。次にステップ２７０２で、バックエンドスイッチ１０４は、該データ送付またはデータ要求を、該記憶デバイスに送付して、処理を終了する。
【００９９】
図８Ａは、実施例３に係るストレージシステムで用いることのできるデータ転送指示のフレームフォーマット例である。第１のフォーマットのデータ転送指示８５１は、プロセッサ１０１Ａからバックエンドスイッチ１０４への、データ転送指示である。データ転送指示８５１は、データ転送方向を指定する。先頭フィールドは、転送方向を指定する。転送方向は、例えば０または１で表わされる。例えば、０はプロセッサ１０１Ａからプロセッサ１０１Ｂにデータを転送することを示す。１は、プロセッサ１０１Ｂからプロセッサ１０１Ａにデータを転送することを示す。
【０１００】
次のフィールドは、転送するデータ長を示す。さらに次のフィールドは、プロセッサ１０１Ａのアドレス空間におけるメモリ１０２Ａ上のアドレスを示す。最後のフィールドは、プロセッサ１０１Ａのアドレス空間において設定された、プロセッサ１０１Ｂのメモリ１０２Ｂ上のアドレスを示す。
【０１０１】
データ転送指示８５１は、データ転送方向を指定する情報をおく必要があるが、例えばアドレス変換を行うのは常に、最後においたプロセッサ１０１Ａが設定したプロセッサ１０１Ｂのメモリ１０２上のアドレスであるので、バックエンドスイッチ１０４内にアドレス変換機能を容易に設けることができる。
【０１０２】
第２のフォーマットのデータ転送指示８５２は、転送元アドレスと転送先アドレスを指定することによって、転送方向を示す。転送方向のフィールドが不要である。先頭フィールドは、データ長を示す。次のフィールドは、転送元アドレスを示す。最後のフィールドは、転送先アドレスを示す。
【０１０３】
図８Ｂは、バックエンドスイッチ１０４がプロセッサ１０１Ａよりデータ転送指示を受信した場合の処理の手順を示すフローチャートの例である。バックエンドスイッチ１０４がプロセッサ１０１Ｂからデータ転送指示を受信した場合の処理手順も同じである。その場合、以下の説明において、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられれ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１０４】
図８Ｂを参照して、バックエンドスイッチ１０４は、ステップ８００で、プロセッサ１０１Ａよりデータ転送指示を受信する。次にステップ８０１で、バックエンドスイッチ１０４は、受信したデータ転送指示の転送方向を判定する。転送方向がメモリ１０２Ａからメモリ１０２Ｂへの転送であれば（８０１：メモリ１０２Ａからメモリ１０２Ｂへ転送）、処理は、ステップ８０２へ進む。
【０１０５】
ステップ８０２において、バックエンドスイッチ１０４は、メモリ１０２Ａより転送するデータを取得する。次にステップ８０３において、バックエンドスイッチ１０４は、プロセッサ１０１Ａがデータ転送指示において指定した転送先のアドレスを、プロセッサ１０１Ｂが使用するアドレスに変換する。スイッチング情報テーブル３５０が参照される。プロセッサ１０１Ａとプロセッサ１０１Ｂは互いに独立したプロセッサであり、それぞれが使用するメモリの場所を特定するアドレスについては、各々独立に定められる。このため、本実施例も、所定の規則に従って、お互いのアドレスを変換する。
【０１０６】
最後にステップ８０４において、バックエンドスイッチ１０４は、変換したアドレスに従って、メモリ１０２Ｂにメモリ１０２Ａより取得したデータを書き込んで、処理を終了する。
【０１０７】
ステップ８０１において、転送方向がメモリ１０２Ｂからメモリ１０２Ａへの転送であれば（８０１：メモリ１０２Ｂからメモリ１０２Ａへ転送）、処理は、ステップ８０５に進む。
【０１０８】
ステップ８０５において、バックエンドスイッチ１０４は、ステップ８０３と同じく、プロセッサ１０１Ａが指定した転送元のアドレスを、プロセッサ１０１Ｂが使うアドレスに変換する。次にステップ８０６において、バックエンドスイッチ１０４は、変換したアドレスに従って、メモリ１０２Ｂよりデータを取得する。最後にステップ８０７において、バックエンドスイッチ１０４は、メモリ１０２Ｂより取得したデータをメモリ１０２Ａに書き込んで、処理を終了する。
【０１０９】
図９Ａは、図８Ｂのフローチャートで示した処理手順に従って、ストレージ制御部１０３Ａがストレージ制御部１０３Ｂにデータを送付する処理のシーケンスの例である。図９Ｂは、ストレージ制御部１０３Ａがストレージ制御部１０３Ｂよりデータを取得する処理のシーケンスの例である。
【０１１０】
なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａにデータを送付するまたはストレージ制御部１０３Ａからデータを取得する処理のシーケンスも同様となる。その場合、図９Ａ及び９Ｂにおいて、ストレージ制御部１０３Ａ、プロセッサ１０１Ａ、メモリ１０２Ａが、それぞれ、ストレージ制御部１０３Ｂ、プロセッサ１０１Ｂ、メモリ１０２Ｂと入れ替えられる。
【０１１１】
図９Ａを参照して、ステップ９０１で、プロセッサ１０１Ａは、転送先のメモリ１０２Ｂ上の場所を識別するアドレスＡ、転送元のメモリ１０２Ａ上の場所を識別するアドレス、転送するデータ長を含むデータ転送指示を、バックエンドスイッチ１０４に送付する。指定される二つのアドレスは、プロセッサ１０１Ａのアドレス空間におけるアドレスである。
【０１１２】
バックエンドスイッチ１０４は、ステップ９０２において、メモリ１０２Ａの指定されたデータ転送元のアドレスから転送元データを取得する要求を、プロセッサ１０１Ａに送付する。
【０１１３】
プロセッサ１０１Ａは、ステップ９０３において、メモリ１０２Ａ上の要求されたアドレスからデータを取得する。次にプロセッサ１０１Ａは、ステップ９０４において、メモリ１０２Ａから取得したデータをバックエンドスイッチ１０４に返送する。ステップ９０３及び９０４は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。バックエンドスイッチ１０４からデータ要求を受信すると、機能ハードウェアは、自動的に指定されたアドレスに従ってメモリ１０２Ａからデータを取得して、バックエンドスイッチ１０４に返送する。
【０１１４】
バックエンドスイッチ１０４は、プロセッサ１０１Ａより転送元のデータを受ける。ステップ９０５において、バックエンドスイッチ１０４は、プロセッサ１０１Ａから送付されたデータ転送指示に含まれる、プロセッサ１０１Ａが転送先のメモリ１０２Ｂ上の場所を識別するアドレスＡを、プロセッサ１０１Ｂが使用するメモリ１０２Ｂ上のアドレスＢに変換する。スイッチング情報テーブル３５０が参照される。
【０１１５】
バックエンドスイッチ１０４は、アドレスＢを付与して、プロセッサ１０１Ａより返送されたデータを、プロセッサ１０１Ｂに送付する。アドレスＡをアドレスＢに変換する理由は、図８Ｂのステップ８０３における説明の通りである。
【０１１６】
プロセッサ１０１Ｂは、バックエンドスイッチ１０４よりアドレスＢが付与されたデータを受信する。ステップ９０６において、プロセッサ１０１Ｂは、アドレスＢに従ってメモリ１０２Ｂに送付されたデータを格納する。ステップ９０６は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、バックエンドスイッチ１０４からアドレスＢが付与されたデータを受信すると、自動的にアドレスＢに従ってメモリ１０２Ｂにデータを格納する。
【０１１７】
図９Ｂを参照して、ステップ９１１で、プロセッサ１０１Ａは、データ転送指示を、バックエンドスイッチ１０４に送付する。データ転送指示は、プロセッサ１０１Ａが転送元のメモリ１０２Ｂ上の場所を識別するアドレスＣ、転送先のメモリ１０２Ａ上の場所を識別するアドレス、及び転送するデータ長を含む。
【０１１８】
バックエンドスイッチ１０４は、ステップ９１２において、プロセッサ１０１Ａが送付したデータ転送指示に含まれるアドレスＣを、プロセッサ１０１Ｂがメモリ１０２Ｂ上の場所を識別するのに使用するアドレスＤに変換する。スイッチング情報テーブル３５０が参照される。バックエンドスイッチ１０４は、アドレスＤを付与してデータ取得の要求を、プロセッサ１０１Ｂに送付する。アドレスＣをアドレスＤに変換する理由は、図８Ｂのステップ８０３における説明の通りである。
【０１１９】
プロセッサ１０１Ｂは、バックエンドスイッチ１０４からアドレスＤが付与されたデータ要求を受信する。ステップ９１３において、プロセッサ１０１Ｂは、アドレスＤに従ってメモリ１０２Ｂよりデータを取得する。次にステップ９１４において、プロセッサ１０１Ｂは、メモリ１０２Ｂより取得したデータをバックエンドスイッチ１０４に返送する。
【０１２０】
ステップ９１３及び９１４は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。バックエンドスイッチ１０４からアドレスＤが付与されたデータ要求を受信すると、機能ハードウェアは、自動的にアドレスＤに従ってメモリ１０２Ｂからデータを取得して、バックエンドスイッチ１０４に返送する。
【０１２１】
バックエンドスイッチ１０４は、ステップ９１２でプロセッサ１０１Ｂに送付したデータ要求に対応して、プロセッサ１０１Ｂよりメモリ１０２Ｂから取得したデータを受信する。ステップ９１５において、バックエンドスイッチ１０４は、受信したデータを、当該転送指示に示されている転送先のメモリ１０２Ａ上のアドレスを付与して、プロセッサ１０１Ａに送付する。
【０１２２】
プロセッサ１０１Ａは、バックエンドスイッチ１０４より、メモリ１０２Ａ上のアドレスが付与されたデータが送付されると、ステップ９１６において、付与されたアドレスに従って、当該データをメモリ１０２Ａに格納する。ステップ９１６は、プロセッサ１０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。バックエンドスイッチ１０４からメモリ１０２Ａ上のアドレスが付与されたデータを受信すると、機能ハードウェアは、自動的に付与されたアドレスに従ってメモリ１０２Ａにデータを格納する。
【０１２３】
以上に説明した実施例３によって、実施例１と同じく、ストレージ制御部１０３Ａと１０３Ｂは、バックエンドスイッチ１０４を用いて互いに通信を行うことができる。例えば図１に図示されない上位装置から記憶デバイス１０５Ａ〜１０５Ｆに書き込むためのデータを受信した場合、ストレージ制御部１０３Ａ、１０３Ｂは、バックエンドスイッチ１０４を介して当該データを二重化することができる。
【０１２４】
以上により、記憶デバイス１０５Ａ〜１０５Ｆへの書込みが完了しなくとも充分な信頼性と可用性を確保することができるので、記憶デバイス１０５Ａ〜１０５Ｆへ書き込む前に上位装置に書込み完了を通知することが可能である。更にバックエンドスイッチ１０４に、共有記憶領域は不要である。また、本実施例では、バックエンドスイッチとプロセッサの機能ハードウェアが、転送元アドレスと転送先アドレスとの間のデータ転送を実行することで、プロセッサの処理時間を低減できる。
【０１２５】
図１に示したストレージシステムの構成に代えて、図２に示すストレージシステムの構成を採用してもよい。図２に示したストレージシステムの構成を採る場合、上記説明において、ストレージ制御部１０３Ａはストレージ制御部２０３Ａに、ストレージ制御部１０３Ｂはストレージ制御部２０３Ｂに、置き換えられる。
【０１２６】
さらに、プロセッサ１０１Ａはプロセッサ２０１Ａに、プロセッサ１０１Ｂはプロセッサ２０１Ｂに、メモリ１０２Ａはメモリ２０２Ａに、メモリ１０２Ｂはメモリ２０２Ｂに、置き換えられる。また、バックエンドスイッチ１０４はバックエンドスイッチ２０４Ａまたは２０４Ｂに、記憶デバイス１０５Ａ〜１０５Ｆは記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例４】
【０１２７】
次に図１または図２、及び図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図１０、図１１を用いて実施例４を説明する。本実施例のストレージシステムの構成として図１に示す構成を採る場合、図１、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂの説明は、実施例１と同じである。
【０１２８】
図１０は、本実施例において、バックエンドスイッチ１０４がプロセッサ１０１Ａよりデータ送付またはデータ要求を受信した場合の処理手順を示すフローチャートの例である。なお、バックエンドスイッチ１０４がプロセッサ１０１Ｂからデータ送付またはデータ要求を受信した場合の処理手順も同様である。その場合、図１０において、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられる。
【０１２９】
図１０において、ステップ１０００からステップ１００６までの処理に対して、実施例１における図３Ｃのステップ３００からステップ３０６までの説明が適用できる。
【０１３０】
ステップ１００７では、バックエンドスイッチ１０４は、プロセッサ１０１Ａから送付されたフレームが、メモリ１０２Ｂに格納するためのデータの送付か、メモリ１０２Ｂのデータの取得の要求かを判定する。判定した結果がメモリ１０２Ｂに格納するためのデータ送付であれば（１００７：データ送付）、バックエンドスイッチ１０４は、ステップ１００８に進む。
【０１３１】
ステップ１００８では、バックエンドスイッチ１０４は、メモリ１０２Ｂに格納するためにデータを送付したことを、プロセッサ１０１Ｂに通知する。プロセッサ１０１Ｂへの通知は、例えば、予め定める特定の信号をバックエンドスイッチ１０４からプロセッサ１０１Ｂに送付することで行う。または、通知は、予め定める特定のデータをプロセッサ１０１Ｂの特定のアドレスに送付することで行う。または、バックエンドスイッチ１０４からプロセッサ１０１Ｂに、インタラプト信号を送付してもよい。
【０１３２】
ステップ１００７で、判定した結果がメモリ１０２Ｂのデータの取得の要求であれば（１００７：データ要求）、バックエンドスイッチ１０４は、処理を終了する。
【０１３３】
図１１は、バックエンドスイッチ１０４が図１０に示す処理手順に従って処理を行う場合に、ストレージ制御部１０３Ａからストレージ制御部１０３Ｂにデータを送信する処理のシーケンスの例である。
【０１３４】
なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａにデータを送信する処理のシーケンスも同様となる。その場合、図１１において、ストレージ制御部１０３Ａとストレージ制御部１０３Ｂとが入れ替えられ、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１３５】
図１１において、ステップ１１０１からステップ１１０４に対して、実施例１における図５Ａのステップ５０１からステップ５０４までの説明が適用できる。ステップ１１０３の後、ステップ１１０５において、バックエンドスイッチ１０４は、プロセッサ１０１Ｂにデータを送付したことを通知する。この通知の方法は、先に図１０のステップ１００８の説明の通りである。
【０１３６】
以上のように、本実施例は、バックエンドスイッチからプロセッサへのデータ送付を通知する。本実施例は、実施例１で説明した効果に加えて、プロセッサ１０１Ｂが、定期的にメモリ１０２Ｂの内容を検査しなくとも、プロセッサ１０１Ａからのデータ送付が行われたことを知ることができる。メモリ１０２Ｂの内容を定期的に検査する必要がないので、性能的なオーバーヘッドを削減でき、プロセッサ１０１Ｂの効率を向上させることが可能である。
【０１３７】
本実施例のストレージシステムの構成として、図１に示す構成に代えて、図２に示す構成を採ることができる。この場合、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂに関する説明は実施例２と同じである。図１０、図１１の説明において、ストレージ制御部１０３Ａはストレージ制御部２０３Ａに、ストレージ制御部１０３Ｂはストレージ制御部２０３Ｂに置き換えられる。
【０１３８】
さらに、プロセッサ１０１Ａはプロセッサ２０１Ａに、プロセッサ１０１Ｂはプロセッサ２０１Ｂに、メモリ１０２Ａはメモリ２０２Ａに、メモリ１０２Ｂはメモリ２０２Ｂに、置き換えられる。また、バックエンドスイッチ１０４はバックエンドスイッチ２０４Ａまたは２０４Ｂに、記憶デバイス１０５Ａ〜１０５Ｆは記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例５】
【０１３９】
次に図１または図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図１２、図１３Ａ、図１３Ｂ、図２７を用いて実施例５を説明する。本実施例において、図１、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７の説明は、実施例３と同様である。
【０１４０】
本実施例のストレージシステムの構成として図１に示す構成を採る場合について、図１２及び図１３を参照して説明する。図１２は、バックエンドスイッチ１０４が、プロセッサ１０１Ａからデータ転送指示を受信した場合の処理の手順を示すフローチャートの例である。
【０１４１】
なおバックエンドスイッチ１０４がプロセッサ１０１Ｂからデータまたはデータ要求を受信した場合の処理手順も同じである。その場合、図１２において、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１４２】
図１２において、ステップ１２００からステップ１２０７に対しては、実施例３の図８Ｂにおけるステップ８００からステップ８０７の説明が適用できる。ステップ１２０８では、バックエンドスイッチ１０４は、プロセッサ１０１Ｂに当該データをメモリ１０２Ｂに書き込んだことを通知する。
【０１４３】
プロセッサ１０１Ｂへの通知は、例えば、予め定める特定の信号をバックエンドスイッチ１０４からプロセッサ１０１Ｂに送付することで行う。または通知は、予め定める特定のデータをプロセッサ１０１Ｂの特定のアドレスに送付することで行う。またはバックエンドスイッチ１０４からプロセッサ１０１Ｂに、インタラプト信号を送付してもよい。
【０１４４】
バックエンドスイッチ１０４は、ステップ１２０７の後、ステップ１２０９に進む。ステップ１２０９では、バックエンドスイッチ１０４が、メモリ１０２Ｂより取得したデータをメモリ１０２Ａに書き込んだことをプロセッサ１０１Ａに通知する。
【０１４５】
プロセッサ１０１Ａへの通知は、例えば、予め定める特定の信号をバックエンドスイッチ１０４からプロセッサ１０１Ａに送付することで行う。または通知は、予め定める特定のデータをプロセッサ１０１Ａの特定のアドレスに送付することで行う。またはバックエンドスイッチ１０４からプロセッサ１０１Ａに、インタラプト信号を送付してもよい。
【０１４６】
図１３Ａは、バックエンドスイッチ１０４が図１２に示す処理手順に従って処理を行う場合に、ストレージ制御部１０３Ａがストレージ制御部１０３Ｂにデータを送信する処理のシーケンスの例である。図１３Ｂは、ストレージ制御部１０３Ａがストレージ制御部１０３Ｂからデータを取得する処理のシーケンスの例である。
【０１４７】
なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａにデータを送信するまたはストレージ制御部１０３Ａのデータを取得する処理のシーケンスも同様である。その場合、図１３Ａ及び１３Ｂにおいて、ストレージ制御部１０３Ａとストレージ制御部１０３Ｂとが入れ替えられ、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１４８】
図１３Ａにおいて、ステップ１３０１からステップ１３０６に対して、実施例３の図９Ａにおけるステップ９０１からステップ９０６までの説明が適用できる。図１３Ａでは、バックエンドスイッチ１０４が、ステップ１３０５の後、ステップ１３０７において、当該データを送付したことをプロセッサ１０１Ｂに通知する。この通知の方法は、図１２のステップ１２０８において説明にした通りである。
【０１４９】
図１３Ｂにおいて、ステップ１３１１からステップ１３１６に対して、実施例３の図９Ｂにおけるステップ９１１からステップ９１６の説明が適用できる。図１３Ｂでは、バックエンドスイッチ１０４が、ステップ１３１５の後、ステップ１３１７において、プロセッサ１０１Ａに当該データを送付したことを通知する。この通知の方法は、図１２のステップ１２０９において説明した通りである。
【０１５０】
以上のように、本実施例はバックエンドスイッチからプロセッサにデータ送付を通知する。本実施例は、実施例３で説明した効果に加えて、プロセッサ１０１Ａまたは１０１Ｂが定期的にメモリ１０２Ａまたは１０２Ｂの内容を検査しなくとも、バックエンドスイッチ１０４からのデータ送付が行われたことを知ることができる。メモリ１０２Ａまたは１０２Ｂの内容を定期的に検査する必要がないので、性能的なオーバーヘッドを削減でき、プロセッサ１０１Ａまたは１０１Ｂの効率を向上させることが可能である。
【０１５１】
本実施例のストレージシステムの構成として、図１に示す構成に代えて、図２に示す構成を採ることができる。この場合、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７に関する説明は、実施例３と同じである。図１２、図１３の説明において、ストレージ制御部１０３Ａはストレージ制御部２０３Ａに、ストレージ制御部１０３Ｂはストレージ制御部２０３Ｂに、置き換えられる。
【０１５２】
さらに、プロセッサ１０１Ａはプロセッサ２０１Ａに、プロセッサ１０１Ｂはプロセッサ２０１Ｂに、メモリ１０２Ａはメモリ２０２Ａに、メモリ１０２Ｂはメモリ２０２Ｂに、置き換えられる。また、バックエンドスイッチ１０４はバックエンドスイッチ２０４Ａまたは２０４Ｂに、記憶デバイス１０５Ａ〜１０５Ｆは記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例６】
【０１５３】
図１または図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図１４、図２７を用いて実施例６を説明する。本実施例において、図１、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７の説明は実施例３と同様である。本実施例のストレージシステムの構成として図１に示す構成を採る場合について、図１４を説明する。
【０１５４】
図１４は、バックエンドスイッチ１０４がプロセッサ１０１Ａからデータ転送指示を受信した場合の処理の手順を示すフローチャートの例である。なおバックエンドスイッチ１０４がプロセッサ１０１Ｂからデータ転送指示を受信した場合の処理手順も同じである。その場合、図１４でプロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１５５】
図１４において、ステップ１４００からステップ１４０７に対して、実施例３の図８Ｂにおけるステップ８００からステップ８０７までの説明が適用できる。図１４では、ステップ１４００でプロセッサ１０１Ａより受信するデータ転送指示が、転送するデータに誤りがあるかどうかをチェックできるデータチェックコードを含む。
【０１５６】
データチェックコードは、例えばＴ１０ＤＩＦと呼ばれる標準のデータチェックコードでもよい。データチェックコードと照合できるデータ保護のためのコードが、チェック対象のデータに付与されてもよく、チェック対象と別にバックエンドスイッチ１０４に供給されてもよい。
【０１５７】
図１４において、処理は、ステップ１４０２の後に、ステップ１４０８に進む。ステップ１４０８では、バックエンドスイッチ１０４は、プロセッサ１０１Ａより受信したデータ転送指示に含まれているデータチェックコードにより、ステップ１４０２でメモリ１０２Ａより取得したデータに誤りがあるかどうかチェックする。
【０１５８】
次にステップ１４０９に進み、バックエンドスイッチ１０４は、チェックした結果、誤りがあるかどうかを判定する。誤りがなければ（１４０９：ＯＫ）、処理は、ステップ１４０３に進む。誤りがあれば（１４０９：ＮＧ）、バックエンドスイッチ１０４は、メモリ１０２Ｂに当該データを書き込まずに、ステップ１４１２に進む。バックエンドスイッチ１０４は、ステップ１４０４の後もステップ１４１２に進む。
【０１５９】
処理は、ステップ１４０６の後に、ステップ１４１０に進む。ステップ１４１０では、バックエンドスイッチ１０４は、プロセッサ１０１Ａより受信したデータ転送指示に含まれているデータチェックコードにより、ステップ１４０６でメモリ１０２Ｂより取得したデータに誤りがあるかどうかチェックする。
【０１６０】
次に、バックエンドスイッチ１０４は、ステップ１４１１に進み、チェックした結果、誤りがあるかどうかを判定する。誤りがなければ（１４１１：ＯＫ）、バックエンドスイッチ１０４は、ステップ１４０７に進む。誤りがあれば（１４１１：ＮＧ）、バックエンドスイッチ１０４は、メモリ１０２Ａに当該データを書き込まずに、ステップ１４１２に進む。バックエンドスイッチ１０４は、ステップ１４０３の後もステップ１４１２に進む。
【０１６１】
ステップ１４１２では、バックエンドスイッチ１０４は、ステップ１４０８またはステップ１４１０でチェックしたチェック結果をプロセッサ１０１Ａに報告して、処理を終了する。
【０１６２】
以上のように、本実施は、実施例３で説明した効果に加えて、転送するデータに誤りがあるかどうかを、バックエンドスイッチ１０４にてチェックすることができる。よって、転送するデータの正当性を高めることが可能であり、さらに、プロセッサ１０１Ａまたは１０１Ｂにおいて、データ誤りチェックのために性能的なオーバーヘッドを生じることがない。
【０１６３】
本実施例のストレージシステムの構成として、図１に示す構成に代えて、図２に示す構成を採ることができる。この場合、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７の説明は、実施例３と同じである。図１４の説明において、プロセッサ１０１Ａはプロセッサ２０１Ａに、プロセッサ１０１Ｂはプロセッサ２０１Ｂに、メモリ１０２Ａはメモリ２０２Ａに、メモリ１０２Ｂはメモリ２０２Ｂに、置き換えられる。さらに、バックエンドスイッチ１０４はバックエンドスイッチ２０４Ａまたは２０４Ｂに、記憶デバイス１０５Ａ〜１０５Ｆは記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例７】
【０１６４】
図１または図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図１５、図１６、図２７を用いて実施例７を説明する。本実施例において、図１、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７の説明は実施例３と同様である。本実施例のストレージシステムの構成として図１に示す構成を採る場合について、図１５及び図１６を参照して説明する。
【０１６５】
図１５は、バックエンドスイッチ１０４がプロセッサ１０１Ａからデータ転送指示を受信した場合の処理の手順を示すフローチャートの例である。なおバックエンドスイッチ１０４がプロセッサ１０１Ｂからデータ転送指示を受信した場合の処理手順も同様である。その場合、図１５において、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１６６】
図１５において、ステップ１５００からステップ１５０７に対して、実施例３の図８におけるステップ８００からステップ８０７の説明が適用できる。図１５では、バックエンドスイッチ１０４は、ステップ１５０４の後、ステップ１５０８に進む。
【０１６７】
ステップ１５０８では、バックエンドスイッチ１０４は、メモリ１０２Ｂに書き込んだ当該データを再度読み込む。このステップによって、ステップ１５０４で当該データを確実にメモリ１０２Ｂに書き込む処理が完了したことを保証することができる。ステップ１５０８で読込むデータの長さは、ステップ１５０４で書き込んだデータの長さに等しくてもよく、ステップ１５０４で書き込んだデータの一部の長さであってもよい。例えば、バックエンドスイッチ１０４は、ステップ１５０４で書き込んだデータの最後の部分を読み込んでもよい。
【０１６８】
ステップ１５０９において、バックエンドスイッチ１０４は、プロセッサ１０１Ａに当該データを読み込めたことを通知する。通知は、例えば、ステップ１５０８で読み込んだデータの全部または一部をプロセッサ１０１Ａへ送付することで行ってもよいし、予め定める特定の信号をプロセッサ１０１Ａに送付することで行ってもよい。
【０１６９】
読み込んだデータの全部または一部をプロセッサ１０１Ａに送付する場合、送付した当該データの全部または一部は、プロセッサ１０１Ａにより破棄される。更にバックエンドスイッチ１０４からプロセッサ１０１Ａに送付されなかった当該データの全部または一部がある場合には、プロセッサ１０１Ａに送付されなかったデータは、バックエンドスイッチ１０４により破棄される。
【０１７０】
また更に、通知は、別途予め定める特定のデータをプロセッサ１０１Ａのアドレス空間における特定のアドレスに送付することで行ってもよく、バックエンドスイッチ１０４からプロセッサ１０１Ａに、インタラプト信号を送付することで行ってもよい。このようにすることで、メモリ１０２Ｂに書き込む処理が完了したことをプロセッサ１０１Ａに通知可能である。
【０１７１】
図１６は、バックエンドスイッチ１０４が図１５に示す処理手順に従って処理を行う場合に、ストレージ制御部１０３Ａからストレージ制御部１０３Ｂにデータを送信する処理のシーケンスの例である。なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａへデータを送信する処理の流れも同様となる。
【０１７２】
その場合、図１６において、ストレージ制御部１０３Ａとストレージ制御部１０３Ｂが入れ替えられ、プロセッサ１０１Ａとプロセッサ１０１Ｂとが入れ替えられ、メモリ１０２Ａとメモリ１０２Ｂとが入れ替えられる。
【０１７３】
図１６において、ステップ１６０１から１６０６に対して、実施例３の図９Ａにおけるステップ９０１から９０６までの説明が適用できる。図１６では、バックエンドスイッチ１０４は、ステップ１６０７において、ステップ１６０５で用いたアドレスＢを再び用いて、メモリ１０２Ｂから当該データを取得する要求をプロセッサ１０１Ｂに送付する。
【０１７４】
取得するデータの長さは、ステップ１６０５でアドレスＢを付与して送付したデータの長さと等しくてもよく、ステップ１６０５でアドレスＢを付与して送付したデータの一部の長さであってもよい。これは、図１５のステップ１５０８の説明の通りである。例えば、バックエンドスイッチ１０４は、ステップ１６０５で送付したデータの最後の一部を取得するように、取得するデータの長さとアドレスＢを変更しても良い。
【０１７５】
プロセッサ１０１Ｂは、バックエンドスイッチ１０４からアドレスＢが付与されたデータ要求を受信すると、ステップ１６０８において、アドレスＢに従って、メモリ１０２Ｂよりデータを取得する。次にステップ１６０９において、プロセッサ１０１Ｂは、メモリ１０２Ｂより取得したデータをバックエンドスイッチ１０４に返送する。
【０１７６】
ステップ１６０８及び１６０９は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、バックエンドスイッチ１０４からアドレスＢが付与されたデータ要求を受信すると、自動的にアドレスＢに従ってメモリ１０２Ｂからデータを取得して、バックエンドスイッチ１０４に返送する。
【０１７７】
バックエンドスイッチ１０４は、プロセッサ１０１ＢよりアドレスＢのデータを受信すると、ステップ１６１０において、データがメモリ１０２Ｂより読み込めたことをプロセッサ１０１Ａに通知する。通知方法は、図１５のステップ１５０９の説明の通りである。
【０１７８】
以上のように、本実施は、実施例３で説明した効果に加えて、ストレージ制御部１０３Ａからストレージ制御部１０３Ｂにデータを転送する場合に、メモリ１０２Ｂに当該データを格納できたことを保証できる。例えば図１に図示されない上位装置から記憶デバイス１０５Ａ〜１０５Ｆに書き込むためのデータを受信した場合、ストレージ制御部１０３Ａと１０３Ｂで当該データを二重化できたことを保証できる。
【０１７９】
記憶デバイス１０５Ａ〜１０５Ｆへの書込みが完了しなくとも、充分な信頼性と可用性を確保することができるので、記憶デバイス１０５Ａ〜１０５Ｆにデータを書き込む前に、上位装置にデータ書き込み完了を通知することが可能である。本実施例は、実施例３に対して、更にデータの二重化を確実に保証できる。
【０１８０】
本実施例のストレージシステムの構成として、図１に示す構成に代えて、図２に示す構成を採ることができる。この場合、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２７に関する説明は、実施例３と同じである。図１５及び図１６の説明において、ストレージ制御部１０３Ａがストレージ制御部２０３Ａに置き換えられ、ストレージ制御部１０３Ｂがストレージ制御部２０３Ｂに置き換えられる。
【０１８１】
さらに、プロセッサ１０１Ａがプロセッサ２０１Ａに置き換えられ、プロセッサ１０１Ｂがプロセッサ２０１Ｂに置き換えられ、メモリ１０２Ａがメモリ２０２Ａに置き換えられ、メモリ１０２Ｂがメモリ２０２Ｂに置き換えられる。また、バックエンドスイッチ１０４がバックエンドスイッチ２０４Ａまたは２０４Ｂに置き換えられ、記憶デバイス１０５Ａ〜１０５Ｆが記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例８】
【０１８２】
図１７または図１８及び図１９、図２０を用いて、実施例８を説明する。図１７は、実施例８に係るストレージシステムの構成の例を示す図である。図１７において、ストレージシステム１７００は、二つのストレージ制御部１７０３Ａと１７０３Ｂを備える。
【０１８３】
ストレージ制御部１７０３Ａは、プロセッサ１７０１Ａ、メモリ１７０２Ａ、上位装置１７１４Ａに接続する上位ＩＦ１７１０Ａ、及びインタコネクトＩＦ１７１１Ａを含んで構成される。ストレージ制御部１７０３Ｂは、プロセッサ１７０１Ｂ、メモリ１７０２Ｂ、上位装置１７１４Ｂに接続する上位ＩＦ１７１０Ｂ、及びインタコネクトＩＦ１７１１Ｂを含んで構成される。
【０１８４】
インタコネクトＩＦ１７１１Ａと１７１１Ｂはそれぞれ、バックエンドスイッチ１７０４とは異なるインタコネクトスイッチ１７１２Ａと１７１２Ｂを通して、他のストレージシステム１７１３Ａ〜１７１３Ｅに接続される。
【０１８５】
ストレージシステム１７００は、記憶デバイス１７０５Ａ〜１７０５Ｆを備える。記憶デバイス１７０５Ａ〜１７０５Ｆは、バックエンドスイッチ１７０４にそれぞれパス１７０７Ａ〜１７０７Ｆによって接続される。図１７は、六つの記憶デバイスは１７０５Ａ〜１７０５Ｆを示すが、記憶デバイスの数は任意である。
【０１８６】
図１７は５台の他のストレージシステム１７１３Ａ〜１７１３Ｅを示すが、他のストレージシステムの数は任意である。他のストレージシステム１７１３Ａ〜１７１３Ｅは、それぞれ、ストレージシステム１７００と同様の構成を有してよい。
【０１８７】
上位装置１７１４Ａ及び１７１４Ｂのそれぞれは、プロセッサ１７０１Ａ、１７０１Ｂ、またはストレージ制御部１７０３Ａまたは１７０３Ｂにおける他のプロセッサで動作するソフトウェアで実現される仮想的な装置であってもよい。当該ソフトウェアは、上位ＩＦ１７１０Ａまたは１７１０Ｂの代わりに、ソフトウェアドライバを介してストレージシステム１７００と要求及び応答を交換する。
【０１８８】
図１８は、図１７に代えて、二つのバックエンドスイッチを用いるストレージシステムの構成の例を示す図である。図１８において、ストレージシステム１８００は、二つのストレージ制御部１８０３Ａと１８０３Ｂを備える。
【０１８９】
ストレージ制御部１８０３Ａは、プロセッサ１８０１Ａ、メモリ１８０２Ａ、上位装置１８１４Ａに接続する上位ＩＦ１８１０Ａ、及びインタコネクトＩＦ１８１１Ａを含んで構成される。ストレージ制御部１８０３Ｂは、プロセッサ１８０１Ｂ、メモリ１８０２Ｂ、上位装置１８１４Ｂに接続する上位ＩＦ１８１０Ｂ、及びインタコネクトＩＦ１８１１Ｂを含んで構成される。
【０１９０】
ストレージシステム１８００は、二つの互いに独立なバックエンドスイッチ１８０４Ａと１８０４Ｂを備える。プロセッサ１８０１Ａは、バックエンドスイッチ１８０４Ａと１８０４Ｂにそれぞれ、パス１８０６Ａ及びパス１８０８Ａによって接続される。プロセッサ１８０１Ｂは、バックエンドスイッチ１８０４Ａと１８０４Ｂにそれぞれ、パス１８０６Ｂ及びパス１８０８Ｂによって接続される。
【０１９１】
ストレージシステム１８００は、記憶デバイス１８０５Ａ〜１８０５Ｆを備える。記憶デバイス１８０５Ａ〜１８０５Ｆは、バックエンドスイッチ１８０４Ａにそれぞれパス１８０７Ａ〜１８０７Ｆによって接続される。記憶デバイス１８０５Ａ〜１８０５Ｆは、バックエンドスイッチ１８０４Ｂにそれぞれパス１８０９Ａ〜１８０９Ｆによって接続される。
【０１９２】
プロセッサ１８０１Ａ及び１８０１Ｂは、バックエンドスイッチ１８０４Ａまたは１８０４Ｂの一方のみを用いて、すべての記憶デバイス１８０５Ａ〜１８０５Ｆ及び他方のプロセッサ１８０１Ｂ及び１８０１Ａに接続される。バックエンドスイッチ１８０４Ａまたは１８０４Ｂの一方が動作を停止しても、または、一方に接続するパスが切断されても、ストレージシステム１８００は、プロセッサ１８０１Ａ及び１８０１Ｂとの間の通信、並びにプロセッサ１８０１Ａまたは１８０１Ｂと記憶デバイス１８０５Ａ〜１８０５Ｆの間の通信をすべて継続することが可能である。これによりシステムの可用性を高めることができる。
【０１９３】
インタコネクトＩＦ１８１１Ａと１８１１Ｂはそれぞれ、バックエンドスイッチ１８０４Ａ及び１８０４Ｂとは異なるインタコネクトスイッチ１８１２Ａと１８１２Ｂを通して、他のストレージシステム１８１３Ａ〜１８１３Ｅに接続される。
【０１９４】
図１８は、六つの記憶デバイスは１８０５Ａ〜１８０５Ｆを示すが、本実施例において記憶デバイスの数は任意である。図１８に５台の他のストレージシステム１８１３Ａ〜１８１３Ｅを示すが、本実施例において他のストレージシステムの数は任意である。
【０１９５】
他のストレージシステム１８１３Ａ〜１８１３Ｅは、ストレージシステム１８００と同様の構成を有してよい。上位装置１８１４Ａ及び１８１４Ｂは、図１７における上位装置１７１４Ａ及び１７１４Ｂと同じく、仮想的な装置であってもよい。
【０１９６】
図１９は、本実施例に係わるストレージ制御部１７０３Ａ、１７０３Ｂ、１８０３Ａまたは１８０３Ｂによる処理の手順を示すフローチャートの例である。図１９において、ストレージ制御部は、ステップ１９００において、上位装置よりデータ読出し要求またはデータ書込み要求を受信する。
【０１９７】
ステップ１９０１において、ストレージ制御部は、受信した要求が、そのストレージ制御部が含まれるストレージシステムの記憶デバイスに格納されるデータに対する要求であるかどうかを判定する。例えば、ストレージ制御部は、上位装置からの要求が示すアドレスと記憶デバイスとの間の関係を管理する情報を参照して判定を行う。
【０１９８】
受信した要求が、そのストレージ制御部が含まれるストレージシステム内の記憶デバイスに格納されるデータに対する要求であれば（１９０１：ＹＥＳ）、ストレージ制御部は、ステップ１９０２に進む。ステップ１９０２では、ストレージ制御部は、上位装置から受信した要求がデータの読出しであるか書込みであるか判定する。要求が書込みであれば（１９０２：書込み）、ストレージ制御部は、ステップ１９０３に進む。
【０１９９】
ステップ１９０３では、ストレージ制御部は、書込みデータを上位装置から受信する。次にステップ１９０４で、ストレージ制御部は、受信した書込みデータを、当該ストレージ制御部のメモリに格納する。
【０２００】
次にステップ１９０５において、ストレージ制御部は、当該ストレージ制御部のメモリに格納したデータを、同一ストレージシステム内のバックエンドスイッチを通じて、他方のストレージ制御部のメモリへ転送する。
【０２０１】
ステップ１９０６において、ストレージ制御部は、他方のストレージ制御部のメモリに転送した書込みデータを再度読み出し、他方のストレージ制御部のメモリに格納されたことを確認する。ステップ１９０６で再度読み出すデータの長さは、ステップ１９０５で転送したデータの長さに等しくてもよく、ステップ１９０５で転送したデータの一部の長さであってもよい。例えば、ストレージ制御部は、ステップ１９０５で転送したデータの最後の一部を読み出してもよい。
【０２０２】
最後に、ステップ１９０７において、ストレージ制御部は、上位装置に書込み完了を通知する。
【０２０３】
ステップ１９０２において、上位装置から受信した要求がデータの読出しであれば（１９０２：読出し）、ストレージ制御部は、ステップ１９０８に進む。ステップ１９０８では、ストレージ制御部は、当該データを同一ストレージシステム内の記憶デバイスより読み出す。次にストレージ制御部はステップ１９０９に進み、記憶デバイスより読み出したデータを上位装置へ返送する。
【０２０４】
ストレージ制御部は、読み出したデータを、当該ストレージ制御部のメモリに格納してもよい。次の同じデータの読出し要求に対して、ストレージ制御部は、記憶デバイスよりデータを読み出すことなく、メモリ上に格納されたデータが返送する。
【０２０５】
ステップ１９０１において、上位装置より受信した要求が、当該ストレージ制御部が含まれるストレージシステムの記憶デバイスに格納されるデータに対する要求でなければ（１９０１：ＮＯ）、ストレージ制御部は、ステップ１９１０に進む。
【０２０６】
ステップ１９１０では、ストレージ制御部は、上位装置から受信した読出しまたは書込み要求を、インタコネクトＩＦ及びインタコネクトスイッチを介して、他のストレージシステムに送付する。
【０２０７】
図２０は、ストレージ制御部１７０３Ａまたは１８０３Ａにおける処理手順が図１９に示したフローチャートに従って行われる場合のシーケンスの例である。図２０は、上位装置から、ストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆへの、データ書込み要求に対する処理の例を示す。
【０２０８】
なお、ストレージ制御部１７０３Ｂまたは１８０３Ｂが、上位装置から、ストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆへのデータ書込み要求を受けた場合の処理のシーケンスも同様となる。
【０２０９】
その場合、図２０において、ストレージ制御部１７０３Ａまたは１８０３Ａと、ストレージ制御部１７０３Ｂまたは１８０３Ｂとが、入れ替えられる。プロセッサ１７０１Ａまたは１８０１Ａと、プロセッサ１７０１Ｂまたは１８０１Ｂとが、入れ替えられる。メモリ１７０２Ａまたは１８０２Ａと、メモリ１７０２Ｂまたは１８０２Ｂとが、入れ替えられる。
【０２１０】
図２０において、ストレージ制御部１７０３Ａまたは１８０３Ａは、上位装置からデータ書込み要求を受信すると、ステップ２００１において、書込みデータを受信する。プロセッサ１７０１Ａまたは１８０１Ａは、受信した書込みデータを、ステップ２００２において、メモリ１７０２Ａまたは１８０２Ａに格納する。
【０２１１】
次に、プロセッサ１７０１Ａまたは１８０１Ａは、ステップ２００３において、メモリ１７０２Ａまたは１８０２Ａに格納した当該データを再度取得する。プロセッサ１７０１Ａまたは１８０１Ａは、取得したデータについて、ステップ２００４において、メモリ１７０２Ｂまたは１８０２Ｂ上の場所を識別するアドレスＡを付与して、バックエンドスイッチ１７０４または１８０４Ａまたは１８０４Ｂに送付する。このデータの送付は、例えば図３Ａに示したデータ送付のフレーム３３３を用いる。
【０２１２】
ステップ２００３及び２００４は、プロセッサ１７０１Ａまたは１８０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１７０１Ａまたは１８０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、ソフトウェアにより、メモリ１７０２Ａまたは１８０２Ａ上のデータを取得する場所、メモリ１７０２Ｂまたは１８０２Ｂ上の場所を識別するアドレスＡ、送付するデータ長を指定されて動作する。
【０２１３】
バックエンドスイッチ１７０４、または、バックエンドスイッチ１８０４Ａまたは１８０４Ｂは、プロセッサ１７０１Ａまたは１８０１Ａよりデータ送付を受信する。バックエンドスイッチ１７０４、または、バックエンドスイッチ１８０４Ａまたは１８０４Ｂは、ステップ２００５において、付与されたアドレスＡを、プロセッサ１７０１Ｂまたは１８０１Ｂがメモリ１７０２Ｂまたは１８０２Ｂ上の場所を識別するアドレスＢに変換する。変換されたアドレスＢを含むデータ送付は、プロセッサ１７０１Ｂまたは１８０１Ｂに送付される。
【０２１４】
プロセッサ１７０１Ｂまたは１８０１Ｂは、バックエンドスイッチ１７０４または１８０４Ａまたは１８０４ＢよりアドレスＢが付与されたデータを受信する。プロセッサ１７０１Ｂまたは１８０１Ｂは、ステップ２００６において、アドレスＢに基づいて、受信したデータをメモリ１７０２Ｂまたは１８０２Ｂに格納する。
【０２１５】
ステップ２００６は、プロセッサ１７０１Ｂまたは１８０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１７０１Ｂまたは１８０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、バックエンドスイッチからアドレスＢが付与されたデータを受信すると、自動的にアドレスＢに従ってメモリ１７０２Ｂまたは１８０２Ｂにデータを格納する。
【０２１６】
次にプロセッサ１７０１Ａまたは１８０１Ａは、ステップ２００７において、再び、アドレスＡを用いてメモリ１７０２Ｂまたは１８０２Ｂに格納したデータを取得する要求を、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに送付する。このデータ要求の送付は、例えば図３Ａに示したデータ要求のフレーム３３１を用いる。
【０２１７】
この場合、取得するデータの長さは、ステップ２００４でアドレスＡを付与して送付したデータの長さと等しくてもよく、ステップ２００４でアドレスＡを付与して送付したデータの一部の長さであってもよい。例えば、ステップ２００４で送付したデータの最後の一部を取得するように、取得するデータの長さとアドレスＡが変更されてもよい。この点は、図１９のステップ１９０６の説明の通りである。
【０２１８】
ステップ２００７は、プロセッサ１７０１Ａまたは１８０１Ａ上で動作するソフトウェアによって実行されてもよく、プロセッサ１７０１Ａまたは１８０１Ａに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、ソフトウェアにより、メモリ１７０２Ｂまたは１８０２Ｂ上の場所を識別するアドレスＡや、取得するデータの長さを指定されて動作する。
【０２１９】
バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、ステップ２００８において、アドレスＡを再度アドレスＢに変換して、データを取得する要求をプロセッサ１７０１Ｂまたは１８０１Ｂに送付する。
【０２２０】
プロセッサ１７０１Ｂまたは１８０１Ｂは、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂから、データ取得要求を受信する。プロセッサ１７０１Ｂまたは１８０１Ｂは、ステップ２００９において、付与されたアドレスＢに従って、メモリ１７０２Ｂまたは１８０２Ｂからデータを取得する。
【０２２１】
ステップ２０１０において、プロセッサ１７０１Ｂまたは１８０１Ｂは、取得したデータを、バックエンドスイッチ１７０４またはエンドスイッチ１８０４Ａまたは１８０４Ｂに返送する。
【０２２２】
ステップ２００９及び２０１０はプロセッサ１７０１Ｂ上または１８０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１７０１Ｂまたは１８０１Ｂに実装された機能ハードウェア（回路）によって実行されてもよい。
【０２２３】
機能ハードウェアは、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４ＢからアドレスＢが付与されたデータ要求を受信すると、自動的にアドレスＢに従ってメモリ１７０２Ｂまたは１８０２Ｂからデータを取得して、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに、返送する。
【０２２４】
バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、プロセッサ１７０１Ｂまたは１８０１Ｂから返送データを受信する。ステップ２０１１において、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、当該データをプロセッサ１７０１Ａまたは１８０１Ａに返送する。
【０２２５】
プロセッサ１７０１Ａまたは１８０１Ａは、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂから、返送されたデータを受信する。プロセッサ１７０１Ａまたは１８０１Ａは、ステップ２０１２で、上位装置にデータの書込みが完了したことを報告する。
【０２２６】
以上の構成により、ストレージシステム内で、ストレージ制御部間で上位装置から受信した書込みデータを転送して二重化する場合に、二重化を保証することが可能となる。
【０２２７】
二重化が保証されるので、記憶デバイスへの書込みが完了なくとも、充分な信頼性と可用性を確保することができる。その結果、上位装置に記憶デバイスにデータを書き込む前に、データ書き込み完了を報告することが可能である。
【０２２８】
以上のように、本実施例において、ストレージシステム１７００または１８００は、他のストレージシステムに対して容量、性能を付加する、スケールアウトと呼ばれる効果を提供することが可能である。
【０２２９】
スケールアウトと呼ばれる効果と、ストレージシステムの可用性を両立させるために、スケールアウトの効果に関係する複数のストレージシステム間でデータを冗長に持つことが行われる。ストレージシステム間のデータの冗長性維持は、同時にデータの一貫性維持を必要とするため、性能的なオーバーヘッドを生じる。また、それぞれのストレージシステムが備える記憶容量の使用効率も、冗長性維持のために低下する。
【０２３０】
これに対し、本実施例によるストレージシステム１８００は、特に可用性が高いので、スケールアウトの効果を提供するのに際し、他のストレージシステムとの間でデータを冗長に持つ必要はない。よって性能的なオーバーヘッドを生じることはなく、それぞれのストレージシステムが備える記憶容量の使用効率も低下することがない。
【０２３１】
本実施例に従ったストレージシステムにおいて、例えば、第１のストレージ制御部は、第１のインタコネクト部を備え、第２のストレージ制御部は、第２のインタコネクト部を備える。第１及び第２のインタコネクトは、バックエンドスイッチとは異なる１以上のインタコネクトスイッチに接続される。インタコネクトスイッチは、更に、第２のストレージシステムに接続される。第１または第２のストレージ制御部は、上位装置からデータ読み出しまたは書き込み要求を受信し、受信したデータ読み出しまたは書き込み要求において、要求されたデータが記憶デバイスに格納されるデータかを判定する。データが記憶デバイスに格納されないと判定した時、第１または第２のストレージ制御部は、第１または第２のインタコネクト部とインタコネクトスイッチとを用いて、データ読み出しまたは書き込み要求を、第２のストレージシステムに送付する。
【実施例９】
【０２３２】
図２１、図２２を用いて、実施例９を説明する。実施例９におけるストレージシステムの構成例は、図１７ないし図１８に示した構成である。図２１は、図１７に示したストレージシステム１７００のストレージ制御部１７０３Ａまたは１７０３Ｂ、図１８に示したストレージシステム１８００のストレージ制御部１８０３Ａまたは１８０３Ｂにおける処理の手順を示すフローチャートの例である。
【０２３３】
図２１において、ステップ２１００からステップ２１０４、２１０７、２１０８から２１１０に対して、実施例８で示した図１９におけるステップ１９００からステップ１９０４、１９０７、１９０８から１９１０の説明を適用できる。図２１では、ストレージ制御部は、ステップ２１０５で、書込みデータを当該メモリから、同ストレージシステム内の他方のストレージ制御部のメモリへ転送する指示を、バックエンドスイッチに送付する。
【０２３４】
バックエンドスイッチは、該指示を受けると、指定された書込みデータを当該ストレージ制御部のメモリから、他方のストレージ制御部のメモリへ転送する。バックエンドスイッチは、他方のストレージ制御部のメモリを読み返して転送が完了したことを確認して、データ転送完了を当該ストレージ制御部に通知する。
【０２３５】
ステップ２１０６において、当該ストレージ制御部は、バックエンドスイッチからデータ転送完了の通知を受領する。ステップ２１０７で、当該ストレージ制御部は、上位装置に書込み完了を通知する。
【０２３６】
図２２は、ストレージ制御部１７０３Ａまたは１８０３Ａにおける処理手順が、図２１に示したフローチャートに従って行われる場合の、シーケンスの例である。より詳細には、図２２は、上位装置からストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１７０５１８０５Ａ〜１８０５Ｆに格納されるデータの、書込み要求を受けた場合の処理のシーケンスの例である。
【０２３７】
なお、ストレージ制御部１７０３Ｂまたは１８０３Ｂが、上位装置から、ストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆに格納されるデータの書込み要求を受けた場合の処理のシーケンスも同様となる。
【０２３８】
その場合、図２２において、ストレージ制御部１７０３Ａまたは１８０３Ａと、ストレージ制御部１７０３Ｂまたは１８０３Ｂとが、入れ替えられる。プロセッサ１７０１Ａまたは１８０１Ａと、プロセッサ１７０１Ｂまたは１８０１Ｂとが、入れ替えられる。メモリ１７０２Ａまたは１８０２Ａと、メモリ１７０２Ｂまたは１８０２Ｂとが、入れ替えられる。
【０２３９】
図２２において、ストレージ制御部１７０３Ａまたは１８０３Ａは、上位装置からデータ書込み要求を受信すると、ステップ２２０１において、書込みデータを受信する。プロセッサ１７０１Ａまたは１８０１Ａは、受信した書込みデータを、ステップ２２０２において、メモリ１７０２Ａまたは１８０２Ａに格納する。
【０２４０】
ステップ２２０３から２２１２に対して、実施例７の図１６のステップ１６０１から１６１０までの説明が適用できる。ストレージ制御部１０３Ａまたは２０３Ａは、ストレージ制御部１７０３Ａまたは１８０３Ａに置き換えられる。ストレージ制御部１０３Ｂまたは２０３Ｂは、ストレージ制御部１７０３Ｂまたは１８０３Ｂに置き換えられる。
【０２４１】
さらに、プロセッサ１０１Ａまたは２０１Ａは、プロセッサ１７０１Ａまたは１８０１Ａに置き換えられる。プロセッサ１０１Ｂまたは２０１Ｂは、プロセッサ１７０１Ｂまたは１８０１Ｂに置き換えられる。メモリ１０２Ａまたは２０２Ａは、メモリ１７０２Ａまたは１８０２Ａに置き換えられる。メモリ１０２Ｂまたは２０２Ｂは、メモリ１７０２Ｂまたは１８０２Ｂに置き換えられる。
【０２４２】
また、バックエンドスイッチ１０４またはバックエンドスイッチ２０４Ａまたは２０４Ｂは、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに置き換えられる。転送元のデータは、上位装置から受信した書込みデータに置き換えられる。
【０２４３】
プロセッサ１７０１Ａまたは１８０１Ａは、ステップ２２１２において、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂからデータ格納完了通知を受信する。処理２２１３において、プロセッサ１７０１Ａまたは１８０１Ａは、上位装置にデータの書込みが完了したことを報告する。
【０２４４】
以上のような構成とすることにより、実施例９は、実施例８で説明した効果と同様の効果を達成することができる。
【実施例１０】
【０２４５】
図２３、図２４を用いて、実施例１０を説明する。実施例１０におけるストレージシステムの構成例は、図１７ないし図１８に示した構成である。図２３は、図１７に示したストレージシステム１７００のストレージ制御部１７０３Ａまたは１７０３Ｂ、図１８に示したストレージシステム１８００のストレージ制御部１８０３Ａまたは１８０３Ｂにおける処理の手順を示すフローチャートの例である。
【０２４６】
図２３において、ステップ２３００から２３０４、２３０７、２３０８から２３１０に対して、実施例９で示した図２１におけるステップ２１００から２１０４、２１０７、２１０８から２１１０の説明を適用できる。
【０２４７】
図２３において、ストレージ制御部は、ステップ２３０４にて上位装置から受信した書込みデータを当該ストレージ制御部のメモリに格納する。次にステップ２３０５にて、ストレージ制御部は、当該書込みデータを当該メモリから同一ストレージシステム内の他方のストレージ制御部のメモリへ転送する指示を、バックエンドスイッチへ送付する。
【０２４８】
次にステップ２３０６にて、ストレージ制御部は、バックエンドスイッチからデータ誤りチェックの結果を受信する。ステップ２３０７にて、ストレージ制御部は、チェック結果を上位装置に通知する。受信したチェック結果がデータ誤りを示す場合には、上位装置は、正しくデータが書き込めなかったと判定し、例えば、先のデータ書込み要求を再びストレージシステムに送付する。
【０２４９】
図２４は、ストレージ制御部１７０３Ａまたは１８０３Ａにおける処理手順が図２３に示したフローチャートに従って行われる場合のシーケンスの例である。より詳細には、図２４は、上位装置からストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆに格納されるデータの書込み要求を受けた場合の処理のシーケンスの例である。
【０２５０】
なお、ストレージ制御部１７０３Ｂまたは１８０３Ｂが、上位装置から、ストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆに格納されるデータの書込み要求を受けた場合の処理のシーケンスも同様となる。
【０２５１】
その場合、図２４において、ストレージ制御部１７０３Ａまたは１８０３Ａと、ストレージ制御部１７０３Ｂまたは１８０３Ｂとが、入れ替えられる。プロセッサ１７０１Ａまたは１８０１Ａと、プロセッサ１７０１Ｂまたは１８０１Ｂとが、入れ替えられる。メモリ１７０２Ａまたは１８０２Ａと、メモリ１７０２Ｂまたは１８０２Ｂとが、入れ替えられる。
【０２５２】
図２４において、ステップ２４０１から２４０８に対して、、実施例９の図２２におけるステップ２２０１から２２０８までの説明が適用できる。図２４において、ステップ２４０９で、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、プロセッサ１７０１Ｂまたは１８０１Ｂに、書込みデータを送付したことを通知する。
【０２５３】
プロセッサ１７０１Ｂまたは１８０１Ｂは、書込みデータが送付されたことを通知されると、処理２４１０にて、メモリ１７０２Ｂまたは１８０２Ｂより書込みデータを取得する。次にプロセッサ１７０１Ｂまたは１８０１Ｂは、メモリ１７０２Ｂまたは１８０２Ｂより取得した書込みデータについて、ステップ２４１１にて、データ誤りがあるかどうかをチェックする。
【０２５４】
データ誤りチェックにチェック対象のデータとは別にデータチェックコードが必要な場合は、データチェックコードは、プロセッサ１７０１Ｂまたは１８０１Ｂに予め与えられる。あるいは、プロセッサ１７０１Ｂまたは１８０１Ｂは、予め定める規則に基づいてデータチェックコードを生成してもよい。または、プロセッサ１７０１Ａまたは１８０１Ａが、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂを介して、プロセッサ１７０１Ｂまたは１８０１Ｂにデータチェックコードを供給しても良い。
【０２５５】
プロセッサ１７０１Ｂまたは１８０１Ｂは、ステップ２４１１の後、ステップ２４１２にて、データ誤りチェックの結果をバックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに通知する。バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、該通知された結果を、ステップ２４１３にて、プロセッサ１７０１Ａまたは１８０１Ａに通知する。
【０２５６】
プロセッサ１７０１Ａまたは１８０１Ａは、ステップ２４１４にて、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂより通知されたデータ誤りチェックの結果を、上位装置に通知する。
【０２５７】
以上のように、実施例１０によるストレージシステム１７００または１８００は、実施例９における効果に加えて、データがメモリに誤りなく格納されていることが確認でき、データの正当性を高めることができる。
【０２５８】
即ち、メモリ１７０２Ａまたは１８０２Ａに格納した書込みデータをメモリ１７０２Ｂまたは１８０２Ｂに転送してから、転送データの誤りをチェックすることにより、メモリ１７０２Ａまたは１８０２Ａに格納したデータも併せて誤りをチェックできる。
【０２５９】
本実施例に従ったストレージシステムにおいて、例えば、第１のストレージ制御部は、上位装置より一つ以上の記憶デバイスに書き込むためにホストデータを受信し、ホストデータを、第１のデータとして、記憶デバイスに書き込む前に、第１のメモリの第１の場所に格納する。
【０２６０】
第１のプロセッサは、ホストデータが第１のメモリの第１の場所に格納された後、データ転送指示をバックエンドスイッチに送信する。第２のプロセッサは、第１のデータを第２のメモリに格納したことをバックエンドスイッチから通知されると、第２のメモリから第１のデータを読み出し、第１のデータに誤りがあるか判定を行い、その判定結果を第１のプロセッサに送信する。第１のプロセッサは、第２のプロセッサより受信した判定結果を、上位装置に通知する。
【実施例１１】
【０２６１】
図２５、図２６を用いて、実施例１１を説明する。実施例１１に係わるストレージシステムの構成例は、図１７ないし図１８に示した構成である。図２５は、図１７に示したストレージシステム１７００のストレージ制御部１７０３Ａまたは１７０３Ｂ、図１８に示したストレージシステム１８００のストレージ制御部１８０３Ａまたは１８０３Ｂにおける処理の手順を示すフローチャートの例である。
【０２６２】
図２５において、ステップ２５００から２５０５、２５０８から２５１０に対して、実施例８で示した図１９におけるステップ１９００から１９０５、１９０８から１９１０の説明を適用できる。
【０２６３】
図２５において、ストレージ制御部は、ステップ２５０５で書込みデータを当該ストレージ制御部のメモリから、同ストレージシステム内の他方のストレージ制御部のメモリに転送した後、ステップ２５２０に進む。
【０２６４】
ステップ２５２０において、ストレージ制御部は、書込みデータを他方のストレージ制御部のメモリへ転送したことを、他方のストレージ制御部へ通知する。この通知は、予め定める特定のデータを他方のストレージ制御部内の特定のアドレスに送付してもよい。または、通知は、書込みデータを識別する情報及び他方のストレージ制御部内のメモリにおいて書込みデータを書き込んだか位置の情報を含む、特別なデータであってもよい。また更に、通知は、インタラプト信号を含んでもよい。
【０２６５】
他方のストレージ制御部は、書込みデータが転送されたことを通知されると、転送されたデータに対してデータ誤りチェックを行い、結果を当該ストレージ制御部へ通知する。この通知は、前述の書込みデータを他方のストレージ制御部のメモリへ転送したことを、他方のストレージ制御部へ通知した方法と同様である。
【０２６６】
ステップ２５２１では、当該ストレージ制御部は、他方のストレージ制御部から通知されたデータ誤り結果を受領する。次にステップ２５２２において、当該ストレージ制御部は、データ誤りチェックの結果を上位装置に通知する。上位装置は、データ誤りがある場合には、正しくデータが書き込めなかったと判定し、例えば先のデータ書込み要求を再びストレージシステムに送付する。これは、実施例１０における図２３のステップ２３０７の説明と同様である。
【０２６７】
図２６は、ストレージ制御部１７０３Ａまたは１８０３Ａにおける処理手順が図２５に示したフローチャートに従って行われる場合のシーケンスの例である。より詳細には、上位装置からストレージシステム１７００の記憶デバイス１７０５Ａ〜１７０５Ｆまたはストレージシステム１８００の記憶デバイス１８０５Ａ〜１８０５Ｆに格納されるデータの書込み要求を受けた場合の、処理のシーケンスの例である。
【０２６８】
なお、ストレージ制御部１７０３Ｂまたは１８０３Ｂが、上位装置から、記憶デバイス１７０５Ａ〜１７０５Ｆまたは記憶デバイス１７０５１８０５Ａ〜１８０５Ｆに格納されるデータの書込み要求を受けた場合の処理のシーケンスも、同様である。
【０２６９】
その場合、図２６において、ストレージ制御部１７０３Ａまたは１８０３Ａと、ストレージ制御部１７０３Ｂまたは１８０３Ｂとは、入れ替えられる。プロセッサ１７０１Ａまたは１８０１Ａと、プロセッサ１７０１Ｂまたは１８０１Ｂとは、入れ替えられる。メモリ１７０２Ａまたは１８０２Ａと、メモリ１７０２Ｂまたは１８０２Ｂとは、入れ替えられる。
【０２７０】
図２６において、ステップ２６０１から２６０６に対して、実施例８における図２０のステップ２００１から２００６までの説明を適用できる。
【０２７１】
図２６において、プロセッサ１７０１Ａまたは１８０１Ａは、ステップ２６０４で、上位装置から受領した書込みデータを、メモリ１７０２Ａまたはメモリ１８０２Ａから読み出し、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに送付する。ステップ２６０７で、プロセッサ１７０１Ａまたは１８０１Ａは、当該書込みデータを送付したことを、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂに通知する。
【０２７２】
バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂは、上記通知を受け取ると、ステップ２６０８おいて、同様の通知をプロセッサ１７０１Ｂまたは１８０１Ｂに送付する。ステップ２６０７及び２６０８において行われる通知の方法は、前述の図２５のステップ２５２０の説明の通りである。
【０２７３】
プロセッサ１７０１Ｂまたは１８０１Ｂは、バックエンドスイッチ１７０４またはバックエンドスイッチ１８０４Ａまたは１８０４Ｂより、当該書込みデータが送付されたことを通知される。ステップ２６０９において、プロセッサ１７０１Ｂまたは１８０１Ｂは、当該書込みデータをメモリ１７０２Ｂまたは１８０２Ｂから取得する。
【０２７４】
次に、プロセッサ１７０１Ｂまたは１８０１Ｂは、メモリ１７０２Ａまたは１８０２Ａより取得した書込みデータについて、ステップ２６１０にて、データ誤りがあるかどうかをチェックする。ステップ２６１０のデータ誤りチェックは、実施例１０の図２４のステップ２４１１のデータ誤りチェックと同様である。
【０２７５】
この後のステップ２６１１から２６１３に対して、実施例１０の図２４のステップ２４１２から２４１４の説明を適用できる。
【０２７６】
以上の構成により、実施例１１は、実施例１０で説明した効果と同様の効果を達成することができる。
【実施例１２】
【０２７７】
図１または図２、及び図４Ａ、図４Ｂ、図６Ａ〜図７Ｂ、図２８、図２９を用いて、実施例１２を説明する。実施例１２のストレージシステムの構成が、図１に示す構成である場合、図１、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂの説明は、実施例１と同じである。
【０２７８】
図２８は、実施例１２において、バックエンドスイッチ１０４がプロセッサ１０１Ａよりデータまたはデータ要求を受信した場合の処理手順を示すフローチャートの例である。なお、バックエンドスイッチ１０４がプロセッサ１０１Ｂからデータまたはデータ要求を受信した場合の処理手順も同様である。その場合、図２８でプロセッサ１０１Ａとあるのをプロセッサ１０１Ｂと読み替えればよい。また図２８でプロセッサ１０１Ｂとある箇所はプロセッサ１０１Ａに読み替える。
【０２７９】
図２８において、ステップ２８００からステップ２８０６に対して、実施例１における図３のステップ３００から３０６までの説明を適用できる。ステップ２８０４の後、バックエンドスイッチ１０４における処理は、ステップ２８０７に進む。
【０２８０】
ステップ２８０７では、バックエンドスイッチ１０４は、プロセッサ１０１Ａから送付されたフレームが、メモリ１０２Ｂに格納するためのデータ送付か、メモリ１０２Ｂのデータの取得要求かを判定する。判定した結果がメモリ１０２Ｂへのデータ送付であれば（２８０７：データ送付）、バックエンドスイッチ１０４は、ステップ２８０８に進む。
【０２８１】
ステップ２８０８では、バックエンドスイッチ１０４は、プロセッサ１０１Ｂに、再びメモリ１０２Ｂに格納した当該データを取得する要求を送付する。再度要求するデータの長さは、ステップ２８０４で送付したデータの長さに等しくてもよく、ステップ２８０４で送付したデータの一部の長さであってもよい。例えば、バックエンドスイッチ１０４は、ステップ２８０４で送付したデータの最後の一部を読み出してもよい。
【０２８２】
ステップ２８０９で、バックエンドスイッチ１０４は、プロセッサ１０１Ｂより、当該データを受領する。ステップ２８１０では、バックエンドスイッチ１０４は、プロセッサ１０１Ｂより当該データを受領したことを、プロセッサ１０１Ａに通知して、処理を終了する。
【０２８３】
プロセッサ１０１Ａへの通知は、例えば、プロセッサ１０１Ｂから受領した当該データの全部または一部をプロセッサ１０１Ａへ送付することで行っもよく、予め定める特定の信号をプロセッサ１０１Ａに送付することで行ってもよい。プロセッサ１０１Ｂから受領した当該データの全部または一部をプロセッサ１０１Ａへ送付する場合、プロセッサ１０１Ａは、受信した当該データの全部または一部を破棄する。
【０２８４】
また更に、通知は、予め定める特定のデータをプロセッサ１０１Ａのアドレス空間における特定のアドレスに送付することで行ってもよい。または、通知は、プロセッサ１０１Ａに、インタラプト信号を送付することで行ってもよい。このようにすることによって、当該データを確実にメモリ１０２Ｂに書き込めたことをプロセッサ１０１Ａに通知することができる。ステップ２８０７で、判定した結果がメモリ１０２Ｂのデータの取得要求であれば（２８０７：データ要求）、バックエンドスイッチ１０４は、処理を終了する。
【０２８５】
図２９は、バックエンドスイッチ１０４が図２８に示す処理手順に従って処理を行う場合に、ストレージ制御部１０３Ａからストレージ制御部１０３Ｂにデータを送信する処理のシーケンスの例である。なお、ストレージ制御部１０３Ｂがストレージ制御部１０３Ａにデータを送信する処理のシーケンスも同様となる。
【０２８６】
その場合、図２９において、ストレージ制御部１０３Ａとストレージ制御部１０３Ｂとは入れ替えられる。プロセッサ１０１Ａとプロセッサ１０１Ｂとは、入れ替えられる。メモリ１０２Ａととメモリ１０２Ｂとは、入れ替えられる。
【０２８７】
図２９において、ステップ２９０１から２９０４に対して、実施例１における図５Ａのステップ５０１から５０４までの説明を適用できる。図２９では、バックエンドスイッチ１０４が、ステップ２９０５において、ステップ２９０３で送付したアドレスＢを再度指定するデータ取得要求を、プロセッサ１０１Ｂに送付する。
【０２８８】
この場合、取得するデータの長さは、ステップ２９０５でアドレスＢを付与して送付したデータの長さと等しくてもよく、ステップ２９０５でアドレスＢを付与して送付したデータの一部の長さであってもよい。例えば、バックエンドスイッチ１０４は、ステップ２９０５で送付したデータの最後の一部を取得するように、データ長とアドレスＢを変更してもよい。この点は、前述の図２８のステップ２８０８の説明と同様である。
【０２８９】
プロセッサ１０１Ｂは、バックエンドスイッチ１０４からアドレスＢが付与されたデータ要求を受信すると、ステップ２９０６において、アドレスＢに従って、メモリ１０２Ｂよりデータを取得する。次に、ステップ２９０７において、プロセッサ１０１Ｂは、メモリ１０２Ｂより取得したデータをバックエンドスイッチ１０４に返送する。
【０２９０】
ステップ２９０６及び２９０７は、プロセッサ１０１Ｂ上で動作するソフトウェアによって実行されてもよく、プロセッサ１０１Ｂに実装された機能ハードウェア（回路）により実行されてもよい。機能ハードウェアは、バックエンドスイッチ１０４からアドレスＢが付与されたデータ要求を受信すると、自動的にアドレスＢに従ってメモリ１０２Ｂからデータを取得して、バックエンドスイッチ１０４に返送する。
【０２９１】
バックエンドスイッチ１０４は、プロセッサ１０１ＢよりアドレスＢのデータの返送を受信すると、ステップ２９０８にて、プロセッサ１０１Ａにデータを送付したことを通知する。この通知の方法は、図２８のステップ２８１０の説明の通りである。
【０２９２】
以上の構成により、実施例１で説明した効果に加えて、ストレージ制御部１０３Ｂに送付したデータを確実にメモリ１０２Ｂに格納できたことを、プロセッサ１０１Ａに通知することができる。これにより、例えば図１に図示されない上位装置から記憶デバイス１０５Ａ〜１０５Ｆに書き込むためのデータを受信した場合、ストレージ制御部１０３Ａと１０３Ｂで当該データを二重化できたことを保証できる。
【０２９３】
これにより、記憶デバイス１０５Ａ〜１０５Ｆへの書込みが完了しなくとも、更に充分な信頼性と可用性を確保することができるので、記憶デバイス１０５Ａ〜１０５Ｆにデータを書き込む前に、上位装置にデータ書き込み完了を通知することが可能である。
【０２９４】
また本実施例のストレージシステムの構成として、図１に示す構成に代えて、図２に示す構成を採ることができる。この場合、図２、図４Ａ、図４Ｂ、図６Ａ〜図７Ｂに関する説明は実施例２と同じである。
【０２９５】
図２８、図２９の説明において、ストレージ制御部１０３Ａはストレージ制御部２０３Ａに置き換えられる。ストレージ制御部１０３Ｂはストレージ制御部２０３Ｂに置き換えられる。プロセッサ１０１Ａはプロセッサ２０１Ａに置き換えられる。
【０２９６】
プロセッサ１０１Ｂはプロセッサ２０１Ｂに置き換えられる。メモリ１０２Ａはメモリ２０２Ａに置き換えられる。メモリ１０２Ｂはメモリ２０２Ｂに置き換えられる。バックエンドスイッチ１０４はバックエンドスイッチ２０４Ａまたは２０４Ｂに置き換えられる。記憶デバイス１０５Ａ〜１０５Ｆは記憶デバイス２０５Ａ〜２０５Ｆに置き換えられる。
【実施例１３】
【０２９７】
図３０〜４３を用いて本発明の実施例１３を説明する。図３０は、実施例１３に係るストレージシステムの構成例を示す。図３０において、ストレージシステムは、二つのストレージ制御部３００１、３０２１及びドライブ筐体３０４０を備える。ストレージ制御部３００１は、プロセッサ（ＣＰＵ１）３００３、メモリ（ＭＥＭ１）３００２、及びホストチャネル３００９を介して上位装置（図示せず）に接続する上位ＩＦ（ＦＥ１）３００８を含んで構成される。
【０２９８】
プロセッサ３００３は、ルートコンプレックス（ＲＣ１）３００４を含む。ルートコンプレックス３００４は、上位ＩＦ３００８を接続するルートポート（ＲＰ）３００５と、ルートポート（ＲＰ１２）３００６及びルートポート（ＲＰ１１）３００７とを含んで構成される。
【０２９９】
ストレージ制御部３０２１は、プロセッサ（ＣＰＵ２）３０２３、メモリ（ＭＥＭ２）３０２２、及びホストチャネル３０２９を介して上位装置（図示せず）に接続する上位ＩＦ（ＦＥ２）３０２８を含んで構成される。プロセッサ３０２３は、ルートコンプレックス（ＲＣ２）３０２４を含む。ルートコンプレックス３０２４は、上位ＩＦ３０２８を接続するルートポート（ＲＰ）３０２５と、ルートポート（ＲＰ２１）３０２６及びルートポート（ＲＰ２２）３０２７とを含んで構成される。
【０３００】
実施例１３に係るストレージシステムは、ドライブ筐体３０４０内に二つの互いに独立なバックエンドスイッチ３０４１、３０６１を備える。本例において、バックエンドスイッチ３０４１、３０６１は、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）スイッチである。バックエンドスイッチ３０４１は、仮想スイッチ３０４２、３０４３とＮＴＢ（Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ）３０４４を含んで構成される。バックエンドスイッチ３０６１は、仮想スイッチ３０６２、３０６３とＮＴＢ３０６４を含んで構成される。
【０３０１】
プロセッサ３００３は、ルートポート３００７とリンク３０１０を介して仮想スイッチ３０４２に接続される。ここでリンクは、ＰＣＩｅのリンクであり、例えばケーブルや配線基板上の配線等として実装される。プロセッサ３００３は、ルートポート３００６とリンク３０１１を介して仮想スイッチ３０６３に接続される。
【０３０２】
プロセッサ３０２３は、ルートポート３０２７とリンク３０３０を介して仮想スイッチ３０６２に接続される。プロセッサ３０２３は、ルートポート３０２６とリンク３０３１を介して仮想スイッチ３０４３に接続される。
【０３０３】
実施例１３に係るストレージシステムは、ドライブ筐体３０４０内に記憶デバイス３０９０〜３０９７を備える。記憶デバイス３０９０〜３０９７は、例えばＮＶＭｅ規格のデュアルポートドライブであり、それぞれがＰＣＩｅポート（以下、ポートと略す）３０９０Ａ〜３０９７Ａと３０９０Ｂ〜３０９７Ｂを備える。
【０３０４】
記憶デバイス３０９０〜３０９３のポート３０９０Ａ〜３０９３Ａは、仮想スイッチ３０４３に、それぞれリンク３０８０Ａ〜３０８３Ａによって接続される。記憶デバイス３０９４〜３０９７のポート３０９４Ａ〜３０９７Ａは、仮想スイッチ３０４２に、それぞれリンク３０８４Ａ〜３０８７Ａによって接続される。
【０３０５】
記憶デバイス３０９０〜３０９３のポート３０９０Ｂ〜３０９３Ｂは、仮想スイッチ３０６３に、それぞれリンク３０８０Ｂ〜３０８３Ｂによって接続される。記憶デバイス３０９４〜３０９７のポート３０９４Ｂ〜３０９７Ｂは、仮想スイッチ３０６２に、それぞれリンク３０８４Ｂ〜３０８７Ｂによって接続される。
【０３０６】
プロセッサ３００３は、リンク３０１０、仮想スイッチ３０４２、ＮＴＢ３０４４、仮想スイッチ３０４３及びリンク３０３１を介して、プロセッサ３０２３と相互に通信可能に接続される。プロセッサ３０２３は、リンク３０３０、仮想スイッチ３０６２、ＮＴＢ３０６４、仮想スイッチ３０６３及びリンク３０１１を介して、プロセッサ３００３と相互に通信可能に接続される。
【０３０７】
すべての記憶デバイス３０９０〜３０９７は、バックエンドスイッチ３０４１及び３０６１のいずれの一方を介しても、プロセッサ３００３または３０２３に接続される。プロセッサ３００３及び３０２３は、バックエンドスイッチ３０４１及び３０６１のいずれの一方を介しても、他方のプロセッサに接続される。
【０３０８】
なお、図３０は、八つの記憶デバイスは３０９０〜３０９７を示すが、記憶デバイスの数は任意である。
【０３０９】
図３１は、バックエンドスイッチ３０４１の内部構成例を示す。仮想スイッチ３０４２は、リンク３０１０に接続するアップストリームポート（ＵＰ１１）３１１１と、リンク３０８４Ａ〜３０８７Ａに接続するダウンストリームポート（ＤＰ）３１６４〜３１６７を含んで構成される。
【０３１０】
アップストリームポート３１１１はＰＣＩ−ｔｏ−ＰＣＩブリッジ（Ｐ２Ｐ）３１３１と接続され、ダウンストリームポート３１６４〜３１６７はＰ２Ｐブリッジ３１５４〜３１５７とそれぞれ接続される。Ｐ２Ｐブリッジ３１３１、３１３３及び３１５４〜３１５７は、内部バス３１３２に接続されている。
【０３１１】
仮想スイッチ３０４３は、リンク３０３１に接続するアップストリームポート（ＵＰ２１）３１２１と、リンク３０８０Ａ〜３０８３Ａに接続するダウンストリームポート３１６０〜３１６３を含んで構成される。アップストリームポート３１２１はＰ２Ｐブリッジ３１４１と接続され、ダウンストリームポート３１６０〜３１６３はＰ２Ｐブリッジ３１５０〜３１５３と、それぞれ接続される。Ｐ２Ｐブリッジ３１４１、３１４３及び３１５０〜３１５３は、内部バス３１４２に接続されている。
【０３１２】
ＮＴＢ３０４４は、エンドポイント（ＥＰ１１）３１３４とエンドポイント（ＥＰ２１）３１４４とを含む。エンドポイント３１３４はＰ２Ｐブリッジ３１３３に接続され、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント３１４４はＰ２Ｐブリッジ３１４３に接続され、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント３１３４と３１４４は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０３１３】
図３２は、バックエンドスイッチ３０６１の内部構成例を示す。仮想スイッチ３０６２は、リンク３０３０に接続するアップストリームポート（ＵＰ２２）３２２２と、リンク３０８４Ｂ〜３０８７Ｂに接続するダウンストリームポート３２６４〜３２６７を含んで構成される。アップストリームポート３２２２はＰ２Ｐブリッジ３２４１と接続され、ダウンストリームポート３２６４〜３２６７はＰ２Ｐブリッジ３２５４〜３２５７と、それぞれ接続される。Ｐ２Ｐブリッジ３２４１、３２４３及び３２５４〜３２５７は、内部バス３２４２に接続されている。
【０３１４】
仮想スイッチ３０６３は、リンク３０１１に接続するアップストリームポート３２１２（ＵＰ１２）と、リンク３０８０Ｂ〜３０８３Ｂに接続するダウンストリームポート３２６０〜３２６３を含んで構成される。アップストリームポート３２１２はＰ２Ｐブリッジ３２３１と、ダウンストリームポート３２６０〜３２６３はＰ２Ｐブリッジ３２５０〜３２５３と、それぞれ接続される。Ｐ２Ｐブリッジ３２３１、３２３３及び３２５０〜３２５３は、内部バス３２３２に接続されている。
【０３１５】
ＮＴＢ３０６４は、エンドポイント（ＥＰ１２）３２３４とエンドポイント（ＥＰ２２）３２４４とを含む。エンドポイント３２３４はＰ２Ｐブリッジ３２３３に接続され、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント３２４４はＰ２Ｐブリッジ３２４３に接続され、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント３２３４と３２４４は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０３１６】
図３３〜３５を参照して、ＮＴＢ３０４４及び３０６４におけるアドレス変換動作を説明する。ＰＣＩｅ規格によれば、ルートポートが異なるＰＣＩｅツリー間では、ルートコンプレックスを介する場合を除いて、データ転送を行うことはできない。しかし、ＮＴＢがＰＣＩｅパケットのヘッダを適切に変換することにより、ルートポートが異なるＰＣＩｅツリー間でＮＴＢを介したデータ転送が可能になる。
【０３１７】
異なるＰＣＩｅツリー間では、一般的に、ＰＣＩｅパケット送受信先のアドレス空間、及び、ルーティングＩＤの体系が異なる。ルーティングＩＤは、リクエスタＩＤとコンプリータＩＤを含み、それらは共に、ＰＣＩｅツリー内でＰＣＩｅデバイスのＰＣＩファンクションを識別する情報（デバイス識別子）である。ＮＴＢは、ＰＣＩｅツリー間で送受信されるＰＣＩｅパケットのヘッダに含まれる送信先アドレスとルーティングＩＤを、ルーティング情報を参照して、送信先ＰＣＩｅツリーの体系に合わせて変換する。
【０３１８】
図３３において、プロセッサ３００３のアドレス空間３３００は、プロセッサ３００３のメインメモリ空間３３０５と、ＮＴＢ３０４４内エンドポイント３１３４にアクセスするためのウインドウ３３０３と、ＮＴＢ３０６４内エンドポイント３２３４にアクセスするためのウインドウ３３０４を含む。
【０３１９】
プロセッサ３０２３のアドレス空間３３１０は、プロセッサ３０２３のメインメモリ空間３３１５と、ＮＴＢ３０６４内エンドポイント３２４４にアクセスするためのウインドウ３３１３と、ＮＴＢ３０４４内エンドポイント３１４４にアクセスするためのウインドウ３３１４を含む。メインメモリ空間３３０５は、ウインドウ３３０１、３３０２を含む。メインメモリ空間３３１５は、ウインドウ３３１１、３３１２を含む。
【０３２０】
記憶デバイスは３０９０〜３０９７は、図示していないが、アドレス空間３３００のメインメモリ空間３３０５、ウインドウ３３０３、３３０４以外の空間に、プロセッサ３００３からアクセス可能にマップされている。プロセッサ３００３は、ＮＴＢ３０４４、３０６４を介さずに、つまりアドレス変換することなしに、記憶デバイス３０９０〜３０９７にアクセス可能である。
【０３２１】
同様に、記憶デバイスは３０９０〜３０９７は、アドレス空間３３１０のメインメモリ空間３３１５、ウインドウ３３１３、３３１４以外の空間に、プロセッサ３０２３からアクセス可能にマップされている。プロセッサ３０２３は、ＮＴＢ３０４４、３０６４を介さずに、つまりアドレス変換することなしに、記憶デバイス３０９０〜３０９７にアクセス可能である。
【０３２２】
ＮＴＢ３０４４は、エンドポイント３１３４が受信したウインドウ３３０３内ＰＣＩｅパケットの送信先アドレスを、ウインドウ３３１１内アドレスに変換し、エンドポイント３１４４から送信する。また、ＮＴＢ３０４４は、エンドポイント３１４４が受信したウインドウ３３１４内ＰＣＩｅパケットの送信先アドレスを、ウインドウ３３０２内アドレスに変換し、エンドポイント３１３４から送信する。
【０３２３】
ＮＴＢ３０６４は、エンドポイント３２３４が受信したウインドウ３３０４内ＰＣＩｅパケットの送信先アドレスを、ウインドウ３３１２内アドレスに変換し、エンドポイント３２４４から送信する。また、ＮＴＢ３０６４は、エンドポイント３２４４が受信したウインドウ３３１３内ＰＣＩｅパケットの送信先アドレスを、ウインドウ３３０１内アドレスに変換し、エンドポイント３２３４から送信する。
【０３２４】
図３４を参照して、ＮＴＢ３０４４を経由するプロセッサ３００３とプロセッサ３０２３との間のデータ転送経路（Ｐａｔｈ１）３４０１を説明する。データ転送経路３４０１は、メモリ３００２とメモリ３０２２内のデータを双方向に転送可能で、ルートコンプレックス３００４、ルートポート３００７、リンク３０１０、アップストリームポート３１１１、ＮＴＢ３０４４、アップストリームポート３１２１、リンク３０３１、ルートポート３０２６、ルートコンプレックス３０２４を通る。
【０３２５】
データ転送は、プロセッサがメモリアクセス命令により実行してもよいし、プロセッサ内蔵のＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓｓ）機能により実行してもよい。プロセッサ３００３はＤＭＡ機能３４１１を、プロセッサ３０２３はＤＭＡ機能３４１２をそれぞれ内蔵する。
【０３２６】
例えば、ＤＭＡ機能３４１１は、メモリ３００２から読出したデータをエンドポイント３１３４へ送信することにより、データをメモリ３０２２へ転送する。ＤＭＡ機能３４１２は、メモリ３０２２から読出したデータをエンドポイント３１４４へ送信することにより、データをメモリ３００２へ転送する。ＤＭＡ機能３４１１、３４１２は、プロセッサに内蔵される替わりに、それぞれバックエンドスイッチ３０４１、３０６１に内蔵されていてもよい。
【０３２７】
図３５を参照してＮＴＢ３０６４を経由するプロセッサ３０２３とプロセッサ３００３との間のデータ転送経路（Ｐａｔｈ２）３５０２を説明する。データ転送経路３５０２は、メモリ３０２２とメモリ３００２内のデータを双方向に転送可能で、ルートコンプレックス３０２４、ルートポート３０２７、リンク３０３０、アップストリームポート３１２２、ＮＴＢ３０６４、アップストリームポート３１１２、リンク３０１１、ルートポート３００６、ルートコンプレックス３００４を通る。
【０３２８】
データ転送は、プロセッサがメモリアクセス命令により実行してもよいし、プロセッサ内蔵のＤＭＡ機能が実行してもよい。例えば、ＤＭＡ機能３４１１は、メモリ３００２から読出したデータをエンドポイント３３４４へ送信することにより、データをメモリ３０２２へ転送する。ＤＭＡ機能３４１２は、メモリ３０２２から読出したデータをエンドポイント３３３４へ送信することにより、データをメモリ３００２へ転送する。
【０３２９】
以上により、プロセッサ３００３及び３０２３は、ＮＴＢ３０４４を含むデータ転送経路３４０１またはＮＴＢ３０６４を含むデータ転送経路３５０２を使用することにより、それぞれのメモリ３００２、３０２２に対して、双方向にデータを転送することができる。
【０３３０】
実施例１３に係るストレージシステムは、正常動作時において、データ転送経路３４０１とデータ転送経路３５０２の両方を使用する。一般に、プロセッサは複数のプロセッサコアを含んで構成されるが、約半分のコアがデータ転送経路３４０１を、他の約半分のコアがデータ転送経路３５０２を使用するように、各プロセッサコアが使用するデータ転送経路を予め割り当てておいてもよい。
【０３３１】
図３６〜３７を参照して、実施例１３に係るストレージシステムに含まれるＰＣＩｅツリーと、記憶デバイスを制御するためにメモリ内に配置されるキューについて説明する。図３６は、例として、ルートポート３００７をルートとするＰＣＩｅツリーを示す。プロセッサ３００３は、ルートポート３００７を介して仮想スイッチ３０４２のアップストリームポート３１１１と接続している。
【０３３２】
仮想スイッチ３０４２のダウンストリームポート３１６４〜３１６７は、記憶デバイス３０９４〜３０９７のポート３０９４Ａ〜３０９７Ａと接続している。この、ルートポート３００７からポート３０９４Ａ〜３０９７Ａまでのツリー状のトポロジが、ＰＣＩｅツリーである。
【０３３３】
実施例１３におけるストレージシステムにおいて、記憶デバイス３０９４〜３０９７は、例えば、ＮＶＭｅ規格のソリッドステートドライブである。ＮＶＭｅ規格では、記憶デバイスを制御するために、記憶デバイス毎に一つ以上のサブミッションキューと一つ以上のコンプリーションキューが、プロセッサのメインメモリ内に配置される。
【０３３４】
図３６に示すように、記憶デバイス３０９４を制御するためのサブミッションキュー（ＳＱ）３６０４とコンプリーションキュー（ＣＱ）３６１４が、メモリ３００２内に配置されている。同様に、記憶デバイス３０９５〜３０９７を制御するためのサブミッションキュー（ＳＱ）３６０５〜３６０７とコンプリーションキュー（ＣＱ）３６１５〜３６１７が、それぞれメモリ３００２内に配置されている。
【０３３５】
例として、プロセッサ３００３が記憶デバイス３０９７に対してＮＶＭｅコマンドを実行させる場合の手順を説明する。プロセッサ３００３は、サブミッションキュー３６０７に、ＮＶＭｅコマンドを含むエントリを加える。そして、プロセッサ３００３は、サブミッションキューに新しく加えられたエントリがあることを、記憶デバイス３０９７に通知する。
【０３３６】
通知を受けた記憶デバイス３０９７は、サブミッションキュー３６０７からそのエントリを読み込み、その内容を実行する。そして、実行完了後、記憶デバイス３０９７は、完了通知を含むエントリ、つまりコンプリーションをコンプリーションキュー３６１７に書き込む。最後にプロセッサ３００２は、そのコンプリーションを読出して完了通知の内容を確認する。
【０３３７】
図３０に示したように、実施例１３に係るストレージシステムは、四つのルートポート３００７、３００６、３０２６、３０２７を含むので、四つのＰＣＩｅツリーが構成される。
【０３３８】
図３７は、これら四つのＰＣＩｅツリーに含まれる、記憶デバイスのポート３７０１、記憶デバイス３７０２、ポートグループ３７０３、仮想スイッチ３７０４、ルートポート３７０５、記憶デバイスを制御するプロセッサ３７０６、記憶デバイスを制御するためのキューを格納するメモリ３７０７の関係を示す。ポートグループは、同じ仮想スイッチのダウンストリームポートに接続された、記憶デバイスのポートの集まりである。ストレージ制御部３００１、３０２１は、図３７に示す情報を、例えばメモリ３００２、３０２２内に保持している。
【０３３９】
仮想スイッチ３０４２のダウンストリームポートに接続された記憶デバイス３０９４〜３０９７のポート３０９４Ａ〜３０９７Ａは、ポートグループＧｒ１１に属する。そして、プロセッサ３００３は、ルートポート３００７を介してポートグループＧｒ１１に属するポート３０９４Ａ〜３０９７Ａにアクセスし、メモリ３００２内に配置されたキューで記憶デバイス３０９４〜３０９７を制御する。
【０３４０】
仮想スイッチ３０６３のダウンストリームポートに接続された記憶デバイス３０９０〜３０９３のポート３０９０Ｂ〜３０９３Ｂは、ポートグループＧｒ１２に属する。そして、プロセッサ３００３は、ルートポート３００６を介してポートグループＧｒ１２に属するポート３０９０Ｂ〜３０９３Ｂにアクセスし、メモリ３００２内に配置されたキューで記憶デバイス３０９０〜３０９３を制御する。
【０３４１】
仮想スイッチ３０４３のダウンストリームポートに接続された記憶デバイス３０９０〜３０９３のポート３０９０Ａ〜３０９３Ａは、ポートグループＧｒ２１に属する。そして、プロセッサ３０２３は、ルートポート３０２６を介してポートグループＧｒ２１に属するポート３０９０Ａ〜３０９３Ａにアクセスし、メモリ３０２２内に配置されたキューで記憶デバイス３０９０〜３０９３を制御する。
【０３４２】
仮想スイッチ３０６２のダウンストリームポートに接続された記憶デバイス３０９４〜３０９７のポート３０９４Ｂ〜３０９７Ｂは、ポートグループＧｒ２２に属する。そして、プロセッサ３０２３は、ルートポート３０２７を介してポートグループＧｒ２２に属するポート３０９４Ｂ〜３０９７Ｂにアクセスし、メモリ３０２２内に配置されたキューで記憶デバイス３０９４〜３０９７を制御する。
【０３４３】
図３８を参照して、実施例１３に係るストレージシステムにおけるバックエンドスイッチ障害の影響範囲を説明する。例として、バックエンドスイッチ３０６１に障害が発生し、バックエンドスイッチ３０６１内の仮想スイッチ３０６２、３０６３及びＮＴＢ３０６４が動作不能になった場合を想定する。
【０３４４】
この場合、仮想スイッチ３０６２、３０６３のダウンストリームポートに接続された記憶デバイス３０９０〜３０９７のポート３０９０Ｂ〜３０９７Ｂが、プロセッサ３００３及び３０２３からアクセス不能になる。さらに、図３５のデータ転送経路３５０２を使ったプロセッサ間データ転送もできなくなる。
【０３４５】
しかし、記憶デバイス３０９０〜３０９３のポート３０９０Ａ〜３０９３Ａは、プロセッサ３０２３が、リンク３０３１と仮想スイッチ３０４３を介してアクセス可能である。また、記憶デバイス３０９４〜３０９７のポート３０９４Ａ〜３０９７Ａは、プロセッサ３００３が、リンク３０１０と仮想スイッチ３０４２を介してアクセス可能である。さらに、図３４のデータ転送経路３４０１を使ったプロセッサ間データ転送が可能である。従って、バックエンドスイッチ３０６１に障害が発生した場合でも、実施例１３に係るストレージシステムは、動作を継続できる。
【０３４６】
このように、実施例１３に係るストレージシステムは、バックエンドスイッチ３０４１及び３０６１の一方が動作を停止しても、またはバックエンドスイッチ３０４１及び３０６１へのリンク３０１０、３０１１、３０３０、３０３１のいずれかが切断されても、プロセッサ３００３、３０２３間の通信、及びプロセッサ３００３及び３０２３と記憶デバイス３０９０〜３０９７との間の通信を、すべて継続できる。これによりシステムの可用性を高めることができる。
【０３４７】
図３９を参照して、実施例１３に係るストレージシステムにおけるストレージ制御部障害の影響範囲を説明する。先ず、仮想スイッチの機能を説明する。同じバックエンドスイッチに属する複数の仮想スイッチは、個別にリセットすることが可能である。例えば、バックエンドスイッチ３０６１において、リンク３０３０がダウンした場合、仮想スイッチ３０６２はリセット状態になるが、仮想スイッチ３０６３はその影響を受けない。
【０３４８】
仮想スイッチ３０６３は、仮想スイッチ３０６２の状態に関係なく動作を継続可能である。リンク３０１１がリンクダウンした場合、仮想スイッチ３０６３はリセット状態になるが、仮想スイッチ３０６２はその影響を受けない。仮想スイッチ３０６２は、仮想スイッチ３０６３の状態に関係なく動作を継続可能である。
【０３４９】
例として、ストレージ制御部３０２１内のプロセッサ３０２３に障害が発生し、バックエンドスイッチ３０６１内の仮想スイッチ３０６２及びバックエンドスイッチ３０４１内の仮想スイッチ３０４３が動作不能になった場合を想定する。
【０３５０】
この場合、仮想スイッチ３０４３のダウンストリームポートに接続された記憶デバイス３０９０〜３０９３のポート３０９０Ａ〜３０９３Ａと、仮想スイッチ３０６２のダウンストリームポートに接続された記憶デバイス３０９４〜３０９７のポート３０９４Ｂ〜３０９７Ｂが、プロセッサ３０２３からアクセス不能になる。
【０３５１】
さらに、図３４のデータ転送経路３４０１及び図３５のデータ転送経路３５０２を使ったプロセッサ間データ転送もできなくなる。しかし、記憶デバイス３０９０〜３０９３のポート３０９０Ｂ〜３０９３Ｂは、プロセッサ３００３が、リンク３０１１と仮想スイッチ３０６３を介してアクセス可能である。
【０３５２】
記憶デバイス３０９４〜３０９７のポート３０９４Ａ〜３０９７Ａは、プロセッサ３００３が、リンク３０１０と仮想スイッチ３０４２を介してアクセス可能である。このように、実施例１３に係るストレージシステムは、ストレージ制御部の一方に障害が発生した場合でも、全ての記憶デバイスにアクセス可能である。
【０３５３】
図４０〜４３を用いて、実施例１３に係るストレージシステムにおける、バックエンドスイッチ障害時の記憶デバイス読出し方法と、バックエンドスイッチの保守または交換方法を説明する。
【０３５４】
保守は、例えばバックエンドスイッチのファームウェアの更新作業を含み、その作業中は、一時的にバックエンドスイッチが不通になる。交換は、例えばバックエンドスイッチの故障により、スイッチを交換することを含む。何れの場合も、対象であるバックエンドスイッチを通る経路はデータ転送経路として使用できないので、記憶デバイスにアクセスするためには代替経路を使う必要がある。
【０３５５】
先ず、二つあるバックエンドスイッチの一方が不通時に、ストレージ制御部が記憶デバイスへの書込み要求を、上位装置から受信した場合を説明する。例えば、ストレージ制御部３００１の上位ＩＦ３００８が書込み要求を受信した場合、その書込み要求に付随する書込みデータは、メモリ３００２に格納される。さらに、メモリ３００２に格納された書込みデータは、データ転送経路３４０１または３５０２を介して、ストレージ制御部３０２１のメモリ３０２２に転送される。
【０３５６】
このように、実施例１３に係るストレージシステムは、受信した書込みデータを二つのストレージ制御部内のメモリに二重化して保持する。二つのストレージ制御部からは、二つのバックエンドスイッチの何れか一方を介してストレージシステム内記憶デバイスにアクセス可能である。従って、二つあるバックエンドスイッチの一方が不通の場合でも、実施例１３に係るストレージシステムは、上位装置から受信したデータを記憶デバイスに書き込むことができる。
【０３５７】
次に、二つあるバックエンドスイッチの一方が不通時に、ストレージ制御部が、記憶デバイスからの読出し要求を、上位装置から受信した場合を説明する。図３６、３７を参照して説明したように、実施例１３に係るストレージシステムでは、ＰＣＩｅツリー毎にアクセス可能な記憶デバイスのポートグループが決まっている。つまり、バックエンドスイッチの一方が不通になると、一方のストレージ制御部からはアクセスできない記憶デバイスができてしまう。
【０３５８】
例えば、ストレージ制御部３０２１の上位ＩＦ３０２８が、記憶デバイス３０９７に格納されているデータの読出し要求を上位装置から受信したとする。このとき、バックエンドスイッチ３０６１が不通であると、ストレージ制御部３０２１は記憶デバイス３０９７から所望のデータを読出すことができない。この場合、ストレージ制御部３０２１が、読出しデータを格納した記憶デバイス３０９７をアクセス可能なストレージ制御部３００１に、記憶デバイス３０９７からのデータ読出しを依頼する必要がある。
【０３５９】
図４０を参照して、交換または保守の対象となる（不通となる）バックエンドスイッチ保守または交換作業中に使用する代替経路、及びアクセス先となる記憶デバイスのポート等の関係を説明する。具体的には、図４０は、保守または交換対象スイッチ４００１、要求を受信したストレージ制御部４００２、アクセス先ポートグループ４００３、代替処理ストレージ制御部４００４、代替アクセス先ポートグループ４００５、及び、使用可能なストレージ制御部間データ転送経路４００６、の関係を示す。ストレージ制御部３００１、３０２１は、図４０に示す情報を、例えば、メモリ３００２、３０２２に保持している。
【０３６０】
先ず、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０４１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３００１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ１１の場合について述べる。
【０３６１】
この場合、ストレージ制御部３００１は、ストレージ制御部間で使用可能なデータ転送経路（４００６）であるデータ転送経路３５０２を使って、ストレージ制御部３０２１に、記憶デバイスからのデータ読出しを依頼する。依頼を受けたストレージ制御部３０２１は、ポートグループＧｒ２２に属する記憶デバイスのポートにアクセスして、所望のデータを読み出す。
【０３６２】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０４１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３００１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ１２の場合について述べる。この場合、ストレージ制御部３００１は、ポートグループＧｒ１２に属する記憶デバイスポートに直接アクセスできるので、ストレージ制御部３０２１へのデータ読出し依頼は不要である。
【０３６３】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０４１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３０２１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ２１の場合について述べる。
【０３６４】
この場合、ストレージ制御部３０２１は、ストレージ制御部間で使用可能なデータ転送経路（４００６）であるデータ転送経路３５０２を使って、ストレージ制御部３００１に、記憶デバイスからのデータ読出しを依頼する。依頼を受けたストレージ制御部３００１は、ポートグループＧｒ１２に属する記憶デバイスのポートにアクセスして、所望のデータを読み出す。
【０３６５】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０４１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３０２１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ２２の場合について述べる。この場合、ストレージ制御部３０２１は、ポートグループＧｒ２２に属する記憶デバイスポートに直接アクセスできるので、ストレージ制御部３００１へのデータ読出し依頼は不要である。
【０３６６】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０６１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３００１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ１１の場合について述べる。この場合、ストレージ制御部３００１は、ポートグループＧｒ１１に属する記憶デバイスポートに直接アクセスできるので、ストレージ制御部３０２１へのデータ読出し依頼は不要である。
【０３６７】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０６１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３００１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ１２の場合について述べる。
【０３６８】
この場合、ストレージ制御部３００１は、ストレージ制御部間で使用可能なデータ転送経路（４００６）であるデータ転送経路３４０１を使って、ストレージ制御部３０２１に、記憶デバイスからのデータ読出しを依頼する。依頼を受けたストレージ制御部３０２１は、ポートグループＧｒ２１に属する記憶デバイスのポートにアクセスして、所望のデータを読み出す。
【０３６９】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０６１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３０２１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ２１の場合について述べる。この場合、ストレージ制御部３０２１は、ポートグループＧｒ２１に属する記憶デバイスポートに直接アクセスできるので、ストレージ制御部３００１へのデータ読出し依頼は不要である。
【０３７０】
次に、保守または交換対象スイッチ（４００１）がバックエンドスイッチ３０６１で、上位装置からの読出し要求を受信したストレージ制御部（４００２）がストレージ制御部３０２１で、さらに読出し先記憶デバイスのポートグループ（４００３）がＧｒ２２の場合について述べる。
【０３７１】
この場合、ストレージ制御部３０２１は、ストレージ制御部間で使用可能なデータ転送経路（４００６）であるデータ転送経路３４０１を使って、ストレージ制御部３００１に、記憶デバイスからのデータ読出しを依頼する。依頼を受けたストレージ制御部３００１は、ポートグループＧｒ１１に属する記憶デバイスのポートにアクセスして、所望のデータを読み出す。
【０３７２】
以上説明したように、バックエンドスイッチの一方が動作不可で不通の場合に、上位装置から読出し要求を受信したストレージ制御部は、図４０が示す情報に従い、他方のストレージ制御部への代替読出し依頼の要否や読出し先ポートグループ、使用可能なストレージ制御部間データ転送経路を判定する。
【０３７３】
図４１を参照して、バックエンドスイッチ障害時における記憶デバイスから上位装置へのデータ読出し経路の一例を説明する。図４１においては、一方のバックエンドスイッチ３０４１のみ動作可能で、バックエンドスイッチ３０６１（図示せず）は動作不可である。ストレージ制御部３０２１の上位ＩＦ３０２８は、記憶デバイス３０９７内のデータ読出し要求を、上位装置（図示せず）から受信する。
【０３７４】
ストレージ制御部３０２１は、バックエンドスイッチ３０６１が不通のために記憶デバイス３０９７にアクセスできないので、データ転送経路３４０１を使って所定のコマンドやメッセージの送信を行うことにより、ストレージ制御部３００１に記憶デバイス３０９７からの読出しを依頼する。そのメッセージは、読出し先記憶デバイス情報、読出し先データの記憶デバイス内アドレス情報、読出しデータの転送先であるメモリ３０２２内バッファ（ＢＵＦ２）４１０２のアドレス情報を含む。
【０３７５】
ストレージ制御部３００１は、メモリ３００２内に、記憶デバイス３０９７を制御するためのサブミッションキュー３６０７とコンプリーションキュー３６１７を備える。ストレージ制御部３００１は、プロセッサ３００３のルートポート３００７、リンク３０１０、仮想スイッチ３０４２、リンク３０８７Ａを通るデータ転送経路（Ｐａｔｈ３）４１０３を使って、記憶デバイス３０９７とメモリ３００２との間のデータ転送を行う。
【０３７６】
ストレージ制御部３００１は、記憶デバイス３０９７から読出したデータを、メモリ３００２内のバッファ４１０１に格納する。ストレージ制御部３００１は、読出したバッファ４１０１内のデータを、バッファ４１０２へ、データ転送経路３４０１を使って転送する。
【０３７７】
図４２を参照して、バックエンドスイッチ障害時の記憶デバイスからの読出しのフローチャートを説明する。ステップ４２０１において、ストレージ制御部３０２１は、ストレージ制御部３００１に対して、データ転送経路３４０１経由で、記憶デバイス３９０７からのデータ読出しを依頼する。
【０３７８】
ステップ４２０２において、上記依頼を受けたストレージ制御部３００１は、データ転送経路４１０３経由で記憶デバイス３９０７からのデータ読出しを実行する。詳しくは、プロセッサ３００３が、サブミッションキュー３６０７に、記憶デバイス３０９７からの読出し命令を含むエントリを加える。読出しデータの転送先はメモリ３００２内のバッファ４１０１とする。
【０３７９】
サブミッションキュー３６０７から読出し命令を取得した記憶デバイス３０９７は、データ転送経路４１０３経由で、要求されたデータをバッファ４１０１に送信する。バッファ４１０１へのデータ転送完了後、記憶デバイス３０９７は、コンプリーションをコンプリーションキュー３６１７に加える。
【０３８０】
ステップ４２０３において、上記コンプリーションを確認したストレージ制御部３００１は、メモリ３００２のバッファ４１０１内の読出しデータを、デ ータ転送経路３４０１経由で、メモリ３０２２のバッファ４１０２へ転送する。そして、ストレージ制御部３００１は、転送完了をストレージ制御部３０２１に通知する。ステップ４２０４において、ストレージ制御部３０２１は、メモリ３０２２内のバッファ４１０２に転送された読出しデータを、上位装置へ送信する。
【０３８１】
図４３を参照して、実施例１３に係るストレージシステムのバックエンドスイッチ保守または交換のフローチャートを説明する。ストレージ制御部３００１、３０２１は、以下に説明するフローにおいて保守員により設定された情報を保持し、その情報にしたがってＩ／Ｏ処理を実行する。
【０３８２】
ステップ４３０１において、ストレージシステムの保守員は、実施例１３に係るストレージシステムにおける、図４０で説明した代替経路設定を有効化する。このステップ実行以降、実施例１３に係るストレージシステムは、保守または交換対象のバックエンドスイッチを使用せずに、記憶デバイスに対する読出しまたは書込み行う。
【０３８３】
ステップ４３０２において、保守員は、保守または交換対象のバックエンドスイッチとストレージ制御部との間とのリンクに関わるエラー通知を無効化する。これは、バックエンドスイッチの交換作業等に伴いリンクダウンが発生するが、リンクダウン検出に伴う障害処理の自動起動を回避するためである。既に実行中のリンクダウンに伴う障害処理には、このステップは作用しない。
【０３８４】
ステップ４３０３において、保守員は、保守または交換対象のバックエンドスイッチとストレージ制御部との間とのリンクをリンクダウンさせる。ステップ４３０４において、保守員は、バックエンドスイッチの保守または交換作業を実行する。
【０３８５】
ステップ４３０５において、保守員は、保守または交換対象のバックエンドスイッチとストレージ制御部との間とのリンクに関わるエラー通知を有効化する。再リンクアップ後にリンクダウンが発生すると、リンクダウン検出に伴う障害処理が起動する。
ステップ４３０６において、保守員は、保守または交換対象のバックエンドスイッチとストレージ制御部との間とのリンクをリンクアップさせる。
【０３８６】
ステップ４３０７において、保守員は、図４０で説明した代替経路設定を無効化する。このステップ実行以降、実施例１３に係るストレージシステムは、保守または交換対象のバックエンドスイッチを経由する、記憶デバイスに対する読出しまたは書込みを再開する。
【０３８７】
以上説明したように、実施例１３に係るストレージシステムは、記憶デバイスからの読出しを含むストレージシステムとしての動作を継続しながら、バックエンドスイッチに対する保守または交換作業を実施することができる。
【０３８８】
実施例１３に係るストレージシステムの特徴をまとめると以下のようになる。実施例１３に係るストレージシステムは、二つのストレージ制御部３００１、３０２１と、それぞれが二つのＰＣＩｅポートを備える記憶デバイス３０９０〜３０９７を収容可能なドライブ筐体３０４０を含む。
【０３８９】
二つのストレージ制御部３００１、３０２１とドライブ筐体３０４０は、リンク３０１０、３０１１、３０３０、３０３１で接続されている。ドライブ筐体３０４０は、仮想スイッチ３０４２と３０４３をＮＴＢ３０４４で接続したバックエンドスイッチ３０４１と、仮想スイッチ３０６２と３０６３をＮＴＢ３０６４で接続したバックエンドスイッチ３０６１を備える。
【０３９０】
バックエンドスイッチ３０４１、３０６１は、それぞれ、一方をストレージ制御部３００１と、他方をストレージ制御部３０２１と接続されている二つのアップストリームポート（３１１１と３１２１、または３２２２と３２１２）を含む。
【０３９１】
さらに、記憶デバイス３０９０〜３０９７は、二つのバックエンドスイッチのダウンストリームポート（３１６０〜３１６７または３２６０〜３２６７）と、二つのストレージ制御部３００１、３０２１からＮＴＢ３０４４及び３０６４を介さずにアクセス可能に接続されている。
【０３９２】
以上の特徴を備えた実施例１３に係るストレージシステムによれば、ストレージ制御部間のデータ転送経路と、ストレージ制御部と記憶デバイス間のデータ転送経路が二重化されているので、可用性の高いストレージシステムが実現できる。
【実施例１４】
【０３９３】
図４４〜４５を用いて実施例１４を説明する。実施例１４に係るストレージシステムは、実施例１３に係るストレージシステムと、バックエンドスイッチ障害時の記憶デバイスからのデータ読出し方法が異なる。
【０３９４】
図４４を参照して、バックエンドスイッチ障害時における記憶デバイスから上位装置へのデータ読出し経路の一例を説明する。図４４においては、一方のバックエンドスイッチ３０４１のみ動作可能で、バックエンドスイッチ３０６１（図示せず）は動作不可である。本例において、ストレージ制御部３０２１の上位ＩＦ３０２８は、記憶デバイス３０９７内のデータ読出し要求を、上位装置（図示せず）から受信する。
【０３９５】
ストレージ制御部３０２１は、バックエンドスイッチ３０６１が不通のために記憶デバイス３０９７にアクセスできない。ストレージ制御部３０２１は、データ転送経路３４０１を使って所定のコマンドやメッセージの送信を行うことにより、ストレージ制御部３００１に記憶デバイス３０９７からの読出しを依頼する。そのメッセージは、読出し先記憶デバイス情報、読出し先データの記憶デバイス内アドレス情報、読出しデータの転送先であるメモリ３０２２内バッファ４１０２のアドレス情報を含む。
【０３９６】
ストレージ制御部３００１は、メモリ３００２内に、記憶デバイス３０９７を制御するためのサブミッションキュー３６０７とコンプリーションキュー３６１７を備える。さらに、ストレージ制御部３００１は、メモリ３００２内に、記憶デバイス３０９７を制御するためのサブミッションキュー４４０７とコンプリーションキュー４４１７を備える。サブミッションキュー４４０７とコンプリーションキュー４４１７は、ストレージ制御部３０２１から依頼される代替処理のために使用されるキューである。
【０３９７】
ストレージ制御部３００１は、データ転送経路４１０３を使って、記憶デバイス３０９７とメモリ３００２との間のデータ転送を行う。記憶デバイス３０９７は、サブミッションキュー４４０７内エントリに含まれるコマンドを実行した結果として読出したデータを、メモリ３０２２内のバッファ４１０２に格納する。データは、リンク３０８７Ａ、仮想スイッチ３０４２、ＮＴＢ３０４４、仮想スイッチ３０４３、リンク３０３１、プロセッサ３０２３内ルートポート３０２６を通るデータ転送経路（Ｐａｔｈ４）４４０４を使って転送される。
【０３９８】
図４５を参照して、バックエンドスイッチ障害時の記憶デバイスからの読出しのフローチャートを説明する。ステップ４５０１において、ストレージ制御部３０２１は、ストレージ制御部３００１に対して、データ転送経路３４０１経由で、記憶デバイス３９０７からのデータ読出しを依頼する。
【０３９９】
ステップ４５０２において、上記依頼を受けたストレージ制御部３００１は、データ転送経路４１０３経由で記憶デバイス３９０７からのデータ読出しを実行する。具体的には、プロセッサ３００３が、サブミッションキュー４４０７に、記憶デバイス３０９７からの読出し命令を含むエントリを加える。読出しデータの転送先はメモリ３０２２内のバッファ４１０２とする。
【０４００】
サブミッションキュー４４０７から読出し命令を取得した記憶デバイス３０９７は、データ転送経路４４０４経由で、要求されたデータをバッファ４１０２に送信する。バッファ４１０２へのデータ転送完了後、記憶デバイス３０９７は、コンプリーションをコンプリーションキュー４４１７に加える。なお、プロセッサ３０２３が、データ転送経路３４０１を介して、サブミッションキュー４４０７へ、記憶デバイス３０９７からの読出し命令を含むエントリを直接追加するようにしてもよい。
【０４０１】
ステップ４５０３において、上記コンプリーションを確認したストレージ制御部３００１は、読出しデータの転送完了をストレージ制御部３０２１に通知する。ステップ４５０４において、ストレージ制御部３０２１は、メモリ３０２２内のバッファ４１０２に転送された読出しデータを、上位装置へ送信する。
【０４０２】
実施例１４に係るストレージシステムによれば、バックエンドスイッチ障害時の記憶デバイスからの読出し処理において、ストレージ制御部３００１とストレージ制御部３０２１との間で、読出しデータを転送する必要がない。その結果、ストレージ制御部間の読出しデータ転送にかかる時間の省くことができ、また、ストレージ制御部間のデータ転送に係るメモリ使用量、メモリ帯域も節約できる。
【実施例１５】
【０４０３】
図４６を用いて実施例１５を説明する。図４６は、実施例１５に係るストレージシステムの構成の一例である。実施例１５に係るストレージシステムは、ストレージ制御部内プロセッサとドライブ筐体との接続を、ストレージ制御部内に備えたＰＣＩｅスイッチを介して行う点が、実施例１３に係るストレージシステムとは異なる。
【０４０４】
図４６において、ストレージシステムは、二つのストレージ制御部４６０１、４６２１及びドライブ筐体３０４０を備える。ストレージ制御部４６０１は、アップストリームポート（ＵＰ）４６３２をプロセッサ３００３のルートポート３００７と接続したＰＣＩｅスイッチ４６３１を備える。
【０４０５】
ＰＣＩｅスイッチ４６３１のダウンストリームポート（ＤＰ１１）４６３３は、リンク３０１０を介してドライブ筐体３０４０内仮想スイッチ３０４２と接続している。ＰＣＩｅスイッチ４６３１のダウンストリームポート（ＤＰ１２）４６３４は、リンク３０１１を介してドライブ筐体３０４０内仮想スイッチ３０６３と接続している。
【０４０６】
ストレージ制御部４６２１は、アップストリームポート４６４２をプロセッサ３０２３のルートポート３０２７と接続したＰＣＩｅスイッチ４６４１を備える。ＰＣＩｅスイッチ４６４１のダウンストリームポート（ＤＰ２２）４６４３は、リンク３０３０を介してドライブ筐体３０４０内仮想スイッチ３０６２と接続している。ＰＣＩｅスイッチ４６４１のダウンストリームポート（ＤＰ２１）４６４４は、リンク３０３１を介してドライブ筐体３０４０内仮想スイッチ３０４３と接続している。
【０４０７】
実施例１５に係るストレージシステムのその他の構成及びストレージシステムとしての動作は、実施例１３に係るストレージシステムと同様であるので、説明を省略する。
【０４０８】
実施例１５に係るストレージシステムによれば、ストレージ制御部内のプロセッサに十分な数のルートポートまたはレーンが備えられておらず、ドライブ筐体との接続用に割り当てられるルートポートまたはレーンが不足する場合でも、実施例１３〜１４に係るストレージシステムと同様に可用性の高いストレージシステムを提供できる。
【実施例１６】
【０４０９】
図４７〜５０を用いて実施例１６を説明する。図４７は、実施例１６に係るストレージシステムの構成例を示す。実施例１６に係るストレージシステムは、バックエンドスイッチの構成が、実施例１３に係るストレージシステムとは異なる。
【０４１０】
図４７において、実施例１６に係るストレージシステムは、二つのストレージ制御部３００１、３０２１及びドライブ筐体４７４０を備える。ドライブ筐体４７４０は、図３０のバックエンドスイッチ３０４１、３０６１に替えて、バックエンドスイッチ４７４１と４７６１を備える。実施例１６に係るストレージシステムの、その他の構成及びストレージシステムとしての動作は、実施例１３に係るストレージシステムと同様である。
【０４１１】
図４８は、バックエンドスイッチ４７４１の内部構成例を示す。仮想スイッチ４７４２は、リンク３０１０に接続するアップストリームポート４８１１と、リンク３０８４Ａ〜３０８７Ａに接続するダウンストリームポート４８６４〜４８６７を含んで構成される。アップストリームポート４８１１はＰ２Ｐブリッジ４８３１と、ダウンストリームポート４８６４〜４８６７はＰ２Ｐブリッジ４８５４〜４８５７と、それぞれ接続される。Ｐ２Ｐブリッジ４８３１、４８３３及び４８５４〜４８５７は、内部バス４８３２に接続されている。
【０４１２】
ＮＴＢ４７０１は、二つのエンドポイント４８３４、４８３５を含む。エンドポイント４８３４はＰ２Ｐブリッジ４８３３に接続され、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント４８３５はアップストリームポート４８０３に接続され、リンク４７０３、仮想スイッチ４７４３、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント４８３４、４８３５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４１３】
仮想スイッチ４７４３は、リンク３０３１に接続するアップストリームポート４８２１と、リンク３０８０Ａ〜３０８３Ａに接続するダウンストリームポート４８６０〜４８６３を含んで構成される。アップストリームポート４８２１はＰ２Ｐブリッジ４８４１と、ダウンストリームポート４８６０〜４８６３はＰ２Ｐブリッジ４８５０〜４８５３と、それぞれ接続される。Ｐ２Ｐブリッジ４８４１、４８４３及び４８５０〜４８５３は、内部バス４８４２に接続されている。
【０４１４】
ＮＴＢ４７０２は、二つのエンドポイント４８４４、４８４５を含む。エンドポイント４８４４はＰ２Ｐブリッジ４８４３に接続され、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント４８４５はアップストリームポート４８１３に接続され、リンク４７０３、仮想スイッチ４７４２、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント４８４４と４８４５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４１５】
図４９は、バックエンドスイッチ４７６１の内部構成例を示す。仮想スイッチ４７６２は、リンク３０３０に接続するアップストリームポート４９２２と、リンク３０８４Ｂ〜３０８７Ｂに接続するダウンストリームポート４９６４〜４９６７を含んで構成される。アップストリームポート４９２２はＰ２Ｐブリッジ４９４１と、ダウンストリームポート４９６４〜４９６７はＰ２Ｐブリッジ４９５４〜４９５７と、それぞれ接続される。Ｐ２Ｐブリッジ４９４１、４９４３及び４９５４〜４９５７は、内部バス４９４２に接続されている。
【０４１６】
ＮＴＢ４７１１は、二つのエンドポイント４９４４と４９４５を含む。エンドポイント４９４４はＰ２Ｐブリッジ４９４３に接続され、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント４９４５はアップストリームポート４９１３に接続され、リンク４７１３、仮想スイッチ４７６３、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント４９４４と４９４５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４１７】
仮想スイッチ４７６３は、リンク３０１１に接続するアップストリームポート４９１２と、リンク３０８０Ｂ〜３０８３Ｂに接続するダウンストリームポート４９６０〜４９６３を含んで構成される。アップストリームポート４９１２はＰ２Ｐブリッジ４９３１と、ダウンストリームポート４９６０〜４９６３はＰ２Ｐブリッジ４９５０〜４９５３と、それぞれ接続される。Ｐ２Ｐブリッジ４９３１、４９３３及び４９５０〜４９５３は、内部バス４９３２に接続されている。
【０４１８】
ＮＴＢ４７１２は、二つのエンドポイント４９３４と４９３５を含む。エンドポイント４９３４はＰ２Ｐブリッジ４９３３に接続され、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント４９３５はアップストリームポート４９０３に接続され、リンク４７１３、仮想スイッチ４７６２、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント４９３４と４９３５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４１９】
図５０を用いて、ＮＴＢ４７０１、４７０２またはＮＴＢ４７１１、４７１２におけるアドレス変換動作を説明する。図５０において、プロセッサ３００３のアドレス空間３３００は、プロセッサ３００３のメインメモリ空間３３０５と、ＮＴＢ４７０１内エンドポイント４８３４にアクセスするためのウインドウ５００３と、ＮＴＢ４７１２内エンドポイント４９３４にアクセスするためのウインドウ５００４と、を含む。
【０４２０】
プロセッサ３０２３のアドレス空間３３１０は、プロセッサ３０２３のメインメモリ空間３３１５と、ＮＴＢ４７１１内エンドポイント４９４４にアクセスするためのウインドウ５０１３と、ＮＴＢ４７０２内エンドポイント４８４４にアクセスするためのウインドウ５０１４を含む。メインメモリ空間３３０５は、ウインドウ５００１、５００２を含む。メインメモリ空間３３１５は、ウインドウ５０１１、５０１２を含む。
【０４２１】
記憶デバイスは３０９０〜３０９７は、図示していないが、アドレス空間３３００のメインメモリ空間３３０５、ウインドウ５００３、５００４以外の空間に、プロセッサ３００３からアクセス可能にマップされている。プロセッサ３００３は、ＮＴＢ４７０１、４７１２を介さずに、つまりアドレス変換することなしに、記憶デバイス３０９０〜３０９７アクセス可能である。
【０４２２】
同様に、記憶デバイスは３０９０〜３０９７は、アドレス空間３３１０のメインメモリ空間３３１５、ウインドウ５０１３、５０１４以外の空間に、プロセッサ３０２３からアクセス可能にマップされている。プロセッサ３０２３は、ＮＴＢ４７１１、４７０２を介さずに、つまりアドレス変換することなしに、記憶デバイス３０９０〜３０９７アクセス可能である。
【０４２３】
アドレス空間５０００は、リンク４７０３または４７１３をＰＣＩｅパケットが通過する際に使用されるアドレス空間であり、ウインドウ５０２１、５０２２を含む。ストレージ制御部３００１がストレージ制御部３０２１内メモリ３０２２へデータ転送する場合のＮＴＢ４７０１、４７０２におけるアドレス変換動作について説明する。ＮＴＢ４７０１、４７０２は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。
【０４２４】
ＮＴＢ４７０１は、エンドポイント４８３４が受信したウインドウ５００３内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０２１内アドレスに変換し、エンドポイント４８３５から送信する。ＮＴＢ４７０２は、リンク４７０３を介してエンドポイント４８４５が受信したウインドウ５０２１内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０１１内アドレスに変換し、エンドポイント４８４４から送信する。
【０４２５】
ストレージ制御部３００１がストレージ制御部３０２１内メモリ３０２２へデータ転送する場合のＮＴＢ４７１２、４７１１におけるアドレス変換動作について説明する。ＮＴＢ４７１１、４７１２は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。ＮＴＢ４７１２は、エンドポイント４９３４が受信したウインドウ５００４内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０２２内アドレスに変換し、エンドポイント４９３５から送信する。ＮＴＢ４７１１は、リンク４７１３を介してエンドポイント４９４５が受信したウインドウ５０２２内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０１２内アドレスに変換し、エンドポイント４９４４から送信する。
【０４２６】
ストレージ制御部３０２１がストレージ制御部３００１内メモリ３００２へデータ転送する場合のＮＴＢ４７１１、４７１２におけるアドレス変換動作について説明する。ＮＴＢ４７１１は、エンドポイント４９４４が受信したウインドウ５０１３内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０２１内アドレスに変換し、エンドポイント４９４５から送信する。ＮＴＢ４７１２は、リンク４７１３を介してエンドポイント４９３５が受信したウインドウ５０２１内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５００１内アドレスに変換し、エンドポイント４９３４から送信する。
【０４２７】
ストレージ制御部３０２１がストレージ制御部３００１内メモリ３００２へデータ転送する場合のＮＴＢ４７０２、４７０１におけるアドレス変換動作について説明する。ＮＴＢ４７０２は、エンドポイント４８４４が受信したウインドウ５０１４内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５０２２内アドレスに変換し、エンドポイント４８４５から送信する。ＮＴＢ４７０１は、リンク４７０３を介してエンドポイント４８３５が受信したウインドウ５０２２内ＰＣＩｅパケットの送信先アドレスを、ウインドウ５００２内アドレスに変換し、エンドポイント４８３４から送信する。
【０４２８】
バックエンドスイッチ４７４１、４７６１及び仮想スイッチ４７４２、４７４３、４７６２、４７６３の一部または全部を、例えば集積回路で設計することによりハードウェアで実現してもよい。その場合、リンク４７０３、４７１３は、集積回路間を接続する物理的な接続（配線）でも、集積回路内の物理的あるいは論理的な接続でもよい。
【０４２９】
実施例１６に係るストレージシステムの特徴をまとめると以下のようになる。実施例１６に係るストレージシステムは、二つのストレージ制御部３００１、３０２１と、それぞれが二つのＰＣＩｅポートを備える記憶デバイス３０９０〜３０９７を収容可能なドライブ筐体４７４０を含む。二つのストレージ制御部３００１、３０２１とドライブ筐体４７４０は、リンク３０１０、３０１１、３０３０、３０３１で接続されている。
【０４３０】
ドライブ筐体４７４０は、仮想スイッチ４７４２と４７４３をＮＴＢ４７０１、４７０２及びリンク４７０３で接続したバックエンドスイッチ４７４１と、仮想スイッチ４７６２と４７６３をＮＴＢ４７１１、４７１２及びリンク４７１３で接続したバックエンドスイッチ４７６１を備える。バックエンドスイッチ４７４１と４７６１は、それぞれの二つのアップストリームポートの一方がストレージ制御部３００１と他方がストレージ制御部３０２１と接続されている。
【０４３１】
さらに、記憶デバイス３０９０〜３０９７は、二つのバックエンドスイッチ（４７４１、４７６１）のダウンストリームポート４８６０〜４８６７、４９６０〜４９６７と、二つのストレージ制御部３００１、３０２１からＮＴＢ４７０１、４７０２及びＮＴＢ４７１１、４７１２を介さずにアクセス可能に接続されている。
【０４３２】
ＮＴＢの実装によっては、ＮＴＢを構成する二つのエンドポイントを、それぞれ異なる仮想スイッチに属するように配置することができない場合がある。つまり、図３１〜３２に示した実施例１３に係るストレージシステムのバックエンドスイッチ３０４１、３０６１のように、ＮＴＢを二つの仮想スイッチにまたがるように配置できない。
【０４３３】
その替わり、実施例１６に係るストレージシステムは、仮想スイッチ毎に個別のＮＴＢを備える。そして、各仮想スイッチ内に配置したＮＴＢをリンクで接続することにより、実施例１３に係るストレージシステムのバックエンドスイッチと、同等の機能が実現できる。実施例１６に係るストレージシステムによれば、ＮＴＢを仮想スイッチ間にまたがるように配置できないＰＣＩｅスイッチをバックエンドスイッチに適用する場合でも、実施例１３〜１５に係るストレージシステムと同様に高可用なストレージシステムを実現できる。
【実施例１７】
【０４３４】
図５１〜５３を用いて実施例１７を説明する。図５１は、実施例１７に係るストレージシステムの構成例を示す。実施例１７に係るストレージシステムは、バックエンドスイッチの構成が、実施例１６に係るストレージシステムとは異なる。
【０４３５】
図５１において、実施例１７に係るストレージシステムは、二つのストレージ制御部３００１、３０２１及びドライブ筐体５１４０を備える。ドライブ筐体５１４０は、図４７のバックエンドスイッチ４７４１、４７６１に替えて、ＰＣＩｅスイッチ５１０１、５１０２、５１１１、５１１２を備える。実施例１７に係るストレージシステムの、その他の構成及びストレージシステムとしての動作は、実施例１６に係るストレージシステムと同様である。
【０４３６】
図５２は、ＰＣＩｅスイッチ５１０１、５１０２の内部構成例を示す。ＰＣＩｅスイッチ５１０１は、リンク３０１０に接続するアップストリームポート５２１１と、リンク３０８４Ａ〜３０８７Ａに接続するダウンストリームポート５２６４〜５２６７を含んで構成される。アップストリームポート５２１１はＰ２Ｐブリッジ５２３１と、ダウンストリームポート５２６４〜５２６７はＰ２Ｐブリッジ５２５４〜５２５７と、それぞれ接続される。Ｐ２Ｐブリッジ５２３１、５２３３及び５２５４〜５２５７は、内部バス５２３２に接続されている。
【０４３７】
ＮＴＢ５１０３は、二つのエンドポイント５２３４、５２３５を含む。エンドポイント５２３４はＰ２Ｐブリッジ５２３３に接続され、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５２３５はアップストリームポート５２０３に接続され、リンク５１０５、ＰＣＩｅスイッチ５１０２、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５２３４と５２３５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４３８】
ＰＣＩｅスイッチ５１０２は、リンク３０３１に接続するアップストリームポート５２２１と、リンク３０８０Ａ〜３０８３Ａに接続するダウンストリームポート５２６０〜５２６３を含んで構成される。アップストリームポート５２２１はＰ２Ｐブリッジ５２４１と、ダウンストリームポート５２６０〜５２６３はＰ２Ｐブリッジ５２５０〜５２５３と、それぞれ接続される。Ｐ２Ｐブリッジ５２４１、５２４３及び５２５０〜５２５３は、内部バス５２４２に接続されている。
【０４３９】
ＮＴＢ５１０４は、二つのエンドポイント５２４４、５２４５を含む。エンドポイント５２４４はＰ２Ｐブリッジ５２４３に接続され、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５２４５はアップストリームポート５２１３に接続され、リンク５１０５、ＰＣＩｅスイッチ５１０１、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５２４４と５２４５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４４０】
図５３は、ＰＣＩｅスイッチ５１１１、５１１２の内部構成例を示す。ＰＣＩｅスイッチ５１１１は、リンク３０３０に接続するアップストリームポート５３２２と、リンク３０８４Ｂ〜３０８７Ｂに接続するダウンストリームポート５３６４〜５３６７を含んで構成される。アップストリームポート５３２２はＰ２Ｐブリッジ５３４１と、ダウンストリームポート５３６４〜５３６７はＰ２Ｐブリッジ５３５４〜５３５７と、それぞれ接続される。Ｐ２Ｐブリッジ５３４１、５３４３及び５３５４〜５３５７は、内部バス５３４２に接続されている。
【０４４１】
ＮＴＢ５１１３は、二つのエンドポイント５３４４、５３４５を含む。エンドポイント５３４４はＰ２Ｐブリッジ５３４３に接続され、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５３４５はアップストリームポート５３１３に接続され、リンク５１１５、ＰＣＩｅスイッチ５１１２、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５３４４と５３４５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４４２】
ＰＣＩｅスイッチ５１１２は、リンク３０１１に接続するアップストリームポート５３１２と、リンク３０８０Ｂ〜３０８３Ｂに接続するダウンストリームポート５３６０〜５３６３を含んで構成される。アップストリームポート５３１２はＰ２Ｐブリッジ５３３１と、ダウンストリームポート５３６０〜５３６３はＰ２Ｐブリッジ５３５０〜５３５３と、それぞれ接続される。Ｐ２Ｐブリッジ５３３１、５３３３及び５３５０〜５３５３は、内部バス５３３２に接続されている。
【０４４３】
ＮＴＢ５１１４は、二つのエンドポイント５３３４、５３３５を含む。エンドポイント５３３４はＰ２Ｐブリッジ５３３３に接続され、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５３３５はアップストリームポート５３０３に接続され、リンク５１１５、ＰＣＩｅスイッチ５１１１、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５３３４と５３３５は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４４４】
実施例１７に係るストレージシステムの特徴をまとめると以下のようになる。実施例１７に係るストレージシステムは、二つのストレージ制御部３００１、３０２１と、それぞれが二つのＰＣＩｅポートを備える記憶デバイス３０９０〜３０９７を収容可能なドライブ筐体５１４０を含む。二つのストレージ制御部３００１、３０２１とドライブ筐体５１４０は、リンク３０１０、３０１１、３０３０、３０３１で接続されている。
【０４４５】
ドライブ筐体５１４０は、ＰＣＩｅスイッチ５１０１、５１０２、５１１１、５１１２を備える。ＰＣＩｅスイッチ５１０１、５１０２は、ＮＴＢ５１０３、５１０４及びリンク５１０５で接続されている。ＮＴＢ５１０３、５１０４は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。
【０４４６】
ＰＣＩｅスイッチ５１１１、５１１２は、ＮＴＢ５１１３、５１１４及びリンク５１１５で接続されている。ＰＣＩｅスイッチ５１０１、５１０２は、それぞれのアップストリームポートの一方がストレージ制御部３００１と、他方がストレージ制御部３０２１と接続されている。ＮＴＢ５１１３、５１１４は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。
【０４４７】
ＰＣＩｅスイッチ５１０１及び５１０２、または５１１１及び５１１２は、それぞれのアップストリームポートの一方がストレージ制御部３００１と、他方がストレージ制御部３０２１と接続されている。さらに、記憶デバイス３０９０〜３０９７は、四つのＰＣＩｅスイッチのダウンストリームポートの何れかと、二つのストレージ制御部３００１、３０２１からＮＴＢ５１０１、５１０２及びＮＴＢ５１１１、５１１２を介さずにアクセス可能に接続されている。
【０４４８】
実施例１７に係るストレージシステムによれば、仮想スイッチ機能を備えないＰＣＩｅスイッチをバックエンドスイッチに適用する場合でも、実施例１３〜１６に係るストレージシステムと同様に高可用なストレージシステムを実現できる。
【実施例１８】
【０４４９】
図５４〜５６を用いて実施例１８を説明する。図５４は、実施例１８に係るストレージシステムの構成例を示す。実施例１８に係るストレージシステムは、バックエンドスイッチ５４４１、５４６１の構成と、ストレージ制御部５４０１、５４２１とドライブ筐体５４４０間の接続と、バックエンドスイッチ５４４１、５４６１と記憶デバイス３０９０〜３０９９間の接続が、実施例１３〜１７に係るストレージシステムとは異なる。なお、図５４は、十の記憶デバイス３０９０〜３０９９を示すが、記憶デバイスの数は任意である。
【０４５０】
図５５は、バックエンドスイッチ５４４１の内部構成例を示す。仮想スイッチ５４４２は、リンク３０１０に接続するアップストリームポート５５１１と、リンク３０８３Ａ〜３０８５Ａに接続するダウンストリームポート５５６３〜５５６５を含んで構成される。アップストリームポート５５１１はＰ２Ｐブリッジ５５３１と、ダウンストリームポート５５６３〜５５６５はＰ２Ｐブリッジ５５５３〜５５５５と、それぞれ接続される。Ｐ２Ｐブリッジ５５３１、５５３３及び５５５３〜５５５５は、内部バス５５３２に接続されている。
【０４５１】
仮想スイッチ５４４３は、リンク３０３１に接続するアップストリームポート５５２１と、リンク３０８０Ａ〜３０８２Ａに接続するダウンストリームポート５５６０〜５５６２を含んで構成される。アップストリームポート５５２１はＰ２Ｐブリッジ５５４１と、ダウンストリームポート５５６０〜５５６２はＰ２Ｐブリッジ５５５０〜５５５２と、それぞれ接続される。Ｐ２Ｐブリッジ５５４１、５５４３及び５５５０〜５５５２は、内部バス５５４２に接続されている。
【０４５２】
ＮＴＢ５４４４は、二つのエンドポイント５５３４、５５４４を含む。エンドポイント５５３４はＰ２Ｐブリッジ５５３３に接続され、リンク３０１０を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５５４４はＰ２Ｐブリッジ５５４３に接続され、リンク３０３１を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５５３４と５５４４は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４５３】
仮想スイッチ５４５１は、リンク５４１０を介してプロセッサ３００３のルートポート５４１３に接続するアップストリームポート５５７１と、リンク３０８６Ａ〜３０８９Ａに接続するダウンストリームポート５５６６〜５５６９を含んで構成される。アップストリームポート５５７１はＰ２Ｐブリッジ５５８１と、ダウンストリームポート５５６６〜５５６９はＰ２Ｐブリッジ５５５６〜５５５９と、それぞれ接続される。Ｐ２Ｐブリッジ５５８１及び５５５６〜５５５９は、内部バス５５９１に接続されている。
【０４５４】
図５６は、バックエンドスイッチ５４６１の内部構成例を示す。仮想スイッチ５４６２は、リンク３０３０に接続するアップストリームポート５６２２と、リンク３０８３Ｂ〜３０８５Ｂに接続するダウンストリームポート５６６３〜５６６５を含んで構成される。アップストリームポート５６２２はＰ２Ｐブリッジ５６４１と、ダウンストリームポート５６６３〜５６６５はＰ２Ｐブリッジ５６５３〜５６５５と、それぞれ接続される。Ｐ２Ｐブリッジ５６４１、５６４３及び５６５３〜５６５５は、内部バス５６４２に接続されている。
【０４５５】
仮想スイッチ５４６３は、リンク３０１１に接続するアップストリームポート５６１２と、リンク３０８０Ｂ〜３０８２Ｂに接続するダウンストリームポート５６６０〜５６６２を含んで構成される。アップストリームポート５６１２はＰ２Ｐブリッジ５６３１と、ダウンストリームポート５６６０〜５６６２はＰ２Ｐブリッジ５６５０〜５６５２と、それぞれ接続される。Ｐ２Ｐブリッジ５６３１、５６３３及び５６５０〜５６５２は、内部バス５６３２に接続されている。
【０４５６】
ＮＴＢ５４６４は、二つのエンドポイント５６３４、５６４４を含む。エンドポイント５６３４はＰ２Ｐブリッジ５６３３に接続され、リンク３０１１を介して、プロセッサ３００３からアクセス可能に設定される。エンドポイント５６４４はＰ２Ｐブリッジ５６４３に接続され、リンク３０３０を介して、プロセッサ３０２３からアクセス可能に設定される。エンドポイント５６３４、５６４４は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０４５７】
仮想スイッチ５４３１は、リンク５４１１を介してプロセッサ３０２３のルートポート５４２３に接続するアップストリームポート５６７１と、リンク３０８６Ｂ〜３０８９Ｂに接続するダウンストリームポート５６６６〜５６６９を含んで構成される。アップストリームポート５６７１はＰ２Ｐブリッジ５６８１と、ダウンストリームポート５６６６〜５６６９はＰ２Ｐブリッジ５６５６〜５６５９と、それぞれ接続される。Ｐ２Ｐブリッジ５６８１及び５６５６〜５６５９は、内部バス５６９１に接続されている。
【０４５８】
実施例１８に係るストレージシステムの特徴をまとめると以下のようになる。実施例１８に係るストレージシステムは、二つのストレージ制御部５４０１、５４２１と、それぞれが二つのＰＣＩｅポートを備える記憶デバイス３０９０〜３０９９を収容可能なドライブ筐体５４４０を含む。
【０４５９】
二つのストレージ制御部５４０１、５４２１とドライブ筐体５４４０は、リンク３０１０、３０１１、３０３０、３０３１、５４１０、５４１１で接続されている。ドライブ筐体５４４０は、仮想スイッチ５４４２、５４４３をＮＴＢ５４４４で接続したバックエンドスイッチ５４４１と、仮想スイッチ５４６２、５４６３をＮＴＢ５４６４で接続したバックエンドスイッチ５４６１を備える。
【０４６０】
バックエンドスイッチ５４４１、５４６１は、それぞれの二つのアップストリームポートの一方をストレージ制御部５４０１と、他方をストレージ制御部５４２１と接続されている。さらに、バックエンドスイッチ５４４１はアップストリームポートをストレージ制御部５４０１と接続した仮想スイッチ５４５１を備える。
【０４６１】
また、バックエンドスイッチ５４６１はアップストリームポートをストレージ制御部５４２１と接続した仮想スイッチ５４３１を備える。さらにまた、記憶デバイス３０９０〜３０９９は、二つのバックエンドスイッチのダウンストリームポートと、二つのストレージ制御部５４０１、５４２１からＮＴＢ５４４４及び５４６４を介さずにアクセス可能に接続されている。
【０４６２】
実施例１３〜１７に係るストレージシステムは、ストレージ制御部と記憶デバイスとの間のデータ転送と二つのストレージ制御部間のデータ転送が、ストレージ制御部とバックエンドスイッチとの間のリンクの帯域を共有する。多数の記憶デバイスに対するアクセスを同時に行う場合は、これらリンクの帯域が性能ネック部位になる恐れがある。
【０４６３】
実施例１８に係るストレージシステムは、ストレージ制御部間データ転送経路とは独立した仮想スイッチをバックエンドスイッチ内に備えている。この仮想スイッチでストレージ制御部と記憶デバイスを接続することにより、実施例１８に係るストレージシステムは、より多くの記憶デバイスを接続可能になり、また、上記共有するリンク帯域も少なくできる。
【実施例１９】
【０４６４】
図５７〜５９を用いて実施例１９に係るストレージシステムを説明する。実施例１９に係るストレージシステムの構成は、実施例１３に係るストレージシステムと同様である。
【０４６５】
同じＰＣＩｅツリーに属する、言い換えれば同じポートグループ（図３７参照）に属する、記憶デバイスの読み書きは、ストレージ制御部とバックエンドスイッチ間のリンク帯域を共有する。同じポートグループに属する複数の記憶ドライブのポートにアクセスが集中した場合に、ストレージシステムの性能が、ストレージ制御部とバックエンドスイッチ間のリンクの帯域ネックになる場合がある。
【０４６６】
実施例１９に係るストレージシステムは、一つのポートグループに属する複数の記憶デバイスのポートに対する読み書きを、ストレージ制御部とバックエンドスイッチの間の複数のリンクを使って行う。つまり、複数のリンクの間で負荷分散を行う。ストレージ制御部は、当該ストレージ制御部とバックエンドスイッチそれぞれとのリンクの使用帯域を監視する。ストレージ制御部は、例えば、各リンクの使用帯域値と規定値とを比較して、各リンクの帯域の不足を判定できる。異なるストレージ制御部は、リンクの使用帯域の情報を共有してもよい。
【０４６７】
図５７を用いて、実施例１９に係るストレージシステムにおける、負荷分散を行わない場合の、記憶デバイスからの読出しに対するデータ転送経路の一例を説明する。以下、記憶デバイスからの読出しについて説明するが、書込みについても同様である。
【０４６８】
ストレージ制御部３００１は、メモリ３００２内に、記憶デバイス３０９７を制御するためのサブミッションキュー３６０７とコンプリーションキュー３６１７を備える。ストレージ制御部３００１は、データ転送経路４１０３を使って、記憶デバイス３０９７とメモリ３００２との間のデータ転送を行う。データ転送経路４１０３は、プロセッサ３００３のルートポート３００７、リンク３０１０、仮想スイッチ３０４２、リンク３０８７Ａを通り、記憶デバイス３０９７のポート３０９７Ａに至る。また、ストレージ制御部３００１は、記憶デバイス３０９７から読出したデータを、メモリ３００２内のバッファ４１０１に格納する。
【０４６９】
ストレージ制御部３００１は、メモリ３００２内に、記憶デバイス３０９６を制御するためのサブミッションキュー３６０６とコンプリーションキュー３６１６を備える。ストレージ制御部３００１は、データ転送経路５７０５を使って、記憶デバイス３０９６とメモリ３００２との間のデータ転送を行う。データ転送経路５７０５は、プロセッサ３００３のルートポート３００７、リンク３０１０、仮想スイッチ３０４２、リンク３０８６Ａを通り、記憶デバイス３０９６のポート３０９６Ａに至る。また、ストレージ制御部３００１は、記憶デバイス３０９６から読出したデータを、メモリ３００２内のバッファ５７０３に格納する。
【０４７０】
ポートグループＧ１１（図３７参照）に属する他の記憶デバイスのポートからの読出しデータ転送経路も、同様である。ポートグループＧ１１に属する記憶デバイスのポートからの読出しは、リンク３０１０の帯域を共有する。
【０４７１】
ストレージ制御部３０２１は、メモリ３０２２内に、記憶デバイス３０９６を制御するためのサブミッションキュー５７１６とコンプリーションキュー５７２６を備える。ストレージ制御部３０２１は、転送経路５７０６を使って、記憶デバイス３０９６とメモリ３０２２との間のデータ転送を行う。転送経路５７０６は、プロセッサ３０２３のルートポート３０２７、リンク３０３０、仮想スイッチ３０６２、リンク３０８６Ｂを通り、記憶デバイス３０９６のポート３０９６Ｂに至る。
【０４７２】
ポートグループＧ２２（図３７参照）に属する他の記憶デバイスのポートからの読出しデータ転送経路も、同様である。ポートグループＧ２２に属する記憶デバイスのポートからの読出しは、リンク３０３０の帯域を共有する。
【０４７３】
同様に、ポートグループＧ１２に属する記憶デバイスのポートからの読出しは、リンク３０１１の帯域を共有する。ポートグループＧ２１に属する記憶デバイスのポートからの読出しは、リンク３０３１の帯域を共有する。
【０４７４】
図５８を参照して、実施例１９に係るストレージシステムにおける負荷分散動作を説明する。ポートグループＧ１１に属する複数の記憶デバイスのポートからの読出しが同時に発生し、リンク３０１０の帯域が不足している状態を想定する。それに対して、ポートグループＧ１２に属する複数の記憶デバイスのポートに対する読み書きがあまり発生せず、リンク３０１１の帯域に余裕があるとする。
【０４７５】
ストレージ制御部３００１は、リンク３０１０の帯域が不足している場合に、ポートグループＧ１１に属する記憶デバイスからの読出しの一部を、リンク３０１１を使って行う。例として、リンク３０１０を介して行っていた記憶デバイス３０９６のポート３０９６Ａからの読出しを、リンク３０１１を介してポート３０９６Ｂから行う場合の、実施例１９に係るストレージシステムの動作を説明する。
【０４７６】
ストレージ制御部３０２１は、メモリ３０２２内に、記憶デバイス３０９６を制御するためのサブミッションキュー５８０６とコンプリーションキュー５８１６を備える。サブミッションキュー５８０６とコンプリーションキュー５８１６は、ストレージ制御部３００１から依頼される代替処理のために使用されるキューである。
【０４７７】
記憶デバイス３０９６は、サブミッションキュー５８０６内エントリに含まれるコマンドを実行した結果として読み出したデータを、データ転送経路５８０７を使って転送する。データ転送経路５８０７は、リンク３０８６Ｂ、仮想スイッチ３０６２、ＮＴＢ３０６４、仮想スイッチ３０６３、リンク３０１１、プロセッサ３００３内ルートポート３００６を通る。
【０４７８】
図５９を参照して、負荷分散動作時の記憶デバイスからの読出しのフローチャートを説明する。ステップ５９０１において、ストレージ制御部３００１は、ストレージ制御部３０２１に対して、データ転送経路３４０１経由またはデータ転送経路３５０２経由で、記憶デバイス３９０６からのデータ読出しを依頼する。
【０４７９】
ステップ５９０２において、上記依頼を受けたストレージ制御部３０２１は、データ転送経路５７０６経由で記憶デバイス３９０６からのデータ読出しを実行する。具体的には、プロセッサ３０２３が、サブミッションキュー５８０６に、記憶デバイス３０９６からの読出し命令を含むエントリを加える。読出しデータの転送先はメモリ３００２内のバッファ５７０３とする。
【０４８０】
サブミッションキュー５８０６から読出し命令を取得した記憶デバイス３０９６は、データ転送経路５８０７経由で、要求されたデータをバッファ５７０３に送信する。バッファ５７０３へのデータ転送完了後、記憶デバイス３０９６は、コンプリーションをコンプリーションキュー５８１６に加える。
【０４８１】
なお、プロセッサ３００３が、データ転送経路３４０１またはデータ転送経路３５０２を介して、サブミッションキュー５８０６へ、記憶デバイス３０９６からの読出し命令を含むエントリを直接追加するようにしてもよい。
【０４８２】
ステップ５９０３において、上記コンプリーションを確認したストレージ制御部３０２１は、読出しデータの転送完了をストレージ制御部３００１に通知する。ステップ５９０４において、ストレージ制御部３００１は、メモリ３００２内のバッファ５７０３に転送された読出しデータを、上位装置へ送信する。
【０４８３】
以上説明したように、実施例１９に係るストレージシステムは、同じポートグループに属する複数の記憶デバイスのポートに対する読み書きの負荷を、ストレージ制御部とバックエンドスイッチ間の複数のリンク間で分散できる。
【０４８４】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０４８５】
また、上記の各構成・機能・処理部等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０４８６】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2018190368.tif 000003
【図２】
2018190368.tif 000004
【図３Ａ】
2018190368.tif 000005
【図３Ｂ】
2018190368.tif 000006
【図３Ｃ】
2018190368.tif 000007
【図４Ａ】
2018190368.tif 000008
【図４Ｂ】
2018190368.tif 000009
【図５Ａ】
2018190368.tif 000010
【図５Ｂ】
2018190368.tif 000011
【図６Ａ】
2018190368.tif 000012
【図６Ｂ】
2018190368.tif 000013
【図７Ａ】
2018190368.tif 000014
【図７Ｂ】
2018190368.tif 000015
【図８Ａ】
2018190368.tif 000016
【図８Ｂ】
2018190368.tif 000017
【図９Ａ】
2018190368.tif 000018
【図９Ｂ】
2018190368.tif 000019
【図１０】
2018190368.tif 000020
【図１１】
2018190368.tif 000021
【図１２】
2018190368.tif 000022
【図１３Ａ】
2018190368.tif 000023
【図１３Ｂ】
2018190368.tif 000024
【図１４】
2018190368.tif 000025
【図１５】
2018190368.tif 000026
【図１６】
2018190368.tif 000027
【図１７】
2018190368.tif 000028
【図１８】
2018190368.tif 000029
【図１９】
2018190368.tif 000030
【図２０】
2018190368.tif 000031
【図２１】
2018190368.tif 000032
【図２２】
2018190368.tif 000033
【図２３】
2018190368.tif 000034
【図２４】
2018190368.tif 000035
【図２５】
2018190368.tif 000036
【図２６】
2018190368.tif 000037
【図２７】
2018190368.tif 000038
【図２８】
2018190368.tif 000039
【図２９】
2018190368.tif 000040
【図３０】
2018190368.tif 000041
【図３１】
2018190368.tif 000042
【図３２】
2018190368.tif 000043
【図３３】
2018190368.tif 000044
【図３４】
2018190368.tif 000045
【図３５】
2018190368.tif 000046
【図３６】
2018190368.tif 000047
【図３７】
2018190368.tif 000048
【図３８】
2018190368.tif 000049
【図３９】
2018190368.tif 000050
【図４０】
2018190368.tif 000051
【図４１】
2018190368.tif 000052
【図４２】
2018190368.tif 000053
【図４３】
2018190368.tif 000054
【図４４】
2018190368.tif 000055
【図４５】
2018190368.tif 000056
【図４６】
2018190368.tif 000057
【図４７】
2018190368.tif 000058
【図４８】
2018190368.tif 000059
【図４９】
2018190368.tif 000060
【図５０】
2018190368.tif 000061
【図５１】
2018190368.tif 000062
【図５２】
2018190368.tif 000063
【図５３】
2018190368.tif 000064
【図５４】
2018190368.tif 000065
【図５５】
2018190368.tif 000066
【図５６】
2018190368.tif 000067
【図５７】
2018190368.tif 000068
【図５８】
2018190368.tif 000069
【図５９】
2018190368.tif 000070