JP2015146116A - 制御プログラム、制御方法および情報処理装置 - Google Patents

制御プログラム、制御方法および情報処理装置 Download PDF

Info

Publication number
JP2015146116A
JP2015146116A JP2014018607A JP2014018607A JP2015146116A JP 2015146116 A JP2015146116 A JP 2015146116A JP 2014018607 A JP2014018607 A JP 2014018607A JP 2014018607 A JP2014018607 A JP 2014018607A JP 2015146116 A JP2015146116 A JP 2015146116A
Authority
JP
Japan
Prior art keywords
processor
data
request
clocks
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
JP2014018607A
Other languages
English (en)
Inventor
朋之 廣
Tomoyuki Hiro
朋之 廣
秀彦 友野
Hidehiko Tomono
秀彦 友野
貴規 酒井
Takanori Sakai
貴規 酒井
尚也 平出
Hisaya Hiraide
尚也 平出
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2014018607A priority Critical patent/JP2015146116A/ja
Publication of JP2015146116A publication Critical patent/JP2015146116A/ja
Ceased legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】エラーの発生状況を再現する精度を向上させる。【解決手段】情報処理装置10は、プロセッサ11,12と制御部13とを有する。プロセッサ11は、クロック数または命令数を計数するカウンタ11aを含む。プロセッサ12は、クロック数または命令数を計数するカウンタ12aを含む。制御部13は、プロセッサ11にコードを実行させ、カウンタ11a,12aの値に基づいて、プロセッサ11から所定のクロック数または命令数だけ遅れてプロセッサ12にコードを実行させる。【選択図】図1

Description

