(57)【要約】【課題】圧縮後のデータを書き込むストレージを効率的に使用すること。【解決手段】ストレージ制御装置１０１は、所定のサイズとなった分割Ｗｒｉｔｅデータｗｄｓと分割Ｗｒｉｔｅデータｗｄｓの論理アドレスとを受け付けたことに応じて、分割Ｗｒｉｔｅデータｗｄｓを圧縮し、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを得る。次に、ストレージ制御装置１０１は、管理情報１１０から、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のサイズに対応する管理情報１１０を特定する。そして、ストレージ制御装置１０１は、特定した管理情報１１０の未使用のデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。また、ストレージ制御装置１０１は、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの書き込みとともに、書き込んだデータ領域の物理アドレスを特定可能な情報と分割Ｗｒｉｔｅデータｗｄｓの論理アドレスとを対応付けて論理アドレス情報１１１に格納する。【選択図】図１
2018120571.tif 000002
【特許請求の範囲】
【請求項１】
ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージにおいて、前記記憶領域から割り当てた前記整数倍の第１のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第１の管理情報と、前記記憶領域から割り当てた前記整数倍であって前記第１のサイズとは異なる第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第２の管理情報と、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報とを有する記憶部と、
所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記第１の管理情報および前記第２の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて前記論理アドレス情報に格納する制御部と、
を有することを特徴とするストレージ制御装置。
【請求項２】
前記記憶領域は、ヘッドによりアクセスされる記憶領域であって、
前記整数倍の複数のデータ領域は、連続した領域であって、
前記制御部は、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域が複数あれば、先頭にある未使用のデータ領域に前記圧縮後のデータを書き込む、
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記第１の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第１のサイズとであって、
前記第２の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第２のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
所定のサイズの読み出し範囲の論理アドレスを受け付けたことに応じて、前記論理アドレス情報を参照して、前記読み出し範囲の論理アドレスに対応する管理情報および順番を特定し、
特定した前記管理情報における複数のデータ領域の先頭の物理アドレスと、特定した前記順番と、当該管理情報に対応するサイズとに基づいて、前記読み出し範囲の論理アドレスに対応するデータが書き込まれたデータ領域の物理アドレスを算出し、
前記記憶領域の前記物理アドレスからデータを読み出す、
ことを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
前記第１の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第１のサイズとであって、
前記第２の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第２のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする請求項１〜３のいずれか一つに記載のストレージ制御装置。
【請求項５】
前記第１の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第１の管理情報は、さらに、前記第１の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記第２の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第２の管理情報は、さらに、前記第２の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一であり、かつ、前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域を参照する論理アドレスの数が１である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする請求項４に記載のストレージ制御装置。
【請求項６】
前記制御部は、
前記複数のデータ領域のうち未使用のデータ領域の数が閾値を超えた場合、前記複数のデータ領域を物理解放可能な単位で区分けした複数の物理解放単位領域それぞれについて、前記物理解放単位領域に含まれる使用中のデータ領域の使用領域数を算出し、
算出した前記物理解放単位領域ごとの使用領域数に基づいて、前記複数の物理解放単位領域のうち、第１の物理解放単位領域に含まれる使用中のデータ領域のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域に移行し、
前記第１の物理解放単位領域に含まれる使用中のデータ領域のデータの移行が完了した場合に、前記第１の物理解放単位領域に対応する物理記憶領域を解放する、
ことを特徴とする請求項１〜５のいずれか一つに記載のストレージ制御装置。
【請求項７】
前記第１の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最小の物理解放単位領域であり、
前記第２の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最大の物理解放単位領域である、
ことを特徴とする請求項６に記載のストレージ制御装置。
【請求項８】
前記制御部は、
前記第１の物理解放単位領域の使用領域数が、前記第２の物理解放単位領域に含まれる未使用のデータ領域の数以下である場合に、前記第１の物理解放単位領域に含まれる使用中のデータ領域のデータを、前記第２の物理解放単位領域に含まれる未使用のデータ領域に移行する、
ことを特徴とする請求項６または７に記載のストレージ制御装置。
【請求項９】
コンピュータに、
ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージに対して、所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記記憶領域から割り当てた前記整数倍の第１のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第１の管理情報、および、前記記憶領域から割り当てた前記整数倍であって前記第１のサイズとは異なる第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第２の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報に格納する、
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
従来、未使用となったデータ領域を集めて、連続したデータ領域を確保するガベージコレクション処理がある。関連する先行技術として、例えば、画像データを、同じサイズで、かつ、ハードディスクの区画された等間隔で複数の記憶領域の大きさと等しいかまたは小さいサイズに分割し、圧縮するものがある。また、ファイルの管理情報と、ユーザ設定とに基づいて、圧縮対象ファイルの候補をユーザに提示し、指定されたファイルを圧縮対象ファイルとして圧縮し、圧縮したファイルを、元のファイルに上書きする技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平９−１２３５３９号公報
【特許文献２】特開２００１−４３１１５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来技術によれば、ストレージの記憶領域を分割せずに、圧縮後のデータを前詰めで書き込んでいくと、ガベージコレクション処理を行うことになり、ガベージコレクション処理を実施するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の負荷とストレージの負荷とが増大する。そして、負荷の増大により、ガベージコレクション処理中のストレージの性能が低下する。また、ストレージの記憶領域を等間隔で分割したデータ領域に圧縮後のデータを書き込むと、前述のデータ領域に対して圧縮後のデータが小さいほど、データが書き込まれない領域が増えることになる。ここで、同一のサイズの複数のデータを圧縮しても、データの内容によって圧縮後のデータのサイズはそれぞれ異なる。従って、ストレージの記憶領域が十分に使用されなくなる。
【０００５】
１つの側面では、本発明は、圧縮後のデータを書き込むストレージを効率的に使用することができるストレージ制御装置、およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
１つの実施態様では、ストレージ制御装置、およびストレージ制御プログラムは、ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有するストレージに対して、所定のサイズの書き込みデータと書き込みデータの論理アドレスとを受け付けたことに応じて、記憶領域から割り当てた整数倍の第１のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と各データ領域の使用状況を示す情報とを有する第１の管理情報、および、記憶領域から割り当てた整数倍であって第１のサイズとは異なる第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第２の管理情報から、書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、特定した管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に圧縮後のデータを書き込むとともに、未使用のデータ領域の物理アドレスを特定可能な情報と書き込みデータの論理アドレスとを対応付けて、記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報にデータの論理アドレスを対応付けた論理アドレス情報に格納する。
【発明の効果】
【０００７】
一つの側面では、本発明は、圧縮後のデータを書き込むストレージを効率的に使用することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施の形態１にかかるストレージ制御装置１０１の動作例を示す説明図である。
【図２】図２は、ストレージシステム２００のハードウェア構成例を示す説明図である。
【図３】図３は、ＣＭ２１１の機能構成例を示す説明図である。
【図４】図４は、ブロックマップテーブル３１１の記憶内容の一例を示す説明図である。
【図５】図５は、データサイズ別管理テーブル３１２−１の記憶内容の一例を示す説明図である。
【図６】図６は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その１）である。
【図７】図７は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その２）である。
【図８】図８は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その３）である。
【図９】図９は、リファレンスカウンタ加減算処理の動作例を示す説明図である。
【図１０】図１０は、ＲｅａｄＩ／Ｏ受け付け時の動作例を示す説明図である。
【図１１】図１１は、ＷｒｉｔｅＩ／Ｏ受け付け時処理手順の一例を示すフローチャートである。
【図１２】図１２は、リファレンスカウンタ加減算処理手順の一例を示すフローチャートである。
【図１３】図１３は、ＲｅａｄＩ／Ｏ受け付け時処理手順の一例を示すフローチャートである。
【図１４】図１４は、データパターン傾向が変化した際のコンテナの状態を示す説明図である。
【図１５】図１５は、実施の形態２にかかるＣＭ２１１の機能構成例を示す説明図である。
【図１６】図１６は、データサイズ別管理テーブル３１２−ｘの記憶内容の一例を示す説明図である。
【図１７】図１７は、コンテナ領域１２１の物理解放単位領域の物理解放例を示す説明図（その１）である。
【図１８】図１８は、コンテナ領域１２１の物理解放単位領域の物理解放例を示す説明図（その２）である。
【図１９】図１９は、コンテナ領域１２１の物理解放単位領域の物理解放例を示す説明図（その３）である。
【図２０】図２０は、実施の形態２にかかるリファレンスカウンタ加減算処理手順の一例を示すフローチャートである。
【図２１】図２１は、実施の形態２にかかるガベージコレクション処理手順の一例を示すフローチャート（その１）である。
【図２２】図２２は、実施の形態２にかかるガベージコレクション処理手順の一例を示すフローチャート（その２）である。
【発明を実施するための形態】
【０００９】
以下に図面を参照して、開示のストレージ制御装置、およびストレージ制御プログラムの実施の形態を詳細に説明する。
【００１０】
（実施の形態１）
図１は、実施の形態１にかかるストレージ制御装置１０１の動作例を示す説明図である。ストレージ制御装置１０１は、ストレージ１０２を制御するコンピュータである。具体的には、ストレージ制御装置１０１は、ストレージ１０２の記憶領域をユーザに提供する。ストレージ制御装置１０１は、例えば、サーバである。ストレージ制御装置１０１は、ユーザからのデータを分割し、分割した各分割データを圧縮し、圧縮後の各データをストレージ１０２に書き込むことにより、ストレージ１０２の使用効率を高めることができる。
【００１１】
ここで、ストレージ１０２の記憶領域が、ヘッドによりアクセスされる記憶領域、例えば、ストレージ１０２がＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）であれば、圧縮後の各データを前詰めで書き込むことが好ましい。圧縮後の各データを前詰めで書き込むことが好ましい理由は、ＨＤＤが、磁気ディスクの外周にある程高速にアクセスでき、また、連続した領域をアクセスするためシーケンシャルアクセスとなるためである。また、圧縮後の各データの間を開けずに詰めて書き込むことにより、ストレージ１０２の使用効率を高めることができる。
【００１２】
ここで、データを前詰めした際に、データの上書きが発生した場合、既にストレージに書かれている旧データを未使用扱いとした上で、新たなデータをストレージに書き込むという運用を行うことができる。この運用を行うと、ストレージ上には、未使用領域が増加することになる。未使用領域が増加すると、ストレージの使用効率が低下するため、未使用領域を解消するために、ガベージコレクション処理を実施することが考えられる。ガベージコレクション処理では、未使用となったデータ以外を前詰めして再度書き込みを行う。
【００１３】
しかしながら、ガベージコレクション処理を行うと、データの再配置を行うため、ストレージの負荷と、ガベージコレクション処理を実施するＣＰＵの負荷とが増大することになる。また、データの再配置には、ストレージから読み出したデータの一時保管場所として、メモリを使用するため、一時的にメモリを消費することになる。そして、負荷の増大により、ガベージコレクション処理中のストレージの性能が低下することになる。
【００１４】
また、ガベージコレクション処理の実施を抑制するため、ストレージの記憶領域を等間隔で分割したデータ領域に、圧縮後のデータを書き込むことが考えられる。しかしながら、同一のサイズの複数のデータを圧縮しても、データの内容によって圧縮後のデータのサイズはそれぞれ異なる。従って、ストレージの記憶領域を等間隔で分割したデータ領域に圧縮後のデータを書き込むと、前述のデータ領域に対して圧縮後のデータが小さいほど、データが書き込まれない領域が増えることになり、ストレージの記憶領域が十分に使用されなくなる。
【００１５】
そこで、本実施の形態では、ストレージ１０２のアクセス単位の各整数倍の領域群を管理する各管理情報から、書き込みデータを圧縮した圧縮データのサイズ以上のデータ領域を特定し、前述のデータ領域に前述の圧縮データを書き込むことについて説明する。
【００１６】
図１を用いて、ストレージ制御装置１０１の動作例について説明する。ストレージ制御装置１０１は、ストレージ１０２を制御する。そして、ストレージ制御装置１０１は、管理情報１１０と、論理アドレス情報１１１とにアクセス可能である。管理情報１１０と、論理アドレス情報１１１とは、例えば、ストレージ制御装置１０１が有するメモリ内にあるが、他の装置が有する記憶領域内にあってもよい。
【００１７】
管理情報１１０は、ストレージ１０２のアクセス単位のサイズの整数倍の第１のサイズと第２のサイズとのそれぞれに対応して、次に示す２つの情報を有する。１つ目の情報が、ストレージ１０２の記憶領域から割り当てた第１のサイズまたは第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報である。２つ目の情報が、各データ領域の使用状況を示す情報である。アクセス単位のサイズの整数倍は、どのような倍数でもよい。図１の例では、アクセス単位のサイズが５１２［ｂｙｔｅ］であるとする。そして、図１の例では、ストレージ制御装置１０１は、第１のサイズに対応する第１の管理情報として、管理情報１１０−１と、第１のサイズとは異なる第２のサイズに対応する第２の管理情報として、管理情報１１０−２とにアクセス可能である。図１の例では、第１のサイズは、５１２［ｂｙｔｅ］の７倍である３５８４［ｂｙｔｅ］であり、第２のサイズは、５１２［ｂｙｔｅ］の３倍である１５３６［ｂｙｔｅ］である。
【００１８】
以下の説明では、同種の要素を区別する場合には、「管理情報１１０−１」、「管理情報１１０−２」のように参照符号を使用し、同種の要素を区別しない場合には、「管理情報１１０」のように参照符号のうちの共通番号だけを使用することがある。
【００１９】
また、ストレージ１０２の記憶領域から割り当てたアクセス単位のサイズの整数倍の複数のデータ領域を、「コンテナ領域」と呼称する。コンテナ領域１２１には、複数のデータ領域１２２が存在する。データ領域１２２の個数は２以上の整数であればいくつでもよく、例えば、１［Ｍ個］である。また、データ領域１２２は、シーケンシャルアクセスできるように、連続した領域であることが好ましい。図１の例では、管理情報１１０−１に対応するコンテナ領域１２１−１は、３５８４［ｂｙｔｅ］の複数のデータ領域１２２−１−０〜２を有する。また、管理情報１１０−２に対応するコンテナ領域１２１−２は、１５３６［ｂｙｔｅ］の複数のデータ領域１２２−２−０〜２を有する。また、管理情報１１０は、対応するコンテナ領域１２１を特定するため、コンテナ領域１２１を識別するコンテナＩＤ（ＩＤｅｎｔｉｆｉｅｒ）を有する。図１の例では、コンテナ領域１２１−１のコンテナＩＤが１であり、コンテナ領域１２１−２のコンテナＩＤが２であるとする。
【００２０】
また、コンテナ領域１２１に含まれる各データ領域１２２の物理アドレスを特定可能な情報は、各データ領域１２２の物理アドレスそのものでもよいし、複数のデータ領域の先頭のデータ領域のアドレスと、データ領域のサイズとでもよい。図１の例では、管理情報１１０は、コンテナ領域１２１のコンテナ先頭アドレス１１２と、データ領域のサイズとして、コンテナ管理サイズ１１３とを有する。
【００２１】
また、データ領域１２２の使用状況を示す情報は、具体的には、下記３つの識別子のいずれかである。１つ目の識別子は、該当のデータ領域１２２が確保されてから一度も使用されていない状況を示す「空」である。２つ目の識別子は、該当のデータ領域１２２にデータが格納されており、データ領域１２２が使用されている状況を示す「使用中」である。３つ目の識別子は、該当のデータ領域１２２に過去にデータが格納されたが、現在はデータが格納されていない状況を示す「未使用」である。図１の例では、データ領域１２２の使用状況を示す情報を、「データ領域使用状況」と呼称する。そして、図１の例では、管理情報１１０は、各データ領域１２２のデータ領域使用状況と、各データ領域における先頭のデータ領域からの順番を示すスロット番号とを有するコンテナ情報１１４を有する。スロット番号は、０から開始してもよいし、１から開始してもよいが、各データ領域の物理アドレスを特定するためには、０から開始することが好ましい。図１に示すコンテナ情報１１４−１は、レコード１１５−１−０〜２を有する。また、コンテナ情報１１４−２は、レコード１１５−２−０〜２を有する。
【００２２】
論理アドレス情報１１１は、ストレージ１０２の記憶領域のうちのデータを書き込んだデータ領域１２２の物理アドレスを特定可能な情報に、前述のデータの論理アドレスを対応付けた情報である。データ領域１２２の物理アドレスを特定可能な情報は、データ領域１２２の物理アドレスそのものでもよいし、コンテナ番号とスロット番号とでもよい。コンテナ番号によって、該当のデータ領域１２２が属するコンテナ領域１２１の先頭のデータ領域１２２の物理アドレスと、該当のコンテナ領域１２１のコンテナ管理サイズ１１３を特定することができる。次に、スロット番号と、コンテナ管理サイズ１１３とによって、該当の先頭のデータ領域１２２から、特定しようとするデータ領域１２２の物理アドレスまでのオフセットを特定することができる。そして、該当の先頭のデータ領域１２２の物理アドレスに、前述のオフセットを加算することにより、特定しようとするデータ領域１２２の物理アドレスを特定することができる。
【００２３】
図１に示す論理アドレス情報１１１は、論理アドレスと、コンテナＩＤと、スロット番号とを有する。図１に示す論理アドレス情報１１１は、レコード１１６−０、１を有する。レコード１１６−０は、論理アドレスが０［ＫＢ］のデータが、コンテナＩＤ＝１、スロット番号＝０に格納されていることを示す。また、レコード１１６−１は、論理アドレスが０［ＫＢ］のデータが、コンテナＩＤ＝１、スロット番号１に格納されていることを示す。
【００２４】
まず、ストレージ制御装置１０１は、所定のサイズの書き込みデータと、該当の書き込みデータの論理アドレスとを含む書き込み要求を受け付ける。所定のサイズは、ストレージ１０２のアクセス単位以上のサイズであれば、どのようなサイズでもよい。例えば、所定のサイズは、４０９６［ｂｙｔｅ］や８１９２［ｂｙｔｅ］等である。以下の例では、所定のサイズは、４０９６［ｂｙｔｅ］であるとする。また、書き込み要求を、「ＷｒｉｔｅＩ／Ｏ」と呼称する。また、書き込みデータを、「Ｗｒｉｔｅデータ」と呼称する。同様に、読み出し要求を、「ＲｅａｄＩ／Ｏ」と呼称する。ＲｅａｄＩ／Ｏには、読み出し範囲の論理アドレスが含まれる。読み出し範囲を、「Ｒｅａｄ範囲」と呼称する。
【００２５】
また、ストレージ制御装置１０１は、所定のサイズ以上のＷｒｉｔｅデータを含むＷｒｉｔｅＩ／Ｏを受け付けてもよい。この場合、ストレージ制御装置１０１は、ＷｒｉｔｅＩ／Ｏに含まれるＷｒｉｔｅデータを所定のデータに分割し、分割した所定のＷｒｉｔｅデータと、分割した所定のＷｒｉｔｅデータの論理アドレスとを受け付けたこととしてもよい。また、ＷｒｉｔｅＩ／Ｏの発行元は、ストレージ制御装置１０１のユーザであり、例えば、ホスト装置であるが、これに限らない。例えば、本実施の形態が適用されていないストレージから、本実施の形態が適用されるストレージ１０２にデータを移行させるとする。この場合、データの移行を行う装置は、本実施の形態が適用されていないストレージから読み出したデータを、Ｗｒｉｔｅデータとして、ストレージ制御装置１０１にＷｒｉｔｅＩ／Ｏを発行してもよい。
【００２６】
図１の（１）で示すように、ストレージ制御装置１０１は、Ｗｒｉｔｅデータｗｄを受け付ける。また、受け付けたＷｒｉｔｅデータの先頭の論理アドレスは０［ＫＢ］である。図１の例では、Ｗｒｉｔｅデータｗｄが、所定のサイズである４０９６［ＫＢ］以上であるため、ストレージ制御装置１０１は、Ｗｒｉｔｅデータｗｄを４０９６［ＫＢ］ごとに分割する。以下、Ｗｒｉｔｅデータを分割して得られたデータを、「分割Ｗｒｉｔｅデータ」と呼称する。図１の例では、図１の（２）で示すように、ストレージ制御装置１０１は、Ｗｒｉｔｅデータｗｄを分割して、分割Ｗｒｉｔｅデータｗｄｓ−０、１、…を得る。また、分割Ｗｒｉｔｅデータｗｄｓ−０の論理アドレスは、０［ＫＢ］となり、分割Ｗｒｉｔｅデータｗｄｓ−１の論理アドレスは、４［ＫＢ］となる。ここで、論理アドレス０［０ＫＢ］、４［ＫＢ］は、論理アドレス情報１１１に登録されているアドレスであるから、データの上書きとなる。
【００２７】
次に、ストレージ制御装置１０１は、所定のサイズとなった分割Ｗｒｉｔｅデータｗｄｓと、分割Ｗｒｉｔｅデータｗｄｓの論理アドレスとを受け付けたことに応じて、分割Ｗｒｉｔｅデータｗｄｓを圧縮する。以下、分割Ｗｒｉｔｅデータを圧縮した圧縮後のデータを、「圧縮分割Ｗｒｉｔｅデータ」と呼称する。図１の例では、図１の（３−１）、（３−２）で示すように、ストレージ制御装置１０１は、分割Ｗｒｉｔｅデータｗｄｓ−１、２をそれぞれ圧縮して、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０、１を得る。ここで、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０、１のそれぞれのサイズが、３５８４［ｂｙｔｅ］、１５３６［ｂｙｔｅ］となったとする。
【００２８】
そして、ストレージ制御装置１０１は、管理情報１１０から、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のサイズに対応する管理情報１１０を特定する。管理情報１１０を特定することにより、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの格納先となるコンテナ領域１２１を決定することになる。ここで、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のサイズは、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上であって、最も小さいサイズであることが好ましい。図１の例では、図１の（４−１）で示すように、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０のサイズが３５８４［ｂｙｔｅ］であるため、ストレージ制御装置１０１は、コンテナ管理サイズが３５８４［ｂｙｔｅ］である管理情報１１０−１を特定する。同様に、図１の（４−２）で示すように、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−１のサイズが１５３６［ｂｙｔｅ］であるため、ストレージ制御装置１０１は、コンテナ管理サイズが１５３６［ｂｙｔｅ］である管理情報１１０−２を特定する。
【００２９】
ここで、圧縮分割Ｗｒｉｔｅデータｗｄｓｃが得られた時点で、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上であって、最も小さいサイズに対応する管理情報１１０が存在しない可能性もある。この場合、ストレージ制御装置１０１は、前述した最も小さいサイズに対応する管理情報１１０を生成すればよい。より具体的には、ストレージ制御装置１０１は、ストレージ１０２から、前述した最も小さいサイズの複数のデータ領域１２２を有するコンテナ領域１２１を確保する。そして、ストレージ制御装置１０１は、管理情報１１０をメモリ上に生成し、生成した管理情報１１０のコンテナ先頭アドレス１１２を、確保したコンテナ領域１２１の複数のデータ領域１２２の先頭のアドレスに設定する。また、ストレージ制御装置１０１は、生成した管理情報１１０のコンテナ管理サイズ１１３を、前述した最も小さいサイズに設定し、コンテナ情報１１４の全てのレコード１１５のデータ領域使用状況を「空」に設定する。
【００３０】
また、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上であって、最も小さいサイズに対応する管理情報１１０が存在しても、コンテナ情報１１４の全てのレコード１１５のデータ領域使用状況が「使用中」である可能性もある。この場合にも、ストレージ制御装置１０１は、前述した最も小さいサイズに対応する新たな管理情報１１０を生成してもよい。このように、同一のサイズに対応する管理情報１１０は、複数あってもよい。
【００３１】
また、管理情報１１０は、最大で、アクセス単位のサイズの１倍から、所定のサイズまでのｎ種類生成されることになる。図１の例では、アクセス単位のサイズが５１２［ｂｙｔｅ］であり、所定のサイズが４０９６［ｂｙｔｅ］であるから、ｎ＝８となる。
【００３２】
次に、ストレージ制御装置１０１は、特定した管理情報１１０から特定される複数のデータ領域１２２の未使用のデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。また、ストレージ制御装置１０１は、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの書き込みとともに、前述の未使用のデータ領域の物理アドレスを特定可能な情報と分割Ｗｒｉｔｅデータの論理アドレスとを対応付けて論理アドレス情報１１１に格納する。
【００３３】
ここで、データの上書きであり、特定したコンテナＩＤと、レコード１１６が示す上書き前となる旧データのコンテナＩＤとが同一となることもある。この場合、ストレージ制御装置１０１は、旧データのスロット番号で示されるデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを上書きしてもよい。これにより、ストレージ制御装置１０１は、コンテナ情報１１４のデータ領域使用状況や論理アドレス情報１１１を更新しなくてよくなる。図１の場合、データの上書きであり、論理アドレス０［ＫＢ］については、特定したコンテナＩＤと、レコード１１６−０が示す上書き前となる旧データのコンテナＩＤとがともに１であり、同一である。この場合、ストレージ制御装置１０１は、図１の（５−１）で示すように、旧データのスロット番号０で示されるデータ領域１２２−１−０に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。
【００３４】
また、論理アドレス４［ＫＢ］については、特定したコンテナＩＤが２であり、レコード１１６−１が示す上書き前となる旧データのコンテナＩＤが２であるから、異なるコンテナＩＤである。この場合、ストレージ制御装置１０１は、図１の（５−２）で示すように、特定したコンテナＩＤ＝２の未使用のデータ領域１２２−２−２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。また、ストレージ制御装置１０１は、図１の（６−２）で示すように、レコード１１６−１について、コンテナＩＤ＝２を格納するとともに、スロット番号２とを格納する。また、ストレージ制御装置１０１は、旧データのコンテナＩＤ＝１のレコード１１５−１−１のデータ領域使用状況を「未使用」に更新し、コンテナＩＤ＝２のレコード１１５−２−２のデータ領域使用状況を「使用中」に更新する。
【００３５】
以上の処理により、ストレージ制御装置１０１は、ストレージ１０２を効率的に使用することができる。具体的には、１つのコンテナ領域１２１に含まれるデータ領域１２２は、全て同一サイズである。従って、ガベージコレクション処理では、例えば、後方にあるデータ領域１２２のデータを、前方にある未使用のデータ領域１２２に移動させればよく、他のデータ領域１２２には影響を与えない。従って、ストレージ制御装置１０１は、データ領域が可変長である場合に比べて、ガベージコレクション処理を実施するＣＰＵの負荷とストレージ１０２の負荷とを抑制することができる。
【００３６】
また、ストレージ制御装置１０１は、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズに適したデータ領域１２２を使用することにより、データ領域１２２の記憶領域が十分に使用されるようになる。具体的には、データ領域１２２のサイズは、ストレージ１０２のアクセス単位の整数倍ごとに存在するため、圧縮分割Ｗｒｉｔｅデータｗｄｓｃが書き込まれたデータ領域１２２内で、データが書き込まれない領域のサイズは、常に５１２［ｂｙｔｅ］未満となる。一方、ストレージの記憶領域を等間隔で分割したデータ領域に圧縮後のデータを書き込む場合、１つのデータ領域で、圧縮後のデータが書き込まれない領域のサイズは、等間隔のデータサイズ未満となる。そして、同一のサイズの複数のデータを圧縮しても、データの内容によって圧縮後のデータのサイズはそれぞれ異なる。従って、圧縮してもデータサイズがほとんど小さくならなかった場合を担保するため、等間隔のデータサイズは、例えば圧縮前のデータサイズとなる。図１の例を用いると、圧縮前のデータサイズは、４０９６［ｂｙｔｅ］であるから、１つのデータ領域で、データが書き込まれない領域のサイズは、４０９６［ｂｙｔｅ］未満となり、本実施の形態に比べ、ストレージの記憶領域が十分に使用されていない。
【００３７】
また、図１では、管理情報１１０−１、１１０−２という、２つの管理情報１１０しか表示していないが、ストレージ制御装置１０１は、３つ以上の管理情報１１０にアクセス可能でもよい。そして、３つ以上の管理情報１１０にアクセス可能なストレージ制御装置１０１は、３つ以上の管理情報１１０から、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のサイズに対応する管理情報１１０を特定する。
【００３８】
また、図１で説明した方法は、ストレージ１０２が、重複排除が適用されたストレージであっても適用することができる。ここで、重複排除は、ストレージ内の複数のデータの中から同一のデータを検出し、複数の同一のデータのうちの１つのデータを残して他のデータを排除し、残したデータの物理アドレスに対応して、残したデータを参照する論理アドレスの数を管理する。ストレージ制御装置１０１を、ストレージシステムに適用した例を、図２を用いて説明する。
【００３９】
図２は、ストレージシステム２００のハードウェア構成例を示す説明図である。ストレージシステム２００は、ディスクアレイ装置２０１と、ホスト装置２０２とを有する。そして、ディスクアレイ装置２０１は、１以上のＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）２１１と、１以上のディスク２１２と、１以上のＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）２１３とを含む。ＣＭ２１１は、ＣＰＵ２２１と、ＤＲＡＭ２２２と、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２２３とを有する。ここで、ＣＭ２１１は、図１に示したストレージ制御装置１０１に相当する。また、ディスク２１２は、図１に示したストレージ１０２に相当する。
【００４０】
ディスクアレイ装置２０１は、複数のディスクを束ねた大容量のボリュームをユーザに提供する装置である。ホスト装置２０２は、ユーザが使用するホストコンピュータである。また、ホスト装置２０２は、ディスクアレイ装置２０１を利用するＷｅｂサーバ等でもよい。
【００４１】
ＣＭ２１１は、ディスク２１２、ＣＡ２１３、ＣＰＵ２２１、ＤＲＡＭ２２２等の資源管理を行うコントローラ制御部である。ディスク２１２は、ユーザデータや制御情報を記憶する不揮発性の記憶装置である。例えば、ディスク２１２は、ＨＤＤや、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。そして、ディスク２１２は、全てがＨＤＤでもよいし、全てがＳＳＤでもよいし、ＨＤＤとＳＳＤとが混在してもよい。
【００４２】
ＣＰＵ２２１は、ＣＭ２１１の全体の制御を司る演算処理装置である。また、ＣＰＵ２２１は、複数のコアを有してもよい。ＤＲＡＭ２２２は、ＣＭ２１１内の１次キャッシュメモリとして使用される揮発メモリである。従って、ＤＲＡＭ２２２は、ユーザデータや制御情報の一部を記憶する。フラッシュＲＯＭ２２３は、本実施の形態におけるストレージ制御プログラムを記憶する不揮発性メモリである。不揮発性メモリの記憶媒体としては、例えば、ＮＯＲフラッシュメモリや、ＮＡＮＤフラッシュメモリを採用することができる。
【００４３】
（ＣＭ２１１の機能構成例）
図３は、ＣＭ２１１の機能構成例を示す説明図である。ＣＭ２１１は、制御部３００を有する。制御部３００は、受け付け部３０１と、コンテナ領域決定部３０２と、書き込み部３０３と、特定部３０４と、読み出し部３０５とを含む。制御部３００は、記憶装置に記憶されたプログラムをＣＰＵ２２１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したフラッシュＲＯＭ２２３などである。また、各部の処理結果は、ＤＲＡＭ２２２や、ＣＰＵ２２１のレジスタ、ＣＰＵ２２１のキャッシュメモリ等に格納される。
【００４４】
また、ＣＭ２１１は、記憶部３１０にアクセス可能である。記憶部３１０は、例えば、ＤＲＡＭ２２２である。記憶部３１０は、ブロックマップテーブル３１１と、データサイズ別管理テーブル３１２−１、２、…とを有する。ブロックマップテーブル３１１は、図１に示した論理アドレス情報１１１に相当する。データサイズ別管理テーブル３１２は、図１で示した管理情報１１０に相当する。ここで、データサイズ別管理テーブル３１２は、各データ領域を参照する論理アドレスの数が含まれる。ブロックマップテーブル３１１の記憶内容については、図４で示す。また、データサイズ別管理テーブル３１２の記憶内容については、図５で示す。
【００４５】
また、ＣＭ２１１は、ディスク２１２にアクセス可能である。そして、ディスク２１２には、データサイズ別管理テーブル３１２に対応するコンテナ領域１２１が確保される。ここで、図３では、１つのディスク２１２に複数のコンテナ領域１２１が確保されているが、これに限らない。例えば、１つのコンテナ領域１２１が、複数のディスク２１２に跨ってもよい。また、各データサイズ別管理テーブル３１２に含まれる複数のデータ領域１２２の各データ領域１２２は、重複排除により、互いに重複しないデータを有する。
【００４６】
受け付け部３０１は、ＷｒｉｔｅＩ／Ｏや、ＲｅａｄＩ／Ｏを受け付ける。
【００４７】
コンテナ領域決定部３０２は、受け付け部３０１がＷｒｉｔｅＩ／Ｏを受け付けたことに応じて、Ｗｒｉｔｅデータｗｄが４０９６［ｂｙｔｅ］以上であれば分割し、所定のサイズとなった分割Ｗｒｉｔｅデータｗｄｓを得る。そして、コンテナ領域決定部３０２は、分割Ｗｒｉｔｅデータｗｄｓを圧縮した圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のサイズに対応するデータサイズ別管理テーブル３１２を特定する。データサイズ別管理テーブル３１２を特定することにより、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの格納先となるコンテナ領域１２１を決定することになる。
【００４８】
書き込み部３０３は、コンテナ領域決定部３０２が決定したコンテナ領域１２１のうちの未使用のデータ領域１２２に圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。また、書き込み部３０３は、前述の圧縮分割Ｗｒｉｔｅデータｗｄｓｃの書き込みとともに、前述のデータ領域１２２のコンテナＩＤとスロット番頭とを対応付けてブロックマップテーブル３１１に格納する。また、書き込み部３０３は、コンテナ領域決定部３０２が決定したコンテナ領域１２１のうちの未使用のデータ領域１２２が複数あれば、先頭にある未使用のデータ領域１２２に圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んでもよい。
【００４９】
また、図１では、特定したコンテナＩＤと、上書き前となる旧データのコンテナＩＤとが同一となる場合、旧データのスロット番号で示されるデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを上書きしてもよいことを説明した。この方法を、重複排除に適用すると、書き込み部３０３は、さらに、ブロックマップテーブル３１１における分割Ｗｒｉｔｅデータｗｄｓの論理アドレスに対応するスロット番号で示されるデータ領域１２２を参照する論理アドレスの数が１であるか否かを判断する。該当の論理アドレスの数が１であれば、旧データのスロット番号で示されるデータ領域１２２は、複数の論理アドレスから参照されておらず、上書きすることが可能である。従って、該当のデータ領域１２２を参照する論理アドレスの数が１である場合、書き込み部３０３は、旧データのスロット番号で示されるデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを上書きする。
【００５０】
特定部３０４は、ＲｅａｄＩ／Ｏを受け付けたことに応じて、Ｒｅａｄ範囲の論理アドレスが４０９６［ｂｙｔｅ］以上であれば分割し、所定のサイズとなった分割Ｒｅａｄ範囲を得る。そして、特定部３０４は、ブロックマップテーブル３１１を参照して、分割Ｒｅａｄ範囲の論理アドレスに対応するコンテナＩＤと、スロット番号とを特定する。
【００５１】
読み出し部３０５は、分割Ｒｅａｄ範囲の論理アドレスに対応するデータが書き込まれたデータ領域１２２の物理アドレスを算出し、ディスク２１２の算出した物理アドレスからデータを読み出す。具体的には、読み出し部３０５は、特定したコンテナＩＤにおける複数のデータ領域１２２の先頭の物理アドレスと、特定したスロット番号と、特定したコンテナＩＤのコンテナ管理サイズとに基づいて、前述した物理アドレスを算出する。例えば、読み出し部３０５は、下記（１）式によって、前述した物理アドレスを算出する。
【００５２】
分割Ｒｅａｄ範囲に対応するデータ領域１２２の物理アドレス＝特定したコンテナＩＤのコンテナ先頭アドレス＋（特定したコンテナＩＤのコンテナ管理サイズ×特定したスロット番号）  …（１）
【００５３】
なお、（１）式におけるスロット番号は、０から始まる場合を想定する。スロット番号が１から始まる場合には、読み出し部３０５は、（１）式におけるスロット番号を１減じて算出すればよい。
【００５４】
図４は、ブロックマップテーブル３１１の記憶内容の一例を示す説明図である。図４に示すブロックマップテーブル３１１は、レコード４０１−０〜１２を有する。
【００５５】
ブロックマップテーブル３１１は、論理アドレスと、物理格納コンテナＩＤと、物理格納スロット番号というフィールドを含む。論理アドレスフィールドには、論理アドレスを示す値が格納される。物理格納コンテナＩＤフィールドには、該当の論理アドレスで特定されたデータが格納されたコンテナのＩＤが格納される。物理格納スロット番号フィールドには、該当の論理アドレスで特定されたデータが格納されたスロット番号が格納される。
【００５６】
例えば、レコード４０１−０は、論理アドレス０［ＫＢ］で特定されるデータが、コンテナＩＤ２のスロット番号０で管理するデータ領域１２２に格納されたことを示す。
【００５７】
次に、データサイズ別管理テーブル３１２の一例として、データサイズ別管理テーブル３１２−１の記憶内容の一例を、図５を用いて説明する。
【００５８】
図５は、データサイズ別管理テーブル３１２−１の記憶内容の一例を示す説明図である。データサイズ別管理テーブル３１２は、コンテナＩＤと、コンテナ情報５０１と、未使用キュー５０２と、コンテナ管理サイズ５０３と、コンテナ先頭アドレス５０４とを有する。
【００５９】
コンテナＩＤは、ＣＭ２１１が管理するコンテナのＩＤである。コンテナ情報５０１は、ＣＭ２１１が管理するコンテナの情報を有する。図５に示すコンテナ情報５０１は、レコード５１１−０〜７を有する。
【００６０】
具体的には、コンテナ情報５０１は、スロット番号と、データ領域使用状況と、リファレンスカウンタというフィールドを含む。スロット番号フィールドには、該当のコンテナ内のスロット番号が格納される。データ領域使用状況フィールドには、スロット番号で管理するデータ領域１２２の使用状況を示す識別子が格納される。使用状況を示す識別子としては、図１に示した「空」、「使用中」、「未使用」である。
【００６１】
リファレンスカウンタフィールドには、該当のデータ領域１２２のリファレンスカウンタが格納される。具体的には、リファレンスカウンタは、該当のデータ領域１２２を参照する論理アドレスの数となる。
【００６２】
未使用キュー５０２は、該当のコンテナの中で、使用状況が「未使用」となるデータ領域１２２を管理するキューである。コンテナ管理サイズ５０３は、該当のコンテナ領域１２１の中のデータ領域１２２のサイズである。コンテナ先頭アドレス５０４は、該当のコンテナ領域１２１の中で、最も先頭にあるデータ領域１２２の先頭の物理アドレスである。
【００６３】
次に、Ｗｒｉｔｅ受け付け時のＣＭ２１１の動作例を、図６〜図８を用いて説明する。
【００６４】
図６は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その１）である。ＣＭ２１１は、図６の（１）で示すように、ホスト装置２０２から受け付けたＷｒｉｔｅ要求に含まれるＷｒｉｔｅデータｗｄを、４０９６［ｂｙｔｅ］ごとに分割する。以降の処理は、Ｗｒｉｔｅデータｗｄを分割した分割Ｗｒｉｔｅデータｗｄｓの単位で処理を行う。図６の例では、ＣＭ２１１は、Ｗｒｉｔｅデータｗｄを分割して、分割Ｗｒｉｔｅデータｗｄｓ−０〜５、…を得る。
【００６５】
次に、ＣＭ２１１は、図６の（２）で示すように、ブロックマップテーブル３１１を参照し、各分割Ｗｒｉｔｅデータｗｄｓについて、旧データの格納位置を特定する。旧データの格納位置の特定例について具体的に説明する。例えば、Ｗｒｉｔｅ要求が、先頭の論理アドレス０［ＫＢ］に対してＷｒｉｔｅデータｗｄを書き込む、という要求であるとする。この場合、分割Ｗｒｉｔｅデータｗｄｓ−０の論理アドレスは、０［ＫＢ］となる。そして、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−０について、図４に示すレコード４０１−０を参照して、分割Ｗｒｉｔｅデータｗｄｓ−０の旧データが、コンテナＩＤ２、スロット番号０であると特定する。また、分割Ｗｒｉｔｅデータｗｄｓ−１の論理アドレスは、４［ＫＢ］となる。この場合、分割Ｗｒｉｔｅデータｗｄｓ−１の論理アドレスは、０［ＫＢ］となる。そして、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−１について、図４に示すレコード４０１−１を参照して、分割Ｗｒｉｔｅデータｗｄｓ−１の旧データが、コンテナＩＤ６、スロット番号０であると特定する。
【００６６】
そして、ＣＭ２１１は、図６の（３）で示すように、ディスク２１２に格納した圧縮データのうち、各分割Ｗｒｉｔｅデータｗｄｓと重複するデータがあるか否かを判断する。具体的には、ＣＭ２１１は、圧縮データの元データのハッシュ値を算出し、ディスク２１２に格納する際に、算出したハッシュ値を、物理格納コンテナＩＤと物理格納スロット番号とに対応付けて、ＤＲＡＭ２２２等に記憶しておく。そして、ＣＭ２１１は、各分割Ｗｒｉｔｅデータｗｄｓのハッシュ値を算出し、記憶したハッシュ値と比較することにより、重複するデータがあるか否かを判断する。具体的には、各分割Ｗｒｉｔｅデータｗｄｓのハッシュ値と、記憶したハッシュ値とが一致した場合、ＣＭ２１１は、重複するデータがあると判断する。一方、各分割Ｗｒｉｔｅデータｗｄｓのハッシュ値と、記憶した全てのハッシュ値とが異なる場合、ＣＭ２１１は、重複するデータがないと判断する。図６の例では、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−０、２について、重複するデータがないと判断し、分割Ｗｒｉｔｅデータｗｄｓ−１について、重複するデータがあると判断する。
【００６７】
各分割Ｗｒｉｔｅデータｗｄｓについて、重複するデータがないと判断した場合、ＣＭ２１１は、図６の（４−１）で示すように、各分割Ｗｒｉｔｅデータｗｄｓを圧縮し、各圧縮分割Ｗｒｉｔｅデータｗｄｓｃを得る。図６の例では、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−０、２をそれぞれ圧縮し、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０、２を得る。ここで、図６に示す圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０は、３５８４［ｂｙｔｅ］になり、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−２は、１５３６［ｂｙｔｅ］になる。
【００６８】
一方、各分割Ｗｒｉｔｅデータｗｄｓについて、重複するデータがあると判断した場合、図６の（４−２）で示すように、重複するデータに対するリファレンスカウンタを１加算する。リファレンスカウンタの加減算については、図９で説明する。
【００６９】
図７は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その２）である。図７で示す状態は、図６の（４−１）の処理が完了した状態である。ＣＭ２１１は、図７の（１）で示すように、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの圧縮後のデータサイズに応じて、ディスク書き込みサイズを決定し、決定したディスク書き込みサイズに対応するコンテナを、圧縮後のデータの格納先として決定する。具体的には、ＣＭ２１１は、圧縮後のデータサイズを、アクセス単位である５１２［ｂｙｔｅ］単位で切り上げたサイズを、ディスク書き込みサイズとして決定する。ここで、圧縮前のデータは、４０９６［ｂｙｔｅ］であるから、ディスク書き込みサイズは、ｎを１〜８のうちのいずれかの整数として、５１２ｘｎ［ｂｙｔｅ］となる。
【００７０】
図７の例では、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−０の格納先を、コンテナ管理サイズが３５８４［ｂｙｔｅ］となるコンテナＩＤ＝１のコンテナに決定する。同様に、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−２の格納先を、コンテナ管理サイズが１５３６［ｂｙｔｅ］となるコンテナＩＤ＝２のコンテナに決定する。
【００７１】
図８は、ＷｒｉｔｅＩ／Ｏ受け付け時の動作例を示す説明図（その３）である。図８で示す状態は、図７の（１）で示した処理が完了した後の状態を示す。ＣＭ２１１は、図８の（１）で示すように、格納先として決定したコンテナの未使用キュー５０２に接続されているデータ領域１２２があるか否かを判断する。図８の例では、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−０の格納先として決定したコンテナＩＤ＝１の未使用キュー５０２を参照して、未使用キュー５０２に接続されているデータ領域１２２があると判断する。また、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓ−２の格納先として決定したコンテナＩＤ＝２の未使用キュー５０２を参照して、未使用キュー５０２に接続されているデータ領域１２２がないと判断する。
【００７２】
次に、ＣＭ２１１は、未使用キュー５０２に接続されているデータ領域１２２があると判断した場合、図８の（２−１）で示すように、格納先として決定したコンテナの未使用キュー５０２の先頭のデータ領域１２２に圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。図８の例では、ＣＭ２１１は、データサイズ別管理テーブル３１２−１の未使用キュー５０２の先頭となるスロット番号１で管理するデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０を書き込む。
【００７３】
また、ＣＭ２１１は、未使用キュー５０２に接続されているデータ領域１２２がないと判断したとする。この場合、ＣＭ２１１は、図８の（２−２）で示すように、格納先として決定したコンテナの空のデータ領域１２２を獲得し、獲得した空のデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。図８の例では、ＣＭ２１１は、データサイズ別管理テーブル３１２−２のコンテナ情報５０１のうち、使用状況が「空」となるスロット番号３で管理するデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−２を書き込む。ここで、図８では、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０、２を書き込んだ領域に網掛けを付与する。
【００７４】
図９は、リファレンスカウンタ加減算処理の動作例を示す説明図である。図９で示す状態は、図８の（２−１）、（２−２）のそれぞれの処理が完了した状態である。ＣＭ２１１は、図９の（１）で示すように、今回圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んだデータ領域１２２のリファレンスカウンタを加算する。また、ＣＭ２１１は、今回圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む前に使用していたデータ領域１２２のリファレンスカウンタを減算する。
【００７５】
図９の例では、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−０を書き込む前に使用していたデータ領域１２２が、データサイズ別管理テーブル３１２−１のスロット番号５で管理するデータ領域１２２であるとする。また、圧縮分割Ｗｒｉｔｅデータｗｄｓｃ−２を書き込む前に使用していたデータ領域１２２が、データサイズ別管理テーブル３１２−２のスロット番号２で管理するデータ領域１２２であるとする。従って、ＣＭ２１１は、データサイズ別管理テーブル３１２−１のレコード５１１−１と、データサイズ別管理テーブル３１２−２のレコード５１１−３のリファレンスカウンタを１インクリメントする。また、ＣＭ２１１は、データサイズ別管理テーブル３１２−１のレコード５１１−５と、データサイズ別管理テーブル３１２−２のレコード５１１−２のリファレンスカウンタを１デクリメントする。
【００７６】
図１０は、ＲｅａｄＩ／Ｏ受け付け時の動作例を示す説明図である。図１０で示す状態は、図９の（１）の処理が完了した後に、ホスト装置２０２からＲｅａｄ要求を受け付けた状態である。ＣＭ２１１は、図１０の（１）で示すように、ホスト装置２０２から受け付けたＲｅａｄ要求に含まれるＲｅａｄ範囲ｒａを、４０９６［ｂｙｔｅ］ごとに分割する。以降の処理は、Ｒｅａｄ範囲ｒａを分割した分割Ｒｅａｄ範囲ｒａｓの単位で処理を行う。図１０の例では、ＣＭ２１１は、Ｒｅａｄ範囲ｒａを分割して、分割Ｒｅａｄ範囲ｒａｓ−０〜３、…を得る。また、図１０では、分割Ｒｅａｄ範囲ｒａｓ−３について示す。
【００７７】
次に、ＣＭ２１１は、図１０の（２）で示すように、ブロックマップテーブル３１１を参照して、各分割Ｒｅａｄ範囲ｒａｓの圧縮分割データが格納されているデータ領域１２２のコンテナＩＤと、スロット番号とを特定する。図１０の例では、ＣＭ２１１は、図４に示すレコード４０１−３を参照して、分割Ｒｅａｄ範囲ｒａｓ−３のデータが格納されているデータ領域１２２のコンテナＩＤが１であり、スロット番号が５であると特定する。
【００７８】
そして、ＣＭ２１１は、図１０の（３）で示すように、特定したコンテナＩＤに対応するデータサイズ別管理テーブル３１２を参照して、各分割Ｒｅａｄ範囲ｒａｓの圧縮分割データが格納されているデータ領域１２２の物理アドレスを算出する。具体的には、ＣＭ２１１は、図３で示した（１）式に従って、各分割Ｒｅａｄ範囲ｒａｓに対応するデータ領域１２２の物理アドレスを算出する。
【００７９】
図１０の例では、ＣＭ２１１は、分割Ｒｅａｄ範囲ｒａｓ−３に対応するデータ領域１２２の物理アドレスを、（１）式に従って下記のように算出する。
【００８０】
分割Ｒｅａｄ範囲ｒａｓ−３に対応するデータ領域１２２の物理アドレス＝０ｘ２０００００００＋（３５８４×５）＝０ｘ２０００４６００
【００８１】
次に、ＣＭ２１１は、図１０の（４）で示すように、ディスク２１２上の算出した物理アドレスから、圧縮分割データを読み出す。図１０の例では、ＣＭ２１１は、物理アドレス０ｘ２０００４６００から、圧縮分割データｄｓｃ−３を読み出す。この後、ＣＭ２１１は、読み出した圧縮分割データｄｓｃ−３を伸長し、伸長して得られたデータをホスト装置２０２に送信する。
【００８２】
次に、ＣＭ２１１が実行する処理を示すフローチャートを、図１１〜図１３を用いて説明する。
【００８３】
図１１は、ＷｒｉｔｅＩ／Ｏ受け付け時処理手順の一例を示すフローチャートである。ＣＭ２１１は、ホスト装置２０２からＷｒｉｔｅＩ／Ｏを受け付ける（ステップＳ１１０１）。次に、ＣＭ２１１は、Ｗｒｉｔｅデータｗｄを４０９６［ｂｙｔｅ］ごとに分割する（ステップＳ１１０２）。Ｗｒｉｔｅデータｗｄが４０９６［ｂｙｔｅ］以上である場合、ＣＭ２１１は、ステップＳ１１０３〜Ｓ１１０５の処理を、Ｗｒｉｔｅデータｗｄを分割することにより得られた分割Ｗｒｉｔｅデータｗｄｓごとに実施する。図１１、図１２の説明では、各分割Ｗｒｉｔｅデータｗｄｓのうちの１つの分割Ｗｒｉｔｅデータｗｄｓについて説明する。
【００８４】
そして、ＣＭ２１１は、ブロックマップテーブル３１１を参照し、分割Ｗｒｉｔｅデータｗｄｓについて、旧データの格納位置を特定する（ステップＳ１１０３）。次に、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓと重複するデータがあるか否かを判断する（ステップＳ１１０４）。
【００８５】
分割Ｗｒｉｔｅデータｗｄｓと重複するデータがない場合（ステップＳ１１０４：重複するデータなし）、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓを圧縮する（ステップＳ１１０５）。次に、ＣＭ２１１は、分割Ｗｒｉｔｅデータｗｄｓを圧縮して得られた圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズに応じて、ディスク書き込みサイズを決定する（ステップＳ１１０６）。そして、ＣＭ２１１は、ディスク書き込みサイズに対応するコンテナを、圧縮分割Ｗｒｉｔｅデータｗｄｓｃの格納先として決定する（ステップＳ１１０７）。次に、ＣＭ２１１は、格納先として決定したコンテナの未使用キューに接続されているデータ領域１２２があるか否かを判断する（ステップＳ１１０８）。
【００８６】
格納先として決定したコンテナの未使用キューに接続されているデータ領域１２２がない場合（ステップＳ１１０８：未使用キューにデータ領域の登録なし）、ＣＭ２１１は、格納先として決定したコンテナの空のデータ領域１２２を獲得する（ステップＳ１１０９）。そして、ＣＭ２１１は、獲得した空のデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む（ステップＳ１１１０）。
【００８７】
また、格納先として決定したコンテナの未使用キューに接続されているデータ領域１２２がある場合（ステップＳ１１０８：未使用キューにデータ領域の登録あり）、ＣＭ２１１は、格納先として決定したコンテナの未使用キューの先頭のデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む（ステップＳ１１１１）。そして、ＣＭ２１１は、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んだデータ領域１２２を、未使用キューから削除する（ステップＳ１１１２）。
【００８８】
ステップＳ１１１０、または、ステップＳ１１１２の処理終了後、または、分割Ｗｒｉｔｅデータｗｄｓと重複するデータがある場合（ステップＳ１１０４：重複するデータあり）、ＣＭ２１１は、リファレンスカウンタ加減算処理を実行する（ステップＳ１１１３）。リファレンスカウンタ加減算処理は、図１２で説明する。
【００８９】
そして、ＣＭ２１１は、ブロックマップテーブル３１１を更新する（ステップＳ１１１４）。ステップＳ１１１４の処理について、より具体的に説明する。ここで、更新対象となる箇所は、ブロックマップテーブル３１１における、分割Ｗｒｉｔｅデータｗｄｓの論理アドレスに対応するレコードの物理格納コンテナＩＤおよび物理格納スロット番号である。以下、該当の物理格納コンテナＩＤおよび物理格納スロット番号を、「更新対象の該当の物理格納コンテナＩＤおよび物理格納スロット番号」と称する。
【００９０】
例えば、ＣＭ２１１が、ステップＳ１１０４の処理で、重複するデータありと判断したとする。この場合、ＣＭ２１１は、更新対象の物理格納コンテナＩＤおよび物理格納スロット番号を、重複するデータが格納されている物理格納コンテナＩＤおよび物理格納スロット番号に更新する。
【００９１】
また、ＣＭ２１１が、ステップＳ１１０８の処理について、未使用キューにデータ領域１２２の登録なしと判断したとする。この場合、ＣＭ２１１は、更新対象の物理格納コンテナＩＤおよび物理格納スロット番号を、獲得したデータ領域１２２の物理格納コンテナＩＤおよび物理格納スロット番号に更新する。一方、ＣＭ２１１が、ステップＳ１１０８の処理について、未使用キューにデータ領域１２２の登録ありと判断したとする。この場合、ＣＭ２１１は、更新対象の物理格納コンテナＩＤおよび物理格納スロット番号を、圧縮分割Ｗｒｉｔｅデータを書き込んだデータ領域１２２の物理格納コンテナＩＤおよび物理格納スロット番号に更新する。
【００９２】
ステップＳ１１１４の処理終了後、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏ受け付け時処理を終了する。
【００９３】
図１２は、リファレンスカウンタ加減算処理手順の一例を示すフローチャートである。ＣＭ２１１は、今回の圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んだデータ領域１２２のリファレンスカウンタを１加算する（ステップＳ１２０１）。また、ＣＭ２１１は、今回の圧縮分割Ｗｒｉｔｅデータを書き込む前に使用していたデータ領域１２２のリファレンスカウンタを１減算する（ステップＳ１２０２）。そして、ＣＭ２１１は、今回のリファレンスカウンタの更新により、リファレンスカウンタが０になったデータ領域１２２があるか否かを判断する（ステップＳ１２０３）。
【００９４】
リファレンスカウンタが０になったデータ領域１２２がある場合（ステップＳ１２０３：リファレンスカウンタが０になったデータ領域あり）、ＣＭ２１１は、対象のデータ領域１２２を未使用として、未使用キューに対象のデータ領域１２２を接続する（ステップＳ１２０４）。ステップＳ１２０４の処理終了後、または、リファレンスカウンタが０になったデータ領域１２２がない場合（ステップＳ１２０３：リファレンスカウンタが０になったデータ領域なし）、ＣＭ２１１は、リファレンスカウンタ加減算処理を終了する。
【００９５】
図１３は、ＲｅａｄＩ／Ｏ受け付け時処理手順の一例を示すフローチャートである。ＣＭ２１１は、ＲｅａｄＩ／Ｏを受け付ける（ステップＳ１３０１）。次に、ＣＭ２１１は、Ｒｅａｄ範囲ｒａを４０９６［ｂｙｔｅ］ごとに分割する（ステップＳ１３０２）。Ｒｅａｄ範囲ｒａが４０９６［ｂｙｔｅ］以上である場合、ＣＭ２１１は、ステップＳ１３０３〜Ｓ１３０６の処理を、Ｒｅａｄ範囲ｒａを分割することにより得られた分割Ｒｅａｄ範囲ｒａｓごとに実施する。図１１、図１２の説明では、各分割Ｗｒｉｔｅデータｗｄｓのうちの１つの分割Ｒｅａｄ範囲ｒａｓについて説明する。
【００９６】
そして、ＣＭ２１１は、ブロックマップテーブル３１１を参照して、分割Ｒｅａｄ範囲ｒａｓについて、コンテナＩＤと、スロット番号とを特定する（ステップＳ１３０３）。次に、ＣＭ２１１は、特定したコンテナＩＤに対応するデータサイズ別管理テーブル３１２を参照して、分割Ｒｅａｄ範囲ｒａｓに対応するデータ領域１２２の物理アドレスを算出する（ステップＳ１３０４）。そして、ＣＭ２１１は、ディスク２１２上の算出したアドレスから、圧縮分割データを読み出す（ステップＳ１３０５）。次に、ＣＭ２１１は、読み出した圧縮分割データを伸長する（ステップＳ１３０６）。ステップＳ１３０６の処理終了後、ＣＭ２１１は、各圧縮分割データを伸長して得られた各分割データを結合し、結合したデータをＲｅａｄデータとして、ホスト装置２０２に送信し、ＲｅａｄＩ／Ｏ受け付け時処理を終了する。
【００９７】
以上説明したように、実施の形態１にかかるＣＭ２１１は、データサイズ別管理テーブル３１２から、圧縮分割Ｗｒｉｔｅデータｗｄｓｃのサイズ以上のデータ領域１２２を特定し、特定したデータ領域１２２に前述の圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込む。これにより、ＣＭ２１１は、ディスク２１２を効率的に使用することができる。具体的には、図１で述べたように、ＣＭ２１１は、データ領域１２２が可変長である場合に比べて、ＣＰＵ２２１の負荷とディスク２１２の負荷とを抑制することができる。また、ＣＭ２１１は、ディスク２１２の記憶領域を十分に使用することができる。
【００９８】
また、ＣＭ２１１は、ディスク２１２がＨＤＤである際に、コンテナ領域決定部３０２が決定したコンテナ領域１２１のうちの未使用のデータ領域１２２が複数あれば、先頭にある未使用のデータ領域１２２に圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んでもよい。これにより、ＣＭ２１１は、ガベージコレクション処理が不要になり、常に前詰め状態でＷｒｉｔｅＩ／ＯやＲｅａｄＩ／Ｏを継続することができる。また、上述の効果は、ディスク２１２の記憶領域が、ヘッドによってアクセスされればよく、例えば、ディスク２１２が、光ディスク等でもよい。ディスク２１２がＨＤＤであれば、ヘッドは、磁気ヘッドである。また、ディスク２１２が、光ディスクであれば、ヘッドは、光ヘッドである。
【００９９】
また、ＣＭ２１１は、（１）式に基づいて、分割Ｒｅａｄ範囲ｒａｓに対応するデータ領域の物理アドレスを算出してもよい。これにより、ＣＭ２１１は、読み出し対象となる物理アドレスが容易に特定できるため、読み出し速度を向上することができる。具体的には、ストレージの記憶領域を分割せずに、圧縮後のデータを前詰めで書き込んでいく場合、圧縮後のデータは可変であるため、圧縮後のデータを格納したデータ領域の識別子と、データ領域の物理アドレスとを対応付けたテーブルを用意することになる。しかしながら、本実施の形態では、読み出し対象となる物理アドレスが、コンテナ管理サイズ×スロット番号で求められるため、前述したテーブルを参照しなくてよい。従って、ＣＭ２１１は、読み出し速度を向上することができる。
【０１００】
また、重複排除を行わない場合、ＣＭ２１１は、特定したコンテナＩＤと、旧データのコンテナＩＤとが同一であれば、旧データのスロット番号で示されるデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを上書きしてもよい。これにより、ＣＭ２１１は、ブロックマップテーブル３１１やデータサイズ別管理テーブル３１２を更新しなくてよくなるため、ＣＭ２１１にかかる負荷を抑制することができる。
【０１０１】
また、重複排除を行う場合、ＣＭ２１１は、重複排除を行わない場合の条件に加え、ブロックマップテーブル３１１における分割Ｗｒｉｔｅデータｗｄｓの論理アドレスに対応するスロット番号のリファレンスカウンタが１であるか否かを判断する。そして、リファレンスカウンタが１であれば、ＣＭ２１１は、旧データのスロット番号で示されるデータ領域１２２に、圧縮分割Ｗｒｉｔｅデータｗｄｓｃを上書きしてもよい。これにより、ＣＭ２１１は、ブロックマップテーブル３１１やデータサイズ別管理テーブル３１２を更新しなくてよくなるため、重複排除であっても、ＣＭ２１１にかかる負荷を抑制することができる。
【０１０２】
（実施の形態２）
次に、実施の形態２にかかるストレージ制御装置１０１（ＣＭ２１１）について説明する。なお、実施の形態１で説明した箇所と同一の箇所については、同一符号を付して図示および説明を省略する。
【０１０３】
ここで、ホスト装置２０２から書き込まれるデータの特徴（Ｉ／Ｏパターン）が変化する、すなわち、データパターン傾向が変化することで、圧縮後のデータサイズの傾向が変わることがある。実施の形態１では、このような環境下において、コンテナ（コンテナ領域１２１）のために、ディスク２１２の物理記憶領域を無駄に確保したままとなってしまう場合がある。
【０１０４】
図１４は、データパターン傾向が変化した際のコンテナの状態を示す説明図である。図１４において、まず、データパターン傾向が、書き込みデータが６ブロックのデータサイズに圧縮されるようなＩ／Ｏパターンだった場合を想定する。この場合、６ブロック用コンテナ内の各スロット（データ領域１２２）の使用状況は、図１４の（１４−１）に示すような状態となる。
【０１０５】
この後、データパターン傾向が、書き込みデータが７ブロックのデータサイズに圧縮されるようなＩ／Ｏパターンに変化した場合を想定する。この場合、６ブロック用コンテナ内の各スロットの使用状況、および、７ブロック用コンテナ内の各スロットの使用状況は、図１４の（１４−２）に示すような状態となる。
【０１０６】
（１４−２）に示すような６ブロック用コンテナの状態では、大部分のスロットが未使用であるにもかかわらず、物理容量としては消費した状態となってしまう。結果的に、６ブロック用コンテナと７ブロック用コンテナの両方で物理容量を消費することになり、重複排除やデータ圧縮を実施しても、ディスク２１２を効率的に使用する効果が薄くなるおそれがある。
【０１０７】
そこで、実施の形態２では、コンテナ単位でガベージコレクションの実施の要否を判断し、コンテナ内の未使用領域を物理解放可能にしてディスク２１２の使用効率を向上させるストレージ制御装置１０１（ＣＭ２１１）について説明する。まず、実施の形態２にかかるストレージ制御装置１０１（ＣＭ２１１）の機能構成例について説明する。
【０１０８】
（ＣＭ２１１の機能構成例）
図１５は、実施の形態２にかかるＣＭ２１１の機能構成例を示す説明図である。ＣＭ２１１は、制御部３００を有する。制御部３００は、受け付け部３０１と、コンテナ領域決定部３０２と、書き込み部３０３と、特定部３０４と、読み出し部３０５と、物理解放制御部１５０１と、を含む。制御部３００は、記憶装置に記憶されたプログラムをＣＰＵ２２１が実行することにより、各部の機能を実現する。また、各部の処理結果は、ＤＲＡＭ２２２や、ＣＰＵ２２１のレジスタ、ＣＰＵ２２１のキャッシュメモリ等に格納される。
【０１０９】
物理解放制御部１５０１は、コンテナ領域１２１の物理解放単位領域の物理解放を制御する。ここで、物理解放単位領域は、コンテナ領域１２１が有する複数のデータ領域１２２を物理解放可能な単位で区分けした領域である。物理解放単位領域は、例えば、２１［ＭＢ］の領域である。
【０１１０】
具体的には、物理解放制御部１５０１は、コンテナ領域１２１のうち未使用のデータ領域１２２の数が閾値αを超えたか否かを判断する。以下の説明では、コンテナ領域１２１のうち未使用のデータ領域１２２の数を「未使用領域数」と表記する場合がある。ここで、閾値αは、任意に設定可能であり、例えば、コンテナ領域１２１が有するデータ領域１２２の総数の３割程度の値に設定される。
【０１１１】
一例として、コンテナ領域１２１の記憶容量を４［ＧＢ］とし、データ領域１２２の記憶容量を５１２［ｂｙｔｅ］とすると、コンテナ領域１２１が有するデータ領域１２２の総数は「８３８８６０８」である。この場合、閾値αは、例えば、総数「８３８８６０８」の３割程度の値「２７６８２４０」に設定される。
【０１１２】
より具体的には、例えば、物理解放制御部１５０１は、コンテナ領域１２１のいずれかのデータ領域１２２のリファレンスカウンタが減算されて「０」になったことに応じて、コンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断する。これにより、コンテナ領域１２１のいずれかのデータ領域１２２が未使用となったことに応じて、コンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断することができる。
【０１１３】
また、物理解放制御部１５０１は、コンテナ領域１２１の未使用領域数が閾値αを超えた場合、コンテナ領域１２１の複数の物理解放単位領域それぞれについて、物理解放単位領域に含まれる使用中のデータ領域１２２の数を算出する。以下の説明では、物理解放単位領域に含まれる使用中のデータ領域１２２の数を「使用領域数」と表記する場合がある。
【０１１４】
具体的には、例えば、物理解放制御部１５０１は、コンテナ領域１２１のデータサイズ別管理テーブル３１２を参照して、コンテナ領域１２１の各物理解放単位領域の使用領域数を算出する。なお、物理解放制御部１５０１は、例えば、データサイズ別管理テーブル３１２のスロット番号から、どのデータ領域１２２がどの物理解放単位領域に含まれるかを特定することができる。
【０１１５】
一例として、スロット番号が若い順に２１［ＭＢ］単位で区分けした複数の物理解放単位領域を物理解放単位領域Ａ，Ｂ，Ｃ，ＤおよびＥとする。この場合、物理解放制御部１５０１は、物理解放単位領域Ａ〜Ｅごとに、物理解放単位領域Ａ〜Ｅの使用領域数を算出する。
【０１１６】
また、物理解放制御部１５０１は、算出した物理解放単位領域ごとの使用領域数に基づいて、コンテナ領域１２１の物理解放単位領域間でデータ移行を行う。具体的には、例えば、まず、物理解放制御部１５０１は、算出した物理解放単位領域ごとの使用領域数に基づいて、コンテナ領域１２１の複数の物理解放単位領域から、第１および第２の物理解放単位領域を決定する。
【０１１７】
ここで、第１の物理解放単位領域は、データの移行元となる物理解放単位領域である。第２の物理解放単位領域は、データの移行先となる物理解放単位領域である。より具体的には、例えば、物理解放制御部１５０１は、コンテナ領域１２１の複数の物理解放単位領域のうち、使用領域数が最小の物理解放単位領域を、第１の物理解放単位領域に決定してもよい。また、物理解放制御部１５０１は、コンテナ領域１２１の複数の物理解放単位領域のうち、使用領域数が最大の物理解放単位領域を、第２の物理解放単位領域に決定してもよい。
【０１１８】
一例として、物理解放単位領域Ａ〜Ｅの使用領域数が下記のように算出されたとする。
物理解放単位領域Ａの使用領域数「１０」
物理解放単位領域Ｂの使用領域数「１０」
物理解放単位領域Ｃの使用領域数「８」
物理解放単位領域Ｄの使用領域数「１１」
物理解放単位領域Ｅの使用領域数「９」
【０１１９】
この場合、物理解放制御部１５０１は、例えば、物理解放単位領域Ａ〜Ｅのうち、使用領域数が最小の物理解放単位領域Ｃを、第１の物理解放単位領域に決定する。また、物理解放制御部１５０１は、例えば、物理解放単位領域Ａ〜Ｅのうち、使用領域数が最大の物理解放単位領域Ｄを、第２の物理解放単位領域に決定する。
【０１２０】
次に、物理解放制御部１５０１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域１２２に移行する。第１および第２の物理解放単位領域に含まれる各データ領域１２２の使用状況は、例えば、データサイズ別管理テーブル３１２から特定される。
【０１２１】
これにより、コンテナ領域１２１内の物理解放単位領域間でデータ移行することができる。この際、コンテナ領域１２１内のデータ領域１２２は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。
【０１２２】
また、物理解放制御部１５０１は、第１の物理解放単位領域の使用領域数が、第２の物理解放単位領域に含まれる未使用のデータ領域１２２の数（未使用領域数）以下である場合に、第１および第２の物理解放単位領域間でのデータ移行を行うことにしてもよい。物理解放単位領域の未使用領域数は、例えば、物理解放単位領域に含まれるデータ領域１２２の総数から物理解放単位領域の使用領域数を減算することにより求めることができる。すなわち、物理解放制御部１５０１は、コンテナ領域１２１の複数の物理解放単位領域のうち、未使用領域数が第１の物理解放単位領域の使用領域数以上であって、かつ、使用領域数がより大きい物理解放単位領域を、第２の物理解放単位領域に決定してもよい。これにより、第１の物理解放単位領域に使用中のデータ領域１２２が残ってしまうのを防ぐことができる。
【０１２３】
ただし、物理解放制御部１５０１は、第１および第２の物理解放単位領域間でのデータ移行を行った結果、第１の物理解放単位領域に使用中のデータ領域１２２が残った場合、新たな第２の物理解放単位領域を決定することにしてもよい。この際、物理解放制御部１５０１は、コンテナ領域１２１の複数の物理解放単位領域のうち、第１および第２の物理解放単位領域に決定した物理解放単位領域を除く残余の物理解放単位領域から、新たな第２の物理解放単位領域を決定する。
【０１２４】
一例として、物理解放単位領域Ａ〜Ｅのうち、物理解放単位領域Ｃから物理解放単位領域Ｄへのデータ移行が行われた結果、物理解放単位領域Ｃに使用中のデータ領域１２２が残ったとする。この場合、物理解放制御部１５０１は、例えば、物理解放単位領域Ａ〜Ｅのうち、物理解放単位領域Ｃ，Ｄを除く残余の物理解放単位領域Ａ，Ｂ，Ｅから、新たな第２の物理解放単位領域を決定する。より具体的には、例えば、物理解放制御部１５０１は、物理解放単位領域Ａ，Ｂ，Ｅのうち、使用領域数が最大の物理解放単位領域Ａを、新たな第２の物理解放単位領域に決定する。なお、使用領域数が同一の物理解放単位領域が複数存在する場合、物理解放制御部１５０１は、例えば、スロット番号が若いデータ領域１２２を含む物理解放単位領域を優先する。
【０１２５】
また、物理解放制御部１５０１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータの移行が完了した場合に、第１の物理解放単位領域に対応する物理記憶領域を解放する。ここで、第１の物理解放単位領域に対応する物理記憶領域は、例えば、第１の物理解放単位領域に割り当てられたディスク２１２内の物理記憶領域である。
【０１２６】
具体的には、例えば、物理解放制御部１５０１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータの移行が全て完了した場合、第１の物理解放単位領域に割り当てられたディスク２１２内の物理記憶領域をゼロクリアする。そして、物理解放制御部１５０１は、コンテナ領域１２１の物理記憶領域の割り当てに関する制御情報（不図示）を更新する。より詳細に説明すると、例えば、物理解放制御部１５０１は、第１の物理解放単位領域に対応付けられた物理記憶領域の物理アドレスをクリアする。
【０１２７】
これにより、コンテナ領域１２１内の物理解放単位領域間でのデータ移行により使用中のデータ領域１２２がなくなった第１の物理解放単位領域を物理解放することができる。
【０１２８】
また、物理解放制御部１５０１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータの移行が全て完了した場合、新たな第１および第２の物理解放単位領域を決定することにしてもよい。この際、使用中のデータ領域１２２のデータの移行が全て完了した物理解放単位領域は、決定対象から除外される。
【０１２９】
また、物理解放制御部１５０１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域１２２に移行したことに応じて、ブロックマップテーブル３１１およびデータサイズ別管理テーブル３１２を更新する。
【０１３０】
具体的には、例えば、物理解放制御部１５０１は、移行したデータについて、ブロックマップテーブル３１１内の物理格納スロット番号を、移行先のデータ領域１２２の物理格納スロット番号に更新する。また、物理解放制御部１５０１は、データサイズ別管理テーブル３１２内の移行元および移行先のデータ領域１２２のデータ領域使用状況およびリファレンスカウンタを更新する。より詳細に説明すると、例えば、物理解放制御部１５０１は、データサイズ別管理テーブル３１２内の移行元のデータ領域１２２のデータ領域使用状況を「未使用」とし、リファレンスカウンタを「０」とする。また、物理解放制御部１５０１は、データサイズ別管理テーブル３１２内の移行先のデータ領域１２２のデータ領域使用状況を「使用中」とし、リファレンスカウンタを移行元のデータ領域１２２のリファレンスカウンタの値とする。
【０１３１】
なお、物理解放制御部１５０１は、物理解放単位領域を解放した際に、当該物理解放単位領域に含まれる各データ領域１２２の使用状況を「空」に変更することにしてもよい。これにより、ＣＭ２１１は、例えば、物理記憶領域を再割り当てする際に、最初のデータ領域１２２が「空」であることを確認すれば、再割り当て必要であると判断することができる。仮に全データ領域１２２の使用状況を「未使用」のままにしておくと、例えば、全データ領域１２２の使用状況が「未使用」であると確認してから、物理記憶領域の再割り当てを行うことになり負荷がかかる。
【０１３２】
（物理解放単位領域の物理解放例）
次に、図１６〜図１９を用いて、コンテナ領域１２１の物理解放単位領域の物理解放例について説明する。ここでは、データパターン傾向の変化により、使用状況が大きく変化したコンテナＩＤ「ｘ」のコンテナ領域１２１を例に挙げて、物理解放単位領域の物理解放例について説明する。
【０１３３】
図１６は、データサイズ別管理テーブル３１２−ｘの記憶内容の一例を示す説明図である。図１６において、データサイズ別管理テーブル３１２−ｘは、コンテナＩＤと、コンテナ情報５０１と、未使用キュー５０２と、コンテナ管理サイズ５０３と、コンテナ先頭アドレス５０４とを有する。
【０１３４】
コンテナ情報５０１は、レコード５１１−０〜５９を有する。すなわち、コンテナＩＤ「ｘ」のコンテナ領域１２１は、スロット番号「０」〜「５９」の６０個のデータ領域１２２を有する。
【０１３５】
図１７〜図１９は、コンテナ領域１２１の物理解放単位領域の物理解放例を示す説明図である。図１７において、コンテナＩＤ「ｘ」のコンテナ領域１２１の各データ領域１２２の使用状況が示されている。ここでは、左上をスロット番号「０」のデータ領域１２２とし、各行において、左から右に向かってスロット番号が昇順となるようにデータ領域１２２が並べられている。
【０１３６】
例えば、１番上の行は、左から右に向かって、スロット番号「０」〜「９」の１０個のデータ領域１２２が並べられている。また、コンテナＩＤ「ｘ」のコンテナ領域１２１の複数の物理解放単位領域を、２０個のデータ領域１２２の単位で区分けした物理解放単位領域１７０１〜１７０３とする。また、閾値αを「α＝２０」とする。
【０１３７】
図１７の（１７−１）では、図１６に示したデータサイズ別管理テーブル３１２−ｘが示すコンテナＩＤ「ｘ」のコンテナ領域１２１の各データ領域１２２の使用状況が示されている。この場合、物理解放制御部１５０１は、データサイズ別管理テーブル３１２−ｘを参照して、コンテナＩＤ「ｘ」のコンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断する。
【０１３８】
ここで、コンテナＩＤ「ｘ」のコンテナ領域１２１の未使用領域数は「４５」である。このため、物理解放制御部１５０１は、コンテナＩＤ「ｘ」のコンテナ領域１２１の未使用領域数が閾値αを超えたと判断する。次に、物理解放制御部１５０１は、データサイズ別管理テーブル３１２−ｘを参照して、物理解放単位領域１７０１〜１７０３の使用領域数を算出する。
【０１３９】
ここでは、物理解放単位領域１７０１の使用領域数は「２」、物理解放単位領域１７０２の使用領域数は「１０」、物理解放単位領域１７０３の使用領域数は「３」である。この場合、物理解放制御部１５０１は、使用領域数が最小の物理解放単位領域１７０１を、第１の物理解放単位領域に決定する。また、物理解放制御部１５０１は、使用領域数が最大の物理解放単位領域１７０２を、第２の物理解放単位領域に決定する。
【０１４０】
そして、物理解放制御部１５０１は、物理解放単位領域１７０１に含まれる使用中のデータ領域１２２のデータを、物理解放単位領域１７０２に含まれる未使用のデータ領域１２２に移行する。この際、物理解放制御部１５０１は、物理解放単位領域１７０２に含まれるスロット番号が若い未使用のデータ領域１２２に移行する。
【０１４１】
図１７の（１７−２）では、物理解放単位領域１７０１に含まれるスロット番号「１」のデータ領域１２２のデータが、物理解放単位領域１７０２に含まれるスロット番号「２１」のデータ領域１２２に移行されている。
【０１４２】
図１８の（１７−３）では、物理解放単位領域１７０１に含まれるスロット番号「６」のデータ領域１２２のデータが、物理解放単位領域１７０２に含まれるスロット番号「２３」のデータ領域１２２に移行されている。
【０１４３】
物理解放単位領域１７０１に含まれる使用中のデータ領域１２２のデータの移行が全て完了すると、物理解放制御部１５０１は、新たな第１および第２の物理解放単位領域を決定する。ここで、データ移行完了後の物理解放単位領域１７０２の使用領域数は「１２」、物理解放単位領域１７０３の使用領域数は「３」である。
【０１４４】
この場合、物理解放制御部１５０１は、使用領域数が最小の物理解放単位領域１７０３を、第１の物理解放単位領域に決定する。また、物理解放制御部１５０１は、使用領域数が最大の物理解放単位領域１７０２を、第２の物理解放単位領域に決定する。なお、データ移行が完了した物理解放単位領域１７０１は、決定対象から除外される。
【０１４５】
そして、物理解放制御部１５０１は、物理解放単位領域１７０３に含まれる使用中のデータ領域１２２のデータを、物理解放単位領域１７０２に含まれる未使用のデータ領域１２２に移行する。この際、物理解放制御部１５０１は、物理解放単位領域１７０２に含まれるスロット番号が若い未使用のデータ領域１２２に移行する。
【０１４６】
図１８の（１７−４）では、物理解放単位領域１７０３に含まれるスロット番号「４８」のデータ領域１２２のデータが、物理解放単位領域１７０２に含まれるスロット番号「２４」のデータ領域１２２に移行されている。
【０１４７】
同様にして、物理解放単位領域１７０３に含まれるスロット番号「５２，５５」のデータ領域１２２のデータが、物理解放単位領域１７０２に含まれるスロット番号「２６，２８」のデータ領域１２２に移行されると、図１９の（１７−５）に示す状態となる。
【０１４８】
そして、物理解放制御部１５０１は、使用中のデータ領域１２２のデータの移行が完了した物理解放単位領域に対応する物理記憶領域を解放する。図１９の（１７−６）では、物理解放単位領域１７０１，１７０３に対応する物理記憶領域が解放される。
【０１４９】
これにより、データパターン傾向の変化により未使用のデータ領域１２２が多くなったコンテナＩＤ「ｘ」のコンテナ領域１２１のガベージコレクションを実施して、物理記憶領域の使用量を３分の１に減らすことができる。物理解放された領域は、他のコンテナ領域１２１等に利用可能となり、ディスク２１２の使用効率を向上させることができる。
【０１５０】
また、コンテナ領域１２１内のデータ領域１２２は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。例えば、データサイズが一定でなければ、使用中のデータ分移動させることになるのに対して、図１７〜図１９に示した例では、書き込み回数を５回に減らすことができる。
【０１５１】
（ＣＭ２１１の各種処理手順）
次に、実施の形態２にかかるＣＭ２１１の各種処理手順について説明する。まず、実施の形態２にかかるＣＭ２１１のＷｒｉｔｅＩ／Ｏ受け付け時処理手順について説明する。ただし、図１１に示したステップＳ１１１３のリファレンスカウンタ加減算処理の具体的な処理手順以外は、実施の形態１にかかるＣＭ２１１のＷｒｉｔｅＩ／Ｏ受け付け時処理手順と同様である。このため、実施の形態１にかかるＣＭ２１１と異なるリファレンスカウンタ加減算処理の具体的な処理手順について説明する。
【０１５２】
図２０は、実施の形態２にかかるリファレンスカウンタ加減算処理手順の一例を示すフローチャートである。ＣＭ２１１は、今回の圧縮分割Ｗｒｉｔｅデータｗｄｓｃを書き込んだデータ領域１２２のリファレンスカウンタを１加算する（ステップＳ２００１）。また、ＣＭ２１１は、今回の圧縮分割Ｗｒｉｔｅデータを書き込む前に使用していたデータ領域１２２のリファレンスカウンタを１減算する（ステップＳ２００２）。そして、ＣＭ２１１は、今回のリファレンスカウンタの更新により、リファレンスカウンタが０になったデータ領域１２２があるか否かを判断する（ステップＳ２００３）。
【０１５３】
リファレンスカウンタが０になったデータ領域１２２がある場合（ステップＳ２００３：リファレンスカウンタが０になったデータ領域あり）、ＣＭ２１１は、対象のデータ領域１２２を未使用として、未使用キューに対象のデータ領域１２２を接続する（ステップＳ２００４）。
【０１５４】
次に、ＣＭ２１１は、対象のコンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断する（ステップＳ２００５）。なお、対象のコンテナ領域１２１とは、ステップＳ２００４において、未使用キューに対象のデータ領域１２２を接続したコンテナ領域１２１である。
【０１５５】
対象のコンテナ領域１２１の未使用領域数が閾値αを超えた場合（ステップＳ２００５：閾値をオーバー）、ＣＭ２１１は、ガベージコレクション処理を呼び出す（ステップＳ２００６）。ガベージコレクション処理の具体的な処理手順については、図２１および図２２を用いて後述する。
【０１５６】
ステップＳ２００６の処理終了後、または、リファレンスカウンタが０になったデータ領域１２２がない場合（ステップＳ２００３：リファレンスカウンタが０になったデータ領域なし）、または、対象のコンテナ領域１２１の未使用領域数が閾値α以下の場合（ステップＳ２００５：閾値以下）、ＣＭ２１１は、リファレンスカウンタ加減算処理を終了する。
【０１５７】
これにより、コンテナ領域１２１の未使用のデータ領域１２２が増加したタイミングで、コンテナ領域１２１のガベージコレクションの実施の要否を判断することができる。
【０１５８】
図２１および図２２は、実施の形態２にかかるガベージコレクション処理手順の一例を示すフローチャートである。図２１のフローチャートにおいて、まず、ＣＭ２１１は、対象のコンテナ領域１２１のデータサイズ別管理テーブル３１２を参照して、対象のコンテナ領域１２１の物理解放単位領域の使用領域数を算出する（ステップＳ２１０１）。
【０１５９】
次に、ＣＭ２１１は、対象のコンテナ領域１２１の物理解放単位領域を、算出した使用領域数が少ない順にガベージブロックリンクに接続する（ステップＳ２１０２）。そして、ＣＭ２１１は、ガベージブロックリンクの先頭の物理解放単位領域を移行元領域に決定する（ステップＳ２１０３）。移行元領域は、上述した第１の物理解放単位領域に対応する。
【０１６０】
なお、ガベージブロックリンクに接続される各領域は、ｐｒｅｖ情報とｎｅｘｔ情報を有しており、直前の領域と次の領域とを特定可能な状態となっている。
【０１６１】
次に、ＣＭ２１１は、ガベージブロックリンクの最後尾の物理解放単位領域を移行先領域に決定する（ステップＳ２１０４）。移行先領域は、上述した第２の物理解放単位領域に対応する。次に、ＣＭ２１１は、決定した移行元領域に使用中のデータ領域１２２があるか否かを判断する（ステップＳ２１０５）。
【０１６２】
ここで、移行元領域に使用中のデータ領域１２２がある場合（ステップＳ２１０５：Ｙｅｓ）、ＣＭ２１１は、決定した移行先領域に未使用のデータ領域１２２があるか否かを判断する（ステップＳ２１０６）。ここで、移行先領域に未使用のデータ領域１２２がある場合（ステップＳ２１０６：Ｙｅｓ）、ＣＭ２１１は、図２２に示すステップＳ２２０１に移行する。
【０１６３】
また、ステップＳ２１０５において、移行元領域に使用中のデータ領域１２２がない場合（ステップＳ２１０５：Ｎｏ）、ＣＭ２１１は、移行元領域のｎｅｘｔ情報から、移行元領域の次に物理解放単位領域があるか否かを判断する（ステップＳ２１０７）。
【０１６４】
ここで、次に物理解放単位領域がある場合（ステップＳ２１０７：Ｙｅｓ）、ＣＭ２１１は、次の物理解放単位領域を移行元領域に変更し（ステップＳ２１０８）、ステップＳ２１０５に移行する。一方、次に物理解放単位領域がない場合（ステップＳ２１０７：Ｎｏ）、ＣＭ２１１は、図２２に示すステップＳ２２０７に移行する。
【０１６５】
また、ステップＳ２１０６において、移行先領域に未使用のデータ領域１２２がない場合（ステップＳ２１０６：Ｎｏ）、ＣＭ２１１は、移行先領域のｐｒｅｖ情報から、移行先領域の直前に物理解放単位領域があるか否かを判断する（ステップＳ２１０９）。
【０１６６】
ここで、直前に物理解放単位領域がある場合（ステップＳ２１０９：Ｙｅｓ）、ＣＭ２１１は、直前の物理解放単位領域を移行先領域に変更し（ステップＳ２１１０）、ステップＳ２１０６に移行する。一方、直前に物理解放単位領域がない場合（ステップＳ２１０９：Ｎｏ）、ＣＭ２１１は、図２２に示すステップＳ２２０７に移行する。
【０１６７】
図２２のフローチャートにおいて、まず、ＣＭ２１１は、移行元領域と移行先領域が別領域であるか否かを判断する（ステップＳ２２０１）。ここで、移行元領域と移行先領域が別領域の場合（ステップＳ２２０１：Ｙｅｓ）、ＣＭ２１１は、移行元領域の使用領域数が移行先領域の使用領域数以下であるか否かを判断する（ステップＳ２２０２）。
【０１６８】
ここで、移行元領域の使用領域数が移行先領域の使用領域数以下の場合（ステップＳ２２０２：Ｙｅｓ）、ＣＭ２１１は、移行元領域に含まれる使用中のデータ領域１２２のデータを、移行先領域に含まれる未使用のデータ領域１２２にコピーする（ステップＳ２２０３）。
【０１６９】
そして、ＣＭ２１１は、ブロックマップテーブル３１１およびデータサイズ別管理テーブル３１２を更新する（ステップＳ２２０４）。次に、ＣＭ２１１は、移行元領域に使用中のデータ領域１２２があるか否かを判断する（ステップＳ２２０５）。
【０１７０】
ここで、移行元領域に使用中のデータ領域１２２がない場合（ステップＳ２２０５：Ｎｏ）、ＣＭ２１１は、図２１に示したステップＳ２１０７に移行する。一方、移行元領域に使用中のデータ領域１２２がある場合（ステップＳ２２０５：Ｙｅｓ）、ＣＭ２１１は、移行先領域に未使用のデータ領域１２２があるか否かを判断する（ステップＳ２２０６）。
【０１７１】
ここで、移行先領域に未使用のデータ領域１２２がない場合（ステップＳ２２０６：Ｎｏ）、ＣＭ２１１は、図２１に示したステップＳ２１０９に移行する。一方、移行先領域に未使用のデータ領域１２２がある場合（ステップＳ２２０６：Ｙｅｓ）、ＣＭ２１１は、ステップＳ２２０３に戻る。
【０１７２】
また、ステップＳ２２０１において、移行元領域と移行先領域が同一領域の場合（ステップＳ２２０１：Ｎｏ）、または、ステップＳ２２０２において、移行元領域の使用領域数が移行先領域の使用領域数より大きい場合（ステップＳ２２０２：Ｎｏ）、ＣＭ２１１は、ステップＳ２２０７に移行する。これにより、移行元領域の使用領域数のほうが移行先領域の使用領域数よりも大きくなった際に、データ移行が行われてしまうのを防ぐことができる。
【０１７３】
そして、ＣＭ２１１は、全てのデータ領域１２２が未使用となった物理解放単位領域に対して、物理解放を実施して（ステップＳ２２０７）、本フローチャートによる一連の処理を終了する。これにより、コンテナ単位でガベージコレクションを実施して、データパターン傾向の変化により使用されなくなった領域を物理解放することができる。
【０１７４】
以上説明したように、実施の形態２にかかるＣＭ２１１は、コンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断する。具体的には、例えば、ＣＭ２１１は、コンテナ領域１２１のいずれかのデータ領域１２２のリファレンスカウンタが減算されて「０」になったことに応じて、コンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断する。
【０１７５】
これにより、コンテナ領域１２１のいずれかのデータ領域１２２が未使用となったことに応じて、コンテナ領域１２１の未使用領域数が閾値αを超えたか否かを判断することができる。換言すれば、コンテナ領域１２１の未使用のデータ領域１２２が増加したタイミングで、コンテナ領域１２１のガベージコレクションの実施の要否を判断できる。
【０１７６】
また、ＣＭ２１１は、コンテナ領域１２１の未使用領域数が閾値αを超えた場合、コンテナ領域１２１の複数の物理解放単位領域それぞれについて、物理解放単位領域に含まれる使用中のデータ領域の使用領域数を算出する。また、ＣＭ２１１は、算出した物理解放単位領域ごとの使用領域数に基づいて、複数の物理解放単位領域のうち、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域１２２に移行する。そして、ＣＭ２１１は、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータの移行が完了した場合に、第１の物理解放単位領域に対応する物理記憶領域を解放する。
【０１７７】
これにより、データパターン傾向が変化してコンテナ領域１２１の未使用領域数が閾値αを超えたときに、コンテナ領域１２１内の物理解放単位領域間でデータ移行し、まとまった未使用領域を作り出して物理解放（ガベージコレクション）を行うことができる。
【０１７８】
また、ＣＭ２１１は、コンテナ領域１２１の複数の物理解放単位領域のうち、使用領域数が最小の物理解放単位領域を、第１の物理解放単位領域に決定し、使用領域数が最大の物理解放単位領域を、第２の物理解放単位領域に決定することができる。これにより、コンテナ領域１２１内でまとまった未使用領域を効率的に作り出すことができる。
【０１７９】
また、ＣＭ２１１は、第１の物理解放単位領域の使用領域数が、第２の物理解放単位領域の未使用領域数以下である場合に、第１の物理解放単位領域に含まれる使用中のデータ領域１２２のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域１２２に移行することができる。これにより、第２の物理解放単位領域にデータを移行しきれずに、第１の物理解放単位領域に使用中のデータ領域１２２が残ってしまうのを防ぐことができる。
【０１８０】
これらのことから、実施の形態２にかかるＣＭ２１１によれば、データパターン傾向の変化により未使用領域が多くなったコンテナ領域１２１のガベージコレクションを実施して、ディスク２１２の使用効率を向上させることができる。また、コンテナ領域１２１内のデータ領域１２２は全て同じデータサイズのため、データサイズが一定でない場合に比べて、データ移行を効率的に行うことができる。このため、ディスク２１２に用いるＳＳＤ等の寿命に与える影響を抑えつつガベージコレクションを実施することができる。
【０１８１】
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１８２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８３】
（付記１）ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージにおいて、前記記憶領域から割り当てた前記整数倍の第１のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第１の管理情報と、前記記憶領域から割り当てた前記整数倍であって前記第１のサイズとは異なる第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第２の管理情報と、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報とを有する記憶部と、
所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記第１の管理情報および前記第２の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて前記論理アドレス情報に格納する制御部と、
を有することを特徴とするストレージ制御装置。
【０１８４】
（付記２）前記記憶領域は、ヘッドによりアクセスされる記憶領域であって、
前記整数倍の複数のデータ領域は、連続した領域であって、
前記制御部は、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域が複数あれば、先頭にある未使用のデータ領域に前記圧縮後のデータを書き込む、
ことを特徴とする付記１に記載のストレージ制御装置。
【０１８５】
（付記３）前記第１の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第１のサイズとであって、
前記第２の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第２のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
所定のサイズの読み出し範囲の論理アドレスを受け付けたことに応じて、前記論理アドレス情報を参照して、前記読み出し範囲の論理アドレスに対応する管理情報および順番を特定し、
特定した前記管理情報における複数のデータ領域の先頭の物理アドレスと、特定した前記順番と、当該管理情報に対応するサイズとに基づいて、前記読み出し範囲の論理アドレスに対応するデータが書き込まれたデータ領域の物理アドレスを算出し、
前記記憶領域の前記物理アドレスからデータを読み出す、
ことを特徴とする付記１または２に記載のストレージ制御装置。
【０１８６】
（付記４）前記第１の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第１のサイズとであって、
前記第２の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第２のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする付記１〜３のいずれか一つに記載のストレージ制御装置。
【０１８７】
（付記５）前記第１の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第１の管理情報は、さらに、前記第１の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記第２の管理情報における複数のデータ領域の各データ領域は、互いに重複しないデータを有し、
前記第２の管理情報は、さらに、前記第２の管理情報における複数のデータ領域の各データ領域に対応して、当該各データ領域を参照する論理アドレスの数を有し、
前記制御部は、
前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する管理情報と、特定した前記管理情報とが同一であり、かつ、前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域を参照する論理アドレスの数が１である場合、特定した前記管理情報から特定される複数のデータ領域のうちの前記論理アドレス情報における前記書き込みデータの論理アドレスに対応する順番で示されるデータ領域に、前記圧縮後のデータを書き込む、
ことを特徴とする付記４に記載のストレージ制御装置。
【０１８８】
（付記６）前記制御部は、
前記複数のデータ領域のうち未使用のデータ領域の数が閾値を超えた場合、前記複数のデータ領域を物理解放可能な単位で区分けした複数の物理解放単位領域それぞれについて、前記物理解放単位領域に含まれる使用中のデータ領域の使用領域数を算出し、
算出した前記物理解放単位領域ごとの使用領域数に基づいて、前記複数の物理解放単位領域のうち、第１の物理解放単位領域に含まれる使用中のデータ領域のデータを、第２の物理解放単位領域に含まれる未使用のデータ領域に移行し、
前記第１の物理解放単位領域に含まれる使用中のデータ領域のデータの移行が完了した場合に、前記第１の物理解放単位領域に対応する物理記憶領域を解放する、
ことを特徴とする付記１〜５のいずれか一つに記載のストレージ制御装置。
【０１８９】
（付記７）前記第１の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最小の物理解放単位領域であり、
前記第２の物理解放単位領域は、前記複数の物理解放単位領域のうち使用領域数が最大の物理解放単位領域である、
ことを特徴とする付記６に記載のストレージ制御装置。
【０１９０】
（付記８）前記制御部は、
前記第１の物理解放単位領域の使用領域数が、前記第２の物理解放単位領域に含まれる未使用のデータ領域の数以下である場合に、前記第１の物理解放単位領域に含まれる使用中のデータ領域のデータを、前記第２の物理解放単位領域に含まれる未使用のデータ領域に移行する、
ことを特徴とする付記６または７に記載のストレージ制御装置。
【０１９１】
（付記９）前記制御部は、
前記第１の物理解放単位領域に含まれる使用中のデータ領域のデータを、前記第２の物理解放単位領域に含まれる未使用のデータ領域に移行したことに応じて、前記管理情報および前記論理アドレス情報を更新する、
ことを特徴とする付記６〜８のいずれか一つに記載のストレージ制御装置。
【０１９２】
（付記１０）コンピュータに、
ストレージのアクセス単位のサイズの整数倍の複数のデータ領域を含む記憶領域を有する前記ストレージに対して、所定のサイズの書き込みデータと前記書き込みデータの論理アドレスとを受け付けたことに応じて、前記記憶領域から割り当てた前記整数倍の第１のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と前記各データ領域の使用状況を示す情報とを有する第１の管理情報、および、前記記憶領域から割り当てた前記整数倍であって前記第１のサイズとは異なる第２のサイズの複数のデータ領域の各データ領域の物理アドレスを特定可能な情報と当該各データ領域の使用状況を示す情報とを有する第２の管理情報から、前記書き込みデータを圧縮した圧縮後のデータのサイズ以上のサイズに対応する管理情報を特定し、
特定した前記管理情報から特定される複数のデータ領域のうちの未使用のデータ領域に前記圧縮後のデータを書き込むとともに、前記未使用のデータ領域の物理アドレスを特定可能な情報と前記書き込みデータの論理アドレスとを対応付けて、前記記憶領域のうちのデータを書き込んだデータ領域の物理アドレスを特定可能な情報に前記データの論理アドレスを対応付けた論理アドレス情報に格納する、
処理を実行させることを特徴とするストレージ制御プログラム。
【０１９３】
（付記１１）前記第１の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第１のサイズとであって、
前記第２の管理情報における複数のデータ領域の物理アドレスを特定可能な情報は、当該複数のデータ領域の先頭の物理アドレスと、前記複数のデータ領域の各データ領域における先頭のデータ領域からの順番と、前記第２のサイズとであって、
前記論理アドレス情報は、前記記憶領域のうちのデータを書き込んだデータ領域が属する管理情報と、当該データ領域を含む複数のデータ領域の先頭からの当該データ領域の順番と、当該データの論理アドレスとを対応付けており、
前記コンピュータに、
所定のサイズの読み出し範囲の論理アドレスを受け付けたことに応じて、前記論理アドレス情報を参照して、前記読み出し範囲の論理アドレスに対応する管理情報および順番を特定し、
特定した前記管理情報における複数のデータ領域の先頭の物理アドレスと、特定した前記順番と、当該管理情報に対応するサイズとに基づいて、前記読み出し範囲の論理アドレスに対応するデータが書き込まれたデータ領域の物理アドレスを算出し、
前記記憶領域の前記物理アドレスからデータを読み出す、
処理を実行させることを特徴とする付記１０に記載のストレージ制御プログラム。
【符号の説明】
【０１９４】
１０１  ストレージ制御装置
１０２  ストレージ
１１０  管理情報
１１１  論理アドレス情報
１２１  コンテナ領域
１２２  データ領域
３００  制御部
３０１  受け付け部
３０２  コンテナ領域決定部
３０３  書き込み部
３０４  特定部
３０５  読み出し部
３１０  記憶部
３１１  ブロックマップテーブル
３１２  データサイズ別管理テーブル
１５０１  物理解放制御部
１７０１，１７０２，１７０３  物理解放単位領域
【図１】
2018120571.tif 000003
【図２】
2018120571.tif 000004
【図３】
2018120571.tif 000005
【図４】
2018120571.tif 000006
【図５】
2018120571.tif 000007
【図６】
2018120571.tif 000008
【図７】
2018120571.tif 000009
【図８】
2018120571.tif 000010
【図９】
2018120571.tif 000011
【図１０】
2018120571.tif 000012
【図１１】
2018120571.tif 000013
【図１２】
2018120571.tif 000014
【図１３】
2018120571.tif 000015
【図１４】
2018120571.tif 000016
【図１５】
2018120571.tif 000017
【図１６】
2018120571.tif 000018
【図１７】
2018120571.tif 000019
【図１８】
2018120571.tif 000020
【図１９】
2018120571.tif 000021
【図２０】
2018120571.tif 000022
【図２１】
2018120571.tif 000023
【図２２】
2018120571.tif 000024