(57)【要約】【課題】  本発明は、ストレージシステムにおいてデータを削減する技術に関する。【解決手段】  本発明の一実施例において、コンピュータは、メモリと、情報を管理するよう機能するコントローラであって、ストレージシステムからコンピュータに提供され、ストレージシステム内に格納される同一のデータを共有する少なくとも一組の複数の記憶領域を含む、一つ以上のボリュームの複数のアドレスに対応するコントローラと、を有する。前記コントローラは、前記記憶領域の情報を使用することにより、前記コンピュータの前記メモリに共有される同一データを格納することを管理するよう機能する。【選択図】図７
2014137814.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、
情報を管理するよう機能するコントローラであって、ストレージシステムからコンピュータに提供され、ストレージシステム内に格納される同一のデータを共有する少なくとも一組の複数の記憶領域を含む、一つ以上のボリュームの複数のアドレスに対応するコントローラと、を有するコンピュータであって、
前記コントローラは、前記記憶領域の情報を使用することにより、前記コンピュータの前記メモリに共有される同一データを格納することを管理するよう機能する
ことを特徴とする、コンピュータ。
【請求項２】
前記記憶領域の前記情報は、ボリュームの仮想ボリュームＩＤ（識別子）およびアドレスに関する情報と、前記仮想ボリュームＩＤとアドレスに対応するストレージシステム内の物理記憶領域のプールにおけるプールアドレスと、前記メモリのプールアドレスのデータを格納するプールアドレスに対応する前記コンピュータのメモリ内のメモリアドレスとを含む
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項３】
前記コントローラは、前記ストレージシステムからプールアドレスの情報を受信し、前記複数のプールアドレスの内のいずれか一つのプールアドレスの情報を使って前記プールアドレスのデータが既に前記コンピュータのメモリに格納されているかどうかを判断し、プールアドレスのデータがまだメモリに格納されていない場合、前記メモリのある領域を前記プールアドレスのデータを格納するために割り当てるよう機能する
ことを特徴とする、請求項２に記載のコンピュータ。
【請求項４】
前記コントローラは、前記仮想ボリュームＩＤおよびアドレスの更新か、前記仮想ボリュームＩＤおよびアドレスに対応するプールアドレスの更新か、前記プールアドレスに対応するメモリアドレスの更新のいずれかの結果として、前記情報を更新するよう機能する
ことを特徴とする、請求項２に記載のコンピュータ。
【請求項５】
前記ストレージシステムからリード対象領域のデータをリードする際に、前記リード対象領域が前記コンピュータのメモリにまだ格納されていない場合、前記コントローラは
前記対象領域の仮想ボリュームＩＤ（識別子）およびアドレスに対応する前記ストレージシステムのデータと前記ストレージシステム内の物理記憶領域のプールのプールアドレスを受信し、
前記メモリに領域を割り当て、前記受信したデータをメモリ内の割り当て領域に格納し、
前記仮想ボリュームＩＤとアドレスとプールアドレス間の対応関係の変更、および前記メモリの割り当て領域のメモリアドレスとプールアドレス間の対応関係の変更を反映するよう、前記情報を更新するよう機能する
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項６】
前記コントローラは、前記ストレージシステムのライト先領域にライトデータを書き込む際に、
前記ストレージシステムの前記ライト先領域に前記ライトデータを書き込んだ完了メッセージと、前記ライト先領域の仮想ボリュームＩＤ（識別子）とアドレスに対応する前記ストレージシステム内の物理記憶領域のプール内のプールアドレスとを受信し、
前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスがプールアドレステーブルに登録されているか、および前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されたかを判断し、ここで前記プールアドレステーブルはプールアドレスと仮想ボリュームＩＤとアドレス間の対応を示し、
前記受領プールアドレスが前記プールアドレステーブルに登録されており、かつ前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレスにおいて変更されていない場合、前記メモリが前記受領プールアドレスに割り当てられた領域を有するか否かを判断し、有する場合、前記メモリに前記ライトデータを格納し、有しない場合、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納し、
前記受領プールアドレスが前記プールアドレステーブルに登録されていないか、または前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されている場合、前記プールアドレステーブルを更新して前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスを登録し、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納するよう機能する
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項７】
前記コントローラが、仮想ボリュームＩＤ（識別子）とアドレスに対応する前記メモリ内の領域を解放する際に、
プールアドレスと仮想ボリュームＩＤとアドレス間の対応を示すプールアドレステーブル内に登録された、仮想ボリュームＩＤとアドレスと対応プールアドレスのレコードを削除し、
前記プールアドレスが前記メモリアドレスにあるメモリの領域内のプールアドレスへデータが格納されることを示す対応メモリアドレスを有し、かつ前記プールアドレスに対応する他の仮想ボリュームＩＤおよびアドレスがない場合、前記メモリアドレスにあるメモリの領域を解放し、メモリアドレスの領域の解放を反映するよう、前記プールアドレスと前記メモリアドレス間の対応に関する情報を更新するよう機能する
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項８】
前記コントローラが、ライトバックモードに基づいて、前記ストレージシステム内の仮想ボリュームＩＤ（識別子）とアドレスであるライト対象アドレスを有するライト先領域にデータを書き込む際に、
前記ストレージシステムにデータを書き込むためのライト対象アドレスのライトバック値が、ライトデータが前記メモリ内の割り当て領域にキャッシュされているが前記ストレージシステムにはまだ書き込まれていないことを示すＯＮとなっている場合、前記ライトデータを前記コンピュータのメモリ内の割り当て領域に書き込み、
前記ストレージシステムにデータを書き込むための前記ライト対象アドレスのライトバック値がＯＮでない場合、かつ前記ライト対象アドレスに対応するプールアドレスに対応する前記メモリにメモリアドレスがない場合または前記プールアドレスが前記ストレージシステム内の複数の仮想ボリュームアドレスに対応する場合、前記メモリ内に領域を割り当て、前記プールアドレスと前記ライト対象アドレス間の対応に関する情報を更新し、前記有効プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリ内の割り当て領域に格納し、
前記ストレージシステムにデータを書き込むための前記ライト対象アドレスのライトバック値がＯＮでない場合、かつ前記ライト対象アドレスに対応するプールアドレスに対応するメモリ内にメモリアドレスがある場合、かつ前記プールアドレスが前記ストレージシステム内の複数の仮想ボリュームアドレスに対応しない場合、前記ライトデータを前記メモリ内の割り当て領域に格納し、
非同期的に前記ストレージシステム内のライト対象アドレスのメモリにライトデータを書き込むよう機能する
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項９】
前記コンピュータは、前記ストレージシステムの仮想ボリュームを第二コンピュータと共有する第一コンピュータであって、共有仮想ボリューム内のデータを第一メモリである前記第一コンピュータのメモリ内のメモリアドレスに格納し、かつそのデータを前記第二コンピュータの第二メモリにも格納し、
前記共有仮想ボリューム内のデータが前記第二コンピュータの前記メモリ内で更新された場合、前記第二コンピュータは前記第一コンピュータに対して無効化メッセージを送り、前記第一コンピュータの前記コントローラは、前記第一メモリ内の前記メモリアドレスからデータを削除し、前記メモリアドレスと前記共有仮想ボリュームの仮想ボリュームＩＤ（識別子）とアドレス間の対応を削除するよう機能する
ことを特徴とする、請求項１に記載のコンピュータ。
【請求項１０】
ストレージシステムおよび該ストレージシステムに格納されるデータを格納するメモリを有するコンピュータを含むシステムにおける該ストレージシステムであって、該ストレージシステム内の複数の記憶領域によって共有されるデータと同じデータを有し、
前記ストレージシステムは、
データを格納するコンピュータに一つ以上のボリュームを提供するストレージ装置であって、ここで該一つ以上のボリュームは、前記ストレージ装置に格納される同一のデータを共有する複数の記憶領域の少なくとも一つの組を含む、ストレージ装置と、
前記ストレージ装置内のボリュームの仮想ボリュームＩＤ（識別子）とアドレスを特定するコンピュータからのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コマンドを受け取り、前記仮想ボリュームＩＤとアドレスに対応する前記ストレージ装置の物理記憶領域にあるプール内のプールアドレスを算出し、前記仮想ボリュームＩＤとアドレスに対応する前記プールアドレスを前記コンピュータに送信するよう機能する、ストレージコントローラとを有する
ことを特徴とする、ストレージシステム。
【請求項１１】
前記Ｉ／Ｏコマンドは、ライトデータを特定された仮想ボリュームＩＤとアドレスとを有するライト先領域に書き込むライトコマンドであり、前記ストレージコントローラは、
プール領域が前記特定された仮想ボリュームＩＤとアドレスに割り当てられておらず、または算出されたプールアドレスが複数の記憶領域によって共有されている場合、ライトデータのハッシュ値を算出し、ストレージシステム内に該ハッシュ値を有する同一データが格納されているかどうか判断し、該ハッシュ値を有する同一データが既にストレージシステムに格納されている場合、該ハッシュ値を有する同一データのプールアドレスにライトデータのプールアドレスを更新し、同一データがストレージシステムに格納されていない場合、プール内の割り当てプールアドレスを有するプール内に領域を割り当て、前記割り当てプールアドレスにライトデータのプールアドレスを更新し、前記特定された仮想ボリュームＩＤとアドレスに対応する更新プールアドレスをコンピュータに送信し、
プール領域が前記特定された仮想ボリュームＩＤとアドレスに割り当てられ、かつ算出されたプールアドレスが複数の仮想ボリュームアドレスによって共有されない場合、前記ライトデータを算出されたプールアドレスに格納し、前記特定された仮想ボリュームＩＤとアドレスに対応する算出されたプールアドレスをコンピュータに送信するよう機能する
ことを特徴とする請求項１０に記載のストレージシステム。
【請求項１２】
前記ストレージコントローラは、前記ストレージ装置内の仮想ボリュームＩＤとアドレスに対応する前記メモリ内の領域を解放する領域解放コマンドを受け取った際に、
前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレスに対応するプールアドレスを算出し、
前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応する場合、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除し、
前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応しない場合、前記算出されたプールアドレスに対応するプール領域を解放し、前記算出されたプールアドレス内のデータのハッシュ値と算出されたプールアドレスとの対応関係を削除し、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除するよう機能する
ことを特徴とする、請求項１０に記載のストレージシステム。
【請求項１３】
前記Ｉ／Ｏコマンドは、特定された仮想ボリュームＩＤとアドレスとを有するリード対象領域からデータを読み出すためのリードコマンドであり、前記ストレージコントローラは、
データ読み出しに先立って、前記ストレージ装置内の前記特定された仮想ボリュームＩＤとアドレスに対応するプールアドレスを得るためのプールアドレス取得コマンドを前記コンピュータから受け取った際、
前記特定された仮想ボリュームＩＤとアドレスと、前記特定された仮想ボリュームＩＤとアドレス内のデータのハッシュ値との間の対応関係と、前記ハッシュ値とプールアドレス間の対応関係に基づいて、前記プールアドレス取得コマンドの前記特定された仮想ボリュームＩＤとアドレスのプールアドレスを算出し、
前記算出されたプールアドレスをコンピュータに送信するよう機能する
ことを特徴とする請求項１０に記載のストレージシステム。
【請求項１４】
データを格納するための一つ以上のボリュームを提供するストレージ装置と、ストレージコントローラとを有するストレージシステムと、
メモリと、情報を管理するよう機能するコントローラを有するコンピュータであって、該コントローラは、ストレージシステムからコンピュータに提供され、ストレージシステム内に格納される同一のデータを共有する少なくとも一組の複数の記憶領域を含む、一つ以上のボリュームの複数のアドレスに対応し、
前記コントローラは、前記記憶領域の情報を使用することにより、前記コンピュータの前記メモリに共有される同一データを格納することを管理するよう機能する
ことを特徴とする、システム。
【請求項１５】
前記記憶領域の前記情報は、ボリュームの仮想ボリュームＩＤ（識別子）およびアドレスに関する情報と、前記仮想ボリュームＩＤとアドレスに対応するストレージシステム内の物理記憶領域のプールにおけるプールアドレスと、前記メモリのプールアドレスのデータを格納するプールアドレスに対応する前記コンピュータのメモリ内のメモリアドレスを含む
ことを特徴とする、請求項１４に記載のシステム。
【請求項１６】
前記ストレージコントローラは、前記ストレージ装置内のボリュームの仮想ボリュームＩＤ（識別子）とアドレスを特定するコンピュータからのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コマンドを受け取り、前記仮想ボリュームＩＤとアドレスに対応する前記ストレージ装置の物理記憶領域にあるプール内のプールアドレスを算出し、前記仮想ボリュームＩＤとアドレスに対応する前記プールアドレスを前記コンピュータに送信するよう機能す、
前記コントローラは、前記プールアドレスのデータが既にコンピュータのメモリに格納されているかを判断し、前記プールアドレスのデータが前記メモリにまだ格納されていない場合、前記プールアドレスのデータを格納するために前記メモリ内の領域を割り当てるよう機能する
ことを特徴とする、請求項１５に記載のシステム。
【請求項１７】
前記ストレージコントローラは、
特定された仮想ボリュームＩＤ（識別子）とアドレスを有するライト先領域にライトデータを書き込むよう指示するライトコマンドをコンピュータから受け取り、
プール領域が特定された仮想ボリュームＩＤとアドレスに割り当てられていないか、または算出されたプールアドレスが複数の記憶領域に共有されている場合、ライトデータのハッシュ値を算出し、前記ハッシュ値を有する同一データが前記ストレージシステムに存在するかどうかを判断し、前記ハッシュ値を有する同一のデータが既にストレージシステムに格納されている場合、前記ハッシュ値を有する同一データのプールアドレスに前記ライトデータのプールアドレスを更新し、前記ストレージシステムに同一のデータが格納されていない場合、割り当てプールアドレスを有するプールに領域を割り当て、前記割り当てられたプールアドレスに前記ライトデータのプールアドレスを更新し、前記特定された仮想ボリュームＩＤとアドレスに対応する更新プールアドレスをコンピュータに送り、
プール領域が前記特定された仮想ボリュームＩＤとアドレスに割り当てられ、前記算出されたプールアドレスが複数の仮想ボリュームアドレスによって共有されない場合、前記ライトデータを算出されたプールアドレスに格納し、前記特定された仮想ボリュームＩＤとアドレスに対応する算出プールアドレスをコンピュータに送るよう機能する
ことを特徴とする、請求項１４に記載のシステム。
【請求項１８】
前記コントローラは、
前記ストレージシステムから、前記ストレージシステムの前記ライト先領域に前記ライトデータをライトした完了メッセージと、前記プールアドレスを受領し、
前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスがプールアドレステーブルに登録されているか、および前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されたかを判断し、ここで前記プールアドレステーブルはプールアドレスと仮想ボリュームＩＤとアドレス間の対応を示し、
前記受領プールアドレスが前記プールアドレステーブルに登録されており、かつ前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレスにおいて変更されていない場合、前記メモリが前記受領プールアドレスに割り当てられた領域を有するかを判断し、有する場合、前記メモリに前記ライトデータを格納し、有しない場合、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納し、
前記受領プールアドレスが前記プールアドレステーブルに登録されていないか、または前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されている場合、前記プールアドレステーブルを更新して前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスを登録し、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納するよう機能する
ことを特徴とする、請求項１７に記載のシステム。
【請求項１９】
前記ストレージコントローラは、前記ストレージ装置内の仮想ボリュームＩＤ（識別子）とアドレスに対応する前記メモリ内の領域を解放する領域解放コマンドを受け取った際に、
前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレスに対応するプールアドレスを算出し、
前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応する場合、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除し、
前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応しない場合、前記算出されたプールアドレスに対応するプール領域を解放し、前記算出されたプールアドレス内のデータのハッシュ値と算出されたプールアドレスとの対応関係を削除し、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除するよう機能する
ことを特徴とする、請求項１４に記載のシステム。
【請求項２０】
前記コントローラは、
前記ストレージシステムから算出されたプールアドレスを受け取り、
プールアドレスと仮想ボリュームＩＤとアドレス間の対応を示すプールアドレステーブル内に登録された、仮想ボリュームＩＤとアドレスと対応プールアドレスのレコードを削除し、
前記プールアドレスが前記メモリアドレスにあるメモリの領域内のプールアドレスへデータが格納されることを示す対応するメモリアドレスを有し、かつ前記プールアドレスに対応する他の仮想ボリュームＩＤおよびアドレスがない場合、前記メモリアドレスにあるメモリの領域を解放し、メモリアドレスの領域の解放を反映するよう、前記プールアドレスと前記メモリアドレス間の対応に関する情報を更新するよう機能する
ことを特徴とする、請求項１９に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
０００１    本発明はストレージシステムに関し、より詳細には、ストレージシステムにおけるデータ削減に関する。
【背景技術】
【０００２】
０００２    特許文献１には、サーバに接続されたストレージシステムに格納されたデータ用のキャッシュとしてサーバに配設されたＳＳＤ（ソリッドステートドライブ）を使用することに関する遠隔ストレージキャッシュ技術が開示される。特許文献２には、ストレージシステム内のデータ量を削減するための重複排除技術が開示される。開示されるデータ削減技術によると、ストレージシステムはサーバに対して仮想記憶領域（仮想ボリューム、略してＶＶＯＬ）を提供することができる。ストレージシステムは、ボリュームの部分的領域に対応する物理記憶領域のアドレスを管理する。ボリュームの二つ以上の部分的領域に格納されるデータが同一である場合、それらの部分的な領域のアドレスは同一の物理領域を指し示す。このようにして、物理領域の容量を減らすことができる。この技術は重複排除と呼ばれる。異なるボリュームの二つ以上の部分的領域は、同一の物理領域を共有することができる。
【０００３】
０００３    一般的に、ストレージシステムは複数のサーバによって共有される。ストレージシステムにおいて重複排除を実行することにより、複数のサーバに格納されるデータも重複排除することができる。その結果、効率向上を図ることができる。重複排除機能に加えて、スナップショット機能も同様に一つの物理領域を共有する。
【０００４】
０００４    ストレージシステムが、重複排除やスナップショットといったデータ削減機能を有する場合、サーバはストレージシステム内のデータ共有状態を認識することができない。そのため、サーバが同一物理領域を指し示す二つの異なる部分的領域をリードする場合、同一データがサーバに対して二度転送されることになる。さらにサーバから見ると、転送されたデータは異なるアドレスのデータであるため、二つの同一データがサーバ内のフラッシュメモリに格納されることになる。サーバにおけるネットワークとフラッシュメモリの利用について説明する。
【０００５】
０００５  サーバがデータ削減機能を有する場合、二つ以上のサーバに格納される同一のデータは削減されない。例えば、ＯＳデータは、そのほとんどが同一であるにもかかわらず、削減することができない。ストレージシステムとサーバの双方がデータ削減機能を有する構成も可能である。しかしながら、データ削減処理のオーバヘッドも二倍となる。そのため、ストレージシステムとサーバの間のデータ転送量を減らすことはできなかった。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許出願第２０１１／０２３１６１３号明細書
【特許文献２】米国特許第７，８７０，１０５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
０００６    本発明の各実施例は、ストレージの容量とネットワークの利用効率を向上することを目的とした、ストレージシステムにおけるデータ削減機能を提案するものである。第一実施例は、ストレージシステム内で削減されたデータを直接サーバのフラッシュメモリに格納する方法に関する。特に、ライト処理におけるライトスルーモードについて説明する。スルーモードによると、ライトデータはオペレーティングシステムのライト処理と同期してストレージシステムに書き込まれる。第二実施例では、ライト処理のライトバックモードについて説明する。ライトバックモードによると、ライトデータはオペレーティングシステムのライト処理とは非同期に、ストレージシステムに書き込まれる。第三実施例では、これらの技術を、複数のサーバを有する構成や外部ストレージを含む構成に適用することについて説明する。
【０００８】
０００７    本発明の態様によると、コンピュータであって、メモリと、情報を管理するよう機能するコントローラであって、ストレージシステムからコンピュータに提供され、ストレージシステム内に格納される同一のデータを共有する少なくとも一組の複数の記憶領域を含む、一つ以上のボリュームの複数のアドレスに対応するコントローラと、を有するものが提供される。前記コントローラは、前記記憶領域の情報を使用することにより、前記コンピュータの前記メモリに共有される同一データを格納することを管理するよう機能する。
【０００９】
０００８  いくつかの実施例において、前記記憶領域の前記情報は、ボリュームの仮想ボリュームＩＤ（識別子）およびアドレスに関する情報と、前記仮想ボリュームＩＤとアドレスに対応するストレージシステム内の物理記憶領域のプールにおけるプールアドレスと、前記メモリのプールアドレスのデータを格納するプールアドレスに対応する前記コンピュータのメモリ内のメモリアドレスを含む。前記コントローラは、ストレージシステムからプールアドレスの情報を受信し、前記複数のプールアドレスの内のいずれか一つのプールアドレスの情報を使って、前記プールアドレスのデータが既に前記コンピュータのメモリに格納されているかどうかを判断し、プールアドレスのデータがまだメモリに格納されていない場合、前記メモリのある領域を前記プールアドレスのデータを格納するために割り当てるよう機能する。前記コントローラは、前記仮想ボリュームＩＤおよびアドレスの更新か、前記仮想ボリュームＩＤおよびアドレスに対応するプールアドレスの更新か、前記プールアドレスに対応するメモリアドレスの更新のいずれかの結果として、前記情報を更新するよう機能する。
【００１０】
０００９    ある実施例において、前記ストレージシステムからリード対象領域のデータをリードする際に、前記リード対象領域が前記コンピュータのメモリにまだ格納されていない場合、前記コントローラは前記対象領域の仮想ボリュームＩＤ（識別子）およびアドレスに対応する前記ストレージシステムのデータと前記ストレージシステム内の物理記憶領域のプールのプールアドレスを受信し、前記メモリに領域を割り当て、前記受信したデータをメモリ内の割り当て領域に格納し、前記仮想ボリュームＩＤとアドレスとプールアドレス間の対応関係の変更、および前記メモリの割り当て領域のメモリアドレスとプールアドレス間の対応関係の変更を反映するよう、前記情報を更新するよう機能する。
【００１１】
００１０  ある実施例において、前記コントローラは、前記ストレージシステムのライト先領域にライトデータを書き込む際に、前記ストレージシステムの前記ライト先領域に前記ライトデータを書き込んだ完了メッセージと、前記ライト先領域の仮想ボリュームＩＤ（識別子）とアドレスに対応する前記ストレージシステム内の物理記憶領域のプール内のプールアドレスとを受領し、前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスがプールアドレステーブルに登録されているか、および前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されたかを判断し、ここで前記プールアドレステーブルはプールアドレスと仮想ボリュームＩＤとアドレス間の対応を示し、前記受領プールアドレスが前記プールアドレステーブルに登録されており、かつ前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレスにおいて変更されていない場合、前記メモリが前記受領プールアドレスに割り当てられた領域を有するか否かを判断し、有する場合、前記メモリに前記ライトデータを格納し、有しない場合、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納し、前記受領プールアドレスが前記プールアドレステーブルに登録されていないか、または前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスが前記プールアドレステーブルにおいて変更されている場合、前記プールアドレステーブルを更新して前記ライト先領域の前記仮想ボリュームＩＤとアドレスに対応する受領プールアドレスを登録し、前記メモリ内に領域を割り当て、前記受領プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリの割り当て領域に格納するよう機能する。
【００１２】
００１１  ある実施例において、前記コントローラが、仮想ボリュームＩＤ（識別子）とアドレスに対応する前記メモリ内の領域を解放する際に、プールアドレスと仮想ボリュームＩＤとアドレス間の対応を示すプールアドレステーブル内に登録された、仮想ボリュームＩＤとアドレスと対応プールアドレスのレコードを削除し、前記プールアドレスが前記メモリアドレスにあるメモリの領域内のプールアドレスへデータが格納されることを示す対応するメモリアドレスを有し、かつ前記プールアドレスに対応する他の仮想ボリュームＩＤおよびアドレスがない場合、前記メモリアドレスにあるメモリの領域を解放し、メモリアドレスの領域の解放を反映するよう、前記プールアドレスと前記メモリアドレス間の対応に関する情報を更新するよう機能する。
【００１３】
００１２    いくつかの実施例において、前記コントローラが、ライトバックモードに基づいて、前記ストレージシステム内の仮想ボリュームＩＤ（識別子）とアドレスであるライト対象アドレスを有するライト先領域にデータを書き込む際に、前記ストレージシステムにデータを書き込むためのライト対象アドレスのライトバック値が、ライトデータが前記メモリ内の割り当て領域にキャッシュされているが前記ストレージシステムにはまだ書き込まれていないことを示すＯＮとなっている場合、前記ライトデータを前記コンピュータのメモリ内の割り当て領域に書き込み、前記ストレージシステムにデータを書き込むための前記ライト対象アドレスのライトバック値がＯＮでない場合、かつ前記ライト対象アドレスに対応するプールアドレスに対応する前記メモリにメモリアドレスがない場合または前記プールアドレスが前記ストレージシステム内の複数の仮想ボリュームアドレスに対応する場合、前記メモリ内に領域を割り当て、前記プールアドレスと前記ライト対象アドレス間の対応に関する情報を更新し、前記有効プールアドレスと前記メモリ内の割り当て領域のメモリアドレス間の対応に関する情報を更新し、前記ライトデータを前記メモリ内の割り当て領域に格納し、前記ストレージシステムにデータを書き込むための前記ライト対象アドレスのライトバック値がＯＮでない場合、かつ前記ライト対象アドレスに対応するプールアドレスに対応するメモリ内にメモリアドレスがある場合、かつ前記プールアドレスが前記ストレージシステム内の複数の仮想ボリュームアドレスに対応しない場合、前記ライトデータを前記メモリ内の割り当て領域に格納し、非同期的に前記ストレージシステム内のライト対象アドレスのメモリにライトデータを書き込むよう機能する。
【００１４】
００１３  ある実施例において、前記コンピュータは、前記ストレージシステムの仮想ボリュームを第二コンピュータと共有する第一コンピュータであって、共有仮想ボリューム内のデータを第一メモリである前記第一コンピュータのメモリ内のメモリアドレスに格納し、かつそのデータを前記第二コンピュータの第二メモリにも格納する。前記共有仮想ボリューム内のデータが前記第二コンピュータの前記メモリ内で更新された場合、前記第二コンピュータは前記第一コンピュータに対して無効化メッセージを送り、前記第一コンピュータの前記コントローラは、前記第一メモリ内の前記メモリアドレスからデータを削除し、前記メモリアドレスと前記共有仮想ボリュームの前記仮想ボリュームＩＤ（識別子）とアドレス間の対応を削除するよう機能する。
【００１５】
００１４    本発明の別の態様によると、ストレージシステムおよびストレージシステムに格納されるデータを格納するメモリを有するコンピュータを含むシステムにおけるストレージシステムであって、ストレージシステム内の複数の記憶領域によって共有されるデータと同じデータを有する。前記ストレージシステムは、データを格納するコンピュータに一つ以上のボリュームを提供するストレージ装置であって、ここで一つ以上のボリュームは、前記ストレージ装置に格納される同一のデータを共有する複数の記憶領域の少なくとも一つの組を含む、ストレージ装置と、前記ストレージ装置内のボリュームの仮想ボリュームＩＤ（識別子）とアドレスを特定するコンピュータからのＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）コマンドを受け取り、前記仮想ボリュームＩＤとアドレスに対応する前記ストレージ装置の物理記憶領域にあるプール内のプールアドレスを算出し、前記仮想ボリュームＩＤとアドレスに対応する前記プールアドレスを前記コンピュータに送信するよう機能する、ストレージコントローラとを有する。
【００１６】
００１５    ある実施例において、前記Ｉ／Ｏコマンドは、ライトデータを特定された仮想ボリュームＩＤとアドレスとを有するライト先領域に書き込むライトコマンドである。前記ストレージコントローラは、プール領域が前記特定された仮想ボリュームＩＤとアドレスに割り当てられておらず、または算出されたプールアドレスが複数の記憶領域によって共有されている場合、ライトデータのハッシュ値を算出し、ストレージシステム内にハッシュ値を有する同一データが格納されているかどうか判断し、ハッシュ値を有する同一データが既にストレージシステムに格納されている場合、ハッシュ値を有する同一データのプールアドレスにライトデータのプールアドレスを更新し、同一データがストレージシステムに格納されていない場合、プール内の割り当てプールアドレスを有するプール内に領域を割り当て、前記割り当てプールアドレスにライトデータのプールアドレスを更新し、前記特定された仮想ボリュームＩＤとアドレスに対応する更新プールアドレスをコンピュータに送信し、プール領域が前記特定された仮想ボリュームＩＤとアドレスに割り当てられ、かつ算出されたプールアドレスが複数の仮想ボリュームアドレスによって共有されない場合、前記ライトデータを算出されたプールアドレスに格納し、前記特定された仮想ボリュームＩＤとアドレスに対応する算出されたプールアドレスをコンピュータに送信するよう機能する。
【００１７】
００１６    ある実施例において、前記ストレージコントローラは、前記ストレージ装置内の仮想ボリュームＩＤとアドレスに対応する前記メモリ内の領域を解放する領域解放コマンドを受け取った際に、前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレスに対応するプールアドレスを算出し、前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応する場合、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除し、前記算出されたプールアドレスが複数の仮想ボリュームアドレスに対応しない場合、前記算出されたプールアドレスに対応するプール領域を解放し、前記算出されたプールアドレス内のデータのハッシュ値と算出されたプールアドレスとの対応関係を削除し、前記仮想ボリュームＩＤとアドレス内のデータのハッシュ値と前記解放されるメモリ内の領域に対応する仮想ボリュームＩＤとアドレス間の対応関係を削除するよう機能する。
【００１８】
００１７    ある実施例において、前記Ｉ／Ｏコマンドは、特定された仮想ボリュームＩＤとアドレスとを有するリード対象領域からデータを読み出すためのリードコマンドであり、前記ストレージコントローラは、データ読み出しに先だって、前記ストレージ装置内の前記特定された仮想ボリュームＩＤとアドレスに対応するプールアドレスを得るためのプールアドレス取得コマンドを前記コンピュータから受け取った際、前記特定された仮想ボリュームＩＤとアドレスと、前記特定された仮想ボリュームＩＤとアドレス内のデータのハッシュ値との間の対応関係と、前記ハッシュ値とプールアドレス間の対応関係に基づいて、前記プールアドレス取得コマンドの前記特定された仮想ボリュームＩＤとアドレスのプールアドレスを算出し、前記算出されたプールアドレスをコンピュータに送信するよう機能する。
【００１９】
００１８    本発明の別の態様によると、データを格納するための一つ以上のボリュームを提供するストレージ装置を有するストレージシステムと、ストレージコントローラを有する、システムと、メモリと、情報を管理するよう機能するコントローラを有するコンピュータであって、コントローラは、ストレージシステムからコンピュータに提供され、ストレージシステム内に格納される同一のデータを共有する少なくとも一組の複数の記憶領域を含む、一つ以上のボリュームの複数のアドレスに対応するものが提供される。前記コントローラは、前記記憶領域の情報を使用することにより、前記コンピュータの前記メモリに共有される同一データを格納することを管理するよう機能する。
【発明の効果】
【００２０】
０００６    本発明によれば、提案するストレージシステムにおけるデータ削減機能を用いてストレージの容量とネットワークの利用効率を向上することができる。
【００２１】
００１９    上述した本発明の特徴および効果、およびその他の特徴および効果は、後に述べる本発明の実施形態の詳細な説明から、当業者にとって明らかとなろう。
【図面の簡単な説明】
【００２２】
【図１】００２０    本発明の第一実施例に係るサーバに着目した、コンピュータシステムを示す図である。
【図２】００２１    本発明の第一実施例に係るストレージシステムに着目した、コンピュータシステムを示す図である。
【図３】００２２    本発明の第一実施例に係るストレージプログラムの例を示す詳細なブロック図である。
【図４】００２３    本発明の第一実施例に係るストレージ制御情報の例を示す詳細なブロック図である。
【図５】００２４    本発明の第一実施例に係るサーバプログラムの例を示す詳細なブロック図である。
【図６】００２５    本発明の第一実施例に係るサーバ制御情報の例を示す詳細なブロック図である。
【図７】００２６    本発明の第一実施例に係るストレージシステムにおけるデータ削減の例を示す概念図である。
【図８】００２７    本発明のストレージシステムにおいて管理されるＶＶＯＬハッシュテーブルの例を示す図である。
【図９】００２８    ストレージシステムにおいて管理されるデータアドレステーブルの例を示す図である。
【図１０】００２９    本発明の第一実施例に係るサーバにおけるプールアドレステーブルの例を示す図である。
【図１１】００３０    本発明の第一実施例に係るサーバのサーバキャッシュディレクトリの例を示す図である。
【図１２】００３１    リード処理の例を示すフロー図である。
【図１３】００３２    ライト処理の例を示すフロー図である。
【図１４】００３３    図１３のストレージライトプログラムのステップＳ２１３からコールされるプール割り当てプログラムの処理の例を示すフロー図である。
【図１５】００３４    プール領域解放処理の例を示すフロー図である。
【図１６】００３５    プールアドレスを得るための処理の例を示すフロー図である。
【図１７】００３６    第二実施例に係るサーバキャッシュディレクトリの例を示す図である。
【図１８】００３７    第二実施例に係るプールアドレステーブルの例を示す図である。
【図１９】００３８    第二実施例に係るサーバにおける、ライトバックモードを有するライト処理の例を示すフロー図である。
【図２０】００３９    非同期的にストレージシステムのフラッシュメモリにデータを書き込む処理の例を示すフロー図である。
【図２１】００４０    複数のサーバによって共有されるＶＶＯＬの例を示す概念図である。
【図２２】００４１    データ無効化処理の例を示すフロー図である。
【図２３】００４２    データ削減機能を有する外部ストレージシステムと、外部ストレージシステムに接続される一つ以上のデータ削減機能を有さないストレージシステムを含む構成例を示す図である。
【図２４】００４３    データ削減機能を有する外部ストレージシステムと、外部ストレージシステムに格納されるデータをキャッシュする記憶領域をそれぞれ有する複数のサーバとを有する構成例を示す図である。
【図２５】００４４    フラッシュメモリを有するキャッシュ装置を含む構成の例を示す図である。
【図２６】００４５    データ削減機能を有するストレージ媒体と、ストレージ媒体に格納されるデータをキャッシュするための記憶領域をそれぞれ有する複数のサーバを有する構成例を示す図である。
【発明を実施するための形態】
【００２３】
００４６    以下に記す本発明についての詳細な説明では、開示の一部を成すとともに本発明を実施する例示的な実施形態として示される添付図面を参照するが、本発明は図面の内容に限定されるものではない。図面において、類似する数字は複数の図面においてほぼ同様の構成要素を示すものである。また、留意すべき点として、詳細な説明では、以下の説明および図面に示される通り様々な実施の形態を示すが、本発明は本明細書において説明されかつ示される実施形態に限定されず、当業者が知っているであろう又は知るようになり得るその他の実施形態をも含む。本明細書における「一実施形態」、「本実施形態」、又は「上述の実施形態」の文言は、ある実施形態に関連して説明される特定の特性、構造又は特徴が、本発明の少なくとも一実施形態に含まれることを意味し、本明細書の様々な箇所において上記文言が使用されていても、必ずしもすべてが同一の実施形態を言及するものではない。さらに、以下の詳細な説明において、本発明の理解を深めるために多くの具体的かつ詳細な記載がなされている。ただし、本発明を実施するためにこれらの具体的かつ詳細な内容すべてが必要なわけではないことは、当業者にとって明らかであろう。状況によっては、曖昧な記載を避けるために、周知の構造、材料、回路、プロセス及びインタフェースの詳細については説明しておらず、かつ／又はブロック図において図示していない場合もある。
【００２４】
００４７    さらに、以下の詳細な説明の一部は、コンピュータ内のオペレーションのアルゴリズムおよび記号表現で示されている。これらのアルゴリズム記述及び記号表現は、データ処理分野の当業者がその新しいアイディアの本質を最も効果的に他の当業者に伝えるために使用する手段である。アルゴリズムとは、望ましい最終状態又は結果へと導く一連の定義されたステップである。本発明において、実施されるステップは、具体的な結果を達成するための相応量の物理的操作を必要とする。必ずしもそうとは限らないが、通常はかかる数量は、格納、転送、組み合わせ、比較その他の操作が可能な電気もしくは磁気信号又は命令の形態を取る。主に一般的な使用のために、上記の信号をビット、値、記号、文字、用語、数字、命令等として言及することがある。但し、上記の及び類似の用語すべてが、適切な物理数量に関連付けられるものであり、かつ当該数量に適用される単に便利なラベルに過ぎないことに留意すべきである。別段の記載がない限り、以下の解説から明らかなように、説明全体を通して、「処理」、「演算」、「計算」、「判断」、「表示」等の用語を用いた説明は、コンピュータシステムのレジスタ及びメモリもしくはレジスタ又はその他の情報記憶、送信もしくは表示装置の中の物理的（電気的）数量として同等に表されるその他のデータに操作しかつ変換する、コンピュータシステム又はその他の情報処理装置の動作またはプロセスを含み得る。
【００２５】
００４８    本発明は、本明細書における操作を実施する装置にも関する。この装置は、必要とされる目的のために特別に構築してもよく、又は一つ以上のコンピュータプログラムによって選択的に起動又は再構築された一つ以上の汎用コンピュータを含み得る。当該コンピュータプログラムは、光ディスク、磁気ディスク、読取専用記憶措置、ランダムアクセスメモリ、ソリッドステート装置及びドライブ、又は電子情報の格納に適したその他の種類の媒体等（但し、これらに限定されない）のコンピュータ読取可能記憶媒体に格納され得る。本明細書において提示するアルゴリズム及び態様は、特定のコンピュータ又はその他の装置とは本質的に関係していない。様々な汎用システムを、本明細書の教示に従ってプログラム及びモジュールと共に使用してもよく、又は望ましい方法を実施するためにより特化した装置を構築した方がよい場合も有り得る。さらに本発明は、特定のプログラミング言語を参照して説明されてはいない。当然のことながら、本明細書に記載されている通りに本発明の教示内容を実施するために、様々なプログラミング言語を使用してもよい。プログラミング言語の命令は、一つ以上の処理装置、例えば中央処理装置（ＣＰＵ）、プロセッサ、又はコントローラによって実行され得る。
【００２６】
００４９    下記に詳細に説明する本発明の各実施例は、ストレージシステムにおけるデータ削減のための装置、方法およびコンピュータプログラムを提供するものである。
【００２７】
００５０    第一実施例
【００２８】
００５１    図１は、本発明の第一実施例にかかるサーバに着目した、コンピュータシステムを示す図である。本実施例のコンピュータシステムは、サーバ１００およびストレージシステム２００を有する。サーバ１００は、ＯＳ（オペレーティングシステム）１０１、プロセッサ１０２、ＤＲＡＭ１０３、サーバ制御情報１０４、アプリケーション１０５、サーバプログラム１０６、フラッシュメモリ１０７およびストレージＩ／Ｆ１０８を有する。サーバ１００はＯＳおよびデータベースシステム等のアプリケーションを実行することにより、サービスを提供する。データベースシステムによって処理されるデータはストレージシステム２００に格納される。データはサーバ１００のフラッシュメモリにキャッシュされうる。サーバ１００はネットワーク１１０を介してストレージシステム２００に接続される。
【００２９】
００５２    図２は、第一実施例に係るストレージシステムに着目した、コンピュータシステムの図である。ストレージシステム２００は、キャッシュユニット２０１、ストレージＩ／Ｆ２０２、プロセッサ２０３、ディスクＩ／Ｆ２０４、ボリューム２０５、ＨＤＤ２０６、ストレージ制御情報２０７、およびストレージプログラム２０８を有する。ストレージＩ／Ｆ２０２はネットワーク１１０を介してサーバ１００に接続され、サーバ１００との通信を行う。プロセッサ２０３はストレージプログラム２０８に格納された多種のプログラムを実行することにより多種の処理を行うことができる。さらに、プロセッサ２０３は、ストレージ制御情報２０７に格納された多種の情報を使うことにより、多種の処理を行うことができる。ディスクＩ／Ｆ２０４はバスを介して、物理ストレージデバイスの例である少なくとも一つのＨＤＤ２０６に接続される。データを管理するよう構成されたボリューム２０５は、例えばＨＤＤ２０６の少なくも一つの記憶領域を使って、構成される。物理ストレージ装置はＨＤＤ２０６に限定されることなく、例えばＳＳＤ（ソリッドステートドライブ）またはＤＶＤなどであってもよい。少なくとも一つのＨＤＤ２０６はパリティグループの単位にまとめられ、例えばＲＡＩＤ（Redundant  Arrays  of  Independent  Disks）等の信頼性の高い技術を採用することができる。ストレージ制御情報２０７は、多種のプログラムによって使用される多種の情報を格納する。ストレージプログラム２０８は、リード処理プログラム、ライト処理プログラム等の多種のプログラムを格納する。キャッシュユニット２０１はパフォーマンスブーストのために、ＨＤＤ２０６に格納されたデータをキャッシュする。
【００３０】
００５３    図３は、第一実施例に係るストレージプログラム２０８の例を示す詳細なブロック図である。ストレージプログラム２０８は、ストレージリードプログラム、ストレージライトプログラム、プール割り当てプログラム、プール解放プログラムおよびプールアドレス報告プログラムを有する。これらのプログラムについては後述する。
【００３１】
００５４    図４は、第一実施例に係るストレージ制御情報２０７の例を示す詳細なブロック図である。ストレージ制御情報２０７は、ストレージキャッシュディレクトリ、ＶＶＯＬハッシュテーブル、およびデータアドレステーブルを含む。これらの制御情報はそれぞれストレージプログラム２０８のプログラムによって使用される。ストレージキャッシュディレクトリは、ＨＤＤ２０６のデータがキャッシュユニット２０１内にキャッシュされたか否かを管理する。データがキャッシュされた場合、キャッシュユニット２０１のアドレスも同じくストレージキャッシュディレクトリによって管理される。ＶＶＯＬハッシュテーブルは、データによって特定されたＶＶＯＬアドレスのハッシュ値を管理する。ＶＶＯＬハッシュテーブルの詳細を図８に示す。データアドレステーブルはハッシュ値に対応するデータの物理アドレスを管理する。データアドレステーブルの詳細を図９に示す。
【００３２】
００５５    図５は、第一実施例に係るサーバプログラム１０６の例を示す詳細なブロック図である。サーバプログラム１０６は、サーバリードプログラム、サーバライトプログラム、領域解放プログラム、およびプールアドレス取得プログラムを含む。これらのプログラムの詳細については後述する。
【００３３】
００５６    図６は、第一実施例に係るサーバ制御情報１０４の例を示す詳細なブロック図である。サーバ制御情報１０４は、プールアドレステーブルおよびサーバキャッシュディレクトリを含む。プールアドレステーブルは、ＶＶＯＬアドレスおよびプールアドレス間の対応関係を管理する。サーバキャッシュディレクトリは、ストレージシステム２００がサーバ１００のフラッシュメモリ１０７内にキャッシュされたか否かを管理する。データがキャッシュされた場合、フラッシュメモリ１０７のアドレスもまたサーバキャッシュディレクトリによって管理される。
【００３４】
００５７    図７は、第一実施例に係るストレージシステム２００のデータ削減の例を示す概念図である。この例は、サーバ１２０、別のサーバ１３０、およびストレージシステム２００を含む。ストレージシステム２００は、サーバ１２０に提供されるＶＶＯＬ２１０、サーバ１３０に提供されるＶＶＯＬ２２０、およびプール２３０を有する。ＶＶＯＬ１２０とＶＶＯＬ１３０は、物理記憶領域を持たない仮想ボリュームである。プール２３０は物理記憶領域に対応する。プール２３０は物理記憶領域を有するボリュームを含むことができる。ストレージシステム２００がＶＶＯＬへのライトコマンドを受け取ると、プール領域が割り当てられ、ＶＶＯＬのライト先領域と割り当てプール領域間の対応関係は、図４のストレージ制御情報２０７に含まれるＶＶＯＬハッシュテーブルとデータアドレステーブルによって管理される。これら二つのテーブルの詳細は図８および図９に示す。図７の例として、同一のデータが二つのＶＶＯＬ領域に書き込まれる場合、一方のデータのみがプール２３０に格納される。その結果、プールが無駄に消費されることを回避することができる。同一のデータを検出するための様々な処理ステップは、図１３を参照して説明される。
【００３５】
００５８    図８は、ストレージシステム２００に管理されるＶＶＯＬハッシュテーブルの例を示す。ＶＶＯＬハッシュテーブルはＶＶＯＬ  ＩＤ，ＶＶＯＬアドレスおよびハッシュ値の欄を有する。ＶＶＯＬ  ＩＤは、ストレージシステム内におけるボリュームを一意に識別する識別子である。ＶＶＯＬアドレスは、ＶＶＯＬ  ＩＤによって特定されるボリューム内の部分的領域を指し示すアドレスである。ハッシュ値は、ＶＶＯＬ  ＩＤとＶＶＯＬアドレスによって特定されるアドレスに格納されるデータから算出される値である。
【００３６】
００５９    図９は、ストレージシステム２００に管理されるデータアドレステーブルの例である。データアドレステーブルは、ハッシュ値とプールアドレスの欄を有する。ハッシュ値は、図８のＶＶＯＬハッシュテーブルに含まれるハッシュ値に対応する値である。プールアドレスは、プール２３０のアドレスを管理する。特定されたハッシュ値に対応するデータはアドレスに格納される。例えば、プールアドレス「１１−５１２」とは、プールボリュームＩＤが１１であり、プールボリューム内のアドレスが５１２である、という意味である。プールアドレスを発生させる他の方法を採用することもできる。図８と図９の例において、ＶＶＯＬ０のアドレス０とＶＶＯＬ０１のアドレス１０２４に格納されるハッシュ値は「ａａａ」である。ハッシュ値「ａａａ」に対応するデータは、プールのアドレス１０−０に格納される。ハッシュ値の不一致に対応するため、本テーブルは一つのハッシュ値に対して二つ以上のプールアドレスを格納することができる。一つのハッシュ値に対して二つ以上のプールアドレスを分類するために、ＶＶＯＬ  ＩＤおよびＶＶＯＬアドレスもプールアドレスと共に管理される。
【００３７】
００６０    図１０は、第一実施例に係るサーバ１００内のプールアドレステーブルの例を示す図である。プールアドレステーブルはＶＶＯＬ  ＩＤ、ＶＶＯＬアドレスおよびプールアドレスの欄を有する。ここで、ＶＶＯＬ  ＩＤとＶＶＯＬアドレスは、図８のＶＶＯＬ  ＩＤとＶＶＯＬアドレスと同じである。ここで、プールアドレスは、図９のプールアドレスと同じである。図１０の例において、ＶＶＯＬ０とアドレス５１２のデータは、実際にはプールアドレス１１−０に格納される。プールアドレスエントリ「−」とは、サーバがＶＶＯＬ０とＶＶＯＬアドレス０に対応するプールアドレスの情報を有していないという意味である。プールアドレス値は、ＶＶＯＬ０およびアドレス０へのＩ／Ｏのタイミングまたはプールアドレスの取得処理の際に格納される。Ｉ／Ｏ処理を図１２および図１３に示す。プールアドレス取得処理を図１６に示す。
【００３８】
００６１    図１１は、第一実施例に係るサーバ１００内のサーバキャッシュディレクトリの例を示す。サーバキャッシュディレクトリは、プールアドレスとフラッシュメモリアドレスの欄を有する。ここでプールアドレスは、図１０のプールアドレスと同じである。フラッシュメモリアドレスは、フラッシュメモリ１０７のアドレスを管理する。特定されたプールアドレスに対応するデータが、アドレスに格納される。例えば、プールアドレス「１１−０」に格納されるデータは、サーバ１００内のフラッシュメモリアドレス０にキャッシュされる。この例はテーブル構造によって示されるが、他のデータ構造、例えばツリー構造、を使用することもできる。
【００３９】
００６２    図１２は、リード処理の例を示すフロー図である。サーバリードプログラムはサーバ１００によって実行され、ストレージリードプログラムはストレージシステム２００によって実行される。サーバリードプログラムは、サーバ１００内のプールアドレステーブルを使ったアクセス先住所であるＶＶＯＬアドレスから、プールアドレスを算出する（Ｓ１００）。その後、サーバリードプログラムは、算出されたプールアドレスがフラッシュメモリにあるかどうかを確認する（Ｓ１０１）。データがフラッシュメモリにある場合、サーバリードプログラムはデータをＤＲＡＭへ転送し（Ｓ１０６）、処理を終了する（Ｓ１０７）。データがフラッシュメモリにない場合、サーバリードプログラムはＶＶＯＬに対するリードコマンドをストレージシステム２００に発行する。
【００４０】
００６３    リードコマンドを受信したストレージシステム２００は、ストレージリードプログラムを実行する。ストレージリードプログラムは、ＶＶＯＬハッシュテーブルとデータアドレステーブルを使って、特定したＶＶＯＬアドレスに対応するプールアドレスを算出する（Ｓ１１０）。その後、ストレージリードプログラムは算出したプールアドレスからリードデータを転送する（Ｓ１１１）。最後に、ストレージリードプログラムは、完了メッセージとプール領域のアドレスを送信する（Ｓ１１２）。完了メッセージを受信したサーバリードプログラムは、フラッシュメモリのある領域を割り当て、リードデータを割り当て領域に格納する（Ｓ１０３）。その後、サーバリードプログラムはサーバキャッシュディレクトリ（Ｓ１０４）およびプールアドレステーブル（Ｓ１０５）を更新する。アクセス先としてのＶＶＯＬ  ＩＤとＶＶＯＬアドレスとストレージシステム２００から受信したプールアドレスは、プールアドレステーブルに挿入または更新される。ステップＳ１０３において割り当てられるプールアドレスおよびフラッシュメモリアドレスは、サーバキャッシュディレクトリに挿入または更新される。最後にサーバリードプログラムは、リードデータをＤＲＡＭに転送し、処理を終了する（Ｓ１０６およびＳ１０７）。
【００４１】
００６４    ステップＳ１１０において、図９に示す一つのハッシュ値に対して、一つ以上のプールアドレスを管理することができる。この場合、プールアドレスと共にＶＶＯＬ  ＩＤとＶＶＯＬアドレスが管理される。プログラムは、ＶＶＯＬ  ＩＤとＶＶＯＬアドレスに組み合わされたプールアドレスをアクセス先として選択する。
【００４２】
００６５    図１３は、ライト処理の例を示すフロー図である。サーバライトプログラムがサーバ１００内で実行され、ストレージライトプログラムがストレージシステム２００内で実行される。サーバライトプログラムはＶＶＯＬのためのライトコマンドをストレージシステム２００に発行する（Ｓ２００）。この例はライト処理のライトスルーモードを示す。サーバライトプログラムは、ライトスルーモードに応じたタイミングによって、ストレージシステムにライトコマンドを発行する。ストレージシステム２００はライトコマンドを受け取り、ＶＶＯＬのライト先に対応するプール領域が既に割り当てられているか否かを確認する（Ｓ２１０）。その領域が割り当てられていない場合、プログラムはステップＳ２１３に進み、領域を割り当てる。領域が既に割り当てられている場合、プログラムはＶＶＯＬのアクセス先アドレスに対応するプールアドレスを算出する（Ｓ２１１）。その後、プログラムは算出されたプールアドレスが二つ以上のＶＶＯＬアドレスによって共有されているか否かを確認する（Ｓ２１２）。これは、アクセス先領域のハッシュ値として同一のハッシュ値が登録されているレコードを検出することによって確認できる。プール領域が共有されている場合、プログラムはステップＳ２１３に進み、新しいプール領域を割り当てる。プール領域を共有する他のＶＶＯＬのデータは、ライトデータのためのプール領域を新たに割り当てることで保護することができる。プールが共有でない場合、プログラムはステップＳ２１４に進み、ライトデータを算出されたアドレスに格納する。プール領域の割り当て処理の詳細は、図１４を参照して説明する。最後に、ストレージライトプログラムは完了メッセージとプール領域のアドレスを送信する。
【００４３】
００６６    完了メッセージを受信したサーバライトプログラムは、プールアドレスが変更されたか否またはライト先ＶＶＯＬアドレスに対応するプールアドレス情報がプールアドレステーブルに登録されていないかを確認する（Ｓ２０１）。プールアドレスが変更されているか、またはプールアドレスがテーブルに登録されていない場合に、プール領域がストレージシステム２００に割り当てられているので、サーバライトプログラムはプールアドレステーブルを更新し、新しいプールアドレスを登録する（Ｓ２０２）。この場合、フラッシュメモリ領域は新プールアドレスに対して割り当てられていない。そのため、プログラムはステップＳ２０４に進み、新しいフラッシュメモリを割り当て、ライトデータを格納する。ステップＳ２０１の結果が「ＮＯ」の場合、プログラムは、ストレージシステム２００から返信されたプールアドレスによって指定された領域があるかを確認する（Ｓ２０３）。プールアドレスは変更されておらず、フラッシュメモリに領域がある場合にフラッシュメモリ領域が既に割り当てられているため、プログラムはプールアドレスにライトデータを格納する（ステップＳ２０６）。プールアドレスが割り当てられていない場合、プログラムはフラッシュメモリに領域を割り当て（Ｓ２０４）、キャッシュディレクトリを更新する（Ｓ２０５）。その後、プログラムはライトデータを割り当て領域に格納する（Ｓ２０６）。キャッシュディレクトリの更新は、新しいフラッシュメモリアドレスを更新すること、または新しいプールアドレスおよびフラッシュメモリアドレスを含むレコードを挿入することを意味する。最後に、サーバライトプログラムは処理を終了する（Ｓ２０７）。
【００４４】
００６７    図１４は、図１３のストレージライトプログラムのステップＳ２１３に呼び出されたプール割り当てプログラムの処理の例を示すフロー図である。プール割り当てプログラムはライトデータのためのハッシュ値を算出し、その値をＶＶＯＬハッシュテーブルに格納する（Ｓ３００）。その後、プログラムは、前のステップで算出された同じハッシュ値を有するレコードがあるかを確認する（Ｓ３０１）。このステップは、算出されたハッシュ値を使ってデータアドレステーブルをサーチすることによって実行される。ステップＳ３００の結果が「ＹＥＳ」の場合、プログラムは、同一のハッシュ値を有するデータの内容がライトデータの内容と同じか否かを確認する（Ｓ３０２）。ステップＳ３０２の結果が「ＹＥＳ」である場合、プログラムはプールアドレスを呼び出し側に送信し、処理を終了する（Ｓ３０５）。この処理により、一つのプール領域は、ＶＶＯＬの二つ以上の領域により共有される。ステップＳ３０１またはステップＳ３０２の結果が「ＮＯ」の場合、プログラムはプールに領域を割り当て（Ｓ３０３）、ライトデータのプールアドレスを割当領域のプールアドレスに更新する（Ｓ３０４）。ステップＳ３００で算出されたハッシュ値を有するレコードがない場合、ハッシュ値とプールアドレスを有するレコードがデータアドレステーブルに挿入される。最後に、プール割り当てプログラムは呼び出し側にプールアドレスを送信する（Ｓ３０５）。ステップＳ３０３において、プールにフリー領域がない場合、プール割り当てプログラムは呼び出し側にエラーメッセージを返信する。エラーを受信したライトプログラムは、サーバにエラーを送信する。プール拡張を推奨するこのメッセージを、サーバ１００または管理サーバに対して報告したり表示させることができる。
【００４５】
００６８  図１５は、プール領域解放処理の例を示すフロー図である。ストレージシステム２００がサーバ１００に対して仮想ボリュームを提供するため、サーバ１００とストレージシステムはプール領域解放処理を指示する。例えば、アプリケーションに不要と判断された記憶領域は解放される。このプール領域解放処理を実行するために、領域解放プログラムはサーバ１００内で実行され、プール解放プログラムはストレージシステム２００内で実行される。領域解放プログラムはストレージシステム２００へ領域を解放することを要求する（Ｓ４００）。ターゲット領域のアドレスはパラメータとしてストレージシステム２００に送信される。
【００４６】
００６９    要求を受け取ったストレージシステム２００はプール解放プログラムを実行する。プール解放プログラムは、特定されたＶＶＯＬアドレスに対応するプールアドレスを算出する（Ｓ４１０）。その後プログラムは、プールアドレスが二つ以上のＶＶＯＬアドレスによって共有されているかを確認する（Ｓ４１１）。この処理は、データアドレステーブルからハッシュ値を算出し、同一のハッシュ値を有する二つ以上のレコードがＶＶＯＬハッシュテーブルに存在するかを検出することによって実行される。算出されたプールアドレスが共有されない場合、プログラムはプール領域を解放する（Ｓ４１２）。解放された領域は、例えばフリーキューによって管理される。その後、プログラムはそのプールアドレスを有するレコードを削除する（Ｓ４１３）。ステップＳ４１４において、プログラムは特定されたＶＶＯＬアドレスに対応するハッシュ値を削除する（Ｓ４１４）。特定されたアドレスにはデータが格納されない。最後に、プール解放プログラムは完了メッセージとプールアドレスをサーバに送る（Ｓ４１５）。
【００４７】
００７０    ストレージシステム２００から報告を受信した領域解放プログラムは、特定されたＶＶＯＬアドレスを有するレコードをプールアドレステーブルから削除する（Ｓ４０１）。その後、プログラムはフラッシュメモリに、報告されたプールアドレスに指定された領域があるかを確認する（Ｓ４０２）。ステップＳ４０２の結果が「ＮＯ」である場合、フラッシュメモリにキャッシュデータが存在しないため、プログラムは処理を終了する。ステップＳ４０２の結果が「ＹＥＳ」である場合、プールの解放領域にキャッシュが存在する。そのため、ステップＳ４０３とＳ４０４において、プログラムはキャッシュデータを削除する。プログラムは、報告されたアドレスに対応する他のＶＶＯＬアドレスが存在するかを確認する（Ｓ４０３）。ステップＳ４０３の結果が「ＮＯ」の場合、フラッシュメモリの領域が他のＶＶＯＬ領域によって共有されていないため、プログラムはフラッシュメモリの領域を解放し、キャッシュディレクトリを更新する（Ｓ４０４）。
【００４８】
００７１    上述の方法によると、図７のＶＶＯＬ２１０からデータ「Ａ」がリードされた場合、ＶＶＯＬ２１０を含むレコードはプールアドレステーブルに作成されるが、ＶＶＯＬ２２０を含むレコードは作成されない。このように、ＶＶＯＬ２２０のデータ「Ａ」の最初のリードはストレージシステム２００にアクセスする。つまり、図１２のサーバリードプログラムのステップＳ１０１の結果は「ＮＯ」であり、プログラムはステップＳ１０２においてストレージシステム２００にリードコマンドを発行する。同一のデータが既にフラッシュメモリに格納されていることから、リードコマンドによってストレージシステム２００からリードされるデータは、フラッシュメモリにキャッシュされない。フラッシュメモリが不要に消費されることはないものの、ＶＶＯＬ２２０へのリードコマンドにより、サーバ１００とストレージシステム２００間のネットワーク１１０は不要に消費される。事前にストレージシステム２００からプールアドレス情報を得ることにより、ＶＶＯＬ２２０のデータ「Ａ」の最初のリードはフラッシュメモリアクセスによって処理される。そのことにより、不要なネットワークの消費を避けることができる。
【００４９】
００７２    図１６は、プールアドレスを得るための処理の例を示す。この処理のために、プールアドレス取得プログラムはサーバ１００内で実行され、プールアドレス報告プログラムはストレージシステム２００内で実行される。アドレス取得プログラムはＶＶＯＬのプールアドレスを要求する（Ｓ５００）。対象ＶＶＯＬのＩＤはパラメータとしてストレージシステム２００に送信される。要求を受信したストレージシステム２００は、プールアドレス報告プログラムを実行する。プールアドレス報告プログラムは、特定されたＶＶＯＬ１０を使用して、ＶＶＯＬハッシュテーブルとデータアドレステーブルをサーチすることにより、プールアドレスを算出する（Ｓ５１０）。その後、プログラムは算出したプールアドレスをサーバに送信する（Ｓ５１１）。最後に、プールアドレス取得プログラムは、取得したプールアドレス（Ｓ５０１）に基づいてプールアドレステーブルを更新し、処理を終了する（Ｓ５０２）。
【００５０】
００７３    第二実施例
【００５１】
００７４    第一実施例では、ライトスルーモードに基づくデータ削減方法について説明した。ライトコマンドのライトスルーモードでは、データを同期的にストレージシステム２００に書き込む。そのため、コマンドのレスポンスタイムは長い。第二実施例においては、ライト処理のライトバックモードを説明する。ライトバックモードにおいては、ライトコマンドのレスポンスタイムは短い。ライトバックモードにおける問題は、サーバキャッシュディレクトリのプールアドレスの値が決定できないことである。本実施例において、フラッシュメモリにライトデータをキャッシュし、データを非同期的にストレージシステム２００に書き込む方法を説明する。
【００５２】
００７５    図１７は、第二実施例に係るサーバキャッシュディレクトリの例を示す。ライトバックモードにおいては、プールアドレスは決定できない。そのため本実施例のライト処理は、（図１１に示す第一実施例と比較して、キャッシュのために）プールアドレスの代わりにＶＶＯＬアドレスを使用する。５列目の「００−５１２」は、プールアドレスではなく、ＶＶＯＬアドレスである。ＶＶＯＬ００のアドレス５１２に書き込まれるデータはフラッシュメモリのアドレス１０２４に格納される。プールがボリュームを有し、「ｘｘ−ｙｙ」の「ｘｘ」はボリュームＩＤを意味するので、ＶＶＯＬアドレスと同一のプールアドレスを有するレコードはテーブルには存在しない。
【００５３】
００７６    図１８は、第二実施例に係るプールアドレステーブルの例を示す。（図１０に示す第一実施例と比較して）、新規に追加された項目はライトバック欄である。この欄は、ストレージシステム２００に書き込むべきデータを判断するのに使用される。ライトバック欄の値が「ＯＮ」である場合、特定されたＶＶＯＬアドレスとＶＶＯＬ  ＩＤのデータはフラッシュメモリにキャッシュされ、ストレージシステム２００にはまだ書き込まれない。図１８の例における二列目は、ＶＶＯＬ００のアドレス５１２にあるライトデータは、まだストレージシステム２００に書き込まれていないという意味である。つまりデータは、非同期的にストレージシステム２００に書き込まれる。
【００５４】
００７７    図１９は、第二実施例に係るサーバ１００におけるライトバックモードを有するライト処理の例を示すフロー図である。ライト処理を行うため、サーバ１００においてライトバックプログラムが実行される。最初に、ライトバックプログラムは、ライト対象アドレスのライトバック値がＯＮであるかを確認する（Ｓ６００）。ステップＳ６００の結果が「ＹＥＳ」である場合、プログラムはフラッシュメモリの割り当て領域にライトデータを書き込む（Ｓ６０１）。ストレージシステム２００に書き込みが行われた後、ライトバックの値はＯＦＦにされる。つまり、ライトバックの値が「ＯＮ」である場合、ダーティデータがフラッシュメモリ内に存在する。
【００５５】
００７８    プールアドレスが無効な場合、プールアドレスによって指定される領域にあるデータはフラッシュメモリ内には存在せず、プールアドレスによって指定される領域はフラッシュメモリ内に存在するものの、二つ以上のＶＶＯＬアドレスによって共有されている場合、プログラムはフラッシュメモリ内に新しい領域を割り当てる。そのためにプログラムは、プールアドレスが有効な値かどうか確認する（Ｓ６０２）。その結果が「ＮＯ」である場合、プログラムはステップＳ６０５に進み、フラッシュメモリに新しい領域を割り当てる。プールアドレステーブルの「−」の値は無効という意味である。ステップＳ６０２の結果が「ＹＥＳ」である場合、プログラムはプールアドレスによって指定された領域がフラッシュメモリにあるかどうかを確認する（Ｓ６０３）。その結果が「ＮＯ」である場合、プログラムはステップＳ６０５に進み、フラッシュメモリ内に新しい領域を割り当てる。この処理はサーバキャッシュディレクトリを利用することによって実施される。ステップＳ６０３の結果が「ＹＥＳ」である場合、プログラムは、領域が二つ以上のＶＶＯＬアドレスによって共有されているかを確認する（Ｓ６０４）。その結果が「ＹＥＳ」である場合、プログラムはステップＳ６０５に進み、フラッシュメモリに新しい領域を割り当てる。この処理はプールアドレステーブルを利用することによって実施する。ステップＳ６０５において、プログラムはフラッシュメモリに領域を割り当てる。プログラムはプールアドレステーブルとサーバキャッシュディレクトリを更新する（Ｓ６０６）。ＶＶＯＬ  ＩＤとＶＶＯＬアドレスがプールアドレステーブルとサーバキャッシュディレクトリのプールアドレスフィールドに格納される。ステップＳ６０４の結果が「ＮＯ」の場合、ライト先のデータが既にフラッシュメモリにキャッシュされている。プログラムは、既に割り当てられている領域にあるデータを書き込み（Ｓ６０７）、ライトバック欄に「ＯＮ」を格納する（Ｓ６０８）。最後に、プログラムを終了する（Ｓ６０９）。
【００５６】
００７９    図１２に示されるサーバリードプログラムの処理は、本実施例において変更する必要がない。最初に、リードプログラムはプールアドレステーブルのプールアドレスフィールドに格納されるＶＶＯＬアドレスを取得する。プログラムは、取得したＶＶＯＬアドレスによるサーバキャッシュディレクトリをサーチすることにより、フラッシュメモリアドレスを得ることができる。
【００５７】
００８０    図２０は、フラッシュメモリのデータをストレージシステム２００に非同期的に書き込む処理の例を示すフロー図である。この処理のために、デステージプログラムがサーバ１００内で実行される。最初に、デステージプログラムはライトバックフィールドに「ＯＮ」が入力されたレコードを探す（Ｓ７００）。その後、プログラムはストレージシステム２００にＶＶＯＬのライトコマンドを発行する（Ｓ７０１）。図１３に示したストレージライトプログラムの処理は（例えば、Ｓ２１０からＳ２１５）、ストレージシステム２００内で実行される。ストレージシステム２００から完了メッセージとプールアドレスを受信したデステージプログラムは、ステップＳ７０２に進む。ステップＳ７０２においてプログラムは、プールアドレスが変更されたかを確認する（Ｓ７０２）。ステップＳ７０２の結果が「ＮＯ」の場合、プログラムは処理を終了する（Ｓ７０７）。この場合、データはＶＶＯＬアドレスではなくプールアドレスを使って、フラッシュメモリにキャッシュされる。そのため、制御情報の更新は必要ない。このケースでは、図１９のステップＳ６０４からステップＳ６０７へ進む。例えば、サーバがリード処理の直後にライト処理を実行した場合に、このケースが起こる。
【００５８】
００８１    ステップＳ７０２の結果が「ＹＥＳ」の場合、プログラムはプールアドレステーブルにあるプールアドレスを更新する（Ｓ７０３）。プールアドレステーブル中のプールアドレスフィールドに格納されたＶＶＯＬアドレスを、受信したプールアドレスに変更する。その後プログラムは、受信したプールアドレスに指定された領域がフラッシュメモリに存在するかを確認する（Ｓ７０４）。ステップＳ７０４の結果が「ＹＥＳ」の場合、プログラムはサーバキャッシュディレクトリから古いプールアドレスを含むレコードを削除する（Ｓ７０６）。このケースは、受信したプールアドレスがストレージシステム２００内の別のＶＶＯＬ領域に共有され、データは別のＶＶＯＬ領域をアクセスすることによりフラッシュメモリ内にキャッシュされることを意味する。ステップＳ７０４の結果が「ＮＯ」の場合、プログラムはサーバキャッシュディレクトリを更新する（Ｓ７０５）。プールアドレステーブル内のプールアドレスフィールドに格納されたＶＶＯＬアドレスを、受信したプールアドレスに変更する。最後に、プログラムは処理を終了する（Ｓ７０７）。
【００５９】
００８２    第三実施例
【００６０】
００８３    第一および第二実施例において、システム構成は一つのストレージシステムと一つ以上のサーバを含む。一つのＶＶＯＬを二つ以上のサーバで共有することは考慮されていない。第三実施例においては、複数のサーバ構成、外部ストレージ構成およびデータキャッシュ装置構成におけるデータ削減方法を説明する。一つのＶＶＯＬが二つ以上のサーバによって共有される構成を図２１に示す。
【００６１】
００８４    図２１は、複数のサーバによってＶＶＯＬ共有を行う例を示す概念図である。サーバ３２０、３２１および３２２がストレージシステム２００に接続される。ストレージシステムはＶＶＯＬ３００およびプール３１０を有する。データ「Ａ」３０１と３０２がプール３１０において重複排除される。サーバ３２０と３２１はデータ「Ａ」３０１と３０２にアクセスし、データを二つのそれぞれのサーバのフラッシュメモリにキャッシュする。サーバ３２０とサーバ３２１のうち一方のサーバが、データ「Ａ」３０１とデータ「Ａ」３０２の両方にアクセスする場合、一方のデータ「Ａ」のみがサーバ内のフラッシュメモリにキャッシュされる。これは、上述した第一および第二実施例において説明された方法によって実施される。しかしながら、二つのサーバ３２０および３２１がデータ「Ａ」３０１と３０２の両方にアクセスする場合、サーバ３２０と３２１間のキャッシュデータの整合性を保証する必要がある。整合性を確保するための処理を図２２に示す。
【００６２】
００８５    図２２は、データ無効化処理の例を示すフロー図である。整合性を保証するため、キャッシュされたデータを更新するサーバは無効化発行プログラムを実行する。無効化メッセージを受信した他のサーバは、データ無効化プログラムを実行する。無効化発行プログラムは、サーバライトプログラムの終了の直前に呼び出される。
【００６３】
００８６    最初に、無効化発行プログラムは、クラスタを構成する他のサーバに無効化メッセージを送信する。つまり、同じＶＶＯＬを共有するサーバに対してメッセージを送信する（Ｓ８００）。プールアドレスもパラメータとして送信する。データ無効化プログラムは無効化メッセージとプールアドレスを受け取る（Ｓ８０１）。データ無効化プログラムはフラッシュメモリからデータを削除し、報告されたプールアドレスを有するレコードを削除する（Ｓ８０２）。その後、プログラムは呼び出し側に完了メッセージを送信する（Ｓ８０３）。最後に、無効化発行プログラムは完了メッセージを受信し、処理を終了する（Ｓ８０４）。
【００６４】
００８７    一部のストレージシステムは、外部ストレージ機能を有する。図２３の例において、システムはデータ削減機能を有する外部ストレージシステム４００と、外部ストレージシステム４００に接続された一つ以上のストレージシステム２４０、２４１および２４２を有する。ストレージシステム２４０、２４１および２４２は各々、外部ストレージ機能と、外部ストレージシステム４００のデータをキャッシュする記憶領域を有するが、データ削減機能は有しない。ストレージシステム２４０、２４１および２４２は、上述の構成におけるサーバに相当する。外部ストレージシステム４００は、上述の構成におけるストレージシステム２００に相当する。この構成において、上述の技術は容易に適応可能である。
【００６５】
００８８  図２４は、外部ストレージシステム４００がデータ削減機能を有し、サーバは各々外部ストレージシステムに格納されたデータをキャッシュする記憶領域を有する構成の例を示す。サーバ３２０と３２１および外部ストレージシステム４００はストレージシステム２４０と２４１に接続される。外部ストレージシステム４００はストレージシステムにボリュームを提供し、ストレージシステムはサーバにボリュームを提供する。サーバ内のフラッシュメモリのデータを減らすため、外部ストレージシステム４００は、ストレージシステム２４０と２４１からのアクセスに対する完了メッセージを含むプール４０１のプールアドレスの報告を送信する。
【００６６】
００８９    ストレージシステム２４０および２４１は外部ストレージシステム４００のＶＶＯＬアドレスとプールアドレス間の対応関係を管理する。ストレージシステム２４０と２４１がサーバ３２０と３２１からのアクセスを受信すると、ストレージシステム２４０と２４１は外部ストレージシステム４００のプールアドレスを算出する。ストレージシステムは完了メッセージと共にプールアドレスを送信する。サーバ３２０と３２１は外部ストレージシステム４００のプールアドレスを使用してデータをキャッシュする。外部ストレージシステム４００の同一のアドレスに格納されるデータについては、一つのデータのみがフラッシュメモリに格納される。
【００６７】
００９０    図２５は、フラッシュメモリを有するキャッシュ装置５００を含む構成例を示す。上述の技術は本構成に適用可能である。ストレージシステム２００はサーバ３２０、３２１および３２２に対してプールのプールアドレスを報告する。サーバ３２０、３２１および３２２はＶＶＯＬアドレスと報告されたプールアドレス間の対応関係を管理する。サーバ３２０、３２１および３２２はキャッシュ装置５００のフラッシュメモリアドレスをサーバキャッシュディレクトリのフラッシュメモリアドレスフィールドに格納する。
【００６８】
００９１    図２６は、データ削減機能を有するストレージ装置と、ストレージ媒体を有するストレージシステム内に格納されたデータをキャッシュするための記憶領域を各々有するサーバとを有する構成例を示す。ストレージ装置は、ストレージシステムに供給されたディスクアドレスとストレージ装置の物理アドレス間の関係を管理するテーブルとコントローラを有する。本発明をこの例に適用するために、ストレージ装置は、ストレージシステムからストレージ装置へのＩ／Ｏコマンドに対する完了メッセージと共にストレージ装置の物理アドレスを報告する。また、ストレージシステムは、サーバからストレージシステムへのＩ／Ｏコマンドに対する完了メッセージと共にストレージ装置の物理アドレスを報告する。さらに、サーバはサーバ内のフラッシュメモリにあるデータを、報告されたストレージ媒体の物理アドレスを使ってキャッシュする。フラッシュメモリパッケージ等をストレージ装置とみなすことができる。
【００６９】
００９２    もちろん、図１、７、２１および２３から２６に示すシステム構成は本発明が適用されうる情報システムの単なる例を示すものであり、本発明は特定のハードウェア構成に限定されるものではない。本発明が適用されるコンピュータやストレージシステムは、さらに、上述の発明を実施するのに使用されるモジュールやプログラムやデータ構造を読み出し可能に格納する周知のＩ／Ｏデバイス（例えばＣＤやＤＶＤドライブ、フロッピーディスクドライブ、ハードドライブ等）を有することができる。これらのモジュールやプログラムやデータ構造は、コンピュータ読取可能媒体にエンコードすることができる。例えば、本発明のデータ構造は、本発明に使用されるプログラムが格納される一つ以上のコンピュータ読取可能媒体とは別のコンピュータ読取可能媒体に格納することができる。本システムの構成要素は、例えばコミュニケーションネットワークといったデジタルデータ通信のある形態または媒体によって、相互に接続される。コミュニケーションネットワークの例としては、ローカルエリアネットワークや、インターネット、ワイヤレスネットワーク、ストレージエリアネットワーク等のワイドエリアネットワークを含む。
【００７０】
００９３      本明細書では、本発明の理解を深めるために、多くの具体的かつ詳細な記載がなされている。しかし当業者にとっては、本発明を実施するためにこれら具体的な詳細のすべてが必要なわけではないことは明らかであるだろう。また、留意すべき点として、本発明は、通常はフローチャート、フロー図、構成図又はブロック図として記載されるプロセスとして説明されてもよい。フローチャートでは動作を逐次プロセスとして説明するが、動作の多くは並行して又は同時に実行することができる。さらに、動作の順番は並び替えてもよい。
【００７１】
００９４    当技術分野では周知であるように、上述の動作は、ハードウェア、ソフトウェア、又はソフトウェアとハードウェアの組み合わせによって実行することができる。本発明の実施形態の様々な態様は、回路や論理装置（ハードウェア）を用いて実施してよく、その一方で、その他の態様は、機械読取可能媒体（ソフトウェア）上に記憶された命令を用いて実施してもよく、当該発明は、プロセッサによって実行された場合には、プロセッサに本発明の実施形態を実行させる方法を実施させるものである。さらに、本発明のいくつかの実施形態は、ハードウェアのみにおいて実施されてもよく、その他の実施形態は、ソフトウェアのみで実施されてもよい。さらに、説明された様々な機能は一つのユニットで実施することができ、又はあらゆる方法によって多くの構成要素に広めることができる。ソフトウェアによって実施された場合、本発明の方法は、コンピュータ読取可能媒体に記憶された命令に基づいて、汎用コンピュータなどのプロセッサによって実行され得る。望ましい場合には、圧縮およびまたは暗号化形式で命令を媒体に記憶することができる。
【００７２】
００９５    上記により、本発明が、ストレージシステム内のデータ削減のための方法、装置およびコンピュータ読取可能な媒体に記憶されたプログラムを提供するものであることが明らかであろう。さらに、本明細書において特定の実施形態が示され説明されているが、当業者にとって明白なように、開示された特定の実施形態の代わりに、同じ目的を達成するために創出された構成を用いてもよい。本開示は、本発明のあらゆる適応例や変形例を対象とすることを意図したものであり、また以下の請求項で用いられる用語は、本発明を本明細書で開示した特定の実施形態に限定するよう解釈されるべきではない。むしろ本発明の範囲は、以下の請求項によって判断されるべきものであり、以下の請求項は、当該請求項が権利を有する同等物の範囲全体と共に、請求項の解釈について確立された原則に従って解釈されるものである。
【符号の説明】
【００７３】
１００：  サーバ
１０１：  ＯＳ
１０２：  プロセッサ
１０３：  ＤＲＡＭ
１０４：  サーバ制御情報
１０５：  アプリケーション
１０６：  サーバプログラム
１０７：  フラッシュメモリ
１０８、２０２：  ストレージＩ／Ｆ
２００：  ストレージシステム
２０１：  キャッシュユニット
２０２：  ストレージＩ／Ｆ
２０３：  プロセッサ
２０４：  ディスクＩ／Ｆ
２０５：  ボリューム
２０６：  ＨＤＤ
２０７：  ストレージ制御情報
２０８：  ストレージプログラム
４００：  外部ストレージシステム
５００：  キャッシュ装置
【図１】
2014137814.tif 000003
【図２】
2014137814.tif 000004
【図３】
2014137814.tif 000005
【図４】
2014137814.tif 000006
【図５】
2014137814.tif 000007
【図６】
2014137814.tif 000008
【図７】
2014137814.tif 000009
【図８】
2014137814.tif 000010
【図９】
2014137814.tif 000011
【図１０】
2014137814.tif 000012
【図１１】
2014137814.tif 000013
【図１２】
2014137814.tif 000014
【図１３】
2014137814.tif 000015
【図１４】
2014137814.tif 000016
【図１５】
2014137814.tif 000017
【図１６】
2014137814.tif 000018
【図１７】
2014137814.tif 000019
【図１８】
2014137814.tif 000020
【図１９】
2014137814.tif 000021
【図２０】
2014137814.tif 000022
【図２１】
2014137814.tif 000023
【図２２】
2014137814.tif 000024
【図２３】
2014137814.tif 000025
【図２４】
2014137814.tif 000026
【図２５】
2014137814.tif 000027
【図２６】
2014137814.tif 000028
【外国語明細書】
2014137814000001.pdf
2014137814000002.pdf
2014137814000003.pdf
2014137814000004.pdf