本発明は制御プログラム、制御方法および情報処理装置に関する。
情報処理システムにおいては、ソフトウェアの不具合によって、メモリアクセス違反などの予期しないエラーが発生することがある。その場合、情報処理システムの開発者または管理者は、ソフトウェアの中からエラーの原因となった命令を探し、再びエラーが発生しないようにソフトウェアを修正するデバッグ作業を行うことになる。業務の運用中にエラーが発生した場合、迅速にデバッグ作業が行われることが好ましい。
エラー原因を分析する1つの方法としては、エラーが検出された時点におけるレジスタやメモリのデータを抽出し、抽出したデータを解析する方法が考えられる。しかし、エラーが検出された時点におけるデータは、不適切な演算や不適切なメモリアクセスによって既に破壊されている可能性がある。また、情報処理システムにおいては、不適切な命令が実行されてから時間が経過した後に、エラーが検出されることも多い。そのため、エラーが検出された時点のデータからエラー原因を探すことは、容易とは言えない。
これに対し、エラー原因を分析する他の方法として、エラーが検出される少し前の時点のデータを、情報処理システムが取得できるようにする方法が考えられる。このデータを用いることで、エラーが検出される前の時点からエラーが検出された時点までの動作を再現できると期待され、その間に実行された命令を分析することが可能となる。
例えば、現用サーバを備える処理モジュール#1と、現用サーバと同じプログラムを実行する冗長サーバを備える処理モジュール#2とを有する計算機システムが提案されている。処理モジュール#1は、クライアントから処理要求を受信し、受信した処理要求をコピーして処理モジュール#2に送信し、また、受信した処理要求を現用サーバに投入する。処理モジュール#2は、コピーされた処理要求を一時的にバッファに保存する。
(1)処理モジュール#2は、定期的にバッファを確認し、確認した時点でバッファに存在する処理要求を冗長サーバに投入する。または、(2)処理モジュール#2は、各処理要求について受信した時刻に1分加えた予定時刻をその処理要求に付加しておき、定期的にバッファを確認し、確認した時点で予定時刻を経過している処理要求を冗長サーバに投入する。または、(3)処理モジュール#2は、バッファに格納されている処理要求の数が閾値を超えたとき、バッファ内にある最も古い処理要求を冗長サーバに投入する。または、(4)処理モジュール#2は、現用サーバから番号Nの処理要求の実行完了が通知されたとき、バッファに格納された番号Nの処理要求を冗長サーバに投入する。
これにより、現用サーバから遅れて、現用サーバと同じ処理要求が冗長サーバに投入される。この計算機システムは、現用サーバのエラーを検知すると、エラーを検知した時点における冗長サーバの状態を示す状態データを保存する。状態データを用いることで、エラーが検知される前から現用サーバの動作を再現することができると期待される。
特開2005−165599号公報
しかし、上記の計算機システムでは、現用サーバに処理要求が投入されてから冗長サーバに同じ処理要求が投入されるまでの遅延時間が、一定にはならない。例えば、処理モジュール#2が定期的にバッファを確認する方法では、バッファに到着した処理要求は次にバッファを確認するタイミングまで冗長サーバに投入されないため、遅延時間は処理要求が到着するタイミングに応じて変わることになる。また、処理モジュール#2の負荷は、バッファ管理のために処理モジュール#1よりも高くなる可能性があり、冗長サーバの処理が現用サーバに追従できずに遅延時間が徐々に拡大するおそれもある。
そのため、現用サーバおよび冗長サーバでタイミング依存の処理が実行されると、現用サーバの処理結果と冗長サーバの処理結果とが一致しなくなる可能性がある。例えば、遅延時間が変化すると、1つ前の処理要求が投入されてからある処理要求が投入されるまでの経過時間が、現用サーバと冗長サーバとで異なってしまう。現用サーバおよび冗長サーバが経過時間に応じて異なる処理を行う場合(例えば、経過時間が長いとタイムアウトが発生する場合)、現用サーバと冗長サーバの処理結果が異なるおそれがある。
その結果、現用サーバではエラーが発生するが冗長サーバではエラーが発生しないことがあり、また、現用サーバではエラーが発生しないが冗長サーバではエラーが発生することもある。よって、冗長サーバの状態データを用いても、エラーが検知される前の現用サーバの状態を再現することができない場合があるという問題がある。
1つの側面では、本発明は、エラーの発生状況を再現する精度を向上させた制御プログラム、制御方法および情報処理装置を提供することを目的とする。
1つの態様では、コンピュータに以下の処理を実行させる制御プログラムが提供される。クロック数または命令数を計数する第1のカウンタを含む第1のプロセッサと、クロック数または命令数を計数する第2のカウンタを含む第2のプロセッサのうち、第1のプロセッサにコードを実行させる。第1および第2のカウンタの値に基づいて、第1のプロセッサから所定のクロック数または命令数だけ遅れて第2のプロセッサにコードを実行させる。また、1つの態様では、コンピュータが実行する制御方法が提供される。
また、1つの態様では、第1のプロセッサと第2のプロセッサと制御部とを有する情報処理装置が提供される。第1のプロセッサは、クロック数または命令数を計数する第1のカウンタを含む。第2のプロセッサは、クロック数または命令数を計数する第2のカウンタを含む。制御部は、第1のプロセッサにコードを実行させる。制御部は、第1および第2のカウンタの値に基づいて、第1のプロセッサから所定のクロック数または命令数だけ遅れて第2のプロセッサにコードを実行させる。
1つの側面では、エラーの発生状況を再現する精度を向上させることができる。
第1の実施の形態の情報処理装置を示す図である。 第2の実施の形態の情報処理システムを示す図である。 業務サーバのハードウェア例を示すブロック図である。 業務サーバと検証サーバの機能例を示すブロック図である。 業務サーバと検証サーバの他の機能例を示すブロック図である。 要求バッファに格納する要求データの構造例を示す図である。 システム起動の手順例を示すフローチャートである。 冗長制御の手順例を示すフローチャートである。 要求処理のタイミング例を示すシーケンス図である。 デバッグ情報収集の手順例を示すフローチャートである。 エラー再現の手順例を示すフローチャートである。 エラー検出および再現のタイミング例を示す図である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。
第1の実施の形態の情報処理装置10は、エラーを検知したときに当該エラーが発生する前の情報処理装置10の状態を示すエラー情報を出力する。これにより、エラーが発生するまでの動作を再現し、エラー原因を分析することが容易となる。情報処理装置10で発生するエラーとしては、例えば、メモリアクセス違反、ゼロ除算などの実行不能演算、例外処理ルーチンへのジャンプなどが挙げられる。エラー情報を用いたエラー原因の分析は、情報処理装置10で行ってもよいし他の情報処理装置で行ってもよい。
情報処理装置10は、プロセッサ11,12および制御部13を有する。プロセッサ11,12それぞれは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)であってもよく、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の集積回路を含んでもよい。プロセッサ11,12それぞれは、RAM(Random Access Memory)やHDD(Hard Disk Drive)などの記憶装置に記憶されたプログラムを実行することができる。制御部13は、CPUなどのプロセッサとRAMなどの記憶装置とを含んでもよい。
プロセッサ11は、クロック数または命令数を計数するカウンタ11aを含む。カウンタ11aは、例えば、プロセッサ11が起動した時点または基準となる時点から、プロセッサ11内でクロック信号または命令が1つ進む毎にカウントアップする。カウンタ11aは、クロック数または命令数を記憶するレジスタを含んでもよい。カウンタ11aの値は、プロセッサ11が認識するハードウェア時刻を表していると言うことができる。
プロセッサ12は、クロック数または命令数を計数するカウンタ12aを含む。カウンタ12aは、例えば、プロセッサ12が起動した時点または基準となる時点から、プロセッサ12内でクロック信号または命令が1つ進む毎にカウントアップする。カウンタ12aの値は、カウンタ11aとは独立に進行する。カウンタ12aは、クロック数または命令数を記憶するレジスタを含んでもよい。カウンタ12aの値は、プロセッサ12が認識するハードウェア時刻を表していると言うことができる。
制御部13は、プロセッサ11にコードを実行させ、プロセッサ11から遅れてプロセッサ12に同じコードを実行させる。プロセッサ11は先行系の実行単位と言うことができ、プロセッサ12は追随系の実行単位と言うことができる。コードとは、プロセッサに処理させる命令である。プロセッサ11,12により2つの仮想マシンが形成される場合、制御部13は、仮想マシンを制御するハイパーバイザを用いて実装され得る。また、プロセッサ11,12により仮想マシン以外の2つのプロセスまたはスレッドが形成される場合、制御部13は、BIOS(Basic Input and Output System)または他のファームウェアを用いて実装され得る。
ここで、制御部13は、カウンタ11a,12aの値に基づいて、プロセッサ11があるコードを実行し始めてからプロセッサ12が同じコードを実行し始めるまでの遅延時間を、所定のクロック数または命令数に維持する。例えば、制御部13は、プロセッサ11を起動してから所定のクロック数または命令数だけ遅れてプロセッサ12を起動することで、カウンタ11aの値とカウンタ12aの値とを所定数だけずらす。そして、制御部13は、プロセッサ11がコードを実行し始めるときのカウンタ11aの値を確認し、カウンタ12aが同じ値になるときにプロセッサ12に同じコードを実行させる。
上記のコードが入力データの到着に応じて実行されるものである場合、制御部13は、入力データの投入タイミングを制御することでプロセッサ11,12間の遅延時間を一定に維持する。例えば、制御部13は、入力データを受け付けると、プロセッサ11またはプロセッサ11上で動作する仮想マシン・プロセス・スレッドなどに対して入力データを投入する。また、制御部13は、受け付けた入力データにカウンタ11aの値を付加してバッファに格納しておく。そして、制御部13は、所定のクロック数または命令数だけ遅れて、プロセッサ12またはプロセッサ12上で動作する仮想マシン・プロセス・スレッドなどに対して、バッファに格納された入力データを投入する。
これにより、プロセッサ11により実行された処理が、プロセッサ11から所定時間だけ遅れてプロセッサ12により実行される。プロセッサ11でエラーが発生した場合、情報処理装置10は、プロセッサ12の状態を示す状態データを含むエラー情報を出力する。プロセッサ11では処理されプロセッサ12では未処理である入力データがバッファに残っている場合、情報処理装置10は、エラー情報にバッファの内容を含めて出力する。これにより、エラー発生の少し前からプロセッサ11の処理を再現することができる。
第1の実施の形態の情報処理装置10によれば、あるコードをプロセッサ11が実行すると、プロセッサ11から所定のクロック数または命令数だけ遅れて、同じコードをプロセッサ12が実行する。プロセッサ11,12間の遅延時間をクロック数または命令数として管理することで、遅延時間を一定に維持することが容易となる。よって、プロセッサ11,12それぞれでタイミング依存の処理が実行されても、プロセッサ11の処理結果とプロセッサ12の処理結果とを一致させることができる。例えば、1つ前の入力データが投入されてからある入力データが投入されるまでの経過時間を、プロセッサ11,12間で揃えることができ、経過時間に応じて処理が変わる場合でもプロセッサ11,12の処理結果を一致させることができる。その結果、プロセッサ11におけるエラー発生状況を、プロセッサ12の状態データを用いて精度よく再現することができる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。
第2の実施の形態の情報処理システムは、業務サーバ100および検証サーバ200を有する。業務サーバ100と検証サーバ200は、ネットワーク30を介して接続されている。ネットワーク30は、例えば、インターネットなどの広域ネットワークである。
業務サーバ100は、企業が所有する情報処理システムに属するサーバコンピュータである。業務サーバ100上では、複数の仮想的なコンピュータ(仮想マシン)を動作させることが可能である。検証サーバ200は、企業の情報処理システムを開発したベンダが保守サポートに用いるサーバコンピュータである。業務サーバ100でエラーが発生すると、ベンダは検証サーバ200を用いてデバッグ作業を行う。デバッグ作業の中で、検証サーバ200は、エラー発生状況を示すデバッグ情報を業務サーバ100から取得し、デバッグ情報に基づいて業務サーバ100の動作を再現してエラー原因を分析する。
図3は、業務サーバのハードウェア例を示すブロック図である。
業務サーバ100は、CPU103〜105、RAM106〜108、ROM(Read Only Memory)111、HDD112、画像信号処理部113、入力信号処理部114、媒体リーダ115および通信インタフェース116を有する。上記のユニットは、業務サーバ100内でバスに接続されている。CPU103は、第1の実施の形態のプロセッサ11の一例である。CPU104は、第1の実施の形態のプロセッサ12の一例である。CPU105とRAM108の集合は、第1の実施の形態の制御部13の一例である。
CPU103〜105は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU103〜105は、ROM111やHDD112に記憶されているプログラムやデータの少なくとも一部を何れかのRAMにロードし、プログラムを実行する。プログラムやデータのロード先として、CPU103はRAM106を利用し、CPU104はRAM107を利用し、CPU105はRAM108を利用する。
CPU103は、タイムスタンプカウンタ(TSC:Time Stamp Counter)レジスタ103aを有する。CPU103は、CPU103が起動してから継続的にクロック信号を計数している。TSCレジスタ103aには、CPU103において計数されたクロック数が格納される。同様に、CPU104は、CPU104において計数されたクロック数を格納するTSCレジスタ104aを有する。TSCレジスタ103a,104aに格納されるクロック数は、例えば、64ビットの非負整数として表現される。
RAM106〜108は、プログラムやデータを一時的に記憶する揮発性メモリである。ただし、業務サーバ100は、RAM以外の種類のメモリを備えてもよい。
CPU103とRAM106は、実行単位101に属している。CPU104とRAM107は、実行単位102に属している。実行単位101と実行単位102には、互いに異なる一纏まりの処理単位(仮想マシン・プロセス・スレッドなど)を配置することができる。実行単位101上の処理単位と実行単位102上の処理単位とは、並列に実行することができる。また、実行単位101と実行単位102には、同じプログラムを実行させることもできる。CPU105とRAM108は、制御用のモジュールであり、実行単位101,102に配置された仮想マシン・プロセス・スレッドなどを制御する。
なお、実行単位101,102で行われる処理の制御を容易にするため、クロック周波数や各命令の消費クロック数などの仕様を実行単位101,102間で同じにしておく。実行単位101,102は、同じプログラムを同じ時間で実行できると期待される。
ROM111は、BIOSプログラムを記憶する不揮発性の半導体メモリである。ただし、ROM111に代えて、フラッシュメモリなどの書換可能な半導体メモリを用いてもよい。BIOSには、業務サーバ100が起動するときにオペレーティングシステム(OS:Operating System)やハイパーバイザなどの基本ソフトウェアを呼び出す機能が実装されている。業務サーバ100が起動すると、CPU105は、BIOSプログラムをROM111からRAM108にロードし、HDD112を含むデバイスをアクセス可能にする。CPU105は、BIOSプログラムに従って、OSプログラムやハイパーバイザプログラムなどをHDD112からRAM108にロードする。
HDD112は、OS・ハイパーバイザ・ファームウェア・アプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、業務サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部113は、CPU105からの命令に従って、業務サーバ100に接続されたディスプレイ117に画像を出力する。ディスプレイ117としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部114は、業務サーバ100に接続された入力デバイス118から入力信号を取得し、CPU105に出力する。入力デバイス118としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、業務サーバ100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ115は、記録媒体119に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体119として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ115は、例えば、記録媒体119から読み取ったプログラムやデータをRAM106〜108またはHDD112に格納する。
通信インタフェース116は、ネットワーク30に接続され、ネットワーク30を介して検証サーバ200などの他のコンピュータと通信を行うインタフェースである。通信インタフェース116は、ケーブルで通信装置と接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
なお、業務サーバ100は、媒体リーダ115を備えていなくてもよく、ユーザが操作する端末装置から制御可能である場合には画像信号処理部113や入力信号処理部114を備えていなくてもよい。また、ディスプレイ117や入力デバイス118が、業務サーバ100の筐体と一体に形成されていてもよい。検証サーバ200も、業務サーバ100と同様のハードウェアを用いて実現することができる。ただし、検証サーバ200では、CPUとRAMを含む実行単位の数が1つのみであってもよい。
図4は、業務サーバと検証サーバの機能例を示すブロック図である。
業務サーバ100は、仮想マシン121,122とハイパーバイザ130を有する。
仮想マシン121,122は、それぞれOSやデバイスドライバなどのソフトウェアを実行する仮想的なコンピュータである。仮想マシン121は実行単位101に配置され、仮想マシン122は実行単位102に配置される。仮想マシン121,122は、同じOSプログラムやドライバプログラムを含む同じプログラムに基づいて起動され、並列に動作する。ただし、仮想マシン122は、仮想マシン121よりも遅れて仮想マシン121と同じ処理を実行する。そこで、仮想マシン121および実行単位101は先行系と言うことができ、仮想マシン122および実行単位102は追随系と言うことができる。
ハイパーバイザ130は、仮想マシン121,122を制御する。ハイパーバイザ130は、業務サーバ100が備えるハードウェアリソースを管理し、仮想マシン121,122にハードウェアリソースを割り当てる。ハイパーバイザ130は、初期化部131、要求バッファ132、要求転送部133、応答転送部134、エラー検出部135およびデバッグ情報記憶部136を有する。要求バッファ132およびデバッグ情報記憶部136は、例えば、RAM108またはHDD112に確保した記憶領域として実装される。他のモジュールは、例えば、CPU105が実行するプログラムとして実装される。
初期化部131は、業務サーバ100に対する起動要求(例えば、電源ボタンの押下や電源ONのコマンドなど)を検出する。すると、初期化部131は、実行単位101のCPU103を先に起動する(例えば、CPU103にクロック信号を供給し、CPU103のレジスタを初期化する)。これにより、TSCレジスタ103aのカウントアップが開始される。その後、初期化部131は、CPU103から所定クロック数だけ遅れて、実行単位102のCPU104を起動する。例えば、初期化部131は、TSCレジスタ103aが所定クロック数を示すタイミングで、CPU104を起動する。これにより、TSCレジスタ103a,104aの値が所定数だけずれる。
また、初期化部131は、起動後も継続的にTSCレジスタ103a,104aの値を確認する。TSCレジスタ103a,104aの差は、ハードウェアエラーによってCPU103,104の少なくとも一方が一時的に停止した場合や、省電力制御によってCPU103,104の少なくとも一方のクロック周波数が変化した場合に変わり得る。そこで、TSCレジスタ103a,104aの差が所定数から大きく離れた場合、初期化部131は、差が所定数になるように再調整する。例えば、初期化部131は、実行単位101,102を停止し、実行単位101の状態データを実行単位102にコピーする。CPU103のレジスタのデータはCPU104のレジスタにコピーされ、RAM106のデータはRAM107にコピーされる。そして、初期化部131は、実行単位101を再開させ、実行単位101から所定クロック数だけ遅れて実行単位102を再開させる。
要求バッファ132は、デバイスから受け付けた入力データを含む要求データを一時的に格納するキュー形式の記憶領域である。デバイスとしては、HDD112・媒体リーダ115・通信インタフェース116・ディスプレイ117・入力デバイス118など、CPUとRAM以外の周辺機器が挙げられる。要求バッファ132には、仮想マシン121に投入され(実行単位101で処理され)、仮想マシン122に未投入の(実行単位102で未処理の)入力データを含む要求データが格納される。
要求転送部133は、デバイスから入力データを受け付ける。すると、先行系の仮想マシン121に入力データを投入する。これにより、実行単位101は、入力データに応じた処理が定義されたプログラム(例えば、OSプログラムやドライバプログラムなど)を実行し始める。また、要求転送部133は、仮想マシン121に入力データを投入するときのTSCレジスタ103aの値や入力データなどを含む要求データを生成し、要求データを要求バッファ132に格納する。要求データは、キューの末尾に追加される。
また、要求転送部133は、要求バッファ132から要求データを読み出す。要求データは、キューの先頭から取り出される。読み出した要求データは、要求バッファ132から削除される。要求転送部133は、要求データに含まれる入力データを、仮想マシン121から所定クロック数だけ遅れて仮想マシン122に投入する。入力データを投入するタイミングは、TSCレジスタ104aの値や要求データに含まれるクロック数に基づいて判断される。これにより、実行単位102は、入力データに応じた処理が定義されたプログラムであって、実行単位101と同じプログラムを実行し始める。
応答転送部134は、仮想マシン121から、投入された入力データに対する処理結果を示す出力データを取得する。すると、応答転送部134は、出力データをデバイスに転送する。転送先のデバイスは、入力データの発行元によって指定されてもよいし、入力データの種類に応じて決まってもよいし、実行単位101が実行するプログラムにおいて定義されてもよい。その後、応答転送部134は、仮想マシン122から、投入された入力データに対する処理結果を示す出力データを取得する。すると、応答転送部134は、取得した出力データをデバイスに転送せずに破棄する。出力データの破棄は、ダミーの転送先デバイスを指定することによって実現することもできる。
エラー検出部135は、先行系である仮想マシン121を監視し、エラーを検出する。検出されるエラーは、プログラムに従った処理を実行単位101が正常に継続できなくなったことや、実行単位101の状態が予め定義された状態になったことである。エラーの例として、メモリアクセス違反、ゼロ除算などの実行不能演算、例外処理ルーチンへのジャンプなどが挙げられる。仮想マシン121におけるエラーを検出すると、エラー検出部135は、実行単位101,102を停止し、要求バッファ132への要求データの追加および要求バッファ132からの要求データの読み出しを停止する。
そして、エラー検出部135は、エラー原因の分析に有用なデバッグ情報を生成し、デバッグ情報記憶部136に格納する。デバッグ情報には、実行単位101,102の状態データ(CPU103,104のレジスタおよびRAM106,107のデータ)と、要求バッファ132に記憶された要求データが含まれる。また、デバッグ情報には、業務サーバ100のハードウェア情報(例えば、チップセットの規格の情報など)が含まれる。
デバッグ情報記憶部136は、エラー検出部135によって生成されたデバッグ情報を記憶する。デバッグ情報は、業務サーバ100のユーザからの要求に応じて、または、検証サーバ200からのアクセスに応じて、ネットワーク30を介して検証サーバ200に送信される。デバッグ情報を用いて、検証サーバ200でデバッグ作業が行われる。ただし、デバッグ作業を業務サーバ100で行うことも可能である。
検証サーバ200は、デバッグ情報取得部221、環境再現部222、要求バッファ223および要求転送部224を有する。要求バッファ223は、例えば、検証サーバ200のRAMまたはHDDに確保した記憶領域として実装される。他のモジュールは、例えば、検証サーバ200のCPUが実行するプログラムとして実装される。
デバッグ情報取得部221は、業務サーバ100でエラーが検出されると、ネットワーク30を介して業務サーバ100からデバッグ情報を取得する。例えば、業務サーバ100を所有する企業と検証サーバ200を所有するベンダとがサポート契約を締結しており、企業からベンダに保守依頼があったときに、デバッグ情報が取得される。デバッグ情報は、業務サーバ100が能動的に検証サーバ200に送信してもよいし、検証サーバ200から業務サーバ100へのアクセスに応じて送信されてもよい。
環境再現部222は、デバッグ情報取得部221が取得したデバッグ情報を用いて、エラーが検出された時点の仮想マシン122の状態、すなわち、エラーが検出される前の仮想マシン121の状態を検証サーバ200上に再現する。このとき、環境再現部222は、デバッグ情報に含まれるCPU104のレジスタのデータを、検証サーバ200が備えるCPUのレジスタに書き込む。また、環境再現部222は、デバッグ情報に含まれるRAM107のデータを、検証サーバ200が備えるRAMに書き込む。また、環境再現部222は、デバッグ情報に含まれる要求データを要求バッファ223に格納する。
要求バッファ223は、要求データを格納するキュー形式の記憶領域である。要求バッファ223は、業務サーバ100の要求バッファ132と同様のデータ構造をもつ。
上記の環境再現部222の処理により、検証サーバ200上にはエラー検出時の仮想マシン122の状態、すなわち、理想的にはエラーが検出される所定クロック数前の時点の仮想マシン121の状態が再現される。検証サーバ200は、再現された状態より後の処理を再実行することで、エラー検出までの仮想マシン121の動作を検証し、エラー原因を分析することができる。エラー原因の分析には、1命令ずつの逐次実行、レジスタやRAMの監視、ブレークポイントの設定などの様々なデバッグ手法を用いることができる。例えば、検証サーバ200は、デバッグ情報に含まれる実行単位101の状態データから、実行単位101においてメモリアクセス違反が発生したことを検出する。すると、検証サーバ200は、ストア命令などのRAMにアクセスする命令を監視し、その命令の前後でプログラムを一時停止させながら、再現した仮想マシンの処理を進めていく。
要求転送部224は、再現した仮想マシンの処理を進めるにあたり、要求バッファ223から要求データを読み出す。要求データは、キューの先頭から取り出される。読み出した要求データは、要求バッファ223から削除してもよい。要求転送部224は、要求データに含まれる入力データを、要求データに含まれるクロック数に応じたタイミングで、再現した仮想マシンに投入する。これにより、検証サーバ200のCPUは、入力データに応じた処理が定義されたプログラムを実行し始める。例えば、要求転送部224は、検証サーバ200のCPUに含まれるTSCレジスタの値を監視し、TSCレジスタの値が要求データに含まれるクロック数と一致したタイミングで、入力データを投入する。
図5は、業務サーバと検証サーバの他の機能例を示すブロック図である。
上記では、仮想マシンを実行単位101,102にそれぞれ割り当て、ハイパーバイザ130が2つの仮想マシンの動作タイミングを制御する例を説明した。これに対し、共通のOS上で実行される仮想化されていないプロセスまたはスレッドを実行単位101,102それぞれに割り当て、BIOSまたはBIOSのようにCPUの状態を監視できるファームウェアが2つのプロセスの動作タイミングを制御するようにしてもよい。
一例として、上記の業務サーバ100に代えて、業務サーバ100aが用いられる。業務サーバ100aは、プロセス141,142およびBIOS150を有する。
プロセス141,142は、同じプログラムに基づいて起動され、並列に動作する処理単位である。プロセス141は実行単位101に配置され、プロセス142は実行単位102に配置される。ただし、プロセス142では、プロセス141よりも遅れてプロセス141と同じ処理が実行される。プロセス141および実行単位101は先行系と言うことができ、プロセス142および実行単位102は追随系と言うことができる。
BIOS150は、プロセス141,142を制御する。BIOS150は、初期化部151、要求バッファ152、要求転送部153、応答転送部154、エラー検出部155およびデバッグ情報記憶部156を有する。これらのモジュールは、図4に示したハイパーバイザ130に含まれる同名のモジュール(初期化部131など)に対応する。
ただし、以下では図4の構成を前提にして業務サーバ100について説明する。
図6は、要求バッファに格納する要求データの構造例を示す図である。
要求バッファ132に格納される各要求データは、次へのポインタ、前へのポインタ、受付時刻、入力デバイスID、出力デバイスID、データ長および入力データを含む。
次へのポインタは、1つ後の要求データ(新しい要求データ)を指し示すポインタであり、キューの先頭から末尾の方向へリンクを張る。末尾の要求データに含まれる次へのポインタは空(null)である。前へのポインタは、1つ前の要求データ(古い要求データ)を指し示すポインタであり、キューの末尾から先頭の方向へリンクを張る。先頭の要求データに含まれる前へのポインタは空(null)である。
受付時刻は、ハイパーバイザ130がデバイスから入力データを受け付け、先行系の仮想マシン121に入力データを投入するときの時刻である。受付時刻は、クロック数によって表現されており、CPU103のTSCレジスタ103aの値が用いられる。
入力デバイスIDは、入力データを発行したデバイスを識別する識別子である。出力デバイスIDは、入力データに応じて仮想マシン121が生成する出力データの宛先となるデバイスを識別する識別子である。入力データの発行元および出力データの宛先は、入力データを受け付けるときに指定されてもよいし、入力データの種類に応じてハイパーバイザ130が判定してもよいし、実行単位101が実行するプログラムで定義されていてもよい。入力データは、デバイスから受け付けたデータである。例えば、デバイスがキーボードである場合、入力データには押下されたキーを示すキー情報が含まれる。
次に、業務サーバ100および検証サーバ200の動作について説明する。
図7は、システム起動の手順例を示すフローチャートである。
(S10)初期化部131は、業務サーバ100に対する起動要求を検出する。起動要求は、例えば、電源ボタンの押下または起動コマンドの入力を通じて発行される。
(S11)初期化部131は、先行系の実行単位101を起動する。実行単位101のCPU103は、TSCレジスタ103aの初期値をゼロに設定し、クロック信号の進行に合わせてTSCレジスタ103aをカウントアップすることを開始する。初期化部131は、仮想マシン121のプログラム(OSプログラムやドライバプログラムなど)をCPU103に読み込ませ、実行単位101上に仮想マシン121を形成する。
(S12)初期化部131は、業務サーバ100のユーザが指定した遅延時間Δt1を確認する。Δt1は、クロック数として表現されている。Δt1を示す情報は、予め業務サーバ100に記憶されていてもよいし、起動要求に含まれてもよい。
(S13)初期化部131は、実行単位101を起動してからΔt1経過後に、追随系の実行単位102を起動する。例えば、初期化部131は、TSCレジスタ103aの値を確認し、その値がΔt1になったときに実行単位102を起動する。実行単位102のCPU104は、TSCレジスタ104aの初期値をゼロに設定し、クロック信号の進行に合わせてTSCレジスタ104aをカウントアップすることを開始する。これにより、TSCレジスタ104aの値は、TSCレジスタ103aよりΔt1だけ遅れる。初期化部131は、仮想マシン122のプログラム(仮想マシン121と同じもの)をCPU104に読み込ませ、実行単位102上に仮想マシン122を形成する。
図8は、冗長制御の手順例を示すフローチャートである。
(S20)要求転送部133は、業務サーバ100の周辺機器であるデバイスから入力データを受け付ける。例えば、要求転送部133は、入力デバイス118からキー入力についての入力データを受け付ける。また、例えば、要求転送部133は、通信インタフェース116から、受信パケットを含む入力データを受け付ける。
(S21)要求転送部133は、先行系のTSCレジスタ103aの値(Ta)を確認する。なお、TSCレジスタ103aの値は、継続的にCPU103からハイパーバイザ130に通知されてもよい(プッシュ型の通知)。その場合、要求転送部133は、最後にCPU103から通知されたTSCレジスタ103aの値を確認する。
(S22)要求転送部133は、先行系の仮想マシン121に入力データを投入する。入力データの投入は、CPU103または仮想マシン121のOSに対する割り込みとして実現してもよい。実行単位101は、入力データに応じたプログラムを実行し始める。
(S23)要求転送部133は、ステップS21で確認したTa、すなわち、入力データが受け付けられ投入されるときのCPU103から見たハードウェア時刻を、入力データに付加する。また、要求転送部133は、入力データの発行元・出力データの宛先・入力データの長さを確認し、入力デバイスID・出力デバイスID・データ長の情報を入力データに付加する。そして、要求転送部133は、これらの情報を含む要求データを、要求バッファ132に形成されたキューの末尾に追加する。
(S24)要求転送部133は、追随系のTSCレジスタ104aの値(Tb)を確認する。なお、TSCレジスタ104aの値は、継続的にCPU104からハイパーバイザ130に通知されてもよい(プッシュ型の通知)。その場合、要求転送部133は、最後にCPU104から通知されたTSCレジスタ104aの値を確認する。
(S25)要求転送部133は、ステップS21で確認したTaとステップS24で確認したTbの差Δt4=Ta−Tbを算出し、Δt4がゼロ以上であるか判断する。TSCレジスタ103a,104aの差が起動時と同じΔt1であれば、Δt4はゼロ以上になる。ただし、ここでは、CPU103,104が軽微なエラーのため一時停止することや、省電力制御によってクロック周波数が変化することなどにより、TSCレジスタ103a,104aの差がΔt1からずれる可能性を考慮している。Δt4がゼロ以上の場合はステップS26に処理が進み、ゼロ未満の場合はステップS27に処理が進む。
(S26)要求転送部133は、要求バッファ132に形成されたキューの先頭からステップS23の要求データを読み出すと、ステップS24からΔt4だけ経過したタイミングで、要求データに含まれる入力データを追随系の仮想マシン122に投入する。このタイミングとして、要求転送部133は、TSCレジスタ104aの値がステップS24からΔt4進んだことを検出してもよいし、Taになったことを検出してもよい。要求バッファ132から読み出された要求データは、要求バッファ132から削除される。入力データの投入は、CPU104または仮想マシン122のOSに対する割り込みとして実現してもよい。実行単位102は、入力データに応じたプログラム(実行単位101と同じもの)を実行し始める。そして、冗長制御が終了する。
(S27)初期化部131は、先行系の実行単位101を一時停止する。また、要求転送部133は、追随系の実行単位102を停止してリセットする。これにより、CPU104のレジスタやRAM107のデータが破棄される。
(S28)初期化部131は、先行系の実行単位101の状態データを追随系の実行単位102にコピーする。このとき、CPU103のレジスタのデータがCPU104のレジスタにコピーされ、RAM106のデータがRAM107にコピーされる。コピーされるレジスタのデータには、TSCレジスタ103aの値も含まれる。
(S29)初期化部131は、先行系の実行単位101を再開させる。そして、初期化部131は、TSCレジスタ103aの値がTSCレジスタ104aよりもΔt1だけ進んだタイミングで、追随系の実行単位102を再開させる。実行単位101上の仮想マシン121にはステップS22で入力データを投入済みであるため、実行単位101の状態を引き継いだ実行単位102上の仮想マシン121には入力データを投入しなくてよい。要求転送部133は、要求バッファ132に格納された要求データを破棄する。
なお、初期化部131は、定期的にTSCレジスタ103a,104aの値を確認し、その差がΔt1から大きくずれている場合に実行単位102をリセットするようにしてもよい。例えば、初期化部131は、diff=TSCレジスタ103aの値−TSCレジスタ104aの値−Δt1が所定の範囲−Th≦diff≦Th(Thは所定の閾値)に収まっているか判断し、収まっていない場合に実行単位102をリセットする。また、上記のステップS25で用いた判定式は一例であり、TSCレジスタ103a,104aの差がΔt1から大きくずれているか否か判定できる式であればよい。
図9は、要求処理のタイミング例を示すシーケンス図である。
ハイパーバイザ130は、何れかのデバイスから入力データを受け付ける(S30)。すると、ハイパーバイザ130は、実行単位101のTSCレジスタ103aの値Taを確認する(S31)。ハイパーバイザ130は、実行単位101で入力データが処理されるように、仮想マシン121に入力データを投入する。入力データの投入が開始されてから完了するまで、Δt2クロック要するとする(S32)。次に、ハイパーバイザ130は、受け付けた入力データを含む要求データを要求バッファ132に保存する。要求データの保存が開始されてから完了するまで、Δt3クロック要するとする(S33)。
ハイパーバイザ130は、要求バッファ132に要求データを保存し終えると、実行単位102のTSCレジスタ104aの値Tbを確認する(S34)。ハイパーバイザ130は、TSCレジスタ104aの値が、実行単位101に入力データを投入し始めた時点のTSCレジスタ103aの値Taと一致するのを待つ(S35)。ハイパーバイザ130は、TSCレジスタ104aの値がTaになると、実行単位102で入力データが処理されるように、要求バッファ132に保存した入力データを仮想マシン122に投入する。入力データの投入が開始されてから完了するまで、Δt2クロック要する(S36)。
ここで、TSCレジスタ103a,104aの差がΔt1に維持されているとすると、ステップS32が開始されてからステップS36が開始されるまでの遅延時間は、Δt1=Δt2+Δt3+Δt4である。また、Tbはその時点のTSCレジスタ103aの値よりΔt1だけ小さいから、Tb=Ta+Δt2+Δt3−Δt1である。よって、Ta−Tb=Δt1−Δt2−Δt3=Δt4となる。すなわち、ステップS35におけるハイパーバイザ130の待機時間はΔt4=Ta−Tbになる。
ハイパーバイザ130は、実行単位101上の仮想マシン121から入力データに対する出力データを取得する。すると、ハイパーバイザ130は、宛先のデバイスに出力データを転送する(S37)。一方、ハイパーバイザ130は、実行単位102上の仮想マシン122から入力データに対する出力データを取得する。すると、ハイパーバイザ130は、出力データを破棄して何れのデバイスにも転送しない(S38)。追随系の実行単位102は、専らエラー発生時に状態データを得るためにプログラムを実行する。なお、仮想マシン121からの出力データの取得は、仮想マシン122に入力データを投入する前になることもあるし、仮想マシン122に入力データを投入した後になることもある。
図10は、デバッグ情報収集の手順例を示すフローチャートである。
(S40)エラー検出部135は、先行系の実行単位101においてメモリアクセス違反などのソフトウェア上のエラーが発生したことを検出する。
(S41)エラー検出部135は、先行系の実行単位101および追随系の実行単位102を停止する。また、エラー検出部135は、新たな要求データを要求バッファ132に格納することと、要求バッファ132から要求データを読み出すことを禁止する。
(S42)エラー検出部135は、先行系の実行単位101の状態データであるCPU103のレジスタおよびRAM106のデータを、デバッグ情報の一部としてデバッグ情報記憶部136に保存する。データには、TSCレジスタ103aの値も含まれる。
(S43)エラー検出部135は、追随系の実行単位102の状態データであるCPU104のレジスタおよびRAM107のデータを、デバッグ情報の一部としてデバッグ情報記憶部136に保存する。データには、TSCレジスタ104aの値も含まれる。
(S44)エラー検出部135は、要求バッファ132に格納されている要求データを、デバッグ情報の一部としてデバッグ情報記憶部136に保存する。
(S45)エラー検出部135は、実行単位101,102に使用しているチップセットの規格など、実行単位101,102のハードウェア仕様を示すハードウェア構成情報を生成し、デバッグ情報の一部としてデバッグ情報記憶部136に保存する。
図11は、エラー再現の手順例を示すフローチャートである。
(S50)デバッグ情報取得部221は、業務サーバ100においてプログラムを続行できないエラーが発生すると、業務サーバ100からデバッグ情報を取得する。
(S51)環境再現部222は、デバッグ情報の中から実行単位101,102のハードウェア仕様を示すハードウェア構成情報を抽出する。環境再現部222は、ハードウェア構成情報に基づいて、実行単位101,102のハードウェア仕様が検証サーバ200によってサポートされているものか判断する。サポートの有無を判断するため、例えば、環境再現部222は、サポートしているチップセット規格のリストなどのサポート情報を有している。実行単位101,102がサポート対象である場合はステップS52に処理が進み、サポート対象でない場合はステップS55に処理が進む。
(S52)環境再現部222は、デバッグ情報に含まれる追随系の実行単位102の状態データを、検証サーバ200が有する検証用の実行単位に書き込む。すなわち、環境再現部222は、CPU104のレジスタのデータを検証サーバ200のCPUのレジスタに書き込み、RAM107のデータを検証サーバ200のRAMに書き込む。レジスタのデータには、TSCレジスタ104aの値も含まれる。また、環境再現部222は、デバッグ情報に含まれる要求データ(追随系の仮想マシン122にまだ投入されずに要求バッファ132に残っていた要求データ)を要求バッファ223に書き込む。
(S53)要求転送部224は、検証サーバ200が有する実行単位を用いて仮想マシン121が再現されると、要求バッファ223のキューの先頭から順に要求データを読み出す。要求転送部224は、要求データに含まれる受付時刻に応じたタイミングで、要求データに含まれる入力データを仮想マシンに投入する。例えば、要求転送部224は、検証サーバ200が有する実行単位のTSCレジスタの値が、要求データの受付時刻(クロック数)に一致したとき、仮想マシンに入力データを投入する。これにより、検証サーバ200の実行単位は、実行単位101と同じタイミングで実行単位101と同じプログラムを実行することになり、エラー発生前の実行単位101の動作を再現できる。
(S54)検証サーバ200は、検証サーバ200の実行単位の状態(業務サーバ100の実行単位101の状態を再現したもの)を監視し、デバッグ作業を支援する。例えば、検証サーバ200は、実行単位が実行するメモリアクセス命令を監視し、不適切なメモリアクセスを検出する。そして、エラー再現を終了する。
(S55)環境再現部222は、取得したデバッグ情報からエラー発生前の仮想マシン121を再現することに失敗した旨を、検証サーバ200のユーザに通知する。例えば、環境再現部222は、再現失敗を示すメッセージをディスプレイに表示する。
図12は、エラー検出および再現のタイミング例を示す図である。
実行単位101のTSCレジスタ103aの値がT10のとき、入力データ1が仮想マシン121に投入されたとする。すると、受付時刻T10の付加された入力データ1が要求バッファ132に格納される。次に、TSCレジスタ103aの値がT20のとき、入力データ2が仮想マシン121に投入されたとする。すると、受付時刻T20の付加された入力データ2が要求バッファ132に格納される。次に、TSCレジスタ103aの値がT30のとき、入力データ3が仮想マシン121に投入されたとする。すると、受付時刻T30の付加された入力データ3が要求バッファ132に格納される。
一方、実行単位102のTSCレジスタ104aの値がT10のとき、要求バッファ132から入力データ1が読み出されて仮想マシン122に投入される。実行単位101,102が入力データ1を処理し始めるタイミングの差は、Δt1になるよう制御される。また、TSCレジスタ104aの値がT20のとき、要求バッファ132から入力データ2が読み出されて仮想マシン122に投入される。実行単位101,102が入力データ2を処理し始めるタイミングの差は、入力データ1と同様にΔt1に統一される。
ここで、実行単位101において入力データ3の処理中にエラーが発生したとし、エラー発生時のTSCレジスタ104aの値がT25であるとする。すると、TSCレジスタ104aの値がT25の時点における実行単位102の状態データが保存され、また、要求バッファ132に残っている入力データ3が保存される。保存した実行単位102の状態データは、TSCレジスタ103aの値がT25であった過去の(エラー発生前の)実行単位101の状態データと等価であると期待できる。検証サーバ200において仮想マシンの動作を検証する場合、TSCレジスタの値がT25の時点からプログラムが再開され、保存した入力データ3がTSCレジスタの値がT30のときに投入される。
第2の実施の形態の情報処理システムによれば、デバイスから受け付けた入力データがプログラムに従って実行単位101で処理されると、実行単位101から所定のクロック数だけ遅れて、同じ入力データが同じプログラムに従って実行単位102で処理される。実行単位101,102間の遅延時間は、CPU103が有するTSCレジスタ103aおよびCPU104が有するTSCレジスタ104aに保持されるクロック数を用いて管理される。よって、遅延時間を一定に維持することが容易となる。実行単位101,102でタイミング依存の処理が実行されても、2つの実行単位の処理結果を一致させることができる。その結果、実行単位101のエラー発生前の状態を、エラー発生時に取得される実行単位102の状態データを用いて精度よく再現することができる。また、TSCレジスタ103a,104aの差を一定に維持することで、遅延時間の管理が容易となる。
なお、前述のように、第2の実施の形態の情報処理は、情報処理装置10にプログラムを実行させることで実現することができる。第2の実施の形態の情報処理は、業務サーバ100および検証サーバ200にプログラムを実行させることで実現することができる。
プログラムは、コンピュータ読み取り可能な記録媒体(例えば、記録媒体119)に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、FDおよびHDDが含まれる。光ディスクには、CD、CD−R(Recordable)/RW(Rewritable)、DVDおよびDVD−R/RWが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からHDDなどの他の記録媒体(例えば、HDD112)にプログラムを複製して(インストールして)実行してもよい。
10 情報処理装置
11,12 プロセッサ
11a,12a カウンタ
13 制御部

