(57)【要約】【課題】書き込み要求のＩＯＰＳを一定以上に維持できる範囲で書き込み要求に対する応答時間を短縮する。【解決手段】検出部１ａは、ストレージノード１１，１２の少なくとも１つの記憶装置に格納されたデータブロックのうち、第１の処理２１によって格納された第１のデータブロックの数と、第２の処理２２によって格納された第２のデータブロックの数との比率を検出する。決定部１ｂは、検出された比率が、第２のデータブロックに対する第３の処理２３の負荷と、ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率１ｃに近づくように、ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を第１の処理２１と第２の処理２２のどちらを用いて実行するかを決定する。【選択図】図１
2018041248.tif 000002
【特許請求の範囲】
【請求項１】
それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムの動作を制御するストレージ制御装置において、
前記複数のストレージノードの少なくとも１つの前記記憶装置に格納されたデータブロックのうち、第１の処理によって格納された第１のデータブロックの数と、第２の処理によって格納された第２のデータブロックの数との比率を検出する検出部であって、前記第１の処理は、前記複数のストレージノードのうちホスト装置から第１の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第１の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複を除去して前記第１のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、前記第２の処理は、前記複数のストレージノードのうち前記ホスト装置から第２の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第２の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複除去処理をスキップして前記第２のデータブロックとして格納し、前記ホスト装置に応答する処理を含む、前記検出部と、
前記比率が、前記第２のデータブロックに対する第３の処理の負荷と、前記ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率に近づくように、前記ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を前記第１の処理と前記第２の処理のどちらを用いて実行するかを決定する決定部であって、前記第３の処理は、前記複数のストレージノードのいずれかの前記記憶装置に対して、前記第２のデータブロックを重複を除去して格納し直す処理を含む、前記決定部と、
を有するストレージ制御装置。
【請求項２】
前記複数のストレージノードのそれぞれに含まれる前記記憶装置は、他の記憶装置へ書き込むデータをキャッシュするキャッシュメモリであり、
前記目標比率は、前記第３の処理の負荷と、前記第１のデータブロックに対する第４の処理の負荷と、前記下限目標値とに基づいて決定され、
前記第３の処理は、前記第２のデータブロックを前記他の記憶装置にデステージする処理をさらに含み、
前記第４の処理は、前記第１のデータブロックを前記他の記憶装置にデステージする処理を含む、
請求項１記載のストレージ制御装置。
【請求項３】
前記第３の処理の負荷は、前記第３の処理を連続して実行可能な時間間隔を示し、
前記第４の処理の負荷は、前記第４の処理を連続して実行可能な時間間隔を示し、
前記目標比率は、前記第４の処理と前記第３の処理とを前記目標比率で実行したときに、単位時間における前記第４の処理と前記第３の処理の実行回数の合計値が前記下限目標値以上となり、かつ、前記第３の処理の実行回数が最大となる値として決定される、
請求項２記載のストレージ制御装置。
【請求項４】
前記第３の処理は、前記複数のストレージノードのうち、前記ホスト装置から前記第２のデータブロックの書き込み先として指定された論理アドレスに基づいて決まるストレージノードに対して、前記論理アドレスと、前記第２のデータブロックが格納し直された記憶領域を示す情報とのマッピングを指示する処理を含む、
請求項２または３記載のストレージ制御装置。
【請求項５】
前記第１の処理は、前記第１の書き込みデータブロックに基づいて第１のハッシュ値を算出し、前記複数のストレージノードのうち前記第１のハッシュ値に基づいて決まる第１のストレージノードの前記記憶装置に対して、重複を除去して前記第１の書き込みデータを前記第１のデータブロックとして格納する処理を含み、
前記第２の処理は、前記複数のストレージノードのうち前記第２の書き込みデータブロックの書き込み先に基づいて決まる第２のストレージノードの前記記憶装置に対して、前記第２の書き込みデータブロックを前記第２のデータブロックとして格納する処理を含み、
前記第３の処理は、前記第２のデータブロックに基づいて第２のハッシュ値を算出し、前記複数のストレージノードのうち前記第２のハッシュ値に基づいて決まる第３のストレージノードの前記記憶装置に対して、前記第２のデータブロックを重複を除去して格納し直す処理を含む、
請求項１乃至３のいずれか１項に記載のストレージ制御装置。
【請求項６】
前記決定部は、前記複数のストレージノードの前記記憶装置におけるデータ格納量が所定の下限閾値以下である場合、前記第３の書き込みデータブロックの書き込み処理を前記第２の処理を用いて実行すると決定する、
請求項１乃至５のいずれか１項に記載のストレージ制御装置。
【請求項７】
前記決定部は、前記複数のストレージノードの前記記憶装置におけるデータ格納量が所定の上限閾値以上である場合、前記第３の書き込みデータブロックの書き込み処理を前記第１の処理を用いて実行すると決定する、
請求項１乃至６のいずれか１項に記載のストレージ制御装置。
【請求項８】
それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムであって、
前記複数のストレージノードの少なくとも１つは、
前記複数のストレージノードの少なくとも１つの前記記憶装置に格納されたデータブロックのうち、第１の処理によって格納された第１のデータブロックの数と、第２の処理によって格納された第２のデータブロックの数との比率を検出する検出部であって、前記第１の処理は、前記複数のストレージノードのうちホスト装置から第１の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第１の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複を除去して前記第１のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、前記第２の処理は、前記複数のストレージノードのうち前記ホスト装置から第２の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第２の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複除去処理をスキップして前記第２のデータブロックとして格納し、前記ホスト装置に応答する処理を含む、前記検出部と、
前記比率が、前記第２のデータブロックに対する第３の処理の負荷と、前記ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率に近づくように、前記ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を前記第１の処理と前記第２の処理のどちらを用いて実行するかを決定する決定部であって、前記第３の処理は、前記複数のストレージノードのいずれかの前記記憶装置に対して、前記第２のデータブロックを重複を除去して格納し直す処理を含む、前記決定部と、
を備えるストレージ制御装置を有する、
ストレージシステム。
【請求項９】
それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムの動作を制御するストレージ制御方法において、
コンピュータが、
前記複数のストレージノードの少なくとも１つの前記記憶装置に格納されたデータブロックのうち、第１の処理によって格納された第１のデータブロックの数と、第２の処理によって格納された第２のデータブロックの数との比率を検出し、前記第１の処理は、前記複数のストレージノードのうちホスト装置から第１の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第１の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複を除去して前記第１のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、前記第２の処理は、前記複数のストレージノードのうち前記ホスト装置から第２の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第２の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複除去処理をスキップして前記第２のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、
前記比率が、前記第２のデータブロックに対する第３の処理の負荷と、前記ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率に近づくように、前記ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を前記第１の処理と前記第２の処理のどちらを用いて実行するかを決定し、前記第３の処理は、前記複数のストレージノードのいずれかの前記記憶装置に対して、前記第２のデータブロックを重複を除去して格納し直す処理を含む、
ストレージ制御方法。
【請求項１０】
それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムの動作を制御するストレージ制御プログラムにおいて、
コンピュータに、
前記複数のストレージノードの少なくとも１つの前記記憶装置に格納されたデータブロックのうち、第１の処理によって格納された第１のデータブロックの数と、第２の処理によって格納された第２のデータブロックの数との比率を検出し、前記第１の処理は、前記複数のストレージノードのうちホスト装置から第１の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第１の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複を除去して前記第１のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、前記第２の処理は、前記複数のストレージノードのうち前記ホスト装置から第２の書き込みデータブロックの書き込み要求を受けたストレージノードから、前記第２の書き込みデータブロックを、前記複数のストレージノードのいずれかの前記記憶装置に対して重複除去処理をスキップして前記第２のデータブロックとして格納し、前記ホスト装置に応答する処理を含み、
前記比率が、前記第２のデータブロックに対する第３の処理の負荷と、前記ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率に近づくように、前記ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を前記第１の処理と前記第２の処理のどちらを用いて実行するかを決定し、前記第３の処理は、前記複数のストレージノードのいずれかの前記記憶装置に対して、前記第２のデータブロックを重複を除去して格納し直す処理を含む、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
ストレージシステムの技術の１つとして、重複するデータを記憶装置に格納しないようにして、記憶装置の記憶領域を効率的に使用する「重複除去」と呼ばれる技術が知られている。この重複除去技術として、インライン方式とポストプロセス方式が知られている。インライン方式は、書き込みが要求されたデータを重複を除去して記憶装置に格納した後、書き込み要求に対する応答を返す方式である。ポストプロセス方式は、書き込みが要求されたデータを記憶装置に一時的に格納して応答を返し、格納されたデータの重複除去を事後的に行う方式である。
【０００３】
また、インライン方式の重複除去とポストプロセス方式の重複除去の両方を用いることも考えられている。例えば、所定条件下でファイル単位のインライン型重複除去を実行し、重複を除去できなかったファイルについて、チャンク単位でポストプロセス型重複除去を実行するストレージシステムが提案されている。また、インライン方式の重複除去の処理対象になっているデータの合計サイズと、ポストプロセス方式の重複除去の処理対象になっているデータの合計サイズとが均衡するように、適用する重複除去の方式を選択するストレージ装置も提案されている。なお、このストレージ装置では、ポストプロセス方式で処理されるデータの一時記憶領域の容量を抑制することを目的として、合計サイズが均衡するように方式が選択されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１３／１５７１０３号
【特許文献２】特表２０１５−５２８９２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、インライン方式では、書き込み要求に対する応答を返す前に重複除去処理が実行される。このため、重複除去処理が事後的に実行されるポストプロセス方式と比較して、書き込み要求に対する応答時間が長くなるという問題がある。一方、ポストプロセス方式では、事後的に実行される、重複除去を含む一連の処理の負荷が、書き込み要求に対する応答処理の性能に影響を与える可能性がある。このため、事後的な処理の負荷によって、単位時間に書き込み要求を処理できる回数（ＩＯＰＳ：Input／Output Per Second）が低下する場合があるという問題がある。
【０００６】
特に、データが複数のノードに分散して格納されるストレージシステムでは、次のような問題によってＩＯＰＳが低下する場合がある。このようなストレージシステムでは、インライン方式が用いられる場合、書き込み要求を受信したノードから他のノードに対して、データが転送される場合がある。一方、ポストプロセス方式が用いられる場合には、ノード間のデータの転送が２回実行される場合がある。１つは、書き込み要求を受信したノードから、データが一時的に格納されるノードへのデータ転送である。もう１つは、データが一時的に格納されたノードから、重複を除去した格納が行われる他のノードへのデータ転送であり、これは事後的な処理に含まれる。
【０００７】
このように、ポストプロセス方式では、事後的な処理においてノード間のデータ転送が行われる場合があり、このデータ転送によるノード間の通信負荷が、書き込み要求に応答するために実行されるノード間通信の性能に影響を与える可能性がある。このため、事後的な処理における通信負荷によってＩＯＰＳが低下する場合があるという問題がある。
【０００８】
１つの側面では、本発明は、書き込み要求のＩＯＰＳを一定以上に維持できる範囲で書き込み要求に対する応答時間を短縮可能なストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムの動作を制御するストレージ制御装置が提供される。このストレージ制御装置は、検出部と決定部とを有する。
【００１０】
検出部は、複数のストレージノードの少なくとも１つの記憶装置に格納されたデータブロックのうち、第１の処理によって格納された第１のデータブロックの数と、第２の処理によって格納された第２のデータブロックの数との比率を検出する。ここで、第１の処理は、複数のストレージノードのうちホスト装置から第１の書き込みデータブロックの書き込み要求を受けたストレージノードから、第１の書き込みデータブロックを、複数のストレージノードのいずれかの記憶装置に対して重複を除去して第１のデータブロックとして格納し、ホスト装置に応答する処理を含む。また、第２の処理は、複数のストレージノードのうちホスト装置から第２の書き込みデータブロックの書き込み要求を受けたストレージノードから、第２の書き込みデータブロックを、複数のストレージノードのいずれかの記憶装置に対して重複除去処理をスキップして第２のデータブロックとして格納し、前記ホスト装置に応答する処理を含む。
【００１１】
決定部は、検出された比率が、第２のデータブロックに対する第３の処理の負荷と、ホスト装置からの書き込み要求を単位時間内に処理可能な回数の下限目標値とに基づく目標比率に近づくように、ホスト装置から新たに書き込みが要求された第３の書き込みデータブロックの書き込み処理を第１の処理と第２の処理のどちらを用いて実行するかを決定する。ここで、第３の処理は、複数のストレージノードのいずれかの記憶装置に対して、第２のデータブロックを重複を除去して格納し直す処理を含む。
【００１２】
また、１つの案では、それぞれ記憶装置を有する複数のストレージノードを含むストレージシステムが提供される。このストレージシステムにおいて、複数のストレージノードの少なくとも１つは、上記のストレージ制御装置を有する。
【００１３】
さらに、１つの案では、上記のストレージ制御装置と同様の処理をコンピュータが実行するストレージ制御方法が提供される。
また、１つの案では、上記のストレージ制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
【発明の効果】
【００１４】
１つの側面では、書き込み要求のＩＯＰＳを一定以上に維持できる範囲で書き込み要求に対する応答時間を短縮できる。
【図面の簡単な説明】
【００１５】
【図１】第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】サーバのハードウェア構成例を示す図である。
【図４】各サーバが備えるキャッシュおよび主なテーブル情報について示す図である。
【図５】ハッシュ管理テーブルのデータ構成例を示す図である。
【図６】ＬＢＡ管理テーブルのデータ構成例を示す図である。
【図７】インラインモードの書き込み制御処理の基本的な手順を示すシーケンス図である。
【図８】インラインモードでのテーブル更新処理例を示す図である。
【図９】ポストプロセスモードの書き込み制御処理の基本的な手順を示すシーケンス図である。
【図１０】ポストプロセスモードでのテーブル更新処理例を示す図である。
【図１１】ストレージシステムにおける読み出し制御処理の手順を示すシーケンス図である。
【図１２】サーバが備える処理機能の構成例を示すブロック図である。
【図１３】書き込み制御モードの決定処理について説明するための図である。
【図１４】書き込み応答処理手順の例を示すフローチャートである。
【図１５】モード決定処理手順の例を示すフローチャートである。
【図１６】インラインモードでのＩＯ制御処理手順の例を示すフローチャートである。
【図１７】ポストプロセスモードでのＩＯ制御処理手順の例を示すフローチャートである。
【図１８】重複除去処理手順の例を示すフローチャートである。
【図１９】インラインモードでのＬＢＡ管理処理手順の例を示す図である。
【図２０】ポストプロセスモードでのＬＢＡ管理処理手順の例を示す図である。
【図２１】バックグラウンドでのブロック再配置処理手順の例を示すフローチャートである。
【図２２】デステージ処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例および処理例を示す図である。図１に示すストレージシステムは、複数のストレージノードとストレージ制御装置１とを含む。図１の例では、ストレージシステムは２つのストレージノード１１，１２を含んでいるが、ストレージノードの数は２つに限定されず、３つ以上であってもよい。
【００１７】
ストレージノード１１は、記憶装置１１ａを有する。ストレージノード１２は、記憶装置１２ａを有する。ストレージノード１１，１２の間では、図示しないホスト装置から書き込みが要求されたデータブロックが記憶装置１１ａ，１２ａに分散して格納される。
【００１８】
ストレージ制御装置１は、ストレージシステムの動作を制御する。ストレージ制御装置１は、検出部１ａと決定部１ｂを有する。検出部１ａと決定部１ｂの処理は、例えば、ストレージ制御装置１が備えるプロセッサが所定のプログラムを実行することで実現される。なお、ストレージ制御装置１は、ストレージノード１１，１２のいずれかに含まれてもよい。
【００１９】
検出部１ａは、記憶装置１１ａ，１２ａの少なくとも１つに格納されたデータブロックのうち、第１の処理２１によって格納されたデータブロックの数と、第２の処理２２によって格納されたデータブロックの数との比率を検出する。なお、検出部１ａは、記憶装置１１ａ，１２ａの両方に格納されたデータブロックの中から、第１の処理２１によって格納されたデータブロックの数と、第２の処理２２によって格納されたデータブロックの数との比率を検出する方が望ましい。しかし、検出の対象を複数の記憶装置の一部に限定することで、検出処理を簡易化できるとともに、検出の対象をすべての記憶装置とした場合の比率をある程度の精度で推測できる。
【００２０】
第１の処理２１は、ホスト装置からデータブロックの書き込み要求を受けたストレージノード（例えば、ストレージノード１２）から、そのデータブロックを、ストレージノード１１，１２のいずれかの記憶装置（例えば、ストレージノード１１の記憶装置１１ａ）に対して重複を除去して格納し（ステップＳ１ａ）、ホスト装置に対して応答する（ステップＳ１ｂ）処理を含む。したがって、第１の処理２１によって記憶装置に格納されたデータブロックとは、重複除去された状態で記憶装置に格納されたデータである。
【００２１】
なお、第１の処理２１は、重複除去で利用するためのハッシュ値の計算を含んでもよい。また、データブロックが重複を除去して格納されるストレージノードは、データブロックが分散して格納されるように決定される。例えば、データブロックが重複を除去して格納されるストレージノードは、データブロックから算出されたハッシュ値に基づいて決定される。
【００２２】
一方、第２の処理２２は、ホスト装置からデータブロックの書き込み要求を受けたストレージノード（例えば、ストレージノード１２）から、そのデータブロックを、重複除去処理をスキップしてストレージノード１１，１２のいずれかの記憶装置（例えば、ストレージノード１１の記憶装置１１ａ）に格納し（ステップＳ２ａ）、ホスト装置に応答する（ステップＳ２ｂ）処理を含む。したがって、第２の処理２２によって記憶装置に格納されたデータブロックとは、重複除去が行われずに記憶装置に格納されたデータである。
【００２３】
なお、第２の処理２２においてデータブロックが格納されるストレージノードは、データブロックが分散して格納されるように決定される。例えば、第２の処理２２においてデータブロックが格納されるストレージノードは、書き込み先として指定された論理アドレスに基づいて決定される。
【００２４】
決定部１ｂは、検出部１ａによって検出された比率が目標比率１ｃに近づくように、ホスト装置から新たに書き込みが要求されたデータブロックの書き込み処理を、第１の処理２１と第２の処理２２のどちらを用いて実行するかを決定する。目標比率１ｃは、第２の処理２２によって記憶装置に格納されたデータブロックに対する第３の処理２３の負荷と、ホスト装置からの書き込み要求を単位時間内に処理可能な回数（以下、「ＩＯＰＳ」と記載する）の下限目標値とに基づいて決定される値である。
【００２５】
また、第３の処理２３は、第２の処理２２によって記憶装置に格納されたデータブロックを、ストレージノード１１，１２のいずれかの記憶装置に対して重複を除去して格納し直す処理（ステップＳ３）を含む。すなわち、第３の処理２３は、第２の処理２２によって記憶装置に格納されたデータブロックに対して、ホスト装置への応答後に実行される後処理である。
【００２６】
なお、第３の処理２３は、重複除去で利用するためのハッシュ値の計算を含んでもよい。また、第３の処理２３においてデータブロックが格納されるストレージノードは、データブロックが分散して格納されるように決定される。例えば、第３の処理２３においてデータブロックが格納されるストレージノードは、データブロックから算出されたハッシュ値に基づいて決定される。
【００２７】
上記の第１の処理２１では、ステップＳ１ａの実行の際に、書き込み要求を受けたストレージノードから他のストレージノードに対してデータブロックが転送される場合がある。また、上記の第２の処理２２でも、ステップＳ２ａの実行の際に、書き込み要求を受けたストレージノードから他のストレージノードに対してデータブロックが転送される場合がある。さらに、上記の第３の処理２３でも、ステップＳ３の実行の際に、第２の処理２２によって格納されたストレージノードから他のストレージノードに対してデータブロックが転送される場合がある。
【００２８】
ここで、第１の処理２１と第２の処理２２とを比較すると、第２の処理２２では、データブロックを記憶装置に格納する際に重複除去処理を実行しない分だけ、ホスト装置に対する応答時間が短縮される。その一方、第２の処理２２によって記憶装置に格納されたデータブロックについては、後処理として第３の処理２３が実行される。第３の処理２３は、データブロックを重複を除去して格納し直す処理（ステップＳ３）を含み、この処理の実行時には上記のようにストレージノード間でデータが転送される場合がある。したがって、第２の処理２２と第３の処理２３の処理全体では、データブロックの転送が最大２回行われる分、第１の処理２１よりデータ転送量が多くなる可能性があり、ストレージノード間の通信負荷に与える影響がより大きい。
【００２９】
このため、第１の処理２１と第２の処理２２のうち、ホスト装置に対する応答時間を短縮するために第２の処理２２の実行比率を高めてしまうと、ストレージノード間のデータ転送量が多くなる可能性がある。その場合、ストレージノード間で単位時間に通信可能な回数が低下する。このような通信可能な回数の低下により、ホスト装置からの書き込み要求を単位時間に処理可能な回数（ＩＯＰＳ）も低下してしまう。
【００３０】
これに対して、上記のように、目標比率１ｃは、第３の処理２３の負荷とＩＯＰＳの下限目標値とに基づいて決定される。ＩＯＰＳは、第３の処理２３の実行回数が多くなってデータブロックの転送回数が増えるほど、低下し得る。また、第３の処理２３は、第２の処理２２と同じ回数だけ実行される。このような関係から、ＩＯＰＳが下限目標値を下回らない範囲で、第１の処理２１と第２の処理２２のうち、第２の処理２２の実行比率が可能な限り高くなるような目標比率１ｃが得られる。
【００３１】
決定部１ｂは、上記のような処理の選択によって、第１の処理２１と第２の処理２２との実行比率が目標比率１ｃに近づくように制御する。その結果、ＩＯＰＳが下限目標値以上に維持された状態で、第２の処理２２の実行比率が可能な限り高められる。したがって、ストレージ制御装置１によれば、ＩＯＰＳを一定以上に維持できる範囲で書き込み要求に対する応答時間を短縮できる。
【００３２】
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、サーバ１００ａ〜１００ｃ、ストレージ２００ａ〜２００ｃ、スイッチ３００およびホスト装置４００ａ，４００ｂを含む。
【００３３】
サーバ１００ａ〜１００ｃは、スイッチ３００に接続され、スイッチ３００を介して互いに通信可能になっている。また、サーバ１００ａにはストレージ２００ａが接続され、サーバ１００ｂにはストレージ２００ｂが接続され、サーバ１００ｃにはストレージ２００ｃが接続されている。サーバ１００ａは、ストレージ２００ａに対するアクセスを制御するストレージ制御装置である。同様に、サーバ１００ｂは、ストレージ２００ｂに対するアクセスを制御するストレージ制御装置であり、サーバ１００ｃは、ストレージ２００ｃに対するアクセスを制御するストレージ制御装置である。
【００３４】
ストレージ２００ａ〜２００ｃのそれぞれには、１台または複数台の不揮発性記憶装置が搭載されている。本実施の形態では、ストレージ２００ａ〜２００ｃのそれぞれには、複数台のＳＳＤ（Solid State Drive）が搭載されているものとする。
【００３５】
なお、サーバ１００ａとストレージ２００ａ、サーバ１００ｂとストレージ２００ｂ、サーバ１００ｃとストレージ２００ｃは、それぞれストレージノードＮ０，Ｎ１，Ｎ２に属している。
【００３６】
ホスト装置４００ａ，４００ｂはそれぞれ、スイッチ３００に接続され、スイッチ３００を介してサーバ１００ａ〜１００ｃの少なくとも１台との間で通信可能になっている。ホスト装置４００ａ，４００ｂはそれぞれ、サーバ１００ａ〜１００ｃによって提供される論理ボリュームに対するアクセス要求を、サーバ１００ａ〜１００ｃの少なくとも１台に送信する。これにより、ホスト装置４００ａ，４００ｂは、論理ボリュームにアクセス可能になっている。
【００３７】
ホスト装置４００ａ，４００ｂとサーバ１００ａ〜１００ｃとの関係は、例えば、次のように決められてもよい。ホスト装置４００ａは、サーバ１００ａ〜１００ｃによって提供されるある論理ボリュームに対するアクセス要求を、サーバ１００ａ〜１００ｃのうちあらかじめ決められた１台に送信する。また、ホスト装置４００ｂは、サーバ１００ａ〜１００ｃによって提供される別の論理ボリュームに対するアクセス要求を、サーバ１００ａ〜１００ｃのうちあらかじめ決められた別の１台に送信する。なお、これらの論理ボリュームは、ストレージ２００ａ〜２００ｃの物理領域によって実現される。
【００３８】
スイッチ３００は、サーバ１００ａ〜１００ｃの間や、ホスト装置４００ａ，４００ｂとサーバ１００ａ〜１００ｃの間でデータを中継する。なお、例えば、サーバ１００ａ〜１００ｃの間や、ホスト装置４００ａ，４００ｂとサーバ１００ａ〜１００ｃの間は、ＩｎｆｉｎｉＢａｎｄ（商標）で接続される。また、サーバ１００ａ〜１００ｃの間の通信と、ホスト装置４００ａ，４００ｂとサーバ１００ａ〜１００ｃとの間の通信は、それぞれ分離された個別のネットワークを介して行われてもよい。
【００３９】
以上の図２では、３台のサーバ１００ａ〜１００ｃが配置された構成としたが、ストレージシステムには２台以上の任意の数のサーバを配置できる。また、図２では、２台のホスト装置４００ａ，４００ｂが配置された構成としたが、ストレージシステムには１台以上の任意の数のホスト装置を配置できる。さらに、図２では、サーバ１００ａ〜１００ｃにそれぞれストレージ２００ａ〜２００ｃが接続された構成としたが、サーバ１００ａ〜１００ｃに対して共通のストレージが接続されてもよい。
【００４０】
なお、これ以後、サーバ１００ａ〜１００ｃを特に区別せずに記載する場合、「サーバ１００」と記載する場合がある。同様に、ストレージ２００ａ〜２００ｃを特に区別せずに示す場合、「ストレージ２００」と表記する場合があり、ホスト装置４００ａ，４００ｂを特に区別せずに示す場合、「ホスト装置４００」と表記する場合がある。
【００４１】
図３は、サーバのハードウェア構成例を示す図である。サーバ１００は、例えば、図３に示すようなコンピュータとして実現される。サーバ１００は、プロセッサ１０１、ＲＡＭ（Random Access Memory）１０２、ＳＳＤ１０３、通信インタフェース１０４およびストレージインタフェース１０５を有する。
【００４２】
プロセッサ１０１は、サーバ１００の処理を統括的に制御する。プロセッサ１０１は、例えば、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）である。また、プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどの２以上の要素の組合せであってもよい。
【００４３】
ＲＡＭ１０２は、サーバ１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に記憶される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に用いる各種データが一時的に記憶される。
【００４４】
ＳＳＤ１０３は、サーバ１００の補助記憶装置として使用される。ＳＳＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、サーバ１００は、補助記憶装置として、ＳＳＤ１０３の代わりにＨＤＤ（Hard Disk Drive）を備えていてもよい。
【００４５】
通信インタフェース１０４は、スイッチ３００を介して他の装置と通信するためのインタフェース回路である。ストレージインタフェース１０５は、ストレージ２００に搭載された記憶装置と通信するためのインタフェース回路である。なお、ストレージインタフェース１０５とストレージ２００内の記憶装置とは、例えば、ＳＡＳ（Serial Attached SCSI，SCSI：Small Computer System Interface）、ＦＣ（Fibre Channel）などの通信プロトコルにしたがって通信する。
【００４６】
以上の構成によってサーバ１００、すなわちサーバ１００ａ〜１００ｃのそれぞれの処理機能が実現される。なお、ホスト装置４００ａ，４００ｂについても、図３に示すようなコンピュータとして実現可能である。
【００４７】
次に、サーバ１００ａ〜１００ｃにおけるストレージ制御方法について説明する。
図４は、各サーバが備えるキャッシュおよび主なテーブル情報について示す図である。なお、ここでは説明を簡単にするために、サーバ１００ａ〜１００ｃは、ストレージ２００ａ〜２００ｃの物理領域によって実現される１つの論理ボリュームを、ホスト装置４００に提供するものとする。
【００４８】
サーバ１００ａのＲＡＭ１０２には、キャッシュ１１０ａの領域が確保される。同様に、サーバ１００ｂのＲＡＭ１０２には、キャッシュ１１０ｂの領域が確保され、サーバ１００ｃのＲＡＭ１０２には、キャッシュ１１０ｃの領域が確保される。キャッシュ１１０ａ〜１１０ｃには、論理ボリュームに対応するストレージ２００ａ〜２００ｃの記憶領域からのデータ読み出しの応答速度を高めるために、論理ボリュームのデータが一時的に記憶される。
【００４９】
また、本実施の形態に係るストレージシステムでは、論理ボリュームに含まれる同じ内容のデータが記憶領域に重複して格納されないようにする「重複除去」が行われる。重複除去では、論理ボリュームのブロック単位で、書き込みデータのハッシュ値（フィンガプリント）が計算され、ハッシュ値が同一となるデータが重複して格納されないように制御される。また、後に詳述するが、重複除去は、ストレージ２００ａ〜２００ｃへの格納段階でなく、キャッシュ１１０ａ〜１１０ｃへの格納段階で行われる。
【００５０】
さらに、ストレージシステムでは、ハッシュ値をキーとしてデータがストレージノードＮ０〜Ｎ２の間で分散管理される。ここで、１６進数で表記したハッシュ値における最上位ケタの値を「ハッシュ先頭値」と記載すると、図４の例ではハッシュ先頭値に基づいて次のような方法でデータが分散管理される。
【００５１】
ストレージノードＮ０は、ハッシュ先頭値が０〜４となるデータの管理を担当する。ストレージノードＮ０に含まれるストレージ２００ａには、ハッシュ値の先頭値が０〜４となるデータだけが格納され、ストレージノードＮ０に含まれるサーバ１００ａは、ハッシュ先頭値０〜４のハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル１２１ａを保持する。
【００５２】
ストレージノードＮ１は、ハッシュ先頭値が５〜９となるデータの管理を担当する。ストレージノードＮ１に含まれるストレージ２００ｂには、ハッシュ値の先頭値が５〜９となるデータだけが格納され、ストレージノードＮ１に含まれるサーバ１００ｂは、ハッシュ先頭値５〜９のハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル１２１ｂを保持する。
【００５３】
ストレージノードＮ２は、ハッシュ先頭値がＡ〜Ｆとなるデータの管理を担当する。ストレージノードＮ２に含まれるストレージ２００ｃには、ハッシュ値の先頭値がＡ〜Ｆとなるデータだけが格納され、ストレージノードＮ２に含まれるサーバ１００ｃは、ハッシュ先頭値Ａ〜Ｆのハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル１２１ｃを保持する。
【００５４】
このような分散管理により、論理ボリューム内のデータはストレージ２００ａ〜２００ｃにほぼ均等に分散されて格納される。また、論理ボリュームのブロックごとに書き込み頻度の偏りがあったとしても、それに関係なく、書き込みアクセスがストレージ２００ａ〜２００ｃでほぼ均等に分散される。そのため、ストレージ２００ａ〜２００ｃのそれぞれにおける書き込み回数の最大値が減少する。さらに、重複除去が行われることで、同じ内容のデータがストレージ２００ａ〜２００ｃに書き込まれなくなるので、ストレージ２００ａ〜２００ｃのそれぞれにおける書き込み回数がさらに減少する。
【００５５】
ここで、ＳＳＤは、書き込み回数が増加するにつれて性能が劣化するという特徴がある。上記のような分散管理が行われることで、ストレージ２００ａ〜２００ｃ内の記憶装置としてＳＳＤが使用された場合に、ＳＳＤの性能劣化を抑制し、それらの寿命を延ばすことができる。
【００５６】
一方、上記のようなハッシュ値に基づく分散管理とは別に、論理ボリューム内の各ブロックと物理記憶領域とのマッピングは次のように管理される。サーバ１００ａ〜１００ｃのそれぞれには、論理ボリュームの領域の中から、物理記憶領域とのマッピングの管理を担当する領域が割り当てられる。なお、論理ボリュームの各ブロックには、００００〜ｚｚｚｚのＬＢＡ（Logical Block Address）が割り当てられているとする。
【００５７】
図４の例では、サーバ１００ａは、ＬＢＡ００００〜ＬＢＡｘｘｘｘの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのＬＢＡ管理テーブル１２２ａを保持する。サーバ１００ｂは、ＬＢＡ（ｘｘｘｘ＋１）〜ＬＢＡｙｙｙｙの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのＬＢＡ管理テーブル１２２ｂを保持する（ただし、ｘｘｘｘ＜ｙｙｙｙ）。サーバ１００ｃは、ＬＢＡ（ｙｙｙｙ＋１）〜ＬＢＡｚｚｚｚの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのＬＢＡ管理テーブル１２２ｃを保持する（ただし、ｙｙｙｙ＜ｚｚｚｚ）。
【００５８】
なお、例えば、次のような方法で各ブロックと物理記憶領域とのマッピングが管理されてもよい。例えば、論理ボリュームが一定サイズのストリップに分割され（ストライピング）、先頭ストリップから順にサーバ１００ａ，１００ｂ，１００ｃ，１００ａ，１００ｂ，・・・のように割り当てられる。そして、サーバ１００ａ〜１００ｃは、それぞれに割り当てられたストリップ内のブロックと物理記憶領域とのマッピングを管理する。
【００５９】
次に、ハッシュ管理テーブル１２１ａ〜１２１ｃおよびＬＢＡ管理テーブル１２２ａ〜１２２ｃのデータ構成例について説明する。なお、以下の説明では、ハッシュ管理テーブル１２１ａ〜１２１ｃを特に区別せずに示す場合、「ハッシュ管理テーブル１２１」と表記する場合がある。また、ＬＢＡ管理テーブル１２２ａ〜１２２ｃを特に区別せずに示す場合、「ＬＢＡ管理テーブル１２２」と表記する場合がある。
【００６０】
図５は、ハッシュ管理テーブルのデータ構成例を示す図である。ハッシュ管理テーブル１２１は、ハッシュ値、ポインタおよびカウント値の各項目を有する。
ハッシュ値の項目には、ブロック単位のデータに基づいて計算されたハッシュ値が登録される。ポインタの項目には、対応するデータの記憶位置を示すポインタが登録される。対応するデータがキャッシュに存在する場合、ポインタの項目にはキャッシュページのページ番号が登録され、対応するデータがストレージに存在する場合、ポインタの項目にはストレージ上のアドレス（ＰＢＡ：Physical Block Address）が登録される。なお、図５では、「ＣＰ：」はキャッシュページのページ番号が登録されていることを示し、「ＰＢＡ：」はＰＢＡが登録されていることを示す。カウント値の項目には、ポインタが示す記憶位置がいくつのＬＢＡに対応付けられているか、換言すると、ハッシュ値に対応するデータがいくつ重複しているかを示す値が登録される。
【００６１】
図６は、ＬＢＡ管理テーブルのデータ構成例を示す図である。ＬＢＡ管理テーブル１２２は、ＬＢＡおよびポインタの各項目を有する。
ＬＢＡの項目には、論理ボリュームのブロックを示すＬＢＡが登録される。ポインタの項目には、対応するデータのハッシュ値が計算済みの場合、ハッシュ管理テーブル１２１のエントリを示すアドレスが登録され、未計算の場合、キャッシュページのページ番号が登録される。なお、図６では、「ＥＮ：」はエントリのアドレスが登録されていることを示し、「ＣＰ：」はキャッシュページのページ番号が登録されていることを示す。
【００６２】
次に、図７〜図１０を用いて、ストレージシステムにおける基本的な書き込み制御処理について説明する。前述のように、ストレージシステムでは、ストレージ２００ａ〜２００ｃへの格納段階でなく、キャッシュ１１０ａ〜１１０ｃへの格納段階で重複除去が行われる。また、重複除去の方法としては、「インライン方式」と「ポストプロセス方式」とが選択的に用いられる。インライン方式は、ホスト装置４００からの書き込み要求に対して応答する前に重複除去を完了させる方式である。一方、ポストプロセス方式は、ホスト装置４００からの書き込み要求に対して応答した後にバックグラウンドで重複除去が行われる方式である。以下、インライン方式の重複除去を用いた書き込み制御モードを「インラインモード」と記載し、ポストプロセス方式の重複除去を用いた書き込みモードを「ポストプロセスモード」と記載する。
【００６３】
図７は、インラインモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図７では例として、ホスト装置４００からのデータの書き込み要求をサーバ１００ａが受信したとする。
【００６４】
［ステップＳ１１］サーバ１００ａは、論理ボリュームのＬＢＡを書き込み先として指定した書き込み要求およびデータを受信する。
［ステップＳ１２］サーバ１００ａは、受信したデータのハッシュ値を計算する。
【００６５】
［ステップＳ１３］サーバ１００ａは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。なお、以下の説明では、あるハッシュ値に対応するデータの管理を担当するサーバを、「ハッシュ値の担当サーバ」と略称する場合がある。図７の例では、算出されたハッシュ値の担当サーバとしてサーバ１００ｂが特定されたとする。この場合、サーバ１００ａは、データとハッシュ値をサーバ１００ｂに転送し、データの書き込みを指示する。
【００６６】
［ステップＳ１４］サーバ１００ｂは、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されているかを判定する。
受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されていない場合、サーバ１００ｂは、キャッシュ１１０ｂに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。また、サーバ１００ｂは、ハッシュ管理テーブル１２１ｂに新たなエントリを作成し、そのエントリに、受信したハッシュ値と、作成したキャッシュページのページ番号と、カウント値「１」とを登録する。そして、サーバ１００ｂは、作成したエントリのアドレスをサーバ１００ａに送信する。
【００６７】
一方、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されている場合、書き込みが要求されたデータはキャッシュ１１０ｂまたはストレージ２００ｂにすでに格納されている。この場合、サーバ１００ｂは、そのハッシュ値が登録されていたエントリのカウント値を１だけカウントアップし、そのエントリのアドレスをサーバ１００ａに送信する。なお、受信したデータは破棄される。
【００６８】
［ステップＳ１５］サーバ１００ａは、書き込み先として指定されたＬＢＡに基づいて、このＬＢＡと物理記憶領域とのマッピングを担当するサーバを特定する。なお、以下の説明では、あるＬＢＡと物理記憶領域とのマッピングを担当するサーバを、「ＬＢＡの担当サーバ」と略称する場合がある。図７の例では、指定されたＬＢＡの担当サーバとしてサーバ１００ｃが特定されたとする。この場合、サーバ１００ａは、ステップＳ１４でサーバ１００ｂから送信されたエントリのアドレスと、書き込み先として指定されたＬＢＡとをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００６９】
［ステップＳ１６］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、受信したＬＢＡが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。これにより、ＬＢＡが示すブロックと物理記憶領域とが対応付けられる。
【００７０】
［ステップＳ１７］サーバ１００ａは、サーバ１００ｃからテーブルの更新完了通知を受信すると、ホスト装置４００に対して書き込み完了を示す応答メッセージを送信する。
以上のように、インラインモードでは、ホスト装置４００に対して応答する前に、書き込みが要求されたデータが重複除去された状態でサーバ１００ａ〜１００ｃのいずれかのキャッシュに格納される。
【００７１】
図８は、インラインモードでのテーブル更新処理例を示す図である。この図８では、図７の処理において、ＬＢＡ０００１に対するデータブロックＤＢ１の書き込みが要求されたものとする。また、データブロックＤＢ１に基づいてハッシュ値「０ｘ９２ＤＦ５９」が算出されたとする（なお、「０ｘ」は１６進数で表記したことを示す）。
【００７２】
この場合、ステップＳ１４の処理により、サーバ１００ｂのキャッシュ１１０ｂにデータブロックＤＢ１が格納される。また、サーバ１００ｂが保持するハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１には、ハッシュ値「０ｘ９２ＤＦ５９」に対応するポインタの項目に、データブロックＤＢ１が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックＤＢ１と同じ内容のデータブロックがすでにキャッシュ１１０ｂにすでに登録されていた場合、ハッシュ管理テーブル１２１ｂには上記情報を含むエントリ１２１ｂ１がすでに登録されている。
【００７３】
また、ステップＳ１６の処理により、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃにおいては、ＬＢＡ０００１に対応するポインタの項目に、ハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１を指し示す情報が登録される。
【００７４】
図９は、ポストプロセスモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図９では例として、図７と同様の初期状態から、図７と同様に、ホスト装置４００からのデータの書き込み要求をサーバ１００ａが受信したとする。
【００７５】
［ステップＳ２１］サーバ１００ａは、論理ボリュームのＬＢＡを書き込み先として指定した書き込み要求およびデータを受信する。
［ステップＳ２２］サーバ１００ａは、書き込み先として指定されたＬＢＡに基づいて、書き込み先ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図９の例では、サーバ１００ｃが担当サーバとして特定されたとする。この場合、サーバ１００ａは、書き込みが要求されたデータをサーバ１００ｃに送信して、キャッシュ１１０ｃへの格納を指示する。
【００７６】
［ステップＳ２３］サーバ１００ｃは、キャッシュ１１０ｃに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。このデータは、ハッシュ値の計算が行われていない「ハッシュ未計算ブロック」のデータとしてキャッシュ１１０ｃに格納される。また、サーバ１００ｃは、作成したキャッシュページのページ番号をサーバ１００ａに送信する。
【００７７】
［ステップＳ２４］サーバ１００ｃは、受信したページ番号と、書き込み先として指定されたＬＢＡとをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００７８】
［ステップＳ２５］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、受信したＬＢＡが登録されたエントリにおいて、受信したページ番号をポインタの項目に登録する。
【００７９】
なお、書き込み先として指定されたＬＢＡは、ステップＳ２２でデータとともに転送されてもよい。この場合、ステップＳ２４でのサーバ１００ａとサーバ１００ｃとの通信は不要になる。
【００８０】
［ステップＳ２６］サーバ１００ａは、サーバ１００ｃからテーブルの更新完了通知を受信すると、ホスト装置４００に対して書き込み完了を示す応答メッセージを送信する。
［ステップＳ２７］サーバ１００ｃは、ステップＳ２６の処理後の非同期タイミングで、ステップＳ２３でキャッシュ１１０ｃに格納したデータのハッシュ値を計算する。
【００８１】
［ステップＳ２８］サーバ１００ｃは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。図９の例では、サーバ１００ｂが担当サーバとして特定されたとする。この場合、サーバ１００ｃは、データとハッシュ値をサーバ１００ｂに転送し、データの書き込みを指示する。このとき、データが格納されていたキャッシュページは解放される。
【００８２】
［ステップＳ２９］サーバ１００ｂは、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されているかを判定し、その判定結果に応じたデータ格納およびテーブル更新処理を実行する。この処理は、図７のステップＳ１４と同様である。
【００８３】
［ステップＳ３０］サーバ１００ｂは、受信したハッシュ値が登録されている、ハッシュ管理テーブル１２１ｂのエントリのアドレスをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００８４】
［ステップＳ３１］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、ステップＳ２７でハッシュ値を計算したデータのＬＢＡが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。このポインタの項目では、登録されていたキャッシュページのページ番号が、受信したエントリのアドレスによって更新される。
【００８５】
以上のように、ポストプロセスモードでは、ホスト装置４００から書き込みが要求されたデータは、重複の有無を判定せずに、その書き込み先のＬＢＡの管理を担当するサーバ１００ｃのキャッシュ１２０ｃに一旦格納される。そして、格納が完了し、格納に伴うＬＢＡ管理テーブル１２２ｃの更新が完了した時点で、ホスト装置４００に応答メッセージが送信される。このように、応答までの間に重複除去処理が行われないことで、インラインモードと比較して、ホスト装置４００に対する応答時間（レイテンシ）を短縮できる。
【００８６】
図１０は、ポストプロセスモードでのテーブル更新処理例を示す図である。この図１０では、図９の処理において、ＬＢＡ０００１に対するデータブロックＤＢ１の書き込みが要求されたものとする。また、データブロックＤＢ１に基づいてハッシュ値「０ｘ９２ＤＦ５９」が算出されたとする。
【００８７】
この場合、ホスト装置４００への応答前の段階では、ステップＳ２３で、サーバ１００ｃのキャッシュ１１０ｃにデータブロックＤＢ１が格納される。また、ステップＳ２５で、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃに、ＬＢＡ０００１に対応付けてキャッシュ１１０ｃにおけるデータ格納位置を指し示す情報が登録される。
【００８８】
また、ホスト装置４００への応答後のステップＳ２８で、データブロックＤＢ１がサーバ１００ｂに転送され、これに応じて重複除去処理が行われる。ステップＳ２９では、サーバ１００ｂのキャッシュ１１０ｂにデータブロックＤＢ１が格納される。また、サーバ１００ｂが保持するハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１には、ハッシュ値「０ｘ９２ＤＦ５９」に対応するポインタの項目に、データブロックＤＢ１が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックＤＢ１と同じ内容のデータブロックがすでにキャッシュ１１０ｂに登録されていた場合、ハッシュ管理テーブル１２１ｂには上記情報を含むエントリ１２１ｂ１がすでに登録されている。
【００８９】
そして、ステップＳ３１では、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃにおいて、ＬＢＡ０００１に対応するポインタの項目に、ハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１を指し示す情報が登録される。
【００９０】
図１１は、ストレージシステムにおける読み出し制御処理の手順を示すシーケンス図である。この図１１では、ホスト装置４００からサーバ１００ａに対して、ＬＢＡ０００１からのデータ読み出しが要求されたものとする。
【００９１】
［ステップＳ４１］サーバ１００ａは、ＬＢＡ０００１からのデータの読み出し要求をホスト装置４００から受信する。
［ステップＳ４２］サーバ１００ａは、読み出し元として指定されたＬＢＡに基づいて、読み出し元ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図１１の例では、サーバ１００ｃが担当サーバとして特定される。この場合、サーバ１００ａは、ＬＢＡをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの検索を指示する。
【００９２】
［ステップＳ４３］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃから、受信したＬＢＡを含むエントリを特定し、特定されたエントリにおけるポインタの項目から情報を取得する。ここでは、ポインタの項目から、サーバ１００ｂのハッシュ管理テーブル１２１ｂのエントリのアドレスが取得されたものとする。
【００９３】
［ステップＳ４４］サーバ１００ｃは、取得されたエントリのアドレスをサーバ１００ｂに送信して、対応する記憶領域からサーバ１００ａへのデータ読み出しを指示する。
［ステップＳ４５］サーバ１００ｂは、ハッシュ管理テーブル１２１ｂにおける受信したアドレスが示すエントリを参照し、ポインタの項目から情報を読み出す。ここでは、キャッシュページのアドレスが読み出されたとする。サーバ１００ｂは、読み出されたアドレスが示すキャッシュ１１０ｂのキャッシュページからデータを読み出し、読み出したデータをサーバ１００ａに送信する。
【００９４】
［ステップＳ４６］サーバ１００ａは、受信したデータをホスト装置４００に送信する。
以上のように、ハッシュ管理テーブル１２１およびＬＢＡ管理テーブル１２２に基づいて、読み出しが要求されたデータがサーバ１００ａに送信される。なお、例えば、ステップＳ４３において、ＬＢＡ管理テーブル１２２ｃのポインタ項目から、サーバ１００ｃのキャッシュ１１０ｃにおけるキャッシュページのページ番号が取得される場合もある。これは、読み出しが要求されたデータについてハッシュ値の計算が未実行の場合である。この場合、サーバ１００ｃは、キャッシュ１１０ｃの該当するキャッシュページからデータを読み出し、サーバ１００ａに送信する。サーバ１００ａは、受信したデータをホスト装置４００に送信する。
【００９５】
ところで、図７に示したように、インラインモードでは、ホスト装置４００から書き込みが要求されてからホスト装置４００に応答するまでの間に、ハッシュ値の計算処理が実行される。例えば、８ＫＢのデータブロックに基づくハッシュ値の計算処理には２０μｓ程度かかるため、その分だけ書き込み要求に対するホスト装置４００への応答時間が長くなってしまうという問題がある。
【００９６】
一方、図９に示したように、ポストプロセスモードでは、ホスト装置４００から書き込みが要求されてからホスト装置４００に応答するまでの間に、ハッシュ値の計算処理が実行されない。そのため、インラインモードと比較して書き込み要求に対する応答時間を向上させることができる。
【００９７】
しかし、ポストプロセスモードでは、ホスト装置４００に応答した後に、ハッシュ値計算を含む重複除去のための処理がバックグラウンドで実行される。このため、各サーバでのバックグランドでの処理負荷が、ホスト装置４００に対するＩＯ応答性能を低下させる要因になり得る。
【００９８】
これに加えて、バックグラウンドでの処理過程では、図９の例のように、データをキャッシュに一時的に保持するサーバと、ハッシュ値から特定される、データの管理を担当するサーバとが異なる場合、サーバ間での通信が発生する。この通信では、テーブル更新指示のような命令やその応答だけでなく、実体的な書き込みデータの転送も行われる（図９のステップＳ２８参照）。
【００９９】
図７や図９の例のように、インラインモードでもポストプロセスモードでも、ホスト装置４００から書き込み要求を受信してから応答するまでの間にサーバ間の通信が発生し得る。また、図１１の例のように、ホスト装置４００から読み出し要求を受信した場合にも、ホスト装置４００に応答するまでの間にサーバ間の通信が発生し得る。このため、上記のようなバックグラウンドの処理過程での通信によってサーバ間の通信トラフィックが混雑すると、それがホスト装置４００に対するＩＯ応答性能を低下させる要因になり得る。
【０１００】
例えば、サーバ間の通信で単位時間に伝送可能なメッセージ数には上限がある。このため、サーバ間の通信回数が増大すると、ホスト装置４００からのＩＯ要求を単位時間に処理できる数（すなわち、ホスト装置４００から見たサーバ１００のＩＯＰＳ）が低下してしまう。
【０１０１】
本実施の形態のサーバ１００は、インラインモードの書き込み制御処理とポストプロセスモードの書き込み制御処理とを選択的に実行し、その実行比率を制御する。ここで、ポストプロセスモードの書き込み制御処理の実行比率を高くする方が、ホスト装置４００からの書き込み要求に対する応答時間（書き込み応答時間）を全体的に短縮できる。しかし、上記の理由により、サーバ１００のＩＯＰＳが低下する可能性がある。
【０１０２】
そこで、本実施の形態では、サーバ１００は、ＩＯＰＳの目標値を設定する。そして、サーバ１００は、この目標値を満たす範囲でポストプロセスモードの書き込み制御処理が優先的に実行されるように、インラインモードの書き込み制御処理とポストプロセスモードの書き込み制御処理との実行比率を制御する。これにより、サーバ１００のＩＯＰＳを維持した状態で、書き込み要求に対する応答時間を短縮する。
【０１０３】
次に、サーバ１００の処理の詳細について説明する。
図１２は、サーバが備える処理機能の構成例を示すブロック図である。サーバ１００は、記憶部１２０、ＩＯ制御部１３１、モード決定部１３２、重複除去制御部１３３およびＬＢＡ管理部１３４を有する。
【０１０４】
記憶部１２０は、ＲＡＭ１０２またはＳＳＤ１０３など、サーバ１００が備える記憶装置の記憶領域として実現される。記憶部１２０には、前述のハッシュ管理テーブル１２１およびＬＢＡ管理テーブル１２２が格納される。さらに、記憶部１２０には、ハッシュ未計算ブロック数１２３、ハッシュ計算済みブロック数１２４および目標情報１２５が格納される。
【０１０５】
ハッシュ未計算ブロック数１２３は、サーバ１００のキャッシュ１１０に格納されたデータブロックのうち、ハッシュ未計算ブロックの数をカウントしたカウント値である。ハッシュ未計算ブロックとは、ポストプロセスモードの書き込み制御処理において、ハッシュ値の計算が行われずに、ホスト装置４００から書き込み先として指定されたＬＢＡの担当サーバのキャッシュ１１０に格納されたデータブロックである。
【０１０６】
一方、ハッシュ計算済みブロック数１２４は、サーバ１００のキャッシュ１１０に格納されたデータブロックのうち、ハッシュ計算済みブロックの数をカウントしたカウント値である。ハッシュ計算済みブロックとは、ハッシュ値が算出され、算出されたハッシュ値の担当サーバのキャッシュ１１０に格納されたデータブロックである。
【０１０７】
目標情報１２５は、書き込み制御モードを決定するための参照される情報である。例えば、目標情報１２５は、ＩＯＰＳの目標値であり性能目標Ｓや、各モードの書き込み制御処理の実行比率の目標値である目標比率Ｆtgtなどを含む。目標情報１２５に含まれる情報の詳細については後述する。
【０１０８】
ＩＯ制御部１３１、モード決定部１３２、重複除去制御部１３３およびＬＢＡ管理部１３４の処理は、例えば、サーバ１００が備えるプロセッサ１０１が所定のプログラムを実行することで実現される。
【０１０９】
ＩＯ制御部１３１は、ホスト装置４００からのＩＯ要求を受信し、受信したＩＯ要求に対して応答するまでの処理を統括的に制御する。ＩＯ制御部１３１は、ホスト装置４００から書き込み要求を受信した場合には、インラインモードとポストプロセスモードのどちらの書き込み制御モードを選択するかをモード決定部１３２に問い合わせる。
【０１１０】
ＩＯ制御部１３１は、問い合わせの結果、インラインモードを選択する場合には、書き込みデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバの重複除去制御部１３３に書き込みデータとハッシュ値とを渡し、書き込みデータの格納とハッシュ管理テーブル１２１の更新を指示する。さらに、ＩＯ制御部１３１は、書き込み先のＬＢＡの担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバのＬＢＡ管理部１３４に、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１１１】
一方、ＩＯ制御部１３１は、問い合わせの結果、ポストプロセスモードを選択する場合には、書き込み先のＬＢＡの担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバのＬＢＡ管理部１３４に書き込みデータを渡し、書き込みデータの格納とＬＢＡ管理テーブル１２２の更新を指示する。
【０１１２】
モード決定部１３２は、ＩＯ制御部１３１からの依頼に応じて、インラインモードとポストプロセスモードのどちらの書き込み制御モードを選択するかを決定する。モード決定部１３２は、モード決定のために必要なパラメータを取得するパラメータ取得部１３２ａと、取得されたパラメータを評価してモードを決定するパラメータ評価部１３２ｂとを有する。なお、モード決定部１３２によるモード決定方法の詳細については、後の図１３を用いて説明する。
【０１１３】
重複除去制御部１３３は、書き込みデータとハッシュ値とを受け取ると、同一内容のデータが重複しないように、書き込みデータをキャッシュ１１０に格納し、ハッシュ管理テーブル１２１を更新する。インラインモードの書き込み制御過程では、重複除去制御部１３３は、書き込みデータとハッシュ値とをいずれかのサーバ１００のＩＯ制御部１３１から受け取る。一方、ポストプロセスモードの書き込み制御過程では、重複除去制御部１３３は、書き込みデータとハッシュ値とをいずれかのサーバ１００のＬＢＡ管理部１３４から受け取り、そのＬＢＡ管理部１３４に対してＬＢＡ管理テーブル１２２の更新を指示する。
【０１１４】
ＬＢＡ管理部１３４は、インラインモードの書き込み制御過程では、ＩＯ制御部１３１からの指示に応じてＬＢＡ管理テーブル１２２を更新する。一方、ＬＢＡ管理部１３４は、ポストプロセスモードの書き込み制御過程では、ＩＯ制御部１３１からの指示に応じて、書き込みデータをハッシュ未計算ブロックのデータとしてキャッシュ１１０に格納し、ＬＢＡ管理テーブル１２２を更新する。さらに、ＬＢＡ管理部１３４は、キャッシュ１１０内のハッシュ未計算ブロックのデータを順次選択し、選択したデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。ＬＢＡ管理部１３４は、特定されたサーバの重複除去制御部１３３にデータとハッシュ値とを渡し、データの格納とハッシュ管理テーブル１２１の更新を指示する。そして、ＬＢＡ管理部１３４は、その重複除去制御部１３３からの指示に応じてＬＢＡ管理テーブル１２２を更新する。
【０１１５】
次に、モード決定部１３２による書き込み制御モードの決定処理について説明する。図１３は、書き込み制御モードの決定処理について説明するための図である。
モード決定部１３２は、書き込み制御処理の一部を構成するバックグラウンド処理のコストを、インラインモードとポストプロセスモードのそれぞれについて計算する。バックグラウンド処理とは、書き込み要求に対する応答をホスト装置４００に送信した後、データをキャッシュ１１０からストレージ２００へデステージするまでの処理である。また、コストとは、ブロックごとのバックグラウンド処理を連続して実行可能な実行間隔を示す。
【０１１６】
図１３の左側に示すように、インラインモードでは、バックグラウンド処理には、キャッシュ１１０からストレージ２００へのデータのデステージのみが含まれる。デステージのコストは、ストレージ２００内のＳＳＤに対して１ブロック分のデータの格納を指示するコマンドを送信可能な間隔を示す格納指示間隔ｗと表される。したがって、インラインモードでのバックグラウンド処理のコストＨは、ｗとなる。
【０１１７】
一方、図１３の右側に示すように、ポストプロセスモードでは、バックグラウンド処理には、ハッシュ値の計算、データとハッシュ値の転送、ＬＢＡ管理テーブル１２２の更新指示、キャッシュ１１０からストレージ２００へのデータのデステージが含まれる。ハッシュ値の計算は、図９のステップＳ２７の処理に対応し、そのコストは１ブロック分のデータに基づくハッシュ値の計算時間ｈと表される。データとハッシュ値の転送は、図９のステップＳ２８の処理に対応し、そのコストは、サーバ１００から他のサーバ１００へコマンドを送信可能な間隔を示すコマンド送信間隔ｌと、１ブロック分のデータの転送にかかるデータ転送時間ｔとの加算値として表される。ＬＢＡ管理テーブル１２２の更新指示は、図９のステップＳ３０の処理に対応し、そのコストは、コマンド送信間隔ｌとして表される。デステージのコストは、インラインモードの場合と同様に、格納指示間隔ｗと表される。したがって、ポストプロセスモードでのバックグラウンド処理のコストＬは、「ｈ＋２・ｌ＋ｔ＋ｗ」と計算される。
【０１１８】
インラインモードでのバックグラウンド処理のコストＨは、ハッシュ計算済みブロックのデータをキャッシュ１１０からストレージ２００へ追い出すことが可能な間隔を示す。また、ポストプロセスモードでのバックグラウンド処理のコストＬは、ハッシュ未計算ブロックのデータをキャッシュ１１０からストレージ２００へ追い出すことが可能な間隔を示す。
【０１１９】
一方、キャッシュ１１０に格納されているデータブロックのうちの最低何個を、単位時間にストレージ２００に追い出すことができるかを示す性能目標Ｓが、あらかじめ与えられ、目標情報１２５に記録される。この性能目標Ｓは、キャッシュ１１０に空き領域がない状態において、ホスト装置４００からの書き込み要求に応じて、最低何個の新たなデータブロックを単位時間にキャッシュ１１０に格納できるか、を示す指標とみなすことができる。このため、性能目標Ｓは、サーバ１００で保証されるＩＯＰＳの最低基準値の１つとして用いることができる。
【０１２０】
ここで、キャッシュ１１０に格納されているハッシュ未計算ブロックの数とハッシュ計算済みブロックの数との比率を「Ｆ：１−Ｆ」とする（ただし、０≦Ｆ≦１）。このとき、バックグラウンド処理のコストと性能目標Ｓとの関係は、次の式（１）のように表される。
１／｛Ｆ・Ｌ＋（１−Ｆ）Ｈ｝≧Ｓ      ・・・（１）
モード決定部１３２は、キャッシュ１１０に格納されているハッシュ未計算ブロックの数とハッシュ計算済みブロックの数との比率がどのような場合に、性能目標Ｓを満たすかを計算する。この比率を目標比率Ｆtgtとすると、目標比率Ｆtgtは次の式（２）によって計算される。この式（２）は、式（１）の左辺と右辺とをイコールとした場合に、比率Ｆを求める式である。
Ｆtgt＝（１−Ｓ・Ｈ）／Ｓ（Ｌ−Ｈ）      ・・・（２）
この目標比率Ｆtgtは、性能目標Ｓを下回らない範囲でのハッシュ未計算ブロックの比率Ｆの最大値を示す。すなわち、キャッシュ１１０内のハッシュ未計算ブロックの数とハッシュ計算済みブロックの数との比率が目標比率Ｆtgtと一致するとき、サーバ１００のＩＯＰＳを目標以上に維持しながら、ポストプロセスモードで処理されるデータブロック数を最も多くすることができる。したがって、サーバ１００のＩＯＰＳを目標以上に維持しながら、ホスト装置４００からの書き込み要求に対する応答時間をできる限り短縮できる。
【０１２１】
モード決定部１３２は、現在のキャッシュ１１０内のハッシュ未計算ブロックの数とハッシュ計算済みブロックの数とを検出し、後者に対する前者の比率Ｆdetを計算する。そして、モード決定部１３２は、比率Ｆdetが目標比率Ｆtgtに近づくように、ホスト装置４００から書き込みが要求されたデータブロックについてインラインモードとポストプロセスモードのどちらを用いて書き込み制御を行うかを決定する。これにより、サーバ１００のＩＯＰＳを目標以上に維持しながら、ホスト装置４００からの書き込み要求に対する応答時間をできる限り短縮できる。
【０１２２】
なお、本実施の形態では、図１３に示したパラメータのうち、計算時間ｈ、コマンド送信間隔ｌ、データ転送時間ｔは固定値として目標情報１２５にあらかじめ登録され、格納指示間隔ｗのみがモード決定のたびに検出されるものとする。これは、ＳＳＤにおける格納指示間隔ｗが、ＳＳＤに格納されたデータ量などによって変化する可能性があるからである。ただし、例えば、図１３に示したすべてのパラメータを固定値としてもよい。この場合、目標比率Ｆtgtは、モード決定のたびに計算する必要のない固定値となるので、目標情報１２５にあらかじめ登録されていればよい。逆に、格納指示間隔ｗ以外のパラメータの中でも動的に変化する可能性のあるパラメータについては、モード決定のたびに検出されてもよい。
【０１２３】
次に、サーバ１００の処理についてフローチャートを用いて説明する。
図１４は、書き込み応答処理手順の例を示すフローチャートである。
［ステップＳ６１］ＩＯ制御部１３１は、ホスト装置４００から、論理ボリュームのＬＢＡを書き込み先として指定した書き込み要求と書き込みデータとを受信する。
【０１２４】
［ステップＳ６２］ＩＯ制御部１３１は、インラインモードとポストプロセスモードのどちらの書き込み制御モードを選択するかをモード決定部１３２に問い合わせる。この問い合わせに応じて、モード決定部１３２は、選択すべき書き込み制御モードを決定する。なお、モード決定部１３２によるモード決定処理の内容については、次の図１５で説明する。
【０１２５】
［ステップＳ６３］ＩＯ制御部１３１は、問い合わせの結果、インラインモードが選択された場合にはステップＳ６４の処理を実行し、ポストプロセスモードが選択された場合にはステップＳ６５の処理を実行する。
【０１２６】
［ステップＳ６４］ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。この処理内容については、後の図１６において説明する。
［ステップＳ６５］ＩＯ制御部１３１は、ポストプロセスモードでのＩＯ制御処理を実行する。この処理内容については、後の図１７において説明する。
【０１２７】
［ステップＳ６６］ＩＯ制御部１３１は、ステップＳ６４またはステップＳ６５の処理が完了すると、ホスト装置４００に対して書き込み完了を示す応答メッセージを送信する。
【０１２８】
図１５は、モード決定処理手順の例を示すフローチャートである。この図１５の処理は、図１４のステップＳ６２でのＩＯ制御部１３１からの問い合わせに応じて、モード決定部１３２によって実行される。
【０１２９】
［ステップＳ６２ａ］モード決定部１３２のパラメータ取得部１３２ａは、キャッシュ１１０における現在のハッシュ未計算ブロック数およびハッシュ計算済みブロック数を取得する。これらの数は、記憶部１２０からハッシュ未計算ブロック数１２３およびハッシュ計算済みブロック数１２４を読み出すことで得られる。
【０１３０】
［ステップＳ６２ｂ］モード決定部１３２のパラメータ評価部１３２ｂは、ハッシュ未計算ブロック数とハッシュ計算済みブロック数との比率「Ｆdet：１−Ｆdet」を計算する。また、パラメータ評価部１３２ｂは、キャッシュ１１０において現在使用されているキャッシュページの総数を示すページ使用数ｃを計算する。ページ使用数ｃは、ハッシュ未計算ブロック数１２３とハッシュ計算済みブロック数１２４とを加算することで算出される。
【０１３１】
［ステップＳ６２ｃ］パラメータ取得部１３２ａは、ストレージ２００の格納指示間隔ｗを検出する。前述のように、格納指示間隔ｗとは、ストレージ２００内のＳＳＤに対して１ブロック分のデータの格納を指示するコマンドを送信可能な間隔を示す。ここで言うストレージ２００とは、モード決定部１３２と同じストレージノードに属するストレージ２００である。
【０１３２】
［ステップＳ６２ｄ］パラメータ評価部１３２ｂは、ハッシュ未計算ブロック数とハッシュ計算済みブロック数との目標比率Ｆtgtを計算する。
本実施の形態では、性能目標Ｓ、ハッシュ値の計算時間ｈ、コマンド送信間隔ｌおよびデータ転送時間ｔが、記憶部１２０の目標情報１２５にあらかじめ記録される。パラメータ評価部１３２ｂは、目標情報１２５から取得したハッシュ値の計算時間ｈ、コマンド送信間隔ｌおよびデータ転送時間ｔと、ステップＳ６２ｃで検出された格納指示間隔ｗに基づいて、前述のコストＬ，Ｈを計算する。パラメータ評価部１３２ｂは、算出されたコストＬ，Ｈと、目標情報１２５から取得した性能目標Ｓとに基づき、前述の式（２）にしたがって目標比率Ｆtgtを計算し、記憶部１２０の目標情報１２５に上書きして登録する。
【０１３３】
［ステップＳ６２ｅ］パラメータ評価部１３２ｂは、ステップＳ６２ｂで算出されたページ使用数ｃが、キャッシュ１１０におけるキャッシュページの最大数Ｎと、ステップＳ６２ｄで算出された目標比率Ｆtgtとの乗算値より小さいかを判定する。キャッシュページの最大数Ｎが乗算値より小さい場合、パラメータ評価部１３２ｂはステップＳ６２ｆの処理を実行する。一方、キャッシュページの最大値が乗算値以上である場合、パラメータ評価部１３２ｂはステップＳ６２ｇの処理を実行する。
【０１３４】
［ステップＳ６２ｆ］キャッシュページの最大数Ｎが上記の乗算値より小さい場合、キャッシュ１１０に十分余裕があると推定される。この場合、キャッシュ１１０にハッシュ未計算ブロックが増えてもＩＯＰＳに影響がない。このため、パラメータ評価部１３２ｂは、選択すべき書き込み制御モードをポストプロセスモードに決定する。
【０１３５】
［ステップＳ６２ｇ］パラメータ評価部１３２ｂは、ページ使用数ｃがキャッシュページの最大数Ｎとほぼ同一かを判定する。例えば、ページ使用数ｃとキャッシュページの最大数Ｎとの差が１％以内の場合、これらがほぼ同一と判定される。ほぼ同一の場合、パラメータ評価部１３２ｂはステップＳ６２ｈの処理を実行し、ほぼ同一とは言えない場合、パラメータ評価部１３２ｂはステップＳ６２ｉの処理を実行する。
【０１３６】
［ステップＳ６２ｈ］ページ使用数ｃがキャッシュページの最大数Ｎとほぼ同一の場合とは、キャッシュ１１０がほぼ満杯の場合である。この場合、キャッシュ１１０に格納されたデータがデステージされるまでの時間が、ホスト装置４００への書き込み応答時間に影響してしまう。このため、デステージまでの時間が長くなるハッシュ未計算ブロックを発生させるポストプロセスモードを選択することは望ましくない。したがって、パラメータ評価部１３２ｂは、選択すべき書き込み制御モードをインラインモードに決定する。
【０１３７】
［ステップＳ６２ｉ］パラメータ評価部１３２ｂは、目標比率Ｆtgtと、現在の比率Ｆdetとの比較結果に基づいて、選択すべき書き込み制御モードを決定する。この処理では、比率Ｆdetが目標比率Ｆtgtに近づくように書き込み制御モードが決定される。
【０１３８】
例えば、パラメータ評価部１３２ｂは、比率Ｆdetが目標比率Ｆtgtより大きい場合、書き込み制御モードをインラインモードに決定する。これにより、ハッシュ未計算ブロック数を低減できる。その結果、ポストプロセスモードでのバックグラウンド処理におけるサーバ１００間の通信回数が低減される可能性が高まり、ＩＯＰＳの低下を防止できる可能性が高まる。一方、パラメータ評価部１３２ｂは、比率Ｆdetが目標比率Ｆtgt以下である場合、書き込み制御モードをポストプロセスモードに決定する。これにより、書き込み要求元のホスト装置４００に対して短時間で応答できる。
【０１３９】
また、他の方法として、パラメータ評価部１３２ｂは、ポストプロセスモードが選択される確率が目標比率Ｆtgtに近づくように、ステップＳ６２ｉで決定される書き込み制御モードの選択確率を制御してもよい。例えば、ポストプロセスモードの選択確率をＦselとすると、パラメータ評価部１３２ｂは、下記の式（３）を満たすような選択確率Ｆselを計算する。ただし、選択確率Ｆselの値は０以上１以下の範囲に制限される。
Ｆsel：１−Ｆsel＝Ｆtgt＋（Ｆtgt−Ｆdet）：１−Ｆtgt＋｛１−Ｆtgt−（１−Ｆdet）｝      ・・・（３）
パラメータ評価部１３２ｂは、ポストプロセスモードが選択される確率が上記の選択比率Ｆselとなるように、ステップＳ６２ｉで決定される書き込み制御モードの選択確率を制御する。例えば、パラメータ評価部１３２ｂは、現在からその後の所定回数、ホスト装置４００から書き込みが要求されたデータブロックについて、ポストプロセスモードを割合Ｆselで選択し、インラインモードを割合（１−Ｆsel）で選択する。
【０１４０】
以上の図１４、図１５の処理によれば、ホスト装置４００から書き込み要求を受信した時点で、キャッシュ１１０に十分余裕がある場合には、検出された比率Ｆdetに関係なく、ポストプロセスモードの書き込み制御が実行される。これにより、ホスト装置４００に対する応答時間を短縮できる。一方、キャッシュ１１０に余裕がない場合には、検出された比率Ｆdetに関係なく、インラインモードの書き込み制御が実行される。これにより、ＩＯＰＳの低下を抑制できる。
【０１４１】
また、キャッシュ１１０にある程度余裕がある場合には、インラインモードの書き込み制御に対するポストプロセスモードの書き込み制御の実行比率が目標比率Ｆtgtに近づくように制御される。これにより、ＩＯＰＳが目標値を下回らない範囲で、ポストプロセスモードの書き込み制御が優先的に実行されるようになる。その結果、ＩＯＰＳを目標値以上に維持しながら、ホスト装置４００への応答速度を可能な限り短縮できる。
【０１４２】
なお、図１５の処理は、ホスト装置４００から書き込み要求を受信するたびに実行されるのではなく、図１４の処理と並行して、例えば一定時間間隔でモード決定部１３２により実行されてもよい。この場合、例えば、決定された書き込み制御モードが記憶部１２０に登録され、図１４のステップＳ６２でＩＯ制御部１３１に参照される。
【０１４３】
図１６は、インラインモードでのＩＯ制御処理手順の例を示すフローチャートである。この図１６の処理は、図１４のステップＳ６４の処理に対応する。
［ステップＳ６４ａ］ＩＯ制御部１３１は、書き込みデータのハッシュ値を計算する。ハッシュ値は、例えば、ＳＨＡ−１（Secure Hash Algorithm 1）のハッシュ関数を用いて計算される。
【０１４４】
［ステップＳ６４ｂ］ＩＯ制御部１３１は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、算出されたハッシュ値の担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ６４ｃの処理を実行し、担当サーバでない場合、ステップＳ６４ｄの処理を実行する。
【０１４５】
［ステップＳ６４ｃ］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００の重複除去制御部１３３に対して書き込みデータとハッシュ値とを通知し、書き込みデータの書き込みを指示する。
【０１４６】
［ステップＳ６４ｄ］ＩＯ制御部１３１は、算出されたハッシュ値の担当サーバである他のサーバ１００の重複除去制御部１３３に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
【０１４７】
［ステップＳ６４ｅ］ＩＯ制御部１３１は、ステップＳ６４ｃでの通知先またはステップＳ６４ｄでの転送先から、ハッシュ管理テーブル１２１のエントリのアドレスを取得する。
【０１４８】
［ステップＳ６４ｆ］ＩＯ制御部１３１は、書き込みデータの書き込み先として指定されたＬＢＡに基づいて、このＬＢＡの担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、指定されたＬＢＡの担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ６４ｇの処理を実行し、担当サーバでない場合、ステップＳ６４ｈの処理を実行する。
【０１４９】
［ステップＳ６４ｇ］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３４に、ステップＳ６４ｅで取得されたエントリのアドレスと、書き込み先として指定されたＬＢＡとを通知して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１５０】
［ステップＳ６４ｈ］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３４に、ステップＳ６４ｅで取得されたエントリのアドレスと、書き込み先として指定されたＬＢＡとを転送して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１５１】
図１７は、ポストプロセスモードでのＩＯ制御処理手順の例を示すフローチャートである。この図１７の処理は、図１４のステップＳ６５の処理に対応する。
［ステップＳ６５ａ］ＩＯ制御部１３１は、書き込みデータの書き込み先として指定されたＬＢＡに基づいて、このＬＢＡの担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、指定されたＬＢＡの担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ６５ｂの処理を実行し、担当サーバでない場合、ステップＳ６５ｅの処理を実行する。
【０１５２】
［ステップＳ６５ｂ］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３４に、書き込みデータを通知して、キャッシュ１１０への格納を指示する。
【０１５３】
［ステップＳ６５ｃ］ＩＯ制御部１３１は、ステップＳ６５ｂでの通知先のＬＢＡ管理部１３４から、書き込みデータが格納されたキャッシュページのページ番号を取得する。
［ステップＳ６５ｄ］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３４に、取得されたページ番号と、書き込み先として指定されたＬＢＡとを通知して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１５４】
［ステップＳ６５ｅ］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３４に、書き込みデータを転送して、キャッシュ１１０への格納を指示する。
【０１５５】
［ステップＳ６５ｆ］ＩＯ制御部１３１は、ステップＳ６５ｅでの転送先のＬＢＡ管理部１３４から、書き込みデータが格納されたキャッシュページのページ番号を受信する。
［ステップＳ６５ｇ］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３４に、取得されたページ番号と、書き込み先として指定されたＬＢＡとを転送して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１５６】
図１８は、重複除去処理手順の例を示すフローチャートである。
［ステップＳ８１］重複除去制御部１３３は、書き込みデータとハッシュ値とを、書き込み指示とともに受け付ける。例えば、重複除去制御部１３３は、図１６のステップＳ６４ｃまたはステップＳ６４ｄの処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から書き込み指示を受け付ける。あるいは、重複除去制御部１３３は、後述する図２１のステップＳ１３４またはステップＳ１３５の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から書き込み指示を受け付ける。
【０１５７】
［ステップＳ８２］重複除去制御部１３３は、受け付けたハッシュ値を含むエントリがハッシュ管理テーブル１２１に登録されているかを判定する。重複除去制御部１３３は、該当エントリが登録されている場合、ステップＳ８６の処理を実行し、登録されていない場合、ステップＳ８３の処理を実行する。
【０１５８】
［ステップＳ８３］ステップＳ８２でエントリが登録されていないと判定された場合、受け付けた書き込みデータと同じ内容のデータは、キャッシュ１１０またはストレージ２００にまだ格納されていない。この場合、重複除去制御部１３３は、キャッシュ１１０に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ計算済みブロックのデータとしてキャッシュ１１０に格納される。
【０１５９】
［ステップＳ８４］重複除去制御部１３３は、記憶部１２０のハッシュ計算済みブロック数１２４をカウントアップする。
［ステップＳ８５］重複除去制御部１３３は、ハッシュ管理テーブル１２１に新たにエントリを作成する。重複除去制御部１３３は、作成されたエントリにおいて、ハッシュ値の項目に受け付けたハッシュ値を登録し、ポインタの項目にステップＳ８３で書き込みデータを格納したキャッシュページのページ番号を登録し、カウント値の項目に「１」を登録する。
【０１６０】
［ステップＳ８６］ステップＳ８２でエントリが登録されていると判定された場合、受け付けた書き込みデータと同じ内容のデータが、キャッシュ１１０またはストレージ２００にすでに格納されている。この場合、重複除去制御部１３３は、ハッシュ管理テーブル１２１のエントリのうち、ステップＳ８１で受け付けたハッシュ値が登録されたエントリを特定する。重複除去制御部１３３は、特定されたエントリにおけるカウント値の項目の値をカウントアップする。また、重複除去制御部１３３は、ステップＳ８１で受け付けた書き込みデータおよびハッシュ値を破棄する。このようなステップＳ８６の処理により、書き込みデータは重複を除去してストレージノードに格納される。
【０１６１】
［ステップＳ８７］重複除去制御部１３３は、ステップＳ８５で作成されたエントリ、またはステップＳ８６で特定されたエントリのアドレスを通知する。ステップＳ８１で重複除去制御部１３３と同じサーバ１００に含まれるＩＯ制御部１３１またはＬＢＡ管理部１３４から書き込み指示を受けた場合、エントリのアドレスは同じサーバ１００のＩＯ制御部１３１またはＬＢＡ管理部１３４に通知される。また、ステップＳ８１で重複除去制御部１３３とは異なる他のサーバ１００に含まれるＩＯ制御部１３１またはＬＢＡ管理部１３４から書き込み指示を受けた場合、エントリのアドレスは他のサーバ１００のＩＯ制御部１３１またはＬＢＡ管理部１３４に転送される。
【０１６２】
図１９は、インラインモードでのＬＢＡ管理処理手順の例を示す図である。
［ステップＳ１０１］ＬＢＡ管理部１３４は、ハッシュ管理テーブル１２１のエントリのアドレスと、書き込みデータの書き込み先として指定されたＬＢＡとを、テーブル更新指示とともに受け付ける。例えば、ＬＢＡ管理部１３４は、図１６のステップＳ６４ｇまたはステップＳ６４ｈの処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１からテーブル更新指示を受け付ける。
【０１６３】
［ステップＳ１０２］ＬＢＡ管理部１３４は、ＬＢＡ管理テーブル１２２から、ステップＳ１０１で受け付けたＬＢＡを含むエントリを特定する。ＬＢＡ管理部１３４は、特定されたエントリにおけるポインタの項目に、ステップＳ１０１で受け付けたエントリのアドレスを登録する。
【０１６４】
［ステップＳ１０３］ＬＢＡ管理部１３４は、テーブル更新指示の通知元のＩＯ制御部１３１に対して、テーブル更新の完了通知メッセージを送信する。
以上の図１９の処理により、ハッシュ計算済みブロックのデータについて、ＬＢＡとハッシュ管理テーブル１２１のエントリとがマッピングされる。
【０１６５】
図２０は、ポストプロセスモードでのＬＢＡ管理処理手順の例を示す図である。
［ステップＳ１１１］ＬＢＡ管理部１３４は、書き込みデータをキャッシュ１１０への格納指示とともに受け付ける。例えば、ＬＢＡ管理部１３４は、図１７のステップＳ６５ｂまたはＳ６５ｅの処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から格納指示を受け付ける。
【０１６６】
［ステップＳ１１２］ＬＢＡ管理部１３４は、キャッシュ１１０に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ未計算ブロックのデータとしてキャッシュ１１０に格納される。
【０１６７】
［ステップＳ１１３］ＬＢＡ管理部１３４は、記憶部１２０のハッシュ未計算ブロック数１２３をカウントアップする。
［ステップＳ１１４］ＬＢＡ管理部１３４は、ステップＳ１１２で作成されたキャッシュページのページ番号を、格納指示の通知元のＩＯ制御部１３１に通知する。
【０１６８】
［ステップＳ１１５］ＬＢＡ管理部１３４は、キャッシュページのページ番号と、書き込みデータの書き込み先として指定されたＬＢＡとを、テーブル更新指示とともに受け付ける。例えば、ＬＢＡ管理部１３４は、図１７のステップＳ６５ｄまたはステップＳ６５ｇの処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１からテーブル更新指示を受け付ける。
【０１６９】
［ステップＳ１１６］ＬＢＡ管理部１３４は、ＬＢＡ管理テーブル１２２から、ステップＳ１１５で受け付けたＬＢＡを含むエントリを特定する。ＬＢＡ管理部１３４は、特定されたエントリにおけるポインタの項目に、ステップＳ１１５で受け付けたページ番号を登録する。
【０１７０】
なお、ステップＳ１１６で登録されるページ番号は、ステップＳ１１４で通知されたページ番号と同じである。このため、ＬＢＡ管理部１３４は、ステップＳ１１４，Ｓ１１５の処理をスキップし、ステップＳ１１６ではＬＢＡとテーブル更新指示とを受け付けて、テーブル更新を行ってもよい。また、ＬＢＡ管理部１３４は、ステップＳ１１１の段階でＬＢＡを受け付けてもよい。
【０１７１】
以上の図２０の処理により、ハッシュ未計算ブロックのデータについて、ＬＢＡとキャッシュページとがマッピングされる。
図２１は、バックグラウンドでのブロック再配置処理手順の例を示すフローチャートである。図２１の処理は、図１４〜図２０に示した、書き込み要求の受信からその応答までの書き込み制御処理とは非同期に、その書き込み制御処理と並行して実行される。
【０１７２】
［ステップＳ１３１］ＬＢＡ管理部１３４は、キャッシュ１１０に格納されたハッシュ未計算ブロックのデータを１つ選択する。例えば、ＬＢＡ管理部１３４は、ＬＢＡ管理テーブル１２２のエントリのうち、ポインタの項目にキャッシュページのページ番号が登録されたエントリを特定する。ＬＢＡ管理部１３４は、特定されたエントリの中から、ページ番号の登録時刻が最も早いエントリ、あるいは、ホスト装置４００からのアクセス頻度が最も低いエントリを選択する。選択されたエントリに登録されたページ番号が示すキャッシュページに格納されたデータが、選択されるハッシュ未計算ブロックのデータとなる。
【０１７３】
［ステップＳ１３２］ＬＢＡ管理部１３４は、選択されたハッシュ未計算ブロックのデータを基にハッシュ値を計算する。
［ステップＳ１３３］ＬＢＡ管理部１３４は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、ＬＢＡ管理部１３４自身を含むサーバ１００が、算出されたハッシュ値の担当サーバであるかを判定する。ＬＢＡ管理部１３４は、担当サーバである場合、ステップＳ１３４の処理を実行し、担当サーバでない場合、ステップＳ１３５の処理を実行する。
【０１７４】
［ステップＳ１３４］ＬＢＡ管理部１３４は、ＬＢＡ管理部１３４自身を含むサーバ１００の重複除去制御部１３３に対して、ハッシュ未計算ブロックのデータとハッシュ値とを通知し、データの書き込みを指示する。
【０１７５】
［ステップＳ１３５］ＬＢＡ管理部１３４は、算出されたハッシュ値の担当サーバである他のサーバ１００の重複除去制御部１３３に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
【０１７６】
［ステップＳ１３６］ＬＢＡ管理部１３４は、ステップＳ１３４でのデータおよびハッシュ値の通知先のＬＢＡ管理部１３４、または、ステップＳ１３５でのデータおよびハッシュ値の転送先のＬＢＡ管理部１３４から、ハッシュ管理テーブル１２１のエントリのアドレスをテーブル更新とともに受け付ける。このエントリは、ステップＳ１３２で算出されたハッシュ値に対応するエントリであり、ステップＳ１３１で選択されたハッシュ未計算ブロックがハッシュ計算済みブロックとして登録された物理記憶領域の位置情報を保持する。
【０１７７】
［ステップＳ１３７］ＬＢＡ管理部１３４は、ＬＢＡ管理テーブル１２２のエントリのうち、ステップＳ１３１で選択されたハッシュ未計算ブロックのデータに対応するエントリを特定する。ＬＢＡ管理部１３４は、特定されたエントリにおけるポインタの項目に、ステップＳ１３６で受け付けられたエントリのアドレスを上書きして登録する。
【０１７８】
［ステップＳ１３８］ＬＢＡ管理部１３４は、記憶部１２０のハッシュ未計算ブロック数１２３をカウントダウンする。
以上の図２１の処理により、バックグラウンドにおいて、ハッシュ未計算ブロックのデータが、重複が除去された状態でいずれかのサーバ１００のキャッシュ１１０に再配置される。
【０１７９】
図２２は、デステージ処理手順の例を示すフローチャートである。図２２の処理は、図１４〜図２０の書き込み制御処理や、図２１のブロック再配置処理と並行して実行される。
【０１８０】
［ステップＳ１５１］ＩＯ制御部１３１は、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータの中から、デステージ対象のデータを選択する。例えば、ＩＯ制御部１３１は、キャッシュ１１０の容量が残り少なくなった場合に、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータのうち最終アクセス日時が最も早いデータを、デステージ対象として選択する。この場合、デステージ対象のデータは、キャッシュ１１０から追い出されるデータとなる。また、例えば、ＩＯ制御部１３１は、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータの中から、ストレージ２００内のデータと同期されていないダーティデータを特定してもよい。この場合、例えば、ＩＯ制御部１３１は、特定されたダーティデータのうち更新日時が最も早いデータを、デステージ対象として選択する。
【０１８１】
［ステップＳ１５２］ＩＯ制御部１３１は、選択されたデータをストレージ２００に格納する。選択されたデータが追い出しの対象の場合、ＩＯ制御部１３１は、データをキャッシュ１１０からストレージ２００に移動させる。選択されたデータが追い出しの対象でない場合、ＩＯ制御部１３１は、データをキャッシュ１１０からストレージ２００にコピーする。
【０１８２】
［ステップＳ１５３］ＩＯ制御部１３１は、ハッシュ管理テーブル１２１から、デステージ対象のデータに対応するエントリを特定する。例えば、ＩＯ制御部１３１は、選択されたデータのハッシュ値を計算し、ハッシュ管理テーブル１２１から、算出されたハッシュ値が登録されたエントリを特定する。ＩＯ制御部１３１は、特定されたエントリにおけるポインタの項目に、ステップＳ１５２でのデータの格納先を示す物理アドレス（ＰＢＡ：Physical Block Address）を登録する。
【０１８３】
［ステップＳ１５４］この処理は、選択されたデータが追い出しの対象であり、ステップＳ１５２でキャッシュ１１０から移動された場合のみ実行される。ＩＯ制御部１３１は、記憶部１２０のハッシュ計算済みブロック数１２４をカウントダウンする。
【０１８４】
なお、上記の各実施の形態に示した装置（例えば、ストレージ制御装置１、サーバ１００ａ〜１００ｃ、ホスト装置４００ａ，４００ｂ）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１８５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１８６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【０１８７】
１  ストレージ制御装置
１ａ  検出部
１ｂ  決定部
１ｃ  目標比率
１１，１２  ストレージノード
１１ａ，１２ａ  記憶装置
２１  第１の処理
２２  第２の処理
２３  第３の処理
Ｓ１ａ，Ｓ１ｂ，Ｓ２ａ，Ｓ２ｂ，Ｓ３  ステップ
【図１】
2018041248.tif 000003
【図２】
2018041248.tif 000004
【図３】
2018041248.tif 000005
【図４】
2018041248.tif 000006
【図５】
2018041248.tif 000007
【図６】
2018041248.tif 000008
【図７】
2018041248.tif 000009
【図８】
2018041248.tif 000010
【図９】
2018041248.tif 000011
【図１０】
2018041248.tif 000012
【図１１】
2018041248.tif 000013
【図１２】
2018041248.tif 000014
【図１３】
2018041248.tif 000015
【図１４】
2018041248.tif 000016
【図１５】
2018041248.tif 000017
【図１６】
2018041248.tif 000018
【図１７】
2018041248.tif 000019
【図１８】
2018041248.tif 000020
【図１９】
2018041248.tif 000021
【図２０】
2018041248.tif 000022
【図２１】
2018041248.tif 000023
【図２２】
2018041248.tif 000024