(57)【要約】【課題】ホストから同じＣＭに対してライト命令が集中した場合であっても、ホストのライト性能の低下を抑制する。【解決手段】ストレージ装置９は、複数のＣＭを、ＰＣＩｅスイッチ７を介して接続する。ＣＭ１では、メモリコントローラ１２内のキュー１２ａの状態を判定するＰＣＩｅスイッチ１６を有し、メモリコントローラ１２内のキュー１２ａが所定の状態であると判定された場合、１つの例として、ＰＣＩｅスイッチ１６が、所定の状態である旨を示す状態通知をホスト８と接続するＣＭ４へ直接出力する。ＣＭ４では、ＣＰＵ４８が、ホスト８からＣＭ１が管轄するディスク５へのデータの書込み命令を受信した場合、ＣＭ１から出力された状態通知が受信済みか否かを判定し、ＣＭ１から出力された状態通知が受信済みであると判定された場合、書込み命令のデータを他のＣＭに退避し、データの退避が完了した後、ホスト８へ書き込みが完了したことを通知する。【選択図】図１
2014010713.tif 000002
【特許請求の範囲】
【請求項１】
データの書き込みを制御するメモリコントローラと、
前記メモリコントローラにより管理されているキューの状態を判定する第１の判定部と、
前記第１の判定部によって前記メモリコントローラ内のキューが所定の状態であると判定された場合、前記所定の状態である旨を示す状態通知を出力する第１の通知部と、を有する第１の制御装置と、
上位装置から前記第１の制御装置が管轄するストレージへのデータの書込み命令を受信した場合、前記第１の制御装置から出力された前記状態通知が受信済みか否かを判定する第２の判定部と、
前記第２の判定部によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを他の制御装置に退避する退避部と、
前記退避部によって前記書込み命令のデータの退避が完了した後、前記上位装置へ書き込みが完了した旨を示す完了通知を出力する第２の通知部と、を有する第２の制御装置と、
を備えることを特徴とするストレージ装置。
【請求項２】
前記第１の通知部は、前記状態通知を前記第２の制御装置へ直接出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記第１の通知部は、第１の判定部からの前記状態通知を受けて、前記状態通知を、前記入出力インタフェースを介して前記第２の制御装置へ出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記第１の通知部は、前記状態通知を第１の判定部に問い合わせることによって検出し、検出した前記状態通知を、前記入出力インタフェースを介して前記第２の制御装置へ出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記第２の判定部は、さらに、自制御装置と冗長化された制御装置から出力された前記状態通知が受信済みか否かを判定し、
前記退避部は、前記第２の判定部によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定され、且つ自制御装置と冗長化された制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを自制御装置と冗長化された制御装置と異なる制御装置であって前記状態通知が受信されなかった制御装置に退避する
ことを特徴とする請求項１から請求項４のいずれか１つに記載のストレージ装置。
【請求項６】
前記退避部は、前記第１の制御装置と冗長化された制御装置に退避する
ことを特徴とする請求項５に記載のストレージ装置。
【請求項７】
第１の制御装置と第２の制御装置を備えるストレージ装置の書込完了通知方法において、
前記第１の制御装置が、
データの書き込みを制御するメモリコントローラにより管理されているキューの状態を判定し、
当該判定する処理によって前記メモリコントローラ内のキューが所定の状態であると判定された場合、前記所定の状態である旨を示す状態通知を前記第２の制御装置へ出力し、
前記第２の制御装置が、
上位装置から前記第１の制御装置が管轄するストレージへのデータの書込み命令を受信した場合、前記第１の制御装置から出力された前記状態通知が受信済みか否かを判定し、
当該判定する処理によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを他の制御装置に退避し、
当該退避する処理によって前記書込み命令のデータの退避が完了した後、前記上位装置へ書き込みが完了した旨を示す完了通知を出力する
各処理を実行することを特徴とする書込完了通知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置などに関する。
【背景技術】
【０００２】
近年、入出力の高性能化に対する需要が増大し、ＰＣＩＥｘｐｒｅｓｓ（以下、「ＰＣＩｅ」と記載する場合がある）などの高速な入出力インタフェースが利用されている。ストレージ装置でも、ディスクなどのストレージを制御するコントローラモジュール（以下、「ＣＭ」と記載）の内部でＰＣＩｅ仕様のスイッチが設けられている。図６を用いて、ＰＣＩｅスイッチを設けた従来技術に係るストレージ装置について説明する。
【０００３】
図６は、従来技術に係るストレージ装置の構成の一例を示す図である。図６に示すように、ストレージ装置９００は、ＣＭ＃０およびＣＭ＃１が冗長化され、ＣＭ＃２およびＣＭ＃３が冗長化され、ＣＭ＃０〜ＣＭ＃３は、ＰＣＩｅスイッチで接続されている。そして、ＣＭ＃３がホストと接続されている。ＣＭ＃０〜ＣＭ＃３は、ＣＰＵ９１０とＤＩＭＭ（Dual  Inline  Memory  Module）９２０とメモリコントローラ９３０とを有する。さらに、ＣＭ＃０〜ＣＭ＃３は、ＣＡ（Channel  Adapter）９４０とＤＩ（Disk  Interface）９５０とＤＭＡ（Direct  Memory  Access）コントローラ９６０とＰＣＩｅスイッチ９７０とを有する。ＤＩＭＭ９２０は、メモリモジュールである。メモリコントローラ９３０は、ＤＩＭＭ９２０を制御するコントローラである。ＣＡ９４０は、ホストとのインタフェースである。ＤＩ９５０は、ディスクとのインタフェースである。ＤＭＡコントローラ９６０は、ＣＭ間のＤＭＡにおけるコントローラである。ＤＭＡとは、ＣＰＵ９１０を介さないで他のＣＭとＤＩＭＭ９２０との間で直接データを転送するデータ転送方式である。ＤＭＡによるＤＩＭＭ９２０へのデータの書き込みは、「ＤＭＡライト」と呼ばれる。
【０００４】
ＰＣＩｅスイッチ９７０は、入出力デバイスとしてメモリコントローラ９３０、ＣＡ９４０、ＤＩ９５０およびＤＭＡコントローラ９６０と接続する。そして、ＰＣＩｅスイッチ９７０は、内部に入出力デバイス毎のキューを持ち、キューに蓄積されたパケットを順次処理する。そして、メモリコントローラ９３０側にも、ＰＣＩｅスイッチ９７０から出力されるパケットを蓄積するキュー９３１を持ち、ＰＣＩｅスイッチ９７０が、このキュー９３１が満杯になっているかどうかをキューにおける残クレジット数で判断する。
【０００５】
ここで、ホストからＣＭ＃０およびＣＭ＃１が管轄するディスク領域へのライト命令が発生した場合、処理の流れは以下のようになる。まず、ホストは、接続するＣＭ＃３のＣＡ９４０へライト命令を出力する。次に、ＣＭ＃３のＣＡ９４０は、ＤＩＭＭ９２０へＤＭＡライトを行う。そして、ＣＭ＃３のＤＭＡコントローラ９６０は、ＣＭ＃０およびＣＭ＃１のメモリ空間へＤＭＡライトを行う。
【０００６】
続いて、ＣＭ＃０およびＣＭ＃１では、ＤＭＡコントローラ９６０が、ＰＣＩｅスイッチ９７０を介してＤＩＭＭ９２０へのＤＭＡライトを試みる。このとき、ＰＣＩｅスイッチ９７０は、メモリコントローラ９３０側のキュー９３１における残クレジット数がゼロでなければ、ＤＭＡライト命令のパケットを滞りなくメモリコントローラ９３０側へ送信する。そして、メモリコントローラ９３０は、受信したパケットが示すＤＭＡライト命令に従いメモリ空間にライトする。
【０００７】
そして、ＣＭ＃０およびＣＭ＃１では、ＤＭＡコントローラ９６０が、ＣＰＵ９１０に対してＤＭＡライトの完了割り込みを行い、ＣＰＵ９１０がＣＭ＃３のＣＡ９４０にＤＭＡライトの完了を通知する。そして、ＣＭ＃３では、ＣＡ９４０がホストに対してライト完了を通知する。なお、ＰＣＩｅスイッチ９７０は、残クレジット数がゼロであれば、ＤＭＡライト命令のパケットをメモリコントローラ９３０に送信しないで、クレジットに空きがでるまで待つことになる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−９９８０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、ホストから同じＣＭに対してライト命令が集中した場合、ホストのライト性能が低下するという問題がある。すなわち、ライト命令が集中したＣＭのＰＣＩｅスイッチは、残クレジット数がゼロになると、ＤＭＡライト命令のパケットをメモリコントローラに送信しないで、クレジットに空きができるまで待つ。この結果、ホストは、クレジットに空きが発生し、ＤＭＡライトが完了するまで、ライト命令の完了を受けることができない。したがって、ホストのライト性能が低下してしまう。
【００１０】
１つの側面では、本発明は、ホストから同じＣＭに対してライト命令が集中した場合であっても、ホストのライト性能の低下を抑制することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するストレージ装置は、１つの態様において、第１の制御装置と第２の制御装置とを有する。第１の制御装置は、データの書き込みを制御するメモリコントローラと、前記メモリコントローラにより管理されているキューの状態を判定する第１の判定部と、前記第１の判定部によって前記メモリコントローラ内のキューが所定の状態であると判定された場合、前記所定の状態である旨を示す状態通知を出力する第１の通知部と、を有する。第２の制御装置は、上位装置から前記第１の制御装置が管轄するストレージへのデータの書込み命令を受信した場合、前記第１の制御装置から出力された前記状態通知が受信済みか否かを判定する第２の判定部と、前記第２の判定部によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを他の制御装置に退避する退避部と、前記退避部によって前記書込み命令のデータの退避が完了した後、前記上位装置へ書き込みが完了した旨を示す完了通知を出力する第２の通知部と、を有する。
【発明の効果】
【００１２】
本願の開示するストレージ装置の１つの態様によれば、ホストから同じＣＭに対してライト命令が集中した場合であっても、ホストのライト性能の低下を抑制できる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。
【図２】図２は、実施例１に係るストレージ装置のＣＭ間のシーケンスを示す図である。
【図３】図３は、実施例２に係るストレージ装置のハードウェア構成を示す図である。
【図４】図４は、実施例３に係るストレージ装置のハードウェア構成を示す図である。
【図５Ａ】図５Ａは、実施例３に係るストレージ装置のＣＭ間のシーケンスを示す図（１）である。
【図５Ｂ】図５Ｂは、実施例３に係るストレージ装置のＣＭ間のシーケンスを示す図（２）である。
【図５Ｃ】図５Ｃは、実施例３に係るストレージ装置のＣＭ間のシーケンスを示す図（３）である。
【図６】図６は、従来のストレージ装置の構成を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するストレージ装置および書込完了通知方法の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。以下では、ストレージ装置に本発明を適用した場合について説明する。
【実施例１】
【００１５】
［ストレージ装置の構成］
図１は、実施例１に係るストレージ装置のハードウェア構成を示す図である。図１に示すように、ストレージ装置９は、複数のＣＭ（Controller  Module）１〜４とディスク５、６とＰＣＩｅスイッチ７とを有する。ＣＭ１〜４は、ＰＣＩｅスイッチ７を介して互いに接続されている。ＣＭ１、２は、ディスク５と接続し、データを冗長化する。ＣＭ３、４は、ディスク６と接続し、データを冗長化する。さらに、ＣＭ４は、サーバなどのホストコンピュータを示すホスト８と接続する。以下では、ＣＭ４が、ホスト８からＣＭ１、２が管轄するディスク５へのデータの書き込み命令を受け取る場合の動作を中心に説明する。なお、ＣＭ４が、「第２の制御装置」の一例であり、ＣＭ１、２が、「第１の制御装置」の一例である。
【００１６】
ＣＭ１は、ＤＩＭＭ１１と、メモリコントローラ１２と、ＣＡ１３と、ＤＩ１４と、ＤＭＡコントローラ１５と、ＰＣＩｅスイッチ１６と、ＰＣＨ（Platform  Controller  Hub）１７と、ＣＰＵ１８とを有する。なお、ＣＭ２は、ＣＭ１と同様の構成であるため、その説明を省略する。
【００１７】
ＤＩＭＭ１１は、メモリモジュールである。メモリコントローラ１２は、キューを用いてＤＩＭＭ１１へのデータの書き込みを制御する。メモリコントローラ１２は、内部にキュー１２ａを持ち、後述するＰＣＩｅスイッチ１６から出力されるパケットを受け取り、キュー１２ａに蓄積する。そして、メモリコントローラ１２は、キュー１２ａに蓄積されたパケットを順次ＤＩＭＭ１１に書き込む。なお、メモリコントローラ１２は、キュー１２ａが満杯になると、キュー１２ａに空きができるまでＰＣＩｅスイッチ１６からのパケットを受け付けることができない。キュー１２ａが満杯になる例として、ホスト８からの書き込み命令が集中した場合が挙げられる。
【００１８】
ＣＡ１３は、ホスト８とのインタフェースである。ＤＩ１４は、ディスク５とのインタフェースである。
【００１９】
ＤＭＡコントローラ１５は、ＣＭ間のＤＭＡにおけるコントローラである。ＤＭＡとは、ＣＰＵを介さないで他のＣＭとＤＩＭＭ１１との間で直接データを転送するデータ転送方式のことである。ここで、ＤＭＡによるＤＩＭＭ１１へのデータの書き込みは、「ＤＭＡライト」という。例えば、ＤＭＡコントローラ１５は、ＣＭ４からデータの書き込み命令としてＤＭＡライト命令を受け取ると、ＰＣＩｅスイッチ１６を介してＤＩＭＭ１１へのＤＭＡライトを試みる。そして、ＤＭＡコントローラ１５は、ＤＩＭＭ１１へのＤＭＡライトが完了すると、後述するＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。
【００２０】
ＰＣＩｅスイッチ１６は、ＰＣＩｅ仕様の入出力インタフェースを示すスイッチである。ＰＣＩｅスイッチ１６は、入出力デバイスとしてメモリコントローラ１２、ＣＡ１３、ＤＩ１４およびＤＭＡコントローラ１５と接続する。そして、ＰＣＩｅスイッチ１６は、内部に入出力デバイス毎のキューを持ち、キューに蓄積されたパケットを順次処理する。例えば、ＰＣＩｅスイッチ１６は、メモリコントローラ１２へ出力するパケットを蓄積するキュー１６ａを持つ。また、ＰＣＩｅスイッチ１６は、ＣＡ１３からのパケットを蓄積するキュー１６ｂを持つ。また、ＰＣＩｅスイッチ１６は、ＤＩ１４からのパケットを蓄積するキュー１６ｃを持つ。さらに、ＰＣＩｅスイッチ１６は、ＤＭＡ１５からのパケットを蓄積するキュー１６ｄを持つ。
【００２１】
また、ＰＣＩｅスイッチ１６は、メモリコントローラ１２内のキュー１２ａが満杯であるか否かを判定する。そして、ＰＣＩｅスイッチ１６は、メモリコントローラ１２内のキュー１２ａが満杯であると判定した場合、満杯である旨を示す信号（例えば「アラート信号」という）を他のＣＭへ直接出力する。これにより、ＰＣＩｅスイッチ１６は、ＤＭＡライトを行うＣＭ４に対して、メモリコントローラ１２内のキュー１２ａが満杯であることを容易に知らせることができる。このＰＣＩｅスイッチ１６が、「第１の判定部」、「第１の通知部」の一例である。なお、ＰＣＩｅスイッチ１６は、メモリコントローラ１２内のキュー１２ａが満杯であるか否かを、メモリコントローラ１２内のキュー１２ａにおける空きのクレジット数で判定できる。
【００２２】
ＰＣＨ１７は、割り込みコントローラや周辺機器との接続インタフェースを有するチップである。
【００２３】
ＣＰＵ１８は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。また、ＣＰＵ１８は、割り込みを検出し、検出した割り込みに応じて種々の処理を実行する。例えば、ＣＰＵ１８は、ＤＭＡコントローラ１５からのＤＭＡライトの完了割り込みを検出すると、ＣＭ４に対してＤＭＡライトが完了した旨を通知する。
【００２４】
ＣＭ４は、ＤＩＭＭ４１と、メモリコントローラ４２と、ＣＡ４３と、ＤＩ４４と、ＤＭＡコントローラ４５と、ＰＣＩｅスイッチ４６と、ＰＣＨ４７と、ＣＰＵ４８とを有する。なお、ＣＭ３は、ＣＭ４と同様の構成であるため、その説明を省略する。
【００２５】
ＤＩＭＭ４１は、メモリモジュールである。メモリコントローラ４２は、キューを用いてＤＩＭＭ４１へのデータの書き込みを制御する。
【００２６】
ＣＡ４３は、ホスト８とのインタフェースである。例えば、ＣＡ４３は、ホスト８からＣＭ１、２が管轄するディスク５へのデータの書き込み命令を受け取ると、メモリコントローラ４２を介してＤＩＭＭ４１へデータをＤＭＡライトする。すなわち、ＣＡ４３は、ＤＭＡによるＤＩＭＭ４１へのデータの書き込みを行う。ＣＡ４３がＤＩＭＭ４１へデータの書き込みをするのは、書き込み命令のデータを一時的に退避するためである。
【００２７】
ＤＩ４４は、ディスク６とのインタフェースである。
【００２８】
ＤＭＡコントローラ４５は、ＣＭ間のＤＭＡにおけるコントローラである。例えば、ＤＭＡコントローラ４５は、データの書き込み命令のあったＣＭ１およびＣＭ２のメモリ空間に対してＤＭＡライトを行う。
【００２９】
ＰＣＩｅスイッチ４６は、入出力デバイスとしてメモリコントローラ４２、ＣＡ４３、ＤＩ４４およびＤＭＡコントローラ４５と接続する。そして、ＰＣＩｅスイッチ４６は、図示しないが内部に入出力デバイス毎のキューを持ち、キューに蓄積されたパケットを順次処理する。
【００３０】
ＰＣＨ４７は、割り込みコントローラや周辺機器との接続インタフェースを有するチップである。ＰＣＨ４７は、他のＣＭからアラート信号を入力すると、後述するＣＰＵ４８に対して、当該ＣＭからアラート信号の入力があったことを示す割り込みを行う。
【００３１】
ＣＰＵ４８は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。また、ＣＰＵ４８は、割り込みを検出し、検出した割り込みに応じて種々の処理を実行する。例えば、ＣＰＵ４８は、ホスト８からＣＭ１およびＣＭ２へのデータの書き込み命令が受け取られた場合、ＣＭ１またはＣＭ２からアラート信号が通知されたか否かを判定する。ＣＭ１またはＣＭ２からアラート信号が通知されたか否かは、ＰＣＨ４７からの割り込みが検出されたか否かで判定される。そして、ＣＰＵ４８は、ＣＭ１またはＣＭ２からアラート信号が通知されたと判定した場合、書き込み命令のデータを自ＣＭ４と冗長化されたＣＭ３へ退避する。これは、自ＣＭのＤＩＭＭ４１にデータを一時的に格納しているが、自ＣＭの万一の故障に備えてさらにデータを退避しておくためである。そして、ＣＰＵ４８は、ＣＭ３からデータの退避が完了した旨を受け取ると、ＣＡ４３を介してホスト８へデータの書き込みが完了したことを通知する。これにより、ＣＭ１またはＣＭ２からアラート信号が通知されていても、ＣＭ４は、ホスト８に対してデータの書き込みが完了したことを通知できるので、ホスト８のライト性能の低下を抑制できる。なお、ＣＰＵ４８が、「第２の判定部」、「退避部」、「第２の通知部」の一例である。
【００３２】
また、ＣＰＵ４８は、ＣＭ３からデータの退避が完了した旨を受け取ると、ＣＭ１およびＣＭ２からアラート信号が通知されないと判定した場合に、ＣＭ１およびＣＭ２に対してＤＭＡライトを行う。ＤＭＡライトは、ＤＭＡコントローラ４５を介して行われる。そして、ＣＰＵ４８は、ＣＭ１およびＣＭ２からＤＭＡライトの完了の通知を受け取ると、退避したデータを破棄する。すなわち、ＣＰＵ４８は、自ＣＭのＤＩＭＭ４１に記憶したデータおよびＣＭ３に退避したデータを破棄する。
【００３３】
なお、上記説明では、ＣＭ４は、ホスト８からＣＭ１およびＣＭ２へのデータの書き込み命令を受け取った際、ＣＭ１またはＣＭ２からアラート信号が入力された場合の動作について説明した。しかしながら、ＣＭ４は、ＣＭ１およびＣＭ２からアラート信号が入力されない場合もある。かかる場合は、ＣＭ４では、ＣＰＵ４８が、データを退避しないで、ＣＭ１およびＣＭ２に対してＤＭＡライトを行う。そして、ＣＭ４では、ＣＰＵ４８が、ＣＭ１およびＣＭ２からＤＭＡライトの完了の通知を受け取ると、ＣＡ４３を介してホスト８へデータの書き込みが完了したことを通知する。かかる場合には、ＣＭ４は、ホスト８に対してデータの書き込みが完了したことを即通知でき、ホスト８のライト性能を維持できる。
【００３４】
［ストレージ装置のＣＭ間のシーケンス］
次に、実施例１に係るストレージ装置のＣＭ間のシーケンスを、図２を参照して説明する。図２は、実施例１に係るストレージ装置のＣＭ間のシーケンスを示す図である。なお、図２では、ＣＭ１をＣＭ＃０とし、ＣＭ２をＣＭ＃１とし、ＣＭ３をＣＭ＃２とし、ＣＭ４をＣＭ＃３として説明するものとする。なお、ホスト８は、ＣＭ＃３と接続されているとする。また、図２で示すアラートとは、例えばアラート信号を意味する。
【００３５】
まず、ホスト８は、ＣＭ＃０、ＣＭ＃１が管轄するディスク５へのデータの書き込み（ライト）を行うべく、ＣＭ＃３のＣＡ４３へライト命令を実行する（ステップＳ１１）。すると、ＣＭ＃３では、ライト命令を受け取ったＣＡ４３が、メモリコントローラ４２を介してＤＩＭＭ４１へデータをＤＭＡライトする（ステップＳ１２）。すなわち、ＤＩＭＭ４１は、データを一時的に記憶する。
【００３６】
続いて、ＣＭ＃３のＣＰＵ４８は、ＣＭ＃０またはＣＭ＃１からアラートがあり、かつ自ＣＭと冗長化されたＣＭ＃２からアラートがないか否かを判定する（ステップＳ１３）。例えば、ＣＭからアラートがあるか否かは、ＰＣＨ４７からの割り込みが検出されたか否かで判定される。ＣＭ＃０またはＣＭ＃１からアラートがあり、かつＣＭ＃２からアラートがないと判定した場合（ステップＳ１３；Ｙｅｓ）、ＤＭＡコントローラ４５は、ＣＭ＃２のメモリ空間に対してデータをＤＭＡライトする（ステップＳ１４）。つまり、ＤＭＡコントローラ４５は、書き込み命令のデータを自ＣＭと冗長化されたＣＭ＃２に退避する。
【００３７】
すると、ＣＭ＃２では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトする。そして、ＤＭＡコントローラは、ＤＩＭＭへのＤＭＡライトが完了すると、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ１５）、ステップＳ１９およびステップＳ２２に移行させる。
【００３８】
一方、ＣＭ＃０およびＣＭ＃１のいずれからもアラートがないと判定した場合（ステップＳ１３；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のそれぞれのメモリ空間にデータをＤＭＡライトする（ステップＳ１６）。つまり、ＤＭＡコントローラ４５は、データを退避しないで、ＣＭ＃０およびＣＭ＃１にＤＭＡライトを行う。
【００３９】
そして、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトする。そして、ＤＭＡコントローラ１５は、ＤＩＭＭ１１へのＤＭＡライトが完了すると、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ１７）、ステップＳ１９に移行させる。
【００４０】
そして、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトする。そして、ＤＭＡコントローラは、ＤＩＭＭへのＤＭＡライトが完了すると、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ１８）、ステップＳ１９に移行させる。
【００４１】
ステップＳ１９では、ＣＭ＃３のＣＰＵ４８が、ＣＭ＃２からＤＭＡライトの完了通知または、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったか否かを判定する（ステップＳ１９）。ＣＭ＃２からＤＭＡライトの完了通知がなく、およびＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知がなかったと判定した場合（ステップＳ１９；Ｎｏ）、ＣＰＵ４８は、判定処理を繰り返す。一方、ＣＭ＃２からＤＭＡライトの完了通知または、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったと判定した場合（ステップＳ１９；Ｙｅｓ）、ＣＰＵ４８は、ＣＡ４３を介してホスト８へデータのライトが完了したことを通知する（ステップＳ２０）。データのライトが完了したことを通知されたホスト８は、ライトの完了を検知する（ステップＳ２１）。
【００４２】
ステップＳ２２では、ＣＭ＃３のＣＰＵ４８は、ＣＭ＃０またはＣＭ＃１からアラートがあるか否かを判定する（ステップＳ２２）。ＣＭ＃０またはＣＭ＃１からアラートがあると判定した場合（ステップＳ２２；Ｙｅｓ）、ＣＰＵ４８は、判定処理を繰り返す。一方、ＣＭ＃０およびＣＭ＃１からのいずれからもアラートがないと判定した場合（ステップＳ２２；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のそれぞれのメモリ空間にデータをＤＭＡライトする（ステップＳ２３）。つまり、ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のいずれもアラートがなくなったので、ＣＭ＃０およびＣＭ＃１にＤＭＡライトを行う。
【００４３】
そして、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトする。そして、ＤＭＡコントローラ１５は、ＤＩＭＭ１１へのＤＭＡライトが完了すると、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ２４）、ステップＳ２６に移行させる。
【００４４】
そして、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトする。そして、ＤＭＡコントローラは、ＤＩＭＭへのＤＭＡライトが完了すると、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ２５）、ステップＳ２６に移行させる。
【００４５】
ステップＳ２６では、ＣＭ＃３のＣＰＵ４８が、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったか否かを判定する（ステップＳ２６）。ＣＭ＃０かつＣＭ＃１のどちらか一方からＤＭＡライトの完了通知がなかったと判定した場合（ステップＳ２６；Ｎｏ）、ＣＰＵ４８は、判定処理を繰り返す。
【００４６】
一方、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったと判定した場合（ステップＳ２６；Ｙｅｓ）、ＣＰＵ４８は、一時的に格納したデータを破棄する（ステップＳ２７）。例えば、ＣＰＵ４８は、自ＣＭのＤＩＭＭ４１に一時的に記憶したデータおよびＣＭ＃２に退避したデータを破棄する。
【００４７】
［実施例１の効果］
上記実施例１によれば、ＣＭ１では、メモリコントローラ１２が、キュー１２ａを用いてＤＩＭＭ１１へのデータの書き込みを制御する。そして、ＰＣＩｅスイッチ１６が、メモリコントローラ１２内のキュー１２ａが満杯であるか否かを判定し、メモリコントローラ１２内のキュー１２ａが満杯であると判定した場合、満杯である旨をＣＭ４へ通知する。ＣＭ４では、ホスト８からＣＭ１が管轄するディスク５へのデータの書込み命令が受け付けられた場合、ＣＰＵ４８が、ＣＭ１からキュー１２ａが満杯である旨が通知されたか否かを判定する。そして、ＣＭ１から満杯である旨が通知されたと判定された場合、ＣＰＵ４８が、書き込み命令のデータを他のＣＭに退避する。さらに、退避が完了した後、ＣＰＵ４８が、ＣＡ４３を介して、書き込みが完了したことをホスト８へ通知する。かかる構成によれば、ＣＭ４は、ホスト８からキュー１２ａが満杯であるＣＭ１のデータの書き込み命令を受けても、データを退避したうえでホスト８にデータの書き込みが完了したことを通知するので、ホスト８のライト性能の低下を抑制できる。
【００４８】
また、上記実施例１によれば、ＣＭ１のＰＣＩｅスイッチ１６は、メモリコントローラ１２内のキュー１２ａが満杯である旨（アラート信号）をＣＭ４へ直接出力する。そして、ＣＭ４では、ＣＰＵ４８が、ＣＭ１からキュー１２ａが満杯である旨が通知されたか否かを判定する。かかる構成によれば、ＣＭ４は、ＣＭ１のメモリコントローラ１２内のキュー１２ａが枯渇していることを容易に知ることができる。
【００４９】
また、上記実施例１によれば、ＣＭ４のＣＰＵ４８は、ＣＭ１からデータの書き込みが完了した旨の通知を受け取ると、退避されたデータを破棄するようにした。かかる構成によれば、ＣＰＵ４８は、ＣＭ１のデータの書き込みが完了すると、予め退避したデータを破棄することで、その後のメモリの使用効率を高めることができる。
【実施例２】
【００５０】
ところで、実施例１に係るストレージ装置９では、ＰＣＩｅスイッチ１６が、メモリコントローラ１２内のキュー１２ａが満杯である旨を、他のＣＭへ直接出力する場合を説明した。しかしながら、ストレージ装置９では、これに限定されず、ＣＰＵ１８が、ＰＣＩｅスイッチ１６と連携して、メモリコントローラ１２内のキュー１２ａが満杯である旨を他のＣＭへ出力するようにしても良い。そこで、実施例２では、ＣＰＵ１８が、ＰＣＩｅスイッチ１６と連携して、メモリコントローラ１２内のキュー１２ａが満杯である旨を他のＣＭへ出力するストレージ装置９Ａについて説明する。
【００５１】
［実施例２に係るストレージ装置の構成］
図３は、実施例２に係るストレージ装置のハードウェア構成を示す図である。なお、図１に示すストレージ装置９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、ＰＣＩｅスイッチ１６をＰＣＩｅスイッチ１６Ａに変更した点にある。また、実施例１と実施例２とが異なるところは、ＣＰＵ１８をＣＰＵ１８Ａに変更した点にある。さらに、実施例１と実施例２とが異なるところは、ＣＰＵ４８をＣＰＵ４８Ａに変更した点にある。
【００５２】
ＰＣＩｅスイッチ１６Ａは、残クレジットレジスタ１６ｅを持つ。残クレジットレジスタ１６ｅとは、メモリコントローラ１２内のキュー１２ａにおける残り（空き）のクレジット数を保持するレジスタである。ＰＣＩｅスイッチ１６Ａは、残クレジットレジスタ１６ｅを用いて、メモリコントローラ１２内のキュー１２ａが満杯であるか否かを判定し、満杯であると判定した場合、後述するＣＰＵ１８Ａに対してキュー１２ａが満杯である旨のアラートを通知する。一例として、ＰＣＩｅスイッチ１６Ａは、ＣＰＵ１８Ａに対してキュー１２ａが満杯である旨の割り込みを行う。別の例として、ＰＣＩｅスイッチ１６Ａは、ＣＰＵ１８Ａからの問い合わせ（例えば、ポーリング）に応じて、キュー１２ａが満杯であれば満杯である旨のアラートを通知する。
【００５３】
ＣＰＵ１８Ａは、メモリコントローラ１２内のキュー１２ａが満杯である旨のアラートを検出すると、検出したアラートを、ＰＣＩｅスイッチ７を介して、ホスト８と接続するＣＭ４に通知する。一例として、ＣＰＵ１８Ａは、ＰＣＩｅスイッチ１６Ａからのキュー１２ａが満杯である旨の割り込みを検出すると、キュー１２ａが満杯である旨のアラートをＣＭ４に対して通知する。別の例として、ＣＰＵ１８Ａは、定期的にＰＣＩｅスイッチ１６Ａにメモリコントローラ１２内のキュー１２ａが満杯であるか否かを問い合わせる。そして、ＣＰＵ１８Ａは、問い合わせに対してＰＣＩｅスイッチ１６Ａからキュー１２ａが満杯である旨のアラートを検出すると、検出したアラートをＣＭ４に対して通知する。なお、ＣＰＵ１８Ａが「第１の通知部」の一例である。
【００５４】
ＣＰＵ４８Ａは、ホスト８からＣＭ１およびＣＭ２へのデータの書き込み命令が受け付けられた場合、ＣＭ１またはＣＭ２からキューが満杯である旨のアラートが通知されたか否かを判定する。ＣＭ１またはＣＭ２からキューが満杯である旨のアラートが通知されたか否かは、ＰＣＩｅスイッチ７を介したメッセージ転送が受け付けられたか否かによって判定される。そして、ＣＰＵ４８Ａは、ＣＭ１またはＣＭ２からアラートが通知されたと判定した場合、書き込み命令のデータを自ＣＭ４と冗長化されたＣＭ３へ退避する。そして、ＣＰＵ４８Ａは、ＣＭ３からデータの退避が完了した旨を受け取ると、ＣＡ４３を介してホスト８へデータの書き込みが完了したことを通知する。これにより、ＣＭ１またはＣＭ２からアラートが通知されていても、ＣＭ４は、ホスト８に対してデータの書き込みが完了したことを通知できるので、ホスト８のライト性能の低下を抑制できる。
【００５５】
また、ＣＰＵ４８Ａは、ＣＭ３からデータの退避が完了した旨を受け取ると、ＣＭ１およびＣＭ２からアラートが通知されないと判定した場合に、ＣＭ１およびＣＭ２に対してＤＭＡライトを行う。ＤＭＡライトは、ＤＭＡコントローラ４５を介して行われる。そして、ＣＰＵ４８Ａは、ＣＭ１およびＣＭ２からＤＭＡライトの完了の通知を受け取ると、退避したデータを破棄する。すなわち、ＣＰＵ４８Ａは、自ＣＭのＤＩＭＭ４１に記憶したデータおよびＣＭ＃２に退避したデータを破棄する。なお、ＣＰＵ４８Ａが「破棄部」の一例である。
【００５６】
［ストレージ装置のＣＭ間のシーケンス］
実施例２に係るストレージ装置のＣＭ間のシーケンスについては、実施例１と同様であるので、その説明については省略する。
【００５７】
［実施例２の効果］
上記実施例２によれば、ＣＭ１では、ＣＰＵ１８Ａが、メモリコントローラ１２内のキュー１２ａが満杯である旨（アラート）をＰＣＩｅスイッチ１６Ａからの通知を受けて、ＰＣＩｅスイッチ７を介してＣＭ４へ通知する。そして、ＣＭ４では、ＣＰＵ４８Ａが、ＣＭ１からキュー１２ａが満杯である旨が通知されたか否かを判定する。かかる構成によれば、ＣＭ４は、ＣＭ１のメモリコントローラ１２内のキュー１２ａが枯渇していることを新たな装置を追加しないでも容易にＣＭ１に知ることができる。この結果、ホスト８から同じＣＭ１に対してライト命令が集中した場合であっても、ホスト８のライト性能の低下を抑制することが可能となる。
【００５８】
また、上記実施例２によれば、ＣＭ１では、ＣＰＵ１８Ａが、メモリコントローラ１２内のキュー１２ａが満杯である旨（アラート）をＰＣＩｅスイッチ１６Ａに問い合わせることによって検出する。そして、ＣＰＵ１８Ａは、検出したアラートを、ＰＣＩｅスイッチ７を介してＣＭ４へ通知するようにした。かかる構成によれば、ＣＭ４は、ＣＭ１のメモリコントローラ１２内のキュー１２ａが枯渇していることを新たな装置を追加しないでも容易に検知できる。この結果、ホスト８から同じＣＭ１に対してライト命令が集中した場合であっても、ホスト８のライト性能の低下を抑制することが可能となる。
【実施例３】
【００５９】
ところで、実施例１に係るストレージ装置９では、ＣＭ４のＣＰＵ４８が、ＣＭ１からメモリコントローラ１２内のキュー１２ａが満杯である旨が通知された場合、ディスクが冗長化されたＣＭ３へ書き込み命令のデータを退避する場合を説明した。しかしながら、ストレージ装置９では、ＣＰＵ４８が、ＣＭ１からメモリコントローラ１２内のキュー１２ａが満杯である旨が通知された場合、ディスクが冗長化されたＣＭ３の縮退時に再冗長化されたＣＭへ書き込み命令のデータを退避しても良い。そこで、実施例３では、ＣＰＵ４８が、ＣＭ１からメモリコントローラ１２内のキュー１２ａが満杯である旨が通知された場合、ディスクが冗長化されたＣＭ３の縮退時に再冗長化されたＣＭへ書き込み命令のデータを退避するストレージ装置９Ｂについて説明する。
【００６０】
［実施例３に係るストレージ装置の構成］
図４は、実施例３に係るストレージ装置のハードウェア構成を示す図である。なお、図１に示すストレージ装置９と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例３とが異なるところは、ストレージ装置９Ｂにバックエンドインタフェーススイッチ１０を追加した点にある。また、実施例１と実施例３とが異なるところは、ＣＰＵ４８をＣＰＵ４８Ｂに変更した点にある。
【００６１】
バックエンドインタフェーススイッチ１０は、ディスクの冗長化の管轄を切り替えるスイッチである。例えば、ＣＭ３、ＣＭ４がディスク６と接続し、データが冗長化されている場合、ＣＭ３の縮退時に、バックエンドインタフェーススイッチ１０は、ＣＭ３を異なるＣＭに切り替えて、切り替えたＣＭとＣＭ４で再冗長化する。
【００６２】
ＣＰＵ４８Ｂは、ホスト８からＣＭ１およびＣＭ２へのデータの書き込み命令が受け取られた場合、ＣＭ１またはＣＭ２からアラート信号が通知されたか否かを判定する。他のＣＭからアラート信号が通知されたか否かは、ＰＣＨ４７からの割り込みが検出されたか否かで判定される。そして、ＣＰＵ４８Ｂは、ＣＭ１またはＣＭ２からアラート信号が通知されたと判定した場合、さらに、自ＣＭと冗長化されたＣＭ３からアラート信号が通知されたか否かを判定する。そして、ＣＰＵ４８Ｂは、自ＣＭと冗長化されたＣＭ３からアラート信号が通知されたと判定した場合、バックエンドインタフェーススイッチ１０を利用して、アラート信号が通知されていないＣＭを自ＣＭと再冗長化させる。なお、ＣＰＵ４８Ｂは、アラート信号が通知されていないＣＭにデータの書き込み命令先のＣＭが含まれていれば、当該ＣＭを自ＣＭと再冗長化させることが望ましい。これは、データの書き込み命令先のＣＭからのアラート信号がなくなったタイミングで、当該ＣＭにもデータを書き込むことになるからである。
【００６３】
［ストレージ装置のＣＭ間のシーケンス］
次に、実施例３に係るストレージ装置のＣＭ間のシーケンスを、図５Ａ〜図５Ｃを参照して説明する。図５Ａ〜図５Ｃは、実施例３に係るストレージ装置のＣＭ間のシーケンスを示す図である。なお、図５Ａ〜図５Ｃでは、ＣＭ１をＣＭ＃０とし、ＣＭ２をＣＭ＃１とし、ＣＭ３をＣＭ＃２とし、ＣＭ４をＣＭ＃３として説明するものとする。なお、ホスト８は、ＣＭ＃３と接続されているとする。また、図５Ａ〜図５Ｃで示すアラートとは、例えばアラート信号を意味する。
【００６４】
まず、ホスト８は、ＣＭ＃０、ＣＭ＃１が管轄するディスク５へのデータの書き込み（ライト）を行うべく、ＣＭ＃３のＣＡ４３へライト命令を実行する（ステップＳ３１）。すると、ＣＭ＃３では、ライト命令を受け取ったＣＡ４３が、メモリコントローラ４２を介してＤＩＭＭ４１へデータをＤＭＡライトする（ステップＳ３２）。すなわち、ＤＩＭＭ４１は、データを一時的に記憶する。
【００６５】
続いて、ＣＭ＃３のＣＰＵ４８Ｂは、ＣＭ＃０またはＣＭ＃１からアラートがあるか否かを判定する（ステップＳ３３）。例えば、ＣＭからアラートがあるか否かは、ＰＣＨ４７からの割り込みが検出されたか否かで判定される。ＣＭ＃０またはＣＭ＃１からアラートがあると判定した場合（ステップＳ３３；Ｙｅｓ）、ＣＰＵ４８Ｂは、さらに自ＣＭと冗長化されたＣＭ＃２からアラートがあるか否かを判定する（ステップＳ３４）。
【００６６】
自ＣＭと冗長化されたＣＭ＃２からアラートがあると判定した場合（ステップＳ３４；Ｙｅｓ）、ＣＭ＃３のＣＰＵ４８Ｂは、ライト命令先の一方のＣＭ＃１からアラートがあるか否かを判定する（ステップＳ３５）。ここで、ライト命令先の一方のＣＭ＃１からアラートがないと判定した場合（ステップＳ３５；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃１のメモリ空間に対してデータをＤＭＡライトする（ステップＳ３５Ａ）。つまり、ＤＭＡコントローラ４５は、自ＣＭと冗長化されたＣＭ＃２からアラートがあり、ＣＭ＃２に書き込み命令のデータを退避できないので、書き込み命令先のアラートがないＣＭ＃１に当該データを退避する。
【００６７】
すると、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトする。そして、ＤＭＡコントローラは、ＤＩＭＭへのＤＭＡライトが完了すると、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ３６）、ステップＳ３７およびステップＳ３９に移行させる。
【００６８】
ステップＳ３７では、ＣＭ＃３のＣＰＵ４８Ｂが、ＣＡ４３を介してホスト８へデータのライトが完了したことを通知する（ステップＳ３７）。データのライトが完了したことを通知されたホスト８は、ライトの完了を検知する（ステップＳ３８）。
【００６９】
ステップＳ３９では、ＣＭ＃３のＣＰＵ４８Ｂは、ＣＭ＃０からアラートがあるか否かを判定する（ステップＳ３９）。ＣＭ＃０からアラートがあると判定した場合（ステップＳ３９；Ｙｅｓ）、ＣＰＵ４８Ｂは、判定処理を繰り返す。一方、ＣＭ＃０からアラートがないと判定した場合（ステップＳ３９；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０のメモリ空間にデータをＤＭＡライトする（ステップＳ４０）。つまり、ＤＭＡコントローラ４５は、ＣＭ＃０からアラートがなくなったので、ＣＭ＃０にＤＭＡライトを行う。
【００７０】
そして、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトする。そして、ＤＭＡコントローラ１５は、ＤＩＭＭ１１へのＤＭＡライトが完了すると、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知する（ステップＳ４１）。
【００７１】
ＣＭ＃３では、ＣＭ＃０からＤＭＡライトの完了通知を受け取ったＣＰＵ４８Ｂが、一時的に格納したデータを破棄する（ステップＳ４２）。ここでは、ＣＰＵ４８Ｂは、ＣＭ＃１に退避したデータをそのまま活用し、自ＣＭのＤＩＭＭ４１に一時的に記憶したデータを破棄する。
【００７２】
ステップＳ３５では、ライト命令先の一方のＣＭ＃１からアラートがあると判定した場合（ステップＳ３５；Ｙｅｓ）、ＣＭ＃３のＣＰＵ４８Ｂは、ライト命令先の他方のＣＭ＃０からアラートがあるか否かを判定する（ステップＳ４３）。ここで、ライト命令先の他方のＣＭ＃０からアラートがあると判定した場合（ステップＳ４３；Ｙｅｓ）、ＣＰＵ４８Ｂは、判定処理を繰り返すべく、ステップＳ３３に移行する。これは、ライト命令先のＣＭ＃０およびＣＭ＃１のいずれからもアラートがあるからである。
【００７３】
一方、ライト命令先の他方のＣＭ＃０からアラートがないと判定した場合（ステップＳ４３；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０のメモリ空間に対してデータをＤＭＡライトする（ステップＳ４３Ａ）。つまり、ＤＭＡコントローラ４５は、自ＣＭと冗長化されたＣＭ＃２からアラートがあり、ＣＭ＃２に書き込み命令のデータを退避できないので、書き込み命令先のアラートがないＣＭ＃０に当該データを退避する。
【００７４】
すると、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトする。そして、ＤＭＡコントローラ１５は、ＤＩＭＭ１１へのＤＭＡライトが完了すると、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ４４）、ステップＳ４５およびステップＳ４７に移行させる。
【００７５】
ステップＳ４５では、ＣＭ＃３のＣＰＵ４８Ｂが、ＣＡ４３を介してホスト８へデータのライトが完了したことを通知する（ステップＳ４５）。データのライトが完了したことを通知されたホスト８は、ライトの完了を検知する（ステップＳ４６）。
【００７６】
ステップＳ４７では、ＣＭ＃３のＣＰＵ４８Ｂは、ＣＭ＃１からアラートがあるか否かを判定する（ステップＳ４７）。ＣＭ＃１からアラートがあると判定した場合（ステップＳ４７；Ｙｅｓ）、ＣＰＵ４８Ｂは、判定処理を繰り返す。一方、ＣＭ＃１からアラートがないと判定した場合（ステップＳ４７；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃１のメモリ空間にデータをＤＭＡライトする（ステップＳ４９）。つまり、ＤＭＡコントローラ４５は、ＣＭ＃１からアラートがなくなったので、ＣＭ＃１にＤＭＡライトを行う。
【００７７】
そして、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトする。そして、ＤＭＡコントローラは、ＤＩＭＭへのＤＭＡライトが完了すると、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＤＭＡライトの完了割り込みを検出したＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知する（ステップＳ５０）。
【００７８】
ＣＭ＃３では、ＣＭ＃１からＤＭＡライトの完了通知を受け取ったＣＰＵ４８Ｂが、一時的に格納したデータを破棄する（ステップＳ５１）。ここでは、ＣＰＵ４８Ｂは、ＣＭ＃０に退避したデータをそのまま活用し、自ＣＭのＤＩＭＭ４１に一時的に記憶したデータを破棄する。
【００７９】
なお、ＣＭ＃０およびＣＭ＃１からのアラートがない場合（ステップＳ３３；Ｎｏ）と、ＣＭ＃０またはＣＭ＃１からアラートがあり、かつＣＭ＃２からアラートがない場合（ステップＳ３４；Ｎｏ）の処理は、図２のＳ１４〜Ｓ２７で説明した。したがって、かかる処理は、以降、簡略して説明する。
【００８０】
ステップＳ３４では、ＣＭ＃０またはＣＭ＃１からアラートがあり、かつＣＭ＃２からアラートがない場合（ステップＳ３４；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃２のメモリ空間に対してデータをＤＭＡライトする（ステップＳ３４Ａ）。ＤＭＡコントローラ４５は、書き込み命令のデータを自ＣＭと冗長化されたＣＭ＃２に退避する。
【００８１】
すると、ＣＭ＃２では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトし、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ５２）、ステップＳ５６およびステップＳ５９に移行させる。
【００８２】
ステップＳ３３では、ＣＭ＃０およびＣＭ＃１のいずれからもアラートがないと判定した場合（ステップＳ３３；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のそれぞれのメモリ空間にデータをＤＭＡライトする（ステップＳ３３Ａ）。ＤＭＡコントローラ４５は、データを退避しないで、そのままＣＭ＃０およびＣＭ＃１にＤＭＡライトを行う。
【００８３】
そして、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトし、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ５４）、ステップＳ５６に移行させる。そして、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトし、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ５５）、ステップＳ５６に移行させる。
【００８４】
ステップＳ５６では、ＣＭ＃３のＣＰＵ４８Ｂが、ＣＭ＃２からＤＭＡライトの完了通知または、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったか否かを判定する（ステップＳ５６）。ＣＭ＃２からＤＭＡライトの完了通知または、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったと判定した場合（ステップＳ５６；Ｙｅｓ）、ＣＰＵ４８Ｂは、ホスト８へデータのライトが完了したことを通知する（ステップＳ５７）。データのライトが完了したことを通知されたホスト８は、ライトの完了を検知する（ステップＳ５８）。
【００８５】
ステップＳ５９では、ＣＭ＃３のＣＰＵ４８Ｂは、ＣＭ＃０またはＣＭ＃１からアラートがあるか否かを判定する（ステップＳ５９）。ＣＭ＃０またはＣＭ＃１からアラートがあると判定した場合（ステップＳ５９；Ｙｅｓ）、ＣＰＵ４８Ｂは、判定処理を繰り返す。一方、ＣＭ＃０およびＣＭ＃１からのいずれからもアラートがないと判定した場合（ステップＳ５９；Ｎｏ）、ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のそれぞれのメモリ空間にデータをＤＭＡライトする（ステップＳ６０）。ＤＭＡコントローラ４５は、ＣＭ＃０およびＣＭ＃１のいずれもアラートがなくなったので、ＣＭ＃０およびＣＭ＃１にＤＭＡライトを行う。
【００８６】
そして、ＣＭ＃０では、ＤＭＡコントローラ１５が、データをＤＩＭＭ１１へＤＭＡライトし、ＣＰＵ１８に対してＤＭＡライトの完了割り込みを行う。さらに、ＣＰＵ１８は、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ６１）、ステップＳ６３に移行させる。そして、ＣＭ＃１では、ＤＭＡコントローラが、データをＤＩＭＭへＤＭＡライトし、ＣＰＵに対してＤＭＡライトの完了割り込みを行う。さらに、ＣＰＵは、ＣＭ＃３に対してＤＭＡライトが完了した旨を通知し（ステップＳ６２）、ステップＳ６３に移行させる。
【００８７】
ステップＳ６３では、ＣＭ＃３のＣＰＵ４８Ｂが、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったか否かを判定する（ステップＳ６３）。ＣＭ＃０かつＣＭ＃１のどちらか一方からＤＭＡライトの完了通知がなかったと判定した場合（ステップＳ６３；Ｎｏ）、ＣＰＵ４８Ｂは、判定処理を繰り返す。
【００８８】
一方、ＣＭ＃０かつＣＭ＃１からＤＭＡライトの完了通知があったと判定した場合（ステップＳ６３；Ｙｅｓ）、ＣＰＵ４８Ｂは、一時的に格納したデータを破棄する（ステップＳ６４）。ここでは、ＣＰＵ４８Ｂは、自ＣＭのＤＩＭＭ４１に一時的に記憶したデータおよびＣＭ＃２に退避したデータを破棄する。
【００８９】
［実施例３の効果］
上記実施例によれば、ＣＭ４では、ＣＰＵ４８Ｂが、ＣＭ１およびＣＭ２が管轄するディスクへのデータの書き込み命令が受け付けられた場合、ＣＭ１またはＣＭ２からメモリコントローラ内のキューが満杯である旨が通知されたか否かを判定する。そして、ＣＭ１またはＣＭ２から満杯である旨が通知されたと判定された場合、ＣＰＵ４８Ｂが、さらに、自ＣＭと冗長化されたＣＭ３からメモリコントローラ内のキューが満杯である旨が通知されたか否かを判定する。そして、ＣＭ３から満杯である旨が通知されたと判定された場合、ＣＰＵ４８Ｂは、書き込み命令のデータを自ＣＭと冗長化されたＣＭ３と異なるＣＭであって満杯である旨が通知されなかったＣＭに退避する。かかる構成によれば、ＣＭ４は、自ＣＭと冗長化されたＣＭ３から満杯である旨が通知されても、満杯である旨が通知されなかった他のＣＭに書き込み命令のデータを退避できる。この結果、ＣＭ４は、自ＣＭの万一の故障に備えてデータを退避することができ、データの喪失を確実に防ぐことができる。
【００９０】
また、上記実施例によれば、ＣＭ４では、ＣＰＵ４８Ｂが、自ＣＭと冗長化されたＣＭ３から満杯である旨が通知されたと判定された場合、データの書き込み命令先であるＣＭ１と冗長化されたＣＭ２に退避するようにした。かかる構成によれば、ＣＭ４は、ＣＭ１と冗長化されたＣＭ２を用いてデータを退避する目的を達成できるとともに、ＣＭ１と冗長化されたＣＭ２に冗長化されるべきデータを早期に書き込むことができる。
【００９１】
［その他］
なお、実施例１、３では、ＰＣＨ４７が、他のＣＭからアラート信号を入力するようにした。しかしながら、アラート信号を入力するデバイスは、ＰＣＨ４７に限定されず、他のＣＭからアラート信号を入力できるＣＭ間の接続装置であれば良い。
【００９２】
また、ストレージ装置９、９Ａ、９Ｂは、４台のＣＭを、２台ずつに冗長化するものと説明した。しかしながら、ストレージ装置９、９Ａ、９Ｂは、これに限定されず、６台のＣＭを複数台ずつに冗長化しても良いし、８台のＣＭを複数台ずつに冗長化しても良いし、１０台のＣＭを複数台ずつに冗長化しても良い。
【００９３】
以上説明した実施形態及びその変形例に関し、更に以下の付記を開示する。
【００９４】
（付記１）データの書き込みを制御するメモリコントローラと、
前記メモリコントローラにより管理されているキューの状態を判定する第１の判定部と、
前記第１の判定部によって前記メモリコントローラ内のキューが所定の状態であると判定された場合、前記所定の状態である旨を示す状態通知を出力する第１の通知部と、を有する第１の制御装置と、
上位装置から前記第１の制御装置が管轄するストレージへのデータの書込み命令を受信した場合、前記第１の制御装置から出力された前記状態通知が受信済みか否かを判定する第２の判定部と、
前記第２の判定部によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを他の制御装置に退避する退避部と、
前記退避部によって前記書込み命令のデータの退避が完了した後、前記上位装置へ書き込みが完了した旨を示す完了通知を出力する第２の通知部と、を有する第２の制御装置と、
を備えることを特徴とするストレージ装置。
【００９５】
（付記２）前記第１の通知部は、前記状態通知を前記第２の制御装置へ直接出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする付記１に記載のストレージ装置。
【００９６】
（付記３）前記第１の通知部は、第１の判定部からの前記状態通知を受けて、前記状態通知を、前記入出力インタフェースを介して前記第２の制御装置へ出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする付記１に記載のストレージ装置。
【００９７】
（付記４）前記第１の通知部は、前記状態通知を第１の判定部に問い合わせることによって検出し、検出した前記状態通知を、前記入出力インタフェースを介して前記第２の制御装置へ出力し、
前記第２の判定部は、前記第１の通知部から出力された前記状態通知が受信済みか否かを判定する
ことを特徴とする付記１に記載のストレージ装置。
【００９８】
（付記５）前記第２の判定部は、さらに、自制御装置と冗長化された制御装置から出力された前記状態通知が受信済みか否かを判定し、
前記退避部は、前記第２の判定部によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定され、且つ自制御装置と冗長化された制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを自制御装置と冗長化された制御装置と異なる制御装置であって前記状態通知が受信されなかった制御装置に退避する
ことを特徴とする付記１から付記４のいずれか１つに記載のストレージ装置。
【００９９】
（付記６）前記退避部は、前記第１の制御装置と冗長化された制御装置に退避する
ことを特徴とする付記５に記載のストレージ装置。
【０１００】
（付記７）前記第２の制御装置は、
前記第１の制御装置からデータの書き込みが完了した旨の通知を受け取ると、前記退避部によって退避されたデータを破棄する破棄部をさらに有する
ことを特徴とする付記１から付記６のいずれか１つに記載のストレージ装置。
【０１０１】
（付記８）第１の制御装置と第２の制御装置を備えるストレージ装置の書込完了通知方法において、
前記第１の制御装置が、
データの書き込みを制御するメモリコントローラにより管理されているキューの状態を判定し、
当該判定する処理によって前記メモリコントローラ内のキューが所定の状態であると判定された場合、前記所定の状態である旨を示す状態通知を前記第２の制御装置へ出力し、
前記第２の制御装置が、
上位装置から前記第１の制御装置が管轄するストレージへのデータの書込み命令を受信した場合、前記第１の制御装置から出力された前記状態通知が受信済みか否かを判定し、
当該判定する処理によって前記第１の制御装置から出力された前記状態通知が受信済みであると判定された場合、前記書込み命令のデータを他の制御装置に退避し、
当該退避する処理によって前記書込み命令のデータの退避が完了した後、前記上位装置へ書き込みが完了した旨を示す完了通知を出力する
各処理を実行することを特徴とする書込完了通知方法。
【符号の説明】
【０１０２】
１〜４、１Ａ、４Ａ    ＣＭ
５、６    ディスク
７      ＰＣＩｅスイッチ
８      ホスト
１１、４１    ＤＩＭＭ
１２、４２    メモリコントローラ
１３、４３    ＣＡ
１４、４４    ＤＩ
１５、４５    ＤＭＡコントローラ
１６、１６Ａ、２６、３６、４６    ＰＣＩｅスイッチ
１７、２７、３７、４７    ＰＣＨ
１８、１８Ａ、４８、４８Ａ、４８Ｂ    ＣＰＵ
９、９Ａ、９Ｂ    ストレージ装置
【図１】
2014010713.tif 000003
【図２】
2014010713.tif 000004
【図３】
2014010713.tif 000005
【図４】
2014010713.tif 000006
【図５Ａ】
2014010713.tif 000007
【図５Ｂ】
2014010713.tif 000008
【図５Ｃ】
2014010713.tif 000009
【図６】
2014010713.tif 000010