以下、一実施例を、図面を参照して説明する。
なお、以下の説明では、要素(例えば、ページ、ブロック、フラッシュメモリチップ(FMチップ)、スイッチ(SW)、プール、物理ボリューム、論理ボリューム、仮想ボリューム等)を特定するために番号を含む識別情報が使用されるが、識別情報として、番号を含まない情報が使用されても良い。
また、以下の説明では、同種の要素を区別して説明する場合、要素名と参照符号との組合せに代えて、要素名と識別情報との組合せが使用されることがある。例えば、識別情報(識別番号)「0」のブロックを、「ブロック#0」と表記することがある。
また、以下の説明では、インタフェースデバイスを「I/F」と略記することがある。
また、以下の説明では、不揮発半導体メモリは、フラッシュメモリ(FM)であるとする。そのフラッシュメモリは、ブロック単位で消去が行われ、ページ単位でアクセスが行われる種類のフラッシュメモリ、典型的にはNAND型のフラッシュメモリであるとする。しかし、フラッシュメモリは、NAND型に代えて他種のフラッシュメモリ(例えばNOR型)でも良い。また、フラッシュメモリに代えて、他種の不揮発半導体メモリ、例えば相変化メモリが採用されても良い。
また、以下の説明では、不揮発半導体メモリは、前述したように、NAND型フラッシュメモリである。このため、ページとブロックという用語が使用される。また、或る論理領域(この段落において「対象論理領域」と言う)がライト先であり、且つ、対象論理領域に既にページ(この段落において「第1のページ」と言う)が割り当てられていて第1のページにデータが格納されている場合、対象論理領域には、第1のページに代えて、空きのページ(この段落において「第2のページ」と言う)が割り当てられ、第2のページにデータが書き込まれることになる。第2のページに書き込まれたデータが、対象論理領域にとって最新のデータであり、第1のページに格納されているデータは、対象論理領域にとって旧いデータとなる。以下、各論理領域について、最新のデータを「有効データ」と言い、旧いデータを「無効データ」と言うことがある。また、有効データを格納しているページを「有効ページ」と言い、無効データを格納しているページを「無効ページ」と言うことがある。
「ホスト」とは、ストレージシステムの上位装置(例えば計算機)である。
「仮想ボリューム(仮想VOL)」とは、仮想的な論理ボリューム(論理VOL)のことをいう。仮想VOLは、例えばホストに認識される。仮想VOLは、例えば、Thin Provisioningに従うボリュームでも良いし、後述のスナップショットVOLでも良い。
「論理ボリューム(論理VOL)」は、仮想VOLに割り当てられる記憶領域を含んでおり、論理VOLを有するストレージシステム内のRAIDグループ(複数のフラッシュメモリデバイス)に基づいていても良いし、ストレージシステムに接続された外部のストレージシステムの記憶デバイスに基づいていても良い。
「プール」とは、1又は複数の論理VOLを集めた領域のことをいう。
「プライマリボリューム(プライマリVOL)」とは、ホストからのI/O要求で指定されるオリジナルの論理VOLのことをいう。
「スナップショットボリューム(スナップショットVOL)」とは、プライマリVOLのスナップショットのイメージを表す仮想VOLである。
「物理ボリューム(物理VOL)」とは、物理的な記憶デバイスであり、例えば、SSD(Solid State Device)である。
「論理アドレス」とは、論理的(又は仮想的)な領域(例えば、仮想VOL、論理VOL、或いは、物理VOLが提供する論理領域)のアドレスである。
「物理アドレス」とは、物理的な領域(例えば、物理VOLが提供する論理領域に割り当てられる物理領域)のアドレスである。
「エクステント」とは、仮想VOLに割り当てられる論理領域である。プールを構成する論理VOLは、2以上のエクステントに分割されている。プールから仮想VOLにエクステントが割り当てられる。複数のエクステントのサイズは、同一であっても、異なっていても良い。エクステントのサイズは、典型的には、ホストのリード要求及びライト要求に従うデータのサイズ(単位サイズ)よりも大きい。
図45は、本実施例の概要を示す。
ストレージシステムが、SSDと、SSDに基づく論理VOLと、SSDに接続されたストレージコントローラとを有する。論理VOLに格納されるデータは、SSDに格納される。論理VOLに入出力されるデータの単位サイズである入出力サイズは、SSDが有するフラッシュメモリを構成するページのサイズよりも大きい。例えば、入出力サイズは、ページサイズの整数倍(N倍(Nは2以上の整数))、具体的には、入出力サイズはページサイズの3倍である。
論理VOLにおける論理領域内のデータは、所定のイベントの発生を契機に、ストレージシステムのホストにとって不要となる。所定のイベントとしては、例えば、データが論理領域から別の論理領域に移動される、及び、データを格納しているエクステントの割当て先の仮想VOLが削除される等がある。
ストレージコントローラは、その所定のイベントを契機に、ホストにとって不要なデータを格納している論理領域の基になっているSSDに、不要低減要求を送信する。不要低減要求は、ホストにとって不要なデータを格納している論理領域の基になるページの数を低減する要求である。SSDは、不要低減要求を受けた場合、ホストにとって不要なデータを格納している論理領域の基になる複数のページの少なくとも1つの状態を、有効から無効に変更する。
以下、本実施例を詳細に説明する。
図1は、本実施例に係る計算機システムの構成例を示す。
計算機システムは、ストレージシステム1と、ホスト200とを有する。ストレージシステム1、ホスト200の数は、それぞれ、1以上とすることができる。ストレージシステム1と、ホスト200とは、通信ネットワーク(例えば、SAN(Storage Area Network))を介して相互に接続されている。ストレージシステム1は、ホスト200で利用されるデータを記憶する。ホスト200は、各種処理を実行し、ストレージシステム1からデータを読み出したり、ストレージシステム1へデータを書き込んだりする。
ストレージシステム1は、複数の物理VOLと、それら複数の物理VOLに接続されたストレージコントローラ300とを有する。
複数の物理VOLは、複数種類の物理VOLを含む。少なくとも1種類の物理VOLは、1以上存在して良い。物理VOLとして、例えば、SSD400、HDD(Hard Disk Drive)デバイス(SAS:Serial Attached SCSI)500及びHDD(SATA:Serial ATA)600がある。
ストレージコントローラ300は、複数のRAID(Redundant Array of Independent (or Inexpensive) Disksの略))コントローラ301を有する。各RAIDコントローラ301は、SSD400、HDD(SAS)500及びHDD(SATA)600と内部バスを介して接続されている。
なお、RAIDコントローラ301は、SSD400、HDD(SAS)500及びHDD(SATA)600にとっての上位装置の一例である。RAIDコントローラ301は、RAIDコントローラ301にとっての上位装置(例えば、ホスト200)からI/Oコマンドを受け、そのI/Oコマンドに従い、SSD400、HDD(SAS)500又はHDD(SATA)600へのアクセス制御を行う。RAIDコントローラ301は、SSD400、HDD(SAS)500、HDD(SATA)600のそれぞれのエクステントをそれぞれ異なる記憶階層(ティア)として管理し、データのライト先の論理領域に対して、いずれかの記憶階層のエクステントを割当てる処理を行うようにしてもよい。つまり、ティアは、同種の物理VOLに基づく2以上のエクステントで構成されている。また、図示していないが、ストレージシステム1は、複数のSSD400で構成されたRAIDグループ、複数のHDD(SAS)500で構成されたRAIDグループ、及び、複数のHDD(SATA)600で構成されたRAIDグループを有して良い。
図2は、実施例に係るRAIDコントローラの構成例を示す。
RAIDコントローラ301は、オープンポートパッケージ310と、メインフレームパッケージ320と、ドライブポートパッケージ330と、キャッシュメモリ340と、共有メモリ350と、1以上のマイクロプロセッサパッケージ(MPPK)360と、スイッチパッケージ370とを有する。オープンポートパッケージ310、メインフレームパッケージ320、ドライブポートパッケージ330、キャッシュメモリ340、共有メモリ350、及び1以上のマイクロプロセッサパッケージ(MPPK)360は、スイッチパッケージ370を介して相互に接続されている。
オープンポートパッケージ310は、オープンパッケージ用マイクロプロセッサ(Open Port MP)311を有し、オープン系のホスト200と通信するためのポートである。メインフレームパッケージ320は、メインフレーム用マイクロプロセッサ(MF Port MP)321を有し、メインフレームであるホスト200と通信するためのポートである。ドライブポートパッケージ330は、ドライブパッケージポート用マイクロプロセッサ(Drive Port MP)331を有し、物理VOL400、500、600との間でデータをやり取りするポートである。
キャッシュメモリ340は、リード、ライトに関わるデータを一時的に記憶する。共有メモリ350は、MPPK360のMP362に利用される各種情報を記憶する。本実施例では、共有メモリ350は、プール管理テーブル(図26参照)、動的領域割り当てテーブル(図27参照)、動的エクステント領域割り当てテーブル(図28参照)、アクセス頻度テーブル(図29参照)、ペア管理テーブル(図30参照)、スナップショットデータ割り当てテーブル(図31参照)等を記憶する。なお、これらテーブルについては、後述する。
MPPK360は、ローカルメモリ及びプログラムメモリ(LM/PM)361と、1以上のマイクロプロセッサ(MP)362とを有する。LM/PM361は、MP362が使用するデータや、プログラムを記憶する。MP362は、LM/PM361に格納されたプログラムを実行し、LM/PM361に格納されたデータ及び/又は、共有メモリ350に格納されたデータを用いて、各種処理を実行する。
図3は、本実施例に係るSSDの構成例を示す。
SSD400は、1以上の上位I/Fスイッチ(上位I/F Switch)401と、1以上のフラッシュメモリパッケージ(PKG)10とを有する。上位I/Fスイッチ401は、RAIDコントローラ301と、複数のフラッシュメモリPKG10との間のデータの中継を行う。
図4は、本実施例に係るフラッシュメモリパッケージの構成例を示す。
フラッシュメモリPKG10は、主記憶メモリの一例としてDRAM(Dynamic Random Access Memory)11を有し、また、FMコントローラ20と、複数(又は1つ)のDIMM(Dual Inline Memory Module)30とを有する。DRAM11は、FMコントローラ20で使用するデータ等を記憶する。DRAM11は、FMコントローラ20に搭載されていても良いし、FMコントローラ20とは別の部材に搭載されていても良い。DRAM11は、本実施例では、論物変換テーブル110(図24参照)、物論変換テーブル111(図25参照)等を記憶する。これらテーブルについては、後述する。
FMコントローラ20は、例えば、1つのASIC(Application Specific Integrated Circuit)で構成されており、CPU21と、内部バス22と、上位I/F(インタフェース)23と、複数(又は1つ)のFM I/F制御部24とを有する。内部バス22は、CPU21と、上位I/F23と、DRAM11と、FM I/F制御部24とを通信可能に接続する。
上位I/F23は、上位I/F Switch401に接続され、上位装置との通信を仲介する。上位I/F23は、例えば、SASのI/Fである。FM I/F制御部24は、複数のFMチップ32とのデータのやり取りを仲介する。本実施例では、FM I/F制御部24は、FMチップ32とのやり取りを実行するバス(データバス等)を複数組有し、複数のバスを用いて、複数のFMチップ32とのデータのやり取りを仲介する。本実施例では、DIMM30毎にFM I/F制御部24が設けられ、FM I/F制御部24は、その制御部24に接続されたDIMM30が有する複数のFMチップ32との通信を仲介する。なお、FM I/F制御部24が担当するDIMM30の枚数は、2以上であってもよい。CPU21は、DRAM11(又は図示しない他の記憶領域)に記憶されるプログラムを実行することによって、各種処理を実行することができる。CPU21は複数あってもよく、複数のCPU21が各種処理を分担してもよい。CPU21による具体的な処理については、後述する。
DIMM30は、1以上のSW31と、複数のFMチップ32とを有する。FMチップ32は、例えば、MLC(Multi Level Cell)型のNANDフラッシュメモリチップである。MLC型のFMチップは、SLC型のFMチップと比べて書き換え可能な回数が劣るが、1セルあたりの記憶容量が多いという特徴を有している。
SW31は、FM I/F制御部24と、データバスを含むバス25を介して接続されている。本実施例では、SW31は、FM I/F制御部24に接続されるデータバスを含む一組のバス25に対して、一つ対応するように設けられている。また、SW31は、複数のFMチップ32とデータバスを含むバス28を介して接続されている。SW31は、FM I/F制御部24からのバス25と、いずれかのFMチップ32のバス28とを選択的に切り替えて接続できるようになっている。ここで、DIMM30に、SW31と、複数のFMチップ32とが設けられ、配線がされているので、これらを接続するためのコネクタを別に用意せずともよく、必要なコネクタ数を低減することが期待できる。
なお、図4によれば、FMチップ32が別のFMチップ32を介することなくSW31に接続されているが、FMチップ32が別のFMチップ32を介してSW31に接続されても良い。すなわち、SW31に、直列になった2以上のFMチップ32が接続されても良い。
図5は、実施例に係るフラッシュメモリチップの構成例を示す。
フラッシュメモリチップ(FMチップ)32は、複数のブロック32bを有する。各ブロック32bは、複数のページ32pを有する。ページ32pは、FMチップ32に対するデータのリード/ライトの単位である。本実施例では、ページ32pのサイズは、8KBである。なお、ページ32pのサイズはこれに限られない。
図6は、実施例に係るフラッシュメモリチップにおけるデータの更新を説明する図である。
論理VOL2012に対してデータのライトがあった場合には、状態1に示すように、FMチップ32においては、論理VOL2012のデータが格納される領域に対応付けられたFMチップ32のブロック32bのページ32pに対して、データが格納される。この場合には、ページ32pは、有効、すなわち、有効なデータを格納していると設定されて管理される。
そして、論理VOL2012の同一の領域に対して新たなデータ(更新データ)のライトがあった場合には、状態2に示すように、更新データは、別のページ32pに対して格納され、更新前のデータ(旧データ)が格納されていたページ32pは、無効、すなわち、無効データを格納していると設定されて管理される。なお、種々のデータが更新されると、無効と設定されているページ32pは、ブロック32bに散在することとなる。
図7は、実施例に係るページの状態遷移を説明する図である。
データが格納可能な状態である空き状態701であるページ32pに対して、新規のデータのライトが発生すると(図7中(1))、ページ32pに当該データがライトされて、ページ32pは、有効状態702となる。この後、当該ページ32pが記憶しているデータへの更新ライトが発生すると(図7中(2))、ページ32pは、無効状態703となる。無効状態703のページ32pが消去(ページ32p中のデータが消去)されると(図7中(3))、ページ32pは、空き状態701に戻る。
図8は、実施例に係るフラッシュメモリチップにおけるデータ消去を説明する図である。
FMチップ32では、ブロック32bを単位として格納されているデータの消去が可能となっている。したがって、本実施例では、ブロック32bに属する全てのページ32pが無効となった以降において、データの消去が行われる。なお、ブロックのデータの消去を、ブロックの消去ともいう。
図9は、実施例に係るリクラメーションを説明する図である。
リクラメーションとは、消去処理可能なブロックを生成する処理のことをいう。リクラメーションにおいては、図9に示すように、無効ページが所定数以上のブロック32b(ブロック#A、ブロック#B)中の有効なページ32pのデータを、空きページのある別のブロック32b(ここでは、ブロック#C)にコピーして、コピー元の有効ページを無効ページとする。この結果、コピー元のブロック32b(ここでは、ブロック#A、ブロック#B)は、すべてのページ32pが無効ページとなり、消去処理可能なブロックとなる。これにより、以降において、当該ブロック32bを消去することができるようになる。
図10は、実施例に係るブロックの状態遷移を説明する図である。
全てのページ32pが空きである全ページ空き状態1001のブロック32bにおいて、当該ブロック32b中のページ32pが論理領域に新規に割り当てられて、データが書き込まれると(図10中(1))、当該ブロック32bは、空きページと、有効ページとが混在する空きと有効混在状態1002となる。空きと有効混在状態1002のブロック32bにおいて、全ての空きページが新規に割り当てられてデータが書き込まれて、空きページがなくなると(図10中(2))、全ページが有効ページの状態1003となる。
一方、空きと有効混在状態1002のブロック32bにおいて、有効ページに対する更新ライトが発生すると(図10中(3))、当該有効ページは、無効ページとなるので、ブロック32bは、空き、有効、及び無効のページが混在する状態1004となる。
また、全ページが有効ページの状態1003のブロック32bにおいて、有効ページに対して更新ライトが発生すると(図10中(4))、当該有効ページは、無効ページとなるので、ブロック32bは、有効ページ及び無効ページが混在する状態1005となる。
また、空き、有効、及び無効のページが混在する状態1004のブロック32bにおいて、全ての空きページが新規に割り当てられてデータが書き込まれて、空きページがなくなると(図10中(5))、ブロック32bは、有効ページと、無効ページとが混在する状態1005となる。
有効ページと、無効ページとが混在する状態1005のブロック32bにおいて、有効ページに対して更新ライトが発生したり、リクラメーションにより有効ページのデータが移動されたりして、有効ページがなくなると(図10中(6))、ブロック32bは、全て無効ページの状態1006となる。全て無効ページの状態1006のブロック32bに対して、消去処理が行われると(図10中(7))、ブロック32bは、全てのページが空きである空き状態1001となる。
図11は、実施例に係る動的領域割り当て処理を説明する図である。
ホスト200は、仮想VOL2022の領域(ライト領域)を指定したライト要求を送信する。ここで、ホスト200がライト要求に従うデータ(以下、ライトデータ)のサイズは、例えば、SSD400のページの容量の複数倍(例えばN倍(Nは2以上の整数))のサイズである。本実施例では、例えば、ページのサイズを8KBとし、ライトデータのサイズを、ページサイズの3倍である24KBとしている。ストレージシステム1では、ライト要求を受信すると、仮想VOL2022のライト領域に対して、プール2001の論理VOL2012の領域が割り当てられていない場合には、ライト領域と同じサイズの、プール2001の論理VOL2012の領域が割り当てられる。この結果、割り当てられた論理VOL2012の領域がSSD400の領域に対応する場合には、キャッシュ340を介して、SSD400の対応する領域(ページ)にライトデータが書きこまれる。
この動的領域割り当て処理に代えて、次の動的エクステント領域割り当て処理を行うようにしてもよい。
図12は、実施例に係る動的エクステント領域割り当て処理を説明する図である。
動的エクステント領域割り当て処理では、仮想VOL2022のライト領域に対して、プール2001の論理VOL2012の領域が割り当てられていない場合には、ライト領域よりも大きいサイズの領域であるエクステント2052を割り当てる。このように、ライト領域よりも大きいサイズのエクステント2052を割り当てるようにすることにより、領域の割り当てを管理するための管理情報のデータ量を低減することができる。
この図に示す動的エクステント領域割り当て処理でも、図11に示した動的領域割り当て処理でも、仮想VOLの領域には、プール内の論理領域(エクステント)が割り当てられる。このため、以下の説明では、動的エクステント領域割り当て処理と動的領域割り当て処理のいずれの説明でも、「エクステント」が割り当てられると記載することがある。
次に、本実施例に係るストレージシステムにおいて、SSD400に不要なデータが発生する場合の一例として、ティア間動的マイグレーションについて説明する。
図13は、実施例に係るティア間動的マイグレーションを説明する図である。
ティア間動的マイグレーションとは、仮想VOLにおける仮想領域又は仮想領域に割り当てられているエクステントに対するアクセス頻度等に応じて、データが格納されるエクステントを別のティアのエクステントに変更する、すなわち、データをエクステントから別のティアのエクステントに移動させることをいう。
ここで、SSD400のエクステントに格納されているデータを、別のティアのエクステント(ここでは、HDD(SAS)500のエクステント)に移動させる場合には、ストレージシステム1は、当該領域に対してプール2001から移動先のティアのエクステントを割り当て、SSD400から対応するデータをキャッシュ340に読み出し、当該データを割り当てられた移動先のティアのエクステント(ここでは、HDD(SAS)500のエクステント)に移動する。なお、この後、ストレージシステム1は、当該データの仮想VOL2022の領域を、移動後のティアのエクステントに対応付けるように、動的領域割り当てテーブル等のマッピング変更をする。
このティア間動的マイグレーションが実行された後においては、SSD400の記憶領域に格納されているデータは、ホスト200から参照されることはなく、不要なデータとなる。しかしながら、SSD400においては、当該データを格納している複数のページは、有効なデータを格納している有効ページとして管理されたままとなっている。
ここで、この不要なデータを格納している領域を低減する方法として、本実施例では、例えば、以下に示す固定パターンデータライト処理を実行する。
図14は、実施例に係るティア間動的マイグレーション後の固定パターンデータライト処理を説明する図である。
ここで、固定パターンデータとは、ライトデータのサイズと同じであり、ページ32pのサイズに分解して得られる複数の部分データのそれぞれが、同一のデータパターンとなるデータである。固定パターンデータとしては、例えば、全てのビットが“0”のデータとしてもよく、全てのビットが“1”のデータとしてもよい。
固定パターンデータライト処理は、ティア間動的マイグレーション後(データが他のティアのエクステントに移動された後)であって、例えば、移動したデータが格納されている仮想領域(仮想VOLにおける領域)にマッピングされるエクステント(移動元のエクステント)が別のエクステント(移動先のエクステント)に変更される前に実行され、ストレージシステム1が、固定パターンデータを、不要データが格納されているエクステント(移動元のエクステント)に対応した複数のページ(マイグレーション実行前のデータを格納していたSSD400の複数ページ)に対して、固定パターンデータ(例えば、全ビットが“0”のデータ)を書き込む処理である。
この固定パターンデータライト処理としては、図15乃至図18に示す第1乃至第4の例に示すものがある。
図15は、実施例に係る固定パターンデータライト処理の第1の例を説明する図である。
第1の例に係る固定パターンデータライト処理では、RAIDコントローラ301が、不要データを格納しているエクステント(プールを構成する論理VOL2012の領域)に対して、ライトデータの単位サイズ(例えば、24KB)の固定パターンデータ1051を書き込ませるライト要求をSSD400(SSD400のフラッシュメモリパッケージ10)へ送信する。この結果、固定パターンデータ1051は、キャッシュ340を介して、SSD400に送信される。SSD400は、不要データが格納されていた複数(この例では、3つ)のページを無効ページと設定する。そして、SSD400は、1つのページ32pに対して、固定パターンデータ1051の1つのページサイズの部分データを格納し、当該ページ32pに対して、論理ボリュームの領域(ライトデータサイズの領域)のページサイズで分割した(圧縮した)各領域を対応付けるように、論物変換テーブル110、物論変換テーブル111の情報を更新する。これにより、不要なデータを記憶している有効ページの数を低減することができる。例えば、1つのライトデータについてみると、有効ページを3つから1つにすることができる。
図16は、実施例に係る固定パターンデータライト処理の第2の例を説明する図である。
第2の例に係る固定パターンデータライト処理では、RAIDコントローラ301が、不要データを格納している論理VOL2012の領域に対して、ライトデータの単位サイズ(例えば、24KB)の固定パターンデータ1051を書き込ませる要求をSSD400へ送信する。この結果、固定パターンデータ1051は、キャッシュ340を介して、SSD400に送信される。SSD400は、不要データが格納されていた複数(この例では、3つ)のページを無効ページと設定する。そして、SSD400は、別の1つのページ32pに対して、論理ボリュームの領域(ライトデータサイズの領域)のページサイズで分割した(圧縮した)各領域を対応付けるとともに、固定パターンデータを特定することのできるデータパターン(例えば、すべて“0”の固定パターンデータであれば、“0”)を各領域に対して対応付けるように、論物変換テーブル110、物論変換テーブル111の情報を更新する。これにより、不要なデータを記憶している有効ページの数を低減することができる。例えば、1つのライトデータについてみると、有効ページを3つから1つにすることができる。また、ページに対して、データを格納せずに済む。
図17は、実施例に係る固定パターンデータライト処理の第3の例を説明する図である。
第3の例に係る固定パターンデータライト処理では、RAIDコントローラ301が、不要データを格納している論理VOL2012の領域に対する、ライトデータの単位サイズ(例えば、24KB)の固定パターンデータ1051を書き込む要求として、固定パターンデータ1051を分割した(圧縮した)ページサイズの部分データと、固定パターンデータのサイズを示すサイズ情報とを含むライト要求(固定パターンデータ指示付きライト要求)をSSD400へ送信する。この結果、部分データは、キャッシュ340を介して、SSD400に送信される。SSD400は、サイズ情報に基づいて、不要データが格納されていた複数(この例では、3つ)のページを特定し、当該ページを無効ページと設定する。そして、SSD400は、1つのページ32pに対して、部分データを格納し、当該ページ32pに対して、論理ボリュームの領域(ライトデータサイズの領域)のページサイズで分割した各領域を対応付けるように、論物変換テーブル110、物論変換テーブル111の情報を更新する。これにより、不要なデータを記憶している有効ページの数を低減することができる。例えば、1つのライトデータについてみると、有効ページを3つから1つにすることができる。
図18は、実施例に係る固定パターンデータライト処理の第4の例を説明する図である。
第4の例に係る固定パターンデータライト処理では、RAIDコントローラ301が、不要データを格納している論理VOL2012の領域に対する、ライトデータのサイズ(例えば、24KB)の固定パターンデータ1051を書き込む要求として、固定パターンデータ1051を分割した(圧縮した)ページサイズの部分データと、固定パターンデータのサイズを示すサイズ情報(例えば、24KB)とを含むライト要求をSSD400へ送信する。この結果、部分データは、キャッシュ340を介して、SSD400に送信される。SSD400は、サイズ情報に基づいて、不要データが格納されていた複数(この例では、3つ)のページを特定し、当該ページを無効ページと設定する。そして、SSD400は、別の1つのページ32pに対して、論理ボリュームの領域(ライトデータサイズの領域)のページサイズで分割した各領域を対応付けるとともに、固定パターンデータを特定することのできるデータパターン(例えば、すべて“0”の固定パターンデータであれば、“0”)を各領域に対して対応付けるように、論物変換テーブル110、物論変換テーブル111の情報を更新する。これにより、不要なデータを記憶している有効ページの数を低減することができる。例えば、1つのライトデータについてみると、有効ページを3つから1つにすることができる。また、ページに対して、データを格納せずに済む。
また、不要なデータを格納している領域(ページ)を低減する他の方法として、例えば、以下に示す第5の例に係るアンマップ要求を利用した処理を実行するようにしてもよい。
図19は、実施例に係るアンマップ要求を説明する図である。
アンマップ要求1901は、論理アドレス1902と、データ長1903とのフィールドを有する。論理アドレス1902には、無効化するページの先頭を示す論理アドレスが格納される。データ長1903には、無効化するページが含まれる論理アドレス範囲を示す先頭の論理アドレスからのデータ長が格納される。
アンマップ要求1901を使用する際には、RAIDコントローラ301が、不要データが格納されている論理アドレスの範囲を特定し、先頭の論理アドレスを論理アドレス1902に設定し、データ長1903に論理アドレスの範囲のデータ長を設定した後、アンマップ要求1901をSSD400に送信する。SSD400のフラッシュメモリパッケージ10では、アンマップ要求1901を取得すると、アンマップ要求1901の論理アドレス1902及びデータ長1903の値に基づいて、対応する論理アドレスの範囲を特定し、当該論理アドレスの範囲に対応付けられている複数のページを無効として管理するように、論物変換テーブル110、物論変換テーブル111の情報を更新する。これにより、不要なデータが格納されたページが全て無効となり、以降において、当該ページが空きページとして利用可能にすることができる。
次に、本実施例に係るストレージシステムにおいて、SSD400に不要なデータが発生する場合の他の例として、スナップショット作成処理及びスナップショット削除処理について説明する。
図20は、実施例に係るスナップショット作成処理を説明する図である。
スナップショット作成処理では、ホスト200からコピー対象のプライマリVOL1551の所定の領域(ライト領域)に対して、新データ(対応する領域に格納されているデータ(旧データ)を更新するデータ)をライトするライト要求が送信されると(図20中(1))、RAIDコントローラ301が、プライマリVOL1551のライト領域の基になっている物理領域(同図の例では、HDD(SAS)500の物理領域)から旧データを読み出して(図20中(2))、キャッシュ340を介して取得し(図20中(3))、スナップショットVOL1553におけるコピー先領域(プライマリVOL1551におけるライト領域と同じアドレスの領域)に対して、当該旧データを書き込むように処理を行う(図20中(4))。この処理では、RAIDコントローラ301は、スナップショットVOL1553のコピー先領域に割り当てたエクステント(プール2001の論理VOL2012の論理領域)に旧データを書き込むように処理を行う(図20中(5))。
旧データのライト先のエクステント(コピー先領域に割り当てられたエクステント)に対してSSD400の領域が割り当てられている場合には、RAIDコントローラ301は、そのライト先のエクステントを指定しライト対象を旧データとしたライト要求を、ライト先のエクステントに割り当てられた領域の基になっているSSD400に送信する。当該旧データがキャッシュ340を介して(図20中(6))、SSD400に送信される。SSD400は、ライト先のエクステントに対応した、FMチップの記憶領域(1以上のページ)に旧データを格納する(図20中(7))。新データが、プライマリVOL1551に格納される(図20中(8))。
図21は、実施例に係るスナップショット作成処理の他の例を説明する図である。
図20中(5)において、RAIDコントローラ301が、スナップショットVOL1553のコピー先領域に、プール2001から新たにエクステントを割り当て、当該エクステントに対して旧データを書き込む(図21中(5))。
図22は、実施例に係るスナップショット削除に伴う不要なデータを説明する図である。
スナップショット作成処理が実行された後において、ストレージシステム1が、例えば、ホスト200からスナップショットVOL1553を削除する要求を受信する場合がある。この場合には、ストレージシステム1のRAIDコントローラ301は、削除要求されたスナップショットVOL1553を削除する。ここで、スナップショットVOL1553の削除としては、RAIDコントローラ301で管理している、スナップショットVOL1553に関する情報等が、削除されることである。
この場合に、SSD400においては、旧データを格納している複数のページは、有効なデータを格納している有効ページとして管理されたままとなっている。
ここで、この不要なデータを格納している領域を低減する方法として、本実施例では、例えば、以下に示す固定パターンデータライト処理を実行する。
図23は、実施例に係るスナップショット削除後の固定パターンデータライト処理を説明する図である。
図23に示すスナップショット削除後の固定パターンデータライト処理は、固定パターンデータのライト先を、スナップショットVOL1553に割り当てられていたエクステントとする以外は、図14に示すティア間動的マイグレーション後の固定パターンデータライト処理と同様な処理である。
スナップショット削除後の固定パターンデータライト処理は、上記した図15乃至図18に示す第1乃至第4の例に示す固定パターンデータライト処理と同様な処理とすることができる。
また、不要なデータを格納している領域を低減する他の方法として、上記した図19に示す第5の例に係るアンマップ要求を利用した処理を実行するようにしてもよい。
次に、ストレージシステム1における各種テーブルについて詳細に説明する。
図24は、実施例に係る論物変換テーブルの一例を示す。
論物変換テーブル110は、フラッシュメモリパッケージ10のDRAM11に格納されているテーブルであり、論理アドレス110a、有効性110b、FM番号110c、ブロック番号110d、ページ番号110e、及びデータパターン110fのフィールドを有するレコードを管理する。
論理アドレス110aには、論理アドレスが格納される。本実施例では、この論理アドレスは、プール2001における論理VOL2012の論理アドレスであるが、その論理アドレスに代えて、論理VOL2012の論理アドレスに対応する、SSD400の論理空間の論理アドレスが、論理アドレス110aに格納されても良い。有効性110bには、対応する論理アドレスのデータの有効性、例えば、有効(フラッシュメモリパッケージ10に存在する)か、無効(フラッシュメモリパッケージ10に存在しないか)かが格納される。FM番号110cには、対応する論理アドレスのデータを格納しているFMチップ32の番号(FM番号)が格納される。ブロック番号110dには、対応する論理アドレスのデータを格納しているFMチップ32におけるブロックの番号(ブロック番号)が格納される。ページ番号110eには、対応する論理アドレスのデータを格納しているブロックにおけるページの番号(ページ番号)が格納される。
データパターン110fは、固定パターンデータライト処理で、対応するページに、実際にデータを書き込まない場合、すなわち、図16及び図18に示す第2及び第4の例の固定パターンデータライト処理を実行する場合に利用されるフィールドであり、その他の場合においては、備えてなくてもよい。データパターン110fには、対応する論理アドレスのデータを特定するために利用するデータパターン、又は、データパターンが格納されていないことを示すNULLが格納される。データパターンが格納されている場合には、当該データパターンに基づいて、対応する論理アドレスのデータを生成することができる。生成されたデータは、例えば、当該データパターンの複数倍(N倍(Nは2以上の整数))である。
論物変換テーブル110の論理アドレス110aが「0x10000000」のレコードによると、当該論理アドレスのデータは、FMチップ#0のブロック#0のページ#0に格納されており、データパターンが格納されていないことがわかる。
また、論理アドレス110aが「0x20000000」、「0x20002000」、「0x20004000」のレコードは、例えば、第2又は第4の例の固定パターンデータライト処理(図16、図18)が行われた後の対応する論理アドレスの状態を示しており、各論理アドレスで示される領域に対しては、FMチップ#1のブロック#0のページ#0が対応付けられており、データパターンが「0」であるので、各論理アドレスに対応するデータは、全てのビットが「0」のデータであることがわかる。
図25は、実施例に係る物論変換テーブルの一例を示す。
物論変換テーブル111は、フラッシュメモリパッケージ10のDRAM11に格納されているテーブルであり、FM番号111a、ブロック番号111b、ページ番号111c、状態111d、及び論理アドレス111eのフィールドを有するレコードを管理する。
FM番号111aには、FMチップ32のFM番号が格納される。ブロック番号111bには、FMチップ32におけるブロックの番号が格納される。ページ番号111cには、対応するブロックにおけるページの番号が格納される。状態111dには、対応するページの状態が格納される。ページの状態としては、論理アドレスに対応するデータが格納されていることを示す「有効」と、論理アドレスに対応するデータが格納されていない、すなわち、不要データが格納されていることを示す「無効」と、データが格納されていない「空き」とがある。論理アドレス111eには、対応するページに格納されるデータのプール2001における論理VOL2012の論理アドレスが格納される。
本実施例では、物論変換テーブル111は、1つのページに対して、複数(同図では、例えば、4つ)のレコードを管理するようにしている。これは、固定パターンデータライト処理において、ライトデータ(複数のページサイズ)を格納する論理領域中のページサイズ毎に分割した複数の部分領域について、共通の1つのページを割り当てて管理するためである。このようにレコードを管理することにより、1つのページと、対応する複数の部分領域との対応関係を適切に管理することができる。1つのページに対して備えるレコード数は、ライトデータの最大サイズがページサイズの何倍であるかにより決定すればよい。
物論変換テーブル111の上から4つのレコードによれば、FMチップ#0のブロック#0のページ#0は、有効であり、論理アドレスが「0x10000000」のデータのみが格納されていることがわかる。
また、FMチップ#1のブロック#0のページ#0の4つのレコードによれば、論理アドレスが「0x20000000」、「0x20002000」、「0x20004000」のデータが当該ページに格納されていることがわかる。例えば、固定パターンデータライト処理(図15乃至図18)において、固定パターンデータがライトされた場合には、これら4つのレコードが示すような状態に更新される。このように、固定パターンデータの場合には、複数のページサイズに対応する論理領域に対応付けるページ数を1にすることができる。
図26は、実施例に係るプール管理テーブルの一例を示す。
プール管理テーブル351は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、プール番号351a、デバイスタイプ351b、論理VOL番号351c、論理アドレス351d、物理VOL番号351e、物理アドレス351f及び状態351gのフィールドを有するレコードを管理する。
プール番号351aには、ストレージシステム1において、プールの番号(プール番号)が格納される。デバイスタイプ351bには、物理VOLの種別(デバイスタイプ)が格納される。論理VOL番号351cには、対応する論理VOLの番号(論理VOL番号)が格納される。論理アドレス351dには、対応する論理VOLに属する論理アドレスが格納される。物理VOL番号351eには、対応する論理アドレスの領域の基になっている物理VOLの番号(物理VOL番号)が格納される。物理アドレス351fには、対応する物理VOLにおけるアドレス(物理アドレス)が格納される。なお、デバイスタイプがSSDのように、FMチップを用いたデバイスである場合には、物理アドレス351fには、NULLが設定される。状態351gには、対応する論理アドレスの領域の状態が格納される。格納される状態としては、例えば、当該論理アドレスの領域が、仮想VOLの領域に割り当てられていることを示す「有効」、仮想VOLの領域に割り当てられていないことを示す「空き」等がある。
プール管理テーブル351の一番上のレコードによれば、プール#0の論理VOL#0x1000の論理アドレス#0x10000000の領域は、SSD#0が基になっており、仮想VOLの領域に割り当てられていることがわかる。
図27は、実施例に係る動的領域割り当てテーブルの一例を示す。
動的領域割り当てテーブル352は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、仮想VOL番号352a、ホスト論理アドレス352b、状態352c、エクステントID352d、プール番号352e、論理VOL番号352f、及び論理アドレス352gのフィールドを有するレコードを管理する。
仮想VOL番号352aには、仮想VOLを特定する仮想VOLの番号(仮想VOL番号)が格納される。ホスト論理アドレス352bには、仮想VOLに属する論理アドレスであってホストが認識することのできるアドレス(ホスト論理アドレス)が格納される。状態352cには、対応する仮想VOLのホスト論理アドレスで示される領域に、論理VOLの領域が割り当てられているか否かの情報を格納する。例えば、状態352cには、対応する仮想VOLのホスト論理アドレスで示される領域に、論理VOLの領域が割り当てられている場合には、「済」が設定され、論理VOLの領域が割り当てられていない場合には、「未」が設定される。エクステントID352dには、エクステントのIDが格納される。プール番号352eには、プールのプール番号が格納される。論理VOL番号352fには、論理VOLの論理VOL番号が格納される。論理アドレス352gには、論理VOLの領域のアドレス(論理アドレス)が格納される。
動的領域割り当てテーブル352の一番上のレコードによれば、仮想VOL「0x0000」のホスト論理アドレス「0x00000000」の領域には、エクステント#0(プール#0の論理VOL#0x1000の論理アドレス#0x10000000で示される領域)が割り当て済みであることがわかる。
図28は、実施例に係る動的エクステント領域割り当てテーブルの一例を示す。
動的エクステント領域割り当て管理テーブル353は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、ホスト200からのライトデータを格納する領域に対して、ホスト200からのデータサイズよりも大きなサイズの領域であるエクステントを割り当てるようにした場合に利用されるテーブルである。
動的エクステント領域割り当て管理テーブル353は、仮想VOL番号353a、ホスト論理アドレス353b、状態353c、エクステントID353d、プール番号353e、論理VOL番号353f、及び論理アドレス353gのフィールドを有するレコードを管理する。
仮想VOL番号353aには、仮想ボリュームを特定する仮想VOL番号が格納される。ホスト論理アドレス353bには、仮想ボリュームにおけるホストが認識することのできるホスト論理アドレスが格納される。状態353cには、対応する仮想ボリュームのホスト論理アドレスで示される領域に、論理ボリュームの領域が割り当てられているか否かの情報を格納する。例えば、状態353cには、対応する仮想ボリュームのホスト論理アドレスで示される領域に、論理ボリュームの領域が割り当てられている場合には、「済」が設定され、論理ボリュームの領域が割り当てられていない場合には、「未」が設定される。エクステントID353dには、対応する領域に割り当てられているエクステントのIDが格納される。プール番号353eには、対応する領域に割り当てられているプールのプール番号が格納される。論理VOL番号353fには、対応する領域に割り当てられている論理ボリュームの論理VOL番号が格納される。論理アドレス353gには、対応する領域に割り当てられている論理ボリュームの論理アドレスが格納される。
動的エクステント領域割り当て管理テーブル353の一番上のレコードによれば、仮想VOL#0x0000のホスト論理アドレス#0x00000000の領域には、エクステント#0(プール#0の論理VOL#0x1000の論理アドレス#0x10000000で示される領域)が割り当て済みであることがわかる。
動的エクステント領域割り当て管理テーブル353を用いた領域の割り当て方法としては、仮想VOL番号が「0x0000」であり、ホスト論理アドレスが「0x00002000」の場合には、RAIDコントローラは、仮想VOL番号が「0x0000」であり、ホスト論理アドレスが「0x00000000」のレコードを参照し、プール番号「0」、論理VOL番号「0x0000」の論理VOLを割り当て先と決定する。さらに、RAIDコントローラは、割当て対象のホスト論理アドレス「0x00002000」と、当該レコードのホスト論理アドレス「0x00000000」の差である「0x00002000」を、当該レコードの論理アドレス「0x10000000」に対して加算したアドレス「0x10002000」を、仮想ボリュームの対応する領域に割り当てる論理アドレスに決定する。
図29は、実施例に係るアクセス頻度テーブルの一例を示す。
アクセス頻度テーブル354は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、仮想VOL番号354a、ホスト論理アドレス354b、現在のデバイスタイプ354c、及びアクセス頻度354dのフィールドを有するレコードを管理する。
仮想VOL番号354aには、仮想ボリュームを特定する仮想VOL番号が格納される。ホスト論理アドレス354bには、仮想ボリュームにおけるホストが認識することのできるホスト論理アドレスが格納される。
現在のデバイスタイプ354cには、対応するホスト論理アドレスの領域に対して現在割り当てられている記憶領域のデバイスタイプが格納される。アクセス頻度354dには、対応するホスト論理アドレスの領域に対するアクセス頻度の情報が格納される。本実施例では、アクセス頻度の情報としては、アクセス頻度が高い方から「高」、「中」、「低」のいずれかが設定される。本実施例では、アクセス頻度が「高」の場合には、SSD400のエクステントにより構成されるティアにデータを移動させ、アクセス頻度が「中」の場合には、HDD(SAS)500のエクステントに構成されるティアにデータを移動させ、アクセス頻度が「低」の場合には、HDD(SATA)600のエクステントに構成されるティアにデータを移動させる必要があることを示している。なお、RAIDコントローラは、アクセス頻度テーブル354において、アクセス頻度の他に、又はアクセス頻度に代えて、最終アクセス時間、及び/又はデータ保管時間を管理し、いずれかの値を、どのエクステント内のデータをどのティアのエクステントに移動するかの判断に用いてよい。
アクセス頻度テーブル354の一番上のレコードによると、仮想VOL番号が「0x0000」であり、ホスト論理アドレスが「0x00000000」に対応する領域に対して、現在SSDデバイスの領域が割り当てられており、当該領域に対するアクセス頻度が「低」であることがわかる。
図30は、実施例に係るペア管理テーブルの一例を示す。
ペア管理テーブル355は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、プライマリVOL番号355a、有効性355b、ID355c、及びスナップショットVOL番号355dのフィールドを有するレコードを管理する。
プライマリVOL番号355aには、スナップショットを作成対象となるプライマリVOLの番号(プライマリVOL番号)が格納される。有効性355bには、対応するレコードのコピーが有効であるか否かを示す有効性が格納される。ID355cには、スナップショットを識別するための番号(ID)が格納される。ここで、同一のプライマリボリュームを対象に複数のスナップショットを作成することができるが、この番号により、スナップショット(スナップショットの世代)を識別することができる。番号は、例えば、世代と同じ値でよい。スナップショットVOL番号355dには、スナップショットVOLの番号(スナップショットVOL番号)が格納される。
ペア管理テーブル355の一番上のレコードによると、プライマリVOL番号が「0x1000」を対象としたスナップショットは、スナップショットVOL番号が「0x1001」の仮想ボリュームに格納され、当該スナップショットの番号は、「0」であり、当該スナップショットは、有効であることがわかる
図31は、実施例に係るスナップショットデータ割り当てテーブルの一例を示す。
スナップショットデータ割り当てテーブル356は、例えば、RAIDコントローラ301の共有メモリ350に格納されるテーブルであり、スナップショットVOL番号356a、ホスト論理アドレス356b、状態356c、プール番号356d、論理VOL番号356e及び論理アドレス356fのフィールドを有するレコードを管理する。
スナップショットVOL番号356aには、スナップショットが格納されるスナップショットボリュームのスナップショットVOL番号が格納される。ホスト論理アドレス356bには、仮想ボリュームにおけるホストが認識することのできるホスト論理アドレスが格納される。状態356cには、対応するホスト論理アドレスが示す領域に、論理ボリュームが割り当てられているか否かの情報が格納される。例えば、状態356cには、対応する仮想ボリュームのホスト論理アドレスで示される領域に、論理ボリュームの領域が割り当てられている場合には、「済」が設定され、論理ボリュームの領域が割り当てられていない場合には、「未」が設定される。プール番号356dには、対応する領域に割り当てられているプールのプール番号が格納される。論理VOL番号356eには、対応する領域に割り当てられている論理ボリュームの論理VOL番号が格納される。論理アドレス356fには、対応する領域に割り当てられている論理ボリュームの論理アドレスが格納される。
次に、本実施例に係るストレージシステムの処理を、フローチャートを参照して詳細に説明する。
図32は、実施例に係るライト処理のフローチャートの一例である。
ライト処理は、SSD400のフラッシュメモリパッケージ10のFMコントローラ20が、RAIDコントローラ301から所定の論理アドレス(同図の説明において、指定論理アドレスという)が示す領域へのデータのライト要求を受信した場合に実行される。
FMコントローラ20は、RAIDコントローラ301からライト要求を受信すると、物論変換テーブル111に対して空ページ検索を行い(ステップS1)、空ページ中のいずれかのページを、データを格納するページに割り当てて、対応するデータを格納し、論物変換テーブル110の指定論理アドレスに対応するレコードのFM番号110c、ブロック番号110d、及びページ番号110eを、割り当てたページに対応する値に更新する(ステップS2)。次いで、FMコントローラ20は、物論変換テーブル111を参照し、論理アドレス111eの値が指定論理アドレスであるレコードの状態111dが「有効」であるか否かを判定する(ステップS3)。
この結果、「有効」である場合(ステップS3でYES)には、当該レコードが示すページ(物理領域)のデータは、書き換え前のデータ(旧データ)であり、無効なデータとなるので、FMコントローラ20は、対応するレコードの状態111dを「有効」から「無効」に変更し(ステップS4)、処理をステップS5に進める。これにより、指定論理アドレスのデータを格納していたページは、無効の状態として管理されることとなる。一方、「有効」でない場合(ステップS3でNO)には、FMコントローラ20は、処理をステップS5に進める。
ステップS5では、FMコントローラ20は、物論変換テーブル111におけるステップS2で割り当てたページに対応するレコードの状態111dを「空き」から「有効」に変更し(ステップS5)、論物変換テーブル110の指定論理アドレスに対応するレコードの有効性110bを「有効」に変更し、処理を終了する。
次に、SSD400におけるFMチップ32のブロックのデータを消去するブロック消去処理について説明する。
図33は、実施例に係るブロック消去処理のフローチャートの一例である。
ブロック消去処理は、例えば、FMチップ32における利用可能な容量の枯渇をFMコントローラ20が検出したことを契機として、FMコントローラ20により実行される。容量の枯渇とは、空きブロックの数が所定割合(所定数)未満になったことを意味する。容量枯渇の検出は、任意の単位でよい。また、ブロック消去処理は、FMコントローラ20により所定の時間おきに定期的に実行されてもよい。
FMコントローラ20は、処理対象とする物理ブロック番号を特定する(ステップS10)。ここで、処理対象とする物理ブロック番号は、以前にブロック消去処理の対象としたブロックの次のブロックの番号としてもよい。
次いで、FMコントローラ20は、物論変換テーブル111の特定した物理ブロック番号に対応するレコードを参照し、当該レコードの状態111dが無効、すなわち、対応するページが無効であるか否かを判定する(ステップS11)。この結果、対応するページが無効でない場合(ステップS11でNO)には、当該ブロックには、有効ページが存在し、当該ブロックを消去することができないことを意味しているので、ブロック消去処理を終了する。
一方、対応するページが無効である場合(ステップS11でYES)には、FMコントローラ20は、当該ブロックに対応する次のレコードがあるか否かを判定する(ステップS12)。
この判定の結果、当該ブロックに対応する次のレコードがある場合(ステップS12でYES)には、同一のページ又は、次のページについての状態を確認する必要があるので、FMコントローラ20は、処理をステップS11に進める。一方、この判定の結果、当該ブロックに対応する次のレコードがない場合(ステップS12でNO)には、当該ブロックの全てのページが無効であることを意味するので、FMコントローラ20は、当該ブロックのデータを消去する(ステップS13)。
次いで、FMコントローラ20は、物論変換テーブル111を更新し(ステップS14)、処理を終了する。ここで、具体的には、FMコントローラ20は、物論変換テーブル111のデータを消去したブロックの全てのページに対応するレコードの状態111dを「空き」に変更する。これにより、FMチップ32における空き容量を増やすことができる。
次に、リクラメーション、すなわち、消去処理可能なブロックを生成する処理を説明する。
図34は、実施例に係るリクラメーションのフローチャートの一例である。
リクラメーションは、例えば、FMチップ32における利用可能な容量の枯渇をFMコントローラ20が検出したことを契機として、FMコントローラ20により実行される。容量の枯渇とは、空きブロックの数が所定割合(所定数)未満になったことを意味する。容量枯渇の検出は、任意の単位でよい。また、リクラメーションは、FMコントローラ20により所定の時間おきに定期的に実行されてもよい。
FMコントローラ20は、有効なページを格納させる移動先(リクラメーション先という)とするブロックの物理ブロック番号を特定する(ステップS21)。リクラメーション先とするブロックは、例えば、無効ページがなく、空ページが多いブロックとしてもよい。
次いで、FMコントローラ20は、有効なページを移動させる移動元(リクラメーション元という)とするブロックの物理ブロック番号を特定する(ステップS22)。リクラメーション元とするブロックは、例えば、空ページがなく、有効ページが所定数よりも少ないブロックとしてもよい。
次いで、FMコントローラ20は、リクラメーション元のブロックに有効ページがあるか否かを判定する(ステップS23)。この結果、有効ページがなければ(ステップS23でNO)、FMコントローラ20は、処理をステップS22に進める。
一方、有効ページがあれば(ステップS23でYES)、FMコントローラ20は、当該有効ページ(コピー元ページ)に格納されているデータを、リクラメーション先のブロックのページ(コピー先ページ)にコピーし(ステップS24)、論物変換テーブル110、物論変換テーブル111を更新する(ステップS25)。ここで、具体的には、FMコントローラ20は、物論変換テーブル111のコピー元ページに対応するレコードの状態111dを「無効」にし、論理アドレス111eをNULLに設定するとともに、コピー先ページに対応するレコードの状態111dを、「有効」にし、論理アドレス111eに、コピー元の論理アドレス111eに格納されていた論理アドレスを設定する。また、FMコントローラ20は、論物変換テーブル110のコピー元のページが設定されているレコードについて、コピー先ページのFM番号、ブロック番号、及びページ番号を設定する。
次いで、FMコントローラ20は、リクラメーション先のブロックに空ページがあるか否かを判定し(ステップS26)、空ページがある場合(ステップS26でYES)には、処理をステップS23に進める一方、空ページがない場合(ステップS26でNO)には、リクラメーションを終了する。
このリクラメーションにより、全てのページが無効となっているブロックを生成することができ、ブロック消去処理により、空きブロックにすることができ、FMチップの空き容量を増加させることができるようになる。
次に、動的領域割り当て処理について詳細に説明する。動的領域割り当て処理は、図11に示した処理である。
図35は、実施例に係る動的領域割り当て処理のフローチャートの一例である。
RAIDコントローラ301は、ホスト200からデータ(ライトデータ)のライト要求を受信すると(ステップS31)、動的領域割り当てテーブル352の当該ライト要求により指定されている仮想VOL番号のホスト論理アドレスに対応するレコードの状態352cが「未」であるか否か、すなわち、対応する領域にエクステントが割り当てられているか否かを判定する(ステップS32)。
この結果、レコードの状態352cが「未」でない場合(ステップS32でNO)には、当該領域に対して、エクステントが割り当てられていることを示しているので、RAIDコントローラ301は、処理をステップS35に進める。
一方、レコードの状態352cが「未」である場合(ステップS32でYES)には、当該領域に対して、エクステントが割り当てられていないことを示しているので、RAIDコントローラ301は、プール管理テーブル351からデバイスタイプ351bがSSDであるレコードであって、状態351gが「空き」であるレコードを特定し、当該レコードの論理VOL番号351cの論理VOL番号の論理ボリュームにおける、論理アドレス351dの論理アドレスに対応するエクステントを、データのライト先のエクステントとして割り当て(ステップS33)、割り当てに基づいて、動的領域割り当てテーブル352を更新する(ステップS34)。具体的には、RAIDコントローラ301は、動的領域割り当てテーブル352のレコードのプール番号352e、論理ボリューム番号352f、及び論理アドレス352gに、割当てられたエクステントに対応する値を設定し、状態352cに「済」を設定する。この後、RAIDコントローラ301は、処理をステップS35に進める。
ステップS35では、RAIDコントローラ301は、割り当てられたエクステントを示す論理VOL番号及び論理アドレスを指定して、SSD400にライトデータをライトさせるライト要求をFMコントローラ20に送信することにより、SSD400にデータをライトする(ステップS35)。なお、SSD400のFMコントローラ20は、ライト要求を受信すると、図32に示すライト処理を実行する。
次に、動的エクステント領域割り当て処理について詳細に説明する。動的エクステント領域割り当て処理は、図12に示した処理である。
図36は、実施例に係る動的エクステント領域割り当て処理のフローチャートの一例である。
RAIDコントローラ301は、ホスト200からデータ(ライトデータ)のライト要求を受信すると(ステップS41)、動的エクステント領域割り当てテーブル353を参照して、ライト先の領域に対応する状態353cが「未」であるか否か、すなわち、ライト先の領域にエクステントが割り当てられているか否かを判定する(ステップS42)。
この結果、レコードの状態353cが「未」でない場合(ステップS42でNO)には、ライト先の領域に対して、エクステントが割り当てられていることを示しているので、RAIDコントローラ301は、処理をステップS45に進める。
一方、レコードの状態353cが「未」である場合(ステップS42でYES)には、ライト先の領域に対してエクステントが割り当てられていないことを示しているので、RAIDコントローラ301は、プール管理テーブル351からデバイスタイプ351bがSSDであるレコードであって、状態351gが「空き」である複数のレコードを特定し、これらレコードの論理VOL番号351cの論理VOL番号の論理ボリュームにおける、論理アドレス351dの論理アドレスに対応するエクステントを割り当て(ステップS43)、割り当てに基づいて、動的エクステント領域割り当てテーブル353を更新する(ステップS44)。具体的には、RAIDコントローラ301は、動的エクステント領域割り当てテーブル353のレコードのプール番号353e、論理ボリューム番号353f、及び論理アドレス353gに、割当てられたエクステントに対応する値を設定し、状態353cに「済」を設定する。この後、RAIDコントローラ301は、処理をステップS45に進める。
ステップS45では、RAIDコントローラ301は、割り当てられたエクステントにおける仮想VOL番号のホスト論理アドレスに対応する論理VOL番号及び論理アドレスを指定して、ライトデータをSSD400にライトさせるライト要求をFMコントローラ20に送信することにより、SSD400にデータをライトする(ステップS45)。例えば、仮想VOL番号が「0x0000」であり、ホスト論理アドレスが「0x00002000」の場合には、仮想VOL番号が「0x0000」であり、ホスト論理アドレスが「0x00000000」のレコードを参照し、プール番号「0」、論理VOL番号「0x0000」の論理ボリュームを割り当て先と決定する。さらに、割当て対象のホスト論理アドレス「0x00002000」と、当該レコードのホスト論理アドレス「0x00000000」の差である「0x00002000」を、当該レコードの論理アドレス「0x10000000」に対して加算したアドレス「0x10002000」を、仮想ボリュームに対して割り当てる論理ボリュームの論理アドレスに決定する。なお、SSD400のFMコントローラ20は、ライト要求を受信すると、図32に示すライト処理を実行する。
次に、ティア間動的マイグレーションについて詳細に説明する。ティア間動的マイグレーションは、図13に示した処理である。
図37は、実施例に係るティア間動的マイグレーションのフローチャートの一例である。
ティア間動的マイグレーションは、例えば、定期的に実行される。RAIDコントローラ301は、アクセス頻度テーブル354から1つのレコードを取得し、当該レコードが示す仮想ボリュームの領域(対象仮想ボリューム領域)のデータが格納されている現在のデバイスタイプ354cがSSD(SSD400のデバイスタイプ)であるか否かを判定する(ステップS51)。この結果、デバイスタイプがSSDでない場合(ステップS51でNO)には、RAIDコントローラ301は、ティア間動的マイグレーションを終了する。
一方、デバイスタイプがSSDである場合(ステップS51でYES)には、RAIDコントローラ301は、対応するレコードのアクセス頻度354dが「中」であるか否かを判定する(ステップS52)。この結果、アクセス頻度354dが「中」でない場合(ステップS52でNO)には、RAIDコントローラ301は、処理をステップS57に進める。
一方、アクセス頻度354dが「中」である場合(ステップS52でYES)には、RAIDコントローラ301は、プール管理テーブル351からHDD(SAS)500の空きエクステントを検出して、当該空きエクステントを移動先エクステントとして割り当て(ステップS53)、SSD400から対象仮想ボリューム領域に対応するデータを読み出して、割り当てたHDD(SAS)500のエクステントに移動させる(ステップS54)。次いで、RAIDコントローラ301は、ホストにとって不要になったデータが格納されている領域である不要領域(ここでは移動元のエクステント)に対応するページの数を低減させるための不要低減要求を、不要領域に割り当てられているページを有するSSD400に送信する(ステップS55)。ここで、不要低減要求とは、例えば、固定パターンデータのライト要求、又はアンマップ要求である。固定パターンデータのライト要求は、ライトデータサイズの固定パターンデータを含むライト要求であってもよく、また、固定パターンデータにおける1ページ分の部分データと、固定パターンデータのサイズを示すサイズ情報とを含むライト要求であってもよい。また、不要領域が、複数のSSD400に属する場合には、RAIDグループ301は、それら複数のSSD400に不要低減要求を送信する。なお、不要低減要求を受信する側のFMコントローラ20においては、後述する図40乃至図44のいずれかの処理が実行され、フラッシュメモリパッケージ10における不要データの多くが無効データとされることとなる。
次いで、RAIDコントローラ301は、動的領域割り当てテーブル352及びアクセス頻度テーブル354を更新する(ステップS56)。具体的には、RAIDコントローラ301は、動的領域割り当てテーブル352の対象仮想ボリューム領域に対応するレコードにおけるプール番号352e、論理VOL番号352f、及び論理アドレス352gに、移動先として割り当てられたHDD(SAS)の領域の値を設定し、アクセス頻度テーブル354の対象仮想ボリューム領域に対応するレコードにおける現在のデバイスタイプ354cに「SAS」を設定する。その後、RAIDコントローラ301は、ティア間動的マイグレーションを終了する。
ステップS57では、RAIDコントローラ301は、対応するレコードのアクセス頻度354dが「低」であるか否かを判定する(ステップS57)。この結果、アクセス頻度354dが「低」でない場合(ステップS57でNO)には、RAIDコントローラ301は、ティア間動的マイグレーションを終了する。
一方、アクセス頻度354dが「低」である場合(ステップS57でYES)には、RAIDコントローラ301は、プール管理テーブル351からHDD(SATA)600の空きエクステントを検出して、当該空きエクステントを移動先エクステントとして割り当て(ステップS58)、SSD400から対象仮想ボリューム領域に対応するデータを読み出して、割り当てたエクステントに対応する、HDD(SATA)600の領域に、移動させる(ステップS59)。次いで、RAIDコントローラ301は、移動元のエクステントの基になっているSSD400に不要低減要求を送信する(ステップS60)。
次いで、RAIDコントローラ301は、動的領域割り当てテーブル352及びアクセス頻度テーブル354を更新する。具体的には、RAIDコントローラ301は、動的領域割り当てテーブル352の対象仮想ボリューム領域に対応するレコードにおけるプール番号352e、論理VOL番号352f、及び論理アドレス352gに、移動先として割り当てられたHDD(SATA)600の領域の値を設定し、アクセス頻度テーブル354の対象仮想ボリューム領域に対応するレコードにおける現在のデバイスタイプ354cに「SATA」を設定する。その後、RAIDコントローラ301は、ティア間動的マイグレーションを終了する。
次に、スナップショット作成処理について詳細に説明する。スナップショット作成処理は図21に示した処理である。
図38は、実施例に係るスナップショット作成処理のフローチャートの一例である。
RAIDコントローラ301は、ホスト200からデータ(ライトデータ:新データ)のライト要求を受信すると(ステップS71)、ペア管理テーブル355を参照して、当該ライト要求により指定されている仮想VOL番号が、プライマリVOL番号355aとして登録され、且つ有効性355bが有効であるレコードを検索することにより、スナップショットボリュームへコピーが必要であるか否かを判定する(ステップS72)。
この結果、コピーが必要でない場合(ステップS72でNO)には、処理をステップS76に進める。一方、コピーが必要である場合(ステップS72でYES)には、RAIDコントローラ301は、ライト要求により指定されている仮想ボリューム(プライマリボリューム)の領域に割当てられているエクステントに対応した、SSD400の領域から、格納されているデータ(旧データ)をキャッシュ340へステージングさせる(ステップS73)。
次いで、RAIDコントローラ301は、ステップS72でペア管理テーブル355から検索されたレコードから、スナップショットVOL番号を取得してスナップショットボリュームを特定し、旧データをプライマリボリュームからスナップショットボリュームへキャッシュ340間コピーを行う(ステップS74)。
次いで、RAIDコントローラ301は、旧データをキャッシュ340からスナップショットボリュームに割り当てられている物理領域(ここでは、SSD400のFMチップ32の記憶領域)にデステージし(ステップS75)、処理をステップS76に進める。ステップS76では、RAIDコントローラ301は、新データをプライマリボリュームの対応する領域にライトし(ステップS76)、処理を終了する。
次に、スナップショット削除処理について詳細に説明する。スナップショット削除処理は図23に示した処理である。
図39は、実施例に係るスナップショット削除処理のフローチャートの一例である。
RAIDコントローラ301は、ホスト200からスナップショットを削除する要求(スナップショット削除要求)を受領すると(ステップS81)、スナップショット削除要求に含まれているプライマリVOL番号及びIDとに基づいて、ペア管理テーブル355の対応するレコードを特定し、スナップショットVOL番号を特定した後、当該レコードの有効性355bを無効に変更する(ステップS82)。
次いで、RAIDコントローラ301は、スナップショットデータ割り当てテーブル356から、特定したスナップショットVOL番号が格納されているレコードの中から未処理の1つのレコードを特定し、当該レコードに状態356cが「済」であるか否か、すなわち、スナップショットVOL番号に対応するスナップショットボリュームにプールの領域が割り当てられているか否かを判定する(ステップS83)。
この結果、プールの領域が割り当てられていない場合、すなわち状態356cが「未」の場合(ステップS83でNO)には、スナップショットボリュームのデータが、SSD400に格納されていないことを示しているので、RAIDコントローラ301は、スナップショット削除処理を終了する。
一方、この結果、プールの領域が割り当てられている場合、すなわち状態356cが「済」の場合(ステップS83でYES)には、スナップショットボリュームのデータ(すなわち、不要データ)が、SSD400に格納されていることを示しているので、RAIDコントローラ301は、当該レコードからプール番号、論理VOL番号、及び論理アドレスを取得し、プール番号、論理VOL番号、及び論理アドレスを使用して、プール管理テーブル351から、対応するレコードを特定し、特定したレコードの物理VOL番号に対応するSSD400のフラッシュメモリパッケージ10に、不要低減要求を送信する(ステップS84)。ここで、不要低減要求とは、例えば、固定パターンデータのライト要求、又はアンマップ要求である。固定パターンデータのライト要求は、ライトデータサイズの固定パターンデータを含むライト要求であってもよく、また、固定パターンデータにおける1ページ分の部分データと、固定パターンデータのサイズを示すサイズ情報とを含むライト要求であってもよい。なお、不要低減要求を受信する側のフラッシュメモリパッケージ10のFMコントローラ20においては、後述する図40乃至図44のいずれかの処理が実行され、フラッシュメモリパッケージにおける不要データのデータ量が低減されることとなる。
次いで、RAIDコントローラ301は、スナップショットデータ割り当てテーブル356において、ステップS83で特定したレコードを削除するとともに、ページ管理テーブル351において特定したレコードの状態351gを「空き」に変更し(ステップS85)、処理をステップS83に進め、スナップショットボリュームの他の領域を対象に同様な処理を繰り返し実行する。
上記したスナップショット削除処理によると、SSD400に格納されているスナップショットの削除に係るスナップショットボリュームのデータ(不要データ)のデータ量を低減することができる。
次に、不要低減要求を受信する側のFMコントローラ20における処理の例を図40乃至図44を参照して詳細に説明する。
図40は、実施例に係る第1の例の固定パターンデータライト処理のフローチャートの一例である。
この第1の例の固定パターンデータライト処理は、図15に示した固定パターンデータライト処理である。
この例においては、RAIDコントローラ301からは、論理ボリュームの領域に対して、ライトデータのサイズ(例えば、24KB)の固定パターンデータ1051を書き込ませるライト要求が送信されているものとする。
SSD400のフラッシュメモリパッケージ10のFMコントローラ20は、RAIDコントローラ301から送信されたライト要求を受領すると(ステップS91)、ライト要求の対象のデータ(ライトデータ)が固定パターンデータであるか否かを判定する(ステップS92)。
この結果、ライトデータが固定パターンデータでない場合(ステップS92でNO)には、FMコントローラ20は、固定パターンデータライト処理を終了する。なお、このデータに対しては、通常のデータライト処理が実行されることとなる。
一方、ライトデータが固定パターンデータである場合(ステップS92でYES)には、FMコントローラ20は、物論変換テーブル111を参照し、空ページを検索し(ステップS93)、検索により得られた空ページ(ライト先共通ページ)に対して、固定パターンデータの1ページ分のデータをライトする(ステップS94)。次いで、FMコントローラ20は、論物変換テーブル110及び物論変換テーブル111を更新する(ステップS95)。
具体的には、FMコントローラ20は、物論変換テーブル111のライト対象の論理領域に属する論理アドレスに対応付けられている複数のページ(ここでは、例えば、3ページ)に対応するレコードにおいて、状態111dを無効とする。これにより、ライト対象の論理領域に割り当てられていた複数のページが無効として管理されるようになる。このため、当該ページのデータが、リクラメーションやリフラッシュにおいて、他のページにコピー等されることがなくなるとともに、以降にブロック消去処理を経て、空きページとして利用できることとなる。なお、当該ページを含むブロックのすべてのページが無効となっている場合には、この時点に、当該ブロックの消去を実行して、当該ブロックの全てのページを空ページとするようにしてもよい。このようにすると、空き容量を迅速に増加させることができる。
また、FMコントローラ20は、物論変換テーブル111のライト先共通ページに対応する複数(ここでは、3つ)のレコードにおける状態111dを有効に設定し、各レコードの論理アドレス111eにライト対象の論理領域をページサイズに分割した場合のそれぞれの部分領域に対応する論理アドレスを設定する。これにより、1つのページ(ライト先共通ページ)に対して、ライト対象の論理領域のページサイズに分割した部分領域がそれぞれ割り当てられて管理されることとなる。
また、FMコントローラ20は、論物変換テーブル110のライト対象の論理領域を示す論理アドレスに対応する複数(この例では、3つ)のレコードにおけるFM番号110c、ブロック番号110d、及びページ番号110fを、ライト先共通ページに対応する値に設定する。これにより、ライト対象の論理領域に格納されたデータを、1つのページ(ライト先共通ページ)から取得することができるようになる。これは、固定パターンデータにおける、ページサイズの複数の部分データが同一であるという特徴により実現できる。
ステップS95の後、FMコントローラ20は、処理を終了する。
図41は、実施例に係る第2の例の固定パターンデータライト処理のフローチャートの一例である。
この第2の例の固定パターンデータライト処理は、図16に示した固定パターンデータライト処理である。
この例においては、RAIDコントローラ301からは、論理ボリュームの領域に対して、ライトデータのサイズ(例えば、24KB)の固定パターンデータ1051を書き込ませるライト要求が送信されるものとする。
SSD400のフラッシュメモリパッケージ10のFMコントローラ20は、RAIDコントローラ301から送信されたライト要求を受領すると(ステップS101)、ライト要求の対象のデータ(ライトデータ)が固定パターンデータであるか否かを判定する(ステップS102)。
この結果、ライトデータが固定パターンデータでない場合(ステップS102でNO)には、FMコントローラ20は、固定パターンデータライト処理を終了する。なお、このデータに対しては、通常のデータライト処理が実行されることとなる。
一方、ライトデータが固定パターンデータである場合(ステップS102でYES)には、FMコントローラ20は、物論変換テーブル111を参照し、空ページを検索して、空ページ(ライト先共通ページ)を取得する(ステップS103)。次いで、FMコントローラ20は、論物変換テーブル110及び物論変換テーブル111を更新する(ステップS104)。
具体的には、FMコントローラ20は、物論変換テーブル111のライト対象の論理領域に属する論理アドレスに対応付けられている複数のページ(ここでは、例えば、3ページ)に対応するレコードにおいて、状態111dを無効とする。これにより、ライト対象の論理領域に割り当てられていた複数のページが無効として管理されるようになる。このため、当該ページのデータが、リクラメーションやリフラッシュにおいて、他のページにコピー等されることがなくなるとともに、以降にブロックの消去を経て、空きページとして利用できることとなる。なお、当該ページを含むブロックのすべてのページが無効となっている場合には、この時点に、当該ブロックの消去を実行して、当該ブロックの全てのページを空ページとするようにしてもよい。このようにすると、空き容量を迅速に増加させることができる。
また、FMコントローラ20は、物論変換テーブル111のライト先共通ページに対応する複数(ここでは、3つ)のレコードにおける状態111dを有効に設定し、各レコードの論理アドレス111eにライト対象の論理領域をページサイズに分割したそれぞれの部分領域に対応する論理アドレスを設定する。これにより、1つのページ(ライト先共通ページ)に対して、ライト対象の論理領域のページサイズに分割した部分領域がそれぞれ割り当てられて管理されることとなる。
また、FMコントローラ20は、論物変換テーブル110のライト対象の論理領域を示す論理アドレスに対応する複数(この例では、3つ)のレコードにおけるFM番号110c、ブロック番号110d、及びページ番号110fを、ライト先共通ページに対応する値に設定し、データパターン110fに、固定パターンデータを特定できるパターンデータ(ここでは、“0”)を格納する。これにより、ライト対象の論理領域に格納されたデータを、1つのページ(ライト先共通ページ)に対応付けることができる。これは、固定パターンデータにおけるページサイズの複数の部分データが同一であるという特徴により実現できる。なお、対応する論理領域に対してリード要求が来た場合には、1つのレコードのデータパターン110fに格納されたパターンデータに基づいて、固定パターンデータの1ページ分が作成され、複数のレコードに基づいて、固定パターンデータの全体が作成される。
ステップS104の後、FMコントローラ20は、処理を終了する。
図42は、実施例に係る第3の固定パターンデータライト処理のフローチャートの一例である。
この第3の例の固定パターンデータライト処理は、図17に示した固定パターンデータライト処理である。
この例においては、RAIDコントローラ301からは、論理ボリュームの領域に対して、ライトデータのサイズ(例えば、24KB)の固定パターンデータ1051を書き込む要求として、固定パターンデータ1051を分割したページサイズの部分データと、固定パターンデータ1051の全体のサイズを示すサイズ情報とを含むライト要求(固定パターンデータ指示付きライト要求)が送信されるものとする。したがって、RAIDコントローラ301から、SSD400に対して送信するデータ量を低減することができる。
SSD400のフラッシュメモリパッケージ10のFMコントローラ20は、RAIDコントローラ301から送信された固定パターンデータ指示付きライト要求を受領すると(ステップS111)、物論変換テーブル111を参照し、空ページを検索し(ステップS112)、検索により得られた空ページ(ライト先共通ページ)に対して、固定パターンデータの1ページ分のデータをライトする(ステップS113)。次いで、FMコントローラ20は、論物変換テーブル110及び物論変換テーブル111を更新する(ステップS114)。
具体的には、FMコントローラ20は、ライト対象の論理領域を、ライト要求中のサイズ情報に基づいて特定し、物論変換テーブル111のライト対象の論理領域に属する論理アドレスに対応付けられている複数のページ(ここでは、例えば、3ページ)に対応するレコードにおいて、状態111dを無効とする。これにより、ライト対象の論理領域に割り当てられていた複数のページが無効として管理されるようになる。このため、当該ページのデータが、リクラメーションやリフラッシュにおいて、他のページにコピー等されることがなくなるとともに、以降にブロックの消去を経て、空きページとして利用できることとなる。なお、当該ページを含むブロックのすべてのページが無効となっている場合には、この時点に、当該ブロックの消去を実行して、当該ブロックの全てのページを空ページとするようにしてもよい。このようにすると、空き容量を迅速に増加させることができる。
また、FMコントローラ20は、物論変換テーブル111のライト先共通ページに対応する複数(ここでは、3つ)のレコードにおける状態111dを有効に設定し、各レコードの論理アドレス111eにライト対象の論理領域をページサイズに分割した場合のそれぞれのページに対応する論理アドレスを設定する。これにより、1つのページ(ライト先共通ページ)に対して、ライト対象の論理領域のページサイズに分割した部分領域がそれぞれ割り当てられて管理されることとなる。
また、FMコントローラ20は、論物変換テーブル110のライト対象の論理領域を示す論理アドレスに対応する複数(この例では、3つ)のレコードにおけるFM番号110c、ブロック番号110d、及びページ番号110fを、ライト先共通ページに対応する値に設定する。これにより、ライト対象の論理領域に格納されたデータを、1つのページ(ライト先共通ページ)から取得することができるようになる。これは、固定パターンデータにおけるページサイズの複数の部分データが同一であるという特徴により実現できる。
図43は、実施例に係る第4の固定パターンデータライト処理のフローチャートの一例である。
この第4の例の固定パターンデータライト処理は、図18に示した固定パターンデータライト処理である。
この例においては、RAIDコントローラ301からは、論理ボリュームの領域に対して、ライトデータのサイズ(例えば、24KB)の固定パターンデータ1051を書き込む要求として、固定パターンデータ1051を分割したページサイズの部分データと、固定パターンデータ1051のサイズを示すサイズ情報とを含むライト要求(固定パターンデータ指示付きライト要求)が送信されるものとする。したがって、RAIDコントローラ301から、SSD400に対して送信するデータ量を低減することができる。
SSD400のフラッシュメモリパッケージ10のFMコントローラ20は、RAIDコントローラ301から送信された固定パターンデータ指示付きライト要求を受領すると(ステップS121)、物論変換テーブル111を参照し、空ページを検索して、空ページ(ライト先共通ページ)を取得する(ステップS122)。次いで、FMコントローラ20は、論物変換テーブル110及び物論変換テーブル111を更新する(ステップS123)。
具体的には、FMコントローラ20は、ライト対象の論理領域を、ライト要求中のサイズ情報に基づいて特定し、物論変換テーブル111のライト対象の論理領域に属する論理アドレスに対応付けられている複数のページ(ここでは、例えば、3ページ)に対応するレコードにおいて、状態111dを無効とする。これにより、ライト対象の論理領域に割り当てられていた複数のページが無効として管理されるようになる。このため、当該ページのデータが、リクラメーションやリフラッシュにおいて、他のページにコピー等されることがなくなるとともに、以降にブロックの消去を経て、空きページとして利用できることとなる。なお、当該ページを含むブロックのすべてのページが無効となっている場合には、この時点に、当該ブロックの消去を実行して、当該ブロックの全てのページを空ページとするようにしてもよい。このようにすると、空き容量を迅速に増加させることができる。
また、FMコントローラ20は、物論変換テーブル111のライト先共通ページに対応する複数(ここでは、3つ)のレコードにおける状態111dを有効に設定し、各レコードの論理アドレス111eにライト対象の論理領域をページサイズに分割した複数の部分領域のそれぞれに対応する論理アドレスを設定する。これにより、1つのページ(ライト先共通ページ)に対して、ライト対象の論理領域のページサイズの複数の部分領域がそれぞれ割り当てられて管理されることとなる。
また、FMコントローラ20は、論物変換テーブル110のライト対象の論理領域を示す論理アドレスに対応する複数(この例では、3つ)のレコードにおけるFM番号110c、ブロック番号110d、及びページ番号110fを、ライト先共通ページに対応する値に設定し、データパターン110fに、固定パターンデータを特定できるパターンデータ(ここでは、“0”)を格納する。これにより、ライト対象の論理領域に格納されたデータを、1つのページ(ライト先共通ページ)に対応付けることができる。これは、固定パターンデータにおけるページサイズの複数の部分データが同一であるという特徴により実現できる。なお、対応する論理領域に対してリード要求が来た場合には、1つのレコードのデータパターン110fに格納されたパターンデータに基づいて、固定パターンデータの1ページ分が作成され、複数のレコードに基づいて、固定パターンデータの全体が作成される。
図44は、実施例に係るアンマップ要求処理のフローチャートの一例である。
SSD400のフラッシュメモリパッケージ10のFMコントローラ20は、RAIDコントローラ301から送信されたアンマップ要求を受領すると(ステップS131)、アンマップ要求1901の論理アドレス1902及びデータ長1903の値に基づいて、対応する論理アドレスの記憶領域の範囲(無効化範囲)を特定し(ステップS132)、論物変換テーブル110、物論変換テーブル111を更新する(ステップS133)。
具体的には、FMコントローラ20は、物論変換テーブル111の無効化範囲に属する領域を示す論理アドレスに対応付けられている複数のレコードにおける状態111dを無効に設定する。これにより、無効化範囲に属する複数のページが無効として管理されるようになる。このため、当該ページのデータが、リクラメーションやリフラッシュにおいて、他のページにコピー等されることがなくなるとともに、以降にブロックの消去を経て、空きページとして利用できることとなる。
また、FMコントローラ20は、論物変換テーブル110の無効化範囲に属する領域を示す論理アドレスに対応付けられているレコードにおいて、状態111dを無効と設定する。これにより、無効化範囲に属する領域の論理アドレスは、ページが割り当てられていない状態として管理されることとなる。
このアンマップ要求処理によると、不要なデータが格納されているページを無効ページとすることができ、以降に実行されるブロック消去処理を経て、空きページとして利用できるようになる。
以上、一実施例を説明したが、本発明は、この実施例に限定されるものでなく、その趣旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
例えば、上記実施例では、不揮発半導体メモリの一例として、NAND型のフラッシュメモリが採用されているが、不揮発半導体メモリは、これに限られない。例えば、不揮発半導体メモリは、相変換メモリでもよい。
また、上記実施例では、不要データがSSD400に発生する例として、ティア間動的マイグレーションと、スナップショット削除処理とを示していたが、この例に限らず、不要データが発生する場合であれば、本発明を適用することができる。
また、例えば、RAIDコントローラ301が、フラッシュメモリパッケージ10に、固定パターンデータ又は部分データを送信することに代えて、固定パターンデータのライト先領域の論理アドレスを通知し、FMコントローラ20が、固定パターンデータ又は部分データを作成し、そのデータを、通知された論理アドレスの指定された領域に割り当てる物理領域に書き込んでもよい。