(57)【特許請求の範囲】
【請求項１】
複数のプロセッサを備える情報処理装置であって、
前記複数のプロセッサのうちの第１のプロセッサが、
当該第１のプロセッサの動作履歴情報を収集してログ記憶部に格納するログ収集部と、
前記ログ記憶部に格納された前記動作履歴情報を、不揮発性の記憶装置に移動させるログ出力部と、
当該第１のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第２のプロセッサに、前記ログ出力部としての機能を移管させる移管処理部と
しての機能を実行することを特徴とする、情報処理装置。
【請求項２】
前記移管処理部は、前記第１プロセッサが高負荷状態から低負荷状態に遷移した場合に、前記ログ出力部としての機能を移管した前記第２のプロセッサに対して、前記ログ出力部としての機能の移管を解除する通知を送信する
ことを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記第１のプロセッサが、
前記第１のプロセッサによって実行される前記ログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第１のログ出力対象情報と、
前記第１のプロセッサによって実行されるログ出力部としての機能の移管先の前記第２のプロセッサを示す移管先プロセッサ情報とを備え、
前記移管処理部が、
前記第２のプロセッサに前記ログ出力部としての機能を移管させる際に、前記第１のログ出力対象情報から前記第１のプロセッサの登録を削除するとともに、前記移管先プロセッサ情報に前記第２のプロセッサを追加する
ことを特徴とする、請求項２記載の情報処理装置。
【請求項４】
前記移管処理部が、
前記第２のプロセッサに前記ログ出力部としての機能の移管を解除する通知を送信する際に、前記第１のログ出力対象情報に前記第１のプロセッサを追加するとともに、前記移管先プロセッサ情報から前記第２のプロセッサの登録を削除する
ことを特徴とする、請求項３記載の情報処理装置。
【請求項５】
前記第２のプロセッサが、
前記第２のプロセッサによって実行されるログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第２のログ出力対象情報を備え、
前記第１のプロセッサから前記ログ出力部としての機能を移管させる通知を受信すると、前記第２のログ出力対象情報に前記第１のプロセッサを追加する
ことを特徴とする、請求項２〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記第２のプロセッサが、
前記第１のプロセッサから前記ログ出力部としての機能の移管を解除する通知を受信すると、前記第２のログ出力対象情報から前記第１のプロセッサの登録を削除する
ことを特徴とする、請求項５記載の情報処理装置。
【請求項７】
前記複数のプロセッサのうち第３のプロセッサに異常が検出された場合に、前記複数のプロセッサのうち前記第１プロセッサおよび第３のプロセッサ以外のプロセッサの動作を停止させる停止処理部
を備えることを特徴とする、請求項１〜６のいずれか１項に記載の情報処理装置。
【請求項８】
複数のプロセッサを備える情報処理装置において、
前記複数のプロセッサのうちの第１のプロセッサに、
当該第１のプロセッサの動作履歴情報を収集してログ記憶部に格納する処理と、
前記ログ記憶部に格納された前記動作履歴情報を不揮発性の記憶装置に移動させる処理と、
当該第１のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第２のプロセッサに、前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる処理と
を実行させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および制御プログラムに関する。
【背景技術】
【０００２】
ＫＶＭ（Kernel-based Virtual Machine）やＸｅｎ等の仮想化ソフトや、カーネルの開発を行なう際に、ＣＰＵ（Central Processing Unit）のコントロールレジスタ値等を直接設定し、ＣＰＵやメモリ管理ユニット（Memory Management Unit：ＭＭＵ）の動作モードを変更する。
【０００３】
プログラムミスやハードウェア異常により、ＣＰＵのレジスタ設定に誤りが生じた場合、ＣＰＵやカーネルに異常が発生し、システムが停止（ハングアップ）した状態になる。システムが停止状態になるとＴＴＹ（Tele-Typewriter：コンソール）経由での操作が不能となり、その時の動作状況を知るためのログ採取を行なうことが出来ず、原因調査が難航する。
【０００４】
そこで、従来のコンピュータシステムにおいては、例えばＩＣＥ（In-Circuit Emulator）やＨＷ（Hard Ware）シミュレータのような設備や開発環境（調査用専用機器）を別途備えることで、ＣＰＵのレジスタ情報等を採取している。
【０００５】
また、近年、複数のＣＰＵを搭載したハードウェアでカーネル（kernel）を動作させる手法として、対称型マルチプロセッシング（Symmetric Multiprocessing：ＳＭＰ）カーネルが用いられる場合がある。
【０００６】
図１６はＳＭＰカーネルを説明するための図である。
【０００７】
この図１６に示すように、ＳＭＰを用いた並列処理システムにおいては、複数のＣＰＵ＃０〜＃３を用いてＳＭＰカーネル（以下、単にカーネルという場合がある）が実行され、更に、このカーネル上でアプリケーションが実行される。そして、全てのＣＰＵ＃０〜＃３に対して対称的、均一的に処理が割り付けられる。
【０００８】
ＳＭＰカーネルにおいては、カーネルスケジューラが各ＣＰＵに処理を分散させて効率よく処理をさせる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００４−１８５６０２号公報
【特許文献２】特開２００４−３１０５１４号公報
【特許文献３】特開２０１１−７０６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、例えば、客先のコンピュータシステムで異常が発生した場合のように、障害について調査するための環境をすぐ揃えることができない場合がある。
【００１１】
客先のコンピュータシステムがＳＭＰカーネルの異常やＳＭＰカーネルが動作するＣＰＵの異常により動作停止した際には、その場でＩＣＥやＨＷシミュレータ等の調査用専用機器を用意することができず、また、調査専用のＣＰＵを割り当てることもできない。このようにＳＭＰカーネルが停止した状態では調査用のログ採取を行なうことができず、原因調査が難航し、問題解決が長期化するという課題がある。
【００１２】
また、障害調査のため動作状況を過去に遡り分析する場合に、事前にカーネルやファームウェアに仕込んだログだけでは想定した状態のログしか残らない。そのため、想定外の障害が発生すると分析を行なうための情報を得ることができず、問題解決が長期化してしまうという課題もある。
【００１３】
１つの側面では、本発明は、プロセッサの動作履歴情報を確実に収集できるようにすることを目的とする。
【課題を解決するための手段】
【００１４】
このため、この情報処理装置は、複数のプロセッサを備える情報処理装置であって、前記複数のプロセッサのうちの第１のプロセッサが、当該第１のプロセッサの動作履歴情報を収集してログ記憶部に格納するログ収集部と、前記ログ記憶部に格納された前記動作履歴情報を、不揮発性の記憶装置に移動させるログ出力部と、当該第１のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第２のプロセッサに、前記ログ出力部としての機能を移管させる移管処理部としての機能を実行する。
【発明の効果】
【００１５】
一実施形態によれば、プロセッサの動作履歴情報を確実に収集できる。
【図面の簡単な説明】
【００１６】
【図１】実施形態の一例としてのコンピュータシステムのハードウェア構成を示す図である。
【図２】実施形態の一例としてのコンピュータシステムの機能構成を示す図である。
【図３】実施形態の一例としてのコンピュータシステムにおけるログ収集部の処理を説明するための図である。
【図４】実施形態の一例としてのコンピュータシステムにおけるログバッファを説明するための図である。
【図５】実施形態の一例としてのコンピュータシステムにおける詳細ログ収集部の処理を説明するための図である。
【図６】実施形態の一例としてのコンピュータシステムにおけるログ出力を説明するための図である。
【図７】実施形態の一例としてのコンピュータシステムにおけるログ出力の概要を説明するための図である。
【図８】実施形態の一例としてのコンピュータシステムにおけるログ収集部による処理を説明するフローチャートである。
【図９】実施形態の一例としてのコンピュータシステムにおけるログ出力処理制御部の移管元としての処理を説明するフローチャートである。
【図１０】実施形態の一例としてのコンピュータシステムにおけるログ出力処理制御部の移管先としての処理を説明するフローチャートである。
【図１１】実施形態の一例としてのコンピュータシステムのログ出力部の処理を説明するフローチャートである。
【図１２】実施形態の一例としてのコンピュータシステムの詳細ログ収集部の処理を説明するフローチャートである。
【図１３】実施形態の一例としてのコンピュータシステムにおける、移管元のログ出力処理制御部と移管先のログ出力処理制御部との処理を例示するシーケンス図である。
【図１４】実施形態の一例としてのコンピュータシステムにおける、移管元のログ出力処理制御部と移管先のログ出力処理制御部との処理を例示するシーケンス図である。
【図１５】実施形態の一例としてのコンピュータシステムにおける、移管元のログ出力処理制御部と移管先のログ出力処理制御部との処理を例示するシーケンス図である。
【図１６】ＳＭＰカーネルを説明するための図である。
【発明を実施するための形態】
【００１７】
以下、図面を参照して本情報処理装置および制御プログラムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１８】
（Ａ）構成
図１は実施形態の一例としてのコンピュータシステムのハードウェア構成を示す図、図２はその機能構成を示す図である。
【００１９】
本コンピュータシステム１は、図１に示すように、複数（図１に示す例では４つ）のＣＰＵ（第１のプロセッサ，第２のプロセッサ，第３のプロセッサ）１０−１〜１０−４，メモリ１１および記憶装置１２を備える。
【００２０】
なお、図１に例示するコンピュータシステム１においては、便宜上、マウスやキーボード等の入力装置や、表示装置の図示を省略している。また、コンピュータシステム１には、これら以外の機器をそなえてもよい。また、図１に示す例においては、コンピュータシステム１が４つのＣＰＵ１０−１〜１０−４を備えているが、これに限定されるものではなく、３つ以下、または５つ以上のＣＰＵ１０を備えてもよい。
【００２１】
メモリ１１はＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）を含む記憶メモリである。メモリ１１のＲＯＭには、ソフトウェアプログラム（制御プログラム）やこのプログラム用のデータ類が書き込まれている。メモリ１１上のソフトウェアプログラムは、ＣＰＵ１０−１〜１０−４に適宜読み込まれて実行される。又、メモリ１１のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。
【００２２】
メモリ１１のＲＡＭの記憶領域は、図２、図３、図５等に示すように、ログバッファ１１１−１〜１１１−４，デバッグカーネル動作用領域１１２およびＣＰＵ負荷情報格納領域１１３として用いられる。
【００２３】
ログバッファ１１１−１〜１１１−４には、各ＣＰＵ１０−１〜１０−４のそれぞれから採取されたログ情報（動作履歴情報；ログ情報，ＣＰＵ情報，カーネル情報）が格納される。具体的には、ログバッファ１１１−１には、ＣＰＵ１０−１から収集されたログ情報が格納される。同様に、ログバッファ１１１−２〜１１１−４には、ＣＰＵ１０−２〜１０−４から収集されたログ情報がそれぞれ格納される。
【００２４】
このように、ログバッファ１１１−１〜１１１−４は、ＣＰＵ１０に関するログ情報を格納するログ記憶部として機能する。
【００２５】
以下、ログバッファを示す符号としては、複数のログバッファのうち１つを特定する必要があるときには符号１１１−１〜１１１−４を用いるが、任意のログバッファを指すときには符号１１１を用いる。
【００２６】
ＲＡＭは揮発性メモリであり、本コンピュータシステム１の電源断時にはログバッファ１１１に格納されたログ情報は失われる。
【００２７】
デバッグカーネル動作用領域１１２には、デバッグカーネルプログラムが格納されており、ＣＰＵ１０−１〜１０−４が、このデバッグカーネル動作用領域１１２からデバッグカーネルプログラムを読み出して実行することで、デバッグカーネルとしての機能が実行される。なお、このデバッグカーネルとしての機能の詳細については後述する。
【００２８】
記憶装置１２は、ハードディスクドライブ（Hard disk drive：ＨＤＤ）、ＳＳＤ（Solid State Drive）、ストレージクラスメモリ（Storage Class Memory：ＳＣＭ）等の記憶装置であって、種々のデータを格納するものである。記憶装置１２は不揮発性を有しており、本コンピュータシステム１の電源断時においても、記憶装置１２に保存されたログ情報は失われることはない。
【００２９】
また、記憶装置１２の記憶領域の一部として設けられたログ用ディスク領域１２１には、後述するログ出力部１０２−１〜１０２−４によって、ログバッファ１１１−１〜１１１−４から読み出されたログ情報が格納される。
【００３０】
ＣＰＵ１０−１〜１０−４は、種々の制御や演算を行なう処理装置であり、メモリ１１に格納されたＯＳ（Operating System）やプログラムを実行することにより、種々の機能を実現する。これらのＣＰＵ１０−１〜１０−４は互いに同様の構成を有する。
【００３１】
本コンピュータシステム１は、複数のＣＰＵ１０−１〜１０−４を備えるマルチプロセッシングシステムであり、これらの複数のＣＰＵ１０−１〜１０−４を用いてＳＭＰを実現する。
以下、ＣＰＵを示す符号としては、複数のＣＰＵのうち１つを特定する必要があるときには符号１０−１〜１０−４を用いるが、任意のＣＰＵを指すときには符号１０を用いる。
【００３２】
また、以下、ＣＰＵ１０−１をＣＰＵ＃０という場合がある。同様に、ＣＰＵ１０−２，１０−３，１０−４を、それぞれＣＰＵ＃１，＃２，＃３という場合がある。
【００３３】
そして、ＣＰＵ１０が、制御プログラムを実行することにより、図２に示すように、ログ収集部１０１−１〜１０１−４，ログ出力部１０２−１〜１０２−４，ログ出力処理制御部１０３−１〜１０３−４，詳細ログ収集部１０４−１〜１０４−４およびＣＰＵ負荷収集部１０５−１〜１０５−４として機能する。
【００３４】
ここで、図中、“−１”，“−２”，“−３”，“−４”の文字を有する各符号は、同じ文字を有する各符号どうしの間に、それぞれ対応関係があることを示しており、具体的には、符号“−１”が付された各機能はＣＰＵ１０−１によって実現される機能であることを示す。同様に、符号“−２”，“−３”，“−４”が付された各機能は、それぞれＣＰＵ１０−２，ＣＰＵ１０−３，ＣＰＵ１０−４によって実現される機能であることを示す。
【００３５】
すなわち、ログ収集部１０１−１，ログ出力部１０２−１，ログ出力処理制御部１０３−１，詳細ログ収集部１０４−１およびＣＰＵ負荷収集部１０５−１としての各機能は、それぞれＣＰＵ１０−１が制御プログラムを実行することにより実現される。
【００３６】
同様に、ログ収集部１０１−２〜１０１−４，ログ出力部１０２−２〜１０２−４，ログ出力処理制御部１０３−２〜１０３−４，詳細ログ収集部１０４−２〜１０４−４およびＣＰＵ負荷収集部１０５−２〜１０５−４としての各機能は、ＣＰＵ１０−２〜１０−４が制御プログラムをそれぞれ実行することにより実現される。
【００３７】
以下、ログ収集部を示す符号としては、複数のログ収集部のうち１つを特定する必要があるときには符号１０１−１〜１０１−４を用いるが、任意のログ収集部を指すときには符号１０１を用いる。
【００３８】
また、以下、ログ出力部を示す符号としては、複数のログ出力部のうち１つを特定する必要があるときには符号１０２−１〜１０２−４を用いるが、任意のログ出力部を指すときには符号１０２を用いる。
【００３９】
さらに、以下、ログ出力処理制御部を示す符号としては、複数のログ出力処理制御部のうち１つを特定する必要があるときには符号１０３−１〜１０３−４を用いるが、任意のログ出力処理制御部を指すときには符号１０３を用いる。
【００４０】
また、以下、詳細ログ収集部を示す符号としては、複数の詳細ログ収集部のうち１つを特定する必要があるときには符号１０４−１〜１０４−４を用いるが、任意の詳細ログ収集部を指すときには符号１０４を用いる。
【００４１】
さらに、以下、ＣＰＵ負荷収集部を示す符号としては、複数のＣＰＵ負荷収集部のうち１つを特定する必要があるときには符号１０５−１〜１０５−４を用いるが、任意のＣＰＵ負荷収集部を指すときには符号１０５を用いる。
【００４２】
なお、これらのログ収集部１０１，ログ出力部１０２，ログ出力処理制御部１０３，詳細ログ収集部１０４およびＣＰＵ負荷収集部１０５としての機能を実現するためのプログラム（制御プログラム）は、例えばフレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００４３】
ログ収集部１０１，ログ出力部１０２，ログ出力処理制御部１０３，詳細ログ収集部１０４およびＣＰＵ負荷収集部１０５としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ１１のＲＡＭやＲＯＭ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ１０）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
【００４４】
ＣＰＵ負荷収集部１０５は、自身が実行されているＣＰＵ１０（以下、自ＣＰＵ１０という）の負荷を表す情報を収集する。なお、ＣＰＵ１０の負荷は、例えばＣＰＵ使用率を用いて表すことができる。ＣＰＵ１０の負荷状態は既知の種々の手法で収集することができ、その説明は省略する。また、以下、自ＣＰＵ１０以外の他のＣＰＵ１０を他ＣＰＵ１０という場合がある。
【００４５】
また、ＣＰＵ負荷収集部１０５は、収集した自ＣＰＵ１０の負荷状態を示す情報（ＣＰＵ負荷情報）を、そのＣＰＵ１０を特定するための情報（例えば、ＣＰＵ番号：詳細は後述）と関連付けて、メモリ１１のＣＰＵ負荷情報格納領域１１３に格納する。
【００４６】
なお、メモリ１１においてはＣＰＵ１０毎にＣＰＵ負荷情報格納領域１１３を設け、ＣＰＵ負荷収集部１０５は、収集したＣＰＵ負荷情報を、自ＣＰＵ１０に対応して設けられたＣＰＵ負荷情報格納領域１１３に格納してもよい。
【００４７】
ログ収集部１０１は、自ＣＰＵ１０についてのログ情報を収集する。ログ情報は、ＣＰＵ１０の実行履歴（動作履歴）を表す情報（動作履歴情報）であって、例えば、ＣＰＵ１０のレジスタ（図示省略）に格納された情報（ＣＰＵレジスタ情報）や、カーネルのスケジューラ情報である。なお、ログ収集部１０１が収集するログ情報は、これらに限定されるものではなく、適宜変形して実施することができる。
【００４８】
ログ収集部１０１は、ＣＰＵ１０から収集したログ情報を、ログバッファ１１１に格納する。以下、ＣＰＵ１０から収集したログ情報を、ログバッファ１１１に格納することをログ収集という場合がある。
【００４９】
図３は実施形態の一例としてのコンピュータシステム１におけるログ収集部１０１の処理を説明するための図、図４はログバッファ１１１を説明するための図である。
【００５０】
前述の如く、ログバッファ１１１は、ＣＰＵ１０毎に備えられている。以下、ログバッファ１１１−１をＣＰＵ１０＃０用ログバッファ１１１−１という場合がある。同様に、ログバッファ１１１−２，１１１−３，１１１−４を、それぞれＣＰＵ＃１用ログバッファ１１１−２，ＣＰＵ＃２用ログバッファ１１１−３，ＣＰＵ＃３用ログバッファ１１１−４という場合がある。
【００５１】
また、ログバッファ１１１−１〜１１１−４は、それぞれリングバッファ構造を有し、複数個（本実施形態においては例えば１０００個）分のログを保存する領域を持つ。
【００５２】
図４においては、ＣＰＵ＃０用ログバッファ１１１−１を例示しており、０〜９９９までの１０００個の格納領域に、それぞれログ収集部１０１−１によって収集されたログ情報（ＣＰＵ情報およびカーネル情報）が順次格納される。
【００５３】
なお、ログバッファ１１１において、ログ収集部１０１によってログ情報が格納される格納領域の位置（先頭位置）は、ログ格納ポインタによって特定される。また、ログバッファ１１１において、後述するログ出力部１０２によってログ情報が読み出される格納領域の位置（先頭位置）は、ログ出力ポインタによって特定される。
【００５４】
ログ収集部１０１は、所定の第１の間隔（例えば、１ｍｓ毎）でログ収集を行なう。具体的には、ログ収集部１０１は、例えば、割込みコントローラ１０１１を用いて、定期的（例えば、１ｍｓ毎）にＣＰＵ１０に対して割込みを発生させる（図３中の矢印Ｐ１参照）。
【００５５】
ＣＰＵ１０は、割込みコントローラ１０１１から割込みが入力されると、ログ収集用の割込みハンドラ１０１２を実行する（図３中の矢印Ｐ２参照）。
【００５６】
このログ収集用の割込みハンドラ１０１２は、カーネル起動時に登録される。割込みハンドラ１０１２は、ＣＰＵ１０にログ収集部１０１としての機能を実行させる（図３中の矢印Ｐ３参照）。すなわち、ログ収集部１０１は、ＣＰＵ情報およびカーネル情報の採取を行ない、ＣＰＵ１０に割り当てられたログバッファ１１１へ出力させる。
【００５７】
また、ログ収集部１０１は、所定のタイミングで後述するログ出力処理制御部１０３に対して通知を行ない、ログ出力部１０２によるログ出力（詳細は後述）を行なわせる（図３中の矢印Ｐ４参照）。
【００５８】
例えば、ログ収集部１０１は、ログ収集を１００回行なったタイミングで、ログ出力処理制御部１０３にログ出力を行なわせるための通知を発行する。
【００５９】
また、ログ収集部１０１は、ログ収集を行なった後に、自身が実行されているＣＰＵ１０に詳細ログ収集部１０４としての機能を実行させる。
【００６０】
詳細ログ収集部１０４は、本コンピュータシステム１に備えられた複数のＣＰＵ１０のいずれかにおいて障害が発生した場合に機能する。
【００６１】
図５は実施形態の一例としてのコンピュータシステム１における詳細ログ収集部１０４の処理を説明するための図である。
【００６２】
詳細ログ収集部１０４としての機能は、上述したログ収集部１０１によって実行を開始される（図５中の符号（１）参照）。
【００６３】
各詳細ログ収集部１０４は、自身が実行されているＣＰＵ１０以外の他のＣＰＵ１０のそれぞれのＣＰＵステータスを監視する（図５中の符号（２）参照）。
【００６４】
そして、いずれかのＣＰＵ（第３のプロセッサ）１０において何らかの異常が発生した場合に、各ＣＰＵ１０で実行される詳細ログ収集部１０４のうち、最初にこの異常発生を検知した詳細ログ収集部１０４が、自身が実行されているＣＰＵ１０（自ＣＰＵ１０）と当該異常が発生しているＣＰＵ（第３のプロセッサ）１０とを除いた、他のＣＰＵ１０を停止させる。
【００６５】
すなわち、詳細ログ収集部１０４は、複数のＣＰＵ１０のうち一のＣＰＵ（第３のプロセッサ）１０に異常が検出された場合に、これらの複数のＣＰＵ１０のうち自ＣＰＵ（第１プロセッサ）１０および異常が検出されたＣＰＵ１０以外のＣＰＵ１０の動作を停止させる停止処理部として機能する。
【００６６】
異常が発生しているＣＰＵ１０を除いた他のＣＰＵ１０を停止させることで、リングバッファ構成を有するログバッファ１１１のログ情報が、これらのＣＰＵ１０の動作に伴って生成されるログ情報により上書き消去されてしまうことを阻止することができる。
【００６７】
また、詳細ログ収集部１０４が、自ＣＰＵ１０を停止対象から除外することで、自ＣＰＵ１０において、詳細ログ収集部１０４としての機能やデバッグカーネルを実行することができる。
【００６８】
以下に、図５に示す例において、ＣＰＵ＃１において異常が発生したことをＣＰＵ＃３の詳細ログ収集部１０４−４が最初に検知した例について示す。
【００６９】
詳細ログ収集部１０４−４は、正常に動作中のＣＰＵ＃０，＃２を停止させるとともに（図５の符号（３）参照）、デバッグカーネル動作用領域１１２からデバッグカーネルプログラムを読み出して、自ＣＰＵ１０−４に実行（起動）させる（図５中の符号（４）参照）。
【００７０】
ユーザは、実行されたデバッグカーネルの機能を用いて、種々の入力操作等を行ない、異常が検出されたＣＰＵ＃３についての、メモリダンプや周辺デバイスのレジスタダンプ等を収集し、また、本コンピュータシステム１の再起動を行なう。
【００７１】
ログ出力部１０２は、ログバッファ１１１に格納されたログ情報を読み出してログ用ディスク領域１２１に格納（出力）する。以下、ログバッファ１１１に格納されたログ情報を読み出してログ用ディスク領域１２１に格納（出力）することをログ出力という場合がある。
【００７２】
前述の如く、ＲＡＭは揮発性メモリであるので、本コンピュータシステム１の電源断時にはログバッファ１１１に格納されたログ情報は失われる。これに対して、記憶装置１２は不揮発性を有しており、本コンピュータシステム１の電源断時においても、記憶装置１２に保存されたログ情報は失われることはない。
【００７３】
本コンピュータシステム１においては、ログ出力部１０２が、ログバッファ１１１に格納されたログ情報を、記憶装置１２のログ用ディスク領域１２１に移動（出力）されることで、ログ情報が保護される。
【００７４】
ログ出力部１０２は、後述するログ出力処理制御部１０３からの指示（制御）に従って、ログ出力を行なう。
【００７５】
例えば、ログ出力部１０２は、ログ出力処理制御部１０３からの指示に従って、自ＣＰＵ１０に対応するログバッファ１１１に格納されたログ情報を記憶装置１２のログ用ディスク領域１２１に格納（出力）する。
【００７６】
また、ログ出力部１０２は、ログ出力処理制御部１０３から、ＣＰＵ１０を特定する識別情報（以下、対象ＣＰＵ番号という）を受け取り、この対象ＣＰＵ番号によって特定されるＣＰＵ１０に対応するログバッファ１１１からログ情報を読み出してログ用ディスク領域１２１に出力する。
【００７７】
この際、ログ出力部１０２は、ログバッファ１１１において、ログ出力ポインタによって特定される位置から、ログ格納ポインタによって特定される位置までの範囲の情報（ログ情報）をログ用ディスク領域１２１に出力する。また、ログ出力部１０２は、ログバッファ１１１のログ出力ポインタの値をログ格納ポインタの値を用いて上書きすることで更新する。
【００７８】
なお、ログ出力部１０２は、ログ出力処理制御部１０３の指示に従って、前述した第１の間隔（例えば、１ｍｓ毎）よりも長い第２の間隔（例えば、１０ｍｓ毎）で、ログ出力を行なう。
【００７９】
例えば、ログ出力部１０２は、ログ出力処理制御部１０３の指示に従って、ログ収集部１０１がログ情報の収集を１００回実行する毎に、ログ出力を行なう。
【００８０】
図６は実施形態の一例としてのコンピュータシステム１におけるログ出力を説明するための図である。
【００８１】
ログ収集部１０１が、例えばログ収集を１００回行なったタイミングでログ出力処理制御部１０３に対して通知を行なうと（図６中の矢印Ｐ５参照）、ログ出力処理制御部１０３はログ出力部１０２にログ出力を実行させる（図６中の矢印Ｐ６参照）。
【００８２】
ログ出力部１０２は、ログ出力処理制御部１０３の指示に従ってログ出力を行なう。すなわち、ログ出力部１０２は、ログバッファ１１１に格納されたログ情報を記憶装置１２のログ用ディスク領域１２１に出力する（図６中の矢印Ｐ７参照）。
【００８３】
そして、本コンピュータシステム１においては、ログ出力部１０２は、ログ出力処理制御部１０３からの指示に従い、自ＣＰＵ１０のログ情報の他に、他のＣＰＵ１０のログ情報の出力を行なうこともある。
【００８４】
ログ出力処理制御部１０３は、ログ出力部１０２によるログ出力を制御する。
【００８５】
ログ出力処理制御部１０３は、自ＣＰＵ１０が低負荷状態から高負荷状態に変化した場合に、自ＣＰＵ１０におけるログ情報の出力を、低負荷状態の他のＣＰＵ１０のログ出力部１０２に実行させる。
【００８６】
すなわち、ログ出力処理制御部１０３は、自ＣＰＵ１０が低負荷状態から高負荷状態に遷移した場合に、本コンピュータシステム１１に備えられた複数のＣＰＵ１０−１〜１０−４のうち最も低負荷の他のＣＰＵ１０に、ログ出力部１０２としての機能を移管させる移管処理部として機能する。
【００８７】
以下、自ＣＰＵ１０におけるログ情報の出力を他のＣＰＵ１０のログ出力部１０２に実行させることをログ出力を移管するという。これに対して、他のＣＰＵ１０のログ情報を出力することを、ログ出力を代替実行するという。
【００８８】
そして、他ＣＰＵ１０にログ出力を移管する側を移管元という場合があり、他ＣＰＵ１０からログ情報を移管された側を移管先という場合がある。
【００８９】
また、ログ出力処理制御部１０３は、他ＣＰＵ１０にログ出力を移管している状態において、自ＣＰＵ１０の負荷状態が高負荷から低負荷に変化した場合に、他ＣＰＵ１０に移管していたログ情報の出力を自ＣＰＵ１０のログ出力部１０２に実行させるよう切り替える。以下、他ＣＰＵ１０に移管していたログ出力を、自ＣＰＵ１０において実行するように切り替えることを、移管を解除する、もしくはログ出力を取り戻すという場合がある。
【００９０】
ログ出力処理制御部１０３は、複数ＣＰＵ１０間における、ログ出力の移管や移管の解除を制御するために、ログ出力対象情報１１４および代替ＣＰＵ情報１１５を管理する。
【００９１】
ログ出力対象情報１１４は、自ＣＰＵ１０のログ出力部１０２がログ出力を行なう対象であるＣＰＵ１０を特定する情報である。
【００９２】
本実施形態においては、このログ出力対象情報１１４として、ＣＰＵ１０を特定するＣＰＵ番号を用いる例を示す。以下、ＣＰＵ番号０，１，２，３が、ＣＰＵ＃０，＃１，＃２，＃３をそれぞれ示すものとする。
【００９３】
そして、あるＣＰＵ１０において、他ＣＰＵ１０のログ出力を代替実行する場合には、このログ出力対象情報１１４に、移管元のＣＰＵ１０のＣＰＵ番号が登録される。
【００９４】
ログ出力部１０２は、このログ出力対象情報１１４に登録されているＣＰＵ番号のＣＰＵ１０についてログ出力を行なう。
【００９５】
以下、ログ出力対象情報１１４に登録されているＣＰＵ番号をログ出力対象番号という場合がある。
【００９６】
代替ＣＰＵ情報１１５は、自ＣＰＵ１０についてのログ出力の移管先のＣＰＵ１０を特定するための情報である。本実施形態においては、この代替ＣＰＵ情報１１５としてもＣＰＵ番号を用いる。すなわち、代替ＣＰＵ情報１１５は、自ＣＰＵ１０についてのログ出力の移管先のプロセッサ（１０）を示す移管先プロセッサ情報に相当する。
【００９７】
この代替ＣＰＵ情報１１５に登録されているＣＰＵ番号のＣＰＵ１０が、自ＣＰＵ１０のログ情報の出力（ログ出力）を行なう。
【００９８】
以下、代替ＣＰＵ情報１１５に登録されているＣＰＵ番号を、代替ＣＰＵ番号という場合がある。
【００９９】
ログ出力処理制御部１０３は、他ＣＰＵ１０にログ出力を移管する移管元としての処理と、他ＣＰＵ１０からログ情報を移管された移管先としての処理とを備える。
【０１００】
（１）移管元としてのログ出力処理制御部１０３の処理
移管元のＣＰＵ１０において、ログ出力処理制御部１０３は、ＣＰＵ負荷収集部１０５が前回採取した自ＣＰＵ１０のＣＰＵ負荷情報をＣＰＵ負荷情報格納領域１１３から取得する。また、ログ出力処理制御部１０３は、ＣＰＵ負荷収集部１０５に現在のＣＰＵ負荷情報を収集させる。
【０１０１】
ログ出力処理制御部１０３は、このようにして取得したＣＰＵ負荷情報の変化に応じて、処理を切り換える。例えば、以下の（i）〜（iv）の各場合について、ログ出力処理制御部１０３の処理について示す。
【０１０２】
（i）現在のＣＰＵ負荷が低負荷、且つ、前回のＣＰＵ負荷が低負荷の場合
ログ出力処理制御部１０３は、ログ出力部１０２に、ログ出力対象情報１１４として保存されたＣＰＵ番号が示すＣＰＵ１０に対応するログバッファ１１１に格納されたログ情報をログ用ディスク領域１２１に格納させる。
【０１０３】
（ii）現在のＣＰＵ負荷が高負荷、且つ、前回のＣＰＵ負荷が低負荷の場合
ログ出力処理制御部１０３は、ＣＰＵ負荷情報格納領域１１３を参照して他ＣＰＵ１０のＣＰＵ負荷をそれぞれ取得し、負荷が最も低い（最低負荷）のＣＰＵ１０を特定する。そして、この最低負荷のＣＰＵ１０のＣＰＵ番号を代替ＣＰＵ情報１１５に保存する。すなわち、負荷が最も低いＣＰＵ１０をログ出力の移管先として決定する。
【０１０４】
また、ログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されたＣＰＵ番号が示すＣＰＵ１０のログ出力処理制御部１０３に対して、ログ出力を移管することを示す通知（移管通知）を送信する。
【０１０５】
ログ出力処理制御部１０３は、移管通知として、例えば、ログ出力対象情報１１４として保存されたＣＰＵ番号（ログ出力対象番号）を通知（送信）する。なお、移管通知は、これに限定されるものではなく、例えば、移管通知を示す何らかの信号を送信することで行なってもよい。ログ出力処理制御部１０３は、このような移管通知を示す信号とともに、ログ出力対象番号を送信することが望ましい。
【０１０６】
これにより、移管元のＣＰＵ１０は、最低負荷の他ＣＰＵ１０に対して、自身のログ出力対象情報１１４に登録されたＣＰＵ番号（ログ出力対象番号）のＣＰＵ１０のログ出力を移管する。
【０１０７】
また、ログ出力処理制御部１０３は、移管先の他ＣＰＵ１０に通知したログ出力対象番号（ＣＰＵ番号）に、自ＣＰＵ１０および移管先ＣＰＵ１０とは別の他ＣＰＵ１０のＣＰＵ番号が含まれている場合には、この他ＣＰＵ１０のログ出力処理制御部１０３に対して、代替ＣＰＵ情報１１５に登録されているＣＰＵ番号を通知する。
【０１０８】
これにより、自ＣＰＵ１０が移管先ＣＰＵ１０として機能していた場合に、その移管元の他ＣＰＵ１０のログ出力処理制御部１０３に対して、その移管元ＣＰＵ１０のログ出力が更に移管されたことを通知する。
【０１０９】
（iii）現在のＣＰＵ負荷が低負荷、且つ、前回のＣＰＵ負荷が高負荷の場合
ログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されたＣＰＵ番号が示すＣＰＵ１０（移管先ＣＰＵ１０）に対して、移管していたログ出力の取り戻しを行なう旨のメッセージを通知する。このログ出力の取り戻しを行なう旨のメッセージは、移管先のＣＰＵ１０に対して、ログ出力の移管を解除することを通知する。以下、ログ出力の取り戻しを行なう旨のメッセージの通知を移管解除通知という場合がある。また、ログ出力を取り戻すことを、ログ出力対象番号を取り戻すと表現する場合がある。
【０１１０】
他ＣＰＵ１０に対してログ出力の移管解除通知を送信したログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されているＣＰＵ番号を削除するとともに、ログ出力対象情報１１４に自ＣＰＵ１０のＣＰＵ番号を設定する。
【０１１１】
これにより、ログ出力処理制御部１０３は他ＣＰＵ１０に移管していたログ出力が自ＣＰＵ１０に戻される。すなわち、ログ出力の移管が解除される。
【０１１２】
そして、ログ出力処理制御部１０３は、自ＣＰＵ１０のログ出力部１０２に対して、ログ出力対象情報１１４に登録された自ＣＰＵ１０のログ出力を実行させる。
【０１１３】
（iv）現在のＣＰＵ負荷が高負荷、且つ、前回のＣＰＵ負荷が高負荷の場合
何も処理せず、処理を終了する。
【０１１４】
（２）移管先としてのログ出力処理制御部１０３の処理
移管先のＣＰＵ１０において、ログ出力の移管解除通知を受信した場合、すなわち、ログ出力を取り戻す旨のメッセージ（取り戻し要求）を受信した場合には、ログ出力処理制御部１０３は、ログ出力対象情報（第２のログ出力対象情報）１１４から取り戻し要求の送信元のＣＰＵ１０のＣＰＵ番号を削除する。これにより、当該ＣＰＵ１０のログ出力部１０２によるログ出力対象から、取り戻し要求の送信元のＣＰＵ１０のログ情報が除外される。すなわち、当該ＣＰＵ１０に対するログ出力の移管が解消される。
【０１１５】
また、移管先のＣＰＵ１０において、他のＣＰＵ１０のログ出力処理制御部１０３からログ出力対象番号を通知するメッセージを受信した場合には、受け取ったＣＰＵ番号（ログ出力対象番号）を、自ＣＰＵ１０のログ出力対象情報１１４へ追加保存する。
【０１１６】
また、移管先のＣＰＵ１０において、代替ＣＰＵ番号を通知するメッセージを受信した場合には、受け取ったＣＰＵ番号を代替ＣＰＵ情報１１５に保存する。
【０１１７】
（Ｂ）動作
先ず、上述の如く構成された実施形態の一例としてのコンピュータシステム１におけるログ出力の概要を、図７を用いて説明する。
【０１１８】
各ＣＰＵ１０において、ログ収集部１０１が、それぞれ自ＣＰＵ１０のログ情報を収集して、ログバッファ１１１における対応する領域に格納する（図７中の符号（１）参照）。
【０１１９】
各ＣＰＵ１０において、ログ出力処理制御部１０３は、自ＣＰＵ１０の負荷情報をＣＰＵ負荷情報格納領域１１３から採取する。ログ出力処理制御部１０３は自ＣＰＵ１０の負荷状態に基づき、ログ出力を自ＣＰＵ１０のログ出力部１０２により行なうかを判断する（図７中の符号（２）参照）。
【０１２０】
自ＣＰＵ１０のＣＰＵ負荷が高負荷であって、且つ、前回測定したＣＰＵ負荷が低負荷である場合に、ログ出力処理制御部１０３は、負荷が最も低い他ＣＰＵ１０にログ出力を移管する（図７中の符号（３）参照）。
【０１２１】
なお、例えば、ＣＰＵ負荷の値が所定の閾値以上である場合に、自ＣＰＵ１０のＣＰＵ負荷が高負荷であると判断することができる。また、ＣＰＵ負荷の値が所定の閾値未満である場合に、自ＣＰＵ１０のＣＰＵ負荷が低負荷であると判断することができる。
【０１２２】
その後、ログ出力部１０２によるログ出力が行なわれる。すなわち、ログバッファ１１１のログ情報が、記憶装置１２のログ用ディスク領域１２１に複写（退避）される（図７中の符号（４）参照）。
【０１２３】
なお、上記ログ出力は、ログ出力が他ＣＰＵ１０に移管された場合には、その他ＣＰＵ１０のログ出力部１０２によって行なわれる。また、ログ出力が他ＣＰＵ１０に移管されない場合には、自ＣＰＵ１０のログ出力部１０２によって行なわれる。
【０１２４】
次に、実施形態の一例としてのコンピュータシステム１におけるログ収集部１０１による処理を、図８に示すフローチャート（ステップＡ１〜Ａ１０）に従って説明する。
【０１２５】
本処理は、例えば、割込みコントローラ１０１１からＣＰＵ１０に対して割込みが入力されると、ＣＰＵ１０がログ収集用の割込みハンドラ１０１２を実行することで開始される。
【０１２６】
ステップＡ１において、ログ収集部１０１は、ログ情報として、ＣＰＵ１０からＣＰＵ情報（例えば、ＣＰＵレジスタ情報）を取得する。
【０１２７】
ステップＡ２において、ログ収集部１０１は、ログ情報として、ＣＰＵ１０からカーネル情報（例えばスケジューラ情報）を取得する。
【０１２８】
なお、これらのステップＡ１，Ａ２の実行順序はこれに限定されるものではなく、ステップＡ２の処理をステップＡ１より先に行なってもよく、また、これらの処理を同時に行なってもよい。
【０１２９】
ステップＡ３において、ログ収集部１０１は、ステップＡ１，Ａ２において取得した情報（ログ情報）を、ログバッファ１１１におけるログ格納ポインタによって示される領域に格納する。
【０１３０】
ステップＡ４において、ログ収集部１０１は、ログバッファ１１１におけるログ格納ポインタを、ログ情報の格納後の状態に合わせて更新する。
【０１３１】
ステップＡ５において、ログ収集部１０１は、ログ出力実行カウンタの値をインクリメントする。ログ出力実行カウンタは、ログ収集部１０１により行なわれたログ収集の実行回数を計数するためのカウンタである。このログ出力実行カウンタは、例えば、メモリ１１のＲＡＭ等に格納される。
【０１３２】
ステップＡ６において、ログ収集部１０１は、ログ出力実行カウンタのカウンタ値が１００以上であるかを確認する。
【０１３３】
ログ出力実行カウンタのカウンタ値が１００以上である場合には（ステップＡ６のＹｅｓルート参照）、ステップＡ７に移行する。ステップＡ７において、ログ収集部１０１はログ出力処理制御部１０３の移管元としての機能を実行させる。なお、このログ出力処理制御部１０３の移管元としての機能の詳細は、図９を用いて後述する。
【０１３４】
ステップＡ８において、ログ収集部１０１は、ログ出力実行カウンタを０クリアする。その後、ステップＡ９において、ログ収集部１０１は、割込みコントローラ１０１１による割込みステータスをクリアする。
また、ステップＡ６における確認の結果、ログ出力実行カウンタのカウンタ値が１００未満である場合にも（ステップＡ６のＮｏルート参照）、ステップＡ９に移行する。
【０１３５】
その後、ステップＡ１０において、ログ収集部１０１は、詳細ログ収集部１０４による処理を実行させ、処理を終了する。なお、詳細ログ収集部１０４による処理の詳細は、図１２を用いて後述する。
【０１３６】
次に、実施形態の一例としてのコンピュータシステム１におけるログ出力処理制御部１０３の移管元としての処理を、図９に示すフローチャート（ステップＢ１〜Ｂ１５）に従って説明する。
【０１３７】
ステップＢ１において、ログ出力処理制御部１０３は、ＣＰＵ負荷情報格納領域１１３から前回の自ＣＰＵ１０のＣＰＵ負荷情報を取得する。
【０１３８】
ステップＢ２において、ログ出力処理制御部１０３は、ＣＰＵ負荷収集部１０５を介して最新のＣＰＵ負荷情報を取得する。
【０１３９】
ステップＢ３において、ログ出力処理制御部１０３は、ステップＢ２において収集したＣＰＵ負荷情報をＣＰＵ負荷情報格納領域１１３に保存する。
【０１４０】
ステップＢ４において、ログ出力処理制御部１０３は、ステップＢ２において収集したＣＰＵ負荷情報に基づき自ＣＰＵ１０が高負荷状態であるかを確認する。
【０１４１】
確認の結果、自ＣＰＵ１０が高負荷状態である場合には（ステップＢ４のＹｅｓルート参照）、ステップＢ５に移行する。
【０１４２】
ステップＢ５において、ログ出力処理制御部１０３は、ステップＢ１において取得した、自ＣＰＵ１０の前回のＣＰＵ負荷情報に基づき、前回のＣＰＵ負荷が高負荷状態であったかを確認する。
【０１４３】
確認の結果、前回のＣＰＵ負荷も高負荷状態であった場合には（ステップＢ５のＹｅｓルート参照）、現在のＣＰＵ負荷が高負荷、且つ、前回のＣＰＵ負荷が高負荷の場合の処理が行なわれる。すなわち、ログ出力処理制御部１０３はそのまま処理を終了する。
【０１４４】
また、前回のＣＰＵ負荷は高負荷状態でなかった場合には（ステップＢ５のＮｏルート参照）、ステップＢ６に移行する。ステップＢ６〜Ｂ１０においては、現在のＣＰＵ負荷が高負荷、且つ、前回のＣＰＵ負荷が低負荷の場合の処理が行なわれる。
【０１４５】
ステップＢ６において、ログ出力処理制御部１０３は、ＣＰＵ負荷情報格納領域１１３から、本コンピュータシステム１に備えられた他のＣＰＵ１０のＣＰＵ負荷をそれぞれ取得する。
【０１４６】
ステップＢ７において、ログ出力処理制御部１０３は、これらの複数の他のＣＰＵ１０のうち、負荷が最も低い（最低負荷）のＣＰＵ１０を特定する。そして、この最低負荷のＣＰＵ１０のＣＰＵ番号を代替ＣＰＵ情報１１５に保存する。すなわち、負荷が最も低いＣＰＵ１０をログ出力の移管先として決定する。
【０１４７】
ステップＢ８において、ログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されたＣＰＵ番号が示すＣＰＵ１０のログ出力処理制御部１０３に対して、ログ出力対象情報１１４として保存されたＣＰＵ番号（ログ出力対象番号）を通知するメッセージを送信する。
【０１４８】
これにより、最低負荷の他ＣＰＵ１０に対して、自身のログ出力対象情報１１４に登録されたＣＰＵ番号（ログ出力対象番号）のＣＰＵ１０のログ出力を移管する。
【０１４９】
ステップＢ９において、ログ出力処理制御部１０３は、他ＣＰＵ１０に通知したＣＰＵ番号に他ＣＰＵ１０のＣＰＵ番号が含まれているかを確認する。
【０１５０】
確認の結果、他ＣＰＵ１０に通知したＣＰＵ番号に他ＣＰＵ１０のＣＰＵ番号が含まれている場合には（ステップＢ９のＹｅｓルート参照）、ステップＢ１０に移行する。
【０１５１】
ステップＢ１０においては、ログ出力処理制御部１０３は、この他ＣＰＵ１０のログ出力処理制御部１０３に対して、代替ＣＰＵ情報１１５に登録されているＣＰＵ番号を通知するメッセージを送信する。
【０１５２】
これにより、自身にログ出力を移管していた移管元の他ＣＰＵ１０のログ出力処理制御部１０３に、そのＣＰＵ１０のログ出力が移管されたことを通知する。その後、処理を終了する。
【０１５３】
また、ステップＢ９における確認の結果、他ＣＰＵ１０に通知したＣＰＵ番号に他ＣＰＵ１０のＣＰＵ番号が含まれていない場合も（ステップＢ９のＮｏルート参照）、処理を終了する。
【０１５４】
ステップＢ４における確認の結果、自ＣＰＵ１０が高負荷状態でない場合には（ステップＢ４のＮｏルート参照）、ステップＢ１１において、ログ出力処理制御部１０３は、ステップＢ１において取得した、自ＣＰＵ１０の前回のＣＰＵ負荷情報に基づき、前回のＣＰＵ負荷が高負荷状態であったかを確認する。
【０１５５】
確認の結果、前回のＣＰＵ負荷が低負荷状態であった場合には（ステップＢ１１のＮｏルート参照）、ステップＢ１５に移行する。ステップＢ１５においては、現在のＣＰＵ負荷が低負荷、且つ、前回のＣＰＵ負荷が低負荷の場合の処理が行なわれる。
【０１５６】
ステップＢ１５において、ログ出力処理制御部１０３は、ログ出力部１０２に、ログ出力対象情報１１４として保存されたＣＰＵ番号のＣＰＵ１０について、ログ出力を行なう。すなわち、ＣＰＵ番号が示すＣＰＵ１０に対応するログバッファ１１１に格納されたログ情報をログ用ディスク領域１２１に格納させる。その後、処理を終了する。
【０１５７】
一方、ステップＢ１１における確認の結果、前回のＣＰＵ負荷が高負荷状態であった場合には（ステップＢ１１のＹｅｓルート参照）、ステップＢ１２に移行する。ステップＢ１２〜Ｂ１５においては、現在のＣＰＵ負荷が低負荷、且つ、前回のＣＰＵ負荷が高負荷の場合の処理が行なわれる。
【０１５８】
ステップＢ１２において、ログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されたＣＰＵ番号が示すＣＰＵ１０（移管先ＣＰＵ１０）に対して、ログ出力を取り戻す旨のメッセージを通知する。すなわち、ログ出力の移管解除通知が送信される。
【０１５９】
ステップＢ１３において、ログ出力処理制御部１０３は、代替ＣＰＵ情報１１５として保存されたＣＰＵ番号を削除する。
【０１６０】
また、ステップＢ１４において、ログ出力処理制御部１０３は、ログ出力対象情報１１４に自ＣＰＵ１０のＣＰＵ番号を設定する。
【０１６１】
その後、ステップＢ１５に移行した後、処理を終了する。
【０１６２】
次に、実施形態の一例としてのコンピュータシステム１におけるログ出力処理制御部１０３の移管先としての処理を、図１０に示すフローチャート（ステップＣ１〜Ｃ７）に従って説明する。
【０１６３】
ステップＣ１において、ログ出力処理制御部１０３は、他ＣＰＵ１０のログ出力処理制御部１０３からメッセージを受信する。
【０１６４】
ステップＣ２において、ログ出力処理制御部１０３は、受信したメッセージがログ出力対象番号の取り戻しを通知するものであるかを確認する。
【０１６５】
確認の結果、受信したメッセージがログ出力対象番号の取り戻しを通知するものである場合には（ステップＣ２のＹｅｓルート参照）、ステップＣ３に移行する。
【０１６６】
ステップＣ３においては、ログ出力処理制御部１０３は、ログ出力対象情報１１４からメッセージの送信元ＣＰＵ１０のＣＰＵ番号を削除して、処理を終了する。
【０１６７】
ステップＣ２における確認の結果、受信したメッセージがログ出力対象番号の取り戻しを通知するものでない場合には（ステップＣ２のＮｏルート参照）、ステップＣ４に移行する。
【０１６８】
ステップＣ４において、ログ出力処理制御部１０３は、受信したメッセージがログ出力対象番号を通知するものであるか、すなわち、ログ出力対象番号を受け渡すものであるかを確認する。
【０１６９】
確認の結果、受信したメッセージがログ出力対象番号を通知するものである場合には（ステップＣ４のＹｅｓルート参照）、ステップＣ５に移行する。
【０１７０】
ステップＣ５においては、ログ出力処理制御部１０３は、他ＣＰＵ１０から受け取ったＣＰＵ番号（ログ出力対象番号）を、ログ出力対象情報１１４に追加保存して、処理を終了する。
【０１７１】
ステップＣ４における確認の結果、ログ出力処理制御部１０３は、受信したメッセージがログ出力対象番号を通知するものでない場合（ステップＣ４のＮｏルート参照）、ステップＣ６に移行する。
【０１７２】
ステップＣ６においては、ログ出力処理制御部１０３は、他ＣＰＵ１０から受信したメッセージが代替ＣＰＵ番号を通知するものであるかを確認する。
【０１７３】
確認の結果、受信したメッセージが代替ＣＰＵ番号を通知するものである場合には（ステップＣ６のＹｅｓルート参照）、ステップＣ７に移行する。
【０１７４】
ステップＣ７においては、ログ出力処理制御部１０３は、他ＣＰＵ１０から受け取ったＣＰＵ番号（代替ＣＰＵ番号）を、代替ＣＰＵ情報１１５に保存して、処理を終了する。
【０１７５】
また、ステップＣ６における確認の結果、受信したメッセージが代替ＣＰＵ番号を通知するものでない場合には（ステップＣ６のＮｏルート参照）、処理を終了する。
【０１７６】
次に、実施形態の一例としてのコンピュータシステム１のログ出力部１０２の処理を、図１１に示すフローチャート（ステップＤ１〜Ｄ３）に従って説明する。
【０１７７】
ステップＤ１において、ログ出力部１０２は、ログ出力処理制御部１０３からログ出力対象番号を受け取る。
【０１７８】
ステップＤ２において、ログ出力部１０２は、ログ出力対象番号で示されるＣＰＵ１０に対応するログバッファ１１１において、ログ出力ポインタによって特定される位置から、ログ格納ポインタによって特定される位置までの間の情報（ログ情報）をログ用ディスク領域１２１に出力する。
【０１７９】
ステップＤ３において、ログ出力部１０２は、ログバッファ１１１のログ出力ポインタの値をログ格納ポインタの値を用いて上書きすることで更新し、処理を終了する。
【０１８０】
次に、実施形態の一例としてのコンピュータシステム１の詳細ログ収集部１０４の処理を、図１２に示すフローチャート（ステップＥ１〜Ｅ９）に従って説明する。
【０１８１】
ステップＥ１において、詳細ログ収集部１０４は、他ＣＰＵ１０のそれぞれのＣＰＵステータスを監視する。
【０１８２】
ステップＥ２において、詳細ログ収集部１０４は、他ＣＰＵ１０において異常が発生しているかを確認する。
【０１８３】
確認の結果、他ＣＰＵ１０に異常が発生していない場合には（ステップＥ２のＮｏルート参照）、処理を終了する。
【０１８４】
一方、ステップＥ２における確認の結果、他ＣＰＵ１０のいずれかおいて異常が発生している場合には（ステップＥ２のＹｅｓルート参照）、ステップＥ３に移行する。
【０１８５】
ステップＥ３においては、詳細ログ収集部１０４は、自ＣＰＵ１０と異常が発生しているＣＰＵ１０とを除いた、他の全てのＣＰＵ１０を停止させる。
【０１８６】
ステップＥ４において、詳細ログ収集部１０４は、メモリ１１のデバッグカーネル動作用領域１１２からデバッグカーネルを読み出して実行する（起動させる）。
【０１８７】
ステップＥ５において、詳細ログ収集部１０４は、図示しないキーボードやマウス等の入力装置を介して入力される、ユーザからの指示を待つ。
【０１８８】
ユーザから指示入力が行なわれると、ステップＥ６において、詳細ログ収集部１０４は、入力された指示内容を確認する。
【０１８９】
入力された指示が再起動を指示するものである場合には、詳細ログ収集部１０４は、ステップＥ７において、本コンピュータシステム１の再起動を実行して、処理を終了する。
【０１９０】
一方、入力された指示がメモリダンプの採取を指示するものである場合には、詳細ログ収集部１０４は、ステップＥ８において、本コンピュータシステム１のメモリ１１のメモリダンプを取得して、ステップＥ５に戻る。
【０１９１】
また、入力された指示が周辺レジスタのレジスタダンプの採取を指示するものである場合には、詳細ログ収集部１０４は、ステップＥ９において、本コンピュータシステム１の周辺レジスタ１５のレジスタダンプを取得して、ステップＥ５に戻る。
【０１９２】
図１３〜図１５は実施形態の一例としてのコンピュータシステム１における、移管元のログ出力処理制御部１０３と移管先のログ出力処理制御部１０３との処理を例示するシーケンス図である。図１４は図１３に後続する処理を示し、図１５は図１４に後続する処理を示す。
【０１９３】
なお、図１３においては、便宜上、ＣＰＵ＃１，＃２だけを例示している。また、ＣＰＵ＃１においては、ログ出力対象情報１１４にはＣＰＵ番号“１”が設定されており、代替ＣＰＵ情報１１５にはＣＰＵ番号は設定されていない。一方、ＣＰＵ＃２においては、ログ出力対象情報１１４にはＣＰＵ番号“２”が設定されており、代替ＣＰＵ情報１１５にはＣＰＵ番号は設定されていない。
また、ＣＰＵ＃２は低負荷状態であるものとする。
【０１９４】
このような状態において、ＣＰＵ＃１（第１のプロセッサ：移管元）が低負荷状態から高負荷状態に遷移すると、ＣＰＵ＃１のログ出力処理制御部１０３は、ＣＰＵ＃２（第２のプロセッサ：移管先）に対してログ出力対象番号“１”を通知する（図１３中の符号Ｆ１参照）。
【０１９５】
これにより、ＣＰＵ＃１（第１のプロセッサ：移管元）においては、ログ出力対象情報（第１のログ出力対象情報）１１４にはログ出力対象番号（ＣＰＵ番号）は未登録（なし）の状態となり、また、代替ＣＰＵ情報（移管先プロセッサ情報）１１５には、ログ出力対象番号の送信先であるＣＰＵ＃２のＣＰＵ番号“２”が設定される。
【０１９６】
一方、ＣＰＵ＃２（第２のプロセッサ：移管先）においては、ログ出力対象情報（第２のログ出力対象情報）１１４にはＣＰＵ番号“１”が追加されることで、“１，２”が設定される。なお、代替ＣＰＵ情報１１５にはＣＰＵ番号は未設定（なし）のままである。
【０１９７】
その後、図１４に示すように、ＣＰＵ＃２が低負荷状態から高負荷状態に遷移したものする。
【０１９８】
なお、図１４においては、便宜上、ＣＰＵ＃１〜＃３だけを例示している。また、ＣＰＵ＃３においては、ログ出力対象情報１１４にはＣＰＵ番号“３”が設定されており、代替ＣＰＵ情報１１５にはＣＰＵ番号は設定されていない。また、ＣＰＵ＃１においては、ログ出力対象情報１１４にはＣＰＵ番号が設定されておらず、代替ＣＰＵ情報１１５にはＣＰＵ番号“２”が設定されている。
また、ＣＰＵ＃３は低負荷状態であるものとする。
【０１９９】
このような状態において、ＣＰＵ＃２が低負荷状態から高負荷状態に遷移すると、ＣＰＵ＃２（第１のプロセッサ：移管元）のログ出力処理制御部１０３は、ＣＰＵ＃３（第２のプロセッサ：移管先）に対してログ出力対象番号“１，２”を通知する（図１４中の符号Ｆ２参照）。
【０２００】
これにより、ＣＰＵ＃２（第１のプロセッサ：移管元）においては、ログ出力対象情報（第１のログ出力対象情報）１１４にはログ出力対象番号（ＣＰＵ番号）は未登録（なし）の状態となり、また、代替ＣＰＵ情報（移管先プロセッサ情報）１１５には、ログ出力対象番号の送信先であるＣＰＵ＃３のＣＰＵ番号“３”が設定される。
【０２０１】
一方、ＣＰＵ＃３（第２のプロセッサ：移管先）においては、ログ出力対象情報（第２のログ出力対象情報）１１４にはＣＰＵ番号“１，２”が追加されることで、“１，２，３”が設定される。なお、代替ＣＰＵ情報１１５にはＣＰＵ番号は未設定（なし）のままである。
【０２０２】
また、ＣＰＵ＃２のログ出力対象情報１１４は、ＣＰＵ＃１に対して、代替ＣＰＵ番号を送信する（図１４中の符号Ｆ３参照）。
【０２０３】
これにより、ＣＰＵ＃１においては、ログ出力対象情報１１４にはログ出力対象番号（ＣＰＵ番号）は未登録（なし）の状態であり、また、代替ＣＰＵ情報１１５には、代替ＣＰＵ番号の送信元であるＣＰＵ＃２のＣＰＵ番号“２”が設定される。
【０２０４】
その後、図１５に示すように、ＣＰＵ＃２が高負荷状態から低負荷状態に遷移したものする。
なお、図１５においても、便宜上、ＣＰＵ＃１〜＃３だけを例示している。
【０２０５】
ＣＰＵ＃２が高負荷状態から低負荷状態に遷移すると、ＣＰＵ＃２（第１のプロセッサ：移管元）のログ出力処理制御部１０３は、ＣＰＵ＃３に対してログ出力対象番号の取り戻しを通知する（図１５中の符号Ｆ４参照）。
【０２０６】
これにより、ＣＰＵ＃３（第２のプロセッサ：移管先）においては、ログ出力対象情報（第２のログ出力対象情報）１１４のログ出力対象番号（ＣＰＵ番号）から、ログ出力対象番号の取り戻しの要求元のＣＰＵ１０のＣＰＵ番号“２”が削除され、ログ出力対象情報１１４にはＣＰＵ番号“１，３”が設定される。また、代替ＣＰＵ情報１１５は引き続き、ＣＰＵ番号は未設定（なし）のままである。
【０２０７】
一方、ＣＰＵ＃２においては、ＣＰＵ番号“２”が取り戻されることで、ログ出力対象情報（第１のログ出力対象情報）１１４にはＣＰＵ番号“２”が設定される。なお、代替ＣＰＵ情報１１５にはＣＰＵ番号は未設定（なし）のままである。
【０２０８】
（Ｃ）効果
このように、本発明の一実施形態としてのコンピュータシステム１によれば、ＳＭＰカーネルの動作環境化において、ＩＣＥやＨＷシミュレータ等を用いることなくログ情報を収集することができ、カーネルや仮想化ソフトの障害調査が可能となる。
【０２０９】
また、ログ情報を採取するための専用のプロセッサやハードウェアを備える必要がないので経済的であり、また、既存のコンピュータシステム１において容易に実施することができる。
【０２１０】
本コンピュータシステム１に異常が発生した場合に、その直前に動作していたＣＰＵ１０やカーネルの情報を記憶装置１２に退避させることができ、ＩＣＥやシミュレータ等がない環境においてもカーネルや仮想化ソフトの障害調査が可能となる。
【０２１１】
また、過去に動作していた情報を採取することにより、障害の直接の原因が過去に遡らないとわからない場合でも、障害調査が可能となる。
【０２１２】
自ＣＰＵ１０が低負荷状態から高負荷状態に遷移した場合に、ログ出力処理制御部１０３が、複数のＣＰＵ１０のうち、ＣＰＵ負荷が最も低いＣＰＵ１０にログ出力部１０２としての機能を移管させる。
【０２１３】
これにより、比較的ＣＰＵ負荷の高いログ出力処理を、低負荷状態の他のＣＰＵ１０に実行させることで、複数のＣＰＵ１０が実行中の他のプロセスに遅延等の影響を与えることがなく、本コンピュータシステム１を安定して動作させることができる。例えば、ログ収集部１０１としての機能に影響を与えることなくログ出力を実施することができる。
【０２１４】
また、ＳＭＰを構成する複数のＣＰＵ１０間において、負荷を分散させることができ、これによっても、本コンピュータシステム１を安定して動作させることができる。
【０２１５】
また、ログ出力を他ＣＰＵ１０に移管した状態で、自ＣＰＵ１０が低負荷状態に遷移した場合に、ログ出力処理制御部１０３が移管先のＣＰＵ１０からログ出力を取り戻す。これによっても、複数のＣＰＵ１０間において負荷を分散させることができる。
複数のＣＰＵ１０のうちいずれかのＣＰＵ１０において何らかの異常が発生した場合に、各ＣＰＵ１０で実行される詳細ログ収集部１０４のうち、最初にこの異常発生を検知した詳細ログ収集部１０４が、自ＣＰＵ１０と当該異常が発生しているＣＰＵ１０とを除いた、他のＣＰＵ１０を停止させる。これにより、リングバッファ構成を有するログバッファ１１１のログ情報が、これらのＣＰＵ１０の動作に伴って生成されるログ情報により上書き消去されてしまうことを阻止することができる。
【０２１６】
（Ｄ）その他
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【０２１７】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
【０２１８】
（Ｅ）付記
（付記１）
複数のプロセッサを備える情報処理装置であって、
前記複数のプロセッサのうちの第１のプロセッサが、
当該第１のプロセッサの動作履歴情報を収集してログ記憶部に格納するログ収集部と、
前記ログ記憶部に格納された前記動作履歴情報を、不揮発性の記憶装置に移動させるログ出力部と、
当該第１のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第２のプロセッサに、前記ログ出力部としての機能を移管させる移管処理部と
しての機能を実行することを特徴とする、情報処理装置。
【０２１９】
（付記２）
前記移管処理部は、前記第１プロセッサが高負荷状態から低負荷状態に遷移した場合に、前記ログ出力部としての機能を移管した前記第２のプロセッサに対して、前記ログ出力部としての機能の移管を解除する通知を送信する
ことを特徴とする、付記１記載の情報処理装置。
【０２２０】
（付記３）
前記第１のプロセッサが、
前記第１のプロセッサによって実行される前記ログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第１のログ出力対象情報と、
前記第１のプロセッサによって実行されるログ出力部としての機能の移管先の前記第２のプロセッサを示す移管先プロセッサ情報とを備え、
前記移管処理部が、
前記第２のプロセッサに前記ログ出力部としての機能を移管させる際に、前記第１のログ出力対象情報から前記第１のプロセッサの登録を削除するとともに、前記移管先プロセッサ情報に前記第２のプロセッサを追加する
ことを特徴とする、付記２記載の情報処理装置。
【０２２１】
（付記４）
前記移管処理部が、
前記第２のプロセッサに前記ログ出力部としての機能の移管を解除する通知を送信する際に、前記第１のログ出力対象情報に前記第１のプロセッサを追加するとともに、前記移管先プロセッサ情報から前記第２のプロセッサの登録を削除する
ことを特徴とする、付記３記載の情報処理装置。
【０２２２】
（付記５）
前記第２のプロセッサが、
前記第２のプロセッサによって実行されるログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第２のログ出力対象情報を備え、
前記第１のプロセッサから前記ログ出力部としての機能を移管させる通知を受信すると、前記第２のログ出力対象情報に前記第１のプロセッサを追加する
ことを特徴とする、付記２〜４のいずれか１項に記載の情報処理装置。
【０２２３】
（付記６）
前記第２のプロセッサが、
前記第１のプロセッサから前記ログ出力部としての機能の移管を解除する通知を受信すると、前記第２のログ出力対象情報から前記第１のプロセッサの登録を削除する
ことを特徴とする、付記５記載の情報処理装置。
【０２２４】
（付記７）
前記複数のプロセッサのうち第３のプロセッサに異常が検出された場合に、前記複数のプロセッサのうち前記第１プロセッサおよび第３のプロセッサ以外のプロセッサの動作を停止させる停止処理部
を備えることを特徴とする、付記１〜６のいずれか１項に記載の情報処理装置。
【０２２５】
（付記８）
複数のプロセッサを備える情報処理装置において、
前記複数のプロセッサのうちの第１のプロセッサに、
当該第１のプロセッサの動作履歴情報を収集してログ記憶部に格納する処理と、
前記ログ記憶部に格納された前記動作履歴情報を不揮発性の記憶装置に移動させる処理と、
当該第１のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第２のプロセッサに、前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる処理と
を実行させる制御プログラム。
【０２２６】
（付記９）
前記第１プロセッサが高負荷状態から低負荷状態に遷移した場合に、前記動作履歴情報を不揮発性の記憶装置に移動させる機能を移管した前記第２のプロセッサに対して、前記移管を解除する通知を送信する
処理を前記第１のプロセッサに実行させることを特徴とする、付記８記載の制御プログラム。
【０２２７】
（付記１０）
前記第１のプロセッサが、前記第１のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理が移動させる前記動作履歴情報に対応するプロセッサを示す第１のログ出力対象情報と、前記第１のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理の移管先の前記第２のプロセッサを示す移管先プロセッサ情報とを備え、
前記第２のプロセッサに前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる際に、前記第１のログ出力対象情報から前記第１のプロセッサの登録を削除するとともに、前記移管先プロセッサ情報に前記第２のプロセッサを追加する
処理を前記第１のプロセッサに実行させることを特徴とする、付記９記載の制御プログラム。
【０２２８】
（付記１１）
前記第２のプロセッサに前記移管を解除する通知を送信する際に、前記第１のログ出力対象情報に前記第１のプロセッサを追加するとともに、前記移管先プロセッサ情報から前記第２のプロセッサの登録を削除する
処理を前記第１のプロセッサに実行させることを特徴とする、付記１０記載の制御プログラム。
【０２２９】
（付記１２）
前記第２のプロセッサが、前記第２のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第２のログ出力対象情報を備え、
前記第１のプロセッサから前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる通知を受信すると、前記第２のログ出力対象情報に前記第１のプロセッサを追加する
処理を前記第２のプロセッサに実行させることを特徴とする、付記９〜１１のいずれか１項に記載の制御プログラム。
【０２３０】
（付記１３）
前記第１のプロセッサから前記移管を解除する通知を受信すると、前記第２のログ出力対象情報から前記第１のプロセッサの登録を削除する
処理を前記第２のプロセッサに実行させることを特徴とする、付記１２記載の制御プログラム。
【０２３１】
（付記１４）
前記複数のプロセッサのうち第３のプロセッサに異常が検出された場合に、前記複数のプロセッサのうち前記第１プロセッサおよび第３のプロセッサ以外のプロセッサの動作を停止させる処理
を前記第１のプロセッサに実行させることを特徴とする、付記８〜１３のいずれか１項に記載の制御プログラム。
【符号の説明】
【０２３２】
１    コンピュータシステム
１０−１〜１０−４，１０    ＣＰＵ
１０１    ログ収集部
１０１１    割込みコントローラ
１０１２    割込みハンドラ
１０２    ログ出力部
１０３    ログ出力処理制御部
１０４    詳細ログ収集部
１０５    ＣＰＵ負荷収集部
１１    メモリ
１１１    ログバッファ
１１２    デバッグカーネル動作用領域
１１３    ＣＰＵ負荷情報格納領域
１１４    ログ出力対象情報
１１５    代替ＣＰＵ情報
１２    記憶装置
１２１    ログ用ディスク領域
【図１】
0006617618.tif 000002
【図２】
0006617618.tif 000003
【図３】
0006617618.tif 000004
【図４】
0006617618.tif 000005
【図５】
0006617618.tif 000006
【図６】
0006617618.tif 000007
【図７】
0006617618.tif 000008
【図８】
0006617618.tif 000009
【図９】
0006617618.tif 000010
【図１０】
0006617618.tif 000011
【図１１】
0006617618.tif 000012
【図１２】
0006617618.tif 000013
【図１３】
0006617618.tif 000014
【図１４】
0006617618.tif 000015
【図１５】
0006617618.tif 000016
【図１６】
0006617618.tif 000017