DS-5 Streamline是ARM提供的一个强大的图形化性能分析和抓取工具,其不仅可以用来做CPU的运行时性能分析,最主要的是还可以用来做Mali系列的GPU分析。甚至可以做基本上是Mali上面最强大的GPU性能分析工具。
环境搭建
要想使用Streamline抓取性能必须配置kernel和配置gator。gator是运行在目标机器上的抓取代理,可以以ko的方式运行在内核空间或者以应用程序的方式运行在用户空间,区别是运行在内核空间可以抓取到更多类型的数据。
配置kernel
在kernel4.4上开启如下配置:
CONFIG_PROFILING
CONFIG_PERF_EVENTS
CONFIG_HIGH_RES_TIMERS
CONFIG_MODULES
MODULE_UNLOAD
CONFIG_HW_PERF_EVENTS
CONFIG_CPU_FREQ
CONFIG_MALI_GATOR_SUPPORT
CONFIG_ENABLE_DEFAULT_TRACERS
CONFIG_GENERIC_TRACER or CONFIG_TRACING
以上配置并不是左右的kernel config都包含,可以根据实际的情况选择类似的config开启
下载DS-5 Streamline安装
https://developer.arm.com/products/software-development-tools/ds-5-development-studio/streamline
配置gator和Streamline
本文为了方便起见,仅配置了用户空间的gator
界面如下:
确保adb能够正常连接上,并且运行adb root进入root模式,否则可能出现配置gator错误。
配置步骤:
a. 点击左上角Target寻找目标机器
b. 点击Target栏目下面类似眼睛图像的图标(Browse for a target)
c. 在弹出的对话框中选择Setup Target,勾选Android,并选择对应的目标机器,点击install
d. 在上一级的Connection Browser就可以看到包含gator Agent的机器了,Select它
这样子就完成了gator agent的配置,并且连接上了DS-5 Streamline。
分析和抓取数据
以在RK3399上CNN神经网络在OpenGL ES Shader上运行分析为例子。主要关心GPU 频率、算术管线负载、LS管线负载、纹理管线负载、Triple pipe Cycles、L1 Cache命中率、DDR访问的带宽吞吐等性能指标。
选择Target中的芯片图标,从左边的列表里选择关注的抓取指标。
然后点击,芯片图标旁红色的原点,开始抓取数据。抓取到数据图如下:
选择时间窗口为1.0s进行分析。
可以得出当前OpenGL ES代码运行CNN数据如下:
分析指令执行和负载
帧率:19fps
Fragment Shader计算比例:95.55%
单个Shader算术管线运行指令数目:0.63G
因此通过RK3399 Mali-T864 GPU结构换算后,单帧需要A指令数目:0.265G。可以与TensorFlow理论0.3GFlops计算对比。
Triple pipe Cycles: 778M基本运行在满状态
因此换算算术管线执行效率负载:86.2% LS管线:6.0% T纹理管线:36.3%,性能瓶颈在于算术计算。应该优化Shader的执行代码。
分析带宽和cache命中率
L2 Cache中每秒从memory中读取1.95G写出0.84G数据,单帧带宽消耗146M。对于RK3399双通道DDRC来说还是比较轻松的。带宽上不存在太大的影响。
L1 Cache命中率可以由hits除以操作次数来换算,读取的操作命中率为95%,可以说是一个相当高的水平。
A Pipeline Cycles等待总线空转的比例为:1.3% 也可以说是一个非常好的值。
因此从带宽和cache命中率来看,性能的瓶颈不在于memory io上面。
总结
DS-5 Streamline是一个利器,ARM要是不收费就好了。