TOPPERSプロジェクト プレス発表
2009年11月18日

トレースログ可視化ツールTraceLogVisualizer（TLV）の一般公開について

名古屋大学 大学院情報科学研究科
附属組込みシステム研究センター（NCES）

1

開発の背景マルチコア環境でのデバッグ• マルチコア環境では各コアが独立に並列動作±ブレークポイントやステップ実行を用いたデバッグが困難
Î実行後のトレースログの解析によるデバッグが有効
トレースログの解析によるデバッグ• RTOSやシミュレータ、エミュレータなどが出力するトレースログを解析することによって動作を確認する• 開発者がトレースログを直接扱うのには限界がある±トレースログのサイズや処理の複雑さによっては解析不可能
Îトレースログの解析を支援するツールの要求Îトレースログを可視化表⽰するツールの開発へ
Îトレースログを可視化表⽰するツールの開発へ
2

2コア上で動くRTOSのトレースログの例±時系列に各コアの動作が分散±膨大な量Ê約1msの間に11個のログ
・・・

可視化

[60690867]:[1]:[60690867]:[1]: tasktask 44 becomes
becomes RUNNABLE.
RUNNABLE.
[60691406]:[1]:[60691406]:[1]: dispatch
dispatch fromfrom task
task 1.
1.
[60691582]:[1]:[60691582]:[1]: dispatch
dispatch to
to tasktask 4.
4.
[60691788]:[1]:[60691788]:[1]: leave
leave toto dly_tsk
dly_tsk ercd=0.
ercd=0.
[60691975]:[1]:[60691975]:[1]: enter
enter toto dly_tsk
dly_tsk dlytim=10.
dlytim=10.
[60692360]:[2]:[60692360]:[2]: enter
enter toto sns_ctx.
sns_ctx.
[60692484]:[1]:[60692484]:[1]: task
task 44 becomes
becomes WAITING.
WAITING.
[60692586]:[2]:leavetosns_ctx[60692586]:[2]: leave to sns_ctx state=0.
state=0.
[60692708]:[1]:[60692708]:[1]: dispatch
dispatch fromfrom task
task 4.
4.
[60692798]:[2]:[60692798]:[2]: enter
enter toto get_pid
get_pid p_prcid=304.
p_prcid=304.
[60692914]:[1]:[60692914]:[1]: dispatch
dispatch to
to tasktask 1.
1.
・・・

Îトレースログを可視化表⽰し解析を⽀援
Îトレースログを可視化表⽰し解析を⽀援
3

既存の可視化ツール
組込みシステム向けデバッガソフトウェア• PARTNER-Jetイベントトラッカー• WatchPoint OSアナライザ

WatchPoint OSアナライザ
https://www.sophiasystems.co.jp/ice/products/watch
point

組込みシステム向け統合開発環境• EvenTrek• QNX System Profiler

EvenTrek
http://www.esol.co.jp/embedd
ed/eb_multicore2.html

Unix系OSのトレースログプロファイラ• Dtrace-Chime (Solaris)• LTTV(Linux)±ログの形式が標準化されていない

LTTV
http://ltt.polymtl.ca/screen
shots/

Î汎用性に乏しい±可視化表示項目が提供されているものに限られる
Î拡張性に乏しい4

TraceLogVisualizer（TLV）
トレースログを可視化表示するツール
開発目標：汎用性と拡張性✔2009年5月 1.0rc リリース （TOPPERSメンバ向け）✔2009年11月 1.1 リリース（一般公開）✔NCESなどで利用

Windows環境で動作

CPU使⽤率CPU使⽤率

RTOS-B
RTOS-B
RTOS-CRTOS-CRTOS-D
RTOS-D
RTOS-A
RTOS-A
シミュレータシミュレータtime=12123s
time=12123s task
task 44 beco…
beco…
time=12324s
time=12324s dispatch
dispatch fr…
fr…
time=13512s
time=13512s dispatch
dispatch to…
to…
2342,
2342, ww a32ae32,
a32ae32, 23,
23, 00 …
…
234a,ra32ae32,20,
234a, r a32ae32, 20, 11 …
…
23ec,23ec, rr a32ae62,
a32ae62, 02,02, 00 …
…

タスクの状態遷移
タスクの状態遷移

標準形式へ変換

RTOS-A
RTOS-A[0867]:[1]:[0867]:[1]: task
task 44 beco…
beco…
[1406]:[1]:dispatch[1406]:[1]: dispatch fr…
fr…
[1582]:[1]:[1582]:[1]: dispatch
dispatch to…
to…

カーネル
カーネル
オブジェクトの変化
オブジェクトの変化
可視化ルール

システムコール
システムコール

ファイル

実⾏タスク
実⾏タスク

図形データ
⽣成

表⽰

