JPWO2017141315A1 - ストレージ装置 - Google Patents

ストレージ装置 Download PDF

Info

Publication number
JPWO2017141315A1
JPWO2017141315A1 JP2017567584A JP2017567584A JPWO2017141315A1 JP WO2017141315 A1 JPWO2017141315 A1 JP WO2017141315A1 JP 2017567584 A JP2017567584 A JP 2017567584A JP 2017567584 A JP2017567584 A JP 2017567584A JP WO2017141315 A1 JPWO2017141315 A1 JP WO2017141315A1
Authority
JP
Japan
Prior art keywords
metadata
storage
write data
data
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
JP2017567584A
Other languages
English (en)
Other versions
JP6685334B2 (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2017141315A1 publication Critical patent/JPWO2017141315A1/ja
Application granted granted Critical
Publication of JP6685334B2 publication Critical patent/JP6685334B2/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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • G06F3/0641De-duplication techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

Landscapes

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

Abstract

本発明の一観点に係るストレージ装置は、ホストからのライトデータの重複排除処理を行うよう構成されている。ストレージ装置は重複排除処理のために、ライトデータの特徴量を算出し、この特徴量とライトデータの格納位置情報の組であるメタデータを管理領域に記録している。ただし、ストレージ装置は管理領域に格納されるメタデータの量が多くなることを防ぐために、ライトデータがあらかじめ定められた条件に該当する場合、重複排除処理を行わず、そのライトデータに係るメタデータの作成を抑制する。

Description

本発明は、ストレージ装置に関する。
ストレージ装置は、データを格納する複数の記憶デバイスと、記憶デバイスを制御するストレージコントローラとを有しており、ホスト計算機に大容量のデータ格納空間を提供することを目的としている。
ストレージ装置には、低コストで大量のデータを保存することが求められる。こうした要求を満たすために、データを可逆圧縮(以降、単に圧縮と記す)して記録する技術が知られている。圧縮によりデータサイズを縮小してから記憶デバイスに記録すると、データを圧縮せずに記憶デバイスに記録するよりも多くのデータをストレージ装置に格納できる。そのため、データの保持コスト(記憶媒体のビットコスト、ストレージ装置の消費電力コスト等)を削減できる。
格納すべきデータ量を削減するもう一つの技術として、重複排除技術がある。たとえばストレージ装置に同内容のデータが複数個存在していることをストレージ装置が検出した時、そのうちの1つだけをストレージ装置内の記憶デバイスに残し、残りのデータは記憶デバイスに格納しないようにする技術である。
圧縮技術と重複排除技術は併用可能である。たとえば特許文献1には、上位装置から転送されてきたデータの中で重複しているデータについては重複排除処理を行い、重複排除の行われなかったデータを圧縮するストレージ装置が開示されている。
特許5216915号公報
同一データの有無を判定するために、複数のデータをバイトあるいはビットごとに比較すると処理時間が長くなる。そのため、重複排除技術では、ハッシュ関数などを用いてデータの特徴量(ハッシュ値等)を算出し、算出されたハッシュ値を同一データの有無の判定に用いることがある。これは、データから算出される特徴量(ハッシュ値等)は、数バイト程度のサイズなので、特徴量同士を比較するほうが、より高速に異同の判定ができるからである。そのため、特許文献1に開示されているストレージ装置においても、重複判定にハッシュ値が用いられている。
具体的には、ストレージ装置は、記憶デバイスに格納済みのデータの格納位置(アドレス)と、そのデータのハッシュ値をハッシュテーブル等の管理情報に格納して保持している。新たなデータがストレージ装置に書き込まれると、ストレージ装置はこのデータのハッシュ値を算出し、算出されたハッシュ値が既にハッシュテーブルに存在するかを判定する。
ハッシュテーブルのような管理情報の量(サイズ)は、ストレージ装置に格納されるデータ量に比例して大きくなる。ストレージ装置のアクセス性能の観点から、管理情報はたとえばキャッシュメモリ等の、アクセス性能の高い記憶領域に格納されることが望ましい。ただし管理情報の量が増加すると、管理情報をアクセス性能の高い記憶領域に保持することが難しくなる。
本発明の一観点に係るストレージ装置は、ホストからのライトデータの重複排除処理を行うよう構成されており、重複排除処理のために、ライトデータの特徴量とこのライトデータの格納位置情報の組であるメタデータを管理領域に記録している。ただしライトデータがあらかじめ定められた条件に該当する場合、そのライトデータに係るメタデータの作成を行わない。
本発明の一観点に係るストレージ装置によれば、重複排除処理で必要となる管理情報のサイズを抑制することができる。
実施例に係るストレージ装置を含む、計算機システムの構成例である。 仮想ボリュームとページの関係を表した図である。 管理情報の一覧である。 ページ管理テーブルの構成例である。 プール管理情報の構成例である。 仮想ボリューム管理テーブルの構成例である。 追書き空間マッピングテーブルの構成例である。 論理物理変換テーブルの構成例である。 FingerPrint Match Queue及びFingerPrint Table Directoryの構成例である。 ストレージ装置の有するプログラムの一覧である。 リード処理のフローチャートである。 ライト処理のフローチャートである。 バッファ更新プログラムのフローチャートである。 重複排除プログラムのフローチャート(1)である。 重複排除プログラムのフローチャート(2)である。 追書き空間に追記する処理のフローチャートである。 デステージ処理のフローチャートである。 メタデータ削減プログラム2000のフローチャート(1)である。 メタデータ削減プログラム2000のフローチャート(2)である。 メタデータ再作成プログラム3000のフローチャート(1)である。 メタデータ再作成プログラム3000のフローチャート(2)である。
以下、幾つかの実施例について、図面を用いて説明する。
なお、以下の実施例において、ストレージ装置内で実行される処理について、「プログラム」を主語として説明を行う場合がある。実際には、ストレージ装置が有するプロセッサ(CPU)がプログラムを実行することによって、プログラムに記述された処理が行われるため、処理の主体はプロセッサ(CPU)であるが、説明が冗長になることを防ぐため、プログラムを主語にして処理の内容を説明することがある。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、以下で説明される各種プログラムは、プログラム配布サーバや計算機が読み取り可能な記憶メディアによって提供され、プログラムを実行する各装置にインストールされてもよい。計算機が読み取り可能な記憶メディアとは、非一時的なコンピュータ可読媒体で、例えばICカード、SDカード、DVD等の不揮発性記憶媒体である。
実施例の説明に入る前に、実施例で用いられる各種用語について説明する。
本明細書において、「圧縮」とはLZWアルゴリズム等の可逆圧縮アルゴリズムを用いて、データの意味を保ったままデータサイズを縮小する処理のことを意味する。本実施例に係るストレージ装置では、ホストからストレージ装置に対して書き込まれるデータの圧縮を行うことがある。ストレージ装置で圧縮処理が行われたことによりサイズの縮小されたデータのことを、「圧縮データ」と呼び、ストレージ装置で圧縮処理が施されていないデータの事を「非圧縮データ」と呼ぶ。また可逆圧縮アルゴリズムを用いて、圧縮データを元のデータサイズに戻す処理のことを、「伸長」と呼ぶ。
また以下で説明する実施例では、データ圧縮によるデータの縮小効率の指標として、「圧縮率」を用いる。実施例における圧縮率は、以下の計算式により定義されるものである。
圧縮率=(非圧縮データのサイズ−圧縮データのサイズ)÷非圧縮データのサイズ
以下の実施例では、「圧縮率が低い」、「圧縮率が高い」等の表現が用いられるが、その場合の圧縮率は、上の計算式により定義されるものである。そのため圧縮後のデータについて、「圧縮率が低い」または「圧縮率が小さい」と表現される場合、圧縮によりデータがあまり縮小されなかったことを意味する。一例として圧縮処理の結果、データサイズが全く変化しなかった場合には、圧縮率は0となる。逆に「圧縮率が高い」とは、圧縮によるデータ縮小量が多いことを意味する。
「ボリューム」とは、ストレージ装置や記憶デバイス等のターゲットデバイスが、ホスト計算機等のイニシエータデバイスに提供する記憶空間のことを意味する。イニシエータデバイスが記憶空間上のある位置(アドレス)に対するデータの書き込み要求を発行すると、そのアドレスに割り当てられている記憶領域にデータが格納される。本実施例に係るストレージ装置はボリュームとして、いわゆるThin Provisioning技術により形成される仮想ボリュームをホストに提供する。仮想ボリュームは、その初期状態(仮想ボリュームが定義された直後)では、仮想ボリューム上の各アドレスに記憶領域が割り当てられていない。ストレージ装置は、イニシエータデバイス(ホスト)から記憶空間上のアドレスに対するデータ書き込み要求を受領した時点で、そのアドレスに割り当てられるべき記憶領域を動的に決定する。
「ブロック」とは、ボリューム上の領域を意味する。また、以下で説明する実施例では、ブロックはイニシエータデバイスがボリュームにアクセスする時の最小アクセス単位と等しいサイズの領域で、固定長である。ブロックのサイズは一例として512バイトである。イニシエータデバイスがボリューム上の領域にアクセスする際には、各ブロックにアサインされているアドレスを指定することでアクセスする。このアドレスは、「Logical Block Address(LBA)」と呼ばれる。ボリュームの先頭ブロックのLBAが0で、それ以降のブロックには順に1,2,...の連続番号が付される。また、以下の実施例では、ストレージ装置はボリューム上の領域を特定するアドレスとして、LBA以外のアドレスを用いることがある。これについては、実施例中で説明する。
「重複排除処理」とは、ストレージ装置内に同内容のデータが複数存在する場合、1つだけをストレージ装置に残し、それ以外のデータをストレージ装置から削除する処理である。ストレージ装置内に同内容のデータが存在するか判定する処理のことを、「重複判定」処理と呼ぶ。なお、特に断りのない限り、重複排除処理は重複判定処理を含む処理である。
以下で説明する実施例に係るストレージ装置では、チャンクと呼ばれる所定サイズのデータ毎に重複判定を行う。以下の実施例では、チャンクのサイズが8KBの例について説明されるが、チャンクのサイズは8KB以外のサイズであってもよい。同内容のデータ(またはチャンク)のことを「重複データ(または重複チャンク)」と呼ぶ。
重複判定の際、2つのデータをビット単位あるいはバイト単位で比較すると、判定処理に長時間を要することになる。そのため一般的には重複判定を行う装置は、比較対象のデータに所定の演算(たとえばハッシュ関数を用いた演算等)を行うことで、小サイズ(たとえば8バイト程度)の特徴量を生成し、それを用いて重複判定を行う。以下の実施例では、データから生成される特徴量のことを、「FingerPrint Key」と呼ぶ。FingerPrint Keyは、FPKと略記されることもある。
以下で説明する実施例では、データAから算出されたFPKの値がHであった場合、値HはデータAのFPKと呼ばれる。逆にデータAのことを、「FPK Hを持つデータ」と呼ぶことがある。
「重複排除の範囲」とは、重複データの有無を判定する時のデータの探索範囲のことを意味する。たとえば重複排除の範囲が「ストレージ装置」の場合、ストレージ装置はデータAと同一のデータが存在するか判定する際に、データAとストレージ装置内の全データとを比較する。一方、重複排除の範囲がストレージ装置内の一部の記憶デバイス(ここではこれを「記憶グループ」と呼ぶ)に限定されている場合、ストレージ装置は重複データの有無を判定する際に、記憶グループ内のデータのみの中から重複データの有無を検索する。
記憶領域の「更新」とは、記憶領域に格納されているデータの内容を新しい内容に書き換える(上書きする)ことを意味する。ある記憶領域が更新される前に、その記憶領域に格納されていたデータは、「更新前データ」と呼ばれる。一方その記憶領域に新たに書き込まれるデータのことは、「更新データ」または「更新後データ」と呼ばれる。
「追書き(append write)」または「追記(append)」とは、データを記憶領域の未使用領域に対してシーケンシャルに書き込む動作のことを意味する。以下の実施例におけるストレージ装置では、追書き用の記憶領域が設けられる。ストレージ装置が追書き処理を行う場合、追書き用の記憶領域の先頭から順にデータを書き込んでいく。ストレージ装置は、直前に行われた追書き処理でデータが書き込まれた終端アドレスを記憶しており、追書き処理を行う際には、この終端アドレスの次のアドレスから、データを書き込む。
(1)システム構成
図1は、第1の実施例に係るストレージ装置1を含む計算機システムの構成例を示している。ストレージ装置1は、ストレージコントローラ10と、ストレージコントローラ10に接続された複数の記憶デバイス20を有する。
記憶デバイス20は、ストレージ装置1がホスト2などの上位装置からのライトデータを記憶するために用いられる。記憶デバイスとしては、たとえば磁気ディスクを記憶媒体として用いるHDD(Hard Disk Drive)22や、フラッシュメモリ等の不揮発性半導体メモリを記憶媒体として採用したSSD(Solid State Drive)21が用いられる。記憶デバイス20は一例として、SAS(Serial Attached SCSI)規格に従う伝送線(SASリンク)や、PCI(Peripheral Component Interconnect)規格に従う伝送線(PCIリンク)などによって、ストレージコントローラ10と接続される。
ストレージコントローラ10には、1以上のホスト2が接続される。またストレージコントローラ10には、管理ホスト5が接続される。ストレージコントローラ10とホスト2とは、一例としてファイバチャネルを用いて形成されるSAN(Storage Area Network)3を介して接続される。ストレージコントローラ10と管理ホスト5とは、一例としてイーサネットを用いて形成されるLAN(Local Area Network)6を介して接続される
ストレージコントローラ10は少なくとも、プロセッサ(CPUとも呼ばれる)11、ホストインタフェース(「ホストI/F」とも呼ばれる)12、デバイスインタフェース(「デバイスI/F」とも呼ばれる)13、キャッシュメモリ14、管理用I/F15、ローカルメモリ16を有する。そしてCPU11、ホストI/F12、デバイスI/F13、キャッシュメモリ14、管理用I/F15は、内部スイッチ(内部SWとも呼ばれる)17を介して相互接続されている。図1ではこれらの構成要素がそれぞれ1つだけ示されているが、高性能化及び高可用性の確保のため、これらの構成要素のそれぞれがストレージコントローラ10内に複数搭載されていてもよい。また内部SW17ではなく、共通バスを介して各構成要素が相互接続された構成にしてもよい。
デバイスI/F13は少なくとも、インタフェースコントローラと転送回路を有する。インタフェースコントローラは、記憶デバイス20で用いられているプロトコル(一例ではSAS)をストレージコントローラ10内部で用いられている通信プロトコル(一例としてPCI−Express)に変換するためのコンポーネントである。転送回路は、ストレージコントローラ10が、記憶デバイス20に対してデータの転送(リード、ライト)を行う際に用いられる。
ホストI/F12は、デバイスI/F13と同様に、少なくともインタフェースコントローラと転送回路を有する。ホストI/F12が有するインタフェースコントローラは、ホスト2とストレージコントローラ10間のデータ転送経路で用いられている通信プロトコル(たとえばファイバチャネル)と、ストレージコントローラ10内部で用いられている通信プロトコルを変換するためのものである。
CPU11は、ストレージ装置1の各種制御を行う。ローカルメモリ16には、CPU11が実行するプログラム(ストレージ制御プログラムと呼ぶ)が格納される。またCPU11は、データの圧縮処理を行う際に、ローカルメモリ16上の記憶領域の一部を、一種の作業用領域として使用する。ローカルメモリ16には、DRAM、SRAM等の揮発性記憶媒体が用いられるが、別の実施形態として、不揮発性メモリが用いられてもよい。
キャッシュメモリ14は、記憶デバイス20に対するI/O対象データを一時的に記憶するために用いられる。またCPU11が使用する、ストレージ装置1の各種管理情報を記憶するために用いられる。キャッシュメモリ14には、DRAM、SRAM等の揮発性記憶媒体が用いられるが、別の実施形態として、不揮発性メモリを用いてキャッシュメモリ14を構成してもよい。また、キャッシュメモリ14に揮発性記憶媒体が用いられる場合、ストレージ装置1にバッテリ等の補助電源を搭載し、停電時にキャッシュメモリ14の記憶内容を維持できるように構成されていてもよい。
本実施例に係るストレージ装置1において、CPU11は、ローカルメモリ16とキャッシュメモリ14の何れにもアクセス可能に構成されている。ただしCPU11がキャッシュメモリ14にアクセスする際、内部スイッチ17を経由してアクセスすることになる。そのため、CPU11がキャッシュメモリ14にアクセスした時の応答時間は、CPU11がローカルメモリ16にアクセスした時の応答時間よりも長くなる。
管理ホスト5は、ストレージ装置1の管理操作を行うための計算機である。管理ホスト5は、キーボードやディスプレイ等の入出力デバイス(非図示)を備え、ユーザ(管理者)は入出力デバイスを用いてストレージ装置1に対する設定指示を行うことができる。また管理ホスト5は、ストレージ装置1の状態等の情報をディスプレイ等の出力デバイスに表示することもできる。
本実施例に係るストレージ装置1は、記憶デバイス20に格納されるデータを圧縮することができる。データの圧縮は、CPU11が実行する(CPU11でデータ圧縮を行うためのプログラムコードが実行されることで、圧縮が行われる)。ただし別の実施形態として、ストレージコントローラ10にデータ圧縮を行う専用のハードウェアを設け、ストレージコントローラ10がこのハードウェアを用いてデータ圧縮を行うように構成されていてもよい。
(2)記憶領域の管理
続いて、本実施例に係るストレージ装置1が管理する記憶領域について説明する。本実施例に係るストレージ装置1が有する1以上の記憶デバイス20は、所定サイズの記憶空間をストレージコントローラ10に提供する。ただしストレージコントローラ10は、記憶デバイス20の提供する記憶空間を直接ホスト2には提供しない。ストレージコントローラ10はホスト2に、記憶デバイス20の提供する記憶空間とは異なる、1以上の仮想的な記憶空間を提供する。この仮想的な記憶空間を「仮想ボリューム」と呼ぶ。また、仮想ボリューム(ホスト2に提供される記憶空間)のことを、「上書き空間」と呼ぶこともある。
仮想ボリュームは、公知のThin Provisioning技術を用いて形成されるボリュームである。ストレージ装置1は、ホスト2から仮想ボリューム上の領域に対するアクセス要求を受け付けた時点で、その領域に記憶デバイス20の記憶領域を割り当てる(マップする)。
本実施例では、ストレージ装置1が有する複数の記憶デバイス20のうち、仮想ボリュームに割り当てることができる記憶デバイス20を「プール」という管理単位に所属させる。ストレージ装置1は、プールに所属する記憶デバイス20の記憶空間を、所定サイズ(一例として42MB)の部分領域に分割して管理する。本実施例では、この部分領域のことを「ページ」または「物理ページ」と呼ぶ。なお、ストレージ装置1内にプールは複数設けられて良い。各プールにはストレージ装置1内で一意な識別番号が付されており、この識別番号はプール番号(プール#)と呼ばれる。またプール#がkのプールは、「プール#k」と表記される。
ストレージ装置1が仮想ボリュームに記憶デバイス20の記憶領域を割り当てる時、ページ毎に割り当てる。そのためストレージ装置1は、仮想ボリュームもページと同サイズの領域に分割して管理する。仮想ボリューム上の、ページと同サイズの領域のことは、「仮想ページ」または「上書きページ」と呼ばれる。なお、本実施例では仮想ページのサイズが42MBの場合の例を説明するが、仮想ページのサイズはこれ以外のサイズでもよい。
ホスト2が仮想ボリュームにアクセスする時、ホスト2はストレージ装置1にアクセス要求(リード要求、ライト要求等)を発行する。リード要求やライト要求には、アクセス対象の仮想ボリュームを特定するための識別子(Logical Unit Number(LUN)等)と、仮想ボリューム上の領域を特定する情報が含まれる。仮想ボリューム上の領域を特定する情報には、Logical Block Address(LBA)と領域の長さの情報が含まれる。ストレージ装置1がホスト2からライト要求を受信すると、ストレージ装置1はライト要求に含まれる、仮想ボリューム上の領域を特定する情報(LBAと領域の長さ)から、アクセス対象の仮想ページを特定する。アクセス対象の仮想ページにまだページが割り当てられていない場合、ストレージ装置1はプールに属するページのうち未使用のページ(まだ仮想ページに割り当てられていないページ)を選択し、アクセス対象の仮想ページに、選択されたページを割り当てる(マップする)。ホスト2からのライトデータは、このアクセス対象仮想ページにマップされたページに格納される。
またストレージ装置1は、仮想ページと、仮想ページに割り当てられたページとの対応関係(マッピング)をマッピングテーブル(後述する仮想ボリューム管理テーブル300など)に記憶している。仮想ページに対するリード要求を受け付けた時には、ストレージ装置1はマッピングテーブルを参照することで、仮想ページに割り当てられたページを特定し、特定されたページからデータを読み出す。
図2は、仮想ボリュームと、仮想ボリュームに割り当てられる記憶領域(ページ)の関係を表した概念図である。図2に示されている長方形状のオブジェクト40は、仮想ボリューム(上書き空間)を表す。一方、円柱状のオブジェクト50はプールを表している。
さらにストレージ装置1は、仮想ボリューム(上書き空間)40とは異なる記憶空間を有する。この記憶空間は「追書き空間」と呼ばれる。図2に示されている長方形状のオブジェクト60が追書き空間を表している。追書き空間60は、ホスト2がアクセスできる記憶空間ではなく、ストレージコントローラ10だけが使用可能な記憶空間である。追書き空間60は、ストレージコントローラ10のCPU11が圧縮データを記憶デバイスに格納するために用いられる。
まず、上書き空間の仮想ページと物理ページの関係について説明する。各仮想ページには、仮想ページ番号(VP#と表記されることもある)と呼ばれる、一意な識別番号(識別番号には非負の整数値が用いられる)が付される。以下では、仮想ページ番号がn(nは非負の整数値)の仮想ページのことを、「VP#n」と表記する。同様に各物理ページには、物理ページ番号(またはページ#)と呼ばれる、ストレージ装置1内で一意な識別番号が付される(この識別番号も非負の整数値である)。以下では、物理ページ番号がn(nは非負の整数値)の物理ページのことを、「ページ#n」と表記する。図2の例では、VP#0にページ#0がマップされた例が示されている。VP#1,VP#2については後述する。
ストレージ装置1がホスト2から、仮想ページ内の領域(1または複数のブロック)に対するライト要求(及びライトデータ)を受け付けた場合、仮想ページにマップされている物理ページ内のブロックにライトデータが格納される。ストレージ装置1は、仮想ページと物理ページの対応関係(マッピング)を、後述する仮想ボリューム管理テーブル300に格納して管理する。
本実施例に係るストレージ装置1は原則として(後述する、圧縮データ格納のケースを除いて)、仮想ページの先頭からn番目のブロックへのデータライト要求を受領すると、データは仮想ページにマップされている物理ページの先頭からn番目のブロックに格納される。なお、説明が冗長になることを避けるため、以下では、ストレージ装置1が仮想ページに割り当てられている物理ページにデータを格納することを、「仮想ページ(または上書き空間)にデータを格納する」と表現する。
追書き空間も上書き空間と同じく、いわゆるThin Provisioning技術により形成される記憶空間である。ストレージコントローラ10は、追書き空間上の領域に、動的にページ(物理ページ)を割り当て、データは追書き空間に割り当てられた物理ページに書き込まれる。上書き空間と同じく、ストレージ装置1は追書き空間を物理ページと同サイズの領域に分割して管理する。この領域は「追書きページ」と呼ばれる。また追書きページにも追書きページ番号と呼ばれる一意な識別番号が付される。追書きページ番号は、追書きページ#と表記されることもある。ストレージ装置1は、追書きページと物理ページの対応関係(マッピング)を、後述する追書き空間マッピングテーブル350に格納して管理する。また、説明が冗長になることを避けるため、以下では、ストレージ装置1が追書きページに割り当てられている物理ページにデータを書き込む処理を、「追書きページ(または追書き空間)にデータを書き込む」と表現する。
先にも述べたが、追書き空間に書き込まれるデータは、圧縮データである。また追書き空間はプールごとに設けられ、プールがn個ある場合には追書き空間はn個存在する。追書き空間に割り当てられる物理ページは、仮想ページに割り当てられる物理ページと同じく、プールから未使用の物理ページが選択される。プール#kの物理ページが割り当てられる仮想ボリュームのチャンクが追書き空間に移動される時、その追書き空間に割り当てられる物理ページは、プール#kの物理ページである。
ストレージ装置1は、ホスト2から仮想ページに書き込まれたデータ(非圧縮データ)について、必要に応じて圧縮処理を行う。圧縮処理により生成された圧縮データは、非圧縮データの格納された物理ページとは異なる場所、具体的には追書き空間に移動される。またこの時、重複データの有無の判定なども行われる。
本実施例に係るストレージ装置1は、仮想ページ内の領域を、仮想ページの先頭から順に8KBの部分領域に区分し、この部分領域ごとにデータ圧縮を行う。本実施例では、この8KBの部分領域(あるいはこの部分領域に格納されているデータ)のことを「チャンク」と呼ぶ。なお、チャンクの大きさには、8KB以外の大きさが採用されてもよい。また、チャンクを圧縮することで生成されたデータのことを「圧縮チャンク」と呼ぶ。圧縮チャンクの大きさはデータの内容に依存して変動するが、最小で512バイト、最大で8KBである。また本実施例に係るストレージ装置1は、512バイトの整数倍のサイズの圧縮チャンクを生成する。
ストレージコントローラ10(のCPU11)が圧縮チャンクを生成すると、ストレージコントローラ10は圧縮チャンクを追書き空間に追記する。ある仮想ページのチャンクがすべて圧縮されて、圧縮チャンクが全て追書き空間に書き込まれると、仮想ページに割り当てられていたページは破棄される。具体的には、その仮想ページに割り当てられていたページは、未使用状態(仮想ページに割り当てられていない状態)に変更される。これにより、上書き空間に対して書き込まれたデータが、追書き空間に移動されたことになる。なお、追書き空間に割り当てられた物理ページには、複数の仮想ページのチャンク(圧縮チャンク)が格納されることもある。圧縮によりチャンクのサイズは小さくなり、複数の仮想ページのデータが1物理ページに収容可能になることもあるからである。またストレージ装置1は、上書き空間上のチャンクと追書き空間上の圧縮チャンクの対応関係(マッピング)を、後述するLP変換テーブル500に格納して管理する。
ホスト2から書き込まれたデータが追書き空間に移動された仮想ページに対して、ホスト2から更新データの書き込み要求(つまり更新要求)があった場合、更新データは圧縮され、追書き空間に追記される。ただし別の実施形態として、ストレージ装置1は再び上書き空間の仮想ページに物理ページを割り当て、追書き空間に移動されたデータを伸長して、仮想ページに割り当てられた物理ページに伸長されたデータを書き戻し、そしてこの物理ページ上のデータを更新(上書き)するようにしてもよい。
ストレージ装置1が、上書き空間上のチャンクを特定するために使用するアドレスをLAと呼ぶ。LAはチャンクごとに付されるアドレスで、
LA=LBA÷16
の関係にある。
そのため、上書き空間上の先頭に位置するチャンクのLAは0で、後続のチャンクのLAは順に、1,2,...の連続番号になる。
一方追書き空間上の圧縮チャンクは可変長で、最小512バイトのサイズであるので、追書き空間上の512バイトの領域(ブロック)ごとにアドレスが付される。このアドレスをPAと呼ぶ。追書き空間上の先頭に位置する512バイト領域のPAが0で、後続の領域のPAには、順に1,2,...の連続番号が用いられる。
(3)管理情報
続いて、上で述べたプール、仮想ボリューム(上書き空間)、追書き空間の管理に用いられる管理情報の内容について説明する。なお、本明細書や図面で、数値の先頭に文字列“0x”が付されているものがあるが、これはその数値が16進数で表記されていることを意味する。
図3にストレージ装置1が有する管理情報を示す。ストレージ装置1は、キャッシュメモリ14上にページ管理テーブル200、仮想ボリューム管理テーブル300、追書き空間マッピングテーブル350、論理物理変換テーブル(LP変換テーブル)500、FingerPrint Match Queue(FPMQ)400、FingerPrint Table Directory(FPTD)450、プール管理情報600を有する。
図4はプールに属するページを管理するための情報である、ページ管理テーブル200の例を示している。ページ管理テーブル200はプールごとに設けられるテーブルで、プールがn個設けられている場合には、ストレージ装置1はn個のページ管理テーブル200を有する。
ページ管理テーブル200の各行(レコード)には、プール内の物理ページの情報が格納される。各レコードは、ページ#(201)、DEV#(202)、Addr(203)、use(204)の欄を有する。ページ#(201)には、物理ページのページ番号が格納される。つまりページ#(201)がnのレコードは、ページ#nの情報を管理するレコードである。
先に述べたが、ページ(物理ページ)は記憶デバイス20上の領域である。DEV#(202)とAddr(203)には、物理ページの存在する記憶デバイス20の識別番号及び記憶デバイス内のアドレスが格納される。図4の場合、ページ#1の情報を管理するレコードには、DEV#(202)に0、Addr(203)に0x15000が格納されている。そのため、ページ#1は、識別番号が0の記憶デバイス20の、アドレス0x15000から始まる42MBの領域(1物理ページのサイズに等しい領域)に相当することを表している。
use(204)には、物理ページの使用状況を表す情報が格納される。物理ページが仮想ボリュームまたは追書き空間にマップされている場合、use(204)には“1”が格納される。逆に物理ページが仮想ボリュームまたは追書き空間にマップされていない場合、use(204)には“0”が格納される。use(204)が“1”であるページは、使用中のページと呼ばれ、逆にuse(204)が“0”のページは、未使用のページと呼ばれる。
なお、本実施例では、ページ管理テーブル200に、記憶デバイス20(たとえばHDD)の識別番号とアドレスが登録され、各ページが1つの記憶デバイス20内の記憶領域に相当する例が説明されている。ただし、これ以外のプール(またはページ)の構成方法が採用されてもよい。たとえばストレージ装置1がRAID(Redundant Arrays of Independent (or Inexpensive) Disks)技術を用いて、複数の記憶デバイス20から1つの論理的な記憶デバイス(論理デバイスと呼ぶ)を形成する場合、論理デバイス上の所定サイズ(たとえば42MB)の記憶領域をページとして扱ってよい。その場合、ページ管理テーブル200のDEV#(202)とAddr(203)には、論理デバイスの識別番号と、論理デバイス内のアドレスが格納されるとよい。
図5にプール管理情報600の例を示す。プール管理情報600は、各プールに属する仮想ボリュームの情報と、重複排除処理に関する情報を格納するためのテーブルである。プールが複数存在する場合、ストレージ装置1は各仮想ボリュームを、いずれか1つのプールに所属させる。ストレージ装置1は、仮想ボリュームの仮想ページに物理ページを割り当てる際、仮想ボリュームが属しているプール内の未使用物理ページを選択して、仮想ページに物理ページを割り当てる。
プール管理情報600の各レコードには、プール番号(601)、仮想ボリューム#(605)、最終書き込み位置(604)、累積重複排除対象チャンク数(602)、メタデータ削除チャンク数(603)の情報が格納される。プール番号(601)は、プール番号が格納される。仮想ボリューム#(605)には、プールに属する仮想ボリュームの識別番号(仮想ボリューム番号と呼ぶ)が格納される。プールに属する仮想ボリュームが複数存在する場合には、仮想ボリューム#(605)には複数の仮想ボリューム番号が格納される。
最終書き込み位置(604)には、最後に圧縮チャンクが書き込まれた追書きページの、追書きページ番号が格納される。ストレージコントローラ10が追書きページに圧縮チャンクを書き込む際、最終書き込み位置(604)を参照することで、最後に書き込みが行われた追書きページを特定する。
累積重複排除対象チャンク数(602)、メタデータ削除チャンク数(603)は重複排除処理に用いられる情報で、詳細は後述する。
図6は、仮想ボリューム管理テーブル300の例を示している。仮想ボリューム管理テーブル300もキャッシュメモリ14に格納されている。仮想ボリューム管理テーブル300の各レコードには、仮想ボリューム内の仮想ページについての情報が格納される。具体的には各レコードには、仮想ページ#(301)、シーケンシャルWR数(302)、ランダムWR数(303)、最終更新時刻(304)、ページ種別(305)、ページ#(306)、プール#(307)、メタデータ削減チャンク数(308)の情報が格納される。
仮想ページ#(101)には、仮想ページの仮想ページ番号が格納される。一方ページ#(306)には、仮想ページに割り当てられた物理ページのページ#が格納される。プール#(307)は、仮想ページに割り当てられた物理ページが属するプールのプール番号である。
シーケンシャルWR数(302)とランダムWR数(303)には、仮想ページに対してホスト2から受け付けたライト要求の数が格納される。具体的には、シーケンシャルWR数(302)には、シーケンシャルライト要求の数が、ランダムWR数(303)にはランダムライト要求の数が格納される。
なお、ホスト2から受け付けたライト要求が、シーケンシャルライト要求であるかランダムライト要求であるかを判別する方法には、任意の方法が用いられて良い。たとえばストレージ装置1が、ある仮想ページに対して複数のライト要求を受け付けた時、各ライト要求で指定されているアドレス(LBA)が連続している場合、それらのライト要求はシーケンシャルライト要求であると判定するとよい。逆にそうでないライト要求は、ランダムライト要求であると判断されるとよい。
最終更新時刻(304)には、最後に仮想ページに対してライト要求を受け付けた時刻が格納される。ストレージ装置1はある仮想ページに対してライト要求を受け付けるたびに、その仮想ページの最終更新時刻(304)にライト要求を受け付けた時刻を格納する。
ページ種別(305)には、1または0が格納される。初期状態では、全仮想ページのページ種別(305)は1に設定されている。
ページ種別(305)に0が格納されている場合、仮想ページに対して書き込まれたデータは圧縮されて、追書き空間に移動されたことを表す。この場合には、ページ#(306)とプール#(307)には無効値(nullと呼ぶ。具体的には“−1”などの、ページ#やプール#に用いられない値である)が格納される。また移動されたデータ(圧縮チャンク)の格納場所は、後述するLP変換テーブル500等に記録される。
一方ページ種別(305)に1が格納されている場合、仮想ページに対して書き込まれたデータはまだ追書き空間に移動されていないか、あるいはその仮想ページに対してまだホスト2からの書き込み要求が発生していないことを表す。ページ種別(305)が1で、ページ#(306)とプール#(307)に有効な値(nullでない値)が格納されている場合、その仮想ページに対して物理ページが割り当てられており、その物理ページにホスト2からのライトデータが格納されていることを示す。逆にページ種別(305)が1で、ページ#(306)とプール#(307)がnullの場合、その仮想ページに対してまだホスト2からの書き込み要求が発生しておらず、物理ページが割り当てられていないことを表す。
メタデータ削減チャンク数(308)は、重複排除処理に関係する情報であり、詳細は後述する。
なお、仮想ボリューム管理テーブル300は仮想ボリューム毎に作成されるため、仮想ボリュームが複数存在する場合、仮想ボリューム管理テーブル300は複数存在する。また仮想ボリュームが複数存在する場合、仮想ボリューム管理テーブル300の各レコードには、上で説明した仮想ページ#(301)等の情報に加えて、仮想ボリュームを特定するための情報(たとえば仮想ボリューム番号)が含まれてもよい。
図7は、追書き空間マッピングテーブル350の例を示している。追書き空間マッピングテーブル350は、追書き空間にマッピングされる物理ページを管理するための管理情報である。追書き空間はプールごとに設けられるので、追書き空間マッピングテーブル350もプールごとに存在する。各行の追書きページ#(351)には、追書きページ番号が昇順に格納されている。追書き空間マッピングテーブル350の各レコードは、追書きページ#(351)で特定される追書きページに、ページ#(352)とプール#(353)で特定されるページが割り当てられていることを表している。追書きページにページが割り当てられていない場合、その追書きページのページ#(352)とプール#(353)にはnullが格納される。
ページ内最終書き込み位置(354)は、追書きページ内のブロックのうち、最後に圧縮チャンクが書き込まれたブロックの相対アドレスが格納される。相対アドレスとは具体的には、ページ内の先頭ブロックのアドレスを0と定めた時の、ブロックのアドレスである。図7の例では、追書きページ#(351)が“2”のレコードのページ内最終書き込み位置(354)は“0x05”であるので、この追書きページ#が“2”の追書きページに割り当てられているページには、ページ先頭から6番目のブロックまで圧縮チャンクが書き込まれていることを表している。ストレージ装置1は追書き空間に圧縮チャンクを追記する際に、このページ内最終書き込み位置(354)とプール管理情報600の最終書き込み位置(604)とを参照することで、圧縮チャンクを書き込むべき位置を特定する。
続いて論理物理変換テーブル500について説明する。論理物理変換テーブル500は、上書き空間上のチャンクが圧縮されて追書き空間に移動された場合、各チャンクの移動先を管理するためのテーブルである。図8に論理物理変換テーブル500の例を示す。論理物理変換テーブル500はLP変換テーブル500と表記されることもある。
LP変換テーブル500のレコードは、仮想ボリューム上のチャンクと圧縮チャンクの記録位置との対応関係(マッピング)についての情報を表す。各レコードは、レコードのLA(501)で特定される8KBの領域(チャンク)が圧縮された後、PA(503)で特定されるアドレスから始まる、長さがLength(504)の領域に格納されたことを表す。FPK上位32bit(502)、FPMQ登録(505)については、重複排除処理の概要を述べた後、説明する。
先に述べたとおり、本実施例に係るストレージ装置1は重複排除処理を行うので、原則として、同内容の複数のチャンクが追書き空間に格納されないように制御される。再び図2を用いて重複排除処理の概略を説明する。仮想ボリュームのVP#2のチャンクA、チャンクBのそれぞれが、圧縮チャンクa、圧縮チャンクbとして追書き空間上に格納されている状態にあるとき、ストレージ装置1がVP#3のチャンクを追書き空間に移動する処理を開始した場合を想定する。もしチャンクDの内容がチャンクBと同一だった場合、チャンクDの圧縮チャンクは追書き空間に書き込まれない。代わりにストレージ装置1は、LP変換テーブル500のチャンクBの情報を格納しているレコードのPA(503)と同一の値を、LP変換テーブル500のチャンクDの情報を格納しているレコードのPA(503)に格納する。
また、ストレージ装置1が重複排除処理を行う時、チャンクに所定の演算(たとえばハッシュ関数を用いた演算等)を施すことで、値を生成する。本実施例では、この生成された値をFPK(FingerPrint Key)と呼ぶ。本実施例では、FKPは64bitのサイズの情報である。ただしFKPは64bit以外のサイズであってもよい。
ストレージ装置1は、チャンクから生成されるFPKとチャンクのLAの対応関係を管理情報に記録する。この管理情報はFingerPrint Match Queue(以下では“FPMQ”と呼ばれる)と呼ぶ。図9にFPMQ400の例を示す。FPMQ400は、FPK(401)とLA(402)のカラムを有するテーブルで、LA(402)から始まる8KBの領域(チャンク)から生成されたFPKが、FPK(401)に格納される。FPMQ400に格納される各行(レコード)は、FPK(401)の昇順にソートされている。以下では、FPMQ400のレコード、つまりFPK(401)とLA(402)のセットのことを、「チャンクのメタデータ」(あるいは単に「メタデータ」)と呼ぶことがある。
FPMQ400はプールごとに設けられる。ストレージ装置1は、たとえばプール#nに属する仮想ボリューム(上書き空間)のチャンクを追書き空間に移動する時(仮にこのチャンクを“チャンクA”と呼ぶ)、プール#n用のFPMQ400を参照する事で、チャンクAと同一のチャンク(圧縮チャンク)が既に追書き空間に存在するか判定する。チャンクAのFPKと同一のFPKが、プール#n用のFPMQ400に存在しない場合、チャンクAと同一のチャンク(圧縮チャンク)はプール#n用の追書き空間に存在しないと判定できる。本実施例に係るストレージ装置1では、重複排除の範囲はプールである。そのためチャンクAと同一のチャンク(圧縮チャンク)がプール#nにはないが、プール#n以外のプールに存在した場合、チャンクA(の圧縮チャンク)はプール#nに書き込まれる。
また、FPMQ400内の情報の検索を効率的に行えるようにするために、ストレージ装置1はFPMQ400内のいくつかのレコードが格納されているアドレス(キャッシュメモリ14上アドレス)を記録した管理情報を有する。この管理情報は、FingerPrint Table Directoryと呼ばれる。また以下ではこれを、“FPTD”と呼ぶこともある。
図9にFPTD450の例を示す。FPTD450もFPMQ400と同様に、プールごとに設けられる。FPMQ格納アドレス(452)には、FPMQ400のレコードのうち、FPK401に格納されているFPKの上位32bitが、FPK先頭32bit(451)と等しいレコードの中で、FPK401が最も小さいレコードが格納されているアドレス(キャッシュメモリ14上アドレス)が格納される。
たとえばFPMQ400内で、FPK401の上位32bitが“0x00000001”であるレコードのうち、値が最小のレコードのFPK401が“0x0000000100000001”だった場合を想定する。この時FPK401が“0x0000000100000001”のレコードが格納されているアドレスが“ADR2”だった場合には、FPTD450には、FPK先頭32bit(451)が“0x00000001”、FPMQ格納アドレス452が“ADR2”のレコードが記録される。
後述する重複排除プログラム1000では、チャンクのFPKを算出してから、そのFPKと同じ値がFPMQ400のFPK(401)に格納されているか判定する処理が行われる。FPMQ400に格納されているレコード数が非常に多い場合、検索に時間がかかるため、FPTD450が用いられる。
たとえば、“0x0000000100000001”の格納されているレコードを検索する場合、重複排除プログラム1000はFPTD450を参照することで、FPK先頭32bit(451)が“0x00000001”のFPMQ格納アドレス(452)が“ADR2”であることを認識する。続いて重複排除プログラム1000は、FPMQ400内のレコードのうち、アドレス“ADR2”(これはキャッシュメモリ14上のアドレスである)のレコードから順に、“0x0000000100000001”の格納されているレコードを探索する。なお、FPTD450は、FPMQ400内の情報の検索速度を向上させるための情報であるから、FPTD450は必須の情報ではない。
FPMQ400には、チャンクごとに、チャンクのメタデータが格納される。FPKを生成したチャンクが多いと、FPMQ400のサイズが増大し、キャッシュメモリ14の記憶領域を多く消費することになる。キャッシュメモリ14の記憶領域を過剰に消費することを避けるために、本実施例に係るストレージ装置1は、所定の条件に該当するチャンクについては、FPMQ400にチャンクのメタデータを格納しない制御を行う。この制御の詳細は後述する。
図8のFPK上位32bit(502)とFPMQ登録(505)について説明する。LP変換テーブル500のFPK上位32bit(502)には、チャンクのFPKの上位32ビットが格納される。FPMQ登録(505)は、チャンクのメタデータがFPMQ400に登録されているかいないかを表す情報である。ストレージ装置1がLA(501)で特定されるチャンクのメタデータをFPMQ400に登録した場合、FPMQ登録(505)に“1”が記録され、そうでない場合にはFPMQ登録(505)に“0”が記録される。また、チャンクから生成されたFPK(及びそのチャンクのLA)をFPMQ400に登録した後、FPMQ400からFPK及びそのチャンクのLAを削除することもある。その場合にもストレージ装置1はFPMQ登録(505)に“0”を記録する。
ストレージ装置1は、FPMQ400にチャンクのメタデータを登録または削除した回数を、プールごとに計数し、プール管理情報600に記憶している。再び図5を参照しながら、プール管理情報600の累積重複排除対象チャンク数(602)とメタデータ削除チャンク数(603)について説明する。
累積重複排除対象チャンク数(602)は、FPMQ400にチャンクのメタデータ(チャンクのLA及びFPK)を登録した回数が記録される。一方メタデータ削除チャンク数(603)は、FPMQ400からチャンクのメタデータを削除した(または登録しなかった)回数が記録される。なお、ストレージ装置1はこれらの回数をプールごとに管理している。そのため、プール番号がnのプール内のチャンクについて、メタデータをFPMQ400に登録すると、ストレージ装置1はプール番号(601)がnの行(レコード)の累積重複排除対象チャンク数(602)に1を加算する。またプール番号がnのプール内のチャンクについて、メタデータをFPMQ400から削除した時は、ストレージ装置1はプール番号(601)がnの行(レコード)のメタデータ削除チャンク数(603)から1を減算する。
(4)処理の流れ
続いて、本実施例に係るストレージ装置1が実施する処理の流れの説明を行う。図10に示されているように、本実施例に係るストレージ装置1のローカルメモリ16には少なくとも、I/Oプログラム100、バッファ更新プログラム150、重複排除プログラム1000が格納されており、CPU11がこれらのプログラムを実行する。またローカルメモリ16には、稼働情報300’、バッファ700が設けられる。バッファ700は、CPU11が圧縮処理または伸長処理を行う時に使用するメモリ領域である。
稼働情報300’は、仮想ボリューム管理テーブル300に格納される情報のうち、一部の情報が格納された情報である。具体的には稼働情報300’は、仮想ボリューム管理テーブル300の各レコードのうち、仮想ページ#(301)、シーケンシャルWR数(302)、ランダムWR数(303)、最終更新時刻(304)のみを有する。そのため、本明細書では稼働情報300’の図示は略す。
まず、I/Oプログラム100が実行する処理の流れを説明する。なお、以下で説明される各図において、参照番号の前に付されているアルファベットの“S”は、「ステップ」を意味する。
ストレージ装置1がホスト2からI/O要求を受領すると、I/Oプログラム100の実行が開始される。図11では、ホスト2からのリード要求をストレージ装置1が受領した時に、I/Oプログラム100が実行する処理の流れを説明する。なお、図11では、リード要求で指定された領域のデータがキャッシュメモリ14に存在しなかった場合(キャッシュミスのケース)の例を説明する。
ステップ11:I/Oプログラム100は、ホスト2からリード要求を受領すると、リード要求に含まれている、リード先のアドレス(LBA)を、仮想ページ番号に変換する。以下ではリード先の領域の仮想ページ番号がpであった場合の例を説明する。また以下では、リード要求で指定されているリード先の領域が、複数の仮想ページに跨っていない場合の例を説明する。
ステップ12:I/Oプログラム100は仮想ボリューム管理テーブル300を参照し、ステップ11で求められた仮想ページ番号(p)のページ種別(305)が“1”か判定する。ページ種別(305)が“1”の場合(ステップ12:Yes)、次にステップ13が行われ、そうでない場合には(ステップ12:No)、次にステップ15が行われる。
ステップ13:I/Oプログラム100は仮想ボリューム管理テーブル300を参照し、仮想ページ(VP#p)に割り当てられている物理ページのページ番号(306)を特定する。さらにI/Oプログラム100はページ管理テーブル200を参照することで、その物理ページの存在する記憶デバイス20のDEV#(202)、Addr(203)を特定する。
ステップ14:I/Oプログラム100は、ステップ13で特定された記憶デバイス20からデータを読み出し、ホスト2に読み出されたデータを返送し、処理を終了する。なお、ここで読み出されたデータは、キャッシュメモリ14に格納しておいてもよい。そうすると、後でそのデータに対するリード要求を再び受領した際、I/Oプログラム100は記憶デバイス20にアクセスすることなく、ホスト2にデータを返却できる。
ステップ15:ステップ15が実行される場合、リード要求で指定されている領域のデータは追書き空間に移動されているので、I/Oプログラム100は、リード対象データ(圧縮チャンク)の格納されている、追書き空間上のアドレス(PA)を算出する必要がある。なお、以下では、リード要求で指定されている領域のサイズが1チャンク(8KB)と同じで、かつこの領域がチャンク境界に一致している場合の例を説明する。ステップ15ではチャンクI/Oプログラム100は、リード要求に含まれているリード先のアドレス(LBA)を、LAに変換する。
ステップ16:I/Oプログラム100はLP変換テーブル500を参照し、LA(501)がステップ15で特定されたLAに等しいレコードを特定し、そのレコードのPA(503)及びLength(504)を特定する。さらにI/Oプログラム100は、特定されたPAから追書きページ番号を算出し、そして追書き空間マッピングテーブル350を参照することで、特定された追書きページに割り当てられている物理ページのページ#(352)、プール#(353)を特定する。さらにI/Oプログラム100はページ管理テーブル200を参照することで、その物理ページの存在する記憶デバイス20のDEV#(202)、Addr(203)を特定する。
ステップ17:I/Oプログラム100は、ステップ16で特定された記憶デバイス20からデータ(圧縮チャンク)を読み出し、バッファ700に格納する。さらにI/Oプログラム100は、バッファ700に格納された圧縮チャンクを伸長する。そしてI/Oプログラム100は、伸長されたデータをホスト2に返却し、処理を終了する。なお、ここで読み出されたデータは、キャッシュメモリ14に格納しておいてもよい。
図12では、ホスト2からライト要求が発行された時に、I/Oプログラム100が実行する処理の流れを説明する。
ステップ101:I/Oプログラム100は、ホスト2からライト要求を受領すると、ライト要求でライト対象となっているデータを受領するために、キャッシュメモリ14上の領域を確保する。そしてI/Oプログラム100は、確保された領域にライト対象のデータを格納する。これは公知のストレージ装置でも行われる処理のため、詳細の説明は略す。なおステップ101でI/Oプログラム100は、ライト要求で指定されている、ライト先の領域のアドレス(LBA)を、仮想ページ#に変換する。以下ではライト先の領域の仮想ページ#がpであった場合の例を説明する。
ステップ102:I/Oプログラム100は、ホスト2に対し、ライト処理が完了した旨を応答する。
ステップ103:I/Oプログラム100は、稼働情報300’のレコードのうち、仮想ページ#(301)がpのレコードの最終更新時刻(304)に、現在時刻(ステップ103が実行される時点の時刻)を格納する。またI/Oプログラム100は、今回受領したライト要求がシーケンシャルライト要求かランダムライト要求かを判別する。今回受領したライト要求がシーケンシャルライト要求の場合、I/Oプログラム100は稼働情報300’内の、仮想ページ#(301)がpのレコードのシーケンシャルWR数(302)に1を加算する。今回受領したライト要求がランダムライト要求の場合、I/Oプログラム100は稼働情報300’内の、仮想ページ#(301)がpのレコードのランダムWR数(303)に1を加算する。
ステップ103の後、I/Oプログラム100は所定の契機でキャッシュメモリ14に格納したデータを、記憶デバイス20に書き込む(ステップ110)。この処理はデステージと呼ばれる。仮想ページ(仮にこれをVP#pとする)に書き込まれたデータをデステージする時、仮想ページに物理ページが割り当てられている場合、割り当てられた物理ページの存在する記憶デバイス29にデータをデステージする。また物理ページが割り当てられていない場合には、デステージ前に仮想ページに物理ページが割り当てられる。またVP#pのチャンクが追書き空間に移動されている場合、I/Oプログラム100は追書き空間にデータを追記する。この処理の詳細は後述する。
また、ステップ110は、ステップ103の直後に行われる必要はなく、任意の時刻に行われてよい。たとえばストレージ装置1のCPU11の負荷が低い時、或いはキャッシュメモリ14に格納されたデータ量が所定の閾値を超過した時などに実行されるとよい。
ステップ103で稼働情報300’に記録された情報は、バッファ更新プログラム150によって、キャッシュメモリ14上の仮想ボリューム管理テーブル300に反映される。バッファ更新プログラム150は定期的に実行されるプログラムである。
バッファ更新プログラム150の実行が開始されると、バッファ更新プログラム150は稼働情報300’の内容を、仮想ボリューム管理テーブル300に反映する。図13を用いて処理の流れを説明する。
ステップ151:バッファ更新プログラム150は稼働情報300’のレコードを1つ選択する。以下では、このレコードの仮想ページ#(101)の値がpの場合を例にとって説明する。
ステップ152:バッファ更新プログラム150は、ステップ151で選択された稼働情報300’のレコードのシーケンシャルWR数(302)とランダムWR数(303)の値をそれぞれ、仮想ボリューム管理テーブル300のレコードのうち、仮想ページ#(101)がpのレコードのシーケンシャルWR数(302)とランダムWR数(303)に加算する。また、仮想ページ#(101)がpのレコードの最終更新時刻(304)に、選択された稼働情報300’のレコードの最終更新時刻(304)を記録する。
ステップ153:バッファ更新プログラム150は、ローカルメモリ16からステップ151で選択された稼働情報300’のレコードを削除する。
ステップ154:稼働情報300’の全レコードに対してステップ153までの処理が終了した場合(ステップ154:Yes)、処理を終了する。まだローカルメモリ16に稼働情報300’のレコードが残っている場合(ステップ154:No)、バッファ更新プログラム150はステップ151から処理を繰り返す。
本実施例に係るストレージ装置1は、CPU11がキャッシュメモリ14にアクセスする時、内部スイッチ17を経由したアクセスを行うため、アクセス性能(応答時間)が、CPU11がローカルメモリ16にアクセスするときの性能に比べて良くない(長くなる)。そのため本実施例に係るストレージ装置1は、シーケンシャルWR数(302)、ランダムWR数(303)、最終更新時刻(304)の情報をローカルメモリ16上の稼働情報300’に一時記録し、定期的にその内容をキャッシュメモリ14上の仮想ボリューム管理テーブル300に反映する制御を行う。
ただし別の実施形態として、ストレージ装置1がローカルメモリ16のみを有し、仮想ボリューム管理テーブル300がローカルメモリ16上に格納される構成の場合、このような制御を行う必要がなく、I/Oプログラム100はステップ103で直接仮想ボリューム管理テーブル300のシーケンシャルWR数(302)、ランダムWR数(303)、最終更新時刻(304)の更新を行ってもよい。またストレージ装置1がキャッシュメモリ14のみを有し、全ての情報がキャッシュメモリ14上に格納される構成の場合も、上で説明した制御を行う必要がなく、I/Oプログラム100はステップ103で、キャッシュメモリ14上の仮想ボリューム管理テーブル300の更新を行ってもよい。
続いて、重複排除プログラム1000の処理について、図14、図15を用いて説明する。重複排除プログラム1000は、ホスト2から上書き空間に書き込まれたデータ(このデータは一旦上書き空間に割り当てられた物理ページに格納される)を、追書き空間に割り当てられたページに移動する処理を行うプログラムである。先に述べたとおり、追書き空間に割り当てられたページにデータ(チャンク)が移動される時、チャンクは圧縮される。そして重複排除処理が行われることもある。
ステップ1010:重複排除プログラム1000は、仮想ボリューム管理テーブル300を参照し、追書き空間にデータを移動する仮想ページを選択する。仮想ページの選択基準は任意で良い。一例として、ページ種別(305)が“1”の仮想ページのうち、現在時刻と最終更新時刻(304)の差が所定の閾値以上で、かつ最終更新時刻(304)が最も古いものが選ばれるとよい。追書き空間に格納されるデータ(チャンク)は圧縮されているため、アクセス時の応答時間が長くなる。そのため、アクセス頻度の高いデータよりも、アクセス頻度の低いデータが追書き空間に配置される方が好ましいからである。また重複排除プログラム1000は、変数Dを用意し、Dを初期化する(0を代入する)。
ステップ1020:重複排除プログラム1000は、ステップ1010で選択された仮想ページのデータを、記憶デバイス20からキャッシュメモリ14上に読み出す。もし既に仮想ページのデータがキャッシュメモリ14上に存在する場合には、このステップ1020は実行される必要がない。
ステップ1030:重複排除プログラム1000は、ステップ1020でキャッシュメモリ上に読み出されたデータの中から、チャンクを選択する。チャンクの選択方法は任意である。たとえばLAが小さいチャンクから順に選択されてもよい。
ステップ1040:重複排除プログラム1000は、ステップ1030(または後述するステップ1080)で選択されたチャンクを、バッファ700に転送する。
ステップ1050:重複排除プログラム1000は、バッファ700に転送されたデータからFPKを算出する。
ステップ1060:重複排除プログラム1000は、バッファ700に転送されたデータを圧縮することで、圧縮チャンクを生成する。同時に重複排除プログラム1000は、このチャンクの圧縮率を求める。圧縮率の定義は上で述べたとおりである。ここで生成された圧縮チャンクは、一旦バッファ700に保存される。
ステップ1070:このステップで重複排除プログラム1000は、圧縮チャンクを追書き空間に格納する。また、必要に応じて重複排除処理も行われる。この処理の詳細は後述する。
ステップ1080:重複排除プログラム1000は、ステップ1020でキャッシュメモリ上に読み出されたデータの中から、次のチャンク(ステップ1070の処理がまだ行われてないチャンク)を選択する。
ステップ1090:もしステップ1080で、次のチャンクが選択できなかった場合、つまりすべてのチャンクについてステップ1070の処理が行われた場合(ステップ1090:Yes)、次にステップ1100が行われる。ステップ1080で、次のチャンクが選択できた場合(ステップ1090:No)、重複排除プログラム1000は再びステップ1040からの処理を行う。
ステップ1100:重複排除プログラム1000は、上書き空間のデータを破棄する。具体的には重複排除プログラム1000は、ステップ1010で選択された仮想ページに割り当てられているページが、仮想ページに割り当てられていない状態になるよう、仮想ボリューム管理テーブル300の内容を更新する(この仮想ページのページ種別(305)は“0”に、そしてページ#(306)とプール#(307)には“null”が格納される)。また重複排除プログラム1000は、割り当てられていた物理ページを未使用の状態にするために、この物理ページについて、ページ管理テーブル200のレコードのうち、割り当てられていた物理ページのuse(204)の値を“0”に更新する。
ステップ1110:ステップ1070では原則として、重複排除プログラム1000はチャンクのメタデータをFPMQ400に登録する。ただしチャンクが所定の条件に該当する場合、チャンクのメタデータはFPMQ400に登録されない。重複排除プログラム1000は、変数Dに、メタデータがFPMQ400に登録されなかったチャンクの数を保持している。ステップ1110で重複排除プログラム1000は、仮想ボリューム管理テーブル300のメタデータ削減チャンク数(308)にDの値を加算し、処理を終了する。
続いて、ステップ1070で行われる処理の詳細を、図15を参照しながら説明する。
ステップ6010:重複排除プログラム1000はステップ1060で求められた圧縮率が、所定の閾値より大きいか否か判定する。圧縮率が所定の閾値以下の場合(ステップ6010:No)、次にステップ6020が行われる。圧縮率が所定の閾値より大きい場合、次にステップ6210が行われる。
ステップ6020:重複排除プログラム1000は、ステップ1040で求められたFPKと同じFPKが、FPMQ400に格納されているか探索する。先に述べたとおり、重複排除プログラム1000はFPTD450とFPMQ400を参照することで、ステップ1040で求められたFPKと同じFPKの格納されている、FPMQ400のレコードを探索する。
ステップ6030:もし、ステップ1040で求められたFPKと同じFPKが、FPMQ400に格納されている場合(ステップ6030:Yes)、重複排除プログラム1000は次にステップ6040を行う。ステップ1040で求められたFPKと同じFPKが、FPMQ400に格納されていない場合(ステップ6030:No)、次にステップ6110が行われる。
ステップ6040:重複排除プログラム1000は、FPMQ400、LP変換テーブル500、追書き空間マッピングテーブル350、ページ管理テーブル200を参照することで、ステップ1040で求められたFPKと同じFPKを持つチャンク(圧縮チャンク)を記憶デバイス20から読み出す。
具体的には重複排除プログラム1000は、まずFPMQ400とLP変換テーブル500を参照することで、ステップ1040で求められたFPKと同じFPKを持つチャンク(圧縮チャンク)の格納されているPA及びその長さを特定する。以下、このチャンクを“重複候補チャンク”と呼び、重複候補チャンクのPAを“PA1”と呼ぶ。続いて重複排除プログラム1000は追書き空間マッピングテーブル350を参照することで、重複候補チャンクが格納されているページ(物理ページ)のページ番号を特定し、さらにページ管理テーブル200を参照することで、重複候補チャンクが格納されているページの存在する記憶デバイス及びアドレスを特定する。これはI/Oプログラム100が行うステップ16と同様の処理である。そして重複排除プログラム1000は特定された記憶デバイス20から、重複候補チャンクを読み出す。
ステップ6050:重複排除プログラム1000は、ステップ6040で読み出されたチャンク(圧縮チャンク)とステップ1050で圧縮されたチャンクの内容を比較し、両者が同一か否か判定する。比較の際、両者はいずれも圧縮された状態にあるが、重複排除プログラム1000は圧縮されたチャンク同士をバイト単位で比較する。ただし別の実施形態として、重複排除プログラム1000は圧縮されたチャンクを一旦伸長し、伸長されたデータの比較を行ってもよい。比較の結果、両者が一致している場合(ステップ6050:Yes)、次にステップ6060が行われる。両者が異なる場合(ステップ6050:No)、次にステップ6110が行われる。
ステップ6060:重複排除プログラム1000は、FPMQ400にチャンクのFPKとチャンクのLAを登録する。また重複排除プログラム1000は、LP変換テーブル500のレコードのうち、LA(501)が処理対象チャンクのLAに一致するレコードのFPMQ登録(505)に“1”を格納する。
ステップ6070:重複排除プログラム1000は、プール管理情報600の累積重複排除対象チャンク数(602)に1を加算する。
ステップ6080:重複排除プログラム1000は、LP変換テーブル500のレコードのうち、LA(501)が処理対象チャンクのLAに一致するレコードのPA(503)に、重複候補チャンクのPA(つまりPA1)を格納し、Length(504)に重複候補チャンクの長さを格納する。この場合、追書き空間への圧縮チャンク格納は行われない。その後重複排除プログラム1000は、ステップ1080以降の処理を行う。
ステップ6110:このステップは、ステップ6030の判定が否定的だった場合またはステップ6050の判定が否定的だった場合、つまり対象チャンクと同一のチャンクが追書き空間に格納されていない場合に行われる。ステップ6110で重複排除プログラム1000は、FPMQ400にチャンクのメタデータを登録するか否か判定する。
具体的には、重複排除プログラム1000は、FPMQ400の合計サイズが所定の規定値を超過している場合、かつ処理対象チャンクの属する仮想ページのランダムライト比率が所定値以上の場合(ステップ6110:No)、FPMQ400にチャンクのメタデータを登録しないと決定し、次にステップ6210が行われる。一方、FPMQ400の合計サイズが所定の規定値を超過していない場合、または処理対象チャンクの属する仮想ページのランダムライト比率が所定値未満の場合(ステップ6110:Yes)、重複排除プログラム1000はFPMQ400にチャンクのメタデータを登録すると決定し、次にステップ6120が行われる。
なお、ここでの「所定の規定値」は、キャッシュメモリ14の容量に基づいて定められるとよい。たとえばFPMQ400の合計サイズが、キャッシュメモリ14の容量のx%を超過している場合(かつ仮想ページのランダムライト比率が所定値以上の場合)に、FPMQ400にチャンクのメタデータを登録しないようにするとよい。FPMQ400の合計サイズが過剰に大きくなり、キャッシュメモリ14の消費量が増加すると、ホスト2からのライトデータなどをキャッシュメモリ14に格納できる量が減少し、ストレージ装置1の性能に悪影響を及ぼすからである。
また、ここでのランダムライト比率とは、仮想ボリューム管理テーブル300に格納されているランダムWR数(303)とシーケンシャルWR数(302)を用いて算出される値である。判定対象のチャンクが属する仮想ページのランダムWR数(303)がr、シーケンシャルWR数(302)がsの場合、ランダムライト比率は以下の式で求められる。
r÷(r+s)
ステップ6120,ステップ6130:これらのステップはステップ6060,ステップ6070と同じである。
ステップ6140:重複排除プログラム1000は、バッファ700に一時保存されている圧縮チャンクを追書き空間に書き込み、バッファ700内の圧縮チャンクを削除する。先に述べたとおり、重複排除プログラム1000は追書き空間に圧縮チャンクを書き込むとき、追書き空間に追記する。ここで圧縮チャンクを追書き空間に追記する処理の流れを、図16を用いて説明する。
まず、重複排除プログラム1000は、圧縮チャンクを追記すべき追書き空間上のアドレス(PA)を決定する(ステップ51)。ストレージ装置1は、プール管理情報600と追書き空間マッピングテーブル350に、追書き空間の最終書き込み位置の情報を保持している。重複排除プログラム1000は、プール管理情報600の最終書き込み位置(604)を参照することで、最後に書き込みが行われた追書きページの追書きページ#を特定する。以下、これをAP1と表記する。続いて重複排除プログラム1000は追書き空間マッピングテーブル350を参照することで、追書きページ#(351)がAP1のレコードのページ内最終書き込み位置(354)を特定する。以下ではこれをRA1と表記する。そして重複排除プログラム1000は、“AP1×ページのサイズ(42MB)÷512+RA1+1”を算出することで、圧縮チャンクを書き込むべき追書き空間上のアドレス(PA)を求める。以下では、圧縮チャンク書き込み先のPAが“PA2”と決定され、また圧縮チャンクの長さが“L2”であった場合について説明する。
続いて重複排除プログラム1000は、ステップ51で決定されたPA(PA2)を含む追書きページに物理ページが割り当てられているか判定する(ステップ52)。このために重複排除プログラム1000は、PA2をページのサイズ(42MB)で割ることで、PA2を含む追書きページの追書きページ#を求める(以下、ここで求められた追書きページ#は、“AP2”と表記する)。さらに重複排除プログラム1000は追書き空間マッピングテーブル350を参照することで、追書きページ#(351)がAP2のレコードのページ#(352)に有効な値(null以外の値)が格納されているか判定する。ページ#(352)に有効な値が格納されている場合、PA2を含む追書きページには物理ページが割り当てられている。
PA2を含む追書きページに物理ページが割り当てられていない場合(ステップ52:No)、重複排除プログラム1000は、追書きページに物理ページを割り当てる(ステップ53)。具体的には重複排除プログラム1000は、ページ管理テーブル200から未使用の物理ページを1つ選択し、そのページ#及びそのページの属するプールのプール#をそれぞれ、追書きページ#(351)がAP2のレコードのページ#(352)とプール#(353)に格納する。また重複排除プログラム1000は、ページ管理テーブル200から選択された物理ページのuse(204)に“1”を格納する。逆に、PA2に物理ページが割り当てられている場合(ステップ52:Yes)は、ステップ53は行われない。
ステップ54では、重複排除プログラム1000は追書き空間マッピングテーブル350とページ管理テーブル200を参照することで、圧縮チャンクの書き込み先の記憶デバイス20のアドレスを算出する。続いて重複排除プログラム1000は、ステップ54で算出されたアドレスに、圧縮チャンクを書き込む(ステップ55)。ステップ56で重複排除プログラム1000は、今回圧縮チャンクを書き込んだ追書きページの追書きページ#をプール管理情報600の最終書き込み位置(604)に代入し、また最後に書き込みを行った追書きページ内の相対アドレスを最終書き込み位置(604)に代入し、処理を終了する。
以上が、ステップ6140で行われる処理である。再び図15の説明に戻る。
ステップ6150:重複排除プログラム1000は、LP変換テーブル500のレコードのうち、LA(501)が処理対象チャンクのLAに一致するレコードのPA(503)に、圧縮チャンクのPA(つまりPA2)を格納し、Length(504)に圧縮チャンクの長さ(L2)を格納する。その後重複排除プログラム1000は、ステップ1080以降の処理を行う。
ステップ6210:重複排除プログラム1000は、変数Dに1を加算する。またステップ6210が実行される場合、重複排除プログラム1000は図15の処理で処理対象となっているチャンク(圧縮チャンク)について、重複排除判定を行わず、またFPMQ400にチャンクのメタデータを登録しない。
ステップ6220:重複排除プログラム1000は、プール管理情報600のメタデータ削除チャンク数(603)に1を加算する。その後重複排除プログラム1000は、ステップ6140を行う。
最後に、ステップ110でI/Oプログラム100が実行するデステージ処理の流れを、図17を用いて説明する。
ステップ5010:I/Oプログラム100は、キャッシュメモリ14に格納された各データの中から、処理対象のデータを選択する。データの選択方法は、様々な方法がありえる。一例として、ホスト2からライトされた時刻が最も古いデータを選択する方法がある。その場合、ストレージコントローラ10は、キャッシュメモリ14に格納された各データについて、ホスト2からライトされた時刻を記憶しておく必要がある。以下では、ここで1チャンク分のデータが選択された場合の例を説明する。ただし別の実施形態として、複数のチャンク、たとえば仮想ボリューム上で連続している複数のチャンクが選択されてもよい。
ステップ5020:I/Oプログラム100は、ステップ5010で選択されたデータの書き込み先仮想ページを特定する。以下では、ステップ5020でVP#pが特定された場合の例を説明する。そしてI/Oプログラム100は仮想ボリューム管理テーブル300を参照し、仮想ページ#(301)が“p”のレコードについて、ページ種別(305)が“0”か“1”かを判定する。ページ種別(305)が“1”の場合(ステップ5020:No)、データの書き込み先は上書き空間であるので、次にステップ5110が実行される。ページ種別(305)が“0”の場合(ステップ5020:No)、次にステップ5030が行われる。
ステップ5030:このステップが実行される場合、VP#pに書き込まれたデータは追書き空間に移動されていることを意味する。この場合I/Oプログラム100は、追書き空間に移動されているVP#pのデータを、再び上書き空間に戻すか否かを判定する。
たとえばVP#p内のほぼ全てのチャンクが更新された場合、I/Oプログラム100は、追書き空間に移動されているVP#pのデータを再び上書き空間に戻すと決定する。この場合、VP#pが今後も頻繁に更新される可能性があるため、デステージのたびにデータを圧縮して格納すると、ライト処理のオーバヘッドが大きくなるためである。ただしこの判定方法は一例であり、これ以外の判定方法によって、追書き空間に移動されているVP#pのデータを、再び上書き空間に戻すか否かが判定されてもよい。ステップ5030の判定が否定的な場合、次にステップ5040が行われ、ステップ5030の判定が肯定的な場合、次にステップ5210が行われる。
ステップ5040:I/Oプログラム100は、処理対象データを圧縮する。これはステップ1040〜ステップ1060で行われる処理と同じである。ステップ1040〜ステップ1060と同様に、I/Oプログラム100はFPKの算出も行う。
ステップ5050:I/Oプログラム100は、処理対象データ(圧縮チャンク)を追書き空間に格納する。この処理はステップ1070と同様な処理である。つまり図15のステップ6010〜ステップ6150の処理が行われる。図15で説明した処理との違いは、I/Oプログラム100はステップ6210で、変数Dに1を加算する代わりに、仮想ボリューム管理テーブル300のメタデータ削減チャンク数(308)に1を加算する。それ以外の点は、先に説明した処理と同じ処理が行われる。ステップ5050の後、キャッシュメモリ14から処理対象データを削除し、またバッファ700から処理対象データ及びその圧縮チャンクを削除し、デステージ処理は終了する。
ステップ5210:追書き空間に移動されているVP#pのデータを、再び上書き空間に戻すと決定された場合、I/Oプログラム100は、追書き空間に移動されているVP#pのデータを全て、記憶デバイス20から読み出し、データを伸長し、一旦キャッシュメモリ14に格納する。これは図11を用いて説明した処理と同様の処理が行われればよい。
ステップ5220:I/Oプログラム100は、VP#pに物理ページを割り当てる。具体的には、I/Oプログラム100はページ管理テーブル200から未使用の物理ページを1つ選択し、そのページ#及びそのページの属するプールのプール#をそれぞれ、仮想ボリューム管理テーブル300内の、仮想ページ#(301)がpのレコードのページ#(306)とプール#(307)に格納する。またI/Oプログラム100は、ページ管理テーブル200から選択された物理ページのuse(204)に“1”を格納する。
ステップ5230:I/Oプログラム100は、VP#pに割り当てられた物理ページに、ステップ5210で読み出されたデータを格納する。具体的にはI/Oプログラム100は、図11のステップ13と同様に、ページ管理テーブル200を参照することでVP#pに割り当てられた物理ページの存在する記憶デバイス20のDEV#(202)、Addr(203)を特定する。そしてI/Oプログラム100は、特定された記憶デバイスに、ステップ5210で読み出されたデータを格納する。
ステップ5240:I/Oプログラム100は、VP#pに割り当てられた物理ページに、処理対象データを上書きし、デステージ処理を終了する。
ステップ5110:I/Oプログラム100は、VP#pに物理ページが割り当てられていない場合、物理ページを割り当てる。これはステップ5220と同様の処理である。ただしVP#pに既に物理ページが割り当てられている場合には、物理ページの割り当ては必要ない。
ステップ5120:ステップ5240と同様に、I/Oプログラム100はVP#pに割り当てられた物理ページに、処理対象データを上書きし、デステージ処理を終了する。
なお、ここで説明したデステージ処理は一例であり、上で説明した処理と異なる処理が行われてもよい。たとえば、VP#pのデータが追書き空間に移動されている場合、ステップ5030の判定を行わずに、必ず追書き空間に追記するようにしてもよい。
あるいは、追書き空間から上書き空間にデータを戻す場合、戻すデータの量が少なくなるような制御が行われてもよい。たとえばホスト2からVP#pのページ全体を更新する要求を受け付けた場合、キャッシュメモリ14にはVP#pの1ページ分のデータが格納される。この状態の場合、追書き空間から上書き空間にデータを戻しても、キャッシュメモリ14に格納されたデータをデステージすると、追書き空間から上書き空間に書き戻されたデータは上書きされてしまう。そのため、このような場合には、追書き空間から上書き空間にデータを戻さないようにする方が、効率がよい。
以上述べたように、実施例1に係るストレージ装置1は、ホスト2からのライトデータを圧縮し、さらに重複排除処理を行って、記憶デバイスに格納する。これにより、圧縮のみを行う場合、あるいは重複排除処理のみを行う場合に比べ、記憶領域をより節約することができる。
また実施例1に係るストレージ装置1は、圧縮率が高いチャンク(ステップ6010:Yes)、あるいはランダムライト比率が高い仮想ページに属するチャンク(ステップ6110:Yes)等の、所定条件に該当するチャンクのメタデータをFPMQ400に登録しない。所定条件を満たすチャンクのメタデータがFPMQ400に登録されない理由は、キャッシュメモリ14の消費量を抑制するためである。ストレージ装置1がFPMQ400に全チャンクのメタデータを登録すると、FPMQ400のサイズが過大になる。そのため実施例1に係るストレージ装置1は、FPMQ400に登録するチャンクのメタデータの量を抑制し、FPMQ400がキャッシュメモリ14を過剰に占有することを防いでいる。
また、圧縮率が高いチャンクのメタデータがFPMQ400に登録されない理由は、圧縮率が高いチャンク(つまり圧縮チャンクのサイズが小さい)について重複排除処理が行われても、圧縮率が低いチャンクの重複排除処理が行われる場合に比べて、重複排除処理による記憶領域の節約の効果が小さいためである。
またランダムライト比率が高い仮想ページに属するチャンクのメタデータがFPMQ400に登録されない理由は、ランダムライト比率が高い仮想ページ(チャンク)は、ランダムライト比率が低い(シーケンシャルライト比率が高い)仮想ページに比べて、重複データが存在する可能性が低いという推定に基づく。シーケンシャルライト比率が高い仮想ページ(またはその仮想ページを含む仮想ボリューム)は、例えばデータのバックアップ用途で用いられている可能性が高い。特に複数世代のバックアップデータを仮想ページ(仮想ボリューム)に記憶している場合、同一データが存在する可能性が高いことが期待できる。一方ランダムライト比率が高い仮想ページ(またはその仮想ページを含む仮想ボリューム)は、そのようなデータが含まれていることが期待できないため、本実施例に係るストレージ装置1は、ランダムライト比率が高い仮想ページに属するチャンクのメタデータをFPMQ400に登録しない制御を行っている。ただしこれらの条件は一例であり、チャンクのメタデータをFPMQ400に登録しないチャンクは、別の条件によって選定されてもよい。
続いて実施例2に係るストレージ装置の説明を行う。実施例2に係るストレージ装置1のハードウェア構成は実施例1で説明したものと同じである。また実施例2に係るストレージ装置は、ローカルメモリ16に実施例1で説明したプログラムと同じプログラムを有するとともに、キャッシュメモリ14に実施例1で説明した管理情報と同じ管理情報を有する。
また実施例2に係るストレージ装置1は、実施例1で説明したプログラムに加えて、メタデータ削減プログラム2000を有する。メタデータ削減プログラム2000は、重複排除プログラム1000がFPMQ400に作成したチャンクのメタデータの削除の要否を判定し、必要に応じて一部のメタデータを削除するためのプログラムである。
図18と図19を用いて、メタデータ削減プログラム2000の処理の流れを説明する。メタデータ削減プログラム2000は定期的に実行される。また、実施例2に係るストレージ装置1は、プールごとにメタデータ削減プログラム2000を実行する。以下では、ストレージ装置1が特定の1つのプールに対してメタデータ削減プログラム2000を実行する例を説明する。
ステップ2010:メタデータ削減プログラム2000は、FPMQ400の合計サイズが所定の規定値を超過しているか判定する。この判定は、実施例1で説明した重複排除プログラム1000がステップ6110で行う処理、つまりFPMQ400の合計サイズが所定の規定値を超過しているか判定する処理と同じである。FPMQ400の合計サイズが所定の規定値を超過している場合(ステップ2010:Yes)、次にステップ2020が行われる。FPMQ400の合計サイズが所定の規定値を超過していない場合(ステップ2010:No)、処理は終了する。
ステップ2020:ここでメタデータ削減プログラム2000は変数D1を用意し、D1を初期化する(0を代入する)。またメタデータ削減プログラム2000は、プール管理情報600を参照することで、処理対象のプールに所属する仮想ボリュームを特定する。
さらにメタデータ削減プログラム2000は、仮想ボリューム管理テーブル300を参照し、特定された仮想ボリュームの中から、処理対象となる仮想ページを1つ選択する。具体的にはメタデータ削減プログラム2000は、ページ種別(305)が“0”でステップ2030以降の処理が行われていない仮想ページの中から、最終更新時刻(304)が最も古いものを選択する。ページ種別(305)が“1”の仮想ページは、チャンクが上書き空間に割り当てられている物理ページに存在しており、チャンクのメタデータが作成されていないからである。また最終更新時刻(304)が最も古い仮想ページは、長時間ホスト2から更新されていないことを意味し、そのような仮想ページ内のチャンクのうち、他のチャンクと重複していないチャンクのメタデータは優先的に削除されてもよいからである。
ステップ2030:メタデータ削減プログラム2000は、ステップ2020で選択された仮想ページについて、現在時刻と最終更新時刻(304)の差を算出し、この差が所定の閾値を超過しているか判定する。差が所定の閾値以上の場合(つまり所定の閾値以上の間更新されなかった仮想ページである場合)、次にステップ2040が行われる。差が所定の閾値未満の場合(ステップ2020:No)、処理対象のプール内に、所定の閾値以上の間更新されなかった仮想ページがないことを意味する。その場合メタデータ削減プログラム2000は処理を終了する。
ステップ2040:メタデータ削減プログラム2000は、ステップ2020で選択された仮想ページから、ステップ2040以降の処理が行われていないチャンク(のLA)を1つ選択する。チャンクの選択方法は任意である。たとえばLAが小さいチャンクから順に選択されてもよい。なお、以下では、ここで選択されたチャンクのLAが“L”である前提で説明する。
ステップ2050:メタデータ削減プログラム2000は、LP変換テーブル500を参照することで、ステップ2040で選択されたチャンクのFPMQ登録(505)が“1”か“0”か判定する。FPMQ登録(505)が“1”の場合(ステップ2050:Yes)、次にステップ2060が行われる。一方FPMQ登録(505)が“0”の場合(ステップ2050:No)、ステップ2060〜ステップ2090はスキップされる。
ステップ2060:メタデータ削減プログラム2000は、ステップ2040で選択されたチャンク(の圧縮チャンク)を記憶デバイス20から読み出し、圧縮チャンクを伸長することでチャンクを生成し、チャンクのFPKを算出する。ただし別の実施形態として、ストレージ装置1が圧縮チャンクからFPKを生成するように構成されている場合、メタデータ削減プログラム2000は記憶デバイス20から読み出された圧縮チャンクを用いてFPKを生成する。
ステップ2070,ステップ2080:メタデータ削減プログラム2000は、ステップ2060で算出されたFPKと同じFPKが、FPMQ400に格納されているか判定する。この判定はステップ6020と同様だが、ステップ2070では、FPMQ400のレコードのうち、LA(402)が“L”のレコードは判定から除外される。LA(402)が“L”のレコードは、処理対象チャンクのメタデータだからである。ステップ2060で算出されたFPKと同じFPKが、FPMQ400に格納されている場合(ステップ2080:Yes)、ステップ2090はスキップされる。ステップ2060で算出されたFPKと同じFPKがFPMQ400に存在しない場合(ステップ2080:No)、次にステップ2090が行われる。
ステップ2090:メタデータ削減プログラム2000は、FPMQ400から処理対象チャンクのメタデータを削除する。また、メタデータ削減プログラム2000はD1に1を加算する
ステップ2100:すべてのチャンクについてステップ2050〜ステップ2090の処理が完了している場合(ステップ2100:Yes)、次にステップ2110が行われる。まだステップ2050〜ステップ2090の処理が行われていないチャンクが残っている場合(ステップ2100:No)、メタデータ削減プログラム2000は再びステップ2040から処理を行う。
ステップ2110:メタデータ削減プログラム2000は、仮想ボリューム管理テーブル300のメタデータ削減チャンク数(308)に、変数D1の値を加算する。
ステップ2120:メタデータ削減プログラム2000は、プール管理情報600のメタデータ削除チャンク数(603)に、変数D1の値を加算する。
ステップ2130:メタデータ削減プログラム2000は、次に処理対象とする仮想ページがあるか判定する。具体的には、ページ種別(305)が“0”で、まだステップ2120までの処理が行われていない仮想ページが残っているか、判定される。もし次に処理対象とする仮想ページが残っている場合には(ステップ2130:No)、メタデータ削減プログラム2000は再びステップ2010から処理を繰り返す。処理対象となる仮想ページが残っていない場合(ステップ2130:Yes)、メタデータ削減プログラム2000は処理を終了する。
このように、メタデータ削減プログラム2000は、FPMQ400の合計サイズが所定の規定値を超過した場合、長時間更新されていないチャンクのうち、重複チャンクでないチャンクのメタデータをFPMQ400から削除する。これにより、チャンクのメタデータが過剰に増加することを防ぐことができる。
なお、上で説明した実施例2では、メタデータ削減プログラム2000の処理を除き、ストレージ装置1は実施例1で説明した処理と同じ処理を実行する例を説明した。つまり、たとえば実施例2における重複排除プログラム1000も、実施例1で説明した処理(図14、図15の処理)を行う。実施例1において説明したように、重複排除プログラム1000は、チャンクが所定条件を満たす場合(たとえば圧縮率が高い、あるいはランダムライト比率が高い仮想ページに属している)、そのチャンクのメタデータをFPMQ400に登録しない。
ただし、実施例2に係るストレージ装置では、メタデータ削減プログラム2000が行われることにより、必要性の低いチャンクのメタデータがFPMQ400から削除される。そのため、実施例2の変形例として、重複排除プログラム1000が必ずチャンクのメタデータをFPMQ400に登録するように構成されていてもよい。つまり重複排除プログラム1000が、図15のステップ6010の判定、そしてステップ6110の判定を行わず、必ずステップ6060あるいはステップ6120を行うように構成されていてもよい。
続いて実施例3に係るストレージ装置の説明を行う。実施例3に係るストレージ装置1のハードウェア構成は実施例1または2で説明したものと同じである。また実施例3に係るストレージ装置1は、少なくとも実施例2で説明したプログラムと同じプログラムをローカルメモリ16に保持するとともに、キャッシュメモリ14に実施例2で説明した管理情報と同じ管理情報を有する。
また実施例3に係るストレージ装置1は、実施例2で説明したプログラムに加えて、メタデータ再作成プログラム3000を有する。メタデータ再作成プログラム3000は、メタデータ削減プログラム2000によって削除されたチャンクのメタデータを再び作成するためのプログラムである。
図20と図21を用いて、メタデータ再作成プログラム3000の処理の流れを説明する。メタデータ再作成プログラム3000は定期的に実行される。また、実施例3に係るストレージ装置1は、プールごとにメタデータ再作成プログラム3000を実行する。以下では、ストレージ装置1が特定の1つのプール、たとえばプール番号が0のプール(これを「プール#0」と表記する)に対して、メタデータ再作成プログラム3000を実行する例を説明する。
ステップ3010:メタデータ再作成プログラム3000は、プール管理情報600を参照し、プール#0の累積重複排除対象チャンク数(602)が、メタデータ削除チャンク数(603)を超過したか判定する。累積重複排除対象チャンク数(602)が、メタデータ削除チャンク数(603)以下の場合(ステップ3010:No)、メタデータ再作成プログラム3000は処理を終了するが、そうでない場合には次にステップ3020が行われる。
ステップ3020:メタデータ再作成プログラム3000は、プール管理情報600を参照することで、処理対象のプールに所属する仮想ボリュームを特定する。さらにメタデータ再作成プログラム3000は、仮想ボリューム管理テーブル300を参照し、特定された仮想ボリュームの仮想ページの中から、処理対象となる仮想ページを選択する。また変数Pを用意し、Pを初期化する(0を代入する)。
ここでメタデータ再作成プログラム3000は少なくとも、メタデータ削減チャンク数(308)が1以上の仮想ページを選択する。メタデータ削減チャンク数(308)が0の仮想ページには、これまでにチャンクのメタデータが削除されていないことを意味し、そのような仮想ページにはメタデータを再作成すべきチャンクが存在しないからである。以下では、処理対象のプールに属する仮想ページのうち、メタデータ削減チャンク数(308)が1以上の仮想ページのことを、処理候補仮想ページと呼ぶ。
ステップ3030:メタデータ再作成プログラム3000は、LP変換テーブル500を参照し、ステップ3040以降の処理がまだ行われていないチャンクのうち、FPMQ登録(505)が“0”のチャンク(メタデータがFPMQ400に登録されていないチャンク)を1つ選択する。以下、ここで選択されたチャンクを「処理対象チャンク」と呼ぶ。チャンクの選択方法は任意である。たとえばLAが小さいチャンクから順に選択されてもよい。
ステップ3040:ステップ3030で選択されたチャンク(処理対象チャンク)は、実際には圧縮チャンクとして追書き空間に格納されている。メタデータ再作成プログラム3000は、処理対象チャンクの圧縮率を算出する。チャンクのサイズは固定(たとえば8KB)であり、またチャンクの圧縮後のサイズは、LP変換テーブル500のLength(504)に記録されているので、メタデータ再作成プログラム3000は、チャンクのサイズと処理対象チャンクのLength(504)を用いて圧縮率を算出する。算出された圧縮率が、ある閾値よりも小さい場合、次にステップ3050が行われる。一方算出された圧縮率が、ある閾値以上の場合には、ステップ3050〜ステップ3110はスキップされる。なお、この閾値はメタデータを作成するか否かを判定するための閾値であり、実施例1で説明したステップ6010の処理で用いられる閾値と同じ値である。ただし別の実施形態として、ステップ6010で用いられる閾値と異なる値の閾値が用いられるようにしてもよい。
ステップ3050:メタデータ再作成プログラム3000は、処理対象チャンク(の圧縮チャンク)を記憶デバイス20から読み出して、FPKを算出する。この処理はステップ2050と同じである。
ステップ3060:メタデータ再作成プログラム3000は、ステップ3050で算出されたFPKと同じFPKが、FPMQ400に格納されているか判定する。これはステップ6020等と同じ処理である。
ステップ3070:ステップ3060の結果、ステップ3050で算出されたFPKと同じFPKがFPMQ400に格納されている場合、次にステップ3080が行われる。一方、ステップ3050で算出されたFPKと同じFPKがFPMQ400に格納されていない場合、ステップ3080〜ステップ3110はスキップされる。
ステップ3080:メタデータ再作成プログラム3000は、ステップ3050で求められたFPKと同じFPKを持つチャンク(圧縮チャンク)を記憶デバイス20から読み出し、これとステップ3050で読み出されたチャンク(圧縮チャンク)の内容を比較し、両者が同一か否か判定する。この処理はステップ6040と同様の処理である。ステップ6040と同様に、ステップ3080ではメタデータ再作成プログラム3000は、FPMQ400、LP変換テーブル500を参照することで、ステップ3050で求められたFPKと同じFPKを持つチャンク(圧縮チャンク)の格納されているPA及びその長さを特定する。以下、このチャンクを“重複候補チャンク”と呼ぶ。また以下では、重複候補チャンクのPAが“PA1”だった場合の例を説明する。
ステップ3090:ステップ3080の結果、処理対象チャンクと重複候補チャンクの内容が同じ場合(ステップ3090:Yes)、次にステップ3100が行われる。両者が異なる場合(ステップ3090:No)、ステップ3100〜ステップ3110はスキップされる。
ステップ3100:メタデータ再作成プログラム3000は、FPMQ400に、処理対象チャンクのメタデータを登録する。またメタデータ再作成プログラム3000は、LP変換テーブル500のレコードのうち、LA(501)が処理対象チャンクのLAに一致するレコードのFPMQ登録(505)に“1”を格納し、変数Pに1を加算する。
ステップ3110:メタデータ再作成プログラム3000は、LP変換テーブル500のレコードのうち、LA(501)が処理対象チャンクのLAに一致するレコードのPA(503)に、重複候補チャンクのPA(つまりPA1)を格納し、Length(504)に重複候補チャンクの長さを格納する。
ステップ3130:メタデータ再作成プログラム3000は、ページ内の全てのチャンクについて、ステップ3110までの処理が完了したか判定する。ページ内の全てのチャンクについて、ステップ3110までの処理が完了している場合(ステップ3130:Yes)、次にステップ3140が行われる。まだステップ3110までの処理が行われていないチャンクが残っている場合、メタデータ再作成プログラム3000は再びステップ3030を実行する。
ステップ3140:メタデータ再作成プログラム3000は、仮想ボリューム管理テーブル300に記録されている、仮想ページの情報を更新する。具体的には仮想ページの、メタデータ削減チャンク数(308)から、変数Pの値(メタデータが作成されたチャンクの数である)を削減する。
ステップ3160:メタデータ再作成プログラム3000は、プール内に含まれている処理候補仮想ページの中に、まだステップ3140までの処理が完了していない仮想ページがあるかしたか判定する。全ての処理候補仮想ページについてステップ3140までの処理が完了している場合(ステップ3160:Yes)、メタデータ再作成プログラム3000は次にステップ3170を実行し、処理を終了する。まだステップ3140までの処理が行われていない仮想ページが残っている場合、メタデータ再作成プログラム3000は再びステップ3020を実行する。
ステップ3170:メタデータ再作成プログラム3000は、プール管理情報600の、プール#0の情報を更新する。具体的には、プール#0の累積重複排除対象チャンク数(602)が初期化される(0にする)。またプール#0のメタデータ削除チャンク数(603)から、変数Pの値を削減する。これらの処理が完了すると、メタデータ再作成プログラム3000は処理を終了する。
このように、実施例3に係るストレージ装置は、メタデータ削減プログラム2000によって一旦削除されたチャンクのメタデータを再び作成する。実施例2において説明したとおり、実施例2または3に係るストレージ装置は、長時間更新されていないチャンクのうち、重複チャンクでないチャンクのメタデータを削除する。
ただし、メタデータ削除後に、メタデータを削除したチャンクと同内容のチャンクが書き込まれる可能性もある。実施例1(特に図15)で説明した重複排除プログラム1000の処理からわかるとおり、チャンクのメタデータが削除されていると、ホストからそのチャンクと同内容のチャンクが書き込まれたとしても重複排除処理が行われない。そのため、実施例3に係るストレージ装置は、一旦メタデータを削除したチャンクについて、チャンクのメタデータの再作成を行うことで、格納データ量が削減されるようにする。
なお、実施例3では累積重複排除対象チャンク数(602)がメタデータ削除チャンク数(603)を超過した時に、チャンクのメタデータの再作成が行われる例(ステップ3010)を説明した。ただしメタデータの再作成要否の判定方法はこれに限られない。所定の条件を満たした場合に、チャンクのメタデータの再作成が行われるようにしてもよい。たとえば新たに追書き空間に書き込まれたチャンクの量が増加すれば、重複データの存在する可能性は上がると考えることもできる。そのため、累積重複排除対象チャンク数(602)があらかじめ定められた閾値(固定値)を超過したという条件を満たした場合にメタデータの再作成が行われるようにしてもよい。あるいは、メタデータ削減プログラム2000が実行されてから所定時間経過した場合に、チャンクのメタデータの再作成が行われるようにしてもよい。
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。たとえば上では、ストレージ装置がキャッシュメモリとローカルメモリという2種類のメモリを有する例を説明したが、別の実施形態として、ストレージ装置がキャッシュメモリとローカルメモリのうち、いずれか一方のメモリだけを有する構成でも良い。その場合、全ての情報がキャッシュメモリ(またはローカルメモリ)に格納される。
また、ストレージ装置に階層記憶管理(HSM)機能が実装されていてもよい。たとえばHSM機能が、キャッシュメモリと記憶デバイスから成る記憶階層を管理するように構成されていてよい。これにより、FPMQ等の管理情報のサイズが大きくなった場合、HMS機能はたとえばFPMQの一部のレコードを記憶デバイスに移動し、記憶デバイスに移動されたFPMQ(のレコード)に対するアクセスの必要性が発生した時点で、そのレコードを記憶デバイスからキャッシュメモリにリコールするように構成されてもよい。
また、上では、ストレージ装置が使用するいくつかの情報が、ページ管理テーブル200等のテーブル構造で管理される例を説明したが、テーブル構造で情報を管理する態様に限定されるわけではない。ストレージ装置はテーブル以外のデータ構造、例えばリスト構造などを用いて、情報を管理してもよい。
また、上で説明した各実施例では、ストレージ装置が累積重複排除対象チャンク数とメタデータ削除チャンク数を計数・管理する例を説明したが、これらの情報は実施例3に係るストレージ装置が使用する情報である。そのため、実施例1または実施例2に係るストレージ装置は、必ずしも累積重複排除対象チャンク数とメタデータ削除チャンク数を保持しなくともよい。
また、上で説明した実施例では、追書き空間に格納されるデータは圧縮データであったが、追書き空間にチャンクを移動する際に圧縮を行わず、重複排除処理だけが行われてもよい。
また、上で説明した実施例に係る計算機システムでは、ホストとストレージ装置が異なるハードウェアとして存在していたが、計算機システムはこれ以外の構成を採用してもよい。たとえば、ホストに1以上の記憶デバイスを搭載し、ホストのCPUで、上の実施例で説明したプログラムを実行させるようにしてもよい。
1:ストレージ装置, 2:ホスト, 3:SAN, 5:管理ホスト, 10:ストレージコントローラ, 11:CPU, 12ホストI/F, 13:デバイスI/F, 14:キャッシュメモリ, 15:管理用I/F,16:ローカルメモリ, 20:記憶デバイス

Claims (15)

  1. ホストから書き込み要求のあったライトデータを格納するための1以上の記憶デバイスと、ストレージコントローラと、を有するストレージ装置において、
    前記ストレージコントローラは、前記ホストから前記ライトデータを受領すると、前記ライトデータと同一のデータが前記記憶デバイスに格納済みの場合、前記ライトデータを前記記憶デバイスに格納しないように構成されており、
    前記ストレージコントローラはまた、前記ライトデータの特徴量を算出し、前記ライトデータの特徴量と前記ライトデータの格納位置情報の組であるメタデータを管理領域に記録し、前記ライトデータと同一のデータが前記記憶デバイスに格納済みか判定するために、前記メタデータを用いるように構成されており、
    前記ストレージコントローラは、前記ライトデータがあらかじめ定められた条件に該当する場合、前記メタデータを前記管理領域に記録しない、
    ことを特徴とする、ストレージ装置。
  2. 前記ストレージコントローラは、
    前記管理領域に記録された前記メタデータの量が規定値を超過した場合、前記メタデータのうち、前記メタデータに含まれる前記特徴量が他のメタデータと重複しないメタデータを、前記管理領域から削除する、
    ことを特徴とする、請求項1に記載のストレージ装置。
  3. 前記ストレージコントローラは所定の条件を満たした時、
    前記管理領域に前記メタデータが記録されなかった前記ライトデータあるいは前記メタデータの削除が行われた前記ライトデータについて、前記メタデータの作成を行う、
    ことを特徴とする、請求項2に記載のストレージ装置。
  4. 前記ストレージコントローラは、前記管理領域から前記メタデータを削除した回数及び前記管理領域に前記メタデータを記録しなかった回数の和と、前記管理領域に前記メタデータを記録した回数と、を管理しており、
    前記ストレージコントローラは、前記管理領域に前記メタデータを記録した回数が、前記メタデータを削除した回数と前記メタデータを記録しなかった回数の和を超過したことを契機に、前記管理領域に前記メタデータが記録されなかった前記ライトデータあるいは前記メタデータの削除が行われた前記ライトデータについて、前記メタデータの作成を行って前記管理領域に記録する、
    ことを特徴とする、請求項3に記載のストレージ装置。
  5. 前記ストレージコントローラは、前記ライトデータを圧縮して、前記記憶デバイスに格納する、
    ことを特徴とする、請求項1に記載のストレージ装置。
  6. 前記ストレージコントローラは、前記ホストに対してボリュームを提供し、前記ホストからの前記ライトデータの書き込み要求で指定された前記ボリューム上の前記格納位置に動的に前記記憶デバイスの第1記憶領域を割り当て、前記第1記憶領域に前記ライトデータを格納し、
    前記ストレージコントローラはさらに、前記第1記憶領域から前記ライトデータを読み出して圧縮することで圧縮データを生成し、前記圧縮データを前記記憶デバイスの第2記憶領域に格納した後、前記ボリューム上の前記格納位置を、前記第1記憶領域の割り当てられていない状態に変更する、
    ことを特徴とする、請求項5に記載のストレージ装置。
  7. 前記ストレージコントローラは、前記第1記憶領域から前記ライトデータを読み出した際に、前記ライトデータの特徴量を算出し、
    前記管理領域に、前記算出された特徴量が記録されていない場合、前記圧縮データを前記第2記憶領域に格納し、
    前記ライトデータが、前記圧縮データの格納された前記第2記憶領域上位置に格納されていることを示す情報を、マッピング情報に記録する、
    ことを特徴とする、請求項6に記載のストレージ装置。
  8. 前記管理領域に、前記算出された特徴量が記録されている場合、前記ライトデータと前記第2記憶領域に格納されているデータとの比較を行い、
    前記ライトデータと同一のデータが前記第2記憶領域に格納されている場合、前記マッピング情報に、前記ライトデータが、前記同一のデータの格納された前記第2記憶領域上位置に格納されている旨の情報を記録する、
    ことを特徴とする、請求項7に記載のストレージ装置。
  9. 前記あらかじめ定められた条件は、前記ライトデータの圧縮率が所定値よりも大きいことである、
    ことを特徴とする、請求項5に記載のストレージ装置。
  10. ホストから書き込み要求のあったライトデータを格納するための1以上の記憶デバイスと、ストレージコントローラと、を有するストレージ装置において、
    前記ストレージコントローラは、前記ホストから前記ライトデータを受領すると、前記ライトデータと同一のデータが前記記憶デバイスに格納済みの場合、前記ライトデータを前記記憶デバイスに格納しないように構成されており、
    前記ストレージコントローラはまた、前記ライトデータの特徴量を算出し、前記ライトデータの特徴量と前記ライトデータの格納位置情報の組であるメタデータを管理領域に記録し、前記ライトデータと同一のデータが前記記憶デバイスに格納済みか判定するために、前記メタデータを用いるように構成されており、
    前記ストレージコントローラは、前記管理領域に記録された前記メタデータの量が規定値を超過した場合、前記メタデータのうち、前記メタデータに含まれる前記特徴量が他のメタデータと重複しないメタデータを、前記管理領域から削除する、
    ことを特徴とする、ストレージ装置。
  11. 前記ストレージコントローラは所定の条件を満たした時、
    前記メタデータの削除が行われた前記ライトデータについて、前記メタデータの再作成を行う、
    ことを特徴とする、請求項10に記載のストレージ装置。
  12. 前記ストレージコントローラは、前記管理領域から前記メタデータを削除した回数と、前記管理領域に前記メタデータを記録した回数と、を管理しており、
    前記ストレージコントローラは、前記管理領域に前記メタデータを記録した回数が、前記メタデータを削除した回数を超過したことを契機に、前記メタデータの削除が行われた前記ライトデータの前記メタデータを作成し、前記管理領域に記録する、
    ことを特徴とする、請求項11に記載のストレージ装置。
  13. プロセッサとメモリと記憶デバイスを有するコンピュータの前記プロセッサに、
    ライトデータの書き込み要求を受領すると、前記ライトデータと同一のデータが前記記憶デバイスに格納済みの場合、前記ライトデータを前記記憶デバイスに格納しない処理と、
    前記ライトデータの特徴量を算出し、前記ライトデータの特徴量と前記ライトデータの格納位置情報の組であるメタデータを前記メモリ内の管理領域に記録し、前記メタデータを用いて、前記ライトデータと同一のデータが前記記憶デバイスに格納済みか判定する処理を実行させ、
    さらに前記プロセッサに、前記ライトデータがあらかじめ定められた条件に該当する場合、前記メタデータを前記管理領域に記録しないと決定させる、
    プログラムが記録された記憶媒体。
  14. 前記プロセッサに、
    前記管理領域に記録された前記メタデータの量が規定値を超過した場合、前記メタデータのうち、前記メタデータに含まれる前記特徴量が他のメタデータと重複しないメタデータを、前記管理領域から削除させる、
    請求項13に記載のプログラムが記録された記憶媒体。
  15. 前記プロセッサに、
    所定の条件を満たした場合に、前記管理領域に前記メタデータが記録されなかった前記ライトデータあるいは前記メタデータの削除が行われた前記ライトデータについて、前記メタデータの作成を行わせる、
    請求項14に記載のプログラムが記録された記憶媒体。
JP2017567584A 2016-02-15 2016-02-15 ストレージ装置 Active JP6685334B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/054288 WO2017141315A1 (ja) 2016-02-15 2016-02-15 ストレージ装置

Publications (2)

Publication Number Publication Date
JPWO2017141315A1 true JPWO2017141315A1 (ja) 2018-05-31
JP6685334B2 JP6685334B2 (ja) 2020-04-22

Family

ID=59625868

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017567584A Active JP6685334B2 (ja) 2016-02-15 2016-02-15 ストレージ装置

Country Status (3)

Country Link
US (1) US10592150B2 (ja)
JP (1) JP6685334B2 (ja)
WO (1) WO2017141315A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10437785B2 (en) * 2016-03-29 2019-10-08 Samsung Electronics Co., Ltd. Method and apparatus for maximized dedupable memory
US10489288B2 (en) * 2017-01-25 2019-11-26 Samsung Electronics Co., Ltd. Algorithm methodologies for efficient compaction of overprovisioned memory systems
CN110018784B (zh) 2018-01-09 2023-01-10 阿里巴巴集团控股有限公司 数据处理方法、装置及计算设备
JP6608468B2 (ja) 2018-01-26 2019-11-20 株式会社日立製作所 ストレージ装置及びその制御方法
CN111381779B (zh) * 2020-03-05 2024-02-23 深信服科技股份有限公司 数据处理方法、装置、设备及存储介质
US11372579B2 (en) * 2020-10-22 2022-06-28 EMC IP Holding Company LLC Techniques for generating data sets with specified compression and deduplication ratios
CN114780501A (zh) * 2021-01-22 2022-07-22 伊姆西Ip控股有限责任公司 数据处理方法、电子设备和计算机程序产品

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011121905A1 (ja) * 2010-03-29 2011-10-06 日本電気株式会社 ファイルストレージ装置、データ格納方法およびデータ格納プログラム
WO2013051129A1 (ja) * 2011-10-06 2013-04-11 株式会社 日立製作所 格納データの重複排除方法、格納データの重複排除装置、及び重複排除プログラム
WO2014030252A1 (ja) * 2012-08-24 2014-02-27 株式会社日立製作所 ストレージ装置及びデータ管理方法
WO2014157243A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010097960A1 (en) 2009-02-25 2010-09-02 Hitachi, Ltd. Storage system and data processing method for the same
US8224875B1 (en) * 2010-01-05 2012-07-17 Symantec Corporation Systems and methods for removing unreferenced data segments from deduplicated data systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011121905A1 (ja) * 2010-03-29 2011-10-06 日本電気株式会社 ファイルストレージ装置、データ格納方法およびデータ格納プログラム
WO2013051129A1 (ja) * 2011-10-06 2013-04-11 株式会社 日立製作所 格納データの重複排除方法、格納データの重複排除装置、及び重複排除プログラム
WO2014030252A1 (ja) * 2012-08-24 2014-02-27 株式会社日立製作所 ストレージ装置及びデータ管理方法
WO2014157243A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 ストレージ制御装置、ストレージ制御装置の制御方法およびストレージ制御装置の制御プログラム

Also Published As

Publication number Publication date
JP6685334B2 (ja) 2020-04-22
WO2017141315A1 (ja) 2017-08-24
US20180253253A1 (en) 2018-09-06
US10592150B2 (en) 2020-03-17

Similar Documents

Publication Publication Date Title
JP6685334B2 (ja) ストレージ装置
JP6553566B2 (ja) メモリシステムおよび制御方法
US9916248B2 (en) Storage device and method for controlling storage device with compressed and uncompressed volumes and storing compressed data in cache
CN108604165B (zh) 存储装置
WO2015162681A1 (ja) ストレージシステムおよび記憶デバイスの制御方法
JP6608468B2 (ja) ストレージ装置及びその制御方法
US10503424B2 (en) Storage system
WO2015162758A1 (ja) ストレージシステム
JP6298932B2 (ja) ストレージ装置
US11455122B2 (en) Storage system and data compression method for storage system
US11093134B2 (en) Storage device, management method, and program in tiered storage system
US20180307440A1 (en) Storage control apparatus and storage control method
US20180307426A1 (en) Storage apparatus and storage control method
US9720608B2 (en) Storage system
WO2015162755A1 (ja) データを圧縮して格納するストレージ装置
WO2018061161A1 (ja) ストレージ装置およびその制御方法
US11366609B2 (en) Technique for encoding deferred reference count increments and decrements
US20220164146A1 (en) Storage system and control method for storage system
JP6419662B2 (ja) ストレージシステム及びデータ重複検出方法
WO2019026221A1 (ja) ストレージシステム及びストレージ制御方法
CN114930725A (zh) 存储系统中的容量缩减
JP7474217B2 (ja) ストレージシステム及びストレージシステムの制御方法
US11099756B2 (en) Managing data block compression in a storage system
WO2018051446A1 (ja) オプショナルなデータ処理機能を有するストレージシステムを含んだ計算機システム、および、記憶制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180207

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190212

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190325

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191010

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200331

R150 Certificate of patent or registration of utility model

Ref document number: 6685334

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150