(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-12
(45)【発行日】2022-08-22
(54)【発明の名称】車載用ゲートウェイ装置、方法及びプログラム
(51)【国際特許分類】
H04L 12/28 20060101AFI20220815BHJP
H04L 12/46 20060101ALI20220815BHJP
【FI】
H04L12/28 200D
H04L12/28 100A
H04L12/46 100R
(21)【出願番号】P 2018107324
(22)【出願日】2018-06-05
【審査請求日】2021-04-09
(73)【特許権者】
【識別番号】000003333
【氏名又は名称】ボッシュ株式会社
(72)【発明者】
【氏名】ヴィオム カミーユ
(72)【発明者】
【氏名】水梨 勇河
【審査官】鈴木 香苗
(56)【参考文献】
【文献】特開2014-204160(JP,A)
【文献】特開平08-046627(JP,A)
【文献】特開2006-333438(JP,A)
【文献】特開2011-234093(JP,A)
【文献】国際公開第2009/107713(WO,A1)
【文献】特開2003-224594(JP,A)
【文献】韓国登録特許第10-0542433(KR,B1)
【文献】米国特許第08953473(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
H04L 12/28
H04L 12/46
(57)【特許請求の範囲】
【請求項1】
N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)であって、
N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶するN個の第1の記憶部(120)と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する1つ以上の第2の記憶部(130)と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てる制御部(150)と、
を備え
、
前記制御部(150)は、前記第1の記憶部(120)及び前記第2の記憶部(130)から1つの記憶部(120又は130)を選択し、選択された記憶部(120又は130)に対応するメッセージを前記処理対象として選択し、
前記制御部(150)は、空でない前記第1の記憶部(120)及び前記第2の記憶部(130)からラウンドロビン方式で1つの前記記憶部(120又は130)を選択する、
車載用ゲートウェイ装置(100)。
【請求項2】
前記制御部は、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの各々の処理の終了予定時刻を計算し、前記終了予定時刻が最も早いメッセージを前記処理対象として選択する、請求項
1に記載の車載用ゲートウェイ装置(100)。
【請求項3】
前記制御部は、計算対象のメッセージと同一の前記記憶部(120又は130)に記憶されるメッセージであって前記計算対象のメッセージの前に処理されるメッセージの前記終了予定時刻又は前記計算対象のメッセージが前記記憶部(120又は130)に記憶された時刻のうち遅い方に、前記計算対象のメッセージの処理時間を加算することで、前記計算対象のメッセージの前記終了予定時刻を計算する、請求項
2に記載の車載用ゲートウェイ装置(100)。
【請求項4】
前記制御部は、計算対象のメッセージと同一の記憶部(120又は130)に記憶されるメッセージであって前記計算対象のメッセージより先に処理されるメッセージの前記終了予定時刻又は仮想時刻のうち遅い方に、前記計算対象のメッセージの処理時間を加算することで、前記計算対象のメッセージの前記終了予定時刻を計算し、
前記仮想時刻は、現在の実時刻と前記仮想時刻の前回更新時の実時刻との差を、前記第1の記憶部(120)及び前記第2の記憶部(130)のうち空でない記憶部(120又は130)の数で割った値を、前回更新時の前記仮想時刻に加算することで更新される、請求項
2に記載の車載用ゲートウェイ装置(100)。
【請求項5】
前記処理時間は、前記計算対象のメッセージのサイズに依存する、請求項
3又は
4に記載の車載用ゲートウェイ装置(100)。
【請求項6】
前記処理時間は、前記計算対象のメッセージに適用される処理の種類に依存する、請求項
3~
5のいずれか一項に記載の車載用ゲートウェイ装置(100)。
【請求項7】
前記車載用ゲートウェイ装置(100)は、前記送信処理待ちのメッセージを記憶する第3の記憶部(140)をさらに備え、
前記第2の記憶部(130)は、前記第3の記憶部(140)に記憶された前記送信処理待ちのメッセージへのポインタを記憶する、請求項1~
6のいずれか一項に記載の車載用ゲートウェイ装置(100)。
【請求項8】
前記第3の記憶部(140)は、MPFOリスト(141)又はFIFOリスト(142)の少なくともいずれかを含む、請求項
7に記載の車載用ゲートウェイ装置(100)。
【請求項9】
N個の前記ネットワークの各々から受信したメッセージを記憶するN個の第4の記憶部(111)をさらに備え、
前記制御部は、前記第4の記憶部(111)に記憶されたメッセージを前記第1の記憶部(120)に移動させる処理に、前記ルーティング処理及び前記送信処理に優先して前記計算リソースを割り当てる、請求項1~
8のいずれか一項に記載の車載用ゲートウェイ装置(100)。
【請求項10】
N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)により実行される方法であって、
N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをN個の第1の記憶部(120)に記憶するステップ(S104又はS306)と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を1つ以上の第2の記憶部(130)に記憶するステップ(S212、S214、S412、又はS414)と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ(S208、S218、S222、S408、S434又はS436、及びS212、S214、S224、S412、S414、又はS438)と、
を含
み、
前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップにおいて、
前記第1の記憶部(120)及び前記第2の記憶部(130)から1つの記憶部(120又は130)を選択し、選択された記憶部(120又は130)に対応するメッセージを前記処理対象として選択し、
空でない前記第1の記憶部(120)及び前記第2の記憶部(130)からラウンドロビン方式で1つの前記記憶部(120又は130)を選択する、
方法。
【請求項11】
N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)を制御するコンピュータに、
N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをN個の第1の記憶部(120)に記憶するステップ(S104又はS306)と、
前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を1つ以上の第2の記憶部(130)に記憶するステップ(S212、S214、S412、又はS414)と、
前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ(S208、S218、S222、S408、S434又はS436、及びS212、S214、S224、S412、S414、又はS438)と、
を実行させ
、
前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップにおいて、
前記第1の記憶部(120)及び前記第2の記憶部(130)から1つの記憶部(120又は130)が選択され、選択された記憶部(120又は130)に対応するメッセージが前記処理対象として選択され、
空でない前記第1の記憶部(120)及び前記第2の記憶部(130)からラウンドロビン方式で1つの前記記憶部(120又は130)が選択される、
プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、車載用ゲートウェイ装置、方法及びプログラムに関する。
【背景技術】
【0002】
近年、自動車には、電子制御ユニット(ECU:Electronic Control Unit)と呼ばれる装置が多数搭載されている。これらのECUは、ネットワークにより互いに接続され、メッセージを送受信する。異なるネットワークに属するECU間でメッセージを送受信するためには、ネットワーク同士を接続しメッセージを中継する中継装置(車載用ゲートウェイ装置、又は単にゲートウェイとも称される)が用いられる。近年の自動車の高機能化及び高性能化に伴い、ECUの数、ECU間で送受信されるメッセージ、及びゲートウェイにより中継されるメッセージの数は急増している。
【0003】
ゲートウェイに関する技術は盛んに提案されている。例えば、特許文献1では、送信バッファと受信バッファとを備えるゲートウェイが、送信バッファにバッファされた未送信データを優先度順に送信する技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ゲートウェイは、メッセージを受信すると、そのメッセージの送信先を決定するルーティング処理を行うと共に、どのメッセージをどの順序で送信するかを決定する。ゲートウェイは、これらの処理に計算リソースを割り当てて、メッセージの送信が完了するまでの間、当該メッセージを一時的に記憶する。既存のメッセージの処理が終了するよりも前に新たなメッセージが到来すると、バッファーオーバーランが発生し、新たに到来したメッセージが失われ得る。
【0006】
民生用アプリケーションでは、メッセージの損失が許容される場合がある。例えば、インターネットのTCP/IPプロトコルでは、メッセージの再送信が行われることから、メッセージの損失は許容されている。一方で、車載システムのようなリアルタイムシステムでは、メッセージの損失は許容されない。再送信に伴う過度の遅延が許容されないためである。
【0007】
メッセージの損失を回避するための単純な解決策としては、ゲートウェイに十分に強力な計算機(例えば、CPU)を搭載することが考えられる。しかし、メッセージの数及びサイズが今後さらに増加し得ることを考慮すれば、単に強力な計算機を搭載する解決策は望ましいものとは言えない。
【0008】
その上、十分に強力な計算機が採用されて、メッセージの損失が回避されたとしても、メッセージの送信に遅延が生じるおそれが残る。なぜならば、ネットワークの負荷が高い状態においては、ゲートウェイは、メッセージの受信を送信よりも優先して、受信したメッセージを送信せずに蓄積し得るためである。メッセージの遅延は、車載システムのようなリアルタイム性が求められるシステムにおいては許容され難い。上記特許文献1では、未送信データが優先度順に送信されることが開示されている一方で、メッセージの損失を回避するための工夫は何ら開示されていなかった。
【0009】
そこで、本発明は、上記問題に鑑みてなされたものであり、本発明の目的とするところは、到来したメッセージの損失回避と送信機会の確保とを両立することが可能な、新規かつ改良された車載用ゲートウェイ装置、方法及びプログラムを提供することにある。
【課題を解決するための手段】
【0010】
上記課題を解決するために、本発明のある観点によれば、N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)であって、N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶するN個の第1の記憶部(120)と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する1つ以上の第2の記憶部(130)と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てる制御部(150)と、を備える車載用ゲートウェイ装置(100)が提供される。
【0011】
また、上記課題を解決するために、本発明の別の観点によれば、N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)により実行される方法であって、N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをN個の第1の記憶部(120)に記憶するステップ(S104又はS306)と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を1つ以上の第2の記憶部(130)に記憶するステップ(S212、S214、S412、又はS414)と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ(S208、S218、S222、S408、S434又はS436、及びS212、S214、S224、S412、S414、又はS438)と、を含む方法が提供される。
【0012】
また、上記課題を解決するために、本発明の別の観点によれば、N個のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置(100)を制御するコンピュータに、N個の前記ネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージをN個の第1の記憶部(120)に記憶するステップ(S104又はS306)と、前記ルーティング処理後であって送信処理待ちのメッセージを示す情報を1つ以上の第2の記憶部(130)に記憶するステップ(S212、S214、S412、又はS414)と、前記ルーティング処理待ちのメッセージ及び前記送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、前記処理対象のメッセージの前記ルーティング処理又は前記送信処理に計算リソースを割り当てるステップ(S208、S218、S222、S408、S434又はS436、及びS212、S214、S224、S412、S414、又はS438)と、を実行させるためのプログラムが提供される。
【発明の効果】
【0013】
以上説明したように本発明によれば、到来したメッセージの損失回避と送信機会の確保とを両立することが可能な、新規かつ改良された車載用ゲートウェイ装置、方法及びプログラムが提供される。
【図面の簡単な説明】
【0014】
【
図1】本発明の一実施形態に係るゲートウェイの構成の一例を示す図である。
【
図2】第1の実施形態に係るゲートウェイによるメッセージの受信処理の一例を説明するための図である。
【
図3】同実施形態に係るゲートウェイによるメッセージのルーティング処理の一例を説明するための図である。
【
図4】同実施形態に係るゲートウェイによるメッセージの送信処理の一例を説明するための図である。
【
図5】同実施形態に係るゲートウェイにおいて実行される受信処理の流れの一例を示すフローチャートである。
【
図6】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである
【
図7】第2の実施形態に係るゲートウェイによるメッセージの受信処理の一例を説明するための図である。
【
図8】同実施形態に係るゲートウェイによるメッセージのルーティング処理の一例を説明するための図である。
【
図9】同実施形態に係るゲートウェイによるメッセージの送信処理の一例を説明するための図である。
【
図10】同実施形態に係るゲートウェイにおいて実行される受信処理の流れの一例を示すフローチャートである。
【
図11A】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
【
図11B】同実施形態に係るゲートウェイにおいて実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
【
図12】比較例に係るゲートウェイの構成の一例を示す図である。
【発明を実施するための形態】
【0015】
以下に添付図面を参照しながら、本発明の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【0016】
<<1.構成例>>
図1は、本発明の一実施形態に係るゲートウェイ100の構成の一例を示す図である。ゲートウェイ100は、複数のネットワークに接続され、異なるネットワーク間でメッセージを中継する車載用ゲートウェイ装置である。
図1に示すように、ゲートウェイ100は、ネットワークインタフェース110、N個の第1の記憶部120(キュー#1~#N)、1つ以上の第2の記憶部130(キュー#N+1~#M)、第3の記憶部140及び制御部150を含む。
【0017】
(1)ネットワークインタフェース110
ネットワークインタフェース110は、ゲートウェイ100と他の装置との通信を仲介するインタフェースである。ネットワークインタフェース110は、CAN(Controller Area Network)又はCAN-FD(CAN with Flexible Data rate)等の任意の車載ネットワークに接続される。ネットワークインタフェース110は、複数のチャネルを有し、各々のチャネルは互いに異なるネットワークに接続される。
図1に示した例では、ネットワークインタフェース110は、チャネル#1~#NのN個のチャネルを有する。なお、
図1において「#」の後に付された数字は、インデックスである。即ち、ゲートウェイ100は、N個のネットワークに接続される。なお、Nは2以上の整数である。
【0018】
ネットワークインタフェース110は、N個のネットワークの各々から受信したメッセージを記憶するN個の受信バッファ111(111#1~111#N)(第4の記憶部に相当)を有する。受信バッファ111は、チャネル(例えば、CANチャネル)に1対1に対応付けられ、対応付けられたチャネルに到来したメッセージ(例えば、CANメッセージ)を記憶する。例えば、受信バッファ111#1は、チャネル#1に到来したメッセージを記憶する。
【0019】
ネットワークインタフェース110は、N個のネットワークの各々に送信されるメッセージを記憶するN個の送信バッファ112#1~112#N(第5の記憶部に相当)を有する。送信バッファ112#1~112#Nを、送信バッファ112とも総称する。送信バッファ112は、チャネルに1対1に対応付けられ、対応付けられたチャネルから送信されるメッセージを記憶する。例えば、送信バッファ112#1は、チャネル#1から送信されるメッセージを記憶する。
【0020】
(2)第1の記憶部120
N個の第1の記憶部120は、N個のネットワークの各々から受信したメッセージのうちルーティング処理待ちのメッセージを記憶する。ルーティング処理とは、受信したメッセージをルーティングテーブルに照合して送信先のネットワーク(即ち、チャネル)を決定する処理である。ルーティング処理は、メッセージのヘッダ及びペイロードに基づくセキュリティ関連のフィルタリング等の様々な処理をさらに含み得る。第1の記憶部120は、例えばキューとして実装され得る。第1の記憶部120を、以下ではルーティング処理待ちキュー120とも称する。
図1では、キュー#1~#Nが、ルーティング処理待ちキュー120に相当する。
【0021】
(3)第2の記憶部130
1つ以上の第2の記憶部130は、ルーティング処理後であって送信処理待ちのメッセージを示す情報を記憶する。送信処理とは、ルーティング処理後のメッセージを、決定された送信先のネットワークにメッセージを送信する処理を含む。第2の記憶部130は、例えばキューとして実装され得る。第2の記憶部130を、以下では送信処理待ちキュー130とも称する。
図1では、キュー#N+1~#Mが、ルーティング処理待ちキュー120に相当する。なお、M≧N+1である。
【0022】
ここで、「送信処理待ちのメッセージを示す情報」とは、送信処理待ちのメッセージへのポインタ又は送信処理待ちのメッセージを記憶する記憶部(後述する第3の記憶部140)を示す情報であり、例えばポインタである。送信処理待ちキュー130は、送信処理待ちのメッセージそのものを記憶してもよい。
【0023】
(4)第3の記憶部140
第3の記憶部140は、ルーティング処理後であって送信処理待ちのメッセージを記憶する。第3の記憶部140は、メッセージを記憶するための任意のデータ構造により実現される。第3の記憶部140は、MPFO(Most Priority First Out)リスト141又はFIFO(First In First Out)リスト142の少なくともいずれかを含む。
図1に示した例では、第3の記憶部140は、MPFOリスト141及びFIFOリスト142の双方を含む。MPFOリストとは、記憶されたメッセージのうち優先度が最も高いメッセージから順に取り出されるデータ構造である。FIFOリストとは、先に記憶されたメッセージから順に取り出されるデータ構造である。例えば、CANの制御メッセージは、MPFOリスト141に記憶されて優先度順に送信される。一方で、CANの診断メッセージは、FIFOリスト142に記憶されて先着順に送信される。
【0024】
(5)制御部150
制御部150は、演算処理装置及び制御装置として機能し、各種プログラムに従ってゲートウェイ100の動作全般を制御する。制御部150は、CPU、マイクロプロセッサ、電気回路、DSP及び/又はASICにより実現される。
【0025】
制御部150は、ゲートウェイ100に到来したメッセージを受信し、転送するための各種処理を行う。詳しくは、制御部150は、受信処理、優先順位付け処理、ルーティング処理、及び送信処理を行う。制御部150は、計算リソース(例えば、CPUの処理時間)をこれらの処理に割り当てる。即ち、制御部150は、これらの処理の中から計算リソースを割り当てる処理を選択し、選択した処理を実行する。ルーティング処理及び送信処理に関しては、制御部150は、ルーティング処理待ちのメッセージ及び送信処理待ちのメッセージの中から1つのメッセージを処理対象として選択し、処理対象のメッセージのルーティング処理又は前記送信処理に計算リソースを割り当てる。処理対象のメッセージの選択は、優先順位付け処理の結果に従って行われる。
【0026】
以上、以下に説明する第1の実施形態及び第2の実施形態に共通するゲートウェイ100の構成の一例を説明した。
【0027】
<<2.第1の実施形態>>
本実施形態では、優先順位付け処理にラウンドロビン方式が採用される。詳しくは、ゲートウェイ100は、ルーティング処理待ちキュー120及び送信処理待ちキュー130からラウンドロビン戦略により選択したキューに対応するメッセージを、処理対象として選択する。キューがラウンドロビン方式で順番に選択されて、計算リソースが割り当てられるので、ルーティング処理及び送信処理に公平に計算リソースが割り当てられることとなる。これにより、到来したメッセージの損失回避と送信機会の確保とを両立することが可能となる。
【0028】
<2.1.各種処理>
以下、本実施形態に係るゲートウェイ100により実行される各種処理について詳細に説明する。本実施形態に係るゲートウェイ100の構成は、
図1を参照して上記説明した通りである。以下では、N=6とし、M=8として説明する。この場合、ルーティング処理及び送信処理に使用可能な計算リソースの25%((M-N)/M)が送信処理のために割り当てられ、残りの75%(N/M))がルーティング処理に割り当てられる。
【0029】
(1)受信処理
受信処理とは、受信バッファ111に記憶されたメッセージをルーティング処理待ちキュー120に移動させる処理である。なお、メッセージの移動とは、移動先へのメッセージのコピー及び移動元からのメッセージの削除を含む概念である。制御部150は、受信処理に、優先順位付け処理、ルーティング処理及び送信処理に優先して計算リソースを割り当てる。これにより、到来したメッセージの損失を極力回避することが可能となる。
【0030】
ネットワークからメッセージが到来してネットワークインタフェース110の受信バッファ111に記憶されると、割り込みがトリガされる。割り込みは、受信したメッセージを、メッセージが到来したチャネルに対応するルーティング処理待ちキュー120の最後尾に移動させる。以下、
図2を参照して、受信処理の一例を説明する。
【0031】
図2は、本実施形態に係るゲートウェイ100によるメッセージの受信処理の一例を説明するための図である。
図2では、ゲートウェイ100内のデータ構造及びデータの流れについて図示されている。なお、キュー#1~#6はルーティング処理待ちキュー120であり、キュー#7及び#8は送信処理待ちキュー130である。キュー#1にはメッセージ10-1が記憶され、キュー#2にはメッセージ10-2が記憶され、キュー#6にはメッセージ10-3が記憶されている。また、MPFOリスト141にはメッセージ10-4が記憶され、FIFOリスト142にはメッセージ10-5が記憶されている。
【0032】
図2に示した例では、チャネル#1に到来したメッセージ10-6がチャネル#1の受信バッファ111#1に記憶される。その後、メッセージ10-6は、キュー#1の最後に移動されて、チャネル#1の受信バッファ111#1から削除される。
【0033】
なお、各キュー及びリストにおいて、下方に記載されたメッセージほど出力順が早く、再下端のメッセージは先頭のメッセージである。例えば、キュー#1の先頭はメッセージ10-1であり、2番目がメッセージ10―6である。
【0034】
(2)優先順位付け処理
優先順位付け処理とは、処理対象のキューを選択することである。詳しくは、制御部150は、ルーティング処理待ちキュー120及び送信処理待ちキュー130からひとつのキューを処理対象のキューとして選択する。優先順位付け処理において選択されたキューに対応する処理が、その後行われる。即ち、選択されたキューがルーティング処理待ちキュー120であれば、ルーティング処理が行われ、選択されたキューが送信処理待ちキュー130であれば、送信処理が行われる。
【0035】
本実施形態では、優先順位付け処理は、ラウンドロビン方式に従って行われる。詳しくは、制御部150は、空でないルーティング処理待ちキュー120及び送信処理待ちキュー130からラウンドロビン方式で1つのキューを処理対象のキューとして選択する。即ち、空でないキューが順番に処理対象のキューとして選択される。ここで、空でないキューとは、メッセージを1つ以上記憶しているルーティング処理待ちキュー120、及びMPFOリスト141又はFIFOリスト142にメッセージが記憶されている場合の送信処理待ちキュー130である。MPFOリスト141又はFIFOリスト142が空でない場合、送信処理待ちキュー130は、MPFOリスト141又はFIFOリスト142に記憶されたメッセージへのポインタを記憶していてもよい。そして、ポインタの有無により、送信処理待ちキュー130が空であるか否かが判定されてもよい。以下では、空でないキューを、アクティブなキューとも称する。
図2に示した例において、キュー#5が前回選択された場合、次回はキュー#6が選択される。
【0036】
ラウンドロビン方式でアクティブなキューが順番に処理対象のキューとして選択されることにより、ルーティング処理又は送信処理の一方に過度の計算リソースが割り当てられることが防止される。従って、ルーティング処理及び送信処理に公平に計算リソースを分配することが可能となる。N及びMは任意に設定可能である。N及びMのバランスにより、ルーティング処理と送信処理とに分配される計算リソースのバランスが決定される。
【0037】
なお、このような優先順位付け処理に関する技術として、参考文献[2]に、ラウンドロビン方式で選択したキューからパケットを取り出して送信するパケットスイッチが開示されている。ただし、本文献での分配対象は、チャネルの帯域幅であり、本発明のように計算リソースではない。
【0038】
(3)ルーティング処理
制御部150は、優先順位付け処理により選択された処理対象のキューに対応するメッセージを処理対象のメッセージとして選択する。詳しくは、制御部150は、優先順位付け処理により選択された処理対象のキューがルーティング処理待ちキュー120である場合、選択されたルーティング処理待ちキュー120の先頭の(即ち、最も先に記憶された)メッセージを、処理対象のメッセージとして選択する。そして、制御部150は、処理対象のメッセージのルーティング処理に計算リソースを割り当てる。
【0039】
ルーティング処理は、メッセージをルーティングテーブルに照合して、送信先のチャネルを決定することを含む。また、ルーティング処理は、ファイアウォールによるメッセージのセキュリティチェック等の様々なチェックを含む。また、ルーティング処理は、ルーティング処理待ちキュー120からMPFOリスト141又はFIFO142リストへのメッセージの移動を含む。制御部150は、メッセージの内容に応じて、移動先のデータ構造を決定する。例えば、制御部150は、CANの制御メッセージをMPFOリスト141に移動させ、CANの診断メッセージをFIFOリスト142に移動させる。また、制御部150は、MPFOリスト141又はFIFOリスト142に記憶されたメッセージへのポインタを、送信処理待ちキュー130に記憶させ得る。
【0040】
以下、
図3を参照して、ルーティング処理の一例を説明する。
図3は、本実施形態に係るゲートウェイ100によるメッセージのルーティング処理の一例を説明するための図である。
図3では、ゲートウェイ100内のデータ構造及び
図2の続きのデータの流れについて図示されている。
図3に示した例では、優先順位付け処理によりキュー#6が選択されたものとする。この場合、キュー#6の先頭のメッセージ10-3のルーティング処理が実行される。これにより、メッセージ10-3は、関連するMPFOリスト141に記憶され、キュー#6から削除される。メッセージ10-3の優先度はMPFOリスト141の既存のメッセージ10-4よりも低いものとする。なお、MPFOリスト又はFIFOリストへのCANメッセージの記憶については、参考文献[1]に詳しく開示されている。
【0041】
(4)送信処理
制御部150は、優先順位付け処理により選択された処理対象のキューに対応するメッセージを処理対象のメッセージとして選択する。詳しくは、制御部150は、優先順位付け処理により選択された処理対象のキューが送信処理待ちキュー130である場合、選択された送信処理待ちキュー130に対応するメッセージを、処理対象のメッセージとして選択する。そして、制御部150は、処理対象のメッセージの送信処理に計算リソースを割り当てる。
【0042】
ここで、送信処理待ちキュー130に対応するメッセージとは、第3の記憶部140に記憶されたメッセージである。詳しくは、制御部150は、MPFOリスト141が空ではない場合、MPFOリスト141で最も優先度が高いメッセージを処理対象のメッセージとして選択する。一方で、MPFOリスト141が空である場合、制御部150は、FIFOリスト142の先頭のメッセージを処理対象のメッセージとして選択する。なお、MPFOリスト141もFIFOリスト142も空であれば、その後の送信処理は実行されない。
【0043】
選択された処理対象のメッセージは、ルーティング処理により決定された送信先のチャネルに対応する送信バッファ112に記憶され、MPFOリスト141又はFIFOリスト142から削除される。そして、送信バッファ112に記憶されたメッセージは送信される。
【0044】
以下、
図4を参照して、送信処理の一例を説明する。
図4は、本実施形態に係るゲートウェイ100によるメッセージの送信処理の一例を説明するための図である。
図4では、ゲートウェイ100内のデータ構造及び
図3の続きのデータの流れについて図示されている。
図4に示した例では、優先順位付け処理によりキュー#7が選択されたものとする。その場合、MPFOリスト141が空ではないため、MPFOリスト141に記憶された中で最も優先度が高いメッセージ10-4が、送信先であるチャネル#5の送信バッファ112#5に記憶され、チャネル#5から送信される。また、MPFOリスト141から送信済みのメッセージ10-4が削除される。
【0045】
(5)補足
優先順位付け処理、ルーティング処理及び送信処理は、割り込みとして又はタスクとして実行され得るが、低遅延の実現のためには、割り込みとして実行されることが望ましい。タスクよりも割り込みの方が優先して実行されるためである。ただし、受信処理の割り込みの方が、優先順位付け処理、ルーティング処理及び送信処理のための割り込み及びタスクよりも、優先して実行される。
【0046】
優先順位付け処理、ルーティング処理又は送信処理のトリガは、タスク又は割り込みのフラグを用いて設定され得る。当該フラグは、例えば、ルーティング処理待ちキュー120、送信処理待ちキュー130、MPFOリスト141及びFIFOリスト142に空でないキュー又はリストがあるか否かを示す。この場合、受信処理の割り込みは、フラグを確認し、空でないことを示すフラグが立っていれば、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクを起動する。さらに、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクは、優先順位付け処理、ルーティング処理又は送信処理を実行後、ルーティング処理待ちキュー120、送信処理待ちキュー130、MPFOリスト141及びFIFOリスト142が空であるか否かを確認し、空でない場合は自身を再度呼び出す。
【0047】
<2.2.処理の流れ>
(1)受信処理の流れ
図5は、本実施形態に係るゲートウェイ100において実行される受信処理の流れの一例を示すフローチャートである。
図5に示すように、まず、チャネル#Xにメッセージが到来すると、制御部150は、到来したメッセージを到来したチャネル#Xに対応する受信バッファ111#Xにバッファする(ステップS102)。次いで、制御部150は、受信バッファ111#Xにバッファされたメッセージを、チャネル#Xに対応するルーティング処理待ちキュー120(キュー#X)に移動させる(ステップS104)。そして、制御部150は、優先順位付け処理、ルーティング処理又は送信処理をトリガする(ステップS106)。
【0048】
(2)優先順位付け処理、ルーティング処理及び送信処理の流れ
図6は、本実施形態に係るゲートウェイ100において実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
図6に示すように、まず、優先順位付け処理、ルーティング処理及び送信処理が受信処理によりトリガされると(ステップS202)、制御部150は、ルーティング処理待ちキュー120及び送信処理待ちキュー130のうち、前回選択したキューの次の空でないキューを選択する(ステップS204)。選択されるキューのインデックスをXとする。次いで、制御部150は、選択されたキュー#Xはルーティング処理待ちキュー120又は送信処理待ちキュー130のいずれであるかを判定する(ステップS206)。選択されたキュー#Xがルーティング処理待ちキュー120である場合、処理はステップS208に進む。一方で、選択されたキュー#Xが送信処理待ちキュー130である場合、処理はステップS226に進む。なお、これらの処理は、優先順位付け処理に相当する。
【0049】
ステップS208においては、制御部150は、キュー#Xから先頭のメッセージを選択する。次いで、制御部150は、選択したメッセージがMPFOメッセージ又はFIFOメッセージのいずれであるかを判定する(ステップS210)。選択したメッセージがFIFOメッセージである場合、制御部150は、ルーティングを行い、メッセージをFIFOリスト142に移動させる(ステップS212)。一方で、選択したメッセージがMPFOメッセージである場合、制御部150は、ルーティングを行い、メッセージをMPFOリスト141に移動させる(ステップS214)。ここで、MPFOリスト141又はFIFOリスト142に記憶されたメッセージへのポインタが、送信処理待ちキュー130に記憶され得る。ステップS212又はS214の後、処理はステップS216に進む。なお、これらの処理は、ルーティング処理に相当する。
【0050】
ステップS216においては、制御部150は、MPFOリスト141が空であるか否かを判定する。MPFOリスト141が空でないと判定された場合、制御部150は、MPFOリスト141から最も優先度の高いメッセージを選択する(ステップS218)。その後、処理はステップS224に進む。一方で、MPFOリストが空であると判定された場合、制御部150は、FIFOリスト142が空であるか否かを判定する(ステップS220)。FIFOリスト142が空であると判定された場合、処理は再度ステップS204に戻る。一方で、FIFOリスト142が空でないと判定された場合、制御部150は、FIFOリスト142から先頭のメッセージを選択する(ステップS222)。その後、処理はステップS224に進む。ステップS224においては、制御部150は、ルーティング処理により決定された送信先のチャネルへメッセージを送信し、MPFOリスト141又はFIFOリスト142から送信済みのメッセージを削除する。これに伴い、削除された送信済みのメッセージへのポインタが、送信処理待ちキュー130から削除される。その後、処理はステップS226に進む。なお、これらの処理は、送信処理に相当する。
【0051】
ステップS226においては、制御部150は、キュー、MPFOリスト141及びFIFOリスト142が空であるか否かを判定する。少なくともひとつが空でないと判定された場合、処理はステップS204に戻る。一方で、全てが空であると判定された場合、処理は終了する。
【0052】
<<3.第2の実施形態>>
<3.1.概要>
第1の実施形態では、空でないキューがラウンドロビン方式で順番に選択されて、計算リソースが割り当てられていた。このような割り当て方式は、2つの理由で完全に公平であるとは言い難い。
【0053】
第1の理由は、長いメッセージの処理時間は短いメッセージの処理時間と比較して長いにも関わらず、ラウンドロビン方式ではメッセージの長短によらずに処理対象が選択されることである。このことは、長いメッセージは短いメッセージと比較して多い計算リソースを獲得できることを意味し、換言すると、長いメッセージは短いメッセージと比較して優先されることを意味する。
【0054】
第2の理由は、ルーティング処理の処理時間は送信処理の処理時間と比較して長いにも関わらず、ラウンドロビン方式ではこの処理時間の差によらずに処理対象が選択されることである。このことは、ルーティング処理は送信処理と比較して多い計算リソースを獲得できることを意味し、換言すると、ルーティング処理は送信処理と比較して優先されることを意味する。
【0055】
そこで、第2の実施形態では、メッセージのサイズ及び適用される処理の種類に応じた処理時間が発生する場合であっても、計算リソースの割り当ての公平性を確立することが可能な仕組みを提供する。具体的には、制御部150は、メッセージの処理時間に応じて計算リソースの割り当てを行う。
【0056】
ここで、計算リソース(例えば、CPUの処理時間)の共有の粒度は、1クロックの時間であることが理想的であると考えられる。換言すると、クロックサイクルごとに処理対象のキューを切り替えながら、アクティブなキューの先頭のメッセージを処理すること、即ち並列的に処理することが理想的であると言える。しかしながら、このような理想的な仕組みは現実的ではない。なぜならば、少なくともルーティング処理は、1クロックサイクルで完了するものではない上に、分割が困難なためである(即ち、不可分操作(atomic operation)である)。メッセージの送信処理もまた、不可分操作(atomic operation)である。ルーティング処理を中断して数クロック後に復帰したり、メッセージの送信を中断して数クロック後に復帰したりすることは、現実的ではない。
【0057】
そこで、本実施形態に係る制御部150は、優先順位付け処理において、メッセージの処理が終了する予定の時刻(以下、終了予定時刻とも称する)に基づいて、処理対象のキューを選択する。具体的には、制御部150は、ルーティング処理待ちのメッセージ及び送信処理待ちのメッセージの各々の処理の終了予定時刻を計算し、終了予定時刻が最も早いメッセージを処理対象のメッセージとして選択する。制御部150は、キュー#Xに新たなメッセージi(又はメッセージiへのポインタ)が記憶されると、メッセージiよりも前にキュー#Xに記憶されたメッセージの終了予定時刻を加味して、メッセージiの終了予定時刻を計算する。詳しくは、制御部150は、終了予定時刻の計算対象のメッセージと同一のキューに記憶されるメッセージであって計算対象のメッセージの前に処理されるメッセージの終了予定時刻又は計算対象のメッセージがキューに記憶された時刻のうち遅い方に、計算対象のメッセージの処理時間を加算することで、計算対象のメッセージの終了予定時刻を計算する。数式で表すと、制御部150は、終了予定時刻FX[i]を次式に従って計算する。
FX[i]=Max(FX[i-1],AX[i])+PX[i] …(1)
【0058】
ここで、Xはキューのインデックスであり、iは、キュー#Xにおけるメッセージのインデックスである。FX[i-1]は、キュー#Xに記憶された、メッセージiのひとつ前のメッセージの終了予定時刻である。AX[i]は、メッセージiがキュー#Xに記憶された時刻である。PX[i]は、メッセージの処理時間である。ただし、処理時間は、計算対象のメッセージのサイズ及び適用される処理の種類に依存する。即ち、PX[i]は、メッセージのサイズが大きいほど大きい値であり、サイズが小さいほど小さい値である。また、PX[i]は、メッセージに適用される処理がルーティング処理であるか送信処理であるか(即ち、キュー#Xがルーティング処理待ちキュー120であるか送信処理待ちキュー130であるか)に応じて決定される。なお、PX[i]は、図示しない記憶部に予め記憶されたルックアップテーブルを参照することで、求められ得る。かかるルックアップテーブルは、メッセージのサイズ及び適用される処理の種類と処理時間との対応付けを複数含むテーブルである。
【0059】
なお、メッセージiが記憶される前はキュー#Xが空であった場合(即ち、i=1である場合)、制御部150は、終了予定時刻FX[1]を次式に従って計算する。
【0060】
FX[1]=AX[1]+PX[1] …(2)
【0061】
制御部150は、上記数式(1)又は(2)に従い、アクティブなキューの各々に記憶されたメッセージについてFX[i]を計算する。そして、制御部150は、各キューの先頭のメッセージのうち、終了予定時刻FX[i]が最も早いメッセージを処理対象のメッセージとして選択する。
【0062】
終了予定時刻に基づいて処理対象のメッセージが選択されることにより、以下に説明するように、ゲートウェイ100は、上述した理想的な仕組みと同様にメッセージを処理することができる。
【0063】
詳しくは、PX[i]が、メッセージのサイズに依存するので、長いメッセージ及び短いメッセージに、公平に計算リソースを割り当てることができる。また、PX[i]が、メッセージに適用される処理の種類に依存するので、ルーティング処理及び送信処理に、公平に計算リソースを割り当てることができる。このように、第2の実施形態では、上述した2つの理由による割り当て方式の不公平性を、解消することができる。
【0064】
また、FX[i]の計算にFX[i-1]又はAX[i]が加味されるので、メッセージiの処理が開始される予定の時刻に基づいて終了予定時刻が計算される。これにより、キュー毎に異なり得るメッセージの処理ペースを反映した、メッセージの終了予定時刻を計算することが可能となる。
【0065】
以上説明したように、本実施系形態では、終了予定時刻は、処理が開始される予定の時刻にメッセージの処理時間を加算することで計算される。従って、本実施形態では、メッセージの処理が終了する順番は、上述した理想的な仕組みにおいてメッセージの処理が終了する順番と同様となる。つまり、終了予定時刻に基づいて処理対象のメッセージを選択することは、上述した理想的な仕組みにおける、あるキューから他のキューへクロックサイクルごとに処理対象を移しながらメッセージを処理することをモデル化している、と言える。実際、終了予定時刻に基づいて処理対象のメッセージを選択する場合、上述した理想的な仕組みと本質的に同一の振る舞いが実現されることが、先行文献[3]において数学的に証明されている。
【0066】
ただし、上述した理想的な仕組みのように、アクティブなキューの先頭のメッセージが並列的に処理される場合、アクティブなキューの数によってメッセージの処理速度は変化する。この概念を優先順位付け処理に反映するために、本実施形態では、仮想時刻(virtual Time)が導入される。仮想時刻は、適宜更新される。仮想時刻は、現在の実時刻と前回更新時の実時刻との差を、ルーティング処理待ちキュー120及び送信処理待ちキュー130のうち空でないキューの数で割った値を、前回更新時の仮想時刻に加算することで更新される。数式で表すと、制御部150は、仮想時刻Tvirを次式に従って計算する。
Tvir=Tvirold+(Tnow-Told)/Q …(3)
【0067】
ここで、Tviroldは、前回更新時の仮想時刻である。Tnowは、現在の実時刻である。Toldは、仮想時刻の前回更新時の実時刻である。Qは、アクティブなキューの数である。上記数式(3)を参照すると、アクティブなキューの数に応じて仮想時刻の更新幅が増減し得る。例えば、アクティブなキューが1つである場合、仮想時刻は実時刻と同一である。一方で、アクティブなキューが2つである場合、仮想時刻は実時刻と比較して2倍遅く(即ち、1/2の早さで)進む。このことは、上述した理想的な仕組みにおいて、アクティブなキューの増減により、並列的に処理されるメッセージの処理速度が増減することに対応する。
【0068】
仮想時刻は、ルーティング処理待ちキュー120又は送信処理待ちキュー130に新たなメッセージ(又は新たなポインタ)が追加される度に、更新される。他に、仮想時刻は、ルーティング処理待ちキュー120及び送信処理待ちキュー130のうち空でない、即ちアクティブなキューの数が増減する度に更新されてもよい。
【0069】
仮想時刻は、終了予定時刻の計算において、計算対象のメッセージがキューに記憶された時刻AX[i]に代えて用いられる。即ち、制御部150は、計算対象のメッセージと同一のキューに記憶されるメッセージであって計算対象のメッセージより先に処理されるメッセージの終了予定時刻又は仮想時刻のうち遅い方に、計算対象のメッセージの処理時間を加算することで、計算対象のメッセージの終了予定時刻を計算する。数式で表すと、制御部150は、終了予定時刻FX[i]を次式に従って計算する。
FX[i]=Max(FX[i-1],Tvir)+PX[i] …(4)
【0070】
なお、メッセージiが記憶される前はキュー#Xが空であった場合(即ち、i=1である場合)、制御部150は、終了予定時刻FX[1]を次式に従って計算する。
【0071】
FX[1]=Tvir+PX[1] …(5)
【0072】
仮想時刻の導入により、アクティブなキューの増減に起因するメッセージの処理速度の増減を、終了予定時刻に反映することができる。これにより、ゲートウェイ100は、上述した理想的な仕組みにより近い、計算リソースの割り当てを実現することができる。
【0073】
<3.2.各種処理>
以下、本実施形態に係るゲートウェイ100により実行される各種処理について詳細に説明する。本実施形態に係るゲートウェイ100の構成は、
図1を参照して上記説明した通りである。以下では、N=6とし、M=7として説明する。この場合、ルーティング処理及び送信処理に使用可能な計算リソースの約14%((M-N)/M)が送信処理のために割り当てられ、残りの約86%(N/M))がルーティング処理に割り当てられる。
【0074】
(1)受信処理
ネットワークからメッセージが到来してネットワークインタフェース110の受信バッファ111に記憶されると、割り込みがトリガされる。割り込みは、受信したメッセージを、メッセージが到来したチャネルに対応するルーティング処理待ちキュー120の最後尾に移動させる。その際、まず、制御部150は、上記数式(3)に基づいて仮想時刻Tvirを計算する。
【0075】
次いで、制御部150は、上記数式(4)又は(5)に基づいて終了予定時刻FX[i]を計算して、メッセージに対応付けてルーティング処理待ちキュー120に記憶する。メッセージの移動先のルーティング処理待ちキュー120が移動前には空であった場合、Qをインクリメントする。また、制御部150は、次式のように、Tvir及びTnowをTvirold及びToldに上書きする。
Tvirold=Tvir, Told=Tnow …(6)
【0076】
【0077】
図7は、本実施形態に係るゲートウェイ100によるメッセージの受信処理の一例を説明するための図である。
図7では、ゲートウェイ100内のデータ構造及びデータの流れについて図示されている。なお、キュー#1~#6はルーティング処理待ちキュー120であり、キュー#7は送信処理待ちキュー130である。キュー#1、キュー#2、及びキュー#4には、メッセージ10-1、10-2、及び10-3、並びに各々のメッセージの終了予定時刻F
1[1]、F
2[1]、F
4[1]が記憶されている。また、MPFOリスト141にはメッセージ10-4が記憶され、FIFOリスト142にはメッセージ10-5が記憶されている。また、キュー#7には、メッセージ10-4へのポインタ11-1及びメッセージ10-4の終了予定時刻F
7[1]、並びにメッセージ10-5へのポインタ11-2及びメッセージ10-5の終了予定時刻F
7[2]が記憶されている。
【0078】
図7に示した例では、チャネル#1に到来したメッセージ10-6が、チャネル#1の受信バッファ111#1に記憶され、その後キュー#1の最後に配置されて、チャネル#1の受信バッファから削除される。キュー#1の先頭にはメッセージ10-1が既に記憶されており空でないので、メッセージ10-6はキュー#1の2番目に記憶され、Qはインクリメントされない。
【0079】
なお、各キュー及びリストにおいて、下方に記載されたメッセージほど出力順が早く、再下端のメッセージは先頭のメッセージである。例えば、キュー#1の先頭はメッセージ10-1であり、2番目がメッセージ10―6である。
【0080】
(2)優先付け処理
優先順位付け処理とは、処理対象のキューを選択することである。詳しくは、制御部150は、ルーティング処理待ちキュー120及び送信処理待ちキュー130からひとつのキューを処理対象のキューとして選択する。本実施形態では、各キューの先頭のメッセージのうち終了時刻FX[i]が最も早いメッセージを記憶したキューを、処理対象のキューとして選択する。
【0081】
(3)ルーティング処理及び送信処理
優先順位付け処理の後、選択されたキューに対応する処理が実行される。ここで実行されるルーティング処理及び送信処理は、第1の実施形態におけるこれらの処理と同様である。以下、相違点について説明する。
【0082】
-第1の相違点
ルーティング処理後、メッセージは、送信処理待ちキュー130に記憶される。その際、制御部150は、上記数式(3)に基づいて仮想時刻Tvirを計算し、上記数式(6)に基づいてTvir及びTnowをTvirold及びToldに上書きする。また、制御部150は、上記数式(4)又は(5)に基づいて終了予定時刻FX[i]を計算して、メッセージに対応付けて送信処理待ちキュー130に記憶する。
【0083】
ただし、ルーティング処理済みのメッセージがMPFOリスト141又はFIFOリスト142に記憶される場合、送信処理待ちキュー130にメッセージがコピーされなくてもよい。以下では、送信処理待ちキュー130に、FX[i]及びMPFOリスト141又はFIFOリスト142に記憶されたメッセージへのポインタが記憶されるものとする。
【0084】
ここで、MPFOリスト141において、メッセージの送信順序は、各々のメッセージの優先度に基づいて決定される。そのため、MPFOリスト141に新たなメッセージが記憶された場合、送信順序が変更され得る。上記数式(4)によれば、FX[i]はFX[i-1]に依存するので、送信順序が変更されるのであればFX[i]の更新が要される。
【0085】
そのため、制御部150は、キューに記憶されたメッセージのうち新たに挿入されたメッセージよりも低い優先度を有する全てのメッセージについて、終了予定時刻FX[i]を再計算する。制御部150は、再計算の際に、PX[i]として最も長いメッセージの送信のための処理時間を使用してもよい。この場合、送信処理待ちキュー130に記憶された各々のメッセージを区別する必要がなくなるので、計算量を削減することができる。
【0086】
また、制御部150は、必要に応じて、アクティブなキューの数Qを更新する。
【0087】
-第2の相違点
送信処理待ちキュー130は、送信されるメッセージへのポインタを記憶し得る。その場合、送信処理待ちキュー130が優先順位付け処理において選択されることは、MPFOリスト141又はFIFOリスト142の少なくともいずれかが空ではないことを意味する。他方、メッセージが送信されると、送信処理待ちキュー130からメッセージが削除されて、送信処理待ちキュー130が空になり得る。送信処理待ちキュー130が空となった場合、アクティブなキューの数Qは減少する。その場合、制御部150は、上記数式(3)に基づいて仮想時刻Tvirを計算し、上記数式(6)に基づいてTvir及びTnowをTvirold及びToldに上書きする。
【0088】
以上、第1の実施形態と第2の実施形態との相違点について説明した。以下、
図8及び
図9を参照しながら、ルーティング処理及び送信処理の一例を説明する。
【0089】
図8は、本実施形態に係るゲートウェイ100によるメッセージのルーティング処理の一例を説明するための図である。
図8では、ゲートウェイ100内のデータ構造及び
図7の続きのデータの流れについて図示されている。
図8に示した例において、優先順位付け処理によりキュー#4が選択された場合、キュー#4の先頭のメッセージ10-3が関連するMPFOリスト141に記憶され、キュー#4から当該メッセージが削除される。メッセージ10-3の優先度はMPFOリスト141の既存のメッセージ10-4よりも低いものとする。一方で、メッセージ10-3は、MPFOリスト141に記憶されるので、FIFOリスト142に記憶されたメッセージ10-5よりも先に送信される。そこで、キュー#7の、先頭のメッセージ10-4へのポインタ11-1と最後尾のメッセージ10-5へのポインタ11-2との間に、メッセージ10-3へのポインタ11-3が挿入される。そして、メッセージ10-3の終了予定時間F
7[2]が計算され、メッセージ10-5の終了予定時間F
7[3]が再計算される。また、キュー#4が空になったので、Qの数が更新される。
【0090】
図9は、本実施形態に係るゲートウェイ100によるメッセージの送信処理の一例を説明するための図である。
図9では、ゲートウェイ100内のデータ構造及び
図8の続きのデータの流れについて図示されている。
図9に示した例においては、キュー#7が選択されている。キュー#7の先頭には、メッセージ10-4へのポインタ11-1が記憶されている。従って、メッセージ10-4が送信先であるチャネル#6の送信バッファ112#6に記憶され、チャネル#6から送信される。また、MPFOリスト141から送信済みのメッセージ10-4が削除され、キュー#7からポインタ11-1が削除される。
【0091】
(4)補足
優先順位付け処理、ルーティング処理及び送信処理は、割り込みとして又はタスクとして実行され得るが、低遅延の実現のためには、割り込みとして実行されることが望ましい。タスクよりも割り込みの方が優先して実行されるためである。ただし、受信処理の割り込みの方が、優先順位付け処理、ルーティング処理及び送信処理のための割り込み及びタスクよりも、優先して実行される。
【0092】
優先順位付け処理、ルーティング処理又は送信処理のトリガは、タスク又は割り込みのフラグを用いて設定され得る。当該フラグは、例えば、ルーティング処理待ちキュー120、送信処理待ちキュー130、MPFOリスト141及びFIFOリスト142に空でないキュー又はリストがあるか否かを示す。この場合、受信処理の割り込みは、フラグを確認し、空でないことを示すフラグが立っていれば、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクを起動する。さらに、優先順位付け処理、ルーティング処理又は送信処理の割り込み又はタスクは、優先順位付け処理、ルーティング処理又は送信処理を実行後、ルーティング処理待ちキュー120、送信処理待ちキュー130、MPFOリスト141及びFIFOリスト142が空であるか否かを確認し、空でない場合は自身を再度呼び出す。
【0093】
ゲートウェイ100は、複数の送信処理待ちキュー130を有していてもよい。その場合、複数の送信処理待ちキュー130の使い分け方法は任意である。例えば、複数の送信処理待ちキュー130は、それぞれ異なるチャネルを送信先とするメッセージを記憶してもよい。また、複数の送信処理待ちキュー130は、ルーティング処理が終了した順に交互にメッセージを記憶してもよい。
【0094】
<3.3.処理の流れ>
(1)受信処理の流れ
図10は、本実施形態に係るゲートウェイ100において実行される受信処理の流れの一例を示すフローチャートである。
図10に示すように、まず、チャネル#Xにメッセージが到来すると、制御部150は、到来したメッセージを到来したチャネル#Xに対応する受信バッファ111#Xにバッファする(ステップS302)。次に、制御部150は、Tvir=Tvirold+(Tnow-Told)/Qにより仮想時刻Tvirを計算する(ステップS304)。次いで、制御部150は、受信バッファ111#Xにバッファされたメッセージを、チャネル#Xに対応するルーティング処理待ちキュー120(キュー#X)に移動させる(ステップS306)。
【0095】
次に、制御部150は、メッセージの移動前にキュー#Xが空であったか否かを判定する(ステップS308)。空であったと判定された場合(ステップS308/YES)、制御部150は、AX[1]=Tvirとし(ステップS310)、FX[1]=AX[1]+PX[1]を計算し(ステップS312)、Qをインクリメントする(ステップS314)。その後、処理はステップS320に進む。一方で空でなかったと判定された場合(ステップS308/NO)、制御部150は、AX[i]=Tvirとし(ステップS316)、FX[i]=max(FX[i-1],AX[i])+PX[i]を計算する(ステップS318)。その後、処理はステップS320に進む。
【0096】
ステップS320において、制御部150は、Tvirold=Tvir, Told=Tnowとする(ステップS320)。そして、制御部150は、優先順位付け処理、ルーティング処理又は送信処理をトリガする(ステップS322)。
【0097】
(2)優先順位付け処理、ルーティング処理及び送信処理の流れ
図11A及び
図11Bは、本実施形態に係るゲートウェイ100において実行される優先順位付け処理、ルーティング処理及び送信処理の流れの一例を示すフローチャートである。
図11Aに示すように、まず、優先順位付け処理、ルーティング処理及び送信処理が受信処理によりトリガされると(ステップS402)、制御部150は、ルーティング処理待ちキュー120及び送信処理待ちキュー130の先頭のメッセージの終了予定時刻F
X[i]が最も早いキューを選択する(ステップS404)。選択されるキューのインデックスをXとする。次いで、制御部150は、選択されたキュー#Xはルーティング処理待ちキュー120又は送信処理待ちキュー130のいずれであるかを判定する(ステップS406)。選択されたキュー#Xがルーティング処理待ちキュー120である場合、処理はステップS408に進む。一方で、選択されたキュー#Xが送信処理待ちキュー130である場合、処理はステップS432に進む。なお、これらの処理は、優先順位付け処理に相当する。
【0098】
ステップS408においては、制御部150は、キュー#Xから先頭のメッセージを選択する。次いで、制御部150は、選択したメッセージがMPFOメッセージ又はFIFOメッセージのいずれであるかを判定する(ステップS410)。選択したメッセージがFIFOメッセージである場合、制御部150は、ルーティングを行い、メッセージをFIFOリスト142に移動させる(ステップS412)。一方で、選択したメッセージがMPFOメッセージである場合、制御部150は、ルーティングを行い、メッセージをMPFOリスト141に移動させる(ステップS414)。ここで、MPFOリスト141又はFIFOリスト142に移動後のメッセージへのポインタが、送信処理待ちキュー130に記憶される。送信処理待ちキュー130のインデックスを、Mとする。ステップS412又はS414の後、処理はステップS416に進む。ステップS416では、制御部150は、Tvir=Tvirold+(Tnow-Told)/Qにより仮想時刻Tvirを計算する。次に、制御部150は、メッセージの移動前にキュー#Mが空であったか否かを判定する(ステップS308)。空であったと判定された場合(ステップS418/YES)、制御部150は、AM[1]=Tvirとし(ステップS420)、FM[1]=AM[1]+PM[1]を計算し(ステップS422)、Qをインクリメントする(ステップS424)。その後、処理はステップS430に進む。一方で空でなかったと判定された場合(ステップS418/NO)、制御部150は、AM[i]=Tvirとし(ステップS426)、FM[i]=max(FM[i-1],AM[i])+PM[i]を計算する(ステップS428)。その後、処理はステップS430に進む。ステップS430において、制御部150は、Tvirold=Tvir, Told=Tnowとする。その後、処理はステップS440に進む。なお、これらの処理は、ルーティング処理に相当する。
【0099】
図11Bに示すように、ステップS432においては、制御部150は、MPFOリスト141が空であるか否かを判定する。MPFOリスト141が空でないと判定された場合、制御部150は、MPFOリスト141から最も優先度の高いメッセージを選択する(ステップS434)。その後、処理はステップS438に進む。一方で、MPFOリストが空であると判定された場合、制御部150は、FIFOリスト142から先頭のメッセージを選択する(ステップS436)。その後、処理はステップS438に進む。ステップS438においては、制御部150は、ルーティング処理により決定された送信先のチャネルへメッセージを送信し、MPFOリスト141又はFIFOリスト142から送信済みのメッセージを削除し、送信処理待ちキュー130からポインタを削除する。これに伴い、削除された送信済みのメッセージへのポインタが、送信処理待ちキュー130から削除される。その後、処理はステップS440に進む。ステップS440においては、制御部150は、キュー#Xが空であるか否かを判定する。キュー#Xが空でないと判定された場合、処理はステップS446に進む。一方で、キュー#Xが空であると判定された場合、制御部150は、Tvir=Tvirold+(Tnow-Told)/Qにより仮想時刻Tvirを計算する(ステップS442)。次いで、制御部150は、Tvirold=Tvir, Told=Tnow,Q=Q-1とする(ステップS444)。その後、処理はステップS446に進む。なお、これらの処理は、送信処理に相当する。
【0100】
ステップS446においては、制御部150は、全てのキューが空であるか否かを判定する。少なくともひとつが空でないと判定された場合、処理はステップS404に戻る。一方で、全てが空であると判定された場合、処理は終了する。
【0101】
<<4.比較例について>>
以下、上述したゲートウェイ100と、典型的なゲートウェイとを比較する。
【0102】
(1)比較例の説明
図12は、比較例に係るゲートウェイ200の構成の一例を示す図である。
図12に示すように、比較例に係るゲートウェイ200は、6チャネルのネットワークインタフェース210、及びMPFOリスト241及びFIFOリスト242を含む。ゲートウェイ200は、ゲートウェイ100と異なり、受信バッファ、送信バッファ、及びキューを含まない。メッセージが到来すると、ゲートウェイ200は、メッセージのルーティング処理を行い、メッセージに対応するデータ構造にメッセージを記憶する。次いで、ゲートウェイ200は、記憶したメッセージの送信処理を行う。
図12に示した例では、チャネル#1にメッセージ10が到来すると、ゲートウェイ200は、メッセージ10のルーティング処理を行い、MPFOリスト241にメッセージを記憶する。そして、ゲートウェイ200は、MPFOリスト241に記憶されたメッセージをチャネル#6から送信する。
【0103】
ゲートウェイ200においてメッセージの損失を回避するための単純な解決策は、十分に強力な計算機(以下、CPU)を搭載することである。例えば、500kbpsのシリアルバスのCANにおいては、最短のメッセージである1バイトのメッセージは約100[μs](マイクロ秒)で受信される。即ち、ゲートウェイ200が1バイトのメッセージの最初のビットから最後のビットまでを受信するのに100[μs]かかる。受信したメッセージの全てを100[μs]以内で処理可能なCPUがゲートウェイ200に搭載される場合、メッセージの損失は回避可能である。
【0104】
一方で、最長のメッセージである8バイトのメッセージは、約200[μs]で受信される。バッファーオーバーランを回避するためには、8バイトのメッセージも、100[μs]以内に処理可能であることが望ましい。8バイトのメッセージの処理中にも、1バイトのメッセージが到来し得るためである。従って、ワーストケースは、チャネルごとに1メッセージが到来し、各メッセージがCANにおける最大長(8バイト)を有し、到来したメッセージの最初の1ビットが受信されたときからメッセージの処理が開始されるケースである。ワーストケースにおいてメッセージの損失を回避するための条件は、例えばゲートウェイ200が8チャネルを有する場合、CPUが100/8=12.5[μs]以内に8バイトのメッセージを処理することである。
【0105】
しかし、典型的なチャネル数(6~8CANチャネル)及び典型的な車載用CPU(クロック速度が100MHz程度)では、上記条件を満たすことは困難である。上記条件を満たすためには、クロック速度200MHz程度であり及び/又はマルチコアを有する強力なCPUが採用されることが望ましい。しかし、このような強力なCPUの採用は、コストに悪影響を及ぼす。CAN-FDでは、データレートが高くメッセージが長いため、この悪影響は強まる。
【0106】
その上、十分に強力なCPUが採用されて、メッセージの損失が回避されたとしても、メッセージの送信に遅延が生じるおそれが残る。なぜならば、バスの負荷が高い状態においては、ゲートウェイ200は、メッセージの受信を送信よりも優先して、受信したメッセージを送信せずに蓄積し得るためである。例えば、無線でのリプログラミングセッション(over-the-air reprogramming session)においては、ゲートウェイ200は、優先度の低いリプログラミングメッセージを大量に受信すると同時に優先度の高い制御メッセージも受信し得る。メッセージの損失を回避するためにメッセージの受信が優先される場合、優先度の高い制御メッセージを即時送信することが困難となる。このような事態は、リアルタイムシステムでは到底許容されない。
【0107】
メッセージの受信よりも送信を優先することも考えられる。しかし、その場合にはメッセージの損失を回避することが困難になり得る。例えば、上記の無線でのリプログラミングセッションの例においては、ゲートウェイ200は、送信待ちの優先度の低いリプログラミングメッセージを大量にバッファする一方で、高い優先度の制御メッセージの受信に失敗し得る。
【0108】
車載システムのようなリアルタイムシステムの要求を満たすためには、ゲートウェイ200におけるメッセージの受信と送信との間で絶妙なバランスをとることが求められる。そしてこの絶妙なバランスを、メッセージの受信又は送信のいずれを優先するか、といった単純な戦略で実現することは困難である。
【0109】
(2)比較例との比較
本発明の一実施形態(第1又は第2の実施形態)に係るゲートウェイ100は、チャネル数Nよりも多いM個のキューを有し、M個のキューの各々に記憶されたメッセージから所定の優先順位付けアルゴリズムに従って選択したメッセージに、計算リソースを割り当てる。これにより、メッセージの損失を回避するための条件が緩和される。メッセージの損失を回避するための条件は、x[μs]で受信したメッセージをx/M[μs]以内に処理すること、である。
【0110】
例えば、ゲートウェイ100が8チャネル及び9つのキューを有し、1バイトのメッセージを100[μs]以内に受信した場合、100/9=11.1[μs]以内に当該メッセージを処理することが求められる。この処理時間は、ゲートウェイ200と同レベルである。一方で、ゲートウェイ100が8チャネル及び9つのキューを有し、8バイトのメッセージを200[μs]以内に受信した場合、200/9=22[μs]以内に当該メッセージを処理することが求められる。この処理時間は、ゲートウェイ200の約2倍である。即ち、ゲートウェイ100は、ゲートウェイ200に搭載されるCPUの約半分の処理能力CPUでも、メッセージの損失を回避することが可能である。
【0111】
さらに、本実施形態では、計算リソースの(M-N)/Mが、メッセージの送信のために割り当てられる。例えば、9つのキューを有する8チャネルのゲートウェイでは、計算リソース(例えば、CPUの処理時間)の11%はメッセージの送信に費やされる。もちろん、キューの数は、チャネル数、及びCPUの計算リソースのうちメッセージに送信に割り当てる割合の要求に応じて、任意に調整可能である。
【0112】
このように、ゲートウェイ100は、処理能力の低い(即ち、コストが安い)CPUでもメッセージの損失を回避することができる。また、ゲートウェイ100は、受信メッセージの負荷が高い状況でも、送信機会を確保することができる。
【0113】
<<5.補足>>
以上、添付図面を参照しながら本発明の好適な実施形態について詳細に説明したが、本発明はかかる例に限定されない。本発明の属する技術の分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本発明の技術的範囲に属するものと了解される。
【0114】
なお、本明細書において説明したゲートウェイ100は、単独の装置として実現されてもよく、一部または全部が別々の装置として実現されても良い。例えば、
図1に示したゲートウェイ100の機能構成例のうち、制御部150は、ゲートウェイ100を制御するコンピュータ等の制御装置に備えられていても良い。その場合、ネットワークインタフェース110、ルーティング処理待ちキュー120、送信処理待ちキュー130、及び第3の記憶部140の状態や記憶されたメッセージを示す情報が制御装置に送信される。そして、制御装置内の制御部150は、受信した情報に対する各種処理を行う。
【0115】
また、本明細書において説明したゲートウェイ100による一連の処理は、ソフトウェア、ハードウェア、及びソフトウェアとハードウェアとの組合せのいずれを用いて実現されてもよい。ソフトウェアを構成するプログラムは、例えば、ゲートウェイ100の内部又は外部に設けられる記憶媒体(非一時的な媒体:non-transitory media)に予め格納される。そして、当該プログラムは、例えば、コンピュータによる実行時にRAMに読み込まれ、CPUなどのプロセッサにより実行される。
【0116】
また、本明細書においてフローチャート及びシーケンス図を用いて説明した処理は、必ずしも図示された順序で実行されなくてもよい。いくつかの処理ステップは、並列的に実行されてもよい。また、追加的な処理ステップが採用されてもよく、一部の処理ステップが省略されてもよい。
【0117】
なお、上記で引用した参考文献は、以下の通りである。
[1]Sergio Campoy-Martinez, Vincent Bidault: “Method and device for transmitting frames between two CAN buses”, WO2014127866 (A1), Renault S.A.S., priority date 2013/02/21
[2]John Nagle: "On packet switches with infinite storage," RFC 970, IETF, December 1985.
[3]Albert Greenberg, Neal Madras: “How fair is fair queuing?”, Journal of the ACM, Volume 39 Issue 3, July 1992, pp. 568-598.
【符号の説明】
【0118】
100 ゲートウェイ
110 ネットワークインタフェース
111 第4の記憶部、受信バッファ
112 第5の記憶部、送信バッファ
120 第1の記憶部、ルーティング処理待ちキュー
130 第2の記憶部、送信処理待ちキュー
140 第3の記憶部
141 MPFOリスト
142 FIFOリスト
150 制御部
200 比較例係るゲートウェイ