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…

Hive-定时清理无用的临时表

背景&#xff1a; 有一个临时库&#xff0c;大家平时开发过程中比较常用&#xff0c;这个库的表的生命周期没有得到很好的管理&#xff0c;日积月累导致无用表增多&#xff0c;所以跟运维提了个方案&#xff0c;定期清理。提出了一个比较简单的方案。 解决方案&#xff1a; sh…

【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…

Python logging 使用笔记

使用 Python 的话用不着像 Java 那样是考虑用 Logback 还是 Log4J 的问题&#xff0c;因为它内置提供了完备功能的 logging 库。虽然 JDK 也有 java.util.logging(JUL), 它的特性其实也不差&#xff0c;如日志级别&#xff0c;输出格式&#xff0c;不同的输出目的地的选择&am…

《C++ 人工智能模型邂逅云平台:集成之路的策略与要点全解析》

在当今数字化浪潮汹涌澎湃的时代&#xff0c;人工智能无疑是引领技术变革的核心力量。而 C以其卓越的性能和高效的资源利用&#xff0c;成为开发人工智能模型的有力武器。与此同时&#xff0c;云平台所提供的强大计算能力、灵活的存储资源以及便捷的服务部署&#xff0c;为人工…

HTML飞舞的爱心

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

Doris实战—构建日志存储与分析平台

构建日志存储与分析平台 日志是系统运行的详细记录,包含各种事件发生的主体、时间、位置、内容等关键信息。出于运维可观测、网络安全监控及业务分析等多重需求,企业通常需要将分散的日志采集起来,进行集中存储、查询和分析,以进一步从日志数据里挖掘出有价值的内容。 针…

leetcode 3206. 交替组 I 简单

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

mysql基本查询使用

/**DDL&#xff1a;操作数据库**/ -- 查询所有数据库 SHOW DATABASES;-- 创建数据库 CREATE DATABASE stu;-- 创建数据库的第二种方式&#xff1a;先判断数据库是否存在&#xff0c;存在就创建 CREATE DATABASE IFNOT EXISTS stu2;-- 删除数据库 DROP DATABASE stu;-- 删除数据…

拥抱极简主义前端开发: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; 顺…

实时数据开发 | 一文理解Flink窗口机制

窗口操作在流处理和批处理之间起到了桥梁的作用。 Flink引擎本质上是流式引擎&#xff0c;认为批处理是流处理的一个特例。因此&#xff0c;通过窗口将流数据划分为有限大小的集合&#xff0c;使得在这些有界的数据集上可以进行批处理风格的计算。 通过配置窗口的参数&#xf…

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

目录 用数组实现栈和队列 一、数组实现栈 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;…

预告|ROS中超好用固定翼仿真开源平台即将上线!

迅翼计划于年底推出基于ROS环境的固定翼上层仿真开发平台。该平台将采用PX4与Gazebo架构&#xff0c;充分融合ROS、PX4和Gazebo三大生态系统&#xff0c;致力于打造最简便、易用的固定翼上层算法仿真平台。 无论您是初学者&#xff0c;还是正在寻找适合的仿真平台进行算法验证&…

什么是 SQL 注入

目录 什么是 SQL 注入&#xff1f; SQL 注入的基本原理 如何发生 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的危害 常见的 SQL 注入攻击场景 什么是 SQL 注入&#xff1f; SQL 注入&#xff08;SQL Injection&#xff09;是一种常见的安全漏洞&#xff0c;攻击…