(57)【要約】【課題】命令の転送を高速化すること。【解決手段】データを記憶するストレージ装置２０Ａ、２０Ｂ、２０Ｃと、ストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの処理を制御するストレージ制御装置１０Ａ、１０Ｂ、１０Ｃとを含むノードＡ、Ｂ、Ｃを複数有するストレージシステムが提供される。ストレージ制御装置１０Ａは、ストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの処理を指示する上位装置３０、及び他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃと通信する通信部１１Ａと、任意のノードＡ、Ｂ、Ｃに含まれるストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの処理についての指示を含む命令Ｑを上位装置３０から受信した場合に命令Ｑを全ての他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃへ送信するように制御する制御部１２Ａと、を有する。【選択図】図１
2016018384.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムの前記ストレージ制御装置であって、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置と通信する通信部と、
任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記通信部が前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する制御部と、
を有する、ストレージ制御装置。
【請求項２】
前記ストレージ制御装置は、データを一時的に格納する記憶部をさらに有し、
前記制御部は、前記他のノードに含まれる前記ストレージ制御装置から、任意のノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記通信部が受信した場合に当該命令を前記記憶部に格納する
請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、前記他のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を前記通信部が受信した場合に、当該指示の対象となるデータが前記記憶部に格納されているとき、当該データを前記記憶部から読み出して前記上位装置へ送信するように前記通信部を制御する
請求項２に記載のストレージ制御装置。
【請求項４】
前記制御部は、自身を含むノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記通信部が前記上位装置から受信した場合に当該命令を前記記憶部に格納し、当該命令に対する応答を前記上位装置へ送信するように前記通信部を制御し、当該応答の送信後に当該データを当該ストレージ装置に格納し、当該ストレージ装置に対する当該データの格納完了を示す完了通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する
請求項２又は３に記載のストレージ制御装置。
【請求項５】
前記制御部は、前記他のノードに含まれる前記ストレージ制御装置から、当該他のノードに含まれる前記ストレージ装置へのデータの格納完了を示す完了通知を前記通信部が受信した場合に当該データと同じデータを前記記憶部から消去する
請求項４に記載のストレージ制御装置。
【請求項６】
前記制御部は、任意のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を前記通信部が受信し、当該指示の対象となるデータを前記記憶部から読み出して前記上位装置へ送信するように前記通信部を制御した場合、当該命令に対する応答を抑制する抑制通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する
請求項１〜５のいずれか１項に記載のストレージ制御装置。
【請求項７】
データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムであって、
前記ストレージ制御装置は、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置と通信する通信部と、任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記通信部が前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する制御部と、を有し、
前記ストレージ装置は、
前記ストレージ制御装置に接続する接続部と、データを格納する記録媒体と、当該ストレージ制御装置による制御を受けて前記記録媒体に対するデータの書き込み処理又はデータの読み出し処理を実行する処理部と、を有する、
ストレージシステム。
【請求項８】
データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムの前記ストレージ制御装置として動作するコンピュータに、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置との通信を制御し、
任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように制御する
処理を実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージシステム、及びプログラムに関する。
【背景技術】
【０００２】
容量の大きなデータを扱うシステムにおいては、高い信頼性及び高い読み書き性能を実現することが可能なＲＡＩＤ（Redundant Arrays of Inexpensive Disks）装置が利用される。ＲＡＩＤ装置は、ＨＤＤ（Hard Disk Drive）などの記憶装置を複数接続して冗長化した装置である。また、ネットワークを介して複数のホスト装置からアクセスできる仕組みを設け、データを集中管理できるようにしたＮＡＳ（Network Attached Storage）装置などが利用されることもある。以下、１つのＲＡＩＤ装置又は複数のＲＡＩＤ装置を組み合わせた記憶装置をディスクアレイと呼ぶことにする。
【０００３】
ディスクアレイへデータを書き込む処理や、ディスクアレイからデータを読み出す処理は、コントローラと呼ばれる制御装置により制御される。そのため、ホスト装置は、コントローラを介してディスクアレイに対するデータの読み書きを実行する。なお、１つのコントローラと、そのコントローラが制御対象とするディスクアレイとの組はノードと呼ばれる単位で管理される場合がある。また、複数のノードを含むストレージシステムでは、ノード同士がネットワークで接続され、あるノードがホスト装置から受けたデータの書き込み要求や読み出し要求を他のノードへ転送する仕組みが設けられる。
【０００４】
上記のようなストレージシステムでは、ホスト装置への応答速度を高速化するために、コントローラに高速なキャッシュメモリが設けられることがある。この場合、コントローラは、ホスト装置からディスクアレイに対する書き込み要求を受けた際、書き込みデータをキャッシュメモリに格納した後、ホスト装置へ書き込みの完了を通知する。その後、コントローラは、キャッシュメモリに格納した書き込みデータをディスクアレイに格納する。この仕組みによれば、ホスト装置へ書き込みの完了を素早く通知できる。データを読み出す場合も、対象とするデータがキャッシュメモリに格納されている場合、キャッシュメモリからデータを読み出して素早くホスト装置へ送信できる。
【０００５】
ところで、ホスト装置と通信する複数のチャネルアダプタと、ストレージデバイスと通信する複数のストレージアダプタと、メインキャッシュメモリとを有し、ホスト装置への応答速度を高速化するストレージシステムが提案されている。このストレージシステムでは、チャネルアダプタとストレージアダプタとの間で送受信されるデータがメインキャッシュメモリに格納される。また、このチャネルアダプタは、ローカルキャッシュメモリを有しており、ライト要求に応じてライトデータをローカルキャッシュメモリに二重化して書き込み、完了通知をホスト装置へ送信する。
【０００６】
上記のチャネルアダプタは、完了通知と非同期のタイミングでローカルキャッシュメモリに格納されたライトデータを一括してメインキャッシュメモリへ転送する。さらに、このチャネルアダプタは、ローカルキャッシュメモリに格納されたデータのディレクトリ情報を管理し、リード要求を受けた場合に、ディレクトリ情報を利用してローカルキャッシュメモリ内のリードデータを探索する。リードデータが見つかると、チャネルアダプタは、ローカルキャッシュメモリからホスト装置へリードデータを転送する。
【０００７】
また、計算ノード、第１のＩ／Ｏノード、及び第２のＩ／Ｏノードを含み、データ書き込みを効率化するデータ処理システムが提案されている。このデータ処理システムでは、計算ノードから書き込み要求を受けた第１のＩ／Ｏノードが、書き込みデータを第２のＩ／Ｏノードへ転送する。そして、書き込みデータを受領した第２のＩ／Ｏノードが、受領後に確認メッセージを計算ノードへ送る。このとき、第１のＩ／Ｏノードは、自身が有する不揮発性ストレージに書き込みデータを書き込んだ後、第２のＩ／Ｏノードが有する揮発性メモリから書き込みデータを排除させる排除要求を第２のＩ／Ｏノードへ送る。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−１５７８１５号公報
【特許文献２】特開２０００−２５９５０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
複数のノードを含むストレージシステムの場合、ホスト装置が発行する命令は、その命令が処理を要求するノードに直接送られないことがある。例えば、ホスト装置が発行した命令は、ランダムに決定されたノードへと送られる。そのため、上記のような命令の転送処理が発生する。あるノードがホスト装置から受けた命令を他のノードへ転送する際、ホスト装置から命令を受けたノードが命令を解析して転送先を決める処理が発生する。この処理を省略することができれば、転送時間の短縮に寄与すると考えられる。
【００１０】
そこで、１つの側面によれば、本発明の目的は、命令の転送を高速化することが可能なストレージ制御装置、ストレージシステム、及びプログラムを提供することにある。
【課題を解決するための手段】
【００１１】
本開示の１つの側面によれば、データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムのストレージ制御装置が提供される。ストレージ制御装置は、ストレージ装置におけるデータの処理を指示するホスト装置、及び他のノードに含まれるストレージ制御装置と通信する通信部と、任意のノードに含まれるストレージ装置におけるデータの処理についての指示を含む命令を通信部がホスト装置から受信した場合に当該命令を全ての他のノードに含まれるストレージ制御装置へ送信するように通信部を制御する制御部と、を有する。
【００１２】
また、本開示の他の１つの側面によれば、データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムが提供される。ストレージ制御装置は、ストレージ装置におけるデータの処理を指示するホスト装置、及び他のノードに含まれるストレージ制御装置と通信する通信部と、任意のノードに含まれるストレージ装置におけるデータの処理についての指示を含む命令を通信部がホスト装置から受信した場合に当該命令を全ての他のノードに含まれるストレージ制御装置へ送信するように通信部を制御する制御部と、を有する。また、ストレージ装置は、ストレージ制御装置と接続する接続部と、データを格納する記録媒体と、ストレージ制御装置による制御を受けて記録媒体に対するデータの書き込み処理又はデータの読み出し処理を実行する処理部と、を有する。
【００１３】
また、本開示の他の１つの側面によれば、データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムのストレージ制御装置として動作するコンピュータに、ストレージ装置におけるデータの処理を指示するホスト装置、及び他のノードに含まれるストレージ制御装置との通信を制御し、任意のノードに含まれるストレージ装置におけるデータの処理についての指示を含む命令をホスト装置から受信した場合に当該命令を全ての他のノードに含まれるストレージ制御装置へ送信するように制御する処理を実行させる、プログラムが提供される。
【発明の効果】
【００１４】
本発明によれば、命令の転送を高速化することが可能になる。
【図面の簡単な説明】
【００１５】
【図１】第１実施形態に係るストレージシステムの一例を示した図である。
【図２】第２実施形態に係るストレージシステムの一例を示した図である。
【図３】第２実施形態に係るホストコンピュータの機能を実現可能なハードウェアの一例を示した図である。
【図４】第２実施形態に係るコントローラ及びストレージの機能を実現可能なハードウェアの一例を示した図である。
【図５】書き込み命令に応じてコントローラが実行する処理の一例を示したシーケンス図である。
【図６】命令の一例を示した図である。
【図７】読み出し命令に応じてコントローラが実行する処理（退避領域にデータがある場合）の一例を示したシーケンス図である。
【図８】読み出し命令に応じてコントローラが実行する処理（退避領域にデータがない場合）の一例を示したシーケンス図である。
【図９】書き込み命令に応じてコントローラが実行する処理（命令の転送を含む処理）の一例を示したシーケンス図である。
【図１０】読み出し命令に応じてコントローラが実行する処理（命令の転送を含む処理；退避領域にデータがある場合）の一例を示したシーケンス図である。
【図１１】読み出し命令に応じてコントローラが実行する処理（命令の転送を含む処理；退避領域にデータがない場合）の一例を示したシーケンス図である。
【図１２】第２実施形態に係るコントローラが命令に応じて実行する処理の一例を示したシーケンス図である。
【図１３】第２実施形態に係る管理情報の一例を示した図である。
【図１４】第２実施形態に係る管理情報の更新方法について説明するための第１の図である。
【図１５】第２実施形態に係る管理情報の更新方法について説明するための第２の図である。
【図１６】第２実施形態に係る管理情報の更新方法について説明するための第３の図である。
【図１７】第２実施形態に係る管理情報の更新方法について説明するための第４の図である。
【図１８】第２実施形態に係るノードＡのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。
【図１９】第２実施形態に係るノードＢのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。
【図２０】第２実施形態に係るノードＣのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。
【図２１】第２実施形態に係るノードＡのコントローラが読み出し命令に応じて実行する処理の一例を示したフロー図である。
【図２２】第２実施形態に係るノードＢのコントローラが読み出し命令に応じて実行する処理の一例を示したフロー図である。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照しながら、本発明の実施形態について説明する。なお、本明細書及び図面において実質的に同一の機能を有する要素については、同一の符号を付することにより重複説明を省略する場合がある。
【００１７】
＜１．第１実施形態＞
図１を参照しながら、第１実施形態について説明する。図１は、第１実施形態に係るストレージシステムの一例を示した図である。
【００１８】
図１に例示したストレージシステムは、ノードＡ、Ｂ、Ｃを有する。
図１の例において、ノードＡは、データを記憶するストレージ装置２０Ａと、当該ストレージ装置２０Ａにおけるデータの処理を制御するストレージ制御装置１０Ａとを含む。ノードＢは、ストレージ装置２０Ｂと、当該ストレージ装置２０Ｂにおけるデータの処理を制御するストレージ制御装置１０Ｂとを含む。ノードＣは、データを記憶するストレージ装置２０Ｃと、当該ストレージ装置２０Ｃにおけるデータの処理を制御するストレージ制御装置１０Ｃとを含む。
【００１９】
なお、１つのノードに含まれるストレージ装置の数は１以上であってもよい。また、１つのノードに含まれるストレージ制御装置の数は１以上であってもよい。図１の例では、ノードが、ストレージ装置及びストレージ制御装置のハードウェアを単位として設定されているが、ノードの設定方法はこれに限定されない。
【００２０】
例えば、ストレージ装置が有する１以上の記録媒体に設定された１以上の論理的な記憶領域や、ストレージ制御装置が有する１以上のプロセッサに設定された１以上の論理的な演算リソースを単位としてノードが設定されていてもよい。また、ハードウェアを仮想化する技術を適用して２台のストレージ制御装置を３台以上の仮想的なストレージ制御装置として運用する場合、仮想的なストレージ制御装置を単位としてノードを設定することも可能である。同様に、ストレージ装置の仮想化にも対応可能である。但し、簡単のために図１の例に基づいて説明を進める。
【００２１】
ストレージ制御装置１０Ａは、通信部１１Ａ、制御部１２Ａ、及び記憶部１３Ａを有する。また、ストレージ装置２０Ａは、接続部２１Ａ、記録媒体２２Ａ、及び処理部２３Ａを有する。また、上位装置３０は、ストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの処理を指示する。なお、上位装置３０は、サーバ装置や端末装置などに代表されるコンピュータ（情報処理装置）の一例である。
【００２２】
なお、記憶部１３Ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。また、制御部１２Ａ及び処理部２３Ａは、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサである。但し、制御部１２Ａ及び処理部２３Ａは、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路であってもよい。制御部１２Ａは、例えば、記憶部１３Ａ又は他のメモリに記憶されたプログラムを実行する。また、処理部２３Ａは、例えば、記録媒体２２Ａ又は他のメモリに記憶されたプログラムを実行する。
【００２３】
通信部１１Ａは、他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃと通信する。例えば、通信部１１Ａは、任意のノードＡ、Ｂ、Ｃに含まれるストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの処理についての指示を含む命令Ｑを通信部１１Ａが上位装置３０から受信する。この場合、制御部１２Ａは、命令Ｑを全ての他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃへ送信するように通信部１１Ａを制御する。記憶部１３Ａは、データを一時的に格納する要素である。
【００２４】
接続部２１Ａは、ストレージ制御装置１０Ａに接続する要素である。例えば、接続部２１Ａは、ストレージ制御装置１０Ａと接続する要素である。記録媒体２２Ａは、データを格納する要素である。記録媒体２２Ａは、例えば、１台又は複数台のＨＤＤやＳＳＤ（Solid State Drive）、或いは、ＲＡＩＤ装置などである。処理部２３Ａは、ストレージ装置２０Ａによる制御を受けて記録媒体２２Ａに対するデータの書き込み処理又はデータの読み出し処理を実行する。
【００２５】
通信部１１Ａは、他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃから、任意のノードＡ、Ｂ、Ｃに含まれるストレージ装置２０Ａ、２０Ｂ、２０Ｃにおけるデータの書き込み処理についての指示及びデータを含む命令Ｑを受信することがある。この場合、制御部１２Ａは、通信部１１Ａが受信した命令Ｑを記憶部１３Ａに格納する。
【００２６】
また、通信部１１Ａは、他のノードＢ、Ｃに含まれるストレージ装置２０Ｂ、２０Ｃにおけるデータの読み出し処理についての指示を含む命令Ｑを受信することがある。この場合、制御部１２Ａは、当該指示の対象となるデータが記憶部１３Ａに格納されているとき、当該データを記憶部１３Ａから読み出して上位装置３０へ送信するように通信部１１Ａを制御する。
【００２７】
上記のように、通信部１１Ａは、ノードＡに含まれるストレージ装置２０Ａにおけるデータの書き込み処理についての指示及び当該データを含む命令Ｑを上位装置３０から受信することがある。この場合、制御部１２Ａは、命令Ｑを記憶部１３Ａに格納し、当該命令Ｑに対する応答を上位装置３０へ送信するように通信部１１Ａを制御する。また、制御部１２Ａは、当該応答の送信後に当該データを当該ストレージ装置２０Ａに格納する。このとき、制御部１２Ａは、ストレージ装置２０Ａに対する当該データの格納完了を示す完了通知を全ての他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃへ送信するように通信部１１Ａを制御する。
【００２８】
また、通信部１１Ａは、他のノードＢ、Ｃに含まれるストレージ制御装置１０Ｂ、１０Ｃから、当該他のノードＢ、Ｃに含まれるストレージ装置２０Ｂ、２０Ｃへのデータの格納完了を示す完了通知を受信することがある。この場合、制御部１２Ａは、当該データと同じデータを記憶部１３Ａから消去する。なお、当該データを消去するタイミングは、記憶部１３Ａへのデータ格納後、設定した時間が経過した後であってもよい。
【００２９】
上記のように、ノードＡのストレージ制御装置１０Ａが受信した命令Ｑが他のノードＢ、Ｃに含まれる全てのストレージ制御装置１０Ｂ、１０Ｃへと転送されることで、転送時に命令を解析して転送先を選択する処理を省略することができる。その結果、命令Ｑの転送処理を高速化することが可能になる。また、ストレージ制御装置１０Ａ、１０Ｂ、１０Ｃがいずれも命令Ｑのデータを保持することで、応答速度が速いストレージ制御装置が、読み出し要求に対して素早く応答できるようになる。
【００３０】
例えば、書き込み処理を実行中のストレージ制御装置に対して読み出し要求が発生した場合に、他のストレージ制御装置が上位装置３０へと応答することで、高速な応答が可能になる。なお、図１の例では、説明の都合上、上位装置３０が１つしか記載されていないが、複数の上位装置が含まれる場合には、複数の上位装置から書き込み命令や読み出し命令が様々なタイミングで各ノードに送信されることが予想される。第１実施形態に係る技術を適用すれば、このような状況において高い読み出し性能を実現することが可能になる。
【００３１】
以上、第１実施形態について説明した。
＜２．第２実施形態＞
次に、第２実施形態について説明する。
【００３２】
［２−１．ストレージシステム］
図２を参照しながら、第２実施形態に係るストレージシステムについて説明する。図２は、第２実施形態に係るストレージシステムの一例を示した図である。
【００３３】
図２に例示したストレージシステムは、ホストコンピュータ１００Ａ、１００Ｂ、及びノードＡ、Ｂ、Ｃを含む。また、ノードＡは、コントローラ２００Ａ、及びストレージ３００Ａを含む。同様に、ノードＢは、コントローラ２００Ｂ、及びストレージ３００Ｂを含む。ノードＣは、コントローラ２００Ｃ、及びストレージ３００Ｃを含む。
【００３４】
ホストコンピュータ１００Ａ、１００Ｂは上位装置の一例である。コントローラ２００Ａ、２００Ｂ、２００Ｃは、ストレージ制御装置の一例である。ストレージ３００Ａ、３００Ｂ、３００Ｃは、ストレージ装置の一例である。
【００３５】
なお、以下の説明において、ホストコンピュータ１００Ａ、１００Ｂを区別せずにホストコンピュータ１００と表記する場合がある。同様に、コントローラ２００Ａ、２００Ｂ、２００Ｃを区別せずにコントローラ２００と表記する場合がある。ストレージ３００Ａ、３００Ｂ、３００Ｃを区別せずにストレージ３００と表記する場合がある。
【００３６】
ホストコンピュータ１００Ａ、１００Ｂは、ネットワークＮＷを介してコントローラ２００Ａ、２００Ｂ、２００Ｃと通信することができる。ネットワークＮＷは、例えば、ＬＡＮ（Local Area Network）や光通信ネットワークなどである。
【００３７】
コントローラ２００Ａは、ＣＰＵ２０１Ａ、及びメモリ２０２Ａを有する。同様に、コントローラ２００Ｂは、ＣＰＵ２０１Ｂ、及びメモリ２０２Ｂを有する。コントローラ２００Ｃは、ＣＰＵ２０１Ｃ、及びメモリ２０２Ｃを有する。なお、ＣＰＵ２０１Ａ、２０１Ｂ、２０１Ｃに代えて、ＤＳＰなどのプロセッサ、或いは、ＡＳＩＣやＦＰＧＡなどの電子回路を利用しても、コントローラ２００Ａ、２００Ｂ、２００Ｃの機能を実現することができる。ＣＰＵ２０１Ａ、２０１Ｂ、２０１Ｃは、制御部の一例である。
【００３８】
メモリ２０２Ａ、２０２Ｂ、２０２Ｃは、例えば、ＲＡＭなどの揮発性記憶装置、或いは、ＨＤＤやフラッシュメモリなどの不揮発性記憶装置である。また、メモリ２０２Ａ、２０２Ｂ、２０２Ｃはそれぞれ、１以上の揮発性記憶装置、及び１以上の不揮発性記憶装置を組み合わせた記憶装置の集合体であってもよい。例えば、メモリ２０２Ａ、２０２Ｂ、２０２Ｃはそれぞれ、主記憶領域として利用する揮発性記憶装置、一時的にデータを格納する一時記憶領域として利用する不揮発性記憶装置、及びキャッシュメモリとして利用する揮発性記憶装置を含んでいてもよい。
【００３９】
ストレージ３００Ａ、３００Ｂ、３００Ｃは、例えば、それぞれ１以上のＨＤＤやＳＳＤを有する記憶装置、或いは、ＲＡＩＤ装置やＮＡＳ装置などの記憶装置である。ストレージ３００Ａにおけるデータの処理（書き込み処理、読み出し処理）は、コントローラ２００Ａにより制御される。同様に、ストレージ３００Ｂにおけるデータの処理（書き込み処理、読み出し処理）は、コントローラ２００Ｂにより制御される。ストレージ３００Ｃにおけるデータの処理（書き込み処理、読み出し処理）は、コントローラ２００Ｃにより制御される。
【００４０】
ところで、図２には、１つのノードに１組のコントローラ２００及びストレージ３００を含む例が示されているが、ノードの設定方法はこれに限定されない。例えば、１つのノードに含まれるコントローラ２００の数は２以上であってもよい。また、１つのノードに含まれるストレージ３００の数は２以上であってもよい。
【００４１】
また、図２の例では、コントローラ２００、ストレージ３００というハードウェアを単位としてノードが設定されているが、ノードの設定方法はこれに限定されない。
例えば、ストレージ３００が有する記憶装置に設定された１以上の論理的な記憶領域や、コントローラ２００が有するプロセッサに設定された１以上の論理的な演算リソースを単位としてノードを設定することも可能である。また、ハードウェアを仮想化する技術を適用して２以上のコントローラ２００を３以上の仮想的なコントローラとして運用し、仮想的なコントローラを単位としてノードを設定することも可能である。同様に、ストレージ３００の仮想化にも対応可能である。
【００４２】
但し、以下の説明では、簡単のために図２に例示したストレージシステムに基づいて説明を進める。
以上、ストレージシステムについて説明した。
【００４３】
［２−２．ハードウェア］
次に、ホストコンピュータ１００、コントローラ２００、及びストレージ３００のハードウェアについて説明する。
【００４４】
（ホストコンピュータ）
図３を参照しながら、ホストコンピュータ１００の機能を実現可能なハードウェアについて説明する。図３は、第２実施形態に係るホストコンピュータの機能を実現可能なハードウェアの一例を示した図である。
【００４５】
ホストコンピュータ１００が有する機能は、例えば、図３に示す情報処理装置のハードウェア資源を用いて実現することが可能である。つまり、ホストコンピュータ１００が有する機能は、コンピュータプログラムを用いて図３に示すハードウェアを制御することにより実現される。
【００４６】
図３に示すように、このハードウェアは、主に、ＣＰＵ９０２と、ＲＯＭ（Read Only Memory）９０４と、ＲＡＭ９０６と、ホストバス９０８と、ブリッジ９１０とを有する。さらに、このハードウェアは、外部バス９１２と、インターフェース９１４と、入力部９１６と、出力部９１８と、記憶部９２０と、ドライブ９２２と、接続ポート９２４と、通信部９２６とを有する。
【００４７】
ＣＰＵ９０２は、例えば、演算処理装置又は制御装置として機能し、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、又はリムーバブル記録媒体９２８に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ＲＯＭ９０４は、ＣＰＵ９０２に読み込まれるプログラムや演算に用いるデータなどを格納する記憶装置の一例である。ＲＡＭ９０６には、例えば、ＣＰＵ９０２に読み込まれるプログラムや、そのプログラムを実行する際に変化する各種パラメータなどが一時的又は永続的に格納される。
【００４８】
これらの要素は、例えば、高速なデータ伝送が可能なホストバス９０８を介して相互に接続される。一方、ホストバス９０８は、例えば、ブリッジ９１０を介して比較的データ伝送速度が低速な外部バス９１２に接続される。また、入力部９１６としては、例えば、マウス、キーボード、タッチパネル、タッチパッド、ボタン、スイッチ、及びレバーなどが用いられる。さらに、入力部９１６としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラが用いられることもある。
【００４９】
出力部９１８としては、例えば、ＣＲＴ（Cathode Ray Tube）、ＬＣＤ（Liquid Crystal Display）、ＰＤＰ（Plasma Display Panel）、又はＥＬＤ（Electro-Luminescence Display）などのディスプレイ装置が用いられる。また、出力部９１８として、スピーカやヘッドホンなどのオーディオ出力装置、又はプリンタなどが用いられることもある。つまり、出力部９１８は、情報を視覚的又は聴覚的に出力することが可能な装置である。
【００５０】
記憶部９２０は、各種のデータを格納するための装置である。記憶部９２０としては、例えば、ＨＤＤなどの磁気記憶デバイスが用いられる。また、記憶部９２０として、ＳＳＤやＲＡＭディスクなどの半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイスなどが用いられてもよい。
【００５１】
ドライブ９２２は、着脱可能な記録媒体であるリムーバブル記録媒体９２８に記録された情報を読み出し、又はリムーバブル記録媒体９２８に情報を書き込む装置である。リムーバブル記録媒体９２８としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリなどが用いられる。
【００５２】
接続ポート９２４は、例えば、ＵＳＢ（Universal Serial Bus）ポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ（Small Computer System Interface）、ＲＳ−２３２Ｃポート、又は光オーディオ端子など、外部接続機器９３０を接続するためのポートである。外部接続機器９３０としては、例えば、プリンタなどが用いられる。
【００５３】
通信部９２６は、ネットワーク９３２に接続するための通信デバイスである。通信部９２６としては、例えば、有線又は無線ＬＡＮ用の通信回路、ＷＵＳＢ（Wireless USB）用の通信回路、光通信用の通信回路やルータ、ＡＤＳＬ（Asymmetric Digital Subscriber Line）用の通信回路やルータ、携帯電話ネットワーク用の通信回路などが用いられる。通信部９２６に接続されるネットワーク９３２は、有線又は無線により接続されたネットワークであり、例えば、インターネット、ＬＡＮ、放送網、衛星通信回線などを含む。
【００５４】
（コントローラ及びストレージ）
次に、図４を参照しながら、コントローラ２００及びストレージ３００の機能を実現可能なハードウェアについて説明する。図４は、第２実施形態に係るコントローラ及びストレージの機能を実現可能なハードウェアの一例を示した図である。
【００５５】
図４に示すように、コントローラ２００は、ＣＰＵ２０１、及びメモリ２０２を有する。なお、コントローラ２００に搭載されるＣＰＵ２０１の数は２以上であってもよい。また、複数の演算コアを搭載したＣＰＵ２０１を利用することも可能である。また、ＣＰＵ２０１に代えてＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどを利用することもできる。
【００５６】
メモリ２０２は、主記憶領域２２１、一時記憶領域２２２、及び退避領域２２３を含む。主記憶領域２２１は、例えば、データの読み出し速度及びデータの書き込み速度が高速な揮発性記憶装置又は当該揮発性記憶装置に設定された記憶領域である。一時記憶領域２２２は、例えば、ＮＶＲＡＭ（Non-Volatile RAM）などの不揮発性記憶装置又は当該不揮発性記憶装置に設定された記憶領域である。退避領域２２３は、例えば、キャッシュメモリとして利用可能な揮発性記憶装置又は不揮発性記憶装置である。
【００５７】
以下の説明において、コントローラ２００Ａの主記憶領域２２１を主記憶領域２２１Ａ、コントローラ２００Ｂの主記憶領域２２１を主記憶領域２２１Ｂ、コントローラ２００Ｃの主記憶領域２２１を主記憶領域２２１Ｃと表記する場合がある。同様に、コントローラ２００Ａの一時記憶領域２２２を一時記憶領域２２２Ａ、コントローラ２００Ｂの一時記憶領域２２２を一時記憶領域２２２Ｂ、コントローラ２００Ｃの一時記憶領域２２２を一時記憶領域２２２Ｃと表記する場合がある。コントローラ２００Ａの退避領域２２３を退避領域２２３Ａ、コントローラ２００Ｂの退避領域２２３を退避領域２２３Ｂ、コントローラ２００Ｃの退避領域２２３を退避領域２２３Ｃと表記する場合がある。
【００５８】
ストレージ３００は、ＲＡＩＤコントローラ３０１、及びディスクアレイ３０２を有する。ディスクアレイ３０２は、ＨＤＤ３２１、３２２、３２３を有する。ＲＡＩＤコントローラ３０１は、例えば、ディスクアレイ３０２に対して挿脱される物理ボリュームの管理や、ディスクアレイ３０２に設定される論理ボリュームの管理を実施する。また、ＲＡＩＤコントローラ３０１は、コントローラ２００による制御に応じてディスクアレイ３０２に対するデータの書き込み処理や読み出し処理を実行する。
【００５９】
以上、ハードウェアについて説明した。
［２−３．退避領域の利用］
次に、退避領域を利用した書き込み処理及び読み出し処理について説明する。
【００６０】
（書き込み処理）
図５及び図６を参照しながら、退避領域を利用した書き込み処理について説明する。図５は、書き込み命令に応じてコントローラが実行する処理の一例を示したシーケンス図である。図６は、命令の一例を示した図である。
【００６１】
（Ｓ１１）ホストコンピュータ１００は、コントローラ２００のＣＰＵ２０１に対して書き込み命令を送信する。命令には、対象のデータと、指示する処理の内容を示す指示情報とが含まれる。
【００６２】
例えば、命令は、図６に示すように、命令種別、指定ノード、ファイル名、及びデータを有する。命令種別は、書き込み命令であるか、読み出し命令であるかを特定する情報である。指定ノードは、指示した処理を実行するノードを特定する情報である。ファイル名は、指示した処理の対象となるデータを特定する情報である。データは、指示した処理の対象となるデータ本体である。なお、命令種別、指定ノード、ファイル名の組を指示情報と呼ぶことにする。
【００６３】
図６に例示した命令は、命令種別が「書き込み」、指定ノードが「Ａ」、ファイル名が「ファイルＸ」、データが「０１００１０１０１」である。この命令は、ノードＡに対し、ファイルＸとして特定されるデータ０１００１０１０１を書き込むように指示する書き込み命令である。但し、読み出し命令には、データが含まれず、「読み出し」を特定する命令種別、指定ノード、及び読み出し対象のファイル名を含む指示情報が含まれる。
【００６４】
図５の例は書き込み処理を示しているため、Ｓ１１において、データ及び指示情報を含む書き込み命令がホストコンピュータ１００からＣＰＵ２０１へと送信される。また、図５の例では、コントローラ２００を含むノードを指定して書き込み処理を指示する書き込み命令がホストコンピュータ１００から送信されたものとする。
【００６５】
（Ｓ１２）ＣＰＵ２０１は、Ｓ１１で受信した書き込み命令からデータを抽出し、抽出したデータを一時記憶領域２２２に格納する。
（Ｓ１３）ＣＰＵ２０１は、Ｓ１２で一時記憶領域２２２に格納したデータを退避領域２２３へ退避する。退避領域２２３へ退避したことで、一時記憶領域２２２に格納されたデータが消去された後でも、ＣＰＵ２０１は、そのデータを退避領域２２３から読み出すことができる。
【００６６】
（Ｓ１４）ＣＰＵ２０１は、Ｓ１１で受信した書き込み命令に対する応答として、その書き込み命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。このように、ＣＰＵ２０１は、退避領域２２３へのデータの退避が完了した直後に完了通知をホストコンピュータ１００に送信する。
【００６７】
（Ｓ１５）ＣＰＵ２０１は、一時記憶領域２２２のデータをストレージ３００へ格納する。なお、ストレージ３００へデータを格納する処理は、ホストコンピュータ１００への応答が完了した後、任意のタイミングで実行してよい。つまり、応答のタイミングと、ストレージ３００へデータを格納するタイミングは非同期でよい。例えば、ＣＰＵ２０１又はストレージ３００の負荷状況に応じて、負荷が低い期間にＳ１５の処理が実行される。Ｓ１５の処理が完了すると、図５に示した一連の処理は終了する。
【００６８】
（読み出し処理）
次に、図７及び図８を参照しながら、退避領域を利用した読み出し処理について説明する。図７は、読み出し命令に応じてコントローラが実行する処理（退避領域にデータがある場合）の一例を示したシーケンス図である。図８は、読み出し命令に応じてコントローラが実行する処理（退避領域にデータがない場合）の一例を示したシーケンス図である。
【００６９】
（退避領域にデータがある場合）
図７を参照する。図７の例は、退避領域にデータがある場合の処理を示している。
（Ｓ２１）ホストコンピュータ１００は、コントローラ２００のＣＰＵ２０１に対して読み出し命令を送信する。読み出し命令には、指示情報が含まれる。例えば、読み出し命令には、命令種別「読み出し」、指定ノード「Ａ」、ファイル名「ファイルＸ」などの情報が含まれる。
【００７０】
（Ｓ２２）ＣＰＵ２０１は、Ｓ２１で受信した読み出し命令を一時記憶領域２２２に格納する。
（Ｓ２３）ＣＰＵ２０１は、一時記憶領域２２２に格納した読み出し命令に含まれる指示情報を参照し、読み出し対象のデータを特定するファイル名を抽出する。そして、ＣＰＵ２０１は、退避領域２２３に格納されているデータから、抽出したファイル名のデータを探索する。なお、図７の例では、抽出したファイル名のデータが退避領域２２３に格納されており、そのデータがＣＰＵ２０１により特定できたものとする。
【００７１】
（Ｓ２４）ＣＰＵ２０１は、Ｓ２３で特定したデータを主記憶領域２２１へ格納する。
（Ｓ２５）ＣＰＵ２０１は、読み出し命令に対する応答として、Ｓ２４で主記憶領域２２１に格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ２５の処理が完了すると、図７に示した一連の処理は終了する。
【００７２】
（退避領域にデータがない場合）
図８を参照する。図８の例は、退避領域にデータがない場合の処理を示している。
（Ｓ３１）ホストコンピュータ１００は、コントローラ２００のＣＰＵ２０１に対して読み出し命令を送信する。読み出し命令には、指示情報が含まれる。例えば、読み出し命令には、命令種別「読み出し」、指定ノード「Ａ」、ファイル名「ファイルＸ」などの情報が含まれる。
【００７３】
（Ｓ３２）ＣＰＵ２０１は、Ｓ３１で受信した読み出し命令を一時記憶領域２２２に格納する。
（Ｓ３３）ＣＰＵ２０１は、一時記憶領域２２２に格納した読み出し命令に含まれる指示情報を参照し、読み出し対象のデータを特定するファイル名を抽出する。そして、ＣＰＵ２０１は、退避領域２２３に格納されているデータから、抽出したファイル名のデータを探索する。なお、図８の例では、抽出したファイル名のデータが退避領域２２３に格納されておらず、そのデータがＣＰＵ２０１により特定できなかったものとする。
【００７４】
（Ｓ３４）ＣＰＵ２０１は、ストレージ３００に格納されているデータから、Ｓ３３で抽出したファイル名のデータを探索する。なお、図８の例では、抽出したファイル名のデータがストレージ３００に格納されており、そのデータがＣＰＵ２０１により特定できたものとする。
【００７５】
（Ｓ３５）ＣＰＵ２０１は、Ｓ３４で特定したデータを主記憶領域２２１及び退避領域２２３へ格納する。なお、読み出しの対象とされたデータは近い将来に再び読み出される可能性があるため、ＣＰＵ２０１は、ストレージ３００から読み出したデータを退避領域２２３へも格納し、高速に読み出せるようにする。
【００７６】
（Ｓ３６）ＣＰＵ２０１は、読み出し命令に対する応答として、Ｓ３５で主記憶領域２２１に格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ３６の処理が完了すると、図８に示した一連の処理は終了する。
【００７７】
以上、退避領域を利用した処理について説明した。上記のように、退避領域を利用すると、退避領域にデータが格納されている場合には、ストレージからデータを読み出す処理を省略し、退避領域から読み出したデータを用いて応答することができる。その結果、ホストコンピュータへの応答を高速化することが可能になる。
【００７８】
［２−４．命令の転送］
次に、命令の転送を伴う書き込み処理及び読み出し処理について説明する。
単一ノードの場合や、対象のノードに対して命令が直接送られる場合には上述した図７や図８の例に従ってデータの書き込み処理や読み出し処理を実現することができる。しかし、複数のノードを含むストレージシステムでは、対象のノード以外のノードへ命令が送られることがある。この場合、命令を受けたノードは、対象のノードに対して命令を転送する。ここでは、このような命令の転送を伴う処理について説明する。なお、簡単のため、２つのノードＡ、Ｂを対象として説明する。
【００７９】
（書き込み処理）
図９を参照しながら、命令の転送を伴う書き込み処理について説明する。図９は、書き込み命令に応じてコントローラが実行する処理（命令の転送を含む処理）の一例を示したシーケンス図である。
【００８０】
（Ｓ４１）ホストコンピュータ１００は、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１Ａに対して書き込み命令を送信する。書き込み命令には、対象のデータと、指示情報とが含まれる。なお、この書き込み命令には、命令種別「書き込み」、指定ノード「Ｂ」、ファイル名「ファイルＸ」を示す指示情報が含まれているものとする。
【００８１】
（Ｓ４２）ＣＰＵ２０１Ａは、書き込み命令に含まれる指示情報を解析し、書き込み命令の宛先となるノードのコントローラを認識する。図９の例では、ノードＢに属するコントローラ２００Ｂが、ＣＰＵ２０１Ａにより宛先として認識される。
【００８２】
（Ｓ４３）ＣＰＵ２０１Ａは、コントローラ２００ＢのＣＰＵ２０１Ｂに対して書き込み命令を転送する。
（Ｓ４４）ＣＰＵ２０１Ｂは、書き込み命令からデータを抽出し、抽出したデータを一時記憶領域２２２Ｂに格納する。
【００８３】
（Ｓ４５）ＣＰＵ２０１Ｂは、Ｓ４４で一時記憶領域２２２Ｂに格納したデータを退避領域２２３Ｂへ退避する。退避領域２２３Ｂへ退避したことで、一時記憶領域２２２Ｂに格納されたデータが消去された後でも、ＣＰＵ２０１Ｂは、そのデータを退避領域２２３Ｂから読み出すことができる。
【００８４】
（Ｓ４６）ＣＰＵ２０１Ｂは、書き込み命令に対する応答として、その書き込み命令に対する処理が完了した旨を示す完了通知をＣＰＵ２０１Ａに送信する。このように、ＣＰＵ２０１Ｂは、退避領域２２３Ｂへのデータの退避が完了した直後に完了通知をＣＰＵ２０１Ａに送信する。
【００８５】
（Ｓ４７）ＣＰＵ２０１Ａは、Ｓ４１で受信した書き込み命令に対する応答として、その書き込み命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。
【００８６】
（Ｓ４８）ＣＰＵ２０１Ｂは、一時記憶領域２２２Ｂのデータをストレージ３００Ｂへ格納する。なお、ストレージ３００Ｂへデータを格納する処理は、ＣＰＵ２０１Ａへの応答が完了した後、任意のタイミングで実行してよい。つまり、応答のタイミングと、ストレージ３００Ｂへデータを格納するタイミングは非同期でよい。例えば、ＣＰＵ２０１Ｂ又はストレージ３００Ｂの負荷状況に応じて、負荷が低い期間にＳ４８の処理が実行される。Ｓ４８の処理が完了すると、図９に示した一連の処理は終了する。
【００８７】
（読み出し処理）
次に、命令の転送を伴う読み出し処理について説明する。図１０は、読み出し命令に応じてコントローラが実行する処理（命令の転送を含む処理：退避領域にデータがある場合）の一例を示したシーケンス図である。図１１は、読み出し命令に応じてコントローラが実行する処理（命令の転送を含む処理：退避領域にデータがない場合）の一例を示したシーケンス図である。
【００８８】
（退避領域にデータがある場合）
図１０を参照する。図１０の例は、退避領域にデータがある場合の処理を示している。
（Ｓ５１）ホストコンピュータ１００は、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１Ａに対して読み出し命令を送信する。読み出し命令には、指示情報が含まれる。例えば、読み出し命令には、命令種別「読み出し」、指定ノード「Ｂ」、ファイル名「ファイルＸ」などの情報が含まれる。
【００８９】
（Ｓ５２）ＣＰＵ２０１Ａは、読み出し命令に含まれる指示情報を解析し、読み出し命令の宛先となるノードのコントローラを認識する。図１０の例では、ノードＢに属するコントローラ２００Ｂが、ＣＰＵ２０１Ａにより宛先として認識される。
【００９０】
（Ｓ５３）ＣＰＵ２０１Ａは、コントローラ２００ＢのＣＰＵ２０１Ｂに対して読み出し命令を転送する。
（Ｓ５４）ＣＰＵ２０１Ｂは、読み出し命令を一時記憶領域２２２Ｂに格納する。
【００９１】
（Ｓ５５）ＣＰＵ２０１Ｂは、一時記憶領域２２２Ｂに格納した読み出し命令に含まれる指示情報を参照し、読み出し対象のデータを特定するファイル名を抽出する。そして、ＣＰＵ２０１Ｂは、退避領域２２３Ｂに格納されているデータから、抽出したファイル名のデータを探索する。なお、図１０の例では、抽出したファイル名のデータが退避領域２２３Ｂに格納されており、そのデータがＣＰＵ２０１Ｂにより特定できたものとする。
【００９２】
（Ｓ５６）ＣＰＵ２０１Ｂは、Ｓ５５で特定したデータを主記憶領域２２１Ｂへ格納する。
（Ｓ５７）ＣＰＵ２０１Ｂは、読み出し命令に対する応答として、Ｓ５６で主記憶領域２２１Ｂに格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をコントローラ２００ＡのＣＰＵ２０１Ａに送信する。
【００９３】
（Ｓ５８）ＣＰＵ２０１Ａは、読み出し命令に対する応答として、ＣＰＵ２０１Ｂから受信したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ５８の処理が完了すると、図１０に示した一連の処理は終了する。
【００９４】
（退避領域にデータがない場合）
図１１を参照する。図１１の例は、退避領域にデータがない場合の処理を示している。
（Ｓ６１）ホストコンピュータ１００は、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１Ａに対して読み出し命令を送信する。読み出し命令には、指示情報が含まれる。例えば、読み出し命令には、命令種別「読み出し」、指定ノード「Ｂ」、ファイル名「ファイルＸ」などの情報が含まれる。
【００９５】
（Ｓ６２）ＣＰＵ２０１Ａは、読み出し命令に含まれる指示情報を解析し、読み出し命令の宛先となるノードのコントローラを認識する。図１１の例では、ノードＢに属するコントローラ２００Ｂが、ＣＰＵ２０１Ａにより宛先として認識される。
【００９６】
（Ｓ６３）ＣＰＵ２０１Ａは、コントローラ２００ＢのＣＰＵ２０１Ｂに対して読み出し命令を転送する。
（Ｓ６４）ＣＰＵ２０１Ｂは、読み出し命令を一時記憶領域２２２Ｂに格納する。
【００９７】
（Ｓ６５）ＣＰＵ２０１Ｂは、一時記憶領域２２２Ｂに格納した読み出し命令に含まれる指示情報を参照し、読み出し対象のデータを特定するファイル名を抽出する。そして、ＣＰＵ２０１Ｂは、退避領域２２３Ｂに格納されているデータから、抽出したファイル名のデータを探索する。なお、図１１の例では、抽出したファイル名のデータが退避領域２２３Ｂに格納されておらず、そのデータがＣＰＵ２０１Ｂにより特定できなかったものとする。
【００９８】
（Ｓ６６）ＣＰＵ２０１Ｂは、ストレージ３００Ｂに格納されているデータから、Ｓ６５で抽出したファイル名のデータを探索する。なお、図１１の例では、抽出したファイル名のデータがストレージ３００に格納されており、そのデータがＣＰＵ２０１Ｂにより特定できたものとする。
【００９９】
（Ｓ６７）ＣＰＵ２０１Ｂは、Ｓ６６で特定したデータを主記憶領域２２１Ｂ及び退避領域２２３Ｂへ格納する。なお、読み出しの対象とされたデータは近い将来に再び読み出される可能性があるため、ＣＰＵ２０１Ｂは、ストレージ３００Ｂから読み出したデータを退避領域２２３Ｂへも格納し、高速に読み出せるようにする。
【０１００】
（Ｓ６８）ＣＰＵ２０１Ｂは、読み出し命令に対する応答として、Ｓ６７で主記憶領域２２１Ｂに格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をコントローラ２００ＡのＣＰＵ２０１Ａに送信する。
【０１０１】
（Ｓ６９）ＣＰＵ２０１Ａは、読み出し命令に対する応答として、ＣＰＵ２０１Ｂから受信したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ６９の処理が完了すると、図１１に示した一連の処理は終了する。
【０１０２】
以上、命令の転送を伴う処理について説明した。上記のように、命令を受けたノード（図９〜図１１の例ではノードＡ）が命令を転送する際に命令を解析して宛先を認識する処理が生じている。この処理を省略できれば、より高速に命令を転送することができる。また、ノードＡが単に命令を転送するだけでなく、その命令を利用することができれば、より効率的な処理を実現することができる。以下、命令の転送を高速化する方法、及び処理を効率化する方法について説明する。
【０１０３】
［２−５．全ノード転送方式］
次に、命令を受けたノードのコントローラが他のノードのコントローラ全てに命令を転送する方式（以下、全ノード転送方式）について説明する。以下では、３つのノードＡ、Ｂ、Ｃを考慮して説明を進める。
【０１０４】
（転送方式）
図１２を参照しながら、全ノード転送方式に係る命令の転送処理について説明する。図１２は、第２実施形態に係るコントローラが命令に応じて実行する処理の一例を示したシーケンス図である。なお、図１２の例では、命令を受けるノードのコントローラ（ノードコントローラ）としてノードＡのコントローラ２００Ａが選択されているものとする。また、ノードコントローラは、自身が管理するノード以外のノードを指定する命令を受けた場合、ホストコンピュータ１００に対してエラーを通知する。
【０１０５】
（Ｓ７１、Ｓ７２、Ｓ７３）ホストコンピュータ１００は、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１Ａに対して命令を送信する。この命令を受信したＣＰＵ２０１Ａは、その命令を解析せず、全ての他のノードに属するコントローラ（コントローラ２００Ｂ、２００Ｃ）に対して命令を転送する。
【０１０６】
（Ｓ７４、Ｓ７５、Ｓ７６）ＣＰＵ２０１Ａは、命令の転送後、その命令に対する処理を実行する。また、ＣＰＵ２０１Ａから命令を受信したＣＰＵ２０１Ｂ、２０１Ｃは、それぞれ命令に対する処理を実行する。処理の完了及びホストコンピュータ１００への応答が終了すると、図１２に示した一連の処理は終了する。
【０１０７】
上記のように、ホストコンピュータから受けた命令を全ての他のノードに転送することとすれば、転送先を選択するために命令を解析する処理を省略することができる。つまり、無条件に全ノードへ命令をそのまま転送するのであれば、転送時に行う解析処理が不要になり、転送処理を高速化することができる。結果として、命令を受けてから、転送後に実行する処理の開始までの時間を短縮することができる。
【０１０８】
（管理情報）
上記のように、全ノード転送方式によれば、全てのノードが命令を保持できるようになる。また、全てのノードが命令に対して処理を実行できるようになる。そこで、命令に対する処理の実行状況や、命令が対象とするデータの格納状況を管理できれば、後続の命令に対する処理の効率化が期待できる。ここでは、こうした処理の実行状況やデータの格納状況を管理する管理情報の例及び管理情報の更新方法について述べる。
【０１０９】
以下、図１３〜図１７を参照しながら、管理情報について説明する。
図１３は、第２実施形態に係る管理情報の一例を示した図である。図１４は、第２実施形態に係る管理情報の更新方法について説明するための第１の図である。図１５は、第２実施形態に係る管理情報の更新方法について説明するための第２の図である。図１６は、第２実施形態に係る管理情報の更新方法について説明するための第３の図である。図１７は、第２実施形態に係る管理情報の更新方法について説明するための第４の図である。
【０１１０】
図１３は、ノードＡに属するコントローラ２００Ａが保持する管理情報の例を示している。この管理情報は、例えば、一時記憶領域２２２Ａに格納される。図１３に示すように、管理情報は、レコードを特定する識別番号（Ｎｏ．）、命令の対象となるノードを特定する指定ノード、命令の対象となるデータを特定するファイル名、及び、命令の対象となるデータの格納場所や状況を特定するデータ格納情報を含む。
【０１１１】
例えば、Ｎｏ．００１のレコードには、指定ノード「ノードＡ」、ファイル名「ファイルＸ」、データ格納情報「データ本体」と記載されている。このレコードは、処理を実行するノードとしてノードＡを指定する命令に応じて、ファイルＸで特定されるデータが退避領域２２３Ａに格納されていることを示している。なお、データ格納情報「データ本体」は、データ本体が退避領域２２３に格納されていることを示している。
【０１１２】
また、Ｎｏ．００２のレコードには、指定ノード「ノードＢ」、ファイル名「ファイルＹ」、データ格納情報「ノードＢ（書き込み完了）」と記載されている。このレコードは、処理を実行するノードとしてノードＢを指定する命令に応じて、ファイルＹで特定されるデータがノードＢに属するストレージ３００Ｂに既に書き込み済みであることを示している。なお、データ格納情報「ノードＢ（書き込み完了）」は、ノードＢのストレージ３００Ｂにデータが書き込み完了していることを示している。
【０１１３】
また、Ｎｏ．００３のレコードには、指定ノード「ノードＡ」、ファイル名「ファイルＺ」、データ格納情報「ストレージ内の格納位置」と記載されている。このレコードは、処理を実行するノードとしてノードＡを指定する命令に応じて、ファイルＺで特定されるデータがストレージ３００Ａに格納されていることを示している。なお、データ格納情報「ストレージ内の格納位置」は、ストレージ３００Ａにおけるデータの格納位置を特定するアドレスやポインタなどの情報である。
【０１１４】
ここで、管理情報の更新方法について説明する。
（ノードＡ宛ての書き込み命令をノードＡが受けた場合＃１）
図１４を参照する。図１４の例は、ノードＡ宛ての書き込み命令をノードＡが受けた場合にノードＡのコントローラ２００Ａが実行する管理情報の更新処理を示している。なお、管理情報の更新処理は、主にＣＰＵ２０１Ａにより実行される。また、図１３に例示したＮｏ．００１のレコードを更新する処理について説明する。
【０１１５】
（Ｓ１０１）ＣＰＵ２０１Ａは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ａは、図１４に示すように、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。なお、ＣＰＵ２０１Ａは、書き込み命令の受信後、一時記憶領域２２２Ａから退避領域２２３Ａへデータを退避し、ホストコンピュータ１００へ応答する。そのため、データ格納情報は「データ本体」となる。
【０１１６】
（Ｓ１０２）ＣＰＵ２０１Ａは、書き込み命令を解析し、書き込み命令の宛先を認識する。図１４の例では「ノードＡ」が宛先であるため、この時点で、ＣＰＵ２０１Ａは、指定ノードを「空白」に設定する。
【０１１７】
（Ｓ１０３）ＣＰＵ２０１Ａは、ホストコンピュータ１００への応答後、一時記憶領域２２２Ａに格納したデータをストレージ３００Ａに格納する。ストレージ３００Ａへデータを格納し終えた後、ＣＰＵ２０１Ａは、データを格納したストレージ３００Ａ内の位置を特定する情報でデータ格納情報を書き換える。Ｓ１０３の処理が完了すると、図１４に示した一連の処理は終了する。
【０１１８】
（ノードＡ宛ての書き込み命令をノードＡが受けた場合＃２）
図１５を参照する。図１５の例は、ノードＡ宛ての書き込み命令をノードＡが受けた場合にノードＢのコントローラ２００Ｂが実行する管理情報の更新処理を示している。なお、管理情報の更新処理は、主にＣＰＵ２０１Ｂにより実行される。
【０１１９】
（Ｓ１１１）ＣＰＵ２０１Ｂは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ｂは、図１５に示すように、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。なお、ＣＰＵ２０１Ｂは、書き込み命令の受信後、一時記憶領域２２２Ｂから退避領域２２３Ｂへデータを退避し、ホストコンピュータ１００へ応答する。そのため、データ格納情報は「データ本体」となる。
【０１２０】
（Ｓ１１２）ＣＰＵ２０１Ｂは、書き込み命令を解析し、書き込み命令の宛先を認識する。図１５の例では「ノードＡ」が宛先であるため、ＣＰＵ２０１Ｂは、指定ノードを「ノードＡ」のままとする。
【０１２１】
（Ｓ１１３）コントローラ２００ＡのＣＰＵ２０１Ａは、ホストコンピュータ１００への応答後、一時記憶領域２２２Ａに格納したデータをストレージ３００Ａに格納する。ストレージ３００Ａへデータを格納し終えた後、ＣＰＵ２０１Ａは、データの格納を完了した旨を示す格納完了をＣＰＵ２０１Ｂに通知する。この格納完了を受けたＣＰＵ２０１Ｂは、「ノードＡ（書き込み完了）」でデータ格納情報を書き換える。さらに、ＣＰＵ２０１Ｂは、指定ノードを「空白」に設定する。Ｓ１１３の処理が完了すると、図１５に示した一連の処理は終了する。
【０１２２】
（ノードＢ宛ての書き込み命令をノードＡが受けた場合＃１）
図１６を参照する。図１６の例は、ノードＢ宛ての書き込み命令をノードＡが受けた場合にノードＡのコントローラ２００Ａが実行する管理情報の更新処理を示している。なお、管理情報の更新処理は、主にＣＰＵ２０１Ａにより実行される。
【０１２３】
（Ｓ１２１）ＣＰＵ２０１Ａは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ａは、図１６に示すように、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。なお、ＣＰＵ２０１Ａは、書き込み命令の受信後、一時記憶領域２２２Ａから退避領域２２３Ａへデータを退避し、ホストコンピュータ１００へ応答する。そのため、データ格納情報は「データ本体」となる。
【０１２４】
（Ｓ１２２）ＣＰＵ２０１Ａは、書き込み命令を解析し、書き込み命令の宛先を認識する。図１６の例では「ノードＢ」が宛先であるため、ＣＰＵ２０１Ａは、指定ノードを「ノードＢ」のままとする。
【０１２５】
（Ｓ１２３）コントローラ２００ＢのＣＰＵ２０１Ｂは、一時記憶領域２２２Ｂに格納したデータをストレージ３００Ｂに格納する。ストレージ３００Ｂへデータを格納し終えた後、ＣＰＵ２０１Ｂは、データの格納を完了した旨を示す格納完了をＣＰＵ２０１Ａに通知する。この格納完了を受けたＣＰＵ２０１Ａは、「ノードＢ（書き込み完了）」にデータ格納情報を書き換える。さらに、ＣＰＵ２０１Ａは、指定ノードを「空白」に設定する。Ｓ１２３の処理が完了すると、図１６に示した一連の処理は終了する。
【０１２６】
（ノードＢ宛ての書き込み命令をノードＡが受けた場合＃２）
図１７を参照する。図１７の例は、ノードＢ宛ての書き込み命令をノードＡが受けた場合にノードＢのコントローラ２００Ｂが実行する管理情報の更新処理を示している。なお、管理情報の更新処理は、主にＣＰＵ２０１Ｂにより実行される。
【０１２７】
（Ｓ１３１）ＣＰＵ２０１Ｂは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ｂは、図１７に示すように、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。なお、ＣＰＵ２０１Ｂは、書き込み命令の受信後、一時記憶領域２２２Ｂから退避領域２２３Ｂへデータを退避し、ＣＰＵ２０１Ａへ応答する。そのため、データ格納情報は「データ本体」となる。
【０１２８】
（Ｓ１３２）ＣＰＵ２０１Ｂは、書き込み命令を解析し、書き込み命令の宛先を認識する。図１７の例では「ノードＢ」が宛先であるため、この時点で、ＣＰＵ２０１Ｂは、指定ノードを「空白」に設定する。
【０１２９】
（Ｓ１３３）ＣＰＵ２０１Ｂは、コントローラ２００ＡのＣＰＵ２０１Ａへの応答後、一時記憶領域２２２Ｂに格納したデータをストレージ３００Ｂに格納する。ストレージ３００Ｂへデータを格納し終えた後、ＣＰＵ２０１Ｂは、データを格納したストレージ３００Ｂ内の位置を特定する情報でデータ格納情報を書き換える。Ｓ１３３の処理が完了すると、図１７に示した一連の処理は終了する。
【０１３０】
上記のように、管理情報を利用することで、自ノードのストレージに格納されるデータ、及び自ノードが命令を受け、他ノードのストレージに格納されるデータの状態を管理することができる。そのため、ホストコンピュータから読み出し要求を受けた場合に管理情報を利用して効率的な応答処理を実行することが可能になる。
【０１３１】
（書き込み処理）
次に、図１８〜図２０を参照しながら、全ノード転送方式に係る書き込み処理について説明する。
【０１３２】
図１８は、第２実施形態に係るノードＡのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。図１９は、第２実施形態に係るノードＢのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。図２０は、第２実施形態に係るノードＣのコントローラが書き込み命令に応じて実行する処理の一例を示したフロー図である。
【０１３３】
（ノードＡの処理）
図１８を参照する。図１８の例は、ノードＡのコントローラ２００Ａがホストコンピュータ１００からノードＢ宛ての書き込み命令を受信した場合に実行する処理を示している。なお、図１８に示した処理は、主にＣＰＵ２０１Ａにより実行される。
【０１３４】
（Ｓ１４１）ＣＰＵ２０１Ａは、ホストコンピュータ１００からノードＢ宛ての書き込み命令を受信する。
（Ｓ１４２）ＣＰＵ２０１Ａは、Ｓ１４１で受信した書き込み命令をノードＢに属するコントローラ２００Ｂ及びノードＣに属するコントローラ２００Ｃへ転送する。つまり、ＣＰＵ２０１Ａは、書き込み命令の宛先を認識する処理を省略し、全ての他ノードに属するコントローラ（コントローラ２００Ｂ、２００Ｃ）に書き込み命令を転送する。
【０１３５】
（Ｓ１４３）ＣＰＵ２０１Ａは、書き込み命令からデータを抽出し、抽出したデータを一時記憶領域２２２Ａに格納する。
（Ｓ１４４）ＣＰＵ２０１Ａは、Ｓ１４３で一時記憶領域２２２Ａに格納したデータを退避領域２２３Ａへ退避する。退避領域２２３Ａへ退避したことで、一時記憶領域２２２Ａに格納されたデータが消去された後でも、ＣＰＵ２０１Ａは、そのデータを退避領域２２３Ａから読み出すことができる。
【０１３６】
（Ｓ１４５）ＣＰＵ２０１Ａは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ａは、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。Ｓ１４４で退避領域２２３Ａにデータが退避されているため、データ格納情報は「データ本体」となる。
【０１３７】
（Ｓ１４６）ＣＰＵ２０１Ａは、書き込み命令に対する応答として、その書き込み命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。
（Ｓ１４７）ＣＰＵ２０１Ａは、ノードＢに属するコントローラ２００ＢのＣＰＵ２０１Ｂから格納完了が通知されたか否かを判定する。なお、この格納完了は、ＣＰＵ２０１Ｂがデータをストレージ３００Ｂに格納し終えた後でＣＰＵ２０１Ａ、２０１Ｃへと通知される。格納完了が通知されている場合、処理はＳ１４９へと進む。一方、格納完了が通知されていない場合、処理はＳ１４８へと進む。
【０１３８】
（Ｓ１４８）ＣＰＵ２０１Ａは、データを退避領域２２３Ａへ退避した後、一定時間が経過しているか否かを判定する。なお、この一定時間は、予め設定されている。例えば、３０秒、５分、３０分、１時間、１日、１週間など、様々な単位で一定時間を設定することができる。一定時間が経過している場合、処理はＳ１４９へと進む。一方、一定時間が経過していない場合、処理はＳ１４７へと進む。
【０１３９】
（Ｓ１４９）ＣＰＵ２０１Ａは、Ｓ１４４で退避したデータを退避領域２２３Ａから消去する。このように、一定時間が経過したデータを退避領域２２３Ａから削除することで、退避領域２２３Ａの容量を有効活用することができる。また、退避領域２２３Ａにデータを一定時間保持しておくことで、その間に当該データを指定する読み出し命令に対してＣＰＵ２０１Ａが素早く応答できるようになる。
【０１４０】
（Ｓ１５０）ＣＰＵ２０１Ａは、管理情報を更新する。例えば、ＣＰＵ２０１Ｂから格納完了が通知されている場合、ＣＰＵ２０１Ａは、データ格納情報を「ノードＢ（書き込み完了）」と書き換え、指定ノードを「空白」に設定する（図１６を参照）。また、ＣＰＵ２０１Ｂから格納完了が通知されずに一定時間が経過した場合、ＣＰＵ２０１Ａは、「ノードＢ（書き込み未了）」などと書き換える。Ｓ１５０の処理が完了すると、図１８に示した一連の処理は終了する。
【０１４１】
（ノードＢの処理）
図１９を参照する。図１９の例は、ノードＢのコントローラ２００ＢがノードＢ宛ての書き込み命令をノードＡのコントローラ２００Ａから受信した場合に実行する処理を示している。なお、図１９に示した処理は、主にＣＰＵ２０１Ｂにより実行される。
【０１４２】
（Ｓ１６１）ＣＰＵ２０１Ｂは、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１ＡからノードＢ宛ての書き込み命令を受信する。
（Ｓ１６２）ＣＰＵ２０１Ｂは、書き込み命令からデータを抽出し、抽出したデータを一時記憶領域２２２Ｂに格納する。
【０１４３】
（Ｓ１６３）ＣＰＵ２０１Ｂは、Ｓ１６２で一時記憶領域２２２Ｂに格納したデータを退避領域２２３Ｂへ退避する。退避領域２２３Ｂへ退避したことで、一時記憶領域２２２Ｂに格納されたデータが消去された後でも、ＣＰＵ２０１Ｂは、そのデータを退避領域２２３Ｂから読み出すことができる。
【０１４４】
（Ｓ１６４）ＣＰＵ２０１Ｂは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ｂは、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。Ｓ１６３で退避領域２２３Ｂにデータが退避されているため、データ格納情報は「データ本体」となる。
【０１４５】
（Ｓ１６５）ＣＰＵ２０１Ｂは、一時記憶領域２２２Ｂのデータをストレージ３００Ｂへ格納する。なお、ストレージ３００Ｂへデータを格納する処理は、任意のタイミングで実行してよい。例えば、ＣＰＵ２０１Ｂ又はストレージ３００Ｂの負荷状況に応じて、負荷が低い期間にＳ１６５の処理が実行される。
【０１４６】
（Ｓ１６６）ＣＰＵ２０１Ｂは、ストレージ３００Ｂへデータを格納し終えたことを示す格納完了をノードＡに属するコントローラ２００ＡのＣＰＵ２０１Ａ及びノードＣに属するコントローラ２００ＣのＣＰＵ２０１Ｃに通知する。つまり、ＣＰＵ２０１Ｂは、全ての他ノードに属するコントローラに格納完了を通知する。
【０１４７】
（Ｓ１６７）ＣＰＵ２０１Ｂは、データを格納したストレージ３００Ｂ内の位置を特定する情報でデータ格納情報を書き換えて、管理情報を更新する。
（Ｓ１６８）ＣＰＵ２０１Ｂは、データを退避領域２２３Ｂへ退避した後、一定時間が経過しているか否かを判定する。なお、この一定時間は、予め設定されている。例えば、３０秒、５分、３０分、１時間、１日、１週間など、様々な単位で一定時間を設定することができる。一定時間が経過している場合、処理はＳ１６９へと進む。一方、一定時間が経過していない場合、処理は再びＳ１６８へと進む。
【０１４８】
（Ｓ１６９）ＣＰＵ２０１Ｂは、Ｓ１６３で退避したデータを退避領域２２３Ｂから消去する。このように、一定時間が経過したデータを退避領域２２３Ｂから削除することで、退避領域２２３Ｂの容量を有効活用することができる。また、退避領域２２３Ｂにデータを一定時間保持しておくことで、その間に当該データを指定する読み出し命令に対してＣＰＵ２０１Ｂが素早く応答できるようになる。Ｓ１６９の処理が完了すると、図１９に示した一連の処理は終了する。
【０１４９】
（ノードＣの処理）
図２０を参照する。図２０の例は、ノードＣのコントローラ２００ＣがノードＢ宛ての書き込み命令をノードＡのコントローラ２００Ａから受信した場合に実行する処理を示している。なお、図２０に示した処理は、主にＣＰＵ２０１Ｃにより実行される。
【０１５０】
（Ｓ１７１）ＣＰＵ２０１Ｃは、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１ＡからノードＢ宛ての書き込み命令を受信する。
（Ｓ１７２）ＣＰＵ２０１Ｃは、書き込み命令からデータを抽出し、抽出したデータを一時記憶領域２２２Ｃに格納する。
【０１５１】
（Ｓ１７３）ＣＰＵ２０１Ｃは、Ｓ１７２で一時記憶領域２２２Ｃに格納したデータを退避領域２２３Ｃへ退避する。退避領域２２３Ｃへ退避したことで、一時記憶領域２２２Ｃに格納されたデータが消去された後でも、ＣＰＵ２０１Ｃは、そのデータを退避領域２２３Ｃから読み出すことができる。
【０１５２】
（Ｓ１７４）ＣＰＵ２０１Ｃは、書き込み命令から指定ノード、ファイル名、データ格納情報として記載する情報を抽出する。そして、ＣＰＵ２０１Ｃは、管理情報のレコードに指定ノード、ファイル名、データ格納情報を記載する。Ｓ１７３で退避領域２２３Ｃにデータが退避されているため、データ格納情報は「データ本体」となる。
【０１５３】
（Ｓ１７５）ＣＰＵ２０１Ｃは、ノードＢに属するコントローラ２００ＢのＣＰＵ２０１Ｂから格納完了が通知されたか否かを判定する。なお、この格納完了は、ＣＰＵ２０１Ｂがデータをストレージ３００Ｂに格納し終えた後でＣＰＵ２０１Ａ、２０１Ｃへと通知される。格納完了が通知されている場合、処理はＳ１７７へと進む。一方、格納完了が通知されていない場合、処理はＳ１７６へと進む。
【０１５４】
（Ｓ１７６）ＣＰＵ２０１Ｃは、データを退避領域２２３Ｃへ退避した後、一定時間が経過しているか否かを判定する。なお、この一定時間は、予め設定されている。例えば、３０秒、５分、３０分、１時間、１日、１週間など、様々な単位で一定時間を設定することができる。一定時間が経過している場合、処理はＳ１７７へと進む。一方、一定時間が経過していない場合、処理はＳ１７５へと進む。
【０１５５】
（Ｓ１７７）ＣＰＵ２０１Ｃは、Ｓ１７３で退避したデータを退避領域２２３Ｃから消去する。このように、一定時間が経過したデータを退避領域２２３Ｃから削除することで、退避領域２２３Ｃの容量を有効活用することができる。また、退避領域２２３Ｃにデータを一定時間保持しておくことで、その間に当該データを指定する読み出し命令に対してＣＰＵ２０１Ｃが素早く応答できるようになる。
【０１５６】
（Ｓ１７８）ＣＰＵ２０１Ｃは、管理情報を更新する。例えば、ＣＰＵ２０１Ｂから格納完了が通知されている場合、ＣＰＵ２０１Ｃは、データ格納情報を「ノードＢ（書き込み完了）」と書き換え、指定ノードを「空白」に設定する。また、ＣＰＵ２０１Ｂから格納完了が通知されずに一定時間が経過した場合、ＣＰＵ２０１Ｃは、「ノードＢ（書き込み未了）」などと書き換える。Ｓ１７８の処理が完了すると、図２０に示した一連の処理は終了する。
【０１５７】
（読み出し処理）
次に、図２１及び図２２を参照しながら、全ノード転送方式に係る読み出し処理について説明する。
【０１５８】
（ノードＡ、Ｃの処理）
図２１は、第２実施形態に係るノードＡのコントローラが読み出し命令に応じて実行する処理の一例を示したフロー図である。図２２は、第２実施形態に係るノードＢのコントローラが読み出し命令に応じて実行する処理の一例を示したフロー図である。
【０１５９】
図２１を参照する。図２１の例は、ノードＡのコントローラ２００ＡがノードＢ宛ての読み出し命令をホストコンピュータ１００から受信した場合に実行する処理を示している。なお、図２１に示した処理は、主にＣＰＵ２０１Ａにより実行される。
【０１６０】
（Ｓ１８１）ＣＰＵ２０１Ａは、ホストコンピュータ１００からノードＢ宛ての読み出し命令を受信する。
（Ｓ１８２）ＣＰＵ２０１Ａは、Ｓ１８１で受信した読み出し命令からファイル名を特定し、特定したファイル名に該当するレコードを管理情報から抽出する。
【０１６１】
（Ｓ１８３）ＣＰＵ２０１Ａは、該当するレコードがあるか否かを判定する。つまり、ＣＰＵ２０１Ａは、Ｓ１８２で該当するレコードを抽出できたか否かを判定する。該当するレコードがある場合、処理はＳ１８４へと進む。該当するレコードがない場合、処理はＳ１８７へと進む。
【０１６２】
（Ｓ１８４）ＣＰＵ２０１Ａは、Ｓ１８２で抽出したレコードのデータ格納情報を参照し、退避領域２２３Ａにデータがあるか否かを判定する。つまり、ＣＰＵ２０１Ａは、データ格納情報が「データ本体」であるか否かを判定する。退避領域２２３Ａにデータがある場合、処理はＳ１８５へと進む。一方、退避領域２２３Ａにデータがない場合、図２１に示した一連の処理は終了する。
【０１６３】
（Ｓ１８５）ＣＰＵ２０１Ａは、他ノード（ノードＢ、Ｃ）から応答禁止を通知されているか否かを判定する。応答禁止を通知されている場合、図２１に示した一連の処理は終了する。一方、応答禁止が通知されていない場合、処理はＳ１８６へと進む。
【０１６４】
なお、上記の応答禁止は、他ノード（ノードＢ、Ｃ）のコントローラが既にホストコンピュータ１００に応答している場合に重複した応答を避けるために用いられる。例えば、ノードＢに属するコントローラ２００Ｂが先にホストコンピュータ１００に応答した場合、コントローラ２００Ｂは、ノードＡ、Ｃのコントローラ２００Ａ、２００Ｃに対して応答禁止を通知する。
【０１６５】
（Ｓ１８６）ＣＰＵ２０１Ａは、退避領域２２３Ａからデータを読み出し、読み出したデータを主記憶領域２２１Ａへ格納する。そして、ＣＰＵ２０１Ａは、読み出し命令に対する応答として、主記憶領域２２１Ａに格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ１８６の処理が完了すると、処理はＳ１８８へと進む。
【０１６６】
（Ｓ１８７）ＣＰＵ２０１Ａは、読み出し命令に対する応答として、ホストコンピュータ１００へエラーを通知する。例えば、ＣＰＵ２０１Ａは、読み出し命令により指定されたデータがいずれのノードにも保持されていないことを示すエラーをホストコンピュータ１００に通知する。Ｓ１８７の処理が完了すると、処理はＳ１８８へと進む。
【０１６７】
（Ｓ１８８）ＣＰＵ２０１Ａは、ノードＢに属するコントローラ２００Ｂ及びノードＣに属するコントローラ２００Ｃへ応答禁止を通知する。このように、読み出し命令に対する応答が完了した場合に全ての他ノードに応答禁止を通知することで、無駄な応答処理を減らし、システム全体の処理負荷を低減することができる。Ｓ１８８の処理が完了すると、図２１に示した一連の処理は終了する。
【０１６８】
なお、ノードＣのコントローラ２００ＣがノードＢ宛ての読み出し命令をホストコンピュータ１００から受信した場合に実行する処理も同様である。但し、ノードＣに適用する場合には、Ｓ１８８で通知する応答禁止の通知先がノードＡ、Ｂに変更される。
【０１６９】
（ノードＢの処理）
図２２を参照する。図２２の例は、ノードＢのコントローラ２００ＢがノードＢ宛ての読み出し命令をホストコンピュータ１００から受信した場合に実行する処理を示している。なお、図２２に示した処理は、主にＣＰＵ２０１Ｂにより実行される。
【０１７０】
（Ｓ１９１）ＣＰＵ２０１Ｂは、ノードＡに属するコントローラ２００ＡのＣＰＵ２０１ＡからノードＢ宛ての読み出し命令を受信する。
（Ｓ１９２）ＣＰＵ２０１Ｂは、Ｓ１９１で受信した読み出し命令からファイル名を特定し、特定したファイル名に該当するレコードを管理情報から抽出する。
【０１７１】
（Ｓ１９３）ＣＰＵ２０１Ｂは、該当するレコードがあるか否かを判定する。つまり、ＣＰＵ２０１Ｂは、Ｓ１９２で該当するレコードを抽出できたか否かを判定する。該当するレコードがある場合、処理はＳ１９４へと進む。該当するレコードがない場合、処理はＳ１９８へと進む。
【０１７２】
（Ｓ１９４）ＣＰＵ２０１Ｂは、Ｓ１９２で抽出したレコードのデータ格納情報を参照し、退避領域２２３Ｂにデータがあるか否かを判定する。つまり、ＣＰＵ２０１Ｂは、データ格納情報が「データ本体」であるか否かを判定する。退避領域２２３Ｂにデータがある場合、処理はＳ１９６へと進む。一方、退避領域２２３Ｂにデータがない場合、処理はＳ１９５へと進む。
【０１７３】
（Ｓ１９５）ＣＰＵ２０１Ｂは、ストレージ３００Ｂに格納されているデータから、Ｓ１９２で特定したファイル名のデータを取得する。ＣＰＵ２０１Ｂは、取得したデータを退避領域２２３Ｂへ格納する。Ｓ１９５の処理を完了すると、処理はＳ１９６へと進む。
【０１７４】
（Ｓ１９６）ＣＰＵ２０１Ｂは、他ノード（ノードＡ、Ｃ）から応答禁止を通知されているか否かを判定する。応答禁止を通知されている場合、図２２に示した一連の処理は終了する。一方、応答禁止が通知されていない場合、処理はＳ１９７へと進む。
【０１７５】
なお、上記の応答禁止は、他ノード（ノードＡ、Ｃ）のコントローラが既にホストコンピュータ１００に応答している場合に重複した応答を避けるために用いられる。例えば、コントローラ２００Ａが先にホストコンピュータ１００に応答した場合、コントローラ２００Ａは、コントローラ２００Ｂ、２００Ｃに対して応答禁止を通知する。
【０１７６】
（Ｓ１９７）ＣＰＵ２０１Ｂは、退避領域２２３Ｂからデータを読み出し、読み出したデータを主記憶領域２２１Ｂへ格納する。そして、ＣＰＵ２０１Ｂは、読み出し命令に対する応答として、主記憶領域２２１Ｂに格納したデータ、及び読み出し命令に対する処理が完了した旨を示す完了通知をホストコンピュータ１００に送信する。Ｓ１９７の処理が完了すると、処理はＳ１９９へと進む。
【０１７７】
（Ｓ１９８）ＣＰＵ２０１Ｂは、読み出し命令に対する応答として、ホストコンピュータ１００へエラーを通知する。例えば、ＣＰＵ２０１Ｂは、読み出し命令により指定されたデータがいずれのノードにも保持されていないことを示すエラーをホストコンピュータ１００に通知する。Ｓ１９８の処理が完了すると、処理はＳ１９９へと進む。
【０１７８】
（Ｓ１９９）ＣＰＵ２０１Ｂは、ノードＡに属するコントローラ２００Ａ及びノードＣに属するコントローラ２００Ｃへ応答禁止を通知する。このように、読み出し命令に対する応答が完了した場合に全ての他ノードに応答禁止を通知することで、無駄な応答処理を減らし、システム全体の処理負荷を低減することができる。Ｓ１９９の処理が完了すると、図２２に示した一連の処理は終了する。
【０１７９】
以上、全ノード転送方式について説明した。上記のように、ストレージへの格納完了を他のノードへ通知することで、データの格納状況を各ノードが認識することができる。また、データの格納状況を管理情報により管理することができる。また、ある程度の時間、各ノードが同じデータを退避領域に保持し、命令を全ノードに転送するため、より早く応答できる任意のコントローラが読み出し命令に応答できる。その結果、応答速度が向上する。また、応答したコントローラが他のノードに応答禁止を通知するため、無駄な応答を抑制することができ、効率的な処理を実現することができる。
【０１８０】
以上説明したように、ノードＡが受けた命令が全ての他のノードＢ、Ｃへと転送されることで、転送時に命令を解析して転送先を選択する処理を省略することができる。その結果、命令の転送処理を高速化することが可能になる。また、ノードＡ、Ｂ、Ｃがいずれも同じ命令のデータを保持することで、応答速度が速いコントローラが、読み出し要求に対して素早く応答できるようになる。
【０１８１】
例えば、書き込み処理を実行中のコントローラに対して読み出し要求が発生した場合に、他のコントローラがホストコンピュータへと応答することで、高速な応答が可能になる。ストレージシステムの運用中、複数のホストコンピュータから書き込み命令や読み出し命令が様々なタイミングで各ノードに送信されることが予想される。このような状況でも、第２実施形態に係る技術を適用すれば、高い読み出し性能を実現できる。
【０１８２】
以上、第２実施形態について説明した。
＜３．付記＞
以上説明した実施形態に関し、さらに以下の付記を開示する。
【０１８３】
（付記１）  データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムの前記ストレージ制御装置であって、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置と通信する通信部と、
任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記通信部が前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する制御部と、
を有する、ストレージ制御装置。
【０１８４】
（付記２）  前記ストレージ制御装置は、データを一時的に格納する記憶部をさらに有し、
前記制御部は、前記他のノードに含まれる前記ストレージ制御装置から、任意のノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記通信部が受信した場合に当該命令を前記記憶部に格納する
付記１に記載のストレージ制御装置。
【０１８５】
（付記３）  前記制御部は、前記他のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を前記通信部が受信した場合に、当該指示の対象となるデータが前記記憶部に格納されているとき、当該データを前記記憶部から読み出して前記上位装置へ送信するように前記通信部を制御する
付記２に記載のストレージ制御装置。
【０１８６】
（付記４）  前記制御部は、自身を含むノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記通信部が前記上位装置から受信した場合に当該命令を前記記憶部に格納し、当該命令に対する応答を前記上位装置へ送信するように前記通信部を制御し、当該応答の送信後に当該データを当該ストレージ装置に格納し、当該ストレージ装置に対する当該データの格納完了を示す完了通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する
付記２又は３に記載のストレージ制御装置。
【０１８７】
（付記５）  前記制御部は、前記他のノードに含まれる前記ストレージ制御装置から、当該他のノードに含まれる前記ストレージ装置へのデータの格納完了を示す完了通知を前記通信部が受信した場合に当該データと同じデータを前記記憶部から消去する
付記４に記載のストレージ制御装置。
【０１８８】
（付記６）  前記制御部は、任意のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を前記通信部が受信し、当該指示の対象となるデータを前記記憶部から読み出して前記上位装置へ送信するように前記通信部を制御した場合、当該命令に対する応答を抑制する抑制通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する
付記１〜５のいずれかに記載のストレージ制御装置。
【０１８９】
（付記７）  データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムであって、
前記ストレージ制御装置は、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置と通信する通信部と、任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記通信部が前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように前記通信部を制御する制御部と、を有し、
前記ストレージ装置は、
前記ストレージ制御装置に接続する接続部と、データを格納する記録媒体と、当該ストレージ制御装置による制御を受けて前記記録媒体に対するデータの書き込み処理又はデータの読み出し処理を実行する処理部と、を有する、
ストレージシステム。
【０１９０】
（付記８）  データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムの前記ストレージ制御装置として動作するコンピュータに、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置との通信を制御し、
任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように制御する
処理を実行させる、プログラム。
【０１９１】
（付記９）  データを記憶するストレージ装置と、当該ストレージ装置におけるデータの処理を制御するストレージ制御装置とを含むノードを複数有するストレージシステムの前記ストレージ制御装置が、
前記ストレージ装置におけるデータの処理を指示する上位装置、及び他のノードに含まれる前記ストレージ制御装置との通信を制御し、
任意のノードに含まれる前記ストレージ装置におけるデータの処理についての指示を含む命令を前記上位装置から受信した場合に当該命令を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信するように制御する
制御方法。
【０１９２】
（付記１０）  付記８に記載のプログラムが格納された、コンピュータにより読み取り可能な記録媒体。
（付記１１）  前記制御部は、前記記憶部に前記命令を格納する際、当該命令と当該命令に含まれる指示の対象となる前記ストレージ装置を含むノードの情報とを対応付ける管理情報を前記記憶部に格納する
付記８に記載のプログラム。
【０１９３】
（付記１２）  前記コンピュータは、データを一時的に格納する記憶部を有し、
前記他のノードに含まれる前記ストレージ制御装置から、任意のノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記コンピュータが受信した場合に、当該命令を前記記憶部に格納する処理を実行させる
付記８に記載のプログラム。
【０１９４】
（付記１３）  前記他のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を前記コンピュータが受信した場合に、当該指示の対象となるデータが前記記憶部に格納されているとき、当該データを前記記憶部から読み出して前記上位装置へ送信する処理を実行させる
付記１２に記載のプログラム。
【０１９５】
（付記１４）  前記コンピュータを含むノードに含まれる前記ストレージ装置におけるデータの書き込み処理についての指示及び当該データを含む命令を前記コンピュータが前記上位装置から受信した場合に当該命令を前記記憶部に格納し、当該命令に対する応答を前記上位装置へ送信し、当該応答の送信後に当該データを当該ストレージ装置に格納し、当該ストレージ装置に対する当該データの格納完了を示す完了通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信する処理を実行させる
付記１２又は１３に記載のプログラム。
【０１９６】
（付記１５）  前記他のノードに含まれる前記ストレージ制御装置から、当該他のノードに含まれる前記ストレージ装置へのデータの格納完了を示す完了通知を前記コンピュータが受信した場合に当該データと同じデータを前記記憶部から消去する処理を実行させる
付記１４に記載のプログラム。
【０１９７】
（付記１６）  前記コンピュータが、任意のノードに含まれる前記ストレージ装置におけるデータの読み出し処理についての指示を含む命令を受信し、当該指示の対象となるデータを前記記憶部から読み出して前記上位装置へ送信した場合、前記コンピュータに、当該命令に対する応答を抑制する抑制通知を全ての前記他のノードに含まれる前記ストレージ制御装置へ送信する処理を実行させる
付記８、１２〜１５のいずれかに記載のプログラム。
【符号の説明】
【０１９８】
１０Ａ、１０Ｂ、１０Ｃ  ストレージ制御装置
１１Ａ  通信部
１２Ａ  制御部
１３Ａ  記憶部
２０Ａ、２０Ｂ、２０Ｃ  ストレージ装置
２１Ａ  接続部
２２Ａ  記録媒体
２３Ａ  処理部
３０  上位装置
Ａ、Ｂ、Ｃ  ノード
Ｑ  命令
【図１】
2016018384.tif 000003
【図２】
2016018384.tif 000004
【図３】
2016018384.tif 000005
【図４】
2016018384.tif 000006
【図５】
2016018384.tif 000007
【図６】
2016018384.tif 000008
【図７】
2016018384.tif 000009
【図８】
2016018384.tif 000010
【図９】
2016018384.tif 000011
【図１０】
2016018384.tif 000012
【図１１】
2016018384.tif 000013
【図１２】
2016018384.tif 000014
【図１３】
2016018384.tif 000015
【図１４】
2016018384.tif 000016
【図１５】
2016018384.tif 000017
【図１６】
2016018384.tif 000018
【図１７】
2016018384.tif 000019
【図１８】
2016018384.tif 000020
【図１９】
2016018384.tif 000021
【図２０】
2016018384.tif 000022
【図２１】
2016018384.tif 000023
【図２２】
2016018384.tif 000024