Some content of this application is unavailable at the moment.
If this situation persist, please contact us atFeedback&Contact
1. (WO2018042935) ELECTRONIC CONTROL DEVICE AND ANALYSIS SYSTEM
Document

明 細 書

発明の名称 電子制御装置、解析システム

技術分野

0001  

背景技術

0002  

先行技術文献

特許文献

0003  

発明の概要

発明が解決しようとする課題

0004  

課題を解決するための手段

0005  

発明の効果

0006  

図面の簡単な説明

0007  

発明を実施するための形態

0008   0009   0010   0011   0012   0013   0014   0015   0016   0017   0018   0019   0020   0021   0022   0023   0024   0025   0026   0027   0028   0029   0030   0031   0032   0033   0034   0035   0036   0037   0038   0039   0040   0041   0042   0043   0044   0045   0046   0047   0048   0049   0050   0051   0052   0053   0054   0055   0056   0057   0058   0059   0060   0061   0062   0063   0064   0065   0066   0067   0068   0069   0070   0071   0072   0073   0074   0075   0076   0077   0078   0079   0080   0081   0082   0083   0084   0085   0086  

符号の説明

0087  

請求の範囲

1   2   3   4   5   6   7   8  

図面

1   2   3   4   5   6   7   8   9   10   11   12   13  

明 細 書

発明の名称 : 電子制御装置、解析システム

技術分野

[0001]
 本発明は、電子制御装置、および解析システムに関する。

背景技術

[0002]
 複数のCPUが協調して動作する電子制御装置においては、複数のCPUが共有する資源へのアクセスの排他制御が必要になる。あるCPUが共有資源を使用している場合は、他のCPUは先のCPUの使用が完了するまでは共有資源を使用できず、待ち時間が生じる。この待ち時間の発生は、電子制御装置の処理能力を低下させるため、待ち時間を生じさせないことが望ましい。そのためには待ち時間の原因の解析が必要であり、解析のために待ち時間をログとして記録することが求められる。
 特許文献1には、時刻レジスタにアクセスし、現在時刻と取得した時刻との差分として待ち時間を算出する手法が開示されている。

先行技術文献

特許文献

[0003]
特許文献1 : 国際公開第2012/132017号

発明の概要

発明が解決しようとする課題

[0004]
 特許文献1に記載されている発明では、待ち時間の記録のためのオーバーヘッドが大きい。

課題を解決するための手段

[0005]
 本発明の第1の態様による電子制御装置は、複数のCPUコアと、共有資源とを備える電子制御装置であって、前記CPUコアのそれぞれは排他制御により前記共有資源を独占して使用可能であり、カウンタ値が格納される更新カウンタ格納部と、前記CPUコアが実行したプログラムのログが格納されるログ格納部と、前記CPUコアが前記共有資源にアクセスしたときに、前記カウンタ値を変化させるカウンタ更新部と、前記CPUコアが前記共有資源にアクセスしたときに、前記共有資源が他のCPUコアにより排他制御されていない場合には、前記カウンタ値を含む前記ログを前記ログ格納部に記録するカウンタ記録部とをさらに備える。
 本発明の第2の態様による解析システムは、第1の態様の電子制御装置と、解析装置と、を備え、前記解析装置は、前記電子制御装置の前記ログ格納部に格納された前記ログが入力されるログ収集部と、前記カウント値を実時間に換算するための換算情報を格納する記憶部と、前記換算情報を用いて、前記ログ収集部に入力された前記カウンタ値を実時間に換算する解析部と、を備える。

発明の効果

[0006]
 本発明によれば、待ち時間の記録のためのオーバーヘッドを減らすことができる。

図面の簡単な説明

[0007]
[図1] 解析システムの構成を示す図
[図2] 電子制御装置の動作例を示す図
[図3] 第1バッファの一例を示す図
[図4] 第2バッファの一例を示す図
[図5] 時間変換テーブルの一例を示す図
[図6] 解析結果の一例を示す図
[図7] 電子制御装置の動作を表すフローチャート
[図8] ログ解析の動作を表すフローチャート
[図9] 第2の実施の形態における電子制御装置の構成を示す図
[図10] 第2の実施の形態における電子制御装置の動作を表すフローチャート
[図11] 第3の実施の形態における第1バッファの一例を示す図
[図12] 第3の実施の形態における時間変換テーブルの一例を示す図
[図13] 第3の実施の形態における電子制御装置の動作を表すフローチャート

発明を実施するための形態

[0008]
(第1の実施の形態)
 以下、図1~図8を参照して、電子制御装置の第1の実施の形態を説明する。
 図1は、本発明に係る電子制御装置100、および解析システム1の構成を示す図である。解析システム1は、電子制御装置100と、解析装置200とから構成される。
[0009]
 電子制御装置100は、たとえばECU(ElectronicControl Unit)である。電子制御装置100は、第1CPU160と、第2CPU170と、これら2つのCPUが使用可能な共有資源110と、主記憶装置であるメモリ130と、現在時刻の情報を有するタイマ120と、ログ出力部180とを備える。以下では、第1CPU160と第2CPU170とをまとめて、「CPU」とも呼ぶ。
[0010]
 共有資源110は、メモリ130の一部の領域、メモリ130とは独立した物理メモリ、またはいずれかのCPUのハードウエアレジスタである。共有資源110は、第1CPU160および第2CPU170からアクセスが可能であり、後述する排他制御によりいずれかのCPUにより共有資源110が専有される。共有資源110は、ロック変数111、およびタスク情報112が格納される記憶部を備える。
[0011]
 ロック変数111は、排他制御の状態を示す変数であり、たとえば「ゼロ」と「1」の値をとる本実施の形態では、ロック変数111が「0」の状態とは、共有資源110がいずれのCPUによっても排他制御されていない、すなわち専有されていない状態である。また、ロック変数111が「1」の状態とは、共有資源110がいずれかのCPUによって排他制御されている、すなわち専有されている状態である。
[0012]
 タスク情報112は、共有資源110を専有した最新のタスクの識別子を示す変数である。換言すると、ロック変数111が最後に「1」に設定された際に、共有資源110を占有したCPUにおいて実行されていたタスクの識別子がタスク情報112として保存される。なお、タスクの識別子だけではそのタスクを実行したCPUを特定できない場合は、そのタスクを実行したCPUを特定する情報も識別情報としてタスク情報112に含まれる。なお上述したタスクとは、CPUが実行する処理を意味しており、処理系によってジョブ、プロセス、スレッドなどと呼ばれる。
