説明

仮想計算機システムにおけるメモリ割り当て方法

【課題】 アドレス変換機構を持ったIOデバイスを含む仮想計算機システムにおいて、IOデバイスのハードウェア上の制限を回避し、柔軟なゲストメモリ割り当てを可能とする。
【解決手段】 IOデバイス内のアドレス変換機構とチップセット内のアドレス変換機構を併用し、ゲスト物理アドレスからホスト物理アドレスへの変換を行う際には、仮想的なアドレスである仮アドレスを経由する。仮アドレスでゲストメモリ領域の分散を抑え、IOデバイス内のアドレス変換テーブルエントリを節約することで、フラグメント化によるゲストメモリ割り当て失敗を抑える。また、仮アドレスからホスト物理アドレスへの変換にチップセット内のアドレス変換機構を用いることで、仮想計算機に割り当てるメモリサイズを細かく指定できるようになる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は仮想計算機システムにおける、仮想計算機へのメモリ割り当て方法に関する。
【背景技術】
【0002】
通常のOS(Operating System)は、物理計算機上で動作することを前提に作られているので、メモリは0番地から始まる連続した1つの領域として設計されている。しかし、仮想計算機システムでは、1台の物理計算機上に複数の仮想的な計算機(以下仮想計算機と略す)を定義し、各仮想計算機に物理メモリを分割して割り当てるので、仮想計算機に割り当てたメモリ領域(以下ゲストメモリ領域と略す)の開始アドレスは0番地とは限らない。また、ゲストメモリ領域を、1つの連続した領域として物理メモリ上に確保できるとも限らない。そのため、仮想計算機システムにおいては、0番地でないアドレスを0番地に見せかけ、複数の連続領域を1つの連続領域として見せかける仕組みが必要となる。
【0003】
仮想計算機上で動作するOS(以下ゲストOSと略す)がメモリアクセスを行う場合、ゲストメモリ領域の先頭を0番地とするアドレス(以下ゲスト物理アドレスと略す)でアクセスを行う。しかし、ゲスト物理アドレスは、物理計算機が持つ物理メモリ領域の先頭を0番地とするアドレス(以下ホスト物理アドレスと略す)とは異なるので、そのままではアクセスできない。そこで、ゲスト物理アドレスからホスト物理アドレスへの変換をハイパバイザが行うことで、ゲストOSがメモリにアクセスできるようになる。
【0004】
ゲストOSからIOデバイスへのDMA(Direct Memory Access)要求はゲスト物理アドレスで指定される。DMA転送では、IOデバイスからメモリに直接データを転送するので、IOデバイスは転送先としてホスト物理アドレスを指定しなければならない。IOデバイスを複数の仮想計算機で共有する場合、複数のゲストOSからの要求をホスト物理アドレスに変換する必要がある。IOデバイスからメモリに直接転送するので、前述のハイパバイザによるアドレス変換は適用できない。そこで、仮想計算機毎のゲスト物理アドレスを、ホスト物理アドレスに変換する機能を持ったIOデバイスが出てきた(例えば特許文献1)。
【0005】
前述のアドレス変換機構を持つIOデバイスは、アドレス変換用のテーブルをレジスタ内に持ち、テーブルエントリとして、アドレス変換対象とするメモリ領域の先頭ゲスト物理アドレスと、それに対応するホスト物理アドレス、変換対象領域のサイズが格納される。変換対象領域のサイズはブロック数として格納されており、IOデバイス内部で定義されているブロックサイズと併せて、領域サイズが算出できる。仮想計算機に割り当てたメモリ領域が、物理メモリ上で複数の連続領域に分かれた場合、分散した数だけエントリが必要となる。
【0006】
IOデバイスがゲストOSからDMA転送要求を受けると、要求元の仮想計算機番号と、転送先として指定されたゲスト物理アドレスを元に、アドレス変換テーブルを参照し、転送先アドレスが存在するゲストメモリ領域の先頭のホスト物理アドレスを取得する。そして、要求されたゲスト物理アドレスにホスト物理アドレスを加算することで、ホスト物理アドレスが算出できるので、IOデバイスからのメモリアクセスが可能となる。
【0007】
前述のIOデバイス以外に、アドレス変換機能を持ったチップセットも存在する(例えば非特許文献1)。チップセット内のアドレス変換機能は、仮想計算機番号という概念がなく、1つのデバイスが1つのアドレス変換テーブルに括り付けられるので、IOデバイス内のアドレス変換機能のように1つのデバイスを複数の仮想計算機から共有できない。しかし、チップセット内のアドレス変換機能は、アドレス変換テーブルをメモリ上に保持するので、IOデバイスのようなレジスタ容量による制限が存在せず、より柔軟なテーブル定義が可能である。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2006−85400号公報
【非特許文献】
【0009】
【非特許文献1】Intel Virtualization Technology for Directed I/O Architecture Specification (http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf)
【発明の概要】
【発明が解決しようとする課題】
【0010】
ブロックサイズがIOデバイス内で固定なので、仮想計算機に割り当てる領域サイズがブロックサイズの整数倍でなければならず、より細かな単位でのメモリ割り当てができない。また、IOデバイスがアドレス変換テーブルを保持するレジスタの容量により、エントリ数が制限されるため、仮想計算機に割り当てるメモリ領域を物理メモリ上に細かく分散させることができない。仮想計算機の起動と終了を繰り返すことによる物理メモリ領域のフラグメント化などで、1仮想計算機が使用できるエントリ数の上限を超えた場合、ゲストメモリ割り当てが失敗する。
【課題を解決するための手段】
【0011】
IOデバイス内のアドレス変換機構とチップセット内のアドレス変換機構による二重のアドレス変換を実施できるように、ハイパバイザがそれぞれの変換テーブルを作成する。IOデバイス内のアドレス変換機構がゲストOSから指定されるゲスト物理アドレスを入力として仮想的なアドレス(以下仮アドレスを略す)を出力し、チップセット内のアドレス変換機構が仮アドレスを入力としてホスト物理アドレスを出力することで、ゲスト物理アドレスからホスト物理アドレスを得る。
【発明の効果】
【0012】
仮アドレスによって示される仮想的なメモリ領域(以下仮メモリ領域と略す)は、物理メモリ領域よりも大きな領域として定義する。ゲストメモリ領域の合計サイズは物理メモリサイズ以下なので、仮メモリ領域が物理メモリよりも十分に大きければ、ゲストメモリ領域は仮メモリ領域上で分散せずに確保できる。この場合、IOデバイスのアドレス変換テーブルは、1仮想計算機あたり1エントリの消費で済むので、最大仮想計算機数が最大エントリ数以下である限り、エントリ数上限を超えることによるゲストメモリ割り当ての失敗がなくなる。
【0013】
チップセットのアドレス変換機構は、IOデバイスのアドレス変換機構よりも細かな単位で対象領域を登録できるので、仮想計算機に対して割り当てるメモリも細かな単位で指定できる。物理メモリの割り当て率が高いと、物理メモリ領域のフラグメント化により、物理メモリの空き領域が細かく分散してしまうが、チップセットのアドレス変換機構はエントリ数による制限がないので、フラグメント化の進行によるゲストメモリ割り当ての失敗が起こらない。
【図面の簡単な説明】
【0014】
【図1】本発明の実施例の全体構成を示すブロック図である。
【図2】上記実施例のIOデバイス内のアドレス変換機構が持つ変換テーブルのフォーマットである。
【図3】上記実施例のチップセット内のアドレス変換機構におけるアドレス変換の流れを示したものである。
【図4】上記実施例におけるアドレス変換の流れを示したものである。
【図5】上記実施例の仮アドレス管理部の構成を示す機能ブロック図である。
【図6】上記実施例において、物理メモリのフラグメント化が進行した場合のゲストメモリ領域割り当ての例である。
【図7】上記実施例において、チップセットのアドレス変換単位でゲストメモリ領域サイズを指定した場合の割り当て例である。
【図8】上記実施例の仮アドレス管理部のゲストメモリ割り当て登録処理部の処理フローを示すフローチャートである。
【図9】上記実施例における、アドレス変換の例である。
【発明を実施するための形態】
【0015】
図1は、本発明における実施例の全体図を示している。物理計算機100として、CPU102、チップセット103、メモリ104、IOデバイス101を持つ。IOデバイス101はIOデバイス内のアドレス変換機構105を持ち、チップセット103はチップセット内のアドレス変換機構106を持つ。IOデバイス101は、物理計算機100の外部にあるストレージ110に接続されている。仮想計算機システムでは、複数の仮想計算機130を定義でき、各仮想計算機に論理CPU132やゲストメモリ133、論理IOデバイス134といった論理資源131を割り当て、その上でゲストOS135が動作する。物理計算機100上で動作するハイパバイザ120は、後述する仮アドレスを管理するための仮アドレス管理部121を持つ。
【0016】
IOデバイス内のアドレス変換機構105は、IOデバイス101内のレジスタに保持されるアドレス変換テーブルを参照して、アドレス変換を実施する。図2にアドレス変換テーブルエントリの内容を示す。各エントリは、該エントリがどの仮想計算機のエントリかを示す仮想計算機番号200と、変換対象とするゲストメモリ領域の先頭となるゲスト物理アドレス201と、ゲストメモリ領域を割り当てる仮アドレス領域の先頭となる仮アドレス202と、対象領域のブロック数203で構成される。
【0017】
次に、チップセット内のアドレス変換機構106におけるアドレス変換の流れを図3に示す。チップセットのアドレス変換機構は、IOデバイスからDMA転送先アドレスとして指定されるゲスト物理アドレス300を、複数の領域310、311、312、313に区切り、それぞれでアドレス変換を実施する。チップセットのアドレス変換機構は、アドレス変換テーブルをメモリ上に保持しているため、IOデバイスのようなレジスタ容量によるエントリ数の制限がない。また、キャッシュ機構320、321、322が存在し、キャッシュミス時にのみメモリからの読み出しが発生する。
【0018】
チップセットのアドレス変換機構では、要求元のデバイス毎にアドレス変換テーブルのベースアドレス(以下ベースアドレスと略す)が決まっており、全デバイス分のベースアドレスが、ベースアドレス格納領域340に格納されている。要求元デバイスのベースアドレスエントリ330は、アドレス変換テーブル341の先頭アドレスを示しており、そこにアドレス変換対象領域310を足すことで、アドレス変換テーブルエントリ331のアドレスを得る。アドレス変換テーブルエントリ331は、アドレス変換テーブル342の先頭アドレスを示しており、そこにアドレス変換対象領域311と足すことで、アドレス変換テーブルエントリ332を得る。アドレス変換テーブルエントリ332は、アドレス変換テーブル343の先頭アドレスを示しており、そこにアドレス変換対象領域312と足すことで、アドレス変換テーブルエントリ333を得る。アドレス変換テーブルエントリ333は、メモリブロック344の先頭アドレスを示しており、そこにアドレス変換対象領域313と足すことで、ホスト物理アドレス334を得る。以上で、チップセットによるアドレス変換が完了する。
【0019】
ゲストOSの転送要求から、物理メモリアクセスまでのアドレス変換の流れを図4に示す。ゲストOS135がIOデバイスに転送要求を出す際には、転送先アドレスをゲスト物理アドレス400で指定する。IOデバイス101のアドレス変換テーブルはエントリ数に限りがあるので、物理メモリ領域よりも大きい仮想的なアドレス空間(以下仮アドレス空間と略す)を定義する。IOデバイス101は、IOデバイス内のアドレス変換機構105によって、ゲストOS135から指定されたゲスト物理アドレス400を、仮アドレス空間内の仮アドレス401に変換する。仮アドレス401は、チップセット103で、チップセット内のアドレス変換機構106によって、ホスト物理アドレス402に変換され、物理メモリ104にアクセス可能となる。
【0020】
図5に、仮アドレス管理部121の構成を示す。仮アドレス管理部121は、ゲストメモリ割り当て登録処理部501と、ゲストメモリ割り当て解除処理部502、仮アドレス割り当てリスト500から成る。仮アドレス割り当てリスト500は、ゲストメモリ領域の仮アドレスへの割り当て状況を保持している。ゲストメモリ割り当て登録処理部501と、ゲストメモリ割り当て解除処理部502は、仮アドレス割り当てリスト500を参照して、ゲストメモリ領域を割り当てる仮アドレスを決定する。
【0021】
ゲストメモリ領域の割り当て例を図6に示す。仮想計算機1〜3のゲストメモリ領域600、601、602は、それぞれが仮アドレス空間に1つの連続した領域610、611、612として確保されているが、ホスト物理アドレス空間では、複数の領域620、621、622、623、624に分散して配置されている。ここで新しく仮想計算機4にゲストメモリ領域603を割り当てる。仮アドレス空間の仮想計算機1と仮想計算機2の間の空き領域614や、仮想計算機2と仮想計算機3の間の空き領域615に、仮想計算機4のゲストメモリ領域603を割り当てようとすると、割り当てようとしているメモリ領域の方が大きいので、1つの空き領域に収まらず、複数の領域に分散してしまう。ここで、ホスト物理アドレスとして利用可能な範囲は物理メモリサイズ分だが、仮アドレスには物理メモリ量による制限がないので、ホスト物理アドレスとして利用可能な範囲を超えた領域に仮想計算機4のゲストメモリ領域613を割り当てることで、ゲストメモリ領域603を1つの連続した領域として仮アドレス空間内に確保できる。次に、仮アドレス空間内に確保した仮想計算機4のゲストメモリ領域613を、ホスト物理アドレス空間に割り当てていく。ホスト物理アドレス空間では、物理メモリ領域を超えた範囲に仮メモリ領域を割り当てることはできないため、この例のようにフラグメント化している場合、仮メモリ領域613がホスト物理アドレス空間内で多くの領域625、626、627、628、629に分散してしまうが、チップセットのアドレス変換機構106はエントリ数に制限がないので、エントリ数上限を超えたことによるゲストメモリの割り当て失敗が起こらない。
【0022】
ゲストに割り当てるメモリのサイズを、IOデバイス内のアドレス変換機構105のブロック単位ではなく、チップセット内のアドレス変換機構106のブロック単位で指定した場合のゲストメモリ割り当て例を図7に示す。IOデバイスのアドレス変換機構105は、IOデバイス内で定義されているブロックサイズを最小単位として扱う。この例では、仮アドレス領域710、711がIOデバイスで定義されているブロックサイズであり、ゲストメモリ領域700は、仮アドレス領域710のみでは領域が足りない。ゲストメモリ領域700全体をアドレス変換テーブルに登録するために、仮アドレス領域711も確保する。確保した仮アドレス領域710、711はゲストメモリ領域700よりも大きいので、仮アドレス領域711をホスト物理アドレスに割り当てる際は、確保するゲストメモリ領域と同じサイズとなるように、ホスト物理アドレス領域723を割り当てる。
【0023】
図8に、ハイパバイザがゲストメモリ領域を割り当てる処理の流れを示す。仮想計算機の起動に伴い、ゲストメモリの割り当て要求を受けることで処理が開始される。ステップ800では、ハイパバイザは、割り当てるゲストメモリのサイズと物理メモリの空き領域を比較する。空き領域の方が小さい場合は、ステップ810に移り、物理メモリ不足エラーを出力して、メモリ割り当て処理を終了する。空き領域の方が大きい場合はステップ801に移る。
【0024】
仮アドレス空間へのゲストメモリの割り当ては、IOデバイスのブロックサイズ単位で行うが、ゲストメモリサイズはチップセットのブロックサイズ単位で指定されるため、ステップ801では、ゲストメモリサイズからIOデバイスにおけるブロック数を算出する。次に、ゲストメモリの割り当て先仮アドレスを決めるため、ステップ802では仮アドレスの空き領域を探し、発見した空き領域を空き領域リストに追加する。ステップ803では、割り当てるメモリサイズ以上の大きさの連続した空き領域を発見した場合は、そこで空き領域探索を終了してステップ804に移る。また、仮アドレス領域の最後まで探索終了した場合もステップ804に移る。割り当てるメモリサイズ以上の1つの連続した空き領域が見つかっておらず、仮アドレス領域の最後まで探索が完了していない限りは、ステップ802に戻り、次の空き領域を探す。
【0025】
ステップ804では、空き領域リストを参照して、ゲストメモリ領域の仮アドレス領域での分散を可能な限り抑えるように、割り当てる仮アドレス領域を決定する。ステップ805では、IOデバイス内アドレス変換テーブルの残りエントリで、ゲストメモリ領域を仮アドレス領域に割り当てることができるかをチェックする。残りエントリを全て使い切っても、ゲストメモリ領域を仮アドレス領域に割り当てられない場合はステップ811に移り、IOデバイス内アドレス変換テーブルエントリ不足エラーを出力して、メモリ割り当て処理を終了する。残りエントリで割り当て可能ならばステップ806に移り、仮アドレス割り当てリストに割り当て情報を追加する。ステップ807では、ゲストメモリ領域を割り当てる全ての仮アドレス領域について、IOデバイスのアドレス変換テーブルにエントリを追加する。
【0026】
次に、仮アドレス領域をホストメモリ領域に割り当てる。ステップ808では、ホスト物理アドレスの先頭から順に空き領域を探していき、空き領域が見つかれば、チップセットのアドレス変換テーブルにエントリを追加する。図7で示したように、仮アドレス領域をIOデバイスにおけるブロックサイズの整数倍とするために、仮アドレス領域がゲストメモリ領域よりも大きく確保されている場合がある。この場合、ホスト物理アドレスに割り当てるのは、ゲストメモリ領域として確保した分だけとする。ステップ809では、ホスト物理アドレスに割り当たっていない割り当て対象仮アドレス領域がある限り、ステップ808に戻って次の空き領域を探してエントリを追加していく。割り当て対象である全ての仮アドレス領域がホスト物理アドレスに割り当たると、ハイパバイザによるゲストメモリ領域の割り当て処理は完了となる。
【0027】
図9に、ゲストOSがIOデバイスにデータ転送を要求した場合の例を示す。この例では、仮想計算機1のゲスト物理アドレス領域920(0x000000から0x01FFFF)が、仮アドレス領域930(0x010000から0x02FFFF)に連続した1つの領域として割り当てられ、仮アドレス領域930(0x010000から0x02FFFF)が、ホスト物理アドレス領域940(0x000000から0x01FFFF)に連続した1つの領域として割り当てられている。仮想計算機2についても同様に、ゲスト物理アドレス領域921(0x000000から0x01FFFF)が、仮アドレス領域931(0x040000から0x05FFFF)に割り当てられ、仮アドレス領域931(0x040000から0x05FFFF)はホスト物理アドレス領域941(0x020000から0x03FFFF)に割り当てられている。IOデバイス内アドレス変換テーブル900にはゲスト物理アドレスと仮アドレスとを対応付けるエントリ901、902や、その他のエントリが格納されており、チップセット内アドレス変換テーブル910には仮アドレスとホスト物理アドレスとを対応付けるエントリ911、912や、その他のエントリが格納されている。
【0028】
仮想計算機1上のゲストOSがIOデバイスに、ゲスト物理アドレス0x000000への転送要求を出すと、IOデバイスはアドレス変換テーブル900より、要求元仮想計算機番号と要求アドレスから、当該アドレスが含まれるエントリ901を探し出す。エントリ901から、該ゲスト物理アドレス領域は、仮アドレス0x010000から割り当てられていると分かるので、要求された仮想計算機1のゲスト物理アドレス0x000000にエントリの仮アドレスを加算することで、目的の仮アドレス0x010000を得る。仮アドレス0x010000へのアクセスは、チップセットがアドレス変換テーブルから、エントリ911を参照してホスト物理アドレス0x000000を得ることで、物理メモリへのアクセスが可能となる。仮想計算機2上のゲストOSも同様にゲスト物理アドレス0x000000への転送要求をIOデバイスに出すと、IOデバイスのアドレス変換テーブルのエントリ902により仮アドレス0x040000を得て、チップセットのアドレス変換テーブルのエントリ912からホスト物理アドレス0x020000を得ることで物理メモリへのアクセスが可能となる。このように、複数の仮想計算機がIOデバイスに同じゲスト物理アドレスを指定しても、それぞれに割り当てられたユニークなホスト物理アドレスへのアクセスを行うことができる。
【符号の説明】
【0029】
100 物理計算機、101 物理IOデバイス、102 物理CPU、103 物理チップセット、104 物理メモリ、105 物理IOデバイス内のアドレス変換機構、106 物理チップセット内のアドレス変換機構、110 外部ストレージ、120 ハイパバイザ、121 仮アドレス管理部、130 仮想計算機、131 論理資源、132 論理CPU、133 ゲストメモリ、134 論理IO、135 ゲストOS

