障害処理方法および計算機
【課題】障害データが読み出しされることによってシステムを停止させるCPUを備える計算機システムにおいて、障害データに対するユーザソフトウェアのアクセス状況に基づいて障害範囲を限定する。
【解決手段】プロセッサと、プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、プロセッサは、メモリ保護機能を備え、第1のソフトウェアと第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、第2のソフトウェアはアドレス情報とアクセス関連情報とを含む障害情報を保持し、方法は、第2のソフトウェアが、メモリにおける障害の発生を検出するステップと、障害が発生したメモリのアドレスへのアクセスを禁止し、アクセス状況を監視するステップと、障害が発生したメモリのアドレスに対する第1のソフトウェアからのアクセスを検出した場合に障害処理を実行するステップと、を含むことを特徴とする。
【解決手段】プロセッサと、プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、プロセッサは、メモリ保護機能を備え、第1のソフトウェアと第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、第2のソフトウェアはアドレス情報とアクセス関連情報とを含む障害情報を保持し、方法は、第2のソフトウェアが、メモリにおける障害の発生を検出するステップと、障害が発生したメモリのアドレスへのアクセスを禁止し、アクセス状況を監視するステップと、障害が発生したメモリのアドレスに対する第1のソフトウェアからのアクセスを検出した場合に障害処理を実行するステップと、を含むことを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は計算機システムに関し、計算機上で稼動するOSおよびアプリケーションに対して、訂正不能障害を隠蔽する技術に関する。
【背景技術】
【0002】
オープン系サーバの性能および機能拡充に伴い、企業のITシステムでは比較的安価かつ高性能なIntel(登録商標、以下同じ)社のXeon(登録商標、以下同じ) CPUを搭載したサーバ(Xeonサーバ)が主流となっている。Xeon CPUは内部的に多数のCPUコアを搭載しサーバ全体としての処理性能を向上させており、2010年には1CPUパッケージ当り8コアが搭載される見込みである。
【0003】
Xeonサーバに搭載されるCPUコアを有効に活用する方法として、仮想サーバ技術が広く用いられている。仮想サーバ技術では、物理的には1台のXeonサーバ上で複数の仮想的なサーバ環境(仮想計算機、VM)を生成し、VM単位でOSやアプリケーションを稼働させる。近年では標準的なXeonサーバ上で10〜数十のVMを稼働させるユーザも珍しくない。
【0004】
しかし、1台の物理サーバ上で稼動するVM数が増加するにつれ、サーバの部品故障に伴うVMの停止リスクが顕著となってきている。例えば、メモリではECC(Error Correcting Code)による符号化が適用されているが、2bitエラー等の訂正不能障害(UE: Uncorrectable Error)が発生した場合、従来のXeonサーバでは致命的なエラー(Fatal error)として扱われており、当該サーバ上の全てのVMを停止せざるを得なかった。
【0005】
それに対して、2010年に出荷予定のXeon CPU(Nehalem−EX)では、アーキテクチャレベルで障害処理が見直され(例えば、非特許文献1参照)、Poisoningに基づく障害データの追跡とエラー処理メカニズムが追加される。Poisoningとは、ハードウェアがUE検出時に特定のフラグもしくはシンドロームパターン(復号符号誤りパターン)を付与した異常データ(Poison)を生成し、ソフトウェアがPoisonを読みたした時点で障害処理を行う機能である。Poisonが上書きされて消滅した場合は、ソフトウェアがPoisonを読みださないため、障害処理を行われない。
【0006】
UEの検出と障害処理に関して、Nehalem−EXでは命令実行を行うCore部分と、メモリやI/Oとのデータ授受を行うUncore部分とではUEの深刻度が異なる。
(1)Core部分では、命令実行に起因するメモリの読み出しに関してUEが検出される。本ケースではソフトウェアに致命的エラー(Fatal error)が伝達され、当該サーバ上のソフトウェアが全て停止するシステム停止に至る。
(2)Uncore部分では、メモリの周期的な読み出し/再書き込みを行うスクラビング(Scrubbing)処理と、キャッシュからメモリへのデータ書き戻し(Write Back)処理に関してUEが検出される。本ケースではPoisonが生成された後、ソフトウェアに回復可能なエラー(Recoverable Error)が伝達される。
【0007】
従って、Nehalem−EXの場合、Coreで検出されたUEに関しては従来通りのシステム停止等の障害処理になるが、Uncoreで検出されたUEの場合、障害検出を契機に障害部品の部位情報をソフトウェアに伝達することによって、サーバ全体としての動作継続が可能となる。例えば、IDF2009では、回復可能なエラーの伝達を契機にVMを制御するハイパバイザが、障害部品を含むVMのみを停止させる応用が発表されている(例えば、非特許文献2参照)。また、本技術はOSにも適用可能であるため、同契機でOSが障害メモリを含むアプリケーションのみを停止させる応用も発表されている。
【先行技術文献】
【非特許文献】
【0008】
【非特許文献1】IntelR 64 and IA-32 Architectures Software Developer's Manual 3A Chapter15.6 Recovery of Uncorrected Recoverable(UCR) Errors
【非特許文献2】Building IT Server Solutions on Intel Microarchitecture (Nehalem-EX)-based Platforms Featuring Windows Server 2008 R2 and Hyper-V. Intel Developer Forum 2009
【発明の概要】
【発明が解決しようとする課題】
【0009】
前述のスクラビング処理およびWrite Back処理は、実装されている全てのメモリ領域を対象としている。そのためXeonサーバでは、以下のメモリ領域(a)に対してUEを検出した場合でも関連するVMを停止させてしまう問題がある。
(a)ヒープ・スタック領域のうち、未初期化のメモリ領域。
【0010】
メモリ領域(a)は、OSもしくはアプリケーションが初期化を行った上で利用される。従って、スクラビング時およびWrite Back時に検出されたUEは、Core部分に読み出されることがないためFatal errorは生じない。よって、本来は当該領域を含むアプリケーションやVMをすぐに停止する必要はない。
【0011】
しかし、ハイパバイザは一般に、OSおよびアプリケーションのメモリが未初期化なのか初期化済みであるか判定できない。従って、Fatal errorが発生するか否かは、OSおよびアプリケーションがPoisonを読みだした時点で初めて確定する。そのため将来的なFatal errorを回避するためには、UE検出時点で、VMを停止させる等の障害処理をせざるを得なかった。その結果、すぐに停止させる必要のないVMまでも停止させることとなり、障害範囲を限定できなかった。
【0012】
またOSについても、アプリケーションのメモリが未初期化なのか初期化済みなのか判定できないため、同様の問題があった。
【0013】
Xeonサーバにおいて、障害範囲を限定するためには、以下の3つの要件がある。
【0014】
第1の要件:検出されたUE(DUE: Detected Uncorrectable Error)がPoisonを読み出すTRUE DUEなのか、読み出さないFALSE DUEなのかを判別すること。
【0015】
第2の要件:Poisonを読み出すとシステム停止を招くXeon CPUを用いて、Poisonを読み出すTRUE DUEの確定後もシステム停止を回避すること。
【0016】
第3の要件:Poisonを読み出さないFALSE DUEの場合に、VMやアプリケーションの動作を継続させること。
【0017】
これらの要件を全て充足させ、障害範囲を限定することが課題である。
【課題を解決するための手段】
【0018】
本発明の代表的な一例を示せば、以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、前記プロセッサは、前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、前記第2のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、前記方法は、前記第2のソフトウェアが、前記メモリにおける障害の発生を検出する第1のステップと、前記第2のソフトウェアが、前記障害が発生したメモリのアドレスを前記障害情報に追加する第2のステップと、前記第2のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第3のステップと、前記第2のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第4のステップと、を含むことを特徴とする。
【発明の効果】
【0019】
障害が発生したメモリのアドレスに対して読み出しを実行するとシステム停止をさせるプロセッサであっても、第1のソフトウェアのメモリへの読み書きの有無から障害の種別を判別し、第1のソフトウェアから書き込みがされていない場合には障害の影響を当該メモリを使用する第1のソフトウェアのみにとどめ、第1のソフトウェアから書き込みがされている場合には第1のソフトウェアの処理を継続できる。したがって、障害の影響範囲を限定することできる。
【図面の簡単な説明】
【0020】
【図1】本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【図2】本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【図3】本発明の実施形態のI/O割り当て表の一例を示す説明図である。
【図4】本発明の実施形態のPoison表の一例を示す説明図である。
【図5A】本発明の実施形態のCPU用メモリマップ・保護表の一例を示す説明図である。
【図5B】本発明の実施形態のI/O用メモリマップ・保護表の一例を示す説明図である。
【図6】本発明の実施形態のハイパバイザが管理するメモリの一例を示す説明図である。
【図7A】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図7B】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図7C】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図8A】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図8B】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図8C】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9A】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9B】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9C】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10A】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10B】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10C】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図11】本発明の実施形態のハイパバイザが実行する障害処理の全体像を説明するフローチャートである。
【図12】本発明の実施形態のS1040において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【図13】本発明の実施形態のS1110において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【図14】本発明の実施形態のS1050において実行されるメモリの保護領域の読み出しに対応する処理を説明するフローチャートである。
【図15】本発明の実施形態のS1070において実行されるI/Oデバイス障害に対応する処理を説明するフローチャートである。
【図16】本発明の実施形態のS1060において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【図17】本発明の実施形態のS1570において実行される通常動作への復帰処理を説明するフローチャートである。
【発明を実施するための形態】
【0021】
以下では、本発明の実施形態を添付図面に基づいて説明する。
【0022】
本実施形態ではハイパバイザが本発明における処理を実行する。ハイパバイザがスーパバイザソフトウェアに該当し、OSおよびアプリケーションがユーザソフトウェアに該当する。また、以下では訂正不能障害を、障害と記載する。
【0023】
<ハードウェア構成>
図1は、本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【0024】
物理計算機10は、障害検出機能を有するCPU70−1〜70−nを1つ以上備え、これらのCPU70−1〜70−nはQPI(QUICK Path InterConnect)またはSMI(Scalable Memory InterConnect)等のチップ間インタフェース820を介してIOH(I/O Hub)800およびメモリ90と接続される。
【0025】
IOH800には、PCIexpress等のバス840を介してI/Oデバイス60が接続される。I/Oデバイス60は、LAN860に接続されるネットワークアダプタ、ディスク装置870等に接続されるSCSIアダプタ、SAN890(Storage Area Network)に接続されるファイバーチャネルアダプタ、およびコンソール80に接続されるグラフィックコントローラなどから構成される。なお、I/Oデバイス60は、複数あってもよい。
【0026】
CPU70はチップ間インタフェース820を介してメモリ90にアクセスし、IOH800からI/Oデバイス60にアクセスして所定の処理を実行する。
【0027】
なお、図1に示す例では、物理計算機10は、1つのI/Oデバイス60のみを備えているが、複数備えてもよい。
【0028】
メモリ90は、CPU70によって実行されるプログラムおよび当該プログラムを実行するときに必要となる情報を格納する。図1に示すように、メモリ90には、ハイパバイザ20がロードされ、当該ハイパバイザ20によって構築される各仮想計算機1(30−1)〜仮想計算機n(30−n)上に、ゲスト40−1〜40−nがそれぞれ実行される。ここで、ゲストとは、OSとアプリケーションとの総称を表す。
【0029】
以下、CPU70−1〜70−nを区別しない場合、CPU70と記載する。仮想計算機1(30−1)〜仮想計算機n(30−n)を区別しない場合、仮想計算機30と記載し、また、ゲスト40−1〜40−nを区別しない場合、ゲスト40と記載する。
【0030】
<ソフトウェア構成>
次に、物理計算機10上で仮想計算機30を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図2を参照しながら詳述する。
【0031】
図2は、本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【0032】
物理計算機10上では、1つ以上の仮想計算機30を制御するハイパバイザ20が稼動する。
【0033】
仮想計算機30は、CPU70を用いて実現される仮想CPU300と、I/Oデバイス60を用いて実現される仮想I/Oデバイス310と、メモリ90を用いて実現されるゲストメモリ320とから構成される。仮想計算機30上では、ゲスト40が稼動する。
【0034】
ハイパバイザ20は、I/O割り当て表200、エミュレータ210、障害処理部220、およびメモリ管理部240−1〜240−nを備える。
【0035】
I/O割り当て表200は、仮想計算機30に対するI/Oデバイス60の割り当て状態を格納する。I/O割り当て表200の詳細は、図3を用いて後述する。
【0036】
エミュレータ210は、仮想CPU300、仮想I/Oデバイス310およびゲストメモリ320を実現する。
【0037】
障害処理部220は、発生した障害に対応する処理を実行する。障害処理部220は、Poison表230を含む。
【0038】
Poison表230は、Poisonの位置とアクセス状況を格納する。Poison表230の詳細は、図4を用いて後述する。
【0039】
メモリ管理部240−1は、仮想計算機1(30−1)に対するメモリ90の割り当てを管理する。メモリ管理部240−1は、ゲストメモリ320とメモリ90との対応を定め、アクセス権を制定するメモリマップ・保護表を2種類格納する。具体的には、メモリ管理部240−1は、I/O用メモリマップ・保護表260−1およびCPU用メモリマップ・保護表250−1を含む。CPU用メモリマップ・保護表250−1は、CPU70に適用される。I/O用メモリマップ・保護表260は、I/Oデバイス60に適用される。
【0040】
なお、メモリ管理部240−1は、CPU用メモリマップ・保護表250−1とI/O用メモリマップ・保護表260−1とを一つの表として備えていてもよい。
【0041】
なお、他のメモリ管理部240−2〜240−nも同様の構成である。
【0042】
以下、メモリ管理部240−1〜240−nを区別しない場合、メモリ管理部240と記載する。また、I/O用メモリマップ・保護表260−1およびCPU用メモリマップ・保護表250−1についても、区別しない場合、I/O用メモリマップ・保護表260およびCPU用メモリマップ・保護表250と記載する。
【0043】
物理計算機10は、CPU70、I/Oデバイス60およびメモリ90を備える。
【0044】
CPU70は、メモリ保護機能101、メモリコントローラ100およびキャッシュ105を備える。
【0045】
メモリ保護機能101は、ゲストメモリ320に対するアドレス変換とアクセス制御とを行う。メモリ保護機能101は、CPU用メモリマップ・保護表250を参照し、ゲスト40がゲストメモリ320にアクセス(読み出しまたは書き込み)する場合、アクセスの可否と対応するホストアドレスとを判定する。当該判定の結果、アクセスが禁止されていると判定された場合、メモリ保護機能101は、障害処理部220に不正アクセスを通知する。
【0046】
すなわち、メモリ保護機能101は、メモリ90の所定のアドレス範囲のアクセスを禁止するために当該範囲を保護するとともに、当該アドレス範囲に対するアクセスを監視するための機能である。
【0047】
メモリコントローラ100は、メモリ90の読み書きを制御する。メモリコントローラ100は、メモリ障害検出機能102およびスクラビング機能104を備える。
【0048】
メモリ障害検出機能102は、メモリ90からデータが読み出されときに、メモリコントローラ100によって付与されたエラー検出用の符号の妥当性を検査する。ここで、エラー検出用の符号は、メモリコントローラ100によってメモリ90へ書き込まれるデータに付与される。
【0049】
また、メモリ障害検出機能102は、訂正不能な障害が検出された場合に、メモリ90にPoisonを格納し、更にPoisonの格納を障害処理部220に通知する。
【0050】
スクラビング機能104は、ソフトウェアの動作と独立してメモリ90に格納されるデータを検査する。
【0051】
キャッシュ105は、メモリ90上のデータの一部を格納する。キャッシュ105は、キャッシュ障害検出機能107およびライン無効化機能108を備える。
【0052】
キャッシュ障害検出機能107、キャッシュ105によって付与されたエラー検出用の符号の妥当性を適宜検査する。なお。エラー検出用の符号は、キャッシュ105によって格納されるデータに付与される。キャッシュ障害検出機能107は、データがメモリ90に書き戻されるタイミングで障害を見つけた場合にメモリ90にPoisonを格納し、更にPoisonの格納を障害処理部220に通知する。
【0053】
ライン無効化機能108は、キャッシュ障害が発生したキャッシュラインを無効化する。
【0054】
I/Oデバイス60は、アドレス変換機能115、I/O障害検出機能110およびDMA一時停止機能117を備える。
【0055】
アドレス変換機能115は、ゲストメモリ320に対応するメモリ90のアドレスを算出する。アドレス変換機能115は、I/O用メモリマップ・保護表260を参照し、I/Oデバイス60がゲストメモリ320をアクセスする場合に、対応するホストアドレスを判定する。
【0056】
I/O障害検出機能110は、メモリ90からデータを読み出した結果がPoisonだった場合に、障害の発生をIOH800経由でCPU70に伝達する。
【0057】
DMA一時停止機能117は、ゲストメモリ320のアクセスを一時的に保留する。
【0058】
メモリ90は、通常割当用メモリ130と障害対応用メモリ120とに分けて管理される。
【0059】
通常割当用メモリ130は、仮想計算機30に割り当てられるメモリである。障害対応用メモリ120は、障害発生時に使用されるメモリである。
【0060】
通常割当用メモリ130は、Poisonを含む障害ページ160と、Poisonを含まない通常ページ170とから構成される。
【0061】
障害対応用メモリ120は、障害が発生したメモリの代わりに割り当てられる代替ページ140と、ゲスト40がPoisonの上書きに用いる値を一時的に格納する仮置ページ150とから構成される。ここでページとはメモリ割り当ての最小単位を意味し、本実施形態ではページの大きさを「4Kバイト」と仮定する。また、Poisonの大きさは「8バイト」と仮定する。
【0062】
図3は、本発明の実施形態のI/O割り当て表200の一例を示す説明図である。
【0063】
I/O割り当て表200は、仮想計算機30毎に各I/Oデバイス60の割り当て状態を格納する。図3に示す例では、I/O割り当て表200には、各仮想計算機1(30−1)〜仮想計算機n(30−n)に対する、I/Oデバイス1〜mの割り当て状態が格納される。
【0064】
割り当て状態には、「直接I/O」、「間接I/O」および「なし」の3通りがある。
【0065】
「直接I/O」は、I/Oデバイス60がDMA(Direct Memory Access)等を用いてゲストメモリ320を直接操作できる割り当て形態である。
【0066】
「間接I/O」は、I/Oデバイス60にゲストメモリ320を直接操作させず、ハイパバイザ20がゲストメモリ320の操作を代行する形態である。
【0067】
「なし」は、I/Oデバイス60が割り当てられていない事を意味する。
【0068】
本実施形態では、直接I/Oとして割り当てられたI/Oデバイス60を1つ以上含む仮想計算機30を、直接I/Oの仮想計算機と記載する。また、間接I/Oとして割り当てられたI/Oデバイス60のみから成る仮想計算機を、間接I/Oの仮想計算機と記載する。
【0069】
なお、ハイパバイザ20は、仮想計算機30とI/Oデバイス60との対応が分かるのであれば、I/O割り当て表200以外の形式で情報を保持してもよい。
【0070】
図4は、本発明の実施形態のPoison表230の一例を示す説明図である。
【0071】
Poison表230は、障害タイプ400、仮想計算機番号410、ゲストアドレス420、障害ページアドレス430、代替ページアドレス440、仮置ページアドレス450、Poisonビットマップ460および消滅ビットマップ470を含む。
【0072】
障害タイプ400は、検出された障害の種類と仮想計算機30の構成とを格納する。障害タイプ400には、「キャッシュ」、「メモリ(間接I/O)」、「メモリ(直接I/O)」および「正常」の4種がある。
【0073】
「キャッシュ」は、キャッシュ障害検出機能107によって伝達される障害である。「メモリ(間接I/O)」は、メモリ障害検出機能102によって伝達される、間接I/Oの仮想計算機30に割り当てられたメモリに対する障害である。「メモリ(直接I/O)」は、メモリ障害検出機能102によって伝達される直接I/Oの仮想計算機30に割り当てられたメモリに対する障害である。「正常」は、障害が発生していない状態である。
【0074】
仮想計算機番号410は、仮想計算機30を識別するための識別子(通し番号)を格納する。
【0075】
ゲストアドレス420は、ゲストメモリ320のアドレスを格納する。障害ページアドレス430は、障害ページ160のアドレスを格納する。代替ページアドレス440は、代替ページ140のアドレスを格納する。仮置ページアドレス450は、仮置ページ150のアドレスを格納する。
【0076】
Poisonビットマップ460は、ページ内のPoisonの位置を格納する。Poisonビットマップ460は、障害ページ160の1バイト毎に1ビットが対応するビットマップであり、ページ内においてPoisonが格納されたアドレスに対応するビットを「1」とする。
【0077】
消滅ビットマップ470は、ページ内の上書きされたPoisonの位置を格納する。消滅ビットマップ470は、障害ページ160の1バイト毎に1ビットが対応するビットマップであり、Poisonが格納されたアドレスに対して書き込みが検出された場合に当該アドレスに対応するビットを「1」とする。
【0078】
Poison表230は、障害が障害処理部220に伝達された時と、Poisonがゲスト40によって上書きされる時に更新される。また、Poison表230は、仮想計算機30を追加する場合にも参照され、障害の起きていないメモリ90を割り当てる目的で使用される。
【0079】
ハイパバイザ20は、Poisonビットマップ460および消滅ビットマップ470を用いて、Poisonが格納されたアドレスに対して、書き込みがあったか否か、すなわち、アクセスパターンを判定することができる。
【0080】
なお、ハイパバイザ20は、障害に関する情報が分かるのであれば、Poison表70以外の形式で情報を保持してもよい。
【0081】
図5Aは、本発明の実施形態のCPU用メモリマップ・保護表250の一例を示す説明図である。図5Bは、本発明の実施形態のI/O用メモリマップ・保護表260の一例を示す説明図である。
【0082】
図5Aおよび図5Bに示すようにCPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260は同一の構成である。
【0083】
CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260は、ページ毎に一つのエントリを保持する。
【0084】
CPU用メモリマップ・保護表250は、ゲストアドレス500、ホストアドレス510およびアクセス権520を含む。I/O用メモリマップ・保護表260は、ゲストアドレス530、ホストアドレス540およびアクセス権550を含む。
【0085】
ゲストアドレス500、530は、ゲストメモリ320のアドレスを格納する。ゲストアドレス500、530は、ゲストアドレス420と同一のものである。ホストアドレス510、540は、メモリ90のアドレスを格納する。アクセス権520、550は、メモリのアクセス権を格納する。アクセス権520には、「許可」または「禁止」が格納される。
【0086】
なお、ハイパバイザ20は、ゲストアドレスとホストアドレスとの対応が分かるのであれば、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260以外の形式で情報を保持してもよい。
【0087】
図6は、本発明の実施形態のハイパバイザ20が管理するメモリ90の一例を示す説明図である。
【0088】
ハイパバイザ20は、メモリ90の割り当てを管理しており、メモリ90上に当該ハイパバイザ20自身を配置する領域と、仮想計算機30が使用する領域を割り当てる。例えば、図6に示すように、ハイパバイザ20は、ハイパバイザ20自身にアドレスAD0〜AD1を、仮想計算機1(30−1)にアドレスAD1〜AD2を、仮想計算機n(30−n)にアドレスAD3〜AD4を割り当てる。
【0089】
各仮想計算機30に割り当てられた領域には、ゲスト(OS)40が割り当てられる。
【0090】
ハイパバイザ20が使用する領域には、I/O割り当て表200、エミュレータ210、障害処理部220およびメモリ管理部240が割り当てられる。
【0091】
<影響範囲を限定可能な障害の種類>
本実施形態では障害部位として、スクラビングで検出されるメモリ素子の障害(以下、メモリ障害と記載する)と、キャッシュ105からメモリ90へのWrite Back時に検出されるキャッシュの障害(以下、キャッシュ障害と記載する)との両方に対して処理を実行する。本実施形態で対応する障害の条件を(表1)に記載する。
【0092】
【表1】
【0093】
ここで、仮想計算機の構成とは、仮想計算機30に対するI/Oデバイス60の割り当て状態を示す。直接I/Oの仮想計算機30は、1つ以上のI/Oデバイス60からゲストメモリ320に対するDMAが許可される仮想計算機30である。間接I/Oの仮想計算機30は、I/Oデバイス60からゲストメモリ320に対して、一切のDMAが許可されない仮想計算機30である。間接I/Oの仮想計算機30では、ハイパバイザ20のみがゲストメモリ320を操作する。
【0094】
本実施形態では、直接I/Oの仮想計算機30においてメモリ障害が生じた場合、ページ毎のPoisonが1つ(8バイト)だけの簡単なケースのみに対応する。
【0095】
また、簡単のために、以下に列挙する2重障害にも対応しない。すなわち、間接I/Oの仮想計算機30においてメモリ障害が生じ、更に代替ページ140に障害が発生する場合は2重障害とみなして対応しない。また、キャッシュ障害についても仮置ページ150に障害が発生する場合は2重障害とみなして対応しない。また、同一ページに対してメモリ障害とキャッシュ障害との両方が発生する場合も2重障害とみなして対応しない。
【0096】
本実施形態では、I/Oデバイス60が、ゲストメモリ320に対するDMAを一時的に停止させるDMA一時停止機能117を備えることを前提とする。また、CPU70が、故障したキャッシュラインの利用を自動的に停止させるライン無効化機能108を備えることを前提とする。
【0097】
本実施形態では(表1)に示す3つのケースに対応するが、各ケースを区別するための条件判定を省略すれば、2つのケースまたは1つのケースに対応する実施形態も可能である。
【0098】
<障害過程におけるゲストメモリの実現方法>
次に、障害検出からPoisonが消滅する各過程における、ゲストメモリ320の遷移について説明する。
【0099】
図7A、図7Bおよび図7Cは、本発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【0100】
各図はゲストアドレス500とホストアドレス510との対応関係を示している。図7Aは、(1)ゲストアドレス500の所定のページが障害ページ160にマップされた状態を表すメモリマップである。
【0101】
図7Bは、(2)ゲスト40から障害ページ160へのアクセスが禁止された状態を示すメモリマップである。
【0102】
図7Cは、(3)ゲストアドレス500の所定のページのマップ先が代替ページ140に変更された状態を示すメモリマップである。
【0103】
以下、図7Aに示すメモリマップをメモリマップ(1)と記載し、図7Bに示すメモリマップをメモリマップ(2)と記載し、また、図7Cに示すメモリマップをメモリマップ(3)と記載する。
【0104】
図8A、図8Bおよび図8Cは、本発明の実施形態において、直接I/Oの仮想計算機30で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0105】
各状態において、Poison700を含む障害ページ160と、障害ページ160の代わりに割り当てられる代替ページ140との2つを1組として扱う。
【0106】
図8Aは、(a)障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ140の全データは「0」となっている。
【0107】
図8Bは、(b)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。本ケースでは、Poison700を上書きするデータ(更新データ720)が代替ページ140に格納される。一方、正常データ710を上書きする値は、障害ページ160に格納される。
【0108】
(b)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ(Poison700以外のデータ)710を読み出す場合には、ハイパバイザ20が障害ページ160を読み出して応答する。また、(b)の状態で、ゲスト40がCPU70を用いて代替ページ140の更新データ720を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。また、(b)の状態で、I/Oデバイス60が正常データ710またはPoison700を読み出す場合には、障害ページ160のデータがそのまま読み出される。
【0109】
図8Cは、(c)ゲスト40がページ内のPoison700を全て上書きした後の状態を表す。図8Cに示すように、障害ページ160に含まれていたPoison700以外のデータ(正常データ710)が代替ページ140にマージされる。
【0110】
直接I/Oの仮想計算機30で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは(表2)に示すような対応となる。
【0111】
【表2】
【0112】
初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0113】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。なお、I/Oデバイス60に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ(1)が適用され、回復後にメモリマップ(3)が適用される。
【0114】
ゲスト40によるPoisonの上書きによってPoisonが消滅した場合には、CPU70に対するアクセス禁止設定が解除される。障害ページ160の利用を停止して代替ページ140を割り当てたメモリマップ(3)が適用される。
【0115】
回復後は、図7Cに示すようなメモリマップ(3)が適用されるため、Poison消滅後においてはゲスト40によるメモリ操作が代替ページ140に対して行われる。
【0116】
図9A、図9Bおよび図9Cは、本発明の実施形態において、間接I/Oの仮想計算機30で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0117】
各状態において、Poison700を含む障害ページ160と、障害ページ160の代わりに割り当てられる代替ページ140との2つを1組として扱う。
【0118】
図9Aは、(d)障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ140には、正常データ710がコピーされ、Poisonに対応する領域の全データは「0」となっている。
【0119】
図9Bは、(e)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。本ケースでは、更新データ720および正常データ710を上書きする値は、共に代替ページ140に格納される。
【0120】
(e)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ(Poison700で以外のデータ)710を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。また、(e)の状態で、ゲスト40がCPU70を用いて代替ページ140中の更新データ720を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。
【0121】
図9Cは、(f)ゲスト40がページ内のPoison700を全て上書きした後の状態を表す。
【0122】
間接I/Oの仮想計算機30で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは(表3)に示すような対応となる。
【0123】
【表3】
【0124】
I/Oデバイス60に対しては、処理が実行されない。
【0125】
CPU70に対しては、初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0126】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。
【0127】
ゲスト40によるPoisonの上書きによってPoisonが消滅した場合には、CPU70に対するアクセス禁止設定が解除される。障害ページ160の利用を停止して代替ページ140を割り当てたメモリマップ(3)が適用される。
【0128】
回復後は、図7Cに示すようなメモリマップ(3)が適用されるため、Poison消滅後においてはゲスト40によるメモリ操作が代替ページ140に対して行われる。
【0129】
図10A、図10Bおよび図10Cは、本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0130】
各状態において、Poison700を含む障害ページ160と、更新データ720を一時的に保持する仮置ページ150との2つを1組として扱う。
【0131】
図10Aは、(g)障害発生直後の状態を表す。割り当てられた直後の仮置ページ150のページ内の全データは「0」となっている。
【0132】
図10Bは、(h)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。キャッシュ障害に対しては、更新データ720は仮置ページ150に格納される。これは、バイト単位の更新が許されないPoison700を、ゲスト40がバイト単位で更新する場合でも正しく上書きするための措置である。また、正常データ710を上書きする値は、障害ページ160に格納される。
【0133】
(h)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ710を読み出す場合には、ハイパバイザ20が障害ページ160を読み出して応答する。(h)の状態で、一部だけ上書きされたPoisonに対応する更新データ720を読み出す場合には、ハイパバイザ20が仮置ページ150を読み出して応答する。
【0134】
図10Cは、(i)ゲスト40がPoison700の8バイト全体を上書きした後の状態を表す。図10Cに示すように障害ページ160に含まれるPoison700が、仮置ページ150に格納した更新データ720で上書きされる。
【0135】
キャッシュ障害の場合、メモリマップの遷移とページの状態とは(表4)に示すような対応となる。
【0136】
【表4】
【0137】
初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0138】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。なお、I/Oデバイス60に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ(1)が適用される。
【0139】
次に、ハイパバイザ20が実行する障害処理の一例について、以下、フローチャートを参照しながら説明する。
【0140】
<障害処理の概要>
図11は、本発明の実施形態のハイパバイザ20が実行する障害処理の全体像を説明するフローチャートである。
【0141】
本フローチャートでは、障害検出などを契機としてハイパバイザ20が呼び出されてから、ゲスト40の動作を再開するまでの間の処理を記載する。なお、障害処理に関係する部分だけを詳細化しており、他の処理は全てS1080の中で実行される。
【0142】
ハイパバイザ20は、ハイパバイザ20自身の呼び出された原因をCPU70から受け取り、当該原因が訂正不能障害の検出であるか否かを判定する(S1000)。具体的には、呼び出された原因が、スクラビング中のメモリ障害検出であるか、または、WriteBack中のキャッシュ障害検出であるかが判定される。
【0143】
なお、スクラビング中のメモリ障害は、メモリ障害検出機能102によって検出され、また、WriteBack中のキャッシュ障害は、キャッシュ障害検出機能107によって検出される。
【0144】
ハイパバイザ20が呼び出された原因が訂正不要障害の検出であると判定された場合、ハイパバイザ20は、代替ページ140の割り当て、または、メモリ保護設定の変更など、キャッシュ105およびメモリ90の障害が検出された時に必要な処理を実行し(S1040)、S1080に進む。S1040において実行される処理については、図12を用いて後述する。
【0145】
ハイパバイザ20が呼び出された原因が訂正不要障害の検出でないと判定された場合、ハイパバイザ20は、ハイパバイザ20自身が呼び出された原因が保護領域の読み出しであるか否かを判定する(S1010)。具体的には、呼び出された原因が、ゲスト40による保護されたゲストメモリ320(障害ページ160を含む)の読み出しであるか否かが判定される。
【0146】
ハイパバイザ20が呼び出された原因が保護領域の読み出しであると判定された場合、ハイパバイザ20は、Poison700が読み出されたか否かの判定、または、仮想計算機30への障害反映など、保護領域の読み出しに対応する処理を実行し(S1050)、S1080に進む。S1050において実行される処理については、図14を用いて後述する。
【0147】
ハイパバイザ20が呼び出された原因が保護領域の読み出しでないと判定された場合、ハイパバイザ20は、ハイパバイザ20が呼び出された原因が、保護領域への書き込みであるか否かを判定する(S1020)。具体的には、ゲスト40による保護されたゲストメモリ320(障害ページ160を含む)への書き込みであるか否かが判定される。
【0148】
保護領域への書き込みであると判定された場合、ハイパバイザ20は、メモリ保護の解除など、保護領域の書き込みに対応する処理を実行し(S1060)、S1080に進む。S1060において実行される処理については、図16を用いて後述する。
【0149】
保護領域への書き込みでないと判定された場合、ハイパバイザ20は、ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出であるか否かを判定する(S1030)。
【0150】
なお、I/Oデバイス60による訂正不能障害は、I/O障害検出機能110によって検出される。
【0151】
ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出でないと判定された場合、ハイパバイザ20は、S1080に進む。
【0152】
ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出であると判定された場合、ハイパバイザ20は、障害を検出したI/Oデバイスを割り当てた仮想計算機30の特定、および仮想計算機30への障害反映など、I/Oデバイス障害に対応する処理を実行し(S1070)、S1080に進む。S1070において実行される処理については、図15を用いて後述する。
【0153】
ハイパバイザ20は、障害処理とは無関係な通常処理を実行し、ゲスト40を再開し(S1080)、処理を終了する。
【0154】
<キャッシュおよびメモリ障害を検出した場合の処理>
図12は、本発明の実施形態のS1040において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【0155】
ハイパバイザ20は、メモリ管理部240を用いて、CPU70からPoisonが生成された領域のメモリアドレスを受け取り、当該メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域、または、ハイパバイザ20の領域であるか否かを判定する(S1100)。
【0156】
メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域であると判定された場合、当該未使用領域の本Poisonによる影響は生じないため、ハイパバイザ20は、処理を終了する。また、メモリアドレスの割当先がハイパバイザ20の領域であると判定された場合、ハイパバイザ20は、当該Poisonが読み出される前に上書きされることを期待して処理を終了する。
【0157】
メモリアドレスの割当先が未使用領域、または、ハイパバイザ20の領域のいずれでもないと判定された場合、ハイパバイザ20は、発生した障害に対して障害影響範囲の限定可否を判定する(S1110)。S1110において実行される処理については、図13を用いて後述する。
【0158】
ハイパバイザ20は、S1110における判定の結果に基づいて、発生した障害に対して障害影響範囲の限定が可能か否かを判定する(S1120)。
【0159】
発生した障害に対して障害影響範囲の限定が可能でないと判定された場合、ハイパバイザ20は、Poisonが生成されたメモリアドレスが割り当てられた仮想計算機30に、障害の影響を反映させ(S1210)、処理を終了する。反映手段は、仮想計算機30のシャットダウンでもよいし、ゲスト40に対する障害割り込みの伝達でもよい。
【0160】
発生した障害に対して障害影響範囲の限定が可能であると判定された場合、ハイパバイザ20は、Poison表230にPoisonの範囲を登録する(S1130)。
【0161】
具体的には、ハイパバイザ20は、障害の種類と仮想計算機のI/O割り当て構成とを障害タイプ400に格納し、また、仮想計算機番号410、障害ページアドレス430のそれぞれに情報を格納する。また、Poisonビットマップ460に、Poisonが生成されたメモリアドレスのページ内オフセットと、Poisonの範囲とを格納し、消滅ビットマップ470をゼロクリアする。さらに、ハイパバイザ20は、CPU用メモリマップ・保護表250を参照して、障害ページアドレス430に対応するゲストアドレスを特定し、当該ゲストアドレスをゲストアドレス420に格納する。
【0162】
ハイパバイザ20は、メモリ保護機能101の設定を変更することによって、CPU70に対する障害ページのメモリ保護を開始する(S1140)。具体的には、CPU用メモリマップ・保護表250の対応するエントリのアクセス権520を「許可」から「禁止」に変更される。
【0163】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1150)。すなわち、障害の種類によって処理が分岐する。
【0164】
キャッシュ障害であると判定された場合、ハイパバイザ20は、Poisonに対するバイト単位の書き込みを一時的に蓄える仮置ページ150を、障害対応用メモリ120上に確保し(S1200)、処理を終了する。具体的には、ハイパバイザ20は、確保された仮置ページ150のアドレスを、Poison表230の仮置ページアドレス450に格納する。なお、障害ページ160の状態は、図10A〜図10Cに示すように変化する。
【0165】
メモリ障害であると判定された場合、ハイパバイザ20は、障害の起きたメモリ90の代わりに使用する代替ページ140を、障害対応用メモリ120上に確保する(S1160)。ハイパバイザ20は、確保された代替ページ140のアドレスを、Poison表230の代替ページアドレス440に格納する。
【0166】
ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1170)。すなわち、障害の起きたメモリ90が割り当てられる仮想計算機30の構成別に処理が分岐する。
【0167】
障害が起きたメモリが割り当てられる仮想計算機が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、処理を終了する。なお、障害ページ160の状態は、図8A〜図8Cに示すように変化する。
【0168】
障害が起きたメモリが割り当てられる仮想計算機が間接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、図9Aに示すように障害ページ160に含まれる正常データ710を代替ページ150にマージし(S1180)、処理を終了する。なお、障害ページ160は、図9A〜図9Cに示すように変化する。
【0169】
図13は、本発明の実施形態のS1110において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【0170】
本実施形態では実装を簡単にするため、二重障害に類する障害について、FALSE DUEの検出をあきらめ、障害検出の時点で仮想計算機30の通常稼動を断念する。すなわち、二重障害等が発生した仮想計算機30を停止させる。
【0171】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1220)。すなわち、発生した障害の種類によって処理が分岐する。
【0172】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、さらに、障害が発生したメモリ90が割り当てられる仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1235)。すなわち、障害が発生したメモリ90が割り当てられる仮想計算機30の種類によって処理が分岐する。
【0173】
障害が発生したメモリ90が割り当てられる仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、メモリ90に発生したPoisonの数を確認し、2つ以上のPoisonを含むメモリ障害であるか否かを判定する(S1240)。
【0174】
2つ以上のPoisonを含むメモリ障害であると判定された場合、本実施形態ではFALSE DUEが検出されないため、ハイパバイザ20は、障害影響範囲の限定不可と判定し(S1260)、処理を終了する。
【0175】
1つのPoisonだけを含むメモリ障害であると判定された場合、つまり、Poisonの領域サイズが8バイトの場合、ハイパバイザ20は、Poison表230を参照し、既に障害ページ160と判定されているページに2つ目の障害が発生したか否かを判定する(S1245)。
【0176】
既に障害ページ160と判定されているページに2つ目の障害が発生していると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0177】
S1235において、間接I/Oの仮想計算機30と判定された場合、または、S1245において、既に障害ページ160と判定されているページに2つ目の障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、既に代替ページ140として設定されたページに更に障害が発生したか否かを判定する(S1250)。
【0178】
既に代替ページ140と判定されているページに更に障害が発生していると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0179】
既に代替ページ140と判定されているページに更に障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、Poisonが発生したページに、先行するキャッシュ障害があるか否かを判定する(S1270)。
【0180】
Poisonが発生したページに、先行するキャッシュ障害があると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0181】
Poisonが発生したページに、先行するキャッシュ障害がないと判定された場合、ハイパバイザ20は、障害影響範囲の限定が可能であると判定し(S1255)、処理を終了する。
【0182】
S1220において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、Poison表230を参照し、既に仮置ページ150として設定されたページに更に障害が発生したか否かを判定する(S1225)。
【0183】
仮置ページ150として設定されたページに更に障害が発生したと判定された場合、ハイパバイザは、障害影響範囲の限定不可と判定し(S1230)、処理を終了する。
【0184】
仮置ページ150として設定されたページに更に障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、Poisonが発生したページに、先行するメモリ障害があるか否かを判定する(S1265)。
【0185】
Poisonが発生したページに、先行するメモリ障害があると判定された場合は、ハイパバイザ20は、S1230に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0186】
Poisonが発生したページに、先行するメモリ障害がないと判定された場合は、ハイパバイザ20は、S1255に進み、障害影響範囲の限定が可能であると判定して処理を終了する。
【0187】
<障害ページの読み出しに対応する処理>
図14は、本発明の実施形態のS1050において実行されるメモリ90の保護領域の読み出しに対応する処理を説明するフローチャートである。
【0188】
ハイパバイザ20は、ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしているか否かを判定する(S1400)。
【0189】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「0」であるバイトが読み出そうとしたメモリアドレスに含まれる場合、ハイパバイザ20は、ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしていると判定する。
【0190】
ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしていると判定された場合、ハイパバイザ20は、Poison700を読み出そうとしているゲスト40が稼働する仮想計算機30に、障害の影響を反映させ(S1410)、処理を終了する。反映手段は、仮想計算機のシャットダウンでもよいし、ゲスト40に対する障害割り込みの伝達でもよい。
【0191】
ゲスト40がPoison700以外のデータ(正常データ710または更新データ720)を読み出そうとしていると判定された場合、ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1420)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、Poison700以外のデータが格納されるページが異なるためである(図8A〜図8C、図9A〜図9Cおよび図10A〜図10C参照)。
【0192】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1430)。すなわち、障害が発生したメモリ90が割り当てられる仮想計算機30の種類によって処理が分岐する。これは、直接I/Oの仮想計算機30と間接I/Oの仮想計算機30とでは、Poison700以外のデータが格納されるページが異なるためである(図8A〜図8C、図9A〜図9C参照)。
【0193】
仮想計算機30が間接I/Oの仮想計算機30であると判定された場合、正常データ710と更新データ720との両方が代替ページ140に存在するため(図9A〜図9C参照)、ハイパバイザ20は、代替ページ140を読み出して応答し(S1460)、処理を終了する。
【0194】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、Poisonのうち上書きされたデータ(更新データ720)の読み出しであるか否かを判定する(S1440)。これは、直接I/Oの仮想計算機30では、正常データ710と更新データ720とが別々のページに格納されるためである(図8A〜図8C参照)。
【0195】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「1」であるバイトが読みだされる場合、更新データ720の読み出しを意味するため、ハイパバイザ20は、Poisonのうち上書きされたデータ(更新データ720)の読み出しであると判定する。
【0196】
Poisonのうち上書きされたデータ(更新データ720)の読み出しであると判定された場合、ハイパバイザ20は、更新データ720が格納される代替ページ140を読み出して応答し(S1450)、処理を終了する。
【0197】
Poisonのうち上書きされたデータ(更新データ720)以外のデータ、すなわち、Poisonビットマップ460が「0」であるバイトが読み出される場合、正常データ710の読み出しを意味するため、ハイパバイザ20は、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答し(S1460)、処理を終了する。
【0198】
S1420において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、仮置ページ150に一時的に格納される更新データ720の読み出しであるか否かを判定する(S1470)。これは、キャッシュ障害の場合、正常データ710と更新データ720とが別々のページに格納されるためである(図10A〜図10C参照)。
【0199】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「1」であるバイトが読みだされる場合に限り、更に当該アドレスを含む整列された8バイト(アドレス8n〜8n+7)において、消滅ビットマップ470に「0」であるバイトが含まれているか否かを検査する。
【0200】
当該条件を満たす場合には、仮置ページ150に一時的に格納される更新データ720の読み出しであると判定される。
【0201】
仮置ページ150に一時的に格納される更新データ720の読み出しでないと判定された場合、ハイパバイザ20は、S1460に進み、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答し、処理を終了する。
【0202】
仮置ページ150に一時的に格納される更新データ720の読み出しであると判定された場合、ハイパバイザ20は、仮置ページ150を読み出して応答し(S1480)、処理を終了する。
【0203】
仮置ページ150に一時的に格納される更新データ720の読み出しは、障害ページ160に格納される正常データ710または更新データ720の読み出しと判定され、ハイパバイザ20は、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答する。
【0204】
<I/O障害を検出した場合の処理>
図15は、本発明の実施形態のS1070において実行されるI/Oデバイス障害に対応する処理を説明するフローチャートである。
【0205】
ハイパバイザ20は、I/Oデバイス60から取得した障害情報を解析し、障害を検出したI/Oデバイス60を特定する(S1300)。
【0206】
S1320からS1350では、各仮想計算機30について処理が繰り返し実行される。
【0207】
ハイパバイザ20は、I/O割り当て表200を参照し、障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30であるか否かを判定する(S1330)。
【0208】
障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30であると判定された場合、ハイパバイザ20は、仮想計算機30に障害の影響を反映させる。反映手段は、仮想計算機のシャットダウンでもよいし、ゲストに対する障害割り込みの伝達でもよい。
【0209】
障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30でないと判定された場合、ハイパバイザ20は、全ての仮想計算機について処理が完了したか否かを判定し、全ての仮想計算機について処理が完了した場合には処理を終了する。
【0210】
<障害ページの書き込みに対応する処理>
図16は、本発明の実施形態のS1060において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【0211】
ハイパバイザ20は、ゲスト40がPoison700に対してデータを書き込もうとしているか否かを判定する(S1500)。すなわち、更新データ720の書き込みであるか否かが判定される。
【0212】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が書き込もうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「0」であるバイトに書きこまれる場合、ハイパバイザ20は、Poison700に対する書き込みと判定する。
【0213】
ゲスト40がPoison700に対してデータを書き込もうとしていると判定された場合、ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1510)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、更新データ720が格納されるページが異なるためである(図8A〜図8C、図9A〜図9Cおよび図10A〜図10C参照)。
【0214】
発生した障害がキャッシュ障害であると判定された場合(図10A〜図10C参照)、ハイパバイザ20は、Poison700に対するバイト単位の更新を許容するために、ゲスト40が書き込もうとした更新データ720を仮置ページ150に格納する(S1520)。
【0215】
ハイパバイザ20は、ゲスト40が書き込んだメモリアドレスの範囲について、Poison表230の消滅ビットマップ470を「1」に変更する(S1530)。
【0216】
ハイパバイザ20は、Poison700が消滅したか否かを判定する(S1540)。すなわち、Poison700全てについて上書きがされたか否かを判定する。
【0217】
なお、S1540では、ページ内に複数のPoison700が含まれる場合、一つ目のPoison700が消滅すると、ハイパバイザ20は、Poison700が消滅したと判定する。
【0218】
具体的には、ハイパバイザ20は、消滅ビットマップ470を参照し、上書きされたPoison700を構成していた8バイトについて1バイトずつ検査する。ゲスト40からの書き込みによって、初めて8バイト全てが消滅(消滅ビットマップ470の該当ビットが全て「1」)した場合、ハイパバイザ20は、Poison700が消滅したと判定する。
【0219】
Poison700が消滅していないと判定された場合、ハイパバイザ20は、処理を終了する。
【0220】
Poison700が消滅したと判定された場合、ハイパバイザ20は、消滅したPoisonについて、仮置ページ150に格納された更新データ720を、障害ページ160にコピーする(S1550)。これは、図10Cに対応する処理である。
【0221】
ハイパバイザ20は、ページ内の全Poison700が消滅したか否かを判定する(S1560)。
【0222】
具体的には、ハイパバイザ20は、Poisonビットマップ460と消滅ビットマップ470とを参照し、ページ全体について検査する。Poisonビットマップ460と消滅ビットマップ470とが一致する場合には、ページ内の全Poison700がゲスト40からの書き込みによって消滅したと判定される。
【0223】
ページ内の全Poison700が消滅していないと判定された場合、ハイパバイザ20は、処理を終了する。
【0224】
ページ内の全Poison700が消滅したと判定された場合、ハイパバイザ20は、メモリマップの変更またはメモリ保護の解除といった、障害処理を完了させるための処理を実行し(S1570)、処理を終了する。
【0225】
S1510において、発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、Poison700が含まれる信頼できないページへの書き込みを避けるために、ゲスト40が書き込もうとした更新データ720を、代替ページ140に書き込む(S1580)。すなわち、メモリ障害の場合、直接I/Oの仮想計算機30および間接I/Oの仮想計算機30においては、更新データ720は代替ページ140に格納される(図8Bおよび図9B参照)。
【0226】
ハイパバイザ20は、ゲスト40が書き込んだメモリアドレスの範囲について、Poison表230の消滅ビットマップ470を「1」に変更し(S1590)、S1560に進む。
【0227】
S1500において、ゲスト40が正常データ710を書き込もうとしていると判定された場合、ハイパバイザは、発生した障害がメモリ障害であるか否かを判定する(S1600)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、正常データ710が書き込まれるページが異なるためである。
【0228】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1610)。すなわち、仮想計算機30の種類によって処理が分岐する。これは、直接I/Oの仮想計算機30と間接I/Oの仮想計算機30とでは、正常データ710が格納されるページが異なるためである(図8A〜図8C、図9A〜図9C参照)。
【0229】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、ゲスト40が書き込もうとした正常データ710を格納される障害ページ160に書き込み(S1620)、処理を終了する(図8A〜図8C参照)。
【0230】
仮想計算機30が間接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、代替ページ140にゲスト40が書き込もうとした正常データ710を書き込み(S1630)、処理を終了する(図9A〜図9C参照)。
【0231】
S1600において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、S1620に進み、ゲスト40が書き込もうとした正常データ710を障害ページ160に書き込み、処理を終了する(図10A〜図10C参照)。
【0232】
図17は、本発明の実施形態のS1570において実行される通常動作への復帰処理を説明するフローチャートである。
【0233】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1700)。すなわち、発生した障害の種類によって処理が分岐する。
【0234】
発生した障害がメモリ障害であると判定された場合、ハイパバイザは、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1710)。すなわち、仮想計算機30の種類によって処理が分岐する。これは、障害の回復後のメモリマップが異なるためである(表2〜表4、図8C、図9Cおよび図10C参照)。
【0235】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、S1720〜S1760において、DMA一時停止機能117を用いて、I/Oデバイス60によるゲストメモリ320へのアクセスを一時的に止め、その間にメモリ90上のデータおよびメモリマップ・保護表を変更する。
【0236】
具体的には、ハイパバイザ20は、DMA一時停止機能117を用いて、I/Oデバイス60によるゲストメモリ320へのDMAを一時停止させる(S1720)。
【0237】
ハイパバイザ20は、障害ページ160に含まれる正常データ710を、代替ページ140にコピーする(S1730)。
【0238】
ハイパバイザ20は、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260の設定を変更し、障害ページ160の代わりに代替ページ140を割り当てる(S1740)。
【0239】
ハイパバイザ20は、CPU用メモリマップ・保護表250の設定を変更し、障害ページ160に対して適用されていた、アクセス禁止設定によるメモリ保護を解除する(S1750)。
【0240】
その後、ハイパバイザ20は、DMAの停止を解除することによってDMAを再開させ(S1760)、処理を終了する。
【0241】
S1700において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、全Poisonの消滅に伴って不要となった仮置ページ150を解放する(S1790)。
【0242】
ハイパバイザ20は、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260の設定を変更し、障害ページ160の代わりに代替ページ140を割り当てる(S1770)。
【0243】
ハイパバイザ20は、CPU用メモリマップ・保護表250の設定を変更し、障害ページ160に対して適用されていた、アクセス禁止設定によるメモリ保護を解除し(S1780)、処理を終了する。
【0244】
<まとめ>
本発明の一形態によれば、ハイパバイザ20は、ゲスト40によるメモリの読み出しおよび書き込みを監視して、ゲスト40がPoisonを読み出すTRUE DUEとPoisonを読み出さないFALSE DUEとを判別できる。また、ハイパバイザ20は、ゲスト40の実行を読み出しの直前で停止させるため、TRUE DUEが確定した後もシステム停止を回避できる。更に、ゲストの書き込みによってFALSE DUEが確定した場合には、監視を解除してゲストの実行を再開できるため、VMやアプリケーションの動作を継続できる。これらの効果によって、Poisonを読み出すとシステム停止を招くXeonを用いて、障害の影響範囲を限定できる。
【符号の説明】
【0245】
10 物理計算機
20 ハイパバイザ
30 仮想計算機
40 ゲスト
60 I/Oデバイス
70 CPU
80 コンソール
90 メモリ
140 代替ページ
150 仮置ページ
160 障害ページ
200 I/O割り当て表
220 障害処理部
230 Poison表
250 CPU用メモリマップ・保護表
260 I/O用メモリマップ・保護表
320 ゲストメモリ
700 Poison
710 正常データ
720 更新データ
【技術分野】
【0001】
本発明は計算機システムに関し、計算機上で稼動するOSおよびアプリケーションに対して、訂正不能障害を隠蔽する技術に関する。
【背景技術】
【0002】
オープン系サーバの性能および機能拡充に伴い、企業のITシステムでは比較的安価かつ高性能なIntel(登録商標、以下同じ)社のXeon(登録商標、以下同じ) CPUを搭載したサーバ(Xeonサーバ)が主流となっている。Xeon CPUは内部的に多数のCPUコアを搭載しサーバ全体としての処理性能を向上させており、2010年には1CPUパッケージ当り8コアが搭載される見込みである。
【0003】
Xeonサーバに搭載されるCPUコアを有効に活用する方法として、仮想サーバ技術が広く用いられている。仮想サーバ技術では、物理的には1台のXeonサーバ上で複数の仮想的なサーバ環境(仮想計算機、VM)を生成し、VM単位でOSやアプリケーションを稼働させる。近年では標準的なXeonサーバ上で10〜数十のVMを稼働させるユーザも珍しくない。
【0004】
しかし、1台の物理サーバ上で稼動するVM数が増加するにつれ、サーバの部品故障に伴うVMの停止リスクが顕著となってきている。例えば、メモリではECC(Error Correcting Code)による符号化が適用されているが、2bitエラー等の訂正不能障害(UE: Uncorrectable Error)が発生した場合、従来のXeonサーバでは致命的なエラー(Fatal error)として扱われており、当該サーバ上の全てのVMを停止せざるを得なかった。
【0005】
それに対して、2010年に出荷予定のXeon CPU(Nehalem−EX)では、アーキテクチャレベルで障害処理が見直され(例えば、非特許文献1参照)、Poisoningに基づく障害データの追跡とエラー処理メカニズムが追加される。Poisoningとは、ハードウェアがUE検出時に特定のフラグもしくはシンドロームパターン(復号符号誤りパターン)を付与した異常データ(Poison)を生成し、ソフトウェアがPoisonを読みたした時点で障害処理を行う機能である。Poisonが上書きされて消滅した場合は、ソフトウェアがPoisonを読みださないため、障害処理を行われない。
【0006】
UEの検出と障害処理に関して、Nehalem−EXでは命令実行を行うCore部分と、メモリやI/Oとのデータ授受を行うUncore部分とではUEの深刻度が異なる。
(1)Core部分では、命令実行に起因するメモリの読み出しに関してUEが検出される。本ケースではソフトウェアに致命的エラー(Fatal error)が伝達され、当該サーバ上のソフトウェアが全て停止するシステム停止に至る。
(2)Uncore部分では、メモリの周期的な読み出し/再書き込みを行うスクラビング(Scrubbing)処理と、キャッシュからメモリへのデータ書き戻し(Write Back)処理に関してUEが検出される。本ケースではPoisonが生成された後、ソフトウェアに回復可能なエラー(Recoverable Error)が伝達される。
【0007】
従って、Nehalem−EXの場合、Coreで検出されたUEに関しては従来通りのシステム停止等の障害処理になるが、Uncoreで検出されたUEの場合、障害検出を契機に障害部品の部位情報をソフトウェアに伝達することによって、サーバ全体としての動作継続が可能となる。例えば、IDF2009では、回復可能なエラーの伝達を契機にVMを制御するハイパバイザが、障害部品を含むVMのみを停止させる応用が発表されている(例えば、非特許文献2参照)。また、本技術はOSにも適用可能であるため、同契機でOSが障害メモリを含むアプリケーションのみを停止させる応用も発表されている。
【先行技術文献】
【非特許文献】
【0008】
【非特許文献1】IntelR 64 and IA-32 Architectures Software Developer's Manual 3A Chapter15.6 Recovery of Uncorrected Recoverable(UCR) Errors
【非特許文献2】Building IT Server Solutions on Intel Microarchitecture (Nehalem-EX)-based Platforms Featuring Windows Server 2008 R2 and Hyper-V. Intel Developer Forum 2009
【発明の概要】
【発明が解決しようとする課題】
【0009】
前述のスクラビング処理およびWrite Back処理は、実装されている全てのメモリ領域を対象としている。そのためXeonサーバでは、以下のメモリ領域(a)に対してUEを検出した場合でも関連するVMを停止させてしまう問題がある。
(a)ヒープ・スタック領域のうち、未初期化のメモリ領域。
【0010】
メモリ領域(a)は、OSもしくはアプリケーションが初期化を行った上で利用される。従って、スクラビング時およびWrite Back時に検出されたUEは、Core部分に読み出されることがないためFatal errorは生じない。よって、本来は当該領域を含むアプリケーションやVMをすぐに停止する必要はない。
【0011】
しかし、ハイパバイザは一般に、OSおよびアプリケーションのメモリが未初期化なのか初期化済みであるか判定できない。従って、Fatal errorが発生するか否かは、OSおよびアプリケーションがPoisonを読みだした時点で初めて確定する。そのため将来的なFatal errorを回避するためには、UE検出時点で、VMを停止させる等の障害処理をせざるを得なかった。その結果、すぐに停止させる必要のないVMまでも停止させることとなり、障害範囲を限定できなかった。
【0012】
またOSについても、アプリケーションのメモリが未初期化なのか初期化済みなのか判定できないため、同様の問題があった。
【0013】
Xeonサーバにおいて、障害範囲を限定するためには、以下の3つの要件がある。
【0014】
第1の要件:検出されたUE(DUE: Detected Uncorrectable Error)がPoisonを読み出すTRUE DUEなのか、読み出さないFALSE DUEなのかを判別すること。
【0015】
第2の要件:Poisonを読み出すとシステム停止を招くXeon CPUを用いて、Poisonを読み出すTRUE DUEの確定後もシステム停止を回避すること。
【0016】
第3の要件:Poisonを読み出さないFALSE DUEの場合に、VMやアプリケーションの動作を継続させること。
【0017】
これらの要件を全て充足させ、障害範囲を限定することが課題である。
【課題を解決するための手段】
【0018】
本発明の代表的な一例を示せば、以下の通りである。すなわち、プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、前記プロセッサは、前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、前記第2のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、前記方法は、前記第2のソフトウェアが、前記メモリにおける障害の発生を検出する第1のステップと、前記第2のソフトウェアが、前記障害が発生したメモリのアドレスを前記障害情報に追加する第2のステップと、前記第2のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第3のステップと、前記第2のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第4のステップと、を含むことを特徴とする。
【発明の効果】
【0019】
障害が発生したメモリのアドレスに対して読み出しを実行するとシステム停止をさせるプロセッサであっても、第1のソフトウェアのメモリへの読み書きの有無から障害の種別を判別し、第1のソフトウェアから書き込みがされていない場合には障害の影響を当該メモリを使用する第1のソフトウェアのみにとどめ、第1のソフトウェアから書き込みがされている場合には第1のソフトウェアの処理を継続できる。したがって、障害の影響範囲を限定することできる。
【図面の簡単な説明】
【0020】
【図1】本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【図2】本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【図3】本発明の実施形態のI/O割り当て表の一例を示す説明図である。
【図4】本発明の実施形態のPoison表の一例を示す説明図である。
【図5A】本発明の実施形態のCPU用メモリマップ・保護表の一例を示す説明図である。
【図5B】本発明の実施形態のI/O用メモリマップ・保護表の一例を示す説明図である。
【図6】本発明の実施形態のハイパバイザが管理するメモリの一例を示す説明図である。
【図7A】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図7B】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図7C】発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【図8A】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図8B】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図8C】本発明の実施形態において、直接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9A】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9B】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図9C】本発明の実施形態において、間接I/Oの仮想計算機で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10A】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10B】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図10C】本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ内のページの状態を示す説明図である。
【図11】本発明の実施形態のハイパバイザが実行する障害処理の全体像を説明するフローチャートである。
【図12】本発明の実施形態のS1040において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【図13】本発明の実施形態のS1110において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【図14】本発明の実施形態のS1050において実行されるメモリの保護領域の読み出しに対応する処理を説明するフローチャートである。
【図15】本発明の実施形態のS1070において実行されるI/Oデバイス障害に対応する処理を説明するフローチャートである。
【図16】本発明の実施形態のS1060において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【図17】本発明の実施形態のS1570において実行される通常動作への復帰処理を説明するフローチャートである。
【発明を実施するための形態】
【0021】
以下では、本発明の実施形態を添付図面に基づいて説明する。
【0022】
本実施形態ではハイパバイザが本発明における処理を実行する。ハイパバイザがスーパバイザソフトウェアに該当し、OSおよびアプリケーションがユーザソフトウェアに該当する。また、以下では訂正不能障害を、障害と記載する。
【0023】
<ハードウェア構成>
図1は、本発明の実施形態の仮想計算機システムの構成を示すブロック図である。
【0024】
物理計算機10は、障害検出機能を有するCPU70−1〜70−nを1つ以上備え、これらのCPU70−1〜70−nはQPI(QUICK Path InterConnect)またはSMI(Scalable Memory InterConnect)等のチップ間インタフェース820を介してIOH(I/O Hub)800およびメモリ90と接続される。
【0025】
IOH800には、PCIexpress等のバス840を介してI/Oデバイス60が接続される。I/Oデバイス60は、LAN860に接続されるネットワークアダプタ、ディスク装置870等に接続されるSCSIアダプタ、SAN890(Storage Area Network)に接続されるファイバーチャネルアダプタ、およびコンソール80に接続されるグラフィックコントローラなどから構成される。なお、I/Oデバイス60は、複数あってもよい。
【0026】
CPU70はチップ間インタフェース820を介してメモリ90にアクセスし、IOH800からI/Oデバイス60にアクセスして所定の処理を実行する。
【0027】
なお、図1に示す例では、物理計算機10は、1つのI/Oデバイス60のみを備えているが、複数備えてもよい。
【0028】
メモリ90は、CPU70によって実行されるプログラムおよび当該プログラムを実行するときに必要となる情報を格納する。図1に示すように、メモリ90には、ハイパバイザ20がロードされ、当該ハイパバイザ20によって構築される各仮想計算機1(30−1)〜仮想計算機n(30−n)上に、ゲスト40−1〜40−nがそれぞれ実行される。ここで、ゲストとは、OSとアプリケーションとの総称を表す。
【0029】
以下、CPU70−1〜70−nを区別しない場合、CPU70と記載する。仮想計算機1(30−1)〜仮想計算機n(30−n)を区別しない場合、仮想計算機30と記載し、また、ゲスト40−1〜40−nを区別しない場合、ゲスト40と記載する。
【0030】
<ソフトウェア構成>
次に、物理計算機10上で仮想計算機30を実現するソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図2を参照しながら詳述する。
【0031】
図2は、本発明の実施形態の仮想計算機システムのソフトウェアとハードウェアとの要部を示すスタック図である。
【0032】
物理計算機10上では、1つ以上の仮想計算機30を制御するハイパバイザ20が稼動する。
【0033】
仮想計算機30は、CPU70を用いて実現される仮想CPU300と、I/Oデバイス60を用いて実現される仮想I/Oデバイス310と、メモリ90を用いて実現されるゲストメモリ320とから構成される。仮想計算機30上では、ゲスト40が稼動する。
【0034】
ハイパバイザ20は、I/O割り当て表200、エミュレータ210、障害処理部220、およびメモリ管理部240−1〜240−nを備える。
【0035】
I/O割り当て表200は、仮想計算機30に対するI/Oデバイス60の割り当て状態を格納する。I/O割り当て表200の詳細は、図3を用いて後述する。
【0036】
エミュレータ210は、仮想CPU300、仮想I/Oデバイス310およびゲストメモリ320を実現する。
【0037】
障害処理部220は、発生した障害に対応する処理を実行する。障害処理部220は、Poison表230を含む。
【0038】
Poison表230は、Poisonの位置とアクセス状況を格納する。Poison表230の詳細は、図4を用いて後述する。
【0039】
メモリ管理部240−1は、仮想計算機1(30−1)に対するメモリ90の割り当てを管理する。メモリ管理部240−1は、ゲストメモリ320とメモリ90との対応を定め、アクセス権を制定するメモリマップ・保護表を2種類格納する。具体的には、メモリ管理部240−1は、I/O用メモリマップ・保護表260−1およびCPU用メモリマップ・保護表250−1を含む。CPU用メモリマップ・保護表250−1は、CPU70に適用される。I/O用メモリマップ・保護表260は、I/Oデバイス60に適用される。
【0040】
なお、メモリ管理部240−1は、CPU用メモリマップ・保護表250−1とI/O用メモリマップ・保護表260−1とを一つの表として備えていてもよい。
【0041】
なお、他のメモリ管理部240−2〜240−nも同様の構成である。
【0042】
以下、メモリ管理部240−1〜240−nを区別しない場合、メモリ管理部240と記載する。また、I/O用メモリマップ・保護表260−1およびCPU用メモリマップ・保護表250−1についても、区別しない場合、I/O用メモリマップ・保護表260およびCPU用メモリマップ・保護表250と記載する。
【0043】
物理計算機10は、CPU70、I/Oデバイス60およびメモリ90を備える。
【0044】
CPU70は、メモリ保護機能101、メモリコントローラ100およびキャッシュ105を備える。
【0045】
メモリ保護機能101は、ゲストメモリ320に対するアドレス変換とアクセス制御とを行う。メモリ保護機能101は、CPU用メモリマップ・保護表250を参照し、ゲスト40がゲストメモリ320にアクセス(読み出しまたは書き込み)する場合、アクセスの可否と対応するホストアドレスとを判定する。当該判定の結果、アクセスが禁止されていると判定された場合、メモリ保護機能101は、障害処理部220に不正アクセスを通知する。
【0046】
すなわち、メモリ保護機能101は、メモリ90の所定のアドレス範囲のアクセスを禁止するために当該範囲を保護するとともに、当該アドレス範囲に対するアクセスを監視するための機能である。
【0047】
メモリコントローラ100は、メモリ90の読み書きを制御する。メモリコントローラ100は、メモリ障害検出機能102およびスクラビング機能104を備える。
【0048】
メモリ障害検出機能102は、メモリ90からデータが読み出されときに、メモリコントローラ100によって付与されたエラー検出用の符号の妥当性を検査する。ここで、エラー検出用の符号は、メモリコントローラ100によってメモリ90へ書き込まれるデータに付与される。
【0049】
また、メモリ障害検出機能102は、訂正不能な障害が検出された場合に、メモリ90にPoisonを格納し、更にPoisonの格納を障害処理部220に通知する。
【0050】
スクラビング機能104は、ソフトウェアの動作と独立してメモリ90に格納されるデータを検査する。
【0051】
キャッシュ105は、メモリ90上のデータの一部を格納する。キャッシュ105は、キャッシュ障害検出機能107およびライン無効化機能108を備える。
【0052】
キャッシュ障害検出機能107、キャッシュ105によって付与されたエラー検出用の符号の妥当性を適宜検査する。なお。エラー検出用の符号は、キャッシュ105によって格納されるデータに付与される。キャッシュ障害検出機能107は、データがメモリ90に書き戻されるタイミングで障害を見つけた場合にメモリ90にPoisonを格納し、更にPoisonの格納を障害処理部220に通知する。
【0053】
ライン無効化機能108は、キャッシュ障害が発生したキャッシュラインを無効化する。
【0054】
I/Oデバイス60は、アドレス変換機能115、I/O障害検出機能110およびDMA一時停止機能117を備える。
【0055】
アドレス変換機能115は、ゲストメモリ320に対応するメモリ90のアドレスを算出する。アドレス変換機能115は、I/O用メモリマップ・保護表260を参照し、I/Oデバイス60がゲストメモリ320をアクセスする場合に、対応するホストアドレスを判定する。
【0056】
I/O障害検出機能110は、メモリ90からデータを読み出した結果がPoisonだった場合に、障害の発生をIOH800経由でCPU70に伝達する。
【0057】
DMA一時停止機能117は、ゲストメモリ320のアクセスを一時的に保留する。
【0058】
メモリ90は、通常割当用メモリ130と障害対応用メモリ120とに分けて管理される。
【0059】
通常割当用メモリ130は、仮想計算機30に割り当てられるメモリである。障害対応用メモリ120は、障害発生時に使用されるメモリである。
【0060】
通常割当用メモリ130は、Poisonを含む障害ページ160と、Poisonを含まない通常ページ170とから構成される。
【0061】
障害対応用メモリ120は、障害が発生したメモリの代わりに割り当てられる代替ページ140と、ゲスト40がPoisonの上書きに用いる値を一時的に格納する仮置ページ150とから構成される。ここでページとはメモリ割り当ての最小単位を意味し、本実施形態ではページの大きさを「4Kバイト」と仮定する。また、Poisonの大きさは「8バイト」と仮定する。
【0062】
図3は、本発明の実施形態のI/O割り当て表200の一例を示す説明図である。
【0063】
I/O割り当て表200は、仮想計算機30毎に各I/Oデバイス60の割り当て状態を格納する。図3に示す例では、I/O割り当て表200には、各仮想計算機1(30−1)〜仮想計算機n(30−n)に対する、I/Oデバイス1〜mの割り当て状態が格納される。
【0064】
割り当て状態には、「直接I/O」、「間接I/O」および「なし」の3通りがある。
【0065】
「直接I/O」は、I/Oデバイス60がDMA(Direct Memory Access)等を用いてゲストメモリ320を直接操作できる割り当て形態である。
【0066】
「間接I/O」は、I/Oデバイス60にゲストメモリ320を直接操作させず、ハイパバイザ20がゲストメモリ320の操作を代行する形態である。
【0067】
「なし」は、I/Oデバイス60が割り当てられていない事を意味する。
【0068】
本実施形態では、直接I/Oとして割り当てられたI/Oデバイス60を1つ以上含む仮想計算機30を、直接I/Oの仮想計算機と記載する。また、間接I/Oとして割り当てられたI/Oデバイス60のみから成る仮想計算機を、間接I/Oの仮想計算機と記載する。
【0069】
なお、ハイパバイザ20は、仮想計算機30とI/Oデバイス60との対応が分かるのであれば、I/O割り当て表200以外の形式で情報を保持してもよい。
【0070】
図4は、本発明の実施形態のPoison表230の一例を示す説明図である。
【0071】
Poison表230は、障害タイプ400、仮想計算機番号410、ゲストアドレス420、障害ページアドレス430、代替ページアドレス440、仮置ページアドレス450、Poisonビットマップ460および消滅ビットマップ470を含む。
【0072】
障害タイプ400は、検出された障害の種類と仮想計算機30の構成とを格納する。障害タイプ400には、「キャッシュ」、「メモリ(間接I/O)」、「メモリ(直接I/O)」および「正常」の4種がある。
【0073】
「キャッシュ」は、キャッシュ障害検出機能107によって伝達される障害である。「メモリ(間接I/O)」は、メモリ障害検出機能102によって伝達される、間接I/Oの仮想計算機30に割り当てられたメモリに対する障害である。「メモリ(直接I/O)」は、メモリ障害検出機能102によって伝達される直接I/Oの仮想計算機30に割り当てられたメモリに対する障害である。「正常」は、障害が発生していない状態である。
【0074】
仮想計算機番号410は、仮想計算機30を識別するための識別子(通し番号)を格納する。
【0075】
ゲストアドレス420は、ゲストメモリ320のアドレスを格納する。障害ページアドレス430は、障害ページ160のアドレスを格納する。代替ページアドレス440は、代替ページ140のアドレスを格納する。仮置ページアドレス450は、仮置ページ150のアドレスを格納する。
【0076】
Poisonビットマップ460は、ページ内のPoisonの位置を格納する。Poisonビットマップ460は、障害ページ160の1バイト毎に1ビットが対応するビットマップであり、ページ内においてPoisonが格納されたアドレスに対応するビットを「1」とする。
【0077】
消滅ビットマップ470は、ページ内の上書きされたPoisonの位置を格納する。消滅ビットマップ470は、障害ページ160の1バイト毎に1ビットが対応するビットマップであり、Poisonが格納されたアドレスに対して書き込みが検出された場合に当該アドレスに対応するビットを「1」とする。
【0078】
Poison表230は、障害が障害処理部220に伝達された時と、Poisonがゲスト40によって上書きされる時に更新される。また、Poison表230は、仮想計算機30を追加する場合にも参照され、障害の起きていないメモリ90を割り当てる目的で使用される。
【0079】
ハイパバイザ20は、Poisonビットマップ460および消滅ビットマップ470を用いて、Poisonが格納されたアドレスに対して、書き込みがあったか否か、すなわち、アクセスパターンを判定することができる。
【0080】
なお、ハイパバイザ20は、障害に関する情報が分かるのであれば、Poison表70以外の形式で情報を保持してもよい。
【0081】
図5Aは、本発明の実施形態のCPU用メモリマップ・保護表250の一例を示す説明図である。図5Bは、本発明の実施形態のI/O用メモリマップ・保護表260の一例を示す説明図である。
【0082】
図5Aおよび図5Bに示すようにCPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260は同一の構成である。
【0083】
CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260は、ページ毎に一つのエントリを保持する。
【0084】
CPU用メモリマップ・保護表250は、ゲストアドレス500、ホストアドレス510およびアクセス権520を含む。I/O用メモリマップ・保護表260は、ゲストアドレス530、ホストアドレス540およびアクセス権550を含む。
【0085】
ゲストアドレス500、530は、ゲストメモリ320のアドレスを格納する。ゲストアドレス500、530は、ゲストアドレス420と同一のものである。ホストアドレス510、540は、メモリ90のアドレスを格納する。アクセス権520、550は、メモリのアクセス権を格納する。アクセス権520には、「許可」または「禁止」が格納される。
【0086】
なお、ハイパバイザ20は、ゲストアドレスとホストアドレスとの対応が分かるのであれば、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260以外の形式で情報を保持してもよい。
【0087】
図6は、本発明の実施形態のハイパバイザ20が管理するメモリ90の一例を示す説明図である。
【0088】
ハイパバイザ20は、メモリ90の割り当てを管理しており、メモリ90上に当該ハイパバイザ20自身を配置する領域と、仮想計算機30が使用する領域を割り当てる。例えば、図6に示すように、ハイパバイザ20は、ハイパバイザ20自身にアドレスAD0〜AD1を、仮想計算機1(30−1)にアドレスAD1〜AD2を、仮想計算機n(30−n)にアドレスAD3〜AD4を割り当てる。
【0089】
各仮想計算機30に割り当てられた領域には、ゲスト(OS)40が割り当てられる。
【0090】
ハイパバイザ20が使用する領域には、I/O割り当て表200、エミュレータ210、障害処理部220およびメモリ管理部240が割り当てられる。
【0091】
<影響範囲を限定可能な障害の種類>
本実施形態では障害部位として、スクラビングで検出されるメモリ素子の障害(以下、メモリ障害と記載する)と、キャッシュ105からメモリ90へのWrite Back時に検出されるキャッシュの障害(以下、キャッシュ障害と記載する)との両方に対して処理を実行する。本実施形態で対応する障害の条件を(表1)に記載する。
【0092】
【表1】
【0093】
ここで、仮想計算機の構成とは、仮想計算機30に対するI/Oデバイス60の割り当て状態を示す。直接I/Oの仮想計算機30は、1つ以上のI/Oデバイス60からゲストメモリ320に対するDMAが許可される仮想計算機30である。間接I/Oの仮想計算機30は、I/Oデバイス60からゲストメモリ320に対して、一切のDMAが許可されない仮想計算機30である。間接I/Oの仮想計算機30では、ハイパバイザ20のみがゲストメモリ320を操作する。
【0094】
本実施形態では、直接I/Oの仮想計算機30においてメモリ障害が生じた場合、ページ毎のPoisonが1つ(8バイト)だけの簡単なケースのみに対応する。
【0095】
また、簡単のために、以下に列挙する2重障害にも対応しない。すなわち、間接I/Oの仮想計算機30においてメモリ障害が生じ、更に代替ページ140に障害が発生する場合は2重障害とみなして対応しない。また、キャッシュ障害についても仮置ページ150に障害が発生する場合は2重障害とみなして対応しない。また、同一ページに対してメモリ障害とキャッシュ障害との両方が発生する場合も2重障害とみなして対応しない。
【0096】
本実施形態では、I/Oデバイス60が、ゲストメモリ320に対するDMAを一時的に停止させるDMA一時停止機能117を備えることを前提とする。また、CPU70が、故障したキャッシュラインの利用を自動的に停止させるライン無効化機能108を備えることを前提とする。
【0097】
本実施形態では(表1)に示す3つのケースに対応するが、各ケースを区別するための条件判定を省略すれば、2つのケースまたは1つのケースに対応する実施形態も可能である。
【0098】
<障害過程におけるゲストメモリの実現方法>
次に、障害検出からPoisonが消滅する各過程における、ゲストメモリ320の遷移について説明する。
【0099】
図7A、図7Bおよび図7Cは、本発明の実施形態において、障害検出からPoisonが消滅する各過程におけるメモリマップの遷移を示す説明図である。
【0100】
各図はゲストアドレス500とホストアドレス510との対応関係を示している。図7Aは、(1)ゲストアドレス500の所定のページが障害ページ160にマップされた状態を表すメモリマップである。
【0101】
図7Bは、(2)ゲスト40から障害ページ160へのアクセスが禁止された状態を示すメモリマップである。
【0102】
図7Cは、(3)ゲストアドレス500の所定のページのマップ先が代替ページ140に変更された状態を示すメモリマップである。
【0103】
以下、図7Aに示すメモリマップをメモリマップ(1)と記載し、図7Bに示すメモリマップをメモリマップ(2)と記載し、また、図7Cに示すメモリマップをメモリマップ(3)と記載する。
【0104】
図8A、図8Bおよび図8Cは、本発明の実施形態において、直接I/Oの仮想計算機30で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0105】
各状態において、Poison700を含む障害ページ160と、障害ページ160の代わりに割り当てられる代替ページ140との2つを1組として扱う。
【0106】
図8Aは、(a)障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ140の全データは「0」となっている。
【0107】
図8Bは、(b)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。本ケースでは、Poison700を上書きするデータ(更新データ720)が代替ページ140に格納される。一方、正常データ710を上書きする値は、障害ページ160に格納される。
【0108】
(b)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ(Poison700以外のデータ)710を読み出す場合には、ハイパバイザ20が障害ページ160を読み出して応答する。また、(b)の状態で、ゲスト40がCPU70を用いて代替ページ140の更新データ720を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。また、(b)の状態で、I/Oデバイス60が正常データ710またはPoison700を読み出す場合には、障害ページ160のデータがそのまま読み出される。
【0109】
図8Cは、(c)ゲスト40がページ内のPoison700を全て上書きした後の状態を表す。図8Cに示すように、障害ページ160に含まれていたPoison700以外のデータ(正常データ710)が代替ページ140にマージされる。
【0110】
直接I/Oの仮想計算機30で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは(表2)に示すような対応となる。
【0111】
【表2】
【0112】
初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0113】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。なお、I/Oデバイス60に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ(1)が適用され、回復後にメモリマップ(3)が適用される。
【0114】
ゲスト40によるPoisonの上書きによってPoisonが消滅した場合には、CPU70に対するアクセス禁止設定が解除される。障害ページ160の利用を停止して代替ページ140を割り当てたメモリマップ(3)が適用される。
【0115】
回復後は、図7Cに示すようなメモリマップ(3)が適用されるため、Poison消滅後においてはゲスト40によるメモリ操作が代替ページ140に対して行われる。
【0116】
図9A、図9Bおよび図9Cは、本発明の実施形態において、間接I/Oの仮想計算機30で生じたメモリ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0117】
各状態において、Poison700を含む障害ページ160と、障害ページ160の代わりに割り当てられる代替ページ140との2つを1組として扱う。
【0118】
図9Aは、(d)障害発生直後の各ページの状態を表す。割り当てられた直後の代替ページ140には、正常データ710がコピーされ、Poisonに対応する領域の全データは「0」となっている。
【0119】
図9Bは、(e)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。本ケースでは、更新データ720および正常データ710を上書きする値は、共に代替ページ140に格納される。
【0120】
(e)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ(Poison700で以外のデータ)710を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。また、(e)の状態で、ゲスト40がCPU70を用いて代替ページ140中の更新データ720を読み出す場合には、ハイパバイザ20が代替ページ140を読み出して応答する。
【0121】
図9Cは、(f)ゲスト40がページ内のPoison700を全て上書きした後の状態を表す。
【0122】
間接I/Oの仮想計算機30で生じたメモリ障害の場合、メモリマップの遷移とページの状態とは(表3)に示すような対応となる。
【0123】
【表3】
【0124】
I/Oデバイス60に対しては、処理が実行されない。
【0125】
CPU70に対しては、初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0126】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。
【0127】
ゲスト40によるPoisonの上書きによってPoisonが消滅した場合には、CPU70に対するアクセス禁止設定が解除される。障害ページ160の利用を停止して代替ページ140を割り当てたメモリマップ(3)が適用される。
【0128】
回復後は、図7Cに示すようなメモリマップ(3)が適用されるため、Poison消滅後においてはゲスト40によるメモリ操作が代替ページ140に対して行われる。
【0129】
図10A、図10Bおよび図10Cは、本発明の実施形態において、キャッシュ障害の検出からPoisonの消滅の各段階におけるメモリ90内のページの状態を示す説明図である。
【0130】
各状態において、Poison700を含む障害ページ160と、更新データ720を一時的に保持する仮置ページ150との2つを1組として扱う。
【0131】
図10Aは、(g)障害発生直後の状態を表す。割り当てられた直後の仮置ページ150のページ内の全データは「0」となっている。
【0132】
図10Bは、(h)8バイトからなるPoison700の一部をゲスト40がCPU70を用いて上書きした場合の状態を表す。キャッシュ障害に対しては、更新データ720は仮置ページ150に格納される。これは、バイト単位の更新が許されないPoison700を、ゲスト40がバイト単位で更新する場合でも正しく上書きするための措置である。また、正常データ710を上書きする値は、障害ページ160に格納される。
【0133】
(h)の状態で、ゲスト40がCPU70を用いて障害ページ160中の正常データ710を読み出す場合には、ハイパバイザ20が障害ページ160を読み出して応答する。(h)の状態で、一部だけ上書きされたPoisonに対応する更新データ720を読み出す場合には、ハイパバイザ20が仮置ページ150を読み出して応答する。
【0134】
図10Cは、(i)ゲスト40がPoison700の8バイト全体を上書きした後の状態を表す。図10Cに示すように障害ページ160に含まれるPoison700が、仮置ページ150に格納した更新データ720で上書きされる。
【0135】
キャッシュ障害の場合、メモリマップの遷移とページの状態とは(表4)に示すような対応となる。
【0136】
【表4】
【0137】
初期状態ではメモリマップ(1)が適用されており、Poison700を含む障害ページ160がゲストアドレス500からアクセス可能になっている。この状態でゲスト40がPoison700を読み出すと、致命的エラーが発生してシステムが停止する。
【0138】
システム停止を避けるために、ハイパバイザ20は、CPU70に対してメモリマップ(2)を適用し、ゲスト40が動作している間、CPU70による障害ページ160のアクセスを禁止する。これによって、ゲスト40が読み書きを行う直前で、障害処理部220が実行されるようになる。なお、I/Oデバイス60に対しては、致命的エラーが生じないため回復処理完了まではメモリマップ(1)が適用される。
【0139】
次に、ハイパバイザ20が実行する障害処理の一例について、以下、フローチャートを参照しながら説明する。
【0140】
<障害処理の概要>
図11は、本発明の実施形態のハイパバイザ20が実行する障害処理の全体像を説明するフローチャートである。
【0141】
本フローチャートでは、障害検出などを契機としてハイパバイザ20が呼び出されてから、ゲスト40の動作を再開するまでの間の処理を記載する。なお、障害処理に関係する部分だけを詳細化しており、他の処理は全てS1080の中で実行される。
【0142】
ハイパバイザ20は、ハイパバイザ20自身の呼び出された原因をCPU70から受け取り、当該原因が訂正不能障害の検出であるか否かを判定する(S1000)。具体的には、呼び出された原因が、スクラビング中のメモリ障害検出であるか、または、WriteBack中のキャッシュ障害検出であるかが判定される。
【0143】
なお、スクラビング中のメモリ障害は、メモリ障害検出機能102によって検出され、また、WriteBack中のキャッシュ障害は、キャッシュ障害検出機能107によって検出される。
【0144】
ハイパバイザ20が呼び出された原因が訂正不要障害の検出であると判定された場合、ハイパバイザ20は、代替ページ140の割り当て、または、メモリ保護設定の変更など、キャッシュ105およびメモリ90の障害が検出された時に必要な処理を実行し(S1040)、S1080に進む。S1040において実行される処理については、図12を用いて後述する。
【0145】
ハイパバイザ20が呼び出された原因が訂正不要障害の検出でないと判定された場合、ハイパバイザ20は、ハイパバイザ20自身が呼び出された原因が保護領域の読み出しであるか否かを判定する(S1010)。具体的には、呼び出された原因が、ゲスト40による保護されたゲストメモリ320(障害ページ160を含む)の読み出しであるか否かが判定される。
【0146】
ハイパバイザ20が呼び出された原因が保護領域の読み出しであると判定された場合、ハイパバイザ20は、Poison700が読み出されたか否かの判定、または、仮想計算機30への障害反映など、保護領域の読み出しに対応する処理を実行し(S1050)、S1080に進む。S1050において実行される処理については、図14を用いて後述する。
【0147】
ハイパバイザ20が呼び出された原因が保護領域の読み出しでないと判定された場合、ハイパバイザ20は、ハイパバイザ20が呼び出された原因が、保護領域への書き込みであるか否かを判定する(S1020)。具体的には、ゲスト40による保護されたゲストメモリ320(障害ページ160を含む)への書き込みであるか否かが判定される。
【0148】
保護領域への書き込みであると判定された場合、ハイパバイザ20は、メモリ保護の解除など、保護領域の書き込みに対応する処理を実行し(S1060)、S1080に進む。S1060において実行される処理については、図16を用いて後述する。
【0149】
保護領域への書き込みでないと判定された場合、ハイパバイザ20は、ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出であるか否かを判定する(S1030)。
【0150】
なお、I/Oデバイス60による訂正不能障害は、I/O障害検出機能110によって検出される。
【0151】
ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出でないと判定された場合、ハイパバイザ20は、S1080に進む。
【0152】
ハイパバイザ20が呼び出された原因がI/Oデバイス60による訂正不能障害の検出であると判定された場合、ハイパバイザ20は、障害を検出したI/Oデバイスを割り当てた仮想計算機30の特定、および仮想計算機30への障害反映など、I/Oデバイス障害に対応する処理を実行し(S1070)、S1080に進む。S1070において実行される処理については、図15を用いて後述する。
【0153】
ハイパバイザ20は、障害処理とは無関係な通常処理を実行し、ゲスト40を再開し(S1080)、処理を終了する。
【0154】
<キャッシュおよびメモリ障害を検出した場合の処理>
図12は、本発明の実施形態のS1040において実行されるキャッシュおよびメモリ障害検出時の処理を説明するフローチャートである。
【0155】
ハイパバイザ20は、メモリ管理部240を用いて、CPU70からPoisonが生成された領域のメモリアドレスを受け取り、当該メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域、または、ハイパバイザ20の領域であるか否かを判定する(S1100)。
【0156】
メモリアドレスの割り当て先が誰にも割りあてられていない未使用領域であると判定された場合、当該未使用領域の本Poisonによる影響は生じないため、ハイパバイザ20は、処理を終了する。また、メモリアドレスの割当先がハイパバイザ20の領域であると判定された場合、ハイパバイザ20は、当該Poisonが読み出される前に上書きされることを期待して処理を終了する。
【0157】
メモリアドレスの割当先が未使用領域、または、ハイパバイザ20の領域のいずれでもないと判定された場合、ハイパバイザ20は、発生した障害に対して障害影響範囲の限定可否を判定する(S1110)。S1110において実行される処理については、図13を用いて後述する。
【0158】
ハイパバイザ20は、S1110における判定の結果に基づいて、発生した障害に対して障害影響範囲の限定が可能か否かを判定する(S1120)。
【0159】
発生した障害に対して障害影響範囲の限定が可能でないと判定された場合、ハイパバイザ20は、Poisonが生成されたメモリアドレスが割り当てられた仮想計算機30に、障害の影響を反映させ(S1210)、処理を終了する。反映手段は、仮想計算機30のシャットダウンでもよいし、ゲスト40に対する障害割り込みの伝達でもよい。
【0160】
発生した障害に対して障害影響範囲の限定が可能であると判定された場合、ハイパバイザ20は、Poison表230にPoisonの範囲を登録する(S1130)。
【0161】
具体的には、ハイパバイザ20は、障害の種類と仮想計算機のI/O割り当て構成とを障害タイプ400に格納し、また、仮想計算機番号410、障害ページアドレス430のそれぞれに情報を格納する。また、Poisonビットマップ460に、Poisonが生成されたメモリアドレスのページ内オフセットと、Poisonの範囲とを格納し、消滅ビットマップ470をゼロクリアする。さらに、ハイパバイザ20は、CPU用メモリマップ・保護表250を参照して、障害ページアドレス430に対応するゲストアドレスを特定し、当該ゲストアドレスをゲストアドレス420に格納する。
【0162】
ハイパバイザ20は、メモリ保護機能101の設定を変更することによって、CPU70に対する障害ページのメモリ保護を開始する(S1140)。具体的には、CPU用メモリマップ・保護表250の対応するエントリのアクセス権520を「許可」から「禁止」に変更される。
【0163】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1150)。すなわち、障害の種類によって処理が分岐する。
【0164】
キャッシュ障害であると判定された場合、ハイパバイザ20は、Poisonに対するバイト単位の書き込みを一時的に蓄える仮置ページ150を、障害対応用メモリ120上に確保し(S1200)、処理を終了する。具体的には、ハイパバイザ20は、確保された仮置ページ150のアドレスを、Poison表230の仮置ページアドレス450に格納する。なお、障害ページ160の状態は、図10A〜図10Cに示すように変化する。
【0165】
メモリ障害であると判定された場合、ハイパバイザ20は、障害の起きたメモリ90の代わりに使用する代替ページ140を、障害対応用メモリ120上に確保する(S1160)。ハイパバイザ20は、確保された代替ページ140のアドレスを、Poison表230の代替ページアドレス440に格納する。
【0166】
ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1170)。すなわち、障害の起きたメモリ90が割り当てられる仮想計算機30の構成別に処理が分岐する。
【0167】
障害が起きたメモリが割り当てられる仮想計算機が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、処理を終了する。なお、障害ページ160の状態は、図8A〜図8Cに示すように変化する。
【0168】
障害が起きたメモリが割り当てられる仮想計算機が間接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、図9Aに示すように障害ページ160に含まれる正常データ710を代替ページ150にマージし(S1180)、処理を終了する。なお、障害ページ160は、図9A〜図9Cに示すように変化する。
【0169】
図13は、本発明の実施形態のS1110において実行される障害影響範囲の限定可否の判定処理を説明するフローチャートである。
【0170】
本実施形態では実装を簡単にするため、二重障害に類する障害について、FALSE DUEの検出をあきらめ、障害検出の時点で仮想計算機30の通常稼動を断念する。すなわち、二重障害等が発生した仮想計算機30を停止させる。
【0171】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1220)。すなわち、発生した障害の種類によって処理が分岐する。
【0172】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、さらに、障害が発生したメモリ90が割り当てられる仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1235)。すなわち、障害が発生したメモリ90が割り当てられる仮想計算機30の種類によって処理が分岐する。
【0173】
障害が発生したメモリ90が割り当てられる仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、メモリ90に発生したPoisonの数を確認し、2つ以上のPoisonを含むメモリ障害であるか否かを判定する(S1240)。
【0174】
2つ以上のPoisonを含むメモリ障害であると判定された場合、本実施形態ではFALSE DUEが検出されないため、ハイパバイザ20は、障害影響範囲の限定不可と判定し(S1260)、処理を終了する。
【0175】
1つのPoisonだけを含むメモリ障害であると判定された場合、つまり、Poisonの領域サイズが8バイトの場合、ハイパバイザ20は、Poison表230を参照し、既に障害ページ160と判定されているページに2つ目の障害が発生したか否かを判定する(S1245)。
【0176】
既に障害ページ160と判定されているページに2つ目の障害が発生していると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0177】
S1235において、間接I/Oの仮想計算機30と判定された場合、または、S1245において、既に障害ページ160と判定されているページに2つ目の障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、既に代替ページ140として設定されたページに更に障害が発生したか否かを判定する(S1250)。
【0178】
既に代替ページ140と判定されているページに更に障害が発生していると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0179】
既に代替ページ140と判定されているページに更に障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、Poisonが発生したページに、先行するキャッシュ障害があるか否かを判定する(S1270)。
【0180】
Poisonが発生したページに、先行するキャッシュ障害があると判定された場合、ハイパバイザ20は、S1260に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0181】
Poisonが発生したページに、先行するキャッシュ障害がないと判定された場合、ハイパバイザ20は、障害影響範囲の限定が可能であると判定し(S1255)、処理を終了する。
【0182】
S1220において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、Poison表230を参照し、既に仮置ページ150として設定されたページに更に障害が発生したか否かを判定する(S1225)。
【0183】
仮置ページ150として設定されたページに更に障害が発生したと判定された場合、ハイパバイザは、障害影響範囲の限定不可と判定し(S1230)、処理を終了する。
【0184】
仮置ページ150として設定されたページに更に障害が発生していないと判定された場合、ハイパバイザ20は、Poison表230を参照し、Poisonが発生したページに、先行するメモリ障害があるか否かを判定する(S1265)。
【0185】
Poisonが発生したページに、先行するメモリ障害があると判定された場合は、ハイパバイザ20は、S1230に進み、障害影響範囲の限定不可と判定して処理を終了する。
【0186】
Poisonが発生したページに、先行するメモリ障害がないと判定された場合は、ハイパバイザ20は、S1255に進み、障害影響範囲の限定が可能であると判定して処理を終了する。
【0187】
<障害ページの読み出しに対応する処理>
図14は、本発明の実施形態のS1050において実行されるメモリ90の保護領域の読み出しに対応する処理を説明するフローチャートである。
【0188】
ハイパバイザ20は、ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしているか否かを判定する(S1400)。
【0189】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「0」であるバイトが読み出そうとしたメモリアドレスに含まれる場合、ハイパバイザ20は、ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしていると判定する。
【0190】
ゲスト40が更新データ720が上書きされていないPoison700を読み出そうとしていると判定された場合、ハイパバイザ20は、Poison700を読み出そうとしているゲスト40が稼働する仮想計算機30に、障害の影響を反映させ(S1410)、処理を終了する。反映手段は、仮想計算機のシャットダウンでもよいし、ゲスト40に対する障害割り込みの伝達でもよい。
【0191】
ゲスト40がPoison700以外のデータ(正常データ710または更新データ720)を読み出そうとしていると判定された場合、ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1420)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、Poison700以外のデータが格納されるページが異なるためである(図8A〜図8C、図9A〜図9Cおよび図10A〜図10C参照)。
【0192】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1430)。すなわち、障害が発生したメモリ90が割り当てられる仮想計算機30の種類によって処理が分岐する。これは、直接I/Oの仮想計算機30と間接I/Oの仮想計算機30とでは、Poison700以外のデータが格納されるページが異なるためである(図8A〜図8C、図9A〜図9C参照)。
【0193】
仮想計算機30が間接I/Oの仮想計算機30であると判定された場合、正常データ710と更新データ720との両方が代替ページ140に存在するため(図9A〜図9C参照)、ハイパバイザ20は、代替ページ140を読み出して応答し(S1460)、処理を終了する。
【0194】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、Poisonのうち上書きされたデータ(更新データ720)の読み出しであるか否かを判定する(S1440)。これは、直接I/Oの仮想計算機30では、正常データ710と更新データ720とが別々のページに格納されるためである(図8A〜図8C参照)。
【0195】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「1」であるバイトが読みだされる場合、更新データ720の読み出しを意味するため、ハイパバイザ20は、Poisonのうち上書きされたデータ(更新データ720)の読み出しであると判定する。
【0196】
Poisonのうち上書きされたデータ(更新データ720)の読み出しであると判定された場合、ハイパバイザ20は、更新データ720が格納される代替ページ140を読み出して応答し(S1450)、処理を終了する。
【0197】
Poisonのうち上書きされたデータ(更新データ720)以外のデータ、すなわち、Poisonビットマップ460が「0」であるバイトが読み出される場合、正常データ710の読み出しを意味するため、ハイパバイザ20は、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答し(S1460)、処理を終了する。
【0198】
S1420において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、仮置ページ150に一時的に格納される更新データ720の読み出しであるか否かを判定する(S1470)。これは、キャッシュ障害の場合、正常データ710と更新データ720とが別々のページに格納されるためである(図10A〜図10C参照)。
【0199】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が読み出そうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「1」であるバイトが読みだされる場合に限り、更に当該アドレスを含む整列された8バイト(アドレス8n〜8n+7)において、消滅ビットマップ470に「0」であるバイトが含まれているか否かを検査する。
【0200】
当該条件を満たす場合には、仮置ページ150に一時的に格納される更新データ720の読み出しであると判定される。
【0201】
仮置ページ150に一時的に格納される更新データ720の読み出しでないと判定された場合、ハイパバイザ20は、S1460に進み、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答し、処理を終了する。
【0202】
仮置ページ150に一時的に格納される更新データ720の読み出しであると判定された場合、ハイパバイザ20は、仮置ページ150を読み出して応答し(S1480)、処理を終了する。
【0203】
仮置ページ150に一時的に格納される更新データ720の読み出しは、障害ページ160に格納される正常データ710または更新データ720の読み出しと判定され、ハイパバイザ20は、直接I/Oの仮想計算機30に対して正常データ710が格納される障害ページ160を読み出して応答する。
【0204】
<I/O障害を検出した場合の処理>
図15は、本発明の実施形態のS1070において実行されるI/Oデバイス障害に対応する処理を説明するフローチャートである。
【0205】
ハイパバイザ20は、I/Oデバイス60から取得した障害情報を解析し、障害を検出したI/Oデバイス60を特定する(S1300)。
【0206】
S1320からS1350では、各仮想計算機30について処理が繰り返し実行される。
【0207】
ハイパバイザ20は、I/O割り当て表200を参照し、障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30であるか否かを判定する(S1330)。
【0208】
障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30であると判定された場合、ハイパバイザ20は、仮想計算機30に障害の影響を反映させる。反映手段は、仮想計算機のシャットダウンでもよいし、ゲストに対する障害割り込みの伝達でもよい。
【0209】
障害を検出したI/Oデバイス60が割り当てられていた仮想計算機30でないと判定された場合、ハイパバイザ20は、全ての仮想計算機について処理が完了したか否かを判定し、全ての仮想計算機について処理が完了した場合には処理を終了する。
【0210】
<障害ページの書き込みに対応する処理>
図16は、本発明の実施形態のS1060において実行される保護領域の書き込みに対応する処理を説明するフローチャートである。
【0211】
ハイパバイザ20は、ゲスト40がPoison700に対してデータを書き込もうとしているか否かを判定する(S1500)。すなわち、更新データ720の書き込みであるか否かが判定される。
【0212】
具体的には、ハイパバイザ20は、Poison表230を参照し、ゲスト40が書き込もうとしたメモリアドレスに対するアクセスパターンをバイト単位で検査する。Poisonビットマップ460が「1」で、消滅ビットマップ470が「0」であるバイトに書きこまれる場合、ハイパバイザ20は、Poison700に対する書き込みと判定する。
【0213】
ゲスト40がPoison700に対してデータを書き込もうとしていると判定された場合、ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1510)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、更新データ720が格納されるページが異なるためである(図8A〜図8C、図9A〜図9Cおよび図10A〜図10C参照)。
【0214】
発生した障害がキャッシュ障害であると判定された場合(図10A〜図10C参照)、ハイパバイザ20は、Poison700に対するバイト単位の更新を許容するために、ゲスト40が書き込もうとした更新データ720を仮置ページ150に格納する(S1520)。
【0215】
ハイパバイザ20は、ゲスト40が書き込んだメモリアドレスの範囲について、Poison表230の消滅ビットマップ470を「1」に変更する(S1530)。
【0216】
ハイパバイザ20は、Poison700が消滅したか否かを判定する(S1540)。すなわち、Poison700全てについて上書きがされたか否かを判定する。
【0217】
なお、S1540では、ページ内に複数のPoison700が含まれる場合、一つ目のPoison700が消滅すると、ハイパバイザ20は、Poison700が消滅したと判定する。
【0218】
具体的には、ハイパバイザ20は、消滅ビットマップ470を参照し、上書きされたPoison700を構成していた8バイトについて1バイトずつ検査する。ゲスト40からの書き込みによって、初めて8バイト全てが消滅(消滅ビットマップ470の該当ビットが全て「1」)した場合、ハイパバイザ20は、Poison700が消滅したと判定する。
【0219】
Poison700が消滅していないと判定された場合、ハイパバイザ20は、処理を終了する。
【0220】
Poison700が消滅したと判定された場合、ハイパバイザ20は、消滅したPoisonについて、仮置ページ150に格納された更新データ720を、障害ページ160にコピーする(S1550)。これは、図10Cに対応する処理である。
【0221】
ハイパバイザ20は、ページ内の全Poison700が消滅したか否かを判定する(S1560)。
【0222】
具体的には、ハイパバイザ20は、Poisonビットマップ460と消滅ビットマップ470とを参照し、ページ全体について検査する。Poisonビットマップ460と消滅ビットマップ470とが一致する場合には、ページ内の全Poison700がゲスト40からの書き込みによって消滅したと判定される。
【0223】
ページ内の全Poison700が消滅していないと判定された場合、ハイパバイザ20は、処理を終了する。
【0224】
ページ内の全Poison700が消滅したと判定された場合、ハイパバイザ20は、メモリマップの変更またはメモリ保護の解除といった、障害処理を完了させるための処理を実行し(S1570)、処理を終了する。
【0225】
S1510において、発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、Poison700が含まれる信頼できないページへの書き込みを避けるために、ゲスト40が書き込もうとした更新データ720を、代替ページ140に書き込む(S1580)。すなわち、メモリ障害の場合、直接I/Oの仮想計算機30および間接I/Oの仮想計算機30においては、更新データ720は代替ページ140に格納される(図8Bおよび図9B参照)。
【0226】
ハイパバイザ20は、ゲスト40が書き込んだメモリアドレスの範囲について、Poison表230の消滅ビットマップ470を「1」に変更し(S1590)、S1560に進む。
【0227】
S1500において、ゲスト40が正常データ710を書き込もうとしていると判定された場合、ハイパバイザは、発生した障害がメモリ障害であるか否かを判定する(S1600)。すなわち、発生した障害の種類によって処理が分岐する。これは、発生した障害の種類によって、正常データ710が書き込まれるページが異なるためである。
【0228】
発生した障害がメモリ障害であると判定された場合、ハイパバイザ20は、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1610)。すなわち、仮想計算機30の種類によって処理が分岐する。これは、直接I/Oの仮想計算機30と間接I/Oの仮想計算機30とでは、正常データ710が格納されるページが異なるためである(図8A〜図8C、図9A〜図9C参照)。
【0229】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、ゲスト40が書き込もうとした正常データ710を格納される障害ページ160に書き込み(S1620)、処理を終了する(図8A〜図8C参照)。
【0230】
仮想計算機30が間接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、代替ページ140にゲスト40が書き込もうとした正常データ710を書き込み(S1630)、処理を終了する(図9A〜図9C参照)。
【0231】
S1600において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、S1620に進み、ゲスト40が書き込もうとした正常データ710を障害ページ160に書き込み、処理を終了する(図10A〜図10C参照)。
【0232】
図17は、本発明の実施形態のS1570において実行される通常動作への復帰処理を説明するフローチャートである。
【0233】
ハイパバイザ20は、発生した障害がメモリ障害であるか否かを判定する(S1700)。すなわち、発生した障害の種類によって処理が分岐する。
【0234】
発生した障害がメモリ障害であると判定された場合、ハイパバイザは、仮想計算機30が直接I/Oの仮想計算機30であるか否かを判定する(S1710)。すなわち、仮想計算機30の種類によって処理が分岐する。これは、障害の回復後のメモリマップが異なるためである(表2〜表4、図8C、図9Cおよび図10C参照)。
【0235】
仮想計算機30が直接I/Oの仮想計算機30であると判定された場合、ハイパバイザ20は、S1720〜S1760において、DMA一時停止機能117を用いて、I/Oデバイス60によるゲストメモリ320へのアクセスを一時的に止め、その間にメモリ90上のデータおよびメモリマップ・保護表を変更する。
【0236】
具体的には、ハイパバイザ20は、DMA一時停止機能117を用いて、I/Oデバイス60によるゲストメモリ320へのDMAを一時停止させる(S1720)。
【0237】
ハイパバイザ20は、障害ページ160に含まれる正常データ710を、代替ページ140にコピーする(S1730)。
【0238】
ハイパバイザ20は、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260の設定を変更し、障害ページ160の代わりに代替ページ140を割り当てる(S1740)。
【0239】
ハイパバイザ20は、CPU用メモリマップ・保護表250の設定を変更し、障害ページ160に対して適用されていた、アクセス禁止設定によるメモリ保護を解除する(S1750)。
【0240】
その後、ハイパバイザ20は、DMAの停止を解除することによってDMAを再開させ(S1760)、処理を終了する。
【0241】
S1700において、発生した障害がキャッシュ障害であると判定された場合、ハイパバイザ20は、全Poisonの消滅に伴って不要となった仮置ページ150を解放する(S1790)。
【0242】
ハイパバイザ20は、CPU用メモリマップ・保護表250およびI/O用メモリマップ・保護表260の設定を変更し、障害ページ160の代わりに代替ページ140を割り当てる(S1770)。
【0243】
ハイパバイザ20は、CPU用メモリマップ・保護表250の設定を変更し、障害ページ160に対して適用されていた、アクセス禁止設定によるメモリ保護を解除し(S1780)、処理を終了する。
【0244】
<まとめ>
本発明の一形態によれば、ハイパバイザ20は、ゲスト40によるメモリの読み出しおよび書き込みを監視して、ゲスト40がPoisonを読み出すTRUE DUEとPoisonを読み出さないFALSE DUEとを判別できる。また、ハイパバイザ20は、ゲスト40の実行を読み出しの直前で停止させるため、TRUE DUEが確定した後もシステム停止を回避できる。更に、ゲストの書き込みによってFALSE DUEが確定した場合には、監視を解除してゲストの実行を再開できるため、VMやアプリケーションの動作を継続できる。これらの効果によって、Poisonを読み出すとシステム停止を招くXeonを用いて、障害の影響範囲を限定できる。
【符号の説明】
【0245】
10 物理計算機
20 ハイパバイザ
30 仮想計算機
40 ゲスト
60 I/Oデバイス
70 CPU
80 コンソール
90 メモリ
140 代替ページ
150 仮置ページ
160 障害ページ
200 I/O割り当て表
220 障害処理部
230 Poison表
250 CPU用メモリマップ・保護表
260 I/O用メモリマップ・保護表
320 ゲストメモリ
700 Poison
710 正常データ
720 更新データ
【特許請求の範囲】
【請求項1】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、
前記第2のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記方法は、
前記第2のソフトウェアが、前記メモリにおける障害の発生を検出する第1のステップと、
前記第2のソフトウェアが、前記障害が発生したメモリのアドレスを前記障害情報に追加する第2のステップと、
前記第2のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第3のステップと、
前記第2のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第4のステップと、を含むことを特徴とする障害処理方法。
【請求項2】
前記第4のステップは、
前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定する第5のステップと、
前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に基づいて、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する第6のステップと、
前記判定結果に基づいて、前記障害処理を実行する第7のステップと、を更に含むことを特徴とする請求項1に記載の障害処理方法。
【請求項3】
前記障害情報に含まれる前記アクセス関連情報は、前記障害が発生したメモリのアドレスに対して書き込みされたことを示す第1のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みされていないことを示す第2のアクセス情報のいずれかを格納し、
前記第2のステップは、更に、前記障害が発生したメモリのアドレスとともに、前記第2のアクセス情報を前記障害情報に追加する第8のステップを含み、
前記第4のステップは、更に、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第2のアクセス情報から前記第1のアクセス情報に変更する第9のステップを含み、
前記第6のステップは、更に、前記アクセス関連情報が、前記第1のアクセス情報及び第2のアクセス情報のいずれであるかを判定する第10のステップを含み、
前記第7のステップは、更に、前記アクセス関連情報が、前記第2のアクセス情報であると判定された場合に、前記障害処理を実行する第11のステップを含むことを特徴とする請求項2の記載の障害処理方法。
【請求項4】
前記第9のステップは、
前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持する第12のステップと、
前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第1のアクセス情報であるメモリのアドレスに対する前記第1のソフトウェアからのアクセスを許可する第13のステップと、を更に含むことを特徴とする請求項3に記載の障害処理方法。
【請求項5】
前記メモリは、前記第1のソフトウェアによって使用される第1のメモリ領域と、前記障害処理を実行するときの使用される第2のメモリ領域とを含み、
前記第2のステップは、更に、前記第2のメモリ領域を前記第1のソフトウェアに割り当てる第14のステップを含むことを特徴とする請求項2に記載の障害処理方法。
【請求項6】
前記第2のステップは、更に、前記第1のメモリ領域に格納されるデータを前記第2のメモリ領域に格納する第15のステップを含むことを特徴とする請求項5に記載の障害処理方法。
【請求項7】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記メモリにおける障害の発生を検出し、前記障害が発生したときに前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記障害が発生したメモリのアドレスを前記障害情報に追加し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行することを特徴とする計算機。
【請求項8】
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、当該アクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に基づいて、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定し、
前記判定結果に基づいて、前記障害処理を実行することを特徴とする請求項7に記載の計算機。
【請求項9】
前記プロセッサは、前記障害情報に含まれる前記アクセス関連情報に、前記障害が発生したメモリのアドレスに対して書き込みされたことを示す第1のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みされていないことを示す第2のアクセス情報のいずれかを格納し、
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを追加する場合に、当該メモリのアドレスにおける前記アクセス関連情報に前記第2のアクセス情報を追加し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第2のアクセス情報から前記第1のアクセス情報に変更し、
前記プロセッサは、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する場合に、前記アクセス関連情報が、前記第1のアクセス情報及び第2のアクセス情報のいずれであるかを判定し、
前記プロセッサは、前記アクセス関連情報が、前記第2のアクセス情報であると判定された場合に、前記障害処理を実行することを特徴とする請求項8の記載の計算機。
【請求項10】
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持し、
前記プロセッサは、前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第1のアクセス情報であるメモリのアドレスに対する前記第1のソフトウェアからのアクセスを許可することを特徴とする請求項9に記載の計算機。
【請求項11】
前記メモリは、前記第1のソフトウェアによって使用される第1のメモリ領域と、前記障害処理を実行するときの使用される第2のメモリ領域とを含み、
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、前記第2のメモリ領域を前記第1のソフトウェアに割り当てることを特徴とする請求項8に記載の計算機。
【請求項12】
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、更に、前記第1のメモリ領域に格納されるデータを前記第2のメモリ領域に格納することを特徴とする請求項11に記載の計算機。
【請求項1】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機における障害処理方法であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、
前記第2のソフトウェアは、障害が発生した前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記方法は、
前記第2のソフトウェアが、前記メモリにおける障害の発生を検出する第1のステップと、
前記第2のソフトウェアが、前記障害が発生したメモリのアドレスを前記障害情報に追加する第2のステップと、
前記第2のソフトウェアが、前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視する第3のステップと、
前記第2のソフトウェアが、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行する第4のステップと、を含むことを特徴とする障害処理方法。
【請求項2】
前記第4のステップは、
前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定する第5のステップと、
前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に基づいて、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する第6のステップと、
前記判定結果に基づいて、前記障害処理を実行する第7のステップと、を更に含むことを特徴とする請求項1に記載の障害処理方法。
【請求項3】
前記障害情報に含まれる前記アクセス関連情報は、前記障害が発生したメモリのアドレスに対して書き込みされたことを示す第1のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みされていないことを示す第2のアクセス情報のいずれかを格納し、
前記第2のステップは、更に、前記障害が発生したメモリのアドレスとともに、前記第2のアクセス情報を前記障害情報に追加する第8のステップを含み、
前記第4のステップは、更に、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第2のアクセス情報から前記第1のアクセス情報に変更する第9のステップを含み、
前記第6のステップは、更に、前記アクセス関連情報が、前記第1のアクセス情報及び第2のアクセス情報のいずれであるかを判定する第10のステップを含み、
前記第7のステップは、更に、前記アクセス関連情報が、前記第2のアクセス情報であると判定された場合に、前記障害処理を実行する第11のステップを含むことを特徴とする請求項2の記載の障害処理方法。
【請求項4】
前記第9のステップは、
前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持する第12のステップと、
前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第1のアクセス情報であるメモリのアドレスに対する前記第1のソフトウェアからのアクセスを許可する第13のステップと、を更に含むことを特徴とする請求項3に記載の障害処理方法。
【請求項5】
前記メモリは、前記第1のソフトウェアによって使用される第1のメモリ領域と、前記障害処理を実行するときの使用される第2のメモリ領域とを含み、
前記第2のステップは、更に、前記第2のメモリ領域を前記第1のソフトウェアに割り当てる第14のステップを含むことを特徴とする請求項2に記載の障害処理方法。
【請求項6】
前記第2のステップは、更に、前記第1のメモリ領域に格納されるデータを前記第2のメモリ領域に格納する第15のステップを含むことを特徴とする請求項5に記載の障害処理方法。
【請求項7】
プロセッサと、前記プロセッサに接続されるメモリとを備える計算機であって、
前記プロセッサは、
前記メモリの所定のアドレスへのアクセスを禁止するメモリ保護機能を備え、
前記メモリに格納される、第1のソフトウェアと前記第1のソフトウェアの実行を監視する第2のソフトウェアとを実行し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記メモリにおける障害の発生を検出し、前記障害が発生したときに前記メモリのアドレスに関するアドレス情報と、前記アドレスに対するアクセス状況に関するアクセス関連情報とを含む障害情報を保持し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記障害が発生したメモリのアドレスを前記障害情報に追加し、
前記プロセッサは、前記第2のソフトウェアを実行することによって前記メモリ保護機能の設定を変更することによって前記障害が発生したメモリのアドレスへのアクセスを禁止し、前記障害が発生したメモリのアドレスに対するアクセス状況を監視し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、障害処理を実行することを特徴とする計算機。
【請求項8】
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスを検出した場合に、当該アクセスが、前記障害が発生したメモリのアドレスに対する読み出し、または、前記障害が発生したメモリのアドレスに対する書き込み、であるか否かを判定し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが読み出しであると判定された場合に、前記障害情報に基づいて、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定し、
前記判定結果に基づいて、前記障害処理を実行することを特徴とする請求項7に記載の計算機。
【請求項9】
前記プロセッサは、前記障害情報に含まれる前記アクセス関連情報に、前記障害が発生したメモリのアドレスに対して書き込みされたことを示す第1のアクセス情報、または、前記障害が発生したメモリのアドレスに対して書き込みされていないことを示す第2のアクセス情報のいずれかを格納し、
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを追加する場合に、当該メモリのアドレスにおける前記アクセス関連情報に前記第2のアクセス情報を追加し、
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記アクセス関連情報を、前記第2のアクセス情報から前記第1のアクセス情報に変更し、
前記プロセッサは、前記第1のソフトウェアからの読み出しが検出されたアドレスのアクセス状況を判定する場合に、前記アクセス関連情報が、前記第1のアクセス情報及び第2のアクセス情報のいずれであるかを判定し、
前記プロセッサは、前記アクセス関連情報が、前記第2のアクセス情報であると判定された場合に、前記障害処理を実行することを特徴とする請求項8の記載の計算機。
【請求項10】
前記プロセッサは、前記障害が発生したメモリのアドレスに対する前記第1のソフトウェアからのアクセスが書き込みであると判定された場合に、前記障害が発生したメモリのアドレスに対して書き込まれるデータを保持し、
前記プロセッサは、前記メモリ保護機能の設定を変更することによって、前記アクセス関連情報が前記第1のアクセス情報であるメモリのアドレスに対する前記第1のソフトウェアからのアクセスを許可することを特徴とする請求項9に記載の計算機。
【請求項11】
前記メモリは、前記第1のソフトウェアによって使用される第1のメモリ領域と、前記障害処理を実行するときの使用される第2のメモリ領域とを含み、
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、前記第2のメモリ領域を前記第1のソフトウェアに割り当てることを特徴とする請求項8に記載の計算機。
【請求項12】
前記プロセッサは、前記第2のソフトウェアを実行することによって、前記障害が発生したメモリのアドレスを前記障害情報に追加した後に、更に、前記第1のメモリ領域に格納されるデータを前記第2のメモリ領域に格納することを特徴とする請求項11に記載の計算機。
【図1】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7A】
【図7B】
【図7C】
【図8A】
【図8B】
【図8C】
【図9A】
【図9B】
【図9C】
【図10A】
【図10B】
【図10C】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5A】
【図5B】
【図6】
【図7A】
【図7B】
【図7C】
【図8A】
【図8B】
【図8C】
【図9A】
【図9B】
【図9C】
【図10A】
【図10B】
【図10C】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2011−233007(P2011−233007A)
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願番号】特願2010−103911(P2010−103911)
【出願日】平成22年4月28日(2010.4.28)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成23年11月17日(2011.11.17)
【国際特許分類】
【出願日】平成22年4月28日(2010.4.28)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]