(57)【要約】【課題】同一送信元から連続して送信された複数の書き込み要求に対する全体の応答時間を低処理負荷で短縮すること。【解決手段】情報処理装置１は特定部１ｂと決定部１ｃとを有する。特定部１ｂは、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定する。決定部１ｃは、複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定する。第１方式の重複除去処理はポストプロセス方式を含み、第２方式の重複除去処理はインライン方式を含み、設定数は、送信元から連続して発行される書き込み要求の最小間隔と、第１方式の重複除去処理および第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される。【選択図】図１
2018084864.tif 000002
【特許請求の範囲】
【請求項１】
同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定する特定部と、
前記複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定する決定部であって、前記第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に前記記憶領域における前記第１の書き込みデータの重複を除去する処理を含み、前記第２方式の重複除去処理は、第２の書き込みデータを重複を除去して前記記憶領域に書き込み、応答を送信する処理を含み、前記設定数は、前記送信元から連続して発行される書き込み要求の最小間隔と、前記第１方式の重複除去処理および前記第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される、前記決定部と、
を有する情報処理装置。
【請求項２】
前記設定数は、前記第２の書き込み要求のうち最後尾の書き込み要求に対する応答を送信する第１の時刻が、前記第１の書き込み要求のうち最後尾の書き込み要求に対する応答を送信する第２の時刻までの範囲で、前記第２の時刻に最も近づくように設定される、
請求項１記載の情報処理装置。
【請求項３】
前記特定部は、前記複数の書き込み要求が前記所定時間より長い一定の間隔で複数回現れる書き込みパターンを検出し、
前記決定部は、
前記書き込みパターンが検出されるまでの間、前記複数の書き込み要求のすべてについて、前記第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、
前記書き込みパターンが検出された後に受信した前記複数の書き込み要求を第１の書き込み要求群として特定して、前記第１の書き込み要求群に含まれる前記第１の書き込み要求について、前記第１方式の重複除去処理を用いて書き込み処理を行い、前記第１の書き込み要求群に含まれる前記第２の書き込み要求について、前記第２方式の重複除去処理を用いて書き込み処理を行うことを決定する、
請求項１または２記載の情報処理装置。
【請求項４】
前記決定部は、
前記第１の書き込み要求群の後に受信した前記複数の書き込み要求を第２の書き込み要求群として特定したとき、
前記第１の書き込み要求群と前記第２の書き込み要求群の受信間隔が前記一定の間隔より短くなった場合には、前記第２の書き込み要求群に含まれる前記第１の書き込み要求について、前記第１方式の重複除去処理を用いて書き込み処理を行い、前記第２の書き込み要求群に含まれる前記第２の書き込み要求について、前記第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、
前記受信間隔が前記一定の間隔より短くなっていない場合には、前記第２の書き込み要求群に含まれるすべての書き込み要求について、前記第２方式の重複除去処理を用いて書き込み処理を行うことを決定する、
請求項３記載の情報処理装置。
【請求項５】
前記記憶領域は、複数のストレージノードにそれぞれ分散して配置された記憶装置の集合として実現され、
前記第１方式の重複除去処理は、前記第１の書き込みデータを前記複数のストレージノードのいずれかの前記記憶装置に書き込んで応答を送信し、事後的に前記第１の書き込みデータを読み出して前記複数のストレージノードのいずれかの前記記憶装置に重複を除去して書き込む処理を含み、
前記第２方式の重複除去処理は、前記第２の書き込みデータを前記複数のストレージノードのいずれかの前記記憶装置に重複を除去して書き込み、応答を送信する処理を含む、
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
コンピュータが、
同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定し、
前記複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、前記第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に前記記憶領域における前記第１の書き込みデータの重複を除去する処理を含み、前記第２方式の重複除去処理は、第２の書き込みデータを重複を除去して前記記憶領域に書き込み、応答を送信する処理を含み、前記設定数は、前記送信元から連続して発行される書き込み要求の最小間隔と、前記第１方式の重複除去処理および前記第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される、
情報処理方法。
【請求項７】
コンピュータに、
同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定し、
前記複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、前記第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に前記記憶領域における前記第１の書き込みデータの重複を除去する処理を含み、前記第２方式の重複除去処理は、第２の書き込みデータを重複を除去して前記記憶領域に書き込み、応答を送信する処理を含み、前記設定数は、前記送信元から連続して発行される書き込み要求の最小間隔と、前記第１方式の重複除去処理および前記第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法およびプログラムに関する。
【背景技術】
【０００２】
ストレージシステムの技術の１つとして、重複するデータを記憶装置に格納しないようにして、記憶装置の記憶領域を効率的に使用する「重複除去」と呼ばれる技術が知られている。この重複除去技術として、インライン方式とポストプロセス方式が知られている。インライン方式は、書き込みが要求されたデータの重複を除去して記憶装置に格納した後、書き込み要求に対する応答を返す方式である。ポストプロセス方式は、書き込みが要求されたデータを記憶装置に一時的に格納して応答を返し、格納されたデータの重複除去を事後的に行う方式である。
【０００３】
また、インライン方式の重複除去とポストプロセス方式の重複除去の両方を用いることも考えられている。例えば、所定条件下でファイル単位のインライン型重複除去を実行し、重複を除去できなかったファイルについて、チャンク単位でポストプロセス型重複除去を実行するストレージシステムが提案されている。
【０００４】
また、ホストコンピュータがディスク記憶装置に対してシーケンシャルアクセス指示コマンドを発行する技術が提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／１５７１０３号
【特許文献２】特開２０００−１９５１４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ポストプロセス方式は、重複除去処理を事後的に実行するため、インライン方式よりも書き込み要求に対する応答時間を短縮できる。その一方、ポストプロセス方式は、事後的な重複除去処理の負荷によって、書き込み要求に対する応答処理の性能を低下させる可能性がある。このため、処理負荷の増大を抑制しつつ応答時間を短縮するために、インライン方式とポストプロセス方式とをどのように使い分けるかという点に課題がある。
【０００７】
例えば、同一の送信元から複数の書き込み要求が連続して送信されるケースがある。このようなケースでは、一連の書き込み要求に対する応答時間全体が短縮されることで、送信元側の処理効率を改善できる。しかし、全体の応答時間を短縮しつつ、書き込み要求の受信側装置の処理負荷をできるだけ軽減するためには、どの書き込み要求をインライン方式で処理し、どの書き込み要求をポストプロセス方式で処理すればよいかという点が課題となる。
【０００８】
１つの側面では、本発明は、同一送信元から連続して送信された複数の書き込み要求に対する全体の応答時間を低処理負荷で短縮できる情報処理装置、情報処理方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
また、１つの態様では、情報処理装置が提供される。この情報処理装置は、特定部と決定部とを有する。特定部は、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定する。決定部は、複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定する。第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に記憶領域における第１の書き込みデータの重複を除去する処理を含み、第２方式の重複除去処理は、第２の書き込みデータを重複を除去して記憶領域に書き込み、応答を送信する処理を含み、設定数は、送信元から連続して発行される書き込み要求の最小間隔と、第１方式の重複除去処理および第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される。
【００１０】
また、１つの態様では、情報処理方法が提供される。この情報処理方法は、コンピュータが、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定し、複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に記憶領域における第１の書き込みデータの重複を除去する処理を含み、第２方式の重複除去処理は、第２の書き込みデータを重複を除去して記憶領域に書き込み、応答を送信する処理を含み、設定数は、送信元から連続して発行される書き込み要求の最小間隔と、第１方式の重複除去処理および第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される。
【００１１】
また、１つの態様では、プログラムが提供される。このプログラムは、コンピュータに、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定し、複数の書き込み要求のうち、受信時刻の遅い方から設定数分の第１の書き込み要求について、第１方式の重複除去処理を用いて書き込み処理を行い、残りの第２の書き込み要求について、第２方式の重複除去処理を用いて書き込み処理を行うことを決定し、第１方式の重複除去処理は、第１の書き込みデータを記憶領域に書き込んで応答を送信し、事後的に記憶領域における第１の書き込みデータの重複を除去する処理を含み、第２方式の重複除去処理は、第２の書き込みデータを重複を除去して記憶領域に書き込み、応答を送信する処理を含み、設定数は、送信元から連続して発行される書き込み要求の最小間隔と、第１方式の重複除去処理および第２方式の重複除去処理のそれぞれにおける書き込み要求の受信から応答の送信までの時間とに基づいて設定される、処理を実行させる。
【発明の効果】
【００１２】
１つの側面では、同一送信元から連続して送信された複数の書き込み要求に対する全体の応答時間を低処理負荷で短縮できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】サーバのハードウェア構成例を示す図である。
【図４】各サーバが備えるキャッシュおよび主なテーブル情報について示す図である。
【図５】ハッシュ管理テーブルのデータ構成例を示す図である。
【図６】ＬＢＡ管理テーブルのデータ構成例を示す図である。
【図７】インラインモードの書き込み制御処理の基本的な手順を示すシーケンス図である。
【図８】インラインモードでのテーブル更新処理例を示す図である。
【図９】ポストプロセスモードの書き込み制御処理の基本的な手順を示すシーケンス図である。
【図１０】ポストプロセスモードでのテーブル更新処理例を示す図である。
【図１１】ストレージシステムにおける読み出し制御処理の手順を示すシーケンス図である。
【図１２】連続コマンド群に対する応答について示す図である。
【図１３】サーバが備える処理機能の構成例を示すブロック図である。
【図１４】履歴テーブルのデータ構成例を示す図である。
【図１５】適用モードの決定処理について示す図である。
【図１６】フェーズ１の処理例を示すフローチャートである。
【図１７】パターン監視プロセスの処理例を示すフローチャートである。
【図１８】フェーズ２の処理例を示すフローチャートである。
【図１９】フェーズ３の処理例を示すフローチャートである。
【図２０】インラインモードでのＩＯ制御処理手順の例を示すフローチャートである。
【図２１】ポストプロセスモードでのＩＯ制御処理手順の例を示すフローチャートである。
【図２２】重複除去処理手順の例を示すフローチャートである。
【図２３】インラインモードでのＬＢＡ管理処理手順の例を示す図である。
【図２４】ポストプロセスモードでのＬＢＡ管理処理手順の例を示す図である。
【図２５】バックグラウンドでのブロック再配置処理手順の例を示すフローチャートである。
【図２６】デステージ処理手順の例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。図１に示す情報処理装置１は、ホスト装置２ａ，２ｂに接続され、ホスト装置２ａ，２ｂからの書き込み要求に応じて記憶領域にデータを書き込む書き込み制御機能を有する。図１では例として、情報処理装置１は、記憶装置１ａに対する書き込み制御機能を有するものとする。記憶装置１ａは、図１の例のように情報処理装置１の内部に搭載されてもよいし、情報処理装置１の外部に接続されていてもよい。
【００１５】
また、情報処理装置１は、ポストプロセス方式（第１方式）とインライン方式（第２方式）のいずれかの重複除去処理を選択的に実行可能である。ポストプロセス方式の重複除去処理は、書き込みデータを記憶装置１ａに書き込んで書き込み要求元に応答を送信し、事後的に記憶装置１ａにおける書き込みデータの重複を除去する処理を含む。インライン方式の重複除去処理は、書き込みが要求された書き込みデータを重複を除去して記憶装置１ａに書き込み、書き込み要求元に応答を送信する処理を含む。
【００１６】
上記２つの方式のうち、ポストプロセス方式は、重複除去処理を事後的に実行するため、インライン方式よりも書き込み要求に対する応答時間を短縮できる。一方、ポストプロセス方式は、事後的な重複除去処理の負荷によって、書き込み要求に対する応答処理の性能を低下させる可能性があるという特徴がある。
【００１７】
情報処理装置１は、特定部１ｂと決定部１ｃとを有する。特定部１ｂと決定部１ｃの処理は、例えば、プロセッサが所定のプログラムを実行することで実現される。なお、プロセッサには、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。
【００１８】
特定部１ｂは、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定する。図１では例として、情報処理装置１が書き込み要求Ｗ１〜Ｗ７を順に受信した場合を示している。そして、特定部１ｂは、例えばホスト装置２ａを送信元とする書き込み要求Ｗ３〜Ｗ５を、上記条件に合致する複数の書き込み要求として特定したとする。
【００１９】
なお、特定部１ｂによる複数の書き込み要求の特定条件には、例えば、書き込み先の論理記憶領域やアドレス範囲が同一といった他の条件が含まれていてもよい。
決定部１ｃは、特定された書き込み要求Ｗ３〜Ｗ５のうち、受信時刻の遅い方から設定数Ｓ分の第１の書き込み要求について、ポストプロセス方式の重複除去処理を用いて書き込み処理を行うことを決定する。また、決定部１ｃは、書き込み要求Ｗ３〜Ｗ５のうちの残りの第２の書き込み要求について、インライン方式の重複除去処理を用いて書き込み処理を行うことを決定する。
【００２０】
設定数Ｓは、間隔Ｘ１と、応答時間Ｘ２，Ｘ３とに基づいて設定される。間隔Ｘ１は、送信元から連続して発行される書き込み要求の最小間隔を示す。応答時間Ｘ２は、ポストプロセス方式の重複除去処理における書き込み要求の受信から応答の送信までの時間を示す。応答時間Ｘ３は、インライン方式の重複除去処理における書き込み要求の受信から応答の送信までの時間を示す。
【００２１】
これらのパラメータを用いることで、設定数Ｓは、処理負荷を高める原因となるポストプロセス方式の使用数を最小限にしながら、特定された書き込み要求Ｗ３〜Ｗ５に対する応答時間全体が短縮されるように設定される。その結果、決定部１ｃは、特定された書き込み要求Ｗ３〜Ｗ５に対する応答時間全体を、低い処理負荷によって短縮できる。
【００２２】
また、書き込み要求Ｗ３〜Ｗ５に対する応答時間全体が短縮されることで、送信元のホスト装置２ａは、これらの応答を受信した後に実行すべき処理を、早い時間に開始できる。したがって、ホスト装置２ａにおける処理効率を向上させることができる。
【００２３】
図１の例では、設定数Ｓは「２」となっている。この場合、決定部１ｃは、書き込み要求Ｗ４，Ｗ５について、ポストプロセス方式の重複除去処理を用いて書き込み処理を行い、書き込み要求Ｗ３について、インライン方式の重複除去処理を用いて書き込み処理を行うことを決定する。
【００２４】
書き込み要求Ｗ３〜Ｗ５のうち、最後尾の書き込み要求Ｗ５に対する応答３ｃの送信時刻は、書き込み要求Ｗ５にポストプロセス方式が適用されることによって、インライン方式が適用された場合より早くなる。また、隣接する書き込み要求Ｗ４に対する応答３ｂの送信時刻についても同様に、書き込み要求Ｗ４にポストプロセス方式が適用されることによって、インライン方式が適用された場合より早くなる。
【００２５】
一方、書き込み要求Ｗ３に対する応答３ａの送信時刻は、書き込み要求Ｗ３にインライン方式が適用されても、最後尾の書き込み要求Ｗ５に対する応答３ｃの送信時刻より遅くはならない。このことは、仮に書き込み要求Ｗ３にポストプロセス方式を適用したとしても、書き込み要求Ｗ３〜Ｗ５に対する応答時間全体を短縮する効果が生じないことを示す。したがって、書き込み要求Ｗ３にインライン方式を適用することで、書き込み要求Ｗ３〜Ｗ５に対する応答時間全体の短縮効果を損ねずに、情報処理装置１の処理負荷を抑制できる。
【００２６】
すなわち、設定数Ｓは、書き込み要求Ｗ３〜Ｗ５のうち、インライン方式が適用される最後尾の書き込み要求Ｗ３に対する応答３ａの送信時刻が、ポストプロセス方式が適用される最後尾の書き込み要求Ｗ５に対する応答３ｃの送信時刻（ＴＭとする）までの範囲内で、送信時刻ＴＭに最も近づくように設定される。このような設定数Ｓは、上記の間隔Ｘ１および応答時間Ｘ２，Ｘ３の関係から求められる。
【００２７】
なお、設定数Ｓは、間隔Ｘ１と、応答時間Ｘ２，Ｘ３とに基づいて、決定部１ｃによる決定のたびに計算によって求められてもよい。また、間隔Ｘ１および応答時間Ｘ２，Ｘ３は、対応する装置の性能としてあらかじめ知ることができる値であるので、設定数Ｓは、あらかじめ計算されて情報処理装置１に保持され、決定部１ｃによって参照されてもよい。
【００２８】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムを示す図である。図２に示すストレージシステムは、サーバ１００ａ〜１００ｃ、ストレージ２００ａ〜２００ｃ、スイッチ３００およびホスト装置４００ａ，４００ｂを含む。
【００２９】
サーバ１００ａ〜１００ｃは、スイッチ３００に接続され、スイッチ３００を介して互いに通信可能になっている。また、サーバ１００ａにはストレージ２００ａが接続され、サーバ１００ｂにはストレージ２００ｂが接続され、サーバ１００ｃにはストレージ２００ｃが接続されている。サーバ１００ａは、ストレージ２００ａに対するアクセスを制御するストレージ制御装置である。同様に、サーバ１００ｂは、ストレージ２００ｂに対するアクセスを制御するストレージ制御装置であり、サーバ１００ｃは、ストレージ２００ｃに対するアクセスを制御するストレージ制御装置である。
【００３０】
ストレージ２００ａ〜２００ｃのそれぞれには、１台または複数台の不揮発性記憶装置が搭載されている。本実施の形態では、ストレージ２００ａ〜２００ｃのそれぞれには、複数台のＳＳＤ（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）が登録される。なお、図５では、「ＣＰ：」はキャッシュページのページ番号が登録されていることを示し、「ＰＢＡ：」はＰＢＡが登録されていることを示す。カウント値の項目には、ポインタが示す記憶位置がいくつのＬＢＡに対応付けられているか、換言すると、ハッシュ値に対応するデータがいくつ重複しているかを示す値が登録される。
【００５７】
図６は、ＬＢＡ管理テーブルのデータ構成例を示す図である。ＬＢＡ管理テーブル１２２は、ＬＢＡおよびポインタの各項目を有する。
ＬＢＡの項目には、論理ボリュームのブロックを示すＬＢＡが登録される。ポインタの項目には、対応するデータのハッシュ値が計算済みの場合、ハッシュ管理テーブル１２１のエントリを示すアドレスが登録され、未計算の場合、キャッシュページのページ番号が登録される。なお、図６では、「ＥＮ：」はエントリのアドレスが登録されていることを示し、「ＣＰ：」はキャッシュページのページ番号が登録されていることを示す。
【００５８】
次に、図７〜図１０を用いて、ストレージシステムにおける基本的な書き込み制御処理について説明する。前述のように、ストレージシステムでは、ストレージ２００ａ〜２００ｃへの格納段階でなく、キャッシュ１１０ａ〜１１０ｃへの格納段階で重複除去が行われる。また、重複除去の方法としては、「インライン方式」と「ポストプロセス方式」とが選択的に用いられる。インライン方式は、ホスト装置４００からの書き込み要求に対して応答する前に重複除去を完了させる方式である。一方、ポストプロセス方式は、ホスト装置４００からの書き込み要求に対して応答した後にバックグラウンドで重複除去が行われる方式である。以下、インライン方式の重複除去を用いた書き込み制御モードを「インラインモード」と記載し、ポストプロセス方式の重複除去を用いた書き込みモードを「ポストプロセスモード」と記載する。
【００５９】
図７は、インラインモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図７では例として、ホスト装置４００からのデータの書き込み要求をサーバ１００ａが受信したとする。
【００６０】
［ステップＳ１１］サーバ１００ａは、論理ボリュームのＬＢＡを書き込み先として指定した書き込み要求およびデータを受信する。
［ステップＳ１２］サーバ１００ａは、受信したデータのハッシュ値を計算する。
【００６１】
［ステップＳ１３］サーバ１００ａは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。なお、以下の説明では、あるハッシュ値に対応するデータの管理を担当するサーバを、「ハッシュ値の担当サーバ」と略称する場合がある。図７の例では、算出されたハッシュ値の担当サーバとしてサーバ１００ｂが特定されたとする。この場合、サーバ１００ａは、データとハッシュ値をサーバ１００ｂに転送し、データの書き込みを指示する。
【００６２】
［ステップＳ１４］サーバ１００ｂは、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されているかを判定する。
受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されていない場合、サーバ１００ｂは、キャッシュ１１０ｂに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。また、サーバ１００ｂは、ハッシュ管理テーブル１２１ｂに新たなエントリを作成し、そのエントリに、受信したハッシュ値と、作成したキャッシュページのページ番号と、カウント値「１」とを登録する。そして、サーバ１００ｂは、作成したエントリのアドレスをサーバ１００ａに送信する。
【００６３】
一方、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されている場合、書き込みが要求されたデータはキャッシュ１１０ｂまたはストレージ２００ｂにすでに格納されている。この場合、サーバ１００ｂは、そのハッシュ値が登録されていたエントリのカウント値を１だけカウントアップし、そのエントリのアドレスをサーバ１００ａに送信する。なお、受信したデータは破棄される。
【００６４】
［ステップＳ１５］サーバ１００ａは、書き込み先として指定されたＬＢＡに基づいて、このＬＢＡと物理記憶領域とのマッピングを担当するサーバを特定する。なお、以下の説明では、あるＬＢＡと物理記憶領域とのマッピングを担当するサーバを、「ＬＢＡの担当サーバ」と略称する場合がある。図７の例では、指定されたＬＢＡの担当サーバとしてサーバ１００ｃが特定されたとする。この場合、サーバ１００ａは、ステップＳ１４でサーバ１００ｂから送信されたエントリのアドレスと、書き込み先として指定されたＬＢＡとをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００６５】
［ステップＳ１６］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、受信したＬＢＡが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。これにより、ＬＢＡが示すブロックと物理記憶領域とが対応付けられる。
【００６６】
［ステップＳ１７］サーバ１００ａは、サーバ１００ｃからテーブルの更新完了通知を受信すると、ホスト装置４００に対して書き込み完了を示す応答メッセージを送信する。
以上のように、インラインモードでは、ホスト装置４００に対して応答する前に、書き込みが要求されたデータが重複除去された状態でサーバ１００ａ〜１００ｃのいずれかのキャッシュに格納される。
【００６７】
図８は、インラインモードでのテーブル更新処理例を示す図である。この図８では、図７の処理において、ＬＢＡ０００１に対するデータブロックＤＢ１の書き込みが要求されたものとする。また、データブロックＤＢ１に基づいてハッシュ値「０ｘ９２ＤＦ５９」が算出されたとする（なお、「０ｘ」は１６進数で表記したことを示す）。
【００６８】
この場合、ステップＳ１４の処理により、サーバ１００ｂのキャッシュ１１０ｂにデータブロックＤＢ１が格納される。また、サーバ１００ｂが保持するハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１には、ハッシュ値「０ｘ９２ＤＦ５９」に対応するポインタの項目に、データブロックＤＢ１が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックＤＢ１と同じ内容のデータブロックがすでにキャッシュ１１０ｂにすでに登録されていた場合、ハッシュ管理テーブル１２１ｂには上記情報を含むエントリ１２１ｂ１がすでに登録されている。
【００６９】
また、ステップＳ１６の処理により、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃにおいては、ＬＢＡ０００１に対応するポインタの項目に、ハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１を指し示す情報が登録される。
【００７０】
図９は、ポストプロセスモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図９では例として、図７と同様の初期状態から、図７と同様に、ホスト装置４００からのデータの書き込み要求をサーバ１００ａが受信したとする。
【００７１】
［ステップＳ２１］サーバ１００ａは、論理ボリュームのＬＢＡを書き込み先として指定した書き込み要求およびデータを受信する。
［ステップＳ２２］サーバ１００ａは、書き込み先として指定されたＬＢＡに基づいて、書き込み先ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図９の例では、サーバ１００ｃが担当サーバとして特定されたとする。この場合、サーバ１００ａは、書き込みが要求されたデータをサーバ１００ｃに送信して、キャッシュ１１０ｃへの格納を指示する。
【００７２】
［ステップＳ２３］サーバ１００ｃは、キャッシュ１１０ｃに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。このデータは、ハッシュ値の計算が行われていない「ハッシュ未計算ブロック」のデータとしてキャッシュ１１０ｃに格納される。また、サーバ１００ｃは、作成したキャッシュページのページ番号をサーバ１００ａに送信する。
【００７３】
［ステップＳ２４］サーバ１００ａは、受信したページ番号と、書き込み先として指定されたＬＢＡとをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００７４】
［ステップＳ２５］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、受信したＬＢＡが登録されたエントリにおいて、受信したページ番号をポインタの項目に登録する。
【００７５】
なお、書き込み先として指定されたＬＢＡは、ステップＳ２２でデータとともに転送されてもよい。この場合、ステップＳ２４でのサーバ１００ａとサーバ１００ｃとの通信は不要になる。
【００７６】
［ステップＳ２６］サーバ１００ａは、サーバ１００ｃからテーブルの更新完了通知を受信すると、ホスト装置４００に対して書き込み完了を示す応答メッセージを送信する。
［ステップＳ２７］サーバ１００ｃは、ステップＳ２６の処理後の非同期タイミングで、ステップＳ２３でキャッシュ１１０ｃに格納したデータのハッシュ値を計算する。
【００７７】
［ステップＳ２８］サーバ１００ｃは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。図９の例では、サーバ１００ｂが担当サーバとして特定されたとする。この場合、サーバ１００ｃは、データとハッシュ値をサーバ１００ｂに転送し、データの書き込みを指示する。このとき、データが格納されていたキャッシュページは解放される。
【００７８】
［ステップＳ２９］サーバ１００ｂは、受信したハッシュ値がハッシュ管理テーブル１２１ｂに登録されているかを判定し、その判定結果に応じたデータ格納およびテーブル更新処理を実行する。この処理は、図７のステップＳ１４と同様である。
【００７９】
［ステップＳ３０］サーバ１００ｂは、受信したハッシュ値が登録されている、ハッシュ管理テーブル１２１ｂのエントリのアドレスをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの更新を指示する。
【００８０】
［ステップＳ３１］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃのエントリのうち、ステップＳ２７でハッシュ値を計算したデータのＬＢＡが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。このポインタの項目では、登録されていたキャッシュページのページ番号が、受信したエントリのアドレスによって更新される。
【００８１】
以上のように、ポストプロセスモードでは、ホスト装置４００から書き込みが要求されたデータは、重複の有無を判定せずに、その書き込み先のＬＢＡの管理を担当するサーバ１００ｃのキャッシュ１１０ｃに一旦格納される。そして、格納が完了し、格納に伴うＬＢＡ管理テーブル１２２ｃの更新が完了した時点で、ホスト装置４００に応答メッセージが送信される。このように、応答までの間に重複除去処理が行われないことで、インラインモードと比較して、ホスト装置４００に対する応答時間（レイテンシ）を短縮できる。
【００８２】
図１０は、ポストプロセスモードでのテーブル更新処理例を示す図である。この図１０では、図９の処理において、ＬＢＡ０００１に対するデータブロックＤＢ１の書き込みが要求されたものとする。また、データブロックＤＢ１に基づいてハッシュ値「０ｘ９２ＤＦ５９」が算出されたとする。
【００８３】
この場合、ホスト装置４００への応答前の段階では、ステップＳ２３で、サーバ１００ｃのキャッシュ１１０ｃにデータブロックＤＢ１が格納される。また、ステップＳ２５で、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃに、ＬＢＡ０００１に対応付けてキャッシュ１１０ｃにおけるデータ格納位置を指し示す情報が登録される。
【００８４】
また、ホスト装置４００への応答後のステップＳ２８で、データブロックＤＢ１がサーバ１００ｂに転送され、これに応じて重複除去処理が行われる。ステップＳ２９では、サーバ１００ｂのキャッシュ１１０ｂにデータブロックＤＢ１が格納される。また、サーバ１００ｂが保持するハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１には、ハッシュ値「０ｘ９２ＤＦ５９」に対応するポインタの項目に、データブロックＤＢ１が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックＤＢ１と同じ内容のデータブロックがすでにキャッシュ１１０ｂに登録されていた場合、ハッシュ管理テーブル１２１ｂには上記情報を含むエントリ１２１ｂ１がすでに登録されている。
【００８５】
そして、ステップＳ３１では、サーバ１００ｃが保持するＬＢＡ管理テーブル１２２ｃにおいて、ＬＢＡ０００１に対応するポインタの項目に、ハッシュ管理テーブル１２１ｂのエントリ１２１ｂ１を指し示す情報が登録される。
【００８６】
図１１は、ストレージシステムにおける読み出し制御処理の手順を示すシーケンス図である。この図１１では、ホスト装置４００からサーバ１００ａに対して、ＬＢＡ０００１からのデータ読み出しが要求されたものとする。
【００８７】
［ステップＳ４１］サーバ１００ａは、ＬＢＡ０００１からのデータの読み出し要求をホスト装置４００から受信する。
［ステップＳ４２］サーバ１００ａは、読み出し元として指定されたＬＢＡに基づいて、読み出し元ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図１１の例では、サーバ１００ｃが担当サーバとして特定される。この場合、サーバ１００ａは、ＬＢＡをサーバ１００ｃに送信して、ＬＢＡ管理テーブル１２２ｃの検索を指示する。
【００８８】
［ステップＳ４３］サーバ１００ｃは、ＬＢＡ管理テーブル１２２ｃから、受信したＬＢＡを含むエントリを特定し、特定されたエントリにおけるポインタの項目から情報を取得する。ここでは、ポインタの項目から、サーバ１００ｂのハッシュ管理テーブル１２１ｂのエントリのアドレスが取得されたものとする。
【００８９】
［ステップＳ４４］サーバ１００ｃは、取得されたエントリのアドレスをサーバ１００ｂに送信して、対応する記憶領域からサーバ１００ａへのデータ読み出しを指示する。
［ステップＳ４５］サーバ１００ｂは、ハッシュ管理テーブル１２１ｂにおける受信したアドレスが示すエントリを参照し、ポインタの項目から情報を読み出す。ここでは、キャッシュページのアドレスが読み出されたとする。サーバ１００ｂは、読み出されたアドレスが示すキャッシュ１１０ｂのキャッシュページからデータを読み出し、読み出したデータをサーバ１００ａに送信する。
【００９０】
［ステップＳ４６］サーバ１００ａは、受信したデータをホスト装置４００に送信する。
以上のように、ハッシュ管理テーブル１２１およびＬＢＡ管理テーブル１２２に基づいて、読み出しが要求されたデータがサーバ１００ａに送信される。なお、例えば、ステップＳ４３において、ＬＢＡ管理テーブル１２２ｃのポインタの項目から、サーバ１００ｃのキャッシュ１１０ｃにおけるキャッシュページのページ番号が取得される場合もある。これは、読み出しが要求されたデータについてハッシュ値の計算が未実行の場合である。この場合、サーバ１００ｃは、キャッシュ１１０ｃの該当するキャッシュページからデータを読み出し、サーバ１００ａに送信する。サーバ１００ａは、受信したデータをホスト装置４００に送信する。
【００９１】
ところで、図９で示したように、ポストプロセスモードは、重複除去処理を事後的に実行するため、インラインモードよりも書き込み要求に対する応答時間を短縮できる。しかし、ポストプロセスモードには、事後的な処理の負荷によって、単位時間に書き込み要求を処理できる回数（ＩＯＰＳ：Input Output Per Second）が低下する場合があるという問題がある。
【００９２】
具体的には、ポストプロセスモードでは、ホスト装置４００に応答した後に、ハッシュ値計算を含む重複除去のための処理がバックグラウンドで実行される。このため、各サーバでのバックグラウンドでの処理負荷が、ホスト装置４００に対するＩＯ応答性能を低下させる要因になり得る。
【００９３】
これに加えて、バックグラウンドでの処理過程では、図９の例のように、データをキャッシュに一時的に保持するサーバと、ハッシュ値から特定される、データの管理を担当するサーバとが異なる場合、サーバ間での通信が発生する。この通信では、テーブル更新指示のような命令やその応答だけでなく、実体的な書き込みデータの転送も行われる（図９のステップＳ２８参照）。
【００９４】
図７や図９の例のように、インラインモードでもポストプロセスモードでも、ホスト装置４００から書き込み要求を受信してから応答するまでの間にサーバ間の通信が発生し得る。また、図１１の例のように、ホスト装置４００から読み出し要求を受信した場合にも、ホスト装置４００に応答するまでの間にサーバ間の通信が発生し得る。このため、上記のようなバックグラウンドの処理過程での通信によってサーバ間の通信トラフィックが混雑すると、それがホスト装置４００に対するＩＯ応答性能を低下させる要因になり得る。
【００９５】
例えば、サーバ間の通信で単位時間に伝送可能なメッセージ数には上限がある。このため、サーバ間の通信回数が増大すると、ホスト装置４００からのＩＯ要求を単位時間に処理できる数（すなわち、ホスト装置４００から見たサーバ１００のＩＯＰＳ）が低下してしまう。
【００９６】
そこで、本実施の形態のサーバ１００は、インラインモードの書き込み制御処理とポストプロセスモードの書き込み制御処理とを、選択的に実行する。その際、ポストプロセスモードの適用回数を必要最小限に抑えて、処理負荷や通信負荷の増大を抑制し、ＩＯＰＳの低下を抑制する。
【００９７】
具体的には、サーバ１００は、同一送信元から同一論理ボリューム宛てのほぼ同一数の書き込みコマンドを連続して受信した場合に、これらを「連続コマンド群」として特定する。サーバ１００は、連続コマンド群がほぼ同一間隔が発行されるような書き込みパターンを検出すると、連続コマンド群を単位として、どの書き込みコマンドをインラインモードで処理し、どの書き込みコマンドをポストプロセスモードで処理するかを決定する。例えば、ホスト装置４００でトランザクション処理を伴うアプリケーションが稼働している場合に、このような書き込みパターンが発生し得る。
【００９８】
図１２は、連続コマンド群に対する応答について示す図である。この図１２には、連続コマンド群に対する応答例１〜４を示しており、これらのうち応答例４が本実施の形態での応答を示し、応答例１〜３は本実施の形態と比較するための比較例を示す。
【００９９】
図１２の例では、あるホスト装置４００が、６つの書き込みコマンドを連続して送信し、これらのすべてに対応する応答を受信した後に、次の６つの書き込みコマンドを連続して送信する、という処理を実行するものとする。例として、これらの書き込みコマンドの書き込み先は、同一の論理ボリュームであるものとする。サーバ１００は、このような連続する６つの書き込みコマンドを連続コマンド群として特定し、連続コマンド群をほぼ一定間隔で受信した場合に、特定の書き込みパターンが発生したことを検出する。図１２では、検出された書き込みパターンに含まれる連続コマンド群５１，５２が例示されている。
【０１００】
なお、書き込みパターンが検出されるケースは、図１２の例のように、ホスト装置４００が連続コマンド群に対応する応答コマンドを全て受信した後、すぐに次の連続コマンド群を発行するケースに限定されるものではない。例えば、ホスト装置４００が連続コマンド群に対応する応答コマンドを全て受信した後、内部的な所定の処理を実行し、その実行後に次の連続コマンド群を発行するケースもある。
【０１０１】
応答例１は、全ての書き込みコマンドがインラインモードで処理された場合を示している。応答例１では、ホスト装置４００は、連続コマンド群５１の最後の書き込みコマンド６６に対応する応答コマンド７６を受信すると、次の連続コマンド群５２の送信を開始する。なお、インラインモードでは、書き込みコマンドの受信から応答コマンドの送信まで、応答時間ｔ１かかるものとする。
【０１０２】
前述のように、インラインモードでは、書き込み要求の受信から応答までの応答時間が長い。このため、応答例１では、ホスト装置４００が次の連続コマンド群５２を発行するまでの時間が長くなってしまう。すなわち、連続コマンド群の発行間隔が長くなる。したがって、ホスト装置４００でトランザクション処理を伴うアプリケーションプログラムが実行されている場合、このプログラムの実行時間が長くなり、ホスト装置４００の処理効率が悪化する。なお、以下の説明では、このようなホスト装置４００の処理効率の悪化を、「ホスト装置４００のスループットが低下する」と表現する。
【０１０３】
応答例２〜４は、応答時間の短縮を目的として、連続コマンド群に含まれる一部の書き込みコマンドをポストプロセスモードで処理した場合を示す。まず、応答例２は、連続コマンド群５１に含まれる書き込みコマンドのうち、中間部に含まれる書き込みコマンド６３，６４をポストプロセスモードで処理した場合を示している。
【０１０４】
ポストプロセスモードでの書き込みコマンドの受信から応答コマンドの送信までの応答時間ｔ２は、インラインモードでの応答時間ｔ１より短い。しかし、応答例２のように、中間部の書き込みコマンド６３，６４に対する応答時間を短縮したとしても、最後の書き込みコマンド６６に対する応答コマンド７６の送信タイミングは応答例１と変わらない。このため、中間部の書き込みコマンドのみポストプロセスモードで処理することは、連続コマンド群全体の応答時間を短縮することに貢献しない。すなわち、連続コマンド群全体の応答時間を短縮するためには、連続コマンド群に含まれる書き込みコマンドのうち、後ろ側の書き込みコマンドをポストプロセスモードで処理する必要がある。
【０１０５】
応答例３は、連続コマンド群５１に含まれる書き込みコマンドのうち、後ろ側の３つの書き込みコマンド６４〜６６をポストプロセスモードで処理した場合を示す。この場合、書き込みコマンド６４〜６６にそれぞれ対応する応答コマンド７４〜７６の送信時刻が早くなる。その結果、連続コマンド群５１に対応する全ての応答コマンドをホスト装置４００が受信するまでの時間は、応答例１，２の場合と比較して時間ｔ３だけ短縮される。
【０１０６】
しかしながら、仮に書き込みコマンド６４をインラインモードで処理した場合、書き込みコマンド６４に対応する応答コマンドの送信時刻Ｔ１は、最後の書き込みコマンド６６に対応する応答コマンドの送信時刻Ｔ２より早くならない。このため、書き込みコマンド６４をポストプロセスモードで処理することは、連続コマンド群全体の応答時間の短縮に貢献しておらず、処理負荷が高まる分だけ無駄であると言える。
【０１０７】
そこで、本実施の形態では、サーバ１００は、応答例４のように、書き込みコマンド６５，６６のみポストプロセスモードで処理し、その他の書き込みコマンドをインラインモードで処理する。これにより、連続コマンド群全体の応答時間の短縮に貢献する必要最小限の書き込みコマンドだけが、ポストプロセスモードで処理される。したがって、サーバ１００の処理負荷の増大を抑制しつつ、連続コマンド群全体の応答時間を短縮し、ホスト装置４００のスループットを向上させることができる。
【０１０８】
ここで、ポストプロセスモードを適用する書き込みコマンドの数を、適用数Ｎとする。また、連続コマンド群のうち、インラインモードが適用される書き込みコマンド群を「前半コマンド群」、ポストプロセスモードが提供される書き込みコマンド群を「後半コマンド群」と記載する。応答例４では、サーバ１００は、前半コマンド群に含まれる最後尾の書き込みコマンド６４に対応する応答コマンド７４の送信時刻Ｔ３が、後半コマンド群に含まれる最後尾の書き込みコマンド６６に対応する応答コマンド７６の送信時刻Ｔ４までの範囲で、送信時刻Ｔ４に最も近づくように、適用数Ｎを設定する。
【０１０９】
具体的には、適用数Ｎは、ホスト装置４００から連続して書き込みコマンドを送信可能な最小の時間間隔ｔｒと、インラインモードでの応答時間ｔ１と、ポストプロセスモードでの応答時間ｔ２とを用いて、次の式（１）にしたがって算出される。ただし、小数点以下の値は切り捨てられる。
Ｎ＝（ｔ１−ｔ２）／ｔｒ      ・・・（１）
応答例４では、Ｎ＝２と算出される。
【０１１０】
なお、時間間隔ｔｒは、ホスト装置４００の性能仕様として与えられ得る。また、応答時間ｔ１，ｔ２は、サーバ１００の性能仕様として与えられ得る。このため、時間間隔ｔｒおよび応答時間ｔ１，ｔ２は、サーバ１００の記憶装置にあらかじめ記憶され、適用数Ｎの計算時に読み出されてもよい。また、与えられた時間間隔ｔｒおよび応答時間ｔ１，ｔ２を用いて適用数Ｎがあらかじめ計算され、サーバ１００の記憶装置に記憶されていてもよい。この場合、サーバ１００は、適用数Ｎを取得するために計算を行う必要はなく、記憶装置から読み出せばよくなる。また、時間間隔ｔｒおよび応答時間ｔ１，ｔ２の少なくとも１つは、サーバ１００が蓄積する書き込みコマンドの受信履歴や応答コマンドの送信履歴に基づいて、サーバ１００が算出し、記憶装置に格納してもよい。
【０１１１】
次に、サーバ１００の処理の詳細について説明する。
図１３は、サーバが備える処理機能の構成例を示すブロック図である。サーバ１００は、記憶部１２０、ＩＯ制御部１３１、検出部１３２、モード決定部１３３、重複除去制御部１３４およびＬＢＡ管理部１３５を有する。
【０１１２】
記憶部１２０は、ＲＡＭ１０２またはＳＳＤ１０３など、サーバ１００が備える記憶装置の記憶領域として実現される。記憶部１２０には、前述のハッシュ管理テーブル１２１およびＬＢＡ管理テーブル１２２が格納される。さらに、記憶部１２０には、履歴テーブル１２３、時間間隔１２４、インライン応答時間１２５、ポストプロセス応答時間１２６、ハッシュ未計算ブロック数１２７およびハッシュ計算済みブロック数１２８が格納される。
【０１１３】
履歴テーブル１２３は、検出された連続コマンド群に関する情報を保持する。履歴テーブル１２３は、書き込みパターンの検出や、ポストプロセスモードの適用要否の判定に利用される。また、履歴テーブル１２３は、書き込みパターンの検出候補毎に作成される。時間間隔１２４は、ホスト装置４００から連続して書き込みコマンドを送信可能な最小の時間間隔（前述のｔｒ）を示す。時間間隔１２４は、ホスト装置４００毎に記録されてもよい。
【０１１４】
インライン応答時間１２５は、インラインモードを用いたときにホスト装置４００から書き込みコマンドを受信してからホスト装置４００に対して応答するまでの時間（前述のｔ１）を示す。ポストプロセス応答時間１２６は、ポストプロセスモードを用いたときにホスト装置４００から書き込みコマンドを受信してからホスト装置４００に対して応答するまでの時間（前述のｔ２）を示す。
【０１１５】
ハッシュ未計算ブロック数１２７は、サーバ１００のキャッシュ１１０に格納されたデータブロックのうち、ハッシュ未計算ブロックの数をカウントしたカウント値である。ハッシュ未計算ブロックとは、ポストプロセスモードの書き込み制御処理において、ハッシュ値の計算が行われずに、ホスト装置４００から書き込み先として指定されたＬＢＡの担当サーバのキャッシュ１１０に格納されたデータブロックである。
【０１１６】
一方、ハッシュ計算済みブロック数１２８は、サーバ１００のキャッシュ１１０に格納されたデータブロックのうち、ハッシュ計算済みブロックの数をカウントしたカウント値である。ハッシュ計算済みブロックとは、ハッシュ値が算出され、算出されたハッシュ値の担当サーバのキャッシュ１１０に格納されたデータブロックである。
【０１１７】
ＩＯ制御部１３１、検出部１３２、モード決定部１３３、重複除去制御部１３４およびＬＢＡ管理部１３５の処理は、例えば、サーバ１００が備えるプロセッサ１０１が所定のプログラムを実行することで実現される。
【０１１８】
ＩＯ制御部１３１は、ホスト装置４００からのＩＯコマンドを受信し、受信したＩＯコマンドに対して応答するまでの処理を統括的に制御する。ＩＯ制御部１３１は、ホスト装置４００から書き込みコマンドを受信すると、インラインモードとポストプロセスモードのうち、モード決定部１３３によって決定された書き込み制御モードを選択する。
【０１１９】
ＩＯ制御部１３１は、インラインモードを選択した場合には、書き込みデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバの重複除去制御部１３４に書き込みデータとハッシュ値とを渡し、書き込みデータの格納とハッシュ管理テーブル１２１の更新を指示する。さらに、ＩＯ制御部１３１は、書き込み先のＬＢＡの担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバのＬＢＡ管理部１３５に、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１２０】
一方、ＩＯ制御部１３１は、ポストプロセスモードを選択した場合には、書き込み先のＬＢＡの担当サーバを特定する。ＩＯ制御部１３１は、特定された担当サーバのＬＢＡ管理部１３５に書き込みデータを渡し、書き込みデータの格納とＬＢＡ管理テーブル１２２の更新を指示する。
【０１２１】
検出部１３２は、送信元と書き込み先論理ボリュームとの組み合わせ毎に書き込みコマンドを監視し、その監視結果に基づいて、同一送信元からの同一論理ボリューム宛ての書き込みコマンドに対応する書き込みパターンを検出する。
【０１２２】
モード決定部１３３は、検出された書き込みパターンに属する連続コマンド群に含まれる書き込みコマンドのうち、どの書き込みコマンドに対してポストプロセスモードを適用するかを決定する。また、モード決定部１３３は、これらの書き込みコマンドのうち、どの書き込みコマンドに対してインラインモードを適用するかを決定する。
【０１２３】
重複除去制御部１３４は、書き込みデータとハッシュ値とを受け取ると、同一内容のデータが重複しないように、書き込みデータをキャッシュ１１０に格納し、ハッシュ管理テーブル１２１を更新する。インラインモードの書き込み制御過程では、重複除去制御部１３４は、書き込みデータとハッシュ値とをいずれかのサーバ１００のＩＯ制御部１３１から受け取る。一方、ポストプロセスモードの書き込み制御過程では、重複除去制御部１３４は、書き込みデータとハッシュ値とをいずれかのサーバ１００のＬＢＡ管理部１３５から受け取り、そのＬＢＡ管理部１３５に対してＬＢＡ管理テーブル１２２の更新を指示する。
【０１２４】
ＬＢＡ管理部１３５は、インラインモードの書き込み制御過程では、ＩＯ制御部１３１からの指示に応じてＬＢＡ管理テーブル１２２を更新する。一方、ＬＢＡ管理部１３５は、ポストプロセスモードの書き込み制御過程では、ＩＯ制御部１３１からの指示に応じて、書き込みデータをハッシュ未計算ブロックのデータとしてキャッシュ１１０に格納し、ＬＢＡ管理テーブル１２２を更新する。さらに、ＬＢＡ管理部１３５は、キャッシュ１１０内のハッシュ未計算ブロックのデータを順次選択し、選択したデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。ＬＢＡ管理部１３５は、特定されたサーバの重複除去制御部１３４にデータとハッシュ値とを渡し、データの格納とハッシュ管理テーブル１２１の更新を指示する。そして、ＬＢＡ管理部１３５は、その重複除去制御部１３４からの指示に応じてＬＢＡ管理テーブル１２２を更新する。
【０１２５】
図１４は、履歴テーブルのデータ構成例を示す図である。履歴テーブル１２３は、コマンド群ＩＤ（identifier）、受信時間、受信間隔の項目を含む。コマンド群ＩＤの項目には、検出された連続コマンド群を識別する情報が登録される。受信時間の項目には、連続コマンド群の受信にかかった時間が登録される。この受信時間は、例えば、連続コマンド群の先頭コマンドの受信時刻と最後尾コマンドの受信時刻との差分である。受信間隔の項目には、次の連続コマンド群の受信開始までの時間間隔が登録される。
【０１２６】
図１５は、適用モードの決定処理について示す図である。連続コマンド群の各書き込みコマンドに対する適用モードの決定処理は、次のような３つのフェーズ１〜３に分割される。
【０１２７】
フェーズ１では、書き込みパターンが検出され、書き込みパターンに属する連続コマンド群においてどの書き込みコマンドにポストプロセスモードを適用するかを示す適用領域が決定される。
【０１２８】
具体的には、検出部１３２は、同一送信元から同一論理ボリューム宛ての書き込みコマンドについての連続コマンド群を検出する。例えば、所定の時間Ｃ以内の間隔で該当する書き込みコマンド（第１のコマンドとする）が複数受信され、その後に時間Ｃより長い間隔を空けて該当する書き込みコマンドが受信された場合に、受信した複数の第１のコマンドが連続コマンド群として検出される。ここで、時間Ｃは、前述の時間間隔ｔｒ以上の値に設定される。また、例えば、同一送信元かつ同一論理ボリューム宛ての２つの書き込みコマンドが、時間Ｃ以内の間隔で受信されたときに、それらのコマンド間に送信元または書き込み先論理ボリュームが異なる書き込みコマンドが受信されていたとする。この場合でも、上記の２つの書き込みコマンドは連続コマンド群に属すると判定されてよい。
【０１２９】
検出部１３２は、各連続コマンド群の受信時間の揺れが一定範囲内であり、かつ、連続コマンド群の間の受信間隔の揺れが一定範囲以内となるような、所定個数の連続コマンド群を検出した場合に、それらの連続コマンド群が書き込みパターンに属すると判定する。なお、受信時間とは、図１４で説明したように、連続コマンド群の受信にかかった時間である。
【０１３０】
図１５の例では、フェーズ１において連続コマンド群８１，８２が検出され、さらにその後に連続コマンド群８３が検出されている。連続コマンド群８１，８２のそれぞれの受信時間がｎｃ１，ｎｃ２、連続コマンド群８１と連続コマンド群８２との間の受信間隔がｔｇ１、連続コマンド群８２と連続コマンド群８３との間の受信間隔がｔｇ２であったとする。また、書き込みパターンの検出に必要な連続コマンド群の個数を「２」とする。
【０１３１】
検出部１３２は、例えば、受信時間ｎｃ１，ｎｃ２の分散が一定値以内であり、かつ受信間隔ｔｇ１，ｔｇ２の分散が一定値以内である場合に、書き込みパターンの発生を検出する。モード決定部１３３は、書き込みパターンに属する連続コマンド群において、ポストプロセスモードを適用する適用領域を決定する。適用領域とは、ポストプロセスモードが適用される書き込みコマンドの範囲であり、連続コマンド群の最後尾から前述の適用数Ｎだけの書き込みコマンドが適用領域に決定される。図１５では、Ｎ＝２と算出されたとする。以上の処理が終了すると、フェーズ２に遷移する。
【０１３２】
なお、フェーズ１では、履歴テーブル１２３における連続コマンド群８１のレコードに、受信時間ｎｃ１と受信間隔ｔｇ１が登録され、連続コマンド群８２のレコードに、受信時間ｎｃ２と受信間隔ｔｇ２が登録される。検出部１３２は、これらのレコードを参照することで書き込みパターンを検出する。
【０１３３】
また、各連続コマンド群の受信時間の代わりに、各連続コマンド群に含まれる書き込みコマンド数が用いられてもよい。この場合、書き込みコマンド数に関する条件は、各連続コマンド群に含まれるコマンド数の差が１以上の一定値以内という条件でもよいし、コマンド数の差が０という条件であってもよい。
【０１３４】
次に、フェーズ２では、決定された適用領域に対して実際にポストプロセスモードが適用され、その適用によってホスト装置４００におけるスループット向上効果が得られたかが確認される。そして、効果の確認結果に基づいて、適用領域にポストプロセスモードを適用するか否かが判定される。
【０１３５】
図１５の例では、連続コマンド群８１，８２に続いて、連続コマンド群８３〜８６が受信されている。フェーズ２では、連続コマンド群８３において適用領域に含まれる書き込みコマンド８３ａ，８３ｂと、連続コマンド群８４において適用領域に含まれる書き込みコマンド８４ａ，８４ｂが、ポストプロセスモードで処理される。そして、連続コマンド群８３，８４に対応する受信時間および受信間隔が引き続き監視される。
【０１３６】
モード決定部１３３は、フェーズ２での受信間隔がフェーズ１での受信間隔より短い場合に、ホスト装置４００におけるスループット向上効果が得られたと判定する。図１５の例では、連続コマンド群８３と連続コマンド群８４との間の受信間隔がｔｇ３、連続コマンド群８４と連続コマンド群８５との間の受信間隔がｔｇ４であったとする。モード決定部１３３は、例えば、受信間隔ｔｇ３，ｔｇ４の平均値が受信間隔ｔｇ１，ｔｇ２の平均値より短い場合に、スループット向上効果が得られたと判定する。以上の判定処理が終了すると、フェーズ３に遷移する。
【０１３７】
フェーズ３では、スループット向上効果が得られた場合は、決定領域に対するポストプロセスモードの適用が継続され、効果が得られなかった場合は、ポストプロセスモードの適用が中止される。図１５の例では、スループット向上効果が得られたと判定され、後続の連続コマンド群８５，８６における適用領域に、ポストプロセスモードが適用される。
【０１３８】
以上の処理により、サーバ１００は、決定した適用領域に実際にポストプロセスモードを適用したときに、ホスト装置４００のスループット向上効果が得られた場合にのみ、ポストプロセスモードを適用し続ける。これにより、実効性のある必要最小限の書き込みコマンドだけが、ポストプロセスモードで処理される。したがって、サーバ１００の処理負荷の増大を抑制しつつ、ホスト装置４００のスループットを確実に向上させることができる。
【０１３９】
次に、サーバ１００で実行される処理についてフローチャートを用いて説明する。サーバ１００は、書き込みコマンドを監視し、送信元のホスト装置４００と書き込み先の論理ボリュームとの組み合わせ毎に、以下の図１６〜図１９の処理を実行する。換言すると、図１６〜図１９の処理は、同一の送信元かつ同一の宛先論理ボリュームの書き込みコマンドを受信するたびに実行される。
【０１４０】
まず、該当書き込みコマンドが受信されていない初期状態や、該当書き込みコマンドに対応する書き込みパターンの受信が終了した状態には、図１６に示すフェーズ１の処理が実行される。
【０１４１】
図１６は、フェーズ１の処理例を示すフローチャートである。
［ステップＳ５１］サーバ１００は、次の図１７に示すパターン監視プロセスを実行する。
【０１４２】
図１７は、パターン監視プロセスの処理例を示すフローチャートである。なお、図１７の処理の初回実行時には、サーバ１００は「パターン非監視状態」であるものとする。
［ステップＳ６１］検出部１３２は、ＩＯ制御部１３１が、該当書き込みコマンド（すなわち、特定の送信元かつ特定の宛先論理ボリュームの書き込みコマンド）を受信したことを検知する。
【０１４３】
［ステップＳ６２］検出部１３２は、ステップＳ６１で書き込みコマンドを受信した時刻と前回該当書き込みコマンドを受信した時刻との時間差が、所定の時間Ｃ以下であるか否かを判定する。検出部１３２は、時間差が時間Ｃ以下の場合、現在の書き込みコマンドと前回の書き込みコマンドとが連続コマンド群に属すると判断し、ステップＳ６３の処理を実行する。一方、検出部１３２は、時間差が時間Ｃより大きい場合、現在の書き込みコマンドが連続コマンド群の先頭と判断して、ステップＳ６７の処理を実行する。
【０１４４】
［ステップＳ６３］検出部１３２は、現在の状態がパターン非監視状態である場合、「パターン監視状態」に遷移する。このとき、対応する履歴テーブル１２３が記憶部１２０に生成される。なお、パターン監視状態かパターン非監視状態かを示す情報は、記憶部１２０に格納されていればよい。
【０１４５】
［ステップＳ６４］検出部１３２は、前回の該当コマンド受信時はパターン監視状態であったか否かを判定する。検出部１３２は、パターン監視状態であった場合、ステップＳ６５の処理を実行し、パターン非監視状態であった場合、ステップＳ６６の処理を実行する。
【０１４６】
［ステップＳ６５］検出部１３２は、パターン監視状態を継続する。
［ステップＳ６６］検出部１３２は、新たな書き込みパターンを検出するためのパターン監視状態が開始されたと判定する。このとき、検出部１３２は、パターン監視状態を継続するとともに、対応する履歴テーブル１２３に蓄積された情報をリセットする。
【０１４７】
［ステップＳ６７］検出部１３２は、前回の該当書き込みコマンド受信時はパターン監視状態であったか否かを判定する。検出部１３２は、パターン監視状態であった場合、ステップＳ６８の処理を実行し、パターン非監視状態であった場合、ステップＳ６９の処理を実行する。
【０１４８】
［ステップＳ６８］検出部１３２は、履歴テーブル１２３の新たなレコードに、前回受信した該当書き込みコマンドが属する連続コマンド群の受信時間ｔｗと、この連続コマンド群の最後尾コマンドの受信から現在の書き込みコマンドの受信までの受信間隔ｔｇとを登録する。検出部１３２は、履歴テーブル１２３の間隔の項目に、前コマンド群の後の時間ｔｇを登録する。
【０１４９】
［ステップＳ６９］検出部１３２は、パターン非監視状態に遷移する。
以下、図１６に戻って説明を続ける。
［ステップＳ５２］検出部１３２は、現在パターン監視状態であるか否かを判定する。検出部１３２は、パターン監視状態の場合、ステップＳ５３の処理を実行し、パターン非監視状態の場合、ステップＳ５７の処理を実行する。
【０１５０】
［ステップＳ５３］検出部１３２は、履歴テーブル１２３を参照し、書き込みパターンを検出できるかを判定する。検出部１３２は、履歴テーブル１２３に所定数Ｐのレコードが登録されている場合、すなわち、所定数Ｐの連続コマンド群が検出されている場合に、書き込みパターンを検出できると判定する。
【０１５１】
［ステップＳ５４］検出部１３２は、書き込みパターンを検出できたかを判定する。ステップＳ５３で検出できると判定された場合、検出部１３２は、履歴テーブル１２３に登録された最新のＰ個のレコードの情報を用いて、書き込みパターンの検出処理を実行する。検出部１３２は、検出された各連続コマンド群の受信時間の揺れが一定範囲内であり、かつ、連続コマンド群の間の受信間隔の揺れが一定範囲以内である場合、書き込みパターンを検出したと判定する。検出部１３２は、書き込みパターンを検出できた場合、ステップＳ５５の処理を実行し、書き込みパターンを検出できなかった場合、ステップＳ５７の処理を実行する。
【０１５２】
［ステップＳ５５］モード決定部１３３は、ポストプロセスモードの適用領域を決定する。モード決定部１３３は、時間間隔１２４（ｔｒ）とインライン応答時間１２５（ｔ１）とポストプロセス応答時間１２６（ｔ２）とを式（１）に代入して、適用数Ｎを算出する。モード決定部１３３は、連続コマンド群に属する書き込みコマンドのうち、最後尾からＮ個分の領域を適応領域に決定する。モード決定部１３３は、適用領域を示す情報を記憶部１２０に保存する。
【０１５３】
［ステップＳ５６］モード決定部１３３は、ステップＳ５１で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。また、ステップＳ５６では、フェーズ１は終了し、次に該当する書き込みコマンドが受信された場合には、図１８に示すフェーズ２の処理が実行される。
【０１５４】
［ステップＳ５７］モード決定部１３３は、ステップＳ５１で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。また、ステップＳ５７では、フェーズ１は継続され、次に該当する書き込みコマンドが受信された場合には、再度図１６の処理が実行される。
【０１５５】
図１８は、フェーズ２の処理例を示すフローチャートである。
［ステップＳ７１］サーバ１００は、図１７に示したパターン監視プロセスを実行する。
【０１５６】
［ステップＳ７２］モード決定部１３３は、現在パターン監視状態であるか否かを判定する。モード決定部１３３は、パターン監視状態の場合、ステップＳ７３の処理を実行し、パターン非監視状態の場合、ステップＳ７７の処理を実行する。
【０１５７】
［ステップＳ７３］モード決定部１３３は、履歴テーブル１２３を参照し、ホスト装置４００のスループット向上効果の有無の判定が可能であるか否かを判定する。モード決定部１３３は、図１６のステップＳ５４で書き込みパターンが検出された後に、履歴テーブル１２３にさらに所定数Ｑのレコードが登録されている場合、すなわち、所定数Ｑの連続コマンド群が検出されている場合に、効果の有無の判定が可能と判定する。モード決定部１３３は、判定が可能な場合、ステップＳ７８の処理を実行し、判定が可能でない場合、ステップＳ７４の処理を実行する。
【０１５８】
［ステップＳ７４］モード決定部１３３は、現在の書き込みコマンド（ステップＳ７１の処理で受信した書き込みコマンド）がポストプロセスモードの適用領域に含まれるか否かを判定する。モード決定部１３３は、現在の書き込みコマンドが適用領域に含まれる場合、ステップＳ７５の処理を実行し、現在の書き込みコマンドが適用領域に含まれない場合、ステップＳ７６の処理を実行する。
【０１５９】
［ステップＳ７５］モード決定部１３３は、ステップＳ７１の処理で受信した書き込みコマンドの書き込み制御モードとして、ポストプロセスモードを選択する。ＩＯ制御部１３１は、ポストプロセスモードでのＩＯ制御処理を実行する。
【０１６０】
また、モード決定部１３３は、ステップＳ７９を経由してステップＳ７４を実行した場合、効果の有無の判定が完了しているので、フェーズ２を終了する。この場合、次に該当する書き込みコマンドが受信された場合には、フェーズ３の処理が実行される。一方、モード決定部１３３は、ステップＳ７９を経由してステップＳ７４を実行していない場合、フェーズ２を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図１８の処理が実行される。
【０１６１】
［ステップＳ７６］モード決定部１３３は、ステップＳ７１の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。
【０１６２】
また、モード決定部１３３は、ステップＳ７９を経由してステップＳ７４を実行した場合またはステップＳ８０を経由している場合、フェーズ２を終了する。この場合、次に該当する書き込みコマンドが受信された場合には、フェーズ３の処理が実行される。一方、モード決定部１３３は、ステップＳ７９を経由してステップＳ７４を実行していない場合、フェーズ２を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図１８の処理が実行される。
【０１６３】
［ステップＳ７７］モード決定部１３３は、ステップＳ７１の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。また、モード決定部１３３は、履歴テーブル１２３に登録されている情報を消去する。そして、モード決定部１３３は、フェーズ２を終了し、フェーズ１に戻るように設定する。この場合、次に該当する書き込みコマンドが受信された場合には、図１６に示したフェーズ１の処理が実行される。
【０１６４】
［ステップＳ７８］モード決定部１３３は、履歴テーブル１２３を参照して、フェーズ２での受信間隔とフェーズ１での受信間隔とを比較する。例えば、モード決定部１３３は、履歴テーブル１２３に登録された最新のＱ個のレコードを参照し、各レコードの受信間隔の平均値ＡＶＥ１を算出する。また、モード決定部１３３は、参照したＱ個のレコードの直前のＰ個のレコードを参照し、各レコードの受信間隔の平均値ＡＶＥ２を算出する。モード決定部１３３は、平均値ＡＶＥ２が平均値ＡＶＥ１より小さい場合、フェーズ２での受信間隔がフェーズ１より短くなったと判定する。受信間隔が短くなった場合、ポストプロセスモードの適用によってホスト装置４００のスループットの向上効果が得られたと判断される。
【０１６５】
モード決定部１３３は、受信間隔が短くなった場合、ステップＳ７９を実行し、短くなっていない場合、ステップＳ８０を実行する。
［ステップＳ７９］この場合、ホスト装置４００のスループット向上効果が得られたと判断される。モード決定部１３３は、適用領域にポストプロセスモードを適用し続けることを示す情報を、記憶部１２０に設定する。
【０１６６】
［ステップＳ８０］この場合、ホスト装置４００のスループット向上効果が得られなかったと判断される。モード決定部１３３は、ポストプロセスモードの適用を中止することを示す情報を、記憶部１２０に設定する。
【０１６７】
図１９は、フェーズ３の処理例を示すフローチャートである。
［ステップＳ９１］サーバ１００は、図１７に示したパターン監視プロセスを実行する。
【０１６８】
［ステップＳ９２］モード決定部１３３は、現在パターン監視状態であるか否かを判定する。モード決定部１３３は、パターン監視状態の場合、ステップＳ９３の処理を実行し、パターン非監視状態の場合、ステップＳ９７の処理を実行する。
【０１６９】
［ステップＳ９３］モード決定部１３３は、フェーズ２でポストプロセスモードの適用を継続することが設定されたか否かを判定する。モード決定部１３３は、図１８のステップＳ７９で適用継続が設定された場合、ステップＳ９４を実行し、図１９のステップＳ８０で適用中止が設定された場合、ステップＳ９６を実行する。
【０１７０】
［ステップＳ９４］モード決定部１３３は、現在の書き込みコマンド（ステップＳ９１の処理で受信した書き込みコマンド）がポストプロセスモードの適用領域に含まれるか否かを判定する。モード決定部１３３は、現在の書き込みコマンドが適用領域に含まれる場合、ステップＳ９５の処理を実行し、現在の書き込みコマンドが適用領域に含まれない場合、ステップＳ９６の処理を実行する。
【０１７１】
［ステップＳ９５］モード決定部１３３は、ステップＳ９１の処理で受信した書き込みコマンドの書き込み制御モードとして、ポストプロセスモードを選択する。ＩＯ制御部１３１は、ポストプロセスモードでのＩＯ制御処理を実行する。また、モード決定部１３３は、フェーズ３を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図１９の処理が実行される。
【０１７２】
［ステップＳ９６］モード決定部１３３は、ステップＳ９１の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。また、モード決定部１３３は、フェーズ３を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図１９の処理が実行される。
【０１７３】
［ステップＳ９７］モード決定部１３３は、ステップＳ９１の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。ＩＯ制御部１３１は、インラインモードでのＩＯ制御処理を実行する。また、モード決定部１３３は、履歴テーブル１２３に登録されている情報を消去する。そして、モード決定部１３３は、フェーズ３を終了し、フェーズ１に戻るように設定する。この場合、次に該当する書き込みコマンドが受信された場合には、図１６に示したフェーズ１の処理が実行される。
【０１７４】
図２０は、インラインモードでのＩＯ制御処理手順の例を示すフローチャートである。図２０の処理は、モード決定部１３３が書き込み制御モードとしてインラインモードを選択したときに実行される。
【０１７５】
［ステップＳ１０１］ＩＯ制御部１３１は、書き込みデータのハッシュ値を計算する。ハッシュ値は、例えば、ＳＨＡ−１（Secure Hash Algorithm 1）のハッシュ関数を用いて計算される。
【０１７６】
［ステップＳ１０２］ＩＯ制御部１３１は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、算出されたハッシュ値の担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ１０３の処理を実行し、担当サーバでない場合、ステップＳ１０４の処理を実行する。
【０１７７】
［ステップＳ１０３］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００の重複除去制御部１３４に対して書き込みデータとハッシュ値とを通知し、書き込みデータの書き込みを指示する。
【０１７８】
［ステップＳ１０４］ＩＯ制御部１３１は、算出されたハッシュ値の担当サーバである他のサーバ１００の重複除去制御部１３４に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
【０１７９】
［ステップＳ１０５］ＩＯ制御部１３１は、ステップＳ１０３での通知先またはステップＳ１０４での転送先から、ハッシュ管理テーブル１２１のエントリのアドレスを取得する。
【０１８０】
［ステップＳ１０６］ＩＯ制御部１３１は、書き込みデータの書き込み先として指定されたＬＢＡに基づいて、このＬＢＡの担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、指定されたＬＢＡの担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ１０７の処理を実行し、担当サーバでない場合、ステップＳ１０８の処理を実行する。
【０１８１】
［ステップＳ１０７］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３５に、ステップＳ１０５で取得されたエントリのアドレスと、書き込み先として指定されたＬＢＡとを通知して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１８２】
［ステップＳ１０８］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３５に、ステップＳ１０５で取得されたエントリのアドレスと、書き込み先として指定されたＬＢＡとを転送して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１８３】
図２１は、ポストプロセスモードでのＩＯ制御処理手順の例を示すフローチャートである。図２１の処理は、モード決定部１３３が書き込み制御モードをポストプロセスモードに選択したときに実行される。
【０１８４】
［ステップＳ１１１］ＩＯ制御部１３１は、書き込みデータの書き込み先として指定されたＬＢＡに基づいて、このＬＢＡの担当サーバを特定し、ＩＯ制御部１３１自身を含むサーバ１００が、指定されたＬＢＡの担当サーバであるかを判定する。ＩＯ制御部１３１は、担当サーバである場合、ステップＳ１１２の処理を実行し、担当サーバでない場合、ステップＳ１１５の処理を実行する。
【０１８５】
［ステップＳ１１２］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３５に、書き込みデータを通知して、キャッシュ１１０への格納を指示する。
【０１８６】
［ステップＳ１１３］ＩＯ制御部１３１は、ステップＳ１１２での通知先のＬＢＡ管理部１３５から、書き込みデータが格納されたキャッシュページのページ番号を取得する。
［ステップＳ１１４］ＩＯ制御部１３１は、ＩＯ制御部１３１自身を含むサーバ１００のＬＢＡ管理部１３５に、取得されたページ番号と、書き込み先として指定されたＬＢＡとを通知して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１８７】
［ステップＳ１１５］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３５に、書き込みデータを転送して、キャッシュ１１０への格納を指示する。
【０１８８】
［ステップＳ１１６］ＩＯ制御部１３１は、ステップＳ１１５での転送先のＬＢＡ管理部１３５から、書き込みデータが格納されたキャッシュページのページ番号を受信する。
［ステップＳ１１７］ＩＯ制御部１３１は、指定されたＬＢＡの担当サーバである他のサーバ１００のＬＢＡ管理部１３５に、取得されたページ番号と、書き込み先として指定されたＬＢＡとを転送して、ＬＢＡ管理テーブル１２２の更新を指示する。
【０１８９】
図２２は、重複除去処理手順の例を示すフローチャートである。
［ステップＳ１２１］重複除去制御部１３４は、書き込みデータとハッシュ値とを、書き込み指示とともに受け付ける。例えば、重複除去制御部１３４は、図２０のステップＳ１０３またはステップＳ１０４の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から書き込み指示を受け付ける。あるいは、重複除去制御部１３４は、後述する図２５のステップＳ１５４またはステップＳ１５５の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から書き込み指示を受け付ける。
【０１９０】
［ステップＳ１２２］重複除去制御部１３４は、受け付けたハッシュ値を含むエントリがハッシュ管理テーブル１２１に登録されているかを判定する。重複除去制御部１３４は、該当エントリが登録されている場合、ステップＳ１２６の処理を実行し、登録されていない場合、ステップＳ１２３の処理を実行する。
【０１９１】
［ステップＳ１２３］ステップＳ１２２でエントリが登録されていないと判定された場合、受け付けた書き込みデータと同じ内容のデータは、キャッシュ１１０またはストレージ２００にまだ格納されていない。この場合、重複除去制御部１３４は、キャッシュ１１０に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ計算済みブロックのデータとしてキャッシュ１１０に格納される。
【０１９２】
［ステップＳ１２４］重複除去制御部１３４は、記憶部１２０のハッシュ計算済みブロック数１２８をカウントアップする。
［ステップＳ１２５］重複除去制御部１３４は、ハッシュ管理テーブル１２１に新たにエントリを作成する。重複除去制御部１３４は、作成されたエントリにおいて、ハッシュ値の項目に受け付けたハッシュ値を登録し、ポインタの項目にステップＳ１２３で書き込みデータを格納したキャッシュページのページ番号を登録し、カウント値の項目に「１」を登録する。
【０１９３】
［ステップＳ１２６］ステップＳ１２２でエントリが登録されていると判定された場合、受け付けた書き込みデータと同じ内容のデータが、キャッシュ１１０またはストレージ２００にすでに格納されている。この場合、重複除去制御部１３４は、ハッシュ管理テーブル１２１のエントリのうち、ステップＳ１２１で受け付けたハッシュ値が登録されたエントリを特定する。重複除去制御部１３４は、特定されたエントリにおけるカウント値の項目の値をカウントアップする。また、重複除去制御部１３４は、ステップＳ１２１で受け付けた書き込みデータおよびハッシュ値を破棄する。このようなステップＳ１２６の処理により、書き込みデータは重複を除去してストレージノードに格納される。
【０１９４】
［ステップＳ１２７］重複除去制御部１３４は、ステップＳ１２５で作成されたエントリ、またはステップＳ１２６で特定されたエントリのアドレスを通知する。ステップＳ１２１で重複除去制御部１３４と同じサーバ１００に含まれるＩＯ制御部１３１またはＬＢＡ管理部１３５から書き込み指示を受けた場合、エントリのアドレスは同じサーバ１００のＩＯ制御部１３１またはＬＢＡ管理部１３５に通知される。また、ステップＳ１２１で重複除去制御部１３４とは異なる他のサーバ１００に含まれるＩＯ制御部１３１またはＬＢＡ管理部１３５から書き込み指示を受けた場合、エントリのアドレスは他のサーバ１００のＩＯ制御部１３１またはＬＢＡ管理部１３５に転送される。
【０１９５】
図２３は、インラインモードでのＬＢＡ管理処理手順の例を示す図である。
［ステップＳ１３１］ＬＢＡ管理部１３５は、ハッシュ管理テーブル１２１のエントリのアドレスと、書き込みデータの書き込み先として指定されたＬＢＡとを、テーブル更新指示とともに受け付ける。例えば、ＬＢＡ管理部１３５は、図２０のステップＳ１０７またはステップＳ１０８の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１からテーブル更新指示を受け付ける。
【０１９６】
［ステップＳ１３２］ＬＢＡ管理部１３５は、ＬＢＡ管理テーブル１２２から、ステップＳ１３１で受け付けたＬＢＡを含むエントリを特定する。ＬＢＡ管理部１３５は、特定されたエントリにおけるポインタの項目に、ステップＳ１３１で受け付けたエントリのアドレスを登録する。
【０１９７】
［ステップＳ１３３］ＬＢＡ管理部１３５は、テーブル更新指示の通知元のＩＯ制御部１３１に対して、テーブル更新の完了通知メッセージを送信する。
以上の図２３の処理により、ハッシュ計算済みブロックのデータについて、ＬＢＡとハッシュ管理テーブル１２１のエントリとがマッピングされる。
【０１９８】
図２４は、ポストプロセスモードでのＬＢＡ管理処理手順の例を示す図である。
［ステップＳ１４１］ＬＢＡ管理部１３５は、書き込みデータをキャッシュ１１０への格納指示とともに受け付ける。例えば、ＬＢＡ管理部１３５は、図２１のステップＳ１１２またはステップＳ１１５の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１から格納指示を受け付ける。
【０１９９】
［ステップＳ１４２］ＬＢＡ管理部１３５は、キャッシュ１１０に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ未計算ブロックのデータとしてキャッシュ１１０に格納される。
【０２００】
［ステップＳ１４３］ＬＢＡ管理部１３５は、記憶部１２０のハッシュ未計算ブロック数１２７をカウントアップする。
［ステップＳ１４４］ＬＢＡ管理部１３５は、ステップＳ１４２で作成されたキャッシュページのページ番号を、格納指示の通知元のＩＯ制御部１３１に通知する。
【０２０１】
［ステップＳ１４５］ＬＢＡ管理部１３５は、キャッシュページのページ番号と、書き込みデータの書き込み先として指定されたＬＢＡとを、テーブル更新指示とともに受け付ける。例えば、ＬＢＡ管理部１３５は、図２１のステップＳ１１４またはステップＳ１１７の処理に応じて、いずれかのサーバ１００のＩＯ制御部１３１からテーブル更新指示を受け付ける。
【０２０２】
［ステップＳ１４６］ＬＢＡ管理部１３５は、ＬＢＡ管理テーブル１２２から、ステップＳ１４５で受け付けたＬＢＡを含むエントリを特定する。ＬＢＡ管理部１３５は、特定されたエントリにおけるポインタの項目に、ステップＳ１４５で受け付けたページ番号を登録する。
【０２０３】
なお、ステップＳ１４６で登録されるページ番号は、ステップＳ１４４で通知されたページ番号と同じである。このため、ＬＢＡ管理部１３５は、ステップＳ１４４，Ｓ１４５の処理をスキップし、ステップＳ１４６ではＬＢＡとテーブル更新指示とを受け付けて、テーブル更新を行ってもよい。また、ＬＢＡ管理部１３５は、ステップＳ１４１の段階でＬＢＡを受け付けてもよい。
【０２０４】
以上の図２４の処理により、ハッシュ未計算ブロックのデータについて、ＬＢＡとキャッシュページとがマッピングされる。
図２５は、バックグラウンドでのブロック再配置処理手順の例を示すフローチャートである。図２５の処理は、書き込みコマンドの受信からその応答までの書き込み制御処理とは非同期に、その書き込み制御処理と並行して実行される。
【０２０５】
［ステップＳ１５１］ＬＢＡ管理部１３５は、キャッシュ１１０に格納されたハッシュ未計算ブロックのデータを１つ選択する。例えば、ＬＢＡ管理部１３５は、ＬＢＡ管理テーブル１２２のエントリのうち、ポインタの項目にキャッシュページのページ番号が登録されたエントリを特定する。ＬＢＡ管理部１３５は、特定されたエントリの中から、ページ番号の登録時刻が最も早いエントリ、あるいは、ホスト装置４００からのアクセス頻度が最も低いエントリを選択する。選択されたエントリに登録されたページ番号が示すキャッシュページに格納されたデータが、選択されるハッシュ未計算ブロックのデータとなる。
【０２０６】
［ステップＳ１５２］ＬＢＡ管理部１３５は、選択されたハッシュ未計算ブロックのデータを基にハッシュ値を計算する。
［ステップＳ１５３］ＬＢＡ管理部１３５は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、ＬＢＡ管理部１３５自身を含むサーバ１００が、算出されたハッシュ値の担当サーバであるかを判定する。ＬＢＡ管理部１３５は、担当サーバである場合、ステップＳ１５４の処理を実行し、担当サーバでない場合、ステップＳ１５５の処理を実行する。
【０２０７】
［ステップＳ１５４］ＬＢＡ管理部１３５は、ＬＢＡ管理部１３５自身を含むサーバ１００の重複除去制御部１３４に対して、ハッシュ未計算ブロックのデータとハッシュ値とを通知し、データの書き込みを指示する。
【０２０８】
［ステップＳ１５５］ＬＢＡ管理部１３５は、算出されたハッシュ値の担当サーバである他のサーバ１００の重複除去制御部１３４に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
【０２０９】
［ステップＳ１５６］ＬＢＡ管理部１３５は、ステップＳ１５４でのデータおよびハッシュ値の通知先のＬＢＡ管理部１３５、または、ステップＳ１５５でのデータおよびハッシュ値の転送先のＬＢＡ管理部１３５から、ハッシュ管理テーブル１２１のエントリのアドレスをテーブル更新とともに受け付ける。このエントリは、ステップＳ１５２で算出されたハッシュ値に対応するエントリであり、ステップＳ１５１で選択されたハッシュ未計算ブロックがハッシュ計算済みブロックとして登録された物理記憶領域の位置情報を保持する。
【０２１０】
［ステップＳ１５７］ＬＢＡ管理部１３５は、ＬＢＡ管理テーブル１２２のエントリのうち、ステップＳ１５１で選択されたハッシュ未計算ブロックのデータに対応するエントリを特定する。ＬＢＡ管理部１３５は、特定されたエントリにおけるポインタの項目に、ステップＳ１５６で受け付けられたエントリのアドレスを上書きして登録する。
【０２１１】
［ステップＳ１５８］ＬＢＡ管理部１３５は、記憶部１２０のハッシュ未計算ブロック数１２７をカウントダウンする。
以上の図２５の処理により、バックグラウンドにおいて、ハッシュ未計算ブロックのデータが、重複が除去された状態でいずれかのサーバ１００のキャッシュ１１０に再配置される。
【０２１２】
図２６は、デステージ処理手順の例を示すフローチャートである。図２６の処理は、図１６〜２４の書き込み制御処理や図２５のブロック再配置処理と並行して実行される。
［ステップＳ１６１］ＩＯ制御部１３１は、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータの中から、デステージ対象のデータを選択する。例えば、ＩＯ制御部１３１は、キャッシュ１１０の容量が残り少なくなった場合に、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータのうち最終アクセス日時が最も早いデータを、デステージ対象として選択する。この場合、デステージ対象のデータは、キャッシュ１１０から追い出されるデータとなる。また、例えば、ＩＯ制御部１３１は、キャッシュ１１０に格納されたハッシュ計算済みブロックのデータの中から、ストレージ２００内のデータと同期されていないダーティデータを特定してもよい。この場合、例えば、ＩＯ制御部１３１は、特定されたダーティデータのうち更新日時が最も早いデータを、デステージ対象として選択する。
【０２１３】
［ステップＳ１６２］ＩＯ制御部１３１は、選択されたデータをストレージ２００に格納する。選択されたデータが追い出しの対象の場合、ＩＯ制御部１３１は、データをキャッシュ１１０からストレージ２００に移動させる。選択されたデータが追い出しの対象でない場合、ＩＯ制御部１３１は、データをキャッシュ１１０からストレージ２００にコピーする。
【０２１４】
［ステップＳ１６３］ＩＯ制御部１３１は、ハッシュ管理テーブル１２１から、デステージ対象のデータに対応するエントリを特定する。例えば、ＩＯ制御部１３１は、選択されたデータのハッシュ値を計算し、ハッシュ管理テーブル１２１から、算出されたハッシュ値が登録されたエントリを特定する。ＩＯ制御部１３１は、特定されたエントリにおけるポインタの項目に、ステップＳ１６２でのデータの格納先を示す物理アドレス（ＰＢＡ）を登録する。
【０２１５】
［ステップＳ１６４］この処理は、選択されたデータが追い出しの対象であり、ステップＳ１６２でキャッシュ１１０から移動された場合のみ実行される。ＩＯ制御部１３１は、記憶部１２０のハッシュ計算済みブロック数１２８をカウントダウンする。
【０２１６】
なお、上記の各実施の形態に示した装置（例えば、情報処理装置１、サーバ１００ａ〜１００ｃ、ホスト装置４００ａ，４００ｂ）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２１７】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２１８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【０２１９】
１  情報処理装置
１ａ  記憶装置
１ｂ  特定部
１ｃ  決定部
２ａ，２ｂ  ホスト装置
３ａ，３ｂ，３ｃ  応答
【図１】
2018084864.tif 000003
【図２】
2018084864.tif 000004
【図３】
2018084864.tif 000005
【図４】
2018084864.tif 000006
【図５】
2018084864.tif 000007
【図６】
2018084864.tif 000008
【図７】
2018084864.tif 000009
【図８】
2018084864.tif 000010
【図９】
2018084864.tif 000011
【図１０】
2018084864.tif 000012
【図１１】
2018084864.tif 000013
【図１２】
2018084864.tif 000014
【図１３】
2018084864.tif 000015
【図１４】
2018084864.tif 000016
【図１５】
2018084864.tif 000017
【図１６】
2018084864.tif 000018
【図１７】
2018084864.tif 000019
【図１８】
2018084864.tif 000020
【図１９】
2018084864.tif 000021
【図２０】
2018084864.tif 000022
【図２１】
2018084864.tif 000023
【図２２】
2018084864.tif 000024
【図２３】
2018084864.tif 000025
【図２４】
2018084864.tif 000026
【図２５】
2018084864.tif 000027
【図２６】
2018084864.tif 000028