JP6867578B2 - ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム - Google Patents

ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム Download PDF

Info

Publication number
JP6867578B2
JP6867578B2 JP2016106306A JP2016106306A JP6867578B2 JP 6867578 B2 JP6867578 B2 JP 6867578B2 JP 2016106306 A JP2016106306 A JP 2016106306A JP 2016106306 A JP2016106306 A JP 2016106306A JP 6867578 B2 JP6867578 B2 JP 6867578B2
Authority
JP
Japan
Prior art keywords
data
data block
storage device
storage
volume
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.)
Active
Application number
JP2016106306A
Other languages
English (en)
Other versions
JP2017211920A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016106306A priority Critical patent/JP6867578B2/ja
Priority to US15/495,120 priority patent/US20170344269A1/en
Publication of JP2017211920A publication Critical patent/JP2017211920A/ja
Application granted granted Critical
Publication of JP6867578B2 publication Critical patent/JP6867578B2/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/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/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/0647Migration mechanisms
    • G06F3/0649Lifecycle management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/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/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/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Description

本発明は、ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムに関する。
ストレージシステムの技術の一例として、重複するデータを記憶装置に格納しないようにして、記憶装置の記憶領域を効率的に使用する「重複除去」と呼ばれる技術が知られている。また、ストレージシステムの技術の他の例として、アクセス頻度の高いデータを高速であるが高価な記憶装置に格納し、アクセス頻度の低いデータを低速であるが安価な記憶装置に格納する「階層化」と呼ばれる技術も知られている。
特開2014−041452号公報 特開2011−192259号公報
ストレージシステムにおいて重複除去技術と階層化技術とを同時に使用する方法としては、例えば、先に階層化処理を実行し、その後に重複除去処理を実行する方法が考えられる。この場合例えば、論理ボリュームのある論理アドレスに対するデータの書き込みがホスト装置から要求されると、この論理アドレスに対するアクセス頻度が判定される。アクセス頻度が低い場合、データの書き込み先が低速な記憶装置に決定され、次に、このデータが低速な記憶装置にすでに格納されているかが判定される。このデータが低速な記憶装置に格納されていない場合、データは低速な記憶装置に格納されるが、格納されている場合には、データが低速な記憶装置に格納されずに、このデータが格納されている物理アドレスが上記論理アドレスに対応付けられる。一方、アクセス頻度が高い場合、データの書き込み先は高速な記憶装置に決定され、高速な記憶装置を処理対象として上記と同様の重複除去処理が実行される。
しかし、この方法では次のような問題がある。この方法によれば、論理ボリュームにおける異なる複数の論理アドレスから短期間に同じデータが読み出された場合、個々の論理アドレスでのアクセス頻度は低いと判定されるので、これらのデータは低速な記憶装置に格納される。また、重複除去処理によって、これらの論理アドレスには低速な記憶装置上の1つの物理アドレスが割り当てられる。このため、実際には、低速な記憶装置上の同じ物理アドレスから複数回データの読み出しが行われることになる。このように、実際には頻繁に読み出しが行われているデータであるにもかかわらず、このデータが低速な記憶装置に格納された状態になり、アクセス速度が低くなるケースがあるという問題がある。
1つの側面では、本発明は、アクセス性能が改善されたストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラムを提供することを目的とする。
1つの案では、記憶部と制御部とを有する次のようなストレージ制御装置が提供される。記憶部は、読み出し頻度情報を記憶する。制御部は、ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、論理ボリュームにおける第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、重複除去を行ってデータが格納される第1の記憶装置に第1のデータブロックを格納し、書き込み先アドレスに対するアクセス頻度が低い場合には、重複除去を行ってデータが格納され、第1の記憶装置よりアクセス性能の低い第2の記憶装置に第1のデータブロックを格納し、論理ボリュームに格納された第1のデータブロックのうち、ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、第2のデータブロックの読み出し頻度を示す指標とを対応付けて、読み出し頻度情報に登録し、第2の記憶装置に格納された第1のデータブロックのうち、読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、第2の記憶装置から第1の記憶装置に移動させる。
また、1つの案では、第1のストレージ装置と、第2のストレージ装置と、ストレージ制御装置とを含む次のようなストレージシステムが提供される。第1のストレージ装置は、重複除去を行って第1の記憶装置にデータを格納する。第2のストレージ装置は、重複除去を行って第1の記憶装置よりアクセス速度の低い第2の記憶装置にデータを格納する。ストレージ制御装置は、記憶部と制御部とを備える。記憶部は、読み出し頻度情報を記憶する。制御部は、ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、論理ボリュームにおける第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、第1のデータブロックを第1の記憶装置に格納するように第1のストレージ装置に要求し、書き込み先アドレスに対するアクセス頻度が低い場合には、第1のデータブロックを第2の記憶装置に格納するように第2のストレージ装置に要求し、論理ボリュームに格納された第1のデータブロックのうち、ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、第2のデータブロックの読み出し頻度を示す指標とを対応付けて、読み出し頻度情報に登録し、第2の記憶装置に格納された第1のデータブロックのうち、読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、第2の記憶装置から第1の記憶装置に移動させる。
さらに、1つの案では、上記のストレージ制御装置と同様の処理をコンピュータが実行するストレージ制御方法が提供される。
また、1つの案では、上記のストレージ制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
1つの側面では、アクセス性能を改善できる。
第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。 第2の実施の形態に係るストレージシステムの構成例を示す図である。 サーバ装置およびCMのハードウェア構成例を示す図である。 サーバ装置およびCMが備える処理機能の構成例を示すブロック図である。 ユーザボリュームテーブルの構成例を示す図である。 SSDボリュームテーブルおよびSSDプール管理用のハッシュテーブルの構成例を示す図である。 HDDボリュームテーブルおよびHDDプール管理用のハッシュテーブルの構成例を示す図である。 第1の問題点について説明するための図(その1)である。 第1の問題点について説明するための図(その2)である。 第2の問題点について説明するための図である。 第1の問題点を解決するための制御の概要を示す図である。 書き込み回数テーブルの更新処理手順の例を示すフローチャートである。 第2の問題点を解決するための制御の概要を示す図である。 ユーザボリュームからの読み出しが要求された場合の処理手順の例を示すフローチャートである。 ユーザボリュームへの書き込み処理手順の例を示すフローチャートである。 HDDボリュームからSSDボリュームへのデータ移動処理手順の例を示すフローチャートである。 SSDボリュームからHDDボリュームへのデータ移動処理手順の例を示すフローチャートである。 SSDボリュームへの書き込み処理手順の例を示すフローチャート(その1)である。 SSDボリュームへの書き込み処理手順の例を示すフローチャート(その2)である。 HDDボリュームへの書き込み処理手順の例を示すフローチャートである。 バックグラウンドでのデータ移動処理手順の例を示すフローチャートである。 第3の実施の形態に係るストレージシステムの構成例を示す図である。
以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。図1に示すストレージ制御装置10は、記憶部11と制御部12を有する。記憶部11は、例えば、ストレージ制御装置10が備える記憶装置の記憶領域として実装される。制御部12は、例えば、ストレージ制御装置10が備えるプロセッサとして実装される。
また、ストレージ制御装置10は、記憶装置21,31にアクセス可能になっている。記憶装置21には、重複除去を行ってデータが格納される。図1の例では、記憶装置21はストレージ装置20に搭載され、ストレージ装置20に搭載された制御部22が、重複除去を行って記憶装置21にデータを格納する。記憶装置31にも、重複除去を行ってデータが格納される。図1の例では、記憶装置31はストレージ装置30に搭載され、ストレージ装置30に搭載された制御部32が、重複除去を行って記憶装置31にデータを格納する。
さらに、記憶装置21のアクセス性能は、記憶装置31のアクセス性能より高い。一方、ストレージ制御装置10には、記憶装置21,31の各記憶領域によって実現される論理ボリューム12aが設定される。ストレージ制御装置10の制御部12は、図示しないホスト装置からの要求に応じた論理ボリューム12aに対するアクセスを制御する。
記憶部11は、読み出し頻度情報11aを記憶する。読み出し頻度情報11aには、論理ボリューム12aに対してホスト装置から書き込まれたデータブロックのうち、ホスト装置から読み出しが要求されたデータブロックに基づくハッシュ値と、このデータブロックの読み出し頻度を示す指標とが、対応付けて登録される。すなわち、読み出し頻度情報11aには、論理ボリューム12aに書き込まれたデータブロックについて、同一内容のデータブロック単位で、ハッシュ値と読み出し頻度とが保持される。なお、図1において、ハッシュ値H1は、データブロックD1に基づいて算出された値であり、ハッシュ値H2は、データブロックD2に基づいて算出された値である。
制御部12は、論理ボリューム12aの各アドレスでのアクセス頻度を監視する。そして、制御部12は、ホスト装置から論理ボリューム12aに対する書き込みが要求されたとき、書き込みが要求されたデータブロックの書き込み先を次のように決定する。制御部12は、論理ボリューム12aにおける書き込み先アドレスに対するアクセス頻度が高い場合には、データブロックを高速な記憶装置21に格納する。一方、制御部12は、書き込み先アドレスに対するアクセス頻度が低い場合には、データブロックを低速な記憶装置31に格納するように制御する。
ここで、論理ボリューム12a上の異なる複数のアドレスに対して、同一内容のデータブロックD1の書き込みがホスト装置から要求されたとする。また、各アドレスへの書き込み要求の受信時において、各アドレスでのアクセス頻度は低いと判定されたとする。この場合、制御部12は、各アドレスに対して書き込みが要求されたデータブロックD1を、低速な記憶装置31に書き込むようにストレージ装置30に要求する。ストレージ装置30の制御部32は、重複除去を行ってデータブロックD1を記憶装置31に格納する。したがって、論理ボリューム12a上の各アドレスに書き込みが要求されたデータブロックD1は、実際には記憶装置31の1つのアドレスに格納される。
この状態で、ホスト装置から、論理ボリューム12aの各アドレスからデータブロックD1の読み出しが要求されたとする。制御部12は、要求されたデータブロックD1をストレージ装置30から受信してホスト装置へ送信するとともに、読み出し頻度情報11aにおいてデータブロックD1に基づくハッシュ値H1に対応付けられた読み出し頻度を更新する。同じデータブロックD1に対する読み出しが繰り返し要求されるので、ハッシュ値H1に対応する読み出し頻度は高くなっていく。
ここで、データブロックD1は論理ボリューム12aの異なるアドレスから分散して読み出されるので、アドレスそれぞれでのアクセス頻度は高くならない。このため、このままでは、データブロックD1は低速な記憶装置31に格納され続ける。しかし、データブロックD1は、実際には記憶装置31の1つのアドレスにのみ格納されている。このため、データブロックD1が記憶装置31に格納されたままだと、記憶装置31の1つのアドレスからデータブロックD1が繰り返し読み出されることになる。この場合、読み出し速度は低くなり、処理効率が悪い。
このような問題に対して、制御部12は、読み出し頻度情報11aを参照して次のような処理を実行する。制御部12は、ある時点で、例えばハッシュ値H1に対応付けられた読み出し頻度が所定のしきい値を超えることで、ハッシュ値H1に対応するデータブロックD1の読み出し頻度が高くなったと判定する。すると、制御部12は、データブロックD1を低速な記憶装置31から高速な記憶装置21に移動させるように、ストレージ装置20,30を制御する。
データブロックD1が記憶装置21に移動されると、制御部22による重複除去によって、データブロックD1は記憶装置21内の1つのアドレスにのみ格納される。この状態で、論理ボリューム12aの複数アドレスからの同じデータブロックD1の読み出しがさらに要求されると、データブロックD1は高速な記憶装置21内のアドレスから繰り返し読み出される。したがって、データブロックD1が低速な記憶装置31に格納された状態と比較して、読み出し速度が向上する。
以上の第1の実施の形態によれば、ストレージ制御装置10は、読み出し頻度情報11aを用いて、論理ボリューム12a内のデータブロック単位で読み出し頻度を管理する。そして、ストレージ制御装置10は、データブロックD1の読み出し頻度が高くなったと判定すると、データブロックD1を低速な記憶装置31から高速な記憶装置21に移動させる。これによって、論理ボリューム12aの複数のアドレスから同一のデータブロックD1が読み出された場合の読み出し速度を、向上させることができる。その結果、論理ボリューム12aに対するアクセス性能を改善することができる。
〔第2の実施の形態〕
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステムは、サーバ装置100、ストレージ装置200,300、ホスト装置400,400aおよびスイッチ500を含む。なお、サーバ装置100は、図1のストレージ制御装置10の一例であり、ストレージ装置200,300は、図1のストレージ装置20,30のそれぞれ一例である。
サーバ装置100は、スイッチ500を介してストレージ装置200,300と接続されている。ホスト装置400,400aは、スイッチ500を介してサーバ装置100と接続されている。これらの各装置を接続するネットワークは、例えば、ファイバチャネル(FC:Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)である。なお、ホスト装置は、ストレージシステムに1台のみ含まれてもよいし、3台以上含まれてもよい。
サーバ装置100は、論理ボリューム(後述するユーザボリューム)を作成し、ホスト装置400,400aからの要求に応じてこの論理ボリュームに対するアクセスを制御する。論理ボリュームは、ストレージ装置200,300から提供される記憶領域によって実現される仮想的な記憶領域である。サーバ装置100は、論理ボリューム上の各ブロックに書き込みが要求されたデータを、ストレージ装置200,300のどちらかに送信し、そのデータの書き込みを要求する。
ストレージ装置200は、CM(Controller Module)200aとDE(Drive Enclosure)200bを有する。DE200bには、複数台の記憶装置が搭載されている。CM200aとDE200b内の各記憶装置とは、例えば、SAS(Serial Attached SCSI)によって接続されている。CM200aは、サーバ装置100からの要求に応じて、DE200b内の記憶装置へのアクセスを制御する。
ストレージ装置300も同様に、CM300aとDE300bを有する。DE300bには、複数台の記憶装置が搭載されている。CM300aとDE300b内の各記憶装置とは、例えば、SASによって接続されている。CM300aは、サーバ装置100からの要求に応じて、DE300b内の記憶装置へのアクセスを制御する。
ここで、DE200bに搭載された記憶装置のアクセス性能は、DE300bに搭載された記憶装置より高い。したがって、サーバ装置100が作成する論理ボリュームに割り当て可能な記憶領域として、ストレージ装置200は高速な記憶領域を提供し、ストレージ装置300は低速な記憶領域を提供する。本実施の形態では例として、DE200bには複数台のSSDが搭載され、DE300bには複数台のHDDが搭載されているものとする。
後述するように、サーバ装置100は、論理ボリュームにおけるアクセス頻度の高いブロックのデータを高速な記憶装置に格納し、アクセス頻度の低いブロックのデータを低速な記憶装置に格納する「階層化処理」を実行する。また、CM200aは、DE200bの記憶領域に同じデータが重複して格納されないように制御する「重複除去処理」を実行する。CM300aは、DE300bの記憶領域に同じデータが重複して格納されないように制御する「重複除去処理」を実行する。
ホスト装置400,400aは、サーバ装置100から提供される論理ボリュームにアクセスすることにより、業務処理などの所定の処理を実行する。
スイッチ500は、サーバ装置100とストレージ装置200,300との間、およびホスト装置400,400aとサーバ装置100との間で送受信されるデータを中継する。
図3は、サーバ装置およびCMのハードウェア構成例を示す図である。
サーバ装置100は、プロセッサ101、RAM(Random Access Memory)102、SSD103およびネットワークインタフェース(I/F)104を有する。これらの構成要素は、図示しないバスを介して接続されている。
プロセッサ101は、サーバ装置100全体を統括的に制御する。プロセッサ101は、例えば、CPU(Central Processing Unit)、MPU(Micro Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、またはPLD(Programmable Logic Device)である。また、プロセッサ101は、CPU、MPU、DSP、ASIC、PLDのうちの2以上の要素の組み合わせであってもよい。
RAM102は、サーバ装置100の主記憶装置として使用される。RAM102には、プロセッサ101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、プロセッサ101による処理に必要な各種データが格納される。SSD103は、サーバ装置100の補助記憶装置として使用される。SSD103には、OSプログラム、アプリケーションプログラム、および各種データが格納される。ネットワークインタフェース104は、スイッチ500を介してCM200a,300aおよびホスト装置400,400aと通信する。
CM200aは、プロセッサ201、RAM202、SSD203、ネットワークインタフェース(I/F)204およびドライブインタフェース(I/F)205を有する。これらの構成要素は、図示しないバスを介して接続されている。
プロセッサ201は、CM200a全体を統括的に制御する。プロセッサ101と同様に、プロセッサ201は、例えば、CPU、MPU、DSP、ASICまたはPLDである。また、プロセッサ201は、これらのうちの2以上の要素の組み合わせであってもよい。
RAM202は、CM200aの主記憶装置として使用される。RAM202には、プロセッサ201に実行させるOSプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM202には、プロセッサ201による処理に必要な各種データが格納される。SSD203は、CM200aの補助記憶装置として使用される。SSD203には、OSプログラム、アプリケーションプログラム、および各種データが格納される。
ネットワークインタフェース104は、スイッチ500を介してサーバ装置100と通信する。ドライブインタフェース205は、DE200bに搭載されたSSDと通信する。ドライブインタフェース205は、例えば、SASインタフェースである。
CM300aは、CM200aと同様のハードウェアによって実現される。すなわち、CM300aは、プロセッサ301、RAM302、SSD303、ネットワークインタフェース(I/F)304およびドライブインタフェース(I/F)305を有する。これらの構成要素は、図示しないバスを介して接続されている。プロセッサ301、RAM302、SSD303、ネットワークインタフェース304およびドライブインタフェース305は、それぞれCM200aのプロセッサ201、RAM202、SSD203、ネットワークインタフェース204およびドライブインタフェース205に対応するので、ここでは説明を省略する。
なお、図示しないが、ホスト装置400,400aは、例えば、サーバ装置100と同様のハードウェア構成を有するコンピュータとして実現可能である。
図4は、サーバ装置およびCMが備える処理機能の構成例を示すブロック図である。
サーバ装置100は、階層化処理部110と記憶部120を有する。階層化処理部110の処理は、例えば、サーバ装置100のプロセッサ101が所定のアプリケーションプログラムを実行することで実現される。記憶部120は、サーバ装置100が備える記憶装置(例えばRAM102)の記憶領域によって実現される。
CM200aは、重複除去処理部210と記憶部220を有する。重複除去処理部210の処理は、例えば、CM200aのプロセッサ201が所定のアプリケーションプログラムを実行することで実現される。記憶部220は、CM200aが備える記憶装置(例えばRAM202)の記憶領域によって実現される。
CM300aは、重複除去処理部310と記憶部320を有する。重複除去処理部310の処理は、例えば、CM300aのプロセッサ301が所定のアプリケーションプログラムを実行することで実現される。記憶部320は、CM300aが備える記憶装置(例えばRAM302)の記憶領域によって実現される。
また、図4には、サーバ装置100およびCM200a,300aに設定される論理記憶領域と処理機能との関係についても示している。このような論理記憶領域として、サーバ装置100にはユーザボリューム130が設定され、CM200aにはSSDボリューム231とSSDプール232が設定され、CM300aにはHDDボリューム331とHDDプール332が設定される。これらの論理記憶領域は、例えば4キロバイトのブロックに分割して管理され、各ブロックにはLBA(Logical Block Address)が付与されている。
SSDプール232は、DE200b内の1台以上のSSDによって実現される論理記憶領域である。一方、HDDプール332は、DE300b内の1台以上のHDDによって実現される論理記憶領域である。このため、SSDプール232のアクセス性能は、HDDプール332より高い。
なお、SSDプール232は、1台以上のSSDの記憶領域の単なる集合として実現されてもよいし、RAID(Redundant Array of Inexpensive Disks)によって制御される複数のSSDによって実現される論理記憶領域であってもよい。HDDプール332も同様に、1台以上のHDDの記憶領域の単なる集合として実現されてもよいし、RAIDによって制御される複数のHDDによって実現される論理記憶領域であってもよい。
SSDボリューム231は、SSDプール232の記憶領域によって実現される仮想的な論理記憶領域である。一方、HDDボリューム331は、HDDプール332の記憶領域によって実現される仮想的な論理記憶領域である。このため、SSDボリューム231のアクセス性能は、HDDボリューム331より高い。
ユーザボリューム130は、SSDボリューム231およびHDDボリューム331によって実現される仮想的な論理記憶領域である。また、ユーザボリューム130は、例として、ホスト装置400,400aのうちホスト装置400に認識されるものとする。なお、以下の説明では、ユーザボリューム130は1つだけ設定されるものとするが、1組のSSDボリューム231およびHDDボリューム331を用いて複数のユーザボリューム130が設定されてもよい。
ホスト装置400は、ユーザボリューム130に対するアクセスをブロック単位でサーバ装置100に要求する。階層化処理部110は、ホスト装置400からのアクセス要求を受け付ける。
階層化処理部110は、ユーザボリューム130のブロックに対するデータの書き込みが要求されると、このデータのSSDボリューム231への書き込み、またはHDDボリューム331への書き込みを、それぞれ重複除去処理部210,310に要求する。重複除去処理部210へ書き込みが要求された場合、重複除去処理部210から、データの書き込み先とされるSSDボリューム231のブロックのLBAが通知される。また、重複除去処理部310へ書き込みが要求された場合、重複除去処理部310から、データの書き込み先とされるHDDボリューム331のブロックのLBAが通知される。階層化処理部110は、通知されたブロックをユーザボリューム130の書き込み要求先ブロックに割り当てる。
基本的に、階層化処理部110は、ユーザボリューム130における書き込み要求先ブロックのアクセス頻度が高い場合には、このブロックにSSDボリューム231のブロックを割り当てる。一方、階層化処理部110は、書き込み要求先ブロックのアクセス頻度が低い場合には、このブロックにHDDボリューム331のブロックを割り当てる。これにより、ユーザボリューム130におけるアクセス頻度が高いブロックのデータが、高速な記憶装置に格納されるようになる。
また、階層化処理部110は、ユーザボリューム130のブロックからの読み出しが要求されると、このブロックに割り当てられたSSDボリューム231またはHDDボリューム331のブロックのLBAを指定して、重複除去処理部210,310のいずれかに読み出しを要求する。階層化処理部110は、指定されたブロックのデータを重複除去処理部210,310のいずれかから取得して、ホスト装置400に送信する。
重複除去処理部210は、階層化処理部110からSSDボリューム231のブロックに対するデータの書き込みが要求されると、このブロックに対してSSDプール232のブロックを割り当て、SSDプール232の割り当て先ブロックにデータを格納する。このとき、重複除去処理部210は基本的に、書き込みが要求されたデータがSSDプール232に格納済みである場合には、そのデータを格納せずに、SSDプール232において同じデータが格納済みのブロックをSSDボリューム231の書き込み要求先ブロックに割り当てる。これにより、SSDプール232に格納されるデータが重複しなくなり、SSDプール232の使用効率が向上する。
また、重複除去処理部210は、階層化処理部110からSSDボリューム231のブロックからの読み出しが要求されると、このブロックに割り当てられたSSDプール232のブロックからデータを読み出し、階層化処理部110に出力する。
重複除去処理部310は、階層化処理部110からHDDボリューム331のブロックに対するデータの書き込みが要求されると、このブロックに対してHDDプール332のブロックを割り当て、HDDプール332の割り当て先ブロックにデータを格納する。このとき、重複除去処理部310は基本的に、書き込みが要求されたデータがHDDプール332に格納済みである場合には、そのデータを格納せずに、HDDプール332において同じデータが格納済みのブロックをHDDボリューム331の書き込み要求先ブロックに割り当てる。これにより、HDDプール332に格納されるデータが重複しなくなり、HDDプール332の使用効率が向上する。
また、重複除去処理部310は、階層化処理部110からHDDボリューム331のブロックからの読み出しが要求されると、このブロックに割り当てられたHDDプール332のブロックからデータを読み出し、階層化処理部110に出力する。
記憶部120は、階層化処理部110の処理で利用される各種のデータを記憶する。例えば、記憶部120は、ユーザボリューム130を管理するためのユーザボリュームテーブルを記憶する。記憶部220は、重複除去処理部210の処理で利用される各種のデータを記憶する。例えば、記憶部220は、SSDボリューム231を管理するためのSSDボリュームテーブルや、重複データの格納先を管理するためのハッシュテーブルを記憶する。記憶部320は、重複除去処理部310の処理で利用される各種のデータを記憶する。例えば、記憶部320は、HDDボリューム331を管理するためのHDDボリュームテーブルや、重複データの格納先を管理するためのハッシュテーブルを記憶する。
ここで、図5〜図7を用いてこれらのテーブルについて説明する。
図5は、ユーザボリュームテーブルの構成例を示す図である。図5に示すユーザボリュームテーブル121は、ユーザボリューム130の各ブロックに割り当てられたSSDボリューム231またはHDDボリューム331のブロックと、アクセス頻度とを管理するためのテーブルである。ユーザボリュームテーブル121は、サーバ装置100の記憶部120に記憶され、サーバ装置100の階層化処理部110によって更新され、参照される。
ユーザボリュームテーブル121には、ユーザボリューム130の全ブロックに対応するレコードが設定される。また、ユーザボリュームテーブル121は、ユーザボリューム130のLBA、アクセス回数、デバイス種別および割り当て先ボリュームのLBAの各項目を有する。
ユーザボリューム130のLBAの項目には、ユーザボリューム130のブロックのLBAが登録される。アクセス回数の項目には、ユーザボリューム130のブロックに対してホスト装置400から直近の所定時間にアクセスされた回数が登録される。このアクセス回数は、階層化処理部110によって計測される。そして、階層化処理部110は、アクセス回数に基づいて、ユーザボリューム130の対応するブロックに対して、SSDボリューム231とHDDボリューム331のどちらのブロックを割り当てるかを判定する。
デバイス種別の項目には、ユーザボリューム130のブロックに対して、SSDボリューム231とHDDボリューム331のどちらのブロックが割り当てられたかを示す識別情報が登録される。前者の場合には「SSD」と登録され、後者の場合には「HDD」と登録される。割り当て先ボリュームのLBAの項目には、ユーザボリューム130のブロックに割り当てられた、SSDボリューム231またはHDDボリューム331のブロックのLBAが登録される。
なお、ユーザボリューム130が作成された直後の初期状態では、ユーザボリュームテーブル121にはユーザボリューム130の全ブロックに対応するレコードが作成される。このとき、各レコードにおけるアクセス回数、デバイス種別および割り当て先ボリュームのLBAの各項目は、空欄となる。
図6は、SSDボリュームテーブルおよびSSDプール管理用のハッシュテーブルの構成例を示す図である。図6に示すSSDボリュームテーブル221およびハッシュテーブル222は、CM200aの記憶部220に記憶され、CM200aの重複除去処理部210によって更新され、参照される。
SSDボリュームテーブル221には、SSDボリューム231のブロックのうち、データが書き込まれた各ブロックに対応するレコードが設定される。また、SSDボリュームテーブル221は、SSDボリューム231のLBAおよびSSDプール232のLBAの各項目を有する。SSDボリューム231のLBAの項目には、SSDボリューム231のブロックのLBAが登録される。SSDプール232のLBAの項目には、SSDボリューム231のブロックに割り当てられた、SSDプール232のブロックのLBAが登録される。このSSDボリュームテーブル221によって、SSDボリューム231の各ブロックに割り当てられたSSDプール232のブロックが管理される。
ハッシュテーブル222は、SSDプール232についての重複除去処理で使用されるテーブルである。ハッシュテーブル222は、ハッシュ値およびSSDプール232のLBAの各項目を有する。ハッシュ値の項目には、SSDプール232に書き込まれたデータを基に算出されたハッシュ値が登録される。SSDプール232のLBAの項目には、ハッシュ値に対応するデータが書き込まれた、SSDプール232上のブロックのLBAが登録される。
SSDプール232についての重複除去処理は、ハッシュテーブル222を用いて次のように実行される。重複除去処理部210は、階層化処理部110からの要求に応じてSSDボリューム231のあるブロックにデータを書き込む際、このデータを基に、例えばSHA−1(Secure Hash Algorithm 1)のハッシュ関数を用いてハッシュ値を算出する。重複除去処理部210は、算出したハッシュ値がハッシュテーブル222に登録されているかを判定する。登録されていない場合、重複除去処理部210は、SSDプール232の空きブロックを1つ選択し、選択した空きブロックにデータを書き込む。また、重複除去処理部210は、選択した空きブロックのLBAをハッシュ値に対応付けてハッシュテーブル222に登録するとともに、このLBAを、SSDボリューム231の書き込み先ブロックのLBAに対応付けてSSDボリュームテーブル221に登録する。
一方、算出したハッシュ値がハッシュテーブル222に登録されている場合、重複除去処理部210は、ハッシュテーブル222において算出したハッシュ値に対応付けられたSSDプール232のLBAを抽出する。重複除去処理部210は、SSDプール232へのデータの格納を行わずに、ハッシュテーブル222から抽出したLBAを、SSDボリューム231の書き込み先ブロックのLBAに対応付けてSSDボリュームテーブル221に登録する。
図7は、HDDボリュームテーブルおよびHDDプール管理用のハッシュテーブルの構成例を示す図である。図7に示すHDDボリュームテーブル321およびハッシュテーブル322は、CM300aの記憶部320に記憶され、CM300aの重複除去処理部310によって更新され、参照される。
HDDボリュームテーブル321には、HDDボリューム331のブロックのうち、データが書き込まれた各ブロックに対応するレコードが設定される。また、HDDボリュームテーブル321は、HDDボリュームのLBAおよびHDDプールのLBAの各項目を有する。HDDボリューム331のLBAの項目には、HDDボリューム331のブロックのLBAが登録される。HDDプール332のLBAの項目には、HDDボリューム331のブロックに割り当てられた、HDDプール332のブロックのLBAが登録される。このHDDボリュームテーブル321によって、HDDボリューム331の各ブロックに割り当てられたHDDプール332のブロックが管理される。
ハッシュテーブル322は、HDDプール332についての重複除去処理で使用されるテーブルである。ハッシュテーブル322は、ハッシュ値およびHDDプール332のLBAの各項目を有する。ハッシュ値の項目には、HDDプール332に書き込まれたデータを基に算出されたハッシュ値が登録される。HDDプール332のLBAの項目には、ハッシュ値に対応するデータが書き込まれた、HDDプール332上のブロックのLBAが登録される。
HDDプール332についての重複除去処理は、ハッシュテーブル322を用いて次のように実行される。重複除去処理部310は、階層化処理部110からの要求に応じてHDDボリューム331のあるブロックにデータを書き込む際、このデータを基に、例えばSHA−1のハッシュ関数を用いてハッシュ値を算出する。重複除去処理部310は、算出したハッシュ値がハッシュテーブル322に登録されているかを判定する。登録されていない場合、重複除去処理部310は、HDDプール332の空きブロックを1つ選択し、選択した空きブロックにデータを書き込む。また、重複除去処理部310は、選択した空きブロックのLBAをハッシュ値に対応付けてハッシュテーブル322に登録するとともに、このLBAを、HDDボリューム331の書き込み先ブロックのLBAに対応付けてHDDボリュームテーブル321に登録する。
一方、算出したハッシュ値がハッシュテーブル322に登録されている場合、重複除去処理部310は、ハッシュテーブル322において算出したハッシュ値に対応付けられたHDDプール332のLBAを抽出する。重複除去処理部310は、HDDプール332へのデータの格納を行わずに、ハッシュテーブル322から抽出したLBAを、HDDボリューム331の書き込み先ブロックのLBAに対応付けてHDDボリュームテーブル321に登録する。
以上の図5〜図7に示したユーザボリュームテーブル121、SSDボリュームテーブル221、HDDボリュームテーブル321およびハッシュテーブル222,322は、階層化処理と重複除去処理とを実現するための基本的な管理情報である。次に、図5〜図7に示した各テーブルを用いて階層化処理と重複除去処理とを単純に組み合わせた場合の問題点について、図8〜図10を用いて説明する。
図8、図9は、第1の問題点について説明するための図である。図8の上側に示すように、ホスト装置400から、ユーザボリューム130のLBA「4」のブロックに対して連続してデータの書き込みが要求されたものとする。具体的には、ユーザボリューム130のLBA「4」のブロックに対して、時刻t0でデータcの書き込みが要求され、時刻t1でデータdの書き込みが要求され、時刻t2でデータeの書き込みが要求されたとする。
この場合、階層化処理部110は、ユーザボリューム130のLBA「4」のブロックでのアクセス頻度が高いと判定し、このブロックに書き込みが要求されたデータをアクセス性能の高いSSDボリューム231に書き込むようにCM200aに要求する。これにより、時刻t2では、ユーザボリューム130のLBA「4」のブロックに対して、SSDボリューム231のLBA「1」のブロックが割り当てられたとする。図8の下側には、時刻t2でのユーザボリュームテーブル121の状態を示している。
図9の上側には、時刻t0,t1,t2でのSSDボリューム231およびHDDボリューム331の状態の遷移を示す。また、図9の下側には、時刻t2でのSSDプール232およびHDDプール332の状態を示す。図9の例では、SSDボリューム231のLBA「1」のブロックのデータが、データc、データd、データeの順に更新される。このようにSSDボリューム231のLBA「1」のブロックのデータが新たなデータによって更新されるたびに、このブロックに対してSSDプール232の新たなブロックが割り当てられる。図9の例では、SSDボリューム231のLBA「1」のブロックに対して、時刻t0,t1,t2においてそれぞれSSDプール232のLBA「1」,「2」,「3」のブロックが割り当てられている。これにより、SSDプール232のLBA「1」,「2」,「3」のブロックに、それぞれデータc,d,eが格納される。
図9に示すハッシュテーブル222,322は、時刻t2での状態を示す。ハッシュ値A,B,C,D,Eは、それぞれデータa,b,c,d,eに基づいて算出された値である。ハッシュテーブル222においては、データcに基づくハッシュ値C、データdに基づくハッシュ値D、データeに基づくハッシュ値Eに対して、それぞれSSDプール232のLBA「1」,「2」,「3」が対応付けられている。
以上の図8、図9の例のように、ユーザボリューム130の同じブロックが何回も書き替えられた場合、その都度SSDプール232の新たなブロックが使用され、高速な記憶装置の使用領域が増加する。一般的に、高速な記憶装置の容量は低速な記憶装置より小さいことが多い。このため、上記のようなケースでは、SSDプール232から解放可能なブロックを探索して解放する「ガベージコレクション」という処理を実行しないと、SSDプール232の容量が圧迫されて新たなデータの書き込みが早期にできなくなるという問題がある。
図10は、第2の問題点について説明するための図である。図10では、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックに同じデータaが書き込まれているとする。また、図10のユーザボリュームテーブル121に示すように、ユーザボリューム130のLBA「0」,「1」,「7」,「8」のブロックに対しては、それぞれHDDボリューム331のLBA「0」,「1」,「2」,「3」のブロックが割り当てられているとする。この状態では、図10の下側に示すように、HDDボリューム331におけるLBA「0」〜「3」の各ブロックに同じデータaが書き込まれている。また、重複除去処理部310の重複除去機能によって、データaは実際には、HDDプール332の1つのブロック、具体的にはLBA「0」のブロックに格納されている。
このような状態から、所定の期間においてユーザボリューム130のLBA「0」,「1」,「7」,「8」のブロックからのデータaの読み出しが、それぞれ2回、2回、2回、1回要求されたとする。図10のユーザボリュームテーブル121はこの状態を示しており、ユーザボリューム130のLBA「0」,「1」,「7」,「8」についてのアクセス回数はそれぞれ2,2,2,1となる。
例えば、階層化処理部110は、ユーザボリューム130のブロックのうちアクセス回数が高い上位3つのブロックに対して、高速なSSDボリューム231のブロックを割り当てるとする。この場合、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックについてのアクセス回数は低いと判定される。その結果、各ブロックに対しては低速なHDDボリューム331のブロックが割り当てられたままになる。したがって、データaはHDDプール332のLBA「0」のブロックに格納されたままになる。
すなわち、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックからのデータaの読み出しが要求されたとき、実際にはHDDプール332の同じLBA「0」のブロックからデータaが読み出される。このケースのように、ユーザボリューム130の異なるブロックから同じデータが連続して読み出される場合には、低速な記憶装置からの読み出しが連続して行われ、読み出し速度が低くなるという問題がある。このようなケースでは、データが高速な記憶装置に格納されることが望ましいが、階層化処理と重複除去処理とを単純に組み合わせただけではそうすることができない。
以上のような問題に対し、本実施の形態のサーバ装置100およびCM200a,300aは、次の図11〜図13に示すような制御を行う。
図11は、第1の問題点を解決するための制御の概要を示す図である。CM200aの記憶部220には、図11に示すような書き込み回数テーブル223がさらに記憶される。書き込み回数テーブル223には、SSDボリューム231のブロックを示すLBAに対して、そのブロックにおける直近の期間における書き込み回数を示す書き込み回数指標が登録される。ただし、SSDボリューム231の全ブロックについての書き込み回数指標が登録されると、書き込み回数テーブル223のデータ量が過多になり、記憶部220の容量が圧迫される。そこで、書き込み回数テーブル223には、SSDボリューム231のブロックのうち、書き込み回数指標が上位の一定数のブロックに対応するレコードのみ登録され、それらのブロックについての書き込み回数指標が登録される。なお、書き込み回数テーブル223の具体的な更新方法については図12で後述する。
重複除去処理部210は、階層化処理部110からの要求に応じてSSDボリューム231のあるブロックにデータを書き込むとき、そのブロックに対応するレコードが書き込み回数テーブル223に存在するかを判定する。レコードが存在する場合、重複除去処理部210は、そのブロックでの直近の期間での書き込み頻度が高いと判定し、重複除去処理を行わずに、そのブロックに対してSSDプール331の固有のブロックを割り当て、データの上書きを許容した書き込み処理を実行する。
例えば、図11に示すように、時刻t0においてSSDボリューム231のLBA「1」のブロックにデータcが書き込まれ、このブロックにSSDプール331のLBA「1」が割り当てられているとする。この状態から、図9の例と同様に、時刻t1において、SSDボリュームのLBA「1」のブロックにデータdが書き込まれ、さらに時刻t2において、同じブロックにデータeが書き込まれるとする。また、時刻t1,t2のどちらでも、SSDボリュームのLBA「1」が書き込み回数テーブル223に登録されており、かつ、SSDプール331のLBA「1」のブロックはSSDボリューム231のLBA「1」のブロックにのみ割り当てられているとする。
このような場合、重複除去処理部210は、時刻t1,t2において、SSDボリュームのLBA「1」のブロックに対するSSDプール331のブロックの割り当て先を変化させない。すなわち、重複除去処理部210は、SSDプール331のLBA「1」のブロックに対して、時刻t1でデータdを上書きし、時刻t2でデータeをさらに上書きする。これにより、ユーザボリューム130の同じブロックに対するデータの更新が連続して要求された場合に、その都度SSDプール331の新たなブロックが使用されなくなる。したがって、SSDプール331が枯渇しにくくなり、SSDプール331の使用効率が改善される。
また、例えば、時刻t1において、SSDボリュームのLBA「1」が書き込み回数テーブル223に登録されているが、SSDプール331のLBA「1」のブロックがSSDボリューム231のLBA「1」以外のブロックにも割り当てられているとする。この場合、重複除去処理部210は、SSDボリュームのLBA「1」のブロックに対して、SSDプール331の新たなブロック(例えばLBA「2」のブロック)を割り当て、SSDプール331のLBA「2」のブロックにデータを格納する。その後、SSDボリューム231の同じLBA「1」のブロックに対するデータの更新が要求され、このブロックのLBA「1」が書き込み回数テーブル223に登録されている場合には、重複除去処理部210は、このブロックに割り当てられているSSDプール331のLBA「2」のブロックに更新データを上書きする。
これにより、上記と同様にユーザボリューム130の同じブロックに対するデータの更新が連続して要求された場合に、その都度SSDプール331の新たなブロックが使用されなくなる。したがって、SSDプール331の使用効率が改善される。
図12は、書き込み回数テーブルの更新処理手順の例を示すフローチャートである。図12の処理は、SSDボリューム231のあるブロック(書き込み先ブロック)にデータを書き込む際に実行される。
[ステップS11]重複除去処理部210は、書き込み先ブロックのLBAが書き込み回数テーブル223に登録されているかを判定する。登録されている場合、ステップS12の処理が実行され、登録されていない場合、ステップS13の処理が実行される。
[ステップS12]重複除去処理部210は、書き込み回数テーブル223において書き込み先ブロックLBAに対応付けて登録されている書き込み回数指標を更新する。
[ステップS13]重複除去処理部210は、書き込み回数テーブル223から最小の書き込み回数指標が登録されたレコードを選択する。重複除去処理部210は、選択したレコードに登録されたLBAを、書き込み先ブロックのLBAに書き替える。
[ステップS14]重複除去処理部210は、ステップS13で選択したレコードに登録されている書き込み回数指標を更新する。
以上のステップS13,S14の処理により、書き込み回数テーブル223のレコードのうち最小の書き込み回数指標が登録されていたレコードが、書き込み先ブロックに対応するレコードに書き替えられる。
ここで、ステップS12,S14での書き込み回数指標の更新方法としては、次の2つの方法がある。第1の更新方法では、ステップS12,S14のどちらにおいても、重複除去処理部210はまず、書き込み回数テーブル223の全レコードの書き込み回数指標を、0より大きく1未満の定数(例えば0.99)を乗算することで更新する。ステップS12では、重複除去処理部210は次に、書き込み回数テーブル223において書き込み先ブロックLBAに対応付けて登録されている書き込み回数指標に、1を加算する。ステップS14では、重複除去処理部210は次に、ステップS13で選択したレコードに登録されている書き込み回数指標を1に書き替える。この第1の更新方法によれば、書き込み回数テーブル223の各レコードにおける書き込み回数指標は、小数を含み得る0より大きい値となる。
一方、第2の更新方法では、ステップS12において、重複除去処理部210は、書き込み回数テーブル223において書き込み先ブロックLBAに対応付けて登録されている書き込み回数指標に、1を加算する。ステップS14では、重複除去処理部210は、ステップS13で選択したレコードに登録されている書き込み回数指標に、1を加算する。この第2の更新方法によれば、書き込み回数テーブル223の各レコードにおける書き込み回数指標は、1以上の整数となる。
第1の更新方法と第2の更新方法のどちらでも、簡易な処理により、書き込み回数テーブル223を、直近の所定期間における書き込み回数が多い順に一定数のLBAが登録された状態と、ほぼ同等の状態にすることができる。
図13は、第2の問題点を解決するための制御の概要を示す図である。サーバ装置100の記憶部120には、図13に示すような読み出し回数テーブル122がさらに記憶される。読み出し回数テーブル122には、ホスト装置400からユーザボリューム130に書き込みが要求されたデータに基づくハッシュ値ごとにレコードが登録される。各レコードには、対応するデータの直近の期間における読み出し回数を示す読み出し回数指標と、対応するデータがSSDボリューム231とHDDボリューム331のどちらに書き込まれているかを示すデバイス種別とが登録される。デバイス種別の項目には、SSDボリューム231に書き込まれている場合は「SSD」と登録され、HDDボリューム331に書き込まれている場合は「HDD」と登録される。
ただし、ホスト装置400から読み出しが要求された全データに対応するハッシュ値のレコードが登録されると、読み出し回数テーブル122のデータ量が過多になり、記憶部120の容量が圧迫される。そこで、読み出し回数テーブル122には、書き込み回数テーブル223と同様の方法により、読み出しが要求されたデータのうち、読み出し回数指標が上位の一定数のデータに基づくハッシュ値についてのレコードのみ登録され、それらのハッシュ値に対応する読み出し回数指標とデバイス種別とが登録される。なお、読み出し回数テーブル122の具体的な更新方法については、図14で説明する。
階層化処理部110は、読み出し回数テーブル122に登録されているハッシュ値に対応するデータを、読み出し頻度が高いデータと判定する。階層化処理部110は、デバイス種別から、そのようなデータが低速なHDDボリューム331に書き込まれている場合には、そのデータをHDDボリューム331からSSDボリューム231に移動させる。これにより、ユーザボリューム130の異なるブロックから同じデータが連続して読み出される場合に、そのデータはSSDボリューム231に格納されるようになり、そのデータの読み出し速度が向上する。
データの移動タイミングは複数考えられる。例えば、ユーザボリューム130に対する書き込み要求を契機としてデータ移動を実行する方法がある。図13では、このようなケースの例を示している。図13の左下に示すユーザボリュームテーブル121は、図10と同様の状態になっており、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックに同じデータaが書き込まれている。また、ユーザボリューム130のLBA「0」,「1」,「7」,「8」のブロックに対してはHDDボリューム331のブロックが割り当てられている。この状態では、図10の右下と同様に、HDDプール332の1つのブロックにデータaが格納されている。
この状態で、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックからのデータaの読み出しがホスト装置400から連続して要求されたとする。この場合、データaについての直近の期間における読み出し回数が多くなり、読み出し回数テーブル122に、データaに基づくハッシュ値Aを含むレコードが登録された状態となる。
この状態で、ユーザボリューム130のLBA「2」のブロックに対してデータaを書き込むようにホスト装置400から要求されたとする。このとき、階層化処理部110は、データaを基にハッシュ値Aを算出する。算出されたハッシュ値Aは読み出し回数テーブル122に登録されていることから、階層化処理部110は、データaを高速なSSDボリューム231に書き込むように重複除去処理部210に要求する。このとき、図13の右下に示すように、ユーザボリューム130のLBA「2」のブロックに対してSSDボリューム231のブロックが割り当てられる。これとともに、階層化処理部110は、HDDボリューム331に書き込まれていた、ユーザボリューム130のLBA「0」,「1」,「7」,「8」の各ブロックのデータaを、SSDボリューム231に移動させる。なお、CM200aでは、重複除去処理が実行されて、SSDプール232の1つのブロックにデータaが格納される。
また、以上の図13のような例の他、ユーザボリューム130からの読み出し要求に伴う読み出し回数テーブル122の更新を契機として、データ移動が実行されてもよい。さらに、書き込み要求や読み出し要求のタイミングとは関係なく、読み出し回数テーブル122が定期的に参照され、HDDボリューム331に書き込まれている読み出し回数指標の高いデータがある場合に、そのデータが移動されてもよい。
次に、サーバ装置100およびCM200a,300aの処理手順について、フローチャートを用いて説明する。
まず、図14は、ユーザボリュームからの読み出しが要求された場合の処理手順の例を示すフローチャートである。
[ステップS31]サーバ装置100の階層化処理部110は、ホスト装置400から、ユーザボリューム130からのデータの読み出し要求を受信する。このとき、ホスト装置400からは、ユーザボリューム130における読み出し元ブロックのLBAが指定される。階層化処理部110は、ユーザボリュームテーブル121から、読み出し元ブロックに対応付けられているSSDボリューム231またはHDDボリューム331のブロックのLBAを抽出する。階層化処理部110は、抽出されたLBAのブロックからのデータの読み出しを、CM200aまたはCM300aに要求する。抽出されたLBAのブロックがSSDボリューム231のブロックの場合、CM200aに読み出しが要求され、HDDボリューム331のブロックの場合、CM300aに読み出しが要求される。階層化処理部110は、CM200aまたはCM300aから要求したデータを受信すると、受信したデータをホスト装置400に送信する。
[ステップS32]階層化処理部110は、ユーザボリュームテーブル121においてユーザボリューム130の読み出し元ブロックのLBAに対応付けられたアクセス回数を、インクリメントする。なお、ユーザボリュームテーブル121の各レコードのアクセス回数は、直近の所定期間におけるアクセス回数が登録されるように階層化処理部110によって管理される。
[ステップS33]階層化処理部110は、ステップS31でCM200aまたはCM300aから受信したデータに基づいて、ハッシュ値を算出する。
[ステップS34]階層化処理部110は、算出したハッシュ値が読み出し回数テーブル122に登録されているかを判定する。登録されている場合、ステップS35の処理が実行され、登録されていない場合、ステップS36の処理が実行される。
[ステップS35]階層化処理部110は、読み出し回数テーブル122において、算出されたハッシュ値に対応付けられている読み出し回数指標を更新する。
[ステップS36]階層化処理部110は、読み出し回数テーブル122から最小の読み出し回数指標が登録されたレコードを選択する。
[ステップS37]階層化処理部110は、選択したレコードにおけるデバイス種別の項目に「SSD」が登録されているかを判定する。「SSD」が登録されている場合、ステップS38の処理が実行され、「HDD」が登録されている場合、ステップS40の処理が実行される。
[ステップS38]階層化処理部110は、SSDボリューム231に書き込まれたデータのうち、選択したレコードに登録されているハッシュ値に対応するすべてのデータを、HDDボリューム331に移動させる処理を実行する。このステップS38では、読み出し回数テーブル122から削除されるハッシュ値に対応するすべてのデータが、低速なHDDボリューム331に移動される。なお、ステップS38の処理の詳細については、図17で説明する。
[ステップS39]階層化処理部110は、選択したレコードにおけるデバイス種別の項目を「HDD」に書き替える。
[ステップS40]階層化処理部110は、選択したレコードに登録されたハッシュ値を、ステップS33で算出したハッシュ値に書き替える。
[ステップS41]階層化処理部110は、選択したレコードに登録されている読み出し回数指標を更新する。
以上のステップS36〜S41の処理により、読み出し回数テーブル122のレコードのうち最小の読み出し回数指標が登録されていたレコードが、読み出しが要求されたデータに基づくハッシュ値に対応するレコードに書き替えられる。
ここで、ステップS35,S41での読み出し回数指標の更新方法としては、次の2つの方法がある。第1の更新方法では、ステップS35,S41のどちらにおいても、階層化処理部110はまず、読み出し回数テーブル122の全レコードの読み出し回数指標を、0より大きく1未満の定数(例えば0.99)を乗算することで更新する。ステップS35では、階層化処理部110は次に、読み出し回数テーブル122において、ステップS33で算出したハッシュ値に対応付けて登録されている読み出し回数指標に、1を加算する。ステップS41では、階層化処理部110は次に、選択したレコードに登録されている読み出し回数指標を1に書き替える。この第1の更新方法によれば、読み出し回数テーブル122の各レコードにおける読み出し回数指標は、小数を含み得る0より大きい値となる。また、第1の更新方法によれば、アクセス傾向が変わったときに、過去の読み出し頻度の情報に引きずられず、直近のアクセス傾向を反映してデータを配置できるという特徴がある。
一方、第2の更新方法では、ステップS35において、階層化処理部110は、読み出し回数テーブル122において、ステップS33で算出したハッシュ値に対応付けて登録されている読み出し回数指標に、1を加算する。ステップS41では、階層化処理部110は、ステップS36で選択したレコードに登録されている読み出し回数指標に、1を加算する。この第2の更新方法によれば、読み出し回数テーブル122の各レコードにおける読み出し回数指標は、1以上の整数となる。
第1の更新方法と第2の更新方法のどちらでも、簡易な処理により、読み出し回数テーブル122を、直近の所定期間における読み出し回数が多い順に一定数のハッシュ値が登録された状態と、ほぼ同等の状態にすることができる。
図15は、ユーザボリュームへの書き込み処理手順の例を示すフローチャートである。
[ステップS61]サーバ装置100の階層化処理部110は、ホスト装置400から、ユーザボリューム130に対するデータの書き込み要求を受信する。このとき、ホスト装置400からは、ユーザボリューム130における書き込み先ブロックのLBAが指定されるとともに、書き込みデータが送信される。階層化処理部110は、受信した書き込みデータに基づいて、ハッシュ値を算出する。
[ステップS62]階層化処理部110は、算出したハッシュ値が読み出し回数テーブル122に登録されているかを判定する。登録されている場合、ステップS64の処理が実行され、登録されていない場合、ステップS63の処理が実行される。
[ステップS63]階層化処理部110は、ユーザボリュームテーブル121から、ユーザボリューム130における書き込み先ブロックのLBAに対応付けて登録されたアクセス回数を抽出する。階層化処理部110は、抽出したアクセス回数が所定のしきい値以上かを判定する。しきい値以上の場合、ステップS64の処理が実行され、しきい値未満の場合、ステップS67の処理が実行される。
[ステップS64]階層化処理部110は、書き込みデータをSSDボリューム231に書き込む処理を実行する。
ここで、ホスト装置400から書き込み済みブロックへのデータの上書きが要求されている場合、ユーザボリュームテーブル121のレコードのうち、ユーザボリューム130における書き込み先ブロックのLBAが登録されたレコードには、デバイス種別と割り当て先ボリュームのLBAとがすでに登録されている。デバイス種別が「SSD」の場合、階層化処理部110は、このレコードに登録された割り当て先ボリュームのLBAを書き込み先として指定して、SSDボリューム231に対する書き込みデータの書き込みをCM200aに要求する。
一方、デバイス種別が「HDD」の場合、階層化処理部110は、SSDボリューム231の未書き込みブロックのLBAをCM200aに問い合わせる。CM200aの重複除去処理部210から該当ブロックのLBAが通知されると、階層化処理部110は、通知されたLBAを書き込み先として指定して、SSDボリューム231に対する書き込みデータの書き込みをCM200aに要求する。また、階層化処理部110は、ユーザボリュームテーブル121から、ユーザボリューム130の書き込み先ブロックのLBAに対応付けられている割り当て先ボリュームのLBAを抽出する。階層化処理部110は、抽出したLBAを指定して、HDDボリューム331からのデータの消去をCM300aに要求する。CM300aの重複除去処理部310は、HDDボリューム331における指定されたLBAのブロックに格納されているデータを消去する。さらに、階層化処理部110は、ユーザボリュームテーブル121のレコードのうち、ユーザボリューム130における書き込み先ブロックのLBAが登録されたレコードを、次のように更新する。階層化処理部110は、デバイス種別の項目に「SSD」を登録し、割り当て先ボリュームのLBAの項目に、重複除去処理部210から通知されたSSDボリューム231のLBAを登録する。
また、ホスト装置400からの未書き込みブロックへのデータの書き込みが要求されている場合、階層化処理部110は、上記と同様の手順で、CM200aの重複除去処理部210からSSDボリューム231の未書き込みブロックのLBAの通知を受ける。階層化処理部110は、通知されたLBAを書き込み先として指定して、SSDボリューム231に対する書き込みデータの書き込みをCM200aに要求する。また、階層化処理部110は、ユーザボリュームテーブル121のレコードのうち、ユーザボリューム130における書き込み先ブロックのLBAが登録されたレコードを、次のように更新する。階層化処理部110は、デバイス種別の項目に「SSD」を登録し、割り当て先ボリュームのLBAの項目に、重複除去処理部210から通知されたSSDボリューム231のLBAを登録する。
[ステップS65]階層化処理部110は、ユーザボリュームテーブル121においてユーザボリューム130の書き込み先ブロックのLBAに対応付けられたアクセス回数を、インクリメントする。
[ステップS66]階層化処理部110は、HDDボリューム331に書き込まれたデータのうち、ステップS61で算出したハッシュ値に対応するすべてのデータを、SSDボリューム231に移動させる処理を実行する。この処理の詳細については、図16で説明する。
[ステップS67]階層化処理部110は、書き込みデータをHDDボリューム331に書き込む処理を実行する。この処理は、ステップS64において書き込み先をSSDボリューム231からHDDボリューム331に変更した処理と同様であるので、詳しい説明を省略する。
[ステップS68]階層化処理部110は、ユーザボリュームテーブル121においてユーザボリューム130の書き込み先ブロックのLBAに対応付けられたアクセス回数を、インクリメントする。
[ステップS69]階層化処理部110は、SSDボリューム231に書き込まれたデータのうち、ステップS61で算出したハッシュ値に対応するすべてのデータを、HDDボリューム331に移動させる処理を実行する。この処理の詳細については、図17で説明する。
以上の図15の処理によれば、ホスト装置400から書き込みが要求されたデータに基づくハッシュ値が読み出し回数テーブル122に登録されている場合、これと同じ内容のデータに対する読み出し頻度が高いと判定される。この場合、書き込みデータがSSDボリューム231に書き込まれるとともに、ユーザボリューム130における同じデータが書き込まれた他のブロックについても、データがHDDボリューム331からSSDボリューム231に移動される。これにより、ユーザボリューム130上の異なるブロックから同じデータが連続して読み出される場合の読み出し速度を向上させることができる。
図16は、HDDボリュームからSSDボリュームへのデータ移動処理手順の例を示すフローチャートである。この図16の処理は、例えば、図15のステップS66の処理に対応する。
[ステップS81]サーバ装置100の階層化処理部110は、ハッシュ値をCM300aに対して指定し、指定したハッシュ値に対応するデータが格納されたHDDボリューム331上のブロックのLBAを、CM300aに問い合わせる。図16の処理が図15のステップS66に対応する場合、指定されるハッシュ値は、図15のステップS61で算出された値である。
CM300aの重複除去処理部310は、指定されたハッシュ値を用いてハッシュテーブル322を検索し、このハッシュ値に対応付けられたHDDプール332のLBAを抽出する。さらに、重複除去処理部310は、抽出したLBAに対応付けられたHDDボリューム331のLBAを、HDDボリュームテーブル321から抽出する。重複除去処理部310は、上記の問い合わせの応答として、HDDボリュームテーブル321から抽出したHDDボリューム331のLBAを、サーバ装置100の階層化処理部110に送信する。階層化処理部110は、送信されたHDDボリューム331のLBAを受信する。
[ステップS82]階層化処理部110は、ユーザボリュームテーブル121から、デバイス種別が「HDD」で、割り当て先ボリュームのLBAがステップS81で受信したHDDボリューム331のLBAに一致するレコードを特定する。特定されたレコードに登録されたユーザボリューム130のLBAは、ステップS81で指定したハッシュ値に対応するデータが書き込まれているブロックを指す。すなわち、ステップS82では、ユーザボリューム130のLBAの中から、ハッシュ値に対応するデータが書き込まれているブロックのLBAが判別される。
[ステップS83]階層化処理部110は、ステップS82で判別されたユーザボリューム130のLBAを1つずつ選択しながら、ステップS85までのデータ移動ループを繰り返し実行する。
[ステップS84]階層化処理部110は、選択したLBAに対応付けられた割り当て先ボリュームのLBAをCM300aに指定して、そのLBAに対応するHDDボリューム331のブロックからのデータ読み出しをCM300aに要求する。CM300aの重複除去処理部310からは、要求したデータが送信される。
階層化処理部110は、CM300aから受信したデータをSSDボリューム231に書き込むようにCM200aに要求する。CM200aの重複除去処理部210は、SSDボリューム231の空きブロックに受信したデータを書き込む処理を実行するとともに、その空きブロックのLBAを階層化処理部110に通知する。階層化処理部110は、受信したLBAによって、選択したLBAに対応付けられた割り当て先ボリュームのLBAを更新する。また、選択したLBAに対応付けられたデバイス種別を「SSD」に更新する。
[ステップS85]階層化処理部110は、選択したLBAに対応付けられた割り当て先ボリュームのLBAをCM300aに指定して、そのLBAに対応するHDDボリューム331のブロックに書き込まれたデータの消去をCM300aに要求する。CM300aの重複除去処理部310は、要求されたデータを消去する。これにより、該当データの移動が完了する。
[ステップS86]階層化処理部110は、ステップS82で判別されたユーザボリューム130のLBAのすべてについて処理済みになった場合、処理を終了する。
図17は、SSDボリュームからHDDボリュームへのデータ移動処理手順の例を示すフローチャートである。この図17の処理は、例えば、図14のステップS38および図15のステップS69の処理に対応する。
[ステップS91]サーバ装置100の階層化処理部110は、ハッシュ値をCM300aに対して指定し、指定したハッシュ値に対応するデータが格納されたSSDボリューム231上のブロックのLBAを、CM200aに問い合わせる。図17の処理が図14のステップS38に対応する場合、指定されるハッシュ値は、図14のステップS33で算出された値である。また、図17の処理が図15のステップS69に対応する場合、指定されるハッシュ値は、図15のステップS61で算出された値である。
CM200aの重複除去処理部210は、指定されたハッシュ値を用いてハッシュテーブル222を検索し、このハッシュ値に対応付けられたSSDプール232のLBAを抽出する。さらに、重複除去処理部210は、抽出したLBAに対応付けられたSSDボリューム231のLBAを、SSDボリュームテーブル221から抽出する。重複除去処理部210は、上記の問い合わせの応答として、SSDボリュームテーブル221から抽出したSSDボリューム231のLBAを、サーバ装置100の階層化処理部110に送信する。階層化処理部110は、送信されたSSDボリューム231のLBAを受信する。
[ステップS92]階層化処理部110は、ユーザボリュームテーブル121から、デバイス種別が「SSD」で、割り当て先ボリュームのLBAがステップS91で受信したSSDボリューム231のLBAに一致するレコードを特定する。特定されたレコードに登録されたユーザボリューム130のLBAは、ステップS91で指定したハッシュ値に対応するデータが書き込まれているブロックを指す。すなわち、ステップS92では、ユーザボリューム130のLBAの中から、ハッシュ値に対応するデータが書き込まれているブロックのLBAが判別される。
[ステップS93]階層化処理部110は、ステップS92で判別されたユーザボリューム130のLBAを1つずつ選択しながら、ステップS95までのデータ移動ループを繰り返し実行する。
[ステップS94]階層化処理部110は、選択したLBAに対応付けられた割り当て先ボリュームのLBAをCM200aに指定して、そのLBAに対応するSSDボリューム231のブロックからのデータ読み出しをCM200aに要求する。CM200aの重複除去処理部210からは、要求したデータが送信される。
階層化処理部110は、CM200aから受信したデータをHDDボリューム331に書き込むようにCM300aに要求する。CM300aの重複除去処理部310は、HDDボリューム331の空きブロックに受信したデータを書き込む処理を実行するとともに、その空きブロックのLBAを階層化処理部110に通知する。階層化処理部110は、受信したLBAによって、選択したLBAに対応付けられた割り当て先ボリュームのLBAを更新する。また、選択したLBAに対応付けられたデバイス種別を「HDD」に更新する。
[ステップS95]階層化処理部110は、選択したLBAに対応付けられた割り当て先ボリュームのLBAをCM200aに指定して、そのLBAに対応するSSDボリューム231のブロックに書き込まれたデータの消去をCM200aに要求する。CM200aの重複除去処理部210は、要求されたデータを消去する。これにより、該当データの移動が完了する。
[ステップS96]階層化処理部110は、ステップS92で判別されたユーザボリューム130のLBAのすべてについて処理済みになった場合、処理を終了する。
図18、図19は、SSDボリュームへの書き込み処理手順の例を示すフローチャートである。
[ステップS111]CM200aの重複除去処理部210は、サーバ装置100の階層化処理部110から、SSDボリューム231に対するデータの書き込み要求を受ける。重複除去処理部210は、書き込みが要求されたデータを基にハッシュ値を算出する。
[ステップS112]重複除去処理部210は、SSDボリューム231における書き込み先のブロックを示すLBAが、書き込み回数テーブル223に登録されているかを判定する。登録されていない場合、ステップS113の処理が実行され、登録されている場合、ステップS121の処理が実行される。
[ステップS113]重複除去処理部210は、ステップS111で算出したハッシュ値がハッシュテーブル222に登録されているかを判定する。登録されている場合、ステップS117の処理が実行され、登録されていない場合、ステップS114の処理が実行される。
[ステップS114]重複除去処理部210は、書き込みが要求されたデータをSSDプール232の空きブロックに格納する。
[ステップS115]重複除去処理部210は、SSDボリュームテーブル221を更新する。具体的には、重複除去処理部210は、SSDボリュームテーブル221に対して、SSDボリューム231における書き込み先のブロックを示すLBAと、ステップS114でデータを格納したSSDプール232のブロックを示すLBAとを対応付けて登録する。
[ステップS116]重複除去処理部210は、ハッシュテーブル222に新たなレコードを作成する。重複除去処理部210は、作成したレコードに、ステップS111で算出したハッシュ値と、ステップS114でデータを格納したSSDプール232のブロックを示すLBAとを対応付けて登録する。
[ステップS117]ステップS113でYesと判定された場合、重複除去処理部210は、SSDプール232へのデータの格納を行わずに、SSDボリュームテーブル221を更新する。具体的には、重複除去処理部210は、ステップS111で算出したハッシュ値に対応付けられたSSDプール232のLBAを、ハッシュテーブル222から抽出する。重複除去処理部210は、SSDボリュームテーブル221に対して、SSDボリューム231における書き込み先のブロックを示すLBAと、ハッシュテーブル222から抽出されたSSDプール232のLBAとを対応付けて登録する。
[ステップS118]重複除去処理部210は、書き込み回数テーブル223を更新する書き込み回数記録処理を実行する。この処理は、図12で説明した通りである。
[ステップS121]重複除去処理部210は、ステップS111で算出したハッシュ値が、ハッシュテーブル222に登録されているかを判定する。登録されている場合、ステップS122の処理が実行され、登録されていない場合、ステップS124の処理が実行される。
[ステップS122]重複除去処理部210は、算出したハッシュ値に対応付けられているSSDプール232のLBAをハッシュテーブル222から抽出する。重複除去処理部210は、抽出したLBAを用いてSSDボリュームテーブル221を検索し、SSDボリューム231における書き込み先のブロック以外のブロックに、抽出したSSDプール232のLBAが割り当てられているかを判定する。割り当てられている場合、ステップS123の処理が実行され、割り当てられていない場合、ステップS124の処理が実行される。
[ステップS123]重複除去処理部210は、SSDボリューム231における書き込み先のブロックに、SSDプール232の空きブロックを示す新たなLBAを割り当てる。重複除去処理部210は、割り当てたLBAが示すSSDプール232のブロックに、書き込みが要求されたデータを格納する。また、重複除去処理部210は、SSDボリュームテーブル221において、SSDボリューム231における書き込み先ブロックのLBAに対して、新たに割り当てられたSSDプール232のブロックのLBAを対応付けて登録する。この後、ステップS118の処理が実行される。
[ステップS124]重複除去処理部210は、算出したハッシュ値に対応付けられているSSDプール232のLBAをハッシュテーブル222から抽出する。重複除去処理部210は、抽出したLBAが示すSSDプール232のブロックに、書き込みが要求されたデータを上書きする。この後、ステップS118の処理が実行される。
上記のステップS121〜S124の処理により、図11で説明した処理が実行される。すなわち、ステップS123では、重複除去が行われずに、データの書き込み先としてSSDプール232から新たなブロックが割り当てられる。その後にさらにSSDボリューム231上の同じブロックのデータが更新されると、ステップS124の処理により、SSDプール232における対応するブロックにデータが上書きされる。このように、SSDボリューム231における書き込み頻度の高いブロックに、SSDプール232から固有のブロックが割り当てられ、そのブロックに対してさらなる更新データが格納されることで、SSDプール232の空きブロックが短時間で枯渇する事態を回避できる。したがって、SSDプール232の使用効率が高まり、ユーザボリューム130のアクセス性能を向上させることができる。
図20は、HDDボリュームへの書き込み処理手順の例を示すフローチャートである。
[ステップS141]CM300aの重複除去処理部310は、サーバ装置100の階層化処理部110から、HDDボリューム331に対するデータの書き込み要求を受ける。重複除去処理部310は、書き込みが要求されたデータを基にハッシュ値を算出する。
[ステップS142]重複除去処理部310は、ステップS141で算出したハッシュ値がハッシュテーブル322に登録されているかを判定する。登録されている場合、ステップS146の処理が実行され、登録されていない場合、ステップS143の処理が実行される。
[ステップS143]重複除去処理部310は、書き込みが要求されたデータをHDDプール332の空きブロックに格納する。
[ステップS144]重複除去処理部310は、HDDボリュームテーブル321を更新する。具体的には、重複除去処理部310は、HDDボリュームテーブル321に対して、HDDボリューム331における書き込み先のブロックを示すLBAと、ステップS143でデータを格納したHDDプール332のブロックを示すLBAとを対応付けて登録する。
[ステップS145]重複除去処理部310は、ハッシュテーブル322に新たなレコードを作成する。重複除去処理部310は、作成したレコードに、ステップS141で算出したハッシュ値と、ステップS143でデータを格納したHDDプール332のブロックを示すLBAとを対応付けて登録する。
[ステップS146]ステップS142でYesと判定された場合、重複除去処理部310は、HDDプール332へのデータの格納を行わずに、HDDボリュームテーブル321を更新する。具体的には、重複除去処理部310は、ステップS141で算出したハッシュ値に対応付けられたHDDプール332のLBAを、ハッシュテーブル322から抽出する。重複除去処理部310は、HDDボリュームテーブル321に対して、HDDボリューム331における書き込み先のブロックを示すLBAと、ハッシュテーブル322から抽出されたHDDプール332のLBAとを対応付けて登録する。
なお、上記の第2の実施の形態では、読み出し回数テーブル122に基づくHDDボリューム331からSSDボリューム231へのデータの移動を、ユーザボリューム130に対する書き込み要求を契機として実行した。しかし、例えば、ユーザボリューム130に対する読み出し要求を契機としてデータが移動されてもよい。あるいは、書き込み要求や読み出し要求とは無関係に、バックグラウンドの処理としてデータ移動が実行されてもよい。
図21は、バックグラウンドでのデータ移動処理手順の例を示すフローチャートである。サーバ装置100の階層化処理部110は、例えば、以下の処理を定期的に実行する。
[ステップS161]階層化処理部110は、読み出し回数テーブル122を参照し、HDDボリューム331に格納されているデータに対応するハッシュ値、すなわち、デバイス種別「HDD」に対応付けられたハッシュ値があるかを判定する。該当するハッシュ値がある場合、ステップS162の処理が実行される。該当するハッシュ値がない場合、処理を終了する。
[ステップS162]階層化処理部110は、ステップS161での該当するハッシュ値を用いて、図16に示したHDDボリューム331からSSDボリューム231へのデータ移動処理を実行する。
〔第3の実施の形態〕
図22は、第3の実施の形態に係るストレージシステムの構成例を示す図である。なお、図22では、図4に示した構成要素に対応する構成要素には同じ符号を付して示し、その説明を省略する。
図22に示すストレージシステムは、ストレージ装置600とホスト装置400を含む。ストレージ装置600は、CM600aとDE600bを有する。DE600bには、1台以上のSSDと1台以上のHDDが搭載されている。CM600aは、階層化処理部110と重複除去処理部210,310を有する。また、CM600aは、図4の記憶部120,220,320に記憶されている情報を記憶する記憶部630を有する。
なお、CM600aは、例えば、CM200a,300aと同様のハードウェア構成によって実現される。階層化処理部110と重複除去処理部210,310の処理は、例えば、CM600aが備えるプロセッサが所定のアプリケーションプログラムを実行することで実現される。記憶部630は、CM600aが備える記憶装置の記憶領域によって実現される。また、第3の実施の形態では、SSDプール232は、DE600b内の1台以上のSSDの記憶領域によって実現され、HDDプール332は、DE600b内の1台以上のHDDの記憶領域によって実現される。
以上の第3の実施の形態によれば、第2の実施の形態のサーバ装置100およびCM200a,300a,600aの機能が、1台のCM600aによって実現される。
なお、上記の各実施の形態に示した装置(例えば、ストレージ制御装置10、サーバ装置100、CM200a,300a)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、フレキシブルディスク(FD)、磁気テープなどがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc-Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
10 ストレージ制御装置
11 記憶部
11a 読み出し頻度情報
12 制御部
12a 論理ボリューム
20,30 ストレージ装置
21,31 記憶装置
22,32 制御部

Claims (8)

  1. 読み出し頻度情報を記憶する記憶部と、制御部とを有し、
    前記制御部は、
    ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、前記論理ボリュームにおける前記第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、重複除去を行ってデータが格納される第1の記憶装置に前記第1のデータブロックを格納し、前記書き込み先アドレスに対するアクセス頻度が低い場合には、重複除去を行ってデータが格納され、前記第1の記憶装置よりアクセス性能の低い第2の記憶装置に前記第1のデータブロックを格納し、
    前記論理ボリュームに格納された前記第1のデータブロックのうち、前記ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、前記第2のデータブロックの読み出し頻度を示す指標とを対応付けて、前記読み出し頻度情報に登録し、
    前記第2の記憶装置に格納された前記第1のデータブロックのうち、前記読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、前記第2の記憶装置から前記第1の記憶装置に移動させる、
    ストレージ制御装置。
  2. 前記第2の記憶装置には、前記第2の記憶装置の記憶領域によって実現される第1の他の論理ボリュームが設定され、前記第1の他の論理ボリュームに書き込みが要求された前記第1のデータブロックを、重複除去を行って前記第2の記憶装置に格納する他の制御部が接続されており、
    前記第3のデータブロックの移動では、前記読み出し頻度情報に登録されたハッシュ値のうち、前記第3のデータブロックに対応する特定ハッシュ値を前記他の制御部に指定することで、前記第3のデータブロックが書き込まれたアドレスを前記他の制御部から取得し、取得したアドレスを前記他の制御部に指定することで前記第1の他の論理ボリュームから前記第3のデータブロックを読み出し、前記第1の記憶装置に転送する、
    請求項1記載のストレージ制御装置。
  3. 前記記憶部は、前記第1の記憶装置の記憶領域によって実現される第2の他の論理ボリュームに含まれるアドレスごとに、書き込み頻度が登録された書き込み頻度情報をさらに記憶し、
    前記制御部はさらに、
    前記論理ボリュームに含まれるアドレスのうち、前記ホスト装置からのアクセス頻度が高いと判定された第1のアドレスに対する第4のデータブロックの書き込みが前記ホスト装置から要求されると、前記第4のデータブロックの前記第2の他の論理ボリュームにおける書き込み先を第2のアドレスに決定し、
    前記書き込み頻度情報に基づいて前記第2のアドレスについての書き込み頻度が低いと判定した場合には、重複除去を行って前記第4のデータブロックを前記第1の記憶装置に格納し、
    前記書き込み頻度情報に基づいて前記第2のアドレスについての書き込み頻度が高いと判定し、かつ、前記第1の記憶装置の記憶領域により実現されて前記第2の他の論理ボリュームに割り当てられる論理記憶領域における第3のアドレスに、前記第4のデータブロックがすでに格納されている場合には、前記第4のデータブロックを前記論理記憶領域の第4のアドレスに格納する、
    請求項1記載のストレージ制御装置。
  4. 重複除去を行って第1の記憶装置にデータを格納する第1のストレージ装置と、
    重複除去を行って前記第1の記憶装置よりアクセス速度の低い第2の記憶装置にデータを格納する第2のストレージ装置と、
    読み出し頻度情報を記憶する記憶部と制御部とを備えるストレージ制御装置と、
    を有し、
    前記制御部は、
    ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、前記論理ボリュームにおける前記第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、前記第1のデータブロックを前記第1の記憶装置に格納するように前記第1のストレージ装置に要求し、前記書き込み先アドレスに対するアクセス頻度が低い場合には、前記第1のデータブロックを前記第2の記憶装置に格納するように前記第2のストレージ装置に要求し、
    前記論理ボリュームに格納された前記第1のデータブロックのうち、前記ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、前記第2のデータブロックの読み出し頻度を示す指標とを対応付けて、前記読み出し頻度情報に登録し、
    前記第2の記憶装置に格納された前記第1のデータブロックのうち、前記読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、前記第2の記憶装置から前記第1の記憶装置に移動させる、
    ストレージシステム。
  5. 前記制御部はさらに、
    前記論理ボリュームに含まれるアドレスのうち、前記ホスト装置からのアクセス頻度が高いと判定された第1のアドレスに対する第4のデータブロックの書き込みが前記ホスト装置から要求されると、前記第1の記憶装置の記憶領域によって実現される他の論理ボリュームにおける前記第4のデータブロックの書き込み先を第2のアドレスに決定し、
    前記第2のアドレスに対する前記第4のデータブロックの書き込みを、前記第1のストレージ装置に要求し、
    前記第1のストレージ装置は、
    前記他の論理ボリュームに含まれるアドレスごとに、書き込み頻度が登録された書き込み頻度情報を記憶する他の記憶部と、
    前記書き込み頻度情報に基づいて前記第2のアドレスについての書き込み頻度が低いと判定した場合には、重複除去を行って前記第4のデータブロックを前記第1の記憶装置に格納し、前記書き込み頻度情報に基づいて前記第2のアドレスについての書き込み頻度が高いと判定し、かつ、前記第1の記憶装置の記憶領域により実現されて前記他の論理ボリュームに割り当てられる論理記憶領域における第3のアドレスに、前記第4のデータブロックがすでに格納されている場合には、前記第4のデータブロックを前記論理記憶領域の第4のアドレスに格納する他の制御部と、
    を有する、
    請求項4記載のストレージシステム。
  6. 前記他の制御部はさらに、前記第4のデータブロックを前記第4のアドレスに格納した後、前記第1のアドレスに対する第5のデータブロックの書き込みが前記ホスト装置から要求されると、前記第5のデータブロックを前記論理記憶領域の前記第4のアドレスに上書きする、
    請求項5記載のストレージシステム。
  7. コンピュータが、
    ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、前記論理ボリュームにおける前記第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、重複除去を行ってデータが格納される第1の記憶装置に前記第1のデータブロックを格納し、前記書き込み先アドレスに対するアクセス頻度が低い場合には、重複除去を行ってデータが格納され、前記第1の記憶装置よりアクセス性能の低い第2の記憶装置に前記第1のデータブロックを格納し、
    前記論理ボリュームに格納された前記第1のデータブロックのうち、前記ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、前記第2のデータブロックの読み出し頻度を示す指標とを対応付けて、記憶部に記憶された読み出し頻度情報に登録し、
    前記第2の記憶装置に格納された前記第1のデータブロックのうち、前記読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、前記第2の記憶装置から前記第1の記憶装置に移動させる、
    ストレージ制御方法。
  8. コンピュータに、
    ホスト装置から論理ボリュームに対する第1のデータブロックの書き込みが要求されたとき、前記論理ボリュームにおける前記第1のデータブロックの書き込み先アドレスに対するアクセス頻度が高い場合には、重複除去を行ってデータが格納される第1の記憶装置に前記第1のデータブロックを格納し、前記書き込み先アドレスに対するアクセス頻度が低い場合には、重複除去を行ってデータが格納され、前記第1の記憶装置よりアクセス性能の低い第2の記憶装置に前記第1のデータブロックを格納し、
    前記論理ボリュームに格納された前記第1のデータブロックのうち、前記ホスト装置から読み出しが要求された第2のデータブロックに基づくハッシュ値と、前記第2のデータブロックの読み出し頻度を示す指標とを対応付けて、記憶部に記憶された読み出し頻度情報に登録し、
    前記第2の記憶装置に格納された前記第1のデータブロックのうち、前記読み出し頻度情報に基づいて読み出し頻度が高いと判定された第3のデータブロックを、前記第2の記憶装置から前記第1の記憶装置に移動させる、
    処理を実行させるストレージ制御プログラム。
JP2016106306A 2016-05-27 2016-05-27 ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム Active JP6867578B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016106306A JP6867578B2 (ja) 2016-05-27 2016-05-27 ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
US15/495,120 US20170344269A1 (en) 2016-05-27 2017-04-24 Storage system, control apparatus, and method of transmitting data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016106306A JP6867578B2 (ja) 2016-05-27 2016-05-27 ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム

Publications (2)

Publication Number Publication Date
JP2017211920A JP2017211920A (ja) 2017-11-30
JP6867578B2 true JP6867578B2 (ja) 2021-04-28

Family

ID=60417890

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016106306A Active JP6867578B2 (ja) 2016-05-27 2016-05-27 ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム

Country Status (2)

Country Link
US (1) US20170344269A1 (ja)
JP (1) JP6867578B2 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190074897A (ko) * 2017-12-20 2019-06-28 에스케이하이닉스 주식회사 메모리 시스템 및 이의 동작 방법
JP7306665B2 (ja) * 2018-03-01 2023-07-11 Necソリューションイノベータ株式会社 ストレージ装置、データ移行方法、プログラム
CN111767006B (zh) * 2019-04-02 2021-03-16 英韧科技(上海)有限公司 数据处理方法及装置
CN114063880A (zh) * 2020-07-31 2022-02-18 伊姆西Ip控股有限责任公司 处理输入输出请求的方法、电子设备和计算机程序产品
TWI733568B (zh) * 2020-08-27 2021-07-11 慧榮科技股份有限公司 記憶裝置、快閃記憶體控制器及其存取方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5594647B2 (ja) * 2010-08-10 2014-09-24 日本電気株式会社 ストレージ装置及びその制御方法
US9158468B2 (en) * 2013-01-02 2015-10-13 International Business Machines Corporation High read block clustering at deduplication layer
US9336076B2 (en) * 2013-08-23 2016-05-10 Globalfoundries Inc. System and method for controlling a redundancy parity encoding amount based on deduplication indications of activity
JP2015111370A (ja) * 2013-12-06 2015-06-18 ソニー株式会社 情報処理装置、スワップ制御方法及びプログラム
US10747440B2 (en) * 2014-09-24 2020-08-18 Hitachi, Ltd. Storage system and storage system management method

Also Published As

Publication number Publication date
US20170344269A1 (en) 2017-11-30
JP2017211920A (ja) 2017-11-30

Similar Documents

Publication Publication Date Title
US10776278B2 (en) Storage control apparatus and computer-readable storage medium storing storage control program
JP5271424B2 (ja) ダイナミックストレージ階層化によるオンラインデータ配置をボリュームに提供するためのアロケートオンライトのスナップショット機構
US11347428B2 (en) Solid state tier optimization using a content addressable caching layer
JP5456063B2 (ja) アロケートオンライトのスナップショットを用いた、ダイナミックストレージ階層化のための方法及びシステム
JP6867578B2 (ja) ストレージ制御装置、ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
US10176212B1 (en) Top level tier management
JP5944587B2 (ja) 計算機システム及び制御方法
US10037161B2 (en) Tiered storage system, storage controller, and method for deduplication and storage tiering
JP5309259B2 (ja) ストレージ装置及びその制御方法
US20210081116A1 (en) Extending ssd longevity
JP5410386B2 (ja) ストレージシステムのためのi/o変換方法及び装置
JP2018041245A (ja) ストレージ装置、及びストレージ制御装置
JP6724534B2 (ja) 情報処理装置、重複除去プログラム、及び重複除去方法
JP7054001B2 (ja) 情報処理システム、管理装置および制御方法
JP6011153B2 (ja) ストレージシステム、ストレージ制御方法およびストレージ制御プログラム
US10133517B2 (en) Storage control device
US10929299B2 (en) Storage system, method and non-transitory computer-readable storage medium
US10365846B2 (en) Storage controller, system and method using management information indicating data writing to logical blocks for deduplication and shortened logical volume deletion processing
JP2016143166A (ja) 制御装置,ストレージシステム及び制御プログラム
JP2021114264A (ja) ストレージ制御装置およびストレージ制御プログラム
US20240111429A1 (en) Techniques for collecting and utilizing activity metrics
JP7310110B2 (ja) ストレージ及び情報処理システム。
JP6805501B2 (ja) ストレージ装置
TWI446194B (zh) 高效能虛擬磁碟管理系統

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190212

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20191128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20191210

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200203

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20200203

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20200203

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200825

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201023

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: 20210309

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210322

R150 Certificate of patent or registration of utility model

Ref document number: 6867578

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150