[0013]
 第1CPU160および第2CPU170のそれぞれは、個別のCPUであり、それぞれがCPUコアを有する。すなわち電子制御装置100は、複数の物理CPUを備えるいわゆるマルチプロセッサ構成を有する装置である。第1CPU160は、不図示のプログラムをメモリ130に展開して実行することにより、第1ロック取得部161および第1カウンタ記録部162として動作する。第2CPU170は、不図示のプログラムをメモリ130に展開して実行することにより、第2ロック取得部171および第2カウンタ記録部172として動作する。第1CPU160および第2CPU170は、以下のように共有資源110を一時的に専有して使用する。
[0014]
 CPU,すなわち第1CPU160および第2CPU170は、共有資源110を使用する必要が生じると、まずロック変数111の値を確認する。CPUが確認した際にロック変数111が「ゼロ」であれば、CPUはロック変数111を「1」に書き換えて共有資源110を専有して使用し、使用が終了するとロック変数111を「1」から「ゼロ」に書き換える。CPUが確認した際にロック変数111が「1」であった場合は、そのCPUは所定時間ごとにロック変数111にアクセスし、ロック変数111が「ゼロ」に変更されるまでアクセスを続ける。なお、CPUがロック変数111にアクセスする時間間隔は既知であり、この時間間隔に基づき後述する時間変換テーブル212があらかじめ作成されている。
[0015]
 このように、共有資源110の専有に成功するまで、上記の例ではロック変数111が「ゼロ」になるまで、アクセスを繰り返す排他制御方式は「スピンロック」と呼ばれる。本実施の形態では、スピンロックにおける共有資源110の専有を試みた回数、すなわちロック変数111の値を確認した2回目以降の回数を「スピン回数」と呼ぶ。たとえば、ロック変数111を確認した初回で「ゼロ」であった場合はスピン回数はゼロであり、ロック変数111を確認した3回目で初めて「ゼロ」であった場合はスピン回数は2である。また、共有資源110を使用するために、初回にロック変数111の値を確認してからロック変数111に「1」を代入できるまでの時間を「ロック待ち時間」と呼ぶ。さらに、ロック変数111を「ゼロ」から「1」に書き換えて共有資源110を排他制御することを「ロック取得」とも呼ぶ。
[0016]
 このロック取得を行うのが、第1ロック取得部161および第2ロック取得部171である。第1ロック取得部161は第1CPU160が共有資源110を使用する場合に動作し、第2ロック取得部171は第2CPU170が共有資源110を使用する場合に動作する。第1ロック取得部161および第2ロック取得部171による、ロック変数111の確認、およびロック変数111が「ゼロ」であった場合の「1」の代入は、TEST-and-SET命令としてアトミックに実行される。すなわち、変数の確認と変数への代入は他のCPUからは一連の動作として割り込まれることなく実行される。
[0017]
 第1カウンタ記録部162、および第2カウンタ記録部172は、第1ロック取得部161および第2ロック取得部171によるロック取得後に、ロック変数111の値などを第1バッファ151および第2バッファ152に格納する。第1カウンタ記録部162、および第2カウンタ記録部172の動作は後に詳述する。
 タイマ120は、時刻を管理するハードウェアである。タイマ120は、時刻情報を示す時刻レジスタ121を備える。時刻情報は、絶対時刻であってもよいし、電子制御装置100の電源がオンにされた時点など所定の時刻を基準、たとえばゼロとする相対時刻であってもよい。
[0018]
 メモリ130は、記憶装置であり、CPUによって実行されるプログラム及びデータが保持される。メモリ130は、その機能として更新カウンタ格納部140と、ログ格納部150とを備える。なお、共有資源110、メモリ130、およびタイマ120は、それぞれ電子制御装置100上のCPUと独立したハードウェアであってもよいし、SoC(System-on-Chip)のように一つの半導体チップ上に統合されていてもよい。
[0019]
 更新カウンタ格納部140には、第1カウンタ141、および第2カウンタ142が格納される。第1カウンタ141は、第1CPU160により更新されるカウンタ値であり、第1CPU160のスピン回数を示す。第2カウンタ142は、第2CPU170により更新されるカウンタ値であり、第2CPU170のスピン回数を示す。第1カウンタ141、および第2カウンタ142の初期値はゼロであり、更新によりそれぞれ1ずつ増加される。
[0020]
 ログ格納部150は、第1バッファ151、および第2バッファ152を備える。第1バッファ151には第1CPU160が実行したプログラムのログが格納される。第2バッファ152には第2CPU170が実行したプログラムのログが格納される。ログ格納部150に格納されたログは、後述するログ出力部180を経由して解析装置200に出力される。
 ログ出力部180は、解析装置200のログ収集部270と通信を行うインタフェースである。ログ出力部180はたとえば、JTAGなどのデバッグ用インタフェース、またはCAN(CarAreaNetwork)やIEEE802.3に対応する通信インタフェースである。ログ出力部180は、解析装置200からの要求に応じて、または一定時間ごとに解析装置200にログを出力する。
[0021]
(解析装置の構成)
 解析装置200は、メモリ210と、ログ解析部220と、表示部230と、CPU260と、ログ収集部270とを備える、たとえばコンピュータである。メモリ210には、電子制御装置100の各CPUのログが集約される収集バッファ211、スピン回数と時間の関係を示す時間変換テーブル212、およびログ解析部220により出力される解析結果213が格納される。
 ログ解析部220は、収集バッファ211に格納されるログを時間変換テーブル212を用いて解析する。換言するとログ解析部220は、スピン回数として記録されているロック待ち時間を実時間に変換する。ログ解析部220が解析した結果は、解析結果213としてメモリ210に格納されるとともに表示部230に表示される。
[0022]
 表示部230は、収集バッファ211に格納されるログ、およびログ解析部220により出力された解析結果213を表示する。ただし表示部230は、解析装置200に接続された表示装置に表示すべき情報を出力する装置であってもよい。CPU260は、解析装置200を動作させる演算装置である。CPU260のアーキテクチャ、コア数、ソケット数、動作速度等は特に限定されない。
 ログ収集部270は、電子制御装置100のログ出力部180と通信を行うインタフェースである。ログ収集部270はたとえば、JTAGなどのデバッグ用インタフェース、またはCANやIEEE802.3に対応する通信インタフェースである。ログ収集部270は、電子制御装置100から受信するログを収集バッファ211に格納する。
[0023]
(動作例)
 図2を用いて第1CPU160および第2CPU170の動作例を説明する。図2に示すタイムチャートは、第1CPU160および第2CPU170が実行するタスク、およびロック取得を示している。図示左から右に向かって時間が経過している。図2の上部に示す数字は時刻レジスタ121から得られる時刻を示している。後に図3、図4を用いて説明する、第1バッファ151、および第2バッファ152に格納されるログは図2に示す動作により得られたログである。なお以下では、複数回実行される共有資源110の排他制御、すなわちロック取得のそれぞれを便宜的に区別するために、実行される順番に、ロックL,ロックM,ロックN、・・・と呼ぶ。
