(57)【要約】【課題】記憶装置での書き込み回数を低減する。【解決手段】記憶部１１は、記憶装置２０の論理記憶領域２１を分割した分割領域Ｒ１〜Ｒ３のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報１１ａを記憶する。制御部１２は、分割領域Ｒ１〜Ｒ３ごとに書き込み頻度を計測し、書き込み頻度の計測結果に基づいて、対応管理情報１１ａが示す対応関係を更新する。制御部１２は、対応関係の更新後に分割領域Ｒ１に含まれる書き込みアドレスＡＤ１への書き込みが要求されると、対応管理情報１１ａに基づいて、分割領域Ｒ１に対応付けられた識別番号「３」を、書き込みアドレスＡＤ１に対する書き込み要求に付加して記憶装置２０に送信する。【選択図】図１
2019016320.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置の論理記憶領域を分割した複数の分割領域のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報を記憶する記憶部と、制御部とを有し、
前記制御部は、
前記複数の分割領域のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第１の書き込み要求に付加して前記記憶装置に送信し、
前記複数の分割領域ごとに書き込み頻度を計測し、
書き込み頻度の計測結果に基づいて、前記対応管理情報が示す前記対応関係を更新し、
前記対応関係の更新後に前記書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第２の書き込み要求に付加して前記記憶装置に送信する、
ストレージ制御装置。
【請求項２】
前記複数の識別番号は、前記記憶装置が、書き込みデータを前記書き込みデータに付加された識別番号に応じて複数の管理領域のうち異なる管理領域に書き込むように制御するための情報であり、前記複数の管理領域のそれぞれは、前記記憶装置の物理記憶領域に含まれる、データ消去の単位となる領域である、
請求項１記載のストレージ制御装置。
【請求項３】
前記対応関係の更新は、前記記憶装置に書き込まれる累積データ量が所定量増加するたびに実行される、
請求項１または２記載のストレージ制御装置。
【請求項４】
前記複数の分割領域の数より前記複数の識別番号の数が少ない場合、前記対応関係の更新では、前記複数の識別番号の少なくとも１つを前記複数の分割領域のうち２以上の分割領域に対応付ける、
請求項１〜３のいずれか１項に記載のストレージ制御装置。
【請求項５】
前記制御部は、さらに、
前記記憶装置の物理記憶領域の空き容量が所定容量より小さくなった場合、前記記憶装置に書き込まれたデータのうち、書き込み時に前記複数の識別番号がそれぞれ付加されたデータのデータ総量を取得し、
前記複数の識別番号の中から、前記データ総量が所定基準量より大きい特定識別番号を特定し、
書き込み時に前記特定識別番号が付加されたデータについてのガベージコレクションを前記記憶装置に実行させる、
請求項１〜４のいずれか１項に記載のストレージ制御装置。
【請求項６】
前記記憶部は、さらに、前記複数の識別番号のそれぞれに対応する書き込みデータ量が登録されたデータ量管理情報を記憶し、
前記制御部は、さらに、前記記憶装置に対して、前記複数の識別番号のいずれかを付加して書き込み要求を送信するたびに、付加した識別番号に対応する前記書き込みデータ量に書き込みを要求したデータのサイズを加算し、
前記データ総量の取得では、その時点での前記複数の識別番号にそれぞれ対応する前記書き込みデータ量を、前記データ総量として前記データ量管理情報から読み出す、
請求項５記載のストレージ制御装置。
【請求項７】
前記制御部は、さらに、
前記複数の分割領域の中から、前回の前記対応関係の更新前に前記特定識別番号が対応付けられており、かつ、前回の前記対応関係の更新後に書き込みが要求されていない特定分割領域を特定し、
前記対応管理情報に基づいて、前記複数の識別番号の中から前記特定分割領域に現在対応付けられている現行識別番号を特定し、
前回の前記対応関係の更新前に前記特定分割領域に書き込まれたデータを前記記憶装置から読み出し、読み出したデータに前記現行識別番号を付加して前記記憶装置に書き込みし直す、
請求項５または６記載のストレージ制御装置。
【請求項８】
コンピュータに、
記憶装置の論理記憶領域を分割した複数の分割領域のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、前記複数の分割領域のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第１の書き込み要求に付加して前記記憶装置に送信し、
前記複数の分割領域ごとに書き込み頻度を計測し、
書き込み頻度の計測結果に基づいて、前記対応管理情報が示す前記対応関係を更新し、
前記対応関係の更新後に前記書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第２の書き込み要求に付加して前記記憶装置に送信する、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
ＳＳＤ（Solid State Drive）は、同じ論理アドレスに対して書き込みが要求された場合、元のデータを無効データとして残したまま、新たなデータを別の未書き込みページに書き込む。このため、ＳＳＤの物理記憶領域には無効データが多数残り、それらの無効データによって容量が圧迫される。そこで、物理記憶領域の空き容量を増やすために、ガベージコレクションが実行される。ガベージコレクションでは、空きが少なくなったブロックから有効データだけが別のブロックに移動され、その後、元のブロックのデータが消去（フラッシュ）される。
【０００３】
一方、ブロックに書き込まれるデータには、更新頻度が高いデータと低いデータとが混在し得る。そのため、ガベージコレクションの実行により、更新されていないデータが他のブロックに移動される場合があり得る。更新されていないデータには、対応する無効データが存在しないので、このようなデータの移動は空き容量を増やす効果に寄与せず、無駄なデータ移動と言える。このような無駄なデータ移動によってＳＳＤ内部での書き込み回数が増加することで、ＳＳＤの寿命を縮める、あるいは外部からのアクセス応答速度が低下するという問題がある。
【０００４】
このような問題に対して、ＳＳＤに書き込むデータに属性情報（ストリームＩＤ）を付加することが可能なデータストリーム制御規格が策定されている。ストリームＩＤが付加されたデータの書き込みが要求されると、ＳＳＤは、データをストリームＩＤごとに異なるブロックに書き込む。この規格を用いた場合、例えば、更新頻度の高いデータと低いデータとに異なるストリームＩＤを付加することで、更新頻度の低いデータのガベージコレクションが実行されにくくなる。その結果、ＳＳＤ内部でのデータ移動による書き込み回数を減少させることができる。
【０００５】
また、不揮発メモリに対する書き込み制御技術として、次のような技術が提案されている。
例えば、複数の論理アドレス空間を、記憶装置の複数のスペースに割り当て、記憶装置に対するコマンドと、コマンドに対応する論理アドレス空間に割り当てられたスペースの識別データとを記憶装置に送信するようにした情報処理装置が提案されている。なお、この提案において、各スペースは記憶装置内の１以上の書き込み管理エリアに割り当てられている。
【０００６】
さらに、書き込み頻度が低い第１の小論理アドレス領域の集合のデータをＳＳＤにまとめて再書き込みし、残りの第２の小論理アドレス領域の集合のデータをＳＳＤにまとめて再書き込みするようにしたストレージコントローラが提案されている。また、論理アドレスごとの書き換え回数情報に基づき、書き替え回数の少ない所定の論理アドレスに対応する不揮発メモリの物理アドレスを別の物理アドレスに入れ替え、その入れ替えに則したデータ移動を行う制御回路を備えた記憶装置が提案されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１６−１１５３５５号公報
【特許文献２】国際公開第２０１４／０４９６７８号
【特許文献３】国際公開第２００６／０６７８３９号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、上記のように、ＳＳＤに書き込むデータの更新頻度に応じたストリームＩＤを付加する場合には、次のような問題がある。
例えば、ＳＳＤの論理記憶領域を分割した分割領域ごとに、あらかじめ異なるストリームＩＤを割り当てるものとする。そして、ある分割領域に対するデータの書き込み要求をＳＳＤに送信する場合に、その分割領域に割り当てられたストリームＩＤを書き込み要求に付加して送信するものとする。この場合、ＳＳＤでは、分割領域ごとにデータが異なるブロックに書き込まれる。
【０００９】
ここで、各分割領域における更新頻度は、時間経過に伴って変動し得る。分割領域ごとの更新頻度が変動した場合には、ガベージコレクションによる書き込み回数の低減効果が十分に得られなくなる。例えば、ある分割領域のデータがあるブロックに書き込まれる状況において、当初はその分割領域の更新頻度が低かったものの、徐々に更新頻度が上昇した場合、そのブロックには更新頻度の高いデータと低いデータとが混在することになる。このため、そのブロックについてガベージコレクションが実行されたとき、有効データが移動する確率が高くなり、その結果としてＳＳＤでの書き込み回数が増加する可能性がある。
【００１０】
なお、以上の問題点は、ＳＳＤに限らず、フラッシュメモリを用いた記憶装置全般について生じる。
１つの側面では、本発明は、記憶装置での書き込み回数を低減可能なストレージ制御装置およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
１つの案では、記憶部と制御部とを有する次のようなストレージ制御装置が提供される。記憶部は、記憶装置の論理記憶領域を分割した複数の分割領域のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報を記憶する。制御部は、複数の分割領域のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、対応管理情報に基づいて、複数の識別番号のうち書き込みアドレスを含む分割領域に対応付けられた識別番号を、書き込みアドレスに対する第１の書き込み要求に付加して記憶装置に送信し、複数の分割領域ごとに書き込み頻度を計測し、書き込み頻度の計測結果に基づいて、対応管理情報が示す対応関係を更新し、対応関係の更新後に書き込みアドレスへの書き込みが要求されると、対応管理情報に基づいて、複数の識別番号のうち書き込みアドレスを含む分割領域に対応付けられた識別番号を、書き込みアドレスに対する第２の書き込み要求に付加して記憶装置に送信する。
【００１２】
また、１つの案では、上記のストレージ制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
【発明の効果】
【００１３】
１つの側面では、記憶装置での書き込み回数を低減できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ストリームＩＤを利用しない場合のＳＳＤにおける書き込み制御の比較例を示す図である。
【図４】ストリームＩＤを利用した場合のＳＳＤにおける書き込み制御の比較例を示す図である。
【図５】１つのストリームＩＤを複数の単位領域に共通に割り当てた場合のＳＳＤにおける書き込み制御の例を示す図である。
【図６】ＣＭが備える処理機能の構成例を示すブロック図である。
【図７】ストリームＩＤ管理テーブル、書き込み量管理テーブルおよびＳＳＤ書き込み量管理テーブルの構成例を示す図である。
【図８】データの書き込みが要求された場合のＦＰＧＡの処理手順の例を示すフローチャート（その１）である。
【図９】データの書き込みが要求された場合のＦＰＧＡの処理手順の例を示すフローチャート（その２）である。
【図１０】ストリームＩＤ更新処理手順の例を示すフローチャートである。
【図１１】ガベージコレクション制御処理手順の例を示すフローチャート（その１）である。
【図１２】ガベージコレクション制御処理手順の例を示すフローチャート（その２）である。
【図１３】未更新データのストリームＩＤ更新処理手順の例を示すフローチャートである。
【図１４】第１の状態において管理テーブルに登録されるデータの例を示す図である。
【図１５】第１の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。
【図１６】第２の状態において管理テーブルに登録されるデータの例を示す図である。
【図１７】第３の状態において管理テーブルに登録されるデータの例を示す図である。
【図１８】第４の状態において管理テーブルに登録されるデータの例を示す図である。
【図１９】第３、第４の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。
【図２０】第５の状態において管理テーブルに登録されるデータの例を示す図である。
【図２１】第５の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。
【図２２】第３の実施の形態に係るＣＭが備える処理機能の構成例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージ制御装置の構成例および処理例を示す図である。図１に示すストレージ制御装置１０は、記憶装置２０に接続し、記憶装置２０に対するデータの書き込みを制御する。記憶装置２０は、例えば、フラッシュメモリ、あるいはフラッシュメモリを内蔵するＳＳＤである。
【００１６】
ストレージ制御装置１０は、記憶部１１と制御部１２を有する。記憶部１１は、例えば、ストレージ制御装置１０が備える図示しないＲＡＭ（Random Access Memory）、ＨＤＤ（Hard Disk Drive）などの記憶装置の記憶領域として実現される。制御部１２は、例えば、ストレージ制御装置１０が備えるプロセッサとして実現される。
【００１７】
記憶部１１は、対応管理情報１１ａを記憶する。対応管理情報１１ａは、記憶装置２０の論理記憶領域２１を分割した複数の分割領域のそれぞれと、複数の識別番号（以下、「ＩＤ」と記載する）との対応関係を示す。本実施の形態では、例として、論理記憶領域２１は３つの分割領域Ｒ１〜Ｒ３に分割されているものとする。また、本実施の形態では、例として、ＩＤは「１」〜「３」のいずれかの値をとるものとする。
【００１８】
ＩＤ「１」〜「３」のそれぞれは、対応する分割領域での書き込み頻度の違いを示す。本実施の形態では、例として、書き込み頻度が高い分割領域ほど大きい値のＩＤが対応付けられるものとする。なお、分割領域の数が、ＩＤがとる値の数より大きい場合には、１つのＩＤの値が複数の分割領域に対応付けられ得る。
【００１９】
ここで、例えば、記憶装置２０の物理記憶領域２２は、複数の管理領域２２ａ，２２ｂ，２２ｃ，・・・に分割されている。管理領域２２ａ，２２ｂ，２２ｃ，・・・のそれぞれは、データ消去の単位となる領域であり、フラッシュメモリやＳＳＤの場合、ブロックに相当する。
【００２０】
この場合、ＩＤ「１」〜「３」は、記憶装置２０が、書き込みが要求されたデータを、そのデータに付加されたＩＤに応じて、管理領域２２ａ，２２ｂ，２２ｃ，・・・のうち異なる管理領域に書き込むように制御するための情報である。すなわち、記憶装置２０は、同じＩＤが付与されたデータの書き込みが要求されると、それらのデータを同じ管理領域に書き込む。
【００２１】
また、記憶装置２０は、例えば、ガベージコレクションを実行することができる。例えば、記憶装置２０は、残容量が所定量以下になった管理領域を選択し、その管理領域に書き込まれたデータのうちの有効データだけを、他の未使用の管理領域に移動させる。そして、有効データの読み出し元の管理領域を未使用状態に戻し、新たなデータを書き込み可能な状態にする。
【００２２】
前述のように、本実施の形態では、ＩＤ「１」〜「３」のそれぞれは、対応する分割領域での書き込み頻度の違いを示す。このため、各管理領域には、書き込み頻度が似通った分割領域に属するデータが書き込まれる。その結果、書き込み頻度の高い分割領域に属するデータが書き込まれる管理領域ほど、ガベージコレクションが実行されやすくなる。これは、無効データが多い管理領域のガベージコレクションが実行されやすくなることを意味し、それによって、物理記憶領域２２における無効データの削減効果が高まる。これとともに、他のブロックへの有効データの移動データ量が少なくなり、結果的に、ガベージコレクションに伴う記憶装置２０での書き込み回数が低減される。
【００２３】
ただし、分割領域での書き込み頻度が変動する場合には、このような効果を十分には得られない。例えば、書き込み頻度が高い状態から低い状態に変動した場合、対応する管理領域では、当初はデータの更新が頻繁に起こり、有効データの比率が小さいが、徐々にデータの更新が起こりにくくなり、有効データの比率が上昇していく。そのため、ガベージコレクションを実行したときに、移動する有効データのデータ量が多くなる可能性がある。
【００２４】
そこで、本実施の形態の制御部１２は、分割領域Ｒ１〜Ｒ３のそれぞれにおける書き込み頻度を計測し、その計測結果に基づいて、分割領域Ｒ１〜Ｒ３のそれぞれに対応付けるＩＤを動的に変化させる。以下、制御部１２の処理について説明する。
【００２５】
まず、対応管理情報１１ａにおいては、分割領域Ｒ１，Ｒ２，Ｒ３に対してそれぞれＩＤ「１」，「２」，「３」が対応付けられているとする。この場合、分割領域Ｒ３，Ｒ２，Ｒ１の順に書き込み頻度が高いと判定されている。なお、この対応関係は、例えば、分割領域Ｒ１〜Ｒ３のそれぞれにおける書き込み頻度の実測値に基づいて決定されてもよいし、書き込み頻度の予測に基づいて決定されてもよい。
【００２６】
この状態において、制御部１２は、分割領域Ｒ１〜Ｒ３のいずれかに含まれる書き込みアドレス（論理アドレス）への書き込みが要求されると、対応管理情報１１ａに基づいて、その書き込みアドレスを含む分割領域に対応付けられたＩＤを特定する。そして、制御部１２は、その書き込みアドレスに対する書き込み要求に、特定したＩＤを付加して記憶装置２０に送信する（ステップＳ１）。
【００２７】
例えば、分割領域Ｒ１の書き込みアドレスＡＤ１に対してデータＤ１ａの書き込みが要求されたとする。この場合、制御部１２は、対応管理情報１１ａから、分割領域Ｒ１に対応付けられたＩＤ「１」を抽出する。制御部１２は、書き込みアドレスＡＤ１に対してデータＤ１ａを書き込むための書き込み要求に、ＩＤ「１」を付加して記憶装置２０に送信する。記憶装置２０は、例えば、付加されたＩＤ「１」に応じて、データＤ１ａを管理領域２２ａに書き込む。
【００２８】
また、例えば、分割領域Ｒ３の書き込みアドレスＡＤ２に対してデータＤ２ａの書き込みが要求されたとする。この場合、制御部１２は、対応管理情報１１ａから、分割領域Ｒ３に対応付けられたＩＤ「３」を抽出する。制御部１２は、書き込みアドレスＡＤ２に対してデータＤ２ａを書き込むための書き込み要求に、ＩＤ「３」を付加して記憶装置２０に送信する。記憶装置２０は、例えば、付加されたＩＤ「３」に応じて、データＤ２ａを管理領域２２ａとは別の管理領域２２ｃに書き込む。
【００２９】
次に、制御部１２は、分割領域Ｒ１〜Ｒ３のそれぞれにおける書き込み頻度を計測する（ステップＳ２）。そして、制御部１２は、書き込み頻度の計測結果に基づいて、対応管理情報１１ａが示す対応関係を更新する（ステップＳ３）。
【００３０】
ここで、例えば、分割領域Ｒ１，Ｒ２，Ｒ３の順に書き込み頻度が高いと計測されたとする。すなわち、分割領域Ｒ１の書き込み頻度が増加し、分割領域Ｒ３の書き込み頻度が低下したとする。この場合、制御部１２は、分割領域Ｒ１，Ｒ２，Ｒ３に対してそれぞれＩＤ「３」，「２」，「１」が対応付けられるように、対応管理情報１１ａを更新する。
【００３１】
次に、対応管理情報１１ａの更新後に、分割領域Ｒ１〜Ｒ３のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、制御部１２は、更新された対応管理情報１１ａに基づいて、その書き込みアドレスを含む分割領域に対応付けられたＩＤを特定する。そして、制御部１２は、その書き込みアドレスに対する書き込み要求に、特定したＩＤを付加して記憶装置２０に送信する（ステップＳ４）。
【００３２】
例えば、分割領域Ｒ１の書き込みアドレスＡＤ１に対して、データＤ１ａを更新するデータＤ１ｂの書き込みが要求されたとする。この場合、制御部１２は、対応管理情報１１ａから、分割領域Ｒ１に対応付けられたＩＤ「３」を抽出する。制御部１２は、書き込みアドレスＡＤ１に対してデータＤ１ｂを書き込むための書き込み要求に、ＩＤ「３」を付加して記憶装置２０に送信する。記憶装置２０は、付加されたＩＤ「３」に応じて、データＤ１ｂを管理領域２２ｃに書き込む。
【００３３】
また、例えば、分割領域Ｒ３の書き込みアドレスＡＤ２に対してデータＤ２ａを更新するデータＤ２ｂの書き込みが要求されたとする。この場合、制御部１２は、対応管理情報１１ａから、分割領域Ｒ３に対応付けられたＩＤ「１」を抽出する。制御部１２は、書き込みアドレスＡＤ２に対してデータＤ２ｂを書き込むための書き込み要求に、ＩＤ「１」を付加して記憶装置２０に送信する。記憶装置２０は、付加されたＩＤ「１」に応じて、データＤ２ｂを管理領域２２ａに書き込む。
【００３４】
これにより、分割領域Ｒ１，Ｒ３において書き込み頻度が変動したにもかかわらず、管理領域２２ａには書き込み頻度の低い分割領域に属するデータが書き込まれ、管理領域２２ｃには書き込み頻度の高い分割領域に属するデータが書き込まれる。その結果、記憶装置２０では、管理領域２２ｃにおける有効データの比率が上昇しにくくなり、しかも、管理領域２２ａより管理領域２２ｃの方が、ガベージコレクションが実行されやすくなる。したがって、ガベージコレクションを実行したときに、移動する有効データのデータ量が低減され、その結果として、記憶装置２０における書き込み回数を低減できる。
【００３５】
〔第２の実施の形態〕
次に、ストレージ制御装置の書き込み制御対象としてＳＳＤが用いられたストレージシステムの例について説明する。
【００３６】
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、ストレージ装置５０とホスト装置３００を含む。ストレージ装置５０は、ＣＭ（Controller Module）１００とＤＥ（Drive Enclosure）２００を有する。ホスト装置３００は、例えば、ファイバチャネル（ＦＣ：Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを用いたＳＡＮ（Storage Area Network）を介して、ＣＭ１００に接続されている。
【００３７】
ＣＭ１００は、ホスト装置３００からの要求に応じて、ＤＥ２００に搭載された記憶装置へのアクセスを制御するストレージ制御装置である。ＤＥ２００には、ホスト装置３００からのアクセス対象となる記憶装置として、ＳＳＤ２０１，２０１ａ，２０１ｂ，・・・が搭載されている。なお、本実施の形態では、ＤＥ２００には、ホスト装置３００からのアクセス対象となる記憶装置として少なくとも１台のＳＳＤが搭載されていればよく、それ以外の記憶装置は、ＨＤＤなどの他の種類の不揮発性記憶装置であってもよい。
【００３８】
ホスト装置３００は、業務処理などの所定の処理に伴って、ＣＭ１００を介してＤＥ２００内の記憶装置にアクセスする。より具体的には、ＣＭ１００によって、ＤＥ２００内の記憶装置を用いた論理ボリュームが提供され、ホスト装置３００は、その論理ボリュームに対するアクセスをＣＭ１００に要求することで、ＤＥ２００内の記憶装置にアクセスする。なお、ＣＭ１００は、複数の論理ボリュームをホスト装置３００に提供してもよい。また、ＣＭ１００には複数のホスト装置３００が接続され、１以上の論理ボリュームに対して１以上のホスト装置３００からアクセス可能になっていてもよい。
【００３９】
以下、ＣＭ１００のハードウェア構成例について説明する。
ＣＭ１００は、ＣＰＵ（Central Processing Unit）１０１、ＲＡＭ１０２、ＳＳＤ１０３、ＣＡ（Channel Adapter）１０４、ＩＯＣ（Input Output Controller）１０５およびＦＰＧＡ（Field Programmable Gate Array）１０６を有する。
【００４０】
ＣＰＵ１０１は、ＣＭ１００全体を統括的に制御する。ＣＰＵ１０１は、例えば、マルチプロセッサであってもよい。ＲＡＭ１０２は、ＣＭ１００の主記憶装置として使用される。ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＳＳＤ１０３は、ＣＭ１００の補助記憶装置として使用される。ＳＳＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＨＤＤなどの他の種類の不揮発性記憶装置が用いられてもよい。
【００４１】
ＣＡ１０４は、ホスト装置３００と通信するためのインタフェースである。ＩＯＣ１０５は、ＤＥ２００内のＳＳＤ２０１，２０１ａ，２０１ｂ，・・・と通信するためのインタフェースである。本実施の形態では例として、ＩＯＣ１０５は、ＳＡＳインタフェースであるものとする。この場合、例えば、ＤＥ２００はＳＡＳエクスパンダを備えており、ＩＯＣ１０５は、ＳＡＳエクスパンダを介してＳＳＤ２０１，２０１ａ，２０１ｂ，・・・と通信する。
【００４２】
ＦＰＧＡ１０６は、ＣＰＵ１０１からＩＯＣ１０５に対して、ＤＥ２００内のＳＳＤに対する書き込みコマンドの出力が要求された場合に、その書き込みコマンドをＩＯＣ１０５から取得する。ＦＰＧＡ１０６は、書き込みデータに付加するストリームＩＤを決定し、そのストリームＩＤを付加した書き込みコマンドをＩＯＣ１０５に送信させる。
【００４３】
ストリームＩＤとは、書き込みコマンドに含まれる書き込みデータの属性を示す識別番号であり、ストレージインテリジェンス（Storage Intelligence）仕様において規定されている。ＳＳＤは、例えば、同一のストリームＩＤが付加された書き込みデータを同一のブロックに書き込むように制御する。
【００４４】
ＦＰＧＡ１０６は、書き込みデータがどの単位領域に属しているかを判別する。単位領域とは、ホスト装置３００が認識し、ホスト装置３００からのアクセス対象となっている論理記憶領域の全体を、何らかの条件にしたがって区分した領域である。「書き込みデータが単位領域に属する」とは、その書き込みデータを含む書き込みコマンドが、その単位領域に対するホスト装置３００からの書き込み要求に応じて出力されたことを指す。
【００４５】
ＦＰＧＡ１０６は、単位領域ごとに書き込み頻度を計測する。そして、ＦＰＧＡ１０６は、書き込みデータが属する単位領域における書き込み頻度に応じたストリームＩＤを決定し、書き込みデータに付加すべきストリームＩＤとしてＩＯＣ１０５に通知する。さらに、ＦＰＧＡ１０６は、単位領域ごとの書き込み頻度の変化に応じて、同じ単位領域に属する書き込みデータに付加するストリームＩＤを動的に変化させる。
【００４６】
なお、ＦＰＧＡ１０６は、プロセッサ１０６ａとメモリ１０６ｂを有する。プロセッサ１０６ａは、例えば、ＣＰＵやＤＳＰ（Digital Signal Processor）など、演算回路がユニット化された回路として実現されてもよいし、多数の論理回路の集合体であってもよい。また、プロセッサ１０６ａは、ユニット化された回路と複数の論理回路の両方を含んでいてもよい。
【００４７】
メモリ１０６ｂは、例えば、ＤＲＡＭ（Dynamic RAM）やＳＲＡＭ（Static RAM）など、記憶素子がユニット化されたメモリ回路として実現されてもよいし、フリップフロップなどの記憶素子の集合体であってもよい。また、メモリ１０６ｂは、ユニット化されたメモリ回路と複数の記憶素子の両方を含んでいてもよい。また、メモリ１０６ｂの少なくとも一部は、ＦＰＧＡ１０６の外部に接続されていてもよい。
【００４８】
ここで、図３〜図５を用いて、ＳＳＤにおける書き込み制御の比較例について説明する。
まず、図３は、ストリームＩＤを利用しない場合のＳＳＤにおける書き込み制御の比較例を示す図である。図３に示すＳＳＤ４００は、ブロック４０１〜４０６を有する。ブロック４０１〜４０６は、書き込まれたデータが一度に消去される最小の領域である。
【００４９】
このようなＳＳＤ４００に対して、データＡ１−１，Ｂ１−１，Ｃ１−１，Ｂ１−２，Ｃ２−１，Ｃ２−２，Ｂ１−３，Ｃ２−３の順に書き込みが要求されたものとする。ここで、データＢ１−２，Ｂ１−３は、それぞれデータＢ１−１，Ｂ１−２を更新するための更新データである。また、データＣ２−２，Ｃ２−３は、それぞれデータＣ２−１，Ｃ２−２を更新するための更新データである。換言すると、データＢ１−１，Ｂ１−２，Ｂ１−３は、ＳＳＤ４００上の同じ論理アドレスに対して書き込みが要求されたデータである。また、データＣ２−１，Ｃ２−２，Ｃ２−３も、ＳＳＤ４００上の同じ論理アドレスに対して書き込みが要求されたデータである。
【００５０】
ＳＳＤ４００が備える図示しないコントローラは、書き込みが要求されたデータを空いているブロックに順番に書き込んでいく。例えば、図３の上側に示すように、コントローラは、データＡ１−１，Ｂ１−１，Ｃ１−１，Ｂ１−２をブロック４０１に書き込み、データＣ２−１，Ｃ２−２，Ｂ１−３，Ｃ２−３をブロック４０２に書き込む。ＳＳＤの物理記憶領域ではデータの上書きが不可能なので、更新データは更新前のデータとは別の領域に書き込まれ、更新前のデータは無効データとして物理記憶領域上に残る。
【００５１】
また、コントローラは、例えば、ＳＳＤ４００の物理記憶領域の残容量が所定量を下回ると、空き領域を拡大するために有効データだけを別のブロックに寄せ集めるガベージコレクションを実行する。例えば、図３の下側に示すように、コントローラは、空き領域がなくなったブロック４０１，４０２についてのガベージコレクションを実行する。
【００５２】
具体的には、コントローラは、ブロック４０１に書き込まれたデータのうち、有効データであるデータＡ１−１，Ｃ１−１，Ｂ１−２だけを別のブロック４０４に移動させる。また、コントローラは、ブロック４０２に書き込まれたデータのうち、有効データであるデータＢ１−３，Ｃ２−３だけを別のブロック４０５に移動させる。これにより、ブロック４０１，４０２に含まれるデータがすべて無効データとなるので、コントローラは、ブロック４０１，４０２をフラッシュし、新たなデータを書き込み可能な状態にする。
【００５３】
このようなガベージコレクションの実行により、無効データが消去される分だけＳＳＤ４００の残容量を増やすことができる。しかしながら、上記方法では、同じブロックに更新頻度が高いデータと更新されていないデータとが混在する場合、後者のデータも他のブロックに移動する。データが更新されていない場合には、そのデータに対応する無効データが存在しないので、ガベージコレクションによってそのデータが他のブロックに移動しても空き領域は拡大しない。そのため、本来は更新されていないデータを移動させる必要はない。
【００５４】
図３の例では、ブロック４０１に書き込まれたデータＢ１−１，Ｂ１−２は、１回更新されているので、ガベージコレクションにより無効なデータＢ１−１を削除し、有効なデータＢ１−２だけを残すことができる。しかし、同じブロック４０１に書き込まれたデータＡ−１は、更新されていないので、対応する無効データが存在しない。このため、データＡ−１は、空き領域の拡大に寄与しないにもかかわらず、ブロック４０４に移動することになる。
【００５５】
このように、本来は移動が不要なデータが他のブロックに移動して書き込まれることで、書き込みデータ量が増加し、ＳＳＤの寿命を短縮させてしまう。また、ガベージコレクションにおける書き込みデータ量の増加により、外部からのＳＳＤに対するアクセス速度が低下してしまう。
【００５６】
図４は、ストリームＩＤを利用した場合のＳＳＤにおける書き込み制御の比較例を示す図である。上記の問題点に対して、データの更新頻度に応じたストリームＩＤを書き込みデータに付与する方法が考えられる。例えば、データＡ１−１は最も更新頻度の低い単位領域に属すると判定されて、データＡ１−１に対してあるストリームＩＤが付加される。また、データＢ１−１，Ｂ１−２，Ｂ１−３は更新頻度が中程度の単位領域に属すると判定されて、データＢ１−１，Ｂ１−２，Ｂ１−３に対してデータＡ１−１とは別のストリームＩＤが付加される。さらに、データＣ１−１，Ｃ２−１，Ｃ２−２，Ｃ２−３は更新頻度が最も高い単位領域に属すると判定されて、データＣ１−１，Ｃ２−１，Ｃ２−２，Ｃ２−３に対してデータＡ１−１，Ｂ１−１，Ｂ１−２，Ｂ１−３とはさらに別のストリームＩＤが付加される。
【００５７】
このようなストリームＩＤが付加された状態で、図３の場合と同様にＳＳＤ４１０に対して、データＡ１−１，Ｂ１−１，Ｃ１−１，Ｂ１−２，Ｃ２−１，Ｃ２−２，Ｂ１−３，Ｃ２−３の順に書き込みが要求されたものとする。なお、ＳＳＤ４１０は、ブロック４１１〜４１６を有するものとする。この場合、ＳＳＤ４１０に搭載された図示しないコントローラは、書き込みが要求されたデータを、ストリームＩＤごとに別のブロックに書き込む。例えば図４の上側に示すように、コントローラは、データＡ１−１をブロック４１１に書き込み、データＢ１−１，Ｂ１−２，Ｂ１−３をブロック４１２に書き込み、データＣ１−１，Ｃ２−１，Ｃ２−２，Ｃ２−３をブロック４１３に書き込む。
【００５８】
また、コントローラは、例えば、ＳＳＤ４１０の物理記憶領域の残容量が所定量を下回ると、図４の下側に示すように、空き領域の少ないブロック４１３についてのガベージコレクションを実行する。すなわち、コントローラは、ブロック４１３に書き込まれたデータのうち、有効データであるデータＣ１−１，Ｃ２−３だけを別のブロック４１６に移動させる。そして、コントローラは、ブロック４１３をフラッシュする。
【００５９】
このような処理により、更新頻度の高い単位領域に属するデータが格納されたブロックだけが、ガベージコレクションの実行対象となり、更新頻度が低い単位領域に属するデータＡ１−１の移動が行われなくなる。したがって、移動の不要なデータが他のブロックに書き込まれる可能性が低くなり、ガベージコレクションの実行時における書き込みデータ量を減少させることができる。
【００６０】
ところで、ストリームＩＤを利用する方法では、付与可能なストリームＩＤの数が少ないことから、１つのストリームＩＤを複数の単位領域に共通に割り当てなければならない場合がある。例えば、単位領域として論理ボリュームを適用した場合、ストレージ装置には多数の論理ボリュームが設定され得ることから、１つのストリームＩＤを複数の論理ボリュームに共通に割り当てるというケースが考えられる。
【００６１】
図５は、１つのストリームＩＤを複数の単位領域に共通に割り当てた場合のＳＳＤにおける書き込み制御の例を示す図である。図５に示すＳＳＤ４２０は、ブロック４２１〜４２９を有するものとする。また、単位領域ＡにあるストリームＩＤが、単位領域Ｂ，Ｃに別のストリームＩＤが、単位領域Ｄ，Ｅにさらに別のストリームＩＤが、事前に割り当てられているものとする。この例では、単位領域Ａより単位領域Ｂ，Ｃの方が更新頻度が高いと見込まれ、単位領域Ｂ，Ｃより単位領域Ｄ，Ｅの方が更新頻度が高いと見込まれているものとする。
【００６２】
このような状態で、単位領域Ａに属するデータＡ１−１、単位領域Ｂに属するデータＢ１−１，Ｂ２−１、単位領域Ｃに属するデータＣ１−１、単位領域Ｄに属するデータＤ１−１，Ｄ１−２，Ｄ１−３、単位領域Ｅに属するデータＥ１−１，Ｅ１−２，Ｅ１−３が、ＳＳＤ４２０に書き込まれたものとする。ＳＳＤ４２０は、各データに付加されたストリームＩＤに基づいて、各データの書き込み先ブロックを振り分ける。例えば、図５の上側に示すように、データＡ１−１はブロック４２１に書き込まれ、データＢ１−１，Ｂ２−１，Ｃ１−１はブロック４２２に書き込まれ、データＤ１−１，Ｄ１−２，Ｄ１−３，Ｅ１−１，Ｅ１−２，Ｅ１−３はブロック４２３に書き込まれる。
【００６３】
このような書き込みにより、ブロック４２３の空き領域がなくなり、ブロック４２３についてガベージコレクションが実行される。これにより、データＤ１−３，Ｅ１−３がブロック４２６に移動され、ブロック４２３がフラッシュされる。図５の上側は、このときの状態を示している。
【００６４】
ここまでの状態では、同じストリームＩＤが割り当てられた単位領域Ｄ，Ｅの更新頻度は、ほぼ同じとなっている。しかし、あらかじめ１つのストリームＩＤが割り当てられた複数の単位領域間でも、更新頻度が時間経過に伴って変化する場合があり得る。例えば、図５の上側の状態から、さらに単位領域Ｅに属するデータＥ２−１，Ｅ１−４，Ｅ２−２，Ｅ１−５がＳＳＤ４２０に書き込まれたものとする。しかし、単位領域Ｄに対する書き込みは発生せず、単位領域Ｅと比較して単位領域Ｄでの更新頻度が低下している。
【００６５】
新たにＳＳＤ４２０に書き込まれた上記データは、ブロック４２６に書き込まれる。その結果、ブロック４２６の空き領域がなくなり、ブロック４２６についてのガベージコレクションが実行される。例えば、図５の下側に示すように、データＤ１−３，Ｅ１−５，Ｅ２−２がブロック４２９に移動され、ブロック４２６がフラッシュされる。このガベージコレクションでは、更新されていないデータＤ１−３が移動しており、無駄なデータ移動が発生している。
【００６６】
このように、各単位領域に対してあらかじめストリームＩＤを固定的に付加する方法では、更新頻度が当初の見込みから変化した単位領域が現れた場合、書き込みデータ量の低減効果を十分に得ることができないという問題がある。そこで、本実施の形態では、ＣＭ１００のＦＰＧＡ１０６により、単位領域ごとに更新頻度が計測され、更新頻度の時間的変化に応じて単位領域に割り当てるストリームＩＤが動的に変更される。これにより、ＳＳＤの内部におけるガベージコレクションによる移動対象データを最適化し、移動による書き込みデータ量を低減する。
【００６７】
なお、図５では、１つのストリームＩＤが複数の単位領域に割り当てられるケースについて説明した。しかし、１つのストリームＩＤが１つの単位領域に割り当てられるケースでも、同様に、単位領域における更新頻度が時間経過に伴って変化することで、ガベージコレクションによるデータ移動量の低減効果が十分得られなくなる。例えば、ある単位領域に属するデータがあるブロックに書き込まれる状況において、当初はその単位領域の更新頻度が低かったものの、その後に更新頻度が上昇した場合、そのブロックには更新頻度が高いデータと低いデータとが混在することになる。このような状況でそのブロックについてガベージコレクションが実行されると、多くの有効データが別のブロックに移動する可能性があり、その場合、書き込みデータ量の低減効果が十分得られなくなる。
【００６８】
本実施の形態では、更新頻度の時間的変化に応じて単位領域に割り当てるストリームＩＤが動的に変更されることで、更新頻度の高いデータを同じブロックに集中させることができる。このため、１つのストリームＩＤが１つの単位領域に割り当てられる場合であっても、ガベージコレクションによるデータ移動量の低減効果を得ることができる。
【００６９】
以下、本実施の形態に係るＣＭ１００の処理の詳細について説明する。以下の説明では例として、単位領域は、ＣＭ１００に設定される論理ボリュームであるものとする。
図６は、ＣＭが備える処理機能の構成例を示すブロック図である。ＣＭ１００は、ホストＩＯ制御部１０１ａを有する。ホストＩＯ制御部１０１ａの処理は、ＣＰＵ１０１が所定のアプリケーションプログラムを実行することで実現される。
【００７０】
ホストＩＯ制御部１０１ａは、ホスト装置３００から論理ボリュームに対するアクセス要求を受け付ける。このとき、ホストＩＯ制御部１０１ａは、アクセス先アドレスとして、論理ボリュームを識別するＬＵＮ（Logical Unit Number）と、論理ボリューム上のアドレスを示すＬＢＡ（Logical Block Address）とを受け付ける。
【００７１】
各論理ボリュームのアドレス空間は、ＤＥ２００内のＳＳＤ２０１，２０１ａ，２０１ｂ，・・・の論理アドレス空間に対応付けられている。ホストＩＯ制御部１０１ａは、アクセス先を示すＬＵＮおよびＬＢＡを、対応するＳＳＤを識別するディスクＩＤとそのＳＳＤ上の論理アドレスとに変換する。ホストＩＯ制御部１０１ａは、アクセス先としてディスクＩＤとＳＳＤ上の論理アドレスとが指定されたコマンドを発行するように、ＩＯＣ１０５に要求する。ここで、ホストＩＯ制御部１０１ａは、書き込みコマンドの発行を要求する場合には、変換前のＬＵＮおよびＬＢＡもＩＯＣ１０５に通知する。
【００７２】
ＩＯＣ１０５は、ホストＩＯ制御部１０１ａから読み出しコマンドの発行を要求された場合、読み出しアドレスとしてディスクＩＤとＳＳＤ上の論理アドレスとを指定した読み出しコマンドをＤＥ２００内の読み出し元ＳＳＤに送信する。ＩＯＣ１０５は、読み出しコマンドに応じて読み出し元ＳＳＤから返信された読み出しデータを受信して、ホストＩＯ制御部１０１ａに転送する。
【００７３】
一方、ＩＯＣ１０５は、ホストＩＯ制御部１０１ａから書き込みコマンドの発行を要求された場合、生成した書き込みコマンドをまずＦＰＧＡ１０６に受け渡す。このとき、ＩＯＣ１０５は、ホストＩＯ制御部１０１ａから通知されたＬＵＮおよびＬＢＡを、書き込みコマンドに付加してＦＰＧＡ１０６に受け渡す。ＦＰＧＡ１０６からは、ストリームＩＤが付加された書き込みコマンドが受け渡され、ＩＯＣ１０５は、その書き込みコマンドをＤＥ２００内の書き込み先ＳＳＤに送信する。
【００７４】
次に、ＦＰＧＡ１０６が備える処理機能について説明する。
ＦＰＧＡ１０６は、記憶部１１０、コマンド受信処理部１２１、コマンド送信処理部１２２、ストリームＩＤ設定部１２３およびガベージコレクション（ＧＣ）制御部１２４を有する。
【００７５】
記憶部１１０は、ＦＰＧＡ１０６が備えるメモリ１０６ｂの記憶領域によって実現される。記憶部１１０には、ストリームＩＤ管理テーブル１１１、書き込み量管理テーブル１１２、ＳＳＤ書き込み量管理テーブル１１３および単位領域設定テーブル１１４が記憶される。
【００７６】
図７は、ストリームＩＤ管理テーブル、書き込み量管理テーブルおよびＳＳＤ書き込み量管理テーブルの構成例を示す図である。
ストリームＩＤ管理テーブル１１１は、ＤＥ２００に搭載されたＳＳＤ２０１，２０１ａ，２０１ｂ，・・・のそれぞれについて個別に作成され、記憶される。ストリームＩＤ管理テーブル１１１は、主に、ＳＳＤに対する単位領域ごとの書き込み回数や書き込みデータ量、および、各単位領域に対して設定されたストリームＩＤを保持するためのテーブルである。ストリームＩＤ管理テーブル１１１は、単位領域ＩＤ、書き込みデータ量、書き込み回数、ストリームＩＤ、ＧＣ実行フラグ、ＩＤステータスおよび書き込み管理ビットマップの各項目を有する。
【００７７】
単位領域ＩＤの項目には、単位領域を識別するための識別番号が登録される。書き込みデータ量の項目には、単位領域に対して書き込まれた書き込みデータのデータ量が登録される。書き込み回数の項目には、単位領域に割り当てられるストリームＩＤの更新処理後に、その単位領域に対してデータの書き込みが行われた回数が登録される。
【００７８】
ストリームＩＤの項目には、対応する単位領域に割り当てられたストリームＩＤが登録される。ＧＣ実行フラグの項目には、ＦＰＧＡ１０６からの要求により、対応する単位領域についてのガベージコレクションが実行済みかを示すフラグ情報が登録される。
【００７９】
ＩＤステータスの項目には、同じレコードに登録されたストリームＩＤのステータスを示す情報が登録される。ＩＤステータスの項目には、「現行ＩＤ」、「旧ＩＤ」、「無効ＩＤ」のいずれかが登録される。「現行ＩＤ」は、登録されたストリームＩＤが、直近の更新処理によって決定されたものであることを示す。「旧ＩＤ」は、登録されたストリームＩＤが、直近の更新処理の実行前に決定されたものであることを示す。「無効ＩＤ」は、登録されたストリームＩＤが付加されたＳＳＤ上のデータが、すべて無効化されていることを示す。なお、後述するように、ストリームＩＤ管理テーブル１１１には、同じストリームＩＤが登録されているものの、互いに異なるＩＤステータスが登録されている複数のレコードが登録される場合がある。
【００８０】
書き込み管理ビットマップの項目には、単位領域上の各ＬＢＡに対応するビットを有するビットマップデータが登録される。各ビット値の初期値は「０」とされ、単位領域に対する書き込みが要求されると、その書き込み先のＬＢＡに対応するビット値が「１」に更新される。これにより、ビットマップデータは、単位領域上のＬＢＡのうち１回以上データが書き込まれたＬＢＡを管理する。
【００８１】
なお、後述するように、ストリームＩＤ管理テーブル１１１では、ストリームＩＤの更新処理が実行されるたびに新たなレコードが追加される。このため、書き込み管理ビットマップの項目に登録されるビットマップデータは、ストリームＩＤの更新処理後にデータが書き込まれたＬＢＡを管理する。また、このビットマップデータは、ストリームＩＤの更新処理後に、単位領域ごとに書き込まれた有効データ量を計算するために用いられる。
【００８２】
書き込み量管理テーブル１１２は、ＤＥ２００に搭載されたＳＳＤ２０１，２０１ａ，２０１ｂ，・・・のそれぞれについて個別に作成され、記憶される。書き込み量管理テーブル１１２は、ストリームＩＤ、書き込みデータ量の各項目を有する。ストリームＩＤの項目には、現在設定されているストリームＩＤが登録される。書き込みデータ量の項目には、ストリームＩＤの更新処理が実行された後に、対応するストリームＩＤが割り当てられているすべての単位領域に書き込まれた書き込みデータの累積データ量が登録される。
【００８３】
ＳＳＤ書き込み量管理テーブル１１３は、ＳＳＤ  ＩＤおよび書き込みデータ増加量の各項目を有する。ＳＳＤ  ＩＤの項目には、ＤＥ２００に搭載されたＳＳＤ２０１，２０１ａ，２０１ｂ，・・・のそれぞれを識別するための識別番号が登録される。書き込みデータ増加量の項目には、対応するＳＳＤに書き込まれた書き込みデータの累積データ量が登録される。書き込みデータ増加量は、一定量に達すると「０」にリセットされる。このため、書き込みデータ増加量は、リセットタイミング後にＳＳＤに書き込まれたデータの増加量を示す。
【００８４】
以下、図６に戻って説明を続ける。
単位領域設定テーブル１１４は、単位領域ごとに作成されて記憶される。単位領域設定テーブル１１４は、単位領域、すなわち論理ボリューム上のＬＢＡと、ＳＳＤ上の論理アドレスとの対応関係を保持する。単位領域設定テーブル１１４は、例えば、新たな論理ボリュームがＣＭ１００に設定されるたびに、ＣＰＵ１０１の処理によってＦＰＧＡ１０６の記憶部１１０に登録される。そして、単位領域設定テーブル１１４は、ＦＰＧＡ１０６が単位領域に書き込まれたデータについてのガベージコレクションの実行をＳＳＤに要求する際に、単位領域上のＬＢＡをＳＳＤ上の論理アドレスに変換するために用いられる。
【００８５】
なお、ＦＰＧＡ１０６は、ストリームＩＤ管理テーブル１１１を用いて、書き込みデータの累積データ量や書き込み回数、書き込まれた有効データ量を単位領域ごとに管理する。ここで、前述のように、単位領域に対応する論理ボリュームの論理アドレス空間に対して、ＳＳＤの論理アドレス空間が割り当てられている。このため、単位領域ごとに上記各情報を管理することは、単位領域に割り当てられているＳＳＤの論理アドレス領域ごとに上記各情報を管理することと実質的に等価である。
【００８６】
このため、ＦＰＧＡ１０６は、例えば、単位領域ごとの上記情報の管理を、対応するＳＳＤの論理アドレス領域ごとに管理してもよい。この場合、例えば、ホストＩＯ制御部１０１ａからＩＯＣ１０５を介してＦＰＧＡ１０６に対して、ＬＵＮおよびＬＢＡが通知されなくてもよい。その代わり、ＦＰＧＡ１０６は、例えば、単位領域設定テーブル１１４を参照することで、書き込みコマンドに含まれるＳＳＤの論理アドレスがどの単位領域に属するかを判別できる。また、ストリームＩＤ管理テーブル１１１の書き込み管理ビットマップに含まれる各ビットは、単位領域（論理ボリューム）の各ＬＢＡではなく、ＳＳＤの各論理アドレスに対応付けられていてもよい。
【００８７】
コマンド受信処理部１２１、コマンド送信処理部１２２、ストリームＩＤ設定部１２３およびガベージコレクション（ＧＣ）制御部１２４の処理は、ＦＰＧＡ１０６が備えるプロセッサ１０６ａによって実現される。
【００８８】
コマンド受信処理部１２１は、ＩＯＣ１０５がホストＩＯ制御部１０１ａから書き込みコマンドの送信を要求された場合に、書き込みコマンドを、ホストＩＯ制御部１０１ａから通知されたＬＵＮおよびＬＢＡとともに取得する。コマンド受信処理部１２１は、ＬＵＮから書き込みデータが属する論理領域を判別し、ストリームＩＤ管理テーブル１１１に登録された該当論理領域に対応する書き込みデータ量、書き込み回数および書き込み管理ビットマップを更新する。また、コマンド受信処理部１２１は、書き込みデータのサイズに基づいて、書き込み量管理テーブル１１２およびＳＳＤ書き込み量管理テーブル１１３を更新する。
【００８９】
コマンド送信処理部１２２は、コマンド受信処理部１２１によって判別された論理領域に割り当てられたストリームＩＤを、ストリームＩＤ管理テーブル１１１から取得する。コマンド送信処理部１２２は、取得したストリームＩＤをコマンド受信処理部１２１が取得した書き込みコマンドに付加してＩＯＣ１０５に受け渡し、その書き込みコマンドの送信を要求する。
【００９０】
ストリームＩＤ設定部１２３は、ＳＳＤ書き込み量管理テーブル１１３に基づき、あるＳＳＤでの書き込みデータ増加量が一定量に達するたびに、そのＳＳＤについて、各単位領域に割り当てるストリームＩＤを更新する。その際、ストリームＩＤ設定部１２３は、ストリームＩＤ管理テーブル１１１を参照し、各単位領域における書き込み回数に基づいて、各単位領域に割り当てるストリームＩＤを更新する。これにより、各単位領域に対するストリームＩＤの割り当てが適正化される。
【００９１】
この更新処理によって、ストリームＩＤ管理テーブル１１１において単位領域に対応付けられたストリームＩＤが更新される。その後、単位領域に対するデータの書き込みが要求され、コマンド送信処理部１２２の制御により、更新後のストリームＩＤを付加した書き込みコマンドがＩＯＣ１０５から送信されることで、ＳＳＤにおける書き込み先ブロックの振り分けが適正化されていく。その結果、ＳＳＤ自身の判断によるガベージコレクション対象のデータが最適化されていき、ガベージコレクションに伴う無駄なデータの書き込み量が削減されていく。
【００９２】
ＧＣ制御部１２４は、あるＳＳＤにおける物理記憶領域の空き領域サイズが所定サイズを下回った場合に、そのＳＳＤに書き込まれているデータのうち、所定条件を満たすストリームＩＤが付加されたデータについて、ＳＳＤにガベージコレクションを実行させる。具体的には、ＧＣ制御部１２４は、書き込み量管理テーブル１１２を参照し、書き込みデータ量が所定量を超えたストリームＩＤが存在する場合、そのストリームＩＤが付加されたデータについてガベージコレクションを実行させる。
【００９３】
次に、ＦＰＧＡ１０６の処理についてフローチャートを用いて説明する。以下の説明では、例として、ＳＳＤ２０１に対するデータの書き込み制御について説明する。また、ＳＳＤ２０１のユーザ容量（論理記憶領域の容量）を、４００ＧＢとする。さらに、ストリームＩＤとして「１」〜「３」の３段階の値が設定され、「１」、「２」、「３」の順に書き込み回数が多い単位領域に割り当てられるものとする。
【００９４】
まず、図８、図９は、データの書き込みが要求された場合のＦＰＧＡの処理手順の例を示すフローチャートである。
［ステップＳ１１］ホストＩＯ制御部１０１ａは、ホスト装置３００から論理ボリュームに対するデータの書き込み要求を受信する。ホストＩＯ制御部１０１ａは、受信した書き込み要求に応じて、ＩＯＣ１０５に対してＳＳＤ２０１に対する書き込みコマンドの発行を要求する。このとき、ホストＩＯ制御部１０１ａは、ＩＯＣ１０５に対して、ホスト装置３００から書き込み先として指定されたＬＵＮおよびＬＢＡも通知する。ＩＯＣ１０５は、書き込み先のＳＳＤの論理アドレス、書き込みデータのデータ長を含む書き込みコマンドを生成し、通知されたＬＵＮおよびＬＢＡとともにＦＰＧＡ１０６に受け渡す。コマンド受信処理部１２１は、書き込みコマンドをＬＵＮおよびＬＢＡとともに受信する。
【００９５】
［ステップＳ１２］コマンド受信処理部１２１は、受信した情報に基づいて、書き込み先の単位領域を特定する。具体的には、コマンド受信処理部１２１は、受信したＬＵＮが示す論理ボリュームを特定する。
【００９６】
［ステップＳ１３］コマンド受信処理部１２１は、ＳＳＤ２０１に対応するストリームＩＤ管理テーブル１１１を参照し、処理対象のレコードを特定する。具体的には、コマンド受信処理部１２１は、特定された単位領域を示す単位領域ＩＤが登録され、かつ、ＩＤステータスが「現行ＩＤ」であるレコードを、処理対象として特定する。
【００９７】
ただし、この時点で、特定された単位領域に対する書き込みが初めて要求された場合には、ストリームＩＤ管理テーブル１１１にはその単位領域を示す単位領域ＩＤが登録されているレコードが存在しない。この場合、コマンド受信処理部１２１は、ストリームＩＤ管理テーブル１１１に新たなレコードを追加する。ストリームＩＤ設定部１２３は、追加したレコードの単位領域ＩＤの項目に、特定された単位領域を示す値を設定し、書き込みデータ量および書き込み回数の項目に「０」を設定する。また、ストリームＩＤ設定部１２３は、ＧＣ実行フラグの項目に「未実行」を設定し、ＩＤステータスの項目に「現行ＩＤ」を設定、書き込み管理ビットマップの項目にビット値がすべて「０」のビットマップデータを設定する。
【００９８】
また、コマンド受信処理部１２１は、ストリームＩＤの項目に、あらかじめ決められた値を設定する。本実施の形態では、通常設定されるストリームＩＤ「１」〜「３」とは別の初期値「０」が設定されるものとする。
【００９９】
さらに、コマンド受信処理部１２１は、ＳＳＤ２０１に対応する書き込み量管理テーブル１１２にストリームＩＤ「０」が登録されたレコードが存在しない場合、レコードを１つ追加し、そのレコードにストリームＩＤ「０」と書き込みデータ量「０」を登録する。
【０１００】
なお、これ以後の処理において、ＦＰＧＡ１０６によって参照されるストリームＩＤ管理テーブル１１１は、ＳＳＤ２０１に対応するテーブルである。
［ステップＳ１４］コマンド受信処理部１２１は、処理対象のレコードに登録された書き込み回数をカウントアップする。
【０１０１】
［ステップＳ１５］コマンド受信処理部１２１は、処理対象のレコードに登録された書き込みデータ量に、書き込みコマンドに含まれる書き込みデータのデータ長を加算する。
［ステップＳ１６］コマンド受信処理部１２１は、処理対象のレコードに登録されたＧＣ実行フラグが、ガベージコレクションが実行されたことを示す「実行済み」である場合、ＧＣ実行フラグを、実行されていないことを示す「未実行」に更新する。
【０１０２】
［ステップＳ１７］コマンド受信処理部１２１は、処理対象のレコードに登録された書き込み管理ビットマップのビットのうち、ステップＳ１１で受信したＬＢＡに対応するビットのビット値が「０」である場合には、「１」に更新する。
【０１０３】
［ステップＳ１８］コマンド受信処理部１２１は、処理対象のレコードからストリームＩＤを取得する。コマンド受信処理部１２１は、ＳＳＤ２０１に対応する書き込み量管理テーブル１１２を参照し、取得したストリームＩＤに対応するレコードに登録された書き込みデータ量に、書き込みコマンドに含まれる書き込みデータのデータ長を加算する。
【０１０４】
［ステップＳ１９］コマンド送信処理部１２２は、ステップＳ１１で受信された書き込みコマンドに、ステップＳ１８で取得されたストリームＩＤを付加してＩＯＣ１０５に受け渡し、書き込みコマンドの送信を要求する。ＩＯＣ１０５は、この要求に応じて、ストリームＩＤが付加された書き込みコマンドをＳＳＤ２０１に送信する。
【０１０５】
［ステップＳ２０］コマンド受信処理部１２１は、ＳＳＤ書き込み量管理テーブル１１３を参照し、ＳＳＤ２０１に対応するレコードに登録された書き込みデータ増加量に、書き込みコマンドに含まれる書き込みデータのデータ長を加算する。
【０１０６】
以下、図９を用いて説明を続ける。
［ステップＳ２１］コマンド受信処理部１２１は、ステップＳ２０で更新した、ＳＳＤ２０１における書き込みデータ増加量が、所定のデータ増加量基準値を超えたか否かを判定する。ＳＳＤ２０１のユーザ容量が４００ＧＢの場合、データ増加量基準値は、例えば１００ＧＢに設定される。コマンド受信処理部１２１は、書き込みデータ量がデータ増加量基準値を超えた場合、ステップＳ２２の処理を実行し、書き込みデータ量がデータ増加量基準値以下の場合、処理を終了する。
【０１０７】
［ステップＳ２２］コマンド受信処理部１２１は、ステップＳ２０で更新した書き込みデータ増加量を「０」にリセットする。これにより、ＳＳＤ２０１に対する書き込みデータの累積量がデータ増加量基準値の分だけ増加するたびに、次のステップＳ２３，Ｓ２４の処理が実行されることになる。
【０１０８】
［ステップＳ２３］ストリームＩＤ設定部１２３は、各単位領域に割り当てるストリームＩＤを必要に応じて更新するためのストリームＩＤ更新処理を実行する。この処理の詳細については、図１０において説明する。
【０１０９】
［ステップＳ２４］ＧＣ制御部１２４は、必要に応じてＳＳＤ２０１にガベージコレクションを実行させるガベージコレクション制御処理を実行する。この処理の詳細については、図１１、図１２において説明する。
【０１１０】
図１０は、ストリームＩＤ更新処理手順の例を示すフローチャートである。この図１０の処理は、図９のステップＳ２３の処理に対応する。
［ステップＳ３１］ストリームＩＤ設定部１２３は、ストリームＩＤ管理テーブル１１１のレコードのうち、ＩＤステータスが「現行ＩＤ」であるレコードを特定する。ストリームＩＤ設定部１２３は、特定された各レコードに登録された、単位領域ごとの書き込み回数に基づいて、各単位領域に割り当てるべきストリームＩＤを更新する。
【０１１１】
例えば、ストリームＩＤ設定部１２３は、レコードに登録された書き込み回数が多い順に単位領域をソートする。ストリームＩＤ設定部１２３は、１つのストリームＩＤに対して均等な数の単位領域が割り当てられるように、ソートされた先頭の単位領域から順にストリームＩＤを割り当てる。
【０１１２】
具体的には、例えば、ストリームＩＤとして「１」〜「３」の３段階の値が設定され、「１」、「２」、「３」の順に書き込み回数が多い単位領域に割り当てられるものとする。また、６つの単位領域ａ〜ｆが存在するものとする。この場合、１つのストリームＩＤに２つの単位領域が割り当てられる。ストリームＩＤ設定部１２３は、単位領域ａ〜ｆを書き込み回数が多い順にソートする。ここでは例として、先頭から単位領域ａ，ｂ，ｃ，ｄ，ｅ，ｆという順にソートされたとする。ストリームＩＤ設定部１２３は、単位領域ａ，ｂにストリームＩＤ「１」を割り当て、単位領域ｃ，ｄにストリームＩＤ「２」を割り当て、単位領域ｅ，ｆにストリームＩＤ「３」を割り当てる。
【０１１３】
なお、レコードに登録された書き込み回数は、前回ストリームＩＤが更新されてからの各単位領域に対する書き込み回数を示す。本実施の形態では、これらの値は、各単位領域におけるデータの更新頻度を近似する値として用いられる。
【０１１４】
［ステップＳ３２］ストリームＩＤ設定部１２３は、ステップＳ３３〜Ｓ３５の処理をすべての単位領域について実行したか否かを判定する。ストリームＩＤ設定部１２３は、未実行の単位領域がある場合、ステップＳ３３の処理を実行する。一方、ストリームＩＤ設定部１２３は、すべての単位領域について処理済みの場合、処理を終了する。この場合、次の図１１に示すガベージコレクション制御処理が実行される。
【０１１５】
［ステップＳ３３］ストリームＩＤ設定部１２３は、処理を未実行の単位領域を１つ選択する。
［ステップＳ３４］ストリームＩＤ設定部１２３は、ストリームＩＤ管理テーブル１１１に新たなレコードを追加する。ストリームＩＤ設定部１２３は、追加したレコードの単位領域ＩＤの項目に、ステップＳ３３で選択された単位領域を示す値を設定し、ストリームＩＤの項目に、この単位領域についてステップＳ３１で更新された更新後のストリームＩＤを設定する。さらに、ストリームＩＤ設定部１２３は、書き込みデータ量および書き込み回数の項目に「０」を設定し、ＧＣ実行フラグの項目に「未実行」を設定し、ＩＤステータスの項目に「現行ＩＤ」を設定する。また、ストリームＩＤ設定部１２３は、書き込み管理ビットマップの項目に、ビット値がすべて「０」であるビットマップデータを設定する。
【０１１６】
このステップＳ３４の処理により、その後に単位領域に対する書き込みが要求された場合に、その単位領域に対応する更新後のストリームＩＤが書き込みコマンドに付加されるようになる。
【０１１７】
［ステップＳ３５］ストリームＩＤ設定部１２３は、更新前のストリームＩＤが設定されたレコード、すなわち、ステップＳ３１で特定されたレコードのＩＤステータスの項目に「旧ＩＤ」を設定する。この後、ストリームＩＤ設定部１２３は、ステップＳ３２の処理を再度実行する。
【０１１８】
以上の図１０の処理は、ＳＳＤ２０１に対する書き込みデータの累積量がデータ増加量基準値の分だけ増加するたびに実行される。そして、その都度、前回の更新後から現在までの単位領域ごとの書き込み回数に基づいて、各単位領域に割り当てるストリームＩＤが見直される。
【０１１９】
図１０の処理が実行された段階では、更新後のストリームＩＤがストリームＩＤ管理テーブル１１１に登録されるだけで、ＳＳＤ２０１に記憶されているデータには更新後のストリームＩＤは反映されない。そして、その後に単位領域に対する書き込みが要求されて、ＳＳＤ２０１に書き込みコマンドが送信される際に、更新後のストリームＩＤが書き込みコマンドに付加される（図８のステップＳ１９）。このように、ストリームＩＤの更新後に単位領域に対するデータの書き込みが続けられるのにしたがって、ＳＳＤ２０１に記憶されるデータに対して更新後のストリームＩＤが反映されていく。これにより、単位領域ごとの書き込み頻度の変動に応じて、ＳＳＤ２０１におけるデータの書き込み先ブロックが適正化されていく。
【０１２０】
図１１、図１２は、ガベージコレクション制御処理手順の例を示すフローチャートである。これらの図１１、図１２の処理は、図９のステップＳ２４の処理に対応する。
［ステップＳ４１］ＧＣ制御部１２４は、ＳＳＤ２０１の物理記憶領域における空き領域サイズを取得する。具体的には、ＧＣ制御部１２４は、この空き領域サイズの送信を要求するための制御コマンドを、ＩＯＣ１０５を介してＳＳＤ２０１に送信し、ＳＳＤ２０１から返信された空き領域サイズを受信する。
【０１２１】
［ステップＳ４２］ＧＣ制御部１２４は、取得した空き領域サイズが、所定の基準空き領域サイズより小さいか否かを判定する。ＧＣ制御部１２４は、空き領域サイズが基準空き領域サイズより小さい場合、図１２のステップＳ５１の処理を実行し、空き領域サイズが基準空き領域サイズ以上である場合、ステップＳ４３の処理を実行する。
【０１２２】
このステップＳ４２は、図９のステップＳ２１で、ＳＳＤ２０１に対する書き込みデータ増加量がデータ増加量基準値（例えば１００ＧＢ）分だけ増加した場合に実行される。そのため、基準空き領域サイズは、少なくとも、データ増加量基準値より大きい必要がある。例えば、基準空き領域サイズは、データ増加量基準値より大きく、その２倍より小さい値に設定される。本実施の形態では、基準空き領域サイズを１５０ＧＢとする。
【０１２３】
ここで、ＳＳＤ２０１のコントローラは、ＳＳＤ２０１の物理記憶領域の空き領域サイズが所定閾値以下となった場合に、ガベージコレクションを実行する。一方、基準空き領域サイズは、ＦＰＧＡ１０６からの要求によってＳＳＤ２０１にガベージコレクションを実行させるかを判定するために用いられるため、ＳＳＤ２０１に設定されているこの閾値より大きい値に設定されることが望ましい。これにより、ＦＰＧＡ１０６側から、ガベージコレクションの実行が望ましいと推定されるブロックについて、ガベージコレクションを積極的に実行させることができる。
【０１２４】
さらに、基準空き領域サイズは、ＳＳＤ２０１の物理記憶領域のサイズに対する論理記憶領域のサイズの割合に基づいて設定されてもよい。
［ステップＳ４３］ストリームＩＤ設定部１２３は、未更新データのストリームＩＤ更新処理を実行する。この処理の詳細については、図１３において説明する。
【０１２５】
以下、図１２を用いて説明を続ける。
［ステップＳ５１］ＧＣ制御部１２４は、ステップＳ５２以降の処理をすべてのストリームＩＤ「０」〜「３」について実行したか否かを判定する。ＧＣ制御部１２４は、未実行のストリームＩＤがある場合、ステップＳ５２の処理を実行し、すべてのストリームＩＤについて処理済みの場合、図１１のステップＳ４３の処理を実行する。
【０１２６】
［ステップＳ５２］ＧＣ制御部１２４は、処理を未実行のストリームＩＤを１つ選択する。
［ステップＳ５３］ＧＣ制御部１２４は、ＳＳＤ２０１に対応する書き込み量管理テーブル１１２から、ステップＳ５２で選択したストリームＩＤについての書き込みデータ量を取得する。
【０１２７】
［ステップＳ５４］ＧＣ制御部１２４は、ステップＳ５３で取得した書き込みデータ量が、所定の基準データ量より大きいか否かを判定する。ＧＣ制御部１２４は、書き込みデータ量が基準データ量より大きい場合、ステップＳ５５の処理を実行し、書き込みデータ量が基準データ量以下の場合、ステップＳ５１の処理を再度実行する。なお、基準データ量は、例えば、１００ＧＢに設定される。この基準データ量は、ＳＳＤ２０１のユーザ容量は、付加されるストリームＩＤの段階数に応じて決定されればよい。
【０１２８】
［ステップＳ５５］ＧＣ制御部１２４は、ステップＳ５２で選択したストリームＩＤが付加されたデータについてガベージコレクションの実行を要求する制御コマンドを、ＩＯＣ１０５を介してＳＳＤ２０１に送信する。
【０１２９】
ＳＳＤ２０１は、書き込まれたデータが、付加されたストリームＩＤごとに異なるブロックに書き込まれるように制御している。ステップＳ５４で「Ｙｅｓ」と判定された場合、ステップＳ５２で選択されたストリームＩＤが付加されたデータが、有効データおよび無効データを含めてＳＳＤ２０１に大量に書き込まれている。そして、ＳＳＤ２０１上のいずれかのブロックが、ステップＳ５２で選択されたストリームＩＤが付加されたデータによって満杯に近い状態になっている可能性が高い。
【０１３０】
これに対して、ステップＳ５５で制御コマンドが送信されると、ＳＳＤ２０１は、受信した制御コマンドに応じて、指定されたストリームＩＤが付加されたデータが書き込まれているブロックについてガベージコレクションを実行する。これにより、指定されたストリームＩＤが付加されたデータのうち有効データのみが別のブロックに寄せ集められて、ＳＳＤ２０１上の空き領域が増加する。
【０１３１】
［ステップＳ５６］ＧＣ制御部１２４は、ストリームＩＤ管理テーブル１１１のレコードのうち、ステップＳ５２で選択されたストリームＩＤが登録されたレコードを特定する。ここでは、ＩＤステータスが「現行ＩＤ」であるレコードと「旧ＩＤ」であるレコードのどちらも特定される。ＧＣ制御部１２４は、特定した各レコードにおけるＧＣ実行フラグを「実行済み」に更新する。
【０１３２】
［ステップＳ５７］ＧＣ制御部１２４は、ステップＳ５２で選択したストリームＩＤが割り当てられた単位領域のそれぞれについて、ＳＳＤ２０１に書き込まれた有効データのデータ量を取得する。具体的には、ＧＣ制御部１２４は、ステップＳ５６で特定した各レコードについて、次のような処理を実行する。
【０１３３】
ＧＣ制御部１２４は、書き込み管理ビットマップから、書き込み済みを示すビット値「１」が設定されたビットを特定する。ＧＣ制御部１２４は、ＧＣ制御部１２４は、単位領域設定テーブル１１４を参照して、特定した各ビットに対応するＳＳＤ２０１上の論理アドレスを特定する。ＧＣ制御部１２４は、特定した論理アドレスとステップＳ５２で選択したストリームＩＤとをそれぞれ指定した制御コマンドを、ＩＯＣ１０５を介してＳＳＤ２０１に送信する。この制御コマンドは、該当するストリームＩＤが付加された状態で該当する論理アドレスに対して書き込みが要求されたデータが、有効データとしてＳＳＤ２０１に残っているか否かを問い合わせるためのものである。
【０１３４】
ＧＣ制御部１２４は、制御コマンドに対する応答から、各レコードに登録された単位領域ＩＤとストリームＩＤとに対応する有効データのデータ量を取得する。
なお、このステップＳ５７の処理では、ＩＤステータスが「旧ＩＤ」となっているレコードについては、ガベージコレクションの実行により有効データのデータ量が「０」になることがあり得る。これは、ガベージコレクションの実行により、ある単位領域に書き込まれたデータのうち、更新前のストリームＩＤが付加されていたデータがすべて無効化され、ＳＳＤ２０１から消去されたことを意味する。
【０１３５】
［ステップＳ５８］ＧＣ制御部１２４は、ステップＳ５６で特定した各レコードについて、登録されている書き込みデータ量を、ステップＳ５７で取得された有効データのデータ量で更新する。
【０１３６】
［ステップＳ５９］ＧＣ制御部１２４は、ステップＳ５６で特定した各レコードについて、ＧＣ実行フラグを「実行済み」に更新する。
［ステップＳ６０］ＧＣ制御部１２４は、ステップＳ５６で特定したレコードのうち、ＩＤステータスが「旧ＩＤ」または「無効ＩＤ」であり、かつ、書き込みデータ量が「０」のレコードを特定する。また、ＧＣ制御部１２４は、特定したレコードと同じ単位領域ＩＤが登録され、かつ、ＩＤステータスが「現行ＩＤ」であるレコードを特定する。ＧＣ制御部１２４は、前者のレコードに登録された書き込み管理ビットマップと、後者のレコードに登録された書き込み管理ビットマップとを、それらの論理和をとることでマージする。ＧＣ制御部１２４は、マージされたビットマップによって、後者のレコードに登録されている書き込み管理ビットマップを更新する。そして、ＧＣ制御部１２４は、前者のレコードをストリームＩＤ管理テーブル１１１から削除する。
【０１３７】
［ステップＳ６１］ＧＣ制御部１２４は、ステップＳ５２で選択したストリームＩＤに対応するＳＳＤ２０１での書き込みデータ量を算出する。この書き込みデータ量は、詳しくは、ステップＳ５２で選択したストリームＩＤが付与されたＳＳＤ２０１上のデータのうち、有効データのデータ総量を示す。ＧＣ制御部１２４は、具体的には、ステップＳ５８で更新された、各単位領域の書き込みデータ量を取得し、これらの書き込みデータ量を合算することで、ストリームＩＤに対応するＳＳＤ２０１での書き込みデータ量を算出する。ＧＣ制御部１２４は、ＳＳＤ２０１に対応する書き込み量管理テーブル１１２を参照し、ステップＳ５２で選択したストリームＩＤに対応するレコードに登録されている書き込みデータ量を、算出された書き込みデータ量で更新する。
【０１３８】
この後、ＧＣ制御部１２４は、ステップＳ５１の処理を再度実行する。
以上の図１１、図１２の処理によれば、ＳＳＤ２０１側の判断に基づくガベージコレクションだけでなく、ＦＰＧＡ１０６側の判断に基づくガベージコレクションを積極的にＳＳＤ２０１に実行させることができる。ＦＰＧＡ１０６のＧＣ制御部１２４は、ストリームＩＤごとの書き込みデータ量を管理し、その管理の結果を用いることで、ガベージコレクションを実行すべきストリームＩＤを適切に判定することができる。これにより、ＳＳＤ２０１でのガベージコレクションの処理効率が高まる。また、ＳＳＤ２０１側の判断に基づくガベージコレクションの実行回数を減らすこともできる。ＳＳＤ２０１全体として見ると、ＳＳＤ２０１側の判断だけに基づく場合より、ガベージコレクションの実行回数を減らすことができる可能性が高い。その場合、ガベージコレクションの実行に伴うデータの書き込み量をさらに削減できる可能性が高い。
【０１３９】
図１３は、未更新データのストリームＩＤ更新処理手順の例を示すフローチャートである。
［ステップＳ７１］ストリームＩＤ設定部１２３は、ステップＳ７２以降の処理をすべての単位領域について実行したか否かを判定する。ストリームＩＤ設定部１２３は、未実行の単位領域がある場合、ステップＳ７２の処理を実行し、すべての単位領域について処理済みの場合、処理を終了する。
【０１４０】
［ステップＳ７２］ストリームＩＤ設定部１２３は、処理を未実行の単位領域を１つ選択する。
［ステップＳ７３］ストリームＩＤ設定部１２３は、ストリームＩＤ管理テーブル１１１から、ステップＳ７２で選択した単位領域の単位領域ＩＤが登録されたレコードを特定する。ストリームＩＤ設定部１２３は、特定したレコードの中に、ＩＤステータスが「旧ＩＤ」であり、かつ、ＧＣ実行フラグが「実行済み」であるレコードがあるか否かを判定する。この判定条件に該当するレコードは、直前にガベージコレクションが実行されたストリームＩＤが、更新前のストリームＩＤとして割り当てられていた単位領域に対応するレコードである。ストリームＩＤ設定部１２３は、該当するレコードがある場合、ステップＳ７４の処理を実行し、該当するレコードがない場合、ステップＳ７１の処理を再度実行する。
【０１４１】
［ステップＳ７４］ストリームＩＤ設定部１２３は、ストリームＩＤ管理テーブル１１１のレコードのうち、ステップＳ７２で選択した単位領域の単位領域ＩＤが登録され、かつ、ＩＤステータスが「現行ＩＤ」であるレコードから、現行のストリームＩＤを取得する。
【０１４２】
［ステップＳ７５］ストリームＩＤ設定部１２３は、ＩＤステータスが「旧ＩＤ」であり、かつ、ＧＣ実行フラグが「実行済み」であるというステップＳ７３での判定条件を満たすレコードを特定する。この判定条件を満たすレコードが残っている場合、更新前のストリームＩＤが付加されてＳＳＤ２０１に書き込まれたデータの中に、図１２のガベージコレクションを実行した後にも有効データとして残っているデータがあることを示す。
【０１４３】
そこで、ストリームＩＤ設定部１２３は、これらのデータをＳＳＤ２０１から読み出し、読み出したデータにステップＳ７４で取得した現行のストリームＩＤを付加して、ＳＳＤ２０１にリライトする。これによって、ＳＳＤ２０１上の有効データに付加されるストリームＩＤを現行のストリームＩＤに付け替える。
【０１４４】
具体的には、ストリームＩＤ設定部１２３は、特定したレコードの書き込み管理ビットマップから、書き込み済みを示すビット値「１」が設定されたビットを特定する。ストリームＩＤ設定部１２３は、単位領域設定テーブル１１４を参照して、特定した各ビットに対応するＳＳＤ２０１上の論理アドレスを特定する。ストリームＩＤ設定部１２３は、特定した各論理アドレスについて、次の処理を実行する。
【０１４５】
ストリームＩＤ設定部１２３は、特定した論理アドレスを読み出し元アドレスとして設定した読み出しコマンドを、ＩＯＣ１０５を介してＳＳＤ２０１に送信する。これにより、対応するデータがＳＳＤ２０１から読み出される。次に、ストリームＩＤ設定部１２３は、同じ論理アドレスを書き込み先アドレスとして設定した書き込みコマンドを作成する。ストリームＩＤ設定部１２３は、この書き込みコマンドに、ステップＳ７４で取得した現行のストリームＩＤを付加して、ＩＯＣ１０５を介してＳＳＤ２０１に送信する。
【０１４６】
これにより、ＳＳＤ２０１上の同じ論理アドレスに対応するデータのうち、更新前のストリームＩＤが付加された書き込みデータが無効化される。そして、現行のストリームＩＤを付加して新たに書き込みを要求したデータが、有効データとしてＳＳＤ２０１上の別のブロックに書き込まれる。
【０１４７】
［ステップＳ７６］ストリームＩＤ設定部１２３は、ステップＳ７４で現行のストリームＩＤを取得した取得元のレコードの書き込みデータ量に、ステップＳ７５でリライトした書き込みデータ長（すなわち、リライトしたデータの合計量）を加算する。
【０１４８】
さらに、ストリームＩＤ設定部１２３は、書き込みデータ量を加算したレコードに登録された書き込み管理ビットマップと、ステップＳ７５で特定したレコードに登録された書き込み管理ビットマップとを、それらの論理和をとることでマージする。ストリームＩＤ設定部１２３は、マージされたビットマップによって、前者のレコードに登録された書き込み管理ビットマップを更新する。
【０１４９】
［ステップＳ７７］ストリームＩＤ設定部１２３は、ステップＳ７５で特定した各レコードのＩＤステータスを、「旧ＩＤ」から「無効ＩＤ」に更新する。この後、ストリームＩＤ設定部１２３は、ステップＳ７１の処理を再度実行する。
【０１５０】
次に、ＳＳＤ２０１に対する具体的な書き込み制御例を挙げて説明する。
まず、図１４は、第１の状態において管理テーブルに登録されるデータの例を示す図である。また、図１５は、第１の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。
【０１５１】
ＳＳＤ２０１にデータが書き込まれていない初期状態から、単位領域に対する書き込みが開始されると、ＳＳＤ２０１に対する書き込みデータ増加量がデータ増加量基準値（１００ＧＢ）を超えるまでの間、ストリームＩＤの更新処理は実行されない。第１の状態は、初期状態から、単位領域ａ，ｂ，ｃに対する書き込みが行われたものの、ＳＳＤ２０１に対する書き込みデータ増加量がデータ増加量基準値を超えていない状態を示す。
【０１５２】
この状態では、図１４に示すように、ストリームＩＤ管理テーブル１１１には単位領域ａ，ｂ，ｃのそれぞれに対応するレコードが登録される。各単位領域ａ，ｂ，ｃには、ストリームＩＤとして初期値「０」が割り当てられる。そして、書き込みが行われるたびに、ストリームＩＤ管理テーブル１１１の書き込みデータ量と書き込み回数、書き込み量管理テーブル１１２の書き込みデータ量、および、ＳＳＤ書き込み量管理テーブル１１３の書き込みデータ増加量が増加する。
【０１５３】
なお、図１４に示すストリームＩＤ管理テーブル１１１では、書き込み管理ビットマップの図示を省略している。また、ＳＳＤ書き込み量管理テーブル１１３に登録されたＳＳＤ  ＩＤ「１」は、ＳＳＤ２０１を示すものとする。
【０１５４】
また、図１５に示すように、ＳＳＤ２０１には、単位領域ａ，ｂ，ｃに属するデータが順次格納されていく。この状態では、ＳＳＤ２０１の物理記憶領域における空き領域サイズは、ガベージコレクションの実行を要求するための基準空き領域サイズ（１５０ＧＢ）よりはるかに大きい。
【０１５５】
次に、上記の第１の状態から単位領域ａ，ｂ，ｃに対する書き込みが継続され、ＳＳＤ２０１に対する書き込みデータ増加量がデータ増加量基準値（１００ＧＢ）を超えたとする。このときの状態を第２の状態とする。
【０１５６】
図１６は、第２の状態において管理テーブルに登録されるデータの例を示す図である。第２の状態では、図１０に示すストリームＩＤ更新処理が実行される。この第２の状態に遷移するまでの間に、単位領域ａ，ｂ，ｃに対してそれぞれ６ＧＢ、１４ＧＢ、８０ＧＢのデータが書き込まれたとする。
【０１５７】
この場合、図１０のステップＳ３１の処理により、単位領域ａ，ｂ，ｃに対してそれぞれストリームＩＤ「１」，「２」，「３」が割り当てられる。また、ストリームＩＤ管理テーブル１１１には、単位領域ａ，ｂ，ｃにそれぞれ対応する新たなレコード１１１ａ，１１１ｂ，１１１ｃが追加される。追加されたレコード１１１ａ，１１１ｂ，１１１ｃには、新たに更新後のストリームＩＤが登録され、それらのレコード１１１ａ，１１１ｂ，１１１ｃのＩＤステータスは「現行ＩＤ」とされる。一方、更新前のストリームＩＤが登録されているレコード１１１ｄ，１１１ｅ，１１１ｆでは、ＩＤステータスが「現行ＩＤ」から「旧ＩＤ」に更新される。なお、ＳＳＤ書き込み量管理テーブル１１３では、ＳＳＤ２０１に対応する書き込みデータ増加量が「０」にリセットされる。
【０１５８】
以上の第２の状態から単位領域ａ，ｂ，ｃに対する書き込みが継続されることで、書き込みコマンドをＳＳＤ２０１に送信する際に、更新後のストリームＩＤが書き込みコマンドに付加される。これによって、新たに書き込まれるデータには、ストリームＩＤ更新処理の実行直前における各単位領域ａ，ｂ，ｃの更新頻度に応じたストリームＩＤが付加される。その結果、ＳＳＤ２０１では、更新頻度の異なる単位領域に属するデータが別々のブロックに書き込まれるようになる。
【０１５９】
次に、第２の状態から、単位領域ａ，ｂ，ｃに加えて単位領域ｄ，ｅに対する書き込みが行われたとする。また、書き込みの実行に応じてＳＳＤ２０１に対する書き込みデータ増加量がデータ増加量基準値（１００ＧＢ）を超え、ストリームＩＤ更新処理が再度実行されたとする。
【０１６０】
そして、さらに単位領域に対する書き込みが継続され、更新後のストリームＩＤが付加されたデータが少しずつＳＳＤ２０１に書き込まれていったとする。このときの状態を第３の状態とする。
【０１６１】
図１７は、第３の状態において管理テーブルに登録されるデータの例を示す図である。図１７に示すように、ストリームＩＤ更新処理の実行によって、単位領域ｃ，ｄにストリームＩＤ「３」が、単位領域ｂ，ｅにストリームＩＤ「２」が、単位領域ａにストリームＩＤ「１」が、それぞれ新たに割り当てられたとする。
【０１６２】
この場合、ストリームＩＤ管理テーブル１１１には、それぞれ単位領域ｃ，ｄ，ｂ，ｅ，ａに対応する新たなレコード１１１ｇ，１１１ｈ，１１１ｉ，１１１ｊ，１１１ｋが追加される。そして、それらのレコード１１１ｇ，１１１ｈ，１１１ｉ，１１１ｊ，１１１ｋに更新後のストリームＩＤが登録される。また、更新前のストリームＩＤが登録されているレコード１１１ｌ〜１１１ｐでは、ＩＤステータスが「現行ＩＤ」から「旧ＩＤ」に更新される。
【０１６３】
その後、単位領域ａ〜ｅに対する書き込みが継続されて、第３の状態に遷移したとする。この第３の状態において、図１１のステップＳ４２の判定処理により、ＳＳＤ２０１の空き領域サイズが基準空き領域サイズ（１５０ＧＢ）より小さくなったと判定されたとする。この場合、少なくとも１つのストリームＩＤが割り当てられた単位領域に書き込まれたデータについて、ガベージコレクションが実行される。
【０１６４】
図１７に示す書き込み量管理テーブル１１２の例では、ストリームＩＤ「０」，「３」について、書き込みデータ量が基準データ量（１００ＧＢ）より大きくなっている。この場合、ストリームＩＤ「０」，「３」がガベージコレクションの実行対象となる。以下、ガベージコレクションが実行された後の状態を、第４の状態とする。
【０１６５】
図１８は、第４の状態において管理テーブルに登録されるデータの例を示す図である。ガベージコレクションの実行により、レコード１１１ｇ，１１１ｈにおける書き込みデータ量、すなわちストリームＩＤ「３」が付加されたデータ量が減少している。本実施の形態では、書き込み量管理テーブル１１２によりストリームＩＤごとに書き込みデータ量を管理し、書き込みデータ量が所定値を超えたストリームＩＤを指定してガベージコレクションを実行させる。これにより、ガベージコレクションの実行による無効データの削減効果が向上する。また、上記条件でガベージコレクションを実行させることで、更新頻度が高い単位領域に属するデータがガベージコレクションの対象となる可能性が高くなる。その結果、ガベージコレクションに伴うデータ書き込み量を減少させることができる。
【０１６６】
なお、図１８の例では、レコード１１１ｍ〜１１１ｐにおける書き込みデータ量は「０」に更新されている。これは、単位領域ｂ〜ｅに属するデータのうち、更新前のストリームＩＤ「０」が付加されたデータが、ＳＳＤ２０１からすべて削除されたことを示す。これらのレコード１１１ｍ〜１１１ｐは、図１２のステップＳ６０の処理によってストリームＩＤ管理テーブル１１１から削除される。
【０１６７】
図１９は、第３、第４の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。図１９の上図が第３の状態を示し、下図が第４の状態を示す。図１９の上図に示すように、第３の状態では、ＳＳＤ２０１の物理記憶領域における空き容量が基準空き領域サイズ（１５０ＧＢ）を超えている。これに対して、図１９の下図に示すように、第４の状態では、ガベージコレクションの実行によりストリームＩＤ「０」，「３」が付加されたデータのデータ量が削減されている。その結果、ＳＳＤ２０１の物理記憶領域における空き容量は、基準空き領域サイズよりはるかに大きい値まで回復している。
【０１６８】
ところで、第３の状態では、図１７に示したように、単位領域ａに対応するレコード１１１ｋでは書き込みデータ量が「０」になっている。これは、ストリームＩＤ更新処理が前回実行された後に、単位領域ａに対する書き込みが発生していないことを示す。この場合、図１９の下図に示すように、単位領域ａに属するデータとしては、更新前のストリームＩＤ「０」が付加されているデータしかＳＳＤ２０１に書き込まれていない。これらのデータに有効データが確実に含まれるので、ストリームＩＤ「０」についてのガベージコレクションを実行しても、ストリームＩＤ「０」が付加された有効データがＳＳＤ２０１に残ってしまう。
【０１６９】
図１３に示した未更新データのストリームＩＤ更新処理は、このように更新前のストリームＩＤが付加された有効データが残ってしまった場合に、その有効データを読み出し、更新後のストリームＩＤを付加してＳＳＤ２０１にリライトする処理である。これにより、更新前のストリームＩＤが付加された有効データをＳＳＤ２０１から削除し、更新後のストリームＩＤが付加された同じ有効データをＳＳＤ２０１に記憶させることができる。
【０１７０】
図２０は、第５の状態において管理テーブルに登録されるデータの例を示す図である。また、図２１は、第５の状態におけるＳＳＤの物理記憶領域のイメージ例を示す図である。
【０１７１】
前述の第４の状態では、単位領域ａに対応し、かつ、ＧＣ実行フラグが「実行済み」であり、かつ、ＩＤステータスが「旧ＩＤ」であるレコード１１１ｌが、未更新データのストリームＩＤ更新処理の対象となる。この処理では、単位領域ａに属するデータのうち、更新前のストリームＩＤ「０」が付加された５ＧＢ分のデータが、ＳＳＤ２０１から読み出される。そして、読み出されたデータが、更新後のストリームＩＤ「１」を付加してＳＳＤ２０１にリライトされる。その結果、レコード１１１ｋの書き込みデータ量が５ＧＢ増加する一方、レコード１１１ｌのＩＤステータスが「無効ＩＤ」に更新されて、ストリームＩＤ「０」が付加されたデータが無効データになったことが記録される。
【０１７２】
また、図２１に示すように、第５の状態では、ストリームＩＤ「１」が付加された、単位領域ａに属するデータが、ＳＳＤ２０１に追加的に書き込まれる。これによって、ＳＳＤ２０１の空き容量は減少する。しかし、ストリームＩＤ「０」が付加された、単位領域ａに属するデータはすべて無効データであるので、これらの無効データが書き込まれたブロックは、ＳＳＤ２０１のコントローラの判断によっていずれフラッシュされ、再利用可能になる。
【０１７３】
〔第３の実施の形態〕
第３の実施の形態に係るＣＭは、ＦＰＧＡ１０６の処理がＣＰＵ１０１によって実行されるように、第２の実施の形態に係るＣＭ１００を変形したものである。以下、第２の実施の形態との相違点について説明する。なお、第２の実施の形態と同じ構成要素には、同じ符号を付して示す。
【０１７４】
図２２は、第３の実施の形態に係るＣＭが備える処理機能の構成例を示すブロック図である。
第３の実施の形態に係るストレージ装置は、ＣＭ１００の代わりにＣＭ１００ａを有する。ＣＭ１００ａは、ホストＩＯ制御部１０１ａに加えて、記憶部１０２ａと書き込み制御部１０１ｂを有する。
【０１７５】
記憶部１０２ａは、例えば、ＲＡＭ１０２またはＳＳＤ１０３の記憶領域の一部として実装される。記憶部１０２ａは、第２の実施の形態における記憶部１１０と同様に、ストリームＩＤ管理テーブル１１１、書き込み量管理テーブル１１２、ＳＳＤ書き込み量管理テーブル１１３および単位領域設定テーブル１１４が記憶される。
【０１７６】
書き込み制御部１０１ｂの処理は、例えば、ホストＩＯ制御部１０１ａと同様に、ＣＰＵ１０１が所定のアプリケーションプログラムを実行することで実現される。
書き込み制御部１０１ｂは、ホストＩＯ制御部１０１ａがＩＯＣ１０５に対して読み出しコマンドの発行要求を出力した場合、その発行要求をそのままＩＯＣ１０５に転送する。一方、書き込み制御部１０１ｂは、ホストＩＯ制御部１０１ａがＩＯＣ１０５に対して書き込みコマンドの発行要求を出力した場合には、その発行要求をそのままＩＯＣ１０５に転送せずに取得する。なお、書き込み制御部１０１ｂは、書き込みコマンドの発行要求を取得したとき、ＬＵＮおよびＬＢＡの通知も受ける。
【０１７７】
書き込み制御部１０１ｂは、コマンド受信処理部１２１ａ、コマンド送信処理部１２２ａ、ストリームＩＤ設定部１２３ａおよびＧＣ制御部１２４ａを有する。コマンド受信処理部１２１ａ、コマンド送信処理部１２２ａ、ストリームＩＤ設定部１２３ａおよびＧＣ制御部１２４ａの基本的な処理は、それぞれコマンド受信処理部１２１、コマンド送信処理部１２２、ストリームＩＤ設定部１２３およびＧＣ制御部１２４の処理と同じである。
【０１７８】
ただし、コマンド受信処理部１２１ａは、ホストＩＯ制御部１０１ａから出力された、書き込みコマンドの発行要求をＬＵＮおよびＬＢＡとともに取得する点で、コマンド受信処理部１２１とは異なる。コマンド送信処理部１２２ａは、ストリームＩＤを付加した書き込みコマンドの発行をＩＯＣ１０５に要求する点で、コマンド送信処理部１２２とは異なる。
【０１７９】
ストリームＩＤ設定部１２３ａは、図１３のステップＳ７５において、ＳＳＤからの読み出しや書き込み（リライト）のためのコマンド発行をＩＯＣ１０５に要求する点で、ストリームＩＤ設定部１２３とは異なる。ＧＣ制御部１２４ａは、図１２のステップＳ５７において、選択したストリームＩＤに対応する有効データ量の送信を要求するための制御コマンドの発行を、ＩＯＣ１０５に要求する点で、ＧＣ制御部１２４とは異なる。
【０１８０】
以上の第３の実施の形態に係るＣＭ１００ａによれば、第２の実施の形態と同様の効果を得ることができる。
なお、上記の各実施の形態に示した装置（例えば、ストレージ制御装置１０、ＣＭ１００，１００ａ）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１８１】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１８２】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１８３】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  記憶装置の論理記憶領域を分割した複数の分割領域のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報を記憶する記憶部と、制御部とを有し、
前記制御部は、
前記複数の分割領域のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第１の書き込み要求に付加して前記記憶装置に送信し、
前記複数の分割領域ごとに書き込み頻度を計測し、
書き込み頻度の計測結果に基づいて、前記対応管理情報が示す前記対応関係を更新し、
前記対応関係の更新後に前記書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第２の書き込み要求に付加して前記記憶装置に送信する、
ストレージ制御装置。
【０１８４】
（付記２）  前記複数の識別番号は、前記記憶装置が、書き込みデータを前記書き込みデータに付加された識別番号に応じて複数の管理領域のうち異なる管理領域に書き込むように制御するための情報であり、前記複数の管理領域のそれぞれは、前記記憶装置の物理記憶領域に含まれる、データ消去の単位となる領域である、
付記１記載のストレージ制御装置。
【０１８５】
（付記３）  前記対応関係の更新は、前記記憶装置に書き込まれる累積データ量が所定量増加するたびに実行される、
付記１または２記載のストレージ制御装置。
【０１８６】
（付記４）  前記複数の分割領域の数より前記複数の識別番号の数が少ない場合、前記対応関係の更新では、前記複数の識別番号の少なくとも１つを前記複数の分割領域のうち２以上の分割領域に対応付ける、
付記１〜３のいずれか１つに記載のストレージ制御装置。
【０１８７】
（付記５）  前記制御部は、さらに、
前記記憶装置の物理記憶領域の空き容量が所定容量より小さくなった場合、前記記憶装置に書き込まれたデータのうち、書き込み時に前記複数の識別番号がそれぞれ付加されたデータのデータ総量を取得し、
前記複数の識別番号の中から、前記データ総量が所定基準量より大きい特定識別番号を特定し、
書き込み時に前記特定識別番号が付加されたデータについてのガベージコレクションを前記記憶装置に実行させる、
付記１〜４のいずれか１つに記載のストレージ制御装置。
【０１８８】
（付記６）  前記記憶部は、さらに、前記複数の識別番号のそれぞれに対応する書き込みデータ量が登録されたデータ量管理情報を記憶し、
前記制御部は、さらに、前記記憶装置に対して、前記複数の識別番号のいずれかを付加して書き込み要求を送信するたびに、付加した識別番号に対応する前記書き込みデータ量に書き込みを要求したデータのサイズを加算し、
前記データ総量の取得では、その時点での前記複数の識別番号にそれぞれ対応する前記書き込みデータ量を、前記データ総量として前記データ量管理情報から読み出す、
付記５記載のストレージ制御装置。
【０１８９】
（付記７）  前記制御部は、さらに、
前記複数の分割領域の中から、前回の前記対応関係の更新前に前記特定識別番号が対応付けられており、かつ、前回の前記対応関係の更新後に書き込みが要求されていない特定分割領域を特定し、
前記対応管理情報に基づいて、前記複数の識別番号の中から前記特定分割領域に現在対応付けられている現行識別番号を特定し、
前回の前記対応関係の更新前に前記特定分割領域に書き込まれたデータを前記記憶装置から読み出し、読み出したデータに前記現行識別番号を付加して前記記憶装置に書き込みし直す、
付記５または６記載のストレージ制御装置。
【０１９０】
（付記８）  コンピュータに、
記憶装置の論理記憶領域を分割した複数の分割領域のいずれかに含まれる書き込みアドレスへの書き込みが要求されると、前記複数の分割領域のそれぞれと、書き込み頻度の違いを示す複数の識別番号のうちの１つとの対応関係を示す対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第１の書き込み要求に付加して前記記憶装置に送信し、
前記複数の分割領域ごとに書き込み頻度を計測し、
書き込み頻度の計測結果に基づいて、前記対応管理情報が示す前記対応関係を更新し、
前記対応関係の更新後に前記書き込みアドレスへの書き込みが要求されると、前記対応管理情報に基づいて、前記複数の識別番号のうち前記書き込みアドレスを含む分割領域に対応付けられた識別番号を、前記書き込みアドレスに対する第２の書き込み要求に付加して前記記憶装置に送信する、
処理を実行させるストレージ制御プログラム。
【０１９１】
（付記９）  前記複数の識別番号は、前記記憶装置が、書き込みデータを前記書き込みデータに付加された識別番号に応じて複数の管理領域のうち異なる管理領域に書き込むように制御するための情報であり、前記複数の管理領域のそれぞれは、前記記憶装置の物理記憶領域に含まれる、データ消去の単位となる領域である、
付記８記載のストレージ制御プログラム。
【０１９２】
（付記１０）  前記対応関係の更新は、前記記憶装置に書き込まれる累積データ量が所定量増加するたびに実行される、
付記８または９記載のストレージ制御プログラム。
【０１９３】
（付記１１）  前記複数の分割領域の数より前記複数の識別番号の数が少ない場合、前記対応関係の更新では、前記複数の識別番号の少なくとも１つを前記複数の分割領域のうち２以上の分割領域に対応付ける、
付記８〜１０のいずれか１つに記載のストレージ制御プログラム。
【０１９４】
（付記１２）  前記コンピュータに、
前記記憶装置の物理記憶領域の空き容量が所定容量より小さくなった場合、前記記憶装置に書き込まれたデータのうち、書き込み時に前記複数の識別番号がそれぞれ付加されたデータのデータ総量を取得し、
前記複数の識別番号の中から、前記データ総量が所定基準量より大きい特定識別番号を特定し、
書き込み時に前記特定識別番号が付加されたデータについてのガベージコレクションを前記記憶装置に実行させる、
処理をさらに実行させる付記８〜１１のいずれか１つに記載のストレージ制御プログラム。
【０１９５】
（付記１３）  前記コンピュータに、
前記複数の識別番号のそれぞれに対応する書き込みデータ量が登録されたデータ量管理情報を記憶部に格納し、
前記記憶装置に対して、前記複数の識別番号のいずれかを付加して書き込み要求を送信するたびに、付加した識別番号に対応する前記書き込みデータ量に書き込みを要求したデータのサイズを加算する、
処理をさらに実行させ、
前記データ総量の取得では、その時点での前記複数の識別番号にそれぞれ対応する前記書き込みデータ量を、前記データ総量として前記データ量管理情報から読み出す、
付記１２記載のストレージ制御システム。
【０１９６】
（付記１４）  前記コンピュータに、
前記複数の分割領域の中から、前回の前記対応関係の更新前に前記特定識別番号が対応付けられており、かつ、前回の前記対応関係の更新後に書き込みが要求されていない特定分割領域を特定し、
前記対応管理情報に基づいて、前記複数の識別番号の中から前記特定分割領域に現在対応付けられている現行識別番号を特定し、
前回の前記対応関係の更新前に前記特定分割領域に書き込まれたデータを前記記憶装置から読み出し、読み出したデータに前記現行識別番号を付加して前記記憶装置に書き込みし直す、
処理をさらに実行させる付記１２または１３記載のストレージ制御システム。
【符号の説明】
【０１９７】
１０  ストレージ制御装置
１１  記憶部
１１ａ  対応管理情報
１２  制御部
２０  記憶装置
２１  論理記憶領域
２２  物理記憶領域
２２ａ〜２２ｃ  管理領域
ＡＤ１，ＡＤ２  書き込みアドレス
Ｄ１ａ，Ｄ１ｂ，Ｄ２ａ，Ｄ２ｂ  データ
Ｒ１〜Ｒ３  分割領域
Ｓ１〜Ｓ４  ステップ
【図１】
2019016320.tif 000003
【図２】
2019016320.tif 000004
【図３】
2019016320.tif 000005
【図４】
2019016320.tif 000006
【図５】
2019016320.tif 000007
【図６】
2019016320.tif 000008
【図７】
2019016320.tif 000009
【図８】
2019016320.tif 000010
【図９】
2019016320.tif 000011
【図１０】
2019016320.tif 000012
【図１１】
2019016320.tif 000013
【図１２】
2019016320.tif 000014
【図１３】
2019016320.tif 000015
【図１４】
2019016320.tif 000016
【図１５】
2019016320.tif 000017
【図１６】
2019016320.tif 000018
【図１７】
2019016320.tif 000019
【図１８】
2019016320.tif 000020
【図１９】
2019016320.tif 000021
【図２０】
2019016320.tif 000022
【図２１】
2019016320.tif 000023
【図２２】
2019016320.tif 000024