以下に図面を参照して、開示のストレージ制御装置、およびストレージ制御プログラムの実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかるストレージ制御装置101の動作例を示す説明図である。ストレージ制御装置101は、ストレージ102を制御するコンピュータである。具体的には、ストレージ制御装置101は、ストレージ102の記憶領域をユーザに提供する。ストレージ制御装置101は、例えば、サーバである。ストレージ制御装置101は、ユーザからのデータを分割し、分割した各分割データを圧縮し、圧縮後の各データをストレージ102に書き込むことにより、ストレージ102の使用効率を高めることができる。
ここで、ストレージ102の記憶領域が、ヘッドによりアクセスされる記憶領域、例えば、ストレージ102がHDD(Hard Disk Drive)であれば、圧縮後の各データを前詰めで書き込むことが好ましい。圧縮後の各データを前詰めで書き込むことが好ましい理由は、HDDが、磁気ディスクの外周にある程高速にアクセスでき、また、連続した領域をアクセスするためシーケンシャルアクセスとなるためである。また、圧縮後の各データの間を開けずに詰めて書き込むことにより、ストレージ102の使用効率を高めることができる。
ここで、データを前詰めした際に、データの上書きが発生した場合、既にストレージに書かれている旧データを未使用扱いとした上で、新たなデータをストレージに書き込むという運用を行うことができる。この運用を行うと、ストレージ上には、未使用領域が増加することになる。未使用領域が増加すると、ストレージの使用効率が低下するため、未使用領域を解消するために、ガベージコレクション処理を実施することが考えられる。ガベージコレクション処理では、未使用となったデータ以外を前詰めして再度書き込みを行う。
しかしながら、ガベージコレクション処理を行うと、データの再配置を行うため、ストレージの負荷と、ガベージコレクション処理を実施するCPUの負荷とが増大することになる。また、データの再配置には、ストレージから読み出したデータの一時保管場所として、メモリを使用するため、一時的にメモリを消費することになる。そして、負荷の増大により、ガベージコレクション処理中のストレージの性能が低下することになる。
また、ガベージコレクション処理の実施を抑制するため、ストレージの記憶領域を等間隔で分割したデータ領域に、圧縮後のデータを書き込むことが考えられる。しかしながら、同一のサイズの複数のデータを圧縮しても、データの内容によって圧縮後のデータのサイズはそれぞれ異なる。従って、ストレージの記憶領域を等間隔で分割したデータ領域に圧縮後のデータを書き込むと、前述のデータ領域に対して圧縮後のデータが小さいほど、データが書き込まれない領域が増えることになり、ストレージの記憶領域が十分に使用されなくなる。
そこで、本実施の形態では、ストレージ102のアクセス単位の各整数倍の領域群を管理する各管理情報から、書き込みデータを圧縮した圧縮データのサイズ以上のデータ領域を特定し、前述のデータ領域に前述の圧縮データを書き込むことについて説明する。
図1を用いて、ストレージ制御装置101の動作例について説明する。ストレージ制御装置101は、ストレージ102を制御する。そして、ストレージ制御装置101は、管理情報110と、論理アドレス情報111とにアクセス可能である。管理情報110と、論理アドレス情報111とは、例えば、ストレージ制御装置101が有するメモリ内にあるが、他の装置が有する記憶領域内にあってもよい。
管理情報110は、ストレージ102のアクセス単位のサイズの整数倍の第1のサイズと第2のサイズとのそれぞれに対応して、次に示す2つの情報を有する。1つ目の情報が、ストレージ102の記憶領域から割り当てた第1のサイズまたは第2のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報である。2つ目の情報が、各データ領域の使用状況を示す情報である。アクセス単位のサイズの整数倍は、どのような倍数でもよい。図1の例では、アクセス単位のサイズが512[byte]であるとする。そして、図1の例では、ストレージ制御装置101は、第1のサイズに対応する第1の管理情報として、管理情報110−1と、第1のサイズとは異なる第2のサイズに対応する第2の管理情報として、管理情報110−2とにアクセス可能である。図1の例では、第1のサイズは、512[byte]の7倍である3584[byte]であり、第2のサイズは、512[byte]の3倍である1536[byte]である。
以下の説明では、同種の要素を区別する場合には、「管理情報110−1」、「管理情報110−2」のように参照符号を使用し、同種の要素を区別しない場合には、「管理情報110」のように参照符号のうちの共通番号だけを使用することがある。
また、ストレージ102の記憶領域から割り当てたアクセス単位のサイズの整数倍の複数のデータ領域を、「コンテナ領域」と呼称する。コンテナ領域121には、複数のデータ領域122が存在する。データ領域122の個数は2以上の整数であればいくつでもよく、例えば、1[M個]である。また、データ領域122は、シーケンシャルアクセスできるように、連続した領域であることが好ましい。図1の例では、管理情報110−1に対応するコンテナ領域121−1は、3584[byte]の複数のデータ領域122−1−0〜2を有する。また、管理情報110−2に対応するコンテナ領域121−2は、1536[byte]の複数のデータ領域122−2−0〜2を有する。また、管理情報110は、対応するコンテナ領域121を特定するため、コンテナ領域121を識別するコンテナID(IDentifier)を有する。図1の例では、コンテナ領域121−1のコンテナIDが1であり、コンテナ領域121−2のコンテナIDが2であるとする。
また、コンテナ領域121に含まれる各データ領域122の物理アドレスを特定可能な情報は、各データ領域122の物理アドレスそのものでもよいし、複数のデータ領域の先頭のデータ領域のアドレスと、データ領域のサイズとでもよい。図1の例では、管理情報110は、コンテナ領域121のコンテナ先頭アドレス112と、データ領域のサイズとして、コンテナ管理サイズ113とを有する。
また、データ領域122の使用状況を示す情報は、具体的には、下記3つの識別子のいずれかである。1つ目の識別子は、該当のデータ領域122が確保されてから一度も使用されていない状況を示す「空」である。2つ目の識別子は、該当のデータ領域122にデータが格納されており、データ領域122が使用されている状況を示す「使用中」である。3つ目の識別子は、該当のデータ領域122に過去にデータが格納されたが、現在はデータが格納されていない状況を示す「未使用」である。図1の例では、データ領域122の使用状況を示す情報を、「データ領域使用状況」と呼称する。そして、図1の例では、管理情報110は、各データ領域122のデータ領域使用状況と、各データ領域における先頭のデータ領域からの順番を示すスロット番号とを有するコンテナ情報114を有する。スロット番号は、0から開始してもよいし、1から開始してもよいが、各データ領域の物理アドレスを特定するためには、0から開始することが好ましい。図1に示すコンテナ情報114−1は、レコード115−1−0〜2を有する。また、コンテナ情報114−2は、レコード115−2−0〜2を有する。
論理アドレス情報111は、ストレージ102の記憶領域のうちのデータを書き込んだデータ領域122の物理アドレスを特定可能な情報に、前述のデータの論理アドレスを対応付けた情報である。データ領域122の物理アドレスを特定可能な情報は、データ領域122の物理アドレスそのものでもよいし、コンテナ番号とスロット番号とでもよい。コンテナ番号によって、該当のデータ領域122が属するコンテナ領域121の先頭のデータ領域122の物理アドレスと、該当のコンテナ領域121のコンテナ管理サイズ113を特定することができる。次に、スロット番号と、コンテナ管理サイズ113とによって、該当の先頭のデータ領域122から、特定しようとするデータ領域122の物理アドレスまでのオフセットを特定することができる。そして、該当の先頭のデータ領域122の物理アドレスに、前述のオフセットを加算することにより、特定しようとするデータ領域122の物理アドレスを特定することができる。
図1に示す論理アドレス情報111は、論理アドレスと、コンテナIDと、スロット番号とを有する。図1に示す論理アドレス情報111は、レコード116−0、1を有する。レコード116−0は、論理アドレスが0[KB]のデータが、コンテナID=1、スロット番号=0に格納されていることを示す。また、レコード116−1は、論理アドレスが0[KB]のデータが、コンテナID=1、スロット番号1に格納されていることを示す。
まず、ストレージ制御装置101は、所定のサイズの書き込みデータと、該当の書き込みデータの論理アドレスとを含む書き込み要求を受け付ける。所定のサイズは、ストレージ102のアクセス単位以上のサイズであれば、どのようなサイズでもよい。例えば、所定のサイズは、4096[byte]や8192[byte]等である。以下の例では、所定のサイズは、4096[byte]であるとする。また、書き込み要求を、「WriteI/O」と呼称する。また、書き込みデータを、「Writeデータ」と呼称する。同様に、読み出し要求を、「ReadI/O」と呼称する。ReadI/Oには、読み出し範囲の論理アドレスが含まれる。読み出し範囲を、「Read範囲」と呼称する。
また、ストレージ制御装置101は、所定のサイズ以上のWriteデータを含むWriteI/Oを受け付けてもよい。この場合、ストレージ制御装置101は、WriteI/Oに含まれるWriteデータを所定のデータに分割し、分割した所定のWriteデータと、分割した所定のWriteデータの論理アドレスとを受け付けたこととしてもよい。また、WriteI/Oの発行元は、ストレージ制御装置101のユーザであり、例えば、ホスト装置であるが、これに限らない。例えば、本実施の形態が適用されていないストレージから、本実施の形態が適用されるストレージ102にデータを移行させるとする。この場合、データの移行を行う装置は、本実施の形態が適用されていないストレージから読み出したデータを、Writeデータとして、ストレージ制御装置101にWriteI/Oを発行してもよい。
図1の(1)で示すように、ストレージ制御装置101は、Writeデータwdを受け付ける。また、受け付けたWriteデータの先頭の論理アドレスは0[KB]である。図1の例では、Writeデータwdが、所定のサイズである4096[KB]以上であるため、ストレージ制御装置101は、Writeデータwdを4096[KB]ごとに分割する。以下、Writeデータを分割して得られたデータを、「分割Writeデータ」と呼称する。図1の例では、図1の(2)で示すように、ストレージ制御装置101は、Writeデータwdを分割して、分割Writeデータwds−0、1、…を得る。また、分割Writeデータwds−0の論理アドレスは、0[KB]となり、分割Writeデータwds−1の論理アドレスは、4[KB]となる。ここで、論理アドレス0[0KB]、4[KB]は、論理アドレス情報111に登録されているアドレスであるから、データの上書きとなる。
次に、ストレージ制御装置101は、所定のサイズとなった分割Writeデータwdsと、分割Writeデータwdsの論理アドレスとを受け付けたことに応じて、分割Writeデータwdsを圧縮する。以下、分割Writeデータを圧縮した圧縮後のデータを、「圧縮分割Writeデータ」と呼称する。図1の例では、図1の(3−1)、(3−2)で示すように、ストレージ制御装置101は、分割Writeデータwds−1、2をそれぞれ圧縮して、圧縮分割Writeデータwdsc−0、1を得る。ここで、圧縮分割Writeデータwdsc−0、1のそれぞれのサイズが、3584[byte]、1536[byte]となったとする。
そして、ストレージ制御装置101は、管理情報110から、圧縮分割Writeデータwdscのサイズ以上のサイズに対応する管理情報110を特定する。管理情報110を特定することにより、圧縮分割Writeデータwdscの格納先となるコンテナ領域121を決定することになる。ここで、圧縮分割Writeデータwdscのサイズ以上のサイズは、圧縮分割Writeデータwdscのサイズ以上であって、最も小さいサイズであることが好ましい。図1の例では、図1の(4−1)で示すように、圧縮分割Writeデータwdsc−0のサイズが3584[byte]であるため、ストレージ制御装置101は、コンテナ管理サイズが3584[byte]である管理情報110−1を特定する。同様に、図1の(4−2)で示すように、圧縮分割Writeデータwdsc−1のサイズが1536[byte]であるため、ストレージ制御装置101は、コンテナ管理サイズが1536[byte]である管理情報110−2を特定する。
ここで、圧縮分割Writeデータwdscが得られた時点で、圧縮分割Writeデータwdscのサイズ以上であって、最も小さいサイズに対応する管理情報110が存在しない可能性もある。この場合、ストレージ制御装置101は、前述した最も小さいサイズに対応する管理情報110を生成すればよい。より具体的には、ストレージ制御装置101は、ストレージ102から、前述した最も小さいサイズの複数のデータ領域122を有するコンテナ領域121を確保する。そして、ストレージ制御装置101は、管理情報110をメモリ上に生成し、生成した管理情報110のコンテナ先頭アドレス112を、確保したコンテナ領域121の複数のデータ領域122の先頭のアドレスに設定する。また、ストレージ制御装置101は、生成した管理情報110のコンテナ管理サイズ113を、前述した最も小さいサイズに設定し、コンテナ情報114の全てのレコード115のデータ領域使用状況を「空」に設定する。
また、圧縮分割Writeデータwdscのサイズ以上であって、最も小さいサイズに対応する管理情報110が存在しても、コンテナ情報114の全てのレコード115のデータ領域使用状況が「使用中」である可能性もある。この場合にも、ストレージ制御装置101は、前述した最も小さいサイズに対応する新たな管理情報110を生成してもよい。このように、同一のサイズに対応する管理情報110は、複数あってもよい。
また、管理情報110は、最大で、アクセス単位のサイズの1倍から、所定のサイズまでのn種類生成されることになる。図1の例では、アクセス単位のサイズが512[byte]であり、所定のサイズが4096[byte]であるから、n=8となる。
次に、ストレージ制御装置101は、特定した管理情報110から特定される複数のデータ領域122の未使用のデータ領域122に、圧縮分割Writeデータwdscを書き込む。また、ストレージ制御装置101は、圧縮分割Writeデータwdscの書き込みとともに、前述の未使用のデータ領域の物理アドレスを特定可能な情報と分割Writeデータの論理アドレスとを対応付けて論理アドレス情報111に格納する。
ここで、データの上書きであり、特定したコンテナIDと、レコード116が示す上書き前となる旧データのコンテナIDとが同一となることもある。この場合、ストレージ制御装置101は、旧データのスロット番号で示されるデータ領域122に、圧縮分割Writeデータwdscを上書きしてもよい。これにより、ストレージ制御装置101は、コンテナ情報114のデータ領域使用状況や論理アドレス情報111を更新しなくてよくなる。図1の場合、データの上書きであり、論理アドレス0[KB]については、特定したコンテナIDと、レコード116−0が示す上書き前となる旧データのコンテナIDとがともに1であり、同一である。この場合、ストレージ制御装置101は、図1の(5−1)で示すように、旧データのスロット番号0で示されるデータ領域122−1−0に、圧縮分割Writeデータwdscを書き込む。
また、論理アドレス4[KB]については、特定したコンテナIDが2であり、レコード116−1が示す上書き前となる旧データのコンテナIDが2であるから、異なるコンテナIDである。この場合、ストレージ制御装置101は、図1の(5−2)で示すように、特定したコンテナID=2の未使用のデータ領域122−2−2に、圧縮分割Writeデータwdscを書き込む。また、ストレージ制御装置101は、図1の(6−2)で示すように、レコード116−1について、コンテナID=2を格納するとともに、スロット番号2とを格納する。また、ストレージ制御装置101は、旧データのコンテナID=1のレコード115−1−1のデータ領域使用状況を「未使用」に更新し、コンテナID=2のレコード115−2−2のデータ領域使用状況を「使用中」に更新する。
以上の処理により、ストレージ制御装置101は、ストレージ102を効率的に使用することができる。具体的には、1つのコンテナ領域121に含まれるデータ領域122は、全て同一サイズである。従って、ガベージコレクション処理では、例えば、後方にあるデータ領域122のデータを、前方にある未使用のデータ領域122に移動させればよく、他のデータ領域122には影響を与えない。従って、ストレージ制御装置101は、データ領域が可変長である場合に比べて、ガベージコレクション処理を実施するCPUの負荷とストレージ102の負荷とを抑制することができる。
また、ストレージ制御装置101は、圧縮分割Writeデータwdscのサイズに適したデータ領域122を使用することにより、データ領域122の記憶領域が十分に使用されるようになる。具体的には、データ領域122のサイズは、ストレージ102のアクセス単位の整数倍ごとに存在するため、圧縮分割Writeデータwdscが書き込まれたデータ領域122内で、データが書き込まれない領域のサイズは、常に512[byte]未満となる。一方、ストレージの記憶領域を等間隔で分割したデータ領域に圧縮後のデータを書き込む場合、1つのデータ領域で、圧縮後のデータが書き込まれない領域のサイズは、等間隔のデータサイズ未満となる。そして、同一のサイズの複数のデータを圧縮しても、データの内容によって圧縮後のデータのサイズはそれぞれ異なる。従って、圧縮してもデータサイズがほとんど小さくならなかった場合を担保するため、等間隔のデータサイズは、例えば圧縮前のデータサイズとなる。図1の例を用いると、圧縮前のデータサイズは、4096[byte]であるから、1つのデータ領域で、データが書き込まれない領域のサイズは、4096[byte]未満となり、本実施の形態に比べ、ストレージの記憶領域が十分に使用されていない。
また、図1では、管理情報110−1、110−2という、2つの管理情報110しか表示していないが、ストレージ制御装置101は、3つ以上の管理情報110にアクセス可能でもよい。そして、3つ以上の管理情報110にアクセス可能なストレージ制御装置101は、3つ以上の管理情報110から、圧縮分割Writeデータwdscのサイズ以上のサイズに対応する管理情報110を特定する。
また、図1で説明した方法は、ストレージ102が、重複排除が適用されたストレージであっても適用することができる。ここで、重複排除は、ストレージ内の複数のデータの中から同一のデータを検出し、複数の同一のデータのうちの1つのデータを残して他のデータを排除し、残したデータの物理アドレスに対応して、残したデータを参照する論理アドレスの数を管理する。ストレージ制御装置101を、ストレージシステムに適用した例を、図2を用いて説明する。
図2は、ストレージシステム200のハードウェア構成例を示す説明図である。ストレージシステム200は、ディスクアレイ装置201と、ホスト装置202とを有する。そして、ディスクアレイ装置201は、1以上のCM(Controller Module)211と、1以上のディスク212と、1以上のCA(Channel Adapter)213とを含む。CM211は、CPU221と、DRAM222と、フラッシュROM(Read Only Memory)223とを有する。ここで、CM211は、図1に示したストレージ制御装置101に相当する。また、ディスク212は、図1に示したストレージ102に相当する。
ディスクアレイ装置201は、複数のディスクを束ねた大容量のボリュームをユーザに提供する装置である。ホスト装置202は、ユーザが使用するホストコンピュータである。また、ホスト装置202は、ディスクアレイ装置201を利用するWebサーバ等でもよい。
CM211は、ディスク212、CA213、CPU221、DRAM222等の資源管理を行うコントローラ制御部である。ディスク212は、ユーザデータや制御情報を記憶する不揮発性の記憶装置である。例えば、ディスク212は、HDDや、SSD(Solid State Drive)である。そして、ディスク212は、全てがHDDでもよいし、全てがSSDでもよいし、HDDとSSDとが混在してもよい。
CPU221は、CM211の全体の制御を司る演算処理装置である。また、CPU221は、複数のコアを有してもよい。DRAM222は、CM211内の1次キャッシュメモリとして使用される揮発メモリである。従って、DRAM222は、ユーザデータや制御情報の一部を記憶する。フラッシュROM223は、本実施の形態におけるストレージ制御プログラムを記憶する不揮発性メモリである。不揮発性メモリの記憶媒体としては、例えば、NORフラッシュメモリや、NANDフラッシュメモリを採用することができる。
(CM211の機能構成例)
図3は、CM211の機能構成例を示す説明図である。CM211は、制御部300を有する。制御部300は、受け付け部301と、コンテナ領域決定部302と、書き込み部303と、特定部304と、読み出し部305とを含む。制御部300は、記憶装置に記憶されたプログラムをCPU221が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図2に示したフラッシュROM223などである。また、各部の処理結果は、DRAM222や、CPU221のレジスタ、CPU221のキャッシュメモリ等に格納される。
また、CM211は、記憶部310にアクセス可能である。記憶部310は、例えば、DRAM222である。記憶部310は、ブロックマップテーブル311と、データサイズ別管理テーブル312−1、2、…とを有する。ブロックマップテーブル311は、図1に示した論理アドレス情報111に相当する。データサイズ別管理テーブル312は、図1で示した管理情報110に相当する。ここで、データサイズ別管理テーブル312は、各データ領域を参照する論理アドレスの数が含まれる。ブロックマップテーブル311の記憶内容については、図4で示す。また、データサイズ別管理テーブル312の記憶内容については、図5で示す。
また、CM211は、ディスク212にアクセス可能である。そして、ディスク212には、データサイズ別管理テーブル312に対応するコンテナ領域121が確保される。ここで、図3では、1つのディスク212に複数のコンテナ領域121が確保されているが、これに限らない。例えば、1つのコンテナ領域121が、複数のディスク212に跨ってもよい。また、各データサイズ別管理テーブル312に含まれる複数のデータ領域122の各データ領域122は、重複排除により、互いに重複しないデータを有する。
受け付け部301は、WriteI/Oや、ReadI/Oを受け付ける。
コンテナ領域決定部302は、受け付け部301がWriteI/Oを受け付けたことに応じて、Writeデータwdが4096[byte]以上であれば分割し、所定のサイズとなった分割Writeデータwdsを得る。そして、コンテナ領域決定部302は、分割Writeデータwdsを圧縮した圧縮分割Writeデータwdscのサイズ以上のサイズに対応するデータサイズ別管理テーブル312を特定する。データサイズ別管理テーブル312を特定することにより、圧縮分割Writeデータwdscの格納先となるコンテナ領域121を決定することになる。
書き込み部303は、コンテナ領域決定部302が決定したコンテナ領域121のうちの未使用のデータ領域122に圧縮分割Writeデータwdscを書き込む。また、書き込み部303は、前述の圧縮分割Writeデータwdscの書き込みとともに、前述のデータ領域122のコンテナIDとスロット番頭とを対応付けてブロックマップテーブル311に格納する。また、書き込み部303は、コンテナ領域決定部302が決定したコンテナ領域121のうちの未使用のデータ領域122が複数あれば、先頭にある未使用のデータ領域122に圧縮分割Writeデータwdscを書き込んでもよい。
また、図1では、特定したコンテナIDと、上書き前となる旧データのコンテナIDとが同一となる場合、旧データのスロット番号で示されるデータ領域122に、圧縮分割Writeデータwdscを上書きしてもよいことを説明した。この方法を、重複排除に適用すると、書き込み部303は、さらに、ブロックマップテーブル311における分割Writeデータwdsの論理アドレスに対応するスロット番号で示されるデータ領域122を参照する論理アドレスの数が1であるか否かを判断する。該当の論理アドレスの数が1であれば、旧データのスロット番号で示されるデータ領域122は、複数の論理アドレスから参照されておらず、上書きすることが可能である。従って、該当のデータ領域122を参照する論理アドレスの数が1である場合、書き込み部303は、旧データのスロット番号で示されるデータ領域122に、圧縮分割Writeデータwdscを上書きする。
特定部304は、ReadI/Oを受け付けたことに応じて、Read範囲の論理アドレスが4096[byte]以上であれば分割し、所定のサイズとなった分割Read範囲を得る。そして、特定部304は、ブロックマップテーブル311を参照して、分割Read範囲の論理アドレスに対応するコンテナIDと、スロット番号とを特定する。
読み出し部305は、分割Read範囲の論理アドレスに対応するデータが書き込まれたデータ領域122の物理アドレスを算出し、ディスク212の算出した物理アドレスからデータを読み出す。具体的には、読み出し部305は、特定したコンテナIDにおける複数のデータ領域122の先頭の物理アドレスと、特定したスロット番号と、特定したコンテナIDのコンテナ管理サイズとに基づいて、前述した物理アドレスを算出する。例えば、読み出し部305は、下記(1)式によって、前述した物理アドレスを算出する。
分割Read範囲に対応するデータ領域122の物理アドレス=特定したコンテナIDのコンテナ先頭アドレス+(特定したコンテナIDのコンテナ管理サイズ×特定したスロット番号) …(1)
なお、(1)式におけるスロット番号は、0から始まる場合を想定する。スロット番号が1から始まる場合には、読み出し部305は、(1)式におけるスロット番号を1減じて算出すればよい。
図4は、ブロックマップテーブル311の記憶内容の一例を示す説明図である。図4に示すブロックマップテーブル311は、レコード401−0〜12を有する。
ブロックマップテーブル311は、論理アドレスと、物理格納コンテナIDと、物理格納スロット番号というフィールドを含む。論理アドレスフィールドには、論理アドレスを示す値が格納される。物理格納コンテナIDフィールドには、該当の論理アドレスで特定されたデータが格納されたコンテナのIDが格納される。物理格納スロット番号フィールドには、該当の論理アドレスで特定されたデータが格納されたスロット番号が格納される。
例えば、レコード401−0は、論理アドレス0[KB]で特定されるデータが、コンテナID2のスロット番号0で管理するデータ領域122に格納されたことを示す。
次に、データサイズ別管理テーブル312の一例として、データサイズ別管理テーブル312−1の記憶内容の一例を、図5を用いて説明する。
図5は、データサイズ別管理テーブル312−1の記憶内容の一例を示す説明図である。データサイズ別管理テーブル312は、コンテナIDと、コンテナ情報501と、未使用キュー502と、コンテナ管理サイズ503と、コンテナ先頭アドレス504とを有する。
コンテナIDは、CM211が管理するコンテナのIDである。コンテナ情報501は、CM211が管理するコンテナの情報を有する。図5に示すコンテナ情報501は、レコード511−0〜7を有する。
具体的には、コンテナ情報501は、スロット番号と、データ領域使用状況と、リファレンスカウンタというフィールドを含む。スロット番号フィールドには、該当のコンテナ内のスロット番号が格納される。データ領域使用状況フィールドには、スロット番号で管理するデータ領域122の使用状況を示す識別子が格納される。使用状況を示す識別子としては、図1に示した「空」、「使用中」、「未使用」である。
リファレンスカウンタフィールドには、該当のデータ領域122のリファレンスカウンタが格納される。具体的には、リファレンスカウンタは、該当のデータ領域122を参照する論理アドレスの数となる。
未使用キュー502は、該当のコンテナの中で、使用状況が「未使用」となるデータ領域122を管理するキューである。コンテナ管理サイズ503は、該当のコンテナ領域121の中のデータ領域122のサイズである。コンテナ先頭アドレス504は、該当のコンテナ領域121の中で、最も先頭にあるデータ領域122の先頭の物理アドレスである。
次に、Write受け付け時のCM211の動作例を、図6〜図8を用いて説明する。
図6は、WriteI/O受け付け時の動作例を示す説明図(その1)である。CM211は、図6の(1)で示すように、ホスト装置202から受け付けたWrite要求に含まれるWriteデータwdを、4096[byte]ごとに分割する。以降の処理は、Writeデータwdを分割した分割Writeデータwdsの単位で処理を行う。図6の例では、CM211は、Writeデータwdを分割して、分割Writeデータwds−0〜5、…を得る。
次に、CM211は、図6の(2)で示すように、ブロックマップテーブル311を参照し、各分割Writeデータwdsについて、旧データの格納位置を特定する。旧データの格納位置の特定例について具体的に説明する。例えば、Write要求が、先頭の論理アドレス0[KB]に対してWriteデータwdを書き込む、という要求であるとする。この場合、分割Writeデータwds−0の論理アドレスは、0[KB]となる。そして、CM211は、分割Writeデータwds−0について、図4に示すレコード401−0を参照して、分割Writeデータwds−0の旧データが、コンテナID2、スロット番号0であると特定する。また、分割Writeデータwds−1の論理アドレスは、4[KB]となる。この場合、分割Writeデータwds−1の論理アドレスは、0[KB]となる。そして、CM211は、分割Writeデータwds−1について、図4に示すレコード401−1を参照して、分割Writeデータwds−1の旧データが、コンテナID6、スロット番号0であると特定する。
そして、CM211は、図6の(3)で示すように、ディスク212に格納した圧縮データのうち、各分割Writeデータwdsと重複するデータがあるか否かを判断する。具体的には、CM211は、圧縮データの元データのハッシュ値を算出し、ディスク212に格納する際に、算出したハッシュ値を、物理格納コンテナIDと物理格納スロット番号とに対応付けて、DRAM222等に記憶しておく。そして、CM211は、各分割Writeデータwdsのハッシュ値を算出し、記憶したハッシュ値と比較することにより、重複するデータがあるか否かを判断する。具体的には、各分割Writeデータwdsのハッシュ値と、記憶したハッシュ値とが一致した場合、CM211は、重複するデータがあると判断する。一方、各分割Writeデータwdsのハッシュ値と、記憶した全てのハッシュ値とが異なる場合、CM211は、重複するデータがないと判断する。図6の例では、CM211は、分割Writeデータwds−0、2について、重複するデータがないと判断し、分割Writeデータwds−1について、重複するデータがあると判断する。
各分割Writeデータwdsについて、重複するデータがないと判断した場合、CM211は、図6の(4−1)で示すように、各分割Writeデータwdsを圧縮し、各圧縮分割Writeデータwdscを得る。図6の例では、CM211は、分割Writeデータwds−0、2をそれぞれ圧縮し、圧縮分割Writeデータwdsc−0、2を得る。ここで、図6に示す圧縮分割Writeデータwdsc−0は、3584[byte]になり、圧縮分割Writeデータwdsc−2は、1536[byte]になる。
一方、各分割Writeデータwdsについて、重複するデータがあると判断した場合、図6の(4−2)で示すように、重複するデータに対するリファレンスカウンタを1加算する。リファレンスカウンタの加減算については、図9で説明する。
図7は、WriteI/O受け付け時の動作例を示す説明図(その2)である。図7で示す状態は、図6の(4−1)の処理が完了した状態である。CM211は、図7の(1)で示すように、圧縮分割Writeデータwdscの圧縮後のデータサイズに応じて、ディスク書き込みサイズを決定し、決定したディスク書き込みサイズに対応するコンテナを、圧縮後のデータの格納先として決定する。具体的には、CM211は、圧縮後のデータサイズを、アクセス単位である512[byte]単位で切り上げたサイズを、ディスク書き込みサイズとして決定する。ここで、圧縮前のデータは、4096[byte]であるから、ディスク書き込みサイズは、nを1〜8のうちのいずれかの整数として、512xn[byte]となる。
図7の例では、CM211は、分割Writeデータwds−0の格納先を、コンテナ管理サイズが3584[byte]となるコンテナID=1のコンテナに決定する。同様に、CM211は、分割Writeデータwds−2の格納先を、コンテナ管理サイズが1536[byte]となるコンテナID=2のコンテナに決定する。
図8は、WriteI/O受け付け時の動作例を示す説明図(その3)である。図8で示す状態は、図7の(1)で示した処理が完了した後の状態を示す。CM211は、図8の(1)で示すように、格納先として決定したコンテナの未使用キュー502に接続されているデータ領域122があるか否かを判断する。図8の例では、CM211は、分割Writeデータwds−0の格納先として決定したコンテナID=1の未使用キュー502を参照して、未使用キュー502に接続されているデータ領域122があると判断する。また、CM211は、分割Writeデータwds−2の格納先として決定したコンテナID=2の未使用キュー502を参照して、未使用キュー502に接続されているデータ領域122がないと判断する。
次に、CM211は、未使用キュー502に接続されているデータ領域122があると判断した場合、図8の(2−1)で示すように、格納先として決定したコンテナの未使用キュー502の先頭のデータ領域122に圧縮分割Writeデータwdscを書き込む。図8の例では、CM211は、データサイズ別管理テーブル312−1の未使用キュー502の先頭となるスロット番号1で管理するデータ領域122に、圧縮分割Writeデータwdsc−0を書き込む。
また、CM211は、未使用キュー502に接続されているデータ領域122がないと判断したとする。この場合、CM211は、図8の(2−2)で示すように、格納先として決定したコンテナの空のデータ領域122を獲得し、獲得した空のデータ領域122に、圧縮分割Writeデータwdscを書き込む。図8の例では、CM211は、データサイズ別管理テーブル312−2のコンテナ情報501のうち、使用状況が「空」となるスロット番号3で管理するデータ領域122に、圧縮分割Writeデータwdsc−2を書き込む。ここで、図8では、圧縮分割Writeデータwdsc−0、2を書き込んだ領域に網掛けを付与する。
図9は、リファレンスカウンタ加減算処理の動作例を示す説明図である。図9で示す状態は、図8の(2−1)、(2−2)のそれぞれの処理が完了した状態である。CM211は、図9の(1)で示すように、今回圧縮分割Writeデータwdscを書き込んだデータ領域122のリファレンスカウンタを加算する。また、CM211は、今回圧縮分割Writeデータwdscを書き込む前に使用していたデータ領域122のリファレンスカウンタを減算する。
図9の例では、圧縮分割Writeデータwdsc−0を書き込む前に使用していたデータ領域122が、データサイズ別管理テーブル312−1のスロット番号5で管理するデータ領域122であるとする。また、圧縮分割Writeデータwdsc−2を書き込む前に使用していたデータ領域122が、データサイズ別管理テーブル312−2のスロット番号2で管理するデータ領域122であるとする。従って、CM211は、データサイズ別管理テーブル312−1のレコード511−1と、データサイズ別管理テーブル312−2のレコード511−3のリファレンスカウンタを1インクリメントする。また、CM211は、データサイズ別管理テーブル312−1のレコード511−5と、データサイズ別管理テーブル312−2のレコード511−2のリファレンスカウンタを1デクリメントする。
図10は、ReadI/O受け付け時の動作例を示す説明図である。図10で示す状態は、図9の(1)の処理が完了した後に、ホスト装置202からRead要求を受け付けた状態である。CM211は、図10の(1)で示すように、ホスト装置202から受け付けたRead要求に含まれるRead範囲raを、4096[byte]ごとに分割する。以降の処理は、Read範囲raを分割した分割Read範囲rasの単位で処理を行う。図10の例では、CM211は、Read範囲raを分割して、分割Read範囲ras−0〜3、…を得る。また、図10では、分割Read範囲ras−3について示す。
次に、CM211は、図10の(2)で示すように、ブロックマップテーブル311を参照して、各分割Read範囲rasの圧縮分割データが格納されているデータ領域122のコンテナIDと、スロット番号とを特定する。図10の例では、CM211は、図4に示すレコード401−3を参照して、分割Read範囲ras−3のデータが格納されているデータ領域122のコンテナIDが1であり、スロット番号が5であると特定する。
そして、CM211は、図10の(3)で示すように、特定したコンテナIDに対応するデータサイズ別管理テーブル312を参照して、各分割Read範囲rasの圧縮分割データが格納されているデータ領域122の物理アドレスを算出する。具体的には、CM211は、図3で示した(1)式に従って、各分割Read範囲rasに対応するデータ領域122の物理アドレスを算出する。
図10の例では、CM211は、分割Read範囲ras−3に対応するデータ領域122の物理アドレスを、(1)式に従って下記のように算出する。
分割Read範囲ras−3に対応するデータ領域122の物理アドレス=0x20000000+(3584×5)=0x20004600
次に、CM211は、図10の(4)で示すように、ディスク212上の算出した物理アドレスから、圧縮分割データを読み出す。図10の例では、CM211は、物理アドレス0x20004600から、圧縮分割データdsc−3を読み出す。この後、CM211は、読み出した圧縮分割データdsc−3を伸長し、伸長して得られたデータをホスト装置202に送信する。
次に、CM211が実行する処理を示すフローチャートを、図11〜図13を用いて説明する。
図11は、WriteI/O受け付け時処理手順の一例を示すフローチャートである。CM211は、ホスト装置202からWriteI/Oを受け付ける(ステップS1101)。次に、CM211は、Writeデータwdを4096[byte]ごとに分割する(ステップS1102)。Writeデータwdが4096[byte]以上である場合、CM211は、ステップS1103〜S1105の処理を、Writeデータwdを分割することにより得られた分割Writeデータwdsごとに実施する。図11、図12の説明では、各分割Writeデータwdsのうちの1つの分割Writeデータwdsについて説明する。
そして、CM211は、ブロックマップテーブル311を参照し、分割Writeデータwdsについて、旧データの格納位置を特定する(ステップS1103)。次に、CM211は、分割Writeデータwdsと重複するデータがあるか否かを判断する(ステップS1104)。
分割Writeデータwdsと重複するデータがない場合(ステップS1104:重複するデータなし)、CM211は、分割Writeデータwdsを圧縮する(ステップS1105)。次に、CM211は、分割Writeデータwdsを圧縮して得られた圧縮分割Writeデータwdscのサイズに応じて、ディスク書き込みサイズを決定する(ステップS1106)。そして、CM211は、ディスク書き込みサイズに対応するコンテナを、圧縮分割Writeデータwdscの格納先として決定する(ステップS1107)。次に、CM211は、格納先として決定したコンテナの未使用キューに接続されているデータ領域122があるか否かを判断する(ステップS1108)。
格納先として決定したコンテナの未使用キューに接続されているデータ領域122がない場合(ステップS1108:未使用キューにデータ領域の登録なし)、CM211は、格納先として決定したコンテナの空のデータ領域122を獲得する(ステップS1109)。そして、CM211は、獲得した空のデータ領域122に、圧縮分割Writeデータwdscを書き込む(ステップS1110)。
また、格納先として決定したコンテナの未使用キューに接続されているデータ領域122がある場合(ステップS1108:未使用キューにデータ領域の登録あり)、CM211は、格納先として決定したコンテナの未使用キューの先頭のデータ領域122に、圧縮分割Writeデータwdscを書き込む(ステップS1111)。そして、CM211は、圧縮分割Writeデータwdscを書き込んだデータ領域122を、未使用キューから削除する(ステップS1112)。
ステップS1110、または、ステップS1112の処理終了後、または、分割Writeデータwdsと重複するデータがある場合(ステップS1104:重複するデータあり)、CM211は、リファレンスカウンタ加減算処理を実行する(ステップS1113)。リファレンスカウンタ加減算処理は、図12で説明する。
そして、CM211は、ブロックマップテーブル311を更新する(ステップS1114)。ステップS1114の処理について、より具体的に説明する。ここで、更新対象となる箇所は、ブロックマップテーブル311における、分割Writeデータwdsの論理アドレスに対応するレコードの物理格納コンテナIDおよび物理格納スロット番号である。以下、該当の物理格納コンテナIDおよび物理格納スロット番号を、「更新対象の該当の物理格納コンテナIDおよび物理格納スロット番号」と称する。
例えば、CM211が、ステップS1104の処理で、重複するデータありと判断したとする。この場合、CM211は、更新対象の物理格納コンテナIDおよび物理格納スロット番号を、重複するデータが格納されている物理格納コンテナIDおよび物理格納スロット番号に更新する。
また、CM211が、ステップS1108の処理について、未使用キューにデータ領域122の登録なしと判断したとする。この場合、CM211は、更新対象の物理格納コンテナIDおよび物理格納スロット番号を、獲得したデータ領域122の物理格納コンテナIDおよび物理格納スロット番号に更新する。一方、CM211が、ステップS1108の処理について、未使用キューにデータ領域122の登録ありと判断したとする。この場合、CM211は、更新対象の物理格納コンテナIDおよび物理格納スロット番号を、圧縮分割Writeデータを書き込んだデータ領域122の物理格納コンテナIDおよび物理格納スロット番号に更新する。
ステップS1114の処理終了後、CM211は、WriteI/O受け付け時処理を終了する。
図12は、リファレンスカウンタ加減算処理手順の一例を示すフローチャートである。CM211は、今回の圧縮分割Writeデータwdscを書き込んだデータ領域122のリファレンスカウンタを1加算する(ステップS1201)。また、CM211は、今回の圧縮分割Writeデータを書き込む前に使用していたデータ領域122のリファレンスカウンタを1減算する(ステップS1202)。そして、CM211は、今回のリファレンスカウンタの更新により、リファレンスカウンタが0になったデータ領域122があるか否かを判断する(ステップS1203)。
リファレンスカウンタが0になったデータ領域122がある場合(ステップS1203:リファレンスカウンタが0になったデータ領域あり)、CM211は、対象のデータ領域122を未使用として、未使用キューに対象のデータ領域122を接続する(ステップS1204)。ステップS1204の処理終了後、または、リファレンスカウンタが0になったデータ領域122がない場合(ステップS1203:リファレンスカウンタが0になったデータ領域なし)、CM211は、リファレンスカウンタ加減算処理を終了する。
図13は、ReadI/O受け付け時処理手順の一例を示すフローチャートである。CM211は、ReadI/Oを受け付ける(ステップS1301)。次に、CM211は、Read範囲raを4096[byte]ごとに分割する(ステップS1302)。Read範囲raが4096[byte]以上である場合、CM211は、ステップS1303〜S1306の処理を、Read範囲raを分割することにより得られた分割Read範囲rasごとに実施する。図11、図12の説明では、各分割Writeデータwdsのうちの1つの分割Read範囲rasについて説明する。
そして、CM211は、ブロックマップテーブル311を参照して、分割Read範囲rasについて、コンテナIDと、スロット番号とを特定する(ステップS1303)。次に、CM211は、特定したコンテナIDに対応するデータサイズ別管理テーブル312を参照して、分割Read範囲rasに対応するデータ領域122の物理アドレスを算出する(ステップS1304)。そして、CM211は、ディスク212上の算出したアドレスから、圧縮分割データを読み出す(ステップS1305)。次に、CM211は、読み出した圧縮分割データを伸長する(ステップS1306)。ステップS1306の処理終了後、CM211は、各圧縮分割データを伸長して得られた各分割データを結合し、結合したデータをReadデータとして、ホスト装置202に送信し、ReadI/O受け付け時処理を終了する。
以上説明したように、実施の形態1にかかるCM211は、データサイズ別管理テーブル312から、圧縮分割Writeデータwdscのサイズ以上のデータ領域122を特定し、特定したデータ領域122に前述の圧縮分割Writeデータwdscを書き込む。これにより、CM211は、ディスク212を効率的に使用することができる。具体的には、図1で述べたように、CM211は、データ領域122が可変長である場合に比べて、CPU221の負荷とディスク212の負荷とを抑制することができる。また、CM211は、ディスク212の記憶領域を十分に使用することができる。
また、CM211は、ディスク212がHDDである際に、コンテナ領域決定部302が決定したコンテナ領域121のうちの未使用のデータ領域122が複数あれば、先頭にある未使用のデータ領域122に圧縮分割Writeデータwdscを書き込んでもよい。これにより、CM211は、ガベージコレクション処理が不要になり、常に前詰め状態でWriteI/OやReadI/Oを継続することができる。また、上述の効果は、ディスク212の記憶領域が、ヘッドによってアクセスされればよく、例えば、ディスク212が、光ディスク等でもよい。ディスク212がHDDであれば、ヘッドは、磁気ヘッドである。また、ディスク212が、光ディスクであれば、ヘッドは、光ヘッドである。
また、CM211は、(1)式に基づいて、分割Read範囲rasに対応するデータ領域の物理アドレスを算出してもよい。これにより、CM211は、読み出し対象となる物理アドレスが容易に特定できるため、読み出し速度を向上することができる。具体的には、ストレージの記憶領域を分割せずに、圧縮後のデータを前詰めで書き込んでいく場合、圧縮後のデータは可変であるため、圧縮後のデータを格納したデータ領域の識別子と、データ領域の物理アドレスとを対応付けたテーブルを用意することになる。しかしながら、本実施の形態では、読み出し対象となる物理アドレスが、コンテナ管理サイズ×スロット番号で求められるため、前述したテーブルを参照しなくてよい。従って、CM211は、読み出し速度を向上することができる。
また、重複排除を行わない場合、CM211は、特定したコンテナIDと、旧データのコンテナIDとが同一であれば、旧データのスロット番号で示されるデータ領域122に、圧縮分割Writeデータwdscを上書きしてもよい。これにより、CM211は、ブロックマップテーブル311やデータサイズ別管理テーブル312を更新しなくてよくなるため、CM211にかかる負荷を抑制することができる。
また、重複排除を行う場合、CM211は、重複排除を行わない場合の条件に加え、ブロックマップテーブル311における分割Writeデータwdsの論理アドレスに対応するスロット番号のリファレンスカウンタが1であるか否かを判断する。そして、リファレンスカウンタが1であれば、CM211は、旧データのスロット番号で示されるデータ領域122に、圧縮分割Writeデータwdscを上書きしてもよい。これにより、CM211は、ブロックマップテーブル311やデータサイズ別管理テーブル312を更新しなくてよくなるため、重複排除であっても、CM211にかかる負荷を抑制することができる。
(実施の形態2)
次に、実施の形態2にかかるストレージ制御装置101(CM211)について説明する。なお、実施の形態1で説明した箇所と同一の箇所については、同一符号を付して図示および説明を省略する。
ここで、ホスト装置202から書き込まれるデータの特徴(I/Oパターン)が変化する、すなわち、データパターン傾向が変化することで、圧縮後のデータサイズの傾向が変わることがある。実施の形態1では、このような環境下において、コンテナ(コンテナ領域121)のために、ディスク212の物理記憶領域を無駄に確保したままとなってしまう場合がある。
図14は、データパターン傾向が変化した際のコンテナの状態を示す説明図である。図14において、まず、データパターン傾向が、書き込みデータが6ブロックのデータサイズに圧縮されるようなI/Oパターンだった場合を想定する。この場合、6ブロック用コンテナ内の各スロット(データ領域122)の使用状況は、図14の(14−1)に示すような状態となる。
この後、データパターン傾向が、書き込みデータが7ブロックのデータサイズに圧縮されるようなI/Oパターンに変化した場合を想定する。この場合、6ブロック用コンテナ内の各スロットの使用状況、および、7ブロック用コンテナ内の各スロットの使用状況は、図14の(14−2)に示すような状態となる。
(14−2)に示すような6ブロック用コンテナの状態では、大部分のスロットが未使用であるにもかかわらず、物理容量としては消費した状態となってしまう。結果的に、6ブロック用コンテナと7ブロック用コンテナの両方で物理容量を消費することになり、重複排除やデータ圧縮を実施しても、ディスク212を効率的に使用する効果が薄くなるおそれがある。
そこで、実施の形態2では、コンテナ単位でガベージコレクションの実施の要否を判断し、コンテナ内の未使用領域を物理解放可能にしてディスク212の使用効率を向上させるストレージ制御装置101(CM211)について説明する。まず、実施の形態2にかかるストレージ制御装置101(CM211)の機能構成例について説明する。
(CM211の機能構成例)
図15は、実施の形態2にかかるCM211の機能構成例を示す説明図である。CM211は、制御部300を有する。制御部300は、受け付け部301と、コンテナ領域決定部302と、書き込み部303と、特定部304と、読み出し部305と、物理解放制御部1501と、を含む。制御部300は、記憶装置に記憶されたプログラムをCPU221が実行することにより、各部の機能を実現する。また、各部の処理結果は、DRAM222や、CPU221のレジスタ、CPU221のキャッシュメモリ等に格納される。
物理解放制御部1501は、コンテナ領域121の物理解放単位領域の物理解放を制御する。ここで、物理解放単位領域は、コンテナ領域121が有する複数のデータ領域122を物理解放可能な単位で区分けした領域である。物理解放単位領域は、例えば、21[MB]の領域である。
具体的には、物理解放制御部1501は、コンテナ領域121のうち未使用のデータ領域122の数が閾値αを超えたか否かを判断する。以下の説明では、コンテナ領域121のうち未使用のデータ領域122の数を「未使用領域数」と表記する場合がある。ここで、閾値αは、任意に設定可能であり、例えば、コンテナ領域121が有するデータ領域122の総数の3割程度の値に設定される。
一例として、コンテナ領域121の記憶容量を4[GB]とし、データ領域122の記憶容量を512[byte]とすると、コンテナ領域121が有するデータ領域122の総数は「8388608」である。この場合、閾値αは、例えば、総数「8388608」の3割程度の値「2768240」に設定される。
より具体的には、例えば、物理解放制御部1501は、コンテナ領域121のいずれかのデータ領域122のリファレンスカウンタが減算されて「0」になったことに応じて、コンテナ領域121の未使用領域数が閾値αを超えたか否かを判断する。これにより、コンテナ領域121のいずれかのデータ領域122が未使用となったことに応じて、コンテナ領域121の未使用領域数が閾値αを超えたか否かを判断することができる。
また、物理解放制御部1501は、コンテナ領域121の未使用領域数が閾値αを超えた場合、コンテナ領域121の複数の物理解放単位領域それぞれについて、物理解放単位領域に含まれる使用中のデータ領域122の数を算出する。以下の説明では、物理解放単位領域に含まれる使用中のデータ領域122の数を「使用領域数」と表記する場合がある。
具体的には、例えば、物理解放制御部1501は、コンテナ領域121のデータサイズ別管理テーブル312を参照して、コンテナ領域121の各物理解放単位領域の使用領域数を算出する。なお、物理解放制御部1501は、例えば、データサイズ別管理テーブル312のスロット番号から、どのデータ領域122がどの物理解放単位領域に含まれるかを特定することができる。
一例として、スロット番号が若い順に21[MB]単位で区分けした複数の物理解放単位領域を物理解放単位領域A,B,C,DおよびEとする。この場合、物理解放制御部1501は、物理解放単位領域A〜Eごとに、物理解放単位領域A〜Eの使用領域数を算出する。
また、物理解放制御部1501は、算出した物理解放単位領域ごとの使用領域数に基づいて、コンテナ領域121の物理解放単位領域間でデータ移行を行う。具体的には、例えば、まず、物理解放制御部1501は、算出した物理解放単位領域ごとの使用領域数に基づいて、コンテナ領域121の複数の物理解放単位領域から、第1および第2の物理解放単位領域を決定する。
ここで、第1の物理解放単位領域は、データの移行元となる物理解放単位領域である。第2の物理解放単位領域は、データの移行先となる物理解放単位領域である。より具体的には、例えば、物理解放制御部1501は、コンテナ領域121の複数の物理解放単位領域のうち、使用領域数が最小の物理解放単位領域を、第1の物理解放単位領域に決定してもよい。また、物理解放制御部1501は、コンテナ領域121の複数の物理解放単位領域のうち、使用領域数が最大の物理解放単位領域を、第2の物理解放単位領域に決定してもよい。
一例として、物理解放単位領域A〜Eの使用領域数が下記のように算出されたとする。
物理解放単位領域Aの使用領域数「10」
物理解放単位領域Bの使用領域数「10」
物理解放単位領域Cの使用領域数「8」
物理解放単位領域Dの使用領域数「11」
物理解放単位領域Eの使用領域数「9」
この場合、物理解放制御部1501は、例えば、物理解放単位領域A〜Eのうち、使用領域数が最小の物理解放単位領域Cを、第1の物理解放単位領域に決定する。また、物理解放制御部1501は、例えば、物理解放単位領域A〜Eのうち、使用領域数が最大の物理解放単位領域Dを、第2の物理解放単位領域に決定する。
次に、物理解放制御部1501は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータを、第2の物理解放単位領域に含まれる未使用のデータ領域122に移行する。第1および第2の物理解放単位領域に含まれる各データ領域122の使用状況は、例えば、データサイズ別管理テーブル312から特定される。
これにより、コンテナ領域121内の物理解放単位領域間でデータ移行することができる。この際、コンテナ領域121内のデータ領域122は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。
また、物理解放制御部1501は、第1の物理解放単位領域の使用領域数が、第2の物理解放単位領域に含まれる未使用のデータ領域122の数(未使用領域数)以下である場合に、第1および第2の物理解放単位領域間でのデータ移行を行うことにしてもよい。物理解放単位領域の未使用領域数は、例えば、物理解放単位領域に含まれるデータ領域122の総数から物理解放単位領域の使用領域数を減算することにより求めることができる。すなわち、物理解放制御部1501は、コンテナ領域121の複数の物理解放単位領域のうち、未使用領域数が第1の物理解放単位領域の使用領域数以上であって、かつ、使用領域数がより大きい物理解放単位領域を、第2の物理解放単位領域に決定してもよい。これにより、第1の物理解放単位領域に使用中のデータ領域122が残ってしまうのを防ぐことができる。
ただし、物理解放制御部1501は、第1および第2の物理解放単位領域間でのデータ移行を行った結果、第1の物理解放単位領域に使用中のデータ領域122が残った場合、新たな第2の物理解放単位領域を決定することにしてもよい。この際、物理解放制御部1501は、コンテナ領域121の複数の物理解放単位領域のうち、第1および第2の物理解放単位領域に決定した物理解放単位領域を除く残余の物理解放単位領域から、新たな第2の物理解放単位領域を決定する。
一例として、物理解放単位領域A〜Eのうち、物理解放単位領域Cから物理解放単位領域Dへのデータ移行が行われた結果、物理解放単位領域Cに使用中のデータ領域122が残ったとする。この場合、物理解放制御部1501は、例えば、物理解放単位領域A〜Eのうち、物理解放単位領域C,Dを除く残余の物理解放単位領域A,B,Eから、新たな第2の物理解放単位領域を決定する。より具体的には、例えば、物理解放制御部1501は、物理解放単位領域A,B,Eのうち、使用領域数が最大の物理解放単位領域Aを、新たな第2の物理解放単位領域に決定する。なお、使用領域数が同一の物理解放単位領域が複数存在する場合、物理解放制御部1501は、例えば、スロット番号が若いデータ領域122を含む物理解放単位領域を優先する。
また、物理解放制御部1501は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータの移行が完了した場合に、第1の物理解放単位領域に対応する物理記憶領域を解放する。ここで、第1の物理解放単位領域に対応する物理記憶領域は、例えば、第1の物理解放単位領域に割り当てられたディスク212内の物理記憶領域である。
具体的には、例えば、物理解放制御部1501は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータの移行が全て完了した場合、第1の物理解放単位領域に割り当てられたディスク212内の物理記憶領域をゼロクリアする。そして、物理解放制御部1501は、コンテナ領域121の物理記憶領域の割り当てに関する制御情報(不図示)を更新する。より詳細に説明すると、例えば、物理解放制御部1501は、第1の物理解放単位領域に対応付けられた物理記憶領域の物理アドレスをクリアする。
これにより、コンテナ領域121内の物理解放単位領域間でのデータ移行により使用中のデータ領域122がなくなった第1の物理解放単位領域を物理解放することができる。
また、物理解放制御部1501は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータの移行が全て完了した場合、新たな第1および第2の物理解放単位領域を決定することにしてもよい。この際、使用中のデータ領域122のデータの移行が全て完了した物理解放単位領域は、決定対象から除外される。
また、物理解放制御部1501は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータを、第2の物理解放単位領域に含まれる未使用のデータ領域122に移行したことに応じて、ブロックマップテーブル311およびデータサイズ別管理テーブル312を更新する。
具体的には、例えば、物理解放制御部1501は、移行したデータについて、ブロックマップテーブル311内の物理格納スロット番号を、移行先のデータ領域122の物理格納スロット番号に更新する。また、物理解放制御部1501は、データサイズ別管理テーブル312内の移行元および移行先のデータ領域122のデータ領域使用状況およびリファレンスカウンタを更新する。より詳細に説明すると、例えば、物理解放制御部1501は、データサイズ別管理テーブル312内の移行元のデータ領域122のデータ領域使用状況を「未使用」とし、リファレンスカウンタを「0」とする。また、物理解放制御部1501は、データサイズ別管理テーブル312内の移行先のデータ領域122のデータ領域使用状況を「使用中」とし、リファレンスカウンタを移行元のデータ領域122のリファレンスカウンタの値とする。
なお、物理解放制御部1501は、物理解放単位領域を解放した際に、当該物理解放単位領域に含まれる各データ領域122の使用状況を「空」に変更することにしてもよい。これにより、CM211は、例えば、物理記憶領域を再割り当てする際に、最初のデータ領域122が「空」であることを確認すれば、再割り当て必要であると判断することができる。仮に全データ領域122の使用状況を「未使用」のままにしておくと、例えば、全データ領域122の使用状況が「未使用」であると確認してから、物理記憶領域の再割り当てを行うことになり負荷がかかる。
(物理解放単位領域の物理解放例)
次に、図16〜図19を用いて、コンテナ領域121の物理解放単位領域の物理解放例について説明する。ここでは、データパターン傾向の変化により、使用状況が大きく変化したコンテナID「x」のコンテナ領域121を例に挙げて、物理解放単位領域の物理解放例について説明する。
図16は、データサイズ別管理テーブル312−xの記憶内容の一例を示す説明図である。図16において、データサイズ別管理テーブル312−xは、コンテナIDと、コンテナ情報501と、未使用キュー502と、コンテナ管理サイズ503と、コンテナ先頭アドレス504とを有する。
コンテナ情報501は、レコード511−0〜59を有する。すなわち、コンテナID「x」のコンテナ領域121は、スロット番号「0」〜「59」の60個のデータ領域122を有する。
図17〜図19は、コンテナ領域121の物理解放単位領域の物理解放例を示す説明図である。図17において、コンテナID「x」のコンテナ領域121の各データ領域122の使用状況が示されている。ここでは、左上をスロット番号「0」のデータ領域122とし、各行において、左から右に向かってスロット番号が昇順となるようにデータ領域122が並べられている。
例えば、1番上の行は、左から右に向かって、スロット番号「0」〜「9」の10個のデータ領域122が並べられている。また、コンテナID「x」のコンテナ領域121の複数の物理解放単位領域を、20個のデータ領域122の単位で区分けした物理解放単位領域1701〜1703とする。また、閾値αを「α=20」とする。
図17の(17−1)では、図16に示したデータサイズ別管理テーブル312−xが示すコンテナID「x」のコンテナ領域121の各データ領域122の使用状況が示されている。この場合、物理解放制御部1501は、データサイズ別管理テーブル312−xを参照して、コンテナID「x」のコンテナ領域121の未使用領域数が閾値αを超えたか否かを判断する。
ここで、コンテナID「x」のコンテナ領域121の未使用領域数は「45」である。このため、物理解放制御部1501は、コンテナID「x」のコンテナ領域121の未使用領域数が閾値αを超えたと判断する。次に、物理解放制御部1501は、データサイズ別管理テーブル312−xを参照して、物理解放単位領域1701〜1703の使用領域数を算出する。
ここでは、物理解放単位領域1701の使用領域数は「2」、物理解放単位領域1702の使用領域数は「10」、物理解放単位領域1703の使用領域数は「3」である。この場合、物理解放制御部1501は、使用領域数が最小の物理解放単位領域1701を、第1の物理解放単位領域に決定する。また、物理解放制御部1501は、使用領域数が最大の物理解放単位領域1702を、第2の物理解放単位領域に決定する。
そして、物理解放制御部1501は、物理解放単位領域1701に含まれる使用中のデータ領域122のデータを、物理解放単位領域1702に含まれる未使用のデータ領域122に移行する。この際、物理解放制御部1501は、物理解放単位領域1702に含まれるスロット番号が若い未使用のデータ領域122に移行する。
図17の(17−2)では、物理解放単位領域1701に含まれるスロット番号「1」のデータ領域122のデータが、物理解放単位領域1702に含まれるスロット番号「21」のデータ領域122に移行されている。
図18の(17−3)では、物理解放単位領域1701に含まれるスロット番号「6」のデータ領域122のデータが、物理解放単位領域1702に含まれるスロット番号「23」のデータ領域122に移行されている。
物理解放単位領域1701に含まれる使用中のデータ領域122のデータの移行が全て完了すると、物理解放制御部1501は、新たな第1および第2の物理解放単位領域を決定する。ここで、データ移行完了後の物理解放単位領域1702の使用領域数は「12」、物理解放単位領域1703の使用領域数は「3」である。
この場合、物理解放制御部1501は、使用領域数が最小の物理解放単位領域1703を、第1の物理解放単位領域に決定する。また、物理解放制御部1501は、使用領域数が最大の物理解放単位領域1702を、第2の物理解放単位領域に決定する。なお、データ移行が完了した物理解放単位領域1701は、決定対象から除外される。
そして、物理解放制御部1501は、物理解放単位領域1703に含まれる使用中のデータ領域122のデータを、物理解放単位領域1702に含まれる未使用のデータ領域122に移行する。この際、物理解放制御部1501は、物理解放単位領域1702に含まれるスロット番号が若い未使用のデータ領域122に移行する。
図18の(17−4)では、物理解放単位領域1703に含まれるスロット番号「48」のデータ領域122のデータが、物理解放単位領域1702に含まれるスロット番号「24」のデータ領域122に移行されている。
同様にして、物理解放単位領域1703に含まれるスロット番号「52,55」のデータ領域122のデータが、物理解放単位領域1702に含まれるスロット番号「26,28」のデータ領域122に移行されると、図19の(17−5)に示す状態となる。
そして、物理解放制御部1501は、使用中のデータ領域122のデータの移行が完了した物理解放単位領域に対応する物理記憶領域を解放する。図19の(17−6)では、物理解放単位領域1701,1703に対応する物理記憶領域が解放される。
これにより、データパターン傾向の変化により未使用のデータ領域122が多くなったコンテナID「x」のコンテナ領域121のガベージコレクションを実施して、物理記憶領域の使用量を3分の1に減らすことができる。物理解放された領域は、他のコンテナ領域121等に利用可能となり、ディスク212の使用効率を向上させることができる。
また、コンテナ領域121内のデータ領域122は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。例えば、データサイズが一定でなければ、使用中のデータ分移動させることになるのに対して、図17〜図19に示した例では、書き込み回数を5回に減らすことができる。
(CM211の各種処理手順)
次に、実施の形態2にかかるCM211の各種処理手順について説明する。まず、実施の形態2にかかるCM211のWriteI/O受け付け時処理手順について説明する。ただし、図11に示したステップS1113のリファレンスカウンタ加減算処理の具体的な処理手順以外は、実施の形態1にかかるCM211のWriteI/O受け付け時処理手順と同様である。このため、実施の形態1にかかるCM211と異なるリファレンスカウンタ加減算処理の具体的な処理手順について説明する。
図20は、実施の形態2にかかるリファレンスカウンタ加減算処理手順の一例を示すフローチャートである。CM211は、今回の圧縮分割Writeデータwdscを書き込んだデータ領域122のリファレンスカウンタを1加算する(ステップS2001)。また、CM211は、今回の圧縮分割Writeデータを書き込む前に使用していたデータ領域122のリファレンスカウンタを1減算する(ステップS2002)。そして、CM211は、今回のリファレンスカウンタの更新により、リファレンスカウンタが0になったデータ領域122があるか否かを判断する(ステップS2003)。
リファレンスカウンタが0になったデータ領域122がある場合(ステップS2003:リファレンスカウンタが0になったデータ領域あり)、CM211は、対象のデータ領域122を未使用として、未使用キューに対象のデータ領域122を接続する(ステップS2004)。
次に、CM211は、対象のコンテナ領域121の未使用領域数が閾値αを超えたか否かを判断する(ステップS2005)。なお、対象のコンテナ領域121とは、ステップS2004において、未使用キューに対象のデータ領域122を接続したコンテナ領域121である。
対象のコンテナ領域121の未使用領域数が閾値αを超えた場合(ステップS2005:閾値をオーバー)、CM211は、ガベージコレクション処理を呼び出す(ステップS2006)。ガベージコレクション処理の具体的な処理手順については、図21および図22を用いて後述する。
ステップS2006の処理終了後、または、リファレンスカウンタが0になったデータ領域122がない場合(ステップS2003:リファレンスカウンタが0になったデータ領域なし)、または、対象のコンテナ領域121の未使用領域数が閾値α以下の場合(ステップS2005:閾値以下)、CM211は、リファレンスカウンタ加減算処理を終了する。
これにより、コンテナ領域121の未使用のデータ領域122が増加したタイミングで、コンテナ領域121のガベージコレクションの実施の要否を判断することができる。
図21および図22は、実施の形態2にかかるガベージコレクション処理手順の一例を示すフローチャートである。図21のフローチャートにおいて、まず、CM211は、対象のコンテナ領域121のデータサイズ別管理テーブル312を参照して、対象のコンテナ領域121の物理解放単位領域の使用領域数を算出する(ステップS2101)。
次に、CM211は、対象のコンテナ領域121の物理解放単位領域を、算出した使用領域数が少ない順にガベージブロックリンクに接続する(ステップS2102)。そして、CM211は、ガベージブロックリンクの先頭の物理解放単位領域を移行元領域に決定する(ステップS2103)。移行元領域は、上述した第1の物理解放単位領域に対応する。
なお、ガベージブロックリンクに接続される各領域は、prev情報とnext情報を有しており、直前の領域と次の領域とを特定可能な状態となっている。
次に、CM211は、ガベージブロックリンクの最後尾の物理解放単位領域を移行先領域に決定する(ステップS2104)。移行先領域は、上述した第2の物理解放単位領域に対応する。次に、CM211は、決定した移行元領域に使用中のデータ領域122があるか否かを判断する(ステップS2105)。
ここで、移行元領域に使用中のデータ領域122がある場合(ステップS2105:Yes)、CM211は、決定した移行先領域に未使用のデータ領域122があるか否かを判断する(ステップS2106)。ここで、移行先領域に未使用のデータ領域122がある場合(ステップS2106:Yes)、CM211は、図22に示すステップS2201に移行する。
また、ステップS2105において、移行元領域に使用中のデータ領域122がない場合(ステップS2105:No)、CM211は、移行元領域のnext情報から、移行元領域の次に物理解放単位領域があるか否かを判断する(ステップS2107)。
ここで、次に物理解放単位領域がある場合(ステップS2107:Yes)、CM211は、次の物理解放単位領域を移行元領域に変更し(ステップS2108)、ステップS2105に移行する。一方、次に物理解放単位領域がない場合(ステップS2107:No)、CM211は、図22に示すステップS2207に移行する。
また、ステップS2106において、移行先領域に未使用のデータ領域122がない場合(ステップS2106:No)、CM211は、移行先領域のprev情報から、移行先領域の直前に物理解放単位領域があるか否かを判断する(ステップS2109)。
ここで、直前に物理解放単位領域がある場合(ステップS2109:Yes)、CM211は、直前の物理解放単位領域を移行先領域に変更し(ステップS2110)、ステップS2106に移行する。一方、直前に物理解放単位領域がない場合(ステップS2109:No)、CM211は、図22に示すステップS2207に移行する。
図22のフローチャートにおいて、まず、CM211は、移行元領域と移行先領域が別領域であるか否かを判断する(ステップS2201)。ここで、移行元領域と移行先領域が別領域の場合(ステップS2201:Yes)、CM211は、移行元領域の使用領域数が移行先領域の使用領域数以下であるか否かを判断する(ステップS2202)。
ここで、移行元領域の使用領域数が移行先領域の使用領域数以下の場合(ステップS2202:Yes)、CM211は、移行元領域に含まれる使用中のデータ領域122のデータを、移行先領域に含まれる未使用のデータ領域122にコピーする(ステップS2203)。
そして、CM211は、ブロックマップテーブル311およびデータサイズ別管理テーブル312を更新する(ステップS2204)。次に、CM211は、移行元領域に使用中のデータ領域122があるか否かを判断する(ステップS2205)。
ここで、移行元領域に使用中のデータ領域122がない場合(ステップS2205:No)、CM211は、図21に示したステップS2107に移行する。一方、移行元領域に使用中のデータ領域122がある場合(ステップS2205:Yes)、CM211は、移行先領域に未使用のデータ領域122があるか否かを判断する(ステップS2206)。
ここで、移行先領域に未使用のデータ領域122がない場合(ステップS2206:No)、CM211は、図21に示したステップS2109に移行する。一方、移行先領域に未使用のデータ領域122がある場合(ステップS2206:Yes)、CM211は、ステップS2203に戻る。
また、ステップS2201において、移行元領域と移行先領域が同一領域の場合(ステップS2201:No)、または、ステップS2202において、移行元領域の使用領域数が移行先領域の使用領域数より大きい場合(ステップS2202:No)、CM211は、ステップS2207に移行する。これにより、移行元領域の使用領域数のほうが移行先領域の使用領域数よりも大きくなった際に、データ移行が行われてしまうのを防ぐことができる。
そして、CM211は、全てのデータ領域122が未使用となった物理解放単位領域に対して、物理解放を実施して(ステップS2207)、本フローチャートによる一連の処理を終了する。これにより、コンテナ単位でガベージコレクションを実施して、データパターン傾向の変化により使用されなくなった領域を物理解放することができる。
以上説明したように、実施の形態2にかかるCM211は、コンテナ領域121の未使用領域数が閾値αを超えたか否かを判断する。具体的には、例えば、CM211は、コンテナ領域121のいずれかのデータ領域122のリファレンスカウンタが減算されて「0」になったことに応じて、コンテナ領域121の未使用領域数が閾値αを超えたか否かを判断する。
これにより、コンテナ領域121のいずれかのデータ領域122が未使用となったことに応じて、コンテナ領域121の未使用領域数が閾値αを超えたか否かを判断することができる。換言すれば、コンテナ領域121の未使用のデータ領域122が増加したタイミングで、コンテナ領域121のガベージコレクションの実施の要否を判断できる。
また、CM211は、コンテナ領域121の未使用領域数が閾値αを超えた場合、コンテナ領域121の複数の物理解放単位領域それぞれについて、物理解放単位領域に含まれる使用中のデータ領域の使用領域数を算出する。また、CM211は、算出した物理解放単位領域ごとの使用領域数に基づいて、複数の物理解放単位領域のうち、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータを、第2の物理解放単位領域に含まれる未使用のデータ領域122に移行する。そして、CM211は、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータの移行が完了した場合に、第1の物理解放単位領域に対応する物理記憶領域を解放する。
これにより、データパターン傾向が変化してコンテナ領域121の未使用領域数が閾値αを超えたときに、コンテナ領域121内の物理解放単位領域間でデータ移行し、まとまった未使用領域を作り出して物理解放(ガベージコレクション)を行うことができる。
また、CM211は、コンテナ領域121の複数の物理解放単位領域のうち、使用領域数が最小の物理解放単位領域を、第1の物理解放単位領域に決定し、使用領域数が最大の物理解放単位領域を、第2の物理解放単位領域に決定することができる。これにより、コンテナ領域121内でまとまった未使用領域を効率的に作り出すことができる。
また、CM211は、第1の物理解放単位領域の使用領域数が、第2の物理解放単位領域の未使用領域数以下である場合に、第1の物理解放単位領域に含まれる使用中のデータ領域122のデータを、第2の物理解放単位領域に含まれる未使用のデータ領域122に移行することができる。これにより、第2の物理解放単位領域にデータを移行しきれずに、第1の物理解放単位領域に使用中のデータ領域122が残ってしまうのを防ぐことができる。
これらのことから、実施の形態2にかかるCM211によれば、データパターン傾向の変化により未使用領域が多くなったコンテナ領域121のガベージコレクションを実施して、ディスク212の使用効率を向上させることができる。また、コンテナ領域121内のデータ領域122は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。このため、ディスク212に用いるSSD等の寿命に与える影響を抑えつつガベージコレクションを実施することができる。
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージにおいて、前記記憶領域から割り当てた前記整数倍の第1のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第1の管理情報と、前記記憶領域から割り当てた前記整数倍であって前記第1のサイズとは異なる第2のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第2の管理情報と、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報とを有する記憶部と、
所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記第1の管理情報および前記第2の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて前記論理アドレス情報に格納する制御部と、
を有することを特徴とするストレージ制御装置。
(付記2)前記記憶領域は、ヘッドによりアクセスされる記憶領域であって、
前記整数倍の複数のデータ領域は、連続した領域であって、
前記制御部は、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域が複数あれば、先頭にある未使用のデータ領域に前記圧縮後のデータを書き込む、
ことを特徴とする付記1に記載のストレージ制御装置。
(付記3)前記第1の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第1のサイズとであって、
前記第2の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第2のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
所定のサイズの読み出し範囲の論理アドレスを受け付けたことに応じて、前記論理アドレス情報を参照して、前記読み出し範囲の論理アドレスに対応する管理情報および順番を特定し、
特定した前記管理情報における複数のデータ領域の先頭の物理アドレスと、特定した前記順番と、当該管理情報に対応するサイズとに基づいて、前記読み出し範囲の論理アドレスに対応するデータが書き込まれたデータ領域の物理アドレスを算出し、
前記記憶領域の前記物理アドレスからデータを読み出す、
ことを特徴とする付記1または2に記載のストレージ制御装置。
(付記4)前記第1の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第1のサイズとであって、
前記第2の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第2のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする付記1〜3のいずれか一つに記載のストレージ制御装置。
(付記5)前記第1の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第1の管理情報は、さらに、前記第1の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記第2の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第2の管理情報は、さらに、前記第2の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一であり、かつ、前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域を参照する論理アドレスの数が1である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする付記4に記載のストレージ制御装置。
(付記6)前記制御部は、
前記複数のデータ領域のうち未使用のデータ領域の数が閾値を超えた場合、前記複数のデータ領域を物理解放可能な単位で区分けした複数の物理解放単位領域それぞれについて、前記物理解放単位領域に含まれる使用中のデータ領域の使用領域数を算出し、
算出した前記物理解放単位領域ごとの使用領域数に基づいて、前記複数の物理解放単位領域のうち、第1の物理解放単位領域に含まれる使用中のデータ領域のデータを、第2の物理解放単位領域に含まれる未使用のデータ領域に移行し、
前記第1の物理解放単位領域に含まれる使用中のデータ領域のデータの移行が完了した場合に、前記第1の物理解放単位領域に対応する物理記憶領域を解放する、
ことを特徴とする付記1〜5のいずれか一つに記載のストレージ制御装置。
(付記7)前記第1の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最小の物理解放単位領域であり、
前記第2の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最大の物理解放単位領域である、
ことを特徴とする付記6に記載のストレージ制御装置。
(付記8)前記制御部は、
前記第1の物理解放単位領域の使用領域数が、前記第2の物理解放単位領域に含まれる未使用のデータ領域の数以下である場合に、前記第1の物理解放単位領域に含まれる使用中のデータ領域のデータを、前記第2の物理解放単位領域に含まれる未使用のデータ領域に移行する、
ことを特徴とする付記6または7に記載のストレージ制御装置。
(付記9)前記制御部は、
前記第1の物理解放単位領域に含まれる使用中のデータ領域のデータを、前記第2の物理解放単位領域に含まれる未使用のデータ領域に移行したことに応じて、前記管理情報および前記論理アドレス情報を更新する、
ことを特徴とする付記6〜8のいずれか一つに記載のストレージ制御装置。
(付記10)コンピュータに、
ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージに対して、所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記記憶領域から割り当てた前記整数倍の第1のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第1の管理情報、および、前記記憶領域から割り当てた前記整数倍であって前記第1のサイズとは異なる第2のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第2の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報に格納する、
処理を実行させることを特徴とするストレージ制御プログラム。
(付記11)前記第1の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第1のサイズとであって、
前記第2の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第2のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記コンピュータに、
所定のサイズの読み出し範囲の論理アドレスを受け付けたことに応じて、前記論理アドレス情報を参照して、前記読み出し範囲の論理アドレスに対応する管理情報および順番を特定し、
特定した前記管理情報における複数のデータ領域の先頭の物理アドレスと、特定した前記順番と、当該管理情報に対応するサイズとに基づいて、前記読み出し範囲の論理アドレスに対応するデータが書き込まれたデータ領域の物理アドレスを算出し、
前記記憶領域の前記物理アドレスからデータを読み出す、
処理を実行させることを特徴とする付記10に記載のストレージ制御プログラム。