[0024]
 第1CPU160は、時刻850から時刻910までの間タスクAを実行しており、時刻880に割り込みRが発生し、時刻900まで割り込みRが継続する。第1CPU160は、時刻860にロックLの取得を開始し、時刻885にロックNの取得を開始し、時刻900の少し前にロックOの取得を開始している。第2CPU170は、時刻840から時刻920までの間タスクBを実行しており、時刻870に割り込みQが発生し、時刻890まで割り込みQが継続する。第2CPU170は、時刻880にロックMの取得を開始し、ロックMの取得後は共有資源110を使用して時刻885を経過した後に共有資源110の使用を終了した。また、第1CPU160のロックNの取得に関して、その時のスピン回数は300であり、その前に共有資源110を使用していたタスクは割り込みQである。それ以外のロック取得、すなわちロックL,ロックM,ロックOのスピン回数はゼロである。スピン回数がゼロの場合はロックの取得は即座に行われる。
[0025]
(バッファの構成)
 図3、および図4は、第1バッファ151、および第2バッファ152に格納される情報の一例を示す図である。ここでは、図2に示す動作が行われた際に、第1バッファ151、および第2バッファ152に格納される情報を示している。第1バッファ151、および第2バッファ152の構成は同一なので、代表して第1バッファ151を説明する。第1バッファ151には、1または複数のレコードから構成されるログが格納される。第1バッファ151の各レコードは、イベント種類311、イベント内容312、タイムスタンプ313、待ち時間314、タスク情報315の5つのフィールドを備える。第1バッファ151の各レコードが、第1CPU160において実行されるプログラムの各イベントに対応する。
[0026]
 イベント種類311のフィールドには、発生したイベントの種類、たとえば「タスク開始」、「ロック取得」などが格納される。イベント内容312のフィールドには、発生したイベントの対象、たとえば「タスクA」「割り込みR」などが格納される。たとえばイベント種類が「タスク開始」、イベント内容312が「タスクA」であれば、そのログは、そのCPUにおいてタスクAの実行が開始された、というイベントを表している。
[0027]
 タイムスタンプ313のフィールドには、イベントが発生した時刻の情報が格納される。時刻情報は、タイマ120の時刻レジスタ121から得られる。待ち時間314のフィールドには、第1カウンタ141から得られるロック待ち時間を示す情報、すなわちスピン回数が格納される。タスク情報315のフィールドには、スピン回数が1以上であるときにロック取得に成功した際のタスク情報112の値が格納される。以下では、あるフィールドに格納された値をフィールドの名称で呼ぶことがある。たとえば「イベント種類311のフィールドに格納された値がxx」であることを、「イベント種類311がxx」と記載することがある。
 各レコードのフィールドには、特定の条件で記録される、または特定の条件で記録されないものがある。
[0028]
 タイムスタンプ313のフィールドには、以下の条件で記録がされない。すなわち、イベント種類311が「ロック取得」であり待ち時間314がゼロ(0)の場合は、タイムスタンプ313のフィールドには値が記録されない。それ以外の場合、すなわち第1CPU160が二回目以降のアクセスでロック取得できた場合に、タイムスタンプ313のフィールドには値が記録される。ロック取得の待ち時間がゼロの場合は時刻を記録する必要性に乏しく、さらに時刻の記録に要するオーバーヘッドが大きいからである。図3、および図4に示す例では、待ち時間314がゼロであるロックL,M,Oのイベントではタイムスタンプ313が記録されていない。
[0029]
 待ち時間314のフィールドには、イベント種類311が「ロック取得」である場合に記録される。すなわち、イベント種類311が「ロック取得」以外の場合は、待ち時間314のフィールドには値が記録されない。前述のとおり、待ち時間314のフィールドにはスピン回数が格納されるので、スピンが発生しえない「ロック取得」以外のイベントでは記録が不可能だからである。図3および図4に示す例では、待ち時間314がゼロではないロックNのイベントのみタスク情報315が記録される。
[0030]
 タスク情報315のフィールドには、イベント種類311が「ロック取得」であり待ち時間314がゼロ以外である場合、すなわち第1CPU160が二回目以降のアクセスでロック取得できた場合に、値が記録される。それ以外の場合はタスク情報315のフィールドには値が記録されない。ロック取得の待ち時間がゼロの場合は、直前に共有資源110を使用していたタスクを特定する必要性が乏しいからである。
 なお、図2と図3においては、第1バッファ151および第2バッファを単純な表として記載しているが、リングバッファのような構造であってもよく、また実際のデータ格納には、可変長のレコードを用いてもよい。
[0031]
(時間変換テーブル)
 図5は、時間変換テーブル212の一例を示す図である。時間変換テーブル212は、第1バッファ151や第2バッファ152における待ち時間のフィールドに格納されたスピン回数と実時間の対応表であり、待ち時間321、実時間322のフィールドを備える。待ち時間321のフィールドには、待ち時間すなわちスピン回数が格納され、実時間322のフィールドには、待ち時間321に格納された待ち時間(スピン回数)の値に対応する実時間の値が格納される。図5には、待ち時間がゼロであれば実時間もゼロであり、待ち時間が「1」であれば実時間は「5マイクロ秒」であり、待ち時間が「1+n」であれば実時間は「5+4*nマイクロ秒」であることが示されている。
[0032]
 たとえば図2および図3に示したロックNについて、時間変換テーブル212を用いることで以下のことがわかる。ロックNは、図3の待ち時間314に格納されている待ち時間の値が300、すなわち1+299であるため、ロックNを取得するのに要した実時間は5+4*299=1201マイクロ秒である。さらに、ロックNの取得を開始したのが時刻885なので、時刻885から1201マイクロ秒経過したときにロックNが取得されたことがわかる。
 なお、時間変換テーブル212に格納される情報は、図5に示したようなテーブル形式以外の情報であってもよい。すなわち、スピン回数と実時間の関係を適切に表す情報であれば、どのような形式の情報を時間変換テーブル212に格納してもよい。
[0033]
(解析結果)
 図6は、解析装置200のログ解析部220が出力する解析結果213の一例を示す図である。解析結果213には、収集バッファ211に格納されたログを解析して得られた情報であって、待ち時間の発生したロック取得イベントの詳細が記される。解析結果213を構成するレコードのそれぞれはロック取得イベントにそれぞれ対応する。解析結果213は、処理CPU331と、発生処理332と、ロック333と、タイムスタンプ334と、実待ち時間335と、原因CPU336と、原因処理337との7つのフィールドから構成される。