【特許請求の範囲】
【請求項1】
物理計算機上に、仮想計算機番号を識別してブロック単位のアドレス変換を行うIOデバイスと、前述のIOデバイスよりも細かなブロック単位でアドレス変換を行うチップセットを具備する仮想計算機システムにおいて、前述のIOデバイスがゲスト物理アドレスを仮アドレスに変換する機能を持ち、前述のチップセットが仮アドレスをホスト物理アドレスに変換する機能を持ち、複数のゲストOSから前述のIOデバイスを共用する手段を有することを特徴とするメモリ割り当て方法。
【請求項2】
請求項1のメモリ割り当て方法であって、前述の仮アドレスを管理する機能として、ハイパバイザが、仮アドレスの使用状況データと、ゲストメモリ領域の仮アドレスへの割り当てを登録する機能と、ゲストメモリ領域の仮アドレスへの割り当てを解除する機能を具備し、前述の仮想計算機システム中でユニークな仮アドレスに、ゲスト物理アドレスを対応付ける手段を有することを特徴とするメモリ割り当て方法。
【請求項3】
請求項2のメモリ割り当て方法であって、前述のIOデバイスに登録するアドレス変換範囲の最小単位よりも細かい単位で、ゲストメモリを割り当てる手段を有することを特徴とするメモリ割り当て方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate