JP2010280356A - 車載システム、負荷分散方法 - Google Patents
車載システム、負荷分散方法 Download PDFInfo
- Publication number
- JP2010280356A JP2010280356A JP2009137421A JP2009137421A JP2010280356A JP 2010280356 A JP2010280356 A JP 2010280356A JP 2009137421 A JP2009137421 A JP 2009137421A JP 2009137421 A JP2009137421 A JP 2009137421A JP 2010280356 A JP2010280356 A JP 2010280356A
- Authority
- JP
- Japan
- Prior art keywords
- electronic control
- control unit
- load
- ecu
- thread
- 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.)
- Pending
Links
Images
Landscapes
- Small-Scale Networks (AREA)
Abstract
【課題】処理能力に余裕がある電子制御ユニットに効率的に負荷分散できる車載システム及び負荷分散方法を提供すること。
【解決手段】車載LAN26を介して接続された複数の電子制御ユニットを有する車載システム100において、各電子制御ユニットは、当該電子制御ユニットの余剰処理能力を測定する、ハードウェアで実装された測定手段21,22と、余剰処理能力を他の電子制御ユニットに通知する通知手段15、31と、他の電子制御ユニットから通知された余剰処理能力を各電子制御ユニットに対応づけて登録したテーブル25と、他の電子制御ユニットの余剰処理能力に基づき、他の電子制御ユニットに当該電子制御ユニットの負荷を分散する負荷分散手段34と、を有する、ことを特徴とする。
【選択図】図1
【解決手段】車載LAN26を介して接続された複数の電子制御ユニットを有する車載システム100において、各電子制御ユニットは、当該電子制御ユニットの余剰処理能力を測定する、ハードウェアで実装された測定手段21,22と、余剰処理能力を他の電子制御ユニットに通知する通知手段15、31と、他の電子制御ユニットから通知された余剰処理能力を各電子制御ユニットに対応づけて登録したテーブル25と、他の電子制御ユニットの余剰処理能力に基づき、他の電子制御ユニットに当該電子制御ユニットの負荷を分散する負荷分散手段34と、を有する、ことを特徴とする。
【選択図】図1
Description
本発明は、複数の電子制御ユニットが車載LANで接続された車載システム及び負荷分散方法に関し、特に、電子制御ユニット間で負荷の分散が可能な車載システム及び負荷分散方法に関する。
車両に搭載された複数の電子制御ユニットは互いに車載LANにより接続され、センサの検出信号や他の電子制御ユニットが処理したデータを共有することで、各電子制御ユニットに接続されたアクチューエータや車載装置の協調制御を実現している。そして、車載LANに接続されていることを利用して、その電子制御ユニットの本来の処理を他の電子制御ユニットに依頼することで、負荷を分散することが考えられている。
例えば、マルチコアCPUではCPUコアの処理能力とプロセスの処理時間に応じて、CPUコアにプロセスを割り当てる負荷分散技術が提案されている(例えば、特許文献1参照。)。また、CPUコア毎に待機状態のタスクの数を監視し、そのタスクを処理するCPUコアの数を調整することで負荷を分散する技術が提案されている(例えば、特許文献2参照。)。
しかしながら、特許文献1記載の負荷分散技術は、各CPUコアにどの程度の余裕があるかを考慮していないので、処理能力の高いCPUコアに処理時間の短いプロセスを分散しても、処理効率が向上するとは限らないという問題がある。また、特許文献2記載の負荷分散技術では、負荷の分散候補であるCPUコアがタスクを受けられるか否かを判定するが、3以上のCPUコア間の負荷の調整について考慮されていないという問題がある。すなわち、特許文献2記載の負荷分散技術のように、分散候補のCPUコアにタスクを受けられるか問い合わせる方法では、負荷に余裕のあるCPUコアにたどり着くまで総当たりで問い合わせる必要が生じてしまい、そのためのオーバヘッドが無視できなくなる。
また、比較的高性能なECUにはOSが搭載されることがあるが、タスクを実行しないアイドル状態では、OSがROMサムチェックなどの故障検出のためのアイドルタスクを実行することがあり、負荷に余裕のあるECUを検出すること自体が困難な場合もある。
本発明は、上記課題に鑑み、処理能力に余裕がある電子制御ユニットに効率的に負荷分散できる車載システム及び負荷分散方法を提供することを目的とする。
上記課題に鑑み、本発明は、車載LANを介して接続された複数の電子制御ユニットを有する車載システムにおいて、各電子制御ユニットは、当該電子制御ユニットの余剰処理能力を測定する、ハードウェアで実装された測定手段(例えば、MT−CTL21,SL−CNT22)と、余剰処理能力を他の電子制御ユニットに通知する通知手段(例えば、CANC14、カウント通知部31)と、他の電子制御ユニットから通知された余剰処理能力を各電子制御ユニットに対応づけて登録したテーブル(例えば、LB−TBL25)と、他の電子制御ユニットの余剰処理能力に基づき、他の電子制御ユニットに、当該電子制御ユニットの負荷を分散する負荷分散手段(例えば、負荷分散部34)と、を有する、ことを特徴とする。
上記課題に鑑み、処理能力に余裕がある電子制御ユニットに効率的に負荷分散できる車載システム及び負荷分散方法を提供することができる。
以下、本発明を実施するための最良の形態について、図面を参照しながら実施例を挙げて説明する。
図1は、負荷分散の手順を模式的に説明する図の一例である。4つのECU#A〜ECU#Dが車載LAN26を介して接続されている。ECU#A〜ECU#Dは余剰処理量をカウントするSL−CNT22A〜22D(ECU#Bは不図示)を有し、ECU#A〜ECU#DはSL−CNT22A〜22Dでカウントしたカウント値を同報的かつ定期的に他のECUに送信する。図1では、ECU#A、ECU#B及びECU#Dが、それぞれのカウント値を送信し、ECU#Bが受信する様子を示している。
ECU#Bは、ECU#A、ECU#B及びECU#Dから受信したカウント値をLB−TBL25Bに登録する。したがって、ECU#BはLB−TBL25Bを参照することで、どのECUの処理能力が余剰しているかを検出することができ、ECU#Bは処理能力が余剰している、換言すればカウント値が最も大きいECUに、負荷を分散させることができる。図1では、ECU#Aのカウント値が最も大きいので、ECU#BはECU#Aに負荷を分散する。
ECU#Bは、処理能力が余剰しているECU#Aに負荷を分散させることができるので、車載システム100全体として効率的な負荷分散が可能になる。また、各ECUの処理負荷のピークに合わせて各ECUの処理能力を決定する必要がなくなるので、トータルのECUコストを低減できる。
図2は、ECUに搭載されるマイコン50の概略ハードウェア構成図の一例を示す。マイコン50は、CPUコア12、ROM11、RAM13、DMAC(Direct Memory ACCESS Controller)14、CANC15(CAN Controller)、及び、GP-IO(General Purpose IO)16を有する。CPUコア12とROM11、及び、CPUコア12とRAM13、DMAC14、CANC15、GP−IO16はバスを介して接続されている。
ROM11は、EEPROMなど書き換え可能な不揮発メモリであり、CPUコア12が実行するプログラムを記憶している。RAM13は、CPUコア12がプログラムやデータを一時的に格納する作業メモリであり、本実施例では後述するLB−TBL(Load Baclance TaBle)25を記憶する。DMAC14は、CPUコア12を介することなくGP−IO16やCANC15からRAM13へ、RAM13からGP−IO16やCANC15へ、データをDMA転送する。CANC15は、他のECUとCAN(Controller Area Network)通信するためのコントローラであり、本実施形態ではSL−CNT22がカウントしたカウント値を送信し、また、負荷分散するために必要なデータを送信する。CANの他、FlexrayやLIN等を通信態様は問わない。例えば、CAN通信では、送受信する単位であるフレームのフォーマットが定められている。フレームには、データの内容を示すIDフィールド、データ長を示すDLCフィールド、データを格納するDATAフィールド等の各フィールドが定められている。GP−IO16は、入力又は出力インターフェイスであり、センサやアクチュエータ、スイッチ等が接続される。
CPUコア12は、IFU(Instraction Fetch Unit)17、PC(Program Counter)18、ID(Instraction Dispatcher)19、EXE(EXEcute Unit)23、REG(REGister)24、MT−CTL(Multi Thread ConTroller)21、及び、SL−CNT(Surplus Load Controller)22を有する。
IFU17は、PC18が指示するROM11のアドレスから命令を読み出す。図示するように、IFU17には複数のPC18が接続されている。これは、EXE23がマルチスレッドに対応しており1周期で複数の命令を実行することに対応したものである。したがって、IFU17はPC18の数だけ、ROM11から命令を読み出すことになる。CPUコア12が異なるスレッドを実行する場合、PC18が指示するアドレスも異なるが、同じスレッドを平行に実行したり、後述するアイドル状態の命令を実行する場合等、PC18が指示するアドレスは同じでもよい。
ID19は、IFU17が読み出した命令を解読し、解読結果に応じた命令をEXE23に発行する。例えば、EXE23が加算器、浮動小数点演算器、乗算器、除算機等を備えている場合、ID19はこれらを動作させる命令を発行する。EXE23は、1周期の間を時分割で各命令を実行して結果をREG24に格納する。スレッドの数だけEXE23が存在してもよい。以下、スレッドとEXE23を区別するため、EXE23が1つのスレッドを実行するための資源(リソース)を「1実行リソース」と称す。
〔余剰の処理能力のカウント〕
MT−CTL21は、マルチスレッド機能の制御ユニットであり、例えばスレッド間に時間依存の関係があったり、優先度が定められている場合、スレッド毎に命令の実行順を調整することができる。また、本実施形態のMT−CTL21は、ID19が解読した命令に基づきSL−CNT22のカウント値をカウントアップする。
MT−CTL21は、マルチスレッド機能の制御ユニットであり、例えばスレッド間に時間依存の関係があったり、優先度が定められている場合、スレッド毎に命令の実行順を調整することができる。また、本実施形態のMT−CTL21は、ID19が解読した命令に基づきSL−CNT22のカウント値をカウントアップする。
図3は、スレッドとSL−CNT22の関係を説明する図の一例である。図3では、CPUコア12は8つのスレッドを1周期(例えば1クロック)で実行するものとする。したがって、このCPUコア12は1周期で8実行リソースを提供でき、EXE23は、実行リソースTH0〜7を用いて8つのスレッドを1周期で実行する。実行リソースTH0〜3は実需のスレッド、例えば、センサが検出した信号に演算を施したりアクチュエータを制御するスレッドを実行する。実行リソースTH7は、余剰の処理能力(カウント値)を他のECUに通知する通知スレッドを実行する。すると、実行リソースTH4〜6は、実需のスレッドを実行しないので余剰の処理能力となる。MT−CTL21は、実需のスレッドを実行しない実行リソースTH4〜6をSL−CNT22を用いてカウントする。
余剰の処理能力のカウントについて説明する。本実施形態では、実需のスレッドを実行しない実行リソースを余剰の処理能力として扱い、この数をカウントする。
図4は、各実行リソースに割り当てられるスレッドを模式的に示す図の一例である。例えば、実行リソースTH0にはR0のスレッドが、実行リソースTH1にはR1のスレッドが、実行リソースTH2にはR2のスレッドが、実行リソースTH3にはR3のスレッドが、それぞれ1周期毎に割り当てられ、実行リソースTH7には通知スレッドが定期的に割り当てられる。スレッドR0〜R3は実需のスレッドである。これに対し、実行リソースTH4〜TH6には、実需のスレッドR4〜R6が割り当てられることはあっても、アイドル状態を多く含む。MT−CTL21は実行リソースがアイドル状態になった回数をカウントする。
ここで、アイドル状態の実行リソースがどのような処理を実行するかはマイコン50によって様々である。例えば、定期的にROMサムチェックするマイコン50もあれば、NOP(No Operation)命令を繰り返し実行するマイコン50もある。そこで、本実施形態では、アイドル状態を示す命令をアイドル状態の開始時と、終了時に挿入する。図4では、Is(Idle Start)がアイドル状態の開始時を示す命令(スレッド)を、Ie(Idle End)がアイドル状態の終了時を示す命令(スレッド)を、それぞれ示す。MT−CTL21はIs又はIeの数をカウントすることで、余剰の処理能力の大きさを測定することができる。
Is及びIeを実行リソースに割り当てる方法は、大きく2つある。例えば、並列に実行可能な命令を含むソースコードをコンパイラがコンパイルする場合でも、実行リソースの数だけは並列に実行する命令がない場合がある。この場合、コンパイラは並列に命令を割り当てない実行リソースにIsを割り当て、実需の命令を割り当てる直前にIeを割り当てる。このように、ソースコードやコンパイラによってはコンパイル時に余剰の実行リソースが定まる。
また、OSのスケジューラがIs及びIeを実行リソースに割り当てる場合がある。OSはスレッドを実行リソースに割り当てるが、実行リソースの数以上のスレッドを並列に実行リソースに割り当てる状況でなければ、いくつかの実行リソースがアイドル状態となる。このような場合、OSはアイドル状態の開始時にその実行リソースにIsを割り当て、実需の命令を割り当てる直前にIeを割り当てる。アイドル状態の間、OSは、ROMサムチェックやNOP命令等、アイドル状態で必要な処理を実行できる。
MT−CTL21は特定の命令Is又はIeが検出されると、検出した数だけSL−CNT22をカウントアップする。1周期の間に命令Is又はIeが検出された実行リソースが複数あれば、その数だけSL−CNT22をカウントアップする。Is又はIeのいずれかをカウントすればよい。なお、このようにIs又はIeをカウントすると、SL−CNT22のカウント値は時間と共に増大するので、MT−CTL21は定期的にSL−CNT22をリセットする。リセットする周期は、例えば、カウント値を他のECUに通知するタイミングである。こうすることで、各ECUは最も最近の余剰の処理能力を他のECUに通知することができる。また、MT−CTL21をハードウェアで実装し、自律で余剰の処理能力をカウントするので、OS等が余剰の処理能力をカウントする必要がなく、スレッドの処理速度に影響を与えることがない。
〔LB−TBL25〕
図2に戻り、LB-TBL25A〜25Dについて説明する。各ECUは、他のECUから通知されたカウント値を登録したLB−TBL25A〜25Dを有する。
図5は、各ECUが有するLB−TBL25A〜25Dの一例を示す図である。ECU#Aは、ECU#B、ECU#C及びECU#Dのカウント値から成るLB−TBL25Aを有し、ECU#Bは、ECU#A、ECU#C及びECU#Dのカウント値から成るLB−TBL25Bを有し、ECU#Cは、ECU#A、ECU#B及びECU#Dのカウント値から成るLB−TBL25Cを有し、ECU#Dは、ECU#A、ECU#B及びECU#Cのカウント値から成るLB−TBL25Dを有する。各ECUは、LB−TBL25A〜25Dを参照することで、どのECUにどのくらいの余剰の処理能力があるかを検出できる。
図2に戻り、LB-TBL25A〜25Dについて説明する。各ECUは、他のECUから通知されたカウント値を登録したLB−TBL25A〜25Dを有する。
図5は、各ECUが有するLB−TBL25A〜25Dの一例を示す図である。ECU#Aは、ECU#B、ECU#C及びECU#Dのカウント値から成るLB−TBL25Aを有し、ECU#Bは、ECU#A、ECU#C及びECU#Dのカウント値から成るLB−TBL25Bを有し、ECU#Cは、ECU#A、ECU#B及びECU#Dのカウント値から成るLB−TBL25Cを有し、ECU#Dは、ECU#A、ECU#B及びECU#Cのカウント値から成るLB−TBL25Dを有する。各ECUは、LB−TBL25A〜25Dを参照することで、どのECUにどのくらいの余剰の処理能力があるかを検出できる。
図5のLB−TBL25A〜25Dでは、カウント値と共に各ECUの動作クロック周波数が登録されている。各ECUの処理能力が全て同程度であれば、余剰の処理能力が最も大きいECUに負荷を分散すればよいが、ECUの処理能力が異なる場合、カウント値が大きくても本来の処理能力が低いECUが存在することになる。いずれかのECUが、カウント値が大きく本来の処理能力が低い他のECUに負荷を分散すると、分散先のECUの処理負荷が過剰に大きくなってしまう。そこで、LB−TBL25A〜25Dには、各ECUの動作クロック周波数を登録しておき、動作クロック周波数に応じてカウント値を重み付けすることで、各ECUの余剰の処理能力を正確に監視することを可能にする。
このため、各ECUは、自らの動作クロック周波数を同報的に他のECUに送信する。ここで、ECU#A〜ECU#Dが起動するか否かは、IG(イグニッション)オン、ACCオン又はメインシステムオンに対し一様でなく、電力が供給されてからECUが起動するまでの時間もそれぞれ異なることが多い。そこで、本実施形態では、ECUの備えたCANC15が通信可能となって以降、遅滞なくECUが動作クロック周波数を同報的に送信するものとする。すなわち、CANC15が起動して通信可能な状態になるとCPUコア12に割り込みして、CPUコア12が通知スレッドを実行する。したがって、動作クロック周波数を受信した各ECUは、動作クロック周波数により処理能力を取得できると共に、動作クロック周波数を送信したECUに対し負荷分散できること検出できる。なお、このように各ECUが動作クロック周波数を他のECUに通知するのでなく、各ECUが予め他のECUの動作クロック周波数を記憶していてもよい。
図6は、ECUの機能ブロック図の一例を示す。図6では、通知する側のECU#Aと、負荷分散をECU#Aに要求するECU#Bとを示した。他のECU#C,ECU#Dも同様の機能ブロックを有する。ECU#Aは、CPUコア12が通知スレッドを実行することで実現されるカウンタ通知部31、負荷分散の要求を受けて処理を代行する処理代行部32、を有する。ECU#Bは、負荷分散をECU#Aに要求する負荷分散部34、を有する。
上記のように、カウンタ通知部31はCANC15の割り込みにより起動して、自らの動作クロック周波数を、他のECUに送信する。例えば、カウンタ通知部31はIDコードに「FFFF」を設定することで、同報的に自らの動作クロック周波数をCANC15を介して送信する。ここで、ECU#Aが起動しても、他のECUが起動していない場合があるので、カウンタ通知部31は、例えば、起動後、数分間、定期的に自らの動作クロック周波数を同報的に送信する。各ECUに個別に送信し、応答のないECUにだけ動作クロック周波数の送信を繰り返してもよい。
また、カウンタ通知部31は、タイマ33にカウント値の通知のサイクル時間を設定し、タイマ33をスタートさせる。タイマ33に設定されるサイクル時間は例えば数マイクロ秒から数ミリ秒である。サイクル時間が経過するとタイマ33がCPUコア12に割込みするので、CPUコア12は通知スレッドを実行することでカウンタ通知部31が実現される。カウンタ通知部31は、SL−CNT22からカウント値を読み出し、同報的にCANC15を介して送信する。
他のECUのCANC15はECU#Aのカウント値を受信して、IDデータに基づき受信したデータがカウント値であることを検出すると、DMAC14にカウント値の処理を依頼する。DMAC14はRAM(LB−TBL25)13にカウント値をDMA転送する。各ECUがカウント値の送信及びLB−TBL25A〜25Dへの記憶を繰り返すことで、LB−TBL25A〜25Dには最も最近の余剰の処理能力が登録される。
〔負荷分散〕
負荷分散部34は、ECU#BがECU#Aに負荷分散する候補のスレッドの処理負荷を分散候補リスト35から抽出する。これは、負荷分散先のECU#Aの余剰の処理能力と比較するためである。すなわち、負荷を分散するためにECU#Aに送信したスレッドの処理負荷が、ECU#Aの余剰の処理能力を超えていると、適切な負荷分散とならない場合があるからである。ここで、各ECUの実行するスレッドは既知なので、処理負荷は固定値である。そこで、各ECUは、負荷分散する候補のスレッドの処理負荷(以下、「スレッド負荷」という)を、予め分散候補リスト35に登録しておく。
負荷分散部34は、ECU#BがECU#Aに負荷分散する候補のスレッドの処理負荷を分散候補リスト35から抽出する。これは、負荷分散先のECU#Aの余剰の処理能力と比較するためである。すなわち、負荷を分散するためにECU#Aに送信したスレッドの処理負荷が、ECU#Aの余剰の処理能力を超えていると、適切な負荷分散とならない場合があるからである。ここで、各ECUの実行するスレッドは既知なので、処理負荷は固定値である。そこで、各ECUは、負荷分散する候補のスレッドの処理負荷(以下、「スレッド負荷」という)を、予め分散候補リスト35に登録しておく。
図6には、スレッドSb1〜Sb3のスレッド負荷「b1b1b1b1」「b2b2b2b2」「b3b3b3b3」が登録されている。スレッド負荷は、例えばMIPS値などで指標化されることが多い。単位時間当たりに実行要求される命令数が大きいスレッドほど、CPUコア12にとって処理負荷が大きいと言える。考え方としては、このMIPS値を通知のサイクル時間当たりの命令数に補正すれば、通知のサイクル時間における余剰の処理能力で、分散候補のスレッドを実行可能と推定できる。すなわち、分散候補リスト35に登録される各スレッドのスレッド負荷は、例えば、各スレッドのMIPS値を通知サイクル時間で割った値である。
なお、分散候補のスレッドは、他のECUにて実行できるものでなければならない。実行できるかどうかは、負荷分散の形態に応じて異なるが、OSや実行環境が共通でアプリとしてのスレッドが実行できることが必要である。また、ECU#Bに接続されたアクチュエータの制御までECU#Aに負荷分散するのであれば、ECU#Aがアクチュエータのドライバを有し、アクチュエータに接続するためのIOを備えているか、又は、ECU#BのIOをECU#Aと共用する手段が必要となる。
また、負荷分散部34は負荷分散の前に、ECU#Bの処理負荷に基づき、分散候補リスト35に登録されたスレッドの候補を、ECU#Aに負荷分散すべきか否かを判定する。すなわち、ECU#Bの処理負荷がある程度大きくなければ、負荷分散する必要性が低いからである。一般的なOSは、CPUコア12の処理負荷を監視している。OSは、例えば、CPUコア12の使用率やスレッドキューにおいて実行待ちをしているスレッドの数から、ECU#Bの処理負荷を監視している。負荷分散部34は、この処理負荷が所定値以上の場合、分散候補リスト35のスレッドをECU#Aに負荷分散することを試みる。
まず、負荷分散部34は、分散候補リスト35からスレッド負荷の高い順にスレッド負荷を読み出す。そして、LB−TBL25Bから最も大きなカウント値を読み出す。負荷分散部34は、最も大きいスレッド負荷と最も大きいカウント値を比較して、スレッド負荷の方が小さい場合、最も大きいスレッド負荷のスレッドを最も大きいカウント値に対応づけられたECU(図6ではECU#Aとする)に負荷分散できると判定する。スレッド負荷がカウント値以上の場合、負荷分散部34は次に大きいスレッド負荷を分散候補リスト35から読み出し、同様の比較を繰り返す。
例えば、図6の分散候補リスト35においてb1b1b1b1>b2b2b2b2>b3b3b3b3、ECU#BのLB−TBL25Bにおいてxxxx>zzzz>wwwwと仮定すると、負荷分散部34は、xxxx>b1b1b1b1の場合、スレッドSb1をECU#Aに負荷分散する。xxxx>b1b1b1b1でない場合、負荷分散部34は、xxxx>b2b2b2b2の場合、スレッドSb2をECU#Aに負荷分散する。xxxx>b2b2b2b2でない場合、負荷分散部34はxxxx>b3b3b3b3の場合、スレッドSb3をECU#Aに負荷分散する。
なお、負荷分散部34は、スレッドSb1をECU#AだけでなくECU#Cに負荷分散してもよい。スレッドSb1の一部をECU#Aに、残りをECU#Cに負荷分散することで、LB−TBL25のカウンタ値がスレッド負荷未満でも、負荷の分散が可能となり、より効率的な負荷分散が可能となる。この場合、分散候補リスト35に、ECU#Bが実行するスレッド毎に分散可能な部分をアドレス等で指定しておき、該部分毎にスレッド負荷を登録しておく。
〔動作クロック周波数による重み付け〕
ここで、動作クロック周波数がECU間で異なる場合の取り扱いを説明する。スレッド負荷は、そのECUの動作クロック周波数でスレッドを実行した場合の処理負荷である。したがって、動作クロック周波数がECU間で異なる場合、負荷分散部34は、自分(ECU#B)の動作クロック周波数と他のECUの動作クロック周波数の比に応じて、カウント値を重み付けする。
ここで、動作クロック周波数がECU間で異なる場合の取り扱いを説明する。スレッド負荷は、そのECUの動作クロック周波数でスレッドを実行した場合の処理負荷である。したがって、動作クロック周波数がECU間で異なる場合、負荷分散部34は、自分(ECU#B)の動作クロック周波数と他のECUの動作クロック周波数の比に応じて、カウント値を重み付けする。
図5に示したように、ECU#A,ECU#Bの動作クロック周波数が128〔MHz〕、ECU#Cの動作クロック周波数が64〔MHz〕、ECU#Dの動作クロック周波数が32〔MHz〕の場合、ECU#Bの負荷分散部34は、LB−TBL25に登録されたカウント値に対し、次のように重み付けする。
重み付けされたECU#Aのカウント値= 「xxxx」×128/128
重み付けされたECU#Cのカウント値= 「yyyy」× 64/128
重み付けされたECU#Dのカウント値= 「wwww」× 32/128
すなわち、負荷分散部34は、動作クロック周波数がECU#Bと同じECU#Aのカウント値は重み付けしない。動作クロック周波数がECU#Bの半分のECU#Cのカウント値は、「0.5」で重み付けする。動作クロック周波数がECU#Bの1/4のECU#Dのカウント値は、「0.25」で重み付けする。こうすることで、動作クロック周波数の異なるECUのカウント値と、分散候補リスト35のスレッド負荷を的確に比較することができる。したがって、負荷分散部34は、スレッド負荷と重み付け後のカウント値を比較して、スレッド負荷の方が小さい場合、そのECU(図6ではECU#Aとする)にそのスレッドを負荷分散できると判定する。
重み付けされたECU#Aのカウント値= 「xxxx」×128/128
重み付けされたECU#Cのカウント値= 「yyyy」× 64/128
重み付けされたECU#Dのカウント値= 「wwww」× 32/128
すなわち、負荷分散部34は、動作クロック周波数がECU#Bと同じECU#Aのカウント値は重み付けしない。動作クロック周波数がECU#Bの半分のECU#Cのカウント値は、「0.5」で重み付けする。動作クロック周波数がECU#Bの1/4のECU#Dのカウント値は、「0.25」で重み付けする。こうすることで、動作クロック周波数の異なるECUのカウント値と、分散候補リスト35のスレッド負荷を的確に比較することができる。したがって、負荷分散部34は、スレッド負荷と重み付け後のカウント値を比較して、スレッド負荷の方が小さい場合、そのECU(図6ではECU#Aとする)にそのスレッドを負荷分散できると判定する。
負荷分散できるECU#Aを決定した負荷分散部34は、スレッドの実行をECU#Aに依頼するための一連の依頼用データをECU#Aに送信する。依頼用データの粒度は、例えば、アプリケーション全体、アプリケーションの中の関数、アプリケーションの中の所定のサブルーチン等である。負荷分散部34は、粒度に応じてROM11からプログラムを読み出す。また、負荷分散するまでにECU#Bが実行した処理結果があればRAM13から読み出す。また、実行中の処理経過があれば、REG24やPC18から読み出す。負荷分散部34はこれらECU#Aがスレッドを実行するために必要な依頼用データをECU#Aに送信する。
そして、負荷分散部34は、ECU#Aに負荷分散したスレッドのスレッド負荷をLB−TBL25Bのカウント値から減じる。
図7は、負荷分散後のECU#BのLB−TBL25Bの一例を示す。スレッド負荷b1をECU#Aに負荷分散した結果、ECU#Aの余剰の処理能力は少なくなる。これをLB−TBL25Bに反映させるため、負荷分散部34は、LB−TBL25BにおけるECU#Aのカウント値「xxxx」を「b1b1b1b1」だけ減じる。こうすることで、例えば、ECU#Bが続けてスレッドb2をECU#Aに負荷分散することを防止できる。
図7は、負荷分散後のECU#BのLB−TBL25Bの一例を示す。スレッド負荷b1をECU#Aに負荷分散した結果、ECU#Aの余剰の処理能力は少なくなる。これをLB−TBL25Bに反映させるため、負荷分散部34は、LB−TBL25BにおけるECU#Aのカウント値「xxxx」を「b1b1b1b1」だけ減じる。こうすることで、例えば、ECU#Bが続けてスレッドb2をECU#Aに負荷分散することを防止できる。
なお、カウント値の減算においても、動作クロック周波数を考慮することが好ましい。図7では、ECU#AとECU#Bの動作クロック周波数が同じなので、負荷分散部34は「xxxx」からそのまま「b1b1b1b1」を減じた。仮に、負荷分散部34がECU#Cにスレッドb1を負荷分散した場合、ECU#Cは動作クロック周波数がECU#Bの半分なので、負荷分散部34はスレッド負荷を2倍した値をECU#Cのカウント値から減じる。すなわち、ECU#Cのカウント値は、「zzzz」−2×「b1b1b1b1」となる。同様に、仮にECU#Dに負荷分散した場合、ECU#Dのカウント値は、「wwww」−4×「b1b1b1b1」となる。
図6に戻り、処理代行部32は、依頼用データに基づきECU#Bから負荷分散されたスレッドb1を実行する。処理代行部32は、例えば、依頼用データに含まれるプログラムをRAM13に記憶して、そのアドレスをPC18にセットして、スレッドb1を実行する。そして、処理代行部32は、処理結果をECU#Bに送信する。ECU#Bは、処理結果に基づき、ECU#Bに接続されたアクチュエータ等を制御することができる。また、ECU#Aが、ECU#Bに接続されたアクチュエータのIOを有する場合、ECU#Aが直接、ECU#Bに接続されたアクチュエータを制御することができる。
〔動作手順〕
図8は、車載システム100が負荷分散する手順を示すシーケンス図の一例を示す。図8のシーケンス図は、カウント値の通知のサイクル時間毎に繰り返し実行される。各ECUのMT−CTL21は1周期毎にスレッドがアイドル状態になった回数をSL−CNT22にてカウントしている。そして、カウンタ通知部31は、タイマ33を利用して、通知のサイクル時間毎にカウント値を同報的に各ECUに送信する(S10〜S40)。なお、各ECUはCANC15が起動した直後、動作クロック周波数を同報的に他のECUに送信する。
図8は、車載システム100が負荷分散する手順を示すシーケンス図の一例を示す。図8のシーケンス図は、カウント値の通知のサイクル時間毎に繰り返し実行される。各ECUのMT−CTL21は1周期毎にスレッドがアイドル状態になった回数をSL−CNT22にてカウントしている。そして、カウンタ通知部31は、タイマ33を利用して、通知のサイクル時間毎にカウント値を同報的に各ECUに送信する(S10〜S40)。なお、各ECUはCANC15が起動した直後、動作クロック周波数を同報的に他のECUに送信する。
そして、各ECUの負荷分散部34は、ECUの処理負荷が所定値以上か否かを判定する(S50)。処理負荷が所定値以上でない場合(S50のNo)、処理負荷を分散する必要がないので、図8の手順は終了する。
処理負荷が所定値以上の場合(S50のYes)、処理負荷を分散することでECU#Bの処理に遅延が生じることを予防できるので、負荷分散部34は、LB−TBL25Bに登録された最も大きいカウント値が、スレッド負荷以上か否かを判定する(S60)。負荷分散部34は、分散候補リスト35から最も大きいスレッド負荷を読み出し、各ECUのカウント値を動作クロック周波数で重み付けした後、両者を比較する。
比較の結果、カウント値がスレッド負荷未満の場合(S60のNo)、負荷分散すると、分散先のECUの処理の余剰能力を超えるおそれがあるので、負荷分散部34は負荷を分散しない。カウント値がスレッド負荷以上の場合(S60のYes)、負荷分散しても、分散先のECUの処理の余剰能力を超えずにECU#Bの負荷を分散できるので、負荷分散部34は依頼用データをECU#Aに送信する(S70)。また、負荷分散部34は、ECU#Aに負荷分散したスレッドのスレッド負荷をECU#BのLB−TBL25Bのカウント値から減じる。
ECU#Aの処理代行部32は、依頼用データに基づきECU#Bのスレッドを実行する(S80)。また、処理代行部32はスレッドの処理結果をECU#Bに送信する。処理結果を受信してECU#Bは例えばアクチュエータを制御することができる(S90)。
本実施形態の各ECUの余剰の処理能力を他のECUが共有することで、余剰の処理能力を有するECUに的確に負荷分散を依頼できる。また、他のECUの余剰の処理能力を利用することを前提にマイコン50の処理能力を決定できるので、車載システム100全体として備えるべきハードウェア処理能力を軽減できECUのコスト増を抑制できる。また、MT−CTL21をハードウェアで実装しMT−CTL21はID19に連動して自律で余剰の処理能力をカウントするので、OS等が余剰の処理能力をカウントする必要がなく、スレッドの処理速度に影響を与えることがない。また、RAM13などのメモリを増強する必要もない。また、動作クロック周波数に代表される各ECUの処理能力により余剰の処理能力を重み付けするので、各ECUの処理能力が異なっていても、各ECUが余剰の処理能力を正確に把握できる。
〔好適な変形例〕
いくつのかの好適な変形例について説明する。
ECU#Bの負荷分散部34は、ECU#Aに負荷分散したスレッドのスレッド負荷をLB−TBL25Bのカウント値から減じる、と説明したが、ECU#Bの負荷分散部34は他のECUにも負荷分散したスレッドのスレッド負荷を通知して、各ECUに、各ECUのLB−TBL25A〜25Dのカウント値からスレッド負荷を減じさせてもよい。こうすることで、各ECUが負荷分散の結果、ECU#Aの余剰の処理能力が減少したことを共有できる。
いくつのかの好適な変形例について説明する。
ECU#Bの負荷分散部34は、ECU#Aに負荷分散したスレッドのスレッド負荷をLB−TBL25Bのカウント値から減じる、と説明したが、ECU#Bの負荷分散部34は他のECUにも負荷分散したスレッドのスレッド負荷を通知して、各ECUに、各ECUのLB−TBL25A〜25Dのカウント値からスレッド負荷を減じさせてもよい。こうすることで、各ECUが負荷分散の結果、ECU#Aの余剰の処理能力が減少したことを共有できる。
図9は、各ECUが、1つのECUが負荷分散した結果を共有したLB−TBL25A〜25Dの一例を示す。このような処理は、負荷分散したECU#Bの負荷分散部34が、ECU#C及びECU#Dにスレッド負荷「b1b1b1b1」を通知することで実現する。
また、この場合も、動作クロック周波数を考慮して、スレッド負荷をLB−TBL25A〜25Dのカウント値から減じることが好ましい。図8の例では、ECU#AとECU#Bの動作クロック周波数が同じなので、動作クロック周波数を考慮しても、ECU#CとECU#DのLB−TBL25C、25Dにて、カウント値「xxxx」から減じられる値は「b1b1b1b1」のままである。
また、負荷分散部34は、LB−TBL25Bにおいて最も大きなカウント値を有するECU#Aを負荷分散の対象としたが、負荷分散する対象のECUを、分散対象のスレッドのスレッド負荷に最適なECUとしてもよい。こうすることで、例えば、ECU#C又はECU#DがECU#Aの余剰の処理能力を利用可能となる。
具体的には、ECU#Bの負荷分散部34は、分散候補リスト35を参照し最も大きなスレッド負荷「b1b1b1b1」を読み出す。また、LB−TBL25Bを参照し、スレッド負荷「b1b1b1b1」よりも大きく、その中で最も小さいカウント値を探索する。例えば、動作クロック周波数により重み付けすると、ECU#Aのカウント値は「xxxx」、ECU#Cのカウント値は「0.5×zzzz」、ECU#Dのカウント値は「0.25×wwww」、である。負荷分散部34は、これらから最も小さいカウント値を探し、スレッド負荷「b1b1b1b1」と比較する。例えば、「xxxx」>「0.5×zzzz」>「0.25×wwww」の場合、負荷分散部34は「0.25×wwww」>「b1b1b1b1」の場合は、ECU#DにスレッドSb1を負荷分散し、「0.5×zzzz」>「b1b1b1b1」の場合は、ECU#CにスレッドSb1を負荷分散し、「xxxx」>「b1b1b1b1」の場合は、ECU#AにスレッドSb1を負荷分散する。なお、ECU#Bの負荷分散部34は、最終的に「xxxx」>「b1b1b1b1」が成立しなかった場合、分散候補リスト35を参照し次に大きなスレッド負荷「b2b2b2b2」を読み出し、同様の作業を繰り返す。
こうすることで、スレッドSb1に対し余剰の処理能力が必要充分なECUに負荷を分散できる。例えば、ECU#BがECU#Cに負荷分散した場合、ECU#Aの余剰の処理能力は減少しないので、例えばECU#DがECU#Aに負荷分散することが可能となり、より効率的な負荷分散が可能となる。
11 ROM
12 CPUコア
13 RAM
14 DMAC
15 CANC
21 MT−CTL
22 SL−CNT
25 LB−TBL
50 マイコン
100 車載システム
12 CPUコア
13 RAM
14 DMAC
15 CANC
21 MT−CTL
22 SL−CNT
25 LB−TBL
50 マイコン
100 車載システム
Claims (10)
- 車載LANを介して接続された複数の電子制御ユニットを有する車載システムにおいて、
各電子制御ユニットは、
当該電子制御ユニットの余剰処理能力を測定する、ハードウェアで実装された測定手段と、
前記余剰処理能力を他の電子制御ユニットに通知する通知手段と、
他の電子制御ユニットから通知された前記余剰処理能力を各電子制御ユニットに対応づけて登録したテーブルと、
他の電子制御ユニットの前記余剰処理能力に基づき、他の電子制御ユニットに当該電子制御ユニットの負荷を分散する負荷分散手段と、を有する、
ことを特徴とする車載システム。 - 各電子制御ユニットは、当該電子制御ユニットの処理能力情報を記憶しており、
前記負荷分散手段は、前記処理能力情報により重み付けされた前記余剰処理能力に基づき、当該電子制御ユニットの負荷を分散する、
ことを特徴とする請求項1記載の車載システム。 - 前記処理能力情報は、当該電子制御ユニットが有するマイコンの動作クロック周波数である、
ことを特徴とする請求項2記載の車載システム。 - 前記通知手段は、当該電子制御ユニットが起動後、前記処理能力情報を他の電子制御ユニットに通知し、
前記負荷分散手段は、前記処理能力情報を送信した送信元の電子制御ユニットを、負荷の分散候補とする、
ことを特徴とする請求項1記載の車載システム。 - 前記測定手段は、当該電子制御ユニットが実行する命令に基づき余剰処理能力を測定する、
ことを特徴する請求項1記載の車載システム。 - 当該電子制御ユニットが複数のスレッドを時間的に並行して実行するマルチスレッド機構を備える場合、
前記測定手段は、スレッド毎にアイドル状態となった回数をカウントする、
ことを特徴する請求項5記載の車載システム。 - 前記負荷分散手段は、当該電子制御ユニットの負荷を分散した場合、
前記テーブルにて負荷の分散先の電子制御ユニットに対応づけられた前記余剰処理能力から、分散した負荷に相当する値を減じる、
ことを特徴とする請求項1記載の車載システム。 - 前記負荷分散手段は、当該電子制御ユニットの負荷を分散した場合、
負荷の分散先の電子制御ユニット以外の電子制御ユニットに、分散した負荷を通知する、
ことを特徴とする請求項7記載の車載システム。 - 前記負荷分散手段は、
分散する負荷より大きい、前記テーブルに登録された前記余剰処理能力のうち、最も小さい余剰処理能力に対応づけられた各電子制御ユニットに、負荷を分散する、
ことを特徴とする請求項1記載の車載システム。 - 車載LANを介して接続された複数の電子制御ユニットの負荷分散方法において、
ハードウェアで実装された測定手段が、当該電子制御ユニットの余剰処理能力を測定するステップ、
通知手段が、前記余剰処理能力を他の電子制御ユニットに通知するステップと、
登録手段が、他の電子制御ユニットから通知された前記余剰処理能力を各電子制御ユニットに対応づけてテーブルに登録するステップと、
負荷分散手段が、他の電子制御ユニットの前記余剰処理能力に基づき他の電子制御ユニットに、当該電子制御ユニットの負荷を分散するステップと、
ことを特徴とする負荷分散方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009137421A JP2010280356A (ja) | 2009-06-08 | 2009-06-08 | 車載システム、負荷分散方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009137421A JP2010280356A (ja) | 2009-06-08 | 2009-06-08 | 車載システム、負荷分散方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2010280356A true JP2010280356A (ja) | 2010-12-16 |
Family
ID=43537521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009137421A Pending JP2010280356A (ja) | 2009-06-08 | 2009-06-08 | 車載システム、負荷分散方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2010280356A (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012233997A (ja) * | 2011-04-28 | 2012-11-29 | Yamaha Corp | カラオケ装置 |
JP2013052817A (ja) * | 2011-09-06 | 2013-03-21 | Toyota Motor Corp | 車両用ストリームデータ管理システム |
JP2015229467A (ja) * | 2014-06-06 | 2015-12-21 | 本田技研工業株式会社 | 電子制御システム |
WO2019111526A1 (ja) * | 2017-12-07 | 2019-06-13 | 住友電気工業株式会社 | 制御装置、制御方法および制御プログラム |
WO2022162988A1 (ja) * | 2021-01-28 | 2022-08-04 | 日立Astemo株式会社 | 車両制御装置 |
WO2023248455A1 (ja) * | 2022-06-24 | 2023-12-28 | 日立Astemo株式会社 | 車両制御システム及び電子制御装置 |
-
2009
- 2009-06-08 JP JP2009137421A patent/JP2010280356A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012233997A (ja) * | 2011-04-28 | 2012-11-29 | Yamaha Corp | カラオケ装置 |
JP2013052817A (ja) * | 2011-09-06 | 2013-03-21 | Toyota Motor Corp | 車両用ストリームデータ管理システム |
JP2015229467A (ja) * | 2014-06-06 | 2015-12-21 | 本田技研工業株式会社 | 電子制御システム |
WO2019111526A1 (ja) * | 2017-12-07 | 2019-06-13 | 住友電気工業株式会社 | 制御装置、制御方法および制御プログラム |
WO2022162988A1 (ja) * | 2021-01-28 | 2022-08-04 | 日立Astemo株式会社 | 車両制御装置 |
WO2023248455A1 (ja) * | 2022-06-24 | 2023-12-28 | 日立Astemo株式会社 | 車両制御システム及び電子制御装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2577476C2 (ru) | Способ, устройство и система для диспетчеризации ядра процессора в системе ядра мультипроцессора | |
KR101834195B1 (ko) | 다중코어 시스템 및 로드 밸런싱 방법 | |
US8341639B2 (en) | Executing multiple threads in a processor | |
US9778961B2 (en) | Efficient scheduling of multi-versioned tasks | |
JP2010280356A (ja) | 車載システム、負荷分散方法 | |
US8875151B2 (en) | Load balancing method and apparatus in symmetric multi-processor system | |
KR101915198B1 (ko) | 프로세서간 메시지처리장치 및 방법 | |
EP3092567B1 (en) | System and method for isolating i/o execution via compiler and os support | |
US9298504B1 (en) | Systems, devices, and techniques for preempting and reassigning tasks within a multiprocessor system | |
KR101640848B1 (ko) | 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치 | |
JP4747307B2 (ja) | ネットワーク処理制御装置,プログラムおよび方法 | |
JP2006338264A (ja) | タスク割当装置およびタスク割当方法 | |
Ben-Yehuda et al. | The Offline Scheduler for Embedded Transportation Systems | |
JP5347451B2 (ja) | マルチプロセッサシステム、競合回避プログラム及び競合回避方法 | |
JP5745868B2 (ja) | マルチプロセッサシステム | |
US10402232B2 (en) | Method and system for deterministic multicore execution | |
JP2011141782A (ja) | 情報処理装置、電子制御ユニット、タスク割り当て方法 | |
KR101694302B1 (ko) | 이기종 멀티코어 프로세서 시스템의 관리 장치 및 방법 | |
JP4829038B2 (ja) | マルチプロセッサシステム | |
JP2010170320A (ja) | プログラム、及び制御装置 | |
CN112949847B (zh) | 神经网络算法加速系统、调度系统及调度方法 | |
JP2013152636A (ja) | 情報処理装置、タスクスケジューリング方法 | |
CN110837415A (zh) | 一种基于risc-v多核处理器的线程调度方法和装置 | |
US11275621B2 (en) | Device and method for selecting tasks and/or processor cores to execute processing jobs that run a machine | |
JP2012226709A (ja) | 排他制御装置、マイコン |