[0034]
 処理CPU331のフィールドには、そのロック取得イベントが発生したCPUの識別子、または名称が格納される。発生処理332のフィールドには、そのロック取得イベントを発生させたタスクもしくは割り込み処理の名称が格納される。ロック333のフィールドには、便宜的に設定したロックの名称が格納される。タイムスタンプ334のフィールドには、そのロック取得イベントが発生した時刻の情報が格納される。実待ち時間335のフィールドには、時間変換テーブル212を用いて変換されたロック取得までの待ち時間が格納される。原因CPU336のフィールドには、ロック取得において待ちの原因となったCPUの識別子または名称が格納される。原因処理337のフィールドには、ロック取得において待ちの原因となったタスクの識別子が格納される。待ちの原因となったCPU及びタスクとは、そのイベントにおいてロック取得を試みた際に、そのロックを保持していたCPUとそのCPUが実行していたタスクである。待ちの原因となったCPU及びタスクは、タスク情報112から特定される。
[0035]
 図6の1レコード目を具体的に説明する。このレコードは、図3における4レコード目のログに基づき生成されている。第1CPU160が時刻185にロックNを取得するために、スピン回数300の待ちが発生した。そのため解析結果213では、処理CPU331に「第1CPU」、発生処理332に「割り込みR」、ロック333に「ロックN」、タイムスタンプ334に「185」が格納される。また、300回のスピンは、時間変換テーブル212によると1201マイクロ秒に相当するので、実待ち時間335のフィールドには「1201マイクロ秒」が格納される。直前に共有資源110を使用したタスクは割り込みQであり、そのタスクは第2CPU170により実行されたので、原因CPU336のフィールドには「第2CPU」、原因処理337のフィールドには「割り込みQ」が格納される。
[0036]
(解析システム1の動作概要)
 解析システム1の動作概要を説明する。解析システム1の動作は、ログの収集と解析に大別される。ログの収集は電子制御装置100により実行され、ログの解析は解析装置200により実行される。
 電子制御装置100の第1CPU160および第2CPU170は、不図示のプログラムを実行することによりそれぞれソフトウエアを動作させる。これらのソフトウエアは、共有資源110の使用を必要とする。第1CPU160および第2CPU170は、ソフトウエアのイベントのログをログ格納部150に格納する。格納されるログは、タスクの実行開始と終了、割り込み処理の開始と終了、そして共有資源110を使用するためのロックの取得処理などである。本実施の形態では、ロックの取得処理のログに注目しているので、それ以外のログの記録処理の説明は省略する。
[0037]
 第1CPU160は、第1ロック取得部161を用いてロックを取得し、取得したロックに関するログを第1カウンタ記録部162を用いて第1バッファ151に記録する。第2CPU170は、第2ロック取得部171を用いてロックを取得し、取得したロックに関するログを第2カウンタ記録部172を用いて第2バッファ152に記録する。ログ出力部180は、ログ格納部150に格納されたログを解析装置200に出力する。
[0038]
 解析装置200のCPU260は、電子制御装置100から出力されたログをログ解析部220に解析させる。ログ解析部220が解析した結果は、解析結果213としてメモリ210に格納されるとともに表示部230に表示される。
 以下では、図7を用いて第1CPU160におけるロック取得の動作、およびロックに関するログの格納の動作を説明し、図8を用いてログ解析部220の動作を説明する。なお、第2CPU170におけるロック取得の動作、およびロックに関するログの格納の動作は、第1CPU160の動作と同様なので説明を省略する。
[0039]
(ロック取得と記録のフローチャート)
 図7を用いて、第1CPU160による、ロック取得動作およびロック取得に関するログ記録動作を説明する。以下に説明する各ステップの実行主体は、第1CPU160である。
 ステップS400では、第1カウンタ141のカウンタ値をゼロにリセットする。続くステップS401では共有資源110を使用するために、前述のTEST-and-SET命令を用いてロックの取得を試みる。続くステップS402ではステップS401におけるロック取得が成功したか否かを判断し、成功したと判断する場合はステップS406に進み、失敗したと判断する場合はステップS403に進む。
[0040]
 ステップS403では第1カウンタ141のカウンタ値をインクリメント、すなわち1増加させる。続くステップS404では、第1カウンタ141のカウンタ値が「1」であるか否かを判断する。カウンタ値が「1」であると判断する場合、すなわちステップS400が実行された後にステップS402で初めて否定判断された場合はステップS405に進む。カウンタ値が「1」以外であると判断する場合、すなわちステップS400が実行された後にステップS402で否定判断されたのが2回目以降である場合はステップS401に戻る。ステップS405では、時刻レジスタ121からタイムスタンプを取得し、ステップS401に戻る。
 ロックの取得に成功すると実行されるステップS406では、第1カウンタ141のカウンタ値がゼロであるか否かを判断する。ゼロであると判断する場合はステップS407に進み、ゼロ以外であると判断する場合はステップS408に進む。
[0041]
 ステップS407では、第1バッファ151を記録対象として、以下の情報を第1カウンタ記録部162に記録させる。すなわち、第1CPU160において現在実行されているイベントの種類、すなわち「ロック取得」、イベントの内容、および第1カウンタ141のカウンタ値を記録させる。ステップS408では、第1バッファ151を記録対象として、以下の情報を第1カウンタ記録部162に記録させる。すなわち、第1CPU160において現在実行されているイベントの種類、イベントの内容、第1カウンタ141のカウンタ値、ステップS405において取得したタイムスタンプ、およびタスク情報112を記録させる。
 ステップS407またはステップS408の実行が終了すると実行されるステップS409では、タスク情報112に第1CPU160において現在実行されているタスクの情報を格納し、図7に示すフローチャートを終了する。
[0042]
(ログ解析のフローチャート)
 図8は、収集バッファ211に収集されたログを解析し、解析結果213を出力するログ解析部220の動作を表すフローチャートである。以下に説明する各ステップの実行主体は解析装置200のCPU260である。
 ステップS501では、収集バッファ211にログが収納されているいずれかのCPUを処理対象として選択してステップS502に進む。後述するように、ステップS501とステップS509の間、すなわちステップS502~ステップS508の処理を、収集バッファ211にログが収納されている全てのCPUについて実行する。
[0043]
 ステップS502では、処理対象に選択されたCPUのいずれかのログを処理対象として選択してステップS503に進む。後述するように、ステップS502とステップS508の間、すなわちステップS503~ステップS507の処理を、処理対象のCPUの全てのログについて実行する。
 ステップS503では、処理対象のログのイベント種類311が「ロック取得」であるか否かを判断し、「ロック取得」であると判断する場合はステップS504に進み、それ以外であると判断する場合はステップS508に進む。
[0044]
 ステップS504では、処理対象のログの待ち時間が「1」以上であるか否かを判断し、「1」以上であると判断する場合はステップS505に進み、それ以外、すなわちゼロであると判断する場合はステップS508に進む。
 ステップS505では、処理対象のログのタスク情報315のフィールドの値に基づきそのタスクを実行していたCPUを特定する。続くステップS506では、処理対象のログの待ち時間314のフィールドの値を、時間変換テーブル212を用いて実時間に変換してステップS507に進む。
