Android 常用命令和工具解析之GPU相关

devtools/2024/11/25 15:11:04/

目录

1、GPU基本信息

1.1 获取GPU基本信息

1.2 伪造GPU基本信息

2、GPU内存信息

3、经典案例

案例1:GPU伪造信息方案

案例2:GPU内存统计算法


GPU 指的是 Graphics Processing Unit,即图形处理单元。GPU 是一种专门用于处理图形和图像相关计算任务的处理器,广泛应用于图形渲染、游戏设计、视频编辑、科学计算等领域。
与传统的中央处理单元(CPU)相比,GPU 在处理大规模并行计算时表现更加出色。GPU 可以同时处理多个数据流,执行大量相似的计算任务,适合处理需要高度并行计算能力的工作负载。
在图形应用方面,GPU 通常被用于加速三维图形渲染,使得游戏、虚拟现实(VR)、电影特效等内容的表现更加流畅和真实。此外,GPU 也被广泛应用于机器学习、人工智能等领域,用于加速深度学习网络的训练和推断过程。

1、GPU基本信息

1.1 获取GPU基本信息

可以通过如下命令来获取当前系统或者手机的GPU信息

adb shell "dumpsys SurfaceFlinger | grep "GLES""

如上可以分为三部分,其中第一部分可以理解为此GPU生产公司,ARM表示此GPU采用了ARM架构,Imagination Technologies为另一个平台或者公司的架构,通常简称为IMG

1.2 伪造GPU基本信息

可以通过如下命令来伪造当前系统或者手机的GPU信息,伪造就是认为的更改GPU相关信息:

adb root
adb shell "setprop vendor.debug.gpud.enable '1'"
adb shell "setprop vendor.debug.gpud.process.name ''"
adb shell "setprop vendor.debug.gpud.gl.vendor 'ARM'"
adb shell "setprop vendor.debug.gpud.gl.renderer 'Mali-G52 MC2'"
adb shell "stop;start"
adb shell "dumpsys SurfaceFlinger | grep "GLES""

我们为什么要伪造GPU的信息,因为很多三分应用或者进程,特别是游戏应用会根据不同的GPU,来做出不同的渲染流程,例如MIR4游戏在低端GPU的手机里面调用了不同的opengl纹理来进行图像渲染。来保证兼容一些低端机型的画面流畅,但是这些难免会存在一些bug,例如部分应用在某些机型上出现闪屏或者图像显示不正常,此时我们可以通过伪造来排除GPU的不同导致的问题。

2、GPU内存信息

可以通过如下命令获取GPU内存相关信息:

adb shell cat proc/mtk_mali/gpu_memory   //此条命令只针对MTK,不同平台路径不一样

  • 第一行mali0   141867表示第一块GPU暂时代名为mali0,其总共使用了141867个内存页,注意单位是页,因此转换为kb的计算方法:141867 * 4  =  567468 kb。注意他不是gpu内存容量大小,而是统计了当前系统所有使用gpu mali0的进程的内存页数之和,因此它的数值也是实时在变化。
  • 之后的kctx,表示一个 Kernel Context,具有 ID 0x0000000061e8bc12(可能是某个进程的句柄对象的HASH值)。其中红色框部分表示每个kctx(进程)使用了gpu内存页数,所有的kctx的内存页数之和等于mali0的内存页个数;后面绿色框部分表示每个kctx对应的进程PID,大多数进程通常只会存在一个kctx,但是也有个别应用或者进程拥有多个kctx,例如上图中的PID为25212进程。

3、经典案例

案例1:GPU伪造信息方案

问题描述:com.wemade.mir4global游戏在google play第一次启动的时候出现不支持纹理的提示框,且游戏界面人物显示异常打上了马赛克

问题分析:此游戏在google等对比机上面能够正常使用和显示,并没有此类弹框,根据弹框可以支持提示的此平台的opengl部分纹理格式,且有如下异常日志