Claims (6)

  1. コンピュータに、
    クロック数または命令数を計数する第1のカウンタを含む第1のプロセッサと、クロック数または命令数を計数する第2のカウンタを含む第2のプロセッサのうち、前記第1のプロセッサにコードを実行させ、
    前記第1および第2のカウンタの値に基づいて、前記第1のプロセッサから所定のクロック数または命令数だけ遅れて前記第2のプロセッサに前記コードを実行させる、
    処理を実行させる制御プログラム。
  2. 前記第2のプロセッサを前記第1のプロセッサより前記所定のクロック数または命令数だけ遅れて起動することで、前記第1のカウンタの値と前記第2のカウンタの値とを前記所定のクロック数または命令数だけずらす、請求項1記載の制御プログラム。
  3. 前記第1のカウンタの値と前記第2のカウンタの値の差が所定の条件を満たさないときは、前記第1のプロセッサの状態を前記第2のプロセッサにコピーし、前記第1のカウンタが前記所定のクロック数または命令数だけ進むのを待って前記第2のプロセッサを再開する、請求項1または2記載の制御プログラム。
  4. 前記コードに従って前記第1のプロセッサにデータを処理させるとき、前記第1のカウンタの値を前記データに付加してバッファに格納し、
    前記第2のプロセッサに前記データを処理させる前に前記第1のプロセッサでエラーが発生した場合、前記バッファに格納された前記データを含むエラー情報を出力する、
    請求項1乃至3の何れか一項に記載の制御プログラム。
  5. コンピュータが実行する制御方法であって、
    クロック数または命令数を計数する第1のカウンタを含む第1のプロセッサと、クロック数または命令数を計数する第2のカウンタを含む第2のプロセッサのうち、前記第1のプロセッサにコードを実行させ、
    前記第1および第2のカウンタの値に基づいて、前記第1のプロセッサから所定のクロック数または命令数だけ遅れて前記第2のプロセッサに前記コードを実行させる、
    制御方法。
  6. クロック数または命令数を計数する第1のカウンタを含む第1のプロセッサと、
    クロック数または命令数を計数する第2のカウンタを含む第2のプロセッサと、
    前記第1のプロセッサにコードを実行させ、前記第1および第2のカウンタの値に基づいて、前記第1のプロセッサから所定のクロック数または命令数だけ遅れて前記第2のプロセッサに前記コードを実行させる制御部と、
    を有する情報処理装置。