[0045]
 ステップS507では、処理対象のログの情報を解析結果213に記録する。このとき解析結果213の各フィールドに記録する値は、以下のとおりである。処理CPU331は、ステップS502~S508のループにおいて現在処理対象のCPUの名称である。発生処理332の値は、処理対象のログの直前のログにおけるイベント内容312の値である。ロック333の値は、処理対象のログにおけるイベント内容312の値である。タイムスタンプ334の値は、処理対象のログにおけるタイムスタンプ331の値である。実待ち時間335の値は、ステップS506において算出された実時間である。原因CPU336の値は、ステップS505において特定されたCPUの名称である。原因処理337の値は、処理対象のログにおけるタスク情報315の値である。
[0046]
 続くステップS508では、処理対象のCPUの全てのログを処理対象としたか否かを判断する。未処理のログがあると判断する場合は未処理のログのいずれかを処理対象としてステップS503に戻り、全てのログを処理したと判断する場合はステップS509に進む。
 ステップS509では、収集バッファ211にログが格納されている全てのCPUを処理対象としたか否かを判断する。未処理のCPUがあると判断する場合は未処理のCPUのいずれかを処理対象としてステップS502に戻り、全てのCPUを処理したと判断する場合は図8のフローチャートを終了する。
[0047]
 上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)電子制御装置100は、複数のCPU、すなわち第1CPU160および第2CPU170と、共有資源110とを備える。CPUのそれぞれは、排他制御により共有資源110を独占して使用可能である。CPUのそれぞれは、カウンタ値が格納される更新カウンタ格納部140と、カウントが完了したカウント値を含む、第1CPU160および第2CPU170が実行したプログラムのログが格納されるログ格納部150とを備える。CPUは、CPUが共有資源110にアクセスしたときに、更新カウンタ格納部140に格納されたカウンタ値を更新させるカウンタ更新部、すなわち第1ロック取得部161および第2ロック取得部171と、CPUが共有資源110にアクセスしたときに、共有資源110が他のCPUにより排他制御されていない場合には、更新カウンタ格納部140に格納されたカウンタ値を含むログをログ格納部150に記録するカウンタ記録部、すなわち第1カウンタ記録部162および第2カウンタ記録部172とを備える。
[0048]
 電子制御装置100は、CPUが共有資源110にアクセスしたときに、共有資源110が他のCPUにより排他制御されている場合、すなわちロック変数111が「1」の場合にはカウンタの値を更新する。そのため、タイマ120へのアクセスによるオーバーヘッドを生じさせることなく、アクセスが生じたことをカウンタ値の更新として更新カウンタ格納部140に記録することができる。なお、更新カウンタ格納部140に格納されるカウンタ値は、ロック取得を試みた2回目以降の回数、すなわちスピン回数を表す。
[0049]
 また電子制御装置100は、共有資源110が他のCPUにより排他制御されていない場合、すなわちロック変数111がゼロの場合には、オーバーヘッドの大きいタイマ120へのアクセスを行うことなく、更新カウンタ格納部140に格納されたカウント値をログ格納部150に格納する。そのため、ログを記録するためのオーバーヘッドが小さい。この利点は特に、待ち時間がゼロであった場合に顕著である。たとえば待ち時間の算出は、待ち時間の開始時と終了時にそれぞれタイマから時刻を取得し、2つの時刻の差を待ち時間として算出する手法が広く行われているが、この手法ではタイマ120へのアクセスが2回行われる。時刻の取得に要する時間はロックの取得に要する時間よりも長く、さらに時刻の取得が2回も行われるため、待ち時間の算出のオーバーヘッドが大きくなってしまう問題がある。しかし本発明によればこのような問題を生じさせることなく、待ち時間を記録することができる。
[0050]
(2)電子制御装置100のCPUは、CPUが共有資源110にアクセスして所定の処理単位を実行する毎に、すなわちスピンロックが実行されるごとに更新カウンタ格納部140に格納されたカウンタの値を変化させる。
 そのため、実行間隔および実行時間が既知であるスピンロックの実行回数を記録することで、オーバーヘッドの大きいタイマへのアクセスを行うことなく、待ち時間を記録することができる。
[0051]
(3)電子制御装置100は、時刻情報を保持するタイマ120を備える。CPUが共有資源110に一回目にアクセスしたときに、共有資源110が他のCPUにより排他制御されている場合は、時刻情報をタイマ120から取得し、時刻情報をさらに含むログをログ格納部150に格納する。
 そのため、タイマ120へのアクセスのオーバーヘッドを隠蔽しつつ、待ち時間が生じた時刻を記録することができる。カウンタが更新されたことは、共有資源110が他のCPUにより使用されており、ロック取得を試みたCPUは所定時間の経過後に再度ロック取得を試みることを意味する。そのため、ロック取得を試みたCPUがタイマ120へアクセスしても、そのオーバーヘッドは少なくとも一部が隠蔽されることになる。この効果は、第1CPU160および第2CPU170の少なくとも一方が、以下の特徴を有する場合に顕著である。すなわち、CPUが、スピン時にバス占有を防ぐためにCPUを一定時間停止する命令を発行する特徴を有する場合に効果が顕著である。
[0052]
(4)共有資源110は、CPUが実行している処理を識別する識別情報を格納する識別情報格納部、すなわちタスク情報112を記憶する領域を備える。カウンタ記録部、すなわち第1カウンタ記録部162および第2カウンタ記録部172は、CPUが2回目以降のアクセスで共有資源110を排他制御した場合に、識別情報格納部から識別情報、すなわちタスク情報112を取得し、タスク情報112をさらに含むログをログ格納部150に格納する。
 そのため、待ち時間を発生させた処理、すなわち従前に共有資源110を使用していた処理の識別情報をログ格納部150に記録することができる。
[0053]
(5)カウンタ更新部、すなわち第1ロック取得部161および第2ロック取得部171は、共有資源110を排他制御した場合に、CPUが実行している処理に基づき識別情報格納部の識別情報を更新する。
 タスク情報112に共有資源110を使用しているタスクの情報を格納するので、あるCPUが共有資源110を使用できなかった場合に、その原因となっていた処理、すなわち従前に共有資源110を使用していた処理を特定させることが可能となる。
[0054]
(6)解析システム1は、電子制御装置100と、解析装置200とを備える。解析装置200は、電子制御装置100のログ格納部150に格納された情報が入力されるログ収集部270と、カウンタ値を実時間に換算するための換算情報、たとえば時間変換テーブル212を格納する記憶部、すなわちメモリ210と、換算情報を用いて、ログ収集部270に入力されたカウンタ値を実時間に換算するログ解析部220と、を備える。
 そのため解析装置200は、電子制御装置100が記録したカウンタ値を実時間に変換できる。すなわち解析システム1は、共有資源110の排他制御による待ち時間をスピン回数として記録することで記録時のオーバーヘッドを低減しつつ、その記録したスピン回数を解析装置200を用いて実時間に変換することができる。
