(57)【特許請求の範囲】
【請求項１】
ストレージシステムであって、
データを格納する記憶装置と、
前記記憶装置へのデータの読み書きを制御する少なくとも一つのコントローラとを備え、
前記少なくとも一つのコントローラの各々は、
プログラムを実行するプロセッサと、
前記プロセッサが実行するプログラムを格納するメモリと、
ファイルアクセスによって前記記憶装置から読み出されるデータを一時的に格納する第１のキャッシュメモリと、
ブロックアクセスによって前記記憶装置に読み書きされるデータを一時的に格納する第２のキャッシュメモリと、
前記記憶装置に格納されたデータへのファイルアクセスをホストコンピュータから受ける第１のインタフェースと、
前記記憶装置に格納されたデータへのブロックアクセスをホストコンピュータから受ける第２のインタフェースと、
前記記憶装置にデータを入出力する第３のインタフェースとを有し、
前記プロセッサは、
前記ファイルアクセスを処理するファイルアクセス処理部と、
前記ブロックアクセスを処理するブロックアクセス処理部とを有し、
前記ファイルアクセス処理部は、前記第１のインタフェースを介して受信したファイル読出要求で要求されたデータが前記第１のキャッシュメモリに格納されていない場合、前記要求されたデータの前記記憶装置からの読み出しを前記ブロックアクセス処理部に要求し、
前記ブロックアクセス処理部は、前記ファイルアクセス処理部から要求されたデータの前記記憶装置からの読み出しを前記第３のインタフェースに要求し、
前記第３のインタフェースは、前記ブロックアクセス処理部から要求されたデータを前記記憶装置から読み出し、
前記少なくとも一つのコントローラは、前記ファイルアクセス処理部からの要求に起因したブロックアクセス処理部の要求によって前記記憶装置から読み出したデータを、前記第２のキャッシュメモリに格納することなく、前記第１のキャッシュメモリに格納し、
前記ファイルアクセス処理部は、前記第１のキャッシュメモリに格納されたデータを前記ファイル読出要求を発行したホストコンピュータに転送することを特徴とするストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記ファイルアクセス処理部は、前記要求されたデータが書き込まれる前記第１のキャッシュメモリのアドレスを前記ブロックアクセス処理部に通知することによって、前記記憶装置からのデータの読み出しを前記ブロックアクセス処理部に要求し、
前記ブロックアクセス処理部は、前記第１のキャッシュメモリの前記アドレスを前記第３のインタフェースに通知することによって、前記記憶装置からのデータの読み出しを前記第３のインタフェースに要求することを特徴とするストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記第３のインタフェースは、前記記憶装置から読み出されたデータの誤りを検出するための保証コードを削除することを特徴とするストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記プロセッサは、
前記ファイル読出要求で要求されたデータを前記記憶装置及び前記第２のキャッシュメモリの両方が格納している場合、前記第２のキャッシュメモリに格納されているデータを前記第１のキャッシュメモリに格納し、前記ホストコンピュータに転送し、
前記読み出しが要求されたデータが格納されている前記第２のキャッシュメモリの記憶領域を解放することを特徴とするストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記プロセッサは、
前記ホストコンピュータから受信したファイル書込要求の対象となるデータを前記記憶装置及び前記第１のキャッシュメモリの両方が格納している場合、前記書き込みが要求されたデータを前記第２のキャッシュメモリに格納し、
さらに、前記書き込みが要求されたデータを、他のコントローラの第２のキャッシュメモリに格納するために、前記他のコントローラへ転送し、
当該コントローラが有する第２のキャッシュメモリ及び前記他のコントローラが有する第２のキャッシュメモリに前記書き込みが要求されたデータを格納した後、前記ファイル書込要求の対象となるデータを前記第１のキャッシュメモリから破棄することを特徴とするストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記プロセッサは、
前記ホストコンピュータから受信したブロックデータ読出要求で読み出しが要求されたデータを前記第１のキャッシュメモリが格納している場合、前記第１のキャッシュメモリに格納されたデータを前記第２のキャッシュメモリに格納し、前記ホストコンピュータに転送し、
前記ブロックデータ読出要求で読み出しが要求されたデータを前記第１のキャッシュメモリから破棄することを特徴とするストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
前記プロセッサは、
前記ホストコンピュータから受信したブロックデータ書込要求の対象となるデータを前記第１のキャッシュメモリが格納している場合、前記書き込みが要求されたデータを前記第２のキャッシュメモリに格納し、
さらに、前記書き込みが要求されたデータを、他のコントローラの第２のキャッシュメモリに格納するために、前記他のコントローラに転送し、
前記ブロックデータ書込要求の対象となるデータを前記第１のキャッシュメモリから破棄することを特徴とするストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記プロセッサは、前記ホストコンピュータから受信したファイル書込要求で書き込みが要求されたデータを前記第１及び前記第２のキャッシュメモリの両方に格納することを特徴とするストレージシステム。
【請求項９】
請求項８に記載のストレージシステムであって、
前記プロセッサは、前記ホストコンピュータから受信したファイル読出要求で要求されたデータを前記第２のキャッシュメモリが格納している場合、前記第２のキャッシュメモリに格納されているデータを前記第１のキャッシュメモリに格納し、前記ホストコンピュータに転送し、
前記第２のキャッシュメモリが前記データを格納している領域を解放しないことを特徴とするストレージシステム。
【請求項１０】
請求項８に記載のストレージシステムであって、
前記プロセッサは、前記ホストコンピュータから受信したブロックデータ書込要求の対象となるデータを前記第１及び前記第２のキャッシュメモリの両方が格納している場合、前記ブロック書込要求で書き込みが要求されたデータで前記第２のキャッシュメモリに格納されるデータを更新し、ブロックデータ書込要求の対象となるデータを前記第１のキャッシュメモリから破棄することを特徴とするストレージシステム。
【請求項１１】
ストレージシステムの制御方法であって、
前記ストレージシステムは、データを格納する記憶装置と、前記記憶装置へのデータの読み書きを制御する少なくとも一つのコントローラとを有し、
前記少なくとも一つのコントローラの各々は、所定のプログラムを実行するプロセッサと、前記プロセッサが実行するプログラムを格納するメモリと、接続されるホストコンピュータからのファイルアクセスによって前記記憶装置から読み出されるデータを一時的に格納する第１のキャッシュメモリと、前記ホストコンピュータからのブロックアクセスによって前記記憶装置に読み書きされるデータを一時的に格納する第２のキャッシュメモリと、前記記憶装置に格納されたデータへのファイルアクセスを前記ホストコンピュータから受ける第１のインタフェースと、前記記憶装置に格納されたデータへのブロックアクセスをホストコンピュータから受ける第２のインタフェースと、前記記憶装置にデータを入出力する第３のインタフェースとを有し、
前記プロセッサは、前記ファイルアクセスを処理するファイルアクセス処理部と、前記ブロックアクセスを処理するブロックアクセス処理部とを有し、
前記方法は、
前記第１のインタフェースを介して受信したファイル読出要求で要求されたデータが前記第１のキャッシュメモリに格納されていない場合、前記ファイルアクセス処理部が、前記要求されたデータの前記記憶装置からの読み出しを前記ブロックアクセス処理部に要求し、
前記ブロックアクセス処理部が、前記ファイルアクセス処理部から要求されたデータの前記記憶装置からの読み出しを前記第３のインタフェースに要求し、
前記第３のインタフェースが、前記ブロックアクセス処理部から要求されたデータを前記記憶装置から読み出す第１のステップと、
前記少なくとも一つのコントローラが、前記ファイルアクセス処理部からの要求に起因したブロックアクセス処理部の要求によって前記記憶装置から読み出したデータを、前記第２のキャッシュメモリに格納することなく、前記第１のキャッシュメモリに格納する第２のステップと、
前記ファイルアクセス処理部が、前記第１のキャッシュメモリに格納されたデータを前記ファイル読出要求を発行したホストコンピュータに転送する第３のステップとを含むことを特徴とする制御方法。
【請求項１２】
請求項１１に記載の制御方法であって、
前記第１のステップでは、
前記ファイルアクセス処理部が、前記要求されたデータが書き込まれる前記第１のキャッシュメモリのアドレスを前記ブロックアクセス処理部に通知することによって、前記記憶装置からのデータの読み出しを前記ブロックアクセス処理部に要求し、
前記ブロックアクセス処理部が、前記第１のキャッシュメモリの前記アドレスを前記第３のインタフェースに通知することによって、前記記憶装置からのデータの読み出しを前記第３のインタフェースに要求することを特徴とする制御方法。
【請求項１３】
請求項１１に記載の制御方法であって、
前記第１のステップでは、
前記第３のインタフェースが、前記記憶装置から読み出されたデータの誤りを検出するための保証コードを削除することを特徴とする制御方法。
【請求項１４】
請求項１１に記載の制御方法であって、
前記プロセッサが、前記ホストコンピュータから受信したファイル書込要求で書き込みが要求されたデータを前記第１及び前記第２のキャッシュメモリの両方に格納するステップを含むことを特徴とする制御方法。
【請求項１５】
データを格納する記憶装置へのデータの読み書きを制御するストレージコントローラであって、
所定のプログラムを実行するプロセッサと、
前記プロセッサが実行するプログラムを格納するメモリと、
接続されるホストコンピュータからのファイルアクセスによって前記記憶装置から読み出されるデータを一時的に格納する第１のキャッシュメモリと、
接続されるホストコンピュータからのブロックアクセスによって前記記憶装置に読み書きされるデータを一時的に格納する第２のキャッシュメモリと、
前記記憶装置に格納されたデータへのファイルアクセスをホストコンピュータから受ける第１のインタフェースと、
前記記憶装置に格納されたデータへのブロックアクセスをホストコンピュータから受ける第２のインタフェースと、
前記記憶装置にデータを入出力する第３のインタフェースとを備え、
前記プロセッサは、
前記ファイルアクセスを処理するファイルアクセス処理部と、
前記ブロックアクセスを処理するブロックアクセス処理部とを有し、
前記ファイルアクセス処理部は、前記第１のインタフェースを介して受信したファイル読出要求で要求されたデータが前記第１のキャッシュメモリに格納されていない場合、前記要求されたデータの前記記憶装置からの読み出しを前記ブロックアクセス処理部に要求し、
前記ブロックアクセス処理部は、前記ファイルアクセス処理部から要求されたデータの前記記憶装置からの読み出しを前記第３のインタフェースに要求し、
前記第３のインタフェースは、前記ブロックアクセス処理部から要求されたデータを前記記憶装置から読み出し、
前記少なくとも一つのコントローラは、前記ファイルアクセス処理部からの要求に起因したブロックアクセス処理部の要求によって前記記憶装置から読み出したデータを、前記第２のキャッシュメモリに格納することなく、前記第１のキャッシュメモリに格納し、
前記ファイルアクセス処理部は、前記第１のキャッシュメモリに格納されたデータを前記ファイル読出要求を発行したホストコンピュータに転送することを特徴とするストレージコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置にデータを格納するストレージシステムに関する。
【背景技術】
【０００２】
ストレージシステムには、ブロックＩ／Ｏインタフェースのみを持つブロックストレージ、ファイルＩ／Ｏインタフェースのみを持つファイルストレージがある。近年、ブロックストレージ及びファイルストレージを集約し、一台の装置に両方の機能を持たせることが求められている。このため、一台のストレージシステムがブロックストレージ及びファイルストレージの両方のインタフェースを有するユニファイドストレージシステムが提供されている（特許文献１参照）。このストレージ装置は、ＳＡＮとＮＡＳのインタフェースを持ち、記憶容量をＳＡＮとＮＡＳに自由に割り当てることができる。
【０００３】
また、特許文献２に開示されるように、仮想化技術を用い、一つのハードウェア上で複数のＯＳを動作させる技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００５／０１７２０４３号明細書
【特許文献２】米国特許出願公開第２０１１／０３１４４６９号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
前述したユニファイドストレージシステムを実現する場合、ファイルＩ／Ｏインタフェースと、ブロックＩ／Ｏインタフェースとを１台の装置に実装する必要がある。ファイルＩ／Ｏインタフェースを用いたアクセス方法と、ブロックＩ／Ｏインタフェースを用いたアクセス方法とは大きく異なる。ファイルＩ／Ｏインタフェースは、ディレクトリ及びファイル名を用いてアクセスするデータを指定し、アクセスするデータの大きさは可変である。一方、ブロックＩ／Ｏインタフェースでは、ボリューム番号及びセクタ番号（ＬＢＡ）を用いてアクセスするデータを指定し、アクセスするデータの大きさは固定である。このように、両者の方法が大きく異なるため、ブロックストレージ及びファイルストレージのそれぞれを別個のソフトウェアによって実現し、ブロックストレージ及びファイルストレージの各々を仮想マシン上で動作させることが望まれる。
【０００６】
しかし、ファイルＩ／Ｏインタフェース経由でアクセスされたデータを実際にドライブに読み書きする場合、ブロックストレージの機能がドライブへのアクセスに用いられる。この場合、物理的に一つの装置内にファイルストレージのキャッシュメモリ及びブロックストレージのキャッシュメモリの二つが設けられる。そのため、ファイルＩ／Ｏインタフェースでアクセスされたデータは、ファイルストレージのキャッシュメモリ及びブロックストレージのキャッシュメモリの両方に格納される場合がある。
【０００７】
この場合、データが二つのキャッシュメモリに重畳的にキャッシュされ、キャッシュメモリの容量を有効に活用できず、キャッシュヒット率が低下し、応答性能が低下する。また、キャッシュを二重で管理するため、それぞれのキャッシュを管理するためにプロセッサの処理量が増え、ストレージシステムの性能を低下させる。さらに、キャッシュデータを二重で持つことによって、ホストコンピュータからのアクセスに対し、メモリへのアクセス回数が増え、メモリ帯域を消費し、ストレージシステムの性能を低下させる。
【０００８】
本発明では、ホストコンピュータからの要求に応じて複数のキャッシュメモリを制御し、読み書きを適切に行うストレージシステムを提供する。
【課題を解決するための手段】
【０００９】
本願において開示される発明の代表的な一例は、記憶装置から読み出したファイルアクセスにかかるデータを、ブロックキャッシュメモリに格納することなく、ファイルキャッシュメモリに格納する。
【００１０】
すなわち、本願において開示される発明の代表的な一例は、ストレージシステムであって、データを格納する記憶装置と、前記記憶装置へのデータの読み書きを制御する少なくとも一つのコントローラとを備え、前記少なくとも一つのコントローラの各々は、プログラムを実行するプロセッサと、前記プロセッサが実行するプログラムを格納するメモリと、ファイルアクセスによって前記記憶装置から読み出されるデータを一時的に格納する第１のキャッシュメモリと、ブロックアクセスによって前記記憶装置に読み書きされるデータを一時的に格納する第２のキャッシュメモリと、前記記憶装置に格納されたデータへのファイルアクセスをホストコンピュータから受ける第１のインタフェースと、前記記憶装置に格納されたデータへのブロックアクセスをホストコンピュータから受ける第２のインタフェースと、前記記憶装置にデータを入出力する第３のインタフェースとを有し、前記プロセッサは、前記ファイルアクセスを処理するファイルアクセス処理部と、前記ブロックアクセスを処理するブロックアクセス処理部とを有し、前記ファイルアクセス処理部は、前記第１のインタフェースを介して受信したファイル読出要求で要求されたデータが前記第１のキャッシュメモリに格納されていない場合、前記要求されたデータの前記記憶装置からの読み出しを前記ブロックアクセス処理部に要求し、前記ブロックアクセス処理部は、前記ファイルアクセス処理部から要求されたデータの前記記憶装置からの読み出しを前記第３のインタフェースに要求し、前記第３のインタフェースは、前記ブロックアクセス処理部から要求されたデータを前記記憶装置から読み出し、前記少なくとも一つのコントローラは、前記ファイルアクセス処理部からの要求に起因したブロックアクセス処理部の要求によって前記記憶装置から読み出したデータを、前記第２のキャッシュメモリに格納することなく、前記第１のキャッシュメモリに格納し、前記ファイルアクセス処理部は、前記第１のキャッシュメモリに格納されたデータを前記ファイル読出要求を発行したホストコンピュータに転送することを特徴とするストレージシステム。
【発明の効果】
【００１１】
本発明の代表的な態様によれば、ファイルストレージ及びブロックストレージでの同一データの重畳的なキャッシュを抑制でき、キャッシュメモリの容量を有効に活用できる。
前述した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１の実施例のストレージシステムを含むコンピュータシステムの一例を示すブロック図である。
【図２】図１に示す構成のストレージシステムにおいて、ブロックストレージ機能及びファイルストレージ機能のそれぞれを単純に動作させた場合の、ホストコンピュータからのファイルリード要求に対する応答を説明する図である。
【図３】本発明の第１の実施例のストレージシステムにおいて、ホストコンピュータからのファイルリード要求に対する応答を説明する図である。
【図４】本発明の第１の実施例のストレージシステムにおいて、ホストコンピュータからのファイルライト要求を受信したデータのドライブへの書き込みを説明する図である。
【図５】本発明の第１の実施例のストレージシステムにおいて、ホストコンピュータからのファイルライト要求を受信したデータの二つのストレージコントローラへの二重化を説明する図である。
【図６】本発明の第１の実施例のキャッシュ領域の状態を説明する図である。
【図７】本発明の第１の実施例のキャッシュ領域の状態を説明する図である。
【図８】本発明の第１の実施例のキャッシュ領域の状態を説明する図である。
【図９】本発明の第１の実施例のキャッシュ領域の状態を説明する図である。
【図１０】図６から図９に示した各状態において、イベントが発生した場合の動作及び次の状態の一例を説明する図である。
【図１１】本発明の第１の実施例において、ファイルリード要求を受信した場合の処理の一例のフローチャートである。
【図１２】本発明の第１の実施例において、ファイルＶＭがライト要求を受信した場合の処理の一例のフローチャートである。
【図１３】本発明の第１の実施例において、ブロックＶＭがリード要求を受信した場合の処理の一例のフローチャートである。
【図１４】本発明の第１の実施例のホストコンピュータからファイルリード要求を受信した際の処理のシーケンス図である。
【図１５】本発明の第１の実施例において、ファイルＶＭがブロックＶＭに発行する要求の一例を説明する図である。
【図１６】本発明の第１の実施例において、ブロックＶＭがファイルＶＭに返送する応答の一例を説明する図である。
【図１７】本発明の第２の実施例において、イベントが発生した場合の動作及び次の状態の一例を説明する図である。
【図１８】本発明の第３の実施例のサーバ・ストレージ一体型システムを含むコンピュータシステムの一例を示すブロック図である。
【図１９】本発明の第３の実施例において、ブロックＶＭがリード要求を受信した場合の処理の一例のフローチャートである。
【発明を実施するための形態】
【００１３】
本明細書は、ストレージシステムにおいて、性能を向上させるための技術を開示する。
【００１４】
以下、添付図面を参照して本発明の実施例について説明する。ただし、以下に説明する実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【実施例１】
【００１５】
第１の実施例は、ユニファイドストレージシステムにおいて、キャッシュメモリの処理を最適化し、性能を向上させる本発明の一実施例である。以下、図面を用いて本実施例の詳細について説明する。
【００１６】
図１は、第１の実施例のストレージシステム１を含むコンピュータシステムの一例を示すブロック図である。
【００１７】
図１に示すコンピュータシステムは、データ処理及び演算を行うホストコンピュータ２１、２２、及び、ストレージシステム１を有する。
【００１８】
ホストコンピュータ２１、２２の各々は、ストレージシステム１にファイルＩ／Ｏを実行するためのファイルＩ／Ｏインタフェース２３、及び、ストレージシステム１にブロックＩ／Ｏを行うためのブロックＩ／Ｏインタフェース２４を有する。一般に、障害時に動
作を継続するため、ホストコンピュータ２１とストレージシステム１との間、及び、ホストコンピュータ２２とストレージシステム１との間は、各々、二つ以上の経路で接続されることが多いが、一つの経路で接続されてもよい。また、一つのホストコンピュータ２１などが、ファイルＩ／Ｏインタフェース及びブロックＩ／Ｏインタフェースの両方を有してもよい。
【００１９】
ストレージシステム１は、二つのストレージコントローラ１１Ａ、１１Ｂ及びドライブ筐体２５を有する。ドライブ筐体２５は、複数のドライブ２６を有する。ドライブ２６は、ハードディスクドライブ（ＨＤＤ）でもよいし、フラッシュメモリ等の不揮発メモリを搭載したＳｏｌｉｄＳｔａｔｅＤｒｉｖｅ（ＳＳＤ）でもよい。ドライブ２６は、ホストコンピュータ２１、２２から送信されたデータを格納する。複数のドライブ２６でＲＡＩＤを構成してデータを冗長化することによって、ドライブ２６に障害が発生した場合のデータ消失を防ぐことができる。
【００２０】
ストレージコントローラ１１Ａは、ファイルＩ／Ｏインタフェース１２、ブロックＩ／Ｏインタフェース１３、メモリ１５、プロセッサ１６、及びドライブＩ／Ｏインタフェース１９を有する。ストレージコントローラ１１Ｂも、ストレージコントローラ１１Ａと同じ構成を有する。
【００２１】
ファイルＩ／Ｏインタフェース１２は、ホストコンピュータ２１から送信された、ドライブ２６に格納されたデータへのファイルアクセスを受信する。ブロックＩ／Ｏインタフェース１３は、ホストコンピュータ２１から送信された、ドライブ２６に格納されたデータへのブロックアクセスを受信する。ドライブＩ／Ｏインタフェース１９は、ドライブ２６へのデータの入出力を制御する。ファイルＩ／Ｏインタフェース１２、ブロックＩ／Ｏインタフェース１３及びドライブＩ／Ｏインタフェース１９は、通信プロトコルを制御するＬＳＩを有する。
【００２２】
プロセッサ１６は、複数のプロセッサコア１７Ａ、１７Ｂ、及び、データを転送するためのＤＭＡ１８を有する。また、プロセッサ１６が所定のプログラムを実行することによって、ファイルストレージ機能を提供するファイルＶＭ３及びブロックストレージ機能を提供するブロックＶＭ４がプロセッサ１６上で動作している。これらのＶＭは、各々、プロセッサコア１７Ａ及び１７Ｂ上で動作する。
【００２３】
なお、本実施例のストレージシステムでは、ファイルストレージ機能及びブロックストレージ機能を、仮想マシンで実現したが、各機能を提供するアプリケーションプログラムによって実現してもよい。
【００２４】
プロセッサ１６によって実行されるプログラムは、不揮発性の記憶媒体又はネットワークを介して計算機に提供され、非一時的記憶媒体である補助記憶装置（図示省略）に格納される。すなわち、プロセッサ１６が実行するプログラムは、補助記憶装置から読み出されて、メモリ１５にロードされて、プロセッサ１６によって実行される。
【００２５】
メモリ１５は、プロセッサ１６が実行するソフトウェア等を格納するワークエリア５０を有する。さらに、メモリ１５は、ファイルＶＭ３が管理するファイルデータキャッシュ領域３０Ａ、及び、ブロックＶＭ４が管理するブロックデータキャッシュ領域４０Ａを有する。
【００２６】
図２は、図１に示す構成のストレージシステムにおいて、ブロックストレージ機能及びファイルストレージ機能のそれぞれを単純に動作させた場合の、ホストコンピュータからのファイルリード要求に対する応答を説明する図である。
【００２７】
まず、ホストコンピュータ２１は、ファイルＩ／Ｏインタフェース２３Ａからストレージシステム１に、ファイルリード要求を発行する。
【００２８】
ストレージシステム１では、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からのリード要求を受信し、受信したファイルリード要求をファイルＶＭ３に通知する。
【００２９】
ファイルＶＭ３は、ファイルリード要求を受信した通知を受信すると、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納しているかを判定する。そして、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納していなければ、要求されたデータの読み出しをブロックＶＭ４に指示する。
【００３０】
ブロックＶＭ４は、データの読み出し指示を受信すると、ブロックデータキャッシュ領域４０Ａがリードデータを格納しているかを判定する。そして、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａがリードデータを格納していなければ、当該データのリード要求をドライブＩ／Ｏインタフェース１９に発行する。
【００３１】
ドライブＩ／Ｏインタフェース１９は、ブロックＶＭ４からリード要求を受信すると、ドライブ２６からデータを読み出し、読み出したデータに誤りが無いかを、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）等の保証コードを用いて検証する。その後、ドライブＩ／Ｏインタフェース１９は、読み出したデータをブロックデータキャッシュ領域４０Ａに格納し、データの格納の完了をブロックＶＭ４に通知する。
【００３２】
ブロックＶＭ４は、データ格納完了通知を受信すると、データが誤っていないことを保証コードを用いて検証した後、このデータのブロックデータキャッシュ領域４０Ａからファイルデータキャッシュ領域３０Ａへの転送をＤＭＡ１８に指示する。この転送時に、ブロックデータ用の保証コードは除去される。
【００３３】
ＤＭＡ１８は、指示されたデータを転送し、データ転送の完了をブロックＶＭ４に通知する。
【００３４】
ブロックＶＭ４は、データ転送完了の通知を受信すると、ファイルデータキャッシュ領域３０Ａへのデータ転送の完了をファイルＶＭ３に通知する。
【００３５】
ファイルＶＭ３は、データ転送完了の通知を受信すると、ファイルデータキャッシュ領域３０Ａに格納されたデータをホストコンピュータ２１に返送するように、ファイルＩ／Ｏインタフェース１２に指示する。
【００３６】
ファイルＩ／Ｏインタフェース１２は、データ返送指示を受信すると、ファイルデータキャッシュ領域３０Ａからデータを読み出し、読み出したデータをホストコンピュータ２１のファイルＩ／Ｏインタフェース２３Ａに転送する。
【００３７】
このように、単純にブロックストレージ機能及びファイルストレージ機能を動作させた場合、要求を受信したデータをドライブ２６からホストコンピュータ２１に返送するまで、ブロックデータキャッシュ領域４０Ａ及びファイルデータキャッシュ領域３０Ａの二つのキャッシュメモリを経由する。また、ファイルＶＭ３及びブロックＶＭ４の両方がキャッシュメモリへのデータの入出力を管理する。
【００３８】
図３は、第１の実施例のストレージシステムにおいて、ホストコンピュータ２１からのファイルリード要求に対する応答を説明する図である。
【００３９】
まず、ホストコンピュータ２１は、ファイルＩ／Ｏインタフェース２３Ａからストレージシステム１に、ファイルリード要求を発行する。
【００４０】
ストレージシステム１では、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からのリード要求を受信し、受信したファイルリード要求をファイルＶＭ３に通知する。
【００４１】
ファイルＶＭ３は、ファイルリード要求を受信した通知を受信すると、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納しているかを判定する。そして、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納していなければ、要求されたデータの読み出しをブロックＶＭ４に指示する。
【００４２】
ブロックＶＭ４は、データの読出指示を受信すると、ブロックデータキャッシュ領域４０Ａがリードデータを格納しているかを判定する。そして、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａがリードデータを格納していなければ、当該データのリード要求をドライブＩ／Ｏインタフェース１９に発行する。この時、ブロックＶＭ４は、ドライブ２６から読み出したデータの格納先として、ブロックデータキャッシュ領域４０Ａではなく、ファイルＶＭ３から受け取った最終的な返送先であるファイルデータキャッシュ領域３０Ａを指定する。
【００４３】
ドライブＩ／Ｏインタフェース１９は、ブロックＶＭ４からリード要求を受信すると、ドライブ２６からデータを読み出し、読み出したデータに誤りが無いかを、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）等の保証コードを用いて検証する。その後、ドライブＩ／Ｏインタフェース１９は、保証コードを除去し、保証コードが除去されたデータをファイルデータキャッシュ領域３０Ａに格納し、データの格納の完了をブロックＶＭ４に通知する。これにより、ブロックデータキャッシュ領域４０Ａに保証コード付きデータを格納した後に保証コードを除去し、保証コードが除去されたデータをファイルデータキャッシュ領域３０Ａに格納する従来方法と比べ、ブロックデータキャッシュ領域４０Ａの読み書きが不要となる。このため、メモリアクセス量が減少し、性能を向上することができる。また、ファイルデータキャッシュ領域３０Ａには保証コードが除去されたデータが格納されるため、ファイルＶＭ３の処理は従来同様で構わない。
【００４４】
ブロックＶＭ４は、データ格納完了通知を受信すると、ファイルデータキャッシュ領域３０Ａへのデータ転送の完了をファイルＶＭ３に通知する。
【００４５】
ファイルＶＭ３は、データ転送完了の通知を受信すると、ファイルデータキャッシュ領域３０Ａに格納されたデータをホストコンピュータ２１に返送するように、ファイルＩ／Ｏインタフェース１２に指示する。
【００４６】
ファイルＩ／Ｏインタフェース１２は、データ返送指示を受信すると、ファイルデータキャッシュ領域３０Ａからデータを読み出し、読み出したデータをホストコンピュータ２１のファイルＩ／Ｏインタフェース２３Ａに転送する。
【００４７】
このように、本発明の第１の実施例では、ファイルリード要求に対してファイルＶＭ３のみがキャッシュメモリを管理する。このため、ブロックＶＭ４側の処理量及びメモリ１５へのアクセスが減少し、ストレージシステムの性能を向上することができる。また、ブロックデータキャッシュ領域４０Ａを使用しないので、メモリ１５を有効に活用することができる。
【００４８】
図４は、第１の実施例のストレージシステムにおいて、ホストコンピュータ２１からのファイルライト要求を受信したデータのドライブへの書き込みを説明する図である。
【００４９】
まず、ホストコンピュータ２１は、ファイルＩ／Ｏインタフェース２３Ａからストレージシステム１に、ファイルライト要求を発行する。
【００５０】
ストレージシステム１では、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からのライト要求を受信し、受信したファイルライト要求をファイルＶＭ３に通知する。
【００５１】
ファイルＶＭ３は、ファイルライト要求を受信した通知を受信すると、要求されたライトデータの書込が完了するまでの間データを保持するための領域をファイルデータキャッシュ領域３０Ａに確保し、ファイルＩ／Ｏインタフェース１２からホストコンピュータ２１に、確保した領域へのデータ転送を指示する。
【００５２】
その後、ファイルＩ／Ｏインタフェース１２は、ホストコンピュータ２１から転送されたデータを一時的にファイルデータキャッシュ領域３０Ａに格納し、データ格納完了をファイルＶＭ３に通知する。
【００５３】
ファイルＶＭ３は、データ格納完了通知を受信すると、ファイルデータキャッシュ領域３０Ａに格納されたデータに対応するブロックアドレスを計算し、データの書き込みをブロックＶＭ４へ指示する。
【００５４】
ブロックＶＭ４は、データ書込指示を受信すると、ライトデータを格納するための領域をブロックデータキャッシュ領域４０Ａに確保し、ファイルデータキャッシュ領域３０Ａからブロックデータキャッシュ領域４０Ａへのデータ転送をＤＭＡ１８に指示する。
【００５５】
ＤＭＡ１８は、指示されたデータを転送し、データ転送の完了をブロックＶＭ４に通知する。
【００５６】
ブロックＶＭ４は、データ転送完了の通知を受信すると、転送されたデータのＤＩＦ等の保証コードを計算し、保証コードが付されたデータをブロックデータキャッシュ領域４０Ａへ書き込む。その後、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａからのデータの読み出し、保証コードの検証及びドライブ２６への書き込みを、ドライブＩ／Ｏインタフェース１９に指示する。
【００５７】
ドライブＩ／Ｏインタフェース１９は、データのライト要求をブロックＶＭ４から受信すると、要求されたデータをドライブ２６に書き込み、書き込みの完了をブロックＶＭ４に通知する。
【００５８】
ブロックＶＭ４は、データ書込完了通知を受信すると、データ書込完了をファイルＶＭ３に通知する。
【００５９】
ファイルＶＭ３は、データ書込完了通知を受信すると、データ書込完了をファイルＩ／Ｏインタフェース１２を介してホストコンピュータ２１に通知する。
【００６０】
図５は、第１の実施例のストレージシステムにおいて、ホストコンピュータ２１からのファイルライト要求を受信したデータをデータ保証のために二つのストレージコントローラ１１Ａ及び１１Ｂへの二重化を説明する図である。ＤＭＡ１８がブロックデータキャッシュ領域４０Ａにデータを転送し、ブロックＶＭ４に通知するまでの処理は、図４と同じである。以降の手順は以下の通りである。
【００６１】
ブロックＶＭ４は、データ転送完了の通知を受信すると、転送されたデータのＤＩＦ等の保証コードを計算し、保証コードが付されたデータをブロックデータキャッシュ領域４０Ａへ書き込む。その後、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａに格納されたデータのストレージコントローラ１１Ｂへの転送を、ＤＭＡ１８に指示する。
【００６２】
ＤＭＡ１８は、指示されたデータをストレージコントローラ１１Ｂへ転送し、データ転送の完了をブロックＶＭ４に通知する。
【００６３】
ブロックＶＭ４がデータ転送完了通知を受信し、データの二重化が完了すると、ブロックＶＭ４は、データ転送の完了をファイルＶＭ３に通知する。以降の処理は、図４と同様である。
【００６４】
図６から図９は、第１の実施例のデータキャッシュ領域３０Ａ、３０Ｂ、４０Ａ、４０Ｂの状態を説明する図である。ホストコンピュータ２１等がデータを読み書きすることによって、これらの状態が生じる。
【００６５】
図６は、状態”Ｎｏｎｅ”を示す。Ｎｏｎｅ状態は、二つのコントローラのファイルデータキャッシュ領域３０Ａ、３０Ｂ及びブロックデータキャッシュ領域４０Ａ、４０Ｂのいずれにもデータが格納されていない状態である。
【００６６】
図７は、状態”Ｆｉｌｅ  Ｃｌｅａｎ”を示す。Ｆｉｌｅ  Ｃｌｅａｎ状態は、消去しても問題がないデータがファイルデータキャッシュ領域３０Ａのみに格納されている状態である。「消去しても問題がない」とは、ドライブ２６に最新のデータが格納されている状態である。
【００６７】
図８は、状態”Ｂｌｏｃｋ  Ｃｌｅａｎ”を示す。Ｂｌｏｃｋ  Ｃｌｅａｎ状態は、消去しても問題のないデータがブロックデータキャッシュ領域４０Ａのみに格納されている状態である。
【００６８】
図９は、状態”Ｂｌｏｃｋ  Ｄｉｒｔｙ”を示す。Ｂｌｏｃｋ  Ｄｉｒｔｙ状態は、ドライブ２６に未だ書き込まれていないデータが、ブロックデータキャッシュ領域４０Ａ及び４０Ｂに二重化されて格納されている状態である。このデータは、ストレージシステムの負荷に余裕がある場合、又はブロックデータキャッシュ領域４０Ａ及び４０Ｂの容量が不足した場合などに、ホストコンピュータからの読み書きとは非同期で、ドライブ２６に書き込まれる。
【００６９】
図１０は、図６から図９に示した各状態において、イベントが発生した場合の動作、及び次の状態の一例を説明する図である。
【００７０】
現在の状態とは、前述した４状態である。「イベント」とは、ストレージシステムが実行する処理の契機となるイベントである。例えば、”Ｆｉｌｅ  Ｒｅａｄ”は、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１等からリード要求を受信したことである。”Ｆｉｌｅ  Ｗｒｉｔｅ”は、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１等からライト要求を受信したことである。”Ｂｌｏｃｋ  Ｒｅａｄ”は、ブロックＩ／Ｏインタフェース１３がリード要求を受信したことである。”Ｂｌｏｃｋ  Ｗｒｉｔｅ”は、ブロックＩ／Ｏインタフェース１３がライト要求を受信したことである。”Ｄｅｓｔａｇｅ  Ｃｏｍｐｌ．”は、ドライブ２６に未だ書き込まれていないデータを、ドライブ２６に書き込んだことである。”Ｆｉｌｅ  Ｒｅｐｌａｃｅｄ”は、ファイルデータキャッシュ領域３０Ａの容量が不足したなどの理由により、データが格納されている領域を解放することである。”Ｂｌｏｃｋ  Ｒｅｐｌａｃｅｄ”は、ブロックデータキャッシュ領域４０Ａの容量が不足したなどの理由により、データが格納されている領域を解放することである。
【００７１】
現在の状態が”Ｎｏｎｅ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、要求されたデータをドライブ２６から読み出す必要がある。この場合、図３で示した通り、読み出したデータをファイルデータキャッシュ領域３０Ａに直接格納し、ファイルデータキャッシュ領域３０Ａにキャッシュされたデータをホストコンピュータ２１に返送する。ドライブ２６から読み出されたデータは、ブロックデータキャッシュ領域４０Ａに格納されない。そして、ファイルデータキャッシュ領域３０Ａのみにデータが残っているため、次の状態は、”Ｆｉｌｅ  Ｃｌｅａｎ”となる。
【００７２】
現在の状態が”Ｎｏｎｅ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルライト要求を受信した場合、ライトデータが消失しないように、二つのコントローラで二重化する。データの二重化はブロックストレージ側で行うため、ファイルＶＭ３は、データをファイルデータキャッシュ領域３０Ａに格納した後、ブロックＶＭ４にライト要求を発行する。ブロックＶＭ４は、ライト要求を受信すると、データをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。ファイルデータキャッシュ領域３０Ａでライトデータが格納された領域は、ブロックデータキャッシュ領域４０Ａ及び４０Ｂへのデータ書込処理が完了した後に解放される。そして、次の状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【００７３】
現在の状態が”Ｎｏｎｅ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックリード要求を受信した場合、ブロックストレージから直接ホストコンピュータ２１に応答すればよいため、読み出したデータをブロックデータキャッシュ領域４０Ａに格納し、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータをホストコンピュータ２１に返送する。そして、データはブロックデータキャッシュ領域４０Ａのみに格納されているため、次の状態は、”Ｂｌｏｃｋ  Ｃｌｅａｎ”となる。
【００７４】
現在の状態が”Ｎｏｎｅ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックライト要求を受信した場合、ライトデータが消失しないように、二つのコントローラのブロックデータキャッシュ領域４０Ａで二重化する。そして、新しい状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【００７５】
状態が”Ｎｏｎｅ”である場合、ドライブ書込完了、ファイルデータキャッシュ領域３０Ａの容量不足による領域解放等、及び、ブロックデータキャッシュ領域４０Ａの容量不足等による領域解放は発生しない。
【００７６】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、ファイルデータキャッシュ領域３０Ａに要求されたデータがキャッシュされているので、ファイルデータキャッシュ領域３０Ａにキャッシュされたデータをホストコンピュータ２１に返送する。ファイルデータキャッシュ領域３０Ａにキャッシュされたデータは、そのまま保持される。そして、次の状態は、”Ｆｉｌｅ  Ｃｌｅａｎ”が維持される。
【００７７】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルライト要求を受信した場合、ライトデータを消失しないように、二つのコントローラで二重化する。データの二重化はブロックストレージ側で行うため、ファイルＶＭ３は、データをファイルデータキャッシュ領域３０Ａに格納した後、ブロックＶＭ４にライト要求を発行する。ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。ファイルデータキャッシュ領域３０Ａでライトデータが格納された領域は、ブロックデータキャッシュ領域４０Ａ及び４０Ｂへのデータ書き込みが完了した後に解放される。そして、次の状態は”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。これにより、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方が同一データを保持すること防止する。
【００７８】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックリード要求を受信した場合、ブロックＶＭ４は、ファイルＶＭ３にデータを要求し、取得したデータをブロックデータキャッシュ領域４０Ａに格納し、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータをホストコンピュータ２１に返送する。また、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａにキャッシュされている該当データを破棄する。そして、新しい状態は、”Ｂｌｏｃｋ  Ｃｌｅａｎ”となる。これにより、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方が同一データを保持することを防止し、ブロックリード要求を再度受信した場合に、すぐにデータを返送できるようにする。
【００７９】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックライト要求を受信した場合、ライトデータを消失しないように、二つのコントローラで二重化する。このため、ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。また、ブロックＶＭ４は、ファイルデータキャッシュ領域３０Ａにキャッシュされたデータを破棄するようファイルＶＭ３に通知する。ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａにキャッシュされた該当データを破棄する。そして、新しい状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。これにより、ファイルデータキャッシュ領域３０Ａに古いデータが残ること、及び、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方が同一データを保持することを防止する。
【００８０】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ”であり、かつ、ファイルデータキャッシュ領域３０Ａ容量不足等によるデータ追い出しが発生した場合、該当データを破棄し、”Ｎｏｎｅ”状態に遷移する。
【００８１】
状態が”Ｆｉｌｅ  Ｃｌｅａｎ”である場合、ドライブ書込完了、及び、ブロックデータキャッシュ領域４０Ａの容量不足等による領域解放は発生しない。
【００８２】
現在の状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、要求されたデータはブロックデータキャッシュ領域４０Ａにキャッシュされているため、ブロックデータキャッシュ領域４０Ａからデータを返送する。このため、ファイルＶＭ３は、ブロックＶＭ４にデータ転送を要求する。ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａからデータを読み出し、ファイルＶＭ３に返送する。そして、ファイルＶＭ３は、受信したデータをファイルデータキャッシュ領域３０Ａに格納し、ホストコンピュータ２１に返送する。また、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａにキャッシュされた該当データを破棄する。そして、新しい状態は、”Ｆｉｌｅ  Ｃｌｅａｎ”となる。これにより、次のファイルリード要求への応答性能を向上し、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方が同一データを保持することを防止する。
【００８３】
現在の状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルライト要求を受信した場合、ライトデータを消失しないように、二つのコントローラで二重化する。データの二重化はブロックストレージ側で行うため、ファイルＶＭ３は、データをファイルデータキャッシュ領域３０Ａに格納した後、ブロックＶＭ４にライト要求を発行する。ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。ファイルデータキャッシュ領域３０Ａでライトデータが格納された領域は、ブロックデータキャッシュ領域４０Ａ及び４０Ｂへのデータ書き込みが完了した後に解放される。そして、新しい状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【００８４】
現在の状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックリード要求を受信した場合、要求されたデータがブロックデータキャッシュ領域４０Ａにキャッシュされているため、ブロックＶＭ４が要求されたデータをそのままホストコンピュータ２１に返送する。そして、”Ｂｌｏｃｋ  Ｃｌｅａｎ”状態を維持する。
【００８５】
現在の状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックライト要求を受信した場合、ライトデータを消失しないように、二つのコントローラで二重化する。このため、ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。そして、新しい状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【００８６】
また、状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”である場合、ドライブ書込完了、及び、ファイルデータキャッシュ領域３０Ａの容量不足等による領域解放は発生しない。
【００８７】
また、現在の状態が”Ｂｌｏｃｋ  Ｃｌｅａｎ”であり、かつ、ブロックデータキャッシュ領域４０Ａの容量不足等によるデータ追い出しが発生した場合、該当データを破棄し、”Ｎｏｎｅ”状態に遷移する。
【００８８】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、二重化されたデータを保持したまま、ホストコンピュータ２１に速やかに応答する。このため、ファイルＶＭ３は、リード要求をブロックＶＭ４に送信する。ブロックＶＭ４は、ブロックデータキャッシュ領域４０ＡにキャッシュされたデータをファイルＶＭ３に返送する。ファイルＶＭ３は、ブロックＶＭ４から返送されたデータをホストコンピュータ２１に返送する。ファイルデータキャッシュ領域３０Ａでライトデータが格納された領域は、ブロックデータキャッシュ領域４０Ａへのデータ書き込みが完了した後に解放される。そして、新しい状態は、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。これにより、データの二重化を維持しつつ、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方が同一データを保持することを防止する。
【００８９】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルライト要求を受信した場合、ライトデータを消失しないように、二つのコントローラで二重化する。ブロックデータキャッシュ領域４０Ａ及び４０Ｂにキャッシュされた更新前のデータは既に二重化されているので、これらのデータを更新する。そこで、ファイルＶＭ３は、ライトデータをファイルデータキャッシュ領域３０Ａに格納した後、ブロックＶＭ４にライト要求を発行する。ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。ファイルデータキャッシュ領域３０Ａでライトデータが格納された領域は、ブロックデータキャッシュ領域４０Ａ及び４０Ｂへのデータ書き込みが完了した後に解放される。そして、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態を維持する。
【００９０】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックリード要求を受信した場合、要求されたデータがブロックデータキャッシュ領域４０Ａにキャッシュされているため、ブロックＶＭ４が要求されたデータをそのままホストコンピュータに返送する。そして、”Ｂｌｏｃｋ  Ｃｌｅａｎ”状態を維持する。
【００９１】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックライト要求を受信した場合、ライトデータを消失しないよう、二つのコントローラで二重化する。ブロックデータキャッシュ領域４０Ａ及び４０Ｂにキャッシュされた更新前のデータは既に二重化されているので、これらのデータを更新する。このため、ブロックＶＭ４は、ライトデータをブロックデータキャッシュ領域４０Ａ及び４０Ｂの２箇所に書き込む。そして、状態”Ｂｌｏｃｋ  Ｄｉｒｔｙ”を維持する。
【００９２】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、データのドライブ２６へのデステージが完了した場合、二重化を維持する必要はない。そこで、片方のデータを破棄する。そして、新しい状態は”Ｂｌｏｃｋ  Ｃｌｅａｎ”となる。
【００９３】
また、現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”である場合、ファイルデータキャッシュ領域３０Ａはデータを格納していないので、ファイルデータキャッシュ領域３０Ａの容量不足等による解放は生じない。また、ブロックデータキャッシュ領域４０Ａはデータ保持のために必要なので、こちらも容量不足等による解放は生じない。
【００９４】
図１１は、第１の実施例において、ファイルＶＭ３がリード要求を受信した場合の処理の一例のフローチャートである。
【００９５】
ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からファイルリード要求を受信すると、ファイルＶＭ３は、まず、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納しているかを検索する（Ｓ３１１）。
【００９６】
ファイルデータキャッシュ領域３０Ａが要求されたデータをキャッシュしている場合（Ｓ３１２で”Ｙ”）、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａが格納しているデータをホストコンピュータ２１に返送し（Ｓ３１３）、処理を終了する。
【００９７】
一方、ファイルデータキャッシュ領域３０Ａが要求されたデータを格納していない場合（Ｓ３１２で”Ｎ”）、ファイルＶＭ３はブロックＶＭ４にデータを要求する（Ｓ３１４）。そして、ファイルＶＭ３は、ブロックＶＭ４から応答を受信し（Ｓ３１５）、受信したデータをホストコンピュータに返送する（Ｓ３１６）。そして、ファイルＶＭ３は、応答に含まれている情報を参照し、ブロックデータキャッシュ領域４０Ａがダーティ状態のデータを格納しているかを判定する（Ｓ３１７）。
【００９８】
ブロックデータキャッシュ領域４０Ａがダーティデータを格納している場合（Ｓ３１７で”Ｙ”）、ブロックデータキャッシュ領域４０Ａが二重化されたデータを格納しているので、重複してデータを保持しないように、ファイルＶＭ３はファイルデータキャッシュ領域３０Ａにキャッシュされたデータを破棄し（Ｓ３１８）、処理を終了する。
【００９９】
一方、ブロックデータキャッシュ領域４０Ａがダーティデータを格納していない場合（Ｓ３１７で”Ｎ”）、ブロックＶＭ４側ではデータを保持しないため、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａ上のデータを保持し（Ｓ３１９）、処理を終了する。
【０１００】
図１２は、第１の実施例において、ファイルＶＭ３がライト要求を受信した場合の処理の一例のフローチャートである。
【０１０１】
ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からファイルライト要求を受信すると、ファイルＶＭ３は、まず、ブロックＶＭ４にライト要求を送信し（Ｓ３２１）、ブロックＶＭ４からの書込完了の返送を待つ（Ｓ３２２）。
【０１０２】
その後、ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａがライトデータに対応するキャッシュデータを格納しているかを検索する（Ｓ３２３）。ファイルデータキャッシュ領域３０Ａがキャッシュデータを格納している場合（Ｓ３２４で”Ｙ”）、データを重複して保持することになるので、ファイルデータキャッシュ領域３０Ａに格納されているキャッシュデータを破棄し（Ｓ３２５）、処理を終了する。
【０１０３】
一方、ファイルデータキャッシュ領域３０Ａがキャッシュデータを格納していない場合（Ｓ３２４で”Ｎ”）、処理を終了する。
【０１０４】
図１３は、第１の実施例において、ブロックＶＭ４がリード要求を受信した場合の処理の一例のフローチャートである。
【０１０５】
ブロックＶＭ４は、ファイルＶＭ３又はホストコンピュータからブロックリード要求を受信すると、まず、ブロックデータキャッシュ領域４０Ａが要求されたデータを格納しているかを検索する（Ｓ４１１）。この検索によって取得できる、要求されたデータの状態は、以下の３種類である。（１）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしており、かつ、ドライブ２６に格納されているデータと同期している状態（Ｃｌｅａｎ）、（２）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしており、かつ、ドライブ２６に格納されているデータと同期が取れておらず、ブロックデータキャッシュ領域４０Ａに最新データが格納されている状態（Ｄｉｒｔｙ）、（３）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしていない状態（Ｎｏｎｅ）である。
【０１０６】
ブロックＶＭ４は、前述した３種類の状態を判定する（Ｓ４１２）。
【０１０７】
キャッシュ状態が”Ｃｌｅａｎ”である場合、ブロックＶＭ４は、要求元がファイルＶＭ３であるかを判定する（Ｓ４１３）。要求元がファイルＶＭ３である場合（Ｓ４１３で”Ｙ”）、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータに、キャッシュの状態がＣｌｅａｎであることを付加して、ファイルＶＭ３に送信する（Ｓ４１４）。そして、該当リードデータはファイルＶＭ３によってファイルデータキャッシュ領域３０Ａに格納されるため、重複保持にならないよう、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａがキャッシュする該当リードデータを破棄し（Ｓ４１５）、処理を終了する。
【０１０８】
一方、要求元がファイルＶＭ３でない、すなわち、リード要求がホストコンピュータ２１からの要求である場合（Ｓ４１３で”Ｎ”）、ブロックＶＭ４は、ホストコンピュータ２１にデータを返送し（Ｓ４１６）、処理を終了する。このとき、再度ブロックリード要求を受信した場合のために、ブロックデータキャッシュ領域４０Ａがキャッシュデータを保持する。
【０１０９】
また、キャッシュ状態が”Ｄｉｒｔｙ”である場合、ブロックＶＭ４は、要求元がファイルＶＭ３であるかを判定する（Ｓ４１７）。要求元がファイルＶＭ３である場合（Ｓ４１７で”Ｙ”）、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータに、キャッシュの状態がＤｉｒｔｙであることを付加して、ファイルＶＭ３に送信する（Ｓ４１８）。これにより、ファイルデータキャッシュ領域３０Ａにデータが格納されないようにする。そして、ブロックデータキャッシュ領域４０Ａがキャッシュデータを保持したまま、処理を終了する。
【０１１０】
一方、要求元がファイルＶＭ３でない、すなわち、リード要求がホストコンピュータ２１からの要求である場合（Ｓ４１７で”Ｎ”）、ブロックＶＭ４は、ホストコンピュータ２１にデータを返送し（Ｓ４１９）、処理を終了する。このとき、キャッシュされた該当データはドライブ２６へ書き込まれていないため、ブロックデータキャッシュ領域４０Ａにデータを保持したままにする。
【０１１１】
また、キャッシュ状態が”Ｎｏｎｅ”である場合、ブロックＶＭ４は、要求元がファイルＶＭ３かを判定する（Ｓ４２０）。要求元がファイルＶＭ３である場合、ブロックＶＭ４は、リードデータをファイルデータキャッシュ領域３０Ａに格納し、ブロックデータキャッシュ領域４０Ａに格納する必要がない。このため、ブロックＶＭ４は、ドライブ２６から読み出したデータに、キャッシュの状態がＣｌｅａｎであることを付加して、ファイルデータキャッシュ領域３０Ａに直接転送する（Ｓ４２１）。これにより、ファイルデータキャッシュ領域３０Ａにデータが保持される。そして、処理を終了する。
【０１１２】
一方、要求元がファイルＶＭ３でない、すなわち、リード要求がホストコンピュータ２１からの要求である場合（Ｓ４２０で”Ｎ”）、ブロックＶＭ４は、ドライブ２６から読み出したデータをブロックデータキャッシュ領域４０Ａに格納する（Ｓ４２２）。そして、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａがキャッシュしているデータをホストコンピュータ２１に返送する（Ｓ４２３）。これにより、ブロックデータキャッシュ領域４０Ａがデータを保持し、再度リード要求を受信した場合、ドライブ２６へアクセスすることなく、ホストコンピュータ２１にデータを返送できるようにする。
【０１１３】
図１４は、第１の実施例のホストコンピュータ２１からファイルリード要求を受信した際の処理のシーケンス図である。図１４に示す処理は、ホストコンピュータ２１がストレージシステム１にファイルリード要求を発行した後、要求されたデータがファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａのいずれにもキャッシュされておらず、ドライブ２６から読み出したリードデータをホストコンピュータ２１に返送する際のやり取りの一例を示す。
【０１１４】
ホストコンピュータ２１からのファイルリード要求は、ファイルＩ／Ｏインタフェース１２から、ファイルＶＭ３に通知される。ファイルＶＭ３は、リード要求を受信した旨の通知を受信すると、要求されたファイルデータをキャッシュする領域をメモリ１５に確保し、ブロックＶＭ４にリード要求を発行する。ブロックＶＭ４へのリード要求は、データが格納されるファイルデータキャッシュ領域３０Ａのアドレスが含まれる。
【０１１５】
ブロックＶＭ４は、リード要求を受信すると、ドライブＩ／Ｏインタフェース１９にリード要求を送信する。ドライブＩ／Ｏインタフェース１９へのリード要求は、データの格納先である、ファイルＶＭ３より受信したファイルデータキャッシュ領域３０Ａのアドレスを含む。また、リード要求は、ＤＩＦを除去する指示を含む。
【０１１６】
ドライブＩ／Ｏインタフェース１９は、リード要求を受信すると、ドライブ２６にリード要求を発行し、ドライブ２６からデータを読み出す。その後、ドライブＩ／Ｏインタフェース１９は、ＤＩＦのチェック及び除去を行い、ファイルデータキャッシュ領域３０Ａにデータを書き込む。ドライブＩ／Ｏインタフェース１９は、データの書き込み後、データ転送の完了をブロックＶＭ４に通知する。
【０１１７】
ブロックＶＭ４は、データ転送完了通知を受信すると、データ転送完了をファイルＶＭ３に通知する。ファイルＶＭ３へのデータ転送完了通知は、ブロックデータキャッシュ領域４０Ａがデータをキャッシュしていないことを示す情報を含む。
【０１１８】
ファイルＶＭ３は、データ転送完了通知を受信すると、ホストへの応答の返送をファイルＩ／Ｏインタフェース１２に指示する。
【０１１９】
ファイルＩ／Ｏインタフェース１２は、応答返送指示を受信すると、ファイルデータキャッシュ領域３０Ａからデータを読み出し、読み出したデータをホストコンピュータ２１に返送する。
【０１２０】
このように、ファイルＶＭ３からブロックＶＭ４を経由し、ドライブ２６からデータを読み出す際、ブロックデータキャッシュ領域４０Ａを使用しない。これによって、メモリの領域の消費を抑制することができる。また、ブロックＶＭ４がメモリの領域を確保する処理を省略することができ、プロセッサ処理量を削減することができる。さらに、ホストコンピュータ２１が要求を出してからデータを受信するまでの時間を短縮することができる。
【０１２１】
図１５は、第１の実施例において、ファイルＶＭ３がブロックＶＭ４に発行する要求の一例を説明する図である。
【０１２２】
ファイルＶＭ３がブロックＶＭ４に発行する要求は、ＴＡＧ番号５１、ＬＯＧＩＣＡＬ  ＵＮＩＴ番号５２、ＬＢＡ５３、ＲＤ／ＷＲ５４、ＬＥＮＧＴＨ５５及びＭＥＭ  ＡＤＤＲ５６を含む。
【０１２３】
ＴＡＧ番号５１は、要求を識別するための番号であり、複数の要求を発行する場合に要求の識別に用いる。ＬＯＧＩＣＡＬ  ＵＮＩＴ番号５２は、要求するデータが格納されているボリュームの識別子である。ＬＢＡ５３は、要求するデータが格納されているボリューム内の論理ブロックアドレスである。
【０１２４】
ＲＤ／ＷＲ５４は、要求がリード要求かライト要求かを示す情報である。ＬＥＮＧＴＨ５５は、要求するデータの長さである。ＭＥＭ  ＡＤＤＲ５６は、読み出したデータを格納するファイルデータキャッシュ領域３０Ａのアドレス、又は、書き込むべきデータが格納されているファイルデータキャッシュ領域３０Ａのアドレスである。
【０１２５】
図１６は、第１の実施例において、ブロックＶＭ４がファイルＶＭ３に返送する応答の一例を説明する図である。
【０１２６】
ブロックＶＭ４がファイルＶＭ３に返送する応答は、ＴＡＧ番号５７、ＳＵＣＣＥＳＳ／ＦＡＩＬ５８及びＣＬＥＡＮ／ＤＩＲＴＹ５９を含む。
【０１２７】
ＴＡＧ番号５７は、応答に対応する要求を示す識別子である。ＳＵＣＣＥＳＳ／ＦＡＩＬ５８は、処理が成功したか失敗したかを示す情報である。ＣＬＥＡＮ／ＤＩＲＴＹ５９は、ブロックデータキャッシュ領域４０Ａがデータをキャッシュしている場合は”ＤＩＲＴＹ”、ブロックデータキャッシュ領域４０Ａがデータをキャッシュしていない場合は”ＣＬＥＡＮ”が設定される。ＣＬＥＡＮ／ＤＩＲＴＹ５９は、ファイルデータキャッシュ領域３０Ａがデータを保持すべきかを判断するために用いる。
【０１２８】
以上に説明したように、本発明の第１の実施例によると、ファイルストレージ及びブロックストレージで同一データの重畳的なキャッシュを抑制でき、キャッシュメモリの容量を有効に活用できる。このため、キャッシュヒット率が向上し、ストレージシステムの性能を向上することができる。
【０１２９】
例えば、リード要求時にキャッシュヒットした場合、ファイルストレージ側のみで処理が完了するので、プロセッサの処理量を小さくでき、ストレージシステムの性能を向上することができる。また、リード要求時にキャッシュミスした場合、ブロックストレージのキャッシュ処理及びブロックストレージからファイルストレージへのデータ転送を省略するので、メモリアクセス及びプロセッサ処理量を削減でき、ストレージシステムの性能を向上することができる。
【実施例２】
【０１３０】
次に、本発明の第２の実施例について説明する。
【０１３１】
第２の実施例は、ファイルデータキャッシュ領域３０Ａ及びブロックデータキャッシュ領域４０Ａの両方にデータをキャッシュすることを排除する第１の実施例とは異なり、ブロックデータキャッシュ領域４０Ａにドライブ２６に未書込のダーティデータを保持し、ファイルデータキャッシュ領域３０Ａにもキャッシュデータを保持することによって、ストレージシステムの性能を向上させる。
【０１３２】
以下、第２の実施例について、第１の実施例との相違点を主に説明する。なお、前述した第１の実施例と同じ構成には同じ符号を付し、それらの説明は省略する。
【０１３３】
図１７は、第２の実施例において、イベントが発生した場合の動作、及び次の状態の一例を説明する図である。
【０１３４】
第２の実施例では、新たに、ファイルデータキャッシュ領域３０Ａにクリーンキャッシュを保持し、ブロックデータキャッシュ領域４０Ａ及び４０Ｂとでデータを二重化する”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態がある。下線が付された項目が、第１の実施例との相違点である。
【０１３５】
第２の実施例では、現在の状態にかかわらず、ファイルＩ／Ｏインタフェース１２がホストコンピュータ２１からファイルライト要求を受信した場合、データの消失を防ぐために、ブロックデータキャッシュ領域４０Ａ及び４０Ｂに二重化してライトデータを保持する。さらに、再度ファイルリード要求を受信した場合、ファイルＶＭ３のみでホストコンピュータ２１にデータを返送できるように、ファイルデータキャッシュ領域３０Ａにもデータを格納する。そして、新しい状態は”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【０１３６】
現在の状態が”Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、ファイルＶＭ３は、ブロックＶＭ４に、該当データのリード要求を発行する、そして、受信したデータをファイルデータキャッシュ領域３０Ａに格納し、このデータをホストコンピュータ２１に返送する。このとき、ファイルデータキャッシュ領域３０Ａに格納されたデータはそのまま保持し、再度ファイルリード要求を受けた場合にファイルＶＭ３のみで応答できるようにすることによって、処理を高速化することができる。この場合、ファイルデータキャッシュ領域３０Ａにデータが格納されており、ブロックデータキャッシュ領域４０Ａ、４０Ｂにもデータが格納されているため、新しい状態は、”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【０１３７】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルリード要求を受信した場合、ファイルＶＭ３がファイルデータキャッシュ領域３０Ａにキャッシュされたデータをホストコンピュータ２１に返送する。そして、”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態を維持する。この場合、ファイルＶＭ３はファイルデータキャッシュ領域３０Ａからデータを返送し、ブロックＶＭ４が処理を実行しない。そのため、応答時間を短縮することができる。
【０１３８】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルＩ／Ｏインタフェース１２がファイルライト要求を受信した場合、ファイルＶＭ３がファイルデータキャッシュ領域３０Ａの内容を更新し、ブロックＶＭ４にライト要求を発行する。ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａ及び４０Ｂに格納されているデータを更新する。そして、”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態を維持する。
【０１３９】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックリード要求を受信した場合、ブロックＶＭ４は、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータをホストコンピュータ２１へ返送する。そして、”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態を維持する。
【０１４０】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ブロックＩ／Ｏインタフェース１３がブロックライト要求を受信した場合、ブロックＶＭ４はブロックデータキャッシュ領域４０Ａにキャッシュされたデータを更新する。そして、ファイルデータキャッシュ領域３０Ａにキャッシュされたデータは古いデータとなるため、ブロックＶＭ４はファイルデータキャッシュ領域３０Ａにキャッシュされたデータの破棄をファイルＶＭ３に指示する。ファイルＶＭ３は、ファイルデータキャッシュ領域３０Ａにキャッシュされた該当データを破棄する。そして、”Ｂｌｏｃｋ  Ｄｉｒｔｙ”状態に遷移する。こうすることにより、ホストコンピュータ２１がファイルリード要求を発行した場合、キャッシュされた古いデータを参照することを防止する。
【０１４１】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ドライブ２６へのデータ書込が完了した場合、ブロックデータキャッシュ領域４０Ａ及び４０Ｂにキャッシュデータを保持する必要はない。このため、ブロックデータキャッシュ領域４０Ａ及び４０Ｂで二重化されているデータの両方を破棄する。そして、新しい状態は”Ｆｉｌｅ  Ｃｌｅａｎ”となる。
【０１４２】
現在の状態が”Ｆｉｌｅ  Ｃｌｅａｎ  Ｂｌｏｃｋ  Ｄｉｒｔｙ”であり、かつ、ファイルデータキャッシュ領域３０Ａの容量不足等による追い出しが発生した場合、ファイルＶＭ３は、単にファイルデータキャッシュ領域３０Ａにキャッシュされた該当データを破棄する。そして、新しい状態は”Ｂｌｏｃｋ  Ｄｉｒｔｙ”となる。
【０１４３】
以上に説明したように、本発明の第２の実施例では、ファイルデータキャッシュ領域３０Ａをリードキャッシュとして、ブロックデータキャッシュ領域４０Ａをライトキャッシュとして同時に使用するので、第１の実施例と比較し、ファイルリード要求に対する応答性能を高めることができる。このため、キャッシュメモリの容量に余裕がある場合や、ファイルアクセスが頻繁に発生する場合において、特に性能を向上させることができる。
【実施例３】
【０１４４】
次に、本発明の第３の実施例について説明する。第３の実施例は、ブロックストレージを扱うアプリケーションＶＭ６及びブロックＶＭ４が一つの装置内に設けられている場合、ブロックアクセスの性能を向上させるアクセス方法の一例である。
【０１４５】
前述した第１の実施例のユニファイドストレージシステムでは、ファイルアクセスを実現する機能（ファイルＶＭ３）と、ブロックアクセスを実現する機能（ブロックＶＭ４）とが一台の装置内に設けられており、ファイルアクセス時でも必ずブロックデータキャッシュ領域４０Ａを経由してドライブ２６にアクセスする方法が考えられる（図２参照）。
【０１４６】
しかし、第３の実施例のサーバ・ストレージ一体型システム８のように、ドライブ２６に格納されたデータにブロックアクセスするアプリケーション（アプリケーションＶＭ６）と、ブロックアクセスをする機能（ブロックＶＭ４）とが一台の装置内に設けられている場合（図１８参照）、ドライブＩ／Ｏインタフェース１９（ドライブ２６）からアプリケーションＶＭ６へデータを直接転送した方がよい場合もある。このような場合でも、ブロックデータキャッシュ領域４０Ａを経由してデータを転送すると、キャッシュメモリの領域を浪費し、かつ、メモリ１５へのデータの入出力の制御にプロセッサ１６のリソースが消費される。一方、常に、ドライブＩ／Ｏインタフェース１９（ドライブ２６）からアプリケーションＶＭ６へデータを直接転送すると、キャッシュ機能が使用されず、ドライブ２６へのアクセス性能が低下する。
【０１４７】
このため、第３の実施例では、ブロックアクセス時のキャッシュ効果とディスクへのアクセス性能とを両立する。
【０１４８】
以下、第３の実施例について、第１の実施例との相違点を主に説明する。なお、前述した第１の実施例と同じ構成には同じ符号を付し、それらの説明は省略する。
【０１４９】
図１８は、本発明の第３の実施例のサーバ・ストレージ一体型システム８を含むコンピュータシステムの一例を示すブロック図である。
【０１５０】
第３の実施例では、サーバ・ストレージ一体型システム８のプロセッサ１６が、アプリ
ケーションＶＭ６及びブロックＶＭ４を実行する。アプリケーションＶＭ６は、ホストコンピュータからの要求に従って、ドライブ２６に格納されたデータにブロックアクセスするアプリケーションであり、例えば、データベース管理システムである。
【０１５１】
なお、本実施例のストレージシステムでは、アプリケーション機能及びブロックストレージ機能を、仮想マシンで実現したが、各機能を提供するアプリケーションプログラムによって実現してもよい。
【０１５２】
図１９は、第３の実施例において、ブロックＶＭ４がリード要求を受信した場合の処理の一例のフローチャートである。
【０１５３】
なお、第３の実施例におけるアプリケーションＶＭ６からブロックＶＭ４へのリード要求は、アドレス、ボリューム番号、転送長などの図１５に示す情報に加え、局所性を示すＰｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔの情報を含む。Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔは、局所性を有し、直ぐに再び参照される可能性が高い”Ｔｅｍｐｏｒａｌ”と、局所性が低く、再び参照される可能性が低い”Ｎｏｎ−Ｔｅｍｐｏｒａｌ”のいずれかである。アプリケーションＶＭ６上で動作するアプリケーションがリード要求を出す際、再び参照する可能性が高いデータについてＴｅｍｐｏｒａｌを、再び参照する可能性が低いデータについてＮｏｎ−Ｔｅｍｐｏｒａｌを付与し、リード要求を発行する。
【０１５４】
ブロックＶＭ４は、リード要求を受信すると、まず、ブロックデータキャッシュ領域４０Ａが要求されたデータを格納しているかを検索する（Ｓ４３１）。この検索によって取得できる、要求されたデータの状態は、以下の３種類である。（１）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしており、かつ、ドライブ２６に格納されているデータと同期している状態（Ｃｌｅａｎ）、（２）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしており、かつ、ドライブ２６に格納されているデータと同期が取れておらず、ブロックデータキャッシュ領域４０Ａに最新データが格納されている状態（Ｄｉｒｔｙ）、（３）ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしていない状態（Ｎｏｎｅ）。
【０１５５】
ブロックＶＭ４は、前述した３種類の状態を判定する（Ｓ４３２）。
【０１５６】
キャッシュ状態が”Ｃｌｅａｎ”である場合、ブロックＶＭ４は、ブロックデータキャッシュ領域４０ＡにキャッシュされたデータをアプリケーションＶＭ６に送信する（Ｓ４３３）。そして、ブロックＶＭ４は、アプリケーションＶＭ６からのリード要求に含まれているＰｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔを参照し（Ｓ４３４）、Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔが”Ｔｅｍｐｏｒａｌ”である場合、処理を終了する。一方、Ｎｏｎ−Ｔｅｍｐｏｒａｌの場合には、ブロックデータキャッシュ領域４０Ａがキャッシュする当該データを破棄する（Ｓ４３５）。これにより、再び参照される可能性が低いデータが、ブロックデータキャッシュ領域４０Ａを占有することを防止する。
【０１５７】
また、キャッシュ状態が”Ｄｉｒｔｙ”である場合、ブロックＶＭ４は、ブロックデータキャッシュ領域４０ＡにキャッシュされたデータをアプリケーションＶＭ６に送信し（Ｓ４３６）、処理を終了する。この場合、ブロックデータキャッシュ領域４０Ａ及び４０Ｂに二重化されたデータは保持する必要があるため、Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔの内容に関わらず、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータは破棄しない。
【０１５８】
また、キャッシュ状態が”Ｎｏｎｅ”である場合、ブロックデータキャッシュ領域４０Ａが要求されたデータをキャッシュしていないので、ブロックＶＭ４はＰｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔを参照する（Ｓ４３７）。そして、Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔが”Ｎｏｎ−Ｔｅｍｐｏｒａｌ”である場合、ブロックＶＭ４は、ドライブ２６に格納されたデータを読み出し、読み出したデータをアプリケーションＶＭ６に直接転送する（Ｓ４３８）。一方、Ｐｒｏｃｅｓｓｉｎｇ  Ｈｉｎｔが”Ｔｅｍｐｏｒａｌ”である場合、ドライブ２６から読み出したデータをブロックデータキャッシュ領域４０Ａに格納し（Ｓ４３９）、ブロックデータキャッシュ領域４０Ａに格納されたデータをアプリケーションＶＭ６に転送する（Ｓ４４０）。これにより、再び参照される可能性が低いデータがブロックデータキャッシュ領域４０Ａを占有することを防止し、応答時間を短縮できる。また、局所性が高いデータをブロックデータキャッシュ領域４０Ａに格納することによって、当該データが再び参照された際に、ブロックデータキャッシュ領域４０Ａにキャッシュされたデータを返送できるので、応答性能を向上することができる。
【０１５９】
以上に説明したように、本発明の第３の実施例では、サーバ・ストレージ一体型システム８において、ブロックアクセス時のキャッシュ効果とディスクへのアクセス性能とを両立することができる。
【０１６０】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【図１】
0005977430.tif 000002
【図２】
0005977430.tif 000003
【図３】
0005977430.tif 000004
【図４】
0005977430.tif 000005
【図５】
0005977430.tif 000006
【図６】
0005977430.tif 000007
【図７】
0005977430.tif 000008
【図８】
0005977430.tif 000009
【図９】
0005977430.tif 000010
【図１０】
0005977430.tif 000011
【図１１】
0005977430.tif 000012
【図１２】
0005977430.tif 000013
【図１３】
0005977430.tif 000014
【図１４】
0005977430.tif 000015
【図１５】
0005977430.tif 000016
【図１６】
0005977430.tif 000017
【図１７】
0005977430.tif 000018
【図１８】
0005977430.tif 000019
【図１９】
0005977430.tif 000020