JP4468426B2 - 高可用システム及び実行状態制御方法 - Google Patents

高可用システム及び実行状態制御方法 Download PDF

Info

Publication number
JP4468426B2
JP4468426B2 JP2007250089A JP2007250089A JP4468426B2 JP 4468426 B2 JP4468426 B2 JP 4468426B2 JP 2007250089 A JP2007250089 A JP 2007250089A JP 2007250089 A JP2007250089 A JP 2007250089A JP 4468426 B2 JP4468426 B2 JP 4468426B2
Authority
JP
Japan
Prior art keywords
virtual machine
hypervisor
synchronization information
information
event
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
JP2007250089A
Other languages
English (en)
Other versions
JP2009080695A (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.)
Toshiba Corp
Original Assignee
Toshiba Corp
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 Toshiba Corp filed Critical Toshiba Corp
Priority to JP2007250089A priority Critical patent/JP4468426B2/ja
Priority to US12/233,461 priority patent/US8281304B2/en
Publication of JP2009080695A publication Critical patent/JP2009080695A/ja
Application granted granted Critical
Publication of JP4468426B2 publication Critical patent/JP4468426B2/ja
Priority to US13/601,203 priority patent/US9104638B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1687Temporal synchronisation or re-synchronisation of redundant processing components at event level, e.g. by interrupt or result of polling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1683Temporal synchronisation or re-synchronisation of redundant processing components at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1691Temporal synchronisation or re-synchronisation of redundant processing components using a quantum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2038Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with a single idle spare processing component
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2048Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant where the redundant components share neither address space nor persistent storage
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Hardware Redundancy (AREA)

Description

