IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日立ヴァンタラ株式会社の特許一覧

特開2025-1747ストレージシステムおよびデータ処理方法
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025001747
(43)【公開日】2025-01-09
(54)【発明の名称】ストレージシステムおよびデータ処理方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20241226BHJP
【FI】
G06F3/06 304F
G06F3/06 301Z
G06F3/06 302J
【審査請求】有
【請求項の数】8
【出願形態】OL
(21)【出願番号】P 2023101392
(22)【出願日】2023-06-21
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】吉井 義裕
(72)【発明者】
【氏名】吉原 朋宏
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】達見 良介
(57)【要約】
【課題】仮想デバイスの資源を効率的に利用して高スループットを実現する。
【解決手段】記憶装置とプロセッサとを備え、プロセッサは、プライマリボリュームとスナップショットボリュームとをスナップショットファミリーとして管理する。プロセッサは、スナップショット仮想デバイスをプライマリボリューム及びスナップショットボリュームのデータの格納先として用い、プロセッサは、ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対するスナップショットボリュームからの参照状況と、ライト先のアドレス範囲のスナップショット仮想デバイスにおける分散の度合いとに基づいて、割当済のスナップショット仮想デバイス上の領域を上書きする上書き処理と、ライト先のアドレス範囲にスナップショット仮想デバイス上の新たな領域を割り当てる新規割当処理とを切り替える。
【選択図】図30
【特許請求の範囲】
【請求項1】
記憶装置と、
前記記憶装置にアクセスするプロセッサとを備え、
前記プロセッサは、ホストによるリードライトの対象となるプライマリボリュームと、前記プライマリボリュームから生成したスナップショットボリュームとをスナップショットファミリーとして管理し、
前記プロセッサは、前記スナップショットファミリーに対応付けられた論理アドレス空間であるスナップショット仮想デバイスを前記プライマリボリューム及び前記スナップショットボリュームのデータの格納先として用い、
前記プロセッサは、前記ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対する前記スナップショットボリュームからの参照状況と、前記ライト先のアドレス範囲の前記スナップショット仮想デバイスにおける分散の度合いとに基づいて、割当済の前記スナップショット仮想デバイス上の領域を上書きする上書き処理と、前記ライト先のアドレス範囲に前記スナップショット仮想デバイス上の新たな領域を割り当てる新規割当処理とを切り替えることを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記プロセッサは、前記ライト先のアドレス範囲に対して前記スナップショットボリュームからの参照が無く、かつ、前記ライト先のアドレス範囲が前記スナップショット仮想デバイス上において閾値未満の分散数であることを条件に、前記上書き処理を行うことを特徴とするストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
同一のスナップショットファミリーに属する複数のボリュームが同一のデータを有する場合には、前記スナップショット仮想デバイス上の所定の領域を前記同一のデータに割り当て、当該所定の領域を前記複数のボリュームが参照することを特徴とするストレージシステム。
【請求項4】
請求項1に記載のストレージシステムであって、
異なるスナップショットファミリーに属する複数のボリュームが同一のデータを有する場合には、前記スナップショット仮想デバイスから参照される重複排除仮想デバイス上の所定の領域を前記同一のデータに割り当てることを特徴とするストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記プロセッサは、
前記スナップショットファミリーに属するボリュームにおけるアドレスと前記スナップショット仮想デバイス上の領域との対応を管理するマッピング情報に、スナップショットの世代に関する情報を含め、
前記ライト先のアドレス範囲の世代と最新の世代とが不一致であれば、前記新規割当処理を行うことを特徴とするストレージシステム。
【請求項6】
請求項2に記載のストレージシステムであって、
前記プロセッサは、前記ライト先のアドレス範囲に対して前記スナップショットボリュームからの参照が無く、かつ、前記ライト先のアドレス範囲が前記スナップショット仮想デバイス上において閾値以上の分散数である場合に、前記新規割当処理に必要な領域が前記スナップショット仮想デバイス上に存在するかを判定し、必要な領域が存在すれば前記割り当てを行い、必要な領域が存在しなければ前記スナップショット仮想デバイスを拡張した上で前記新規割当処理を行うことを特徴とするストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記プロセッサは、
前記スナップショット仮想デバイスと前記記憶装置との間に、圧縮追記仮想デバイスを設け、ライト要求されたデータを圧縮して前記記憶装置に書き込むことを特徴とするストレージシステム。
【請求項8】
記憶装置と、前記記憶装置にアクセスするプロセッサとを備えるストレージシステムのデータ処理方法であって、
前記プロセッサが、ホストによるリードライトの対象となるプライマリボリュームと、前記プライマリボリュームから生成したスナップショットボリュームとをスナップショットファミリーとして管理し、
前記プロセッサが、前記スナップショットファミリーに対応付けられた論理アドレス空間であるスナップショット仮想デバイスを前記プライマリボリューム及び前記スナップショットボリュームのデータの格納先として用い、
前記プロセッサが、前記ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対する前記スナップショットボリュームからの参照状況と、前記ライト先のアドレス範囲の前記スナップショット仮想デバイスにおける分散の度合いとに基づいて、割当済の前記スナップショット仮想デバイス上の領域を上書きする上書き処理と、前記ライト先のアドレス範囲に前記スナップショット仮想デバイス上の新たな領域を割り当てる新規割当処理と切り替えることを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムおよびデータ処理方法に関する。
【背景技術】
【0002】
近年、データ利活用ニーズが高まり、データ複製の機会が増えている。これに伴い、ストレージシステムにおいて、Snapshot機能がますます重要になっている。従来から、Snapshotの代表的な実現手段にRedirect on Write(RoW)方式がある。RoW方式には、データやメタ情報のコピーがないため、Snapshot作成時のI/O性能に対する影響が小さいという利点がある。RoW方式は、AFA(All Flash Array)装置で多く採用されている。RoW方式は、データを追い書きする方式である。追い書きとは、ストレージシステムにデータをライトする際、ライト前に格納されていたデータを上書きせず、新規領域にライト対象データを格納し、新規領域に格納したデータを参照するようにメタ情報を書き換えるデータ格納方式のことである。
【0003】
追い書きによるデータ格納方式を採用する場合、ホスト計算機からの書き込みを繰り返し処理すると、空き領域が断片化する傾向がある。断片化が進むと、要求されたサイズのデータを連続領域に割り当てられなくなって、読出し、および書き込みの性能が時間とともに低下するという問題が起こる。断片化は、データの配置を移動させるガベージコレクション処理を実施することによって、減らすことができるが、この処理は特に性能影響が大きい。
【0004】
特許文献1では、重複排除やスナップショットによって複数のVOLから共有されたデータを、1つのVOLからだけ参照されている単独データの格納先とは別の仮想空間に割り当てることにより、重複データへの参照数を減らし、ガベージコレクション処理の効率を上げる方法が提示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許第10817209号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、特許文献1のように仮想デバイス空間を追加する場合は、リード・ライトIO処理を行う際に参照・更新するマッピング情報が増えることで、ストレージコントローラの負荷が増えて、スループットが低下するという問題がある。また、仮想デバイス空間を割り当てることで、格納するデータ量に対して、メタデータ量が増えて削減効果が悪化したり、仮想デバイスの資源そのものの数が不足して、作成可能なVOL数が制限される問題もあるが、これらについての解決手段は提示されていない。
そこで、本発明では、仮想デバイスの資源を効率的に利用して高スループットを実現することを課題とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために、代表的な本発明のストレージシステムの一つは、記憶装置と、前記記憶装置にアクセスするプロセッサとを備え、前記プロセッサは、ホストによるリードライトの対象となるプライマリボリュームと、前記プライマリボリュームから生成したスナップショットボリュームとをスナップショットファミリーとして管理し、前記プロセッサは、前記スナップショットファミリーに対応付けられた論理アドレス空間であるスナップショット仮想デバイスを前記プライマリボリューム及び前記スナップショットボリュームのデータの格納先として用い、前記プロセッサは、前記ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対する前記スナップショットボリュームからの参照状況と、前記ライト先のアドレス範囲の前記スナップショット仮想デバイスにおける分散の度合いとに基づいて、割当済の前記スナップショット仮想デバイス上の領域を上書きする上書き処理と、前記ライト先のアドレス範囲に前記スナップショット仮想デバイス上の新たな領域を割り当てる新規割当処理とを切り替えることを特徴とする。
また、代表的な本発明のデータ処理方法の一つは、記憶装置と、前記記憶装置にアクセスするプロセッサとを備えるストレージシステムのデータ処理方法であって、前記プロセッサが、ホストによるリードライトの対象となるプライマリボリュームと、前記プライマリボリュームから生成したスナップショットボリュームとをスナップショットファミリーとして管理し、前記プロセッサが、前記スナップショットファミリーに対応付けられた論理アドレス空間であるスナップショット仮想デバイスを前記プライマリボリューム及び前記スナップショットボリュームのデータの格納先として用い、前記プロセッサが、前記ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対する前記スナップショットボリュームからの参照状況と、前記ライト先のアドレス範囲の前記スナップショット仮想デバイスにおける分散の度合いとに基づいて、割当済の前記スナップショット仮想デバイス上の領域を上書きする上書き処理と、前記ライト先のアドレス範囲に前記スナップショット仮想デバイス上の新たな領域を割り当てる新規割当処理と切り替えることを特徴とする。
【発明の効果】
【0008】
本発明によれば、仮想デバイスの資源を効率的に利用して高スループットを実現できる。上記した以外の課題、構成及び効果は以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0009】
図1】本発明におけるストレージシステムのハードウェア構成を示すブロック図である。
図2】本発明におけるストレージシステムの記憶制御の概要図である。
図3】SS-FamilyにおけるアドレスとSS-VDEVにおけるアドレスとのマッピングの管理の概要図である。
図4】SS-VDEVにおけるアドレスとDedup-VDEVにおけるアドレスとのマッピングの管理と、SS-VDEVにおけるアドレスとCR-VDEVにおけるアドレスとのマッピングの管理と、Dedup-VDEVにおけるアドレスとCR-VDEVにおけるアドレスとのマッピングの管理との概要図である。
図5】本発明におけるストレージコントローラが有するメモリの構成を示す説明図である。
図6】本発明におけるストレージコントローラのメモリ内の制御情報領域の構成を示す説明図である。
図7】本発明におけるストレージコントローラのメモリ内のプログラム領域の構成を示す説明図である。
図8】オーナ権管理テーブルの構成を示す図である。
図9】CR-VDEV管理テーブルの構成を示す図である。
図10】スナップショット管理テーブルの構成を示す図である。
図11】VOL-Dir管理テーブルの構成を示す図である。
図12】最新世代テーブルの構成を示す図である。
図13】回収管理テーブルの構成を示す図である。
図14】世代管理ツリーテーブルの構成を示す図である。
図15】スナップショット割当管理テーブルの構成を示す図である。
図16】Dir管理テーブルの構成を示す図である。
図17】SS-Mapping管理テーブルの構成を示す図である。
図18】圧縮割当管理テーブルの構成を示す図である。
図19】CR-Mapping管理テーブルの構成を示す図である。
図20】Dedup-Dir管理テーブルの構成を示す図である。
図21】Dedup割当管理テーブルの構成を示す図である。
図22】Pool-Mapping管理テーブルの構成を示す図である。
図23】Pool割当管理テーブルの構成を示す図である。
図24】スナップショット取得処理の流れを示す図である。
図25】スナップショットリストア処理の流れを示す図である。
図26】スナップショット削除処理の流れを示す図である。
図27】非同期回収処理の流れを示す図である。
図28】Write処理(フロントエンド)の流れを示す図である。
図29】Write処理(バックエンド)の流れを示す図である。
図30】スナップショット割り当て判定処理の流れを示す図である。
図31】スナップショット追記処理の流れを示す図である。
図32】Dedup追記処理の流れを示す図である。
図33】圧縮追記処理の流れを示す図である。
図34】デステージ処理の流れを示す図である。
図35】Read処理の流れを示す図である。
【発明を実施するための形態】
【0010】
以下、実施例を図面を用いて説明する。
【実施例0011】
図1は、計算機システムのハードウェア構成を示す。
計算機システム100は、ストレージシステム201、サーバシステム202、及び管理システム203を備える。ストレージシステム201とサーバシステム202とは、FC(Fiber Channel)などを用いたストレージネットワーク204を介して接続される。ストレージシステム201と管理システム203とは、IP(Internet Protocol)などを用いた管理ネットワーク205を介して接続される。なお、ストレージネットワーク204及び管理ネットワーク205は、同一の通信ネットワークであってもよい。
【0012】
ストレージシステム201は、複数のストレージコントローラ210と、複数のSSD220とを備える。ストレージコントローラ210には、複数のSSD220が接続されている。複数のSSD220が永続記憶装置の一例である。複数のSSD220に基づきプール13が構成されている。プール13のページ14に格納されたデータは、一つ以上のSSD220に格納される。
【0013】
ストレージコントローラ210は、CPU211と、メモリ212と、バックエンドインターフェース213と、フロントエンドインターフェース214と、マネジメントインターフェース215とを備える。
【0014】
CPU211は、メモリ212に記憶されているプログラムを実行する。
メモリ212は、CPU211が実行するプログラム、及び、CPU211が使用するデータ等を記憶する。メモリ212及びCPU211の組でメモリが二重化されていてよい。
【0015】
バックエンドインターフェース213、フロントエンドインターフェース214、マネジメントインターフェース215は、インターフェース装置の一例である。
バックエンドインターフェース213は、SSD220とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。バックエンドインターフェース213には、複数のSSD220が接続される。
フロントエンドインターフェース214は、サーバシステム202とストレージコントローラ210との間のデータのやり取りを仲介する通信インターフェースデバイスである。フロントエンドインターフェース214に、ストレージネットワーク204を介して、サーバシステム202が接続される。
マネジメントインターフェース215は、管理システム203とストレージコントローラ210の間のデータのやり取りを仲介する通信インターフェースデバイスである。マネジメントインターフェース215に、管理ネットワーク205を介して、管理システム203が接続される。
【0016】
サーバシステム202は、一つ以上のホスト装置を含んで構成される。サーバシステム202は、ストレージコントローラ210に対して、I/O先を指定したI/O要求(ライト要求又はリード要求)を送信する。I/O先は、例えば、LUN(Logical Unit Number)のような論理ボリューム番号、LBA(Logical Block Address)のような論理アドレス等である。
管理システム203は、一つ以上の管理装置を含んで構成される。管理システム203は、ストレージシステム201を管理する。
【0017】
図2は、ストレージシステムの記憶制御の概要を示す。なお、図2において、アルファベット大文字表記のデータ(データA,B,C,…)は、ブロックデータであり、アルファベット小文字表記のデータ(データa,b,c,…)は、サブブロックデータである。ブロックデータは、ブロック単位のデータでよい。ブロックは、固定長の論理記憶領域(論理アドレス範囲)でよい。サブブロックデータは、ブロックデータの圧縮データであり、サブブロック群(一つ以上のサブブロック)が格納先のデータである。サブブロックは、ブロックより小さいサイズの論理記憶領域でよい。例えば、サブブロックの整数倍がブロックでよい。
【0018】
記憶装置とプロセッサとを有するストレージシステムが、SS-Family(スナップショットファミリー)9と、SS-VDEV(スナップショット仮想デバイス)11Sと、Dedup-VDEV(重複排除仮想デバイス)11Dと、CR-VDEV(圧縮追記仮想デバイス)11Cと、プール13とを有する。
【0019】
SS-Family9は、PVOL10Pと、PVOL10PのスナップショットであるSVOL10Sとを含んだVOLグループである。
SS-VDEV11Sは、論理アドレス空間としての仮想デバイスであり、SS-Family9におけるいずれかのVOL10が格納先であるデータの格納先とされる。
Dedup-VDEV11Dは、SS-VDEV11Sとは別の論理アドレス空間としての仮想デバイスであり、二つ以上のSS-VDEV11Sの重複データの格納先とされる。
【0020】
CR-VDEV11Cは、SS-VDEV11S及びDedup-VDEV11Dとは別の論理アドレス空間としての仮想デバイスであり、圧縮データの格納先とされる。
複数のCR-VDEV11Cの各々は、SS-VDEV11S及びDedup-VDEV11Dのどちらかに対応付けられ、それら両方のVDEV11S及び11Dに対応付けられることはない。すなわち、各CR-VDEV11Cは、当該CR-VDEV11Cに対応するVDEV(仮想デバイス)が格納先であるデータの格納先となり、当該CR-VDEV11Cに対応しないVDEVが格納先であるデータの格納先とならない。CR-VDEV11Cが格納先である圧縮データは、プール13が格納先となる。
【0021】
プール13は、ストレージシステムが有する記憶装置(例えば永続記憶装置)の少なくとも一部に基づく論理アドレス空間である。プール13は、ストレージシステムが有する記憶装置の少なくとも一部に代えて又は加えて、ストレージシステムの外部記憶装置(例えば永続記憶装置)の少なくとも一部に基づいてよい。プール13は、複数の論理領域である複数のページ14を有する。CR-VDEV11Cが格納先である圧縮データが、プール13におけるページ14に格納される。CR-VDEV11Cにおけるアドレスとプール13におけるアドレスとのマッピングは1:1である。プール13は、一つ以上のプールVOLから構成されている。
【0022】
図2が示す例によれば、以下のような記憶制御がされる。
プロセッサが、PVOL10P0のスナップショットとしてSVOL10S0を作成し、これにより、PVOL10P0をルートVOLとしたSS-Family9-0ができる。また、プロセッサが、PVOL10P1のスナップショットとしてSVOL10S1を作成し、これにより、PVOL10P1をルートVOLとしたSS-Family9-1ができる。図2によれば、複数のSS-Familyの例として、SS-Family9-0及び9-1がある。
【0023】
ストレージシステムが、複数のSS-Family9の各々について、一つ以上のSS-VDEV11Sを有する。各SS-Family9について、当該SS-Family9におけるいずれかのVOL10が格納先であるデータについて、複数のSS-VDEV11Sのうち、当該SS-Family9に対応したSS-VDEV11Sが格納先とされる。SS-Family9-0を例に取ると、具体的には、例えば、下記である。
・プロセッサは、SS-Family9-0のSVOL10S0が格納先であるデータAについて、SS-VDEV11S0を格納先とする。プロセッサは、SVOL10S0のうちデータAに対応したアドレスを、SS-Family9-0に対応のSS-VDEV11S0のうちデータAに対応したアドレスにマッピングする。
・SS-Family9-0の複数のVOL(PVOL10P0及びSVOL10S0)に同一のデータBがある場合、プロセッサは、当該複数のVOL10のうち当該同一のデータBの複数のアドレス(PVOL10P0におけるアドレスとSVOL10S0におけるアドレス)を、SS-Family9-0のSS-VDEV11S0のアドレス(データBに対応のアドレス)にマッピングする。
【0024】
SS-Family9-0及び9-1(二つ以上のSS-Family9の一例)の各々について、非重複データの格納先は、当該SS-Family9に対応のCR-VDEV11Cとされ、重複データの格納先は、Dedup-VDEV11Dとされる。
すなわち、SS-Family9-0及び9-1のSS-VDEV11S0及び11S1(二つ以上のSS-VDEV11Sの一例)にデータCが重複しているので、プロセッサは、SS-VDEV11S0及び11S1のうち重複データCの二つアドレスを、Dedup-VDEV11Dのうち重複データCに対応したアドレスにマッピングする。そして、プロセッサは、重複データCを圧縮し、圧縮データcの格納先を、Dedup-VDEV11Dに対応のCR-VDEV11CCとする。すなわち、プロセッサは、Dedup-VDEV11Dにおける重複データCのアドレス(ブロックアドレス)を、CR-VDEV11CCにおける圧縮データcのアドレス(サブブロックアドレス)にマッピングする。また、プロセッサは、CR-VDEV11CCにページ14Bを割り当て、圧縮データcを、ページ14Bに格納する。CR-VDEV11CCにおける圧縮データcのアドレスが、プール13のページ14Bにおけるアドレスにマッピングされる。
【0025】
一方、SS-VDEV11S0についてデータAは他のSS-VDEV11S1におけるデータと非重複なので、プロセッサは、非重複データAを圧縮し、圧縮データaを、SS-VDEV11S0に対応のCR-VDEV11C0とする。すなわち、プロセッサは、SS-VDEV11S0における非重複データAのアドレス(ブロックアドレス)を、CR-VDEV11CCにおける圧縮データaのアドレス(サブブロックアドレス)にマッピングする。また、プロセッサは、CR-VDEV11C0にページ14Aを割り当て、圧縮データaを、ページ14Aに格納する。CR-VDEV11C0における圧縮データaのアドレスが、プール13のページ14Aにおけるアドレスにマッピングされる。
【0026】
CR-VDEV11Cは追記型のVDEVである。このため、プロセッサは、SS-VDEV11Sに対応のCR-VDEV11Cが更新データの格納先とされる場合にも、Dedup-VDEV11Dに対応のCR-VDEV11Cが更新データの格納先とされる場合にも、アドレスマッピングを更新する。具体的には、プロセッサは、例えば次の記憶制御を行う。
・CR-VDEV11C0に対する格納対象が圧縮データaの更新データa´である場合、プロセッサは、更新データa´の格納先をCR-VDEV11C0における空きのアドレスとし、更新前の圧縮データaのアドレスを無効とする。プロセッサは、圧縮データaのアドレスにマッピングされていたアドレスであってSS-VDEV11S0におけるアドレスを、CR-VDEV11C0における圧縮データaのアドレスに代えて、CR-VDEV11C0における更新データa´の格納先アドレスにマッピングする。また、プロセッサは、圧縮データaのアドレスにマッピングされていたアドレスであってページ14Aにおけるアドレスを、CR-VDEV11C0における圧縮データaのアドレスに代えて、CR-VDEV11C0における更新データa´の格納先アドレスにマッピングする。
・CR-VDEV11CCに対する格納対象が圧縮データcの更新データc´である場合、プロセッサは、更新データc´の格納先をCR-VDEV11CCにおける空きのアドレスとし、更新前の圧縮データcのアドレスを無効とする。プロセッサは、圧縮データcのアドレスにマッピングされていたアドレスであってDedup-VDEV11Dにおけるアドレスを、CR-VDEV11CCにおける圧縮データcのアドレスに代えて、CR-VDEV11CCにおける更新データc´の格納先アドレスにマッピングする。また、プロセッサは、圧縮データcのアドレスにマッピングされていたアドレスであってページ14Bにおけるアドレスを、CR-VDEV11CCにおける圧縮データaのアドレスに代えて、CR-VDEV11CCにおける更新データc´の格納先アドレスにマッピングする。
【0027】
CR-VDEV11Cは、上述のような追記型のVDEVであり、ガベージコレクションが行われる。すなわち、プロセッサは、CR-VDEV11Cのガベージコレクションを行うことで、有効なアドレス(最新データのアドレス)が連続するようにし、また、空きの領域のアドレスが連続するようにすることができる。
【0028】
図2が示す例によれば、SS-Family9におけるデータの格納先とされるSS-VDEV11Sと別に、二つ以上のSS-Family9における重複データの格納先とされるDedup-VDEV11Dが用意される。このため、Dedup-VDEV11Dにおける重複データCのアドレスが変更になることがあっても、変更対象のアドレスマッピングは、二つのマッピング(SS-VDEV11S0及び11S1における二つのアドレスの各々についてのマッピング)で済む。一方、一比較例では、SS-Family9におけるデータの格納先と二つ以上のSS-Family9における重複データの格納先とが同一のVDEVであり、この場合、重複データCについての変更対象のアドレスマッピングは、四つのマッピング(VOL10P0、10S0、10P1及び10S1における四つのアドレスの各々についてのマッピング)である。本実施形態では、一比較例よりもアドレスマッピングを短時間で変更することが期待される。
【0029】
Dedup-VDEV11Dとは別にDedup-VDEV11DについてCR-VDEV11CCが用意される。このため、CR-VDEV11CCにおける圧縮データcのアドレスが変更になることがあっても、変更対象のアドレスマッピングは、一つのマッピング(Dedup-VDEV11Dにおける一つのアドレスについてのマッピング)で済む。一方、一比較例では、SS-Family9におけるデータの圧縮データの格納先と二つ以上のSS-Family9における重複データの圧縮データの格納先とが同一のVDEVであり、この場合、重複データCの圧縮データcについての変更対象のアドレスマッピングは、四つのマッピング(VOL10P0、10S0、10P1及び10S1における四つのアドレスの各々についてのマッピング)である。本実施形態では、一比較例よりもアドレスマッピングを短時間で変更することが期待される。
【0030】
圧縮データcのアドレスの変更は、Dedup-VDEV11Dに対応のCR-VDEV11CCのガベージコレクションにおいて行われる。例えば、プロセッサは、CR-VDEV11CCのガベージコレクションにおいて、CR-VDEV11CCにおける更新データc´(圧縮データcの更新データ)のアドレスを変更し、変更前のアドレスにマッピングされていたアドレスであってDedup-VDEV11DにおけるアドレスをCR-VDEV11CCにおける変更後のアドレスにマッピングする。重複データの圧縮データについてのアドレスマッピングを短時間で変更することが期待されるため、ガベージコレクションを短時間で行うことが期待される。なお、SS-VDEV11Sに対応のCR-VDEV11Cのガベージコレクションは、例えば次の処理を含む。すなわち、プロセッサは、CR-VDEV11C0における更新データa´(圧縮データaの更新データ)のアドレスを変更し、変更前のアドレスにマッピングされていたアドレスであってSS-VDEV11S0におけるアドレスをCR-VDEV11C0における変更後のアドレスにマッピングする。
【0031】
少なくとも一つのCR-VDEV11Cについて、CR-VDEV11Cに代えて非圧縮データが格納される追記型のVDEVが採用されてもよいが、本実施形態では、追記型のVDEVとしてCR-VDEV11Cが採用されている。このため、最終的に記憶装置に格納されるデータは圧縮データであり、故に、消費される記憶容量を削減することができる。
【0032】
図3は、SS-Family9におけるアドレスとSS-VDEV11Sにおけるアドレスとのマッピングの管理の概要を示す。なお、図面において、「GX」(Xは0以上の整数)は、世代Xを意味する。また、図3は、SS-Family9-0及びSS-VDEV11S0を例に取る。
【0033】
プロセッサは、メタ情報を用いてSS-Family9-0におけるVOL10におけるアドレスとSS-VDEV11S0におけるアドレスとのマッピングを管理することができる。メタ情報は、Dir-Info(ディレクトリ情報)と、SS-Mapping-Info(スナップショットマッピング情報)とを含む。プロセッサは、Dir-InfoとSS-Mapping-Infoとを対応付けることで、PVOL10P0やSVOL10S0のデータを管理する。VOL10が格納先とされたデータについて、Dir-Infoが、参照元のアドレス(VOL10におけるアドレス)を表す情報を有し、当該データに対応のSS-Mapping-Infoが、参照先のアドレス(SS-VDEV11S0におけるアドレス)を表す情報を有する。
【0034】
さらに、プロセッサは、PVOL10P0とSVOL10S0の時系列をDir-Infoに関連付けた世代情報により管理し、SS-VDEV11S0が格納先である各データについて、当該データが作成された世代を示す世代情報をSS-Mapping-Infoに関連付けて管理している。加えて、プロセッサは、その時点の最新の世代情報を最新世代として管理している。
【0035】
スナップショット取得前の段階において、PVOL10P0が格納先とされたデータA0、B0及びC0があるとする。また、最新世代は「0」であるとする。
PVOL10P0に対応付けられたDir-Infoは、世代#(世代を表す番号)として「0」が関連付けられており、PVOL10P0の全データA0、B0及びC0の参照先を示す参照情報を含む。以降、Dir-Infoに関連付けられた世代#が「X」である場合に、Dir-Infoが世代Xである、と表記することができる。
【0036】
SS-VDEV11S0は、データA0、B0及びC0の格納先とされており、データA0、B0及びC0のそれぞれにSS-Mapping-Infoが対応付けられている。また、それぞれのSS-Mapping-Infoは、世代#として「0」が関連付けられている。SS-Mapping-Infoに関連付けられた世代#が「X」を表す場合、SS-Mapping-Infoに対応のデータは世代Xのデータである、と表記することができる。
【0037】
スナップショット取得前の状態では、データA0、B0及びC0の各々について、Dir-Infoにおける情報が、当該データに対応のSS-Mapping-Infoを参照している。このようにDir-InfoとSS-Mapping-Infoを対応付けることで、PVOL10P0とSS-VDEV11S0を対応させ、PVOL10P0に対するデータ処理を実現できる。
【0038】
スナップショット取得するためには、プロセッサは、Dir-Infoの複製を、リードオンリーのSVOL10S0のDir-Infoとする。そして、プロセッサは、PVOL10P0のDir-Infoの世代をインクリメントし、最新世代もインクリメントする。この結果、データA0、B0及びC0の各々について、SS-Mapping-Infoは、世代0のDir-Infoと世代1のDir-Infoの双方から参照される。
【0039】
このように、Dir-Infoの複製によりスナップショットの作成が可能であり、SS-VDEV11S0上のデータやSS-Mapping-Infoを増やすことなく、スナップショットを作成することができる。
【0040】
ここで、スナップショットを取得すると、取得時点で書き込みが禁止されてデータが固定したスナップショット(SVOL10S0)が世代0、取得以降もデータを書き込み可能なPVOL10P0が世代1となる。世代0は、世代1に対して「直系における1世代古い世代」であり、便宜上「親」という。同様に、世代1は世代0に対して「直系における1世代新しい世代」であり、便宜上「子」という。ストレージシステムは、世代の親子関係をDir-Info世代管理ツリー70として管理している。また、Dir-Infoの世代#は、当該Dir-Infoに対応のVOL10の世代#と同じである。また、SS-Mapping-Infoの世代#は、当該SS-Mapping-Infoを参照する一つ以上のDir-Infoの世代#のうち最も古い世代#である。
【0041】
図4は、SS-VDEV11SにおけるアドレスとDedup-VDEV11Dにおけるアドレスとのマッピングの管理と、SS-VDEV11SにおけるアドレスとCR-VDEV11Cにおけるアドレスとのマッピングの管理と、Dedup-VDEV11DにおけるアドレスとCR-VDEV11Cにおけるアドレスとのマッピングの管理との概要を示す。図4は、SS-VDEV11S0、CR-VDEV11C0及び11CCを例に取る。
【0042】
プロセッサは、メタ情報を用いて、SS-VDEV11S0におけるアドレスとDedup-VDEV11Dにおけるアドレスとのマッピング、SS-VDEV11S0におけるアドレスとCR-VDEV11C0におけるアドレスとのマッピング、及び、Dedup-VDEV11DにおけるアドレスとCR-VDEV11CCにおけるアドレスとのマッピングを管理することができる。メタ情報は、上述したように、Dir-Infoと、CR-Mapping-Infoとを含む。プロセッサは、Dir-InfoとCR-Mapping-Infoとを対応付けることで、SS-VDEV11S0やDedup-VDEV11Dのデータを管理する。SS-VDEV11S0が格納先とされたデータについて、Dir-Infoが、参照元のアドレス(SS-VDEV11S0におけるアドレス)を表す情報を有し、当該データに対応のCR-Mapping-Infoが、参照先のアドレス(CR-VDEV11C0におけるアドレス、又は、Dedup-VDEV11Dにおけるアドレス)を表す情報を有する。Dedup-VDEV11Dが格納先とされたデータについて、Dir-Infoが、参照元のアドレス(Dedup-VDEV11Dにおけるアドレス)を表す情報を有し、当該データに対応のCR-Mapping-Infoが、参照先のアドレス(CR-VDEV11CCにおけるアドレス)を表す情報を有する。プロセッサが、圧縮割当情報を参照することで、CR-VDEV11CにおけるアドレスからSS-VDEV11S又はDedup-VDEV11Dにおけるアドレスの特定が可能である。
図面では省略しているが、ストレージシステム201はCR-VDEV上の有効データを移動して、連続空き領域を確保する為に、CR-VDEVにおけるアドレスからSS-VDEV又はDedup-VDEVにおけるアドレスへの逆方向マッピングの情報として、圧縮割当管理テーブル1011をメモリ212上に保持している。
【0043】
図5は、メモリ212の構成を示す。
メモリ212は、制御情報(管理情報と呼ばれてもよい)が格納される制御情報部901と、プログラムが格納されるプログラム部902と、データが一時的に格納されるキャッシュ部903とを有する。
【0044】
図6は、制御情報部901に格納される情報を示す。
制御情報部901は、オーナ権管理テーブル1001、CR-VDEV管理テーブル1002、スナップショット管理テーブル1003、VOL-Dir管理テーブル1004、最新世代テーブル1005、回収管理テーブル1006、世代管理ツリーテーブル1007、スナップショット割当管理テーブル1008、Dir管理テーブル1009、SS-Mapping管理テーブル1010、圧縮割当管理テーブル1011、CR-Mapping管理テーブル1012、Dedup-Dir管理テーブル1013、Dedup割当管理テーブル1014、Pool-Mapping管理テーブル1015及びPool割当管理テーブル1016を記憶する。
【0045】
図7は、プログラム部902に格納されるプログラムを示す。
プログラム部902は、スナップショット取得プログラム1101、スナップショットリストアプログラム1102、スナップショット削除プログラム1103、非同期回収プログラム1104、リード/ライトプログラム1105、スナップショット追記プログラム1106、Dedup追記プログラム1107、圧縮追記プログラム1108、デステージプログラム1109、GC(ガベージコレクション)プログラム1110、CPU判定プログラム1111、オーナ権移動プログラム1112及びSnapshot割当判定プログラム1113を記憶する。
【0046】
図8は、オーナ権管理テーブル1001の構成を示す。
オーナ権管理テーブル1001は、VOL10又はVDEV11のオーナ権を管理する。例えば、オーナ権管理テーブル1001は、VOL10毎及びVDEV11毎にエントリを有する。エントリは、VOL#/VDEV#1201及びオーナCPU#1202といった情報を有する。
【0047】
VOL#/VDEV#1201は、VOL10又はVDEV11の識別番号を表す。オーナCPU#1202は、VOL10又はVDEV11のオーナCPUとしてのCPU(VOL10又はVDEV11のオーナ権を有するCPU)の識別番号を表す。
なお、オーナCPUは、CPU211単位での割当てに代えて、CPUグループ単位での割当てでもよいし、ストレージコントローラ210単位での割当てでもよい。
【0048】
図9は、CR-VDEV管理テーブル1002の構成を示す。
CR-VDEV管理テーブル1002は、SS-VDEV11S又はDedup-VDEV11Dに対応付けられているCR-VDEV11Cを表す。例えば、CR-VDEV管理テーブル1002は、SS-VDEV11S毎及びDedup-VDEV11D毎にエントリを有する。エントリは、VDEV#1301及びCR-VDEV#1302といった情報を有する。
VDEV#1301は、SS-VDEV11S又はDedup-VDEV11Dの識別番号を表す。CR-VDEV#1302は、CR-VDEV11Cの識別番号を表す。
【0049】
図10は、スナップショット管理テーブル1003の構成を示す。
スナップショット管理テーブル1003は、PVOL10P毎(SS-Family9毎)に存在する。スナップショット管理テーブル1003は、各スナップショット(SVOL10S)の取得時刻を表す。例えば、スナップショット管理テーブル1003は、SVOL10S毎にエントリを有する。エントリは、PVOL#1401、SVOL#1402及び取得時刻1403といった情報を有する。
PVOL#1401は、PVOL10Pの識別番号を表す。SVOL#1402は、SVOL10Sの識別番号を表す。取得時刻1403は、SVOL10Sの取得時刻を表す。
【0050】
図11は、VOL-Dir管理テーブル1004の構成を示す。
VOL-Dir管理テーブル1004は、VOLとDir-Infoとの対応関係を表す。例えば、VOL-Dir管理テーブル1004は、VOL10毎にエントリを有する。エントリは、VOL#1501、Root-VOL#1502及びDir-Info#1503といった情報を有する。
【0051】
VOL#1501は、PVOL10P又はSVOL10Sの識別番号を表す。Root-VOL#1502は、Root-VOLの識別番号を表す。VOL10がPVOL10PであればRoot-VOLは当該PVOL10Pであり、VOL10がSVOL10SであればRoot-VOLは当該SVOL10Sに対応のPVOL10Pである。Dir-Info#1503は、VOL10に対応するDir-Infoの識別番号を表す。
【0052】
図12は、最新世代テーブル1005の構成を示す。
最新世代テーブル1005は、PVOL10P毎(SS-Family9毎)に存在し、当該PVOL10Pの世代(世代#)を表す。
【0053】
図13は、回収管理テーブル1006の構成を示す。
回収管理テーブル1006は、例えばビットマップでよく、PVOL10P毎(SS-Family9毎)に存在、言い換えれば、Dir-Info世代管理ツリー70毎に存在する。回収管理テーブル1006は、Dir-Info毎にエントリを有する。エントリは、Dir-Info#1701及び回収要求1702といった情報を有する。
Dir-Info#1701は、Dir-Infoの識別番号を表す。回収要求1702は、Dir-Infoの回収を要求するか否を表す。“1”は、回収を要求することを意味し、“0”は、回収を要求しないことを意味する。
【0054】
図14は、世代管理ツリーテーブル1007の構成を示す。
世代管理ツリーテーブル1007は、PVOL10P毎(SS-Family9毎)に存在、言い換えれば、Dir-Info世代管理ツリー70毎に存在する。世代管理ツリーテーブル1007は、Dir-Info毎にエントリを有する。エントリは、Dir-Info#1801、世代#1802、Prev1803及びNext1804といった情報を有する。
Dir-Info#1801は、Dir-Infoの識別番号を表す。世代#1802は、Dir-Infoに対応のVOL10の世代を表す。Prev1803は、Dir-Infoの親(1つ上位)のDir-Infoを表す。Next1804は、Dir-Infoの子(1つ下位)のDir-Infoを表す。Next1804の数は、子のDir-Infoの数と同数でよい。図14では、二つの子のDir-Infoがあるため、二つのNext1804(Next-A1804A及びNext-B1804B)がある。
【0055】
図15は、スナップショット割当管理テーブル1008の構成を示す。
スナップショット割当管理テーブル1008は、SS-VDEV11S毎に存在し、SS-VDEV11SにおけるアドレスからVOL10におけるアドレスへのマッピングを表す。スナップショット割当管理テーブル1008は、SS-VDEV11Sにおけるアドレス毎にエントリを有する。エントリは、ブロックアドレス1901、ステータス1902、割当先VOL#1903及び割当先アドレス1904といった情報を有する。
【0056】
ブロックアドレス1901は、SS-VDEV11Sにおけるブロックのアドレスを表す。ステータス1902は、ブロックがいずれかのVOLのアドレスに割り当てられているか否かを表す(“1”が割当て済を意味し、“0”がフリーを意味する)。割当先VOL#1903は、ブロックの割当先のアドレスを有するVOL10(PVOL10P又はSVOL10S)の識別番号を表す(“n/a”は未割当を意味する)。割当先アドレス1904は、ブロックの割当先のアドレス(ブロックアドレス)を表す(“n/a”は未割当を意味する)。
【0057】
図16は、Dir管理テーブル1009の構成を示す。
Dir管理テーブル1009は、Dir-Info毎に存在し、データ毎(ブロックデータ毎)の参照先のMapping-Infoを表す。例えば、Dir管理テーブル1009は、アドレス(ブロックアドレス)毎にエントリを有する。エントリは、VOL/VDEVアドレス2001及び参照先Mapping-Info#2002といった情報を有する。
VOL/VDEVアドレス2001は、VOL10(PVOL10P又はSVOL10S)におけるアドレス(ブロックアドレス)、又は、VDEV11(SS-VDEV11S又はDedup-VDEV11D)におけるアドレスを表す。参照先Mapping-Info#2002は、参照先のMapping-Infoの識別番号を表す。
【0058】
図17は、SS-Mapping管理テーブル1010の構成を示す。
SS-Mapping管理テーブル1010は、VOL10のDir-Info毎に存在する。SS-Mapping管理テーブル1010は、VOL10のDir-Infoに対応したSS-Mapping-Info毎にエントリを有する。エントリは、Mapping-Info#2101、参照先アドレス2102、参照先SS-VDEV#2103及び世代#2104といった情報を有する。
【0059】
Mapping-Info#2101は、SS-Mapping-Infoの識別番号を表す。参照先アドレス2102は、SS-Mapping-Infoが参照するアドレス(SS-VDEV11Sにおけるアドレス)を表す。参照先SS-VDEV#2103は、SS-Mapping-Infoが参照するアドレスを有するSS-VDEV11Sの識別番号を表す。世代#2104は、SS-Mapping-Infoに対応したデータの世代を表す。
【0060】
図18は、圧縮割当管理テーブル1011の構成を示す。
圧縮割当管理テーブル1011は、CR-VDEV11C毎に存在し、CR-VDEV11Cにおけるサブブロック毎の圧縮割当情報を有する。圧縮割当管理テーブル1011は、CR-VDEV11Cにおけるサブブロック毎に、圧縮割当情報に相当するエントリを有する。エントリは、サブブロックアドレス2201、データ長2202、ステータス2203、先頭サブブロックアドレス2204、割当先VDEV#2205及び割当先アドレス2206といった情報を有する。
【0061】
サブブロックアドレス2201は、サブブロックのアドレスを表す。データ長2202は、圧縮データが格納されているサブブロック群(一つ以上のサブブロック)を構成するサブブロックの数を表す(例えば“2”は圧縮データが二つのサブブロックに存在することを意味する)。ステータス2203は、サブブロックのステータスを表す(“0”がフリーを意味し、“1”が割当て済を意味し、“2”が、GC(ガベージコレクション)の対象を意味する)。先頭サブブロックアドレス2204は、サブブロックを含む一つ以上のサブブロック(圧縮データが格納されている一つ以上のサブブロック)の先頭のサブブロックのアドレスを表す。割当先VDEV#2205は、サブブロックの割当先のブロックを有するVDEV11(SS-VDEV11S又はDedup-VDEV11D)の識別番号を表す。割当先アドレス2206は、サブブロックの割当先のブロックのアドレス(SS-VDEV11S又はDedup-VDEV11Dにおけるブロックアドレス)を表す。
【0062】
図19は、CR-Mapping管理テーブル1012の構成を示す。
CR-Mapping管理テーブル1012は、Dedup-VDEV11DのDir-Info毎、およびSS-VDEV11SのDir-Info毎に存在する。CR-Mapping管理テーブル1012は、Dedup-VDEV11DのDir-Infoに対応したCR-Mapping-Info毎、およびSS-VDEV11SのDir-Infoに対応したCR-Mapping-Info毎にエントリを有する。エントリは、Mapping-Info#2301、参照先アドレス2302、参照先CR-VDEV#2303及びデータ長2304といった情報を有する。
【0063】
Mapping-Info#2301は、CR-Mapping-Infoの識別番号を表す。参照先アドレス2302は、CR-Mapping-Infoが参照するアドレス(サブブロック群のうちの先頭のサブブロックのアドレス)を表す。参照先CR-VDEV#2303は、CR-Mapping-Infoが参照するサブブロックアドレスを有するCR-VDEV11Cの識別番号を表す。データ長2304は、CR-Mapping-Infoが参照するブロック(Dedup-VDEV11Dにおけるブロック)の数、又は、CR-Mapping-Infoが参照するサブブロック群を構成するサブブロックの数を表す。
【0064】
図20は、Dedup-Dir管理テーブル1013の構成を示す。
Dedup-Dir管理テーブル1013は、Dedup-VDEV11D毎に存在し、Dedup-Dir-Infoに相当する。Dedup-Dir管理テーブル1013は、Dedup-VDEV11Dにおけるアドレス毎にエントリを有する。エントリは、Dedup-VDEVアドレス2401及び参照先割当情報#2402といった情報を有する。
Dedup-VDEVアドレス2401は、Dedup-VDEV11Dにおけるアドレス(ブロックアドレス)を表す。参照先割当情報#2402は、参照先のDedup割当情報の識別番号を表す。
【0065】
図21は、Dedup割当管理テーブル1014の構成を示す。
Dedup割当管理テーブル1014は、Dedup-VDEV11D毎(Dedup-Dir-Info毎)に存在し、Dedup-VDEV11Dにおけるアドレスに対応のDedup割当情報からSS-VDEV11Sにおけるアドレスへの逆参照マッピングを表す。Dedup割当管理テーブル1014は、Dedup割当情報毎にエントリを有する。エントリは、割当情報#2501、割当先SS-VDEV#2502、割当先アドレス2503及び連結割当情報#2504といった情報を有する。
割当情報#2501は、Dedup割当情報の識別番号を表す。割当先SS-VDEV#2502は、Dedup割当情報が参照するアドレスを有するSS-VDEV11Sの識別番号を表す。割当先アドレス2503は、Dedup割当情報が参照するアドレス(SS-VDEV11Sにおけるブロックアドレス)を表す。連結割当情報#2504は、Dedup割当情報に連結されたDedup割当情報の識別番号を表す。
【0066】
図21によれば、Dedup割当情報#「1」にDedup割当情報#「3」が連結しており、Dedup割当情報#「3」に連結するDedup割当情報は存在しない。このため、Dedup割当情報#「1」に対応のDedup-VDEVアドレスにある重複データは、Dedup割当情報#「1」が参照するSS-VDEV11Sと、Dedup割当情報#「3」が参照するSS-VDEV11Sとにおける重複データであることがわかる。重複データの数は不定であるため、重複データの数に応じてDedup割当情報が連結される。重複データがNのSS-VDEV11Sに存在する場合、シーケンシャルなNのDedup割当情報が用意される。
【0067】
図22は、Pool-Mapping管理テーブル1015の構成を示す。
Pool-Mapping管理テーブル1015は、CR-VDEV11C毎に存在する。Pool-Mapping管理テーブル1015は、CR-VDEV11Cにおけるページサイズ単位の領域毎にエントリを有する。エントリは、VDEVアドレス2601及びページ#2602といった情報を有する。
VDEVアドレス2601は、ページサイズ単位の領域(例えば複数のブロック)の先頭アドレスを表す。ページ#2602は、割り当てられたページ14の識別番号(例えば、ページ14のプール13におけるアドレス)を表す。なお、複数のプール13がある場合、ページ#2602は、ページ14を有するプール13の識別番号を含んでよい。
【0068】
図23は、Pool割当管理テーブル1016の構成を示す。
Pool割当管理テーブル1016は、例えば複数のプール13がある場合にはプール13毎に存在する。Pool割当管理テーブル1016は、ページ14とCR-VDEV11Cにおける領域との対応関係を表す。Pool割当管理テーブル1016は、ページ14毎にエントリを有する。エントリは、ページ#2701、RG#2702、先頭アドレス2703、ステータス2704、割当先VDEV#2705及び割当先アドレス2706といった情報を有する。
【0069】
ページ#2701は、ページ14の識別番号を表す。RG#2702は、ページ14の基になっているRAIDグループ(本実施形態では二つ以上のSSD220で構成されたRAIDグループ)の識別番号を表す。先頭アドレス2703は、ページ14の先頭アドレスを表す。ステータス2704は、ページ14のステータスを表す(“1”は割当て済を意味し、“0”はフリーを意味する)。割当先VDEV#2705は、ページ14が割り当てられているCR-VDEV11Cの識別番号を表す(“n/a”は未割当を意味する)。割当先アドレス2706は、ページ14の割当先アドレス(CR-VDEV11Cにおけるアドレス)を表す(“n/a”は未割当を意味する)。
【0070】
図24は、スナップショット取得処理の流れを示す。スナップショット取得処理は、管理システム203(又はサーバシステム202といった別システム)からのスナップショット取得指示に応じて、スナップショット取得プログラム1101によって実行される。スナップショット取得指示では、例えば、対象PVOL10Pが指定される。
【0071】
まず、スナップショット取得プログラム1101は、コピー先となるDir管理テーブル1009を割当て、VOL-Dir管理テーブル1004を更新する(S2401)。
スナップショット取得プログラム1101は、最新世代#をインクリメントし(S2402)、世代管理ツリーテーブル1007(Dir-Info世代管理ツリー70)を更新する(S2403)。このとき、スナップショット取得プログラム1101は、コピー元には最新世代#を設定し、コピー先にはインクリメント前の世代#を設定する。
【0072】
スナップショット取得プログラム1101は、対象PVOL10Pについて、キャッシュダーティデータがあるか否かを判定する(S2404)。「キャッシュダーティデータ」とは、キャッシュ部903に格納されているデータのうち、未だプール13に書き込まれていないデータでよい。
【0073】
S2404の判定結果が真の場合(S2404:Yes)、スナップショット取得プログラム1101は、スナップショット追記プログラム1106にスナップショット追記処理を実行させる(S2405)。
S2404の判定結果が偽の場合(S2404:No)、又は、S2405の後、スナップショット取得プログラム1101は、対象PVOL10PのDir管理テーブル1009をコピー先のDir管理テーブル1009へコピーする(S2406)。
【0074】
その後、スナップショット取得プログラム1101は、スナップショット管理テーブル1003を更新して(S2407)、処理を終了する。S2407では、対象PVOL10Pの識別番号を表すPVOL#1401と、取得されたスナップショット(SVOL10S)の識別番号を表すSVOL#1402と、取得時刻を表す取得時刻1403とを有するエントリが追加される。
【0075】
図25は、スナップショットリストア処理の流れを示す。スナップショットリストア処理は、管理システム203(又はサーバシステム202といった別システム)からのリストア指示に応じて、スナップショットリストアプログラム1102によって実行される。リストア指示では、例えば、リストア元SVOLと、リストア先PVOLが指定される。
【0076】
まず、スナップショットリストアプログラム1102は、リストア先となるDir管理テーブル1009を割当て、VOL-Dir管理テーブル1004を更新する(S2501)。
スナップショットリストアプログラム1102は、最新世代#をインクリメントし(S2502)、世代管理ツリーテーブル1007(Dir-Info世代管理ツリー70)を更新する(S2503)。このとき、スナップショットリストアプログラム1102は、コピー元にはインクリメント前の世代#を設定し、コピー先には最新世代#を設定する。
【0077】
スナップショットリストアプログラム1102は、リストア先PVOLのキャッシュ領域(キャッシュ部903における領域)をパージする(S2504)。
スナップショットリストアプログラム1102は、リストア元SVOLのDir管理テーブル1009をリストア先PVOLのDir管理テーブル1009へコピーする(S2505)。
【0078】
その後、スナップショットリストアプログラム1102は、リストア先の旧Dir-InfoのDir-Info#を回収管理テーブル1006に登録して(S2506)、処理を終了する。S2506では、当該Dir-Info#に対応の回収要求1702が“1”とされる。
【0079】
図26は、スナップショット削除処理の流れを示す。スナップショット削除処理は、管理システム203(又はサーバシステム202といった別システム)からのスナップショット削除指示に応じて、スナップショット削除プログラム1103によって実行される。リストア指示では、例えば、対象SVOLが指定される。
【0080】
まず、スナップショット削除プログラム1103は、VOL-Dir管理テーブル1004を参照し、対象SVOLのDir-Info(Dir-Info#1503)を無効化する(S2601)。
そして、スナップショット削除プログラム1103は、スナップショット管理テーブル1003を更新し(S2602)、対象SVOLの旧Dir-Info#を回収管理テーブル1006に登録して(S2603)、処理を終了する。S2603では、当該Dir-Info#に対応の回収要求1702が“1”とされる。
【0081】
図27は、非同期回収処理の流れを示す。非同期回収処理は、非同期回収プログラム1104によって、例えば定期的に実行される。
まず、非同期回収プログラム1104は、回収管理テーブル1006から回収対象Dir-Info#を特定する(S2701)。「回収対象Dir-Info#」は、回収要求1702が“1”であるDir-Info#である。非同期回収プログラム1104は、世代管理ツリーテーブル1007を参照し、回収対象Dir-Info#のエントリを確認し、子を2つ以上持つDir-Infoを選択しない。
【0082】
その後、非同期回収プログラム1104は、未処理のエントリが存在するか否かを判定する(S2702)。ここで言う「未処理のエントリ」とは、回収管理テーブル1006において回収要求1702が“1”であるエントリのうち、非同期回収処理が未処理のエントリである。
【0083】
S2702の判定結果が真の場合(S2702:Yes)、非同期回収プログラム1104は、一つ以上の未処理のエントリから処理対象エントリ(回収要求1702“1”を含んだエントリ)を決定し(S2703)、対象Dir-Info(処理対象エントリにおけるDir-Info#1701から同定されるDir-Info)に対応のDir管理テーブル1009から、参照先Mapping-Info#2002を特定する(S2704)。
【0084】
非同期回収プログラム1104は、世代管理ツリーテーブル1007を参照し、対象Dir-Infoの子世代のDir-Infoが存在するか否かを判定する(S2705)。
S2705の判定結果が真の場合(S2705:Yes)、非同期回収プログラム1104は、子世代のDir-Infoに対応のDir管理テーブル1009から参照先Mapping-Info#2002を特定し、対象Dir-Infoの参照先Mapping-Info#2002と子世代のDir-Infoの参照先Mapping-Info#2002が一致するか否かを判定する(S2706)。S2706の判定結果が真の場合(S2706:Yes)、処理がS2702に戻る。
【0085】
S2706の判定結果が偽の場合(S2706:No)、若しくはS2705の判定結果が偽の場合(S2705:No)、非同期回収プログラム1104は、対象Dir-Infoの親世代のDir-Infoの世代#が、対象Dir-Infoの参照先Mapping-Infoの世代#2104(図21参照)よりも古いか否かを判定する(S2707)。S2707の判定結果が偽の場合(S2707:No)、処理がS2702に戻る。
【0086】
S2707の判定結果が真の場合(S2707:Yes)、非同期回収プログラム1104は、SS-Mapping管理テーブル1010の対象エントリを初期化し、スナップショット割当管理テーブル1008の対象エントリを解放する(S2708)。その後、処理がS2702に戻る。S2708での解放は、SS-VDEVにおけるブロックの解放に相当する。
【0087】
S2702の判定結果が偽の場合(S2702:No)、非同期回収プログラム1104は、回収管理テーブル1006を更新し(S2709)、且つ、世代管理ツリーテーブル1007(Dir-Info世代管理ツリー70)を更新し(S2710)、処理を終了する。
【0088】
図28は、Write処理(フロントエンド)の流れを示す。Write処理(フロントエンド)は、サーバシステム202からのライト要求を受け付けた場合に、リード/ライトプログラム1105によって実行される。
【0089】
まず、リード/ライトプログラム1105は、ライト要求の対象データがキャッシュヒットするかを判定する(S2801)。「キャッシュヒット」とは、対象データのライト先VOLアドレス(ライト要求において指定されたVOLアドレス)に対応のキャッシュ領域が確保済であることを意味する。S2801の判定結果が偽の場合(S2801:No)、リード/ライトプログラム1105は、キャッシュ部903から、対象データのライト先VOLアドレスに対応のキャッシュ領域を確保する(S2802)。その後、処理がS2806に進む。
【0090】
S2801の判定結果が真の場合(S2801:Yes)、リード/ライトプログラム1105は、キャッシュヒットしたデータ(確保済のキャッシュ領域におけるデータ)がダーティデータ(プール13に未反映(未書込み)のデータ)であるかを判定する(S2803)。S2803の判定結果が偽の場合(S2803:No)、処理がS2806に進む。
【0091】
S2803の判定結果が真の場合(S2803:Yes)、リード/ライトプログラム1105は、当該ダーティデータのWR(Write)世代#と、当該ライト要求の対象データの世代#が一致するかを判定する(S2804)。「WR世代#」は、例えば、キャッシュデータの管理情報(不図示)に保持される。また、当該ライト要求の対象データの世代#は最新世代#403から取得される。S2804は、直前に取得されたスナップショットの対象データ(ダーティデータ)の追記処理がされていないうちに、当該ライト要求の対象データでダーティデータを更新してしまい、スナップショットのデータを書きつぶしてしまうことを防ぐための処理である。
【0092】
S2804の判定結果が偽の場合(S2804:No)、リード/ライトプログラム1105は、スナップショット追記プログラム1106にスナップショット追記処理を実行させる(S2805)。
【0093】
S2802の後、又は、S2804の判定結果が真の場合(S2804:Yes)、リード/ライトプログラム1105は、S2802で確保したキャッシュ領域に、又は、S2805を通じて得られたキャッシュ領域へ、ライト要求の対象データを書き込む(S2806)。その後、リード/ライトプログラム1105は、S2806で書き込まれたデータのWR世代#を、S2804で比較した最新世代#に設定し(S2807)、サーバシステム202へ正常応答(Good応答)を返却する(S2808)。
【0094】
図29は、Write処理(バックエンド)の流れを示す。Write処理(バックエンド)は、未反映のデータ(ダーティデータ)がキャッシュ部903上にある場合、未反映のデータをプール13に書き込む処理である。Write処理(バックエンド)は、Write処理(フロントエンド)と同期又は非同期で行われる。Write処理(バックエンド)は、リード/ライトプログラム1105により実行される。
【0095】
リード/ライトプログラム1105は、キャッシュ部903上にダーティデータがあるか否かを判定する(S2901)。S2901の判定結果が真の場合(S2901:Yes)、リード/ライトプログラム1105は、スナップショット追記プログラム1106にスナップショット割り当て判定処理を実行させる(S2902)。
【0096】
図30は、Snapshot割り当て判定処理の流れを示す。Snapshot割り当て判定処理では、ホストからの書き込み要求対象のPVOL10Pの領域に対して、SS-VDEV11S上の領域を新規に割り当てるか、それともSS-VDEV11S上にすでに割り当たっている領域に上書きするかを判定する。Snapshot割り当て判定処理は、リード/ライトプログラム1105から呼び出されたSnapshot割当判定プログラム1113によって実行される。
【0097】
Snapshot割当判定プログラム1113は、まず、対象VOL(データのライト先VOL)のDir-Infoの世代#が追記前のSS-Mapping-Infoの世代#と一致するか否かを判定する(S3001)。S3001の判定結果が偽の場合(S3001:No)、Snapshot割当判定プログラム1113は、Snapshot追記処理(S3009)を実行する。
【0098】
S3001の判定結果が真の場合(S3001:Yes)、S3002に進む。S3001の判定結果が真の場合、ホストからライト要求を受けている範囲のデータは、他のスナップショットから参照されていない状態(以後、単独状態と呼ぶ)であるため、SS-VDEV上の同じアドレスに上書きを実施することで、Snapshot割当管理テーブルと、SS-Mapping管理テーブルの更新を不要とすることができる。
【0099】
次に、Snapshot割当判定プログラム1113はSS-Mapping-Infoを参照し、Write対象範囲のデータが、SS-VDEV上にどれだけ分散して格納されているかを取得する(S3002)。この数を以降では分散数と呼ぶ。例えば、ホストから256KBのデータがライトされたときに、更新前SS-Mappingは、32KB、128KB、96KBの3つの塊ごとに、それぞれSS-VDEV上の別々のアドレスに格納されている場合、分散数は3と数える。このような状況は、スナップショットを作成したあとに、一部分だけ更新された場合に発生しうる。分散数が大きい場合、SS-VDEVからCR-VDEVまたはDedup-VDEVに対するマッピングを更新する処理を別々に実施する必要があるので、ライトの処理オーバヘッドが増えてスループットが低下する。このため、マッピング情報の管理単位よりも大きいサイズのライトが要求されて、かつSS-VDEV上で分散している場合には、単独状態であって、スナップショット追記処理を実施し、SS-VDEV上の連続領域をまとめて割り当てたほうが処理を少なくできるという効果が期待できる。
【0100】
次にSnapshot割当判定プログラム1113は、S3002で求めた分散数が閾値以上であるかどうかを判定する(S3003)。分散数が閾値以上であった場合(S3003:Yes)、S3004に進む。分散数が閾値以下であった場合(S3003:No)、S3007に進む。ここの閾値は、分散した状態でマッピング情報を複数回更新する場合と、新規領域を割り当ててまとめてマッピング情報を更新する場合のいずれが性能上有利かどうかを切り替えるために設定する。具体的な閾値は、実際のプログラムの実装や性能特性に応じて設定される。例えば、分散数が2までであればSnapshot空間上で新規領域を割り当てるよりも、上書きしたほうが性能が良い場合には、閾値を3とすればよい。
【0101】
次にSnapshot割当判定プログラム1113は、SS-VDEV上に、Write対象分の領域を現在の分散数以下で新規領域を割り当て可能かどうかを判断する(S3004)。具体的には、Snapshot割当管理テーブル1008を参照し、未割り当て状態の連続領域が確保できるかどうかを判断する。割り当て可能と判断した場合(S3004:Yes)、Snapshot割当判定プログラム1113は、Snapshot追記処理(S3008)を実行する。割り当て不可と判断した場合(S3004:No)、S3005に進む。
【0102】
次にSnapshot割当判定プログラム1113は、SS-VDEV上に、新規のVDEVを割り当て可能かどうかを判断する(S3005)。割り当て可と判断した場合(S3005:Yes)、S3006に進み、新規のVDEVをSS-VDEVに割り当てる。次に、Snapshot割当判定プログラム1113は、Snapshot追記処理(S3008)を実行し、SS-VDEV上に新規領域を割り当てる。新規のVDEVを割り当て不可と判断した場合(S3005:No)、S3007に進み、SS-VDEV上に上書きを実施する。
【0103】
S3007に進む場合、Snapshot割当判定プログラム1113は、Dedup追記処理を実行する。この場合は、S3008のスナップショット追記処理に進む場合と異なり、スナップショット追記処理をスキップして、SS-VDEV上の同じアドレスに上書きを実施する。これにより、Snapshot割当管理テーブルと、SS-Mapping管理テーブルの更新を不要とすることができる。
【0104】
図31は、スナップショット追記処理の流れを示す。スナップショット追記処理は、ホストからの書き込み要求対象のPVOL10Pの領域に対して、SS―VDEV11S上の領域を新規に割り当てる処理である。スナップショット追記処理は、スナップショット取得プログラム1101やリード/ライトプログラム1105から呼び出されたスナップショット追記プログラム1106によって実行される。
【0105】
スナップショット追記プログラム1106は、スナップショット割当管理テーブル1008を更新することで、対象SS-VDEV11S(対象VOL(例えば、取得対象のSVOL、又は、データの書込み先のVOL)を含むSS-Family9に対応のSS-VDEV11S)における新たな領域(ステータス1902が“0”のブロックアドレス)を確保する(S3101)。そして、スナップショット追記プログラム1106は、Dedup追記プログラム1107にDedup追記処理を実行させる(S3102)。
【0106】
その後、スナップショット追記プログラム1106は、SS-Mapping管理テーブル1010を更新する(S3103)。S3103では、例えば、スナップショット追記プログラム1106は、対象のSS-Mapping-InfoのMapping-Info#に対応の世代#2104に、最新世代#(最新世代テーブル1005が表す世代#)を設定する。ここで言う「対象のSS-Mapping-Info」は、対象VOLにおけるデータに対応のSS-Mapping-Infoである。
【0107】
スナップショット追記プログラム1106は、対象SS-VDEV11SのDir-Infoに対応のDir管理テーブル1009を更新する(S3104)。S3104では、書込み対象のデータについてのSS-Mapping-Info(SS-VDEVにおける参照先アドレスを表す情報)が、当該データのVOL10におけるアドレスに関連付けられる。
【0108】
スナップショット追記プログラム1106は、世代管理ツリーテーブル1007(Dir-Info世代管理ツリー70)を参照し(S3105)、対象VOL(データのライト先VOL)のDir-Infoの世代#が追記前のSS-Mapping-Infoの世代#と一致するか否かを判定する(S3106)。
【0109】
S3106の判定結果が真の場合(S3106:Yes)、追記前のSS-Mapping-Infoが指しているSS-VDEV上の領域にデータが格納された後に、当該領域を共有するスナップショットは作成されていないということを意味する。すなわち、追記前のSS-Mapping-Infoが指しているSS-VDEV上の領域はガベージになったと判断できる。そこで、スナップショット追記プログラム1106は、追記前のSS-Mapping管理テーブル1010の対象エントリを初期化し、スナップショット割当管理テーブル1008の対象エントリを解放して(S3107)、処理を終了する。
【0110】
S3106の判定結果が偽の場合(S3106:No)、追記前のSS-Mapping-Infoが指しているSS-VDEV上の領域にデータが格納された後に、当該領域を共有するスナップショットが作成されてDIR-Infoの世代#がインクリメントされたということを意味する。この場合、追記前のSS-VDEV上の領域はガベージとならないので、追記前のSS-Mapping管理テーブル1010はそのままにして、処理を終了する。
【0111】
図32は、Dedup追記処理の流れを示す。Dedup追記処理は、スナップショット追記プログラム1106から呼び出されたDedup追記プログラム1107によって実行される。
【0112】
Dedup追記プログラム1107は、Poolに格納されているデータの中に、重複データが存在するか否かを判定する(S3201)。図では詳細を説明しないが、すべてのデータについて、同内容のデータがあるかのチェックを行うと、計算量が莫大になるので、各データについてハッシュ関数を用いた演算等を行うことで、ハッシュ値等のデータの代表値を算出し、代表値の一致しているデータ間のみで比較処理を行う方法をとる。S3201の判定結果が偽の場合(S3201:No)、Dedup追記プログラム1107は、圧縮追記プログラム1108に圧縮追記処理を実行させる(S3207)。これにより、SS-VDEV11Sが格納先であるデータの圧縮データが、Dedup-VDEV11D非経由に、且つ、処理主体のCPU211が変更されること無しに、CR-VDEV11Cに格納される。
【0113】
S3201の判定結果が真の場合(S3201:Yes)、Dedup追記プログラム1107は、Dedup割当管理テーブル1014を更新する(S3202)。S3202では、対象Dedup-VDEV11Dが格納先となるデータに対応のDedup割当情報についてのエントリがDedup割当管理テーブル1014に追加される。
【0114】
Dedup追記プログラム1107は、CR-Mapping管理テーブル1012を更新する(S3203)。S3203では、Dedup-VDEV11Dが格納先となるデータに対応のCR-Mapping-Infoについてのエントリが、CR-Mapping管理テーブル1012に追加される。
【0115】
Dedup追記プログラム1107は、対象Dedup-VDEV11DのDir-Infoに対応のDir管理テーブル1009を更新する(S3204)。S3204では、重複データについてのCR-Mapping-Info(CR-VDEV11CCにおける参照先アドレスを表す情報)が、当該データの対象Dedup-VDEV11Dにおけるアドレスに関連付けられる。このように、重複データはすでに格納済みのデータ関連付けることでPoolの使用容量を削減する。
【0116】
Dedup追記プログラム1107は、追記前のCR-Mapping管理テーブル1012を初期化する(S3205)。
Dedup追記プログラム1107は、更新前割当情報を無効化する(S3206)。S3206では、Dedup追記プログラム1107は、Dedup割当管理テーブル1014と圧縮割当管理テーブル1011とを更新する。また、S3206では、Dedup割当管理テーブル1014の割当先が0個になった領域について、圧縮割当情報の対象エントリをガベージ化も行う。
【0117】
図33は、圧縮追記処理の流れを示す。圧縮追記処理は、Dedup追記プログラム1107から呼び出された圧縮追記プログラム1108によって実行される。
圧縮追記プログラム1108は、書込み対象のデータを圧縮する(S3301)。圧縮追記プログラム1108は、圧縮割当管理テーブル1011を更新する(S3302)。S3302では、S3301での圧縮データの格納先となる一つ以上のサブブロックの各々について、当該サブブロックに対応のエントリが更新される。
【0118】
圧縮追記プログラム1108は、デステージプログラム1109にデステージ処理を実行させる(S3303)。
圧縮追記プログラム1108は、追記後のCR-Mapping管理テーブル1012を更新する(S3304)。
圧縮追記プログラム1108は、Dir管理テーブル1009を更新する(S3305)。
【0119】
圧縮追記プログラム1108は、追記前のCR-Mapping管理テーブル1012の対象エントリを初期化する(S3306)。
圧縮追記プログラム1108は、更新前割当情報を無効化する(S3307)。S3307では、Dedup追記プログラム1107は、Dedup割当管理テーブル1014と圧縮割当管理テーブル1011とを更新する。また、S3307では、Dedup割当管理テーブル1014の割当先が0個になった領域について、圧縮割当情報の対象エントリをガベージ化も行う。
【0120】
図34は、デステージ処理の流れを示す。デステージ処理は、圧縮追記プログラム1108から呼び出されたデステージプログラム1109によって実行される。
デステージプログラム1109は、RAIDストライプ分の追記データ(一つ以上の圧縮データ)がキャッシュ部903にあるか否かを判定する(S3401)。「RAIDストライプ」とは、RAIDグループにおけるストライプ(RAIDグループを構成する複数のSSD220に跨る記憶領域)である。RAIDグループのRAIDレベルが、パリティを必要とする場合、「RAIDストライプ分の追記データ」のサイズは、ストライプのサイズからパリティのサイズを除いた分のサイズでよい。S3401の判定結果が偽の場合(S3401:No)、処理が終了する。
【0121】
S3401の判定結果が真の場合(S3401:Yes)、デステージプログラム1109は、Pool-Mapping管理テーブル1015を参照し、RAIDストライプ分の追記データの格納先(CR-VDEV11Cにおけるアドレス)にページ14が割当済か否かを判定する(S3402)。S3402の判定結果が偽の場合(S3402:No)、処理がS3405に進む。
【0122】
S3402の判定結果が真の場合(S3402:Yes)、デステージプログラム1109は、Pool割当管理テーブル1016を更新する(S3403)。具体的には、デステージプログラム1109は、ページ14を割り当てる。S3403では、Pool割当管理テーブル1016のうち、割り当てられたページ14に対応のエントリ(例えば、ステータス2704、割当先VDEV#2705及び割当先アドレス2706)が更新される。
【0123】
デステージプログラム1109は、Pool割当管理テーブル1016における、RAIDストライプ分の追記データの格納先に対応したエントリに、割り当てられたページのページ#2602を登録する(S3404)。
【0124】
デステージプログラム1109は、RAIDストライプ分の追記データを、ページの基になっているストライプに書き込む(S3405)。RAIDレベルがパリティを必要とするRAIDレベルの場合、デステージプログラム1109は、RAIDストライプ分の追記データに基づきパリティを生成し、パリティもストライプに書き込む。
【0125】
図35は、リード処理の処理手順を示すフローチャートである。リード処理は、ホスト装置からのリード要求に応じて、Read/Writeプログラム1105によって実行される。
先ずS3500では、Read/Writeプログラム1105は、サーバシステム202からのリード要求が対象とするデータのPVOL又はSnapshot内でのアドレスを取得する。次にS3701では、Read/Writeプログラム1105は、リード要求の対象データがキャッシュヒットするかを判定する。Read/Writeプログラム1105は、リード要求の対象データがキャッシュヒットする場合(S3501:Yes)にS3508へ処理を移し、キャッシュヒットしない場合(S3501:No)にS3502へ処理を移す。
【0126】
S3502では、Read/Writeプログラム1105は、Dir管理テーブル1009、およびSS-Mapping管理テーブル1010を参照して、S3500で取得したPVOL/Snapshot内アドレスを基に、参照先のSS-VDEV上のアドレスを取得する。このとき、リード要求の対象データのサイズが、SS-Mapping管理テーブル1010の管理単位よりも大きい場合、全てのエントリを参照し、SS-VDEV上のアドレスを取得する。
【0127】
次にS3503では、Read/Writeプログラム1105は、Dir管理テーブル1009、およびCR-Mapping管理テーブル1012を参照して、S3502で取得したSS-VDEV内アドレスを基に、CR-VDEV内、もしくはDedup-VDEV内のアドレスを取得する。
【0128】
次に、S3504では、S3503で取得した参照先アドレスがDedup-VDEV上のものかどうかを判断する。具体的には、CR-Mapping管理テーブル1012の中の参照先CR-VDEV#2303を取得し、さらにCR-VDEV管理テーブル1002を参照し、そのCR-VDEV#2303とCR-VDEV#1302が一致するVDEV#1301を特定する。S3504の判定の結果が偽の場合(S3504:No)、Read/Writeプログラム1105は、S3506に進む。一方、S3504の判定の結果が真の場合(S3504:Yes)、Read/Writeプログラム1105は、S3503で特定したDedup-VDEV内のアドレスをもとに、Dir管理テーブル1009、およびCR-Mapping管理テーブル1012を参照して、CR-VDEV内のアドレスを取得する(S3505)。
【0129】
次に、Read/Writeプログラム1105は、S3503、またはS3505で特定したCR-VDEV内アドレスに格納されているデータを伸長しつつキャッシュメモリにステージングする。
【0130】
次に、Read/Writeプログラム1105は、ホスト装置が要求した範囲のデータをすべてキャッシュ上に読み出したかどうかを判定する(S3507)。判定の結果が真の場合、Read/Writeプログラム1105は、S3508に進み、S3501でキャッシュヒットしたデータ又はS3506でステージングしたデータをホスト装置に転送し、処理を終了する。
【0131】
一方、S3507の結果が偽の場合(S3507:No)、Read/Writeプログラム1105は、S3502に戻り、キャッシュ上で不足しているデータを再度ステージングしなおす。このように、ホストが要求された範囲のデータがCR-VDEV上の連続領域に格納されている場合は、ドライブから1回ステージングするだけでデータをキャッシュ上にそろえることができる。しかし、SS-VDEV上、Dedup-VDEV上、もしくはCR-VDEV上分散して格納されている場合は、複数回、メタデータの参照、もしくはドライブからのステージング作業が発生するため、スループット性能が低下する。
【0132】
上述してきたように、開示のストレージシステム201は、記憶装置してのSSD220と、前記記憶装置にアクセスするプロセッサ211とを備え、前記プロセッサ211は、ホストによるリードライトの対象となるプライマリボリューム10Pと、前記プライマリボリューム10Pから生成したスナップショットボリューム10Sとをスナップショットファミリー9として管理し、前記プロセッサ211は、前記スナップショットファミリー9に対応付けられた論理アドレス空間であるスナップショット仮想デバイス11Sを前記プライマリボリューム10P及び前記スナップショットボリューム10Sのデータの格納先として用い、前記プロセッサ211は、前記ホストからライト要求を受けた場合に、ライト先のアドレス範囲に対する前記スナップショットボリューム10Sからの参照状況と、前記ライト先のアドレス範囲の前記スナップショット仮想デバイス11Sにおける分散の度合いとに基づいて、割当済の前記スナップショット仮想デバイス11S上の領域を上書きする上書き処理と、前記ライト先のアドレス範囲に前記スナップショット仮想デバイス11S上の新たな領域を割り当てる新規割当処理とを切り替えることを特徴とする。
このため、スナップショットを提供するストレージシステムにおいて、ホストから書き込まれたデータ長や、マッピングの状態に合わせてマッピング情報の更新量やデータ転送量を最適化し、仮想デバイス領域の割り当てを切り替えることで、高いスループット性能を実現できる。
【0133】
また、Snapshot機能としてRoW方式を用いるので、Snapshotデータにも通常のデータと同様に圧縮を行うことができるため、容量効率が高く、フラッシュメモリ等の記憶媒体の使用量及びその使用電力を低減して、省資源及び省電力とすることができる。
【0134】
また、前記プロセッサ211は、前記ライト先のアドレス範囲に対して前記スナップショットボリューム10Sからの参照が無く、かつ、前記ライト先のアドレス範囲が前記スナップショット仮想デバイス11S上において閾値未満の分散数であることを条件に、前記上書き処理を行う。
このため、ライト先が独立データで十分に連続しているときには上書き処理を行い、ライト先が独立データでない場合や、独立データであっても不連続な領域に分散して書き込まれている場合には、新規割当処理を行うことができる。
【0135】
また、開示のストレージシステムは、同一のスナップショットファミリー9に属する複数のボリュームが同一のデータを有する場合には、前記スナップショット仮想デバイス11S上の所定の領域を前記同一のデータに割り当て、当該所定の領域を前記複数のボリュームが参照する。
このため、スナップショットにより参照されているデータを効率的に管理できる。
【0136】
また、開示のストレージシステムは、異なるスナップショットファミリー9に属する複数のボリュームが同一のデータを有する場合には、前記スナップショット仮想デバイス11Sから参照される重複排除仮想デバイス11D上の所定の領域を前記同一のデータに割り当てる。
このため、重複データを効率的に管理できる。
【0137】
また、前記プロセッサ211は、前記スナップショットファミリー9に属するボリュームにおけるアドレスと前記スナップショット仮想デバイス11S上の領域との対応を管理するマッピング情報に、スナップショットの世代に関する情報を含め、前記ライト先のアドレス範囲の世代と最新の世代とが不一致であれば、前記新規割当処理を行う。
このため、ライト先が独立データであるか否かを効率的に管理できる。
【0138】
また、前記プロセッサ211は、前記ライト先のアドレス範囲に対して前記スナップショットボリューム10Sからの参照が無く、かつ、前記ライト先のアドレス範囲が前記スナップショット仮想デバイス11S上において閾値以上の分散数である場合に、前記新規割当処理に必要な領域が前記スナップショット仮想デバイス11S上に存在するかを判定し、必要な領域が存在すれば前記割り当てを行い、必要な領域が存在しなければ前記スナップショット仮想デバイス11Sを拡張した上で前記新規割当処理を行う。
このため、必要に応じてスナップショット仮想デバイス11Sを拡張しつつ、効率的なメモリ運用が実現できる。
【0139】
また、前記プロセッサ211は、前記スナップショット仮想デバイス11Sと前記記憶装置との間に、圧縮追記仮想デバイス11Cを設け、ライト要求されたデータを圧縮して前記記憶装置に書き込む。
このため、データを圧縮して管理するストレージシステムにおいて、仮想デバイスの資源を効率的に利用して高スループットを実現できる。
【0140】
なお、本発明は上記の実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、かかる構成の削除に限らず、構成の置き換えや追加も可能である。
【符号の説明】
【0141】
9:スナップショットファミリー、10P:プライマリボリューム、10S:スナップショットボリューム、11C:圧縮追記仮想デバイス、11D:重複排除仮想デバイス、11S:スナップショット仮想デバイス、13:プール、70:Dir-Info世代管理ツリー、100:計算機システム、201:ストレージシステム、202:サーバシステム、203:管理システム、204:ストレージネットワーク、205:管理ネットワーク、210:ストレージコントローラ、211:CPU、212:メモリ、213:バックエンドインターフェース、214:フロントエンドインターフェース、215:マネジメントインターフェース、901:制御情報部、902:プログラム部、903:キャッシュ部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35