以下、図面を参照して本情報処理装置および制御プログラムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
(A)構成
図1は実施形態の一例としてのコンピュータシステムのハードウェア構成を示す図、図2はその機能構成を示す図である。
本コンピュータシステム1は、図1に示すように、複数(図1に示す例では4つ)のCPU(第1のプロセッサ,第2のプロセッサ,第3のプロセッサ)10−1〜10−4,メモリ11および記憶装置12を備える。
なお、図1に例示するコンピュータシステム1においては、便宜上、マウスやキーボード等の入力装置や、表示装置の図示を省略している。また、コンピュータシステム1には、これら以外の機器をそなえてもよい。また、図1に示す例においては、コンピュータシステム1が4つのCPU10−1〜10−4を備えているが、これに限定されるものではなく、3つ以下、または5つ以上のCPU10を備えてもよい。
メモリ11はROM(Read Only Memory)及びRAM(Random Access Memory)を含む記憶メモリである。メモリ11のROMには、ソフトウェアプログラム(制御プログラム)やこのプログラム用のデータ類が書き込まれている。メモリ11上のソフトウェアプログラムは、CPU10−1〜10−4に適宜読み込まれて実行される。又、メモリ11のRAMは、一次記憶メモリあるいはワーキングメモリとして利用される。
メモリ11のRAMの記憶領域は、図2、図3、図5等に示すように、ログバッファ111−1〜111−4,デバッグカーネル動作用領域112およびCPU負荷情報格納領域113として用いられる。
ログバッファ111−1〜111−4には、各CPU10−1〜10−4のそれぞれから採取されたログ情報(動作履歴情報;ログ情報,CPU情報,カーネル情報)が格納される。具体的には、ログバッファ111−1には、CPU10−1から収集されたログ情報が格納される。同様に、ログバッファ111−2〜111−4には、CPU10−2〜10−4から収集されたログ情報がそれぞれ格納される。
このように、ログバッファ111−1〜111−4は、CPU10に関するログ情報を格納するログ記憶部として機能する。
以下、ログバッファを示す符号としては、複数のログバッファのうち1つを特定する必要があるときには符号111−1〜111−4を用いるが、任意のログバッファを指すときには符号111を用いる。
RAMは揮発性メモリであり、本コンピュータシステム1の電源断時にはログバッファ111に格納されたログ情報は失われる。
デバッグカーネル動作用領域112には、デバッグカーネルプログラムが格納されており、CPU10−1〜10−4が、このデバッグカーネル動作用領域112からデバッグカーネルプログラムを読み出して実行することで、デバッグカーネルとしての機能が実行される。なお、このデバッグカーネルとしての機能の詳細については後述する。
記憶装置12は、ハードディスクドライブ(Hard disk drive:HDD)、SSD(Solid State Drive)、ストレージクラスメモリ(Storage Class Memory:SCM)等の記憶装置であって、種々のデータを格納するものである。記憶装置12は不揮発性を有しており、本コンピュータシステム1の電源断時においても、記憶装置12に保存されたログ情報は失われることはない。
また、記憶装置12の記憶領域の一部として設けられたログ用ディスク領域121には、後述するログ出力部102−1〜102−4によって、ログバッファ111−1〜111−4から読み出されたログ情報が格納される。
CPU10−1〜10−4は、種々の制御や演算を行なう処理装置であり、メモリ11に格納されたOS(Operating System)やプログラムを実行することにより、種々の機能を実現する。これらのCPU10−1〜10−4は互いに同様の構成を有する。
本コンピュータシステム1は、複数のCPU10−1〜10−4を備えるマルチプロセッシングシステムであり、これらの複数のCPU10−1〜10−4を用いてSMPを実現する。
以下、CPUを示す符号としては、複数のCPUのうち1つを特定する必要があるときには符号10−1〜10−4を用いるが、任意のCPUを指すときには符号10を用いる。
また、以下、CPU10−1をCPU#0という場合がある。同様に、CPU10−2,10−3,10−4を、それぞれCPU#1,#2,#3という場合がある。
そして、CPU10が、制御プログラムを実行することにより、図2に示すように、ログ収集部101−1〜101−4,ログ出力部102−1〜102−4,ログ出力処理制御部103−1〜103−4,詳細ログ収集部104−1〜104−4およびCPU負荷収集部105−1〜105−4として機能する。
ここで、図中、“−1”,“−2”,“−3”,“−4”の文字を有する各符号は、同じ文字を有する各符号どうしの間に、それぞれ対応関係があることを示しており、具体的には、符号“−1”が付された各機能はCPU10−1によって実現される機能であることを示す。同様に、符号“−2”,“−3”,“−4”が付された各機能は、それぞれCPU10−2,CPU10−3,CPU10−4によって実現される機能であることを示す。
すなわち、ログ収集部101−1,ログ出力部102−1,ログ出力処理制御部103−1,詳細ログ収集部104−1およびCPU負荷収集部105−1としての各機能は、それぞれCPU10−1が制御プログラムを実行することにより実現される。
同様に、ログ収集部101−2〜101−4,ログ出力部102−2〜102−4,ログ出力処理制御部103−2〜103−4,詳細ログ収集部104−2〜104−4およびCPU負荷収集部105−2〜105−4としての各機能は、CPU10−2〜10−4が制御プログラムをそれぞれ実行することにより実現される。
以下、ログ収集部を示す符号としては、複数のログ収集部のうち1つを特定する必要があるときには符号101−1〜101−4を用いるが、任意のログ収集部を指すときには符号101を用いる。
また、以下、ログ出力部を示す符号としては、複数のログ出力部のうち1つを特定する必要があるときには符号102−1〜102−4を用いるが、任意のログ出力部を指すときには符号102を用いる。
さらに、以下、ログ出力処理制御部を示す符号としては、複数のログ出力処理制御部のうち1つを特定する必要があるときには符号103−1〜103−4を用いるが、任意のログ出力処理制御部を指すときには符号103を用いる。
また、以下、詳細ログ収集部を示す符号としては、複数の詳細ログ収集部のうち1つを特定する必要があるときには符号104−1〜104−4を用いるが、任意の詳細ログ収集部を指すときには符号104を用いる。
さらに、以下、CPU負荷収集部を示す符号としては、複数のCPU負荷収集部のうち1つを特定する必要があるときには符号105−1〜105−4を用いるが、任意のCPU負荷収集部を指すときには符号105を用いる。
なお、これらのログ収集部101,ログ出力部102,ログ出力処理制御部103,詳細ログ収集部104およびCPU負荷収集部105としての機能を実現するためのプログラム(制御プログラム)は、例えばフレキシブルディスク,CD(CD−ROM,CD−R,CD−RW等),DVD(DVD−ROM,DVD−RAM,DVD−R,DVD+R,DVD−RW,DVD+RW,HD DVD等),ブルーレイディスク,磁気ディスク,光ディスク,光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供される。そして、コンピュータはその記録媒体からプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
ログ収集部101,ログ出力部102,ログ出力処理制御部103,詳細ログ収集部104およびCPU負荷収集部105としての機能を実現する際には、内部記憶装置(本実施形態ではメモリ11のRAMやROM)に格納されたプログラムがコンピュータのマイクロプロセッサ(本実施形態ではCPU10)によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
CPU負荷収集部105は、自身が実行されているCPU10(以下、自CPU10という)の負荷を表す情報を収集する。なお、CPU10の負荷は、例えばCPU使用率を用いて表すことができる。CPU10の負荷状態は既知の種々の手法で収集することができ、その説明は省略する。また、以下、自CPU10以外の他のCPU10を他CPU10という場合がある。
また、CPU負荷収集部105は、収集した自CPU10の負荷状態を示す情報(CPU負荷情報)を、そのCPU10を特定するための情報(例えば、CPU番号:詳細は後述)と関連付けて、メモリ11のCPU負荷情報格納領域113に格納する。
なお、メモリ11においてはCPU10毎にCPU負荷情報格納領域113を設け、CPU負荷収集部105は、収集したCPU負荷情報を、自CPU10に対応して設けられたCPU負荷情報格納領域113に格納してもよい。
ログ収集部101は、自CPU10についてのログ情報を収集する。ログ情報は、CPU10の実行履歴(動作履歴)を表す情報(動作履歴情報)であって、例えば、CPU10のレジスタ(図示省略)に格納された情報(CPUレジスタ情報)や、カーネルのスケジューラ情報である。なお、ログ収集部101が収集するログ情報は、これらに限定されるものではなく、適宜変形して実施することができる。
ログ収集部101は、CPU10から収集したログ情報を、ログバッファ111に格納する。以下、CPU10から収集したログ情報を、ログバッファ111に格納することをログ収集という場合がある。
図3は実施形態の一例としてのコンピュータシステム1におけるログ収集部101の処理を説明するための図、図4はログバッファ111を説明するための図である。
前述の如く、ログバッファ111は、CPU10毎に備えられている。以下、ログバッファ111−1をCPU10#0用ログバッファ111−1という場合がある。同様に、ログバッファ111−2,111−3,111−4を、それぞれCPU#1用ログバッファ111−2,CPU#2用ログバッファ111−3,CPU#3用ログバッファ111−4という場合がある。
また、ログバッファ111−1〜111−4は、それぞれリングバッファ構造を有し、複数個(本実施形態においては例えば1000個)分のログを保存する領域を持つ。
図4においては、CPU#0用ログバッファ111−1を例示しており、0〜999までの1000個の格納領域に、それぞれログ収集部101−1によって収集されたログ情報(CPU情報およびカーネル情報)が順次格納される。
なお、ログバッファ111において、ログ収集部101によってログ情報が格納される格納領域の位置(先頭位置)は、ログ格納ポインタによって特定される。また、ログバッファ111において、後述するログ出力部102によってログ情報が読み出される格納領域の位置(先頭位置)は、ログ出力ポインタによって特定される。
ログ収集部101は、所定の第1の間隔(例えば、1ms毎)でログ収集を行なう。具体的には、ログ収集部101は、例えば、割込みコントローラ1011を用いて、定期的(例えば、1ms毎)にCPU10に対して割込みを発生させる(図3中の矢印P1参照)。
CPU10は、割込みコントローラ1011から割込みが入力されると、ログ収集用の割込みハンドラ1012を実行する(図3中の矢印P2参照)。
このログ収集用の割込みハンドラ1012は、カーネル起動時に登録される。割込みハンドラ1012は、CPU10にログ収集部101としての機能を実行させる(図3中の矢印P3参照)。すなわち、ログ収集部101は、CPU情報およびカーネル情報の採取を行ない、CPU10に割り当てられたログバッファ111へ出力させる。
また、ログ収集部101は、所定のタイミングで後述するログ出力処理制御部103に対して通知を行ない、ログ出力部102によるログ出力(詳細は後述)を行なわせる(図3中の矢印P4参照)。
例えば、ログ収集部101は、ログ収集を100回行なったタイミングで、ログ出力処理制御部103にログ出力を行なわせるための通知を発行する。
また、ログ収集部101は、ログ収集を行なった後に、自身が実行されているCPU10に詳細ログ収集部104としての機能を実行させる。
詳細ログ収集部104は、本コンピュータシステム1に備えられた複数のCPU10のいずれかにおいて障害が発生した場合に機能する。
図5は実施形態の一例としてのコンピュータシステム1における詳細ログ収集部104の処理を説明するための図である。
詳細ログ収集部104としての機能は、上述したログ収集部101によって実行を開始される(図5中の符号(1)参照)。
各詳細ログ収集部104は、自身が実行されているCPU10以外の他のCPU10のそれぞれのCPUステータスを監視する(図5中の符号(2)参照)。
そして、いずれかのCPU(第3のプロセッサ)10において何らかの異常が発生した場合に、各CPU10で実行される詳細ログ収集部104のうち、最初にこの異常発生を検知した詳細ログ収集部104が、自身が実行されているCPU10(自CPU10)と当該異常が発生しているCPU(第3のプロセッサ)10とを除いた、他のCPU10を停止させる。
すなわち、詳細ログ収集部104は、複数のCPU10のうち一のCPU(第3のプロセッサ)10に異常が検出された場合に、これらの複数のCPU10のうち自CPU(第1プロセッサ)10および異常が検出されたCPU10以外のCPU10の動作を停止させる停止処理部として機能する。
異常が発生しているCPU10を除いた他のCPU10を停止させることで、リングバッファ構成を有するログバッファ111のログ情報が、これらのCPU10の動作に伴って生成されるログ情報により上書き消去されてしまうことを阻止することができる。
また、詳細ログ収集部104が、自CPU10を停止対象から除外することで、自CPU10において、詳細ログ収集部104としての機能やデバッグカーネルを実行することができる。
以下に、図5に示す例において、CPU#1において異常が発生したことをCPU#3の詳細ログ収集部104−4が最初に検知した例について示す。
詳細ログ収集部104−4は、正常に動作中のCPU#0,#2を停止させるとともに(図5の符号(3)参照)、デバッグカーネル動作用領域112からデバッグカーネルプログラムを読み出して、自CPU10−4に実行(起動)させる(図5中の符号(4)参照)。
ユーザは、実行されたデバッグカーネルの機能を用いて、種々の入力操作等を行ない、異常が検出されたCPU#3についての、メモリダンプや周辺デバイスのレジスタダンプ等を収集し、また、本コンピュータシステム1の再起動を行なう。
ログ出力部102は、ログバッファ111に格納されたログ情報を読み出してログ用ディスク領域121に格納(出力)する。以下、ログバッファ111に格納されたログ情報を読み出してログ用ディスク領域121に格納(出力)することをログ出力という場合がある。
前述の如く、RAMは揮発性メモリであるので、本コンピュータシステム1の電源断時にはログバッファ111に格納されたログ情報は失われる。これに対して、記憶装置12は不揮発性を有しており、本コンピュータシステム1の電源断時においても、記憶装置12に保存されたログ情報は失われることはない。
本コンピュータシステム1においては、ログ出力部102が、ログバッファ111に格納されたログ情報を、記憶装置12のログ用ディスク領域121に移動(出力)されることで、ログ情報が保護される。
ログ出力部102は、後述するログ出力処理制御部103からの指示(制御)に従って、ログ出力を行なう。
例えば、ログ出力部102は、ログ出力処理制御部103からの指示に従って、自CPU10に対応するログバッファ111に格納されたログ情報を記憶装置12のログ用ディスク領域121に格納(出力)する。
また、ログ出力部102は、ログ出力処理制御部103から、CPU10を特定する識別情報(以下、対象CPU番号という)を受け取り、この対象CPU番号によって特定されるCPU10に対応するログバッファ111からログ情報を読み出してログ用ディスク領域121に出力する。
この際、ログ出力部102は、ログバッファ111において、ログ出力ポインタによって特定される位置から、ログ格納ポインタによって特定される位置までの範囲の情報(ログ情報)をログ用ディスク領域121に出力する。また、ログ出力部102は、ログバッファ111のログ出力ポインタの値をログ格納ポインタの値を用いて上書きすることで更新する。
なお、ログ出力部102は、ログ出力処理制御部103の指示に従って、前述した第1の間隔(例えば、1ms毎)よりも長い第2の間隔(例えば、10ms毎)で、ログ出力を行なう。
例えば、ログ出力部102は、ログ出力処理制御部103の指示に従って、ログ収集部101がログ情報の収集を100回実行する毎に、ログ出力を行なう。
図6は実施形態の一例としてのコンピュータシステム1におけるログ出力を説明するための図である。
ログ収集部101が、例えばログ収集を100回行なったタイミングでログ出力処理制御部103に対して通知を行なうと(図6中の矢印P5参照)、ログ出力処理制御部103はログ出力部102にログ出力を実行させる(図6中の矢印P6参照)。
ログ出力部102は、ログ出力処理制御部103の指示に従ってログ出力を行なう。すなわち、ログ出力部102は、ログバッファ111に格納されたログ情報を記憶装置12のログ用ディスク領域121に出力する(図6中の矢印P7参照)。
そして、本コンピュータシステム1においては、ログ出力部102は、ログ出力処理制御部103からの指示に従い、自CPU10のログ情報の他に、他のCPU10のログ情報の出力を行なうこともある。
ログ出力処理制御部103は、ログ出力部102によるログ出力を制御する。
ログ出力処理制御部103は、自CPU10が低負荷状態から高負荷状態に変化した場合に、自CPU10におけるログ情報の出力を、低負荷状態の他のCPU10のログ出力部102に実行させる。
すなわち、ログ出力処理制御部103は、自CPU10が低負荷状態から高負荷状態に遷移した場合に、本コンピュータシステム11に備えられた複数のCPU10−1〜10−4のうち最も低負荷の他のCPU10に、ログ出力部102としての機能を移管させる移管処理部として機能する。
以下、自CPU10におけるログ情報の出力を他のCPU10のログ出力部102に実行させることをログ出力を移管するという。これに対して、他のCPU10のログ情報を出力することを、ログ出力を代替実行するという。
そして、他CPU10にログ出力を移管する側を移管元という場合があり、他CPU10からログ情報を移管された側を移管先という場合がある。
また、ログ出力処理制御部103は、他CPU10にログ出力を移管している状態において、自CPU10の負荷状態が高負荷から低負荷に変化した場合に、他CPU10に移管していたログ情報の出力を自CPU10のログ出力部102に実行させるよう切り替える。以下、他CPU10に移管していたログ出力を、自CPU10において実行するように切り替えることを、移管を解除する、もしくはログ出力を取り戻すという場合がある。
ログ出力処理制御部103は、複数CPU10間における、ログ出力の移管や移管の解除を制御するために、ログ出力対象情報114および代替CPU情報115を管理する。
ログ出力対象情報114は、自CPU10のログ出力部102がログ出力を行なう対象であるCPU10を特定する情報である。
本実施形態においては、このログ出力対象情報114として、CPU10を特定するCPU番号を用いる例を示す。以下、CPU番号0,1,2,3が、CPU#0,#1,#2,#3をそれぞれ示すものとする。
そして、あるCPU10において、他CPU10のログ出力を代替実行する場合には、このログ出力対象情報114に、移管元のCPU10のCPU番号が登録される。
ログ出力部102は、このログ出力対象情報114に登録されているCPU番号のCPU10についてログ出力を行なう。
以下、ログ出力対象情報114に登録されているCPU番号をログ出力対象番号という場合がある。
代替CPU情報115は、自CPU10についてのログ出力の移管先のCPU10を特定するための情報である。本実施形態においては、この代替CPU情報115としてもCPU番号を用いる。すなわち、代替CPU情報115は、自CPU10についてのログ出力の移管先のプロセッサ(10)を示す移管先プロセッサ情報に相当する。
この代替CPU情報115に登録されているCPU番号のCPU10が、自CPU10のログ情報の出力(ログ出力)を行なう。
以下、代替CPU情報115に登録されているCPU番号を、代替CPU番号という場合がある。
ログ出力処理制御部103は、他CPU10にログ出力を移管する移管元としての処理と、他CPU10からログ情報を移管された移管先としての処理とを備える。
(1)移管元としてのログ出力処理制御部103の処理
移管元のCPU10において、ログ出力処理制御部103は、CPU負荷収集部105が前回採取した自CPU10のCPU負荷情報をCPU負荷情報格納領域113から取得する。また、ログ出力処理制御部103は、CPU負荷収集部105に現在のCPU負荷情報を収集させる。
ログ出力処理制御部103は、このようにして取得したCPU負荷情報の変化に応じて、処理を切り換える。例えば、以下の(i)〜(iv)の各場合について、ログ出力処理制御部103の処理について示す。
(i)現在のCPU負荷が低負荷、且つ、前回のCPU負荷が低負荷の場合
ログ出力処理制御部103は、ログ出力部102に、ログ出力対象情報114として保存されたCPU番号が示すCPU10に対応するログバッファ111に格納されたログ情報をログ用ディスク領域121に格納させる。
(ii)現在のCPU負荷が高負荷、且つ、前回のCPU負荷が低負荷の場合
ログ出力処理制御部103は、CPU負荷情報格納領域113を参照して他CPU10のCPU負荷をそれぞれ取得し、負荷が最も低い(最低負荷)のCPU10を特定する。そして、この最低負荷のCPU10のCPU番号を代替CPU情報115に保存する。すなわち、負荷が最も低いCPU10をログ出力の移管先として決定する。
また、ログ出力処理制御部103は、代替CPU情報115として保存されたCPU番号が示すCPU10のログ出力処理制御部103に対して、ログ出力を移管することを示す通知(移管通知)を送信する。
ログ出力処理制御部103は、移管通知として、例えば、ログ出力対象情報114として保存されたCPU番号(ログ出力対象番号)を通知(送信)する。なお、移管通知は、これに限定されるものではなく、例えば、移管通知を示す何らかの信号を送信することで行なってもよい。ログ出力処理制御部103は、このような移管通知を示す信号とともに、ログ出力対象番号を送信することが望ましい。
これにより、移管元のCPU10は、最低負荷の他CPU10に対して、自身のログ出力対象情報114に登録されたCPU番号(ログ出力対象番号)のCPU10のログ出力を移管する。
また、ログ出力処理制御部103は、移管先の他CPU10に通知したログ出力対象番号(CPU番号)に、自CPU10および移管先CPU10とは別の他CPU10のCPU番号が含まれている場合には、この他CPU10のログ出力処理制御部103に対して、代替CPU情報115に登録されているCPU番号を通知する。
これにより、自CPU10が移管先CPU10として機能していた場合に、その移管元の他CPU10のログ出力処理制御部103に対して、その移管元CPU10のログ出力が更に移管されたことを通知する。
(iii)現在のCPU負荷が低負荷、且つ、前回のCPU負荷が高負荷の場合
ログ出力処理制御部103は、代替CPU情報115として保存されたCPU番号が示すCPU10(移管先CPU10)に対して、移管していたログ出力の取り戻しを行なう旨のメッセージを通知する。このログ出力の取り戻しを行なう旨のメッセージは、移管先のCPU10に対して、ログ出力の移管を解除することを通知する。以下、ログ出力の取り戻しを行なう旨のメッセージの通知を移管解除通知という場合がある。また、ログ出力を取り戻すことを、ログ出力対象番号を取り戻すと表現する場合がある。
他CPU10に対してログ出力の移管解除通知を送信したログ出力処理制御部103は、代替CPU情報115として保存されているCPU番号を削除するとともに、ログ出力対象情報114に自CPU10のCPU番号を設定する。
これにより、ログ出力処理制御部103は他CPU10に移管していたログ出力が自CPU10に戻される。すなわち、ログ出力の移管が解除される。
そして、ログ出力処理制御部103は、自CPU10のログ出力部102に対して、ログ出力対象情報114に登録された自CPU10のログ出力を実行させる。
(iv)現在のCPU負荷が高負荷、且つ、前回のCPU負荷が高負荷の場合
何も処理せず、処理を終了する。
(2)移管先としてのログ出力処理制御部103の処理
移管先のCPU10において、ログ出力の移管解除通知を受信した場合、すなわち、ログ出力を取り戻す旨のメッセージ(取り戻し要求)を受信した場合には、ログ出力処理制御部103は、ログ出力対象情報(第2のログ出力対象情報)114から取り戻し要求の送信元のCPU10のCPU番号を削除する。これにより、当該CPU10のログ出力部102によるログ出力対象から、取り戻し要求の送信元のCPU10のログ情報が除外される。すなわち、当該CPU10に対するログ出力の移管が解消される。
また、移管先のCPU10において、他のCPU10のログ出力処理制御部103からログ出力対象番号を通知するメッセージを受信した場合には、受け取ったCPU番号(ログ出力対象番号)を、自CPU10のログ出力対象情報114へ追加保存する。
また、移管先のCPU10において、代替CPU番号を通知するメッセージを受信した場合には、受け取ったCPU番号を代替CPU情報115に保存する。
(B)動作
先ず、上述の如く構成された実施形態の一例としてのコンピュータシステム1におけるログ出力の概要を、図7を用いて説明する。
各CPU10において、ログ収集部101が、それぞれ自CPU10のログ情報を収集して、ログバッファ111における対応する領域に格納する(図7中の符号(1)参照)。
各CPU10において、ログ出力処理制御部103は、自CPU10の負荷情報をCPU負荷情報格納領域113から採取する。ログ出力処理制御部103は自CPU10の負荷状態に基づき、ログ出力を自CPU10のログ出力部102により行なうかを判断する(図7中の符号(2)参照)。
自CPU10のCPU負荷が高負荷であって、且つ、前回測定したCPU負荷が低負荷である場合に、ログ出力処理制御部103は、負荷が最も低い他CPU10にログ出力を移管する(図7中の符号(3)参照)。
なお、例えば、CPU負荷の値が所定の閾値以上である場合に、自CPU10のCPU負荷が高負荷であると判断することができる。また、CPU負荷の値が所定の閾値未満である場合に、自CPU10のCPU負荷が低負荷であると判断することができる。
その後、ログ出力部102によるログ出力が行なわれる。すなわち、ログバッファ111のログ情報が、記憶装置12のログ用ディスク領域121に複写(退避)される(図7中の符号(4)参照)。
なお、上記ログ出力は、ログ出力が他CPU10に移管された場合には、その他CPU10のログ出力部102によって行なわれる。また、ログ出力が他CPU10に移管されない場合には、自CPU10のログ出力部102によって行なわれる。
次に、実施形態の一例としてのコンピュータシステム1におけるログ収集部101による処理を、図8に示すフローチャート(ステップA1〜A10)に従って説明する。
本処理は、例えば、割込みコントローラ1011からCPU10に対して割込みが入力されると、CPU10がログ収集用の割込みハンドラ1012を実行することで開始される。
ステップA1において、ログ収集部101は、ログ情報として、CPU10からCPU情報(例えば、CPUレジスタ情報)を取得する。
ステップA2において、ログ収集部101は、ログ情報として、CPU10からカーネル情報(例えばスケジューラ情報)を取得する。
なお、これらのステップA1,A2の実行順序はこれに限定されるものではなく、ステップA2の処理をステップA1より先に行なってもよく、また、これらの処理を同時に行なってもよい。
ステップA3において、ログ収集部101は、ステップA1,A2において取得した情報(ログ情報)を、ログバッファ111におけるログ格納ポインタによって示される領域に格納する。
ステップA4において、ログ収集部101は、ログバッファ111におけるログ格納ポインタを、ログ情報の格納後の状態に合わせて更新する。
ステップA5において、ログ収集部101は、ログ出力実行カウンタの値をインクリメントする。ログ出力実行カウンタは、ログ収集部101により行なわれたログ収集の実行回数を計数するためのカウンタである。このログ出力実行カウンタは、例えば、メモリ11のRAM等に格納される。
ステップA6において、ログ収集部101は、ログ出力実行カウンタのカウンタ値が100以上であるかを確認する。
ログ出力実行カウンタのカウンタ値が100以上である場合には(ステップA6のYesルート参照)、ステップA7に移行する。ステップA7において、ログ収集部101はログ出力処理制御部103の移管元としての機能を実行させる。なお、このログ出力処理制御部103の移管元としての機能の詳細は、図9を用いて後述する。
ステップA8において、ログ収集部101は、ログ出力実行カウンタを0クリアする。その後、ステップA9において、ログ収集部101は、割込みコントローラ1011による割込みステータスをクリアする。
また、ステップA6における確認の結果、ログ出力実行カウンタのカウンタ値が100未満である場合にも(ステップA6のNoルート参照)、ステップA9に移行する。
その後、ステップA10において、ログ収集部101は、詳細ログ収集部104による処理を実行させ、処理を終了する。なお、詳細ログ収集部104による処理の詳細は、図12を用いて後述する。
次に、実施形態の一例としてのコンピュータシステム1におけるログ出力処理制御部103の移管元としての処理を、図9に示すフローチャート(ステップB1〜B15)に従って説明する。
ステップB1において、ログ出力処理制御部103は、CPU負荷情報格納領域113から前回の自CPU10のCPU負荷情報を取得する。
ステップB2において、ログ出力処理制御部103は、CPU負荷収集部105を介して最新のCPU負荷情報を取得する。
ステップB3において、ログ出力処理制御部103は、ステップB2において収集したCPU負荷情報をCPU負荷情報格納領域113に保存する。
ステップB4において、ログ出力処理制御部103は、ステップB2において収集したCPU負荷情報に基づき自CPU10が高負荷状態であるかを確認する。
確認の結果、自CPU10が高負荷状態である場合には(ステップB4のYesルート参照)、ステップB5に移行する。
ステップB5において、ログ出力処理制御部103は、ステップB1において取得した、自CPU10の前回のCPU負荷情報に基づき、前回のCPU負荷が高負荷状態であったかを確認する。
確認の結果、前回のCPU負荷も高負荷状態であった場合には(ステップB5のYesルート参照)、現在のCPU負荷が高負荷、且つ、前回のCPU負荷が高負荷の場合の処理が行なわれる。すなわち、ログ出力処理制御部103はそのまま処理を終了する。
また、前回のCPU負荷は高負荷状態でなかった場合には(ステップB5のNoルート参照)、ステップB6に移行する。ステップB6〜B10においては、現在のCPU負荷が高負荷、且つ、前回のCPU負荷が低負荷の場合の処理が行なわれる。
ステップB6において、ログ出力処理制御部103は、CPU負荷情報格納領域113から、本コンピュータシステム1に備えられた他のCPU10のCPU負荷をそれぞれ取得する。
ステップB7において、ログ出力処理制御部103は、これらの複数の他のCPU10のうち、負荷が最も低い(最低負荷)のCPU10を特定する。そして、この最低負荷のCPU10のCPU番号を代替CPU情報115に保存する。すなわち、負荷が最も低いCPU10をログ出力の移管先として決定する。
ステップB8において、ログ出力処理制御部103は、代替CPU情報115として保存されたCPU番号が示すCPU10のログ出力処理制御部103に対して、ログ出力対象情報114として保存されたCPU番号(ログ出力対象番号)を通知するメッセージを送信する。
これにより、最低負荷の他CPU10に対して、自身のログ出力対象情報114に登録されたCPU番号(ログ出力対象番号)のCPU10のログ出力を移管する。
ステップB9において、ログ出力処理制御部103は、他CPU10に通知したCPU番号に他CPU10のCPU番号が含まれているかを確認する。
確認の結果、他CPU10に通知したCPU番号に他CPU10のCPU番号が含まれている場合には(ステップB9のYesルート参照)、ステップB10に移行する。
ステップB10においては、ログ出力処理制御部103は、この他CPU10のログ出力処理制御部103に対して、代替CPU情報115に登録されているCPU番号を通知するメッセージを送信する。
これにより、自身にログ出力を移管していた移管元の他CPU10のログ出力処理制御部103に、そのCPU10のログ出力が移管されたことを通知する。その後、処理を終了する。
また、ステップB9における確認の結果、他CPU10に通知したCPU番号に他CPU10のCPU番号が含まれていない場合も(ステップB9のNoルート参照)、処理を終了する。
ステップB4における確認の結果、自CPU10が高負荷状態でない場合には(ステップB4のNoルート参照)、ステップB11において、ログ出力処理制御部103は、ステップB1において取得した、自CPU10の前回のCPU負荷情報に基づき、前回のCPU負荷が高負荷状態であったかを確認する。
確認の結果、前回のCPU負荷が低負荷状態であった場合には(ステップB11のNoルート参照)、ステップB15に移行する。ステップB15においては、現在のCPU負荷が低負荷、且つ、前回のCPU負荷が低負荷の場合の処理が行なわれる。
ステップB15において、ログ出力処理制御部103は、ログ出力部102に、ログ出力対象情報114として保存されたCPU番号のCPU10について、ログ出力を行なう。すなわち、CPU番号が示すCPU10に対応するログバッファ111に格納されたログ情報をログ用ディスク領域121に格納させる。その後、処理を終了する。
一方、ステップB11における確認の結果、前回のCPU負荷が高負荷状態であった場合には(ステップB11のYesルート参照)、ステップB12に移行する。ステップB12〜B15においては、現在のCPU負荷が低負荷、且つ、前回のCPU負荷が高負荷の場合の処理が行なわれる。
ステップB12において、ログ出力処理制御部103は、代替CPU情報115として保存されたCPU番号が示すCPU10(移管先CPU10)に対して、ログ出力を取り戻す旨のメッセージを通知する。すなわち、ログ出力の移管解除通知が送信される。
ステップB13において、ログ出力処理制御部103は、代替CPU情報115として保存されたCPU番号を削除する。
また、ステップB14において、ログ出力処理制御部103は、ログ出力対象情報114に自CPU10のCPU番号を設定する。
その後、ステップB15に移行した後、処理を終了する。
次に、実施形態の一例としてのコンピュータシステム1におけるログ出力処理制御部103の移管先としての処理を、図10に示すフローチャート(ステップC1〜C7)に従って説明する。
ステップC1において、ログ出力処理制御部103は、他CPU10のログ出力処理制御部103からメッセージを受信する。
ステップC2において、ログ出力処理制御部103は、受信したメッセージがログ出力対象番号の取り戻しを通知するものであるかを確認する。
確認の結果、受信したメッセージがログ出力対象番号の取り戻しを通知するものである場合には(ステップC2のYesルート参照)、ステップC3に移行する。
ステップC3においては、ログ出力処理制御部103は、ログ出力対象情報114からメッセージの送信元CPU10のCPU番号を削除して、処理を終了する。
ステップC2における確認の結果、受信したメッセージがログ出力対象番号の取り戻しを通知するものでない場合には(ステップC2のNoルート参照)、ステップC4に移行する。
ステップC4において、ログ出力処理制御部103は、受信したメッセージがログ出力対象番号を通知するものであるか、すなわち、ログ出力対象番号を受け渡すものであるかを確認する。
確認の結果、受信したメッセージがログ出力対象番号を通知するものである場合には(ステップC4のYesルート参照)、ステップC5に移行する。
ステップC5においては、ログ出力処理制御部103は、他CPU10から受け取ったCPU番号(ログ出力対象番号)を、ログ出力対象情報114に追加保存して、処理を終了する。
ステップC4における確認の結果、ログ出力処理制御部103は、受信したメッセージがログ出力対象番号を通知するものでない場合(ステップC4のNoルート参照)、ステップC6に移行する。
ステップC6においては、ログ出力処理制御部103は、他CPU10から受信したメッセージが代替CPU番号を通知するものであるかを確認する。
確認の結果、受信したメッセージが代替CPU番号を通知するものである場合には(ステップC6のYesルート参照)、ステップC7に移行する。
ステップC7においては、ログ出力処理制御部103は、他CPU10から受け取ったCPU番号(代替CPU番号)を、代替CPU情報115に保存して、処理を終了する。
また、ステップC6における確認の結果、受信したメッセージが代替CPU番号を通知するものでない場合には(ステップC6のNoルート参照)、処理を終了する。
次に、実施形態の一例としてのコンピュータシステム1のログ出力部102の処理を、図11に示すフローチャート(ステップD1〜D3)に従って説明する。
ステップD1において、ログ出力部102は、ログ出力処理制御部103からログ出力対象番号を受け取る。
ステップD2において、ログ出力部102は、ログ出力対象番号で示されるCPU10に対応するログバッファ111において、ログ出力ポインタによって特定される位置から、ログ格納ポインタによって特定される位置までの間の情報(ログ情報)をログ用ディスク領域121に出力する。
ステップD3において、ログ出力部102は、ログバッファ111のログ出力ポインタの値をログ格納ポインタの値を用いて上書きすることで更新し、処理を終了する。
次に、実施形態の一例としてのコンピュータシステム1の詳細ログ収集部104の処理を、図12に示すフローチャート(ステップE1〜E9)に従って説明する。
ステップE1において、詳細ログ収集部104は、他CPU10のそれぞれのCPUステータスを監視する。
ステップE2において、詳細ログ収集部104は、他CPU10において異常が発生しているかを確認する。
確認の結果、他CPU10に異常が発生していない場合には(ステップE2のNoルート参照)、処理を終了する。
一方、ステップE2における確認の結果、他CPU10のいずれかおいて異常が発生している場合には(ステップE2のYesルート参照)、ステップE3に移行する。
ステップE3においては、詳細ログ収集部104は、自CPU10と異常が発生しているCPU10とを除いた、他の全てのCPU10を停止させる。
ステップE4において、詳細ログ収集部104は、メモリ11のデバッグカーネル動作用領域112からデバッグカーネルを読み出して実行する(起動させる)。
ステップE5において、詳細ログ収集部104は、図示しないキーボードやマウス等の入力装置を介して入力される、ユーザからの指示を待つ。
ユーザから指示入力が行なわれると、ステップE6において、詳細ログ収集部104は、入力された指示内容を確認する。
入力された指示が再起動を指示するものである場合には、詳細ログ収集部104は、ステップE7において、本コンピュータシステム1の再起動を実行して、処理を終了する。
一方、入力された指示がメモリダンプの採取を指示するものである場合には、詳細ログ収集部104は、ステップE8において、本コンピュータシステム1のメモリ11のメモリダンプを取得して、ステップE5に戻る。
また、入力された指示が周辺レジスタのレジスタダンプの採取を指示するものである場合には、詳細ログ収集部104は、ステップE9において、本コンピュータシステム1の周辺レジスタ15のレジスタダンプを取得して、ステップE5に戻る。
図13〜図15は実施形態の一例としてのコンピュータシステム1における、移管元のログ出力処理制御部103と移管先のログ出力処理制御部103との処理を例示するシーケンス図である。図14は図13に後続する処理を示し、図15は図14に後続する処理を示す。
なお、図13においては、便宜上、CPU#1,#2だけを例示している。また、CPU#1においては、ログ出力対象情報114にはCPU番号“1”が設定されており、代替CPU情報115にはCPU番号は設定されていない。一方、CPU#2においては、ログ出力対象情報114にはCPU番号“2”が設定されており、代替CPU情報115にはCPU番号は設定されていない。
また、CPU#2は低負荷状態であるものとする。
このような状態において、CPU#1(第1のプロセッサ:移管元)が低負荷状態から高負荷状態に遷移すると、CPU#1のログ出力処理制御部103は、CPU#2(第2のプロセッサ:移管先)に対してログ出力対象番号“1”を通知する(図13中の符号F1参照)。
これにより、CPU#1(第1のプロセッサ:移管元)においては、ログ出力対象情報(第1のログ出力対象情報)114にはログ出力対象番号(CPU番号)は未登録(なし)の状態となり、また、代替CPU情報(移管先プロセッサ情報)115には、ログ出力対象番号の送信先であるCPU#2のCPU番号“2”が設定される。
一方、CPU#2(第2のプロセッサ:移管先)においては、ログ出力対象情報(第2のログ出力対象情報)114にはCPU番号“1”が追加されることで、“1,2”が設定される。なお、代替CPU情報115にはCPU番号は未設定(なし)のままである。
その後、図14に示すように、CPU#2が低負荷状態から高負荷状態に遷移したものする。
なお、図14においては、便宜上、CPU#1〜#3だけを例示している。また、CPU#3においては、ログ出力対象情報114にはCPU番号“3”が設定されており、代替CPU情報115にはCPU番号は設定されていない。また、CPU#1においては、ログ出力対象情報114にはCPU番号が設定されておらず、代替CPU情報115にはCPU番号“2”が設定されている。
また、CPU#3は低負荷状態であるものとする。
このような状態において、CPU#2が低負荷状態から高負荷状態に遷移すると、CPU#2(第1のプロセッサ:移管元)のログ出力処理制御部103は、CPU#3(第2のプロセッサ:移管先)に対してログ出力対象番号“1,2”を通知する(図14中の符号F2参照)。
これにより、CPU#2(第1のプロセッサ:移管元)においては、ログ出力対象情報(第1のログ出力対象情報)114にはログ出力対象番号(CPU番号)は未登録(なし)の状態となり、また、代替CPU情報(移管先プロセッサ情報)115には、ログ出力対象番号の送信先であるCPU#3のCPU番号“3”が設定される。
一方、CPU#3(第2のプロセッサ:移管先)においては、ログ出力対象情報(第2のログ出力対象情報)114にはCPU番号“1,2”が追加されることで、“1,2,3”が設定される。なお、代替CPU情報115にはCPU番号は未設定(なし)のままである。
また、CPU#2のログ出力対象情報114は、CPU#1に対して、代替CPU番号を送信する(図14中の符号F3参照)。
これにより、CPU#1においては、ログ出力対象情報114にはログ出力対象番号(CPU番号)は未登録(なし)の状態であり、また、代替CPU情報115には、代替CPU番号の送信元であるCPU#2のCPU番号“2”が設定される。
その後、図15に示すように、CPU#2が高負荷状態から低負荷状態に遷移したものする。
なお、図15においても、便宜上、CPU#1〜#3だけを例示している。
CPU#2が高負荷状態から低負荷状態に遷移すると、CPU#2(第1のプロセッサ:移管元)のログ出力処理制御部103は、CPU#3に対してログ出力対象番号の取り戻しを通知する(図15中の符号F4参照)。
これにより、CPU#3(第2のプロセッサ:移管先)においては、ログ出力対象情報(第2のログ出力対象情報)114のログ出力対象番号(CPU番号)から、ログ出力対象番号の取り戻しの要求元のCPU10のCPU番号“2”が削除され、ログ出力対象情報114にはCPU番号“1,3”が設定される。また、代替CPU情報115は引き続き、CPU番号は未設定(なし)のままである。
一方、CPU#2においては、CPU番号“2”が取り戻されることで、ログ出力対象情報(第1のログ出力対象情報)114にはCPU番号“2”が設定される。なお、代替CPU情報115にはCPU番号は未設定(なし)のままである。
(C)効果
このように、本発明の一実施形態としてのコンピュータシステム1によれば、SMPカーネルの動作環境化において、ICEやHWシミュレータ等を用いることなくログ情報を収集することができ、カーネルや仮想化ソフトの障害調査が可能となる。
また、ログ情報を採取するための専用のプロセッサやハードウェアを備える必要がないので経済的であり、また、既存のコンピュータシステム1において容易に実施することができる。
本コンピュータシステム1に異常が発生した場合に、その直前に動作していたCPU10やカーネルの情報を記憶装置12に退避させることができ、ICEやシミュレータ等がない環境においてもカーネルや仮想化ソフトの障害調査が可能となる。
また、過去に動作していた情報を採取することにより、障害の直接の原因が過去に遡らないとわからない場合でも、障害調査が可能となる。
自CPU10が低負荷状態から高負荷状態に遷移した場合に、ログ出力処理制御部103が、複数のCPU10のうち、CPU負荷が最も低いCPU10にログ出力部102としての機能を移管させる。
これにより、比較的CPU負荷の高いログ出力処理を、低負荷状態の他のCPU10に実行させることで、複数のCPU10が実行中の他のプロセスに遅延等の影響を与えることがなく、本コンピュータシステム1を安定して動作させることができる。例えば、ログ収集部101としての機能に影響を与えることなくログ出力を実施することができる。
また、SMPを構成する複数のCPU10間において、負荷を分散させることができ、これによっても、本コンピュータシステム1を安定して動作させることができる。
また、ログ出力を他CPU10に移管した状態で、自CPU10が低負荷状態に遷移した場合に、ログ出力処理制御部103が移管先のCPU10からログ出力を取り戻す。これによっても、複数のCPU10間において負荷を分散させることができる。
複数のCPU10のうちいずれかのCPU10において何らかの異常が発生した場合に、各CPU10で実行される詳細ログ収集部104のうち、最初にこの異常発生を検知した詳細ログ収集部104が、自CPU10と当該異常が発生しているCPU10とを除いた、他のCPU10を停止させる。これにより、リングバッファ構成を有するログバッファ111のログ情報が、これらのCPU10の動作に伴って生成されるログ情報により上書き消去されてしまうことを阻止することができる。
(D)その他
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
(E)付記
(付記1)
複数のプロセッサを備える情報処理装置であって、
前記複数のプロセッサのうちの第1のプロセッサが、
当該第1のプロセッサの動作履歴情報を収集してログ記憶部に格納するログ収集部と、
前記ログ記憶部に格納された前記動作履歴情報を、不揮発性の記憶装置に移動させるログ出力部と、
当該第1のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第2のプロセッサに、前記ログ出力部としての機能を移管させる移管処理部と
しての機能を実行することを特徴とする、情報処理装置。
(付記2)
前記移管処理部は、前記第1プロセッサが高負荷状態から低負荷状態に遷移した場合に、前記ログ出力部としての機能を移管した前記第2のプロセッサに対して、前記ログ出力部としての機能の移管を解除する通知を送信する
ことを特徴とする、付記1記載の情報処理装置。
(付記3)
前記第1のプロセッサが、
前記第1のプロセッサによって実行される前記ログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第1のログ出力対象情報と、
前記第1のプロセッサによって実行されるログ出力部としての機能の移管先の前記第2のプロセッサを示す移管先プロセッサ情報とを備え、
前記移管処理部が、
前記第2のプロセッサに前記ログ出力部としての機能を移管させる際に、前記第1のログ出力対象情報から前記第1のプロセッサの登録を削除するとともに、前記移管先プロセッサ情報に前記第2のプロセッサを追加する
ことを特徴とする、付記2記載の情報処理装置。
(付記4)
前記移管処理部が、
前記第2のプロセッサに前記ログ出力部としての機能の移管を解除する通知を送信する際に、前記第1のログ出力対象情報に前記第1のプロセッサを追加するとともに、前記移管先プロセッサ情報から前記第2のプロセッサの登録を削除する
ことを特徴とする、付記3記載の情報処理装置。
(付記5)
前記第2のプロセッサが、
前記第2のプロセッサによって実行されるログ出力部が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第2のログ出力対象情報を備え、
前記第1のプロセッサから前記ログ出力部としての機能を移管させる通知を受信すると、前記第2のログ出力対象情報に前記第1のプロセッサを追加する
ことを特徴とする、付記2〜4のいずれか1項に記載の情報処理装置。
(付記6)
前記第2のプロセッサが、
前記第1のプロセッサから前記ログ出力部としての機能の移管を解除する通知を受信すると、前記第2のログ出力対象情報から前記第1のプロセッサの登録を削除する
ことを特徴とする、付記5記載の情報処理装置。
(付記7)
前記複数のプロセッサのうち第3のプロセッサに異常が検出された場合に、前記複数のプロセッサのうち前記第1プロセッサおよび第3のプロセッサ以外のプロセッサの動作を停止させる停止処理部
を備えることを特徴とする、付記1〜6のいずれか1項に記載の情報処理装置。
(付記8)
複数のプロセッサを備える情報処理装置において、
前記複数のプロセッサのうちの第1のプロセッサに、
当該第1のプロセッサの動作履歴情報を収集してログ記憶部に格納する処理と、
前記ログ記憶部に格納された前記動作履歴情報を不揮発性の記憶装置に移動させる処理と、
当該第1のプロセッサが低負荷状態から高負荷状態に遷移した場合に、前記複数のプロセッサのうち最も低負荷の第2のプロセッサに、前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる処理と
を実行させる制御プログラム。
(付記9)
前記第1プロセッサが高負荷状態から低負荷状態に遷移した場合に、前記動作履歴情報を不揮発性の記憶装置に移動させる機能を移管した前記第2のプロセッサに対して、前記移管を解除する通知を送信する
処理を前記第1のプロセッサに実行させることを特徴とする、付記8記載の制御プログラム。
(付記10)
前記第1のプロセッサが、前記第1のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理が移動させる前記動作履歴情報に対応するプロセッサを示す第1のログ出力対象情報と、前記第1のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理の移管先の前記第2のプロセッサを示す移管先プロセッサ情報とを備え、
前記第2のプロセッサに前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる際に、前記第1のログ出力対象情報から前記第1のプロセッサの登録を削除するとともに、前記移管先プロセッサ情報に前記第2のプロセッサを追加する
処理を前記第1のプロセッサに実行させることを特徴とする、付記9記載の制御プログラム。
(付記11)
前記第2のプロセッサに前記移管を解除する通知を送信する際に、前記第1のログ出力対象情報に前記第1のプロセッサを追加するとともに、前記移管先プロセッサ情報から前記第2のプロセッサの登録を削除する
処理を前記第1のプロセッサに実行させることを特徴とする、付記10記載の制御プログラム。
(付記12)
前記第2のプロセッサが、前記第2のプロセッサによって実行される前記動作履歴情報を不揮発性の記憶装置に移動させる処理が前記記憶装置に移動させる前記動作履歴情報に対応するプロセッサを示す第2のログ出力対象情報を備え、
前記第1のプロセッサから前記動作履歴情報を不揮発性の記憶装置に移動させる処理を移管させる通知を受信すると、前記第2のログ出力対象情報に前記第1のプロセッサを追加する
処理を前記第2のプロセッサに実行させることを特徴とする、付記9〜11のいずれか1項に記載の制御プログラム。
(付記13)
前記第1のプロセッサから前記移管を解除する通知を受信すると、前記第2のログ出力対象情報から前記第1のプロセッサの登録を削除する
処理を前記第2のプロセッサに実行させることを特徴とする、付記12記載の制御プログラム。
(付記14)
前記複数のプロセッサのうち第3のプロセッサに異常が検出された場合に、前記複数のプロセッサのうち前記第1プロセッサおよび第3のプロセッサ以外のプロセッサの動作を停止させる処理
を前記第1のプロセッサに実行させることを特徴とする、付記8〜13のいずれか1項に記載の制御プログラム。