(57)【要約】【課題】重複除去技術が適用されたストレージにおける削除要求に対する応答にかかる時間を短縮すること。【解決手段】図１の上部にある（１）、（２）で示すように、ストレージ制御装置１０１は、ＵＮＭＡＰコマンドを受け付けたことに応じて、論理アドレス情報１１１における削除対象データの論理アドレスに対応する予約情報を削除の予約有りに更新する。そして、論理アドレス情報１１１の予約情報を更新したことに応じて、図１の上部にある（３）で示すように、ストレージ制御装置１０１は、削除要求の要求元、すなわちＵＮＭＡＰコマンドの発行元に応答情報を送信する。また、応答情報を送信したこととは非同期に、図１の下部にある（４）で示すように、ストレージ制御装置１０１は、論理アドレス情報１１１を参照して物理アドレス情報１１２における論理アドレスの数を更新する。【選択図】図１
2018116329.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域を分割した各分割領域であって互いに重複しないデータを有する前記各分割領域を有するストレージにおいて、複数の論理アドレスの各論理アドレスに対応して、前記各分割領域のうち前記各論理アドレスに割り当てたいずれかの分割領域を識別する識別情報と前記いずれかの分割領域のデータの削除の予約の有無を示す予約情報とを有する論理アドレス情報と、前記各分割領域に対応して、当該各分割領域を参照する論理アドレスに関する参照情報と当該各分割領域の物理アドレスとを有する物理アドレス情報とを記憶する記憶部と、
削除対象データの論理アドレスの範囲を含む削除要求を受け付けたことに応じて、前記論理アドレス情報における前記削除対象データの論理アドレスの範囲に対応する予約情報を削除の予約有りに更新し、前記削除要求の要求元に前記削除要求の応答情報を送信する削除処理を行い、前記削除処理とは独立して、前記論理アドレス情報を参照して前記論理アドレスに関する参照情報を更新する更新処理を行う、制御部と、
を有することを特徴とするストレージ制御装置。
【請求項２】
前記制御部は、
書き込み対象データと前記書き込み対象データの論理アドレスの範囲とを含む書き込み要求を受け付けたことに応じて、前記論理アドレス情報における前記書き込み対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、当該予約情報を削除の予約無しに更新する、
ことを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記制御部は、
読み出し対象データの論理アドレスの範囲を含む読み出し要求を受け付けたことに応じて、前記論理アドレス情報における前記読み出し対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、前記読み出し要求の応答に含まれる読み出しデータのうちの当該予約情報に対応するデータを、論理アドレスに分割領域が割り当てられていない際に設定される所定値に設定する、
ことを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
前記制御部は、
前記削除要求を受け付けたことに応じて、前記削除対象データの論理アドレスの範囲が所定のデータサイズを超える場合、前記削除対象データの論理アドレスの範囲と、前記論理アドレス情報における前記削除対象データの論理アドレスの範囲を分割した各削除対象分割範囲に対応する各予約情報を削除の予約有りへ更新済か否かを示す各更新情報とを有する管理情報を、前記記憶部に格納し、
前記管理情報を格納したことに応じて、前記削除処理を行い、
前記削除処理とは独立して、前記管理情報を参照して、前記論理アドレス情報における予約情報を更新し、
更新した前記論理アドレス情報を参照して、前記更新処理を行う、
ことを特徴とする請求項１〜３のいずれか一つに記載のストレージ制御装置。
【請求項５】
前記制御部は、
書き込み対象データと前記書き込み対象データの論理アドレスの範囲とを含む書き込み要求を受け付けたことに応じて、前記管理情報における前記書き込み対象データの論理アドレスの範囲を含む削除対象分割範囲に対応する更新情報が、当該削除対象分割範囲に対応する予約情報を削除の予約有りへ更新していないことを示す場合、当該予約情報を削除の予約有りへ更新するとともに、当該更新情報を削除の予約有りへ更新済に更新し、
更新した前記論理アドレス情報における前記書き込み対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、当該予約情報を削除の予約無しに更新する、
ことを特徴とする請求項４に記載のストレージ制御装置。
【請求項６】
前記制御部は、
読み出し対象データの論理アドレスの範囲を含む読み出し要求を受け付けたことに応じて、前記管理情報における前記読み出し対象データの論理アドレスの範囲を含む削除対象分割範囲に対応する更新情報が、当該削除対象分割範囲に対応する予約情報を削除の予約有りへ更新していないことを示す場合、前記読み出し要求の応答に含まれる読み出しデータのうちの当該削除対象分割範囲のデータを、論理アドレスに分割領域が割り当てられていない際に設定される所定値に設定し、
前記論理アドレス情報における前記読み出し対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、前記読み出しデータのうちの当該予約情報に対応するデータを、前記所定値に設定する、
ことを特徴とする請求項４または５に記載のストレージ制御装置。
【請求項７】
前記制御部は、
前記管理情報を、前記記憶部よりアクセス性能が高い他の記憶部に格納することを特徴とする請求項４〜６のいずれか一つに記載のストレージ制御装置。
【請求項８】
コンピュータに、
記憶領域を分割した各分割領域であって互いに重複しないデータを有する前記各分割領域を有するストレージに対して、削除対象データの論理アドレスの範囲を含む削除要求を受け付けたことに応じて、複数の論理アドレスの各論理アドレスに対応して前記各分割領域のうち前記各論理アドレスに割り当てたいずれかの分割領域を識別する識別情報と前記いずれかの分割領域のデータの削除の予約の有無を示す予約情報とを有する論理アドレス情報における前記削除対象データの論理アドレスの範囲に対応する予約情報を削除の予約有りに更新し、
前記削除要求の要求元に前記削除要求の応答情報を送信する削除処理を行い、
前記削除処理とは独立して、前記論理アドレス情報を参照して、前記各分割領域に対応して当該各分割領域を参照する論理アドレスに関する参照情報と当該各分割領域の物理アドレスとを有する物理アドレス情報における前記論理アドレスに関する参照情報を更新する更新処理を行う、
処理を実行させることを特徴とするストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
従来、ストレージ内の複数のデータの中から同一のデータを検出し、複数の同一のデータのうち１つのデータを残して他のデータを除去し、残したデータの物理アドレスに対応して、残したデータを参照する論理アドレスの数を管理する重複除去技術がある。
【０００３】
関連する先行技術として、例えば、各チャンクグループと、各チャンクグループに属するいずれかのチャンクデータとを有するデータとの関連を表すテーブルの一部のレコードをメモリに保持し、削除要求に対して非同期にテーブルに反映するものがある。また、複数の記憶装置から形成される第１の記憶領域に重複除去された第１のデータ列を格納し、第１のデータ列が重複除去される前のデータ列を基に生成された第２のデータ列を、第１の記憶領域と同一性能特性の第２の記憶領域の連続領域に格納する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１５／１９８３７１号
【特許文献２】国際公開第２０１４／１３６１８３号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術によれば、重複除去技術が適用されたストレージに対して削除要求を行うと、削除要求に対する応答が遅延することがある。具体的には、削除対象データが大きい程、論理アドレスから対応する物理アドレスを特定する回数と、残したデータを参照する論理アドレスの数の更新箇所とが増加し、削除要求に対する応答が遅延することになる。そして、削除要求に対する応答が遅延した結果、削除要求の要求元に、削除要求のタイムアウト時間以内に応答することができない場合がある。
【０００６】
１つの側面では、本発明は、重複除去技術が適用されたストレージにおける削除要求に対する応答にかかる時間を短縮することができるストレージ制御装置、およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
１つの実施態様では、ストレージ制御装置、およびストレージ制御プログラムは、記憶領域を分割した各分割領域であって互いに重複しないデータを有する各分割領域を有するストレージにおいて、複数の論理アドレスの各論理アドレスに対応して、各分割領域のうち各論理アドレスに割り当てたいずれかの分割領域を識別する識別情報といずれかの分割領域のデータの削除の予約の有無を示す予約情報とを有する論理アドレス情報と、各分割領域に対応して、当該各分割領域を参照する論理アドレスに関する参照情報と当該各分割領域の物理アドレスとを有する物理アドレス情報とを記憶する記憶部と、削除対象データの論理アドレスの範囲を含む削除要求を受け付けたことに応じて、論理アドレス情報における削除対象データの論理アドレスの範囲に対応する予約情報を削除の予約有りに更新し、削除要求の要求元に削除要求の応答情報を送信する削除処理を行い、削除処理とは独立して、論理アドレス情報を参照して論理アドレスに関する参照情報を更新する更新処理を行う。
【発明の効果】
【０００８】
一つの側面では、本発明は、重複除去技術が適用されたストレージにおける削除要求に対する応答にかかる時間を短縮することが可能となる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施の形態にかかるストレージ制御装置１０１の動作例を示す説明図である。
【図２】図２は、ストレージシステム２００の構成例を示す説明図である。
【図３】図３は、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇのＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。
【図４】図４は、実施例１におけるＣＭ２１１の機能構成例を示す説明図である。
【図５】図５は、実施例１におけるＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。
【図６】図６は、実施例２におけるＣＭ２１１の機能構成例を示す説明図である。
【図７】図７は、実施例２におけるＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。
【図８】図８は、実施例２におけるＵＮＭＡＰコマンド受け付け時処理手順の一例を示すフローチャートである。
【図９】図９は、実施例２におけるＷｒｉｔｅＩ／Ｏコマンド受け付け時処理手順の一例を示すフローチャートである。
【図１０】図１０は、ＷｒｉｔｅＩ／Ｏ範囲とＵＮＭＡＰ予約フラグの管理単位とが一致しない場合の書き込みデータの一例を示す説明図である。
【図１１】図１１は、実施例２におけるＲｅａｄＩ／Ｏコマンド受け付け時処理手順の一例を示すフローチャートである。
【図１２】図１２は、実施例２における非同期処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、開示のストレージ制御装置、およびストレージ制御プログラムの実施の形態を詳細に説明する。
【００１１】
図１は、本実施の形態にかかるストレージ制御装置１０１の動作例を示す説明図である。ストレージ制御装置１０１は、ストレージを制御するコンピュータである。具体的には、ストレージ制御装置１０１は、ストレージの記憶領域を利用者に提供する。より具体的には、ストレージ制御装置１０１は、重複除去（Ｄｅｄｕｐｌｉｃａｔｉｏｎ）技術が適用されたボリュームを利用者が利用するホスト装置に提供する。ホスト装置は、例えば、仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を動作させる仮想マシンサーバ、動画を配信する動画配信サーバ等といったサーバである。
【００１２】
重複除去技術は、ストレージ内の複数のデータの中から同一のデータを検出し、複数の同一のデータのうち１つのデータを残して他のデータを除去し、残したデータの物理アドレスに対応して、残したデータを参照する論理アドレスの数を管理する。また、重複除去技術は、残したデータを圧縮してもよい。残したデータを圧縮するとそれぞれ異なるサイズとなるため、物理データのエントリサイズは可変長となる。重複除去が適用されたボリュームを、「Ｄｅｄｕｐｌｉｃａｔｉｏｎボリューム」と呼称する。
【００１３】
また、ストレージ制御装置１０１は、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇを適用してもよい。ここで、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇとは、仮想ボリューム作成時には物理データ領域を割り当てず、ホスト装置から書き込みがあった箇所だけに物理データ格納領域を割り当てることにより、物理容量の消費を実際の書き込み量までに抑制する機能である。この機能を実現するために、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇでは、アドレス変換テーブルを持ち、実際の物理的配置を示す物理アドレスと論理アドレスとが異なってもアクセス可能とする。また、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇでは、割り当てた物理データ格納領域を解放するコマンドである、データ削除コマンドが存在する。解放された物理データ格納領域は、新たな書き込み要求に対して割り当てを行うための空き物理容量として再利用が可能になる。
【００１４】
以下、削除要求を、「ＵＮＭＡＰコマンド」と呼称する。また、書き込み要求を、「ＷｒｉｔｅＩ／Ｏコマンド」と呼称する。同様に、読み出し要求を、「ＲｅａｄＩ／Ｏコマンド」と呼称する。アドレス変換テーブルの一例や、ＵＮＭＡＰコマンドの例については、図３で示す。
【００１５】
ＵＮＭＡＰコマンドによる削除対象データのサイズは、数［ＧＢ］のオーダーとなることがあり、通常のＲｅａｄＩ／ＯコマンドやＷｒｉｔｅＩ／Ｏコマンドの対象データと比較して大きなデータとなる。例えば、ホスト装置が仮想マシンサーバや動画配信サーバである場合、ＶＭそのもののデータや、動画ファイル等の大きなファイルのＵＮＭＡＰコマンドが発行されることがある。
【００１６】
しかしながら、Ｄｅｄｕｐｌｉｃａｔｉｏｎボリュームに対してＵＮＭＡＰコマンドを行うと、ＵＮＭＡＰコマンドに対する応答が遅延することがある。具体的には、削除対象データが大きい程、論理アドレスから対応する物理アドレスを特定する回数と、残したデータを参照する論理アドレスの数の更新箇所が増加し、ＵＮＭＡＰコマンドに対する応答が遅延することになる。そして、ＵＮＭＡＰコマンドに対する応答が遅延した結果、ホスト装置に、ＵＮＭＡＰコマンドのタイムアウト時間以内に応答することができない場合がある。
【００１７】
また、論理アドレスと物理アドレスとを管理する管理情報を、メモリに記憶することにより、ＵＮＭＡＰコマンドに対する応答にかかる時間を短縮することが考えられる。しかしながら、Ｄｅｄｕｐｌｉｃａｔｉｏｎボリュームでは、４［ＫＢ］程度の細かい単位でデータを管理するため、管理情報の全てをメモリ内に配置することができず、管理情報の一部をディスク内に配置することになる。そして、削除対象データが大きい場合、ディスク上の管理情報にアクセスすると、ＵＮＭＡＰコマンドのタイムアウト時間以内に応答することが難しくなる。
【００１８】
また、Ｄｅｄｕｐｌｉｃａｔｉｏｎボリュームでは、複数の論理アドレスが同一のデータに対応することがある。従って、Ｄｅｄｕｐｌｉｃａｔｉｏｎボリュームでは、以下の２つのテーブルを記憶することがある。１つ目のテーブルは、論理アドレスに対応して、論理アドレスと、データを記憶する領域の識別情報とを管理するテーブルである。２つ目のテーブルは、データを記憶する領域の識別情報と、該当のデータを参照する論理アドレスに関する参照情報と、該当の領域の物理アドレスとを管理するテーブルである。そして、ＵＮＭＡＰコマンドは、論理アドレスで指定される。また、論理アドレスに関する参照情報は、該当のデータを参照する論理アドレスの数でもよいし、該当のデータを参照する論理アドレスそのものでもよい。以下の記載では、論理アドレスに関する参照情報は、該当のデータを参照する論理アドレスの数であるとする。
【００１９】
ここで、ＵＮＭＡＰコマンドで指定される論理アドレスから対応する領域を特定し、特定した領域のデータを参照する論理アドレスの数を更新する際に、論理アドレスは連続していたとしても、特定した領域が連続であるとは限らない。以上により、特定した領域のデータを参照する論理アドレスの数を更新する処理は、前述した２つ目のテーブルに対するランダムアクセスが発生する。２つ目のテーブルがＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）といったランダムアクセスを苦手とするディスクに格納される場合、ＵＮＭＡＰコマンドに対する応答にかかる時間が、より遅延することになる。
【００２０】
具体的には、２６．２５［ＧＢ］のファイルを削除する場合、論理アドレスの数の更新箇所は、２６．２５［ＧＢ］／４［ＫＢ］＝６．５６［Ｍ個］となる。そして、ディスクのランダムＷｒｉｔｅＩ／Ｏ性能が、１０００［ＩＯＰＳ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）］であるとすると、６．５６［Ｍ個］／１０００＝６７１７［秒］かかることになる。ホスト装置からのタイムアウト時間は、一般的に３０［秒］程度なので、タイムアウトにより、ＵＮＭＡＰコマンドのエラー応答を送信することになる。また、ＵＮＭＡＰコマンドによる処理が完了せず一部の解放可能な物理データ格納領域が解放されないことになる。
【００２１】
そこで、本実施の形態では、論理アドレスを管理するテーブルに削除予約のフラグを設け、ＵＮＭＡＰコマンドの論理アドレスのフラグをＯＮにしたら、ＵＮＭＡＰコマンドに応答することについて説明する。
【００２２】
図１を用いて、ストレージ制御装置１０１の動作例について説明する。ストレージ制御装置１０１は、ストレージ１０２を制御する。そして、ストレージ制御装置１０１は、論理アドレス情報１１１と、物理アドレス情報１１２とにアクセス可能である。
【００２３】
論理アドレス情報１１１は、複数の論理アドレスの各論理アドレスに対応して、ストレージ１０２の記憶領域を分割した各分割領域のうち、各論理アドレスに割り当てられたいずれかの分割領域を識別する識別情報と、予約情報とを有する。ここで、各分割領域が有するデータは、重複除去されたデータであるため、お互いに重複しないデータである。また、各分割領域は、均等に分割された領域でもよいし、不均等に分割された領域でもよい。また、論理アドレス情報１１１が管理する論理アドレスには、分割領域が割り当てられていない論理アドレスがあってもよい。分割領域が割り当てられていない論理アドレスには、分割領域が割り当てられていないことを示す識別情報が設定される。以下の説明では、この識別情報は、「ＩＮＶＡＬＩＤ」であるとする。また、分割領域が割り当てられていない論理アドレスにＲｅａｄＩ／Ｏコマンドが発生した場合、ストレージ制御装置１０１は、読み出されるデータを、論理アドレスに分割領域が割り当てられていない際に設定される所定値に設定する。
【００２４】
また、物理アドレス情報１１２は、各分割領域に対応して、各分割領域を参照する論理アドレスの数と各分割領域の物理アドレスとを有する。予約情報は、いずれかの分割領域のデータの削除の予約の有無を示す。図１の例では、予約情報は、予約の有りを示す「予約有り」か、予約の無しを示す「予約無し」かのいずれかとなる。
【００２５】
例えば、図１の例では、論理アドレス情報１１１は、エントリ１２１−０〜３を有する。また、物理アドレス情報１１２は、エントリ１２２−０〜２を有する。そして、ストレージ１０２の記憶領域を分割した分割領域１２３−０〜２は、それぞれ、お互いに重複しないデータＡ〜Ｃを有する。また、以下の説明では、同種の要素を区別する場合には、「エントリ１２１−０」、「エントリ１２１−１」のように参照符号を使用し、同種の要素を区別しない場合には、「エントリ１２１」のように参照符号のうちの共通番号だけを使用することがある。
【００２６】
分割領域１２３の識別情報は、それぞれを識別さえできればどのような情報でもよく、例えば、文字や数値を組み合わせた文字列でもよい。図１の例では、分割領域１２３を識別する識別情報は、説明の簡略化のため、分割領域１２３の共通番号を除いた番号とする。例えば、分割領域１２３−０を識別する識別情報は、「０」となる。
【００２７】
例えば、エントリ１２１−０は、論理アドレス０ｘ００に関するエントリであり、論理アドレス０ｘ００に分割領域１２３−０が割り当てられており、分割領域１２３−０のデータの削除の予約が無いことを示す。また、エントリ１２２−０は、分割領域１２３−０に関するエントリであり、分割領域１２３−０を参照する論理アドレスの数が２つであり、分割領域１２３−０の物理アドレスが０ｘ００であることを示す。
【００２８】
図１の上部にある（１）で示すように、ストレージ制御装置１０１は、ＵＮＭＡＰコマンドを受け付ける。ここで、ＵＮＭＡＰコマンドの発行元は、ホスト装置であるが、これに限らない。例えば、データのマイグレーションを目的として、ストレージ制御装置１０１自身が、ＵＮＭＡＰコマンドを発行してもよい。そして、ＵＮＭＡＰコマンドには、削除対象データの論理アドレスの範囲が含まれる。論理アドレスの範囲として、ＵＮＭＡＰコマンドには、先頭アドレスと末尾アドレスとが含まれてもよいし、先頭アドレスと、先頭アドレスからのデータサイズとが含まれてもよい。また、削除対象データの論理アドレスの範囲を、「ＵＮＭＡＰ範囲」と呼称する。図１の例では、削除対象データの論理アドレスの範囲が、０ｘ１０〜０ｘ１Ｆであり、エントリ１２１−２、３に関する論理アドレスである。
【００２９】
次に、図１の上部にある（２）で示すように、ストレージ制御装置１０１は、ＵＮＭＡＰコマンドを受け付けたことに応じて、論理アドレス情報１１１における削除対象データの論理アドレスに対応する予約情報を削除の予約有りに更新する。図１の例では、削除対象データの論理アドレスに対応する論理アドレス情報１１１のエントリは、エントリ１２１−２、３である。従って、ストレージ制御装置１０１は、エントリ１２１−２、３の予約情報を、予約有りに更新する。
【００３０】
そして、論理アドレス情報１１１の予約情報を更新したことに応じて、図１の上部にある（３）で示すように、ストレージ制御装置１０１は、削除要求の要求元、すなわちＵＮＭＡＰコマンドの発行元に応答情報を送信する削除処理を行う。
【００３１】
また、削除処理とは独立して、図１の下部にある（４）で示すように、ストレージ制御装置１０１は、論理アドレス情報１１１を参照して物理アドレス情報１１２における論理アドレスに関する参照情報を更新する更新処理を行う。削除処理と独立して更新処理を行う例として、ストレージ制御装置１０１は、削除処理と更新処理とを並列に実行してもよいし、更新処理を、削除処理とは非同期で行ってもよい。ここで、同期とは、ある処理の実行が完了するまで、他の処理を実行しない方式である。これに対し、非同期とは、ある処理が実行の完了に関係なく、他の処理を実行する方式である。例えば、ストレージ制御装置１０１は、一定時間ごとに、前述した更新する処理を実行してもよい。または、ストレージ制御装置１０１は、受け付けたＵＮＭＡＰコマンドの数が所定数以上になった際や、ＵＮＭＡＰコマンドで指定された論理アドレスの範囲の合計が所定サイズ以上になった際の一定時間後に、前述した更新する処理を実行してもよい。
【００３２】
図１の例では、エントリ１２１−２、３の予約情報が「予約有り」となるため、ストレージ制御装置１０１は、エントリ１２１−２、３に対応するエントリ１２２−０、２の論理アドレスの数をそれぞれ減じる。なお、図１では示していないが、エントリ１２２−０、２の論理アドレスの数をそれぞれ減じた後、ストレージ制御装置１０１は、分割領域１２３−２を解放し、エントリ１２１−２、３の識別情報を「ＩＮＶＡＬＩＤ」に設定する。
【００３３】
以上により、ストレージ制御装置１０１は、論理アドレス情報１１１の予約情報を更新するだけでＵＮＭＡＰコマンドに応答することができるため、応答にかかる時間を短縮することができる。より具体的には、ストレージ制御装置１０１は、論理アドレスから分割領域の特定や、物理アドレス情報１１２へのランダムアクセスをせずに、ＵＮＭＡＰコマンドに応答することができる。ここで、論理アドレス情報１１１への更新が発生するが、論理アドレス情報１１１への更新はシーケンシャルアクセスとなるため、更新数が多くとも、物理アドレス情報１１２への更新と比較して短時間で行うことができる。
【００３４】
本実施の形態は、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）技術が適用されたボリュームに対しても適用することができる。以下、図２を用いて、ストレージ制御装置１０１をストレージシステム２００に適用した場合について説明する。
【００３５】
図２は、ストレージシステム２００の構成例を示す説明図である。図２に示すストレージシステム２００は、ストレージ装置２０１と、ホスト装置２０２とを有する。ストレージ装置２０１は、１または複数のＣＭ２１１（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）と、ＤＥ（Ｄｒｉｖｅ  Ｅｎｃｌｏｓｕｒｅ）２１２とを含む。ＣＭ２１１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２２１と、メモリ２２２と、フラッシュＲＯＭ２２３と、ＣＡ（Ｃｈａｎｎｅｌ  Ａｄａｐｔｅｒ）２２４と、ＤＩ（Ｄｉｓｋ  Ｉｎｔｅｒｆａｃｅ）２２５とを有する。ＤＥ２１２は、１または複数のディスク２２６を有する。
【００３６】
ここで、ＣＭ２１１は、図１に示したストレージ制御装置１０１に相当する。また、ディスク２２６は、図１に示したストレージ１０２に相当する。
【００３７】
ストレージ装置２０１は、ディスク２２６の記憶領域を他のコンピュータに提供する。ホスト装置２０２は、ストレージ装置２０１に接続されるコンピュータである。そして、ホスト装置２０２は、ストレージ装置２０１が提供する記憶領域を利用する。例えば、ホスト装置２０２は、Ｗｅｂサーバである。
【００３８】
ＣＭ２１１は、ストレージ装置２０１を制御する装置である。ＤＥ２１２は、ディスク２２６を含む筐体である。ＣＰＵ２２１は、ＣＭ２１１の全体の制御を司る装置である。また、ＣＰＵ２２１は、複数のコアを有してもよい。メモリ２２２は、ＣＰＵ２２１内のキャッシュメモリとして動作する揮発メモリである。メモリ２２２は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）が採用される。
【００３９】
フラッシュＲＯＭ２２３は、本実施の形態におけるストレージ制御プログラムを記憶する不揮発メモリである。フラッシュＲＯＭ２２３は、例えば、ＮＯＲフラッシュメモリ、ＮＡＮＤフラッシュメモリを採用することができる。
【００４０】
ＣＡ２２４は、ホスト装置２０２とのインターフェースを司る装置である。ＤＩ２２５は、ディスク２２６とのインターフェースを司る装置である。
【００４１】
次に、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇのＵＮＭＡＰコマンド受け付け時の動作例について、Ｄｅｄｕｐｌｉｃａｔｉｏｎが適用されていないボリュームに対する動作例を示す。
【００４２】
図３は、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇのＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。図３では、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇボリュームにおいて、ＵＮＭＡＰコマンドを受け付けた場合について説明する。図３では、論理アドレスと、物理アドレスとを対応付けるアドレス変換テーブル３０１と、物理データを格納する物理データ格納領域３０２とを示す。図３で示すアドレス変換テーブル３０１は、エントリ３１１−０〜３を有する。図３の上部で示すように、エントリ３１１−０は、論理アドレス０ｘ００と物理アドレス０ｘ１８との対応関係を記憶する。同様に、エントリ３１１−１〜３は、それぞれ、論理アドレス０ｘ０８と物理アドレス０ｘ００との対応関係、論理アドレス０ｘ１０と物理アドレス０ｘ１０との対応関係、論理アドレス０ｘ１８と物理アドレス０ｘ０８との対応関係を記憶する。
【００４３】
そして、物理データ格納領域３０２は、分割領域３１２−０〜３を有する。分割領域３１２−０〜３は、それぞれ、データＢ、Ａ、Ｃ、Ａを有する。論理アドレス０ｘ００、０ｘ０８、０ｘ１０、０ｘ１８には、それぞれ、分割領域３１２−３、０、２、１が割り当てられている。
【００４４】
ＵＮＭＡＰコマンドには、パラメータとして、削除対象のＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）と、削除対象の先頭の論理アドレスと、削除対象のデータサイズとが含まれる。
【００４５】
ここで、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇボリュームに対して、論理アドレス０ｘ１０〜０ｘ１Ｆに対するＵＮＭＡＰコマンドが発行されたとする。この場合、アドレス変換テーブル３０１を管理する装置は、図３の下部に示すように、論理アドレス０ｘ１０、０ｘ１８に割り当てられた分割領域３１２−２、１を解放する。解放された分割領域３１２−２、１は、再利用が可能となる。
【００４６】
（実施例１）
次に、図１で示したストレージ制御装置１０１を、図２で示したＣＭ２１１に適用した実施例１におけるＣＭ２１１の機能構成例について、図４を用いて説明する。
【００４７】
図４は、実施例１におけるＣＭ２１１の機能構成例を示す説明図である。実施例１におけるＣＭ２１１は、制御部４００を有する。制御部４００は、受け付け部４０１と、予約情報更新部４０２と、送信部４０３と、リファレンスカウント更新部４０４と、書き込み部４０５と、読み出し部４０６とを含む。制御部４００は、記憶装置に記憶されたプログラムをＣＰＵ２２１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したフラッシュＲＯＭ２２３などである。また、各部の処理結果は、メモリ２２２や、ＣＰＵ２２１のレジスタ、ＣＰＵ２２１のキャッシュメモリ等に格納される。
【００４８】
また、ＣＭ２１１は、記憶部４１０にアクセス可能である。記憶部４１０は、ディスク２２６といった記憶装置に格納されている。そして、記憶部４１０は、ブロックマップ４１１と、コンテナ４１２と、物理データ格納領域４１３とを有する。ブロックマップ４１１は、図１に示した論理アドレス情報１１１に相当する。また、コンテナ４１２は、図１に示した物理アドレス情報１１２に相当する。
【００４９】
ブロックマップ４１１は、論理アドレスと、ＵＮＭＡＰ予約フラグと、スロット番号というフィールドを含む。そして、ＵＮＭＡＰ予約フラグは、図１で示した予約情報に相当する。また、ＵＮＭＡＰ予約フラグフィールドには、予約有りを示す「ＯＮ」か、予約無しを示す「ＯＦＦ」かが格納される。「ＯＮ」、「ＯＦＦ」は、どのような値でもよく、例えば、それぞれ１、０という値である。スロット番号は、図１で示した分割領域１２３を識別する識別情報に相当する。図４の例では、スロット番号は、物理データ格納領域４１３を分割した分割領域を識別する識別情報となる。
【００５０】
コンテナ４１２は、スロット番号と、リファレンスカウントと、圧縮後ブロックサイズと、物理アドレスというフィールドを含む。リファレンスカウントは、図１で示した、論理アドレスの数に相当する。図４の例では、リファレンスカウントは、スロット番号で示される分割領域のデータを参照する論理アドレスの数となる。圧縮後ブロックサイズは、圧縮後のブロックサイズである。データを圧縮するとデータの内容に応じてそれぞれ異なるサイズとなるため、スロット番号が示す分割領域のサイズは可変長となる。
【００５１】
また、図４の例では、ブロックマップ４１１〜物理データ格納領域４１３は、同一のディスク２２６内に存在するが、異なるディスク２２６に存在してもよい。さらに、ブロックマップ４１１〜物理データ格納領域４１３は、複数のディスク２２６にまたがってもよい。ただし、ブロックマップ４１１の各エントリは、論理アドレスで連続するようにディスク２２６に格納されることが好ましい。ブロックマップ４１１〜物理データ格納領域４１３の記憶内容の一例は、図５で示す。
【００５２】
受け付け部４０１は、ホスト装置２０２からコマンドを受け付ける。具体的には、受け付け部４０１は、ホスト装置２０２から、ＵＮＭＡＰコマンド、ＷｒｉｔｅＩ／Ｏコマンド、ＲｅａｄＩ／Ｏコマンドを受け付ける。ここで、ＷｒｉｔｅＩ／Ｏコマンドには、書き込み対象データと、書き込み対象データの論理アドレスの範囲とが含まれる。同様に、ＲｅａｄＩ／Ｏデータには、読み出し対象データの論理アドレスの範囲が含まれる。
【００５３】
以下、用語を統一性のあるものとするため、書き込み対象データを、「Ｗｒｉｔｅデータ」と呼称する。また、書き込み対象データの論理アドレスの範囲を、「ＷｒｉｔｅＩ／Ｏ範囲」と呼称する。また、読み出し対象データの論理アドレスの範囲を、「ＲｅａｄＩ／Ｏ範囲」と呼称する。また、ＲｅａｄＩ／Ｏコマンドでは、ＲｅａｄＩ／Ｏ範囲のデータを応答に含めて送信するが、このＲｅａｄＩ／Ｏ範囲のデータを、「Ｒｅａｄデータ」と呼称する。
【００５４】
予約情報更新部４０２は、受け付け部４０１がＵＮＭＡＰコマンドを受け付けたことに応じて、ブロックマップ４１１における削除対象データの論理アドレスに対応するＵＮＭＡＰ予約フラグを「ＯＮ」に更新する。
【００５５】
送信部４０３は、予約情報更新部４０２がブロックマップ４１１のＵＮＭＡＰ予約フラグを更新した後、ＵＮＭＡＰコマンドの発行元となるホスト装置２０２に、ＵＮＭＡＰコマンドの応答情報を送信する削除処理を行う。
【００５６】
リファレンスカウント更新部４０４は、送信部４０３による削除処理とは独立して、ブロックマップ４１１を参照して、コンテナ４１２のリファレンスカウントを更新する更新処理を行う。具体的には、リファレンスカウント更新部４０４は、更新処理として、ブロックマップ４１１のＵＮＭＡＰ予約フラグが「ＯＮ」となったスロット番号に対応するコンテナ４１２のリファレンスカウントを１減算する。さらに、リファレンスカウント更新部４０４は、ブロックマップ４１１のＵＮＭＡＰ予約フラグが「ＯＮ」となったスロット番号を、論理アドレスに分割領域が割り当てられていないことを示す識別子として「ＩＮＶＡＬＩＤ」を設定する。また、リファレンスカウント更新部４０４は、更新の結果、リファレンスカウントが０となった分割領域を解放する。
【００５７】
書き込み部４０５は、受け付け部４０１がＷｒｉｔｅＩ／Ｏコマンドを受け付けたことに応じて、ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」である場合、「ＯＦＦ」に更新する。さらに、書き込み部４０５は、通常の重複除去の処理として、Ｗｒｉｔｅデータと物理データ格納領域４１３内の各分割領域が有する各データとの重複を除去したデータを各分割領域のうちのいずれかの分割領域に書き込む。
【００５８】
読み出し部４０６は、受け付け部４０１がＲｅａｄＩ／Ｏコマンドを受け付けたことに応じて、ブロックマップ４１１におけるＲｅａｄＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」である場合、Ｒｅａｄデータを、所定値に設定する。この所定値は、論理アドレスに分割領域が割り当てられていない際に設定される値である。論理アドレスに分割領域が割り当てられていない場合としては、ＴｈｉｎＰｒｏｖｉｓｉｏｎｉｎｇボリューム作成直後の時や、ＵＮＭＡＰコマンドにより分割領域が解放された時である。また、アドレスに分割領域が割り当てられていない場合、対応するスロット番号には、「ＩＮＶＡＬＩＤ」が設定される。また、所定値は、どのような値でもよい。例えば、所定値は、全て０のデータや、０ｘＦＦのデータである。以下の記載では、所定値を、「０データ」と呼称する。ここで、Ｒｅａｄデータを０データに設定する理由は、分割領域が解放されている論理アドレスにＲｅａｄＩ／Ｏコマンドが発行された際のＲｅａｄデータと同一の結果にするためである。
【００５９】
また、ＲｅａｄＩ／Ｏ範囲の一部の範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」であり、他の範囲に対応するＵＮＭＡＰ予約フラグが「ＯＦＦ」となる場合もある。この場合、読み出し部４０６は、Ｒｅａｄデータのうちの「ＯＮ」に対応するデータを、０データに設定し、「ＯＦＦ」に対応するデータを、コンテナ４１２等を参照してディスク２２６から読み出したデータに設定する。
【００６０】
また、ＷｒｉｔｅＩ／Ｏ範囲と、ＵＮＭＡＰ予約フラグの管理単位とが一致しない場合もある。この場合、書き込み部４０５は、ＵＮＭＡＰ予約フラグの範囲であって、ＷｒｉｔｅＩ／Ｏ範囲外を０データで補間し、補間したデータをディスク２２６に書き込む。
【００６１】
図５は、実施例１におけるＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。ここで、ＵＮＭＡＰコマンド受け付け時の動作を説明する前に、図５を用いて、ブロックマップ４１１と、コンテナ４１２と、物理データ格納領域との記憶内容の一例および関係について説明する。図５に示すブロックマップ４１１は、エントリ５０１−０〜３を有する。また、図５に示すコンテナ４１２は、エントリ５０２−０〜２を有する。
【００６２】
ここで、図５において、論理アドレスで管理されるデータと、物理アドレスで管理されるデータとの関係について説明する。エントリ５０１−０〜３は、それぞれ、論理アドレス０ｘ００、０ｘ０８、０ｘ１０、０ｘ１８のデータを管理する。このように、図５に示すＵＮＭＡＰ予約フラグの管理単位は、８バイトとなる。ホスト装置２０２は、論理アドレス０ｘ００を指定してデータＡにアクセスする。同様に、ホスト装置２０２は、論理アドレス０ｘ０８を指定してデータＢにアクセスし、論理アドレス０ｘ１０を指定してデータＣにアクセスし、論理アドレス０ｘ１８を指定してデータＡにアクセスする。このように、論理アドレス０ｘ００と論理アドレス０ｘ１８とについて、これらの論理アドレスを指定してアクセスされるのは、共にデータＡであり、同一の内容である。図５では、データＡに濃い網掛けを付与し、データＢに薄い網掛けを付与する。
【００６３】
論理アドレス０ｘ００と論理アドレス０ｘ１８とについて、これらの論理アドレスを指定してアクセスされるデータが同一であるため、エントリ５０１−０と、エントリ５０１−３とのスロット番号は、同一の「０」となる。また、エントリ５０１−１のスロット番号は、「１」となり、エントリ５０１−２のスロット番号は、「２」となる。
【００６４】
そして、スロット番号「０」を有するエントリ５０２−０は、物理アドレス０ｘ００のデータを管理する。同様に、スロット番号「１」を有するエントリ５０２−１は、物理アドレス０ｘ０５のデータを管理し、スロット番号「２」を有するエントリ５０２−２は、物理アドレス０ｘ０ｄのデータを管理する。そして、物理データ格納領域４１３内の物理アドレス０ｘ００には、圧縮したデータＡが格納される。同様に、物理データ格納領域４１３内の物理アドレス０ｘ０５、０ｘ０ｄには、それぞれ、圧縮したデータＢ、Ｃが格納される。
【００６５】
ここで、ＣＭ２１１が、ホスト装置２０２から、アドレス範囲として論理アドレス０ｘ１０〜０ｘ１８に対するＵＮＭＡＰコマンドを受け付けたとする。この場合、ＣＭ２１１は、図５の（１）で示すように、ブロックマップ４１１のアドレス範囲に対応するエントリ５０１−２、３のＵＮＭＡＰ予約フラグをＯＦＦからＯＮにセットする。そして、ＣＭ２１１は、図５の（２）で示すように、ホスト装置２０２に対して、ＵＮＭＡＰコマンドに対する応答情報を送信する。ここで、エントリ５０１−０〜３は、ディスク２２６内の連続した領域にあるため、ＵＮＭＡＰコマンドによるＵＮＭＡＰ予約フラグの更新は、シーケンシャルアクセスとなる。従って、ＵＮＭＡＰ予約フラグを更新する数が多かったとしても、コンテナ４１２内のリファレンスカウントの更新と比較して短時間で行うことができる。
【００６６】
また、コンテナ４１２内のリファレンスカウントの更新について、ＣＭ２１１は、ＵＮＭＡＰコマンドの受け付けとは非同期に実施する。
【００６７】
ここで、具体的な数値を用いて説明する。例えば、ＵＮＭＡＰコマンドで指定できる最大のデータサイズが、２６．２５［ＧＢ］であり、ブロックマップ４１１のエントリが、４［ＫＢ］ごとに１６［Ｂｙｔｅ］確保されるとする。この場合、最大のデータサイズが指定されたＵＮＭＡＰコマンドを受け付けた場合に、更新されるブロックマップ４１１のエントリの合計データは、２６．２５［ＧＢ］／４［ＫＢ］＊１６［Ｂｙｔｅ］＝１０２［ＭＢ］となる。従って、１０２［ＭＢ］に対するシーケンシャルライトにかかる時間が、ＵＮＭＡＰコマンドのコマンドタイムアウト時間より短ければよい。
【００６８】
また、ＣＭ２１１は、ＵＮＭＡＰ予約フラグがＯＮの領域に対するＲｅａｄＩ／Ｏを受け付けた場合、読み出しデータとして、０データを応答する。また、ＵＮＭＡＰ予約フラグがＯＮの領域に対するＷｒｉｔｅＩ／Ｏを受け付けた場合、ＣＭ２１１は、ＵＮＭＡＰ予約フラグを「ＯＦＦ」に設定して上書きＷｒｉｔｅ処理を行う。このとき、ＷｒｉｔｅＩ／Ｏ範囲とＤｅｄｕｐｌｉｃａｔｉｏｎの管理単位、すなわち、ＵＮＭＡＰ予約フラグの管理単位が合わない場合、ＣＭ２１１は、Ｗｒｉｔｅデータのうち管理単位と合わない部分を０データで補間する。
【００６９】
なお、実施例１におけるストレージ制御装置１０１が行う処理は、実施例２におけるストレージ制御装置１０１が行う一部分となる。そこで、実施例１におけるストレージ制御装置１０１が行う処理を示すフローチャートについては図示を省略する。そして、実施例２におけるストレージ制御装置１０１が行う処理を示すフローチャートで、実施例１におけるストレージ制御装置１０１が行う処理を、実施例２におけるストレージ制御装置１０１が行う処理と併せて説明する。
【００７０】
（実施例２）
実施例１では、ＵＮＭＡＰコマンドを受け付けた場合に更新されるブロックマップ４１１のエントリに対するシーケンシャルライトにかかる時間が、ＵＮＭＡＰコマンドのコマンドタイムアウト時間より短ければよい。ここで、ブロックマップ４１１のエントリに対するシーケンシャルライトにかかる時間は、ＣＭ２１１にかかる負荷に依存する時間である。従って、ＣＭ２１１にかかる負荷が高い場合、コマンドタイムアウトが発生する可能性がある。
【００７１】
そこで、実施例２では、ＣＭ２１１は、ＵＮＭＡＰコマンドで指定されたアドレス範囲が、所定のデータサイズとして２５６［ＭＢ］を超える場合、メモリ２２２の記憶領域を獲得し、ＵＮＭＡＰコマンドで指定されたアドレス範囲を、獲得した領域に記憶しておく。そして、ＣＭ２１１は、ＵＮＭＡＰコマンドを受け付けた時とは非同期でブロックマップ４１１の更新を行う。このように、所定のデータサイズ以上の場合にだけメモリ２２２に記憶することにより、メモリ２２２の枯渇を抑え、ＵＮＭＡＰコマンドで指定されたアドレス範囲が記憶できなくなることを抑制する。なお、実施例１において説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【００７２】
図６は、実施例２におけるＣＭ２１１の機能構成例を示す説明図である。実施例２におけるＣＭ２１１は、制御部６００を有する。制御部６００は、受け付け部４０１と、判断部６０１と、予約情報更新部４０２と、ＵＮＭＡＰ管理テーブル登録部６０２と、送信部６０３と、リファレンスカウント更新部６０４と、書き込み部６０５と、読み出し部６０６とを含む。制御部６００は、記憶装置に記憶されたプログラムをＣＰＵ２２１が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図２に示したフラッシュＲＯＭ２２３などである。また、各部の処理結果は、メモリ２２２や、ＣＰＵ２２１のレジスタ、ＣＰＵ２２１のキャッシュメモリ等に格納される。
【００７３】
また、ＣＭ２１１は、ＵＮＭＡＰコマンドに含まれるパラメータを記憶する管理情報にアクセス可能である。この管理情報を、「ＵＮＭＡＰ管理テーブル６１１」と呼称する。ＵＮＭＡＰ管理テーブル６１１は、記憶部４１０内にあってもよいが、記憶部４１０よりアクセス性能が高い他の記憶部にあることが好ましい。アクセス性能の高低は、例えば、単位時間当たりのＩ／Ｏアクセスの数や、単位時間当たりのデータ転送量で比較することができる。図６の例では、ＵＮＭＡＰ管理テーブル６１１は、ディスク２２６よりアクセス性能の高いメモリ２２２内にある。
【００７４】
ＵＮＭＡＰ管理テーブル６１１は、削除対象の論理アドレスの範囲と、ブロックマップ４１１における削除対象データの論理アドレスの範囲を分割した各削除対象分割範囲に対応する各ＵＮＭＡＰ予約フラグを「ＯＮ」へ更新済か否かを示す各更新情報とを有する。削除対象分割範囲のサイズは、ストレージシステム２００の管理者等によって決められる値である。例えば、削除対象分割範囲のデータサイズは、２５６［ＭＢ］である。また、管理を容易にするため、削除対象分割範囲のサイズは、ＵＮＭＡＰ予約フラグの管理単位の整数倍と一致することが好ましい。
【００７５】
また、更新情報は、更新済か否かを示すため、１ビット分のデータ容量があればよい。更新情報の集合を、「ＵＮＭＡＰ予約Ｂｉｔｍａｐ」と呼称する。また、ＵＮＭＡＰ予約Ｂｉｔｍａｐの各Ｂｉｔには、該当のＢｉｔに対応するＵＮＭＡＰ予約フラグが「ＯＮ」へ更新済であることを示す「設定済」か、削除の予約有りへまだ更新していないことを示す「未設定」かが格納される。「設定済」、「未設定」は、それぞれ、１、０という値でもよいし、０、１という値でもよい。
【００７６】
判断部６０１は、受け付け部４０１がＵＮＭＡＰコマンドを受け付けたことに応じて、削除対象データの範囲が所定のデータサイズを超えるかを判断する。所定のデータサイズは、ストレージシステム２００の管理者等によって決められる値である。削除対象データの分割サイズは、例えば、２５６［ＭＢ］である。受け付け部４０１がＵＮＭＡＰコマンドを受け付けたことに応じて、削除対象データの範囲が所定のデータサイズを超えない場合には、予約情報更新部４０２および送信部６０３が、図４で示した処理を行う。
【００７７】
削除対象データの範囲が所定のデータサイズを超えると判断部６０１が判断したとする。この場合、ＵＮＭＡＰ管理テーブル登録部６０２は、ＵＮＭＡＰ管理テーブル６１１のエントリをメモリ２２２に格納する。そして、ＵＮＭＡＰ管理テーブル６１１のエントリには、削除対象の論理アドレスの範囲と、ＵＮＭＡＰ予約Ｂｉｔｍａｐとが含まれる。ＵＮＭＡＰ予約Ｂｉｔｍａｐの具体的な設定方法については、図７で説明する。
【００７８】
送信部６０３は、図４で示した送信部４０３の機能に加えて、ＵＮＭＡＰ管理テーブル登録部６０２がＵＮＭＡＰ管理テーブル６１１のエントリをメモリ２２２に格納したことに応じて、ホスト装置２０２に、ＵＮＭＡＰコマンドの応答情報を送信する。
【００７９】
リファレンスカウント更新部６０４は、送信部６０３がＵＮＭＡＰコマンドの応答情報を送信したこととは非同期に、ＵＮＭＡＰ管理テーブル６１１を参照してブロックマップ４１１におけるＵＮＭＡＰ予約フラグを更新する。また、リファレンスカウント更新部６０４は、更新したブロックマップ４１１を参照して、コンテナ４１２のリファレンスカウントを更新する。
【００８０】
書き込み部６０５は、受け付け部４０１がＷｒｉｔｅＩ／Ｏコマンドを受け付けたことに応じて、ＵＮＭＡＰ管理テーブル６１１のＵＮＭＡＰ予約ＢｉｔｍａｐにおけるＷｒｉｔｅＩ／Ｏ範囲を含む削除対象分割範囲に対応するＢｉｔを確認する。該当のＢｉｔが「未設定」である場合、書き込み部６０５は、該当のＢｉｔに対応するＵＮＭＡＰ予約フラグを「ＯＮ」へ更新するとともに、該当のＢｉｔを「設定済」に更新する。そして、書き込み部６０５は、更新したブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」であれば「ＯＦＦ」に更新する。さらに、書き込み部６０５は、通常の重複除去の処理として、Ｗｒｉｔｅデータと物理データ格納領域４１３内の各分割領域が有する各データとの重複を除去したデータを各分割領域のうちのいずれかの分割領域に書き込む。
【００８１】
例えば、受け付けたＷｒｉｔｅＩ／Ｏコマンドが０ｘ０８〜０ｘ１Ｆへの書き込み要求であるとし、ＵＮＭＡＰ管理テーブル６１１のＵＮＭＡＰ予約Ｂｉｔｍａｐの先頭Ｂｉｔが「未設定」であるとする。さらに、該当のＢｉｔに対応する削除対象分割範囲が、０ｘ０８から０ｘ８００００分の範囲であるとする。この場合、書き込み部６０５は、０ｘ０８から０ｘ８００００分のＵＮＭＡＰ予約フラグを「ＯＮ」へ更新するとともに、ＵＮＭＡＰ予約Ｂｉｔｍａｐの先頭Ｂｉｔを「設定済」に設定する。
【００８２】
読み出し部６０６は、受け付け部４０１がＲｅａｄＩ／Ｏコマンドを受け付けたことに応じて、ＵＮＭＡＰ管理テーブル６１１のＵＮＭＡＰ予約ＢｉｔｍａｐにおけるＲｅａｄＩ／Ｏ範囲を含む削除対象分割範囲に対応するＢｉｔを確認する。該当のＢｉｔが「未設定」を示す場合、読み出し部６０６は、ＲｅａｄＩ／Ｏコマンドの応答に含まれるＲｅａｄデータのうちの該当の削除対象分割範囲のデータを、０データに設定する。さらに、読み出し部６０６は、ブロックマップ４１１におけるＲｅａｄＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」である場合、Ｒｅａｄデータのうちの該当のＵＮＭＡＰ予約フラグに対応するデータを、０データに設定する。
【００８３】
図７は、実施例２におけるＵＮＭＡＰコマンド受け付け時の動作例を示す説明図である。図７に示すブロックマップ４１１は、エントリ７０１−０、１、…、ｘを有する。図７に示すコンテナ４１２は、エントリ７０２−０、１、…を有する。
【００８４】
ここで、図７において、論理アドレスで管理されるデータと、物理アドレスで管理されるデータとの関係について説明する。エントリ７０１−０、１、…、ｘ、…は、それぞれ、論理アドレス０ｘ００、０ｘ０８、…、０ｘ８００００、…のデータを管理する。ホスト装置２０２は、論理アドレス０ｘ００を指定してデータＡにアクセスする。同様に、ホスト装置２０２は、論理アドレス０ｘ０８を指定してデータＢにアクセスし、…、論理アドレス０ｘ８００００を指定してデータＡにアクセスする。このように、論理アドレス０ｘ００と論理アドレス０ｘ８０００とについて、これらの論理アドレスを指定してアクセスされるのは、共にデータＡであり、同一の内容である。図７では、データＡに濃い網掛けを付与し、データＢに薄い網掛けを付与する。
【００８５】
論理アドレス０ｘ００と論理アドレス０ｘ８００００とについて、これらの論理アドレスを指定してアクセスされるデータが同一であるため、エントリ７０１−０と、エントリ７０１−ｘとのスロット番号は、同一の「０」となる。また、エントリ７０１−１のスロット番号は、「１」となる。
【００８６】
そして、スロット番号「０」を有するエントリ７０２−０は、物理アドレス０ｘ００のデータを管理する。同様に、スロット番号「１」を有するエントリ７０２−１は、物理アドレス０ｘ０５のデータを管理する。そして、物理データ格納領域４１３内の物理アドレス０ｘ００には、圧縮したデータＡが格納される。同様に、物理データ格納領域４１３内の物理アドレス０ｘ０５には、圧縮したデータＢが格納される。
【００８７】
ここで、ＣＭ２１１が、ホスト装置２０２から、論理アドレス０ｘ０８を先頭アドレスとし、アドレス範囲が５１２［ＭＢ］となるＵＮＭＡＰコマンドを受け付けたとする。アドレス範囲は、２５６［ＭＢ］を超えている。従って、ＣＭ２１１は、図７の（１）で示すように、ＵＮＭＡＰ管理テーブル６１１にエントリ７０３−１を登録する。そして、ＣＭ２１１は、図７の（２）で示すように、ホスト装置２０２に対して、ＵＮＭＡＰコマンドに対する応答情報を送信する。
【００８８】
ＵＮＭＡＰ管理テーブル６１１のエントリは、ＵＮＭＡＰコマンドを識別する番号と、削除対象のＬＵＮと、削除対象の論理アドレスと、削除対象のデータサイズと、Ｂｉｔｍａｐとを有する。削除対象の論理アドレスから、削除対象の論理アドレスに削除対象のデータサイズを加えた論理アドレスまでが、削除対象の論理アドレスの範囲となる。また、ＵＮＭＡＰ予約Ｂｉｔｍａｐとは、最大２６．２５［ＧＢ］となる削除対象となる論理アドレスの範囲を、２５６［ＭＢ］単位で分割したＢｉｔから形成されるビット列である。ＵＮＭＡＰ予約Ｂｉｔｍａｐは、１４Ｂｙｔｅのデータとなる。ＵＮＭＡＰ予約Ｂｉｔｍａｐの１ビットが、図６で示した更新情報に相当する。
【００８９】
また、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の削除対象の論理アドレスの範囲と重複する範囲のＲｅａｄＩ／Ｏを受け付けた場合、０データを応答する。また、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の削除対象の論理アドレスの範囲と重複する範囲のＷｒｉｔｅＩ／Ｏを受け付けたら、ブロックマップ４１１における該当の削除対象の論理アドレスの範囲に対応するＵＮＭＡＰ予約フラグを「ＯＮ」に設定する。
【００９０】
また、ＣＭ２１１は、削除対象の論理アドレスの範囲が２５６［ＭＢ］以上のＵＮＭＡＰコマンドを受け付けるたびに、ＵＮＭＡＰ管理テーブル６１１に新規にエントリを登録する。また、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の各エントリについて、各エントリに対応するブロックマップ４１１のＵＮＭＡＰ予約フラグの設定が全て完了したら解放する。従って、ＵＮＭＡＰ管理テーブル６１１には、エントリが０個である場合もあるし、エントリが複数ある場合もある。
【００９１】
また、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の登録時に、ＵＮＭＡＰ予約Ｂｉｔｍａｐの各Ｂｉｔのうち、ＵＮＭＡＰコマンドの削除対象の論理アドレスの範囲を２５６［ＭＢ］で分割したＢｉｔを「未設定」に設定する。例えば、ＵＮＭＡＰコマンドの削除対象の論理アドレスの範囲がちょうど２５６［ＭＢ］であれば、ＣＭ２１１は、ＵＮＭＡＰ予約Ｂｉｔｍａｐの先頭の１Ｂｉｔを「未設定」に設定する。そして、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の削除対象の論理アドレスの範囲と重複する範囲のＷｒｉｔｅＩ／Ｏコマンドを受け付けたら、２５６［ＭＢ］分のＵＮＭＡＰ予約フラグを設定する。そして、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１の削除対象の論理アドレスの範囲と重複する範囲のＷｒＵＮＭＡＰ予約Ｂｉｔｍａｐの対応するＢｉｔを「設定済」に設定する。
【００９２】
次に、実施例２におけるＣＭ２１１が行うフローチャートについて、図８、図９、図１１、図１２を用いて説明する。
【００９３】
図８は、実施例２におけるＵＮＭＡＰコマンド受け付け時処理手順の一例を示すフローチャートである。ＣＭ２１１は、ＵＮＭＡＰコマンドを受け付ける（ステップＳ８０１）。次に、ＣＭ２１１は、ＵＮＭＡＰ範囲が２５６［ＭＢ］を超えるか否かを判断する（ステップＳ８０２）。ＵＮＭＡＰ範囲が２５６［ＭＢ］を超えない場合（ステップＳ８０２：Ｎｏ）、ＣＭ２１１は、ブロックマップ４１１におけるＵＮＭＡＰ範囲のエントリについてＵＮＭＡＰ予約フラグを「ＯＮ」にセットする（ステップＳ８０３）。一方、ＵＮＭＡＰ範囲が２５６［ＭＢ］を超える場合（ステップＳ８０２：Ｙｅｓ）、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１にＵＮＭＡＰ範囲を登録する（ステップＳ８０４）。
【００９４】
ステップＳ８０３、またはステップＳ８０４の処理終了後、ＣＭ２１１は、ホスト装置２０２にＵＮＭＡＰコマンドに対する応答情報を送信する（ステップＳ８０５）。ステップＳ８０５の処理終了後、ＣＭ２１１は、ＵＮＭＡＰコマンド受け付け時処理を終了する。
【００９５】
また、実施例１におけるＵＮＭＡＰコマンド受け付け時処理では、ステップＳ８０２の処理を行わず、常にステップＳ８０３の処理を行えばよい。
【００９６】
図９は、実施例２におけるＷｒｉｔｅＩ／Ｏコマンド受け付け時処理手順の一例を示すフローチャートである。ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏコマンドを受け付ける（ステップＳ９０１）。次に、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏ範囲が登録済みＵＮＭＡＰ管理テーブル６１１の範囲と重複し、かつ、ＵＮＭＡＰ予約フラグが未設定の区画があるか否かを判断する（ステップＳ９０２）。
【００９７】
ＷｒｉｔｅＩ／Ｏ範囲が登録済みＵＮＭＡＰ管理テーブル６１１の範囲と重複し、かつ、ＵＮＭＡＰ予約フラグが未設定の区画がある場合（ステップＳ９０２：Ｙｅｓ）、ＣＭ２１１は、該当の区画についてＵＮＭＡＰ予約フラグをセットする（ステップＳ９０３）。次に、ＣＭ２１１は、ＵＮＭＡＰ予約Ｂｉｔｍａｐのうち、ＵＮＭＡＰ予約フラグをセットした論理アドレスに対応するＢｉｔを「設定済」に設定する（ステップＳ９０４）。そして、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１のＵＮＭＡＰ予約Ｂｉｔｍａｐが全て「設定済」に設定された場合、ＵＮＭＡＰ管理テーブル６１１のうちのＵＮＭＡＰ予約Ｂｉｔｍａｐが全て「設定済」にされたエントリを解放する（ステップＳ９０５）。ここで、ＵＮＭＡＰ管理テーブル６１１の全てのエントリが解放された場合、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１自体を解放する。
【００９８】
ステップＳ９０５の処理終了後、またはＵＮＭＡＰ予約フラグが未設定の区画がない場合（ステップＳ９０２：Ｎｏ）、ＣＭ２１１は、ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされているか否かを判断する（ステップＳ９０６）。ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされている場合（ステップＳ９０６：Ｙｅｓ）、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏ範囲のＵＮＭＡＰ予約フラグをリセット、すなわち、「ＯＦＦ」に設定する（ステップＳ９０７）。そして、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏ範囲とＵＮＭＡＰ予約フラグの管理単位とが合わない場合、ＷｒｉｔｅＩ／Ｏ範囲外を０データで補間する（ステップＳ９０８）。
【００９９】
ステップＳ９０８の処理終了後、または、ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされていない場合（ステップＳ９０６：Ｎｏ）、ＣＭ２１１は、通常のＷｒｉｔｅＩ／Ｏ処理を実施する（ステップＳ９０９）。ここで、通常のＷｒｉｔｅＩ／Ｏ処理とは、ＵＮＭＡＰが無い際に実施するＷｒｉｔｅＩ／Ｏ処理である。具体的には、書き込みデータと同一のデータが物理データ格納領域４１３にある場合、ＣＭ２１１は、コンテナ４１２における該当のデータを管理するエントリのリファレンスカウントを１追加する。また、書き込みデータと同一のデータが物理データ格納領域４１３にない場合、ＣＭ２１１は、新たなスロット番号を獲得し、獲得したスロット番号を有するエントリをコンテナ４１２に追加する。
【０１００】
ステップＳ９０９の処理終了後、ＣＭ２１１は、ホスト装置２０２に、ＷｒｉｔｅＩ／Ｏコマンドに対する応答情報を送信する（ステップＳ９１０）。ステップＳ９１０の処理終了後、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏコマンド受け付け時処理を終了する。
【０１０１】
また、実施例１におけるＷｒｉｔｅＩ／Ｏコマンド受け付け時処理では、常にステップＳ９０２：Ｎｏとなればよい。次に、ステップＳ９０８の処理について、ＷｒｉｔｅＩ／Ｏ範囲とＵＮＭＡＰ予約フラグの管理単位とが一致しない場合のＷｒｉｔｅデータの例を、図１０を用いて説明する。
【０１０２】
図１０は、ＷｒｉｔｅＩ／Ｏ範囲とＵＮＭＡＰ予約フラグの管理単位とが一致しない場合の書き込みデータの一例を示す説明図である。図１０では、図５の状態の後、ＷｒｉｔｅＩ／Ｏが発生した状態を示す。
【０１０３】
図１０では、ＷｒｉｔｅＩ／Ｏ範囲が、論理アドレス０ｘ１４〜０ｘ１Ｆであるとする。そして、図１０で示すＵＮＭＡＰ予約フラグの管理単位は、８バイト境界となっており、ＷｒｉｔｅＩ／Ｏ範囲の先頭の論理アドレスとなる０ｘ１４は、８バイト境界にない論理アドレスである。従って、図１０の例では、ＷｒｉｔｅＩ／Ｏ範囲とＵＮＭＡＰ予約フラグの管理単位とが一致しない。
【０１０４】
このような場合、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏ範囲と重なる管理単位であって、ＷｒｉｔｅＩ／Ｏ範囲外のデータを、０データで補間する。図１０の例では、ＷｒｉｔｅＩ／Ｏ範囲と重なる管理単位が、０ｘ１０〜０ｘ１７となり、ＷｒｉｔｅＩ／Ｏ範囲外は、０ｘ１０〜０ｘ１３となる。従って、ＣＭ２１１は、論理アドレス０ｘ１０〜０ｘ１３のデータを、０データ１００１で補間する。
【０１０５】
図１１は、実施例２におけるＲｅａｄＩ／Ｏコマンド受け付け時処理手順の一例を示すフローチャートである。ＣＭ２１１は、ＲｅａｄＩ／Ｏコマンドを受け付ける（ステップＳ１１０１）。次に、ＣＭ２１１は、ＲｅａｄＩ／Ｏ範囲が登録済みＵＮＭＡＰ管理テーブルの範囲と重複し、かつ、ＵＮＭＡＰ予約フラグが未設定の区画があるか否かを判断する（ステップＳ１１０２）。ＵＮＭＡＰ予約フラグが未設定の区画がある場合（ステップＳ１１０２：Ｙｅｓ）、ＣＭ２１１は、応答に含まれるＲｅａｄデータのうち、ＵＮＭＡＰ管理テーブル６１１でＵＮＭＡＰ予約フラグ未設定の範囲に対して０データを作成する（ステップＳ１１０３）。
【０１０６】
ステップＳ１１０３の処理終了後、または、ＵＮＭＡＰ予約フラグが未設定の区画がない場合（ステップＳ１１０２：Ｎｏ）、ＣＭ２１１は、ブロックマップ４１１におけるＲｅａｄＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされているか否かを判断する（ステップＳ１１０４）。ブロックマップ４１１におけるＲｅａｄＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされている場合（ステップＳ１１０４：Ｙｅｓ）、ＣＭ２１１は、応答に含まれるＲｅａｄデータのうち、ブロックマップにＵＮＭＡＰ予約フラグがセットされている範囲に対して０データを作成する（ステップＳ１１０５）。
【０１０７】
ステップＳ１１０５の処理終了後、または、ブロックマップ４１１におけるＲｅａｄＩ／Ｏ範囲のエントリのＵＮＭＡＰ予約フラグがセットされていない場合（ステップＳ１１０４：Ｎｏ）、ＣＭ２１１は、応答に含まれるＲｅａｄデータのうち、０データを作成していない範囲について、通常のＲｅａｄＩ／Ｏ処理を実施する（ステップＳ１１０６）。通常のＲｅａｄＩ／Ｏ処理とは、ＵＮＭＡＰが無い際に実施するＲｅａｄＩ／Ｏ処理である。そして、ＣＭ２１１は、ホスト装置２０２に、ＲｅａｄＩ／Ｏコマンドに対する応答情報を送信する（ステップＳ１１０７）。ステップＳ１１０７の処理終了後、ＣＭ２１１は、ＲｅａｄＩ／Ｏコマンド受け付け時処理を終了する。
【０１０８】
また、実施例１におけるＲｅａｄＩ／Ｏコマンド受け付け時処理では、常にステップＳ１１０２：Ｎｏとなればよい。
【０１０９】
図１２は、実施例２における非同期処理手順の一例を示すフローチャートである。ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１を検索する（ステップＳ１２０１）。そして、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１があり、ＵＮＭＡＰ予約フラグが未設定の区画があるか否かを判断する（ステップＳ１２０２）。
【０１１０】
ＵＮＭＡＰ予約フラグが未設定の区画がある場合（ステップＳ１２０２：Ｙｅｓ）、ＣＭ２１１は、ＵＮＭＡＰ予約フラグが未設定の区画についてＵＮＭＡＰ予約フラグを「ＯＮ」にセットする（ステップＳ１２０３）。次に、ＣＭ２１１は、ＵＮＭＡＰ予約Ｂｉｔｍａｐのうち、ＵＮＭＡＰ予約フラグをセットした論理アドレスに対応するＢｉｔを「設定済」に設定する（ステップＳ１２０４）。そして、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１のＵＮＭＡＰ予約Ｂｉｔｍａｐが全て「設定済」に設定された場合、ＵＮＭＡＰ予約Ｂｉｔｍａｐが全て「設定済」に設定されたエントリを解放する（ステップＳ１２０５）。ここで、ＵＮＭＡＰ管理テーブル６１１の全てのエントリが解放された場合、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１自体を解放する。
【０１１１】
ステップＳ１２０５の処理終了後、または、ＵＮＭＡＰ予約フラグが未設定の区画がない場合（ステップＳ１２０２：Ｎｏ）、ＣＭ２１１は、先頭のＵＮＭＡＰ予約フラグを選択する（ステップＳ１２０６）。次に、ＣＭ２１１は、選択したＵＮＭＡＰ予約フラグが「ＯＮ」にセットされているか否かを判断する（ステップＳ１２０７）。選択したＵＮＭＡＰ予約フラグが「ＯＮ」にセットされている場合（ステップＳ１２０７：Ｙｅｓ）、ＣＭ２１１は、選択したＵＮＭＡＰ予約フラグをリセット、すなわち、「ＯＦＦ」に設定する（ステップＳ１２０８）。次に、ＣＭ２１１は、ＵＮＭＡＰ範囲のスロット番号に対応するリファレンスリストを減算する（ステップＳ１２０９）。そして、ＣＭ２１１は、選択したＵＮＭＡＰ予約フラグに対応するスロット番号を「ＩＮＶＡＬＩＤ」に設定する（ステップＳ１２１０）。
【０１１２】
ステップＳ１２１０の処理終了後、または、選択したＵＮＭＡＰ予約フラグが「ＯＮ」にセットされていない場合（ステップＳ１２０７：Ｎｏ）、ＣＭ２１１は、全てのＵＮＭＡＰ予約フラグを選択したか否かを判断する（ステップＳ１２１１）。まだ選択していないＵＮＭＡＰ予約フラグがある場合（ステップＳ１２１１：Ｎｏ）、ＣＭ２１１は、次のＵＮＭＡＰ予約フラグを選択し（ステップＳ１２１２）、ステップＳ１２０７の処理に移行する。
【０１１３】
一方、全てのＵＮＭＡＰ予約フラグを選択した場合（ステップＳ１２１１：Ｙｅｓ）、ＣＭ２１１は、非同期処理を終了する。また、実施例１における非同期処理では、常にステップＳ１２０２：Ｎｏとなればよい。
【０１１４】
以上説明したように、実施例１について、ＣＭ２１１は、ブロックマップ４１１にＵＮＭＡＰ予約フラグを設け、ＵＮＭＡＰコマンドに含まれる論理アドレスに対応するＵＮＭＡＰ予約フラグをＯＮにしたら、ＵＮＭＡＰコマンドに応答する。これにより、ＣＭ２１１は、リファレンスカウントの更新を行う前にＵＮＭＡＰコマンドに応答することができるため、ＵＮＭＡＰコマンドの応答にかかる時間を短縮することができる。
【０１１５】
また、実施例１について、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏコマンドについて、ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」であれば、「ＯＦＦ」に更新する。これにより、ＣＭ２１１は、ＵＮＭＡＰコマンドの応答にかかる時間を短縮しつつ、ＷｒｉｔｅＩ／Ｏコマンドを正常に処理することを担保することができる。
【０１１６】
また、実施例１について、ＣＭ２１１は、ＲｅａｄＩ／Ｏコマンドについて、ブロックマップ４１１におけるＷｒｉｔｅＩ／Ｏ範囲に対応するＵＮＭＡＰ予約フラグが「ＯＮ」であれば、応答に含まれるＲｅａｄデータを０データに設定する。これにより、ＣＭ２１１は、ＵＮＭＡＰコマンドの応答にかかる時間を短縮しつつ、ＲｅａｄＩ／Ｏコマンドも正常に処理することを担保することができる。また、上述した動作では、ＲｅａｄＩ／Ｏコマンドの処理のためにＵＮＭＡＰ予約フラグを更新しなくてもよい。
【０１１７】
また、実施例２について、ＣＭ２１１は、ＵＮＭＡＰ範囲が２５６［ＭＢ］を超えた場合には、ＵＮＭＡＰ管理テーブル６１１のエントリを登録し、ＵＮＭＡＰコマンドに応答してもよい。これにより、ＣＭ２１１は、ブロックマップ４１１のＵＮＭＡＰ予約フラグの更新に時間がかかる場合であっても、ＵＮＭＡＰコマンドの応答にかかる時間を短縮することができ、タイムアウトを発生させないようにすることができる。
【０１１８】
また、実施例２について、ＣＭ２１１は、ＵＮＭＡＰ予約Ｂｉｔｍａｐの「未設定」に設定されたＢｉｔに対応する範囲にＷｒｉｔｅＩ／Ｏコマンドが発行されたら、該当のＢｉｔに対応するＵＮＭＡＰ予約フラグを「ＯＮ」に設定する。これにより、ＣＭ２１１は、実施例２でも、ＷｒｉｔｅＩ／Ｏコマンドを正常に処理することを担保することができる。また、上述した動作は、該当のＢｉｔだけに対応するＵＮＭＡＰ予約フラグを「ＯＮ」に設定するのであって、ＵＮＭＡＰ予約Ｂｉｔｍａｐの全てのＢｉｔに対応するＵＮＭＡＰ予約フラグを「ＯＮ」設定するわけではない。従って、Ｂｉｔに対応する各削除対象分割範囲の大きさを適切に設定することにより、ＣＭ２１１は、ＷｒｉｔｅＩ／Ｏコマンドのタイムアウトを超えずに実施例２におけるＷｒｉｔｅＩ／Ｏコマンドを処理することができる。
【０１１９】
また、実施例２について、ＣＭ２１１は、ＵＮＭＡＰ予約Ｂｉｔｍａｐの「未設定」に設定されたＢｉｔに対応する範囲にＲｅａｄＩ／Ｏコマンドが発行されたら、Ｒｅａｄデータのうちの該当のＢｉｔに対応する範囲のデータを、０データに設定する。これにより、ＣＭ２１１は、実施例２でも、ＲｅａｄＩ／Ｏコマンドを正常に処理することを担保することができる。また、上述した動作では、ＲｅａｄＩ／Ｏコマンドの処理のためにＵＮＭＡＰ予約フラグを更新しなくてもよい。
【０１２０】
また、実施例２について、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１をメモリ２２２に格納してもよい。これにより、ＣＭ２１１は、ＵＮＭＡＰ管理テーブル６１１をディスク２２６に格納することに比べて、ＵＮＭＡＰコマンドの応答をより速く送信することができる。
【０１２１】
なお、本実施の形態で説明したストレージ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ストレージ制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ストレージ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２３】
（付記１）記憶領域を分割した各分割領域であって互いに重複しないデータを有する前記各分割領域を有するストレージにおいて、複数の論理アドレスの各論理アドレスに対応して、前記各分割領域のうち前記各論理アドレスに割り当てたいずれかの分割領域を識別する識別情報と前記いずれかの分割領域のデータの削除の予約の有無を示す予約情報とを有する論理アドレス情報と、前記各分割領域に対応して、当該各分割領域を参照する論理アドレスに関する参照情報と当該各分割領域の物理アドレスとを有する物理アドレス情報とを記憶する記憶部と、
削除対象データの論理アドレスの範囲を含む削除要求を受け付けたことに応じて、前記論理アドレス情報における前記削除対象データの論理アドレスの範囲に対応する予約情報を削除の予約有りに更新し、前記削除要求の要求元に前記削除要求の応答情報を送信する削除処理を行い、前記削除処理とは独立して、前記論理アドレス情報を参照して前記論理アドレスに関する参照情報を更新する更新処理を行う、制御部と、
を有することを特徴とするストレージ制御装置。
【０１２４】
（付記２）前記制御部は、
書き込み対象データと前記書き込み対象データの論理アドレスの範囲とを含む書き込み要求を受け付けたことに応じて、前記論理アドレス情報における前記書き込み対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、当該予約情報を削除の予約無しに更新する、
ことを特徴とする付記１に記載のストレージ制御装置。
【０１２５】
（付記３）前記制御部は、
読み出し対象データの論理アドレスの範囲を含む読み出し要求を受け付けたことに応じて、前記論理アドレス情報における前記読み出し対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、前記読み出し要求の応答に含まれる読み出しデータのうちの当該予約情報に対応するデータを、論理アドレスに分割領域が割り当てられていない際に設定される所定値に設定する、
ことを特徴とする付記１または２に記載のストレージ制御装置。
【０１２６】
（付記４）前記制御部は、
前記削除要求を受け付けたことに応じて、前記削除対象データの論理アドレスの範囲が所定のデータサイズを超える場合、前記削除対象データの論理アドレスの範囲と、前記論理アドレス情報における前記削除対象データの論理アドレスの範囲を分割した各削除対象分割範囲に対応する各予約情報を削除の予約有りへ更新済か否かを示す各更新情報とを有する管理情報を、前記記憶部に格納し、
前記管理情報を格納したことに応じて、前記削除処理を行い、
前記削除処理とは独立して、前記管理情報を参照して、前記論理アドレス情報における予約情報を更新し、
更新した前記論理アドレス情報を参照して、前記更新処理を行う、
ことを特徴とする付記１〜３のいずれか一つに記載のストレージ制御装置。
【０１２７】
（付記５）前記制御部は、
書き込み対象データと前記書き込み対象データの論理アドレスの範囲とを含む書き込み要求を受け付けたことに応じて、前記管理情報における前記書き込み対象データの論理アドレスの範囲を含む削除対象分割範囲に対応する更新情報が、当該削除対象分割範囲に対応する予約情報を削除の予約有りへ更新していないことを示す場合、当該予約情報を削除の予約有りへ更新するとともに、当該更新情報を削除の予約有りへ更新済に更新し、
更新した前記論理アドレス情報における前記書き込み対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、当該予約情報を削除の予約無しに更新する、
ことを特徴とする付記４に記載のストレージ制御装置。
【０１２８】
（付記６）前記制御部は、
読み出し対象データの論理アドレスの範囲を含む読み出し要求を受け付けたことに応じて、前記管理情報における前記読み出し対象データの論理アドレスの範囲を含む削除対象分割範囲に対応する更新情報が、当該削除対象分割範囲に対応する予約情報を削除の予約有りへ更新していないことを示す場合、前記読み出し要求の応答に含まれる読み出しデータのうちの当該削除対象分割範囲のデータを、論理アドレスに分割領域が割り当てられていない際に設定される所定値に設定し、
前記論理アドレス情報における前記読み出し対象データの論理アドレスの範囲に対応する予約情報が、削除の予約有りを示す場合、前記読み出しデータのうちの当該予約情報に対応するデータを、前記所定値に設定する、
ことを特徴とする付記４または５に記載のストレージ制御装置。
【０１２９】
（付記７）前記制御部は、
前記管理情報を、前記記憶部よりアクセス性能が高い他の記憶部に格納することを特徴とする付記４〜６のいずれか一つに記載のストレージ制御装置。
【０１３０】
（付記８）コンピュータに、
記憶領域を分割した各分割領域であって互いに重複しないデータを有する前記各分割領域を有するストレージに対して、削除対象データの論理アドレスの範囲を含む削除要求を受け付けたことに応じて、複数の論理アドレスの各論理アドレスに対応して前記各分割領域のうち前記各論理アドレスに割り当てたいずれかの分割領域を識別する識別情報と前記いずれかの分割領域のデータの削除の予約の有無を示す予約情報とを有する論理アドレス情報における前記削除対象データの論理アドレスの範囲に対応する予約情報を削除の予約有りに更新し、
前記削除要求の要求元に前記削除要求の応答情報を送信する削除処理を行い、
前記削除処理とは独立して、前記論理アドレス情報を参照して、前記各分割領域に対応して当該各分割領域を参照する論理アドレスに関する参照情報と当該各分割領域の物理アドレスとを有する物理アドレス情報における前記論理アドレスに関する参照情報を更新する更新処理を行う、
処理を実行させることを特徴とするストレージ制御プログラム。
【０１３１】
（付記９）
前記コンピュータは、記憶部にアクセス可能であり、
前記コンピュータに、
前記削除要求を受け付けたことに応じて、前記削除対象データの論理アドレスの範囲が所定のデータサイズを超える場合、前記削除対象データの論理アドレスの範囲と、前記論理アドレス情報における前記削除対象データの論理アドレスの範囲を分割した各削除対象分割範囲に対応する各予約情報を削除の予約有りへ更新済か否かを示す各更新情報とを有する管理情報を、前記記憶部に格納し、
前記管理情報を格納したことに応じて、前記削除処理を行い、
前記削除処理とは独立して、前記管理情報を参照して、前記論理アドレス情報における予約情報を更新し、
更新した前記論理アドレス情報を参照して、前記更新処理を行う、
処理を実行させることを特徴とする付記８に記載のストレージ制御プログラム。
【符号の説明】
【０１３２】
１０１  ストレージ制御装置
１０２  ストレージ
１１１  論理アドレス情報
１１２  物理アドレス情報
１２１、１２２  エントリ
１２３  分割領域
２００  ストレージシステム
４００、６００  制御部
４０１  受け付け部
４０２  予約情報更新部
４０３、６０３  送信部
４０４、６０４  リファレンスカウント更新部
４０５、６０５  書き込み部
４０６、６０６  読み出し部
４１０  記憶部
４１１  ブロックマップ
４１２  コンテナ
４１３  物理データ格納領域
６０１  判断部
【図１】
2018116329.tif 000003
【図２】
2018116329.tif 000004
【図３】
2018116329.tif 000005
【図４】
2018116329.tif 000006
【図５】
2018116329.tif 000007
【図６】
2018116329.tif 000008
【図７】
2018116329.tif 000009
【図８】
2018116329.tif 000010
【図９】
2018116329.tif 000011
【図１０】
2018116329.tif 000012
【図１１】
2018116329.tif 000013
【図１２】
2018116329.tif 000014