(57)【特許請求の範囲】
【請求項１】
プロセッサと、一次記憶装置と、二次記憶装置とを有するストレージ装置であって、
前記ストレージ装置は、複数の仮想計算機を動作させ、
前記一次記憶装置の一部の領域は、前記複数の仮想計算機が前記二次記憶装置上のデータの複製を保持するためのキャッシュ領域として用いられ、
前記複数の仮想計算機の各々は、前記二次記憶装置の同一領域にアクセス可能に構成されており、
前記ストレージ装置は、前記キャッシュ領域に、前記二次記憶装置上の領域のデータの複製を一つだけ保持させることを特徴とする、
ストレージ装置。
【請求項２】
前記複数の仮想計算機の各々は、前記キャッシュ領域上のキャッシュ部分領域を、他の前記仮想計算機からアクセスされない非共有の領域として有し、
前記ストレージ装置は、前記二次記憶装置上の領域のデータの複製を、前記仮想計算機のいずれか１つが有する前記キャッシュ部分領域のみに保持させることを特徴とする、
請求項１に記載のストレージ装置。
【請求項３】
前記複数の仮想計算機の各々は、前記仮想計算機の前記二次記憶装置上の各領域に対するアクセス状況を前記領域ごとに記録している統計情報を管理し、
前記ストレージ装置は、前記統計情報に基づいて、前記二次記憶装置上の前記各領域のデータの複製を保持させる１台の前記仮想計算機を決定することを特徴とする、
請求項２に記載のストレージ装置。
【請求項４】
前記ストレージ装置は、前記仮想計算機が前記二次記憶装置上の領域へのアクセス要求を実行した際に、前記領域のデータの複製を保持させる１台の前記仮想計算機を決定することを特徴とする、
請求項２に記載のストレージ装置。
【請求項５】
前記ストレージ装置は、前記仮想計算機が前記二次記憶装置上の領域に対して書き込み処理を開始した時点で、前記書き込み処理を開始した前記仮想計算機以外の前記仮想計算機の有する前記キャッシュ部分領域から、前記領域のデータの複製を削除し、
前記書き込み処理を開始した前記仮想計算機は、前記削除の行われた後、自身の有する前記キャッシュ部分領域に前記書き込み処理に伴う書き込みデータを格納し、前記書き込みデータを前記キャッシュ部分領域に格納した時点で、前記書き込み処理を完了することを特徴とする、
請求項２に記載のストレージ装置。
【請求項６】
前記ストレージ装置は、前記キャッシュ領域上の、前記仮想計算機の各々が有する前記キャッシュ部分領域とは異なる領域を、前記ストレージ装置の有するキャッシュ部分領域として管理しており、
前記ストレージ装置は、前記統計情報に基づいて、前記二次記憶装置上の領域を前記複数の仮想計算機がアクセスしているか、あるいは前記複数の仮想計算機のうち１台の仮想計算機のみアクセスしているか判断し、
前記二次記憶装置上の領域を前記複数の仮想計算機がアクセスしていると判断される場合には、前記二次記憶装置上の領域のデータの複製を、前記ストレージ装置が有する前記キャッシュ部分領域のみに保持させることを決定し、
前記二次記憶装置上の領域を前記複数の仮想計算機のうち１台の仮想計算機のみアクセスしていると判断される場合には、前記二次記憶装置上の領域のデータの複製を、前記１台の仮想計算機が有する前記キャッシュ部分領域のみに保持させることを決定することを特徴とする、
請求項３に記載のストレージ装置。
【請求項７】
前記ストレージ装置は、前記二次記憶装置上の各領域について、前記複数の仮想計算機が、前記二次記憶装置上の領域に対してリードアクセスを行っているか、前記統計情報に基づいて判断し、前記複数の仮想計算機が、前記二次記憶装置上の前記領域に対してリードアクセスを行っていると判断された場合、前記二次記憶装置上の前記領域に対してリードアクセスを行っている前記複数の仮想計算機が有するそれぞれのキャッシュ部分領域上に、前記領域のデータの複製を保持させる処理を定期的に実行することを特徴とする、
請求項３に記載のストレージ装置。
【請求項８】
前記ストレージ装置の前記キャッシュ領域は、前記複数の仮想計算機の各々が共有アクセス可能な共有キャッシュ領域であることを特徴とする、
請求項１に記載のストレージ装置。
【請求項９】
前記複数の仮想計算機の各々は、前記仮想計算機の前記二次記憶装置上の各領域に対するアクセス状況を前記領域ごとに記録している統計情報を管理し、
前記ストレージ装置は、前記仮想計算機の前記二次記憶装置上の各領域に対するアクセス状況に基づいて、前記各領域のデータの複製を前記キャッシュ領域に保持しないことを決定することを特徴とする、
請求項８に記載のストレージ装置。
【請求項１０】
複数のホスト計算機とストレージ装置とがネットワークで相互接続された計算機システムであって、
前記複数のホスト計算機はそれぞれ、前記ストレージ装置上のデータの複製を保持するためのキャッシュ領域を有し、
前記複数のホスト計算機の各々は、前記ストレージ装置の有する記憶媒体上の同一領域にアクセス可能に構成されており、
前記計算機システムは、前記記憶媒体上の領域のデータの複製を、前記複数のホスト計算機の有するキャッシュ領域のうち、１つのキャッシュ領域のみにキャッシュさせることを特徴とする、
計算機システム。
【請求項１１】
前記複数のホスト計算機の各々は、前記ホスト計算機の前記記憶媒体上の各領域に対するアクセス状況を前記領域ごとに記録している統計情報を管理し、
前記計算機システムは、前記統計情報に基づいて、前記記憶媒体上の前記領域のデータの複製を、前記複数のホスト計算機の中のいずれか１台の前記ホスト計算機の有する前記キャッシュ領域のみに保持させることを特徴とする、
請求項１０に記載の計算機システム。
【請求項１２】
前記計算機システムは、前記複数のホスト計算機のいずれかが前記記憶媒体上の領域へのアクセスを実行した際に、前記領域のデータの複製を保持させる前記ホスト計算機を決定することを特徴とする、
請求項１０に記載の計算機システム。
【請求項１３】
前記計算機システムは、前記ホスト計算機が前記記憶媒体上の領域に対して書き込み処理を開始した時点で、前記書き込み処理を開始した前記ホスト計算機以外の前記ホスト計算機の有する前記キャッシュ領域から、前記領域のデータの複製を削除し、
前記書き込み処理を開始した前記ホスト計算機は、前記削除の行われた後、自身の有する前記キャッシュ領域に前記書き込み処理に伴う書き込みデータを格納し、前記書き込みデータを前記キャッシュ領域に格納した時点で、前記書き込み処理を完了することを特徴とする、
請求項１０に記載の計算機システム。
【請求項１４】
前記ストレージ装置は、ディスクキャッシュを有し、
前記計算機システムは、前記統計情報に基づいて、前記記憶媒体上の領域を前記複数のホスト計算機がアクセスしているか、あるいは前記複数のホスト計算機のうち１台のホスト計算機のみアクセスしているか判断し、
前記記憶媒体上の領域を前記複数のホスト計算機がアクセスしていると判断される場合には、前記記憶媒体上の領域のデータの複製を、前記ストレージ装置が有する前記ディスクキャッシュのみに保持させることを決定し、
前記記憶媒体上の領域を前記複数のホスト計算機のうち１台のホスト計算機のみアクセスしていると判断される場合には、前記記憶媒体上の領域のデータの複製を、前記１台のホスト計算機が有する前記キャッシュ領域に保持させることを決定することを特徴とする、
請求項１１に記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置のキャッシュ管理機能を備えたストレージ装置及び計算機システムに関する。
【背景技術】
【０００２】
計算機の備えるハードディスクなどの二次記憶装置は、一般的にメモリなどの一次記憶装置と比較して大容量であるが性能が低い。そこで、二次記憶装置に格納されたデータへのアクセスを高速化するため、二次記憶装置の一部のデータを一次記憶装置に複製して配置するキャッシュ技術は広く使用されている。また、大容量の二次記憶装置と一次記憶装置を備えた計算機で、それ自身が他の計算機に対する二次記憶装置としてデータ格納機能を提供するものも存在し、External  Controller-Based(ECB)  Disk  Storageなどと呼ばれる。【０００３】
ECBと、それを用いるホスト計算機において、ホスト計算機はECBを二次記憶装置とみなすため、ホスト計算機自身の一次記憶装置をECBのキャッシュ領域として扱い、ECBはECB内部で一次記憶装置を二次記憶装置のキャッシュとして活用する。そのため、ECB中の二次記憶装置に対し、ホスト計算機及びECBで同一内容のデータに対するキャッシュを二重に保持することになり、両装置の一次記憶装置の利用効率が低減する。【０００４】
同様の事象は仮想計算機技術においても発生する。仮想計算機技術は、１台の計算機上で計算機を構成する各ハードウェアをソフトウェアで模倣することで、疑似的に複数台の計算機が存在するようにふるまう技術である。ここで、計算機は仮想計算機に対して疑似的な記憶装置を提供する。この時、仮想計算機が計算機より与えられた疑似記憶装置を介して計算機に備えられた記憶媒体にデータを格納する場合、仮想計算機は自身の一次記憶装置をキャッシュとして用いる。この時、計算機は仮想計算機が疑似記憶装置に対して発行した入出力要求と格納対象データとを自身の二次記憶装置に転送するが、その際に計算機自身も自身の一次記憶装置をキャッシュとして用いる。仮想計算機技術では、一次記憶装置及び二次記憶装置はその性質上、容量分割により計算機及び各仮想計算機間で共有される。しかし計算機と仮想計算機が共に自身の一次記憶装置をキャッシュとして活用する場合、計算機の二次記憶装置に対して複数のキャッシュが存在することになる。複数の仮想計算機が動作する場合、二次記憶装置のキャッシュを仮想計算機及び計算機の台数分重複して一次記憶装置上に保持する事象が発生し得、一次記憶装置の利用効率が低下する。これは、例えば同一のデータに対して、データ検索を行う仮想計算機やデータ解析を行う仮想計算機等複数の仮想計算機が入出力を行う場合に発生し得る。【０００５】
仮想計算機環境において、一次記憶装置で重複するデータを削除する技術を開示する文献として、特許文献１が挙げられる。特許文献１では、一次記憶装置内のデータの内容を参照して、計算機と仮想計算機の一次記憶装置でそれぞれ重複するデータを検出して、削除する技術を開示している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許第６７８９１５６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に開示の技術では、一次記憶装置内のデータの内容を参照して重複データを検出するため、データ参照のための処理時間がかかる。また、データが更新された場合には、重複の再検出が必要になるため、頻繁にデータ更新が発生する環境では、計算機の処理オーバヘッドが大きいという問題がある。【０００８】
本発明の目的は、複数の計算機または仮想計算機におけるキャッシュデータの重複を、効率よく解消することにある。
【課題を解決するための手段】
【０００９】
本発明は、複数の計算機または仮想計算機が共に同一の二次記憶装置上のデータに対するキャッシュを各々の一次記憶装置上に配置しようとするとき、複数の計算機・仮想計算機で同一データを重複して保持することを防ぐことを特徴とする。【００１０】
本発明の一実施形態に係る計算機は、１以上の仮想計算機を有し、また計算機と仮想計算機とがそれぞれ二次記憶装置のデータのキャッシュするために、計算機の一次記憶媒体を用いたキャッシュ領域を備える。計算機上の統合キャッシュ管理機能が、仮想計算機上のキャッシュ管理機能と通信し、二次記憶装置のデータをどの計算機または仮想計算機上のキャッシュ領域にキャッシュするか調停する。さらに、計算機または仮想計算機が二次記憶装置に対する入出力を行う際、前記統合キャッシュ管理機能に問い合わせを行うことで、不要なキャッシュを削除する。
【発明の効果】
【００１１】
同一データが一次記憶装置上の複数位置に重複してキャッシュされることを防ぎ、一次記憶装置の領域を効率よく用いることができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、本発明の概要を示す図である。
【図２】図２は、実施例１及び実施例２における統合ストレージ装置の構成図である。
【図３】図３は、実施例１及び実施例２におけるホスト仮想計算機の構成図である。
【図４】図４は、実施例１における、ボリューム上のチャンクとキャッシュの対応関係の一例を示す図である。
【図５】図５は、キャッシュ管理テーブルの例を示す図である。
【図６】図６は、統計情報の例を示す図である。
【図７】図７は、実施例１及び実施例３におけるホスト計算機のＲｅａｄ処理フローを示す図である。
【図８】図８は、実施例１及び実施例３におけるホスト計算機のＷｒｉｔｅ処理フローを示す図である。
【図９】図９は、実施例１及び実施例３における統合ストレージ装置のＲｅａｄ処理フローを示す図である。
【図１０】図１０は、実施例１及び実施例３における統合ストレージ装置のＷｒｉｔｅ処理フローを示す図である。
【図１１】図１１は、キャッシュの再配置処理フローを示す図である。
【図１２】図１２は、複製先決定処理のフローを示す図である。
【図１３】図１３は、実施例２における仮想計算機の、仮想メモリ空間と物理メモリ空間の対応関係を示す図である。
【図１４】図１４は、実施例２におけるキャッシュ管理テーブルの例を示す図である。
【図１５】図１５は、実施例２におけるホスト仮想計算機のＲｅａｄ処理フローを示す図である。
【図１６】図１６は、実施例２におけるホスト仮想計算機のＷｒｉｔｅ処理フローを示す図である。
【図１７】図１７は、実施例２における統合ストレージ装置のＲｅａｄ処理フローを示す図である。
【図１８】図１８は、実施例２における統合ストレージ装置のＷｒｉｔｅ処理フローを示す図である。
【図１９】図１９は、実施例３における計算機システムの構成図である。
【図２０】図２０は、実施例３におけるストレージ装置の構成図である。
【図２１】図２１は、実施例３におけるホスト計算機の構成図である。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施形態について、図を用いて説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。また、本明細書では、「プログラムが…処理を実行する」のように、プログラムが動作主体となって特定の処理が実行されるような記載がされている箇所も存在するが、これは計算機のプロセッサ等のハードウェアが、そのプログラムを実行することを表現している。
【実施例１】
【００１４】
本発明の実施例１の概要を、図１を用いて説明する。図１は、本発明の実施例１に係る統合ストレージ装置１１０の適用対象となる計算機システム１００の構成を示している。計算機システム１００は、１以上のクライアント計算機１０（以下、「クライアント」と略記）、統合ストレージ装置１１０とが、ネットワーク２０で結合された構成をとる。統合ストレージ装置１１０は、記憶媒体１３０を有し、クライアント１０からのデータ入出力（Ｉ／Ｏ）要求に応じて、記憶媒体１３０中のデータを入出力する処理を行う。記憶媒体１３０中のデータ入出力単位を以後チャンクと呼ぶ。また、統合ストレージ装置１１０が備えるディスクキャッシュ２２６は、記憶媒体１３０中のチャンクを入出力する際に一時的に用いる領域であり、その後記憶媒体１３０中のチャンクの複製を一時的に保持することにも用いるキャッシュ領域である。【００１５】
統合ストレージ装置１１０は内部に仮想計算機処理部１２０を備え、仮想計算機処理部１２０中では複数のホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃ（以下では、ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃを区別せずに呼ぶ場合には、「ホスト仮想計算機１５０」と表記する）を備えている。各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃでは、記憶媒体１３０中のデータを利用（リードまたはライト）して所定の処理を行うアプリケーションプログラム３２１ａ・３２１ｂ・３２１ｃが動作している。アプリケーションプログラム３２１ａ・３２１ｂ・３２１ｃは、たとえば、ＮＦＳサーバ等の、クライアント１０に対してファイルアクセスサービスを提供するファイルサーバプログラム、あるいは検索サービスを提供するプログラム等であるが、これらに限られるわけではない。また、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃが備えるディスクキャッシュ３２５ａ・３２５ｂ・３２５ｃは、統合ストレージ装置１１０中のディスクキャッシュ２２６を介して記憶媒体１３０中のデータチャンクを入出力する際に一時的に用いる領域であり、その後記憶媒体１３０中のチャンクの複製を一時的に保持することにも用いるキャッシュ領域である。また、記憶媒体１３０中の各領域のデータをどのディスクキャッシュ２２６・３２５ａ・３２５ｂ・３２５ｃ中に保持するかは、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃ中のキャッシュ管理プログラム３２３ａ・３２３ｂ・３２３ｃと統合ストレージ１１０中の統合キャッシュ管理プログラム２２３が通信して入出力状態を交換しあって決定する。【００１６】
以下ホスト仮想計算機１５０ａにおける処理を例に挙げて説明するが、ホスト仮想計算機１５０ｂ・１５０ｃも同様に動作する。ホスト仮想計算機１５０ａ上のアプリケーションプログラム３２１ａが記憶媒体１３０中のデータを入出力する場合、キャッシュ管理プログラム３２３ａは対象チャンクが自身のディスクキャッシュ３２５ａ中にキャッシュされているか判定する。例えばチャンクＰ（１４１）のデータはディスクキャッシュ３２５ａ中に複製Ｐ（１５１）としてキャッシュされており、この場合チャンクＰ（１４１）への入出力は複製Ｐ（１５１）を参照して終了する。チャンクＱ（１４２）に対するデータ入出力は、ディスクキャッシュ３２５ａ中に複製Ｑを持たないので、統合管理部１４０に対してチャンクＱ（１４２）に対する入出力を要求する。統合管理部１４０中の統合キャッシュ管理プログラム２２３は、同様にチャンクＱ（１４２）のデータ複製Ｑ（１５２）がディスクキャッシュ２２６にあることを判定し、ホスト計算機１５０ａに返す。チャンクＲ（１４３）に対する入出力は、いずれのディスクキャッシュ上にもチャンクＲ（１４３）のデータ複製を持たないので、ホスト仮想計算機１５０ａは統合管理部１４０に入出力要求を出し、記憶媒体１３０に対してデータ入出力を行う。このようにして、各ディスクキャッシュ上の複製の有無により記憶媒体１３０への入出力回数が変化する。【００１７】
また、統合キャッシュ管理プログラム２２３は各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃの入出力の状態等を見て、記憶媒体１３０上のチャンクのデータ複製を配置するディスクキャッシュを選択し、不要な複製を削除する。例えばチャンクＰ（１４１）にアクセスするのがアプリケーションプログラム３２１ａだけであるならば、複製Ｐ（１５１）は同じホスト仮想計算機１５０ａ内にあるディスクキャッシュ３２５ａに配置し、ディスクキャッシュ２２６、３２５ｂまたは３２５ｃ上にチャンクＰ（１４１）のデータ複製がある場合には削除する。チャンクＱ（１４２）に対して、各アプリケーションプログラム３２１ａ・３２１ｂ・３２１ｃのいずれもアクセスするならば、統合ストレージ１１０中のディスクキャッシュ２２６に複製Ｑ（１５２）を配置し、ホスト仮想計算機１５０上のディスクキャッシュ３２５が保持する複製チャンクは削除する。【００１８】
このように、各チャンクへの入出力状態に応じた複製チャンクの配置を行い、１つのチャンクのデータについて、複数の複製がディスクキャッシュ上に置かれることを防ぐことで、ディスクキャッシュの使用容量が減り、各ディスクキャッシュに全体としてより多くのチャンクに対する複製を保持できるようになる。本発明は特に、大規模な統合ストレージシステムへの利用に好適である。【００１９】
以下、計算機システム１００の各構成要素や動作について記載する。図２に、統合ストレージ装置１１０の構成図を示す。統合ストレージ装置１１０は、プロセッサ（以下ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と略す）２１０、一次記憶装置であるメモリ２２０、記憶媒体インタフェース（記憶媒体Ｉ／Ｆ）２３０、二次記憶装置である、１以上の記憶媒体（２４０ａ、２４０ｂ、２４０ｃ。以下、記憶媒体２４０ａ、２４０ｂ、２４０ｃを総称して、「記憶媒体２４０」と呼ぶ）、ネットワークインタフェース（ネットワークＩ／Ｆ）２５０からなる。ＣＰＵ２１０は、メモリ２２０中の各種プログラムを読み込み、その指示に従い統合ストレージ装置１１０の各構成要素を制御する。ネットワークＩ／Ｆ２５０は、統合ストレージ装置１１０を（図１における）ネットワーク２０に接続するためのインタフェースで、統合ストレージ装置１１０（あるいはホスト仮想計算機１５０）は、ネットワークＩ／Ｆ２５０を介してクライアント１０との間の通信（ファイルアクセスリクエストの送受信等）を行う。【００２０】
メモリ２２０は、統合ストレージ装置１１０で動作するプログラムや、当該プログラムが用いる情報を保持するために用いられる領域と、ディスクキャッシュ２２６として用いられる領域とを有する。メモリ２２０には、ＤＲＡＭなどの揮発性記憶素子が用いられる。また、フラッシュメモリなどの不揮発性記憶素子を用いる構成もあり得る。また、プログラムや当該プログラムが用いる情報を保持するために用いられるメモリと、ディスクキャッシュ２２６として用いられる領域とを、物理的に別のメモリとする構成もあり得、その場合、プログラムや当該プログラムが用いる情報を保持するために用いられるメモリには揮発性記憶素子を用い、ディスクキャッシュ２２６として用いられる領域にはフラッシュメモリなどの不揮発性記憶素子を用いるという構成をとってもよい。【００２１】
メモリ２２０中の内部入出力受付プログラム２２１は、ホスト仮想計算機１５０からの入出力要求を受けて記憶媒体２４０に対する入出力処理を行う。また、内部入出力受付プログラム２２１はボリューム構築機能も提供する。ボリュームとは、複数の記憶媒体２４０中の記憶領域を集めて作成される、論理的な記憶領域である。ボリュームの構築方法として、例えば記憶媒体のストライピングや連結、Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋ（ＲＡＩＤ）、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ等の、様々な公知の手法を用いることができる。これらのボリューム構築機能により、統合ストレージ装置１１０は記憶媒体２４０の数や容量に依存しない、１または複数のボリュームを構築し、ホスト仮想計算機１５０に提供する。各ボリュームには、統合ストレージ装置１１０内で一意な識別番号を付されて管理されている。この識別番号をボリュームＩＤと呼ぶ。またボリュームは、チャンクと呼ばれる固定サイズの領域をアクセス単位としてホスト仮想計算機１５０等からアクセスされる。そして各チャンクを一意に特定できるように、各チャンクにはボリューム内の先頭チャンクから順に０、１、２、．．．の番号が付されており、この番号をチャンク番号と呼ぶ。本発明の実施例における統合ストレージ装置１１０において、チャンクのサイズは、ホスト仮想計算機１５０や内部入出力受付プログラム２２１等がアクセスするときの最小単位（データサイズ）であり、たとえば１ブロック（５１２バイト）、あるいは４ＫＢ等のサイズである。【００２２】
メモリ２２０中の記憶媒体入出力プログラム２２２は、記憶媒体インタフェース２３０を介して記憶媒体２４０中のデータを読み書きする。メモリ２２０中の統合キャッシュ管理プログラム２２３は、ボリューム中のどのチャンクのデータがどのディスクキャッシュ（ディスクキャッシュ２２６、ディスクキャッシュ３２５）上にキャッシュされているかを管理し、またボリューム中のチャンクのデータをディスクキャッシュ２２６上にキャッシュする等の制御を行うプログラムである。メモリ２２０中のキャッシュ管理テーブル２２４は、前記チャンクの配置情報を格納するテーブルである。メモリ２２０中の統計情報２２５は、統合ストレージ装置１１０や各ホスト仮想計算機１５０の性能情報や入出力処理の回数等を集計したもので、統合キャッシュ管理プログラム２２３がチャンクのキャッシュ先となるディスクキャッシュを決定するために用いる。【００２３】
メモリ２２０中のディスクキャッシュ２２６は、ボリューム中チャンクのデータを入出力する際に一時的に用いる領域であり、その後チャンクデータの複製を一時的に保持することにも用いるキャッシュ領域である。メモリ２２０中の仮想計算機プログラム２２７は、計算機上で複数の仮想計算機（図１のホスト仮想計算機１５０）を作成し動作させるプログラムであり、実現方式として資源の論理分割やハイパーバイザ方式等が知られている。仮想計算機プログラム２２７は仮想計算機に対し、ＣＰＵ・メモリ・ボリューム・内部通信路と言った計算機資源を提供する。メモリ２２０中の仮想計算機用メモリ領域２２８は、仮想計算機を複数作成する際、各々の仮想計算機用のメモリとして割り当てられる領域である。この割り当て情報は仮想計算機プログラム２２７が管理する。また、本実施例では、クライアント１０に対してファイルアクセスサービス等のサービスを提供する主体は、後述するホスト仮想計算機１５０であるが、別の実施形態として、ホスト仮想計算機１５０に加えて統合ストレージ装置１１０も、クライアント１０に対してボリュームアクセスあるいはファイルアクセスのサービスを提供する機能を備える構成もあり得、その場合でも本発明は有効である。【００２４】
記憶媒体２４０は、データを入出力する装置である。記憶媒体２４０として、光ディスク、磁気ディスク、テープ装置、フラッシュメモリ等の不揮発性メモリを用いた記憶媒体等を利用することができる。統合ストレージ装置１１０は、記憶媒体インタフェース２３０を介してこれら記憶媒体２４０のデータを入出力する。記憶媒体インタフェース２３０には、ATA(AT  Attachment)  interface、SCSI(Small  Computer  System  Interface)、SAS(Serial  Attached  SCSI)等が用いられる。【００２５】
図３に、ホスト仮想計算機１５０の構成図を示す。ホスト仮想計算機１５０は、仮想ＣＰＵ３１０、メモリ３２０、内部通信路インタフェース３３０、上位インタフェース（上位Ｉ／Ｆ）３４０からなる。仮想ＣＰＵ３１０、メモリ３２０、内部通信路インタフェース３３０、そして上位Ｉ／Ｆ３４０は、いわゆる仮想計算機内の構成要素であるから、統合ストレージ装置１１０と独立して物理的にこれら要素が存在するわけではなく、図２に示されている仮想計算機プログラム２２７がＣＰＵ２１０によって実行されることによって、統合ストレージ装置１１０が有するＣＰＵ２１０、メモリ２２０等の一部を用いて、仮想的に実現されているものである。【００２６】
仮想ＣＰＵ３１０は、メモリ３２０中の各種プログラムを読み込み、その指示に従いホスト仮想計算機１５０の各構成要素を制御する。【００２７】
メモリ３２０は、ホスト仮想計算機１５０で実行されるプログラムや、プログラムが用いる情報を保持するために用いられる。以下、メモリ３２０内に保持されるプログラムや情報の概要を説明する。【００２８】
アプリケーションプログラム３２１は、計算機システム１００の利用者が記憶媒体２４０中に格納されたデータを用いて実行したい計算処理を行うプログラムである。ボリューム入出力プログラム３２２は、内部通信路インタフェース３３０を介して、統合ストレージ装置１１０が記憶装置２４０から構築したボリューム３４０に入出力を行うプログラムである。キャッシュ管理プログラム３２３は、ボリューム中のチャンクデータをディスクキャッシュ３２５上にキャッシュする制御を行うプログラムである。また、統合キャッシュ管理プログラム２２３からの指示によって、ディスクキャッシュ３２５上のデータを統合キャッシュ管理プログラム２２３に転送する（コピーする）ことも行う。【００２９】
統計情報３２４は、ホスト仮想計算機１５０のボリューム３４０に対するアクセス状況(入出力処理の頻度等)を集計したもので、統合キャッシュ管理プログラム２２３やキャッシュ管理プログラム３２３がチャンクのキャッシュ先を決定する際に用いられる。【００３０】
ディスクキャッシュ３２５は、ボリューム３４０中のチャンクデータを入出力する際に一時的に用いる領域であり、その後チャンクデータの複製を一時的に保持することにも用いるキャッシュ領域である。なお、本発明の実施例における統合ストレージ装置１１０では、図１に示すようにホスト仮想計算機１５０が複数（たとえば３つ）存在するため、各ホスト仮想計算機１５０を区別して表記する場合には、ホスト仮想計算機１５０ａ、１５０ｂ、１５０ｃと表記する。またホスト仮想計算機１５０内のディスクキャッシュ３２５等の要素についても、区別して呼ぶ必要がある場合には、ディスクキャッシュ３２５ａ、３２５ｂ、３２５ｃ等と表記する。【００３１】
また、本発明の実施例１における統合ストレージ装置１１０においては、各ホスト仮想計算機１５０ａ、１５０ｂ、１５０ｃの有するディスクキャッシュ３２５ａ、３２５ｂ、３２５ｃと統合ストレージ装置１１０のディスクキャッシュ２２６とは、それぞれ異なる領域であって、各ホスト仮想計算機１５０のキャッシュ管理プログラム３２３は、自仮想計算機のディスクキャッシュ３２５のメモリ空間のみを管理する。つまり各ホスト仮想計算機１５０が有するディスクキャッシュ３２５は、他のホスト仮想計算機１５０からアクセスされない非共有の領域である。また、統合ストレージ装置１１０のディスクキャッシュ２２６も各ホスト仮想計算機１５０から直接アクセスできる領域ではない。【００３２】
内部通信路インタフェース３３０は、ボリューム３４０に対する入出力を行う、あるいは統合キャッシュ管理プログラム２２３とキャッシュ制御情報や統計情報３２４を通信しあうために用いられるインタフェースである。【００３３】
ボリューム３４０は、統合ストレージ装置１１０により形成された単一の論理的記憶領域であり、本発明の実施例における各ホスト仮想計算機１５０は、同一のボリューム３４０にアクセスすることができる（つまり、共有アクセス可能である）。また、図示されていないが、複数のホスト仮想計算機１５０から共有アクセスされるボリューム３４０とは別に、特定のホスト仮想計算機１５０のみがアクセスするボリュームが設けられていてもよい。【００３４】
図４に、各ホスト仮想計算機１５０と統合ストレージ装置１１０との関係、そしてボリューム上のチャンクとキャッシュの対応関係４００の一例を示す。各ホスト仮想計算機１５０はいずれも、ボリューム３４０上の各チャンク（Ｐ、Ｑ、Ｒ）にアクセスできる。また統合ストレージ装置１１０は、ボリューム３４０の各チャンクのデータ複製をディスクキャッシュ４２２上に保持（キャッシュ）することができる。各ホスト仮想計算機１５０がボリューム３４０内チャンクのデータを読み出す際、統合ストレージ装置１１０のディスクキャッシュ２２６上に読み出し対象のチャンクのデータがキャッシュされている場合には、ボリューム３４０を構成している記憶媒体（図２の２４０）にアクセスすることなく、ディスクキャッシュ２２６上に保持されているデータが読み出されて、ホスト仮想計算機１５０に転送される。【００３５】
また、各ホスト仮想計算機１５０も自身のディスクキャッシュ（３２５ａ、３２５ｂ、３２５ｃ）に、ボリューム３４０内チャンクのデータ複製を保持（キャッシュ）することができ、例えばホスト仮想計算機１５０ａがチャンクＰ４２１のデータを読み出す場合、チャンクＰのデータがディスクキャッシュ３２５ａにキャッシュされていれば、統合ストレージ装置１１０にアクセスすることなく、ディスクキャッシュ３２５ａにキャッシュされているチャンクＰ４２１のデータ複製（４２３）を読み出す。ただし、各ホスト仮想計算機１５０は、他のホスト仮想計算機１５０のディスクキャッシュ３２５内のデータを直接参照することはできない。たとえばホスト仮想計算機３２５ｂがボリューム３４０内のチャンクＰ４２１を読み出す場合、仮にチャンクＰ４２１のデータ複製がホスト仮想計算機３２５ａのディスクキャッシュ３２５ａに保持されていた（Ｐ（４２３）がディスクキャッシュ３２５ａ内に存在した）としても、ホスト仮想計算機３２５ｂがディスクキャッシュ３２５ａ内にあるデータＰ（４２３）を直接読み出すことはできない。この場合、データＰ（４２３）は一旦統合ストレージ装置１１０のディスクキャッシュ２２６へとコピーされ、ホスト仮想計算機３２５ｂはディスクキャッシュ２２６にコピーされたデータを読み出す。【００３６】
図５に、キャッシュ管理テーブル２２４の構成例を示す。キャッシュ管理テーブル２２４は、統合キャッシュ管理プログラム２２３によって維持管理される情報であり、ボリューム３４０（図３）上のチャンクが、どのキャッシュ領域にキャッシュされているかについての情報を格納している。キャッシュ管理テーブル２２４の各行（エントリ）５６１・５６２・５６３・５６４・５６５．．．には、各ボリューム３４０上のチャンクのうち、チャンクのデータの複製がディスクキャッシュ（２２６、３２５）上に格納（キャッシュ）されているチャンクについての情報が格納される。【００３７】
各エントリは、ボリュームＩＤ５１０、チャンク番号５２０、マスタ（所有者）５３０、メモリアドレス５４０、スレーブ（保持者）５５０の項目を有している。統合キャッシュ管理プログラム２２３は、各エントリを参照することで、各エントリのボリュームＩＤ５１０とチャンク番号５２０で特定されるボリューム上のチャンクのデータが、メモリアドレス５４０で特定されるメモリ領域（ディスクキャッシュ２２６または３２５上の領域）に格納されている（キャッシュされている）ことを認識する。なお、メモリアドレス５４０に格納されるアドレス情報は、チャンクのデータの複製がどのディスクキャッシュ（ディスクキャッシュ２２６、あるいは（複数の）ディスクキャッシュ３２５のいずれか）に存在するか、そして当該キャッシュ領域内のどの位置に存在するかを一意に特定できる情報である必要があり、一実施形態ではアドレス情報として、物理メモリアドレス（統合ストレージ装置１１０のメモリ２２０上のアドレス）が用いられる。また、後述するように、ボリュームＩＤ５１０、チャンク番号５２０で特定されるチャンクのデータ複製が、複数のディスクキャッシュ（３２５、２２６）に格納されることがある。その場合、ボリュームＩＤ５１０、チャンク番号５２０で特定されるチャンクのデータ複製を格納しているディスクキャッシュ（２２６、３２５）の全てのアドレスが、メモリアドレス５４０の欄に格納される。図５の行５６３に示されているエントリはその一例である。逆に、ボリュームＩＤ５１０、チャンク番号５２０で特定されるチャンクに対応するキャッシュ領域が、ディスクキャッシュ２２６または３２５に割り当てられていないこともあり、その場合には、メモリアドレス５４０には無効値（ＮＵＬＬなど）が格納される。【００３８】
マスタ５３０は、チャンクに対する最新データを保持する計算機（ホスト仮想計算機１５０あるいは統合ストレージ装置１１０）を表す情報であり、マスタである計算機は、キャッシュ上でチャンクのデータを更新し、キャッシュ上にいわゆるダーティ状態（記憶媒体上に最新データが反映されていない状態）でデータを保持する権限を有する。一方スレーブ５５０は、チャンクのデータ複製をディスクキャッシュに保持している計算機を表す情報であり、マスタである計算機の情報はスレーブ５５０にも登録されている。また、スレーブである計算機（ただしマスタではない計算機）は、データの更新権限がない。【００３９】
各チャンクに対し、マスタ５３０には最大でも１台の計算機しか登録できない。スレーブ５５０には複数台の計算機を登録することができる。たとえば図５のエントリ（行）５６３では、マスタ５３０の欄には「ストレージ」が登録され、スレーブ５５０の欄には、「Ａ，Ｂ，Ｃ」が登録されている。この場合、ボリュームＩＤ５１０が１でチャンク番号が０ｘ５０００で特定されるチャンクのデータ更新は、ストレージ（統合ストレージ装置１１０）のみが可能で、その他の計算機（ホスト仮想計算機１５０）は、参照のみが可能である。その他の計算機がデータ更新を行う場合には、統合キャッシュ管理プログラム２２３に自身の計算機がマスタとなるよう要求する必要があるが、この処理については後述する。【００４０】
続いて図６を用いて、統計情報３２４（２２５）について説明する。統計情報３２４（２２５）は、ボリューム３４０内の各チャンクに対する、ホスト仮想計算機１５０あるいは統合ストレージ装置１１０のアクセス状況を記録した情報で、各ホスト仮想計算機１５０がそれぞれ維持管理する情報である。統計情報３２４ａは、ホスト仮想計算機１５０ａのボリューム３４０へのアクセス状況を記録しており、同様に統計情報３２４ｂ、３２４ｃはそれぞれ、ホスト仮想計算機１５０ｂ、１５０ｃのボリューム３４０へのアクセス状況を記録している。各ホスト仮想計算機１５０あるいは統合ストレージ装置１１０がボリューム３４０内の各チャンクに対してアクセスするたびに、統計情報３２４（２２５）の内容は更新される。【００４１】
統計情報３２４は、ボリュームＩＤ５７１、チャンク番号５７２、最終ライト時刻５７３、最終リード時刻５７４、ライト頻度５７５、リード頻度５７６の項目を有するエントリ（行）が複数存在する。各エントリは、ホスト仮想計算機１５０の、ボリュームＩＤ５７１、チャンク番号５７２で特定されるチャンクに対するアクセス状況を記録しており、最終ライト時刻５７３、最終リード時刻５７４にはそれぞれ、ホスト仮想計算機１５０がチャンク（ボリュームＩＤ５７１、チャンク番号５７２で特定されるチャンク）に最後にライト、リードした時刻が格納される。ライト頻度５７５、リード頻度５７６にはそれぞれ、ホスト仮想計算機１５０が単位時間あたりにチャンクに対してライト、リード要求を発行した頻度（ｉｏｐｓ）の情報が格納される。【００４２】
続いて、図７に、ホスト仮想計算機１５０が実行する、ボリューム３４０上のチャンクに対するデータ読み込みを実行する時の処理の流れ（フロー６００）を示す。以下、ホスト仮想計算機１５０ａのアプリケーションプログラム３２１ａがボリューム３４０上のチャンクの読み出しを行う場合を例として説明するが、他のホスト仮想計算機１５０でも同様の処理が行われる。【００４３】
アプリケーションプログラム３２１ａがボリューム入出力プログラム３２２ａに対し、読み込み対象のチャンクを特定する情報（ボリュームＩＤとチャンク番号）を指定した読み込み命令を発行すると、ボリューム入出力プログラム３２２ａはキャッシュ管理プログラム３２３ａに対し、ホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａに、読み込み対象チャンクのデータ複製が保持されているか（チャンクがキャッシュされているか）判定させる（Ｓ６１０）。この判定では、キャッシュ管理プログラム３２３ａは統合キャッシュ管理プログラム２２３に対し、チャンクのデータ複製が、ホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａに保持されているか問い合わせを行い、統合キャッシュ管理プログラム２２３はこの問い合わせを受け付けると、キャッシュ管理テーブル２２４を参照して、チャンクのデータ複製が、ホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａに保持されているか判定する。具体的には、キャッシュ管理テーブル２２４内の、指定されたボリュームＩＤ５１０とチャンク番号５２０を有するエントリに、問い合わせをしてきたホスト仮想計算機１５０ａの情報がスレーブ５５０に登録されているかを判定する。【００４４】
ホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａに、読み込み対象チャンクのデータ複製が保持されている場合、Ｓ６５５に進む。ホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａに、読み込み対象チャンクのデータ複製が保持されていない場合、キャッシュ管理プログラム３２３ａはホスト仮想計算機１５０ａのディスクキャッシュ３２５ａに、複製チャンクを配置するための領域を確保する（Ｓ６１５）。キャッシュ領域の確保、解放等の管理方法は、周知の技術であるため、詳細な説明は省略するが、キャッシュ管理プログラム３２３ａはディスクキャッシュ３２５ａの未使用領域を管理する情報を維持管理しており、当該情報を用いて未使用領域を選択し、読み込み対象チャンクのデータ複製を格納する領域に利用する。また未使用領域が不足している場合には、ディスクキャッシュ３２５ａの使用中領域のいずれかの領域（たとえば最後にアクセスされてからの時間が最も経過している領域）を未使用領域へと変更し、今回の読み込み対象チャンクのデータ複製を格納する領域として利用する。またキャッシュ領域の確保と同時に、キャッシュ管理プログラム３２３ａは統合キャッシュ管理プログラム２２３に、確保領域の情報（キャッシュ上のアドレス、当該確保された領域に対応するチャンクのボリュームＩＤ、チャンク番号等、キャッシュ管理テーブル２２４を更新するために必要な情報）を通知し、それを受けた統合キャッシュ管理プログラム２２３は、キャッシュ管理テーブル２２４を更新する。キャッシュ管理テーブル２２４の更新処理は、新たに確保されたディスクキャッシュ３２５、２２６上の領域に対応するチャンクのエントリ内のメモリアドレス５４０の欄に、新たに確保されたディスクキャッシュ領域のメモリアドレス情報を格納し、またエントリのスレーブ５５０欄に、ディスクキャッシュ確保を行ったホスト仮想計算機１５０あるいは統合ストレージ１１０の情報を登録する。続いてボリューム入出力プログラム３２２ａは、内部通信路を介して統合ストレージ装置１１０に、読み込み対象のチャンクを特定する情報（ボリュームＩＤとチャンク番号）を指定して、チャンクデータの読み込み要求を出す（Ｓ６２０）。【００４５】
チャンクデータの読み込み要求を受けた統合ストレージ装置１１０では、主に内部入出力受付プログラム２２１が以下に説明するＳ６２５からＳ６５０の処理を行う。内部入出力受付プログラム２２１は、統合キャッシュ管理プログラム２２３に対し、統合ストレージ装置１１０内のディスクキャッシュ２２６に、読み込み対象チャンクに対応するデータ複製が保持されているか問い合わせる（Ｓ６２５）。データ複製が保持されているか問い合わせを受けた統合キャッシュ管理プログラム２２３は、Ｓ６１０で説明した処理と同様に、キャッシュ管理テーブル２２４に、指定されたボリュームＩＤ５１０とチャンク番号５２０を有するエントリが存在するか、また当該エントリが存在する場合に、統合ストレージ装置１１０の情報がスレーブ５５０に登録されているかを判定する。保持されている場合、統合ストレージ装置１１０のディスクキャッシュ２２６内データをホスト仮想計算機１５０に返せば良いのでＳ６５０に進む。保持されていない場合、統合キャッシュ管理プログラム２２３は統合ストレージ装置１１０のディスクキャッシュ２２６中に複製チャンクを配置するための領域を確保する（Ｓ６３０）。Ｓ６３０では、Ｓ６１５と同様、統合キャッシュ管理プログラム２２３は領域を確保するとともに、キャッシュ管理テーブル２２４の内容を更新する。【００４６】
領域を確保すると、内部入出力受付プログラム２２１は統合キャッシュ管理プログラム２２３に、読み込み対象チャンクのマスタであるホスト仮想計算機１５０が存在するか問い合わせる（Ｓ６３５）。統合キャッシュ管理プログラム２２３はこの問い合わせを受け付けると、キャッシュ管理テーブル２２４中の、読み込み対象チャンク（ボリュームＩＤ５１０とチャンク番号５２０で特定されるチャンク）についての情報が登録されているエントリを参照し、マスタ５３０に登録されている計算機（ホスト仮想計算機）の情報を取得して、内部入出力受付プログラム２２１に返却する（他のホスト仮想計算機１５０でチャンクデータがキャッシュされていないこともあり、その場合には、マスタである計算機は存在しない旨の応答が返却される）。内部入出力受付プログラム２２１は、統合キャッシュ管理プログラム２２３から返却された計算機の情報を参照することで、マスタであるホスト仮想計算機１５０が存在するか否かを判定できる。【００４７】
Ｓ６３５における判定の結果、マスタであるホスト仮想計算機１５０が存在する場合、内部入出力受付プログラム２２１はマスタであるホスト仮想計算機１５０に対し、マスタであるホスト仮想計算機１５０のディスクキャッシュ３２５上に保持されている読み込み対象チャンクのデータ複製を送信するよう要求し、マスタであるホスト仮想計算機１５０からデータを取得する。取得したデータは、Ｓ６３０で確保したディスクキャッシュ２２６上の領域に格納される（Ｓ６４０）。マスタであるホスト仮想計算機１５０が存在しない場合、つまり他のホスト仮想計算機１５０が複製チャンクを持たない場合、内部入出力受付プログラム２２１は記憶媒体入出力プログラム２２２に指示をして、ボリューム３４０を構成する記憶媒体２４０から対象チャンクのデータを読み出させ、Ｓ６３０で確保したディスクキャッシュ２２６上の領域に格納する（Ｓ６４５）。【００４８】
その後、内部入出力受付プログラム２２１はディスクキャッシュ２２６上に格納されたデータをホスト仮想計算機１５０ａに返却し、ホスト仮想計算機１５０ａのボリューム入出力プログラム３２２ａは、Ｓ６１５で確保したディスクキャッシュ３２５ａ上に内部入出力受付プログラム２２１から受け取ったデータを格納する（Ｓ６５０）。ここまでの手順により、ホスト仮想計算機１５０のディスクキャッシュ３２５上に対象チャンクのデータが格納される。【００４９】
続いてボリューム入出力プログラム３２２はアプリケーションプログラム３２１にデータを転送する（Ｓ６５５）。最後に、統合キャッシュ管理プログラム２２３はフロー１０００に示すキャッシュ再配置処理を行う（Ｓ６６０）。また、統計情報の更新を行う。以上の手順により、ボリューム３４０上のチャンク読み込みを完了する。なお、キャッシュ再配置処理については後述するが、後述する書き込み処理の時だけキャッシュ再配置処理を行うようにして、読み込み処理（Ｓ６６０）では、必ずしもキャッシュ再配置処理を行わなくともよい。【００５０】
図８に、ホスト仮想計算機１５０によるボリューム３４０上へのチャンク書き込み処理フロー６００を示す。以下の処理では、ディスクキャッシュはWrite-Backキャッシュとして振る舞うことを前提とする。すなわち、書き込みデータはディスクキャッシュに書き込まれた時点で書き込み処理が完了するとみなす。【００５１】
アプリケーションプログラム３２１がボリューム入出力プログラム３２２にチャンクデータ書き込みを要求すると、最初にボリューム入出力プログラム３２２は統合キャッシュ管理プログラム２２３に対し、フロー１０００に示すキャッシュ再配置処理を実行するよう要求する（Ｓ７１０）。次に、キャッシュ管理プログラム３２３はディスクキャッシュ３２５上に書き込み対象チャンクの格納領域が無い場合、ディスクキャッシュ３２５上に領域を確保する（Ｓ７１５）。この領域を確保する処理は、Ｓ６１５と同様である。そして、書き込みするデータをＳ７１５で確保した領域に書き込む（Ｓ７２０）。続けて、キャッシュ管理プログラム３２３は統合キャッシュ管理プログラム２２３に書き込み対象チャンクのマスタである計算機の情報を問い合わせる（Ｓ７２５）。書き込みを行うホスト仮想計算機１５０自身がマスタである場合、この時点で書き込み処理は完了し、最後にフロー１０００に示すキャッシュ再配置を行って終了する（Ｓ７５５）。書き込みを行うホスト仮想計算機１５０自身がマスタではない場合、ボリューム入出力プログラム３２２は内部通信路を介して、書き込み対象チャンクのボリュームＩＤとチャンク番号を指定して、統合ストレージ装置１１０に対してデータ書き込み要求を出す（Ｓ７３０）。チャンクデータの書き込み要求を受けた統合ストレージ装置１１０の内部入出力受付プログラム２２１は、統合キャッシュ管理プログラム２２３に対し、統合ストレージ装置１１０内のディスクキャッシュ２２６に、書き込み対象チャンクに対応するキャッシュ領域が保持されているか（統合ストレージ装置１１０の情報がキャッシュ管理テーブル２２４のスレーブ５５０に登録されているか）、問い合わせ（Ｓ７３３）、ディスクキャッシュ２２６上に複製チャンクを格納する領域が無い場合、複製チャンクを配置するための領域を確保する（Ｓ７３５）。そして、内部入出力受付プログラム２２１が受け取った書き込みデータをＳ７３５で確保した領域に書き込む（Ｓ７４０）。続けて、内部入出力受付プログラム２２１は統合キャッシュ管理プログラム２２３に対象チャンクのマスタが統合ストレージ装置１１０自身であるか問い合わせる（Ｓ７４５）。マスタが統合ストレージ装置１１０自身ではない場合、記憶媒体入出力プログラム２２２は、Ｓ７４０で書き込んだデータを、ボリューム３４０を構成する記憶媒体２４０上に書き込む。この時点で書き込み処理は完了し、最後にフロー１０００に示すキャッシュ再配置処理、統計情報の更新を行って終了する（Ｓ７５５）。【００５２】
図９に、統合ストレージ装置１１０によるボリューム３４０上のチャンクに対する読み込み処理フロー８００を示す。この処理フロー８００は、統合ストレージ装置１１０自身が記憶媒体間データコピーやデータ整合性検証等の機能を実現する目的でボリューム上のデータを参照する際に実行される。【００５３】
処理フロー８００は、処理フロー６００から一部の処理が削除されたものであって、各処理は、処理フロー６００で行われる内容と同内容である。すなわち、Ｓ８２５はＳ６２５と同等の判断を行う。Ｓ８３０ではＳ６３０と同等の処理を行う。Ｓ８３５ではＳ６３５と同等の判断を行う。Ｓ８４０ではＳ６４０と同等の処理を行う。Ｓ８４５ではＳ６４５と同等の処理を行う。Ｓ８６０ではＳ６６０と同等の処理を行う。【００５４】
図１０に、統合ストレージ装置１１０によるボリューム３４０上のチャンクに対する書き込み処理フロー９００を示す。この処理フロー９００は、統合ストレージ装置１１０自身が記憶媒体間データコピー等の機能を実現する目的でボリューム上のデータを上書きする際に実行される。【００５５】
処理フロー９００の中で行われる処理は、処理フロー７００の中で行われる処理のうち一部の処理が行われる。すなわち、Ｓ９１０ではＳ７１０と同等の処理を行う。Ｓ９３３はＳ７３３と同等の判断を行い、Ｓ９３５とＳ９４０ではそれぞれ、Ｓ７３５とＳ７４０と同等の処理を行う。Ｓ９４５はＳ７４５と同等の判断、つまり書き込みチャンクのデータについて、統合ストレージ装置１１０がマスタであるかの判断を行う。統合ストレージ装置１１０がマスタである場合には何もせず、Ｓ９５５に進むが、統合ストレージ装置１１０がマスタでない場合、Ｓ９５０にてボリューム（記憶媒体）へのデータ書き込みを行う。Ｓ９５５ではＳ７５５と同様、キャッシュ再配置処理、統計情報の更新を行う。【００５６】
図１１にキャッシュ再配置処理フロー１０００を示す。この処理フロー１０００は、ライト処理の最初、あるいはリード・ライト処理の最後（処理フロー６００・７００・８００・９００におけるＳ６６０・Ｓ７１０・Ｓ７５５・Ｓ８６０・Ｓ９１０・Ｓ９５５）に、実行を要求される。【００５７】
処理フロー１０００において、まず統合キャッシュ管理プログラム２２３は各ホスト仮想計算機１５０中の統計情報３２４及び統合ストレージ装置１１０中の統計情報２２５を取得する（Ｓ１０１０）。【００５８】
次に、統合キャッシュ管理プログラム２２３は得られた統計情報２２５・３２４やキャッシュ管理テーブル２２４の情報を元に、キャッシュ配置を再計算する（Ｓ１０２０）。このキャッシュ配置再計算処理では、ディスクキャッシュ２２６・３２５の領域の利用効率を向上させ、かつ各ホスト仮想計算機のアプリケーションプログラム３２１の実行速度を向上させることができるように、ディスクキャッシュ上データ配置を決定するとともに、処理対象のチャンクのマスタをどの計算機にするか決定する。キャッシュ配置の再計算処理の結果、処理対象チャンクのマスタとなる計算機（ホスト仮想計算機１５０または統合ストレージ装置１１０）と、削除すべき（不要な）キャッシュ領域が決定される。【００５９】
キャッシュ配置再計算処理の詳細を説明する。まず本発明の実施例１における、キャッシュ配置の基本的な考え方について、図４を用いて一例を挙げる。先に述べたとおり、ボリューム上の特定チャンクのデータを複数のホスト仮想計算機１５０がそれぞれキャッシュしている状態はメモリの使用効率を悪化させるため、本発明の統合ストレージ装置１１０は、複数のホスト仮想計算機１５０がそれぞれボリューム上の同一チャンクのデータをキャッシュしている状態を解消させる。またその際、データのキャッシュ先の選択によって、ボリュームにアクセスするアプリケーションプログラム３２１等の性能に違いが出る場合があるため、できるだけアプリケーションプログラム３２１等のアクセス性能が良くなるように、キャッシュ先を選択する。【００６０】
図４において、ホスト仮想計算機１５０ａのみが、チャンクＰ（４２１）をアクセスしていると判断される場合、統合ストレージ装置１１０はこのチャンクの複製データＰ（４２３）をホスト仮想計算機１５０ａ内のディスクキャッシュ３２５ａ内に配置し、統合ストレージ装置１１０内の複製チャンクＰ（４２２）は削除する。この場合、ホスト仮想計算機１５０ａによるチャンクＰ（４２１）の参照・更新処理はホスト仮想計算機１５０ａ内で完了し、Ｓ６２０及びＳ７３０以降の処理を省略できるのでホスト仮想計算機１５０ａ中のアプリケーションプログラム３２１の実行速度が向上する。なお、たとえばホスト仮想計算機１５０ｂが、チャンクＰ（４２１）をアクセスしたが、ホスト仮想計算機１５０ｂのアクセス統計を考慮すると、ホスト仮想計算機１５０ｂが今後当該チャンクＰ（４２１）をアクセスする可能性が低く、ホスト仮想計算機１５０ａのみがチャンクＰ（４２１）をアクセスすると判断される場合（ホスト仮想計算機１５０ａが、チャンクＰ（４２１）をアクセスする可能性が高い場合）は、やはりチャンクの複製データＰ（４２３）はホスト仮想計算機１５０ａのみにあったほうが良いため、ディスクキャッシュ３２５ａのみに配置させる。【００６１】
一方、チャンクＱ（４３１）を各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃがアクセスすると判断される場合、統合ストレージ装置１１０内の複製チャンクＱ（４３２）を残し、ホスト仮想計算機内の複製チャンクＱ（４３３ａ・４３３ｂ・４３３ｃ）は削除して良い。これは、先のチャンクＰ（４２１）の例のように、いずれかのホスト仮想計算機に複製チャンクＱを配置すると、各ホスト仮想計算機がチャンクＱ（４３１）の入出力を行う際、毎回Ｓ６４０によるデータ取得等が発生し、処理速度が低下する。そのため、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃからアクセスされることが多いチャンクは、統合ストレージ装置１１０内のディスクキャッシュ２２６にチャンクデータの複製を配置する。【００６２】
ただし、データの更新処理（処理フロー７００あるいは９００）を実行すると、更新対象のチャンクの最新データは、更新処理を実施するホスト仮想計算機１５０あるいは統合ストレージ装置１１０のディスクキャッシュ（２２６、３２５）に格納されるため、当該チャンクのマスタ計算機は、更新処理を実施するホスト仮想計算機１５０あるいは統合ストレージ装置１１０でなければならない。そのため本発明の実施例１におけるキャッシュ再配置処理では、データの更新処理（処理フロー７００あるいは９００）の実行直前に、更新処理を実施するホスト仮想計算機１５０あるいは統合ストレージ装置１１０のいずれかを強制的にマスタにし、その他のホスト仮想計算機１５０が保持しているチャンクの複製は削除させる（ただし、今後再アクセスされる可能性が低いチャンクについては、ホスト仮想計算機１５０あるいは統合ストレージ装置１１０のいずれにもキャッシュさせない、つまりマスタとなる計算機を存在させないという選択肢もある）。【００６３】
本発明の実施例１における統合ストレージ装置１１０では、上で述べたような考え方に基づいて、キャッシュ配置の再計算を行う。ただしキャッシュ再配置処理１０００は、図７のリード処理の最後（Ｓ６６０）、図８のライト処理の最初（Ｓ７１０）や最後（Ｓ７５５）等、様々な場面で実行される処理であるが、どの場面で実行されるかによって、キャッシュ配置再計算の処理内容も異なってくる。具体的には、図１０のＳ９１０から呼び出された場合、図８のＳ７１０から呼び出された場合、そしてそれ以外の処理（図７のＳ６６０、図８のＳ７５５、図９のＳ８６０、図１０のＳ９５５）から呼び出された場合、のそれぞれで異なる処理が行われる。以下、それぞれの場合について説明する。【００６４】
図１１のＳ９０１から呼び出された場合、つまり統合ストレージ装置１１０によるボリューム３４０上のチャンクに対する書き込み処理の最初に行われるキャッシュ再配置処理から呼び出された場合、統合ストレージ装置１１０をマスタとするか、しないかを決定する（なお、統合ストレージ装置１１０をマスタとしない場合、ディスクキャッシュ２２６上のライト対象チャンク用のキャッシュ領域は削除する。また他のいずれのホスト仮想計算機１５０もマスタにはしない）。統合キャッシュ管理プログラム２２３は統計情報２２５を参照して、アクセス対象のチャンクが統合ストレージ装置１１０によって今後アクセスされる可能性があるか判定する。一例としては、統合ストレージ装置１１０によるアクセス対象のチャンクへのアクセス頻度（５７５、５７６）が所定値（第１の閾値）未満であるか、現在時刻と最終アクセス時刻（５７３、５７４）との差が所定時間（第２の閾値）以上であるかを判定する。アクセス頻度（５７５、５７６）が所定値未満であり、かつ現在時刻と最終アクセス時刻（５７３、５７４）との差が所定時間以上である場合、対象のチャンクに再びアクセスする可能性は低い（キャッシュの効果が薄い）と推測されるため、マスタなし（対象チャンクデータがキャッシュされている領域は全て削除する）とすることを決定する。そうでない場合、統合ストレージ装置１１０をマスタと決定し、全てのホスト仮想計算機１５０の対象チャンクデータ複製は削除することを決定する。なお、この判定方法は一例であって、その他の例として、アクセス頻度のみを用いて判定する、現在時刻と最終アクセス時刻との差のみを用いて判定する、その他の情報を判定に用いる等、様々な判定例を採用することが可能である。【００６５】
続いて図８のＳ７１０から呼び出された場合の処理を説明する。この場合、チャンク書き込み処理を行っているホスト仮想計算機１５０あるいは統合ストレージ装置１１０のいずれかをマスタと決定する処理を行う。以下、ホスト仮想計算機１５０ａがボリューム３４０上へのチャンク書き込み処理を開始し、その処理のＳ７１０において、キャッシュ再配置処理１０００が呼び出された場合を例にとって説明する。【００６６】
統合キャッシュ管理プログラム２２３は、統計情報２２５及びホスト仮想計算機１５０の統計情報３２４を参照して、アクセス対象のチャンクが統合ストレージ装置１１０またはホスト仮想計算機１５０ａによって今後アクセスされる可能性があるか判定する。判定方法の一例としては、ホスト仮想計算機１５０ａ以外のホスト仮想計算機１５０ｂ、１５０ｃによる、対象のチャンクへのアクセス頻度（５７５、５７６）が所定値未満であるか、現在時刻と最終アクセス時刻（５７３、５７４）との差が所定時間以上であるかを判定する。アクセス頻度（５７５、５７６）が所定値未満であり、現在時刻と最終アクセス時刻（５７３、５７４）との差が所定時間以上である場合、ホスト仮想計算機１５０ａ以外のホスト仮想計算機１５０は、対象のチャンクに今後アクセスする可能性は低いと推測される。そのためホスト仮想計算機１５０ａをマスタにすることを決定する。またそれ以外のディスクキャッシュ（３２５、２２６）上の対象チャンクデータ複製は削除する旨を決定し、Ｓ１０２５０に進む。アクセス頻度（５７５、５７６）が所定値以上、あるいは現在時刻と最終アクセス時刻（５７３、５７４）との差が所定時間未満である場合、ホスト仮想計算機１５０ａ以外のホスト仮想計算機１５０が、対象のチャンクに今後アクセスする可能性は高いと推測される。そのため統合ストレージ装置１１０をマスタと決定し、全てのホスト仮想計算機１５０の対象チャンクデータ複製は削除することを決定する。【００６７】
最後にキャッシュ再配置処理が、図７のＳ６６０、図９のＳ７５５、図１０のＳ８６０、図１１のＳ９５５から呼び出された場合について説明する。この場合、統合キャッシュ管理プログラム２２３は、統計情報２２５及びホスト仮想計算機１５０ａの統計情報３２４を参照して、特定の仮想計算機のみが対象のチャンクをアクセスしているのか、あるいは複数の仮想計算機が対象のチャンクをアクセスしているかを判断（正確には推定）する。判断の一例として、全ホスト仮想計算機１５０、統合ストレージ１１０の中で、対象のチャンクへのアクセス頻度（５７５、５７６）が最も高いホスト仮想計算機１５０または統合ストレージ１１０（以下、本段落では「計算機」と略記する）、そして２番目にアクセス頻度が高い計算機を選定する。そして、対象のチャンクへのアクセス頻度が最も高い計算機のアクセス頻度と、２番目にアクセス頻度が高い計算機のアクセス頻度との差が所定値以上であるか判定し、所定値以上の場合、対象のチャンクへのアクセス頻度が最も高い計算機のみが対象チャンクをアクセスしていると判断し、この計算機をマスタと決定する。そしてそれ以外の計算機にキャッシュされている対象チャンクのデータ複製は削除すると決定する。アクセス頻度の差が所定値未満の場合には、複数の計算機が対象のチャンクへアクセスするものと判断し、統合ストレージ１１０をマスタと決定する。そしてそれ以外の計算機にキャッシュされている対象チャンクのデータ複製は削除すると決定する。以上が、キャッシュ再配置計算の処理内容である。【００６８】
Ｓ１０２０のキャッシュ配置再計算結果を受け、統合キャッシュ管理プログラム２２３は不要キャッシュ領域の回収とキャッシュ管理テーブル２２４の更新を行う（Ｓ１０３０）。具体的には、まずキャッシュ配置再計算の結果、マスタである計算機（ホスト仮想計算機１５０または統合ストレージ装置１１０）が変更される場合であって、かつマスタである計算機が自身のディスクキャッシュ（２２６、３２５）にアクセス対象のチャンク用のキャッシュ領域を確保している場合、統合キャッシュ管理プログラム２２３は、キャッシュ管理プログラム３２３や記憶媒体入出力プログラム２２２に指示して、当該キャッシュ領域上のデータを統合ストレージ装置１１０の記憶媒体に書きださせる。続いてキャッシュ管理テーブル２２４から、削除すべきキャッシュ領域の情報（図５のメモリアドレス５４０の情報が該当する）を削除し、またマスタ５３０に登録されている計算機の情報を、Ｓ１０２０で決定された内容へと更新する（なおＳ１０２０でマスタなしと決定された場合は、マスタ５３０の内容を無効値にする）。最後にキャッシュ管理テーブル２２４の内容のうち、Ｓ１０３０で更新されたエントリの情報を各ホスト仮想計算機１５０のキャッシュ管理プログラム３２３に通知する（Ｓ１０４０）。各ホスト仮想計算機１５０のキャッシュ管理プログラム３２３はこの情報を受信すると、キャッシュしておく必要のないデータの格納されている領域を未使用領域として管理するように、未使用領域の管理情報を変更する。これでキャッシュ再配置処理が終了する。【００６９】
以上で、本発明の実施例１における統合ストレージ装置１１０の構成と処理内容についての説明を終了する。続いて本発明の効果について、図４を用いて説明する。本発明の実施例１における統合ストレージ装置１１０では、ホスト仮想計算機１５０ａだけがチャンクＰ（４２１）を参照する場合には、ホスト仮想計算機１５０ａのディスクキャッシュ３２５ａのみにチャンクＰのデータ複製を保持し、その他のディスクキャッシュ（３２５ｂ、３２５ｃ、２２６）上にチャンクＰのデータ複製が存在する場合、これらのデータ複製は削除される。また各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃがいずれもチャンクＱ（４３１）を参照する場合、ディスクキャッシュ２２６のみにチャンクＱのデータ複製（４３２）を保持するようにし、その他のディスクキャッシュ上にあるデータは削除される。【００７０】
一方、本発明のキャッシュ再配置処理を適用していない計算機システムの場合には、ボリューム３４０上のチャンクＰ（４２１）に対するリード要求を発行すると、ストレージ装置１１０上はディスクキャッシュ２２６にチャンクＰのデータ複製（４２２）を格納する。さらに、統合ストレージ装置１１０のディスクキャッシュ２２６からホスト仮想計算機３２５ａにチャンクＰのデータ複製（４２２）が転送され、ホスト仮想計算機１５０ａのディスクキャッシュ３２５ａ上にもチャンクＰのデータ複製（４２３）が格納される（つまりチャンクＰの複製がディスクキャッシュ２２６、３２５ａに重複して存在することになる）。また各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃがいずれもチャンクＱ（４３１）を読み出した場合、統合ストレージ装置１１０のディスクキャッシュ２２６上に複製チャンクＱ（４３２）を格納するほか、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃ上のディスクキャッシュ３２５ａ・３２５ｂ・３２６ｃにも複製チャンクＱ（４３３ａ・４３３ｂ・４３３ｃ）が格納される、つまり同一チャンクに対するデータ複製が多数、ディスクキャッシュ上に残されることになる。【００７１】
本発明の実施例１における統合ストレージ装置１１０では、上に述べた処理により、ボリューム内の同一チャンクの複製データを複数のホスト仮想計算機で保持することを避けることができ、限られたディスクキャッシュ領域を効率良く利用することを可能とする。また各ホスト仮想計算機１５０のチャンクに対するアクセス状況に応じて、チャンクデータ複製のディスクキャッシュ上の配置場所を決定するため、アプリケーションプログラム３２１の実行速度を向上させることができる。【００７２】
[変形例]
前記キャッシュ再計算処理フロー１０００によると、各チャンクの複製チャンクは単一のディスクキャッシュに配置されるが、ディスクキャッシュ領域に余裕があれば、アプリケーションプログラム３２１等の実行速度向上のために、データ配置方針を工夫する変形例も考えられる。図１２を用いて、キャッシュ複製処理１０５０について説明する。この処理は、上で説明したキャッシュ再配置処理１０００とは独立して、定期的(数時間に１回等)に、あるいはユーザからの指示があった時に、統合キャッシュ管理プログラム２２３が実行する。【００７３】
キャッシュ複製処理では、キャッシュ管理テーブル２２４に登録されている全チャンクについて、キャッシュされているデータの複製を作成するか判定する処理を行う。Ｓ１０５００では、カウンタＮを用意し、Ｎを初期化する(０にする)。続いてＳ１０５０１では、キャッシュ管理テーブル２２４のＮ番目のエントリを参照し、当該エントリに登録されているチャンクの位置情報（ボリュームＩＤ５１０、チャンク番号５２０）、当該チャンクのマスタの情報（マスタ５３０）、メモリアドレス５４０を取得する。【００７４】
Ｓ１０５０２では、選択されたエントリに登録されているチャンク（ボリュームＩＤ５１０、チャンク番号５２０で特定されるチャンク）はキャッシュされているか判定する。具体的にはメモリアドレス５４０に有効な値が格納されているか判定し、キャッシュされていると判定された場合にはＳ１０５０３に進み、キャッシュされていないと判定された場合にはＳ１０５０７へと進む。【００７５】
Ｓ１０５０３では、統計情報３２４を参照し、マスタ以外のすべてのホスト仮想計算機１５０において、当該チャンクに更新があるか判定する。判定方法の一例として、ライト頻度５７５が０か否かを判定する（あるいは最終ライト時刻が現在時刻より所定時間以上前であるかを判定するようにしてもよい）。いずれかのホスト仮想計算機１５０で更新があると判定された場合、Ｓ１０５０７に進み、当該チャンクは複製しないこととする。いずれのホスト仮想計算機１５０においても更新がないと判定された場合、Ｓ１０５０４に進む。【００７６】
Ｓ１０５０４〜Ｓ１０５０６の処理は、マスタ以外のホスト仮想計算機１５０毎に実施する処理である。Ｓ１０５０４では、統計情報３２４を参照し、マスタ以外のホスト仮想計算機１５０において、当該チャンクを参照しているか（リードアクセスが行われているか）判定する。判定方法の一例として、リード頻度５７５が所定値以上か否かを判定する（あるいは現在時刻と最終リード時刻との差が所定時間以内であるかを判定するようにしてもよい）。いずれかのホスト仮想計算機１５０において、当該チャンクを参照していると判定された場合、Ｓ１０５０５に進み、そうでない場合にはＳ１０５０７に進む。【００７７】
Ｓ１０５０５では、マスタ以外のホスト仮想計算機１５０において、ディスクキャッシュ３２５に未使用領域があり、チャンクデータの複製を格納可能か判断する。具体的には統合キャッシュ管理プログラム２２３がマスタ以外のホスト仮想計算機１５０のキャッシュ管理プログラム３２３に問い合わせ、ディスクキャッシュ３２５の未使用領域サイズが、所定値以上であるかを判定する。未使用領域があると判定された場合には、Ｓ１０５０６に進み、そうでない場合にはＳ１０５０７に進む。【００７８】
Ｓ１０５０６では、Ｓ１０５０５における判定の結果、ディスクキャッシュ３２５に未使用領域があると判定されたホスト仮想計算機１５０のディスクキャッシュ３２５上に、チャンクデータの複製を作成する処理を行う。具体的には、統合キャッシュ管理プログラム２２３がマスタのホスト仮想計算機１５０のキャッシュ管理プログラム３２３に指示して、マスタのホスト仮想計算機１５０のディスクキャッシュ３２５上のチャンク複製を、統合ストレージ１１０のディスクキャッシュ２２６にコピーさせる。そしてディスクキャッシュ２２６から各ホスト仮想計算機１５０のディスクキャッシュ３２５へとコピーする。そしてキャッシュ管理テーブル２２４の内容を更新する。なお、処理対象としているチャンクのマスタが統合ストレージ装置１１０である場合には、統合ストレージ装置１１０のディスクキャッシュから各ホスト仮想計算機１５０のディスクキャッシュ３２５へとコピーする。【００７９】
Ｓ１０５０７では、カウンタＮを１増加させ、Ｓ１０５０８に進む。Ｓ１０５０８では、キャッシュ管理テーブル２２４内の全てのエントリについて処理を行ったか判定し、まだ処理していないエントリが存在する場合には、Ｓ１０５０２に戻る。全てのエントリについて処理を行った場合には処理を終了する。【００８０】
この複製先決定処理を実行することにより、例えば図４のチャンクＱ（４３１）について、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃのディスクキャッシュ領域に未使用領域があり、かつチャンクＱ（４３１）が参照のみされて更新されない場合、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃそれぞれのディスクキャッシュ３２５に、複製チャンクＱ（４３３ａ・４３３ｂ・４３３ｃ）が保持されることになる。この場合、各ホスト仮想計算機１５０によるチャンクＱ（４３１）の参照処理は各ホスト仮想計算機１５０内で完了し、Ｓ６２０以降の処理を省略できるので、各ホスト仮想計算機１５０ａ・１５０ｂ・１５０ｃ中のアプリケーションプログラム３２１の実行速度が向上する。
【実施例２】
【００８１】
続いて本発明の実施例２における計算機システムについて説明する。本実施例における統合ストレージシステム１１０や、本実施例における統合ストレージシステム１１０の適用先の計算機システム１００の構成は、実施例１におけるものとほぼ同様である。以下では実施例１における統合ストレージシステム１１０との差異について説明する。【００８２】
統合ストレージ装置１１０が備える仮想計算機プログラム２２７は仮想計算機用メモリ領域２２８とメモリ２２０内の対応づけを行う。ここで、ページングやセグメント方式によるメモリマッピング技術を適用すると、仮想計算機用メモリ領域２２８とメモリ２２０の各領域について、異なるメモリ空間を有する仮想計算機同士で同一内容を参照することができる。この際、複数の仮想計算機のメモリ領域を同一のメモリ２２０上の領域に対応づけ、メモリ上のデータを共有する構成をとることができる。【００８３】
図１３に、統合ストレージ装置１１０のメモリ２２０における物理メモリ空間１１００と、ホスト仮想計算機のメモリ空間１１３０ａ・１１３０ｂの対応例を示す。【００８４】
物理メモリ空間１１００のうち統合ストレージ装置領域１１１０は、メモリ２２０のうち統合ストレージ装置１１０のみが参照する内容を含む。例えば統合ストレージ装置１１０が、ホスト仮想計算機１５０が使用するボリュームとは異なるボリュームを形成し、ホスト仮想計算機１５０とは独立にクライアント１０にボリュームアクセスサービス等を提供する場合のキャッシュメモリ領域が該当する。また内部入出力受付プログラム２２１や統合キャッシュ管理プログラム２２３の記憶される領域も統合ストレージ装置領域１１１０に含まれる。仮想計算機用メモリ領域２２８ａ・２２８ｂは、それぞれホスト仮想計算機のメモリ空間１１３０ａ・１１３０ｂ内の領域１１４０ａ・１１４０ｂに対応づけられる。また、キャッシュ管理テーブル２２４はそれぞれホスト仮想計算機のメモリ空間１１３０ａ・１１３０ｂ内の領域１１５０ａ・１１５０ｂに対応づけられる。【００８５】
実施例１においては統合ストレージ装置１１０と各ホスト仮想計算機１５０は別々にディスクキャッシュ２２６・３２５を保持していたが、前述のメモリ領域の対応づけにより、単一の共有ディスクキャッシュ１１２０を統合ストレージ装置１１０と各ホスト仮想計算機１５０が共有するようにする。この対応づけにより、各ホスト仮想計算機１５０は自身のメモリ空間１１３０に対応付けられた共有ディスクキャッシュ領域１１２０を参照することで、他のホスト仮想計算機１５０によって共有ディスクキャッシュ領域１１２０上に格納されたチャンクデータの複製であっても、メモリ上で参照可能となる。【００８６】
続いて、実施例２における統合ストレージ装置１１０が管理するキャッシュ管理テーブル２２４’について、図１４を用いて説明する。実施例２におけるキャッシュ管理テーブル２２４’は、実施例１のキャッシュ管理テーブル２２４内の各項目のうち、マスタ５３０、スレーブ５５０の項目が削除され、新たな項目としてキャッシュ要否５４０’が追加されたテーブルである。キャッシュ要否５４０’の欄は、データをキャッシュするべきか否かを表す項目で、キャッシュ要否５４０’の欄に値１が格納されている場合、当該エントリに対応するチャンクのデータはキャッシュされるべきことを意味し、値０が格納されているエントリの場合、当該エントリに対応するチャンクのデータはキャッシュしないようにする。具体的な用いられ方は後述する。【００８７】
また、実施例１のキャッシュ管理テーブル２２４では、図５の行５６３のように、メモリアドレス５４０の欄に複数のメモリアドレスが登録されているエントリが存在していたが、実施例２の統合ストレージ装置１１０の場合、メモリアドレス５４０の欄に複数のメモリアドレスが登録されることはない。これは先に述べたとおり、実施例２の場合にはディスクキャッシュ領域が、複数のホスト仮想計算機１５０、統合ストレージ１１０の間で共有されているため、チャンクのデータ複製が、ディスクキャッシュの複数箇所に存在することはないからである。【００８８】
以下、図１５から図１８を用いて、ボリューム３４０上のチャンクに対する読み込みないし書き込み処理を説明する。これらの処理は実施例１で説明した処理とほぼ同様であるが、キャッシュが共有キャッシュであるため、実施例１で説明したキャッシュ再配置処理のように、重複して存在するキャッシュデータを削除する処理は存在しない。実施例２における読み込みまたは書き込み処理では、キャッシュ再配置処理に代えてキャッシュ要否判定処理が行われる点が、実施例１における処理と異なる主な点である。【００８９】
読み込みまたは書き込み処理の流れを説明する前に、キャッシュ要否判定処理について説明する。キャッシュ要否判定処理は、アクセス（読み込みないし書き込み）対象のチャンクをキャッシュすべきか否かを決定する。アクセス対象チャンクのキャッシュ要否の判断には、様々な方法を用いることができる。一例として、NFSやSCSI等のプロトコルでは、書き込みデータのキャッシュを許さず、最終記憶媒体まで書き込ませるコマンドが規定されているので、統合ストレージ装置１１０はそのコマンドの到来を、キャッシュ要否判定に用いる方法があり得る。具体的には、上で説明したようなコマンドを受信した場合、キャッシュ管理テーブル２２４’のアクセス対象チャンクに対応するエントリ中の、キャッシュ要否５４０’の欄に値０を格納し、またキャッシュ領域を削除する（メモリアドレス５３０’の値を無効値にする）。あるいはそれらのコマンドの累計発生回数を性能情報（統計情報）としてカウントし、当該累計発生回数が所定の閾値より多くなった場合に、キャッシュ管理テーブル２２４’のアクセス対象チャンクに対応するエントリ中の、キャッシュ要否５４０’の欄に値０を格納し、またキャッシュ領域を削除する（メモリアドレス５３０’の値を無効値にする）。【００９０】
また、別の実施形態として、チャンクへのアクセス間隔をキャッシュ要否の判断に用いる方法もあり得る。その場合、統合キャッシュ管理プログラム２２３は、統計情報２２５及びホスト仮想計算機１５０の統計情報３２４を参照して、各ホスト仮想計算機１５０と統合ストレージ装置１１０の、アクセス対象チャンクへの最終アクセス時刻（５７３、５７４）を取得し、これを用いて現在時刻とアクセス対象チャンクの最終アクセス時刻（５７３、５７４）との差の最小値を計算する。この最小値が所定値以上の場合、当該アクセス対象チャンクはこれまであまりアクセスされていなかったため、今後もアクセスされる可能性は低いと判定し、キャッシュ管理テーブル２２４’のアクセス対象チャンクに対応するエントリ中の、キャッシュ要否５４０’の欄に値０を格納し、またキャッシュ領域を削除する（メモリアドレス５３０’の値を無効値にする）。この最小値が所定値未満の場合には、キャッシュ要否５４０’の欄に値１を格納する。【００９１】
続いて図１５を用いて、ホスト仮想計算機１５０がボリューム３４０上のチャンクに対する読み込み処理フロー１２００を説明する。アプリケーションプログラム３２１がボリューム入出力プログラム３２２にチャンクデータを要求すると、ボリューム入出力プログラム３２２はキャッシュ管理プログラム３２３に対し、共有ディスクキャッシュ１１２０に読み込み対象チャンクの複製チャンクを保持しているか判定させる（Ｓ１２１０）。この時、判定方法としてはキャッシュ管理プログラム３２３が統合キャッシュ管理プログラム２２３に問い合わせをしても良いし、ホスト仮想計算機のメモリ空間１１３０に対応付けられたキャッシュ管理テーブル１１５０をキャッシュ管理プログラム３２３が直接参照してもよい。Ｓ１２１０で保持していると判定された場合、そのデータを参照すれば良いのでＳ１２３０に進む。所有していない場合、ボリューム入出力プログラム３２２は内部通信路を介して統合ストレージ装置１１０にボリューム上のチャンクデータの読み込み要求を出す（Ｓ１２１５）。チャンクデータの読み込み要求を受けた統合ストレージ装置１１０の内部入出力受付プログラム２２１は、統合キャッシュ管理プログラム２２３に対し共有ディスクキャッシュ１１２０中に複製チャンクを配置するための領域を確保するよう要求する（Ｓ１２２０）。領域が確保されると、内部入出力受付プログラム２２１は記憶媒体入出力プログラム２２２に指示をして、ボリューム３４０を構成する記憶媒体２４０から対象チャンクのデータをＳ１２２０で確保した共有ディスクキャッシュ１１２０上の領域に格納させる。共有ディスクキャッシュ１１２０上に読み込み対象チャンクの複製データが格納されると、内部入出力受付プログラム２２１はホスト仮想計算機１５０上のボリューム入出力プログラム３２２に読み込み準備が完了したことを通知する（Ｓ１２２５）。Ｓ１２３０では、ボリューム入出力プログラム３２２はアプリケーションプログラム３２１に読み込み準備が完了したこと、そして読み込み対象チャンクの複製データが格納されている共有ディスクキャッシュ１１２０上のアドレスを通知する。そしてアプリケーションプログラム３２１はボリューム入出力プログラム３２２から通知された、共有ディスクキャッシュ１１２０上のアドレスからデータを読み込む。最後に、統合キャッシュ管理プログラム２２３は上で説明したキャッシュ要否判定処理を行ってもよい（Ｓ１２３５）。以上の手順により、ボリューム３４０上のチャンク読み込みを完了する。【００９２】
図１６に、ホスト仮想計算機１５０によるボリューム３４０上へのチャンク書き込み処理フロー１３００を示す。以下の処理では、ディスクキャッシュはWrite-Backキャッシュとして振る舞うことを前提とする。すなわち、書き込みデータはディスクキャッシュに書き込まれた時点で書き込み処理が完了するとみなす。【００９３】
アプリケーションプログラム３２１がボリューム入出力プログラム３２２にチャンクデータ書き込みを要求すると、最初にボリューム入出力プログラム３２２は統合キャッシュ管理プログラム２２３に対し、キャッシュ要否判定を実行するよう要求する（Ｓ１３１０）。次に、キャッシュ管理プログラム３２３は共有ディスクキャッシュ１１２０上に書き込み対象チャンクの格納領域が無い場合、領域を確保する（Ｓ１３１５）。領域が確保された後、ボリューム入出力プログラム３２２は書き込みするデータをＳ１３１５で確保した領域に書き込む（Ｓ１３２０）。【００９４】
続いて、キャッシュ管理プログラム３２３は書き込み対象チャンクはキャッシュされるべきものか否か判定する（Ｓ１３２５）。具体的には、キャッシュ管理テーブル２２４’のキャッシュ要否５４０’の欄に値１が格納されているか否か判定する。値１が格納されている場合、キャッシュされるべきものであるので、この時点で書き込み処理は完了し、最後にキャッシュ要否判定を行って終了する（Ｓ１３４５）。値０が格納されている場合、ボリューム入出力プログラム３２２は書き込みを行った領域に対し、内部通信路を介して統合ストレージ装置１１０にボリューム上のチャンクデータの書き込み要求を出し（Ｓ１３３０）、記憶媒体入出力プログラム２２２は、Ｓ１３２０で共有キャッシュ上に書き込まれたデータを、ボリューム３４０を構成する記憶媒体２４０上に書き込む（Ｓ１３４０）。最後にキャッシュ要否判定を行って終了する（Ｓ１３４５）。【００９５】
図１７に、統合ストレージ装置１１０によるボリューム３４０上のチャンクに対する読み込み処理フロー１４００を示す。この処理フロー１４００は、統合ストレージ装置１１０自身が記憶媒体間データコピーやデータ整合性検証等の機能を実現する目的でボリューム上のデータを参照する際に実行される。【００９６】
処理フロー１４００は、処理フロー１２００の一部を抜き出したものである。すなわち、Ｓ１４１０はＳ１２１０と同等の判断を行う。Ｓ１４１５ではＳ１２２０と同等の処理を行う。Ｓ１４２０ではＳ１２２５と同等の処理を行う。Ｓ１４２５ではＳ１２３０と同等の処理を行う。Ｓ１４３０ではＳ１２３５と同等の処理を行う。【００９７】
図１８に、統合ストレージ装置１１０によるボリューム３４０上のチャンクに対する書き込み処理フロー１５００を示す。この処理フロー１５００は、統合ストレージ装置１１０自身が記憶媒体間データコピー等の機能を実現する目的でボリューム上のデータを上書きする際に実行される。【００９８】
処理フロー１５００は、処理フロー１３００の一部を抜き出したものである。すなわち、Ｓ１５１０ではＳ１３１０と同等の処理を行う。Ｓ１５１５ではＳ１３１５と同等の処理を行う。Ｓ１５２０ではＳ１３２０と同等の処理を行う。Ｓ１５３５ではＳ１３３５と同等の処理を行う。Ｓ１５４０ではＳ１３４０と同等の処理を行う。Ｓ１５４５はＳ１３４５と同等の判断を行う。【００９９】
本発明を適用すると、実施例１同様に、ボリューム内のチャンクに対し、同一内容の複製チャンクを複数のホスト仮想計算機で保持することを避けられるので、限られたディスクキャッシュ領域を効率良く利用し、アプリケーションプログラム３２１の実行速度を向上させることができる。実施例２ではさらに、各ホスト仮想計算機１５０は統合ストレージ装置１１０に入出力要求を出すことなくデータを直接参照できるため、入出力要求を省略する分アプリケーションプログラム３２１の処理時間の短縮が実現できる。
【実施例３】
【０１００】
図１９に、本実施例の適用対象となる計算機システム１６００の構成を示す。実施例１における計算機システム１００では、統合ストレージ装置１１０上にホスト仮想計算機１５０が配置される構成をとったが、計算機システム１６００では、ストレージ装置１６１０と複数のホスト計算機１６２０ａ・１６２０ｂ・１６２０ｃがそれぞれ物理的に独立した計算機であり、ネットワーク１６３０を介して接続される構成をとる。また、各ホスト計算機１６２０ａ・１６２０ｂ・１６２０ｃは、ＬＡＮ１６４０を介して１以上のクライアント１６５０と接続されてもよいが、ＬＡＮ１６４０、クライアント１６５０は、本発明の実施上、必須の要素ではない。【０１０１】
図２０に、ストレージ装置１６１０の構成図を示す。ストレージ装置１６１０は、ＣＰＵ１７１０、メモリ１７２０、記憶媒体インタフェース（記憶媒体Ｉ／Ｆ）２３０、ネットワークインタフェース（ネットワークＩ／Ｆ）１７３０、記憶媒体２４０（２４０ａ、２４０ｂ、２４０ｃ）からなる。ＣＰＵ１７１０は、メモリ１７２０中の各種プログラムを読み込み、その指示に従いストレージ装置１６１０の各構成要素を制御する。【０１０２】
メモリ１７２０中の記憶媒体入出力プログラム２２２・統合キャッシュ管理プログラム２２３・キャッシュ管理テーブル２２４・統計情報２２５・ディスクキャッシュ２２６、及び記憶媒体インタフェース２３０・記憶媒体２４０は、実施例１における統合ストレージ装置１１０のものと同一である。外部入出力受付プログラム１７２１は、ホスト計算機１６２０からの入出力要求をネットワークインタフェース１７３０を介して受け付けて、記憶媒体２４０に対する入出力処理を行う。ネットワークインタフェース１７３０は、ネットワーク１６３０を介して、ホスト計算機１６２０へのデータの転送や、ホスト計算機１６２０とキャッシュ管理情報を交換するために用いられる。ネットワークインタフェース１７３０を介した通信は、例えばＦｉｂｒｅ  ＣｈａｎｎｅｌやＦＣｏＥ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ｏｖｅｒ  Ｅｔｈｅｒｎｅｔ）、ｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）を用いたＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を用いることができる。【０１０３】
図２１に、ホスト計算機１６２０の構成図を示す。ホスト計算機１６２０はＣＰＵ１８１０、メモリ１８２０、ストレージインタフェース（ストレージＩ／Ｆ）１８３０、ネットワークインタフェース（ネットワークＩ／Ｆ）１８４０からなる。ＣＰＵ１８１０は、メモリ１８２０中の各種プログラムを読み込み、その指示に従いホスト計算機１６２０の各構成要素を制御する。【０１０４】
メモリ１８２０中のアプリケーションプログラム３２１・ボリューム入出力管理プログラム３２２・キャッシュ管理プログラム３２３・統計情報３３４・ディスクキャッシュ３２５は実施例１におけるホスト仮想計算機１５０のものと同一である。また、ストレージインタフェース１８３０はストレージ装置１６１０のネットワークインタフェース１７３０と同一で、ネットワーク１６３０を介した、ホスト計算機１６２０とストレージ装置１６１０間のデータ転送等に用いられる。ネットワークインタフェース１８４０は、ＬＡＮ１６４０を介したクライアント１６５０との通信に用いられる。【０１０５】
各ホスト計算機１６２０は、実施例１におけるホスト仮想計算機１５０と同様、ストレージ装置１６１０が記憶媒体から形成したボリュームに共有アクセス可能で、またボリューム上の各チャンクのデータ複製を、自身が有するディスクキャッシュ上に保持（キャッシュ）可能であることも、実施例１におけるホスト仮想計算機１５０と同様である。そしてストレージ装置１６１０とホスト計算機１６２０は、内部通信路を用いた通信の代わりにネットワーク１６３０を用いた通信を行う点を除けば、実施例１の統合ストレージ装置１１０とホスト仮想計算機１５０が実施する処理（処理フロー６００・７００・８００・９００・１０００・１０５０）と同様の処理を行う。これにより、実施例１における統合ストレージ装置１１０、ホスト仮想計算機１５０と同様に、互いのディスクキャッシュ間で、同一チャンクのデータ複製が重複して存在する状態を排除することができる。【０１０６】
本発明を適用すると、ボリューム内のチャンクに対し、同一内容の複製チャンクを複数のホスト計算機で保持することを避けられるので、限られたディスクキャッシュ領域を効率良く利用し、アプリケーションプログラム３２１の実行速度を向上させることができる。【０１０７】
以上、本発明の実施例を説明してきたが、これは本発明の説明のための例示であって、本発明を上で説明した実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施可能である。たとえば実施例に記載の計算機システムにおいて、ホスト計算機のＣＰＵ等の要素が複数存在する構成をとることも可能である。また、実施例においてプログラムとして記載されている構成物の一部または全部を、ハードワイヤードロジックなどを用いたハードウェアによって実現する構成をとることも可能である。また実施例中の各プログラム、制御情報を、ＤＶＤ等の記憶媒体に格納して提供する形態をとることも可能である。
【符号の説明】
【０１０８】
１００：コンピュータシステム
１１０：統合ストレージ装置
１２０：仮想計算機処理部
１３０：記憶媒体
１４１：チャンクデータ
１４２：チャンクデータ
１４３：チャンクデータ
１５０ａ：ホスト仮想計算機
１５０ｂ：ホスト仮想計算機
１５０ｃ：ホスト仮想計算機
１５１：複製チャンク
１５２：複製チャンク
２２３：統合キャッシュ管理プログラム
２２４：キャッシュ管理テーブル
２２６：ディスクキャッシュ
３２１ａ：アプリケーションプログラム
３２１ｂ：アプリケーションプログラム
３２１ｃ：アプリケーションプログラム
３２３ａ：キャッシュ管理プログラム
３２３ｂ：キャッシュ管理プログラム
３２３ｃ：キャッシュ管理プログラム
３２５ａ：ディスクキャッシュ
３２５ｂ：ディスクキャッシュ
３２５ｃ：ディスクキャッシュ
【図１】
0006010706.tif 000002
【図２】
0006010706.tif 000003
【図３】
0006010706.tif 000004
【図４】
0006010706.tif 000005
【図５】
0006010706.tif 000006
【図６】
0006010706.tif 000007
【図７】
0006010706.tif 000008
【図８】
0006010706.tif 000009
【図９】
0006010706.tif 000010
【図１０】
0006010706.tif 000011
【図１１】
0006010706.tif 000012
【図１２】
0006010706.tif 000013
【図１３】
0006010706.tif 000014
【図１４】
0006010706.tif 000015
【図１５】
0006010706.tif 000016
【図１６】
0006010706.tif 000017
【図１７】
0006010706.tif 000018
【図１８】
0006010706.tif 000019
【図１９】
0006010706.tif 000020
【図２０】
0006010706.tif 000021
【図２１】
0006010706.tif 000022