(57)【要約】【課題】重複除去におけるＧＣの効率を向上すること。【解決手段】過去情報記憶部２４が、過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と、過去にデータの重複除去が行われた単位領域のデータに関するデータ情報とを記憶する。ＧＣ部２５が、アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成する。そして、ＧＣ部２５は、過去情報記憶部２４が記憶するデータ情報と、生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定する。【選択図】図２
2018106545.tif 000002
【特許請求の範囲】
【請求項１】
過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と前記単位領域のデータに関するデータ情報とを記憶する過去情報記憶部と、
前記アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成する生成部と、
前記過去情報記憶部が記憶するデータ情報と前記生成部が生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定する特定部と、
前記データ領域を有するデータ記憶部と
を有することを特徴とする情報処理装置。
【請求項２】
前記過去情報記憶部は、前記アドレス情報をブルームフィルタを用いて記憶し、
前記生成部は、前記ブルームフィルタを用いて現時点でデータの重複除去が行われた状態にある単位領域のデータに関するデータ情報を生成することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記生成部は、前記ブルームフィルタを用いて現時点でデータの重複除去が行われた可能性がある単位領域のアドレスを特定し、特定したアドレスの単位領域が現時点でデータの重複除去が行われた状態にある単位領域であるか否かを前記データ記憶部を参照して判定し、現時点でデータの重複除去が行われた状態にあると判定した単位領域のデータ情報を生成することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
データの重複除去が行われている単位領域のアドレスに関するアドレス情報をブルームフィルタを用いて記憶するとともに、前記単位領域のデータに関するデータ情報と該データの前記データ記憶部への書き込み回数を示すカウント値とを対応付けた情報を前記カウント値が大きい順に所定の数だけカウントテーブルとして記憶する現在情報記憶部と、
前記現在情報記憶部が記憶する情報を用いて前記過去情報記憶部を更新し、前記カウントテーブルのカウント値を調整し、かつ、前記現在情報記憶部が記憶するブルームフィルタをクリアする世代交代部とをさらに有することを特徴とする請求項２又は３に記載の情報処理装置。
【請求項５】
前記単位領域はブロックであり、前記データ情報はハッシュ値であることを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
データを記憶する情報処理装置と前記情報処理装置にデータを格納するクライアント装置とを有する情報処理システムにおいて、
前記情報処理装置は、
過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と前記単位領域のデータに関するデータ情報とを記憶する過去情報記憶部と、
前記アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成する生成部と、
前記過去情報記憶部が記憶するデータ情報と前記生成部が生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定する特定部と、
前記データ領域を有するデータ記憶部と
を有することを特徴とする情報処理システム。
【請求項７】
コンピュータが、
過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と前記単位領域のデータに関するデータ情報とを過去情報記憶部に記憶し、
前記アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成し、
前記過去情報記憶部が記憶するデータ情報と生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定
する処理を実行することを特徴とする情報処理方法。
【請求項８】
コンピュータに、
過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と前記単位領域のデータに関するデータ情報とを過去情報記憶部に記憶し、
前記アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成し、
前記過去情報記憶部が記憶するデータ情報と生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定
する処理を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
ストレージ装置は、データを蓄積するにあたって、必要となるデータ容量を減らすために、重複するデータを除去する。ただし、データの重複数を正確に管理するためには、データの更新時に、既存データの読み出し、読み出したデータの重複数の１減少、新規データの書き込み、新規データの重複数の１増加といった処理が必要になり、データの更新処理が著しく遅くなる。
【０００３】
そこで、ストレージ装置は、データの重複数を管理する代わりに、重複処理したデータが消されて不要になったかを調べ、不要になったデータ領域を回収するガベージコレクション（ＧＣ：Garbage  Collection）の機能を備える。
【０００４】
なお、重複数がＮ未満の場合には重複除去を行わず、重複数がＮ以上になると重複除去を行うことによって、単位管理データ量当たりのデータの削減量を大きくする技術がある。また、ブロックの特徴データと格納位置情報を関連付けた格納位置特定テーブルと、記憶装置識別情報と特徴データとを関連付けた記憶装置特定テーブルとを用いることで、重複排除機能を有するストレージシステムの性能向上を図る技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１９９５７３号公報
【特許文献２】特表２０１３−５１４５６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＧＣはストレージ装置の全領域の読み出しとハッシュ値演算を必要とする重い処理であり、ＧＣはストレージ装置のレスポンス低下を発生させるという問題がある。特に、全データの重複除去を行うのではなく重複率の高い一部のデータ（トップからｋ個：ｋは正の整数）のみを重複除去するｔｏｐ−ｋ重複除去においては、ＧＣ時に全領域をチェックすることは非効率的である。
【０００７】
本発明は、１つの側面では、重複除去におけるＧＣの効率を向上することを目的とする。
【課題を解決するための手段】
【０００８】
１つの態様では、情報処理装置は、過去情報記憶部と、生成部と、特定部と、データ記憶部とを有する。過去情報記憶部は、過去にデータの重複除去が行われた単位領域のアドレスに関するアドレス情報と過去にデータの重複除去が行われた単位領域のデータに関するデータ情報とを記憶する。生成部は、アドレス情報を用いて現時点でデータの重複除去が行われた状態にある単位領域のデータ情報を生成する。特定部は、過去情報記憶部が記憶するデータ情報と生成部が生成したデータ情報とに基づいてガベージコレクションの対象とするデータ領域を特定する。データ記憶部は、データ領域を有する。
【発明の効果】
【０００９】
１つの側面では、本発明は、重複除去におけるＧＣの効率を向上することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、重複除去を説明するための図である。
【図２】図２は、実施例に係る情報処理システムの構成を示す図である。
【図３】図３は、書込部による書き込み処理を説明するための図である。
【図４】図４は、ブルームフィルタを説明するための図である。
【図５】図５は、世代交代を説明するための図である。
【図６】図６は、ＧＣ部によるＧＣを説明するための図である。
【図７】図７は、書込部による書き込み処理のフローを示すフローチャートである。
【図８】図８は、世代交代部による世代交代処理のフローを示すフローチャートである。
【図９】図９は、ＧＣ部によるＧＣ処理のフローを示すフローチャートである。
【図１０】図１０は、実施例に係るストレージ制御プログラムを実行するコンピュータのハードウェア構成を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する情報処理装置、情報処理システム、情報処理方法及びプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１２】
まず、重複除去について説明する。図１は、重複除去を説明するための図である。図１は、サーバＸ〜サーバＺが記憶するデータをストレージ装置にバックアップする場合を示す。各サーバが記憶するデータは、ブロックに分割され、内容の同じブロックがあれば、ストレージ装置は１個所にのみデータを記憶する。
【００１３】
図１では、サーバＸが記憶するデータは、Ａ〜Ｅのブロックに分割され、サーバＹが記憶するデータは、Ａ、Ｂ、Ｄ、Ｅ、Ｆに分割され、サーバＺが記憶するデータは、Ａ〜Ｄ、Ｇのブロックに分割される。Ａ、Ｂ、Ｄは各サーバに記憶され重複するため、ストレージ装置はＡ、Ｂ、Ｄを１個所にだけ記憶する。Ｃ、Ｅは２つのサーバＺに記憶され重複するため、ストレージ装置はＣ、Ｅを１個所にだけ記憶する。
【００１４】
このように、重複除去を行うことによって、ストレージ装置のデータ容量を削減することができる。なお、図１では、複数のサーバのデータをバックアップする場合について説明したが、ストレージ装置は、１台のサーバのデータを重複除去してもよい。また、ストレージ装置は、サーバ以外の装置のデータを重複除去してもよい。
【００１５】
次に、実施例に係る情報処理システムの構成について説明する。図２は、実施例に係る情報処理システムの構成を示す図である。図２に示すように、情報処理システム１は、ストレージ装置２とクライアント３を有する。
【００１６】
ストレージ装置２は、データを記憶する装置であり、磁気ディスクにデータを記憶する。なお、ストレージ装置２は、ＮＡＮＤフラッシュメモリ等の他の不揮発性記憶媒体にデータを記憶してもよい。
【００１７】
クライアント３は、ストレージ装置２にデータを格納する装置であり、例えばサーバである。なお、図２では、説明の便宜上、１台のクライアント３のみを示したが、ストレージ装置２は、複数のクライアント３のデータを格納してもよい。
【００１８】
ストレージ装置２は、データ記憶部１０とストレージ制御部２０とを有する。データ記憶部１０は、クライアント３が利用するデータを記憶するとともに、データの管理に用いられる情報を記憶する。
【００１９】
ストレージ制御部２０は、ストレージ装置２の制御を行う。ストレージ制御部２０は、書込部２１と、世代交代部２２と、現在情報記憶部２３と、過去情報記憶部２４と、ＧＣ部２５とを有する。
【００２０】
書込部２１は、クライアント３からの指示に基づいてデータ記憶部１０にデータを書き込む。図３は、書込部２１による書き込み処理を説明するための図である。書込部２１は、データを所定の大きさの書込ブロックに分割してデータ記憶部１０に書き込む。
【００２１】
書込部２１は、書込ブロックのデータからハッシュ値を計算し、計算したハッシュ値がｔｏｐ−ｋカウンタ３１に登録されていれば、ｔｏｐ−ｋカウンタ３１のカウンタを１増加させる。
【００２２】
ｔｏｐ−ｋカウンタ３１は、ハッシュ値とカウンタを対応付けるテーブルである。ハッシュ値は、ブロックのデータにハッシュ関数を適用して計算される値である。カウンタは、対応するハッシュ値がハッシュ関数を適用して計算されるデータがデータ記憶部１０に書き込まれた数である。書き込まれたデータは使用されなくなる場合がある。したがって、カウンタは、ハッシュ値がハッシュ関数を適用して計算されるデータがデータ記憶部１０にある数を示すものではない。ｔｏｐ−ｋカウンタ３１は、カウンタの値が大きい方からｋ個のエントリを有する。
【００２３】
書込部２１は、カウンタの値が閾値を超えると重複除去処理を行う。すなわち、データ記憶部１０には、データが同じブロックが閾値の数まで記憶される。なお、以下では、ｔｏｐ−ｋカウンタ３１に登録され、カウンタの値が閾値を超えているハッシュ値を、重複除去中のハッシュ値と呼ぶ。
【００２４】
重複処理が行われたブロックは、ディスク領域の重複データ領域４３に記憶され、重複処理が行われていないブロックは、ディスク領域の通常データ領域４２に記憶される。ブロックのアドレスに重複データ領域４３へのポインタ又は通常データ領域４２へのポインタを対応付けるポインタ領域４１を介してブロックはアクセスされる。ポインタの値は、ブロックのデータのハッシュ値に基づく値である。ポインタ領域４１はディスク領域に含まれる。ディスク領域は磁気ディスクの領域である。
【００２５】
書込部２１は、ブルームフィルタ（ＢＦ：Bloom  Filter）３２に重複除去したブロックのアドレスを登録する。図４は、ブルームフィルタ３２を説明するための図である。ブルームフィルタ３２は、空間効率の良い確率的データ構造であり、要素が集合のメンバーであるかどうかのテストに使われる。
【００２６】
ブルームフィルタ３２は、偽陽性による誤検出の可能性があるが偽陰性はない、要素を集合に追加することができるが削除することはできない、集合に要素が追加されればされるほど偽陽性の可能性が高くなるという特性を有する。ここで、偽陽性とは、要素が集合のメンバーでないのにメンバーであると判定することであり、偽陰性とは、要素が集合のメンバーであるのにメンバーでないと判定することである。
【００２７】
ブルームフィルタ３２はｍ（ｍは正の整数）ビットの配列であり、全ビットの初期値は０である。ブルームフィルタ３２は、ｉ（ｉは正の整数）個のハッシュ関数とともに用いられる。各ハッシュ関数は、キー値をｍ個の配列位置にマッピングする。
【００２８】
重複除去したブロックのアドレスをブルームフィルタ３２に登録する場合には、書込部２１は、アドレスをｉ個のハッシュ関数に入力して、ｉ個の配列位置を得て、ブルームフィルタ３２のｉ個の配列位置のビットを１にする。図４では、アドレスｘ、ｙ、ｚに対してそれぞれ３つのハッシュ関数を用いて計算された配列位置のビットが１にセットされている。
【００２９】
ブロックのアドレスがブルームフィルタ３２に登録されているかを調べるために、後述するＧＣ部２５は、アドレスをｉ個のハッシュ関数に入力して、ｉ個の配列位置を得る。そして、ＧＣ部２５は、ｉ個の配列位置のビット群の１つでも０である場合、アドレスがブルームフィルタ３２に登録されていない、すなわち、ブロックに重複除去処理が行われていないと判定する。
【００３０】
一方、ｉ個の配列位置の全ビットが１である場合、ＧＣ部２５は、アドレスがブルームフィルタ３２に登録されているか、ｉ個のビットは他のアドレスを登録した時に偶然全部１になった（偽陽性）と判定する。すなわち、ｉ個の配列位置の全ビットが１である場合、ＧＣ部２５は、ブロックに重複除去処理が行われている可能性が高いと判定する。図４では、ｗは偽陽性の場合を示す。
【００３１】
なお、ｔｏｐ−ｋカウンタ３１及びブルームフィルタ３２はメインメモリに記憶される。したがって、ｔｏｐ−ｋカウンタ３１及びブルームフィルタ３２の参照は、ディスク領域の参照に較べて高速に行うことができる。
【００３２】
図２に戻って、世代交代部２２は、定期的もしくはｔｏｐ−ｋカウンタ３１の状況に応じて世代交代を行う。ここで、世代交代とは、ｔｏｐ−ｋカウンタ３１の更新を行うことである。データが重複するブロックは時間とともに変化するが、ｔｏｐ−ｋカウンタ３１は上位ｋ個のエントリしかなく、過去のデータの重複の影響を受け易い。このため、定期的もしくはｔｏｐ−ｋカウンタ３１の状況に応じて、世代交代部２２は、ｔｏｐ−ｋカウンタ３１を更新する。
【００３３】
図５は、世代交代を説明するための図である。図５では、世代交代前の旧世代のｔｏｐ−ｋカウンタ３１はｔｏｐ−ｋカウンタ３１ａで表され、旧世代のブルームフィルタ３２はブルームフィルタ３２ａで表される。また、世代交代後の新世代のｔｏｐ−ｋカウンタ３１はｔｏｐ−ｋカウンタ３１ｂで表され、新世代のブルームフィルタ３２はブルームフィルタ３２ｂで表される。
【００３４】
図５に示すように、世代交代部２２は、旧世代のｔｏｐ−ｋカウンタ３１ａ及びブルームフィルタ３２ａと過去領域３３のマージと、新世代のデータ準備を行う。過去領域３３は、過去に重複除去が行われたブロックのハッシュ値を記憶するハッシュ値領域３１ｃと、過去に重複除去が行われたブロックのアドレスが登録されたブルームフィルタ３２ｃを有する。
【００３５】
旧世代のｔｏｐ−ｋカウンタ３１ａ及びブルームフィルタ３２ａと過去領域３３のマージでは、世代交代部２２は、ｔｏｐ−ｋカウンタ３１ａに含まれるハッシュ値のうちハッシュ値領域３１ｃに含まれないハッシュ値をハッシュ値領域３１ｃに追加する。また、世代交代部２２は、ブルームフィルタ３２ａとブルームフィルタ３２ｃの論理和（ＯＲ）をとってブルームフィルタ３２ｃの値とする。
【００３６】
新世代のデータ準備では、世代交代部２２は、ｔｏｐ−ｋカウンタ３１ａの状態を基にｔｏｐ−ｋカウンタ３１ｂを準備する。例えば、世代交代部２２は、ｔｏｐ−ｋカウンタ３１ａのカウンタの値を１／２にしてｔｏｐ−ｋカウンタ３１ｂを準備する。また、世代交代部２２は、全ビットが０であるブルームフィルタ３２ｂを準備する。
【００３７】
現在情報記憶部２３は、現在の世代のｔｏｐ−ｋカウンタ３１及びブルームフィルタ３２を記憶する。過去情報記憶部２４は、過去領域３３を記憶する。すなわち、過去情報記憶部２４は、ハッシュ値領域３１ｃとブルームフィルタ３２ｃを記憶する。
【００３８】
ＧＣ部２５は、重複処理が行われたブロックのデータ領域のうち、データの書き換え等により使用されなくなったデータ領域を特定して回収する。図６は、ＧＣ部２５によるＧＣを説明するための図である。図６に示すように、ＧＣ部２５は、過去領域３３を一時領域３４にコピーして、過去領域３３をクリアする。
【００３９】
そして、ＧＣ部２５は、ディスク領域の各ブロックのアドレスが一時領域３４のブルームフィルタ３２ｄに登録されているか否かを判定する。そして、登録されている場合には、ブロックが重複除去されている可能性があるので、ＧＣ部２５は、磁気ディスクにアクセスして、ブロックが重複除去されているか否かをチェックする。
【００４０】
具体的には、ＧＣ部２５は、磁気ディスクからポインタ領域４１を読み出し、ブロックのアドレスに対応するポインタが通常データ領域４２を指すか重複データ領域４３を指すかに基づいて、ブロックが重複除去されているか否かをチェックする。なお、ブロックのデータを記憶するデータ領域が、通常データ領域４２と重複データ領域４３に分けられない場合には、ＧＣ部２５は、ポインタ領域４１に重複除去されているか否かを示すフラグを設けることで、ブロックが重複除去されているか否かをチェックする。
【００４１】
そして、ブロックが重複除去されている場合には、ＧＣ部２５は、ブロックのアドレスを過去領域３３のブルームフィルタ３２ｃにセットするとともに、ブロックのデータのハッシュ値が過去領域３３のハッシュ値領域３１ｃにあるか否かを判定する。そして、ブロックのデータのハッシュ値が過去領域３３のハッシュ値領域３１ｃにない場合には、ＧＣ部２５は、ブロックのデータのハッシュ値をハッシュ値領域３１ｃに追加する。
【００４２】
すなわち、ＧＣ部２５は、現時点で重複除去されているブロックのアドレスを過去領域３３のブルームフィルタ３２ｃに登録するとともに、現時点で重複除去されているブロックのハッシュ値を過去領域３３のハッシュ値領域３１ｃに追加する。
【００４３】
そして、全ディスク領域について処理が終了すると、ＧＣ部２５は、一時領域３４にはあるが過去領域３３にはないハッシュ値すなわち使用されていない可能性があるデータ領域を特定する。そして、ＧＣ部２５は、ハッシュ値がｔｏｐ−ｋカウンタ３１に含まれているか否かすなわち重複除去中のハッシュ値であるか否かを判定し、ｔｏｐ−ｋカウンタ３１に含まれていない場合には、使用されていないデータ領域として特定し、回収する。
【００４４】
ＧＣ部２５は、現時点情報生成部２５ａと特定部２５ｂを有する。現時点情報生成部２５ａは、現時点で重複除去されているブロックのアドレスを過去領域３３のブルームフィルタ３２ｃに登録するとともに、現時点で重複除去されているブロックのハッシュ値を過去領域３３のハッシュ値領域３１ｃに登録する。特定部２５ｂは、使用されていないデータ領域を特定して、回収する。
【００４５】
次に、書込部２１による書き込み処理のフローについて説明する。図７は、書込部２１による書き込み処理のフローを示すフローチャートである。なお、図７は、１つのブロックをデータ記憶部１０に書き込む場合の処理を示す。
【００４６】
図７に示すように、書込部２１は、書込ブロックのデータのハッシュ値を計算し（ステップＳ１）、計算したハッシュ値がｔｏｐ−ｋカウンタ３１に存在するか否かを判定する（ステップＳ２）。そして、計算したハッシュ値がｔｏｐ−ｋカウンタ３１に存在する場合には、書込部２１は、当該ハッシュ値に対応するカウンタをカウントアップする（ステップＳ３）。
【００４７】
そして、書込部２１は、カウンタの値が閾値を超えているか否かを判定する（ステップＳ４）。そして、カウンタの値が閾値を超えている場合には、書込部２１は、書込ブロックのアドレスのハッシュ値を計算してブルームフィルタ３２に登録し（ステップＳ５）、重複データとして書き込む（ステップＳ６）。
【００４８】
一方、カウンタの値が閾値を超えていない場合、あるいは、計算したハッシュ値がｔｏｐ−ｋカウンタ３１に存在しない場合は、書込部２１は、非重複データとして書き込む（ステップＳ７）。
【００４９】
このように、書込部２１が重複除去されるブロックのアドレスをブルームフィルタ３２に登録することで、ＧＣ部２５は使用されていない可能性が高いデータ領域を磁気ディスクにアクセスすることなくブルームフィルタ３２を用いて効率良く見つけることができる。
【００５０】
次に、世代交代部２２による世代交代処理のフローについて説明する。図８は、世代交代部２２による世代交代処理のフローを示すフローチャートである。図８に示すように、世代交代部２２は、過去領域３３のハッシュ値に重複除去対象のハッシュ値をマージする（ステップＳ１１）。
【００５１】
ここで、重複除去対象のハッシュ値とは、図５に示した旧世代のｔｏｐ−ｋカウンタ３１ａに含まれるハッシュ値である。また、マージするとは、ｔｏｐ−ｋカウンタ３１ａに含まれるハッシュ値のうち、過去領域３３に存在しないハッシュ値を過去領域３３に追加することである。
【００５２】
そして、世代交代部２２は、過去領域３３のブルームフィルタ３２ｃに重複除去対象のブルームフィルタ３２ａをマージする（ステップＳ１２）。すなわち、世代交代部２２は、ブルームフィルタ３２ｃとブルームフィルタ３２ａのビット毎のＯＲをとり、ブルームフィルタ３２ｃに格納する。
【００５３】
そして、世代交代部２２は、重複除去対象のｔｏｐ−ｋカウンタ３１ａを調整し（ステップＳ１３）、新世代のｔｏｐ−ｋカウンタ３１ｂとする。ここで、調整するとは、例えばカウンタの値を１／２にすることである。そして、世代交代部２２は、重複除去対象のブルームフィルタ３２ａをクリアし（ステップＳ１４）、新世代のブルームフィルタ３２ｂとする。
【００５４】
このように、世代交代部２２がｔｏｐ−ｋカウンタ３１ａを調整することによって、ストレージ装置２は重複するデータの時間変化に対応することができる。
【００５５】
次に、ＧＣ部２５によるＧＣ処理のフローについて説明する。図９は、ＧＣ部２５によるＧＣ処理のフローを示すフローチャートである。図９に示すように、ＧＣ部２５は、過去領域３３を一時領域３４にコピーして過去領域３３をクリアする（ステップＳ２１）。
【００５６】
そして、ＧＣ部２５は、ディスク領域の全ブロックに対してステップＳ２１〜ステップＳ２８の処理を行う。すなわち、ＧＣ部２５は、ブロックのアドレスのハッシュ値を計算し（ステップＳ２２）、ブルームフィルタ３２にヒットするか否かを判定する（ステップＳ２３）。そして、ブルームフィルタ３２にヒットしない場合には、ＧＣ部２５は、次のブロックを処理する。
【００５７】
一方、ブルームフィルタ３２にヒットした場合には、ＧＣ部２５は、該当アドレスが重複除去されているか否かを判定し（ステップＳ２４）、該当アドレスが重複除去されていない場合には、次のブロックを処理する。
【００５８】
一方、該当アドレスが重複除去されている場合には、ＧＣ部２５は、アドレスを過去領域３３のブルームフィルタ３２ｃに登録し（ステップＳ２５）、データのハッシュ値を計算する（ステップＳ２６）。そして、ＧＣ部２５は、ハッシュ値が過去領域３３に存在するか否かを判定し（ステップＳ２７）、存在する場合には、次のブロックを処理する。一方、データのハッシュ値が過去領域３３に存在しない場合には、ＧＣ部２５は、ハッシュ値を過去領域３３に追加し（ステップＳ２８）、次のブロックを処理する。
【００５９】
そして、ＧＣ部２５は、ディスク領域の全ブロックに対して処理を完了すると、一時領域３４にはあるが過去領域３３にないハッシュ値に対して、ステップＳ２９〜ステップＳ３０の処理を行う。すなわち、ＧＣ部２５は、一時領域３４にはあるが過去領域３３にないハッシュ値が重複除去中のハッシュ値に含まれるか否かを判定し（ステップＳ２９）、含まれる場合には、次のハッシュ値を処理する。一方、重複除去中のハッシュ値に含まない場合には、ＧＣ部２５は、該当領域を回収する（ステップＳ３０）。ここで、該当領域とは、ハッシュ値に対応付けられたデータ領域である。
【００６０】
そして、ＧＣ部２５は、一時領域３４にはあるが過去領域３３にないハッシュ値の全てに対して処理を終了すると、ＧＣ処理を終了する。
【００６１】
このように、ＧＣ部２５は、過去領域３３のブルームフィルタ３２を用いて過去に重複除去の対象となった可能性の高いブロックを特定することで、ディスク領域へのアクセスを減らし、ＧＣ処理の効率を向上することができる。
【００６２】
上述してきたように、実施例では、過去領域３３のブルームフィルタ３２ｃに、過去に重複除去が行われたブロックのアドレスを登録し、過去領域３３のハッシュ値領域３１ｃに、過去に重複除去が行われたブロックのデータのハッシュ値を記憶する。そして、ＧＣ部２５が、ブルームフィルタ３２ｃを用いて、現時点でデータの重複除去が行われた可能性があるブロックを特定し、特定したブロックについてデータ記憶部１０を参照して、現時点でデータの重複除去が行われた状態にあるブロックを特定する。そして、ＧＣ部２５は、特定したブロックのデータのハッシュ値とハッシュ値領域３１ｃに含まれるハッシュ値とに基づいて、使用されなくなったデータ領域を特定し、ＧＣの対象として回収する。したがって、ストレージ装置２は、ＧＣを効率よく行うことができる。
【００６３】
また、実施例では、世代交代部２２が、旧世代のｔｏｐ−ｋカウンタ３１ａ及びブルームフィルタ３２ａを用いて過去領域３３を更新する。また、世代交代部２２は、ｔｏｐ−ｋカウンタ３１ａを調整して新世代のｔｏｐ−ｋカウンタ３１ｂとするとともに、ブルームフィルタ３２ａをクリアして新世代のブルームフィルタ３２ｂとする。したがって、ストレージ装置２は、重複するデータの時間変化に対応することができる。
【００６４】
なお、実施例では、ストレージ制御部２０について説明したが、ストレージ制御部２０が有する構成をソフトウェアによって実現することで、同様の機能を有するストレージ制御プログラムを得ることができる。そこで、ストレージ制御プログラムを実行するコンピュータについて説明する。
【００６５】
図１０は、実施例に係るストレージ制御プログラムを実行するコンピュータのハードウェア構成を示す図である。図１０に示すように、コンピュータ５０は、メインメモリ５１と、ＣＰＵ（Central  Processing  Unit）５２と、ＬＡＮ（Local  Area  Network）インタフェース５３と、ＨＤＤ（Hard  Disk  Drive）５４とを有する。また、コンピュータ５０は、スーパーＩＯ（Input  Output）５５と、ＤＶＩ（Digital  Visual  Interface）５６と、ＯＤＤ（Optical  Disk  Drive）５７とを有する。
【００６６】
メインメモリ５１は、プログラムやプログラムの実行途中結果などを記憶するメモリである。図２に示した現在情報記憶部２３及び過去情報記憶部２４は、メインメモリ５１上の領域である。ＣＰＵ５２は、メインメモリ５１からプログラムを読み出して実行する中央処理装置である。ＣＰＵ５２は、メモリコントローラを有するチップセットを含む。
【００６７】
ＬＡＮインタフェース５３は、コンピュータ５０をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。ＨＤＤ５４は、プログラムやデータを格納するディスク装置である。図２に示したデータ記憶部１０は、ＨＤＤ５４により実現される。スーパーＩＯ５５は、マウスやキーボードなどの入力装置を接続するためのインタフェースである。ＤＶＩ５６は、液晶表示装置を接続するインタフェースであり、ＯＤＤ５７は、ＤＶＤの読み書きを行う装置である。
【００６８】
ＬＡＮインタフェース５３は、ＰＣＩエクスプレス（ＰＣＩｅ）によりＣＰＵ５２に接続され、ＨＤＤ５４及びＯＤＤ５７は、ＳＡＴＡ（Serial  Advanced  Technology  Attachment）によりＣＰＵ５２に接続される。スーパーＩＯ５５は、ＬＰＣ（Low  Pin  Count）によりＣＰＵ５２に接続される。
【００６９】
そして、コンピュータ５０において実行されるストレージ制御プログラムは、ＤＶＤに記憶され、ＯＤＤ５７によってＤＶＤから読み出されてコンピュータ５０にインストールされる。あるいは、ストレージ制御プログラムは、ＬＡＮインタフェース５３を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ５０にインストールされる。そして、インストールされたストレージ制御プログラムは、ＨＤＤ５４に記憶され、メインメモリ５１に読み出されてＣＰＵ５２によって実行される。
【００７０】
また、実施例では、ｔｏｐ−ｋ重複除去の場合について説明したが、本発明はこれに限定されるものではなく、全データについて重複除去を行う場合にも同様に適用することができる。
【符号の説明】
【００７１】
１    情報処理システム
２    ストレージ装置
３    クライアント
１０    データ記憶部
２０    ストレージ制御部
２１    書込部
２２    世代交代部
２３    現在情報記憶部
２４    過去情報記憶部
２５    ＧＣ部
２５ａ    現時点情報生成部
２５ｂ    特定部
３１，３１ａ，３１ｂ    ｔｏｐ−ｋカウンタ
３１ｃ    ハッシュ値領域
３２，３２ａ，３２ｂ，３２ｃ，３２ｄ    ブルームフィルタ
３３    過去領域
３４    一時領域
４１    ポインタ領域
４２    通常データ領域
４３    重複データ領域
５０    コンピュータ
５１    メインメモリ
５２    ＣＰＵ
５３    ＬＡＮインタフェース
５４    ＨＤＤ
５５    スーパーＩＯ
５６    ＤＶＩ
５７    ＯＤＤ
【図１】
2018106545.tif 000003
【図２】
2018106545.tif 000004
【図３】
2018106545.tif 000005
【図４】
2018106545.tif 000006
【図５】
2018106545.tif 000007
【図６】
2018106545.tif 000008
【図７】
2018106545.tif 000009
【図８】
2018106545.tif 000010
【図９】
2018106545.tif 000011
【図１０】
2018106545.tif 000012