本発明は、二重化技術を施した高可用システム及びその実行状態制御方法に関する。
サーバ計算機のハードウェアに生じる故障を隠蔽することで、該サーバ計算機によるサービスを継続可能にする技術がある。その技術の一つとして、フォールトトレラントサーバが知られている。フォールトトレラントサーバでは、主要なハードウェアがすべて二重化される。フォールトトレラントサーバにおいては、二重化されたハードウェアを制御するための専用ハードウェアが搭載されているため、該専用ハードウェアによって、該二重化されたハードウェアの完全な同期実行が達成され、該二重化されたハードウェアの或る箇所に障害が発生しても、自動的にその障害個所を切り放して、サービスを継続させることが可能になる。
しかし、このようなフォールトトレラントサーバは、主要なコンポーネントを2倍搭載する必要があり、加えて、専用ハードウェアを搭載する必要があるために、非常に高価である。また、専用ハードウェアを搭載するために、特殊な設計が必要になるので、サーバのハードウェア技術の急速な進展への追従が難しい。
二重化のための専用ハードウェアを用いる手法に代るものとして、一般的な(二重化されていない、単体の)サーバを2台組み合わせて、フォールトトレラントサーバを構成する技術がある。
特許文献1に開示された技術では、2台の独立したサーバを組み合わせて、フォールトトレラントが実現される。この技術では、各サーバのCPUが、SMPやマルチコアなどにより、論理的に2つ以上のCPUで構成されることを前提に、ソフトウェアで2台のサーバの実行を同期させて、二重化を実現している。
OSやアプリケーションの挙動は、OSやアプリケーションの実行とは非同期に発生するI/Oの事象により、非決定的な振る舞いとなる。このため、独立した2つのサーバを使って二重化を実現するためには、非決定的なI/Oの事象をサーバ間で同期させることが、不可欠となる。特許文献1に開示された技術では、各サーバ内の2つのCPUを、OSやアプリケーションの実行を担当するCE(Computing Elements)と、入出力を担当するIOP(I/O processor)とに分けて、OSやアプリケーションの実行と、I/Oとを分離することによって、解決を図っている。
米国特許第5615403号公報
独立した2台のサーバを組み合わせて、二重化されたフォールトトレラントサーバを構成する方法は、量産化される、安価で、最新の技術が搭載された、サーバを利用することができる、という利点がある。しかし、2台のサーバをフォールトトレラントサーバ用に固定的に割当てる必要があるため、二重化を構成するサーバの組み合わせを、運用中に変更することができない。例えば、フォールトトレラントサーバを構成する2台のうちの1台を保守のために停止させたい場合に、二重化されていない運用状態が一時的に発生することを避けるために、停止させるサーバの処理を第3のサーバに引き継がせて、二重化を継続できることが望ましいが、そのような運用ができない。
また、I/Oの処理と、OSやアプリケーションの処理とを、相異なるCPUに割当てるために、I/O処理と、OSやアプリケーション処理とのいずれかに負荷が片寄る場合に、サーバのハードウェアが持つ能力を充分活かすことができない。
本発明は、上記事情を考慮してなされたもので、独立した2台の計算機上でそれぞれ稼働する仮想計算機を組み合わせて二重化を実現することを可能にする高可用システム及び実行状態制御方法を提供することを目的とする。
本発明は、第1の仮想計算機と該第1の仮想計算機を管理する第1のハイパーバイザとが稼働する第1の計算機、及び第2の仮想計算機と該第2の仮想計算機を管理する第2のハイパーバイザとが稼働する第2の計算機を含む高可用システムであって、前記第1のハイパーバイザは、前記第1の仮想計算機について発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集する収集部と、収集した前記同期情報を、前記第2のハイパーバイザへ送信する送信部とを備え、前記第2のハイパーバイザは、前記第1のハイパーバイザから、前記同期情報を受信する受信部と、受信した前記同期情報に従って、前記第2の仮想計算機の入力に係る実行状態を、前記第1の仮想計算機の入力に係る実行状態と同一になるように、制御する制御部とを備え、前記収集部は、前記イベントの発生するタイミングが非決定的であるか、決定的であるかを判定し、非決定的であると判断した場合に、前記同期情報に、該イベントが発生したタイミングを特定するためのタイミング情報を含ませることを特徴とする。
本発明によれば、独立した2台の計算機上でそれぞれ稼働する仮想計算機を組み合わせて二重化を実現することが可能になる。
以下、図面を参照しながら本発明の実施形態について説明する。
図1に、本実施形態に係る高可用システムの概略構成例を示す。
図1に示されるように、本実施形態の高可用システムは、2台のサーバ計算機1,2を含む。
第1のサーバ計算機1は、プロセッサ11、メモリ12、通信装置(NIC(Network Interface Card))13、物理デバイス14,15を備えている。プロセッサ11内には、パフォーマンスカウンタとして使用可能なカウンタ111が存在する。
同様に、第2のサーバ計算機2は、プロセッサ21、メモリ22、通信装置23、複数のデバイス24,25を備えている。プロセッサ21内には、パフォーマンスカウンタとして使用可能なカウンタ211が存在する。
サーバ計算機1とサーバ計算機2は、所定のネットワーク8を介して、通信可能である。
なお、図1で示したデバイスは一例であり、デバイスの種類や数は任意である。
サーバ計算機1(2)において、メモリ12(22)には、仮想計算機(仮想マシン(VM)とも呼ばれる。)内で動作するOSやアプリケーションプログラムのソフトウェアと、データが格納されるメモリ領域121(221)があり、また、ハイパーバイザ(HV)のプログラムと、データが格納されるメモリ領域122(222)がある。ハイパーバイザ(HV)は、サーバ計算機への入力情報を仮想計算機(VM)に対する入力に変換する、などの処理を行う。
プロセッサ11(21)は、ハイパーバイザに係るメモリ領域122(222)に格納されたプログラムを読み出して実行し、また、仮想計算機に係るメモリ領域121(221)内のプログラムを読み出して実行する。
プロセッサ11,21は、複数の特権レベルを持つ。ハイパーバイザのプログラムは、該複数の特権レベルのうち最も高い特権レベルで動作し、仮想計算機のプログラムは、該ハイパーバイザの動作する特権レベルに比較して、より低い特権レベルで動作する。仮想計算機のプログラムには、OSとアプリケーションプログラムとが含まれる。仮想計算機のOSは、アプリケーションプログラムに比較して、より高い特権レベルで動作する。
仮想計算機のプログラムが、その実行中に、最も高い特権レベルを必要とする処理を行う場合には、該仮想計算機からハイパーバイザを呼び出し、呼び出したハイパーバイザに、その処理を依頼する。なお、ハイパーバイザの呼び出し方は、プロセッサに仮想化支援機構が搭載されている場合と、それが搭載されていない場合とで、異なる。仮想計算機のOSの処理で特権命令違反を発生させることができる場合には、その特権命令違反をトリガとして、ハイパーバイザが呼び出される。仮想化支援機構が搭載されていない場合には、予め、OSのコードに、ハイパーバイザ呼び出しのコードが挿入される。あるいは、プログラムがメモリに読み込まれてから実行されるまでの間の適当なタイミングで、コードが走査され、ハイパーバイザ呼び出しのコードが挿入される。本実施形態は、仮想化支援機構の有無を問わない。
以下では、図1の高可用システムにおいて、サーバ計算機1上で動作する仮想計算機をメインとし、サーバ計算機2上で動作する仮想計算機をクローンとして、説明する。
図2に、メイン側となるサーバ計算機1における、ハイパーバイザの機能ブロックの構成例を示す。
図2において、1はメイン側となるサーバ計算機、13はNIC、14,15は物理デバイス、16はディスク(Disk)、100はメイン側のハイパーバイザ、150はメイン側の仮想計算機をそれぞれ表している。
また、メイン側ハイパーバイザ100において、101は物理デバイス管理部、102は配送先決定部、103は仮想デバイス管理部、104は同期情報送信部、105はカウンタ制御部、106は仮想計算機(VM)実行状態保存部、107は中断情報収集部、108はハイパーバイザサービス実行部、109は復帰情報収集部をそれぞれ表している。
また、仮想デバイス管理部103中の133、136、137はそれぞれNIC、Disk、タイマー(Timer)の仮想デバイスを表している。
メイン側ハイパーバイザ100内の各部の概要は、次の通りである。
物理デバイス管理部101は、物理デバイスを管理する。
配送先決定部102は、物理デバイスの状態の配送先を決定する。
仮想デバイス管理部103は、仮想デバイスを管理する。
同期情報送信部104は、同期情報を送信する。
カウンタ制御部105は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ11内のカウンタ111を使用することができる。
VM実行状態保存部106は、仮想計算機(VM)の実行状態を保存する。
中断情報収集部107は、メイン側仮想計算機150の処理の中断時に、必要な処理を行う。
ハイパーバイザサービス実行部108は、本来のハイパーバイザサービスを実行する。
復帰情報収集部109は、メイン側仮想計算機150の処理の復帰時に、必要な処理を行う。
図3に、クローン側となるサーバ計算機2における、ハイパーバイザの機能ブロックの構成例を示す。
図3において、2はクローン側となる計算機、23はNIC、24,25は物理デバイス、26はDisk、200はクローン側のハイパーバイザ、250はクローン側の仮想計算機をそれぞれ表している。
また、クローン側ハイパーバイザ200において、201は物理デバイス管理部、202は配送先決定部、203は仮想デバイス管理部、204は同期情報受信部、205はカウンタ制御部、206はVM実行状態保存部、207は中断状態比較部、208はハイパーバイザサービス実行部、209は復帰状態設定部、210はブレークポイント設定部をそれぞれ表している。
また、仮想デバイス管理部203中の233、236、237はそれぞれNIC、Disk、タイマー(Timer)の仮想デバイスを表している。
なお、図3で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
クローン側ハイパーバイザ200内の各部の概要は、次の通りである。
物理デバイス管理部201は、物理デバイスを管理する。
配送先決定部202は、物理デバイスの状態の配送先を決定する。
仮想デバイス管理部203は、仮想デバイスを管理する。
同期情報受信部204は、同期情報を受信する。
カウンタ制御部205は、パフォーマンスカウンタの制御を行う。パフォーマンスカウンタとしては、プロセッサ21内のカウンタ211を使用することができる。
VM実行状態保存部206は、仮想計算機(VM)の実行状態を保存する。
中断状態比較部207は、クローン側仮想計算機250の処理の中断時に、必要な処理を行う。
ハイパーバイザサービス実行部208は、本来のハイパーバイザサービスを実行する。
復帰状態設定部209は、クローン側仮想計算機250の処理への復帰時に、必要な処理を行う。
ブレークポイント設定部210は、ブレークポイントを設定する。
なお、サーバ計算機1とサーバ計算機2が、それぞれ、メイン側となる構成ための構成(図3)とクローン側となるための構成(図4)を兼ね備え、サーバ計算機1とサーバ計算機2とが、適宜、メインとクローンの役割を交替できるようにしても良い。
以下、ハイパーバイザの構成・動作を中心に説明する。
メイン側となるサーバ計算機1において、メイン側ハイパーバイザ100は、該サーバ計算機1に接続された物理デバイス(14,15等)を管理する。また、メイン側ハイパーバイザ100は、メイン側仮想計算機150に対して、仮想デバイス(133,136,137等)を提供する。仮想デバイスは、メイン側仮想計算機150から、デバイスとして認識される。
クローン側となるサーバ計算機1において、クローン側ハイパーバイザ200は、該サーバ計算機2に接続された物理デバイス(24,25等)を管理する。また、クローン側ハイパーバイザ200は、クローン側仮想計算機250に対して、仮想デバイス(233,236,237等)を提供する。仮想デバイスは、クローン側仮想計算機250から、デバイスとして認識される。
なお、図2や図3で示した物理デバイスや仮想デバイスは一例であり、物理デバイスや仮想デバイスの種類や数は任意である。
なお、ハイパーバイザの実施形態の一つとして、ハイパーバイザの機能の一部を、管理ドメインと呼ばれる特別な仮想計算機に持たせてもよい。
メイン側ハイパーバイザ100は、サーバ計算機1に接続された物理デバイスの状態に係る情報のうちで、メイン側仮想計算機150から読める情報と、メイン側仮想計算機150から読めない情報とを、分別する。この分別は、配送先決定部102により行われる。そして、配送先決定部102は、前者のメイン側仮想計算機150から読める情報のみを、仮想デバイスの状態に反映(コピー)させる。例えば、サーバ計算機1のコンソールが、メイン側仮想計算機150に割当てられている場合においては、キーボード入力の情報が、仮想デバイスの状態に反映されるが、該コンソールが、メイン側仮想計算機150に割当てられていない場合においては、該キーボード入力の情報は、仮想デバイスの状態には反映されない。
本実施形態では、メイン側となる計算機1上で稼働するメイン側仮想計算機150の入力のコピーを、クローン側計算機2に伝え、クローン側仮想計算機250に対しても、メイン側仮想計算機150と同一の入力を与えることにより、メイン側仮想計算機150とクローン側仮想計算機250とが同一の挙動を示すよう制御する。
これを実現するために、メイン側ハイパーバイザ100内の配送先決定部102がメイン側仮想計算機150の仮想デバイスへの入力と判定した入力情報(同期情報)は、メイン側仮想計算機150の仮想デバイスの状態に反映されるとともに、同期情報送信部104により、クローン側となる計算機2上のクローン側ハイパーバイザ200に送付される。
この入力情報(同期情報)は、クローン側ハイパーバイザ200の同期情報受信部204により、受け取られる。受け取られた入力情報は、クローン側仮想計算機250の仮想デバイスの状態に反映される。
これによって、クローン側仮想計算機250は、メイン側仮想計算機150と同一の入力データを受け取ることとなる。
メイン側ハイパーバイザ100とクローン側ハイパーバイザ200との間の仮想計算機間の入力データのコピーや、その他、仮想計算機の同期に必要な情報を含む同期情報の受け渡しは、同期情報送信部104と同期情報受信部204との間でなされる。なお、実際のデータの伝達経路は、計算機1が持つ通信装置13、両計算機1,2を繋ぐネットワーク、計算機2の通信装置23を通ることになる。
この入力データのコピーを実現するために、メイン側ハイパーバイザ100の同期情報送信部104と、クローン側ハイパーバイザ200の同期情報受信部204には、それぞれ、通信相手を特定するための情報が管理されている。通信相手を特定するための情報としては、例えば、相手の計算機のネットワークアドレス(例えばIPアドレスやポート番号など)である。また、例えば、ハイパーバイザが複数の仮想計算機を管理している場合には、該複数の仮想計算機のうちの何れの仮想計算機であるかを識別する仮想計算機の識別情報(ID)も、通信相手を特定するための情報の一部として、必要になる。なお、通信相手を特定するための情報は、仮想計算機の起動前に人手で設定するようにしても良いし、別のモジュールが自動的に設定するようにしても良い。
一般的に、仮想計算機は、複数の仮想デバイスを持っている。計算機1の物理デバイスの状態に係る情報のうちで、メイン側ハイパーバイザ100の配送先決定部102が仮想デバイスの状態に反映させると決定した情報は、同期情報送信部104を介して、クローン側ハイパーバイザ200に送られる。この情報には、反映すべき対象の仮想デバイスを特定するための仮想デバイスの識別情報(ID)と、その仮想デバイスの状態に係る情報が含まれる。
一般的に、ハイパーバイザは、実行中の仮想計算機の処理が、ハイパーバイザ呼び出しや割り込みなどで中断すると、その中断した要因に応じたサービスを実行した後、次に実行すべき仮想計算機を選定して、その仮想計算機に処理を渡す。本実施形態では、ハイパーバイザサービス実行部108,208が、その役割を担当する。
メイン側となるサーバ計算機1においては、メイン側仮想計算機150からメイン側ハイパーバイザ100に制御が移る際に、VM実行状態保存部106にてメイン側仮想計算機150の実行状態を保存した後に、中断情報収集部107により、仮想計算機の処理が中断した要因を調査し、中断の要因に応じた同期情報(情報の内容については後述)を収集し、同期情報送信部104からクローン側ハイパーバイザ200へ、該中断の要因に応じた同期情報を送信する。さらに、メイン側ハイパーバイザ100が、次に制御を移す仮想計算機として、メイン側仮想計算機150を選定した場合に、復帰情報収集部109により、メイン側仮想計算機150を復帰させる際の状態を調査し、復帰時の状態に応じた同期情報(情報の内容については後述)を収集し、同期情報送信部104からクローン側ハイパーバイザ200へ、該復帰時の状態に応じた同期情報を送信する。
クローン側となる計算機2においては、同期情報受信部204が受信したメイン側仮想計算機150の復帰の状態と、その後に再度処理が中断され、クローン側ハイパーバイザ200に制御が移る際の状態とを利用して、復帰状態設定部209により、クローン側仮想計算機250の復帰状態の準備を行う。また、メイン側仮想計算機150の中断状態が割り込みであった場合に、ブレークポイント設定部210により、ブレークポイントを設定して、クローン側仮想計算機250に制御を移す。
さて、メイン側仮想計算機150の実行状態とクローン側仮想計算機250の実行状態とを合わせるためには、仮想デバイスの情報をコピーして、入力情報の一致を図ろうとするだけでは不十分であり、両仮想計算機に仮想デバイスの情報が取り込まれるタイミングを、一致させる必要がある。
具体的には、ハイパーバイザ呼び出し、例外の発生、仮想デバイスの状態に係る情報の更新、割り込みの発生などの事象(イベント)の起きる順序関係が、メイン側ハイパーバイザ100側とクローン側ハイパーバイザ200側とで、同一になるようにする必要がある。
さらに、割り込みは、両仮想計算機の実行過程の中で、同一の状態で発生する必要がある。すなわち、メイン側仮想計算機150とクローン側仮想計算機250が、仮想計算機が実行している命令列の中の同一の場所(プログラムカウンタ)で、割り込みを受付けないと、実行状態の一致を図ることができない。
この点について、図4と図5を参照しながら説明する。なお、図4と図5において、HV1はメイン側ハイパーバイザ、HV2はクローン側ハイパーバイザ、VM1はメイン側仮想計算機、VM2はクローン側仮想計算機をそれぞれ表す。
ハイパーバイザ呼び出しや例外は、プログラム中のどこで発生するか決まっている、決定的な事象であるが、割り込みは、プログラム中のどこで発生するかが分からない、非決定的な事象であるので、図4の2台のサーバ計算機を同時実行した場合に、ハイパーバイザ呼び出しや例外については、401のように、両サーバ計算機1,2で同じ遷移状態になるが、割り込みについては、402のように、異なる遷移状態になる。
そこで、本実施形態では、まず、図5のように、先に、メイン側となるサーバ計算機1において、メイン側仮想計算機150を実行し、それより少し遅延して、クローン側となるサーバ計算機2において、クローン側仮想計算機250を実行する。そして、メイン側となるサーバ計算機1において、メイン側仮想計算機150における、割り込み発生のタイミング(具体的には、基準となる時点(例えば、前回の仮想計算機への復帰の時点)からの実行命令数)を調べ、その情報を、メイン側ハイパーバイザ100からクローン側ハイパーバイザ200へ伝え、クローン側ハイパーバイザ200において、ブレークポイント設定部210により、その情報に従って、クローン側仮想計算機250でも同一のタイミングで割込みが発生するように、ブレークポイントを設定して、502のように、同じ遷移状態にする。なお、ハイパーバイザ呼び出しや例外は、上記のように決定的な事象であるので、上記ブレークポイントの設定をせずとも、501のように、同じ遷移状態になる。
本実施形態では、メイン側仮想計算機150とクローン側仮想計算機250において、割り込みタイミングを合わせるためのカウンタの制御を、カウンタ制御部105とカウンタ制御部205のそれぞれにて行う。また、このカウンタの値に従って、ブレークポイント設定部210により、ブレークポイントの設定を行う。
さて、メイン側ハイパーバイザ100の同期情報送信部104とクローン側ハイパーバイザ200の同期情報受信部204は、仮想デバイスの状態に係る情報だけでなく、メイン側となる計算機1内で起きる以下の事象が起きる度に、その情報を伝達する。
(A)メイン側仮想計算機150が発行したハイパーバイザ呼び出し
(B)上記ハイパーバイザ呼び出しに対応するメイン側ハイパーバイザ100の応答
(C)例外の捕捉
(D)上記例外に対応するメイン側仮想計算機150の例外ハンドラ呼び出し
(E)割り込みの捕捉
(F)上記割り込みに対応するメイン側仮想計算機150の割り込みハンドラ呼び出し
まず、メイン側となる計算機1におけるメイン側ハイパーバイザ100の各事象に対する処理について説明する。
(A)ハイパーバイザ呼び出しは、メイン側仮想計算機150が決定的に起こす事象であり、仮想計算機が外部に対して起こす出力であるため、事象の発生を、クローン側ハイパーバイザ200に伝達すれば良い。よって、送信する同期情報には、「ハイパーバイザ呼び出しの種類」と「引数の情報」が含まれれば良い(さらに「待避されたレジスタの内容」等を送っても良い)。なお、ハイパーバイザが複数の仮想計算機を管理している場合には、メイン側仮想計算機150が起こすハイパーバイザ呼び出しのみが対象となり、その他の仮想計算機から発生するハイパーバイザ呼び出しは対象とならない。
(B)ハイパーバイザ呼び出しに対するメイン側ハイパーバイザ100の応答を返す場合には、応答の内容が、メイン側仮想計算機150の入力となるため、応答の内容を、クローン側ハイパーバイザ200に伝達すれば良い。なお、応答の情報としては、ハイパーバイザと仮想計算機の間のインタフェースの設計の仕方により様々な情報(例えば、CPUのレジスタ、スタック、ハイパーバイザと仮想計算機が共有するメモリ空間、イベントチャネルなど)が考えられる。よって、送信する同期情報には、「ハイパーバイザ呼び出しの応答情報」と、「応答経路の情報」が含まれれば良い。
(C)例外の捕捉は、メイン側仮想計算機150が決定的に起こす事象であり仮想計算機が外部に対して起こす出力であるため、事象の発生を、クローン側ハイパーバイザ200に伝達すれば良い。よって、送信する同期情報には、「例外の内容」が含まれれば良い。なお、ハイパーバイザが複数の仮想計算機を管理している場合には、メイン側仮想計算機150が起こす例外のみが対象となり、その他の仮想計算機から発生する例外は対象とならない。
(D)例外に対応するメイン側仮想計算機150の例外ハンドラを呼び出す場合、ハイパーバイザとして、その例外に対する特別な処理が不要な場合は、例外ハンドラの呼び出しを、クローン側ハイパーバイザ200に伝えれば良い。よって、送信する同期情報には、「例外ハンドラ呼び出しの実行を示す情報」が含まれれば良い。一方、ハイパーバイザとしてのその例外に対する特別な処理が必要な場合は、その処理内容を、クローン側ハイパーバイザ200に伝えれば良い。
(E)計算機に発生する割り込みは、それに対応する処理の担い手が、メイン側ハイパーバイザ100自身である場合と、メイン側仮想計算機150の場合と、メイン側ハイパーバイザ100が管理する、その他(メイン側仮想計算機150以外)の仮想計算機の場合とがある。「メイン側仮想計算機150が処理する割り込み」以外の割り込みに関しては、メイン側仮想計算機150からは、その事象が完全に隠蔽されるため、クローン側ハイパーバイザ200に伝達する必要はない。メイン側ハイパーバイザ100は、メイン側仮想計算機150の割り込みハンドラを呼ぶ必要のある事象の情報のみを、クローン側ハイパーバイザ200に伝達すれば良い。メイン側仮想計算機150の割り込みハンドラが起動される場合には、I/O機器のハードウェアが発行する割り込みの他に、例えば、ハードウェア割り込みとは独立に、ハイパーバイザや他の仮想計算機が、メイン側仮想計算機150に事象を伝達するために発生させるソフトウェア割り込みがある。例えば、Xenにおけるドメイン間割り込みなどが、これに該当する。
さらに、クローン側仮想計算機250側で、同じ処理過程で割り込みによる処理の中断とハンドラ呼び出しを再現するために、割り込み位置の情報(すなわち、メイン側仮想計算機150の割り込みが発生した場所を特定するための情報)として、プログラムカウンタの値やパフォーマンスカウンタによる実行命令数の情報を収集する。
以上から、送信する同期情報には、「割り込みハンドラが起動されるメイン側仮想計算機150の識別情報(ID)」と「例外の情報(ベクタ番号)」、「割り込み位置の情報」が含まれていれば良い。
(F)(E)で補足した割り込みを処理するハンドラ呼び出しに関する情報(ベクタ番号など)を、クローン側ハイパーバイザ200に送れば良い。
次に、上記した情報を送られる、クローン側となる計算機2におけるクローン側ハイパーバイザ200の各事象に対する処理について説明する。
クローン側ハイパーバイザ200は、メイン側ハイパーバイザ100から送られてくる同期情報を待ち行列に格納し、該待ち行列の先頭の同期情報から、順次、処理をしていく。以下、待ち行列に格納された同期情報に対する処理について説明する。
(A)同期情報がハイパーバイザ呼び出しである場合は、該ハイパーバイザ呼び出しは、メイン側仮想計算機150と同様に、クローン側仮想計算機250が決定的に起こす事象である。そこで、クローン側仮想計算機250に制御を移し、当該ハイパーバイザ呼び出しが発行されるのを待つ。クローン側仮想計算機250がハイパーバイザ呼び出しを発行したら、該ハイパーバイザ呼び出しが、同期情報に記載されたハイパーバイザ呼び出しと同じであることを、確認するだけで良い。この確認がとれたら、同期情報は、待ち行列から削除される。
なお、このハイパーバイザ呼び出しに対する応答は、メイン側ハイパーバイザ100から送られてくる同期情報に含まれる「(B)ハイパーバイザ呼び出しに対する応答」の内容に従い、クローン側ハイパーバイザ200内での独自の対応は行わない。
(B)同期情報がハイパーバイザ呼び出しに対するメイン側ハイパーバイザ100の応答である場合には、メイン側ハイパーバイザ100の応答内容を、そのまま、クローン側仮想計算機250へ返す準備をする。具体的には、同期情報に含まれている応答経路に、応答内容を格納する。なお、ここでは、すぐにクローン側仮想計算機250には制御を渡さず、この同期情報を待ち行列から削除し、次の同期情報の処理へと進む。
(C)同期情報が例外の捕捉である場合、該例外の捕捉は、メイン側仮想計算機150と同様に、クローン側仮想計算機250が決定的に起こす事象である。そこで、クローン側仮想計算機250に制御を移し、当該ハイパーバイザ呼び出しが発行されるのを待つ。クローン側仮想計算機250から例外によりクローン側ハイパーバイザ200に制御が移ったら、該例外が、この同期情報に記載された例外と同一であることを、確認するだけで良い。この確認がとれたら、同期情報は、待ち行列から削除される。
なお、このハイパーバイザ呼び出しに対する応答は、メイン側ハイパーバイザ100から送られてくる同期情報に含まれる「(D)例外に対する応答」を処理するまで遅延すれば良い。
(D)同期情報が例外ハンドラ呼び出しの場合、ハイパーバイザとして、その例外に対する特別な処理が不要な場合は、クローン側仮想計算機250の例外ハンドラの呼び出しを行えば良い。なお、ここでは、すぐにはハンドラを呼び出さず、この同期情報を待ち行列から削除し、次の同期情報の処理へと進む。
(E)同期情報が割り込みハンドラ呼び出しの場合、同期情報に含まれる割り込み位置の情報を参照して、疑似割り込みを発生させる場所を決定する。次に、プロセッサの持つブレークポイント機能や、一定命令数実行後に割り込みを発生させるパフォーマンスカウンタに、疑似割り込みポイントまでの命令数を設定するなどの処置を講じてから、クローン側仮想計算機250に制御を渡し、疑似割り込み地点で発生する例外を待つ。
(F)同期情報に示されている割り込みベクタなどの情報を参照し、割り込みハンドラの起動準備を行う。
以上の一連の処理をメイン側ハイパーバイザ100とクローン側ハイパーバイザ200とがそれぞれ協調して行うことにより、メイン側仮想計算機150とクローン側仮想計算機250への入力が完全に一致し、実行状態の同期が実現できる。
なお、本実施形態では、同期情報送信部104と同期情報受信部204をハイパーバイザ内にあるとしたが、ネットワーク通信に必要な通信プロトコル処理など、仮想マシン側が持つ機能を活用するために、(メイン側仮想計算機150やクローン側仮想計算機250とは異なる)管理ドメインと呼ばれる別の仮想マシンを、計算機1と計算機2上にそれぞれ配備し、同期情報送信部104と同期情報受信部204の一部をそれぞれ持たせる構成も可能である。
次に、メイン側となるサーバ計算機1におけるハイパーバイザであるメイン側ハイパーバイザ100の動作手順について説明する。
図6に、メイン側ハイパーバイザ100の動作手順の一例を示す。
なお、図6において、HV2はクローン側ハイパーバイザ、VM1はメイン側仮想計算機、VM2はクローン側仮想計算機をそれぞれ表す。
メイン側ハイパーバイザ100において、ハイパーバイザサービス実行部108は、メイン側仮想計算機150を生成する(ステップS101)。
メイン側仮想計算機150の生成を、クローン側ハイパーバイザ200に通知する(ステップS102)。
カウンタ制御部105は、パフォーマンスカウンタ(以下、カウンタ)を初期化し、実行命令数のカウントを開始し、メイン側仮想計算機150を起動する(ステップS103)。
ここで、一旦、メイン側仮想計算機150内の処理に移る(ステップS104)。そして、ハイパーバイザ呼出し、例外又は割り込みが発生すると、メイン側ハイパーバイザ100に処理が戻る。
ハイパーバイザ呼出し、例外又は割り込みが発生して、メイン側ハイパーバイザ100に処理が戻ると、メイン側ハイパーバイザ100において、カウンタ制御部105は、カウンタを停止し、カウンタを退避する(ステップS105)。
次に、中断情報収集部107にてメイン側仮想計算機150の処理が中断した要因を調査する。
遷移の要因が、ハイパーバイザ呼出しである場合(ステップS106)、同期情報送信部104からクローン側ハイパーバイザ200の同期情報受信部204へ、呼び出しに係る同期情報を送信し(ステップS107)、メイン側ハイパーバイザ100内部の処理に移る(ステップS111)。
遷移の要因が、例外である場合(ステップS106)、同様に、例外に係る同期情報を送信し(ステップS109)、メイン側ハイパーバイザ100内部の処理に移る(ステップS111)。
遷移の要因が、割り込みである場合(ステップS106)、メイン側仮想計算機150に配送される割り込みであるならば(ステップS108)、同様に、割り込みに係る同期情報を送信し(ステップS110)、メイン側ハイパーバイザ100内部の処理に移る(ステップS111)。メイン側仮想計算機150に配送される割り込みでないならば(ステップS108)、ステップS110をスキップして、メイン側ハイパーバイザ100内部の処理に移る(ステップS111)。メイン側ハイパーバイザ100内部の処理は、ハイパーバイザサービス実行部108が行う。
さて、ステップS111の次に、ハイパーバイザサービス実行部108は、制御を移す仮想計算機を決定する(ステップS112)。
起動する仮想計算機が、メイン側仮想計算機150ではなく、他の仮想計算機である場合(ステップS113)、一旦、当該他の仮想計算機内の処理を行い(ステップS114)、その後、ステップS111のメイン側ハイパーバイザ100内の処理に戻る。
起動する仮想計算機が、メイン側仮想計算機150である場合(ステップS113)、ステップS115以降の処理を行う。
さて、ステップS113にて、起動する仮想計算機が、メイン側仮想計算機150である場合に、メイン側ハイパーバイザ100に処理が戻ると、メイン側ハイパーバイザ100において、復帰情報収集部109にて、メイン側仮想計算機150を復帰させる際の状態を調査する。
復帰時の状態が、ハイパーバイザ呼出しからの復帰である場合(ステップS115)、同期情報送信部104からクローン側ハイパーバイザ200の同期情報受信部204へ、ハイパーバイザ呼出しの応答要求を送信し(ステップS116)、復帰情報収集部109にて、ハイパーバイザ呼出しの応答内容をメイン側仮想計算機150に返す準備を行い(ステップS117)、カウンタ制御部105にて、カウンタをクリアして、カウントを開始し(ステップS118)、ハイパーバイザサービス実行部108にて、メイン側仮想計算機150を復帰する(ステップS119)。以降は、上記ステップS114からの繰り返しである。
復帰時の状態が、例外である場合(ステップS115)、同様に、ハンドラ呼出しに係る同期情報を送信し(ステップS121)、カウンタをクリアして、カウントを開始し(ステップS122)、メイン側仮想計算機150のハンドラ呼出しを行う(ステップS123)。以降は、上記ステップS114からの繰り返しである。
復帰時の状態が、割り込みからの復帰である場合(ステップS115)、メイン側仮想計算機150に配送される割り込みであるならば(ステップS120)、上記ステップS121以降を行う。メイン側仮想計算機150に配送される割り込みでないならば(ステップS120)、カウンタ制御部105にて、退避されていたカウンタを復帰し、カウントを開始し(ステップS124)、ハイパーバイザサービス実行部108にて、メイン側仮想計算機150を復帰する(ステップS125)。以降は、上記ステップS114からの繰り返しである。
次に、クローン側となるサーバ計算機2におけるハイパーバイザであるクローン側ハイパーバイザ200の動作手順について説明する。
図7に、クローン側ハイパーバイザ200の動作手順の一例を示す。
なお、図7において、HV1はメイン側ハイパーバイザ、VM1はメイン側仮想計算機、VM2はクローン側仮想計算機をそれぞれ表す。
また、メイン側ハイパーバイザ100から受信した同期情報は、同期情報バッファ(待ち行列)に格納されるものとする。
クローン側ハイパーバイザ200において、ハイパーバイザサービス実行部208は、メイン側ハイパーバイザ100から、メイン側仮想計算機150の生成の通知を受信すると(ステップS201)、クローン側仮想計算機250を生成する(ステップS202)。
次に、復帰状態設定部209は、同期情報バッファの先頭の復帰状態を取り出して検査する(ステップ203)。
復帰時の状態が、ハイパーバイザ呼出しからの復帰である場合(ステップS204)、復帰状態設定部209にて、ハイパーバイザ呼出しの応答要求を準備し(ステップS205)、ステップS208に進む。
復帰時の状態が、例外である場合(ステップS204)、例外ハンドラ呼出しを準備し(ステップS206)、ステップS208に進む。
復帰時の状態が、割り込みからの復帰である場合(ステップS204)、同期情報に含まれるベクタ情報を参照し、割り込みハンドラ呼出しを準備し(ステップS207)、ステップS208に進む。
次に、ステップS208で、中断状態比較部207は、同期情報バッファの先頭の中断状態を取り出して検査する(ステップ208)。
中断状態が、割り込みである場合(ステップS209)、ブレークポイント設定部210にて、割り込み発生位置で停止するように、カウンタに、ブレークポイントを設定し(ステップS210)、ハイパーバイザサービス実行部208にて、クローン側仮想計算機250に制御を移す(ステップS211)。
中断状態が、呼び出しからの復帰または例外である場合(ステップS209)、ステップS210をスキップして、クローン側仮想計算機250に制御を移す(ステップS211)。
ここで、一旦、クローン側仮想計算機250内の処理に移る(ステップS212)。そして、クローン側仮想計算機250内の処理が停止すると、クローン側ハイパーバイザ200に処理が戻る。
クローン側ハイパーバイザ200に処理が戻ると、カウンタを停止し(ステップS213)、中断状態比較部207にて、クローン側仮想計算機250の中断状態と、同期情報バッファの先頭の中断状態情報とを比較する(ステップS214)。
比較の結果、所望の停止位置でない場合(ステップS215)、カウンタを再開して(ステップS216)、クローン側仮想計算機250内の処理に戻る(ステップS217)。
比較の結果、所望の停止位置である場合(ステップS215)、クローン側ハイパーバイザ200内部の処理に移る(ステップS217)。クローン側ハイパーバイザ200内部の処理は、ハイパーバイザサービス実行部208が行う。
さて、ステップS217の次に、ハイパーバイザサービス実行部208は、制御を移す仮想計算機を決定する(ステップS218)。
起動する仮想計算機が、クローン側仮想計算機250ではなく、他の仮想計算機である場合(ステップS219)、一旦、当該他の仮想計算機内の処理を行い(ステップS220)、その後、ステップS217のクローン側ハイパーバイザ200内の処理に戻る。
起動する仮想計算機が、クローン側仮想計算機250である場合(ステップS219)、ステップS203に戻り、これまでの処理を繰り返す。
以下では、クローン側仮想計算機250で発生する割り込みタイミングを、メイン側仮想計算機150で発生した割り込みタイミングに合わせるためのタイミング制御の方法について、詳しく説明する。
プロセッサには、「所望の命令数が実行されたところで割り込みをかけることによって、遅延なく、処理を停止させることのできる機能」を有するプロセッサがある。このタイプのプロセッサにおいては、該機能を上記タイミング制御にそのまま利用することによって、メイン側仮想計算機150で割り込みが生じた場所と同じ場所で、クローン側仮想計算機250の実行を停止させることができる。
一方、「所望の命令数が実行されたところで割り込みをかけることによって、所定の割り込みの遅延の後に、処理を停止させることのできる機能」を有するプロセッサがある。例えば、Intel社のPentium(登録商標)プロセッサが、これに該当する。該機能を上記タイミング制御に使った場合、所望の命令数が実行されたところで割り込みをかけると、割り込みの遅延により、実際に処理が停止する場所が少しずれてしまう。よって、このタイプのプロセッサでは、実行命令数を単純に利用しても、メイン側仮想計算機150で発生した割り込み場所と同じ場所で、クローン側仮想計算機250を停止させることができない。そこで、例えば以下のような処理を施すことにより、メイン側仮想計算機150とクローン側仮想計算機250とで実行位置を合わせることができる。
Intel社のPentiumプロセッサには、実行命令数を計測するレジスタがある(このレジスタは、パフォーマンスカウンタと呼ばれる)。プロセッサの実行命令数をこのレジスタを使ってカウントする際に、このレジスタにおいてカウンタオーバーフローが生じると割り込み(Performance Monitor Interrupt)を発生させるように、設定を行うことが可能である(なお、プロセッサのモデルにより、割り込みがかけられないものもある)。
例えば、メイン側仮想計算機150とクローン側仮想計算機250とで実行位置を合わせるために、100命令実行後に割り込みを発生させるべき場合に、この割り込み機能において、カウンタの初期値に−99をセットしてから、実行を開始したものとする。すると、100命令実行した時点で、カウンタの値が−1から0へと変化し、これによって、オーバフローが生じて割り込みが引き起こされる。しかし、実際の割り込みの発生は多少遅延するため、実際には、“100命令”ではなく“100命令+数命令”が実行された後に、割り込みがかかる。この遅延量は不定であるため、遅延を考慮して、割り込みがかかるまでの実行命令数が少なくなるよう、カウンタの初期値を設定する。例えば、メイン側仮想計算機150側で100命令実行後に割り込みがかっている場合は、クローン側計算機のパフォーマンスカウンタには、−99ではなく、例えば−90のように、確実に手前で割り込みがかかるような値を設定する。この減算量(この例では10命令)は、プロセッサの規格や実測による経験則などで、確実に手前で止められる値を設定すればよく、値の決定方法については問わない。
次に、停止位置が所望の場所を過ぎてしまわないように、余裕を持たせて数命令手前で停止したクローン側仮想計算機250の停止位置を、メイン側仮想計算機150の割り込みが発生した位置まで進める方法について説明する。
これには、幾つかの方法があるが、例えば、トレース実行状態で1命令ずつクローン側仮想計算機250の処理を進めて、メイン側仮想計算機150の停止位置と同じになるまでステップ実行を行う方法がある。他の方法としては、通常のデバックで利用される実行アドレスに対してブレークポイントを設定する方法を利用して、メイン側仮想計算機150の割り込みが発生したアドレスにブレークポイントを仕掛けてから、クローン側仮想計算機250の実行を再開させる方法がある。
ブレークポイントによる割り込みでは、確実に同じアドレスでクローン側仮想計算機250の実行を止めることができるが、ループの中を実行中である場合、割り込みアドレスは同じであるが、まだ実行命令数がメイン側仮想計算機150の命令数に達していないことが考えられる。このため、ブレークポイントで停止したら、パフォーマンスカウンタの値を参照して、所望の停止位置であるかどうかを判定する必要がある。
図8に、ステップ実行により所望の場所まで処理を進める場合の処理手順の一例を示す。
まず、同期情報に含まれるメイン側仮想計算機150の実行命令数から所定の値を減算した値を算出し、その命令数だけ実行したところで、カウンタがオーバフローするように、初期値を設定する(ステップS301)。例えば、メイン側仮想計算機150の実行命令数がNmで、所定の減算数がNaであった場合には、設定するカウンタの値Cを
C=(Nm−Na)*(−1)
などと設定すればよい。
パフォーマンスカウンタに上記の値をセットした後に、クローン側仮想計算機250に制御を移す(ステップS302)。
なお、パフォーマンスカウンタがオーバフローする前に、クローン側仮想計算機250で割り込みが発生して、クローン側仮想計算機250の処理が中断し、その処理をクローン側ハイパーバイザ200が行う場合がある。その場合は、パフォーマンスカウンタのカウントを中断し、割り込み処理が終了して再びクローン側仮想計算機250に制御が移る際に、カウンタを再開すればよい(この他の要因による割り込みについては、非決定的であるため、図8には記載していない)。
クローン側仮想計算機250の処理の実行中に、パフォーマンスカウンタがオーバーフローを起こして、割り込みが発生したら(ステップS303)、パフォーマンスカウンタを停止し(ステップS304)、割り込み場所のプログラムカウンタとパフォーマンスカウンタ情報を取得し、メイン側仮想計算機150の割り込み場所と同じであるかを比較する(ステップS305)。
異なる場合は、所望の場所になるまでステップ実行を繰り返す(ステップS305,S306)。
ステップS305で所望の場所に到達したら、クローン側仮想計算機250の処理を停止させて(ステップS307)、次の同期情報に従い、イベントをクローン側仮想計算機250に伝達する。
図9に、ステップ実行により所望の場所まで処理を進める場合の処理手順の他の例を示す。
まず、同期情報に含まれるメイン側仮想計算機150の実行命令数から所定の値を減算した値を算出し、その命令数だけ実行したところで、カウンタがオーバフローするように、初期値を設定する(ステップS401)。
パフォーマンスカウンタに上記の値をセットした後に、クローン側仮想計算機250に制御を移す(ステップS402)。
クローン側仮想計算機250の処理の実行中に、パフォーマンスカウンタがオーバフローを起こして、割り込みが発生したら(ステップ403)、パフォーマンスカウンタを停止し(ステップS404)、割り込み場所のプログラムカウンタとパフォーマンスカウンタ情報を取得し、メイン側仮想計算機150の割り込み場所と同じであるかを比較する(ステップS405)。
異なる場合は、所望の場所になるまで、S405,S406,S407,S408,S404のループ処理を繰り返す。
すなわち、ステップS405で異なる場合は、まだ所望の場所に到達していないので、同期情報に含まれるメイン側仮想計算機150の割り込み場所のプログラムカウンタの情報を元に、クローン側仮想計算機250のアドレスにブレークポイントを設定する(ステップS405,S406)。このブレークポイントは、CPUのデバック用のレジスタで停止位置を指定する方法や、メモリ内にブレークポイント用の命令を挿入する方法があるが、どのような方法でも構わない。
ブレークポイントを設定したら、パフォーマンスカウンタのカウントを再開させて、クローン側仮想計算機250に制御を移し(ステップS407)、ブレークポイントに到達するのを待つ。ブレークポイントに到達したら(ステップS408)、パフォーマンスカウンタを停止させて(ステップS404)、停止場所が所望の場所かどうかの判定を行う(ステップS405)。
ステップS405で所望の場所に到達したら、クローン側仮想計算機250の処理を停止させて(ステップS409)、次の同期情報に従い、イベントをクローン側仮想計算機250に伝達する。
なお、ブレークポイントを設定してクローン側仮想計算機250に制御を移した後に、ブレークポイントではない他の要因で割り込みが発生する場合があるが、この場合も、割り込み処理から復帰するまで、パフォーマンスカウンタのカウントを中断させればよい。
以上の方法により、メイン側仮想計算機150において非決定的な割り込みにより処理が中断した場所と同じ場所で、クローン側仮想計算機250における処理を停止させることが可能になる。この状態で、メイン側と同じ割り込みベクタをクローン側仮想計算機250内で呼べば、クローン側仮想計算機250でも、同じ場所で割り込み処理が起動されることになる。
以上のように本実施形態によれば、独立した2台の計算機上で稼働する仮想計算機の実行状態が同一になり、二重化が達成される。このため、メイン側仮想計算機の稼働する計算機が、故障により停止した場合にでも、クローン側仮想計算機が、同じ処理を継続でき、これによって、故障を隠蔽することができる。このように、本実施形態により、仮想計算機の可用性を向上させることができる。
なお、以上の各機能は、ソフトウェアとして記述し適当な機構をもったコンピュータに処理させても実現可能である。
また、本実施形態は、コンピュータに所定の手順を実行させるための、あるいはコンピュータを所定の手段として機能させるための、あるいはコンピュータに所定の機能を実現させるためのプログラムとして実施することもできる。加えて該プログラムを記録したコンピュータ読取り可能な記録媒体として実施することもできる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
本発明の一実施形態に係る高可用システムの概略構成例を示す図 メイン側となるサーバ計算機におけるハイパーバイザの機能ブロックの構成例を示す図 クローン側となるサーバ計算機におけるハイパーバイザの機能ブロックの構成例を示す図 仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図 仮想計算機の処理に対する割り込みのタイミングに関する制御について説明するための図 メイン側となるサーバ計算機におけるハイパーバイザの動作手順の一例を示すフローチャート クローン側となるサーバ計算機におけるハイパーバイザの動作手順の一例を示すフローチャート クローン側仮想計算機が割り込みタイミングを合わせるための処理手順の一例を示すフローチャート クローン側仮想計算機が割り込みタイミングを合わせるための処理手順の他の例を示すフローチャート
符号の説明
1,2…サーバ計算機、11,21…プロセッサ、12,22…メモリ、13,23…通信装置、14,15,24,25…デバイス、16,26…ディスク、100…メイン側ハイパーバイザ、101,201…物理デバイス管理部、102,202…配送先決定部、103,203…仮想デバイス管理部、104…同期情報送信部、105,205…カウンタ制御部、106,206…仮想計算機実行状態保存部、107…中断情報収集部、108,208…ハイパーバイザサービス実行部、109…復帰情報収集部、111,211…カウンタ、133,136,137,233,236,237…仮想デバイス、150…メイン側仮想計算機、200…クローン側ハイパーバイザ、204…同期情報受信部、207…中断状態比較部、209…復帰状態設定部、210…ブレークポイント設定部、250…クローン側仮想計算機

