説明

計算機仮想化装置、そのプログラム、及びその方法

【課題】
計算機の仮想化において、性能低下の少ないTLB仮想化方式を実現しようとすると、メモリ空間識別子(以下、RID)の仮想化が必要となるが、RIDの一部をゲストIDを現す領域にするとLPARの数に制限があり、運用上問題となる。
【解決手段】
ハイパーバイザ13は、動的に項目を登録・管理するゲストRID-物理RIDマッピングテーブル137を用意し、このゲストRID-物理RIDマッピングテーブル137を用いてRID変換を行う。このマッピングテーブル137を用いることにより、変換されるRIDに各ゲストに対応するLPAR11をあらわす特定の情報領域を設ける必要がないため、LPAR11の数に関する制限がなくなり、運用上の問題を無くすことができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計算機仮想化技術における、TLB仮想化技術に関する。
【背景技術】
【0002】
近年、パーソナルコンピュータ(以下、PCと呼ぶ)アーキテクチャをベースとした計算機上で、仮想的な計算機を同時に複数稼動させる計算機仮想化の技術が注目を浴びており、実稼動する計算機の台数の削減、ハードウェアの隠蔽による運用・構成変更の容易化などのメリットが市場に浸透しつつある。
【0003】
これまでにもメインフレームなどを中心に計算機の仮想化に関する技術は数多く開発されてきたが、PCのアーキテクチャで、高性能でなおかつ制限のない柔軟な計算機仮想化技術を提供するためには、中央処理部(Central Processing Unit、以下、CPUと呼ぶ)などのハードウェアのみならず、制御を行うソフトウェアにも多くの工夫が必要となる。
【0004】
効率的に実装しなければならない仮想化技術の1つにトランスレーション・ルックアサイド・バッファ(Translation Look1aside Buffer 、以下、TLBと呼ぶ)仮想化がある。
【0005】
背景技術を説明する前提となるCPUのTLBについて図3を参照して説明する。CPUではメモリへのアクセスを行う際にメモリアドレスを使用してメモリ上の位置を特定する。ページング機構を備えるCPUでは、プログラムは仮想アドレスと呼ばれる、仮想的なアドレス体系(以下、メモリ空間と呼ぶ)上のアドレスでメモリへのアクセスを行う。CPUはこの仮想アドレスの値を、実際のメモリ上の位置に変換してからアクセスを行う。通常、本変換を高速、かつ自動的に行うために、CPU内部にはアドレス変換対を格納するためのキャッシュ用のメモリが備えられている。
【0006】
また、アーキテクチャによっては複数のメモリ空間の変換対を同時に1つのTLBに格納するために、Region Identifier(以下、RIDと呼ぶ)などと呼ばれるメモリ空間の識別子を用いることもある。このようなアーキテクチャの例としてはインテル社のItanium(登録商標)アーキテクチャなどがある。本発明は、このようなTLBとRIDを用いるアーキテクチャを対象とする。
【0007】
このRIDは計算機上のOperating System(以下、OSと呼ぶ)が管理するメモリ空間を一意に識別するための番号である。通常は、メモリ空間ごとに対応するページテーブル(Page Table、PT)が割り当てられる。ページテーブル(PT)はOSが管理する仮想アドレスと物理アドレスの対応表であり、OSが必要に応じてページテーブル(PT)の内容を参照してTLBに登録する。
【0008】
TLBの構成例を図3の下部に示す。物理TLBはRID301、仮想アドレス302、物理アドレス303の情報で構成される。CPU上のプログラムは、RID301と仮想アドレス302を組み合わせてメモリ上の物理アドレス303を指定する。
【0009】
CPUは指定されたRIDと仮想アドレスがTLBエントリ中のRID301と仮想アドレス302と等しいエントリを検索し、対応付けられた物理アドレス303が指し示すメモリにアクセスを行う。実際には、仮想アドレス302、および物理アドレス303は個々のアドレス単位ではなくページと呼ばれる一定の大きさの区間ごとに変換を管理され、通常、TLBはページテーブルのキャッシュとして動作する。本明細書において、ページと個々のアドレスを区別する大きな理由はないため、アドレスと呼ぶ場合、アドレスとページ番号の総称であるとする。
【0010】
TLBエントリ中に指定されたRIDと仮想アドレスに対応するエントリがない場合、CPUはプログラムに対して例外信号を通知する。通常はOSが例外を検知して、メモリ上のページテーブルの参照を参照して、例外を起こす要因となったRIDと仮想アドレス、および、前記仮想アドレスに対応する物理アドレスの組をTLBエントリに登録する。
【0011】
プログラムがCPUにRIDを指定する方法として、Region Register(以下、RRと呼ぶ)を用いるアーキテクチャがある。RRは現在のプログラムが使用するメモリ空間のRIDを格納するための専用レジスタであり、CPU内に用意される。RRの例を図3の上部に示す。RRはレジスタの特定ビット列にRID305を示す領域を持つ。
【0012】
複数のRRを持つCPUでは、仮想アドレス306の上位ビットがRRのインデックス番号となっていることがある。この方式では、RR指定部分で指定されたRRのRIDと仮想アドレス部分が、それぞれ、TLBエントリのRID301、仮想アドレス302と比較器307で比較され、一致したエントリの物理アドレス303が使用される。
【0013】
メモリ空間はRIDによって一意に識別される。メモリ空間ごとに異なるページテーブル(PT)が使用されて異なるアドレス変換が登録される可能性がある。すなわち、同じ仮想アドレスを用いても、RIDが異なる場合は異なる物理アドレスにアクセスすることがある。さらに、RIDとページテーブルの対応付けはOSが動的に管理するものであるため、異なる計算機、あるいはOSでは、同じRIDと同じ仮想アドレスを指定しても異なる物理アドレスに変換されることがある。
【0014】
計算機を仮想化する場合、すなわち、複数のOSが同一のCPU上で走行する場合、同一のTLB(TLBキャッシュ)を共有することになる。それぞれのOSごとに異なるページテーブル(PT)を管理し、それぞれが独自のRIDに対応付けてTLBに登録する。OSごとに対応付けが異なることがあるので、他のOSが登録したTLBエントリが使用されると、OSが意図しない変換を行ってしまう。このような状況を回避するために、複数のOSが単一のCPU上で並列して走行する環境ではTLBリソースの調停処理が必須となる。
【0015】
前記のようなアーキテクチャでのTLBリソースの調停方法として、非特許文献1では、RIDパーティショニングと呼ぶ手法を用いている。この方法では、RIDを、仮想計算機を識別するビット範囲と、仮想計算機内のメモリ空間を識別するビット範囲に分割する。OSは後半のメモリ空間を識別するビット範囲のみを変更することができる。
【0016】
【非特許文献1】ISSN 1535−864X, Intel(登録商標) Virtualization Technology Volume 10 Issue 03
【発明の開示】
【発明が解決しようとする課題】
【0017】
非特許文献1の方法では、RID内に仮想計算機を識別するビット範囲があるので異なる仮想計算機間で同一のRIDを使用することがない。そのため、OSが切り替わった後に、切り替え前のOSが登録したTLBエントリを誤って参照することがなく、OSが意図しない変換を行うことがない。この方法は、ゲストOSが切り替わる際に、処理時間の多い、TLBエントリのクリアの処理を実行する必要がない点が優れている。
【0018】
しかしながら、仮想計算機を識別するビット数、およびメモリ空間を識別するビット数のそれぞれに制限が生じてしまう。すなわち、計算機上で同時に稼動できる仮想計算機の数、および、メモリ空間の数に制限が生じてしまう。とりわけ、複数の計算機を仮想化してひとつの計算機に集約する手法において、前者の同時稼動可能な計算機の数に制限が生じてしまうことが大きな課題となる。
【0019】
本発明では、前記の問題を鑑み、性能を低下させないという制約の中で、同時稼動可能な計算機数の制限をなくすことが可能な計算機仮想化装置を提供することを目的とする。
【課題を解決するための手段】
【0020】
本発明では、RIDパーティショニングのように、仮想計算機上のRIDと実際の計算機上のRIDを異なるものとして、両者の間での変換を管理する機構を備える。しかし、RIDパーティショニングのように特定の変換式を使用した変換方式を用いるのではなく、実行時に動的に生成・管理する変換テーブル情報を備え、変換テーブルを参照してRIDを変換することを特徴とする。
【0021】
すなわち、本発明においては、上記目的を達成するため、同時に複数のOSを動作させる計算機仮想化機構であって、仮想化された計算機上のメモリ空間の識別子(ゲストRID)と、実計算機で用いられる識別子(物理RID)の対応付けを管理するマッピングテーブルと、RIDを代入するCPUレジスタのエミュレーション処理を契機に、マッピングテーブルを参照してRIDを変換するRID変換部と、マッピングテーブルに対応付けが存在しない場合に、新規に対応付けを作成してマッピングテーブルに追加するRIDテーブル更新部とを備える計算機仮想化機構を提供する。
【発明の効果】
【0022】
RID変換用のマッピングテーブル内で実計算機のRID(物理RID)を重複して複数の仮想計算機に割り当てないように制御するため、複数の仮想計算機が重複して同一のRID(物理RID)を使用することはなく、OSが意図しない変換を行うことはない。また、RIDの値に仮想計算機の識別子などを入れないため、RIDに制限が加わることもない。
【発明を実施するための最良の形態】
【0023】
以下、本発明の最良の形態を図面を用いて説明する。
【実施例1】
【0024】
本発明の第一の実施例である計算機の構成例を図1に示す。
【0025】
本実施例は、1つの実際の計算機(実計算機)10上で仮想的に1つ以上の仮想的な計算機を動作させる計算機仮想化機構を対象とする。計算機上で複数の仮想計算機を動作させる場合、複数のOSが動作することとなる。各々のOSは計算機のリソースをすべて占有していると仮定して動作するが、CPUのレジスタ、TLB、あるいはその他の入出力(以下、IOと略す)のデバイスなどのさまざまなリソースを操作する場合、複数のOSが混在して動作し、前記のリソースを操作すると意図しない状態が発生してしまい誤動作してしまう。誤動作を回避するために、前記のリソースに対する処理を調停する計算機仮想化機構がハイパーバイザ13である。
【0026】
なお、以降では、仮想計算機からアクセスしているように見えるリソースに対して「ゲスト」という接頭辞をつける。実際の計算機が持つリソースに対しては「物理」という接頭辞をつけて呼び区別する。ゲストから見えるリソースを実際のリソースに変換するために必要な構造には「シャドウ」という接頭辞をつける。
【0027】
たとえば、RIDや物理アドレスなどについて、ゲストOSが使用する値をゲストRID、ゲスト物理アドレスと呼ぶ。実際の計算機で使用する値を物理RID、物理アドレスと呼ぶ。(物理アドレスのみは重複を避けるために物理を一度だけ使用する)
ハイパーバイザ13は物理CPU12上で動作するプログラムとして構成される。ハイパーバイザ13が動作する物理CPU12を含む実際の計算機の構成例を図2に示す。計算機10は1つ以上の物理CPU12、メモリ204を備える。プログラムはメモリ204上に記憶され、物理CPU12によって実行される。計算機はIO制御部209、Network Interface Card(以下、NICと呼ぶ)208、Small Computer System Interface/Fibre Channel(以下、SCSI/FCと呼ぶ)207などのIOデバイスをもち、外部記憶装置210、キーボード・ディスプレイ211などと接続している。なお、203は所謂ノースブリッジ、205はIOブリッジ、206は内部バスを示す。
【0028】
ハイパーバイザ13は後述する物理CPU12のCPU仮想化部121の初期化、Basic Input/Output System (以下、BIOSと呼ぶ)などに代表されるファームウェアのエミュレーションによる仮想計算機のプログラムのロードおよび実行開始、複数の仮想計算機上のプログラムの実行スケジューリング、および、CPU仮想化部121がリソースの調停を必要としたときの処理などを実行する。
【0029】
仮想的な計算機はLogical Partitioning(以下、LPARと呼ぶ)11と呼ばれる単位で扱われる。LPAR11は仮想的な計算機ごとに用意される構成情報で構成される。その構成情報に基づいて物理CPU12が制御を行い、プログラムを実行する。前記構成情報の中で、CPUに関する構成情報をシャドウCPU112と呼ぶ。並列して複数のOS111が動作する。以降では、LPAR11の構成情報に従ってCPUがプログラムを実行することを、LPAR上で動作すると呼ぶ。また、LPAR上で動作するOS111をゲストOSと呼ぶ。ゲストOS111中の115はゲストページテーブル(PT)を示す。
【0030】
LPAR11上で動作するプログラムが、調停の必要な計算機リソースにアクセスする命令を実行した場合、物理CPU12の、プログラムとのインタフェースであるCPU仮想化部121がその命令を検出し、LPAR11上で動作するプログラムの処理を中断して、ハイパーバイザ13の仮想化エミュレーションプログラム131を実行する。仮想化エミュレーションプログラム131はリソースの調停処理を実行し、その後にLPAR11再開命令を発行する。物理CPU12は中断したLPAR11のプログラムの処理を再開する。
【0031】
ハイパーバイザ13はいくつものプログラム機能で構成される。本実施例では、CPU処理、および、本実施例が対象とするTLBのRIDとRRの処理に関する部分のみを示す。その他の処理については非特許文献1にあるような構成で実現可能であり、詳細についてはここでは省略する。
【0032】
RIDとRRの処理に関する構成として、ハイパーバイザ13は仮想化エミュレーションプログラム131とRID管理部130を備える。仮想化エミュレーションプログラムは命令エミュレーション部132、および、TLBエミュレーション部133で構成される。命令エミュレーション部132は、LPAR11上のプログラムが調停の必要な命令を実行した場合に、その調停処理を実行するプログラムである。
【0033】
TLBエミュレーション部133は、LPAR11上のゲストOS111が計算機の物理TLB122および物理RR123を操作しようとした場合に、その処理をエミュレートし、対応するLPAR11のシャドウCPU112、及び、物理TLB122、物理RR123を操作するプログラムである。
【0034】
CPUに関する構成情報であるシャドウCPU112は、図2のメモリ204内に保持される。図1に示す本実施例の構成では、シャドウCPU112の情報の中でTLBに関連する情報のみを示す。シャドウCPU112のTLB関連の構成情報は、シャドウTLB113とシャドウRR114、更には、ゲスト物理アドレス−物理アドレスマッピングテーブルで構成される。なお、ゲスト物理アドレス−物理アドレスマッピングテーブルはTLB仮想化における公知の技術であるのでここでは図示、説明を省略する。
【0035】
シャドウTLB113、およびシャドウRR114はそれぞれ物理TLB122、物理RR123と同様の項目を持ち、そのフォーマットは物理CPU12によって定められている。シャドウTLB113は物理CPU12からソフトウェア処理を経ることなく直接参照することができる。ハイパーバイザ13はシャドウTLB113に適切なゲスト仮想アドレスから物理アドレスへのアドレス変換を登録しておくことにより、コスト(処理時間)のかかるアドレス変換処理を高速に行うことができるようになる。
【0036】
上記の理由により、本実施例において、前記シャドウTLB113には物理RID、ゲスト仮想アドレス、物理アドレスの組で構成される変換対が登録される。
【0037】
TLBエミュレーション部133は、複数のLPAR11のTLB情報を効率的に調停するために、RID管理部130を用いて制御を行う。RID管理部130はRID変換部135、RIDテーブル更新部136、ゲストRID−物理RIDマッピングテーブル137で構成される。ゲストRID−物理RIDマッピングテーブル137はLPAR上のプログラムが使用する仮想計算機上のゲストRIDと、実際の物理CPUで使用する物理RIDの対応付けを示す一覧であり、本実施例が示す手順によって、RID管理部130がエントリの追加、削除を行う。
【0038】
本実施例における、ゲストRID−物理RIDマッピングテーブル137の一構成例を図4に示す。ゲストRID−物理RIDマッピングテーブル137はゲストID401、物理RID402、ゲストRID403、および、エントリ使用中フラグ404の組で構成される。
【0039】
ゲストID401はLPARを一意に示す識別子である。ゲストRID403、物理RID402はそれぞれ、LPAR上で動作するプログラムが使用する仮想計算機上のRIDと、実際の物理CPUに指定するRIDを示す。ゲストRID403で示されるLPAR11上で動作するプログラムからRRに対するRID設定命令が実行された場合、RID管理部130は前記テーブル137の組で対応付けられる物理RIDを物理RR123に設定する。手順の詳細は後述する。
【0040】
エントリ使用中フラグ404は、エントリに含まれる物理RID402が実際の物理RRにセットされているかどうかを示す情報である。簡単な実装例としては、実際の物理RRにセットされている場合に1となるビット情報などがある。
【0041】
実際の物理RRにセットされているエントリを示すその他の実装例としては、実際に使用されているエントリのみを保持するポインタのリストなどを作成する方法を用いてもよい。前記のリストの方式では、実際に使用されている項目のみを高速にたどることができる。本実施例ではいずれの実装方式も用いることができるが、簡単化のため、前者で示したビット情報を用いて説明を行なう。
【0042】
RID管理部130は、異なる複数のLPAR11が同一のRIDを使用してきた場合に、後述する手段によって、それぞれのLPARごとに異なる物理RIDを選択して使用する。これにより、複数のLPARが同時期に同一のRIDを使用したとしても、物理CPU12ではそれぞれを別のRIDとして区別でき、OSが意図したとおりの正常な動作を行うことができる。
【0043】
ゲストRID−物理RIDマッピングテーブル137のエントリは、物理RID、ゲストID、および、ゲストRIDをキー項目として該当するエントリを検索することがある。このような検索を高速に行うために、ハッシュテーブル、N分木などの検索を高速化するアルゴリズムとデータ構造を自由に追加してもよい。ただし、本実施例では簡単化のため、これらの高速化については説明しない。
【0044】
また、シャドウTLB113はCPUによりフォーマットが決まっているため、このような各種の高速化を行うにあたり制限が加わる。本方式では、独自に追加したゲストRID−物理RIDマッピングテーブル137をデータ構造として用いるため、前記のような各種の高速化を自由に行うことができる。
【0045】
以降では、ハイパーバイザ13内のプログラム各々の動作を説明し、その後に全体の動作と発明による効果を説明する。
【0046】
本実施例における仮想化エミュレーションプログラム131およびTLBエミュレーション部133の動作を図6に示すフローチャートを用いて説明する。
【0047】
物理CPU12は、プログラムが調停処理が必要な命令を実行すると仮想化例外を発生する(ステップ601)。このとき、物理CPU12は仮想化を発生させた要因に関する情報をメモリの所定位置に書き込むなどの方法で、要因を記録する。仮想化エミュレーションプログラム131は仮想化例外が起こった場合に処理を開始する。
【0048】
仮想化エミュレーションプログラム131はCPUの特定のメモリアドレスに配置された構成情報を参照して、仮想化例外を起こしたプログラムが動作していたLPARのゲストIDを取得する(ステップ602)。
【0049】
仮想化例外が発生した要因を調査して、要因に対応した処理を実行する。仮想化エミュレーションプログラム131は、物理CPU12がゲストRRへの書き込み命令を検知して処理を中断したかどうかを検査し、該当する場合はTLBエミュレーション部133を実行する。(ステップ603)
TLBエミュレーション部133は、仮想化例外を発生させた命令、命令オペランド、およびレジスタを参照して、ゲストRRに書き込まれようとしていたゲストRIDの値を取得する。(ステップ604)
TLBエミュレーション部はステップ602で取得したゲストIDとステップ604で取得したゲストRIDの値を入力値としてRID変換部135を実行し、その結果として物理RID値(以下、物理RID(A)と呼ぶ)を得る。(ステップ605)
TLBエミュレーション部は現在物理RRに設定されている物理RID値(以下、物理RID(B)と呼ぶ)を取得し(ステップ606)、ゲストRID−物理RIDマッピングテーブル中において、物理RID(B)値を含むエントリのエントリ使用中フラグを0にする(ステップ607)。
【0050】
TLBエミュレーション部133は、物理RID(A)値を物理RR123にセットする(ステップ608)。
【0051】
ゲストRID−物理RIDマッピングテーブル中において、物理RID(A)値を含むエントリのエントリ使用中フラグを1にする(ステップ609)。
【0052】
次に、本実施例におけるRID変換部135の動作を図7に示すフローチャートを用いて説明する。
【0053】
RID変換部135は、仮想化例外を発生させたLPARのゲストIDおよびプログラムの入力情報として図6のステップ604で取得されたゲストRIDを与えられて起動される。RID変換部135はゲストRID−物理RIDマッピングテーブル137を参照して、ゲストID401とゲストRID403がそれぞれプログラムの入力として与えられたゲストIDとゲストRIDに等しい物理RIDのエントリを検索する。(ステップ701)
ステップ701において該当するエントリを発見することができなかった場合、ステップ703を実行する。該当するエントリを発見した場合はエントリに含まれる物理RIDの値をプログラムの実行結果として返す。(ステップ702)
該当するエントリが発見できなかった場合、RID変換部135は、RIDテーブル更新部136にプログラムの入力として与えられたゲストIDおよびゲストRIDを入力情報として与えて実行し、その結果としてゲストRID−物理RIDマッピングテーブルのいずれのエントリの物理RID402にも含まれない物理RID値を得て、この物理RID値をプログラムの実行結果として返す(ステップ703)。
【0054】
次に、RIDテーブル更新部136の動作を図8に示すフローチャートを用いて説明する。
【0055】
RIDテーブル更新部136はゲストRID−物理RIDマッピングテーブル137を参照して、テーブル137内のいずれのエントリの物理RID402にも含まれない物理RID(以下、未使用の物理RIDと呼ぶ)を検索する(ステップ801)。
【0056】
未使用の物理RIDを検索する方式の実装例として、次のようなものがある。
第一の実装例では、前提として常にゲストRID−物理RIDマッピングテーブル137のデータ列が物理RID402によってソートされるようにする。プログラムの情報をチェインリスト形式などで保持しておき、登録時に前記の前提を満たす箇所にエントリを挿入するなどの実装によって容易に実装可能である。ステップ801において、RIDテーブル更新部136はテーブル137のエントリを頭から1つずつ参照する。あるエントリAの値と物理RID402の値と、そのエントリAの1つ前のエントリBにおける物理RID402の値とが連続でない場合、その間の値は未使用となっているため、この値を未使用の物理RIDとして選択する。
【0057】
また、未使用の物理RIDを検索する第二の実装例としては、すべての物理RIDに対するビットマップテーブルを用意する方法がある。ある物理RIDが前記ゲストRID−物理RIDマッピングテーブル137のエントリに含まれている場合、ビットマップテーブルの物理RIDに対応するビットが1になっているとする。任意の整数をランダムに選択して、それを仮の物理RIDとする。仮の物理RIDに対応するビットマップテーブルのビットを参照する。参照したビットが0であれば、そのビットを1に変更して、仮の物理RIDを未使用の物理RIDとして選択する。もしも前記のビットが1であれば再び任意の整数を選択するステップから繰り返す。
【0058】
これらの方式は組み合わせて使ってもよい。たとえば、第二の実装例における任意の整数の選択を数回繰り返しても物理RIDを決定することができない場合は第一の方法に切り替えるなどの方法がある。
【0059】
未使用の物理RIDが発見できなかった場合は、ステップ803〜ステップ806を実行する。未使用の物理RIDが発見された場合、ステップ803〜ステップ806をスキップしてステップ807以降を実行する。(ステップ802)
ゲストRID−物理RIDマッピングテーブル137から、エントリ使用中フラグ404が0であるエントリを1つ選択する(ステップ803)。選択方法の一例としては、ランダムに選択する方法のほか、エントリの作成時刻、および、エントリ使用中フラグ404を最後に1に変更した時刻、あるいはエントリ使用中フラグ404を最後に0に変更した時刻を表す情報を保持する項目をゲストRID−物理RIDマッピングテーブル137に付加しておき、もっとも時刻の古いエントリを削除する方法などがある。また、他のLPARに与える影響を少なくするために、プログラムの入力として与えられたゲストIDと、エントリのゲストID401が一致するエントリを優先的に削除する方法をとってもよい。
【0060】
ステップ803で選択したエントリに含まれるゲストID401、物理RID402を参照し、ゲストID401で示されるLPAR11に属するシャドウCPU112中のシャドウTLB113から、前記ステップ803で選択したエントリに含まれる物理RID402の値とTLBエントリ中のRID301の値が等しいようなTLBエントリを削除する (ステップ804)。
【0061】
物理CPU12のTLBからも同様に該当するエントリを削除する(ステップ805)。ステップ805では、TLBがエントリの永続性を保障しないキャッシュ形式(TLBキャッシュ)である場合、削除対象とするエントリ以外に余分なエントリを削除してもよい。すなわち、物理TLB122はすべてクリアしてしまってもよい。本ステップ実行後に、ステップ803で選択したエントリに含まれる物理RIDは未使用状態となる。
【0062】
ステップ802もしくはステップ804で選択した未使用物理RIDと、プログラムの入力として与えられたゲストID、および、ゲストRIDの組をゲストRID−物理RIDマッピングテーブル137に登録する(ステップ806)。
【0063】
ステップ805で登録した物理RIDをプログラムの実行結果として返す。(ステップ807)
以上説明した本実施例を用いた場合の、LPAR上のゲストOSがRRに値を設定する場合の仮想機構全体での流れについて図9を用いて説明する。
【0064】
まず、簡単のため、ゲストRID−物理RIDマッピングテーブル137のいずれのエントリもゲストRIDの値は100ではないとする。また、システムではLPAR1とLPAR2の二つのLPARが稼動しているとする。
【0065】
LPAR1上で動作するゲストOS111−1がゲストRRに100をセットする命令を実行する(ステップ901)
CPU仮想化部121は前記のゲストRRへの値のセットを検出して仮想化例外を発生する(ステップ902)
仮想化エミュレーションプログラム131は図7に示した手順に従ってTLBエミュレーション部133を実行する。TLBエミュレーション部133はRID変換部135を呼び出す(ステップ903)
RID変換部135は、図7の手順に従って物理RIDの検索を行うが、ゲストOS111−1とゲストRID100の組に対応するエントリを発見できず、RIDテーブル更新部136を実行する。RIDテーブル更新部136は、図8に示す方法に従って新規に仮想RIDに対応する物理RID(この例では物理RID1200) を選択して、(ゲストID=1、ゲストRID=100、物理RID=1200)のエントリを作成する (ステップ904)。
【0066】
TLBエミュレーション部は物理RRに1200をセットする。(ステップ905)
ハイパーバイザ13はエミュレーションを終了してLPAR1の処理を再開する(ステップ906)。
【0067】
ステップ906の後に、LPAR2上で動作するゲストOS111−2が動作し、RRに100をセットする命令を実行する(ステップ907)
CPU仮想化部121は前記のゲストRRへの値のセットを検出して仮想化例外を発生する(ステップ908)
仮想化エミュレーションプログラム131は図7に示した手順に従ってTLBエミュレーション部133を実行する。TLBエミュレーション部133はRID変換部135を呼び出す(ステップ909)
RID変換部135は、図7の手順に従って物理RIDの検索を行うが、ゲストOS111−2とゲストRID100の組に対応するエントリを発見できず、RIDテーブル更新部136を実行する。RIDテーブル更新部は、図8に示す方法に従って新規に仮想RIDに対応する物理RID(この例では物理RID1300) を選択して、(ゲストID=2、ゲストRID=100、物理RID=1300)のエントリを作成する (ステップ910)。
【0068】
TLBエミュレーション部は物理RRに1300をセットする。(ステップ911)
ハイパーバイザはエミュレーションを終了してLPARの処理を再開する(ステップ912)。
【0069】
上記のように、本実施例の構成により、二つのゲストOSが同じRID(ゲストRID)を使用しても、ハイパーバイザ13がゲストRIDに対してそれぞれ別の未使用な物理RIDを割り当てることによりRIDを区別することができ、2つのゲストOSのTLBエントリが混在して使用されてしまうことはない。
【0070】
また、本実施例によれば、物理RIDの値のいずれにもLPARを表すビット範囲があるわけではなく、また、ゲストRID−物理RIDマッピングテーブル137のエントリ数もメモリ204の搭載量のみに依存するため、実質的に同時に起動できるLPAR数に制限はない。
【実施例2】
【0071】
上述した第一の実施例では、ゲストRID−物理RIDマッピングテーブル137に一度登録されたエントリは、図8で示すステップ803で削除対象RIDとして選択されない限り削除されることはない。
【0072】
ゲストOS111では1つのプロセスに1つ以上のメモリ空間を占有的に割り当てることが一般的である。すなわち、前記のメモリ空間および、メモリ空間に割り当てられたゲストRIDはプロセス終了時に破棄されることになる。
【0073】
ゲストOSが再び破棄されたゲストRIDを別のプロセスに割り付けられたメモリ空間に割り当てるまでは、該当エントリは使用されることはなく、プロセス終了時には、ゲストRID−物理RIDマッピングテーブル137から、終了したプロセスに関連付けられたゲストRIDのエントリは削除してもよい。
【0074】
しかしながら、ハイパーバイザ13はRRへの値の設定を契機に新規のRIDをゲストが使用してきたことは検出できるが、プロセスの終了を検知する方法がなく、プロセス終了のタイミングでエントリを削除することができない。
【0075】
そこで、第二の実施例では、第一の実施例にエントリを明示的に削除してよいかどうかを判断するための情報を管理するための構造、手順を追加し、登録を行ったエントリを自動的に削除する方法・構成について開示する。
【0076】
このため、本実施例では、第一の実施例におけるゲストRID−物理RIDマッピングテーブル137を、図10に示すように拡張する。
【0077】
テーブル137に新たな項目として追加された登録エントリ数1001は、図1のシャドウTLB113において、物理RID402の値をTLBエントリのRID301の値として持つようなTLBエントリの数である。登録エントリ数1001が0より大きい場合、対応付けられたエントリはCPUから参照される可能性があることを示す。逆に、CPUから参照される可能性がなくなった物理RID402を記録しているゲストRID−物理RIDマッピングテーブル137のエントリは、破棄することができる。
【0078】
次に、本実施例において、ゲストRID−物理RIDマッピングテーブル137の登録エントリ数1001を更新する手順を図11のフローチャートに示す。下記の手順によって、ゲストRID−物理RIDマッピングテーブル137から削除される。
【0079】
図6のステップ601と同様に、物理CPU12が仮想化の例外を発生させる(ステップ1101)。
【0080】
ステップ602と同様の方法で、仮想化エミュレーションプログラム131が仮想化例外を起こした要因を取得する。仮想化エミュレーションプログラム131はLPAR上のプログラムがシャドウTLB操作の実行、即ち、TLBエントリ登録、あるいはTLBエントリ削除の命令を検知して処理を中断したかどうかを検査し、該当する場合はTLBエミュレーション部133を実行する。(ステップ1102)
TLBエミュレーション部133は、図7のステップ703と同様の方法でRID変換部135を実行し、その実行結果として物理RIDを取得する。(1103)
TLBエミュレーション部133は、CPU12のアーキテクチャに定められた規則にしたがって、更新対象となるシャドウTLBのエントリを選択する(ステップ1104)。
【0081】
たとえば、前述のItanium(登録商標)のアーキテクチャの例では、ステップ1103で取得した物理RIDと、仮想化例外を起こしたLPARのTLB操作命令で指定された仮想アドレスの組を入力値としたハッシュ関数によってTLB中のインデックスを決定し、そのインデックスで指定されたエントリを選択する。
【0082】
TLBエミュレーション部133は、ステップ1104で取得したシャドウTLBエントリに含まれる物理RIDを入力値として指定して、RIDテーブル更新部136にエントリ削除通知を出す。RIDテーブル更新部136は、このエントリ削除通知を受け取ると、ゲストRID−物理RIDマッピングテーブル137から前記ステップ1104で選択したエントリに含まれる物理RIDを物理RID402の値として持つエントリを検索して、検索の結果得られたエントリの登録エントリ数1001の値を1つ減らす。 (ステップ1105)
ステップ1105の実行後に、登録エントリ数1001が0になり、なおかつエントリ使用中フラグが0になった場合、RIDテーブル更新部136はステップ1107を実行する。そうでない場合はステップ1107をスキップしてステップ1108以降を実行する(ステップ1106)。
【0083】
RIDテーブル更新部136は、ステップ1105で検索した結果得られたエントリで使用中フラグが0であるエントリを、前記ゲストRID−物理RIDマッピングテーブル137から削除する。(ステップ1107)
TLBエミュレーション部133は、ステップ1103で取得した物理RIDを入力値として指定して、RIDテーブル更新部136にエントリ登録通知を出す。RIDテーブル更新部136は、このエントリ登録通知を受け取ると、ゲストRID−物理RIDマッピングテーブル137から、ステップ1103で取得した物理RIDを物理RID402の値として持つエントリを検索して、検索の結果得られたエントリの登録エントリ数1001の値を1つ増やす(ステップ1008)。TLBエミュレーション部133は、ステップ1004で選択したシャドウTLB113のエントリ、および、物理TLB122のエントリを、CPUのアーキテクチャで定められたとおりの内容に更新する(ステップ1109)。
【0084】
以上詳述した実施例2の方法により、TLBエミュレーション部133は、ゲストRID−物理RIDマッピングテーブル137中に含まれるエントリの中で、シャドウTLB113から参照されなくなり、不要となったエントリを、自動的に削除することができるようになる。
【実施例3】
【0085】
CPUのアーキテクチャによっては、TLBの全エントリ削除を行うオペレーションがある。上述したシャドウTLBを備える構成で、全エントリ削除のオペレーションをエミュレーションする場合は、オペレーションにおいて、すべてのシャドウTLBエントリを削除しなければならない。この処理には時間を要する。
【0086】
第三の実施例においては、TLB全エントリ削除のエミュレーションを高速化するために、第二の実施例の構成および処理手順を更に拡張する。
【0087】
すなわち、第三の実施例では、TLB全エントリ削除の時点で、該当するゲストIDに対するゲストRID−物理RIDマッピングテーブル137の全エントリをすべて無効化し、現在物理RRにセットされていた仮想RIDに対しては別の物理RIDを割り当てる。本手順により、無効化されたエントリに含まれる物理RIDは物理RRにセットされることがなくなり、前記物理RRを含むシャドウTLBのエントリは物理CPU12から参照されなくなる。すなわち、削除されたのと同等の効果を持つ。
【0088】
後の動作において前記の無効化された物理RIDを別のエントリに再割り当てして使用する場合、前記の再利用する物理RIDを使用していたTLBエントリの削除の処理を行わなければならない。しかし、前記の処理は特定の物理RIDに関するものだけでよく、一回のエミュレーション処理時間は、全エントリ削除と比較すると少なくなる。また、TLB全エントリ削除命令実行後に、別のTLB登録命令が、前記TLB全エントリ削除命令実行時に削除すべきであったエントリを別のエントリで上書きする可能性がある。この場合、無効なエントリは有効なエントリに上書きされて自動的に削除されたことになるので、該当エントリをあらためて削除する必要はなくなる。そのため、削除しなければならない総エントリ数も少なくなる。このように、削除を遅延させることにより一回あたりのエミュレーションの処理時間、および、総処理時間を下げることができる。
【0089】
本実施例では、ゲストRID−物理RIDマッピングテーブル137を拡張する。図5にその拡張例を示す。
【0090】
図125のゲストRID−物理RIDマッピングテーブル137の各エントリは、更に項目として世代番号1201を持つ。この世代番号1201は、図12に示すハイパーバイザ13の持つ有効世代番号1202と同一であるときのみ、該エントリは有効であることを示す。
【0091】
本実施例において、TLB全エントリ削除命令のエミュレーション処理を行う場合の処理を図13のフローチャートを用いて説明する。
【0092】
TLBエミュレーション部133はRIDテーブル更新部136にゲストRID―物理RIDマッピングテーブル137全削除命令を出す。
【0093】
RIDテーブル更新部136は、ゲストRID−物理RIDマッピングテーブル137のエントリ使用中フラグ404が1であるすべてのエントリ(以下エントリBと呼ぶ)に対してステップ1302〜ステップ1305を実行する(ステップ1301)。
【0094】
RIDテーブル更新部136は図8のステップ801と同一の方法で未使用物理RIDを選択する。ただし、世代番号1201が有効世代番号1202とは異なるエントリは無効であるとし、エントリが存在しないものとして扱う。(ステップ1302)
RIDテーブル更新部136は、エントリBの物理RID402を、前記ステップ1302で選択した未使用物理RIDの値に変更し(ステップ1303)、エントリBの世代番号1201に1加える(ステップ1304)。また、RIDテーブル更新部136は、前記ステップ1302で選択した未使用物理RIDの値をTLBエミュレーション部133に通知する。
【0095】
TLBエミュレーション部133は対応する物理RR123の値を、ステップ1302で選択した未使用物理RIDの値に変更する(ステップ1305)
RIDテーブル更新部136は有効世代番号の値を1だけ大きくする(ステップ1306)。
【0096】
また、図7のRID変換部135の処理、および、図8のRIDテーブル更新部136の処理において、ステップ701とステップ801では有効世代番号1202と世代番号1201が異なるエントリは存在しないものとして扱い、未使用物理RIDとして選択できるものとして扱う。しかし、世代番号が異なるエントリが存在する物理RIDを未使用物理RIDとして選択した場合は、ステップ804、およびステップ805のシャドウTLBクリアの処理を実行する。
【0097】
また、図11におけるTLBエミュレーション部の処理手順において、ステップ1103〜ステップ1109の処理では世代番号が異なるエントリも更新対象とする。
【0098】
以上説明した第三の実施例により、図7、図8、図11のRID管理部130により、エミュレーションを正しく行うことを保証しつつ、図13に示す手順でTLB全エントリ削除命令のエミュレーション処理を行うことにより、TLB全エントリ削除の処理を高速化することができる。
【図面の簡単な説明】
【0099】
【図1】本発明の第一の実施例に係るシステム構成を示す図である。
【図2】第一の実施例における計算機の構成例を示す図である。
【図3】TLBの一構成例を説明するための図である。
【図4】第一の実施例におけるゲストRID−物理RIDマッピングテーブルを示す図である。
【図5】第三の実施例におけるゲストRID−物理RIDマッピングテーブルの拡張例を示す図である。
【図6】第一の実施例におけるTLBエミュレーション部のフローチャートである。
【図7】第一の実施例におけるRID変換部の処理フローチャートである。
【図8】第一の実施例におけるRIDテーブル更新部の処理フローチャートである。
【図9】第一の実施例におけるハイパーバイザ13の動作例を示す図である。
【図10】第二の実施例におけるゲストRID−物理RIDマッピングテーブルの拡張例を示す図である。
【図11】第二の実施例におけるTLBエントリ登録・TLBエントリ削除命令エミュレーション時の処理フローチャートである。
【図12】第三の実施例におけるハイパーバイザ13が持つ有効世代番号の一例を示す図である。
【図13】第三の実施例におけるTLB全エントリ削除命令エミュレーション時の処理フローチャートである。
【符号の説明】
【0100】
10…計算機、
11…LPAR、
12…物理CPU、
13…ハイパーバイザ、
111…ゲストOS、
112…シャドウCPU、
113…シャドウTLB、
114…シャドウRR、
115…ゲストPT、
121…CPU仮想化部、
122…物理TLB、
123…物理RR、
130…RID管理部、
131…仮想化エミュレーションプログラム、
132…命令エミュレーション部、
133…TLBエミュレーション部、
135…RID変換部、
136…RIDテーブル更新部、
137…ゲストRID−物理RIDマッピングテーブル。

