JP6242502B2 - 仮想計算機システムの制御方法及び仮想計算機システム - Google Patents

仮想計算機システムの制御方法及び仮想計算機システム Download PDF

Info

Publication number
JP6242502B2
JP6242502B2 JP2016556137A JP2016556137A JP6242502B2 JP 6242502 B2 JP6242502 B2 JP 6242502B2 JP 2016556137 A JP2016556137 A JP 2016556137A JP 2016556137 A JP2016556137 A JP 2016556137A JP 6242502 B2 JP6242502 B2 JP 6242502B2
Authority
JP
Japan
Prior art keywords
guest
address
hypervisor
physical
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016556137A
Other languages
English (en)
Other versions
JPWO2016067429A1 (ja
Inventor
俊臣 森木
俊臣 森木
直也 服部
直也 服部
貴之 今田
貴之 今田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2016067429A1 publication Critical patent/JPWO2016067429A1/ja
Application granted granted Critical
Publication of JP6242502B2 publication Critical patent/JP6242502B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1004Compatibility, e.g. with legacy hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/684TLB miss handling

Description

本発明は、仮想計算機システムに関する。
近年の半導体技術の進歩とプロセス微細化の進展により、CPUに搭載される演算コア(以下、CPUコア)は増加する傾向にあり、サーバ機向けのCPUでは15コア/ソケット以上の製品も存在する。1つの物理サーバでは、4ソケットの場合60コアとなり、また、8ソケットの場合は120コアものCPUコアが搭載される。
しかし、ユーザの用途やアプリケーションは単一、もしくは少数のコアにしか対応しない場合が多い。そこで、1つの物理サーバを複数の論理的な区画(Logical Partition,以下、LPAR)に分割し、LPAR毎にOS(ゲストOS)を稼働させる論理分割が普及している。
また、半導体の進歩はメモリの大容量化を招き、インメモリDBと呼ばれる新しいタイプのデータベースが台頭した。インメモリDBは、従来のDBと異なりDBデータをすべてメモリ上に格納するため、検索クエリに対して高速に応答することができる。このため、インメモリDBは、ビッグデータに対する多様な検索とBI(business intelligence)の高度化を実現している。今後は、LPAR上でインメモリDBを動作させるケースも増えると考えられる。
上述論理分割では、ハイパバイザと呼ばれるコンポーネントがCPUやメモリ、IO等の計算機資源を管理し、各LPARに計算機資源を分配している。ハイパバイザによる計算機資源の分配方法に着目すると、計算機資源は大別して、以下の2種類に分けられる。
(1)アドレス等により空間的に分配される占有資源(例:システムメモリ)。
(2)時間的に分割して複数のゲストOSで利用される共有資源(例:タイマ等のレガシーI/O)。
上記(1)に分類される占有資源の分配に関し、通常のゲストOSはゼロアドレスから開始されるメモリマップでないとブートできないOSが普及している。そこでサーバの論理分割においては、アプリケーションが認識する仮想アドレス(VA:Virtual Address)からゲストOSが認識するゲスト物理アドレス(GPA:Guest Physical Address)への変換(VA−>GPA)に加えて、ゲスト物理アドレスの物理的なメモリ位置を指定するホスト物理アドレス(HPA:Host Physical Address)への変換(GPA−>HPA)の2段階のアドレス変換を行う必要がある。
一方、上記(2)の共有資源の分配に関して、ゲストOSからの共有資源に対応するアクセスを検出し、複数のOSから共有されるデバイスを保護する必要がある。そこでハイパバイザは、共有資源に対応したアドレスへのアクセスを検出し、ゲストOSからの読み書き模擬(エミュレーション)する。
上記(2)の共有資源へのアクセスでは、ハイパバイザがゲスト物理アドレスGPAの特定範囲へのアクセスを検出する。特定範囲へのアクセスを検出すると、ハイパバイザは制御をエミュレーションに移して実行する機能を提供している。この呼び出し機能は、ハイパバイザのみが制御可能な特定のページテーブルの属性であるpresentビット(=0 or 1)を参照することで実現される。
上記(1)の2段階のアドレス変換については、CPUのハードウェアで支援する機能(仮想化支援機能VT−x等)が知られている。仮想化支援機能としては、例えば、x86系CPUでは、INTEL社のEPT(Extended Page Tables)や、AMD社のNPT(Nested Page Table)が知られている。
x86系CPUでは、まず、TLB(Translation Lookaside Buffer)で仮想アドレスからホスト物理アドレスへの変換を行うが、TLBミスが発生するとハードウェア(EPT)がページテーブルをたどって物理アドレスを得て、TLBに対して変換するアドレスをセットする。
x86系CPUを64bit化したx64アーキテクチャ(またはAMD64アーキテクチャ)ではアドレス空間が拡張されており、x64アーキテクチャのEPTでは、4段の多段ページテーブルを用いる。x64アーキテクチャでTLBミスが発生すると、EPTによるゲストOSのテーブルウォークは、各段ごとにハイパバイザのページテーブルを用いて物理アドレスに変換してからメモリアクセスを行う必要がある。このため。多段ページテーブル(PML4、PDP、PDE、PTE)が各4段(L1〜L4)場合は、ゲストOSのページテーブルの起点(先頭アドレス=CR3)の変換を含めると、最大で(1+4)×4=20回のメモリアクセスが必要である。
なお、PML4=Page Map Level 4、PDP=Page Directory Pointer、PDE=Page Directory entry、PTE=Page Table Entryである。また、AMD64アーキテクチャのCPUで、TLBミスが発生すると、NPTのハードウェアはゲストOSのページテーブルをたどってゲスト空間のアドレスを得る。NPTのハードウェアは、このアドレス空間を入力として、再度、VMMのページテーブルをたどって物理アドレスに変換する。NPTのハードウェアは、変換された物理アドレスをTLBに書き込む。このAMD64アーキテクチャのNPTについても、上述のEPTと同様であり、アドレス変換のオーバヘッドが発生する。
上記EPTでTLBミスした場合に、2段階のアドレス変換に起因するオーバヘッドを削減する方法として、パラバーチャル仮想化技術(Xen/DomUカーネル)や特許文献1が知られている。
パラバーチャル仮想化技術では、ゲストOSのメモリ管理モジュールを改変し、非ゼロアドレスから開始されるGPAアドレス空間でもゲストOSを起動可能とする。本技術によれば、ゲストOSが管理するページテーブルにVA−>HPAの変換内容を格納し、上記EPTを無効化することができ、2段階のアドレス変換に関連するオーバヘッドを削減できる。
一方、特許文献1は、レジスタ常駐型変換技術であり、CPUがレジスタベースで少数のアドレス変換情報を保持する。ハイパバイザが本レジスタに対してGPA−>HPAのアドレス変換情報をセットアップすることで、EPTのページテーブル参照なしにVA−>HPAのアドレス変換を実現できる。
米国特許第5077654号
上述したEPTのページテーブル参照は、CPUのTLBミスを契機に発生する。そのため、参照するアドレス範囲が広いインメモリDBをLPAR上で稼働させる際には、TLBミスが発生しやすく、EPTのページテーブル参照によるオーバヘッドで、処理性能が低下する場合があった。なお、インメモリDBに限らず、メモリ上で広大なアドレス範囲をアクセスするアプリケーションをLPAR上で稼働させると、同様に処理性能を低下させる場合があった。
EPTのページテーブル参照のオーバヘッドを回避するには、ゲストOSのメモリ管理モジュールを改変するか、CPUにレジスタ常駐型変換技術を適用する必要がある。しかし、メモリ管理モジュールを改変するには、ソースコードが開示されて、かつ、改変が許可されている必要があり、バイナリ形式で提供されるOSには適用できない。また、上記x64アーキテクチャやAMD64アーキテクチャ等の既存のCPUに、上記特許文献1の技術を実装することは難しい。
したがって、既存のプロセッサである上記INTEL社のx64アーキテクチャのCPUを使用し、かつ、OSのメモリ管理モジュールの改変が許可されていないOS(または、物理サーバで使用可能なOS=0番地を含むアドレス空間で起動)を利用する場合、インメモリDB等のアクセス範囲の広いアプリケーションをLPAR上で稼働させると、処理性能を低下させる場合があった。
そこで本発明は、既存のCPUを使用する仮想計算機システムでゲストOSを改変することなく稼働させて、2段階のアドレス変換に起因するオーバヘッドを削減することを目的とする。
本発明は、プロセッサとメモリを含む物理計算機の計算機リソースを1以上の論理区画に割り当てるハイパバイザが、前記論理区画上で稼動するゲストOSとアプリケーションを制御する仮想計算機システムの制御方法であって、前記プロセッサは、前記論理区画に割り当てるユニークなゲスト物理アドレスを、前記仮想計算機システムでユニークなホスト物理アドレスに変換する第1のアドレス変換部と、前記アプリケーションが認識する仮想アドレスを、前記ゲスト物理アドレスへ変換する第2のアドレス変換部とを含み、前記制御方法は、前記ハイパバイザが、前記論理区画に割り当てる前記計算機リソースのサブセットを決定し、当該サブセットを前記論理区画に割り当てる第1のステップと、前記ハイパバイザが、前記サブセットのメモリに関して前記ゲスト物理アドレスとホスト物理アドレスの関係をアドレス変換情報として生成する第2のステップと、前記ハイパバイザが、前記アドレス変換情報で前記第1のアドレス変換部を有効化する第3のステップと、前記ハイパバイザが、前記ゲストOSの起動開始を指令する第4のステップと、前記ゲストOSが起動する第5のステップと、前記ハイパバイザが、前記ゲストOSの起動完了を取得する第6のステップと、前記ハイパバイザが、前記ゲストOSの起動が完了した後に、前記第1のアドレス変換部を無効化する第7のステップと、前記アプリケーションが実行を開始する第8のステップと、を含む。
本発明によれば、ゲストOSを改変することなく、既存のプロセッサを含む物理計算機でゲストOSをハイパバイザ上で稼働させて、2段階のアドレス変換に起因するオーバヘッドを削減することができる。
本発明の実施例を示し、仮想計算機システムの一例を示すブロック図である。 本発明の実施例を示し、ハイパバイザで行われる処理の一例を示すフローチャートである。 本発明の実施例を示し、物理アドレス空間及び仮想アドレス空間の一例を示すメモリマップである。 本発明の実施例を示し、資源割当情報の一例を示す図である。 本発明の実施例を示し、LPAR属性情報の一例を示す図である。 本発明の実施例を示し、ゲストページテーブルと仮想アドレスの関係を示すブロック図である。 本発明の実施例を示し、ゲストページテーブルのフォーマットを示す図の前半部である。 本発明の実施例を示し、ゲストページテーブルのフォーマットを示す図の後半部である。 本発明の実施例を示し、ホストページテーブルと仮想アドレスの関係を示すブロック図である。 本発明の実施例を示し、ホストページテーブルのフォーマットを示す図の前半部である。 本発明の実施例を示し、ホストページテーブルのフォーマットを示す図の後半部である。 本発明の実施例を示し、ハイパバイザで行われるEPTの無効化処理の一例を示すフローチャートである。 本発明の実施例を示し、HPETレジスタのフォーマットの一例を示す図である。 本発明の実施例を示し、LPARを設定する画面の一例を示す画面イメージである。 本発明の実施例を示し、LPARのマイグレーションを行った後の物理計算機のメモリマップである。
以下、本発明の実施例について添付図面を用いて説明する。
図1は、本発明の実施例を示し、仮想計算機システムの一例を示すブロック図である。物理計算機241a〜241cでは、ハイパバイザ210上で稼働するゲストOS226a、226bが仮想計算機として提供される。物理計算機241a〜241cはデータセンタ(図中、DC)内ネットワーク231に接続される。
データセンタ内ネットワーク231は外部ネットワーク233に接続される。外部ネットワーク233に接続された図示しない計算機から、物理計算機241a〜241cのゲストOS226a、226bまたはアプリケーション227a、227bを利用することができる。
また、データセンタ内ネットワーク231には、物理計算機241a〜241cの論理区画(LPAR)221a、221bやゲストOS226a、226bを制御するLPARマネージャ232と、ゲストOS226a、226b上で稼働するアプリケーション227a、227bを制御するアプリケーションマネージャ230と、プログラムやデータを格納するストレージサブシステム245が接続される。なお、LPARマネージャ232と、アプリケーションマネージャ230は、それぞれ入力装置と表示装置を備えた計算機で構成される。
以下の説明では、物理計算機241a〜241cの総称を、添え字a〜cのない符号241で表す。他の構成要素についても同様であり、構成要素の総称を、添え字のない符号で表す。
<計算機の構成>
本発明を実施する物理計算機241a〜241cについて、図1を参照しながら説明する。なお、物理計算機241a〜241cは同様の構成であるので、以下では物理計算機241aについて説明する。
物理計算機241aは、物理計算機資源201として物理CPU202a〜202dと、物理メモリ203a〜203dと、LPAR221へ占有割当を行うI/Oデバイス204a、204cと、複数のLPAR221で共有割当を行うI/Oデバイス205と、を含む。
占有割当を行うI/Oデバイス204a、204cは、例えば、NIC(Network Interface Card)やHBA(Host Bus Adapter)である。また、複数のLPAR221で共有割当を行うI/Oデバイス205としては、物理計算機資源201に含まれるHPET(High Precision Event Timer:高精度イベントタイマ)等のタイマが含まれる。
なお、物理CPU202aは、1つのソケットに複数のCPUコアを含むマルチコアCPUで構成され、物理CPU202b〜202dもそれぞれソケット単位で示す。以下では、物理CPU202a〜202dとして、前記従来例に示したx64アーキテクチャの仮想化支援機能(EPT等)を有するCPUを採用した例を示す。
本実施例では、物理計算機241aの物理計算機資源201を2つのLPAR221a、221bへ割り当てる。このため、LPAR221a(LPAR#1)に割り当てる物理計算機資源201をサブセット206aとし、LPAR221b(LPAR#2)に割り当てる物理計算機資源201をサブセット206bとする。
サブセット206aは、物理CPU202a、202bと、物理メモリ203a、203bと、占有割当を行うI/Oデバイス204aと、共有割当を行うI/Oデバイス205と、を含む。サブセット206bは、物理CPU202c、202dと、物理メモリ203b、203dと、占有割当を行うI/Oデバイス204cと、複数のLPAR221に共有割当を行うI/Oデバイス205と、を含む。
なお、物理メモリ203a〜203dの所定の予約領域にはハイパバイザ210がロードされて、所定の契機で物理CPU202a〜202dによって実行される。ハイパバイザ210は、LPARマネージャ232からの指令に応じて、物理計算機資源201からサブセット206a、206bを取得して、LPAR221a、221bへ割り当てる。そして、ハイパバイザ210は、LPAR221a、221bでそれぞれゲストOS226a、226bを起動させる。
各LPAR221a、221bのゲストOS226a、226bは、アプリケーションマネージャ230からの指令に応じてアプリケーション227a、227bをそれぞれ稼働させる。なお、本実施例では、2つのLPAR221をハイパバイザ210が物理計算機資源201に割り当てる例を示したが、任意の数のLPAR221及びゲストOS226と、任意の数のアプリケーション227を稼働させることができる。
ここで、ハイパバイザ210の各機能部はプログラムとして物理メモリ203にロードされ、物理CPU202によって実行される。物理CPU202は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、物理CPU202は、ハイパバイザプログラムに従って処理を実行することでハイパバイザ210として機能する。他のプログラムについても同様である。さらに、物理CPU202は、各プログラムで実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
ハイパバイザ210の各機能を実現するプログラム、テーブル等の情報は、ストレージサブシステム245や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
<ハイパバイザ及びLPARの構成>
次に、ハイパバイザ210は、ゲストOS226及びアプリケーション227の実行を制御するCPU仮想化制御部211と、物理計算機資源201のサブセット206をLPAR221に割り当てるリソース管理部212とを含む。
リソース管理部212は、サブセット206aの物理CPU202a、202bを仮想CPU222a、222bとしてLPAR221aに割り当てる。リソース管理部212は、物理メモリ203a、203bを仮想メモリ223a、223bとしてLPAR221aに割り当てる。リソース管理部212は、I/Oデバイス204aをLPAR221aに占有させて割り当てる。また、リソース管理部212は、物理的なI/Oデバイス205を仮想I/Oデバイス225aとしてLPAR221aとLPAR221bに共有させて割り当てる。同様に、リソース管理部212は、サブセット206bの物理資源を、仮想化した資源としてLPAR221bに割り当てる。
リソース管理部212は、物理計算機資源201とLPAR221に割り当てた仮想計算機資源を管理する資源割当情報215(図4A)と、LPAR221の属性を管理するLPAR属性218(図4B)とを含む。
本発明では、ハイパバイザ210がいずれかひとつのLPAR221を高速モード(Fast mode)で稼働させることができ、LPAR属性218によって高速モードで稼働させるLPAR221を特定する。
CPU仮想化制御部211は、物理CPU202のハードウェアによる仮想化支援機能を利用してゲストOS226及びアプリケーション227を管理する仮想化制御部216と、仮想化支援機能のEPT(Extended Page Tables)を利用してゲスト物理アドレス(GPA:Guest Physical Address)をホスト物理アドレス(HPA:Host Physical Address)に変換するホストページテーブル制御部213と、を含む。
仮想化制御部216は、ゲスト状態エリアとホスト状態エリアを含むVMCS(Virtual Machine Control Structure)217によって、ハイパバイザ210と、ゲストOS226またはアプリケーション227の状態を管理する。なお、VMCS217の詳細については、Intel(R) 64 and IA-32 Architectures Software Developer Manuals (Sep 2014, 253668-052US)に記載されているとおりである。
ホストページテーブル制御部213は、上述のEPTの生成、メンテナンスを行い、物理CPUがホストページテーブル214(第1のアドレス変換部)に格納したゲスト物理アドレス(GPA)とホスト物理アドレス(HPA)によってアドレス変換を行う。
また、ホストページテーブル制御部213は、前記従来例で述べたように、共有割当とした仮想I/Oデバイス225a、225bにゲストOS226a、226bからのアクセスを検知すると、所定のエミュレーションを行って物理的なI/Oデバイス205に対する操作を実行する。
具体的には、ハイパバイザ210は、ホストページテーブル214において、共有資源のI/Oデバイス205のMMIOを割り当てたアドレスのプレゼンスビットを"0"に設定する。ゲストOS226が当該アドレスにアクセスすると例外となって、ハイパバイザ210に制御が移るVM−exitが発生する。仮想化支援技術を適用した物理CPU202では、ハイパバイザ210に制御が移るモードを、VMXルートモードとし、ゲストOS226に制御が移るモードを、VMXノンルートモード(またはゲストモード)とする。
ハイパバイザ210の仮想化制御部216は、VM−exitの発生要因がMMIOの例外であるので、I/Oデバイス205でエミュレーションを実行する。これにより、複数のLPAR221に直接I/Oデバイス205を操作させるのを防いで、共有を実現する。
なお、ハイパバイザ210からゲストOS226へ制御を移す契機は、VM−entry命令の実行である。
図1において、ハイパバイザ210がサブセット206aを割り当てたLPAR221aでは、ゲストページテーブル228aを含むゲストOS226aが稼働する。そして、ゲストOS226aではアプリケーション227aが稼働する。
ゲストページテーブル228a(第2のアドレス変換部)は、アプリケーション227aが認識する仮想アドレス(VA:Virtual Address)とゲストOS226aが認識するゲスト物理アドレス(GPA)を変換する。ゲストOS226aは、229論理F/W(FirmWare:BIOSもしくはEFI)からゲスト物理アドレスの配置情報を取得する。
同様に、ハイパバイザ210がサブセット206bを割り当てたLPAR221bでは、ゲストページテーブル228bを含むゲストOS226bが稼働する。そして、ゲストOS226bではアプリケーション227bが稼働する。
上述したハイパバイザ210のホストページテーブル制御部213は、EPTの生成、メンテナンスを行う。物理CPUはEPTが有効の場合には、ゲストOS226からゲスト物理アドレス(GPA)を受け付けると、ホストページテーブル214を参照して、ホスト物理アドレス(HPA)を取得して物理メモリ203へのアクセスを実現する。
なお、物理CPU202のEPTを利用するには、VMCS217のVM−execution control fieldの"enable EPT"に所定値、例えば、"1"をセットすることで利用可能となる。なお、"enable EPT"に"0"を設定した場合、EPTは無効化される。
<アドレス空間>
図3は、ハイパバイザ210が管理する物理アドレス空間及び仮想アドレス空間の一例を示すメモリマップである。図3は、物理計算機241aのアドレス空間の一例を示す。
ハイパバイザ210は、物理メモリ203のアドレス空間であるホスト物理アドレス(HPA)の0〜62GBまでをLPAR221a、221bに割り当てる。また、ハイパバイザ210は、ホスト物理アドレスの62GB以降64GBまでを、自身が使用する予約領域とする。
なお、ハイパバイザ210は、LPAR221bのホスト物理アドレス=2GB〜4GBの領域をゲスト物理アドレス=2GB〜4GBの領域に割り当てて共有させる。ゲスト物理アドレス=2GB〜4GBの領域のうち、共有資源のアドレスに関しては後述のホストPT中の存在ビット(presence bit)を無効化(0)に設定し直接のアクセスを禁止する。
ハイパバイザ210は、LPAR221aをホスト物理アドレスの0〜2GBと4GB〜32GBまでの範囲に割り当てる。ホスト物理アドレスの2GB以降4GB未満の領域は、共有資源のMMIOなどに割り当てるI/O空間(非メモリ領域)として設定し、I/Oデバイス205のMMIO等が割り当てられる。上記非メモリの領域(ゲスト物理アドレス=2〜4GB)の領域のうち、共有資源のアドレスに関しては後述のホストPT中の存在ビット(presence bit)を無効化(0)に設定し直接のアクセスを禁止する。そして、ハイパバイザ210は、LPAR221をホスト物理アドレスの2GB以降62GBまでの範囲に割り当てる。
次に、ゲストOS226aが認識するゲスト物理アドレス(GPA)は、0〜2GBと4GB〜32GBまでの範囲に割り当てられる。ゲストOS226aのゲスト物理アドレスは、ホスト物理アドレスと同一となる。そして、ゲスト物理アドレスの2GB以降4GB未満の領域はI/O空間として設定される。
ゲストOS226bが認識するゲスト物理アドレスは、0〜2GBと4GB〜32GBまでの範囲に割り当てられる。ゲストOS226bのゲスト物理アドレスは、ホストページテーブル214で変換されて、LPAR221aが使用する終端アドレスの32GB以降から62GBまでのホスト物理アドレスとなる。ゲストOS226bに割り当てられた共有資源のI/O空間(2GB〜4GB)は、ゲストOS226aと同一のホスト物理アドレスの2GB〜4GBである。
次に、LPAR221aのアプリケーション227aが認識する仮想アドレス(VA)は、ゲストOS226aが割り当てた0〜最大値までの領域となる。仮想アドレス(VA)とゲスト物理アドレスの変換は、ゲストOS226aのゲストページテーブル228aによって変換される。LPAR221bのアプリケーション227bが認識する仮想アドレスも、LPAR221aのアプリケーションと同様であり、ゲストOS226bが割り当てた0〜最大値までの領域となる。
図3において、ホスト物理アドレス=0から割り当てられたゲストOS226aは、ゲスト物理アドレス=ホスト物理アドレスであるので、ホストページテーブル214を使用せずに物理メモリ203へアクセスすることになる。
一方、ゲストOS226bは、ホスト物理アドレスに割り当てられるホスト物理アドレスの領域は、LPAR221aの分だけオフセットする。このため、ゲスト物理アドレスとホスト物理アドレスの変換は、ホストページテーブル制御部213のホストページテーブル214を用いて行われる。
以上のように、LPAR221aは、ゲスト物理アドレスとホスト物理アドレスが同一でホストページテーブル214による変換が不要なアドレス空間に割り当てられる。一方、LPAR221bは、ゲスト物理アドレスに対応するホスト物理アドレスは、ホストページテーブル214による変換が必要なアドレス空間に割り当てられる。
したがって、ホスト物理アドレスが0から割り当てられたLPAR221aのゲストOS226a及びアプリケーション227aは、物理CPU202のEPTによるオーバヘッドのない高速なメモリアクセスを実現することが可能である。
また、共有割当を行う物理的なI/Oデバイス205のMMIOは、ホスト物理アドレスの共有資源のI/O空間(2GB〜4GB)に割り当てられる。各LPAR221a、221bの仮想I/Oデバイス225a、225bは同一のゲスト物理アドレスに割り当てることで共有割当が行われる。ただし、共有割り当てされたI/Oデバイス205については、LPAR#2(221b)からの直接アクセスは許可しない。本制御は、後述するホストPT(214)中の存在ビット(presence bit)で実現される。
<テーブル>
次に、ハイパバイザ210が管理する情報について説明する。図4Aは、資源割当情報215の一例を示す図である。ハイパバイザ210が管理する資源割当情報215は、CPU割当情報410と、メモリ割当情報420と、I/O割当情報430の3つのテーブルを含む。
CPU割当情報410は、物理CPU202とLPAR221の割り当ての関係を保持する。CPU割当情報410は、物理CPU202のソケット番号を格納するCPU Socket#4101と、物理CPUコアの番号を格納するCPUcore#4102と、割り当ての状態を格納するMode4103と、当該物理CPU202が割り当てられたLPAR221の番号を格納するLPAR#4104がひとつのエントリに含まれる。
図示の例では、ソケット番号0、1の物理CPU202a、202bの全てのコア0〜7がLPAR#1(221a)に割り当てられ、ソケット番号2、3の物理CPU202c、202dの全てのコア8〜15がLPAR#2(221b)に割り当てられたことを示す。
メモリ割当情報420は、ホスト物理アドレスに割り当てたLPAR221等を管理する。メモリ割当情報420は、ゲスト物理アドレスのベースアドレスを格納するGPA base4201と、ホスト物理アドレスのベースアドレスを格納するHPA base4202と、割り当てられた領域の長さを格納するLength4203と、当該ホスト物理アドレスに割り当てられたLPAR221の番号を格納するLPAR#4204をひとつのエントリに含む。図示の例では、図3に示したホスト物理アドレス及ぶゲスト物理アドレスのアドレス空間を示す。
GPA base4201が"−1"のエントリは、LPAR221以外に割り当てられた領域を示し、例えば、共有資源のI/O空間やハイパバイザ210のプライベート領域である。
なお、LPAR#4204が"0"のエントリは、LPAR221を割り当てない領域を示し、例えば、共有資源のI/O空間である。なお、LPAR#4204が"−1"のエントリは、LPAR221を割り当てない予約領域で、例えば、ハイパバイザ210のプライベート領域である。
I/O割当情報430は、物理計算機241aのI/Oデバイス204a、204c、205を割り当てたLPAR221を管理する情報である。I/O割当情報430は、I/OデバイスのPCIデバイス番号を格納するBDN#4301と、I/Oデバイスの種別を格納するType4302と、当該I/Oデバイスに割り当てたMMIOのアドレスを格納するMMIO4303と、当該I/Oデバイスの割り当て状態を格納するMode4304と、当該I/Oデバイスを割り当てたLPAR221の番号を格納するLPAR#4305とをひとつのエントリに含む。
なお、Mode4304には、占有または共有の他、未割当の状態のいずれかが設定される。
図示の例では、LPAR#4305=1(221a)に占有で割り当てられたI/Oデバイス204aがFC−NICで、LPAR#4305=2(221b)に占有で割り当てられたI/Oデバイス204cがFC−NICであることを示す。また、HPETは、物理計算機241aの特定の共有資源で、LPAR#1、2に共有割当されたことを示す。また、HPETは、物理計算機241aのオンボードデバイスであるので、BDN#4301は"−"となる。
図4Bは、LPAR属性218の一例を示す図である。LPAR属性218は、ハイパバイザ210が生成したLPAR番号440のエントリと、高速モードを示すエントリ441を含む。図示の例では、エントリ441に"1"が設定されたLPAR#1(221a)が高速モードで稼働することを示す。なお、高速モードは、後述するように,EPTを無効化してゲストOS226がホスト物理アドレスに直接アクセス可能な稼働モードである。一方、エントリ441の値が"0"LPAR221は、EPTを有効にしてホストページテーブル214を利用する通常モードで稼働する。
ただし、高速モードでは、ゲストOS226のゲスト物理アドレスに対応するホスト物理アドレスに直接アクセス可能ではあるが、共有資源を割り当てるI/O空間についてはハイパバイザ210の管理下にある。このため、ゲストOS226はI/O空間への直接のアクセスが制限される。
図5Aは、ゲストOS226aが管理するゲストページテーブル228aと仮想アドレスの関係を示すブロック図である。なお、ゲストOS226bのゲストページテーブル228bも同様であるので、重複した説明を省略する。
図示の例は、4Kバイトのページでアドレスを管理する場合であり、アプリケーション227aが認識する仮想アドレス(VA)501は、48ビットで表現される。仮想アドレス(VA)501をゲスト物理アドレス(GPA)511に変換するゲストページテーブル228aは、前記従来例でも述べたように、4段のテーブルを有する。
ゲストページテーブル228aのゲスト物理アドレス(先頭アドレス)は、VMCS217のゲスト状態エリアのCR3制御レジスタ531に格納される。ゲストページテーブル228aでは、このアドレスをゲストページテーブル228aの起点として仮想アドレス(VA)501からゲスト物理アドレス(GPA)511への変換が行われる。
仮想アドレス(VA)501は、39〜47ビットのPML4(Page Map Level 4)と、30〜38ビットのPage Directory Pointerと、21〜29ビットのPage Directoryと、12〜20ビットのPage Tableと、0〜11ビットのOffsetを含む。
ゲストページテーブル228aは、CR3制御レジスタ531のアドレスを起点として、PML4=Page Map Level 4のエントリ(PML4E)からPage Directory Pointer Tableのエントリ(PDPTE)と、Page Directoryのエントリ(PDE)と、Page Tableのエントリ(PTE)を辿って、ゲスト物理アドレス(GPA)511を得る。なお、CR3制御レジスタ531〜ページテーブルの参照はNested Pagingと呼ばれ、各テーブルがL1〜L4の4段で構成される。このため、前記従来例で述べたように、全てのテーブルを辿ると20回のメモリアクセスが発生することになる。
図5B、図5Cは、ゲストページテーブル228aのフォーマットを示す図である。PML4エントリフォーマット551と、PDPTEフォーマット552と、PDEフォーマット553と、PTEフォーマット554は、64ビットの内、0ビットがプレゼンスビット541で、1〜63ビットが制御情報542である。
プレゼンスビット541は、上述のように"0"を設定しておくことで、ゲストOS226のアクセス時にVM−exitを発生させて、ハイパバイザ210でエミュレーションを実施させることができる。また、制御情報542は、アドレスオフセットや、リードやライトの可否などを設定することができる。
なお、上記ページモードは、物理CPU202のCR0.PG、CR4.PAE、IA32_EFER.LMEの制御レジスタ(図示省略)によって有効化することができる。
図6Aは、ハイパバイザ210が管理するホストページテーブル214とゲスト物理アドレス(GPA)の関係を示すブロック図である。
図示の例は、4Kバイトのページでアドレスを管理する場合であり、ゲストOS226aが認識するゲスト物理アドレス(GPA)601は、48ビットで表現される。ゲスト物理アドレス(GPA)601をホスト物理アドレス(HPA)611に変換するホストページテーブル214は、前記従来例でも述べたように、4段のテーブルを有する。
ホストページテーブル214のホスト物理アドレス(先頭アドレス)は、VMCS217のホスト状態エリアのEPTポインタに格納される。ホストページテーブル214では、このアドレスを起点としてゲスト物理アドレス(GPA)601からホスト物理アドレス(HPA)611への変換が行われる。
ゲスト物理アドレス(GPA)601は、上記図5Aの仮想アドレスと同様に、39〜47ビットのPML4と、30〜38ビットのPage Directory Pointerと、21〜29ビットのPage Directoryと、12〜20ビットのPage Tableと、0〜11ビットのOffsetを含む。
ホストページテーブル214は、EPTポインタのアドレスを起点として、PML4のエントリ(PML4E)からPDPTのエントリ(PDPTE)と、PDのエントリ(PDE)と、PTのエントリ(PTE)を辿って、ホスト物理アドレス(HPA)611を得る。なお、EPTポインタ〜ページテーブルの参照は上述のNested Pagingであり、ゲストページテーブル228と同様に、各テーブルがL1〜L4の4段で構成される。このため、前記従来例で述べたように、全てのテーブルを辿ると20回のメモリアクセスが発生することになる。
図6B、図6Cは、ホストページテーブル214のフォーマットを示す図である。PML4エントリフォーマット651と、PDPTEフォーマット652と、PDEフォーマット653と、PTEフォーマット654は、64ビットの内、0ビットがプレゼンスビット641で、1〜63ビットが制御情報642である。これらの情報は図5B,図5Cのゲストページテーブル228aと同様である。
なお、上記EPTは、VMCS217内のVM−execution control fieldの"enable EPT"に"1"をセットしてホストページテーブル214を指定することで有効化される。
<ハイパバイザの処理>
図2は、ハイパバイザ210で行われる処理の一例を示すフローチャートである。この処理は、LPAR221を生成または稼働(activate)させるときに実行される。例えば、ハイパバイザ210がLPARマネージャ232からLPARの生成要求(または稼働要求)と設定ファイルを受け付けたときに、本処理が開始される(101)。なお、本実施例では、設定ファイルにはLPARに必要なリソースの情報に加えて、LPARの稼働モード(LPAR属性)が高速モードと通常モードの何れであるかを示す情報が付加される。
ステップ102では、ハイパバイザ210が設定ファイルを読み込んで、LPARに必要なリソースとLPARの稼働モードを取得する。ステップ103で、ハイパバイザ210は上記取得したリソースと稼働モードに基づいて、ハードウェアリソースとソフトウェアリソースを決定する。ハイパバイザ210は、資源割当情報215を参照して、空きリソースから新たなLPARへ割り当てるリソースを決定する。
ハイパバイザ210は、新たにLPARを割り当てる場合、稼働モードが高速モードであれば、ホスト物理アドレスが0番地から開始されるアドレス空間を当該LPARに割り当てる。一方、稼働モードが高速モードで、ホスト物理アドレスが0番地から割り当てることができない場合は、この段階では、空いているホスト物理アドレスに当該LPARを割り当てる。
ハイパバイザ210は、新たなLPARに割り当てたリソースを資源割当情報215に設定し、また、当該LPARの稼働モードをLPAR属性218に設定する。
次に、ステップ104で、ハイパバイザ210は、新たなLPARを割り当てたホスト物理アドレスとゲスト物理アドレスの関係を、ホストページテーブル214に設定する。ここで、ハイパバイザ210は、新たなLPARに割り当てる物理計算機資源201のサブセット206の物理メモリ203に関するゲスト物理アドレスとホスト物理アドレスのアドレス変換情報を生成し、ページテーブル(PTE)とする。
また、新たなLPARにI/Oデバイス205を共有で割り当てる場合には、ハイパバイザ210が当該I/Oデバイス205のMMIOに対応するホスト物理アドレスのプレゼンスビットを"0"に設定する。
そして、ステップ105で、ハイパバイザ210はVMCS217のVM−execution control fieldの"enable EPT"に"1"を設定し、ホストページテーブル214を指定することでEPTを有効化する。すなわち、ハイパバイザ210は、ステップ104で生成したアドレス変換情報でホストページテーブル214を有効化する。
ステップ106で、ハイパバイザ210は、ストレージサブシステム245からゲストOS226のブートイメージを読み込んで、ゲストOS226のローダを起動する。ハイパバイザ210はVM−entry命令を実行してVMXノンルートモードに切り替えて、新たなLPARでゲストOS226を起動させる。
ゲストOS226は、論理ファームウェア229から提供されるシステムメモリの配置情報にしたがってゲストページテーブル228aを生成し、ゲスト物理アドレス空間中の2GB〜4GBの領域をI/O空間として、0〜2GB、4〜32GBをシステムメモリ領域として認識する。
次に、ステップ107では、ハイパバイザ210が、新たなLPARでゲストOS226の起動が完了したかを判定する。この判定は、アプリケーションマネージャ230が物理計算機241aのゲストOS226を監視して、起動が完了したことを検出するとハイパバイザ210に通知する。ハイパバイザ210がこの通知を受信したときにゲストOS226の起動が完了したと判定することができる。
あるいは、起動が完了した後のゲストOS226に、VMCALL命令を実行させてVMXルートモードへ移行させることで、ハイパバイザ210にゲストOS226の起動完了を検知させても良い。
次に、ステップ108では、ゲストOS226からハイパバイザ210へ制御を移して、ハイパバイザ210が物理CPU202のEPTを無効化する。まず、ゲストOS226にVMCALL命令等を実行させてVMXルートモードへ移行させる。その後、ハイパバイザ210は、VMCS217のVM−execution control fieldの"enable EPT"に"0"を設定し、EPTを無効化する。この処理については、図7で詳述する。
EPTを無効化することで、ホスト物理アドレスの0番地から割り当てられた高速モードのLPAR221は、ゲスト物理アドレスからホスト物理アドレスへの変換を行う必要がないので、ゲストOS226やアプリケーション227がメモリアクセスを高速に行うことができる。特に、TLBミスが発生してもホストページテーブルへのアクセスがなくなるため、前記従来例のようなEPTによる処理性能の低下を防ぐことができる。
また、EPTを有効化している期間でゲストOS226の起動を行うことにより、共有割当を行うI/Oデバイス205へのMMIOアドレスをハイパバイザが処理(エミュレーション)することができ、他のゲストからのアクセスと競合することなく、物理計算機241の仮想化環境を正確に設定することができる。
次に、ステップ109では、ハイパバイザ210がVM−entry命令を実行してVMXノンルートモードへ移行した後、ゲストOS226は、アプリケーションマネージャ230からの指令に応じてアプリケーション227の実行を開始する。
なお、アプリケーション227の実行開始の指令は、アプリケーションマネージャ230だけではなく、ゲストOS226やハイパバイザ210が指令するようにしてもよい。
ステップ110では、アプリケーションマネージャ230が、高速モードで稼働するLPAR221上のアプリケーション227の終了を検知する。アプリケーションマネージャ230は、ゲストOS226上のアプリケーション227が終了すると、ゲストOS226にVMCALL命令等を実行させてVMXルートモードへ移行させ、ハイパバイザ210に制御を移す。
なお、アプリケーションマネージャ230によるアプリケーション227の終了の検知は、処理が終了するとアプリケーション227がアプリケーションマネージャ230へ通知するようにしてもよい。あるいは、アプリケーションマネージャ230が周期的にアプリケーション227の終了を監視するようにしても良い。
また、アプリケーション227の終了後にハイパバイザ210へ制御を移す際には、処理が終了するとアプリケーション227がゲストOS226にVMCALL命令等を実行させてVMXルートモードへ移行させてもよい。
次に、ステップ111では、ハイパバイザ210が、EPTを再度有効化させる。すなわち、ハイパバイザ210はVMCS217のVM−execution control fieldの"enable EPT"に"1"を設定し、ホストページテーブル214を指定して再度有効化する。
ステップ112では、ハイパバイザ210がゲストOS226をシャットダウンさせて、当該LPARを不活性化する(113)。換言すれば、ゲストOS226は、ハイパバイザ210からシャットダウンの指令を受け付けて終了する。
なお、ゲストOS226のシャットダウンは、LPARマネージャ232からの指令に応じて行うことができる。例えば、ハイパバイザ210がEPTの再有効化が完了したことをLPARマネージャ232に通知し、LPARマネージャ232はこの通知の受信後に、ゲストOS226にシャットダウンを指令することができる。
次に、上記ステップ108で行われるEPTの無効化処理の詳細について説明する。図7は、ハイパバイザ210で行われるEPTの無効化処理の一例を示すフローチャートである。
ステップ811では、ハイパバイザ210が新たなLPAR(以下、当該LPAR)のLPAR属性218を参照し、エントリ441が"1"に設定された高速モードであるかを判定する。LPAR属性218のエントリ441が"1"であればステップ812へ進み、"0"であれば図7のフローチャートを終了する。
ステップ812では、ハイパバイザ210が当該LPARに割り当てたゲスト物理アドレス(GPA)とホスト物理アドレス(HPA)が同一(図3のLPAR221a)であるかを判定する。当該LPARに割り当てたゲスト物理アドレスとホスト物理アドレスが同一であればステップ818へ進む。一方、当該LPARに割り当てたゲスト物理アドレスとホスト物理アドレスが同一でない場合はステップ813へ進む。
ステップ813で、ハイパバイザ210は、当該LPARが認識するゲスト物理アドレス(GPA)のアドレスと同一のホスト物理アドレス(HPA)領域に存在するLPARを特定する。
すなわち、当該LPARのLPAR属性218が高速モードの場合、割り当てられたホスト物理アドレスが0番地を含んでいなければ、EPTを無効化できない。このため、ハイパバイザ210は、当該LPARをホスト物理アドレスの0番地から割り当てたときに、アドレスが重複する他のLPAR221を特定する。
ステップ814では、ハイパバイザ210が上記特定された他のLPARを他の物理計算機241b、241cにマイグレーションし、特定したLPARに割り当てられていたホスト物理アドレスを解放する。ハイパバイザ210は、資源割当情報215のメモリ割当情報420のうち、マイグレーションしたLPARのLPAR#4204に0(not allocated)を設定する。
なお、特定されたLPARのマイグレーションについては、ハイパバイザ210が、LPARマネージャ232へマイグレーションを依頼しても良い。あるいは、物理計算機241にリソースの余裕がある場合には、同一の物理計算機241内でマイグレーションを実施しても良い。また、他の物理計算機241でホスト物理アドレスの0番地から割り当てが可能であれば、高速モードで稼働させるLPARを他の物理計算機241へマイグレーションしてもよい。
ステップ815では、ハイパバイザ210が、上記解放されたホスト物理アドレスに、当該LPARのゲスト物理アドレスのデータをコピーする。つまり、ハイパバイザ210は、当該LPARのゲスト物理アドレスと同一のホスト物理アドレスにデータをコピーする。これにより、当該LPARは、ホスト物理アドレスの0番地からアドレス空間が割り当てられる。
ステップ816で、ハイパバイザ210は、資源割当情報215のメモリ割当情報420を更新する。ハイパバイザ210は、まず、メモリ割当情報420で当該LPARが当初割り当てられていた領域を解放する。その後、ハイパバイザ210は、当該LPARを再度割り当てるアドレス空間として、ゲスト物理アドレス(GPA)=ホスト物理アドレス(HPA)をメモリ割当情報420に設定する。そして、LPAR#4204には当該LPARの番号を設定する。
ステップ817では、ハイパバイザ210が、ホストページテーブル214を更新する。ハイパバイザ210は、ホストページテーブル214のうち、当該LPARが当初割り当てられていた変換情報(GPAとHPAの対)を削除する。その後、ハイパバイザ210は、当該LPARを再度割り当てるアドレスとして、ゲスト物理アドレス(GPA)=ホスト物理アドレス(HPA)をホストページテーブル214に設定する。
ステップ818では、ハイパバイザ210が、VMCS217の設定を変更してホストページテーブル214によるアドレス変換(EPT)を無効化する。これは、上述したように、ハイパバイザ210が、VMCS217のVM−execution control fieldの"enable EPT"に"0"を設定することである。
ステップ819では、ハイパバイザ210が、ホストページテーブル214に依存する機能をOFFにする。ホストページテーブル214に依存するVMCS217の機能としては、VPID enableやunrestriction guest等である。
ステップ820では、ハイパバイザ210が、特定のI/Oデバイス205(HPET)について、仮想I/Oデバイス204とI/Oデバイス205の状態を同期させる。当該LPARがLPAR#1(221a)の場合、ハイパバイザ210は、共有資源の仮想I/Oデバイス225aの内容を、I/Oデバイス205にコピーして同期させる。
I/Oデバイス205が、HPETの場合、図8で示すように、offset=0F0−0F7hのメインカウンタ値レジスタ(グローバルタイマカウンタ)が同期対象801である。ハイパバイザ210は、このグローバルタイマカウンタの値を仮想I/Oデバイス225aから読み込んで、I/Oデバイス205のグローバルタイマカウンタへ書き込むことで同期させる。なお、図8はHPETのレジスタフォーマット800を示す図である。
以上の処理によって、活性化するLPARのLPAR属性218が高速モードの場合、ゲスト物理アドレスとホスト物理アドレスが同一の領域に割り当てられ、さらに、共有資源のI/Oデバイス205と仮想I/Oデバイス204の同期も行われる。そして、EPTを無効化してゲストOS226及びアプリケーション227を実行することで、TLBミス時の2段アドレス変換のオーバヘッドを回避できる。
すなわち、当該LPARがLPAR#1(221a)の場合、図3で示すように、ゲスト物理アドレスとホスト物理アドレスが同一のアドレス空間にマップされる。このため、EPTを無効にしても、ゲストOS226aはホスト物理アドレスにアクセスすることができる。そして、ホスト物理アドレスの起点が0番地であるので、物理計算機241で起動可能なOSであればゲストOS226として採用することができる。したがって、前記従来例のように、OSの改変を行う必要はない。
また、物理計算機241では、x64アーキテクチャの物理CPU202で、EPTを無効化するだけである。したがって、前記特許文献1のようにCPUに特別な要素を組み込む必要はなく、既存のx64アーキテクチャの物理CPUを採用することができる。
また、当該LPARを活性化する時点で、既にホスト物理アドレスの0番地から他のLPARが割り当てられていた場合には、ホスト物理アドレスの0番地から割り当てられていた他のLPARをマイグレーションする。その後、当該LPARをホスト物理アドレスの0番地から割り当てる。これにより、ホスト物理アドレスの0番地が既に他のLPARに割り当てられていた場合でも、当該LPARをホスト物理アドレスの0番地から割り当てることが可能となって、EPTを無効化した高速モードでゲストOS226及びアプリケーション227を稼働させることが可能となる。
例えば、図3に示したLPAR#2(221b)を高速モードとする場合、ハイパバイザ210は、物理計算機241aの0番地から割り当てられていたLPAR#1(221a)を物理計算機241bへマイグレーションする。そして、ハイパバイザ210は、LPAR#1が割り当てられていたホスト物理アドレスを解放する。
次に、図3に示したLPAR#2(221b)の32GB〜62GBの内容を、図10で示すように、ホスト物理アドレスの0番地から2GB及び4GB〜32GBの領域にコピーする。また、LPAR#2(221b)で共有割当されている仮想I/Oデバイス225bの内容を、I/Oデバイス205にコピーしておく。なお、図10はLPAR#1のマイグレーション1101を行った後の物理計算機241a、241bのメモリマップである。
これにより、高速モードのLPAR#2(221b)へ物理計算機241aのリソースを割り当てて、EPTを無効化した高速モードでゲストOS226aとアプリケーション227aを稼働させることができる。
また、高速モードのLPARでアプリケーション227aの実行が終了すると、ハイパバイザ210は、再びEPTを有効化する。これにより、他のLPAR#2がホストページテーブル214を利用して2段のアドレス変換を実施することができる。
なお、本実施例ではLPAR#1をマイグレーションさせる例を示したが、LPAR#2をマイグレーションさせる方法も考えられる。しかし、いずれも本技術分野に精通した技術者であれば容易に類推可能であり、本発明の範疇に含めるものである。
<LPARの設定>
上記図3に示したLPAR221a、221bを設定する画面の一例を図9に示す。図9は、LPAR221a、221bの設定画面901の一例を示す画面イメージである。この画面イメージは、例えば、LPARマネージャ232の表示装置に出力される。LPARマネージャ232の利用者は、当該設定画面でLPARに必要なリソースを決定し、物理計算機241のハイパバイザ210へ設定ファイルとして送信することができる。
設定画面901は、LPAR#1(221a)、LPAR#2(221b)毎の領域910、911を有する。LPAR name921は、LPARの番号または識別子あるいは名称を入力する。
CPU割り当て922は、当該LPARに割り当てる物理CPUコアの数を入力する。割り当てスイッチ923は、CPU割り当て922の物理CPUコアを占有と共有の何れで割り当てるかを設定する。
メモリ割り当て924は、当該LPARに割り当てるメモリの容量を入力する。アドレスビュー925は、アドレスマップ(GPA−HPA)を別画面で表示するためのハイパーリンクである。
I/O割り当て926は、当該LPARに割り当てるI/Oデバイスを選択するプルダウンメニューである。割り当てスイッチ927は、I/O割り当て926で選択したI/Oデバイスを占有と共有の何れで割り当てるかを設定する。
共有資源割り当て928は、物理計算機241aの特定の共有資源(例えば、HPET)を選択するプルダウンメニューである。
Performance Extension929は、当該LPARを高速モードで稼働させるか通常モードで稼働させるかを設定する。このPerformance Extension929は排他的であり、ひとつのLPARで"Enabled"に設定すると、LPAR#2(911)のように他のLPARでは"Disabled"となる。なお、LPAR#2の領域911も上記領域910と同様に構成される。
<まとめ>
以上のように、本発明では、EPTを有効にした状態でLPARの割り当てを行い、ホストページテーブル214や共有資源の初期化を行って、仮想化環境を構築する。このとき、高速モードのLPARについては、ホスト物理アドレスを0番地から割り当てておく。そして、EPTを無効化してから高速モードのLPARでアプリケーション227を実行させることで、ゲストOS226は前記従来例のような2段のアドレス変換を行うことがなくなって、処理性能を向上させることができる。
また、前記従来例のようにゲストOS226の改変を必要とせず、また、x64アーキテクチャの物理CPUを利用できるので、既存のCPUを含む物理計算機241でゲストOS226をハイパバイザ210上で稼働させて、2段階のアドレス変換に起因するオーバヘッドを削減することができる。
さらに、高速モードのLPARでアプリケーション227の実行が完了すると、ハイパバイザ210は再びEPTを有効化するので、通常の仮想化環境へ復帰することができる。
なお、上記実施例では、x64アーキテクチャの物理CPUについて述べたが、AMD64アーキテクチャの物理CPUを用いてもよい。この場合、x64アーキテクチャのEPTを、AMD64アーキテクチャのNPTに置き換えれば良い。
また、上記実施例では、物理CPU202をマルチコアCPUで構成した例を示したが、ヘテロジニアスマルチコアプロセッサで構成してもよい。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
<補足>
16.
請求項10に記載の仮想計算機システムであって、
前記仮想計算機システムは、前記アプリケーションの実行開始および終了を管理するアプリケーションマネージャをさらに有し、
前記アプリケーションマネージャが、
前記ゲストOSの起動が完了したことを検出して、前記ハイパバイザに前記ゲストOSの起動完了を通知し、
前記ハイパバイザが、
前記通知を受け付けて、前記第1のアドレス変換部を無効化することを特徴とする仮想計算機システム。
17.
16.に記載の仮想計算機システムであって、
前記ハイパバイザが、前記通知を受け付けて、前記第1のアドレス変換部を無効化する際に、
前記ハイパバイザが、
前記第1のアドレス変換部に設定されたアドレス対の内部の、前記ゲスト物理アドレスと前記ホスト物理アドレスの値が同一であるか否かを判定し、前記判定が同一でない場合に、前記ゲスト物理アドレスと同一のホスト物理アドレスのメモリ領域を新たに確保し、前記論理区画に割り当てられたメモリのサブセットのデータを、前記新たに確保されたメモリ領域にコピーし、前記第1のアドレス変換部に対して、前記ゲスト物理アドレスと同一の値を前記ホスト物理アドレスに対して設定することを特徴とする仮想計算機システム。
18.
17.に記載の仮想計算機システムであって、
前記ハイパバイザが、前記判定が同一でない場合に、前記ゲスト物理アドレスと同一のホスト物理アドレスのメモリ領域を新たに確保する際に、
確保対象のメモリ領域が、他の論理区画に対して割り当て済みか否かを判定し、前記判定結果が割り当て済みの場合に、前記論理区画を他の物理計算機に移動させることを特徴とする仮想計算機システム。

Claims (15)

  1. プロセッサとメモリを含む物理計算機の計算機リソースを1以上の論理区画に割り当てるハイパバイザが、前記論理区画上で稼動するゲストOSとアプリケーションを制御する仮想計算機システムの制御方法であって、
    前記プロセッサは、
    前記論理区画に割り当てるユニークなゲスト物理アドレスを、前記仮想計算機システムでユニークなホスト物理アドレスに変換する第1のアドレス変換部と、
    前記アプリケーションが認識する仮想アドレスを、前記ゲスト物理アドレスへ変換する第2のアドレス変換部とを含み、
    前記制御方法は、
    前記ハイパバイザが、前記論理区画に割り当てる前記計算機リソースのサブセットを決定し、当該サブセットを前記論理区画に割り当てる第1のステップと、
    前記ハイパバイザが、前記サブセットのメモリに関して前記ゲスト物理アドレスとホスト物理アドレスの関係をアドレス変換情報として生成する第2のステップと、
    前記ハイパバイザが、前記アドレス変換情報で前記第1のアドレス変換部を有効化する第3のステップと、
    前記ハイパバイザが、前記ゲストOSの起動開始を指令する第4のステップと、
    前記ゲストOSが起動する第5のステップと、
    前記ハイパバイザが、前記ゲストOSの起動完了を取得する第6のステップと、
    前記ハイパバイザが、前記ゲストOSの起動が完了した後に、前記第1のアドレス変換部を無効化する第7のステップと、
    前記アプリケーションが実行を開始する第8のステップと、
    を含むことを特徴とする仮想計算機システムの制御方法。
  2. 請求項1に記載の仮想計算機システムの制御方法であって、
    前記ハイパバイザが、前記アプリケーションの終了を検出する第9のステップと、
    前記ハイパバイザが、前記第1のアドレス変換部を再度有効化する第10のステップと、
    前記ゲストOSが、シャットダウンの指令を受け付けて終了する第11のステップと、をさらに含むことを特徴とする仮想計算機システムの制御方法。
  3. 請求項1に記載の仮想計算機システムの制御方法であって、
    前記第2のステップは、
    前記ゲスト物理アドレスと前記ホスト物理アドレスが同一の値であるアドレス対を前記アドレス変換情報として生成することを特徴とする仮想計算機システムの制御方法。
  4. 請求項1に記載の仮想計算機システムの制御方法であって、
    前記物理計算機は、所定のホスト物理アドレスにマップされた物理I/Oデバイスをさらに有し、
    前記第1のステップは、
    前記物理I/Oデバイスと同一の番号のゲスト物理アドレスに仮想I/Oデバイスをマップして前記論理区画に割り当てるステップを含み、
    前記第7のステップは、
    前記仮想I/Oデバイスに設定された状態を前記物理I/Oデバイスに設定するステップを含むことを特徴とする仮想計算機システムの制御方法。
  5. 請求項4に記載の仮想計算機システムの制御方法であって、
    前記物理I/Oデバイスは、グローバルタイマカウンタを有する高精度イベントタイマで、仮想I/Oデバイスは、グローバルタイマカウンタを有する仮想高精度イベントタイマであって、
    前記第7のステップは、
    前記ハイパバイザが、前記仮想高精度イベントタイマのグローバルタイマカウンタの値を取得し、前記高精度イベントタイマのグローバルタイマカウンタに設定することを特徴とする仮想計算機システムの制御方法。
  6. 請求項1に記載の仮想計算機システムの制御方法であって、
    前記プロセッサは、
    Intel社CPU規定のEPT(Extended Page Table)、もしくはAMD社CPU規定のNPT(Nested PageTable)に準拠し、
    前記第3のステップは、
    前記EPTまたはNPTに対応するホストページテーブルを指定することを特徴とする仮想計算機システムの制御方法。
  7. 請求項1に記載の仮想計算機システムの制御方法であって、
    前記仮想計算機システムは、前記アプリケーションの実行開始および終了を管理するアプリケーションマネージャをさらに有し、
    前記第7のステップは、
    前記アプリケーションマネージャが、前記ゲストOSの起動が完了したことを検出して、前記ハイパバイザに前記ゲストOSの起動完了を通知するステップと、
    前記ハイパバイザが、前記通知を受け付けて、前記第1のアドレス変換部を無効化するステップと、
    を含むことを特徴とする仮想計算機システムの制御方法。
  8. 請求項7に記載の仮想計算機システムの制御方法であって、
    前記ハイパバイザが、前記通知を受け付けて、前記第1のアドレス変換部を無効化するステップは、
    前記ハイパバイザが、前記第1のアドレス変換部に設定されたアドレス対の内部の、前記ゲスト物理アドレスと前記ホスト物理アドレスの値が同一であるか否かを判定するステップと、
    前記ハイパバイザが、前記判定が同一でない場合に、前記ゲスト物理アドレスと同一のホスト物理アドレスのメモリ領域を新たに確保するステップと、
    前記ハイパバイザが、前記論理区画に割り当てられたメモリのサブセットのデータを、前記新たに確保されたメモリ領域にコピーするステップと、
    前記ハイパバイザが、前記第1のアドレス変換部に対して、前記ゲスト物理アドレスと同一の値を前記ホスト物理アドレスに対して設定するステップと、
    を含むことを特徴とする仮想計算機システムの制御方法。
  9. 請求項8に記載の仮想計算機システムの制御方法であって、
    前記ハイパバイザが、前記判定が同一でない場合に、前記ゲスト物理アドレスと同一のホスト物理アドレスのメモリ領域を新たに確保するステップは、
    確保対象のメモリ領域が、他の論理区画に対して割り当て済みか否かを判定するステップと、
    前記判定結果が割り当て済みの場合に、前記論理区画を他の物理計算機に移動させるステップと、
    を含むことを特徴とする仮想計算機システムの制御方法。
  10. プロセッサとメモリを含む物理計算機と、
    前記物理計算機の計算機リソースを1以上の論理区画に割り当てるハイパバイザと、
    前記論理区画上で稼動するゲストOSとアプリケーションとを有する仮想計算機システムであって、
    前記プロセッサは、
    前記論理区画に割り当てるユニークなゲスト物理アドレスを、前記仮想計算機システムでユニークなホスト物理アドレスに変換する第1のアドレス変換部と、
    前記アプリケーションが認識する仮想アドレスを、前記ゲスト物理アドレスへ変換する第2のアドレス変換部とを含み、
    前記ハイパバイザは、
    前記論理区画に割り当てる前記計算機リソースのサブセットを決定し、当該サブセットを前記論理区画に割り当て、前記サブセットのメモリに関して前記ゲスト物理アドレスとホスト物理アドレスの関係をアドレス変換情報として生成し、
    前記アドレス変換情報で前記第1のアドレス変換部を有効化し、
    前記ゲストOSの起動開始を指令して、前記ゲストOSを起動させ、
    前記ゲストOSの起動完了を取得し、前記ゲストOSの起動が完了した後に、前記第1のアドレス変換部を無効化し、
    前記アプリケーションが実行を開始することを特徴とする仮想計算機システム。
  11. 請求項10に記載の仮想計算機システムであって、
    前記ハイパバイザが、
    前記アプリケーションの終了を検出した後に、前記第1のアドレス変換部を再度有効化し、
    前記ゲストOSが、
    シャットダウンの指令を受け付けて終了することを特徴とする仮想計算機システム。
  12. 請求項10に記載の仮想計算機システムであって、
    前記ハイパバイザが、
    前記ゲスト物理アドレスと前記ホスト物理アドレスが同一の値であるアドレス対を前記アドレス変換情報として生成することを特徴とする仮想計算機システム。
  13. 請求項10に記載の仮想計算機システムであって、
    前記物理計算機は、所定のホスト物理アドレスにマップされた物理I/Oデバイスをさらに有し、
    前記ハイパバイザが、
    前記物理I/Oデバイスと同一の番号のゲスト物理アドレスに仮想I/Oデバイスをマップして前記論理区画に割り当て、
    前記仮想I/Oデバイスに設定された状態を前記物理I/Oデバイスに設定することを特徴とする仮想計算機システム。
  14. 請求項13に記載の仮想計算機システムであって、
    前記物理I/Oデバイスは、グローバルタイマカウンタを有する高精度イベントタイマで、仮想I/Oデバイスは、グローバルタイマカウンタを有する仮想高精度イベントタイマであって、
    前記ハイパバイザが、
    前記仮想高精度イベントタイマのグローバルタイマカウンタの値を取得し、前記高精度イベントタイマのグローバルタイマカウンタに設定することを特徴とする仮想計算機システム。
  15. 請求項10に記載の仮想計算機システムであって、
    前記プロセッサは、
    Intel社CPU規定のEPT(Extended Page Table)、もしくはAMD社CPU規定のNPT(Nested PageTable)に準拠し、
    前記ハイパバイザは、
    前記EPTまたはNPTに対応するホストページテーブルを指定することを特徴とする仮想計算機システム。
JP2016556137A 2014-10-30 2014-10-30 仮想計算機システムの制御方法及び仮想計算機システム Active JP6242502B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2014/078984 WO2016067429A1 (ja) 2014-10-30 2014-10-30 仮想計算機システムの制御方法及び仮想計算機システム

Publications (2)

Publication Number Publication Date
JPWO2016067429A1 JPWO2016067429A1 (ja) 2017-06-01
JP6242502B2 true JP6242502B2 (ja) 2017-12-06

Family

ID=55856813

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016556137A Active JP6242502B2 (ja) 2014-10-30 2014-10-30 仮想計算機システムの制御方法及び仮想計算機システム

Country Status (3)

Country Link
US (1) US20170277632A1 (ja)
JP (1) JP6242502B2 (ja)
WO (1) WO2016067429A1 (ja)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9274823B1 (en) * 2014-12-24 2016-03-01 Parallels IP Holdings GmbH Thin hypervisor for native execution of unsafe code
US10515023B2 (en) * 2016-02-29 2019-12-24 Intel Corporation System for address mapping and translation protection
US20190004818A1 (en) * 2017-06-29 2019-01-03 American Megatrends Inc. Method of UEFI Shell for Supporting Power Saving Mode and Computer System thereof
US11314522B2 (en) * 2020-02-26 2022-04-26 Red Hat, Inc. Fast boot resource allocation for virtual machines
US11586458B2 (en) 2020-02-26 2023-02-21 Red Hat, Inc. Fast device discovery for virtual machines

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2615103B2 (ja) * 1987-12-11 1997-05-28 株式会社日立製作所 仮想計算機システム
JP2001051900A (ja) * 1999-08-17 2001-02-23 Hitachi Ltd 仮想計算機方式の情報処理装置及びプロセッサ
JP4792434B2 (ja) * 2007-08-31 2011-10-12 株式会社日立製作所 仮想計算機の制御方法

Also Published As

Publication number Publication date
US20170277632A1 (en) 2017-09-28
JPWO2016067429A1 (ja) 2017-06-01
WO2016067429A1 (ja) 2016-05-06

Similar Documents

Publication Publication Date Title
US10423435B1 (en) Page swapping in virtual machine environment
US9003071B2 (en) Namespace access control in NVM express PCIe NVM with SR-IOV
JP6110946B2 (ja) ゲスト仮想マシン内の仮想入出力メモリ管理ユニット
JP5735070B2 (ja) パーティション分割されたシステムにおいて、デバイスがメモリにアクセスするための、ゲスト・アドレスからホスト・アドレスへの変換
US8086823B2 (en) Method for speeding up page table address update on virtual machine
JP5608243B2 (ja) 仮想化環境においてi/o処理を行う方法および装置
CN109074316B (zh) 页面错误解决方案
WO2017024783A1 (zh) 一种虚拟化方法、装置和系统
JP2022509906A (ja) ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス
JP6029550B2 (ja) 計算機の制御方法及び計算機
JP6242502B2 (ja) 仮想計算機システムの制御方法及び仮想計算機システム
US20090265708A1 (en) Information Processing Apparatus and Method of Controlling Information Processing Apparatus
RU2562372C2 (ru) Активация/деактивация адаптеров вычислительной среды
WO2018176911A1 (zh) 一种虚拟磁盘文件格式转换方法和装置
US10162657B2 (en) Device and method for address translation setting in nested virtualization environment
US11194735B2 (en) Technologies for flexible virtual function queue assignment
JP2007183952A (ja) ゲストがメモリ変換されたデバイスにアクセスする方法及び装置
Hajinazar et al. The virtual block interface: A flexible alternative to the conventional virtual memory framework
US11593170B2 (en) Flexible reverse ballooning for nested virtual machines
WO2013088818A1 (ja) 仮想計算機システム、仮想化機構、及びデータ管理方法
CN117743205A (zh) 用dram作为可按字节寻址存储器的缓存的方法和装置
Caldwell et al. Fluidmem: Full, flexible, and fast memory disaggregation for the cloud
US10162663B2 (en) Computer and hypervisor-based resource scheduling method
Chen Introduction to ACPI based memory hot-plug
US11893408B2 (en) Protection of balloon inflated memory using temporary loan pages

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170224

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171024

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171107

R150 Certificate of patent or registration of utility model

Ref document number: 6242502

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150