Claims (18)

  1. 第1の仮想計算機と該第1の仮想計算機を管理する第1のハイパーバイザとが稼働する第1の計算機、及び第2の仮想計算機と該第2の仮想計算機を管理する第2のハイパーバイザとが稼働する第2の計算機を含む高可用システムであって、
    前記第1のハイパーバイザは、
    前記第1の仮想計算機について発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集する収集部と、
    収集した前記同期情報を、前記第2のハイパーバイザへ送信する送信部とを備え、
    前記第2のハイパーバイザは、
    前記第1のハイパーバイザから、前記同期情報を受信する受信部と、
    受信した前記同期情報に従って、前記第2の仮想計算機の入力に係る実行状態を、前記第1の仮想計算機の入力に係る実行状態と同一になるように、制御する制御部とを備え、
    前記収集部は、前記イベントの発生するタイミングが非決定的であるか、決定的であるかを判定し、非決定的であると判断した場合に、前記同期情報に、該イベントが発生したタイミングを特定するためのタイミング情報を含ませることを特徴とする高可用システム。
  2. 前記送信部は、複数の前記同期情報を、当該同期情報に係るイベントが発生した順に送信することを特徴とする請求項1に記載の高可用システム。
  3. 前記制御部は、複数の前記同期情報を、当該同期情報が受信された順に参照することによって、前記第1の仮想計算機について複数のイベントが発生した順番と同一の順番で、前記第2の仮想計算機について同一の複数のイベントが発生するように、制御することを特徴とする請求項2に記載の高可用システム。
  4. 前記制御部は、前記同期情報に係るイベントの発生するタイミングが非決定的である場合に、前記同期情報に含まれるタイミング情報に従って、前記第1の仮想計算機について該イベントが発生したタイミングと同一のタイミングで、前記第2の仮想計算機について該イベントと同一のイベントが発生するように、制御することを特徴とする請求項に記載の高可用システム。
  5. 前記第1のハイパーバイザから前記第1の仮想計算機へ制御が移るに際して、実行された命令数を保持するカウンタをクリアして、それ以降で実行される命令数をカウントし、前記第1の仮想計算機から前記第1のハイパーバイザへ制御が移るに際して、該命令数のカウントを停止するカウンタ制御部を更に備え、
    前記収集部は、前記第1の仮想計算機から前記第1のハイパーバイザへ制御が移るにあたって発生したイベントが、該第1の仮想計算機に関係する割り込みであった場合には、前記イベントの発生するタイミングが非決定的であると判定し、停止したときの前記カウンタが示す実行命令数を、前記タイミング情報とすることを特徴とする請求項に記載の高可用システム。
  6. 前記カウンタ制御部は、前記第1のハイパーバイザから前記第1の仮想計算機へ制御が移るに際して、前記第1の仮想計算機から前記第1のハイパーバイザへ制御が移るにあたって発生したイベントが、該第1の仮想計算機に関係しない割り込みである場合には、前記カウントをクリアする代わりに、前記カウントを再開することを特徴とする請求項に記載の高可用システム。
  7. 前記制御部は、前記同期情報に含まれる前記実行命令数に従って、前記第2の仮想計算機が実行している命令列の中に、前記同期情報に係るイベントと同一のイベントを発生させるためのブレークポイントを設定することを特徴とする請求項に記載の高可用システム。
  8. 前記第2の計算機は、前記第2の仮想計算機に割り込みをかけた場合に、割り込み遅延が発生しないものであり、
    前記制御部は、前記同期情報に含まれる前記実行命令数に従って、前記第1の仮想計算機で割り込みが発生したタイミングと同一のタイミングで前記第2の仮想計算機に割り込みをかけることを特徴とする請求項に記載の高可用システム。
  9. 前記制御部は、前記同期情報に含まれる前記実行命令数に従って、前記割り込み遅延の発生にかかわらずに前記第1の仮想計算機で割り込みが発生したタイミング以前のタイミングで前記第2の仮想計算機の命令の実行が確実に停止するように制御した上で、前記第1の仮想計算機で割り込みが発生したタイミングと同一のタイミングに至ったと判断されるまで、前記第2の仮想計算機の命令を、1命令又は複数命令ずつ、繰り返し実行することを特徴とする請求項に記載の高可用システム。
  10. 前記第2のハイパーバイザから前記第2の仮想計算機に制御が移るに際して割り込みイベントを通知させることを特徴とする請求項に記載の高可用システム。
  11. 前記収集部は、前記イベントについて、前記第1の仮想計算機の処理が中断して、制御が前記第1のハイパーバイザへ移る場合、及び前記第1のハイパーバイザから前記第1の仮想計算機へ制御が復帰する場合に、前記同期情報を収集することを特徴とする請求項1に記載の高可用システム。
  12. 前記収集部は、前記イベントがハイパーバイザ呼び出しである場合、前記第1の仮想計算機の処理の中断時に係る前記同期情報に、ハイパーバイザ呼び出しの種類及び引数の情報を含ませることを特徴とする請求項1に記載の高可用システム。
  13. 前記収集部は、前記イベントがハイパーバイザ呼び出しである場合、前記第1の仮想計算機の処理への復帰時に係る前記同期情報に、ハイパーバイザ呼び出しの応答情報及び応答経路の情報を含ませることを特徴とする請求項12に記載の高可用システム。
  14. 前記収集部は、前記イベントが例外である場合、前記第1の仮想計算機の処理の中断時に係る前記同期情報に、例外の内容を含ませることを特徴とする請求項1に記載の高可用システム。
  15. 前記収集部は、前記例外である場合、前記第1の仮想計算機の処理への復帰時に係る前記同期情報に、例外ハンドラ呼び出しの実行を示す情報を含ませることを特徴とする請求項14に記載の高可用システム。
  16. 前記収集部は、前記イベントが割り込みである場合、前記第1の仮想計算機の処理の中断時に係る前記同期情報に、割り込みハンドラが起動される仮想計算機の識別情報、例外の情報及び割り込み位置の情報を含ませることを特徴とする請求項1に記載の高可用システム。
  17. 前記収集部は、前記イベントが割り込みである場合、前記第1の仮想計算機の処理への復帰時に係る前記同期情報に、割り込みハンドラ呼び出しに関する情報を含ませることを特徴とする請求項6に記載の高可用システム。
  18. 第1の仮想計算機と該第1の仮想計算機を管理する第1のハイパーバイザとが稼働する第1の計算機、及び第2の仮想計算機と該第2の仮想計算機を管理する第2のハイパーバイザとが稼働する第2の計算機を含む高可用システムの実行状態制御方法であって、
    前記第1のハイパーバイザの備える収集部が、前記第1の仮想計算機について発生した、該第1の仮想計算機に対する入力を伴うイベントに関する同期情報を収集するステップと、
    前記第1のハイパーバイザの備える送信部が、収集した前記同期情報を、前記第2のハイパーバイザへ送信するステップと、
    前記第2のハイパーバイザの備える受信部が、前記第1のハイパーバイザから、前記同期情報を受信するステップと、
    前記第2のハイパーバイザの備える設定部が、受信した前記同期情報に従って、前記第2の仮想計算機の入力に係る実行状態を、前記第1の仮想計算機の入力に係る実行状態と同一になるように、制御するステップとを有し、
    前記収集部は、前記イベントの発生するタイミングが非決定的であるか、決定的であるかを判定し、非決定的であると判断した場合に、前記同期情報に、該イベントが発生したタイミングを特定するためのタイミング情報を含ませることを特徴とする実行状態制御方法。
