(57)【特許請求の範囲】
【請求項１】
記憶装置に接続されたコントローラを含むストレージシステムであって、
前記コントローラは、
前記記憶装置に記憶された共有ファイルを参照する複数のクローンファイルを、一つ以上の仮想計算機に提供しており、
前記各クローンファイルへのデータ書込みにより生じる前記共有ファイルとの差分データは、前記記憶装置の記憶領域のうち当該クローンファイルに対応する記憶領域に記憶するようになっており、
前記各クローンファイルに対応付けられる複数のクローン用キャッシュ領域と、前記共有ファイルに対応付けられる共有キャッシュ領域とを備えており、
前記各クローンファイルのいずれかのクローンファイルへの読出し要求を受領した場合、前記複数のクローン用キャッシュ領域のうち前記読出し対象のクローンファイルに対応する所定のクローン用キャッシュ領域に前記読出し要求の対象データが存在しないと判定した場合に前記共有キャッシュ領域を検索する、
ストレージシステム。
【請求項２】
前記コントローラは、前記読出し対象のクローンファイルについての読出し要求を受領した場合、
前記読出し対象データについて前記所定のクローン用キャッシュ領域を検索し、
前記所定のクローン用キャッシュ領域に前記読出し対象データが存在しないと判定した場合、前記記憶装置の記憶領域のうち前記読出し対象のクローンファイルに対応する所定の記憶領域を検索し、
前記所定の記憶領域に前記読出し対象データが存在しないと判定した場合、前記共有キャッシュ領域を検索し、
前記共有キャッシュ領域に前記読出し対象データが存在しないと判定した場合、前記記憶装置の記憶領域のうち前記共有ファイルに対応する共有記憶領域を検索する、
請求項１に記載のストレージシステム。
【請求項３】
前記コントローラは、前記所定の記憶領域から前記読出し対象データを読み出す場合、前記読出し対象データを前記所定のクローン用キャッシュ領域に記憶してから、前記読出し要求の発行元に返信する、
請求項２に記載のストレージシステム。
【請求項４】
前記コントローラは、前記共有記憶領域から前記読出し対象データを読み出す場合、前記読出し対象データを前記共有キャッシュ領域に記憶してから、前記読出し要求の発行元に返信する、
請求項３に記載のストレージシステム。
【請求項５】
前記コントローラは、前記各クローンファイルのうちいずれかのクローンファイルへの書込み要求を受領すると、
書込み対象データのサイズと前記記憶装置のブロックサイズとを比較し、
前記書込み対象データのサイズが前記ブロックサイズより小さいと判定した場合、前記共有キャッシュ領域、書込み対象のクローンファイルに対応する記憶領域、前記書込み対象のクローンファイルに対応するクローン用キャッシュ領域、前記共有記憶領域のうちいずれかから、前記書込み対象データで更新するための更新対象データを読出し、
前記更新対象データに前記書込み対象データを上書きし、前記上書きしたデータを前記書込み対象のクローンファイルに対応する前記記憶領域に記憶する、
請求項２〜４のいずれかに記載のストレージシステム。
【請求項６】
前記コントローラは、前記共有キャッシュ領域の使用量が予め設定した所定値を越えたと判定した場合、前記共有キャッシュ領域に記憶した前記読出し対象データを、前記所定のクローン用キャッシュ領域にコピーする、
請求項１〜４のいずれかに記載のストレージシステム。
【請求項７】
前記コントローラは、前記各クローンファイルが前記共有キャッシュ領域を共有するか否かを設定することができ、
前記共有キャッシュ領域を共有しないと設定した場合、前記共有キャッシュ領域に記憶した前記読出し対象データを、前記所定のクローン用キャッシュ領域にコピーする、
請求項１〜４のいずれかに記載のストレージシステム。
【請求項８】
前記コントローラは、前記複数のクローンファイルを少なくとも一つ以上の仮想計算機に提供する仮想化管理コントローラと、前記クローンファイルへの読み出し要求および書込み要求を処理するファイル管理コントローラとを含んでおり、
前記ファイル管理コントローラは、
前記各クローンファイルへのデータ書込みにより生じる前記共有ファイルとの差分データを、前記記憶装置の記憶領域のうち当該クローンファイルに対応する記憶領域に記憶するようになっており、
前記各クローンファイルに対応付けられる複数のクローン用キャッシュ領域と、前記共有ファイルに対応付けられる共有キャッシュ領域とを備えており、
前記各クローンファイルのいずれかのクローンファイルへの読出し要求を受領した場合、読出し対象データについて、前記複数のクローン用キャッシュ領域のうち前記読出し対象のクローンファイルに対応する所定のクローン用キャッシュ領域を検索し、
前記読出し対象データが前記所定のクローン用キャッシュ領域に存在しないと判定した場合は、前記読出し対象データについて前記共有キャッシュ領域を検索する、
請求項１〜４のいずれかに記載のストレージシステム。
【請求項９】
共有ファイルを参照する複数のクローンファイルを管理するストレージシステムを制御するための方法であって、
前記ストレージシステムは、前記各クローンファイルに対応付けられる複数のクローン用キャッシュ領域と、前記共有ファイルに対応付けられる共有キャッシュ領域とを備えており、
前記各クローンファイルのいずれかのクローンファイルへの読出し要求を受領した場合、読出し対象データについて、前記複数のクローン用キャッシュ領域のうち前記読出し対象のクローンファイルに対応する所定のクローン用キャッシュ領域を検索し、
前記読出し対象データが前記所定のクローン用キャッシュ領域に存在しないと判定した場合は、前記読出し対象データについて前記共有キャッシュ領域を検索する、
ストレージシステムの制御方法。
【請求項１０】
前記ストレージシステムは、前記読出し対象のクローンファイルについての読出し要求を受領した場合、
前記読出し対象データについて前記所定のクローン用キャッシュ領域を検索し、
前記所定のクローン用キャッシュ領域に前記読出し対象データが存在しないと判定した場合、記憶装置の記憶領域のうち前記読出し対象のクローンファイルに対応する所定の記憶領域を検索し、
前記所定の記憶領域に前記読出し対象データが存在しないと判定した場合、前記共有キャッシュ領域を検索し、
前記共有キャッシュ領域に前記読出し対象データが存在しないと判定した場合、前記記憶装置の記憶領域のうち前記共有ファイルに対応する共有記憶領域を検索する、
請求項９に記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムおよびストレージシステムの制御方法に関する。
【背景技術】
【０００２】
企業や大学などの組織で、多量の物理ＰＣ（計算機）を導入した結果、物理ＰＣの管理コストの増加が問題となっている。そこで、近年では、ＰＣを仮想化する技術を用いて物理ＰＣの数を削減することで機器の管理コストを削減する、ＶＤＩ（Ｖｉｒｔｕａｌ Ｄｅｓｋｔｏｐ Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ）という技術が注目されている。【０００３】
ＶＤＩでは、企業や大学などの組織がエンドユーザへ提供する物理ＰＣを、仮想化サーバ上で動作する仮想ＰＣへ移行する。つまり、ＶＤＩは、物理計算機上に仮想化プログラムを用いて複数の仮想ＰＣを生成し、それら仮想ＰＣを物理ＰＣの代わりに各エンドユーザに提供する。仮想ＰＣを１台の仮想化サーバ上で多数動作させることにより、稼働する物理ＰＣ数を削減できるため、管理コストを抑えることができる。【０００４】
仮想ＰＣの導入時には、時間のかかる仮想ＰＣのセットアップ作業が必要となる。具体的には、仮想ＰＣの仮想ディスクファイル（ＶＭＤＫファイル）を作成し、仮想ＰＣへＯＳ（オペレーティングシステム）をインストールし、さらに、ネットワーク設定などのデスクトップ環境を整備する必要がある。【０００５】
作業時間を削減するために、上記セットアップ作業を実施済みのＶＭＤＫファイルを複製する。セットアップ済みのＶＭＤＫファイルを、ファイルクローン機能を用いて複製することで複製時間を短縮でき、この結果仮想ＰＣの導入時間をさらに短縮できる。【０００６】
しかし、複数の仮想ＰＣを一斉に動作させると、記憶装置へのディスクＩ／Ｏが集中するため、仮想ＰＣの応答性能が悪化する。【０００７】
そこで、従来技術では、ディスクＩ／Ｏが集中することによる応答性能の悪化を緩和すべく、複数の仮想ＰＣが利用する共有キャッシュを用いる（特許文献１）。共有キャッシュは、ハッシュ値とキャッシュデータから構成される。予めＶＭＤＫファイルのブロックごとにハッシュ値を計算して、ダイジェストファイルとして保存する。【０００８】
或る仮想ＰＣがディスクから読み込んだデータは、ハッシュ値と一緒に共有キャッシュへ保存する。他の仮想ＰＣがデータを読み込む際、ダイジェストファイルにあるデータブロックのハッシュ値を元に共有キャッシュを検索し、データの取得を試みる。共有キャッシュからデータが取得できればディスクへのＩ／Ｏは不要となるため、ディスクＩ／Ｏが集中するのを抑制できる。複製されたＶＭＤＫファイル群には、同一データが含まれているため、ハッシュ値が一致し、共有キャッシュのデータを利用できる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許第７，８０９，８８８号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
従来技術では、ＶＭＤＫファイルの全体を読み込んでハッシュ値を演算することで、そのＶＭＤＫファイルのダイジェストファイルを作成する。従って、ダイジェストファイルを作成するためにＶＭＤＫファイルに頻繁にアクセスしてハッシュ値演算を行わなければならず、処理負荷が大きいという問題がある。【００１１】
ＶＭＤＫファイルごとにダイジェストファイルを作成するため、各ダイジェストファイルの合計サイズが大きくなる。又、共有キャッシュにデータが無い場合には読み出しのためにディスクへのＩ／Ｏが発生する。【００１２】
本発明は、上記の問題に鑑みてなされたもので、その目的は、複数のクローンファイルを生成した場合に、記憶装置への入出力要求を抑制しつつキャッシュの有効利用を図ることができるようにしたストレージシステムおよびストレージシステムの制御方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明の一つの観点に係るストレージシステムは、記憶装置に接続されたコントローラを含むストレージシステムであって、コントローラは、記憶装置に記憶された共有ファイルを参照する複数のクローンファイルを、一つ以上の仮想計算機に提供しており、各クローンファイルへのデータ書込みにより生じる共有ファイルとの差分データは、記憶装置の記憶領域のうち当該クローンファイルに対応する記憶領域に記憶するようになっており、各クローンファイルに対応付けられる複数のクローン用キャッシュ領域と、共有ファイルに対応付けられる共有キャッシュ領域とを備えており、各クローンファイルのいずれかのクローンファイルへの読出し要求を受領した場合、読出し対象データについて、複数のクローン用キャッシュ領域のうち読出し対象のクローンファイルに対応する所定のクローン用キャッシュ領域を検索し、読出し対象データが所定のクローン用キャッシュ領域に存在しないと判定した場合は、読出し対象データについて共有キャッシュ領域を検索するようになっている。
【図面の簡単な説明】
【００１４】
【図１】ストレージシステムを含む情報処理システムの全体を示す図。
【図２】仮想化サーバの構成を示す図。
【図３】ファイルサーバの構成を示す図。
【図４】ストレージ装置の構成を示す図。
【図５】クローンファイルと共有ファイルの構造および参照方法を示す説明図。
【図６】クローンファイルの構造とクローンファイルの差分データと共有ファイルの関係を示す説明図。
【図７】ファイルキャッシュの構成を示す図。
【図８】ファイルキャッシュの参照順序などを示す説明図。
【図９】ファイルキャッシュを検索する処理のフローチャート。
【図１０】ファイル読込み処理のフローチャート。
【図１１】ファイル書込み処理のフローチャート。
【図１２】第２実施例に係り、ファイルサーバの構成を示す図。
【図１３】クローンファイルの差分データの閾値を設定するためのユーザインターフェースを示す説明図。
【図１４】ファイルキャッシュを検索する処理のフローチャート。
【図１５】第３実施例に係り、クローンファイルによる共有キャッシュの使用可否を設定するためのユーザインターフェースを示す説明図。
【図１６】ファイルキャッシュを検索する処理を示すフローチャート。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。本実施形態で開示される複数の特徴は、様々に組み合わせることができる。
【００１６】
本実施形態の処理動作の説明では、「コンピュータプログラム」を動作主体（主語）として説明することがある。コンピュータプログラムは、マイクロプロセッサによって実行される。従って、プロセッサを動作主体として読み替えても良い。
【００１７】
本実施形態では、後述するように、共有ファイルから複製される複数のクローンファイルが、クローンファイル用のキャッシュ領域だけでなく、共有ファイルのキャッシュ領域も共有できるようになっている。
【００１８】
本実施形態では、ファイルクローン機能を用いて作成するクローンファイルの構造を利用して、キャッシュデータを共有する。クローンファイル群は、１つの共有ファイルと複数のクローンファイル群とから構成される。クローンファイルが共有しているデータは、共有ファイルが保持する。
【００１９】
或る仮想ＰＣによるクローンファイルへのアクセスに対応するために、ディスクから共有ファイルのデータを読み込む場合、共有ファイルのキャッシュ（共有キャッシュ領域）にデータを格納する。他の仮想ＰＣが共有ファイルのデータを読み込む場合、共有ファイルのキャッシュ領域に格納されたキャッシュデータを利用することができる。このように動作することで、ダイジェストファイルを作成したり、ダイジェストファイルをメモリに保持したりする必要がない。
【００２０】
本実施形態によると、ファイルクローン機能を用いて複製されたクローンファイル同士が共有ファイルのキャッシュデータを共有できるため、ディスクのＩ／Ｏ負荷を低減することができる。
【実施例１】
【００２１】
図１〜図１１を用いて第１実施例を説明する。図１は、本実施例によるストレージシステムを含む情報処理システムの全体構成を示す。情報処理システムは、例えば、少なくとも一つのクライアント端末１０と、少なくとも一つの仮想化サーバ２０と、少なくとも一つのファイルサーバ３０と、少なくとも一つのストレージ装置４０と、少なくとも一つの管理端末５０を含んで構成されている。【００２２】
クライアント端末１０は、エンドユーザが仮想ＰＣ２０１（図２参照）を利用するために使用する計算機である。クライアント端末１０は、例えば、ＣＰＵ１１と、メモリ１２と、ネットワークインターフェース１３とを含んで構成されており、それらは内部バス１４によって相互に接続されている。【００２３】
メモリ１２には、仮想化サーバ２０で動作する仮想ＰＣ２０１へ接続するための仮想デスクトップクライアントプログラム１０１が格納されている。ＣＰＵ１１は、メモリ１２に格納されたプログラム１０１を実行する。以降の説明では、特に断らない限り、プログラムはＣＰＵによって実行される。【００２４】
仮想化サーバ２０は、仮想ＰＣ２０１を動作させる計算機である。仮想化サーバ２０の内部処理は後述する。【００２５】
ＬＡＮ（Local Area Network）６０は、クライアント端末１０と仮想化サーバ２０と管理端末５０とファイルサーバ３０とを接続するバスである。ＬＡＮ６０は、Ｅｔｈｅｒｎｅｔ（登録商標）や無線ＬＡＮアクセスポイント装置などを用いて構成しても良い。本実施例はＬＡＮ６０の接続形態を限定しない。【００２６】
管理端末５０は、ストレージシステムを管理するために用いる計算機であり、ストレージシステムの管理者によって使用される。管理端末５０は、例えば、ＣＰＵ５１と、メモリ５２と、ネットワークインターフェース５３とを含んで構成されており、それらは内部バス５４により相互に接続されている。メモリ５２には、管理インターフェース５０１と、管理プログラム５０２とが格納されている。【００２７】
管理インターフェース５０１は、ＧＵＩ（Graphical User Interface）による設定画面を管理者に提供するためのプログラムである。管理プログラム５０２は、管理インターフェース５０１を通して入力された設定値をファイルサーバ３０へ送信して値を設定するためのプログラムである。【００２８】
管理端末５０は、管理端末５０に情報を入力するための情報入力装置と、管理端末５０から情報を出力するための情報出力装置を備える（いずれも不図示）。情報入力装置としては、例えば、キーボード、ポインティングデバイス、視線検出装置、動作検出装置、音声入力装置などがある。情報出力装置としては、例えば、ディスプレイ、音声合成装置、プリンタなどがある。【００２９】
ファイルサーバ３０は、仮想化サーバ２０にファイル共有サービスを提供する計算機である。ファイルサーバ３０の内部処理は後述する。【００３０】
ストレージ装置４０は、ファイルサーバ３０と例えばＳＡＮ（Storage Area Network）などのネットワーク６１を介して相互に接続されるディスク装置である。ストレージ装置４０は、ファイルサーバ３０が利用するディスク領域を持つ。ストレージ装置４０の内部処理は後述する。【００３１】
図２は、仮想化サーバ２０の構成を示す。仮想化サーバ２０はファイルサーバ３０と共に「コントローラ」の一例を構成する。さらに、仮想化サーバ２０は、「仮想化管理サーバ」の一例に該当する。仮想化サーバ２０は、例えば、ＣＰＵ２１と、メモリ２２と、ネットワークインターフェース２３とを含んで構成され、それらはバス２４で相互に接続されている。【００３２】
メモリ２２には、例えば、仮想ＰＣ２０１と、ハイパバイザプログラム２０２と、ファイルアクセスプログラム２０３とが格納されている。仮想ＰＣ２０１は、仮想的な計算機であり、ハイパバイザプログラム２０２によって作成される。仮想ＰＣ２０１は、物理的な計算機と同様の機能を持つ。仮想ＰＣ２０１上では、仮想デスクトップサーバプログラム２０１１と、アプリケーションプログラム２０１２が動作する。【００３３】
仮想ＰＣ２０１の利用するディスクは、ストレージ装置４０に格納されたファイル（ＶＭＤＫファイル）であり、ハイパバイザプログラム２０２から割り当てられる。仮想デスクトップサーバプログラム２０１１は、クライアント端末１０に仮想ＰＣ２０１のデスクトップ環境を提供するためのプログラムである。仮想デスクトップサーバプログラム２０１１は、クライアント端末１０の仮想デスクトップクライアントプログラム１０１からアクセス要求を受け付けると、デスクトップ環境をネットワーク６０経由で、クライアント端末１０へ提供する。【００３４】
アプリケーションプログラム２０１２は、例えば、文書や図形または表などを作成したり編集したりするためのオフィスソフトウェア、ウェブサーバを閲覧するためのウェブブラウザ、電子メールを送受信するための電子メール管理ソフトウェアなどのプログラムである。【００３５】
ハイパバイザプログラム２０２は、仮想ＰＣ２０１を作成するコンピュータプログラムである。ハイパバイザプログラム２０２は、仮想ＰＣ２０１の起動および停止を管理したり、ＣＰＵ資源やディスク資源やメモリ資源などの割り当てなどを管理したりする。【００３６】
ファイルアクセスプログラム２０３は、ファイルサーバ３０の提供するファイル共有サービスを利用するためのプログラムである。仮想化サーバ２０は、ファイルアクセスプログラム２０３を通してファイルサーバ３０へアクセスし、ファイルサーバ３０に接続されたストレージ装置４０に格納されているＶＭＤＫファイルへアクセスする。【００３７】
図３は、ファイルサーバ３０の構成を示す。ファイルサーバ３０は、仮想化サーバ20と共に「コントローラ」の一例を構成する。ファイルサーバ３０は、「ファイル管理コントローラ」の一例に該当する。仮想化サーバ２０を第１コントローラまたは第２コントローラと呼ぶ場合、ファイルサーバ３０を第２コントローラまたは第１コントローラと呼ぶこともできる。【００３８】
ファイルサーバ３０は、例えば、ＣＰＵ３１と、メモリ３２と、ネットワークインターフェース３３と、ＳＡＳ（Serial Attached SCSI）などを利用するストレージインターフェース３４とを含んで構成されており、それらはバス３５で相互に接続されている。【００３９】
メモリ３２には、例えば、ファイルサーバプログラム３０１と、ファイルシステムプログラム３０２と、ディスク４５から読み込んだファイル３０３と、第１キャッシュ３０４と、第２キャッシュ３０５とが格納されている。【００４０】
ファイルサーバプログラム３０１は、仮想化サーバ２０のファイルアクセスプログラム２０３から発行されるファイルアクセス要求を受理し、ファイルの読み書き処理を行うプログラムである。ファイルシステムプログラム３０２は、ディスク４５に格納されているデータをファイルとして管理し、リードデータやライトデータのキャッシュ制御を行うプログラムである。【００４１】
ファイル３０３は、ファイル管理情報３０３１と、データブロック３０３２とから構成される。ファイル管理情報３０３１とは、具体的には、所有ユーザＩＤおよびデータブロック３０３２の格納先情報などを持つinodeである。データブロック３０３２は、例えばオフィス文書の内容といったファイルの内容（コンテンツ）である。図３は、ディスク４５に格納されたファイルのデータがメモリ３２へ読み込まれている状態を示す。【００４２】
第１キャッシュ領域３０４は、後述するクローンファイル３０３Ｂのファイルキャッシュデータ７１Ｂ（図７参照）を格納するためのメモリ領域である。第２キャッシュ３０５は、後述する共有ファイル３０３Ａのファイルキャッシュデータ７１Ａ（図７参照）を格納するためのメモリ領域である。【００４３】
第１キャッシュ領域３０４と第２キャッシュ領域３０５とは、メモリ３２の領域上に明確に区別して設定されているわけではない。クローンファイル３０３Ｂのキャッシュデータ７１Ｂを記憶するセグメント（記憶単位）の集合体が第１キャッシュ領域３０４として認識される。同様に、共有ファイル３０３Ａのキャッシュデータ７１Ａを記憶するセグメントの集合体が第２キャッシュ領域３０５として認識される。【００４４】
以下の説明では、ファイルキャッシュされるデータをキャッシュデータまたはファイルキャッシュと略する場合がある。第１キャッシュ領域３０４および第２キャッシュ領域３０５を第１キャッシュ３０４および第２キャッシュ３０５と略する場合がある。【００４５】
ファイルサーバ３０は、ストレージインターフェース３４からＦＣ（Fibre Channel）などのネットワーク６１を介してストレージ装置４０と通信可能に接続されている。【００４６】
ファイルサーバ３０は、共有ファイル３０３Ａを参照する複数のクローンファイル３０３Ｂからなるグループを複数管理することができる。つまり、或る共有ファイル３０３Ａを参照するクローンファイル群３０３Ｂと、他の共有ファイル３０３Ａを参照する他のクローンファイル群３０３Ｂを、一つのファイルサーバ３０で管理できる。【００４７】
図４は、ストレージ装置４０の構成を示す。ストレージ装置４０は、例えば、ＣＰＵ４１と、メモリ４２と、ストレージインターフェース４３と、ディスクコントローラ４４とを含んで構成され、それらはバス４６で相互に接続されている。ディスクコントローラ４４と少なくとも一つ以上のディスク４５とは、冗長化された通信経路を介して相互に接続されている。【００４８】
メモリ４２は、例えば、ストレージを管理するためのストレージ管理プログラム４０１を格納している。ディスクコントローラ４４は、ＲＡＩＤ（Redundant Array of Inexpensive Disks）機能を有し、複数のディスク４５を冗長化させることにより、ディスク４５の耐障害性を向上させている。【００４９】
「記憶装置」の例であるディスク４５としては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス等のデータを読み書き可能な種々の記憶装置を利用可能である。【００５０】
例えば、ＦＣ（Fibre Channel）ディスク、ＳＣＳＩ（Small Computer System Interface）ディスク、ＳＡＴＡディスク、ＡＴＡ（AT Attachment）ディスク、ＳＡＳ（Serial Attached SCSI）ディスク等を用いることができる。また例えば、フラッシュメモリ、ＦｅＲＡＭ（Ferroelectric Random Access Memory）、ＭＲＡＭ（MagnetoresistiveRandom Access Memory）、相変化メモリ（Ovonic Unified Memory）、ＲＲＡＭ（登録商標）等の種々の記憶装置を用いることもできる。さらに、例えば、フラッシュメモリデバイスとハードディスクデバイスのように、種類の異なる記憶装置をストレージ装置４０内に混在させる構成でもよい。【００５１】
ストレージ管理プログラム４０１は、ディスクコントローラ４４の持つＲＡＩＤ機能を管理するプログラムである。例えば、ストレージ管理プログラム４０１は、「６Ｄ＋２Ｐ」等のような冗長化構成を設定する。本実施例において、ストレージ装置４０は、冗長化機能を備えているストレージでもよいし、備えていないストレージでもよい。ストレージ装置４０は、ファイル３０３のデータブロック３０３２を保存する機能を備えていればよく、記憶装置の種類および制御方法などは限定しない。【００５２】
なお、ディスク４５に格納されているデータは、重複排除処理が実施されており、基本的に重複データはディスク４５に記憶されていないものとして説明する。【００５３】
図５は、クローンファイルの構造を示す。この構造は、ディスク４５とファイルサーバ３０のメモリ３２とに作成される。ファイルアクセス時に、ディスク４５からファイルが読み込まれることで、メモリ３２上に図５に示す構造が作成される。【００５４】
クローンファイル３０３Ｂへのデータ書き込みなどにより、この構造が更新されると、ディスク４５へ書き戻される。このように、この構造は、ディスク４５とメモリ３２とで一致するように制御される。【００５５】
クローンファイル３０３Ｂは、共有ファイル３０３Ａを参照するファイルである。共有ファイル３０３Ａは、複数のクローンファイル３０３Ｂが共有するデータブロック３０３２を保持するファイルである。図５に示す例では、２つのクローンファイル３０３Ｂが１つの共有ファイル３０３Ａを参照している。各クローンファイル３０３Ｂと共有ファイル３０３Ａとは、ファイル管理情報３０３１と、ブロックポインタ３０３３と、データブロック３０３２とを含んで構成される。理解の容易のために、クローンファイル３０３Ｂに関する構成には符号の末尾に「Ｂ」を付し、共有ファイル３０３Ａに関する構成には符号の末尾に「Ａ」を付す。両構成を特に区別しない場合は、符号の末尾に「Ａ」も「Ｂ」も付さずに説明する。【００５６】
ファイル管理情報３０３１は、ファイルの種類や所有者などを保持する管理データであり、例えば、個々のファイルを識別する識別番号Ｄ１１と、参照情報Ｄ１２と、フラグＤ１３とを含む。さらに、後述のように、ファイル管理情報３０３１は、キャッシュ管理データ７０（図７参照）を含むこともできる。それらデータの利用は後述する。【００５７】
ブロックポインタ３０３３は、ストレージ装置４０のディスク４５に格納されたデータブロック３０３２を参照するデータである。共有ファイル３０３Ａのデータブロック３０３２Ａは、複数のクローンファイル３０３Ｂから共有されている。いずれのクローンファイル３０３Ｂが更新された場合でも、共有ファイル３０３Ａのデータブロック３０３２Ａは、更新されない。一方、各クローンファイル３０３Ｂのデータブロック３０３２Ｂは、クローンファイルの更新データである。つまり、クローンファイル３０３Ｂのデータブロック３０３２Ｂは、共有ファイルのデータブロック３０３２Ａとの差分である。【００５８】
個々のファイルを一意に識別するために、識別番号Ｄ１１が用いられる。識別番号Ｄ１１は、ファイル毎に異なる番号が割り当てられる。識別番号は識別情報、識別子などと呼び変えてもよい。【００５９】
参照情報Ｄ１２Ｂは、クローンファイル３０３Ｂが共有ファイル３０３Ａを参照するために用いるデータである。参照情報Ｄ１２Ｂには、参照先の共有ファイル３０３Ａのアドレスと、その共有ファイル３０３Ａの識別番号Ｄ１１Ａとが格納される。それらに限らず、参照情報Ｄ１２Ｂは、共有ファイル３０３Ａを特定できる情報であれば何でもよい。本実施例は、参照情報Ｄ１２Ｂの構成を限定しない。【００６０】
クローンファイル３０３Ｂと共有ファイル３０３Ａとを識別するために、フラグＤ１３には、クローンファイルフラグまたは共有ファイルフラグのいずれか一方が設定されるようになっている。ファイルがクローンファイル３０３Ｂである場合、クローンファイルフラグがフラグＤ１３Ｂへ設定される。一方、ファイルが共有ファイル３０３Ａである場合は、共有ファイルフラグがフラグＤ１３Ａに設定される。【００６１】
図５に示すクローンファイルの構造により、複数のクローンファイル３０３Ｂは、共有ファイル３０３Ａが保持するデータを共有することができる。また、共有ファイル３０３Ａを参照する新たなクローンファイル３０３Ｂを作成する場合、新規作成したクローンファイル３０３Ｂの参照情報Ｄ１２Ｂに、参照先の共有ファイル３０３Ａについての参照情報Ｄ１２Ｂを設定する。このように動作することによって、ファイルを丸ごとコピーする場合に比べて、クローンファイルを高速かつ小さいデータサイズで作成できる。【００６２】
図６は、クローンファイル３０３Ｂの構成を示す。クローンファイル３０３Ｂは、クローンファイル３０３Ｂへ格納されたデータブロック３０３２Ｂと、共有ファイル３０３Ａに格納されたデータブロック３０３２Ａとを重ね合わせることで構成される。【００６３】
例えばクローンファイル３０３Ｂが作成されたばかりで未だ更新されていない場合に、そのクローンファイル３０３Ｂについて読出し要求を受領すると、共有ファイル３０３Ａのデータブロック３０３２Ａが読出し要求の発行元に返される。読出し対象のクローンファイル３０３Ｂは、参照先である共有ファイル３０３Ａとの差分データを持っていないためである。【００６４】
これに対し、クローンファイル３０３Ｂにデータが書き込まれてファイル内容が更新されている場合において、そのクローンファイル３０３Ｂについての読出し要求を受領すると、クローンファイル３０３Ｂのデータブロック３０３２Ｂまたは共有ファイル３０３Ａのデータブロック３０３２Ａのいずれかが読み出し要求の発行元に返信される。【００６５】
読出し対象データがクローンファイル３０３Ｂの持つ差分データである場合、クローンファイル３０３Ｂのデータブロック３０３２Ｂが読み出し要求の発行元に返される。読出し対象データが参照先である共有ファイル３０３Ａの持つ共有データである場合、共有ファイル３０３Ａのデータブロック３０３２Ａが読み出し要求の発行元に返信される。【００６６】
図６の例では、クローンファイルの０番目のブロックを読み込むと、クローンファイル３０３Ｂの差分データ「０’」が読み込まれる。差分データが無いクローンファイルの２番目のブロックを読み込むと、共有ファイル３０３Ａの持つ共有データ「２」が読み込まれる。このように、クローンファイル３０３Ｂのデータブロック３０３２Ｂは、共有ファイル３０３Ａのデータブロック３０３２Ａをマスクするように構成されている。【００６７】
図７は、ファイルキャッシュの構造を示す。キャッシュ管理データ７０は、ファイルサーバ３０のメモリ３２に読み込まれたファイル管理情報３０３１に追加される。ディスク４５のデータブロック３０３２からファイルサーバ３０のメモリ３２へ読み込まれたデータをキャッシュデータ７１として管理するため、キャッシュ管理データ７０は、メモリアドレスなどをキーとしてキャッシュデータ７１を参照する。【００６８】
アプリケーションプログラム２０１２がファイルへアクセスすると、キャッシュ管理データ７０の参照情報を用いてキャッシュデータ７１を特定し、データを取得する。また、ディスク４５のデータブロック３０３２からメモリ３２へ読み込まれていない部分は、キャッシュデータ７１には現れない。【００６９】
ファイルキャッシュデータ７１は、ファイル毎に作成される。つまり、クローンファイル３０３Ｂのファイルキャッシュデータ７１Ｂと共有ファイル３０３Ａのファイルキャッシュデータ７１Ａとは、別々に管理される。前述のとおり、クローンファイル３０３Ｂのファイルキャッシュデータ７１Ｂは第１キャッシュ３０４として、共有ファイル３０３Ａのファイルキャッシュ７１Ａは第２キャッシュ３０５として、認識される。【００７０】
図８は、ファイルシステムプログラム３０２がファイルキャッシュを検索する動作の概要を示す図である。【００７１】
ファイルサーバ３０のメモリ３２に読み込まれたクローンファイル３０３Ｂのファイル管理情報３０３１Ｂの参照情報Ｄ１２Ｂには、メモリ３２に読み込まれた共有ファイル３０３Ａのメモリアドレスが設定されている。前述のとおり、共有ファイル３０３Ａのファイル管理情報３０３１Ａが特定できるのであれば、参照情報Ｄ１２Ｂにはどのような値を用いても良い。【００７２】
クローンファイル３０３Ｂのキャッシュ管理データ７０Ｂには、クローンファイル３０３Ｂのデータブロック３０３２Ｂのキャッシュデータ７１Ｂ（第１キャッシュ３０４のデータ）の管理情報が格納される。共有ファイル３０３Ａのキャッシュ管理データ７０Ａには、共有ファイル３０３Ａのデータブロック３０３２Ａのキャッシュデータ７１Ａ（第２キャッシュ３０５のデータ）の管理情報が格納される。【００７３】
ファイルシステムプログラム３０２によるファイルキャッシュの検索動作の概要を説明する。ファイルサーバプログラム３０１は、仮想化サーバ２０のファイルアクセスプログラム２０３からクローンファイル３０３Ｂへのアクセス要求を受理すると、ファイルシステムプログラム３０２へファイルアクセス要求を発行する。【００７４】
ファイルシステムプログラム３０２は、アクセス先のクローンファイル３０３Ｂについて第１キャッシュ３０４のキャッシュデータ７１Ｂを調べる。ファイルシステムプログラム３０２は、第１キャッシュ３０４のキャッシュデータ７１Ｂにアクセス対象データがある場合、そのデータをファイルサーバプログラム３０１へ返却する（Ｓ１）。【００７５】
ファイルシステムプログラム３０２は、キャッシュデータ７１Ｂにアクセス対象データが無い場合、ディスク４５にアクセス対象データがあるかを調べる（Ｓ２）。アクセス対象データがキャッシュデータ７１Ｂには無く、ディスク４５に記憶されている場合とは、例えば、アクセス対象データを初めて読み出す場合などである。ファイルシステムプログラム３０２は、ディスク４５にアクセス対象データ（ここでは、データ「１’」のブロック）が有る場合、そのデータをメモリ３２に読み込み、第１キャッシュ３０４として保持する（Ｓ３）。【００７６】
ディスク４５のクローンファイル３０３Ｂにアクセス対象データ（ここではデータ「２’」のブロック）が無い場合、ファイルシステムプログラム３０２は、共有ファイル３０３Ａのキャッシュデータ７１Ａを有する第２キャッシュ３０５を検索する（Ｓ４）。【００７７】
ファイルシステムプログラム３０２は、第２キャッシュ３０５にアクセス対象データがある場合、そのデータをファイルサーバプログラム３０１へ返却する。ファイルシステムプログラム３０２は、アクセス対象データ（ここではデータ「２」のブロック）が第２キャッシュ３０５に無く、ディスク４５内の共有ファイル３０３Ａに有る場合、そのデータをメモリ３２へ読み込み、第２キャッシュ３０５のキャッシュデータ７１Ａとして保持する（Ｓ５）。【００７８】
ファイルシステムプログラム３０２は、ディスク４５の共有ファイル３０３Ａにもアクセス対象データが無い場合、ファイルサーバプログラム３０１へ「０」で埋めたゼロパディングデータを返却する（Ｓ６）。【００７９】
以上のようにファイルシステムプログラム３０２が動作することによって、図８のクローンファイル３０３Ｂ（１）を読み込んだ場合に、クローンファイル３０３Ｂ（１）にデータブロック３０３２が無ければ、共有ファイル３０３Ａへ第２キャッシュ３０５が設定される。【００８０】
従って、これ以降に、クローンファイル３０３Ｂ（２）を読み込んだ場合、第２キャッシュ３０５のキャッシュデータ７１Ａを利用できる。このように、本実施例では、共有ファイル３０３Ａのデータブロック３０３２Ａのキャッシュデータ７１Ａを、複数のクローンファイル３０３Ｂで共有できる。その結果、共有ファイル３０３Ａのデータブロック３０３２Ａは１度だけディスク４５から読み込んで、第２キャッシュ３０５のキャッシュデータ７１Ａとして管理すればよい。この結果、例えば、同一ＯＳが複数の仮想ＰＣ２０１で稼働する場合などでは、複数のクローンファイル３０３Ｂが１つの共有ファイル３０３Ａのキャッシュデータ７１Ａを比較的多く共有でき、共有効果が高まるため、ディスク４５へのＩ／Ｏ発行数を削減できる。【００８１】
図９は、ファイルシステムプログラム３０２がファイルキャッシュを検索する処理のフローチャートである。ファイルシステムプログラム３０２は、ファイルアクセス要求を受理すると、対象データについて、クローンファイル３０３Ｂの第１キャッシュ３０４または共有ファイル３０３Ａの第２キャッシュ３０５を検索する。ファイルシステムプログラム３０２は、まず最初に、クローンファイル３０３Ｂの第１キャッシュ３０４にキャッシュデータ７１Ｂが設定されているかどうかを調べる（Ｓ１１）。【００８２】
ファイルシステムプログラム３０２は、第１キャッシュ３０４にキャッシュデータ７１Ｂが設定されていると判定した場合（Ｓ１１：ＹＥＳ）、そのキャッシュデータ７１Ｂを呼び出し元へ返却して、本処理を終了する（Ｓ１９）。【００８３】
一方、ファイルシステムプログラム３０２は、第１キャッシュ３０４にキャッシュデータ７１Ｂが設定されていないと判定した場合（Ｓ１１：ＮＯ）、クローンファイル３０３Ｂのデータブロック３０３２Ｂがあるかどうかを調べる（Ｓ１２）。ファイルシステムプログラム３０２は、差分データを格納するデータブロック３０３２Ｂがあると判定した場合（Ｓ１２：ＹＥＳ）、そのデータブロック３０３２Ｂをキャッシュデータ７１Ｂへ読み込む（Ｓ１３）。ファイルシステムプログラム３０２は、読み込んだデータを第１キャッシュ３０４に属するキャッシュデータとし、そのデータを呼び出し元へ返却して本処理を終了する（Ｓ１９）。【００８４】
ファイルシステムプログラム３０２は、クローンファイル３０３Ｂにデータブロック３０３２Ｂが無いと判定した場合（Ｓ１２：ＮＯ）、共有ファイル３０３Ａの第２キャッシュ３０５にキャッシュデータ７１Ａがあるか調べる（Ｓ１４）。ファイルシステムプログラム３０２は、キャッシュデータ７１Ａがあると判定した場合（Ｓ１４：ＹＥＳ）、ステップ２０以降の処理を実施する。【００８５】
一方、ファイルシステムプログラム３０２は、第２キャッシュ３０５にキャッシュデータ７１Ａが無いと判定した場合（Ｓ１４：ＮＯ）、共有ファイル３０３Ａのデータブロック３０３２Ａがあるかどうかを調べる（Ｓ１５）。ファイルシステムプログラム３０２は、共有ファイル３０３Ａのデータブロック３０３２Ａがあると判定した場合（Ｓ１５：ＹＥＳ）、そのデータを読み出して第２キャッシュ３０５へ設定する（Ｓ１６）。そして、キャッシュ検索処理がクローンファイルの部分書き込みであるか判定する（Ｓ５０）。部分書き込みであった場合（Ｓ５０：ＹＥＳ）、第２キャッシュ３０５のデータを第１キャッシュ３０４へコピーし（Ｓ５１）、第１キャッシュのデータを呼び出し元へ返却する（Ｓ１９）。一方、部分書き込みで無かった場合（Ｓ５０：ＮＯ）、第２キャッシュ３０５のデータを呼び出し元へ返却する（Ｓ１７）。ファイルシステムプログラム３０２は、共有ファイル３０３Ａにデータブロック３０３２Ａが無いと判定した場合（Ｓ１５：ＮＯ）、０で埋められたデータを呼び出し元へ返却する（Ｓ１８）。【００８６】
以上に説明したようにファイルシステムプログラム３０２が動作すると、クローンファイル３０３Ｂのデータブロック３０３２Ｂは第１キャッシュ３０４へ設定され、共有ファイル３０３Ａのデータブロック３０３２Ａは第２キャッシュ３０５へ設定される。その結果、複数のクローンファイル３０３Ｂが共有ファイル３０３Ａのキャッシュデータ７１Ａを共有することができる。【００８７】
図１０は、ファイルサーバ３０のファイルシステムプログラム３０２がファイルを読み込む処理のフローチャートを示す。【００８８】
エンドユーザは、クライアント端末１０の仮想デスクトップクライアントプログラム１０１を用いて、仮想化サーバ２０の仮想デスクトップサーバプログラム２０１１へ接続する。仮想デスクトップサーバプログラム２０１１は、アプリケーションプログラム２０１２を動作させる。アプリケーションプログラム２０１２が、クローンファイル３０３Ｂとして作成されたＶＭＤＫファイルのデータブロック３０３２を読み込む場合、アプリケーションプログラム２０１２は、ハイパバイザプログラム２０２を通して、ファイルアクセスプログラム２０３を呼び出す。【００８９】
呼び出されたファイルアクセスプログラム２０３は、ファイルサーバ３０のファイルサーバプログラム３０１へファイル読み込み要求を送信する。ファイルサーバ３０のファイルサーバプログラム３０１は、ファイル読み込み要求を受理する（Ｓ３１）。【００９０】
ファイルサーバプログラム３０１はファイルシステムプログラム３０２へファイル読み込み要求を送信し、ファイルシステムプログラム３０２は、そのファイル読み込み要求を受理して処理を行う（Ｓ３２）。【００９１】
ファイルシステムプログラム３０２は、図９で述べたキャッシュ検索処理を呼び出す（Ｓ３３）。キャッシュ検索処理によって、ＶＭＤＫファイルのデータブロック３０３２のデータが読み込まれて、そのデータが返却される。ファイルシステムプログラム３０２は、キャッシュ検索処理から返却されたデータブロック３０３２を、ファイルサーバプログラム３０１へ返却する（Ｓ３４）。【００９２】
ファイルサーバプログラム３０１は、ファイルアクセスプログラム２０３へデータを返却する（Ｓ３５）。仮想化サーバ２０のファイルアクセスプログラム２０３は、受け取ったデータを、ハイパバイザプログラム２０２を通してアプリケーションプログラム２０１２に渡す。【００９３】
図１１は、ファイルサーバ３０のファイルシステムプログラム３０２が実行するファイル書き込み処理のフローチャートである。【００９４】
エンドユーザは、クライアント端末１０の仮想デスクトップクライアントプログラム１０１を用いて、仮想化サーバ２０の仮想デスクトップサーバプログラム２０１１へ接続する。仮想デスクトップサーバプログラム２０１１は、アプリケーションプログラム２０１２を動作させる。アプリケーションプログラム２０１２が、クローンファイル３０３Ｂとして作成されたＶＭＤＫファイルのデータブロック３０３２にデータを書き込む場合、アプリケーションプログラム２０１２は、ハイパバイザプログラム２０２を通して、ファイルアクセスプログラム２０３を呼び出す。【００９５】
呼び出されたファイルアクセスプログラム２０３は、ファイルサーバ３０のファイルサーバプログラム３０１へファイル書き込み要求および書き込みデータを送信する。ファイルサーバプログラム３０１は、そのファイル書き込み要求を受理し、書き込みデータを受け取る（Ｓ４１）。ファイルサーバプログラム３０１は、ファイルシステムプログラム３０２へファイル書き込み要求および書き込みデータを送信し、ファイルシステムプログラム３０２がファイル書き込み要求を受理する（Ｓ４１）。【００９６】
ファイルシステムプログラム３０２は、受け取った書き込みデータのサイズを調べる（Ｓ４２）。すなわち、ファイルシステムプログラム３０２は、書き込みデータサイズがファイルシステムプログラム３０２のデータ管理サイズであるブロックサイズと等しいか調べる（Ｓ４２）。【００９７】
ここで、ファイルシステムプログラム３０２のデータ管理単位であるブロックとファイル３０３のデータの書き換えとの関係について説明する。ファイルシステムプログラム３０２は、ファイル３０３に保存されているデータを、ブロックと呼ぶ大きさに区切って管理している。【００９８】
ファイルシステムプログラム３０２は、ブロック単位で、ファイルのデータを読み書きする。ブロックの大きさは、例えば、４ＫＢである。ファイルサイズが４ＫＢの大きさの場合は１ブロックとなる。ファイルシステムプログラム３０２は、４ＫＢ未満のデータを用いてブロックを更新する場合（部分更新）、ディスク４５からメモリ３２へデータを読み込み、更新データで内容を書き換えたデータをそのブロックへ書き込む。【００９９】
４ＫＢのデータの場合、ブロック全体が書き換えられるため、ディスク４５からメモリ３２へデータを読み込む必要はない。ファイルサイズが５ＫＢの大きさの場合は、２ブロックとなる。このファイルを書き換える場合、ファイルシステムプログラム３０２は、まず先頭の４ＫＢ（１ブロック目）を書き換え、次に、後半の１ＫＢ（２ブロック目）を部分更新する。なお、２ブロック目のデータのうち後半の３ＫＢは使用しない。このように、ファイル３０３に格納されているデータはある大きさのブロックに分けられて管理されており、その大きさの単位で読み書きされる。【０１００】
図１１に戻る。ステップＳ４２で、書き込みデータサイズがブロックサイズと同じサイズであると判定した場合、ファイルシステムプログラム３０２は、第１キャッシュ３０４へデータを書き込む（Ｓ４３）。ファイルシステムプログラム３０２は、第１キャッシュ３０４に書き込んだデータをディスク４５へ書き込む（Ｓ４６）。ファイルシステムプログラム３０２は、書き込みデータが全て処理したか判断する（Ｓ４７）。ファイルシステムプログラム３０２は、書き込みが終わっていないと判定した場合（Ｓ４７：ＮＯ）、次の書き込みデータブロックを選択して（Ｓ４８）、ステップＳ４２に戻る。【０１０１】
ステップＳ４２で、書き込みデータの大きさがファイルシステムプログラム３０２で扱うブロックサイズより小さいと判定した場合（Ｓ４２：ＮＯ）、ファイルシステムプログラム３０２は、部分更新を行うために、図９で述べたキャッシュ検索処理を呼び出す（Ｓ４４）。ファイルシステムプログラム３０２は、第１キャッシュ３０４へデータを部分的に書き込み（Ｓ４５）、ステップＳ４６以降を実行する。【０１０２】
ファイルシステムプログラム３０２は、ステップＳ４７で、受信した書き込みデータを全て書き込んだと判断した場合（Ｓ４７：ＹＥＳ）、書き込み結果をファイルサーバプログラム３０１へ返却する（Ｓ４９）。【０１０３】
ファイルサーバプログラム３０１は、ファイルシステムプログラム３０２から受領した書込み結果を、ファイルアクセスプログラム２０３へ返却する。仮想化サーバ２０のファイルアクセスプログラム２０３は、ハイパバイザプログラム２０２を通して、アプリケーションプログラム２０１２へ書き込み結果を渡す。【０１０４】
以上のように本実施例では、クローンファイル３０３Ｂに格納されているデータ（つまり、クローンファイル３０３Ｂへ書き込まれた差分データ）については、第１キャッシュ３０４に格納されファイル毎に管理される。一方でファイルクローン機能により作成した複数のクローンファイル３０３Ｂで共有されるデータについては共有ファイル３０３Ａのファイルキャッシュ７１（第２キャッシュ３０５のデータ）に格納されて共有される。よって、例えば、同じＯＳが動作する仮想ＰＣ２０１を多量に作成する場合などのように、１つの共有ファイル３０３Ａを複製して大量のクローンファイル３０３Ｂを生成する場合に、本実施例によればクローン毎に同じデータをキャッシュする必要がなくなり、効率的なキャッシュの利用を可能とする。【０１０５】
従って、先に実行されたクローンファイル３０３Ｂへのファイルアクセスによって読み込まれたキャッシュデータ７１Ａを、次のクローンファイル３０３Ｂについてのファイルアクセス処理で利用することができる。この結果、ディスク４５へのＩ／Ｏ数を削減でき、ファイルサーバ３０およびストレージ装置４０の負荷を軽減できる。又、読み出しは、第１キャッシュ３０４に対象データが無い場合に第２キャッシュ３０５を検索するようにすることで、新たな計算負荷等を要求せずに、新たな書込みを受けて差分データを有するクローンファイル含めて差分データと共有データを矛盾なく読み出すことができる。
【実施例２】
【０１０６】
図１２〜図１４を用いて第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例に相当するため、第１実施例との相違を中心に説明する。本実施例では、共有ファイル３０３Ａのファイルキャッシュ７１Ａ（第２キャッシュ３０５）の利用効率を上げるために、クローンファイル３０３Ｂのデータブロック３０３２Ｂの容量（つまり、クローンファイル３０３Ｂの差分データの容量）に基づいて、第２キャッシュ３０５の共有の要否を制御できるようにしている。【０１０７】
例えば、仮想ＰＣ２０１をしばらく動作させると、エンドユーザの作成したファイルデータやＯＳのアップデートデータなどによって、クローンファイル３０３Ｂの差分データが増加する。差分データについては、第２キャッシュ３０５のデータを共有できないため、本実施例の構成が有効に働く。【０１０８】
図１２は、本実施例におけるファイルサーバ３０の構成を示す。本実施例のファイルサーバ３０は、第１実施例で述べたファイルサーバ３０の構成要素に加えて、差分データの閾値を設定するための閾値設定情報３０６を備える。閾値設定情報３０６は、メモリ３２に記憶されている。【０１０９】
図１３は、管理端末５０の管理インターフェース５０１が提供する、閾値を設定するためのＧＵＩ５０１１の一例を示す図である。閾値設定ＧＵＩ５０１１は、閾値を入力するための閾値入力部５０１１１と、入力した閾値をファイルサーバ３０に設定するための設定ボタン５０１１２とを含む。システム管理者は、閾値入力部５０１１１に差分データの容量を入力し、設定５０１１２を押す。これにより、管理端末５０の管理プログラム５０２を通して、ファイルサーバ３０の差分閾値設定情報３０６が設定される。又、差分閾値設定情報は予め設定されているものであっても良い。【０１１０】
図１４は、本実施例によるキャッシュ検索処理を示すフローチャートである。本実施例では、クローンファイル３０３Ｂのデータブロック３０３２Ｂの容量が閾値設定情報３０６に設定された容量よりも大きくなった場合に、第１キャッシュ３０４に差分データを格納する。本実施例のキャッシュ検索処理は、図９で述べたステップＳ１１〜Ｓ１９に加えて、新規ステップＳ２０〜Ｓ２２を備える。【０１１１】
ファイルシステムプログラム３０２は、ステップＳ１４で第２キャッシュ３０５にデータがあると判定した場合、または、ステップＳ１６で第２キャッシュ３０５に共有ファイル３０３Ａのデータブロック３０３２Ａを読み込んだ場合のいずれかの場合に、ステップＳ２０を実行する。ファイルシステムプログラム３０２は、ステップＳ２０で、クローンファイル３０３Ｂのデータブロック３０３２Ｂの大きさ（差分データサイズ）が閾値設定情報３０６に設定された閾値（Ｔｈ）よりも大きいか判定する。【０１１２】
ファイルシステムプログラム３０２は、クローンファイル３０３Ｂのデータブロック３０３２Ｂの大きさが閾値Ｔｈ以下であると判定した場合（Ｓ２０：ＮＯ）、クローンファイルの部分書き込みであるか判定する（Ｓ５０）。部分書き込みであった場合（Ｓ５０：ＹＥＳ）、第２キャッシュ３０５のデータを第１キャッシュ３０４へコピーし（Ｓ５１）、第１キャッシュのデータを呼び出し元へ返却する（Ｓ１９）。一方、部分書き込みでは無かった場合（Ｓ５０：ＮＯ）、共有ファイル３０３Ａの第２キャッシュ３０５を本処理の呼び出し元へ返却する（Ｓ１７）。【０１１３】
一方、ファイルシステムプログラム３０２は、クローンファイル３０３Ｂのデータブロック３０３２Ｂの大きさが閾値Ｔｈより大きいと判定した場合（Ｓ２０：ＹＥＳ）、第２キャッシュ３０５のデータをクローンファイル３０３Ｂの第１キャッシュ３０４へコピーする（Ｓ２１）。ファイルシステムプログラム３０２は、第１キャッシュ３０４のデータを本処理の呼び出し元に返却する（Ｓ２２）。【０１１４】
このように構成される本実施例も第１実施例と同様の作用効果を奏する。さらに、本実施例では、図１４で述べたキャッシュ検索処理が行われることで、差分データのサイズが差分閾値設定情報３０６に設定した閾値を超えたクローンファイル３０３Ｂは、第２キャッシュ３０５を利用しなくなる。その結果、次回以降のキャッシュ検索処理ではステップＳ１１でＹＥＳと判定され、ファイルシステムプログラム３０２は、クローンファイル３０３Ｂの第１キャッシュ３０４のデータを呼び出し元に返却できる可能性が高まる。その結果、本実施例では、差分データが閾値以下のクローンファイル３０３Ｂだけで共有ファイル３０３Ａのキャッシュデータ７１Ａを共有でき、キャッシュの検索効率が向上する。そのため、ＣＰＵの処理負荷が低下してクローンファイルのアクセス応答性能を上げるこｔが可能となる。
【実施例３】
【０１１５】
図１５および図１６を用いて、第３実施例を説明する。本実施例では、第２キャッシュ３０５の利用効率を上げるために、ファイルキャッシュ７１Ａを共有することについての要否を指定するための設定情報を用いる。例えば、仮想ＰＣ２０１上で動作するＯＳの種類によっては、ファイルキャッシュ７１Ａの共有効果が低いものなどがありえる。その場合に、本実施例が有効に働く。【０１１６】
図１５は、管理端末５０の管理インターフェース５０１が提供する、共有の要否を設定するためのＧＵＩ５０１２の一例を示す。共有要否設定ＧＵＩ５０１２は、例えば、クローンファイル名５０１２１と、設定ボタン５０１２２とを含む。システム管理者は、クローンファイル名５０１２１に、本機能を有効にするクローンファイル名を入力して、設定ボタン５０１２２を押す。【０１１７】
これにより、管理端末５０の管理プログラム５０２を通して、ファイルサーバ３０の共有ファイル３０３ＡのフラグＤ１３Ａに、ファイルキャッシュの共有を拒否するためのファイルキャッシュ共有拒否フラグが設定される。【０１１８】
ファイルキャッシュ共有拒否フラグが共有ファイル３０３Ａに設定された場合、その共有ファイル３０３Ａを参照するクローンファイル３０３Ｂは、共有ファイル３０３Ａの第２キャッシュ３０５を共有しない。【０１１９】
図１６は、キャッシュ検索処理を示すフローチャートである。本処理は、図９で述べたステップＳ１１〜Ｓ１９と図１４で述べたステップＳ２１およびＳ２２とを備えており、さらに、図１４で述べたステップＳ２０に代えて新規ステップＳ２３を備える。【０１２０】
本処理では、共有ファイル３０３ＡのフラグＤ１３Ａにファイルキャッシュ共有拒否フラグが設定されている場合、共有ファイル３０３Ａから読み出したデータを第１キャッシュ３０４に格納する。【０１２１】
ファイルシステムプログラム３０２は、ステップＳ１４で、第２キャッシュ３０５にデータがあると判定した場合、または、ステップＳ１６で、第２キャッシュ３０５に共有ファイル３０３Ａのデータブロック３０３２Ａを読み込んだ場合のいずれかの場合に、共有ファイル３０３ＡのフラグＤ１３Ａにファイルキャッシュ共有拒否フラグが設定されているか調べる（Ｓ２３）。【０１２２】
ファイルシステムプログラム３０２は、ファイルキャッシュ共有拒否フラグが設定されていないと判定した場合（Ｓ２３：ＮＯ）、クローンファイルの部分書き込みであるか判定する（Ｓ５０）。部分書き込みであった場合（Ｓ５０：ＹＥＳ）、第２キャッシュ３０５のデータを第１キャッシュ３０４へコピーし（Ｓ５１）、第１キャッシュのデータを呼び出し元へ返却する（Ｓ１９）。一方、部分書き込みでは無かった場合（Ｓ５０：ＮＯ）、共有ファイル３０３Ａのファイルキャッシュ７１Ａを呼び出し元に返却する（Ｓ１７）。一方、ファイルシステムプログラム３０２は、ファイルキャッシュ共有拒否フラグが設定されていると判定した場合（Ｓ２３：ＹＥＳ）、第２キャッシュ３０５をクローンファイル３０３Ｂの第１キャッシュ３０４へコピーする（Ｓ２１）。そして、ファイルシステムプログラム３０２は、第１キャッシュ３０４のデータを呼び出し元に返却する（Ｓ２２）。【０１２３】
このように構成される本実施例も第１実施例と同様の作用効果を奏する。さらに本実施例では、ファイルキャッシュ共有拒否フラグが設定されている共有ファイル３０３Ａを元にしてファイルクローン機能によりクローンファイル３０３Ｂを複製した場合、そのクローンファイル３０３Ｂは共有ファイル３０３Ａのファイルキャッシュ７１を共有しない。よって、ユーザは予め、もしくは、システム利用中に共有キャッシュ利用のメリットが低いファイルについては、共有キャッシュを利用しないように設定する。【０１２４】
従って、キャッシュ共有効果が低いと考えられる場合に、ファイルキャッシュ共有拒否フラグを共有ファイル３０３Ａに設定しておけば、その分だけファイルサーバ３０のメモリ３２に空きを作ることができる。その空いたメモリを、キャッシュ共有効果の高い他のクローンファイルおよび共有ファイルのグループに割り当てることで、ファイルサーバ３０のメモリ３２を有効に利用することができる。又、共有キャッシュ検索の処理を行わずに済むようにし、システムとしてのレスポンス性能を向上させることができる。
【０１２５】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、上述された本発明の技術的特徴は、適宜結合させて実施することができる。
【符号の説明】
【０１２６】
１０：クライアント端末、２０：仮想化サーバ、３０：ファイルサーバ、４０：ストレージ装置、５０：管理端末、７０：キャッシュ管理データ、７１：キャッシュデータ、２０１：仮想ＰＣ、３０１：ファイルサーバプログラム、３０２：ファイルシステムプログラム、３０３：ファイル、３０３Ａ：共有ファイル、３０３Ｂ：クローンファイル、３０４：第１キャッシュ領域、３０５：第２キャッシュ領域
【図１】
0006033420.tif 000002
【図２】
0006033420.tif 000003
【図３】
0006033420.tif 000004
【図４】
0006033420.tif 000005
【図５】
0006033420.tif 000006
【図６】
0006033420.tif 000007
【図７】
0006033420.tif 000008
【図８】
0006033420.tif 000009
【図９】
0006033420.tif 000010
【図１０】
0006033420.tif 000011
【図１１】
0006033420.tif 000012
【図１２】
0006033420.tif 000013
【図１３】
0006033420.tif 000014
【図１４】
0006033420.tif 000015
【図１５】
0006033420.tif 000016
【図１６】
0006033420.tif 000017