(57)【特許請求の範囲】
【請求項１】
共通のオペレーティングシステムで動作する複数のＣＰＵを搭載したマルチＣＰＵコンピュータにおいて、
不揮発性の記憶装置と、
ハードウェアエラーが発生した場合に他のＣＰＵにエラー情報を通知する第１のエラー通知回路が組み込まれた第１のＣＰＵと、
前記第１のＣＰＵから通知された前記エラー情報を取得し、前記エラー情報を前記オペレーティングシステムに通知する第２のエラー通知回路が組み込まれており、前記第２のエラー通知回路により前記オペレーティングシステムに対してエラー情報が通知された場合、前記オペレーティングシステムに従って、前記エラー情報を含む障害情報の前記記憶装置への格納処理、およびシステムの再起動処理を実行する第２のＣＰＵと、
を有することを特徴とするマルチＣＰＵコンピュータ。
【請求項２】
ＣＰＵ間通信領域を有する共有メモリをさらに有し、
前記第１のＣＰＵの前記第１のエラー通知回路は、前記エラー情報を前記共有メモリの前記ＣＰＵ間通信領域に格納し、
前記第２のＣＰＵの前記第２のエラー通知回路は、前記ＣＰＵ間通信領域から前記エラー情報を取得することを特徴とする請求項１記載のマルチＣＰＵコンピュータ。
【請求項３】
前記第１のＣＰＵには、前記エラー情報を前記オペレーティングシステムに通知する第３のエラー通知回路が組み込まれており、前記第３のエラー通知回路により前記オペレーティングシステムに対して前記エラー情報が通知された場合、前記第１のＣＰＵは、前記オペレーティングシステムに従って処理を一時停止することを特徴とする請求項１記載のマルチＣＰＵコンピュータ。
【請求項４】
前記第１のＣＰＵは、処理の一時停止中にシステムが再起動されない場合、前記オペレーティングシステムに従って、処理停止から所定期間経過後、前記エラー情報を含むデータの前記記憶装置への格納処理、およびシステムの再起動処理を実行することを特徴とする請求項３記載のマルチＣＰＵコンピュータ。
【請求項５】
共通のオペレーティングシステムで動作する複数のＣＰＵを搭載したマルチＣＰＵコンピュータのシステム再起動方法において、
第１のＣＰＵにおいてハードウェアエラーが発生した場合に、前記第１のＣＰＵに組み込まれた第１のエラー通知回路が第２のＣＰＵにエラー情報を通知し、
前記第２のＣＰＵに組み込まれた第２のエラー通知回路が、前記第１のＣＰＵから通知された前記エラー情報を取得し、前記エラー情報を前記オペレーティングシステムに通知し、前記第２のエラー通知回路により前記オペレーティングシステムに対して前記エラー情報が通知された場合、前記第２のＣＰＵが前記オペレーティングシステムに従って、前記エラー情報を含む障害情報の不揮発性の記憶装置への格納処理、およびシステムの再起動処理を実行する、
ことを特徴とするシステム再起動方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は共通のオペレーティングシステムで動作する複数のＣＰＵを搭載したマルチＣＰＵコンピュータおよびそのようなマルチＣＰＵコンピュータにおけるシステム再起動方法に関し、特にハードウェアエラー発生時にシステムを緊急停止させるマルチＣＰＵコンピュータおよびそのようなマルチＣＰＵコンピュータにおけるシステム再起動方法に関する。
【背景技術】
【０００２】
近年、ＵＮＩＸ（登録商標）サーバ、ＩＡサーバ（Intel社のマイクロプロセッサを搭載したサーバ機）が基幹システムに導入されるようになっている。これらのＵＮＩＸサーバやＩＡサーバの多くは、マルチプロセッサ化により性能向上が図られている。なお、基幹システムに利用するサーバに関しては、性能向上のみならず信頼性の向上が重要視されている。特に、致命的なハードウェアのエラーが発生した場合は、システムの暴走やデータ破壊を防止する必要がある。そこで、致命的なハードウェアのエラーが発生すると、システムを緊急停止させていた。【０００３】
ただし、基幹システムの場合、停止期間を長期化させるわけにはいかない。そのため、マルチプロセッサのサーバでは、ハードウェアのエラーに起因してシステムを緊急停止させた場合でも、エラーが発生した部分のみを切り離して、速やかにかつ自動的にシステムを再起動することが重要な要件となっている。サーバで発生するハードウェアエラーとしては、例えば、ＣＰＵ（Central Processing Unit）キャッシュのマルチビットエラーの連続発生がある。【０００４】
従来の技術では、ＣＰＵキャッシュのマルチビットエラーなどの致命的なＣＰＵのエラーが発生した場合、次のような処理が行われていた。まず、エラーが発生したＣＰＵがエラー情報をレジスタに設定する。そして、ＣＰＵは、トラップを生成してオペレーティングシステムにエラーの発生を通知する。【０００５】
オペレーティングシステムは、エラーが発生したＣＰＵでトラップ処理を実行する。トラップ処理では、オペレーティングシステムによりハードウェアのレジスタが参照され、エラー情報が取得される。【０００６】
その後、エラーが発生したＣＰＵがパニック処理を実行する。パニック処理とは、システムの暴走やデータ破壊を防止するために、システムを緊急停止して再起動することである。パニック処理では、ＣＰＵが、エラー情報を表示／記録し、ファイルシステムの同期処理を実施してメモリダンプを採取した後、システムを再起動する。【０００７】
図８は、従来のエラー発生時の再起動方法を示す図である。サーバ９００は、ＣＰＵ９１０とＣＰＵ９２０とを有している。ＣＰＵ９１０のＣＰＵ番号は「ＣＰＵ＃０」であり、ＣＰＵ９２０のＣＰＵ番号は「ＣＰＵ＃１」である。ＣＰＵ９１０とＣＰＵ９２０とが実行する処理には、ハードウェアロジック回路９０１で実行される処理と、オペレーティングシステム９０２に従って実行される処理とがある。【０００８】
ＣＰＵ９１０とＣＰＵ９２０とは、ハードウェアロジック回路９０１で実行する処理機能として、エラー通知回路９１１，９２１を有している。また、エラー通知回路９１１，９２１は、ＣＰＵ内で発生したハードウェアエラーを示す情報をオペレーティングシステムに通知する。なお、オペレーティングシステムへのエラー情報の通知とは、オペレーティングシステムのエラー処理を行うプロセスにエラー情報を渡す処理である。具体的には、ＣＰＵ９１０，９２０は、ハードウェアエラー発生時に所定のレジスタにエラー情報を設定し、トラップを発生させる。エラー情報には、エラーの種別、ＣＰＵ番号、エラーが発生したデータのアドレスなどが含まれる。エラー情報が格納されたレジスタを、オペレーティングシステムに基づくプロセスが参照することで、エラー情報が通知される。【０００９】
オペレーティングシステム９０２に従って実行される処理機能としては、トラップ処理機能９１２，９２２とパニック処理機能９１３，９２３とがある。トラップ処理機能９１２，９２２は、エラー情報が格納されたレジスタを参照して、エラー種別、ＣＰＵ番号、アドレスなどを獲得する機能である。パニック処理機能９１３，９２３は、エラー情報を表示すると共に記録し、ファイルシステムの同期を取り、メモリダンプを採取し、システムを再起動する機能である。【００１０】
図８の例では、ＣＰＵ９１０でエラーが発生した場合を示している。この場合、ＣＰＵ９１０のエラー通知回路９１１により、オペレーティングシステム９０２に対してエラー情報が通知される。そして、ＣＰＵ９１０が、オペレーティングシステム９０２に従って実行するトラップ処理機能９１２によってトラップ処理が行われ、エラー種別、ＣＰＵ番号、アドレスなどの情報がオペレーティングシステム９０２で獲得される。その後、パニック処理機能９１３により、エラー情報を表示／記録し、ファイルシステムの同期処理が実施され、メモリダンプを採取した後、システムの再起動が行われる。【００１１】
このようにオペレーティングシステムでエラー処理（トラップ処理やパニック処理）を実行する場合、下位計算機のオペレーティングシステムで採取した障害情報を、上位計算機に通知することもできる（特許文献１参照）。【００１２】
さらに、障害プロセッサからの障害情報を採取した診断プロセッサが上位プロセッサに障害の発生を通知し、上位プロセッサが障害プロセッサを初期化し再起動することで、障害プロセッサを動作状態に復帰させる技術もある（例えば、特許文献２参照）。【００１３】
また、マルチＣＰＵシステムにおける障害発生時の障害情報採取技術として、障害情報採取を複数のプロセッサで並列に実行することで障害情報採取時間を短縮する技術がある。この技術では、障害発生を検出したプロセッサから他のプロセッサに対して、障害情報採取を指示し、指示を受けた他のプロセッサが障害情報の採取を行う（例えば、特許文献３参照）。
【特許文献１】特開平４−３４０６３１号公報
【特許文献２】特開平２−７１３３６号公報
【特許文献３】特開平１１−３３８８３８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかし、図８に示した手順では、エラーが発生したＣＰＵでトラップ処理、パニック処理を行い、システムを再起動している。そのため、ＣＰＵキャッシュのマルチビットエラーが連続発生した場合は、そのＣＰＵは、正常に動作できないことがある。正常に動作できないＣＰＵによって、システムのトラップ処理やパニック処理を実行させようとしても、正しく処理できるとは限らない。そのため、ハードウェアエラー発生時に、動作中のシステムがハングアップしたり、システムの再起動に失敗したりする虞がある。その結果、システムの運用が長時間停止するなどの深刻な問題を引き起こす危険があった。【００１５】
システムのエラー処理が正しく実行されない場合、具体的には、以下の問題の発生が予想される。
エラー情報が表示されない場合は、再発防止のために交換すべきＣＰＵが特定できない。この場合、問題発生後にシステムを手動で再起動しても、再度同じエラーによる問題が再発する可能性がある。【００１６】
ファイルシステムの同期処理が実施できない場合は、ファイルキャッシュ（メモリ）上に存在するデータをディスクに書き出すことができない。そのため、ファイル破壊、データ破壊が発生する可能性がある。【００１７】
メモリダンプの採取に失敗した場合は、メモリダンプから、いつ、どの処理を実行中に、何のエラーが発生したかなどの詳細情報を解析する作業ができない。例えば、ＣＰＵのエラーに基づくエラー処理におけるパニック処理で再度ＣＰＵのエラーが発生して、正しくエラー情報を表示できない場合がある。この場合、メモリダンプの採取までも失敗していると、一次要因を特定する手段が無くなってしまう。【００１８】
システムの再起動に失敗する場合は、システムの運用が長時間停止する深刻な問題になることがある。基幹業務のシステムの運用停止期間が長期化すると、社会問題に発展する可能性もある。【００１９】
なお、特許文献１に記載された技術では、障害が発生した下位計算機のオペレーティングシステムにより障害情報を通知する。そのため、障害を有する下位計算機上でオペレーティングシステムが正常に動作する保証はなく、上位計算機に対して障害情報が通知できない事態に陥る虞がある。【００２０】
また、特許文献２に記載された技術では、診断プロセッサが他のプロセッサから障害情報を採取し、上位プロセッサが障害プロセッサの初期化および再起動を行う。すなわち、各プロセッサが個別に動作しており、単独で再起動可能であることが前提となっている。ところが、多くのマルチＣＰＵコンピュータでは、共通のオペレーティングシステムで複数のＣＰＵが動作している。そのようなマルチＣＰＵコンピュータでは、複数のＣＰＵで共有するデータが存在し、１つのＣＰＵを再起動するにはデータの整合性を確保する処理などが必要である。従って、共通のオペレーティングシステムで複数のＣＰＵが動作するマルチＣＰＵコンピュータに、特許文献２に記載された技術を適用するのは困難である。【００２１】
さらに、特許文献３に記載された技術では、障害が発生したプロセッサとは別のプロセッサで障害情報を採取するため、障害情報の採取に関しては正常なプロセッサで行うことができる。ただし、システムの再起動については、障害が発生したプロセッサで行っている。その結果、正常に動作しないプロセッサで再起動処理を実行しても、正しく再起動できない可能性がある。再起動に失敗すれば、システム停止時間が長期化し、運用効率が悪化してしまう。【００２２】
本発明はこのような点に鑑みてなされたものであり、致命的なＣＰＵのエラーが発生した場合であっても、エラー処理を確実に実行し、システムを再起動させることができるマルチＣＰＵコンピュータおよびシステム再起動方法を提供することを目的とする。
【課題を解決するための手段】
【００２３】
本発明では上記課題を解決するために、図１に示すような共通のオペレーティングシステム４で動作する複数のＣＰＵを搭載したマルチＣＰＵコンピュータが提供される。本発明に係るマルチＣＰＵコンピュータは、不揮発性の記憶装置１と、第１のＣＰＵ２と第２のＣＰＵ３とを有する。第１のＣＰＵ２は、ハードウェアエラーが発生した場合に他のＣＰＵにエラー情報を通知する第１のエラー通知回路２ａが組み込まれている。第２のＣＰＵ３は、第１のＣＰＵ２から通知されたエラー情報を取得し、エラー情報をオペレーティングシステム４に通知する第２のエラー通知回路３ａが組み込まれており、第２のエラー通知回路３ａによりオペレーティングシステム４に対してエラー情報が通知された場合、オペレーティングシステム４に従って、エラー情報を含む障害情報の記憶装置への格納処理、およびシステムの再起動処理を実行する。【００２４】
このようなマルチＣＰＵコンピュータによれば、第１のＣＰＵ２でハードウェアエラーが発生すると、第１のＣＰＵ２の第１のエラー通知回路２ａにより、第２のＣＰＵ３にエラー情報が通知される。すると、第２のＣＰＵ３の第２のエラー通知回路３ａにより、第１のＣＰＵ２から通知されたエラー情報が取得され、エラー情報がオペレーティングシステム４に通知される。そして、第２のＣＰＵ３により、オペレーティングシステム４に従って、エラー情報を含む障害情報の記憶装置１への格納処理、およびシステムの再起動処理が実行される。【００２５】
また、本発明では上記課題を解決するために、共通のオペレーティングシステムで動作する複数のＣＰＵを搭載したマルチＣＰＵコンピュータのシステム再起動方法において、第１のＣＰＵにおいてハードウェアエラーが発生した場合に、前記第１のＣＰＵに組み込まれた第１のエラー通知回路が第２のＣＰＵにエラー情報を通知し、前記第２のＣＰＵに組み込まれた第２のエラー通知回路が、前記第１のＣＰＵから通知された前記エラー情報を取得し、前記エラー情報を前記オペレーティングシステムに通知し、前記第２のエラー通知回路により前記オペレーティングシステムに対して前記エラー情報が通知された場合、前記第２のＣＰＵが前記オペレーティングシステムに従って、前記エラー情報を含む障害情報の不揮発性の記憶装置への格納処理、およびシステムの再起動処理を実行する、ことを特徴とするシステム再起動方法が提供される。【００２７】
このようなシステム再起動方法によれば、第１のＣＰＵにおいてハードウェアエラーが発生した場合、第１のＣＰＵに組み込まれた第１のエラー通知回路により、第２のＣＰＵにエラー情報が通知される。すると、第２のＣＰＵに組み込まれた第２のエラー通知回路により、第１のＣＰＵから通知されたエラー情報が取得され、エラー情報がオペレーティングシステムに通知される。そして、第２のＣＰＵにより、オペレーティングシステムに従って、エラー情報を含む障害情報の不揮発性の記憶装置への格納処理、およびシステムの再起動処理が実行される。
【発明の効果】
【００２８】
本発明では、ハードウェアエラーが発生したＣＰＵからエラー情報を受け取った他のＣＰＵで障害情報の格納およびシステムの再起動処理を実行するようにした。これにより、１つのＣＰＵに致命的なエラーが発生した場合でも、障害情報格納からシステム再起動までの処理を確実に行うことが可能となる。【００２９】
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００３０】
【図１】本実施の形態の概略を示す図である。
【図２】本発明の実施に用いるサーバのハードウェア構成例を示す図である。
【図３】サーバの主な機能を示すブロック図である。
【図４】ＣＰＵのエラー通知回路とオペレーティングシステムのエラー処理機能との関係を示す図である。
【図５】エラー情報のデータ構造例を示す図である。
【図６】他のＣＰＵで正常にエラー処理が実行された場合を示すシーケンス図である。
【図７】他のＣＰＵによるエラー処理が失敗した場合を示すシーケンス図である。
【図８】従来のエラー発生時の再起動方法を示す図である。
【発明を実施するための最良の形態】
【００３１】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本実施の形態の概略を示す図である。図１には、本実施の形態に係るマルチＣＰＵコンピュータの機能の概略が示されている。マルチＣＰＵコンピュータは、記憶装置１、第１のＣＰＵ２、および第２のＣＰＵ３を有している。第１のＣＰＵ２と第２のＣＰＵ３とは、共通のオペレーティングシステム４で動作している。【００３２】
記憶装置１は、不揮発性であり、電源遮断時もデータを保持することができる。記憶装置１としては、例えば、ハードディスクドライブなどの磁気記憶装置が使用できる。
第１のＣＰＵ２は、ハードウェアエラーが発生した場合に他のＣＰＵにエラー情報を通知する第１のエラー通知回路２ａが組み込まれている。ハードウェアエラーとしては、例えば、キャッシュメモリのマルチビットエラーがある。エラー情報には、例えば、エラー種別、エラーが発生したＣＰＵのＣＰＵ番号、エラーが発生したデータのアドレスが含まれる。【００３３】
第２のＣＰＵ３は、第１のＣＰＵ２から通知されたエラー情報を取得し、エラー情報をオペレーティングシステム４に通知する第２のエラー通知回路３ａが組み込まれている。第２のエラー通知回路３ａによりオペレーティングシステム４に対してエラー情報が通知された場合、第２のＣＰＵ３は、オペレーティングシステム４に従って、エラー情報を含む障害情報の記憶装置１への格納処理（ステップＳ１）、およびシステムの再起動処理（ステップＳ２）を実行する。障害情報には、例えば、エラー情報以外にメモリダンプ情報を含めることができる。【００３４】
このようなマルチＣＰＵコンピュータによれば、第１のＣＰＵ２でハードウェアエラーが発生すると、第１のＣＰＵ２の第１のエラー通知回路２ａにより、第２のＣＰＵ３にエラー情報が通知される。すると、第２のＣＰＵ３の第２のエラー通知回路３ａにより、第１のＣＰＵ２から通知されたエラー情報が取得され、エラー情報がオペレーティングシステム４に通知される。そして、第２のＣＰＵ３により、オペレーティングシステム４に従って、エラー情報を含む障害情報の記憶装置１への格納処理（ステップＳ１）、およびシステムの再起動処理（ステップＳ２）が実行される。これにより、マルチＣＰＵコンピュータ全体の再起動が行われる。【００３５】
このように正常なＣＰＵがオペレーティングシステムにエラー情報を通知するようにすれば、エラー情報を含む障害情報の格納およびシステムの再起動を確実に行うことができる。例えば、ＣＰＵキャッシュのマルチビットエラーが発生した場合は、ＣＰＵキャッシュのマルチビットエラーの影響を受けず、確実にエラー情報の格納およびシステムの再起動を行うことができる。【００３６】
なお、第１のＣＰＵ２では、エラー情報を通知後、オペレーティングシステム４に従って、一定時間、第１のＣＰＵ２で実行する処理を停止することができる。このように、エラーの発生したＣＰＵの処理を一時的に停止することにより、障害を有する第１のＣＰＵ２が正常な第２のＣＰＵ３の処理に影響を与えないようにすることができる。その結果、第２のＣＰＵ３によるエラー処理を確実に行うことができる。【００３７】
また、エラーの発生した第１のＣＰＵ２は、処理を一定時間停止している間にシステムの再起動が行われなければ、処理を再開し、エラー処理を実行することができる。すなわち、エラーが発生したＣＰＵでも、念のため一定時間後にトラップ処理とパニック処理を実行するようにする。これは、他のＣＰＵで発生したエラーが伝播した場合など、エラーを検出したＣＰＵは正常であり、本当に故障しているＣＰＵは他に存在する場合を考慮した対策である。【００３８】
ところで、図１の例では、第１のＣＰＵ２でエラーが発生し、第２のＣＰＵ３でエラー処理を実行する場合の構成を示しているが、マルチＣＰＵコンピュータ内の各ＣＰＵに第１のエラー通知回路２ａと第２のエラー通知回路３ａとを組み込むことができる。これにより、どのＣＰＵでエラーが発生しても、他のＣＰＵがエラー処理を実行できるようになる。以下、全てのＣＰＵが、他のＣＰＵからのエラー情報に基づいてエラー処理を実行できるようなマルチＣＰＵコンピュータの例を採り、本発明の実施の形態の詳細を説明する。【００３９】
図２は、本実施の形態に用いるサーバのハードウェア構成例を示す図である。サーバ１００は、例えばＵＮＩＸサーバであり、複数のＣＰＵ１１０，１２０，１３０，１４０を有している。各ＣＰＵ１１０，１２０，１３０，１４０には、サーバ１００内で一意に識別するためのＣＰＵ番号が設定されている。ＣＰＵ１１０のＣＰＵ番号は「ＣＰＵ＃０」である。ＣＰＵ１２０のＣＰＵ番号は「ＣＰＵ＃１」である。ＣＰＵ１３０のＣＰＵ番号は「ＣＰＵ＃２」である。ＣＰＵ１４０のＣＰＵ番号は「ＣＰＵ＃３」である。【００４０】
ＣＰＵ１１０，１２０，１３０，１４０には、システムバス１０６を介して共有メモリ１０１、ハードディスクドライブ（ＨＤＤ:Hard Disk Drive）１０２、通信インタフェース１０３、グラフィック処理装置１０４、および入力インタフェース１０５が接続されている。【００４１】
共有メモリ１０１には、ＣＰＵ１１０，１２０，１３０，１４０に実行させるオペレーティングシステムのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、共有メモリ１０１には、ＣＰＵ１１０，１２０，１３０，１４０による処理に必要な各種データが格納される。ＨＤＤ１０２には、オペレーティングシステムやアプリケーションプログラムが格納される。【００４２】
通信インタフェース１０３は、ネットワーク１０に接続されている。通信インタフェース１０３は、ネットワーク１０を介して、他のコンピュータとの間でデータの送受信を行う。【００４３】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、ＣＰＵ１１０，１２０，１３０，１４０からの命令に従って、画像をモニタ１１の画面に表示させる。入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号を、システムバス１０６を介してＣＰＵ１１０，１２０，１３０，１４０に送信する。【００４４】
以上のようなハードウェア構成のサーバ１００において、オペレーティングシステムが実行される。この結果、オペレーティングシステムで定義されている各種機能が、サーバ１００内の各ＣＰＵ１１０，１２０，１３０，１４０で実現される。【００４５】
図３は、サーバの主な機能を示すブロック図である。サーバ１００には、ハードウェアロジック回路１００ａによって実現される機能と、オペレーティングシステム２００などのソフトウェアをＣＰＵ１１０，１２０，１３０，１４０が実行することによって実現される機能とがある。図３では、点線を境界にして上段にハードウェアの機能が示されており、下段にソフトウェアの機能が示されている。【００４６】
ハードウェアロジック回路１００ａの機能としては、主に各ＣＰＵ１１０，１２０，１３０，１４０の処理演算機能、共有メモリ１０１のデータ一時記憶機能、ＨＤＤ１０２のデータ保存機能がある。各ＣＰＵ１１０，１２０，１３０，１４０には、エラー通知回路１１１，１２１，１３１，１４１が設けられている。エラー通知回路１１１，１２１，１３１，１４１は、オペレーティングシステム２００へのエラー情報の通知、および他のＣＰＵとの間のエラー情報の受け渡しを行う処理機能である。【００４７】
共有メモリ１０１には、ＣＰＵ間通信領域１０１ａが設けられている。ＣＰＵ間通信領域１０１ａには、ＣＰＵ１１０，１２０，１３０，１４０が互いに受け渡すべき情報を格納するための記憶領域である。【００４８】
なお、共有メモリ１０１のＣＰＵ間通信領域１０１ａを利用したＣＰＵ間通信技術は、例えば、特開平６−２４３１０４号公報、特開平６−２４３１０１号公報、特開平６−３３２８６４号公報に記載されている。【００４９】
オペレーティングシステム２００には、ハードウェアエラー発生時のリカバリ機能として、トラップ処理部２１０、およびパニック処理部２２０が設けられている。トラップ処理部２１０は、ハードウェアエラー発生時にトラップ処理を実行する。パニック処理部２２０は、パニック処理を行う。【００５０】
パニック処理部２２０には、エラー情報表示／記録部２２１、ファイルシステム同期部２２２、メモリダンプ部２２３、システム再起動部２２４が含まれる。エラー情報表示／記録部２２１は、エラー情報の表示やＨＤＤ１０２への記録処理を行う。ファイルシステム同期部２２２は、ファイルシステムの整合性のチェックや不整合の修正などの処理を行う。メモリダンプ部２２３は、共有メモリ１０１内のデータのダンプ処理を行う。システム再起動部２２４は、システムの再起動処理を行う。【００５１】
また、オペレーティングシステム２００の他の機能としては、ファイル管理部２４０、メモリ管理部２４１、プロセス管理部２４２、割り込み処理部２４３、システムコール２４４、ドライバ２４５、スケジューラ２４６、シェル２４７、デーモン２４８、コマンド処理部２４９、ライブラリ２５０などがある。【００５２】
ファイル管理部２４０は、ＨＤＤ１０２内のファイルを管理する。メモリ管理部２４１は、共有メモリ１０１内のデータを管理する。プロセス管理部２４２は、各ＣＰＵで実行されるプロセスを管理する。割り込み処理部２４３は、ＣＰＵへの割り込み処理を管理する。システムコール２４４は、ＣＰＵで実行されるプロセスからの要求に基づくオペレーティングシステムの呼び出し機能である。ドライバ２４５は、周辺機器の制御機能である。スケジューラ２４６は、実行する処理のスケジュールを管理する機能である。シェル２４７は、ユーザからの支持をＯＳに伝える機能である。デーモン２４８は、メモリに常駐して各種サービスを提供する機能である。コマンド処理部２４９は、入力されたコマンドを解釈し、コマンドに応じた処理を実行する機能である。ライブラリ２５０、他のプログラムから利用できるように部品化された各種機能をまとめたものである。【００５３】
なお、オペレーティングシステム２００の各機能は、ＣＰＵ１１０，１２０，１３０，１４０がオペレーティングシステム２００用のプログラムを実行することで、それぞれＣＰＵ１１０，１２０，１３０，１４０上で個別に実現される。【００５４】
図４は、ＣＰＵのエラー通知回路とオペレーティングシステムのエラー処理機能との関係を示す図である。なお、図４では、ＣＰＵ１１０とＣＰＵ１２０、およびそれらのＣＰＵ１１０，１２０で実行されるオペレーティングシステム２０１，２０２でのエラー通知処理を示している。【００５５】
ＣＰＵ１１０のエラー通知回路１１１は、ＣＰＵ１１０で発生したエラーのエラー情報３１を他のＣＰＵ１２０へ通知する機能、他のＣＰＵ１２０で発生したエラーのエラー情報３２をＣＰＵ１１０が実行するオペレーティングシステム２０１へ通知する機能、およびＣＰＵ１１０で発生したエラーのエラー情報３１をＣＰＵ１１０が実行するオペレーティングシステム２０１へ通知する機能を有している。同様に、ＣＰＵ１２０のエラー通知回路１２１は、ＣＰＵ１２０で発生したエラーのエラー情報３２を他のＣＰＵ１１０へ通知する機能、他のＣＰＵ１１０で発生したエラーのエラー情報３１をＣＰＵ１２０が実行するオペレーティングシステム２０２へ通知する機能、およびＣＰＵ１２０で発生したエラーのエラー情報３２をＣＰＵ１２０が実行するオペレーティングシステム２０２へ通知する機能を有している。【００５６】
これにより、ＣＰＵ１１０で発生したエラーのエラー情報３１は、ＣＰＵ１２０のエラー通知回路１２１を介して、ＣＰＵ１２０が実行するオペレーティングシステム２０２に通知されると共に、ＣＰＵ１１０が実行するオペレーティングシステム２０１にも通知される。また、ＣＰＵ１２０で発生したエラーのエラー情報３２は、ＣＰＵ１１０のエラー通知回路１１１を介して、ＣＰＵ１１０が実行するオペレーティングシステム２０１に通知されると共に、ＣＰＵ１２０が実行するオペレーティングシステム２０２にも通知される。【００５７】
ＣＰＵ１１０が実行するオペレーティングシステム２０１では、ＣＰＵ１１０で発生したエラーのエラー情報をトラップ処理部２１１が受け取る。その場合、トラップ処理部２１１は、ＣＰＵ１１０で実行する処理を一時停止する。トラップ処理部２１１は、ＣＰＵ１１０の処理を停止する際には、例えば、ハードウェアにＣＰＵの動作を一時的に停止する機能があれば、その機能を使用することができる。また、トラップ処理部２１１は、ソフトウェアで単純なループ処理を実行させることで、ＣＰＵ１１０における他の処理を停止させることもできる。【００５８】
このように、ＣＰＵ１１０自身でエラーが発生した場合にＣＰＵ１１０の処理を一時停止させるのは、エラー発生時の情報を保持させるためである。すなわち、エラー発生後もＣＰＵ１１０が通常動作を継続していると、メモリ内のエラー発生の原因を特定するための有効な情報が、他の情報で上書きされる可能性がある。そこで、ＣＰＵ１１０の処理を一時的に停止させることで、エラー発生時の正確な情報取得を可能としている。また、障害を有するＣＰＵ１１０を停止させることで、ＣＰＵ１２０におけるエラー処理を安定して実行することが可能となる。【００５９】
ＣＰＵ１１０の処理を停止させた場合、トラップ処理部２１１は所定の時間経過後、ＣＰＵ１１０の処理を再開させる。ＣＰＵ１１０の処理を再開させるのは、他のＣＰＵ１２０によるエラー処理が失敗した場合、ＣＰＵ１１０自らがエラー処理を実行するためである。なお、他のＣＰＵ１２０においてエラー処理が正常に実行された場合、エラー処理の最後にシステムの再起動処理が実行される。その結果、ＣＰＵ１１０の内部パラメタも初期化され、ＣＰＵ１１０におけるエラー処理はその時点で取りやめとなる。【００６０】
トラップ処理部２１１は、ＣＰＵ１１０のエラー通知回路１１１から他のＣＰＵ１２０のエラー情報を受け取った場合、およびＣＰＵ１１０のエラー情報を受け取り、処理を一時停止させた後に再開した場合、トラップ処理を実行する。具体的には、トラップ処理部２１１は、ＣＰＵ１１０内の所定のレジスタを参照してエラー種別、ＣＰＵ番号、アドレスなどを獲得する。トラップ処理部２１１は、トラップ処理終了後、エラー情報をパニック処理部２３１に渡す。【００６１】
パニック処理部２３１は、パニック処理を行う。パニック処理では、エラー情報表示／記録部２２１が、エラー情報をモニタに表示すると共に、エラー情報をＨＤＤ１０２に格納する。また、ファイルシステム同期部２２２が、ファイルシステムと実際のファイルの内容との同期をとる（ＨＤＤ１０２内に保持されているファイルシステムの構造データを実際のファイルの更新に同期させて更新する）。さらに、メモリダンプ部２２３が、共有メモリ１０１の内容のダンプ処理を行う（共有メモリ１０１の内容をＨＤＤ１０２に格納する）。最後に、システム再起動部２２４が、サーバ１００全体のシステムを再起動させる。【００６２】
ＣＰＵ１２０で実行されるオペレーティングシステム２０２も、ＣＰＵ１１０で実行されるオペレーティングシステム２０１と同様の処理機能を有する。
図５は、エラー情報のデータ構造例を示す図である。エラー情報３１には、エラー種別、ＣＰＵ番号、アドレスなどが含まれる。エラー種別は、発生したエラーの種別を表す識別コードによって表される。ＣＰＵ番号は、エラーが発生したＣＰＵの識別番号である。アドレスは、エラーが発生したデータのアドレスである。【００６３】
次に、ＣＰＵ１１０でハードウェアエラーが発生した場合の処理手順を以下に示す。
図６は、他のＣＰＵで正常にエラー処理が実行された場合を示すシーケンス図である。ＣＰＵ番号が「ＣＰＵ＃０」のＣＰＵ１１０でハードウェアエラーが発生すると、ＣＰＵ１１０のエラー通知回路１１１において、正常な他のＣＰＵの検索が行われる（ステップＳ１１）。例えば、ＣＰＵ１１０でキャッシュのマルチビットエラーなどの致命的なエラーが発生した場合に、エラー通知回路１１１が正常なＣＰＵを検索する。具体的には、エラー通知回路１１１は、エラーを検出していないＣＰＵの中で最もＣＰＵ番号の小さいものを正常なＣＰＵとして選択する。なお、エラーを検出していないＣＰＵは、共有メモリ１０１に格納されている各ＣＰＵのステータス（正常動作中か否かが設定されている）の情報を取得し、そのステータスを参照することで判断できる。【００６４】
次に、ＣＰＵ１１０のエラー通知回路１１１は、ステップＳ１１で選択されたＣＰＵ１２０に対して、エラー情報を通知する（ステップＳ１２）。すなわち、エラー通知回路１１１が、共有メモリ１０１のＣＰＵ間通信領域１０１ａにエラー情報を書き込み、ＣＰＵ１２０のエラー通知回路１２１がそのエラー情報を読み込む。これにより、ＣＰＵ１１０によるエラーの発生がＣＰＵ１２０に通知される。【００６５】
ＣＰＵ１１０のエラー通知回路１１１は、ＣＰＵ１１０で発生したエラーのエラー情報を、ＣＰＵ１１０が実行するオペレーティングシステム２０１に通知する（ステップＳ１３）。具体的には、エラー通知回路１１１は、エラー種別、エラーが発生したＣＰＵ番号、アドレスなどのエラー情報を所定のレジスタに格納する。その後、エラー通知回路１１１は、トラップを発生させる（オペレーティングシステム２０１のトラップ処理部２１１を起動する）。すると、オペレーティングシステム２０１のトラップ処理部２１１が、エラー情報が書き込まれたレジスタの内容を参照する。これにより、オペレーティングシステム２０１にエラー情報が通知される。【００６６】
ＣＰＵ１１０が実行するオペレーティングシステム２０１では、トラップ処理部２１１がＣＰＵ１１０の通常処理（停止した処理を再開させるための最低限の処理を除く全ての処理）を一時停止させる（ステップＳ１４）。【００６７】
ＣＰＵ１１０からエラー情報を受け取ったＣＰＵ１２０では、エラー通知回路１２１がＣＰＵ１１０のエラー情報をＣＰＵ１２０が実行するオペレーティングシステム２０２に通知する（ステップＳ１５）。これは、正常なＣＰＵ１２０が、エラー種別、エラーが発生したＣＰＵ番号、アドレスなどのエラー情報をレジスタに設定した後、トラップを生成してオペレーティングシステムにエラーの発生を通知する処理である。【００６８】
トラップの発生が通知されることにより、オペレーティングシステム２０２によりトラップ処理が行われる（ステップＳ１６）。トラップ処理では、オペレーティングシステム２０２のトラップ処理部２１２が、レジスタを参照してＣＰＵ１１０のエラー情報（エラー種別、ＣＰＵ番号、アドレスなど）を獲得する。【００６９】
その後、オペレーティングシステム２０２によりパニック処理が行われる（ステップＳ１７）。パニック処理では、パニック処理部２３２内の各処理機能が、次の処理を行う。エラー情報表示／記録部は、ＣＰＵ１１０のエラー情報を表示／記録する。ファイルシステム同期部は、ファイルシステムの同期処理を実施する。メモリダンプ部は、メモリダンプを採取する。システム再起動部は、他のパニック処理終了後にシステムの再起動処理を行う。その結果、サーバ１００がシャットダウンされた後、再起動される。【００７０】
このようにして、ＣＰＵ１１０でエラーが発生した場合、他のＣＰＵ１２０によってエラー処理が実行されるため、エラー情報やメモリダンプの採取やシステムの再起動を確実に行うことができる。なお、処理を依頼したＣＰＵ１２０が、何らかの原因でエラー処理を実行できない場合もあり得る。その場合、ＣＰＵ１１０自らがエラー処理を続行する。【００７１】
図７は、他のＣＰＵによるエラー処理が失敗した場合を示すシーケンス図である。この例は、ＣＰＵ１２０でのパニック処理（ステップＳ１７）に失敗した場合である。ステップＳ１１からステップＳ１７までの処理は図６と同様であるため、説明を省略する。【００７２】
ＣＰＵ１２０におけるパニック処理に失敗すると、システムの再起動が行われない。そのため、ＣＰＵ１１０のオペレーティングシステム２０１におけるトラップ処理部２１１では、処理の一時停止（ステップＳ１５）から所定時間経過後、ＣＰＵ１１０での処理を再開する（ステップＳ１８）。【００７３】
そして、ＣＰＵ１１０で実行されるオペレーティングシステム２０１のトラップ処理部２１１によってトラップ処理が行われる（ステップＳ１９）。さらに、パニック処理部２３１によって、パニック処理が行われる（ステップＳ２０）。その結果、サーバ１００が再起動される。【００７４】
以上説明したように、マルチＣＰＵコンピュータシステムにおいて、従来技術ではエラー発生ＣＰＵでエラー情報の記録などの後処理を行っていたが、本実施の形態によれば、他の正常なＣＰＵがエラー発生ＣＰＵの後処理を行う。この方式を採ることで、システムの信頼性を向上させることができる。【００７５】
具体的には、ＣＰＵキャッシュのマルチビットエラーが連続発生する場合などに、トラップ処理やパニック処理で同じエラーが発生して、システムがハングアップしたり、システムの再起動に失敗したりする問題を防止できる。これにより、システムの運用が長時間停止する問題も防止できる。【００７６】
しかも、故障ＣＰＵを早期に交換することができ、同一ＣＰＵのエラーにより、繰り返しシステムに被害を及ぼす問題も防止できる。その結果、ファイルシステムの同期処理が実行できないことに起因するファイル破壊、データ破壊を防止できる。【００７７】
また、メモリダンプが確実に採取できることで、メモリダンプが採取できないことにより、エラーの一次要因を特定できない事態を防止できる。
また、エラーの発生したＣＰＵの処理を一時停止させることにより、正常なＣＰＵの処理への影響を無くすことができ、確実、安全にトラップ処理、パニック処理を行うことができる。【００７８】
さらに、エラーの発生したＣＰＵの処理を再開してトラップ処理、パニック処理を実行することにより、万が一、エラーを検出していないＣＰＵでのトラップ処理やパニック処理がハングアップする場合でも、エラー処理を実行することができる。【００７９】
すなわち、エラーを検出されていないＣＰＵでトラップ処理、パニック処理などのエラー処理を実行するが、実際にはエラーが検出されていないＣＰＵの障害で、他のＣＰＵにおけるエラーが誘発される場合もある。その場合、正常なＣＰＵでエラーが検出され、故障しているＣＰＵでトラップ処理、パニック処理が実行され、システムがハングアップしてしまう可能性もある。【００８０】
そこで、本実施の形態では、万が一に備えて、一定時間後にエラーを検出したＣＰＵでも、トラップ処理、パニック処理を実行する。これにより、エラー情報の表示／記録、ファイルシステムの同期、メモリダンプの採取、システムの再起動を、確実に実施できる。【００８１】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、オペレーティングシステムに基づいてサーバ上で実現される機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。【００８２】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。【００８３】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。【００８４】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【００８５】
１  記憶装置
２  第１のＣＰＵ
２ａ  第１のエラー通知回路
３  第２のＣＰＵ
３ａ  第２のエラー通知回路
４  オペレーティングシステム
【図１】
0004489802.tif 000002
【図２】
0004489802.tif 000003
【図３】
0004489802.tif 000004
【図４】
0004489802.tif 000005
【図５】
0004489802.tif 000006
【図６】
0004489802.tif 000007
【図７】
0004489802.tif 000008
【図８】
0004489802.tif 000009