(57)【要約】      （修正有）【課題】ｘ８６ＣＰＵを搭載する計算機におけるメモリ検査において、低頻度処理に関してシステムソフトウェアのダウンを回避し、かつ、メモリ検査による性能低下の抑止及びメモリ容量の減少の回避を実現する。【解決手段】プロセッサ、メモリ及びＩ／Ｏデバイスを備える計算機であって、メモリ９０は、システム制御部を実現するシステムソフトウェア２０及び検査部５０を実現する検査プログラムを格納し、プロセッサは、障害アドレスをシステム制御部に通知するメモリ障害通知部７５を有し、システム制御部は、発生したイベントの種類に基づいて、検査プログラムを実行する必要があるか否かを判定する調整部３００と、メモリの異なる記憶領域を使用してイベントを処理する複数のイベント処理部と、メモリ障害を記録する障害記録部と、検査結果情報を参照して、イベントを処理するイベント処理部を選択するイベント処理部セレクタ１１０と、を有する。【選択図】図２
2014044511.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるＩ／Ｏデバイスを備える計算機であって、
前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、
前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、
前記システム制御部は、
前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する調整部と、
前記メモリの異なる記憶領域を使用して前記イベントを処理する複数のイベント処理部と、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を保持する検査結果情報と、
前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定し、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する障害記録部と、
前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択するイベント処理部セレクタと、
を有することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記システム制御部は、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域を特定するアドレス範囲を格納するメモリマップを管理し、
前記調整部の判定の結果に基づいて、前記検査プログラムの実行を制御するメモリ検査制御部を有し、
前記検査部は、前記メモリマップを参照して、検査対象のアドレス範囲を特定する検査対象選択部を有することを特徴とする計算機。
【請求項３】
請求項２に記載の計算機であって、
前記検査部は、前記メモリ検査の実行状態を保持する検査状態保持部を管理し、
前記システム制御部は、前記検査状態保持部から取得された前記メモリ検査の実行状態に基づいて、前記メモリ検査が終了するまで前記イベントの処理の開始を遅らせる検査待ち合わせ部を有することを特徴とする計算機。
【請求項４】
請求項２又は請求項３に記載の計算機であって、
前記調整部は、
前記各イベントの重要度を保持する重要度情報を管理し、
前記重要度情報に基づいて、前記検査プログラムを実行する必要があるか否かを判定する重要度判定部を有することを特徴とする計算機。
【請求項５】
請求項４に記載の計算機であって、
前記調整部は、
前記イベント毎に、前回の前記イベントに対応する処理が実行された時刻を保持する時刻情報を管理し、
前記時刻情報に基づいて、所定のイベントが前回発生してから再度発生するまでの経過時刻を算出し、前記算出された経過時刻に基づいて、前記検査プログラムを実行する必要があるか否かを判定する頻度判定部を有することを特徴とする計算機。
【請求項６】
請求項２又は３に記載の計算機であって、
前記調整部は、前記イベント毎に、前記検査プログラムを実行する必要があるか否かを示す情報を保持する検査要否情報を管理し、
前記調整部は、前記検査要否情報を参照して、前記検査プログラムを実行する必要があるか否かを判定することを特徴とする計算機。
【請求項７】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるＩ／Ｏデバイスを備える計算機におけるメモリ検査方法であって、
前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、
前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、
前記システム制御部は、
前記メモリの異なる記憶領域を使用して前記システム制御部の稼働中に発生したイベントを処理する複数のイベント処理部と、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を保持する検査結果情報と、を有し、
前記方法は、
前記システム制御部が、前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する第１のステップと、
前記システム制御部が、前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定する第２のステップと、
前記システム制御部が、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する第３のステップと、
前記システム制御部が、前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択する第４のステップと、
を含むことを特徴とするメモリ検査方法。
【請求項８】
請求項７に記載のメモリ検査方法であって、
前記システム制御部は、前記複数のイベント処理部の各々が使用する前記メモリの記憶領域を特定するアドレス範囲を格納するメモリマップを管理し、
前記第１のステップは、
前記システム制御部が、前記検査プログラムを実行する必要であると判定された場合に、前記検査プログラムを実行させるステップと、
前記検査部が、前記メモリマップを参照して、検査対象のアドレス範囲を特定するステップと、を含むことを特徴とするメモリ検査方法。
【請求項９】
請求項８に記載のメモリ検査方法であって、
前記検査部は、前記メモリ検査の実行状態を保持する検査状態保持部を管理し、
前記方法は、前記システム制御部が、前記検査状態保持部から取得された前記メモリ検査の実行状態に基づいて、前記メモリ検査が終了するまで前記イベントの処理の開始を遅らせるステップを含むことを特徴とするメモリ検査方法。
【請求項１０】
請求項８又は請求項９に記載のメモリ検査方法であって、
前記システム制御部は、前記各イベントの重要度を保持する重要度情報を管理し、
前記第１のステップでは、前記重要度情報に基づいて、前記検査プログラムを実行する必要があるか否かを判定することを特徴とするメモリ検査方法。
【請求項１１】
請求項１０に記載のメモリ検査方法であって、
前記システム制御部は、前記イベント毎に、前回の前記イベントに対応する処理が実行された時刻を保持する時刻情報を管理し、
前記第１のステップは、
前記時刻情報に基づいて、所定のイベントが前回発生してから再度発生するまでの経過時刻を算出するステップと、
前記算出された経過時刻に基づいて、前記検査プログラムを実行する必要があるか否かを判定するステップと、を含むことを特徴とするメモリ検査方法。
【請求項１２】
請求項８又は請求項９に記載のメモリ検査方法であって、
前記システム制御部は、前記イベント毎に、前記検査プログラムを実行する必要があるか否かを示す情報を保持する検査要否情報を管理し、
前記第１のステップでは、前記検査要否情報を参照して、前記検査プログラムを実行する必要があるか否かを判定することを特徴とするメモリ検査方法。
【請求項１３】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるＩ／Ｏデバイスを備える計算機であって、
前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、
前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、
前記システム制御部は、
前記検査プログラムの実行を制御するメモリ検査制御部と、
前記検査部が実行するメモリ検査の結果に基づいて、前記メモリ障害が発生していない前記メモリの記憶領域のみを使用して前記システム制御部の処理を継続する縮退処理部と、を有することを特徴とする計算機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機資源を用いて複数のプログラムを稼働させるシステムソフトウェアによって実現されるシステム制御部がメモリ障害を検出する技術に関する。
【背景技術】
【０００２】
ｘ８６  ＣＰＵを搭載したオープン系サーバの性能及び機能拡充に伴い、サーバに搭載されるＣＰＵコアを有効に活用する方法として、サーバ仮想化の機能を提供するハイパバイザが広く用いられている。ハイパバイザは、１台の物理サーバが搭載するＣＰＵ、メモリ及びＩ／Ｏデバイス等の計算機資源を用いて複数の仮想計算機を生成し、それぞれ仮想計算機上でＯＳ及びアプリケーションを稼働させるシステムソフトウェアである。
【０００３】
マルチコアＣＰＵの普及に伴って１台の物理サーバ上に生成する仮想計算機の台数は増加傾向にあり、物理サーバが搭載するメモリ容量も増加傾向にある。これに伴って、メモリ容量を増加させるために、メモリモジュールに含まれるメモリ素子の微細化が進んでいる。
【０００４】
一般的に、半導体を微細化すると、宇宙線などの外乱及びメモリ素子の故障に起因するデータ化けが起き易くなる。データ化けに起因する誤動作を防ぐために、サーバ用ＣＰＵ内のメモリコントローラには、特許文献１などに記載されたＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）による符号化が適用されている。
【０００５】
ＥＣＣを用いることによって、読み出したデータが１ｂｉｔエラー等の訂正可能障害であれば、検出された時点で当該障害を訂正してプログラムの動作を継続できるが、２ｂｉｔエラー等の訂正不能障害（ＵＥ：Ｕｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ）が発生した場合にはプログラムの動作が阻害される。
【０００６】
従来のｘ８６  ＣＰＵを搭載したサーバでは、読み出されたデータがＵＥであった場合に、システム内の全ＣＰＵコアに対して強制停止を指示する障害割り込みを送信していた。そのため、当該サーバ上の全てのＯＳ及びアプリケーションがダウンしていた。
【０００７】
それに対して、Ｉｎｔｅｌ社（Ｉｎｔｅｌ及びインテルは登録商標、以下同じ）は、非特許文献１に記載されているように、ＣＰＵの障害処理の仕様を改定している。改定された仕様では、ＳＲＡＲ（Ｓｏｆｔｗａｒｅ  Ｒｅｃｏｖｅｒａｂｌｅ  Ａｃｔｉｏｎ  Ｒｅｑｕｉｒｅｄ）というクラスの障害伝達手段が追加されており、当該仕様が追加されたことによって強制停止の範囲が限定された。
【０００８】
ＳＲＡＲでは、障害割り込みのときにＣＰＵコア毎に異なる情報が送信される。ＵＥを読み出したＣＰＵコアには、ＵＥを保持していたメモリアドレスと、プログラムの実行状態（命令アドレス等）が失われた旨の情報が伝達される。他のＣＰＵコアには、ＵＥを保持していたメモリアドレスと、プログラムの実行状態が有効である旨の情報とが伝達される。このため、各情報を受け取ったシステムソフトウェアは、実行状態が失われたプログラムのみを強制停止させ、他のプログラムの動作を継続できる。
【０００９】
しかし、ＳＲＡＲにも欠点が存在する。システムソフトウェア自身がＵＥを読み出した場合には、システムソフトウェア自身がダウンするため、システムソフトウェアが稼動させていた他のプログラムもダウンする。
【００１０】
ＵＥの発生を抑止するために、メモリコントローラはＳｃｒｕｂｂｉｎｇを行っている。Ｓｃｒｕｂｂｉｎｇとは、メモリにアクセスしたタイミングで１ｂｉｔエラー等の訂正可能障害を訂正する機能である。宇宙線等の外乱でデータ化けが繰り返し発生する場合、１ｂｉｔエラーの段階でエラーを訂正できればＵＥの発生を抑止できる。
【００１１】
しかし、この方法は、高頻度で参照されるメモリ領域に対しては有効だが、参照頻度の低いメモリ領域には効果が薄い。例えば、ハイパバイザには、仮想計算機の起動及びライブマイグレーションなどの実行頻度の低い処理がある。これらの実行頻度の低い処理の実行時に使用されるメモリ領域は、参照頻度が低いため、ＵＥが比較的発生し易い。
【００１２】
そこで、参照頻度の低いメモリ領域をＳｃｒｕｂｂｉｎｇするために、プログラムの実行とは無関係にメモリコントローラ等のハードウェアがメモリ全域を巡回検査するＰａｔｒｏｌ  Ｓｃｒｕｂｂｉｎｇ技術が知られている。
【００１３】
しかし、Ｐａｔｒｏｌ  Ｓｃｒｕｂｂｉｎｇを行うと、ソフトウェア処理とＰａｔｒｏｌ  Ｓｃｒｕｂｂｉｎｇとの間でメモリ帯域が競合するため、プログラムの実行性能が低下する。したがって、実用上は、巡回検査の周期を十分に長くすると等の対策を取ることによって、プログラム実行を優先している。そのため、Ｐａｔｒｏｌ  Ｓｃｒｕｂｂｉｎｇを行っても、ＵＥ抑止又はＵＥ先行検出に失敗し、システムソフトウェアがＵＥを読み出すケースが発生する。
【００１４】
ＵＥを回避する他の方法として、特許文献２などに記載されたメモリミラーリングも広く知られている。メモリミラーリングは、主系のメモリモジュール及び副系のメモリモジュールにデータを保持する冗長化技術である。
【００１５】
通常は主系のメモリモジュールからデータが読み出されるが、読み出し結果がＵＥの場合には、副系のメモリモジュールからデータが自動的に読み直される。そのため、主系のメモリモジュール又は副系のメモリモジュールのいずれかに格納されたデータが無事ならば、システムソフトウェア等のプログラムのダウンを回避できる。
【００１６】
しかし、メモリミラーリングでは、利用可能なメモリ容量が半分になるため、１台のサーバ上に多数の仮想計算機を構築する構成には適さない。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】米国特許第６４８０９８２号明細書
【特許文献２】米国特許第７３２８３１５号明細書
【非特許文献】
【００１８】
【非特許文献１】インテル、"Intel 64 and IA-32 Architecture Software Developer's Manual June 2009, Volume3A: System Programming Guide, Part 1"、Chapter 15.6、Chapter 15.9.3
【発明の概要】
【発明が解決しようとする課題】
【００１９】
本発明の課題は、ｘ８６  ＣＰＵを搭載する計算機において、特に低頻度処理に関してシステムソフトウェアのダウンを回避し、かつ、性能低下の抑止及びメモリ容量の減少の回避を実現することである。
【課題を解決するための手段】
【００２０】
本発明の代表的な一例を示せば、以下の通りである。すなわち、プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるＩ／Ｏデバイスを備える計算機であって、前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、前記システム制御部は、前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する調整部と、前記メモリの異なる記憶領域を使用して前記イベントを処理する複数のイベント処理部と、前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を保持する検査結果情報と、前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定し、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する障害記録部と、前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択するイベント処理部セレクタと、を有することを特徴とする。
【発明の効果】
【００２１】
本発明によれば、システムソフトウェアとは異なる検査プログラムによって実現される検査部がメモリ検査を実行するため、システム制御部が使用するメモリの記憶領域にメモリ障害（ＵＥ）が存在してもシステム制御部のダウンを回避できる。また、システム制御部は、メモリ障害を含むメモリの記憶領域を使わずに動作が継続できる。また、本発明では、Ｓｃｒｕｂｂｉｎｇ等では効果が薄いイベントを検査対象の記憶領域としているため、メモリ検査によるメモリの性能低下を抑止できる。さらに、本発明では、メモリの冗長化が必要ないため、メモリ容量の減少を回避できる。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施例１における物理計算機の構成例を示すブロック図である。
【図２】本発明の実施例１の計算機システムのソフトウェア及びハードウェアの構成を示すスタック図である。
【図３】本発明の実施例１におけるハイパバイザが管理するメモリの一例を示す説明図である。
【図４】本発明の実施例１におけるメモリマップの一例を示す説明図である。
【図５】本発明の実施例１における検査要否マップの一例を示す説明図である。
【図６】本発明の実施例１における優先度表の一例を示す説明図である。
【図７】本発明の実施例１における縮退表の一例を示す説明図である。
【図８】本発明の実施例１におけるハイパバイザが実行するイベント処理ループの一例を説明するフローチャートである。
【図９】本発明の実施例１における検査頻度調整部が実行する処理の一例を説明するフローチャートである。
【図１０】本発明の実施例１における検査プログラムの初期化処理の一例を説明するフローチャートである。
【図１１】本発明の実施例１におけるハイパバイザが実行する初期化処理の一例を説明するフローチャートである。
【図１２】本発明の実施例１における検査プログラムが実行する処理の一例を説明するフローチャートである。
【図１３】本発明の実施例１におけるメモリ縮退処理の一例を説明するフローチャートである。
【図１４】本発明の実施例２における物理計算機の構成例を示すブロック図である。
【図１５】本発明の実施例２の物理計算機のソフトウェア構成及びハードウェア構成を示すスタック図である。
【図１６】本発明の実施例２におけるＯＳが管理するメモリの一例を示す説明図である。
【図１７】本発明の実施例２におけるメモリマップの一例を示す説明図である。
【図１８】本発明の実施例２における重要度マップの一例を示す説明図である。
【図１９】本発明の実施例２における時刻表の一例を示す説明図である。
【図２０】本発明の実施例２における優先度表の一例を示す説明図である。
【図２１】本発明の実施例２における縮退表の一例を示す説明図である。
【図２２】本発明の実施例２における検査頻度調整部が実行する処理の一例を説明するフローチャートである。
【図２３】本発明の実施例２におけるＯＳの初期化処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【００２３】
以下では、本発明の実施例について添付図面を用いて説明する。
【実施例１】
【００２４】
実施例１では、システム制御部としてハイパバイザが物理計算機を制御する計算機システムにおいて、イベント毎に設定されたメモリ検査の要否を示す情報に基づいて、メモリ検査を実行させる例を説明する。
【００２５】
＜ハードウェア構成＞
図１は、本発明の実施例１における物理計算機の構成例を示すブロック図である。
【００２６】
物理計算機１０は、ＣＰＵ７０を一つ以上備え、これらのＣＰＵ７０は、ＱＰＩ（ＱＵＩＣＫ  Ｐａｔｈ  ＩｎｔｅｒＣｏｎｎｅｃｔ）又はＳＭＩ（Ｓｃａｌａｂｌｅ  Ｍｅｍｏｒｙ  ＩｎｔｅｒＣｏｎｎｅｃｔ）等のインターコネクト３１を介してＣｈｉｐＳｅｔ８５及びメモリ９０と接続される。
【００２７】
ＣｈｉｐＳｅｔ８５には、ＰＣＩｅｘｐｒｅｓｓ等のバス３２を介してＩ／Ｏデバイス８０が接続される。Ｉ／Ｏデバイス８０は、ＬＡＮ１２に接続されるＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）、ストレージ装置１３及びＳＡＮ１４（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等に接続されるＨＢＡ（Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ）、及びコンソール１５に接続されるグラフィックコントローラなどから構成される。なお、Ｉ／Ｏデバイス８０は、複数あってもよい。
【００２８】
ＣＰＵ７０は、インターコネクト３１を介してメモリ９０にアクセスし、また、ＣｈｉｐＳｅｔ８５を介してＩ／Ｏデバイス８０にアクセスして所定の処理を実行する。同様に、Ｉ／Ｏデバイス８０は、ＣｈｉｐＳｅｔ８５を介してメモリ９０にアクセスする。
【００２９】
メモリ９０は、ＣＰＵ７０によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。図１に示すように、メモリ９０には、ハイパバイザ２０を実現するためのプログラム（例えば、システムソフトウェア）がロードされ、ＣＰＵ７０によって当該プログラムが実行される。また、メモリ９０には、検査部５０を実現するためのプログラム（例えば、検査プログラム）がロードされ、ＣＰＵ７０によって当該プログラムが実行される。
【００３０】
なお、以下では、ハイパバイザ２０及び検査部５０等を主体にして説明を記載する場合には、ハイパバイザ２０及び検査部５０等を実現するためのプログラムがＣＰＵ７０によって実行されていることを表す。
【００３１】
ハイパバイザ２０は、物理計算機１０を制御する。ハイパバイザ２０は、検査部５０及び仮想計算機３０に、メモリ９０の記憶領域の一部を割り当てる。また、仮想計算機３０上では、ＯＳ４０及びアプリケーション６０が稼働する。
【００３２】
＜ソフトウェア構成＞
次に、物理計算機１０上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図２を参照しながら詳述する。
【００３３】
図２は、本発明の実施例１の計算機システムのソフトウェア及びハードウェアの構成を示すスタック図である。
【００３４】
物理計算機１０上では、仮想計算機３０を生成し、また、管理するハイパバイザ２０がシステム制御部として稼動する。仮想計算機３０上では、ＯＳ４０が稼動する。さらに、ＯＳ４０は、アプリケーション６０を実行する。
【００３５】
物理計算機１０は、ＣＰＵ７０及びメモリ９０を備える。本実施例のＣＰＵ７０は、メモリ障害通知部７５を備える。
【００３６】
メモリ障害通知部７５は、メモリ９０からデータを読み出す場合に、訂正不能なメモリ障害を検出すると、読み出されたデータのメモリ９０上のアドレスと共に訂正不能なメモリ障害が発生した旨をシステム制御部（ハイパバイザ２０）に通知する。なお、訂正可能なメモリ障害についても同様の情報がシステム制御部（ハイパバイザ２０）に通知されてもよい。
【００３７】
以下では、説明の簡単のために、訂正不能なメモリ障害をメモリ障害と記載し、訂正不能なメモリ障害が発生したメモリ上のアドレスを障害アドレスと記載する。
【００３８】
前述した情報の通知方法には幾つかの方法が考えられる。例えば、メモリ障害通知部７５が保有するレジスタに、障害アドレスと、訂正不能なメモリ障害を意味するビットパターンとを格納し、割り込みを発生させる方法等が考えられる。
【００３９】
なお、ＣＰＵ７０には命令アドレスなどのプログラム実行ステートを保持する状態レジスタなどが含まれるが、メモリ障害を検出するときには、状態レジスタの値の一部は不正な値に化けていてもよい。
【００４０】
ハイパバイザ２０は、メモリ９０を検査する検査部５０を制御し、また、仮想計算機３０を生成し、生成された仮想計算機３０を管理する。ハイパバイザ２０は、イベント処理制御部１００、メモリマップ２００、メモリ縮退処理部２１０、検査頻度調整部３００及びメモリ検査制御部２５０を備える。
【００４１】
イベント処理制御部１００は、仮想計算機３０上のＯＳ４０及びアプリケーション６０の稼動時に、仮想計算機３０及び物理計算機１０において発生するイベントを処理する。
【００４２】
イベント処理制御部１００は、複数のイベント処理部１４０、イベント処理制御部１００は、イベント処理部セレクタ１１０、検査待ち合わせ部１５０、縮退表１２０及び優先度表１３０を備える。
【００４３】
イベント処理部１４０は、発生したイベントを処理する。各イベント処理部１４０は、それぞれ使用するメモリ９０の記憶領域が異なる。本実施例では、イベント処理部１４０の一例として、発生しうる全てのイベントを処理する完全イベント処理部１４０−１、及び、一部の処理を省略する縮退イベント処理部１４０−２を含む。
【００４４】
縮退イベント処理部１４０−２は、例えば、仮想計算機３０のライブマイグレーション要求に対してライブマイグレーションを実現する機能をサポートしていない旨を応答し、ソフトウェア障害の発生時に出力するログメッセージの量が少ない等の制限がある。
【００４５】
イベント処理部セレクタ１１０は、優先度表１３０及び縮退表１２０に基づいて、発生したイベントに対して適用するイベント処理部１４０を選択する。検査待ち合わせ部１５０は、メモリ検査が終了するまで処理の開始を遅らせる。
【００４６】
優先度表１３０は、複数のイベント処理部１４０を適用する優先順を示す適用優先度をイベントの種類毎に格納する。なお、優先度表１３０の詳細は、図６を用いて後述する。縮退表１２０は、メモリ９０の検査結果を格納し、各イベント処理部１４０が発生した各イベントを処理する場合に使用される。なお、縮退表１２０の詳細は、図７を用いて後述する。
【００４７】
以上が、イベント処理制御部１００のソフトウェア構成である。
【００４８】
メモリマップ２００は、安全性及び性能の低下を避けつつメモリ９０を検査するために用いられる情報であり、メモリアドレス毎に、当該メモリアドレスに対応するメモリ９０の記憶領域を使用する処理に関する情報を格納する。メモリマップ２００の詳細は、図４を用いて後述する。
【００４９】
メモリ縮退処理部２１０は、メモリ障害を契機に呼び出され、検査部５０を強制終了させ、以降の障害アドレスの読み出しを抑止する。
【００５０】
メモリ検査制御部２５０は、検査頻度調整部３００の判定の結果に基づいて、検査部５０を制御する。
【００５１】
検査頻度調整部３００は、発生したイベントの種類に応じてメモリ検査の要否を判定する。検査頻度調整部３００は、イベントの種類に応じて予め定義されたメモリ検査の要否を示す情報を保持する検査要否マップ３８０を備える。
【００５２】
検査要否マップ３８０には、例えば、ソフトウェア障害の発生など、確実にログを残す必要のある重要なイベントに対して、メモリ検査が必要である旨の情報が定義される。また、仮想計算機３０のライブマイグレーション要求等の発生頻度の低いイベントは、メモリ障害が発生しやすいため、メモリ検査が必要である旨の情報が定義される。なお、検査要否マップ３８０の詳細は、図５を用いて後述する。
【００５３】
検査部５０は、メモリ検査を実行する。検査部５０は、処理内容識別情報保持部５２、検査状態保持部５４及び検査対象選択部５６を備える。
【００５４】
処理内容識別情報保持部５２は、ハイパバイザ２０が実行する予定の処理に関する情報、すなわち、処理内容識別情報を保持する。処理内容識別情報保持部５２が保持する処理内容識別情報のデータフォーマットは、後述するメモリマップ２００と同一のものである。
【００５５】
検査状態保持部５４は、メモリ検査の検査状態を管理する。具体的には、検査状態保持部５４は、Ｓｔａｒｔｉｎｇ（検査開始中）、Ｒｕｎｎｉｎｇ（検査中）、Ｓｔｏｐ（検査正常終了）、Ｅｒｒｏｒ（検査異常終了）のいずれかの状態を保持する。
【００５６】
検査対象選択部５６は、メモリマップ２００及び処理内容識別情報保持部５２に基づいて、メモリ検査の対象となるメモリ９０の記憶領域を特定する。
【００５７】
図３は、本発明の実施例１におけるハイパバイザ２０が管理するメモリ９０の一例を示す説明図である。
【００５８】
ハイパバイザ２０は、メモリ９０の記憶領域の割り当てを管理しており、メモリ９０上にハイパバイザ２０自身を配置する領域、仮想計算機３０が使用する領域及び検査部５０が使用する領域を割り当てる。
【００５９】
例えば、図３に示すように、ハイパバイザ２０は、ＡＤ０からＡＤ１までのアドレス範囲の記憶領域をハイパバイザ２０自身に割り当て、ＡＤ１からＡＤ２までのアドレス範囲の記憶領域を検査部５０に割り当てる。また、ハイパバイザ２０は、ＡＤ２からＡＤ３までのアドレス範囲の記憶領域を仮想計算機３０−１が割り当て、ＡＤ４からＡＤ５までのアドレス範囲の記憶領域を仮想計算機３０−ｎに割り当てられる。なお、ハイパバイザ２０及び検査部５０に割り当てる記憶領域は固定的であるが、仮想計算機３０に割り当てる記憶領域は動的に変更することが可能である。
【００６０】
ハイパバイザ２０が配置される領域には、イベント処理制御部１００、メモリマップ２００、メモリ縮退処理部２１０、メモリ検査制御部２５０及び検査頻度調整部３００が格納される。
【００６１】
仮想計算機３０が配置される領域には、ＯＳ４０が格納される。ＯＳ４０は、当該領域のうち、ＯＳ４０自身を配置する領域及びアプリケーション６０が使用する領域を割り当てる。
【００６２】
また、検査部５０が配置される領域には、処理内容識別情報保持部５２、検査状態保持部５４及び検査対象選択部５６が格納される。
【００６３】
図４は、本発明の実施例１におけるメモリマップ２００の一例を示す説明図である。
【００６４】
メモリマップ２００は、先頭メモリアドレス４１０、サイズ４２０及び処理内容識別情報４３０を含む。
【００６５】
先頭メモリアドレス４１０は、所定のメモリ９０の記憶領域の先頭のアドレスを格納する。サイズ４２０は、所定のメモリ９０の記憶領域のサイズを格納する。ハイパバイザ２０は、先頭メモリアドレス４１０及びサイズ４２０に基づいて、所定のメモリ９０の記憶領域の位置及びサイズを把握することができる。
【００６６】
図４に示すように、所定のメモリ９０の記憶領域に対して、当該記憶領域を使用するイベント処理部１４０及び実行されるイベントの情報が処理内容識別情報４３０として対応づけられる。
【００６７】
処理内容識別情報４３０は、発生したイベント及び当該イベントを処理するイベント処理部１４０を特定する情報を格納する。具体的には、処理内容識別情報４３０は、イベント識別子４４０及びイベント処理部識別子４５０を含む。
【００６８】
イベント識別子４４０は、発生したイベントを一意に識別するための識別子を格納する。イベント処理部識別子４５０は、イベント識別子４４０に対応するイベントを処理するイベント処理部１４０を一意に識別するための識別子を格納する。
【００６９】
なお、処理内容識別情報４３０のデータフォーマットは、処理内容識別情報保持部５２などでも同一のものが用いられる。
【００７０】
図５は、本発明の実施例１における検査要否マップ３８０の一例を示す説明図である。
【００７１】
検査要否マップ３８０は、イベント識別子４４０及び検査要否４６５を含む。図５に示すように、イベント毎にメモリ検査が必要か否かを示す情報が格納される。
【００７２】
検査要否４６５は、ハイパバイザ２０によってイベント識別子４４０に対応するイベントが実行される場合に、メモリ検査が必要であるか否かを示す情報を格納する。本実施例では、検査要否４６５には、メモリ検査が必要であることを示す「必要」、又は、メモリ検査が必要でないことを示す「不要」のいずれかが格納される。なお、検査要否４６５は、「必要」又は「不要」の２値で表現する場合に限定されない。
【００７３】
本実施例では、検査要否マップ３８０は、予め設定されているものとする。例えば、ソフトウェア障害の発生など、確実にログを残す必要のある重要なイベントの場合、当該イベントに対応するエントリの検査要否４６５には「必要」が格納される。また、仮想計算機のライブマイグレーション要求のように発生頻度の低いイベントは、イベント処理部１４０が使用するメモリ９０の記憶領域にメモリ障害が起き易いため、当該イベントに対応するエントリの検査要否４６５には「必要」が格納される。一方、ＬＡＮ１２からのデータ受信など、発生頻度が低く、かつ、重要性の低いイベントに対応するエントリの検査要否４６５には「不要」が格納される。
【００７４】
図６は、本発明の実施例１における優先度表１３０の一例を示す説明図である。
【００７５】
優先度表１３０は、イベント識別子４４０、イベント処理部識別子４５０及び優先度４７０を含む。図６に示すように、イベント毎に、当該イベントを処理するイベント処理部１４０及び適用するイベント処理部１４０の優先順位がペアとなった情報が格納される。
【００７６】
優先度４７０は、イベント識別子４４０に対応するイベントが発生した場合に、当該イベントを優先的に処理するイベント処理部１４０の適用順を格納する。
【００７７】
本実施例のハイパバイザ２０は、イベント処理部１４０として、完全イベント処理部１４０−１及び縮退イベント処理部１４０−２の二つを備える。したがって、一つのイベント識別子４４０に対して、イベント処理部識別子４５０に完全イベント処理部１４０−１又は縮退イベント処理部１４０−２のいずれか一方の識別子が格納され、優先度４７０には、「１」又は「２」のいずれかの値が格納される。本実施例では、優先度４７０の値が小さいイベント処理部１４０から順に適用される。
【００７８】
なお、本実施例では、完全イベント処理部１４０−１の優先度４７０が「１」となるように設定されているが、本発明はこれに限定されず、イベント毎に異なる優先度４７０の値が設定されてもよい。
【００７９】
なお、ハイパバイザ２０は、三つ以上のイベント処理部１４０を備えていてもよい。
【００８０】
図７は、本発明の実施例１における縮退表１２０の一例を示す説明図である。
【００８１】
縮退表１２０は、イベント識別子４４０、イベント処理部識別子４５０及び検査結果４８０を含む。図７に示すように、発生したイベント及び当該イベントを処理するイベント処理部１４０の組み合わせによって一意に特定されるメモリ９０の記憶領域毎に、メモリ検査の検査結果が格納される。
【００８２】
検査結果４８０は、所定のイベントを処理するイベント処理部１４０によって使用されるメモリ９０の記憶領域に対するメモリ検査の検査結果を格納する。本実施例では、メモリ検査の検査結果が正常であることを示す「正常」、又は、メモリ検査の検査結果が異常であることを示す「異常」のいずれかが格納される。なお、検査結果４８０には、初期値として「正常」が設定されるものとする。
【００８３】
本実施例では、後述するように、イベント処理部セレクタ１１０によって、検査結果４８０が「異常」であるメモリ９０の記憶領域の使用が回避される。すなわち、異常が発生したメモリ９０の記憶領域を使用するイベント処理部１４０が選択されないように制御される。
【００８４】
＜ハイパバイザが実行する処理＞
次に、ハイパバイザ２０が実行する処理の一例について、フローチャートを参照しながら説明する。
【００８５】
図８は、本発明の実施例１におけるハイパバイザ２０が実行するイベント処理ループの一例を説明するフローチャートである。なお、イベント処理は、ハイパバイザ２０自身の処理が停止するまで繰り返し実行されるループ処理である。
【００８６】
ハイパバイザ２０は、物理計算機１０又は仮想計算機３０において発生したイベントを受け付けると（ステップＳ９００）、縮退表１２０及び優先度表１３０を参照して、発生したイベントを処理するイベント処理部１４０を選択する（ステップＳ９１０）。具体的には、以下のような処理が実行される。
【００８７】
イベント処理部セレクタ１１０は、発生したイベントのイベント識別子を特定する。イベント処理部セレクタ１１０は、縮退表１２０を参照して、イベント識別子４４０が特定されたイベント識別子と一致するエントリを検索する。さらに、イベント処理部セレクタ１１０は、検索されたエントリの検査結果４８０を参照して、当該検査結果４８０に「正常」が格納されるエントリを特定する。
【００８８】
次に、イベント処理部セレクタ１１０は、優先度表１３０を参照して、縮退表１２０から特定されたエントリのイベント識別子４４０及びイベント処理部識別子４５０と一致するエントリを検索する。イベント処理部セレクタ１１０は、検索されたエントリの優先度４７０を参照して、検索されたエントリの中から適用順位が最も高いエントリを選択する。
【００８９】
以上の処理によって、選択されたエントリのイベント処理部識別子４５０に対応するイベント処理部１４０が選択される。このとき、検査結果４８０が「異常」であるエントリ、すなわち、障害アドレスを含むメモリ９０の記憶領域を使用するイベント処理部１４０は選択されない。
【００９０】
以上がステップＳ９１０の処理である。
【００９１】
次に、ハイパバイザ２０は、検査頻度調整部３００に、メモリ検査の要否判定処理の実行を指示する（ステップＳ９２０）。なお、検査頻度調整部３００が実行する処理の詳細は、図９を用いて後述する。
【００９２】
ハイパバイザ２０は、検査頻度調整部３００からの判定結果に基づいて、メモリ検査が必要であるか否かを判定する（ステップＳ９３０）。すなわち、検査部５０を実現する検査プログラムを実行する必要があるか否かが判定される。
【００９３】
具体的には、ハイパバイザ２０は、検査頻度調整部３００からメモリ検査が必要である旨の判定結果が出力されたか否かを判定する。検査頻度調整部３００からメモリ検査が必要である旨の判定結果が出力された場合、ハイパバイザ２０は、メモリ検査が必要であると判定する。一方、検査頻度調整部３００からメモリ検査が不要である旨の判定結果が出力された場合、ハイパバイザ２０は、メモリ検査が不要であると判定する。
【００９４】
メモリ検査が不要であると判定された場合、ハイパバイザ２０は、選択されたイベント処理部１４０に、発生したイベントの処理を指示する（ステップＳ９８０）。その後、ハイパバイザ２０は、ステップＳ９００に戻り同様の処理を実行する。
【００９５】
メモリ検査が必要であると判定された場合、ハイパバイザ２０は、メモリ検査の検査状態がＳｔｏｐ又はＥｒｒｏｒのいずれかに該当するか否かを判定する（ステップＳ９４０）。
【００９６】
具体的には、ハイパバイザ２０は、検査状態保持部５４を参照し、検査状態がＳｔｏｐ又はＥｒｒｏｒのいずれかに該当するか否かを判定する。これは、すでに検査部５０がメモリ検査を実行しているか否かを判定するための処理である。
【００９７】
検査状態がＳｔｏｐ又はＥｒｒｏｒでない、すなわち、検査状態がＳｔａｒｔｉｎｇ又はＲｕｎｎｉｎｇであると判定された場合、ハイパバイザ２０は、メモリ検査の終了まで待ち続ける（ステップＳ９４５）。
【００９８】
具体的には、検査待ち合わせ部１５０が、検査状態保持部５４を周期的に参照して、メモリ検査が終了し、かつ、検査状態がＳｔｏｐ又はＥｒｒｏｒになるまで待ち続ける。その後、ハイパバイザ２０は、ステップＳ９５０に遷移する。
【００９９】
検査状態がＳｔｏｐ又はＥｒｒｏｒであると判定された場合、ハイパバイザ２０は、検査部５０を起動する（ステップＳ９５０）。
【０１００】
具体的には、メモリ検査制御部２５０が、検査部５０の初期化処理を実行する。なお、検査部５０の初期化処理の詳細は、図１０を用いて後述する。
【０１０１】
検査部５０が起動された後、ハイパバイザ２０は、メモリ検査の終了まで待ち続ける（ステップＳ９６０）。
【０１０２】
具体的には、検査待ち合わせ部１５０が、検査状態保持部５４を周期的に参照して、メモリ検査が終了し、かつ、検査状態がＳｔｏｐ又はＥｒｒｏｒになるまで待ち続ける。
【０１０３】
メモリ検査が終了し、かつ、検査状態が変更された後、ハイパバイザ２０は、検査状態がＳｔｏｐであるか否かを判定する（ステップＳ９７０）。すなわち、メモリ検査が正常終了したか否かが判定される。
【０１０４】
検査状態がＳｔｏｐであると判定された場合、ハイパバイザ２０は、選択されたイベント処理部１４０に、発生したイベントの処理を指示する（ステップＳ９８０）。
【０１０５】
検査状態がＳｔｏｐでない、すなわち、検査状態がＥｒｒｏｒであると判定された場合、ハイパバイザ２０は、Ｓ９１０に戻り同様の処理を実行する。なお、障害アドレスの参照を避けるために、ステップＳ９１０では、前回選択されたイベント処理部１４０とは異なるイベント処理部１４０が選択される。
【０１０６】
図９は、本発明の実施例１における検査頻度調整部３００が実行する処理の一例を説明するフローチャートである。
【０１０７】
検査頻度調整部３００は、検査要否マップ３８０を参照して、発生したイベントに対応するエントリを検索する（ステップＳ１０００）。
【０１０８】
具体的には、検査頻度調整部３００は、発生したイベントの識別子をキーとして、検査要否マップ３８０を参照し、イベント識別子４４０が当該イベントの識別子と一致するエントリを検索する。
【０１０９】
検査頻度調整部３００は、発生したイベントについてメモリ検査が必要であるか否かを判定する（ステップＳ１０１０）。
【０１１０】
具体的には、検査頻度調整部３００は、検索されたエントリの検査要否４６５が「必要」であるか否かを判定する。検索されたエントリの検査要否４６５が「必要」である場合、発生したイベントについてメモリ検査が必要であると判定される。
【０１１１】
発生したイベントについてメモリ検査が必要でないと判定された場合、検査頻度調整部３００は、メモリ検査が不要である旨の判定結果を出力する（ステップＳ１０２０）。
【０１１２】
発生したイベントについてメモリ検査が必要であると判定された場合、検査頻度調整部３００は、メモリ検査が必要である旨の判定結果を出力する（ステップＳ１０３０）。
【０１１３】
図１０は、本発明の実施例１における検査部５０の初期化処理の一例を説明するフローチャートである。
【０１１４】
メモリ検査制御部２５０は、検査状態保持部５４が保持する検査状態をＳｔａｒｔｉｎｇに変更する（ステップＳ１１００）。
【０１１５】
この時点では、検査部５０はまだ起動されていないが、本実施例では、ハイパバイザ２０が検査状態保持部５４に固定的なメモリ９０の記憶領域を割り当てているため、検査部５０の起動前であっても検査状態保持部５４が保持する情報を更新できる。
【０１１６】
メモリ検査制御部２５０は、処理内容識別情報保持部５２に、処理内容識別情報をセットする（ステップＳ１１１０）。
【０１１７】
具体的には、発生したイベントの識別子、及び、選択されたイベント処理部１４０の識別子がペアとなった処理内容識別情報が設定される。
【０１１８】
メモリ検査制御部２５０は、検査部５０に対して、命令アドレスなどの初期状態をＣＰＵ７０に順次セットし（ステップＳ１１２０）、その後、検査部５０を起動する。
【０１１９】
図１１は、本発明の実施例１におけるハイパバイザ２０が実行する初期化処理の一例を説明するフローチャートである。
【０１２０】
ハイパバイザ２０は、メモリマップ２００を初期化する（ステップＳ１２００）。
【０１２１】
具体的には、ハイパバイザ２０は、ハイパバイザ２０自身及び検査部５０に割り当てるメモリ９０のアドレス範囲（メモリ９０の記憶領域）を決定し、メモリマップ２００に決定されたメモリ９０のアドレス範囲の先頭アドレス及びサイズを格納する。
【０１２２】
本実施例では、検査部５０に予め固定的なメモリ９０の記憶領域が割り当てられているが、ハイパバイザ２０は、検査部５０の実行時にメモリ９０の記憶領域を割り当て、ハイパバイザ２０に割り当てられたメモリ９０の記憶領域に、当該アドレスを格納する方法でもよい。
【０１２３】
ハイパバイザ２０は、縮退表１２０及び検査状態保持部５４を初期化する（ステップＳ１２１０、ステップＳ１２２０）。
【０１２４】
具体的には、ハイパバイザ２０は、縮退表１２０の全エントリの検査結果４８０に「正常」を設定し、検査状態保持部５４にＳｔｏｐを設定する。
【０１２５】
ハイパバイザ２０は、検査要否マップ３８０及び優先度表１３０を予め設定された値に初期化し（ステップＳ１２３０）、図８に示すイベント処理ループに遷移する（ステップＳ１２４０）。
【０１２６】
＜検査部によって実行される処理及びメモリ障害検出後の縮退処理＞
図１２は、本発明の実施例１における検査部５０が実行する処理の一例を説明するフローチャートである。
【０１２７】
検査部５０は、処理内容識別情報保持部５２を参照し、処理内容識別情報として、発生したイベントの識別子、及び選択されたイベント処理部１４０の識別子を取得する（ステップＳ１３００）。
【０１２８】
検査部５０は、検査状態保持部５４が保持する検査状態をＲｕｎｎｉｎｇに変更する（ステップＳ１３１０）。これによって、ハイパバイザ２０は、メモリ検査が開始されたことを把握できる。
【０１２９】
検査部５０は、メモリマップ２００のエントリを読み出す（ステップＳ１３２０）。
【０１３０】
具体的には、検査対象選択部５６が、ステップＳ１３２０からステップＳ１３６０のループ処理において、メモリマップ２００のエントリを上から順に一つずつ読み出す。
【０１３１】
以下では、読み出されたメモリマップ２００のエントリを対象エントリとも記載する。
【０１３２】
検査対象選択部５６は、対象エントリの処理内容識別情報４３０と、取得された処理内容識別情報とが一致するか否かを判定する（ステップＳ１３３０）。
【０１３３】
処理内容識別情報が一致すると判定された場合、検査対象選択部５６は、検査対象のアドレス範囲のデータを読み出す（ステップＳ１３４０）。具体的には、以下のような処理が実行される。
【０１３４】
ステップＳ１３３０からステップＳ１３４０に遷移した場合、検査対象選択部５６は、まず、対象エントリの先頭メモリアドレス４１０及びサイズ４２０で指定されたメモリ９０の記憶領域を検査対象の記憶領域として扱う。なお、ステップＳ１３５５からステップＳ１３４０に遷移する場合、前述した検査対象の記憶領域を決定する処理は省略できる。
【０１３５】
さらに、検査対象選択部５６は、検査対象の記憶領域から所定のアドレス範囲に含まれるデータを読み出す。このとき、先頭メモリアドレス４１０から順にデータが読み出される。
【０１３６】
なお、各ループ処理において読み出されるデータ量（サイズ）及びアドレス範囲は、物理計算機１０の性能又は処理負荷等に合わせて任意の設定することができる。例えば、物理計算機１０が、８バイトの読み出しが速いＣＰＵ７０と、６４バイト単位でＥＣＣを付与するメモリ９０とを備える場合、各回、アドレス範囲が６４バイト間隔、かつ、読み出されるデータ量が８バイトに設定する方法が考えられる。
【０１３７】
以上がステップＳ１３４０の処理である。
【０１３８】
次に、ＣＰＵ７０は、Ｓ１３４０で検査対象のアドレスから読み出されたデータに訂正不能障害が発生しているか否かを判定する（ステップＳ１３５０）。なお、訂正不能障害の発生を検出する方法は、公知の技術を用いればよいため説明を省略する。
【０１３９】
訂正不能障害が発生していると判定された場合、ＣＰＵ７０のメモリ障害通知部７５が、メモリ縮退処理部２１０を呼び出してメモリ縮退処理に遷移する（ステップＳ１３８０）。なお、メモリ縮退処理の詳細は、図１３を用いて後述する。
【０１４０】
メモリ障害通知部７５がメモリ縮退処理部２１０を呼び出す方法はどのような方法であってもよく、例えば、メモリ縮退処理部２１０を割り込みハンドラとしてＣＰＵ７０に事前登録しておき、障害割り込みを契機に呼び出す方法が考えられる。
【０１４１】
訂正不能障害が発生していないと判定された場合、検査対象選択部５６は、検査対象の全記憶領域について検査が完了したか否かを判定する（ステップＳ１３５５）。
【０１４２】
検査対象の全記憶領域について検査が完了していないと判定された場合、検査対象選択部５６は、ステップＳ１３４０に戻り、次のアドレス範囲（例えば、６４バイト先のアドレス範囲）を読み出し、同様の処理を実行する。
【０１４３】
検査対象の全記憶領域について検査が完了していると判定された場合、検査対象選択部５６は、メモリマップ２００の全エントリに対して処理が完了したか否かを判定する（ステップＳ１３６０）。
【０１４４】
メモリマップ２００の全エントリに対して処理が完了していないと判定された場合、検査対象選択部５６は、ステップＳ１３２０に戻り、メモリマップ２００から次のエントリを読み出し、同様の処理を実行する。
【０１４５】
メモリマップ２００の全エントリに対して処理が完了していると判定された場合、検査部５０は、検査状態保持部５４の検査状態をＳｔｏｐに変更し（ステップＳ１３７０）、検査部５０自身を停止させる（ステップＳ１３９０）。
【０１４６】
図１３は、本発明の実施例１におけるメモリ縮退処理の一例を説明するフローチャートである。
【０１４７】
メモリ縮退処理部２１０は、訂正不能障害が発生していることが検出された場合（ステップＳ１３５０がＹＥＳ）に呼び出されて以下の処理を開始する。
【０１４８】
メモリ縮退処理部２１０は、障害アドレス、及び訂正不能障害が発生した旨のビットパターンを取得する（ステップＳ１４００）。
【０１４９】
例えば、メモリ縮退処理部２１０は、メモリ障害通知部７５のレジスタを読み出すことによって障害アドレス、及びビットパターンを取得できる。
【０１５０】
メモリ縮退処理部２１０は、メモリマップ２００を参照して、障害アドレスを含むメモリ９０の記憶領域を使用する処理を特定する（ステップＳ１４１０）。
【０１５１】
具体的には、メモリ縮退処理部２１０は、先頭メモリアドレス４１０及びサイズ４２０に基づいて、障害アドレスが含まれるメモリ９０の記憶領域に対応するエントリを特定する。さらに、メモリ縮退処理部２１０は、特定されたエントリから、イベント識別子４４０及びイベント処理部識別子４５０を取得する。
【０１５２】
メモリ縮退処理部２１０は、縮退表１２０の対応するエントリにメモリ検査の検査結果を格納する（ステップＳ１４２０）。
【０１５３】
具体的には、メモリ縮退処理部２１０は、縮退表１２０を参照して、取得されたイベント識別子４４０及びイベント処理部識別子４５０に一致するエントリを検索する。メモリ縮退処理部２１０は、検索されたエントリの検査結果４８０を「異常」に変更する。
【０１５４】
本処理によって、次回、イベント識別子４４０に対応するイベントが発生した場合、図８のステップＳ９１０の処理では、訂正不能障害が発生していないメモリ９０の記憶領域を使用するイベント処理部１４０が選択される。
【０１５５】
メモリ縮退処理部２１０は、検査部５０を停止させ（ステップＳ１４３０）、検査状態保持部５４の検査状態をＥｒｒｏｒに変更する（ステップＳ１４４０）。本処理によって、検査待ち合わせ部１５０がメモリ検査の異常終了を認識できる。
【０１５６】
なお他の実施形態として、任意のプログラムにおいて、メモリの訂正不能障害が発生した場合に、メモリ縮退処理部２１０が呼び出され、検査部５０に割り当てられたＣＰＵ７０の番号及び検査状態保持部５４が保持する検査状態を用いて、検査部５０がメモリの訂正不能障害の発生を検出したケースを切り分けてから、図１３の処理を実行する実施形態も容易に考えられる。
【０１５７】
＜まとめ＞
実施例１によれば、システム制御部として稼動するハイパバイザ２０とは別の検査部５０がメモリ９０を検査するため、メモリ障害が検出されてもハイパバイザ２０のダウンを回避できる。
【０１５８】
また、ハイパバイザ２０は、縮退表１２０に基づいて、発生したイベントを処理するイベント処理部１４０を選択するため、正常なメモリ９０の記憶領域のみを用いてイベントの処理を継続できる。
【０１５９】
また、本実施例では、予め、重要性の高い処理と実行頻度の低い処理とにメモリ検査の対象を絞っているため、メモリ検査に伴う性能低下を抑制できる。
【０１６０】
また、本実施例では、メモリ９０の冗長化が必要でないため、メモリ容量の減少を回避できる。
【０１６１】
また、本実施例では、ソフトウェア障害のログを保存するといった確実性が求められる重要な処理は、実行頻度に依らずメモリ検査が実行される。したがって、ソフトウェア障害とメモリ障害とが連続的に発生する二重障害が発生するケースであっても、ソフトウェア障害が発生した旨のログを残すことができる。
【実施例２】
【０１６２】
実施例２では、システム制御部としてＯＳが物理計算機を制御する計算機システムにおいて、イベント毎の重要度と、実行時に計測されるイベントの発生頻度とに基づいて、メモリ検査を実行させる例を説明する。
【０１６３】
以下では、実施例１と同一の構成及び処理には同一の符号を付与し、その説明は省略する。
【０１６４】
＜ハードウェア構成＞
図１４は、本発明の実施例２における物理計算機の構成例を示すブロック図である。
【０１６５】
物理計算機１０のハードウェア構成は、実施例１と同一であるため説明を省略する。実施例２では、メモリ９０におけるソフトウェア構成が異なる。
【０１６６】
本実施例のメモリ９０には、ＯＳ４０を実現するプログラムがロードされ、ＣＰＵ７０によって当該プログラムが実行される。また、メモリ９０には、検査部５０を実現するプログラムがロードされ、ＣＰＵ７０によって当該プログラムが実行される。
【０１６７】
ＯＳ４０は、物理計算機１０を制御する。ＯＳ４０は、検査部５０及びアプリケーション６０にメモリ９０の記憶領域を割り当てる。
【０１６８】
＜ソフトウェア構成＞
次に、物理計算機１０上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図１５を参照しながら詳述する。
【０１６９】
図１５は、本発明の実施例２の物理計算機１０のソフトウェア構成及びハードウェア構成を示すスタック図である。
【０１７０】
物理計算機１０上では、ＯＳ４０がシステム制御部として稼動する。また、ＯＳ４０は、さらに、一つ以上のアプリケーション６０を稼働させる。
【０１７１】
ＯＳ４０は、メモリ９０を検査する検査部５０を制御し、また、アプリケーション６０を実行する。ＯＳ４０は、イベント処理制御部１００、メモリマップ２００、メモリ縮退処理部２１０、検査頻度調整部３００及びメモリ検査制御部２５０を備える。
【０１７２】
イベント処理制御部１００は、アプリケーション６０の稼働時に、物理計算機１０において発生するイベントを処理する。
【０１７３】
イベント処理制御部１００は、複数のイベント処理部１４０、イベント処理制御部１００は、イベント処理部セレクタ１１０、検査待ち合わせ部１５０、縮退表１２０及び優先度表１３０を備える。
【０１７４】
イベント処理部１４０は、発生したイベントを処理する。各イベント処理部１４０は、それぞれ使用するメモリ９０の記憶領域が異なる。本実施例では、イベント処理部１４０の一例として、発生しうる全てのイベントを処理できる完全イベント処理部１４０−１、及び、一部の処理を省略する縮退イベント処理部１４０−２を含む。
【０１７５】
縮退イベント処理部１４０−２は、例えば、仮想計算機３０のライブマイグレーション要求に対してライブマイグレーションを実現する機能をサポートしていない旨を応答し、ソフトウェア障害の発生時に出力するログメッセージの量が少ない等の制限がある。
【０１７６】
イベント処理制御部１００の構成は、ＯＳ４０がイベントを処理する点を除いて、実施例１と同一である。
【０１７７】
メモリマップ２００、メモリ縮退処理部２１０及びメモリ検査制御部２５０は、実施例１と同一であるため説明を省略する。
【０１７８】
検査頻度調整部３００は、発生したイベントの種類に応じてメモリ検査の要否を判定する。実施例２では、重要なイベント、及び発生頻度の低いイベントによって使用されるメモリ９０の記憶領域に対してメモリ検査が実行される。
【０１７９】
実施例２の検査頻度調整部３００は、重要度判定部３１０、重要度マップ３２０、頻度判定部３５０、時刻表３６０、判定閾値３７０を備える。
【０１８０】
重要度判定部３１０は、発生したイベントの重要度を判定する。重要度マップ３２０は、イベントの重要度に関する情報を格納する。重要度マップ３２０には、例えば、アプリケーション６０の異常終了など、確実にログを残す必要のある重要なイベントに対して、メモリ検査が必要である旨の情報が定義される。なお、重要度マップ３２０の詳細は、図１８を用いて後述する。
【０１８１】
頻度判定部３５０は、イベントの発生頻度を判定する。時刻表３６０は、前記イベントが処理された時刻を格納する。判定閾値３７０は、イベントの発生頻度の高低を判定するための閾値である。
【０１８２】
検査部５０は、メモリ検査を実行する。検査部５０は、処理内容識別情報保持部５２、検査状態保持部５４及び検査対象選択部５６を備える。
【０１８３】
処理内容識別情報保持部５２は、ＯＳ４０が実行する予定の処理に関する情報、すなわち、処理内容識別情報を保持する。なお、処理内容識別情報のデータフォーマットは実施例１と同一である。
【０１８４】
検査状態保持部５４は、メモリ検査の検査状態を管理する。なお、保持される検査状態は、実施例１と同一である。
【０１８５】
検査対象選択部５６は、メモリマップ２００及び処理内容識別情報保持部５２に基づいて、メモリ検査の対象となるメモリ９０の記憶領域を特定する。
【０１８６】
図１６は、本発明の実施例２におけるＯＳ４０が管理するメモリ９０の一例を示す説明図である。
【０１８７】
ＯＳ４０は、メモリ９０の記憶領域の割り当てを管理しており、メモリ９０上にＯＳ４０自身を配置する領域と、アプリケーション６０が使用する領域及び検査部５０が使用する領域を割り当てる。
【０１８８】
例えば、図１６に示すように、ＯＳ４０は、ＡＤ０からＡＤ１までのアドレス範囲の記憶領域をＯＳ４０自身に割り当て、ＡＤ１からＡＤ２までのアドレス範囲の記憶領域を検査部５０に割り当てる。また、ＯＳ４０は、ＡＤ２からＡＤ３までのアドレス範囲の記憶領域及びＡＤ４からＡＤ５までのアドレス範囲の記憶領域をアプリケーション６０に割り当てる。なお、ＯＳ４０及び検査部５０に割り当てる記憶領域は固定的であるが、アプリケーション６０に割り当てる記憶領域は動的に変更することが可能である。
【０１８９】
ＯＳ４０が配置される領域には、イベント処理制御部１００、メモリマップ２００、メモリ縮退処理部２１０、メモリ検査制御部２５０及び検査頻度調整部３００が格納される。
【０１９０】
また、検査部５０が配置される領域には、処理内容識別情報保持部５２、検査状態保持部５４及び検査対象選択部５６が格納される。
【０１９１】
図１７は、本発明の実施例２におけるメモリマップ２００の一例を示す説明図である。
【０１９２】
メモリマップ２００のデータフォーマットは、実施例１と同一であるが、イベント識別子４４０にはＯＳ４０が実行するイベントの識別情報が格納される点が異なる。
【０１９３】
図１８は、本発明の実施例２における重要度マップ３２０の一例を示す説明図である。
【０１９４】
重要度マップ３２０は、イベント識別子４４０及び重要度４６０を含む。図１８に示すように、イベント毎に、当該イベントの重要度が保持される。
【０１９５】
重要度４６０は、ＯＳ４０によってイベント識別子４４０に対応するイベントが実行される場合に、確実に処理すべき重要なイベントであるか否かを示す情報を格納する。本実施例では、重要度４６０には、重要度が高いことを示す「高い」、又は、重要度が低いことを示す「低い」のいずれかが格納される。なお、重要度４６０は、「高い」又は「低い」の２値で表現する場合に限定されない。
【０１９６】
本実施例では、重要度マップ３２０は、予め設定されているものとする。例えば、アプリケーション６０の異常終了など、確実にログを残す必要なるイベントの重要度４６０には「高い」が格納される。
【０１９７】
図１９は、本発明の実施例２における時刻表３６０の一例を示す説明図である。
【０１９８】
時刻表３６０は、イベント識別子４４０及び前回時刻４９０を含む。図１９に示すように、イベント毎に当該イベントが前回処理された時刻が保持される。
【０１９９】
前回時刻４９０は、イベント識別子４４０に対応するイベントが最後に処理された時刻を格納する。
【０２００】
時刻表３６０はイベントの発生頻度を算出する時に用いられるが、本実施例では、重要度が高いイベントについては、イベントの発生頻度に関わらずメモリ検査が実行される。そのため、重要度マップ３２０において重要度４６０に「高い」が設定されているイベントの前回時刻４９０には、時刻が格納されない。
【０２０１】
図２０は、本発明の実施例２における優先度表１３０の一例を示す説明図である。
【０２０２】
優先度表１３０のデータフォーマットは、実施例１の図６と同一であるが、イベント識別子４４０にはＯＳ４０が実行するイベントの識別情報が格納される点が異なる。
【０２０３】
図２１は、本発明の実施例２における縮退表１２０の一例を示す説明図である。
【０２０４】
縮退表１２０のデータフォーマットは、実施例１の図７と同一であるが、イベント識別子４４０にはＯＳ４０が実行するイベントの識別情報が格納される点が異なる。
【０２０５】
＜ＯＳが実行する処理＞
次に、ＯＳ４０が実行する処理の一例について、以下、フローチャートを参照しながら説明する。
【０２０６】
ＯＳ４０が実行するイベント処理ループは、処理主体がＯＳ４０となる以外は実施例１の図８と同一内容の処理であるため、説明を省略する。また、検査部５０の初期化処理は、ＯＳ４０がメモリ９０を割り当てる点を除いて実施例１の図１０と同一内容の処理であるため、説明を省略する。
【０２０７】
図２２は、本発明の実施例２における検査頻度調整部３００が実行する処理の一例を説明するフローチャートである。
【０２０８】
検査頻度調整部３００は、重要度マップ３２０を参照して、発生したイベントに対応するエントリを検索する（ステップＳ１５００）。
【０２０９】
具体的には、重要度判定部３１０が、発生したイベントの識別子をキーとして、重要度マップ３２０を参照し、イベント識別子４４０が当該イベントの識別子と一致するエントリを検索する。
【０２１０】
検査頻度調整部３００は、発生したイベントの重要度が高いか否かを判定する（ステップＳ１５１０）。
【０２１１】
具体的には、重要度判定部３１０が、検索されたエントリの重要度４６０を参照して、重要度４６０に「高い」が格納されるか否かを判定する。重要度４６０に「高い」が格納される場合、発生したイベントの重要度が高いと判定される。
【０２１２】
発生したイベントの重要度が高いと判定された場合、検査頻度調整部３００は、メモリ検査が必要である旨の判定結果を出力する（ステップＳ１０３０）。
【０２１３】
発生したイベントの重要度が低いと判定された場合、検査頻度調整部３００は、前回同一のイベントが発生してからの経過時間を算出する（ステップＳ１５２０）。具体的には以下のような処理が実行される。
【０２１４】
頻度判定部３５０は、時刻表３６０を参照して、イベント識別子４４０が発生したイベントの識別子と一致するエントリを検索する。頻度判定部３５０は、検索されたエントリの前回時刻４９０を取得する。
【０２１５】
頻度判定部３５０は、現在の時刻及び取得された前回時刻４９０に基づいて、経過時刻を算出する。
【０２１６】
以上がステップＳ１５２０の処理である。
【０２１７】
次に、検査頻度調整部３００は、時刻表３６０の対応するエントリの前回時刻４９０に現在の時刻を格納する（ステップＳ１５３０）。
【０２１８】
検査頻度調整部３００は、判定閾値３７０と算出された経過時刻とを比較し、算出された経過時刻が判定閾値３７０より大きいか否かを判定する（ステップＳ１５４０）。
【０２１９】
算出された経過時間が判定閾値３７０より大きいと判定された場合、検査頻度調整部３００は、メモリ検査が必要である旨の判定結果を出力する（ステップＳ１０３０）。これは、発生したイベントが低頻度なイベントであるためである。
【０２２０】
算出された経過時間が判定閾値３７０以下であると判定された場合、検査頻度調整部３００は、メモリ検査が不要である旨の判定結果を出力する（ステップＳ１０２０）。
【０２２１】
図２３は、本発明の実施例２におけるＯＳ４０の初期化処理の一例を説明するフローチャートである。
【０２２２】
ＯＳ４０は、メモリマップ２００を初期化する（ステップＳ１２００）。
【０２２３】
具体的には、ＯＳ４０は、ＯＳ４０自身及び検査部５０に割り当てるメモリ９０のアドレス範囲（メモリ９０の記憶領域）を決定し、メモリマップ２００に決定されたメモリ９０のアドレス範囲の先頭アドレス及びサイズを格納する。
【０２２４】
ＯＳ４０は、縮退表１２０及び検査状態保持部５４を初期化する（ステップＳ１２１０、ステップＳ１２２０）。
【０２２５】
具体的には、ＯＳ４０は、縮退表１２０の全エントリの検査結果４８０に「正常」で設定し、検査状態保持部５４にＳｔｏｐを設定する。
【０２２６】
ＯＳ４０は、時刻表３６０を初期化する（ステップＳ１６００）。
【０２２７】
具体的には、ＯＳ４０は、各エントリの前回時刻４９０に、現在時刻から判定閾値３７０を減算した値を設定する。
【０２２８】
ＯＳ４０は、重要度マップ３２０及び優先度表１３０を予め定められた値に初期化し（ステップＳ１６１０）、図８のイベント処理ループに遷移する（ステップＳ１２４０）。
【０２２９】
＜検査部によって実行される処理及びメモリ障害検出後の縮退処理＞
検査部５０が実行する処理は、実施例１の図１２と同一であり、また、メモリ縮退処理は、実施例１の図１３と同一であるため説明を省略する。
【０２３０】
＜まとめ＞
実施例２によれば、システム制御部として稼動するＯＳ４０とは別の検査部５０がメモリ９０を検査するため、メモリ障害の発生を検出されてもＯＳ４０のダウンを回避できる。
【０２３１】
また、ＯＳ４０は、縮退表１２０を用いて、発生したイベントを処理するイベント処理部１４０を選択するため、正常なメモリ９０の記憶領域のみを用いて、発生したイベントの処理を継続できる。
【０２３２】
また、本実施例では、予め、重要性の高い処理と実行頻度の低い処理とにメモリ検査の対象を絞っているため、メモリ検査に伴う性能低下を抑制できる。
【０２３３】
また、本実施例では、アプリケーション６０の異常終了に関するログを保存するなどの確実性が求められる重要な処理は、頻度に依らずメモリ検査が実行される。したがって、アプリケーションの異常終了とメモリ障害とが連続して発生する二重障害が発生するケースであっても、ログを残すことができる。
【０２３４】
なお、処理に矛盾が生じない限り、実施例１の処理を実施例２に適用してもよいし、実施例２の処理を実施例１に適用してもよい。例えば、ハイパバイザ２０は、重要度判定部３１０及び頻度判定部３５０を含んでもよい。
【０２３５】
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体（例えば、非一時的な記憶媒体）に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【０２３６】
さらに、本実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【０２３７】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【０２３８】
１０  物理計算機
１２  ＬＡＮ
１３  ストレージ装置
１４  ＳＡＮ
１５  コンソール
２０  ハイパバイザ
３０  仮想計算機
３１  インターコネクト
４０  ＯＳ
５０  検査部
５２  処理内容識別情報保持部
５４  検査状態保持部
５６  検査対象選択部
６０  アプリケーション
７０  ＣＰＵ
７５  メモリ障害通知部
８０  Ｉ／Ｏデバイス
８５  ＣｈｉｐＳｅｔ
９０  メモリ
１００  イベント処理制御部
１１０  イベント処理部セレクタ
１２０  縮退表
１３０  優先度表
１４０  イベント処理部
１５０  検査待ち合わせ部
２００  メモリマップ
２１０  メモリ縮退処理部
２５０  メモリ検査制御部
３００  検査頻度調整部
３１０  重要度判定部
３２０  重要度マップ
３５０  頻度判定部
３６０  時刻表
３７０  判定閾値
３８０  検査要否マップ
【図１】
2014044511.tif 000003
【図２】
2014044511.tif 000004
【図３】
2014044511.tif 000005
【図４】
2014044511.tif 000006
【図５】
2014044511.tif 000007
【図６】
2014044511.tif 000008
【図７】
2014044511.tif 000009
【図８】
2014044511.tif 000010
【図９】
2014044511.tif 000011
【図１０】
2014044511.tif 000012
【図１１】
2014044511.tif 000013
【図１２】
2014044511.tif 000014
【図１３】
2014044511.tif 000015
【図１４】
2014044511.tif 000016
【図１５】
2014044511.tif 000017
【図１６】
2014044511.tif 000018
【図１７】
2014044511.tif 000019
【図１８】
2014044511.tif 000020
【図１９】
2014044511.tif 000021
【図２０】
2014044511.tif 000022
【図２１】
2014044511.tif 000023
【図２２】
2014044511.tif 000024
【図２３】
2014044511.tif 000025