特許第5831858号(P5831858)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5831858
(24)【登録日】2015年11月6日
(45)【発行日】2015年12月9日
(54)【発明の名称】計算機及びメモリ検査方法
(51)【国際特許分類】
   G06F 12/16 20060101AFI20151119BHJP
【FI】
   G06F12/16 330D
   G06F12/16 310C
【請求項の数】12
【全頁数】29
(21)【出願番号】特願2012-185505(P2012-185505)
(22)【出願日】2012年8月24日
(65)【公開番号】特開2014-44511(P2014-44511A)
(43)【公開日】2014年3月13日
【審査請求日】2014年11月7日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】100114236
【弁理士】
【氏名又は名称】藤井 正弘
(74)【代理人】
【識別番号】100075513
【弁理士】
【氏名又は名称】後藤 政喜
(72)【発明者】
【氏名】服部 直也
(72)【発明者】
【氏名】森木 俊臣
【審査官】 中野 裕二
(56)【参考文献】
【文献】 特開2007−140920(JP,A)
【文献】 特開2000−293391(JP,A)
【文献】 特開2012−103999(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/16
(57)【特許請求の範囲】
【請求項1】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるI/Oデバイスを備える計算機であって、
前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、
前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、
前記システム制御部は、
前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する調整部と、
前記メモリの異なる記憶領域を使用して前記イベントを処理する複数のイベント処理部と、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を含む検査結果情報を保持する検査結果情報保持部と、
前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定し、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する障害記録部と、
前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択するイベント処理部セレクタと、
を有することを特徴とする計算機。
【請求項2】
請求項1に記載の計算機であって、
前記システム制御部は、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域を特定するアドレス範囲を格納するメモリマップを管理し、
前記調整部の判定の結果に基づいて、前記検査プログラムの実行を制御するメモリ検査制御部を有し、
前記検査部は、前記メモリマップを参照して、検査対象のアドレス範囲を特定する検査対象選択部を有することを特徴とする計算機。
【請求項3】
請求項2に記載の計算機であって、
前記検査部は、前記メモリ検査の実行状態を保持する検査状態保持部を管理し、
前記システム制御部は、前記検査状態保持部から取得された前記メモリ検査の実行状態に基づいて、前記メモリ検査が終了するまで前記イベントの処理の開始を遅らせる検査待ち合わせ部を有することを特徴とする計算機。
【請求項4】
請求項2又は請求項3に記載の計算機であって、
前記調整部は、
前記各イベントの重要度を保持する重要度情報を管理し、
前記重要度情報に基づいて、前記検査プログラムを実行する必要があるか否かを判定する重要度判定部を有することを特徴とする計算機。
【請求項5】
請求項4に記載の計算機であって、
前記調整部は、
前記イベント毎に、前回の前記イベントに対応する処理が実行された時刻を保持する時刻情報を管理し、
前記時刻情報に基づいて、所定のイベントが前回発生してから再度発生するまでの経過時刻を算出し、前記算出された経過時刻に基づいて、前記検査プログラムを実行する必要があるか否かを判定する頻度判定部を有することを特徴とする計算機。
【請求項6】
請求項2又は3に記載の計算機であって、
前記調整部は、前記イベント毎に、前記検査プログラムを実行する必要があるか否かを示す情報を保持する検査要否情報を管理し、
前記調整部は、前記検査要否情報を参照して、前記検査プログラムを実行する必要があるか否かを判定することを特徴とする計算機。
【請求項7】
プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるI/Oデバイスを備える計算機におけるメモリ検査方法であって、
前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、
前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、
前記システム制御部は、
前記メモリの異なる記憶領域を使用して前記システム制御部の稼働中に発生したイベントを処理する複数のイベント処理部と、
前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を含む検査結果情報を保持する検査結果情報保持部と、を有し、
前記方法は、
前記システム制御部が、前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する第1のステップと、
前記システム制御部が、前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定する第2のステップと、
前記システム制御部が、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する第3のステップと、
前記システム制御部が、前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択する第4のステップと、
を含むことを特徴とするメモリ検査方法。
【請求項8】
請求項7に記載のメモリ検査方法であって、
前記システム制御部は、前記複数のイベント処理部の各々が使用する前記メモリの記憶領域を特定するアドレス範囲を格納するメモリマップを管理し、
前記第1のステップは、
前記システム制御部が、前記検査プログラムを実行する必要であると判定された場合に、前記検査プログラムを実行させるステップと、
前記検査部が、前記メモリマップを参照して、検査対象のアドレス範囲を特定するステップと、を含むことを特徴とするメモリ検査方法。
【請求項9】
請求項8に記載のメモリ検査方法であって、
前記検査部は、前記メモリ検査の実行状態を保持する検査状態保持部を管理し、
前記方法は、前記システム制御部が、前記検査状態保持部から取得された前記メモリ検査の実行状態に基づいて、前記メモリ検査が終了するまで前記イベントの処理の開始を遅らせるステップを含むことを特徴とするメモリ検査方法。
【請求項10】
請求項8又は請求項9に記載のメモリ検査方法であって、
前記システム制御部は、前記各イベントの重要度を保持する重要度情報を管理し、
前記第1のステップでは、前記重要度情報に基づいて、前記検査プログラムを実行する必要があるか否かを判定することを特徴とするメモリ検査方法。
【請求項11】
請求項10に記載のメモリ検査方法であって、
前記システム制御部は、前記イベント毎に、前回の前記イベントに対応する処理が実行された時刻を保持する時刻情報を管理し、
前記第1のステップは、
前記時刻情報に基づいて、所定のイベントが前回発生してから再度発生するまでの経過時刻を算出するステップと、
前記算出された経過時刻に基づいて、前記検査プログラムを実行する必要があるか否かを判定するステップと、を含むことを特徴とするメモリ検査方法。
【請求項12】
請求項8又は請求項9に記載のメモリ検査方法であって、
前記システム制御部は、前記イベント毎に、前記検査プログラムを実行する必要があるか否かを示す情報を保持する検査要否情報を管理し、
前記第1のステップでは、前記検査要否情報を参照して、前記検査プログラムを実行する必要があるか否かを判定することを特徴とするメモリ検査方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、計算機資源を用いて複数のプログラムを稼働させるシステムソフトウェアによって実現されるシステム制御部がメモリ障害を検出する技術に関する。
【背景技術】
【0002】
x86 CPUを搭載したオープン系サーバの性能及び機能拡充に伴い、サーバに搭載されるCPUコアを有効に活用する方法として、サーバ仮想化の機能を提供するハイパバイザが広く用いられている。ハイパバイザは、1台の物理サーバが搭載するCPU、メモリ及びI/Oデバイス等の計算機資源を用いて複数の仮想計算機を生成し、それぞれ仮想計算機上でOS及びアプリケーションを稼働させるシステムソフトウェアである。
【0003】
マルチコアCPUの普及に伴って1台の物理サーバ上に生成する仮想計算機の台数は増加傾向にあり、物理サーバが搭載するメモリ容量も増加傾向にある。これに伴って、メモリ容量を増加させるために、メモリモジュールに含まれるメモリ素子の微細化が進んでいる。
【0004】
一般的に、半導体を微細化すると、宇宙線などの外乱及びメモリ素子の故障に起因するデータ化けが起き易くなる。データ化けに起因する誤動作を防ぐために、サーバ用CPU内のメモリコントローラには、特許文献1などに記載されたECC(Error Correcting Code)による符号化が適用されている。
【0005】
ECCを用いることによって、読み出したデータが1bitエラー等の訂正可能障害であれば、検出された時点で当該障害を訂正してプログラムの動作を継続できるが、2bitエラー等の訂正不能障害(UE:Uncorrectable Error)が発生した場合にはプログラムの動作が阻害される。
【0006】
従来のx86 CPUを搭載したサーバでは、読み出されたデータがUEであった場合に、システム内の全CPUコアに対して強制停止を指示する障害割り込みを送信していた。そのため、当該サーバ上の全てのOS及びアプリケーションがダウンしていた。
【0007】
それに対して、Intel社(Intel及びインテルは登録商標、以下同じ)は、非特許文献1に記載されているように、CPUの障害処理の仕様を改定している。改定された仕様では、SRAR(Software Recoverable Action Required)というクラスの障害伝達手段が追加されており、当該仕様が追加されたことによって強制停止の範囲が限定された。
【0008】
SRARでは、障害割り込みのときにCPUコア毎に異なる情報が送信される。UEを読み出したCPUコアには、UEを保持していたメモリアドレスと、プログラムの実行状態(命令アドレス等)が失われた旨の情報が伝達される。他のCPUコアには、UEを保持していたメモリアドレスと、プログラムの実行状態が有効である旨の情報とが伝達される。このため、各情報を受け取ったシステムソフトウェアは、実行状態が失われたプログラムのみを強制停止させ、他のプログラムの動作を継続できる。
【0009】
しかし、SRARにも欠点が存在する。システムソフトウェア自身がUEを読み出した場合には、システムソフトウェア自身がダウンするため、システムソフトウェアが稼動させていた他のプログラムもダウンする。
【0010】
UEの発生を抑止するために、メモリコントローラはScrubbingを行っている。Scrubbingとは、メモリにアクセスしたタイミングで1bitエラー等の訂正可能障害を訂正する機能である。宇宙線等の外乱でデータ化けが繰り返し発生する場合、1bitエラーの段階でエラーを訂正できればUEの発生を抑止できる。
【0011】
しかし、この方法は、高頻度で参照されるメモリ領域に対しては有効だが、参照頻度の低いメモリ領域には効果が薄い。例えば、ハイパバイザには、仮想計算機の起動及びライブマイグレーションなどの実行頻度の低い処理がある。これらの実行頻度の低い処理の実行時に使用されるメモリ領域は、参照頻度が低いため、UEが比較的発生し易い。
【0012】
そこで、参照頻度の低いメモリ領域をScrubbingするために、プログラムの実行とは無関係にメモリコントローラ等のハードウェアがメモリ全域を巡回検査するPatrol Scrubbing技術が知られている。
【0013】
しかし、Patrol Scrubbingを行うと、ソフトウェア処理とPatrol Scrubbingとの間でメモリ帯域が競合するため、プログラムの実行性能が低下する。したがって、実用上は、巡回検査の周期を十分に長くすると等の対策を取ることによって、プログラム実行を優先している。そのため、Patrol Scrubbingを行っても、UE抑止又はUE先行検出に失敗し、システムソフトウェアがUEを読み出すケースが発生する。
【0014】
UEを回避する他の方法として、特許文献2などに記載されたメモリミラーリングも広く知られている。メモリミラーリングは、主系のメモリモジュール及び副系のメモリモジュールにデータを保持する冗長化技術である。
【0015】
通常は主系のメモリモジュールからデータが読み出されるが、読み出し結果がUEの場合には、副系のメモリモジュールからデータが自動的に読み直される。そのため、主系のメモリモジュール又は副系のメモリモジュールのいずれかに格納されたデータが無事ならば、システムソフトウェア等のプログラムのダウンを回避できる。
【0016】
しかし、メモリミラーリングでは、利用可能なメモリ容量が半分になるため、1台のサーバ上に多数の仮想計算機を構築する構成には適さない。
【先行技術文献】
【特許文献】
【0017】
【特許文献1】米国特許第6480982号明細書
【特許文献2】米国特許第7328315号明細書
【非特許文献】
【0018】
【非特許文献1】インテル、"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
【発明の概要】
【発明が解決しようとする課題】
【0019】
本発明の課題は、x86 CPUを搭載する計算機において、特に低頻度処理に関してシステムソフトウェアのダウンを回避し、かつ、性能低下の抑止及びメモリ容量の減少の回避を実現することである。
【課題を解決するための手段】
【0020】
本発明の代表的な一例を示せば、以下の通りである。すなわち、プロセッサ、前記プロセッサに接続されるメモリ、及び前記プロセッサに接続されるI/Oデバイスを備える計算機であって、前記メモリは、前記計算機全体を制御するシステム制御部を実現するシステムソフトウェア、及び、前記メモリにおけるメモリ障害の有無を検査する検査部を実現する検査プログラムを格納し、前記プロセッサは、前記メモリ障害を検出した場合に、当該メモリ障害が発生した前記メモリのアドレスである障害アドレスを前記システム制御部に通知するメモリ障害通知部を有し、前記システム制御部は、前記システム制御部の稼働中に発生したイベントの種類に基づいて、前記検査プログラムを実行する必要があるか否かを判定する調整部と、前記メモリの異なる記憶領域を使用して前記イベントを処理する複数のイベント処理部と、前記複数のイベント処理部の各々が使用する前記メモリの記憶領域に対して前記検査部が実行するメモリ検査の結果を含む検査結果情報を保持する検査結果情報保持部と、前記メモリ検査によってメモリ障害が検出された場合に、前記障害アドレスを含む前記メモリの記憶領域を使用する前記イベント処理部を特定し、前記検査結果情報に前記特定されたイベント処理部における前記メモリ障害を記録する障害記録部と、前記検査結果情報を参照して、前記メモリ障害が発生していない前記メモリの記憶領域を使用する前記複数のイベント処理部の中から、前記イベントを処理するイベント処理部を選択するイベント処理部セレクタと、を有することを特徴とする。
【発明の効果】
【0021】
本発明によれば、システムソフトウェアとは異なる検査プログラムによって実現される検査部がメモリ検査を実行するため、システム制御部が使用するメモリの記憶領域にメモリ障害(UE)が存在してもシステム制御部のダウンを回避できる。また、システム制御部は、メモリ障害を含むメモリの記憶領域を使わずに動作が継続できる。また、本発明では、Scrubbing等では効果が薄いイベントを検査対象の記憶領域としているため、メモリ検査によるメモリの性能低下を抑止できる。さらに、本発明では、メモリの冗長化が必要ないため、メモリ容量の減少を回避できる。
【図面の簡単な説明】
【0022】
図1】本発明の実施例1における物理計算機の構成例を示すブロック図である。
図2】本発明の実施例1の計算機システムのソフトウェア及びハードウェアの構成を示すスタック図である。
図3】本発明の実施例1におけるハイパバイザが管理するメモリの一例を示す説明図である。
図4】本発明の実施例1におけるメモリマップの一例を示す説明図である。
図5】本発明の実施例1における検査要否マップの一例を示す説明図である。
図6】本発明の実施例1における優先度表の一例を示す説明図である。
図7】本発明の実施例1における縮退表の一例を示す説明図である。
図8】本発明の実施例1におけるハイパバイザが実行するイベント処理ループの一例を説明するフローチャートである。
図9】本発明の実施例1における検査頻度調整部が実行する処理の一例を説明するフローチャートである。
図10】本発明の実施例1における検査プログラムの初期化処理の一例を説明するフローチャートである。
図11】本発明の実施例1におけるハイパバイザが実行する初期化処理の一例を説明するフローチャートである。
図12】本発明の実施例1における検査プログラムが実行する処理の一例を説明するフローチャートである。
図13】本発明の実施例1におけるメモリ縮退処理の一例を説明するフローチャートである。
図14】本発明の実施例2における物理計算機の構成例を示すブロック図である。
図15】本発明の実施例2の物理計算機のソフトウェア構成及びハードウェア構成を示すスタック図である。
図16】本発明の実施例2におけるOSが管理するメモリの一例を示す説明図である。
図17】本発明の実施例2におけるメモリマップの一例を示す説明図である。
図18】本発明の実施例2における重要度マップの一例を示す説明図である。
図19】本発明の実施例2における時刻表の一例を示す説明図である。
図20】本発明の実施例2における優先度表の一例を示す説明図である。
図21】本発明の実施例2における縮退表の一例を示す説明図である。
図22】本発明の実施例2における検査頻度調整部が実行する処理の一例を説明するフローチャートである。
図23】本発明の実施例2におけるOSの初期化処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0023】
以下では、本発明の実施例について添付図面を用いて説明する。
【実施例1】
【0024】
実施例1では、システム制御部としてハイパバイザが物理計算機を制御する計算機システムにおいて、イベント毎に設定されたメモリ検査の要否を示す情報に基づいて、メモリ検査を実行させる例を説明する。
【0025】
<ハードウェア構成>
図1は、本発明の実施例1における物理計算機の構成例を示すブロック図である。
【0026】
物理計算機10は、CPU70を一つ以上備え、これらのCPU70は、QPI(QUICK Path InterConnect)又はSMI(Scalable Memory InterConnect)等のインターコネクト31を介してChipSet85及びメモリ90と接続される。
【0027】
ChipSet85には、PCIexpress等のバス32を介してI/Oデバイス80が接続される。I/Oデバイス80は、LAN12に接続されるNIC(Network Interface Card)、ストレージ装置13及びSAN14(Storage Area Network)等に接続されるHBA(Host Bus Adapter)、及びコンソール15に接続されるグラフィックコントローラなどから構成される。なお、I/Oデバイス80は、複数あってもよい。
【0028】
CPU70は、インターコネクト31を介してメモリ90にアクセスし、また、ChipSet85を介してI/Oデバイス80にアクセスして所定の処理を実行する。同様に、I/Oデバイス80は、ChipSet85を介してメモリ90にアクセスする。
【0029】
メモリ90は、CPU70によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。図1に示すように、メモリ90には、ハイパバイザ20を実現するためのプログラム(例えば、システムソフトウェア)がロードされ、CPU70によって当該プログラムが実行される。また、メモリ90には、検査部50を実現するためのプログラム(例えば、検査プログラム)がロードされ、CPU70によって当該プログラムが実行される。
【0030】
なお、以下では、ハイパバイザ20及び検査部50等を主体にして説明を記載する場合には、ハイパバイザ20及び検査部50等を実現するためのプログラムがCPU70によって実行されていることを表す。
【0031】
ハイパバイザ20は、物理計算機10を制御する。ハイパバイザ20は、検査部50及び仮想計算機30に、メモリ90の記憶領域の一部を割り当てる。また、仮想計算機30上では、OS40及びアプリケーション60が稼働する。
【0032】
<ソフトウェア構成>
次に、物理計算機10上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図2を参照しながら詳述する。
【0033】
図2は、本発明の実施例1の計算機システムのソフトウェア及びハードウェアの構成を示すスタック図である。
【0034】
物理計算機10上では、仮想計算機30を生成し、また、管理するハイパバイザ20がシステム制御部として稼動する。仮想計算機30上では、OS40が稼動する。さらに、OS40は、アプリケーション60を実行する。
【0035】
物理計算機10は、CPU70及びメモリ90を備える。本実施例のCPU70は、メモリ障害通知部75を備える。
【0036】
メモリ障害通知部75は、メモリ90からデータを読み出す場合に、訂正不能なメモリ障害を検出すると、読み出されたデータのメモリ90上のアドレスと共に訂正不能なメモリ障害が発生した旨をシステム制御部(ハイパバイザ20)に通知する。なお、訂正可能なメモリ障害についても同様の情報がシステム制御部(ハイパバイザ20)に通知されてもよい。
【0037】
以下では、説明の簡単のために、訂正不能なメモリ障害をメモリ障害と記載し、訂正不能なメモリ障害が発生したメモリ上のアドレスを障害アドレスと記載する。
【0038】
前述した情報の通知方法には幾つかの方法が考えられる。例えば、メモリ障害通知部75が保有するレジスタに、障害アドレスと、訂正不能なメモリ障害を意味するビットパターンとを格納し、割り込みを発生させる方法等が考えられる。
【0039】
なお、CPU70には命令アドレスなどのプログラム実行ステートを保持する状態レジスタなどが含まれるが、メモリ障害を検出するときには、状態レジスタの値の一部は不正な値に化けていてもよい。
【0040】
ハイパバイザ20は、メモリ90を検査する検査部50を制御し、また、仮想計算機30を生成し、生成された仮想計算機30を管理する。ハイパバイザ20は、イベント処理制御部100、メモリマップ200、メモリ縮退処理部210、検査頻度調整部300及びメモリ検査制御部250を備える。
【0041】
イベント処理制御部100は、仮想計算機30上のOS40及びアプリケーション60の稼動時に、仮想計算機30及び物理計算機10において発生するイベントを処理する。
【0042】
イベント処理制御部100は、複数のイベント処理部140、イベント処理制御部100は、イベント処理部セレクタ110、検査待ち合わせ部150、縮退表120及び優先度表130を備える。
【0043】
イベント処理部140は、発生したイベントを処理する。各イベント処理部140は、それぞれ使用するメモリ90の記憶領域が異なる。本実施例では、イベント処理部140の一例として、発生しうる全てのイベントを処理する完全イベント処理部140−1、及び、一部の処理を省略する縮退イベント処理部140−2を含む。
【0044】
縮退イベント処理部140−2は、例えば、仮想計算機30のライブマイグレーション要求に対してライブマイグレーションを実現する機能をサポートしていない旨を応答し、ソフトウェア障害の発生時に出力するログメッセージの量が少ない等の制限がある。
【0045】
イベント処理部セレクタ110は、優先度表130及び縮退表120に基づいて、発生したイベントに対して適用するイベント処理部140を選択する。検査待ち合わせ部150は、メモリ検査が終了するまで処理の開始を遅らせる。
【0046】
優先度表130は、複数のイベント処理部140を適用する優先順を示す適用優先度をイベントの種類毎に格納する。なお、優先度表130の詳細は、図6を用いて後述する。縮退表120は、メモリ90の検査結果を格納し、各イベント処理部140が発生した各イベントを処理する場合に使用される。なお、縮退表120の詳細は、図7を用いて後述する。
【0047】
以上が、イベント処理制御部100のソフトウェア構成である。
【0048】
メモリマップ200は、安全性及び性能の低下を避けつつメモリ90を検査するために用いられる情報であり、メモリアドレス毎に、当該メモリアドレスに対応するメモリ90の記憶領域を使用する処理に関する情報を格納する。メモリマップ200の詳細は、図4を用いて後述する。
【0049】
メモリ縮退処理部210は、メモリ障害を契機に呼び出され、検査部50を強制終了させ、以降の障害アドレスの読み出しを抑止する。
【0050】
メモリ検査制御部250は、検査頻度調整部300の判定の結果に基づいて、検査部50を制御する。
【0051】
検査頻度調整部300は、発生したイベントの種類に応じてメモリ検査の要否を判定する。検査頻度調整部300は、イベントの種類に応じて予め定義されたメモリ検査の要否を示す情報を保持する検査要否マップ380を備える。
【0052】
検査要否マップ380には、例えば、ソフトウェア障害の発生など、確実にログを残す必要のある重要なイベントに対して、メモリ検査が必要である旨の情報が定義される。また、仮想計算機30のライブマイグレーション要求等の発生頻度の低いイベントは、メモリ障害が発生しやすいため、メモリ検査が必要である旨の情報が定義される。なお、検査要否マップ380の詳細は、図5を用いて後述する。
【0053】
検査部50は、メモリ検査を実行する。検査部50は、処理内容識別情報保持部52、検査状態保持部54及び検査対象選択部56を備える。
【0054】
処理内容識別情報保持部52は、ハイパバイザ20が実行する予定の処理に関する情報、すなわち、処理内容識別情報を保持する。処理内容識別情報保持部52が保持する処理内容識別情報のデータフォーマットは、後述するメモリマップ200と同一のものである。
【0055】
検査状態保持部54は、メモリ検査の検査状態を管理する。具体的には、検査状態保持部54は、Starting(検査開始中)、Running(検査中)、Stop(検査正常終了)、Error(検査異常終了)のいずれかの状態を保持する。
【0056】
検査対象選択部56は、メモリマップ200及び処理内容識別情報保持部52に基づいて、メモリ検査の対象となるメモリ90の記憶領域を特定する。
【0057】
図3は、本発明の実施例1におけるハイパバイザ20が管理するメモリ90の一例を示す説明図である。
【0058】
ハイパバイザ20は、メモリ90の記憶領域の割り当てを管理しており、メモリ90上にハイパバイザ20自身を配置する領域、仮想計算機30が使用する領域及び検査部50が使用する領域を割り当てる。
【0059】
例えば、図3に示すように、ハイパバイザ20は、AD0からAD1までのアドレス範囲の記憶領域をハイパバイザ20自身に割り当て、AD1からAD2までのアドレス範囲の記憶領域を検査部50に割り当てる。また、ハイパバイザ20は、AD2からAD3までのアドレス範囲の記憶領域を仮想計算機30−1が割り当て、AD4からAD5までのアドレス範囲の記憶領域を仮想計算機30−nに割り当てられる。なお、ハイパバイザ20及び検査部50に割り当てる記憶領域は固定的であるが、仮想計算機30に割り当てる記憶領域は動的に変更することが可能である。
【0060】
ハイパバイザ20が配置される領域には、イベント処理制御部100、メモリマップ200、メモリ縮退処理部210、メモリ検査制御部250及び検査頻度調整部300が格納される。
【0061】
仮想計算機30が配置される領域には、OS40が格納される。OS40は、当該領域のうち、OS40自身を配置する領域及びアプリケーション60が使用する領域を割り当てる。
【0062】
また、検査部50が配置される領域には、処理内容識別情報保持部52、検査状態保持部54及び検査対象選択部56が格納される。
【0063】
図4は、本発明の実施例1におけるメモリマップ200の一例を示す説明図である。
【0064】
メモリマップ200は、先頭メモリアドレス410、サイズ420及び処理内容識別情報430を含む。
【0065】
先頭メモリアドレス410は、所定のメモリ90の記憶領域の先頭のアドレスを格納する。サイズ420は、所定のメモリ90の記憶領域のサイズを格納する。ハイパバイザ20は、先頭メモリアドレス410及びサイズ420に基づいて、所定のメモリ90の記憶領域の位置及びサイズを把握することができる。
【0066】
図4に示すように、所定のメモリ90の記憶領域に対して、当該記憶領域を使用するイベント処理部140及び実行されるイベントの情報が処理内容識別情報430として対応づけられる。
【0067】
処理内容識別情報430は、発生したイベント及び当該イベントを処理するイベント処理部140を特定する情報を格納する。具体的には、処理内容識別情報430は、イベント識別子440及びイベント処理部識別子450を含む。
【0068】
イベント識別子440は、発生したイベントを一意に識別するための識別子を格納する。イベント処理部識別子450は、イベント識別子440に対応するイベントを処理するイベント処理部140を一意に識別するための識別子を格納する。
【0069】
なお、処理内容識別情報430のデータフォーマットは、処理内容識別情報保持部52などでも同一のものが用いられる。
【0070】
図5は、本発明の実施例1における検査要否マップ380の一例を示す説明図である。
【0071】
検査要否マップ380は、イベント識別子440及び検査要否465を含む。図5に示すように、イベント毎にメモリ検査が必要か否かを示す情報が格納される。
【0072】
検査要否465は、ハイパバイザ20によってイベント識別子440に対応するイベントが実行される場合に、メモリ検査が必要であるか否かを示す情報を格納する。本実施例では、検査要否465には、メモリ検査が必要であることを示す「必要」、又は、メモリ検査が必要でないことを示す「不要」のいずれかが格納される。なお、検査要否465は、「必要」又は「不要」の2値で表現する場合に限定されない。
【0073】
本実施例では、検査要否マップ380は、予め設定されているものとする。例えば、ソフトウェア障害の発生など、確実にログを残す必要のある重要なイベントの場合、当該イベントに対応するエントリの検査要否465には「必要」が格納される。また、仮想計算機のライブマイグレーション要求のように発生頻度の低いイベントは、イベント処理部140が使用するメモリ90の記憶領域にメモリ障害が起き易いため、当該イベントに対応するエントリの検査要否465には「必要」が格納される。一方、LAN12からのデータ受信など、発生頻度が低く、かつ、重要性の低いイベントに対応するエントリの検査要否465には「不要」が格納される。
【0074】
図6は、本発明の実施例1における優先度表130の一例を示す説明図である。
【0075】
優先度表130は、イベント識別子440、イベント処理部識別子450及び優先度470を含む。図6に示すように、イベント毎に、当該イベントを処理するイベント処理部140及び適用するイベント処理部140の優先順位がペアとなった情報が格納される。
【0076】
優先度470は、イベント識別子440に対応するイベントが発生した場合に、当該イベントを優先的に処理するイベント処理部140の適用順を格納する。
【0077】
本実施例のハイパバイザ20は、イベント処理部140として、完全イベント処理部140−1及び縮退イベント処理部140−2の二つを備える。したがって、一つのイベント識別子440に対して、イベント処理部識別子450に完全イベント処理部140−1又は縮退イベント処理部140−2のいずれか一方の識別子が格納され、優先度470には、「1」又は「2」のいずれかの値が格納される。本実施例では、優先度470の値が小さいイベント処理部140から順に適用される。
【0078】
なお、本実施例では、完全イベント処理部140−1の優先度470が「1」となるように設定されているが、本発明はこれに限定されず、イベント毎に異なる優先度470の値が設定されてもよい。
【0079】
なお、ハイパバイザ20は、三つ以上のイベント処理部140を備えていてもよい。
【0080】
図7は、本発明の実施例1における縮退表120の一例を示す説明図である。
【0081】
縮退表120は、イベント識別子440、イベント処理部識別子450及び検査結果480を含む。図7に示すように、発生したイベント及び当該イベントを処理するイベント処理部140の組み合わせによって一意に特定されるメモリ90の記憶領域毎に、メモリ検査の検査結果が格納される。
【0082】
検査結果480は、所定のイベントを処理するイベント処理部140によって使用されるメモリ90の記憶領域に対するメモリ検査の検査結果を格納する。本実施例では、メモリ検査の検査結果が正常であることを示す「正常」、又は、メモリ検査の検査結果が異常であることを示す「異常」のいずれかが格納される。なお、検査結果480には、初期値として「正常」が設定されるものとする。
【0083】
本実施例では、後述するように、イベント処理部セレクタ110によって、検査結果480が「異常」であるメモリ90の記憶領域の使用が回避される。すなわち、異常が発生したメモリ90の記憶領域を使用するイベント処理部140が選択されないように制御される。
【0084】
<ハイパバイザが実行する処理>
次に、ハイパバイザ20が実行する処理の一例について、フローチャートを参照しながら説明する。
【0085】
図8は、本発明の実施例1におけるハイパバイザ20が実行するイベント処理ループの一例を説明するフローチャートである。なお、イベント処理は、ハイパバイザ20自身の処理が停止するまで繰り返し実行されるループ処理である。
【0086】
ハイパバイザ20は、物理計算機10又は仮想計算機30において発生したイベントを受け付けると(ステップS900)、縮退表120及び優先度表130を参照して、発生したイベントを処理するイベント処理部140を選択する(ステップS910)。具体的には、以下のような処理が実行される。
【0087】
イベント処理部セレクタ110は、発生したイベントのイベント識別子を特定する。イベント処理部セレクタ110は、縮退表120を参照して、イベント識別子440が特定されたイベント識別子と一致するエントリを検索する。さらに、イベント処理部セレクタ110は、検索されたエントリの検査結果480を参照して、当該検査結果480に「正常」が格納されるエントリを特定する。
【0088】
次に、イベント処理部セレクタ110は、優先度表130を参照して、縮退表120から特定されたエントリのイベント識別子440及びイベント処理部識別子450と一致するエントリを検索する。イベント処理部セレクタ110は、検索されたエントリの優先度470を参照して、検索されたエントリの中から適用順位が最も高いエントリを選択する。
【0089】
以上の処理によって、選択されたエントリのイベント処理部識別子450に対応するイベント処理部140が選択される。このとき、検査結果480が「異常」であるエントリ、すなわち、障害アドレスを含むメモリ90の記憶領域を使用するイベント処理部140は選択されない。
【0090】
以上がステップS910の処理である。
【0091】
次に、ハイパバイザ20は、検査頻度調整部300に、メモリ検査の要否判定処理の実行を指示する(ステップS920)。なお、検査頻度調整部300が実行する処理の詳細は、図9を用いて後述する。
【0092】
ハイパバイザ20は、検査頻度調整部300からの判定結果に基づいて、メモリ検査が必要であるか否かを判定する(ステップS930)。すなわち、検査部50を実現する検査プログラムを実行する必要があるか否かが判定される。
【0093】
具体的には、ハイパバイザ20は、検査頻度調整部300からメモリ検査が必要である旨の判定結果が出力されたか否かを判定する。検査頻度調整部300からメモリ検査が必要である旨の判定結果が出力された場合、ハイパバイザ20は、メモリ検査が必要であると判定する。一方、検査頻度調整部300からメモリ検査が不要である旨の判定結果が出力された場合、ハイパバイザ20は、メモリ検査が不要であると判定する。
【0094】
メモリ検査が不要であると判定された場合、ハイパバイザ20は、選択されたイベント処理部140に、発生したイベントの処理を指示する(ステップS980)。その後、ハイパバイザ20は、ステップS900に戻り同様の処理を実行する。
【0095】
メモリ検査が必要であると判定された場合、ハイパバイザ20は、メモリ検査の検査状態がStop又はErrorのいずれかに該当するか否かを判定する(ステップS940)。
【0096】
具体的には、ハイパバイザ20は、検査状態保持部54を参照し、検査状態がStop又はErrorのいずれかに該当するか否かを判定する。これは、すでに検査部50がメモリ検査を実行しているか否かを判定するための処理である。
【0097】
検査状態がStop又はErrorでない、すなわち、検査状態がStarting又はRunningであると判定された場合、ハイパバイザ20は、メモリ検査の終了まで待ち続ける(ステップS945)。
【0098】
具体的には、検査待ち合わせ部150が、検査状態保持部54を周期的に参照して、メモリ検査が終了し、かつ、検査状態がStop又はErrorになるまで待ち続ける。その後、ハイパバイザ20は、ステップS950に遷移する。
【0099】
検査状態がStop又はErrorであると判定された場合、ハイパバイザ20は、検査部50を起動する(ステップS950)。
【0100】
具体的には、メモリ検査制御部250が、検査部50の初期化処理を実行する。なお、検査部50の初期化処理の詳細は、図10を用いて後述する。
【0101】
検査部50が起動された後、ハイパバイザ20は、メモリ検査の終了まで待ち続ける(ステップS960)。
【0102】
具体的には、検査待ち合わせ部150が、検査状態保持部54を周期的に参照して、メモリ検査が終了し、かつ、検査状態がStop又はErrorになるまで待ち続ける。
【0103】
メモリ検査が終了し、かつ、検査状態が変更された後、ハイパバイザ20は、検査状態がStopであるか否かを判定する(ステップS970)。すなわち、メモリ検査が正常終了したか否かが判定される。
【0104】
検査状態がStopであると判定された場合、ハイパバイザ20は、選択されたイベント処理部140に、発生したイベントの処理を指示する(ステップS980)。
【0105】
検査状態がStopでない、すなわち、検査状態がErrorであると判定された場合、ハイパバイザ20は、S910に戻り同様の処理を実行する。なお、障害アドレスの参照を避けるために、ステップS910では、前回選択されたイベント処理部140とは異なるイベント処理部140が選択される。
【0106】
図9は、本発明の実施例1における検査頻度調整部300が実行する処理の一例を説明するフローチャートである。
【0107】
検査頻度調整部300は、検査要否マップ380を参照して、発生したイベントに対応するエントリを検索する(ステップS1000)。
【0108】
具体的には、検査頻度調整部300は、発生したイベントの識別子をキーとして、検査要否マップ380を参照し、イベント識別子440が当該イベントの識別子と一致するエントリを検索する。
【0109】
検査頻度調整部300は、発生したイベントについてメモリ検査が必要であるか否かを判定する(ステップS1010)。
【0110】
具体的には、検査頻度調整部300は、検索されたエントリの検査要否465が「必要」であるか否かを判定する。検索されたエントリの検査要否465が「必要」である場合、発生したイベントについてメモリ検査が必要であると判定される。
【0111】
発生したイベントについてメモリ検査が必要でないと判定された場合、検査頻度調整部300は、メモリ検査が不要である旨の判定結果を出力する(ステップS1020)。
【0112】
発生したイベントについてメモリ検査が必要であると判定された場合、検査頻度調整部300は、メモリ検査が必要である旨の判定結果を出力する(ステップS1030)。
【0113】
図10は、本発明の実施例1における検査部50の初期化処理の一例を説明するフローチャートである。
【0114】
メモリ検査制御部250は、検査状態保持部54が保持する検査状態をStartingに変更する(ステップS1100)。
【0115】
この時点では、検査部50はまだ起動されていないが、本実施例では、ハイパバイザ20が検査状態保持部54に固定的なメモリ90の記憶領域を割り当てているため、検査部50の起動前であっても検査状態保持部54が保持する情報を更新できる。
【0116】
メモリ検査制御部250は、処理内容識別情報保持部52に、処理内容識別情報をセットする(ステップS1110)。
【0117】
具体的には、発生したイベントの識別子、及び、選択されたイベント処理部140の識別子がペアとなった処理内容識別情報が設定される。
【0118】
メモリ検査制御部250は、検査部50に対して、命令アドレスなどの初期状態をCPU70に順次セットし(ステップS1120)、その後、検査部50を起動する。
【0119】
図11は、本発明の実施例1におけるハイパバイザ20が実行する初期化処理の一例を説明するフローチャートである。
【0120】
ハイパバイザ20は、メモリマップ200を初期化する(ステップS1200)。
【0121】
具体的には、ハイパバイザ20は、ハイパバイザ20自身及び検査部50に割り当てるメモリ90のアドレス範囲(メモリ90の記憶領域)を決定し、メモリマップ200に決定されたメモリ90のアドレス範囲の先頭アドレス及びサイズを格納する。
【0122】
本実施例では、検査部50に予め固定的なメモリ90の記憶領域が割り当てられているが、ハイパバイザ20は、検査部50の実行時にメモリ90の記憶領域を割り当て、ハイパバイザ20に割り当てられたメモリ90の記憶領域に、当該アドレスを格納する方法でもよい。
【0123】
ハイパバイザ20は、縮退表120及び検査状態保持部54を初期化する(ステップS1210、ステップS1220)。
【0124】
具体的には、ハイパバイザ20は、縮退表120の全エントリの検査結果480に「正常」を設定し、検査状態保持部54にStopを設定する。
【0125】
ハイパバイザ20は、検査要否マップ380及び優先度表130を予め設定された値に初期化し(ステップS1230)、図8に示すイベント処理ループに遷移する(ステップS1240)。
【0126】
<検査部によって実行される処理及びメモリ障害検出後の縮退処理>
図12は、本発明の実施例1における検査部50が実行する処理の一例を説明するフローチャートである。
【0127】
検査部50は、処理内容識別情報保持部52を参照し、処理内容識別情報として、発生したイベントの識別子、及び選択されたイベント処理部140の識別子を取得する(ステップS1300)。
【0128】
検査部50は、検査状態保持部54が保持する検査状態をRunningに変更する(ステップS1310)。これによって、ハイパバイザ20は、メモリ検査が開始されたことを把握できる。
【0129】
検査部50は、メモリマップ200のエントリを読み出す(ステップS1320)。
【0130】
具体的には、検査対象選択部56が、ステップS1320からステップS1360のループ処理において、メモリマップ200のエントリを上から順に一つずつ読み出す。
【0131】
以下では、読み出されたメモリマップ200のエントリを対象エントリとも記載する。
【0132】
検査対象選択部56は、対象エントリの処理内容識別情報430と、取得された処理内容識別情報とが一致するか否かを判定する(ステップS1330)。
【0133】
処理内容識別情報が一致すると判定された場合、検査対象選択部56は、検査対象のアドレス範囲のデータを読み出す(ステップS1340)。具体的には、以下のような処理が実行される。
【0134】
ステップS1330からステップS1340に遷移した場合、検査対象選択部56は、まず、対象エントリの先頭メモリアドレス410及びサイズ420で指定されたメモリ90の記憶領域を検査対象の記憶領域として扱う。なお、ステップS1355からステップS1340に遷移する場合、前述した検査対象の記憶領域を決定する処理は省略できる。
【0135】
さらに、検査対象選択部56は、検査対象の記憶領域から所定のアドレス範囲に含まれるデータを読み出す。このとき、先頭メモリアドレス410から順にデータが読み出される。
【0136】
なお、各ループ処理において読み出されるデータ量(サイズ)及びアドレス範囲は、物理計算機10の性能又は処理負荷等に合わせて任意の設定することができる。例えば、物理計算機10が、8バイトの読み出しが速いCPU70と、64バイト単位でECCを付与するメモリ90とを備える場合、各回、アドレス範囲が64バイト間隔、かつ、読み出されるデータ量が8バイトに設定する方法が考えられる。
【0137】
以上がステップS1340の処理である。
【0138】
次に、CPU70は、S1340で検査対象のアドレスから読み出されたデータに訂正不能障害が発生しているか否かを判定する(ステップS1350)。なお、訂正不能障害の発生を検出する方法は、公知の技術を用いればよいため説明を省略する。
【0139】
訂正不能障害が発生していると判定された場合、CPU70のメモリ障害通知部75が、メモリ縮退処理部210を呼び出してメモリ縮退処理に遷移する(ステップS1380)。なお、メモリ縮退処理の詳細は、図13を用いて後述する。
【0140】
メモリ障害通知部75がメモリ縮退処理部210を呼び出す方法はどのような方法であってもよく、例えば、メモリ縮退処理部210を割り込みハンドラとしてCPU70に事前登録しておき、障害割り込みを契機に呼び出す方法が考えられる。
【0141】
訂正不能障害が発生していないと判定された場合、検査対象選択部56は、検査対象の全記憶領域について検査が完了したか否かを判定する(ステップS1355)。
【0142】
検査対象の全記憶領域について検査が完了していないと判定された場合、検査対象選択部56は、ステップS1340に戻り、次のアドレス範囲(例えば、64バイト先のアドレス範囲)を読み出し、同様の処理を実行する。
【0143】
検査対象の全記憶領域について検査が完了していると判定された場合、検査対象選択部56は、メモリマップ200の全エントリに対して処理が完了したか否かを判定する(ステップS1360)。
【0144】
メモリマップ200の全エントリに対して処理が完了していないと判定された場合、検査対象選択部56は、ステップS1320に戻り、メモリマップ200から次のエントリを読み出し、同様の処理を実行する。
【0145】
メモリマップ200の全エントリに対して処理が完了していると判定された場合、検査部50は、検査状態保持部54の検査状態をStopに変更し(ステップS1370)、検査部50自身を停止させる(ステップS1390)。
【0146】
図13は、本発明の実施例1におけるメモリ縮退処理の一例を説明するフローチャートである。
【0147】
メモリ縮退処理部210は、訂正不能障害が発生していることが検出された場合(ステップS1350がYES)に呼び出されて以下の処理を開始する。
【0148】
メモリ縮退処理部210は、障害アドレス、及び訂正不能障害が発生した旨のビットパターンを取得する(ステップS1400)。
【0149】
例えば、メモリ縮退処理部210は、メモリ障害通知部75のレジスタを読み出すことによって障害アドレス、及びビットパターンを取得できる。
【0150】
メモリ縮退処理部210は、メモリマップ200を参照して、障害アドレスを含むメモリ90の記憶領域を使用する処理を特定する(ステップS1410)。
【0151】
具体的には、メモリ縮退処理部210は、先頭メモリアドレス410及びサイズ420に基づいて、障害アドレスが含まれるメモリ90の記憶領域に対応するエントリを特定する。さらに、メモリ縮退処理部210は、特定されたエントリから、イベント識別子440及びイベント処理部識別子450を取得する。
【0152】
メモリ縮退処理部210は、縮退表120の対応するエントリにメモリ検査の検査結果を格納する(ステップS1420)。
【0153】
具体的には、メモリ縮退処理部210は、縮退表120を参照して、取得されたイベント識別子440及びイベント処理部識別子450に一致するエントリを検索する。メモリ縮退処理部210は、検索されたエントリの検査結果480を「異常」に変更する。
【0154】
本処理によって、次回、イベント識別子440に対応するイベントが発生した場合、図8のステップS910の処理では、訂正不能障害が発生していないメモリ90の記憶領域を使用するイベント処理部140が選択される。
【0155】
メモリ縮退処理部210は、検査部50を停止させ(ステップS1430)、検査状態保持部54の検査状態をErrorに変更する(ステップS1440)。本処理によって、検査待ち合わせ部150がメモリ検査の異常終了を認識できる。
【0156】
なお他の実施形態として、任意のプログラムにおいて、メモリの訂正不能障害が発生した場合に、メモリ縮退処理部210が呼び出され、検査部50に割り当てられたCPU70の番号及び検査状態保持部54が保持する検査状態を用いて、検査部50がメモリの訂正不能障害の発生を検出したケースを切り分けてから、図13の処理を実行する実施形態も容易に考えられる。
【0157】
<まとめ>
実施例1によれば、システム制御部として稼動するハイパバイザ20とは別の検査部50がメモリ90を検査するため、メモリ障害が検出されてもハイパバイザ20のダウンを回避できる。
【0158】
また、ハイパバイザ20は、縮退表120に基づいて、発生したイベントを処理するイベント処理部140を選択するため、正常なメモリ90の記憶領域のみを用いてイベントの処理を継続できる。
【0159】
また、本実施例では、予め、重要性の高い処理と実行頻度の低い処理とにメモリ検査の対象を絞っているため、メモリ検査に伴う性能低下を抑制できる。
【0160】
また、本実施例では、メモリ90の冗長化が必要でないため、メモリ容量の減少を回避できる。
【0161】
また、本実施例では、ソフトウェア障害のログを保存するといった確実性が求められる重要な処理は、実行頻度に依らずメモリ検査が実行される。したがって、ソフトウェア障害とメモリ障害とが連続的に発生する二重障害が発生するケースであっても、ソフトウェア障害が発生した旨のログを残すことができる。
【実施例2】
【0162】
実施例2では、システム制御部としてOSが物理計算機を制御する計算機システムにおいて、イベント毎の重要度と、実行時に計測されるイベントの発生頻度とに基づいて、メモリ検査を実行させる例を説明する。
【0163】
以下では、実施例1と同一の構成及び処理には同一の符号を付与し、その説明は省略する。
【0164】
<ハードウェア構成>
図14は、本発明の実施例2における物理計算機の構成例を示すブロック図である。
【0165】
物理計算機10のハードウェア構成は、実施例1と同一であるため説明を省略する。実施例2では、メモリ90におけるソフトウェア構成が異なる。
【0166】
本実施例のメモリ90には、OS40を実現するプログラムがロードされ、CPU70によって当該プログラムが実行される。また、メモリ90には、検査部50を実現するプログラムがロードされ、CPU70によって当該プログラムが実行される。
【0167】
OS40は、物理計算機10を制御する。OS40は、検査部50及びアプリケーション60にメモリ90の記憶領域を割り当てる。
【0168】
<ソフトウェア構成>
次に、物理計算機10上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図15を参照しながら詳述する。
【0169】
図15は、本発明の実施例2の物理計算機10のソフトウェア構成及びハードウェア構成を示すスタック図である。
【0170】
物理計算機10上では、OS40がシステム制御部として稼動する。また、OS40は、さらに、一つ以上のアプリケーション60を稼働させる。
【0171】
OS40は、メモリ90を検査する検査部50を制御し、また、アプリケーション60を実行する。OS40は、イベント処理制御部100、メモリマップ200、メモリ縮退処理部210、検査頻度調整部300及びメモリ検査制御部250を備える。
【0172】
イベント処理制御部100は、アプリケーション60の稼働時に、物理計算機10において発生するイベントを処理する。
【0173】
イベント処理制御部100は、複数のイベント処理部140、イベント処理制御部100は、イベント処理部セレクタ110、検査待ち合わせ部150、縮退表120及び優先度表130を備える。
【0174】
イベント処理部140は、発生したイベントを処理する。各イベント処理部140は、それぞれ使用するメモリ90の記憶領域が異なる。本実施例では、イベント処理部140の一例として、発生しうる全てのイベントを処理できる完全イベント処理部140−1、及び、一部の処理を省略する縮退イベント処理部140−2を含む。
【0175】
縮退イベント処理部140−2は、例えば、仮想計算機30のライブマイグレーション要求に対してライブマイグレーションを実現する機能をサポートしていない旨を応答し、ソフトウェア障害の発生時に出力するログメッセージの量が少ない等の制限がある。
【0176】
イベント処理制御部100の構成は、OS40がイベントを処理する点を除いて、実施例1と同一である。
【0177】
メモリマップ200、メモリ縮退処理部210及びメモリ検査制御部250は、実施例1と同一であるため説明を省略する。
【0178】
検査頻度調整部300は、発生したイベントの種類に応じてメモリ検査の要否を判定する。実施例2では、重要なイベント、及び発生頻度の低いイベントによって使用されるメモリ90の記憶領域に対してメモリ検査が実行される。
【0179】
実施例2の検査頻度調整部300は、重要度判定部310、重要度マップ320、頻度判定部350、時刻表360、判定閾値370を備える。
【0180】
重要度判定部310は、発生したイベントの重要度を判定する。重要度マップ320は、イベントの重要度に関する情報を格納する。重要度マップ320には、例えば、アプリケーション60の異常終了など、確実にログを残す必要のある重要なイベントに対して、メモリ検査が必要である旨の情報が定義される。なお、重要度マップ320の詳細は、図18を用いて後述する。
【0181】
頻度判定部350は、イベントの発生頻度を判定する。時刻表360は、前記イベントが処理された時刻を格納する。判定閾値370は、イベントの発生頻度の高低を判定するための閾値である。
【0182】
検査部50は、メモリ検査を実行する。検査部50は、処理内容識別情報保持部52、検査状態保持部54及び検査対象選択部56を備える。
【0183】
処理内容識別情報保持部52は、OS40が実行する予定の処理に関する情報、すなわち、処理内容識別情報を保持する。なお、処理内容識別情報のデータフォーマットは実施例1と同一である。
【0184】
検査状態保持部54は、メモリ検査の検査状態を管理する。なお、保持される検査状態は、実施例1と同一である。
【0185】
検査対象選択部56は、メモリマップ200及び処理内容識別情報保持部52に基づいて、メモリ検査の対象となるメモリ90の記憶領域を特定する。
【0186】
図16は、本発明の実施例2におけるOS40が管理するメモリ90の一例を示す説明図である。
【0187】
OS40は、メモリ90の記憶領域の割り当てを管理しており、メモリ90上にOS40自身を配置する領域と、アプリケーション60が使用する領域及び検査部50が使用する領域を割り当てる。
【0188】
例えば、図16に示すように、OS40は、AD0からAD1までのアドレス範囲の記憶領域をOS40自身に割り当て、AD1からAD2までのアドレス範囲の記憶領域を検査部50に割り当てる。また、OS40は、AD2からAD3までのアドレス範囲の記憶領域及びAD4からAD5までのアドレス範囲の記憶領域をアプリケーション60に割り当てる。なお、OS40及び検査部50に割り当てる記憶領域は固定的であるが、アプリケーション60に割り当てる記憶領域は動的に変更することが可能である。
【0189】
OS40が配置される領域には、イベント処理制御部100、メモリマップ200、メモリ縮退処理部210、メモリ検査制御部250及び検査頻度調整部300が格納される。
【0190】
また、検査部50が配置される領域には、処理内容識別情報保持部52、検査状態保持部54及び検査対象選択部56が格納される。
【0191】
図17は、本発明の実施例2におけるメモリマップ200の一例を示す説明図である。
【0192】
メモリマップ200のデータフォーマットは、実施例1と同一であるが、イベント識別子440にはOS40が実行するイベントの識別情報が格納される点が異なる。
【0193】
図18は、本発明の実施例2における重要度マップ320の一例を示す説明図である。
【0194】
重要度マップ320は、イベント識別子440及び重要度460を含む。図18に示すように、イベント毎に、当該イベントの重要度が保持される。
【0195】
重要度460は、OS40によってイベント識別子440に対応するイベントが実行される場合に、確実に処理すべき重要なイベントであるか否かを示す情報を格納する。本実施例では、重要度460には、重要度が高いことを示す「高い」、又は、重要度が低いことを示す「低い」のいずれかが格納される。なお、重要度460は、「高い」又は「低い」の2値で表現する場合に限定されない。
【0196】
本実施例では、重要度マップ320は、予め設定されているものとする。例えば、アプリケーション60の異常終了など、確実にログを残す必要なるイベントの重要度460には「高い」が格納される。
【0197】
図19は、本発明の実施例2における時刻表360の一例を示す説明図である。
【0198】
時刻表360は、イベント識別子440及び前回時刻490を含む。図19に示すように、イベント毎に当該イベントが前回処理された時刻が保持される。
【0199】
前回時刻490は、イベント識別子440に対応するイベントが最後に処理された時刻を格納する。
【0200】
時刻表360はイベントの発生頻度を算出する時に用いられるが、本実施例では、重要度が高いイベントについては、イベントの発生頻度に関わらずメモリ検査が実行される。そのため、重要度マップ320において重要度460に「高い」が設定されているイベントの前回時刻490には、時刻が格納されない。
【0201】
図20は、本発明の実施例2における優先度表130の一例を示す説明図である。
【0202】
優先度表130のデータフォーマットは、実施例1の図6と同一であるが、イベント識別子440にはOS40が実行するイベントの識別情報が格納される点が異なる。
【0203】
図21は、本発明の実施例2における縮退表120の一例を示す説明図である。
【0204】
縮退表120のデータフォーマットは、実施例1の図7と同一であるが、イベント識別子440にはOS40が実行するイベントの識別情報が格納される点が異なる。
【0205】
<OSが実行する処理>
次に、OS40が実行する処理の一例について、以下、フローチャートを参照しながら説明する。
【0206】
OS40が実行するイベント処理ループは、処理主体がOS40となる以外は実施例1の図8と同一内容の処理であるため、説明を省略する。また、検査部50の初期化処理は、OS40がメモリ90を割り当てる点を除いて実施例1の図10と同一内容の処理であるため、説明を省略する。
【0207】
図22は、本発明の実施例2における検査頻度調整部300が実行する処理の一例を説明するフローチャートである。
【0208】
検査頻度調整部300は、重要度マップ320を参照して、発生したイベントに対応するエントリを検索する(ステップS1500)。
【0209】
具体的には、重要度判定部310が、発生したイベントの識別子をキーとして、重要度マップ320を参照し、イベント識別子440が当該イベントの識別子と一致するエントリを検索する。
【0210】
検査頻度調整部300は、発生したイベントの重要度が高いか否かを判定する(ステップS1510)。
【0211】
具体的には、重要度判定部310が、検索されたエントリの重要度460を参照して、重要度460に「高い」が格納されるか否かを判定する。重要度460に「高い」が格納される場合、発生したイベントの重要度が高いと判定される。
【0212】
発生したイベントの重要度が高いと判定された場合、検査頻度調整部300は、メモリ検査が必要である旨の判定結果を出力する(ステップS1030)。
【0213】
発生したイベントの重要度が低いと判定された場合、検査頻度調整部300は、前回同一のイベントが発生してからの経過時間を算出する(ステップS1520)。具体的には以下のような処理が実行される。
【0214】
頻度判定部350は、時刻表360を参照して、イベント識別子440が発生したイベントの識別子と一致するエントリを検索する。頻度判定部350は、検索されたエントリの前回時刻490を取得する。
【0215】
頻度判定部350は、現在の時刻及び取得された前回時刻490に基づいて、経過時刻を算出する。
【0216】
以上がステップS1520の処理である。
【0217】
次に、検査頻度調整部300は、時刻表360の対応するエントリの前回時刻490に現在の時刻を格納する(ステップS1530)。
【0218】
検査頻度調整部300は、判定閾値370と算出された経過時刻とを比較し、算出された経過時刻が判定閾値370より大きいか否かを判定する(ステップS1540)。
【0219】
算出された経過時間が判定閾値370より大きいと判定された場合、検査頻度調整部300は、メモリ検査が必要である旨の判定結果を出力する(ステップS1030)。これは、発生したイベントが低頻度なイベントであるためである。
【0220】
算出された経過時間が判定閾値370以下であると判定された場合、検査頻度調整部300は、メモリ検査が不要である旨の判定結果を出力する(ステップS1020)。
【0221】
図23は、本発明の実施例2におけるOS40の初期化処理の一例を説明するフローチャートである。
【0222】
OS40は、メモリマップ200を初期化する(ステップS1200)。
【0223】
具体的には、OS40は、OS40自身及び検査部50に割り当てるメモリ90のアドレス範囲(メモリ90の記憶領域)を決定し、メモリマップ200に決定されたメモリ90のアドレス範囲の先頭アドレス及びサイズを格納する。
【0224】
OS40は、縮退表120及び検査状態保持部54を初期化する(ステップS1210、ステップS1220)。
【0225】
具体的には、OS40は、縮退表120の全エントリの検査結果480に「正常」で設定し、検査状態保持部54にStopを設定する。
【0226】
OS40は、時刻表360を初期化する(ステップS1600)。
【0227】
具体的には、OS40は、各エントリの前回時刻490に、現在時刻から判定閾値370を減算した値を設定する。
【0228】
OS40は、重要度マップ320及び優先度表130を予め定められた値に初期化し(ステップS1610)、図8のイベント処理ループに遷移する(ステップS1240)。
【0229】
<検査部によって実行される処理及びメモリ障害検出後の縮退処理>
検査部50が実行する処理は、実施例1の図12と同一であり、また、メモリ縮退処理は、実施例1の図13と同一であるため説明を省略する。
【0230】
<まとめ>
実施例2によれば、システム制御部として稼動するOS40とは別の検査部50がメモリ90を検査するため、メモリ障害の発生を検出されてもOS40のダウンを回避できる。
【0231】
また、OS40は、縮退表120を用いて、発生したイベントを処理するイベント処理部140を選択するため、正常なメモリ90の記憶領域のみを用いて、発生したイベントの処理を継続できる。
【0232】
また、本実施例では、予め、重要性の高い処理と実行頻度の低い処理とにメモリ検査の対象を絞っているため、メモリ検査に伴う性能低下を抑制できる。
【0233】
また、本実施例では、アプリケーション60の異常終了に関するログを保存するなどの確実性が求められる重要な処理は、頻度に依らずメモリ検査が実行される。したがって、アプリケーションの異常終了とメモリ障害とが連続して発生する二重障害が発生するケースであっても、ログを残すことができる。
【0234】
なお、処理に矛盾が生じない限り、実施例1の処理を実施例2に適用してもよいし、実施例2の処理を実施例1に適用してもよい。例えば、ハイパバイザ20は、重要度判定部310及び頻度判定部350を含んでもよい。
【0235】
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
【0236】
さらに、本実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
【0237】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【符号の説明】
【0238】
10 物理計算機
12 LAN
13 ストレージ装置
14 SAN
15 コンソール
20 ハイパバイザ
30 仮想計算機
31 インターコネクト
40 OS
50 検査部
52 処理内容識別情報保持部
54 検査状態保持部
56 検査対象選択部
60 アプリケーション
70 CPU
75 メモリ障害通知部
80 I/Oデバイス
85 ChipSet
90 メモリ
100 イベント処理制御部
110 イベント処理部セレクタ
120 縮退表
130 優先度表
140 イベント処理部
150 検査待ち合わせ部
200 メモリマップ
210 メモリ縮退処理部
250 メモリ検査制御部
300 検査頻度調整部
310 重要度判定部
320 重要度マップ
350 頻度判定部
360 時刻表
370 判定閾値
380 検査要否マップ
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23