JP2018124856A - 電子制御装置 - Google Patents

電子制御装置 Download PDF

Info

Publication number
JP2018124856A
JP2018124856A JP2017017448A JP2017017448A JP2018124856A JP 2018124856 A JP2018124856 A JP 2018124856A JP 2017017448 A JP2017017448 A JP 2017017448A JP 2017017448 A JP2017017448 A JP 2017017448A JP 2018124856 A JP2018124856 A JP 2018124856A
Authority
JP
Japan
Prior art keywords
core
value
cores
bus
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017017448A
Other languages
English (en)
Other versions
JP6729430B2 (ja
Inventor
翔 加藤
Sho Kato
翔 加藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Denso Corp filed Critical Denso Corp
Priority to JP2017017448A priority Critical patent/JP6729430B2/ja
Publication of JP2018124856A publication Critical patent/JP2018124856A/ja
Application granted granted Critical
Publication of JP6729430B2 publication Critical patent/JP6729430B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】車両の状態に応じてバスに掛かる負荷が変化することに起因して発生する処理への影響を必要最小限に抑制するとともに、処理効率の低下を抑制する。【解決手段】ECU1は、コア11〜14とRAM16とバス17とスタック領域31〜34を備える。ECU1は、コア11〜14のそれぞれについて、スタック領域31〜34に登録されていているタスクによりバス17を介してRAM16へアクセスするときにバス17に掛かるバス負荷の度合いを予測したバス負荷予測値を算出する。ECU1は、コア11〜14のそれぞれについて、車両の状態に基づいて、バス負荷の許容値を示す閾値を算出する。ECU1は、バス負荷予測値が閾値を超えないように、スタック領域31〜34に登録されているタスクをスタック領域31〜34から削除する。【選択図】図1

Description

本開示は、複数のコアを備える電子制御装置に関する。
特許文献1には、複数のコアを有するマルチコアプロセッサとメインメモリとがバスで接続された装置において、複数のタスクを複数のコアで並列に処理する場合に、複数タスクのメモリバス帯域負荷レベルの合計値が閾値以下となるように、優先度が高いタスクから順にコアに割り当てる技術が記載されている。
特開2016−91489号公報
しかし、特許文献1に記載の技術では、バス負荷が固定の閾値以下になるように各コアにタスクを割り当てているため、車両制御のように各コアが別々の制御を行っており車両の運転状態に応じてバスに掛かる負荷が変わる場合に適切に対応できず、処理遅延などが発生してしまう恐れがあった。
本開示は、車両の状態に応じてバスに掛かる負荷が変化することに起因して発生する処理への影響を必要最小限に抑制するとともに、電子制御装置全体としての処理効率の低下を抑制することを目的とする。
本開示の一態様は、車両を制御する電子制御装置(1)であって、複数のコア(11,12,13,14)と、共有メモリ(16)と、バス(17)と、スタック領域(31,32,33,34)と、負荷予測部(S330〜S410)と、閾値算出部(S510〜S570)と、タスク削除部(S610〜S640,S720〜S750)とを備える。
共有メモリは、複数のコアのそれぞれがアクセス可能である。バスは、複数のコアと共有メモリとの間をデータの入出力が可能となるように接続する。スタック領域は、複数のコアのそれぞれに対応して設けられ、対応するコアが実行する1つ又は複数のタスクが登録される。
負荷予測部は、複数のコアのそれぞれについて、スタック領域に登録されていているタスクによりバスを介して共有メモリへアクセスするときにバスに掛かるバス負荷の度合いを予測したバス負荷予測値を算出するように構成される。
閾値算出部は、複数のコアのそれぞれについて、車両の状態に基づいて、バス負荷の許容値を示すバス負荷閾値を算出するように構成される。
タスク削除部は、複数のコアのそれぞれについて、バス負荷予測値がバス負荷閾値を超えないように、コアに対応したスタック領域に登録されているタスクをスタック領域から削除するように構成される。
このように構成された本開示の電子制御装置は、車両の状態に基づいてバス負荷閾値を算出するため、車両の状態に応じてバス負荷閾値を変更することができる。
例えば、複数のコアのうちの1つのコアを第1コアとし、第1コアとは異なる1つのコアを第2コアとする。そして、車両の状態に応じて、第1コアおよび第2コアが共有メモリへアクセスする頻度は変化する。
第1コアと第2コアの両方で共有メモリへアクセスする頻度が多い場合には、第1コアと第2コアの両方で共有メモリへアクセスすることができるように、第1コアと第2コアとの両方で、共有メモリへのアクセスを制限する必要がある。一方、第1コアで共有メモリへアクセスする頻度が多く、第2コアで共有メモリへアクセスする頻度が少ない場合には、第1コアで共有メモリへのアクセスを制限しなくても、第2コアにおけるタスク処理に影響を及ぼさない場合もある。逆に、第1コアで共有メモリへのアクセスを制限すると、電子制御装置の処理効率を無駄に低下させてしまう恐れがある。
これに対し、本開示の電子制御装置は、第1コアで共有メモリへアクセスする頻度が多く、第2コアで共有メモリへアクセスする頻度が少ない場合には、第1コアのバス負荷閾値を大きくして、共有メモリへのアクセス制限を緩和することができる。これにより、第1コアによる共有メモリへのアクセスを無駄に制限することがなくなる。
このように本開示の電子制御装置は、車両の状態に応じてバスに掛かる負荷が変化することに起因して発生する処理への影響を必要最小限に抑制するとともに、電子制御装置全体としての処理効率の低下を抑制することができる。
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
ECU1の構成を示すブロック図である。 指令コア処理を示すフローチャートである。 トリガー記録処理を示すフローチャートである。 予測値計算処理を示すフローチャートである。 バス負荷期待値を算出する具体例を示す図である。 閾値最適化処理を示すフローチャートである。 補正値表、修正値表および基本閾値表を示す図である。 自コアタスク制御処理を示すフローチャートである。 他コアタスク制御処理を示すフローチャートである。 コア11〜14の動作の具体例を示すシーケンス図である。
以下に本開示の実施形態を図面とともに説明する。
本実施形態の電子制御装置1(以下、ECU1)は、車両に搭載され、図1に示すように、マイクロコンピュータ2(以下、マイコン2)を備える。ECUは、Electronic Control Unitの略である。
マイコン2は、コア11,12,13,14、ROM15、RAM16及びこれらの構成を接続するバス17などから構成され、ROM15に記憶されたプログラムに基づいて、車両を制御するための各種制御処理を実行する。マイクロコンピュータの各種機能は、コア11,12,13,14が非遷移的実体的記録媒体に格納されたプログラムを実行することにより実現される。この例では、ROM15が、プログラムを格納した非遷移的実体的記録媒体に該当する。また、このプログラムの実行により、プログラムに対応する方法が実行される。なお、コア11〜14が実行する機能の一部または全部を、一つあるいは複数のIC等によりハードウェア的に構成してもよい。また、ECU1を構成するマイクロコンピュータの数は1つでも複数でもよい。
コア11は、車両のエンジンを制御するための各種制御処理を実行する。コア12は、車両のモータを制御するための各種制御処理を実行する。コア13は、CAN通信を制御するための各種制御処理を実行する。CANは、Controller Area Networkの略である。また、CANは登録商標である。コア14は、車両の電池を制御するための各種制御処理を実行する。
またマイコン2は、ローカルメモリ21,22,23,24を備える。ローカルメモリ21,22,23,24はそれぞれ、コア11,12,13,14に割り当てられたメモリである。すなわち、ローカルメモリ21は、コア11のみからアクセス可能に構成されている。同様に、ローカルメモリ22,23,24はそれぞれ、コア12,13,14のみからアクセス可能に構成されている。一方、RAM16は、コア11,12,13,14からアクセス可能に構成されている。
ローカルメモリ21,22,23,24には、それぞれコア11,12,13,14で実行予定のタスクを登録するスタック領域31,32,33,34が設けられている。
このように構成されたECU1において、マイコン2のコア11,12,13,14は、指令コア処理と、トリガー記録処理と、予測値計算処理と、他コアタスク制御処理を実行する。
まず、指令コア処理の手順を説明する。指令コア処理は、ECU1の動作中において繰り返し実行される処理である。
指令コア処理が実行されると、コア11〜14は、図2に示すように、まずS10にて、予め設定されているバス負荷予測値演算イベント(以下、演算イベント)が発生したか否かを判断する。演算イベントとは、バス負荷が高くなることが予測される現象である。なお、「バス負荷が高い」とは、或るコアがバス17を使用しているために他のコアがバス17を長期間使用できずに待機している状態をいう。或るコアがバス17を占有すると他のコアがバス17にアクセスすることができずに、他のコアにおいて処理遅延またはタスク抜けが発生する。
「処理遅延」とは、各コアのスタック領域にタスクが登録された後に、登録されたタスクの少なくとも一部の処理が遅れる異常である。「タスク抜け」とは、上記スタック領域に登録されたタスクの少なくとも一部が実行されない異常である。
演算イベントとしては、例えば、各コアで実行予定のタスクを登録するスタック領域の使用率が予め設定された一定値を超えること、バス17を長期占有する関数として予め設定された長期占有関数を含むタスクがスタック領域に登録されること等が挙げられる。
なお、関数がバス17を長期占有するか否かは、関数を構成する複数のアセンブラコードのうち、RAM16に対して読み込み又は書き込みを行うアセンブラコードの処理時間の理論値に基づいて判断される。
S10にて、演算イベントが発生していない場合には、S10の処理を繰り返すことにより、演算イベントが発生するまで待機する。そして、演算イベントが発生すると、S20にて、バス負荷予測値計算依頼(以下、計算依頼)を自身のコア以外のコア(以下、他コア)へ送信する。例えば、コア12が実行している指令コア処理では、コア11,13,14へ計算依頼を送信する。
そしてS30にて、自身のコア(以下、自コア)のバス負荷予測値の計算開始を指示する計算開始フラグをセットする。計算開始フラグは、ローカルメモリ21,22,23,24のそれぞれに設けられている。S30では、自コアに割り当てられているローカルメモリに設けられた計算開始フラグ(以下、自コアの計算開始フラグ)をセットする。
次にS40にて、他コアからバス負荷計算完了通知(以下、完了通知)を受信したか否かを判断する。ここで、他コアから完了通知を受信していない場合には、S90に移行する。一方、他コアから完了通知を受信した場合には、S50にて、受信した完了通知に対応するコアのバス負荷計算完了フラグ(以下、完了フラグ)をセットする。なお、ローカルメモリ21には、コア11,12,13,14の完了フラグが設けられている。同様に、ローカルメモリ22,23,24には、コア11,12,13,14の完了フラグが設けられている。S50では、例えば、コア12から完了通知を受信した場合には、コア12の完了フラグをセットする。
さらにS60にて、完了通知とともに送信されたバス負荷期待値を、完了通知の送信元となるコアを示す送信元情報と対応付けて、自コアに割り当てられているローカルメモリ(以下、自コアのローカルメモリ)に記録する。そしてS70にて、後述する補正トリガー情報を他コアから受信したか否かを判断する。ここで、他コアから補正トリガー情報を受信していない場合には、S90に移行する。一方、他コアから補正トリガー情報を受信した場合には、S80にて、受信した補正トリガー情報を、補正トリガー情報の送信元となるコアを示す送信元情報と対応付けて、自コアのローカルメモリに記録し、S60に移行する。
そしてS90に移行すると、セットされた完了フラグの数が全コア数(本実施形態では、4)に等しいか否かを判断する。すなわち、コア11,12,13,14の完了フラグがセットされた場合に、セットされた完了フラグの数が全コア数に等しいと判断する。
ここで、セットされた完了フラグの数が全コア数に等しくない場合には、S40に移行する。一方、セットされた完了フラグの数が全コア数に等しい場合には、S100にて、後述する閾値最適化処理を実行する。そして、閾値最適化処理が終了すると、S110にて、タスク制御依頼と、閾値最適化処理で算出された閾値とを他コアへ送信する。
次にS120にて、後述する自コアタスク制御処理を実行する。そして、自コアタスク制御処理が終了すると、S130にて、全コア(すなわち、コア11〜14)の完了フラグをクリアする。さらにS140にて、自コアのローカルメモリに記録されているバス負荷期待値と補正トリガー情報を消去して、指令コア処理を一旦終了する。
次に、トリガー記録処理の手順を説明する。トリガー記録処理は、ECU1の動作中において繰り返し実行される処理である。
トリガー記録処理が実行されると、コア11〜14は、図3に示すように、まずS210にて、自コアの補正値最適化トリガーが発生したか否かを判断する。本実施形態では、補正値最適化トリガーは、「タスク抜け」と「処理遅延」である。
なお、コア11,12,13,14はそれぞれ、ROM15に記憶されているOSプログラムを実行することにより、リアルタイムオペレーティングシステム(以下、RTOS)を動作させる。RTOSは、タスクの実行を要求するタスク処理要求が発生すると、このタスク処理要求に対応するタスクに予め設定されたタスク優先度に基づき、タスク優先度の高いタスクを優先して実行するようにタスクの実行順を決定するスケジューリングを行う。また、RTOSは、自コアの「タスク抜け」及び「処理遅延」等を検出する。
すなわち、S210では、RTOSが「タスク抜け」または「処理遅延」を検出した場合に、自コアの補正値最適化トリガーが発生したと判断する。
S210で、自コアの補正値最適化トリガーが発生していないと判断した場合には、トリガー記録処理を一旦終了する。一方、自コアの補正値最適化トリガーが発生したと判断した場合には、S220にて、補正値最適化トリガーの種類と、現時点における自コアの運転状態とを、補正トリガー情報として、自コアのローカルメモリに記録し、トリガー記録処理を一旦終了する。
なお、補正値最適化トリガーの種類は、「タスク抜け」および「処理遅延」の何れか一方である。また、自コアの運転状態とは、自コアが制御する制御対象の状態である。例えば、コア11の制御対象はエンジンである。そして、エンジンの状態として、「エンジン高回転」、「エンジン中回転」および「エンジン低回転」の3種類が予め設定されている。「エンジン高回転」は、エンジン回転数が4001[rpm]以上となっている状態である。「エンジン中回転」は、エンジン回転数が2000[rpm]以上であり且つ4000[rpm]以下となっている状態である。「エンジン低回転」は、エンジン回転数が1999[rpm]以下となっている状態である。
また、コア14の制御対象は電池である。そして、電池の状態として、「充電状態」、「使用状態」および「未使用状態」の3種類が予め設定されている。「充電状態」は、電池が充電されている状態である。「使用状態」は、電池が使用されている状態である。「未使用状態」は、電池が使用されていない状態である。
次に、予測値計算処理の手順を説明する。予測値計算処理は、ECU1の動作中において繰り返し実行される処理である。
予測値計算処理が実行されると、コア11〜14は、図4に示すように、まずS310にて、自コアの計算開始フラグがセットされているか否かを判断する。ここで、自コアの計算開始フラグがセットされている場合には、S330に移行する。一方、自コアの計算開始フラグがセットされていない場合には、S320にて、他コアから計算依頼を受信したか否かを判断する。ここで、他コアから計算依頼を受信していない場合には、S310に移行する。一方、他コアから計算依頼を受信した場合には、S330に移行する。
そしてS330に移行すると、自コアのローカルメモリに設けられたタスクカウンタ(以下、自コアのタスクカウンタ)をインクリメント(すなわち、1加算)する。さらにS340にて、自コアのローカルメモリに設けられた関数カウンタ(以下、自コアの関数カウンタ)をインクリメントする。なお、ローカルメモリ21,22,23,24には、タスクカウンタおよび関数カウンタが設けられている。
そしてS350にて、自コアのタスクカウンタの値をiとし、自コアの関数カウンタの値をjとして、自コアのスタック領域に登録されているタスクのうち、i番目に早く登録されたタスク(以下、i番目のタスク)においてj番目に早く呼ばれる関数(以下、j番目の関数)のバス負荷期待値を、自コアのローカルメモリから取得する。複数の関数のバス負荷期待値は、ローカルメモリ21,22,23,24のそれぞれに記憶されている。関数のバス負荷期待値は、関数がバスアクセスする時間を示している。関数のバス負荷期待値は、関数を構成するアセンブラコードのストア命令、ロード命令、RAM16への読み込み及び書き込み、バス17に接続されているペリフェラルへのアクセス等に必要な時間等により予め算出される。
次にS360にて、自コアのローカルメモリに設けられた変数であるバス負荷予測値PVに格納されている値と、S350で取得した値とを加算した加算値を、バス負荷予測値PVに格納する。バス負荷予測値PVは、ローカルメモリ21,22,23,24のそれぞれに設けられている。
そしてS370にて、i番目のタスクで呼ばれる全ての関数でバス負荷期待値を取得したか否かを判断する。ここで、全ての関数でバス負荷期待値を取得していない場合には、S340に移行する。一方、全ての関数でバス負荷期待値を取得した場合には、S380にて、自コアの関数カウンタをリセット(すなわち、0に設定)する。
さらにS390にて、自コアのスタック領域に登録されている全てのタスクでバス負荷期待値を取得したか否かを判断する。ここで、全てのタスクでバス負荷期待値を取得していない場合には、S330に移行する。一方、全てのタスクでバス負荷期待値を取得した場合には、S400にて、自コアのタスクカウンタをリセットする。
そしてS410にて、バス負荷予測値を補正する。具体的には、バス負荷予測値PVに格納されている値を、スタック領域に登録されているタスクの数で除算した除算値を、バス負荷予測値PVに格納する。
次にS420にて、他コアから計算依頼を受信したことによりS330〜S410の処理が実行されたか否かを判断する。すなわち、他コアから計算依頼を受信したとS320で判断された場合に、S420で、他コアから計算依頼を受信したことによりS330〜S410の処理が実行されたと判断される。
ここで、他コアから計算依頼を受信したことによりS330〜S410の処理が実行されたと判断された場合には、S430にて、上記の完了通知と、バス負荷予測値と、上記の補正トリガー情報とを、計算依頼の送信元となる他コアへ送信する。なお、他コアへ送信されるバス負荷予測値は、バス負荷予測値PVに格納されている値である。また、他コアへ送信される補正トリガー情報は、自コアのローカルメモリに記録されている補正トリガー情報のうち、他コアへ送信されていないものであり且つ直近に記録されたものである。またS430では、他コアへ送信されていない補正トリガー情報が存在しない場合には、補正トリガー情報の送信を行わない。そして、S430の処理が終了すると、予測値計算処理を一旦終了する。
一方、他コアから計算依頼を受信したことによりS330〜S410の処理が実行されたのではないと判断された場合には、S440にて、自コアの完了フラグをセットする。さらにS460にて、計算開始フラグをクリアして、予測値計算処理を一旦終了する。
ここで、バス負荷期待値を算出する具体例を説明する。図5に示すように、コア14のスタック領域34にタスク1とタスク2が登録されているとする。また、タスク1では関数A、関数Bおよび関数Zが呼ばれ、タスク2では関数Cが呼ばれるとする。また、ローカルメモリ24には、関数A,B,C,・・・・,Zのバス負荷期待値を示すバス負荷期待値表が記憶されているとする。
まず、1番目のタスクであるタスク1において、1番目の関数である関数Aのバス負荷期待値を、バス負荷期待値表から取得する。関数Aのバス負荷期待値は11μsであるため、バス負荷予測値PVには「11」が格納される。
また、1番目のタスクであるタスク1において、2番目の関数である関数Bのバス負荷期待値を、バス負荷期待値表から取得する。関数Bのバス負荷期待値は15μsであるため、バス負荷予測値PVには、「11」と「15」の加算値として「26」が格納される。
さらに、1番目のタスクであるタスク1において、3番目の関数である関数Zのバス負荷期待値を、バス負荷期待値表から取得する。関数Zのバス負荷期待値は10μsであるため、バス負荷予測値PVには、「26」と「10」の加算値として「36」が格納される。
次に、2番目のタスクであるタスク2において、1番目の関数である関数Cのバス負荷期待値を、バス負荷期待値表から取得する。関数Cのバス負荷期待値は30μsであるため、バス負荷予測値PVには、「36」と「30」の加算値として「66」が格納される。これにより、全てのタスクでバス負荷期待値を取得したため、バス負荷期待値の計算が完了する。
さらに、スタック領域34に登録されているタスクの数は「2」であるため、「66」を「2」で除算した除算値として「33」がバス負荷予測値PVに格納される。
次に、S100で実行される閾値最適化処理の手順を説明する。
閾値最適化処理が実行されると、コア11〜14は、図6に示すように、まずS510にて、自コアのローカルメモリに設けられたコアカウンタ(以下、自コアのコアカウンタ)をインクリメントする。なお、ローカルメモリ21,22,23,24には、コアカウンタが設けられている。
そしてS520にて、自コアのコアカウンタの値をkとし、k番目のコアの補正トリガー情報が自コアのローカルメモリに記録されているか否かを判断する。なお、コア11,12,13,14はそれぞれ、1,2,3,4番目のコアである。
ここで、k番目のコアの補正トリガー情報が記録されていない場合には、S560に移行する。一方、k番目のコアの補正トリガー情報が記録されている場合には、k番目のコアの補正トリガー情報を自コアのローカルメモリから取得する。
そしてS540にて、S530で取得した補正トリガー情報と、自コアのローカルメモリに記憶されているk番目のコアの補正値表と、自コアのローカルメモリに記憶されている修正値表とに基づいて、後述する閾値を補正するための補正値を修正する。なお、自コアのローカルメモリには、コア11,12,13,14の上記の補正値表と、上記の修正値表が記憶されている。
補正値表は、対応するコアの運転状態と補正値との対応関係を示す。修正値表は、補正値最適化トリガーの種類と修正値との対応関係を示す。図7では、コア11,14の補正値表と、修正値表とを示している。
S540では、具体的には、まず、取得した補正トリガー情報に含まれている補正値最適化トリガーの種類を確認する。そして、確認した補正値最適化トリガーの種類に対応する修正値を修正値表から抽出する。次に、取得した補正トリガー情報に含まれている運転状態を確認する。そして、k番目のコアの補正値表において、確認した運転状態に対応する補正値と、修正値表から抽出した修正値との加算値を、新たな補正値として、確認した運転状態に対応する補正値を修正する。
ここで、コア14の補正値表における補正値を修正する具体例を説明する。まず、コア14の補正トリガー情報に含まれている補正値最適化トリガーの種類を確認した結果、補正値最適化トリガーの種類は「処理遅延」であったとする。図7に示すように、修正値表において、「処理遅延」に対応する修正値は「−1」である。このため、修正値表から修正値として「−1」が抽出される。次に、コア14の補正トリガー情報に含まれている運転状態を確認した結果、運転状態は「充電状態」であったとする。コア14の補正値表において、「充電状態」に対応する補正値は「−5」である。このため、コア14の補正値表において、補正値の「−5」と、修正値の「−1」との加算値である「−6」を、「充電状態」に対応する補正値として、コア14の補正値表の補正値を修正する。
そして、S540の処理が終了すると、図6に示すように、S550において、S540で修正された補正値と、自コアのローカルメモリに記憶されている基本閾値表とに基づいて、k番目のコアの閾値を算出する。なお、コア11,12,13,14のローカルメモリには、上記の基本閾値表が記憶されている。基本閾値表は、図7に示すように、コアと基本閾値との対応関係を示す。
S550では、具体的には、まず、k番目のコアに対応する基本閾値を基本閾値表から抽出する。そして、基本閾値表から抽出した基本閾値と、S540で算出された補正値との加算値を、k番目のコアの閾値とする。
ここで、コア14の閾値を算出する具体例を説明する。まず、コア14に対応する基本閾値を基本閾値表から抽出する。図7に示すように、基本閾値表において、4番目のコアに対応する基本閾値は「35」である。このため、基本閾値表から抽出した基本閾値の「35」と、S540で算出された補正値の「−6」との加算値である「29」が、コア14の閾値として算出される。したがって、コア14の閾値は29[μs/タスク]となる。
そして、S550の処理が終了すると、図6に示すように、S560において、全てのコアで閾値が算出されたか否かを判断する。本実施形態では、具体的には、自コアのコアカウンタの値が「4」である場合に、全てのコアで閾値が算出されたと判断する。
ここで、全てのコアで閾値が算出されていない場合には、S510に移行する。一方、全てのコアで閾値が算出された場合には、S570にて、自コアのコアカウンタをリセットして、閾値最適化処理を終了する。
次に、S120で実行される自コアタスク制御処理の手順を説明する。
自コアタスク制御処理が実行されると、コア11〜14は、図8に示すように、まずS610にて、自コアのスタック領域に登録されているタスクの中から、最も優先度が低いタスクを選択する。なお、タスクには、「高優先度」、「中優先度」および「低優先度」のように優先度が設定されている。スタック領域に登録されているタスクは、優先度が高いタスクを優先して順次実行される。
そしてS620にて、S610で選択したタスクをスタック領域から削除する。さらにS630にて、バス負荷予測値を修正する。具体的には、バス負荷予測値PVに格納されている値から、S610で選択したタスクのバス負荷予測値を減算した減算値を、バス負荷予測値PVに格納する。
そしてS640にて、バス負荷予測値PVに格納されている値が、自コアの閾値を超えているか否かを判断する。ここで、バス負荷予測値PVに格納されている値が自コアの閾値を超えている場合には、S610に移行する。一方、バス負荷予測値PVに格納されている値が自コアの閾値以下である場合には、自コアタスク制御処理を終了する。
ここで、バス負荷予測値を修正する具体例を説明する。図5に示すように、コア14のスタック領域34にタスク1とタスク2が登録されているとする。また、タスク1は「高優先度」に、タスク2は「中優先度」に設定されているとする。このため、タスク1とタスク2のうち、タスク2がスタック領域34から削除される。そして、タスク2が削除される前のバス負荷予測値(すなわち、バス負荷予測値PVに格納されている値)は33[μs/タスク]であり、タスク2のバス負荷予測値は15[μs/タスク]である。このため、バス負荷予測値PVには、「33」から「15」を減算した減算値として「18」が格納される。
次に、他コアタスク制御処理の手順を説明する。他コアタスク制御処理は、ECU1の動作中において繰り返し実行される処理である。
他コアタスク制御処理が実行されると、コア11〜14は、図9に示すように、まずS710にて、他コアからタスク制御依頼を受信したか否かを判断する。ここで、タスク制御依頼を受信していない場合には、他コアタスク制御処理を一旦終了する。一方、タスク制御依頼を受信した場合には、S720にて、S610と同様にして、自コアのスタック領域に登録されているタスクの中から、最も優先度が低いタスクを選択する。
そしてS730にて、S720で選択したタスクをスタック領域から削除する。さらにS740にて、S630と同様にして、バス負荷予測値を修正する。
そしてS750にて、S640と同様にして、バス負荷予測値PVに格納されている値が、タスク制御依頼とともに受信された自コアの閾値を超えているか否かを判断する。ここで、バス負荷予測値PVに格納されている値が自コアの閾値を超えている場合には、S720に移行する。一方、バス負荷予測値PVに格納されている値が自コアの閾値以下である場合には、他コアタスク制御処理を一旦終了する。
次に、コア11〜14の動作の具体例を説明する。
図10に示すように、まず、コア11で演算イベントが発生することにより、コア11は、計算依頼をコア12,13,14へ送信する処理P11を実行する。矢印L1,L2,L3はそれぞれ、コア11がコア12,13,14へ計算依頼を送信することを示す。
コア11は、計算依頼を送信した後に、バス負荷期待値を計算する処理P12を実行する。処理P12では、バス負荷期待値の計算が完了すると、コア11の完了フラグをセットする。
また、計算依頼を受信したコア12,13,14はそれぞれ、バス負荷期待値を計算する処理P21,P31,P41を実行する。処理P21,P31,P41では、バス負荷期待値の計算が完了すると、完了通知と、バス負荷予測値と、補正トリガー情報とをコア11へ送信する。矢印L11,L12,L13はそれぞれ、コア12,13,14がコア11へ完了通知等を送信することを示す。
コア11は、コア12,13,14から完了通知等を受信すると、それぞれコア12,13,14の完了フラグをセットする処理P13,P14,P15を実行する。処理P13,P14,P15では、さらに、完了通知とともに受信されたバス負荷期待値および補正トリガー情報をローカルメモリ21に記録する。
全コアにおいて完了フラグがセットされると、コア11は、コア11,12,13,14それぞれの閾値を算出する処理P16を実行する。処理P16では、全コアにおいて閾値の算出が完了すると、タスク制御依頼と、算出された閾値とを、コア12,13,14へ送信する。矢印L21,L22,L23はそれぞれ、コア11がコア12,13,14へタスク制御依頼等を送信することを示す。
コア11は、タスク制御依頼等を送信した後に、コア11におけるバス負荷期待値が閾値を超えないようにタスクを制御する処理P17を実行する。
また、タスク制御依頼等を受信したコア12,13,14はそれぞれ、コア12,13,14におけるバス負荷期待値が閾値を超えないようにタスクを制御する処理P22,P32,P42を実行する。
またコア11は、処理P17が終了すると、コア11,12,13,14の完了フラグをクリアする処理P18を実行する。
このように構成されたECU1は、コア11,12,13,14と、RAM16と、バス17と、スタック領域31,32,33,34とを備える。
RAM16は、コア11,12,13,14のそれぞれがアクセス可能である。バス17は、コア11,12,13,14とRAM16との間をデータの入出力が可能となるように接続する。スタック領域31,32,33,34は、コア11,12,13,14のそれぞれに対応して設けられ、対応するコアが実行する1つ又は複数のタスクが登録される。
ECU1は、コア11,12,13,14のそれぞれについて、スタック領域31,32,33,34に登録されていているタスクによりバス17を介してRAM16へアクセスするときにバス17に掛かるバス負荷の度合いを予測したバス負荷予測値を算出する。
ECU1は、コア11,12,13,14のそれぞれについて、車両のエンジン、モータ、CAN通信および電池の状態に基づいて、バス負荷の許容値を示す閾値を算出する。
ECU1は、コア11,12,13,14のそれぞれについて、バス負荷予測値が閾値を超えないように、スタック領域31,32,33,34に登録されているタスクをスタック領域31,32,33,34から削除する。
このようにECU1は、車両の状態に基づいてバス負荷閾値を算出するため、車両の状態に応じてバス負荷閾値を変更することができる。
例えば、車両のエンジンおよび電池の状態に応じて、それぞれコア11およびコア14がRAM16へアクセスする頻度は変化する。
コア11とコア14の両方でRAM16へアクセスする頻度が多い場合には、コア11とコア14の両方でRAM16へアクセスすることができるように、コア11とコア14との両方で、RAM16へのアクセスを制限する必要がある。一方、コア11でRAM16へアクセスする頻度が多く、コア14でRAM16へアクセスする頻度が少ない場合には、コア11でRAM16へのアクセスを制限しなくても、コア14におけるタスク処理に影響を及ぼさない場合もある。逆に、コア11でRAM16へのアクセスを制限すると、ECU1の処理効率を無駄に低下させてしまう恐れがある。
これに対し、ECU1は、コア11でRAM16へアクセスする頻度が多く、第2コアでRAM16へアクセスする頻度が少ない場合には、コア11の閾値を大きくして、RAM16へのアクセス制限を緩和することができる。これにより、コア11によるRAM16へのアクセスを無駄に制限することがなくなる。
このようにECU1は、車両の状態に応じてバス17に掛かる負荷が変化することに起因して発生する処理への影響を必要最小限に抑制するとともに、ECU1全体としての処理効率の低下を抑制することができる。
また車両には、制御対象として、エンジン、モータ、CAN通信および電池が搭載され、コア11,12,13,14のそれぞれは、エンジン、モータ、CAN通信および電池を制御するためのタスクを実行するように構成される。そしてECU1は、コア11,12,13,14のそれぞれについて、エンジン、モータ、CAN通信および電池の状態に基づいて、閾値を算出する。これにより、ECU1は、エンジン、モータ、CAN通信および電池の状態に応じてバス17に掛かる負荷が変化することに起因して発生する処理への影響を必要最小限に抑制するとともに、ECU1全体としての処理効率の低下を抑制することができる。
またECU1は、「スタック領域の使用率が予め設定された一定値を超えること」と、「バス17を長期占有する関数として予め設定された長期占有関数を含むタスクがスタック領域に登録されること」のように、ソフトウェアによって実行される処理により判断されるものを、演算イベントとした。これらの演算イベントは、コア11,12,13,14がバス17をどの程度使用するかを明確に判断することができるため、バス負荷予測値の計算を開始するための精度のよいトリガーとすることができる。
またECU1は、バス負荷予測値が閾値を超えている場合に、スタック領域に登録されているタスクの中から、最も優先度が低いタスクを削除する。これにより、ECU1は、タスクが実行されなくなることに起因して車両に及ぼす影響を最小限に抑えることができる。
またECU1は、スタック領域に登録されているタスクで呼ばれる関数のバス負荷期待値を用いて、スタック領域に登録されている全タスクのバス負荷期待値を算出する。関数がバスアクセスする時間の理論値は、関数を構成するアセンブラコードから計算可能である。このため、バス負荷期待値を正確に算出することができる。
以上説明した実施形態において、ECU1は電子制御装置に相当し、RAM16は共有メモリに相当し、S330〜S410は負荷予測部としての処理に相当し、S510〜S570は閾値算出部としての処理に相当、S610〜S640,S720〜S750はタスク削除部としての処理に相当する。
また、閾値はバス負荷閾値に相当し、車両のエンジン、モータ、CAN通信および電池は制御対象に相当する。
以上、本開示の一実施形態について説明したが、本開示は上記実施形態に限定されるものではなく、種々変形して実施することができる。
[変形例1]
例えば上記実施形態では、演算イベントとして、「各コアで実行予定のタスクを登録するスタック領域の使用率が予め設定された一定値を超えること」であるものを示した。しかし、スタック領域の使用率の代わりに、スタック領域に登録されているタスクの数を用いてもよい。例えば、スタック領域に登録可能な全タスク数が8である場合において、スタック領域に登録されているタスクの数が6以上であることを演算イベントとするようにしてもよい。これにより、演算イベントが発生したか否かを簡便な方法で判断することができる。
[変形例2]
上記実施形態では、「スタック領域の使用率が予め設定された一定値を超えること」などのように、ソフトウェアによって実行される処理により判断されるものを、演算イベントとした。しかし、ドアの開閉、ライトのオン/オフ、カーナビ等のアクセサリ起動などのように、車両に搭載されたハードウェアの状態を、演算イベントとしてもよい。これにより、演算イベントが発生したか否かを、オンであるかオフであるかという簡便な方法で判断することができる。
[変形例3]
上記実施形態では、バス負荷予測値が閾値を超えている場合に、スタック領域に登録されているタスクの中から、最も優先度が低いタスクを削除するものを示した。しかし、最も優先度が低いタスクが2つ以上存在する場合には、タスクで呼ばれる関数の優先度が最も低いタスクを選択するようにするとよい。これにより、ECU1は、削除した場合に車両への影響が小さい方のタスクを選択することができる。
[変形例4]
上記実施形態では、演算イベントが発生したコアで閾値を算出する処理を実行するものを示した。しかし、計算資源に余裕があるコアで、閾値を算出する処理を実行させるようにしてもよい。これにより、演算イベントが発生したコアで、負荷が高くなってしまう事態の発生を抑制することができる。また、複数のコアが同性能でなく、高性能のコアと低性能のコアとを組み合わせた場合に、閾値を算出する処理を高性能のコアで実行させるようにしてもよい。
また、上記実施形態における1つの構成要素が有する機能を複数の構成要素に分担させたり、複数の構成要素が有する機能を1つの構成要素に発揮させたりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
上述したECU1の他、当該ECU1を構成要素とするシステム、当該ECU1としてコンピュータを機能させるためのプログラム、このプログラムを記録した媒体、車両制御方法など、種々の形態で本開示を実現することもできる。
1…ECU、2…マイコン、11,12,13,14…コア、16…RAM、17…バス、31,32,33,34…スタック領域

Claims (2)

  1. 車両を制御する電子制御装置(1)であって、
    複数のコア(11,12,13,14)と、
    複数の前記コアのそれぞれがアクセス可能な共有メモリ(16)と、
    複数の前記コアと前記共有メモリとの間をデータの入出力が可能となるように接続するバス(17)と、
    複数の前記コアのそれぞれに対応して設けられ、対応する前記コアが実行する1つ又は複数のタスクが登録されるスタック領域(31,32,33,34)と、
    複数の前記コアのそれぞれについて、前記スタック領域に登録されていている前記タスクにより前記バスを介して前記共有メモリへアクセスするときに前記バスに掛かるバス負荷の度合いを予測したバス負荷予測値を算出するように構成された負荷予測部(S330〜S410)と、
    複数の前記コアのそれぞれについて、前記車両の状態に基づいて、前記バス負荷の許容値を示すバス負荷閾値を算出するように構成された閾値算出部(S510〜S570)と、
    複数の前記コアのそれぞれについて、前記バス負荷予測値が前記バス負荷閾値を超えないように、前記コアに対応した前記スタック領域に登録されている前記タスクを前記スタック領域から削除するように構成されたタスク削除部(S610〜S640,S720〜S750)と
    を備える電子制御装置。
  2. 請求項1に記載の電子制御装置であって、
    前記車両には、複数の制御対象が搭載され、
    複数の前記コアのそれぞれは、互いに異なる前記制御対象を制御するための前記タスクを実行するように構成され、
    前記閾値算出部は、複数の前記コアのそれぞれについて、前記コアに対応する前記制御対象の状態を、前記車両の状態として、前記バス負荷閾値を算出する電子制御装置。
JP2017017448A 2017-02-02 2017-02-02 電子制御装置 Active JP6729430B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017017448A JP6729430B2 (ja) 2017-02-02 2017-02-02 電子制御装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017017448A JP6729430B2 (ja) 2017-02-02 2017-02-02 電子制御装置

Publications (2)

Publication Number Publication Date
JP2018124856A true JP2018124856A (ja) 2018-08-09
JP6729430B2 JP6729430B2 (ja) 2020-07-22

Family

ID=63109815

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017017448A Active JP6729430B2 (ja) 2017-02-02 2017-02-02 電子制御装置

Country Status (1)

Country Link
JP (1) JP6729430B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020203067A1 (ja) 2019-03-29 2020-10-08 ソニー株式会社 情報処理装置、情報処理方法、およびプログラム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010027062A (ja) * 2009-08-21 2010-02-04 Hitachi Ltd 分散制御システム
JP2016091489A (ja) * 2014-11-11 2016-05-23 コニカミノルタ株式会社 画像処理装置及び並列処理制御プログラム並びに並列処理制御方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010027062A (ja) * 2009-08-21 2010-02-04 Hitachi Ltd 分散制御システム
JP2016091489A (ja) * 2014-11-11 2016-05-23 コニカミノルタ株式会社 画像処理装置及び並列処理制御プログラム並びに並列処理制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020203067A1 (ja) 2019-03-29 2020-10-08 ソニー株式会社 情報処理装置、情報処理方法、およびプログラム

Also Published As

Publication number Publication date
JP6729430B2 (ja) 2020-07-22

Similar Documents

Publication Publication Date Title
JP4028674B2 (ja) 多重システム・クラスタ内のサーバの数を制御する方法及び装置
US8959515B2 (en) Task scheduling policy for limited memory systems
CN106557369B (zh) 一种多线程的管理方法及系统
WO2007077539A1 (en) Methods and system for interrupt distribution in a multiprocessor system
US20110107344A1 (en) Multi-core apparatus and load balancing method thereof
JP2011028559A (ja) 中継プログラムおよび電子制御装置
US11115232B2 (en) Method and device for operating a control unit
US10545890B2 (en) Information processing device, information processing method, and program
CN111104208A (zh) 进程调度管理方法、装置、计算机设备及存储介质
CN103329102A (zh) 多处理器系统
JP4985662B2 (ja) プログラム、及び制御装置
JP2005276097A (ja) 割り込み依頼プログラムおよびマイクロコンピュータ
CN106775975B (zh) 进程调度方法及装置
US8555285B2 (en) Executing a general-purpose operating system as a task under the control of a real-time operating system
JP6729430B2 (ja) 電子制御装置
JP2007328413A (ja) 負荷分散方法
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
US9618988B2 (en) Method and apparatus for managing a thermal budget of at least a part of a processing system
JP7204443B2 (ja) 車両制御装置およびプログラム実行方法
CN114268670A (zh) 基于时间触发的以太网异步消息处理系统及方法
EP0884682A2 (en) Cache memory management method for real time operating system
WO2019044226A1 (ja) アクセス制御装置
CN111831390B (zh) 服务器的资源管理方法、装置及服务器
US11520638B1 (en) Combined active and preinitialized resource management for rapid autoscaling
WO2024009656A1 (ja) 車両制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190409

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200310

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200424

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200602

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200615

R151 Written notification of patent or utility model registration

Ref document number: 6729430

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250