[0055]
(変形例1)
 第1バッファ151および第2バッファ152の待ち時間314には、タイマ120から取得した時刻を格納してもよい。すなわち図7のステップS408において、時刻レジスタ121からタイムスタンプを取得して格納してもよい。この場合は、解析装置200は、タイムスタンプ313に格納された時刻と待ち時間314に格納された時刻との差を演算することによりロック取得のために待機した実時間を算出する。
 この変形例1によれば、解析装置200は時間変換テーブル212を備える必要がないという第1の利点、およびより正確な待ち時間算出を行うことができるという第2の利点を有する。なお、待ち時間がゼロとなる場合以外は、時刻レジスタ121にアクセスして時刻を取得してもそのオーバーヘッドの影響は相対的に小さく、デメリットは小さい。
[0056]
(変形例2)
 第1カウンタ141は、第1CPU160のレジスタや第1CPU160が備える不図示のメモリに格納されてもよい。同様に第2カウンタ142は、第2CPU170のレジスタや第2CPU170が備える不図示のメモリに格納されてもよい。
 この変形例2によれば、高速なアクセスが可能な同一CPU内で書き換えが行われるので、カウンタ値の初期化および更新のオーバーヘッドを低減することができる。
[0057]
(変形例3)
 第1カウンタ141が独立して設けられず、第1バッファ151が第1カウンタ141の役割も兼ねてよい。この場合は第1ロック取得部161は、第1カウンタ141に格納されるカウンタ値を初期化および更新する代わりに、第1バッファ151の待ち時間314のフィールドにカウンタの初期値であるゼロを書き込み、更新する。同様に第2カウンタ142が独立して設けられず、第2バッファ152が第2カウンタ142の役割も兼ねてよい。
[0058]
(変形例4)
 電子制御装置100は、3つ以上のCPUを備えてもよい。また電子制御装置100は、単一のパッケージに収められ複数のコアを有するCPUを1つ備えてもよい。単一のパッケージに収められ複数のコアは、同一であってもよいし異なっていてもよい。さらに、各CPUコアのアーキテクチャ及び動作速度は同一であってもよいし、異なっていてもよい。
[0059]
(変形例5)
 メモリ130は、CPUごとに独立していてもよい。この場合には、ログ格納部150および更新カウンタ格納部140には、それぞれのCPUごとのメモリ130に存在する。さらに、プログラムを保持する不揮発性メモリとデータを保持する揮発性メモリに分かれている構成であってもよい。
[0060]
(変形例6)
 電子制御装置100が第3のCPUを備え、その第3のCPUが第1ロック取得部161、第1カウンタ記録部162、第2ロック取得部171、および第2カウンタ記録部172の少なくとも1つを実行してもよい。また、第1ロック取得部161、第1カウンタ記録部162、第2ロック取得部171、および第2カウンタ記録部172の少なくとも1つが、ハードウエア回路により実行されてもよい。
[0061]
(その他の変形例)
 上述した第1の実施の形態をさらに以下のように変形してもよい。
(1)電子制御装置100がタイマを複数備え、CPUごとに異なるタイマを参照してもよい。この場合は、各CPUの用いている時刻レジスタ121の値の差を記録するなど、補正処理を行う。
(2)第1カウンタ記録部162および第2カウンタ記録部172は、図7のステップS408においてタスク情報112を記録しなくてもよい。この場合は、第1ロック取得部161および第2ロック取得部171は、図7のステップS409におけるタスク情報112の更新を実行しなくてよく、第1バッファ151および第2バッファ152がタスク情報315のフィールドを備えなくてもよい。
[0062]
(3)第1ロック取得部161および第2ロック取得部171は、カウンタ値にかかわらずタイムスタンプを取得しなくてもよい。すなわち、図7のステップS403を実行したらカウンタ値を評価することなくステップS401に戻ってもよい。
(4)電子制御装置100は、共有資源110を複数備えてもよい。この場合、それぞれの共有資源110はロック変数111およびタスク情報112を独立して備える。
[0063]
(第2の実施の形態)
 図9~図10を参照して、電子制御装置の第2の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、電子制御装置がカウント値から実時間への換算を行う診断部を備える点で、第1の実施の形態と異なる。
[0064]
 図9は、第2の実施の形態における電子制御装置100Aの構成を示す図である。電子制御装置100Aは、第1の実施の形態における電子制御装置100の構成からログ出力部180が削除され、診断部900が追加される。また、メモリ130には時間変換テーブル212および解析結果213がさらに格納される。特に説明しない構成、および動作は第1の実施の形態と同様である。
[0065]
 診断部900は、第1CPU160および第2CPU170のいずれかが不図示のROMに格納されたプログラムを実行することにより実現される機能を機能ブロックとして表したものである。診断部900は、ログ格納部150に格納されたログを解析する。診断部900は、解析により異常を検出すると、たとえば待ち時間が所定の時間よりも長い場合は、所定の異常時処理を実行する。診断部900は、一定の時間が経過すると、または診断を要するような所定の事象が発生すると動作する。
[0066]
(診断部のフローチャート)
 図10は第2の実施の形態における診断部900の動作を表すフローチャートである。以下では、図8に示したログ解析部220の動作を表したフローチャートとの差異を説明する。以下に説明する各ステップの実行主体は、第1CPU160および第2CPU170のいずれかである。以下ではこの実行主体を「CPU」とする。
 ステップS507までの処理はログ解析部220と同様なので説明を省略する。ステップS507の実行が完了すると、ステップS521を実行する。
[0067]
 ステップS521では、ステップS506において変換した実時間が所定値以上であるか否かを判断する。所定値以上であると判断する場合はステップS522に進み、所定値未満であると判断する場合はステップS508に進む。
 ステップS522では所定の異常時処理を実行してステップS508に進む。異常時処理とはたとえば、最小構成の実行状態への移行、または異常検出した回数をカウントし所定の閾値に達した場合の電子制御装置100の再起動などである。
[0068]
 上述した第2の実施の形態によれば、次の作用効果が得られる。
(1)電子制御装置100Aは、カウント値を時間に換算するための換算情報、たとえば時間変換テーブル212を格納する記憶部、すなわちメモリ130と、時間変換テーブル212を用いてカウンタ値を実時間に換算する解析部、すなわち診断部900と、を備える。
 そのため電子制御装置100Aは、解析装置200を用いることなくカウンタ値を実時間に換算することができる。これにより、図10のステップS521に示したように、換算した実時間を用いた診断を実行できる。
