説明

情報処理装置および障害処理方法

【課題】X86アーキテクチャのCPUを複数備える情報処理装置において、CPUに致命的なエラーが発生して動作不能になった場合に、動作不能になったCPU以外のCPUのエラーログを取得する。
【解決手段】プロセッサがチップセットから所定の割込を受信し、プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込み、プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定し、複数の状態レジスタの値が一致しないときには、複数のプロセッサの何れかに障害が発生したと判定し、自プロセッサのログを取得して前記BMCに送信する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のプロセッサを備えたサーバで、当該サーバの管理を行うBMC(BaseBoard Management Controller)を備えたIntel(登録商標)X86アーキテクチャの情報処理装置におけるエラー処理に関するものである。
【背景技術】
【0002】
近年の典型的なIntel X86アーキテクチャのサーバでは、複数のCPUと、これらのCPUに直接接続されたメモリ、チップセットといった計算機システムとして所定の機能を提供する装置と、これらの装置を管理するBMCからなることが多い。
【0003】
このような計算機システムにおいて、何れかのCPUに障害が発生した場合、チップセット(例えば、I/Oハブ)からSMI(System Management Interrupt)が全CPUに入力され、一つのCPUが全メモリ上にひとつだけ存在するBIOS(Basic Input/Output)のSMIハンドラを起動する。SMIハンドラはエラー処理以外の通常処理にも用いられるため、まずエラー処理のためにSMIハンドラが呼び出されたのかを判定し、エラー処理のために呼び出されたのを確認後、各CPUのログ情報を取得してBMCに送信するなど所定のエラー処理を行う。
【0004】
エラー処理以外の通常処理(レガシーエミュレーションなど)によりSMIハンドラが呼び出された場合は、エラー処理のためにSMIハンドラが呼び出されたのか否かを判定し、エラー処理以外のためにSMIハンドラが呼び出されたのを確認後、通常処理を実行する。SMIハンドラの処理に関するものとして非特許文献1が知られている。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】「Intel(r)64 and IA-32 Architectures Software Developer's Manuals Volume 3B 26-1」、[online]、Intel corp. 発行、[平成23年6月1日検索]、インターネット<URL:http://www.intel.com/products/processor/manuals/>
【発明の概要】
【発明が解決しようとする課題】
【0006】
従来、BIOSのSMIハンドラが動作するCPU上で致命的なエラーが発生して動作不能になった場合、エラーログをBMCに出力することなくシステムが停止してしまう。
また、SMIハンドラが動作するCPU以外のCPU上で致命的なエラーが発生して動作不能になり、SMIハンドラが動作するCPUがエラーログ収集のために動作不能になったCPUにアクセスした場合、SMIハンドラが動作するCPUにも致命的なエラーが発生して動作不能になり、エラーログをBMCに出力することなくシステムが停止する場合がある。これらの場合、エラーログを一切取得できず、障害の解析が困難になる、という問題があった。
【0007】
そこで本発明は、上記問題点に鑑みてなされたもので、複数のCPUのうちエラーの発生により少なくともひとつのCPUでSMIハンドラが起動したときに、動作不能になったCPU以外のエラーログを取得することを目的とする。
【課題を解決するための手段】
【0008】
本発明は、複数のプロセッサとメモリと、前記複数のプロセッサに接続されたBMCと、前記プロセッサ毎に設けられた状態レジスタと、前記プロセッサに所定の割込を入力するチップセットと、を備えた情報処理装置の障害処理方法であって、前記プロセッサが前記チップセットから所定の割込を受信する第1のステップと、前記プロセッサが、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込む第2のステップと、前記プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定する第3のステップと、を含む。
【0009】
そして、前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記BMCに送信する。
【発明の効果】
【0010】
したがって、本発明は、複数のプロセッサのうちの何れかが動作不能になったとしても、少なくとも動作不能になったプロセッサ以外のログを取得することが可能となる。
【図面の簡単な説明】
【0011】
【図1】本発明の実施形態を示し、情報処理装置の一例を示すブロック図である。
【図2】本発明の実施形態を示し、CPU動作確認装置の一例を示すブロック図である。
【図3】本発明の実施形態を示し、CPU状態レジスタとプラットフォーム状態レジスタの値の対応関係を示すテーブルである。
【図4】本発明の実施形態を示し、SMIハンドラの処理の一例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【0013】
図1は、本発明の実施形態を示し、情報処理装置の一例を示すブロック図である。情報処理装置は、二つのCPU11−1、11−2と、各CPU11−1、11−2にそれぞれ接続された二つのメモリ12−1、12−2と、CPU11−1に接続された一つのI/Oハブ14と、情報処理装置1を管理するBMC(BaseBoard Management Controller)10と、不揮発メモリ90、および本発明によって新たに追加されたCPU動作確認装置13を有する。
【0014】
不揮発メモリ90には、SMI(System Management Interrupt)ハンドラ92−0を含むBIOS(Basic Input/Output System)91が格納される。なお、不揮発メモリ90は、SMIハンドラ92−0を含むBIOS91のプログラムを保持する非一時的な記憶媒体として機能する。
【0015】
メモリ12−1、12−2は、DDR(Double Data Rate)3の規格に準拠したメモリバス19−1、19−2を介してそれぞれメモリコントローラを内蔵するCPU11−1、11−2に直接接続される。
【0016】
I/Oハブ14はESI(Enterprise Southbridge Interface)16を介してCPU11−1に接続される。BMC10はI/Oハブ14とCPU11−1、11−2にそれぞれPCIe(PCI Express)18−1、18−2、18−3を介して直接接続される。不揮発メモリ90はI/Oハブ14に接続される。CPU動作確認装置13は、PCIe17−1、17−2を介してすべてのCPU11−1、11−2に直接接続される。
【0017】
メモリ12−1、12−2にはOS(オペレーティングシステム)がロードされ、CPU11−1、11−2によって実行される。また本発明の特徴として従来構成とは異なり、すべてのメモリであるメモリ12−1、12−2には、不揮発メモリ90のBIOS91からSMIハンドラ92−0がロードされて、SMIハンドラ92−1、92−2として保持される。SMIハンドラ92−1、92−2は、I/Oハブ14から所定の割込(SMI)を受信するとCPU11−1、11−2によって実行され、変数CounterStart51−1、51−2及び変数CounterOffset52−1、52−2がメモリ12−1、12−2に格納され、障害処理部2−1及び障害処理部2−2としてそれぞれ機能する。
【0018】
なお、以下の説明では、CPU11−1、11−2の総称をCPU11とし、メモリ12−1、12−2の総称をメモリ12とし、他の構成要素の総称も同様にして添え字を除いたものとする。また、CPU11の識別子はCPU11−1をCPU#1、CPU11−2をCPU#2とする。
【0019】
図2は、CPU動作確認装置13の構成を示すブロック図である。CPU動作確認装置13は、情報処理装置のCPU11と同数の送受信装置20−1、20−2とCPU状態レジスタ21−1、21−2および一つのAND演算装置22、プラットフォーム状態レジスタ23、レジスタ初期化装置24、クロックカウンタ25、クロックジェネレータ26からなる。
【0020】
CPU状態レジスタ21−1、21−2は0と1の二値を取り得るレジスタであり、送受信装置20−1、20−2を介してCPU11−1、11−2に接続される。なお、CPU状態レジスタ21−1がCPU11−1の状態を保持し、CPU状態レジスタ21−2がCPU11−2の状態を保持する。これらCPU状態レジスタ21−1、21−2は、CPU11−1、11−2から値を書き込むことができる。
【0021】
AND演算装置22は全CPU状態レジスタ21と、プラットフォーム状態レジスタ23に接続され、全CPU状態レジスタ21の値の論理積を常に計算し、結果をプラットフォーム状態レジスタ23に格納する。
【0022】
プラットフォーム状態レジスタ23の値は「0」と「1」の二値を取り得るレジスタであり、送受信装置20を介してCPU11に接続され、CPU11はプラットフォーム状態レジスタ23の値を読むことが可能である。
【0023】
レジスタ初期化装置24は、CPU状態レジスタ21および送受信装置20に接続され、送受信装置20を通じてCPU11からの命令を受け、全CPU状態レジスタ21に0を書き込むことでCPU状態レジスタ21を初期化することが可能である。
【0024】
クロックジェネレータ26は後述するBIOS91のSMIハンドラ92−0においてタイムアウトを検出するために必要なクロック信号を生成するための回路である。
【0025】
クロックカウンタ25はクロックジェネレータ26に接続され、クロックジェネレータ26が生成するクロック信号を受信し、クロックをカウントする。カウントした値はカウンタレジスタ27に保存される。カウンタレジスタ27は送受信装置20に接続され、CPU11から送受信装置20を通じて値を読むことが可能である。
【0026】
図3は、CPU状態レジスタ21とプラットフォーム状態レジスタ23の値の対応表である。図中、CPU状態レジスタ#1はCPU状態レジスタ21−1を示し、CPU状態レジスタ#2はCPU状態レジスタ21−2を示す。
【0027】
CPU状態レジスタ21における「0」は、対応するCPU11が動作可能であるか否かが不明であることを示し、「1」は対応するCPU11が動作可能であることを示す。
【0028】
プラットフォーム状態レジスタ23の値は全CPU状態レジスタ21の論理積が保存されるため、一つ以上のCPU状態レジスタ21の値が「0」、すなわち一つ以上のCPU11が動作可能であるか否かが不明であるときプラットフォーム状態レジスタ23の値は「0」となる(31,32,33)。同様にすべてのCPU状態レジスタ21が「1」、すなわちすべてのCPU11が動作可能であるとき、プラットフォーム状態レジスタ23の値は「1」となる(34)。
【0029】
図4は、BIOS91のSMIハンドラ92−0を含む障害処理部2−1、2−2をCPU11で実行する際の処理の一例を示すフローチャートである。BIOS91のSMIハンドラ92−0は、CPU11に致命的なエラーが発生した時、またはそれ以外の理由によるI/Oハブ14からのSMI(System Management Interrupt)によって起動され、すべての動作可能なCPU11で障害処理部2として実行される。すなわち、CPU11−1ではメモリ12−1に読み込んだSMIハンドラ92−1をSMIを受信した後に実行して障害処理部2−1を機能させ、CPU11−2ではメモリ12−2に読み込んだSMIハンドラ92−2をSMIを受信した後に実行し、障害処理部2−2を機能させる。なお、SMIはI/Oハブ14が所定の条件で全CPU11送信する。
【0030】
SMIハンドラ92を実行するCPU11は、SMIハンドラ92を起動した直後のCPU動作確認装置13のカウンタレジスタ27の値を読み込み、CountStart51(図1の51−1または51−2の総称)としてメモリ12に保存する(ステップ41)。
【0031】
SMIハンドラ92を実行するCPU11は、自CPU11に対応するCPU状態レジスタ21に「1」を格納する(ステップ42)。
【0032】
次に、SMIハンドラ92の処理を一定時間だけ待機する(ステップ43)。これは当該CPU11以外の動作可能なCPU11が、対応するCPU状態レジスタ21に1を保存し終わるのを待つためである。この一定時間は、例えば、1秒などに設定される。
【0033】
一定時間が経過すると、SMIハンドラ92を実行するCPU11は、プラットフォーム状態レジスタ23の値を読み、プラットフォーム状態レジスタ23の値が「0」であるか否かを判定する(ステップ44)。プラットフォーム状態レジスタ23の値が「1」、すなわち前述のとおり、すべてのCPU11が動作可能である場合、SMIハンドラ92は通常のSMI処理を実行する(ステップ48)。なお、上記SMI処理は、前記非特許文献1に規定される処理で、例えば、SMM(System Management Mode)の処理などで構成される。
【0034】
そして、SMIハンドラ92を実行するCPU11はレジスタ初期化装置24を動作させる(ステップ49)。これによりレジスタ初期化装置24は全CPU状態レジスタ21に「0」を格納する。その後、CPU11はSMIハンドラ92の処理を終了する。
【0035】
一方、ステップ44の判定において、プラットフォーム状態レジスタ23の値が「0」である場合、すなわち一以上のCPU11が動作可能であるか否かが不明な場合、換言すれば、全てのCPU状態レジスタ21の値が一致しない場合で、動作可能であるか否か不明なCPU11が存在すると判定した場合にはステップ50へ進む。つまり障害処理部2は、CPU状態レジスタ21の値が一致しない場合、論理積が0になるので、何れかのCPU11に障害が発生したと判定することができる。
【0036】
そして、CPU11は、クロックカウンタ25のカウンタレジスタ27の値とCountStart51との差であるCountOffset52(図1の52−1または52−2の総称)を算出する(ステップ50)。この算出は、例えば、
CountOffset=カウンタレジスタの値 − CountStart
とすればよい。
【0037】
SMIハンドラ92を実行するCPU11は、CountOffset52の値が予め設定した閾値以上であるか否かを判定する(ステップ45)。この閾値はSMIハンドラ92が予め保持している値であり、CountOffset52が閾値を越えるほどの時間が経過している状態で、動作可能か否かが分からないCPU11が存在することは、動作不能なCPU11が存在するとみなすことが出来るほど十分に大きな値である。
【0038】
よってプラットフォーム状態レジスタ23の値が「0」、すなわちすべてのCPU11が動作可能か否かは不明であり、かつCountOffset52が閾値以上の場合は、動作可能ではないCPU11が存在すると判定し、SMIハンドラ92を実行しているCPU11は自身のエラーログを取得する(ステップ46)。閾値53は情報処理装置1の構成などに応じて適宜設定される十分に大きな値である。SMIハンドラ92を実行するCPU11は、取得したエラーログをBMC10に送信し(ステップ47)、処理を終了する。
【0039】
一方、ステップ45にてCountOffset52の値が閾値53未満であると判定された場合、SMIハンドラ92はステップ43の処理を繰り返して実行する。
【0040】
本発明の新規な構成である、CPU動作確認装置13と、すべてのメモリ12にロードされたSMIハンドラ92−1,92−2により、CPU11が他のCPU11に直接アクセスすることなく、他のCPU11が動作可能か否かを判定することが可能になる。これにより、いずれかのCPU11に致命的なエラーが発生して動作不能になった場合でも、動作不能になっていないCPU11のエラーログを取得することが可能となった。
【0041】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前期実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【0042】
例えば、本実施の形態では、CPU11の数は2つであるが、これは三つ以上の構成でも可能である。また、CPU11とCPU動作確認装置13はPCIe17−1,17−2を介して接続されるが、これはI2Cバスなど他の通信規格を採用してもよい。また、本実施の形態では、BMC10とCPU動作確認装置13は別の装置として存在しているが、BMC10がCPU動作確認装置13と同等の機能を含む構成も可能である。
【0043】
また、図1においてCPU11は、複数または多数の汎用プロセッサコアで構成されてもよいし、汎用プロセッサコアに加えてアクセラレータコアを含むヘテロジニアス・マルチコアプロセッサで構成されても良い。
【0044】
また、図1においてCPU11−1、11−2は、それぞれソケットに取り付けられて、CPU動作確認装置13及びBMC10は全てのソケットと接続される。なお、CPU動作確認装置13及びBMC10は、全てのCPU11(ソケット)と接続されていない場合、本発明の上述した作用及び効果を得ることはできない。
【0045】
また、図1においてCPU11−1、11−2は、予めメモリ12−1、12−2にSMIハンドラ92−1、92−2を予めロードしておく例を示したが、I/Oハブ14からSMIを受信したときに各CPU11がBIOS91のSMIハンドラ92−0をロードした後に実行しても良い。
【符号の説明】
【0046】
10 BMC
11−1、11−2 CPU
12−1、12−2 メモリ
13 CPU動作確認装置
92−0、92−1、92−3 SMIハンドラ

