(57)【要約】【課題】  アドレス変換機構を持ったＩＯデバイスを含む仮想計算機システムにおいて、ＩＯデバイスのハードウェア上の制限を回避し、柔軟なゲストメモリ割り当てを可能とする。【解決手段】  ＩＯデバイス内のアドレス変換機構とチップセット内のアドレス変換機構を併用し、ゲスト物理アドレスからホスト物理アドレスへの変換を行う際には、仮想的なアドレスである仮アドレスを経由する。仮アドレスでゲストメモリ領域の分散を抑え、ＩＯデバイス内のアドレス変換テーブルエントリを節約することで、フラグメント化によるゲストメモリ割り当て失敗を抑える。また、仮アドレスからホスト物理アドレスへの変換にチップセット内のアドレス変換機構を用いることで、仮想計算機に割り当てるメモリサイズを細かく指定できるようになる。【選択図】  図１
2012083868.tif 000002
【特許請求の範囲】
【請求項１】
物理計算機上に、仮想計算機番号を識別してブロック単位のアドレス変換を行うＩＯデバイスと、前述のＩＯデバイスよりも細かなブロック単位でアドレス変換を行うチップセットを具備する仮想計算機システムにおいて、前述のＩＯデバイスがゲスト物理アドレスを仮アドレスに変換する機能を持ち、前述のチップセットが仮アドレスをホスト物理アドレスに変換する機能を持ち、複数のゲストＯＳから前述のＩＯデバイスを共用する手段を有することを特徴とするメモリ割り当て方法。
【請求項２】
請求項１のメモリ割り当て方法であって、前述の仮アドレスを管理する機能として、ハイパバイザが、仮アドレスの使用状況データと、ゲストメモリ領域の仮アドレスへの割り当てを登録する機能と、ゲストメモリ領域の仮アドレスへの割り当てを解除する機能を具備し、前述の仮想計算機システム中でユニークな仮アドレスに、ゲスト物理アドレスを対応付ける手段を有することを特徴とするメモリ割り当て方法。
【請求項３】
請求項２のメモリ割り当て方法であって、前述のＩＯデバイスに登録するアドレス変換範囲の最小単位よりも細かい単位で、ゲストメモリを割り当てる手段を有することを特徴とするメモリ割り当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機システムにおける、仮想計算機へのメモリ割り当て方法に関する。
【背景技術】
【０００２】
通常のＯＳ(Operating System)は、物理計算機上で動作することを前提に作られているので、メモリは０番地から始まる連続した１つの領域として設計されている。しかし、仮想計算機システムでは、１台の物理計算機上に複数の仮想的な計算機（以下仮想計算機と略す）を定義し、各仮想計算機に物理メモリを分割して割り当てるので、仮想計算機に割り当てたメモリ領域（以下ゲストメモリ領域と略す）の開始アドレスは０番地とは限らない。また、ゲストメモリ領域を、１つの連続した領域として物理メモリ上に確保できるとも限らない。そのため、仮想計算機システムにおいては、０番地でないアドレスを０番地に見せかけ、複数の連続領域を１つの連続領域として見せかける仕組みが必要となる。
【０００３】
仮想計算機上で動作するＯＳ（以下ゲストＯＳと略す）がメモリアクセスを行う場合、ゲストメモリ領域の先頭を０番地とするアドレス（以下ゲスト物理アドレスと略す）でアクセスを行う。しかし、ゲスト物理アドレスは、物理計算機が持つ物理メモリ領域の先頭を０番地とするアドレス（以下ホスト物理アドレスと略す）とは異なるので、そのままではアクセスできない。そこで、ゲスト物理アドレスからホスト物理アドレスへの変換をハイパバイザが行うことで、ゲストＯＳがメモリにアクセスできるようになる。
【０００４】
ゲストＯＳからＩＯデバイスへのＤＭＡ(Direct Memory Access)要求はゲスト物理アドレスで指定される。ＤＭＡ転送では、ＩＯデバイスからメモリに直接データを転送するので、ＩＯデバイスは転送先としてホスト物理アドレスを指定しなければならない。ＩＯデバイスを複数の仮想計算機で共有する場合、複数のゲストＯＳからの要求をホスト物理アドレスに変換する必要がある。ＩＯデバイスからメモリに直接転送するので、前述のハイパバイザによるアドレス変換は適用できない。そこで、仮想計算機毎のゲスト物理アドレスを、ホスト物理アドレスに変換する機能を持ったＩＯデバイスが出てきた（例えば特許文献１）。
【０００５】
前述のアドレス変換機構を持つＩＯデバイスは、アドレス変換用のテーブルをレジスタ内に持ち、テーブルエントリとして、アドレス変換対象とするメモリ領域の先頭ゲスト物理アドレスと、それに対応するホスト物理アドレス、変換対象領域のサイズが格納される。変換対象領域のサイズはブロック数として格納されており、ＩＯデバイス内部で定義されているブロックサイズと併せて、領域サイズが算出できる。仮想計算機に割り当てたメモリ領域が、物理メモリ上で複数の連続領域に分かれた場合、分散した数だけエントリが必要となる。
【０００６】
ＩＯデバイスがゲストＯＳからＤＭＡ転送要求を受けると、要求元の仮想計算機番号と、転送先として指定されたゲスト物理アドレスを元に、アドレス変換テーブルを参照し、転送先アドレスが存在するゲストメモリ領域の先頭のホスト物理アドレスを取得する。そして、要求されたゲスト物理アドレスにホスト物理アドレスを加算することで、ホスト物理アドレスが算出できるので、ＩＯデバイスからのメモリアクセスが可能となる。
【０００７】
前述のＩＯデバイス以外に、アドレス変換機能を持ったチップセットも存在する（例えば非特許文献１）。チップセット内のアドレス変換機能は、仮想計算機番号という概念がなく、１つのデバイスが１つのアドレス変換テーブルに括り付けられるので、ＩＯデバイス内のアドレス変換機能のように１つのデバイスを複数の仮想計算機から共有できない。しかし、チップセット内のアドレス変換機能は、アドレス変換テーブルをメモリ上に保持するので、ＩＯデバイスのようなレジスタ容量による制限が存在せず、より柔軟なテーブル定義が可能である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００６−８５４００号公報
【非特許文献】
【０００９】
【非特許文献１】Intel Virtualization Technology for Directed I/O Architecture Specification (http://download.intel.com/technology/computing/vptech/Intel(r)_VT_for_Direct_IO.pdf)
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ブロックサイズがＩＯデバイス内で固定なので、仮想計算機に割り当てる領域サイズがブロックサイズの整数倍でなければならず、より細かな単位でのメモリ割り当てができない。また、ＩＯデバイスがアドレス変換テーブルを保持するレジスタの容量により、エントリ数が制限されるため、仮想計算機に割り当てるメモリ領域を物理メモリ上に細かく分散させることができない。仮想計算機の起動と終了を繰り返すことによる物理メモリ領域のフラグメント化などで、１仮想計算機が使用できるエントリ数の上限を超えた場合、ゲストメモリ割り当てが失敗する。
【課題を解決するための手段】
【００１１】
ＩＯデバイス内のアドレス変換機構とチップセット内のアドレス変換機構による二重のアドレス変換を実施できるように、ハイパバイザがそれぞれの変換テーブルを作成する。ＩＯデバイス内のアドレス変換機構がゲストＯＳから指定されるゲスト物理アドレスを入力として仮想的なアドレス（以下仮アドレスを略す）を出力し、チップセット内のアドレス変換機構が仮アドレスを入力としてホスト物理アドレスを出力することで、ゲスト物理アドレスからホスト物理アドレスを得る。
【発明の効果】
【００１２】
仮アドレスによって示される仮想的なメモリ領域（以下仮メモリ領域と略す）は、物理メモリ領域よりも大きな領域として定義する。ゲストメモリ領域の合計サイズは物理メモリサイズ以下なので、仮メモリ領域が物理メモリよりも十分に大きければ、ゲストメモリ領域は仮メモリ領域上で分散せずに確保できる。この場合、ＩＯデバイスのアドレス変換テーブルは、１仮想計算機あたり１エントリの消費で済むので、最大仮想計算機数が最大エントリ数以下である限り、エントリ数上限を超えることによるゲストメモリ割り当ての失敗がなくなる。
【００１３】
チップセットのアドレス変換機構は、ＩＯデバイスのアドレス変換機構よりも細かな単位で対象領域を登録できるので、仮想計算機に対して割り当てるメモリも細かな単位で指定できる。物理メモリの割り当て率が高いと、物理メモリ領域のフラグメント化により、物理メモリの空き領域が細かく分散してしまうが、チップセットのアドレス変換機構はエントリ数による制限がないので、フラグメント化の進行によるゲストメモリ割り当ての失敗が起こらない。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例の全体構成を示すブロック図である。
【図２】上記実施例のＩＯデバイス内のアドレス変換機構が持つ変換テーブルのフォーマットである。
【図３】上記実施例のチップセット内のアドレス変換機構におけるアドレス変換の流れを示したものである。
【図４】上記実施例におけるアドレス変換の流れを示したものである。
【図５】上記実施例の仮アドレス管理部の構成を示す機能ブロック図である。
【図６】上記実施例において、物理メモリのフラグメント化が進行した場合のゲストメモリ領域割り当ての例である。
【図７】上記実施例において、チップセットのアドレス変換単位でゲストメモリ領域サイズを指定した場合の割り当て例である。
【図８】上記実施例の仮アドレス管理部のゲストメモリ割り当て登録処理部の処理フローを示すフローチャートである。
【図９】上記実施例における、アドレス変換の例である。
【発明を実施するための形態】
【００１５】
図１は、本発明における実施例の全体図を示している。物理計算機１００として、ＣＰＵ１０２、チップセット１０３、メモリ１０４、ＩＯデバイス１０１を持つ。ＩＯデバイス１０１はＩＯデバイス内のアドレス変換機構１０５を持ち、チップセット１０３はチップセット内のアドレス変換機構１０６を持つ。ＩＯデバイス１０１は、物理計算機１００の外部にあるストレージ１１０に接続されている。仮想計算機システムでは、複数の仮想計算機１３０を定義でき、各仮想計算機に論理ＣＰＵ１３２やゲストメモリ１３３、論理ＩＯデバイス１３４といった論理資源１３１を割り当て、その上でゲストＯＳ１３５が動作する。物理計算機１００上で動作するハイパバイザ１２０は、後述する仮アドレスを管理するための仮アドレス管理部１２１を持つ。
【００１６】
ＩＯデバイス内のアドレス変換機構１０５は、ＩＯデバイス１０１内のレジスタに保持されるアドレス変換テーブルを参照して、アドレス変換を実施する。図２にアドレス変換テーブルエントリの内容を示す。各エントリは、該エントリがどの仮想計算機のエントリかを示す仮想計算機番号２００と、変換対象とするゲストメモリ領域の先頭となるゲスト物理アドレス２０１と、ゲストメモリ領域を割り当てる仮アドレス領域の先頭となる仮アドレス２０２と、対象領域のブロック数２０３で構成される。
【００１７】
次に、チップセット内のアドレス変換機構１０６におけるアドレス変換の流れを図３に示す。チップセットのアドレス変換機構は、ＩＯデバイスからＤＭＡ転送先アドレスとして指定されるゲスト物理アドレス３００を、複数の領域３１０、３１１、３１２、３１３に区切り、それぞれでアドレス変換を実施する。チップセットのアドレス変換機構は、アドレス変換テーブルをメモリ上に保持しているため、ＩＯデバイスのようなレジスタ容量によるエントリ数の制限がない。また、キャッシュ機構３２０、３２１、３２２が存在し、キャッシュミス時にのみメモリからの読み出しが発生する。
【００１８】
チップセットのアドレス変換機構では、要求元のデバイス毎にアドレス変換テーブルのベースアドレス（以下ベースアドレスと略す）が決まっており、全デバイス分のベースアドレスが、ベースアドレス格納領域３４０に格納されている。要求元デバイスのベースアドレスエントリ３３０は、アドレス変換テーブル３４１の先頭アドレスを示しており、そこにアドレス変換対象領域３１０を足すことで、アドレス変換テーブルエントリ３３１のアドレスを得る。アドレス変換テーブルエントリ３３１は、アドレス変換テーブル３４２の先頭アドレスを示しており、そこにアドレス変換対象領域３１１と足すことで、アドレス変換テーブルエントリ３３２を得る。アドレス変換テーブルエントリ３３２は、アドレス変換テーブル３４３の先頭アドレスを示しており、そこにアドレス変換対象領域３１２と足すことで、アドレス変換テーブルエントリ３３３を得る。アドレス変換テーブルエントリ３３３は、メモリブロック３４４の先頭アドレスを示しており、そこにアドレス変換対象領域３１３と足すことで、ホスト物理アドレス３３４を得る。以上で、チップセットによるアドレス変換が完了する。
【００１９】
ゲストＯＳの転送要求から、物理メモリアクセスまでのアドレス変換の流れを図４に示す。ゲストＯＳ１３５がＩＯデバイスに転送要求を出す際には、転送先アドレスをゲスト物理アドレス４００で指定する。ＩＯデバイス１０１のアドレス変換テーブルはエントリ数に限りがあるので、物理メモリ領域よりも大きい仮想的なアドレス空間（以下仮アドレス空間と略す）を定義する。ＩＯデバイス１０１は、ＩＯデバイス内のアドレス変換機構１０５によって、ゲストＯＳ１３５から指定されたゲスト物理アドレス４００を、仮アドレス空間内の仮アドレス４０１に変換する。仮アドレス４０１は、チップセット１０３で、チップセット内のアドレス変換機構１０６によって、ホスト物理アドレス４０２に変換され、物理メモリ１０４にアクセス可能となる。
【００２０】
図５に、仮アドレス管理部１２１の構成を示す。仮アドレス管理部１２１は、ゲストメモリ割り当て登録処理部５０１と、ゲストメモリ割り当て解除処理部５０２、仮アドレス割り当てリスト５００から成る。仮アドレス割り当てリスト５００は、ゲストメモリ領域の仮アドレスへの割り当て状況を保持している。ゲストメモリ割り当て登録処理部５０１と、ゲストメモリ割り当て解除処理部５０２は、仮アドレス割り当てリスト５００を参照して、ゲストメモリ領域を割り当てる仮アドレスを決定する。
【００２１】
ゲストメモリ領域の割り当て例を図６に示す。仮想計算機１〜３のゲストメモリ領域６００、６０１、６０２は、それぞれが仮アドレス空間に１つの連続した領域６１０、６１１、６１２として確保されているが、ホスト物理アドレス空間では、複数の領域６２０、６２１、６２２、６２３、６２４に分散して配置されている。ここで新しく仮想計算機４にゲストメモリ領域６０３を割り当てる。仮アドレス空間の仮想計算機１と仮想計算機２の間の空き領域６１４や、仮想計算機２と仮想計算機３の間の空き領域６１５に、仮想計算機４のゲストメモリ領域６０３を割り当てようとすると、割り当てようとしているメモリ領域の方が大きいので、１つの空き領域に収まらず、複数の領域に分散してしまう。ここで、ホスト物理アドレスとして利用可能な範囲は物理メモリサイズ分だが、仮アドレスには物理メモリ量による制限がないので、ホスト物理アドレスとして利用可能な範囲を超えた領域に仮想計算機４のゲストメモリ領域６１３を割り当てることで、ゲストメモリ領域６０３を１つの連続した領域として仮アドレス空間内に確保できる。次に、仮アドレス空間内に確保した仮想計算機４のゲストメモリ領域６１３を、ホスト物理アドレス空間に割り当てていく。ホスト物理アドレス空間では、物理メモリ領域を超えた範囲に仮メモリ領域を割り当てることはできないため、この例のようにフラグメント化している場合、仮メモリ領域６１３がホスト物理アドレス空間内で多くの領域６２５、６２６、６２７、６２８、６２９に分散してしまうが、チップセットのアドレス変換機構１０６はエントリ数に制限がないので、エントリ数上限を超えたことによるゲストメモリの割り当て失敗が起こらない。
【００２２】
ゲストに割り当てるメモリのサイズを、ＩＯデバイス内のアドレス変換機構１０５のブロック単位ではなく、チップセット内のアドレス変換機構１０６のブロック単位で指定した場合のゲストメモリ割り当て例を図７に示す。ＩＯデバイスのアドレス変換機構１０５は、ＩＯデバイス内で定義されているブロックサイズを最小単位として扱う。この例では、仮アドレス領域７１０、７１１がＩＯデバイスで定義されているブロックサイズであり、ゲストメモリ領域７００は、仮アドレス領域７１０のみでは領域が足りない。ゲストメモリ領域７００全体をアドレス変換テーブルに登録するために、仮アドレス領域７１１も確保する。確保した仮アドレス領域７１０、７１１はゲストメモリ領域７００よりも大きいので、仮アドレス領域７１１をホスト物理アドレスに割り当てる際は、確保するゲストメモリ領域と同じサイズとなるように、ホスト物理アドレス領域７２３を割り当てる。
【００２３】
図８に、ハイパバイザがゲストメモリ領域を割り当てる処理の流れを示す。仮想計算機の起動に伴い、ゲストメモリの割り当て要求を受けることで処理が開始される。ステップ８００では、ハイパバイザは、割り当てるゲストメモリのサイズと物理メモリの空き領域を比較する。空き領域の方が小さい場合は、ステップ８１０に移り、物理メモリ不足エラーを出力して、メモリ割り当て処理を終了する。空き領域の方が大きい場合はステップ８０１に移る。
【００２４】
仮アドレス空間へのゲストメモリの割り当ては、ＩＯデバイスのブロックサイズ単位で行うが、ゲストメモリサイズはチップセットのブロックサイズ単位で指定されるため、ステップ８０１では、ゲストメモリサイズからＩＯデバイスにおけるブロック数を算出する。次に、ゲストメモリの割り当て先仮アドレスを決めるため、ステップ８０２では仮アドレスの空き領域を探し、発見した空き領域を空き領域リストに追加する。ステップ８０３では、割り当てるメモリサイズ以上の大きさの連続した空き領域を発見した場合は、そこで空き領域探索を終了してステップ８０４に移る。また、仮アドレス領域の最後まで探索終了した場合もステップ８０４に移る。割り当てるメモリサイズ以上の１つの連続した空き領域が見つかっておらず、仮アドレス領域の最後まで探索が完了していない限りは、ステップ８０２に戻り、次の空き領域を探す。
【００２５】
ステップ８０４では、空き領域リストを参照して、ゲストメモリ領域の仮アドレス領域での分散を可能な限り抑えるように、割り当てる仮アドレス領域を決定する。ステップ８０５では、ＩＯデバイス内アドレス変換テーブルの残りエントリで、ゲストメモリ領域を仮アドレス領域に割り当てることができるかをチェックする。残りエントリを全て使い切っても、ゲストメモリ領域を仮アドレス領域に割り当てられない場合はステップ８１１に移り、ＩＯデバイス内アドレス変換テーブルエントリ不足エラーを出力して、メモリ割り当て処理を終了する。残りエントリで割り当て可能ならばステップ８０６に移り、仮アドレス割り当てリストに割り当て情報を追加する。ステップ８０７では、ゲストメモリ領域を割り当てる全ての仮アドレス領域について、ＩＯデバイスのアドレス変換テーブルにエントリを追加する。
【００２６】
次に、仮アドレス領域をホストメモリ領域に割り当てる。ステップ８０８では、ホスト物理アドレスの先頭から順に空き領域を探していき、空き領域が見つかれば、チップセットのアドレス変換テーブルにエントリを追加する。図７で示したように、仮アドレス領域をＩＯデバイスにおけるブロックサイズの整数倍とするために、仮アドレス領域がゲストメモリ領域よりも大きく確保されている場合がある。この場合、ホスト物理アドレスに割り当てるのは、ゲストメモリ領域として確保した分だけとする。ステップ８０９では、ホスト物理アドレスに割り当たっていない割り当て対象仮アドレス領域がある限り、ステップ８０８に戻って次の空き領域を探してエントリを追加していく。割り当て対象である全ての仮アドレス領域がホスト物理アドレスに割り当たると、ハイパバイザによるゲストメモリ領域の割り当て処理は完了となる。
【００２７】
図９に、ゲストＯＳがＩＯデバイスにデータ転送を要求した場合の例を示す。この例では、仮想計算機１のゲスト物理アドレス領域９２０（0x000000から0x01FFFF）が、仮アドレス領域９３０（0x010000から0x02FFFF）に連続した1つの領域として割り当てられ、仮アドレス領域９３０（0x010000から0x02FFFF）が、ホスト物理アドレス領域９４０（0x000000から0x01FFFF）に連続した１つの領域として割り当てられている。仮想計算機２についても同様に、ゲスト物理アドレス領域９２１（0x000000から0x01FFFF）が、仮アドレス領域９３１（0x040000から0x05FFFF）に割り当てられ、仮アドレス領域９３１（0x040000から0x05FFFF）はホスト物理アドレス領域９４１（0x020000から0x03FFFF）に割り当てられている。ＩＯデバイス内アドレス変換テーブル９００にはゲスト物理アドレスと仮アドレスとを対応付けるエントリ９０１、９０２や、その他のエントリが格納されており、チップセット内アドレス変換テーブル９１０には仮アドレスとホスト物理アドレスとを対応付けるエントリ９１１、９１２や、その他のエントリが格納されている。
【００２８】
仮想計算機１上のゲストＯＳがＩＯデバイスに、ゲスト物理アドレス0x000000への転送要求を出すと、ＩＯデバイスはアドレス変換テーブル９００より、要求元仮想計算機番号と要求アドレスから、当該アドレスが含まれるエントリ９０１を探し出す。エントリ９０１から、該ゲスト物理アドレス領域は、仮アドレス0x010000から割り当てられていると分かるので、要求された仮想計算機１のゲスト物理アドレス0x000000にエントリの仮アドレスを加算することで、目的の仮アドレス0x010000を得る。仮アドレス0x010000へのアクセスは、チップセットがアドレス変換テーブルから、エントリ９１１を参照してホスト物理アドレス0x000000を得ることで、物理メモリへのアクセスが可能となる。仮想計算機２上のゲストＯＳも同様にゲスト物理アドレス0x000000への転送要求をＩＯデバイスに出すと、ＩＯデバイスのアドレス変換テーブルのエントリ９０２により仮アドレス0x040000を得て、チップセットのアドレス変換テーブルのエントリ９１２からホスト物理アドレス0x020000を得ることで物理メモリへのアクセスが可能となる。このように、複数の仮想計算機がＩＯデバイスに同じゲスト物理アドレスを指定しても、それぞれに割り当てられたユニークなホスト物理アドレスへのアクセスを行うことができる。
【符号の説明】
【００２９】
１００  物理計算機、１０１  物理ＩＯデバイス、１０２  物理ＣＰＵ、１０３  物理チップセット、１０４  物理メモリ、１０５  物理ＩＯデバイス内のアドレス変換機構、１０６  物理チップセット内のアドレス変換機構、１１０  外部ストレージ、１２０  ハイパバイザ、１２１  仮アドレス管理部、１３０  仮想計算機、１３１  論理資源、１３２  論理ＣＰＵ、１３３  ゲストメモリ、１３４  論理ＩＯ、１３５  ゲストＯＳ
【図１】
2012083868.tif 000003
【図２】
2012083868.tif 000004
【図３】
2012083868.tif 000005
【図４】
2012083868.tif 000006
【図５】
2012083868.tif 000007
【図６】
2012083868.tif 000008
【図７】
2012083868.tif 000009
【図８】
2012083868.tif 000010
【図９】
2012083868.tif 000011