AppOpt

Android 应用 CPU 亲和性管理工具

内容导航

一、快速上手

规则文件/data/adb/modules/AppOpt/applist.conf
手机浏览器打开管理页,可视化添加规则,输入包名、线程名时自动联想;也可直接编辑规则文件。
保存后立即生效,应用无需重启。

二、写规则

应用全部线程包名=核心
指定单个线程包名{线程名}=核心
指定多个线程包名=核心 { 线程名1=核心 线程名2=核心 }

整个应用指定核心

com.tencent.tmgp.sgame=4-7

王者荣耀的全部线程安排到核心 4-7。

只安排应用的某一个线程

com.tencent.tmgp.sgame{UnityMain}=7

把最吃性能的 UnityMain 安排到大核 7。

一次写多条规则(块写法)

com.tencent.tmgp.sgame=0-5 { UnityMain=6-7 UnityGfxDeviceW=6-7 }

应用整体用 0-5,两个线程各自用 6-7;# 或 // 开头的内容是注释。

三、核心怎么写

手机 CPU 的核心分档设计,以骁龙 888 (4+3+1 核心)为例:4 颗小核(0-3)负责省电、3 颗中核(4-6)负责均衡、1 颗大核(7)负责高性能爆发,分工各不相同。

语义核心写法,换设备不用改规则

e-core 小核 · 省电0-3
p-core 中核 · 均衡4-6
hp-core 大核 · 性能7
all-core 全部核心0-7

语义核心写法示例

com.tencent.tmgp.sgame=e-core,p-core { // 0-6 UnityMain=hp-core // 0-3 UnityGfxDeviceW=p-core // 7 }

也可以按核心范围写

4-7 核心 4、5、6、7 4,7 核心 4 与 7 0-3,7 核心 0-3 加 7 e-core,7 名字与编号可混用

四、线程名的通配符

一个游戏动辄几十个线程,一个个写太累。通配符就是名字里的「任意字」,一条规则圈住一批线程。

Unity* → UnityMainUnityGfxDeviceW
*Main → UnityMainGameMain
Thread-? → Thread-1Thread-a
Thread-[0-9]* → Thread-123Thread-0abc
* 匹配任意长度的任意字符
? 匹配任意单个字符
[0-9] 匹配单个数字
[a-z] / [A-Z] 匹配单个小写 / 大写字母

回到第二节的块写法

com.tencent.tmgp.sgame=0-5 { Unity*=6-7 }

两条线程规则并作一条:Unity 开头的线程全部安排到 6-7。

五、实战示例

思路:按占用分核心

划重点:单个线程在任意时刻只能在一个CPU核心上执行指令,其指令流具有顺序性和依赖性,无法被拆分到多个核心并行处理,所以放对了才快。高占用的线程优先给大核,中低占用给中核或小核,避免线程互相争抢资源。

游戏:重负载上大核,其余上中核

com.tencent.tmgp.sgame=0-5 { Unity*=6-7 }

骁龙 8 Elite(中核0-5,大核6-7):Unity 系线程占用最高,绑大核;其余线程绑中核。

性能监测示例

给每个线程各找各的位置

com.tencent.tmgp.sgame=0-6 { UnityMain=7 UnityGfxDeviceW=4-6 Job.worker*=4-6 }

还是王者荣耀,这次换成 4+3+1 的老旗舰 骁龙 888(小核 0-3,中核 4-6,大核 7),像安排座位一样:最累的 UnityMain 坐唯一的大核 7,画面的和干杂活的坐中核 4-6,剩下的随便坐 0-6。

后台传输慢的应用

com.ftpshare=4-7

FTP 共享类应用常跑在小核上导致传文件慢,整体绑到性能核心即可提速。

六、验证效果

  1. 管理页「状态」查看命中应用与绑定线程数
  2. 用 Scene8 等工具观察各线程的 CPU 占用,为其合理分配核心
  3. 合理的 CPU 亲和性规划可以让游戏帧率更稳定的同时功耗更低
💡 聪明的你已经学会了,举一反三去优化你的应用与游戏吧

七、资源下载

支持开发

微信扫一扫