JP2014059750A - フォールトトレラントシステム - Google Patents

フォールトトレラントシステム Download PDF

Info

Publication number
JP2014059750A
JP2014059750A JP2012204608A JP2012204608A JP2014059750A JP 2014059750 A JP2014059750 A JP 2014059750A JP 2012204608 A JP2012204608 A JP 2012204608A JP 2012204608 A JP2012204608 A JP 2012204608A JP 2014059750 A JP2014059750 A JP 2014059750A
Authority
JP
Japan
Prior art keywords
virtual machine
primary
guest
interrupt
synchronization
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
JP2012204608A
Other languages
English (en)
Other versions
JP5700009B2 (ja
Inventor
Yoshitaka Yoshida
善貴 吉田
Shota Uehara
正太 植原
Takeshi Ono
毅 大野
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.)
Yokogawa Electric Corp
Original Assignee
Yokogawa Electric 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 Yokogawa Electric Corp filed Critical Yokogawa Electric Corp
Priority to JP2012204608A priority Critical patent/JP5700009B2/ja
Priority to US14/029,064 priority patent/US9465634B2/en
Priority to CN201310430124.9A priority patent/CN103678024B/zh
Priority to EP13184950.7A priority patent/EP2709013B1/en
Publication of JP2014059750A publication Critical patent/JP2014059750A/ja
Application granted granted Critical
Publication of JP5700009B2 publication Critical patent/JP5700009B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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
    • 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
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B9/00Safety arrangements
    • G05B9/02Safety arrangements electric
    • G05B9/03Safety arrangements electric with multiple-channel loop, i.e. redundant control systems
    • 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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • G06F11/1484Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines
    • 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
    • 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/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • 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/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/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

Landscapes

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

Abstract

【課題】2台のコンピュータ上に形成された2台の仮想マシンを並列同期動作させるフォールトトレラントシステムにおいて、それぞれのコンピュータのハードウェアの差異を適切に調整する。
【解決手段】プライマリ仮想マシンと、セカンダリ仮想マシンとを備えたフォールトトレラントシステムであって、プライマリ仮想マシンは、セカンダリ仮想マシンから、動作性能情報を収集し、プライマリ仮想マシンの動作能力と、セカンダリ仮想マシンの動作能力が等しくなるように、プライマリ仮想マシンの動作能力とセカンダリ仮想マシンの動作能力とを設定する。
【選択図】図1

Description

