目前网上关于Mali Graphics Debugger的使用,都是基于Android的,关于linux的没有,写下使用方式,供大家参考,以便后期查询。
阅读《ARM® Mali™ Graphics Debugger User Guide》是了解MGD最全面的途径,里面包括了如何设置MGD和使用MGD。
由于MGD里会直接出现大量OpenGL ES的API,所以也可按需查阅《 OpenGL ES 3.0 Programming Guide 2nd Edition》。
本文所有操作,均可在User Guide中找到。如下所示:
Mali Graphics Debugger v4.7.0下载地址
ARM官网
环境准备
1、在电脑装好MGD,主机为Window版本。
2、准备好使用Mali GPU的目标机,目标机安装linux,本文以Ubuntu 18.04为例。
Mali Graphics Debugger的使用方式相当灵活,官方文档会提供不同平台的使用方式。
linux版本的使用相比Android版的简单很多。
操作如下:
1、关闭两边防火墙,linux下关闭方法如下(ubuntu18.04),window下自行搜索。
//安装防火墙程序
sudo apt-get install ufw
//查看当前防火墙状态
sudo ufw status
//启动防火墙
sudo ufw enable
sudo ufw default deny
//关闭防火墙
sudo ufw disable
2、设置同一网段IP,使主机、目标机可正常通信,可ping通
//linux端设置IP的简单方式,每次开机得重设
sudo ifconfig etho 192.168.0.120
3、push文件(mgddaemon、libinterceptor.so)到目标机指定目录,方法不限。这里我用的是FileZilla,简单好用。
选择目标机对应的架构目录,本文以arm64为例。
以下文件push
4、给mgddaemon添加执行权限,并运行
chmod +x mgddaemon
./mgddaemon
5、MGD端点击设备链接,确保链接正确
6、使用执行Mali给定的库,打开要Debug的应用
//LD_PRELOAD=/path/to/intercept/libinterceptor.so ./your_app
//linux下可运行的OpenGL ES应用程序较少,为简单演示,可以使用glmark2-es为例
//如下方式安装glmark2-es后,即安装在系统目录,任意路径下均可运行glmark2-es
sudo apt-get install glmark2-es -y
LD_PRELOAD=/path/to/intercept/libinterceptor.so glmark2-es
7、至此,链接完成。可以在MGD端抓取想要的信息。
MGD界面介绍
如下图示:
1、显示每帧的运行时长,主要记录如下三个状态,glClear、Renderpass、glDrawArrays以及状态对应执行时长
2、每帧的运行过程,保存每一帧的执行过程。其中,前面带相机的是保存的快照部分,保存完整信息
3、绘制过程的API调用
4、当前帧运行数据,后续会继续说明
5、记录状态信息,后续还会继续说明
如下图示:
1、操作过程中常用按键,包括主机-目标机的链接方法、暂停、下一帧、快照、
2、配置选项,在这里可配置想要获取的状态,分OpenCL、OpenGL ES、Vulkan三大类,每一类中又包含子项
3、点击下方的帧,对应上方的运行状态,可方便查看某帧时长、位置
4、该界面在上面显示API调用顺序,这里显示shader程序。
5、包含多项信息:Statistics、Function Call 、Buffers、Vertices、Uniforms、Target State。在性能、功能调试中,中间数据均可获取。
6、各标题依次为:Assets、Renderbuffer、Framebuffers、Render Pass Dependencies、Textures、Frame Overrides、Shaders、Automated、Trace
综上,该软件基本已获取到图形渲染过程中GPU能获取到的应用的大部分数据,在渲染问题Debug、性能调优中起到很好的支撑作用。
本质,还在GPU厂商在用户态驱动库中的调试手段的界面化展示。