説明

コア監視装置、情報処理装置

【課題】マルチコアマイコンにおいて、異常の生じたコアをソフト的な負荷増大を抑制して判別可能なコア監視装置を提供すること。
【解決手段】複数のコアから共通の周期で通知を受け付けるコア監視装置17であって、 コアから通知を受け付けた際、各コアに固有のコア識別数値(例えば、カウンタ値×ID)をコア毎に生成するコア識別数値生成手段31と、複数のコアのコア識別数値を合計した合計値を算出する合計値算出手段32と、最後に算出された合計値を記憶する合計値記憶手段36と、合計値算出手段が算出した合計値と、合計値記憶手段に記憶された合計値との差である第一の差を算出する第一の差算出手段33と、第一の差を記憶する第一の差記憶手段37と、第一の差算出手段が算出した第一の差と第一の差記憶手段に記憶された第一の差との差である第二の差を算出する第二の差算出手段34と、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のコアの動作状態を監視するコア監視装置に関する。
【背景技術】
【0002】
燃費向上や運転者の負担軽減、安全性の向上などをもたらすため、車両にはマイコンを応用した多くの電子制御装置が搭載されている。マイコンが故障するとこれらの制御が損なわれるため、マイコンの動作状態を監視してマイコンの動作を保証する対策が講じられている。このような対策としては、例えば、タスクが正常に実行されていることを定期的なタイマリセットで確認するウォッチドッグタイマが知られている。
【0003】
ところで、マイコンに、コアが複数個含まれるマルチコア型のプロセッサが搭載されるようになってきた(以下、マルチコアマイコンという)。マルチコアマイコンにおいて各コアの動作状態を監視する手法として、各コア毎にウォッチドッグタイマを用意することが考えられる。しかし、各コア用のウォッチドッグタイマを配置するとウォッチドッグタイマの数や配線が増大しコストアップとなってしまう。
【0004】
そこで、複数のコアを1つのウォッチドッグタイマにより監視する技術が提案されている(例えば、特許文献1参照。)。特許文献1には、各々のコアがRAM内に確保された各コア毎の更新領域を、一定周期毎に各々の更新履歴が判るように更新し、少なくとも一つのコアがRAMの更新履歴を判定し、監視部への出力処理を行う電子制御装置が開示されている。この電子制御装置では、複数のコアの1つでもRAMを正常に更新しないと、更新領域に基づきコアが特定されるので、1つのウォッチドッグタイマで異常のあるコアのみをリセットすることができる。
【0005】
また、ウォッチドッグタイマ以外にも、コア同士で互いに監視する技術も提案されている(例えば、特許文献2参照。)。特許文献2には、被監視CPUに対して監視部が例題を出題し、例題に対する回答に基づいてCPUの演算機能を監視する監視方法が開示されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2010−033475号公報
【特許文献2】特開2010−128627号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、特許文献1に開示された電子制御装置では、RAMの更新領域の監視と異常のあるコアの特定をソフト的に行う必要があるため、ソフト的な負荷が増大するという問題がある。すなわち、従来から、ウォッチドッグタイマをリセットする処理はソフト的に行われているが、ウォッチドッグタイマを1つにするとソフト的な負荷が余分に生じてしまう。
【0008】
また、特許文献2のように、あるコアが他のコアを監視する場合、被監視コア間ではどのコアに異常が生じたかを検知できないという問題がある。例えば、3つのコアを含むマルチコアにおいて、コア1とコア2が互いに監視し、コア1とコア3が互いに監視している場合を想定する。コア1がコア2の異常を検出した場合、コア3がコア2の異常を検知するためにはコア1がコア3にコア2の異常を通知しなければならない。このため、コア同士が異常のあるコアを検知するためにソフト的な負荷が発生してしまう。
【0009】
本発明は上記課題に鑑み、マルチコアマイコンにおいて、異常の生じたコアをソフト的な負荷増大を抑制して判別可能なコア監視装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
本発明は、複数のコアから共通の周期で通知を受け付けるコア監視装置であって、コアから通知を受け付けた際、各コアに固有のコア識別数値をコア毎に生成するコア識別数値生成手段と、複数のコアの前記コア識別数値を合計した合計値を算出する合計値算出手段と、最後に算出された合計値を記憶する合計値記憶手段と、前記合計値算出手段が算出した合計値と、前記合計値記憶手段に記憶された合計値との差である第一の差を算出する第一の差算出手段と、最後に算出された第一の差を記憶する第一の差記憶手段と、前記第一の差算出手段が算出した第一の差と、前記第一の差記憶手段に記憶された第一の差との差である第二の差を算出する第二の差算出手段と、を有する。
【発明の効果】
【0011】
マルチコアマイコンにおいて、異常の生じたコアをソフト的な負荷増大を抑制して判別可能なコア監視装置を提供できる。
【図面の簡単な説明】
【0012】
【図1】マイコンの概略的な特徴を説明する図の一例である。
【図2】車両に搭載されるマイコンのハードウェア構成図の一例である。
【図3】コア1〜nのタスクとカウンタ履歴部の関係を模式的に説明する図の一例である。
【図4】カウンタ履歴部の構成例の一例を示す図である。
【図5】カウンタ履歴部の構成例の一例を示す図である。
【図6】カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。
【図7】コアが4つの場合のカウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。
【図8】IDが不連続の場合の、カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。
【図9】複数のコアが同時に暴走した場合の、カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。
【図10】カウンタ履歴部の構成例の一例を示す図である。
【図11】カウンタ履歴部の構成例の一例を示す図である。
【発明を実施するための形態】
【0013】
以下、本発明を実施するための形態について図面を参照しながら説明する。
【実施例1】
【0014】
図1は、本実施形態のマイコンの概略的な特徴を説明する図の一例である。まず、前提として、複数のコアを有するマルチコアマイコンでは、OS(Operating System)やコア同士が他のコアを識別するために、各コアにそれぞれ一意のIDが割り当てられている。
(i) 3つのコア1〜3はそれぞれソフト的に実装されているカウンタを有し、同じ周期でそれぞれが独立にカウントアップしている。カウントされた値をカウンタ値という。
(ii) コア1〜3は「カウンタ値×ID」を計算する。IDが異なるので、カウンタ値が同じでも計算結果はコア毎に異なる。
(iii) ウォッチドッグタイマを代替する回路(後述するカウンタ履歴部)は以下の計算を行う。
・コア1〜3から通知された計算結果の合計値を算出する。
・前回と今回の合計値の差である第1差を算出する。
・前回と今回の第1差の差である第2差を算出する。
【0015】
図1(a)に示すように、1つもコアが暴走していない場合、第1差には常に“6”が、第2差には常に“0”が得られる。
(iv) 例えば、コア2が暴走した場合、コア2は「カウンタ値×ID」を更新できないので、上記回路におけるコア2の計算結果は“4”のままとなる。
(v) したがって、コア2の暴走により合計値は正常時の合計値よりも小さくなる。第1差も、コア2が「カウンタ値×ID」を更新しない分、小さくなる。ここで、第1差の減少分はコア2のIDに等しくなる。このため、図1(b)に示すように、第2差に暴走したコアのIDが得られることになる。
【0016】
このように、暴走したコアは「カウンタ値×ID」を更新しないので合計値が小さくなり、第1差の減少分である第2差に暴走したコア2のコアIDが現れる。この第2差を各コアが参照すれば、各コアは暴走したコアを検知することができる。
【0017】
〔構成例〕
図2は、車両に搭載されるマイコンのハードウェア構成図の一例である。マイコン100は、ECU(Electronic Control Unit)に搭載されることが想定されているがその用途は車両に限定されない。車載されるECUには、その主要な機能により、エンジンECU、ブレーキECU、ボディECU、ナビゲーションECU(AV・情報処理ECU)、ゲートウェイECU等の種類がある。本実施例のマイコン100はECUの機能の違いに影響されず搭載されることが可能である。また、複数の機能が1つに統合されたECUにマイコン100を搭載してもよい。
【0018】
マイコン100は、メインバス21に接続されたプロセッサ11、ROM12、INTC13、RAM14、DMAC15、並びに、I/Oブリッジ16を有し、I/Oブリッジ16には周辺バス22を介してカウンタ履歴部17、ADC(Analog to Digital Converter)18及びCANコントローラ19が接続されている。
【0019】
プロセッサ11は少なくとも2つ以上のコア1〜nを有すると共に、各コア1〜nは一般的な演算機能(例えば、ALU等の演算装置、命令バッファ、命令デコーダ、レジスタセット等)を有している。
【0020】
ROM12はフラッシュメモリなどの不揮発メモリであり、プロセッサ11が実行するプログラム30や初期値、パラメータ等を記憶している。
【0021】
INTC13はIRQやその他の割り込み端子を介して周辺機器から入力された割り込み要求を、周辺機器の優先順位に基づき調停してプロセッサ11に通知する。これによりプロセッサ11は、割り込みした周辺機器に応じて決まったアドレスの命令をROM12から読み出して処理を実行する。
【0022】
RAM14は、プロセッサ11がプログラム30を実行するための作業領域である。プロセッサ11はROM12からプログラム30を読み込み、また、必要であればデータバスを介してRAM14からデータを読み出しプログラム30を実行する。DMAC15は、プロセッサ11からの指示によりRAM14からI/Oブリッジ16を介して周辺機器にデータを送信する。また、周辺機器から割り込みされたプロセッサ11から指示を受けて、I/Oブリッジ16を介して周辺機器からデータを受け取り、RAM14に書き込む。
【0023】
I/Oブリッジ16は、マルチプレクサやブリッジ回路などであり、チャネル毎に、カウンタ履歴部17、ADC18、及び、CANコントローラ19とそれぞれ接続されており、これらの周辺機器とデータを送受信する。カウンタ履歴部17は、コア1〜nの「カウンタ値×ID」(又はカウンタ値)を取得して、合計値、第1差、及び、第2差を算出する。詳しくは後述する。
【0024】
ADC18は、各種のセンサが検出したアナログ信号をデジタル信号に変換する。ADC18は変換の終了を、INTC13を介してプロセッサ11に通知する。CANコントローラ19は、車載ネットワークを介して接続された他のECUと通信するための通信装置である。CANコントローラ19は、プロセッサ11から通信データの送信要求を受け付けるとフレームの各フィールドにCAN IDやデータを格納しCANバスに出力する。また、CANコントローラ19は、受信すべきCAN IDの通信データを検出するとそれを取り込みINTC13を介してプロセッサ11に割り込んで通知する。
【0025】
なお、ウォッチドッグタイマとしては同じマイコン内にカウンタ履歴部17が搭載されていればよい。しかし、他のマイコン、又は、CAN(Controller Area Network)などの車載LANを介して接続された他のECUにカウンタ履歴部17が搭載されてもよい。この場合、複数のマイコンでカウンタ履歴部17を共用できる。
【0026】
〔カウンタ値のカウントアップなどの処理〕
各コア1〜nはそれぞれ専用の車載装置の制御のため処理を行っている。この処理又はこの処理を実行するプログラムをメインタスクと称する。そして、一般的なウォッチドッグタイマによる異常監視では、ウォッチドッグタイマがオーバーフローしないように、コア1〜nが定期的にウォッチドッグタイマをリセットする。このリセットはアイドルタスクと称されるタスクの中で行われることが多い。本実施形態では、コアがアイドルタスクを実行してウォッチドッグタイマをリセットする代わりに、「カウンタ値×ID」(又はカウンタ値)を通知する処理を行う。
【0027】
図3は、コア1〜nのタスクとカウンタ履歴部17の関係を模式的に説明する図の一例である。カウンタ履歴部17は、図3にも示すように乗算器1〜nがある場合とない場合がある。
【0028】
コア1〜nには、重複しないIDが付与されている。IDは、マイコン100の起動時にOS又はプログラム30が初期処理として各コア1〜nのコアIDレジスタ40に登録する。IDはコア毎に固定であるが、初期処理の度に異なっていてもよい。また、図示するように連番である必要もない。
【0029】
タイマ41は予め設定された時間間隔(例えば数ミリ秒)毎に周期的にプロセッサ11に割込みする。各コア1〜nは割込みによりメインタスクを実行する。コア1〜nはメインタスクの実行を終了すると、続いてアイドルタスクを実行する。各コアが行うメインタスクは処理内容が異なっているので、同じ周期でメインタスクを実行しても実行完了タイミングは異なる可能性がある。しかし、メインタスクとアイドルタスクが実行される頻度は各コア1〜nに共通になる。
【0030】
したがって、各コア1〜nは共通の周期でアイドルタスクを実行する。すなわち、各コア1〜nが実行するメインタスクが異なっていても、アイドルタスクがカウンタ値をカウントアップする頻度は共通である。
【0031】
アイドルタスクは、ウォッチドッグタイマをリセットする処理の代わりに、カウンタ値を決まった値だけカウントアップする処理を行う。カウンタ値のカウントアップは各コアに共通なので、コアが暴走しなければカウンタ値1〜nはコア1〜nにおいて等しくなる。1回のカウントアップ量は、各コアに共通の自然数ならいくつでもよいがここでは“1”とする。したがって、カウンタ値はアイドルタスクが呼び出される毎に1つ大きくなる。
【0032】
アイドルタスクは、自己の「カウンタ値×ID」をカウンタ履歴部17に通知する。または、アイドルタスクは、自己のIDと共にカウンタ値をカウンタ履歴部17に通知する。このように、「カウンタ値×ID」の処理は、各コア1〜nを識別するための処理となるが、コアとカウンタ履歴部17のどちらが行ってもよい。詳しくは後述する。
【0033】
アイドルタスクは、カウンタ値をコア1〜nのローカルRAMやレジスタに記憶し、この後、他に処理がなければコア1〜nはアイドルタスクを終了する。次回、メインタスクが周期割込みにより起動されると、アイドルタスクは最後に記憶したカウンタ値を読み出して、カウントアップする処理を再度、行う。
【0034】
なお、コア1〜nからカウンタ履歴部17へのアクセスは、メインバス21、I/Oブリッジ16、周辺バス22、カウンタ履歴部17の順である。逆に、カウンタ履歴部17がプロセッサ11にアクセスする場合は、INTC13、プロセッサ11の順となる。
【0035】
また、必ずしも、アイドルタスクはメインタスクから呼び出されて実行される必要はなく、メインタスクの中でカウンタ値を積算してもよい。また、アイドルタスクが、周期的な割込みで、直接、起動されてもよい。
【0036】
〔カウンタ履歴部の構成例1〕
図4は、カウンタ履歴部17の構成例の一例を示す図である。図4の構成は、カウンタ履歴部17が「カウンタ値×ID」を算出する場合の構成である。
【0037】
カウンタ履歴部17は、乗算器31(区別する場合、乗算器1〜nという)、加算器32、減算器33、合計値記憶部36、第1差記憶部37、第2差記憶部38、比較器35、及び、コアID公開用レジスタ39を有する。なお、乗算器31、加算器32及び減算器33,34は、説明の都合上、別々に図示したものであり加算・減算・乗算が可能な一体の演算器により構成してもよい。
【0038】
乗算器1〜nには、コア1〜nから送出されたカウンタ値、及び、コア1〜nのID1〜nが供給される。乗算器1〜nは、コア毎にコアのカウンタ値とコアのIDの乗算を行い、それぞれを加算器32に供給する。
【0039】
加算器32は、全ての乗算器1〜nの乗算結果を加算する。この加算結果が合計値である。加算器32は、最新の合計値を減算器33に供給する。
【0040】
次に、減算器33は以下の処理を行う。
・合計値記憶部36から、前回の合計値を読み出す。
・加算器32から取得した最新の合計値を合計値記憶部36に記憶する。
・最新の合計値から前回の合計値を減じる。
この減算結果が第1差である。減算器33は、最新の第1差を減算器34に供給する。
【0041】
次に、減算器34は以下の処理を行う。
・第1差記憶部37から、前回の第1差を読み出す。
・減算器34から取得した最新の第1差を第1差記憶部37に記憶する。
・最新の第1差から前回の第1差を減じて絶対値を求める。
この減算結果が第2差である。
【0042】
次に、比較器35は、第2差がゼロか否かを判定する。ゼロの場合、コア1〜nに暴走したコアはなく、各コア1〜nが正常にカウンタ値をカウントアップしていることになる。よって、カウンタ履歴部17は、特に何もする必要はないが、図では比較用に第2差を第2差記憶部38に記憶している。
【0043】
第2差がゼロでない場合、コア1〜nに暴走したコアがあることになる。このため、比較器35は、第2差をコアID公開用レジスタ39に記憶する。コアID公開用レジスタ39は、各コアが参照することが記憶手段(例えば、レジスタ)である。第2差がゼロ以外になった場合、第2差は暴走したコアのコアIDになるので、各コア1〜nは、どのコアが暴走したかを容易に判別することができる。
【0044】
カウンタ履歴部17は、ウォッチドッグタイマと同様に、第2差がゼロでない場合、以下のような処理を行う。
(a)プロセッサ11に割込み信号を出力する。これによりプロセッサ11の各コア1〜nは割込みに対応した処理として、例えば、コアID公開用レジスタ39から第2差(コアID)を読み出し、暴走したコアを特定する。また、暴走したコアに応じたフェールセーフ処理(別のコアに処理を振り分ける、マスターを切り換える等)を行うことができる。
(b)CANコントローラ19を介して他のECUに通知する。
(c)電源を遮断する。暴走したコアをリセットする(コアのみをリセットする内部リセット)。
【0045】
このように、アイドルタスクに、ウォッチドッグタイマのリセットの代わりにカウンタ値をカウントさせる処理を行わせるだけで、ほとんどソフト的な処理負荷を増大させることなく、各コア1〜nが暴走したコアを特定できる。コアの数が何個でも、1つのカウンタ履歴部17があればよい。
【0046】
〔カウンタ履歴部の構成例2〕
図5は、カウンタ履歴部17の構成例の一例を示す図である。図5の構成は、各コアのアイドルタスクが「カウンタ値×ID」を算出する場合の構成である。このため、図5のカウンタ履歴部17は、乗算器1〜nを有さない。それ以外の構成は図4と同様である。
【0047】
加算器32には、コア1〜nから送出された「カウンタ値×ID」の計算結果が供給される。加算器32は、全てのコア1〜nの「カウンタ値×ID」の計算結果を加算する。この加算結果が合計値である。加算器32は、最新の合計値を減算器33に供給する。
【0048】
以降の処理、すなわち、減算器33、減算器34、及び、比較器35による処理は図4と同様なので説明を省略する。
【0049】
図5と図4を比較すると、図5ではn個の乗算器1〜nが不要なので、カウンタ履歴部17の回路規模を小さくできる。したがって、コア数が多く、乗算器1〜nを集約できないような場合は、図5の態様の方が有効である。
【0050】
〔カウンタ値などの遷移〕
図6は、カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。左図は正常時の遷移を、右図はコア2が暴走した際の遷移をそれぞれ示す。なお、各コア1〜nが「カウンタ値×ID」又は「カウンタ値」のどちらを送信するかは、カウンタ値の遷移に影響しない。
【0051】
時刻t0〜t4毎にカウンタ値、積算値、合計値、第1差、第2差が図示されている。時刻t0〜t4はタイマ41が各コア1〜nに周期的に割込みする間隔(例えば、数ミリ秒)の経過を表す。カウンタ値「1,2,3,4,5」は時刻が経過する毎に1つずつ大きくなっている。カウンタ値は1つしかないが、実際には各コア1〜nが周期的な割込みで同期するので、各アイドルタスクがそれぞれカウンタ値をカウントしている。
【0052】
コア1又は乗算器1は、「ID:1×カウンタ値」を周期的に計算するので、計算結果は「1、2,3,4,5」となる。
【0053】
コア2又は乗算器2は、「ID:2×カウンタ値」を周期的に計算するので、計算結果は「2、4,6,8,10」となる。
【0054】
コア3又は乗算器3は、「ID:3×カウンタ値」を周期的に計算するので、計算結果は「3、6,9,12,15」となる。
【0055】
また、合計値は、時刻t0〜t4毎の積算値の合計なので、「6、12,18,24,30」のように“6”ずつ増える等差級数(初項6、公差6)となる。したがって、第1差は、公差“6”が常に現れる「6,6,6,6,6」となる。このため、第2差は常に“0”となるが、時刻t0では演算対象の第1差がないので算出しないものとする。したがって、「−,0,0,0,0」となる。
【0056】
このように、コアが暴走しなければ、第1差が常に公差の“6”となるので、第2差は“0”となり、カウンタ履歴部17はコアが暴走していないことを確認できる。
【0057】
次に、コア1〜nのいずれかが暴走した場合について説明する。ここではコア2が時刻t2〜t3の間に暴走したものとする。コア1,3のカウンタ値等は図6の左図にて説明したとおりである。これに対し、コア2は暴走したため、アイドルタスクがカウンタ値のカウントアップをできず、コア2のカウンタ値は「1,2,3,3,3」となる(不図示)。また、コア2が暴走すると、カウンタ履歴部17にカウンタ値(又は、ID:2×カウンタ値)を通知することもできない。したがって、コア2の暴走後は、時刻の経過に関わりなく加算器32に“6”が供給される。
【0058】
このため、合計値は「6、12,18,22,26」となり、時刻t3以降の公差が4となる。公差が“6”から“4”に減少するのは、コア2の「ID:2×カウンタ値」が更新されないためである。
【0059】
時刻t3で合計値が減少したため、時刻t3、t4の第1差も小さくなり「6,6,6,4,4」となる。この結果、第2差は「−,0,0,2,0」となる。コア2が暴走した直後の時刻t3でのみ第2差に“2”が現れる。この“2”は、コア2のID(=2)に他ならない。
【0060】
したがって、カウンタ履歴部17は、第2差が“0”以外となった時刻によりコアの暴走タイミングを特定でき、第2差の値により暴走したコアを特定することができる。カウンタ履歴部17は、第2差の値をコアID公開用レジスタ39に記憶するので、他の暴走していないコア1,3が暴走したコア2を検知することができる。
【0061】
図7は、コア1〜nが4つの場合のカウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。左図は正常時の遷移を、右図はコア4が暴走した際の遷移をそれぞれ示す。
【0062】
コア1〜nが暴走しない場合の遷移は図6の左図と同様なので簡単に説明する。
合計値は、「10,20,30,40,50」のように“10”ずつ増える等差級数(初項10、公差10)となる。したがって、第1差には公差“10”が常に現れる「10,10,10,10,10」となる。このため、第2差は「−,0,0,0,0」となる。
【0063】
次に、コア4が時刻t1〜t2の間に暴走したものとする。コア1〜3のカウンタ値等は図7の左図にて説明したとおりである。これに対し、コア4は暴走したためアイドルタスクがカウンタ値をカウントアップできず、コア4のカウンタ値は「1,2,2,2,2」となる(不図示)。また、コア4が暴走すると、カウンタ履歴部17にカウンタ値(又は、ID=4×カウンタ値)を通知することもできない。したがって、加算器32には時刻の経過に関わりなく“8”が供給される。
【0064】
このため、合計値は「10、20,26,32,38」となり、時刻t2以降の公差が6となる。公差が“10”から“6”に減少するのは、コア4の積算値が更新されないためである。
【0065】
時刻t2で合計値が減少したため、時刻t2、t3、t4の第1差も小さくなり「10,10,6、6,6」となる。この結果、第2差は「−,0,4,0,0」となる。コア4が暴走した直後の時刻t2でのみ第2差に“4”が現れる。この“4”はコア4のID(=4)に他ならない。したがって、コアの数に関係なく、暴走したコア及びそのタイミングを特定できることが分かる。
【0066】
図8は、IDが不連続の場合の、カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。左図は正常時の遷移を、右図はコア2が暴走した際の遷移をそれぞれ示す。正常時の場合の遷移については説明を省略する。
【0067】
図ではコア1〜3のIDがそれぞれ6、11,101となっている。コア2が時刻t2〜t3の間に暴走した場合、コア2は暴走したためカウンタ値のカウントアップができず、コア2のカウンタ値は「11,22,33,33,33」となる。したがって、加算器32には時刻の経過に関わりなく“33”が供給される。
【0068】
このため、合計値は「118、236,354,461,568」となり、時刻t3以降の公差が“107”となる。公差が“118”から“107”に減少するのは、コア2の積算値が更新されないためである。
【0069】
時刻t3で合計値が減少したため、時刻t3、t4の第1差も小さくなり「118,118,118、107,107」となる。この結果、第2差は「−,0,0,11,0」となる。コア2が暴走した直後の時刻t2でのみ第2差に“11”が現れる。この“11”はコア2のID=11に他ならない。したがって、コア1〜nに付与されるIDが一意であればそのIDの値に関係なく、暴走したコア及びそのタイミングを特定できることが分かる。
【0070】
図9は、複数のコアが同時に暴走した場合の、カウンタ値、積算値、合計値、第1差、第2差の遷移の一例を説明する図である。図9では左図と右図のいずれもコア1,2が暴走した場合の遷移を示している。
【0071】
左図ではコア1〜3のIDはそれぞれID=1,2,3である。時刻t3〜t4の間に、コア1,2が共に暴走したとする。これまで説明したように、コアが暴走することで暴走したコアのIDが第2差に表れるが、複数のコアが同時に暴走した場合は暴走した複数のコアのIDの合計が第2差に表れる。このため、時刻t3の第2差は“3”となっている。
【0072】
しかし、コア3のIDが“3”であるため、コア3はコア3自身が暴走したと誤検知する可能性がある。このような誤検知は、開発者等がコア1〜nのIDを調整することで回避できる。
【0073】
図9の右図では、コア1〜3のIDをそれぞれID=1,2,4とした。同様に、時刻t3〜t4の間に、コア1,2が共に暴走したとすると、時刻t3の第2差は“3”となる。IDが“3”となるコアは存在しないため、コア3はIDの合計が“3”となる2つのコア(コア1,2)が暴走したと検知することができる。IDの合計が“3”となるIDの組み合わせは“1”と“2”しかない。よって、コア3は、コア1,2が暴走したと検知することができる。
【0074】
同様に、同時に暴走した複数のコアを特定することができる。
・コア1と3が暴走した場合、第2差は“5”となるが、ID=5のコアはなく、IDの合計が“5”となるIDの組み合わせは“1”と“4”しかない。よって、コア2は、コア1,3が暴走したと検知することができる。
・コア2と3が暴走した場合、第2差は“6”となるが、ID=6のコアはなく、IDの合計が“6”となるIDの組み合わせは“2”と“4”しかない。よって、コア1はコア2、3が暴走したことを検知できる。
【0075】
このように、コア1〜nのIDを適切に設定しておくことで複数のコアの暴走にも対応することができる。具体的には、任意の2組のコアのIDの合計が、他のコアのIDと一致しないように、開発者等が各コア1〜nのIDを設定する。3つ以上のコアが同時に暴走した場合についても、任意の3組のコアのIDの合計が、他のコアのIDと一致しないように、各コアのIDを設定すればよい。
【0076】
なお、カウンタ値は1つずつインクリメントされるので、第2差にIDが現れるが、カウンタ値は2つずつインクリメントされてもよい。この場合、第2差に暴走したコアのID×2が現れる。よって、各コア1〜nは第2差を“2”で除すれば、暴走したコアのIDが得られる。このように、インクリメント値が一定でかつ既知であれば、カウンタ値の1回のカウントアップ分は“1”でなくてもよい。
【0077】
〔マスター/スレーブの切り換え〕
マルチコアのマイコン100では、複数のコアのいずれか1つをマスターに、残りをスレーブに設定して、マスターがスレーブを監視するなどの構成を採ることがある。この場合、マスターが暴走すると、スレーブを監視するコアがなくなりコアの監視が行われない等の不都合が生じるおそれがある。
【0078】
一般には、各コア1〜nは次のようにしてマスターのコアを決定する。例えば、各コア1〜nは、起動時に他のコアのIDを参照して(交換して)、最も小さいコアがマスターを引き受ける。したがって、コアID=1のコア(コア1とする)があれば、ID=1のコア1がマスターを引き受ける。コア1はマスターのコアIDを記憶するレジスタに自己のIDを記憶すると共に、他のコア2〜nにマスターのコア1のID(=1)を通知する。各コア2〜nは、マスターであるコアのコアIDを記憶するレジスタにコア1のID=1を記憶する。
【0079】
コア1が暴走した場合、他のコア2〜nはコアID公開用レジスタ39を参照して、コア1が暴走したことを検知する。暴走したコア1は、電源が遮断されるか又はリセットされる。コア1がリセットされた場合、コア1も復帰すると考えられるが、一度、暴走したコアは再度、暴走するおそれがあるため、別のコア2〜nがマスターを引き受けることが好ましい。
【0080】
そこで、コア1の暴走を検知した他のコア2〜nは、レジスタに記憶しているマスターのコア1が暴走したので、他のコアのIDを参照して、次のマスターのコアを決定する。この場合、最も小さいIDを持つコア2がマスターを引き受ける。
【0081】
コア2はマスターのコアIDを記憶するレジスタに自己のIDを記憶すると共に、他のコア3〜nにID=2を通知する。各コ3〜nアは、マスターのコアのコアIDを記憶するレジスタにコア2のID=2を記憶する。
【0082】
このように、各コア1〜nが暴走したコアを特定できるので、暴走したコアがマスターであれば、他のコアが自律的にスレーブからマスターに切り替わることができる。
【0083】
なお、マスターになったコア2はマスターに必要なタスクを実行する。例えば、必要に応じてマイコン自体をリセットする処理、コアを切り離したり、起動させる処理、クロック周波数を設定する処理などを行うことができる。
【0084】
以上説明したように、本実施例のマイコン100は、コア毎に「カウンタ値×ID」を求め合計し、2回の減算を行うだけで、暴走したコアを特定することができる。アイドルタスクはカウントアップするだけか、カウントアップ後に整数の乗算を行うだけでよいのでソフト的な負荷が増大することもほとんどない。
【実施例2】
【0085】
実施例1では、コア1〜nがソフト的に少なくともカウンタ値をカウントアップしたが、本実施例ではカウンタ値のカウントアップをカウンタ履歴部17が行うマイコン100について説明する。
【0086】
〔カウンタ回路1〜nが同じだけカウントアップするカウンタ履歴部〕
図10は、カウンタ履歴部17の構成例の一例を示す図である。実施例1ではアイドルタスクがカウンタ値をカウントアップしたが、本実施例ではカウンタ履歴部17がカウントアップを行う。このため、図10のカウンタ履歴部17はカウンタ回路42(以下、区別する場合、カウンタ回路1〜nという)を有する。
【0087】
コア1〜nのアイドルタスクは、タイマによる周期的な割込みを利用して、定期的にカウンタ履歴部17に通知する。カウンタ履歴部17は通知元のコア1〜nを判別して、コア1〜nに対応したカウンタ回路1〜nにカウンタ値をカウントアップさせる。各カウンタ回路1〜nはそれぞれ同じだけ(例えば、1つずつ)カウンタ値をカウントアップする。コア1〜nのIDは、定期的な通知に含ませておく。したがって、アイドルタスクは、コアのIDの通知という簡単な処理を行うだけでよい。
【0088】
乗算器1〜nには、カウンタ回路1〜nから送出されたカウンタ値、及び、コア1〜nのID1〜nが供給される。乗算器1〜nは、各コアを識別するための処理として、コア毎にカウンタ値とコアのIDの乗算を行い、それぞれを加算器32に供給する。以降の処理は実施例1と同様であり、加算器32は乗算器1〜nから取得した「カウンタ値×ID」の合計値を算出する。減算器33は最も新しい合計値と前回の合計値の差である第1差を算出し、第1差記憶部37に記憶させる。減算器34は最も新しい第1差と前回の第1差の差である第2差を算出し、第2差記憶部38に記憶させる。
【0089】
コアが暴走した場合、該コアが実行するアイドルタスクはカウンタ履歴部17にコアのIDを通知できないので、該コアに対応したカウンタ回路40はカウントアップしない。すなわち、実施例1で暴走したコアがカウントアップしない場合と同様の状況が生じる。このため第2差には、コアが暴走したコアのIDが表れ、暴走していない他のコアはコアID公開用レジスタ39により暴走したコアを特定することができる。
【0090】
したがって、カウンタ履歴部17にコア1〜nに対応したカウンタ回路1〜nを配置することで、アイドルタスクは、従来のウォッチドッグタイマのリセットと同様の簡易な処理を行うだけよくなり、ソフトウェアのコスト増を抑制できる。
【0091】
〔カウンタ回路1〜nがそれぞれ異なる値をインクリメントするカウンタ履歴部〕
また、同様の構成において、乗算器31を省略することもできる。
図11はカウンタ履歴部17の構成例の一例を示す図である。図11では、各コアを識別するための処理を、カウンタ回路1〜nが行う。具体的には、カウンタ回路1〜nは、それぞれが互いに異なる値をカウントアップする。
【0092】
コア1〜nのアイドルタスクは、タイマによる周期的な割込みを利用して、定期的にカウンタ履歴部17に通知する。カウンタ履歴部17は通知元のコアを判別して、コアに対応したカウンタ回路にカウンタ値をカウントアップさせる。
【0093】
各カウンタ回路1〜nはそれぞれ、異なる値だけカウンタ値をカウントアップする。例えば、カウンタ回路1は“1”ずつカウントアップし、カウンタ回路2は“2”ずつカウントアップし、カウンタ回路nは“n”ずつカウントアップする。このようなカウントアップにより、「カウンタ値×ID」と同様、各コアを識別するための処理を実現できる。
【0094】
加算器32には、カウンタ回路1〜nから送出されたカウンタ値が供給される。加算器32は、カウンタ回路1〜nのカウンタ値を合計して、合計値を合計値記憶部36に記憶させる。
【0095】
以降の処理は実施例1と同様であり、減算器33は最も新しい合計値と前回の合計値の差である第1差を算出し、第1差記憶部37に記憶させる。減算器34は最も新しい第1差と前回の第1差の差である第2差を算出し、第2差記憶部38に記憶させる。
【0096】
コアが暴走した場合、該コアに対応したカウンタ回路はカウントアップしない。このため第2差には、暴走したコアに対応するカウンタ回路42のカウントアップ量が表れる。カウントアップ量はコア毎に固定(一意)なので、暴走していない他のコアは暴走したコアを特定することができる。
【0097】
したがって、アイドルタスクがカウントアップしなくても、カウンタ履歴部17がカウンタ回路42を有することで、暴走したコアを特定することができる。
【符号の説明】
【0098】
11 プロセッサ
17 カウンタ履歴部
30 プログラム
31 乗算器
32 加算器
33、34 減算器
35 比較器
36 合計値記憶部
37 第1差記憶部
38 第2差記憶部
39 コアID公開用レジスタ
40 コアIDレジスタ
41 タイマ
42 カウンタ回路
100 マイコン


