JP2010128911A - 仮想計算機の制御方法、仮想計算機の制御プログラム及び計算機装置 - Google Patents

仮想計算機の制御方法、仮想計算機の制御プログラム及び計算機装置 Download PDF

Info

Publication number
JP2010128911A
JP2010128911A JP2008304492A JP2008304492A JP2010128911A JP 2010128911 A JP2010128911 A JP 2010128911A JP 2008304492 A JP2008304492 A JP 2008304492A JP 2008304492 A JP2008304492 A JP 2008304492A JP 2010128911 A JP2010128911 A JP 2010128911A
Authority
JP
Japan
Prior art keywords
physical
virtual
cpu
interrupt
assigned
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.)
Granted
Application number
JP2008304492A
Other languages
English (en)
Other versions
JP5352848B2 (ja
Inventor
Naoya Hattori
直也 服部
Toshiomi Moriki
俊臣 森木
Takanari Baba
貴成 馬場
Yuji Tsushima
雄次 對馬
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
Priority to JP2008304492A priority Critical patent/JP5352848B2/ja
Priority to US12/624,827 priority patent/US8516479B2/en
Publication of JP2010128911A publication Critical patent/JP2010128911A/ja
Application granted granted Critical
Publication of JP5352848B2 publication Critical patent/JP5352848B2/ja
Expired - Fee Related 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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
    • 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/45579I/O management, e.g. providing access to device drivers or storage

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】x86互換計算機で提供されている標準機能のみを用いた占有I/Oデバイスの割り込みオーバヘッドの削減と共有I/Oデバイスに必要なエミュレータの実行を両立する。
【解決手段】VMMが1つ以上のCPUで割り込み横取りフラグを無効化して割り込み受信時にOSの割り込みハンドラコードを実行させ、1つ以上のCPUで割り込み横取りフラグを有効化して割り込み受信時にVMM内のエミュレータを実行させる。仮想計算機に対してI/Oデバイスが占有、かつ、CPUが割り込み横取り無効化で割り当てられている場合は、該当する物理I/Oデバイスの割り込みの宛先を、該当する割り込み横取り無効の物理CPUに設定する。仮想計算機に対してI/Oデバイスが共有、又は、CPUが割り込み横取り無効化で割り当てられている場合は、該当する物理I/Oデバイスの割り込みの宛先を割り込み横取りが有効な物理CPUに設定する。
【選択図】図11A

Description

本発明は仮想計算機システムに関し、仮想計算機上で稼動するOSに対して、I/Oデバイスの割り込みを伝達する技術に関する。
サーバ台数の増加と共に運用に関する複雑さが増加しており、運用コストが問題化し、運用コストを低減する技術として複数サーバを1台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機技術が知られている。仮想計算機技術では、例えば、ハイパバイザなどのファームウェア(またはミドルウェア)が、物理計算機を複数の論理区画(LPAR:Logical PARtition)に分割し、各LPARに対して計算機資源(CPU、メモリ、I/Oデバイス)を割り当て、各LPAR上でそれぞれOSを動作させる。あるいは、一つのサーバ上で一つのホストOS(物理計算機を直接使用するOS)を実行し、このホストOS上稼動するハイパバイザが同様の分割処理を行って、複数のゲストOS(ホストOS上で稼動するOS)を稼動させる。仮想計算機技術は、従来複数のサーバで稼動していたOS及びOS上で稼動するソフトウェアを、1台のサーバで稼動させることを可能にしており、サーバ統合を実現している。
またハイパバイザなどの仮想計算機技術は、汎用機(MainFrame)等の大型計算機で用いられてきた技術であるが、近年のマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。
仮想計算機技術を採用したサーバ等の計算機は、ゲスト(ゲストOS及び、ゲストOS上で稼動するソフトウェアの総称)を稼動させる複数の仮想計算機(Virtual Machine)と、仮想計算機の制御を行う仮想計算機モニタ(Virtual Machine Monitor、以下VMMとする)とを有する。
一般に、ゲストは計算機のハードウェアを占有する前提で作られている。従って、仮想計算機技術によってサーバ統合を実現する上では、各仮想計算機に、各ゲストが計算機を占有する場合と同じ動作をさせる必要がある。本要件を満たすためにVMMは、ゲストに含まれる特権命令(ハードウェアを操作する命令)や、ハードウェア操作の完了通知である割り込みのエミュレーションを行う。本エミュレーションに伴うオーバヘッドによって性能低下が生じるため、本エミュレーションには高速性が求められる。
仮想計算機は、仮想CPU、仮想化された物理メモリ、仮想I/Oデバイスといった仮想部品から構成される。VMMは各仮想部品を、物理部品(物理CPU、物理メモリ、物理I/Oデバイス)を占有/共有などの形態で割り当てて実現する。占有は1つの物理部品を1つの仮想計算機だけに割り当てる形態で、エミュレータ実行の一部が不要となる。共有は物理部品を複数の仮想計算機に割り当てる形態で、エミュレータの実行が不可欠となる。高性能が重視される場合は占有が用いられ、リソースの高効率利用が重視される場合は共有が用いられる。
従来、エミュレータはソフトウェアで実現されるケースが多く、ハードウェアによるエミュレーション支援は、メインフレーム等の高価な計算機に限られていた。従って大多数の計算機では、仮想計算機を利用する際に、ソフトウェア実行に伴う顕著なオーバヘッドが存在していた。しかし、安価かつ広範に普及しているIntel及びAMDのx86互換CPUを備える計算機に於いても、顕著なオーバヘッドを改善すべく、徐々に仮想化機能のエミュレーションを支援するハードウェアが下記のように登場しつつある。
(1)CPUによる命令実行に関しては、IntelのVT-x機能やAMDのAMD-V機能が命令実行を支援する。(2)CPUによるメモリ操作に関しては、IntelのEPT(Extended Page Table)やAMDのNested Page Tableがアドレス変換を支援する。(3)I/Oデバイスによるメモリ操作に関しては、IntelのVT-dやAMDのIOMMUがアドレス変換を支援する。(4)CPUによるI/Oデバイス操作に関しては、PCI-SIGのSR-IOVがデバイス操作を支援する。
上記ハードウェアによる仮想化機能の支援(VMX:Virtual Machine Extensions)については、例えば、非特許文献1のChapter 29-3には、x86互換CPUに実装されたExternal Interrupt Exiting 機能を用いる割り込み伝達技術(以下、従来技術1)が記載されている。External Interrupt Exitingとは、物理I/Oデバイスの割り込みを契機にVMM等の仮想化ソフトを実行させる機能である。仮想化ソフトは全てのCPUに対してExternal Interrupt Exitingを有効にし、物理I/Oデバイスの割り込みを全て受け取る。割り込みを受けた仮想化ソフトは割り込みの発生源を特定し、占有I/Oデバイスであれば、仮想CPUの処理をOSの割り込みハンドラへ分岐させる。共有I/Oデバイスであればエミュレータを実行し、仮想CPUの処理をOSの割り込みハンドラへ分岐させる。
また、特許文献1米には、汎用機向けの割り込み伝達技術(以下、従来技術2)が記載されている。本技術ではCPUが、占有I/Oデバイスから伝達される割り込みと、共有I/Oデバイスから伝達される割り込みを区別し、前者であれば仮想化ソフトを介さずに直接OSの割り込みハンドラに分岐する機能を有する。本機能を用いる場合、後者であればCPUが仮想化ソフトを呼び出す。仮想化ソフトは、CPUに対してI/Oデバイスの割り当て形態を設定し、共有I/Oデバイスからの割り込みに対してエミュレータを実行させる。またエミュレータ実行後は、仮想化ソフトが仮想CPUをOSの割り込みハンドラに分岐させる。
米国特許第5,109,489号明細書 "Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide Part 2"、[online]、2008年9月、Intel Corp、[平成20年10月1日検索]、インターネット<URL:http://download.intel.com/design/processor/manuals/253669.pdf>
ところがx86互換計算機に於いては、(5)I/OデバイスによるCPU操作に該当する割り込み伝達に関しては、下記の理由から支援機能が存在しない。一般に、CPUの支援機能の追加は動作周波数の低下や消費電力の増加を招く。x86互換CPUはサーバから組み込み機器まで広範な用途で同一仕様のCPUが使用されるため、動作周波数や消費電力が悪化する恐れのある支援機能は、オーバヘッドが顕著でない限り敬遠される。割り込み伝達のオーバヘッドは他より1桁程度小さいため、支援機能の提供が敬遠されている。
各種支援機能の登場によって顕著なオーバヘッドが削減され、仮想計算機に付随するオーバヘッドは(5)が主要因になりつつある。従ってオーバヘッドの更なる改善のためには、x86互換計算機に於ける割り込み伝達のオーバヘッド削減が課題となる。
上記従来技術1では、I/Oデバイスの割り当て形態と無関係に、仮想化ソフトが割り込みを受け、CPUの処理をOSのハンドラに分岐させる。上記従来技術1は、共有I/Oデバイスに対しては必要最低限の処理となるが、占有I/Oデバイスに対しては本質的に仮想化ソフトを呼び出す必要が無い。従って占有I/Oデバイスに対する割り込み伝達のオーバヘッド削減が課題となる。
上記従来技術2では、動作周波数や消費電力が大きな問題になっていなかった汎用機を前提とし、ハードウェア支援機能による高速化を実現している。本支援機能は、今日、広く普及しているx86互換計算機ではサポート予定が無いため、本技術の適用に必要なハードウェアの制限緩和が課題となる。
上記問題点を鑑みて本発明では、x86互換計算機でポートされている標準機能のみを用いた、占有I/Oデバイスの割り込みオーバヘッドの削減と共有I/Oデバイスに必要なエミュレータ実行の両立を目的とする。
本発明は、複数の物理CPUと、物理メモリとを備えた物理計算機で仮想計算機を提供する仮想化部を実行し、前記仮想化部は所定のエミュレータを含んで前記仮想計算機上でOSを稼動させる仮想計算機の制御方法であって、前記物理CPUは、前記仮想計算機の割り込み受信時に実行される割り込みハンドラを設定可能な物理CPUであり、物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップと、前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップと、を含む。
また、前記物理計算機は1つ以上の物理I/Oデバイスを含み、前記仮想化部は、前記仮想計算機に1つ以上の仮想CPUと1つ以上の仮想I/Oデバイスを提供し、前記仮想化部が、前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが単一の仮想計算機によって直接利用される第1の形態または前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第2の形態で割り当てるステップと、前記仮想化部が、前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時にOSを実行する第3の形態または前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時に前記エミュレータを実行する第4の形態で割り当てるステップと、をさらに含み、前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップは、前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが単一の仮想計算機による直接利用を許す第1の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想CPUに対して前記物理CPUが割り込み受信時にOSを実行する第3の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込み受信時に前記物理CPUでOSを実行させ、前記前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップは、前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが前記エミュレータによって複数の仮想計算機で間接利用する第2の形態で割り当てられているか、或いは 前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時に前記エミュレータを実行する第4の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込み受信時に前記物理CPUでエミュレータを実行させる。
本発明では第1の形態で割り当てられた占有I/Oデバイスの割り込みを割り込み横取りが無効のCPUで受ける場合の割り込み伝達オーバヘッドを削減し、第2の形態で割り当てられた共有I/Oデバイスの割り込みは必ず割り込み横取りが有効のCPUで受けるためエミュレータを実行できる。これにより、占有I/Oデバイスの割り込みオーバヘッドの削減と共有I/Oデバイスに必要なエミュレータの実行を両立させることができる。
以下、本発明の一実施形態を添付図面に基づいて説明する。
本実施形態では、仮想計算機に対するCPUの割当に関して、物理CPUを単一の仮想計算機で占有しかつ割り込みの横取りを無効とする Exclusive形態(以下、単にExclusiveと記載)と、物理CPUを複数の仮想計算機で共有かつ割り込みの横取りを有効とするShare形態(以下、Shareと記載)のみを許す。
<1.ハードウェア構成>
図1は、本発明の第1実施形態を示し、仮想計算機システムを動作させる物理計算機1の構成を示す。物理計算機1は、仮想化支援機能であるVT−x又はAMD−Vに対応したx86(またはIA−32)互換のCPU(またはプロセッサ)60を2つ以上(または2ソケット以上)有し、これらのCPU60−1〜60−nはFSB(Front Side Bus)等に代表されるCPU間インターフェース140を介してノースブリッジ120(またはメモリコントローラ)に接続される。1番目のCPUであるCPU60−1は、起動直後から動作を開始するBSP(Boot Strap Processor)であり、2番目以降のCPUであるCPU60−2〜60−nは、BSPの指示を受けてから動作を開始するAP(Application Processor)である。なお、以下の説明では個々のCPUを60−1〜60−nとし、CPUの総称をCPU60とする。
ノースブリッジ120には、メモリバス160を介してメモリ110が接続され、また、バス180を介してI/Oデバイス170が接続される。I/Oデバイス170はLAN190に接続されるネットワークアダプタ、ディスク装置200等に接続されるSCSIアダプタ、SAN210(Storage Area Network)に接続されるファイバーチャネルアダプタなどで構成される。
CPU60はノースブリッジ120を介してメモリ110にアクセスし、ノースブリッジ120からI/Oデバイス170−1〜170−nにアクセスして所定の処理を行う。なお、I/Oデバイス170a〜170nとしては、I/Oデバイス170−1がネットワーク190に接続されたネットワークアダプタで構成され、I/Oデバイス170−2がHDD200に接続されたディスクアダプタ(例えば、SCSI)で構成され、I/Oデバイス170−nがSAN210を介してストレージ装置に接続されたファイバーチャネルアダプタ(またはHBA:Host Bus Adapter)で構成された例を示す。また、以下の説明では、個々のI/Oデバイスを170−1〜170−nとし、I/Oデバイスの総称をI/Oデバイス170とする。
なお、ノースブリッジ120はメモリ110を制御するとともに、グラフィックコントローラを含んでオペレータとの間で入出力を行うコンソール150にも接続され、画像の表示を行うことができる。
メモリ110には、仮想計算機モニタ(Virtual Machine Monitor、以下VMM)20がロードされ、このVMM20が実現する仮想計算機30が、OS40を実行する。OS40は仮想計算機30上で、任意のAP50(Application)を実行する。
割り込み伝達に関して、I/Oデバイス170は、割り込みを伝達する宛先CPUや伝達手段などを規定する割り込みパラメータ220を有する。I/Oデバイス170で割り込みが生じると、バス180を介してこの割り込みがノースブリッジ120に伝達される。ノースブリッジはPIC90(Programmable Interrupt Controller)とIOAPIC80(I/O Advanced PIC)を有している。割り込みパラメータ220の設定がMSI(Message Signaled Interrupt)を無効にしている場合は、割り込みがPIC90に貯蔵され、更にIOAPIC80のレジスタ設定に従ってCPU60内のLAPIC70(Local Advanced PIC)にも貯蔵される。割り込みパラメータ220の設定がMSIを有効にしている場合は、割り込みはLAPIC70にのみ貯蔵される。貯蔵された割り込みは、CPU60が割り込みを許可した時に消費され、CPU60は割り込み受信時の処理を開始する。
なお、VMM20は、記憶媒体としてのHDD200やストレージ装置に格納され、物理計算機1の起動時にメモリ110へロードされてCPU60に実行される。
また、図1では、ノースブリッジ120にメモリコントローラを内蔵した例を示したが、CPU60にメモリコントローラを備えても良く、この場合、各CPU60がメモリバス160を備えてメモリ110に接続される。
<2.ソフトウェア構成>
次に、物理計算機1上で仮想計算機30を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図2を参照しながら詳述する。
物理計算機1上では、複数の仮想計算機30−1〜30−nを管理するVMM20が稼動している。各仮想計算機(仮想化部)30では、VMM20が仮想CPU600−1〜600−n及び仮想I/Oデバイス1700−1〜1700−nを提供し、OS40−1〜40−nが1つ以上稼動する。またOS40の上では、アプリケーション(AP50)が1つ以上稼動する。なお、以下の説明では、個々の仮想計算機を30−1〜30−nとし、仮想計算機の総称を仮想計算機30とする。同様に、個々のOSを40−1〜40−nとし、OSの総称をOS40とし、個々の仮想CPUを仮想CPU600−1〜600−nとし、仮想CPUの総称を仮想CPU600とし、個々の仮想I/Oデバイスを仮想I/Oデバイス1700−1〜1700−nとし、仮想I/Oデバイスの総称を仮想I/Oデバイス1700とする。1番目の仮想CPUである仮想CPU600−1は、仮想計算機の起動直後から動作を開始する仮想BSP(Boot Strap Processor)であり、2番目以降の仮想CPUであるCPU600−2〜600−nは、仮想BSPの指示を受けてから動作を開始する仮想AP(Application Processor)である。
OS40は、I/Oデバイス170の割り込みを受けてI/Oデバイス170を制御する割り込みハンドラ300を有する。なお、以下の説明では、個々の割り込みハンドラを300−1〜300−nとし、割り込みハンドラの総称を割り込みハンドラ300とする。
VMM20は、CPU60、I/Oデバイス170、割り込み伝達などをエミュレーションするエミュレータ310と、物理割り込みを契機に呼び出される物理割り込み受信部390と、物理CPU60と物理I/Oデバイス170の仮想CPU600と仮想I/Oデバイス1700に対する割り当てを規定するリソース管理表410を有する。
エミュレータ310は、PIC90の共有割り当てを実現するPICエミュレータ320と、APIC(IOAPIC80とLAPIC70の総称)の共有割り当てを実現するAPICエミュレータ330と、I/Oデバイス170の共有割り当てを実現するI/Oエミュレータ340と、CPUの共有割り当てを実現するCPU割り当て時間管理部350と、物理I/Oデバイスの割り込みの宛先を適切な物理CPUに保つ物理割り込み宛先管理部360と、仮想計算機の動作を開始/終了させるACT/DEACT部370と、CPU30とI/Oデバイス170などの割り当てインターフェースを制御するコンソール制御部380を含む。
PICエミュレータ320は、各仮想計算機30に2つずつ含まれる各仮想PICに対応した仮想PICレジスタ470−1〜470−sを有する。仮想PICレジスタ470−1〜470−sには、図示しない割り込みを貯蔵するIRR(Interrupt Request Register)などが含まれる。なお、x86互換の物理計算機1では、ノースブリッジ120のPIC90は2つのPICで構成されるため、各仮想計算機30の仮想PICも2つのPPICで構成する。
APICエミュレータ330は、各仮想CPU600に1つ含まれる仮想LAPICに対応した仮想LAPICレジスタ480−1〜480−tと、各仮想計算機30に1つ以上割り当てられる各仮想IOAPICに対応した仮想IOAPICレジスタ485−1〜408−tを有する。仮想LAPICレジスタ480−1〜480−tには、割り込みを貯蔵するIRR(図示省略)などが含まれる。仮想IOAPICレジスタ485−1〜485−uには、割り込みの宛先CPUを規定する宛先フィールドなどが含まれる。
I/Oエミュレータ340は、ネットワークアダプタやファイバーチャネルアダプタなどの動作をエミュレーションするモジュールである。また、I/Oエミュレータ340は、仮想割り込みの伝達に備えて、各仮想I/Oデバイス1700の仮想割り込みパラメータ490−1〜490−uを保持する。
CPU割当時間管理部350は、全ての仮想CPU600を予め設定した比率で実行させるために、仮想CPU600に対する物理CPU60の割り当て時間を管理し、持ち時間を使い切った仮想CPU600を一時停止させ、他の仮想CPU600の動作を再開させる。
物理割り込み宛先管理部360は、仮想計算機30の動作開始(ACT)時、仮想計算機の動作終了(DEACT)時、または仮想割り込みパラメータ490の変更時などに、物理I/Oデバイス170の割り込み宛先を変更する。物理I/Oデバイス170が共有割り当ての場合は、割り込みの宛先をShareのCPU60に変更する。物理I/Oデバイス170が占有割り当ての場合は、対応する仮想I/Oデバイス1700の割り込みの宛先がShareの仮想CPU600であれば、同物理I/Oデバイス170の割込みの宛先をいずれかのShareの物理CPU60に設定し、対応する仮想I/Oデバイス1700の割り込みの宛先がExclusiveの仮想CPU600であれば、同物理I/Oデバイス170の割込みの宛先を、同仮想CPU600に割り当てられたExclusiveの物理CPU60に設定する。
ACT/DEACT部370は、仮想計算機の開始または終了時に、物理I/Oデバイス170やエミュレータ内のデータの初期化またはリセットを行う。
コンソール制御部380は、ユーザがCPU60にI/Oデバイス170を割り当てるために使用するコンソール150を制御する。
物理割り込み受信部390は、物理I/Oデバイス170の割り込みを受信して、割り込みを発した物理I/Oデバイス170を特定し、物理I/Oデバイス170−1〜170−u毎に予め設定したエミュレータを呼び出す。例えば、割り込みを発した物理I/Oデバイス170が共有割り当てされたネットワークアダプタであれば、I/Oエミュレータ340を呼び出してネットワークアダプタをエミュレーションさせる。
リソース管理表410は、CPU60やI/Oデバイス170の割り当てを規定する表であり、物理CPU60の割り当てを規定する物理CPU管理表420と、物理I/Oデバイス170の割り当てを規定する物理I/Oデバイス管理表430と、仮想CPU600の割り当てを規定する仮想CPU管理表440と、仮想I/Oデバイス1700の割り当てを規定する仮想I/Oデバイス管理表450と、リソースが確定する前の割り当て内容を保持する割当仮入力表460から成る。
物理計算機1は、x86互換のCPU60を2つ以上有し、1つ以上の物理I/Oデバイス170と、1つ以上の物理IOAPIC80と、コンソール150を有する。
CPU60−1〜60−nは割り込み横取りフラグ61−1〜61−n、物理LAPIC70−1〜70−nを有する。
割り込み横取りフラグ61−1〜61−nは、当該フラグが有効な場合にはCPU60がマスク可能割り込みを受けた時にVMM20の有する物理割り込み受信部390を呼び出す。一方、当該フラグが無効な場合には、CPU60がマスク可能割り込みを受けた時にOS40の割り込みハンドラ300を呼び出す。
物理LAPIC70−1〜70−nは、タイマ71−1〜71−nと割り込み用ID72−1〜72−nを含む。タイマ71−1〜71−nはCPU割り当て時間管理部350によるCPU時間の計測に使用される。割り込み用ID72−1〜72−nは、物理LAPIC70−1〜70−nを一意に区別するための数値であり、物理割り込みの宛先を規定するために使用される。
物理I/Oデバイス170は、シリアルポート(RS232C)等の一部の旧式デバイスを除いて、物理割り込みパラメータ220−1〜220−nを含む。
物理IOAPIC80は、旧式デバイスのために 物理I/Oデバイス170の外に物理割り込みパラメータ220を保持する装置である。
コンソール150は、仮想計算機30に対してCPUの割り当てをExclusive/Shareから選択させ、I/Oデバイスの割り当てを占有/共有から選択させるユーザインターフェースである。
図3はVMM20が管理するメモリ110の一例を示す。
VMM20は、メモリ110上に自身を配置する領域と、仮想計算機30が使用する領域を割り当てる。例えば図3のように、VMM20は、自身にアドレスAD0〜AD1を割り当て、仮想計算機30−1にアドレスAD1〜AD2を、仮想計算機30−nにアドレスAD3〜AD4を割り当てる。
各仮想計算機30の領域には、各OS40と各OSの割り込みハンドラ300が含まれる。
VMM20が使用する領域には、エミュレータ310と、物理割り込み受信部390と、リソース管理表410が割り当てられる。
図4はI/Oデバイス170の割り込みパラメータ220に含まれる項目の構成図である。割り込みパラメータ220は、MSI Enable222、MSIパラメータ224、MSI−X Enable226、MSI−Xパラメータリスト228から成る。
MSI Enable222とMSI−X Enable226は、それぞれMSIとMSI−Xを有効化または無効化するフラグである。MSI Enable222を1に、MSI−X Enable226を0にすれば、割り込みの宛先指定にはMSIパラメータ224が使用され、割り込みはLAPIC70のみに貯蔵される。MSI Enable222を0に、MSI−X Enable226を1にすれば、割り込みの宛先指定にはMSIパラメータリスト228が使用され、割り込みはLAPIC70のみに貯蔵される。MSI Enable222を0に、MSI−X Enable226を0にすれば、割り込みの宛先指定には物理IOAPIC80のレジスタ設定値が使用され、割り込みはノースブリッジ120のPIC90とCPU60のLAPIC70の両方に貯蔵される。
MSIパラメータ224は、宛先230−1〜230−Nとベクタ240−1〜240−Nを含む。宛先230−1〜230−Nは、割り込みを受けるべきCPU60の割り込み用ID72を規定する。ベクタ240は、割り込みを受けたCPU60が割り込みハンドラ300又は物理割り込み受信部390に分岐する際に渡す数値であり、割り込みを起こしたI/Oデバイスの識別に用いられる。
MSI−Xパラメータリスト228は、複数の宛先230−1〜230−Nとベクタ240−1〜240−Nを含む。MSI−XにはI/Oデバイス170による割り込みの理由に応じて、異なる宛先230とベクタ240で割り込みを伝達する機能がある。本機能を実現するために、割り込みの理由に対応したエントリが複数存在し、各エントリに宛先230とベクタ240を指定できる。
図5はリソース管理表410を構成する割当仮入力表460のフォーマットを示す構成図である。割当仮入力表460は、物理I/Oデバイス使用形態433と、仮想計算機30の構成情報を保持する。仮想計算機30の構成情報として、仮想計算機番号441、稼動状態462、割り当てメモリ量463、ExclusiveCPU数464、ShareCPU数465、仮想I/Oデバイス1700の割り当て有無466を保持する。
物理I/Oデバイス使用形態433は、物理I/Oデバイス170毎に占有割り当てで使用するか、共有割り当てで使用するかの分類を保持する。
仮想計算機番号441は、仮想計算機30に付加した通し番号を保持する。
稼動状態462は、仮想計算機30が稼動開始(ACT)したか、稼動終了(DEACT)しているかを保持する。
割り当てメモリ量463は、仮想計算機30に割り当てるメモリ110の量を保持する。
ExclusiveCPU数464とShareCPU数465は、仮想計算機30に割り当てるCPU数を規定する、ExclusiveCPU数464はExclusiveCPUの数を保持し、ShareCPU数465は、ShareCPUの数を保持する。
仮想I/Oデバイス1700の割り当て有無466は、仮想計算機30に対する物理I/Oデバイス170−1〜170−nの割り当ての有無を保持する。物理I/Oデバイス17の使用形態433が占有割り当ての場合は、1つの仮想計算機にしか割り当てできないが、共有割り当ての場合は割り当てる仮想計算機の数に制限はない。図示の例では、仮想I/Oデバイス1700の割り当て有無466が「○」であれば、当該仮想計算機にデバイス名(デバイス1〜N)が割り当てられていることを示す。
割当仮入力表460は、主としてDEACT状態の仮想計算機30の構成規定に用いられ、ACTするまで設定値は仮想計算機30の構成に反映されない。また、ACT状態の仮想計算機30の構成を動的に変更するホットプラグ機能を使用する場合も同様に、ホットプラグ開始を選択するまで設定値は仮想計算機30の構成に反映されない。割当仮入力表460の情報は、ACT時又はホットプラグ時に物理CPU管理表420、物理I/Oデバイス管理表430、仮想CPU管理表440、仮想I/Oデバイス管理表450に反映され、仮想計算機30の構成に反映される。
なお、割当仮入力表460をコンソール150に表示して、仮想CPUや仮想I/Oデバイスの設定を入力する割り当てインターフェースとして使用することができる。
図6はリソース管理表410を構成する物理CPU管理表420のフォーマットを示す構成図である。物理CPU管理表420は、物理CPU毎に利用形態を保持するため、物理CPU番号421と物理CPU利用形態422を有する。
物理CPU番号421は、各物理CPU60に付加した通し番号(識別子)である。物理CPU利用形態422は、各物理CPU60を 占有かつ割り込み横取りフラグが無効のExclusiveで使用するか、共有かつ割り込み横取りフラグが有効のShareで使用するかを保持する。
図7はリソース管理表410を構成する物理I/Oデバイス管理表430のフォーマットを示す構成図である。物理I/Oデバイス管理表430は、物理I/Oデバイス毎に利用形態と状態を保持するため、物理I/Oデバイス番号431と物理I/Oデバイス使用形態433と、初期化フラグ434を有する。
物理I/Oデバイス番号431は、各物理I/Oデバイスに付加した通し番号(識別子)である。
物理I/Oデバイス利用形態434は、前述の通り、各物理I/Oデバイス170を 占有で使用するか、共有で使用するかを保持する。
初期化フラグ434は、共有割当の各物理I/Oデバイス170に対して、初期化されているか未初期化であるかを保持する。
図8はリソース管理表410を構成する仮想CPU管理表440のフォーマットを示す構成図である。仮想CPU管理表440は、仮想CPU600毎に利用形態を保持するため、仮想計算機番号441と、仮想CPU番号442と物理CPU番号421を有する。
仮想CPU番号442は、仮想計算機内の各仮想CPU600に付加した通し番号(識別子)である。
物理CPU番号421は、ExclusiveのCPU60を割り当てた場合に限って、割り当てた物理CPU60の通し番号を保持する。ShareのCPU60を割り当てた場合は、本フィールドは無効である。
図9はリソース管理表410を構成する仮想I/Oデバイス管理表450のフォーマットを示す構成図である。仮想I/Oデバイス管理表450は、仮想I/Oデバイス1700−1〜1700−n毎に割り当て情報と割り込みの宛先を保持するため、仮想計算機番号441と、仮想I/Oデバイス番号452と物理I/Oデバイス番号431を有する。
仮想I/Oデバイス番号452は、仮想計算機30内の各仮想I/Oデバイス1700に付加した通し番号(識別子)である。
物理I/Oデバイス番号431は、当該仮想I/Oデバイス1700に占有又は共有で割り当てられた物理I/Oデバイスの番号(通し番号)を保持する。
<3.VMMによる割り込み伝達処理>
次に、ゲスト(ゲストOS40またはゲストOS40上で稼動するアプリケーション50の総称)の動作に合わせてVMM20が行う割り込み伝達処理の一例について、以下、フローチャートを参照しながら説明する。
<3.1.VMMによる割り込み伝達処理の概要>
図10A〜図10Cは、VMM20上でゲストを実行するときの全体的な処理を示すフローチャートである。本フローチャートは複数のCPU60の利用を前提としており、各CPU60は、本フローチャートに従って独立して動作する。なお、図10Aは、処理の全体を示すフローチャートを示し、図10B、図10Cは図10Aの要因判定処理の詳細を示すフローチャートで、図10Bが要因判定処理の前半を示し、図10Cが要因判定処理の後半を示す。
まず、図10AのS1001では、物理CPU60の数や物理I/Oデバイス170の種類と数を認識してVMM20内のデータを初期化し、S1000に進む。
S1000では、VMM20が割り込みを待つ。割り込みがあればS1005に進み、割り込みが無ければS1000に戻る。
S1005では、VMM20が割り込みの原因を判定する。割り込みがコンソール150からの割り込みであれば、S1010に進む。その他の割り込みであればS1000に進む。
S1010では、割り込みを起こしたコンソール操作が、ACT指示であるか否かを判定する。ACT指示であればS1030に進み、ACT指示でなければS1020に進む。
S1020では、コンソール150からのユーザの入力を受け取って割当仮入力表460のデータを更新し、同データをコンソール150に表示し、S1000に戻る。
S1030では、仮想計算機30の動作開始処理(ACT処理)を行い、仮想計算機30にCPU60とI/Oデバイス170などのリソースを割り当て、OS40のコードの実行を準備し、S1035に進む。
S1035では、仮想計算機30のACT処理に成功していればS1130に進み、ACT処理に失敗していればS1000に進む。
S1130では、VT−xのVMentryやAMD−VのVMRUN命令等を用いて、CPU60が実行する処理をゲスト(OS40又はAP50)のコードに分岐させ、S1040に進む。
S1040では、VMM20がVT−x又はAMD−Vの機能を利用して、VMM20の介入(VMexit)を要するイベントが生じたか否かを判定する。ゲストでVMexitが生じた場合は要因判定処理のS1060(図10B)に進み、VMexitが生じない場合はS1050に進む。S1050では、ゲストコード中の命令を1命令実行し、S1040に戻る。
ゲストでVMexitが発生すると、VMM20が図10Bの要因判定処理(S1060)に進み、要因判定処理では後述するようにVMexitの発生要因に応じた処理を行った後、S1000またはS1130に戻る。
ここで、仮想化支援機能を備えたCPU60では、ゲスト(OS40またはAP50)を実行する動作モード(VMXノンルートモード)と、VMM20を実行する動作モード(VMXルートモード)の何れかに設定される。
VMXモードのVMXルートモードとVMXノンルートモードの遷移については、上記非特許文献1に記載されるとおりである。ここでは、概要のみについて説明する。通常動作モードからVMXモードへ移行する際には、VMM20がVMXON命令を発行し、物理CPU60の動作モードをVMXモードに移行させる。そして、VMXモードへ移行したVMM20はVM−entry命令(VMLAUNCH命令またはVMRESUME命令)を発行し、VMXルートモードからVMXノンルートモードへ移行する。このVMXルートモードからVMXノンルートモードへの遷移をVM−entryという。
逆に、VMXノンルートモードからVMXルートモードへの遷移は、VM−exitという。このVM−exitは、ゲストが特権命令を発行したときなどの所定の要因で物理CPU60がVMM20へVM−exitを通知する。VMM20がVM−exitを検知すると、所定のエミュレーションを行ってゲストの処理を完了した後、VM−entry命令を発行してVMXノンルートモードからVMXルートモードへ切り替える。
次に、図10AのS1050でVMexit発生した場合の処理を図10B、図10Cにより説明する。
ゲストでVMexitが発生すると、VMM20は図10BのS1060の処理を行う。S1060では、VMexitの原因がコンソール150からの割り込みであるか否かを判定する。コンソール150からの割り込みであればS1140に進み、それ以外であればS1070に進む。
S1140では、コンソール操作の内容がDEACT指示であるか否かを判定する。DEACT指示であればS1150に進み、それ以外であればS1160に進む。
S1150では、VMM20が仮想計算機30の動作終了処理(DEACT処理)を行い、仮想計算機30に割り当てたCPU60、I/Oデバイス170などのリソースを解放し、S1170に進む。
S1170では、VMM20は動作させる仮想CPU600の有無を判定し、動作させるべき仮想CPU600があれば図10AのS1130に戻って、ゲストの実行を再開する。一方、動作させる仮想CPU600がない場合には、図10AのS1000に戻って割り込みが発生するまで待機する。
S1160では、コンソール操作の内容がACT指示であるか否かを判定する。ACT指示であればS1180に進み、それ以外であればS1190に進む。
S1090では、コンソール150からユーザの入力を受け取って割当仮入力表460のデータを更新し、同データをコンソールに表示し、S1130に進む。
S1180では、仮想計算機の動作開始処理(ACT処理)を行い、仮想計算機にCPU60、I/Oデバイス170などのリソースを割り当て、OS40のコードの実行を準備し、図10AのS1130に進む。
S1070では、VMexitの原因がOS40による仮想APIC(仮想LAPICまたは仮想IOAPIC)の設定変更の指示であるか否かを判定する。仮想APICの設定変更指示であればS1200に進み、それ以外であればS1072に進む。
S1200では、OS40の指示に従って仮想LAPICレジスタ480又は仮想IOAPICレジスタ485の設定値を変更し、S1210に進む。
S1210では、仮想計算機30の割り込みモードを判定する。仮想計算機30の割り込みモードとは、OS40による割り込みコントローラ(PIC又はAPIC)の利用方法であり、PICのみを利用するPICモードと、APICのみを利用するAPICモードが存在する。PICモードでは、全ての割り込みがBSP(Boot Strap Processor)と呼ばれる単一のCPUのみに送信される。一方、APICモードでは、必要に応じて割り込みを複数のCPU60に振り分けて送信できる。本ステップでは、仮想計算機30の割り込みモードを、仮想LAPICレジスタ480および仮想IOAPICレジスタ485から判定し、S1120に進む。
S1120では、仮想計算機30の割り込みモードがAPICモードであればS1230に進み、PICモードであればS1250に進む。
S1230では、可能な範囲で、仮想計算機30に占有割り当てられた物理I/Oデバイス170に関して、割り込みパラメータ220の宛先230を、ExclusiveのCPU60の割り込みID72にする。
S1250では、仮想計算機30に占有割り当てされた物理I/Oデバイス170の全てに関して、割り込みパラメータ220の宛先230を、ShareのCPU60の割り込みID72にする。
S1072では、VMexitの原因がOS40による仮想I/Oデバイス1700の割り込みパラメータ490の変更指示であるか否かを判定する。仮想I/Oデバイス1700の割り込みパラメータ490の変更指示であればS1074に進み、それ以外は図10CのS1080に進む。
S1074では、仮想I/Oデバイス1700の割り込みパラメータ490を変更する。仮想I/Oデバイス1700のMSI−Xが有効になった場合は更に、物理I/Oデバイス170の割り込みパラメータ220を変更して物理I/Oデバイス170のMSI−Xも有効にする。また、仮想I/Oデバイス1700のMSIが有効になった場合は更に、物理I/Oデバイス170の割り込みパラメータ220を変更して物理I/Oデバイス170のMSIも有効にする。以上を終えた後、上述のS1210に進む。
図10CのS1080では、VMexitの原因が共有割り当てされた物理I/Oデバイス170の割り込みであるか否かを、ベクタ240等を用いて判定する。共有割り当てされた物理I/Oデバイス170の割り込みであればS1260に進み、それ以外であればS1090に進む。
S1260では、I/Oエミュレータ340を実行して仮想計算機30が物理I/Oデバイス170を占有する場合と同じ応答をOS40に返し、S1270に進む。
S1270では、I/Oエミュレータ340の実行過程で仮想計算機30に仮想の割り込みを起こす必要が生じた場合にS1300に進み、仮想の割り込みを起こす必要が生じなかった場合には図10AのS1130に進む。
S1090では、VMexitの原因が占有割り当てされた物理I/Oデバイス170の割り込みであるか否かを、ベクタ240等を用いて判定する。占有割り当てされた物理I/Oデバイス170の割り込みであればS1300に進み、それ以外であればS1100に進む。
S1300では、仮想計算機30に於ける割り込み発生に対応してPICエミュレータ320又はAPICエミュレータ330を実行し、当該仮想割り込みを仮想PICレジスタ470や仮想LAPICレジスタ480に貯蔵するか、或いは仮想CPU600に伝達して 仮想CPU600をOS40の割り込みハンドラ300に分岐させる。
S1100では、VMexitの原因がタイマ割り込みであるか否かを、ベクタ240等を用いて判定する。タイマ割り込みであればS1310に進み、それ以外であればS1110に進む。
S1110では、VMexitの原因がマスク不能割り込みの一種であるINIT割り込みであるかを判定する。INIT割り込みであればS1330に進み、それ以外であればS1120に進む。
S1310では、VMM20はCPU割り当て時間管理部350を実行し、仮想CPU600がCPU時間を使い切ったか否かを判定する。仮想CPU600が割り当て時間を使いきった場合はS1320に進み、使い切っていなければS1130に進む。
S1320では、CPU割り当て時間管理部350を実行して次に稼動すべき仮想CPU600を特定し、稼動する仮想CPU600を切り替えてS1330に進む。
S1330では、切り替え後の仮想CPU600に対して、仮想PICレジスタ470や仮想LAPICレジスタ480に割り込みが貯蔵され、伝達が保留されているか否かを判定する。割り込み伝達が保留されている場合はS1340に進み、それ以外は図10AのS1130に進む。
S1340では、PICエミュレータ320又はAPICエミュレータ330を実行して、伝達が保留されている割り込みの中に即時伝達可能な割り込みが存在するか否かを判定し、可能であれば割り込みを仮想PICレジスタ470や仮想LAPICレジスタ480から削除してOS40の割り込みハンドラ330に伝達する。
S1120では、上記原因以外のVMexitの原因に応じたエミュレータ310を実行する。
上記処理によりVMM20は、共有で割り当てたI/Oデバイス170の操作及び割り込みに対して漏れなくI/Oエミュレータ340を実行できる。また、仮想計算機30が占有のI/Oデバイス170とExclusiveのCPU60で構成されていれば、VMexitを起こさない高速な割り込み伝達が可能となり、他の組み合わせに対しても漏れなく割り込みを伝達できる。
<3.2.仮想計算機のACT/DEACT処理>
上記図10AのS1030及び図10BのS1180でVMM20が行うACT処理の詳細に関して、図11A及び図11Bを用いて説明する。
図11AのS1400では、VMM20がACTする仮想計算機30を構成する仮想CPU600や仮想I/Oデバイス1700の割り当てに関して、割当仮入力表460の内容の正当性を後述するようにチェックし、S1410に進む。
S1410では、上記S1400のチェックの結果、割当仮入力表460に指定された構成に異常があれば図11BのS1570に進み、異常が無ければS1420に進む。
S1420では、割当仮入力表460に指定された割り当て情報を、実際の割り当てに使用するために、コンソール150からの入力に基づいて物理CPU管理表420、物理I/Oデバイス管理表430、仮想CPU管理表440、仮想I/Oデバイス管理表450を更新し、S1430に進む。
S1430では、ACTする仮想計算機30が占有で使用する全ての物理I/Oデバイス170について、割り込みパラメータ220の宛先230をShareのCPU60の割り込み用ID72に変更し、S1440に進む。本処理はx86互換計算機の割り込みモードの初期値が、PICモードであることに起因する。ノースブリッジ120のPIC90はCPU60のLAPIC70と違って物理計算機1に2つ1組しか存在しないため占有割り当てができない。従って仮想計算機30がPICモードで動作する間は、割り込み発生時にPICエミュレータ320を実行させる必要があるので、割り込み発生時にVMM20が実行されるShareのCPU60で割り込みを受ける。
S1440では、物理計算機1内の共有割り当てで使用する物理I/Oデバイス170全てについて、割り込みパラメータ220の宛先230をShareのCPU60の割り込み用ID72に変更し、S1450に進む。
S1450〜S1490のループでは、仮想計算機30に割り当てた仮想I/Oデバイス1700を全て初期化する。
S1460では、仮想I/Oデバイス1700が共有割り当てされているか否かを判定し、共有割り当てされていればS1470に進み、占有割り当てされていればS1480に進む。
S1470では、I/Oエミュレータ340内の各種データや物理I/Oデバイス170の各種レジスタを初期値に変更して、仮想I/Oデバイス1700を初期化し、S1490に進む。
S1480では、I/Oエミュレータ340内の仮想割り込みパラメータ490を初期化し、物理I/Oデバイス170をリセットして、仮想I/Oデバイス1700を初期化し、S1490に進む。S1490で全ての仮想I/Oデバイス1700について初期化が完了すると、VMM20は図11BのS1500の処理に進む。
図11BのS1500〜S1550のループでは、仮想計算機30に割り当てられた仮想CPU600を全て初期化する。
S1510では、VMM20が仮想CPU管理表440と物理CPU管理表420を参照して、仮想CPU600がExclusiveかShareかを判定する。仮想CPU600が割り当てられた物理CPU60がExclusiveであればS1530に進み、ShareであればS1520に進む。
S1520では、仮想CPU600の割り込み横取りフラグ61を有効化(フラグをセット)し、S1540に進む。本処理は物理CPU60がVT−x対応CPUであれば、VMCS(Virtual Machine Control Structure)内のExternal Interrupt Exiting フィールドを1に設定して実現する。物理CPU60がAMD−V対応CPUであれば、VMCB(Virtual Machine Control Block)内のIntercept INTRフィールドを1に設定して実現する。
S1530では、VMM20が仮想CPU600の割り込み横取りフラグを無効化(フラグをリセット)し、S1540に進む。本処理は物理CPU60がVT−x対応CPUであれば、VMCS(Virtual Machine Control Structure)内のExternal Interrupt Exiting フィールドを0に設定して実現する。物理CPU60がAMD−V対応CPUであれば、VMCB(Virtual Machine Control Block)内のIntercept INTRフィールドを0に設定して実現する。
S1540では、仮想CPU600に付随するレジスタなどのデータ構造を初期化し、S1550に進む。
S1560では、ACT処理に成功した旨を示すために、割当仮入力表460の該当する仮想計算機番号441の稼動状態462をACTに変更する。また、CPU時間割当管理部350を実行して、ACTする仮想計算機30に割り当てられた仮想CPU600にCPU時間を使わせる。すなわち、S1560の処理の後に、図11Bの処理から図10AのS1130の処理に進んで、割り当てられた仮想CPU600でゲストの実行を開始する。
一方、S1570では、ACT処理に失敗した旨を示すために、割当仮入力表460の稼動状態462をDEACTのまま維持する。この処理が終わると、図11Bの処理から図10AのS1130の処理に進んで、コンソール150からの割り込みを受け付ける以前のゲストの実行を再開する。
上記図11A、図11BのACT処理によって、コンソール150から仮想計算機30の起動指令によって割り込みが発生すると、VMM20は指令された仮想計算機30を起動した後に、ゲストの実行に移行する。
上記図11AのS1400で行う割当仮入力表のチェック処理に関して、図16を用いて説明する。
図16のS2110では、VMM20がACT済み及びACT中の仮想計算機30について、割当仮入力表460のExclusiveCPU数464の合計が物理CPU60の総数を下回るか否かを判定する。ExclusiveCPU数464の合計が物理CPU60の総数を下回る場合はS2120に進み、等しいか上回る場合はS2150に進む。本実施形態では、共有I/Oデバイスを扱うために、ShareのCPU60を1つ以上必要とし、ExclusiveのCPU数464の合計は物理CPU60の総数を下回る様に割り当てを制限する。
S2120では、割当仮入力表460の仮想I/Oデバイス1700の割り当て有無466と物理I/Oデバイス使用形態433を参照し、他の仮想計算機30が既に占有している物理I/Oデバイス170を二重に割り当てていないかを判定する。二重に割り当てた場合はS2150に進み、それ以外であればS2140に進む。
S2140では、仮想計算機30の構成が正常と決定する。
S2150では、仮想計算機30の構成が異常と決定する。
以上の処理により、物理CPU60と物理I/Oデバイス170に対する仮想CPU300と仮想I/Oデバイス1700の割当数が正常であるか否かを判定する。例えば、全ての物理CPU60がExclusiveの場合には、仮想計算機30の構成は以上と判定されて、コンソール150に異常の発生を通知する。なお、この異常の通知は、コンソール150の割り当てインターフェースに出力するようにしても良い。
上記図11のS1470でVMM20が行う仮想I/Oデバイス1700の初期化処理に関して、図17を用いて説明する。
S2200では、VMM20が物理I/Oデバイス管理表430の初期化フラグ434を参照し、仮想I/Oデバイス1700に割り当てられた共有物理I/Oデバイスが初期化未了であればS2210に進み、初期化済みであれば2220に進む。
S2210では、仮想I/Oデバイス1700に割り当てられた共有物理I/Oデバイス(物理I/Oデバイス170)をリセットして初期化する。
S2220では、I/Oデバイスエミュレータ340内の、仮想I/Oデバイス1700に関するデータ構造を初期化し、物理I/Oデバイス170のリセット直後の状態と一致させる。
上記図10BのS1150でVMM20が行うDEACT処理に関して、図12を用いて説明する。
S1600では、VMM20がDEACT(終了)する仮想計算機30に占有で割り当てられていた物理I/Oデバイス170を全てリセットし、S1610に進む。
S1610〜S1640のループでは、DEACTする仮想計算機30に割り当てられていた仮想CPU600の全てに対して、終了処理を行う。
S1620では、VMM20で仮想CPU600の割り当てがExclusiveかShareかを判定する。仮想CPU600の割り当てがExclusiveであればS1630に進み、ShareであればS1640に進む。
S1630では、VMM20が物理CPU管理表420を更新して、これまでExclusiveで割り当てていたCPU60の物理CPU利用形態422を Shareに変更する。
S1650では、VMM20が仮想CPU管理表440に含まれる、DEACTする仮想計算機30の割り当て情報を全てクリアし、S1660に進む。
S1660では、VMM20が仮想I/Oデバイス管理表450に含まれる、DEACTする仮想計算機30の割り当て情報を全てクリアする。
以上の処理によって、コンソール150から指示された仮想計算機30を終了し、物理CPU60とI/Oデバイス170を解放する。
ACT処理またはDEACTに関連して、VMM20は、仮想CPU600及び仮想I/Oデバイス1700のホットプラグに対応しても構わない。ホットプラグに対応する場合は、VMM20は、仮想計算機30に関するホットプラグ後のCPU60、I/Oデバイス170の割り当てをユーザから受け取る。CPU60、I/Oデバイス170が増加するホットアッドの場合は、ACT処理の一部を実行して仮想CPU600、仮想I/Oデバイス1700及び、対応する物理CPU60、I/Oデバイス170をACT時同様に初期化する。一方、CPU60、I/Oデバイス170が減少するホットリムーブの場合は、DEACT処理の一部を実行して仮想CPU600、仮想I/Oデバイス1700及び、対応する物理CPU60、I/Oデバイス170の終了処理を行う。
<3.3.物理I/Oデバイスの割り込み宛先変更処理>
上記図10BのS1230で行う占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をExclusiveのCPU60に変更する処理に関して、図13を用いて説明する。
S1700〜S1790のループでは、VMM20が仮想計算機30に割り当てられた仮想I/Oデバイス1700全てに対して設定を読み込んで、必要に応じて物理I/Oデバイス170の割り込みパラメータ220を変更する。
S1710では、仮想I/Oデバイス管理表450と物理I/Oデバイス管理表430を用いて、仮想I/Oデバイス1700が着目している仮想計算機30に占有で割り当てられているかを判定する。占有で割り当てられている場合はS1720に進み、それ以外はS1790に進む。
S1720では、VMM20が仮想I/Oデバイス1700の割り込みパラメータ490を参照し、仮想I/Oデバイス1700のMSI−Xが有効となっているか否かを判定する。VMM20は判定結果がMSI−Xが有効であればS1750に進み、MSI−Xが無効であればS1730に進む。
S1730では、VMM20が仮想I/Oデバイス1700の割り込みパラメータ490の宛先230と、仮想LAPICレジスタ480の割り込み用ID72と、仮想CPU管理表420を用いて、仮想I/Oデバイス1700の割り込みを受ける仮想CPU600がExclusiveのCPUであるか否かを判定する。割り込みを受ける仮想CPU600がExclusiveのCPUであればS1740に進み、ShareのCPUであればS1790に進む。
S1740では、VMM20が仮想I/Oデバイス1700に割り当てられた物理I/Oデバイス170の割り込みパラメータ220に含まれるMSIパラメータ224の宛先230を、割り込みを受ける仮想CPU600に割り当てられたExclusiveのCPUの割り込み用ID72に変更する。また、同MSIパラメータ224のベクタ240を、OS40が仮想I/Oデバイス1700の割り込みパラメータ490に指定したベクタ240と一致させる。
S1750〜S1780のループでは、物理I/Oデバイス170のMSI−Xパラメータリスト228について、設定の確認と変更を行う。
S1760では、仮想I/Oデバイス1700の割り込みパラメータ490に含まれるMSI−Xパラメータに指定された宛先230と、仮想LAPICレジスタ480の割り込み用ID72と、仮想CPU管理表420を用いて、仮想I/Oデバイス1700の割り込みを受ける仮想CPU600がExclusiveのCPUであるか否かを判定する。割り込みを受ける仮想CPU600がExclusiveのCPUであればS1770に進み、ShareのCPUであればS1780に進む。
S1770では、仮想I/Oデバイス1700に割り当てられた物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリスト228の宛先230を、割り込みを受ける仮想CPU600に割り当てられたExclusiveのCPUの割り込み用ID72に変更する。また、同MSI−Xパラメータリスト228のベクタ240を、OS40が仮想I/Oデバイス1700の割り込みパラメータ490に指定したベクタ240と一致させる。
上記処理によって、占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をExclusiveのCPU60に変更することができる。
上記図11AのS1430で行う占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をShareのCPU60に変更するVMM20の処理に関して、図14を用いて説明する。
S1900〜S2010のループでは、VMM20が仮想計算機30に割り当てられた仮想I/Oデバイス1700全てに対して設定を読み込み、必要に応じて物理I/Oデバイス170の割り込みパラメータ220を変更する。
S1910では、VMM20が仮想I/Oデバイス管理表450と物理I/Oデバイス管理表430を参照して、仮想I/Oデバイス1700が着目している仮想計算機30に占有で割り当てられているか否かを判定する。仮想I/Oデバイス1700が占有で割り当てられている場合はS1920に進み、それ以外はS2010に進む。
S1920では、VMM20が物理I/Oデバイス170の割り込みパラメータ220を参照し、物理I/Oデバイス170がMSI−Xを有効にされているか否かを調べる。MSI−Xが有効であればS1960に進み、MSI−Xが無効であればS1930に進む。
S1930では、VMM20が物理I/Oデバイス170の割り込みパラメータ220の宛先230と、物理LAPIC70の割り込み用ID72と、物理CPU管理表420を参照して、物理I/Oデバイス170の割り込みを受ける物理CPU60がExclusiveのCPUであるか否かを判定する。割り込みを受ける仮想CPU600がExclusiveのCPUであればS1940に進み、ShareのCPUであればS2010に進む。
S1940では、VMM20が物理CPU管理表420からShareのCPU60を1つ選択してS1950に進む。本実施形態ではShareのCPU数が0になる構成を禁止しているため、ShareのCPU60は必ず見つかる。
S1950では、物理I/Oデバイス170の割り込みパラメータ220に含まれるMSIパラメータ224の宛先230を、上記S1940で選択したShareのCPU60の割り込み用ID72に変更する。また、同MSIパラメータ224のベクタ240を、VMM20が割り込みの識別に使用するベクタに変更する。
S1960〜S2000のループでは、VMM20が物理I/Oデバイス170のMSI−Xパラメータリスト228について、設定確認と変更を行う。
S1960では、物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリスト228に指定された宛先230と、物理LAPIC70の割り込み用ID72と、物理CPU管理表420をVMM20が参照して、物理I/Oデバイス170の割り込みを受ける物理CPUがExclusiveのCPUであるか否かを判定する。割り込みを受ける物理CPU60がExclusiveのCPUであればS1980に進み、ShareのCPUであればS2000に進む。
S1980では、VMM20が物理CPU管理表420からShareのCPUを1つ選択し、S1990に進む。本実施形態ではShareのCPU数が0になる構成を禁止しているため、ShareのCPUは必ず見つかる。
S1990では、VMM20が物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリスト228の宛先230を、上記S1980で選択したShareのCPU60の割り込み用ID72に変更する。また、同MSI―Xパラメータリスト228のベクタ240を、VMM20が割り込みの識別に使用するベクタに変更する。
上記処理により、占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をShareのCPU60に変更することができる。
上記図11AのS1440でVMM20が行う共有で割り当てられた物理I/Oデバイス170の割り込みの宛先をShareのCPU60に変更する処理に関して、図15を用いて説明する。
S2020〜S2030のループでは、VMM20が物理計算機1内の物理I/Oデバイス170の全てに対して設定を確認し、必要に応じて割り込みパラメータ220を変更する。
S2025では、VMM20が物理I/Oデバイス管理表430を参照して、物理I/Oデバイス170が共有割り当てで使用されているか否かを判定する。物理I/Oデバイス170が共有割り当てで使用されている場合はS1920に進み、それ以外はS2030に進む。
S1920〜S2000については、図14に示した同符号の処理と同一であり、物理I/Oデバイス170の割り込みパラメータ220に含まれるMSIパラメータ224またはMSI−Xパラメータリスト228の更新を行うもので、説明は省略する。
上記処理によって、共有で割り当てられた物理I/Oデバイス170の割り込みの宛先をShareのCPU60に変更することができる。
<3.4.新規仮想割り込みの伝達処理>
上記図10CのS1300でVMM20が行う新規仮想割り込みの伝達処理に関して、図18を用いて説明する。
S2300では、VMM20が仮想計算機30の割り込みモードを、仮想LAPICレジスタ480および仮想IOAPICレジスタ485から判定する。割り込みモードがAPICモードであればS2330に進み、PICモードであればS2310に進む。
S2310では、VMM20が受け付けた割り込みを仮想PICレジスタ470に貯蔵して割り込みを保留させ、S2312に進む。
S2312では、VMM20がPICモード時の割り込みの宛先である仮想CPU600が動作中であるか否かを判定する。この判定は、宛先の仮想CPU600に対応する仮想BSPが、現在動作中であるか否かを判定する。仮想BSPが稼動中であればS2315へ進み、CPU時間の割り当てを待っている状態であれば新規仮想割り込みの伝達処理を終了する。
S2315では、VMM20は仮想CPU600に対応する仮想BSPが、本処理を実行中の物理CPU60で動作しているか否かを判定する。本処理(仮想CPU600に対応する仮想BSP)を実行中の物理CPU60で動作している場合はS2320へ進み、他の物理CPU60で動作している場合はS2325へ進む。
S2320では、仮想PICレジスタ470に保留されている割り込みを、仮想CPU600に伝達可能であるか否かを判定し、伝達可能であれば、仮想PICレジスタ470の割り込みをクリアして仮想CPU600をOS40の割り込みハンドラ300の処理に分岐させる。
S2325では、割り込み伝達処理を含むエミュレータ310を他の物理CPU60に実行させるために、マスク不能割り込み(NMI:Non-Maskable Interrupt)の一種であるINIT割り込みを指定して物理IPI(プロセッサ間割り込み)を送信する。INIT割り込みを受けた物理CPU60は、割り込み横取りフラグ61の設定に依らずVMM20を実行するため、仮想割り込みの送り先がExclusiveの物理CPU60に対してもエミュレータを実行させることができる。
S2330では、仮想I/Oデバイス1700のエミュレーションを行うI/Oエミュレータ340の割り込みパラメータ490と、仮想LAPICレジスタ480の割り込み用ID72を参照し、仮想I/Oデバイス1700の割り込みの宛先である仮想CPU600を特定してS2340に進む。
S2340では、VMM20が仮想CPU管理表440を参照して、仮想割り込みの宛先となる仮想CPU600がExclusiveかShareかを判定する。割り込みの宛先の仮想CPU600がExclusiveであればS2370に進み、ShareであればS2350に進む。
S2350では、仮想CPU600が割り込みを仮想LAPICレジスタ480に貯蔵して割り込みを保留させ、S2360に進む。
S2360では、仮想LAPICレジスタ480に保留されている割り込みを、仮想CPU600に伝達可能であるか否かを判定し、伝達可能であれば、仮想LAPICレジスタ480の割り込みをクリアして 仮想CPU600の処理をOS40の割り込みハンドラ300に分岐させる。
S2370では、発生した仮想割り込みの宛先230とベクタ240を、仮想I/Oデバイス1700のエミュレーションを行うI/Oエミュレータ340の割り込みパラメータ490から取得し、宛先となるExclusiveのCPUに対してIPI(Inter Processor Interrupt)を送信する。本処理により、ExclusiveのCPU60はVMM20を呼ぶことなしに、OS40の割り込みハンドラ300にI/Oデバイス170の割り込みベクタ240を渡しつつ分岐する。
<4.まとめ>
以上に示した実施形態によれば、割り込み横取りフラグ71が有効であるShareのCPU60と、割り込み横取りフラグ71が無効であるExclusiveのCPU60を組み合わせて使用し、物理I/Oデバイス170の利用形態と、物理I/Oデバイス170の割り込み宛先CPU60の利用形態に応じて、割り込みパラメータ220を変更することで、仮想計算機30が占有I/Oデバイス170とExclusiveのCPU60で構成される場合の割り込み伝達オーバヘッドを廃し、共有I/Oデバイス170の割り込みに対しては必ずエミュレータ310を実行できる。これにより、x86互換計算機でポートされている標準機能のみを用いて、占有I/Oデバイス170の割り込みオーバヘッドの削減と、共有I/Oデバイスに必要なエミュレータ310の実行の両立を実現できる。
さらに、本発明では、x86互換CPU60に搭載された、物理I/Oデバイス107によるマスク可能割り込みを横取りしてOS40の代わりにVMM20を実行させる機能を使用する割り込み横取り機能と呼び、割り込み横取り機能を有効化または無効化するフラグを割り込み横取りフラグとする。割り込み横取り機能としては、IntelがVT−x機能の一環として提供している External Interrupt Exitingや、AMDがAMD−V機能の一環として提供しているIntercept INTRなどが該当する。
本発明では、x86互換の物理CPU60を2つ以上使用し、x86互換の物理CPU60で割り込み受信時に実行されるコード(割り込みハンドラ)を設定し、I/Oデバイス170からの割り込みを受信すると、1つ以上のCPU60で割り込み横取りフラグを無効化して割り込み受信時にOSの割り込みハンドラを実行させ、1つ以上のCPU60で割り込み横取りフラグを有効化して割り込み受信時にVMM20が有するエミュレータ310を実行させる。また、仮想CPU600に対する物理CPU60の割当形態として、割り込み横取りフラグが有効な形態と無効な形態を選択可能にする。
仮想計算機30に対して、CPU60が割り込み横取り有効化で割り当てられている場合は、当該仮想計算機30が使用する物理I/Oデバイス170の割り込みの宛先を、割り込み横取りが有効な物理CPU60に設定する。
仮想計算機30に対して、I/Oデバイス170が占有割り当て、かつ、CPU60が割り込み横取り無効化で割り当てられている場合は、該当する物理I/Oデバイス170の割り込みの宛先を、該当する物理CPU60に設定する。
仮想計算機30に対して、I/Oデバイス170が共有割り当て、かつ、CPU60が割り込み横取り無効化で割り当てられている場合は、該当する物理I/Oデバイス170の割り込みの宛先を、割り込み横取りが有効なCPU60に設定する。割り込みを契機に実行されるエミュレータ310は、仮想I/Oデバイス1700の割り込みを受けるべき仮想CPU600に割り当てた物理CPU60に、IPI(プロセッサ間割り込み)等の手段を用いてマスク可能割り込みを送信し、割り込みを伝達する。
<第2実施形態>
以下では、本発明を、ノースブリッジ120で割り込みパラメータを差し替える割り込みリマップ機能と組み合わせる実施形態を説明する。以下では、添付図面に基づいて第1実施形態1との違いを説明する。
<1.ハードウェア構成>
第2の実施形態のハードウェア構成は図19に示すように、ノースブリッジ120に関連する要素のみが前記第1実施形態と異なる。ノースブリッジ120は、IntelのVT−d又はAMDのIOMMUに対応しており、割り込みパラメータを差し替える機能である割り込みリマップ機能100が搭載される。
<2.ソフトウェア構成>
図20で示すようにソフトウェア構成及び制御対象のハードウェア要素は、図20に示すように、物理計算機1及びVMM20の、割り込みリマップ機能に関連する要素のみが前記第1実施形態と異なる。
物理計算機1は割り込みリマップ機能100を提供する。またVMM20は、割り込みリマップ機能に対応した割り込みリマップ表400を有する。
メモリ110は、図21に示すように、VMM20に割り当てたメモリに存在する割り込みリマップ表400のみが前記第1実施形態と異なる。
割り込みパラメータ220は、図22に示すように、MSIパラメータ224とMSI−Xパラメータリスト228の内容のみが前記第1実施形態と異なる。
MSIパラメータ224は、リマップID280を含む。リマップID280は、割り込みパラメータの差し替えに使用する割り込みリマップ表400のエントリを特定する識別番号である。
MSI−Xパラメータリスト228は、複数のリマップID280を含む。MSI−XにはI/Oデバイスによる割り込みの理由に応じて、異なる宛先230とベクタ240で割り込みを伝達する機能がある。本機能を実現するために、割り込みの理由に対応したエントリが複数存在し、各エントリにリマップID280を指定できる。
割り込みリマップ表400は、図23に示すように、リマップID280に前記第1実施形態の図4に示した割り込みパラメータの宛先230とベクタ240が付随する表である。ノースブリッジ120がVT−dに対応している場合は物理計算機1内の全ての物理デバイス170が単一の割り込みリマップ表を参照する。一方、ノースブリッジ120がIOMMUに対応している場合は、単一の割り込みリマップ表を用いる代わりに物理I/Oデバイス170毎に異なる割り込みリマップ表を用いても構わない。
<3.VMMによる割り込み伝達処理の概要>
次に、ゲストの動作に合わせてVMMが行う割り込み伝達処理の一例について、以下、フローチャートを参照しながら説明する。
<3.1.VMMによる割り込み伝達処理の概要>
前記第1実施形態の図10A〜図10Cは、VMM20上でゲストを実行するときの全体的な処理を示すフローチャートであり、本第2実施形態にも適用することができる。本フローチャートは、物理I/Oデバイス170の割り込みの宛先を変更するS1230とS1250を除いて前記第1実施形態と同一である。
図10BのS1230では、VMM20が仮想計算機30に占有割り当てされた物理I/Oデバイス170に関して、割り込み発生時のエミュレータ実行が不要であれば、割り込みリマップ表400の宛先230を、ExclusiveのCPU60の割り込み用ID72に設定する。
S1250では、VMM20が仮想計算機30に占有割り当てされた物理I/Oデバイス170全てに関して、割り込みリマップ表400の宛先230を、ShareのCPU60の割り込み用ID72に設定する。
<3.2.仮想計算機のACT/DEACT処理>
前記第1実施形態の図10A、図10BのS1030及び1180で行うACT処理に関して、前記第1実施形態の図11A、図11Bを用いて説明する。本フローチャートを本第2実施形態に適用する際には、物理I/Oデバイス170の割り込みの宛先を変更するS1430とS1440とS1001を除いて前記第1実施形態と同一である。
図10AのS1001では、物理CPU数や物理I/Oデバイスの種類と数を認識してVMM20内のデータを初期化し、物理I/Oデバイスの割り込みパラメータ220のリマップID280に連番を割り当てる。また割り込みリマップ表400を初期化して、割り込みを物理CPU60に伝達可能とし、S1000に進む。
図11AのS1430では、ACTする仮想計算機30が占有で使用する全ての物理I/Oデバイス170について、割り込みリマップ表400の宛先230をShareのCPU60の割り込み用ID72に変更し、S1440に進む。本処理はx86互換計算機の割り込みモードの初期値が、PICモードであることに起因する。ノースブリッジ120のPIC90はCPU60のLAPIC70と違って物理計算機1に2つ1組しか存在しないため占有割り当てができない。従って仮想計算機30がPICモードで動作する間は、割り込み発生時にPICエミュレータ320を実行させる必要があるので、割り込み時にVMM20が実行されるShareのCPU60で割り込みを受ける。
S1440では、物理計算機1内の共有割り当てで使用する物理I/Oデバイス170全てについて、割り込みリマップ表400の宛先230をShareのCPU60の割り込み用ID72に変更し、S1450に進む。
上記図11AのS1400で行う割当仮入力表のチェック処理は前記第1実施形態と同一であるため説明を省略する。
上記図11AのS1470で行う仮想I/Oデバイス1700の初期化処理は前記第1実施形態と同一であるため説明を省略する。
上記図10BのS1150で行うDEACT処理は前記第1実施形態と同一であるため説明を省略する。
<3.3.物理I/Oデバイスの割り込み宛先変更処理>
上記図10BのS1230で行う占有で割り当てられた物理I/Oデバイスの割り込みの宛先をExclusiveのCPUに変更する処理に関して、前記第1実施形態の図13を本第2実施形態に適用する例を説明する。
S1700〜S1790のループでは、仮想計算機30に割り当てられた仮想I/Oデバイス1700全てに対して設定を確認し、必要に応じて割り込みリマップ表400を変更する。
S1710では、仮想I/Oデバイス管理表450と物理I/Oデバイス管理表430を用いて、仮想I/Oデバイス1700が着目している仮想計算機30に占有で割り当てられているかを判定する。占有で割り当てられている場合はS1720に進み、それ以外はS1790に進む。
S1720では、仮想I/Oデバイス1700の割り込みパラメータ490を参照し、仮想I/Oデバイス1700がMSI−Xを有効にしているか調べる。MSI−Xが有効であればS1750に進み、MSI−Xが無効であればS1730に進む。
S1730では、仮想I/Oデバイス1700の割り込みパラメータ490の宛先230と、仮想LAPICレジスタ480の割り込み用ID72と、仮想CPU管理表420を用いて、仮想I/Oデバイス1700の割り込みを受ける仮想CPU600がExclusiveのCPUであるかを判定する。割り込みを受ける仮想CPU600がExclusiveのCPU60であればS1740に進み、ShareのCPUであればS1790に進む。
S1740では、仮想I/Oデバイス1700に割り当てられた物理I/Oデバイス170の割り込みパラメータ220に含まれるMSIパラメータ224に指定されたリマップID280に対応する割り込みリマップ表400のエントリ内の宛先230を、割り込みを受ける仮想CPU600に割り当てられたExclusiveのCPUの割り込み用ID72に変更する。また、割り込みリマップ表400の同エントリのベクタ240を、OS40が仮想I/Oデバイス1700の割り込みパラメータ490に指定したベクタ240と一致させる。
S1750〜S1780のループでは、物理I/Oデバイス170のMSI−Xパラメータリスト228と割り込みリマップ表400の組み合わせについて、設定確認と変更を行う。
S1760では、仮想I/Oデバイス1700の割り込みパラメータ490に含まれるMSI−Xパラメータに指定された宛先230と、仮想LAPICレジスタ480の割り込み用ID72と、仮想CPU管理表420を用いて、仮想I/Oデバイス1700の割り込みを受ける仮想CPU600がExclusiveのCPUであるか否かを判定する。割り込みを受ける仮想CPU600がExclusiveのCPUであればS1770に進み、ShareのCPUであればS1780に進む。
S1770では、仮想I/Oデバイス1700に割り当てられた物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリスト228に指定されたリマップID280に対応する割り込みリマップ表400のエントリ内の宛先230を、割り込みを受ける仮想CPU600に割り当てられたExclusiveのCPUの割り込み用ID72に変更する。また、割り込みリマップ表400の同エントリのベクタ240を、OS40が仮想I/Oデバイス1700の割り込みパラメータ490に指定したベクタ240と一致させる。上記処理によって、占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をExclusiveのCPU60に変更することができる。
上記図10BのS1250及び図11AのS1430で行う占有で割り当てられた物理I/Oデバイス170の割り込みの宛先をShareのCPUに変更する処理に関して、前記第1実施形態の図14を本第2実施形態に適用する例を説明する。
S1900〜S2010のループでは、VMM20が仮想計算機30に割り当てられた仮想I/Oデバイス1700全てに対して設定を確認し、必要に応じて割り込みリマップ表400を変更する。
S1910では、VMM20が仮想I/Oデバイス管理表450と物理I/Oデバイス管理表430を参照して、仮想I/Oデバイス1700が着目している仮想計算機30に占有で割り当てられているか否かを判定する。仮想I/Oデバイス1700が占有で割り当てられている場合はS1920に進み、それ以外はS2010に進む。
S1920では、VMM20が物理I/Oデバイス170の割り込みパラメータ220を参照し、物理I/Oデバイス170がMSI−Xを有効にしているか否かを調べる。MSI−Xが有効であればS1960に進み、MSI−Xが無効であればS1930に進む。
S1930では、VMM20が物理I/Oデバイスの割り込みパラメータ220のリマップID280と、割り込みリマップ表400の該当エントリに指定された宛先230と、物理LAPICの割り込み用ID72と、物理CPU管理表420を用いて、物理I/Oデバイスの割り込みを受ける物理CPUがExclusiveのCPU60であるかを判定する。割り込みを受ける仮想CPU600がExclusiveのCPUであればS1940に進み、ShareのCPUであればS2010に進む。
S1940では、VMM20が物理CPU管理表420からShareのCPUを1つ選び、S1950に進む。本実施形態ではShareのCPU数が0になる構成を禁止しているため、ShareのCPUは必ず見つかる。
S1950では、物理I/Oデバイス170の割り込みパラメータ220に含まれるMSIパラメータ224に指定されたリマップID280に対応する割り込みリマップ表400のエントリ内の宛先230を、上記S1940で選択したShareのCPU60の割り込み用ID72に変更する。また、割り込みリマップ表400の同エントリのベクタ240を、VMM20が割り込みの識別に使用するベクタに変更する。
S1960〜S2000のループでは、VMM20が物理I/Oデバイス170のMSI−Xパラメータリスト228と割り込みリマップ表400の組み合わせについて、設定確認と変更を行う。
S1960では、VMM20が物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリストに指定されたリマップID280と、割り込みリマップ表400の該当エントリに指定された宛先230と、物理LAPIC70の割り込み用ID72と、物理CPU管理表420を用いて、物理I/Oデバイスの割り込みを受ける物理CPUがExclusiveのCPUであるか否かを判定する。割り込みを受ける物理CPU60がExclusiveのCPUであればS1980に進み、ShareのCPUであればS2000に進む。
S1980では、VMM20が物理CPU管理表420からShareのCPUを1つ選び、S1990に進む。本実施形態ではShareのCPU数が0になる構成を禁止しているため、ShareのCPUは必ず見つかる。
S1990では、物理I/Oデバイス170の割り込みパラメータ220に含まれるMSI−Xパラメータリスト228に指定されたリマップID280に対応する割り込みリマップ表400のエントリ内の宛先230を、S1980で選択したShareのCPU60の割り込み用ID72に変更する。また、割り込みリマップ表400の同エントリのベクタ240を、VMM20が割り込みの識別に使用するベクタに変更する。
上記図11AのS1440で行う共有で割り当てられた物理I/Oデバイスの割り込みの宛先をShareのCPUに変更する処理に関して、前記第1実施形態の図15を本第2実施形態に適用する場合について説明する。
図15のS2020〜S2030のループでは、物理計算機1内の物理I/Oデバイス170全てに対して割り込みリマップ表400の設定を確認し、必要に応じて割り込みリマップ表400を変更する。
S2025では、VMM20が物理I/Oデバイス管理表430を用いて、物理I/Oデバイス170が共有割り当てで使用されているか否かを判定する。物理I/Oデバイス170が共有割り当てで使用されている場合はS1920に進み、それ以外はS2030に進む。
S1920〜S2000については、前記第1実施形態の図15の同番号の処理と同じため、説明を省略する。
<3.4.新規仮想割り込みの伝達処理>
上記図10CのS1300で行う新規仮想割り込みは前記第1実施形態と同一であるため説明を省略する。
<4.まとめ>
以上に示した第2の実施形態によれば、割り込み横取りフラグ71が有効であるShareのCPUと、割り込み横取りフラグが無効であるExclusiveのCPUを組み合わせて使用し、I/Oデバイス170の利用形態とI/Oデバイス170の割り込み宛先CPUの利用形態に応じて、割り込みリマップ表400を変更することで、仮想計算機30が占有I/Oデバイス1700とExclusiveのCPU60で構成される場合の割り込み伝達オーバヘッドを廃し、共有I/Oデバイス170の割り込みに対しては必ずエミュレータ310を実行できる。
以上のように、本発明は、x86互換のCPUを備えた仮想計算機システム及び仮想化ソフトウェアに適用することができる。
第1の実施形態を示し、仮想計算機システムを動作させる物理計算機のブロック図。 第1の実施形態を示し、仮想計算機システムのソフトウェアとハードウェアの要部を示すスタック図。 第1の実施形態を示し、メモリ領域のマップ。 第1の実施形態を示し、I/Oデバイスが保持する割り込みパラメータの構成図。 第1及び第2の実施形態を示し、CPU及びI/Oデバイスの割り当てを仮決めする割当仮入力表の構成図。 第1及び第2の実施形態を示し、物理CPUの割り当てを規定する物理CPU管理表の構成図。 第1及び第2の実施形態を示し、物理I/Oデバイスの割り当てを規定する物理I/Oデバイス管理表の構成図。 第1及び第2の実施形態を示し、仮想CPUの割り当てを規定する仮想CPU管理表の構成図。 第1及び第2の実施形態を示し、仮想I/Oデバイスの割り当てを規定する仮想I/Oデバイス管理表の構成図。 第1及び第2の実施形態を示し、ゲスト及びVMMの動作概要を示すフローチャートで、前半部を示す。 第1及び第2の実施形態を示し、ゲスト及びVMMの動作概要を示すフローチャートで、中盤部を示す。 第1及び第2の実施形態を示し、ゲスト及びVMMの動作概要を示すフローチャートで、後半部を示す。 第1及び第2の実施形態を示し、仮想計算機のACT(動作開始)処理を示すフローチャートで、前半部を示す。 第1及び第2の実施形態を示し、仮想計算機のACT(動作開始)処理を示すフローチャートで、後半部を示す。 第1及び第2の実施形態を示し、仮想計算機のDEACT(動作終了)処理を示すフローチャート。 第1及び第2の実施形態を示し、占有I/Oデバイスの割り込み宛先をExclusiveのCPUに変更する処理を示すフローチャート。 第1及び第2の実施形態を示し、占有I/Oデバイスの割り込み宛先をShareのCPUに変更する処理を示すフローチャート。 第1及び第2の実施形態を示し、共有I/Oデバイスの割り込み宛先をShareのCPUに変更する処理を示すフローチャート。 第1及び第2の実施形態を示し、割当仮入力表の妥当性確認処理を示すフローチャート。 第1及び第2の実施形態を示し、仮想I/Oデバイスの初期化処理を示すフローチャート。 第1及び第2の実施形態を示し、仮想割り込み発生時の対応処理を示すフローチャート。 第2の実施形態を示し、仮想計算機システムを動作させる物理計算機のブロック図。 第2の実施形態を示し、仮想計算機システムのソフトウェアとハードウェアの要部を示すスタック図。 第2の実施形態を示し、メモリ領域のマップ。 第2の実施形態を示し、I/Oデバイスが保持する割り込みパラメータの構成図。 第2の実施形態を示し、割り込みリマップ表の構成図。
符号の説明
10 物理計算機
20 VMM
30 仮想計算機
40 OS
50 AP(アプリケーション)
60 CPU
61 割り込み横取りフラグ
70 LAPIC
80 IOAPIC
90 PIC
100 割り込みリマップ機能
110 メモリ
120 ノースブリッジ
140 CPU間インターフェース
150 コンソール
170 物理I/Oデバイス
220 割り込みパラメータ
230 宛先
240 ベクタ
280 リマップID
300 割り込みハンドラ
310 エミュレータ
320 PICエミュレータ
330 APICエミュレータ
340 I/Oエミュレータ
350 CPU割当時間管理部
360 物理割り込み宛先管理部
370 ACT/DEACT部
380 コンソール制御部
390 物理割り込み受信部
400 割り込みリマップ表
410 リソース管理表
420 物理CPU管理表
430 物理I/Oデバイス管理表
440 仮想CPU管理表
450 仮想I/Oデバイス管理表
460 割当仮入力表
470 仮想PICレジスタ
480 仮想LAPICレジスタ
490 仮想割り込みパラメータ

Claims (20)

  1. 複数の物理CPUと、物理メモリとを備えた物理計算機で仮想計算機を提供する仮想化部を実行し、前記仮想化部は所定のエミュレータを含んで前記仮想計算機上でOSを稼動させる仮想計算機の制御方法であって、
    前記物理CPUは、前記仮想計算機の割り込み受信時に実行される割り込みハンドラを設定可能な物理CPUであり、
    前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップと、
    前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップと、
    を含むことを特長とする仮想計算機の制御方法。
  2. 請求項1に記載の仮想計算機の制御方法であって、
    前記物理計算機は1つ以上の物理I/Oデバイスを含み、
    前記仮想化部は、前記仮想計算機に1つ以上の仮想CPUと1つ以上の仮想I/Oデバイスを提供し、
    前記仮想化部が、前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが単一の仮想計算機によって直接利用される第1の形態または前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第2の形態で割り当てるステップと、
    前記仮想化部が、前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時にOSを実行する第3の形態または前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時に前記エミュレータを実行する第4の形態で割り当てるステップと、をさらに含み、
    前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップは、
    前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが単一の仮想計算機による直接利用を許す第1の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想CPUに対して前記物理CPUが割り込み受信時にOSを実行する第3の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込み受信時に前記物理CPUでOSを実行させ、
    前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップは、
    前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが前記エミュレータによって複数の仮想計算機で間接利用する第2の形態で割り当てられているか、或いは 前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時に前記エミュレータを実行する第4の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込み受信時に前記物理CPUでエミュレータを実行させることを特徴とする仮想計算機の制御方法。
  3. 請求項2に記載の仮想計算機の制御方法であって、
    前記物理CPUは、VT−x又はAMD−Vに対応したx86互換の物理CPUで構成されて、前記物理CPUはマスク可能割り込みの受信時に前記エミュレータを実行させる割り込み横取り機能としてExternal Interrupt Exiting又はIntercept INTRを有し、
    少なくとも1つの前記物理CPUで前記割り込み横取り機能を無効化するステップと、
    少なくとも1つの前記物理CPUで前記割り込み横取り機能を有効化するステップと、をさらに含み、
    前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ 当該仮想計算機を構成する仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込みを、前記割り込み横取り機能を無効化した前記物理CPUで受け取ってOSを実行させ、
    前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第2の形態で割り当てられているか、或いは 前記仮想計算機を構成する仮想CPUに対して物理CPUが前記第4の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込みを、前記割り込み横取り機能を有効化した物理CPUで受け取って前記エミュレータを実行させることを特徴とする仮想計算機の制御方法。
  4. 請求項2に記載の仮想計算機の制御方法であって、
    前記物理計算機は、前記物理I/Oデバイスの割り込みの宛先となる物理CPUを規定するモジュールを有し、
    前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ前記OSが当該仮想I/Oデバイスの割り込みの宛先を前記モジュールを参照して変更し、かつ前記宛先に指定された仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を当該物理CPUに変更することを特徴とする仮想計算機の制御方法。
  5. 請求項2に記載の仮想計算機の制御方法であって、
    前記物理CPUは、マスク可能割り込みの受信時に実行される割り込みハンドラを設定可能なCPUであり、
    前記物理CPUのうち少なくとも1つの第二の物理CPUで前記割り込み受信時に前記エミュレータを実行させるステップは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第2の形態で割り当てられ、かつ当該仮想I/Oデバイスの割り込みの宛先となる仮想CPUに対して、前記物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスからの割り込みを受信した前記エミュレータに、当該物理CPUに対してマスク可能な物理割り込みを送信させることを特徴とする仮想計算機の制御方法。
  6. 請求項2に記載の仮想計算機の制御方法であって、
    前記物理CPUは、マスク不能割り込みの受信時に前記エミュレータを実行可能なCPUであり、
    前記物理CPUのうち少なくとも1つの前記第一の物理CPUで前記割り込み受信時に前記OSを実行させるステップは、
    前記第3の形態で割り当てられた前記物理CPUに前記エミュレータを実行させる場合に、当該物理CPUに対してマスク不能割り込みを送信することを特徴とする仮想計算機の制御方法。
  7. 複数の物理CPUと物理メモリと1つ以上の物理I/Oデバイスを有する物理計算機で所定のエミュレータを含む仮想計算機を提供し、前記仮想計算機上でOSを稼動させる仮想計算機の制御プログラムであって、
    前記物理計算機は、前記物理I/Oデバイスの割り込みの宛先物理CPUを規定するモジュールを有し、
    前記物理CPUは、割り込み受信時に実行される割り込みハンドラを設定可能であり、
    前記仮想計算機に1つ以上の仮想CPUと1つ以上の仮想I/Oデバイスを提供する手順と、
    前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが単一の仮想計算機によって直接利用される第1の形態、または前記仮想計算機を構成する前記仮想I/Oデバイスに対して前記物理I/Oデバイスが前記エミュレータによって複数の仮想計算機で間接利用される第2の形態で割り当てる手順と、
    前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時にOSを実行する第3の形態、または前記仮想計算機を構成する前記仮想CPUに対して前記物理CPUが割り込み受信時に前記エミュレータを実行する第4の形態で割り当てる手順と、
    前記仮想CPUに対する物理CPUの割当形態が、前記割り込み受信時に前記OSを実行させる第3の形態の場合のときに、前記割り込み受信時に実行される割り込みハンドラを前記OSに設定する手順と、
    前記仮想CPUに対する物理CPUの割当形態が、前記第4の形態の場合のときに、前記割り込み受信時に実行される割り込みハンドラを前記エミュレータに設定する手順と、
    前記仮想I/Oデバイスに対する物理I/Oデバイスの割当形態が、前記第2の形態のときに、当該物理I/Oデバイスの割り込み宛先を、前記第4の形態で割り当てられた前記物理CPUに設定する手順と、
    前記仮想I/Oデバイスに対する物理I/Oデバイスの割当形態が、前記第1の形態であって、かつ当該仮想I/Oデバイスの割り込みの宛先の仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、当該物理CPUに設定する手順と、
    前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ当該仮想I/Oデバイスの割り込みの宛先の仮想CPUに対して前記物理CPUが前記第4の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、前記第4の形態で割り当てられた物理CPUに設定する手順と、
    を前記物理計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  8. 請求項7に記載の仮想計算機の制御プログラムであって、
    前記仮想CPUに対する前記物理CPUの割当形態の指示を受け付ける手順と、
    前記仮想I/Oデバイスに対する物理I/Oデバイスの割当形態の指示を受け付ける手順と、
    をさらに有することを特徴とする仮想計算機の制御プログラム。
  9. 請求項7に記載の仮想計算機の制御プログラムであって、
    全ての前記物理CPUを前記第3の形態で利用する構成を異常と判定する手順をさらに有することを特徴とする仮想計算機の制御プログラム。
  10. 請求項7に記載の仮想計算機の制御プログラムであって、
    前記物理CPUは、VT−x又はAMD−Vに対応したx86互換の物理CPUであって、マスク可能割り込みの受信時にエミュレータを実行させる割り込み横取り機能としてExternal Interrupt Exiting 又は Intercept INTRを有し、
    前記仮想計算機は、仮想割り込みコントローラとして仮想PIC及び仮想APICを含み、
    前記OSが前記仮想PICを使用中の場合に、前記仮想計算機に割り当てた物理I/Oデバイスの割り込みの宛先を、前記第4の形態の物理CPUに設定する手順と、
    前記OSが前記仮想APICを使用中で、かつ前記仮想計算機に割り当てた物理I/Oデバイスが前記第2の形態の場合に、当該物理I/Oデバイスの割り込みの宛先を、前記第4の形態の物理CPUに設定する手順と、
    前記OSが前記仮想APICを使用中で、かつ前記仮想計算機を構成する仮想I/Oデバイスの割り込みの宛先の仮想CPUに対して前記物理CPUが前記第3の形態で割り当てられ、かつ当該仮想I/Oデバイスに対して前記物理I/Oデバイスが前記第1の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、当該物理CPUに設定する手順と、
    前記OSが前記仮想APICを使用中で、かつ前記仮想計算機を構成する仮想I/Oデバイスの割り込みの宛先仮想CPUに対して物理CPUが前記第4の形態で割り当てられ、かつ当該仮想I/Oデバイスに対して前記物理I/Oデバイスが前記第1の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、前記第4の形態で割り当てられた前記物理CPUに設定する手順と、
    を有することを特徴とする仮想計算機の制御プログラム。
  11. 請求項7に記載の仮想計算機の制御プログラムであって、
    前記仮想計算機を構成する仮想I/Oデバイスに対して前記物理I/Oデバイスが前記第1の形態で割り当てられ、かつ前記OSが当該仮想I/Oデバイスの割り込みの宛先を変更し、かつ前記宛先に指定された仮想CPUに対して前記物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を当該物理CPUに設定する手順を有することを特徴とする仮想計算機の制御プログラム。
  12. 請求項7に記載の仮想計算機の制御プログラムであって、
    前記物理CPUは、マスク可能割り込みの受信時に実行される割り込みハンドラを設定可能なCPUであり、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第2の形態で割り当てられ、かつ当該仮想I/Oデバイスに関する割り込みの宛先の仮想CPUに対して、前記物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みを受信した前記エミュレータが、当該物理CPUに対してマスク可能な物理割り込みを送信する手順を有することを特徴とする仮想計算機の制御プログラム。
  13. 請求項7に記載の仮想計算機の制御プログラムであって、
    前記物理CPUは、マスク不能割り込みの受信時に前記エミュレータを実行可能であって、
    前記第3の形態で割り当てられた物理CPUに前記エミュレータを実行させる場合に、前記マスク不能割り込みを当該物理CPUに送信する手順を有することを特徴とする仮想計算機の制御プログラム。
  14. 複数の物理CPUとメモリと1つ以上の物理I/Oデバイスを有し、前記物理I/Oデバイスの割込みの宛先を設定可能な計算機装置であって、
    前記物理I/Oデバイスは、前記割り込みを伝達する物理CPUの識別子を格納する割り込み先格納部と、
    仮想CPUと仮想I/Oデバイスを生成して1つ以上のOSを稼動させる仮想計算機を提供する仮想化部と、を備え、
    前記仮想化部は、
    所定の処理を代行するエミュレータと、
    前記物理CPUの仮想CPUに対する割当形態として、割り込み受信時にOSコードを実行させる第3の形態又は、前記割り込み受信時に前記エミュレータを実行させる第4の形態を前記物理CPU毎に保持する第1の情報と、
    前記仮想CPUと物理CPUとの対応関係を保持する第2の情報と、
    前記各物理I/Oデバイスの割当形態として、単一仮想計算機による直接利用を許す第1の形態 又は、前記エミュレータによって複数の仮想計算機で間接利用する第2の形態 を保持する第3の情報と、
    前記仮想I/Oデバイスと物理I/Oデバイスとの対応関係を保持する第4の情報と、を有し、
    前記エミュレータは、
    前記物理I/Oデバイスが前記第2の形態で割り当てられた場合に、前記物理I/Oデバイスの割り込み宛先を前記第4の形態で割り当てられた物理CPUに設定し、
    前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ当該仮想I/Oデバイスの割り込み宛先となる仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、前記物理I/Oデバイスの割り込みの宛先を当該物理CPUに設定し、
    前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ当該仮想I/Oデバイスの割り込み宛先となる仮想CPUに対して物理CPUが前記第4の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を前記第4の形態で割り当てられた物理CPUに設定することを特徴とする計算機装置。
  15. 請求項14に記載の計算機装置であって、
    前記仮想計算機を構成する仮想CPUと仮想I/Oデバイスに対する物理CPUと物理I/Oデバイスの対応関係を受け付けるインターフェースをさらに有し、
    前記インターフェースは、
    前記仮想計算機を構成する仮想CPUの数を受け付け、
    前記仮想CPUに対する物理CPUの割当形態として、前記第3の形態と第4の形態の何れか一方を受け付け、
    前記仮想I/Oデバイスに対する物理I/Oデバイスの割当形態として、前記第1の形態と第2の形態の何れか一方を受け付けることを特徴とする計算機装置。
  16. 請求項14に記載の計算機装置であって、
    前記エミュレータは、
    前記物理CPUの全てが前記第3の形態に設定された場合に異常と判定することを特徴とする計算機装置。
  17. 請求項14に記載の計算機装置であって、
    前記物理CPUは、VT−x又はAMD−Vに対応したx86互換の物理CPUであって、かつ、マスク可能割り込みの受信時に前記エミュレータを機能させる割り込み横取り機能としてExternal Interrupt Exiting 又は Intercept INTRを有し、
    前記エミュレータは、
    仮想割り込みコントローラとして仮想PIC及び仮想APICを含み、
    前記OSが前記仮想PICを使用中の場合に、前記仮想計算機に割り当てられた物理I/Oデバイスの割り込み宛先を、前記第4の形態で割り当てられた物理CPUに設定し、
    前記OSが前記仮想APICを使用中で、かつ前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第2の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込み宛先を、前記第4の形態で割り当てられた物理CPUに設定するエミュレータと、
    前記OSが前記仮想APICを使用中で、かつ前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ当該仮想I/Oデバイスの割り込みの宛先の仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、当該物理CPUに設定し、
    前記OSが前記仮想APICを使用中で、かつ前記仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ かつ 当該仮想I/Oデバイスの割り込みの宛先の仮想CPUに対して物理CPUが前記第4の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を、前記第4の形態で割り当てられた物理CPUに設定することを特徴とする計算機装置。
  18. 請求項14に記載の計算機装置であって、
    前記エミュレータは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第1の形態で割り当てられ、かつ前記OSが当該仮想I/Oデバイスの割り込みの宛先を変更し、かつ前記宛先に指定された仮想CPUに対して前記物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みの宛先を 当該物理CPUに設定することを特徴とする計算機装置。
  19. 請求項14に記載の計算機装置であって、
    前記物理CPUは、マスク可能割り込みの受信時に実行されるコードを設定可能なCPUであり、
    前記エミュレータは、
    前記仮想計算機を構成する仮想I/Oデバイスに対して物理I/Oデバイスが前記第2の形態で割り当てられ、かつ当該仮想I/Oデバイスに関する割り込みの宛先の仮想CPUに対して物理CPUが前記第3の形態で割り当てられている場合に、当該物理I/Oデバイスの割り込みを受信したときに、当該物理CPUに対してマスク可能な物理割り込みを送信することを特徴とする計算機装置。
  20. 請求項14に記載の計算機装置であって、
    前記物理CPUは、マスク不能割り込みの受信時にエミュレータを実行可能なCPUであり、
    前記エミュレータは、
    前記第3の形態で割り当てられた前記物理CPUに当該エミュレータを実行させる場合に、当該物理CPUに対してマスク不能割り込みを送信することを特徴とする計算機装置。
JP2008304492A 2008-11-28 2008-11-28 仮想計算機の制御方法及び計算機装置 Expired - Fee Related JP5352848B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008304492A JP5352848B2 (ja) 2008-11-28 2008-11-28 仮想計算機の制御方法及び計算機装置
US12/624,827 US8516479B2 (en) 2008-11-28 2009-11-24 Virtual machine system and method for controlling interrupt thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008304492A JP5352848B2 (ja) 2008-11-28 2008-11-28 仮想計算機の制御方法及び計算機装置

Publications (2)

Publication Number Publication Date
JP2010128911A true JP2010128911A (ja) 2010-06-10
JP5352848B2 JP5352848B2 (ja) 2013-11-27

Family

ID=42223616

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008304492A Expired - Fee Related JP5352848B2 (ja) 2008-11-28 2008-11-28 仮想計算機の制御方法及び計算機装置

Country Status (2)

Country Link
US (1) US8516479B2 (ja)
JP (1) JP5352848B2 (ja)

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2011161893A1 (ja) * 2010-06-25 2011-12-29 パナソニック株式会社 計算機システム
WO2012060011A1 (ja) * 2010-11-05 2012-05-10 富士通株式会社 切り離しプログラム、組み込みプログラム、切り離し方法、および組み込み方法
JP2012203636A (ja) * 2011-03-25 2012-10-22 Hitachi Ltd 仮想計算機の制御方法及び計算機
JP2013533543A (ja) * 2010-06-23 2013-08-22 インターナショナル・ビジネス・マシーンズ・コーポレーション メッセージ信号割り込みのi/oアダプタ・イベント通知への変換
JP2013537657A (ja) * 2010-06-23 2013-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション メッセージ信号割り込みをゲスト・オペレーティング・システムへのi/oアダプタ・イベント通知に変換する方法
JP2013543169A (ja) * 2010-09-15 2013-11-28 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境を含むシステム
JP2014235501A (ja) * 2013-05-31 2014-12-15 株式会社日立製作所 ストレージ装置の制御方法、ストレージ装置及び情報処理装置
WO2015056332A1 (ja) * 2013-10-17 2015-04-23 株式会社日立製作所 ストレージ装置及び制御方法
US9185054B2 (en) 2010-09-15 2015-11-10 Oracle International Corporation System and method for providing zero buffer copying in a middleware machine environment
WO2016092667A1 (ja) * 2014-12-11 2016-06-16 株式会社日立製作所 計算機及び割込み制御方法
US9495392B2 (en) 2010-09-15 2016-11-15 Oracle International Corporation System and method for parallel multiplexing between servers in a cluster
WO2017002185A1 (ja) * 2015-06-30 2017-01-05 株式会社日立製作所 サーバストレージシステムの管理システム及び管理方法
US9558364B2 (en) 2012-02-23 2017-01-31 Mitsubishi Electric Corporation Computing machine, access management method, and access management program
JP2017504109A (ja) * 2013-12-20 2017-02-02 華為技術有限公司Huawei Technologies Co.,Ltd. 仮想ネットワークインターフェースカードの割込みの親和性結合のための方法、およびコンピュータデバイス
WO2017072933A1 (ja) * 2015-10-30 2017-05-04 株式会社日立製作所 計算機システムの管理システム及び管理方法
JP2017518589A (ja) * 2014-06-20 2017-07-06 華為技術有限公司Huawei Technologies Co.,Ltd. 仮想化プラットホームによって割込みを処理する方法および関連デバイス
US20210318973A1 (en) 2019-02-14 2021-10-14 International Business Machines Corporation Directed interrupt for multilevel virtualization
JP2022520928A (ja) * 2019-02-14 2022-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 割り込みテーブルを使用した有向割り込みの仮想化方法、システム、プログラム
US11734037B2 (en) 2019-02-14 2023-08-22 International Business Machines Corporation Directed interrupt virtualization with running indicator
US11829790B2 (en) 2019-02-14 2023-11-28 International Business Machines Corporation Directed interrupt virtualization with fallback

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378108B2 (en) * 2007-03-22 2016-06-28 Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US20080235000A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing security control practice omission decisions from service emulation indications
US20080234998A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Coordinating instances of a thread or other service in emulation
US8495708B2 (en) * 2007-03-22 2013-07-23 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US8874425B2 (en) 2007-03-22 2014-10-28 The Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US9558019B2 (en) 2007-03-22 2017-01-31 Invention Science Fund I, Llc Coordinating instances of a thread or other service in emulation
US8438609B2 (en) * 2007-03-22 2013-05-07 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US20080235001A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing emulation decisions in response to software evaluations or the like
US9378062B2 (en) * 2009-06-18 2016-06-28 Microsoft Technology Licensing, Llc Interface between a resource manager and a scheduler in a process
US9274851B2 (en) 2009-11-25 2016-03-01 Brocade Communications Systems, Inc. Core-trunking across cores on physically separated processors allocated to a virtual machine based on configuration information including context information for virtual machines
US8406125B2 (en) 2010-03-19 2013-03-26 Brocade Communications Systems, Inc. Synchronization of multicast information using incremental updates
US9135031B1 (en) * 2010-04-28 2015-09-15 Netapp, Inc. System and method for determining storage resources of a virtual machine in a virtual server environment
US9104619B2 (en) 2010-07-23 2015-08-11 Brocade Communications Systems, Inc. Persisting data across warm boots
US8762994B2 (en) 2010-08-26 2014-06-24 Intel Corporation Power-optimized interrupt delivery
US20120072638A1 (en) * 2010-09-16 2012-03-22 Unisys Corp. Single step processing of memory mapped accesses in a hypervisor
CN101976201B (zh) * 2010-10-22 2013-07-24 北京航空航天大学 基于cpu亲和力的虚拟cpu动态绑定方法
WO2012060010A1 (ja) * 2010-11-05 2012-05-10 富士通株式会社 情報処理装置,情報処理装置の時刻設定方法,及び情報処理装置の時刻設定プログラム,並びに監視装置
US8677355B2 (en) 2010-12-17 2014-03-18 Microsoft Corporation Virtual machine branching and parallel execution
WO2013024510A2 (en) * 2011-08-16 2013-02-21 Hitachi, Ltd. Storage control apparatus
US9143335B2 (en) 2011-09-16 2015-09-22 Brocade Communications Systems, Inc. Multicast route cache system
US8910158B2 (en) * 2011-12-14 2014-12-09 Intel Corporation Virtualizing interrupt priority and delivery
EP3958121A1 (en) * 2012-03-29 2022-02-23 INTEL Corporation Architecture and method for managing interrupts in a virtualized environment
US8959623B2 (en) * 2012-05-25 2015-02-17 Ca, Inc. Protecting virtual machine console from misuse, hijacking or eavesdropping in cloud environments
US9990217B2 (en) * 2012-05-31 2018-06-05 Red Hat, Inc. Hypervisor printer emulation for virtual machines
US20140007097A1 (en) * 2012-06-29 2014-01-02 Brocade Communications Systems, Inc. Dynamic resource allocation for virtual machines
US10581763B2 (en) 2012-09-21 2020-03-03 Avago Technologies International Sales Pte. Limited High availability application messaging layer
US9967106B2 (en) 2012-09-24 2018-05-08 Brocade Communications Systems LLC Role based multicast messaging infrastructure
US9203690B2 (en) 2012-09-24 2015-12-01 Brocade Communications Systems, Inc. Role based multicast messaging infrastructure
US9170956B2 (en) 2013-02-07 2015-10-27 Texas Instruments Incorporated System and method for virtual hardware memory protection
US10331589B2 (en) * 2013-02-13 2019-06-25 Red Hat Israel, Ltd. Storing interrupt location for fast interrupt register access in hypervisors
US9778943B2 (en) 2013-05-28 2017-10-03 Red Hat Israel, Ltd. Timer based virtual processor scheduling and suspension on physical processor for use of physical processor by other processing
US9323576B2 (en) * 2014-02-04 2016-04-26 The Boeing Company Removal of idle time in virtual machine operation
US9772868B2 (en) 2014-09-16 2017-09-26 Industrial Technology Research Institute Method and system for handling interrupts in a virtualized environment
US9619349B2 (en) 2014-10-14 2017-04-11 Brocade Communications Systems, Inc. Biasing active-standby determination
US10049064B2 (en) 2015-01-29 2018-08-14 Red Hat Israel, Ltd. Transmitting inter-processor interrupt messages by privileged virtual machine functions
US10055136B2 (en) * 2015-07-29 2018-08-21 Red Hat Israel, Ltd. Maintaining guest input/output tables in swappable memory
US11409551B2 (en) * 2017-02-27 2022-08-09 Red Hat, Inc. Emulating VPID correctly for a nested hypervisor
US11275600B2 (en) 2017-11-14 2022-03-15 TidalScale, Inc. Virtualized I/O
CN108123850B (zh) 2017-12-25 2020-04-24 上海交通大学 针对中断持有者抢占问题的综合调度方法及装置
JP6974254B2 (ja) * 2018-05-18 2021-12-01 ルネサスエレクトロニクス株式会社 データ処理装置
CN110750354B (zh) * 2018-07-24 2023-01-10 中国移动通信有限公司研究院 一种vCPU资源分配方法、装置和计算机可读存储介质
US11106481B2 (en) * 2019-04-19 2021-08-31 Red Hat, Inc. Safe hyper-threading for virtual machines
US11809888B2 (en) 2019-04-29 2023-11-07 Red Hat, Inc. Virtual machine memory migration facilitated by persistent memory devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11282815A (ja) * 1998-03-31 1999-10-15 Nec Corp マルチスレッド計算機システム及びマルチスレッド実行制御方法
JP2008146566A (ja) * 2006-12-13 2008-06-26 Hitachi Ltd 計算機、仮想デバイスの制御方法およびそのプログラム

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619747B2 (ja) 1984-01-18 1994-03-16 株式会社日立製作所 I/o命令実行方法、i/o割込処理方法およびそれらを用いた計算機システム
JP3065053B2 (ja) * 1998-01-06 2000-07-12 セイコーエプソン株式会社 機器監視システム、ローカル監視装置、統合監視装置、機器監視方法、及び、プログラムを格納したコンピュータ可読媒体
US7467381B2 (en) * 2003-12-16 2008-12-16 Intel Corporation Resource partitioning and direct access utilizing hardware support for virtualization
US7805557B2 (en) * 2005-07-12 2010-09-28 Arm Limited Interrupt controller and method for handling interrupts
WO2007065307A2 (en) * 2005-12-10 2007-06-14 Intel Corporation Handling a device related operation in a virtualization environment
US8286162B2 (en) * 2005-12-30 2012-10-09 Intel Corporation Delivering interrupts directly to a virtual processor
US7613847B2 (en) * 2006-05-16 2009-11-03 Hewlett-Packard Development Company, L.P. Partially virtualizing an I/O device for use by virtual machines
US7464211B2 (en) * 2006-09-14 2008-12-09 International Business Machines Corporation Method of detecting and recovering a lost system management interrupt (SMI) in a multiprocessor (MP) environment
US8527673B2 (en) * 2007-05-23 2013-09-03 Vmware, Inc. Direct access to a hardware device for virtual machines of a virtualized computer system
US7853744B2 (en) * 2007-05-23 2010-12-14 Vmware, Inc. Handling interrupts when virtual machines have direct access to a hardware device

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11282815A (ja) * 1998-03-31 1999-10-15 Nec Corp マルチスレッド計算機システム及びマルチスレッド実行制御方法
JP2008146566A (ja) * 2006-12-13 2008-06-26 Hitachi Ltd 計算機、仮想デバイスの制御方法およびそのプログラム

Cited By (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013533543A (ja) * 2010-06-23 2013-08-22 インターナショナル・ビジネス・マシーンズ・コーポレーション メッセージ信号割り込みのi/oアダプタ・イベント通知への変換
JP2013537657A (ja) * 2010-06-23 2013-10-03 インターナショナル・ビジネス・マシーンズ・コーポレーション メッセージ信号割り込みをゲスト・オペレーティング・システムへのi/oアダプタ・イベント通知に変換する方法
US8819680B2 (en) 2010-06-25 2014-08-26 Panasonic Intellectual Property Corporation Of America Computer system for controlling the execution of virtual machines
JP5792722B2 (ja) * 2010-06-25 2015-10-14 パナソニック インテレクチュアル プロパティ コーポレーション オブアメリカPanasonic Intellectual Property Corporation of America 計算機システム
WO2011161893A1 (ja) * 2010-06-25 2011-12-29 パナソニック株式会社 計算機システム
JP2013543169A (ja) * 2010-09-15 2013-11-28 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境を含むシステム
US9495392B2 (en) 2010-09-15 2016-11-15 Oracle International Corporation System and method for parallel multiplexing between servers in a cluster
US9864759B2 (en) 2010-09-15 2018-01-09 Oracle International Corporation System and method for providing scatter/gather data processing in a middleware environment
US9185054B2 (en) 2010-09-15 2015-11-10 Oracle International Corporation System and method for providing zero buffer copying in a middleware machine environment
WO2012060011A1 (ja) * 2010-11-05 2012-05-10 富士通株式会社 切り離しプログラム、組み込みプログラム、切り離し方法、および組み込み方法
JP2012203636A (ja) * 2011-03-25 2012-10-22 Hitachi Ltd 仮想計算機の制御方法及び計算機
US9558364B2 (en) 2012-02-23 2017-01-31 Mitsubishi Electric Corporation Computing machine, access management method, and access management program
JP2014235501A (ja) * 2013-05-31 2014-12-15 株式会社日立製作所 ストレージ装置の制御方法、ストレージ装置及び情報処理装置
WO2015056332A1 (ja) * 2013-10-17 2015-04-23 株式会社日立製作所 ストレージ装置及び制御方法
US9239681B2 (en) 2013-10-17 2016-01-19 Hitachi, Ltd. Storage subsystem and method for controlling the storage subsystem
US10768960B2 (en) 2013-12-20 2020-09-08 Huawei Technologies Co., Ltd. Method for affinity binding of interrupt of virtual network interface card, and computer device
JP2017504109A (ja) * 2013-12-20 2017-02-02 華為技術有限公司Huawei Technologies Co.,Ltd. 仮想ネットワークインターフェースカードの割込みの親和性結合のための方法、およびコンピュータデバイス
US10169075B2 (en) 2014-06-20 2019-01-01 Huawei Technologies Co., Ltd. Method for processing interrupt by virtualization platform, and related device
JP2017518589A (ja) * 2014-06-20 2017-07-06 華為技術有限公司Huawei Technologies Co.,Ltd. 仮想化プラットホームによって割込みを処理する方法および関連デバイス
WO2016092667A1 (ja) * 2014-12-11 2016-06-16 株式会社日立製作所 計算機及び割込み制御方法
JPWO2017002185A1 (ja) * 2015-06-30 2017-09-21 株式会社日立製作所 サーバストレージシステムの管理システム及び管理方法
WO2017002185A1 (ja) * 2015-06-30 2017-01-05 株式会社日立製作所 サーバストレージシステムの管理システム及び管理方法
WO2017072933A1 (ja) * 2015-10-30 2017-05-04 株式会社日立製作所 計算機システムの管理システム及び管理方法
US20210318973A1 (en) 2019-02-14 2021-10-14 International Business Machines Corporation Directed interrupt for multilevel virtualization
JP2022520928A (ja) * 2019-02-14 2022-04-04 インターナショナル・ビジネス・マシーンズ・コーポレーション 割り込みテーブルを使用した有向割り込みの仮想化方法、システム、プログラム
JP7324287B2 (ja) 2019-02-14 2023-08-09 インターナショナル・ビジネス・マシーンズ・コーポレーション 割り込みテーブルを使用した有向割り込みの仮想化方法、システム、プログラム
US11734037B2 (en) 2019-02-14 2023-08-22 International Business Machines Corporation Directed interrupt virtualization with running indicator
US11822493B2 (en) 2019-02-14 2023-11-21 International Business Machines Corporation Directed interrupt for multilevel virtualization
US11829790B2 (en) 2019-02-14 2023-11-28 International Business Machines Corporation Directed interrupt virtualization with fallback

Also Published As

Publication number Publication date
JP5352848B2 (ja) 2013-11-27
US8516479B2 (en) 2013-08-20
US20100138208A1 (en) 2010-06-03

Similar Documents

Publication Publication Date Title
JP5352848B2 (ja) 仮想計算機の制御方法及び計算機装置
JP5493125B2 (ja) 仮想化方法及び計算機
EP2831732B1 (en) System and method for supporting live migration of virtual machines in an infiniband network
JP4961459B2 (ja) 仮想計算機システムおよび仮想計算機システムにおける制御方法
JP5748349B2 (ja) 仮想計算機の制御方法及び仮想計算機システム
EP2519877B1 (en) Hypervisor-based isolation of processor cores
US9397954B2 (en) System and method for supporting live migration of virtual machines in an infiniband network
US7945436B2 (en) Pass-through and emulation in a virtual machine environment
US11403086B2 (en) System and method for upgrading operating system of a container using an auxiliary host
US9009701B2 (en) Method for controlling a virtual machine and a virtual machine system
US8091086B1 (en) System and method for virtualization using an open bus hypervisor
NO340567B1 (no) Hierarkisk virtualisering med en flernivå virtualiseringsmekanisme
KR20070100367A (ko) 하나의 가상 머신에서 다른 가상 머신으로 메모리를동적으로 재할당하기 위한 방법, 장치 및 시스템
US9342347B1 (en) Hardware dedication for virtual machines and virtual environments
EP3147784A1 (en) Interruption handling method and relevant device of virtual platform
CN113778612A (zh) 基于微内核机制的嵌入式虚拟化系统实现方法
KR20210154769A (ko) 마이크로 커널에 기반한 확장 가능 하이퍼바이저
CN109656675B (zh) 总线设备、计算机设备及实现物理主机云存储的方法
US10552172B2 (en) Virtual appliance supporting multiple instruction set architectures
KR101077908B1 (ko) 서버 가상화 장치
CN116166371A (zh) 虚拟机的迁移方法、装置、设备及存储介质
WO2024008066A1 (zh) 一种基于云计算技术的服务器以及云系统
Evens A comparison of containers and virtual machines for use with NFV
WO2024081072A1 (en) Transparently providing virtualization features to unenlightened guest operating systems
Hardware OpenSolaris and Virtualization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111026

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120309

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130424

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130528

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130716

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: 20130730

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130805

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees