(57)【特許請求の範囲】
【請求項１】
実際の計算機に同時に複数のOSを動作させ、複数の仮想化された計算機とする計算機仮想化装置であって、
前記仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、前記実際の計算機で用いられる識別子（以下、物理RID）の対応付けを管理するマッピングテーブルと、
前記ゲストRIDを代入するエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDを前記物理RIDに変換するRID変換部と、
前記マッピングテーブルに前記ゲストRIDと前記物理RIDの対応付けが存在しない場合、新規な対応付けを作成し、前記マッピングテーブルに追加するRIDテーブル更新部と、を備え、前記仮想化された計算機は、前記マッピングテーブルの参照結果を使用したTLBを備え、
前記マッピングテーブルは、前記TLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を示す項目を更に備え、
前記RIDテーブル更新部は、
前記TLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
計算機仮想化装置。
【請求項２】
請求項１記載の計算機仮想化装置であって、
前記仮想化された計算機が前記TLBの全項目削除の実行をした時に、
前記TLB更新部は、
前記マッピングテーブル中の、前記仮想化された計算機に該当する登録内容の破棄を行い、
前記仮想化された計算機は、破棄された前記物理RIDを再利用する場合に、前記TLB中の、破棄された前記物理RIDを使用しているエントリを削除する
計算機仮想化装置。
【請求項３】
請求項２記載の計算機仮想化装置であって、
前記マッピングテーブルは、前記対応付けの世代番号を示す項目を更に備え、
前記テーブル更新部は、
破棄された前記物理RIDを再利用する場合、対応する前記世代番号に１加える
計算機仮想化装置。
【請求項４】
CPUとメモリを有する実計算機で、同時に複数のOSを動作させるための計算機仮想化プログラムであって、
前記実計算機を、
仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、実際の計算機で用いられる識別子（以下、物理RID）の対応付けを管理するマッピングテーブルを用い、
前記ゲストRIDを代入する前記CPUのエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDから前記物理RIDへ変換し、
前記ゲストRIDと前記物理RIDの対応付けが存在しない場合に、新規に対応付けを作成して前記マッピングテーブルに追加し、
前記仮想化された計算機が、前記マッピングテーブルの参照結果を使用したシャドウTLBを備え、
前記マッピングテーブルに、前記シャドウTLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を示す項目を設定し、
前記シャドウTLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
よう動作させる
計算機仮想化プログラム。
【請求項５】
一つ以上の中央処理部とメモリを有する実際の計算機上で、同時に複数のOSを動作させるためのハイパーバイザによる計算機仮想化方法であって、
前記ハイパーバイザは、仮想化された計算機上のメモリ空間の識別子(以下、ゲストRID)と、前記実際の計算機で用いられる識別子（以下、物理RID）の対応付けを管理するマッピングテーブルを形成し、
前記ゲストRIDを代入するエミュレーション処理を契機に、前記マッピングテーブルを参照して前記ゲストRIDを、対応する前記物理RIDに変換し、
該当する前記対応付けが存在しない場合に、新規の対応付けを作成して前記マッピングテーブルに追加し、
前記仮想化された計算機は、前記マッピングテーブルの参照結果を使用したシャドウTLBを備え、
前記ハイパーバイザは、
前記マッピングテーブルに、前記シャドウTLB中に使用されている前記物理RIDの個数をカウントする登録エントリ数を設定し、
前記シャドウTLBの更新時に、対応する前記登録エントリ数を更新し、
更新された前記登録エントリ数を参照して、不要になったエントリを前記マッピングテーブルから削除する
計算機仮想化方法。
【請求項６】
請求項５記載の計算機仮想化方法であって、
前記仮想化された計算機が前記TLBキャッシュの全項目削除の実行をした時に、
前記ハイパーバイザは、
前記マッピングテーブル中の、前記仮想化された計算機に該当する登録内容の破棄を行い、
破棄された前記物理RIDを再利用する場合に、前記TLB中に残っている、破棄された前記物理RIDを使用しているエントリを削除する
計算機仮想化方法。
【請求項７】
請求項６記載の計算機仮想化方法であって、
前記ハイパーバイザは、
前記マッピングテーブルに、前記対応付けの世代番号を示す項目を設定し、
破棄された前記物理RIDを再利用する場合、対応する前記世代番号に１加える
計算機仮想化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機仮想化技術における、TLB仮想化技術に関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータ（以下、PCと呼ぶ）アーキテクチャをベースとした計算機上で、仮想的な計算機を同時に複数稼動させる計算機仮想化の技術が注目を浴びており、実稼動する計算機の台数の削減、ハードウェアの隠蔽による運用・構成変更の容易化などのメリットが市場に浸透しつつある。
【０００３】
これまでにもメインフレームなどを中心に計算機の仮想化に関する技術は数多く開発されてきたが、PCのアーキテクチャで、高性能でなおかつ制限のない柔軟な計算機仮想化技術を提供するためには、中央処理部(Central Processing Unit、以下、CPUと呼ぶ)などのハードウェアのみならず、制御を行うソフトウェアにも多くの工夫が必要となる。
【０００４】
効率的に実装しなければならない仮想化技術の１つにトランスレーション・ルックアサイド・バッファ（Translation Look1aside Buffer 、以下、TLBと呼ぶ）仮想化がある。
【０００５】
背景技術を説明する前提となるCPUのTLBについて図３を参照して説明する。CPUではメモリへのアクセスを行う際にメモリアドレスを使用してメモリ上の位置を特定する。ページング機構を備えるCPUでは、プログラムは仮想アドレスと呼ばれる、仮想的なアドレス体系(以下、メモリ空間と呼ぶ)上のアドレスでメモリへのアクセスを行う。CPUはこの仮想アドレスの値を、実際のメモリ上の位置に変換してからアクセスを行う。通常、本変換を高速、かつ自動的に行うために、CPU内部にはアドレス変換対を格納するためのキャッシュ用のメモリが備えられている。
【０００６】
また、アーキテクチャによっては複数のメモリ空間の変換対を同時に１つのTLBに格納するために、Region Identifier(以下、RIDと呼ぶ)などと呼ばれるメモリ空間の識別子を用いることもある。このようなアーキテクチャの例としてはインテル社のItanium（登録商標）アーキテクチャなどがある。本発明は、このようなTLBとRIDを用いるアーキテクチャを対象とする。
【０００７】
このRIDは計算機上のOperating System(以下、OSと呼ぶ)が管理するメモリ空間を一意に識別するための番号である。通常は、メモリ空間ごとに対応するページテーブル（Page Table、PT）が割り当てられる。ページテーブル（PT）はOSが管理する仮想アドレスと物理アドレスの対応表であり、OSが必要に応じてページテーブル（PT）の内容を参照してTLBに登録する。
【０００８】
TLBの構成例を図３の下部に示す。物理TLBはRID３０１、仮想アドレス３０２、物理アドレス３０３の情報で構成される。CPU上のプログラムは、RID３０１と仮想アドレス３０２を組み合わせてメモリ上の物理アドレス３０３を指定する。
【０００９】
CPUは指定されたRIDと仮想アドレスがTLBエントリ中のRID３０１と仮想アドレス３０２と等しいエントリを検索し、対応付けられた物理アドレス３０３が指し示すメモリにアクセスを行う。実際には、仮想アドレス３０２、および物理アドレス３０３は個々のアドレス単位ではなくページと呼ばれる一定の大きさの区間ごとに変換を管理され、通常、TLBはページテーブルのキャッシュとして動作する。本明細書において、ページと個々のアドレスを区別する大きな理由はないため、アドレスと呼ぶ場合、アドレスとページ番号の総称であるとする。
【００１０】
TLBエントリ中に指定されたRIDと仮想アドレスに対応するエントリがない場合、CPUはプログラムに対して例外信号を通知する。通常はOSが例外を検知して、メモリ上のページテーブルの参照を参照して、例外を起こす要因となったRIDと仮想アドレス、および、前記仮想アドレスに対応する物理アドレスの組をTLBエントリに登録する。
【００１１】
プログラムがCPUにRIDを指定する方法として、Region Register(以下、RRと呼ぶ)を用いるアーキテクチャがある。RRは現在のプログラムが使用するメモリ空間のRIDを格納するための専用レジスタであり、CPU内に用意される。RRの例を図３の上部に示す。RRはレジスタの特定ビット列にRID３０５を示す領域を持つ。
【００１２】
複数のRRを持つCPUでは、仮想アドレス３０６の上位ビットがRRのインデックス番号となっていることがある。この方式では、RR指定部分で指定されたRRのRIDと仮想アドレス部分が、それぞれ、TLBエントリのRID３０１、仮想アドレス３０２と比較器３０７で比較され、一致したエントリの物理アドレス３０３が使用される。
【００１３】
メモリ空間はRIDによって一意に識別される。メモリ空間ごとに異なるページテーブル（PT）が使用されて異なるアドレス変換が登録される可能性がある。すなわち、同じ仮想アドレスを用いても、RIDが異なる場合は異なる物理アドレスにアクセスすることがある。さらに、RIDとページテーブルの対応付けはOSが動的に管理するものであるため、異なる計算機、あるいはOSでは、同じRIDと同じ仮想アドレスを指定しても異なる物理アドレスに変換されることがある。
【００１４】
計算機を仮想化する場合、すなわち、複数のOSが同一のCPU上で走行する場合、同一のTLB（TLBキャッシュ）を共有することになる。それぞれのOSごとに異なるページテーブル（PT）を管理し、それぞれが独自のRIDに対応付けてTLBに登録する。OSごとに対応付けが異なることがあるので、他のOSが登録したTLBエントリが使用されると、OSが意図しない変換を行ってしまう。このような状況を回避するために、複数のOSが単一のCPU上で並列して走行する環境ではTLBリソースの調停処理が必須となる。
【００１５】
前記のようなアーキテクチャでのTLBリソースの調停方法として、非特許文献１では、RIDパーティショニングと呼ぶ手法を用いている。この方法では、RIDを、仮想計算機を識別するビット範囲と、仮想計算機内のメモリ空間を識別するビット範囲に分割する。OSは後半のメモリ空間を識別するビット範囲のみを変更することができる。
【００１６】
【非特許文献１】ISSN 1535−864X,  Intel（登録商標） Virtualization Technology Volume 10 Issue 03
【発明の開示】
【発明が解決しようとする課題】
【００１７】
非特許文献１の方法では、RID内に仮想計算機を識別するビット範囲があるので異なる仮想計算機間で同一のRIDを使用することがない。そのため、OSが切り替わった後に、切り替え前のOSが登録したTLBエントリを誤って参照することがなく、OSが意図しない変換を行うことがない。この方法は、ゲストOSが切り替わる際に、処理時間の多い、TLBエントリのクリアの処理を実行する必要がない点が優れている。
【００１８】
しかしながら、仮想計算機を識別するビット数、およびメモリ空間を識別するビット数のそれぞれに制限が生じてしまう。すなわち、計算機上で同時に稼動できる仮想計算機の数、および、メモリ空間の数に制限が生じてしまう。とりわけ、複数の計算機を仮想化してひとつの計算機に集約する手法において、前者の同時稼動可能な計算機の数に制限が生じてしまうことが大きな課題となる。
【００１９】
本発明では、前記の問題を鑑み、性能を低下させないという制約の中で、同時稼動可能な計算機数の制限をなくすことが可能な計算機仮想化装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明では、RIDパーティショニングのように、仮想計算機上のRIDと実際の計算機上のRIDを異なるものとして、両者の間での変換を管理する機構を備える。しかし、RIDパーティショニングのように特定の変換式を使用した変換方式を用いるのではなく、実行時に動的に生成・管理する変換テーブル情報を備え、変換テーブルを参照してRIDを変換することを特徴とする。
【００２１】
すなわち、本発明においては、上記目的を達成するため、同時に複数のOSを動作させる計算機仮想化機構であって、仮想化された計算機上のメモリ空間の識別子(ゲストRID)と、実計算機で用いられる識別子（物理RID）の対応付けを管理するマッピングテーブルと、RIDを代入するCPUレジスタのエミュレーション処理を契機に、マッピングテーブルを参照してRIDを変換するRID変換部と、マッピングテーブルに対応付けが存在しない場合に、新規に対応付けを作成してマッピングテーブルに追加するRIDテーブル更新部とを備える計算機仮想化機構を提供する。
【発明の効果】
【００２２】
RID変換用のマッピングテーブル内で実計算機のRID（物理RID）を重複して複数の仮想計算機に割り当てないように制御するため、複数の仮想計算機が重複して同一のRID（物理RID）を使用することはなく、OSが意図しない変換を行うことはない。また、RIDの値に仮想計算機の識別子などを入れないため、RIDに制限が加わることもない。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の最良の形態を図面を用いて説明する。
【実施例１】
【００２４】
本発明の第一の実施例である計算機の構成例を図１に示す。
【００２５】
本実施例は、１つの実際の計算機（実計算機）１０上で仮想的に１つ以上の仮想的な計算機を動作させる計算機仮想化機構を対象とする。計算機上で複数の仮想計算機を動作させる場合、複数のOSが動作することとなる。各々のOSは計算機のリソースをすべて占有していると仮定して動作するが、CPUのレジスタ、TLB、あるいはその他の入出力（以下、IOと略す）のデバイスなどのさまざまなリソースを操作する場合、複数のOSが混在して動作し、前記のリソースを操作すると意図しない状態が発生してしまい誤動作してしまう。誤動作を回避するために、前記のリソースに対する処理を調停する計算機仮想化機構がハイパーバイザ１３である。
【００２６】
なお、以降では、仮想計算機からアクセスしているように見えるリソースに対して「ゲスト」という接頭辞をつける。実際の計算機が持つリソースに対しては「物理」という接頭辞をつけて呼び区別する。ゲストから見えるリソースを実際のリソースに変換するために必要な構造には「シャドウ」という接頭辞をつける。
【００２７】
たとえば、RIDや物理アドレスなどについて、ゲストOSが使用する値をゲストRID、ゲスト物理アドレスと呼ぶ。実際の計算機で使用する値を物理RID、物理アドレスと呼ぶ。(物理アドレスのみは重複を避けるために物理を一度だけ使用する)
ハイパーバイザ１３は物理CPU１２上で動作するプログラムとして構成される。ハイパーバイザ１３が動作する物理CPU１２を含む実際の計算機の構成例を図２に示す。計算機１０は1つ以上の物理CPU１２、メモリ２０４を備える。プログラムはメモリ２０４上に記憶され、物理CPU１２によって実行される。計算機はIO制御部２０９、Network Interface Card(以下、NICと呼ぶ)２０８、Small Computer System Interface/Fibre Channel(以下、SCSI/FCと呼ぶ)２０７などのIOデバイスをもち、外部記憶装置２１０、キーボード・ディスプレイ２１１などと接続している。なお、２０３は所謂ノースブリッジ、２０５はIOブリッジ、２０６は内部バスを示す。
【００２８】
ハイパーバイザ１３は後述する物理CPU１２のCPU仮想化部１２１の初期化、Basic Input/Output System （以下、BIOSと呼ぶ)などに代表されるファームウェアのエミュレーションによる仮想計算機のプログラムのロードおよび実行開始、複数の仮想計算機上のプログラムの実行スケジューリング、および、CPU仮想化部１２１がリソースの調停を必要としたときの処理などを実行する。
【００２９】
仮想的な計算機はLogical Partitioning（以下、LPARと呼ぶ）１１と呼ばれる単位で扱われる。LPAR１１は仮想的な計算機ごとに用意される構成情報で構成される。その構成情報に基づいて物理CPU１２が制御を行い、プログラムを実行する。前記構成情報の中で、CPUに関する構成情報をシャドウCPU１１２と呼ぶ。並列して複数のOS１１１が動作する。以降では、LPAR１１の構成情報に従ってCPUがプログラムを実行することを、LPAR上で動作すると呼ぶ。また、LPAR上で動作するOS１１１をゲストOSと呼ぶ。ゲストOS１１１中の１１５はゲストページテーブル（PT）を示す。
【００３０】
LPAR１１上で動作するプログラムが、調停の必要な計算機リソースにアクセスする命令を実行した場合、物理CPU１２の、プログラムとのインタフェースであるCPU仮想化部１２１がその命令を検出し、LPAR１１上で動作するプログラムの処理を中断して、ハイパーバイザ１３の仮想化エミュレーションプログラム１３１を実行する。仮想化エミュレーションプログラム１３１はリソースの調停処理を実行し、その後にLPAR１１再開命令を発行する。物理CPU１２は中断したLPAR１１のプログラムの処理を再開する。
【００３１】
ハイパーバイザ１３はいくつものプログラム機能で構成される。本実施例では、CPU処理、および、本実施例が対象とするTLBのRIDとRRの処理に関する部分のみを示す。その他の処理については非特許文献１にあるような構成で実現可能であり、詳細についてはここでは省略する。
【００３２】
RIDとRRの処理に関する構成として、ハイパーバイザ１３は仮想化エミュレーションプログラム１３１とRID管理部１３０を備える。仮想化エミュレーションプログラムは命令エミュレーション部１３２、および、TLBエミュレーション部１３３で構成される。命令エミュレーション部１３２は、LPAR１１上のプログラムが調停の必要な命令を実行した場合に、その調停処理を実行するプログラムである。
【００３３】
TLBエミュレーション部１３３は、LPAR１１上のゲストOS１１１が計算機の物理TLB１２２および物理RR１２３を操作しようとした場合に、その処理をエミュレートし、対応するLPAR１１のシャドウCPU１１２、及び、物理TLB１２２、物理RR１２３を操作するプログラムである。
【００３４】
CPUに関する構成情報であるシャドウCPU１１２は、図２のメモリ２０４内に保持される。図１に示す本実施例の構成では、シャドウCPU１１２の情報の中でTLBに関連する情報のみを示す。シャドウCPU１１２のTLB関連の構成情報は、シャドウTLB１１３とシャドウRR１１４、更には、ゲスト物理アドレス−物理アドレスマッピングテーブルで構成される。なお、ゲスト物理アドレス−物理アドレスマッピングテーブルはTLB仮想化における公知の技術であるのでここでは図示、説明を省略する。
【００３５】
シャドウTLB１１３、およびシャドウRR１１４はそれぞれ物理TLB１２２、物理RR１２３と同様の項目を持ち、そのフォーマットは物理CPU１２によって定められている。シャドウTLB１１３は物理CPU１２からソフトウェア処理を経ることなく直接参照することができる。ハイパーバイザ１３はシャドウTLB１１３に適切なゲスト仮想アドレスから物理アドレスへのアドレス変換を登録しておくことにより、コスト（処理時間）のかかるアドレス変換処理を高速に行うことができるようになる。
【００３６】
上記の理由により、本実施例において、前記シャドウTLB１１３には物理RID、ゲスト仮想アドレス、物理アドレスの組で構成される変換対が登録される。
【００３７】
TLBエミュレーション部１３３は、複数のLPAR１１のTLB情報を効率的に調停するために、RID管理部１３０を用いて制御を行う。RID管理部１３０はRID変換部１３５、RIDテーブル更新部１３６、ゲストRID−物理RIDマッピングテーブル１３７で構成される。ゲストRID−物理RIDマッピングテーブル１３７はLPAR上のプログラムが使用する仮想計算機上のゲストRIDと、実際の物理CPUで使用する物理RIDの対応付けを示す一覧であり、本実施例が示す手順によって、RID管理部１３０がエントリの追加、削除を行う。
【００３８】
本実施例における、ゲストRID−物理RIDマッピングテーブル１３７の一構成例を図４に示す。ゲストRID−物理RIDマッピングテーブル１３７はゲストID４０１、物理RID４０２、ゲストRID４０３、および、エントリ使用中フラグ４０４の組で構成される。
【００３９】
ゲストID４０１はLPARを一意に示す識別子である。ゲストRID４０３、物理RID４０２はそれぞれ、LPAR上で動作するプログラムが使用する仮想計算機上のRIDと、実際の物理CPUに指定するRIDを示す。ゲストRID４０３で示されるLPAR１１上で動作するプログラムからRRに対するRID設定命令が実行された場合、RID管理部１３０は前記テーブル１３７の組で対応付けられる物理RIDを物理RR１２３に設定する。手順の詳細は後述する。
【００４０】
エントリ使用中フラグ４０４は、エントリに含まれる物理RID４０２が実際の物理RRにセットされているかどうかを示す情報である。簡単な実装例としては、実際の物理RRにセットされている場合に１となるビット情報などがある。
【００４１】
実際の物理RRにセットされているエントリを示すその他の実装例としては、実際に使用されているエントリのみを保持するポインタのリストなどを作成する方法を用いてもよい。前記のリストの方式では、実際に使用されている項目のみを高速にたどることができる。本実施例ではいずれの実装方式も用いることができるが、簡単化のため、前者で示したビット情報を用いて説明を行なう。
【００４２】
RID管理部１３０は、異なる複数のLPAR１１が同一のRIDを使用してきた場合に、後述する手段によって、それぞれのLPARごとに異なる物理RIDを選択して使用する。これにより、複数のLPARが同時期に同一のRIDを使用したとしても、物理CPU１２ではそれぞれを別のRIDとして区別でき、OSが意図したとおりの正常な動作を行うことができる。
【００４３】
ゲストRID−物理RIDマッピングテーブル１３７のエントリは、物理RID、ゲストID、および、ゲストRIDをキー項目として該当するエントリを検索することがある。このような検索を高速に行うために、ハッシュテーブル、N分木などの検索を高速化するアルゴリズムとデータ構造を自由に追加してもよい。ただし、本実施例では簡単化のため、これらの高速化については説明しない。
【００４４】
また、シャドウTLB１１３はCPUによりフォーマットが決まっているため、このような各種の高速化を行うにあたり制限が加わる。本方式では、独自に追加したゲストRID−物理RIDマッピングテーブル１３７をデータ構造として用いるため、前記のような各種の高速化を自由に行うことができる。
【００４５】
以降では、ハイパーバイザ１３内のプログラム各々の動作を説明し、その後に全体の動作と発明による効果を説明する。
【００４６】
本実施例における仮想化エミュレーションプログラム１３１およびTLBエミュレーション部１３３の動作を図６に示すフローチャートを用いて説明する。
【００４７】
物理CPU１２は、プログラムが調停処理が必要な命令を実行すると仮想化例外を発生する(ステップ６０１)。このとき、物理CPU１２は仮想化を発生させた要因に関する情報をメモリの所定位置に書き込むなどの方法で、要因を記録する。仮想化エミュレーションプログラム１３１は仮想化例外が起こった場合に処理を開始する。
【００４８】
仮想化エミュレーションプログラム１３１はCPUの特定のメモリアドレスに配置された構成情報を参照して、仮想化例外を起こしたプログラムが動作していたLPARのゲストIDを取得する(ステップ６０２)。
【００４９】
仮想化例外が発生した要因を調査して、要因に対応した処理を実行する。仮想化エミュレーションプログラム１３１は、物理CPU１２がゲストRRへの書き込み命令を検知して処理を中断したかどうかを検査し、該当する場合はTLBエミュレーション部１３３を実行する。(ステップ６０３)
TLBエミュレーション部１３３は、仮想化例外を発生させた命令、命令オペランド、およびレジスタを参照して、ゲストRRに書き込まれようとしていたゲストRIDの値を取得する。(ステップ６０４)
TLBエミュレーション部はステップ６０２で取得したゲストIDとステップ６０４で取得したゲストRIDの値を入力値としてRID変換部１３５を実行し、その結果として物理RID値(以下、物理RID(A)と呼ぶ)を得る。(ステップ６０５)
TLBエミュレーション部は現在物理RRに設定されている物理RID値(以下、物理RID(B)と呼ぶ)を取得し(ステップ６０６)、ゲストRID−物理RIDマッピングテーブル中において、物理RID(B)値を含むエントリのエントリ使用中フラグを０にする(ステップ６０７)。
【００５０】
TLBエミュレーション部１３３は、物理RID(A)値を物理RR１２３にセットする(ステップ６０８)。
【００５１】
ゲストRID−物理RIDマッピングテーブル中において、物理RID(A)値を含むエントリのエントリ使用中フラグを1にする(ステップ６０９)。
【００５２】
次に、本実施例におけるRID変換部１３５の動作を図７に示すフローチャートを用いて説明する。
【００５３】
RID変換部１３５は、仮想化例外を発生させたLPARのゲストIDおよびプログラムの入力情報として図６のステップ６０４で取得されたゲストRIDを与えられて起動される。RID変換部１３５はゲストRID−物理RIDマッピングテーブル１３７を参照して、ゲストID４０１とゲストRID４０３がそれぞれプログラムの入力として与えられたゲストIDとゲストRIDに等しい物理RIDのエントリを検索する。(ステップ７０１)
ステップ７０１において該当するエントリを発見することができなかった場合、ステップ７０３を実行する。該当するエントリを発見した場合はエントリに含まれる物理RIDの値をプログラムの実行結果として返す。(ステップ７０２)
該当するエントリが発見できなかった場合、RID変換部１３５は、RIDテーブル更新部１３６にプログラムの入力として与えられたゲストIDおよびゲストRIDを入力情報として与えて実行し、その結果としてゲストRID−物理RIDマッピングテーブルのいずれのエントリの物理RID４０２にも含まれない物理RID値を得て、この物理RID値をプログラムの実行結果として返す(ステップ７０３)。
【００５４】
次に、RIDテーブル更新部１３６の動作を図８に示すフローチャートを用いて説明する。
【００５５】
RIDテーブル更新部１３６はゲストRID−物理RIDマッピングテーブル１３７を参照して、テーブル１３７内のいずれのエントリの物理RID４０２にも含まれない物理RID(以下、未使用の物理RIDと呼ぶ)を検索する(ステップ８０１)。
【００５６】
未使用の物理RIDを検索する方式の実装例として、次のようなものがある。
第一の実装例では、前提として常にゲストRID−物理RIDマッピングテーブル１３７のデータ列が物理RID402によってソートされるようにする。プログラムの情報をチェインリスト形式などで保持しておき、登録時に前記の前提を満たす箇所にエントリを挿入するなどの実装によって容易に実装可能である。ステップ８０１において、RIDテーブル更新部１３６はテーブル１３７のエントリを頭から１つずつ参照する。あるエントリAの値と物理RID４０２の値と、そのエントリAの1つ前のエントリBにおける物理RID４０２の値とが連続でない場合、その間の値は未使用となっているため、この値を未使用の物理RIDとして選択する。
【００５７】
また、未使用の物理RIDを検索する第二の実装例としては、すべての物理RIDに対するビットマップテーブルを用意する方法がある。ある物理RIDが前記ゲストRID−物理RIDマッピングテーブル１３７のエントリに含まれている場合、ビットマップテーブルの物理RIDに対応するビットが１になっているとする。任意の整数をランダムに選択して、それを仮の物理RIDとする。仮の物理RIDに対応するビットマップテーブルのビットを参照する。参照したビットが0であれば、そのビットを1に変更して、仮の物理RIDを未使用の物理RIDとして選択する。もしも前記のビットが1であれば再び任意の整数を選択するステップから繰り返す。
【００５８】
これらの方式は組み合わせて使ってもよい。たとえば、第二の実装例における任意の整数の選択を数回繰り返しても物理RIDを決定することができない場合は第一の方法に切り替えるなどの方法がある。
【００５９】
未使用の物理RIDが発見できなかった場合は、ステップ８０３〜ステップ８０６を実行する。未使用の物理RIDが発見された場合、ステップ８０３〜ステップ８０６をスキップしてステップ８０７以降を実行する。(ステップ８０２)
ゲストRID−物理RIDマッピングテーブル１３７から、エントリ使用中フラグ４０４が０であるエントリを１つ選択する(ステップ８０３)。選択方法の一例としては、ランダムに選択する方法のほか、エントリの作成時刻、および、エントリ使用中フラグ４０４を最後に１に変更した時刻、あるいはエントリ使用中フラグ４０４を最後に０に変更した時刻を表す情報を保持する項目をゲストRID−物理RIDマッピングテーブル１３７に付加しておき、もっとも時刻の古いエントリを削除する方法などがある。また、他のLPARに与える影響を少なくするために、プログラムの入力として与えられたゲストIDと、エントリのゲストID４０１が一致するエントリを優先的に削除する方法をとってもよい。
【００６０】
ステップ８０３で選択したエントリに含まれるゲストID４０１、物理RID４０２を参照し、ゲストID４０１で示されるLPAR１１に属するシャドウCPU１１２中のシャドウTLB１１３から、前記ステップ８０３で選択したエントリに含まれる物理RID４０２の値とTLBエントリ中のRID３０１の値が等しいようなTLBエントリを削除する (ステップ８０４)。
【００６１】
物理CPU１２のTLBからも同様に該当するエントリを削除する(ステップ８０５)。ステップ８０５では、TLBがエントリの永続性を保障しないキャッシュ形式（TLBキャッシュ）である場合、削除対象とするエントリ以外に余分なエントリを削除してもよい。すなわち、物理TLB１２２はすべてクリアしてしまってもよい。本ステップ実行後に、ステップ８０３で選択したエントリに含まれる物理RIDは未使用状態となる。
【００６２】
ステップ８０２もしくはステップ８０４で選択した未使用物理RIDと、プログラムの入力として与えられたゲストID、および、ゲストRIDの組をゲストRID−物理RIDマッピングテーブル１３７に登録する(ステップ８０６)。
【００６３】
ステップ８０５で登録した物理RIDをプログラムの実行結果として返す。(ステップ８０７)
以上説明した本実施例を用いた場合の、LPAR上のゲストOSがRRに値を設定する場合の仮想機構全体での流れについて図９を用いて説明する。
【００６４】
まず、簡単のため、ゲストRID−物理RIDマッピングテーブル１３７のいずれのエントリもゲストRIDの値は１００ではないとする。また、システムではLPAR１とLPAR２の二つのLPARが稼動しているとする。
【００６５】
LPAR１上で動作するゲストOS１１１−１がゲストRRに１００をセットする命令を実行する(ステップ９０１)
CPU仮想化部１２１は前記のゲストRRへの値のセットを検出して仮想化例外を発生する(ステップ９０２)
仮想化エミュレーションプログラム１３１は図７に示した手順に従ってTLBエミュレーション部１３３を実行する。TLBエミュレーション部１３３はRID変換部１３５を呼び出す(ステップ９０３)
RID変換部１３５は、図７の手順に従って物理RIDの検索を行うが、ゲストOS１１１−１とゲストRID１００の組に対応するエントリを発見できず、RIDテーブル更新部１３６を実行する。RIDテーブル更新部１３６は、図８に示す方法に従って新規に仮想RIDに対応する物理RID(この例では物理RID１２００) を選択して、(ゲストID＝１、ゲストRID＝１００、物理RID＝１２００)のエントリを作成する (ステップ９０４)。
【００６６】
TLBエミュレーション部は物理RRに１２００をセットする。(ステップ９０５)
ハイパーバイザ１３はエミュレーションを終了してLPAR１の処理を再開する(ステップ９０６)。
【００６７】
ステップ９０６の後に、LPAR２上で動作するゲストOS１１１−２が動作し、RRに１００をセットする命令を実行する(ステップ９０７)
CPU仮想化部１２１は前記のゲストRRへの値のセットを検出して仮想化例外を発生する(ステップ９０８)
仮想化エミュレーションプログラム１３１は図７に示した手順に従ってTLBエミュレーション部１３３を実行する。TLBエミュレーション部１３３はRID変換部１３５を呼び出す(ステップ９０９)
RID変換部１３５は、図７の手順に従って物理RIDの検索を行うが、ゲストOS１１１−２とゲストRID１００の組に対応するエントリを発見できず、RIDテーブル更新部１３６を実行する。RIDテーブル更新部は、図８に示す方法に従って新規に仮想RIDに対応する物理RID(この例では物理RID１３００) を選択して、(ゲストID＝２、ゲストRID＝１００、物理RID＝１３００)のエントリを作成する (ステップ９１０)。
【００６８】
TLBエミュレーション部は物理RRに１３００をセットする。(ステップ９１１)
ハイパーバイザはエミュレーションを終了してLPARの処理を再開する(ステップ９１２)。
【００６９】
上記のように、本実施例の構成により、二つのゲストOSが同じRID(ゲストRID)を使用しても、ハイパーバイザ１３がゲストRIDに対してそれぞれ別の未使用な物理RIDを割り当てることによりRIDを区別することができ、２つのゲストOSのTLBエントリが混在して使用されてしまうことはない。
【００７０】
また、本実施例によれば、物理RIDの値のいずれにもLPARを表すビット範囲があるわけではなく、また、ゲストRID−物理RIDマッピングテーブル１３７のエントリ数もメモリ２０４の搭載量のみに依存するため、実質的に同時に起動できるLPAR数に制限はない。
【実施例２】
【００７１】
上述した第一の実施例では、ゲストRID−物理RIDマッピングテーブル１３７に一度登録されたエントリは、図８で示すステップ８０３で削除対象RIDとして選択されない限り削除されることはない。
【００７２】
ゲストOS１１１では１つのプロセスに１つ以上のメモリ空間を占有的に割り当てることが一般的である。すなわち、前記のメモリ空間および、メモリ空間に割り当てられたゲストRIDはプロセス終了時に破棄されることになる。
【００７３】
ゲストOSが再び破棄されたゲストRIDを別のプロセスに割り付けられたメモリ空間に割り当てるまでは、該当エントリは使用されることはなく、プロセス終了時には、ゲストRID−物理RIDマッピングテーブル１３７から、終了したプロセスに関連付けられたゲストRIDのエントリは削除してもよい。
【００７４】
しかしながら、ハイパーバイザ１３はRRへの値の設定を契機に新規のRIDをゲストが使用してきたことは検出できるが、プロセスの終了を検知する方法がなく、プロセス終了のタイミングでエントリを削除することができない。
【００７５】
そこで、第二の実施例では、第一の実施例にエントリを明示的に削除してよいかどうかを判断するための情報を管理するための構造、手順を追加し、登録を行ったエントリを自動的に削除する方法・構成について開示する。
【００７６】
このため、本実施例では、第一の実施例におけるゲストRID−物理RIDマッピングテーブル１３７を、図１０に示すように拡張する。
【００７７】
テーブル１３７に新たな項目として追加された登録エントリ数１００１は、図１のシャドウTLB１１３において、物理RID４０２の値をTLBエントリのRID３０１の値として持つようなTLBエントリの数である。登録エントリ数１００１が０より大きい場合、対応付けられたエントリはCPUから参照される可能性があることを示す。逆に、CPUから参照される可能性がなくなった物理RID４０２を記録しているゲストRID−物理RIDマッピングテーブル１３７のエントリは、破棄することができる。
【００７８】
次に、本実施例において、ゲストRID−物理RIDマッピングテーブル１３７の登録エントリ数１００１を更新する手順を図１１のフローチャートに示す。下記の手順によって、ゲストRID−物理RIDマッピングテーブル１３７から削除される。
【００７９】
図６のステップ６０１と同様に、物理CPU１２が仮想化の例外を発生させる(ステップ１１０１)。
【００８０】
ステップ６０２と同様の方法で、仮想化エミュレーションプログラム１３１が仮想化例外を起こした要因を取得する。仮想化エミュレーションプログラム１３１はLPAR上のプログラムがシャドウTLB操作の実行、即ち、TLBエントリ登録、あるいはTLBエントリ削除の命令を検知して処理を中断したかどうかを検査し、該当する場合はTLBエミュレーション部１３３を実行する。(ステップ１１０２)
TLBエミュレーション部１３３は、図７のステップ７０３と同様の方法でRID変換部１３５を実行し、その実行結果として物理RIDを取得する。（１１０３）
TLBエミュレーション部１３３は、CPU１２のアーキテクチャに定められた規則にしたがって、更新対象となるシャドウTLBのエントリを選択する（ステップ１１０４）。
【００８１】
たとえば、前述のItanium（登録商標）のアーキテクチャの例では、ステップ１１０３で取得した物理RIDと、仮想化例外を起こしたLPARのTLB操作命令で指定された仮想アドレスの組を入力値としたハッシュ関数によってTLB中のインデックスを決定し、そのインデックスで指定されたエントリを選択する。
【００８２】
TLBエミュレーション部１３３は、ステップ１１０４で取得したシャドウTLBエントリに含まれる物理RIDを入力値として指定して、RIDテーブル更新部１３６にエントリ削除通知を出す。RIDテーブル更新部１３６は、このエントリ削除通知を受け取ると、ゲストRID−物理RIDマッピングテーブル１３７から前記ステップ１１０４で選択したエントリに含まれる物理RIDを物理RID４０２の値として持つエントリを検索して、検索の結果得られたエントリの登録エントリ数１００１の値を１つ減らす。 (ステップ１１０５)
ステップ１１０５の実行後に、登録エントリ数１００１が０になり、なおかつエントリ使用中フラグが０になった場合、RIDテーブル更新部１３６はステップ１１０７を実行する。そうでない場合はステップ１１０７をスキップしてステップ１１０８以降を実行する(ステップ１１０６)。
【００８３】
RIDテーブル更新部１３６は、ステップ１１０５で検索した結果得られたエントリで使用中フラグが０であるエントリを、前記ゲストRID−物理RIDマッピングテーブル１３７から削除する。（ステップ１１０７）
TLBエミュレーション部１３３は、ステップ１１０３で取得した物理RIDを入力値として指定して、RIDテーブル更新部１３６にエントリ登録通知を出す。RIDテーブル更新部１３６は、このエントリ登録通知を受け取ると、ゲストRID−物理RIDマッピングテーブル１３７から、ステップ１１０３で取得した物理RIDを物理RID４０２の値として持つエントリを検索して、検索の結果得られたエントリの登録エントリ数１００１の値を１つ増やす(ステップ１００８)。TLBエミュレーション部１３３は、ステップ１００４で選択したシャドウTLB１１３のエントリ、および、物理TLB１２２のエントリを、CPUのアーキテクチャで定められたとおりの内容に更新する(ステップ１１０９)。
【００８４】
以上詳述した実施例２の方法により、TLBエミュレーション部１３３は、ゲストRID−物理RIDマッピングテーブル１３７中に含まれるエントリの中で、シャドウTLB１１３から参照されなくなり、不要となったエントリを、自動的に削除することができるようになる。
【実施例３】
【００８５】
CPUのアーキテクチャによっては、TLBの全エントリ削除を行うオペレーションがある。上述したシャドウTLBを備える構成で、全エントリ削除のオペレーションをエミュレーションする場合は、オペレーションにおいて、すべてのシャドウTLBエントリを削除しなければならない。この処理には時間を要する。
【００８６】
第三の実施例においては、TLB全エントリ削除のエミュレーションを高速化するために、第二の実施例の構成および処理手順を更に拡張する。
【００８７】
すなわち、第三の実施例では、TLB全エントリ削除の時点で、該当するゲストIDに対するゲストRID−物理RIDマッピングテーブル１３７の全エントリをすべて無効化し、現在物理RRにセットされていた仮想RIDに対しては別の物理RIDを割り当てる。本手順により、無効化されたエントリに含まれる物理RIDは物理RRにセットされることがなくなり、前記物理RRを含むシャドウTLBのエントリは物理CPU１２から参照されなくなる。すなわち、削除されたのと同等の効果を持つ。
【００８８】
後の動作において前記の無効化された物理RIDを別のエントリに再割り当てして使用する場合、前記の再利用する物理RIDを使用していたTLBエントリの削除の処理を行わなければならない。しかし、前記の処理は特定の物理RIDに関するものだけでよく、一回のエミュレーション処理時間は、全エントリ削除と比較すると少なくなる。また、TLB全エントリ削除命令実行後に、別のTLB登録命令が、前記TLB全エントリ削除命令実行時に削除すべきであったエントリを別のエントリで上書きする可能性がある。この場合、無効なエントリは有効なエントリに上書きされて自動的に削除されたことになるので、該当エントリをあらためて削除する必要はなくなる。そのため、削除しなければならない総エントリ数も少なくなる。このように、削除を遅延させることにより一回あたりのエミュレーションの処理時間、および、総処理時間を下げることができる。
【００８９】
本実施例では、ゲストRID−物理RIDマッピングテーブル１３７を拡張する。図５にその拡張例を示す。
【００９０】
図１２５のゲストRID−物理RIDマッピングテーブル１３７の各エントリは、更に項目として世代番号１２０１を持つ。この世代番号１２０１は、図１２に示すハイパーバイザ１３の持つ有効世代番号１２０２と同一であるときのみ、該エントリは有効であることを示す。
【００９１】
本実施例において、TLB全エントリ削除命令のエミュレーション処理を行う場合の処理を図１３のフローチャートを用いて説明する。
【００９２】
TLBエミュレーション部１３３はRIDテーブル更新部１３６にゲストRID―物理RIDマッピングテーブル１３７全削除命令を出す。
【００９３】
RIDテーブル更新部１３６は、ゲストRID−物理RIDマッピングテーブル１３７のエントリ使用中フラグ４０４が１であるすべてのエントリ(以下エントリBと呼ぶ)に対してステップ１３０２〜ステップ１３０５を実行する（ステップ１３０１）。
【００９４】
RIDテーブル更新部１３６は図８のステップ８０１と同一の方法で未使用物理RIDを選択する。ただし、世代番号１２０１が有効世代番号１２０２とは異なるエントリは無効であるとし、エントリが存在しないものとして扱う。(ステップ１３０２)
RIDテーブル更新部１３６は、エントリBの物理RID４０２を、前記ステップ１３０２で選択した未使用物理RIDの値に変更し(ステップ１３０３)、エントリBの世代番号１２０１に１加える(ステップ１３０４)。また、RIDテーブル更新部１３６は、前記ステップ１３０２で選択した未使用物理RIDの値をTLBエミュレーション部１３３に通知する。
【００９５】
TLBエミュレーション部１３３は対応する物理RR１２３の値を、ステップ１３０２で選択した未使用物理RIDの値に変更する(ステップ１３０５)
RIDテーブル更新部１３６は有効世代番号の値を１だけ大きくする(ステップ１３０６)。
【００９６】
また、図７のRID変換部１３５の処理、および、図８のRIDテーブル更新部１３６の処理において、ステップ７０１とステップ８０１では有効世代番号１２０２と世代番号１２０１が異なるエントリは存在しないものとして扱い、未使用物理RIDとして選択できるものとして扱う。しかし、世代番号が異なるエントリが存在する物理RIDを未使用物理RIDとして選択した場合は、ステップ８０４、およびステップ８０５のシャドウTLBクリアの処理を実行する。
【００９７】
また、図１１におけるTLBエミュレーション部の処理手順において、ステップ１１０３〜ステップ１１０９の処理では世代番号が異なるエントリも更新対象とする。
【００９８】
以上説明した第三の実施例により、図７、図８、図１１のRID管理部１３０により、エミュレーションを正しく行うことを保証しつつ、図１３に示す手順でTLB全エントリ削除命令のエミュレーション処理を行うことにより、TLB全エントリ削除の処理を高速化することができる。
【図面の簡単な説明】
【００９９】
【図１】本発明の第一の実施例に係るシステム構成を示す図である。
【図２】第一の実施例における計算機の構成例を示す図である。
【図３】TLBの一構成例を説明するための図である。
【図４】第一の実施例におけるゲストRID−物理RIDマッピングテーブルを示す図である。
【図５】第三の実施例におけるゲストRID−物理RIDマッピングテーブルの拡張例を示す図である。
【図６】第一の実施例におけるTLBエミュレーション部のフローチャートである。
【図７】第一の実施例におけるRID変換部の処理フローチャートである。
【図８】第一の実施例におけるRIDテーブル更新部の処理フローチャートである。
【図９】第一の実施例におけるハイパーバイザ１３の動作例を示す図である。
【図１０】第二の実施例におけるゲストRID−物理RIDマッピングテーブルの拡張例を示す図である。
【図１１】第二の実施例におけるTLBエントリ登録・TLBエントリ削除命令エミュレーション時の処理フローチャートである。
【図１２】第三の実施例におけるハイパーバイザ１３が持つ有効世代番号の一例を示す図である。
【図１３】第三の実施例におけるTLB全エントリ削除命令エミュレーション時の処理フローチャートである。
【符号の説明】
【０１００】
１０…計算機、
１１…LPAR、
１２…物理CPU、
１３…ハイパーバイザ、
１１１…ゲストOS、
１１２…シャドウCPU、
１１３…シャドウTLB、
１１４…シャドウRR、
１１５…ゲストPT、
１２１…CPU仮想化部、
１２２…物理TLB、
１２３…物理RR、
１３０…RID管理部、
１３１…仮想化エミュレーションプログラム、
１３２…命令エミュレーション部、
１３３…TLBエミュレーション部、
１３５…RID変換部、
１３６…RIDテーブル更新部、
１３７…ゲストRID−物理RIDマッピングテーブル。
【図１】
0005091655.tif 000002
【図２】
0005091655.tif 000003
【図３】
0005091655.tif 000004
【図４】
0005091655.tif 000005
【図５】
0005091655.tif 000006
【図６】
0005091655.tif 000007
【図７】
0005091655.tif 000008
【図８】
0005091655.tif 000009
【図９】
0005091655.tif 000010
【図１０】
0005091655.tif 000011
【図１１】
0005091655.tif 000012
【図１２】
0005091655.tif 000013
【図１３】
0005091655.tif 000014