以下、本発明の実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。図1に示す情報処理装置1は、ホスト装置2a,2bに接続され、ホスト装置2a,2bからの書き込み要求に応じて記憶領域にデータを書き込む書き込み制御機能を有する。図1では例として、情報処理装置1は、記憶装置1aに対する書き込み制御機能を有するものとする。記憶装置1aは、図1の例のように情報処理装置1の内部に搭載されてもよいし、情報処理装置1の外部に接続されていてもよい。
また、情報処理装置1は、ポストプロセス方式(第1方式)とインライン方式(第2方式)のいずれかの重複除去処理を選択的に実行可能である。ポストプロセス方式の重複除去処理は、書き込みデータを記憶装置1aに書き込んで書き込み要求元に応答を送信し、事後的に記憶装置1aにおける書き込みデータの重複を除去する処理を含む。インライン方式の重複除去処理は、書き込みが要求された書き込みデータを重複を除去して記憶装置1aに書き込み、書き込み要求元に応答を送信する処理を含む。
上記2つの方式のうち、ポストプロセス方式は、重複除去処理を事後的に実行するため、インライン方式よりも書き込み要求に対する応答時間を短縮できる。一方、ポストプロセス方式は、事後的な重複除去処理の負荷によって、書き込み要求に対する応答処理の性能を低下させる可能性があるという特徴がある。
情報処理装置1は、特定部1bと決定部1cとを有する。特定部1bと決定部1cの処理は、例えば、プロセッサが所定のプログラムを実行することで実現される。なお、プロセッサには、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。
特定部1bは、同一の送信元から所定時間以内の間隔で受信した複数の書き込み要求を特定する。図1では例として、情報処理装置1が書き込み要求W1〜W7を順に受信した場合を示している。そして、特定部1bは、例えばホスト装置2aを送信元とする書き込み要求W3〜W5を、上記条件に合致する複数の書き込み要求として特定したとする。
なお、特定部1bによる複数の書き込み要求の特定条件には、例えば、書き込み先の論理記憶領域やアドレス範囲が同一といった他の条件が含まれていてもよい。
決定部1cは、特定された書き込み要求W3〜W5のうち、受信時刻の遅い方から設定数S分の第1の書き込み要求について、ポストプロセス方式の重複除去処理を用いて書き込み処理を行うことを決定する。また、決定部1cは、書き込み要求W3〜W5のうちの残りの第2の書き込み要求について、インライン方式の重複除去処理を用いて書き込み処理を行うことを決定する。
設定数Sは、間隔X1と、応答時間X2,X3とに基づいて設定される。間隔X1は、送信元から連続して発行される書き込み要求の最小間隔を示す。応答時間X2は、ポストプロセス方式の重複除去処理における書き込み要求の受信から応答の送信までの時間を示す。応答時間X3は、インライン方式の重複除去処理における書き込み要求の受信から応答の送信までの時間を示す。
これらのパラメータを用いることで、設定数Sは、処理負荷を高める原因となるポストプロセス方式の使用数を最小限にしながら、特定された書き込み要求W3〜W5に対する応答時間全体が短縮されるように設定される。その結果、決定部1cは、特定された書き込み要求W3〜W5に対する応答時間全体を、低い処理負荷によって短縮できる。
また、書き込み要求W3〜W5に対する応答時間全体が短縮されることで、送信元のホスト装置2aは、これらの応答を受信した後に実行すべき処理を、早い時間に開始できる。したがって、ホスト装置2aにおける処理効率を向上させることができる。
図1の例では、設定数Sは「2」となっている。この場合、決定部1cは、書き込み要求W4,W5について、ポストプロセス方式の重複除去処理を用いて書き込み処理を行い、書き込み要求W3について、インライン方式の重複除去処理を用いて書き込み処理を行うことを決定する。
書き込み要求W3〜W5のうち、最後尾の書き込み要求W5に対する応答3cの送信時刻は、書き込み要求W5にポストプロセス方式が適用されることによって、インライン方式が適用された場合より早くなる。また、隣接する書き込み要求W4に対する応答3bの送信時刻についても同様に、書き込み要求W4にポストプロセス方式が適用されることによって、インライン方式が適用された場合より早くなる。
一方、書き込み要求W3に対する応答3aの送信時刻は、書き込み要求W3にインライン方式が適用されても、最後尾の書き込み要求W5に対する応答3cの送信時刻より遅くはならない。このことは、仮に書き込み要求W3にポストプロセス方式を適用したとしても、書き込み要求W3〜W5に対する応答時間全体を短縮する効果が生じないことを示す。したがって、書き込み要求W3にインライン方式を適用することで、書き込み要求W3〜W5に対する応答時間全体の短縮効果を損ねずに、情報処理装置1の処理負荷を抑制できる。
すなわち、設定数Sは、書き込み要求W3〜W5のうち、インライン方式が適用される最後尾の書き込み要求W3に対する応答3aの送信時刻が、ポストプロセス方式が適用される最後尾の書き込み要求W5に対する応答3cの送信時刻(TMとする)までの範囲内で、送信時刻TMに最も近づくように設定される。このような設定数Sは、上記の間隔X1および応答時間X2,X3の関係から求められる。
なお、設定数Sは、間隔X1と、応答時間X2,X3とに基づいて、決定部1cによる決定のたびに計算によって求められてもよい。また、間隔X1および応答時間X2,X3は、対応する装置の性能としてあらかじめ知ることができる値であるので、設定数Sは、あらかじめ計算されて情報処理装置1に保持され、決定部1cによって参照されてもよい。
[第2の実施の形態]
図2は、第2の実施の形態のストレージシステムを示す図である。図2に示すストレージシステムは、サーバ100a〜100c、ストレージ200a〜200c、スイッチ300およびホスト装置400a,400bを含む。
サーバ100a〜100cは、スイッチ300に接続され、スイッチ300を介して互いに通信可能になっている。また、サーバ100aにはストレージ200aが接続され、サーバ100bにはストレージ200bが接続され、サーバ100cにはストレージ200cが接続されている。サーバ100aは、ストレージ200aに対するアクセスを制御するストレージ制御装置である。同様に、サーバ100bは、ストレージ200bに対するアクセスを制御するストレージ制御装置であり、サーバ100cは、ストレージ200cに対するアクセスを制御するストレージ制御装置である。
ストレージ200a〜200cのそれぞれには、1台または複数台の不揮発性記憶装置が搭載されている。本実施の形態では、ストレージ200a〜200cのそれぞれには、複数台のSSD(Solid State Drive)が搭載されているものとする。
なお、サーバ100aとストレージ200a、サーバ100bとストレージ200b、サーバ100cとストレージ200cは、それぞれストレージノードN0,N1,N2に属している。
ホスト装置400a,400bはそれぞれ、スイッチ300に接続され、スイッチ300を介してサーバ100a〜100cの少なくとも1台との間で通信可能になっている。ホスト装置400a,400bはそれぞれ、サーバ100a〜100cによって提供される論理ボリュームに対するアクセス要求を、サーバ100a〜100cの少なくとも1台に送信する。これにより、ホスト装置400a,400bは、論理ボリュームにアクセス可能になっている。
ホスト装置400a,400bとサーバ100a〜100cとの関係は、例えば、次のように決められてもよい。ホスト装置400aは、サーバ100a〜100cによって提供されるある論理ボリュームに対するアクセス要求を、サーバ100a〜100cのうちあらかじめ決められた1台に送信する。また、ホスト装置400bは、サーバ100a〜100cによって提供される別の論理ボリュームに対するアクセス要求を、サーバ100a〜100cのうちあらかじめ決められた別の1台に送信する。なお、これらの論理ボリュームは、ストレージ200a〜200cの物理領域によって実現される。
スイッチ300は、サーバ100a〜100cの間や、ホスト装置400a,400bとサーバ100a〜100cの間でデータを中継する。なお、例えば、サーバ100a〜100cの間や、ホスト装置400a,400bとサーバ100a〜100cの間は、InfiniBand(登録商標)で接続される。また、サーバ100a〜100cの間の通信と、ホスト装置400a,400bとサーバ100a〜100cとの間の通信は、それぞれ分離された個別のネットワークを介して行われてもよい。
以上の図2では、3台のサーバ100a〜100cが配置された構成としたが、ストレージシステムには2台以上の任意の数のサーバを配置できる。また、図2では、2台のホスト装置400a,400bが配置された構成としたが、ストレージシステムには1台以上の任意の数のホスト装置を配置できる。さらに、図2では、サーバ100a〜100cにそれぞれストレージ200a〜200cが接続された構成としたが、サーバ100a〜100cに対して共通のストレージが接続されてもよい。
なお、これ以後、サーバ100a〜100cを特に区別せずに記載する場合、「サーバ100」と記載する場合がある。サーバ100a〜100cが有するキャッシュ110a〜110cを特に区別せずに記載する場合、「サーバ100のキャッシュ110」と記載する場合がある。同様に、ストレージ200a〜200cを特に区別せずに示す場合、「ストレージ200」と表記する場合があり、ホスト装置400a,400bを特に区別せずに示す場合、「ホスト装置400」と表記する場合がある。
図3は、サーバのハードウェア構成例を示す図である。サーバ100は、例えば、図3に示すようなコンピュータとして実現される。サーバ100は、プロセッサ101、RAM(Random Access Memory)102、SSD103、通信インタフェース104およびストレージインタフェース105を有する。
プロセッサ101は、サーバ100の処理を統括的に制御する。プロセッサ101は、例えば、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)である。また、プロセッサ101は、CPU、DSP、ASIC、FPGAなどの2以上の要素の組合せであってもよい。
RAM102は、サーバ100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に記憶される。また、RAM102には、プロセッサ101による処理に用いる各種データが一時的に記憶される。
SSD103は、サーバ100の補助記憶装置として使用される。SSD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、サーバ100は、補助記憶装置として、SSD103の代わりにHDD(Hard Disk Drive)を備えていてもよい。
通信インタフェース104は、スイッチ300を介して他の装置と通信するためのインタフェース回路である。ストレージインタフェース105は、ストレージ200に搭載された記憶装置と通信するためのインタフェース回路である。なお、ストレージインタフェース105とストレージ200内の記憶装置とは、例えば、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)、FC(Fibre Channel)などの通信プロトコルにしたがって通信する。
以上の構成によってサーバ100、すなわちサーバ100a〜100cのそれぞれの処理機能が実現される。なお、ホスト装置400a,400bについても、図3に示すようなコンピュータとして実現可能である。
次に、サーバ100a〜100cにおけるストレージ制御方法について説明する。
図4は、各サーバが備えるキャッシュおよび主なテーブル情報について示す図である。なお、ここでは説明を簡単にするために、サーバ100a〜100cは、ストレージ200a〜200cの物理領域によって実現される1つの論理ボリュームを、ホスト装置400に提供するものとする。
サーバ100aのRAM102には、キャッシュ110aの領域が確保される。同様に、サーバ100bのRAM102には、キャッシュ110bの領域が確保され、サーバ100cのRAM102には、キャッシュ110cの領域が確保される。キャッシュ110a〜110cには、論理ボリュームに対応するストレージ200a〜200cの記憶領域からのデータ読み出しの応答速度を高めるために、論理ボリュームのデータが一時的に記憶される。
また、本実施の形態に係るストレージシステムでは、論理ボリュームに含まれる同じ内容のデータが記憶領域に重複して格納されないようにする「重複除去」が行われる。重複除去では、論理ボリュームのブロック単位で、書き込みデータのハッシュ値(フィンガプリント)が計算され、ハッシュ値が同一となるデータが重複して格納されないように制御される。また、後に詳述するが、重複除去は、ストレージ200a〜200cへの格納段階でなく、キャッシュ110a〜110cへの格納段階で行われる。
さらに、ストレージシステムでは、ハッシュ値をキーとしてデータがストレージノードN0〜N2の間で分散管理される。ここで、16進数で表記したハッシュ値における最上位ケタの値を「ハッシュ先頭値」と記載すると、図4の例ではハッシュ先頭値に基づいて次のような方法でデータが分散管理される。
ストレージノードN0は、ハッシュ先頭値が0〜4となるデータの管理を担当する。ストレージノードN0に含まれるストレージ200aには、ハッシュ値の先頭値が0〜4となるデータだけが格納され、ストレージノードN0に含まれるサーバ100aは、ハッシュ先頭値0〜4のハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル121aを保持する。
ストレージノードN1は、ハッシュ先頭値が5〜9となるデータの管理を担当する。ストレージノードN1に含まれるストレージ200bには、ハッシュ値の先頭値が5〜9となるデータだけが格納され、ストレージノードN1に含まれるサーバ100bは、ハッシュ先頭値5〜9のハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル121bを保持する。
ストレージノードN2は、ハッシュ先頭値がA〜Fとなるデータの管理を担当する。ストレージノードN2に含まれるストレージ200cには、ハッシュ値の先頭値がA〜Fとなるデータだけが格納され、ストレージノードN2に含まれるサーバ100cは、ハッシュ先頭値A〜Fのハッシュ値と対応するデータの記憶位置とが対応付けられたハッシュ管理テーブル121cを保持する。
このような分散管理により、論理ボリューム内のデータはストレージ200a〜200cにほぼ均等に分散されて格納される。また、論理ボリュームのブロックごとに書き込み頻度の偏りがあったとしても、それに関係なく、書き込みアクセスがストレージ200a〜200cでほぼ均等に分散される。そのため、ストレージ200a〜200cのそれぞれにおける書き込み回数の最大値が減少する。さらに、重複除去が行われることで、同じ内容のデータがストレージ200a〜200cに書き込まれなくなるので、ストレージ200a〜200cのそれぞれにおける書き込み回数がさらに減少する。
ここで、SSDは、書き込み回数が増加するにつれて性能が劣化するという特徴がある。上記のような分散管理が行われることで、ストレージ200a〜200c内の記憶装置としてSSDが使用された場合に、SSDの性能劣化を抑制し、それらの寿命を延ばすことができる。
一方、上記のようなハッシュ値に基づく分散管理とは別に、論理ボリューム内の各ブロックと物理記憶領域とのマッピングは次のように管理される。サーバ100a〜100cのそれぞれには、論理ボリュームの領域の中から、物理記憶領域とのマッピングの管理を担当する領域が割り当てられる。なお、論理ボリュームの各ブロックには、0000〜zzzzのLBA(Logical Block Address)が割り当てられているとする。
図4の例では、サーバ100aは、LBA0000〜LBAxxxxの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのLBA管理テーブル122aを保持する。サーバ100bは、LBA(xxxx+1)〜LBAyyyyの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのLBA管理テーブル122bを保持する(ただし、xxxx<yyyy)。サーバ100cは、LBA(yyyy+1)〜LBAzzzzの各ブロックと物理記憶領域とのマッピングを担当し、そのマッピングのためのLBA管理テーブル122cを保持する(ただし、yyyy<zzzz)。
なお、例えば、次のような方法で各ブロックと物理記憶領域とのマッピングが管理されてもよい。例えば、論理ボリュームが一定サイズのストリップに分割され(ストライピング)、先頭ストリップから順にサーバ100a,100b,100c,100a,100b,・・・のように割り当てられる。そして、サーバ100a〜100cは、それぞれに割り当てられたストリップ内のブロックと物理記憶領域とのマッピングを管理する。
次に、ハッシュ管理テーブル121a〜121cおよびLBA管理テーブル122a〜122cのデータ構成例について説明する。なお、以下の説明では、ハッシュ管理テーブル121a〜121cを特に区別せずに示す場合、「ハッシュ管理テーブル121」と表記する場合がある。また、LBA管理テーブル122a〜122cを特に区別せずに示す場合、「LBA管理テーブル122」と表記する場合がある。
図5は、ハッシュ管理テーブルのデータ構成例を示す図である。ハッシュ管理テーブル121は、ハッシュ値、ポインタおよびカウント値の各項目を有する。
ハッシュ値の項目には、ブロック単位のデータに基づいて計算されたハッシュ値が登録される。ポインタの項目には、対応するデータの記憶位置を示すポインタが登録される。対応するデータがキャッシュに存在する場合、ポインタの項目にはキャッシュページのページ番号が登録され、対応するデータがストレージに存在する場合、ポインタの項目にはストレージ上のアドレス(PBA:Physical Block Address)が登録される。なお、図5では、「CP:」はキャッシュページのページ番号が登録されていることを示し、「PBA:」はPBAが登録されていることを示す。カウント値の項目には、ポインタが示す記憶位置がいくつのLBAに対応付けられているか、換言すると、ハッシュ値に対応するデータがいくつ重複しているかを示す値が登録される。
図6は、LBA管理テーブルのデータ構成例を示す図である。LBA管理テーブル122は、LBAおよびポインタの各項目を有する。
LBAの項目には、論理ボリュームのブロックを示すLBAが登録される。ポインタの項目には、対応するデータのハッシュ値が計算済みの場合、ハッシュ管理テーブル121のエントリを示すアドレスが登録され、未計算の場合、キャッシュページのページ番号が登録される。なお、図6では、「EN:」はエントリのアドレスが登録されていることを示し、「CP:」はキャッシュページのページ番号が登録されていることを示す。
次に、図7〜図10を用いて、ストレージシステムにおける基本的な書き込み制御処理について説明する。前述のように、ストレージシステムでは、ストレージ200a〜200cへの格納段階でなく、キャッシュ110a〜110cへの格納段階で重複除去が行われる。また、重複除去の方法としては、「インライン方式」と「ポストプロセス方式」とが選択的に用いられる。インライン方式は、ホスト装置400からの書き込み要求に対して応答する前に重複除去を完了させる方式である。一方、ポストプロセス方式は、ホスト装置400からの書き込み要求に対して応答した後にバックグラウンドで重複除去が行われる方式である。以下、インライン方式の重複除去を用いた書き込み制御モードを「インラインモード」と記載し、ポストプロセス方式の重複除去を用いた書き込みモードを「ポストプロセスモード」と記載する。
図7は、インラインモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図7では例として、ホスト装置400からのデータの書き込み要求をサーバ100aが受信したとする。
[ステップS11]サーバ100aは、論理ボリュームのLBAを書き込み先として指定した書き込み要求およびデータを受信する。
[ステップS12]サーバ100aは、受信したデータのハッシュ値を計算する。
[ステップS13]サーバ100aは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。なお、以下の説明では、あるハッシュ値に対応するデータの管理を担当するサーバを、「ハッシュ値の担当サーバ」と略称する場合がある。図7の例では、算出されたハッシュ値の担当サーバとしてサーバ100bが特定されたとする。この場合、サーバ100aは、データとハッシュ値をサーバ100bに転送し、データの書き込みを指示する。
[ステップS14]サーバ100bは、受信したハッシュ値がハッシュ管理テーブル121bに登録されているかを判定する。
受信したハッシュ値がハッシュ管理テーブル121bに登録されていない場合、サーバ100bは、キャッシュ110bに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。また、サーバ100bは、ハッシュ管理テーブル121bに新たなエントリを作成し、そのエントリに、受信したハッシュ値と、作成したキャッシュページのページ番号と、カウント値「1」とを登録する。そして、サーバ100bは、作成したエントリのアドレスをサーバ100aに送信する。
一方、受信したハッシュ値がハッシュ管理テーブル121bに登録されている場合、書き込みが要求されたデータはキャッシュ110bまたはストレージ200bにすでに格納されている。この場合、サーバ100bは、そのハッシュ値が登録されていたエントリのカウント値を1だけカウントアップし、そのエントリのアドレスをサーバ100aに送信する。なお、受信したデータは破棄される。
[ステップS15]サーバ100aは、書き込み先として指定されたLBAに基づいて、このLBAと物理記憶領域とのマッピングを担当するサーバを特定する。なお、以下の説明では、あるLBAと物理記憶領域とのマッピングを担当するサーバを、「LBAの担当サーバ」と略称する場合がある。図7の例では、指定されたLBAの担当サーバとしてサーバ100cが特定されたとする。この場合、サーバ100aは、ステップS14でサーバ100bから送信されたエントリのアドレスと、書き込み先として指定されたLBAとをサーバ100cに送信して、LBA管理テーブル122cの更新を指示する。
[ステップS16]サーバ100cは、LBA管理テーブル122cのエントリのうち、受信したLBAが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。これにより、LBAが示すブロックと物理記憶領域とが対応付けられる。
[ステップS17]サーバ100aは、サーバ100cからテーブルの更新完了通知を受信すると、ホスト装置400に対して書き込み完了を示す応答メッセージを送信する。
以上のように、インラインモードでは、ホスト装置400に対して応答する前に、書き込みが要求されたデータが重複除去された状態でサーバ100a〜100cのいずれかのキャッシュに格納される。
図8は、インラインモードでのテーブル更新処理例を示す図である。この図8では、図7の処理において、LBA0001に対するデータブロックDB1の書き込みが要求されたものとする。また、データブロックDB1に基づいてハッシュ値「0x92DF59」が算出されたとする(なお、「0x」は16進数で表記したことを示す)。
この場合、ステップS14の処理により、サーバ100bのキャッシュ110bにデータブロックDB1が格納される。また、サーバ100bが保持するハッシュ管理テーブル121bのエントリ121b1には、ハッシュ値「0x92DF59」に対応するポインタの項目に、データブロックDB1が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックDB1と同じ内容のデータブロックがすでにキャッシュ110bにすでに登録されていた場合、ハッシュ管理テーブル121bには上記情報を含むエントリ121b1がすでに登録されている。
また、ステップS16の処理により、サーバ100cが保持するLBA管理テーブル122cにおいては、LBA0001に対応するポインタの項目に、ハッシュ管理テーブル121bのエントリ121b1を指し示す情報が登録される。
図9は、ポストプロセスモードの書き込み制御処理の基本的な手順を示すシーケンス図である。なお、図9では例として、図7と同様の初期状態から、図7と同様に、ホスト装置400からのデータの書き込み要求をサーバ100aが受信したとする。
[ステップS21]サーバ100aは、論理ボリュームのLBAを書き込み先として指定した書き込み要求およびデータを受信する。
[ステップS22]サーバ100aは、書き込み先として指定されたLBAに基づいて、書き込み先ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図9の例では、サーバ100cが担当サーバとして特定されたとする。この場合、サーバ100aは、書き込みが要求されたデータをサーバ100cに送信して、キャッシュ110cへの格納を指示する。
[ステップS23]サーバ100cは、キャッシュ110cに新たなキャッシュページを作成し、そのキャッシュページに受信したデータを格納する。このデータは、ハッシュ値の計算が行われていない「ハッシュ未計算ブロック」のデータとしてキャッシュ110cに格納される。また、サーバ100cは、作成したキャッシュページのページ番号をサーバ100aに送信する。
[ステップS24]サーバ100aは、受信したページ番号と、書き込み先として指定されたLBAとをサーバ100cに送信して、LBA管理テーブル122cの更新を指示する。
[ステップS25]サーバ100cは、LBA管理テーブル122cのエントリのうち、受信したLBAが登録されたエントリにおいて、受信したページ番号をポインタの項目に登録する。
なお、書き込み先として指定されたLBAは、ステップS22でデータとともに転送されてもよい。この場合、ステップS24でのサーバ100aとサーバ100cとの通信は不要になる。
[ステップS26]サーバ100aは、サーバ100cからテーブルの更新完了通知を受信すると、ホスト装置400に対して書き込み完了を示す応答メッセージを送信する。
[ステップS27]サーバ100cは、ステップS26の処理後の非同期タイミングで、ステップS23でキャッシュ110cに格納したデータのハッシュ値を計算する。
[ステップS28]サーバ100cは、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値に対応するデータの管理を担当するサーバを特定する。図9の例では、サーバ100bが担当サーバとして特定されたとする。この場合、サーバ100cは、データとハッシュ値をサーバ100bに転送し、データの書き込みを指示する。このとき、データが格納されていたキャッシュページは解放される。
[ステップS29]サーバ100bは、受信したハッシュ値がハッシュ管理テーブル121bに登録されているかを判定し、その判定結果に応じたデータ格納およびテーブル更新処理を実行する。この処理は、図7のステップS14と同様である。
[ステップS30]サーバ100bは、受信したハッシュ値が登録されている、ハッシュ管理テーブル121bのエントリのアドレスをサーバ100cに送信して、LBA管理テーブル122cの更新を指示する。
[ステップS31]サーバ100cは、LBA管理テーブル122cのエントリのうち、ステップS27でハッシュ値を計算したデータのLBAが登録されたエントリにおいて、受信したエントリのアドレスをポインタの項目に登録する。このポインタの項目では、登録されていたキャッシュページのページ番号が、受信したエントリのアドレスによって更新される。
以上のように、ポストプロセスモードでは、ホスト装置400から書き込みが要求されたデータは、重複の有無を判定せずに、その書き込み先のLBAの管理を担当するサーバ100cのキャッシュ110cに一旦格納される。そして、格納が完了し、格納に伴うLBA管理テーブル122cの更新が完了した時点で、ホスト装置400に応答メッセージが送信される。このように、応答までの間に重複除去処理が行われないことで、インラインモードと比較して、ホスト装置400に対する応答時間(レイテンシ)を短縮できる。
図10は、ポストプロセスモードでのテーブル更新処理例を示す図である。この図10では、図9の処理において、LBA0001に対するデータブロックDB1の書き込みが要求されたものとする。また、データブロックDB1に基づいてハッシュ値「0x92DF59」が算出されたとする。
この場合、ホスト装置400への応答前の段階では、ステップS23で、サーバ100cのキャッシュ110cにデータブロックDB1が格納される。また、ステップS25で、サーバ100cが保持するLBA管理テーブル122cに、LBA0001に対応付けてキャッシュ110cにおけるデータ格納位置を指し示す情報が登録される。
また、ホスト装置400への応答後のステップS28で、データブロックDB1がサーバ100bに転送され、これに応じて重複除去処理が行われる。ステップS29では、サーバ100bのキャッシュ110bにデータブロックDB1が格納される。また、サーバ100bが保持するハッシュ管理テーブル121bのエントリ121b1には、ハッシュ値「0x92DF59」に対応するポインタの項目に、データブロックDB1が格納されたキャッシュページを指し示す情報が登録される。なお、データブロックDB1と同じ内容のデータブロックがすでにキャッシュ110bに登録されていた場合、ハッシュ管理テーブル121bには上記情報を含むエントリ121b1がすでに登録されている。
そして、ステップS31では、サーバ100cが保持するLBA管理テーブル122cにおいて、LBA0001に対応するポインタの項目に、ハッシュ管理テーブル121bのエントリ121b1を指し示す情報が登録される。
図11は、ストレージシステムにおける読み出し制御処理の手順を示すシーケンス図である。この図11では、ホスト装置400からサーバ100aに対して、LBA0001からのデータ読み出しが要求されたものとする。
[ステップS41]サーバ100aは、LBA0001からのデータの読み出し要求をホスト装置400から受信する。
[ステップS42]サーバ100aは、読み出し元として指定されたLBAに基づいて、読み出し元ブロックと物理記憶領域との対応関係の管理を担当するサーバを特定する。図11の例では、サーバ100cが担当サーバとして特定される。この場合、サーバ100aは、LBAをサーバ100cに送信して、LBA管理テーブル122cの検索を指示する。
[ステップS43]サーバ100cは、LBA管理テーブル122cから、受信したLBAを含むエントリを特定し、特定されたエントリにおけるポインタの項目から情報を取得する。ここでは、ポインタの項目から、サーバ100bのハッシュ管理テーブル121bのエントリのアドレスが取得されたものとする。
[ステップS44]サーバ100cは、取得されたエントリのアドレスをサーバ100bに送信して、対応する記憶領域からサーバ100aへのデータ読み出しを指示する。
[ステップS45]サーバ100bは、ハッシュ管理テーブル121bにおける受信したアドレスが示すエントリを参照し、ポインタの項目から情報を読み出す。ここでは、キャッシュページのアドレスが読み出されたとする。サーバ100bは、読み出されたアドレスが示すキャッシュ110bのキャッシュページからデータを読み出し、読み出したデータをサーバ100aに送信する。
[ステップS46]サーバ100aは、受信したデータをホスト装置400に送信する。
以上のように、ハッシュ管理テーブル121およびLBA管理テーブル122に基づいて、読み出しが要求されたデータがサーバ100aに送信される。なお、例えば、ステップS43において、LBA管理テーブル122cのポインタの項目から、サーバ100cのキャッシュ110cにおけるキャッシュページのページ番号が取得される場合もある。これは、読み出しが要求されたデータについてハッシュ値の計算が未実行の場合である。この場合、サーバ100cは、キャッシュ110cの該当するキャッシュページからデータを読み出し、サーバ100aに送信する。サーバ100aは、受信したデータをホスト装置400に送信する。
ところで、図9で示したように、ポストプロセスモードは、重複除去処理を事後的に実行するため、インラインモードよりも書き込み要求に対する応答時間を短縮できる。しかし、ポストプロセスモードには、事後的な処理の負荷によって、単位時間に書き込み要求を処理できる回数(IOPS:Input Output Per Second)が低下する場合があるという問題がある。
具体的には、ポストプロセスモードでは、ホスト装置400に応答した後に、ハッシュ値計算を含む重複除去のための処理がバックグラウンドで実行される。このため、各サーバでのバックグラウンドでの処理負荷が、ホスト装置400に対するIO応答性能を低下させる要因になり得る。
これに加えて、バックグラウンドでの処理過程では、図9の例のように、データをキャッシュに一時的に保持するサーバと、ハッシュ値から特定される、データの管理を担当するサーバとが異なる場合、サーバ間での通信が発生する。この通信では、テーブル更新指示のような命令やその応答だけでなく、実体的な書き込みデータの転送も行われる(図9のステップS28参照)。
図7や図9の例のように、インラインモードでもポストプロセスモードでも、ホスト装置400から書き込み要求を受信してから応答するまでの間にサーバ間の通信が発生し得る。また、図11の例のように、ホスト装置400から読み出し要求を受信した場合にも、ホスト装置400に応答するまでの間にサーバ間の通信が発生し得る。このため、上記のようなバックグラウンドの処理過程での通信によってサーバ間の通信トラフィックが混雑すると、それがホスト装置400に対するIO応答性能を低下させる要因になり得る。
例えば、サーバ間の通信で単位時間に伝送可能なメッセージ数には上限がある。このため、サーバ間の通信回数が増大すると、ホスト装置400からのIO要求を単位時間に処理できる数(すなわち、ホスト装置400から見たサーバ100のIOPS)が低下してしまう。
そこで、本実施の形態のサーバ100は、インラインモードの書き込み制御処理とポストプロセスモードの書き込み制御処理とを、選択的に実行する。その際、ポストプロセスモードの適用回数を必要最小限に抑えて、処理負荷や通信負荷の増大を抑制し、IOPSの低下を抑制する。
具体的には、サーバ100は、同一送信元から同一論理ボリューム宛てのほぼ同一数の書き込みコマンドを連続して受信した場合に、これらを「連続コマンド群」として特定する。サーバ100は、連続コマンド群がほぼ同一間隔が発行されるような書き込みパターンを検出すると、連続コマンド群を単位として、どの書き込みコマンドをインラインモードで処理し、どの書き込みコマンドをポストプロセスモードで処理するかを決定する。例えば、ホスト装置400でトランザクション処理を伴うアプリケーションが稼働している場合に、このような書き込みパターンが発生し得る。
図12は、連続コマンド群に対する応答について示す図である。この図12には、連続コマンド群に対する応答例1〜4を示しており、これらのうち応答例4が本実施の形態での応答を示し、応答例1〜3は本実施の形態と比較するための比較例を示す。
図12の例では、あるホスト装置400が、6つの書き込みコマンドを連続して送信し、これらのすべてに対応する応答を受信した後に、次の6つの書き込みコマンドを連続して送信する、という処理を実行するものとする。例として、これらの書き込みコマンドの書き込み先は、同一の論理ボリュームであるものとする。サーバ100は、このような連続する6つの書き込みコマンドを連続コマンド群として特定し、連続コマンド群をほぼ一定間隔で受信した場合に、特定の書き込みパターンが発生したことを検出する。図12では、検出された書き込みパターンに含まれる連続コマンド群51,52が例示されている。
なお、書き込みパターンが検出されるケースは、図12の例のように、ホスト装置400が連続コマンド群に対応する応答コマンドを全て受信した後、すぐに次の連続コマンド群を発行するケースに限定されるものではない。例えば、ホスト装置400が連続コマンド群に対応する応答コマンドを全て受信した後、内部的な所定の処理を実行し、その実行後に次の連続コマンド群を発行するケースもある。
応答例1は、全ての書き込みコマンドがインラインモードで処理された場合を示している。応答例1では、ホスト装置400は、連続コマンド群51の最後の書き込みコマンド66に対応する応答コマンド76を受信すると、次の連続コマンド群52の送信を開始する。なお、インラインモードでは、書き込みコマンドの受信から応答コマンドの送信まで、応答時間t1かかるものとする。
前述のように、インラインモードでは、書き込み要求の受信から応答までの応答時間が長い。このため、応答例1では、ホスト装置400が次の連続コマンド群52を発行するまでの時間が長くなってしまう。すなわち、連続コマンド群の発行間隔が長くなる。したがって、ホスト装置400でトランザクション処理を伴うアプリケーションプログラムが実行されている場合、このプログラムの実行時間が長くなり、ホスト装置400の処理効率が悪化する。なお、以下の説明では、このようなホスト装置400の処理効率の悪化を、「ホスト装置400のスループットが低下する」と表現する。
応答例2〜4は、応答時間の短縮を目的として、連続コマンド群に含まれる一部の書き込みコマンドをポストプロセスモードで処理した場合を示す。まず、応答例2は、連続コマンド群51に含まれる書き込みコマンドのうち、中間部に含まれる書き込みコマンド63,64をポストプロセスモードで処理した場合を示している。
ポストプロセスモードでの書き込みコマンドの受信から応答コマンドの送信までの応答時間t2は、インラインモードでの応答時間t1より短い。しかし、応答例2のように、中間部の書き込みコマンド63,64に対する応答時間を短縮したとしても、最後の書き込みコマンド66に対する応答コマンド76の送信タイミングは応答例1と変わらない。このため、中間部の書き込みコマンドのみポストプロセスモードで処理することは、連続コマンド群全体の応答時間を短縮することに貢献しない。すなわち、連続コマンド群全体の応答時間を短縮するためには、連続コマンド群に含まれる書き込みコマンドのうち、後ろ側の書き込みコマンドをポストプロセスモードで処理する必要がある。
応答例3は、連続コマンド群51に含まれる書き込みコマンドのうち、後ろ側の3つの書き込みコマンド64〜66をポストプロセスモードで処理した場合を示す。この場合、書き込みコマンド64〜66にそれぞれ対応する応答コマンド74〜76の送信時刻が早くなる。その結果、連続コマンド群51に対応する全ての応答コマンドをホスト装置400が受信するまでの時間は、応答例1,2の場合と比較して時間t3だけ短縮される。
しかしながら、仮に書き込みコマンド64をインラインモードで処理した場合、書き込みコマンド64に対応する応答コマンドの送信時刻T1は、最後の書き込みコマンド66に対応する応答コマンドの送信時刻T2より早くならない。このため、書き込みコマンド64をポストプロセスモードで処理することは、連続コマンド群全体の応答時間の短縮に貢献しておらず、処理負荷が高まる分だけ無駄であると言える。
そこで、本実施の形態では、サーバ100は、応答例4のように、書き込みコマンド65,66のみポストプロセスモードで処理し、その他の書き込みコマンドをインラインモードで処理する。これにより、連続コマンド群全体の応答時間の短縮に貢献する必要最小限の書き込みコマンドだけが、ポストプロセスモードで処理される。したがって、サーバ100の処理負荷の増大を抑制しつつ、連続コマンド群全体の応答時間を短縮し、ホスト装置400のスループットを向上させることができる。
ここで、ポストプロセスモードを適用する書き込みコマンドの数を、適用数Nとする。また、連続コマンド群のうち、インラインモードが適用される書き込みコマンド群を「前半コマンド群」、ポストプロセスモードが提供される書き込みコマンド群を「後半コマンド群」と記載する。応答例4では、サーバ100は、前半コマンド群に含まれる最後尾の書き込みコマンド64に対応する応答コマンド74の送信時刻T3が、後半コマンド群に含まれる最後尾の書き込みコマンド66に対応する応答コマンド76の送信時刻T4までの範囲で、送信時刻T4に最も近づくように、適用数Nを設定する。
具体的には、適用数Nは、ホスト装置400から連続して書き込みコマンドを送信可能な最小の時間間隔trと、インラインモードでの応答時間t1と、ポストプロセスモードでの応答時間t2とを用いて、次の式(1)にしたがって算出される。ただし、小数点以下の値は切り捨てられる。
N=(t1−t2)/tr ・・・(1)
応答例4では、N=2と算出される。
なお、時間間隔trは、ホスト装置400の性能仕様として与えられ得る。また、応答時間t1,t2は、サーバ100の性能仕様として与えられ得る。このため、時間間隔trおよび応答時間t1,t2は、サーバ100の記憶装置にあらかじめ記憶され、適用数Nの計算時に読み出されてもよい。また、与えられた時間間隔trおよび応答時間t1,t2を用いて適用数Nがあらかじめ計算され、サーバ100の記憶装置に記憶されていてもよい。この場合、サーバ100は、適用数Nを取得するために計算を行う必要はなく、記憶装置から読み出せばよくなる。また、時間間隔trおよび応答時間t1,t2の少なくとも1つは、サーバ100が蓄積する書き込みコマンドの受信履歴や応答コマンドの送信履歴に基づいて、サーバ100が算出し、記憶装置に格納してもよい。
次に、サーバ100の処理の詳細について説明する。
図13は、サーバが備える処理機能の構成例を示すブロック図である。サーバ100は、記憶部120、IO制御部131、検出部132、モード決定部133、重複除去制御部134およびLBA管理部135を有する。
記憶部120は、RAM102またはSSD103など、サーバ100が備える記憶装置の記憶領域として実現される。記憶部120には、前述のハッシュ管理テーブル121およびLBA管理テーブル122が格納される。さらに、記憶部120には、履歴テーブル123、時間間隔124、インライン応答時間125、ポストプロセス応答時間126、ハッシュ未計算ブロック数127およびハッシュ計算済みブロック数128が格納される。
履歴テーブル123は、検出された連続コマンド群に関する情報を保持する。履歴テーブル123は、書き込みパターンの検出や、ポストプロセスモードの適用要否の判定に利用される。また、履歴テーブル123は、書き込みパターンの検出候補毎に作成される。時間間隔124は、ホスト装置400から連続して書き込みコマンドを送信可能な最小の時間間隔(前述のtr)を示す。時間間隔124は、ホスト装置400毎に記録されてもよい。
インライン応答時間125は、インラインモードを用いたときにホスト装置400から書き込みコマンドを受信してからホスト装置400に対して応答するまでの時間(前述のt1)を示す。ポストプロセス応答時間126は、ポストプロセスモードを用いたときにホスト装置400から書き込みコマンドを受信してからホスト装置400に対して応答するまでの時間(前述のt2)を示す。
ハッシュ未計算ブロック数127は、サーバ100のキャッシュ110に格納されたデータブロックのうち、ハッシュ未計算ブロックの数をカウントしたカウント値である。ハッシュ未計算ブロックとは、ポストプロセスモードの書き込み制御処理において、ハッシュ値の計算が行われずに、ホスト装置400から書き込み先として指定されたLBAの担当サーバのキャッシュ110に格納されたデータブロックである。
一方、ハッシュ計算済みブロック数128は、サーバ100のキャッシュ110に格納されたデータブロックのうち、ハッシュ計算済みブロックの数をカウントしたカウント値である。ハッシュ計算済みブロックとは、ハッシュ値が算出され、算出されたハッシュ値の担当サーバのキャッシュ110に格納されたデータブロックである。
IO制御部131、検出部132、モード決定部133、重複除去制御部134およびLBA管理部135の処理は、例えば、サーバ100が備えるプロセッサ101が所定のプログラムを実行することで実現される。
IO制御部131は、ホスト装置400からのIOコマンドを受信し、受信したIOコマンドに対して応答するまでの処理を統括的に制御する。IO制御部131は、ホスト装置400から書き込みコマンドを受信すると、インラインモードとポストプロセスモードのうち、モード決定部133によって決定された書き込み制御モードを選択する。
IO制御部131は、インラインモードを選択した場合には、書き込みデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。IO制御部131は、特定された担当サーバの重複除去制御部134に書き込みデータとハッシュ値とを渡し、書き込みデータの格納とハッシュ管理テーブル121の更新を指示する。さらに、IO制御部131は、書き込み先のLBAの担当サーバを特定する。IO制御部131は、特定された担当サーバのLBA管理部135に、LBA管理テーブル122の更新を指示する。
一方、IO制御部131は、ポストプロセスモードを選択した場合には、書き込み先のLBAの担当サーバを特定する。IO制御部131は、特定された担当サーバのLBA管理部135に書き込みデータを渡し、書き込みデータの格納とLBA管理テーブル122の更新を指示する。
検出部132は、送信元と書き込み先論理ボリュームとの組み合わせ毎に書き込みコマンドを監視し、その監視結果に基づいて、同一送信元からの同一論理ボリューム宛ての書き込みコマンドに対応する書き込みパターンを検出する。
モード決定部133は、検出された書き込みパターンに属する連続コマンド群に含まれる書き込みコマンドのうち、どの書き込みコマンドに対してポストプロセスモードを適用するかを決定する。また、モード決定部133は、これらの書き込みコマンドのうち、どの書き込みコマンドに対してインラインモードを適用するかを決定する。
重複除去制御部134は、書き込みデータとハッシュ値とを受け取ると、同一内容のデータが重複しないように、書き込みデータをキャッシュ110に格納し、ハッシュ管理テーブル121を更新する。インラインモードの書き込み制御過程では、重複除去制御部134は、書き込みデータとハッシュ値とをいずれかのサーバ100のIO制御部131から受け取る。一方、ポストプロセスモードの書き込み制御過程では、重複除去制御部134は、書き込みデータとハッシュ値とをいずれかのサーバ100のLBA管理部135から受け取り、そのLBA管理部135に対してLBA管理テーブル122の更新を指示する。
LBA管理部135は、インラインモードの書き込み制御過程では、IO制御部131からの指示に応じてLBA管理テーブル122を更新する。一方、LBA管理部135は、ポストプロセスモードの書き込み制御過程では、IO制御部131からの指示に応じて、書き込みデータをハッシュ未計算ブロックのデータとしてキャッシュ110に格納し、LBA管理テーブル122を更新する。さらに、LBA管理部135は、キャッシュ110内のハッシュ未計算ブロックのデータを順次選択し、選択したデータのハッシュ値を計算し、算出されたハッシュ値の担当サーバを特定する。LBA管理部135は、特定されたサーバの重複除去制御部134にデータとハッシュ値とを渡し、データの格納とハッシュ管理テーブル121の更新を指示する。そして、LBA管理部135は、その重複除去制御部134からの指示に応じてLBA管理テーブル122を更新する。
図14は、履歴テーブルのデータ構成例を示す図である。履歴テーブル123は、コマンド群ID(identifier)、受信時間、受信間隔の項目を含む。コマンド群IDの項目には、検出された連続コマンド群を識別する情報が登録される。受信時間の項目には、連続コマンド群の受信にかかった時間が登録される。この受信時間は、例えば、連続コマンド群の先頭コマンドの受信時刻と最後尾コマンドの受信時刻との差分である。受信間隔の項目には、次の連続コマンド群の受信開始までの時間間隔が登録される。
図15は、適用モードの決定処理について示す図である。連続コマンド群の各書き込みコマンドに対する適用モードの決定処理は、次のような3つのフェーズ1〜3に分割される。
フェーズ1では、書き込みパターンが検出され、書き込みパターンに属する連続コマンド群においてどの書き込みコマンドにポストプロセスモードを適用するかを示す適用領域が決定される。
具体的には、検出部132は、同一送信元から同一論理ボリューム宛ての書き込みコマンドについての連続コマンド群を検出する。例えば、所定の時間C以内の間隔で該当する書き込みコマンド(第1のコマンドとする)が複数受信され、その後に時間Cより長い間隔を空けて該当する書き込みコマンドが受信された場合に、受信した複数の第1のコマンドが連続コマンド群として検出される。ここで、時間Cは、前述の時間間隔tr以上の値に設定される。また、例えば、同一送信元かつ同一論理ボリューム宛ての2つの書き込みコマンドが、時間C以内の間隔で受信されたときに、それらのコマンド間に送信元または書き込み先論理ボリュームが異なる書き込みコマンドが受信されていたとする。この場合でも、上記の2つの書き込みコマンドは連続コマンド群に属すると判定されてよい。
検出部132は、各連続コマンド群の受信時間の揺れが一定範囲内であり、かつ、連続コマンド群の間の受信間隔の揺れが一定範囲以内となるような、所定個数の連続コマンド群を検出した場合に、それらの連続コマンド群が書き込みパターンに属すると判定する。なお、受信時間とは、図14で説明したように、連続コマンド群の受信にかかった時間である。
図15の例では、フェーズ1において連続コマンド群81,82が検出され、さらにその後に連続コマンド群83が検出されている。連続コマンド群81,82のそれぞれの受信時間がnc1,nc2、連続コマンド群81と連続コマンド群82との間の受信間隔がtg1、連続コマンド群82と連続コマンド群83との間の受信間隔がtg2であったとする。また、書き込みパターンの検出に必要な連続コマンド群の個数を「2」とする。
検出部132は、例えば、受信時間nc1,nc2の分散が一定値以内であり、かつ受信間隔tg1,tg2の分散が一定値以内である場合に、書き込みパターンの発生を検出する。モード決定部133は、書き込みパターンに属する連続コマンド群において、ポストプロセスモードを適用する適用領域を決定する。適用領域とは、ポストプロセスモードが適用される書き込みコマンドの範囲であり、連続コマンド群の最後尾から前述の適用数Nだけの書き込みコマンドが適用領域に決定される。図15では、N=2と算出されたとする。以上の処理が終了すると、フェーズ2に遷移する。
なお、フェーズ1では、履歴テーブル123における連続コマンド群81のレコードに、受信時間nc1と受信間隔tg1が登録され、連続コマンド群82のレコードに、受信時間nc2と受信間隔tg2が登録される。検出部132は、これらのレコードを参照することで書き込みパターンを検出する。
また、各連続コマンド群の受信時間の代わりに、各連続コマンド群に含まれる書き込みコマンド数が用いられてもよい。この場合、書き込みコマンド数に関する条件は、各連続コマンド群に含まれるコマンド数の差が1以上の一定値以内という条件でもよいし、コマンド数の差が0という条件であってもよい。
次に、フェーズ2では、決定された適用領域に対して実際にポストプロセスモードが適用され、その適用によってホスト装置400におけるスループット向上効果が得られたかが確認される。そして、効果の確認結果に基づいて、適用領域にポストプロセスモードを適用するか否かが判定される。
図15の例では、連続コマンド群81,82に続いて、連続コマンド群83〜86が受信されている。フェーズ2では、連続コマンド群83において適用領域に含まれる書き込みコマンド83a,83bと、連続コマンド群84において適用領域に含まれる書き込みコマンド84a,84bが、ポストプロセスモードで処理される。そして、連続コマンド群83,84に対応する受信時間および受信間隔が引き続き監視される。
モード決定部133は、フェーズ2での受信間隔がフェーズ1での受信間隔より短い場合に、ホスト装置400におけるスループット向上効果が得られたと判定する。図15の例では、連続コマンド群83と連続コマンド群84との間の受信間隔がtg3、連続コマンド群84と連続コマンド群85との間の受信間隔がtg4であったとする。モード決定部133は、例えば、受信間隔tg3,tg4の平均値が受信間隔tg1,tg2の平均値より短い場合に、スループット向上効果が得られたと判定する。以上の判定処理が終了すると、フェーズ3に遷移する。
フェーズ3では、スループット向上効果が得られた場合は、決定領域に対するポストプロセスモードの適用が継続され、効果が得られなかった場合は、ポストプロセスモードの適用が中止される。図15の例では、スループット向上効果が得られたと判定され、後続の連続コマンド群85,86における適用領域に、ポストプロセスモードが適用される。
以上の処理により、サーバ100は、決定した適用領域に実際にポストプロセスモードを適用したときに、ホスト装置400のスループット向上効果が得られた場合にのみ、ポストプロセスモードを適用し続ける。これにより、実効性のある必要最小限の書き込みコマンドだけが、ポストプロセスモードで処理される。したがって、サーバ100の処理負荷の増大を抑制しつつ、ホスト装置400のスループットを確実に向上させることができる。
次に、サーバ100で実行される処理についてフローチャートを用いて説明する。サーバ100は、書き込みコマンドを監視し、送信元のホスト装置400と書き込み先の論理ボリュームとの組み合わせ毎に、以下の図16〜図19の処理を実行する。換言すると、図16〜図19の処理は、同一の送信元かつ同一の宛先論理ボリュームの書き込みコマンドを受信するたびに実行される。
まず、該当書き込みコマンドが受信されていない初期状態や、該当書き込みコマンドに対応する書き込みパターンの受信が終了した状態には、図16に示すフェーズ1の処理が実行される。
図16は、フェーズ1の処理例を示すフローチャートである。
[ステップS51]サーバ100は、次の図17に示すパターン監視プロセスを実行する。
図17は、パターン監視プロセスの処理例を示すフローチャートである。なお、図17の処理の初回実行時には、サーバ100は「パターン非監視状態」であるものとする。
[ステップS61]検出部132は、IO制御部131が、該当書き込みコマンド(すなわち、特定の送信元かつ特定の宛先論理ボリュームの書き込みコマンド)を受信したことを検知する。
[ステップS62]検出部132は、ステップS61で書き込みコマンドを受信した時刻と前回該当書き込みコマンドを受信した時刻との時間差が、所定の時間C以下であるか否かを判定する。検出部132は、時間差が時間C以下の場合、現在の書き込みコマンドと前回の書き込みコマンドとが連続コマンド群に属すると判断し、ステップS63の処理を実行する。一方、検出部132は、時間差が時間Cより大きい場合、現在の書き込みコマンドが連続コマンド群の先頭と判断して、ステップS67の処理を実行する。
[ステップS63]検出部132は、現在の状態がパターン非監視状態である場合、「パターン監視状態」に遷移する。このとき、対応する履歴テーブル123が記憶部120に生成される。なお、パターン監視状態かパターン非監視状態かを示す情報は、記憶部120に格納されていればよい。
[ステップS64]検出部132は、前回の該当コマンド受信時はパターン監視状態であったか否かを判定する。検出部132は、パターン監視状態であった場合、ステップS65の処理を実行し、パターン非監視状態であった場合、ステップS66の処理を実行する。
[ステップS65]検出部132は、パターン監視状態を継続する。
[ステップS66]検出部132は、新たな書き込みパターンを検出するためのパターン監視状態が開始されたと判定する。このとき、検出部132は、パターン監視状態を継続するとともに、対応する履歴テーブル123に蓄積された情報をリセットする。
[ステップS67]検出部132は、前回の該当書き込みコマンド受信時はパターン監視状態であったか否かを判定する。検出部132は、パターン監視状態であった場合、ステップS68の処理を実行し、パターン非監視状態であった場合、ステップS69の処理を実行する。
[ステップS68]検出部132は、履歴テーブル123の新たなレコードに、前回受信した該当書き込みコマンドが属する連続コマンド群の受信時間twと、この連続コマンド群の最後尾コマンドの受信から現在の書き込みコマンドの受信までの受信間隔tgとを登録する。検出部132は、履歴テーブル123の間隔の項目に、前コマンド群の後の時間tgを登録する。
[ステップS69]検出部132は、パターン非監視状態に遷移する。
以下、図16に戻って説明を続ける。
[ステップS52]検出部132は、現在パターン監視状態であるか否かを判定する。検出部132は、パターン監視状態の場合、ステップS53の処理を実行し、パターン非監視状態の場合、ステップS57の処理を実行する。
[ステップS53]検出部132は、履歴テーブル123を参照し、書き込みパターンを検出できるかを判定する。検出部132は、履歴テーブル123に所定数Pのレコードが登録されている場合、すなわち、所定数Pの連続コマンド群が検出されている場合に、書き込みパターンを検出できると判定する。
[ステップS54]検出部132は、書き込みパターンを検出できたかを判定する。ステップS53で検出できると判定された場合、検出部132は、履歴テーブル123に登録された最新のP個のレコードの情報を用いて、書き込みパターンの検出処理を実行する。検出部132は、検出された各連続コマンド群の受信時間の揺れが一定範囲内であり、かつ、連続コマンド群の間の受信間隔の揺れが一定範囲以内である場合、書き込みパターンを検出したと判定する。検出部132は、書き込みパターンを検出できた場合、ステップS55の処理を実行し、書き込みパターンを検出できなかった場合、ステップS57の処理を実行する。
[ステップS55]モード決定部133は、ポストプロセスモードの適用領域を決定する。モード決定部133は、時間間隔124(tr)とインライン応答時間125(t1)とポストプロセス応答時間126(t2)とを式(1)に代入して、適用数Nを算出する。モード決定部133は、連続コマンド群に属する書き込みコマンドのうち、最後尾からN個分の領域を適応領域に決定する。モード決定部133は、適用領域を示す情報を記憶部120に保存する。
[ステップS56]モード決定部133は、ステップS51で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。また、ステップS56では、フェーズ1は終了し、次に該当する書き込みコマンドが受信された場合には、図18に示すフェーズ2の処理が実行される。
[ステップS57]モード決定部133は、ステップS51で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。また、ステップS57では、フェーズ1は継続され、次に該当する書き込みコマンドが受信された場合には、再度図16の処理が実行される。
図18は、フェーズ2の処理例を示すフローチャートである。
[ステップS71]サーバ100は、図17に示したパターン監視プロセスを実行する。
[ステップS72]モード決定部133は、現在パターン監視状態であるか否かを判定する。モード決定部133は、パターン監視状態の場合、ステップS73の処理を実行し、パターン非監視状態の場合、ステップS77の処理を実行する。
[ステップS73]モード決定部133は、履歴テーブル123を参照し、ホスト装置400のスループット向上効果の有無の判定が可能であるか否かを判定する。モード決定部133は、図16のステップS54で書き込みパターンが検出された後に、履歴テーブル123にさらに所定数Qのレコードが登録されている場合、すなわち、所定数Qの連続コマンド群が検出されている場合に、効果の有無の判定が可能と判定する。モード決定部133は、判定が可能な場合、ステップS78の処理を実行し、判定が可能でない場合、ステップS74の処理を実行する。
[ステップS74]モード決定部133は、現在の書き込みコマンド(ステップS71の処理で受信した書き込みコマンド)がポストプロセスモードの適用領域に含まれるか否かを判定する。モード決定部133は、現在の書き込みコマンドが適用領域に含まれる場合、ステップS75の処理を実行し、現在の書き込みコマンドが適用領域に含まれない場合、ステップS76の処理を実行する。
[ステップS75]モード決定部133は、ステップS71の処理で受信した書き込みコマンドの書き込み制御モードとして、ポストプロセスモードを選択する。IO制御部131は、ポストプロセスモードでのIO制御処理を実行する。
また、モード決定部133は、ステップS79を経由してステップS74を実行した場合、効果の有無の判定が完了しているので、フェーズ2を終了する。この場合、次に該当する書き込みコマンドが受信された場合には、フェーズ3の処理が実行される。一方、モード決定部133は、ステップS79を経由してステップS74を実行していない場合、フェーズ2を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図18の処理が実行される。
[ステップS76]モード決定部133は、ステップS71の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。
また、モード決定部133は、ステップS79を経由してステップS74を実行した場合またはステップS80を経由している場合、フェーズ2を終了する。この場合、次に該当する書き込みコマンドが受信された場合には、フェーズ3の処理が実行される。一方、モード決定部133は、ステップS79を経由してステップS74を実行していない場合、フェーズ2を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図18の処理が実行される。
[ステップS77]モード決定部133は、ステップS71の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。また、モード決定部133は、履歴テーブル123に登録されている情報を消去する。そして、モード決定部133は、フェーズ2を終了し、フェーズ1に戻るように設定する。この場合、次に該当する書き込みコマンドが受信された場合には、図16に示したフェーズ1の処理が実行される。
[ステップS78]モード決定部133は、履歴テーブル123を参照して、フェーズ2での受信間隔とフェーズ1での受信間隔とを比較する。例えば、モード決定部133は、履歴テーブル123に登録された最新のQ個のレコードを参照し、各レコードの受信間隔の平均値AVE1を算出する。また、モード決定部133は、参照したQ個のレコードの直前のP個のレコードを参照し、各レコードの受信間隔の平均値AVE2を算出する。モード決定部133は、平均値AVE2が平均値AVE1より小さい場合、フェーズ2での受信間隔がフェーズ1より短くなったと判定する。受信間隔が短くなった場合、ポストプロセスモードの適用によってホスト装置400のスループットの向上効果が得られたと判断される。
モード決定部133は、受信間隔が短くなった場合、ステップS79を実行し、短くなっていない場合、ステップS80を実行する。
[ステップS79]この場合、ホスト装置400のスループット向上効果が得られたと判断される。モード決定部133は、適用領域にポストプロセスモードを適用し続けることを示す情報を、記憶部120に設定する。
[ステップS80]この場合、ホスト装置400のスループット向上効果が得られなかったと判断される。モード決定部133は、ポストプロセスモードの適用を中止することを示す情報を、記憶部120に設定する。
図19は、フェーズ3の処理例を示すフローチャートである。
[ステップS91]サーバ100は、図17に示したパターン監視プロセスを実行する。
[ステップS92]モード決定部133は、現在パターン監視状態であるか否かを判定する。モード決定部133は、パターン監視状態の場合、ステップS93の処理を実行し、パターン非監視状態の場合、ステップS97の処理を実行する。
[ステップS93]モード決定部133は、フェーズ2でポストプロセスモードの適用を継続することが設定されたか否かを判定する。モード決定部133は、図18のステップS79で適用継続が設定された場合、ステップS94を実行し、図19のステップS80で適用中止が設定された場合、ステップS96を実行する。
[ステップS94]モード決定部133は、現在の書き込みコマンド(ステップS91の処理で受信した書き込みコマンド)がポストプロセスモードの適用領域に含まれるか否かを判定する。モード決定部133は、現在の書き込みコマンドが適用領域に含まれる場合、ステップS95の処理を実行し、現在の書き込みコマンドが適用領域に含まれない場合、ステップS96の処理を実行する。
[ステップS95]モード決定部133は、ステップS91の処理で受信した書き込みコマンドの書き込み制御モードとして、ポストプロセスモードを選択する。IO制御部131は、ポストプロセスモードでのIO制御処理を実行する。また、モード決定部133は、フェーズ3を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図19の処理が実行される。
[ステップS96]モード決定部133は、ステップS91の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。また、モード決定部133は、フェーズ3を継続する。この場合、次に該当する書き込みコマンドが受信された場合には、再度図19の処理が実行される。
[ステップS97]モード決定部133は、ステップS91の処理で受信した書き込みコマンドの書き込み制御モードとして、インラインモードを選択する。IO制御部131は、インラインモードでのIO制御処理を実行する。また、モード決定部133は、履歴テーブル123に登録されている情報を消去する。そして、モード決定部133は、フェーズ3を終了し、フェーズ1に戻るように設定する。この場合、次に該当する書き込みコマンドが受信された場合には、図16に示したフェーズ1の処理が実行される。
図20は、インラインモードでのIO制御処理手順の例を示すフローチャートである。図20の処理は、モード決定部133が書き込み制御モードとしてインラインモードを選択したときに実行される。
[ステップS101]IO制御部131は、書き込みデータのハッシュ値を計算する。ハッシュ値は、例えば、SHA−1(Secure Hash Algorithm 1)のハッシュ関数を用いて計算される。
[ステップS102]IO制御部131は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、IO制御部131自身を含むサーバ100が、算出されたハッシュ値の担当サーバであるかを判定する。IO制御部131は、担当サーバである場合、ステップS103の処理を実行し、担当サーバでない場合、ステップS104の処理を実行する。
[ステップS103]IO制御部131は、IO制御部131自身を含むサーバ100の重複除去制御部134に対して書き込みデータとハッシュ値とを通知し、書き込みデータの書き込みを指示する。
[ステップS104]IO制御部131は、算出されたハッシュ値の担当サーバである他のサーバ100の重複除去制御部134に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
[ステップS105]IO制御部131は、ステップS103での通知先またはステップS104での転送先から、ハッシュ管理テーブル121のエントリのアドレスを取得する。
[ステップS106]IO制御部131は、書き込みデータの書き込み先として指定されたLBAに基づいて、このLBAの担当サーバを特定し、IO制御部131自身を含むサーバ100が、指定されたLBAの担当サーバであるかを判定する。IO制御部131は、担当サーバである場合、ステップS107の処理を実行し、担当サーバでない場合、ステップS108の処理を実行する。
[ステップS107]IO制御部131は、IO制御部131自身を含むサーバ100のLBA管理部135に、ステップS105で取得されたエントリのアドレスと、書き込み先として指定されたLBAとを通知して、LBA管理テーブル122の更新を指示する。
[ステップS108]IO制御部131は、指定されたLBAの担当サーバである他のサーバ100のLBA管理部135に、ステップS105で取得されたエントリのアドレスと、書き込み先として指定されたLBAとを転送して、LBA管理テーブル122の更新を指示する。
図21は、ポストプロセスモードでのIO制御処理手順の例を示すフローチャートである。図21の処理は、モード決定部133が書き込み制御モードをポストプロセスモードに選択したときに実行される。
[ステップS111]IO制御部131は、書き込みデータの書き込み先として指定されたLBAに基づいて、このLBAの担当サーバを特定し、IO制御部131自身を含むサーバ100が、指定されたLBAの担当サーバであるかを判定する。IO制御部131は、担当サーバである場合、ステップS112の処理を実行し、担当サーバでない場合、ステップS115の処理を実行する。
[ステップS112]IO制御部131は、IO制御部131自身を含むサーバ100のLBA管理部135に、書き込みデータを通知して、キャッシュ110への格納を指示する。
[ステップS113]IO制御部131は、ステップS112での通知先のLBA管理部135から、書き込みデータが格納されたキャッシュページのページ番号を取得する。
[ステップS114]IO制御部131は、IO制御部131自身を含むサーバ100のLBA管理部135に、取得されたページ番号と、書き込み先として指定されたLBAとを通知して、LBA管理テーブル122の更新を指示する。
[ステップS115]IO制御部131は、指定されたLBAの担当サーバである他のサーバ100のLBA管理部135に、書き込みデータを転送して、キャッシュ110への格納を指示する。
[ステップS116]IO制御部131は、ステップS115での転送先のLBA管理部135から、書き込みデータが格納されたキャッシュページのページ番号を受信する。
[ステップS117]IO制御部131は、指定されたLBAの担当サーバである他のサーバ100のLBA管理部135に、取得されたページ番号と、書き込み先として指定されたLBAとを転送して、LBA管理テーブル122の更新を指示する。
図22は、重複除去処理手順の例を示すフローチャートである。
[ステップS121]重複除去制御部134は、書き込みデータとハッシュ値とを、書き込み指示とともに受け付ける。例えば、重複除去制御部134は、図20のステップS103またはステップS104の処理に応じて、いずれかのサーバ100のIO制御部131から書き込み指示を受け付ける。あるいは、重複除去制御部134は、後述する図25のステップS154またはステップS155の処理に応じて、いずれかのサーバ100のIO制御部131から書き込み指示を受け付ける。
[ステップS122]重複除去制御部134は、受け付けたハッシュ値を含むエントリがハッシュ管理テーブル121に登録されているかを判定する。重複除去制御部134は、該当エントリが登録されている場合、ステップS126の処理を実行し、登録されていない場合、ステップS123の処理を実行する。
[ステップS123]ステップS122でエントリが登録されていないと判定された場合、受け付けた書き込みデータと同じ内容のデータは、キャッシュ110またはストレージ200にまだ格納されていない。この場合、重複除去制御部134は、キャッシュ110に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ計算済みブロックのデータとしてキャッシュ110に格納される。
[ステップS124]重複除去制御部134は、記憶部120のハッシュ計算済みブロック数128をカウントアップする。
[ステップS125]重複除去制御部134は、ハッシュ管理テーブル121に新たにエントリを作成する。重複除去制御部134は、作成されたエントリにおいて、ハッシュ値の項目に受け付けたハッシュ値を登録し、ポインタの項目にステップS123で書き込みデータを格納したキャッシュページのページ番号を登録し、カウント値の項目に「1」を登録する。
[ステップS126]ステップS122でエントリが登録されていると判定された場合、受け付けた書き込みデータと同じ内容のデータが、キャッシュ110またはストレージ200にすでに格納されている。この場合、重複除去制御部134は、ハッシュ管理テーブル121のエントリのうち、ステップS121で受け付けたハッシュ値が登録されたエントリを特定する。重複除去制御部134は、特定されたエントリにおけるカウント値の項目の値をカウントアップする。また、重複除去制御部134は、ステップS121で受け付けた書き込みデータおよびハッシュ値を破棄する。このようなステップS126の処理により、書き込みデータは重複を除去してストレージノードに格納される。
[ステップS127]重複除去制御部134は、ステップS125で作成されたエントリ、またはステップS126で特定されたエントリのアドレスを通知する。ステップS121で重複除去制御部134と同じサーバ100に含まれるIO制御部131またはLBA管理部135から書き込み指示を受けた場合、エントリのアドレスは同じサーバ100のIO制御部131またはLBA管理部135に通知される。また、ステップS121で重複除去制御部134とは異なる他のサーバ100に含まれるIO制御部131またはLBA管理部135から書き込み指示を受けた場合、エントリのアドレスは他のサーバ100のIO制御部131またはLBA管理部135に転送される。
図23は、インラインモードでのLBA管理処理手順の例を示す図である。
[ステップS131]LBA管理部135は、ハッシュ管理テーブル121のエントリのアドレスと、書き込みデータの書き込み先として指定されたLBAとを、テーブル更新指示とともに受け付ける。例えば、LBA管理部135は、図20のステップS107またはステップS108の処理に応じて、いずれかのサーバ100のIO制御部131からテーブル更新指示を受け付ける。
[ステップS132]LBA管理部135は、LBA管理テーブル122から、ステップS131で受け付けたLBAを含むエントリを特定する。LBA管理部135は、特定されたエントリにおけるポインタの項目に、ステップS131で受け付けたエントリのアドレスを登録する。
[ステップS133]LBA管理部135は、テーブル更新指示の通知元のIO制御部131に対して、テーブル更新の完了通知メッセージを送信する。
以上の図23の処理により、ハッシュ計算済みブロックのデータについて、LBAとハッシュ管理テーブル121のエントリとがマッピングされる。
図24は、ポストプロセスモードでのLBA管理処理手順の例を示す図である。
[ステップS141]LBA管理部135は、書き込みデータをキャッシュ110への格納指示とともに受け付ける。例えば、LBA管理部135は、図21のステップS112またはステップS115の処理に応じて、いずれかのサーバ100のIO制御部131から格納指示を受け付ける。
[ステップS142]LBA管理部135は、キャッシュ110に新たなキャッシュページを作成し、そのキャッシュページに書き込みデータを格納する。この書き込みデータは、ハッシュ未計算ブロックのデータとしてキャッシュ110に格納される。
[ステップS143]LBA管理部135は、記憶部120のハッシュ未計算ブロック数127をカウントアップする。
[ステップS144]LBA管理部135は、ステップS142で作成されたキャッシュページのページ番号を、格納指示の通知元のIO制御部131に通知する。
[ステップS145]LBA管理部135は、キャッシュページのページ番号と、書き込みデータの書き込み先として指定されたLBAとを、テーブル更新指示とともに受け付ける。例えば、LBA管理部135は、図21のステップS114またはステップS117の処理に応じて、いずれかのサーバ100のIO制御部131からテーブル更新指示を受け付ける。
[ステップS146]LBA管理部135は、LBA管理テーブル122から、ステップS145で受け付けたLBAを含むエントリを特定する。LBA管理部135は、特定されたエントリにおけるポインタの項目に、ステップS145で受け付けたページ番号を登録する。
なお、ステップS146で登録されるページ番号は、ステップS144で通知されたページ番号と同じである。このため、LBA管理部135は、ステップS144,S145の処理をスキップし、ステップS146ではLBAとテーブル更新指示とを受け付けて、テーブル更新を行ってもよい。また、LBA管理部135は、ステップS141の段階でLBAを受け付けてもよい。
以上の図24の処理により、ハッシュ未計算ブロックのデータについて、LBAとキャッシュページとがマッピングされる。
図25は、バックグラウンドでのブロック再配置処理手順の例を示すフローチャートである。図25の処理は、書き込みコマンドの受信からその応答までの書き込み制御処理とは非同期に、その書き込み制御処理と並行して実行される。
[ステップS151]LBA管理部135は、キャッシュ110に格納されたハッシュ未計算ブロックのデータを1つ選択する。例えば、LBA管理部135は、LBA管理テーブル122のエントリのうち、ポインタの項目にキャッシュページのページ番号が登録されたエントリを特定する。LBA管理部135は、特定されたエントリの中から、ページ番号の登録時刻が最も早いエントリ、あるいは、ホスト装置400からのアクセス頻度が最も低いエントリを選択する。選択されたエントリに登録されたページ番号が示すキャッシュページに格納されたデータが、選択されるハッシュ未計算ブロックのデータとなる。
[ステップS152]LBA管理部135は、選択されたハッシュ未計算ブロックのデータを基にハッシュ値を計算する。
[ステップS153]LBA管理部135は、算出されたハッシュ値のハッシュ先頭値に基づいて、このハッシュ値の担当サーバを特定し、LBA管理部135自身を含むサーバ100が、算出されたハッシュ値の担当サーバであるかを判定する。LBA管理部135は、担当サーバである場合、ステップS154の処理を実行し、担当サーバでない場合、ステップS155の処理を実行する。
[ステップS154]LBA管理部135は、LBA管理部135自身を含むサーバ100の重複除去制御部134に対して、ハッシュ未計算ブロックのデータとハッシュ値とを通知し、データの書き込みを指示する。
[ステップS155]LBA管理部135は、算出されたハッシュ値の担当サーバである他のサーバ100の重複除去制御部134に対して書き込みデータとハッシュ値とを転送し、書き込みデータの書き込みを指示する。
[ステップS156]LBA管理部135は、ステップS154でのデータおよびハッシュ値の通知先のLBA管理部135、または、ステップS155でのデータおよびハッシュ値の転送先のLBA管理部135から、ハッシュ管理テーブル121のエントリのアドレスをテーブル更新とともに受け付ける。このエントリは、ステップS152で算出されたハッシュ値に対応するエントリであり、ステップS151で選択されたハッシュ未計算ブロックがハッシュ計算済みブロックとして登録された物理記憶領域の位置情報を保持する。
[ステップS157]LBA管理部135は、LBA管理テーブル122のエントリのうち、ステップS151で選択されたハッシュ未計算ブロックのデータに対応するエントリを特定する。LBA管理部135は、特定されたエントリにおけるポインタの項目に、ステップS156で受け付けられたエントリのアドレスを上書きして登録する。
[ステップS158]LBA管理部135は、記憶部120のハッシュ未計算ブロック数127をカウントダウンする。
以上の図25の処理により、バックグラウンドにおいて、ハッシュ未計算ブロックのデータが、重複が除去された状態でいずれかのサーバ100のキャッシュ110に再配置される。
図26は、デステージ処理手順の例を示すフローチャートである。図26の処理は、図16〜24の書き込み制御処理や図25のブロック再配置処理と並行して実行される。
[ステップS161]IO制御部131は、キャッシュ110に格納されたハッシュ計算済みブロックのデータの中から、デステージ対象のデータを選択する。例えば、IO制御部131は、キャッシュ110の容量が残り少なくなった場合に、キャッシュ110に格納されたハッシュ計算済みブロックのデータのうち最終アクセス日時が最も早いデータを、デステージ対象として選択する。この場合、デステージ対象のデータは、キャッシュ110から追い出されるデータとなる。また、例えば、IO制御部131は、キャッシュ110に格納されたハッシュ計算済みブロックのデータの中から、ストレージ200内のデータと同期されていないダーティデータを特定してもよい。この場合、例えば、IO制御部131は、特定されたダーティデータのうち更新日時が最も早いデータを、デステージ対象として選択する。
[ステップS162]IO制御部131は、選択されたデータをストレージ200に格納する。選択されたデータが追い出しの対象の場合、IO制御部131は、データをキャッシュ110からストレージ200に移動させる。選択されたデータが追い出しの対象でない場合、IO制御部131は、データをキャッシュ110からストレージ200にコピーする。
[ステップS163]IO制御部131は、ハッシュ管理テーブル121から、デステージ対象のデータに対応するエントリを特定する。例えば、IO制御部131は、選択されたデータのハッシュ値を計算し、ハッシュ管理テーブル121から、算出されたハッシュ値が登録されたエントリを特定する。IO制御部131は、特定されたエントリにおけるポインタの項目に、ステップS162でのデータの格納先を示す物理アドレス(PBA)を登録する。
[ステップS164]この処理は、選択されたデータが追い出しの対象であり、ステップS162でキャッシュ110から移動された場合のみ実行される。IO制御部131は、記憶部120のハッシュ計算済みブロック数128をカウントダウンする。
なお、上記の各実施の形態に示した装置(例えば、情報処理装置1、サーバ100a〜100c、ホスト装置400a,400b)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc-Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。