JP2014018607A 2014-02-03 2014-02-03 制御プログラム、制御方法および情報処理装置 Ceased JP2015146116A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014018607A JP2015146116A (ja) 2014-02-03 2014-02-03 制御プログラム、制御方法および情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014018607A JP2015146116A (ja) 2014-02-03 2014-02-03 制御プログラム、制御方法および情報処理装置

Publications (1)

Publication Number Publication Date
JP2015146116A true JP2015146116A (ja) 2015-08-13

Family

ID=53890315

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014018607A Ceased JP2015146116A (ja) 2014-02-03 2014-02-03 制御プログラム、制御方法および情報処理装置

Country Status (1)

Country Link
JP (1) JP2015146116A (ja)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6125254A (ja) * 1984-07-13 1986-02-04 Hitachi Ltd プログラムのデバツグ方式
JPH0736720A (ja) * 1993-07-20 1995-02-07 Yokogawa Electric Corp 二重化コンピュータ装置
JP2001060159A (ja) * 1999-08-24 2001-03-06 Hitachi Ltd 計算機システムの高信頼化方法
JP2005165599A (ja) * 2003-12-02 2005-06-23 Nec Corp 計算機システムおよび状態取得方法ならびに状態取得プログラム
JP2008146447A (ja) * 2006-12-12 2008-06-26 Nec Corp フォールトトレラントコンピュータ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6125254A (ja) * 1984-07-13 1986-02-04 Hitachi Ltd プログラムのデバツグ方式
JPH0736720A (ja) * 1993-07-20 1995-02-07 Yokogawa Electric Corp 二重化コンピュータ装置
JP2001060159A (ja) * 1999-08-24 2001-03-06 Hitachi Ltd 計算機システムの高信頼化方法
JP2005165599A (ja) * 2003-12-02 2005-06-23 Nec Corp 計算機システムおよび状態取得方法ならびに状態取得プログラム
JP2008146447A (ja) * 2006-12-12 2008-06-26 Nec Corp フォールトトレラントコンピュータ