【特許請求の範囲】
【請求項1】
複数のコアから共通の周期で通知を受け付けるコア監視装置であって、
コアから通知を受け付けた際、各コアに固有のコア識別数値をコア毎に生成するコア識別数値生成手段と、
複数のコアの前記コア識別数値を合計した合計値を算出する合計値算出手段と、
最後に算出された合計値を記憶する合計値記憶手段と、
前記合計値算出手段が算出した合計値と、前記合計値記憶手段に記憶された合計値との差である第一の差を算出する第一の差算出手段と、
最後に算出された第一の差を記憶する第一の差記憶手段と、
前記第一の差算出手段が算出した第一の差と、前記第一の差記憶手段に記憶された第一の差との差である第二の差を算出する第二の差算出手段と、
を有するコア監視装置。
【請求項2】
前記コア識別数値生成手段は、コア識別情報と共に、コアが周期的にカウントアップしたカウンタ値を取得し、コア識別情報及びカウンタ値を用いて前記コア識別数値を生成する、ことを特徴とする請求項1記載のコア監視装置。
【請求項3】
前記コア識別数値生成手段は、各コアが周期的にカウントアップしたカウンタ値とコア識別情報を用いて生成した前記コア識別数値を取得する、ことを特徴とする請求項1記載のコア監視装置。
【請求項4】
前記コア識別数値生成手段は、コア毎に周期的に通知されるコア識別情報の通知回数をコア毎にカウントするカウント回路を有し、
カウント回路のカウンタ値とコア識別情報からコア毎の前記コア識別数値を生成する、
ことを特徴とする請求項1記載のコア監視装置。
【請求項5】
前記コア識別数値は、カウンタ値とコア識別情報を乗算することで得られた乗算値である、ことを特徴とする請求項2〜4いずれか1記載のコア監視装置。
【請求項6】
前記コア識別数値生成手段は、コア識別情報の周期的な通知回数を、コア毎に異なる増大分に変換してカウントするカウント回路であり、該カウント回路のカウンタ値を各コアの前記コア識別数値とする、ことを特徴とする請求項1記載のコア監視装置。
【請求項7】
前記第二の差がゼロか否かを判定し、ゼロでない場合に、前記第二の差を公開する第二の差公開手段を有する、ことを特徴とする請求項1〜6いずれか1項記載のコア監視装置。
【請求項8】
請求項1〜7いずれか1項記載のコア監視装置と、
複数のコアを有するプロセッサと、
コアが実行するプログラムの記憶手段と、
を有する情報処理装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2013−84218(P2013−84218A)
【公開日】平成25年5月9日(2013.5.9)
【国際特許分類】
【出願番号】特願2011−225171(P2011−225171)
【出願日】平成23年10月12日(2011.10.12)
【出願人】(000003207)トヨタ自動車株式会社 (59,920)
【Fターム(参考)】