本発明は、仮想マシンを利用したフォールトトレラントシステムに関する。
フォールトトレラントシステムは、その構成の一部に問題が生じてもシステム全体が機能停止することなく動作を継続できるシステムであり、特に、連続可動性が要求されるシステム等に適用される。例えば、フォールトトレラントを適用したサーバコンピュータは、ハードウェアに障害が発生しても、外部機器のクライアントアプリケーションからのネットワークアクセスに対して、通信エラーとならずに、正しいデータを出力することができる。
特許文献1に記載されているように、通信可能な2台のコンピュータ上でそれぞれ稼働する仮想マシンでフォールトトレラントシステムを実現する手法が知られている。仮想マシンを利用したフォールトトレラントシステムは、2台の仮想マシンに実行状態を同期させて同じ動作をさせており、一方のコンピュータに障害が発生した場合でも、他方のコンピュータで稼働する仮想マシンが処理を引き継ぐことで、システムのサービスを途切れることなく連続して提供することができる。
仮想マシンを利用したフォールトトレラントシステムは、一方の仮想マシンをプライマリ仮想マシンとし、他方の仮想マシンをセカンダリ仮想マシンとする。そして、プライマリ仮想マシンを先行して動作させるとともに、外部との入出力のやり取りはプライマリ仮想マシンのみが行なうようにする。
一般に、同じプログラムを実行している2台のコンピュータは、外部からの入力が正確に同じタイミングで入力されると、同じ動作を行なって同じ出力を行なう。そこで、仮想マシンを利用したフォールトトレラントシステムは、プライマリ仮想マシンで、外部入力に基づく割り込みが発生すると、割り込みを行なったタイミングを同期情報としてセカンダリ仮想マシンに伝達する。そして、遅れて動作を行なっているセカンダリ仮想マシンが、同期情報で通知されたタイミングと同じタイミングで擬似的に割り込みを行なうことで、プライマリ仮想マシンとセカンダリ仮想マシンは、同期して同じ動作を行なうことになる。
図6は、仮想マシンを利用した従来のフォールトトレラントシステムの構成を示すブロック図である。本図に示すように、フォールトトレラントシステム60は、ネットワーク接続されたプライマリマシン600とセカンダリマシン700とを備えている。
プライマリマシン600は、物理的なコンピュータ環境であるプライマリハードウェア610上でプライマリハイパーバイザ620が動作しており、プライマリ仮想マシン630が形成されている。プライマリ仮想マシン630では、プライマリゲストOS640が動作しており、プライマリゲストOS640上で、アプリケーション650が実行されている。
プライマリハードウェア610は、CPU、メモリ、ネットワークインタフェースカード(NIC)、ストレージ等の各種デバイス等を備えている。
プライマリ仮想マシン630は、プライマリハードウェア610の一部が割り当てられ、外部との入出力を行なって動作する仮想的なコンピュータ環境である。プライマリ仮想マシン630は、プライマリハイパーバイザ620により管理される。
セカンダリマシン700も同様に、物理的なコンピュータ環境であるセカンダリハードウェア710上でセカンダリハイパーバイザ720が動作しており、セカンダリ仮想マシン730が形成されている。セカンダリ仮想マシン730では、セカンダリゲストOS740が動作しており、セカンダリゲストOS740上で、アプリケーション750が実行されている。
セカンダリハードウェア710は、CPU、メモリ、ネットワークインタフェースカード(NIC)、ストレージ等の各種デバイス等を備えている。
セカンダリ仮想マシン730は、セカンダリハードウェア710の一部が割り当てられ、プライマリ仮想マシン630に同期して動作する仮想的なコンピュータ環境である。セカンダリ仮想マシン730は、セカンダリハイパーバイザ720により管理される。
従来のフォールトトレラントシステム60において、プライマリ仮想マシン630とセカンダリ仮想マシン730との実行状態の同期は以下のような手順で行なわれている。
プライマリハイパーバイザ620が、プライマリハードウェア610から外部割り込みを受けると、プライマリ仮想マシン630に外部割り込みの入力を行なう。
次いで、プライマリ仮想マシン630が、プライマリゲストOS640に擬似割り込みの入力を行なう。ここで、プライマリ仮想マシン630からプライマリゲストOS640への擬似割り込みの入力について説明する。
プライマリゲストOS640の処理中に、外部割り込み、特権命令、例外等の仮想マシンコンテキスト切り替えイベントが発生すると、プライマリゲストOS640の処理を中断して、ゲストOSコンテキストから仮想マシンコンテキストに切り替わり、プライマリ仮想マシン630に処理が遷移する。
プライマリ仮想マシン630は、各種イベントに応じてそのタイミングでプライマリゲストOS640に擬似割り込みを行なう必要があれば、擬似割り込みの設定を行なう。擬似割り込みの設定を行なった場合は、プライマリ仮想マシン630が処理を終えて、イベント発生時に割り込まれたプライマリゲストOS640に処理が戻るときにプライマリゲストOS640に擬似割り込みが入力される。
プライマリ仮想マシン630は、プライマリゲストOS640に擬似割り込みの入力を行なうと、セカンダリ仮想マシン730に同期情報の伝達を行なう。同期情報には、擬似割り込みの識別情報と擬似割り込みを入力する同期タイミング情報とが含まれる。
同期タイミング情報は、プライマリゲストOS640に入力された擬似割り込みと同じタイミングでセカンダリゲストOS740に擬似割り込みを入力するための情報であり、CPU固有の実行中断位置と実行命令数とが含まれる。
実行中断位置は、例えば、擬似割り込みが入力されたときに実行していた命令のアドレスを示すプログラムカウンタの値を用いることができる。また、実行命令数は、CPUが備えるパフォーマンスカウンタのCPU実行命令数カウンタで計測することができる。
この場合、プライマリ仮想マシン630がプライマリゲストOS640に擬似割り込みの入力を行なうと、プライマリゲストOS640の実行を再開する前に、CPU実行命令数カウンタをゼロクリアし、CPU実行命令数カウンタを有効化する。これにより、前回の擬似割り込み入力からプライマリゲストOS640が実行した命令数をカウントすることができる。
同期タイミング情報として実行中断位置だけを用いると、実行中断位置の示す命令がループ処理に含まれる場合や条件分岐先にある場合に、ループや条件分岐の度にその命令を通過するため、擬似割り込み入力のタイミングを特定することができない。
また、同期タイミング情報として実行命令数だけを用いると、パイプライン機能などの高速化技術により、セカンダリゲストOS740が指定された実行命令数で停止できず、その実行命令数を超えて停止してしまい、プライマリゲストOS640と同じタイミングで擬似割り込みを入力することができない場合がある。
そこで、同期タイミング情報として実行中断位置と実行命令数とを組み合わせ、セカンダリゲストOS740において、実行中断位置が示す命令を通る度に、実行命令数を確認することで、セカンダリゲストOS740を、プライマリゲストOS640で擬似割り込みが入力されたのと同じタイミングで停止させるようにしている。
従って、プライマリ仮想マシン630は、プライマリゲストOS640の実行を中断した後、プライマリゲストOS640に擬似割り込みの入力を行なうと、プライマリゲストOS640が実行を中断した時点のプログラムカウンタの値と、CPU実行命令数カウンタの値とを取得し、同期タイミング情報を生成する。そして、擬似割り込みの識別情報と同期タイミング情報とを同期情報としてセカンダリ仮想マシン730に伝達する。
同期情報を受信したセカンダリ仮想マシン730は、同期タイミング情報に従ってセカンダリゲストOS740の実行を中断させる。このときのセカンダリ仮想マシン730の動作について、図7のフローチャートを参照して説明する。
同期タイミング情報の実行中断位置で指定されたプログラム位置にブレーク命令を埋め込んで(S301)、セカンダリゲストOS740を再開させる(S302)。そして、セカンダリゲストOS740が停止すると(S303:Yes)、CPU実行命令数カウンタを確認して、指定された実行命令数と一致していたら(S304:Yes)、その停止位置でセカンダリゲストOS740を中断させる(S305)。指定された実行命令数と一致していなければ(S304:No)、再度セカンダリゲストOS740を再開させ(S302)、実行命令数の確認処理を繰り返す。
セカンダリ仮想マシン730は、セカンダリゲストOS740を中断させると、同期情報の擬似割り込み識別情報に従って擬似割り込みの設定を行なって、(S306)、セカンダリゲストOS740を再開させる(S307)。これにより、セカンダリゲストOS740に、プライマリゲストOS640と同じタイミングで擬似割り込みが入力され、プライマリ仮想マシン630とセカンダリ仮想マシン730との実行状態が同期する。
なお、プライマリマシン600、セカンダリマシン700のいずれかでハードウェアの故障が生じると、実行状態の同期が乱れる。実行状態の同期が乱れると、プライマリ仮想マシン630とセカンダリ仮想マシン730とで、出力データの値が異なってくる。そこで、従来のフォールトトレラントシステム60は、プライマリ仮想マシン630の出力とセカンダリ仮想マシン730の出力とを照合し、出力データの値が異なる場合は、どちらかのハードウェアで故障が発生したと判断する。
この故障判断処理を行なうため、セカンダリ仮想マシン730に出力データ照合部731を設け、プライマリ仮想マシン630の出力データを収集して、セカンダリ仮想マシン730の出力データと照合するようにしている。
特開2009−80695号公報
フォールトトレラントシステム60において、プライマリマシン600のプライマリハードウェア610とセカンダリマシン700のセカンダリハードウェア710は、CPU、メモリ、デバイス等、種々のハードウェアで構成されているが、双方のハードウェアの性能は必ずしも一致するとは限られない。
例えば、CPUのスペックが異なっていたり、メモリの容量が異なっている場合も想定される。また、フォールトトレラントシステム60の運用過程においてデバイスが交換される等により、双方のデバイスが異なっている場合や、同じデバイスであっても、経年劣化等により性能差が生じる場合もある。
このため、プライマリ仮想マシン630とセカンダリ仮想マシン730とで処理速度に差が生じる場合がある。上述のように、フォールトトレラントシステム60は、プライマリ仮想マシン630が先行して動作を行なうようにしているが、例えば、セカンダリ仮想マシン730の方が、処理速度が速いと、動作の逆転現象が生じ、プライマリ仮想マシン630からの同期情報に基づく実行状態の同期が行なえなくなる。プライマリ仮想マシン630の方が、処理速度が速いと、セカンダリ仮想マシン730の遅れが蓄積されていく。
また、デバイスが異なっていると、プライマリゲストOS640とセカンダリゲストOS740のドライバ処理が異なって、両者の動作に相違が生じる結果、同期ずれが生じるおそれがある。
このため、ハードウェアの差異を埋める仕組みが必要となる。そこで、本発明は、2台のコンピュータ上に形成された2台の仮想マシンを並列同期動作させるフォールトトレラントシステムにおいて、それぞれのコンピュータのハードウェアの差異を適切に調整することを目的とする。
上記課題を解決するため、本発明のフォールトトレラントシステムは、プラマリハイパーバイザが稼働するプライマリマシン上に形成され、前記プラマリハイパーバイザからの外部割り込みに基づく擬似割り込みをプラマリゲストOSに入力するプライマリ仮想マシンと、セカンダリハイパーバイザが稼働するセカンダリマシン上に形成され、前記プライマリ仮想マシンから伝達された前記擬似割り込みのタイミング情報に基づいて、擬似割り込みをセカンダリゲストOSに入力するセカンダリ仮想マシンと、を備えたフォールトトレラントシステムであって、前記プライマリ仮想マシンは、前記セカンダリ仮想マシンから、動作性能情報を収集し、前記プライマリ仮想マシンの動作能力と、前記セカンダリ仮想マシンの動作能力が等しくなるように、前記プライマリ仮想マシンの動作能力と前記セカンダリ仮想マシンの動作能力とを設定することを特徴とする。
ここで、前記プライマリ仮想マシンは、設定した前記セカンダリ仮想マシンの動作能力を前記セカンダリ仮想マシンに通知し、前記セカンダリ仮想マシンは、通知された動作能力に従って動作を行なうことができる。
また、前記動作能力は、動作周波数を含み、前記プライマリ仮想マシンは、前記プライマリ仮想マシンが使用可能な動作周波数と、前記セカンダリ仮想マシンが使用可能な動作周波数とを収集して、前記プライマリ仮想マシンの動作周波数と、前記セカンダリ仮想マシンの動作周波数とを設定することができる。
また、前記プライマリ仮想マシンは、前記プライマリ仮想マシンが使用するデバイスの動作仕様と、前記セカンダリ仮想マシンが使用するデバイスの動作仕様とが異なる場合に、前記プライマリ仮想マシンが使用するデバイスに対する処理が、前記セカンダリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートすることができる。
このとき、前記プライマリ仮想マシンは、前記デバイスの動作仕様の違いが所定の機能の有無の場合は、前記所定の機能を無効にして、前記プライマリ仮想マシンが使用するデバイスに対する処理が、前記セカンダリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートし、前記デバイスの動作仕様の違いが能力あるいは容量の場合は、動作に相違が生じる処理を前記プライマリゲストOSの外部で実行させることができる。
また、前記セカンダリ仮想マシンは、前記プライマリ仮想マシンが使用するデバイスの動作仕様と、前記セカンダリ仮想マシンが使用するデバイスの動作仕様とが異なる場合に、前記セカンダリ仮想マシンが使用するデバイスに対する処理が、前記プライマリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートすることができる。
あるいは、前記セカンダリ仮想マシンは、前記デバイスの動作仕様の違いが所定の機能の有無の場合は、前記所定の機能を無効にして、前記セカンダリ仮想マシンが使用するデバイスに対する処理が、前記プライマリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートし、前記デバイスの動作仕様の違いが能力あるいは容量の場合は、動作に相違が生じる処理を前記セカンダリゲストOSの外部で実行させることができる。
また、前記セカンダリ仮想マシンは、前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が遅い場合には、遅れの度合いを取得し、取得した値が予め定められた遅延許容時間を超えると、同期初期化処理を行なうことができる。
このとき、前記セカンダリ仮想マシンは、前記取得した遅れの度合いが、想定される量より大きい場合に、故障として検出することができる。
また、前記セカンダリ仮想マシンは、前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が遅い場合には、前記プライマリゲストOSのアイドル時に、擬似割り込み入力タイミングを前倒しすることで、前記プライマリ仮想マシンに対する遅れを取り戻すことができる。
また、前記プライマリ仮想マシンは、前記動作能力の設定後であっても、前記セカンダリ仮想マシンより実行速度が速い場合には、前記セカンダリ仮想マシンの実行速度に合わせて、ウェイトを入れながら動作を行なうことができる。
また、前記セカンダリ仮想マシンは、前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が速い場合には、前記プライマリ仮想マシンの実行速度に合わせて、ウェイトを入れながら動作を行なうことができる。
また、前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、それぞれのストレージデバイスの内容を、それぞれの仮想マシンに割り当てられたメモリ上に展開し、ストレージデバイスアクセスをメモリアクセスに置き換えることができる。
このとき、前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、前記メモリアクセスを行なうと、アクセス完了の外部割り込みを待つことなく、それぞれのゲストOSに擬似割り込みを入力することができる。
また、前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、それぞれのストレージデバイスの内容を、それぞれのゲストOSで設定されたRAMディスクに展開し、ストレージデバイスアクセスをRAMディスクに置き換えることができる。
本発明によれば、2台のコンピュータ上に形成された2台の仮想マシンを並列同期動作させるフォールトトレラントシステムにおいて、それぞれのコンピュータのハードウェアの差異を適切に調整することができる。
本実施形態に係るフォールトトレラントシステムの構成を示すブロック図である。 プライマリ仮想マシンとセカンダリ仮想マシンとの並列同期動作の概要について説明するフローチャートである。 分岐回数と実行中断位置とによる擬似割り込み入力位置特定を説明する図である。 CPUアーキテクチャの詳細が判別している場合の擬似割り込みタイミング調整動作の具体的な手順について説明するフローチャートである。 CPUアーキテクチャの詳細が不明の場合の擬似割り込みタイミング調整動作の具体的な手順について説明するフローチャートである。 仮想マシンを利用した従来のフォールトトレラントシステムの構成を示すブロック図である。 同期情報を受信したセカンダリ仮想マシンが、同期タイミング情報に従ってセカンダリゲストOSの実行を中断させる動作を説明するフローチャートである。
本発明の実施の形態について図面を参照して説明する。図1は、本実施形態に係るフォールトトレラントシステムの構成を示すブロック図である。本図に示すように、フォールトトレラントシステム10は、ネットワーク接続されたプライマリマシン100とセカンダリマシン200とを備えている。プライマリマシン100、セカンダリマシン200は、サーバコンピュータ、パーソナルコンピュータ等の汎用的なコンピュータを用いて構成することができる。
プライマリマシン100は、物理的なコンピュータ環境であるプライマリハードウェア110上でプライマリハイパーバイザ120が動作しており、プライマリハイパーバイザ120が動作することにより、プライマリ仮想マシン130が形成されている。プライマリ仮想マシン130では、プライマリゲストOS140が動作しており、プライマリゲストOS140上で、アプリケーション150が実行されている。
プライマリハードウェア110は、CPU111、メモリ112、タイマ113、ネットワークインタフェースカード(NIC)114、ストレージ等の各種デバイス115を備えている。
プライマリ仮想マシン130は、プライマリハードウェア110の一部が割り当てられ、外部との入出力を行なって動作する仮想的なコンピュータ環境である。プライマリ仮想マシン130は、プライマリハイパーバイザ120により管理され、プライマリハイパーバイザ120は、複数個のプライマリ仮想マシン130を管理することができる。
セカンダリマシン200も同様に、物理的なコンピュータ環境であるセカンダリハードウェア210上でセカンダリハイパーバイザ220が動作しており、セカンダリハイパーバイザ220が動作することにより、セカンダリ仮想マシン230が形成されている。セカンダリ仮想マシン230では、セカンダリゲストOS240が動作しており、セカンダリゲストOS240上で、アプリケーション250が実行されている。
セカンダリハードウェア210は、CPU211、メモリ212、タイマ213、ネットワークインタフェースカード(NIC)214、ストレージ等の各種デバイス215を備えている。
セカンダリ仮想マシン230は、セカンダリハードウェア210の一部が割り当てられ、プライマリ仮想マシン130に同期して動作する仮想的なコンピュータ環境である。セカンダリ仮想マシン230は、セカンダリハイパーバイザ220により管理され、セカンダリハイパーバイザ220は、複数個のセカンダリ仮想マシン230を管理することができる。
フォールトトレラントシステム10では、従来と同様に、外部との入出力のやり取りはプライマリ仮想マシン130のみが行ない、プライマリ仮想マシン130が先行して動作を行なうものとする。
本実施形態において、プライマリ仮想マシン130は、擬似割り込み生成部131と同期情報生成部135とを備え、セカンダリ仮想マシン230は、擬似割り込み入力変換部231と同期補正部235とを備えている。
プライマリ仮想マシン130の擬似割り込み生成部131は、プライマリハイパーバイザ120から実際に入力された外部割り込みに対して、割り込みの頻度やタイミングを調整した擬似割り込みを生成して、プライマリゲストOS140に出力する。このため、擬似割り込み生成部131は、割り込みの頻度を調整する割り込み頻度調整部132と、割り込みタイミングを調整する割り込みタイミング調整部133とを備えている。
プライマリ仮想マシン130の同期情報生成部135は、タイミング調整され、プライマリゲストOS140に入力された擬似割り込みのタイミングを、実行中断位置と分岐実行回数とで特定する。このため、同期情報生成部135は、擬似割り込みが入力されるまでのプライマリゲストOS140におけるプログラムの分岐回数をカウントする分岐実行回数生成部136を備えている。
また、同期情報生成部135は、プライマリ仮想マシン130とセカンダリ仮想マシン230の並列同期動作に先立ち、セカンダリ仮想マシン230から動作性能情報を収集する。そして、プライマリハードウェア110とセカンダリハードウェア210とで、ハードウェア構成の差異がある場合等に、速度差を補正するため等の同期補正情報を生成し、セカンダリ仮想マシン230の同期補正部235に伝達する。また、必要に応じてプライマリ仮想マシン130の動作の調整を行なう。
セカンダリ仮想マシン230の擬似割り込み入力変換部231は、プライマリ仮想マシン130から送られた同期情報の同期タイミング情報に従って、セカンダリゲストOS240を擬似割り込み入力位置まで進めて中断させ、擬似割り込みを入力する。擬似割り込み入力変換部231は、セカンダリゲストOS240を擬似割り込み入力位置まで進めて中断させるため、指定分岐回数実行部232と、指定位置コンテキスト切り替え部233とを備えている。
セカンダリ仮想マシン230の同期補正部235は、並列同期動作に先立ち、プライマリ仮想マシン130の同期情報生成部135から伝達された同期補正情報に基づいて、セカンダリ仮想マシンの動作の調整を行なう。また、必要に応じて、並列同期動作時にプライマリ仮想マシン130とセカンダリ仮想マシン230との速度差の調整を行なう。
(並列同期動作の概要)
次に、上記構成のフォールトトレラントシステム10における、プライマリ仮想マシン130とセカンダリ仮想マシン230の実行状態を同期させる並列同期動作の概要について図2のフローチャートを参照して説明する。具体的には、プライマリハイパーバイザ120が、プライマリハードウェア110から外部割り込みを受けた場合の一連の動作について説明する。
プライマリハイパーバイザ120が、プライマリハードウェア110から外部割り込みを受けると(S101)、プライマリ仮想マシン130に外部割り込みの入力を行なう(S102)。
プライマリハイパーバイザ120からの外部割り込みが入力されたプライマリ仮想マシン130は、プライマリゲストOS140に擬似割り込みの入力を行なう。このとき、入力されたすべての外部割り込みに対して擬似割り込みの入力を行なうのではなく、割り込み頻度調整部132が、擬似割り込みの頻度を調整する(S103)。
仮想マシンを利用したフォールトトレラントシステム10では、プライマリゲストOS140に擬似割り込みが入力されると、実行状態を同期させるためにセカンダリゲストOS240にも同じタイミングで擬似割り込みを入力する処理を行なわなくてはならない。このため、プライマリ仮想マシン130で頻繁に擬似割り込みが発生すると実行状態同期のための処理負荷が増え、本来のサービスに割り当てるCPU時間や通信帯域等の資源が減少してしまう。
そこで、本実施形態のフォールトトレラントシステム10では、割り込み頻度調整部132が、擬似割り込みの頻度を調整することで、実行状態同期のための処理負荷等を抑制し、本来のサービスのための処理能力低下を防止するようにしている。割り込み頻度調整部132が行なう割り込み頻度調整動作の詳細については後述する。
割り込み頻度調整部132が擬似割り込みの頻度を調整した結果(S103)、擬似割り込みを行なうと判定した場合(S104:Yes)は、プライマリゲストOS140に擬似割り込みの入力を行なう。擬似割り込みを行なわないと判定した場合(S104:No)は、本処理を終了し、プライマリハイパーバイザ120からの次の外部割り込みの入力を待つ。
プライマリゲストOS140に擬似割り込みの入力を行なう場合は、セカンダリゲストOS240でも確実に同じ位置で中断できるような位置でプライマリゲストOS140を中断させて、擬似割り込みの入力を行なう必要がある。
例えば、外部割り込み等の仮想マシンコンテキスト切り替えイベントにより、プライマリゲストOS140が中断してプライマリ仮想マシン130に制御が移ったときに、プライマリゲストOS140の中断位置がクリティカルセクションである場合が起こり得る。なお、クリティカルセクションは、単一のリソースに対して、複数の処理が同時期に実行されると、破綻をきたす部分であり、プログラムにより、ブレーク命令無効化等の排他制御が行なわれる部分である。
このような場合、その中断位置でプライマリゲストOS140に擬似割り込みを入力すると、クリティカルセクション内であるため、セカンダリゲストOS240では、同じ位置にブレーク命令を埋め込んだとしても、同じ位置で中断することができず、クリティカルセクションを抜け出てから中断する。このため、擬似割り込みの位置がずれてしまい、実行状態の同期がずれてしまう。
そこで、本実施形態のフォールトトレラントシステム10では、割り込みタイミング調整部133が、擬似割り込みタイミングの調整を行ない(S105)、クリティカルセクションを避けてプライマリゲストOS140を中断させることで、セカンダリゲストOS240でも確実に同じ位置で中断できるようにしている。割り込みタイミング調整部133が行なう擬似割り込みタイミング調整動作の詳細については後述する。
擬似割り込みタイミングが調整されると、プライマリ仮想マシン130はプライマリゲストOS140に擬似割り込みの入力を行なう(S106)。そして、同期情報生成部135が同期情報を生成する(S107)。
従来、同期情報は、擬似割り込みの識別情報と同期タイミング情報とを含み、同期タイミング情報は、プログラムカウンタが示す実行中断位置とパフォーマンスカウンタで測定したCPU実行命令数とを含んでいた。
しかしながら、CPU固有の特殊な命令によっては、パフォーマンスカウンタのカウント漏れ等が発生して、プライマリゲストOS140が擬似割り込み入力までに実行したCPU実行命令数を正確にカウントできない場合がある。例えば、Intel社CPUのPentium(登録商標)では、外部割り込みの発生によりREP命令の実行が中断された場合にREP命令の実行がカウントされないため、CPU実行命令数カウンタは実際の実行命令数よりも少なくなる。
このように、CPU実行命令数はカウント値が不正確の場合があるため、本実施形態のフォールトトレラントシステム10は、同期タイミング情報にCPU実行命令数を用いないようにしている。
しかしながら、一般に、プログラムはループ文やジャンプ文、条件分岐文を多く含んでいるため、同じ命令を何度も通過する。このため、実行中断位置だけでは、擬似割り込み入力のタイミングを特定することができない。
そこで、本実施形態のフォールトトレラントシステム10は、同期タイミング情報に実行中断位置と分岐回数とを含めるようにしている。分岐回数は、前回の擬似割り込みから今回の擬似割り込みまでに実行した分岐命令の数であり、命令コードの実行順序が順次実行から変更された回数である。
すなわち、プライマリゲストOS140で、分岐回数をカウントしておけば、セカンダリゲストOS240において、その回数分の分岐の後に最初に通過する実行中断位置を、擬似割り込み入力位置と特定することができる。
例えば、図3(a)に示すように、命令アドレスa1、a2、a3、…に命令コードCodeA、CodeB、CodeC、…が割り当てられており、CodeCからCodeGまでが3回ループされる場合に、プライマリゲストOS140において、プログラム実行順16番目の「a6」で、擬似割り込みが入力されたとする。この同期タイミングは、分岐回数のカウント値「2」、実行中断位置「a6」と表わすことができる。
この場合、セカンダリ仮想マシン230において、分岐回数を2回カウントし、最初の実行中断位置「a6」でセカンダリゲストOS240を中断させることで、プライマリゲストOS140と同じタイミングで擬似割り込みを入力することができる。
このような分岐回数のカウント処理を行なうために、同期情報生成部135は、分岐実行回数生成部136を備えている。命令コードレベルでは、ループ文やジャンプ文、条件分岐文は、すべて分岐命令に置き換えられるため、分岐実行回数生成部136は、実行中のアプリケーション150において、プライマリゲストOS140が実行した分岐命令の数をカウントすることにより分岐回数のカウントを行なうことができる。分岐回数のカウントは、例えば、パフォーマンスカウンタを利用することができる。
図2の説明に戻って、プライマリ仮想マシン130は、擬似割り込みの識別情報と同期タイミング情報とを含んだ同期情報を生成するとセカンダリ仮想マシン230に伝達する(S108)。
同期情報を受信したセカンダリ仮想マシン230は、同期タイミング情報に従ってセカンダリゲストOS240の実行を中断させるために、まず、指定分岐回数実行部232が、セカンダリゲストOS240の実行時に、分岐回数をカウントし、同期タイミング情報の分岐回数が示す値になるとセカンダリゲストOS240を中断させる。すなわち、指定された分岐回数までセカンダリゲストOS240を実行させる(S109)。このため、指定された分岐回数に達するまでは、実行中断位置やCPU実行命令数を監視する必要がなく、処理負荷が軽減する。指定分岐回数実行部232が行なう指定分岐回数実行動作の詳細については後述する。
そして、指定位置コンテキスト切り替え部233が、同期タイミング情報の実行中断位置が示す位置で、セカンダリゲストOS240の実行を中断させる(S110)。
セカンダリゲストOS240の実行を中断させる際に、従来のようにブレーク命令を埋め込んでブレークポイントを設定する手法を用いると、仮想マシン(130、230)上で、ゲストOS(140、240)やアプリケーション(150、250)のデバッグを行なっている場合に、デバッグのブレークポイントと干渉し、相互の処理に悪影響を与えてしまう。同期状態の仮想マシン(130、230)上でアプリケーション(150、250)動作の検証等を行なうニーズもあるため、ブレークポイントの干渉は避けることが望ましい。
また、仮想化支援機能を持っていないCPUの場合は、ブレークポイントの設定でセカンダリゲストOS240からセカンダリ仮想マシン230に処理を遷移することができない。
そこで、本実施形態のフォールトトレラントシステム10では、指定位置コンテキスト切り替え部233が、ブレーク命令を用いずに、コンテキスト切り替えを行なうことにより、セカンダリゲストOS240の実行を中断させるようにしている。指定位置コンテキスト切り替え部233が行なう指定位置コンテキスト切り替え動作の詳細については後述する。
セカンダリ仮想マシン230は、セカンダリゲストOS240を中断させると、同期情報の擬似割り込み識別情報に従って擬似割り込みの設定を行なって、セカンダリゲストOS240を再開させる。これにより、セカンダリゲストOS240に、プライマリゲストOS140と同じタイミングで擬似割り込みが入力され(S111)、プライマリ仮想マシン130とセカンダリ仮想マシン230との実行状態が同期する。
なお、プライマリマシン100、セカンダリマシン200のいずれかでハードウェアの故障が生じると、実行状態の同期が乱れる。本実施形態では、パフォーマンスカウンタのカウント漏れ等の影響を受けずに、正確に実行状態の同期を行なうことができる。このため、ハードウェアが正常であれば、実行状態の同期が乱れることはないので、実行状態の同期の乱れを検出することでハードウェアの故障を発見することができる。
従来は、実行状態の同期の乱れが故障によるものか、実行命令数のカウント漏れの影響によるか判別できないため、出力データの照合が必要であったが、本実施形態のフォールトトレラントシステム10では、実行状態の同期の乱れにより故障を検出することができるため、故障検出のための出力データの照合が不要となる。これにより、出力データの照合のためのCPU処理負荷や通信負荷を削減することができる。また、故障の発生を迅速に検出できる。
なお、実行状態の同期の乱れの検出は、例えば、セカンダリ仮想マシン230の擬似割り込み入力変換部231において、同期タイミング情報で指定された実行中断位置を通過する前に、分岐回数が、同期タイミング情報で指定された回数を超過した場合に同期が乱れたと判定することができる。
(各ブロックの動作の詳細)
次に、フォールトトレラントシステム10の各ブロックの動作について第1実施例、第2実施例、第3実施例により詳細に説明する。
従来のフォールトトレラントシステムは、プライマリマシンのCPUとセカンダリマシンのCPUとが同じアーキテクチャであることを前提としていた。これは、従来の同期合わせの手法が、CPUアーキテクチャやCPU動作仕様に依存しており、CPUの種類が異なれば、双方の実行命令を合わせることができず、同期ずれが発生する場合があったからである。
しかしながら、本発明は、第1実施例、第2実施例で説明するように、プライマリマシン100のCPU111とセカンダリマシン200のCPU211とが同じアーキテクチャのみならず、異なるアーキテクチャの場合でも適用することができる。
一般に、長年に渡ってフォールトトレラントシステムを運用する場合には、故障や経年劣化による機器の交換が余儀なくされるが、この際に、従前の機器と同一仕様の機器を用意することは困難である。このため、本実施形態のフォールトトレラントシステム10は、CPUアーキテクチャが異なる場合であっても、並列同期動作を継続することができる仕組みを備えるようにしている。
<第1実施例>
第1実施例として、プライマリマシン100のCPU111とセカンダリマシン200のCPU211とが同じアーキテクチャの場合の動作について説明する。ここで、CPUアーキテクチャが同じとは、CPU命令セットに互換性があることを意味する。
この場合、プライマリ仮想マシン130とセカンダリ仮想マシン230とは、CPU命令レベルの同期合わせによる並列同期動作を行なう。このため、両仮想マシン(130、230)において、ゲストOS(140、240)とアプリケーション(150、250)のプログラムは、通常どおり、CPU(111、211)に対してネイティブのCPU命令コードにコンパイルされたコード形式を使用する。この並列同期動作を、「CPU命令同期モード」と称するものとする。
(割り込み頻度調整動作)
まず、割り込み頻度調整部132が行なう割り込み頻度調整動作(S103)について説明する。プライマリ仮想マシン130の割り込み頻度調整部132は、すべての外部割り込みに対して擬似割り込みの入力を行なうのではなく、アプリケーション150に要求される性能や精度、許容通信ディレイ等を満たす範囲で、擬似割り込みの頻度を調整する。
一般に、外部割り込みは、タイマ113等による定周期割り込みと、ネットワークインタフェースカード(NIC)114、デバイス115等による非定周期割り込みとに区別することができるが、割り込み頻度調整部132は、頻度の調整を、定周期割り込みと非定周期割り込みとで分けて行なう。
定周期の外部割り込みの場合は、間引きを行なって、定周期の外部割り込み数回に1回の割合で擬似割り込みをプライマリゲストOS140に入力するようにする。
例えば、定周期のタイマ割り込みをプライマリゲストOS140に入力することによって、プライマリゲストOS140は正確な時刻を計時することができるが、アプリケーション150で要求される時刻の精度が高くない場合は、タイマ割り込みの入力を間引いても影響はない。
例えば、プライマリハイパーバイザ120からのタイマ割り込みの周期が1ms、アプリケーション150で要求される時刻の精度が100msの場合、擬似割り込みの周期を10msに間引いても100msの精度を維持することができる。このとき、擬似割り込みの頻度は1/10に減少するため、実行状態の同期処理も1/10に減少する。
なお、アプリケーション150の要求精度に応じて、予め間引く割合を設定しておいてもよいし、パラメータで調整できるようにしてもよい。また、定周期の外部割り込みに対して一律に間引く割合を設定してもよいし、定周期の外部割り込みの要因ごとに間引く割合を設定してもよい。
非定周期の外部割り込みの場合は、処理途中に入力される外部割り込みに対する擬似割り込みを省き、処理が完了した最後の外部割り込みのみを擬似割り込みとしてプライマリゲストOS140に入力する。
例えば、NIC114からのネットワークの受信割り込みは、NIC114にデータが到着する度に発生する。このため、データとして意味のある単位を受信する間に、複数回の外部割り込みが発生する。従来は、外部割り込みの発生ごとにプライマリゲストOS140に擬似割り込みを行なって、NIC114からプライマリゲストOS140に受信データを渡していたが、割り込み頻度調整部132は、データ受信途中の外部割り込みに対する擬似割り込みを省き、データ受信完了後の1回の外部割り込みに対して擬似割り込みをプライマリゲストOS140に入力する。これにより、実行状態の同期処理の回数が減少するとともに、まとまったサイズのデータを1度に処理することが可能となる。
なお、本手法を適用できる非定周期の外部割り込みとしては、ネットワークの送受信割り込み、ストレージの読み書き割り込み、シリアル通信の送受信割り込み、アナログ/デジタル入出力ボード等の各種I/Oデバイスの読み書き割り込み等が挙げられる。
(擬似割り込みタイミング調整動作)
次に、割り込みタイミング調整部133が行なう擬似割り込みタイミング調整動作(S105)について説明する。擬似割り込みタイミング調整は、セカンダリゲストOS240が同じ位置で中断できるように、プライマリゲストOS140のクリティカルセクションを避けて擬似割り込みを入力するための調整である。
擬似割り込みタイミング調整動作は、CPUアーキテクチャの詳細が判別している場合と、CPUアーキテクチャの詳細が不明の場合とで処理が異なる。なお、CPUアーキテクチャの詳細が判別している場合とは、中断位置のCPU命令や状態フラグ等から、中断位置がクリティカルセクションかどうかを判別できる場合をいう。
まず、CPUアーキテクチャの詳細が判別している場合の具体的な動作手順について、図4のフローチャートを参照して説明する。
プライマリ仮想マシン130は、プライマリハイパーバイザ120から外部割り込みの入力を受けると(S201)、プライマリゲストOS140の実行の中断を待つ(S202)。
プライマリゲストOS140の実行が中断し、プライマリ仮想マシン130に処理が遷移すると、プライマリ仮想マシン130は、プライマリ仮想マシン130の状態を取得する(S203)。取得する状態は、クリティカルセクションかどうかを判別するための情報であり、例えば、CPU111の割り込みマスクの設定情報、フラグレジスタの内容等である。
そして、取得した情報を元に、中断位置がクリティカルセクションかどうかを判断する(S204)。例えば、割り込みマスクで割り込みの入力が禁止されていないこと、ブレーク命令の設定を無効化するフラグがフラグレジスタに設定されていないこと等で、中断位置がクリティカルセクションでないと判断することができる。
中断位置がクリティカルセクションでない場合(S204:No)は、中断位置を擬似割り込みの入力タイミングに設定する(S205)。
中断位置がクリティカルセクションの場合(S204:Yes)は、プライマリ仮想マシン130の状態を確認しながらプライマリゲストOS140の実行を進める(S206)。このとき、例えば、ステップ実行を行なうことで、1命令ごとに状態を確認する(S203)。そして、クリティカルセクションかどうかを判断し(S204)、クリティカルセクションを抜け出すと(S204:No)、擬似割り込みの入力タイミングに設定する(S205)。
次に、CPUアーキテクチャの詳細が不明の場合の具体的な動作手順について、図5のフローチャートを参照して説明する。CPUアーキテクチャの詳細が不明の場合、プライマリ仮想マシン130の状態を取得しても、クリティカルセクションかどうかを判別できないため、中断のためのイベントを設定し、実際に中断できた位置を、擬似割り込みを入力する中断位置とする。
プライマリ仮想マシン130は、プライマリハイパーバイザ120から外部割り込みの入力を受けたら(S301)、プライマリゲストOS140の実行の中断を待つ(S302)。
プライマリゲストOS140の実行が中断し、プライマリ仮想マシン130に処理が遷移すると、プライマリ仮想マシン130は、プライマリゲストOS140に、所定命令数実行後、例えば、1命令実行後に中断する旨のイベントの設定を行なう(S303)。
そして、ステップ実行でプライマリゲストOS140の実行を再開し(S304)、1命令実行ごとに中断の要因を取得する(S305)。これは、中断の要因が、必ずしも設定した中断イベントによるものとは限られないからである。
中断の要因が、設定した中断イベントによるものの場合(S306:Yes)は、中断位置がクリティカルセクションではなく、セカンダリゲストOS240でも同じ位置で中断できるものと判断し、擬似割り込みの入力タイミングに設定する(S307)。
中断の要因が、設定した中断イベントによるものでない場合(S306:No)は、中断位置がクリティカルセクションであり、セカンダリゲストOS240では同じ位置で中断できないものと判断し、再度、1命令実行後に中断する旨のイベントの設定を行なって(S303)、プライマリゲストOS140の実行再開(S304)以降の処理を繰り返し、クリティカルセクションを抜け出すと(S306:Yes)、擬似割り込みの入力タイミングに設定する(S307)。
(同期情報生成動作)
次に、同期情報生成部135が行なう同期情報の生成動作(S107)について説明する。プライマリマシン100のCPU111とセカンダリマシン200のCPU211とが同じアーキテクチャの場合、同期情報の同期タイミング情報における実行中断位置は、CPU命令コードの実行停止位置で示され、プログラムカウンタ値を用いることができる。
また、同期タイミング情報における分岐実行回数は、前回の同期タイミング情報生成時からプライマリゲストOS140で実行された分岐回数で示される。分岐回数は、CPU命令コードレベルで実行した分岐命令をカウントすることで得ることができる。
(指定分岐回数実行動作)
次に、指定分岐回数実行部232が行なう指定分岐回数実行動作(S109)について説明する。指定分岐回数実行動作は、セカンダリ仮想マシン230が、同期タイミング情報の分岐回数で示された回数でセカンダリゲストOS240を中断させる動作である。
指定分岐回数実行部232は、CPU命令コードレベルで実行した分岐命令をカウントし、カウント値が指定された分岐回数に達すると、その旨をセカンダリ仮想マシン230に通知する。これにより、セカンダリ仮想マシン230にコンテキストが切り替えられ、セカンダリゲストOS240の実行が中断する。
なお、CPU211のパイプライン機能等の高速化により、指定された分岐回数の実行直後に停止できないCPUアーキテクチャの場合には、指定された分岐回数より少ない値に設定し、指定された分岐回数で確実に中断できるようにする。
(指定位置コンテキスト切り替え動作)
次に、指定位置コンテキスト切り替え部233が行なう指定位置コンテキスト切り替え動作(S110)について説明する。指定位置コンテキスト切り替え動作は、セカンダリゲストOS240を指定分岐回数で中断した後、指定された実行中断位置で、ブレーク命令を用いずに、セカンダリ仮想マシン230にコンテキストを切り替える動作である。
セカンダリ仮想マシン230に専用のコンテキスト切り替え命令が用意されている場合は、セカンダリゲストOS240の実行中断位置に、コンテキスト切り替え命令を埋め込むようにする。コンテキスト切り替え命令は、例えば、Intel社CPUのVMCALL命令である。
セカンダリゲストOS240が、コンテキスト切り替え命令を実行すると、コンテキストがセカンダリゲストOS240からセカンダリ仮想マシン230に切り替わり、セカンダリゲストOS240の実行が中断される。
専用のコンテキスト切り替え命令が用意されていない場合は、実行中断位置で擬似割り込みやCPU例外のイベントを発生させてコンテキスト切り替えが行なわれるように設定する。コンテキスト切り替えが行なわれると、コンテキストがセカンダリゲストOS240からセカンダリ仮想マシン230に切り替わり、セカンダリゲストOS240の実行が中断される。
いずれの場合も、セカンダリゲストOS240の実行が中断されると、セカンダリ仮想マシン230は、擬似割り込みの設定をして、セカンダリゲストOS240の実行を再開させ、そのタイミングで擬似割り込みがセカンダリゲストOS240に入力される。
<第2実施例>
第2実施例として、プライマリマシン100のCPU111とセカンダリマシン200のCPU211とが異なるアーキテクチャの場合の動作について説明する。ここで、CPUアーキテクチャが同じとは、CPU命令セットに互換性がないことを意味する。
この場合、プライマリ仮想マシン130とセカンダリ仮想マシン230とは、中間言語レベルの同期合わせによる並列同期動作を行なう。ここで、「中間言語」は、「中間コード」、「バイトコード」等とも称され、高水準言語のソースコードと機械語のコードの中間にあたる中間表現の言語である。この並列同期動作を「中間言語同期モード」と称するものとする。
両仮想マシン(130、230)間で、CPU命令セットの互換性がないため、ゲストOS(140、240)とアプリケーション(150、250)のプログラムは、ネイティブのCPU命令コードの代わりに、Java(登録商標)やC#等を変換した中間言語のプログラムを使用する。
両仮想マシン(130、230)は、インタープリタやJITコンパイラ等の既存のCPU命令変換手法を用いて、中間言語を仮想マシンCPUに対してネイティブのCPU命令に変換して実行する。
なお、プライマリマシン100のCPU111とセカンダリマシン200のCPU211とが同じアーキテクチャの場合も、中間言語同期モードによる並列同期動作を行なうことができるが、CPU命令同期モードによる並列同期動作の方が、実行速度が速くなる。
次に、第2実施例における各ブロックの動作について説明するが、大部分は第1実施例のCPU命令同期モードと同様であるため、第1実施例と異なる処理についてのみ説明する。
(擬似割り込みタイミング調整動作)
第1実施例のCPU命令同期モードにおいて、擬似割り込みタイミング調整動作(S105)は、CPUアーキテクチャの詳細が判別している場合と、CPUアーキテクチャの詳細が不明の場合とで処理が異なっていたが、第2実施例の中間言語同期モードでは、CPUアーキテクチャの詳細が判別している場合と同じ処理を行なう。
すなわち、中断位置のCPU命令や状態フラグ等から、中断位置がクリティカルセクションかどうかを判別できるため、図4に示したフローチャートに従って、クリティカルセクションを避けてプライマリゲストOS140の中断位置を設定し、擬似割り込みを入力する。
また、中間言語同期モードでは、中断位置のCPU命令や状態フラグに加え、中間言語レベルでクリティカルセクションかどうかを判断することができる。例えば、中間言語がJava(登録商標)のバイトコードの場合は、クリティカルセクションはsynchronizedの排他制御を使って実装することが想定される。このため、実行済みの中間言語の命令を確認することで、プライマリ仮想マシン130は、中断したJava(登録商標)の中間言語がクリティカルセクションにいるかを把握できる。
(同期情報の生成動作)
第1実施例のCPU命令同期モードでは、同期情報の生成動作(S107)において、同期タイミング情報に含まれる実行中断位置は、CPU命令コードの実行停止位置で示し、プログラムカウンタ値を用いた。また、同期タイミング情報に含まれる分岐実行回数は、前回の同期タイミング情報生成時から実行されたCPU命令コードの分岐回数で示した。
これに対し、第2実施例の中間言語同期モードでは、実行中断位置は、擬似割り込みを入力した時点で実行した中間言語レベルの実行命令位置を用いる。また、分岐実行回数は、前回の同期タイミング情報生成時から実行された中間言語レベルの分岐回数を用いる。
(指定位置コンテキスト切り替え動作)
第1実施例のCPU命令同期モードでは、指定位置コンテキスト切り替え動作(S110)において、セカンダリ仮想マシン230に専用のコンテキスト切り替え命令が用意されている場合は、セカンダリゲストOS240の実行中断位置に、コンテキスト切り替え命令を埋め込み、専用のコンテキスト切り替え命令が用意されていない場合は、実行中断位置で擬似割り込みやCPU例外のイベントを発生させてコンテキスト切り替えが行なわれるように設定した。第2実施例の中間言語同期モードでも、中間言語レベルの実行中断位置で、CPU命令変換により同様の設定を行なう。
<第3実施例>
次に、第3実施例として、プライマリマシン100とセカンダリマシン200とのハードウェア構成に相違がある場合の並列同期動作について説明する。プライマリマシン100のプライマリハードウェア110とセカンダリマシン200のセカンダリハードウェア210は、CPU(111、211)、メモリ(112、212)、ストレージ等のデバイス(115、215)等、種々のハードウェアで構成されているが、双方のハードウェアの機能や性能は必ずしも一致するわけではない。
例えば、CPU(111、211)のスペックが異なっていたり、メモリ(112、212)の容量が異なっている場合も想定される。また、フォールトトレラントシステム10の運用過程においてデバイス215が交換される等により、双方のデバイス(115、215)が異なっている場合もある。
このため、プライマリ仮想マシン130とセカンダリ仮想マシン230とで、動作は同じだが、処理速度に差が生じる場合がある。上述のように、フォールトトレラントシステム10は、プライマリ仮想マシン130が先行して動作を行なうようにしているが、例えば、セカンダリ仮想マシン230の方が、処理速度が速いと、動作の逆転現象が生じ、プライマリ仮想マシン130からの同期情報に基づく実行状態の同期が行なえなくなる。プライマリ仮想マシン130の方が、処理速度が速いと、セカンダリ仮想マシン230の遅れが蓄積されていく。
また、異なるデバイス(115、215)により、プライマリゲストOS140とセカンダリゲストOS240のドライバ処理が異なって、動作に相違が生じる結果、同期ずれが生じるおそれがある。
そこで、フォールトトレラントシステム10では、プライマリハードウェア110とセカンダリハードウェア210との差異に基づく処理速度差や同期ずれを補正する仕組みを設けている。具体的には、プライマリ仮想マシン130の同期情報生成部135とセカンダリ仮想マシン230の同期補正部235とが同期補正動作を行なう。同期補正動作は、並列同期動作実行前の同期補正動作と、並列同期動作実行時の同期補正動作とに分けることができる。
(並列同期動作実行前の同期補正動作)
プライマリ仮想マシン130の同期情報生成部135は、プライマリ仮想マシン130とセカンダリ仮想マシン230の並列同期動作に先立ち、セカンダリ仮想マシン230からセカンダリ仮想マシン230に関する動作性能情報を収集する。
動作性能情報は、セカンダリ仮想マシン230におけるセカンダリゲストOS240に対するインタフェースの動作仕様や、セカンダリ仮想マシン230のプログラム実行速度の指標となるベンチマーク情報等を含んだ情報である。同期情報生成部135は、使用可能な範囲で複数項目の動作性能情報を取得するようにする。
同期情報生成部135は、プライマリ仮想マシン130自身の動作性能情報も取得して、セカンダリ仮想マシン230の動作性能情報と対照する。そして、プライマリ仮想マシン130の並列同期動作における動作能力と、セカンダリ仮想マシン230の並列同期動作における動作能力とがほぼ等しくなるように、プライマリ仮想マシン130とセカンダリ仮想マシン230が使用する動作能力を設定する。
動作能力は、例えば、動作周波数、メモリサイズ、キャッシュサイズ、TLB(Translation Look-aside Buffer)/EPT(Enhanced Page Table)仕様等の動作仕様、MIPS値やSPEC値等のベンチマーク情報である。中間言語同期モードの場合は、中間言語のベンチマーク値を利用することができる。例えば、中間言語としてJava(登録商標)のバイトコードを用いた場合は、ベンチマーク値としてSPECjbb、CaffeineMark等が挙げられる。
そして、セカンダリ仮想マシン230が使用する動作能力を同期補正情報としてセカンダリ仮想マシン230の同期補正部235に通知する。セカンダリ仮想マシン230の同期補正部235は、通知された同期補正情報に従って、並列動作実行時におけるセカンダリ仮想マシン230の動作能力を設定する。
動作周波数の調整による同期補正を例に説明する。なお、上述のように、プライマリマシン100とセカンダリマシン200とのハードウェア構成に相違があるときは、動作は同じだが、処理速度に差が生じる場合と、動作自体が異なる場合とがある。本例は、動作は同じだが、処理速度に差が生じる場合の同期補正の説明である。
仮想マシン(130、230)の動作周波数の調整には、省電力のために用意された電力制御機能を利用することができる。例えば、標準の電力制御機能にはACPI(Advanced Configuration and Power Interface)を使用し、動作周波数を変更する機能には、Linux(登録商標)のcpfreqサブシステム等を使用することができる。この機能を利用して、双方の仮想マシン(130、230)は、使用可能な動作周波数を複数個用意しておく。
そして、プライマリ仮想マシン130の同期情報生成部135は、セカンダリ仮想マシン230で使用可能な動作周波数の一覧をセカンダリ仮想マシン230から取得するとともに、プライマリ仮想マシン130自身で使用可能な動作周波数の一覧を取得して、両者がほぼ一致する動作周波数を選択する。選択した動作周波数はセカンダリ仮想マシン230の同期補正部235に同期補正情報として通知する。
プライマリ仮想マシン130とセカンダリ仮想マシン230の並列同期動作時には、それぞれの仮想マシン(130、230)は、選択された動作周波数で動作するようにすることで、プライマリハードウェア110とセカンダリハードウェア210との動作周波数の差異に基づく処理速度差が解消される。
なお、プライマリ仮想マシン130の使用可能な動作周波数と、セカンダリ仮想マシン230の使用可能な動作周波数とが一致しない場合は、例えば、セカンダリ仮想マシン230の方を速い動作周波数とし、後述するように、セカンダリ仮想マシン230の動作にウェイトを入れるようにすることができる。
中間言語同期モードの場合は、ベンチマーク値の違いによりプライマリ仮想マシン130とセカンダリ仮想マシン230の処理時間に差が生じる。従って、取得した双方のベンチマーク値に基づいて、動作周波数と同様の調整を行なうことによって処理速度差を補正する。
次に、ハードウェア構成の相違により、プライマリ仮想マシン130とセカンダリ仮想マシン230とで動作自体が異なる場合の同期補正について説明する。
例えば、CPUアーキテクチャが同じでもデバイス115等の動作仕様が異なる場合には、双方のゲストOS(140、240)が同じドライバ処理を実行するように変更することで、双方のゲストOS(140、240)が同じ動作を行ない、同期ずれを防ぐことができる。具体的には、並列同期動作の開始前に、プライマリ仮想マシン130またはセカンダリ仮想マシン230のデバイスエミュレータに動作仕様の違いを吸収する機能を組み込むようにする。
この機能は、補正の対象によって下記の2種類に分類できる。
(1)ハードウェア機能の有無の違いに対する補正
あるハードウェア機能を一方の仮想マシン(130、230)だけが持っている場合は、機能を持っている方の仮想マシン(130、230)がその機能を利用しないようにし、双方の仮想マシン(130、230)がそのハードウェア機能を持たない状態で動作する。
例えば、FPU(浮動小数点演算装置)機能の有無が異なる場合、双方の仮想マシン(130、230)ともFPU機能を持たない状態で動作させる。このとき浮動小数点演算はゲストOS(140、240)内のエミュレーションコードで実行される。具体的には、浮動小数点演算実行時に例外が発生し、ゲストOS(140、240)の例外ハンドラがこの例外を捕捉してソフトウェアで演算をエミュレートする。
あるいは、機能を持っていない方の仮想マシン(130、230)が、その機能をゲストOS(140、240)の外部でソフトウェアの処理によってエミュレートすることにより、違いを吸収するようにしてもよい。ゲストOS(140、240)の外部とは、仮想マシン(130、230)やハイパーバイザ(120、220)などである。
例えば、FPU機能を持っていない方の仮想マシン(130、230)が、仮想マシン(130、230)内のエミュレーションコードで浮動小数点演算を実行する。具体的には、浮動小数点演算実行時に発生する例外によって仮想マシンコンテキストへの切り替えを行ない、仮想マシン(130、230)内のソフトウェアで演算をエミュレートした後、ゲストOSコンテキストに戻る。ゲストOS(140、240)の中では例外を捕捉しないため、ゲストOS(140、240)内のエミュレーションコードは実行されない。
(2)ハードウェア機能の能力や容量の違いに対する補正
ハードウェア機能の能力や容量が異なる場合は、動作に相違が生じる処理をゲストOS(140、240)の外部で実行する。ゲストOS(140、240)の外部とは、仮想マシン(130、230)やハイパーバイザ(120、220)、ハードウェア(110、210)などである。
例えば、TLBのキャッシュサイズが異なる場合、一方の仮想マシン(130、230)のみがキャッシュにヒットせず、TLBミスが発生する場合がある。そこで、TLBミスに対するリカバリー処理を、ゲストOS(140、240)の外部で実行する。Intel社CPUの場合は、ハードウェアの機能でリカバリー処理を行なうことができるが、CPU(111、211)にハードウェアのリカバリー機能がない場合は、仮想マシン(130、230)やハイパーバイザ(120、220)のソフトウェアでリカバリー処理を行なう。
中間言語同期モードの場合は、中間言語で表現されたゲストOSプログラムを仮想マシン(130、230)が仮想メモリ上でインタープリタなどのソフトウェア機能を使って実行する。このため、動作仕様の違いによってゲストOS(140、240)の動作に相違が生じることはない。
(並列同期動作実行時の同期補正動作)
並列同期動作の開始前の調整によってもプライマリ仮想マシン130とセカンダリ仮想マシン230の処理速度差が解消しきれない場合には、同期情報生成部135、同期補正部235は、並列同期動作時に、以下のような同期補正を行なう。
まず、動作能力調整後のプライマリ仮想マシン130が動作能力調整後のセカンダリ仮想マシン230よりも高速である場合の同期補正について説明する。
同期情報生成部135は、セカンダリ仮想マシン230に通知する同期補正情報の動作速度情報として、プライマリ仮想マシン130の動作能力とするか、セカンダリ仮想マシン230の動作能力とするかを選択する。この選択は、例えば、パラメータ設定に基づいて行なうことができる。
プライマリ仮想マシン130の動作能力とした場合は、プライマリ仮想マシン130の先行動作が拡大していくため、セカンダリ仮想マシン230の遅れを解消するための処理を行なう。このとき、セカンダリ仮想マシン230の遅れが想定される量よりも大きい場合に、マシンの故障が発生したと検出するようにしてもよい。
ここでは、遅れを解消するための処理として、2つの補正方法を説明する。まず、第1の補正方法である遅れをリセットして再同期する方法について説明する。
セカンダリ仮想マシン230の同期補正部235は、セカンダリ仮想マシン230のプログラムの実行速度の実測遅延時間が、同期補正情報から得られる想定遅延時間と等しいか確認する。
ここで、実測遅延時間について説明する。セカンダリ仮想マシン230は、プライマリ仮想マシン130から、タイマによる定周期疑似割り込みの同期タイミング情報が伝達されるが、この同期タイミング情報は、プライマリ仮想マシン130の実行速度で実行命令数に換算した周期時間のことであり、セカンダリ仮想マシン230にとっては理論値である。一方、セカンダリ仮想マシン230にタイマによる定周期割り込みを発生させた時の周期時間は、実測値である。実測値から理論値を引いた値が実測遅延時間である。
例えば、プライマリ仮想マシン130で実際に発生させたタイマ割り込みの周期値が10msのとき、セカンダリ仮想マシン230では、プライマリ仮想マシン130と同じ動作を行なった後に擬似割り込みを入力すると、セカンダリ仮想マシン230でのタイマ割り込みの周期の実測値が15msであったとする。この場合、理論値が10ms、実測値が15msとなるため、タイマ割り込みは5msの遅れと算出される。
実測遅延時間が、同期補正情報から得られる想定遅延時間と同程度であれば、正常な遅れと判断し、処理を継続する。処理を継続することにより、実測遅延時間は積算されるため、許容範囲となる遅延許容時間を予め定めておき、実測遅延時間が遅延許容時間を超えた時点で、並列同期動作の開始時と同じ同期初期化処理を再度行なって、遅れをリセットする。
例えば、プライマリ仮想マシン130のプログラム実行速度が1500MIPS(Million Instructions Per Second)、セカンダリ仮想マシン230のプログラム実行速度が1000MIPSの場合、セカンダリ仮想マシン230では、1秒ごとに500MI(5億命令数)を処理する時間分の遅延が発生していれば、正常の遅れと判断する。また、10秒間継続して蓄積された5000MI(50億命令数)を処理する時間は、セカンダリ仮想マシン230では、5秒間に相当し、遅延許容時間を超えた場合には、再同期して遅れをリセットする。
次に、第2の補正方法である時間を進めて遅れを取り戻す方法について説明する。これは、プライマリゲストOS140がアイドル状態になり、次の擬似割り込みが入力されるまで動作が停止している場合、つまり、CPU処理の負荷が100%より小さい場合は、セカンダリゲストOS240が再開する時間を進めることで遅れを取り戻す。
プライマリゲストOS140のアイドル状態とは、実行する処理がなく、プライマリゲストOS140の動作が停止している状態である。プライマリゲストOS140は、擬似割り込みが入力されて割り込みハンドラ処理を実行するまでは動作を再開しない。それまでは、プライマリ仮想マシン130が外部割り込みの入力を待っている状態である。
プライマリ仮想マシン130では、実際に外部割り込みが入力されるまで待ち続け、セカンダリ仮想マシン230では、擬似割り込みを入力するために同期情報を受信するまで待ち続ける。
セカンダリ仮想マシン230が遅れている場合は、同期情報が溜まっているため、次に入力する擬似割り込みを知ることができる。そのため、セカンダリ仮想マシン230は、プライマリ仮想マシン130と同じ時間待つ必要はなく、セカンダリゲストOS240が再開する時間を進めて擬似割り込みを入力することができる。
例えば、第1の補正方法と同様に、プライマリ仮想マシン130のプログラム実行速度を1500MIPS、セカンダリ仮想マシン230のプログラム実行速度を1000MIPSとする。プライマリゲストOS140のCPU負荷が20%の場合、1秒間に300MIの処理を行ない、1秒間の残りの時間だけプライマリ仮想マシン130を停止させる。プライマリ仮想マシン130の停止時間は、プライマリ仮想マシン130が、1200MIの処理を行なう時間分である。
一方、セカンダリ仮想マシン230は、1秒間にプライマリ仮想マシン130と同じ300MIの処理を行なった後に、プライマリ仮想マシン130と同じ1200MIの処理を行なう時間分停止するのではなく、1秒間の残りの時間、つまり、セカンダリ仮想マシン230が700MIの処理を行なう時間分停止する。このように、セカンダリ仮想マシンの停止時間を1200MIから700MI処理時間分に短縮することにより、セカンダリ仮想マシン230の遅れを取り戻すことが可能となる。
次に、プライマリ仮想マシン130がセカンダリ仮想マシン230よりも高速である場合に、セカンダリ仮想マシン230に通知する同期補正情報の動作速度情報として、セカンダリ仮想マシン230の動作能力とした場合について説明する。
この場合、プライマリ仮想マシン130がセカンダリ仮想マシン230の動作能力で動作するため、並列同期動作時に、プライマリ仮想マシン130の同期情報生成部135は、同期補正処理を行ない、プログラム実行速度を調整する。具体的には、セカンダリ仮想マシン230のプログラム実行速度に合わせて、ウェイトを入れながら動作を行なう。
次に、動作能力調整後のセカンダリ仮想マシン230が動作能力調整後のプライマリ仮想マシン130よりも高速である場合の同期補正について説明する。同期情報生成部135は、セカンダリ仮想マシン230に通知する同期補正情報の動作速度情報を、プライマリ仮想マシン130の動作能力とする。
そして、プライマリ仮想マシン130は、並列同期動作時には、同期補正処理を行なわず、セカンダリ仮想マシン230側で、プライマリ仮想マシン130のプログラム実行速度に合わせて、ウェイトを入れながら動作させる。
例えば、プライマリ仮想マシン130のプログラム実行速度が1000MIPS、セカンダリ仮想マシン230の実行速度が1500MIPSの場合、セカンダリ仮想マシン230は、定周期の擬似割り込みごとに、1000MIの処理を行なった後で、500MIの処理をする時間分のウェイトを入れる。これにより、双方の仮想マシン(130、230)は、等しく1000MIPSの処理を行なうことができる。
(アクセス時間が不確定なストレージデバイスに対する対応)
仮想マシン(130、230)から磁気ディスク、SSD、CD、DVD、テープ等のストレージデバイス(115、215)にアクセスを行なう場合、ストレージデバイス(115、215)の個体差や経年劣化等によりアクセス要求に対する完了待ち時間にばらつきが生じる。このばらつきによる同期ずれを防ぐためには、遅い方の完了待ち時間に合わせる必要があり、同期待ちが発生して実行速度の低下を招くことになる。
本実施形態のフォールトトレラントシステム10では、デバイス(115、215)がストレージデバイスの場合、仮想マシン(130、230)が、デバイス(115、215)をメモリ上にエミュレーションして、デバイス(115、215)へのアクセスをメモリアクセスに置き換えることにより、デバイス(115、215)への読み書き要求に対する完了の待ち時間をゼロにすることができる。
この場合、デバイス(115、215)への読み書き要求に対する完了割り込みは、実際の完了割り込みを待つ必要はなく、要求時のメモリアクセスと同時に擬似割り込みをゲストOS(240、240)に入力することによって、読み書き要求と完了擬似割り込みを共通の同期タイミングで処理することができる。これにより、完了割り込みによる擬似割り込みの同期処理が不要となり、処理負荷が軽減されるとともに、同期待ちによる実行速度の低下を防ぐことができる。
メモリ上にエミュレーションしたデバイス(115、215)の内容の変更は、ゲストOS(140、240)からのアクセスとは非同期にデバイス(115、215)に反映する。対応方法は、メモリを用意する場所によって処理が異なる。
(1)仮想マシン(130、230)内のメモリを使用する場合
仮想マシン(130、230)は、ストレージデバイス(115、215)の内容を仮想マシン(130、230)に割り当てられたメモリ上に展開し、ストレージへのアクセスをメモリアクセスに置き換える。このメモリを「仮想ストレージ」と称する。仮想ストレージの内容が更新された場合は、ゲストOS(140、240)からのアクセスとは非同期にストレージデバイス(115、215)に反映させる。
具体的には、以下の手順によりデータの読み込み、書き込みを行なう。まず、仮想ストレージの初期化として、ストレージデバイス(115、215)の内容を仮想マシン(130、230)に割り当てられたメモリ上に展開しておく。
データの読み込みの場合は、ゲストOS(140、240)が仮想ストレージにデータ読み込みを要求すると、仮想マシン(130、230)が、仮想ストレージ上の内容をゲストOS(140、240)に通知するとともに、読み込み完了の擬似割り込みをゲストOS(140、240)に入力する。
データの書き込みの場合は、ゲストOS(140、240)が仮想ストレージにデータ書き込みを要求すると、仮想マシン(130、230)が、仮想ストレージにデータを書き込むとともに、書き込み完了の擬似割り込みをゲストOS(140、240)に入力する。そして、仮想マシン(130、230)は、仮想ストレージの変更箇所を、非同期でストレージデバイス(115、215)に書き込む。ストレージデバイス(115、215)への書き込み完了後、完了の外部割り込みが仮想マシン(130、230)に入力されるが、この完了の外部割り込みに基づく擬似割り込みは行なう必要がない。
(2)ゲストOS(140、230)内のメモリを使用する場合
ゲストOS(140、230)がRAMディスクを利用できる場合は、ストレージデバイス(115、215)のエミュレーションにゲストOS(140、230)で設定されたRAMディスクを使用する。RAMディスクとは、読み書きに対する待ち時間がゼロであり、完了割り込みが発生しないデバイスである。例えば、Linux(登録商標)などのOSでRAMディスクを利用できる。
上述の仮想ストレージへの読み書きはゲストOS(140、230)内のRAMディスクに対して行なわれ、仮想マシン(130、230)に対して読み書きの要求は行なわれない。ゲストOS(140、230)の内部で処理が完結しているため、読み書き要求や完了割り込みに対する同期処理が不要となる。
具体的には、以下の手順によりRAMディスクに対するデータの読み込み、書き込みを行なう。まず、RAMディスクの初期化として、ストレージデバイス(115、215)の内容をゲストOS(140、230)のメモリに展開しておく。
データの読み込みの場合は、ゲストOS(140、230)がRAMディスクにデータ読み込みを要求すると、RAMディスク上のストレージデバイス(115、215)の内容がゲストOS(140、230)に通知される。読み込み完了の擬似割り込みは不要である。
データの書き込みの場合は、ゲストOS(140、230)がRAMディスクにデータ書き込みを要求すると、RAMディスクにデータが書き込まれる。書き込み完了の擬似割り込みは不要である。そして、RAMディスクの内容を定期的にストレージデバイス(115、215)に保存するようにする。
10…フォールトトレラントシステム、60…フォールトトレラントシステム、100…プライマリマシン、110…プライマリハードウェア、111…CPU、112…メモリ、113…タイマ、114…NIC、115…デバイス、120…プライマリハイパーバイザ、130…プライマリ仮想マシン、131…擬似割り込み生成部、132…割り込み頻度調整部、133…割り込みタイミング調整部、135…同期情報生成部、136…分岐実行回数生成部、140…プライマリゲストOS、150…アプリケーション、200…セカンダリマシン、210…セカンダリハードウェア、211…CPU、212…メモリ、213…タイマ、214…NIC、215…デバイス、220…セカンダリハイパーバイザ、230…セカンダリ仮想マシン、231…擬似割り込み入力変換部、232…指定分岐回数実行部、233…指定位置コンテキスト切り替え部、235…同期補正部、240…セカンダリゲストOS、250…アプリケーション、600…プライマリマシン、610…プライマリハードウェア、620…プライマリハイパーバイザ、630…プライマリ仮想マシン、640…プライマリゲストOS、650…アプリケーション、700…セカンダリマシン、710…セカンダリハードウェア、720…セカンダリハイパーバイザ、730…セカンダリ仮想マシン、731…出力データ照合部、740…セカンダリゲストOS、750…アプリケーション