JP2007250089A 2007-09-26 2007-09-26 高可用システム及び実行状態制御方法 Active JP4468426B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007250089A JP4468426B2 (ja) 2007-09-26 2007-09-26 高可用システム及び実行状態制御方法
US12/233,461 US8281304B2 (en) 2007-09-26 2008-09-18 High availability system and execution state control method
US13/601,203 US9104638B2 (en) 2007-09-26 2012-08-31 High availability system and execution state control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007250089A JP4468426B2 (ja) 2007-09-26 2007-09-26 高可用システム及び実行状態制御方法

Publications (2)

Publication Number Publication Date
JP2009080695A JP2009080695A (ja) 2009-04-16
JP4468426B2 true JP4468426B2 (ja) 2010-05-26

Family

ID=40473099

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007250089A Active JP4468426B2 (ja) 2007-09-26 2007-09-26 高可用システム及び実行状態制御方法

Country Status (2)

Country Link
US (2) US8281304B2 (ja)
JP (1) JP4468426B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990617B2 (en) 2011-04-11 2015-03-24 Nec Corporation Fault-tolerant computer system, fault-tolerant computer system control method and recording medium storing control program for fault-tolerant computer system
US8990632B2 (en) 2011-09-27 2015-03-24 Nec Corporation System for monitoring state information in a multiplex system
US11403126B2 (en) 2018-09-10 2022-08-02 Yokogawa Electric Corporation Redundant system, redundant program, and information processing apparatus

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9459984B2 (en) * 2007-10-29 2016-10-04 Intel Corporation Method and systems for external performance monitoring for virtualized environments
JP5560113B2 (ja) * 2010-06-25 2014-07-23 株式会社日立製作所 計算機システム及び計算機の管理方法
US8868886B2 (en) * 2011-04-04 2014-10-21 International Business Machines Corporation Task switch immunized performance monitoring
US9342432B2 (en) 2011-04-04 2016-05-17 International Business Machines Corporation Hardware performance-monitoring facility usage after context swaps
US8635615B2 (en) * 2011-05-14 2014-01-21 Industrial Technology Research Institute Apparatus and method for managing hypercalls in a hypervisor and the hypervisor thereof
US20130055033A1 (en) 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
DE102011116866A1 (de) * 2011-10-25 2013-04-25 Fujitsu Technology Solutions Intellectual Property Gmbh Clustersystem und Verfahren zum Ausführen einer Mehrzahl von virtuellen Maschinen
JP5660097B2 (ja) * 2012-09-18 2015-01-28 横河電機株式会社 フォールトトレラントシステム
JP5660096B2 (ja) 2012-09-18 2015-01-28 横河電機株式会社 フォールトトレラントシステム
JP5700009B2 (ja) 2012-09-18 2015-04-15 横河電機株式会社 フォールトトレラントシステム
JP5630671B2 (ja) * 2012-09-18 2014-11-26 横河電機株式会社 フォールトトレラントシステム
JP6029737B2 (ja) 2013-02-15 2016-11-24 三菱電機株式会社 制御装置
CN104253842B (zh) * 2013-06-28 2018-03-06 华为技术有限公司 同步终端镜像的方法、装置、终端及服务器
US9727357B2 (en) 2013-10-01 2017-08-08 International Business Machines Corporation Failover detection and treatment in checkpoint systems
JP6197585B2 (ja) 2013-11-01 2017-09-20 富士通株式会社 情報処理装置、及び、情報処理装置の制御方法
US9766999B2 (en) * 2014-05-30 2017-09-19 Intel Corporation Monitoring performance of a processing device to manage non-precise events
JP2016001394A (ja) * 2014-06-11 2016-01-07 富士ゼロックス株式会社 情報処理装置、情報処理システム及びプログラム
US10345883B2 (en) 2016-05-31 2019-07-09 Taiwan Semiconductor Manufacturing Co., Ltd. Power estimation
US9965375B2 (en) 2016-06-28 2018-05-08 Intel Corporation Virtualizing precise event based sampling
US10613708B2 (en) * 2017-02-24 2020-04-07 Red Hat Israel, Ltd. Cloning a hypervisor
US11010280B1 (en) 2019-03-13 2021-05-18 Parallels International Gmbh System and method for virtualization-assisted debugging
US11169837B2 (en) * 2019-08-23 2021-11-09 Red Hat, Inc. Fast thread execution transition

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2177850A1 (en) * 1993-12-01 1995-06-08 Thomas Dale Bissett Fault resilient/fault tolerant computing
US6400819B1 (en) * 1996-03-28 2002-06-04 Hitachi, Ltd. Method and apparatus for executing communication in real-time and data structure for real-time data communication
US6321377B1 (en) * 1998-12-03 2001-11-20 International Business Machines Corporation Method and apparatus automatic service of JIT compiler generated errors
US7330488B2 (en) * 2004-12-17 2008-02-12 International Business Machines Corporation System, method, and article of manufacture for synchronizing time of day clocks on first and second computers
WO2007036072A1 (en) * 2005-09-29 2007-04-05 Intel Corporation Apparatus and method for expedited virtual machine (vm) launch in vm cluster environment
JP4585463B2 (ja) 2006-02-15 2010-11-24 富士通株式会社 仮想計算機システムを機能させるためのプログラム
US8694990B2 (en) * 2007-08-27 2014-04-08 International Business Machines Corporation Utilizing system configuration information to determine a data migration order

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8990617B2 (en) 2011-04-11 2015-03-24 Nec Corporation Fault-tolerant computer system, fault-tolerant computer system control method and recording medium storing control program for fault-tolerant computer system
US8990632B2 (en) 2011-09-27 2015-03-24 Nec Corporation System for monitoring state information in a multiplex system
US11403126B2 (en) 2018-09-10 2022-08-02 Yokogawa Electric Corporation Redundant system, redundant program, and information processing apparatus

