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

目录

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.mzph.cn/bicheng/62185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NIO三大组件

现在互联网环境下,分布式系统大相径庭,而分布式系统的根基在于网络编程,而netty恰恰是java领域的网络编程的王者,如果要致力于并发高性能的服务器程序、高性能的客户端程序,必须掌握netty网络编程。 NIO基础 NIO是从ja…

Vue3 el-table 默认选中 传入的数组

一、效果&#xff1a; 二、官网是VUE2 现更改为Vue3写法 <template><el-table:data"tableData"border striperow-key"id"ref"tableRef":cell-style"{ text-align: center }":header-cell-style"{background: #b7babd…

【Python】绝地求生PUBG等FPS游戏辅助压枪软件脚本编写

【Python】绝地求生PUBG等FPS游戏辅助压枪软件脚本编写 更新以gitee为准&#xff1a; https://gitee.com/Mike_Zhou_Group/PUBG_Key/开源的是辅助压枪软件 不开源的是将之前的地图测距和压枪辅助整合在一起的整合包 关于地图测距&#xff1a; https://gitee.com/Mike_Zhou_G…

深度学习使用LSTM实现时间序列预测

大家好&#xff0c;LSTM是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题&#xff0c;特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…

kafka进阶_2.存储消息

文章目录 一、存储消息介绍二、副本同步2.1、数据一致性2.2、HW在副本之间的传递 如果想了解kafka基础架构和生产者架构可以参考 kafka基础和 Kafka进阶_1.生产消息。 一、存储消息介绍 数据已经由生产者Producer发送给Kafka集群&#xff0c;当Kafka接收到数据后&#xff0c…

HTML飞舞的爱心

目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色…

leetcode 3206. 交替组 I 简单

给你一个整数数组 colors &#xff0c;它表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] 1 表示第 i 块瓷砖的颜色是 蓝色 。 环中连续 3 块瓷砖的颜色如果是 交替 颜色&…

拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流

在前端开发的世界里&#xff0c;我们总是在不断追寻更高效、更简洁的方式来构建令人惊艳的用户界面。而今天&#xff0c;我要向大家隆重介绍一款具有创新性的工具 ——NoCss.js&#xff0c;它将彻底颠覆你对传统前端开发的认知&#xff0c;引领我们进入一个全新的无 CSS 编程时…

基于QT实现贪吃蛇

0.项目展示 1.游戏大厅界面搭建 1.1 效果展示 1.2 背景添加 通过重写paintEvent事件来绘画界面 部分窗口大小&#xff0c;标题&#xff0c;图标的优化 1.3 开始按钮 使用CSS机制&#xff0c;添加样式&#xff0c;去掉边框 1.4 跳转游戏界面 1.5 问题&#xff1a;如何实现…

Navicat 预览变更sql

需求 用了Flyway&#xff08;数据库迁移工具&#xff09;后&#xff0c;需要记录变更sql&#xff0c;所以要知道变更sql。 查看方式 Navicat提供了预览变更sql功能&#xff0c;右击表---->设计表&#xff0c;比如修改字段后&#xff0c;点击SQL预览标签页&#xff0c; 顺…

数据结构——用数组实现栈和队列

目录 用数组实现栈和队列 一、数组实现栈 1.stack类 2.测试 二、数组实现队列 1.Queue类 2.测试 查询——数组&#xff1a;数组在内存中是连续空间 增删改——链表&#xff1a;链表的增删改处理更方便一些 满足数据先进后出的特点的就是栈&#xff0c;先进先出就是队列…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介&#xff1a;介绍 TM-16多线激光雷达 在8210A载板&#xff0c;TX2核心模块环境&#xff08;Ubuntu18.04&#xff09;下测试ROS驱动&#xff0c;打开使用RVIZ 查看点云数据&#xff0c;本文的前提条件是你的TX2里已经安装了ROS版本&#xff1a;Melodic。 大家好&#xff0c;…

安装QT6.8(MSVC MinGW)+QT webengine+QT5.15.2

本篇主要针对只使用过QT5的qmake&#xff0c;没有用过MSVC&#xff0c;VS的老同学。 建议一部分一部分安装&#xff0c;全部勾选安装遇到问题会中断&#xff0c;前功尽弃。 我自己需要的是QT5&#xff0c;编出的软件用在公司设备上。 QT6&#xff1a;建议也安装学习&#xf…

【我在CSDN成长】我的五周年创作纪念日

感叹 五年的时光匆匆而过&#xff0c; 像一阵风&#xff0c;拂过岁月的湖面&#xff0c; 泛起层层涟漪&#xff0c;又悄然离去。 曾经的欢笑与泪水&#xff0c; 那些奋斗的日夜&#xff0c; 如同电影般在脑海中放映&#xff0c; 却已成为遥远的回忆。 五年&#xff0c;说长不长…

使用 Docker Compose 来编排部署LMTNR项目

使用 Docker Compose 来部署一个包含 Linux、MySQL、Tomcat、Nginx 和 Redis 的完整项目的例子。假设我们要部署一个简单的 Java Web 应用&#xff0c;并且使用 Nginx 作为反向代理服务器。 项目目录结构 首先需要确保 Docker 和docker-compose已经安装并正在运行。docker --v…

如何搭建一个小程序:从零开始的详细指南

在当今数字化时代&#xff0c;小程序以其轻便、无需下载安装即可使用的特点&#xff0c;成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业&#xff0c;小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序&#xff0c;本文将为你提供一个从零开始的详细…

Spring Boot教程之十: 使用 Spring Boot 实现从数据库动态下拉列表

使用 Spring Boot 实现从数据库动态下拉列表 动态下拉列表&#xff08;或依赖下拉列表&#xff09;的概念令人兴奋&#xff0c;但编写起来却颇具挑战性。动态下拉列表意味着一个下拉列表中的值依赖于前一个下拉列表中选择的值。一个简单的例子是三个下拉框&#xff0c;分别显示…

数据结构 【双向哨兵位循环链表】

链表的结构分为8中&#xff0c;其实搞懂了单链表和双向哨兵位循环链表&#xff0c;这部分的知识也就掌握的差不多了。双向哨兵位循环链表的结构如下&#xff1a; 下面我从0构建一个双向哨兵位循环链表。 1、准备工作 构建节点结构体&#xff0c;双向循环链表的每一个…

RabbitMQ的交换机总结

1.direct交换机 2.fanout交换机

MVC、EL、JSTL

1.MVC设计模式 三层&#xff1a; MVC&#xff1a; M&#xff08;Model&#xff09;模型&#xff1a;负责业务逻辑处理&#xff0c;数据库访问。 V&#xff08;View&#xff09;视图&#xff1a;负责与用户交互。 C&#xff08;Controller&#xff09;控制器&#xff1a;负责流程…