Claims (15)

  1. プラマリハイパーバイザが稼働するプライマリマシン上に形成され、前記プラマリハイパーバイザからの外部割り込みに基づく擬似割り込みをプラマリゲストOSに入力するプライマリ仮想マシンと、
    セカンダリハイパーバイザが稼働するセカンダリマシン上に形成され、前記プライマリ仮想マシンから伝達された前記擬似割り込みのタイミング情報に基づいて、擬似割り込みをセカンダリゲストOSに入力するセカンダリ仮想マシンと、を備えたフォールトトレラントシステムであって、
    前記プライマリ仮想マシンは、
    前記セカンダリ仮想マシンから、動作性能情報を収集し、前記プライマリ仮想マシンの動作能力と、前記セカンダリ仮想マシンの動作能力が等しくなるように、前記プライマリ仮想マシンの動作能力と前記セカンダリ仮想マシンの動作能力とを設定することを特徴とするフォールトトレラントシステム。
  2. 前記プライマリ仮想マシンは、
    設定した前記セカンダリ仮想マシンの動作能力を前記セカンダリ仮想マシンに通知し、
    前記セカンダリ仮想マシンは、
    通知された動作能力に従って動作を行なうことを特徴とする請求項1に記載のフォールトトレラントシステム。
  3. 前記動作能力は、動作周波数を含み、
    前記プライマリ仮想マシンは、
    前記プライマリ仮想マシンが使用可能な動作周波数と、前記セカンダリ仮想マシンが使用可能な動作周波数とを収集して、前記プライマリ仮想マシンの動作周波数と、前記セカンダリ仮想マシンの動作周波数とを設定することを特徴とする請求項1または2に記載のフォールトトレラントシステム。
  4. 前記プライマリ仮想マシンは、
    前記プライマリ仮想マシンが使用するデバイスの動作仕様と、前記セカンダリ仮想マシンが使用するデバイスの動作仕様とが異なる場合に、
    前記プライマリ仮想マシンが使用するデバイスに対する処理が、前記セカンダリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートすることを特徴とする請求項1〜3のいずれか1項に記載のフォールトトレラントシステム。
  5. 前記プライマリ仮想マシンは、
    前記デバイスの動作仕様の違いが所定の機能の有無の場合は、
    前記所定の機能を無効にして、前記プライマリ仮想マシンが使用するデバイスに対する処理が、前記セカンダリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートし、
    前記デバイスの動作仕様の違いが能力あるいは容量の場合は、動作に相違が生じる処理を前記プライマリゲストOSの外部で実行させることを特徴とする請求項4に記載のフォールトトレラントシステム。
  6. 前記セカンダリ仮想マシンは、
    前記プライマリ仮想マシンが使用するデバイスの動作仕様と、前記セカンダリ仮想マシンが使用するデバイスの動作仕様とが異なる場合に、
    前記セカンダリ仮想マシンが使用するデバイスに対する処理が、前記プライマリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートすることを特徴とする請求項1〜3のいずれか1項に記載のフォールトトレラントシステム。
  7. 前記セカンダリ仮想マシンは、
    前記デバイスの動作仕様の違いが所定の機能の有無の場合は、
    前記所定の機能を無効にして、前記セカンダリ仮想マシンが使用するデバイスに対する処理が、前記プライマリ仮想マシンが使用するデバイスに対する処理と同じになるようにエミュレートし、
    前記デバイスの動作仕様の違いが能力あるいは容量の場合は、動作に相違が生じる処理を前記セカンダリゲストOSの外部で実行させることを特徴とする請求項6に記載のフォールトトレラントシステム。
  8. 前記セカンダリ仮想マシンは、
    前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が遅い場合には、
    遅れの度合いを取得し、取得した値が予め定められた遅延許容時間を超えると、同期初期化処理を行なうことを特徴とする請求項1〜7のいずれか1項に記載のフォールトトレラントシステム。
  9. 前記セカンダリ仮想マシンは、
    前記取得した遅れの度合いが、想定される量より大きい場合に、故障として検出することを特徴とする請求項8に記載のフォールトトレラントシステム。
  10. 前記セカンダリ仮想マシンは、
    前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が遅い場合には、前記プライマリゲストOSのアイドル時に、擬似割り込み入力タイミングを前倒しすることで、前記プライマリ仮想マシンに対する遅れを取り戻すことを特徴とする請求項1〜7のいずれか1項に記載のフォールトトレラントシステム。
  11. 前記プライマリ仮想マシンは、
    前記動作能力の設定後であっても、前記セカンダリ仮想マシンより実行速度が速い場合には、前記セカンダリ仮想マシンの実行速度に合わせて、ウェイトを入れながら動作を行なうことを特徴とする請求項1〜7のいずれか1項に記載のフォールトトレラントシステム。
  12. 前記セカンダリ仮想マシンは、
    前記動作能力の設定後であっても、前記プライマリ仮想マシンより実行速度が速い場合には、前記プライマリ仮想マシンの実行速度に合わせて、ウェイトを入れながら動作を行なうことを特徴とする請求項1〜7のいずれか1項に記載のフォールトトレラントシステム。
  13. 前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、
    それぞれのストレージデバイスの内容を、それぞれの仮想マシンに割り当てられたメモリ上に展開し、ストレージデバイスアクセスをメモリアクセスに置き換えることを特徴とする請求項1〜12のいずれか1項に記載のフォールトトレラントシステム。
  14. 前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、
    前記メモリアクセスを行なうと、アクセス完了の外部割り込みを待つことなく、それぞれのゲストOSに擬似割り込みを入力することを特徴とする請求項13に記載のフォールトトレラントシステム。
  15. 前記プライマリ仮想マシンおよび前記セカンダリ仮想マシンは、
    それぞれのストレージデバイスの内容を、それぞれのゲストOSで設定されたRAMディスクに展開し、ストレージデバイスアクセスをRAMディスクに置き換えることを特徴とする請求項1〜12のいずれか1項に記載のフォールトトレラントシステム。
