(57)【要約】【課題】ＧＣにおける書き込み量を減らすこと。【解決手段】詰め直し処理部３２ａが、ＧＣ対象のＲＵをストレージから読み出してＧＣバッファ２５ｂに格納し、ＧＣバッファ２５ｂに含まれる各データブロックについて、有効なデータユニットをペイロード領域で前詰めする。また、詰め直し処理部３２ａは、前詰めしたデータユニットに対応するデータユニットヘッダのオフセットを更新する。また、詰め直し処理部３２ａは、インデックスの詰め直しを行わない。【選択図】図１４
2019133577.tif 000002
【特許請求の範囲】
【請求項１】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する第１バッファと、
前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行うガベージコレクション（ＧＣ）処理部と
を有することを特徴とするストレージ制御装置。
【請求項２】
前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて記憶する第２バッファと、
前記第２バッファを用いて前記記憶媒体への書き込みを行う書込処理部とをさらに有し、
前記ＧＣ処理部は、前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定することを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記ＧＣ処理部は、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込むことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記ＧＣ処理部は、無効データ率が所定の閾値以上のまとめ書き単位領域を前記記憶媒体から読み出して前記第１バッファに格納する制御と、前記記憶媒体の残容量に基づいて前記閾値を変更する制御を行うことを特徴とする請求項１、２又は３に記載のストレージ制御装置。
【請求項５】
前記ＧＣ処理部は、前記ストレージの残容量に基づいて、該ストレージの入出力処理のディレイを制御するとともに、ＧＣを並列に行う数を示す多重度及びＧＣに用いられるＣＰＵコアの数を制御することを特徴とする請求項１〜４のいずれか１つに記載のストレージ制御装置。
【請求項６】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御方法において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
ことを特徴とするストレージ制御方法。
【請求項７】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御が備えるコンピュータで実行されるストレージ制御プログラムにおいて、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
処理を前記コンピュータに実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、ストレージ制御方法及びストレージ制御プログラムに関する。
【背景技術】
【０００２】
昨今、ストレージ装置の記憶媒体は、ＨＤＤ（Hard  Disk  Drive）からよりアクセススピードの速いＳＳＤ（Solid  State  Drive）等のフラッシュメモリに移行している。ＳＳＤでは、メモリセルへの上書きを直接行うことはできず、例えば１ＭＢ（メガバイト）の大きさのブロックの単位でデータの消去が行われた後にデータの書き込みが行われる。
【０００３】
このため、ブロック内の一部のデータを更新する場合には、ブロック内の他のデータを退避し、ブロックを消去した後に、退避したデータと更新データを書き込むことが行われることから、ブロックの大きさに較べて小さいデータを更新する処理が遅い。また、ＳＳＤには書き込み回数の上限がある。このため、ＳＳＤでは、ブロックの大きさに較べて小さいデータの更新をできるだけ避けることが望ましい。そこで、ブロック内の一部のデータを更新する場合に、ブロック内の他のデータと更新データを新たなブロックに書き込むことが行われる。
【０００４】
なお、コンパクションサーチの実行がある時間内に集中して、ＣＰＵあるいはフラッシュメモリによるメインメモリのアクセスが妨害されることを防止する半導体記憶装置がある。この半導体記憶装置は、不揮発性メモリのコンパクション候補を決定するための候補情報を格納するメインメモリと、前記メインメモリの候補情報のアクセス要求を発行する要求発行手段とを具備する。また、この半導体記憶装置は、前記要求発行手段により発行されたアクセス要求を所定時間遅延する遅延手段と、前記遅延手段により遅延されたアクセス要求に基づいて前記メインメモリの候補情報をアクセスするアクセス手段を具備する。
【０００５】
また、有効なコンパクション対象ブロックの検索処理を実現することで、コンパクション処理の効率化を図ることができるデータ記憶装置がある。このデータ記憶装置は、ブロックをデータ消去単位とするフラッシュメモリとコントローラとを具備する。前記コントローラは、前記フラッシュメモリに対するコンパクション処理を実行し、使用可能なブロック数及びブロック内の有効データ量に基づいてコンパクション処理対象範囲を動的に設定する。また、前記コントローラは、前記コンパクション処理対象範囲から前記コンパクション処理の対象ブロックとして相対的に有効データ量が少ないブロックを検索するコンパクションモジュールを有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−１５９０６９号公報
【特許文献２】特開２０１６−２０７１９５号公報
【特許文献３】特開２０１３−３００８１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ＳＳＤは、ブロック内の一部のデータを更新する場合に、ブロック内の他のデータと更新データを新たなブロックに書き込むため、更新前のブロックは使用されなくなる。したがって、ＳＳＤを使用したストレージ装置においては、ガベージコレクション（ＧＣ：Garbage  Collection）機能が必須となる。ただし、無条件にＧＣを実行すると、書き込み量が増大し、ＳＳＤの寿命を短くしてしまう問題がある。
【０００８】
本発明は、１つの側面では、書き込み量が少なくて済むＧＣを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、ストレージ制御装置は、書き込み回数に制限を有する記憶媒体を用いるストレージを制御する。前記ストレージ装置は、第１バッファとＧＣ処理部とを有する。第１バッファは、データブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する。前記データブロックは、データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域とを含む。前記ＧＣ処理部は、前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放する。そして、前記ＧＣ処理部は、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでＧＣを行う。
【発明の効果】
【００１０】
１つの側面では、本発明は、ＧＣにおける書き込み量を減らすことができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例に係るストレージ装置の記憶構成を示す図である。
【図２】図２は、実施例に係るストレージ制御装置が用いるメタデータを説明するための図である。
【図３】図３は、データブロックを説明するための図である。
【図４】図４は、データブロックマップを説明するための図である。
【図５】図５は、物理領域を説明するための図である。
【図６】図６は、ＲＡＩＤユニットの追記書きを説明するための図である。
【図７】図７は、ＲＡＩＤユニットのまとめ書きを説明するための図である。
【図８Ａ】図８Ａは、論物メタのフォーマットを示す図である。
【図８Ｂ】図８Ｂは、データユニットヘッダのフォーマットを示す図である。
【図８Ｃ】図８Ｃは、データブロックヘッダのフォーマットを示す図である。
【図９】図９は、実施例に係る情報処理システムの構成を示す図である。
【図１０Ａ】図１０Ａは、ＧＣ前の論物メタ、データユニットヘッダ、ＲＡＩＤユニット及びリファレンス情報の例を示す図である。
【図１０Ｂ】図１０Ｂは、ＧＣ実施後のＲＡＩＤユニット及びデータユニットヘッダを示す図である。
【図１０Ｃ】図１０Ｃは、ＧＣ実施後の追記書きを示す図である。
【図１１】図１１は、ＧＣ巡回処理を説明するための図である。
【図１２】図１２は、プールの残容量と無効データ率の閾値との関係の一例を示す図である。
【図１３】図１３は、ＧＣに関して機能部間の関係を示す図である。
【図１４】図１４は、ＧＣ部の機能構成を示す図である。
【図１５】図１５は、ＧＣ起動のシーケンスを示す図である。
【図１６】図１６は、ＧＣ巡回監視のシーケンスを示す図である。
【図１７】図１７は、データ詰め直し処理のシーケンスを示す図である。
【図１８】図１８は、データ詰め直し処理のフローを示すフローチャートである。
【図１９】図１９は、Ｉ／Ｏ受付制御処理のシーケンスを示す図である。
【図２０】図２０は、強制ＷＢ処理のシーケンスを示す図である。
【図２１】図２１は、強制ＷＢ処理のフローを示すフローチャートである。
【図２２】図２２は、ディレイ制御と多重度変更を行う処理のシーケンスを示す図である。
【図２３】図２３は、ディレイ制御と多重度変更の例を示す図である。
【図２４】図２４は、実施例に係るストレージ制御プログラムを実行するストレージ制御装置のハードウェア構成を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するストレージ制御装置、ストレージ制御方法及びストレージ制御プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１３】
まず、実施例に係るストレージ装置の記憶構成について説明する。図１は、実施例に係るストレージ装置の記憶構成を示す図である。図１に示すように、実施例に係るストレージ装置は、複数のＳＳＤ３ｄを使用してＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）６ベースのプール３ａを管理する。また、実施例に係るストレージ装置は、複数のプール３ａを有する。
【００１４】
プール３ａには、仮想化プールと階層化プールがある。仮想化プールは１つのティア３ｂを有し、階層化プールは２つ以上のティア３ｂを有する。ティア３ｂは、１つ以上のドライブグループ３ｃを有する。ドライブグループ３ｃは、ＳＳＤ３ｄのグループであり、６〜２４台のＳＳＤ３ｄを有する。例えば、１つのストライプを記憶する６台のＳＳＤ３ｄのうち、３台はユーザデータ（以下単に「データ」という）の記憶用に用いられ、２台はパリティ記憶用に用いられ、１台はホットスペア用に用いられる。なお、ドライブグループ３ｃは、２５台以上のＳＳＤ３ｄを有してよい。
【００１５】
次に、実施例に係るストレージ制御装置が用いるメタデータについて説明する。ここで、メタデータとは、ストレージ装置が記憶するデータを管理するためにストレージ制御装置が用いるデータである。
【００１６】
図２は、実施例に係るストレージ制御装置が用いるメタデータを説明するための図である。図２に示すように、メタデータには、論物メタと、データブロックマップと、リファレンス情報とが含まれる。
【００１７】
論物メタは、論理番号をデータブロック番号とインデックスに対応付ける情報である。論理番号は、ストレージ装置を使用する情報処理装置がデータの識別に用いる論理アドレスであり、ＬＵＮ（Logical  Unit  Number：論理ユニット番号）とＬＢＡ（Logical  Block  Address：論理ブロックアドレス）の組合せである。なお、論理ブロックの大きさは８ＫＢ（キロバイト）であり、重複排除を行う単位サイズになっている。情報処理装置(ホスト)からストレージ装置へのコマンドによる処理が５１２バイト単位であるため、本実施例では重複排除の効率化のため５１２バイトの整数倍分の８ＫＢ(８１９２バイト)にまとめたものを、ここでは一論理ブロックとしている。データブロック番号は、論理番号で識別される８ＫＢのデータを記憶するデータブロックを識別する番号である。インデックスは、データブロック内でのデータの番号である。
【００１８】
図３は、データブロックを説明するための図である。図３では、データブロック番号（ＤＢ＃）は「１０１」である。図３に示すように、データブロックの大きさは３８４ＫＢである。データブロックは、８ＫＢのヘッダ領域と３７６ＫＢのペイロード領域を有する。ペイロード領域は、圧縮されたデータを記憶する領域であるデータユニットを有する。データユニットはペイロード領域に追記される。
【００１９】
ヘッダ領域には、１９２バイトのデータブロックヘッダと最大２００個の４０バイトのデータユニットヘッダが含まれる。データブロックヘッダは、データブロックに関する情報を記憶する領域である。データブロックヘッダには、データユニットが追記書き可能か否か、追記書きされているデータユニットの数、データユニットが次に追記書きされる位置に関する情報等が含まれる。
【００２０】
データユニットヘッダは、ペイロード領域に含まれるデータユニットに対応する。データユニットヘッダは、対応するデータユニットが記憶するデータのインデックスに対応する位置にある。データユニットヘッダには、オフセットと長さとＣＲＣ（Cyclic  Redundancy  Check）とが含まれる。オフセットは、対応するデータユニットのデータブロック内での書き込み開始位置（先頭位置）を示す。長さは、対応するデータユニットの長さを示す。ＣＲＣは、対応するデータユニットの圧縮前の誤り検出コードである。
【００２１】
図２の論物メタにおいて、例えば、論理番号が「１−１」であるデータは、データブロック番号が「Ｂ１」であるデータブロックの１番目に記憶される。ここで、「１−１」は、ＬＵＮが１でありＬＢＡが１であることを示す。また、同じデータは、重複排除により、データブロック番号とインデックスが同じになる。図２では、「１−２」、「２−１」及び「２−４」で識別されるデータが同じであるため、「１−２」、「２−１」及び「２−４」は、データブロック番号「Ｂ２」とインデックス「２」に対応づけられる。
【００２２】
データブロックマップは、データブロック番号と物理番号とを対応付けるテーブルである。物理番号は、ドライブグループ（ＤＧ）３ｃを識別するＤＧ番号（ＤＧ＃）とＲＡＩＤユニット（ＲＵ）を識別するＲＵ番号（ＲＵ＃）とスロットを識別するスロット番号（スロット＃）との組合せである。ＲＡＩＤユニット（まとめ書き単位領域）は、データがストレージ装置に書き込まれる場合にメインメモリ上でバッファリングされるまとめ書き単位領域であり、複数のデータブロックが配置可能である。データは、ＲＡＩＤユニット単位でまとめてストレージ装置に追記書きされる。ＲＡＩＤユニットの大きさは例えば２４ＭＢ（メガバイト）である。ＲＡＩＤユニット内において各データブロックは、スロットを用いて管理される。
【００２３】
図４は、データブロックマップを説明するための図である。図４は、ＤＧ番号が「１」（ＤＧ＃１）でＲＵ番号が「１」（ＲＵ＃１）であるＲＡＩＤユニットに関するデータブロックマップを示す。図４に示すように、ＲＡＩＤユニットの大きさは２４ＭＢであり、データブロックの大きさは３８４ＫＢであるので、スロットの数は６４個である。
【００２４】
図４は、データブロックのアドレスの昇順に各スロットに割り当てられる例を示し、データブロック＃１０１がスロット＃１に記憶され、データブロック＃１０２がスロット＃２に記憶され、・・・、データブロック＃１６４がスロット＃６４に記憶される。
【００２５】
図２のデータブロックマップにおいて、例えば、データブロック番号「Ｂ１」が物理番号「１−１−１」に対応付けられる。データブロック番号「Ｂ１」のデータは、圧縮されてプール３ａのドライブグループ＃１のＲＵ番号が「１」のＲＡＩＤユニットのスロット番号が「１」のスロットに記憶される。なお、図２のプール３ａにおいてティア３ｂ及びそのスロットは省略されている。
【００２６】
リファレンス情報は、インデックスと物理番号とリファレンスカウンタを対応付ける情報である。リファレンスカウンタは、インデックスと物理番号で識別されるデータの重複数である。なお、図２において、物理番号にインデックスを含めてもよい。
【００２７】
図５は、物理領域を説明するための図である。図５に示すように、論物メタは、メインメモリとストレージの両方に記憶される。メインメモリには、一部の論物メタだけが記憶される。論物メタは、メインメモリでは各ＬＵＮについて１ページ（４ＫＢ）だけ記憶される。ＬＵＮとＬＢＡの組合せに対応するページがメインメモリ上にない場合には、ＬＵＮのページがページアウトされ、ＬＵＮとＬＢＡの組合せに対応するページがストレージからメインメモリに読み込まれる。
【００２８】
ストレージでは、４ＴＢ（テラバイト）のボリューム毎に３２ＧＢの論物メタ域（論物メタが記憶される領域）３ｅが記憶される。論物メタ域３ｅは、ＬＵＮ作成時に動的領域から割り当てられ固定領域化される。ここで、動的領域とは、プール３ａから動的に割り当てられる領域である。論物メタ域３ｅはＧＣの対象外である。ＲＡＩＤユニットは、ストレージにデータを追記書きする時に動的領域から割り当てられる。実際には、ＲＡＩＤユニットはストレージに書き込む前に一時的に記憶するライトバッファに追記書きする時に割り当てられる。ＲＡＩＤユニットが記憶されるデータユニット域３ｆは、ＧＣの対象である。
【００２９】
図６は、ＲＡＩＤユニットの追記書きを説明するための図である。図６に示すように、ＬＵＮ＃１において８ＫＢのライトＩ／Ｏ（ストレージへのデータの書き込み命令）を受け付けると、ライトバッファ上のデータブロックのヘッダ領域にデータユニットヘッダが書き込まれ、データは圧縮されてペイロード領域に書き込まれ、データブロックヘッダは更新される。その後、ＬＵＮ＃２において８ＫＢのライトＩ／Ｏを受付すると、図６の例では同じデータブロックのヘッダ領域にデータユニットヘッダが追記され、データは圧縮されてペイロード領域に追記され、データブロックヘッダは更新される。
【００３０】
そして、ライトバッファ内に確保されたデータブロックの容量分の記憶領域において、データブロック内のヘッダ領域又はペイロード領域が一杯になる(使用可能な空き領域がなくなる)と、以降そのデータブロックには追記書きしない。そして、ライトバッファ内のＲＡＩＤユニットの全てのデータブロックが一杯になる(使用可能な空き領域がなくなる)と、ライトバッファの内容がストレージに書き込まれる。その後、当該ＲＡＩＤユニットに割り当てられたライトバッファの記憶領域は解放される。図６では、ＤＧ＃１、ＲＵ＃１５のＲＡＩＤユニットが動的領域から割り当てられている。
【００３１】
また、ＬＵＮ＃１へのライトＩ／Ｏが論物メタのＬＵＮ＃１に対応する領域に反映され、ＬＵＮ＃２へのライトＩ／Ｏが論物メタのＬＵＮ＃２に対応する領域に反映される。また、ライトＩ／Ｏのデータに関するリファレンスカウントが更新され、ライトＩ／Ｏがリファレンス情報に反映される。
【００３２】
また、ＲＵ＃１５に関する情報であるＲＵ情報＃１５に含まれるＴＤＵＣ（Total  Data  Unit  Count）及びＧＤＵＣ（ＧＣ  Data  Unit  Count）が更新され、ライトＩ／Ｏがガベージメータに反映される。ここで、ガベージメータは、ＲＵ情報に含まれるＧＣ関連情報である。ＴＤＵＣは、ＲＵ内のデータユニットの総数であり、データユニットの書き込み時に更新される。ＧＤＵＣは、ＲＵ内の無効データユニットの数であり、リファレンスカウンタ更新時に更新される。
【００３３】
また、データブロックマップにおいて、ＤＢ＃１０１にＤＧ＃１、ＲＵ＃１５、スロット＃１が対応付けられ、ライトＩ／Ｏがデータブロックマップに反映される。
【００３４】
図７は、ＲＡＩＤユニットのまとめ書きを説明するための図である。図７に示すように、データブロックはライトバッファにバッファリングされ、ＲＡＩＤユニット単位でまとめてストレージに書き込まれる。例えば、データブロック＃１は、１つのストライプを記憶する６台のＳＳＤ３ｄに書き込まれる。図７において、Ｐ及びＱはパリティであり、Ｈはホットスペアである。データブロック＃１は、１２８バイト毎に、図７の「０」、「１」、・・・、「１４」、・・・の領域に書き込まれる。
【００３５】
図８Ａは、論物メタのフォーマットを示す図である。図８Ａに示すように、３２バイトの論物メタには、１バイトのＳｔａｔｕｓと、１バイトのＤａｔａ  Ｕｎｉｔ  Ｉｎｄｅｘと、２バイトのＣｈｅｃｋｓｕｍと、２バイトのＮｏｄｅ  Ｎｏ．と、６バイトのＢＩＤが含まれる。また、３２バイトの論物メタには、８バイトのＤａｔａ  Ｂｌｏｃｋ  Ｎｏ．が含まれる。
【００３６】
Ｓｔａｔｕｓは、論物メタの状態を示す。状態としては、有効と無効がある。有効とは、対応ＬＢＡに論物メタが割り当て済の状態であり、無効とは、対応ＬＢＡに論物メタが未割り当ての状態である。Ｄａｔａ  Ｕｎｉｔ  Ｉｎｄｅｘは、インデックスである。Ｃｈｅｃｋｓｕｍは、対応するデータの誤り符号検出値である。Ｎｏｄｅ  Ｎｏ．は、ストレージ装置（ノード）を識別する番号である。ＢＩＤは、ブロックＩＤ（位置情報）すなわちＬＢＡである。Ｄａｔａ  Ｂｌｏｃｋ  Ｎｏ．は、データブロック番号である。なお、Ｒｅｓｅｒｖｅｄは、将来の拡張用で全ビットが０であることを示す。
【００３７】
図８Ｂは、データユニットヘッダのフォーマットを示す図である。図８Ｂに示すように、４０バイトのデータユニットヘッダには、１バイトのＤａｔａ  Ｕｎｉｔ  Ｓｔａｔｕｓと、２バイトのＣｈｅｃｋｓｕｍと、２バイトのＯｆｆｓｅｔ  Ｂｌｏｃｋ  Ｃｏｕｎｔが含まれる。また、４０バイトのデータユニットヘッダには、２バイトのＣｏｍｐｒｅｓｓｉｏｎ  Ｂｙｔｅ  Ｓｉｚｅと、３２バイトのＣＲＣが含まれる。
【００３８】
Ｄａｔａ  Ｕｎｉｔ  Ｓｔａｔｕｓは、データユニットの追記が可能か否かを示す。データユニットヘッダに対応するデータユニットが存在しない場合には追記可能であり、データユニットヘッダに対応するデータユニットが存在する場合には追記不可能である。Ｃｈｅｃｋｓｕｍは、対応するデータユニットの誤り符号検出値である。
【００３９】
Ｏｆｆｓｅｔ  Ｂｌｏｃｋ  Ｃｏｕｎｔは、対応するデータユニットのペイロード領域の先頭からのオフセットである。Ｏｆｆｓｅｔ  Ｂｌｏｃｋ  Ｃｏｕｎｔは、ブロック数で表される。ただし、ここでのブロックは、ＳＳＤの消去単位のブロックではなく、５１２バイトのブロックである。以下では、ＳＳＤの消去単位のブロックと区別するため、５１２バイトのブロックを小ブロックと呼ぶ。Ｃｏｍｐｒｅｓｓｉｏｎ  Ｂｙｔｅ  Ｓｉｚｅは、対応するデータの圧縮後の大きさである。ＣＲＣは、対応するデータユニットの誤り検出コードである。
【００４０】
図８Ｃは、データブロックヘッダのフォーマットを示す図である。図８Ｃに示すように、１９２バイトのデータブロックヘッダには、１バイトのＤａｔａ  Ｂｌｏｃｋ  Ｆｕｌｌ  Ｆｌａｇと、１バイトのＷｒｉｔｅ  Ｄａｔａ  Ｕｎｉｔ  Ｃｏｕｎｔが含まれる。また、１９２バイトのデータブロックヘッダには、１バイトのＮｅｘｔ  Ｄａｔａ  Ｕｎｉｔ  Ｈｅａｄｅｒ  Ｉｎｄｅｘと、８バイトのＮｅｘｔ  Ｗｒｉｔｅ  Ｂｌｏｃｋ  Ｏｆｆｓｅｔと、８バイトのＤａｔａ  Ｂｌｏｃｋ  Ｎｏ．が含まれる。
【００４１】
Ｄａｔａ  Ｂｌｏｃｋ  Ｆｕｌｌ  Ｆｌａｇは、データユニットの追記書きが可能か否かを示すフラグである。データブロックの書き込み残容量が閾値以上で、データユニットの追記書きに十分な空き容量が存在する場合には、データユニットの追記書きが可能である。一方、データブロックの書き込み残容量が閾値未満で、データユニットの追記書きに十分な空き容量が存在しない場合には、データユニットの追記書きが不可能である。
【００４２】
Ｗｒｉｔｅ  Ｄａｔａ  Ｕｎｉｔ  Ｃｏｕｎｔは、データブロックに追記書きしてあるデータユニットの数である。Ｎｅｘｔ  Ｄａｔａ  Ｕｎｉｔ  Ｈｅａｄｅｒ  Ｉｎｄｅｘは、次に書き込むデータユニットヘッダのインデックスである。Ｎｅｘｔ  Ｗｒｉｔｅ  Ｂｌｏｃｋ  Ｏｆｆｓｅｔは、次に書き込むデータユニットのペイロード領域の先頭からのオフセット位置である。単位は小ブロックの数である。Ｄａｔａ  Ｂｌｏｃｋ  Ｎｏ．は、スロットに割り当てられたデータブロック番号である。
【００４３】
次に、実施例に係る情報処理システムの構成について説明する。図９は、実施例に係る情報処理システムの構成を示す図である。図９に示すように、実施例に係る情報処理システム１は、ストレージ装置１ａとサーバ１ｂとを有する。ストレージ装置１ａは、サーバ１ｂが使用するデータを記憶する装置である。サーバ１ｂは、情報処理などの業務を行う情報処理装置である。ストレージ装置１ａとサーバ１ｂとの間は、ＦＣ（Fibre  Channel）及びｉＳＣＳＩ（Internet  Small  Computer  System  Interface）で接続される。
【００４４】
ストレージ装置１ａは、ストレージ装置１ａを制御するストレージ制御装置２とデータを記憶するストレージ（記憶装置）３とを有する。ここで、ストレージ３は、複数台のＳＳＤ３ｄの集まりである。
【００４５】
なお、図９では、ストレージ装置１ａは、ストレージ制御装置＃０及びストレージ制御装置＃１で表される２台のストレージ制御装置２を有するが、ストレージ装置１ａは、３台以上のストレージ制御装置２を有してよい。また、図９では、情報処理システム１は、１台のサーバ１ｂを有するが、情報処理システム１は、２台以上のサーバ１ｂを有してよい。
【００４６】
ストレージ制御装置２は、ストレージ３を分担して管理し、１つ以上のプール３ａを担当する。ストレージ制御装置２は、上位接続部２１と、キャッシュ管理部２２と、重複管理部２３と、メタ管理部２４と、追記部２５と、ＩＯ部２６と、コア制御部２７とを有する。
【００４７】
上位接続部２１は、ＦＣドライバ及びｉＳＣＳＩドライバとキャッシュ管理部２２との間の情報の受け渡しを行う。キャッシュ管理部２２は、キャッシュメモリ上のデータを管理する。重複管理部２３は、データ重複排除／復元の制御を行うことで、ストレージ装置１ａ内に格納されているユニークなデータを管理する。
【００４８】
メタ管理部２４は、論物メタ、データブロックマップ及びリファレンスカウントを管理する。また、メタ管理部２４は、論物メタ及びデータブロックマップを用いて、仮想ボリュームにおけるデータの識別に用いる論理アドレスとＳＳＤ３ｄにおけるデータが記憶された位置を示す物理アドレスの変換処理を行う。ここで、物理アドレスは、データブロック番号とインデックスの組である。
【００４９】
メタ管理部２４は、論物メタ記憶部２４ａと、ＤＢＭ記憶部２４ｂと、リファレンス記憶部２４ｃとを有する。論物メタ記憶部２４ａは、論物メタを記憶する。ＤＢＭ記憶部２４ｂは、データブロックマップを記憶する。リファレンス記憶部２４ｃは、リファレンス情報を記憶する。
【００５０】
追記部２５は、データを連続的なデータユニットで管理し、ＲＡＩＤユニットの単位でＳＳＤ３ｄに追記及びまとめ書きを行う。また、追記部２５は、データの圧縮解凍を行う。追記部２５は、メインメモリ上のバッファにライトデータを溜め、ライトバッファにライトデータを書き込む都度ライトバッファの空き領域が一定の閾値以下になったか否かを判定する。そして、追記部２５は、ライトバッファの空き領域が一定の閾値を以下になるとライトバッファをＳＳＤ３ｄに書き出す。追記部２５は、プール３ａの物理スペースを管理し、ＲＡＩＤユニットの配置を行う。
【００５１】
上位接続部２１がデータ重複排除／復元の制御を行い、追記部２５がデータの圧縮解凍を行うことで、ストレージ制御装置２は、書き込みデータを減らし、さらなる書き込み回数の削減を行うことができる。
【００５２】
ＩＯ部２６は、ＲＡＩＤユニットのストレージ３への書き込みを行う。コア制御部２７は、スレッド、コアの制御を行う。
【００５３】
追記部２５は、ライトバッファ２５ａと、ＧＣバッファ２５ｂと、書き込み処理部２５ｃと、ＧＣ部２５ｄとを有する。なお、図９では、ＧＣバッファ２５ｂは１つであるが、追記部２５は、複数のＧＣバッファ２５ｂを有する。
【００５４】
ライトバッファ２５ａは、メインメモリ上でライトデータがＲＡＩＤユニットのフォーマットで溜められるバッファである。ＧＣバッファ２５ｂは、ＧＣの対象となるＲＡＩＤユニットを記憶するメインメモリ上のバッファである。
【００５５】
書き込み処理部２５ｃは、ライトバッファ２５ａを用いてデータの書き込み処理を行う。また、書き込み処理部２５ｃは、後述するように、ＧＣバッファ２５ｂがＩ／Ｏ受付可能な状態に設定されると、設定されたＧＣバッファ２５ｂを優先的に用いてデータの書き込み処理を行う。
【００５６】
ＧＣ部２５ｄは、プール３ａ単位でＧＣを行う。ＧＣ部２５ｄは、データユニット域３ｆからＲＡＩＤユニットをＧＣバッファ２５ｂに読み込み、無効データ率が所定の閾値以上である場合には、ＧＣバッファ２５ｂを用いてＧＣを行う。
【００５７】
ＧＣ部２５ｄによるＧＣの例を図１０Ａ〜図１０Ｃに示す。図１０Ａは、ＧＣ前の論物メタ、データユニットヘッダ、ＲＡＩＤユニット及びリファレンス情報の例を示す図であり、図１０Ｂは、ＧＣ実施後のＲＡＩＤユニット及びデータユニットヘッダを示す図であり、図１０Ｃは、ＧＣ実施後の追記書きを示す図である。なお、図１０Ａ〜図１０Ｃでは、データユニットヘッダのＣＲＣ、リファレンス情報のＤＢ＃は省略されている。
【００５８】
図１０Ａに示すように、ＧＣ前は、論物メタには、ＤＢ＃１０２のインデックスが「１」及び「３」のデータユニットが登録されており、それぞれが２つのＬＵＮ／ＬＢＡに対応付けられている。ＤＢ＃１０２のインデックスが「２」及び「４」のデータユニットは、いずれのＬＵＮ／ＬＢＡに対応付けられていない。このため、ＤＢ＃１０２のインデックスが「１」及び「３」のデータユニットのＲＣ（リファレンスカウンタ）は「２」であり、ＤＢ＃１０２のインデックスが「２」及び「４」のデータユニットのＲＣは「０」である。ＤＢ＃１０２のインデックスが「２」及び「４」のデータユニットは、ＧＣの対象である。
【００５９】
図１０Ｂに示すように、ＧＣ実施後は、ＤＢ＃１０２のインデックスが「３」のデータユニットがデータブロック内で前詰めされる。そして、データユニットヘッダが更新される。具体的には、ＤＢ＃１０２のインデックスが「３」のオフセットが「５０」に更新される。また、インデックスが「２」及び「４」に対応するデータユニットヘッダは未使用（−）に更新される。また、論物メタ及びリファレンス情報は更新されない。
【００６０】
図１０Ｃに示すように、圧縮後の長さが「３０」及び「２０」である新たなデータがＤＢ＃１０２のインデックス「２」と「４」が示す位置に追記され、データユニットヘッダのインデックス「２」及び「４」が更新される。データユニットヘッダのインデックス「２」のオフセットは「７０」に更新され、長さは「３０」に更新される。データユニットヘッダのインデックス「４」のオフセットは「１００」に更新され、長さは「２０」に更新される。すなわち、ＤＢ＃１０２のインデックス「２」と「４」が再利用される。また、インデックス「２」及び「４」に対応するＲＣが更新される。
【００６１】
このように、ＧＣ部２５ｄは、ペイロード領域においてデータユニットの前詰めを行う。前詰めにより解放されたペイロード領域は再利用され、解放されたペイロード領域は効率良く使用される。したがって、ＧＣ部２５ｄによるＧＣは、容積効率が良い。また、ＧＣ部２５ｄは、データユニットヘッダについては前詰めを行わない。
【００６２】
また、ＧＣ部２５ｄは、スロットの詰め直しを行わない。ＧＣ部２５ｄは、スロット全体が空いた場合にも次のスロットを前詰めすることはない。したがって、ＧＣ部２５ｄは、データブロックマップの更新を不要とすることができる。また、ＧＣ部２５ｄは、ＲＡＩＤユニット間でデータの詰め直しを行わない。ＧＣ部２５ｄは、ＲＡＩＤユニットに空きができた場合に、次のＲＡＩＤユニットからデータを前詰めすることはない。したがって、ＧＣ部２５ｄは、データブロックマップ及びリファレンス情報の更新を不要とすることができる。
【００６３】
このように、ＧＣ部２５ｄは、ＧＣ処理において論物メタ、データブロックマップ、リファレンス情報の更新を不要とすることができ、ストレージ３へのライトを減らすことができる。したがって、ＧＣ部２５ｄは、処理速度を向上することができる。
【００６４】
図１１は、ＧＣ巡回処理を説明するための図である。ここで、バッファ巡回処理とは、データ詰め直し、Ｉ／Ｏ受付制御、強制ライトバックの順番で行われる処理である。なお、図１１において、ステージングは、ＲＡＩＤユニットをＧＣバッファ２５ｂに読み込むことである。
【００６５】
データ詰め直しは、図１０Ｂに例を示した前詰めとデータユニットヘッダの更新である。図１１では、説明の便宜上、ＲＡＩＤユニット内で前詰めが行われるイメージを示すが、前詰めはデータブロック内のみで行われる。
【００６６】
Ｉ／Ｏ受付制御は、図１０Ｃに例を示した追記書きである。データ詰め直しの後、ＧＣバッファ２５ｂの内容をストレージ３に書き込むと、データブロック内に空き領域があり、記憶効率が悪い。このため、ＧＣ部２５ｄは、Ｉ／Ｏ（ストレージ装置１ａへのデータの書き込み及びストレージ装置１ａからのデータの読み出し）を受け付けて空き領域を埋める。
【００６７】
強制ライトバックは、所定の時間内にＧＣバッファ２５ｂが埋まらなかった場合に強制的にＧＣバッファ２５ｂをプール３ａに書き戻すことである。強制ライトバックを行うことで、ライトＩ／Ｏがこない場合にも、ＧＣ部２５ｄは、バッファ巡回処理を前に進めることができる。なお、強制ライトバックされたＲＡＩＤユニットは、強制ライトバックされたＲＡＩＤユニットを含むプール３ａが次にＧＣされる時に優先的にＧＣの対象とされる。
【００６８】
ＧＣ部２５ｄは、それぞれの処理を並列で動作させる。また、データ詰め直しは、一定の多重度で行われる。また、追記部２５は、ＧＣ部２５ｄの処理をＩ／Ｏ処理とは別のＣＰＵコア（Central  Processing  Unit）で行う。
【００６９】
ＧＣ部２５ｄは、プール３ａの残容量が十分残っている場合は、効率的に空き用量を確保するが、プール３ａの残容量が少ない場合は、空けられる領域は全て解放する。このため、ＧＣ部２５ｄは、ＧＣの対象となるＲＡＩＤユニットの無効データ率の閾値をプール３ａの残容量に基づいて変動させる。
【００７０】
図１２は、プール３ａの残容量と無効データ率の閾値との関係の一例を示す図である。図１２に示すように、ＧＣ部２５ｄは、例えば、プール３ａの残容量が２１％〜１００％の場合には、無効データ率が５０％以上のＲＡＩＤユニットをＧＣの対象とする。また、ＧＣ部２５ｄは、プール３ａの残容量が０％〜５％の場合には、無効データ率が０％以外のＲＡＩＤユニットをＧＣの対象とする。ただし、プール３ａの残容量が５％を切った場合には、ＧＣ部２５ｄは、効率的に空き容量を増やすため、無効データ率が高いものから優先的にＧＣを行う。
【００７１】
図１３は、ＧＣに関して機能部間の関係を示す図である。図１３に示すように、追記部２５は、ＧＣ全般に関する制御を行う。また、追記部２５は、メタ管理部２４にリファレンスカウンタの取得、リファレンスカウンタの更新、データブロックマップの更新を依頼する。また、追記部２５は、重複管理部２３にＩ／Ｏディレイを依頼する。重複管理部２３は、上位接続部２１にＩ／Ｏディレイを依頼し、上位接続部２１は、Ｉ／Ｏディレイ制御を行う。
【００７２】
また、追記部２５は、ＩＯ部２６に無効データ率の取得、ドライブリード／ライトを依頼する。ここで、ドライブリードは、ストレージ３からのデータの読み出しであり、ドライブライトは、ストレージ３へのデータの書き込みである。また、追記部２５は、コア制御部２７にＧＣ専用コアの割り当て、スレッドの割り当てを依頼する。コア制御部２７は、ＧＣ用スレッドの割り当てを増やすことで、ＧＣの多重度を上げることができる。
【００７３】
図１４は、ＧＣ部２５ｄの機能構成を示す図である。図１４に示すように、ＧＣ部２５ｄは、ＧＣ巡回監視部３１と、ＧＣ巡回処理部３１ａと、ＧＣ加速部３５を有する。ＧＣ巡回監視部３１は、ＧＣ巡回処理の実行を制御する。
【００７４】
ＧＣ巡回処理部３１ａは、ＧＣ巡回処理を行う。ＧＣ巡回処理部３１ａは、詰め直し部３２と、詰め直し処理部３２ａと、Ｉ／Ｏ受付制御部３３と、強制ＷＢ部３４とを有する。
【００７５】
詰め直し部３２は、詰め直し処理の実行を制御する。詰め直し処理部３２ａは、詰め直し処理を行う。Ｉ／Ｏ受付制御部３３は、詰め直しが行われたＧＣバッファ２５ｂをＩ／Ｏ受付が可能な状態に設定する。強制ＷＢ部３４は、所定の時間内にＧＣバッファ２５ｂが埋まらなかった場合に、ＧＣバッファ２５ｂを強制的にストレージ３に書き込む。
【００７６】
ＧＣ加速部３５は、プール残容量に基づいてディレイ制御及び多重度制御を行うことで、ＧＣ処理を加速する。ここで、ディレイ制御とは、残容量が少なくなったプール３ａへのＩ／Ｏをディレイさせる制御である。また、多重度制御とは、詰め直し処理の多重度の制御及びＧＣに用いられるＣＰＵコア数の制御である。
【００７７】
ＧＣ加速部３５は、残容量が少なくなったプール３ａへのＩ／Ｏのディレイを重複管理部２３に依頼し、重複管理部２３は、ディレイ時間を決定して上位接続部２１にディレイ時間とともにディレイを依頼する。また、ＧＣ加速部３５は、プール残容量に基づいて多重度及びＣＰＵコア数を制御するようにコア制御部２７に依頼する。
【００７８】
例えば、コア制御部２７は、プール残容量が２１％〜１００％の場合には、多重度とＣＰＵコア数を４多重と２ＣＰＵコアと決定し、１１％〜２０％の場合には、８多重と４ＣＰＵコアと決定する。また、コア制御部２７は、プール残容量が６％〜１０％の場合には、多重度とＣＰＵコア数を１２多重と６ＣＰＵコアと決定し、０％〜５％の場合には、１６多重と８ＣＰＵコアと決定する。
【００７９】
次に、ＧＣ動作のフローについて説明する。図１５は、ＧＣ起動のシーケンスを示す図である。図１５に示すように、追記部２５の受付部は、ストレージ装置１ａの全体を制御するシステムマネージャからＧＣの起動を依頼する起動通知を受け取り（ｔ１）、ＧＣを起動する（ｔ２）。すなわち、受付部はＧＣ起動部にＧＣ起動を依頼する（ｔ３）。
【００８０】
すると、ＧＣ起動部は、ＧＣ起動用スレッドを取得し（ｔ４）、取得したＧＣ起動用スレッドを起動する（ｔ５）。起動されたＧＣ起動用スレッドは、ＧＣ部２５ｄとして動作する。そして、ＧＣ起動部は、ＧＣの起動を受付部に応答し（ｔ６）、受付部はＧＣの起動をシステムマネージャに応答する（ｔ７）。
【００８１】
ＧＣ部２５ｄは、多重度監視用スレッドを取得し（ｔ８）、取得した多重度監視用スレッドを起動することで多重度監視を起動する（ｔ９）。そして、ＧＣ部２５ｄは、ＧＣ巡回監視用スレッドを取得し（ｔ１０）、取得したＧＣ巡回監視用スレッドを起動することでＧＣ巡回監視を起動する（ｔ１１）。ＧＣ部２５ｄは、ｔ１０及びｔ１１の処理をプール３ａの数分行う。そして、ＧＣ巡回監視が終了すると、ＧＣ部２５ｄは、ＧＣ起動用スレッドを解放する（ｔ１２）。
【００８２】
このように、ＧＣ部２５ｄは、ＧＣ巡回監視を起動することによって、ＧＣを行うことができる。
【００８３】
図１６は、ＧＣ巡回監視のシーケンスを示す図である。図１６において、ＧＣ巡回監視部３１は、ＧＣ巡回監視用スレッドである。図１６に示すように、ＧＣ部２５ｄによりＧＣ巡回監視が起動される（ｔ２１）と、ＧＣ巡回監視部３１は、ＧＣ巡回処理用スレッドを取得する（ｔ２２）。ＧＣ巡回処理部３１ａは、ＧＣ巡回処理用スレッドである。ＧＣ巡回処理用スレッドは、データ詰め直し用スレッド、Ｉ／Ｏ受付制御用スレッド、強制ＷＢ（ライトバック）用スレッドの３つのスレッドである。
【００８４】
そして、ＧＣ巡回監視部３１は、ＧＣバッファ２５ｂの初回割り当てを行い（ｔ２３）、データ詰め直し用スレッド、Ｉ／Ｏ受付制御用スレッド、強制ＷＢ用スレッドを起動し（ｔ２４〜ｔ２６）、完了待ち合わせを行う（ｔ２７）。そして、データ詰め直し用スレッドは、データ詰め直しを行う（ｔ２８）。また、Ｉ／Ｏ受付制御用スレッドは、Ｉ／Ｏ受付制御を行う（ｔ２９）。また、強制ＷＢ用スレッドは、強制ＷＢを行う（ｔ３０）。そして、データ詰め直し用スレッド、Ｉ／Ｏ受付制御用スレッド及び強制ＷＢ用スレッドＧＣは、処理が終了すると、それぞれＧＣ巡回監視部３１に完了を応答する（ｔ３１〜ｔ３３）。
【００８５】
そして、ＧＣ巡回監視部３１は、ＧＣバッファ２５ｂの割り当てを行い（ｔ３４）、データ詰め直し用スレッド、Ｉ／Ｏ受付制御用スレッド、強制ＷＢ用スレッドを起動し（ｔ３５〜ｔ３７）、完了待ち合わせを行う（ｔ３８）。そして、データ詰め直し用スレッドは、データ詰め直しを行う（ｔ３９）。また、Ｉ／Ｏ受付制御用スレッドは、Ｉ／Ｏ受付制御を行う（ｔ４０）。また、強制ＷＢ用スレッドは、強制ＷＢを行う（ｔ４１）。
【００８６】
そして、データ詰め直し用スレッド、Ｉ／Ｏ受付制御用スレッド及び強制ＷＢ用スレッドＧＣは、処理が終了すると、それぞれＧＣ巡回監視部３１に完了を応答する（ｔ４２〜ｔ４４）。そして、ＧＣ巡回監視部３１は、ＧＣ部２５ｄが停止するまでｔ３４〜ｔ４４の処理を繰り返す。
【００８７】
このように、ＧＣ部２５ｄがバッファ巡回処理を繰り返すことで、ストレージ制御装置２は、ストレージ３に対してＧＣを行うことができる。
【００８８】
次に、データ詰め直し処理のシーケンスについて説明する。図１７は、データ詰め直し処理のシーケンスを示す図である。なお、図１７において、詰め直し部３２は、データ詰め直し用スレッドであり、詰め直し処理部３２ａは、詰め直し処理用スレッドであり、プール３ａあたり４重化される。
【００８９】
図１７に示すように、ＧＣ巡回監視部３１によりデータ詰め直し処理が起動される（ｔ５１）と、詰め直し部３２は、無効データ率を判定する（ｔ５２）。すなわち、詰め直し部３２は、ＩＯ部２６から無効データ率を取得して（ｔ５３〜ｔ５４）、判定する。
【００９０】
そして、詰め直し部３２は、無効データ率がプール３ａの残容量に基づく閾値以上のＲＵを対象ＲＵとして、詰め直し処理用スレッドを起動することで詰め直し処理を起動し（ｔ５５）、完了待ち合わせを行う（ｔ５６）。ここでは、４つの詰め直し処理用スレッドが起動される。
【００９１】
詰め直し処理部３２ａは、対象ＲＵをリードする（ｔ５７）。すなわち、詰め直し処理部３２ａは、ＩＯ部２６にドライブリードを依頼し（ｔ５８）、ＩＯ部２６から応答を受け取る（ｔ５９）ことで対象ＲＵをリードする。そして、詰め直し処理部３２ａは、データブロック内の各データユニットに対応するリファレンスカウンタを取得する（ｔ６０）。すなわち、詰め直し処理部３２ａは、メタ管理部２４にリファレンスカウンタを要求し（ｔ６１）、メタ管理部２４から応答を受け取る（ｔ６２）ことでリファレンスカウンタを取得する。
【００９２】
そして、詰め直し処理部３２ａは、リファレンスカウンタに基づいて有効データを特定し、有効データ詰め直しを行う（ｔ６３）。そして、詰め直し処理部３２ａは、無効データ率を減算する（ｔ６４）。すなわち、詰め直し処理部３２ａは、ＩＯ部２６に無効データ率更新を依頼し（ｔ６５）、ＩＯ部２６から応答を受け取る（ｔ６６）ことで無効データ率を減算する。
【００９３】
そして、詰め直し処理部３２ａは、スループットを通知する（ｔ６７）。具体的には、詰め直し処理部３２ａは、プール３ａの残容量等を重複管理部２３に通知し（ｔ６８）、重複管理部２３から応答を受け取る（ｔ６９）。そして、詰め直し処理部３２ａは、詰め直し部３２に詰め直しの完了を応答し（ｔ７０）、詰め直し部３２は、ＧＣ巡回監視部３１にデータ詰め直しの完了通知を行う（ｔ７１）。すなわち、詰め直し部３２は、ＧＣ巡回監視部３１に完了を応答する（ｔ７２）。
【００９４】
このように、詰め直し処理部３２ａは、リファレンスカウンタに基づいて有効データを特定し、特定した有効データの詰め直しを行うことで、データブロック内に空き領域を確保することができる。
【００９５】
図１８は、データ詰め直し処理のフローを示すフローチャートである。図１８に示すように、ＧＣ巡回処理部３１ａは、ＩＯ部２６に依頼してＲＵ毎の無効データ率を取得し（ステップＳ１）、無効データ率が高いＲＵを選択する（ステップＳ２）。そして、ＧＣ巡回処理部３１ａは、対象ＲＵのドライブをリードする（ステップＳ３）。なお、ステップＳ３の処理から多重度に応じてＲＵ毎に並列に処理が行われる。
【００９６】
そして、ＧＣ巡回処理部３１ａは、リードした結果を一時バッファに格納し（ステップＳ４）、メタ管理部２４に依頼してデータユニットヘッダ毎のリファレンスカウンタを取得する（ステップＳ５）。そして、ＧＣ部２５ｄは、リファレンスカウンタは０か否かを判定し（ステップＳ６）、０でない場合には、一時バッファから対象のデータユニットヘッダとデータユニットをＧＣバッファ２５ｂにコピーする（ステップＳ７）処理を繰り返す。ＧＣ巡回処理部３１ａは、ステップＳ６〜ステップＳ７の処理を１つのデータブロックのデータユニット数分繰り返すことをデータブロック数分繰り返す。
【００９７】
また、ＧＣ巡回処理部３１ａは、ＧＣバッファ２５ｂにコピーする場合、データユニットについてはペイロード領域に前詰めし、データユニットヘッダについては同じ位置にコピーする。ただし、データユニットヘッダのＯｆｆｓｅｔ  Ｂｌｏｃｋ  Ｃｏｕｎｔについては、データユニットを前詰めした位置から再計算される。
【００９８】
そして、ＧＣ巡回処理部３１ａは、ＧＣバッファ２５ｂのデータブロックヘッダを更新する（ステップＳ８）。更新にあたって、ＧＣ部２５ｄは、データブロックヘッダのうちＤａｔａ  Ｂｌｏｃｋ  Ｎｏ以外は詰め直したデータから再計算する。そして、ＧＣ巡回処理部３１ａは、ＩＯ部２６に依頼してデータ有効数を更新する（ステップＳ９）。ここで、データ有効数とは、ＴＤＬＣ及びＧＤＬＣである。
【００９９】
このように、ＧＣ巡回処理部３１ａは、リファレンスカウンタに基づいて有効データを特定し、特定した有効データのデータユニットヘッダとデータユニットを一時バッファからＧＣバッファ２５ｂにコピーするので、データブロック内に空き領域を確保することができる。
【０１００】
次に、Ｉ／Ｏ受付制御処理のシーケンスについて説明する。図１９は、Ｉ／Ｏ受付制御処理のシーケンスを示す図である。なお、図１９において、Ｉ／Ｏ受付制御部３３は、Ｉ／Ｏ受付制御用スレッドである。
【０１０１】
図１９に示すように、ＧＣ巡回監視部３１によるＩ／Ｏ受付制御処理が起動される（ｔ７６）。すると、Ｉ／Ｏ受付制御部３３は、詰め直し処理が完了したＧＣバッファ２５ｂをライトバッファ２５ａより優先的にＩ／Ｏ受付可能な状態に設定する（ｔ７７）。なお、ｔ７７の処理はデータ詰め直しが完了したＧＣバッファ２５ｂの数分繰り返される。また、Ｉ／Ｏ受付可能な状態に設定されたＧＣバッファ２５ｂは、いっぱいになるとストレージ３にまとめ書きされる。そして、Ｉ／Ｏ受付制御部３３は、ＧＣ巡回監視部３１にＩ／Ｏ受付制御の完了を通知する（ｔ７８）。
【０１０２】
このように、Ｉ／Ｏ受付制御部３３は、ＧＣバッファ２５ｂをライトバッファ２５ａより優先的にＩ／Ｏ受付可能な状態に設定することで、データブロック内の空き領域へのデータの追記書きを可能とすることができる。
【０１０３】
次に、強制ＷＢ処理のシーケンスについて説明する。図２０は、強制ＷＢ処理のシーケンスを示す図である。なお、図２０において、強制ＷＢ部３４は、強制ＷＢ用スレッドである。図２０に示すように、ＧＣ巡回監視部３１は、Ｉ／Ｏ受付対象からＧＣバッファ２５ｂを削除し（ｔ８１）、強制ＷＢ対象へＧＣバッファ２５ｂを追加する（ｔ８２）。そして、ＧＣ巡回監視部３１は強制ＷＢを起動する（ｔ８３）。
【０１０４】
そして、強制ＷＢ部３４は、強制ＷＢ対象バッファへのＩ／Ｏ受付停止を書き込み処理部２５ｃに依頼する（ｔ８４）。そして、書き込み処理部２５ｃは、強制ＷＢ対象バッファをＩ／Ｏ受付可リストから除外し（ｔ８５）、強制ＷＢ部３４へＩ／Ｏ受付停止の完了を応答する（ｔ８６）。
【０１０５】
そして、強制ＷＢ部３４は、強制ＷＢ対象のＧＣバッファ２５ｂをライトバックする（ｔ８７）。すなわち、強制ＷＢ部３４は、強制ＷＢ対象のＧＣバッファ２５ｂのライトバックをＩＯ部２６に依頼し（ｔ８８）、ＩＯ部２６の非同期ライト部は、強制ＷＢ対象のＧＣバッファ２５ｂのドライブライトを行う（ｔ８９）。
【０１０６】
そして、強制ＷＢ部３４は、非同期ライト部から完了通知を受け取る（ｔ９０）。なお、ｔ８７〜ｔ９０の処理は、強制ＷＢ対象のＧＣバッファ２５ｂの数分行われる。そして、強制ＷＢ部３４は、強制ＷＢ完了通知をＧＣ巡回監視部３１に応答する（ｔ９１）。
【０１０７】
このように、強制ＷＢ部３４は、強制ＷＢ対象のＧＣバッファ２５ｂのライトバックを非同期ライト部に依頼することで、Ｉ／Ｏが少ない場合にも、ＧＣ巡回処理を完了させることができる。
【０１０８】
次に、強制ＷＢ処理のフローについて説明する。図２１は、強制ＷＢ処理のフローを示すフローチャートである。図２１に示すように、ＧＣ部２５ｄは、以下のステップＳ１１〜ステップＳ１２をＩ／Ｏ受付中のＧＣバッファ２５ｂの数分繰り返す。ＧＣ部２５ｄは、ストレージ３へライトバックしていないＧＣバッファ２５ｂを選択し（ステップＳ１１）、選択したＧＣバッファ２５ｂを強制ライトバック対象バッファとする（ステップＳ１２）。
【０１０９】
そして、ＧＣ部２５ｄは、以下のステップＳ１３〜ステップＳ１５を強制ライトバック対象バッファの数分繰り返す。ＧＣ部２５ｄは、強制ライトバック対象バッファへの新規Ｉ／Ｏ受付停止を書き込み処理部２５ｃに依頼し（ステップＳ１３）、強制ライトバック対象バッファへの仕掛中のリード処理完了を待ち合わせる（ステップＳ１４）。そして、ＧＣ部２５ｄは、ＩＯ部２６へ非同期ライトを依頼する（ステップＳ１５）。
【０１１０】
そして、ＧＣ部２５ｄは、強制ライトバック対象バッファの非同期ライトの完了待合せを行う（ステップＳ１６）。
【０１１１】
このように、強制ＷＢ部３４は、強制ライトバック対象バッファの非同期ライトをＩＯ部２６へ依頼することで、Ｉ／Ｏが少ない場合にも、ＧＣ巡回処理を完了させることができる。
【０１１２】
次に、ディレイ制御と多重度変更を行う処理のシーケンスについて説明する。図２２は、ディレイ制御と多重度変更を行う処理のシーケンスを示す図である。図２２に示すように、ＧＣ加速部３５は、プール残容量をチェックする（ｔ１０１）。そして、ＧＣ加速部３５は、プール残容量に基づいてディレイレベルを決定し、決定したディレイレベルのディレイ依頼を重複管理部２３に行う（ｔ１０２）。そして、重複管理部２３は、ディレイレベルに応じてディレイ時間を決定し（ｔ１０３）、ディレイ時間とともに上位接続部２１にＩ／Ｏディレイ依頼を行う（ｔ１０４）。
【０１１３】
また、ＧＣ加速部３５は、プール残容量に基づいて、多重度変更を行うかをチェックし（ｔ１０５）、多重度変更を行う必要がある場合に、多重度変更を行う（ｔ１０６）。すなわち、ＧＣ加速部３５は、多重度変更を行う必要がある場合に、ＣＰＵコアの獲得と多重度変更をコア制御部２７に依頼する（ｔ１０７）。
【０１１４】
そして、コア制御部２７は、プール残容量に基づいてＣＰＵコアの獲得と多重度変更を行う（ｔ１０８）。そして、コア制御部２７は、ＧＣ加速部３５に多重度変更の完了を応答する（ｔ１０９）。
【０１１５】
図２３は、ディレイ制御と多重度変更の例を示す図である。図２３に示すように、例えば、プール残容量が２０％を超えている状態から２０％以下の状態に変化すると、ＧＣ加速部３５は、重複管理部２３にレベル＃２のスローダウンリクエストを送り、コア制御部２７に多重度変更を依頼する。コア制御部２７は、多重度を４多重から８多重に変更する。また、例えば、プール残容量が５％以下の状態から５％を超える状態に変化すると、ＧＣ加速部３５は、重複管理部２３にレベル＃３のスローダウンリクエストを送り、コア制御部２７に多重度変更を依頼する。コア制御部２７は、多重度を３２多重から１６多重に変更する。
【０１１６】
このように、ＧＣ加速部３５は、プール残容量に基づいてＩ／Ｏのディレイ制御と多重度変更の制御を行うので、プール残容量とストレージ装置１ａの性能とのバランスが最適になるように制御することができる。
【０１１７】
上述してきたように、実施例では、詰め直し処理部３２ａが、ＧＣ対象のＲＵをストレージ３から読み出してＧＣバッファ２５ｂに格納し、ＧＣバッファ２５ｂに含まれる各データブロックについて、有効なデータユニットをペイロード領域で前詰めする。また、詰め直し処理部３２ａは、前詰めしたデータユニットに対応するデータユニットヘッダのオフセットを更新する。また、詰め直し処理部３２ａは、インデックスの詰め直しを行わない。したがって、ＧＣにおいて論物メタを更新する必要がなく、ＧＣにおける書き込み量を減らすことができる。
【０１１８】
また、実施例では、Ｉ／Ｏ受付制御部３３が、詰め直しが完了したＧＣバッファ２５ｂを優先的にＩ／Ｏ受付が行われる状態に設定するので、ＧＣにより回収された領域を有効に利用することができる。
【０１１９】
また、実施例では、優先的にＩ／Ｏ受付が行われる状態に設定されたＧＣバッファ２５ｂが所定の時間経過してもストレージ３にライトバックされない場合には、強制ＷＢ部３４が強制的にライトバックするので、ＧＣ巡回処理の停滞を防ぐことができる。
【０１２０】
また、実施例では、詰め直し部３２は、無効データ率が所定の閾値以上のＲＡＩＤユニットをＧＣ対象とし、プール残容量に基づいて閾値を変更するので、多くの空き容量の確保と効率的なＧＣとのバランスが最適になるように制御することができる。
【０１２１】
また、実施例では、プール残容量に基づいてＩ／Ｏのディレイ制御と多重度変更の制御を行うので、プール残容量とストレージ装置１ａの性能とのバランスが最適になるように制御することができる。
【０１２２】
なお、実施例では、ストレージ制御装置２について説明したが、ストレージ制御装置２が有する構成をソフトウェアによって実現することで、同様の機能を有するストレージ制御プログラムを得ることができる。そこで、ストレージ制御プログラムを実行するストレージ制御装置２のハードウェア構成について説明する。
【０１２３】
図２４は、実施例に係るストレージ制御プログラムを実行するストレージ制御装置２のハードウェア構成を示す図である。図２４に示すように、ストレージ制御装置２は、メインメモリ４１と、プロセッサ４２と、ホストＩ／Ｆ４３と、通信Ｉ／Ｆ４４と、接続Ｉ／Ｆ４５とを有する。
【０１２４】
メインメモリ４１は、プログラムやプログラムの実行途中結果などを記憶するＲＡＭ（Random  Access  Memory）である。プロセッサ４２は、メインメモリ４１からプログラムを読み出して実行する処理装置である。
【０１２５】
ホストＩ／Ｆ４３は、サーバ１ｂとのインタフェースである。通信Ｉ／Ｆ４４は、他のストレージ制御装置２と通信するためのインタフェースである。接続Ｉ／Ｆ４５は、ストレージ３とのインタフェースである。
【０１２６】
そして、プロセッサ４２において実行されるストレージ制御プログラムは、可搬記録媒体５１に記憶され、メインメモリ４１に読み込まれる。あるいは、ストレージ制御プログラムは、通信Ｉ／Ｆ４４を介して接続されたコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてメインメモリ４１に読み込まれる。
【０１２７】
また、実施例では、ＳＳＤ３ｄを不揮発性記憶媒体として用いる場合について説明したが、本発明はこれに限定されるものではなく、ＳＳＤ３ｄと同様に書き込み回数に制限がある他の不揮発性記憶媒体を用いる場合にも同様に適用することができる。
【０１２８】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１２９】
（付記１）書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する第１バッファと、
前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行うガベージコレクション（ＧＣ）処理部と
を有することを特徴とするストレージ制御装置。
【０１３０】
（付記２）前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて記憶する第２バッファと、
前記第２バッファを用いて前記記憶媒体への書き込みを行う書込処理部とをさらに有し、
前記ＧＣ処理部は、前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定することを特徴とする付記１に記載のストレージ制御装置。
【０１３１】
（付記３）前記ＧＣ処理部は、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込むことを特徴とする付記２に記載のストレージ制御装置。
【０１３２】
（付記４）前記ＧＣ処理部は、無効データ率が所定の閾値以上のまとめ書き単位領域を前記記憶媒体から読み出して前記第１バッファに格納する制御と、前記記憶媒体の残容量に基づいて前記閾値を変更する制御を行うことを特徴とする付記１、２又は３に記載のストレージ制御装置。
【０１３３】
（付記５）前記ＧＣ処理部は、前記ストレージの残容量に基づいて、該ストレージの入出力処理のディレイを制御するとともに、ＧＣを並列に行う数を示す多重度及びＧＣに用いられるＣＰＵコアの数を制御することを特徴とする付記１〜４のいずれか１つに記載のストレージ制御装置。
【０１３４】
（付記６）書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御方法において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
ことを特徴とするストレージ制御方法。
【０１３５】
（付記７）前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて第２バッファに記憶し、
前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記記憶媒体への書き込みで優先的に使用される前記第２バッファとして設定することを特徴とする付記６に記載のストレージ制御方法。
【０１３６】
（付記８）前記第１バッファを前記記憶媒体への書き込みで優先的に使用される前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込むことを特徴とする付記７に記載のストレージ制御方法。
【０１３７】
（付記９）書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御が備えるコンピュータで実行されるストレージ制御プログラムにおいて、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
処理を前記コンピュータに実行させることを特徴とするストレージ制御プログラム。
【０１３８】
（付記１０）前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて第２バッファに記憶し、
前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記記憶媒体への書き込みで優先的に使用される前記第２バッファとして設定する処理を前記コンピュータにさらに実行させることを特徴とする付記９に記載のストレージ制御プログラム。
【０１３９】
（付記１１）前記第１バッファを前記記憶媒体への書き込みで優先的に使用される前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込む処理を前記コンピュータにさらに実行させることを特徴とする付記１０に記載のストレージ制御プログラム。
【符号の説明】
【０１４０】
１    情報処理システム
１ａ    ストレージ装置
１ｂ    サーバ
２    ストレージ制御装置
３    ストレージ
３ａ    プール
３ｂ    ティア
３ｃ    ドライブグループ
３ｄ    ＳＳＤ
３ｅ    論物メタ域
３ｆ    データユニット域
２１    上位接続部
２２    キャッシュ管理部
２３    重複管理部
２４    メタ管理部
２４ａ    論物メタ記憶部
２４ｂ    ＤＢＭ記憶部
２４ｃ    リファレンス記憶部
２５    追記部
２５ａ    ライトバッファ
２５ｂ    ＧＣバッファ
２５ｃ    書き込み処理部
２５ｄ    ＧＣ部
２６    ＩＯ部
２７    コア制御部
３１    ＧＣ巡回監視部
３１ａ    ＧＣ巡回処理部
３２    詰め直し部
３２ａ    詰め直し処理部
３３    Ｉ／Ｏ受付制御部
３４    強制ＷＢ部
３５    ＧＣ加速部
４１    メインメモリ
４２    プロセッサ
４３    ホストＩ／Ｆ
４４    通信Ｉ／Ｆ
４５    接続Ｉ／Ｆ
５１    可搬記録媒体
【図１】
2019133577.tif 000003
【図２】
2019133577.tif 000004
【図３】
2019133577.tif 000005
【図４】
2019133577.tif 000006
【図５】
2019133577.tif 000007
【図６】
2019133577.tif 000008
【図７】
2019133577.tif 000009
【図８Ａ】
2019133577.tif 000010
【図８Ｂ】
2019133577.tif 000011
【図８Ｃ】
2019133577.tif 000012
【図９】
2019133577.tif 000013
【図１０Ａ】
2019133577.tif 000014
【図１０Ｂ】
2019133577.tif 000015
【図１０Ｃ】
2019133577.tif 000016
【図１１】
2019133577.tif 000017
【図１２】
2019133577.tif 000018
【図１３】
2019133577.tif 000019
【図１４】
2019133577.tif 000020
【図１５】
2019133577.tif 000021
【図１６】
2019133577.tif 000022
【図１７】
2019133577.tif 000023
【図１８】
2019133577.tif 000024
【図１９】
2019133577.tif 000025
【図２０】
2019133577.tif 000026
【図２１】
2019133577.tif 000027
【図２２】
2019133577.tif 000028
【図２３】
2019133577.tif 000029
【図２４】
2019133577.tif 000030
【手続補正書】
【提出日】平成30年8月22日(2018.8.22)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する第１バッファと、
前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行うガベージコレクション（ＧＣ）処理部と
を有することを特徴とするストレージ制御装置。
【請求項２】
前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて記憶する第２バッファと、
前記第２バッファを用いて前記記憶媒体への書き込みを行う書込処理部とをさらに有し、
前記ＧＣ処理部は、前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定することを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記ＧＣ処理部は、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込むことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記ＧＣ処理部は、無効データ率が所定の閾値以上のまとめ書き単位領域を前記記憶媒体から読み出して前記第１バッファに格納する制御と、前記記憶媒体の残容量に基づいて前記閾値を変更する制御を行うことを特徴とする請求項１、２又は３に記載のストレージ制御装置。
【請求項５】
前記ＧＣ処理部は、前記ストレージの残容量に基づいて、該ストレージの入出力処理のディレイを制御するとともに、ＧＣを並列に行う数を示す多重度及びＧＣに用いられるＣＰＵコアの数を制御することを特徴とする請求項１〜４のいずれか１つに記載のストレージ制御装置。
【請求項６】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御方法において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
ことを特徴とするストレージ制御方法。
【請求項７】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御が備えるコンピュータで実行されるストレージ制御プログラムにおいて、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
処理を前記コンピュータに実行させることを特徴とするストレージ制御プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
１つの態様では、ストレージ制御装置は、書き込み回数に制限を有する記憶媒体を用いるストレージを制御する。前記ストレージ装置は、第１バッファとＧＣ処理部とを有する。第１バッファは、データブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する。前記データブロックは、データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域とを含む。前記ＧＣ処理部は、前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放する。そして、前記ＧＣ処理部は、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでＧＣを行う。
【手続補正書】
【提出日】平成30年10月17日(2018.10.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域をガベージコレクション（ＧＣ）の対象として記憶する第１バッファと、
前記記憶媒体からまとめ書き単位領域を読み出して前記第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行うガベージコレクション（ＧＣ）処理部と
を有することを特徴とするストレージ制御装置。
【請求項２】
前記ストレージを使用する情報処理装置が前記記憶媒体に書き込むデータを各データブロックに割り当てて記憶する第２バッファと、
前記第２バッファを用いて前記記憶媒体への書き込みを行う書込処理部とをさらに有し、
前記ＧＣ処理部は、前記データ詰め直し処理を前記第１バッファ内の全データブロックに対して行った後、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定することを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記ＧＣ処理部は、前記第１バッファを前記書込処理部が優先的に使用する前記第２バッファとして設定した後所定の時間が経過しても前記第１バッファのデータが前記記憶媒体に書き込まれない場合に、前記第１バッファのデータを強制的に前記記憶媒体に書き込むことを特徴とする請求項２に記載のストレージ制御装置。
【請求項４】
前記ＧＣ処理部は、無効データ率が所定の閾値以上のまとめ書き単位領域を前記記憶媒体から読み出して前記第１バッファに格納する制御と、前記記憶媒体の残容量に基づいて前記閾値を変更する制御を行うことを特徴とする請求項１、２又は３に記載のストレージ制御装置。
【請求項５】
前記ＧＣ処理部は、前記ストレージの残容量に基づいて、該ストレージの入出力処理のディレイを制御するとともに、ＧＣを並列に行う数を示す多重度及びＧＣに用いられるＣＰＵコアの数を制御することを特徴とする請求項１〜４のいずれか１つに記載のストレージ制御装置。
【請求項６】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御方法において、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
ことを特徴とするストレージ制御方法。
【請求項７】
書き込み回数に制限を有する記憶媒体を用いるストレージを制御するストレージ制御装置が備えるコンピュータで実行されるストレージ制御プログラムにおいて、
データの位置を示すオフセットと前記データの長さを示すデータ長とを含むヘッダデータを前記データ毎に対応付けられたインデックス情報で指定される位置に記憶するヘッダ領域と、前記オフセットで示す位置に前記データを記憶するペイロード領域と、を含むデータブロックが複数配置されるまとめ書き単位領域を前記記憶媒体から読み出してガベージコレクション（ＧＣ）の対象として第１バッファに格納し、前記第１バッファに記憶された前記まとめ書き単位領域内の各データブロックについて、前記ペイロード領域内のデータのうち無効なデータを記憶する範囲を解放し、前記ペイロード領域内の有効なデータを解放した前記範囲を利用して前詰めし、前記ヘッダ領域における前詰めしたデータに対応付けられたインデックス情報で指定された位置は維持したまま、当該位置に記憶するオフセットを更新するデータ詰め直し処理を行うことでガベージコレクション（ＧＣ）を行う
処理を前記コンピュータに実行させることを特徴とするストレージ制御プログラム。