Streamline Performance Analyzer是DS-5套件中一个非常强大的可视化分析工具,可以从用户设计中提取各种Profiling信息以方便系统瓶颈定位和性能优化。ARM Fast Model正越来越多应用于用户的早期软件开发与优化中,Fast Model中针对不同的IP模型实现了丰富的trace source,这些trace source可以通过Fast Model的Model Trace Interface(MTI)加载Plug-in插件来提供给用户相应model的trace数据。Fast Model package包括一些自带的示例插件,比如TarmacTrace Plug-in, GenericTrace Plug-in等,同时也允许用户根据自己的需求创建自己的MTI Plug-in。本文重点讨论的是一个将Fast Model Trace source提取用于Streamline图形化分析的插件——FastLine Plug-in。废话少说,先上图:
上图是A73 FastModel 平台上运行Linux在不同参数配置下的一个统计trace结果,其中Fast Model可以通过Timing annotation feature在尽量避免影响仿真速度的情况下对系统进行时间标注,比如Cache的配置以及外存等关键路径的访问延迟等(具体功能后面有机会跟大家专门分享)。这里可以从Streamline分析结果中看出,软件在fast model上的CPU count数,Cache读写命中率,CPU activity的统计,以及与软件运行的不同Thread关联等等重要信息,都可以通过一个小小的FastLine插件从仿真中获取。
下面我们以一个Cortex R8的FVP上运行Bare Mental SW为例简要说明如何通过Fast Line 插件来抓去Fast Model用于Streamline分析的Trace数据。
1)先准备好Fast Model环境和运行SW(具体步骤请参考Fast Model user guide文档):
这里以Fast model下$PVLIB_HOME/examples/LISA/FVP_VE/Build_Cortex-R8x1为例,运行build.sh(Linux上)会生成对应的Build目录及Model可执行文件Linux64-Release-GCC-4.8/isim_system,运行示例Bare Mental软件为$PVLIB_HOME/images/dhrystone_ve.axf。
2)软件镜像解析:
使用FastModel下面的process-elf.py 脚步对软件进行解析,生成 *.csv文件,解析过程会使用到DS-5中的fromelf程序。这里注意如果是对Linux OS应用程序进行解析,需要调用不同的Python脚本,具体参考Fast Model reference manual 中的Fastline章节 (v10.3)。
$ python $PVLIB_HOME/plugins/source/FastlineTrace/scripts/process-elf.py dhrystone_ve.axf
上述命令会生成文件dhrystone_ve.axf.csv。
3)创建系统与counter配置文件:
使用Fastline 插件需要提供运行的Fast Model 系统配置文件及需要Trace的Counter配置文件,安装目录下$PVLIB_HOME/plugins/config/FastlineTrace 中提供了几个示例配置文件。我们先看system_config_sample.json,FVP_VE/Build_Cortex-R8x1仅有一个cluster, 所以Subsystem就只有一个,比如命名为r8_cluster_config_sample.json。
[ { "Subsystem_name":"*", "Subsystem_config_file":"r8_cluster_config_sample.json" }]
再创建Subsystem配置文件r8_cluster_config_sample.json如下,这里注意app-name即为dhrystone_ve.axf,symbol-info-files为第二步中生成的dhrystone_ve.axf.csv。
{ "operating-system": "none", "sampling-frequency": 500, "app-name": "dhrystone_ve.axf", "app-proc-id": 1000, "symbol-info-files": [ "dhrystone_ve.axf.csv" ], "report-function-activity":false}
最后再创建Counter配置文件sample_counters.json,这里需要提一下Fast Model有个ListTraceSources的Plug-in可以列出不同Fast Model中可以支持的trace souce list。
$ ./isim_system --plugin $PVLIB_HOME/plugins/Linux64_GCC-4.8/ListTraceSources.so > tracesources.txt
进而可以根据自己感兴趣的trace source创建Counter配置文件,例如:
[ { "Path":"FVP_VE_Cortex_R8x1.daughterboard.core.cpu0", "MTISrcName":"BRA_DIR", "Title":"Branch Direct", "CounterName":"FVP_VE_Cortex_R8x1.daughterboard.core.cpu0.BRA_DIR", "Type":"FVP_VE_Cortex_R8x1.daughterboard.core.cpu0.BRA_DIR", "Display":"accumulate", "Units":"units", "AverageSelection":false, "PerCpu":true, "MessageInterval":1 }, ...
]
4)启动仿真dump trace数据:
$ isim_system --plugin $PVLIB_HOME/plugins/Linux64_GCC-4.8/FastlineTrace.so \
-C TRACE.FastlineTrace.config=system_config_sample.json \
-C TRACE.FastlineTrace.counters-config-file=sample_counters.json \
../dhrystone_ve.axf
仿真结束会创建fastmodels.apc文件夹。
5)使用Streamline对dump数据进行分析。
选择StreamLine左侧的文件夹按钮加入fastmodels.apc所在路径,再在Streamline Data中出现的fastmodels上右键点击Analyze,具体Streamline的详细配置请参考DS-5 User Guide 文档。
然后就可以看到你在sample_counters.json 中配置的一些trace source的仿真统计结果,从而方便进一步分析:
(注:目前ARM Fast Model的Fast Line插件还是一个专门的add-on package,如果有需要或感兴趣的同学可以联系ARM来获取相关信息。)