JPWO2014155668A1 - データの重複をハッシュテーブルに基づいて排除するためのストレージシステム - Google Patents

データの重複をハッシュテーブルに基づいて排除するためのストレージシステム Download PDF

Info

Publication number
JPWO2014155668A1
JPWO2014155668A1 JP2013517504A JP2013517504A JPWO2014155668A1 JP WO2014155668 A1 JPWO2014155668 A1 JP WO2014155668A1 JP 2013517504 A JP2013517504 A JP 2013517504A JP 2013517504 A JP2013517504 A JP 2013517504A JP WO2014155668 A1 JPWO2014155668 A1 JP WO2014155668A1
Authority
JP
Japan
Prior art keywords
chunk
hash
hash value
storage device
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2013517504A
Other languages
English (en)
Other versions
JP5444506B1 (ja
Inventor
修二 山▲崎▼
修二 山▲崎▼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Toshiba Digital Solutions Corp
Original Assignee
Toshiba Corp
Toshiba Solutions Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Solutions Corp filed Critical Toshiba Corp
Application granted granted Critical
Publication of JP5444506B1 publication Critical patent/JP5444506B1/ja
Publication of JPWO2014155668A1 publication Critical patent/JPWO2014155668A1/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

実施形態によれば、ストレージコントローラは、分割部と、重複管理部と、重複判定部とを具備する。前記分割部は、ホストコンピュータからの書き込み要求によって指定されたデータを複数のチャンクに分割する。前記重複管理部は、第1のチャンクがストレージ装置に書き込まれる場合、前記第1のチャンクの第1のハッシュ値を、前記第1のチャンクと対応付けてハッシュテーブルの第1のテーブルに優先的に登録する。前記ハッシュテーブルは、前記第1のテーブルよりも多くのエントリを有する第2のテーブルを含む。前記重複判定部は、第2のチャンクの第2のハッシュ値が計算された場合、前記第2のハッシュ値に一致する第3のハッシュ値を、まず前記第1のテーブルから探索する。

Description

本発明の実施形態は、データの重複をハッシュテーブルに基づいて排除するためのストレージシステム、ストレージコントローラ及び方法に関する。
近年、情報処理システムで扱われる大規模なデータ(ビッグデータ)を格納するために、ストレージ装置の大容量化が進んでいる。ビッグデータは、一般に多くの重複するデータを含む。このため、ストレージ装置にビッグデータが格納された場合、当該ストレージ装置の記憶領域の一部が多くの重複するデータで占められる。このことは、ストレージ装置の記憶容量が無駄に使われることを意味する。そこで、ストレージ装置の限られた記憶容量を有効に使用するために、当該ストレージ装置に格納されるべきデータから、重複するデータを排除することが必要となる。
以下、従来技術で適用される重複するデータを排除する方法の例について述べる。ストレージコントローラは、ストレージ装置にデータを書き込む場合、当該書き込まれるべきデータと同一のデータが既に当該ストレージ装置に書き込まれているかを判定する。この判定のためにストレージコントローラは、書き込まれるべきデータ(ファイル)をチャンクと呼ばれる固定長のデータの塊に分割する。
ストレージコントローラは、チャンク毎にハッシュ関数を用いてハッシュ値を計算する。ストレージコントローラは、ハッシュ値の計算に用いられたチャンクをストレージ装置に書き込む際に、当該ハッシュ値を当該チャンクに対応付けてハッシュテーブルに登録する。
そこでストレージコントローラは、ストレージ装置に新たに書き込まれるべき第1のチャンクのハッシュ値を計算した際に、当該ハッシュ値と同一のハッシュ値がハッシュテーブルに登録されているかを判定する。より具体的に述べるならば、ストレージコントローラは、同一のハッシュ値がハッシュテーブルに登録されているかに基づいて、第1のチャンクと重複するデータが既にストレージ装置に書き込まれているかを判定する。ストレージコントローラは、第1のチャンクと重複するデータが書き込まれていない場合だけ、当該第1のチャンクをストレージ装置に書き込む。これにより、ストレージ装置から重複するデータが排除される。
ストレージ装置に書き込まれるチャンクの数が増えると、これらのチャンクに対応付けてハッシュテーブルに登録されるハッシュ値の数も増える。そこで従来技術は、多数のハッシュ値を登録するために、同一の数のエントリを有する複数のテーブルを用いて多段に構成されたハッシュテーブルを適用している。
特開平3−282966号公報 特表2012−505440号公報
上述のように、ハッシュテーブルが多数のハッシュ値を登録するのに用いられる場合、当該ハッシュテーブルを格納するのに必要な記憶容量も大きくなる。このようなハッシュテーブル全体をストレージコントローラが有するメモリに格納することは難しい。そこで、ハッシュテーブルは、ビッグデータを格納するのに用いられる大容量のストレージ装置、或いはストレージコントローラが有するハードディスクドライブ(HDD)のようなローカルなストレージ装置に格納されるのが一般的である。一方、従来技術は、同一の数のエントリを有する複数のテーブルを用いて多段に構成されたハッシュテーブルを適用している。
したがって、ストレージコントローラがハッシュ値を比較するために、このような構成のハッシュテーブルを探索する場合、当該ストレージコントローラとストレージ装置との間で多くの入出力(I/O)処理が発生する。このように、データの重複を排除するためのハッシュ値の比較に伴って多くのI/O処理が発生すると、ストレージ装置の書き込み性能(書き込み速度)が低下する。
本発明が解決しようとする課題は、データの重複を排除するためのハッシュテーブル探索を高速化できるストレージシステム、ストレージコントローラ及び方法を提供することにある。
実施形態によれば、ストレージシステムは、ストレージ装置と、ストレージコントローラと、ハッシュテーブルとを具備する。前記ストレージコントローラは、前記ストレージ装置へのアクセスを制御する。前記ハッシュテーブルは、第1の数のエントリを有する第1のテーブル及び前記第1の数より大きい第2の数のエントリを有する第2のテーブルを含む。前記ストレージコントローラは、分割部と、ハッシュ生成部と、アクセスコントローラと、重複管理部と、重複判定部とを具備する。前記分割部は、ホストコンピュータからの書き込み要求によって指定されたデータを複数のチャンクに分割する。前記ハッシュ生成部は、前記複数のチャンクの各々のデータに基づいて、前記複数のチャンクの各々の第1の長さを持つハッシュ値を計算する。前記アクセスコントローラは、前記ストレージ装置にチャンクを書き込む。前記重複管理部は、前記ストレージ装置に第1のチャンクが書き込まれる場合、前記第1のチャンクの第1のハッシュ値を、前記第1のチャンクと対応付けて前記ハッシュテーブルの前記第1のテーブルに優先的に登録する。前記重複判定部は、第2のチャンクの第2のハッシュ値が計算された場合、前記第2のハッシュ値に一致する第3のハッシュ値を前記ハッシュテーブルから探索する処理を、前記第1のテーブルからの探索を優先して実行することにより、前記第2のチャンクと同一内容を持つ第3のチャンクが前記ストレージ装置に格納されているかを判定する。前記重複管理部は、前記第3のチャンクが前記ストレージ装置に格納されていると判定された場合、前記第2のチャンクが前記ストレージ装置に書き込まれるのを抑止する。
図1は、実施形態に係るコンピュータシステムの典型的なハードウェア構成を示すブロック図である。 図2は、図1に示されるストレージコントローラの典型的な機能構成を主として示すブロック図である。 図3は、ホストコンピュータからの書き込み要求で指定されたファイルのデータとチャンクとの関係の例を示す図である。 図4は、図2に示されるハッシュテーブルのデータ構造例を示す図である。 図5は、図4に示されるハッシュテーブルに含まれている1段目のテーブルが有するリーフページのデータ構造例を示す図である。 図6は、図5に示される管理情報のフォーマットの例を示す図である。 図7は、図5に示される他の管理情報のフォーマットの例を示す図である。 図8は、図2に示されるメタテーブルのデータ構造例を示す図である。 図9は、図2に示されるチャンクテーブルのデータ構造例を示す図である。 図10は、同実施形態におけるデータ書き込み処理の典型的な手順を説明するためのフローチャートの一部を示す図である。 図11は、同データ書き込み処理の典型的な手順を説明するためのフローチャートの他の一部を示す図である。 図12は、同データ書き込み処理の典型的な手順を説明するためのフローチャートの残りを示す図である。 図13は、同実施形態におけるハッシュ値探索処理の典型的な手順を説明するためのフローチャートの一部を示す図である。 図14は、同ハッシュ値探索処理の典型的な手順を説明するためのフローチャートの残りを示す図である。 図15は、ホストコンピュータから順に送られる3つのファイル書き込み要求によって指定される3つのファイルと、当該3つのファイルが一定のサイズ毎に区切るられることにより取得されるチャンクとの関係の例を示す図である。 図16は、ハッシュテーブルに含まれている1段目のテーブルの内容の変化の例を示す図である。 図17は、メタテーブルの内容の変化の例を示す図である。 図18は、チャンクテーブルの内容の変化の例を示す図である。
以下、実施の形態につき図面を参照して説明する。
図1は、実施形態に係るコンピュータシステムの典型的なハードウェア構成を示すブロック図である。前記コンピュータシステムは、ストレージシステム10及びホストコンピュータ(以下、ホストと称する置)20から構成される。ストレージシステム10は、ネットワーク30を介してホスト20と接続されている。
ホスト20は、サーバ、或いはクライアントパーソナルコンピュータ(クライアントPC)のような物理計算機である。ホスト20内では、ストレージシステム10内のデータにアクセスするためのアプリケーションプログラムが動作する。このアプリケーションプログラムに従い、ホスト20は、ストレージシステム10(より詳細には、ストレージシステム10の後述するHDD/SSDアレイ11)を外部記憶装置としてネットワーク30を介して利用する。ネットワーク30は、例えば、ストレージエリアネットワーク(SAN)、インターネット或いはイントラネットである。インターネット或いはイントラネットは、例えばイーサネット(登録商標)により構成される。なお、ホスト20が、ファイバチャネル(FC)、スモールコンピュータシステムインタフェース(SCSI)バス、シリアルアタッチドSCSI(SAS)バス、或いはシリアルATアタッチメント(SATA)バスのようなホストインタフェースバスを介してストレージシステム10と接続されていても構わない。
ストレージシステム10は、HDD/SSDアレイ11及びストレージコントローラ12を備えている。本実施形態において、HDD/SSDアレイ11及びストレージコントローラ12はストレージ装置を構成する。HDD/SSDアレイ11は、例えば複数のハードディスクドライブ及び複数のソリッドステートドライブ(SSD)を用いて構成されるRAID(Redundant Arrays of Inexpensive DisksまたはRedundant Arrays of Independent Disks)アレイである。HDD/SSDアレイ11は、ストレージインタフェースバス13を介してストレージコントローラ12(より詳細には、ストレージコントローラ12の図示せぬストレージインタフェース)と接続されている。本実施形態においてストレージインタフェースバス13はFC(ファイバチャネル)である。しかしストレージインタフェースバス13が、SCSIバス、SASバス、或いはSATAバスのような、FC以外のインタフェースバスであっても構わない。
ストレージコントローラ12は、ストレージインタフェースバス13を介してHDD/SSDアレイ11へのアクセスを制御する。ストレージコントローラ12は、ネットワーク30を介してホスト20と接続されている。ストレージコントローラ12は、ホスト20から論理アドレスの指定による読み出し要求または書き込み要求を受け付ける。ストレージコントローラ12は、指定された論理アドレスを、アドレス変換機能により、当該論理アドレスがマッピングされたHDD/SSDアレイ11内の物理領域を示す物理アドレスに変換する。データ読み出しの場合を例に、より詳細に述べるならば、ストレージコントローラ12は、論理アドレスを、当該論理アドレスで指定されるデータ(チャンク)に割り当てられるチャンク番号に変換する。チャンクについては後述する。ストレージコントローラ12は、チャンク番号を当該チャンク番号の示すチャンクが格納されているHDD/SSDアレイ11内の物理領域を示す物理アドレスに変換する。ストレージコントローラ12は、この物理アドレスに基づいて、HDD/SSDアレイ11にアクセスする。
ストレージコントローラ12は、CPU121、メモリ122及びハードディスクドライブ(HDD)123を備えている。CPU121は、メモリ122内の後述する制御プログラム領域122aに格納されている制御プログラムのプログラムコードに従い、ストレージコントローラ12に要求される処理を実行する。メモリ122は、例えば、複数のDRAMを用いて構成される揮発性メモリである。HDD123は、ローカルなストレージ装置であり、制御プログラム及び各種テーブルを格納するのに用いられる。なお、HDD123に代えて、複数のフラッシュメモリが搭載されたストレージ装置を用いることも可能である。
本実施形態においてストレージコントローラ12は、HDD/SSDアレイ11を含むストレージ装置に備えられている。しかし、ストレージコントローラ12が、ストレージ装置から独立して備えられていても構わない。この場合、ストレージコントローラ12が、ホスト20に内蔵されていても構わない。また、ストレージコントローラ12(より詳細には、ストレージコントローラ12の機能)が、ホスト20の有するオペレーティングシステム(OS)の機能の一部を用いて実現されても構わない。
また、ストレージコントローラ12が、ホスト20のカードスロットに装着して用いられるカードに備えられていても構わない。また、ストレージコントローラ12の一部がホスト20に内蔵され、当該ストレージコントローラ12の残りが前記カードに備えられていても構わない。
また、HDD/SSDアレイ11に代えて、例えば複数のHDDを用いて構成されるRAIDアレイ、または複数のSSDを用いて構成されるRAIDアレイを適用しても構わない。また、HDD/SSDアレイ11(つまりRAIDアレイ)に代えて、RAID構成を持たない、単なる複数のストレージドライブの集合(ドライブアレイ)を適用しても構わない。
図2は、図1に示されるストレージコントローラ12の典型的な機能構成を主として示すブロック図である。ストレージコントローラ12は、分割部200、重複管理部201、重複判定部202、ハッシュ生成部203及びアクセスコントローラ204を備えている。分割部200、重複管理部201、重複判定部202、ハッシュ生成部203及びアクセスコントローラ204の機能については後述する。これらの機能要素200乃至204は、図1に示されるストレージコントローラ12のCPU121が制御プログラムを実行することにより実現されるソフトウェアモジュールである。しかし、機能要素200乃至204の一部または全部がハードウェアモジュールによって実現されても構わない。
メモリ122は、制御プログラム領域122a、テーブル領域122b及びワーク領域122cを含む。制御プログラム領域122aは、CPU121によって実行される制御プログラムの少なくとも一部を格納するのに用いられる。この制御プログラムは、前述したようにHDD123に予め格納されており、当該制御プログラムの少なくとも一部は、ストレージコントローラ12の起動時に当該HDD123から制御プログラム領域122aにロードされる。
テーブル領域122bは、HDD123に格納されている各種のテーブルの少なくとも一部を格納するのに用いられる。ワーク領域122cは、CPU121が制御プログラムを実行する際に利用される一時的なデータを格納するのに用いられる。
HDD123(つまり、ローカルストレージ装置)は、上述の制御プログラムに加えて、後述するハッシュテーブル205、メタテーブル206及びチャンクテーブル207を格納する。つまりHDD123は、制御プログラム、ハッシュテーブル205、メタテーブル206及びチャンクテーブル207がそれぞれ格納される記憶領域を含む。
図3は、ホスト20からの書き込み要求で指定されたファイルのデータとチャンクとの関係の例を示す。分割部200は、図3に示されるファイルを、固定長、例えば4キロバイト(4Kバイト)のデータの塊に分割する。この4Kバイト毎のデータの塊をチャンクと呼ぶ。重複管理部201は、チャンク毎に重複の有無を管理する。図3の例では、ファイルFのサイズは4NKバイトである。この場合、ファイルFは、N個のチャンク#0乃至#N−1に分割される。重複管理部201は、チャンク#0乃至#N−1にユニークな識別番号であるチャンク番号を付与する。本実施形態において、チャンク番号は8バイトで表される。
次に、HDD123に格納されるハッシュテーブル205の概要について説明する。ハッシュテーブル205は、チャンク番号が付与されたチャンク毎に、ハッシュ情報を登録するのに用いられる。ハッシュ情報は、例えば、対応するチャンクに基づいて計算された32バイトのハッシュ値と当該チャンクの8バイトのチャンク番号との対を含む。つまり、ハッシュテーブル205は、チャンクのハッシュ値と当該チャンクのチャンク番号とを関連付けるハッシュ情報を登録するのに用いられる。
ハッシュテーブル205は、HDD/SSDアレイ11に書き込まれるべきチャンクと同一内容を持つチャンクが、当該HDD/SSDアレイ11に既に書き込まれているかを重複判定部202が判定するのに用いられる。重複管理部201は、この重複判定部202による判定の結果に基づいて、同一内容を持つ複数のチャンクがHDD/SSDアレイ11に重複して書き込まれるのを排除する。これにより、データの重複排除が実現できる。
ここで、本実施形態で適用されるデータの重複排除の概要について説明する。まず、ホスト20からストレージシステム10のストレージコントローラ12に、チャンクAを含むファイルの書き込みが要求されたことを想定する。また、チャンクAのハッシュ値がH(A)であるものとする。重複判定部202は、チャンクAのハッシュ値H(A)をハッシュテーブル205に登録されているハッシュ値と順次比較する。この比較の結果に基づいて、重複判定部202は、HDD/SSDアレイ11にチャンクAと同一内容を持つチャンク(以下、代表チャンクAと称する)が格納されているを判定する。
もし、ハッシュテーブル205にハッシュ値H(A)に一致するハッシュ値(つまり、ハッシュ値H(A))が登録されているならば、重複判定部202は、HDD/SSDアレイ11に代表チャンクAが格納されていると判定する。つまり重複判定部202は、チャンクAが重複すると判定する。一方、ハッシュテーブル205にハッシュ値H(A)が登録されていないならば、重複判定部202は、チャンクAが重複しないと判定する。
チャンクAが重複しないと判定された場合、アクセスコントローラ204は、書き込み要求によって指定されたHDD/SSDアレイ11のアドレスに、チャンクAを書き込む。より詳細には、アクセスコントローラ204は、ホスト20からの書き込み要求によって指定された論理アドレスに割り当てられる物理アドレスの示すHDD/SSDアレイ11の物理領域に、チャンクAを書き込む。このとき重複管理部201は、ハッシュ値H(A)とチャンクAのチャンク番号との対を含むハッシュ情報を、ハッシュテーブル205に登録する。
一方、チャンクAが重複すると判定された場合には、重複管理部201は、アクセスコントローラ204がチャンクAをHDD/SSDアレイ11に書き込むのを抑止する。この場合、重複管理部201は、ホスト20からの書き込み要求によって指定された論理アドレスに、代表チャンクAが既にHDD/SSDアレイ11に書き込まれている物理アドレスを割り当てる(つまりマッピングする)。
図4は、図2に示されるハッシュテーブル205のデータ構造例を示す。ハッシュテーブル205は、複数のテーブルを用いて多段に構成されている。図4の例では、ハッシュテーブル205は、7つのテーブルTBL_1,TBL_2,TBL_3,TBL_4,TBL_5,TBL_6及びTBL_7を用いて構成されている。つまりハッシュテーブル205は、7段構成のテーブルである。ここでテーブルTBL_h(h=1,2,3,4,5,6,7)は、ハッシュテーブル205におけるh段目のテーブルである。
テーブルTBL_1乃至TBL_7は、いずれも“kmax+1”個のページ(以下、リーフページと称する)を含む。ここで、テーブルTBL_hのk番目(k=0,1,…,kmax)のリーフページをLP_k(h)のように表記する。リーフページLP_k(h)は、後述するグループG_k(グループ番号kまたはグループインデックスk)に対応付けられている。リーフページLP_k(h)は、グループG_kに属するハッシュ値(より詳細には、後述する1段ハッシュ値)と当該ハッシュ値の計算に用いられたチャンクを特定するためのチャンク番号との対を含むハッシュ情報を登録するのに用いられる。
テーブルTBL_1乃至TBL_7のリーフページLP_k(1)乃至LP_k(7)のサイズは異なり、したがって、ハッシュ情報を登録するのに用いられるエントリの数も異なる。ここで、テーブルTBL_1,TBL_2,TBL_3,TBL_4,TBL_5,TBL_6及びTBL_7のリーフページLP_k(1),LP_k(2),LP_k(3),LP_k(4),LP_k(5),LP_k(6)及びLP_k(7)のサイズ(エントリ数)が、それぞれSIZE_1(EN_1),SIZE_2(EN_2),SIZE_3(EN_3),SIZE_4(EN_4),SIZE_5(EN_5),SIZE_6(EN_6)及びSIZE_7(EN_7)であるものとする。この場合、これらのサイズ(エントリ数)の間には、次のような関係
SIZE_1<SIZE_2<SIZE_3<SIZE_4<SIZE_5<SIZE_6<SIZE_7
EN_1<EN_2<EN_3<EN_4<EN_5<EN_6<EN_7
がある。
つまり、本実施形態では、ハッシュテーブル205を構成する7つのテーブルTBL_1,TBL_2,TBL_3,TBL_4,TBL_5,TBL_6及びTBL_7が有するリーフページLP_k(1),LP_k(2),LP_k(3),LP_k(4),LP_k(5),LP_k(6)及びLP_k(7)のサイズ(エントリ数)中で、テーブルTBL_1(つまり1段目のテーブルTBL_1)のそれが最も小さい。以下、テーブルTBL_2,TBL_3,TBL_4,TBL_5,TBL_6及びTBL_7の順に、リーフページのサイズ(エントリ数)が大きくなる。
テーブルTBL_1の各リーフページLP_k(1)は、例えば96エントリを有する。テーブルTBL_2の各リーフページLP_k(2)は、例えば192エントリ(つまり、リーフページLP_k(1)のそれの2倍のエントリ)を有する。テーブルTBL_3の各リーフページLP_k(3)は、例えば384エントリ(つまり、リーフページLP_k(2)のそれの2倍のエントリ)を有する。テーブルTBL_4の各リーフページLP_k(4)は、例えば768エントリ(リーフページLP_k(3)のそれの2倍のエントリ)を有する。テーブルTBL_5の各リーフページLP_k(5)は、例えば1536エントリ(つまり、リーフページLP_k(4)のそれの2倍のエントリ)を有する。テーブルTBL_6の各リーフページLP_k(6)は、例えば3,072エントリ(つまり、リーフページLP_k(5)のそれの2倍のエントリ)を有する。テーブルTBL_7の各リーフページLP_k(7)は、例えば6,144エントリ(つまり、リーフページLP_k(6)のそれの2倍のエントリ)を有する。
本実施形態では、ハッシュテーブル205は、当該ハッシュテーブル205へのアクセスの高速化のために、HDD123からメモリ122のテーブル領域122bにロードされて用いられる。但し、メモリ122のテーブル領域122bの容量の制約から、ハッシュテーブル205全体がメモリ122にロードされるのではなく、ハッシュテーブル205から選択された1つのリーフページだけがメモリ122のテーブル領域122bにロードされる。
本実施形態では、チャンク(4Kバイトのチャンク)のハッシュ値として32バイトのハッシュ値が用いられる。ハッシュ生成部203は、この32バイトのハッシュ値を計算するのに、例えば“SHA−256”と呼ばれる第1のハッシュ関数を適用する。この32バイトのハッシュ値を1段ハッシュ値と呼ぶ。
ここで、HDD/SSDアレイ11に格納される全てのチャンクの1段ハッシュ値とチャンク番号の対が、分類されることなくテーブルTBL_1乃至TBL_7に分散して登録されるものとする。この場合、テーブルTBL_1〜TBL_7に格納される1段ハッシュ値とチャンク番号との対の数は膨大となる。このため、例えば前述のハッシュ値H(A)に一致するハッシュ値を、テーブルTBL_h(h=1,2,3,4,5,6,7)から探索するのに多大な時間を要する。
そこで本実施形態において重複管理部201は、テーブルTBL_1〜TBL_7に登録されるべき1段ハッシュ値(つまり、32バイトのハッシュ値)の集合を、当該1段ハッシュ値に基づいて、“kmax+1”個のグループG_0乃至G_kmaxに分類する。グループG_0乃至G_kmaxは、それぞれグループ番号0乃至kmaxに対応付けられる。テーブルTBL_1〜TBL_7のそれぞれの“kmax+1”個のリーフページは、グループG_0乃至G_kmax(つまりグループ番号0乃至kmax)に対応付けられている。例えば、テーブルTBL_hのリーフページLP_0(h)乃至LP_kmax(h)は、グループG_0乃至G_kmaxに対応付けられている。ここで、kmax”は、例えば16,777,216(16進表現で0xFFFFFF)である。0xFFFFFFにおける“0x”は、当該“0x”が付されているFFFFFFが16進表現であることを示す。
重複管理部201による上述の分類のために、ハッシュ生成部203は、1段ハッシュ値が属するグループを特定するためのグループ番号としてのインデックス(以下、グループインデックスと称する)を当該1段ハッシュ値に基づいて生成する。本実施形態では、このグループインデックスに、1段ハッシュ値に基づいて算出される3バイトのハッシュ値が用いられる。この3バイトのハッシュ値を2段ハッシュ値と呼ぶ。この2段ハッシュ値(つまりグループインデックス)の計算には、第2のハッシュ関数が用いられる。この第2のハッシュ関数については後述する。
重複管理部201は、例えば、2段ハッシュ値(グループインデックス)0(=0x000000)に対応する1段ハッシュ値の集合を、グループ番号0を有するグループG_0として管理する。同様に重複管理部201は、2段ハッシュ値1(0x000001)に対応する1段ハッシュ値の集合を、グループ番号1を有するグループG_1として管理し、2段ハッシュ値2(0x000002)に対応する1段ハッシュ値の集合を、グループ番号2を有するグループG_2として管理する。同様に、重複管理部201は、2段ハッシュ値kmax(0xFFFFFF)に対応する1段ハッシュ値の集合を、グループ番号kmaxを有するグループG_kmaxとして管理する。つまり重複管理部201は、2段ハッシュ値kに対応する1段ハッシュ値の集合を、グループ番号kを有するグループG_kとして管理する。
このように本実施形態では、重複管理部201は、2段ハッシュ値(つまりグループインデックス)を用いて、対応する1段インデックス値の集合を16,777,216個(つまり“kmax+1”個)のグループに分類する。これにより、1段インデックス値の集合がグループ化されない場合と比較して、ハッシュテーブル205における探索範囲を16,777,216分の1に減らすことができる。
ここで、第2のハッシュ関数について説明する。前述したように、第2のハッシュ関数は、グループインデックスとしての2段ハッシュ値の計算に用いられる。本実施形態では、この第2のハッシュ関数に、除算関数が用いられる。この除数関数は、除数として所定の素数を用いる。具体的には、この除数には、例えば、3バイトで表現される最大の数値(16,777,216)よりも小さく、且つ当該最大の数値に最も小さい素数(16,777,213)が用いられる。2段ハッシュ値は、除算関数(第2のハッシュ関数)に基づいて、1段ハッシュ値を素数16,777,213で除することによって取得される剰余である。除算関数の除数に、このような素数を用いることにより、グループG_0乃至G_kmaxにそれぞれ属する1段ハッシュ値の集合をランダム化することができる。
上述の第2のハッシュ関数を適用した場合、2段ハッシュ値の総数(つまり、グループインデックスの総数)は、16,777,213(0xFFFFFC)である。この場合、2段ハッシュ値“kmax−2”(=16,777,214),“kmax−1”(=16,777,215)及びkmax(=16,777,216)は存在しない。しかし本実施形態では管理の簡略化のために、重複管理部201は、2段ハッシュ値“kmax−2”,“kmax−1”及びkmaxにそれぞれ対応するグループG_(kmax−2),G_(kmax−1)及びG_kmaxも管理する。なお、グループG_(kmax−2),G_(kmax−1)及びG_kmaxは必ずしも必要ではない。
次に、テーブルTBL_1乃至TBL_7の各リーフページのデータ構造について、例を挙げて説明する。図5は、図4に示されるハッシュテーブル205に含まれているテーブルTBL_1(つまり1段目のテーブルTBL_1)が有するk番目のリーフページLP_k(1)のデータ構造例を示す。リーフページLP_k(1)は、グループG_kに対応付けられている。
リーフページLP_k(1)は、8つのセクタST_0乃至ST_7から構成される。セクタは、周知のように、ハードディスクドライブ(HDD)、或いはソリッドステートドライブ(SSD)のようなストレージドライブにアクセスする際の最小単位である。本実施形態において、1セクタのサイズは512バイトである。セクタST_0乃至ST_7は、それぞれハッシュ情報を登録するのに用いられる12個のエントリを含む。したがって、リーフページLP_k(1)は、前述したように96(8×12=96)個のエントリを有する。ハッシュ情報のサイズは例えば40バイトである。ハッシュ情報は、32バイトのハッシュ値(1段ハッシュ値)と8バイトのチャンク番号との対を含む。セクタST_0乃至ST_7は更に、管理情報MI1_0乃至MI1_7を含む。管理情報MI1_0乃至MI1_7の各々のサイズは、例えば32バイトである。管理情報MI1_i(i=0,1,…,i(1)max)については後述する。なお、i(1)maxは、リーフページLP_k(1)が有するセクタの数から1を減じることにより得られる数であり、7である。
テーブルTBL_2乃至TBL_7が有するk番目のリーフページLP_k(2)乃至LP_k(7)のデータ構造も、図5に示されるリーフページLP_k(1)のそれと同様である。但し、リーフページLP_k(2)乃至LP_k(7)が有するセクタの数は前述のエントリ数の相違から明らかなように異なる。
例えば、リーフページLP_k(2),LP_k(3)及びLP_k(4)は、それぞれ、16セクタ(192エントリ),32セクタ(384エントリ)及び64セクタ(768エントリ)を有する。つまり、i(2)max,i(3)max及びi(4)maxは、それぞれ、15,31及び63である。また、リーフページLP_k(5),LP_k(6)及びLP_k(7)は、それぞれ128セクタ(1,536エントリ),256セクタ(3,072エントリ)及び512セクタ(6,144エントリ)を有する。つまり、i(5)max,i(6)max及びi(7)maxは、それぞれ、128,256及び512である。
次に、上述のようなデータ構造のハッシュテーブル205へのハッシュ情報登録(つまりハッシュテーブル205の更新)の概要について説明する。前述したように、ハッシュテーブル205は、テーブルTBL_1乃至TBL_7から構成される。テーブルTBL_1は、3バイトの2段ハッシュ値0x000000乃至0xFFFFFF(つまりグループインデックス)に基づいて分類される“kmax+1”個(つまり16,777,216個)のリーフページLP_0(1)乃至LP_kmax(1)を有する。
例えば2段ハッシュ値0x000000を持つ第1のチャンクがHDD/SSDアレイ11に書き込まれた場合、重複管理部201は、当該2段ハッシュ値0x000000で指定される1段目のテーブルTBL_1のリーフページLP_0(1)に第1のハッシュ情報を登録する。この第1のハッシュ情報は、第1のチャンクの1段ハッシュ値と当該第1のチャンクのチャンク番号との対を含む。同様に、例えば2段ハッシュ値0x000001を持つ第2のチャンクがHDD/SSDアレイ11に書き込まれた場合、重複管理部201は、当該2段ハッシュ値0x000001で指定される1段目のテーブルTBL_1のリーフページLP_1(1)に第2のハッシュ情報を登録する。この第2のハッシュ情報は、第2のチャンクの1段ハッシュ値と当該第2のチャンクのチャンク番号との対を含む。
1段目のテーブルTBL_1のリーフページLP_k(1)(k=0,1,…,kmax)は、96エントリ(EN_1=96)を有する。このため、例えば2段ハッシュ値0x000000を持つ96のチャンクがHDD/SSDアレイ11に既に書き込まれている場合、リーフページLP_0(1)は満杯となっている。この状態では、例えば上述の第1のハッシュ情報をリーフページLP_0(1)に登録することはできない。つまり、増設のリーフページが必要となる。
そこで本実施形態においてハッシュテーブル205は、増設のリーフページLP_k(2)を提供する2段目のテーブルTBL_2を更に備えている。2段目のテーブルTBL_2のリーフページLP_k(2)は、1段目のテーブルTBL_1においてリーフページLP_k(1)が満杯となった場合に用いられる。このことから、テーブルTBL_1(つまり1段目のテーブルTBL_1)は、ハッシュテーブル205における基本のテーブルであるといえる。
さて、1段目のテーブルTBL_1のリーフページLP_0(1)が満杯となっている状態で、上述のように第1のチャンク(つまり、2段ハッシュ値0x000000を持つ第1のチャンク)がHDD/SSDアレイ11に書き込まれたものとする。この場合、重複管理部201は、2段目のテーブルTBL_2のリーフページLP_0(2)に第1のハッシュ情報を登録する。2段目のテーブルTBL_2のリーフページLP_k(2)(k=0,1,…,kmax)は、192エントリ(EN_2=192)を有する。したがって、例えばリーフページLP_0(2)の192エントリも満杯となった場合、当該リーフページLP_0(2)に新たなハッシュ情報を登録することはできない。
そこでハッシュテーブル205は、増設のリーフページLP_k(3)を提供する3段目のテーブルTBL_3を更に備えている。リーフページLP_k(3)は、2段目のテーブルTBL_2においてリーフページLP_k(2)が満杯となった場合に用いられる。3段目のテーブルTBL_3のリーフページLP_k(3)は、384エントリ(EN_3=384)を有する。同様に、ハッシュテーブル205は、増設のリーフページLP_k(4)を提供する4段目のテーブルTBL_4を更に備えている。リーフページLP_k(4)は、3段目のテーブルTBL_3においてリーフページLP_k(3)が満杯となった場合に用いられる。4段目のテーブルTBL_4のリーフページLP_k(4)は、768エントリ(EN_4=768)を有する。
同様に、ハッシュテーブル205は、増設のリーフページLP_k(5)を提供する5段目のテーブルTBL_5を更に備えている。5段目のテーブルTBL_5のリーフページLP_k(5)は、1,536エントリ(EN_5=1,536)を有する。同様に、ハッシュテーブル205は、増設のリーフページLP_k(6)を提供する6段目のテーブルTBL_6と、増設のリーフページLP_k(7)を提供する7段目のテーブルTBL_7とを更に備えている。6段目のテーブルTBL_6のリーフページLP_k(6)は、3,072エントリ(EN_6=3,072)を有し、7段目のテーブルTBL_7のリーフページLP_k(7)は、6,144エントリ(EN_6=6,144)を有する。つまり、ハッシュテーブル205は、2段ハッシュ値(つまりグループインデックス)毎に12,192個のエントリを有する。
ここで、上述のようなハッシュテーブル205の構成の意義について説明する。ハッシュテーブル205に登録されるハッシュ値の量は、HDD/SSDアレイ11に格納されるデータの量(チャンク数)が多くなるに従って増大する。このような状況では、ハッシュテーブル205に必要な記憶容量も、一般にメモリ122に格納することができない大きさ(例えば、数ギガバイトを超える大きさ)となる。このためハッシュテーブル205は、本実施形態のようにHDD123(つまり、ローカルなストレージ装置)に格納される。なお、ハッシュテーブル205が、HDD/SSDアレイ11に格納されても構わない。
ハッシュテーブル205に必要な記憶容量が大きくなると、ストレージコントローラ12(より詳細には、ストレージコントローラ12の重複判定部202)はハッシュ値を探索するために、当該ハッシュテーブル205の全エントリの一部をメモリ122に読み込む動作を繰り返す必要がある。このため、ストレージコントローラ12とストレージ装置との間で多くの入出力(I/O)処理が発生する。
さて、一般的なストレージシステムでは、論理ボリュームに最初に割り当てられた記憶容量(例えば、最小の単位の記憶容量)で運用が開始される。論理ボリュームとは、ホストによって論理的なストレージドライブとして認識される記憶領域を指す。論理ボリュームには、例えば4K(キロ)バイト毎にHDD/SSDアレイ11の記憶領域(物理領域)が適宜割り当てられる。この種のストレージシステムは、運用開始後の状況に応じて、論理ボリュームの記憶容量をフレキシブルに増加させる機能を有する。本実施形態におけるストレージシステム10も同様である。
このような記憶容量増設機能を有し、且つ重複排除機能を有するストレージシステムでは、運用開始時に、最小の単位の記憶容量が割り当てられた論理ボリュームに対応する基準の大きさRSのハッシュテーブルが用意される。そして、論理ボリュームに割り当てられる記憶容量が最小の単位のM倍(Mは1より大きい整数)に増加された場合に、ハッシュテーブルも基準の大きさRSのM倍に増加される。
本実施形態では、論理ボリュームに割り当て可能な記憶容量の最小の単位は、6テラ(T)バイトである。この6Tバイトのデータが前述したように4Kバイトのチャンクに分割されるものとする。
重複管理部201は、各チャンクの32バイトのハッシュ値(1段ハッシュ値)に基づいて、同一内容を持つ複数のチャンク(つまり重複するチャンク)がHDD/SSDアレイ11に格納されるのを排除する。この場合、ハッシュテーブル205に登録されるチャンクの数(つまり、重複が排除されたチャンクの数)は、確率的に16,777,216×96を超えないことが知られている。
16,777,216は、前述したように、1段ハッシュ値の集合が2段ハッシュ値で分類された場合に得られるグループG_0乃至G_kmax(グループインデックス)の総数である。96は、各グループG_k(k=0,1,…,kmax)に対応付けられたテーブルTBL_1のリーフページLP_k(1)が有するエントリの数(EN_1)である。よって、テーブルTBL_1は、6Tバイトの論理ボリュームのデータの重複排除に適用可能である。つまり、論理ボリュームの記憶容量が6Tバイトの場合、16,777,216×96エントリを有するテーブルTBL_1の大きさは、上述の基準の大きさRSである。
ここで、論理ボリュームの記憶容量が、例えば6Tバイトから12Tバイトまたは24Tバイトに増やされる場合、テーブルTBL_1だけではエントリ数が不足する。この場合、ハッシュテーブル205の大きさを、基準の大きさRSの2倍または4倍に拡張する必要がある。同様に、論理ボリュームの記憶容量が、例えば6Tバイトから516Tバイトに増やされる場合、ハッシュテーブル205の大きさを基準の大きさRSの86倍に拡張する必要がある。
従来技術であれば、この拡張のために、基準の大きさRSを有する85個の第2乃至第86のテーブルが、基準の大きさRを有する第1のテーブル(つまり運用開始時におけるハッシュテーブルを構成する第1のテーブル)に追加される。明らかなように、第2乃至第86のテーブルは、いずれも、第1のテーブルが有するエントリの数と同一の数のエントリを有する。第1のテーブルは、多段構成のハッシュテーブルの1段目のテーブルとして用いられる。第2乃至第86のテーブルは、それぞれ、多段構成のハッシュテーブルの2段目乃至86段目のテーブルとして用いられる。
この場合、ストレージコントローラが、第1乃至第86のテーブルからハッシュ値を探索するためには、当該第1乃至第86のテーブルを順次メモリに読み込む必要がある。したがって従来技術では、ハッシュテーブルに関し、メモリが16,777,216×96エントリを格納するためのテーブル領域を有しているとしても、86回のI/O処理が必要となる。
これに対して本実施形態では、1段目のテーブルTB_1に、2段目のテーブルTBL_2乃至7段目のテーブルTBL_7が追加される。2段目のテーブルTBL_2、3段目のテーブルTBL_3及び4段目のテーブルTBL_4は、それぞれ1段目のテーブルTB_1が有するエントリの数の2倍、4倍及び8倍のエントリを有する。また、4段目のテーブルTBL_4、5段目のテーブルTBL_5及び6段目のテーブルTBL_6は、それぞれ1段目のテーブルTB_1が有するエントリの数の16倍、32倍及び64倍のエントリを有する。
この場合、ハッシュテーブル205の総エントリ数は、1段目のテーブルTB_1のそれの127倍となり、516Tバイトの記憶容量の論理ボリュームをサポートするのに必要な総エントリ数(つまり、1段目のテーブルTB_1の総エントリ数の86倍)を十分に超えている。このような構成のハッシュテーブル205が適用される本実施形態では、ストレージコントローラ12が、1段目のテーブルTB_1乃至7段目のテーブルTBL_7からハッシュ値を探索する場合、多くても7回のI/O処理で済む。
よって本実施形態によれば、ハッシュ値の探索に伴うテーブルアクセスのために必要となるI/O処理の回数を、従来技術と比較して大幅に減らすことができる。これにより本実施形態によれば、ハッシュ値探索の高速化を実現して、重複排除に関する処理能力を向上し、更にはストレージシステム10の書き込み性能(書き込み速度)を向上することができる。
しかも本実施形態では、ストレージコントローラ12はハッシュ値を探索するために、1段目のテーブルTB_1乃至7段目のテーブルTBL_7の各々の全体をメモリ122に読み込む必要はない。つまりストレージコントローラ12は、1段目のテーブルTB_1乃至7段目のテーブルTBL_7に含まれていて、且つ2段ハッシュ値(より詳細には、2段ハッシュ値で特定されるグループ)に対応付けられたリーフページのみをメモリ122に読み込むだけで良い。
更に本実施形態において、最も大きいサイズのリーフページは、7段目のTBL_7のリーフページLP_k(7)である。このリーフページLP_k(7)は6,144個のエントリを有している。したがって本実施形態においてストレージコントローラ12は、上述のI/O処理で、最大でも6,144個のエントリを有するリーフページをストレージ装置(より詳細には、HDD123)からメモリ(より詳細には、メモリ122)に読み込むだけで良い。換言するならば、メモリ122はハッシュテーブル205に関し、6,144エントリを格納するためのテーブル領域を有するだけで良い。
よって本実施形態によれば、ハッシュ値探索の範囲を、従来技術に比較して大幅に掘らすことができる。これにより本実施形態によれば、ハッシュ値探索の一層の高速化を実現して、ストレージシステム10の書き込み性能をより向上することができる。
図6は図5に示される管理情報MI1_0のフォーマットの例を示す。管理情報MI1_0は、前述したように、テーブルTBL_1が有するリーフページLP_k(1)の先頭のセクタST_0に登録される。管理情報MI1_0は、8つのフィールドF0乃至F7を含む。フィールドF0乃至F7の各々の長さは2バイトである。
管理情報MI1_0のフィールドF0は、使用エントリカウントCNTを設定するのに用いられる。使用エントリカウントCNTは、管理情報MI1_0(つまり、フィールドF0を含む管理情報MI1_0)が登録されるセクタST_0においてハッシュ情報の登録に使用されているエントリの数を示す。
管理情報MI1_0のフィールドF1乃至F7は、使用エントリカウントCNT1乃至CNT7を設定するのに用いられる。使用エントリカウントCNT1乃至CNT7は、テーブルTBL_1乃至TBL_7のリーフページLP_k(1)乃至LP_k(7)においてハッシュ情報の登録に使用されているエントリの数を示す。
図7は、図5に示される管理情報MI1_i(i=1,2,…,7)のフォーマットの例を示す。管理情報MI1_iは、前述したように、テーブルTBL_1が有するリーフページLP_k(1)のセクタST_i(つまり、セクタST_0を除くセクタ)に登録される。管理情報MI1_iは、フィールドF0を含む。フィールドF0の長さは2バイトである。
管理情報MI1_iのフィールドF0は、管理情報MI1_0と同様に、使用エントリカウントCNTを設定するのに用いられる。この使用エントリカウントCNTは、管理情報MI1_iが登録されるセクタST_iにおいてハッシュ情報の登録に使用されているエントリの数を示す。図7に示される管理情報MI1_iのフォーマットは、テーブルTBL_2乃至TBL_7が有するリーフページLP_k(2)乃至LP_k(7)の全てのセクタに登録される管理情報にも適用される。
図8は、図2に示されるメタテーブル206のデータ構造例を示す。メタテーブル206は、論理ボリュームを4K(キロ)バイト毎に区切ることにより得られる各領域(4Kバイト領域)に書き込まれているチャンクを管理するのに用いられる。メタテーブル206は、論理ボリュームのそれぞれの4Kバイト領域(より詳細には、4Kバイト領域に格納されるチャンク)を指し示す論理アドレスに対応付けられたエントリの集合を有する。
メタテーブル206の各エントリは、当該エントリに対応付けられた論理アドレスの示す4Kバイト領域に格納されるチャンクのチャンク番号を登録するのに用いられる。つまりメタテーブル206は、各4Kバイト領域に書き込まれているチャンクを示すために、当該4Kバイト領域の論理アドレスと、当該チャンクに割り当てられたチャンク番号とを対応付けるテーブルである。したがって重複管理部201は、メタテーブル206を参照することにより、目的の論理アドレスで指定される領域に格納されているチャンクを特定できる。
図9は、図2に示されるチャンクテーブル207のデータ構造例を示す。チャンクテーブル207は、チャンク番号に対応付けられたエントリの集合を有する。チャンクテーブル207の各エントリは、当該エントリと対応付けられたチャンク番号を有するチャンクに関するチャンク情報を登録するのに用いられる。チャンク情報は、物理アドレス及び参照カウントRCNTを含む。
チャンクテーブル207の各エントリは、物理アドレスフィールド及び参照カウントフィールドを有する。物理アドレスフィールドは、当該物理アドレスフィールドを有するエントリ(以下、対応エントリと称する)に対応付けられたチャンク番号を持つチャンクの物理位置を指し示す物理アドレスを登録するのに用いられる。チャンクの物理位置とは、当該チャンクが実際に格納されているHDD/SSDアレイ11の記憶領域の位置を指す。
参照カウントフィールドは、参照カウントRCNTを登録するのに用いられる。参照カウントRCNTは、対応エントリに対応付けられたチャンク番号で特定されるチャンク(以下、対応チャンクと称する)が、幾つの論理アドレス(4Kバイト領域)に対応付けられているかを示す。
例えば、参照カウントRCNTが“1”の場合、当該参照カウントRCNTは、対応チャンクが重複排除の対象となることなくHDD/SSDアレイ11に書き込まれていることを示す。換言するならば、参照カウントRCNTは、対応チャンクが、論理ボリューム内の1つの論理アドレスの指し示す4Kバイト領域だけに書き込まれていることを示す。これに対し、参照カウントRCNが例えば“2”の場合、当該参照カウントRCNは、重複排除により、HDD/SSDアレイ11には実体として1つのチャンクが書き込まれているものの、当該チャンクが2つの論理アドレスに対応付けられていることを示す。換言するならば、ホスト20からは、同一内容を持つチャンクが論理ボリューム内の2つの論理アドレスの指し示す4Kバイト領域に書き込まれていることを示す。
次に、本実施形態の動作について、図10乃至図12を参照して説明する。図10は、ストレージシステム10のストレージコントローラ12がホスト20からデータ書き込み要求を受信した場合に実行されるデータ書き込み処理の典型的な手順を説明するためのフローチャートの一部を示す図である。図11は、同データ書き込み処理の典型的な手順を説明するためのフローチャートの他の一部を示す図であり、図12は、同データ書き込み処理の典型的な手順を説明するためのフローチャートの残りを示す図である。
今、ホスト20からネットワーク30を介してストレージシステム10に、ファイルの書き込みを指定するデータ書き込み要求(つまり、ファイル書き込み要求)が送られたものとする。そして、ストレージシステム10のストレージコントローラ12が、ホスト20からのファイル書き込み要求を受信したものとする。
すると、ストレージコントローラ12の分割部200は、ファイル書き込み要求で指定されたファイル(つまりファイルデータ)を例えば4Kバイト毎に区切る。これにより、分割部200は、指定されたファイルを、4Kバイトのサイズを有する複数のチャンクに分割する(ステップS1)。つまり重複管理部201は、指定されたファイルから当該ファイルを構成する複数のチャンクを取得する。なお、指定されたファイルのサイズが4Kバイトの場合には、分割部200は、当該ファイル自体を1つのチャンクとして取得する。ここで、チャンクのサイズは固定長である必要はない。つまりチャンクのサイズは可変長であっても構わない。
重複管理部201は、取得されたチャンクの数を変数Nに設定する(ステップS2)。ここで、取得されたN個のチャンクをチャンクC_1乃至C_Nと表記する。ハッシュ生成部203は、チャンクC_1乃至C_Nのハッシュ値(つまり1段ハッシュ値)H1(C_1)乃至H1(C_N)を、例えば“SHA−256”と呼ばれる第1のハッシュ関数を用いて計算する(ステップS3)。1段ハッシュ値H1(C_1)乃至H1(C_N)は、それぞれ32バイトで表される。
次にハッシュ生成部203は、1段ハッシュ値H1(C_1)乃至H1(C_N)のハッシュ値(つまり2段ハッシュ値)H2(C_1)乃至H2(C_N)を、第2のハッシュ関数を用いて計算する(ステップS4)。前述したように、第2のハッシュ関数は、素数16,777,213を除数として用いる除算関数である。つまりハッシュ生成部203は、1段ハッシュ値H1(C_1)乃至H1(C_N)を素数16,777,213で除することによって取得される剰余を、2段ハッシュ値H2(C_1)乃至H2(C_N)として決定する。
すると重複管理部201は、ステップS1で取得されたN個のチャンクの1つを指定するのに用いられる変数nを初期値1に設定する(ステップS5)。そして重複管理部201は、ステップS1で取得されたN個のチャンクC_1乃至C_Nからn番目のチャンクC_nを選択する(ステップS6)。
すると重複判定部202は、重複管理部201によって選択されたチャンクC_nの1段ハッシュ値H1(C_n)に一致する1段ハッシュ値をハッシュテーブル205から探索するためのハッシュ値探索処理を実行する(ステップS7)。このハッシュ値探索処理において重複判定部202は、ステップS4で計算されたチャンクC_nの2段ハッシュ値H2(C_n)と対応付けられているグループに属し、且つハッシュテーブル205に登録されている1段ハッシュ値と順次比較する。この比較により、重複判定部202は1段ハッシュ値H1(C_n)に一致する1段ハッシュ値を探索する。このハッシュ値探索処理の詳細は後述する。
重複判定部202は、ハッシュ値探索処理の結果に基づいて、選択されたチャンクC_nの1段ハッシュ値H1(C_n)に一致する1段ハッシュ値がハッシュテーブル205に存在するかを判定する(ステップS8)。重複管理部201は、この重複判定部202による判定の結果に基づいて、ステップS9またはステップS16に進む。
もし、選択されたチャンクC_nの1段ハッシュ値H1(C_n)に一致する1段ハッシュ値が存在しないならば(ステップS8のNo)、重複管理部201は、チャンクC_nと同一内容を持つチャンクはHDD/SSDアレイ11に格納されていないと判断する。この場合、重複管理部201はステップS9に進む。
ステップS9において重複管理部201は、チャンクC_nにチャンク番号CNC_nを付与する。本実施形態では、シーケンシャルなチャンク番号が付与される。ステップS9でチャンクC_nに付与されるチャンク番号CNC_nは、他のチャンクに既に付与されている最新のチャンク番号に1を加算することによって得られる。このため、例えばHDD123には、最新のチャンク番号(または次に付与されるべきチャンク番号)が格納される。この最新のチャンク番号は、HDD123からメモリ122のワーク領域122cにロードされて用いられる。
なお、チャンクテーブル207のエントリを先頭エントリから順に参照することによっても、重複管理部201は、最新のチャンク番号を取得することができる。また、次に付与されるべきチャンク番号に対応付けられるチャンクテーブル207のエントリを指し示す次エントリポインタを、重複管理部201が用いても良い。重複管理部201は、この次エントリポインタに基づいて、チャンクC_nに付与されるチャンク番号CNC_nを決定することができる。
チャンクC_nにチャンク番号CNC_nが付与されると、アクセスコントローラ204は、当該チャンクC_nをHDD/SSDアレイ11内の空いている記憶領域に書き込む(ステップS10)。すると重複管理部201は、チャンクC_nの2段ハッシュ値H2(C−n)と対応付けられているハッシュテーブル205内のリーフページLP_k(h)に、チャンクC_nのハッシュ情報HIC_nを登録する(ステップS11)。このハッシュ情報HIC_nは、チャンクC_nの1段ハッシュ値H1(C−n)及び当該チャンクC_nのチャンク番号の対を含む。
LP_k(h)は、後述するように、ハッシュ値探索処理(ステップS7)で最後にハッシュ値が探索されたリーフページを示す。ここで、LP_k(h)におけるkは、グループインデックスとして用いられる2段ハッシュ値H2(C−n)を表す。また、LP_k(h)におけるhは、リーフページLP_k(h)が、h段目のテーブルTBL_hに含まれていることを示す。つまり、LP_k(h)は、h段目のテーブルTBL_hに含まれているk番目のリーフページであることを示す。
ステップS11の詳細について、以下に説明する。まず、最後にハッシュ値が探索されたリーフページLP_k(h)のセクタ及び当該セクタのエントリが、それぞれ、当該リーフページLP_k(h)のi番目のセクタST_i及び当該i番目のセクタST_iのj番目のエントリであるものとする。この場合、重複判定部202は、リーフページLP_k(h)のi番目のセクタST_i内のj+1番目のエントリに、チャンクC_nのハッシュ情報HIC_nを登録する。
また重複管理部201は、セクタST_iに含まれている管理情報中の使用エントリカウントCNTを1だけインクリメントする。更に重複管理部201は、リーフページLP_k(1)の先頭のセクタST_0に含まれている管理情報MI1_0中の使用エントリカウントCNThを1だけインクリメントする。この管理情報MI1_0は、後述するように、リーフページLP_k(1)の先頭のセクタST_0だけでなく、ワーク領域122cにも格納されている。
本実施形態では、ワーク領域122cに格納されている管理情報MI1_0中の使用エントリカウントCNThがインクリメントされる。当該ワーク領域122cに格納されている管理情報MI1_0は、HDD123に格納されているリーフページLP_k(1)の先頭のセクタST_0の管理情報MI1_0に、適当なタイミングで、例えば上書きされる。適当なタイミングとは、例えばストレージシステム10がビジーでない場合、或いはストレージシステム10の電源が遮断される前のタイミングを指す。
また、i番目のセクタST_iのj番目のエントリが、当該i番目のセクタの最終エントリ(ここでは、i=11)であるものとする。この場合、重複判定部202は、リーフページLP_k(h)の“i+1”番目のセクタST_(i+1)内の先頭エントリに、チャンクC_nのハッシュ情報HIC_nを登録する。
また重複管理部201は、セクタST_(i+1)に含まれている管理情報中の使用エントリカウントCNTを1だけインクリメントする。更に重複管理部201は、管理情報MI1_0中の使用エントリカウントCNThを1だけインクリメントする。
次に、最後にハッシュ値が探索されたリーフページLP_k(h)内のエントリが、当該リーフページLP_k(h)の最終のエントリ(より詳細には、リーフページLP_k(h)の最終のセクタ内の最終のエントリ)であるものとする。つまり、リーフページLP_k(h)の全てのエントリが使用されており、当該リーフページLP_k(h)内に空きエントリはないものとする。この場合、重複管理部201は上述の説明と異なり、“h+1”段目のテーブルTBL_(h+1)に含まれているk番目のリーフページLP_k(h+1)の先頭のセクタST_0(より詳細には、リーフページLP_k(h+1)の先頭のセクタST_0内の先頭のエントリ)にチャンクC_nのハッシュ情報HIC_nを登録する。
また重複管理部201は、リーフページLP_k(h+1)の先頭のセクタST_0に含まれている管理情報中の使用エントリカウントCNTを1だけインクリメントする。更に重複管理部201は、管理情報MI1_0中の使用エントリカウントCNT(h+1)を1だけインクリメントする。
さて、重複管理部201はステップS11を実行すると、ステップS12に進む。ステップS12において重複管理部201は、選択されたチャンクC_nの論理ボリューム内の位置を示す論理アドレスを取得する。この論理アドレスは、ホスト20からのファイル書き込み要求で指定される論理アドレス(ファイルの先頭アドレス)に4K(つまり、4,096)×(n−1)を加算することにより取得される。ステップS12において重複管理部201は更に、取得された論理アドレスに対応付けられているメタテーブル206のエントリに、選択されたチャンクC_nに付与されたチャンク番号CNC_nを登録する。
重複管理部201はステップS12を実行すると、ステップS13に進む。ステップS13において、まず重複管理部201は、選択されたチャンクC_nに付与されたチャンク番号CNC_nに対応付けられたチャンクテーブル207のエントリを選択する。ステップS13において、重複管理部201は更に、選択されたエントリに、選択されたチャンクC_nに関するチャンク情報CIC_nを登録する。このチャンク情報CIC_nは、選択されたチャンクC_nが書き込まれたHDD/SSDアレイ11内の記憶領域の物理アドレス及び参照カウントRCNを含む。参照カウントRCNの値は“1”である。
重複管理部201はステップS13を実行すると、ステップS14に進む。ステップS14において重複管理部201は変数nを1インクリメントする。そして重複管理部201は、インクリメントされた変数nがステップS2で設定されたチャンク数Nを超えているかを判定する(ステップS15)。もし、インクリメントされた変数nがチャンク数Nを超えていないならば(ステップS15のNo)、重複管理部201は、ホスト20からのファイル書き込み要求によって指定されたファイルに含まれている次のチャンクの書き込みを処理するために、ステップS6に戻る。これに対してインクリメントされた変数nがチャンク数Nを超えているならば(ステップS15のYes)、重複管理部201は、ホスト20からのファイル書き込み要求によって指定されたファイルに含まれている全てのチャンクの書き込みを終了したと判定する。この場合、図10乃至図12のフローチャートで示されるデータ書き込み処理は終了する。
次に、選択されたチャンクC_nの1段ハッシュ値H1(C_n)に一致する1段ハッシュ値が存在すると、重複判定部202がステップS8において判定した場合の動作を説明する。このように、ステップS8の判定が“Yes”の場合、重複管理部201は、選択されたチャンクC_nと同一内容を持つチャンクが既にHDD/SSDアレイ11に格納されていると判定する。ここで、HDD/SSDアレイ11に既に格納されていて、且つチャンクC_nと同一内容を持つチャンクをチャンクC_xと表記する。
ステップS8の判定が”Yes”の場合、同一内容を持つ複数のチャンクが重複してHDD/SSDアレイ11に格納されるのを排除するために、重複管理部201はステップS16に進む。ステップS16において重複管理部201は、選択されたチャンクC_nを、アクセスコントローラ204がHDD/SSDアレイ11に書き込む動作を抑止する。
次に重複管理部201は、チャンクC_xのチャンク番号を、選択されたチャンクC_nのチャンク番号CNC_nとして、メタテーブル206に登録する(ステップS17)。これにより、メタテーブル206には、同一のチャンク番号が、メタテーブル206内の少なくとも2つのエントリに登録されることになる。重複管理部201は、このチャンク番号が登録されるべきメタテーブル206のエントリを特定するために、選択されたチャンクC_nの論理ボリューム内の位置を示す論理アドレスを、ステップS12と同様の方法で取得する。
重複管理部201はステップS17を実行するとステップS18に進む。ステップS18において、まず重複管理部201は、選択されたチャンクC_nのチャンク番号(つまり、チャンクC_xのチャンク番号)に対応付けられたチャンクテーブル207のエントリに登録されているチャンク情報CI_Cnを参照する。ステップS18において、重複管理部201は更に、参照されたチャンク情報中の参照カウントRCNTを1インクリメントする。これにより、インクリメントされた参照カウントRCNTは、HDD/SSDアレイ11には実体として1つのチャンクが書き込まれているものの、同一内容を持つRCNT個のチャンクが論理ボリューム内のRCNT個の4Kバイト領域に書き込まれていることを示す。
重複管理部201はステップS18を実行するとステップS19に進む。ステップS19において、まず重複管理部201は、チャンクC_x(つまり、選択されたチャンクC_nと同一内容を持つチャンクC_x)が書かれているHDD/SSDアレイ11の記憶領域を指し示す物理アドレスを取得する。この物理アドレスは、ステップS18で参照されたチャンク情報に含まれている。ステップS19において、重複管理部201は更に、取得された物理アドレスを、選択されたチャンクC_nの論理アドレスに割り当てる。具体的には、重複管理部201は、図示せぬアドレス変換テーブルに、選択されたチャンクC_nの論理アドレスと取得された物理アドレスとの対応を示すアドレス変換情報(つまり、マッピング情報)を登録する。重複管理部201はステップS19を実行すると、ステップS14に進む。以降の動作は、重複管理部201がステップS13からステップS14に進んだ場合と同様である。
なお、ステップS19は必ずしも必要でない。例えば、ホスト20によって指定された論理アドレスを、重複管理部201は以下に述べるように、アドレス変換テーブルを用いることなく物理アドレスに変換することができる。重複管理部201はまず、ホスト20によって指定された論理アドレスに基づいてメタテーブル206を参照することにより、当該論理アドレスに対応付けられたエントリに登録されているチャンク番号を取得する。次に重複管理部201は、取得されたチャンク番号に基づいてチャンクテーブル207を参照することにより、当該チャンクに対応付けられたエントリに登録されている物理アドレスを取得する。
次に、本実施形態におけるハッシュ値探索処理(ステップS7)の詳細について、図13及び図14を参照して説明する。図13は、ハッシュ値探索処理の典型的な手順を説明するためのフローチャートの一部を示す図である。図13は、同ハッシュ値探索処理の典型的な手順を説明するためのフローチャートの残りを示す図である。
まず重複判定部202は、変数hを初期値1に設定する(ステップS21)。変数hは、ハッシュテーブル205内のh段目のテーブルTBL_hを示す。ステップS21において重複判定部202は更に、変数kを、選択されたチャンクC_nの2段ハッシュ値H2(C_n)に設定する。変数kは、テーブルTBL_hに含まれていて、且つ選択されたチャンクC_nの2段ハッシュ値H2(C_n)に対応付けられているk番目のリーフページLP_k(h)を示す。ステップS21において重複判定部202は更に、変数i及びjを、いずれも初期値0に設定する。変数iは、変数h及びkに基づいて特定されるリーフページLP_k(h)に含まれているi番目のセクタST_iを示す。変数jは、セクタST_i内のj番目のエントリを示す。
次に重複判定部202は、ハッシュテーブル205からh段目のテーブルTBL_hを選択する(ステップS22)。変数hが1である本実施形態では、テーブルTBL_hとして1段目のテーブルTBL_1が選択される。次に重複判定部202は、選択されたテーブルTBL_hに含まれていて、且つ選択されたチャンクC_nの2段ハッシュ値H2(C_n)=kに対応付けられているk番目のリーフページLP_k(h)を選択する(ステップS23)。ここでは、hが1であることから、テーブルTBL_1のk番目のリーフページLP_k(1)がリーフページLP_k(h)として選択される。ステップS23において、重複判定部202は、選択されたリーフページLP_k(h)をHDD123から読み出して、当該読み出されたリーフページLP_k(h)をメモリ122のテーブル領域122bに格納する。つまり重複判定部202は、選択されたリーフページLP_k(h)をメモリ122のテーブル領域122bにロードする。
次に重複判定部202は、選択された(ロードされた)リーフページLP_k(h)(ここでは、リーフページLP_k(1))のi番目のセクタST_iを選択する(ステップS24)。ここでは、i番目のセクタST_iとして、先頭(0番目)のセクタST_0が選択される。
重複判定部202は、リーフページLP_k(1)(つまり、メモリ122のテーブル領域122bに格納されたリーフページLP_k(1))の先頭のセクタST_0を選択した際に、当該セクタST_0に含まれている管理情報MI1_0を、例えばメモリ122のワーク領域122cにも格納する。これにより、重複判定部202は管理情報MI1_0中の使用エントリカウントCNT2乃至CNT7を参照するだけで、テーブルTBL_2乃至TBL_7のリーフページLP_k(2)乃至LP_k(7)内でそれぞれ使用されているエントリの数を取得することができる。つまり重複判定部202は、リーフページLP_k(2)乃至LP_k(7)をHDD123から読み出す前に、当該リーフページLP_k(2)乃至LP_k(7)内でそれぞれ使用されているエントリの数を取得することができる。また、重複判定部202は、管理情報MI1_0中の使用エントリカウントCNT1に基づいて、リーフページLP_k(1)内で使用されているエントリの数を取得することもできる。
よって重複判定部202は、リーフページLP_k(1)乃至LP_k(7)内でそれぞれ使用されているエントリの数(つまり、管理情報MI1_0中の使用エントリカウントCNT1乃至CNT7)に基づいて、使用されているエントリの数が零のリーフページを特定することができる。ここで、使用エントリカウントCNT1乃至CNT4が非零で、使用エントリカウントCNT5乃至CNT7が零であるものとする。この場合、重複判定部202は、せいぜい、リーフページLP_k(1)乃至LP_k(4)を対象にハッシュ値探索を行えば良いと決定できる。このリーフページに関する最大の探索範囲をhmaxと表記する。この例では、hmaxは4であり、リーフページLP_k(1)を先頭とする4つのリーフページが最大の探索範囲であることを示す。。
同様に重複判定部202は、管理情報MI1_0中の使用エントリカウントCNTh(h=1,2,…,7)に基づいて、リーフページLP_k(h)において使用されているセクタの数を特定できる。例えば、リーフページLP_k(1)(h=1)の各セクタのエントリの数は12である。したがって、使用エントリカウントCNT1(h=1)が例えば16である場合、重複判定部202は、リーフページLP_k(1)において使用されているセクタの数が2であると特定できる。この場合、重複判定部202は、せいぜい、リーフページLP_k(1)内のセクタST_0及びST_1を対象にハッシュ値探索を行えば良いと決定できる。このセクタに関する最大の探索範囲をimax(h,CNT1)と表記する。imax(h,CNT1)は、リーフページLP_k(1)において使用されているセクタの数から1を減じることによって得られる値である。
重複判定部202はステップS24を実行すると、ステップS25に進む。ステップS25において重複判定部202は、選択されたセクタST_iのj番目のエントリから1段ハッシュ値H1(C_x)を読み出す。次に重複判定部202は、読み出された1段ハッシュ値H1(C_x)とステップS1で計算されたチャンクC_nの1段ハッシュ値H1(C_n)とを比較する(ステップS26)。そして重複判定部202は、1段ハッシュ値H1(C_x)と1段ハッシュ値H1(C_n)とが等しいかを判定する(ステップS27)。
もし、ステップS27の判定が“Yes”であるならば、重複判定部202は、セクタST_iのj番目のエントリに含まれていて、且つ1段ハッシュ値H1(C_x)と対をなすチャンク番号を取得する(ステップS28)。ステップS27において重複判定部202は、取得されたチャンク番号を、選択されたチャンクC_nと同一内容を持つチャンクC_xのチャンク番号として、例えばメモリ122のワーク領域122cに一時的に格納する。これにより、ハッシュ値探索処理(ステップS7)は終了し、重複判定部202はステップS8へ進む。ワーク領域122cに一時的に格納されたチャンクC_xのチャンク番号は、ステップS17で用いられる。
一方、ステップS27の判定が“No”であるならば、重複判定部202は、1段ハッシュ値H1(C_n)と比較されるべき次の1段ハッシュ値を取得するために、ステップS29に進む。ステップS29において重複判定部202は、変数jを1だけインクリメントする。次に重複判定部202は、インクリメントされた変数jが変数jの最大値jmaxを超えているかを判定する(ステップS30)。本実施形態において変数jの最大値jmaxは、11である。
もし、ステップS30の判定が“No”であるならば、重複判定部202はステップS31に進む。ステップS31において、重複判定部202は、変数jがjmax(CNT)を超えているかを判定する。jmax(CNT)は、リーフページLP_k(h)のセクタST_iに含まれている管理情報MIh_i中の使用エントリカウントCNTを1だけ減じることによって得られる値(つまり、“CNT−1”)である。つまり、jmax(CNT)は、リーフページLP_k(h)のセクタST_iにおけるエントリに関する最大の探索範囲を示す。
もし、変数jがjmax(CNT)(つまり“CNT−1”)を超えているならば(ステップS31のYes)、重複判定部202は、1段ハッシュ値H1(C_n)と比較されるべき新たな1段ハッシュ値はハッシュテーブル205に存在せず、したがって1段ハッシュ値H1(C_n)はハッシュテーブル205に登録されている全ての1段ハッシュ値と一致しないと判定する。この場合、重複判定部202は、ハッシュ値探索処理を終了する。これに対して変数jがjmax(CNT)を超えていないならば(ステップS31のNo)、重複判定部202は、リーフページLP_k(h)のセクタST_i内の次のエントリから1段ハッシュ値を読み出すたためにステップS25に戻る。
一方、ステップS30の判定が“Yes”であるならば、重複判定部202は、変数iを1インクリメントする(ステップS32)。そして重複判定部202は、インクリメントされた変数iが変数iの最大値imax(h)を超えているかを判定する(ステップS33)。変数iの最大値imax(h)は、変数hが例えば1であれば7(8−1=7)であり、変数hが例えば2であれば15(16−1)である。
もし、ステップS33の判定が“No”であるならば、重複判定部202はステップS34に進む。ステップS34において、重複判定部202は、変数iがimax(h,CNTh)を超えているかを判定する。imax(h,CNTh)は、前述したように、リーフページLP_k(h)において使用されているセクタの数から1を減じることによって得られる値である。
もし、変数iがimax(h,CNTh)を超えているならば(ステップS34のYes)、重複判定部202は、1段ハッシュ値H1(C_n)と比較されるべき新たな1段ハッシュ値はハッシュテーブル205に存在せず、したがって1段ハッシュ値H1(C_n)はハッシュテーブル205に登録されている全ての1段ハッシュ値と一致しないと判定する。この場合、重複判定部202は、ハッシュ値探索処理を終了する。これに対して変数iがimax(h,CNTh)を超えているならば(ステップS34のNo)、重複判定部202は、リーフページLP_k(h)(ここでは、LP_k(1))の次のセクタを選択するためにステップS24に戻る。
一方、ステップS33の判定が“Yes”であるならば、重複判定部202は、変数hを1だけインクリメントする(ステップS35)。そして重複判定部202は、インクリメントされた変数hが、hmaxを超えているかを判定する(ステップS36)。hmaxは、前述したように、リーフページLP_k(1)の先頭のセクタST_0に含まれている管理情報MI1_0中の使用エントリカウントCNT1乃至CNT7に基づいて決定される。
もし、ステップS36の判定が“No”であるならば、重複判定部202は、ハッシュテーブル205から次のテーブル及び当該次のテーブル内の次のリーフページを選択するためにステップS22に戻る。これに対し、ステップS36の判定が“Yes”であるならば、重複判定部202は、1段ハッシュ値H1(C_n)と比較されるべき新たな1段ハッシュ値はハッシュテーブル205に存在せず、したがって1段ハッシュ値H1(C_n)はハッシュテーブル205に登録されている全ての1段ハッシュ値と一致しないと判定する。この場合、重複判定部202は、ハッシュ値探索処理を終了する。
次に、ホスト20によって要求されたファイル書き込みの例について、図15乃至図18を参照して説明する。図15は、ホスト20から順に送られる3つのファイル書き込み要求によって指定されるファイルF0乃至F2と、当該ファイルF0乃至F2が4Kバイト毎に区切るられることにより取得されるチャンクとの関係の例を示す。図16は、ハッシュテーブル205に含まれている例えば1段目のテーブルTBL_1の内容の変化の例を示す。図17は、メタテーブル206の内容の変化の例を示す。図18は、チャンクテーブル207の内容の変化の例を示す。
まず、ストレージシステム10の運用の開始後に、ホスト20からストレージシステム10のストレージコントローラ12に、図15(A)に示される16KバイトのファイルF0を論理ボリュームの論理アドレスLa0から始まる領域に書き込むことが要求されたものとする。この場合、ストレージコントローラ12の分割部200は、ファイルF0を4つのチャンクCa0,Ca1,Ca2及びCa3に分割する。チャンクCa1,Ca2及びCa3が書き込まれるべき論理アドレスLa1,La2及びLa3は、それぞれLa0+4K,La0+8K,La0+12Kである。チャンクCa0,Ca1,Ca2及びCa3はそれぞれデータA,B,C及びDを有する。ハッシュ生成部203は、チャンクCa0,Ca1,Ca2及びCa3のハッシュ値(1段ハッシュ値)H(A),H(B),H(C)及びH(D)を計算する。
ここで、チャンクCa0,Ca1,Ca2及びCa3と同一内容を有する他のチャンクが存在しないものとする。この場合、アクセスコントローラ204は、チャンクCa0,Ca1,Ca2及びCa3をHDD/SSDアレイ11の空き領域、例えば物理アドレスPa0,Pa1,Pa2及びPa3で指定される物理領域に書き込む。また、重複管理部201は、チャンクCa0,Ca1,Ca2及びCa3に、例えばチャンク番号0,1,2及び3を付与する。
重複管理部201は、1段ハッシュ値H(A),H(B),H(C)及びH(D)とチャンク番号0,1,2及び3とのそれぞれの対を、例えば、図16(A)に示されるようにテーブルTBL_1に登録する。なお、図16(A)では省略されているが、これらの対は、ハッシュ値H(A),H(B),H(C),H(D)それぞれの2段ハッシュ値に対応付けられたテーブルTBL_1のリーフページに登録される。
また重複管理部201は、論理アドレスLa0,La1,La2及びLa3にそれぞれ対応付けられたメタテーブル206のエントリに、チャンクCa0,Ca1,Ca2及びCa3のチャンク番号0,1,2及び3を、図17(A)に示すように登録する。また重複管理部201は、チャンクCa0,Ca1,Ca2及びCa3のチャンク番号0,1,2及び3にそれぞれ対応付けられたチャンクテーブル207のエントリに、チャンクCa0,Ca1,Ca2及びCa3が書き込まれた物理領域の物理アドレスPa0,Pa1,Pa2及びPa3を、図18(A)に示すように登録する。また重複管理部201は、チャンクテーブル207において、物理アドレスPa0,Pa1,Pa2及びPa3とそれぞれ対をなす参照カウントRCNTにいずれも1を設定する。
次に、ホスト20からストレージコントローラ12に、図15(B)に示される12KバイトのファイルF1を論理ボリュームの論理アドレスLb0から始まる領域に書き込むことが要求されたものとする。この場合、ストレージコントローラ12の分割部200は、ファイルF1を3つのチャンクCb0,Cb1及びCb2に分割する。チャンクCb1及びCb2が書き込まれるべき論理アドレスLb1及びLb2は、それぞれLb0+4K及びLb0+8Kである。チャンクCb0,Cb1及びCb2はそれぞれデータX,Y及びAを有する。ハッシュ生成部203は、チャンクCb0,Cb1及びCb2のハッシュ値(1段ハッシュ値)H(X),H(Y)及びH(A)を計算する。
ここでは、チャンクCb0及びCb1と同一内容を有する他のチャンクは存在しないが、チャンクCb2と同一内容(A)を有するチャンクCa0が存在する。この場合、アクセスコントローラ204は、チャンクCb0及びCb1をHDD/SSDアレイ11の空き領域、例えば物理アドレスPb0及びPb1で指定される物理領域に書き込む。一方、チャンクCb2に関してはチャンクCa0との重複を排除するために、重複管理部201は、アクセスコントローラ204がHDD/SSDアレイ11に当該チャンクCb2を書き込むことを抑止する。また、重複管理部201は、チャンクCb0及びCb1に、最新のチャンク番号3に後続するチャンク番号4及び5を付与する。また、チャンクCa0と同一内容(A)を有するチャンクCb2のチャンク番号には、当該チャンクCa0のチャンク番号0が用いられる。
重複管理部201は、1段ハッシュ値H(X)及びH(Y)とチャンク番号4及び5とのそれぞれの対を、例えば、図16(B)に示されるようにテーブルTBL_1に登録する。また重複管理部201は、論理アドレスLb0,Lb1及びLb2にそれぞれ対応付けられたメタテーブル206のエントリに、チャンクCb0,Cb1及びCb2のチャンク番号4,5及び0を、図17(B)に示すように登録する。
また重複管理部201は、チャンクCb0及びCb1のチャンク番号4及び5にそれぞれ対応付けられたチャンクテーブル207のエントリに、チャンクCb0及びCb1が書き込まれた物理領域の物理アドレスPb0及びPb1を、図18(B)に示すように登録する。また重複管理部201は、チャンクテーブル207において、物理アドレスPb0及びPb1とそれぞれ対をなす参照カウントRCNTにいずれも1を設定する。また重複管理部201は、チャンクCb2と同一内容(A)を有するチャンクCa0のチャンク番号0に対応付けられたチャンクテーブル207のエントリの参照カウントRCNTを、図18(A)に示される1から図18(B)に示される2に更新する。
次に、ホスト20からストレージコントローラ12に、図15(C)に示される12KバイトのファイルF2を論理ボリュームの論理アドレスLc0から始まる領域に書き込むことが要求されたものとする。この場合、ストレージコントローラ12の分割部200は、ファイルF2を3つのチャンクCc0,Cc1及びCc2に分割する。チャンクCc1及びCc2が書き込まれるべき論理アドレスLc1及びLc2は、それぞれLc0+4K及びLc0+8Kである。チャンクCc0,Cc1及びCc2はそれぞれデータE,F及びAを有する。ハッシュ生成部203は、チャンクCc0,Cc1及びCc2のハッシュ値(1段ハッシュ値)H(E),H(F)及びH(A)を計算する。
ここでは、チャンクCc0及びCc1と同一内容を有する他のチャンクは存在しないが、チャンクCc2と同一内容(A)を有するチャンクCa0が存在する。この場合、アクセスコントローラ204は、チャンクCc0及びCc1をHDD/SSDアレイ11の空き領域、例えば物理アドレスPc0及びPc1で指定される物理領域に書き込む。一方、チャンクCc2に関してはチャンクCa0との重複を排除するために、重複管理部201は、アクセスコントローラ204がHDD/SSDアレイ11に当該チャンクCc2を書き込むことを抑止する。また、重複管理部201は、チャンクCc0及びCc1に、最新のチャンク番号6に後続するチャンク番号7及び8を付与する。また、チャンクCa0と同一内容(A)を有するチャンクCc2のチャンク番号には、当該チャンクCa0のチャンク番号0が用いられる。
重複管理部201は、1段ハッシュ値H(E)及びH(Y)とチャンク番号6及び7とのそれぞれの対を、例えば、図16(C)に示されるようにテーブルTBL_1に登録する。また重複管理部201は、論理アドレスLc0,Lc1及びLc2にそれぞれ対応付けられたメタテーブル206のエントリに、チャンクCc0,Cc1及びCc2のチャンク番号6,7及び0を、図17(C)に示すように登録する。
また重複管理部201は、チャンクCc0及びCc1のチャンク番号6及び7にそれぞれ対応付けられたチャンクテーブル207のエントリに、チャンクCc0及びCc1が書き込まれた物理領域の物理アドレスPc0及びPc1を、図18(C)に示すように登録する。また重複管理部201は、チャンクテーブル207において、物理アドレスPc0及びPc1とそれぞれ対をなす参照カウントRCNTにいずれも1を設定する。また重複管理部201は、チャンクCc2と同一内容(A)を有するチャンクCa0のチャンク番号0に対応付けられたチャンクテーブル207のエントリ内の参照カウントRCNTを、図18(B)に示される2から図18(C)に示される3に更新する。
ここで、ホスト20からストレージコントローラ12に、ファイルF1の削除が要求されたものとする。この場合、重複管理部201は、論理アドレスb0,b1及びb2にそれぞれ対応付けられているメタテーブル206の3つのエントリの内容を、図17(D)に示されるように無効化する。図17(D)では、無効エントリを示すために、該当するエントリに斜線が付されている。このような無効化のために、メタテーブル206の各エントリの特定のビットが、当該エントリの内容が有効であるか否かを示すバリッドビットとして用いられる。
重複管理部201は、論理アドレスb0,b1及びb2にそれぞれ対応付けられているメタテーブル206の3つのエントリ内のそれぞれのバリッドビットを、いずれも当該エントリの内容が無効であることを示す状態(例えば“0”)に設定する。また重複管理部201は、削除されるファイルF1を構成するチャンクCb0,Cb1及びCb2のチャンク番号4,5及び0にそれぞれ対応付けられたチャンクテーブル207のエントリ内の参照カウントRCNTを、図18(C)に示される1,1及び3から図18(D)に示される0,0及び2に更新する。
本実施形態では、このような状態で新たなチャンクがHDD/SSDアレイ11に書き込まれる場合、当該新たなチャンクにはチャネル番号8が付与される。このとき、チャネル番号4及び5が付与されている有効なチャンクは存在しない。そこで本実施形態では、ストレージコントローラ12の待ち時間、或いはホスト20からの指示に応じて、断片化解消処理(デフラグメンテーション処理)が行われる。つまり、HDD/SSDアレイ11に格納されている有効なチャンクが、例えばファイル毎に当該HDD/SSDアレイ11の物理アドレスが連続する領域に再配置値される。この際、有効な全てのチャンクに連続するチャネル番号が改めて付与される。これに応じて、ハッシュテーブル205、メタテーブル206及びチャンクテーブル207も更新される。
以上説明した少なくとも1つの実施形態によれば、データの重複を排除するためのハッシュテーブル探索を高速化できるストレージシステム、ストレージコントローラ及び方法を提供できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
本発明の実施形態は、データの重複をハッシュテーブルに基づいて排除するためのストレージシステムに関する。
本発明が解決しようとする課題は、データの重複を排除するためのハッシュテーブル探索を高速化できるストレージシステムを提供することにある。
以上説明した少なくとも1つの実施形態によれば、データの重複を排除するためのハッシュテーブル探索を高速化できるストレージシステムを提供できる。

Claims (6)

  1. ストレージ装置と、
    前記ストレージ装置へのアクセスを制御するストレージコントローラと、
    第1の数のエントリを有する第1のテーブル及び前記第1の数より大きい第2の数のエントリを有する第2のテーブルを含むハッシュテーブルとを具備し、
    前記ストレージコントローラは、
    ホストコンピュータからの書き込み要求によって指定されたデータを複数のチャンクに分割する分割部と、
    前記複数のチャンクの各々のデータに基づいて、前記複数のチャンクの各々の第1の長さを持つハッシュ値を計算するハッシュ生成部と、
    前記ストレージ装置にチャンクを書き込むアクセスコントローラと、
    前記ストレージ装置に第1のチャンクが書き込まれる場合、前記第1のチャンクの第1のハッシュ値を、前記第1のチャンクと対応付けて前記ハッシュテーブルの前記第1のテーブルに優先的に登録する重複管理部と、
    第2のチャンクの第2のハッシュ値が計算された場合、前記第2のハッシュ値に一致する第3のハッシュ値を前記ハッシュテーブルから探索する処理を、前記第1のテーブルからの探索を優先して実行することにより、前記第2のチャンクと同一内容を持つ第3のチャンクが前記ストレージ装置に格納されているかを判定する重複判定部とを具備し、
    前記重複管理部は、前記第3のチャンクが前記ストレージ装置に格納されていると判定された場合、前記第2のチャンクが前記ストレージ装置に書き込まれるのを抑止する
    ストレージシステム。
  2. 前記第1のテーブルは、前記第1の長さをそれぞれ持つ複数のハッシュ値を当該複数のハッシュ値に基づいて複数のグループに分類して登録するための、前記複数のグループを指し示す複数のグループインデックスにそれぞれ対応付けられた複数の第1のページを備え、
    前記複数の第1のページの各々は第3の数のエントリを有し、
    前記複数の第1のページの総エントリ数は前記第1の数に等しく、
    前記第2のテーブルは、前記複数のグループインデックスにそれぞれ対応付けられた複数の第2のページを備え、
    前記複数の第2のページの各々は前記第3の数よりも大きい第4の数のエントリを有し、
    前記複数の第2のページの総エントリ数は前記第2の数に等しく、
    前記重複判定部は、前記第2のチャンクの前記第2のハッシュ値に基づいて、当該第2のハッシュ値が属するグループを特定し、前記特定されたグループのグループインデックスに対応付けられた前記第1のページを優先的に選択して、前記第3のハッシュ値を前記選択された第1のページから探索し、前記選択された第1のページから前記第3のハッシュ値を探索できず、且つ少なくとも前記選択された第1のページの前記第3の数のエントリが全て使用されている場合に、前記特定されたグループのグループインデックスに対応付けられた前記第2のページを選択して、前記第3のハッシュ値を前記選択された第2のページから探索し、
    前記重複管理部は、前記第3のチャンクが前記ストレージ装置に格納されていないと判定された場合に、前記第1のページ及び前記第2のページのうち最後に選択されたページに前記第1のハッシュ値を登録する
    請求項1記載のストレージシステム。
  3. 前記ハッシュ生成部は、前記第1の長さを持つハッシュ値に基づいて、前記第1の長さよりも短い第2の長さを持ち、且つ前記グループインデックスとして用いられるハッシュ値を計算し、
    前記重複判定部は、前記第3のハッシュ値を前記ハッシュテーブルから探索する場合、前記第2のハッシュ値に基づいて計算される前記第2の長さを持つ第4のハッシュ値を、前記第3のハッシュ値が探索されるべきグループを指定するグループインデックスとして用いる
    請求項2記載のストレージシステム。
  4. 前記ストレージコントローラは、揮発性のメモリを更に具備し、
    前記ハッシュテーブルは、前記ストレージ装置、または前記ストレージコントローラが有するローカルなストレージ装置に格納されており、
    前記複数の第1のページの各々は、当該第1のページ内で使用されているエントリの数と、当該第1のページが属するグループのグループインデックスに対応付けられた前記第2のページ内で使用されているエントリの数とを示す管理情報を含み、
    前記重複判定部は、前記第1のページが選択された場合、当該選択された第1のページを前記メモリにロードして、前記第3のハッシュ値を前記ロードされた第1のページから探索し、前記ロードされた第1のページから前記第3のハッシュ値を探索できず、且つ前記ロードされた第1のページに含まれている前記管理情報によって示される前記第2のページ内で使用されているエントリの数が零でない場合に、前記第2のページを選択して、当該選択された第2のページを前記メモリにロードして、前記第3のハッシュ値を前記ロードされた第2のページから探索する
    請求項2記載のストレージシステム。
  5. ストレージ装置へのアクセスを制御するストレージコントローラにおいて、
    ホストコンピュータからの書き込み要求によって指定されたデータを複数のチャンクに分割する分割部と、
    前記複数のチャンクの各々のデータに基づいて、前記複数のチャンクの各々の第1の長さを持つハッシュ値を計算するハッシュ生成部と、
    前記ストレージ装置にチャンクを書き込むアクセスコントローラと、
    前記ストレージ装置に第1のチャンクが書き込まれる場合、前記第1のチャンクの第1のハッシュ値を、前記第1のチャンクと対応付けて、第1のテーブル及び第2のテーブルを含むハッシュテーブルの前記第1のテーブルに優先的に登録する重複管理部と、
    第2のチャンクの第2のハッシュ値が計算された場合、前記第2のハッシュ値に一致する第3のハッシュ値を前記ハッシュテーブルから探索する処理を、前記第1のテーブルからの探索を優先して実行することにより、前記第2のチャンクと同一内容を持つ第3のチャンクが前記ストレージ装置に格納されているかを判定する重複判定部とを具備し、
    前記重複管理部は、前記第3のチャンクが前記ストレージ装置に格納されていると判定された場合、前記第2のチャンクが前記ストレージ装置に書き込まれるのを抑止し、
    前記ハッシュテーブルは、前記ストレージ装置、または前記ストレージコントローラが有するローカルなストレージ装置に格納されており、
    前記第1のテーブルは第1の数のエントリを有し、
    前記第2のテーブルは前記第1の数よりも大きい第2の数のエントリを有している
    ストレージコントローラ。
  6. ストレージ装置へのアクセスを制御するストレージコントローラに適用される、データの重複をハッシュテーブルに基づいて排除するための方法であって、
    ホストコンピュータからの書き込み要求によって指定されたデータを複数のチャンクに分割し、
    前記複数のチャンクの各々のデータに基づいて、前記複数のチャンクの各々の第1の長さを持つハッシュ値を計算し、
    前記ストレージ装置に第1のチャンクが書き込まれる場合、前記第1のチャンクの第1のハッシュ値を、前記第1のチャンクと対応付けて、第1のテーブル及び第2のテーブルを含むハッシュテーブルの前記第1のテーブルに優先的に登録し、
    第2のチャンクの第2のハッシュ値が計算された場合、前記第2のハッシュ値に一致する第3のハッシュ値を前記ハッシュテーブルから探索する処理を、前記第1のテーブルからの探索を優先して実行し、
    前記第2のチャンクと同一内容を持つ第3のチャンクが前記ストレージ装置に格納されているかを、前記探索の結果に基づいて判定し、
    前記第3のチャンクが前記ストレージ装置に格納されていると判定された場合、前記第2のチャンクが前記ストレージ装置に書き込まれるのを抑止し、
    前記ハッシュテーブルは、前記ストレージ装置、または前記ストレージコントローラが有するローカルなストレージ装置に格納されており、
    前記第1のテーブルは第1の数のエントリを有し、
    前記第2のテーブルは前記第1の数よりも大きい第2の数のエントリを有している
    方法。
JP2013517504A 2013-03-29 2013-03-29 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム Active JP5444506B1 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2013/059530 WO2014155668A1 (ja) 2013-03-29 2013-03-29 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム、ストレージコントローラ及び方法

Publications (2)

Publication Number Publication Date
JP5444506B1 JP5444506B1 (ja) 2014-03-19
JPWO2014155668A1 true JPWO2014155668A1 (ja) 2017-02-16

Family

ID=50614397

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013517504A Active JP5444506B1 (ja) 2013-03-29 2013-03-29 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム

Country Status (4)

Country Link
US (1) US9152341B2 (ja)
JP (1) JP5444506B1 (ja)
CN (1) CN104246722B (ja)
WO (1) WO2014155668A1 (ja)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8819208B2 (en) 2010-03-05 2014-08-26 Solidfire, Inc. Data deletion in a distributed data storage system
US11636031B2 (en) * 2011-08-11 2023-04-25 Pure Storage, Inc. Optimized inline deduplication
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
US11733908B2 (en) 2013-01-10 2023-08-22 Pure Storage, Inc. Delaying deletion of a dataset
US10908835B1 (en) 2013-01-10 2021-02-02 Pure Storage, Inc. Reversing deletion of a virtual machine
KR20150002297A (ko) * 2013-06-28 2015-01-07 삼성전자주식회사 스토리지 시스템 및 그의 동작 방법
US9405783B2 (en) * 2013-10-02 2016-08-02 Netapp, Inc. Extent hashing technique for distributed storage architecture
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
US9658774B2 (en) 2014-07-09 2017-05-23 Hitachi, Ltd. Storage system and storage control method
US9798728B2 (en) 2014-07-24 2017-10-24 Netapp, Inc. System performing data deduplication using a dense tree data structure
US10133511B2 (en) 2014-09-12 2018-11-20 Netapp, Inc Optimized segment cleaning technique
US9671960B2 (en) 2014-09-12 2017-06-06 Netapp, Inc. Rate matching technique for balancing segment cleaning and I/O workload
US9836229B2 (en) 2014-11-18 2017-12-05 Netapp, Inc. N-way merge technique for updating volume metadata in a storage I/O stack
US9720601B2 (en) 2015-02-11 2017-08-01 Netapp, Inc. Load balancing technique for a storage array
US9762460B2 (en) 2015-03-24 2017-09-12 Netapp, Inc. Providing continuous context for operational information of a storage system
US9710317B2 (en) 2015-03-30 2017-07-18 Netapp, Inc. Methods to identify, handle and recover from suspect SSDS in a clustered flash array
WO2016194121A1 (ja) * 2015-06-01 2016-12-08 株式会社日立製作所 ストレージシステム、計算機装置、及び、重複排除デバイス
CN106326285B (zh) * 2015-06-30 2019-11-12 华为技术有限公司 一种存储数据的方法及装置
US9740566B2 (en) 2015-07-31 2017-08-22 Netapp, Inc. Snapshot creation workflow
US10606499B2 (en) * 2015-09-11 2020-03-31 Hitachi, Ltd. Computer system, storage apparatus, and method of managing data
US9665287B2 (en) * 2015-09-18 2017-05-30 Alibaba Group Holding Limited Data deduplication using a solid state drive controller
WO2017061022A1 (ja) * 2015-10-09 2017-04-13 株式会社日立製作所 データを重複排除するシステム
US10255288B2 (en) * 2016-01-12 2019-04-09 International Business Machines Corporation Distributed data deduplication in a grid of processors
JP6587953B2 (ja) * 2016-02-10 2019-10-09 東芝メモリ株式会社 ストレージコントローラ、ストレージ装置、データ処理方法およびプログラム
JP6406283B2 (ja) * 2016-03-01 2018-10-17 日本電気株式会社 ストレージ装置およびストレージ方法
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
JP6767825B2 (ja) * 2016-09-20 2020-10-14 ヤフー株式会社 データ管理装置、データ管理方法、およびデータ管理プログラム
KR102559518B1 (ko) 2016-09-28 2023-07-26 에스케이하이닉스 주식회사 메모리 제어장치 및 방법
JP6841024B2 (ja) 2016-12-09 2021-03-10 富士通株式会社 データ処理装置,データ処理プログラムおよびデータ処理方法
JP7074454B2 (ja) * 2017-10-30 2022-05-24 キオクシア株式会社 計算機システムおよび制御方法
KR102536637B1 (ko) * 2018-03-29 2023-05-26 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
WO2021016728A1 (zh) * 2019-07-26 2021-02-04 华为技术有限公司 存储系统中数据处理方法、装置及计算机存储可读存储介质
CN114064621B (zh) * 2021-10-28 2022-07-15 江苏未至科技股份有限公司 一种重复数据判断方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03282966A (ja) 1990-03-30 1991-12-13 Fujitsu Ltd ハッシュエントリ領域管理方法
US7278131B2 (en) 2003-03-03 2007-10-02 Microsoft Corporation Compact hardware identification for binding a software package to a computer system having tolerance for hardware changes
JP5043820B2 (ja) 2005-03-11 2012-10-10 ロックソフト リミテッド 低冗長記憶システムで索引を行う方法
US7870409B2 (en) * 2007-09-26 2011-01-11 Hitachi, Ltd. Power efficient data storage with data de-duplication
JP4962483B2 (ja) 2008-12-19 2012-06-27 日本電気株式会社 情報処理装置
WO2010097960A1 (en) 2009-02-25 2010-09-02 Hitachi, Ltd. Storage system and data processing method for the same
JP5254141B2 (ja) * 2009-07-14 2013-08-07 富士通株式会社 アーカイブ装置、データ格納プログラムおよびデータ格納方法
US8396873B2 (en) * 2010-03-10 2013-03-12 Emc Corporation Index searching using a bloom filter
JP2012133551A (ja) * 2010-12-21 2012-07-12 Nec Corp 書き込み制御システム及び書き込み制御方法
JP2013058133A (ja) * 2011-09-09 2013-03-28 Nec Corp データ書き込み装置

Also Published As

Publication number Publication date
WO2014155668A1 (ja) 2014-10-02
CN104246722A (zh) 2014-12-24
JP5444506B1 (ja) 2014-03-19
US20140297980A1 (en) 2014-10-02
CN104246722B (zh) 2017-02-22
US9152341B2 (en) 2015-10-06

Similar Documents

Publication Publication Date Title
JP5444506B1 (ja) データの重複をハッシュテーブルに基づいて排除するためのストレージシステム
US9891858B1 (en) Deduplication of regions with a storage system
US9063877B2 (en) Storage system, storage controller, and method for managing mapping between local address and physical address
US10055420B1 (en) Method to optimize random IOS of a storage device for multiple versions of backups using incremental metadata
JP6240071B2 (ja) ストレージシステムにおけるマッピングテーブルを効果的に管理するコンピューターシステムおよびその方法
JP6200886B2 (ja) フラッシュストレージアレイにおける論理セクタマッピング
US10956071B2 (en) Container key value store for data storage devices
US8281105B2 (en) I/O conversion method and apparatus for storage system
JP5976980B1 (ja) 階層化ストレージシステム、階層化ストレージ装置を利用するコンピュータ、及びファイルへのアクセスのカウントを補正する方法
US11061827B2 (en) Metadata representation for enabling partial page duplication
US10592150B2 (en) Storage apparatus
US9996426B1 (en) Sparse segment trees for high metadata churn workloads
US20180307440A1 (en) Storage control apparatus and storage control method
US10963177B2 (en) Deduplication using fingerprint tries
WO2016038714A1 (ja) ファイルシステム、データ重複排除方法、及びファイルシステムのためのプログラム
JP5141234B2 (ja) 階層記憶制御装置、階層記憶制御システム及びそれらに用いる階層記憶制御方法及びそのプログラム
US11226769B2 (en) Large-scale storage system and data placement method in large-scale storage system
WO2018061161A1 (ja) ストレージ装置およびその制御方法
JP6419662B2 (ja) ストレージシステム及びデータ重複検出方法
US11138129B2 (en) Globally optimized partial page deduplication of storage objects
WO2016194121A1 (ja) ストレージシステム、計算機装置、及び、重複排除デバイス
US20210240628A1 (en) Changing page size in an address-based data storage system
JP2018185760A (ja) データの重複を排除するためのストレージ装置
US20210109869A1 (en) Determining capacity in a global deduplication system
JP2022091062A (ja) 情報処理装置、重複除去方法及び重複除去プログラム

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131220

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

Ref document number: 5444506

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350