Similar Documents

Publication Publication Date Title
US9495233B2 (en) Error framework for a microprocesor and system
TWI588649B (zh) 硬體修復方法、硬體修復系統以及計算機可讀取儲存裝置
US8639984B2 (en) Checkpoint debugging using mirrored virtual machines
JP2017517060A (ja) 障害処理方法、関連装置、およびコンピュータ
US9483314B2 (en) Systems and methods for fault tolerant batch processing in a virtual environment
US20070088988A1 (en) System and method for logging recoverable errors
US9329958B2 (en) Efficient incremental checkpointing of virtual devices
US20120174112A1 (en) Application resource switchover systems and methods
US7613861B2 (en) System and method of obtaining error data within an information handling system
TWI632462B (zh) 開關裝置及偵測積體電路匯流排之方法
US20140188829A1 (en) Technologies for providing deferred error records to an error handler
JP2009289116A (ja) 異常検出方法、異常検出プログラム及び情報処理装置
JP2010086364A (ja) 情報処理装置、動作状態監視装置および方法
US8122176B2 (en) System and method for logging system management interrupts
US20150121145A1 (en) Synchronized debug information generation
US20150317214A1 (en) Resource integrity during partial backout of application updates
CN111221800A (zh) 数据库迁移方法、装置、电子设备及存储介质
JP2016085728A (ja) デバイス故障後のコンソールメッセージ回収方法およびシステム
US20210081234A1 (en) System and Method for Handling High Priority Management Interrupts
US20200218612A1 (en) Kernel reset to recover from operating system errors
US10635554B2 (en) System and method for BIOS to ensure UCNA errors are available for correlation
US9430306B2 (en) Anticipatory protection of critical jobs in a computing system
CN115495278B (zh) 异常修复方法、设备及存储介质
JP2011076344A (ja) 情報処理装置,情報処理装置の制御方法および制御プログラム
JP2015146116A (ja) 制御プログラム、制御方法および情報処理装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161004

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170821

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170829

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171016

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171107

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20180327