(57)【要約】【課題】Ｘ８６アーキテクチャのＣＰＵを複数備える情報処理装置において、ＣＰＵに致命的なエラーが発生して動作不能になった場合に、動作不能になったＣＰＵ以外のＣＰＵのエラーログを取得する。【解決手段】プロセッサがチップセットから所定の割込を受信し、プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込み、プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定し、複数の状態レジスタの値が一致しないときには、複数のプロセッサの何れかに障害が発生したと判定し、自プロセッサのログを取得して前記ＢＭＣに送信する。【選択図】図１
2013025440.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサとメモリと、
前記複数のプロセッサに接続されたＢＭＣと、
前記プロセッサ毎に設けられた状態レジスタと、
前記プロセッサに所定の割込を入力するチップセットと、
を備えた情報処理装置であって、
前記複数のプロセッサの何れかに障害が発生したときに前記障害が発生したプロセッサ以外のプロセッサのログを取得する障害処理部を有し、
前記障害処理部は、
前記プロセッサが前記チップセットから所定の割込を受信すると、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込み、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致しているか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記障害処理部は、
前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記ＢＭＣに送信することを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置であって、
前記障害処理部は、
前記プロセッサ毎に設けられた前記複数の状態レジスタの値が一致しているときには、前記複数のプロセッサが正常と判定して所定の処理を実行することを特徴とする情報処理装置。
【請求項４】
請求項１に記載の情報処理装置であって、
前記状態レジスタは、動作確認装置に含まれ、
当該動作確認装置は、
前記複数のプロセッサに対応した状態レジスタと、
すべての状態レジスタの論理積を計算するＡＮＤ演算装置と、
前記ＡＮＤ演算装置の計算結果を格納するプラットフォーム状態レジスタと、
を有することを特徴とする情報処理装置。
【請求項５】
請求項４に記載の情報処理装置であって、
前記障害処理部は、
前記プラットフォーム状態レジスタの値に基づいて前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする情報処理装置。
【請求項６】
複数のプロセッサとメモリと、前記複数のプロセッサに接続されたＢＭＣと、前記プロセッサ毎に設けられた状態レジスタと、前記プロセッサに所定の割込を入力するチップセットと、を備えた情報処理装置の障害処理方法であって、
前記プロセッサが前記チップセットから所定の割込を受信する第１のステップと、
前記プロセッサが、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込む第２のステップと、
前記プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定する第３のステップと、
を含むことを特徴とする障害処理方法。
【請求項７】
請求項６に記載の障害処理方法であって、
前記第３のステップは、
前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記ＢＭＣに送信することを特徴とする障害処理方法。
【請求項８】
請求項６に記載の障害処理方法であって、
前記第３のステップは、
前記プロセッサ毎に設けられた前記複数の状態レジスタの値が一致しているときには、所定の処理を実行することを特徴とする障害処理方法。
【請求項９】
請求項６に記載の障害処理方法であって、
前記状態レジスタは、動作確認装置に含まれ、
当該動作確認装置は、
前記複数のプロセッサに対応した状態レジスタと、
すべての状態レジスタの論理積を計算するＡＮＤ演算装置と、
前記ＡＮＤ演算装置の計算結果を格納するプラットフォーム状態レジスタと、
を有することを特徴とする障害処理方法。
【請求項１０】
請求項９に記載の障害処理方法であって、
前記第３のステップは、
前記プラットフォーム状態レジスタの値に基づいて前記複数のプロセッサの何れかに障害が発生したか否かを判定することを特徴とする障害処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを備えたサーバで、当該サーバの管理を行うＢＭＣ（BaseBoard Management Controller）を備えたＩｎｔｅｌ（登録商標）Ｘ８６アーキテクチャの情報処理装置におけるエラー処理に関するものである。
【背景技術】
【０００２】
近年の典型的なＩｎｔｅｌ  Ｘ８６アーキテクチャのサーバでは、複数のＣＰＵと、これらのＣＰＵに直接接続されたメモリ、チップセットといった計算機システムとして所定の機能を提供する装置と、これらの装置を管理するＢＭＣからなることが多い。
【０００３】
このような計算機システムにおいて、何れかのＣＰＵに障害が発生した場合、チップセット（例えば、Ｉ／Ｏハブ）からＳＭＩ（System Management Interrupt）が全ＣＰＵに入力され、一つのＣＰＵが全メモリ上にひとつだけ存在するＢＩＯＳ（Basic Input／Output）のＳＭＩハンドラを起動する。ＳＭＩハンドラはエラー処理以外の通常処理にも用いられるため、まずエラー処理のためにＳＭＩハンドラが呼び出されたのかを判定し、エラー処理のために呼び出されたのを確認後、各ＣＰＵのログ情報を取得してＢＭＣに送信するなど所定のエラー処理を行う。
【０００４】
エラー処理以外の通常処理（レガシーエミュレーションなど）によりＳＭＩハンドラが呼び出された場合は、エラー処理のためにＳＭＩハンドラが呼び出されたのか否かを判定し、エラー処理以外のためにＳＭＩハンドラが呼び出されたのを確認後、通常処理を実行する。ＳＭＩハンドラの処理に関するものとして非特許文献１が知られている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】「Intel(r)64 and IA-32 Architectures Software Developer's Manuals Volume 3B 26-1」、[online]、Intel corp. 発行、[平成２３年６月１日検索]、インターネット＜ＵＲＬ：http://www.intel.com/products/processor/manuals/＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来、ＢＩＯＳのＳＭＩハンドラが動作するＣＰＵ上で致命的なエラーが発生して動作不能になった場合、エラーログをＢＭＣに出力することなくシステムが停止してしまう。
また、ＳＭＩハンドラが動作するＣＰＵ以外のＣＰＵ上で致命的なエラーが発生して動作不能になり、ＳＭＩハンドラが動作するＣＰＵがエラーログ収集のために動作不能になったＣＰＵにアクセスした場合、ＳＭＩハンドラが動作するＣＰＵにも致命的なエラーが発生して動作不能になり、エラーログをＢＭＣに出力することなくシステムが停止する場合がある。これらの場合、エラーログを一切取得できず、障害の解析が困難になる、という問題があった。
【０００７】
そこで本発明は、上記問題点に鑑みてなされたもので、複数のＣＰＵのうちエラーの発生により少なくともひとつのＣＰＵでＳＭＩハンドラが起動したときに、動作不能になったＣＰＵ以外のエラーログを取得することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、複数のプロセッサとメモリと、前記複数のプロセッサに接続されたＢＭＣと、前記プロセッサ毎に設けられた状態レジスタと、前記プロセッサに所定の割込を入力するチップセットと、を備えた情報処理装置の障害処理方法であって、前記プロセッサが前記チップセットから所定の割込を受信する第１のステップと、前記プロセッサが、前記プロセッサ毎に設けられた状態レジスタに所定の値をそれぞれ書き込む第２のステップと、前記プロセッサが、前記プロセッサ毎に設けられた前記複数の状態レジスタの値が前記所定の値で一致したか否かに応じて、前記複数のプロセッサの何れかに障害が発生したか否かを判定する第３のステップと、を含む。
【０００９】
そして、前記複数の状態レジスタの値が前記所定の値で一致しないときには、前記複数のプロセッサの何れかに障害が発生したと判定し、当該自プロセッサのログを取得して前記ＢＭＣに送信する。
【発明の効果】
【００１０】
したがって、本発明は、複数のプロセッサのうちの何れかが動作不能になったとしても、少なくとも動作不能になったプロセッサ以外のログを取得することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態を示し、情報処理装置の一例を示すブロック図である。
【図２】本発明の実施形態を示し、ＣＰＵ動作確認装置の一例を示すブロック図である。
【図３】本発明の実施形態を示し、ＣＰＵ状態レジスタとプラットフォーム状態レジスタの値の対応関係を示すテーブルである。
【図４】本発明の実施形態を示し、ＳＭＩハンドラの処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１３】
図１は、本発明の実施形態を示し、情報処理装置の一例を示すブロック図である。情報処理装置は、二つのＣＰＵ１１−１、１１−２と、各ＣＰＵ１１−１、１１−２にそれぞれ接続された二つのメモリ１２−１、１２−２と、ＣＰＵ１１−１に接続された一つのＩ／Ｏハブ１４と、情報処理装置１を管理するＢＭＣ（BaseBoard Management Controller）１０と、不揮発メモリ９０、および本発明によって新たに追加されたＣＰＵ動作確認装置１３を有する。
【００１４】
不揮発メモリ９０には、ＳＭＩ（System Management Interrupt）ハンドラ９２−０を含むＢＩＯＳ（Basic Input/Output System）９１が格納される。なお、不揮発メモリ９０は、ＳＭＩハンドラ９２−０を含むＢＩＯＳ９１のプログラムを保持する非一時的な記憶媒体として機能する。
【００１５】
メモリ１２−１、１２−２は、ＤＤＲ（Double Data Rate）３の規格に準拠したメモリバス１９−１、１９−２を介してそれぞれメモリコントローラを内蔵するＣＰＵ１１−１、１１−２に直接接続される。
【００１６】
Ｉ／Ｏハブ１４はＥＳＩ（Enterprise Southbridge Interface）１６を介してＣＰＵ１１−１に接続される。ＢＭＣ１０はＩ／Ｏハブ１４とＣＰＵ１１−１、１１−２にそれぞれＰＣＩｅ（ＰＣＩ  Ｅｘｐｒｅｓｓ）１８−１、１８−２、１８−３を介して直接接続される。不揮発メモリ９０はＩ／Ｏハブ１４に接続される。ＣＰＵ動作確認装置１３は、ＰＣＩｅ１７−１、１７−２を介してすべてのＣＰＵ１１−１、１１−２に直接接続される。
【００１７】
メモリ１２−１、１２−２にはＯＳ（オペレーティングシステム）がロードされ、ＣＰＵ１１−１、１１−２によって実行される。また本発明の特徴として従来構成とは異なり、すべてのメモリであるメモリ１２−１、１２−２には、不揮発メモリ９０のＢＩＯＳ９１からＳＭＩハンドラ９２−０がロードされて、ＳＭＩハンドラ９２−１、９２−２として保持される。ＳＭＩハンドラ９２−１、９２−２は、Ｉ／Ｏハブ１４から所定の割込（ＳＭＩ）を受信するとＣＰＵ１１−１、１１−２によって実行され、変数ＣｏｕｎｔｅｒＳｔａｒｔ５１−１、５１−２及び変数ＣｏｕｎｔｅｒＯｆｆｓｅｔ５２−１、５２−２がメモリ１２−１、１２−２に格納され、障害処理部２−１及び障害処理部２−２としてそれぞれ機能する。
【００１８】
なお、以下の説明では、ＣＰＵ１１−１、１１−２の総称をＣＰＵ１１とし、メモリ１２−１、１２−２の総称をメモリ１２とし、他の構成要素の総称も同様にして添え字を除いたものとする。また、ＣＰＵ１１の識別子はＣＰＵ１１−１をＣＰＵ＃１、ＣＰＵ１１−２をＣＰＵ＃２とする。
【００１９】
図２は、ＣＰＵ動作確認装置１３の構成を示すブロック図である。ＣＰＵ動作確認装置１３は、情報処理装置のＣＰＵ１１と同数の送受信装置２０−１、２０−２とＣＰＵ状態レジスタ２１−１、２１−２および一つのＡＮＤ演算装置２２、プラットフォーム状態レジスタ２３、レジスタ初期化装置２４、クロックカウンタ２５、クロックジェネレータ２６からなる。
【００２０】
ＣＰＵ状態レジスタ２１−１、２１−２は０と１の二値を取り得るレジスタであり、送受信装置２０−１、２０−２を介してＣＰＵ１１−１、１１−２に接続される。なお、ＣＰＵ状態レジスタ２１−１がＣＰＵ１１−１の状態を保持し、ＣＰＵ状態レジスタ２１−２がＣＰＵ１１−２の状態を保持する。これらＣＰＵ状態レジスタ２１−１、２１−２は、ＣＰＵ１１−１、１１−２から値を書き込むことができる。
【００２１】
ＡＮＤ演算装置２２は全ＣＰＵ状態レジスタ２１と、プラットフォーム状態レジスタ２３に接続され、全ＣＰＵ状態レジスタ２１の値の論理積を常に計算し、結果をプラットフォーム状態レジスタ２３に格納する。
【００２２】
プラットフォーム状態レジスタ２３の値は「０」と「１」の二値を取り得るレジスタであり、送受信装置２０を介してＣＰＵ１１に接続され、ＣＰＵ１１はプラットフォーム状態レジスタ２３の値を読むことが可能である。
【００２３】
レジスタ初期化装置２４は、ＣＰＵ状態レジスタ２１および送受信装置２０に接続され、送受信装置２０を通じてＣＰＵ１１からの命令を受け、全ＣＰＵ状態レジスタ２１に０を書き込むことでＣＰＵ状態レジスタ２１を初期化することが可能である。
【００２４】
クロックジェネレータ２６は後述するＢＩＯＳ９１のＳＭＩハンドラ９２−０においてタイムアウトを検出するために必要なクロック信号を生成するための回路である。
【００２５】
クロックカウンタ２５はクロックジェネレータ２６に接続され、クロックジェネレータ２６が生成するクロック信号を受信し、クロックをカウントする。カウントした値はカウンタレジスタ２７に保存される。カウンタレジスタ２７は送受信装置２０に接続され、ＣＰＵ１１から送受信装置２０を通じて値を読むことが可能である。
【００２６】
図３は、ＣＰＵ状態レジスタ２１とプラットフォーム状態レジスタ２３の値の対応表である。図中、ＣＰＵ状態レジスタ＃１はＣＰＵ状態レジスタ２１−１を示し、ＣＰＵ状態レジスタ＃２はＣＰＵ状態レジスタ２１−２を示す。
【００２７】
ＣＰＵ状態レジスタ２１における「０」は、対応するＣＰＵ１１が動作可能であるか否かが不明であることを示し、「１」は対応するＣＰＵ１１が動作可能であることを示す。
【００２８】
プラットフォーム状態レジスタ２３の値は全ＣＰＵ状態レジスタ２１の論理積が保存されるため、一つ以上のＣＰＵ状態レジスタ２１の値が「０」、すなわち一つ以上のＣＰＵ１１が動作可能であるか否かが不明であるときプラットフォーム状態レジスタ２３の値は「０」となる（３１，３２，３３）。同様にすべてのＣＰＵ状態レジスタ２１が「１」、すなわちすべてのＣＰＵ１１が動作可能であるとき、プラットフォーム状態レジスタ２３の値は「１」となる（３４）。
【００２９】
図４は、ＢＩＯＳ９１のＳＭＩハンドラ９２−０を含む障害処理部２−１、２−２をＣＰＵ１１で実行する際の処理の一例を示すフローチャートである。ＢＩＯＳ９１のＳＭＩハンドラ９２−０は、ＣＰＵ１１に致命的なエラーが発生した時、またはそれ以外の理由によるＩ／Ｏハブ１４からのＳＭＩ（System Management Interrupt）によって起動され、すべての動作可能なＣＰＵ１１で障害処理部２として実行される。すなわち、ＣＰＵ１１−１ではメモリ１２−１に読み込んだＳＭＩハンドラ９２−１をＳＭＩを受信した後に実行して障害処理部２−１を機能させ、ＣＰＵ１１−２ではメモリ１２−２に読み込んだＳＭＩハンドラ９２−２をＳＭＩを受信した後に実行し、障害処理部２−２を機能させる。なお、ＳＭＩはＩ／Ｏハブ１４が所定の条件で全ＣＰＵ１１送信する。
【００３０】
ＳＭＩハンドラ９２を実行するＣＰＵ１１は、ＳＭＩハンドラ９２を起動した直後のＣＰＵ動作確認装置１３のカウンタレジスタ２７の値を読み込み、ＣｏｕｎｔＳｔａｒｔ５１（図１の５１−１または５１−２の総称）としてメモリ１２に保存する（ステップ４１）。
【００３１】
ＳＭＩハンドラ９２を実行するＣＰＵ１１は、自ＣＰＵ１１に対応するＣＰＵ状態レジスタ２１に「１」を格納する（ステップ４２）。
【００３２】
次に、ＳＭＩハンドラ９２の処理を一定時間だけ待機する（ステップ４３）。これは当該ＣＰＵ１１以外の動作可能なＣＰＵ１１が、対応するＣＰＵ状態レジスタ２１に１を保存し終わるのを待つためである。この一定時間は、例えば、１秒などに設定される。
【００３３】
一定時間が経過すると、ＳＭＩハンドラ９２を実行するＣＰＵ１１は、プラットフォーム状態レジスタ２３の値を読み、プラットフォーム状態レジスタ２３の値が「０」であるか否かを判定する（ステップ４４）。プラットフォーム状態レジスタ２３の値が「１」、すなわち前述のとおり、すべてのＣＰＵ１１が動作可能である場合、ＳＭＩハンドラ９２は通常のＳＭＩ処理を実行する（ステップ４８）。なお、上記ＳＭＩ処理は、前記非特許文献１に規定される処理で、例えば、ＳＭＭ（Ｓｙｓｔｅｍ  Ｍａｎａｇｅｍｅｎｔ  Ｍｏｄｅ）の処理などで構成される。
【００３４】
そして、ＳＭＩハンドラ９２を実行するＣＰＵ１１はレジスタ初期化装置２４を動作させる（ステップ４９）。これによりレジスタ初期化装置２４は全ＣＰＵ状態レジスタ２１に「０」を格納する。その後、ＣＰＵ１１はＳＭＩハンドラ９２の処理を終了する。
【００３５】
一方、ステップ４４の判定において、プラットフォーム状態レジスタ２３の値が「０」である場合、すなわち一以上のＣＰＵ１１が動作可能であるか否かが不明な場合、換言すれば、全てのＣＰＵ状態レジスタ２１の値が一致しない場合で、動作可能であるか否か不明なＣＰＵ１１が存在すると判定した場合にはステップ５０へ進む。つまり障害処理部２は、ＣＰＵ状態レジスタ２１の値が一致しない場合、論理積が０になるので、何れかのＣＰＵ１１に障害が発生したと判定することができる。
【００３６】
そして、ＣＰＵ１１は、クロックカウンタ２５のカウンタレジスタ２７の値とＣｏｕｎｔＳｔａｒｔ５１との差であるＣｏｕｎｔＯｆｆｓｅｔ５２（図１の５２−１または５２−２の総称）を算出する（ステップ５０）。この算出は、例えば、
ＣｏｕｎｔＯｆｆｓｅｔ＝カウンタレジスタの値  −  ＣｏｕｎｔＳｔａｒｔ
とすればよい。
【００３７】
ＳＭＩハンドラ９２を実行するＣＰＵ１１は、ＣｏｕｎｔＯｆｆｓｅｔ５２の値が予め設定した閾値以上であるか否かを判定する（ステップ４５）。この閾値はＳＭＩハンドラ９２が予め保持している値であり、ＣｏｕｎｔＯｆｆｓｅｔ５２が閾値を越えるほどの時間が経過している状態で、動作可能か否かが分からないＣＰＵ１１が存在することは、動作不能なＣＰＵ１１が存在するとみなすことが出来るほど十分に大きな値である。
【００３８】
よってプラットフォーム状態レジスタ２３の値が「０」、すなわちすべてのＣＰＵ１１が動作可能か否かは不明であり、かつＣｏｕｎｔＯｆｆｓｅｔ５２が閾値以上の場合は、動作可能ではないＣＰＵ１１が存在すると判定し、ＳＭＩハンドラ９２を実行しているＣＰＵ１１は自身のエラーログを取得する（ステップ４６）。閾値５３は情報処理装置１の構成などに応じて適宜設定される十分に大きな値である。ＳＭＩハンドラ９２を実行するＣＰＵ１１は、取得したエラーログをＢＭＣ１０に送信し（ステップ４７）、処理を終了する。
【００３９】
一方、ステップ４５にてＣｏｕｎｔＯｆｆｓｅｔ５２の値が閾値５３未満であると判定された場合、ＳＭＩハンドラ９２はステップ４３の処理を繰り返して実行する。
【００４０】
本発明の新規な構成である、ＣＰＵ動作確認装置１３と、すべてのメモリ１２にロードされたＳＭＩハンドラ９２−１，９２−２により、ＣＰＵ１１が他のＣＰＵ１１に直接アクセスすることなく、他のＣＰＵ１１が動作可能か否かを判定することが可能になる。これにより、いずれかのＣＰＵ１１に致命的なエラーが発生して動作不能になった場合でも、動作不能になっていないＣＰＵ１１のエラーログを取得することが可能となった。
【００４１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前期実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能である。
【００４２】
例えば、本実施の形態では、ＣＰＵ１１の数は２つであるが、これは三つ以上の構成でも可能である。また、ＣＰＵ１１とＣＰＵ動作確認装置１３はＰＣＩｅ１７−１，１７−２を介して接続されるが、これはＩ2Ｃバスなど他の通信規格を採用してもよい。また、本実施の形態では、ＢＭＣ１０とＣＰＵ動作確認装置１３は別の装置として存在しているが、ＢＭＣ１０がＣＰＵ動作確認装置１３と同等の機能を含む構成も可能である。
【００４３】
また、図１においてＣＰＵ１１は、複数または多数の汎用プロセッサコアで構成されてもよいし、汎用プロセッサコアに加えてアクセラレータコアを含むヘテロジニアス・マルチコアプロセッサで構成されても良い。
【００４４】
また、図１においてＣＰＵ１１−１、１１−２は、それぞれソケットに取り付けられて、ＣＰＵ動作確認装置１３及びＢＭＣ１０は全てのソケットと接続される。なお、ＣＰＵ動作確認装置１３及びＢＭＣ１０は、全てのＣＰＵ１１（ソケット）と接続されていない場合、本発明の上述した作用及び効果を得ることはできない。
【００４５】
また、図１においてＣＰＵ１１−１、１１−２は、予めメモリ１２−１、１２−２にＳＭＩハンドラ９２−１、９２−２を予めロードしておく例を示したが、Ｉ／Ｏハブ１４からＳＭＩを受信したときに各ＣＰＵ１１がＢＩＯＳ９１のＳＭＩハンドラ９２−０をロードした後に実行しても良い。
【符号の説明】
【００４６】
１０  ＢＭＣ
１１−１、１１−２  ＣＰＵ
１２−１、１２−２  メモリ
１３  ＣＰＵ動作確認装置
９２−０、９２−１、９２−３  ＳＭＩハンドラ
【図１】
2013025440.tif 000003
【図２】
2013025440.tif 000004
【図３】
2013025440.tif 000005
【図４】
2013025440.tif 000006