(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024001607
(43)【公開日】2024-01-10
(54)【発明の名称】情報処理装置および情報処理方法
(51)【国際特許分類】
G06F 16/21 20190101AFI20231227BHJP
【FI】
G06F16/21
【審査請求】未請求
【請求項の数】5
【出願形態】OL
(21)【出願番号】P 2022100367
(22)【出願日】2022-06-22
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】浦田 一宏
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175CA07
5B175KA04
(57)【要約】
【課題】管理テーブルからの不要なハッシュ値の削除処理にかかる時間を短縮する。
【解決手段】処理部12は、複数の部分記憶領域の中から処理対象の第1の部分記憶領域を選択し、複数のグループの中から第1の部分記憶領域が属する第1のグループを特定し、管理テーブル13に含まれるグループ領域のうち、第1のグループに対応する第1のグループ領域に含まれるレコードの中から、第1の部分記憶領域に含まれる単位記憶領域に対応する第1のレコードを検索し、検索された第1のレコードに対応する第1の部分記憶領域に格納されたデータに対する論理記憶領域からの参照数が0である場合、第1のレコードに含まれる第1のハッシュ値を削除する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
記憶部と処理部とを有する情報処理装置であって、
論理記憶領域に対して書き込みが要求されたデータが重複を排除して格納される物理記憶領域が、複数の部分記憶領域に分割され、前記複数の部分記憶領域のそれぞれが、データの格納単位となる単位記憶領域を複数含み、前記複数の部分記憶領域が複数のグループにグループ化されている状態において、前記記憶部は、前記単位記憶領域のそれぞれに対応するレコードが登録された管理テーブルを記憶し、
前記管理テーブルは、前記複数のグループのそれぞれに対応するグループ領域に分割され、前記グループ領域のそれぞれには、前記複数のグループのうち対応するグループに属する前記部分記憶領域に含まれる前記単位記憶領域の前記レコードが登録され、前記レコードのそれぞれは、対応する前記単位記憶領域に格納されたデータに基づく第1のハッシュ値と、対応する前記単位記憶領域の位置情報とを含み、
前記処理部は、
前記複数の部分記憶領域の中から処理対象の第1の部分記憶領域を選択し、
前記複数のグループの中から前記第1の部分記憶領域が属する第1のグループを特定し、
前記管理テーブルに含まれる前記グループ領域のうち、前記第1のグループに対応する第1のグループ領域に含まれる前記レコードの中から、前記第1の部分記憶領域に含まれる前記単位記憶領域に対応する第1のレコードを検索し、
検索された前記第1のレコードに対応する前記第1の部分記憶領域に格納されたデータに対する前記論理記憶領域からの参照数が0である場合、前記第1のレコードに含まれる前記第1のハッシュ値を削除する、
情報処理装置。
【請求項2】
前記レコード内の前記位置情報は、前記複数の部分記憶領域のうち対応する前記単位記憶領域が属する第2の部分記憶領域を示す第1の識別番号と、前記第2の部分記憶領域における対応する前記単位記憶領域の位置を示す第2の識別番号とを含み、
前記第1のレコードの検索では、前記第1のグループ領域に含まれる前記レコードの中から、前記第1の部分記憶領域を示す前記第1の識別番号が登録された前記レコードを、前記第1のレコードとして検索する、
請求項1記載の情報処理装置。
【請求項3】
前記管理テーブルには、前記複数のグループのそれぞれについて、対応する前記グループ領域内の前記レコードに対応する前記単位記憶領域のデータに対する前記参照数の合計値が登録され、
前記処理部は、さらに、
第1のデータの書き込みが要求されると、前記第1のデータに基づく第2のハッシュ値を算出し、
前記管理テーブルに含まれる前記グループ領域の中から前記合計値が大きい順に第2のグループ領域を選択し、選択された前記第2のグループ領域に含まれる前記レコードの中から、前記第2のハッシュ値と一致する前記第1のハッシュ値が登録された前記第2のレコードを検索し、前記第2のレコードが見つかった場合には、前記第2のグループ領域の選択を停止して、前記物理記憶領域に対する前記第1のデータの格納をスキップし、前記第2のレコードが見つからなかった場合には、前記物理記憶領域から未使用の第1の単位記憶領域を選択して前記第1のデータを前記第1の単位記憶領域に格納し、前記第1の単位記憶領域を示す前記位置情報と、前記第1のハッシュ値としての前記第2のハッシュ値とを含む新たな前記レコードを前記管理テーブルに登録する、
請求項1記載の情報処理装置。
【請求項4】
前記管理テーブルでは、前記複数のグループ領域のそれぞれに含まれる前記レコードが、前記第1のハッシュ値に基づく複数のサブグループに分類されており、
前記第2のレコードの検索では、前記複数のサブグループの中から前記第2のハッシュ値に基づいて第1のサブグループを特定し、前記第2のグループ領域に含まれる前記レコードのうち、前記第1のサブグループに属する前記レコードの中から前記第2のレコードを検索する、
請求項3記載の情報処理装置。
【請求項5】
コンピュータが、
論理記憶領域に対して書き込みが要求されたデータが重複を排除して格納される物理記憶領域が、複数の部分記憶領域に分割され、前記複数の部分記憶領域のそれぞれが、データの格納単位となる単位記憶領域を複数含み、前記複数の部分記憶領域が複数のグループにグループ化されている状態において、前記単位記憶領域のそれぞれに対応するレコードが登録された管理テーブルを記憶部に記憶し、前記管理テーブルは、前記複数のグループのそれぞれに対応するグループ領域に分割され、前記グループ領域のそれぞれには、前記複数のグループのうち対応するグループに属する前記部分記憶領域に含まれる前記単位記憶領域の前記レコードが登録され、前記レコードのそれぞれは、対応する前記単位記憶領域に格納されたデータに基づく第1のハッシュ値と、対応する前記単位記憶領域の位置情報とを含み、
前記複数の部分記憶領域の中から処理対象の第1の部分記憶領域を選択し、
前記複数のグループの中から前記第1の部分記憶領域が属する第1のグループを特定し、
前記管理テーブルに含まれる前記グループ領域のうち、前記第1のグループに対応する第1のグループ領域に含まれる前記レコードの中から、前記第1の部分記憶領域に含まれる前記単位記憶領域に対応する第1のレコードを検索し、
検索された前記第1のレコードに対応する前記第1の部分記憶領域に格納されたデータに対する前記論理記憶領域からの参照数が0である場合、前記第1のレコードに含まれる前記第1のハッシュ値を削除する、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置および情報処理方法に関する。
【背景技術】
【0002】
ストレージシステムの技術の1つとして、重複するデータを記憶装置に格納しないようにして、記憶装置の記憶領域を効率的に使用する「重複排除」と呼ばれる技術が知られている。重複排除技術では、データの重複を判定する際に、元のデータ同士が比較されるのではなく、データを基に算出されたハッシュ値が比較されることが多い。この場合、各単位記憶領域に格納されたデータに基づくハッシュ値が、例えば管理テーブルによって管理される。
【0003】
また、重複排除技術では、記憶装置へのデータ格納単位となる単位記憶領域ごとに、重複除去前のデータからの参照数を示すリファレンスカウンタがカウントされる。リファレンスカウンタは、データの削除要求に応じて減算され得る。リファレンスカウンタが「0」になった場合、対応する単位記憶領域がどこからも参照されていない状態となるので、管理テーブル上のハッシュ値のうち、この単位記憶領域のデータに対応するハッシュ値は不要になる。
【0004】
ストレージの重複排除技術に関しては、次のような提案がある。例えば、格納済みチャンクデータの重複排除効果値を含むチャンク統計情報を用いて、格納対象チャンクデータと一致する格納済みチャンクデータを検索するストレージシステムが提案されている。また、関連性の高いチャンクによりコンテナを構成することで、リストア処理においてコンテンツを復元する際、単一のコンテナを読み出すことによりコンテンツ内の複数のチャンクを取得できるようにしたストレージシステムも提案されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】国際公開第2016/006050号
【特許文献2】特開2020-47107号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、データが重複を排除して格納される記憶装置の記憶領域は、複数の部分記憶領域に分割されて管理される場合がある。この場合、各部分記憶領域には、データの格納単位となる単位記憶領域が複数含まれる。また、このような構成では、リファレンスカウンタが「0」になった単位記憶領域に対応するハッシュ値を管理テーブルから削除する処理が、部分記憶領域ごとに実行される場合がある。
【0007】
この方法では、ある部分記憶領域についてのハッシュ値削除処理を実行する場合には、管理テーブルから、その部分記憶領域に属する単位記憶領域に対応するハッシュ値を検索する必要がある。この検索では、管理テーブルの全体が検索対象となるため、検索にかかる時間が長くなり、結果的にハッシュ値削除処理の全体にかかる時間も長くなるという問題がある。
【0008】
1つの側面では、本発明は、管理テーブルからの不要なハッシュ値の削除処理にかかる時間を短縮可能な情報処理装置および情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
1つの案では、記憶部と処理部とを有する情報処理装置が提供される。ここで、論理記憶領域に対して書き込みが要求されたデータが重複を排除して格納される物理記憶領域が、複数の部分記憶領域に分割され、複数の部分記憶領域のそれぞれが、データの格納単位となる単位記憶領域を複数含み、複数の部分記憶領域が複数のグループにグループ化されている。このような状態において、記憶部は、単位記憶領域のそれぞれに対応するレコードが登録された管理テーブルを記憶する。この管理テーブルは、複数のグループのそれぞれに対応するグループ領域に分割され、グループ領域のそれぞれには、複数のグループのうち対応するグループに属する部分記憶領域に含まれる単位記憶領域のレコードが登録され、レコードのそれぞれは、対応する単位記憶領域に格納されたデータに基づく第1のハッシュ値と、対応する単位記憶領域の位置情報とを含む。処理部は、複数の部分記憶領域の中から処理対象の第1の部分記憶領域を選択し、複数のグループの中から第1の部分記憶領域が属する第1のグループを特定し、管理テーブルに含まれるグループ領域のうち、第1のグループに対応する第1のグループ領域に含まれるレコードの中から、第1の部分記憶領域に含まれる単位記憶領域に対応する第1のレコードを検索し、検索された第1のレコードに対応する第1の部分記憶領域に格納されたデータに対する論理記憶領域からの参照数が0である場合、第1のレコードに含まれる第1のハッシュ値を削除する。
【0010】
また、1つの案では、上記の情報処理装置と同様の処理をコンピュータが実行する情報処理方法が提供される。
【発明の効果】
【0011】
1つの側面では、管理テーブルからの不要なハッシュ値の削除処理にかかる時間を短縮できる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
【
図2】第2の実施の形態に係るストレージシステムの構成例を示す図である。
【
図3】CMが備える処理機能の構成例を示す図である。
【
図5】リファレンスカウンタテーブルのデータ構成例を示す図である。
【
図6】比較例におけるデータ書き込み処理手順を示すフローチャートの例である。
【
図7】比較例におけるハッシュ値削除処理手順を示すフローチャートの例である。
【
図8】第2の実施の形態におけるハッシュテーブルのデータ構成例を示す図である。
【
図10】データ書き込み処理の手順を示すフローチャートの例(その1)である。
【
図11】データ書き込み処理の手順を示すフローチャートの例(その2)である。
【
図12】データ削除処理の手順を示すフローチャートの例である。
【
図13】ハッシュ値削除処理の手順を示すフローチャートの例である。
【発明を実施するための形態】
【0013】
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージシステムの構成例および処理例を示す図である。
図1に示すストレージシステムは、情報処理装置1と記憶装置2を有する。情報処理装置1は、記憶装置2に対するアクセスを制御する装置である。情報処理装置1は、例えばサーバコンピュータやストレージ制御専用の制御装置である。記憶装置2は、例えば不揮発性記憶装置である。記憶装置2は、不揮発性記憶装置を複数台備えていてもよい。
【0014】
このストレージシステムにおいて、情報処理装置1は、論理記憶領域に対して書き込みが要求されたデータを、重複を排除して記憶装置2の物理記憶領域に格納する。また、記憶装置2の物理記憶領域は、複数の部分記憶領域に分割され、複数の部分記憶領域のそれぞれが、データの格納単位となる単位記憶領域を複数含む。さらに、複数の部分記憶領域は、複数のグループにグループ化されている。
【0015】
図1の例では、各部分記憶領域は部分記憶領域番号によって識別され、部分記憶領域に含まれる各単位記憶領域には、単位記憶領域を含む部分記憶領域ごとに単位記憶領域番号が付与される。したがって、単位記憶領域は、部分記憶領域番号と単位記憶領域番号との組み合わせによって識別される。また、部分記憶領域を分類するグループのそれぞれは、グループ番号によって識別される。
【0016】
情報処理装置1は、記憶部11と処理部12を有する。記憶部11は、情報処理装置1が備える図示しない記憶装置に確保される記憶領域である。処理部12は、例えば、情報処理装置1が備える図示しないプロセッサである。
【0017】
記憶部11には、管理テーブル13が記憶される。管理テーブル13には、単位記憶領域のそれぞれに対応するレコードが登録される。レコードのそれぞれには、対応する単位記憶領域に格納されたデータに基づくハッシュ値と、この単位記憶領域の位置情報とを含む。
図1の例では、単位記憶領域の位置情報として、部分記憶領域番号と単位記憶領域番号との組み合わせが登録されている。
【0018】
また、管理テーブル13は、上記のグループにそれぞれ対応するグループ領域に分割されている。グループ領域のそれぞれには、対応するグループに属する部分記憶領域に含まれる単位記憶領域のレコードがまとめて登録される。
図1の例では、部分記憶領域番号「101」「111」の部分記憶領域がグループ番号「0」のグループに分類されているとする。この場合、部分記憶領域番号「101」「111」の部分記憶領域に含まれる単位記憶領域のレコードは、管理テーブル13の領域のうち、グループ番号「0」に対応するグループ領域に登録される。
【0019】
ここで、管理テーブル13内のハッシュ値は、論理記憶領域に対して書き込みが要求されたデータと同一のデータが、単位記憶領域のいずれかに格納済みであるか(すなわち、データが重複しているか)を判定するために使用される。また、ある単位記憶領域に格納されたデータが論理記憶領域から参照されなくなった場合には、そのデータに対応するハッシュ値は不要になる。このため、次のような手順で、不要になったハッシュ値を管理テーブル13から削除する処理が実行される。このハッシュ値削除処理は、部分記憶領域を単位として実行される。
【0020】
処理部12は、上記の複数の部分記憶領域の中から、処理対象の部分記憶領域を選択する(ステップS1)。次に、処理部12は、上記の複数のグループの中から、ステップS1で選択された部分記憶領域が属するグループを特定する(ステップS2)。
【0021】
次に、処理部12は、管理テーブル13に含まれる上記のグループ領域のうち、ステップS2で特定されたグループに対応するグループ領域に含まれるレコードの中から、ステップS1で選択された部分記憶領域に含まれる単位記憶領域に対応するレコードを検索する(ステップS3)。処理部12は、検索されたレコードに対応する部分記憶領域に格納されたデータに対する、論理記憶領域からの参照数を取得する。そして、処理部12は、取得した参照数が「0」である場合、検索されたレコードに含まれるハッシュ値を削除する(ステップS4)。
【0022】
ここで、ステップS3では、管理テーブル13におけるレコードの検索範囲が、選択された部分記憶領域に対応するグループのグループ領域に限定される。
図1では例えば、処理対象として部分記憶領域番号「101」の部分記憶領域が選択されたとする。この場合、ステップS3でのレコードの検索範囲は、選択された部分記憶領域が属するグループ番号「0」のグループに対応するグループ領域に限定される。
【0023】
仮に、管理テーブル13内のレコードがグループごとに分類されていない場合、レコードの検索範囲は管理テーブル13の全体となる。この場合と比較して、処理部12による上記処理では、レコードの検索範囲が対応するグループのグループ領域に限定されることから、検索処理にかかる時間を短縮できる。その結果、管理テーブル13からの不要なハッシュ値の削除処理にかかる時間を短縮できる。
【0024】
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。
図2に示すストレージシステムは、ストレージ装置100とホストサーバ200を含む。ストレージ装置100は、CM(Controller Module)110とドライブ部120を備える。
【0025】
CM110は、
図1に示した情報処理装置1の一例である。CM110は、例えばファイバチャネル(FC:Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して、ホストサーバ200と接続されている。CM110は、ホストサーバ200からの要求に応じて、ドライブ部120に搭載された記憶装置へのアクセスを制御するストレージ制御装置である。
【0026】
ドライブ部120は、
図1に示した記憶装置2の一例である。ドライブ部120には、ホストサーバ200からのアクセス対象となる記憶装置が複数台搭載されている。本実施の形態では例として、ドライブ部120は、記憶装置としてHDD(Hard Disk Drive)121,122,123,・・・が搭載されたディスクアレイ装置である。なお、記憶装置としては、SSD(Solid State Drive)などの他の種類の不揮発性記憶装置が用いられてもよい。
【0027】
ホストサーバ200は、例えば業務処理などの各種の処理を実行するサーバ装置である。ホストサーバ200は、このような処理の実行に伴い、ストレージ装置100によって提供される記憶領域に対してアクセスする。具体的には、CM110により、ドライブ部120内のHDDを用いた論理ボリューム(論理記憶領域)が生成され、ホストサーバ200は、その論理ボリュームに対するアクセスをCM110に要求することでドライブ部120内のHDDにアクセスする。後述するように、このような論理ボリュームは、物理領域が動的に割り当てられる仮想ボリュームとして生成される。なお、CM110にはホストサーバ200が複数台接続されていてもよい。
【0028】
ここで、
図2を用いてCM110のハードウェア構成例を説明する。CM110は、プロセッサ111、RAM(Random Access Memory)112、SSD113、ホストインタフェース(I/F)114およびドライブインタフェース(I/F)115を備える。
【0029】
プロセッサ111は、CM110全体を統括的に制御する。プロセッサ111は、マルチプロセッサであってもよい。プロセッサ111は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ111は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
【0030】
RAM112は、CM110の主記憶装置として使用される。RAM112には、プロセッサ111に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。SSD113は、CM110の補助記憶装置として使用される。SSD113には、OSプログラム、アプリケーションプログラム、および各種データが格納される。
【0031】
ホストインタフェース114は、ホストサーバ200と通信するための通信インタフェースである。ドライブインタフェース115は、ドライブ部120と通信するための通信インタフェースである。ドライブインタフェース115は、例えば、SAS(Serial Attached SCSI)インタフェースである。
【0032】
以上のハードウェア構成によってCM110の処理機能が実現される。
図3は、CMが備える処理機能の構成例を示す図である。
図3に示すように、CM110は、記憶部130、I/O(Input/Output)受け付け部141、重複排除処理部142およびディスクアクセス処理部143を備える。
【0033】
記憶部130は、RAM112、SSD113など、CM110が備える記憶装置に確保される記憶領域である。記憶部130には、ボリューム管理データ131、ハッシュテーブル132およびリファレンスカウンタテーブル133が記憶される。
【0034】
CM110では、ホストサーバ200からのアクセス対象となる仮想ボリュームが生成される。仮想ボリュームにおいては、ホストサーバ200からの要求に応じてデータが書き込まれた領域に対してのみ、ストレージプールから物理領域が割り当てられる。ストレージプールは、ドライブ部120に搭載された複数のHDDを用いて実現され、1以上の仮想ボリュームによって共用される記憶領域である。
【0035】
また、仮想ボリュームへのデータの書き込みの際には、データが重複して格納されないように重複排除処理が実行される。具体的には、ストレージプールは、一定サイズのスロットに分割されて管理され、仮想ボリュームに対してはスロット単位で物理領域が割り当てられる。また、仮想ボリュームに対する書き込みデータは、スロットと同じサイズの論理ブロックに分割される。そして、分割された論理ブロックと同じデータが格納されたスロットが存在しない場合にのみ、その論理ブロックに新たなスロットが割り当てられ、割り当てられたスロットに論理ブロックのデータが格納される。
【0036】
ボリューム管理データ131は、仮想ボリュームに関する管理データである。例えば、ボリューム管理データ131は、仮想ボリュームの構成情報や、仮想ボリューム内の各論理ブロックと割り当てられたスロットとの対応関係を示す情報などを含む。
【0037】
ハッシュテーブル132およびリファレンスカウンタテーブル133は、重複排除処理に関する管理データである。ハッシュテーブル132には、スロットのデータに基づいて算出されるハッシュ値と、そのスロットの位置情報とが対応付けて登録される。リファレンスカウンタテーブル133には、スロットごとにリファレンスカウンタのカウント値が登録されている。このカウント値は、スロットのデータがいくつの論理ブロックから参照されているか(すなわち、スロットについてのデータの重複数)を示す。
【0038】
なお、ハッシュテーブル132に登録されたハッシュ値は重複判定のために参照されることから、ハッシュテーブル132は、高速にアクセス可能なメモリ(例えばRAM112)に記憶されることが望ましい。この目的のため、ハッシュテーブル132は、仮想ボリュームに対するI/O処理時にキャッシュ領域として使用されるメモリ上に記憶される場合があり、この場合にはハッシュテーブル132は「ハッシュキャッシュ」と呼ばれることがある。
【0039】
I/O受け付け部141、重複排除処理部142およびディスクアクセス処理部143の処理は、例えば、プロセッサ111が所定のアプリケーションプログラムを実行することで実現される。
【0040】
I/O受け付け部141は、ホストサーバ200から、仮想ボリュームに対するI/O要求(書き込み要求、読み出し要求など)を受信し、要求に応じた処理が完了すると応答を返す。
【0041】
重複排除処理部142は、書き込みが要求された書き込みデータを論理ブロックに分割し、各論理ブロックにストレージプールからスロットを割り当てる。このとき、重複排除処理部142は、同じデータが重複してストレージプールに格納されないように、同じデータを含む論理ブロックには同一のスロットを割り当てる。
【0042】
ディスクアクセス処理部143は、スロットに対するデータの読み書きを実行する。また、ストレージプールがRAID(Redundant Array of Inexpensive Disks)ボリューム(RAIDによって制御される論理記憶領域)として実現される場合、ディスクアクセス処理部143は、スロットに対するデータの書き込みをRAIDによって制御する。
【0043】
次に、
図4~
図7を用いて、重複排除処理に関する比較例について説明し、その後に第2の実施の形態における重複排除処理について説明する。
図4は、ハッシュテーブルの比較例を示す図である。
図4に示すハッシュテーブル132aは、
図3に示したハッシュテーブル132の比較例である。
【0044】
本比較例では、仮想ボリュームに対する物理領域の割り当て元となるストレージプールは、一定サイズ(例えば16GB)のコンテナに分割されて管理される。そして、各コンテナがさらに一定サイズのスロットに分割される。各コンテナにはコンテナを識別するためのコンテナ番号(コンテナNo.)が付与され、各コンテナに含まれる各スロットにはスロットを識別するためのスロット番号(スロットNo.)が付与される。スロット番号は、コンテナにおけるスロットの位置を示す。したがって、コンテナ番号とスロット番号との組み合わせによってストレージプール内の各スロットが特定される。
【0045】
なお、コンテナはストレージプール上のアドレスが連続する領域に確保される。そして、同一コンテナにおいてスロット番号が隣接するスロットは、ストレージプール上で隣接する領域に設定される。
【0046】
また、本比較例では、コンテナ番号およびスロット番号の組み合わせによって識別されるスロットは、一定数(例えば128個)ごとにグループ化されて管理される。本明細書では、このグループを「バンドル」と呼ぶ。バンドルは、バンドル番号(バンドルNo.)によって識別される。また、スロットが属するバンドルは、そのスロットに対応するハッシュ値を用いた特定の計算によって一意に特定される。例えば、スロットが属するバンドルのバンドル番号は、スロットに対応するハッシュ値をバンドルの総数で除算した場合の剰余として算出される。
【0047】
したがって、
図4に示すハッシュテーブル132aの各レコードには、スロットを識別するコンテナ番号およびスロット番号の組み合わせと、スロットに格納されたデータに基づいて算出されたハッシュ値と、スロットが属するバンドルのバンドル番号とが対応付けて登録される。
【0048】
図5は、リファレンスカウンタテーブルのデータ構成例を示す図である。前述のように、リファレンスカウンタテーブル133には、スロットごとにリファレンスカウンタのカウント値(以下、単に「リファレンスカウンタ」と記載する)が登録される。スロットが上記のように管理される場合、リファレンスカウンタテーブル133には、
図5に示すように、リファレンスカウンタと、コンテナ番号およびスロット番号の組み合わせとが対応付けて登録される。
【0049】
図6は、比較例におけるデータ書き込み処理手順を示すフローチャートの例である。
[ステップS11]I/O受け付け部141は、ホストサーバ200から仮想ボリュームに対するデータの書き込み要求を書き込みデータとともに受信する。重複排除処理部142は、書き込みデータをスロットと同じサイズの論理ブロックに分割する。
【0050】
[ステップS12]ステップS20までのブロック書き込みループが実行される。ブロック書き込みループは、分割された論理ブロックのそれぞれを処理対象として実行される。
【0051】
[ステップS13]重複排除処理部142は、論理ブロックのデータに基づいてハッシュ値を算出する。ハッシュ値は、例えば、SHA(Secure Hash Algorithm)-1のハッシュ関数を用いて算出される。
【0052】
[ステップS14]重複排除処理部142は、算出されたハッシュ値に基づいてバンドルを選択する。例えば、重複排除処理部142は、ハッシュ値をバンドルの総数で除算した場合の剰余としてバンドル番号を算出し、そのバンドル番号が示すバンドルを選択する。
【0053】
[ステップS15]重複排除処理部142は、ハッシュテーブル132aのレコードのうち、選択されたバンドルに対応するレコードに登録されたハッシュ値の中から、ステップS13で算出されたハッシュ値と一致するものを検索する。
【0054】
[ステップS16]重複排除処理部142は、該当するハッシュ値が存在したかを判定する。該当するハッシュ値が存在した場合、処理がステップS19に進められ、該当するハッシュ値が存在しなかった場合、処理がステップS17に進められる。
【0055】
[ステップS17]重複排除処理部142は、ストレージプールから未使用のスロットを選択し、そのスロットに論理ブロックのデータを格納するようにディスクアクセス処理部143に依頼する。このとき、重複排除処理部142は、前回のデータ格納時に選択されたスロットに隣接する次の領域のスロットを、可能な限り選択するようにする。これにより、シーケンシャルアクセスが行われた場合に仮想ボリューム上の論理アドレスが近いデータがストレージプール上の隣接する領域に格納されるようになり、その結果、データ読み出しの際の読み出し速度が向上する。
【0056】
ディスクアクセス処理部143は、重複排除処理部142からの依頼に応じてスロットに論理ブロックのデータを格納する。
[ステップS18]重複排除処理部142は、ステップS13で算出されたハッシュ値に対応するレコードをハッシュテーブル132aに新たに登録する。このレコードには、ステップS14で算出されたバンドル番号と、算出されたハッシュ値と、ステップS17で選択されたスロットを示すコンテナ番号およびスロット番号とが対応付けて登録される。
【0057】
また、重複排除処理部142は、リファレンスカウンタテーブル133にレコードを新たに登録する。このレコードには、ステップS17で選択されたスロットを示すコンテナ番号およびスロット番号と、リファレンスカウンタの初期値「1」とが登録される。
【0058】
さらに、重複排除処理部142は、仮想ボリュームにおける論理ブロックの位置(例えば論理ブロックの先頭の論理アドレス)と、選択されたスロットを示すコンテナ番号およびスロット番号と対応付けてボリューム管理データ131に登録する。
【0059】
[ステップS19]重複排除処理部142は、ステップS15の検索でハッシュ値が一致したレコードからコンテナ番号およびスロット番号を抽出する。重複排除処理部142は、リファレンスカウンタテーブル133から、抽出されたコンテナ番号およびスロット番号に対応付けられたリファレンスカウンタを特定し、このリファレンスカウンタに「1」を加算する。
【0060】
また、重複排除処理部142は、仮想ボリュームにおける論理ブロックの位置(例えば論理ブロックの先頭の論理アドレス)と、選択されたスロットを示すコンテナ番号およびスロット番号と対応付けてボリューム管理データ131に登録する。
【0061】
[ステップS20]分割された論理ブロックのすべてについてステップS13~S19の処理が実行されると、処理がステップS21に進められる。
[ステップS21]I/O受け付け部141は、書き込み要求に対する応答をホストサーバ200に送信する。
【0062】
上記処理では、書き込みが要求された論理ブロックのデータに基づくハッシュ値がハッシュテーブル132に登録されていない場合には、データが重複していないと判定される。この場合、論理ブロックのデータが新たなスロットに格納され、論理ブロックとスロットとが対応付けられる。また、ハッシュ値に対応するリファレンスカウンタとして初期値「1」が登録される。一方、論理ブロックのデータに基づくハッシュ値がハッシュテーブル132に登録されている場合には、データが重複していると判定される。この場合、論理ブロックのデータの物理領域への格納はスキップされ、論理ブロックとスロットとが対応付けられるとともに、ハッシュ値に対応するリファレンスカウンタがインクリメントされる。
【0063】
また、ステップS15では、重複の有無の判定のために、論理ブロックのデータに基づくハッシュ値と一致するハッシュ値がハッシュテーブル132aから検索される。
図4に示したように、ハッシュテーブル132aでは、ハッシュ値および対応するスロットがバンドルによってグループ化されている。バンドルはハッシュ値から一意に決定されることから、ステップS15では、検索対象がハッシュテーブル132aの全体ではなく、論理ブロックのデータに基づくハッシュ値からステップS14で選択されたバンドルの範囲内に限定される。これにより、重複判定のためのハッシュテーブル132aの検索処理時間を短縮することが可能となり、その結果として、ホストサーバ200からの書き込み要求に対する応答時間を短縮できるようになっている。
【0064】
次に、I/O受け付け部141が、ホストサーバ200から仮想ボリュームからのデータの削除要求を受信した場合について説明する。この場合、仮想ボリューム上の削除対象のデータに含まれる論理ブロックごとに、次のような処理が実行される。重複排除処理部142は、ボリューム管理データ131を参照して、論理ブロックに対応付けられたスロットを特定する。重複排除処理部142は、リファレンスカウンタテーブル133から、特定されたスロットに対応するリファレンスカウンタを特定し、特定されたリファレンスカウンタから「1」を減算する。そして、重複排除処理部142は、ボリューム管理データ131において、論理ブロックに対応付けられたスロットの識別情報(コンテナ番号およびスロット番号)を削除する。
【0065】
なお、ホストサーバ200から仮想ボリューム上のデータの更新が要求された場合には、更新前のデータに含まれる各論理ブロックについて、上記と同様の処理が実行される。
このように、データの削除や更新によってリファレンスカウンタは減算される。そして、リファレンスカウンタが「0」になったとき、対応するスロットのデータはどの論理ブロックからも参照されていない状態となる。この場合、スロットに対応するハッシュ値は不要になるので、このハッシュ値をハッシュテーブル132aから削除する必要が生じる。
【0066】
本比較例では、リファレンスカウンタの値を監視して、リファレンスカウンタが「0」のスロットに対応するハッシュ値を削除する処理が、仮想ボリュームのI/O処理に対するバックグラウンド処理として実行される。この処理は、次の
図7に示すようにコンテナ単位で実行される。
【0067】
図7は、比較例におけるハッシュ値削除処理手順を示すフローチャートの例である。
[ステップS31]重複排除処理部142は、処理対象のコンテナを1つ選択する。この処理では、前回ハッシュ値の削除(ステップS37)が実行されたコンテナの次のコンテナ(コンテナ番号が1つ大きいコンテナ)が処理対象として選択される。前回ハッシュ値の削除が実行されたコンテナがストレージプール上の末尾のコンテナ(コンテナ番号が最大のコンテナ)である場合には、先頭のコンテナが選択される。
【0068】
[ステップS32]重複排除処理部142は、処理対象のコンテナにおける未使用スロットの割合を示すコンテナ未使用率を算出する。具体的には、重複排除処理部142は、リファレンスカウンタテーブル133から該当コンテナのコンテナ番号に対応するリファレンスカウンタを取得し、リファレンスカウンタが「0」のスロット数をカウントする。重複排除処理部142は、該当コンテナに含まれるスロットの総数に対する、リファレンスカウンタが「0」のスロット数の割合を、コンテナ未使用率として算出する。
【0069】
[ステップS33]重複排除処理部142は、算出されたコンテナ未使用率が所定の閾値(例えば30%)以上かを判定する。コンテナ未使用率が閾値以上の場合、処理がステップS34に進められる。一方、コンテナ未使用率が閾値未満の場合、処理がステップS31に進められ、次のコンテナが選択される。
【0070】
[ステップS34]重複排除処理部142は、ハッシュテーブル132aに登録されたハッシュ値の中から、対応付けられたコンテナ番号が処理対象のコンテナのコンテナ番号と一致するハッシュ値を検索する。この検索は、ハッシュテーブル132aの先頭側から順に行われる。
【0071】
[ステップS35]重複排除処理部142は、ステップS34の検索により該当するハッシュ値が見つかったかを判定する。該当するハッシュ値が見つかった場合、処理がステップS36に進められ、見つからなかった場合、ハッシュ値削除処理が終了する。
【0072】
[ステップS36]重複排除処理部142は、ステップS35で見つかったハッシュ値に対応するコンテナ番号およびスロット番号をハッシュテーブル132aから取得する。重複排除処理部142は、これらのコンテナ番号およびスロット番号に対応するリファレンスカウンタをリファレンスカウンタテーブル133から取得し、リファレンスカウンタが「0」であるかを判定する。リファレンスカウンタが「0」の場合、処理がステップS37に進められ、リファレンスカウンタが「1」以上の場合、処理がステップS38に進められる。
【0073】
[ステップS37]重複排除処理部142は、ステップS35で見つかったハッシュ値を含むレコードをハッシュテーブル132aから削除する。これにより、リファレンスカウンタが「0」のスロットに対応するハッシュ値が削除される。また、削除されたレコードに対応するスロットは未使用状態(解放状態)となり、他の論理ブロックに対して割り当てることが可能になる。
【0074】
[ステップS38]重複排除処理部142は、ステップS34の検索処理によってハッシュテーブル132aの末尾まで検索済みかを判定する。ハッシュテーブル132aの末尾まで検索が済んでいない場合(すなわち、ステップS35で見つかったハッシュ値を含むレコードがハッシュテーブル132aの末尾のレコードでない場合)、処理がステップS34に進められる。この場合、ステップS34では、ステップS35で見つかったハッシュ値を含むレコードの次のレコードから検索が続けられる。一方、ハッシュテーブル132aの末尾まで検索済みの場合、ハッシュ値削除処理が終了する。
【0075】
上記処理では、コンテナ単位でリファレンスカウンタが「0」のスロットの割合(コンテナ未使用率)が算出され、この割合が閾値以上のコンテナを対象としてハッシュ値が削除される。コンテナはストレージプール上の連続した領域に確保されるので、例えば大きなデータの書き込みが要求されることなどにより、1つのコンテナには同一または近いタイミングでデータが格納されやすい。このため、1つのコンテナ内のデータは同一または近いタイミングで削除されやすい。したがって、上記のようにコンテナ単位でハッシュ値を削除することで、比較的多くのスロットに対応するハッシュ値を一度に削除できる可能性が高くなり、削除処理の効率がよい。
【0076】
ところで、
図7に示したハッシュ値削除処理では、削除処理対象のコンテナに含まれるスロットに対応するハッシュ値をハッシュテーブル132aから検索する際に(ステップS34に相当)、ハッシュテーブル132aの全体が検索対象となる。ハッシュテーブル132aのレコード数(すなわち、ストレージプール内のスロット数)が多いほど、検索処理にかかる時間が長くなる。近年、仮想ボリュームの容量が大きくなる傾向があり、それに伴って物理領域の割り当て元であるストレージプールの容量、すなわちストレージプール内のスロット数が増大している。このため、ハッシュテーブル132aからの該当コンテナに対応するハッシュ値の検索処理が長くなり、検索処理負荷が高くなっているという問題がある。このような検索処理負荷が高いほど、仮想ボリュームに対するI/O処理速度を低下させる可能性がある。
【0077】
また、
図6に示したデータ書き込み処理でも、ステップS15においてハッシュテーブル132aからハッシュ値が検索される。前述のように、この処理における検索範囲は1つのバンドルの範囲内に限定されるものの、ストレージプールの容量が増加するほど検索処理時間が長くなることに変わりはなく、この検索処理時間を短縮できることが望まれる。
【0078】
そこで、第2の実施の形態では、次の
図8に示すようなハッシュテーブル132が使用される。このハッシュテーブル132を用いることで、ハッシュ値の検索にかかる時間が短縮される。
【0079】
図8は、第2の実施の形態におけるハッシュテーブルのデータ構成例を示す図である。本実施の形態では、コンテナが複数のコンテナグループに分類される。あるコンテナが属するコンテナグループは、そのコンテナのコンテナ番号から一意に決まる。例えば、コンテナのコンテナ番号をコンテナグループの総数で除算した場合の剰余として、対応するコンテナグループを識別するコンテナグループ番号(コンテナグループNo.)が算出される。
【0080】
図8に示すように、本実施の形態のハッシュテーブル132には、ハッシュ値、コンテナ番号およびスロット番号を含むレコードが、コンテナグループごとにまとめて登録される。また、
図4に示したハッシュテーブル132aと同様に、各レコードはハッシュ値から決まるバンドルに分類されているので、ハッシュテーブル132では、1つのコンテナグループに対応するテーブル領域において、各レコードがさらにバンドルごとにまとめて登録される。
【0081】
さらに、ハッシュテーブル132には、コンテナグループごとに重複頻度が登録される。重複頻度は、コンテナグループに属する各スロットに対応するリファレンスカウンタの合計値である。
【0082】
図9は、重複頻度の算出例を示す図である。なお、
図9に示すテーブル151は、スロットが属するコンテナグループのコンテナグループ番号と、スロットに格納されたデータと、スロットに対応するリファレンスカウンタと、コンテナグループに対応する重複頻度とを、わかりやすいように対応付けて示したものである。また、書き込みデータに含まれるアルファベットのそれぞれは、書き込みデータに含まれる各論理ブロックのデータを示す。
【0083】
まず、ホストサーバ200から仮想ボリュームに対して書き込みデータ152aの書き込みが要求されたとする。書き込みデータ152aには、データAが9個、データBが1個含まれている。データA,Bがコンテナグループ番号「1」に属する同一のコンテナ内のスロットに格納されたとすると、データA,Bが格納されたスロットに対応するリファレンスカウンタはそれぞれ「9」、「1」となる。この場合、コンテナグループ番号「1」に対応する重複頻度は「10」となる。
【0084】
次に、ホストサーバ200から仮想ボリュームに対して書き込みデータ152bの書き込みが要求されたとする。書き込みデータ152bには、データAが9個、データCが1個含まれている。この場合、データAが格納されているスロットに対応するリファレンスカウンタが「18」に更新され、コンテナグループ番号「1」に対応する重複頻度は「19」に更新される。また、データCはコンテナグループ番号「2」に属するコンテナ内のスロットに格納されたとする。この場合、データCが格納されたスロットに対応するリファレンスカウンタが「1」となり、コンテナグループ番号「2」に対応する重複頻度は「1」となる。
【0085】
次に、ホストサーバ200から仮想ボリュームに対して書き込みデータ152cの書き込みが要求されたとする。書き込みデータ152cには、データAが2個、データB,D~Jがそれぞれ1個含まれている。この場合、データAが格納されているスロットに対応するリファレンスカウンタが「20」に更新され、データBが格納されているスロットに対応するリファレンスカウンタが「2」に更新され、コンテナグループ番号「1」に対応する重複頻度が「22」に更新される。また、データD~Jはコンテナグループ番号「3」に属するコンテナ内のスロットに格納されたとする。この場合、データD~Jがそれぞれ格納されたスロットに対応するリファレンスカウンタが「1」となり、コンテナグループ番号「3」に対応する重複頻度は「7」となる。
【0086】
このように算出される重複頻度は、次のような性質を備える。重複頻度が高いほど、過去に仮想ボリュームに対するデータの書き込みが要求されたときに、そのデータに含まれる論理ブロックのデータが、対応するコンテナグループに属するスロットのデータと重複した頻度が高いことを示す。このため、その後に仮想ボリュームに対するデータの書き込みが要求された場合に、重複頻度が高いコンテナグループほど、コンテナグループに属するスロットのデータが論理ブロックのデータと重複する可能性が高いと推定される。このことから、次の
図10、
図11に示すデータ書き込み処理において、重複頻度が高い順にハッシュ値の検索範囲を順次選択していくことで、早期に検索ヒットが発生することを期待できる。
【0087】
図10、
図11は、データ書き込み処理の手順を示すフローチャートの例である。
[ステップS41]I/O受け付け部141は、ホストサーバ200から仮想ボリュームに対するデータの書き込み要求を書き込みデータとともに受信する。重複排除処理部142は、書き込みデータをスロットと同じサイズの論理ブロックに分割する。
【0088】
[ステップS42]ステップS53までのブロック書き込みループが実行される。ブロック書き込みループは、分割された論理ブロックのそれぞれを処理対象として実行される。
【0089】
[ステップS43]重複排除処理部142は、論理ブロックのデータに基づいてハッシュ値を算出する。
[ステップS44]重複排除処理部142は、ハッシュテーブル132を参照し、重複頻度が最も高いコンテナグループを選択する。
【0090】
[ステップS45]重複排除処理部142は、ステップS43で算出されたハッシュ値に基づいてバンドルを選択する。例えば、重複排除処理部142は、ハッシュ値をバンドルの総数で除算した場合の剰余としてバンドル番号を算出し、そのバンドル番号が示すバンドルを選択する。なお、このバンドル選択は、ステップS43の直後に実行されてもよい。
【0091】
[ステップS46]重複排除処理部142は、ハッシュテーブル132のレコードのうち、ステップS44で選択されたコンテナグループに対応し、かつ、ステップS45で選択されたバンドルに対応するレコードに登録されたハッシュ値の中から、ステップS43で算出されたハッシュ値と一致するものを検索する。
【0092】
[ステップS47]重複排除処理部142は、該当するハッシュ値が存在したかを判定する。該当するハッシュ値が存在した場合、処理がステップS51に進められ、該当するハッシュ値が存在しなかった場合、処理がステップS48に進められる。
【0093】
[ステップS48]重複排除処理部142は、ステップS44においてすべてのコンテナグループを選択済みかを判定する。未選択のコンテナグループがある場合、処理がステップS44に進められ、未選択のコンテナグループの中から重複頻度が最も高いコンテナグループが選択される。一方、該当するハッシュ値が存在しなかった場合、処理がステップS49に進められる。
【0094】
[ステップS49]重複排除処理部142は、ストレージプールから未使用のスロットを選択し、そのスロットに論理ブロックのデータを格納するようにディスクアクセス処理部143に依頼する。このとき、重複排除処理部142は、前回のデータ格納時に選択されたスロットに隣接する次の領域のスロットを、可能な限り選択するようにする。これにより、シーケンシャルアクセスが行われた場合に仮想ボリューム上の論理アドレスが近いデータがストレージプール上の隣接する領域に格納されるようになり、その結果、データ読み出しの際の読み出し速度が向上する。
【0095】
ディスクアクセス処理部143は、重複排除処理部142からの依頼に応じてスロットに論理ブロックのデータを格納する。
[ステップS50]重複排除処理部142は、ステップS43で算出されたハッシュ値に対応するレコードをハッシュテーブル132に新たに登録する。このレコードには、算出されたハッシュ値と、ステップS49で選択されたスロットを示すコンテナ番号およびスロット番号とが対応付けて登録される。重複排除処理部142は、このレコードを、ハッシュテーブル132の領域のうち、コンテナ番号に基づくコンテナグループ番号に対応し、かつ、ステップS45で算出されたバンドル番号に対応する領域に登録する。
【0096】
また、重複排除処理部142は、リファレンスカウンタテーブル133にレコードを新たに登録する。このレコードには、ステップS49で選択されたスロットを示すコンテナ番号およびスロット番号と、リファレンスカウンタの初期値「1」とが登録される。さらに、重複排除処理部142は、ハッシュテーブル132の重複頻度のうち、コンテナ番号に基づくコンテナグループ番号に対応する重複頻度に「1」を加算する。
【0097】
また、重複排除処理部142は、仮想ボリュームにおける論理ブロックの位置(例えば論理ブロックの先頭の論理アドレス)と、選択されたスロットを示すコンテナ番号およびスロット番号と対応付けてボリューム管理データ131に登録する。
【0098】
[ステップS51]重複排除処理部142は、ステップS46の検索でハッシュ値が一致したレコードからコンテナ番号およびスロット番号を抽出する。重複排除処理部142は、リファレンスカウンタテーブル133から、抽出されたコンテナ番号およびスロット番号に対応付けられたリファレンスカウンタを特定し、このリファレンスカウンタに「1」を加算する。
【0099】
また、重複排除処理部142は、仮想ボリュームにおける論理ブロックの位置(例えば論理ブロックの先頭の論理アドレス)と、選択されたスロットを示すコンテナ番号およびスロット番号と対応付けてボリューム管理データ131に登録する。
【0100】
[ステップS52]重複排除処理部142は、ハッシュテーブル132の重複頻度のうち、コンテナ番号に基づくコンテナグループ番号に対応する重複頻度に「1」を加算する。
【0101】
[ステップS53]分割された論理ブロックのすべてについてステップS43~S51の処理が実行されると、処理がステップS54に進められる。
[ステップS54]I/O受け付け部141は、書き込み要求に対する応答をホストサーバ200に送信する。
【0102】
上記処理では、ステップS44で重複頻度が高い順にコンテナグループが選択され、選択されたコンテナグループを検索範囲としてステップS46のハッシュ値検索が実行される。前述のように、仮想ボリュームに対するデータの書き込みが要求された場合に、重複頻度が高いコンテナグループほど、コンテナグループに属するスロットのデータが論理ブロックのデータと重複する可能性が高いと推定される。このため、上記のように重複頻度が高い順にコンテナグループを選択してハッシュ値検索を行うことで、すべてのコンテナグループを選択する前に、早期に一致するハッシュ値が見つかる可能性が高くなる。一致するハッシュ値が見つかるまでの間に選択されるコンテナグループ数が少ないほど、すなわち一致するハッシュ値が早期に見つかるほど、
図6の比較例の場合よりハッシュ値の検索範囲が狭くなり、検索にかかる時間が短くなる。したがって、上記処理により、重複判定のためのハッシュ値検索にかかる平均時間を短縮できる。その結果として、書き込み要求に対するホストサーバ200への応答時間を短縮できる。
【0103】
図12は、データ削除処理の手順を示すフローチャートの例である。I/O受け付け部141が、ホストサーバ200から仮想ボリュームからのデータの削除要求を受信したとする。このとき、仮想ボリューム上の削除対象のデータに含まれる論理ブロックごとに、
図12の処理が実行される。
【0104】
[ステップS61]重複排除処理部142は、ボリューム管理データ131を参照して、論理ブロックに対応付けられたスロットを特定する。
[ステップS62]重複排除処理部142は、リファレンスカウンタテーブル133から、特定されたスロットに対応するリファレンスカウンタを特定し、特定されたリファレンスカウンタから「1」を減算する。
【0105】
[ステップS63]重複排除処理部142は、ボリューム管理データ131において、論理ブロックに対応付けられたスロットの識別情報(コンテナ番号およびスロット番号)を削除する。
【0106】
なお、ホストサーバ200から仮想ボリューム上のデータの更新が要求された場合には、更新前のデータに含まれる各論理ブロックについて
図12の処理が実行される。
図13は、ハッシュ値削除処理の手順を示すフローチャートの例である。
【0107】
[ステップS71]重複排除処理部142は、処理対象のコンテナを1つ選択する。この処理では、前回ハッシュ値の削除(ステップS78)が実行されたコンテナの次のコンテナ(コンテナ番号が1つ大きいコンテナ)が処理対象として選択される。前回ハッシュ値の削除が実行されたコンテナがストレージプール上の末尾のコンテナ(コンテナ番号が最大のコンテナ)である場合には、先頭のコンテナが選択される。
【0108】
[ステップS72]重複排除処理部142は、処理対象のコンテナにおける未使用スロットの割合を示すコンテナ未使用率を算出する。具体的には、重複排除処理部142は、リファレンスカウンタテーブル133から該当コンテナのコンテナ番号に対応するリファレンスカウンタを取得し、リファレンスカウンタが「0」のスロット数をカウントする。重複排除処理部142は、該当コンテナに含まれるスロットの総数に対する、リファレンスカウンタが「0」のスロット数の割合を、コンテナ未使用率として算出する。
【0109】
[ステップS73]重複排除処理部142は、算出されたコンテナ未使用率が所定の閾値(例えば30%)以上かを判定する。コンテナ未使用率が閾値以上の場合、処理がステップS74に進められる。一方、コンテナ未使用率が閾値未満の場合、処理がステップS71に進められ、次のコンテナが選択される。
【0110】
[ステップS74]重複排除処理部142は、処理対象のコンテナのコンテナ番号に基づいて、このコンテナが属するコンテナグループを選択する。例えば、処理対象のコンテナのコンテナ番号をコンテナグループの総数で除算した場合の剰余として、該当するコンテナグループを識別するコンテナグループ番号が算出される。
【0111】
[ステップS75]重複排除処理部142は、ハッシュテーブル132の領域のうち、ステップS74で選択されたコンテナグループに対応するレコードの領域を検索範囲として、ハッシュテーブル132に登録されたハッシュ値の中から、対応付けられたコンテナ番号が処理対象のコンテナのコンテナ番号と一致するハッシュ値を検索する。この検索は、検索範囲内の先頭側から順に行われる。
【0112】
[ステップS76]重複排除処理部142は、ステップS75の検索により該当するハッシュ値が見つかったかを判定する。該当するハッシュ値が見つかった場合、処理がステップS77に進められ、見つからなかった場合、ハッシュ値削除処理が終了する。
【0113】
[ステップS77]重複排除処理部142は、ステップS76で見つかったハッシュ値に対応するコンテナ番号およびスロット番号をハッシュテーブル132から取得する。重複排除処理部142は、これらのコンテナ番号およびスロット番号に対応するリファレンスカウンタをリファレンスカウンタテーブル133から取得し、リファレンスカウンタが「0」であるかを判定する。リファレンスカウンタが「0」の場合、処理がステップS78に進められ、リファレンスカウンタが「1」以上の場合、処理がステップS79に進められる。
【0114】
[ステップS78]重複排除処理部142は、ステップS76で見つかったハッシュ値を含むレコードをハッシュテーブル132から削除する。これにより、リファレンスカウンタが「0」のスロットに対応するハッシュ値が削除される。また、削除されたレコードに対応するスロットは未使用状態(解放状態)となり、他の論理ブロックに対して割り当てることが可能になる。
【0115】
[ステップS79]重複排除処理部142は、ステップS34の検索処理によって、ハッシュテーブル132における該当コンテナグループに対応する領域の末尾まで検索済みかを判定する。該当領域の末尾まで検索が済んでいない場合(すなわち、ステップS76で見つかったハッシュ値を含むレコードが該当領域の末尾のレコードでない場合)、処理がステップS75に進められる。この場合、ステップS75では、ステップS76で見つかったハッシュ値を含むレコードの次のレコードから検索が続けられる。一方、該当領域の末尾まで検索済みの場合、ハッシュ値削除処理が終了する。
【0116】
上記処理では、ステップS75でのハッシュテーブル132からのハッシュ値の検索範囲が、処理対象のコンテナが属するコンテナグループの範囲に限定される。このため、
図7の比較例の場合よりハッシュ値の検索範囲が狭くなる。その結果、ハッシュ値の検索処理にかかる時間を短縮でき、検索処理負荷を軽減できる。また、検索処理負荷の軽減により、仮想ボリュームに対するI/O処理に与える検索処理負荷の影響を軽減でき、I/O処理速度を向上させることができる。
【0117】
なお、上記の第2の実施の形態では、仮想ボリューム(論理記憶領域)に対する書き込みデータが、重複を排除して物理記憶領域に格納される例について説明した。しかし、他の例として、書き込みが要求されたファイルが、データの重複を排除して物理記憶領域に格納されてもよい。この場合、ファイルの書き込みの際に、そのファイルが上記の論理ブロックに相当するデータブロックに分割され、データブロックが重複しているかが判定される。また、リファレンスカウンタは、ファイルからの参照数を示すことになる。
【0118】
また、上記の各実施の形態に示した装置(例えば、情報処理装置1、CM110)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。
【0119】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0120】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【符号の説明】
【0121】
1 情報処理装置
2 記憶装置
11 記憶部
12 処理部
13 管理テーブル
S1~S4 ステップ