JP2012204608A 2012-09-18 2012-09-18 フォールトトレラントシステム Active JP5700009B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2012204608A JP5700009B2 (ja) 2012-09-18 2012-09-18 フォールトトレラントシステム
US14/029,064 US9465634B2 (en) 2012-09-18 2013-09-17 Fault tolerant system and method for performing fault tolerant
CN201310430124.9A CN103678024B (zh) 2012-09-18 2013-09-18 容错系统和用于执行容错的方法
EP13184950.7A EP2709013B1 (en) 2012-09-18 2013-09-18 Fault tolerant system and method for performing fault tolerant virtual machines synchronization

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012204608A JP5700009B2 (ja) 2012-09-18 2012-09-18 フォールトトレラントシステム

Publications (2)

Publication Number Publication Date
JP2014059750A true JP2014059750A (ja) 2014-04-03
JP5700009B2 JP5700009B2 (ja) 2015-04-15

Family

ID=49182171

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012204608A Active JP5700009B2 (ja) 2012-09-18 2012-09-18 フォールトトレラントシステム

Country Status (4)

Country Link
US (1) US9465634B2 (ja)
EP (1) EP2709013B1 (ja)
JP (1) JP5700009B2 (ja)
CN (1) CN103678024B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016031651A (ja) * 2014-07-29 2016-03-07 富士通株式会社 情報処理システム及び方法

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9983917B2 (en) 2015-11-30 2018-05-29 International Business Machines Corporation Monitoring and responding to operational conditions of a logical partition from a separate logical partition
CN105573910B (zh) * 2015-12-11 2018-06-19 北京元心科技有限公司 受保护系统的应用程序调试方法及智能终端
CN106055472A (zh) * 2016-05-19 2016-10-26 乐视控股(北京)有限公司 进入调试模式的方法、装置及终端设备
EP3341838A4 (en) 2016-05-31 2019-05-08 Avago Technologies International Sales Pte. Limited HIGH AVAILABILITY FOR VIRTUAL MACHINES
EP3428748B1 (de) * 2017-07-13 2020-08-26 Siemens Aktiengesellschaft Verfahren und anordnung zum betrieb von zwei redundanten systemen
CN110622478B (zh) * 2018-04-08 2020-11-06 华为技术有限公司 数据同步处理的方法和装置
TWI694699B (zh) * 2019-01-07 2020-05-21 瑞昱半導體股份有限公司 虛擬機器的通訊方法、電子裝置以及非暫態電腦可讀取記錄媒體
US11113094B1 (en) * 2019-08-28 2021-09-07 Parallels International Gmbh Physical memory management for virtual machines

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06230992A (ja) * 1993-02-06 1994-08-19 Hitachi Ltd 計算機システムおよび計算機システムの障害回復方法
JP2004046599A (ja) * 2002-07-12 2004-02-12 Nec Corp フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム
US20090083735A1 (en) * 2007-09-26 2009-03-26 Kabushiki Kaisha Toshiba High availability system and execution state control method
JP2010152559A (ja) * 2008-12-24 2010-07-08 Toshiba Corp 分散システムおよび同システムの多重化制御方法
JP2011248809A (ja) * 2010-05-31 2011-12-08 Nec Engineering Ltd 冗長演算システム
JP2012070028A (ja) * 2010-09-21 2012-04-05 Sharp Corp 画像形成装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6496847B1 (en) * 1998-05-15 2002-12-17 Vmware, Inc. System and method for virtualizing computer systems
US20010049726A1 (en) * 2000-06-02 2001-12-06 Guillaume Comeau Data path engine
US20050132364A1 (en) * 2003-12-16 2005-06-16 Vijay Tewari Method, apparatus and system for optimizing context switching between virtual machines
US8572606B1 (en) * 2005-12-29 2013-10-29 Vmware, Inc. System and method for avoiding synchronization bugs through virtualization
JP4871174B2 (ja) 2007-03-09 2012-02-08 株式会社日立製作所 仮想計算機システム
US8479195B2 (en) 2007-05-16 2013-07-02 Vmware, Inc. Dynamic selection and application of multiple virtualization techniques
US10521265B2 (en) * 2008-09-19 2019-12-31 Microsoft Technology Licensing, Llc Coalescing periodic timer expiration in guest operating systems in a virtualized environment
US9344401B2 (en) * 2009-02-04 2016-05-17 Citrix Systems, Inc. Methods and systems for providing translations of data retrieved from a storage system in a cloud computing environment
US8650564B2 (en) * 2010-10-19 2014-02-11 Vmware, Inc. Method and system for synchronizing fault-tolerant virtual machines and adjusting CPU resource limit based on execution latency
US8621461B1 (en) * 2010-11-22 2013-12-31 Netapp, Inc. Virtual machine based operating system simulation using host ram-based emulation of persistent mass storage device
CN102455951A (zh) * 2011-07-21 2012-05-16 中标软件有限公司 一种虚拟机容错方法和系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06230992A (ja) * 1993-02-06 1994-08-19 Hitachi Ltd 計算機システムおよび計算機システムの障害回復方法
JP2004046599A (ja) * 2002-07-12 2004-02-12 Nec Corp フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム
US20040153857A1 (en) * 2002-07-12 2004-08-05 Nec Corporation Fault-tolerant computer system, re-synchronization method thereof and re-synchronization program thereof
US20090083735A1 (en) * 2007-09-26 2009-03-26 Kabushiki Kaisha Toshiba High availability system and execution state control method
JP2009080695A (ja) * 2007-09-26 2009-04-16 Toshiba Corp 高可用システム及び実行状態制御方法
JP2010152559A (ja) * 2008-12-24 2010-07-08 Toshiba Corp 分散システムおよび同システムの多重化制御方法
JP2011248809A (ja) * 2010-05-31 2011-12-08 Nec Engineering Ltd 冗長演算システム
JP2012070028A (ja) * 2010-09-21 2012-04-05 Sharp Corp 画像形成装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016031651A (ja) * 2014-07-29 2016-03-07 富士通株式会社 情報処理システム及び方法