【特許請求の範囲】
【請求項1】
実際の計算機に同時に複数のOSを動作させ、複数の仮想化された計算機とする計算機仮想化装置であって、
前記仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、前記実際の計算機で用いられる識別子(以下、物理RID)の対応付けを管理するマッピングテーブルと、
前記ゲストRIDを代入するエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDを前記物理RIDに変換するRID変換部と、
前記マッピングテーブルに前記ゲストRIDと前記物理RIDの対応付けが存在しない場合、新規な対応付けを作成し、前記マッピングテーブルに追加するRIDテーブル更新部と、を備える
計算機仮想化装置。
【請求項2】
請求項1記載の計算機仮想化装置であって、
前記仮想化された計算機は、前記マッピングテーブルの参照結果を使用したTLBを備え、
前記マッピングテーブルは、前記TLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を示す項目を更に備え、
前記RIDテーブル更新部は、
前記TLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
計算機仮想化装置。
【請求項3】
請求項2記載の計算機仮想化装置であって、
前記仮想化された計算機が前記TLBの全項目削除の実行をした時に、
前記TLB更新部は、
前記マッピングテーブル中の、前記仮想化された計算機に該当する登録内容の破棄を行い、
前記仮想化された計算機は、破棄された前記物理RIDを再利用する場合に、前記TLB中の、破棄された前記物理RIDを使用しているエントリを削除する
計算機仮想化装置。
【請求項4】
請求項3記載の計算機仮想化装置であって、
前記マッピングテーブルは、前記対応付けの世代番号を示す項目を更に備え、
前記テーブル更新部は、
破棄された前記物理RIDを再利用する場合、対応する前記世代番号に1加える
計算機仮想化装置。
【請求項5】
CPUとメモリを有する実計算機で、同時に複数のOSを動作させるための計算機仮想化プログラムであって、
前記実計算機を、
仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、実際の計算機で用いられる識別子(以下、物理RID)の対応付けを管理するマッピングテーブルを用い、
前記ゲストRIDを代入する前記CPUのエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDから前記物理RIDへ変換し、
前記ゲストRIDと前記物理RIDの対応付けが存在しない場合に、新規に対応付けを作成して前記マッピングテーブルに追加する
よう動作させる
計算機仮想化プログラム。
【請求項6】
請求項5記載の計算機仮想化プログラムであって、
前記実計算機を、
前記仮想化された計算機が、前記マッピングテーブルの参照結果を使用したシャドウTLBを備え、
前記マッピングテーブルに、前記シャドウTLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を示す項目を設定し、
前記シャドウTLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
よう動作させる
計算機仮想化プログラム。
【請求項7】
請求項6記載の計算機仮想化プログラムであって、
前記実計算機を、
前記仮想化された計算機が前記シャドウTLBの全項目削除の実行をした時に、
前記マッピングテーブル中の、前記仮想化された計算機に該当する登録内容の破棄を行い、
破棄された前記物理RIDを再利用する場合に、前記TLB中の、破棄された前記物理RIDを使用しているエントリを削除する
よう動作させる
計算機仮想化プログラム。
【請求項8】
請求項7記載の計算機仮想化プログラムであって、
前記実計算機を、
前記マッピングテーブルに、前記対応付けの世代番号を示す項目を設定し、
破棄された前記物理RIDを再利用する場合、対応する前記世代番号に1加える
よう動作させる
計算機仮想化プログラム。
【請求項9】
一つ以上の中央処理部とメモリを有する実際の計算機上で、同時に複数のOSを動作させるためのハイパーバイザによる計算機仮想化方法であって、
前記ハイパーバイザは、仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、前記実際の計算機で用いられる識別子(以下、物理RID)の対応付けを管理するマッピングテーブルを形成し、
前記ゲストRIDを代入するエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDを、対応する前記物理RIDに変換し、
該当する前記対応付けが存在しない場合に、新規の対応付けを作成して前記マッピングテーブルに追加する
計算機仮想化方法。
【請求項10】
請求項9記載の計算機仮想化方法であって、
前記仮想化された計算機は、前記マッピングテーブルの参照結果を使用したシャドウTLBを備え、
前記ハイパーバイザは、
前記マッピングテーブルに、前記シャドウTLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を設定し、
前記シャドウTLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
計算機仮想化方法。
【請求項11】
請求項10記載の計算機仮想化方法であって、
前記仮想化された計算機が前記TLBキャッシュの全項目削除の実行をした時に、
前記ハイパーバイザは、
前記マッピングテーブル中の、前記仮想化された計算機に該当する登録内容の破棄を行い、
破棄された前記物理RIDを再利用する場合に、前記TLB中に残っている、破棄された前記物理RIDを使用しているエントリを削除する
計算機仮想化方法。
【請求項12】
請求項11記載の計算機仮想化方法であって、
前記ハイパーバイザは、
前記マッピングテーブルに、前記対応付けの世代番号を示す項目を設定し、
破棄された前記物理RIDを再利用する場合、対応する前記世代番号に1加える
計算機仮想化方法。

【図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

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate