(57)【特許請求の範囲】
【請求項１】
ブロックを単位としてデータを格納するシステムであり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するシステムであり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知する、重複データ発見手段と、
前記一致データを構成するブロックを、データマップ管理手段により識別して、前記一致データの存在をもとに重複ブロックを発見し、重複ブロックを統合することで空き容量を確保する重複ブロック発見手段を備えることを特徴とするデータ格納システム。
【請求項２】
ブロックを単位としてデータを格納するシステムであり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するシステムであり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知する、重複データ発見手段と、
ある仮想マシン上で一意なデータ識別子と同仮想マシン上で一意な仮想ブロック識別子を関連付けて管理するデータマップ管理手段と、
データ識別子をパラメータとして含むデータアクセスコマンドを受け取った際に、データ識別子に対応する仮想ブロック識別子をデータマップ管理手段から取得し、仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドをブロックアクセス手段に発行し、ブロックアクセス手段からのレスポンスを受信し、データアクセスコマンドのレスポンスを返すデータ管理手段と、
ある仮想マシン管理手段上で一意な仮想マシン識別子と前記仮想ブロック識別子の組と、あるデータ格納装置上で一意な実ブロック識別子を関連付けて管理するブロックマップ管理手段と、
実ブロック識別子に対応付けてブロックデータを記憶する実ブロック記憶手段と、
仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドを受け取った際に、仮想ブロックアクセスコマンドの送信元の仮想マシン識別子と仮想ブロック識別子の組に対応する実ブロック識別子をブロックマップ管理手段から取得し、実ブロック識別子をパラメータとして含む実ブロックアクセスコマンドを実ブロック記憶手段に発行し、実ブロック記憶手段からのレスポンスを受信し、仮想ブロックアクセスコマンドのレスポンスを返すブロックアクセス手段と、
前記の一致データを構成するブロックデータについて一致するブロックが存在したならば、前記のデータマップ管理手段で管理されている関連付けを変更し、一致データについては１個のブロックを割り当てて、残りのブロックを空き容量とする重複ブロック発見手段を備えたことを特徴とするデータ格納システム。
【請求項３】
前記重複データ発見手段は、前記メタ情報として、仮想マシン上で動作しているオペレーティングシステムの名称を用いることを特徴とする請求項１または２記載のデータ格納システム。
【請求項４】
前記重複データ発見手段は、前記データ識別子としてファイル名を用い、前記データ管理手段はファイルシステムであることを特徴とする請求項２に記載のデータ格納システム。
【請求項５】
前記重複データ発見手段は、前記データ識別子としてファイル名を用い、前記データ管理手段はファイルメモリマップシステムであることを特徴とする請求項２に記載のデータ格納システム。
【請求項６】
ブロックを単位としてデータを格納するデータ格納方法であり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するデータ格納方法であり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知する重複データ発見ステップと、
前記一致データを構成するブロックを、データマップ管理手段により識別して、前記一致データの存在をもとに重複ブロックを発見し、重複ブロックを統合することで空き容量を確保するステップとを有することを特徴とするデータ格納方法。
【請求項７】
ブロックを単位としてデータを格納するデータ格納方法であり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するデータ格納方法であり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知する重複データ発見ステップと、
ある仮想マシン上で一意なデータ識別子と同仮想マシン上で一意な仮想ブロック識別子を関連付けて管理するステップと、
データ識別子をパラメータとして含むデータアクセスコマンドを受け取った際に、データ識別子に対応する仮想ブロック識別子をデータマップ管理手段から取得し、仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドをブロックアクセス手段に発行し、ブロックアクセス手段からのレスポンスを受信し、データアクセスコマンドのレスポンスを返すステップと、
ある仮想マシン管理手段上で一意な仮想マシン識別子と前記仮想ブロック識別子の組と、あるデータ格納装置上で一意な実ブロック識別子を関連付けて管理するステップと、
実ブロック識別子に対応付けてブロックデータを記憶するステップと、
仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドを受け取った際に、仮想ブロックアクセスコマンドの送信元の仮想マシン識別子と仮想ブロック識別子の組に対応する実ブロック識別子を取得し、実ブロック識別子をパラメータとして含む実ブロックアクセスコマンドを実ブロック記憶手段に発行し、実ブロック記憶手段からのレスポンスを受信し、仮想ブロックアクセスコマンドのレスポンスを返すステップと、
前記の一致データを構成するブロックデータについて一致するブロックが存在したならば、管理されている関連付けを変更し、一致データについては１個のブロックを割り当てて、残りのブロックを空き容量とするステップとを有することを特徴とするデータ格納方法。
【請求項８】
前記重複データ発見ステップでは、前記メタ情報として、仮想マシン上で動作しているオペレーティングシステムの名称を用いることを特徴とする請求項６または７記載のデータ格納方法。
【請求項９】
ブロックを単位としてデータを格納するデータ格納用プログラムであり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するデータ格納用プログラムであり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知するステップと、
前記一致データを構成するブロックを、データマップ管理手段により識別して、前記一致データの存在をもとに重複ブロックを発見し、重複ブロックを統合することで空き容量を確保するステップとを実行させることを特徴とするデータ格納用プログラム。
【請求項１０】
ブロックを単位としてデータを格納するデータ格納用プログラムであり、かつ、ある一塊のデータを、１個以上のブロックの集合として格納するデータ格納用プログラムであり、
ある仮想マシン上で動作し、メタ情報をもとに優先順位を決定し、その優先順位に従ってデータを取得し、取得したデータと一致するデータが他の仮想マシン上に存在していることを確認したならば、一致データの存在を重複ブロック発見手段に通知するステップと、
ある仮想マシン上で一意なデータ識別子と同仮想マシン上で一意な仮想ブロック識別子を関連付けて管理するステップと、
データ識別子をパラメータとして含むデータアクセスコマンドを受け取った際に、データ識別子に対応する仮想ブロック識別子をデータマップ管理手段から取得し、仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドをブロックアクセス手段に発行し、ブロックアクセス手段からのレスポンスを受信し、データアクセスコマンドのレスポンスを返すステップと、
ある仮想マシン管理手段上で一意な仮想マシン識別子と前記仮想ブロック識別子の組と、あるデータ格納装置上で一意な実ブロック識別子を関連付けて管理するステップと、
実ブロック識別子に対応付けてブロックデータを記憶するステップと、
仮想ブロック識別子をパラメータとして含む仮想ブロックアクセスコマンドを受け取った際に、仮想ブロックアクセスコマンドの送信元の仮想マシン識別子と仮想ブロック識別子の組に対応する実ブロック識別子を取得し、実ブロック識別子をパラメータとして含む実ブロックアクセスコマンドを実ブロック記憶手段に発行し、実ブロック記憶手段からのレスポンスを受信し、仮想ブロックアクセスコマンドのレスポンスを返すステップと、
前記の一致データを構成するブロックデータについて一致するブロックが存在したならば、管理されている関連付けを変更し、一致データについては１個のブロックを割り当てて、残りのブロックを空き容量とするステップとを実行させることを特徴とするデータ格納用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想マシン向けデータ格納システム、仮想マシン向けデータ格納方法および仮想マシン向けデータ格納用プログラムに関し、特に複数の仮想マシンをホストするシステムにおいて、各仮想マシンに格納されているデータを効率よく探索し、２個以上の仮想マシン上に存在する同一データ、もしくは類似データを発見し、それらのデータのうち１個を保持し、残りは同一データへのポインタに置換することにより、ストレージ上でのデータの重複を防止し、データ格納の為のストレージの使用量を抑制できる（ストレージ使用量の抑制に用いる）仮想マシン向けデータ格納システム、仮想マシン向けデータ格納方法および仮想マシン向けデータ格納用プログラムに関するものである。
【背景技術】
【０００２】
関連するデータ格納方法の一例が、特許文献１に記載されている。この方法は、データをブロック単位で取り扱い、各ブロックのハッシュ値を計算し、あるブロックを保存する際に、そのブロックとハッシュ値が一致するブロックが既に保存されている場合には、新規に保存しようとしているブロックと、ハッシュ値の一致した既に保存されているブロックのデータが一致していないかを確認し、一致していた場合には、新規保存しようとしているブロックについては、データそのものを保存するのではなく、既に保存されているブロックを参照するためのブロック識別子を保存することにより、ブロックの重複保存を回避して記憶容量を節約する。【０００３】
また、関連するデータ格納方法の一例が、非特許文献１に記載されている。この方法は、異なる仮想マシンから使用されている、異なるメモリページについて、ページ中のデータが等しい場合には、仮想マシンマネージャ中のシャドウページ管理テーブルを変更し、異なる仮想マシンから同一のメモリページを参照することで、メモリページの重複使用を回避して、記憶容量を節約する。等しいデータを保持するページを発見するために、ページ中のデータのハッシュ値を計算し、ハッシュ値の等しいページについてページ中のデータの比較を行う。【０００４】
ここで、同種のゲストＯＳ２の制御下で動作する仮想計算機α，βは、セグメンテーション方式による仮想記憶管理機能共用手段により、実ＳＹＳＩＮファイル装置及び実入力装置に対する入出力を管理する入出力管理部と、実入力装置から実ＳＹＳＩＮファイル装置８へのジョブの登録および登録されたジョブの実施状態を管理するＳＹＳＩＮリーダ部と、ゲストＯＳ又はＳＹＳＩＮリーダ部からの要求でジョブの登録および実行に必要なデータの入出力を入出力管理部に指示するデータ管理部とを、システム共有アドレス空間に配置し、仮想計算機α，βで共用するように構成することで、複数の仮想計算機で実ＳＹＳＩＮファイル装置および実入力装置を共用し、ＳＹＳＩＮ制御を実計算機システムと同様に行える技術が提案されている（例えば、特許文献２参照）。
【特許文献１】米国特許出願公開第２００７／０１０１０７４号明細書
【特許文献２】特開平０６−１１９１９２号公報
【非特許文献１】タイトル: Virtual machines: Memory resource management in VMware ESX server  著者: Carl A. Waldspurger  書誌情報: December 2002 ACM SIGOPS Operating Systems Review, Volume 36 Issue SI  Publisher: ACM Press
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述の関連技術では、複数の仮想マシンを実行するに当たって、それぞれの仮想マシンに格納されているデータから、共通部分を短時間のうちに発見するのが難しかった。その理由は、前記の特許文献１および非特許文献１に示されている技術により、仮想マシン間の重複データを発見し、記憶容量を節約することが出来るが、その際にはそれぞれの仮想マシンに格納されているデータのブロックのハッシュ値を計算する必要がある。ここで、従来技術では、ハッシュ値の一致する可能性が高いブロックの組を、ハッシュ値を計算する前に推定することができないため、全てのブロックのハッシュ値を計算しなければならない為である。【０００６】
本発明の目的は、複数の仮想マシンを実行でき、それぞれの仮想マシンに格納されているデータから、共通部分を短時間のうちに発見することによって、記憶装置の空き容量を短時間で確保できる、仮想マシン向けデータ格納システム、データ格納方法およびデータ格納用プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
かかる目的を達成するために、本発明は、以下の特徴を有することとする。【０００８】
本発明の仮想マシン向けデータ格納システムは、重複データ発見手段(１０２)(重複データ発見手段(１１２))と、仮想ブロック取得手段Ａ(１２２)(仮想ブロック取得手段Ｂ(１２３))と、重複ブロック発見手段(１２１)を備え、
まず、重複データ発見手段(１０２)(重複データ発見手段(１１２))が、仮想マシンＡ(１００)(仮想マシンＢ(１１０))中のメタ情報管理手段(１０４)(メタ情報管理手段(１１４))から、メタ情報を取得し、取得したメタ情報を用いて、各仮想マシン上の重複データを発見する。
次に、仮想ブロック取得手段Ａ(１２２)(仮想ブロック取得手段Ｂ(１２３))が、各仮想マシン上の前記重複データに対応する仮想ブロック識別子を取得する。
その後に、重複ブロック発見手段(１２１)が仮想ブロックに対応する実ブロック中のデータを比較し、一致するブロックについてブロックマップ管理手段(１２５)に仮想ブロック識別子ペアを送る。
最後に、ブロックマップ管理手段(１２５)が、仮想ブロック識別子と実ブロック識別子の関連付けを変更し、一致するブロックについては、該当する仮想ブロック識別子を、１個の実ブロック識別子に関連付け、該当する仮想ブロック識別子に関連付けられていた、残りの実ブロック識別子との関連付けを消去するよう動作する。【０００９】
このような構成を採用し、仮想マシンＡ(１００)および仮想マシンＢ(１１０)中にて管理されているメタ情報を用いて、重複データを短時間に発見し、重複データに対応する各仮想ブロック識別子を取得し、それらの仮想ブロック識別子が指すブロック中のデータが等しい場合には、仮想マシン管理手段(１２０)中にて管理されている仮想ブロックと実ブロックの関連付けを変更することにより、本発明の目的を達成することができる。
【発明の効果】
【００１０】
本発明によれば、重複ブロックを短時間で発見し、重複ブロックを１個の実ブロックにまとめることで、短時間で空き容量を確保できる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施するための最良の形態について図面を参照して詳細に説明する。
図１を参照すると、本発明の第１の実施の形態は、計算機上でソフトウェアを実行することにより得られる、仮想マシンＡ(１００)と、仮想マシンＢ(１１０)と、仮想マシン管理手段(１２０)からなる。【００１２】
仮想マシンＡ(１００)は、アプリケーション(１０１)、重複データ発見手段(１０２)、データ管理手段(１０３)、メタ情報管理手段(１０４)、データマップ管理手段(１０５)を備え、
仮想マシンＢ(１１０)は、アプリケーション(１１１)、重複データ発見手段(１１２)、データ管理手段(１１３)、メタ情報管理手段(１１４)、データマップ管理手段(１１５)を備え、
仮想マシン管理手段(１２０)は、重複ブロック発見手段(１２１)、仮想ブロック取得手段Ａ(１２２)、仮想ブロック取得手段Ｂ(１２３)、ブロックアクセス手段(１２４)、ブロックマップ管理手段(１２５)、実ブロック記憶手段(１２６)を備える。各仮想マシンは仮想マシン管理手段(１２０)上で一意な仮想マシン識別子によって識別される。【００１３】
これらの手段はそれぞれ概略つぎのように動作する。
アプリケーション(１０１)は、データアクセスコマンドをデータ管理手段(１０３)に引渡し、データアクセスコマンドに含まれるデータ識別子に関連付けられたデータの作成と消去および読み書きを行う。【００１４】
重複データ発見手段(１０２)は、メタ情報アクセスコマンドをメタ情報管理手段(１０４)に引渡し、メタ情報を受け取る。また、データアクセスコマンドをデータ管理手段(１０３)に引渡し、データアクセスコマンドに含まれるデータ識別子に関連付けられたデータを読み込む。また、データ識別子、データ、メタ情報から重複データ探索情報を生成する。また、重複データ発見手段(１１２)と重複データ探索情報を送受する。さらに、自身が生成した重複データ探索情報と、重複データ発見手段(１１２)から受信した重複データ探索情報を比較することで、仮想マシンＡ(１００)と仮想マシンＢ(１１０)において重複しているデータを発見する。そして、発見した重複データのデータ識別子を重複データ識別子Ａとして、重複ブロック発見手段(１２１)に引き渡す。【００１５】
データ管理手段(１０３)は、データアクセスコマンドを用いてデータを作成と消去および読み書きする機能を、アプリケーション(１０１)および重複データ発見手段(１０２)に提供する。また、データ管理手段(１０３)は、データマップアクセスコマンドをデータマップ管理手段(１０５)に引渡し、データマップアクセスコマンドに含まれるデータ識別子に関連付けられた１個以上の仮想ブロック識別子を得る。もしくは、データ識別子に対して仮想ブロック識別子を新たに割り当てるようデータマップ管理手段(１０５)に要求する。もしくはデータ識別子と仮想ブロック識別子との関連付けを解除するようデータマップ管理手段(１０５)に要求する。また、データ管理手段(１０３)は、仮想ブロックアクセスコマンドをブロックアクセス手段(１２４)に引渡し、仮想ブロックアクセスコマンドに含まれる仮想ブロック識別子に関連付けられたブロックデータの作成と消去および読み書きを行う。【００１６】
メタ情報管理手段(１０４)は、メタ情報アクセスコマンドを受け取り、メタ情報を引き渡す。メタ情報については後述する。【００１７】
データマップ管理手段(１０５)は、ある仮想マシン上で一意なデータ識別子と同仮想マシン上で一意な仮想ブロック識別子を関連付けて記憶し、データマップアクセスコマンドを受け取った際に、データマップアクセスコマンドに応じて、そのデータマップアクセスコマンドに含まれるデータ識別子に関連付けられた１個以上の仮想ブロック識別子を引き渡す。もしくは、データ識別子に新たに仮想ブロック識別子を関連付ける。もしくは、データ識別子と仮想ブロック識別子との関連付けを解除する。【００１８】
仮想マシンＢ(１１０)を構成するアプリケーション(１１１)と、重複データ発見手段(１１２)と、データ管理手段(１１３)と、メタ情報管理手段(１１４)と、データマップ管理手段(１１５)は、仮想マシンＡ(１００)の対応する手段と同様に動作する。【００１９】
重複ブロック発見手段(１２１)は、重複データ識別子Ａおよび重複データ識別子Ｂを受け取る。また、重複データ識別子Ａの送信元である仮想マシンＡ(１００)に対応する仮想ブロック取得手段Ａ(１２２)に、重複データ識別子Ａを引き渡して１個以上の仮想ブロック識別子Ａを得る。また、重複データ識別子Ｂの送信元である仮想マシンＢ(１１０)に対応する仮想ブロック取得手段Ｂ(１２３)に、重複データ識別子Ｂ引き渡して１個以上の仮想ブロック識別子Ｂを得る。また、個々の仮想ブロック識別子Ａおよび、仮想ブロック識別子Ｂを含む仮想ブロックアクセスコマンドをブロックアクセス手段(１２４)に引渡し、対応するブロックデータＡおよびブロックデータＢを得る。さらに、ブロックデータＡとブロックデータＢの内容を比較し、一致した場合には、ブロックデータＡの送信元の仮想マシン識別子Ａである仮想マシン識別子ＡとブロックデータＡに対応する仮想ブロック識別子Ａを組にしたものと、同様に仮想マシン識別子Ｂと仮想ブロック識別子Ａを組にしたものを作成し、さらにそれらの二組を含む仮想ブロック識別子ペアを作成する。そして、仮想ブロック識別子ペアをブロックマップ管理手段(１２５)に引き渡す。【００２０】
仮想ブロック取得手段Ａ(１２２)は、重複データ識別子Ａを受け取る。また、重複データ識別子Ａを含むデータマップアクセスコマンドをデータマップ管理手段(１０５)に送り、重複データ識別子Ａに対応する１個以上の仮想ブロック識別子Ａを受け取る。そして、仮想ブロック識別子Ａを重複ブロック発見手段(１２１)に引き渡す。【００２１】
仮想ブロック取得手段Ｂ(１２３)は、重複データ識別子Ｂを受け取る。また、重複データ識別子Ｂを含むデータマップアクセスコマンドをデータマップ管理手段(１１５)に送り、重複データ識別子Ｂに対応する１個以上の仮想ブロック識別子Ｂを受け取る。そして、仮想ブロック識別子Ｂを重複ブロック発見手段(１２１)に引き渡す。【００２２】
ブロックアクセス手段(１２４)は、仮想ブロックアクセスコマンドを受け取り、仮想ブロックアクセスコマンドに含まれる仮想ブロック識別子に対し、仮想ブロックアクセスコマンドが指定する処理(作成と消去および読み書き)を行い、コマンドの結果を返す。コマンドが読み込み処理を指定していた場合には、結果には仮想ブロックデータが含まれる。また、仮想ブロックアクセスコマンドの送信元の仮想マシン識別子と仮想ブロックアクセスコマンドに含まれている仮想ブロック識別子を、パラメータとして含むブロックマップアクセスコマンドをブロックマップ管理手段(１２５)に引渡し、実ブロック識別子を受け取る。また、実ブロック識別子を含む実ブロックアクセスコマンドを実ブロック記憶手段(１２６)に引渡し、ブロックデータを作成と消去および読み書きを要求する。【００２３】
ブロックマップ管理手段(１２５)は、仮想マシン識別子と仮想ブロック識別子の組と実ブロック識別子の関連付けを管理しており、仮想マシン識別子と仮想ブロック識別子の組をパラメータとして含むブロックマップアクセスコマンドを受け取って、ブロックマップアクセスコマンドの種類に応じて、仮想マシン識別子と仮想ブロック識別子の組に実ブロック識別子を新たに関連付けする、仮想マシン識別子と仮想ブロック識別子の組と実ブロック識別子との対応付けを解除する、仮想マシン識別子と仮想ブロック識別子の組に対応する実ブロック識別子を回答するという処理を行う。また、仮想ブロック識別子ペアを受け取って、仮想ブロック識別子ペアに含まれる仮想マシン識別子と仮想ブロック識別子の二組に同一の実ブロック識別子を関連付ける。典型的には、片方の仮想マシン識別子と仮想ブロック識別子の組と実ブロック識別子の関連付けを解除し、もう片方の実ブロック識別子へと関連付けを変更するよう動作する。【００２４】
実ブロック記憶手段(１２６)は、実ブロックアクセスコマンドを受け取り、実ブロックアクセスコマンドに含まれる仮想ブロック識別子に対応したブロックデータの作成と消去および読み書きを行う。【００２５】
次に、図３と図４及び図５のシーケンス図を参照して本実施の形態の全体の動作について詳細に説明する。【００２６】
最初に、アプリケーションがデータにアクセスする際のシーケンスについて、図４を参照して説明する。【００２７】
まず、アプリケーション(１０１)がアクセスしたいデータを指定したデータ識別子を含むデータアクセスコマンドを発行する(６０１)と、データアクセスコマンドを受け取ったデータ管理手段(１０３)がデータマップアクセスコマンドを発行(６０２)する。【００２８】
そして、データマップアクセスコマンドを受け取ったデータマップ管理手段(１０５)は、データ識別子と仮想ブロック識別子の関連付けに基き、１個以上の仮想ブロック識別子を返す(６０３)。【００２９】
ここで、仮想ブロック識別子が１個以上となるのは、データ識別子で識別されるデータが、複数のブロックに分割して記憶されている場合があるからである。【００３０】
次に、仮想ブロック識別子を受け取ったデータ管理手段(１０３)が、仮想ブロック識別子を含む仮想ブロックアクセスコマンドを発行する(６０４)。仮想ブロックアクセスコマンドを受け取ったブロックアクセス手段(１２４)は、仮想ブロックアクセスコマンド中の仮想ブロック識別子を含むブロックマップアクセスコマンドを発行し(６０５)、ブロックマップアクセスコマンドを受け取ったブロックマップ管理手段(１２５)は、仮想ブロック識別子に対応する実ブロック識別子を返す(６０６)。【００３１】
実ブロック識別子を受け取ったブロックアクセス手段(１２４)は、実ブロック識別子を含む実ブロックアクセスコマンドを発行し(６０７)、実ブロックアクセスコマンドを受け取った実ブロック記憶手段(１２６)は、実ブロック識別子で指定されるブロックに記録されたブロックデータを返す(６０８)。【００３２】
ブロックデータを受け取ったブロックアクセス手段(１２４)は、そのブロックデータをデータ管理手段(１０３)に引き渡す(６０９)。【００３３】
ブロックデータを受け取ったデータ管理手段(１０３)は、データアクセスコマンドに含まれていたデータ識別子に対応する１個以上の仮想ブロック識別子について、対応するブロックデータを連結したものを、データとしてアプリケーション(１０１)に引き渡す。【００３４】
なお、以上では仮想マシンＡ(１００)と仮想マシン管理手段(１２０)の間でのシーケンスについて説明したが、仮想マシンＢ(１１０)と仮想マシン管理手段(１２０)の間でのシーケンスも同様である。【００３５】
さらに、図４および図５を参照して、重複データを発見し、重複ブロックをまとめる手順を詳細に説明する。【００３６】
まず、重複データ発見手段(１０２)がメタ情報アクセスコマンドを発行し(７０１)、メタ情報アクセスコマンドを受け取ったメタ情報管理手段(１０４)が対応するメタ情報を重複データ発見手段(１０２)に返す(７０２)。メタ情報は仮想マシンＡ(１００)の特徴を示す情報であり、後述の実施例において具体例を挙げて説明する。【００３７】
次に、重複データ発見手段(１０２)は、受け取ったメタ情報を含む重複データ探索情報を仮想マシンＢ(１１０)の重複データ発見手段(１１２)に送信する。同様に重複データ発見手段(１１２)からも重複データ探索情報が仮想マシンＡ(１００)の重複データ発見手段(１０２)に送信される(７０３)。【００３８】
重複データ発見手段(１０２)は、受け取った重複データ探索情報を参照して、仮想マシンＢ(１１０)と重複している可能性の高いデータのデータ識別子を推測する(７０４)。この推測の詳細は、後述の実施例において具体例を挙げて説明する。そして、各データ識別子について一致している可能性の高い順番で、以降のシーケンスに従い処理を行う。仮想マシンＡ(１００)上の全てのデータ識別子について、以降の処理が既に終了している場合には、ここでシーケンスを終了する。【００３９】
重複データ発見手段(１０２)は、仮想マシンＢ(１１０)と重複している可能性の高いデータのデータ識別子を含むデータアクセスコマンドを発行する(７０５)。このデータアクセスコマンドは「データの読み込み」を要求する。【００４０】
以降７０６から７１４までのシーケンスは、図４で説明したアプリケーション(１０１)がデータアクセスコマンドを発行した場合のシーケンスと同様であるため、詳細な説明は省略する。【００４１】
仮想マシンＢ(１１０)と重複している可能性が高いデータを受け取った重複データ発見手段(１０２)は、重複データ発見手段(１１２)にデータを含んだ重複データ探索情報を送信する。同様に重複データ発見手段(１１２)は重複データ発見手段(１０２)にデータを含んだ重複データ探索情報を送信し、重複データ発見手段(１０２)はそれを受信する(７１５)。【００４２】
重複データ発見手段(１０２)は、重複データ発見手段(１１２)から受け取った重複データ探索情報に含まれるデータと、自身が(７１４)で読み込んだデータと比較する(８０１)。【００４３】
データが一致していない場合には(７０４)に戻り、重複の可能性が次に高いデータについての処理を行う。【００４４】
データが一致していた場合には、以降のシーケンスに従って処理を行う。【００４５】
重複データ発見手段(１０２)は、重複が確認されたデータのデータ識別子である重複データ識別子Ａを、重複ブロック発見手段(１２１)に送る(８０２)。【００４６】
重複データ発見手段(１１２)も同様に、重複が確認されたデータのデータ識別子である重複データ識別子Ｂを、重複ブロック発見手段(１２１)に送る(８０２と平行して、もしくは８０２の直後に行われるが、図示せず)。【００４７】
重複ブロック発見手段(１２１)は、受信した重複データ識別子Ａを仮想ブロック取得手段Ａ(１２２)に送る(８０３)。【００４８】
重複データ識別子Ａを受信した仮想ブロック取得手段Ａ(１２２)が重複データ識別子Ａを含むデータマップアクセスコマンドをデータマップ管理手段(１０５)に送り(８０４)、重複データ識別子Ａに対応した１個以上の仮想ブロック識別子Ａを受け取る(８０５)。【００４９】
そして、仮想ブロック識別子Ａを受け取った仮想ブロック取得手段Ａ(１２２)が、仮想ブロック識別子Ａを重複ブロック発見手段(１２１)に引き渡す(８０６)。【００５０】
仮想ブロック識別子Ａを受け取った重複ブロック発見手段(１２１)は、その仮想ブロック識別子Ａに対応するブロックデータＡを取得する(８０７〜８１２)。この処理は(７０８〜７１３)と同様であるため、詳細な説明は省略する。【００５１】
重複ブロック発見手段(１２１)は、受信した重複データ識別子Ｂについても(８０３)〜(８０６)と同様に処理し、仮想ブロック識別子Ｂを受け取る(８０３〜８０６と平行して行われる、もしくは８０３〜８０６の直後に行われるが、図示せず)。【００５２】
さらに、受け取った仮想ブロック識別子Ｂについて、(８０７)〜(８１２)と同様に処理し、仮想ブロック識別子Ｂに対応するブロックデータＢを取得する。(８０７〜８１２と平行して行われる、もしくは８０７〜８１２の直後に行われるが、図示せず)。【００５３】
ブロックデータＡとブロックデータＢを取得した重複ブロック発見手段(１２１)は、ブロックデータＡとブロックデータＢを比較する(８１３)。【００５４】
なお、この比較処理においては、ブロックデータＡとブロックデータＢを直接に比較してもよいが、比較処理を高速化するためにブロックのハッシュ値を予め計算しておくなどの手法を併用してもよい。【００５５】
ブロックデータＡとブロックデータＢが一致していない場合には(７０４)に戻り、重複の可能性が次に高いデータについての処理を行う。【００５６】
ブロックデータＡとブロックデータＢが一致している場合には、それぞれに対応する仮想ブロック識別子Ａと仮想ブロック識別子Ｂを組にして仮想ブロック識別子ペアを生成し、ブロックマップ管理手段(１２５)に送る(８１４)。【００５７】
仮想ブロック識別子ペアを受け取ったブロックマップ管理手段(１２５)は、仮想ブロック識別子ペアに含まれる２個の仮想ブロック識別子について、仮想ブロック識別子Ａと、それに対応している実ブロック識別子Ａの関連付けを解除し、関連付けを解除された仮想ブロック識別子Ａを、もう片方の仮想ブロック識別子Ｂに関連付けられている実ブロック識別子Ｂに関連付ける。そして、関連付けがなくなった実ブロック識別子Ａに対応するブロックは未使用となり、ブロック１個分の空き容量が新たに確保される。なお、同様に仮想ブロック識別子Ｂの関連付けを解除して、実ブロック識別子Ｂに対応するブロックを未使用としても良い。【００５８】
次に、本実施の形態の効果について説明する。
本実施の形態では、まず重複データ発見手段(１０２)および重複データ発見手段(１１２)がメタ情報に基いて一致する可能性が高いデータのデータ識別子を推測する。【００５９】
さらに、重複データ発見手段(１０２)および重複データ発見手段(１１２)が、前記のデータ識別子に対応するデータが一致することを確認する。【００６０】
その後に重複ブロック発見手段(１２１)が、前記のデータ識別子に対応する仮想ブロック識別子Ａと仮想ブロック識別子Ｂについて、重複するブロックを発見して、ブロックマップ管理手段(１２５)での関連付けを変更して、ブロックを統合し、空き容量を確保する。【００６１】
このように構成されているため、メタ情報での推測と、データの一致確認を行わずに、
ブロックの重複発見を行う方法に比べて、重複ブロックの候補を短時間で発見して空き容量を確保することができる。【００６２】
発明の効果を、図６、７、８、３を用いて詳細に説明する。
図６を見ると、関連技術における、単位時間当たりの一致ブロック発見数の、時間変化がグラフとして示されている。【００６３】
関連技術においては、単位時間あたりの一致ブロック発見数は、経過時間によらず、およそ一定となる。なぜならば、全ブロックについて単に順番に一致を確認するため、一致ブロックが発見される確率がおよそ一定となるからである。【００６４】
なお、経過時間Tにおいて、全ブロックの確認が終了するものとする。【００６５】
次に図７を見ると、関連技術における、全使用中ブロック数の時間変化がグラフとして示されている。【００６６】
関連技術においては、全使用中ブロック数は、一定の速さで減少する。なぜならば、単位時間当たりの一致ブロック発見数が一定であるからである。【００６７】
図８を見ると、本発明の技術における、単位時間当たりの一致ブロック発見数の、時間変化がグラフとして示されている。【００６８】
本発明の技術においては、単位時間あたりの一致ブロック発見数は、経過時間が短いうちは多く、経過時間が長くなるにつれて減少する。なぜならば、メタ情報を用いて、重複データを発見することにより、一致する確率が高いブロックを優先して確認するからである。図３を見ると、本発明の技術における、全使用中ブロック数の時間変化がグラフとして示されている。【００６９】
本発明の技術においては、全使用中ブロック数は、経過時間が短いうちは急速に減少し、経過時間が長くなるにつれて、減少が緩やかになる。なぜならば、単位時間当たりの一致ブロック発見数が、経過時間が長くなるにつれて減少するからである。【００７０】
なお、全ブロックの確認が終了した時点Tでの全使用中ブロック数は、従来技術と一致する。【００７１】
ここで、全ての一致ブロックを発見するよりまえの時点tでの全使用中ブロック数を見ると、関連技術における全使用中ブロック数Ｂ1よりも、本発明の技術における全使用中ブロック数Ｂ2が少なくなる。【００７２】
これは、本発明の技術により、短時間で空き容量が確保されることを示している。これにより、経過時間０の時点では空き容量不足により格納不可能であるデータが存在した場合に、このデータを格納可能になるまでの経過時間を、従来技術よりも本発明の技術のほうが短くできる。【００７３】
また、一致ブロックの発見を、経過時間tで打ち切った場合に、確保できる空き容量は、関連技術よりも本発明の技術のほうが大きく出来る。【００７４】
次に、本発明の第２の発明を実施するための最良の形態について図面を参照して詳細に説明する。【００７５】
図９を参照すると、仮想マシンの一つとして管理用仮想マシンが動作している。
そして、本発明の第１の発明を実施するための最良の形態では、仮想マシン管理手段(１２０)中に配置されていた手段が、管理用仮想マシン(９００)上に配置されており、仮想マシン管理手段(１２０)はコマンド転送手段(９０４)を備える。【００７６】
コマンド転送手段(９０４)は仮想マシンＡ(９０１)および仮想マシンＢ(９０２)から仮想マシン管理手段(９０３)へと発行された仮想ブロックアクセスコマンドを管理用仮想マシン(９００)へと転送し、それらの仮想ブロックアクセスコマンドのレスポンスを仮想マシンＡ(９０１)および仮想マシンＢ(９０２)へと転送する。また、管理用仮想マシン(９００)から仮想マシンＡ(９０１)および仮想マシンＢ(９０２)へと発行されたデータマップアクセスコマンドを中継し、仮想マシンＡ(９０１)および仮想マシンＢ(９０２)からのレスポンスを管理用仮想マシン(９００)へと転送する。【００７７】
その他の手段は本発明の第１の発明を実施するための最良の形態と同様に動作する。【００７８】
発明の効果は、本発明の第１の発明を実施するための最良の形態と同様である。【００７９】
次に、具体的な実施例を用いて本発明を実施するための最良の形態の動作を説明する。
図１０に示すように、本発明をファイルシステムを介したデータ格納方式に適用できる。【００８０】
仮想マシンＡ(１０００)上で、重複ファイル発見エージェントＡ(１００２)が、システム情報管理モジュール(１００４)から、システム情報を取り出す。【００８１】
同様に、仮想マシンＢ(１０１０)上で、重複ファイル発見エージェントＢ(１０１２)が、システム情報管理モジュール(１０１４)から、システム情報を取り出す。
本実施例では、このシステム情報が、前述したメタ情報に該当する。【００８２】
このシステム情報の、典型例としては仮想マシン上で動作しているオペレーティングシステムの名称が挙げられる。例えば、「Windows（登録商標） XP SP２」や、「Red Hat Linux 9.0」などである。【００８３】
また他のシステム情報の、典型例としては仮想マシン上にインストールされているアプリケーションの名称が挙げられる。例えば「Microsoft Office（登録商標） ２００３」
や「Skype ３.０」などである。【００８４】
重複ファイル発見エージェントＡ(１００２)および重複ファイル発見エージェントＢ(１０１２)は、前記のシステム情報を参照して、データが一致する可能性が高いファイルを推測し、ファイル名を決定する。例えば、仮想マシンＡ(１０００)と仮想マシンＢ(１０１０)において、「Windows（登録商標） XP SP２」というオペレーティングシステムが稼動していることがシステム情報から判明した場合には、同一のオペレーティングシステムが稼動していることから、オペレーティングシステムを構成するファイルにおいてデータが一致する可能性が高いと推測できる。【００８５】
また、仮想マシンＡ(１０００)と仮想マシンＢ(１０１０)において、「Microsoft Office（登録商標） ２００３」というアプリケーションがインストールされていることがシステム情報から判明した場合には、同一のアプリケーションがインストールされていることから、アプリケーションを構成するファイルにおいてデータが一致する可能性が高いと推測できる。【００８６】
ファイルは仮想マシンＡ(１０００)および仮想マシンＢ(１０１０)上におけるファイルシステム(１００３)およびファイルシステム(１０１３)によって管理されている。また、ファイルシステムの下位モジュールであるファイルレイアウトモジュール(１００５)とファイルレイアウトモジュール(１０１５)によって、ファイルのファイル名とブロックのブロック番号の対応付けを管理している。ここで仮想マシンＡ(１０００)と仮想マシンＢ(１０１０)は仮想マシンモニタ(１０２０)により仮想化されているので、ファイルレイアウトモジュール(１００５)とファイルレイアウトモジュール(１０１５)が管理しているブロック番号は仮想ブロック番号である。【００８７】
ファイルシステムは仮想ブロックアクセスコマンドを発行し、仮想ブロックデバイス(１０２４)を介してブロックへのアクセス(作成と消去、読み書き)を行う。【００８８】
重複ブロック発見モジュール(１０２１)は、重複ファイル発見エージェントＡ(１００２)と重複ファイル発見エージェントＢ(１０１２)から重複ファイル情報Ａと重複ファイル情報Ｂを取得し、それらに含まれるファイル名に対応するブロックの仮想ブロック番号を仮想ブロック取得モジュール(１０２２)と仮想ブロック取得モジュール(１０２３)を介して取得し、それらの仮想ブロック番号に対応するブロックデータを仮想ブロックデバイス(１０２４)を介して取得する。そして、取得したブロックデータを比較し、一致するブロックデータを発見した場合には、ブロックマップ管理モジュール(１０２５)にそれらの一致したブロックデータに対応する仮想マシン識別子と仮想ブロック番号の組を二組含む仮想ブロック識別子ペアを引き渡す。【００８９】
仮想ブロックデバイス(１０２４)は、仮想ブロックアクセスコマンドを受け取ると、仮想ブロックアクセスコマンド中の仮想ブロック番号を含むブロックマップアクセスコマンドをブロックマップ管理モジュール(１０２５)に引渡し、実ブロック番号を取得する。そして、取得した実ブロック番号を含む仮想ブロックアクセスコマンドを実ブロックデバイスドライバ(１０２６)に送り、実ブロックにアクセス(作成と消去、読み書き)を行う。【００９０】
ブロックマップ管理モジュール(１０２５)は、仮想マシン識別子と仮想ブロック番号の組と実ブロック番号の対応付けを管理しており、仮想マシン識別子と仮想ブロック番号の組を含むブロックマップアクセスコマンドを受け取ると、ブロックマップアクセスコマンドの種類に応じて、仮想マシン識別子と仮想ブロック番号の組に対する新たな実ブロック番号の割り当て、仮想マシン識別子と仮想ブロック番号の組に割り当てられている実ブロック番号を解放、仮想マシン識別子と仮想ブロック番号の組に対応する実ブロック番号の回答を行う。また、仮想ブロック識別子ペアを受け取ると、仮想ブロック識別子ペアに含まれる片方の仮想マシン識別子と仮想ブロック番号の組に対応する実ブロック番号を解放し、もう片方の仮想マシン識別子と仮想ブロック番号の組に対応する実ブロック番号へと関連付けを変更する。【００９１】
また、第２の本発明を実施するための最良の形態として、本発明をメモリマップシステムを介したデータ格納方式に適用することもできる。【００９２】
メモリマップシステムは、あるファイルのデータを主記憶装置(一般にＤRＡMが用いられる)上に配置する為に用いられる。【００９３】
この場合、ブロックはメモリの管理単位であるページに対応することになり、データ識別子はメモリに配置されるファイルのファイル名となる。【００９４】
複数の仮想マシンが主記憶装置を共有するため、仮想ページ番号と実ページ番号が用いられ、それぞれが前記の仮想ブロック識別子と実ブロック識別子に対応する。【００９５】
なお、第３の本発明を実施するための最良の形態として、３個以上の仮想マシンを動作させるシステムでのデータ格納方式に適用することもできる。【００９６】
例えば、図１１に示すように、仮想マシンモニタ(１１１０)上で、仮想マシンが仮想マシンＡ(１１００)、仮想マシンＢ(１１０２)、仮想マシンＣ(１１０４)、仮想マシンＤ(１１０６)、仮想マシンE(１１０８)の５個存在し、仮想マシンＡと仮想マシンＢ上では、「Windows（登録商標） XP SP２」が動作しており、仮想マシンＣと仮想マシンＤ上では、「Red Hat Linux 9.1」が動作しており、仮想マシンE上では「Solaris １０」が動作していた場合に、ＡとＢの間での重複データ発見と、ＣとＤの間での重複データ発見を優先するように、重複ファイル発見エージェントＡ(１１０１)、重複ファイル発見エージェントＢ(１１０３)、重複ファイル発見エージェントＣ(１１０５)、重複ファイル発見エージェントＤ(１１０７)、重複ファイル発見エージェントE(１１０９)が動作する。【００９７】
なお、上述する各実施の形態は、本発明の好適な実施の形態であり、本発明の要旨を逸脱しない範囲内において種々変更実施が可能である。例えば、本システムの機能を実現するためのプログラムを計算機に読込ませて実行することにより本システムの機能を実現する処理を行ってもよい。さらに、そのプログラムは、コンピュータ読み取り可能な記録媒体であるＣＤ−ＲＯＭまたは光磁気ディスクなどを介して、または伝送媒体であるインターネット、電話回線などを介して伝送波により他のコンピュータシステムに伝送されてもよい。【００９８】
なお、この出願は、２００７年１１月２０日に出願した、日本特許出願番号２００７−３００７９９号を基礎とする優先権を主張し、その開示の全てをここに取り込む。【００９９】
本発明によれば、仮想化技術を用いた計算機におけるストレージの空き容量を短時間に確保するといった用途に適用できる。
【図面の簡単な説明】
【０１００】
【図１】本発明の第１の実施の形態の構成を示すブロック図である。
【図２】本発明の動作の特徴を示す第２のグラフである。
【図３】本発明の第１の実施の形態の動作を示すシーケンス図である。
【図４】本発明の第１の実施の形態の動作を示すシーケンス図である。
【図５】本発明の第１の実施の形態の動作を示すシーケンス図である。
【図６】関連技術の動作の特徴を示す第１のグラフである。
【図７】関連技術の動作の特徴を示す第２のグラフである。
【図８】本発明の動作の特徴を示す第１のグラフである。
【図９】本発明の第２の実施の形態の構成を示すブロック図である。
【図１０】本発明の第１の実施例の構成を示すブロック図である。
【図１１】本発明の第３の実施の形態の構成を示すブロック図である。
【符号の説明】
【０１０１】
１００    仮想マシンＡ
１０１    アプリケーション
１０２    重複データ発見手段
１０３    データ管理手段
１０４    メタ情報管理手段
１０５    データマップ管理手段
１１０    仮想マシンＢ
１１１    アプリケーション
１１２    重複データ発見手段
１１３    データ管理手段
１１４    メタ情報管理手段
１１５    データマップ管理手段
１２０    仮想マシン管理手段
１２１    重複ブロック発見手段
１２２    仮想ブロック取得手段Ａ
１２３    仮想ブロック取得手段Ｂ
１２４    ブロックアクセス手段
１２５    ブロックマップ管理手段
１２６    実ブロック記憶手段
【図１】
0005381713.tif 000002
【図２】
0005381713.tif 000003
【図３】
0005381713.tif 000004
【図４】
0005381713.tif 000005
【図５】
0005381713.tif 000006
【図６】
0005381713.tif 000007
【図７】
0005381713.tif 000008
【図８】
0005381713.tif 000009
【図９】
0005381713.tif 000010
【図１０】
0005381713.tif 000011
【図１１】
0005381713.tif 000012