(57)【要約】【課題】  ログやトレースの書込みを停止させずに安全に読み出すことにある。【解決手段】  ログ及びトレース読出し前に読出対象領域を上書き禁止に設定し、バッファに書き込むにあたり、書込位置が上書き消去禁止位置との重複した場合に任意の読出先領域にログ及びトレースを先に読み出してからログ及びトレースを上書きする。任意の領域にログ及びトレースを読出した後に、読出した領域内のログ及びトレース上書きを検知した場合、任意の領域に読み出した上書き前のログ及びトレースを識別する。そして、上書き前のログ及びトレースをバッファに記録した順序に従い格納する。【効果】  ログ及びトレースを記憶するバッファヘの書込みを停止させずに、読出し要求を受けた時点でバッファに記録されているログ及びトレースを読み出すことが可能となる。【選択図】図１
2008299360.tif 000002
【特許請求の範囲】
【請求項１】
トレース及びログ等の履歴情報を読出す動作を行い、
前記読み出しに係る記憶エリアに、書き込む動作が行われるのを検知し、
前記書き込み動作が検知されると前記読み出しに係る情報を他の記憶エリアに書き込む履歴情報管理方法。
【請求項２】
請求項１において、前記履歴情報は、複数のプロセッサに共有される記憶領域に記憶され、前記読み出しは、所定のプロセッサに係る動作であり、前記書き込みは他のプロセッサに係る動作であり、前記複数のプロセッサは並列にタスクが実行可能である履歴情報管理方法。
【請求項３】
請求項２において、前記履歴情報は、前記記憶エリアに記憶された順序に従って記憶される履歴情報管理方法。
【請求項４】
請求項２において、前記読み出しに係る記憶エリアの情報は、書き込みの前に保護条件データとして記憶され、前記記憶エリアヘの書き込み動作の検知は、前記保護条件データを参照してなされる履歴情報管理方法。
【請求項５】
請求項４において、前記記憶エリアの情報は、記憶領域における上書禁止位置を表す情報である履歴情報管理方法。
【請求項６】
前記履歴情報はバッファに記憶され、
前記保護条件データは、上書きによる消去を禁止する情報であると共に、前記履歴情報を読出す要求を表すデータであり、
前記履歴情報を前記バッファに書き込むにあたり、前記保護条件データを参照し、書込位置が上書き消去禁止位置と重複しているかどうかを検証し、重複を検知した場合に任意の読出先領域に履歴情報を先に読み出してから上書きをおこない、
前記履歴情報を読出した後に、読出した領域内で上書きされていることを検証し、上書きを検知した場合に、該履歴情報を上書きするときに任意の領域に読み出した上書き前の履歴情報を識別し、
前記識別した該履歴情報を、前記バッファに記録した順序に従い、任意の領域に格納する履歴情報管理方法。
【請求項７】
請求項６において、
任意の読出先領域に履歴情報を読み出す前に、該履歴情報が上書きされていることを検証し、検知時に該履歴情報の読出しを中止し、該履歴情報を上書きする前に、任意の読出先領域に読み出した履歴情報を、読み出した履歴情報として扱う履歴情報管理方法。
【請求項８】
請求項７において、
前記保護条件データに、次に読み出すべき履歴情報の位置を表す読出位置情報を設け、
前記読出位置情報を更新後、更新前の該読出位置情報が示していた位置の履歴情報を読み出し、
前記読出位置情報を記憶し、該読出位置情報が示す位置の履歴情報を読出し後に、記憶した読出位置情報と現在の読出位置情報とが異なっていることを検知し、読み出した該履歴情報が上書きされていると判定する履歴情報管理方法。
【請求項９】
請求項６において、
各履歴情報はユニークな番号を記録する番号領域を備え、
履歴情報の書込みの最初に、前記番号領域に番号を書き込み、
履歴情報読出し後に、読出しを終えた位置にある履歴情報の前記番号領域を調べ、読出しを要求した時点で前記バッファに書き込まれている履歴情報に未割り当ての番号が該番号領域に記録されているかどうかを検証し、該番号領域に未割り当ての番号が記録されていることを検知した場合、読出した該履歴情報が上書きされていると判定する履歴情報管理方法。
【請求項１０】
請求項６において、
履歴情報は読出し要求があるときに書き込まれたことを記録するフラグ領域を備え、
履歴情報書込みの最初に、前記フラグ領域に書き込み、
履歴情報読出し後に、読み出した履歴情報前記フラグを調べ、フラグが設定されていることを検知し、読出した該履歴情報が上書きされていると判定する履歴情報管理方法。
【請求項１１】
請求項６において、
前記プロセッサの個数と同数の、前記保護条件データを設定する保護条件データ記憶領域を備え、
前記保護条件データの設定を開始してから、履歴情報の読出を全て完了するまでの間、該読出に係る前記プロセッサの使用権を明け渡すことなく実行されることをおこない、
前記保護条件データを設定するにあたり、その時点で未使用の前記保護条件データ記憶領域のひとつを選択し、該保護条件データ記憶領域に保護条件データを設定する履歴情報管理方法。
【請求項１２】
請求項１１において、
前記保護条件データ記憶領域に記憶されている複数の前記保護条件データ全てを参照し、それぞれの該保護条件データが表す上書き消去禁止位置と書込位置が重複しているかどうかを検証する履歴情報管理方法。
【請求項１３】
請求項６において、
読出対象領域に含まれる履歴情報のうち１個を読出し、読み出した履歴情報が前記バッファ上で上書きされていることを検証する手順を、該読出対象領域に含まれる履歴情報の個数と同じ回数繰り返す履歴情報管理方法。
【請求項１４】
請求項６において、
読出対象領域の少なくとも一部を含む領域を読出し、読み出した領域に含まれる履歴情報が前記バッファ上で上書きされていることを検証する手順を、読出対象領域全域を読み出すまで繰り返す履歴情報管理方法。
【請求項１５】
トレース及びログ等の履歴情報を読出す動作を行う手段と、
前記読み出しに係る記憶エリアに、書き込む動作が行われるのを検知する手段と、
前記書き込み動作が検知されると前記読み出しに係る情報を他の記憶エリアに書き込む手段を有することを特徴とする履歴情報管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、履歴情報管理方法及び履歴情報管理装置に係り、特に、ログやトレース等の履歴情報の書込み，読出しについて安全性の向上が可能な履歴情報管理方法及び履歴情報管理システムに関する。
【背景技術】
【０００２】
計算機システムにおいて、システム自身の動きを表すログやトレースを記録することが行われる。システムに予期せぬ障害が発生したとき、その直前に記録されたログやトレースを読むことで、障害に至るまでのシステムの動きがわかり、障害の原因を特定しやすくなる。システムの記憶領域の大きさには限りがあるため、通常、ログやトレースを記録するためのバッファを用意し、バッファの末尾までログやトレースを記録し終えると、再び先頭から、既に記録されたデータを上書きして記録を続ける方法をとる。
【０００３】
特に、処理を実行する能力を持つプロセッサを複数持ち、複数の処理を並行して行うことができるマルチプロセッサシステムでは、記憶領域上の同一箇所に対して複数のプロセッサが同時に読出しや書込みを行う可能性があり、書き込まれている最中に読み出すと、正しいデータを読み出すことができないので、問題が大きい。
【０００４】
マルチプロセッサを用いた制御の例は例えば特開２００６−２５９８６９号に記載されている。
【０００５】
【特許文献１】特開２００６−２５９８６９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
前述のように、ログやトレースの書込みは既に記録されたデータを上書きして行うため、記録されたログやトレースを読み出すときに、例えば、他のプロセッサによって上書きされないようにする必要がある。
【０００７】
これを解決する最も単純な方法は、読出しを行う間、ログやトレースの書込みを停止することである。しかし、ログやトレースを記録せずにシステムを動かし続けると、その間に発生する障害の解析が困難になる。
【０００８】
本発明の目的は、システム全体の動作の低下を避けつつ、なお、ログやトレース等の履歴情報を安全な取得が可能な履歴情報管理方法及び履歴情報管理システムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、本発明では、トレース及びログ等の履歴情報を読出す動作を行い、読み出しに係る記憶エリアに書き込む動作が行われるのを検知し、書き込み動作が検知されると読み出しに係る情報を他の記憶エリアに書き込むように構成した。
【発明の効果】
【００１０】
本発明によれば、システム全体の動作の低下を抑制しつつ、ログやトレース等の履歴情報の取得が安全におこなえるという効果が得られる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施する形態の例について、図面を用いて説明する。まず、本実施の形態の概略を参考例と対比して説明する。
【００１２】
参考例の概要を図１５（１）に示す。ログやトレース（以下、本明細書では、ログ及びトレースを総称して履歴情報と称する）の記録を停止させずにバッファを読み出すための技術として、ロックを用いて排他制御を行う方法を適用することが考えられる。この方法では、読出処理はまず最初に、バッファを使用することをロックというデータ構造に書込む。そして、読出しを終えると、バッファの使用を終えたことをロックに書き込む。一方、他のプロセッサで実行を開始した書込手段は、ロックに書き込まれた内容をチェックし、読出しが行われていることを知ると、読出しを終えるまでバッファヘの書込みを遅延する。そして、読出手段によってロックが書き換えられ、読出しを終えたことを確認できた時点で、遅延していたバッファヘの書込みを行う。この方法を用いれば、読出処理と書込処理がバッファの同じ領域を同時にアクセスすることを防げる。この方法の問題点は、読出手段がバッファを読み出している間、バッファヘの書込みを行う処理に遅延が発生することである。書込みを行う処理が長期にわたって遅延し、システム全体の性能が低下する。
【００１３】
他の参考例を図１５（２）に示す。データを記録するバッファを複数に分けて管理し、データを読み出すときは、バッファの一部だけを上書き禁止にし、残りは他のプロセッサがデータを書き込むための領域として書込み可能とすることも行われている。この方法によれば、ログやトレースの記録を停止せずに、記録されたログやトレースが記録されたバッファの一部を安全に読み出すことが可能となる。この方法の問題点は記録されている全てのデータを読み出せないことである。バッファの一部を書込み処理で使用するため、その部分を読出すことはできない。従って、障害解析の有力な手がかりとなるデータの一部を読み出せないまま、上書きによって消失してしまう。
【００１４】
これに対して、実施例におけるログ及びトレース採取方法は、図１のような構成をとる。
【００１５】
システムは複数のプロセッサ１を備え、各プロセッサ１は独立してタスク２を実行する。従って、システム上では、プロセッサ１と同数のタスク２は同時に動作する。また、システムは全てのプロセッサ１がアクセスできる共有の記憶領域３を備え、任意のプロセッサ１が実行する任意のタスク２は自由にこの記憶領域３を読み書きする。
【００１６】
ログ及びトレースを記録するためのバッファ４は記憶領域３上に存在する。このバッファは単一でも良いし、複数あっても良い。
【００１７】
バッファ４からログ及びトレースを読み出すために、任意のプロセッサ１は読出手段５を実行する。読出手段５は、まず、保護条件データ６を設定して、読み出そうとするログ及びトレース全ての上書きによる消去を禁止する。
【００１８】
書込手段８は、任意のプロセッサ１上で任意のタスク２によって実行され、ログ及びトレースをバッファ４に書き込む。このとき、ログ及びトレースを書き込もうとする位置に既にある過去のログ及びトレースが、保護条件データ６によって上書きによる消去を禁止されているか否かを判定する。もし、上書きしようとするログ及びトレースが上書き消去禁止であれば、上書きを行う前に読出しを行う。一方、上書きしようとするログ及びトレースが上書き消去を禁止されていなければ、既に記録されているログ及びトレースをそのまま上書きする。
【００１９】
読出手段５は保護条件データ６を設定したあと、保護条件データ６に合致するログ及びトレースを全て読み出す。
【００２０】
このとき、書込手段８が別のプロセッサ１で並列に実行され、書込みを行うため、読出手段５は上書きされたログ及びトレースを読み出す可能性がある。上書きされたログ及びトレースを読み出すことを回避するため、読出しの前後に、ログ及びトレースが上書きされているかどうかを判定する。上書きされていることを検出した場合、そのログ及びトレースを書き込んだ書込手段８によって読み出されたログ及びトレースを読み出すことによって、上書き前のログ及びトレースを読み出す。この方法によれば、書込手段８を実行するプロセッサ１の動作を停止することなく、読み出そうとするログ及びトレースを全て読み出すことが可能となる。
【００２１】
上記構成によるログ及びトレースの採取の流れを、図２を参照しながら、システムの動作状態によって場合分けして説明する。
【００２２】
まず、読出し要求がなく、断続的にログ及びトレースの書込みが行われている状態での動作を説明する（図２（１））。書込手段８は、まず、保護条件データ６を参照し、書込みを行う位置に既にあるログ及びトレースが上書きによる消去を禁止されていないか確認する。禁止されていないことを確認すると、その位置にログ及びトレースを書き込む。このとき、書込み位置に既にあったログ及びトレースをそのまま上書きする。
【００２３】
次に、あるタスク２がログ及びトレースの読出しを始めるときの動作を説明する（図２（２））。タスク２は読出手段５を実行し、保護条件データ６に条件を設定する。条件を設定することによって、バッファ４に記録されたログ及びトレースの上書きによる消去は禁止される。
【００２４】
次に、保護条件データ６が設定された状態で、任意のタスク２がログ及びトレースの書込みを行う場合の動作を説明する（図２（３））。タスク２によって書込手段８が実行されると、まず、保護条件データ６を参照し、書込みを行う位置に既に存在するログ及びトレースが上書きによる消去を禁止されていないか確認する。禁止されていなければ、書込手段８はそのまま上書きを行う。一方、上書きによる消去を禁止されている場合は、上書きしようとしているログ及びトレースを含む領域に存在するデータを読み出してから、上書きする。従って、保護されたログ及びトレースを上書きするときは、上書き前にあるログ及びトレースは消去されず、任意の領域に読み出される。
【００２５】
次に、保護条件データ６が設定された状態で、読出手段５を実行したタスク２がそのまま読出手段５を用いて読み出すべきログ及びトレースを全て読み出す場合の動作を説明する（図２（４））。一般のタスクは前述のように、既に記録されたログ及びトレースを必要に応じて読み出しながらログ及びトレースを上書きしていく。一方、読出手段５を実行したタスクは、引き続き、読み出そうとするログ及びトレースが上書きされることを検証しながら、既に書き込まれたログ及びトレースを読み出していく。もし上書きされていれば、バッファ４から読み出したログ及びトレースではなく、そのログ及びトレースを上書きした書込手段８が上書きの直前に読み出したログ及びトレースを識別し、これを読み出す。これによって、全てのログ及びトレースを読み出すことができる。
【００２６】
本実施例では、マルチプロセッサシステムにおいても上書き前のデータを正しく読出すため読出し後に上書きの検証を行う。ログ及びトレース採取方法の動作を表す図を図１６に示す。図１６動作パターン（１）及び動作パターン（２）は、上書きを検証してからログ及びトレースを読み出すまでの間に、そのログ及びトレースの上書きが発生しない場合の動作を表す。上書き前のログ及びトレースを正しく読み出すことができる。図１６動作パターン（３）は、読出手段が上書きの検証を終えてから、そのログ及びトレースを読み出すまでの間に、書込手段がデータを上書きする場合の動作を表す。読出後の上書き検証によって、書込手段が上書きを開始したことを検知し、書込手段によって読み出されたログ及びトレースを読み出すことで、上書き前のログ及びトレースを正しく読み出すことができる。上書きの検証は読出し後に一度行うだけで良いが、読出し前の検証を行わない場合、既に上書きされたログ及びトレースを読み出してしまい効率が低下するため、読出し前の検証を行う方が望ましい。
【００２７】
上記の構成によれば、マルチプロセッサシステムにおいて、ログやトレースを記憶するバッファヘの書込みを停止させずに、読出し要求を受けた時点でバッファに記録されている全てのログ及びトレースを読み出すことが可能となる。
【００２８】
次に、本発明の具体的な例としての実施形態を、図面を参照して説明する。
【００２９】
図３は、複数のプロセッサ１とそれらのどのプロセッサも任意の位置に読み書きが可能な共有の記憶領域３を備え、プロセッサ１がそれぞれ任意のタスク２を独立して実行することができるマルチプロセッサシステムにおいて、本発明の一実施形態によるログ及びトレースデータ採取方法が適用される、タスクの動作トレース採取機能の構成図である。
【００３０】
本実施例に係るシステムにおける動作トレース採取機能の目的は、システム上で動作するあるタスク２がエラーを起こして異常終了するとき、その原因究明を容易にするため、エラー検出直前に各プロセッサがどのような処理を実行していたかを示す情報を異常終了処理の中で自動的に記録することである。
【００３１】
本実施例に係るマルチプロセッサシステムの構成を述べる。
【００３２】
システムはｎ個のプロセッサ１と、全てのプロセッサ１がアクセス可能な共有の記憶領域３とを有し、プロセッサ１はそれぞれ独立に、任意のタスク２を実行できる。また、各プロセッサ１と対になるように、トレースバッファ４が記憶領域３に配置される。タスク２は、所定の処理を実行したこと表す一定のサイズのトレースをトレースバッファ４に書き込むため、書込手段８を実行する。書込手段８は、書込手段８自身を実行しているプロセッサ１を知り、そのプロセッサ１と対になるトレースバッファ４に、トレースを書き込む。一方、あるプロセッサ１で実行されているタスク２がプログラムエラーを起こすと、そのエラー処理の一部として読出手段５を実行し、読出要求を全てのプロセッサ１に伝える。このとき、各プロセッサ１に読出要求を伝える手段として、読出手段５は保護条件データ６にデータを書き込む。保護条件データ６にデータを書き込んだ時点で、バッファに存在する全てのトレースを上書きによって消去することは禁止される。各プロセッサ１が実行する書込手段８は、トレースの上書きが禁止されていることを検知して、トレースを読み出してエラー情報記録エリア１０に記録する処理を上書き前に行う。
【００３３】
以下、上記マルチプロセッサシステムにおいて、本発明のログ及びトレースデータ採取方法に係るタスクの動作トレース採取機能に関するデータ構造を図４を用いて詳述する。
【００３４】
図４（１）は、トレースを記録するトレースバッファ４のデータ構造の詳細を表す。トレースバッファ４に記録されるトレースは、全て等しいサイズであり、そのサイズをｓとする。トレースバッファはサイズｓの区画がＮ個並ぶ列とする。従って、トレースバッファにはＮ個のトレースを同時に記録できる。区画には、先頭から順に０，１，…，（Ｎ−１）の区画番号を与える。任意の整数ｉをＮで除算し、その剰余を区画番号とみなすことで、任意の整数ｉで区画を一意に示すことができる。このような整数ｉをインデックスと呼ぶこととする。インデックスをｉ、トレースバッファの先頭アドレスをｈとすると、インデックスｉが表す区画の先頭アドレスｗ（ｉ）は式１で示される。
【００３５】
（式１）
ｗ（ｉ）＝ｈ＋（ｉ％Ｎ）×ｓ
（但し、％は第１項を第２項で除算したときの剰余を表す演算子とする）
式１によって、インデックスからトレースバッファ内のアドレスを得ることができる。書込インデックス４１は、次にトレースを書き込む区画を表すインデックスであり、トレースを書き込むたびに単調に１ずつ増加する。従って、トレースバッファ４の末尾の区画にトレースを書き込むと、次にトレースが書き込まれる区画はトレースバッファの先頭となる。
【００３６】
図４（２）は、保護条件データ６のデータ構造の詳細を表す。保護条件データ６はプロセッサ１ごとに割り当てられる。保護条件データ６はテーブルであり、あるプロセッサ１から要求された読出要求についての情報を保存するカラム９０の集合として構成される。従って、カラム数はシステムが備えるプロセッサ数ｎに等しい。各カラム９０は、読出先アドレス９１と、読出インデックス９２と、読出カウンタ９３と、の３個のデータから成る。読出先アドレス９１は、読み出したトレースの出力先を表す。読出インデックス９２と読出カウンタ９３の組は、ある区画にあるトレースが上書きによる消去から保護されているか否かを判定するための情報である。読出インデックス９２は、保護されたトレースのうち、最初に読み出すべきトレースが記録されているトレースバッファ４の区画を表す。読出カウンタ９３は、保護されたトレースのうち、既に読出しを終えたトレースの数を表す。
【００３７】
図４（３）は、エラー情報記録エリア１０のデータ構造の詳細を表す。エラー情報記録エリア１０は所定の個数のエラー情報１１を保存することができる。エラー情報１１の先頭には、一般的なエラーの情報が記録される。この部分をエラー情報ヘッダ１１１と呼び、全てのエラー情報ヘッダ１１１のサイズは固定値Ｈとする。エラー情報ヘッダ１１１の後には、エラー発生直前に各プロセッサ１が実行した処理を表すトレースを記録する。従って、この部分には、エラー発生時点で各トレースバッファ４に存在するトレースを記録する。各トレースバッファ４の内容を記録するそれぞれの区画をトレースバッファスナップショット１１２と呼ぶこととする。そのサイズはトレースバッファ４のサイズ（Ｎ×ｓ）に等しい。コピーするトレースバッファ４と対になるプロセッサ１のプロセッサ番号をｐ（プロセッサ番号の最小値は１、最大値はプロセッサ個数とする）、コピー先のエラー情報１１の先頭アドレスｅとすると、各トレースバッファのコピー先アドレスｒ（ｐ，ｅ，ｃ）は、以下の式２で求められる。
【００３８】
（式２）
ｒ（ｐ，ｅ，ｃ）＝ｅ＋Ｈ＋（ｐ−１）×（Ｎ×ｓ）＋（ｃ×ｓ）
エラー情報先頭アドレスｅは、読出手段５による読出要求の際、前述の読出先アドレス９１に記録される。
【００３９】
次に、本実施例における書込手段８について、図５に示すフローチャートを交え、詳述する。
【００４０】
プロセッサ番号ｐのプロセッサ１で実行されるタスク２が書込手段８を実行すると、書込手段８は、そのプロセッサ１と対となるトレースバッファ４を書込先のバッファとして選択し、書込みを試みる。トレースバッファ４や保護条件データ６はプロセッサ１ごとに存在するが、説明文を平易とするため、以降の書込手段８に関する説明において、これらの名詞は、書込手段８を実行するプロセッサ１と対となるものを指すこととする。
【００４１】
書込手段８の処理手順は、大きく分けて、書込みを行う区画の選択（ステップｓｗ１）、書込みを行う区画に既にあるトレースに対する保護条件データ６の判定（ステップｓｗ２）、保護条件データ６に合致するトレースの読出し（ステップｓｗ３）、そして、選択した区画へのトレースの書込み（ステップｓｗ４）の４つとなる。
【００４２】
ステップｓｗ１では、今回トレースを書き込む区画と、次回トレースを書き込む区画とを決定するため、現在の書込インデックス４１を記憶し、同時に書込インデックス４１を１増加させる。記憶した値は今回トレースを書き込む区画を表し、書込インデックス４１は次回トレースを書き込む区画を表す値となる。
【００４３】
次に、ステップｓｗ２，ステップｓｗ３の一連の処理を、保護条件データ６の各カラム９０に対して実行する。
【００４４】
ステップｓｗ２では、今回トレースを書き込む区画に既にあるトレースが保護されているか判定するため、後述の保護条件判定処理Ａを実行し、保護されていればステップｓｗ３に進み、保護されていなければ、判定するカラム９０をかえて、再度ステップｓｗ２を実行する。保護条件データ６の設定有無を表す読出インデックス９２が全く設定されていなければ（０が設定されていれば）、読出し処理は行わず、ステップｓｗ４を実行する。
【００４５】
ステップｓｗ３では、今回トレースを書き込む区画に既にあるトレースをエラー情報記録エリア１０に保存するため、読出処理Ａ７ａを実行し、今回の書込区画にあるトレースをエラー情報記録エリア１０に保存する。その位置は、式２を用いて導出される。その後、未判定のカラム９０があれば、それを判定対象にかえてステップｓｗ２に戻る。全てのカラム９０に対して上記処理を終えたら、ステップｓｗ５に進む。
【００４６】
ステップｓｗ５では、ステップｓｗ１にて決定した区画にトレースを書込み、書込手段８の実行を完了する。
【００４７】
上記ステップｓｗ２の保護条件判定処理のフローチャートを図６に示す。この処理では保護条件データ６に含まれるカラム９０のひとつを対象に判定を行う。この処理の実行を始める際、書込手段８によって判定を行うカラム９０のひとつが選択されている。
【００４８】
まず、ステップｓｗ２１にて選択されたカラム９０の読出インデックス９２の値が０であるか判定する。この値が０であれば、それは保護条件データ６が設定されていないことを表すため、上書きされるトレースは保護対象外と判定し、保護条件判定処理を終了する。さもなくば、次にステップｓｗ２２を実行し、読出カウンタの値を一時領域ｃに記憶して、ステップｓｗ２３に進む。ステップｓｗ２３では、これから上書きしようとする区画に既に存在するトレースが保護対象であるかを調べる。読出インデックス９２と読出カウンタ９３との和が、ステップｓｗ１で記憶した書込インデックス４１の値と異なれば、その区画は保護対象外と判定して処理を終了する。続いて、ステップｓｗ２４にて、読出カウンタ９３の値がトレースバッファ４の総区画数Ｎ以上であるか調べる。読出カウンタ９３がＮに達していれば、読出要求が設定した保護条件データ６に合致するトレース全ては既に読み出され、保護が完了しているため、記憶した書込インデックス４１が表す区画は保護対象外と判定して処理を終了する。ステップｓｗ２５では、ステップｓｗ２２からここまでの判定をする間に、他のプロセッサ１によって読出しが行われたかを判定するため、現在の読出カウンタ９３の値と、ステップｓｗ２２で記憶した読出カウンタの値ｃを比較する。これらの値が異なっていれば、他のプロセッサ１によって読出しが行われたため、読出しを行う必要はないとして、保護対象外と判定し、この処理を終える。さもなくば、読出カウンタ９３の値を１加算し、書込インデックス４１が示す区画にあるトレースは保護対象であり読出しが必要と判定して処理を終える。
【００４９】
以上の手順によって、保護条件データ６に合致し、かつ、まだ読み出されていないトレースを、上書きする前に確実に読み出す方法が実現される。
【００５０】
次に、本実施例の読出手段５の動作手順を詳述する。
【００５１】
図７は、読出手段５のフローチャートである。
【００５２】
読出手段５では、全てのトレースバッファ４の読出しを要求するため、保護条件データ６に値を設定することによって、保護条件を設定すると同時に読出に必要な情報を設定する。また、読出しを要求した後、読出処理Ｂ７ｂを実行することによって、トレースバッファ４の各区画を読み出すことも行う。
【００５３】
保護条件データ６にアクセスするとき、読出手段５を実行しているプロセッサ１に対応するカラムのみを扱う（例えば、読出手段５をプロセッサＡ１ａで実行するときにアクセスする各保護条件データ６のカラム９０は、プロセッサＡ１ａ読出情報カラム９０ａだけである）。このことを前提とし、以降、読出手段５に関する説明では、カラム９０と表現した場合、読出手段５を実行するプロセッサに対応するカラム９０を指すこととする。
【００５４】
読出手段５は、まず、各保護条件データ６に対して、ステツプｓｒ１，ステップｓｒ２を繰り返す。これにより、全ての保護条件データ６のカラム９０に値が設定され、読出要求が完了する。ステップｓｒ１では、カラム９０の読出先アドレス９１に、エラー情報１１の先頭アドレスを設定する。これにより、読出処理Ａ７ａ，読出処理Ｂ７ｂによって読み出したトレースを出力する先が決定する。次にステップｓｒ２にて、読出インデックス９２が書き込まれる。読出インデックス９２の値は、その時点での書込インデックス４１の値となる。保護条件データ６の設定有無は読出インデックス９２が設定されているかどうかで判断されるため、以上の処理を各保護条件データ６に行うことで、各トレースバッファ４に対して読出要求が完了したことになる。
【００５５】
全てのトレースバッファ４に対して読出要求が完了したら、続いて、全てのトレースバッファ４を読み出す処理を行う。後述の読出処理Ｂ７ｂを実行するステップｓｒ３を各トレースバッファ４に対し、繰り返す。
【００５６】
読出処理Ｂ７ｂは、読出手段５によって、トレースバッファ４ごとに実行される。まず、ステップｓｒ３１において、現在の読出カウンタ９３を一時領域ｃに記憶する。そして、ステップｓｒ３２，ステップｓｒ３３を、ｃがＮ以上となるまで繰り返す。ステップｓｒ３２では、後述の判定・読出処理を実行し、（読出インデックス９２＋読出カウンタ９３）をインデックスとする区画のトレースを読み出すべきかどうか判定して、必要であれば読出処理を行う。ステップｓｒ３３では、他の区画を読み出すため、再度、その時点の読出カウンタ９３の値を読み出して、一時領域ｃに記憶する。読出カウンタ９３の値がＮ以上となったら、読出要求によって設定された保護条件データ６に合致するトレースはすべて読み出したと判定でき、保護条件データ６を初期化するため、ステップｓｒ３４，ステップｓｒ３５を実行する。ステップｓｒ３４では、読出インデックス９２を０に設定する。これによって、保護条件データ６は未設定の状態となり、以降に実行される書込手段８は、判定処理を行わずに上書きを実行するようになる。ステップｓｒ３５では、次回の読出要求に備えて、読出カウンタ９３を０に設定する。
【００５７】
次に、前述の読出処理Ｂ７ｂのステップｓｒ３２にて実行される判定・読出処理について説明する。判定・読出処理の最初のステップｓｒ３２１は、読出インデックス９２と読出カウンタ９３を記憶した値ｃとの和をインデックスとみなして得られる区画にあるトレースを、一時領域（本実施例ではスタック）に保存する。続いて、ステップｓｒ３２２にて、読出カウンタ９３が更新されているか、すなわち、この時点での読出カウンタ９３の値と、先に記憶した値ｃが等しいかを調べる。もし異なれば、読出カウンタ９３は書込手段８の過程で実行されるステップｓｗ２５によって更新されており、読み出すべき上書き前のトレースはその後実行されるステップｓｗ３によって読み出されることが決定しているか、または既に読み出されているため、これを上書き前のトレースと識別し、読出手段は一時領域に記憶したトレースを破棄することだけを行い、ステップｓｒ３２４に進む。さもなくば、ステップｓｒ３２３にて、一時領域に記憶したトレースをエラー情報記録エリア１０に出力する。続いて、ステップｓｒ３２４では、ステップｓｒ３２２と同様にして、再度読出カウンタ９３の値が更新されていないかを調べ、もし更新されていなければ読出カウンタ９３の値を１加算して処理を終了する。
【００５８】
読出手段５は、以上の手順によって、バッファ４のトレースに保護条件を設定し、バッファ４への書込みを継続したままトレースを順次保存する方法を実現する。
【００５９】
次に、本実施例において、複数のプロセッサ１がそれぞれ並列にタスク２を実行するときの動作を図１０から図１４に示すタイミングチャートを交えて説明する。
【００６０】
図１０から図１４までの各図は、本実施例のシステムにおいて、プロセッサ番号１を持つプロセッサＡ１ａが書込手段８を実行し、それに並行して、プロセッサ番号２を持つプロセッサＢ１ｂが読出手段５を実行する場合についての動作例を表すタイミングチャートである。ここでは動作の具体例を示すため、トレースバッファ４に記録できる最大トレース数Ｎを３２とする。横軸は時間を表す。縦軸は、トレースバッファ４ａに含まれる書込インデックス４１の値の変化、及び、保護条件データ６ａに含まれるカラム９０のうち、プロセッサ番号２番のプロセッサＢ１ｂの読出要求に対応するカラム９０ｂの読出インデックス９２，読出カウンタ９３の値の変化を表す。垂直の点線は、引き出し線によって明示したステップの実行が開始されたタイミングを表す。横に伸びる二本の平行線とその間に記された数値は、その左に記載した項目が持つ値を示す。平行線が途中で交差する部分は、値が変化したことを示し、その左に変化前の値を、その右に変化後の値を記す。
【００６１】
図１０（１）は、読出要求がない状態で書込手段８が実行されたときのタイミングチャートである。書込インデックス４１の値は初期値８３とする（これは区画１９を表す）。また、読出インデックス９２の値は初期値０とする（これは保護条件データ６が設定されていないことを表す）。まず、書込手段８の実行過程におけるステップｓｗ１によって、書込インデックス４１の値８３が記憶され、区画１９を上書きすることを決定し、同時に書込インデックス４１の値を１増加させて、次の書込区画を設定する。次に書込手段８は、ステップｓｗ２１によって、読出インデックス９２の値が０であることから、保護条件データ６が設定されていないことを確認し、続いてステップｓｗ４にて、区画１９の位置にトレースを書き込む。読出要求がないとき、このようにして、トレースバッファ４に記録されているトレースは読み出されることなく上書きされる。
【００６２】
図１０（２）は、読出要求がある状態で書込手段８が実行されたときの２つのタイミングチャートである。書込手段８を実行する直前、上のタイミングチャートでは、書込インデックス４１は８３を示している。また、読出インデックス９２は８０を、読出カウンタ９３は５を示しており、読出しはインデックス８０（区画１６）から始まり、インデックス８４（区画２０）までを終えていることを表している。書込手段８はステップｓｗ２１にて、読出インデックス９２が０でないため、保護条件データ６が設定されていると判定して、ステップｓｗ２２に進む。ステップｓｗ２２にて読出カウンタ９３の値５を読み出すと、続いてｓｗ２３にて、読出インデックス９２と読出カウンタ９３の値を加算し、次に読み出すべき区画のインデックスが８５であること、すなわち、区画２１であることを知る。今回上書きしようとしている区画はインデックス８３、すなわち区画１９であり、読出の必要はないと判断して、ステップｓｗ４に進み、区画１９のトレースを読み出さずに上書きする。
【００６３】
一方、図１０（２）下のタイミングチャートは、上のタイミングチャートと比較して、読出カウンタ９３の初期値だけが異なっている。従って、ステップｓｗ２３に進んだところで、読み出すべき区画のインデックス８３と、上書きしようとしている区画のインデックス８３が一致していることを確認して、ステップｓｗ２４に進む。ステップｓｗ２４では、読出カウンタ９３の値がトレースバッファ４のサイズＮ（３２）を超えていないことを確認し、区画１９のトレースを上書き前に読み出すことを決める。読み出す直前にステップｓｗ２５にて読出カウンタ９３の値を１増加させ、ステップｓｗ３にて区画１９のトレースを読み出す。その後、ステップｓｗ４にて区画１９を上書きする。
【００６４】
図１１（３）のタイミングチャートは、書込手段８を実行するのに並行して、他のプロセッサで読出手段５が実行され、書込手段８によって上書きする区画が決定した直後に、読出手段５によって保護条件データ６が設定されたときの動作例を表す。書込手段８のステップｓｗ１とステップｓｗ２１を実行する手順の間に、読出手段５のステップｓｒ２が実行され、読出インデックス９２が設定された動作例である。ステップｓｒ２によって、書込インデックス４１の値が読出インデックス９２にコピーされる。この時点で書込手段８はインデックス８３が示す区画１９への上書きを決定しており、保護条件データ６はその定義により、インデックス８４の示す区画２０から保護を開始する。従って、書込手段８による区画１９の上書きは影響せず、読出手段５によって保護された３２個の区画は全て保護される。
【００６５】
図１１（４）のタイミングチャートは、読出手段５によって保護条件データ６が設定された直後に、書込手段８によって上書きする区画が決定したときの動作例を表す。書込手段８によってステップｓｗ１が実行される直前に読出手段５のｓｒ２が実行され、保護条件データ６が設定されると、読出インデックス９２の値は、ステップｓｗ１が実行される前の書込インデックス４１の値８３が記録される。これによって、書込手段８は、上書きしようとしている区画１９が保護条件データ６に合致していることを知ることができ、所定のステップを実行して、上書き前に区画１９を読み出すことができる。
【００６６】
図１２（５）は、書込手段８がもつ読出カウンタ９３増減前後の手順と、読出手段５がもつ読出カウンタ９３増減前後の手順が並行して実行されるときの動作例のひとつである。書込手段８によって、区画１９が保護条件データ６に合致し、読み出すべきであるかを判定する一連の処理が実行されるなか、判定処理の最後のステップｓｗ２５を実行する直前に、読出手段５がいち早く読出しを終え、ステップｓｒ３２４にて読出カウンタ９３を１増加させるというケースを表している。書込手段８は、読出カウンタ９３が変更されたことをステップｓｗ２５の実行によって検知し、区画１９のトレース読出しを行わず、ステップｓｗ４にて上書きを行う。
【００６７】
図１２（６）は、前述の図１２（５）に示した動作例の類似例であり、書込手段８のステップｓｗ２５が読出手段５のステップｓｒ３２４の直前に実行されたケースを表すタイミングチャートである。書込手段８は読出手段５による区画１９の読出しに並行して、ステップｓｗ３にてトレースの読出しを行うが、同じトレースを上書きするため、読み出したトレースのデータ破壊は起こらない。また、読出手段５がステップｓｒ３２４にて読出カウンタ９３を増加させることもなく、トレースの読出しは不整合を起こすことなく進む。
【００６８】
図１３（７）は、書込手段８と読出手段５によって同時に同じ区画の読出しが試みられ、読出手段５がステップｓｒ３２１によって区画１９の読出しを行っている最中に、書込手段８がステップｓｗ４によって区画１９に新しいトレースを上書きする動作例である。読出し中のデータを他のプロセッサによって上書きすると、読み出したデータは破壊される。このため、読出手段５がステップｓｒ３２１によって読み出したトレースは破壊されている。しかし、読出手段５は、その後に実行されるステップｓｒ３２２によって、読み出したトレースが破壊されていることを確認して、一時領域に記録されているそのトレースを破棄するため、トレースの読出は不整合を起こすことなく進む。
【００６９】
図１４（８）は、書込手段８がステップｓｗ２５までを実行し、区画１９の読出しを決定したとき、読出手段５はステップｓｒ３２２までの実行を完了しており、書込手段８のステップｓｗ３実行による、読み出したトレースの出力と、読出手段５のステップｓｒ３２３実行による、読み出したトレースの出力がともに実行されるケースのタイミングチャートである。図１３（７）で示したように、読出手段５による読出しと、書込手段８による上書きが衝突して、読み出すトレースが破壊されることを避けねばならないが、読出手段５のステップｓｒ３２３で出力するトレースは、既に保存したトレースであるため、ステップｓｗ４による破壊は起こらない。
【００７０】
以上のタイミングチャートで示したように、書込手段８と読出手段５による並列処理は正しく動作し、トレースを記憶するトレースバッファ４への書込みを停止させずに、読出し要求を受けた時点でバッファに記録されている全てのデータを、安全に読み出すことが可能となる。
【００７１】
本実施例では、保護条件としてインデックスを使用し、トレースバッファ上の位置を条件とする保護条件データを設定しているが、任意の条件を設定することもできる。例えば、トレースの中にタスク番号を記録し、保護条件にタスク番号を指定できるデータ構造を追加し、読出手段で保護条件にタスク番号を設定できるようにすることで、あるタスクのトレースのみを記録する方法を実現することができる。また、判定処理をモジュール化することで、任意の判定処理を切り替えて使用する方法をとってもよい。
【００７２】
トレースバッファに書き込まれる各トレースのデータの内容の一部に、そのトレースを記録する際にその位置を知るために使用した書込インデックスの値を含めることによって、本実施例とは異なる上書き検証方法を実現することもできる。この方法を実現するためには、書込手段及び読出手段で次の処理を行う。書込手段はトレースバッファにトレースを書き込むにあたり、はじめに書込インデックスの値を書き込む。読出手段は、読出しを終えたあと、読出した領域にあるトレースに記録されている書込インデックスの値を調べ、保護条件データに設定した先頭インデックスよりも大きいかどうかを調べる。大きければ、読み出したログ及びトレースは上書きされていると判定する。この方法によれば、書込手段が読出カウンタを更新しなくても、読出手段はトレースの上書きを検知することが可能となる。
【００７３】
上書き検証方法を実現するまた別の手段として、トレースデータの一部に、読出要求があるときに書き込まれたことを表すフラグを記録する領域を設ける方法もある。この方法を実現するためには、書込み手段及び読出し手段で次の処理を行う。書込手段はトレースバッファにトレースを書き込むにあたり、最初に読出し要求の有無を表すフラグとしてのデータを書き込む。読出要求があり、上書き前の読出しを行った場合、このフラグ領域に読出し要求があったことを示すデータを書込み、一方、読出要求がなく、上書き前の読出しを行わずにトレースを上書きする場合は、このフラグ領域に読出し要求が無かったことを示すデータを書き込む。読出し手段は、トレースの読出しを終えたあと、読み出した領域にあるトレースに記録されているフラグを調べ、もしこのフラグに読出要求があったことを示すデータが書き込まれていれば、読み出したログ及びトレースは上書きされていると判定する。この方法によれば、書込手段が読出カウンタを更新しなくても、読出手段はトレースの上書きを検知することが可能となる。
【００７４】
本実施例では、トレースバッファの区画を単位として読出処理を行い、それを繰り返すことで読出対象領域全域を読み出しているが、一度に読み出す領域の大きさは任意である。計算機システムの機能として、一定の大きさの領域を一度に効率よく読み出す機能がある場合は、これを一度に読み出す方法をとってもよい。
【００７５】
以上の説明の実施例では好ましくは、履歴情報（トレース及びログ）はバッファに記憶され、保護条件データは、上書きによる消去を禁止する情報であると共に、履歴情報を読出す要求を表すデータであり、履歴情報を前記バッファに書き込むにあたり、保護条件データを参照し、書込位置が上書き消去禁止位置と重複しているかどうかを検証し、重複を検知した場合に任意の読出先領域に履歴情報を先に読み出してから上書きをおこない、履歴情報を読出した後に、読出した領域内で上書きされていることを検証し、上書きを検知した場合に、履歴情報を上書きするときに任意の領域に読み出した上書き前の履歴情報を識別し、識別した該履歴情報を、バッファに記録した順序に従い、任意の領域に格納する。
【００７６】
また、任意の読出先領域に履歴情報を読み出す前に、履歴情報が上書きされていることを検証し、検知時に履歴情報の読出しを中止し、履歴情報を上書きする前に、任意の読出先領域に読み出した履歴情報を、読み出した履歴情報として扱う。
【００７７】
また、保護条件データに、次に読み出すべき履歴情報の位置を表す読出位置情報を設け、読出位置情報を更新後、更新前の読出位置情報が示していた位置の履歴情報を読み出し、読出位置情報を記憶し、読出位置情報が示す位置の履歴情報を読出し後に、記憶した読出位置情報と現在の読出位置情報とが異なっていることを検知し、読み出した該履歴情報が上書きされていると判定する。
【００７８】
また、各履歴情報はユニークな番号を記録する番号領域を備え、履歴情報の書込みの最初に、番号領域に番号を書き込み、履歴情報読出し後に、読出しを終えた位置にある履歴情報の番号領域を調べ、読出しを要求した時点でバッファに書き込まれている履歴情報に未割り当ての番号が番号領域に記録されているかどうかを検証し、番号領域に未割り当ての番号が記録されていることを検知した場合、読出した履歴情報が上書きされていると判定する。
【００７９】
また、履歴情報は読出し要求があるときに書き込まれたことを記録するフラグ領域を備え、履歴情報書込みの最初に、前記フラグ領域に書き込み、履歴情報読出し後に、読み出した履歴情報前記フラグを調べ、フラグが設定されていることを検知し、読出した該履歴情報が上書きされていると判定する。
【００８０】
また、前記プロセッサの個数と同数の、前記保護条件データを設定する保護条件データ記憶領域を備え、前記保護条件データの設定を開始してから、履歴情報の読出を全て完了するまでの間、該読出に係る前記プロセッサの使用権を明け渡すことなく実行されることをおこない、前記保護条件データを設定するにあたり、その時点で未使用の前記保護条件データ記憶領域のひとつを選択し、該保護条件データ記憶領域に保護条件データを設定する。
【００８１】
また、前記保護条件データ記憶領域に記憶されている複数の前記保護条件データ全てを参照し、それぞれの該保護条件データが表す上書き消去禁止位置と書込位置が重複しているかどうかを検証する。
【００８２】
また、読出対象領域に含まれる履歴情報のうち１個を読出し、読み出した履歴情報が前記バッファ上で上書きされていることを検証する手順を、該読出対象領域に含まれる履歴情報の個数と同じ回数繰り返す。
また、読出対象領域の少なくとも一部を含む領域を読出し、読み出した領域に含まれる履歴情報が前記バッファ上で上書きされていることを検証する手順を、読出対象領域全域を読み出すまで繰り返す。
【図面の簡単な説明】
【００８３】
【図１】本発明に係るログ及びトレースデータ採取方法の構成図である。
【図２】図１に係るログ及びトレースデータ採取方法の動作説明図である。
【図３】実施例における本発明の一実施形態に係るマルチプロセッサシステムの構成図である。
【図４】図３におけるデータ構造の詳細を示す図である。
【図５】図３に示す書込手段のフローチャートである。
【図６】図５に示す保護条件判定処理のフローチャートである。
【図７】図３に示す読出手段のフローチャートである。
【図８】図７に示す読出処理Ｂのフローチャートである。
【図９】図８に示す判定・読出処理のフローチャートである。
【図１０】実施例における動作例を表すタイミングチャートである。
【図１１】実施例における動作例を表すタイミングチャートである。
【図１２】実施例における動作例を表すタイミングチャートである。
【図１３】実施例における動作例を表すタイミングチャートである。
【図１４】実施例における動作例を表すタイミングチャートである。
【図１５】参考例と本発明の構成と動作の概略を示す図である。
【図１６】本発明に係るログ及びトレースデータ採取方法の動作を表す図である。
【符号の説明】
【００８４】
１  プロセッサ
２  タスク
３  記憶領域
４  バッファ（トレースバッファ）
５  読出手段
６  保護条件データ
８  書込手段
１０  エラー情報記録エリア
４１  書込インデックス
９０  カラム（読出情報カラム）
９１  読出先アドレス
９２  読出インデックス
９３  読出カウンタ
【図１】
2008299360.tif 000003
【図２】
2008299360.tif 000004
【図３】
2008299360.tif 000005
【図４】
2008299360.tif 000006
【図５】
2008299360.tif 000007
【図６】
2008299360.tif 000008
【図７】
2008299360.tif 000009
【図８】
2008299360.tif 000010
【図９】
2008299360.tif 000011
【図１０】
2008299360.tif 000012
【図１１】
2008299360.tif 000013
【図１２】
2008299360.tif 000014
【図１３】
2008299360.tif 000015
【図１４】
2008299360.tif 000016
【図１５】
2008299360.tif 000017
【図１６】
2008299360.tif 000018