[0069]
(第2の実施の形態の変形例)
 第2の実施の形態を以下のように変形してもよい。
(1)診断部900は、算出した待ち時間以外を診断に利用してもよい。たとえば、待ちの原因となったタスクが所定のものでなかった場合に、何らかの実行順序の異常が起きたと判定して、これを異常として診断してもよい。
(2)診断部900は、解析結果をメモリ130に記録しなくてもよい。
(3)電子制御装置100Aは、ログ出力部180をさらに備えてもよい。
[0070]
(第3の実施の形態)
 図11~図13を参照して、電子制御装置の第3の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、スピン回数ではなくベーシックブロックの実行回数をカウントする点で、第1の実施の形態と異なる。
[0071]
(ベーシックブロック)
 ベーシックブロックとは、プログラムの実行単位であって、その単位中に分岐もしくは合流を含まないものである。ベーシックブロックは分岐や合流を含まないので、実行する環境、すなわちCPUやメモリ等が同一であれば、ベーシックブロックの実行時間は一定である。本実施の形態では3つのベーシックブロック(A,B,C)を用いて説明する。それぞれのベーシックブロックの電子制御装置100における実行時間は既知である。
[0072]
(構成)
 解析システム1のハードウエア構成は第1の実施の形態と同様である。ただし第1カウンタ141と第2カウンタ142のそれぞれは、ベーシックブロックA,B,Cにそれぞれ対応する3つのカウンタ(A,B,C)を備える。また時間変換テーブル212として格納される情報が第1の実施の形態と異なる。さらに電子制御装置100の不図示のROMに格納されるプログラムが第1の実施の形態と異なり、第1ロック取得部161および第2ロック取得部171の動作が第1の実施の形態と異なる。
[0073]
 図11は、本実施の形態における第1バッファ151の構造の一例を示した図である。第1バッファ151を構成するフィールドの構成は第1の実施の形態と同様であり、待ち時間314のフィールドに格納される値が異なる。すなわち待ち時間314のフィールドには、第1カウンタ141に格納されるカウンタA,カウンタB,カウンタCの値が格納される。これ以外の点は第1の実施の形態と同様である。図11に示す例では、ロックMの取得時に、ベーシックブロックAが3回、ベーシックブロックBが1回、ベーシックブロックCが2回実行されたことを示している。第2バッファ152の構成、および第2バッファ152に格納される情報は第1バッファ151と同様である。
[0074]
 図12は、時間変換テーブル212Aの一例を示す図である。時間変換テーブル212Aには、それぞれのベーシックブロックに対応する時間が記録される。具体的には時間変換テーブル212Aは、ベーシックブロック番号323のフィールドと、時間324のフィールドとを備える。ベーシックブロック番号323のフィールドには、ベーシックブロックの識別子またはベーシックブロックの名称が格納される。時間324のフィールドには、ベーシックブロックの1回の実行に要する時間が格納される。
 なお、図11と図12に示す例によれば、各ベーシックブロックの実行時間から、ロックMの取得のための待ち時間は、3*20+1*38+2*19=136マイクロ秒と算出される。
[0075]
(ロック取得部の動作)
 ロック取得部、すなわち第1ロック取得部161および第2ロック取得部171は、第1の実施の形態では、TEST-and-SET命令を用いてロックを取得したが、第3の実施の形態では、LoadLinked命令(以下、「LL命令」と呼ぶ)、およびStore Conditional命令(以下、「SC命令」と呼ぶ)を用いてロックを取得する。
[0076]
 LL命令とは、指定されたメモリ領域をロードすると同時に、その領域に対して「リンク」を生成する命令である。この「リンク」は、他のCPUが同じ領域に書き込みを行うと消滅する。SC命令とは、指定されたメモリ領域に対して「リンク」が残存している場合に限り、値をストアする命令である。SC命令における「リンク」の残存の確認は、以下のことを意味する。すなわち、「リンク」が残存していることは、LL命令からSC命令までの間に、他のCPUが同じ領域に書き込みを行っていないことを示している。すなわちこれにより、読み込みと書き込みのアトミシティの保証、つまり読み込みと書き込みが不可分の一体として成功したことが保証される。
[0077]
(フローチャート)
 図13は、第3の実施の形態における第1CPU160による、ロック取得動作およびロック取得に関するログ記録動作を示すフローチャートである。図13に示すように、ステップS451がベーシックブロックA、ステップS454がベーシックブロックB、ステップS455がベーシックブロックCである。それぞれのベーシックブロックを実行すると、各ベーシックブロックに対応するカウンタを更新する。図13に示すフローチャートは、第1の実施の形態における図7に相当する。以下では主に図7との相違点を説明する。
[0078]
 ステップS400Aでは、第1カウンタ141のカウンタA~Cをゼロにリセットし、ステップS451に進む。ステップS451ではLL命令を用いてロック変数111を読出してステップS452に進む。ステップS452ではカウンタAをインクリメント、すなわちカウンタ値を1増加させてステップS453に進む。
 ステップS453では、ステップS451において読みだしたロック変数111がゼロであったか否かを判断する。CPUは、ゼロであると判断する場合はステップS455に進み、ゼロでないと判断する場合はステップS454に進む。
[0079]
 ステップS454では、ステップS451において生成したリンクを破棄する。続くステップS403Aでは、カウンタBをインクリメントしてステップS404Aに進む。ステップS404AではカウンタBとカウンタCのカウンタ値の和が「1」であるか否かを判断する。カウンタ値が「1」であると判断する場合はステップS405に進み、カウンタ値が「1」以外であると判断する場合はステップS451に戻る。ステップS405では、時刻レジスタ121からタイムスタンプを取得し、ステップS451に戻る。
[0080]
 ステップS455では、SC命令を用いてロック変数111に「1」を書き込む。続くステップS456では、カウンタCをインクリメントする。続くステップS457ではステップS455における書き込みが成功したか否かを判断し、成功したと判断する場合はステップS406Aに進み、失敗したと判断する場合はステップS404Aに進む。ステップS406Aでは、カウンタBのカウンタ値がゼロであるか否かを判断する。ゼロであると判断する場合はステップS407に進み、ゼロ以外であると判断する場合はステップS408に進む。
ステップS407以降の処理は第1の実施の形態と同様なので説明を省略する。
[0081]
 上述した第3の実施の形態によれば、次の作用効果が得られる。
(1)カウンタ更新部、すなわち第1ロック取得部161および第2ロック取得部171は、共有資源110にアクセスしたときに、所定の処理単位が実行される毎に、すなわち各ベーシックブロックが実行されるごとに更新カウンタ格納部140に格納された、それぞれのベーシックブロックに対応するカウンタの値を更新させる。
 そのため、実行間隔および実行時間が既知であるベーシックブロックの実行回数を記録することで、オーバーヘッドの大きいタイマへのアクセスを行うことなく、待ち時間を記録することができる。
