(57)【特許請求の範囲】
【請求項１】
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部と、を備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記複数のコアから参照可能でありカウンタ値を出力するカウンタと、
前記カウンタ値を記録すべきイベントを特定する情報であるカウンタ記録リストとをさらに備え、
前記コアは、イベントが発生すると前記カウンタ記録リストに基づき前記カウンタ値の記録の要否を判断し、前記カウンタ値の記録が必要と判断する場合は前記カウンタから前記カウンタ値を取得して当該イベントに関する情報とともに前記記憶部に格納し、前記カウンタ値の記録が不要と判断する場合は前記イベントに関する情報を前記記憶部に格納する、情報処理装置。
【請求項２】
請求項１に記載の情報処理装置であって、
前記カウンタ記録リストは、イベントの種類、およびイベントの発生頻度の少なくとも一方を表す情報である、情報処理装置。
【請求項３】
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部と、を備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記複数のコアの少なくとも１つは、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報に前記参照したアドレスを関連付けて前記記憶部に格納する、情報処理装置。
【請求項４】
請求項３に記載の情報処理装置であって、
前記複数のコアは第１コアおよび第２コアを含み、
前記第１コアは、イベントが発生すると、前記第２コアが次にログを記録する前記記憶部のアドレス、または前記第２コアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報とともに前記参照したアドレスを前記記憶部に格納し、
前記第２コアは、イベントが発生すると、前記第１コアが次にログを記録する前記記憶部のアドレス、または前記第１コアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報を前記記憶部に格納する、情報処理装置。
【請求項５】
請求項３に記載の情報処理装置であって、
前記複数のコアは第１コア、第２コア、および第３コアを含み、
前記第１コアは、イベントが発生すると、前記第２コアが次にログを記録する前記記憶部のアドレス、または前記第２コアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報とともに前記参照したアドレスを前記記憶部に格納し、
前記第２コアは、イベントが発生すると、前記第３コアが次にログを記録する前記記憶部のアドレス、または前記第３コアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報とともに前記参照したアドレスを前記記憶部に格納し、
前記第３コアは、イベントが発生すると、前記第１コアが次にログを記録する前記記憶部のアドレス、または前記第１コアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報とともに前記参照したアドレスを前記記憶部に格納する、情報処理装置。
【請求項６】
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部と、を備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記複数のコアの各々に対応し、対応するコアから参照可能であり時刻に関する情報を出力する複数のタイマをさらに備え、
前記複数のコアの各々は、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報、前記参照したアドレス、および前記タイマが出力する前記時刻に関する情報を関連付けて前記記憶部に格納する、情報処理装置。
【請求項７】
請求項６に記載の情報処理装置であって、
前記複数のコアは４以上のコアである、情報処理装置。
【請求項８】
イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、
前記情報処理装置は、
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部とを備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記解析端末は、
前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、
前記情報処理装置は、前記複数のコアから参照可能でありカウンタ値を出力するカウンタをさらに備え、
前記記憶部には、前記カウンタ値を記録すべきイベントを特定する情報であるカウンタ記録リストがさらに格納され、
前記コアは、イベントが発生すると前記カウンタ記録リストに基づき前記カウンタ値の記録の要否を判断し、前記カウンタ値の記録が必要と判断する場合は前記カウンタから前記カウンタ値を取得して当該イベントに関する情報とともに前記記憶部に格納し、前記カウンタ値の記録が不要と判断する場合は前記イベントに関する情報を前記記憶部に格納し、
前記解析端末の前記演算部は、前記カウンタ値に基づき前記複数のコアで発生したイベントの発生順序を判別し、イベントの発生順序が判別できない場合は発生順序が判別できないイベントをグループとして扱う、情報処理システム。
【請求項９】
イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、
前記情報処理装置は、
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部とを備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記解析端末は、
前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、
前記複数のコアの少なくとも１つは、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報に前記参照したアドレスを関連付けて前記記憶部に格納し、
前記解析端末の前記演算部は、前記イベントに関する情報が格納されたアドレス、および前記イベントに関する情報に関連付けて格納される前記参照したアドレスに基づきイベントの発生順序を判別する、情報処理システム。
【請求項１０】
イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、
前記情報処理装置は、
演算を行う複数のコアと、
前記コアによりイベントのログが格納される記憶部とを備え、
前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、
前記解析端末は、
前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、
前記情報処理装置は、前記複数のコアの各々に対応し、対応するコアから参照可能であり時刻に関する情報を出力する複数のタイマをさらに備え、
前記複数のコアの各々は、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレ
スを参照し、当該イベントに関する情報、前記参照したアドレス、および前記タイマが出力する前記時刻に関する情報を関連付けて前記記憶部に格納し、
前記解析端末の前記演算部は、前記イベントに関する情報が格納されたアドレス、前記イベントに関する情報に関連付けて格納される前記参照したアドレス、および前記イベントに関する情報に関連付けて格納される前記時刻に関する情報に基づき前記複数のタイマの時刻差を推定し、前記推定した前記タイマの時刻差および前記イベントに関する情報に関連付けて格納される前記時刻に関する情報に基づきイベントの発生順序を判別する、情報処理システム。
【請求項１１】
請求項１０に記載の情報処理システムであって、
前記解析端末の前記演算部は、前記イベントに関する情報が格納されたアドレス、前記イベントに関する情報に関連付けて格納される前記参照したアドレス、および前記イベントに関する情報に関連付けて格納される前記時刻に関する情報に基づき、前記複数のタイマの時刻差を表す複数の不等式を作成し、前記複数の不等式を解くことにより前記複数のタイマの時刻差を推定する、情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、および情報処理システムに関する。
【背景技術】
【０００２】
近年の情報処理装置は、処理能力の向上や消費電力の低減の観点から、演算を行うコアを複数備えるものが多い。各コアは独立した動作が可能であるため、動作解析を行う際は同一コアにおけるイベントの発生順序は明確であっても、異なるコア間のイベントの発生順序が不明である問題が知られている。
特許文献１には、複数のコアから参照可能であり、順序に関する情報を出力するカウンタを備える装置が開示されている。その各コアは、イベントが発生するとカウンタから順序に関する情報を取得し、発生したイベントと関連付けて保存することにより異なるコア間でのイベントの発生順序を判断可能としている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００９−０１５８０７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されている発明では、イベントごとにカウンタを付与する。カウンタの付与には排他処理が必要であり処理負荷が高いという問題がある。
【課題を解決するための手段】
【０００５】
本発明の第１の態様による情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部と、を備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記複数のコアから参照可能でありカウンタ値を出力するカウンタと、前記カウンタ値を記録すべきイベントを特定する情報であるカウンタ記録リストとをさらに備え、前記コアは、イベントが発生すると前記カウンタ記録リストに基づき前記カウンタ値の記録の要否を判断し、前記カウンタ値の記録が必要と判断する場合は前記カウンタから前記カウンタ値を取得して当該イベントに関する情報とともに前記記憶部に格納し、前記カウンタ値の記録が不要と判断する場合は前記イベントに関する情報を前記記憶部に格納する。
本発明の第２の態様による情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部と、を備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記複数のコアの少なくとも１つは、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報に前記参照したアドレスを関連付けて前記記憶部に格納する。
本発明の第３の態様による情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部と、を備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記複数のコアの各々に対応し、対応するコアから参照可能であり時刻に関する情報を出力する複数のタイマをさらに備え、前記複数のコアの各々は、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報、前記参照したアドレス、および前記タイマが出力する前記時刻に関する情報を関連付けて前記記憶部に格納する。
本発明の第４の態様による情報処理システムは、イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、前記情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部とを備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記解析端末は、前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、前記情報処理装置は、前記複数のコアから参照可能でありカウンタ値を出力するカウンタをさらに備え、前記記憶部には、前記カウンタ値を記録すべきイベントを特定する情報であるカウンタ記録リストがさらに格納され、前記コアは、イベントが発生すると前記カウンタ記録リストに基づき前記カウンタ値の記録の要否を判断し、前記カウンタ値の記録が必要と判断する場合は前記カウンタから前記カウンタ値を取得して当該イベントに関する情報とともに前記記憶部に格納し、前記カウンタ値の記録が不要と判断する場合は前記イベントに関する情報を前記記憶部に格納し、前記解析端末の前記演算部は、前記カウンタ値に基づき前記複数のコアで発生したイベントの発生順序を判別し、イベントの発生順序が判別できない場合は発生順序が判別できないイベントをグループとして扱う。
本発明の第５の態様による情報処理システムは、イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、前記情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部とを備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記解析端末は、前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、前記複数のコアの少なくとも１つは、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報に前記参照したアドレスを関連付けて前記記憶部に格納し、前記解析端末の前記演算部は、前記イベントに関する情報が格納されたアドレス、および前記イベントに関する情報に関連付けて格納される前記参照したアドレスに基づきイベントの発生順序を判別する。
本発明の第６の態様による情報処理システムは、イベントのログを記録する情報処理装置、および前記情報処理装置が記録した前記イベントのログを解析する解析端末から構成される情報処理システムであって、前記情報処理装置は、演算を行う複数のコアと、前記コアによりイベントのログが格納される記憶部とを備え、前記コアは、イベントが発生すると前記イベントに関する情報、および前記複数のコアの他のコアで発生したイベントとの発生順序を示す情報を前記記憶部に格納し、前記解析端末は、前記情報処理装置が前記記憶部に格納した情報に基づき、前記複数のコアで発生したイベントの発生順序を判別する演算部を備え、前記情報処理装置は、前記複数のコアの各々に対応し、対応するコアから参照可能であり時刻に関する情報を出力する複数のタイマをさらに備え、前記複数のコアの各々は、イベントが発生すると、前記他のコアが次にログを記録する前記記憶部のアドレス、または前記他のコアが直前にログを記録した前記記憶部のアドレスを参照し、当該イベントに関する情報、前記参照したアドレス、および前記タイマが出力する前記時刻に関する情報を関連付けて前記記憶部に格納し、前記解析端末の前記演算部は、前記イベントに関する情報が格納されたアドレス、前記イベントに関する情報に関連付けて格納される前記参照したアドレス、および前記イベントに関する情報に関連付けて格納される前記時刻に関する情報に基づき前記複数のタイマの時刻差を推定し、前記推定した前記タイマの時刻差および前記イベントに関する情報に関連付けて格納される前記時刻に関する情報に基づきイベントの発生順序を判別する。
【発明の効果】
【０００６】
本発明によれば、処理装置がイベントのログを記録する際の処理負荷を減らすことができる。
【図面の簡単な説明】
【０００７】
【図１】第１の実施の形態におけるＥＣＵ１および解析端末８の構成を示すブロック図
【図２】図２（ａ）は第１ログバッファ３１の一例を示す図、図２（ｂ）は第２ログバッファ３２の一例を示す図
【図３】ログ順序テーブル８４の一例を示す図
【図４】統合ログ８６の一例を示す図
【図５】第１コア１１、および第２コア１２の動作を表すフローチャート
【図６】ログ順序テーブル８４を作成する動作を表すフローチャート
【図７】図６のステップＳ５０４ａの詳細を示すサブルーチンのフローチャート
【図８】図６のステップＳ５０４ｂの詳細を示すサブルーチンのフローチャート
【図９】図９（ａ）はステップＳ５０１が完了した状態におけるログ順序テーブル８４を示す図、図９（ｂ）は１回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す図、図９（ｃ）は２回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す図、図９（ｄ）は３回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す図。
【図１０】第２の実施の形態におけるＥＣＵ１および解析端末８の構成を示すブロック図
【図１１】図１１（ａ）は第１ログバッファ３１に記録されるログを示す図、図１１（ｂ）は第２ログバッファ３２に記録されるログを示す図。
【図１２】第２の実施の形態において第１コア１１の動作を表すフローチャート
【図１３】第２の実施の形態において第２コア１２の動作を表すフローチャート
【図１４】第２の実施の形態においてログ順序テーブル８４を作成する動作を表すフローチャート
【図１５】図１５（ａ）はステップＳ５５１が完了した状態におけるログ順序テーブル８４を示す図、図１５（ｂ）は１回目にステップＳ５５７に到達した状態におけるログ順序テーブル８４を示す図、図１５（ｃ）は３回目にステップＳ５５７に到達した状態におけるログ順序テーブル８４を示す図。
【図１６】第２の実施の形態におけるログ順序テーブル８４を示す図
【図１７】第２の実施の形態における統合ログ８６を示す図
【図１８】第３の実施の形態におけるＥＣＵ１Ｂおよび解析端末８Ｂの構成を示すブロック図
【図１９】図１９（ａ）は第１ログバッファ３１に記録されるログを示す図、図１９（ｂ）は第２ログバッファ３２に記録されるログを示す図、図１９（ｃ）は第３ログバッファ３３に記録されるログを示す図、図１９（ｄ）は第４ログバッファ３４に記録されるログを示す図
【図２０】図１９に示すイベントが発生した場合における、第１ログバッファ３１〜第４ログバッファ３４のそれぞれに記録されるログを示す図
【図２１】タイムスタンプ制約テーブル８５の一例を示す図
【図２２】第３の実施の形態において各コアがログを記録する動作を表すフローチャート
【図２３】第３の実施の形態において解析端末８がタイムスタンプ制約テーブル８５、および統合ログ８６を作成する動作を表すフローチャート
【発明を実施するための形態】
【０００８】
（第１の実施の形態）
以下、図１〜図９を参照して、情報処理装置であるＥＣＵの第１の実施の形態を説明する。
図１は、ＥＣＵ１および解析端末８を含む情報処理システム１００を示すブロック図である。
【０００９】
（ＥＣＵ１の構成）
ＥＣＵ１は、ＣＰＵ１０と、タイマデバイス２０と、メモリ３０と、カウンタ４０と、デバッグインタフェース５０と、ＲＯＭ６０とを備える。
【００１０】
ＣＰＵ１０は、複数のコアを備える、いわゆるマルチコアＣＰＵであり、複数のコアが並列して処理を行うことができる。ＣＰＵ１０は、第１コア１１と、第２コア１２とを備える。第１コア１１、および第２コア１２は、動作クロックが等しい。
【００１１】
タイマデバイス２０は、ＣＰＵ１０が備える機能を機能ブロックとして表現したものである。タイマデバイス２０は、第１タイマ２１と、第２タイマ２２とを備える。第１タイマ２１は第１コア１１に含まれ、第２タイマ２２は第２コア１２に含まれる。第１タイマ２１はたとえば第１コア１１の動作クロックに基づきカウントアップされるカウンタである。第１タイマ２１は、第１コア１１からのみ参照される。第２タイマ２２はたとえば第２コア１２の動作クロックに基づきカウントアップされるカウンタである。第２タイマ２２は、第２コア１２からのみ参照される。いずれのタイマも時間の経過とともにカウントアップする点は共通するが、異なるタイマ間での同期は取られていない。すなわち、異なるタイマの出力を直接比較して時間の前後を判別することはできない。
【００１２】
メモリ３０は、ＥＣＵ１の主記憶装置であり、たとえば揮発性メモリから構成される。メモリ３０には、少なくとも第１ログバッファ３１と、第２ログバッファ３２とが確保される。第１ログバッファ３１は、第１コア１１の動作ログが記録される記憶領域である。第２ログバッファ３２は、第２コア１２の動作ログが記録される記憶領域である。メモリ３０には、複数のＣＰＵコアからアクセス可能な共有メモリ領域も確保される。
【００１３】
カウンタ４０は、ＣＰＵ１０と共有メモリ領域に格納されるデータにより実現される、カウンタ機能を機能ブロックとして表現したものである。カウンタ４０は、アクセスされた順番にインクリメントされた値、たとえば「１，２，３、・・」の値を払い出す。カウンタ４０は、複数のコアから略同時に値を要求された場合にも異なる値を出力可能なように、排他制御がなされる。カウンタ４０を実現する動作は後に説明する。
【００１４】
デバッグインタフェース５０は、解析端末８のＥＣＵ接続部８８と通信を行うインタフェースである。デバッグインタフェース５０は、有線または無線により解析端末８と接続される。デバッグインタフェース５０は、解析端末８からの指令に基づき、メモリ３０の第１ログバッファ３１と、第２ログバッファ３２とに記憶されたログを解析端末８に送信する。
【００１５】
ＲＯＭ６０は不揮発性メモリである。ＲＯＭ６０にはカウンタ記録リスト４２、および後述するプログラムが格納される。このプログラムはメモリ３０に展開されてＣＰＵ１０の各コアにより実行される。カウンタ記録リスト４２は、発生するイベントのうちデバッグなどで前後関係の明示が必要なイベントを特定する情報である、イベントの種類、イベントの名称、またはイベントの発生頻度が記録されている。イベントの種類とは、たとえばタスクの開始イベントやタスクの終了イベントである。イベントの発生頻度とは、たとえば１分間に２回以上の発生、前回の発生から１０分以上経過して再度発生、などである。カウンタ記録リスト４２は各コアから参照される。
【００１６】
（解析端末８の構成）
解析端末８は、ＣＰＵ８１と、メモリ８２と、ＲＯＭ８７と、ＥＣＵ接続部８８とを備える。ＣＰＵ８１は、ＲＯＭ８７に格納されたプログラムをメモリ８２に展開して実行する。
【００１７】
メモリ８２は解析端末８の主記憶装置であり、たとえば揮発性メモリから構成される。メモリ８２には、収集ログ８３と、ログ順序テーブル８４と、統合ログ８６とが記憶される。収集ログ８３とは、ＥＣＵ接続部８８を経由してＥＣＵ１から得られたＣＰＵ１０の動作ログである。ログ順序テーブル８４、および統合ログ８６は、後述するプログラムにより収集ログ８３から生成される。
【００１８】
ＲＯＭ８７は不揮発性メモリである。ＲＯＭ８７には後述するプログラムが格納される。このプログラムはメモリ８２に展開されてＣＰＵ８１により実行される。
【００１９】
ＥＣＵ接続部８８は、ＥＣＵ１のデバッグインタフェース５０と通信を行うインタフェースである。ＥＣＵ接続部８８は、有線または無線によりＥＣＵ１と接続される。解析端末８のＣＰＵは、ＥＣＵ接続部８８を介して、メモリ３０の第１ログバッファ３１と、第２ログバッファ３２とに記憶されたログを取得する。
【００２０】
（ＥＣＵ１の動作概要）
ＥＣＵ１は車両に搭載され、不図示のＣＡＮバスにより車両に搭載された他のＥＣＵと通信を行う。
【００２１】
ＥＣＵ１の各ＣＰＵコアは、ＲＯＭ６０に格納されたプログラムを実行することにより以下の動作を行う。すなわち、第１コア１１および第２コア１２は、それぞれ、イベントが発生すると第１ログバッファ３１および第２ログバッファ３２にイベントの内容を記録する。さらに、そのイベントがカウンタ記録リスト４２に記載されたイベントの種類、またはイベントの名称と一致すると、カウンタ４０にカウンタ値を要求し、得られたカウンタ値も併せて記録する。換言すると、カウンタ記録リスト４２にはカウンタ値の記録が必要なイベントの条件が格納される。本実施の形態では、カウンタ記録リスト４２が「タスクの開始、タスクの終了」であるとして説明を続ける。
【００２２】
メモリ３０の第１ログバッファ３１、および第２ログバッファ３２には、それぞれ第１コア１１、および第２コア１２の動作ログが順番に記録される。
【００２３】
（動作ログの例）
図２（ａ）は第１ログバッファ３１の一例を示す図、図２（ｂ）は第２ログバッファ３２の一例を示す図である。第１ログバッファ３１、および第２ログバッファ３２には、バッファ行数、イベント内容、カウンタ、の３つがたとえば図２に示すように表として記録される。１列目の「バッファ行数」は、各ログバッファにおけるインデックス列であり、１から順番に増加し、後に発生したイベントほど大きいインデックス番号として記録される。２列目の「イベント内容」は、発生したイベントの名称やイベントの内容を示す列である。「イベント内容」としてより詳細を、たとえば通信先の機器や通信により授受した値を記録してもよい。３列目の「カウンタ」は、イベントのカウンタ値を示す列である。イベントがカウンタ記録リスト４２に記載された条件に一致する場合には、カウンタ４０から取得したカウンタ値が記録される。イベントがカウンタ記録リスト４２に記載された条件に一致しない場合には、カウンタ値は記録されない。図２ではカウンタ値が記録されなかった場合を「−」として示している。以下では、図２（ａ）、（ｂ）におけるバッファ行数がＸである行のログを「Ｘ行目のログ」と呼ぶ。
【００２４】
（解析端末８の動作概要）
解析端末８は、ＲＯＭ８７に格納されたプログラムをＣＰＵ８１が実行することにより以下の動作を行う。解析端末８は、ＥＣＵ接続部８８を経由してＥＣＵ１の第１ログバッファ３１、および第２ログバッファ３２に保存されたログを取得し、メモリ８２に収集ログ８３として保存する。そして、収集ログ８３に格納された複数のコアのログを統合してログ順序テーブル８４を生成し、ログ順序テーブル８４を用いて統合ログ８６を作成する。
【００２５】
収集ログ８３として記録される情報は、図２に例示した情報と同様なので説明を省略する。
【００２６】
解析端末８によるログ順序テーブル８４の作成概略は以下のとおりである。ＣＰＵ８１は、収集ログ８３のカウンタの値に注目して、第２コア１２のログを第１コア１１のログの適切な位置に挿入する。たとえば、第２コア１２の先頭行、すなわちバッファ行数１のログのカウンタ値は「２」なので、カウンタ値が「１」のイベントよりも後でありカウンタ値が「３」のイベントよりも前に発生していることがわかる。ただし、第１コア１１のログではバッファ行数「２」にカウンタ値が付与されていないイベントがあり、そのイベントとの前後が明らかでない。そこで、前後が明らかでないイベント同士をログ集合として記録する。
【００２７】
（ログ順序テーブル８４の一例）
図３はログ順序テーブル８４の一例を示す図である。ログ順序テーブル８４は、順序とイベント内容とがたとえば図３に示すように表として記録される。ログ順序テーブル８４の「順序」は、単一のイベント、または２以上のイベントの集合であるログ集合に対して付与された順番であり、後に発生したイベントほど大きい「順序」の数字が付与される。ログ順序テーブル８４の「順序」は、単一のイベント、またはログ集合が記録される。イベントの発生した順番の前後が明らかでないイベント同士は、ログ集合として記録される。図３では、順序が「２」のイベントがログ集合である。
【００２８】
（統合ログ８６の一例）
図４は、統合ログ８６の一例を示す図である。統合ログ８６は、統合順序とコア番号とイベント内容とが、たとえば図４に示すように表として記録される。統合ログ８６に表される情報とログ順序テーブル８４に表される情報は略同一である。ログ順序テーブル８４は「順序」ごとに「イベント内容」を表したが、統合ログ８６では「イベント内容」ごとに「順序」を表している。すなわち、発生した順序が特定されないイベントは、「統合順序」に想定しうる全ての順序が記載される。図４における３〜４行目は発生した順序が明らかでないため、両者とも「統合順序」は「２ｏｒ ３」と記録される。
【００２９】
解析端末８は、作成されたログ順序テーブル８４に基づき統合ログ８６を作成する。たとえば解析端末８は、ログ順序テーブル８４を上の行から順番に処理し、単一のイベントのみが記載されている行は、そのイベントを統合ログ８６に転記し、１からの連番になるように統合順序を決定する。また解析端末８は、イベントの集合であるログ集合が記載されている行は、ログ集合を個別のイベントに分解し、１からの連番であり想定される全ての順序を統合順序として決定する。
【００３０】
（カウンタ４０の動作）
カウンタ４０は、ＣＰＵ１０の各コアがたとえば以下の処理を行うことにより実現される。
【００３１】
ＥＣＵ１の起動時の処理として、全てのコアからアクセス可能な共有メモリ領域にロックフラグ領域と、カウンタ値領域を確保する。このロックフラグ領域にロックフラグを設けることにより排他処理を行う。ロックフラグ領域にはロックフラグを設けず、カウンタ値領域には初期値であるゼロを格納する。あるコアが新たなカウンタ値を要求する場合に、まずロックフラグ領域におけるロックフラグの有無を確認する。ロックフラグが存在する場合には他のコアがカウンタの取得中なので、ロックフラグが消去されるまで待機する。ロックフラグが存在しない場合には、他のコアのアクセスを排除するためにロックフラグを立て、カウンタ値領域の値をインクリメントする。そして、インクリメント後の値をカウンタ値として取得し、他のコアのアクセスを許可するためにロックフラグを消去する。以上の処理によりカウンタ４０の機能が実行される。
【００３２】
上述した各プログラムの動作をフローチャートを用いて説明する。
（ＥＣＵ１の動作を表すフローチャート）
図５は、第１コア１１、および第２コア１２の動作を表すフローチャートである。以下に説明する各ステップの動作主体は、第１コア１１、および第２コア１２である。
【００３３】
ステップＳ４０１では、イベントが発生したか否かを判断する。第１コア１１であれば第１コア１１においてイベントが発生したか否か、第２コア１２であれば第２コア１２でイベントが発生したか否かを判断する。イベントが発生しないと判断する場合はステップＳ４０１に留まり、イベントが発生したと判断する場合はステップＳ４０２に進む。
ステップＳ４０２では、発生したイベントの種別、または内容を判別する。続くステップＳ４０３では、ステップＳ４０２において判別したイベントがカウンタ記録リスト４２に掲載されているか否かを判断する。掲載されていると判断する場合はカウンタの値を取得するためにステップＳ４０４に進み、掲載されていないと判断する場合はステップＳ４０８に進む。
【００３４】
ステップＳ４０４では、排他処理であるロックが可能であるか否かを判断し、ロックが不可能であると判断するとステップＳ４０４に留まり、ロックが可能であると判断するとステップＳ４０５に進む。
【００３５】
ステップＳ４０５では、ロックを実行して他のコアによるカウンタへのアクセスを排除する。続くステップＳ４０６ではカウンタを増加させて、その増加後の値を取得する。さらにステップＳ４０７では、他のコアのカウンタへのアクセスを許可するためにロックを解除してステップＳ４０８に進む。
【００３６】
ステップＳ４０８では、ログを第１ログバッファ３１、または第２ログバッファ３２記録して図５に示すフローチャートを終了し、再び当該フローチャートの先頭に戻る。
【００３７】
（解析端末８の動作を表すフローチャート）
図６は、ログ順序テーブル８４を作成する際の解析端末８のＣＰＵ８１の動作を表すフローチャートである。以下に説明する各ステップの動作主体はＣＰＵ８１である。
ステップＳ５０１では、収集ログ８３に格納されている第１コア１１のログをログ順序テーブル８４にコピーする。続いて実行されるステップＳ５０２では、収集ログ８３にログが格納されている残りのコア、すなわち第２コア１２をログの処理対象コアに選択してステップＳ５０３に進む。
【００３８】
ステップＳ５０３では、処理対象コアに選択した第２コア１２のログのうち、先頭に記録されているログを処理対象ログに選択し、ステップＳ５０４に進む。
【００３９】
ステップＳ５０４では、処理対象ログがカウンタ値を含むか否かを判断する。カウンタ値を含むと判断する場合はそのカウンタ値をＣ０として読み込んでステップＳ５０４ａに進み、カウンタ値を含まないと判断する場合はステップＳ５０４ｂに進む。
【００４０】
ステップＳ５０４ａ、およびステップＳ５０４ｂの詳細は、それぞれ図７と図８を用いて後に説明する。ステップＳ５０４ａ、またはステップＳ５０４ｂの実行が完了すると、次にステップＳ５１０に進む。
【００４１】
ステップＳ５１０では、処理対象コアに選択した第２コア１２のログのうち、処理対象ログに選択していないログがまだあるか否かを判断する。未選択のログがまだあると判断する場合はステップＳ５１１に進み、全てのログを処理対象ログとして選択済みの場合、すなわち現在の処理対象ログが当該コアの最後のログであると判断する場合はステップＳ５１２に進む。
【００４２】
ステップＳ５１１では、処理対象コアのログのうち、現在選択中の処理対象ログの次に記録されているログを次の処理対象ログとして読み込み、ステップＳ５０４に戻る。
【００４３】
ステップＳ５１２では、ログが未処理のコア、すなわち処理対象コアに選択していないコアが他にもまだあるか否かを判断する。ログが未処理のコアが他にもあると判断する場合はステップＳ５０３に戻り、他にはないと判断する場合は図６に示すフローチャートを終了し、再び当該フローチャートの先頭に戻る。
【００４４】
（ステップＳ５０４ａの詳細）
図７を用いてステップＳ５０４ａの詳細を説明する。なお前述のとおり、ステップＳ５０４ａが実行される直前に、処理対象ログに含まれるカウンタ値がＣ０として記憶されている。
【００４５】
ステップＳ５０５では、ログ順序テーブル８４からＣ０より小さい最大のカウンタ値を有する行を探し、この行をＬ１として記憶する。次にステップＳ５０６に進む。
【００４６】
ステップＳ５０６では、ログ順序テーブル８４からＣ０より大きい最小のカウンタ値を有する行を探し、この行をＬ２として記憶する。次にステップＳ５０７に進む。
【００４７】
ステップＳ５０７では、ログ順序テーブル８４のＬ１とＬ２の間にカウンタ値を含まない行があるか否かを判断する。換言すると、ログ順序テーブル８４においてＬ１とＬ２が隣接する行であるか否かを判断する。カウンタ値を含まない行があると判断する場合はステップＳ５０８に進み、カウンタ値を含まない行がないと判断する場合はステップＳ５０９に進む。
【００４８】
ステップＳ５０８では、ログ順序テーブル８４のＬ１とＬ２の間の行であって、ステップＳ５０７において特定したカウンタ不含行に、処理対象ログを追加する。以上で図７のサブルーチンを終了し、図６のステップＳ５１０に戻る。
【００４９】
ステップＳ５０９では、ログ順序テーブル８４における隣接する２行であるＬ１とＬ２の間に新たな行を作成し、処理対象のログを挿入する。以上で図７のサブルーチンを終了し、図６のステップＳ５１０に戻る。
【００５０】
（ステップＳ５０４ｂの詳細）
図８を用いて、処理対象ログにカウンタ値がない場合の処理である、図６のステップＳ５０４ｂの詳細を説明する。
【００５１】
ステップＳ５２０では、処理対象コアのログのうち、処理対象ログの直前の行に位置するログのカウンタ値をＣ１として記録し、処理対象ログ以降の行で直後に出現するログのカウンタ値をＣ２として記録する。
【００５２】
具体例を用いてステップＳ５２０の動作を説明する。処理対象コアのログが図２（ｂ）に示すログであり、そのうち２行目のログが処理対象ログの場合に、Ｃ１およびＣ２は以下のように決定される。すなわち、処理対象ログである２行目の直前の行に位置する１行目におけるカウンタ値「２」がＣ１として記憶される。また、処理対象ログである２行目以降を順番に見ると、３行目はカウンタ値がないのでスキップされ、その次の行である４行目はカウンタ値が格納されているので、４行目のカウンタ値「５」がＣ２として記憶される。
【００５３】
ステップＳ５２１では、ステップＳ５２０において記憶したカウンタ値Ｃ１とＣ２が、Ｃ２＝＝Ｃ１＋１の関係を満たすか否かを判断する。この関係を満たすと判断する場合はステップＳ５２２に進み、この関係を満たさないと判断する場合はステップＳ５２３に進む。
【００５４】
ステップＳ５２２では、処理対象コアのログのうち、処理対象ログの行〜カウンタ値がＣ２である行の直前の行までのログを、ログ順序テーブル８４におけるカウンタ値がＣ１である行の下に挿入する。次にステップＳ５２４に進む。
【００５５】
ステップＳ５２３では、ログ順序テーブル８４において、カウンタ値ＣがＣ１＜Ｃ＜Ｃ２の関係を満たす行のログと、処理対象コアのログのうち、処理対象ログの行〜カウンタ値がＣ２である行の直前の行までのログとでログ集合を形成させ、ステップＳ５２４に進む。
【００５６】
ステップＳ５２４では、処理対象コアのログにおいて、カウンタ値がＣ２である行の直前の行までのログを処理済みに設定する。すなわち、次にステップＳ５１１が実行されるとカウンタ値がＣ２の行が読み込まれる。以上で図８のサブルーチンを終了し、図６のステップＳ５１０に戻る。
【００５７】
（ログ順序テーブル８４を作成する動作例）
図９を参照しながら、図６〜８を用いて説明したログ順序テーブル８４の作成処理の具体例を説明する。図９（ａ）〜（ｄ）は、図２に示したログデータを用いてログ順序テーブル８４を作成する過程を示す図である。
【００５８】
解析端末８のＣＰＵ８１は、図６により動作が表されるプログラムを実行してログ順序テーブル８４を作成する。
【００５９】
図６のステップＳ５０１において、ＣＰＵ８１は第１コア１１のログをログ順序テーブル８４にコピーする。図９（ａ）は、ステップＳ５０１が完了した状態におけるログ順序テーブル８４を示す。ステップＳ５０３において第２コア１２の１行目のログが処理対象ログに選択される。
【００６０】
（動作例  １行目の処理）
続くステップＳ５０４では、処理対象ログに選択された第２コア１２の１行目のログは図２（ｂ）に示すようにカウンタ値として「２」が記録されているので、変数ＣＯに「２」が代入されるとともに肯定判定され、ステップＳ５０４ａ、すなわち図７のサブルーチンに進む。図７のサブルーチンでは、ステップＳ５０５において、図９（ａ）に示すログ順序テーブル８４から「２」より小さい最大のカウンタ値を有する行が探索され、カウンタ値が「１」であるが１行目が該当するので「１行目」がＬ１として記憶される。続くステップＳ５０６において、同様に「２」より大きい最小のカウンタ値を有する行が探索され、３行目が該当するので「３行目」がＬ２として記憶される。続くステップＳ５０７ではＬ１、すなわち１行目とＬ２，すなわち３行目の間にカウンタ値を含まない行があるか否かが判断される。ログの２行目がカウンタ値を含まないので、ここでは肯定判定されてステップＳ５０８に進む。ステップＳ５０８では、ログ順序テーブル８４の２行目に処理対象ログである第２コア１２の１行目のログが追加される。以上で図７に示すサブルーチンの処理が完了し、図６のステップＳ５１０に戻る。
【００６１】
図９（ｂ）は、１回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す。ステップＳ５１０では、第２コア１２のログが２行目以降も存在することから肯定判定される。続くステップＳ５１１では、第２コア１２の２行目のログが読み込まれ、ステップＳ５０４に戻る。
【００６２】
（動作例  ２行目の処理）
ステップＳ５０４では、処理対象ログに選択された第２コア１２の２行目のログは図２（ｂ）に示すようにカウンタ値として「４」が記録されているので、変数ＣＯに「４」が代入されるとともに肯定判定され、ステップＳ５０４ａ、すなわち図７のサブルーチンに進む。
【００６３】
図７のサブルーチンでは、図９（ｂ）に示すログ順序テーブル８４が参照され、ステップＳ５０５においてカウンタ値が「４」である「３行目」がＬ１として記憶される。続くステップＳ５０６では、カウンタ値が「６」である「４行目」がＬ２として記憶される。続くステップＳ５０７では、Ｌ１とＬ２が連続しているので否定判定され、ステップＳ５０９が実行される。ステップＳ５０９では、ログ順序テーブル８４の３行目と４行目の間に処理対象ログである第２コア１２の２行目のログが挿入される。以上で図７に示すサブルーチンの処理が完了し、図６のステップＳ５１０に戻る。
【００６４】
図９（ｃ）は、２回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す。ステップＳ５１０では、第２コア１２のログが３行目以降も存在することから肯定判定される。続くステップＳ５１１では、第２コア１２の３行目のログが読み込まれ、ステップＳ５０４に戻る。
【００６５】
（動作例  ３行目の処理）
ステップＳ５０４では、処理対象ログに選択された第２コア１２の３行目のログは図２（ｂ）に示すようにカウンタ値が含まれないので否定判定され、ステップＳ５０４ｂ、すなわち図８のサブルーチンに進む。
【００６６】
図８のサブルーチンでは、ステップＳ５２０において、第２コア１２のログにおける処理対象ログである３行目のログの直前と直後に記録されているログのカウンタ値が参照される。図２（ｂ）に示す例では、３行目のログの直前に記録されている２行目のログのカウンタ値は「４」であり、３行目のログの直後に記録されている４行目のログのカウンタ値は「５」である。したがって、「４」がＣ１、「５」がＣ２として記録される。ステップＳ５２１では、Ｃ１とＣ２が「Ｃ２＝＝Ｃ１＋１」の関係を満たすので肯定判定され、ステップＳ５２２に進む。ステップＳ５２２では、第２コア１２のログのうち処理対象ログの行からカウンタ値がＣ２である行まで、すなわち３行目〜４行目のログが選択され、ログ順序テーブル８４のカウンタ値がＣ１である行、すなわち図９（ｃ）に示す４行目の下に挿入される。以上で図８に示すサブルーチンの処理が完了し、図６のステップＳ５１０に戻る。
【００６７】
図９（ｄ）は、３回目にステップＳ５１０に到達した状態におけるログ順序テーブル８４を示す。ステップＳ５１０では、第２コア１２のログが全て処理されたので否定判定される。続くステップＳ５１２では、本実施例ではコアが２つだけでありログが未処理のコアが存在しないので否定判定され、ログ順序テーブル８４の作成を終了する。解析端末８のＣＰＵ８１は、図６に示すフローチャートの処理が完了すると、作成したログ順序テーブル８４からカウンタ値の列を削除してメモリ８２に記憶する。このようにして作成されたログ順序テーブル８４が先に図３で示したものである。
【００６８】
前述のとおり解析端末８のＣＰＵ８１は、ログ順序テーブル８４の作成が完了すると、ログ順序テーブル８４に基づき統合ログ８６を作成する。
【００６９】
上述した第１の実施の形態によれば、次の作用効果が得られる。
（１）情報処理装置、すなわちＥＣＵ１は、演算を行う複数のコア、すなわち第１コア１１および第２コア１２と、第１コア１１および第２コア１２によりイベントのログが格納される記憶部、すなわちメモリ３０と、を備える。第１コア１１および第２コア１２は、イベントが発生するとイベントに関する情報、および複数のコアの他のコアで発生したイベントとの発生順序を示す情報を記憶部３０に格納する。
【００７０】
（２）ＥＣＵ１は、複数のコアから参照可能でありカウンタ値を出力するカウンタ４０と、カウンタ値を記録すべきイベントを特定する情報であるカウンタ記録リスト４２とを備える。第１コア１１および第２コア１２は、イベントが発生するとカウンタ記録リスト４２に基づきカウンタ値の記録の要否を判断し、カウンタ値の記録が必要と判断する場合はカウンタ４０からカウンタ値を取得して当該イベントに関する情報とともに記憶部３０に格納し、カウンタ値の記録が不要と判断する場合はイベントに関する情報を記憶部３０に格納する。
そのため、ＥＣＵ１は、カウンタ記録リスト４２に記載された条件に合致するイベントが発生した場合のみカウンタ４０からカウンタ値を取得するので、排他処理が必要であることにより処理負荷が高いカウンタ４０の利用頻度を低減させることができる。すなわち、ＥＣＵ１の処理負荷を低減することができる。
【００７１】
（３）カウンタ記録リスト４２は、イベントの種類、およびイベントの発生頻度の少なくとも一方を表す情報である。そのため、ＥＣＵ１に発生するイベントのうち、異なるコア間での発生順序を明確に記録したいイベントを簡易に指定することができる。
【００７２】
（４）情報処理システム１００は、イベントのログを記録する情報処理装置、すなわちＥＣＵ１、および情報処理装置が記録したイベントのログを解析する解析端末、すなわち解析端末８から構成される。解析端末８は、情報処理装置が記憶部に格納した情報に基づき、複数のコアで発生したイベントの発生順序を判別する演算部、すなわちＣＰＵ８１を備える。そのため、ＥＣＵ１の各コアが記録したイベントの発生順序を解析端末８において判別することができる。
【００７３】
（５）解析端末８の演算部、すなわちＣＰＵ８１は、カウンタ値に基づき複数のコアで発生したイベントの発生順序を判別し、イベントの発生順序が判別できない場合は発生順序が判別できないイベントをグループ、すなわちログ集合として扱う。
そのため、カウンタ値が関連付けられておらずイベントの発生順序が判別できないイベントを図３の順序が「２」の欄に示すようにログ集合として扱い、順序が判別できないことを明確に示すことができる。
【００７４】
（変形例）
上述した第１の実施の形態を以下のように変形してもよい。
（１）ＥＣＵ１の各コアは、イベントをメモリ３０のログバッファに記録する際に、タイマデバイス２０から取得するタイムスタンプも併せて記録してもよい。
（２）カウンタ４０は数字以外を出力してもよい。たとえば文字列を辞書順にＡＡＡＡ、ＡＡＡＢ、ＡＡＡＣ、・・・と変化させて出力してもよい。すなわち、カウンタ４０の出力は、順列が明らかな情報であればよい。
（３）ＥＣＵ１は、３以上のコアを備えてもよい。
（４）ＥＣＵ１と解析端末８を直接接続することなく、外部記憶媒体等を介してＥＣＵ１から解析端末８に各コアのログをコピーしてもよい。
（５）第１の実施の形態におけるＥＣＵ１は、複数のコアを有するＣＰＵ１０、いわゆるマルチコアプロセッサを備えた。しかし、ＥＣＵ１は２以上のＣＰＵを備える構成、いわゆるマルチプロセッサ構成としてもよい。この場合は各ＣＰＵは１以上のコアを備え、それらの各コアが第１の実施の形態におけるＥＣＵ１の各コアと同様の動作を行う。
【００７５】
（第２の実施の形態）
図１０〜図１７を参照して、情報処理装置であるＥＣＵの第２の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、カウンタの代わりに、次にログを記録するメモリ上のアドレスを記録する点で、第１の実施の形態と異なる。
【００７６】
（構成）
図１０は、第２の実施の形態における情報処理システム１００Ａ、すなわちＥＣＵ１Ａおよび解析端末８Ａの構成を示すブロック図である。
【００７７】
ＥＣＵ１Ａは、メモリ３０の第１ログバッファ３１および第２ログバッファ３２に記録される情報が第１の実施の形態と異なる。またＥＣＵ１Ａは、第１の実施の形態と異なりカウンタ４０を備えず、ＲＯＭ６０にカウンタ記録リスト４２が格納されない。また、ＲＯＭ６０に格納されるプログラムの動作が第１の実施の形態と異なる。さらにメモリ３０の共有メモリ領域には、第１コア１１、および第２コア１２のそれぞれが次にログを記録する第１ログバッファ３１および第２ログバッファ３２のアドレスが格納される。この共有メモリ領域はいずれのコアからも参照可能であるが、第１コア１１が次にログを記録する第１ログバッファ３１のアドレスが記録される領域は第１コア１１のみ書き込みが可能であり、第２コア１２が次にログを記録する第２ログバッファ３２のアドレスが記録される領域は第２コア１２のみ書き込みが可能である。すなわちコア間でアドレスの相互参照が可能であり、かつ排他処理を行わないのでオーバーヘッドが小さい。なお、次にログを記録するアドレスを共有メモリに記録する代わりに各コアが備える記憶領域に記録し、他コアから参照可能に構成してもよい。
【００７８】
第１の実施の形態と同様に、第１ログバッファ３１および第２ログバッファ３２には順番にログが記録される。換言すると、第１コア１１および第２コア１２は、第１ログバッファ３１または第２ログバッファ３２にそれぞれログを書き込む度に、次にログを記録するメモリ上のアドレスをインクリメントする。本実施の形態では、第１ログバッファ３１は１０１のアドレスから使用し、第２ログバッファ３２は２０１のアドレスから使用し、記録するたびにアドレスを「１」増加させる。前述のとおり、第１ログバッファ３１および第２ログバッファ３２において次にログを記録するアドレスは、コア間で相互に共有メモリ上で参照可能である。
【００７９】
図１１（ａ）は第１ログバッファ３１に記録されるログを示す図、図１１（ｂ）は第２ログバッファ３２に記録されるログを示す図である。第２の実施の形態でも第１の実施の形態と同様のイベントが発生したとして説明する。
【００８０】
第１ログバッファ３１には、バッファアドレス、イベント内容、他コアログバッファポインタ、の３つがたとえば図１１（ａ）に示すように表として記録される。他コアログバッファポインタとは、第２コアが次にログを記録するアドレスである。以下では、他コアログバッファポインタの値を「ポインタ値」とも呼ぶ。第２ログバッファ３２には、他コアログバッファポインタを除く２項目、すなわちバッファアドレス、およびイベント内容がたとえば図１１（ｂ）に示すように表として記録される。
【００８１】
解析端末８Ａの構成は第１の実施の形態と同様である。ただし、収集ログ８３として記録される情報が第１の実施の形態と異なっており、収集ログ８３からログ順序テーブル８４を作成する工程、すなわちＲＯＭ８７に格納されるプログラムの動作が第１の実施の形態と異なる。ログ順序テーブル８４に基づき統合ログ８６を作成する工程は第１の実施の形態と同様である。また、ログ順序テーブル８４、および統合ログ８６に保存される情報は第１の実施の形態と同様である。
【００８２】
（ＥＣＵ１Ａの動作概要）
ＥＣＵ１Ａの各ＣＰＵコアは、ＲＯＭ６０に格納されたプログラムを実行することにより以下の動作を行う。本実施の形態では、第１コア１１と第２コア１２の動作が異なる。
【００８３】
第１コア１１は、イベントが発生すると、メモリ３０を参照して第１コア１１が次にログを記録する第１ログバッファ３１のアドレスを確認し、そのアドレスにイベントの内容を記録する。また、第１コア１１は第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを参照し、そのアドレスを、上記でイベントの内容を記録したのと同じアドレスに他コアログバッファポインタとして記録する。さらに、メモリ３０に記録されている情報である、次に第１コア１１がログを記録するアドレスをインクリメントする。
【００８４】
第２コア１２は、イベントが発生すると、メモリ３０を参照して第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを確認し、そのアドレスにイベントの内容を記録する。そして、メモリ３０に記録されている情報である、次に第２コア１２がログを記録する第２ログバッファ３２のアドレスをインクリメントする。すなわち第２コア１２は、第１コア１１とは異なり、第１コア１１が次にログを記録する第２コア１２のアドレスを他コアログバッファポインタとして記録しない。
【００８５】
（解析端末８Ａの動作概要）
解析端末８Ａの動作である、ＥＣＵ１の第１ログバッファ３１、および第２ログバッファ３２に保存されたログの取得、およびログ順序テーブル８４を用いた統合ログ８６の作成は第１の実施の形態と同様なので説明を省略する。ここでは、第１の実施の形態との差異である、収集ログ８３に基づくログ順序テーブル８４の作成の概要を説明する。
【００８６】
解析端末８Ａによるログ順序テーブル８４の作成概略は以下のとおりである。ＣＰＵ８１は、第１コア１１のログにおいて他コアログバッファポインタの値の増加に着目し、増加前の行と増加後の行の間に、第２コア１２のログを挿入する。挿入する第２コア１２のログは、原則として増加前の他コアログバッファポインタの値である。ただし他コアログバッファポインタの値が複数増加する場合は、増加した数と同数のログを挿入する。
【００８７】
上述した各プログラムの動作をフローチャートを用いて説明する。
（ＥＣＵ１Ａのコア１の動作を表すフローチャート）
図１２は、第１コア１１の動作を表すフローチャートである。以下に説明する各ステップの動作主体は第１コア１１である。
【００８８】
ステップＳ４５１では、イベントが発生したか否かを判断する。イベントが発生しないと判断する場合はステップＳ４５１に留まり、イベントが発生したと判断する場合はステップＳ４５２に進む。
【００８９】
ステップＳ４５２では、第２コア１２の記録アドレス、すなわち第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを共有メモリから読み取る。続くステップＳ４５３では、自コアの記録アドレス、すなわち第１コア１１が次にログを記録する第１ログバッファ３１のアドレスを共有メモリから読み取る。次にステップＳ５４５に進む。
【００９０】
ステップＳ４５４では、ステップＳ４５３において読み取った第１ログバッファ３１のアドレスに、発生したイベントの内容と、ステップＳ４５２において読み取った第２コア１２が次にログを記録する第２ログバッファ３２のアドレスとを書き込む。続くステップＳ４５５では、ステップＳ４５３において読み取った第１ログバッファ３１のアドレスをインクリメントし、次に第１コア１１がログを記録する第１ログバッファ３１のアドレスとして共有メモリに記録する。以上で図１２に示すフローチャートを終了し、再び当該フローチャートの先頭に戻る。
【００９１】
（ＥＣＵ１Ａのコア２の動作を表すフローチャート）
図１３は、第２コア１２の動作を表すフローチャートである。以下に説明する各ステップの動作主体は第２コア１２である。第１コア１１と共通する動作には同一のステップ番号を付し、主に第１コア１１の動作との差異点を説明する。
【００９２】
第２コア１２は、イベントが発生したと判断すると（ステップＳ４５１：ＹＥＳ）、共有メモリから自コアの記録アドレス、すなわち第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを読み取る（ステップＳ４５３）。続くステップＳ４５４Ａにおいて、ステップＳ４５３において読み取った第２ログバッファ３２のアドレスに、発生したイベントの内容を書き込む。続くステップＳ４５５では、ステップＳ４５３において読み取った第２ログバッファ３２のアドレスをインクリメントし、次に第２コア１２がログを記録する第２ログバッファ３２のアドレスとして共有メモリに記録する。以上で図１３に示すフローチャートを終了し、再び当該フローチャートの先頭に戻る。
【００９３】
（解析端末８の動作を表すフローチャート）
図１４は、ログ順序テーブル８４を作成する際の解析端末８のＣＰＵ８１の動作を表すフローチャートである。以下に説明する各ステップの動作主体はＣＰＵ８１である。
ステップＳ５５１では、収集ログ８３に格納されている第１コア１１のログをログ順序テーブル８４にコピーし、ステップＳ５５２に進む。
【００９４】
ステップＳ５５２では、ログ順序テーブル８４の１行目のログにおける他コアログバッファポインタの値、すなわちポインタ値をＰｒとして記録し、ステップＳ５５３に進む。
【００９５】
ステップＳ５５３では、ログ順序テーブル８４の２行目のログを処理対象ログに選択し、ステップＳ５５４に進む。
【００９６】
ステップＳ５５４では、処理対象ログのポインタ値と記憶しているＰｒとが異なるか否か、すなわち異なるか一致するかを判断する。異なると判断する場合はステップＳ５５５に進み、一致すると判断する場合はステップＳ５５７に進む。
【００９７】
ステップＳ５５５では、処理対象ログのポインタ値をＰｎとして記録する。続くステップＳ５５６では、ログ順序テーブル８４における処理対象ログの上に、第２コア１２のログであって、ポインタ値ＰがＰｒ≦Ｐ＜Ｐｎを満たすログを挿入してステップＳ５５６Ａに進む。
【００９８】
ステップＳ５５６Ａでは、Ｐｎの値をＰｒに代入してステップＳ５５７に進む。
【００９９】
ステップＳ５５７では、ログ順序テーブル８４に未処理のログがあるか否かを判断し、未処理のログがあると判断する場合はステップＳ５５８に進む。
【０１００】
ステップＳ５５８では、ログ順序テーブル８４において現在の処理対象ログの次の行のログを処理対象ログに設定し、ステップＳ５５４に戻る。
【０１０１】
ステップＳ５５９では、未挿入の第２コア１２のログを、ログ順序テーブル８４の末尾に追加し、図１４のフローチャートを終了する。
【０１０２】
（ログ順序テーブル８４を作成する動作例）
図１５を参照しながら、図１４を用いて説明したログ順序テーブル８４の作成処理の具体例を説明する。図１５（ａ）〜（ｃ）は、図１１に示したログデータを用いてログ順序テーブル８４を作成する過程を示す図である。
【０１０３】
解析端末８ＡのＣＰＵ８１は、図１４により動作が表されるプログラムを実行してログ順序テーブル８４を作成する。
【０１０４】
図１４のステップＳ５５１において、ＣＰＵ８１は第１コア１１のログをログ順序テーブル８４にコピーする。図１５（ａ）は、ステップＳ５５１が完了した状態におけるログ順序テーブル８４を示す。ステップＳ５５２においてログ順序テーブル８４の１行目のログのポインタ値をＰｒとして記録し、続くステップＳ５５３において図１５（ａ）に示すログ順序テーブル８４の２行目のログ、すなわちバッファアドレスが「１０２」のログが処理対象ログに選択される。
【０１０５】
（動作例  １ループ目の処理）
ステップＳ５５４では、処理対象ログのポインタ値である「２０２」と、記録していたポインタ値Ｐｒの値である「２０１」とが異なるか否かが判断され、両者は異なるので肯定判断されてステップＳ５５５に進む。ステップＳ５５５では、処理対象ログのポインタ値である「２０２」がＰｎとして記録される。続くステップＳ５５６では、第２コア１２のログであって、２０１≦Ｐ＜２０２を満たすＰ、すなわちアドレスが「２０１」であるログが、ログ順序テーブル８４において処理対象ログの上に挿入される。続くステップＳ５５６Ａでは、Ｐｎの値、すなわち２０２がＰｒに代入されてステップＳ５５７に進む。
【０１０６】
図１５（ｂ）は、１回目にステップＳ５５７に到達した状態におけるログ順序テーブル８４を示す。ステップＳ５５７では、未処理のログが存在することから肯定判定されてステップＳ５５８に進み、バッファアドレスが１０３のログが処理対象ログに選択され、ステップＳ５５４に戻る。
【０１０７】
（動作例  ２ループ目の処理）
ステップＳ５５４では、処理対象ログのポインタ値である「２０２」と、記録していたポインタ値Ｐｒの値である「２０２」とが異なるか否かが判断され、両者は同一なので否定判断されてステップＳ５５７に進む。ステップＳ５５７では、未処理のログが存在することから肯定判定されてステップＳ５５８に進み、バッファアドレスが１０４のログが処理対象ログに選択され、ステップＳ５５４に戻る。
（動作例  ３ループ目の処理）
【０１０８】
ステップＳ５５４では、処理対象ログのポインタ値である「２０５」と、記録していたポインタ値Ｐｒの値である「２０２」とが異なるか否かが判断され、両者は異なるので肯定判断されてステップＳ５５５に進む。ステップＳ５５５では、処理対象ログのポインタ値である「２０５」がＰｎとして記録される。続くステップＳ５５６では、第２コア１２のログであって、２０２≦Ｐ＜２０５を満たすＰ、すなわちアドレスが「２０２」、「２０３」、「２０４」であるログが、ログ順序テーブル８４において処理対象ログの上に挿入される。続くステップＳ５５６Ａでは、Ｐｎの値、すなわち２０５がＰｒに代入されてステップＳ５５７に進む。
【０１０９】
図１５（ｃ）は、３回目にステップＳ５５７に到達した状態におけるログ順序テーブル８４を示す。ステップＳ５５７では、未処理のログが存在しないのでステップＳ５５９に進む。ステップＳ５５９では、未挿入の第２コア１２のログが存在しないことからログ順序テーブル８４を変更せず、図１５のフローチャートを終了する。解析端末８のＣＰＵ８１は、図１４に示すフローチャートの処理が完了すると、作成したログ順序テーブル８４から他コアログバッファポインタの列を削除してメモリ８２に記憶する。
【０１１０】
図１６、および１７は、第２の実施の形態におけるログ順序テーブル８４、および統合ログ８６を示す図である。第１の実施の形態では順序２と３のイベントの前後が不明確であったが、本実施の形態では明確化されている。ＣＰＵ８１はさらに、第１の実施の形態と同様にログ順序テーブル８４に基づき統合ログ８６を作成する。
【０１１１】
上述した第２の実施の形態によれば、次の作用効果が得られる。
（１）ＥＣＵ１Ａが備える複数のコアの少なくとも１つ、すなわち第２コア１２は、次にログを記録する記憶部のアドレスが他のコア、すなわち第１コア１１から参照が可能である。他のコア、すなわち第１コア１１は、イベントが発生すると当該イベントに関する情報に参照したアドレスを関連付けて記憶部、すなわちメモリ３０に格納する。そのため、処理負荷の高い排他処理を行うことなく、他のコアで発生したイベントとの発生順序を示す情報を記録できる。
【０１１２】
（２）ＥＣＵ１Ａは第１コア１１および第２コア１２を備え、第１コア１１は、イベントが発生すると当該イベントに関する情報とともに参照したアドレスを記憶部３０に格納する。第２コア１２は、イベントが発生すると当該イベントに関する情報を記憶部３０に格納する。すなわち、第２コア１２は第１コア１１のアドレスをメモリ３０に格納しない。そのため、他のコアで発生したイベントとの発生順序を示す最低限の情報を記録することができる。換言すると、コアを２つしか備えないＥＣＵ１Ａでは、第２コア１２はアドレスを記録しないことにより情報の冗長性を排除し、余分な処理を排除している。
【０１１３】
（３）解析端末の演算部、すなわち解析端末８ＡのＣＰＵ８１は、イベントに関する情報が格納されたアドレス、およびイベントに関する情報に関連付けて格納される参照したアドレスに基づきイベントの発生順序を判別する。
【０１１４】
上述した第２の実施の形態を以下のように変形してもよい。
（１）ＥＣＵ１Ａは、３以上のコアを備えてもよい。ＥＣＵ１Ａが３つのコア、すなわち第１コア、第２コア、および第３コアを備える場合は、各コアは以下の情報をメモリ３０に記録する。第１コアは、イベントが発生すると当該イベントに関する情報とともに第２コアが次にログを記録するアドレスを記憶部に格納する。第２コアは、イベントが発生すると当該イベントに関する情報とともに第３コアが次にログを記録するアドレスを記憶部に格納する。第３コアは、イベントが発生すると当該イベントに関する情報とともに第１コアが次にログを記録するアドレスを記憶部に格納する。
【０１１５】
（２）第１コア１１が次にログを記録するアドレスは、第２コア１２から参照できなくてもよい。他コアのポインタを記録する第１コア１１が、第２コア１２が次にログを記録するアドレスを参照できればよい。
【０１１６】
（３）第１コア１１は、次にログを記録するメモリ３０のアドレスに代えて、直前にログを記録したメモリ３０のアドレスを記録してもよい。この場合は、直前にログを記録したメモリ３０のアドレスを各コアが相互に参照可能に構成する。
【０１１７】
（第３の実施の形態）
図１８〜図２３を参照して、情報処理装置であるＥＣＵの第３の実施の形態を説明する。以下の説明では、第２の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第２の実施の形態と同じである。本実施の形態では、ＣＰＵがコアを４つ備える点、および各コアがタイムスタンプも記録する点で、第２の実施の形態と異なる。すなわち、各コアがイベントを記録する際に他のコアのポインタと、当該コアのタイムスタンプを記録する。
【０１１８】
（構成）
図１８は、第３の実施の形態における情報処理システム１００Ｂ、すなわちＥＣＵ１Ｂおよび解析端末８Ｂの構成を示すブロック図である。
【０１１９】
ＥＣＵ１ＢのＣＰＵ１０は、第２の実施の形態の構成に加えて、第３コア１３、および第４コア１４をさらに備える。ＣＰＵ１０のいずれのコアも動作クロックは等しい。
【０１２０】
タイマデバイス２０は、第２の実施の形態の構成に加えて、第３タイマ２３、および第４タイマ２４をさらに備える。第３タイマ２３は第３コア１３からのみ参照され、第４タイマ２４は第４コア１４からのみ参照される。ＣＰＵ１０のいずれのコアも動作クロックが等しく、タイマデバイス２０の各タイマは対応するコアの動作クロックに基づき動作するので、各タイマの進行は同一である。ただし、同期は取られていないので各タイマのカウント値は必ずしも等しくない。すなわち、各タイマ間のカウントの差分は一定であるが、その差分は明らかでない。
【０１２１】
メモリ３０は、第２の実施の形態の構成に加えて、第３ログバッファ３３、および第４ログバッファ３４をさらに備える。第３コア１３は第３ログバッファ３３に動作ログを記録する。第４コア１４は第４ログバッファ３４に動作ログを記録する。また、ＲＯＭ６０に格納されるプログラムの動作が第２の実施の形態と異なる。
【０１２２】
ＣＰＵ１０の各コアは、イベントが発生するとイベントの内容、タイマデバイス２０が発行するタイムスタンプ、特定の他のコアが次にログを記録するアドレス、の３つを記録する。各コアが記録する特定の他のコアとは、第１コア１１は第２コア１２を、第２コア１２は第３コア１３を、第３コア１３は第４コア１４を、第４コア１４は第１コア１１である。たとえば、第１コア１１がイベントを検出すると、そのイベントの内容、第１タイマ２１のタイムスタンプ、および第２コアが次にログを記録する第２ログバッファ３２のアドレスを記録する。
【０１２３】
解析端末８Ｂは、第１の実施の形態における構成に加えて、メモリ８２にタイムスタンプ制約テーブル８５が記録される。タイムスタンプ制約テーブル８５は、第１タイマ２１〜第４タイマ２４の相関を示すテーブルである。詳しくは後述する。解析端末８Ｂは、デバッグインタフェース５０を経由して、メモリ３０に記録された全てのコアのログを取得できる。また、ＲＯＭ８７に格納されるプログラムの動作が第１の実施の形態と異なる。
【０１２４】
（ＥＣＵ１Ｂの動作概要）
ＥＣＵ１Ｂの各ＣＰＵコアは、ＲＯＭ６０に格納されたプログラムを実行することにより以下の動作を行う。
【０１２５】
第１コア１１は、イベントが発生すると、メモリ３０を参照して第１コア１１が次にログを記録する第１ログバッファ３１のアドレスを確認し、そのアドレスにイベントの内容を記録する。また、第１コア１１は第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを参照し、そのアドレスを、上記でイベントの内容を記録したのと同じアドレスに他コアログバッファポインタとして記録する。また、第１タイマ２１を参照し、第１タイマ２１の時刻情報であるタイムスタンプを取得する。さらに、メモリ３０に記録されている情報である、次に第１コア１１がログを記録する第１ログバッファ３１のアドレスをインクリメントする。すなわち、第２の実施の形態における動作に加えて、タイムスタンプも第１ログバッファ３１に記録する。
【０１２６】
第２コア１２は、イベントが発生すると、メモリ３０を参照して第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを確認し、そのアドレスにイベントの内容を記録する。また、第２コア１２は第３コア１３が次にログを記録する第３ログバッファ３３のアドレスを参照し、そのアドレスを、上記でイベントの内容を記録したのと同じアドレスに他コアログバッファポインタとして記録する。また、第２タイマ２２を参照し、第２タイマ２２の時刻情報であるタイムスタンプを取得する。さらに、メモリ３０に記録されている情報である、次に第２コア１２がログを記録する第２ログバッファ３２のアドレスをインクリメントする。
【０１２７】
第３コア１３、および第４コア１４の動作も上記と同様であり、ログを記録するメモリ３０上のアドレス、参照するタイマデバイス２０、および他コアログバッファポインタとして記録するコアが異なる。
【０１２８】
（イベントの発生例）
図１９は、第４の実施の形態においてＣＰＵ１０の各コアで発生するイベントの例を示すタイムラインである。図１９の上から下に向かって時間が経過している。図１９の左から順に、第１コア１１、第２コア１２、第３コア１３、第４コア１４において発生したイベントを示している。たとえば第１コア１１では、最初にイベント「ＡＡ」、次にイベント「ＡＢ」、次にイベント「ＡＣ」、最後にイベント「ＡＤ」が発生した。なお、イベント名が２重丸で囲まれているものは、後の説明に使用するために他と表現を分けている。
【０１２９】
図１９においてイベントの左上に記した「ｔ＝ｘ」は、各コアが参照したタイマデバイス２０のタイムスタンプがｘであることを示している。前述のとおり各コアは別々のタイマデバイス２０を参照しており、このタイムスタンプだけで異なるコア間のイベントの前後を判断することはできない。イベントの左下に示す数字は、そのイベントが記録されたログバッファのアドレスを示している。図１９における右向きの矢印は、他コアが次にログを記録するアドレスを参照したことを示している。このようにイベントが発生した際のログを図２０に示す。
【０１３０】
（動作ログの例）
図２０（ａ）〜（ｄ）のそれぞれは、図１９に示すイベントが発生した場合における、第１ログバッファ３１〜第４ログバッファ３４のそれぞれに記録されるログを示す図である。それぞれのログには、バッファアドレス、イベント名、タイムスタンプ、他コアログバッファポインタ、の４つがたとえば図２０に示すように表として記録される。
【０１３１】
図１９と図２０を参照して記録されるログを説明する。第１コアで発生するイベントＡＡは、第１ログバッファ３１のバッファアドレス１０１に記録され、第１タイマ２１のタイムスタンプである「１５」と、その時刻における第２コア１２が次にログを書き込むアドレスである２０２が記録される。
【０１３２】
（解析端末８Ｂの動作概要と動作例）
解析端末８Ｂは、ＲＯＭ８７に格納されたプログラムをＣＰＵ８１が実行することにより以下の動作を行う。解析端末８は、ＥＣＵ接続部８８を経由してＥＣＵ１の第１ログバッファ３１〜第４ログバッファ３４に保存されたログを取得し、メモリ８２に収集ログ８３として保存する。そして、収集ログ８３に格納された複数のコアのログに基づきタイムスタンプ制約テーブル８５を作成する。さらに、タイムスタンプ制約テーブル８５からタイマ間のカウントの差を不等式として抽出し、これを解いてタイマ間のカウントの差を明らかにし、統合ログ８６を作成する。
【０１３３】
図１９の例を用いて、タイムスタンプ制約テーブル８５の作成概要を説明する。第１コア１１のタイムスタンプＴ１を基準とし、第１コアと第Ｎコアの時刻差をＤＮとすると、タイムスタンプＴ１と同時刻に得られるコアＮのタイムスタンプＴＮは、式１の関係を有する。
【０１３４】
ＴＮ＝Ｔ１＋ＤＮ・・・式１
たとえば、Ｄ２＝１０であれば、第２コア１２のタイムスタンプが３０の時に第１コア１１のタイムスタンプは１０である。式１を本実施の形態に即して具体的に記述すると、以下の式２〜４のとおりである。
【０１３５】
Ｔ２＝Ｔ１＋Ｄ２・・・式２
Ｔ３＝Ｔ１＋Ｄ３・・・式３
Ｔ４＝Ｔ１＋Ｄ４・・・式４
【０１３６】
ここで図１９に示したイベントＡＡとイベントＢＢの関係に着目すると、イベントＡＡが発生した後にイベントＢＢが発生している。これらのタイムスタンプは１５と１１０である。したがって、式２に示す関係を用いると、次の式５の不等式が得られる。
【０１３７】
１１０−Ｄ２＞１５・・・式５
また、イベントＢＢが発生した後にイベントＡＢが発生したので、次の式６の不等式が得られる。
【０１３８】
１１０−Ｄ２＜２０・・・式６
このような不等式を第１コア１１の全てのログについて作成する。同様に第４コア１４のログについても不等式を作成する。第２コア１２、および第３コア１３のログは、第１コア１１との直接の前後関係は不明ではあるが、同様に不等式を作成する。全てのログについて不等式を立てることにより、タイムスタンプ制約テーブル８５が作成される。
【０１３９】
図２１は、作成されたタイムスタンプ制約テーブル８５の一例を示す図である。図２１に示す例では不等式を導出するために用いたログを取得したコアごとに、得られた不等式を分類しているが、タイムスタンプ制約テーブル８５に格納する形式はこれに限定されない。
【０１４０】
解析端末８Ｂは、タイムスタンプ制約テーブル８５に格納された不等式を解き、各タイマの時刻差を算出する。図２１に示す例では、第１コア１１が取得したログによる不等式からＤ２の範囲を、９０＜Ｄ２＜９２と求めることができる。同様に、第４コア１４が取得したログによる不等式からＤ４の範囲を、−５＜Ｄ４＜−１と求めることができる。これらの情報を用いて、第２コア１２、および第３コア１３が取得したログによる不等式からＤ３の範囲を、８１＜Ｄ３＜８２と求めることができる。
【０１４１】
（ＥＣＵ１Ｂの各コアの動作を表すフローチャート）
図２２は、各コアがログを記録する動作を表すフローチャートである。図１２に示した第２の実施の形態における第１コア１１の動作との差異点を説明する。
【０１４２】
各コアは、イベントが発生したと判断すると（ステップＳ４５１：ＹＥＳ）、共有メモリから前述の特定の他のコアの記録アドレス、たとえば第１コア１１であれば第２コア１２が次にログを記録する第２ログバッファ３２のアドレスを読み取る（ステップＳ４５２）。そして、同じく共有メモリから自コアの記録アドレスを読み取る（ステップＳ４５３）。続くステップＳ４５３Ａにおいて、タイマデバイス２０からタイムスタンプを取得する。たとえば第１コア１１であれば第１タイマ２１からタイムスタンプを取得する。続くステップＳ４５４Ｂでは、ステップＳ４５３において読み取った自コアの記録アドレスに、発生したイベントの内容、ステップＳ２５２において読み取ったアドレス、およびステップＳ４５３Ａにおいて取得したタイムスタンプを書き込む。続くステップＳ４５５では、ステップＳ４５３において読み取った自コアの記録アドレスをインクリメントし、共有メモリに次に自コアがログを記録するアドレスとして記録する。以上で図２２に示すフローチャートを終了し、再び当該フローチャートの先頭に戻る。
【０１４３】
（解析端末８の動作を表すフローチャート）
図２３は、解析端末８がタイムスタンプ制約テーブル８５、および統合ログ８６を作成する動作を表すフローチャートである。以下に説明する各ステップの動作主体はＣＰＵ８１である。
【０１４４】
ステップＳ５７１では、収集ログ８３に保存された第１コア１１を処理対象コアに選択し、第１ログバッファ３１に格納されていた第１コア１１のログの先頭行を処理対象ログに選択し、ステップＳ５７２に進む。
【０１４５】
ステップＳ５７２では、処理対象ログにおけるポインタ値、すなわち他コアログバッファポインタに記録されているイベントのタイムスタンプを取得する。たとえば、先頭のログであるイベント内容が「ＡＡ」であるログはポインタ値「２０２」なので、バッファアドレスが２０２であるログのタイムスタンプである「１１０」を取得する。次にステップＳ５７３に進む。
【０１４６】
ステップＳ５７３では、ステップＳ５７２において取得した他コアのタイムスタンプ、および処理対象ログのタイムスタンプを用いて不等式を導出する。この不等式の導出は、前述したように処理対象ログよりも取得した他コアのタイムスタンプが付されたイベントが後に発生していることに着目している。続くステップＳ５７４では、ステップＳ５７３において導出した不等式をタイムスタンプ制約テーブル８５に書き込み、ステップＳ５７５に進む。
【０１４７】
ステップＳ５７５では、処理対象のコアのログがまだあると判断する場合はステップＳ５７６に進み、次のログを処理対象に設定しステップＳ５７２に戻る。一方、現在処理対象としているログが当該コアの最後のログであると判断する場合はステップＳ５７７に進む。
【０１４８】
ステップＳ５７７では、ログが未処理のコアがまだあるか否かを判断する。ログが未処理のコアが他にもあると判断する場合はステップＳ５７２に戻り、他にはないと判断する場合はステップＳ５７８に進む。
【０１４９】
ステップＳ５７８では、タイムスタンプ制約テーブル８５に記録した不等式を解き、タイマ間の時刻のずれ量、たとえば前述のＤ２〜Ｄ４を算出する。続くステップＳ５７９では、ステップＳ５７８の算出結果に基づき、収集ログ８３に保存された各コアのログのタイムスタンプをいずれかのタイマのタイムスタンプに統一する。たとえば、第１タイマ２１のカウント値に統一する。最後にステップＳ５８０において、全てのログタイムスタンプの値に基づきソートし、統合ログ８６を作成する。
【０１５０】
上述した第３の実施の形態によれば、次の作用効果が得られる。
（１）ＥＣＵ１Ｂは、複数のコアの各々に対応し、対応するコアから参照可能であり時刻に関する情報、すなわちタイムスタンプを出力する複数のタイマ、すなわち第１タイマ２１〜第４タイマ２４を備える。複数のコアの各々は、次にログを記録する記憶部のアドレス、または直前にログを記録した記憶部のアドレスが他のコアから参照が可能である。複数のコアの各々は、イベントが発生すると当該イベントに関する情報、参照したアドレス、およびタイマが出力するタイムスタンプを関連付けて記憶部、すなわちメモリ３０に格納する。
【０１５１】
そのためＥＣＵ１Ｂは、コアが４以上であっても各コアで発生したイベントの発生順序が推定しやすいログを記録することができる。コアが４以上の場合にはタイムスタンプを記録しない場合は、イベントの発生状況によっては異なるコア間のイベントの発生順序を推定することが困難である。しかし、タイムスタンプも記録することにより異なるコア間のイベントの発生順序の推定が可能な場合を増やすことができる。たとえば、図１９において第１コア１１で発生したイベント「ＡＡ」と、第３コア１３で発生したイベント「ＣＡ」は、第１コア１１〜第３コア１３の間でイベント発生の前後関係を記録していないので、第２の実施の形態のようにタイムスタンプを記録していない場合は、発生の前後を判断することができない。しかし、本実施の形態ではタイムスタンプを記録しているので、解析端末８Ｂにおける演算により発生の前後を判断することができる。
【０１５２】
（２）解析端末８Ｂの演算部、すなわちＣＰＵ８１は、イベントに関する情報が格納されたアドレス、イベントに関する情報に関連付けて格納される参照したアドレス、およびイベントに関する情報に関連付けて格納される時刻に関する情報に基づき複数のタイマの時刻差を推定し、推定したタイマの時刻差およびイベントに関する情報に関連付けて格納される時刻に関する情報に基づきイベントの発生順序を判別する、
【０１５３】
（３）解析端末８Ｂの演算部、すなわちＣＰＵ８１は、イベントに関する情報が格納されたアドレス、イベントに関する情報に関連付けて格納される参照したアドレス、およびイベントに関する情報に関連付けて格納される時刻に関する情報に基づき、複数のタイマの時刻差を表す複数の不等式を作成し、複数の不等式を解くことにより複数のタイマの時刻差を推定する。
【０１５４】
（第３の実施の形態の変形例１）
ＥＣＵ１Ｂの各コアの動作周波数は異なっていてもよい。この場合は、前述の式２〜式４が以下の式７〜式９のように置きかえられる。ただし、Ｆ２は第１コア１１と第２コア１２の周波数比、Ｆ３は第１コア１１と第３コア１３の周波数比、Ｆ４は第１コア１１と第４コア１４の周波数比である。
Ｔ２＝Ｆ２Ｔ１＋Ｄ２・・・式７
Ｔ３＝Ｆ３Ｔ１＋Ｄ３・・・式８
Ｔ４＝Ｆ４Ｔ１＋Ｄ４・・・式９
上記の式７〜式９以外は第３の実施の形態と同様の手順を用いることができる。
【０１５５】
（第３の実施の形態の変形例２）
ＥＣＵ１Ｂは５コア以上を備えてもよい。
【０１５６】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。
上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【０１５７】
１、１Ａ、１Ｂ  …  ＥＣＵ
８、８Ａ、８Ｂ  …  解析端末
１０  …  ＣＰＵ
１１  …  第１コア
１２  …  第２コア
１３  …  第３コア
１４  …  第４コア
２０  …  タイマデバイス
２１  …  第１タイマ
２２  …  第２タイマ
２３  …  第３タイマ
２４  …  第４タイマ
３０  …  メモリ
３１  …  第１ログバッファ
３２  …  第２ログバッファ
３３  …  第３ログバッファ
３４  …  第４ログバッファ
４０  …  カウンタ
４２  …  カウンタ記録リスト
８２  …  メモリ
８３  …  収集ログ
８４、８４Ａ  …  ログ順序テーブル
８５  …  タイムスタンプ制約テーブル
８６  …  統合ログ
１００、１００Ａ、１００Ｂ  …  情報処理システム
【図１】
0006666195.tif 000002
【図２】
0006666195.tif 000003
【図３】
0006666195.tif 000004
【図４】
0006666195.tif 000005
【図５】
0006666195.tif 000006
【図６】
0006666195.tif 000007
【図７】
0006666195.tif 000008
【図８】
0006666195.tif 000009
【図９】
0006666195.tif 000010
【図１０】
0006666195.tif 000011
【図１１】
0006666195.tif 000012
【図１２】
0006666195.tif 000013
【図１３】
0006666195.tif 000014
【図１４】
0006666195.tif 000015
【図１５】
0006666195.tif 000016
【図１６】
0006666195.tif 000017
【図１７】
0006666195.tif 000018
【図１８】
0006666195.tif 000019
【図１９】
0006666195.tif 000020
【図２０】
0006666195.tif 000021
【図２１】
0006666195.tif 000022
【図２２】
0006666195.tif 000023
【図２３】
0006666195.tif 000024