(57)【要約】【課題】  複数のストレージモジュールを結合して構成される大規模ストレージシステムにおいて、重複排除されたデータのリード性能を向上させることができる。【解決手段】  大規模ストレージシステムは、計算機にそれぞれ接続される第１のストレージモジュールと第２のストレージモジュールと、第１のストレージモジュールと第２のストレージモジュールをネットワークで接続したもので、第１のストレージモジュールは、計算機からライト要求を受領したときに、ライト要求された第１データと同一の第２のデータが第２のストレージモジュールに格納済みかを判定し、格納済みの場合に第１のデータを第１のストレージモジュールに格納するか、第２のストレージモジュールの第２のデータを参照するかを判断する。【選択図】  図３
2020086477.tif 000002
【特許請求の範囲】
【請求項１】
計算機にそれぞれ接続される第１のストレージモジュールと第２のストレージモジュールと、前記第１のストレージモジュールと前記第２のストレージモジュールをネットワークで接続してなる大規模ストレージシステムであって、
前記第１のストレージモジュールは、第１の記憶媒体と前記第１の記憶媒体から第１のボリュームを構成し、前記計算機から前記第１のボリュームを介して前記第１の記憶媒体に対するデータの書き込みと、前記第１の記憶媒体に格納されたデータの読み出しとを制御する第１のコントローラとを有し、
前記第２のストレージモジュールは、第２の記憶媒体と前記第２の記憶媒体から第２のボリュームを構成し、前記計算機から前記第２のボリュームを介して前記第２の記憶媒体に対するデータのライト処理と、前記第２の記憶媒体に格納されたデータのリード処理とを制御する第２のコントローラとを有し、
前記第１のストレージモジュールが、前記第１のボリュームに対し前記計算機からライト要求を受領したときに、前記第１のコントローラは、ライト要求された第１のデータと同一の第２のデータが前記第２のストレージモジュールに格納済みかを判定し、格納済みの場合に前記第１のデータを前記第１の記憶媒体に格納するか、前記第２のストレージモジュールの第２のデータを参照するかを判断する、ことを特徴とする大規模ストレージシステム。
【請求項２】
前記第１のコントローラは、前記第１のデータを圧縮して前記第１の記憶媒体に格納する、ことを特徴とする請求項１に記載の大規模ストレージシステム。
【請求項３】
前記第１のコントローラは、前記格納済みの場合に前記第１のデータを前記第１の記憶媒体に格納するか、前記第２のストレージモジュールの第２のデータを参照するかの判断において、第２のデータへの参照として管理されているデータが閾値を超過している場合に前記第１の記憶媒体に格納する、ことを特徴とする請求項１記載の大規模ストレージシステム。
【請求項４】
計算機にそれぞれ接続される第１のストレージモジュールと第２のストレージモジュールと、前記第１のストレージモジュールと第２のストレージモジュールをネットワークで接続してなる大規模ストレージシステムであって、
前記第１のストレージモジュールは、第１の記憶媒体と前記第１の記憶媒体から第１のボリュームを構成し、前記計算機から前記第１のボリュームを介して前記第１の記憶媒体に対するデータの書き込みと、前記第１の記憶媒体に格納されたデータの読み出しとを制御する第１のコントローラとを有し、
前記第２のストレージモジュールは、第２の記憶媒体と前記第２の記憶媒体から第２のボリュームを構成し、前記計算機から前記第２のボリュームを介して前記第２の記憶媒体に対するデータのライト処理と、前記第２の記憶媒体に格納されたデータのリード処理とを制御する第２のコントローラとを有し、
前記第１のコントローラは、前記計算機から前記第１のボリュームに対するリード要求が、前記第２のストレージモジュール内に格納されたデータを参照する場合、前記第１のストレージモジュールの前記第１の記憶媒体に、参照されているデータの複製をするか否かを判定する、ことを特徴とする大規模ストレージシステム。
【請求項５】
前記第１のコントローラは、参照されているデータの複製をするか否かの判定を、周期的に行う、ことを特徴とする請求項４に記載の大規模ストレージシステム。
【請求項６】
前記第１のコントローラは、参照されているデータの複製をするか否かの判定結果、データの複製を行うと判定した場合、複製するデータを圧縮し、前記第１の記憶媒体に記録する、ことを特徴とする請求項４に記載の大規模ストレージシステム。
【請求項７】
前記第１のコントローラは、参照されているデータの複製をするか否かの判定を、リード要求の対象データの処理頻度情報、あるいは、リード対象データへの参照数に基づいて行なう、ことを特徴とする請求項４記載の大規模ストレージシステム。記録し、
【請求項８】
計算機にそれぞれ接続される第１のストレージモジュールと第２のストレージモジュールと、前記第１のストレージモジュールと前記第２のストレージモジュールをネットワークで接続してなる大規模ストレージシステムであって、
前記第１のストレージモジュールは、第１の記憶媒体と前記第１の記憶媒体から第１のボリュームを構成し、前記計算機から前記第１のボリュームを介して前記第１の記憶媒体に対するデータの書き込みと、前記第１の記憶媒体に格納されたデータの読み出しとを制御する第１のコントローラとを有し、
前記第２のストレージモジュールは、第２の記憶媒体と前記第２の記憶媒体から第２のボリュームを構成し、前記計算機から前記第２のボリュームを介して前記第２の記憶媒体に対するデータのライト処理と、前記第２の記憶媒体に格納されたデータのリード処理とを制御する第２のコントローラとを有し、
前記第１のストレージモジュールが、前記第１のボリュームに対し重複排除処理を行う際に、前記第１のコントローラは、前記第１のボリュームに格納された第３のデータと同一の第４のデータが前記第２のストレージモジュールに格納済みかを判定し、格納済みの場合に前記第３のデータを前記第１の記憶媒体に格納するか、前記第２のストレージモジュールの第４のデータを参照するかを判断する、ことを特徴とする大規模ストレージシステム。
【請求項９】
計算機にそれぞれ接続され、
第１の記憶媒体と前記第１の記憶媒体から第１のボリュームを構成し、前記計算機から前記第１のボリュームを介して前記第１の記憶媒体に対するデータの書き込みと、前記第１の記憶媒体に格納されたデータの読み出しとを制御する第１のコントローラとを有する第１のストレージモジュールと、
第２の記憶媒体と前記第２の記憶媒体から第２のボリュームを構成し、前記計算機から前記第２のボリュームを介して前記第２の記憶媒体に対するデータのライト処理と、前記第２の記憶媒体に格納されたデータのリード処理とを制御する第２のコントローラとを有する第２のストレージモジュールと、
前記第１のストレージモジュールと前記第２のストレージモジュールをネットワークで接続してなる大規模ストレージシステムのデータ管理方法であって、
前記第１のストレージモジュールは、
前記第１のストレージモジュールが、前記第１のボリュームに対し重複排除処理を行う際に、前記第１のコントローラは、前記第１のボリュームに格納された第３のデータと同一の第４のデータが前記第２のストレージモジュールに格納済みかを判定し、
格納済みの場合に前記第３のデータを前記第１の記憶媒体に格納するか、前記第２のストレージモジュールの第４のデータを参照するかを判断する、
ことを特徴とする大規模ストレージシステムのデータ管理方法。
【請求項１０】
前記第１のストレージモジュールが、前記第１のボリュームに対し行う重複排除処理は、前記計算機から前記第１のコントローラが前記第１のボリュームに対するライト要求を受領した時に行われる、ことを特徴とする請求項９に記載の大規模ストレージシステムのデータ管理方法。
【請求項１１】
前記第１のストレージモジュールが、前記第１のボリュームに対し行う重複排除処理は、前記計算機から前記第１のコントローラが前記第１のボリュームに対するライト要求を受領した時に行われる、ことを特徴とする請求項９に記載の大規模ストレージシステムのデータ管理方法。
【請求項１２】
前記第１のストレージモジュールが、前記第１のボリュームに対し行う重複排除処理は、周期的に行われる、ことを特徴とする請求項９に記載の大規模ストレージシステムのデータ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の独立したストレージモジュールを結合してなるストレージシステムおけるデータ管理に関する。
【背景技術】
【０００２】
ストレージシステムが、データ圧縮機能や重複排除機能を備え、少ない記憶媒体の消費で、データを管理する方法が広く取られている。
【０００３】
特許文献１には、複数コントローラからなるストレージシステムにおいて、重複排除の参照関係（主従）を入れ替えることで、コントローラ間の負荷の分散させる方法を開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１７／１０９８２２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の方法は、複数のコントローラを含む一つの筐体からなるストレージシステムにおいて、コントローラ間で負荷を分散することにより性能向上を図ることができる。しかし、各コントローラは、ストレージシステム内のすべての記憶媒体にアクセスできることを前提としている。
【０００６】
複数のストレージシステム（ストレージモジュール）を結合して構成される大規模なストレージシステムにおいて、重複排除技術の適用した場合の処理の負荷分散は言及されていない。
【０００７】
複数のストレージモジュールを結合して構成される大規模ストレージシステムでは、重複排除により、あるストレージモジュールのデータにアクセスするため、別のストレージモジュールに格納されたデータを参照する場合がある。このような場合に、当該のデータをリードするには、別のストレージモジュールに格納されているデータを読み出し、読み出したデータをストレージモジュール間でデータ転送する必要がある。そのため、性能が低下する。
【０００８】
そこで、本発明の目的は、複数のストレージモジュールを結合して構成される大規模ストレージシステム（マルチノード結合ストレージ）において、重複排除されたデータのリード性能を向上させることができる大規模ストレージシステム及び大規模ストレージシステムにおけるデータ配置方法を提供することにある。
【課題を解決するための手段】
【０００９】
上記課題を解決するため、本発明における大規模ストレージシステムは、計算機にそれぞれ接続される第１のストレージモジュールと第２のストレージモジュールと、第１のストレージモジュールと第２のストレージモジュールをネットワークで接続してなり、第１のストレージモジュールは、第１の記憶媒体と第１の記憶媒体から第１のボリュームを構成し、計算機から第１のボリュームを介して第１の記憶媒体に対するデータの書き込みと、第１の記憶媒体に格納されたデータの読み出しとを制御する第１のコントローラとを有し、第２のストレージモジュールは、第２の記憶媒体と第２の記憶媒体から第２のボリュームを構成し、計算機から第２のボリュームを介して第２の記憶媒体に対するデータのライト処理と、第２の記憶媒体に格納されたデータのリード処理とを制御する第２のコントローラとを有し、第１のストレージモジュールが、第１のボリュームに対し計算機からライト要求を受領したときに、第１のコントローラは、ライト要求された第１のデータと同一の第２のデータが第２のストレージモジュールに格納済みかを判定し、格納済みの場合に第１のデータを第１の記憶媒体に格納するか、第２のストレージモジュールの第２のデータを参照するかを判断する。
【発明の効果】
【００１０】
本発明により、複数のストレージ装置を結合したストレージシステムにおいて、リード処理性能を向上させる。
【図面の簡単な説明】
【００１１】
【図１】計算機システム１００の概略図。
【図２】ストレージシステム１のボリューム２７と冗長グループ２５の間のデータ管理を説明する図。
【図３】ボリュームと冗長グループの間のデータ管理を説明する図。
【図４】コントローラのハードウェア構成図。
【図５】データ管理方法の説明図。
【図６】ボリューム管理テーブルを示す図。
【図７】参照管理テーブルを示す図。
【図８】逆参照管理テーブルを示す図。
【図９】重複管理テーブルを示す図。
【図１０】フィンガープリントテーブルを示す図。
【図１１】ページ管理テーブルを示す図。
【図１２】構成管理テーブルを説明する図。
【図１３】ライト論理の処理フロー図。
【図１４】重複排除論理の処理フロー図。
【図１５】リード論理の処理フロー図。
【図１６】自系転送論理および他系転送論理の処理フロー図。
【図１７】リード論理（複製処理）の処理フロー図。
【図１８】周期処理論理の処理フロー図。
【図１９】ポストプロセス重複排除論理の処理フロー図。
【発明を実施するための形態】
【００１２】
本明細書において、同一あるいは同様な機能を有する構成要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、これらの複数の構成要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【００１３】
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ、ＧＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えば記憶装置）および／またはインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノードであってもよい。プログラムを実行して行う処理の主体は、制御部であれば良く、特定の処理を行う専用回路（例えばＦＰＧＡやＡＳＩＣ）を含んでいてもよい。
【００１４】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００１５】
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸテーブル」、「ＸＸリスト」等を「ＸＸ情報」と呼ぶことがある。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」、「Ｒｅｇｉｏｎ」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００１６】
＜システム概要＞
図１に、計算機システム１００の概略を示す。計算機システム１００は、複数のストレージモジュール２を結合して構成される大規模ストレージシステム（マルチノード結合ストレージ、以下、単にストレージシステム１と呼ぶ）１と、ストレージシステム１に通信可能に接続された計算機４を含む。
【００１７】
ストレージシステム１は、２以上のストレージモジュール２からなる。ストレージモジュールは、単体で一つのストレージシステムを構成できる。図１は、一例として、ストレージシステム１がふたつのストレージモジュール２ａと２ｂからなる場合を示している。各ストレージモジュール２は、複数のコントローラ２１を備える。ストレージモジュールの数と各ストレージモジュールのコントローラの数は、３台以上であっても良い。
【００１８】
また、各ストレージモジュール２は複数の記憶媒体２２を備える。記憶媒体とは、ハードディスクドライブや、Solid State Disk等のフラッシュメモリやフェーズメモリ、光ドライブ等の不揮発メモリである。コントローラ２１は、バックエンド２４を介して記憶媒体２２にアクセスする。ストレージモジュール２が単体で小規模なストレージシステムを構成するため、バックエンドは一つのストレージモジュールに閉じたネットワークを構成する。
【００１９】
コントローラ２１は、複数の記憶媒体２２を、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆＩｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）等のデータ保護技術を適用した冗長グループ２５として管理する。これにより、一部の記憶媒体が故障しても、コントローラ２１が故障した記憶媒体のデータを復元できるようになっている。また、コントローラ２１は、複数のホストポート２３を備える。計算機４は、ホストポート２３に接続されており、コントローラ２１に対しデータ入出力処理を要求できる。さらに、コントローラ２１は、複数の論理的なボリューム２７を構成する。ボリューム２７は、計算機４によりデータの読み出しおよび書き込みが可能な仮想的な記憶媒体として利用される。
【００２０】
計算機４が、ボリューム２７に対するデータの書き込みをコントローラ２１に要求した場合、コントローラ２１は、そのデータを、冗長グループ２５を構成する記憶媒体２２に記録する。この過程で、コントローラ２１は、データの圧縮や重複排除を実施する。
【００２１】
また、計算機４が、ボリューム２７からのデータの読み出しを要求した場合、コントローラ２１は、対応するデータを冗長グループ２５から読み出し、圧縮データの伸張を行い、計算機４に送信する。
【００２２】
コントローラ２１は、コントローラ間接続ポート２６を備える。コントローラ２１は、コントローラ間接続ポート２６を介して接続されたコントローラ間ネットワーク３により相互に通信でき、異なるモジュールのコントローラ２１とも通信できる。コントローラ間ネットワーク３により、コントローラ２１は、異なるストレージモジュール２（他系ストレージモジュール）の冗長グループ２５に対し、データの入出力を行うことができる。
【００２３】
このような入出力処理を他系入出力と呼ぶ。他系入出力では、コントローラ２１は、他系ストレージモジュール２の何れかのコントローラ２１と通信し、目的とする冗長グループ２５のデータの入出力を要求する。要求された他系ストレージモジュールのコントローラ２１は、要求されたデータ入出力を行い、結果を応答する。同一モジュールの冗長グループ２５に対して入出力を行うことを、他系入出力と対比して自系入出力と呼ぶ。
【００２４】
他系入出力は、コントローラ間ネットワーク３を介したコントローラ間の通信を伴うため、自系入出力と比べてレスポンス性能が低い。また、他系入出力の動作に関与するコントローラの負荷が高い場合は、スループット性能が低くなる。
【００２５】
本発明では、他系入出力に伴うスループット性能の低下を抑制するために、必要に応じて他のモジュールに格納されたデータの複製を自モジュールに格納し、他系入出力の発生を防止することで、システム全体のスループット性能を向上させることができる。
【００２６】
＜概要・用語の定義、大規模ストレージシステムの概要＞
図２と図３を用い、本実施例の概要を説明する。図２は、ストレージシステム１のボリューム２７と冗長グループ２５の間のデータ管理を説明する図である。図２には、ストレージシステム１におけるストレージモジュール２ａ、２ｂと、これらの各モジュールに属する複数のコントローラ２１ａ、２１ｂ、２１ｃ、２１ｄおよび複数の冗長グループ２５ａ、２５ｂが図示されている。
【００２７】
コントローラ２１ａと２１ｂは、ストレージモジュール２ａに属し、コントローラ２１ｃと２１ｃは、ストレージシステム１におけるストレージモジュール２ｂに属している。また、冗長グループ２５ａ、２５ｂは、それぞれストレージモジュール２ａ、２ｂに属している。コントローラ２１ａ、２１ｂ、２１ｃ、２１ｄは、それぞれボリューム２７ａ、２７ｂ、２７ｃ、２７ｄの制御を司る。また、図示しない複数のボリューム２７に対しても、各コントローラ２１が制御を司る。
【００２８】
本明細書では、ストレージシステム１に構成されているボリューム２７（ａ）〜（ｂ）を含むボリュームを総称して符号２７で示す場合がある。ボリューム２７には、固有の識別番号である論理ユニット番号（ＬＵＮ）がそれぞれ定義されている。また、ボリューム２７の記録領域は、５１２バイト毎に昇順の論理ブロックアドレス（ＬＢＡ）が割り振られている。
【００２９】
計算機４は、特定のボリューム２７の特定の論理ブロックの範囲に対し、データの入出力をする場合、ストレージシステム１に対する入出力要求パラメータとして、当該ボリュームＬＵＮと論理ブロックＬＢＡとアクセス範囲の長さ（論理ブロック数）を指定する。ボリューム２７の記録領域に対し、８キロバイト境界で区切った連続領域をデータユニットと定義する。
【００３０】
図２には、ボリューム２７ａ〜２７ｄ上のデータユニット２７０１〜２７０６がそれぞれ図示されている。以後、データユニットを総称してデータユニット２７００と呼ぶことがある。
【００３１】
本実施例では、データユニットのサイズを８キロバイトとするが、様々なサイズのデータユニットに対して実施できる。また、ボリューム２７上のデータユニットを総称して符号２７００で示す場合がある。
【００３２】
コントローラ２１は、各データユニット２７００のデータを、データユニット毎に圧縮し、冗長グループ２５に格納する。冗長グループ２５に格納された圧縮後のデータユニットのデータを、圧縮データと呼ぶ。本明細書では、圧縮データを総称して符号２５００で示す場合がある。
【００３３】
コントローラ２１は、各データユニット２７００と、圧縮データ２５００の対応関係を、図２には図示しない参照管理テーブル２１８を用いて管理する。参照管理テーブルの詳細については図７等を用いて後述する。データユニット２７００のデータが圧縮され圧縮データ２５００として冗長グループ２５に格納されている関係を、これらの間の破線で表現している。例えば、データユニット２７０１のデータ「Ｃ」は、圧縮されて圧縮データ２５０１「Ｃ’」として格納されている。
【００３４】
本実施例では、コントローラ２１は、データ重複排除機能を備えており、データユニット２７００を重複排除の単位とする。すなわち、内容が同一の複数データユニット２７００は、重複排除により、共通の圧縮データ２５００に対応付けられる。例えば、図２において、データユニット２７０２、２７０３、２７０４、２７０６は、データが同一のデータユニットである（データが同一であることを、アルファベット「Ａ」を用いて表現している）。
【００３５】
コントローラ２１は、データユニット２７０２、２７０３、２７０４、２７０６に対し重複排除を適用し、共通の圧縮データ２５０２「Ａ’」に対応付ける。これにより、データユニット２７０２、２７０３、２７０４、２７０６がそれぞれ固有の圧縮データと対応付けられる場合と比較して、冗長グループ２５０の記録領域を消費する量を１／４に圧縮できる。
【００３６】
ここで、コントローラ２１ｃに構成されるボリューム２７ｃのデータユニット２７０４が、計算機４ｂよりリードされるケースを考える。コントローラ２１ｃは、データユニット２７０４の圧縮データ２５０２を読み出し、これを伸張し、リード要求元の計算機４へ転送する必要がある。圧縮データ２５０２は、コントローラ２１ｃとは異なるストレージモジュール２ａに属する冗長グループ２５ａに格納されているため、コントローラ２１ｃが圧縮データ２５０２を読み出す処理は他系入出力となる。このため、データユニット２７０５に対するリード処理と比較して、データユニット２７０４のリード処理は性能が低い。
【００３７】
図３は、ボリュームと冗長グループの間のデータ管理を示している。図３において、データユニット２７０２、２７０３、２７０４、２７０６は、同一のデータを保持するデータユニットである。これらのデータユニットは重複排除が適用されているが、共通の圧縮データ「Ａ’」をストレージモジュール２ａと２ｂにそれぞれ格納している。
【００３８】
この状態では、重複排除されたデータユニット２７０４、２７０６に対するリード処理において、他系入出力が生じない。本発明の基本的概念は、ストレージシステムに対し、このような他系入出力が生じさせない（または他系入出力の機会を削減した）データの配置を行うことで、リード性能を向上させることにある。データの配置を制御する契機は、以下の契機が考えられる。
【００３９】
契機１：データライト処理時
コントローラ２１ｃが、データユニット２７０４に対し、重複排除を実施する場合を考える。今、データユニット２７０４に対してデータのライト要求を処理し、ライトデータがコントローラ２１ｃのキャッシュ（図示せず）上に格納されているものとする。
【００４０】
ここで、コントローラ２１ｃは、キャッシュメモリに書き込まれたデータ（データユニット２７０４）と同一のデータの圧縮データが、圧縮データ２５０２としてストレージモジュール２ａに格納済みであることを認識する。コントローラ２１ｃは、他系入出力が生じないようにデータユニット２７４０の圧縮データを、ストレージモジュール２ｂの冗長グループ２５ｂに格納する。
【００４１】
次にデータユニット２７０６に、データユニット２７０４と同じデータが書き込まれるとする。コントローラ２１ｄは、データユニット２７０４のボリューム２７ｃが同一のストレージモジュール２ｃの配下であることを認識する。そこで、コントローラ２１ｄは、データユニット２７０４と２７０６に対し重複排除を実施し、これらのデータユニットの共通の圧縮データ２５０４を冗長グループ２５ｂに格納する。その後、データユニット２７４０および２７０６を、圧縮データ２５０４に対応付ける。重複排除前にデータユニット２７０４の圧縮データを格納していた冗長グループ２５ｂの記憶領域は、空領域として再利用できるようにストレージシステム１内で管理する。つまり、一度、ライト処理は追記処理され、同一の圧縮データが冗長グループ２５ｂに記載されるが、重複排除を実施することでデータユニット２７０４に対応する圧縮データは削除される。
【００４２】
重複排除を実施する契機としては、計算機４からのライト要求受理時の他に、ライト要求処理とは独立に、ボリューム２７の全体に対して、既に格納済みのデータユニットを対象に、実施することが考えられる。
【００４３】
２：リード処理時
コントローラ２１が、計算機４からのデータユニットに対するリード要求を処理する契機で、データの配置を行う。
【００４４】
３：周期処理
いずれかのコントローラ２１で、周期的に図２の状態から図３の状態にデータ移動と対応関係の変更を行う。
【００４５】
＜ハードウェア構成＞
図４に、コントローラ２１のハードウェア構成図を示す。コントローラ２１は、ホストポート２３、コントローラ間通信ポート２６、ＣＰＵ２００、メモリ２１０、バックエンドポート２８等の構成要素からなる計算機である。
【００４６】
ＣＰＵ２００は、メモリ２１０に格納されているプログラムを実行することで、ストレージ装置としての機能を実現する。プログラムには複数の論理が実装されている。リード論理２１１は、計算機４からのリード要求を処理するための論理である。ライト論理２１２は、計算機４からのライト要求を処理するための論理である。他系転送論理２１３は、ストレージモジュール２間で、データの転送を行うための論理である。自系転送論理２１４は、ストレージモジュール２に構成された冗長グループ２５のデータをリードするための論理である。重複排除論理２１５は、重複排除処理を行うための論理である。周期処理論理２１６は、重複排除を周期的に行うための論理である。
【００４７】
これらの各論理においては、メモリ２１０に格納された複数のテーブルを用いる（図面ではテーブルをＴＢＬと表記する）。実施例では内容理解のためテーブル形式で説明するが、各情報の対応を管理するデータ構造であればテーブルに限らない。
【００４８】
ボリューム管理テーブル２１７は、ストレージ１に構成されているボリュームを管理するためのテーブルである。参照管理テーブル２１８は、各ボリュームのデータユニットと、データユニットのデータの所在（参照関係）を管理するテーブルである。逆参照管理テーブル２１９は、データがどのデータユニットから参照されているかを管理するテーブルである。逆参照管理テーブルは、記憶媒体２２のガベッジコレクション等を実行する際に利用されるものであるが、本実施例の動作説明のためには特に詳細を述べる必要はない。
【００４９】
重複管理テーブル２２０は、データユニットが重複排除されている場合に、重複データがどのデータユニットを重複排除したものかを管理するテーブルである。フィンガープリントテーブル２２１は、重複排除処理において、同一データを特定するために使用するテーブルである。ページ管理テーブル２２２は、冗長グループ２５の記憶領域の割り当てを管理するためのテーブルである。構成管理テーブルは、ストレージシステム１の構成情報を管理するためのテーブルである。
【００５０】
メモリ２は、ボリューム２７に対する入出力処理において、コントローラ２によりキャッシュメモリとしても利用される。図４に示したコントローラ２１に含まれるＣＰＵ等の構成要素の数は図示した数に限られない。
【００５１】
＜ボリューム構成＞
図５は、データ管理方法を示す図である。ストレージシステム１はボリューム２７ａ〜２７ｅを構成する。ボリューム２７ａ、２７ｂ、２７ｃ、２７ｄは、計算機４により認識され、計算機４による入出力要求の対象となるボリュームである。ボリューム２７ｅと２７ｆは、ストレージシステム１が重複データを内部的に管理するために利用するボリュームである。
【００５２】
ボリューム２７ａに対するデータの入出力制御や管理は、コントローラ２１ａが行う。同様に、ボリューム２７ｂと２７ｅについてはコトローラ２１ｂ、ボリューム２１ｆと２７ｃについてはコントローラ２１ｃ、ボリューム２７ｄについてはコントローラ２１ｄがそれぞれデータの入出力制御や管理を行う。
【００５３】
図５に示す通り、各ボリュームには、キャッシュ空間２７０（符号２７０ａ〜２７０ｆ）と、圧縮キャッシュ空間２７１（符号２７１ａ〜２７１ｆ）がそれぞれ対応付けられている。キャッシュ空間は論理的なアドレス空間である。
【００５４】
キャッシュ空間２７０のアドレスは、対応づけられたボリュームのＬＢＡと一意に対応する。例えば、計算機４がボリューム２７ａのＬＢＡ２０４８にデータを記録する場合、データはキャッシュメモリ（メモリ２１０の一部）に記録され、キャッシュ空間２７０ａのＬＢＡ２０４８として識別されるように管理される。
【００５５】
圧縮キャッシュ空間２７１（符号２７１ａ〜２７１ｆ）は、圧縮データの格納位置を管理するための仮想的なアドレス空間である。ストレージシステム１は、圧縮キャッシュ空間２７１のアドレスと、ボリュームのＬＢＡおよびキャッシュ空間２７０のアドレスとの対応付けを参照管理テーブル２１８により管理する。この対応づけの最小単位は、データユニットである。圧縮キャッシュ空間２７１は、圧縮データをアドレス順に詰めて記憶しても良い。
【００５６】
圧縮キャッシュ空間２７１には、冗長グループ２５の記録領域をさらに割り当てる。圧縮キャッシュ空間２７１への冗長グループ２５の記憶領域の割り当ては、例えば４２ＭＢ単位で行われる。冗長グループ２５の記録領域を割り当ての単位で区切った記録領域をページと呼ぶ。
【００５７】
ライト論理２１２は、圧縮キャッシュ空間２７１のデータを、そのアドレスを含むアドレス空間に割り当てられたページに記録する。例えば、冗長グループ２５の記録領域２５１ａがページ単位で圧縮キャッシュ空間の２７２aに割り当てられている。
【００５８】
図５は、キャッシュ空間２７０ａのデータユニット２７０１について、その圧縮データが圧縮キャッシュ空間２７１ａの圧縮データ２５０１として記録され、冗長グループ２５ａのページ２５１ａに格納されていることを示している。同様に、図５は、キャッシュ空間２７０８について、その圧縮データが圧縮キャッシュ空間２７１ｅの圧縮データ２５０２として記録され、冗長グループ２５ａのページ２５１ｅに格納されていることを示している。
【００５９】
図５は、キャッシュ空間２７０ａのデータユニット２７０２とキャッシュ空間２７０ｂのデータユニット２７０３が、重複排除されたデータユニットであり、その重複データが、ボリューム２７ｅのデータユニット２７０８として管理されていることを示している。また、データユニット２７０８の圧縮データは、前述と同様に圧縮データ２５０２として管理され、ページ２５１ｅに格納されている。
【００６０】
データユニット２７０６は、異なるストレージモジュールに格納されたデータユニット２７０２および２７０３と同じ内容のデータが記録されたデータユニットである。そのため、データユニット２７０６は、データユニット２７０２および２７０３と重複排除されず、その圧縮データが圧縮データ２５０５として記録され管理されている。
【００６１】
データユニット２７０４は、ホストのライト要求によるデータがキャッシュに格納された直後のデータユニットである。データユニット２７０４のデータはキャッシュメモリ上にのみあるため、圧縮データとは関連付けられていない。
【００６２】
＜各種テーブル＞
図６は、ボリューム管理テーブル２１７を説明する図である。ボリューム管理テーブル２１７の各行は、それぞれボリューム２７に対応し、対応するボリューム２７の情報を保持する。以下、ボリューム管理テーブル２１７の各カラムについて説明する。
【００６３】
カラム２１７１は、各行に対応するボリュームの識別子を記録するカラムである。説明の便宜のため、ボリュームの識別子として本明細書におけるボリュームの符号を記載する。整数等をボリュームの識別子のデータ型として用いることもできる。なお、以降ではストレージシステム１の構成要素や論理的な構成要素の識別子またはそのアドレスに関しても同様に、本明細書における符号を用いて説明する。
【００６４】
カラム２１７２は、対応するボリューム２７のデータの入出力制御や管理の制御を司るコントローラ２１の識別子を記録するカラムである。
カラム２１７３は、対応するボリューム２７の論理容量を記録するカラムである。
カラム２１７４は、対応するボリュームに対し、計算機４がアクセスできるホストポート２３の識別子を記録するカラムである。
カラム２１７５は、対応するボリューム２７の種別を記録するカラムである。対応するボリューム２７が重複データボリュームである場合は、「重複データ」を記録し、計算機４が利用するボリュームである場合は「データ」を記録する。
カラム２１７５は、対応するボリューム２７に設定されるＬＵＮを記録するカラムである。
【００６５】
例えば、ボリューム２１７１が「２７ａ」は、コントローラ２１７２「２１a」で制御され、記憶容量２１７３が「１００ＧＢ」、ポート２１７４が「２１ａ」、ボリューム種別２１７５が「データ」、ＬＵＮ２１７５が「０」であることを示している。
【００６６】
図７は、参照管理テーブル２１８を説明する図である。参照管理テーブル２１８の各行は、対応するデータユニット２７００の情報を保持する。以下、参照管理テーブル２１８の各カラムについて説明する。
カラム２１８１は、対応するデータユニット２７００のボリューム２７の識別子を格納する。
カラム２１８２は、対応するデータユニット２７００のキャッシュ空間の識別子を格納する。
カラム２１８３は、対応するデータユニットのキャッシュ空間上のアドレスを格納する。なお、図７においては、説明のためデータユニット２７００のアドレスとして、データユニットの符号を記載している。また以降の各種テーブルの説明図においても、説明のためＬＢＡを含むアドレスを、対応するデータユニットないし圧縮データないしページの符号で表現する。
カラム２１８４は、対応するデータユニット２７００が重複排除されたデータユニットか否かを示す情報を格納する。重複排除されたデータユニットの場合、「Ｙ」を記録する。そうでない場合、「Ｎ」を記録する。
【００６７】
カラム２１８５は、対応するデータユニット２７００の圧縮データが格納されている圧縮キャッシュ空間の識別子、或いは、対応するデータユニットが重複排除されたデータユニットの場合は、その重複データが格納されている重複データボリュームのキャッシュ空間の識別子を記録する。
【００６８】
カラム２１８６は、対応するデータユニットの圧縮データが格納されている、圧縮キャッシュ空間上の圧縮データのアドレスを記録する。対応するデータユニットが重複排除されたデータユニットの場合は、その重複データが格納されている重複データボリュームのデータユニットのアドレスを記録する。
カラム２１８７は、対応するデータユニットの圧縮後データのサイズを格納する。
【００６９】
例えば、データユニット２１８３が「２７０１」は、ボリューム２１７８が「２７ａ」、キャッシュ空間２１８２が「２７０ａ」、重複排除２１８４がされていない状態「Ｎ」、圧縮キャッシュ空間或いはキャッシュ空間２１８５が「２７１ａ」等のように対応して管理されている。
【００７０】
図７は、コントローラ２１ａが管理する参照管理テーブル２１８の他に、他のコントローラ２１ｂ、２１ｃ、２１ｄも同様に、参照管理テーブル２１８ｂ、２１８ｃ、２１８ｃをそれぞれ管理していることを示している。
【００７１】
なお、本実施例において、参照管理テーブル２１８は、ボリューム毎に独立したテーブルであるが、図７では、説明の便宜ためコントローラ２１毎に参照管理テーブルが保持されるように表現している。
【００７２】
図８は、逆参照管理テーブル２１９を説明する図である。逆参照管理テーブル２１９は、記憶媒体２２のガベッジコレクション等を実行するために用いられる。参考までに逆参照管理テーブル２１９の説明をする。それぞれ圧縮データキャッシュ空間２７１の圧縮データに対応し、対応する圧縮データの情報を保持する。以下、逆参照管理テーブル２１９の各カラムを説明する。カラム２１９１は、対応する圧縮データのボリューム２７の識別子を格納する。カラム２１９２は、対応する圧縮データの圧縮データキャッシュ空間の識別子を格納する。カラム２１９３は、対応する圧縮データの圧縮データキャッシュ空間におけるアドレスを格納する。カラム２１９４は、対応する圧縮データのデータユニットのキャッシュ空間の識別子を格納する。カラム２１９５は、対応する圧縮データのデータユニットのアドレスを格納する。カラム２１９６は、対応する圧縮データのサイズを格納する。
【００７３】
図８は、コントローラ２１ａが管理する逆参照管理テーブル２１９ａの他に、他のコントローラ２１ｂ、２１ｃ、２１ｄも同様に、参照管理テーブル２１９ｂ、２１９ｃ、２１９ｃをそれぞれ管理していることを示している。
【００７４】
図８に示す通り、各コントローラ２１は、その処理対象のボリューム２７に関して、逆参照管理テーブル２１８を保持する。なお、本実施例において、逆参照管理テーブル２１９は、ボリューム毎に独立したテーブルであるが、図８では、説明の便宜ためコントローラ２１毎に逆参照管理テーブルが保持されるように表現している。
【００７５】
図９は、コントローラ２１ｂ、２１ｃのそれぞれが管理する重複管理テーブル２２０の説明図である。
【００７６】
重複管理テーブル２２０は、重複データボリュームの各データユニット（重複データ）について、その重複データを参照する他のボリュームのデータユニットとの関係を管理するテーブルである。
【００７７】
重複管理テーブル２２０の各行は、重複データを参照先とするデータユニットに対応し、対応するデータユニットと重複データの関係を保持する。以下、重複管理テーブル２２０の各カラムを説明する。
【００７８】
カラム２２０１は、重複データを保持する重複データボリュームの識別子を格納する。
ラム２２０２は、重複データを保持する重複データボリュームのキャッシュ空間の識別子を格納する。
カラム２２０３は、重複データが格納されている重複データボリュームのデータユニットのアドレスを格納する。
カラム２２０４は、重複データを参照先とするデータユニットのキャッシュ空間の識別子を保持する。
カラム２２０５は、重複データを参照先とするデータユニットのアドレスを保持する。
【００７９】
例えば、ボリューム２２０１が「２７ｅ」は、重複データユニットキャッシュ空間２２０２が「２７０ｅ」、重複データユニットアドレス２２０３が「２７０８」、データユニットキャッシュ空間２２０４が「２７０ａ」、データユニニットアドレス２２０５が「２７０２」が対応して管理されている。尚、重複データユニットキャッシュ空間、データユニットキャッシュ空間は、図５のキャッシュ空間に相当するが、説明の便宜上、両者を区別するために異なる名称を用いた。アドレスについても同様であり、図５の内容に対応する。
【００８０】
図１０は、フィンガープリントテーブル２２１を説明する図である。フィンガープリントとは、データの内容から一意に算出される固定長のバイト列である。フィンガープリントを算出するアルゴリズムとして、ＭｅｓｓａｇｅＤｉｇｅｓｔ  ５  （ＭＤ５）やＳｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １  （ＳＨＡ−１）等が広く知られている。データユニットのデータのフィンガープリントを算出し、フィンガープリントテーブルにデータユニットのアドレスと組で記録しておくことで、ストレージシステム１内の同一データの検索を高速化できる。
【００８１】
フィンガープリントテーブル２２１の各行は、フィンガープリントの値に対応し、フィンガープリントの値と、その値を算出したデータユニットのアドレスを対応付ける。以下、フィンガープリントテーブル２２１のカラムを説明する。
【００８２】
カラム２２１１は、フィンガープリントの値を格納する。
カラム２２１２は、カラム２２１１に格納されたフィンガープリントを算出したデータユニットのキャッシュ空間の識別子を格納する。
カラム２２１３は、カラム２２１１に格納されたフィンガープリントを算出したデータユニットのアドレスを格納する。
【００８３】
なお、フィンガープリントテーブル２２１は、一つのフィンガープリントに対して複数のデータユニットの情報を格納できる。図１０では、フィガープリントの値が０ｘＡＡＡＡ  ＡＡＡＡ  ＡＡＡＡ  ＡＡＡＡ（１６進数）に対して、データユニット２７０８と２７０６が記録されているが、データユニット２７０８と２７０６のフィンガープリントがいずれも０ｘＡＡＡＡ  ＡＡＡＡ  ＡＡＡＡ  ＡＡＡＡであることを示している。
【００８４】
図１１は、ページ管理テーブル２２２を説明する図である。ページ管理テーブルは、圧縮キャッシュ空間２７１のアドレスと、そのアドレスに割り当てた冗長グループのページ２５１のアドレスの対応を管理するテーブルである。ページ管理テーブル２２２の各行は、ページに対応し、そのページのアドレスと割り当て先のキャッシュ空間２７１のアドレスの対応を情報として保持する。
【００８５】
以下、ページ管理テーブル２２２の各カラムを説明する。
カラム２２２１は、対応するページが割り当てられているキャッシュ空間の識別子を格納する。
カラム２２２２は、対応するページが割り当てられているキャッシュ空間の先頭アドレスを可能する。
カラム２２２３は、対応するページの冗長グループ２５の識別子を格納する。
カラム２２２４は、対応するページの冗長グループ２５における先頭アドレスを格納する。
【００８６】
図１２は、構成管理テーブル２２３を説明する図である。構成管理テーブル２２３は、各行がストレージシステム１に構成されているストレージモジュール２に対応し、ストレージシステム２の構成情報を記録する。
【００８７】
以下、構成管理テーブル２２３の各カラムを説明する。
カラム２２３１は、対応するストレージモジュール２の識別子を格納する。
カラム２２３２は、対応するストレージモジュール２に含まれるコントローラ２１の識別子を格納する。
カラム２２３３は、対応するストレージモジュール２に含まれる冗長グループ２５の識別子を格納する。
【００８８】
＜ライト処理＞
本実施例では、他系入出力が生じる場合に、他モジュールに格納されたデータをリードするか自モジュールに同一データを格納するかの判断を重複排除処理として行う。重複排除処理として、ライト論理２１２によるライト処理、リード論理２１１によるリード処理、周期処理論理２１６による周期処理、重複排除論理２１５による重複排除処理の順で、以下説明する。
【００８９】
図１３は、ライト論理２１２の処理フローを説明する図である。ライト論理２１２は、計算機４よりデータ書き込み要求（ライト要求）を受領することを契機に開始し、要求されたデータの格納を行う論理である。なお、ライト論理２１２を含む様々な論理を主語とする場合があるが、その論理がＣＰＵ２００により実行されることで効果を生じさせることを直感的に説明するためである。
【００９０】
また、計算機４より一つのデータユニットに対し、データユニットと同サイズ（８キロバイト）の書き込みが行われるケースを例に説明するが、本発明は、以下のように計算機４からの書き込みデータのサイズおよびアドレスによらず実施可能である。データユニットのサイズ未満の書き込みの場合、データユニットのサイズに満たない部分のデータを、後述のリード論理を使い補完し、ライト論理２１２を実施する。複数のデータユニットを跨ぐ場合、要求された複数のデータユニットに対し、ライト論理２１２を繰り返し実施する。
【００９１】
図１３（Ａ）のステップ５０１で、計算機４からのライト要求およびデータを受領する。
ステップ５０２で、計算機４から受領したデータをキャッシュメモリ（メモリ２１０の一部）に格納する。また、キャッシュメモリに格納したデータを保護するための処理を行う。具体的には、要求を受けたコントローラとは別のコントローラ２１のキャッシュメモリに、データを複製する。キャッシュメモリのアドレスは、キャッシュ空間２７０のアドレスと対応付けられている。
【００９２】
ステップ５０３で、要求した計算機４に対し、書き込み完了を応答する。
ステップ５０４、５０５で、ライト論理２１２は、要求されたデータが重複排除可能か否か、すなわち要求されたデータと同じデータが、ストレージシステム１に格納済みかを判定する。この判定は、（１）要求されたデータのフィンガープリントを算出する。（２）フィンガープリントテーブル２２１を検索し、（１）で算出したフィンガープリントが登録済みかを判定する。
【００９３】
ステップ５０４、５０５の判定において、ステップ５０３で要求されたデータが重複排除不可、即ち、同一データがストレージシステム１に格納されていない、と判定した場合、ステップ５０６へ進む。
【００９４】
ステップ５０６で、重複排除不可と判定されたデータを圧縮し、冗長グループ２５に格納する。この処理の詳細については後述する。
【００９５】
ステップ５０８で、重複排除不可と判定されたデータのフィンガープリントを算出し、フィンガープリントテーブル２２１に登録する。その後、ライト処理を終了する。
【００９６】
一方、ステップ５０４、５０５で重複排除可能と判定した場合、ステップ５０７を実行する。ステップ５０７は、重複排除可能と判定されたデータに対し、重複排除を実行する処理である。この処理の詳細については後述する。その後、ライト論理２１２は処理を終了する。
【００９７】
ステップ５０６の圧縮データを格納するライト論理２１２による処理の詳細を、図１３（Ｂ）の処理フロー図を使って説明する。
ステップ５１１において、キャシュメモリに格納したデータを圧縮し、メモリ２１０に一時的に格納する。
【００９８】
ステップ５１２において、圧縮データを格納するための圧縮データキャッシュ空間２７１の領域（アドレスと長さ）を決定する。圧縮データキャッシュ空間の領域は、アドレス昇順に、前回決定した領域の次の領域と決定する。圧縮データキャッシュ空間２７１の領域を確保するための論理の詳細については、本明細書では割愛する。
【００９９】
ステップ５１３において、前ステップで確保した圧縮データキャッシュ空間のアドレスに対応付けたキャッシュメモリに、圧縮データを格納する。
【０１００】
ステップ５１４において、逆参照管理テーブル２１９に対し、圧縮データとデータユニットの対応関係を記録する。
【０１０１】
ステップ５１５において、参照管理テーブル２１８に対し、データユニットと圧縮データの対応関係を記録する。
【０１０２】
ステップ５１６において、圧縮データキャッシュ空間の圧縮データを、その空間に割り当て済みのページに格納する。圧縮データキャッシュ空間にページが割り当て済みでない場合は、同一のストレージモジュールの冗長グループからページを確保して割り当てる。同一のストレージモジュールの冗長グループに、未割り当てのページがない場合は、別のストレージモジュールの冗長グループからページを割り当てるようにしてもよい。
【０１０３】
尚、計算機４からのライト要求がシーケンシャルの時は、同様の処理を繰り返す。ライト受領時に重複排除処理を行わない場合には、ステップ５０５の重複無し、と判断された場合と同様の処理となる。
【０１０４】
図１４は、重複排除論理２１５の処理フローを説明する図である。重複排除論理２１５は、図１３に示したライト論理２１２のステップ５０７において実行される。
【０１０５】
ステップ５３１において、ステップ５０４（図１３）で参照したフィンガープリントテーブル２２０から特定される同一データが、自ストレージモジュールの冗長グループか、他ストレージモジュールの冗長グループのどちらに格納されているかを判定する。判定の結果、自ストレージモジュールの冗長グループであれば、ステップ５３２へ進み、他ストレージモジュールの冗長グループであれば、ステップ５４２へ進む。
【０１０６】
自ストレージモジュールか、他ストレージモジュールかの判定処理の詳細は以下の通りである。
【０１０７】
（１）ステップ５０４で取得したフィンガープリントテーブル２２０の情報から、データが一致するデータユニットを特定する。ここで特定したデータユニットを、重複排除候補データユニットとよぶ。
【０１０８】
例えば、ボリューム２７ａのあるデータユニットに、データユニット２７０９と同じ内容のデータ「Ｂ」が新たに書き込まれたとする。このフィンガープリントの値が、十六進数の「BBBB BBBB BBBB BBBB」であり、フィンガープリントテーブル２２０の検索により、重複候補データユニットとして、２７０９が特定される。また、重複データユニット２７０９が格納されているキャッシュ空間２７０ｆが特定される。
【０１０９】
（２）重複排除候補データユニットの圧縮データが格納されている圧縮データキャッシュ空間およびアドレスを、参照管理テーブル２１８から特定する。なお、重複候補データユニットが、重複排除データボリュームに格納済みである場合、さらに参照管理テーブル２１８を参照して、その圧縮データの圧縮データキャッシュ空間および圧縮データのアドレスを特定する。
【０１１０】
例えば、前項で特定された重複候補データユニット２７０９の圧縮データキャッシュ空間は、参照管理テーブル２１８ｃより、圧縮キャッシュ空間２７１ｆと特定される。また、圧縮キャッシュ空間２７１ｆにおける圧縮データの格納先アドレスは、２５０３と特定される。
【０１１１】
（３）ページ管理テーブル２２２を参照し、（２）で特定した圧縮データを格納する冗長グループを特定する。
例えば、ページ管理テーブル２２２を参照すると、特定された圧縮キャッシュ空間２７１ｆのキャッシュ空間アドレスが２７２ｆからの１ページ分の領域に対して、冗長グループ２５ｂの冗長グループページアドレス２５１ｆのページが割り当てられている。前項で特定された、圧縮データの格納先アドレス２５０３は、キャッシュ空間アドレス２７２ｆから１ページ分の範囲に含まれるため（図５参照）、図１１のページ管理テーブル２２２を参照して、冗長グループは２５ｂと特定される。
【０１１２】
（４）構成管理テーブル２２３を参照し、特定した冗長グループのストレージモジュールを特定する。
例えば、前項で特定した冗長グループ２５ｂは、構成管理テーブル２２３を参照すると、モジュール２ｂに構成されていることが特定される。
【０１１３】
(５)特定したストレージモジュールが、本処理を実行するコントローラのストレージモジュールと一致するかを判定する。
【０１１４】
ステップ５３２において、重複排除候補データユニットが、重複データボリュームに登録済みか否かを判定する。この判定処理の処理フローは以下の通りである。
【０１１５】
（ａ）参照管理テーブル２１８を参照し、重複候補データユニットのカラム２１８１（ボリューム）を参照する。
【０１１６】
（ｂ）ボリューム管理テーブル２１７を参照し、（ａ）で特定したボリュームについて、カラム２１７５（種別）を参照する。
【０１１７】
（ｃ）種別が重複データの場合は、（ａ）で特定したボリュームが重複データボリュームであるから、重複候補データは重複データ（重複データボリュームに登録済み）である。
【０１１８】
重複排除候補データユニットが重複データボリュームに格納済みでない場合、ステップ５４１へ進む。格納済みの場合、ステップ５３５へ進む。
【０１１９】
ステップ５４１において、重複排除論理２１５は、重複データを重複データボリュームへ格納する。この処理については、後述する。
【０１２０】
ステップ５３３において、重複排除論理２１５は、重複データボリュームへ格納した重複データに関して、重複管理テーブル２２０を更新する。例えば、図９の重複管理テーブル２２０ｃに示したように、データユニット２７０１とデータユニット２７０３に対して重複排除を実施し、それぞれ重複データユニットアドレス２７０８を参照するようにした場合、重複管理テーブル２２０ｃには、重複データユニット２７０８に対するデータユニット２７０１と２７０３の情報を記録する。
【０１２１】
ステップ５３４において、重複排除論理２１５は、参照管理テーブル２１８を更新し、重複データボリュームへ移動した重複データと、重複排除対象のデータユニットの関係を記録する。例えば、図７の参照管理テーブル２１８ａのデータユニット２７０２に対応する行には、格納先キャッシュ空間２１８５に、重複データのキャッシュ空間の識別子「２７０ｅ」を記録し、格納先アドレス２１８６に、重複データのアドレスである「２７０８」を記録し、カラム２１８４（重複）に「Ｙ」を記録する。
【０１２２】
なお、ステップ５３２において、重複候補データユニットが重複データボリュームに格納済みの場合は、重複データの重複データボリュームへの格納処理（ステップ５４１）を実施せず、重複管理テーブル２２０と、参照管理テーブル２１８の更新のみを行う。
【０１２３】
ステップ５４２において、重複候補データユニットが他系ストレージモジュール２の冗長グループ２５に格納済みの場合は、重複排除を実施するか否かを判断する。例えば、ステップ５４２において、他系ストレージモジュール２に格納済みの重複候補データユニットに対し、予め定められた閾値以上のデータユニットが参照している場合(参照数が閾値以上)には、重複排除の効率が十分に高い状態であると判断し、リード性能を優先するため、重複排除を実施しないと判断し、ステップ５３５に進む。
【０１２４】
この閾値の他、重複する圧縮データに対応するデータユニットのアクセス頻度に基づいて判断しても良い。即ち、アクセス頻度が高い場合には、他系入出力となる可能性が高いと判断し、自モジュール内に同一データを格納するようにする。
【０１２５】
このように、他系ストレージモジュールに同一のデータユニットが存在しても、自系ストレージユニットに同一データを格納することで、リード処理を高速化することができる。尚、この判断に用いる閾値やアクセス頻度は、ストレージシステム１の管理者によって設定することができる。
【０１２６】
このように、重複排除データへのアクセスが他系入出力に該当する場合、自モジュール内に圧縮データを格納することでスループット性能を向上させることができる。自モジュール内に圧縮データを格納するか否かの判断を、対象データのアクセス頻度や重複データの参照回数に基づいて判断するので、重複排除によるデータ量削減効果とのトレードオフを考慮したデータ管理とすることができる。
【０１２７】
重複排除を実施する場合、他系の重複排除候補データユニットを対象に、ステップ５３２からの重複排除処理を行う。このとき、ステップ５３２において、他系のコントローラ２１に対して、重複排除候補データユニットが重複データボリュームに格納済みかどうかを問い合わせるようにしてもよい。また、ステップ５４１において、他系のコントローラ２１に対して、重複データを重複排除ボリュームに格納するように要求してもよい。また、ステップ５３３、５３４において、他系のコントローラ２１に対して、重複管理テーブル２２０や参照管理テーブル２１８を更新するように要求してもよい。
【０１２８】
ステップ５４２において、重複排除を実施しないと判定した場合、自ストレージモジュール２の冗長グループ２５に、データを格納する。この場合はステップ５３５（圧縮格納）とステップ５３６（ＦＰＴ更新）の処理を行う。これらは、図１３で示したステップ５０６およびステップ５０８と同内容であるため、説明を割愛する。
【０１２９】
ステップ５４１の処理の詳細を、図１４（Ｂ）の処理フロー図で説明する。ステップ５４１において、重複排除論理２１５は、重複データを重複データボリュームに格納するため、重複データボリュームとそのデータユニットを決定する。重複データボリュームには、本論理を実行中のコントローラと同一のストレージモジュールのコントローラ２１により処理される重複データボリュームを選択することが好ましい。また重複データのデータユニットとしては、重複データボリュームのキャッシュ空間のデータユニットを昇順に、前回選択したデータユニットの次のデータユニットを選択する。この選択には、キャッシュ空間の割り当てを管理する機構を設けるが、説明を割愛する。
【０１３０】
ステップ５３８において、重複排除論理２１５は、ステップ５３７で選択した重複データを格納するためのデータユニットに対応するキャッシュメモリに、データを転送する。
【０１３１】
ステップ５３９およびステップ５４０は、図１３で示したステップ５０６およびステップ５０８と同内容であるため、説明を割愛する。
【０１３２】
＜リード処理＞
図１５は、リード論理２１１の処理フローを説明する図である。リード論理２１１は、計算機４よりデータユニットのリード要求が行われたときに、その要求を処理する論理である。以下、図１５を用い、リード論理２１１の処理内容を説明する。
【０１３３】
図１５（Ａ）のステップ５６１において、リード論理２１１は、計算機４からのリード要求を受領する。このリード要求には、リード対象のデータを格納するボリュームを示す識別子と、リード対象のＬＢＡおよび長さが含まれる。ここでは、一つのデータユニットに対してリード要求が行われた場合を例として説明する。なお、ライト論理の場合と同様に、データユニットのサイズ未満やデータユニットのサイズ以上の要求も処理することができる。
【０１３４】
ステップ５６２において、リード論理２１１は、リード要求の対象のデータユニットに関して、参照管理テーブル２１８を参照し、圧縮・キャッシュ空間２１８５、格納先アドレス２１８６を取得する。
【０１３５】
ステップ５６３において、リードを要求されたデータユニットの圧縮データを冗長グループ２５から読み出す。この処理の過程については後述する。
【０１３６】
ステップ５６４において、リード論理２１１は、冗長グループ２５から読み出したデータを（伸張し）、要求元の計算機４に応答する。
【０１３７】
ステップ５６５において、リード論理２１１は、ステップ５６３で読み出したデータが、他系のストレージモジュール２の冗長グループ２５である場合に、そのデータを自系の冗長グループ２５へ複製する処理を行う。これにより、後続の同一データの読み出しにおいて、他系入出力を不要にする。即ち、他系ストレージモジュールに同一のデータユニットが存在しても、自系ストレージユニットに同一データを格納することで、リード処理を高速化することができる。
【０１３８】
ステップ５６３のデータリード処理について、図１５（Ｂ）の処理フロー図を用いて説明する。ステップ５６６において、リード論理２１１は、要求されたデータユニットが重複排除されたデータユニットか否かを判定する。この判定には、ステップ５６２で取得したデータユニットの情報を利用する。重複排除されたデータユニットの場合、ステップ５６９へ進み、そうでなければステップ５６７へ進む。これらのステップについては後述する。
【０１３９】
ステップ５６８において、リード論理２１１は、ステップ５６７またはステップ５６９で取得した圧縮データを伸張（圧縮解除）する。この伸張済みデータは、前述のステップ５６４において計算機４へ応答される。
【０１４０】
ステップ５６７の処理の詳細を、図１５（Ｃ）の処理フロー図を用いて説明する。ステップ５７０において、リード論理２１１は、要求されたデータユニットのデータが、自系ストレージモジュールの冗長グループに可能されているか否かを判定する。自系ストレージモジュールの冗長グループに格納済みの場合、ステップ５７１の処理を行い、そうでなければステップ５７２の処理を行う。これらの処理の詳細については後述する。
【０１４１】
ステップ５６９（重複データリード）の処理の詳細を、図１５（Ｄ）の処理フロー図を用いて説明する。
【０１４２】
ステップ５７３において、リード論理２１１は、要求されたデータユニットのデータが格納されている重複データユニットに関して、参照管理テーブル２１８を参照し、その圧縮データ格納先の情報を得る。
【０１４３】
ステップ５７４において、リード論理２１１は、ステップ５７３で取得した情報に基づき、圧縮データを冗長グループ２５からリードする。この処理は、ステップ５７０からの処理と同じである。
【０１４４】
図１６は、自系転送論理２１４および他系転送論理２１３の処理フローを示す図である。図１６（Ａ）に示す自系転送論理２１４は、リード処理において、リード処理を実行中のコントローラと同じストレージモジュール２の冗長グループ２５からデータ（圧縮データ）を読み出すための論理である。
【０１４５】
図１６（Ｂ）に示す他系転送論理２１３は、リード処理において、リード処理を実行中のコントローラとは異なるストレージモジュール２の冗長グループ２５からデータを読み出す処理である。自系転送論理２１４は、図１５に示したリード論理２１１のステップ５７１において実行される。他系転送論理２１３は、図１５に示したリード論理２１１のステップ５７３において実行される。以下、自系転送論理２１４について説明する。
【０１４６】
自系転送論理２１４は、ステップ５８１より開始される。
【０１４７】
ステップ５８１において、自系転送論理２１４は、ページ管理テーブル２２２を参照し、リード対象のデータが格納されている冗長グループ２５のページ２５１を特定する。
【０１４８】
ステップ５８２において、自系転送論理２１４は、特定したページ２５１より、目的のデータを読み出す。
【０１４９】
次に、他系転送論理２１３について説明する。他系転送論理２１３においては、他のストレージモジュール２のコントローラ２１との連携が必要である。図１６（Ｂ）では、自系コントローラ（リード処理を実行するコントローラ）と、他系コントローラ（自系コントローラからの要求を受けて、冗長グループからデータを読み出すコントローラ）のそれぞれの動きを説明する。他系転送論理２１３は、ステップ５９１より開始される。ステップ５９１からの処理は、自系コントローラによる処理である。
【０１５０】
ステップ５９１において、自系コントローラは、他系コントローラに対してデータの転送要求を発行する。その後、他系コントローラからの転送完了通知を待つ（ステップ５９２）。
【０１５１】
一方、他系コントローラは、ステップ５９３において自系コントローラからの転送要求を受け、処理を開始する。
【０１５２】
ステップ５９４において、他系コントローラは、指定されたデータを冗長グループ２５からリードする。この処理は、図１６（Ａ）の処理と同等である。
【０１５３】
ステップ５９５において、他系コントローラは、要求元の自系コントローラに対し、データを転送する。
【０１５４】
ステップ５９６において、他系コントローラは、要求元の自系コントローラに対して、データ転送の完了を通知する。
【０１５５】
図１７（Ａ）は、リード論理の一部である複製処理の処理フローを説明する図である。本フローは、図１５のステップ５６５の詳細である。複製処理は、ステップ６４１より開始する。
【０１５６】
ステップ６４１において、複製処理は、データ複製の要否を判定する。リード対象データが、ボリュームを管理するコントローラとは異なる（他系の）ストレージモジュールの冗長グループに格納済みである場合、複製要と判定する。
【０１５７】
なお、複製要と判定する条件としては、アクセス頻度や、重複データによるデータ削減効果を持ち用いてもよい。例えば、データユニットまたはデータユニットを含む一定のアドレス範囲毎にリードアクセスの発生回数を記録するようにし、単位時間あたりのリードアクセス回数が一定以上の場合や、アクセス回数の上昇の傾向が見られる場合に、重複データの複製が必要と判定してもよい。または、重複データが一定以上のデータユニットから参照されている場合に、複製要と判定するようにしてもよい。また、自系冗長グループへの複製は、対象データが重複排除済みか否かに関わらず、実施できる。
【０１５８】
ステップ６４２において、複製要と判定した場合、ステップ６４４に進む。そうでなければ、処理を終了する。
【０１５９】
ステップ６４４において、データ複製処理を実行する。この処理の詳細については、図１６（Ｂ）の処理フローを用いて説明する。
【０１６０】
ステップ６３１において、データ複製処理は、対象データユニットが重複排除されたデータユニットか否かを判定する。判定には参照管理テーブル２１８から取得したデータを用いる。重複排除されたデータユニットの場合、ステップ６３２に進む。そうでなければ、ステップ６３６へ進む。
【０１６１】
ステップ６３２において、データ複製処理は、対象のデータユニットのデータを、自ストレージモジュールの冗長グループに格納する。この処理の内容は、図１４のステップ５３７からの処理と同様である。
【０１６２】
ステップ６３３において、データ複製処理は、参照管理テーブル２１８の更新が必要なデータユニットを特定する。参照管理テーブル２１８の更新が必要なデータユニットは、以下の条件を満たすデータユニットである。
【０１６３】
（１）ステップ６３２における複製対象の重複データを参照しているデータユニット
(２)自ストレージモジュールのコントローラにより管理されているボリュームのデータユニット
これらのデータユニットに関し、参照管理テーブル２１８を更新し、移動後の圧縮データを参照するようにすることで、これらのデータユニットをリードする際の他系入出力の発生を抑止できる。
【０１６４】
ステップ６３４において、データ複製処理は、複製した重複データに関して、重複管理テーブル２２０を更新する。具体的には、複製した重複データを参照するデータユニットとして、ステップ６３３で特定したデータユニットを記録する。
【０１６５】
ステップ６３５において、データ複製処理は、ステップ６３３で特定したデータユニットに関して、参照管理テーブル２１８を更新する。具体的には、ステップ６３３で特定した各データユニットが、複製した重複データを参照するように更新する。
【０１６６】
なお、ステップ６３１で、対象のデータユニットが重複排除されていないデータユニットと判定した場合は、そのデータを格納し（ステップ６３６）、参照管理テーブル２１８を更新し（ステップ６３５）、処理を終了する。ステップ６３６の処理内容は、図１３に示したステップ５１１からの処理と同様である。
【０１６７】
図１７に示したデータの複製処理により、重複排除により、他系のストレージモジュールに格納されたデータを参照する他系入出力が必要となる場合であっても、自系ストレージユニットに同一データを格納することで、リード処理を高速化することができる。
【０１６８】
＜周期処理＞
図１８は、周期処理論理２１６の処理フローを説明する図である。周期処理論理２１６は、計算機４からの入出力要求に対する処理とは独立に、予め他系入出力となるデータユニットを自系入出力となるように、圧縮データの複製を行う。以下、周期処理論理２１６の処理の詳細を説明する。
【０１６９】
ステップ６１１において、周期処理論理２１６は、処理対象とするボリューム２７の一つを選択する。
【０１７０】
ステップ６１２において、周期処理論理２１６は、ステップ６１１で選択したボリュームのデータユニットの一つを処理対象として選択する。周期処理論理２１６は、選択したボリュームの各データユニットを一つずつ選択し、以降の処理を行う。データユニットの選択方法としては、初回実行時にはボリュームの先頭のデータユニットを選択し、次回実行時には前回選択したデータユニットのアドレス昇順で次のデータユニットを選択するようにできる。
【０１７１】
ステップ６１３において、周期処理論理２１６は、ステップ６１２で選択したデータユニットに関し、参照管理テーブル２１８を参照し、データユニットが参照している圧縮データの情報を得る。データユニットが重複排除されたデータユニットである場合は、データユニットが参照している重複データの圧縮データの情報を得る。
【０１７２】
ステップ６１５において、周期処理論理２１６は、ページ管理テーブル２２２を参照し、ステップ６１３で特定した圧縮データが格納されている冗長グループ２５を特定する。
【０１７３】
ステップ６１７において、周期処理論理２１６は、データの複製が必要か否かの判定を行う。この判定は、図１５のステップ５６５における処理内容と同じである。複製要と判定した場合（ステップ６１８）、ステップ６１９の処理を行う。重複排除により、他系のストレージモジュールに格納されたデータを参照する他系入出力が必要となる場合であっても、自系ストレージユニットに同一データを格納することで、リード処理を高速化することができる。
【０１７４】
ステップ６１９において、周期処理論理２１６は、処理対象のデータユニットのデータを冗長グループ２５から読み出して、メモリに格納する。この処理は、図１５に示したステップ５６６からの処理と同じである。
【０１７５】
ステップ６２０において、周期処理論理２１６は、ステップ６１９で読み出したデータの複製を、処理対象のボリュームと同じストレージモジュール配下の冗長グループに格納する。この処理内容は、図１７に示したステップ６３１からの処理と同じである。
【０１７６】
ステップ６２１において、周期処理論理２１６は、選択したボリュームの全てのデータユニットに対して処理を行ったか否かを判定する。未処理のデータユニットがある場合は、ステップ６１２へ進み、次のデータユニットに対して処理を行う。そうでなければ、処理を終了する。
【０１７７】
重複排除を実施する契機としては、図１３に示したライト処理の契機の他に、ライト処理とは独立した契機に実施することが考えられる。以降、ライト処理の契機とは独立して実施する重複排除処理を、ポストプロセス重複排除処理と呼ぶ。
【０１７８】
図１８に示したデータの複製処理６２０により、重複排除により、他系のストレージモジュールに格納されたデータを参照する他系入出力が必要となる場合であっても、自系ストレージユニットに同一データを格納することで、リード処理を高速化することができる。
【０１７９】
＜非同期重複排除処理＞
図１９は、ポストプロセス重複排除論理の処理フローを説明する図である。ポストプロセス重複排除論理は、重複排除論理２１５の一部として実装される。ポストプロセス重複排除処理を前提とする場合、図１３のライト論理は、ステップ５０４以降の処理を実施せず、ステップ５０３でホストへ応答後、処理を終了するようにしてもよい。重複排除論理２１５におけるポストプロセス重複排除論理を、図１９を用いて説明する。
【０１８０】
ステップ７０１において、重複排除論理２１５は、処理対象とするボリューム２７の一つを選択する。
【０１８１】
ステップ７０２において、重複排除論理２１５は、ステップ７０１で選択したボリュームのデータユニットの一つを処理対象として選択する。重複排除論理２１５は、選択したボリュームの各データユニットを一つずつ選択し、以降の処理を行う。データユニットの選択方法としては、初回実行時にはボリュームの先頭のデータユニットを選択し、次回実行時には前回選択したデータユニットのアドレス昇順で次のデータユニットを選択するようにできる。
【０１８２】
ステップ７０３において、重複排除論理２１５は、ステップ７０２で選択したデータユニットに関し、参照管理テーブル２１８を参照し、データユニットが参照している圧縮データの情報を得る。
【０１８３】
ステップ７０４において、重複排除論理２１５は、ステップ７０２で選択したデータユニットが重複排除されたデータユニットか否かを判定する。重複排除されたデータユニットの場合は、ステップ７１１へ進み、重複排除済みでなければステップ７０５へ進む。
【０１８４】
ステップ７０５において、重複排除論理２１５は、処理対象のデータユニットのデータを冗長グループ２５から読み出して、メモリに格納する。この処理は、図１５に示したステップ５６６からの処理と同じである。
【０１８５】
ステップ７０６〜ステップ７１０の処理は、選択したデータユニットの重複排除を行なう処理である。この処理は、図１３に示したステップ５０４〜５０８と同等である。
【０１８６】
ステップ７１１１において、重複排除論理２１５は、選択したボリュームの全てのデータユニットに対して処理を行ったか否かを判定する。未処理のデータユニットがある場合は、ステップ７０２へ進み、次のデータユニットに対して処理を行う。そうでなければ、処理を終了する。尚、このステップ７１１の前に、図１５に示したステップ５６５のデータ複製処理を行えば、ポストプロセス重複排除論理を実施中に、他系入出力を行うことなく、自系入出力により高速にデータを読み出すことができる。
【０１８７】
ここまで、他系入出力が抑止されるように、データ配置を行う方法を示した。一実施形態では、複数のストレージモジュールに同一の重複データが格納されている場合、条件によって、意図的にデータユニットが他系入出力となるようにしてもよい。例えば、重複排除済のデータユニットで、アクセス頻度が低いものについては、あえて他系ストレージモジュールの重複データを参照するようにし、自系の重複データを削除することで、冗長グループの消費を削減することができる。
【０１８８】
本実施例では、複数のストレージモジュールをコントローラ間ネットワークで結合して一つのストレージシステムを構成するようにしたが、本発明は、複数のストレージがローカルエリアネットワーク（ＬＡＮ）、インターネット等他のネットワーク接続技術を用いて接続された計算機システムにも適用することができる。
【０１８９】
本実施例では、データを記憶媒体に記録するときに、データを圧縮して格納するが、本発明の他の実施形態では、データを圧縮せずに記録するようにしてもよい。
【符号の説明】
【０１９０】
１：ストレージシステム、２：ストレージモジュール、３：コントローラ間ネットワーク、４：計算機、２１：コントローラ、２２：記憶媒体、２４：バックエンド、２５：冗長グループ、２６：コントローラ間接続ポート、２７：ボリューム、２００：ＣＰＵ、２１０：メモリ、２７０：キャッシュ空間、２７１：圧縮キャッシュ空間。
【図１】
2020086477.tif 000003
【図２】
2020086477.tif 000004
【図３】
2020086477.tif 000005
【図４】
2020086477.tif 000006
【図５】
2020086477.tif 000007
【図６】
2020086477.tif 000008
【図７】
2020086477.tif 000009
【図８】
2020086477.tif 000010
【図９】
2020086477.tif 000011
【図１０】
2020086477.tif 000012
【図１１】
2020086477.tif 000013
【図１２】
2020086477.tif 000014
【図１３】
2020086477.tif 000015
【図１４】
2020086477.tif 000016
【図１５】
2020086477.tif 000017
【図１６】
2020086477.tif 000018
【図１７】
2020086477.tif 000019
【図１８】
2020086477.tif 000020
【図１９】
2020086477.tif 000021