[0082]
(2)カウンタ更新部、すなわち第1ロック取得部161および第2ロック取得部171は、共有資源110が他のCPUにより排他制御されている場合に、カウンタBまたはカウンタCのカウンタ値を変化させる。そのため、共有資源110にアクセスしたが排他制御できなかった回数を記録することができる。
第1の実施の形態と異なり、第3の実施の形態では、共有資源110が他のCPUにより排他制御されている場合には、ステップS453でゼロであると判断する場合と、後述のステップS457で書き込みが失敗したと判断する場合の二通りがある。カウンタBとカウンタCのカウンタ値の和を用いることで、排他制御できなかった回数を記録することができる。
また、ステップS404Aにおいては、カウンタBとカウンタCのカウンタ値の和「1」であるかと判断することにより、いずれの場合によったとしても、排他制御できなかった1回目の場合に時刻を取得することができ、第1の実施形態と同様に、オーバーヘッドを隠蔽しつつ待ち時間が生じた時刻を記録する効果を得ることができる。
[0083]
(変形例)
 第3の実施の形態では、ベーシックブロックの実行回数をカウントしたが、これより細かい粒度での処理の回数をカウントしてもよいし、荒い粒度での処理の回数をカウントしてもよい。例えば、細かい粒度でのカウントとして、CPUの命令ごとにカウントする構成が考えられる。この場合は、ログ格納部150には、CPUの各命令ごとの実行時間が格納されることになる。また、命令ごとにカウントする場合は、ソフトウェアでこれを実現することは極めてオーバーヘッドが高いため、CPU等のハードウェア回路を用いてカウントすることが望ましい。ハードウェアによる命令ごとの計数を行う方法によれば、ベーシックブロックごとの実行回数を計数するようにソフトウェアを変更する必要がなく、相対的にオーバーヘッドを減らす効果が得られる。
[0084]
 なお、第1の実施形態においても、更新カウンタ格納部140に格納されたカウンタのインクリメント処理はソフトウェアで行う必要はない。たとえば、CPUの一つまたは複数のレジスタとしてカウンタが実装され、CPUが特定の命令を実行した場合に、対応するカウンタが加算される形であってもよい。この場合はたとえば、図7のステップS407およびステップS408においてログ格納部150に記録される待ち時間314は、ハードウェアから読みだしたカウンタの値となる。この場合も、第1の実施の形態の作用効果に加えて、オーバーヘッドをさらに減らす効果が得られる。
[0085]
 プログラムは不図示のROMに格納されるとしたが、プログラムはメモリ130に格納されていてもよい。また、電子制御装置100が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと電子制御装置100が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、例えば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
 上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。
 上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
[0086]
 次の優先権基礎出願の開示内容は引用文としてここに組み込まれる。
 日本国特許出願2016年第169607号(2016年8月31日出願)

符号の説明

[0087]
1 … 解析システム
100、100A … 電子制御装置
110 … 共有資源
111 … ロック変数
112 … タスク情報
120 … タイマ
140 … 更新カウンタ格納部
150 … ログ格納部
160 … 第1CPU
161 … 第1ロック取得部
162 … 第1カウンタ記録部
170 … 第2CPU
171 … 第2ロック取得部
172 … 第2カウンタ記録部
200 … 解析装置
211 … 収集バッファ
212、212A … 時間変換テーブル
220 … ログ解析部
230 … 表示部
900 … 診断部

請求の範囲

[請求項1]
 複数のCPUコアと、共有資源とを備える電子制御装置であって、
 前記CPUコアのそれぞれは排他制御により前記共有資源を独占して使用可能であり、
 カウンタ値が格納される更新カウンタ格納部と、
 前記CPUコアが実行したプログラムのログが格納されるログ格納部と、
 前記CPUコアが前記共有資源にアクセスしたときに、前記カウンタ値を変化させるカウンタ更新部と、
 前記CPUコアが前記共有資源にアクセスしたときに、前記共有資源が他のCPUコアにより排他制御されていない場合には、前記カウンタ値を含む前記ログを前記ログ格納部に記録するカウンタ記録部とをさらに備える電子制御装置。
[請求項2]
 請求項1に記載の電子制御装置であって、
 前記カウンタ更新部は、前記CPUコアが前記共有資源にアクセスしたときに前記共有資源が他のCPUにより排他制御されている場合に、前記カウンタ値を変化させる電子制御装置。
[請求項3]
 請求項1に記載の電子制御装置であって、
 前記カウンタ更新部は、前記CPUコアが前記共有資源にアクセスして所定の処理単位を実行する毎に、前記カウンタ値を変化させる電子制御装置。
[請求項4]
 請求項1に記載の電子制御装置であって、
 時刻情報を保持するタイマを更に備え、
 前記カウンタ記録部は、前記CPUコアが前記共有資源に一回目にアクセスしたときに、前記共有資源が他のCPUコアにより排他制御されている場合は、時刻情報を前記タイマから取得し、前記時刻情報をさらに含む前記ログを前記ログ格納部に格納する電子制御装置。
[請求項5]
 請求項1に記載の電子制御装置であって、
 前記共有資源は、前記CPUコアが実行している処理を識別する識別情報を格納する識別情報格納部を備え、
 前記カウンタ記録部は、前記CPUコアが二回目以降のアクセスで前記共有資源を排他制御した場合に、前記識別情報格納部から前記識別情報を取得し、前記識別情報をさらに含む前記ログを前記ログ格納部に格納する電子制御装置。
[請求項6]
 請求項5に記載の電子制御装置であって、
 前記カウンタ更新部は、前記CPUコアが前記共有資源を排他制御した場合に、前記CPUコアが実行している処理に基づき前記識別情報格納部の前記識別情報を更新する電子制御装置。
[請求項7]
 請求項1から請求項6までのいずれか一項に記載の電子制御装置であって、
 前記カウンタ値を時間に換算するための換算情報を格納する記憶部と、
 前記換算情報を用いて前記カウンタ値を実時間に換算する解析部と、を備える電子制御装置。
[請求項8]
 請求項1から請求項6までのいずれか一項に記載の電子制御装置と、解析装置と、を備える解析システムであって、
 前記解析装置は、
 前記電子制御装置の前記ログ格納部に格納された前記ログが入力されるログ収集部と、
 前記カウンタ値を実時間に換算するための換算情報を格納する記憶部と、
 前記換算情報を用いて、前記ログ収集部に入力された前記カウンタ値を実時間に換算する解析部と、を備える解析システム。

図面

[ 図 1]

[ 図 2]

[ 図 3]

[ 図 4]

[ 図 5]

[ 図 6]

[ 図 7]

[ 図 8]

[ 図 9]

[ 図 10]

[ 図 11]

[ 図 12]

[ 図 13]