(57)【要約】【課題】専用ハードウェアを追加することなくプログラム動作情報の出力処理におけるＣＰＵ負荷増大を抑制し、またシステムダウンの影響を受けずにプログラム動作情報の記録が可能なトレース装置を提供する。【解決手段】トレース装置１００１は、複数のＣＰＵ１０１−１〜１０１−３、２０１を有するマルチコアプロセッサを搭載するトレース装置であって、ＣＰＵ１０１−１〜１０１−３を用いてプログラムを実行し、プログラムの動作履歴を示すプログラム動作情報を収集するシステム動作系１００と、ＣＰＵ２０１を用いてシステム動作系１００の稼働状況に影響されることなくシステム動作系１００とは独立に稼働すると共に、システム動作系１００の収集したプログラム動作情報をＩＯデバイス１に出力するログ制御系２００とを備えた。【選択図】図１
2015118493.tif 000002
【特許請求の範囲】
【請求項１】
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有するマルチコアプロセッサを搭載するトレース装置において、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、１以上の一部のＣＰＵを用いてプログラムを実行し、前記プログラムの動作履歴を示すプログラム動作情報を収集するシステム動作部と、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、前記システム動作部が使用するＣＰＵとは異なる１以上のＣＰＵを用いて前記システム動作部の稼働状況に影響されることなく前記システム動作部とは独立に稼働すると共に、前記システム動作部の収集した前記プログラム動作情報をＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスに出力するログ制御部と
を備えたことを特徴とするトレース装置。
【請求項２】
前記トレース装置は、さらに、記憶装置を備え、
前記システム動作部は、
前記記憶装置に収集した前記プログラム動作情報を書き込み、
前記ログ制御部は、
前記システム動作部が書き込んだ前記プログラム動作情報を前記記憶装置から読み出し、読み出した前記プログラム動作情報を前記ＩＯデバイスに出力することを特徴とする請求項１記載のトレース装置。
【請求項３】
前記記憶装置は、
前記システム動作部と前記ログ制御部とがいずれも使用する共有メモリであることを特徴とする請求項２記載のトレース装置。
【請求項４】
前記共有メモリの前記プログラム動作情報を書き込む領域は、
前記システム動作部のみが書き込みできることを特徴とする請求項３記載のトレース装置。
【請求項５】
前記ログ制御部は、
前記システム動作部の稼働状態を監視し、監視の結果、前記システム動作部に異常が発生したと判断した場合には、前記記憶装置に存在する前記プログラム動作情報を、前記ＩＯデバイスに強制出力することを特徴とする請求項２〜４のいずれかに記載のトレース装置。
【請求項６】
前記システム動作部は、
前記システム動作部の稼働状態を監視し、監視の結果、前記システム動作部に異常が発生したと判断した場合には、異常の発生を前記ログ制御部に通知し、
前記ログ制御部は、
前記システム動作部から異常の発生が通知された場合には、前記記憶装置に存在する前記プログラム動作情報を、前記ＩＯデバイスに強制出力することを特徴とする請求項２〜５のいずれかに記載のトレース装置。
【請求項７】
前記ログ制御部は、
前記記憶装置に存在する前記プログラム動作情報を、前記ＩＯデバイスに強制出力する場合には、前記システム動作部の使用するＣＰＵにキャッシュされているキャッシュ情報を取得し、取得した前記キャッシュ情報を前記記憶装置に格納することを特徴とする請求項５または６のいずれかに記載のトレース装置。
【請求項８】
前記システム動作部は、
前記プログラム動作情報を前記共有メモリに書き込むプログラム情報書込み部を備え、
前記トレース装置は、さらに、
前記マルチコアプロセッサの有する前記複数のＣＰＵの少なくともいずれかのＣＰＵを用いることにより、共有メモリへの書き込みを監視して前記プログラム情報書込み部によらない前記共有メモリへの書き込みを禁止する書込監視部を備えたことを特徴とする請求項３または４のいずれかに記載のトレース装置。
【請求項９】
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有するマルチコアプロセッサを搭載するコンピュータであるトレース装置に、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、１以上の一部のＣＰＵを用いてプログラムを実行し、前記プログラムの処理状況の履歴を示すプログラム動作情報を収集する収集処理と、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、前記収集処理に使用されるＣＰＵとは異なる１以上のＣＰＵを用いて前記収集処理の稼働状況に影響されることなく前記収集処理とは独立に稼働すると共に、前記収集処理によって収集された前記プログラム動作情報をＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスに出力する出力処理と
を実行させるためのトレースプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサを搭載してトレース（プログラム動作情報）をするトレース装置に関するものである。
【背景技術】
【０００２】
従来のプログラム動作情報（トレース）収集方法は、例えば計算機システムが動作中に、日付、時刻、動作内容などをＵＡＲＴ（Ｕｎｉｖｅｒｓａｌ  Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｒｅｃｅｉｖｅｒ  Ｔｒａｎｓｍｉｔｔｅｒ）に出力する方法や、前記プログラム動作情報をメモリに出力し、不揮発領域へ書き出し、プログラム動作情報を収集する方法が利用されている。しかし、ＵＡＲＴにプログラム動作情報を出力する方法ではＵＡＲＴへ出力するためにＣＰＵ負荷が生じ、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の動作タイミングに影響を及ぼす。プログラム動作情報の出力量によっては、システムの動作に副作用が生じることがあるため、プログラム動作情報を出力する処理負荷を考慮した運用が必要である。また、プログラム動作情報を不揮発領域へ出力する方法は、例えばＯＳ（オペレーティングシステム）を含むシステムがダウンした場合やハングアップした状態の場合は、収集したプログラム動作情報を収集できない状態に陥ることがある。
【０００３】
これらの課題を解決するために従来技術で次の特許文献１、特許文献２の技術が開示されている。特許文献１の技術は、ＣＰＵの動作タイミングに影響を与えることなく、プログラム動作情報を収集する技術として、専用のハードウェアを追加し、主記憶装置にプログラム動作情報を書き込み、専用ハードウェアから外部記憶装置にプログラム動作情報を転送し、ＣＰＵを介在させないことでＣＰＵ負荷を低減させる。また、専用ハードウェアを追加するため、システムがダウンした状況においても専用ハードウェアを経由してプログラム動作情報の収集を可能にしている。特許文献２の技術は、複数のＣＰＵを持つ計算機において各ＣＰＵの負荷を監視し、ＣＰＵ負荷が低いコアにトレーサを動作させるようにスケジュールするものである。それにより特定のＣＰＵ負荷が高くなることを防ぎ、システムに対する副作用を軽減できる技術が発明されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−５４５３２号公報
【特許文献２】特開２０１２−１８４３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１は、専用のハードウェアを追加することで、システムに対する負荷の軽減、システムダウン時にもプログラム動作情報の収集を可能にしているが、計算機システムに専用ハードウェアを追加する必要がある。計算機システムへ専用ハードウェアを追加するため、コストおよびサイズが大きくなるという課題がある。
【０００６】
特許文献２は、既存の計算機システムにリソース監視機構などをソフトウェアで実現し、専用のハードウェアは不要である。このため、コスト高、サイズ拡大の課題は発生しないが、システム全体がダウンした状況では、プログラム動作情報をＵＡＲＴや不揮発領域へ書き出しができない状況に陥る場合がある。更にリソース監視機構をソフトウェアで実現する場合、それらを動作させるためのＣＰＵリソースが必要であり、システムに対する副作用が発生しないように運用する必要がある。
【０００７】
この発明は、専用ハードウェアを追加することなくプログラム動作情報の出力処理におけるＣＰＵ負荷増大を抑制し、またシステムダウンの影響を受けずにプログラム動作情報の記録が可能なトレース装置の提供を目的とする。
【課題を解決するための手段】
【０００８】
この発明のトレース装置は、
複数のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を有するマルチコアプロセッサを搭載するトレース装置において、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、１以上の一部のＣＰＵを用いてプログラムを実行し、前記プログラムの処理状況の履歴を示すプログラム動作情報を収集するシステム動作部と、
前記マルチコアプロセッサの有する前記複数のＣＰＵのうち、前記システム動作部が使用するＣＰＵとは異なる１以上のＣＰＵを用いて前記システム動作部の稼働状況に影響されることなく前記システム動作部とは独立に稼働すると共に、前記システム動作部の収集した前記プログラム動作情報をＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスに出力するログ制御部と
を備えたことを特徴とする。
【発明の効果】
【０００９】
この発明により、専用ハードウェアを追加することなくプログラム動作情報の出力処理におけるＣＰＵ負荷増大を抑制し、またシステムダウンの影響を受けずにプログラム動作情報の記録が可能なトレース装置を提供できる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１による、トレース装置を示す構成図。
【図２】実施の形態１による、トレース装置の共有メモリの内部構成を示す説明図。
【図３】実施の形態１による、トレース装置の動作を示すフローチャート（システム動作系）。
【図４】実施の形態１による、トレース装置の動作を示すフローチャート（ログ制御系）。
【図５】実施の形態１による、トレース装置のシステム動作系の稼働状態監視のシーケンス図。
【図６】実施の形態１による、トレース装置のログ制御系がシステム動作系の異常を検出した場合のシーケンス図。
【図７】実施の形態１による、トレース装置のシステム動作系で異常を検出した場合のシーケンス図。
【図８】実施の形態２による、トレース装置を示す構成図。
【図９】実施の形態３による、トレース装置を示す構成図。
【図１０】実施の形態３による、トレース装置の動作を示すフローチャート。
【図１１】実施の形態４による、トレース装置を示す構成図。
【発明を実施するための形態】
【００１１】
実施の形態１．
図１〜図７を参照して実施の形態１のトレース装置１００１を説明する。
図１は、実施の形態１のトレース装置１００１のハードウェア構成及びソフトウェア構成を含む構成図である。図１に示すトレース装置１００１は、４個のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であるＣＰＵ１０１−１、ＣＰＵ１０１−２、ＣＰＵ１０１−３，ＣＰＵ２０１を備えたマルチコアプロセッサに、システム動作系１００（システム動作部）とログ制御系２００（ログ制御部）を構築する例である。
【００１２】
（システム動作系１００）
システム動作系１００は、ＣＰＵ１０１−１〜１０１−３、ＯＳ（オペレーティングシステム）１０２、ＣＰＵ間通信部１０３、アプリケーションプログラム１０４、ＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）アクセス制御部１０５、異常検出処理部１０６、及びプログラム情報書込部１０７から構成される。プログラム情報書込部１０７は、プログラム動作情報を書き出すプログラムを有するプロセスをＣＰＵ１０１−１等が実行することで実現される。
ここで「プログラム動作情報」とは、プログラムの動作履歴の情報（トレース）である。
【００１３】
（ログ制御系２００）
ログ制御系２００は、ＣＰＵ２０１、ＣＰＵ間通信部２０３、ＩＯアクセス制御部２０５、異常検出処理部２０６及びプログラム情報読出部２０７から構成されている。
【００１４】
また、トレース装置１００１は、システム動作系１００とログ制御系２００とが共通して用いるＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイス１、メモリ２（例えば主記憶装置）、通信路３を備えている。上記のシステム動作系１００、ログ制御系２００は、「〜部」の機能を有する各プログラム、ＯＳ１０２、「各プログラム及びＯＳ１０２」を実行するＣＰＵ１０１−１〜１０１−３、２０１によって実現される。図１に示すように、トレース装置１００１では、マルチコアプロセッサを複数の系（図１では２つ）に分割し、システム動作系１００とログ制御系２００とを構成する。システム動作系１００にはＣＰＵを３個、ログ制御系２００にはＣＰＵを１個割り当てる。ＣＰＵ１０１−１〜１０１−３、ＣＰＵ２０１の４つのＣＰＵは、同一アーキテクチャを持つ。これら４つのＣＰＵは、通信路３で接続され、ＣＰＵ間、或いは同じく通信路３に接続される周辺ハードウェアであるＩＯデバイス１、メモリ２と互いに情報を伝達できるように構成されている。
【００１５】
システム動作系１００は、ＯＳ１０２を搭載する。また、システム動作系１００は、ＣＰＵ間通信部１０３，アプリケーションプログラム１０４，ＩＯアクセス制御部１０５，異常検出処理部１０６、プログラム情報書込部１０７を搭載しシステム動作系を構築する。ＣＰＵ間通信部１０３〜プログラム情報書込部１０７はＯＳ１０２上で動作する。また、ログ制御系２００にＯＳは搭載せず、単純な構成とする。ログ制御系２００はＣＰＵ間通信部２０３，ＩＯアクセス制御部２０５，異常検出処理部２０６、プログラム情報読出部２０７を搭載し、ログ制御系を構築する。システム動作系１００とログ制御系２００とで共用するＩＯデバイス１へのアクセスは、システム動作系１００またはログ制御系２００とのうちの、どちらか一方がアクセスすることとする。システム動作系１００とログ制御系２００とのＩＯデバイス１へのアクセスの競合を防ぐため、ＩＯアクセス制御部１０５、２０５で排他制御を行う。
【００１６】
図１に示すように、メモリ２は、システム動作系１００が使用するシステム動作系メモリ領域２１と、ログ制御系２００が使用するログ制御系メモリ領域２２と、システム動作系１００とログ制御系２００との両者で使用する共有メモリ２３に分割されている。
【００１７】
システム動作系１００は通常のシステムを動作させる系である。システム動作系１００のプログラム情報書込部１０７は、システム動作系１００で動作するアプリケーションプログラム１０４をはじめ、ＯＳ１０２を含むプログラム動作情報を収集し、収集したプログラム動作情報を共有メモリ２３へ書き込む。
【００１８】
ログ制御系２００のプログラム情報読出部２０７は、共有メモリ２３から、プログラム情報書込部１０７が書き込んだプログラム動作情報を読み出し、ＩＯデバイス１へ、読み出したプログラム動作情報を出力する。
【００１９】
（システム動作系１００の異常検出）
ＣＰＵ間通信部１０３，２０３と、異常検出処理部１０６、２０６とによって、システム動作系１００の稼働状態の監視を行い、システム動作系１００の異常検出を行う。システム動作系１００の異常が検出された場合は、ログ制御系２００の異常検出処理部２０６は、システム動作系１００のＣＰＵ１０１−１〜１０１−３を停止させると共に、共有メモリ２３に格納されているプログラム動作情報をプログラム情報読出部２０７に、ＩＯデバイス１へ出力させる。
【００２０】
図２は共有メモリ２３の使用領域を示す図である。共有メモリ２３は、図２に示すように、プログラム動作情報を出力するＩＯデバイスの種別に応じてメモリ領域が分割される。システム動作系１００は、プログラム動作情報を出力するＩＯデバイスの種別に応じた共有メモリ領域にプログラム動作情報の書き込みを行う。図２は２つのＩＯデバイスへプログラム動作情報を出力する場合の図である。例えばＩＯデバイスＡの出力用領域２３１は、ＵＡＲＴへの出力領域であり、ＩＯデバイスＢの出力用領域２３２は、不揮発なストレージであるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＤメモリーカード（ＳＤ  Ｍｅｍｏｒｙ  Ｃａｒｄ（ＳＤは登録商標））への出力領域として割り当てる。
【００２１】
＜トレース装置１００１の起動とプログラム動作情報収集＞
次に、実施の形態１のトレース装置１００１の動作について説明する。
図３は、システム動作系１００のプログラム情報書込部１０７が、共有メモリ２３にプログラム動作情報を書き込むフローチャートである。電源オンなど、システム起動トリガを検出すると、ログ制御系２００が起動し、その後、システム動作系１００が起動する。起動したシステム動作系１００は通常の動作を行い、プログラム情報書込部１０７が動作内容をプログラム動作情報として共有メモリ２３へ書き込む（ＳＴ１）。共有メモリ２３のプログラム動作情報を格納する領域は、システム動作系１００のみが書き込みを行うものとする。なお読み出しはプログラム情報読出部２０７のみが行う。このためアクセス競合が発生せず、図３に示す通り、判定処理なしで共有メモリ２３へ書き込みができる。また、ログ制御系２００起動後にシステム動作系１００を起動させることで、システム動作系１００の起動時からのプログラム動作情報を取得することができる。なお、システムの起動時間の短縮を目的とし、システム動作系１００と、ログ制御系２００とを並列で起動させてもよい。
【００２２】
＜プログラム動作情報の出力＞
図４は、プログラム情報読出部２０７が、共有メモリ２３に格納されたプログラム動作情報を、ＩＯデバイス１への出力するフローチャートである。出力先のＩＯデバイス１がシステム動作系１００からもアクセスされる場合は、アクセス競合が発生するため、図４に示すように、ＩＯアクセス制御部２０５で排他制御を行う。これについては後述する。
【００２３】
ログ制御系２００のプログラム情報読出部２０７は、共有メモリ２３に書き込まれたプログラム動作情報を出力先のＩＯデバイスの種別に応じた共有メモリ２３の領域から読み出し（ＳＴ１０）、プログラム動作情報が存在するか判定する（ＳＴ１１）。ＩＯデバイス１へ出力するプログラム動作情報が存在する場合、ＩＯアクセス制御部２０５は、ＩＯデバイス１へのアクセスが可能か判定する（ＳＴ１２）。ＩＯアクセス制御部２０５がアクセス可能と判定した場合、プログラム情報読出部２０７は、ＩＯデバイス１へプログラム動作情報の出力処理を行う（ＳＴ１３）。ＩＯデバイス１への出力処理はシステム動作系１００と共用する通信路３の効率を考慮し、プログラム情報読出部２０７は、プログラム動作情報が一定量、共有メモリ２３に溜まるまで待ち、一定量溜まる毎にＩＯデバイス１へ出力する。ＩＯデバイス１へのデータ転送は、ログ制御系２００のＣＰＵ２０１による転送に加え、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を利用してもよい。
【００２４】
＜異常検出＞
ログ制御系２００の異常検出処理部２０６は、システム動作系１００の稼働状態を監視し、システム動作系１００の異常を検出する機能を有する。以下に具体的な検出方法を記載する。
図５は、ログ制御系２００がシステム動作系１００の稼働状態を監視するシーケンスの例である。通信路３を介したＣＰＵ１０１−１〜１０１―３と、ＣＰＵ２０１との間で、ＣＰＵ間通信部１０３，２０３と共有メモリ２３とを利用し、システム動作系１００は、周期的に共有メモリ２３の稼働情報を更新する（ＳＴ１００）。ＣＰＵ間通信部１０３，２０３間の通信で、ログ制御系２００へ稼働情報の更新通知を送出する（ＳＴ１１１）。ログ制御系２００では、予めタイマ（図示していないがＣＰＵ２０１によって実現する）をセットし（ＳＴ１１２）、タイマカウントダウンを行っている（ＳＴ１１３）。ログ制御系２００は、システム動作系１００からの稼働情報の更新通知を受信し、更新通知を受信した場合、異常検出処理部２０６は共有メモリ２３の稼働内容が期待する値に更新されているか確認する（ＳＴ１１４）。異常検出処理部２０６は、期待する値に更新されていることでシステム動作系１００が正常動作を行っていると判断し、タイマ値をリセットし（ＳＴ１１５）、再度、タイマカウントダウンを行い（ＳＴ１１６）、以下同様に、異常検出処理部２０６はシステム動作系が正常に稼働しているかどうか監視を継続する。
【００２５】
＜ログ制御系２００によるシステム動作系１００の異常検出＞
図６は、システム動作系１００が正常に稼働できていない状態を、ログ制御系２００が検出するシーケンスの例である。ログ制御系２００によるシステム動作系１００の稼働状態の監視方法は、図５で示した通りである。ログ制御系２００は予めタイマをセットし（ＳＴ１２２）、タイマカウントダウン（ＳＴ１２３）を行っている。システム動作系１００が共有メモリ２３の内容を更新したが（ＳＴ１２０）、システム動作系１００がダウンし、稼働情報の更新通知（ＳＴ１２１）が通知できない状態が発生する。ログ制御系２００の異常検出処理部２０６は、稼働情報の更新通知（ＳＴ１２１）が通知されないため、タイマのタイムアウトを検出し（ＳＴ１２４）、システム動作系の稼働状態が異常と判定し、通信路３を介してシステム動作系１００のＣＰＵ１０１の動作を停止ＳＴ１２５させる。その後、異常検出処理部２０６はプログラム情報読出部２０７に、プログラム動作情報の強制出力（ＳＴ１２６）、システム動作系１００のキャッシュ情報出力（ＳＴ１２７）を行わせる。ＳＴ１２６のプログラム動作情報の強制出力、ＳＴ１２７のシステム動作系１００のキャッシュ情報出力については後述する。
【００２６】
システム動作系１００からログ制御系２００の稼働情報の更新通知は通知されたが、共有メモリ２３の稼働内容が期待する値に更新されていない場合も、異常検出処理部２０６は、システム動作系１００の稼働状態異常と判断する。
【００２７】
＜システム動作系の自系の異常検出＞
図７は、システム動作系１００が自系の異常を検出する場合のシーケンスの例であるシステム動作系１００の異常検出処理部１０６は、自身のシステム動作系内の異常を検出する機能を有し、異常検出処理ＳＴ１３０を行う。以下に具体的な検出方法を記載する。
（１）例外などＣＰＵ１０１−１〜１０１−３のエラー検出情報を取得する。
（２）チェックサムを利用したメモリ内容の監視を行い、メモリ破壊、データの書き込み失敗の検出を行う。
（３）アプリケーションプログラム１０４で周期的に動作する処理が一定周期以内に動作しているか監視し、処理遅延の検出を行う。
（４）システム動作系メモリ領域２１の特定の領域に確認用データを格納し、その領域が期待しない値に書き換わらないか監視する。メモリ破壊、スタックオーバフローの検出を行う。
（５）ＯＳ１０２のスケジューリング情報を参照し、スケジューリングのキュー操作から一定時間以上同一キューがＲＵＮ状態になっていないか、周期動作する処理が周期的にＲＵＮ状態に遷移しているかを監視する。
上記（１）〜（５）のいずれかの方法で異常を検出した場合、システム動作系１００の異常検出処理部１０６は、ＣＰＵ間通信部１０３，２０３間の通信を介して、ログ制御系２００に異常検出通知を送る（ＳＴ１３１）。ログ制御系２００では異常検出通知を受信すると、異常検出処理部２０６が通信路３を介してシステム動作系１００のＣＰＵ１０１−１〜１０１−３の動作を停止（ＳＴ１３２）させる。  その後、異常検出処理部２０６はプログラム情報読出部２０７に、プログラム動作情報の強制出力（ＳＴ１３３）、及びシステム動作系１００のキャッシュ情報出力（ＳＴ１３４）を行わせる。
【００２８】
＜プログラム動作情報の強制出力（ＳＴ１２６，ＳＴ１３３）＞
ログ制御系２００の異常検出処理部２０６は、共有メモリ２３にシステム動作系１００のプログラム情報書込部１０７が書き込んだプログラム動作情報を、プログラム情報読出部２０７により強制的にＩＯデバイス１へ出力させる。システム動作系１００が通信路３および共有するＩＯデバイス１を使用中の状態でシステム動作系１００がダウンした場合は、異常検出処理部２０６は通信路３のアクセス権または共有するＩＯデバイスのアクセス権を強制的にログ制御系２００に割り当てる処理を行い、プログラム情報読出部２０７にＩＯデバイス１へプログラム動作情報を出力させる。
【００２９】
強制出力することでシステム動作系１００がダウンする直前のプログラム動作情報の取得が可能である。また、ＩＯデバイス１への出力をログ制御系２００で処理するため、システム動作系１００がダウンしても、ＩＯデバイス１への出力過程で出力処理が停止せず、プログラム動作情報を取得することができる。これに対して従来の技術ではシステム動作系でＩＯデバイス１への出力処理を行う場合、システム動作系がダウンするとＩＯデバイス１への出力過程で出力処理が停止し、最後までプログラム動作情報の取得ができないことがある。
【００３０】
＜システム動作系１００のキャッシュ情報出力（ＳＴ１２７，ＳＴ１３４）＞
ログ制御系２００の異常検出処理部２０６は、プログラム情報読出部２０７に、システム動作系１００のＣＰＵ１０１−１〜１０１−３の２次キャッシュの情報を取得させ、ＩＯデバイス１へ出力させる。このようにＳＴ１２７，ＳＴ１３４では、プログラム動作情報に加え、異常が発生したシステム動作系１００におけるＣＰＵ１０１−１〜１０１−３の２次キャッシュの情報をログ制御系２００側からアクセスして異常発生時の状態を収集する。
また、ログ制御系２００の異常検出処理部２０６は、プログラム情報読出部２０７によって、システム動作系１００のＣＰＵ１０１−１〜１０１−３の１次キャッシュの情報を取得する。
ログ制御系２００の異常検出処理部２０６は、停止させたＣＰＵ１０１−１〜１０１−３を再度、起動させ、１次キャッシュ読み出し要求を通信路３へ送出し、ＣＰＵ１０１−１〜１０１−３が保持している１次キャッシュ情報をプログラム情報読出部２０７を介して取得し、異常発生時の状態を収集する。ログ制御系２００では、ＣＰＵ１０１−１〜１０１−３の１次キャッシュ情報を取得した後は必要に応じてＣＰＵ１０１−１〜１０１−３の動作を停止させる。ログ制御系２００によるシステム動作系１００のＣＰＵ１０１−１〜１０１−３の１次キャッシュ、２次キャッシュ情報の取得は、システム動作系１００に異常が発生した時のみでなく、障害調査や動作内容の確認を行いたいタイミングで、異常検出処理部２０６がＣＰＵ１０１を停止し、実行する方法としてもよい。
【００３１】
＜ＩＯデバイスアクセス制御＞
トレース装置１００１を構築するマルチコアプロセッサのハードウェア構成によっては、システム動作系１００とログ制御系２００とが共通のＩＯデバイス１へアクセスする場合がある。また、マルチコアプロセッサを搭載したＳｏｃでは、ＩＯデバイスは共通の構成が多く用いられる。この場合、共通で使用するＩＯデバイスへのアクセス競合を防ぐために、システム動作系１００のＩＯアクセス制御部１０５とログ制御系２００のＩＯアクセス制御部２０５とで排他制御を実施する。ＩＯアクセス制御部１０５とＩＯアクセス制御部２０５とはそれぞれＣＰＵ間通信部１０３、ＣＰＵ間通信部２０３で通信路３を介し、共通に使用するＩＯデバイス１へのアクセス開始と終了をお互いに通知し、排他制御を行う。共通に使用するＩＯデバイス１へのアクセス状況をシステム動作系１００とログ制御系２００とで共有し、ＩＯデバイス１へアクセスする前に確認することで競合を防ぐことができる。
【００３２】
＜トレース装置１００１のシャットダウン＞
トレース装置１００１のシャットダウンは、システム動作系１００が終了した後、ログ制御系２００を終了させる。システム動作系１００はＣＰＵ間通信を使用しログ制御系２００へシャットダウンを通知する。ログ制御系２００は、システム動作系１００のシャットダウンを受信後、共有メモリ２３に格納されているプログラム動作情報を強制的にＩＯデバイス１へ出力し、ログ制御系２００をシャットダウンする。
【００３３】
なお、上記の例ではＣＰＵ数が４個のマルチコアプロセッサの例を説明したが、ＣＰＵ数はこの値に限定されるものではなく、２個以上のＣＰＵを備えたマルチコアプロセッサであってもよい。すなわち、実施の形態１のトレース装置１００１は、ＣＰＵ数が２個以上のマルチコアプロセッサにおいてＣＰＵ数を任意の個数に分割し、システム動作系１００とログ制御系２００を構築するものである。あるいは複数のＣＰＵを有するマルチコアプロセッサの、複数のＣＰＵの一部を用いてシステム動作系１００、ログ制御系２００を構成しても構わない。例えば５個のＣＰＵを備えたマルチコアプロセッサにおいて、トレース装置１００１と同様に、システム動作系１００に３個使用し、ログ制御系２００に１個使用しても構わない。
また、この実施の形態１では、システム動作系１００にＯＳ１０２が搭載された場合を説明したが、システム動作系１００にＯＳ１０２を搭載しないシステムにおいてもこの実施の形態１の適用が可能である。
さらにログ制御系２００は単純な構成とするためＯＳは搭載しないこととしたが、堅牢性の高いＯＳを搭載する構成も可能である。
さらにシステム動作系１００はＳＭＰ構成だけでなく、ＡＭＰ構成のマルチＯＳ、およびマルチＣＰＵ構成も可能である。
【００３４】
実施の形態２．
図８を参照して実施の形態２のトレース装置１００２を説明する。
図８は実施の形態２のトレース装置１００２の構成図である。図８のトレース装置１００２では、実施の形態１で示したマルチコアプロセッサを用いてトレース装置を構築する例において、計算機の仮想化技術のひとつであるハイパーバイザを利用してトレース装置を構築する。トレース装置１００２は、トレース装置１００１に対して、ログ制御系２００にＯＳ２０２を搭載すると共に、ＩＯデバイス１へのアクセス制御やＣＰＵ間通信部を、ハイパーバイザ１１０を介して実現する。つまりトレース装置１００２では、さらにハイパーバイザ１１０も加えて、システム動作系１００、ログ制御系２００を構成する。
【００３５】
実施の形態１との違いは、上記のようにログ制御系２００にＯＳ２０２を搭載する点と、ＣＰＵ間通信部とＩＯデバイスアクセス制御部との代わりにハイパーバイザ１１０を利用する点であり、運用方法は実施の形態１と同様である。また、ハイパーバイザ１１０でシステム動作系１００とログ制御系２００とからのＩＯデバイス１へのアクセスに優先度をつけ、システム動作系１００からのＩＯデバイスアクセスを優先する方法としてもよい。優先度付きＩＯデバイスアクセスを行うことで、システム動作系１００への影響、すなわちＩＯデバイスアクセス競合発生時の待ち時間を小さくすることができる。
【００３６】
実施の形態３．
図９、図１０を参照して実施の形態３のトレース装置１００３を説明する。
図９は実施の形態３による、トレース装置１００３の構成図である。図９は、実施の形態１で示したマルチコアプロセッサ内にトレース装置を構築する例において、計算機の入出力を監視・制御するプログラムである、モニタプログラム１２０を利用し、プログラム動作情報を格納する共有メモリ２３の領域を保護する構成である。図９のトレース装置１００３は、実施の形態１の構成にモニタプログラム１２０を搭載する構成である。
図１０は、システム動作系１００のアプリケーションプログラム１０４が、共有メモリ２３へアクセスするフローチャートの例である。モニタプログラム１２０は、共有メモリ２３への不正なアクセスを防止する。共有メモリ２３のプログラム動作情報の領域へアクセスするのは、プログラム動作情報を書き出すプログラムが入っているプロセス（プログラム情報書込部１０７）のみである。図１０に示すように、モニタプログラム１２０は、共有メモリ２３へのアクセスを監視し、プログラム動作情報を書き込むプロセスかどうか判定（ＳＴ２０）する。つまり、モニタプログラム１２０は、ＳＴ２０において、共有メモリ２３へ書き込みを行うのがプログラム情報書込部１０７かどうかを判定する。モニタプログラム１２０は、プログラム動作情報を書き込むプロセス（プログラム情報書込部１０７）である場合、共有メモリ２３へのアクセスを許可（ＳＴ２１）し、プログラム動作情報を書き込むプロセス（プログラム情報書込部１０７）でない場合、共有メモリ２３へのアクセスを禁止（ＳＴ２２）する。
【００３７】
モニタプログラム１２０（監視プログラム）は、マルチコアプロセッサの有する複数のＣＰＵ１０１−１〜１０１−３及びＣＰＵ２０１のうち、少なくともいずれかのＣＰＵを用いることにより、共有メモリ２３への書き込みを監視して書込みプログラム以外のプログラムからの共有メモリ２３への書き込みを禁止する。
【００３８】
プログラム動作情報を書き込むプロセスかどうか判定する方法には、例えばプロセスＩＤを利用してもよい。モニタプログラム１２０によって、３ｒｄＰａｒｔｙアプリケーションや、悪意のあるプログラムから共有メモリ２３への不要なアクセスを防止でき、トレース装置の堅牢性が向上できる。
【００３９】
実施の形態４．
図１１を参照して実施の形態４のトレース装置１００４を説明する。実施の形態１ではマルチコアプロセッサ内にトレース装置を構築する例を示したが、共有メモリ２３へアクセス可能な別プロセッサにログ制御系を構築することも可能である。
図１１は４個のＣＰＵ１０１−１〜１０１−４を備えたマルチコアプロセッサにシステム動作系１００を構築する。また、通信路３を介して共有メモリ２３へアクセス可能なＣＰＵ２０１を備えた別プロセッサに、ログ制御系２００を構築する例である。ログ制御系２００を構築する別プロセッサに専用のＩＯデバイス４が存在する場合、システム動作系１００とログ制御系２００とではＩＯデバイスへのアクセス競合は発生しないため、ＩＯアクセス制御部は不要である。ログ制御系２００を別プロセッサに構築する点と、ＩＯデバイスへのアクセス競合が発生しないハードウェア構成においてＩＯアクセス制御部が不要であること以外は、実施の形態１と同様である。
【００４０】
以上に説明した実施の形態１〜４のトレース装置１００１〜１００４は、以下の効果を有する。
（１）トレース装置１００１〜１００４は、ＣＰＵリソースや処理時間を要するＩＯデバイス１への出力処理を、システムが動作するＣＰＵとは別の専用ＣＰＵで処理する。このため、システム側（システム動作系１００）はプログラム動作情報の出力処理負荷の影響を受けず動作することが可能である。
（２）また、システム動作系１００とログ制御系２００とは異なるシステムで動作する。よって、プログラム動作情報の取得対象であるシステム動作系１００がシステムダウンした状態においても、異なるシステムで動作するログ制御系２００により共有メモリ２からプログラム動作情報を取得し、取得したプログラム動作情報をＩＯデバイス１へ出力することが可能である。
（３）また、ログ制御系２００がシステム動作系１００の稼働状態を監視し、システム動作系１００の異常を検出した場合は、共有メモリ２に書き込まれたプログラム動作情報を強制的にＩＯデバイス１へ出力する。従って、プログラム動作情報が未出力のためプログラム動作情報を解析できないという事態を防ぐことが可能である。
（４）またシステム動作系１００に異常発生時、ログ制御系２００からシステム動作系１００のＣＰＵを停止さてキャッシュ情報を取得する。このため、異常状態に陥ったシステム動作系１００の直前の原因解析が可能である。
（５）共有メモリ２３のプログラム動作情報を格納する格納領域へのアクセスは、システム動作系１００は書き込みのみ、ログ制御系２００は読み込みのみ行う。このため、トレース装置１００１〜１００４の堅牢性を高めることができる。
（６）実施の形態１〜４のトレース装置では既存のマルチコア技術を使用し、トレース装置１００１〜１００４を実現しているため、システムのサイズや、部品点数への影響は無く、コストへの影響もない。そのため、マルチコアプロセッサを搭載した既存システムへの導入や、また近年組込み機器において用いられることが多いＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）やＳｉＰ（Ｓｙｓｔｅｍ  Ｉｎ  Ｐａｃｋａｇｅ）を使用したシステムにも、ハードウェアを変更することなく、導入が可能である。
【００４１】
以上の実施の形態の説明において、「〜部」として説明したものは、「〜手段」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ソフトウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク等の記録媒体に記憶される。プログラムはＣＰＵにより読み出され、ＣＰＵにより実行される。すなわちプログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【００４２】
以上の実施の形態ではトレース装置を説明したが、トレース装置の動作はコンピュータをトレース装置として機能させるためのプログラムとしても把握できることは以上の説明から当然である。また、トレース装置の各「〜部」の動作は、トレース方法としても把握できることは以上の説明により明らかである。
【００４３】
以上、実施の形態を説明したが、これらの実施の形態のうち、２つ以上を組み合わせて実施しても構わない。あるいは、これらの実施の形態のうち、１つを部分的に実施しても構わない。あるいは、これらの実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明はこれらの実施の形態に限定されるものではなく、必要に応じて種々の変形が可能である。
【符号の説明】
【００４４】
１  ＩＯデバイス、２  メモリ、３  通信路、２１  システム動作系メモリ領域、２２  ログ制御系メモリ領域、２３  共有メモリ、１０１−１，１０１−２，１０１−３，２０１  マルチコアプロセッサのＣＰＵ、１０２  オペレーティングシステム、１０３，２０３  ＣＰＵ間通信部、１０４  アプリケーションプログラム、１０５，２０５  ＩＯアクセス制御部、１０６，２０６  異常検出処理部、１００  システム動作系、２００  ログ制御系、１００１，１００２，１００３，１００４  トレース装置。
【図１】
2015118493.tif 000003
【図２】
2015118493.tif 000004
【図３】
2015118493.tif 000005
【図４】
2015118493.tif 000006
【図５】
2015118493.tif 000007
【図６】
2015118493.tif 000008
【図７】
2015118493.tif 000009
【図８】
2015118493.tif 000010
【図９】
2015118493.tif 000011
【図１０】
2015118493.tif 000012
【図１１】
2015118493.tif 000013