(58)【調査した分野】(Int.Cl.,DB名)
前記判別手段は、前記第1の仮想マシンの複製により前記1以上の第2の仮想マシンを生成する際に、当該第1の仮想マシン内で使用している各メモリ領域についての使用状況を示す情報に基づいて、前記判別を行う
ことを特徴とする請求項1に記載の仮想計算機システム。
各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するものであり、
前記判別手段は、未使用でありかつ初期化してアクセスされるメモリ領域については特定種メモリ領域であると判別する
ことを特徴とする請求項2に記載の仮想計算機システム。
前記判別手段は、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別する
ことを特徴とする請求項2に記載の仮想計算機システム。
仮想マシンの仮想OSが、メモリ領域の解放のために、前記仮想マシンの空きメモリ領域を管理するための管理情報が格納されるメモリ領域へアクセスした場合に、当該アクセスを検知する第3検知手段と、
前記第3検知手段により前記アクセスが検知された場合に、前記仮想OSが解放しようとしている前記メモリ領域の実体の解放を行うメモリ解放手段とを更に備える
ことを特徴とする請求項6に記載の仮想計算機システム。
管理手段と、判別手段と、第1検知手段と、第2検知手段と、メモリ割当手段とを備え、第1の仮想マシンを複製することで1以上の第2の仮想マシンを生成する仮想計算機システムにおけるメモリ管理方法であって、
前記仮想計算機システムの管理手段が、前記第1の仮想マシンがアクセスし得る1以上の各メモリ領域について、前記1以上の第2の仮想マシンの生成後、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第1検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第1検知ステップと、
前記仮想計算機システムの第2検知手段が、前記第1検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第2検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第2検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップとを含む
ことを特徴とするメモリ管理方法。
管理手段と、判別手段と、第1検知手段と、第2検知手段と、メモリ割当手段とを備え、第1の仮想マシンを複製することで1以上の第2の仮想マシンを生成する仮想計算機システムにおけるコンピュータに、
前記仮想計算機システムの管理手段が、前記第1の仮想マシンがアクセスし得る1以上の各メモリ領域について、前記1以上の第2の仮想マシンの生成後、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第1検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第1検知ステップと、
前記仮想計算機システムの第2検知手段が、前記第1検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第2検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第2検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップと
を実行させるためのメモリ管理プログラム。
管理手段と、判別手段と、第1検知手段と、第2検知手段と、メモリ割当手段とを備え、第1の仮想マシンを複製することで1以上の第2の仮想マシンを生成する仮想計算機システムにおいて用いられるメモリ管理プログラムを記録しているコンピュータ読取可能な記録媒体であって、
前記仮想計算機システムにおけるコンピュータに、
前記仮想計算機システムの管理手段が、前記第1の仮想マシンがアクセスし得る1以上の各メモリ領域について、前記1以上の第2の仮想マシンの生成後、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第1検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第1検知ステップと、
前記仮想計算機システムの第2検知手段が、前記第1検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第2検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第2検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップと
を実行させるためのメモリ管理プログラムを記録している記録媒体。
【発明を実施するための形態】
【0010】
≪本発明に係る一形態を得るに至った経緯≫
本発明者は、前述した従来技術に基づき想定される仮想マシンの複製方式について詳細に検討した。
【0011】
この仮想マシンの複製方式では、信頼していないプログラム(アプリケーションプログラム)を実行する実行環境として、実行中の仮想マシンを複製した新たな仮想マシンを生成する。このとき、OSの基本プログラムやミドルウェア等を同一の物理メモリ領域に置いて、両仮想マシンで共用させる。そして、仮想マシン実行中に両仮想マシンで共用している物理メモリ領域のメモリ内容を一方の仮想マシンが変化させる時に、初めて新たに別の物理メモリ領域を獲得し、両仮想マシンにそれぞれ専用の物理メモリ領域を割り当てるようにする処理(コピーオンライト処理)を行っている。このようにすることで、メモリ使用量を削減することができる。
【0012】
図27および
図28は、コピーオンライト処理を説明するための図である。
【0013】
仮想マシンAに割り当てられたメモリ領域の論理アドレスは、物理メモリの物理アドレスへ1対1にマッピングされている(
図27(1))。仮想マシンの複製時に、仮想マシンAの論理アドレスが複製され、仮想マシンBが生成される。このようにして、同じ物理アドレスを参照する複数の仮想マシンが存在するようになる(
図27(2))。
【0014】
図28に示す「コピーオンライト処理」では、いずれかの仮想マシンから最初の書込アクセスがあった時に(
図28(1))、物理メモリの物理メモリ領域を新たに獲得してコピーを作成する(
図28(2))。そして、その最初に書込アクセスをした仮想マシンが、その新たに獲得された物理メモリ領域に書き込むようにしている(
図28(3))。すなわち、いずれかの仮想マシンから最初の書込アクセスがあるまでは、物理メモリ領域を両仮想マシンで共用することで、メモリ使用量を削減している。そして、一方の仮想マシンから最初の書込アクセスがあったときは、他方の仮想マシンが書込アクセス前の内容を参照できるようにしている。
【0015】
本発明者は、以上のような従来技術に基づき想定される仮想マシンの複製方式を詳細に検討した結果、コピーオンライト処理では、仮想マシン複製前の物理メモリ領域の内容が仮想マシンBにとって必要がない場合は、物理メモリ領域を無駄に確保してしまうという問題がある点を見出した。例えば、仮想マシン複製前の仮想マシンAにおいて、アプリケーションプログラム等があるメモリ領域を使用しておらず、未使用のメモリ領域となっている場合、そのメモリ領域に対応する物理メモリ領域には意味のある値は入っていない。前述したコピーオンライト処理では、もし一方の仮想マシンが書込アクセスした場合、当該物理メモリ領域の内容が他方の仮想マシンにとって参照する必要がないにも関わらず、物理メモリ領域を使用してその内容を保持し続けることになる。
【0016】
そして、この点に関して、本発明者は検討を重ねた結果、仮想マシン複製前の物理メモリ領域の内容を判別し、物理メモリ領域の内容が他方の仮想マシンにとって参照する必要がない場合には新たに物理メモリ領域を獲得しないようにすることで従来技術に基づき想定される仮想マシン複製処理よりもメモリ使用量を削減可能であることを見出し、本発明に至った。
【0017】
以下、本発明に係る仮想計算機システムの一実施の形態について
図1〜
図19を参照して説明する。
≪実施の形態1≫
<概要>
図1は、実施の形態1に係る仮想計算機システム1による仮想マシン複製時の様子を模式的に表した図である。
【0018】
仮想計算機システム1は、仮想マシン複製時に、仮想マシンAのメモリ領域の使用状態に応じて、分類値を付す(
図1(2))。ここでは、例えば、仮想計算機システム1は、未使用のメモリ領域を複製する場合に、そのメモリ領域に対応する物理メモリ領域に分類値「1」を付している。
【0019】
図2は、分類値「1」が付された物理メモリ領域に、いずれかの仮想マシンが書込アクセスした時の処理を示す図である。
【0020】
図2に示すように、まず、分類値「1」が付された物理メモリ領域に、仮想マシンAから最初に書込アクセスがあった時には(
図2(1))、新たに物理メモリ領域を獲得することなく(
図2(2))、仮想マシンAは、そのままアクセス対象の物理メモリ領域に書き込む(
図2(3))。このとき、仮想計算機システム1は、仮想マシンBに対しては、仮想的なメモリ領域をアクセスするように設定しておく(
図2(3))。
【0021】
その後、仮想計算機システム1は、
図3に示すように、他方の仮想マシンBがその仮想的なメモリ領域をアクセスしてきた時に(
図3(1))、はじめて新たに物理メモリ領域を獲得し(
図3(2))、獲得した物理メモリ領域に、アクセスした仮想マシンBが書き込む(または読み出す)ようにする(
図3(3))。すなわち、仮想マシンBが物理メモリ領域へアクセスしたときに初めて新たに物理メモリ領域を獲得し、初期化する等して未使用のメモリ領域を用意すれば足りる。
【0022】
このように、仮想計算機システム1は、仮想マシン複製後、いずれかの仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得しないので、コピーオンライト処理よりもメモリ使用量を削減することができる。
<構成>
次に、仮想計算機システム1の構成について
図4〜
図10を参照して説明する。
【0023】
図4は、実施の形態1に係る仮想計算機システム1の機能構成図である。
【0024】
仮想計算機システム1は、仮想マシンA10を複製して仮想マシンB50を生成し、両仮想マシンに対するメモリ領域の割当ておよび各仮想マシンの実行を制御するものである。
【0025】
図4に示すように、仮想計算機システム1は、仮想マシンA10と、仮想マシン複製装置20と、仮想マシンメモリ管理装置30と、物理メモリ40とを備えている。
【0026】
仮想マシンA10および仮想マシンB50は、OS、アプリケーションプログラム等が動作する一つの仮想的な計算機として、例えばAV処理、ネットワーク処理等を行うものである。
【0027】
仮想マシン複製装置20は、仮想マシンAの実行中にユーザ等から新たな仮想マシンの起動要求を受けて、仮想マシンA10を複製することにより、新たな仮想マシンB50を生成するものである。なお、仮想マシンは、複数同時に生成されてもよい。
【0028】
仮想マシンメモリ管理装置30は、仮想マシンA10および仮想マシンB50から物理メモリ40へのアクセス要求を受け、該当のメモリ領域へのアクセス制御を行うものである。
【0029】
物理メモリ40は、アドレスによりメモリ領域を特定して情報を格納するものである。
【0030】
以下、仮想マシンA10、仮想マシン複製装置20および仮想マシンメモリ管理装置30について説明する。
【0031】
仮想マシンA10は、アプリケーション11と、仮想OS12とを備える。
【0032】
アプリケーション11は、仮想マシンA10において、例えば、AV処理、ネットワーク処理等を行うためのプログラムである。
【0033】
仮想OS12は、一般的なOSと同様な機能を備えており、仮想マシンA10において、アプリケーション11から要求を受けて、仮想マシンA10内のメモリ使用状態、メモリ領域の割当て、プログラム実行の管理等を行うものである。仮想OS12は、OSメモリ管理部13と、OSメモリ管理テーブル14とを備える。
【0034】
OSメモリ管理部13は、仮想マシンA10に割り当てられたメモリ領域の使用状態の管理を行うものである。メモリ領域の使用状態には、アプリケーションやドライバ等により使用されているかという情報、メモリ領域に格納された情報の参照元の有無が含まれる。
【0035】
OSメモリ管理テーブル14は、OSメモリ管理部13が仮想マシンA10内でのメモリ管理を行う際に用いるテーブルである。
【0036】
図5は、OSメモリ管理テーブル14のデータ構成および内容例を示す図である。
【0037】
OSメモリ管理テーブル14は、同図に示すように、論理メモリ領域14aと、使用カウント14bと、参照元情報14cとを対応付けて構成される情報である。論理メモリ領域14aは、仮想マシンA10に割り当てられたメモリ領域の論理アドレスを格納する項目である。なお、論理メモリ領域各々は、例えば、4KB等のページ単位で管理される。使用カウント14bは、仮想マシンA10内において、当該メモリ領域を使用しているアプリケーションやドライバ等の数を格納する項目である。例えば、この使用カウントが「0」である場合、当該メモリ領域は、未使用であることを示す。参照元情報は、当該メモリ領域の内容が補助記憶装置(例えば、ハードディスク等)にも存在する場合、存在する場所を示す情報(例えば、パス等)を格納する項目である。参照元がない場合は、参照元がないことを示す値「0」を格納する。OSメモリ管理部13は、例えば、アプリケーション11から仮想OS12へメモリ獲得要求があった場合は、このOSメモリ管理テーブル14を参照し、未使用のメモリ領域(使用カウントが「0」である論理メモリ領域)を探して、アプリケーション11に対して当該未使用のメモリ領域の割当てを行う。そして、OSメモリ管理部13は、当該割当てを行ったメモリ領域が使用中であることを識別できるように、当該メモリ領域に対応する使用カウントを「1」加算する。
【0038】
次に、仮想マシン複製装置20が備える構成について説明する。
【0039】
仮想マシン複製装置20は、メモリ分類部21と、メモリ複製部22を備える。
【0040】
メモリ分類部21は、分類値テーブル201を備え、メモリ分類処理を行うものである。メモリ分類処理は、仮想マシンA10を複製するに先立って、仮想マシンA10が使用しているメモリ領域について、OSメモリ管理テーブル14に保持されるメモリ領域の使用状態に関する情報と分類値テーブル201とに基づいて、当該メモリ領域に後述する分類値を付す処理である。
【0041】
図6は、分類値テーブル201のデータ構成および内容例を示す図である。
【0042】
分類値テーブル201は、分類値201aと使用状態201bとを対応付けて構成される情報である。分類値201aは、仮想マシンメモリ管理装置30が行うメモリ割当処理の内容を識別するための値である分類値を格納する項目である。メモリ割当処理201cは、仮想マシン複製後、いずれかの仮想マシンがアクセスしてきたときの、アクセス対象のメモリ領域を扱う処理である。詳細は、後述する。使用状態201bは、仮想マシンA10が使用しているメモリ領域の使用状態を示す情報を格納する項目である。メモリ分類部21は、OSメモリ管理テーブル14を参照して、メモリ領域の使用状態を判別し、該当する分類値テーブル201の使用状態に対応する分類値を定める。例えば、「一の仮想マシン専用」は、一の仮想マシンにのみ割り当てられるべき、あるいは、割り当てられたメモリ領域であることを意味する。「未使用」は、仮想マシンA10において、アプリケーションやドライバ等が使用しておらず、未使用であることを意味する。例えば、OSメモリ管理テーブル14の使用カウントが「0」となっている場合が「未使用」に該当する。「参照元あり」は、仮想マシンA10が当該メモリ領域に保持して使用していた内容と同じ内容が、当該メモリ領域以外の場所(例えば、ハードディスクやOSが別に管理しているメモリ領域等)にも保持されている状態を意味する。よって、当該メモリ領域を仮想マシンA10と仮想マシンB50が共用する扱いとなっているときは、一の仮想マシンが当該メモリ領域に書込アクセスしてきたときでも、他の仮想マシンのために書込アクセス前の内容を保持しておく必要がない。OSメモリ管理テーブル14の参照元情報が存在する場合や、一の仮想マシンによって書き換えられたメモリ領域の内容を他の仮想マシンが読み出しても問題のない場合が「参照元あり」に該当する。「参照元なし」は、仮想マシンA10が当該メモリ領域に保持して使用していた内容と同じ内容が、当該メモリ領域以外の場所には保持されていない状態を意味する。よって、この使用状態のメモリ領域を仮想マシンA10と仮想マシンB50が共用する扱いとなっているときは、一の仮想マシンが当該メモリ領域に書込アクセスしてきたときには、他の仮想マシンのために書込アクセス前の内容を保持しておく必要がある。OSメモリ管理テーブル14の参照元情報に値がない場合や、一の仮想マシンによってメモリ領域の内容が書き換えられてはいけない場合が「参照元なし」に該当する。
【0043】
本実施の形態では、使用状態が「一の仮想マシン専用」に対応する分類値は「0」、「未使用」に対応する分類値は「1」、「参照元あり」に対応する分類値は「2」、「参照元なし」に対応する分類値は「4」としている。分類値「3」および「5」は、メモリ分類部21が付与する値ではなく、後述するメモリ割当処理の過程で付与される中間的な値である。
【0044】
また、メモリ分類部21は、メモリ分類処理において、メモリ領域の使用状態に対応する分類値を取得し、仮想マシンメモリ管理テーブル311の分類値に書き込んでいく。
【0045】
図7は、仮想マシンメモリ管理テーブル311のデータ構成および内容例を示す図である。
【0046】
同図に示すように、仮想マシンメモリ管理テーブル311は、物理メモリ領域311aと、使用カウント311bと、分類値311cとを対応付けて構成される情報である。物理メモリ領域311aは、物理メモリ40のメモリ領域を示す物理アドレスを格納する項目である。使用カウント311bは、当該物理メモリ領域を使用している仮想マシンの数を格納する項目である。使用カウントが「0」の場合、当該物理メモリ領域は、どの仮想マシンからも使用されていないこと意味する。分類値311cは、仮想マシンメモリ管理装置30が行うメモリ割当処理の内容を識別するための値である分類値を格納する項目である。メモリ分類部21は、メモリ分類処理において、仮想マシンA10に割り当てられたメモリ領域のすべてについて、このテーブルの分類値に値を書き込んでいく。分類値が書込まれた仮想マシンメモリ管理テーブル311は、後にメモリ割当処理部35によってメモリ割当処理を行う際に参照される。
【0047】
さらに、メモリ分類部21は、メモリ分類処理において、後述するアクセス制御テーブル310に、分類値に応じて、アクセス権限を設定する。これは、仮想マシンメモリ管理装置30が、仮想マシンがアクセスしてきたことおよび当該アクセスのアクセス種別を検知するためである。
【0048】
図8は、アクセス制御テーブル310のデータ構成および内容例を示す図である。
【0049】
アクセス制御テーブル310は、論理メモリ領域と物理メモリ領域との変換(マッピング)を行うためのものであり、また、各物理メモリ領域に割り当てられた仮想マシンおよびそのアクセス権限を設定するものである。
【0050】
アクセス制御テーブル310は、論理メモリ領域310aと、物理メモリ領域310bと、物理メモリ領域が割り当てられた仮想マシンの情報である仮想マシン310cと、当該仮想マシンのアクセス権限310dとが対応付けて構成される情報である。仮想マシンごとにみると、論理メモリ領域と物理メモリ領域は、1対1に対応付けられている。
図8の内容例は、仮想マシン複製後の状態を示している。物理メモリ領域310bの「P1」、「P3」、「P4」は、仮想マシンA10および仮想マシンB50が共用するメモリ領域である。物理メモリ領域310bの「P2」、「P10」は、一の仮想マシンにのみ割り当てられている。メモリ分類部21は、仮想マシンがアクセスしてきたことを検知するために、アクセス権限310dを設定する。後述するアクセス制御部31は、例えば、アクセス権限310dに「R/W禁止」が設定された場合、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、このアクセス制御テーブル310を参照して例外を発生させる。また、アクセス制御部31は、仮想マシンがアクセスしてきたことおよびアクセス種別を検知することができる。
【0051】
メモリ複製部22は、メモリ分類部21からの要求を受け、後述するメモリ割当解放部34に対して物理メモリ領域の割当てを依頼し、物理メモリ領域を獲得するものである。また、メモリ複製部22は、獲得した物理メモリ領域に対して、指定されたメモリ領域のデータをコピーし、指定された仮想マシンが新たに獲得した物理メモリ領域へアクセスするようにアクセス制御テーブル310に設定する。すなわち、新たに獲得した物理メモリ領域と仮想マシンとをこのテーブルで対応付ける。さらに、メモリ複製部22は、仮想マシンメモリ管理テーブル311における当該新たに獲得した物理メモリ領域に対応する分類値に「0」を設定し、使用カウントに「1」を加える。
【0052】
次に、仮想マシンメモリ管理装置30が備える構成について説明する。
【0053】
仮想マシンメモリ管理装置30は、アクセス制御部31と、アクセス制御テーブル310と、アクセス検知部32と、メモリ割当処理部35と、仮想マシンメモリ管理テーブル311と、メモリ割当解放部34とを備える。
【0054】
アクセス制御部31は、仮想マシン複製後、仮想マシンA10または仮想マシンB50からの物理メモリ領域へのアクセスを監視するものである。また、アクセス制御部31は、書込アクセス、読出アクセスまたは両方のアクセスの監視設定がされている場合、その監視対象のアクセスがあったときに、アクセス検知部32に通知するように構成されている。その際、アクセス制御部31は、書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報をアクセス検知部32へ渡す。
【0055】
アクセス検知部32は、アクセス制御部31からアクセス種別、仮想マシンの情報および物理メモリ領域の情報を受け取ると、後述するメモリ割当処理部35にメモリ割当処理要求を行うものである。
【0056】
メモリ割当解放部34は、メモリ分類部21、メモリ複製部22および後述するメモリ割当処理部35から物理メモリ領域の割当要求または指定した物理メモリ領域の解放要求を受けて、仮想マシンA10および仮想マシンB50に対してそれぞれ物理メモリ領域の割当処理または解放処理を行うものである。メモリ割当解放部34は、割当要求を受けると、仮想マシンメモリ管理テーブル311(
図7参照)を参照して、使用していない物理メモリ領域(つまり、使用カウントが「0」の物理メモリ領域)を検索し、該当する物理メモリ領域に対応する使用カウントを「1」加算することにより、当該物理メモリ領域が使用中であることをセットする。また、メモリ割当解放部34は、当該割当要求の要求元へ当該物理メモリ領域を割り当てる。メモリ割当解放部34は、解放要求を受けると、要求時に指定された物理メモリ領域について、対応する仮想マシンメモリ管理テーブル311の使用カウントを「1」減じる。
【0057】
メモリ割当処理部35は、アクセス検知部32からメモリ割当処理要求を受けると、メモリ分類部21により付された分類値に基づき、必要に応じて、仮想マシンへのメモリ割当てを行うものである。具体的には、メモリ割当処理部35は、仮想マシンメモリ管理テーブル311を参照し、仮想マシンがアクセスしてきた物理メモリ領域に対応する分類値を判別し、当該分類値に応じて、メモリ割当処理を行う。メモリ割当処理部35は、必要に応じてメモリ割当解放部34に対して新たな物理メモリ領域の割当てを依頼する。また、メモリ割当処理部35は、必要に応じて、アクセス制御テーブル310の設定を行う。さらに、メモリ割当処理部35は、必要に応じて、仮想マシンメモリ管理テーブル311の分類値を変更する。
【0058】
次に、メモリ割当処理部35の構成について説明する。
【0059】
図9は、メモリ割当処理部35の機能構成図である。
【0060】
メモリ割当処理部35は、同図に示すように、判別部61と、コピーオンライト処理部62と、第1メモリ処理部63と、新規メモリ割当処理部64と、メモリ初期化処理部65と、第2メモリ処理部66と、第3メモリ処理部67とを備える。
【0061】
判別部61は、物理メモリ領域に付された分類値に基づいて、当該物理メモリ領域に対する処理を判別するものである。判別部61は、アクセス検知部32から、仮想マシンのアクセスについて書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセス対象の物理メモリ領域の情報を受け取る。判別部61は、仮想マシンメモリ管理テーブル311を参照して、受け取った物理メモリ領域に対応する分類値を取得する。判別部61は、分類値が「1」のときは第1メモリ処理部63へ、分類値が「2」のときは第2メモリ処理部66へ、分類値が「3」のときは第3メモリ処理部67へ、分類値が「4」のときはコピーオンライト処理部62へ、分類値が「5」のときは新規メモリ割当処理部64へ、それぞれ処理を依頼する。
【0062】
コピーオンライト処理部62は、コピーオンライト処理を行うものである。コピーオンライト処理は、前述した処理(
図28参照)であり、分類値「4」に対応する処理である。分類値「4」が付されたメモリ領域のアクセス権限は、メモリ分類部21によって、「W禁止」に設定されている。したがって、仮想マシンからの書込アクセスが検知されたときのみ判別部61からコピーオンライト処理部62へ処理の依頼が来ることとなる。コピーオンライト処理部62は、判別部61から呼び出され、メモリ割当解放部34に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする。また、コピーオンライト処理部62は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル310に設定し、アクセス監視を解除する。さらに、コピーオンライト処理部62は、仮想マシンメモリ管理テーブル311に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する。コピーオンライト処理部62は、元の物理メモリ領域についてもアクセス監視を解除し、仮想マシンメモリ管理テーブル311に対して、元の物理メモリ領域に対応する使用カウントを「1」減じ、分類値を「0」に設定する。
【0063】
第1メモリ処理部63は、第1メモリ処理を行うものである。第1メモリ処理は、前述した<概要>の項目で示した処理(
図2参照)であり、分類値「1」に対応する処理である。第1メモリ処理部63は、判別部61から呼び出され、アクセスしてきた仮想マシンに対してのアクセス監視を解除するようにアクセス制御テーブル310に設定する。また、第1メモリ処理部63は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する。それとともに、第1メモリ処理部63は、当該物理メモリ領域を参照するように設定されている他の仮想マシンに対して、新規メモリ割当領域41にアクセスするようにアクセス制御テーブル310に設定する。
【0064】
図10は、仮想マシン複製後、仮想マシンA10から最初に書込アクセスがあった場合における第1メモリ処理終了後のアクセス制御テーブル310を示した図である。なお、
図8は、仮想マシン複製後、第1メモリ処理開始前のアクセス制御テーブル310である。
【0065】
図10に示すように、仮想マシンA10には、物理メモリ領域「P4」がそのまま割り当てられ、アクセス監視は解除されている。仮想マシンB50には、新規メモリ割当領域41である「Pk」が割り当てられ、アクセス監視は「R/W禁止」が設定されている。物理メモリ領域「Pk」は、仮想マシンメモリ管理テーブル311において、分類値「5」に設定されている。
【0066】
新規メモリ割当領域41は、特定のメモリ領域を指すものであり、仮想マシンからそのメモリ領域へのアクセスについては、アクセス制御部31がそのアクセスを検知し、アクセス検知部32へ通知する。この新規メモリ割当領域41に対応する仮想マシンメモリ管理テーブル311の分類値は「5」としておく。なお、新規メモリ割当領域41に対して、現実に存在する物理メモリ領域を対応付ける必要は必ずしもなく、仮想的なメモリ領域を定義する(つまり、アクセス制御テーブル310の物理メモリ領域310bに識別子等を設定しておき、その識別子が仮想マシンメモリ管理テーブル311において分類値「5」と対応づけられている)だけでよい。すなわち、仮想マシンがアクセスしたときに、分類値「5」に対応する新規メモリ割当処理を実行させることができればよい。
【0067】
新規メモリ割当処理部64は、新規メモリ割当処理を行うものである。新規メモリ割当処理は、前述した<概要>の項目で示した処理(
図3参照)であり、分類値「5」に対応する処理である。新規メモリ割当処理部64は、判別部61から呼び出され、メモリ割当解放部34に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、後述するメモリ初期化処理部65を呼び出して、初期値を書き込ませる。新規メモリ割当処理部64は、新たに獲得した物理メモリ領域を、アクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル310に設定する。また、新規メモリ割当処理部64は、新たに獲得した物理メモリ領域に対するアクセス監視を解除する。さらに、新規メモリ割当処理部64は、仮想マシンメモリ管理テーブル311に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する。
【0068】
メモリ初期化処理部65は、新規メモリ割当処理部64から呼び出され、指定された物理メモリ領域について、予め定められた一定のデータ列(例えば、「00…0」のようなオールゼロ等)で初期化処理を行う。
【0069】
第2メモリ処理部66は、第2メモリ処理を行うものである。第2メモリ処理は、分類値「2」に対応する処理である。ここで、第2メモリ処理について説明する。分類値「2」は、仮想マシン複製時のメモリ領域の使用状態が「参照元あり」として分類されたものである。これは、仮想マシン複製前にアプリケーション等が当該メモリ領域を使用していたものであり、仮想マシン複製後において、一の仮想マシンから最初に読出アクセスがあった後、他の仮想マシンからも読出アクセスがあることが考えられる。読出アクセスがあるごとに例外を発生させると、仮想マシンシステムの性能の観点から好ましくないため、一の仮想マシンから最初に読出アクセスがあった物理メモリ領域は、読出アクセスによって例外が発生しないコピーオンライト処理の対象とする。すなわち、第2メモリ処理部66は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する分類値を「4」に設定する。また、第2メモリ処理部66は、アクセスしてきた仮想マシンに対しての読出アクセス監視を解除するようにアクセス制御テーブル310に設定する。
【0070】
一方、仮想マシン複製後において、一の仮想マシンから最初に書込アクセスがあったときには、第1メモリ処理と同様に、コピーオンライト処理よりもさらにメモリ使用量を削減する処理を行う。すなわち、第2メモリ処理部66は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する分類値を「3」に設定する。また、第2メモリ処理部66は、アクセスしてきた仮想マシンに対しての読出/書込アクセス監視を解除するようにアクセス制御テーブル310に設定する。
【0071】
第3メモリ処理部67は、第3メモリ処理を行うものである。第3メモリ処理は、分類値「3」に対応する処理である。第3メモリ処理は、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、メモリ割当解放部34に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする。また、第3メモリ処理部67は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル310に設定し、アクセス監視も解除する。さらに、第3メモリ処理部67は、仮想マシンメモリ管理テーブル311に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する。さらに、第3メモリ処理部67は、仮想マシンメモリ管理テーブル311に対して、コピー元の物理メモリ領域に対応する使用カウントを「1」減じる。「1」減じた結果、当該使用カウントが「1」である場合には、分類値を「0」に設定する。
<動作>
以下、仮想計算機システム1の動作について、
図11〜
図19(構成は適宜
図1および
図9)を参照して説明する。
<メモリ分類処理>
図11は、仮想計算機システム1のメモリ分類部21によるメモリ分類処理を示すフローチャートである。
【0072】
メモリ分類処理は、複製元の仮想マシンのメモリ領域の使用状態に応じて、メモリ領域ごとに分類値を付す処理である。メモリ分類部21は、仮想マシンを複製する際に、仮想マシンA10に割り当てられた各々のメモリ領域に対してこの処理を行う。
【0073】
メモリ分類部21は、該当のメモリ領域についてコピー処理が必要か否かを判断する(ステップS11)。ここで、コピー処理について説明する。仮想マシンA10に割り当てられたメモリ領域が一の仮想マシンにのみ割り当てられる必要がある場合は、仮想マシン複製後、仮想マシンA10と仮想マシンB50が当該メモリ領域に対応する物理メモリ領域を共用しないようにする必要がある。そのため、仮想マシンA10および仮想マシンB50のそれぞれに対して物理メモリ領域を用意するため、新たに物理メモリ領域を獲得して、当該物理メモリ領域に、仮想マシンA10に割り当てられていたメモリ領域の内容をコピーする。一の仮想マシンにのみ割り当てられる必要があるか否かは、メモリ領域ごとに予め定められている。
【0074】
コピー処理が必要である場合は(ステップS11・Yes)、メモリ分類部21は、分類値を「0」にし(ステップS12)、仮想マシンメモリ管理テーブル311の分類値に「0」を設定し(ステップS19)、当該物理メモリ領域のコピー処理をメモリ複製部22に依頼する(ステップS21)。
【0075】
一方、コピー処理が必要でない場合は(ステップS11・No)、メモリ分類部21は、OSメモリ管理テーブル14(
図5参照)を参照する(ステップS13)。そして、メモリ分類部21は、当該メモリ領域の使用カウントが「0」か否かを判定する(ステップS14)。
【0076】
使用カウントが「0」である場合は(ステップS14・Yes)、メモリ分類部21は、分類値を「1」にする(ステップS15)。
【0077】
一方、使用カウントが「0」でない場合は(ステップS14・No)、メモリ分類部21は、当該メモリ領域の参照元情報が存在するか否かを判定する(ステップS16)。
【0078】
参照元情報が存在する場合は(ステップS16・Yes)、メモリ分類部21は、分類値を「2」にする(ステップS18)。
【0079】
一方、参照元情報が存在しない場合は(ステップS16・No)、メモリ分類部21は、分類値を「4」にする(ステップS17)。
【0080】
ステップS19において、メモリ分類部21は、仮想マシンメモリ管理テーブル311(
図7参照)の分類値311cに値を書き込む。次に、メモリ分類部21は、該当のメモリ領域に対して、分類値を検査する(ステップS20)。分類値が「4」の場合は、メモリ分類部21は、該当のメモリ領域に対して、書込アクセスを監視するようにアクセス制御テーブル310に設定する(ステップS22)。分類値が「1」または「2」の場合は、メモリ分類部21は、該当のメモリ領域に対して、読出アクセスおよび書込アクセスを監視するようにアクセス制御テーブル310に設定する(ステップS23)。以上でメモリ分類処理は、終了する。
【0081】
メモリ分類部21は、このメモリ分類処理を仮想マシンA10に割り当てられたすべてのメモリ領域に対して行う。
<メモリ割当処理>
図12は、仮想計算機システム1のメモリ割当処理部35によるメモリ割当処理を示すフローチャートである。
【0082】
メモリ割当処理は、仮想マシン複製後、いずれかの仮想マシンから物理メモリ40へのアクセスがあったときに開始する。具体的には、メモリ割当処理部35がアクセス検知部32からメモリ割当処理要求を受け取ったときに開始する。
【0083】
判別部61は、仮想マシンメモリ管理テーブル311(
図7参照)を参照して、アクセス対象の物理メモリ領域に対応する分類値を読み込む(ステップS21)。次に、判別部61は、当該分類値を判定し(ステップS22)、分類値が「1」の場合は(ステップS22・分類値1)、第1メモリ処理部63が、第1メモリ処理を行う(ステップS23)。分類値が「2」の場合は(ステップS22・分類値2)、第2メモリ処理部66が、第2メモリ処理を行う(ステップS24)。分類値が「3」の場合は(ステップS22・分類値3)、第3メモリ処理部67が、第3メモリ処理を行う(ステップS25)。分類値が「4」の場合は(ステップS22・分類値4)、コピーオンライト処理部62が、コピーオンライト処理を行う(ステップS26)。分類値が「5」の場合は(ステップS22・分類値5)、新規メモリ割当処理部64が、新規メモリ割当処理を行う(ステップS27)。
<第1メモリ処理(分類値「1」)>
図13は、仮想計算機システム1の第1メモリ処理部63による第1メモリ処理を示すフローチャートである。
【0084】
第1メモリ処理は、判別部61から、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第1メモリ処理の依頼がきたときに、開始される。
【0085】
第1メモリ処理部63は、アクセスしてきた仮想マシンに対してのアクセス監視を解除するようにアクセス制御テーブル310(
図8参照)に設定する(ステップS231)。これは、アクセス対象のメモリ領域が、以降、アクセスしてきた仮想マシン専用のメモリ領域となるため、アクセスを検知する必要がないからである。次に、第1メモリ処理部63は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する(ステップS232)。次に、第1メモリ処理部63は、当該物理メモリ領域を参照するように設定されている他の仮想マシンに対して、新規メモリ割当領域41にアクセスするようにアクセス制御テーブル310に設定する(ステップS233)。以上で第1メモリ処理は、終了する。
【0086】
図2は、分類値「1」が付された物理メモリ領域に、いずれかの仮想マシンが書込アクセスした時の処理を示す図であり、第1メモリ処理を模式的に示す図である。
【0087】
図2に示すように、分類値「1」が付された物理メモリ領域に、一の仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域に書き込む。このとき、仮想計算機システム1は、他の仮想マシンに対しては、新規メモリ割当領域41をアクセスするように設定しておく。新規メモリ割当領域41の分類値は「5」である。
<新規メモリ割当処理(分類値「5」)>
図14は、仮想計算機システム1の新規メモリ割当処理部64による新規メモリ割当処理を示すフローチャートである。
【0088】
新規メモリ割当処理は、判別部61から、アクセスしてきた仮想マシンの情報とともに、新規メモリ割当処理の依頼がきたときに、開始される。
【0089】
新規メモリ割当処理部64は、メモリ割当解放部34に依頼して新たな物理メモリ領域を獲得する(ステップS271)。次に、新規メモリ割当処理部64は、メモリ初期化処理部65を呼び出して、獲得した物理メモリ領域を初期化する(ステップS272)。新規メモリ割当処理部64は、新たに獲得した物理メモリ領域を、アクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル310に設定する(ステップS273)。つまり、アクセス制御テーブル310の物理メモリ領域310bの新規メモリ割当領域41が設定されていたところに、新たに獲得した物理メモリ領域のアドレスをセットする。新規メモリ割当処理部64は、仮想マシンメモリ管理テーブル311に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する(ステップS274)。以上で新規メモリ割当処理は、終了する。
【0090】
図3は、分類値「5」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、新規メモリ割当処理を模式的に示す図である。
【0091】
図3に示すように、他の仮想マシンが新規メモリ割当領域41にアクセスしてきた時に、仮想計算機システム1は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に当該他の仮想マシンが書き込むようにしている。
<第2メモリ処理(分類値「2」)>
図15は、仮想計算機システム1の第2メモリ処理部66による第2メモリ処理を示すフローチャートである。
【0092】
第2メモリ処理は、判別部61から、仮想マシンのアクセスについて書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第2メモリ処理の依頼がきたときに、開始される。
【0093】
まず、第2メモリ処理部66は、仮想マシンからのアクセス種別を判定する(ステップS241)。
【0094】
読出アクセスの場合は(ステップS241・読出アクセス)、第2メモリ処理部66は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する分類値を「4」に設定する(ステップS242)。次に、第2メモリ処理部66は、アクセスしてきた仮想マシンに対しての読出アクセス監視を解除するようにアクセス制御テーブル310に設定する(ステップS243)。
【0095】
一方、書込アクセスの場合は(ステップS241・書込アクセス)、第2メモリ処理部66は、仮想マシンメモリ管理テーブル311に対して、アクセス対象の物理メモリ領域に対応する分類値を「3」に設定する(ステップS244)。次に、第2メモリ処理部66は、アクセスしてきた仮想マシンに対しては、読出/書込アクセス監視を解除するように、また、他の仮想マシンに対しては、読出/書込アクセス監視をするように、アクセス制御テーブル310に設定する(ステップS245)。以上で第2メモリ処理は、終了する。
【0096】
図16は、分類値「2」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第2メモリ処理を模式的に示す図である。
【0097】
図16に示すように、分類値「2」が付された物理メモリ領域に、一の仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域に書き込む。そして、当該物理メモリ領域の分類値は「3」に変更する。図示していないが、一の仮想マシンから最初に読出アクセスがあった時には、同様に、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域から読み出す。そして、当該物理メモリ領域の分類値は「4」に変更する。
<第3メモリ処理(分類値「3」)>
図17は、仮想計算機システム1の第3メモリ処理部67による第3メモリ処理を示すフローチャートである。
【0098】
第3メモリ処理は、判別部61から、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第3メモリ処理の依頼がきたときに、開始される。
【0099】
第3メモリ処理部67は、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、メモリ割当解放部34に依頼して、新たな物理メモリ領域を獲得する(ステップS251)。次に、第3メモリ処理部67は、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする(ステップS252)。次に、第3メモリ処理部67は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル310に設定する(ステップS253)。次に、第3メモリ処理部67は、仮想マシンメモリ管理テーブル311に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「1」、分類値を「0」に設定する(ステップS254)。次に、第3メモリ処理部67は、仮想マシンメモリ管理テーブル311に対して、コピー元の物理メモリ領域に対応する使用カウントを「1」減じる(ステップS255)。第3メモリ処理部67は、使用カウントを「1」減じた結果、当該使用カウントが「1」である場合には、分類値を「0」に設定する(ステップS257)。以上で第3メモリ処理は、終了する。
【0100】
図18は、分類値「3」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第3メモリ処理を模式的に示す図である。
【0101】
図18に示すように、他の仮想マシンが分類値「3」の物理メモリ領域に書込アクセスしてきた時に、仮想計算機システム1は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム1は、新たに獲得した物理メモリ領域に、アクセスした仮想マシンが書き込むようにしている。
【0102】
図19は、分類値「3」が付されたメモリ領域に、仮想マシンが読出アクセスした時の処理を示す図であり、第3メモリ処理を模式的に示す図である。
【0103】
図19に示すように、他の仮想マシンが分類値「3」の物理メモリ領域に読出アクセスしてきた時に、仮想計算機システム1は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム1は、当該物理メモリ領域からその内容を読み出すようにしている。なお、この場合は、一の仮想マシンによって書き換えられたメモリ領域の内容を他の仮想マシンが読み出しても問題のない場合である。
【0104】
以上、実施の形態1によると、一の仮想マシンを複製して他の仮想マシンを生成する際に、未使用のメモリ領域や参照元が存在するメモリ領域に対して、いずれかの仮想マシンから最初に書込アクセスがあったときには、新たに物理メモリ領域を獲得することがないので、コピーオンライト処理よりもさらにメモリ使用量を削減することができる。
【0105】
また、参照元が存在するメモリ領域に対して読出/書込アクセスを監視している場合において、一の仮想マシンから最初に読出アクセスがあった場合は、その後の他の仮想マシンから当該メモリ領域へのアクセスに対しては、コピーオンライト処理を行うこととしているので、一の仮想マシンから最初に読出アクセスがあった後、他の仮想マシンから読出アクセスがあっても、例外が発生せず、仮想計算機システムの性能面を改善することができる。
≪実施の形態2≫
次に、本発明の実施の形態2について、
図20および
図21を参照して説明する。
<概要>
実施の形態1に係る仮想計算機システム1は、メモリ分類処理のステップS14において(
図11参照)、使用カウントが「0」である場合は(ステップS14・Yes)、分類値を「1」にすることとしている(ステップS15)。すなわち、仮想マシン複製前のメモリ領域の使用状態が未使用であるときでも、物理メモリ領域は解放せずに仮想マシンA10と仮想マシンB50が共用するようにしている。一方、実施の形態2に係る仮想計算機システム1Bは、メモリ分類処理において、メモリ領域の使用状態が未使用であると判別したときは、そのメモリ領域に対応する物理メモリ領域を解放するようにする。これにより、さらにメモリ使用量を削減することができる。
<構成>
仮想計算機システム1Bの構成は、仮想計算機システム1の構成と同様である。なお、仮想計算機システム1の構成と同一の構成には同一の符号を付して、重複した説明は省略する。
<動作>
以下、仮想計算機システム1Bの動作について、
図20および
図21を参照して説明する。
【0106】
図20は、仮想計算機システム1Bのメモリ分類部21Bによるメモリ分類処理の動作を示すフローチャートである。実施の形態1と異なる点のみを説明する。
【0107】
ステップS31〜34は、ステップS11〜14(
図11参照)と同様である。
【0108】
ステップS34において、使用カウントが「0」である場合は(ステップS34・Yes)、ステップS35において、メモリ分類部21Bは、メモリ割当解放部34に依頼して、当該メモリ領域に対応する物理メモリ領域を解放する。さらに、メモリ分類部21Bは、当該メモリ領域に対して分類値「5」が付された新規メモリ割当領域41が対応するようにアクセス制御テーブル310に設定する。そして、メモリ分類処理は、終了する。
【0109】
図21は、仮想計算機システム1Bによる仮想マシン複製時の様子を模式的に表した図である。
【0110】
仮想計算機システム1Bは、仮想マシン複製時に、メモリ領域の使用状態が未使用であると判別したときは、そのメモリ領域に対応する物理メモリ領域を解放するようにする。そして、当該メモリ領域に対して分類値「5」が付された新規メモリ割当領域41が対応するようにしておく。その後、いずれかの仮想マシンが当該新規メモリ割当領域41にアクセスしてきたときは、
図3に示すように、仮想計算機システム1Bは、新規メモリ割当処理を行う。
【0111】
以上、実施の形態2によると、仮想マシン複製時に、仮想マシンが未使用であるメモリ領域に対応する物理メモリ領域をすべて解放することができる。
≪実施の形態3≫
次に、本発明の実施の形態3について、
図22〜
図26を参照して説明する。
<概要>
一般に、仮想マシンにおけるアプリケーション等が論理メモリ領域を使用しなくなり、仮想OSがその論理メモリ領域を解放する(例えば、アプリケーションと論理メモリ領域とを対応付けたメモリ管理用の情報を削除する等)と、当該論理メモリ領域は、当該仮想マシンにおける未使用の論理メモリ領域を管理する空きメモリリストにつなげられる。しかしながら、当該論理メモリ領域に対応する物理メモリ領域は解放されるわけではなく、当該仮想マシンに割り当てられたままとなっている。
【0112】
実施の形態3に係る仮想計算機システム1Cは、仮想OSが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放を行うことで、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができるようにしたものである。
<構成>
次に、仮想計算機システム1Cの構成について
図22を参照して説明する。
【0113】
図22は、実施の形態3に係る仮想計算機システム1Cの機能構成図である。なお、仮想計算機システム1の構成と同一の構成には同一の符号を付して、重複した説明は省略する。
【0114】
仮想計算機システム1Cは、仮想マシンA10Cにおける空きメモリリスト15と、仮想マシン起動装置70と、仮想マシンメモリ管理装置30Cにおけるメモリリスト処理部68と、物理メモリ40Cにおけるメモリリスト監視領域42とを備える。
【0115】
空きメモリリスト15は、仮想マシン内の空きメモリ領域を管理するための管理情報であり、例えば、仮想マシンA10Cの論理メモリ領域のうち仮想マシンA10C内において未使用であるすべての論理メモリ領域各々を特定するための情報(アドレス等)を含ませたリストである。
【0116】
図23は、空きメモリリスト15の一例を示す図である。このリストの各データ「1」、「2」、…、「n」は、仮想マシンA10C内において未使用である論理メモリ領域のアドレスである。本実施の形態では、OSメモリ管理部13は、論理メモリ領域の割当てまたは解放をするときは、必ず空きメモリリスト15にアクセスするようになっているものとする。OSメモリ管理部13は、アプリケーション11から論理メモリ領域の解放要求があると、空きメモリリスト15にアクセスし、アプリケーション11が指定した論理メモリ領域を空きメモリリスト15に含ませる。また、OSメモリ管理部13は、アプリケーション11から論理メモリ領域の割当要求があると、空きメモリリスト15にアクセスし、空きメモリリスト15から未使用の論理メモリ領域を取得し、アプリケーション11に当該論理メモリ領域を割り当てる。
【0117】
仮想マシン起動装置70は、OSメモリ処理設定部71を備える。OSメモリ処理設定部71は、仮想マシンA10Cが起動する際に呼び出され、アクセス制御設定処理を行うものである。アクセス制御設定処理は、OSメモリ処理設定部71が、空きメモリリスト15が格納されている所定の論理メモリ領域について、そのメモリ領域へのアクセスがメモリリスト監視領域42へのアクセスとなるように、アクセス制御テーブル310Cに設定することにより行われる。
【0118】
図24は、OSメモリ処理設定部71が、仮想マシンA10Cが起動する際に、アクセス制御テーブル310Cを更新した後の一例を示す図である。
【0119】
論理メモリ領域310a「空きメモリリストの領域」は、例えば、空きメモリリスト15の先頭の論理アドレスである。この論理アドレスへのアクセスがメモリリスト監視領域42へのアクセスとなるように、対応する物理メモリ領域310bに「メモリリスト監視領域」が設定されている。
【0120】
メモリリスト監視領域42は、新規メモリ割当領域41と同様、物理メモリ40内の一部として存在する。仮想マシンからこのメモリリスト監視領域42へのアクセスについては、
図24に示すように、アクセス権限に「R/W禁止」が設定されており、アクセスが監視される。アクセス制御部31が、このメモリリスト監視領域42へのアクセスを検知すると、アクセス検知部32へ通知する。このとき、アクセス検知部32は、メモリ割当処理部35Cの後述するメモリリスト処理部68を呼び出すように構成されている。また、アクセス制御部31は、仮想マシンから空きメモリリスト15へのアクセス情報を受け取り、この情報をアクセス検知部32へ渡す。この空きメモリリスト15へのアクセス情報は、仮想マシンがメモリ領域を解放しようとしているのか、割当てしようとしているのかを判断することができる情報である。例えば、アドレス値および空きメモリリスト15につなぐ処理を要求する情報であるときは、仮想マシンがメモリ領域を解放しようとしていると判断する。一方、空きメモリリスト15からメモリ領域を取得する処理を要求する情報であるときは、仮想マシンがメモリ領域を割当てしようとしていると判断する。
【0121】
メモリリスト処理部68は、アクセス検知部32から空きメモリリスト15へのアクセス情報を受け取り、仮想マシンがメモリ領域を解放しようとしているのか、または割当てしようとしているのかを判断するものである。メモリリスト処理部68は、仮想マシンがメモリ領域を解放しようとしていると判断すると、解放しようとしている論理メモリ領域に対応する物理メモリ領域をメモリ割当解放部34に渡し、当該物理メモリ領域の解放を指示する。メモリリスト処理部68は、仮想マシンがメモリ領域を割当てしようとしていると判断すると、メモリ割当解放部34に物理メモリ領域の割当てを指示する。
<動作>
以下、仮想計算機システム1Cの動作について、
図25および
図26(構成は適宜
図22)を参照して説明する。
【0122】
図25は、仮想計算機システム1CのOSメモリ処理設定部71によるアクセス制御設定処理を示すフローチャートである。
【0123】
この処理は、仮想マシンが起動される際に、開始する。
【0124】
まず、OSメモリ処理設定部71は、空きメモリリスト15に対する読出アクセスまたは書込アクセスがメモリリスト監視領域42へのアクセスとなるように、アクセス制御テーブル310Cを設定する(ステップS41)。次に、OSメモリ処理設定部71は、メモリリスト監視領域42への読出アクセスおよび書込アクセス監視をアクセス制御テーブル310Cに設定をする(ステップS42)。以上で、アクセス制御設定処理は、終了する。
【0125】
図26は、仮想計算機システム1Cのメモリ割当解放処理を示すフローチャートである。
【0126】
この処理は、仮想計算機システム1Cが仮想マシンに対して物理メモリ領域を割当または解放するときの処理である。
【0127】
まず、OSメモリ管理部13が空きメモリリスト15へアクセスする(ステップS51)。次に、アクセス制御部31は、当該アクセスを検知し、アクセス検知部32へ通知する(ステップS52)。次に、アクセス検知部から呼び出されたメモリリスト処理部68は、当該アクセスが、メモリ領域の解放なのか、割当てなのかを判断する(ステップS53)。メモリ領域の解放であるときは(ステップS53・解放)、メモリ割当解放部34は、メモリ解放処理を行う(ステップS54)。メモリ解放処理は、メモリ割当解放部34が、解放の対象である物理メモリ領域をメモリリスト処理部68から受け取り、仮想マシンメモリ管理テーブル311において、当該物理メモリ領域に対応する使用カウントを「1」減じることにより行われる。その結果、使用カウントが「0」になれば、当該物理メモリ領域は、解放されたことになり、未使用となる。メモリ領域の割当てであるときは(ステップS53・割当)、メモリ割当解放部34は、メモリ割当処理を行う(ステップS55)。メモリ割当処理は、メモリ割当解放部34が、仮想マシンメモリ管理テーブル311を参照し、解放されている未使用(使用カウントが「0」)の物理メモリ領域を検索し、当該物理メモリ領域に対応する使用カウントを「1」加算することで使用中であることをセットし、当該物理メモリ領域に対応する論理メモリ領域を仮想OS12Cへ渡すことにより行われる。以上で、メモリ割当解放処理は、終了する。
【0128】
以上、実施の形態3によると、仮想OSが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放が行われるので、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができる。
≪補足≫
以上、本発明に係る仮想計算機システムを、実施の形態に基づいて説明したが、本発明の趣旨を逸脱しない範囲で変更することができる。例えば、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りの仮想計算機システムに限らない。
(1)実施の形態では、メモリ領域の使用状態には、アプリケーションやドライバ等により使用されているかという情報、メモリ領域に格納された情報の参照元の有無が含まれるとして説明したが、これらに限るものではない。例えば、当該メモリ領域を使用中のアプリケーション以外のアプリケーションにより利用可能であるか否かという情報を含んでもよい。
【0129】
この場合、OSメモリ管理テーブル14(
図5参照)に、プライベートメモリフラグの項目を設ける。プライベートメモリフラグは、当該メモリ領域が、使用しているアプリケーションのみで使用可能である場合に「1」を、それ以外の場合に「0」を格納するものである。プライベートメモリフラグが「1」となっている場合は、メモリ領域の使用状態を実施の形態1で説明した「参照元なし」に該当させ、プライベートメモリフラグが「0」となっている場合は、「参照元あり」に該当させることとしてもよい。
(2)実施の形態では、メモリ分類処理(
図11参照)のステップS11において、当該メモリ領域についてコピー処理が必要か否かを判断するとして説明したが、次のようにしてもよい。すなわち、一の仮想マシンにのみ割り当てられる必要があるメモリ領域については、仮想マシン複製前に予め仮想マシンメモリ管理テーブル311(
図7参照)の使用カウント311bに「1」、分類値311cに「0」を設定しておいてもよい。これにより、メモリ分類処理のステップS11における判断が省略できるので、処理効率を上げることができる。
(3)実施の形態では、
図14のフローチャートに示すように、新規メモリ割当処理のステップS272において、新規メモリ割当処理部64は、メモリ初期化処理部65を呼び出して、獲得した物理メモリ領域を初期化するとして説明した。しかしながら、メモリ領域の割当てを受ける仮想マシンがセキュアである場合については、この初期化を行わないとしてもよい。これにより、処理の軽減化を図ることができる。例えば、割当てが行われた物理メモリ領域がもともとどの仮想マシンで使われていたかを判断し、その仮想マシンが今回割当てを受ける仮想マシンと同じである場合には、この初期化を行わないとしてもよい。
(4)実施の形態では、
図19に示すように、他の仮想マシンが分類値「3」の物理メモリ領域に読出アクセスしてきた時に、仮想計算機システム1は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム1は、当該物理メモリ領域からその内容を読み出すようにしているとして説明した。しかしながら、一の仮想マシンの書込アクセス前のメモリ領域の内容を保持している場所(例えば、ストレージ等)から、当該内容を新たに獲得した物理メモリ領域に読み込み、アクセスした他の仮想マシンが当該内容を当該物理メモリ領域から読み出すようにしてもよい。
(5)実施の形態では、
図23に示すように、仮想マシン内の空きメモリ領域を管理するための管理情報として、リストを使用したが、これに限られない。空きメモリ領域を管理するための情報であって、メモリ領域を解放する際に必ず仮想OSがアクセスするものであれば、どのような形態でもよい。例えば、空きメモリ領域を管理するための管理情報は、いわゆるビットマップ方式やメモリマップ方式でもよい。アクセス制御部31は、これらの管理情報に仮想OSがアクセスしたことを検知するように構成される。
(6)実施の形態に係る仮想計算機システム1に、上記(1)〜(5)の一部または全部の変形を組み合わせて適用してもよい。
(7)以下、さらに本発明の一実施形態に係る仮想計算機システムの構成およびその変形例と各効果について説明する。
(a)本発明の一実施形態に係る仮想計算機システムは、第1の仮想マシンを複製することで1以上の第2の仮想マシンを生成する仮想計算機システムであって、前記第1の仮想マシンがアクセスし得る1以上の各メモリ領域について、前記1以上の第2の仮想マシンの生成後、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理手段と、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別手段と、前記特定種メモリ領域への前記書込アクセスを検知する第1検知手段と、前記第1検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第2検知手段と、前記第2検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当手段とを備える。
【0130】
この仮想計算機システムは、一の仮想マシンを複製して他の仮想マシンを生成する際に、未使用のメモリ領域や参照元が存在するメモリ領域に対して、いずれかの仮想マシンから最初に書込アクセスがあったときには、新たに物理メモリ領域を獲得することがないので、コピーオンライト処理よりもさらにメモリ使用量を削減することができる。
【0131】
また、動的に仮想マシンを生成・消滅させるような仮想計算機システムにおいて、動的に生成した仮想マシンと元の仮想マシンとのいずれか一方しか使わないメモリ領域について、無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
(b)また、前記判別手段は、前記第1の仮想マシンの複製により前記1以上の第2の仮想マシンを生成する際に、当該第1の仮想マシン内で使用している各メモリ領域についての使用状況を示す情報に基づいて、前記判別を行うとしてもよい。
【0132】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況に基づいて、特定種メモリ領域か否かを判定するので、動的に仮想マシンを生成させ、それぞれの仮想マシンが動作しても、不必要なメモリ領域の割当てを行うことなく仮想マシンを動作させることができる。
(c)また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するものであり、前記判別手段は、未使用でありかつ初期化してアクセスされるメモリ領域については特定種メモリ領域であると判別するとしてもよい。
【0133】
この仮想計算機システムは、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
(d)また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域の内容と同一の内容が外部の記憶手段に存在するか否かを区別するものであり、前記判別手段は、外部の記憶手段内と同一の内容のメモリ領域については特定種メモリ領域であると判別するとしてもよい。
【0134】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、当該メモリ領域の内容と同一の内容が外部の記憶手段に存在するか否かを区別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
(e)また、前記判別手段は、前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別するとしてもよい。
【0135】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、複製元の仮想マシンおよび1以上の複製先の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
(f)また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用であるか否かを区別するものであり、前記仮想計算機システムは、更に、前記情報に基づき、第1の仮想マシンの複製により1以上の第2の仮想マシンを生成する際に、当該第1の仮想マシンに割り当てられていたメモリ領域が未使用であるか否かを判別する第2判別手段と、前記第2判別手段により未使用と判別されたメモリ領域について、当該メモリ領域への前記第1の仮想マシンおよび前記1以上の第2の仮想マシンのうちいずれかの仮想マシンによるアクセスを検知可能に設定した上で当該メモリ領域の実体を解放し、実体が解放された当該メモリ領域への当該仮想マシンによるアクセスが後に検知された場合に当該仮想マシンに対して当該メモリ領域の実体を割り当てるメモリ割当解放手段とを備えるとしてもよい。
【0136】
この仮想計算機システムによれば、仮想マシン複製時に、仮想マシンが未使用であるメモリ領域に対応する物理メモリ領域をすべて解放することができる。
(g)また、仮想マシンの仮想OSが、メモリ領域の解放のために、前記仮想マシンの空きメモリ領域を管理するための管理情報が格納されるメモリ領域へアクセスした場合に、当該アクセスを検知する第3検知手段と、前記第3検知手段により前記アクセスが検知された場合に、前記仮想OSが解放しようとしている前記メモリ領域の実体の解放を行うメモリ解放手段とを更に備えるとしてもよい。
【0137】
この仮想計算機システムは、仮想OSが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放が行われるので、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができる。
(8)メモリ分類部21、メモリ複製部22、アクセス制御部31、アクセス検知部32、メモリ割当解放部34、メモリ割当部35、メモリリスト処理部68およびメモリ処理設定部71は、仮想計算機システム1におけるコンピュータを当該機能部として機能させるメモリ管理プログラムによって、動作する。また、実施の形態において説明した各機能部は、IC(Integrated Circuit)やLSI(Large Scale Integration)等のハードウェア回路で実現してもよい。
【0138】
また、メモリ管理プログラムを各種記録媒体または通信路を通じて流通させ頒布することもできる。流通、頒布されたプログラムは、機器におけるCPUで読み取り可能なメモリ等に格納されることにより利用に供され、そのCPUがそのプログラムを実行することにより実施の形態で示した仮想計算機システムの各機能が実現される。
(9)実施の形態では、フローチャートのステップは、記載された順序に沿って時系列的に行われる処理の例を示したが、必ずしも時系列的に処理されなくとも、並列的あるいは個別実行される処理をも含むものである。
(10)本発明は、プロセッサとタイマとを備えた計算処理装置であれば、あらゆる計算機(例えば、電子機器、情報機器、AV機器、通信機器、家電機器等)に適用可能である。具体的には、パーソナルコンピュータ、スマートフォンおよびPDA等の携帯電話機、ハードディスクレコーダ、DVDおよびブルーレイディスク等を用いたディスクレコーダ、DVDおよびブルーレイディスク等を用いたディスクプレーヤ、カーナビゲーションシステムおよびテレビジョン等にも適用可能である。
(11)本発明に係る管理手段は、実施の形態に係るアクセス制御部31に相当し、本発明に係る判別手段は、実施の形態に係るメモリ分類部21およびOSメモリ管理テーブル14に相当し、本発明に係る特定種メモリ領域は、実施の形態に係るメモリ領域の使用状態が「未使用」または「参照元あり」に該当する場合に相当し、本発明に係る第1検知手段は、実施の形態に係るアクセス制御部31、アクセス検知部32、メモリ割当処理部35および仮想マシンメモリ管理テーブル311に相当し、本発明に係る第2検知手段は、実施の形態に係るアクセス制御部31、アクセス検知部32、メモリ割当処理部35および仮想マシンメモリ管理テーブル311に相当し、本発明に係るメモリ割当手段は、実施の形態に係るメモリ割当解放部34および仮想マシンメモリ管理テーブル311に相当する。
【0139】
また、本発明に係る第2判別手段は、実施の形態に係るメモリ分類部21およびOSメモリ管理テーブル14に相当し、本発明に係るメモリ割当解放手段は、実施の形態に係るメモリ割当解放部34、メモリ割当処理部35および仮想マシンメモリ管理テーブル311に相当する。
【0140】
また、本発明に係る第3検知手段は、実施の形態に係るOSメモリ処理設定部71およびアクセス制御部31に相当し、本発明に係るメモリ解放手段は、実施の形態に係るメモリリスト処理部68および仮想マシンメモリ管理テーブル311に相当する。