【特許請求の範囲】
【請求項1】
複数のプロセッサとメモリと、
前記複数のプロセッサに接続されたBMCと、
前記プロセッサ毎に設けられた状態レジスタと、
前記プロセッサに所定の割込を入力するチップセットと、
を備えた情報処理装置であって、
前記複数のプロセッサの何れかに障害が発生したときに前記障害が発生したプロセッサ以外のプロセッサのログを取得する障害処理部を有し、
前記障害処理部は、
前記プロセッサが前記チップセットから所定の割込を受信すると、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込み、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致しているか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする情報処理装置。
【請求項2】
請求項1に記載の情報処理装置であって、
前記障害処理部は、
前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記BMCに送信することを特徴とする情報処理装置。
【請求項3】
請求項1に記載の情報処理装置であって、
前記障害処理部は、
前記プロセッサ毎に設けられた前記複数の状態レジスタの値が一致しているときには、前記複数のプロセッサが正常と判定して所定の処理を実行することを特徴とする情報処理装置。
【請求項4】
請求項1に記載の情報処理装置であって、
前記状態レジスタは、動作確認装置に含まれ、
当該動作確認装置は、
前記複数のプロセッサに対応した状態レジスタと、
すべての状態レジスタの論理積を計算するAND演算装置と、
前記AND演算装置の計算結果を格納するプラットフォーム状態レジスタと、
を有することを特徴とする情報処理装置。
【請求項5】
請求項4に記載の情報処理装置であって、
前記障害処理部は、
前記プラットフォーム状態レジスタの値に基づいて前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする情報処理装置。
【請求項6】
複数のプロセッサとメモリと、前記複数のプロセッサに接続されたBMCと、前記プロセッサ毎に設けられた状態レジスタと、前記プロセッサに所定の割込を入力するチップセットと、を備えた情報処理装置の障害処理方法であって、
前記プロセッサが前記チップセットから所定の割込を受信する第1のステップと、
前記プロセッサが、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込む第2のステップと、
前記プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定する第3のステップと、
を含むことを特徴とする障害処理方法。
【請求項7】
請求項6に記載の障害処理方法であって、
前記第3のステップは、
前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記BMCに送信することを特徴とする障害処理方法。
【請求項8】
請求項6に記載の障害処理方法であって、
前記第3のステップは、
前記プロセッサ毎に設けられた前記複数の状態レジスタの値が一致しているときには、所定の処理を実行することを特徴とする障害処理方法。
【請求項9】
請求項6に記載の障害処理方法であって、
前記状態レジスタは、動作確認装置に含まれ、
当該動作確認装置は、
前記複数のプロセッサに対応した状態レジスタと、
すべての状態レジスタの論理積を計算するAND演算装置と、
前記AND演算装置の計算結果を格納するプラットフォーム状態レジスタと、
を有することを特徴とする障害処理方法。
【請求項10】
請求項9に記載の障害処理方法であって、
前記第3のステップは、
前記プラットフォーム状態レジスタの値に基づいて前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする障害処理方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate