(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-11
(45)【発行日】2023-05-19
(54)【発明の名称】ストレージシステム、ストレージ制御装置およびプログラム
(51)【国際特許分類】
G06F 16/174 20190101AFI20230512BHJP
G06F 3/06 20060101ALI20230512BHJP
G06F 13/10 20060101ALI20230512BHJP
G06F 11/20 20060101ALI20230512BHJP
【FI】
G06F16/174
G06F3/06 301W
G06F3/06 540
G06F13/10 340A
G06F11/20 694
(21)【出願番号】P 2019138868
(22)【出願日】2019-07-29
【審査請求日】2022-04-07
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】松村 振一郎
【審査官】甲斐 哲雄
(56)【参考文献】
【文献】特開2017-049806(JP,A)
【文献】特開2014-203362(JP,A)
【文献】特開2019-036130(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/10-16/188
G06F 3/06
G06F 13/10
G06F 11/20
(57)【特許請求の範囲】
【請求項1】
データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられる第1のハッシュキャッシュを記憶する第1の記憶部と、前記第1のハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する第1のデータの第1のハッシュ値を計算して前記第1のハッシュキャッシュを復元する第1の処理部と、を備える第1のストレージ制御装置と、
第2のハッシュキャッシュを記憶する第2の記憶部と、前記第1のハッシュ値と前記第1のデータの格納先の第1のアドレスとを前記第1のストレージ制御装置から取得し、前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記第2のハッシュキャッシュに基づいて検出すると、前記第2のハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する第2の処理部と、を備える第2のストレージ制御装置と、
を有するストレージシステム。
【請求項2】
前記第2の処理部は、非参照データを削除するガベージコレクションに用いられる、各データの参照数を保持する参照数カウンタのうち、前記第1のデータの第1の参照数に、前記第2のデータの第2の参照数を加算し、前記第2の参照数を0に設定する、
請求項1記載のストレージシステム。
【請求項3】
前記第1の処理部は、前記第1のハッシュ値と同じ第3のハッシュ値が前記第1のハッシュキャッシュに登録済の場合、非参照データを削除するガベージコレクションに用いられる、各データの参照数を保持する参照数カウンタのうち、前記第1のデータの第1の参照数と前記第3のハッシュ値に対応する第3のデータの第3の参照数とを比較し、当該比較に応じて、前記第1のデータを削除対象とするか、または、前記第3のデータを削除対象とするかを決定する、
請求項1記載のストレージシステム。
【請求項4】
前記第1の処理部は、
前記第1の参照数が前記第3の参照数以下の場合、前記マップ情報に含まれる、前記第1のアドレスを前記第3のデータの格納先の第3のアドレスに変更し、前記第3の参照数に前記第1の参照数を加算し、前記第1の参照数を0に設定することで、前記第1のデータを前記ガベージコレクションによる削除対象とし、
前記第1の参照数が前記第3の参照数よりも大きい場合、前記マップ情報に含まれる、前記第3のアドレスを前記第1のアドレスに変更し、前記第1の参照数に前記第3の参照数を加算し、前記第3の参照数を0に設定することで、前記第3のデータを前記ガベージコレクションによる削除対象とする、
請求項3記載のストレージシステム。
【請求項5】
複数のストレージ制御装置により複数のデータの重複排除を分担して実行し、何れかのストレージ制御装置がダウンすると、他のストレージ制御装置により当該ストレージ制御装置による重複排除を代行するストレージシステムに用いられるストレージ制御装置であって、
データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部と、
前記ハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する前記データの前記ハッシュ値を計算して前記ハッシュキャッシュを復元し、前記ハッシュキャッシュに復元した前記ハッシュ値と前記ハッシュ値に対応する前記データの格納先のアドレスとを前記他のストレージ制御装置に送信する処理部と、
を有するストレージ制御装置。
【請求項6】
複数のストレージ制御装置により複数のデータの重複排除を分担して実行し、何れかのストレージ制御装置がダウンすると、他のストレージ制御装置により当該ストレージ制御装置による重複排除を代行するストレージシステムに用いられるコンピュータに、
データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部における前記ハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する前記データの前記ハッシュ値を計算して前記ハッシュキャッシュを復元し、
前記ハッシュキャッシュに復元した前記ハッシュ値と前記ハッシュ値に対応する前記データの格納先のアドレスとを前記他のストレージ制御装置に送信する、
処理を実行させるプログラム。
【請求項7】
データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部と、
他のストレージ制御装置により前記他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と前記第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを前記他のストレージ制御装置から取得し、前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記ハッシュキャッシュに基づいて検出すると、前記ハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する処理部と、
を有するストレージ制御装置。
【請求項8】
コンピュータに、
記憶部に記憶されるハッシュキャッシュであって、データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示す前記ハッシュキャッシュを用いて前記データの重複排除を行い、
他のストレージ制御装置により前記他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と前記第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを前記他のストレージ制御装置から取得し、
前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記ハッシュキャッシュに基づいて検出すると、前記ハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はストレージシステム、ストレージ制御装置およびプログラムに関する。
【背景技術】
【0002】
データの保存にストレージシステムが利用されている。ストレージシステムは、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの記憶デバイスを複数搭載可能であり、大容量の記憶領域を提供する。ストレージシステムは、例えば記憶デバイスに対するデータの書き込みや読み出しのアクセス制御を行うストレージ制御装置を内蔵する。
【0003】
記憶デバイスの記憶領域を効率的に利用するため、ストレージ制御装置により重複排除が行われることがある。重複排除では、新規データの書き込みの際、記憶デバイスに書き込み済である単位データの書き込みを行わないようにし、新規データにおける当該単位データの部分については、既存の単位データを参照することで、記憶容量を節約する。書き込み済の単位データの管理には、単位データから計算されるハッシュ値が用いられる。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2010-224845号公報
【文献】特開2015-212971号公報
【文献】特開2019-16293号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
ストレージシステムでは、複数のストレージ制御装置により各データの重複排除を分担することがある。この場合、複数のストレージ制御装置の各々は、自装置が担当する書き込み済のデータのハッシュ値を、比較的高速にアクセス可能な揮発性メモリ上のハッシュキャッシュに保持して、データ書き込みの応答性能を高めることが考えられる。
【0006】
あるストレージ制御装置が障害などでダウンした場合には、他のストレージ制御装置により、ダウンしたストレージ制御装置が担当していたデータの重複排除を代行し得る。ダウンしたストレージ制御装置が保持していたハッシュキャッシュは消失する。他のストレージ制御装置は、重複排除の代行対象のデータの書き込みの際、当該データのハッシュ値を計算して、自装置のハッシュキャッシュに登録し、記憶装置に当該データを書き込む。
【0007】
このとき、ダウンしたストレージ制御装置によって当該データと同じデータが過去に記憶装置に書き込み済であったとしても、消失したハッシュキャッシュの情報は失われており、書き込み済を検出できない。このため、他のストレージ制御装置により、書き込み済のデータとは別個に、当該データが記憶装置に重複して書き込まれることになる。
【0008】
その後、ダウンしたストレージ制御装置が復旧すると、復旧したストレージ制御装置を含む複数のストレージ制御装置により各データの重複排除を再度分担し得る。復旧したストレージ制御装置は、記憶装置に記憶された、自装置が担当するデータのハッシュ値を計算することでハッシュキャッシュを復元し得る。しかし、ストレージ制御装置のダウン中に重複して書き込まれたデータに対する参照が残ると、当該重複して書き込まれたデータを削除対象にできないという問題がある。
【0009】
1つの側面では、本発明は、重複して書き込まれたデータを削除可能にできるストレージシステム、ストレージ制御装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、ストレージシステムが提供される。このストレージシステムは、第1のストレージ制御装置と第2のストレージ制御装置とを有する。第1のストレージ制御装置は、データのハッシュ値と記憶装置におけるデータの格納先のアドレスとの対応を示し、データの重複排除に用いられる第1のハッシュキャッシュを記憶する第1の記憶部と、第1のハッシュキャッシュが消失した場合に、記憶装置における所定の管理単位に属する第1のデータの第1のハッシュ値を計算して第1のハッシュキャッシュを復元する第1の処理部と、を備える。第2のストレージ制御装置は、第2のハッシュキャッシュを記憶する第2の記憶部と、第1のハッシュ値と第1のデータの格納先の第1のアドレスとを第1のストレージ制御装置から取得し、第1のハッシュ値と同じ第2のハッシュ値である第2のデータを第2のハッシュキャッシュに基づいて検出すると、第2のハッシュキャッシュから第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、第2のデータの格納先の第2のアドレスを第1のアドレスに変更する第2の処理部と、を備える。
【0011】
また、1つの態様では、複数のストレージ制御装置により複数のデータの重複排除を分担して実行し、何れかのストレージ制御装置がダウンすると、他のストレージ制御装置により当該ストレージ制御装置による重複排除を代行するストレージシステムに用いられるストレージ制御装置が提供される。このストレージ制御装置は、記憶部と処理部とを有する。記憶部は、データのハッシュ値と記憶装置におけるデータの格納先のアドレスとの対応を示し、データの重複排除に用いられるハッシュキャッシュを記憶する。処理部は、ハッシュキャッシュが消失した場合に、記憶装置における所定の管理単位に属するデータのハッシュ値を計算してハッシュキャッシュを復元し、ハッシュキャッシュに復元したハッシュ値と当該ハッシュ値に対応するデータの格納先のアドレスとを他のストレージ制御装置に送信する。
【0012】
また、1つの態様では、プログラムが提供される。このプログラムは、複数のストレージ制御装置により複数のデータの重複排除を分担して実行し、何れかのストレージ制御装置がダウンすると、他のストレージ制御装置により当該ストレージ制御装置による重複排除を代行するストレージシステムに用いられるコンピュータに、データのハッシュ値と記憶装置におけるデータの格納先のアドレスとの対応を示し、データの重複排除に用いられるハッシュキャッシュを記憶する記憶部におけるハッシュキャッシュが消失した場合に、記憶装置における所定の管理単位に属するデータのハッシュ値を計算してハッシュキャッシュを復元し、ハッシュキャッシュに復元したハッシュ値と当該ハッシュ値に対応するデータの格納先のアドレスとを他のストレージ制御装置に送信する、処理を実行させる。
【0013】
また、1つの態様では、ストレージ制御装置が提供される。このストレージ制御装置は、記憶部と処理部とを有する。記憶部は、データのハッシュ値と記憶装置におけるデータの格納先のアドレスとの対応を示し、データの重複排除に用いられるハッシュキャッシュを記憶する。処理部は、他のストレージ制御装置により他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを他のストレージ制御装置から取得し、第1のハッシュ値と同じ第2のハッシュ値である第2のデータをハッシュキャッシュに基づいて検出すると、ハッシュキャッシュから第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、第2のデータの格納先の第2のアドレスを第1のアドレスに変更する。
【0014】
また、1つの態様では、プログラムが提供される。このプログラムは、コンピュータに、記憶部に記憶されるハッシュキャッシュであって、データのハッシュ値と記憶装置におけるデータの格納先のアドレスとの対応を示すハッシュキャッシュを用いてデータの重複排除を行い、他のストレージ制御装置により他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを他のストレージ制御装置から取得し、第1のハッシュ値と同じ第2のハッシュ値である第2のデータをハッシュキャッシュに基づいて検出すると、ハッシュキャッシュから第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、第2のデータの格納先の第2のアドレスを第1のアドレスに変更する、処理を実行させる。
【発明の効果】
【0015】
1つの側面では、重複して書き込まれたデータを削除可能にできる。
【図面の簡単な説明】
【0016】
【
図1】第1の実施の形態のストレージシステムを示す図である。
【
図2】第2の実施の形態のストレージシステムの例を示す図である。
【
図4】ストレージシステムの機能例を示す図である。
【
図6】ハッシュテーブル消失時の重複書き込みの例を示す図である。
【
図7】コンテナおよびスロットの例を示す図である。
【
図8】コンテナに格納される情報の例を示す図である。
【
図11】ハッシュテーブルの復元時の処理例を示す図である。
【
図13】ブロックマップおよび参照数の更新例を示す図である。
【
図14】初期化処理の例を示すフローチャートである。
【
図15】ハッシュ値統合処理の例を示すフローチャートである。
【
図16】他CMハッシュ値統合処理の例を示すフローチャートである。
【
図17】ストレージシステムの他の構成例を示す図である。
【発明を実施するための形態】
【0017】
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0018】
図1は、第1の実施の形態のストレージシステムを示す図である。
ストレージシステム1は、情報処理装置2に接続され、情報処理装置2の処理に用いられるデータを記憶する。ストレージシステム1は、ストレージ制御装置10,20および記憶装置30を有する。
【0019】
ストレージ制御装置10,20は、情報処理装置2によるデータに対するアクセス要求に応じて、記憶装置30に対するデータの書き込みや、データの読み出しを制御する。記憶装置30は、HDDやSSDなどの複数の記憶デバイスを内蔵し、ストレージ制御装置10,20により書き込まれたデータを記憶する。
【0020】
ストレージ制御装置10,20は、書き込み対象の各データに対する重複排除の制御を分担する。例えば、データのハッシュ値を、稼働中のストレージ制御装置10,20の数(例えば、2)で割った剰余に基づいて、当該データの担当を決めることが考えられる。一例では、剰余が0であればストレージ制御装置10を担当とし、剰余が1であればストレージ制御装置20を担当とする。担当のストレージ制御装置は、ストレージ制御装置10,20の何れかにより決定されてもよいし、ストレージ制御装置10,20の各々により決定されてもよい(例えば、自装置が担当でなければ、該当データへのアクセス要求を担当のストレージ制御装置に転送する)。
【0021】
あるいは、ストレージシステム1は、情報処理装置2からデータの書き込み要求を受け付け、当該データの重複排除を何れのストレージ制御装置が担当するかを判定し、担当のストレージ制御装置に当該書き込み要求を転送する判定装置を更に有してもよい。更に、ストレージシステム1は、ストレージシステム1の外部に存在する当該判定装置に接続されて、判定装置を介して、情報処理装置2からデータの書き込み要求を、当該データの書き込みを担当するストレージ制御装置により受け付けてもよい。
【0022】
ストレージ制御装置10,20のうちの何れかが障害などによりダウン(停止)すると、正常稼働している残りのストレージ制御装置は、ダウンしたストレージ制御装置が担当すべきデータの重複排除を代行する。
【0023】
記憶部11,21は、RAM(Random Access Memory)などの揮発性記憶装置である。記憶部11は、ハッシュキャッシュ11aを記憶する。記憶部21は、ハッシュキャッシュ21aを記憶する。ここで、ハッシュキャッシュは、データのハッシュ値と、記憶装置30における該当のデータの格納先のアドレスとの対応を示す情報である。ハッシュキャッシュは、データの重複排除に用いられる。データの書き込みの要求に関して、当該データに対するハッシュ値がハッシュキャッシュに登録済の場合、同じデータが記憶装置30に既に書き込まれているので、記憶装置30に対する当該データの書き込みは行われない。
【0024】
処理部12,22は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
【0025】
処理部12は、記憶部11に記憶されたハッシュキャッシュ11aに基づいて、データの重複排除を制御する。
処理部22は、記憶部21に記憶されたハッシュキャッシュ21aに基づいて、データの重複排除を制御する。
【0026】
記憶装置30は、マップ情報31、実データ記憶領域32および参照数カウンタ33を有する。
マップ情報31は、データ参照に用いられる情報であり、参照先データの論理アドレスに対して、実データ記憶領域32の物理アドレス(単に「アドレス」と称することがある)を対応付ける。
図1の例では、マップ情報31に格納された、実データ記憶領域32のアドレスを、アンパサンド(&)記号とデータ名(「a」など)とを組み合わせた表記(「&a」など)により表している(同じデータ名のデータのデータ内容は、同じであるとする)。
【0027】
実データ記憶領域32は、データの本体が格納される記憶領域である。実データ記憶領域32における単位領域のサイズは、例えば、重複排除におけるハッシュ化対象のデータサイズに相当する。当該データサイズは、例えば、4KBや8KBなどである。ハッシュ値のサイズは、例えば、20Bytesである。
【0028】
参照数カウンタ33は、実データ記憶領域32の各単位領域に対する、マップ情報31による参照数を保持する。参照数カウンタ33は、マップ情報31から参照されていない非参照データを削除するガベージコレクションと呼ばれる処理に用いられる。ただし、参照数カウンタ33は、ガベージコレクションを効率的に実行するための情報であり、存在していなくてもよい。
【0029】
ここで、ストレージ制御装置10が障害によりダウンする場合を考える。ダウン前の段階では、実データ記憶領域32のアドレス(物理アドレス)「#1」にデータ「a」が格納され、アドレス「#3」にデータ「b」が格納され、アドレス「#10」にデータ「c」が格納されていたとする。なお、
図1では、各データに対して計算されるハッシュ値を、「h」とデータ名(「a」など)を組み合せた表記(「h(a)」など)により表している。
【0030】
ダウン前の段階では、データ「a」、「b」の重複排除の担当は、ストレージ制御装置10である。したがって、ダウン前の段階では、データ「a」のハッシュ値「h(a)」とアドレス「#1」とを含むレコード、および、データ「b」のハッシュ値「h(b)」とアドレス「#3」とを含むレコードがハッシュキャッシュ11aに登録されている。データ「c」の重複排除の担当は、ストレージ制御装置20である。したがって、ダウン前の段階では、データ「c」のハッシュ値「h(c)」とアドレス「#10」とを含むレコードがハッシュキャッシュ21aに登録されている。
【0031】
ダウン前の段階では、マップ情報31におけるアドレス「#1」の参照数は「1」であり、アドレス「#3」の参照数は「1」であり、アドレス「#10」の参照数は「2」であるとする。
【0032】
ストレージ制御装置10がダウンすると、記憶部11に保持されているハッシュキャッシュ11aは消失する。処理部22は、ダウンしたストレージ制御装置10が担当していたデータ「a」、「b」の重複排除を代行する。例えば、処理部22は、ストレージ制御装置10のダウン中に、データ「b」の書き込み要求を受け付けると、データ「b」のハッシュ値h(b)を計算する。処理部22は、ハッシュキャッシュ21aにハッシュ値h(b)が登録されていないことを確認する。
【0033】
すると、処理部22は、データ「b」を、例えば、実データ記憶領域32のアドレス「#7」に書き込み、書き込み先に指定された論理アドレスに対する物理アドレス「#7」をマップ情報31に登録する。処理部22は、参照数カウンタ33におけるアドレス「#7」の参照数を「1」に設定する。また、処理部22は、ハッシュ値「h(b)」とアドレス「#7」とを含むレコードをハッシュキャッシュ21aに登録する。
【0034】
この段階で、データ「b」が、実データ記憶領域32に重複して書き込まれたことになる。
その後、ストレージ制御装置10が復旧した場合を考える。復旧後、データ「a」、「b」の重複排除の担当はストレージ制御装置10であり、データ「c」の重複排除の担当はストレージ制御装置20であるとする。ストレージ制御装置10,20は協働して、次のように、ハッシュキャッシュ11aを復元する初期化処理を実行する。
【0035】
処理部12は、実データ記憶領域32から各データを読み出し、記憶装置30における所定の管理単位(すなわち、ストレージ制御装置10が重複排除を担当するデータのグループ)に属するデータのハッシュ値を計算してハッシュキャッシュ11aを復元する。
【0036】
例えば、処理部12は、実データ記憶領域32のアドレス「#1」に記憶されたデータ「a」を読み出し、ハッシュ値「h(a)」とアドレス「#1」とを含むレコードをハッシュキャッシュ11aに追加する。処理部12は、ハッシュ値「h(a)」とアドレス「#1」とをストレージ制御装置20に送信する。これにより、重複して書き込まれた可能性のあるデータのハッシュ値を、ストレージ制御装置20に適切に通知できる。また、ストレージ制御装置20による、重複したデータ(削除対象とすべきデータ)の検索を促せる。
【0037】
処理部22は、ハッシュ値「h(a)」とアドレス「#1」とをストレージ制御装置10から取得すると、ハッシュキャッシュ21aを参照して、ハッシュ値「h(a)」を検索する。ハッシュキャッシュ21aにはハッシュ値「h(a)」が登録されていないので、処理部22は何もしない。
【0038】
また、例えば、処理部12は、実データ記憶領域32のアドレス「#3」に記憶されたデータ「b」を読み出し、ハッシュ値「h(b)」とアドレス「#3」とを含むレコードをハッシュキャッシュ11aに追加する。処理部12は、ハッシュ値「h(b)」とアドレス「#3」とをストレージ制御装置20に送信する。
【0039】
処理部22は、ハッシュ値「h(b)」とアドレス「#3」とをストレージ制御装置20から取得すると、ハッシュキャッシュ21aを参照して、ハッシュ値「h(b)」を検索する。ハッシュキャッシュ21aにはハッシュ値「h(b)」が登録されているので、処理部22は、次の統合処理を実行する。
【0040】
すなわち、処理部22は、ハッシュ値「h(b)」と同じハッシュ値である、アドレス「#7」に格納されたデータbを、ハッシュキャッシュ21aに基づいて検出する。すると、処理部22は、ハッシュキャッシュ21aからハッシュ値「h(b)」のレコードを削除するとともに、マップ情報31に含まれる、データ「b」の格納先のアドレス「#7」を、アドレス「#3」に変更する。
【0041】
これにより、実データ記憶領域32のアドレス「#7」の単位領域は、マップ情報31から参照されなくなる。このため、アドレス「#7」に重複して書き込まれたデータ「b」が削除可能になる。
【0042】
例えば、処理部22は、アドレス「#7」における重複データであるデータ「b」を記憶装置30から削除してもよい。あるいは、処理部22は、参照数カウンタ33におけるアドレス「#7」の参照数「1」を、アドレス「#3」の参照数「1」に加算して、アドレス「#3」の参照数を「2」とし、アドレス「#7」の参照数を「0」としてもよい。参照数「0」である実データ記憶領域32の単位領域のデータは、上記の初期化処理および統合処理とは非同期で実行されるガベージコレクションによる削除対象とされる。例えば、処理部12または処理部22は、ガベージコレクションを実行することで、アドレス「#7」における重複データであるデータ「b」を削除してもよい。
【0043】
このように、ストレージシステム1によれば、ストレージ制御装置10(あるいはストレージ制御装置20)のダウン中などに重複して書き込まれたデータに対する参照を解除し、当該データを適切に削除可能にすることができる。例えば、ガベージコレクションにより重複データを削除することもできる。これにより、記憶装置30の記憶容量を節約でき、記憶容量の利用効率の向上を図れる。
【0044】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態のストレージシステムの例を示す図である。
【0045】
ストレージシステム100は、ホスト装置200に接続される。ストレージシステム100は、ホスト装置200を利用するユーザのデータを記憶する。例えば、ストレージシステム100は、ホスト装置200とケーブルによって直接接続されてもよいし、SAN(Storage Area Network)などのネットワークを介して接続されてもよい。
【0046】
ストレージシステム100は、コントローラモジュール(CM:Controller Module)110,120およびドライブ収納部130を有する。
CM110,120は、ドライブ収納部130に収納されたHDDやSSDなどの複数の記憶デバイスに対するデータの書き込みや読み出しなどのアクセスを制御する。CM110,120は、データの書き込みや読み出しのアクセス要求をホスト装置200から受け付け、アクセス要求に応じて、記憶デバイスに対するデータの書き込みや読み出しのアクセスを行い、アクセス結果をホスト装置200に応答する。
【0047】
CM110,120は、冗長化されており、データアクセスの高可用性が図られている。すなわち、CM110,120が正常に稼働している場合には、データに対するアクセスを分担する。また、一方のCMが停止しても、他方のCMにより、データに対するアクセスを継続できる。また、CM110,120は、データ書き込みの際、重複排除の制御を行うことで、ドライブ収納部130における複数のドライブの記憶容量を効率的に利用する。CM110,120は、第1の実施の形態のストレージ制御装置10,20の一例である。
【0048】
ドライブ収納部130は、HDDやSSDなどの複数の記憶デバイスを収容し、当該複数の記憶デバイスによる大容量の記憶領域を提供する。例えば、ドライブ収納部130は、HDD131,132,…を有する。ドライブ収納部130は、第1の実施の形態の記憶装置30の一例である。あるいは、HDD131などの記憶デバイスを、第1の実施の形態の記憶装置30の一例と考えてもよい。
【0049】
ホスト装置200は、アプリケーションを実行し、アプリケーションの処理に用いられるデータを、ストレージシステム100から読み出したり、書き込んだりする。ホスト装置200は、例えば、サーバコンピュータである。ホスト装置200は、第1の実施の形態の情報処理装置2の一例である。
【0050】
図3は、CMのハードウェア例を示す図である。
CM110は、CPU111、RAM112、NVRAM(Non-Volatile RAM)113、媒体リーダ114、DI(Drive Interface)115、NA(Network Adapter)116およびCA(Channel Adapter)117,118を有する。これらのハードウェアがCM110のバスに接続されている。CPU111は、第1の実施の形態の処理部12,22の一例である。RAM112は、第1の実施の形態の記憶部11,21の一例である。
【0051】
CPU111は、CM110の全体を制御するプロセッサである。CPU111は、NVRAM113に記憶されたファームウェアのプログラムやデータの少なくとも一部をRAM112にロードし、ファームウェアのプログラムを実行する。
【0052】
RAM112は、CM110の主記憶装置である。RAM112は、CPU111により実行されるファームウェアのプログラムや、CPU111の処理に用いられる各種のデータを記憶する。RAM112は、揮発性記憶装置である。
【0053】
NVRAM113は、CM110の補助記憶装置である。NVRAM113は、RAM112にロードされるファームウェアのプログラムやCPU111の処理に用いられる各種のデータを記憶する。
【0054】
媒体リーダ114は、記録媒体51に記録されたファームウェアなどのプログラムやデータを読み取る読み取り装置である。記録媒体51として、例えば、USB(Universal Serial Bus)フラッシュドライブ(USBメモリとも呼ばれる)などの半導体メモリなどを使用できる。記録媒体51を、コンピュータ読み取り可能な記録媒体と言うことがある。媒体リーダ114は、例えば、記録媒体51から読み取ったプログラムやデータを、RAM112やNVRAM113などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU111によって実行される。
【0055】
なお、記録媒体51は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。可搬型記録媒体として用いられる記録媒体51の例として、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどが挙げられる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
【0056】
DI115は、ドライブ収納部130に収納されたHDD131,132,…にアクセスするためのインタフェースである。
NA116は、運用管理用のLAN(Local Area Network)50に接続され、LAN50を介して他のサーバコンピュータと通信する通信インタフェースである。例えば、CM110は、LAN50を介して、他のサーバコンピュータからファームウェアのプログラムをダウンロードし、RAM112、NVRAM113あるいは記録媒体51に格納することもできる。
【0057】
CA117,118は、ホスト装置200に接続される通信インタフェースである。CA117,118における通信インタフェースの規格には、例えば、FC(Fibre Channel)、iSCSI(Internet Small Computer System Interface)、SAS(Serial Attached SCSI)などが用いられる。
【0058】
CM120もCM110と同様のハードウェアにより実現される。CM110,120は、CM間の所定のインタフェースにより接続され、冗長構成となっている(例えば、何れか一方のCMが故障しても他方のCMでデータアクセスを継続可能である)。
【0059】
図4は、ストレージシステムの機能例を示す図である。
CM110は、記憶部140および重複排除制御部150を有する。CM120は、記憶部160および重複排除制御部170を有する。
【0060】
記憶部140は、RAM112の記憶領域により実現される。重複排除制御部150は、RAM112に記憶されたプログラムがCPU111により実行されることで実現される。記憶部160は、CM120が有するRAMの記憶領域により実現される。重複排除制御部170は、CM120が有するRAMに記憶されたプログラムが、CM120が有するCPUにより実行されることで実現される。
【0061】
記憶部140は、重複排除制御部150の重複排除の制御に用いられるハッシュテーブルを記憶する。ハッシュテーブルは、単位サイズのデータ(便宜的にデータブロックと称してもよい)のハッシュ値と、当該データの格納先の物理アドレスとの対応関係を示す。ここで、単位サイズは、例えば、4KBである。ただし、単位サイズは、他のサイズ(例えば、8KBなど)でもよい。また、ハッシュ値のサイズは、例えば、20Bytesである(ハッシュ値についても、他のサイズでもよい)。
【0062】
重複排除制御部150は、記憶部140に記憶されたハッシュテーブルに基づいて、HDD131,132,…に格納するデータの重複排除を行う。重複排除制御部150は、重複排除制御部170と重複排除の処理を分散して実行する。
【0063】
例えば、データのハッシュ値を稼働中のCM数(本例では「2」)で割った剰余が「0」の場合、当該データの重複排除をCM110の重複排除制御部150が担当する。また、データのハッシュ値を稼働中のCM数(本例では「2」)で割った剰余が「1」の場合、当該データの重複排除をCM120の重複排除制御部170が担当する。このように、例えば、データのハッシュ値の剰余によって、ある担当CMが重複排除を担当するデータの管理単位が定められる。例えば、ストレージシステム100は、ホスト装置200からデータの書き込み要求を受け付け、当該データの重複排除を何れのCMが担当するかを判定し、担当のCMに当該書き込み要求を転送する判定装置を更に有してもよい。当該判定装置は、ストレージシステム100とホスト装置200との間に設けられてもよい。この場合、ストレージシステム100は、判定装置を介して、ホスト装置200からのデータの書き込み要求を、当該データの書き込みを担当するCMにより受信する。あるいは、CM110,120のうちの代表のCM(例えば、CM110)がホスト装置200からデータの書き込み要求を受け付け、当該データの重複排除を担当するCMを判定して、担当のCMに当該書き込み要求を転送してもよい。この場合、代表のCMがダウンした場合には、代表のCMの役割を、他のCMが引き継ぐ。
【0064】
記憶部160は、記憶部140と同様に、重複排除制御部170の重複排除の制御に用いられるハッシュテーブルを記憶する。ハッシュテーブルは、第1の実施の形態のハッシュキャッシュ11a(あるいは、ハッシュキャッシュ21a)の一例である。
【0065】
重複排除制御部170は、記憶部160に記憶されたハッシュテーブルに基づいて、HDD131,132,…に格納するデータの重複排除を行う。
ここで、CM110,120の何れかがダウンすると、ダウンしたCMにおける記憶部(揮発性記憶装置であるRAM)に格納されたハッシュテーブルは消失する。このため、当該ハッシュテーブルに登録されたハッシュ値に対応するデータに関して実行されていた重複排除は一時的に実行できなくなる。
【0066】
CMのダウン中には他のCMでデータの書き込みを継続できるし、ダウンしたCMが正常にリブートした後には当該CMでデータの書き込みが再開される。CMのリブート後、当該CMでハッシュテーブルが復元される。しかし、ダウンしたCMによりハッシュテーブルが復元されるまでに、当該CMまたは他のCMにより重複したデータの書き込みが生じる可能性がある。具体的には次の通りである。
【0067】
まず、重複排除の制御の例を説明する。
図5は、重複排除の例を示す図である。
図5(A)は、新規の書き込みデータw1の書き込み時の制御例を示す。書き込みデータw1は、それぞれが単位サイズであるデータ「1」、「2」、「3」を含む。データ「1」、「2」、「3」の重複排除の担当CMは、CM110であるとする。重複排除制御部150は、データ「1」、「2」、「3」のそれぞれに対するハッシュ値が、ハッシュテーブル141に登録されていないことを検出する。すると、重複排除制御部150は、データ「1」、「2」、「3」それぞれに対するハッシュ値「h1」、「h2」、「h3」を計算し、ハッシュテーブル141に登録し、データ「1」、「2」、「3」をHDD131に書き込む。
【0068】
図5(B)は、
図5(A)の書き込みの後であって、書き込みデータw1を含む書き込みデータw2の書き込み時の制御例を示す。書き込みデータw2は、データ「1」、「2」、「3」を含む。重複排除制御部150は、データ「1」、「2」、「3」のそれぞれに対するハッシュ値が、ハッシュテーブル141に登録されていることを検出する。すると、重複排除制御部150は、書き込みデータw2のうち、データ「1」、「2」、「3」の部分を、HDD131,132,…に書き込まない。重複排除制御部150は、書き込みデータw2に対する参照先アドレスとして、書き込みデータw1の書き込みの際に書き込んだ物理アドレスを設定する。
【0069】
図6は、ハッシュテーブル消失時の重複書き込みの例を示す図である。
図6(A)は、
図5(B)の時点よりも後に、CM110の異常により、ハッシュテーブル141の内容が消失した場合を例示する。
【0070】
図6(B)は、
図6(A)の時点よりも後に、CM110が正常にリブートされた時の書き込みデータw3の書き込み時の制御例を示す。書き込みデータw3は、データ「1」、「2」、「3」を含む。重複排除制御部150は、データ「1」、「2」、「3」のそれぞれに対するハッシュ値が、ハッシュテーブル141に登録されていないことを検出する。すると、重複排除制御部150は、データ「1」、「2」、「3」それぞれに対するハッシュ値「h1」、「h2」、「h3」を計算し、ハッシュテーブル141に登録し、データ「1」、「2」、「3」をHDD131(あるいは、他のHDDでもよい)に書き込む。その結果、データ「1」、「2」、「3」が重複して(二重に)、書き込まれる。
【0071】
なお、上記の例では、CM110に着目して説明したが、CM110のダウン中に、CM120がデータ「1」、「2」、「3」の書き込みを行う場合にも同様に重複した書き込みが行われる。
【0072】
そこで、重複排除制御部150,170は、ダウンしたCMが復旧して、当該CMによりハッシュテーブルが復元される際、それまでに重複して書き込まれたデータを判別して削除可能にする機能を提供する。
【0073】
次に、HDD131,132,…における記憶領域の単位例を説明する。
図7は、コンテナおよびスロットの例を示す図である。
ドライブ群130aは、HDD131,132,…の集合である。ドライブ群130aの記憶領域は、コンテナと呼ばれる所定サイズの単位領域に分割されている。1つのコンテナのサイズは、例えば、4GBである(1つのコンテナのサイズは、16GBなどの他のサイズでもよい)。例えば、ドライブ群130aの記憶領域は、コンテナC1,C2,C3に分割されている。コンテナC1の識別番号(コンテナ番号)は、「コンテナ#1」である。コンテナC2のコンテナ番号は、「コンテナ#2」である。コンテナC3のコンテナ番号は、「コンテナ#3」である。
【0074】
各コンテナは、スロットと呼ばれる単位領域に更に分割されている。1つのスロットのサイズは、重複排除の対象となるデータの単位サイズに相当し、前述のように、例えば、4KBである。各コンテナのスロットは、スロットの識別番号(スロット番号)により区別される。各コンテナは、スロット番号「スロット#1」、「スロット#2」、…のスロットを含む。
【0075】
ここで、
図7では、参照数が1以上のデータが格納されているスロットに、「使用中」の文字列を付している。「使用中」の文字列が付されていないスロットは、参照数が0のデータが格納されているか、あるいは、データが削除済のスロットとなる。各コンテナ上の参照数が0のデータは、ガベージコレクションの処理による削除対象のデータとなる。ガベージコレクションは、重複排除制御部150,170により所定のタイミング(例えば、所定の周期やCM110,120の負荷が低いときなど)で実行される。
【0076】
図8は、コンテナに格納される情報の例を示す図である。
コンテナC1はリファレンスカウンタ部C11および実データ記憶部C12を有する。
リファレンスカウンタ部C11は、実データ記憶部C12の各スロットに格納されたデータの参照数を保持する。参照数のデータサイズは、実データ記憶部C12に格納されるデータのサイズよりも小さい。
【0077】
実データ記憶部C12は、実データを格納するための複数のスロットに相当する記憶領域である。例えば、リファレンスカウンタ部C11は、コンテナC1のうちの先頭の所定範囲の部分の記憶領域により実現される。実データ記憶部C12は、コンテナC1のうちの、リファレンスカウンタ部C11の後ろの部分の記憶領域により実現される。
【0078】
図8の例では、実データ記憶部C12における各スロットが、2行8列の矩形によって図示されている。行番号は
図8の上から下へ順に数え、列番号は
図8の左から右へ順に数えるものとする。リファレンスカウンタ部C11でも各スロットに対応する参照数が記載された矩形が、実データ記憶部C12における対応するスロットの矩形と同じ位置に図示されている。
【0079】
例えば、リファレンスカウンタ部C11の1行1列目の参照数「4」は、実データ記憶部C12の1行1列目のスロットのデータ「A」の参照数である。参照数「0」に対応するスロットについて、実データ記憶部C12ではハイフン記号「-」を表記している。
【0080】
コンテナC2,C3も、コンテナC1と同様に、リファレンスカウンタ部および実データ記憶部を有する。
図9は、ハッシュテーブルの例を示す図である。
【0081】
ハッシュテーブル141は、記憶部140に記憶される。ハッシュテーブル141は、ハッシュ値、コンテナ番号およびスロット番号の項目を含む。
ハッシュ値の項目には、データに対して計算されたハッシュ値が登録される。コンテナ番号の項目には、該当のデータが格納されているコンテナのコンテナ番号が登録される。スロット番号の項目には、該当のデータが格納されているコンテナにおけるスロットのスロット番号が登録される。
【0082】
例えば、ハッシュテーブル141には、ハッシュ値が「h(B)」、コンテナ番号が「コンテナ#3」、スロット番号が「スロット#5」のレコードが登録されている。このレコードは、ハッシュ値「h(B)」を取得済であり、当該ハッシュ値「h(B)」の計算に用いられたデータ「B」が、コンテナ番号「コンテナ#3」のコンテナのスロット番号「スロット#5」のスロットに格納されていることを示す。
【0083】
ハッシュテーブル141には、他のハッシュ値についても同様のレコードが登録される。
図10は、ブロックマップの例を示す図である。
【0084】
ブロックマップM1は、ドライブ群130aの記憶領域のうちの所定の領域に格納される。ブロックマップM1は、データの参照先の論理アドレスを、ドライブ群130aにおける物理的なデータ格納位置である物理アドレスに対応付ける情報である。ブロックマップM1は、第1の実施の形態のマップ情報31の一例である。
【0085】
ブロックマップM1には、論理アドレスの順に、論理アドレスに対応する物理アドレスが登録されている。例えば、ブロックマップM1には、LBA(Logical Block Addressing)の方式における論理アドレス「0x0000」に対して、物理アドレス「コンテナ#3 スロット#5」が登録されている。これは、データの参照先の論理アドレス「0x0000」が、ドライブ群130aにおけるコンテナ番号「コンテナ#3」のコンテナのスロット番号「スロット#5」のスロットに対応することを示す。
【0086】
ブロックマップM1には、他の論理アドレスについても同様に物理アドレスが対応付けられている。また、ブロックマップM1では、重複排除の制御によって、複数の論理アドレスに対して、1つの物理アドレスが対応付けられることもある。例えば、ブロックマップM1の例では、論理アドレス「0x0000」および「0x0050」に対して、同一の物理アドレス「コンテナ#3 スロット#5」が対応付けられている。ブロックマップM1に基づいて論理アドレスから参照される数(物理アドレスに対応付けられる論理アドレスの数)が、該当の物理アドレスにおけるスロットの参照数に相当する。
【0087】
次に、重複排除制御部150によるハッシュテーブルの復元時の処理例を説明する。重複排除制御部170がハッシュテーブルを復元する場合も、重複排除制御部150と同様の処理を実行する。
【0088】
図11は、ハッシュテーブルの復元時の処理例を示す図である。
CM110が障害などでダウンした後、CM110が正常にリブートされると、重複排除制御部150は、初期化処理を行うことで、ハッシュテーブル141を復元する。重複排除制御部150は、コンテナリストを順番に検査して、ドライブ群130aにおける処理対象のコンテナを1つ決定する。ここで、コンテナリストは、ドライブ群130aに存在するコンテナの情報をリンクで接続したコンテナのリストである。例えば、コンテナリストは、ドライブ群130aの記憶領域に格納される。重複排除制御部150は、当該リンクに接続されたコンテナを順に検査することで、ドライブ群130aにおける全てのデータをチェック可能である。
【0089】
図11(A)は、新規ハッシュ値の登録例を示す。
図11(A)の例では、重複排除制御部150の復元処理によって、ハッシュテーブル141に、ハッシュ値「h(B)」、「h(Z)」、「h(P)」のレコードが既に復元され、登録されている。重複排除制御部150は、処理対象のコンテナ内の使用中データ(参照数が1以上のデータ)を全て読み込む。重複排除制御部150は、先頭の使用中データから処理する。例えば、使用中データ「A」について、重複排除制御部150は、ハッシュ値「h(A)」を計算する。
【0090】
重複排除制御部150は、計算したハッシュ値「h(A)」から所定の計算式に基づいて、担当CMを求める。前述のように、例えば、重複排除制御部150は、ハッシュ値を稼働中のCM数で割り、その余りによって、担当CMを求めることができる(余りの値が担当CMの識別番号に相当する)。重複排除制御部150は、担当CMが自CMでない場合、次の使用中データの処理に進む。
【0091】
重複排除制御部150は、担当CMが自CMである場合、ハッシュテーブル141を参照して、計算したハッシュ値「h(A)」と同一のハッシュ値がハッシュテーブル141に登録済であるか否かを判定する。
【0092】
計算したハッシュ値「h(A)」がハッシュテーブル141に登録済でない場合、重複排除制御部150は、計算したハッシュ値「h(A)」、使用中データ「A」が格納されたコンテナ番号およびスロット番号を含むレコードをハッシュテーブル141に登録する。そして、重複排除制御部150は、次の使用中データの処理に進む。
【0093】
計算したハッシュ値「h(A)」がハッシュテーブル141に登録済である場合、重複排除制御部150は、下記に示すハッシュ値統合処理を行って、次の使用中データの処理に進む。
【0094】
図11(B)は、既登録ハッシュ値の検出例を示す。
図11(B)の例では、重複排除制御部150の復元処理によって、ハッシュテーブル141に、ハッシュ値「h(A)」、「h(Z)」、「h(P)」のレコードが既に復元され、登録されている。この段階から、重複排除制御部150は、次の使用中データ「A」について、ハッシュ値「h(A)」を計算する。重複排除制御部150は、ハッシュ値「h(A)」に基づいて、担当CMが自CMであることを検出する。重複排除制御部150は、ハッシュテーブル141を参照して、計算したハッシュ値「h(A)」と同一のハッシュ値がハッシュテーブル141に登録済であることを検出する。すると、重複排除制御部150は、リファレンスカウンタ部C11に基づいて、既登録ハッシュ値に対応するデータの参照数と、処理対象の使用中データの参照数とを比較し、比較に応じてハッシュ値を統合するハッシュ値統合処理を行う。
【0095】
図12は、参照数の比較の例を示す図である。
重複排除制御部150は、ハッシュテーブル141の復元において、コンテナC1におけるデータ(使用中データ)「A」を処理対象としているとする。重複排除制御部150は、データ「A」に対するハッシュ値「h(A)」を計算する。重複排除制御部150は、ハッシュテーブル141には、コンテナC3におけるデータ「A」に対して計算されたハッシュ値「h(A)」が既に登録されている。
【0096】
すると、重複排除制御部150は、ハッシュテーブル141に基づいて、コンテナC3におけるデータ「A」の格納位置を特定し、リファレンスカウンタ部C11を参照して、該当の格納位置のデータ「A」に対する参照数を得る。コンテナC3におけるデータ「A」の参照数(ブロックマップM1から参照されている数)は、「2」である。
【0097】
また、重複排除制御部150は、リファレンスカウンタ部C11を参照して、コンテナC1における処理対象のデータ「A」の参照数を得る。コンテナC1における処理対象のデータ「A」の参照数は、「1」である。
【0098】
重複排除制御部150は、既に登録されているコンテナC3のデータ「A」の参照数N=「2」と、今回復元処理を行っているコンテナC1のデータ「A」の参照数M=「1」とを比較する。
【0099】
重複排除制御部150は、既に登録されているデータの参照数Nが、今回復元処理を行っているデータの参照数M以上の場合、今回復元処理を行っているデータのハッシュ値のレコードをハッシュテーブル141に登録しない。この場合、重複排除制御部150は、ブロックマップM1において、既に登録されているデータに対し、今回復元処理を行っているデータの参照先アドレスを統合した上でリファレンスカウンタ部C11における参照数を合算する。
【0100】
一方、重複排除制御部150は、既に登録されているデータの参照数Nが、今回復元処理を行っているデータの参照数M未満の場合、今回復元処理を行っているデータのハッシュ値のレコードをハッシュテーブル141に登録する。この場合、重複排除制御部150は、既に登録されているデータについては、当該データに対するハッシュ値のレコードをハッシュテーブル141から破棄し、今回復元処理を行っているデータに対して、既に登録されているデータの参照先アドレスを統合する。また、重複排除制御部150は、今回復元処理を行っているデータの参照数に、既に登録されているデータの参照数を合算する。
【0101】
リファレンスカウンタ部C11において、結果的に参照数が「0」になったデータは、非同期でガベージコレクションが動作することにより、ドライブ群130aから破棄される。これによって、ドライブ群130aに重複して記録されていたデータが1つのデータに集約され、適切に重複排除される。特に、参照数が多い方のデータに統合することで、参照数が少ない方のデータに統合するよりも、ブロックマップM1の参照先アドレスの更新ステップ数を少なくすることができ、統合処理に伴う処理負荷を軽減できる。
【0102】
例えば、
図12の例では、既に登録されているデータの参照数N=「2」は、今回復元処理を行っているデータの参照数M=「1」よりも大きい。したがって、重複排除制御部150は、今回復元処理を行っているコンテナC1のデータ「A」を、既に登録されているコンテナC3のデータ「A」に統合する。
【0103】
図13は、ブロックマップおよび参照数の更新例を示す図である。
重複排除制御部150は、ブロックマップM1における、コンテナC1のデータ「A」への参照先アドレスを、コンテナC3のデータ「A」への参照先アドレスに更新する。すると、ブロックマップM1からコンテナC3のデータ「A」への参照数は「2+1=3」になる。重複排除制御部150は、リファレンスカウンタ部C11における、コンテナC3のデータ「A」に対する参照数を「3」に更新し、コンテナC1のデータ「A」に対する参照数を「0」に更新する。コンテナC1のデータ「A」は、参照数が「0」になるので、ガベージコレクションによる削除対象になる。
【0104】
次に、ストレージシステム100の処理手順を説明する。下記に示す初期化処理は、例えば、CM110の異常により、ハッシュテーブルがロストされた後に、保守員によるリブートや、自動リブートなどでCM110が正常起動した後に実行される。CM120に異常が発生して、CM120がリブートされた場合も、CM110とCM120との役割を入れ替えて、下記の手順が実行される。
【0105】
図14は、初期化処理の例を示すフローチャートである。
(S10)重複排除制御部150は、コンテナリストに次の処理対象コンテナがあるか否かを判定する。次の処理対象コンテナがある場合、ステップS11に処理が進む。次の処理対象コンテナがない場合(すなわち、全てのコンテナを処理済の場合)、初期化処理が終了する。例えば、重複排除制御部150は、コンテナリストにおけるコンテナの情報のリンクを順に辿ることで、次の処理対象コンテナを検出することができる。
【0106】
(S11)重複排除制御部150は、コンテナリストに基づいて、次の処理対象コンテナを決定する。例えば、次の処理対象コンテナがコンテナC1であるとする。
(S12)重複排除制御部150は、処理対象コンテナにチェック対象の使用中データがあるか否かを判定する。チェック対象の使用中データがある場合、ステップS13に処理が進む。チェック対象の使用中データがない場合、ステップS10に処理が進む。例えば、重複排除制御部150は、処理対象コンテナであるコンテナC1に格納されたリファレンスカウンタ部C11を参照することで、チェック対象の使用中データがあるか否かを判定することができる。使用中データは、リファレンスカウンタ部C11における参照数が1以上のデータである。例えば、重複排除制御部150は、コンテナC1の実データ記憶部C12の記憶領域の先頭から順に、チェック対象の使用中データを抽出する。
【0107】
(S13)重複排除制御部150は、チェック対象の使用中データを決定し、当該使用中データからハッシュ値を計算する。
(S14)重複排除制御部150は、ステップS13で計算したハッシュ値から担当CMを算出する。
【0108】
(S15)重複排除制御部150は、担当CMが自CM(CM110)であるか否かを判定する。担当CMが自CMである場合、ステップS16に処理が進む。担当CMが自CMでない場合、ステップS22に処理が進む。
【0109】
(S16)重複排除制御部150は、ハッシュテーブル141に、ステップS13で計算したハッシュ値と同一のハッシュ値があるか否かを判定する。ハッシュテーブル141に同一のハッシュ値がない場合、ステップS17に処理が進む。ハッシュテーブル141に同一のハッシュ値がある場合、ステップS18に処理が進む。
【0110】
(S17)重複排除制御部150は、ハッシュテーブル141にステップS13で計算したハッシュ値、該当の使用中データのコンテナ番号、および、スロット番号を新規登録する。そして、ステップS21に処理が進む。
【0111】
(S18)重複排除制御部150は、ステップS16の判定においてハッシュテーブル141から検出されたハッシュ値に対応するコンテナ番号とスロット番号とを参照する。
(S19)重複排除制御部150は、ステップS18で参照されたコンテナ番号とスロット番号とがチェック対象の使用中データのものと一致するか否かを判定する。一致する場合、ステップS22に処理が進む。一致しない場合、ステップS20に処理が進む。
【0112】
(S20)重複排除制御部150は、ハッシュ値統合処理を実行する。ハッシュ値統合処理の詳細は後述される。
(S21)CM120の重複排除制御部170は、他CMハッシュ値統合処理を実行する。他CMハッシュ値統合処理の詳細は後述される。重複排除制御部150は、チェック対象の使用中データに対して計算したハッシュ値と、当該使用中データの格納先のコンテナ番号とスロット番号とをCM120に送信する。このとき、ステップS20のハッシュ値統合処理で、チェック対象の使用中データを他のデータに統合した場合、重複排除制御部150は、統合先のデータのコンテナ番号とスロット番号とをCM120に送信する。CM120の重複排除制御部170は、重複排除制御部150により送信されたハッシュ値とコンテナ番号とスロット番号とを受信すると、他CMハッシュ値統合処理を実行する。
【0113】
(S22)重複排除制御部150は、CPU111のCPU負荷(例えば、Busy率)が閾値を超過しているか否かを判定する。CPU111のCPU負荷が閾値を超過している場合、ステップS23に処理が進む。CPU111のCPU負荷が閾値を超過していない場合、ステップS12に処理が進む。
【0114】
(S23)重複排除制御部150は、一定時間待機する。そして、ステップS10に処理が進む。例えば、重複排除制御部150は、初期化処理を一時停止し、一定時間後に初期化処理を再開するための処理再開用タイマーを開始させる。重複排除制御部150は、処理再開用タイマーにより一定時間が経過したことを検出すると、初期化処理を再開する(ステップS10に進む)。
【0115】
ここで、重複排除制御部150は、ステップS21で示したように、ハッシュテーブル141に復元したハッシュ値とデータの格納先のアドレスとをCM120(他のCM)に送信する。これにより、CM120に対して、重複している可能性のあるデータのハッシュ値を適切に通知できる。また、重複排除制御部150は、CM120による、重複データの検索および当該重複データの削除対象としての設定を促すことができる。
【0116】
更に、重複排除制御部150は、ステップS14で例示したように、ドライブ群130aに記憶されたデータのハッシュ値を稼働中のCM数で割ったときの剰余に基づいて、CM110が重複排除を担当する管理単位に属する使用中データを特定する。これにより、重複排除制御部150は、自CM(CM110)が担当する使用中データを高速に識別できる。また、各データの重複排除の制御を各CMに対して、ほぼ均一に分散できる。
【0117】
図15は、ハッシュ値統合処理の例を示すフローチャートである。
ハッシュ値統合処理は、ステップS20に相当する。
(S30)重複排除制御部150は、チェック対象の使用中データの参照数Mと既登録の同一ハッシュ値データの参照数Nとを比較する。
図15における「既登録の同一ハッシュ値データ」とは、チェック対象の使用中データとハッシュ値が同じであるが、チェック対象の使用中データとは異なる物理アドレスに格納されたデータであって、当該データのハッシュ値がハッシュテーブル141に登録済のものを示す。例えば、重複排除制御部150は、処理対象コンテナであるコンテナC1のリファレンスカウンタ部C11を参照して、チェック対象の使用中データの参照数Mを得る。また、重複排除制御部150は、ステップS18で参照されたコンテナ番号に対応するコンテナのリファレンスカウンタ部から、ステップS18で参照されたコンテナ番号およびスロット番号に対応する参照数Nを得る。
【0118】
(S31)重複排除制御部150は、N≧M(NがM以上)であるか否かを判定する。N≧Mの場合、ステップS32に処理が進む。N<Mの場合、ステップS35に処理が進む。
【0119】
(S32)重複排除制御部150は、チェック対象の使用中データを参照しているブロックマップM1のデータ位置が全て、既登録の同一ハッシュ値データを指すようにアドレス(コンテナ番号とスロット番号)を変更する。
【0120】
(S33)重複排除制御部150は、チェック対象の使用中データの参照数Mを、既登録の同一ハッシュ値データの参照数Nに加算する。すなわち、重複排除制御部150は、参照数Nを保持するリファレンスカウンタ部において、N=N+Mに更新する。
【0121】
(S34)重複排除制御部150は、チェック対象の使用中データの参照数Mを、0に設定する。すなわち、重複排除制御部150は、参照数Mを保持するリファレンスカウンタ部C11において、M=0に更新する。そして、ハッシュ値統合処理が終了する。
【0122】
(S35)重複排除制御部150は、既登録の同一ハッシュ値データを参照しているブロックマップM1のデータ位置が全て、チェック対象の使用中データを指すようにアドレス(コンテナ番号とスロット番号)を変更する。
【0123】
(S36)重複排除制御部150は、既登録の同一ハッシュ値データの参照数Nを、使用中データの参照数Mに加算する。すなわち、重複排除制御部150は、参照数Mを保持するリファレンスカウンタ部C11において、M=M+Nに更新する。
【0124】
(S37)重複排除制御部150は、既登録の同一ハッシュ値データの参照数Nを0に設定する。すなわち、重複排除制御部150は、参照数Nを保持するリファレンスカウンタ部において、N=0に更新する。
【0125】
(S38)重複排除制御部150は、既登録の同一ハッシュ値のレコードを、ハッシュテーブル141から削除して、チェック対象の使用中データのハッシュ値のレコード(当該使用中データのコンテナ番号とスロット番号を含む)をハッシュテーブル141に登録する。そして、ハッシュ値統合処理が終了する。
【0126】
このように、重複排除制御部150は、チェック対象の使用中データのハッシュ値と同じハッシュ値がハッシュテーブル141に登録済の場合、リファレンスカウンタ部のうち、チェック対象の使用中データの参照数Mと登録済の同一ハッシュ値に対応する他のデータの参照数Nとを比較し、当該比較に応じて、チェック対象の使用中データを削除対象とするか、または、他のデータを削除対象とするかを決定する。
【0127】
例えば、重複排除制御部150は、参照数Mが参照数N以下の場合、ブロックマップM1に含まれる、チェック対象の使用中データのアドレスを他のデータの格納先のアドレスに変更し、参照数Nに参照数Mを加算し、参照数Mを0に設定することで、チェック対象の使用中データをガベージコレクションによる削除対象とする。
【0128】
また、重複排除制御部150は、参照数Mが参照数Nよりも大きい場合、ブロックマップM1に含まれる、他のデータの格納先のアドレスをチェック対象の使用中データのアドレスに変更し、参照数Mに参照数Nを加算し、参照数Nを0に設定することで、他のデータをガベージコレクションによる削除対象とする。
【0129】
このように、重複排除制御部150は、ブロックマップM1におけるチェック対象の使用中データ、または、既登録の同一ハッシュ値データへの参照を、全て解除することで、CM110により書き込まれた重複データを削除可能にできる。更に、重複データの参照数を、統合先のデータの参照数に合算し、重複データの参照数を0に設定することで、重複データをガベージコレクションによる削除対象にすることができる。
【0130】
例えば、重複排除制御部150または重複排除制御部170は、リファレンスカウンタ部の参照数に基づいてガベージコレクションを非同期に実行することで、重複データを削除する。すなわち、ドライブ群130aに重複して記録されていたデータが1つのデータに集約され、適切に重複排除される。これにより、ドライブ群130aの記憶容量を節約でき、記憶容量の利用効率の向上を図れる。
【0131】
また、参照数が多い方のデータに統合することで、参照数が少ない方のデータに統合するよりも、ブロックマップM1の参照先アドレスの更新ステップ数を少なくすることができ、統合処理に伴う処理負荷を軽減できる。
【0132】
図16は、他CMハッシュ値統合処理の例を示すフローチャートである。
他CMハッシュ値統合処理は、ステップS21に相当する。
(S40)重複排除制御部170は、チェック対象の使用中データのハッシュ値と同一のハッシュ値を、記憶部160に記憶されたハッシュテーブルから検索する。
【0133】
(S41)重複排除制御部170は、ステップS40の検索の結果、記憶部160に記憶されたハッシュテーブルに同一のハッシュ値があるか否かを判定する。同一のハッシュ値がある場合、ステップS42に処理が進む。同一のハッシュ値がない場合、他CMハッシュ値統合処理が終了する。
【0134】
(S42)重複排除制御部170は、既登録の同一ハッシュ値データを参照しているブロックマップM1のデータ位置が全て、該当の使用中データを指すようにアドレス(コンテナ番号とスロット番号)を変更する。
図16における「既登録の同一ハッシュ値データ」とは、チェック対象の使用中データとハッシュ値が同じであるが、チェック対象の使用中データとは異なる物理アドレスに格納されたデータであって、当該データのハッシュ値が記憶部160に記憶されたハッシュテーブルに登録済のものを示す。また、「該当の使用中データ」とは、チェック対象の使用中データまたはステップS32~S34による統合先の使用中データである。該当の使用中データのアドレス(コンテナ番号とスロット番号)は、重複排除制御部150から取得される。
【0135】
(S43)重複排除制御部170は、既登録の同一ハッシュ値データの参照数Nを、該当の使用中データの参照数Mに加算する。すなわち、重複排除制御部170は、参照数Mを保持するリファレンスカウンタ部において、M=M+Nに更新する。
【0136】
(S44)重複排除制御部170は、既登録の同一ハッシュ値データの参照数Nを0に設定する。すなわち、重複排除制御部170は、参照数Nを保持するリファレンスカウンタ部において、N=0に更新する。
【0137】
(S45)重複排除制御部170は、既登録の同一ハッシュ値のレコードを、記憶部160に記憶されたハッシュテーブルから削除する。そして、他CMハッシュ値統合処理が終了する。
【0138】
ここで、ステップS42~S44は、ステップS45の後に実行されてもよい。その場合、重複排除制御部170は、記憶部160に記憶されたハッシュテーブルから、削除対象のハッシュ値に対応するアドレス(コンテナ番号およびスロット番号)を読み出して、CM120のRAM上に一時的に保持する。そして、重複排除制御部170は、RAM上に一時的に保持されている当該アドレスを基に、ステップS42~S44に相当する処理を行う。
【0139】
こうして、重複排除制御部170は、ブロックマップM1における既登録の同一ハッシュ値データへの参照を全て解除することで、CM120により書き込まれた重複データを削除可能にできる。更に、重複排除制御部170は、非参照データを削除するガベージコレクションに用いられるリファレンスカウンタ部のうち、該当の使用中データの参照数Mに、既登録の同一ハッシュ値データの参照数Nを加算し、参照数Nを0に設定する。これにより、既登録の同一ハッシュ値データ(重複データ)をガベージコレクションによる削除対象にできる。
【0140】
例えば、重複排除制御部150または重複排除制御部170は、リファレンスカウンタ部の参照数に基づいてガベージコレクションを非同期に実行することで、当該重複データを削除する。すなわち、ドライブ群130aに重複して記録されていたデータが1つのデータに集約され、適切に重複排除される。これにより、ドライブ群130aの記憶容量を節約でき、記憶容量の利用効率の向上を図れる。
【0141】
なお、ストレージシステム100では、CMの数が2の場合を例示したが、CMの数は3以上でもよい。
図17は、ストレージシステムの他の構成例を示す図である。
【0142】
ストレージシステム100aは、CM110,120,110a,120a,…およびドライブ収納部130を有する。CM110a,120a,…は、CM110,120と同様の機能を有し、CM110,120,110a,120a,…により、各データの重複排除が分散して実行される。前述のように、あるデータの重複排除を担当する担当CMは、例えば、当該データのハッシュ値を、ストレージシステム100aにおいて稼働中のCM数で割ったときの剰余に基づいて決定される。CMの数が多い程、1つのCMが保持するハッシュテーブルのサイズを低減できる利点がある。
【0143】
なお、第1の実施の形態の情報処理は、処理部12にプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU111にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体51に記録できる。
【0144】
例えば、プログラムを記録した記録媒体51を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体51に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM112やNVRAM113などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
【0145】
以上の第1,第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられる第1のハッシュキャッシュを記憶する第1の記憶部と、前記第1のハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する第1のデータの第1のハッシュ値を計算して前記第1のハッシュキャッシュを復元する第1の処理部と、を備える第1のストレージ制御装置と、
第2のハッシュキャッシュを記憶する第2の記憶部と、前記第1のハッシュ値と前記第1のデータの格納先の第1のアドレスとを前記第1のストレージ制御装置から取得し、前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記第2のハッシュキャッシュに基づいて検出すると、前記第2のハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する第2の処理部と、を備える第2のストレージ制御装置と、
を有するストレージシステム。
【0146】
(付記2) 前記第2の処理部は、非参照データを削除するガベージコレクションに用いられる、各データの参照数を保持する参照数カウンタのうち、前記第1のデータの第1の参照数に、前記第2のデータの第2の参照数を加算し、前記第2の参照数を0に設定する、
付記1記載のストレージシステム。
【0147】
(付記3) 前記第1の処理部は、前記第1のハッシュ値と同じ第3のハッシュ値が前記第1のハッシュキャッシュに登録済の場合、非参照データを削除するガベージコレクションに用いられる、各データの参照数を保持する参照数カウンタのうち、前記第1のデータの第1の参照数と前記第3のハッシュ値に対応する第3のデータの第3の参照数とを比較し、当該比較に応じて、前記第1のデータを削除対象とするか、または、前記第3のデータを削除対象とするかを決定する、
付記1記載のストレージシステム。
【0148】
(付記4) 前記第1の処理部は、
前記第1の参照数が前記第3の参照数以下の場合、前記マップ情報に含まれる、前記第1のアドレスを前記第3のデータの格納先の第3のアドレスに変更し、前記第3の参照数に前記第1の参照数を加算し、前記第1の参照数を0に設定することで、前記第1のデータを前記ガベージコレクションによる削除対象とし、
前記第1の参照数が前記第3の参照数よりも大きい場合、前記マップ情報に含まれる、前記第3のアドレスを前記第1のアドレスに変更し、前記第1の参照数に前記第3の参照数を加算し、前記第3の参照数を0に設定することで、前記第3のデータを前記ガベージコレクションによる削除対象とする、
付記3記載のストレージシステム。
【0149】
(付記5) 前記第1の処理部または前記第2の処理部は、前記マップ情報により参照されていない前記第2のデータを前記記憶装置から削除する、
付記1記載のストレージシステム。
【0150】
(付記6) 前記第1の処理部は、前記記憶装置に記憶された前記データのハッシュ値を前記ストレージシステムに属するストレージ制御装置の数で割ったときの剰余に基づいて、前記第1のストレージ制御装置が前記重複排除を担当する前記管理単位に属する前記第1のデータを特定する、
付記1記載のストレージシステム。
【0151】
(付記7) データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部と、
前記ハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する前記データの前記ハッシュ値を計算して前記ハッシュキャッシュを復元し、前記ハッシュキャッシュに復元した前記ハッシュ値と前記ハッシュ値に対応する前記データの格納先のアドレスとを他のストレージ制御装置に送信する処理部と、
を有するストレージ制御装置。
【0152】
(付記8) コンピュータに、
データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部における前記ハッシュキャッシュが消失した場合に、前記記憶装置における所定の管理単位に属する前記データの前記ハッシュ値を計算して前記ハッシュキャッシュを復元し、
前記ハッシュキャッシュに復元した前記ハッシュ値と前記ハッシュ値に対応する前記データの格納先のアドレスとを他のストレージ制御装置に送信する、
処理を実行させるプログラム。
【0153】
(付記9) データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示し、前記データの重複排除に用いられるハッシュキャッシュを記憶する記憶部と、
他のストレージ制御装置により前記他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と前記第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを前記他のストレージ制御装置から取得し、前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記ハッシュキャッシュに基づいて検出すると、前記ハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する処理部と、
を有するストレージ制御装置。
【0154】
(付記10) コンピュータに、
記憶部に記憶されるハッシュキャッシュであって、データのハッシュ値と記憶装置における前記データの格納先のアドレスとの対応を示す前記ハッシュキャッシュを用いて前記データの重複排除を行い、
他のストレージ制御装置により前記他のストレージ制御装置が保持する他のハッシュキャッシュに復元された第1のハッシュ値と前記第1のハッシュ値に対応する第1のデータの格納先の第1のアドレスとを前記他のストレージ制御装置から取得し、
前記第1のハッシュ値と同じ第2のハッシュ値である第2のデータを前記ハッシュキャッシュに基づいて検出すると、前記ハッシュキャッシュから前記第2のハッシュ値のレコードを削除し、データ参照に用いられるマップ情報に含まれる、前記第2のデータの格納先の第2のアドレスを前記第1のアドレスに変更する、
処理を実行させるプログラム。
【符号の説明】
【0155】
1 ストレージシステム
2 情報処理装置
10,20 ストレージ制御装置
11,21 記憶部
11a,21a ハッシュキャッシュ
12,22 処理部
30 記憶装置
31 マップ情報
32 実データ記憶領域
33 参照数カウンタ