【実施例】
【0011】
まず、実施例に係るストレージ装置の記憶構成について説明する。
図1は、実施例に係るストレージ装置の記憶構成を示す図である。
図1に示すように、実施例に係るストレージ装置は、複数のSSD3dを使用してRAID(Redundant Arrays of Inexpensive Disks)6ベースのプール3aを管理する。また、実施例に係るストレージ装置は、複数のプール3aを有する。
【0012】
プール3aには、仮想化プールと階層化プールがある。仮想化プールは1つのティア3bを有し、階層化プールは2つ以上のティア3bを有する。ティア3bは、1つ以上のドライブグループ3cを有する。ドライブグループ3cは、SSD3dのグループであり、6〜24台のSSD3dを有する。例えば、1つのストライプを記憶する6台のSSD3dのうち、3台はユーザデータ(以下単に「データ」という)の記憶用に用いられ、2台はパリティ記憶用に用いられ、1台はホットスペア用に用いられる。なお、ドライブグループ3cは、25台以上のSSD3dを有してよい。
【0013】
次に、実施例に係るストレージ制御装置が用いるメタデータについて説明する。ここで、メタデータとは、ストレージ装置が記憶するデータを管理するためにストレージ制御装置が用いるデータである。
【0014】
図2は、実施例に係るストレージ制御装置が用いるメタデータを説明するための図である。
図2に示すように、メタデータには、論物メタと、データブロックマップと、リファレンス情報とが含まれる。
【0015】
論物メタは、論理番号をデータブロック番号とインデックスに対応付ける情報である。論理番号は、ストレージ装置を使用する情報処理装置がデータの識別に用いる論理アドレスであり、LUN(Logical Unit Number:論理ユニット番号)とLBA(Logical Block Address:論理ブロックアドレス)の組合せである。なお、論理ブロックの大きさは8KB(キロバイト)であり、重複排除を行う単位サイズになっている。情報処理装置(ホスト)からストレージ装置へのコマンドによる処理が512バイト単位であるため、本実施例では重複排除の効率化のため512バイトの整数倍分の8KB(8192バイト)にまとめたものを、ここでは一論理ブロックとしている。データブロック番号は、論理番号で識別される8KBのデータを記憶するデータブロックを識別する番号である。インデックスは、データブロック内でのデータの番号である。
【0016】
図3は、データブロックを説明するための図である。
図3では、データブロック番号(DB#)は「101」である。
図3に示すように、データブロックの大きさは384KBである。データブロックは、8KBのヘッダ領域と376KBのペイロード領域を有する。ペイロード領域は、圧縮されたデータを記憶する領域であるデータユニットを有する。データユニットはペイロード領域に追記される。
【0017】
ヘッダ領域には、192バイトのデータブロックヘッダと最大200個の40バイトのデータユニットヘッダが含まれる。データブロックヘッダは、データブロックに関する情報を記憶する領域である。データブロックヘッダには、データユニットが追記書き可能か否か、追記書きされているデータユニットの数、データユニットが次に追記書きされる位置に関する情報等が含まれる。
【0018】
データユニットヘッダは、ペイロード領域に含まれるデータユニットに対応する。データユニットヘッダは、対応するデータユニットが記憶するデータのインデックスに対応する位置にある。データユニットヘッダには、オフセットと長さとCRC(Cyclic Redundancy Check)とが含まれる。オフセットは、対応するデータユニットのデータブロック内での書き込み開始位置(先頭位置)を示す。長さは、対応するデータユニットの長さを示す。CRCは、対応するデータユニットの圧縮前の誤り検出コードである。
【0019】
図2の論物メタにおいて、例えば、論理番号が「1−1」であるデータは、データブロック番号が「B1」であるデータブロックの1番目に記憶される。ここで、「1−1」は、LUNが1でありLBAが1であることを示す。また、同じデータは、重複排除により、データブロック番号とインデックスが同じになる。
図2では、「1−2」、「2−1」及び「2−4」で識別されるデータが同じであるため、「1−2」、「2−1」及び「2−4」は、データブロック番号「B2」とインデックス「2」に対応づけられる。
【0020】
データブロックマップは、データブロック番号と物理番号とを対応付けるテーブルである。物理番号は、ドライブグループ(DG)3cを識別するDG番号(DG#)とRAIDユニット(RU)を識別するRU番号(RU#)とスロットを識別するスロット番号(スロット#)との組合せである。RAIDユニット(まとめ書き単位領域)は、データがストレージ装置に書き込まれる場合にメインメモリ上でバッファリングされるまとめ書き単位領域であり、複数のデータブロックが配置可能である。データは、RAIDユニット単位でまとめてストレージ装置に追記書きされる。RAIDユニットの大きさは例えば24MB(メガバイト)である。RAIDユニット内において各データブロックは、スロットを用いて管理される。
【0021】
図4は、データブロックマップを説明するための図である。
図4は、DG番号が「1」(DG#1)でRU番号が「1」(RU#1)であるRAIDユニットに関するデータブロックマップを示す。
図4に示すように、RAIDユニットの大きさは24MBであり、データブロックの大きさは384KBであるので、スロットの数は64個である。
【0022】
図4は、データブロックのアドレスの昇順に各スロットに割り当てられる例を示し、データブロック#101がスロット#1に記憶され、データブロック#102がスロット#2に記憶され、・・・、データブロック#164がスロット#64に記憶される。
【0023】
図2のデータブロックマップにおいて、例えば、データブロック番号「B1」が物理番号「1−1−1」に対応付けられる。データブロック番号「B1」のデータは、圧縮されてプール3aのドライブグループ#1のRU番号が「1」のRAIDユニットのスロット番号が「1」のスロットに記憶される。なお、
図2のプール3aにおいてティア3b及びそのスロットは省略されている。
【0024】
リファレンス情報は、インデックスと物理番号とリファレンスカウンタを対応付ける情報である。リファレンスカウンタは、インデックスと物理番号で識別されるデータの重複数である。なお、
図2において、物理番号にインデックスを含めてもよい。
【0025】
図5は、物理領域を説明するための図である。
図5に示すように、論物メタは、メインメモリとストレージの両方に記憶される。メインメモリには、一部の論物メタだけが記憶される。論物メタは、メインメモリでは各LUNについて1ページ(4KB)だけ記憶される。LUNとLBAの組合せに対応するページがメインメモリ上にない場合には、LUNのページがページアウトされ、LUNとLBAの組合せに対応するページがストレージからメインメモリに読み込まれる。
【0026】
ストレージでは、4TB(テラバイト)のボリューム毎に32GBの論物メタ域(論物メタが記憶される領域)3eが記憶される。論物メタ域3eは、LUN作成時に動的領域から割り当てられ固定領域化される。ここで、動的領域とは、プール3aから動的に割り当てられる領域である。論物メタ域3eはガベージコレクション(GC:Garbage Collection)の対象外である。RAIDユニットは、ストレージにデータを追記書きする時に動的領域から割り当てられる。実際には、RAIDユニットはストレージに書き込む前に一時的に記憶するライトバッファに追記書きする時に割り当てられる。RAIDユニットが記憶されるデータユニット域3fは、GCの対象である。
【0027】
図6は、RAIDユニットの追記書きを説明するための図である。
図6に示すように、LUN#1において8KBのライトI/O(ストレージへのデータの書き込み命令)を受け付けると、ライトバッファ上のデータブロックのヘッダ領域にデータユニットヘッダが書き込まれ、データは圧縮されてペイロード領域に書き込まれ、データブロックヘッダは更新される。その後、LUN#2において8KBのライトI/Oを受付すると、
図6の例では同じデータブロックのヘッダ領域にデータユニットヘッダが追記され、データは圧縮されてペイロード領域に追記され、データブロックヘッダは更新される。
【0028】
そして、ライトバッファ内に確保されたデータブロックの容量分の記憶領域において、データブロック内のヘッダ領域又はペイロード領域が一杯になる(使用可能な空き領域がなくなる)と、以降そのデータブロックには追記書きしない。そして、ライトバッファ内のRAIDユニットの全てのデータブロックが一杯になる(使用可能な空き領域がなくなる)と、ライトバッファの内容がストレージに書き込まれる。その後、当該RAIDユニットに割り当てられたライトバッファの記憶領域は解放される。
図6では、DG#1、RU#15のRAIDユニットが動的領域から割り当てられている。
【0029】
また、LUN#1へのライトI/Oが論物メタのLUN#1に対応する領域に反映され、LUN#2へのライトI/Oが論物メタのLUN#2に対応する領域に反映される。また、ライトI/Oのデータに関するリファレンスカウントが更新され、ライトI/Oがリファレンス情報に反映される。
【0030】
また、RU#15に関する情報であるRU情報#15に含まれるTDUC(Total Data Unit Count)及びGDUC(GC Data Unit Count)が更新され、ライトI/Oがガベージメータに反映される。ここで、ガベージメータは、RU情報に含まれるGC関連情報である。TDUCは、RU内のデータユニットの総数であり、データユニットの書き込み時に更新される。GDUCは、RU内の無効データユニットの数であり、リファレンスカウンタ更新時に更新される。
【0031】
また、データブロックマップにおいて、DB#101にDG#1、RU#15、スロット#1が対応付けられ、ライトI/Oがデータブロックマップに反映される。
【0032】
図7は、RAIDユニットのまとめ書きを説明するための図である。
図7に示すように、データブロックはライトバッファにバッファリングされ、RAIDユニット単位でまとめてストレージに書き込まれる。例えば、データブロック#1は、1つのストライプを記憶する6台のSSD3dに書き込まれる。
図7において、P及びQはパリティであり、Hはホットスペアである。データブロック#1は、128バイト毎に、
図7の「0」、「1」、・・・、「14」、・・・の領域に書き込まれる。
【0033】
図8Aは、論物メタのフォーマットを示す図である。
図8Aに示すように、32バイトの論物メタには、1バイトのStatusと、1バイトのData Unit Indexと、2バイトのChecksumと、2バイトのNode No.と、6バイトのBIDが含まれる。また、32バイトの論物メタには、8バイトのData Block No.が含まれる。
【0034】
Statusは、論物メタの状態を示す。状態としては、有効と無効がある。有効とは、対応LBAに論物メタが割り当て済の状態であり、無効とは、対応LBAに論物メタが未割り当ての状態である。Data Unit Indexは、インデックスである。Checksumは、対応するデータの誤り符号検出値である。Node No.は、ストレージ装置(ノード)を識別する番号である。BIDは、ブロックID(位置情報)すなわちLBAである。Data Block No.は、データブロック番号である。なお、Reservedは、将来の拡張用で全ビットが0であることを示す。
【0035】
図8Bは、データユニットヘッダのフォーマットを示す図である。
図8Bに示すように、40バイトのデータユニットヘッダには、1バイトのData Unit Statusと、2バイトのChecksumと、2バイトのOffset Block Countが含まれる。また、40バイトのデータユニットヘッダには、2バイトのCompression Byte Sizeと、32バイトのCRCが含まれる。
【0036】
Data Unit Statusは、データユニットの追記が可能か否かを示す。データユニットヘッダに対応するデータユニットが存在しない場合には追記可能であり、データユニットヘッダに対応するデータユニットが存在する場合には追記不可能である。Checksumは、対応するデータユニットの誤り符号検出値である。
【0037】
Offset Block Countは、対応するデータユニットのペイロード領域の先頭からのオフセットである。Offset Block Countは、ブロック数で表される。ただし、ここでのブロックは、SSDの消去単位のブロックではなく、512バイトのブロックである。以下では、SSDの消去単位のブロックと区別するため、512バイトのブロックを小ブロックと呼ぶ。Compression Byte Sizeは、対応するデータの圧縮後の大きさである。CRCは、対応するデータユニットの誤り検出コードである。
【0038】
図8Cは、データブロックヘッダのフォーマットを示す図である。
図8Cに示すように、192バイトのデータブロックヘッダには、1バイトのData Block Full Flagと、1バイトのWrite Data Unit Countが含まれる。また、192バイトのデータブロックヘッダには、1バイトのNext Data Unit Header Indexと、8バイトのNext Write Block Offsetと、8バイトのData Block No.が含まれる。
【0039】
Data Block Full Flagは、データユニットの追記書きが可能か否かを示すフラグである。データブロックの書き込み残容量が閾値以上で、データユニットの追記書きに十分な空き容量が存在する場合には、データユニットの追記書きが可能である。一方、データブロックの書き込み残容量が閾値未満で、データユニットの追記書きに十分な空き容量が存在しない場合には、データユニットの追記書きが不可能である。
【0040】
Write Data Unit Countは、データブロックに追記書きしてあるデータユニットの数である。Next Data Unit Header Indexは、次に書き込むデータユニットヘッダのインデックスである。Next Write Block Offsetは、次に書き込むデータユニットのペイロード領域の先頭からのオフセット位置である。単位は小ブロックの数である。Data Block No.は、スロットに割り当てられたデータブロック番号である。
【0041】
図9及び
図10は、実施例に係るメタデータ方式の特徴を説明するための図である。
図9は、論物メタとデータユニットヘッダとリファレンス情報との関係を示す図である。
図9に示すように、実施例に係るメタデータ方式では、論物メタ、データユニットヘッダ及びリファレンス情報が用いられる。論物メタのDB#とインデックスからデータユニットヘッダの格納場所が特定される。データユニットヘッダのオフセットと長さからデータブロック内でのデータユニットの位置が特定される。
【0042】
論物メタに同一のデータが複数格納された場合、重複排除機能により、同一データは1つにまとめられ、重複数はリファレンスカウンタ(RC)としてカウントされる。
図9では、DG#1のRU#2に記憶されたDB#102のインデックス「1」及び「2」のデータが2箇所ずつから参照されている。この時、インデックス「1」及び「2」のリファレンスカウンタは「2」である。インデックス「1」及び「2」のデータは有効データである。インデックス「3」及び「4」のデータは、リファレンスカウンタが「0」であるので、無効データである。
【0043】
図10は、容量効率化を説明するための図である。
図10は、8KBのデータを非圧縮で書き込む場合を示す。LUN/LBAで指定されるデータのデータユニットへの書き込みは小ブロック単位で行われる。このため、
図10(a)は、ペイロード領域に非圧縮のデータとCRCを詰め、データユニットに16小ブロックを詰めた場合を示す。また、データユニットヘッダにはCRCが含まれないため、データユニットヘッダの大きさは32バイトである。データブロック全体の記憶容量は384KBであり、ヘッダ領域は2KB、ペイロード領域は382KBである。
【0044】
この場合、非圧縮の場合のペイロード領域の使用容量は、LUN/LBAで指定される512バイト×16小ブロック+CRC32バイト=8224バイトである。しかしながら、SSDに対するコマンドは512バイトの1以上の整数倍で指定されるため、8224バイトを読み出すには512バイト×17小ブロック=8704バイトととなり、1つのデータユニットのペイロード領域は最大8704バイトに設定される。つまり、8704−8224=480バイトの記憶領域が使用されず無駄になる。非圧縮のデータユニットが多くなるほど、480バイトの整数倍の記憶領域が無駄になる。
【0045】
一方、
図10(b)に示すように、CRCをデータユニットヘッダに含めると、ペイロード領域には、512バイト×16小ブロック=8192バイトのデータを配置することになる。つまり、1つのデータユニットのペイロード領域は最大8192バイトに設定できる。したがって、前述の480バイトの無駄をなくすことができる。また、17小ブロック目の無駄な書き込みを削減でき、書き込み回数の削減の効果に寄与できる。なお、データブロック全体の記憶容量の384KBは固定であるため、ヘッダ領域は8KB、ペイロード領域は376KBとなる。したがって、実施例に係るメタデータ方式は、非圧縮時であっても、ペイロード領域を最大限に活用することができる。また、非圧縮データおよび圧縮データを効率良く詰めることができる。
【0046】
次に、実施例に係る情報処理システムの構成について説明する。
図11は、実施例に係る情報処理システムの構成を示す図である。
図11に示すように、実施例に係る情報処理システム1は、ストレージ装置1aとサーバ1bとを有する。ストレージ装置1aは、サーバ1bが使用するデータを記憶する装置である。サーバ1bは、情報処理などの業務を行う情報処理装置である。ストレージ装置1aとサーバ1bとの間は、FC(Fibre Channel)及びiSCSI(Internet Small Computer System Interface)で接続される。
【0047】
ストレージ装置1aは、ストレージ装置1aを制御するストレージ制御装置2とデータを記憶するストレージ(記憶装置)3とを有する。ここで、ストレージ3は、複数台のSSD3dの集まりである。
【0048】
なお、
図11では、ストレージ装置1aは、ストレージ制御装置#0及びストレージ制御装置#1で表される2台のストレージ制御装置2を有するが、ストレージ装置1aは、3台以上のストレージ制御装置2を有してよい。また、
図11では、情報処理システム1は、1台のサーバ1bを有するが、情報処理システム1は、2台以上のサーバ1bを有してよい。
【0049】
ストレージ制御装置2は、ストレージ3を分担して管理し、1つ以上のプール3aを担当する。ストレージ制御装置2は、上位接続部21と、キャッシュ管理部22と、重複管理部23と、メタ管理部24と、追記部25と、IO部26とを有する。
【0050】
上位接続部21は、FCドライバ及びiSCSIドライバとキャッシュ管理部22との間の情報の受け渡しを行う。キャッシュ管理部22は、キャッシュメモリ上のデータを管理する。重複管理部23は、データ重複排除/復元の制御を行うことで、ストレージ装置1a内に格納されているユニークなデータを管理する。
【0051】
メタ管理部24は、論物メタ、データブロックマップ及びリファレンスカウントを管理する。また、メタ管理部24は、論物メタ及びデータブロックマップを用いて、仮想ボリュームにおけるデータの識別に用いる論理アドレスとSSD3dにおけるデータが記憶された位置を示す物理アドレスの変換処理を行う。ここで、物理アドレスは、データブロック番号とインデックスの組である。
【0052】
メタ管理部24は、論物メタ記憶部24aと、DBM記憶部24bと、リファレンス記憶部24cとを有する。論物メタ記憶部24aは、論物メタを記憶する。DBM記憶部24bは、データブロックマップを記憶する。リファレンス記憶部24cは、リファレンス情報を記憶する。
【0053】
追記部25は、データを連続的なデータユニットで管理し、RAIDユニットの単位でSSD3dに追記及びまとめ書きを行う。また、追記部25は、データの圧縮解凍を行う。追記部25は、メインメモリ上のバッファであるライトバッファにライトデータを溜め、ライトバッファにライトデータを書き込む都度ライトバッファの空き領域が一定の閾値以下になったか否かを判定する。そして、追記部25は、ライトバッファの空き領域が一定の閾値以下になるとライトバッファをSSD3dに書き出す。追記部25は、プール3aの物理スペースを管理し、RAIDユニットの配置を行う。IO部26は、RAIDユニットのストレージ3への書き込みを行う。
【0054】
上位接続部21がデータ重複排除/復元の制御を行い、追記部25がデータの圧縮解凍を行うことで、ストレージ制御装置2は、書き込みデータを減らし、さらなる書き込み回数の削減を行うことができる。
【0055】
次に、書き込み処理のシーケンスについて説明する。
図12は、重複のないデータの書き込み処理のシーケンスを示す図であり、
図15は、重複のあるデータの書き込み処理のシーケンスを示す図である。
【0056】
重複のないデータの書き込み処理では、
図12に示すように、キャッシュ管理部22は、重複管理部23にデータのライトバックを依頼する(t1)。すると、重複管理部23は、データの重複判定を行って重複はないので(t2)、新規のデータユニットのライトを追記部25に依頼する(t3)。
【0057】
すると、追記部25は、ライトバッファを獲得し(t4)、RU#がライトバッファに割り当てられていないときに、IO部26にRU#の割り当てを依頼する(t5)。そして、追記部25は、IO部26から割り当てられたRU#を受け取る(t6)。なお、RU#がライトバッファに割り当てられている場合には、t5〜t6の処理は省略される。
【0058】
そして、追記部25は、追記位置を決定し(t7)、データを圧縮して追記する(t8)。そして、追記部25は、データユニットヘッダ及びデータブロックヘッダを更新し(t9)、まとめ書き判定を行う(t10)。そして、追記部25は、ライトバッファが一杯でまとめ書きが必要と判定した場合には、IO部26へライトバッファのまとめ書きを依頼する。そして、追記部25は、重複管理部23に完了を応答する(t11)。
【0059】
そして、重複管理部23は、メタ管理部24にリファレンスカウンタの更新を依頼し(t12)、メタ管理部24は、リファレンスカウンタを更新する(t13)。具体的には、メタ管理部24は、書き込んだデータのリファレンスカウンタをインクリメントする。また、データを上書きしている場合には、メタ管理部24は、上書き前のデータのリファレンスカウンタをデクリメントする。
【0060】
そして、メタ管理部24は、更新完了を重複管理部23に応答し(t14)、データ有効数の更新をIO部26に依頼する(t15)。ここで、データ有効数とは、TDLC及びGDLCである。IO部26は、書き込んだデータのTDLCをインクリメントし、データが上書きされる場合には、上書き前のデータのRCが0になると上書き前のデータが格納されていたRUのGLDCをデクリメントする。そして、IO部26は、データ有効数の更新完了をメタ管理部24に応答する(t16)。
【0061】
そして、重複管理部23は、論物メタの更新をメタ管理部24に依頼する(t17)。そして、メタ管理部24は、論物メタを更新し(t18)、更新完了を重複管理部23に応答する(t19)。そして、重複管理部23は、ライトバック完了をキャッシュ管理部22に応答する(t20)。キャッシュ管理部22はライトバッファの解放を行う。
【0062】
このように、追記部25は、追記位置を決定し、データを圧縮してデータブロックに追記し、データユニットヘッダ及びデータブロックヘッダを更新することで、重複のないデータをストレージ3に書き込むことができる。なお、データの圧縮/非圧縮は切替可能であり、選択的に追記部25に設定することができる。
【0063】
図13は、追記位置を決定する処理のフローを示すフローチャートである。なお、
図13に示す処理は、
図12のt7の処理に対応する。
図13に示すように、追記部25は、ライトバッファの先頭のデータブロックから順番にデータブロックに追記書きが可能か否かを判定(ステップS1)する。追記部25は、データブロックヘッダのData Block Full Flagをチェックすることで、データブロックに追記書きが可能か否かを判定する。なお、ライトバッファに追記書きが可能でなくなると新たなライトバッファが用意されるので、追記書きが可能なデータブロックはライトバッファに必ずみつかる。
【0064】
そして、追記書きが可能なデータブロックが見つかると、追記部25は、データブロック番号は未割り当てであるか否かを判定し(ステップS2)、未割り当ての場合には、メタ管理部24にデータブロック番号の割り当てを依頼する(ステップS3)。メタ管理部24は、データブロック番号を割り当て、データブロックマップで物理番号とデータブロック番号を対応付ける。
【0065】
そして、追記部25は、Next Data Unit Header Indexを用いてデータブロックヘッダのインデックスを特定し(ステップS4)、データブロック番号とデータユニットヘッダのインデックスを追記位置と決定する。
【0066】
このように、追記部25は、データブロックヘッダとデータユニットヘッダを用いてデータの追記位置を決定することができる。
【0067】
図14は、データユニットヘッダ及びデータブロックヘッダを更新する処理のフローを示すフローチャートである。なお、
図14に示す処理は、
図12のt9の処理に対応する。
図14に示すように、追記部25は、書き込まれたデータに対応するデータユニットヘッダを更新する(ステップS11)。具体的には、追記部25は、Data Unit Statusを追記不可能に更新する。
【0068】
そして、追記部25は、データが書き込まれたデータブロックのデータブロックヘッダを更新する(ステップS12)。具体的には、追記部25は、Write Dataunit Count、Next Data Unit Header Index及びNext Write Block Offsetを更新する。
【0069】
そして、追記部25は、データブロックにまだ追記書き可能か否かを判定する(ステップS13)。追記部25は、Next Write Block Offsetが閾値以下か否かに基づいて追記書き可能か否かを判定する。ペイロード領域の大きさは376KBであり、非圧縮時の場合追記書きのためには8KBの空きが必要であるので、376KB−8KB=368KB≒736小ブロック(736×512バイト)、Next Write Block Offset>736のとき追記不可能となる。
【0070】
そして、データブロックに追記書きが不可能な場合、追記部25は、データブロックヘッダのData Block Full Flagを追記書きが不可能を意味する値に更新する(ステップS14)。
【0071】
このように、追記部25は、データを書き込んだ際にデータユニットヘッダ及びデータブロックヘッダを更新することで、次にデータを書き込む際にデータブロックヘッダとデータユニットヘッダを用いてデータの追記位置を決定することができる。
【0072】
重複のあるデータの書き込み処理では、
図15に示すように、キャッシュ管理部22は、重複管理部23にデータのライトバックを依頼する(t31)。すると、重複管理部23は、データの重複判定を行って重複があるので(t32)、データを記憶するデータブロックの番号とインデックスを特定し、メタ管理部24にDB→RU変換を依頼する(t33)。ここで、DB→RU変換とは、データブロック番号を物理番号に変換することである。
【0073】
そして、メタ管理部24は、DB→RU変換を行い(t34)、物理番号を重複管理部23に応答する(t35)。そして、重複管理部23は、物理番号及びインデックスに対応するリファレンスカウンタの更新をメタ管理部24に依頼し(t36)、メタ管理部24は、リファレンスカウンタを更新する(t37)。
【0074】
そして、メタ管理部24は、IO部26にデータ有効数の更新を依頼する(t38)。そして、IO部26は、データ有効数を更新し、データ有効数の更新完了をメタ管理部24に応答する(t39)。そして、メタ管理部24は、重複管理部23にリファレンスカウンタの更新完了を応答する(t40)。
【0075】
そして、重複管理部23は、論物メタの更新をメタ管理部24に依頼する(t41)。そして、メタ管理部24は、論物メタを更新し(t42)、更新完了を重複管理部23に応答する(t43)。そして、重複管理部23は、ライトバック完了をキャッシュ管理部22に応答する(t44)。
【0076】
このように、重複管理部23は、リファレンスカウンタの更新及び論物メタの更新をメタ管理部24に依頼することで、重複のあるデータを書き込む処理を行うことができる。
【0077】
次に、読み出し処理のシーケンスについて説明する。
図16は、読み出し処理のシーケンスを示す図である。
図16に示すように、キャッシュ管理部22は、論理アドレスを用いてデータのステージングを重複管理部23に依頼する(t51)。すると、重複管理部23は、論理アドレスに対応する論物メタの獲得をメタ管理部24に依頼する(t52)。
【0078】
すると、メタ管理部24は、論物メタのリードをIO部26に依頼する(t53)。なお、該当の論物メタがキャッシュ上にない場合には、キャッシュ上のLUN及びLBAで特定されるページがページアウトされ、該当の論物メタに対応するページがページインされる。そして、IO部26は、リードした論物メタをメタ管理部24に応答し(t54)、メタ管理部24は、獲得した論物メタを重複管理部23に応答する(t55)。
【0079】
そして、重複管理部23は、獲得した論物メタに含まれるデータブロック番号について、メタ管理部24にDB→RU変換を依頼する(t56)。メタ管理部24は、DB→RU変換を行い(t57)、物理番号を重複管理部23に応答する(t58)。そして、重複管理部23は、応答された物理番号と論物メタに含まれるインデックスを用いて追記部25にデータユニットのリードを依頼する(t59)。
【0080】
そして、追記部25は、依頼されたデータユニットに対応するデータユニットヘッダのリードをIO部26に依頼し(t60)、IO部26からデータユニットヘッダを受け取る(t61)。そして、追記部25は、受け取ったデータユニットヘッダからデータユニットのオフセット位置を取得し(t62)、取得したオフセット位置のデータユニットのリードをIO部26に依頼する(t63)。
【0081】
そして、追記部25は、IO部26からデータユニットを受け取り(t64)、圧縮データを伸張する(t65)。そして、追記部25は、伸張したデータを重複管理部23に応答し(t66)、重複管理部23は、データを受け取ってキャッシュ管理部22に応答する(t67)。
【0082】
このように、重複管理部23は、論理アドレスに対応する論物メタを取得し、取得した論物メタに含まれるデータブロック番号を物理番号に変換し、物理番号と取得した論物メタに含まれるインデックスとを指定して追記部25にデータユニットのリードを依頼する。したがって、重複管理部23は、キャッシュ管理部22に依頼されたデータをストレージ3から読み出すことができる。
【0083】
上述してきたように、実施例では、論物メタ記憶部24aが、データの論理アドレスと、データを記憶するデータブロック番号及びデータブロック内でのデータの位置を示すインデックスと、を対応付ける論物メタを記憶する。また、DBM記憶部24bが、データブロック番号とストレージ3でのデータブロックの記憶位置を示す物理番号とを対応付けるデータブロックマップを記憶する。また、データブロックは、記憶するデータ毎にデータブロック内での位置を示すオフセットとデータの長さを含むデータユニットヘッダをインデックスで指定される位置に記憶するヘッダ領域と、データを記憶するペイロード領域を有する。したがって、ストレージ制御装置2は、論物メタ記憶部24a、DBM記憶部24b及びヘッダ領域を用いてペイロード領域にデータを追記書きすることで、ストレージ3への書き込み回数を減らすことができる。
【0084】
また、実施例では、ストレージ3を読み書きする単位長の整数倍の大きさを単位としてデータを記憶し、データのCRCをデータユニットヘッダに記憶するので、データが非圧縮の場合にペイロード領域を有効に利用することができる。
【0085】
また、実施例では、リファレンス記憶部24cが、データの重複数を示すリファレンスカウンタを物理番号及びインデックスと対応付けて記憶するので、ストレージ制御装置2は、重複排除を行うことができる。
【0086】
また、実施例では、データブロックに記憶するデータの数、次に書き込むデータのインデックス、次に書き込むデータのオフセットを含むデータブロックヘッダをヘッダ領域に記憶する。したがって、ストレージ制御装置2は、ペイロード領域にデータを効率良く書き込むことができる。
【0087】
また、実施例では、ストレージ制御装置2は、物理番号としてドライブグループ3cの番号、RAIDユニットの番号及びスロットの番号を用いるので、データブロックのストレージ3での記憶位置を一意に特定することができる。
【0088】
また、実施例では、追記部25がメタ管理部24及びIO部26と連携してストレージ3へデータの追記及びまとめ書きを行うので、ストレージ3への書き込み回数を減らすことができる。
【0089】
なお、実施例では、ストレージ制御装置2について説明したが、ストレージ制御装置2が有する構成をソフトウェアによって実現することで、同様の機能を有するストレージ制御プログラムを得ることができる。そこで、ストレージ制御プログラムを実行するストレージ制御装置2のハードウェア構成について説明する。
【0090】
図17は、実施例に係るストレージ制御プログラムを実行するストレージ制御装置2のハードウェア構成を示す図である。
図17に示すように、ストレージ制御装置2は、メインメモリ41と、プロセッサ42と、ホストI/F43と、通信I/F44と、接続I/F45とを有する。
【0091】
メインメモリ41は、プログラムやプログラムの実行途中結果などを記憶するRAM(Random Access Memory)である。プロセッサ42は、メインメモリ41からプログラムを読み出して実行する処理装置である。
【0092】
ホストI/F43は、サーバ1bとのインタフェースである。通信I/F44は、他のストレージ制御装置2と通信するためのインタフェースである。接続I/F45は、ストレージ3とのインタフェースである。
【0093】
そして、プロセッサ42において実行されるストレージ制御プログラムは、可搬記録媒体51に記憶され、メインメモリ41に読み込まれる。あるいは、ストレージ制御プログラムは、通信I/F44を介して接続されたコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてメインメモリ41に読み込まれる。
【0094】
また、実施例では、SSD3dを不揮発性記憶媒体として用いる場合について説明したが、本発明はこれに限定されるものではなく、SSD3dと同様に書き込み回数に制限がある他の不揮発性記憶媒体を用いる場合にも同様に適用することができる。
【0095】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0096】
(付記1)書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置において、
前記ストレージを使用する情報処理装置からのデータの識別に用いる論理アドレスと、前記データをストレージ上で配置するためのデータブロックを識別するデータブロック識別子及び前記データブロック内での前記データの追記書き順番を示すインデックスと、を対応付ける論物メタ情報を記憶する論物メタ情報記憶部と、
前記データブロック識別子と前記データブロックを記憶する前記ストレージ上の物理位置を示す物理識別子とを対応付けるマップ情報を記憶するマップ情報記憶部と、
前記データを書き込む制御を行う制御部と、
を備え、
前記データブロックは、複数インデックス分のデータに関わるヘッダ情報が記憶可能な容量を有するヘッダ領域と、複数インデックス分のデータが記憶可能な容量を有するペイロード領域を有し、
前記制御部は、
前記データブロックの物理識別子と前記インデックスに基づいて、前記データブロック及びそのペイロード領域における書き込み位置を特定して前記データを書き込み、
前記データブロック内での前記書き込み位置を示すオフセットと前記データの長さを示すデータ長とを含むデータユニットヘッダを、前記ヘッダ領域における前記インデックスで指定される位置に書き込む制御を行う、
ことを特徴とするストレージ制御装置。
【0097】
(付記2)前記制御部は、
前記データをバッファ上の対応するデータブロックに書き込み、
書き込みの都度、前記バッファ上の、複数のデータブロックが配置される容量分のまとめ書き単位領域において使用可能な空き領域がなくなったか否かを判定し、判定の結果に応じて前記ストレージへのまとめ書きを実行する
ことを特徴とする付記1に記載のストレージ制御装置。
【0098】
(付記3)前記書き込む制御は、
前記データユニットヘッダに、前記データの誤りを検出するコードを書き込む制御を含むことを特徴とする付記1又は2に記載のストレージ制御装置。
【0099】
(付記4)前記書き込む制御は、
前記ヘッダ領域に、前記データブロックに記憶するデータの数、次に書き込むデータのインデックス、次に書き込むデータのオフセットを含むデータブロックヘッダを書き込む制御をさらに含むことを特徴とする付記1、2又は3に記載のストレージ制御装置。
【0100】
(付記5)前記物理識別子は、
複数の記憶媒体をグループ化したドライブグループを識別するDG識別子と、
前記ストレージに前記データブロックをまとめ書きする単位であるまとめ書き単位領域を識別するRU識別子と、
前記まとめ書き単位領域内で前記データブロックを記憶するスロットを識別するスロット識別子と
を有することを特徴とする付記1〜4のいずれか1つに記載のストレージ制御装置。
【0101】
(付記6)前記制御部は、データの重複排除及び圧縮の制御を行うものであり、
データの重複がある場合は、前記論物メタ情報におけるデータブロック識別子及びインデックスを参照先のデータブロック識別子及びインデックスと同じに設定し、
リファレンス情報記憶部に前記データの重複数を示すリファレンスカウントと前記データを対応付けるリファレンス情報を記憶させ、
データの重複がない場合は、データの圧縮を行う
ことを特徴とする付記1〜5のいずれか1つに記載のストレージ制御装置。
【0102】
(付記7)前記記憶媒体は、書き込み回数に制限を有する半導体メモリであることを特徴とする付記1〜6のいずれか1つに記載のストレージ制御装置。
【0103】
(付記8)書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御方法において、
前記ストレージを使用する情報処理装置からのデータの識別に用いる論理アドレスと、前記データをストレージ上で配置するためのデータブロックを識別するデータブロック識別子及び前記データブロック内での前記データの追記書き順番を示すインデックスと、を対応付ける論物メタ情報を論物メタ情報記憶部に記憶し、
前記データブロック識別子と前記データブロックを記憶する前記ストレージ上の物理位置を示す物理識別子とを対応付けるマップ情報をマップ情報記憶部に記憶し、
前記データブロックは、複数インデックス分のデータに関わるヘッダ情報が記憶可能な容量を有するヘッダ領域と、複数インデックス分のデータが記憶可能な容量を有するペイロード領域を有するものであり、
前記データブロックの物理識別子と前記インデックスに基づいて、前記データブロック及びそのペイロード領域における書き込み位置を特定して前記データを書き込み、
前記データブロック内での前記書き込み位置を示すオフセットと前記データの長さを示すデータ長とを含むデータユニットヘッダを、前記ヘッダ領域における前記インデックスで指定される位置に書き込む書込制御を行うことを特徴とするストレージ制御方法。
【0104】
(付記9)前記書込制御は、
前記データをバッファ上の対応するデータブロックに書き込み、
書き込みの都度、前記バッファ上の、複数のデータブロックが配置される容量分のまとめ書き単位領域において使用可能な空き領域がなくなったか否かを判定し、判定の結果に応じて前記ストレージへのまとめ書きを実行する
ことを特徴とする付記8に記載のストレージ制御方法。
【0105】
(付記10)前記書込制御は、
前記データユニットヘッダに、前記データの誤りを検出するコードを書き込む制御を含むことを特徴とする付記8又は9に記載のストレージ制御方法。
【0106】
(付記11)前記書込制御は、
前記ヘッダ領域に、前記データブロックに記憶するデータの数、次に書き込むデータのインデックス、次に書き込むデータのオフセットを含むデータブロックヘッダを書き込む制御をさらに含むことを特徴とする付記8、9又は10に記載のストレージ制御方法。
【0107】
(付記12)書き込み回数に制限を有する記憶媒体を用いるストレージ装置を制御するストレージ制御装置が備えるコンピュータで実行されるプログラムにおいて、
前記ストレージを使用する情報処理装置からのデータの識別に用いる論理アドレスと、前記データをストレージ上で配置するためのデータブロックを識別するデータブロック識別子及び前記データブロック内での前記データの追記書き順番を示すインデックスと、を対応付ける論物メタ情報を論物メタ情報記憶部に記憶し、
前記データブロック識別子と前記データブロックを記憶する前記ストレージ上の物理位置を示す物理識別子とを対応付けるマップ情報をマップ情報記憶部に記憶し、
前記データブロックは、複数インデックス分のデータに関わるヘッダ情報が記憶可能な容量を有するヘッダ領域と、複数インデックス分のデータが記憶可能な容量を有するペイロード領域を有するものであり、
前記データブロックの物理識別子と前記インデックスに基づいて、前記データブロック及びそのペイロード領域における書き込み位置を特定して前記データを書き込み、
前記データブロック内での前記書き込み位置を示すオフセットと前記データの長さを示すデータ長とを含むデータユニットヘッダを、前記ヘッダ領域における前記インデックスで指定される位置に書き込む書込制御を行う
処理を前記コンピュータに実行させることを特徴とするストレージ制御プログラム。
【0108】
(付記13)前記書込制御は、
前記データをバッファ上の対応するデータブロックに書き込み、
書き込みの都度、前記バッファ上の、複数のデータブロックが配置される容量分のまとめ書き単位領域において使用可能な空き領域がなくなったか否かを判定し、判定の結果に応じて前記ストレージへのまとめ書きを実行する
ことを特徴とする付記12に記載のストレージ制御プログラム。
【0109】
(付記14)前記書込制御は、
前記データユニットヘッダに、前記データの誤りを検出するコードを書き込む制御を含むことを特徴とする付記12又は13に記載のストレージ制御プログラム。
【0110】
(付記15)前記書込制御は、
前記ヘッダ領域に、前記データブロックに記憶するデータの数、次に書き込むデータのインデックス、次に書き込むデータのオフセットを含むデータブロックヘッダを書き込む制御をさらに含むことを特徴とする付記12、13又は14に記載のストレージ制御プログラム。