式の形
な々
様
グに 対 応ロスー
トレ

様々な情報表⽰が可能

TLV
5

TLVのスクリーンショット
テキストログ表⽰部
テキストログ表⽰部

可視化表⽰
可視化表⽰部
部

表⽰リソース選択部
表⽰リソース選択部

表⽰項⽬選択部
表⽰項⽬選択部
全体表⽰部
全体表⽰部

6

TLV全体像
ユーザが⽤意トレースログ出⼒対象毎に⽤意
結果の保存リソースリソースファイル
ファイル

トレースログトレースログ
ファイル
ファイル
リソースヘッダ
リソースヘッダ
ファイル
ファイル
変換ルール
変換ルール
ファイル
ファイル

TLV
TLV
標準形式変換標準形式
トレースログ

可視化ルール
可視化ルールファイル
ファイル

TLVファイル
TLVファイル

標準形式トレースログと図形標準形式トレースログと図形データをzipで固めたもの
データをzipで固めたもの

読み込むトレースログの形式や読み込むトレースログの形式や標準形式トレースログで扱う標準形式トレースログで扱うリソースなどを定義したファイル
リソースなどを定義したファイル

読み込んだトレースログを変換ルールファイルに従い標準形式のトレースログに変換Ä汎⽤性の実現

TLVデータ

可視化ルールファイルを標準形式トレースログに適⽤し図形データを⽣成Ä拡張性の実現

表⽰✔トレースログファイル以外のファイ✔トレースログファイル以外のファイルはJson形式で記述
ルはJson形式で記述

図形データ⽣成7

TOPPERS/ASPカーネルのカーネルログ表示• タスクの状態変化，システムコール呼び出し，ディスパッチ等を可視化

実行状態
待ち状態

システムコール
呼び出し

ディスパッチ8TOPPERS/FMPカーネルのカーネルログ表示• TOPPERS/FMPカーネル• マルチプロセッサ対応のRTOS，マイグレーションをサポート• マイグレーションの表現方法で2種類用意
タスク視点の表示
コア1

コア視点の表示

マイグレー
ション
コア2

マイグレー
ション
コア1

マイグレー
ション

コア1

マイグレー
ション
コア2

9

TOPPERS組込みコンポーネントシステムの可視化
MainCom

SubComSubsubComtime=714us
time=714us MainCom->SubCom.enter(open)
MainCom->SubCom.enter(open)
time=21780us
time=21780us SubCom->SubsubCom.enter(open)
SubCom->SubsubCom.enter(open)
time=30778us
SubCom->SubsubCom.leave(open;
time=30778us SubCom->SubsubCom.leave(open; retval=0)
retval=0)
time=44866us
time=44866us MainCom->SubCom.leave(open;
MainCom->SubCom.leave(open; retval=0)
retval=0)
time=50868us
MainCom->SubCom.enter(read;len=1)
time=50868us MainCom->SubCom.enter(read; len=1)
time=54892us
time=54892us MainCom->SubCom.leave(read;
MainCom->SubCom.leave(read; retval=0;retval=0; buf=65)
buf=65)time=58837us
time=58837us MainCom->SubCom.enter(read;
MainCom->SubCom.enter(read; len=1)
len=1)
time=68860us
MainCom->SubCom.leave(read;retval=0;
time=68860us MainCom->SubCom.leave(read; retval=0; buf=66)
buf=66)
time=72757us
time=72757us MainCom->SubCom.enter(read;
MainCom->SubCom.enter(read; len=1)
len=1)
time=82780us
time=82780us MainCom->SubCom.leave(read;
MainCom->SubCom.leave(read; retval=0;retval=0; buf=67)
buf=67)
time=86677us
MainCom->SubCom.enter(read;len=1)
time=86677us MainCom->SubCom.enter(read; len=1)
time=96699us
time=96699us MainCom->SubCom.leave(read;
MainCom->SubCom.leave(read; retval=0;retval=0; buf=68)
buf=68)time=99938us
MainCom->SubCom.enter(read;
len=1)
time=99938us MainCom->SubCom.enter(read; len=1)
time=113855us
time=113855us SubCom->SubsubCom.enter(write;
SubCom->SubsubCom.enter(write; buf=0;buf=0; len=1)
len=1)
time=116857us
time=116857us SubCom->SubsubCom.leave(write;SubCom->SubsubCom.leave(write; retval=0)
retval=0)
time=119731us
SubCom->SubsubCom.enter(write;buf=227;
time=119731us SubCom->SubsubCom.enter(write; buf=227; len=1)
len=1)
time=129733us
time=129733us SubCom->SubsubCom.leave(write;
SubCom->SubsubCom.leave(write; retval=0)
retval=0)10