最后结论:经过大量测试发现此现象只出现在IMG平台上,MTK做了如下实验,将img的gpu fake to mali(fake的意思就是伪造GPU的型号信息,即三方应用读取GPU的型号出来就不再是IMG二手MAILI)之后就能正常启动

问题总结:此题是APP问题,fake GPU以后游戏显示正常。所以和DDK修改无关。fake GPU有效果。是APP将img的gpu fake to mali的,游戏显示正常了。是MIR4对GPU的型号做了区分,所以表现形式不一样

修改方案:通过代码方式伪造GPU信息为ARM

案例2:GPU内存统计算法

问题描述:Pizza Ready 12.0.0 Screen record in Game mode assist disappear after playing

问题分析:在Android 14的手机上玩Pizza Ready游戏过程中,出现screen record进程被杀,此时dump了该应用内存使用情况,并与对比机进行了对比,发现GL占用相差500M

后对比了多款机器此应用adb shell dumpsys meminfo io.supercent.pizzaidle的表现如下,从此结果可以看出来在Dimensity 6300+kernel 5.15+android 14的平台上必现,在Helio系列的机器均不出现,初步怀疑此问题为平台基线共性问题

后对比了多款机器在其他应用的表现,是否也存在差异如下表,从此表结果可以看出pizzaidle单独应用存在:

最后MTK和Arm给到的回复为GPU统计BUG,即pizzaidle存在多个kctx,之前的统计方式只计算了第一个kctx,因此只有几M,后加入修复patch,轮询统计某进程对应的所有kctx,所以计算出来有500多M,patch如下:


http://www.ppmy.cn/devtools/136862.html

相关文章

QML TableView(Qt_6_5_3_MinGW_64)

P1:alternatingRows : bool P1就是Properties 1,第1个属性的意思 ~ 后面不再赘述 ~ 作用:行背景色是否交替显示 background: Rectangle {color: control.row control.tableView.currentRow? control.palette.highlight: (control.tableV…

oracle的静态注册和动态注册

oracle的静态注册和动态注册 静态注册: 静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 , 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册,在动态注册不稳定时使用,特点是:稳定&…

【Java、Android】序列化:Parcelable 和 Serializable

序列化:Parcelable 和 Serializable 为了把对象的状态保存下来,存到磁盘中,会用到序列化 序列化:内存中的对象—>磁盘反序列化:磁盘中的对象—>内存 1 Serializable 用serialVersionUID辅助,一个…

MySQL出现Waiting for table metadata lock的原因以及解决方法(已亲测)

参考:MySQL出现Waiting for table metadata lock的原因以及解决方法 - digdeep - 博客园 当对表执行truncate\drop 操作时,会出现一直处于等待的状态,通过show processlist可以看到TableA停滞在Waiting for table metadata lock的状态。kill…

Windows操作系统

1. Windows 操作系统的来历 Windows 是由 微软公司(Microsoft) 开发的一系列操作系统,最初作为一种图形用户界面(GUI),它的诞生源于 1980 年代个人计算机的发展需求。 起源:与 MS-DOS 的联系 微…

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律 第一节 电子设计安全要点第二节 欧姆定律 第一节 电子设计安全要点 电路小白最好先买直流稳压电源(将高压转成低压直流电)使用,尽量不要使用市电。 1.尽量不要捏住电源两端。 正确做法&a…

FIFO和LRU算法实现操作系统中主存管理

FIFO&#xff0c;用数组实现 1和2都是使用nextReplace实现新页面位置的更新 1、不精确时间&#xff1a;用ctime输出运行时间都是0.00秒 #include <iostream> #include <iomanip> #include<ctime>//用于计算时间 using namespace std;// 页访问顺序 int pa…

mysql5.7.44 64位版本下载

做系统如果用mysql5升级到8可以完美支持&#xff0c;但是如果用8想恢复到5是不兼容的&#xff0c;所以在此保存下5的下载地址&#xff0c;以防以后找不到了 MySQL :: Download MySQL Community Server (Archived Versions)&#xff0c;点击打开