Also Published As

Publication number Publication date
EP2709013A1 (en) 2014-03-19
EP2709013B1 (en) 2015-03-04
CN103678024B (zh) 2016-08-17
JP5700009B2 (ja) 2015-04-15
CN103678024A (zh) 2014-03-26
US20140082617A1 (en) 2014-03-20
US9465634B2 (en) 2016-10-11

Similar Documents

Publication Publication Date Title
JP5700009B2 (ja) フォールトトレラントシステム
JP5630671B2 (ja) フォールトトレラントシステム
EP2810168B1 (en) Run-time instrumentation sampling in transactional-execution mode
US9323553B2 (en) Reducing virtual machine suspension time in checkpoint system
US20160283272A1 (en) Shared resource access control method and apparatus
Petrovic et al. Implementing virtual machine replication: A case study using xen and kvm
Li et al. Quest-V: A virtualized multikernel for high-confidence systems
JP5660096B2 (ja) フォールトトレラントシステム
JP5660097B2 (ja) フォールトトレラントシステム
Li et al. A Performance Evaluation of Embedded Multi-core Mixed-criticality System Based on PREEMPT_RT Linux
Chen et al. Asymmetric virtual machine replication for low latency and high available service
JP4825058B2 (ja) 計算機のエミュレーション方法
Tsao et al. Efficient virtualization-based fault tolerance
Nikolic et al. Hard real-time multiprocessor scheduling resilient to core failures
Zangl Towards heterogeneous deterministic replay for symmetric multiprocessors
Dutson Most Progress Made Algorithm: Combating Synchronization Induced Performance Loss on Salvaged Chip Multi-Processors

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140626

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140708

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140821

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150202

R150 Certificate of patent or registration of utility model

Ref document number: 5700009

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150