1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DIR Simulatorの紹介:CAN・Ethernet・メモリの待ち時間を可視化する

1
Last updated at Posted at 2026-10-17

はじめに

通信やメモリアクセスを考えるとき、転送そのものにかかる時間に加えて、順番待ちや中継処理、受信後の処理も気になります。

たとえば、CANの送信周期を短くすると送信待ちが増えることがあります。Gatewayの処理時間を変えると、別のバスへ届くタイミングが変わります。SRAMでは、同時に処理できる読み出しの数によって待ち時間が変わります。

こうした条件の違いを、入力データと時系列の結果で確かめるためのツールが DIR Simulator です。

この記事では、DIRでできることと使い方の全体像を紹介します。個別の設定や実験手順は別記事で扱い、このページを入口としてつなげていきます。

GitHubリポジトリでソースとサンプルを公開しています。本記事は公開版v1.1.6を基準にしています。

DIRとは

DIRは、CAN・Ethernetなどの通信や、SoC内のデータ転送、メモリ・IPCを対象とした、Rust製の離散イベント型シミュレータです。IPCは、ここではメールボックスや共有メモリを介したデータの受け渡しを指します。

離散イベント型では、「要求が発生する」「送信を開始する」「処理が完了する」といった出来事を、仮想的な時刻の上で順に処理します。構成や条件を与えると、それに応じた送信順、待ち時間、処理結果などを記録できます。

たとえば、同じ構成のまま送信周期やキュー容量だけを変え、結果の違いを比較できます。条件を一つ変えて、どの待ち時間や結果が変わったかを追う、という使い方ができます。

どんなことを試せるか

主な対象と、確認できる内容の例をまとめます。

対象 確認できることの例
Classical CAN 調停による送信順、送信待ち、キュー満杯時の破棄、受信フィルタや受信処理遅延
CAN FD 与えられた位相ごとのbit数を使った、データ速度と送信時間・待ち時間の比較
複数CANバス・Gateway 別バスへの中継、処理遅延、転送先の送信待ち、受信バッファの保持
Ethernet 優先キュー、VLAN、multicast、配送期限、TSNの送信制御など
SoC内の通信 AXI・AHB・共有バス・NoCの、要求の競合や転送待ち
メモリ・IPC DDRのリフレッシュ、SRAMのポート数、メールボックス容量、DMAのコピー完了と通知

扱う粒度はモデルごとに異なります。CAN FDは外部で算定した位相ごとのbit数を使う時間評価で、SoC・メモリ系などには処理の受け渡しを抽象化したモデルを使います。結果を読むときは、そのモデルが表す範囲と前提を確認します。

通信方式の学習、小さな構成での動作確認、条件を変えた比較実験などが、使い始めやすい用途です。

結果をViewerで確かめる

DIRでは、実行結果をJSONやCSVへ保存できます。さらに、その結果を埋め込んだHTMLを生成し、ブラウザの Viewer で確認できます。

最小CANサンプルを実行したDIR SimulatorのViewer

公開ガイド「初めてのCAN実行」に掲載している実際のViewer画面です。3ノードの最小CAN例を表示しています。画像と数値は同ガイドの基準版v1.1.3で取得したものです。

Viewerでは、構成図とタイムラインを見ながら、次のような内容を確認できます。

  • どのノードが送信し、どのノードが受信したか
  • 送信や処理がいつ始まり、いつ終わったか
  • どこで待ちが発生しているか
  • 選択した時刻に、要求やキューがどの状態だったか

再生や一時停止、時刻指定、前後のイベント時刻への移動ができるため、気になる場面を止めて調べられます。保存済みの結果を表示する仕組みなので、設定を変えた場合はシミュレーションを再実行して比較します。

結果を埋め込んだ単独HTMLは、表示用サーバーを起動せずに開けます。同じ記録を見ながら、送信順や待ち時間を説明する資料としても使えます。

構成・条件・実行を分ける3層モデル

DIRという名前は、Definition・Initialization・Runtime の頭文字です。

層 役割 主に使うもの
Definition(定義) ノードやバスなどの構成、ポート、接続を定義する NED
Initialization(初期化) 実行時間やパラメータを設定し、送信内容などの入力を指定する INIと、そこから参照するJSON
Runtime(実行) モデルの振る舞いを実行し、結果を記録する Rust製の実行エンジンと各モデル

この分け方によって、同じ構成を使いながら条件を変えられます。たとえばCANの配線を保ったまま、ビットレート、送信周期、キュー容量を変えて比較できます。用意されたモデルとサンプルを使う場合は、入力ファイルを編集して実行できます。

構成や入力の編集には、ブラウザで操作するローカルの NED editor も用意しています。構成図を使った編集や、入力の検証・保存に利用できます。

NEDは構造記述の対応サブセットを扱い、INIはDIR独自の設定仕様です。既存のOMNeT++プロジェクトをそのまま動かす完全互換環境ではありません。

使い始めるまでの流れ

まずは、同梱の小さなCANサンプルから始めると、入力と結果の関係を追いやすくなります。

  1. ソースを取得し、Rustでビルドする。
  2. validateで入力の構文や接続、設定値を確認する。
  3. runで実行し、結果を保存する。
  4. viewでViewer用HTMLを生成し、ブラウザで開く。

そのあとで、条件を一つ変え、別の出力先へ実行して比較します。たとえばビットレートだけを変えると、送信時間や次の要求の待ち時間への影響を確認できます。

動作確認環境はWSL上のUbuntu 24.04 LTS x86_64で、Rust 1.85.0を使用しています。具体的な導入・実行コマンドは、公開ガイドの「初めてのCAN実行」にまとめています。

詳しい使い方と関連記事

最初は「初めてのCAN実行」→「Viewerで結果を読む」→「CANの調停」の順に読むと、一つの実験としてつながります。「設定・用語・FAQ」は、設定や用語を確認したいときに参照してください。

Qiitaで公開した記事

順番 記事
01 初めてのCAN実行
02 Viewerで結果を読む
03 設定・用語・FAQ

分野別の実験と機能リファレンス

分野 扱うテーマ
CAN・CAN FD 調停、受信フィルタ、受信処理遅延、データ速度の比較
Gateway 処理遅延と複数CANバスへの中継
Ethernet 配送期限、優先キュー、VLAN、multicast、動的制御、TSN
SoC内の通信 共有バス、AXI、AHB、NoC
メモリ・IPC SRAM、DDR、共有メモリ、メールボックス、DMA
機能リファレンス 共通基盤、画面操作、各モデル、後続拡張と仕様変更の検討

詳細な説明と実習入力は公開ガイドから読むことができます。Qiitaの記事は公開でき次第、上の一覧へ順に追加します。


出典:DIR SimulatorのREADME、公開ガイド、各モデルの仕様。各実習の測定バージョンは、リンク先の記事に記載しています。

Copyright (c) 2026 DIR Simulator contributors. Licensed under MIT OR Apache-2.0.

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?