Also Published As

Publication number Publication date
US20090083735A1 (en) 2009-03-26
US20120324452A1 (en) 2012-12-20
JP2009080695A (ja) 2009-04-16
US9104638B2 (en) 2015-08-11
US8281304B2 (en) 2012-10-02

Similar Documents

Publication Publication Date Title
JP4468426B2 (ja) 高可用システム及び実行状態制御方法
JP5268469B2 (ja) 高可用システム及び実行状態制御方法
USRE47852E1 (en) Snapshot and replication of a multi-stream application on multiple hosts at near-sync frequency
US10678550B2 (en) Capturing snapshots of offload applications on many-core coprocessors
EP3090345B1 (en) Method of delaying checkpoints by inspecting network packets
JP5258019B2 (ja) アプリケーション・プロセス実行の範囲内での非決定論的オペレーションを管理、ロギング、またはリプレイするための予測方法
KR101835458B1 (ko) 데이터 처리 시스템의 재기동 방법, 시스템 및 컴퓨터 판독가능 저장 매체
US8812907B1 (en) Fault tolerant computing systems using checkpoints
US9329958B2 (en) Efficient incremental checkpointing of virtual devices
US20010014954A1 (en) System and method for fail-over data transport
EP2518627B1 (en) Partial fault processing method in computer system
JP2014503904A (ja) 仮想計算機のクラスタを操作するための方法、装置、コンピュータ・プログラム、およびコンピュータ・プログラム製品
KR20030015238A (ko) 통합 모듈러 항법장비의 통신 방법 및 시스템
EP3090336A1 (en) Checkpointing systems and methods of using data forwarding
JP2019169081A (ja) 情報処理装置、情報処理方法、プログラム
JP2002082816A (ja) 障害監視システム
JP2009080705A (ja) 仮想計算機システム及び同システムにおける仮想計算機復元方法
WO2011116672A1 (zh) 为共享代码段打补丁的方法及装置
JP2001282558A (ja) マルチオペレーティング計算機システム
JP3891994B2 (ja) 順番のある(in−order)キューをドレインする(drain)システムおよび方法
JP2003345638A (ja) 記憶制御装置の制御方法及び記憶制御装置及びプログラム
JP7485101B2 (ja) サーバ内遅延制御装置、サーバ内遅延制御方法およびプログラム
JP2016212485A (ja) 仮想マシン同期システム、仮想マシン同期方法および仮想マシン同期プログラム
JP2002099437A (ja) ネットワーク接続装置の制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090327

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090903

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090929

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091130

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100224

R151 Written notification of patent or utility model registration

Ref document number: 4468426

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130305

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140305

Year of fee payment: 4

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313114

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350