(57)【特許請求の範囲】
【請求項１】
記憶媒体と、記憶デバイスコントローラ部とを有する記憶デバイスと、
前記記憶デバイスに接続されたストレージコントローラ部と、
を備えた計算機システムにおいて、
前記記憶デバイスの記憶デバイスコントローラ部は、
仮想アドレスでアドレスを規定される仮想化アドレス空間を提供する仮想化機能と、
アンマップコマンドで指定された仮想アドレスに対する前記記憶媒体での実アドレスのマッピングを解除するアンマップ機能と、
を実行し、
前記ストレージコントローラ部は、上位システムに提供する論理アドレスと、前記仮想アドレスに対応する物理アドレスとのマッピングを管理するマッピング機能を実行し、
第１の論理アドレスをライト先とした第１のデータと第２の論理アドレスをライト先とした第２のデータとが重複する場合、前記ストレージコントローラ部は、
前記第１の論理アドレスと前記第２の論理アドレスとが同じ物理アドレスにマッピングされるようにマッピングを変更し、
前記アンマップ機能を機能させるアンマップコマンドを、前記変更前に第１の論理アドレスにマッピングされていた第１の物理アドレスに従う仮想アドレスを指定して前記記憶デバイスに送信する、
計算機システム。
【請求項２】
請求項１において、
前記第１の論理アドレスと前記第２の論理アドレスとは、前記変更前に前記第１の物理アドレス及び前記変更前に第２の論理アドレスにマッピングされていた第２の物理アドレスとは異なる第３の物理アドレスにマッピングされ、
前記アンマップ機能を機能させるアンマップコマンドを、前記第２の物理アドレスに従う仮想アドレスを指定して前記記憶デバイスに送信する
ことを特徴とする計算機システム。
【請求項３】
請求項２において、
静的マッピング空間と、追記空間とを有し、
前記第１及び／または第２の物理アドレスは、前記静的マッピング空間に属し、前記第３の物理アドレスは、前記追記空間に属する
ことを特徴とする計算機システム。
【請求項４】
請求項１において、
前記第１の論理アドレスが、第２の論理アドレスにマッピングされている第２の物理アドレスにマッピングされるようにマッピングを変更する
ことを特徴とする計算機システム。
【請求項５】
記憶媒体と、記憶デバイスコントローラ部とを有する記憶デバイスと、
前記記憶デバイスに接続されたストレージコントローラ部と、
を備えた計算機システムにおいて、
前記記憶デバイスの記憶デバイスコントローラ部は、
前記記憶媒体の記憶容量を仮想化し、仮想アドレスでアドレスを規定される仮想化アドレス空間を提供する容量仮想化機能と、
データを圧縮する圧縮機能と、
を実行し、
前記ストレージコントローラ部は、上位システムに提供する論理アドレスと、前記仮想アドレスに対応する物理アドレスとのマッピングを管理するマッピング機能を実行し、
第１の論理アドレスをライト先とした第１のデータと第２の論理アドレスをライト先とした第２のデータとが重複する場合、前記ストレージコントローラ部は、
前記第１の論理アドレスと前記第２の論理アドレスとが同じ物理アドレスにマッピングされるようにマッピングを変更し、
前記圧縮機能を機能させる所定のデータのライトコマンドを、前記変更前に第１の論理アドレスにマッピングされていた第１の物理アドレスに従う仮想アドレスを指定して前記記憶デバイスに送信する、
計算機システム。
【請求項６】
請求項５において、
前記所定データは、全ビット値が同じ値のデータである
ことを特徴とする計算機システム。
【請求項７】
記憶媒体と、記憶デバイスコントローラ部とを有する記憶デバイスと、
前記記憶デバイスに接続されたストレージコントローラ部と、
を備えた計算機システムにおける記憶制御方法において、
前記記憶デバイスの記憶デバイスコントローラ部は、
仮想アドレスでアドレスを規定される仮想化アドレス空間を提供する仮想化機能と、
アンマップコマンドで指定された仮想アドレスに対する前記記憶媒体での実アドレスのマッピングを解除するアンマップ機能と、
を実行し、
前記ストレージコントローラ部は、上位システムに提供する論理アドレスと、前記仮想アドレスに対応する物理アドレスとのマッピングを管理するマッピング機能を実行し、
第１の論理アドレスをライト先とした第１のデータと第２の論理アドレスをライト先とした第２のデータとが重複する場合、前記ストレージコントローラ部は、
前記第１の論理アドレスと前記第２の論理アドレスとが同じ物理アドレスにマッピングされるようにマッピングを変更し、
前記アンマップ機能を機能させるアンマップコマンドを、前記変更前に第１の論理アドレスにマッピングされていた第１の物理アドレスに従う仮想アドレスを指定して前記記憶デバイスに送信する、
記憶制御方法。
【請求項８】
記憶媒体と、記憶デバイスコントローラ部とを有する記憶デバイスと、
前記記憶デバイスに接続されたストレージコントローラ部と、
を備えた計算機システムにおける記憶制御方法において、
前記記憶デバイスの記憶デバイスコントローラ部は、
前記記憶媒体の記憶容量を仮想化し、仮想アドレスでアドレスを規定される仮想化アドレス空間を提供する容量仮想化機能と、
データを圧縮する圧縮機能と、
を実行し、
前記ストレージコントローラ部は、上位システムに提供する論理アドレスと、前記仮想アドレスに対応する物理アドレスとのマッピングを管理するマッピング機能を実行し、
第１の論理アドレスをライト先とした第１のデータと第２の論理アドレスをライト先とした第２のデータとが重複する場合、前記ストレージコントローラ部は、
前記第１の論理アドレスと前記第２の論理アドレスとが同じ物理アドレスにマッピングされるようにマッピングを変更し、
前記圧縮機能を機能させる所定のデータのライトコマンドを、前記変更前に第１の論理アドレスにマッピングされていた第１の物理アドレスに従う仮想アドレスを指定して前記記憶デバイスに送信する、
計算機システムにおける記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データ量削減機能を有する計算機システムでの記憶制御に関する。
【背景技術】
【０００２】
計算機システムの一例として、ストレージシステムがある。データ量削減機能を有するストレージシステムとして、例えば、特許文献１に開示のストレージシステム、すなわち、ガベージコレクション機能を有するストレージシステムが知られている。特許文献１には、次のことが開示されている。【０００３】
ストレージシステムは、記憶デバイスと、ガベージコレクション機能を有するストレージコントローラとを有する。ストレージコントローラが、仮想アドレスと、記憶デバイスの物理アドレスとのマッピングを管理する。ストレージコントローラは、仮想アドレスに対するライトが発生した場合、その仮想アドレスに対し、既に割り当てられている物理アドレスに代えて新たなライト先の空き物理アドレスをマッピングするというマッピング更新（アドレス変換テーブルの更新）を行う。その結果、無効データ（仮想アドレスに対するマッピングが解除された物理アドレスに従うデータ）が増える。ストレージコントローラは、有効データ（いずれかの仮想アドレスにマッピングされている物理アドレスに従うデータ）をコピーし無効データを削除するガベージコレクションを実行する。これにより、データ量が削減され、空き物理アドレス（空き領域）が増える。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】US 8,527,544
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に従うストレージシステムによれば、データ量削減を実現するためにストレージコントローラの処理負荷が高くなる。具体的には、仮想アドレスに対してライトが発生する都度にストレージコントローラがマッピング更新（アドレス変換テーブルの更新）を行う必要がある。また、ガベージコレクションのためにストレージコントローラが大量の有効データをコピーしなければならいことが生じ得る。【０００６】
ストレージコントローラの処理負荷が高くなると、データのＩ／Ｏ（Input/Output）性能が低下し得る。【０００７】
同様の問題は、計算機システムの一例として、データ量削減機能を有するサーバシステム（例えば、ＨＤＤ（Hard Disk Drive）のような補助記憶デバイスを有するサーバ）が採用された場合にもあり得る。
【課題を解決するための手段】
【０００８】
第１論理アドレスをライト先とした更新後データと第２論理アドレスをライト先とした既存データとが重複する場合、計算機システムは、第１物理アドレスに関連付けられたメモリセグメントに前記更新後データに代えて所定データをライトし、第２物理アドレスに第１論理アドレスを動的マッピングする。計算機システムは、第１物理アドレスに対応した記憶デバイスに対し、所定データのライトコマンド、又は、第１物理アドレスに従う仮想アドレスを指定したアンマップコマンドを送信する。第１及び第２論理アドレスは、論理アドレス空間の少なくとも一部である論理アドレス範囲に属する論理アドレスである。第１物理アドレスは、物理アドレス空間の少なくとも一部である物理アドレス範囲に属する物理アドレスであって、第１論理アドレスに静的マッピングされている物理アドレスである。
【発明の効果】
【０００９】
プロセッサ部の処理負荷を抑えつつデータ量削減を実現することができる。
【図面の簡単な説明】
【００１０】
【図１】実施例１の概要を示す。
【図２】ストレージシステムの構成を示す。
【図３】ＦＭＤ（フラッシュメモリデバイス）の構成を示す。
【図４】ストレージコントローラ内のメモリの構成と、そのメモリ内のプログラム及び情報とを示す。
【図５】ストレージシステム内の記憶階層を示す。
【図６】重複管理ボリュームの構成を示す。
【図７】一比較例に係る重複管理ボリュームの構成を示す。
【図８】ＶＯＬ管理テーブルの構成を示す。
【図９】ページ割当て管理テーブルの構成を示す。
【図１０】プール管理テーブルの構成を示す。
【図１１】ＲＧ管理テーブルの構成を示す。
【図１２】動的マッピングテーブルの構成を示す。
【図１３】静的マッピングテーブルの構成を示す。
【図１４】空き管理テーブルの構成を示す。
【図１５】ページ単位管理テーブルの構成を示す。
【図１６】ページ単位管理テーブルの構成を示す。
【図１７】プール一覧画面を示す。
【図１８】フロントエンドライト処理の流れを示す。
【図１９】実施例１に係る重複管理処理の流れを示す。
【図２０】実施例１に係るフルダーティ化処理の流れを示す。
【図２１】実施例１に係る重複排除処理の流れを示す。
【図２２】実施例１に係るキャッシュ転送処理の流れを示す。
【図２３】バックエンドライト処理の流れを示す。
【図２４】実施例２に係る重複管理処理の流れを示す。
【図２５】実施例２に係るキャッシュ転送処理の流れを示す。
【図２６】実施例２に係るフルダーティ化処理の流れを示す。
【図２７】実施例２に係る重複排除処理の流れを示す。
【図２８】実施例３に係る重複排除処理の流れの一部を示す。
【図２９】実施例４に係る重複排除処理の流れの一部を示す。
【図３０】コレクションリード処理の流れを示す。
【図３１】更新後データが論理ボリュームにおける既存データと重複するケースの一例の模式図である。
【図３２】非重複の更新後データのライト先が重複先論理アドレスであるケースの一例の模式図である。
【図３３】非重複の更新後データのライト先が重複元論理アドレスであるケースの一例の模式図である。
【図３４】更新後データが論理ボリュームにおける既存データのいずれとも重複しないケースの一例の模式図である。
【図３５】重複離脱処理の一例の模式図である。
【図３６】実施例３に係る重複排除の一例の模式図である。
【図３７】上書きキャッシュライト処理の流れを示す。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、幾つかの実施例を説明する。
【００１２】
以下の説明では、「インターフェース部」は、１以上のインターフェースである。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。また、以下の説明では、インターフェースデバイスを「Ｉ／Ｆ」と略記することがある。
【００１３】
また、以下の説明では、「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）でよい。ＰＤＥＶは、例えば、不揮発メモリを有する不揮発メモリデバイスでよい。そのような不揮発メモリデバイスとして、フラッシュメモリ（ＦＭ）を有するＦＭデバイス（以下、ＦＭＤ）を例に取るが、ＦＭＤに代えて、他種の不揮発メモリ（例えば、磁気抵抗メモリであるＭＲＡＭ（Magnetoresistive Random Access  Memory）、抵抗変化型メモリであるＲｅＲＡＭ（Resistance Random Access Memory）、或いは、強誘電体メモリであるＦｅＲＡＭ（Ferroelectric Random Access Memory）等の半導体メモリ）を有した不揮発メモリデバイスを採用することもできる。
【００１４】
また、以下の説明では、「メモリ部」は、１以上のメモリである。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１５】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１６】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及びインターフェース部のうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ部（或いは、プロセッサ部を有する計算機又は計算機システム）とされてもよい。プログラムは、プログラムソースから計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１７】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００１８】
また、以下の説明では、「計算機システム」は、サーバシステムとストレージシステムのうちの少なくとも１つでよい。「サーバシステム」は、１以上の物理的なサーバ（例えばサーバのクラスタ）であってもよいし、少なくとも１つの仮想的なサーバ（例えばＶＭ（Virtual Machine））を含んでもよい。また、「ストレージシステム」は、１以上の物理的なストレージ装置であってもよいし、少なくとも１つの仮想的なストレージ装置（例えばＳＤＳ（Software Defined Storage））を含んでもよい。
【００１９】
また、以下の説明では、種々の対象の識別情報として、識別番号が使用されるが、識別番号以外の種類の識別情報（例えば、英字や符号を含んだ識別子）も採用可能である。
【００２０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Central Processing Unit）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから各コントローラにインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記憶メディアであってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２１】
また、以下の説明では、ＰＤＥＶの一例として、ＦＭＤが採用される。ＦＭＤの上位システムは、ＦＭＤが外部ストレージとして接続されたサーバシステムであってもよいし、ＦＭＤを有するサーバシステム内のプロセッサ部であってもよいし、ＦＭＤを有するストレージシステム内のストレージコントローラであってもよい。
【００２２】
ＦＭＤは、ＦＭ（フラッシュメモリ）と、ＦＭへのデータの入出力を制御するＦＭコントローラとを有する。ＦＭは、１以上のＦＭチップで構成されている。ＦＭチップは、複数の物理領域で構成されている。具体的には、例えば、ＦＭチップは、ＮＡＮＤフラッシュであり、複数の物理ブロックで構成されている。各物理ブロックは、複数の物理ページで構成されている。物理ブロック又は物理ページが物理領域の一例である。物理ページ単位でデータがアクセス（リード及びライト）され、物理ブロック単位でデータが消去される。ＦＭコントローラは、仮想アドレス空間を上位システムに提供し、仮想アドレスとＦＭＤアドレスとの対応関係を管理する（例えば仮想アドレスとＦＭＤアドレスの対応関係を表すアドレス変換情報を保持している）。仮想アドレスは、ＦＭＤにより管理される論理アドレスであり、ＦＭＤアドレスは、ＦＭＤにより管理される物理アドレス（ＦＭにおける物理領域を指すアドレス）である。ＦＭコントローラは、上位システムからのＩ／Ｏコマンドで指定されている仮想アドレスに対応したＦＭＤアドレスが属する物理領域を特定し、特定した物理領域に対してＩ／Ｏを行う。仮想アドレスは、例えば、ＬＢＡ（Logical Block Address）であり、ＦＭＤアドレスは、例えば、ＰＢＡ（Physical Block Address）である。
【００２３】
また、以下の説明では、ＦＭは、追記型である。具体的には、或る物理ページのＦＭＤアドレスが割り当てられている仮想アドレスがライト先の場合、ライト先仮想アドレスに、割当て済のＦＭＤアドレスに代えて新たにＦＭＤアドレスが割り当てられ、新たに割り当てられたＦＭＤアドレスが指す物理ページ（空きページ）にデータが書き込まれる。各仮想アドレスについて、最近割り当てられたＦＭＤアドレスが指す物理ページに書き込まれているデータ（つまり最新のデータ）は「有効データ」であり、有効データが書き込まれている物理ページは「有効ページ」であり、過去に割り当てられていたＦＭＤアドレスが指す物理ページに格納されているデータは「無効データ」であり、無効データが書き込まれているページは「無効ページ」である。また、有効ページでも無効ページでも無く新たにデータを格納可能な物理ページが、「空きページ」である。
【実施例１】
【００２４】
図１は、実施例１の概要を示す。【００２５】
計算機システムの一例として、ストレージシステムが採用されている。ストレージシステムは、１以上のＦＭＤと、１以上のＦＭＤに接続されたストレージコントローラ１０１とを有する。ストレージコントローラ１０１は、プロセッサ部を含むコントローラの一例である。【００２６】
ＦＭＤは、圧縮機能及びアンマップ機能のうちの少なくとも１つと、容量仮想化機能とを有するＰＤＥＶの一例である。「アンマップ機能」とは、指定された仮想アドレス（以下の説明では物理アドレス）に対する実アドレス（以下の説明ではＦＭＤアドレス）のマッピングを解除する機能である（解除された物理アドレスに従う領域は空きとして管理可能である）。「容量仮想化」は、物理容量に依存しない仮想容量（典型的には、物理容量よりも大きな仮想容量）を持つ仮想アドレス空間を提供することである。「物理容量」とは、ＦＭＤの物理的な記憶容量（実際の記憶容量）である。「仮想容量」とは、ＦＭＤの仮想的な記憶容量（ＦＭＤの上位システムに見せるＦＭＤの記憶容量）である。【００２７】
ストレージコントローラ１０１は、データ量削減機能として、重複排除機能を有する。「重複排除」とは、重複する２以上のデータのうちの一部のデータのみをＦＭＤに格納し残りのデータをＦＭＤに格納しないことである。【００２８】
このように、本実施例によれば、ストレージコントローラ１０１により重複排除が行われ、ＦＭＤにより圧縮が行われる。【００２９】
また、ストレージコントローラ１０１は、論理アドレス空間と物理アドレス空間とを管理する。論理アドレス空間は、ストレージコントローラ１０１の上位システム（例えばサーバシステム）に提供されるアドレス空間である。論理アドレス空間は、典型的には論理ボリューム（論理ボリュームの論理アドレス空間）として提供される。物理アドレス空間は、ストレージコントローラ１０１の上位システムには提供されないアドレス空間であり、ストレージシステムにおける内部アドレス空間である。物理アドレスは、ＦＭＤが提供する仮想アドレス相当でよい。【００３０】
論理アドレス範囲と物理アドレス範囲との対応関係は、静的に決まっていてもよいし動的に決まって（変更されて）もよい。前者の場合、サーバシステムに提供される論理ボリュームの全域にストレージシステム内で管理されている内部ボリュームが割り当てられており、物理アドレス範囲は、内部ボリュームにおける領域を指すアドレス範囲でよい。後者の場合、物理アドレス範囲は、Thin Provisioning技術のような動的割当て技術に従いプールから割り当てられる実領域（以下、実ページ）を指すアドレス範囲である。「プール」は、複数の実ページ（実体的な記憶領域）で構成された記憶領域でよい。ストレージコントローラ１０１が、サーバシステムから受信したライト要求が指定する論理アドレスに対してプールから物理アドレス（実ページ）を割り当てる。ストレージシステムは、割り当てられた実ページに、そのライト要求に付随するライト対象データを書き込む。本実施例では、動的割当て技術が採用されている。以下の説明では、説明の混同を避けるために、論理アドレス範囲と物理アドレス範囲（実ページ）間の関連付け（例えば、論理アドレス範囲に対する物理アドレス範囲の関連付け）を、「割当て」と呼ぶ。一方、論理アドレス範囲に属する論理アドレスと、その論理アドレス範囲に割り当てられている物理アドレス範囲に属する物理アドレス間の関連付け（例えば、物理アドレスに対する論理アドレスの関連付け）を、「マッピング」と呼ぶ。【００３１】
本実施例では、２種類のマッピング、具体的には、静的マッピングと動的マッピングがある。【００３２】
「静的マッピング」は、次の通りである。すなわち、論理アドレス範囲に物理アドレス範囲が割り当てられると、そのアドレス範囲間において、論理アドレスと物理アドレスとの関係が一義的に決まる。例えば、論理アドレス範囲の先頭及び後端と物理アドレス範囲の先頭及び後端がそれぞれ対応し、論理アドレス範囲の先頭からのアドレス値と物理アドレス範囲の先頭からのアドレス値とが一致する。つまり、論理アドレス範囲に物理アドレス範囲が割り当てられると、そのアドレス範囲間において、論理アドレスと物理アドレスは予め１：１で対応する。このような対応（関連付け）が、「静的マッピング」である。論理アドレスの静的マッピング先の物理アドレスは、テーブルを参照することにより特定されてもよいし、テーブル参照無しに計算により算出されてもよい。例えば、静的マッピングに従う論理アドレス及び物理アドレスのアドレス値は同じでよい。【００３３】
一方、「動的マッピング」は、現在のマッピングである。すなわち、動的マッピングは、静的マッピングのような固定的なマッピングと異なり、後述の重複排除処理や重複離脱処理等によって変わる。典型的には、論理アドレス範囲において第１及び第２論理アドレスにそれぞれ重複した第１及び第２データが対応している場合、第１論理アドレスは、第１物理アドレスに対応するが（静的マッピング）、第２論理アドレスは、第２データが重複排除されることにより、第２物理アドレスではなく（静的マッピングではなく）、重複排除された第２データに重複する第１データが対応する第１物理アドレスに動的に関連付けられる。この動的な関連付けが、「動的マッピング」である。本実施例では、１つの論理アドレス範囲について、動的マッピングは、その論理アドレス範囲に割り当てられた物理アドレス範囲（例えば後述の実ページ）にのみ適用されるが、それに限らず、例えば、その論理アドレス範囲に割り当てられた物理アドレス範囲とは異なる物理アドレス範囲にも適用されてもよい。【００３４】
以上のように、本実施例では、ＦＭＤが圧縮機能及び容量仮想化機能を有し、ストレージコントローラ１０１が重複排除機能を有する。論理アドレスと物理アドレス間のマッピングとして、静的マッピング及び動的マッピングがある。ストレージコントローラ１０１は、実ページのような比較的大きな単位で物理アドレス範囲を論理アドレス範囲に割り当て、その論理アドレス範囲とその物理アドレス範囲間で、静的マッピングを使用し続ける。【００３５】
以下、幾つかのケース（例）Ａ〜Ｄを、図１を参照して説明する。なお、ケースＡ〜Ｄにおいて、論理アドレス範囲は、第１〜第４論理アドレスを含む。故に、その論理アドレス範囲に割り当てられた物理アドレス範囲は、第１〜第４論理アドレスにそれぞれ静的マッピングされた第１〜第４物理アドレスを含む。１つの論理アドレスに１つのデータが対応するとする。また、ＦＭＤにライトされたデータは、ＦＭＤの圧縮機能により、圧縮されてＦＭにライトされることになるが、説明の冗長を避けるため、圧縮されることの記述は省略されることがある。【００３６】
＜ケースＡ＞【００３７】
ケースＡは、重複排除されていないデータＡがデータＥに更新されるケースである。【００３８】
ストレージコントローラ１０１は、データＥを第１物理アドレスに対してライトする。第１物理アドレスは、データＡに対応した第１論理アドレスに静的マッピングされている物理アドレスである。すなわち、ストレージコントローラ１０１は、論理アドレスと物理アドレスとの対応関係を変更すること無しに、データＡにデータＥを同一物理アドレス（第１物理アドレス）に対して上書きする。このため、データＥは、データＡが格納されているＦＭＤに追記される。結果として、ＦＭＤにおいて、データＡが有効データから無効データとなり、データＥがデータＡに代わって有効データとなる。【００３９】
＜ケースＢ＞【００４０】
ケースＢは、いずれのデータとも重複していないデータＣが、既存データＢと重複するデータＢ（つまり既存のデータＢと同一のデータＢ）に更新されるケースである。このケースでは、互いに重複する２つのデータＢ及びＢが論理アドレス範囲について生じる。【００４１】
ストレージコントローラ１０１は、以下の処理（ｂ１）及び（ｂ２）を行う。
（ｂ１）ストレージコントローラ１０１は、第３物理アドレスに対応した更新前データＣにゼロデータをライトする。具体的には、ストレージコントローラ１０１は、ゼロデータのライトコマンドを、第３物理アドレスに対応したＦＭＤに送信する。結果として、そのＦＭＤに、ゼロデータが圧縮されて追記され、故に、更新前データＣがＦＭＤにおいて無効データとなる。第３物理アドレスは、更新後データＢのライト先である第３論理アドレスに静的マッピングされている物理アドレスである。ゼロデータは、全てのビットが０であるデータである。圧縮ゼロデータ（圧縮されたゼロデータ）が有効データとしてＦＭＤに存在するが、ゼロデータは圧縮効果が高いため、圧縮ゼロデータのサイズは通常の圧縮データ（例えば、ユーザデータＡ、Ｂ、…）の圧縮データに比べて小さい。ゼロデータは、所定データの一例である。所定データは、全てのビットが１であるデータでもよい。
（ｂ２）ストレージコントローラ１０１は、第３論理アドレスを第２物理アドレスに動的マッピングする。第３論理アドレスは、更新後データＢのライト先である論理アドレスである。第２物理アドレスは、既存データＢに対応した第２論理アドレスに静的マッピングされている物理アドレスである。【００４２】
以上の処理（ｂ１）及び（ｂ２）により、更新後データＢが重複排除される。具体的には、更新後データＢがＦＭＤに追記されることが回避される。【００４３】
なお、ケースＢのように重複が生じるケースでは、互いに重複する既存データ及び更新後データのうち更新後データについて重複排除が行われることが好ましい。なぜなら、例えば既存データＢが重複排除されると、第３物理アドレスにデータＢがライトされ、結果として、ＦＭＤにデータＢが既に存在しているにも関わらずデータＢがＦＭＤに追記されることになるからである。【００４４】
また、本実施例において、物理アドレス（ケースＢでは第３物理アドレス）に対するゼロデータのライトに代えて、その物理アドレスについてのアンマップコマンドをＦＭＤに送信することであってもよい。アンマップコマンドとは、物理アドレス（ＦＭＤが提供する仮想アドレス）に関連付いているＦＭＤアドレスについてアンマップ（マッピングの解除）を指示するコマンドである。アンマップコマンドによれば、ＦＭＤアドレスのマッピングが解除されるので、そのＦＭＤアドレスがマッピングされていた物理アドレス（仮想アドレス）の分、ＦＭＤの使用容量が削減されたことになる。本実施例では、重複排除の方式として、ゼロデータをライトする方式が採用されるが、上記のように、重複排除対象のデータに対応した物理アドレスについてのアンマップコマンドを送信する方式が採用されてもよい。但し、アンマップコマンドを送信する方式では、物理アドレスについてゼロデータがライトされることとみなしてパリティを生成することが必要になり得る。ＦＭＤが、ＦＭＤアドレスがアンマップされている物理アドレス（仮想アドレス）を指定したリードコマンドをストレージコントローラ１０１から受信した場合にゼロデータを返す仕様になっているためである。ＦＭＤアドレスがアンマップされた物理アドレスについての本実施例で言う「ゼロデータ」は、ＦＭＤアドレスが割り当てられていない物理アドレスに対するリードコマンドに応答して返されるデータであるフォーマットデータの一例である。本実施例では、重複排除されたデータに代えて書き込まれるデータだけでなく、フォーマットデータも、「ゼロデータ」である。【００４５】
＜ケースＣ＞【００４６】
ケースＣは、重複元及び重複先のうち重複先のデータが更新されるケースである。「重複元」とは、参照される側であり、「重複先」とは、参照する側である。以下の説明では、適宜、論理アドレス、物理アドレス及びデータの少なくとも１つに「重複元」及び「重複先」を付すことがある。「重複元論理アドレス」は、重複元データのライト先の論理アドレスである。「重複元物理アドレス」は、重複元論理アドレスに静的マッピングされている物理アドレス、別の言い方をすれば、重複先論理アドレスに動的マッピングされている物理アドレスである。「重複元データ」は、重複する２以上のデータのうち重複排除されなかったデータである。一方、「重複先論理アドレス」は、重複先データのライト先の論理アドレスであって、重複元物理アドレスに動的マッピングされる論理アドレスである。「重複先物理アドレス」は、重複先論理アドレスに静的マッピングされている物理アドレスである。「重複先データ」は、重複する２以上のデータのうち重複排除されたデータである。サーバシステムからは、２以上の論理アドレスにそれぞれ２以上の同一データが存在するようにみえても、ストレージシステム内部では、それら２以上の同一データのうち重複元とされたデータのみがＦＭＤにライトされ、重複先とされたデータ（重複排除されたデータ）はＦＭＤにライトされない。【００４７】
ストレージコントローラ１０１は、重複先データＢに非重複データＥがライトされる場合（重複先論理アドレス（第３論理アドレス）に非重複データＥがライトされる場合）、以下の処理（ｃ１）及び（ｃ２）を行う。
（ｃ１）ストレージコントローラ１０１は、重複先論理アドレス（第３論理アドレス）の動的マッピング先を、重複元物理アドレス（第２物理アドレス）から、重複先論理アドレス（第３論理アドレス）の静的マッピング先（第３物理アドレス）に変更する。つまり、ストレージコントローラ１０１は、重複先論理アドレス（第３論理アドレス）について、動的マッピング先を静的マッピング先に一致させる。
（ｃ２）ストレージコントローラ１０１は、第３物理アドレスに対応したゼロデータ（重複先データＢに対応したゼロデータ）に、非重複データＥを上書きする。【００４８】
以上の処理（ｃ１）及び（ｃ２）により、重複排除状態が解除され、非重複データＥ（更新後データＥ）がＦＭＤに追記される。【００４９】
＜ケースＤ＞【００５０】
ケースＤは、重複元及び重複先のうち重複元のデータが更新されるケースである。【００５１】
ストレージコントローラ１０１は、重複元データＢに非重複データＥがライトされる場合（重複元論理アドレス（第２論理アドレス）に非重複データＥがライトされる場合）、以下の処理（ｄ１）〜（ｄ３）を行う。
（ｄ１）ストレージコントローラ１０１は、重複先論理アドレス（第３論理アドレス）の動的マッピング先を、重複元物理アドレス（第２物理アドレス）から、重複先論理アドレス（第３論理アドレス）の静的マッピング先（第３物理アドレス）に変更する。
（ｄ２）ストレージコントローラ１０１は、重複元物理アドレス（第２物理アドレス）から重複先物理アドレス（第３物理アドレス）に重複元データＢをコピーする。結果として、第３物理アドレスに対応したゼロデータが重複元データＢで上書きされる。
（ｄ３）ストレージコントローラ１０１は、第２物理アドレスに対応した重複元データＢに、非重複データＥを上書きする。【００５２】
以上の処理（ｄ１）〜（ｄ３）により、重複排除状態が解除され、非重複データＥ（更新後データＥ）がＦＭＤに追記される。また、重複元データＢもＦＭＤに追記される。なお、重複元データＢは既にＦＭＤに存在しているので、第３物理アドレスにコピーされた重複元データＢをＦＭＤに追記されることに代えて、データＢに対応したＦＭＤアドレスを第３物理アドレスに関連付けることが考えられる。しかし、物理アドレス（特に仮想アドレス）とＦＭＤアドレスとの対応関係の管理は、ＦＭＤにより行われていることであり、ストレージコントローラ１０１により制御できることではない。そのため、物理アドレスにライトされるデータはＦＭＤに追記するようにすることが好ましい。【００５３】
以上のように、本実施例では、ＦＭＤが圧縮機能及び容量仮想化機能を有し、ストレージコントローラ１０１が重複排除機能を有する。論理アドレスと物理アドレス間のマッピングとして、静的マッピング及び動的マッピングがある。ストレージコントローラ１０１は、実ページのような比較的大きな単位で物理アドレス範囲を論理アドレス範囲に割り当て、重複したデータが生じない限り、静的マッピングを使用する。このため、同一の論理アドレスに対してデータのライトが行われる都度に、その論理アドレスに対する物理アドレスを変更する必要がない。つまり、ライトの都度のマッピング更新を必要としない。これは、ストレージコントローラ１０１の負荷軽減に貢献する。【００５４】
また、本実施例では、静的マッピングされている物理アドレスに更新後データをライトするようになっており、物理アドレス範囲に空きを作るためのガベージコレクションをストレージコントローラ１０１が行う必要は無い。これも、ストレージコントローラ１０１の負荷軽減に貢献する。【００５５】
また、重複先データ（重複排除されたデータ）はゼロデータとしてＦＭＤにライトされる（又は重複先物理アドレスについてＦＭＤによりアンマップが実行される）。このため、ＦＭＤの実使用容量（物理的な使用容量）を削減することができる。【００５６】
以下、本実施例を詳細に説明する。【００５７】
図２は、ストレージシステムの構成を示す。【００５８】
ストレージシステム２００は、複数（又は１つ）のＦＭＤ３２０と、複数のＦＭＤ３２０に接続されたストレージコントローラ１０１とを有する。複数のＦＭＤ３２０は１以上のＲＧを構成してもよい。ＲＧは、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループの略である。【００５９】
ストレージコントローラ１０１は、Ｓ−Ｉ／Ｆ２１４と、Ｍ−Ｉ／Ｆ２１５と、Ｆ−Ｉ／Ｆ２１３と、メモリ２１２と、それらに接続されたプロセッサ２１１とを有する。Ｓ−Ｉ／Ｆ２１４、Ｍ−Ｉ／Ｆ２１５及びＦ−Ｉ／Ｆ２１３が、インターフェース部の一例である。メモリ２１２が、記憶部の一例である。プロセッサ２１１が、プロセッサ部の一例である。【００６０】
Ｓ−Ｉ／Ｆ２１４は、サーバシステム２０１とストレージコントローラ１０１との間のデータのやり取りを仲介する通信インターフェースデバイスである。Ｓ−Ｉ／Ｆ２１４に、ＦＣ（Fibre Channel）ネットワーク２０３を介して、サーバシステム２０１が接続される。サーバシステム２０１は、ストレージコントローラ１０１に対して、Ｉ／Ｏ先（例えばＬＵＮ（Logical Unit Number）のような論理ボリューム番号や、ＬＢＡ（Logical Block Address）のような論理アドレス）を指定したＩ／Ｏコマンドを送信する。【００６１】
Ｍ−Ｉ／Ｆ２１５は、管理システム２０５とストレージコントローラ１０１の間のデータのやり取りを仲介する通信インターフェースデバイスである。Ｍ−Ｉ／Ｆ２１５には、ＩＰ（Internet Protocol）ネットワーク２０４を介して管理システム２０５が接続される。ネットワーク２０３及び２０４は、同一の通信ネットワークでもよい。管理システム２０５は、ストレージシステム２００を管理する。【００６２】
Ｆ−Ｉ／Ｆ２１３は、複数のＦＭＤ３２０とストレージコントローラ１０１の間のデータのやり取りを仲介する通信インターフェースデバイスである。Ｆ−Ｉ／Ｆ２１３には、複数のＦＭＤ３２０が接続される。【００６３】
メモリ２１２は、プロセッサ２１１が実行するプログラムや、プロセッサ２１１が使用するデータを記憶する。プロセッサ２１１は、メモリ２１２に格納されているプログラムを実行する。メモリ２１２及びプロセッサ２１１の組が二重化されている。【００６４】
図３は、ＦＭＤ３２０の構成を示す。【００６５】
ＦＭＤ３２０は、複数のＦＭ（ＦＭチップ）３２０と、複数のＦＭ３２０に接続されたＦＭコントローラ３００とを有する。ＦＭは、典型的には、ＮＡＮＤ型のＦＭである。【００６６】
ＦＭコントローラ３００は、ＦＭ３２０に対するＩ／Ｏを制御する。ＦＭコントローラ３００は、Ｌ−Ｉ／Ｆ３１３と、Ｕ−Ｉ／Ｆ３１４と、圧縮／伸張回路３１５と、メモリ３１２と、それらに接続されたプロセッサ３１１とを有する。【００６７】
Ｕ−Ｉ／Ｆ３１４は、上位システムの一例であるストレージコントローラ１０１に接続される通信インターフェースデバイスであり、ストレージコントローラ１０１とＦＭコントローラ３００間のデータ通信を仲介する。Ｌ−Ｉ／Ｆ３１３は、ＦＭ３２０とＦＭコントローラ３００間のデータ通信を仲介する。圧縮／伸張回路３１５は、データの圧縮及び伸張を行うハードウェアである。圧縮及び伸張は、ハードウェアに代えてプロセッサ２１１がプログラムを実行することにより行われてもよい。【００６８】
メモリ３１２は、プロセッサ３１１が実行するプログラムや、プロセッサ３１１が使用するデータを記憶する。プロセッサ３１１は、メモリ３１２に格納されているプログラムを実行する。【００６９】
ＦＭコントローラ３００は、ストレージコントローラ１０１からライトコマンドを受信した場合、ライトコマンドに従うデータを圧縮／伸張回路により圧縮してＦＭ３２０に追記する。また、ＦＭコントローラ３００は、ストレージコントローラ１０１からリードコマンドを受信した場合、リードコマンドに従うデータをＦＭ３２０から読み出して圧縮／伸張回路により伸張してストレージコントローラ１０１に応答する。【００７０】
ＦＭコントローラ３００は、仮想アドレス空間をストレージコントローラ１０１に提供する。ＦＭコントローラ３００は、仮想アドレスとＦＭＤアドレスの対応関係を表すアドレス変換情報を保持している。ＦＭコントローラ３００は、ストレージコントローラ１０１からのライトコマンド又はリードコマンドで指定されている仮想アドレスに対応したＦＭＤアドレスが属する物理ページを特定し、特定した物理ページに対してライト又はリードを実行する。【００７１】
図４は、メモリ２１２の構成と、メモリ２１２内のプログラム及び情報とを示す。【００７２】
メモリ２１２は、ローカルメモリ４０１、キャッシュメモリ４０２、及び共有メモリ４０４というメモリ領域を含む。これらのメモリ領域のうちの少なくとも１つは、独立したメモリであってもよい。【００７３】
ローカルメモリ４０１は、このローカルメモリ４０１を含むメモリ２１２と同一組に属するプロセッサ２１１により使用される。言い換えれば、ローカルメモリ４０１は、このローカルメモリ４０１を含むメモリ２１２と異なる組に属するプロセッサ２１１により使用されない。ローカルメモリ４０１には、リードプログラム４１１、フロントエンドライトプログラム４１２、バックエンドライトプログラム４１３、アドレス変換プログラム４１４、重複排除プログラム４１５、及び、プール容量管理プログラム４１６が格納される。これらのプログラムについては後述する。【００７４】
キャッシュメモリ４０２には、ＦＭＤ３２０に対してライト又はリードされるデータが一時的に格納される。【００７５】
共有メモリ４０４は、この共有メモリ４０４を含むメモリ２１２と同一組に属するプロセッサ２１１と異なる組に属するプロセッサ２１１との両方により使用される。共有メモリ４０４には、ＶＯＬ管理テーブル４２１、ページ割当て管理テーブル４２２、プール管理テーブル４２３、ＲＧ管理テーブル４２４、動的マッピングテーブル４２５、静的マッピングテーブル４２６、空き管理テーブル４２７、ページ単位管理テーブル４２８及び重複排除管理テーブル４２９が格納される。これらのテーブルについては後述する。【００７６】
図５は、ストレージシステム２００内の記憶階層を示す。【００７７】
論理ボリューム５０１、重複管理ボリューム５０２、仮想プール５０３、ＲＧ５０４、仮想アドレス空間５０５、及び、ＦＭＤアドレス空間５０６がある。論理ボリューム５０１に対応したアドレス空間に属するアドレスが、図１における論理アドレスに相当する。重複管理ボリューム５０２、仮想プール５０３、ＲＧ５０４及び仮想アドレス空間に対応したアドレス空間に属するアドレスが、図１における物理アドレスに相当する。【００７８】
論理ボリューム５０１は、サーバシステム２０１に提供される記憶空間である。【００７９】
重複管理ボリューム５０２は、重複排除の管理のための内部ボリューム（サーバシステム２０１に提供されない記憶空間）である。プール５０３は、１以上のＲＧ５０４に基づく記憶空間（例えば、１以上のＲＧ５０４に基づく複数のボリュームで構成された記憶空間）であり、複数の実ページで構成されている。ＲＧ５０４は、複数のＦＭＤ３２０又は複数のＦＭＤ領域（１以上のＦＭＤ３２０が提供する記憶領域）で構成された記憶空間である。仮想アドレス空間５０５は、ＦＭＤ３２０により提供された空間である。仮想アドレス空間５０５のサイズは、容量仮想化機能により、典型的には、物理サイズ（複数のＦＭ３２０の合計容量）より大きい。【００８０】
ＦＭＤアドレス空間５０６は、ＦＭＤ３２０において管理されている内部空間（物理空間）である。ＦＭＤアドレス空間５０６は、典型的には、物理サイズに等しい。【００８１】
本実施例では、例えば、以下のように、データが格納される。【００８２】
例えば、論理ボリューム５０１に、重複する２つのデータＡと、非重複の１つのデータＢが格納されているとする。【００８３】
重複する２つのデータＡは、ストレージシステム２００内部では、次のように格納されている。
・重複元データＡが、重複元論理アドレスに静的マッピングされている重複元物理アドレスに対して格納されている。ここで言う重複元物理アドレスは、重複管理ボリューム５０２における領域のアドレスと、その領域（アドレス）に割り当てられた実ページ（プール５０３の一部領域）における領域のアドレスとに関わる。重複元データＡは、結果として、ＲＧ５０４及び仮想アドレス空間５０５を通じて、圧縮されてＦＭＤアドレス空間５０６に格納されている（圧縮データａ）。
・重複先データＡについては、重複先論理アドレスが重複元物理アドレスに動的マッピングされている。重複先データＡに代えて、ゼロデータが、重複先物理アドレスに対して格納されている。ここで言う重複先物理アドレスは、重複管理ボリューム５０２における領域のアドレスと、その領域（アドレス）に割り当てられた実ページ（プール５０３の一部領域）における領域のアドレスとに関わる。ゼロデータは、結果として、ＲＧ５０４及び仮想アドレス空間５０５を通じて、圧縮されてＦＭＤアドレス空間５０６に格納されている。【００８４】
一方、非重複のデータＢは、ストレージシステム２００内部では、次のように格納されている。すなわち、データＢは、重複管理ボリューム５０２を経由せず、そのデータＢのライト先論理アドレスに静的マッピングされている物理アドレスに対して格納されている。ここで言う重複先物理アドレスは、論理アドレスに割り当てられた実ページにおける領域のアドレスに関わる。データＢは、結果として、ＲＧ５０４及び仮想アドレス空間５０５を通じて、圧縮されてＦＭＤアドレス空間５０６に格納されている（圧縮データｂ）。【００８５】
キャッシュメモリ４０２は、論理ボリューム５０１に対応した第１キャッシュ領域と、重複管理ボリューム５０２に対応した第２キャッシュ領域とを含んでいてよい。この場合、サーバシステム２０１との間でやり取りされるデータは、第１キャッシュ領域に格納され、ＦＭＤ３２０との間でやり取りされるデータは、第２キャッシュ領域に格納され、第１キャッシュ領域と第２キャッシュ領域間で適宜データが転送される。また、重複管理ボリューム５０２があることで、重複排除の管理をフロントエンドとバックエンドとで切り離す（具体的には、例えば、サーバシステム２０１からのデータを第１キャッシュ領域に格納しその後に第２キャッシュ領域にそのデータを転送するときに重複排除する）といったことができる。このため、重複管理ボリューム５０２は、必ずしも無くてもよいが、あることが好ましい。【００８６】
図６は、重複管理ボリューム５０２の構成を示す。【００８７】
重複管理ボリューム５０２は、静的マッピング空間６０１と、追記空間６０２とを含む。静的マッピング空間６０１には、静的マッピングに従いデータがライトされる空間である。追記空間６０２は、静的マッピング空間６０１の補助的な記憶空間（例えばバッファ）でよい。例えば、追記空間６０２は、データの退避先として使用されてもよいし、データの重複の有無の判断のために算出されたハッシュ値（データのハッシュ値）の一時的な格納先として使用されてもよい。【００８８】
図７は、一比較例に係る重複管理ボリュームの構成を示す。【００８９】
一比較例に係る重複管理ボリューム７００によれば、全域が、追記空間７０１である。一比較例に係る追記空間７０１は、データのライトが発生する都度にデータが追記される空間である。一比較例によれば、追記空間７０１に対してストレージコントローラがガベージコレクションを行う必要が生じる。【００９０】
図８は、ＶＯＬ管理テーブル４２１の構成を示す。【００９１】
本実施例では、論理ボリューム５０１のようにサーバシステム２０１に提供されるボリュームも、重複管理ボリューム５０２のようにサーバシステム２０１に提供されない内部ボリュームも、「ＶＯＬ」と総称される。ＶＯＬ管理テーブル４２１は、ＶＯＬに関する情報を保持する。ＶＯＬ管理テーブル４２１は、ＶＯＬ毎に、エントリを有する。各エントリは、ＶＯＬ＃８０１、ＶＯＬ属性８０２、ＶＯＬ容量８０３及びプール＃８０４といった情報を保持する。【００９２】
ＶＯＬ＃８０１は、ＶＯＬの番号（識別番号）を表す。ＶＯＬ属性８０２は、ＶＯＬの属性を表す（例えば論理ボリュームは“論理”、重複管理ボリュームは“重複管理”）。ＶＯＬ容量８０３は、ＶＯＬの容量を表す。プール＃８０４は、ＶＯＬに関連付けられているプール５０３の番号を表す。【００９３】
図９は、ページ割当て管理テーブル４２２の構成を示す。【００９４】
ページ割当て管理テーブル４２２は、実ページが割り当てられ得る領域毎に、エントリを有する。各エントリは、ＶＯＬ＃９０１、ＶＯＬアドレス９０２、ページ＃９０３及びページ割当て状態９０４といった情報を保持する。【００９５】
ＶＯＬ＃９０１は、領域が属するＶＯＬの番号を表す。ＶＯＬアドレス９０２は、領域を指すアドレスである。このアドレスは、領域が属するＶＯＬが論理ボリューム５０１であれば、論理アドレスであり、領域が属するＶＯＬが重複管理ボリューム５０２であれば、重複管理アドレス（重複管理ボリューム５０２における領域を指すアドレス）である。ページ＃９０３は、領域に割り当てられている実ページの番号である。実ページが割り当てられていなければ、ページ＃９０３は“−”である。【００９６】
ページ割当て状態９０４は、実ページの状態を表す。例えば、重複管理ボリューム５０２における領域に実ページが割り当てられている場合、重複管理ボリューム５０２のその領域について、ページ割当て状態９０４は、“割当て済”である。また、例えば、論理ボリューム５０１における領域に対して実ページが割り当てられておらず、重複管理ボリューム５０２のいずれかの領域に実ページが割り当てられている場合、論理ボリューム５０１のその領域について、ページ割当て状態９０４は、“重複管理状態”である。また、例えば、論理ボリューム５０１における領域に対して実ページが割り当てられておらず、且つ、重複管理ボリューム５０２のいずれの領域にも実ページが割り当てられていない場合、ページ割当て状態９０４は、“未割当て”である。また、例えば、“重複管理状態”でないＶＯＬ及びＶＯＬアドレスについて実ページが割り当てられている場合、“割当て済”となる。【００９７】
ストレージコントローラ１０１は、論理アドレス範囲（実ページと同サイズの領域）毎にライト頻度（更新頻度）を管理してよい。ストレージコントローラ１０１は、ライト頻度が閾値未満であれば、重複排除管理のために実ページを重複管理ボリューム５０２（例えば、ライト先論理ボリューム５０１に関連付けられている重複管理ボリューム５０２）に割り当ててよい。一方、ストレージコントローラ１０１は、ライト頻度が閾値以上であれば、実ページを論理ボリューム５０１に割り当ててよい（すなわち、その実ページが割り当てられた論理アドレス範囲については重複排除処理を実行しないでよい）。なぜなら、ライト頻度が閾値以上であると、重複排除を行っても短時間のうちに更新後データとして非重複データがライトされる可能性が高いためである。【００９８】
図１０は、プール管理テーブル４２３の構成を示す。【００９９】
プール管理テーブル４２３は、プール５０３に関する情報を保持する。プール管理テーブル４２３は、プール５０３毎にエントリを有する。各エントリは、プール＃１００１、ＲＧ＃１００２、仮想プール容量１００３、仮想プール使用容量１００４、実プール容量１００５、実プール使用容量１００６及び容量仮想化機能有無１００７といった情報を保持する。【０１００】
プール＃１００１は、プール５０３の番号を表す。ＲＧ＃１００２は、プール５０３の基になっている１以上のＲＧ５０４の番号を表す。【０１０１】
仮想プール容量１００３は、プール５０３の仮想的な容量、具体的には、例えば、プール５０３の基になっている１以上のＲＧ５０４にそれぞれ対応した１以上の仮想ＲＧ容量（後述）の合計を表す。【０１０２】
仮想プール使用容量１００４は、仮想プール容量１００３のうち使用されている容量（典型的には、プール５０３のうちの割当て済実ページの総容量）を表す。【０１０３】
実プール容量１００５は、プール５０３の実体的な（物理的な）容量、具体的には、例えば、プール５０３の基になっている１以上のＲＧ５０４にそれぞれ対応した１以上の実ＲＧ容量（後述）の合計を表す。【０１０４】
実プール使用容量１００６は、実プール容量１００５のうちの使用されている容量、例えば、プール５０３の基になっている１以上のＲＧ５０４にそれぞれ対応した１以上の実ＲＧ使用容量（後述）の合計を表す。【０１０５】
容量仮想化機能有無１００７は、プール５０３が容量仮想化機能を有するか否かを表す。プール５０３の基になっている１以上のＲＧ５０４の全てが容量仮想機能を有していれば、容量仮想化機能有無１００７は“有り”である。【０１０６】
なお、本実施例では、説明を分かり易くするために、１つのＲＧ５０４の仮想ＲＧ容量全体が１つのプール５０３に対応することとしているが、仮想ＲＧ容量の一部がプール５０３に使用され残りが他の用途（例えば他のプール５０３）に使用されてもよい。【０１０７】
図１１は、ＲＧ管理テーブル４２４の構成を示す。【０１０８】
ＲＧ管理テーブル４２４は、ＲＧ５０４に関する情報を保持する。ＲＧ管理テーブル４２４は、ＲＧ５０４毎にエントリを有する。各エントリは、ＲＧ＃１１０１、ＦＭＤ＃１１０２、ＲＡＩＤレベル１１０３、仮想ＲＧ容量１１０４、実ＲＧ容量１１０５、実ＲＧ使用容量１１０６及び容量仮想化機能有無１１０７といった情報を保持する。【０１０９】
ＲＧ＃１１０１は、ＲＧ５０４の番号を表す。ＦＭＤ＃１１０２は、ＲＧ５０４を構成する複数のＦＭＤ３２０の番号を表す。ＲＡＩＤレベル１１０３は、ＲＧ５０４のＲＡＩＤレベル１１０３を表す（３Ｄ＋１ＰのようなＲＡＩＤ構成を含んでもよい）。【０１１０】
仮想ＲＧ容量１１０４は、ＲＧ５０４の仮想的な容量、具体的には、ＲＧ５０４を構成する複数のＦＭＤ３２０がそれぞれ提供する複数の仮想アドレス空間の総容量である。【０１１１】
実ＲＧ容量１１０５は、ＲＧ５０４の実体的な容量、具体的には、ＲＧ５０４を構成する複数のＦＭＤ３２０の実容量（ＦＭ３２０の総容量）の合計を表す。【０１１２】
実ＲＧ使用容量１１０６は、実ＲＧ容量１１０５のうちの使用されている容量、具体的には、ＲＧ５０４を構成する複数のＦＭＤ３２０にそれぞれ対応した複数の実使用容量の合計を表す。１つのＦＭＤ３２０について、「実使用容量」とは、有効データの総量である。圧縮機能及び容量仮想化機能を有するＦＭＤ３２０において、有効データは、圧縮データである。実ＲＧ使用容量１１０６は、容量計算処理により更新される。容量計算処理は、例えば定期的に次のように実行される。プール５０３容量管理プログラム４１６が、ＲＧ５０４を構成する複数のＦＭＤ３２０の各々に実使用容量の問合せを送信する。プール５０３容量管理プログラム４１６が、その複数のＦＭＤ３２０からそれぞれ得られた複数の回答（実使用容量）を基に、実ＲＧ使用容量１１０６を算出する。本実施例では、容量仮想化機能を有するＦＭＤ３２０は、実使用容量の問合せを受け付けその問合せに対して実使用容量を回答する機能を有する。【０１１３】
容量仮想化機能有無１１０７は、ＲＧ５０４が容量仮想化機能を有するか否かを表す。ＲＧ５０４の基になっている複数のＦＭＤ３２０の全てが容量仮想機能を有していれば、ＲＧ５０４が容量仮想化機能を有している、ということである。【０１１４】
図１２は、動的マッピングテーブル４２５の構成を示す。【０１１５】
動的マッピングテーブル４２５は、論理アドレスと物理アドレス（ここでは重複管理アドレス）間の動的マッピングを表す。動的マッピングテーブル４２５は、動的マッピング毎にエントリを有する。各エントリは、ＶＯＬ＃１２０１、ＶＯＬアドレス１２０２、重複管理ボリューム＃１２０３、重複管理アドレス１２０４及び重複排除状態１２０５といった情報を保持する。【０１１６】
ＶＯＬ＃１２０１は、ＶＯＬ（ここでは論理ボリューム５０１）の番号を表す。ＶＯＬアドレス１２０２は、ＶＯＬの領域を指すアドレス（ここでは論理アドレス）を表す。重複管理ボリューム＃１２０３は、対応するＶＯＬ＃及びＶＯＬアドレスが動的マッピングされている領域を含んだ重複管理ボリューム５０２の番号を表す。重複管理アドレス１２０４は、対応するＶＯＬ＃１２０１及びＶＯＬアドレス１２０２が動的マッピングされている領域（重複管理ボリューム５０２における領域）を指すアドレスを表す。【０１１７】
重複排除状態１２０５は、重複排除に関する状態を表す。“重複有り（重複元）”は、ＶＯＬアドレスが重複元であることを意味する。“重複有り（重複先）”は、ＶＯＬアドレスが重複先であることを意味する。“重複無し”は、対応するＶＯＬアドレス（論理アドレス）について重複データが無いという状態、すなわち、対応するＶＯＬアドレス（論理アドレス）の動的マッピング先がそのＶＯＬアドレス（論理アドレス）の静的マッピング先と一致することを意味する。【０１１８】
図１３は、静的マッピングテーブル４２６の構成を示す。【０１１９】
静的マッピングテーブル４２６は、論理アドレスと物理アドレス（ここでは重複管理アドレス１２０４）間の静的マッピングを表す。静的マッピングテーブル４２６は、静的マッピング毎にエントリを有する。各エントリは、ＶＯＬ＃１３０１、ＶＯＬアドレス１３０２、重複管理ボリューム＃１３０３及び重複管理アドレス１３０４といった情報を保持する。【０１２０】
ＶＯＬ＃１３０１は、ＶＯＬ（ここでは論理ボリューム５０１）の番号を表す。ＶＯＬアドレス１３０２は、ＶＯＬの領域を指すアドレス（ここでは論理アドレス）を表す。重複管理ボリューム＃１３０３は、対応するＶＯＬ＃及びＶＯＬアドレスが静的マッピングされている領域を含んだ重複管理ボリューム５０２の番号を表す。重複管理アドレス１３０４は、対応するＶＯＬ＃及びＶＯＬアドレスが静的マッピングされている領域（重複管理ボリューム５０２における領域）を指すアドレスを表す。【０１２１】
図１３によれば、例えば次の通りである。すなわち、論理ボリューム“０”の先頭アドレス（ＶＯＬアドレス１３０２“０”）が、重複管理ボリューム“１００”の先頭アドレス（重複管理アドレス１３０２“０”）に静的マッピングされており、以降のＶＯＬアドレス及び重複管理アドレスも、１：１で静的マッピングされている。【０１２２】
図１４は、空き管理テーブル４２７の構成を示す。【０１２３】
空き管理テーブル４２７は、重複管理ボリューム５０２の追記空間６０２における空き領域を表す。空き管理テーブル４２７は、重複管理ボリューム５０２毎にエントリを有する。各エントリは、重複管理ボリューム＃１４０１、先頭アドレス１４０２、終端アドレス１４０３、使用済アドレス１４０４及び解放済アドレス１４０５といった情報を保持する。【０１２４】
重複管理ボリューム＃１４０１は、重複管理ボリューム５０２の番号を表す。先頭アドレス１４０２は、追記空間６０２の先頭アドレスを表す。終端アドレス１４０３は、追記空間６０２の終端アドレスを表す。使用済アドレス１４０４は、追記空間６０２のうちの使用済領域の先頭又は終端のアドレスを表す。解放済アドレス１４０５は、追記空間６０２のうちの解放済領域の先頭又は終端のアドレスを表す。【０１２５】
追記空間６０２には、データが追記又は上書きされる。例えば、追記空間６０２内の領域が動的マッピング先である論理アドレスの状態が重複無しの状態であれば、上書きであってもよいし（具体的には、追記空間６０２内のその領域にデータが上書きされてもよいし）、追記であってもよい（具体的には、動的マッピング先が追記空間６０２内の空き領域に変更されてその空き領域にデータが書き込まれてもよい）。また、例えば、追記空間６０２内の領域が動的マッピング先でない論理アドレスについては、追記でよい（具体的には、その論理アドレスの動的マッピング先が追記空間６０２内の空き領域に変更されてその空き領域にデータが書き込まれてもよい）。使用済アドレス１４０４＞解放済アドレス１４０５の場合、先頭アドレス１４０２から解放済アドレス１４０５までの領域（解放済領域）と、使用済アドレス１４０４から終端アドレス１４０３までの領域とが空き領域であり、解放済アドレス１４０５から使用済アドレス１４０４までの領域が、使用済領域である。一方、使用済アドレス１４０４＜解放済アドレス１４０５の場合、先頭アドレス１４０２から使用済アドレス１４０４までの領域と、解放済アドレス１４０５から終端アドレス１４０３までの領域とが使用済領域であり、使用済アドレス１４０４から解放済アドレス１４０５までの領域（解放済領域）が空き領域である。【０１２６】
図１５は、ページ単位管理テーブル４２８の構成を示す。【０１２７】
ページ単位管理テーブル４２８は、実ページに関する情報を保持する。ページ単位管理テーブル４２８は、実ページ毎にエントリを有する。各エントリは、ページ＃１５０１、ＶＯＬ＃１５０２、ＶＯＬアドレス１５０３、仮想ＲＧ＃１５０４、仮想ＲＧアドレス１５０５、重複排除有無１５０６及び割当て先属性１５０７といった情報を保持する。【０１２８】
ページ＃１５０１は、実ページの番号を表す。ＶＯＬ＃１５０２は、実ページの割当て先のＶＯＬの番号を表す。ＶＯＬアドレス１５０３は、実ページの割当て先の領域（ＶＯＬにおける領域）を指すアドレスを表す。仮想ＲＧ＃１５０４は、実ページを含む仮想ＲＧの番号を表す。「仮想ＲＧ」とは、プール５０３の一部であり、ＲＧ５０４により提供された空間（領域）である。仮想ＲＧアドレス１５０５は、仮想ＲＧにおける領域（実ページ）を指すアドレスである。重複排除有無１５０６は、実ページにおいて重複排除がされているか否かを表す。重複元及び重複先（ＶＯＬ上はゼロデータ）のどちらでもない実ページについての重複排除有無１５０６は“無し”である。割当て先属性１５０７は、実ページの割当て先領域を含んだＶＯＬの属性（例えば“論理ボリューム”、“重複管理ボリューム”）を表す。ページ単位管理テーブル４２８があることにより、実ページ内に重複データ（重複元データ及び重複先データの総称）を含まない場合には、ストレージコントローラ１０１（プロセッサ２１１）は、静的マッピングのみで重複管理アドレスを特定でき、動的マッピングテーブル４２５を参照する必要はない。動的マッピングテーブル４２５は、情報量が多くなることがあり、そのため、階層管理やディレクトリ管理が望ましく、故に、テーブル４２５へのアクセスオーバーヘッドが大きくなることがある。一方、静的マッピングテーブル４２６は、動的マッピングテーブル４２５に比して、情報量が少なく、故に、構造がシンプルであり、アクセスオーバーヘッドは小さい。実ページ単位で重複排除が実施されていない場合は、重複排除有無１５０６“無し”を特定できれば、処理オーバーヘッドを削減することができる。【０１２９】
図１６は、重複排除管理テーブル４２９の構成を示す。【０１３０】
重複排除管理テーブル４２９は、データと重複するデータの位置（論理アドレス）を表す。例えば、重複排除管理テーブル４２９は、ストレージシステム２００に格納されたデータ毎にハッシュ値をキーとして有する。各キー（ハッシュ値）に、そのキーと重複するハッシュ値となるデータが格納されている領域を表すＶＯＬ＃及びＶＯＬアドレス（例えば論理ボリューム番号及び論理アドレス）が関連付けられる。【０１３１】
図１７は、プール一覧画面を示す。【０１３２】
プール一覧画面１７００は、管理画面の一例である。管理画面は、ストレージシステム２００からの情報を基に管理システム２０５により表示される画面である。【０１３３】
プール一覧画面１７００には、プール一覧情報が表示される。プール一覧情報は、プール管理テーブル４２３に従う情報である。すなわち、プール＃は、プール＃１００１に相当し、論理容量及び論理使用容量は、仮想プール容量１００３及び仮想プール使用容量１００４に相当し、実容量及び実使用容量は、実プール容量１００５及び実プール使用容量１００６に相当する。削減率（％）は、（実使用容量／仮想プール使用容量）×１００に相当する（小数点第一位は四捨五入）。削減率は、ストレージコントローラ１０１及び管理システム２０５の一方により算出される。【０１３４】
管理者は、プール一覧画面１７００を見て、例えば、論理容量と論理使用容量との差分が閾値未満になったプール５０３、及び、実容量と実使用容量との差分が閾値未満になったプール５０３のうちの少なくとも１つのプール５０３に対してＲＧ５０４（又はＲＧ５０４に基づくボリューム）を追加することを決定できる。【０１３５】
以下、本実施例で行われる処理を説明する。【０１３６】
図１８は、フロントエンドライト処理の流れを示す。【０１３７】
フロントエンドライト処理とは、データのライト要求をサーバシステム２０１から受信した場合に開始される処理であって、そのデータを第１キャッシュ領域（ライト要求に従うライト先の論理ボリューム５０１に対応したキャッシュ領域）にライトする処理である。フロントエンドライト処理は、フロントエンドライトプログラム４１２により実行される。第１キャッシュ領域と第２キャッシュ領域（重複管理ボリューム５０２に対応したキャッシュ領域）間のデータ転送は、アドレス変換プログラム４１４により実行される。図１８の説明において、受信したライト要求に従うデータを「データＷ」と表記する。【０１３８】
Ｓ１８０１で、フロントエンドライトプログラム４１２は、第１キャッシュ領域についてキャッシュヒットしたか否かを判断する。ライト要求について、「キャッシュヒット」とは、ライト要求に従うライト先に対応したキャッシュセグメント（キャッシュメモリ４０２における領域）が確保されていることを意味する。【０１３９】
Ｓ１８０１の判断結果が偽の場合（Ｓ１８０１：Ｎｏ）、Ｓ１８０２で、フロントエンドライトプログラム４１２は、第１キャッシュ領域からキャッシュセグメントを確保する。【０１４０】
Ｓ１８０３で、フロントエンドライトプログラム４１２は、確保されているキャッシュセグメントにデータＷをライトする。【０１４１】
Ｓ１８０４で、フロントエンドライトプログラム４１２は、ＶＯＬ管理テーブル４２１を基に、データのライト先の論理ボリューム５０１に重複管理ボリューム５０２が関連付けられているか（つまり、ライト先の論理ボリューム５０１が重複排除対象のＶＯＬであるか）否かを判断する。【０１４２】
Ｓ１８０４の判断結果が真の場合（Ｓ１８０４：Ｙｅｓ）、Ｓ１８０５で、フロントエンドライトプログラム４１２は、ページ割当て管理テーブル４２２を基に、ライト先に対応したページ割当て状態９０４が“重複管理状態”か否かを判断する。なお、もし、ライト先に対応したページ割当て状態９０４が“未割当て”の場合、Ｓ１８０５で、未割当ての実ページ（空き実ページ）が割当て対象として選択され、その実ページが割り当てられてよい。【０１４３】
Ｓ１８０５の判断結果が真の場合（Ｓ１８０５：Ｙｅｓ）、Ｓ１８０６で、フロントエンドライトプログラム４１２は、重複排除ダーティーキューに、データＷのコマンドを積む。そのコマンドは、重複管理処理のコマンドである。【０１４４】
Ｓ１８０４又はＳ１８０５の判断結果が偽の場合（Ｓ１８０４：Ｎｏ又はＳ１８０５：Ｎｏ）、Ｓ１８０７で、フロントエンドライトプログラム４１２は、デステージダーティーキューに、データＷのコマンドを積む。そのコマンドは、デステージ（キャッシュメモリ４０２からＦＭＤ３２０へデータをライトすること）のコマンドである。【０１４５】
Ｓ１８０８で、フロントエンドライトプログラム４１２は、Ｇｏｏｄ応答（ライト完了報告）を、ライト要求の送信元（サーバシステム２０１）に返す。【０１４６】
図１９は、重複管理処理の流れを示す。【０１４７】
Ｓ１９０１で、アドレス変換プログラム４１４は、重複排除ダーティーキューを参照する。【０１４８】
Ｓ１９０２で、アドレス変換プログラム４１４は、ダーティデータがあるか否かを判断する。【０１４９】
Ｓ１９０２の判断結果が真の場合（Ｓ１９０２：Ｙｅｓ）、Ｓ１９０３で、アドレス変換プログラム４１４は、重複排除ダーティーキューからダーティデータを選択する。【０１５０】
Ｓ１９０４で、アドレス変換プログラム４１４は、Ｓ１９０３で選択されたダーティデータ（図１９〜図２２及び図３７の説明において「選択ダーティデータ」）のサイズが重複排除単位サイズ未満か否かを判断する。「重複排除単位サイズ」とは、重複排除のために比較されるデータの単位サイズである。【０１５１】
Ｓ１９０４の判断結果が真の場合（Ｓ１９０４：Ｙｅｓ）、Ｓ１９０５で、アドレス変換プログラム４１４は、フルダーティ化処理（図２０）を実行する。これにより、論理ボリューム５０１においてフルダーティデータが生成される。「フルダーティデータ」とは、選択ダーティデータと、ゼロデータ及び不足データ（後述）のうちの少なくとも１つとで構成されたデータであって、重複排除単位サイズと同サイズのデータである。【０１５２】
Ｓ１９０６で、アドレス変換プログラム４１４は、重複排除プログラム４１５を呼び出す。重複排除プログラム４１５により、重複排除処理（図２１）が実行される。【０１５３】
Ｓ１９０７で、アドレス変換プログラム４１４は、Ｓ１９０６の重複排除処理においてデータライト要の設定がされたか否かを判断する。【０１５４】
Ｓ１９０７の判断結果が真の場合（Ｓ１９０７：Ｙｅｓ）、Ｓ１９０８で、アドレス変換プログラム４１４は、キャッシュ転送処理（図２２）を実行する。【０１５５】
Ｓ１９０９で、アドレス変換プログラム４１４は、選択ダーティデータを第１キャッシュ領域（論理ボリューム５０１に対応したキャッシュ領域）から破棄する。【０１５６】
図２０は、フルダーティ化処理の流れを示す。【０１５７】
Ｓ２００１で、アドレス変換プログラム４１４は、プール管理テーブル４２３を基に、割り当てられている実ページを含んだプール５０３について容量仮想化有無“有り”か否かを判断する。【０１５８】
Ｓ２００１の判断結果が真の場合（Ｓ２００１：Ｙｅｓ）、Ｓ２００２で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８を基に、選択ダーティデータに対応した実ページについて重複排除有無１５０６“有り”か否かを判断する。【０１５９】
Ｓ２００２の判断結果が真の場合（Ｓ２００２：Ｙｅｓ）、Ｓ２００３で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を基に、選択ダーティデータの論理アドレス（ＶＯＬアドレス１２０２）に対応した重複管理アドレスを特定する。【０１６０】
Ｓ２００２の判断結果が偽の場合（Ｓ２００２：Ｎｏ）、Ｓ２００４で、アドレス変換プログラム４１４は、静的マッピングテーブル４２６を基に、選択ダーティデータの論理アドレス（ＶＯＬアドレス１２０２）に対応した重複管理アドレスを算出する。【０１６１】
Ｓ２００５で、アドレス変換プログラム４１４は、第２キャッシュ領域（重複管理ボリューム５０２に対応したキャッシュ領域）についてキャッシュミスしたか否かを判断する。キャッシュミスは、特定又は算出された重複管理アドレス１２０４（図２０の説明において「対象重複管理アドレス」）について第２キャッシュ領域にキャッシュセグメントが確保されていないことを意味する。【０１６２】
Ｓ２００５の判断結果が真の場合（Ｓ２００２：Ｙｅｓ）、Ｓ２００６で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８を基に、対象重複管理アドレスに実ページが割当て済か否かを判断する。【０１６３】
Ｓ２００６の判断結果が真の場合（Ｓ２００６：Ｙｅｓ）、Ｓ２００７で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８及びＲＧ管理テーブル４２４を基に、割り当てられている実ページの基になっているＦＭＤ３２０（及びＦＭＤ３２０提供の仮想アドレス）を特定する。【０１６４】
Ｓ２００８で、アドレス変換プログラム４１４は、第２キャッシュ領域からキャッシュセグメントを確保し、特定されたＦＭＤ３２０から、割り当てられている実ページにおけるデータ（少なくとも、選択ダーティデータにより更新されるデータを含み重複排除単位サイズ以上のサイズのデータ）を、第２キャッシュ領域（確保したキャッシュセグメント）に読み出す（ステージングする）。キャッシュセグメントのサイズは、重複排除単位サイズと同じかそれより大きくてよい。【０１６５】
Ｓ２００９で、アドレス変換プログラム４１４は、第２キャッシュ領域（確保したキャッシュセグメント）から第１キャッシュ領域における不足領域に不足データを転送する。「不足領域」とは、フルダーティデータサイズ（重複排除単位サイズ）と同サイズの領域のうち選択ダーティデータに占められていない領域である。「不足データ」とは、フルダーティデータサイズ分のデータ（ステージングされたデータのうちの少なくとも一部）と選択ダーティデータとの差分である。【０１６６】
Ｓ２００６の判断結果が偽の場合（Ｓ２００６：Ｎｏ）、Ｓ２０１０で、アドレス変換プログラム４１４は、第１キャッシュ領域における不足領域にゼロデータをライトする。「不足領域」とは、フルダーティデータのサイズと同サイズの領域のうち選択ダーティデータに占められていない領域である。【０１６７】
以上のＳ２００９及びＳ２０１０によれば、第１キャッシュ領域（論理ボリューム５０１に対応したキャッシュ領域）に、選択ダーティデータを含んだフルダーティデータができる。【０１６８】
図２１は、重複排除処理の流れを示す。【０１６９】
Ｓ２１０１で、重複排除プログラム４１５は、重複排除管理テーブル４２９を基に、フルダーティデータに重複しているデータがあるか否かを判断する。ここでの「フルダーティデータ」は、その全部又は一部が選択ダーティデータである。【０１７０】
Ｓ２１０１の判断結果が真の場合（Ｓ２１０１：Ｙｅｓ）、Ｓ２１０２で、重複排除プログラム４１５は、動的マッピングテーブル４２５を更新する。これは、例えば、図１について言えば、ケースＢに対応し、後述する図面について言えば、図３１に対応する。つまり、フルダーティデータに対応したＶＯＬアドレス（論理アドレス）が、フルダーティデータと重複するデータに対応した重複管理アドレスに動的マッピングされる。そのＶＯＬアドレス（論理アドレス）は、重複先ＶＯＬアドレス（論理アドレス）であり、重複先ＶＯＬアドレス（論理アドレス）が動的マッピングされた重複管理アドレスは、重複元重複管理アドレスである。また、フルダーティデータが、重複先データであり、フルダーティデータと重複するデータが重複元データである。【０１７１】
Ｓ２１０３で、重複排除プログラム４１５は、プール管理テーブル４２３を基に、割り当てられている実ページを含んだプール５０３について容量仮想化機能有無１００７“有り”か否かを判断する。【０１７２】
Ｓ２１０３の判断結果が真の場合（Ｓ２１０３：Ｙｅｓ）、Ｓ２１０４で、重複排除プログラム４１５は、重複元に関する情報を更新する。例えば、重複元データが格納されている実ページに対応した重複排除有無１５０６は“有り”とされる。重複元重複管理アドレスに対応した重複排除状態１２０５は“重複有り（重複元）”とされる。【０１７３】
Ｓ２１０５で、重複排除プログラム４１５は、重複先に関する情報を更新する。例えば、重複先データが格納されている実ページに対応した重複排除有無１５０６は“有り”とされる。重複先重複管理アドレスに対応した重複排除状態１２０５は“重複有り（重複先）”とされる。【０１７４】
Ｓ２１０６で、重複排除プログラム４１５は、重複排除管理テーブル４２９を更新する。すなわち、フルダーティデータのキー（ハッシュ値）に、フルダーティデータのライト先のＶＯＬ＃及びＶＯＬアドレスが関連付けられる。【０１７５】
Ｓ２１０７で、重複排除プログラム４１５は、静的マッピング空間６０１、具体的には、フルダーティデータのライト先論理アドレスに静的マッピングされているアドレスに、ゼロデータをライトする。ゼロデータは、実際には、その静的マッピングされているアドレスに対応したキャッシュセグメントにライトされる。【０１７６】
Ｓ２１０８で、重複排除プログラム４１５は、Ｓ２１０７でライトしたゼロデータをダーティデータとして設定する（ゼロデータが書かれたキャッシュセグメントをダーティのセグメントとして管理する）。具体的には、例えば、そのゼロデータについてのコマンドがデステージダーティキューに積まれる。【０１７７】
Ｓ２１０３の判断結果が偽の場合（Ｓ２１０３：Ｎｏ）（つまり、上記の一比較例のケースがあれば）、Ｓ２１０９で、重複排除プログラム４１５は、重複元に関する情報を更新する。例えば、Ｓ２１０４と同様に、重複排除有無１５０６及び重複排除状態１２０５が更新される。【０１７８】
Ｓ２１１０で、重複排除プログラム４１５は、重複先に関する情報を更新する。例えば、Ｓ２１０５と同様に、重複排除有無１５０６及び重複排除状態１２０５が更新される。【０１７９】
Ｓ２１１１で、重複排除プログラム４１５は、重複排除管理テーブル４２９を更新する。【０１８０】
Ｓ２１０１の判断結果が偽の場合（Ｓ２１０１：Ｎｏ）、Ｓ２１２１で、重複排除プログラム４１５は、フルダーティデータについて、データライト要を設定する。【０１８１】
図２２は、キャッシュ転送処理の流れを示す。【０１８２】
Ｓ２２０１で、アドレス変換プログラム４１４は、プール管理テーブル４２３を基に、割り当てられている実ページを含んだプール５０３について容量仮想化有無“有り”か否かを判断する。【０１８３】
Ｓ２２０１の判断結果が真の場合（Ｓ２２０１：Ｙｅｓ）、Ｓ２２０２で、アドレス変換プログラム４１４は、上書きキャッシュライト処理を実行する。【０１８４】
Ｓ２２０１の判断結果が偽の場合（Ｓ２２０１：Ｎｏ）、Ｓ２２０３で、アドレス変換プログラム４１４は、追記書きキャッシュライト処理を実行する。この処理では、第２キャッシュ領域に、フルダーティデータが追記されることになる。この処理が行われるということは、重複管理ボリューム５０２は、一比較例に係る重複管理ボリューム５０２（図７）である。【０１８５】
図３７は、上書きキャッシュライト処理の流れを示す。【０１８６】
上書きキャッシュライト処理は、キャッシュ転送処理の一部である。キャッシュ転送処理は、データライト要が設定されている場合（図２１のＳ２１２１）に実行される。データライト要は、フルダーティデータ（選択ダーティデータ）と重複するデータが見つからなかった場合（図２１のＳ２１０１：Ｎｏ）に実行される。このため、上書きキャッシュライト処理は、図１で言えば、ケースＡ、ケースＣ及びケースＤに対応する。また、後述の図面で言えば、図３２又は図３３に対応する。【０１８７】
Ｓ３７００で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８を基に、割り当てられている実ページに対応した重複排除有無１５０６が“有り”か否かを判断する。【０１８８】
Ｓ３７００の判断結果が真の場合（Ｓ３７００：Ｙｅｓ）、Ｓ３７０１で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を基に、旧データ（フルダーティデータにより更新される更新前データ）に対応したアドレスの重複排除状態１２０５は“重複有り”（具体的には“重複有り（重複元）”及び“重複有り（重複先）”のいずれかである）か否かを判断する。【０１８９】
Ｓ３７００又はＳ３７０１の判断結果が偽の場合（Ｓ３７００：Ｎｏ又はＳ３７０１：Ｎｏ）、Ｓ３７０２で、アドレス変換プログラム４１４は、フルダーティデータのライト先重複管理アドレスを算出し、そのアドレスに従うキャッシュアドレスを算出する。【０１９０】
Ｓ３７０１の判断結果が真の場合（Ｓ３７０１：Ｙｅｓ）、Ｓ３７０３で、アドレス変換プログラム４１４は、旧データに対応したアドレスの重複排除状態１２０５は“重複有り（重複先）”か否かを判断する。【０１９１】
Ｓ３７０３の判断結果が真の場合（Ｓ３７０３：Ｙｅｓ）、Ｓ３７０４で、アドレス変換プログラム４１４は、静的マッピングテーブル４２６を基に、重複先論理アドレスに静的マッピングされている重複先重複管理アドレスを特定し、その特定したアドレスに従うキャッシュアドレス（キャッシュセグメントのアドレス）を算出する。【０１９２】
Ｓ３７０３の判断結果が偽の場合（Ｓ３７０３：Ｎｏ）、Ｓ３７０５で、アドレス変換プログラム４１４は、空き管理テーブル４２７を基に、空き領域を特定し、その空き領域のアドレスに従うキャッシュアドレス（キャッシュセグメントのアドレス）を算出する。【０１９３】
Ｓ３７０６で、アドレス変換プログラム４１４は、Ｓ３７０２、Ｓ３７０４又はＳ３７０５で算出されたアドレスに従うキャッシュセグメントを第２キャッシュ領域から確保する（Ｓ３７０６）。【０１９４】
Ｓ３７０７で、アドレス変換プログラム４１４は、Ｓ３７０６で確保されたキャッシュセグメントにフルダーティデータをライトする。【０１９５】
Ｓ３７０８で、アドレス変換プログラム４１４は、マッピング先変更があるか否かを判断する。例えば、図１で言うケースＣのようなケースであれば、動的マッピングが静的マッピングに一致するため、Ｓ３７０８の判断結果は真となる。【０１９６】
Ｓ３７０８の判断結果が真の場合（Ｓ３７０８：Ｙｅｓ）、Ｓ３７０９で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を更新する。例えば、動的マッピング先が静的マッピング先と同じとされる。【０１９７】
Ｓ３７１０で、アドレス変換プログラム４１４は、重複排除管理テーブル４２９を更新する。【０１９８】
図２３は、バックエンドライト処理の流れを示す。【０１９９】
バックエンドライト処理は、キャッシュメモリ４０２からＦＭＤ３２０へのデステージの処理である。バックエンドライト処理は、ライト要求に従う処理（フロントエンドライト処理）とは非同期に行われるが（例えば定期的に行われるが）、ライト要求に従う処理の一部として行われてもよい。後者の場合、フルダーティデータのデステージが完了された場合に、ライト要求に対するＧｏｏｄ応答が返される。【０２００】
Ｓ２３０１で、バックエンドライトプログラム４１３は、デステージダーティキューを参照する。【０２０１】
Ｓ２３０２で、バックエンドライトプログラム４１３は、デステージされるべきダーティデータがあるか否かを判断する。【０２０２】
Ｓ２３０２の判断結果が真の場合（Ｓ２３０２：Ｙｅｓ）、Ｓ２３０３で、バックエンドライトプログラム４１３は、ダーティデータを選択する。【０２０３】
Ｓ２３０４で、バックエンドライトプログラム４１３は、Ｓ２３０４で選択したダーティデータをＦＭＤ３２０にデステージ（ライト）する。必要に応じて、そのダーティデータを用いてパリティが生成又は更新される。また、ダーティデータがゼロデータの場合、ゼロデータのデステージに代えて、上述したアンマップコマンドの送信が行われてもよい。その場合、必要に応じて、ゼロデータを用いてパリティが生成又は更新されてよい。【０２０４】
本実施例における幾つかの処理を模式的に説明する。【０２０５】
図３１は、更新後データが論理ボリューム５０１における既存データと重複するケースの一例の模式図である。図３１が示すケースは、図２１のＳ２１０１：Ｙｅｓのケースの一例である。【０２０６】
論理ボリューム５０１においてデータＢ、Ｃ、Ａ及びＡがある。データＢ、Ｃ、Ａ及びＡは、第１〜第４論理アドレスにそれぞれ対応する。第１〜第４論理アドレスに第１〜第４重複管理アドレスが静的マッピングされている。第１〜第４重複管理アドレスは、静的マッピング空間６０１に属するアドレスであり、追記空間６０２に属するアドレスではない。第３論理アドレス（重複先）が第４重複管理アドレス（重複元）に動的マッピングされており、第３重複管理アドレス（重複先）にゼロデータがライトされている。【０２０７】
この状況において、第２論理アドレスに更新後データＡがライトされるとする。この場合、更新後データＡに重複する重複元データＡが特定される。第２論理アドレス（重複先）が第４重複管理アドレス（重複元）に動的マッピングされる（符号（１））。第２論理アドレスが静的マッピングされている第２重複管理アドレス（重複先）にゼロデータがライトされる（符号（２））。【０２０８】
図３２は、非重複の更新後データのライト先が重複先論理アドレスであるケースの一例の模式図である。図３２が示すケースは、図３７のＳ３７０３：Ｙｅｓのケースの一例である。【０２０９】
図３１に示した更新の後に、第２論理アドレス（重複先）に非重複データＣがライトされるとする。この場合、第２論理アドレス（重複先）の動的マッピング先が、第４重複管理アドレス（重複元）から、第２論理アドレス（重複先）の静的マッピング先（第２重複管理アドレス）に切り替わる（符号（１））。第２論理アドレスが静的マッピングされている第２重複管理アドレスに更新後データＣがライトされる（符号（２））。【０２１０】
図３３は、非重複の更新後データのライト先が重複元論理アドレスであるケースの一例の模式図である。図３３が示すケースは、図３７のＳ３７０３：Ｎｏのケースの一例である。【０２１１】
図３１に示した更新の後に、第４論理アドレス（重複元）に非重複データＣがライトされるとする。この場合、第４論理アドレス（重複元）に追記空間６０２における空きアドレスが関連付けられる（符号（１））。つまり、第４論理アドレス（重複元）に対して空きアドレスが動的マッピングされる。空きアドレスが指す空き領域にデータＣがライトされる（符号（２））。第２及び第３論理アドレスは、重複元データＡがある第４重複管理アドレスに動的マッピングされたままである。【０２１２】
図３４は、更新後データが論理ボリューム５０１における既存データのいずれとも重複しないケースの一例の模式図である。図３４が示すケースは、図３７のＳ３７００：ＮｏやＳ３７０１：Ｎｏのケースの一例である。【０２１３】
図３３に示した更新の後に、第４論理アドレスに非重複データＤがライトされるとする。この場合、第４論理アドレスの動的マッピング先領域（追記空間６０２における領域）に、データＤがライトされる。【０２１４】
図３３及び図３４に例示したように、重複元論理アドレスに対応した重複元データが更新される場合には、重複元論理アドレスを追記空間６０２内の空き領域に動的マッピングすることで、Ｉ／Ｏ性能の低下を軽減したデータ更新（言い換えれば、重複先論理アドレスに対応した重複先データが更新される場合と同程度のＩ／Ｏ性能のデータ更新）が可能である。【０２１５】
追記空間６０２内の領域に対する動的マッピングは重複離脱処理により解消される。【０２１６】
図３５は、重複離脱処理の一例の模式図である。【０２１７】
図３３に示した更新の後の重複離脱処理が行われるとする。その重複離脱処理では、例えば次の処理が行われる。【０２１８】
アドレス変換プログラム４１４は、重複元データＡをいずれかの重複先重複管理アドレスにコピーする（符号（１））。コピー元の一例が、第４重複管理アドレスであり、コピー先の一例が、第２重複管理アドレスである。第２重複管理アドレスにおけるゼロデータが、第４重複管理アドレスにおけるデータＡで上書きされ、第２重複管理アドレスは、重複先から重複元となる。【０２１９】
アドレス変換プログラム４１４は、静的マッピング空間６０１に対する動的マッピングを更新する（符号（２））。すなわち、アドレス変換プログラム４１４は、第２論理アドレスの動的マッピング先を、第４重複管理アドレスから、第２論理アドレスの静的マッピング先（第２重複管理アドレス）に変更する。また、アドレス変換プログラム４１４は、第３論理アドレスの動的マッピング先を第４重複管理アドレスから第２重複管理アドレスに変更する。【０２２０】
アドレス変換プログラム４１４は、追記空間６０２内の領域におけるデータＣを、その領域に動的マッピングされている第４論理アドレスの静的マッピング先である第４重複管理アドレスにコピーする（符号（３））。アドレス変換プログラム４１４は、第４論理アドレスの動的マッピング先を、追記空間６０２内の領域から、第４論理アドレスの静的マッピング先（第４重複管理アドレス）に変更する（符号（４））。アドレス変換プログラム４１４は、追記空間６０２内の領域（動的マッピングされていた領域）を解放する（符号（５））。例えば、その領域にゼロデータが書き込まれる。【０２２１】
このような重複離脱処理が行われることにより、重複元論理アドレスに対応した重複元データが更新されることによって追記空間６０２内領域に対して動的マッピングが生成されても通常の状態（追記空間６０２内領域に対して動的マッピングが無い状態）に適切に戻すことができる。このため、追記空間６０２のガベージコレクションが不要となる。
【実施例２】
【０２２２】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。【０２２３】
ダーティデータのサイズが重複排除単位サイズに満たない場合、実施例１では論理アドレス（論理ボリューム）に対してフルダーティ化処理が実行されるが、実施例２では重複管理アドレス（重複管理ボリューム）に対してフルダーティ化処理が実行される。つまり、実施例２は、フルダーティデータが生成されるレイヤが実施例１と異なる。【０２２４】
図２４は、実施例２に係る重複管理処理の流れを示す。【０２２５】
Ｓ２４０１で、アドレス変換プログラム４１４は、重複排除ダーティーキューを参照する。重複排除ダーティーキューは、論理ボリューム５０１上のダーティデータについてのコマンドのキューである。【０２２６】
Ｓ２４０２で、アドレス変換プログラム４１４は、ダーティデータがあるか否かを判断する。【０２２７】
Ｓ２４０２の判断結果が真の場合（Ｓ２４０２：Ｙｅｓ）、Ｓ２４０３で、アドレス変換プログラム４１４は、重複排除ダーティーキューからダーティデータを選択する。ここで選択されたダーティデータを、図２４〜図２７の説明で、「選択ダーティデータ」と言う。【０２２８】
Ｓ２４０４で、アドレス変換プログラム４１４は、キャッシュ転送処理を実行する。【０２２９】
Ｓ２４０５で、アドレス変換プログラム４１４は、重複排除プログラム４１５を呼び出す。重複排除プログラム４１５により、重複排除処理（図２７）が実行される。【０２３０】
Ｓ２４０６で、アドレス変換プログラム４１４は、選択ダーティデータを第１キャッシュ領域（論理ボリューム５０１に対応したキャッシュ領域）から破棄する。【０２３１】
図２５は、実施例２に係るキャッシュ転送処理の流れを示す。【０２３２】
Ｓ２５０１で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を基に、選択ダーティデータについての論理アドレス（ＶＯＬアドレス）に対応した重複排除状態１２０５が“重複無し”か否かを判断する。【０２３３】
Ｓ２５０１の判断結果が真の場合（Ｓ２５０１：Ｙｅｓ）、Ｓ２５０２で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を基に、選択ダーティデータについての論理アドレスに動的マッピングされている重複管理アドレスを特定し、その特定したアドレスに従うキャッシュアドレス（キャッシュセグメントのアドレス）を算出する。特定された重複管理アドレスは、追記空間６０２に属する領域を指すアドレスである。【０２３４】
Ｓ２５０３で、アドレス変換プログラム４１４は、第１キャッシュ領域（論理ボリューム５０１に対応したキャッシュ領域）から、Ｓ２５０２で算出されたアドレスが指す領域（第２キャッシュ領域内の領域）に、選択ダーティデータをコピーする。【０２３５】
Ｓ２５０１の判断結果が偽の場合（Ｓ２５０１：Ｎｏ）、Ｓ２５０４で、アドレス変換プログラム４１４は、選択ダーティデータに対応した論理アドレスの重複排除状態１２０５は“重複有り（重複先）”か否かを判断する。【０２３６】
Ｓ２５０４の判断結果が真の場合（Ｓ２５０４：Ｙｅｓ）、Ｓ２５０５で、アドレス変換プログラム４１４は、静的マッピングテーブル４２６を基に、重複先論理アドレスに静的マッピングされている重複先重複管理アドレスを特定し、その特定したアドレスに従うキャッシュアドレス（キャッシュセグメントのアドレス）を算出する。【０２３７】
Ｓ２５０４の判断結果が偽の場合（Ｓ２５０４：Ｎｏ）、Ｓ２５０６で、アドレス変換プログラム４１４は、空き管理テーブル４２７を基に、空き領域を特定し、その空き領域のアドレスに従うキャッシュアドレス（キャッシュセグメントのアドレス）を算出する。【０２３８】
Ｓ２５０７で、アドレス変換プログラム４１４は、選択ダーティデータのサイズが重複排除単位サイズ未満か否かを判断する。【０２３９】
Ｓ２５０７の判断結果が真の場合（Ｓ２５０７：Ｙｅｓ）、Ｓ２５０７で、アドレス変換プログラム４１４は、フルダーティ化処理（図２６）を実行する。【０２４０】
Ｓ２５０９で、アドレス変換プログラム４１４は、第１キャッシュ領域（論理ボリューム５０１に対応したキャッシュ領域）から、Ｓ２５０８でのステージング先領域（第２キャッシュ領域内の領域）に、選択ダーティデータをコピーする。【０２４１】
Ｓ２５１０で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を更新する。【０２４２】
以上のＳ２５０８及びＳ２５０９によれば、第２キャッシュ領域（重複管理ボリューム５０２に対応したキャッシュ領域）に、選択ダーティデータを含んだフルダーティデータができる。【０２４３】
図２６は、実施例２に係るフルダーティ化処理の流れを示す。【０２４４】
Ｓ２６０１で、アドレス変換プログラム４１４は、プール管理テーブル４２３を基に、割り当てられている実ページを含んだプール５０３について容量仮想化有無“有り”か否かを判断する。【０２４５】
Ｓ２６０１の判断結果が真の場合（Ｓ２６０１：Ｙｅｓ）、Ｓ２６０２で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８を基に、選択ダーティデータに対応した実ページについて重複排除有無１５０６“有り”か否かを判断する。【０２４６】
Ｓ２６０２の判断結果が真の場合（Ｓ２６０２：Ｙｅｓ）、Ｓ２６０３で、アドレス変換プログラム４１４は、動的マッピングテーブル４２５を基に、選択ダーティデータの論理アドレス（ＶＯＬアドレス１２０２）に対応した重複管理アドレスを特定する。【０２４７】
Ｓ２６０２の判断結果が偽の場合（Ｓ２６０２：Ｎｏ）、Ｓ２６０４で、アドレス変換プログラム４１４は、静的マッピングテーブル４２６を基に、選択ダーティデータの論理アドレス（ＶＯＬアドレス１２０２）に対応した重複管理アドレスを算出する。【０２４８】
Ｓ２６０５で、アドレス変換プログラム４１４は、第２キャッシュ領域（重複管理ボリューム５０２に対応したキャッシュ領域）についてキャッシュミスしたか否かを判断する。【０２４９】
Ｓ２６０５の判断結果が真の場合（Ｓ２６０２：Ｙｅｓ）、Ｓ２６０６で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８を基に、実ページが対象重複管理アドレスに割当て済か否かを判断する。【０２５０】
Ｓ２６０６の判断結果が真の場合（Ｓ２６０６：Ｙｅｓ）、Ｓ２６０７で、アドレス変換プログラム４１４は、ページ単位管理テーブル４２８及びＲＧ管理テーブル４２４を基に、割り当てられている実ページの基になっているＦＭＤ３２０（及びＦＭＤ３２０提供の仮想アドレス）を特定する。【０２５１】
Ｓ２６０８で、アドレス変換プログラム４１４は、第２キャッシュ領域からキャッシュセグメントを確保し、特定されたＦＭＤ３２０から、割り当てられている実ページにおけるデータ（少なくとも、選択ダーティデータにより更新されるデータを含み重複排除単位サイズ以上のサイズのデータ）を、第２キャッシュ領域（確保したキャッシュセグメント）に読み出す（ステージングする）。【０２５２】
Ｓ２６０９で、アドレス変換プログラム４１４は、第２キャッシュ領域（確保したキャッシュセグメント）における不足領域に不足データを転送する。【０２５３】
Ｓ２６０６の判断結果が偽の場合（Ｓ２６０６：Ｎｏ）、Ｓ２６１０で、アドレス変換プログラム４１４は、第２キャッシュ領域における不足領域にゼロデータをライトする。【０２５４】
図２７は、実施例２に係る重複排除処理の流れを示す。【０２５５】
Ｓ２７０１で、重複排除プログラム４１５は、第２キャッシュ領域におけるフルダーティーデータを選択する。【０２５６】
Ｓ２７０２で、重複排除プログラム４１５は、重複排除管理テーブル４２９を参照し、選択したフルダーティデータに重複するデータが有るか否かを判断する。【０２５７】
Ｓ２７０２の判断結果が真の場合（Ｓ２７０２：Ｙｅｓ）、Ｓ２７０３で、重複排除プログラム４１５は、動的マッピングテーブル４２５を更新する。具体的には、重複排除プログラム４１５は、Ｓ２７０１で選択されたフルダーティデータがある領域を指す重複管理アドレスに静的マッピングされている論理アドレスを、重複元重複管理アドレスに動的マッピングする。【０２５８】
Ｓ２７０４で、重複排除プログラム４１５は、Ｓ２７０１で選択されたフルダーティデータがある領域（第２キャッシュ領域における領域）にゼロデータをライトする。
【実施例３】
【０２５９】
実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略又は簡略する。【０２６０】
実施例３では、追記空間６０２（バッファ空間）に重複元データが格納される。重複排除処理は、ライト要求に従う処理とは非同期に行われる。【０２６１】
図２８は、実施例３に係る重複排除処理の流れの一部を示す。【０２６２】
Ｓ２１０３：Ｙｅｓの場合、重複排除プログラム４１５は、重複元データを追記空間６０２にコピーする。その後、Ｓ２１０４が実行される。【０２６３】
図３６は、実施例３に係る重複排除の一例の模式図である。【０２６４】
第３論理アドレスに更新後データＢがライトされるとする。更新後データＢは、第２論理アドレスに対応した既存データＢと重複する。【０２６５】
この場合、重複排除プログラム４１５は、重複元となるデータＢを静的マッピング空間６０１から追記空間６０２にコピーする（又は、更新後データＢを追記空間６０２にライトする）。重複排除プログラム４１５は、コピー先領域（追記空間６０２内の領域）に、第２及び第３論理アドレスをそれぞれ動的マッピングする。重複排除プログラム４１５は、第２及び第３論理アドレスにそれぞれ対応した静的マッピング先である第２及び第３重複管理アドレスの各々にゼロデータをライトする。【０２６６】
実施例３によれば、論理アドレスの動的マッピング先が追記空間６０２に維持される。このため、動的マッピング先を静的マッピング空間６０１における領域間で変更する必要が無い。つまり、動的マッピング先の変更頻度を軽減すること、及び、図３３及び図３５に示したデータコピーを削減することが期待できる。
【実施例４】
【０２６７】
実施例４を説明する。その際、実施例１〜３との相違点を主に説明し、実施例１〜３との共通点については説明を省略又は簡略する。【０２６８】
実施例４では、バックエンドライト処理において、パリティ生成をスキップすることが可能である。【０２６９】
図２９は、実施例４に係る重複排除処理の流れの一部を示す。【０２７０】
Ｓ２１０８又はＳ２１１１の後、Ｓ２９０１で、重複排除プログラム４１５は、重複元が属するＲＧ５０４に重複先が属するか否かを判断する。【０２７１】
Ｓ２９０１の判断結果が真の場合（Ｓ２９０１：Ｙｅｓ）、Ｓ２９０２で、重複排除プログラム４１５は、重複先（ゼロデータ）についてパリティ生成不要を設定する。ゼロデータがライトされるということは、重複元データが存在するということなので、重複元データとゼロデータが同一ＲＧ５０４にライトされるのであれば、パリティ生成は不要でよい。【０２７２】
パリティ生成不要が設定されている場合、バックエンドライト処理のＳ２３０４ではパリティは生成されない。【０２７３】
一方、重複元データがゼロデータのライト先ＲＧ５０４と異なるＲＧにある場合（言い換えれば、重複元データのある物理アドレスとゼロデータがライトされる物理アドレスとが異なるＲＧに属する場合）、パリティは生成される。【０２７４】
図３０は、コレクションリード処理の流れを示す。【０２７５】
Ｓ３００１で、リードプログラム４１１は、コレクション対象データ（復旧対象データ）に対応した重複元データがあるか否かを判断する。【０２７６】
Ｓ３００１の判断結果が真の場合（Ｓ３００１：Ｙｅｓ）、Ｓ３００２で、リードプログラム４１１は、コレクション対象データに対応した重複元データをステージングする（重複元データをＦＭＤ３２０からキャッシュメモリ４０２に読み出す）。【０２７７】
Ｓ３００３で、リードプログラム４１１は、コレクション処理を実行する。具体的には、例えば、Ｓ３００２が実行された場合、リードプログラム４１１は、ステージングされた重複元データを、コレクション対象とする。また、Ｓ３００２が実行されなかった場合、リードプログラム４１１は、コレクション対象データをステージングし、そのデータをコレクション対象とする。【０２７８】
Ｓ３００４で、リードプログラム４１１は、コレクション対象とされたデータを復旧先ＦＭＤ３２０にデステージする。【０２７９】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。【０２８０】
例えば、計算機システムとして、プロセッサ部及び記憶部を有するサーバシステムが採用されてもよい。この場合、ＦＭＤは、サーバシステムの外部又は内部に用意されてもよい。サーバシステムは、ＦＭＤが接続されたインターフェース部、記憶部、及び、そのインターフェース部及び記憶部に接続されたプロセッサ部を有する。サーバシステムでは、ライト要求の送信元としての上位システムは、サーバシステムで実行されるアプリケーションや仮想サーバであってよい。
【符号の説明】
【０２８１】
２００…ストレージシステム
【図１】
0006513888.tif 000002
【図２】
0006513888.tif 000003
【図３】
0006513888.tif 000004
【図４】
0006513888.tif 000005
【図５】
0006513888.tif 000006
【図６】
0006513888.tif 000007
【図７】
0006513888.tif 000008
【図８】
0006513888.tif 000009
【図９】
0006513888.tif 000010
【図１０】
0006513888.tif 000011
【図１１】
0006513888.tif 000012
【図１２】
0006513888.tif 000013
【図１３】
0006513888.tif 000014
【図１４】
0006513888.tif 000015
【図１５】
0006513888.tif 000016
【図１６】
0006513888.tif 000017
【図１７】
0006513888.tif 000018
【図１８】
0006513888.tif 000019
【図１９】
0006513888.tif 000020
【図２０】
0006513888.tif 000021
【図２１】
0006513888.tif 000022
【図２２】
0006513888.tif 000023
【図２３】
0006513888.tif 000024
【図２４】
0006513888.tif 000025
【図２５】
0006513888.tif 000026
【図２６】
0006513888.tif 000027
【図２７】
0006513888.tif 000028
【図２８】
0006513888.tif 000029
【図２９】
0006513888.tif 000030
【図３０】
0006513888.tif 000031
【図３１】
0006513888.tif 000032
【図３２】
0006513888.tif 000033
【図３３】
0006513888.tif 000034
【図３４】
0006513888.tif 000035
【図３５】
0006513888.tif 000036
【図３６】
0006513888.tif 000037
【図３７】
0006513888.tif 000038