TLV 1.1 における改良点 : スクリプト拡張• 各変換に任意の言語を使用可能に• 変換を外部プロセスで実行する• パイプを通じて通信する• 既存のルールと併用可能

メリット• ログから計算した結果を可視化可能• 使い慣れた言語が利用できる• 言語によっては高速化が期待できる• 外部ツールとの連携が可能• 例: モデル検査機と連携させ、エラーを自動チェックする

ユーザが⽤意外部プロセス

標準形式
変換
プログラム

リソース
リソース
ファイル
ファイル

トレースログトレースログ
ファイル
ファイル

TLV
TLV
標準形式変換標準形式
トレースログ

可視化
プログラム
TLVファイル
TLVファイル

図形データ⽣成
TLVデータ表⽰

11

スクリプト拡張 : ロードとロードアベレージの可視化• スクリプト拡張により可視化（Rubyで269行）

12

TLV 1.1 における改良点 : アプリログ
アプリ（ユーザー）レベルで使用頻度が高い可視化項目を整備する
変換項目例• 変数の値の変化の可視化• 文字列出力の内容の可視化• ユーザー定義状態の変化の可視化• グラフ表示（要スクリプト拡張）
変換ルールの記述なしに可視化が可能• リソースファイルは一部ユーザーが記述する必要がある• syslog(printf)の出力フォーマットを定める
既存の可視化と併用可能• ASP, FMPの可視化と併用可能
13

アプリログ : 変数の値の変化と文字列出力の可視化
アプリ記述
文字列出力の可視化
syslog(“applog strtask : TASK %d : %s.”, 3 “pro..”)
変数の値の変化の可視化
syslog(“applog str : ID %d : %d.“, 1, a)
実行して取得リソースファイル
"a":{"Type":"ApplogStr","Attributes":{“id":“1""str":""}}

入力
出力ログ
文字列出力の可視化[time] applog strtask : TASK 3: pro..
変数の値の変化の可視化[time] applog str : ID 1 : 1
入力

可視化表示
14

TLVの開発体制
開発体制• 名古屋大学 大学院情報科学研究科 ITスペシャリストコースにおけるOJL（On the Job Learning）の開発テーマとして，配属された大学院生らによって開発• 2008年度：修士2年生 1名が配属• 情報処理学会 山下記念研究賞/学生奨励賞 を受賞• 2009年度：修士2年生 2名が配属• 2010年度：修士2年生 2名が配属予定
ITスペシャリストコース• 文部科学省の「先導的ITスペシャリスト育成推進プログラム」に対して，名古屋大学・南山大学・愛知県立大学・静岡大学・6社の企業の共同で提案し採択された「OJLによる最先端技術適応能力をもつ人材育成拠点形成」（OCEAN プロジェクト）により，名古屋大学 大学院情報科学研究科に設置された履修コース
15

OJL: On the Job Learning
OJL (On the Job Learning)• 企業で行われているソフトウェア開発プロジェクトを教材とする実践教育• 教育担当，業務担当の双方が指導• 実開発課題を大学で長期間実施• 学生の教育だけでなく，社会人教育もOJL実施拠点(大学内に設置)

大学

Ó

教員

プロジェクト
マネージャ

実開発課題

企業

Ó
実務者の観点技
術実践
マネジメント

学術的視点
背景知識・理論
企業依存の解説

学生(M1/M2)

開発メンバ
16

OJLテーマ一覧
テーマ名

連携企業

実施大学

システム構成管理技術の研究

トヨタ自動車株式会社

名古屋大学
愛知県立大学

ラベルライターの外国語向けソフトウェア開発

ブラザー工業株式会社

名古屋大学
愛知県立大学

次世代運転支援システムの情報表示系機能を検証するツールの開発

株式会社デンソー

名古屋大学

次世代ＬＡＮプログラム開発

株式会社オートネットワーク技術研究所

名古屋大学

半導体製造装置のＦＡ通信ソフトウェア開発

東京エレクトロンソフトウェア・テクノロジー
ズ株式会社

南山大学

自動販売機制御ソフトウェアの再開発

富士電機リテイルシステムズ株式会社

南山大学

組み込みソフトウエアに向くコンポーネント仕様の研究

アイシン精機株式会社※

名古屋大学

JavaソースコードのCDI(Code Inspection)の開発(株)キャナリーリサーチ※

南山大学

大学事務システムの開発

大学主導

南山大学

Multicore対応リアルタイムOSの開発

大学主導

名古屋大学

※印は 連携6社以外からのテーマ
17

OJL実施の特徴 (修論･共同研究との違い)• 企業PMのプロジェクト管理• 専用の作業室 (機密管理のため)• 週例ミーティングで進捗管理• ドキュメント作成(週報，各種開発成果物等)• 品質管理活動(テスト/レビュー)• 半年ごとに全OJLテーマの発表会

18