TOPPERSプロジェクト プレス発表
2009年4月23日

TOPPERS/FMPカーネル
TraceLogVisualizer（TLV）

本田 晋也
名古屋大学 大学院情報科学研究科附属組込みシステム研究センター（NCES） 助教
honda@ertl.jp

1

TOPPERS/FMPカーネル

2

組込みシステムにおけるマルチプロセッサの利用
大きく二つの理由により利用が進んでいる
性能向上と消費電力削減の両立• 低性能CPU複数個の消費電力 < 高性能CPU1個の性能• 消極的なマルチプロセッサの利用• ソフトウェアエンジニアとしては高性能で低消費電力なプ
ロセッサが使いたい
要件の異なるサブシステムの組み合わせ• リアルタイム性と高機能性の両立• 携帯電話，カーナビ，NC工作機• サブシステムの設計の容易化• 積極的なマルチプロセッサの利用
3マルチプロセッサ対応RTOSの必要性（1/2）
シングルプロセッサ用RTOSの利用• 各プロセッサに独立にシングルプロセッサ用のリアルタイムOSを載せる（プロセッサによってはOSレスも）プロセッサ間通信• プロセッサ間の同期・通信は，（OSではなく）アプリケーションソフトウェアレベルで実現する必要がある• アプリケーション毎に開発する必要がある• ある処理を別のプロセッサに移そうとすると，同期・通信部分のプログラムの作り直しが必要
アプリレベル通信

タスク12をCore2へ移動

APIが異なるため書き直しが必要

OS APIによる通信
4

マルチプロセッサ対応RTOSの必要性（2/2）
タスクマイグレーション• 動的な負荷分散が必要な場合は，アプリケーションレベルで実現する必要がある• アプリケーション毎の作り込みが必要• それぞれのコアに同じ処理を実行するタスクを用意して，必要に応じで起動するコアを変更する– 実行途中状態での処理の切り替えは困難

5マルチプロセッサ向けOSの機能（1/2）
プロセッサ間通信のサポート• アプリケーション毎にプロセッサ間の同期・通信を実現する必要がないため，開発工数が減少する• プロセッサ内通信と互換の同期・通信機能• ある処理を別のプロセッサに（動的にも静的にも）容易に移動できる

タスク12をCore2へ移動

APIが変わらないため，書き直しは不要

6

マルチプロセッサ向けOSの機能（2/2）
動的な処理の割り当て（場合によっては）• 負荷に応じて，スループットが最大になるよう，処理（タスク）を動的にプロセッサに割り当てる• タスクの途中状態での移動が可能• タスク切り替えと同じタイミングで可能• 組込みシステムにおいては，リアルタイム性の観点からデメリットとなる場合があるので，理解した上で使用することが重要（後述）

動的に実行するコアが決定される

7

OSサポートの視点からのマルチプロセッサの分類
対称型マルチプロセッサOS（SMP-OS）• プロセッサ内通信と互換のプロセッサ間通信• 動的な処理（タスク）の割り当て
非対称型マルチプロセッサOS（AMP-OS）• プロセッサ内通信と互換のプロセッサ間通信• 静的な処理（タスク）の割り当て
SMP-OS

OSの内部構造の違いによる性質から，AMP-OSの方が組込みに適している
場合が多い

AMP-OS

8

TOPPERSプロジェクトで開発したマルチプロセッサ用OS
ITRON仕様をマルチプロセッサ拡張した仕様と実装を開発
非対称型マルチプロセッサ用リアルタイムOS• TOPPERS/FDMPカーネル• FDMP（Function Distributed Multiprocessor）• 2005年にカーネル仕様を公開• 2006年4月にカーネル実装をオープンソースとして公開（1.1）
対称型マルチプロセッサ用リアルタイムOS• TOPPERS/SMPカーネル• SMP（Symmetric MultiProcessor）• EPSONと名古屋大学との共同研究• カーネル仕様を会員向けに公開
9

FDMP/SMPカーネルに対する要望や改良点
動的なタスク移動のサポート（FDMP）• サポート範囲はリアルタイム性とのトレードオフ
リアルタイム性（SMP）• SMPカーネルではリアルタイム性の保障は困難
アーキテクチャ最適化（FDMP/SMP）• 特にメモリアーキテクチャに対する最適化を可能に
カーネルコード共有（FDMP）• メモリのバンク数はプロセッサ数より少く，キャッシュの効率化のためには，カーネルのプログラム（バイナリコード）は，すべてのコアで共有
10

TOPPERS/FMPカーネル : 概要
FMP = Flexible MultiProcessor
リアルタイム性と動的なタスク移動との両立を目指す
コア毎のタスクスケジューリング
• リアルタイム性の確保が（比較的）容易
タスクを移動させるAPIを追加• 負荷変動への対応が可能• マイグレート可能なタイミングは要検討

API(ユーザー)による移動

ポリシとメカニズムの分離

11

TOPPERS/FMPカーネル : 開発状況
開発状況ステータス• ASPカーネルをベースに開発• 2009年5月にオープンソースとして一般公開
サポートプロセッサ• ARM社 MPCore, ALTERA社 NiosII• ARMプロセッサの命令セット シミュレータ SkyEye• リリースには含めないがサポート済み–東芝 MeP, ルネサス SH-X3，SH2A-DUAL
TLVとの連携• 実行トレースをTLVで可視化可能12TraceLogVisualizer（TLV）

13

開発の背景マルチコア環境でのデバッグ• マルチコア環境では各コアが独立に並列動作±ブレークポイントやステップ実行を用いたデバッグが困難

Î実行後のトレースログの解析によるデバッグが有効
トレースログの解析によるデバッグ• RTOSやシミュレータ、エミュレータなどが出力するトレースログを解析することによって動作を確認する• 開発者がトレースログを直接扱うのには限界がある±トレースログのサイズや処理の複雑さによっては解析不可能

Îトレースログの解析を支援するツールの要求Îトレースログを可視化表⽰するツールの開発へ
Îトレースログを可視化表⽰するツールの開発へ
14

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

可視化

[60690867]:[1]:[60690867]:[1]: task
task 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 toto task
task 1.
1.
・・・

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

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

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

組込みシステム向け統合開発環境• 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/

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

TraceLogVisualizer（TLV）
トレースログを可視化表示するツール
開発目標• 汎用性 … ログの形式に非依存化• 拡張性 … 可視化表示項目をプラグイン化✔2009年5月TOPPERSプロジェクトからリリース
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
17

TLVのスクリーンショット
可視化表⽰部
可視化表⽰部

テキストログ表⽰部
テキストログ表⽰部

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

全体表⽰部
全体表⽰部

表⽰項⽬選択部表⽰項⽬選択部

18

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

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

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

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

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

TLVファイル
TLVファイル

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

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

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

TLVデータ

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

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

図形データ⽣成19

今後の取り組み
TraceLogVisualizer（TLV）• TOPPERSプロジェクトのメンバーからのフィードバッグを反映し，一般公開に向けて機能や品質を向上を目指す

TOPPERS/FMPカーネル• 組込システム向けのマイグレーション機構の研究・開発• 実アプリケーションを用いた評価• マルチプロセッサRTOSの検証技術
Îコンソーシアム型研究共同研究で実施（後述）• 保護機能との統合

20