YukiCpuScheduler 是一款基于 C++ 编写的智能 CPU 调度工具,专为优化 Android 设备的 CPU 性能和功耗表现而设计。通过先进的调度算法和高度可配置的性能模型,它能够根据不同的使用场景动态调整 CPU 频率、总线速度、核心分配策略以及精细的调速器参数,实现最佳的性能与能效平衡。
- 架构支持: ARM64 平台
- 系统版本: Android 9.0 - 15.0
- 权限要求: Root 权限 (Magisk)
| 模式 | 图标 | 描述 | 适用场景 |
|---|---|---|---|
| Powersave | 🔋 | 省电模式 | 在保证基本流畅度的同时,尽可能降低功耗 - 推荐待机或轻度使用 |
| Balance | ⚖️ | 均衡模式 | 提供比原厂设置更流畅且更省电的体验 - 推荐日常使用 |
| Performance | ⚡ | 性能模式 | 提供卓越的流畅度和响应速度,功耗会相应增加 - 推荐大型应用或短时游戏 |
| Fast | 🚀 | 极速模式 | 释放全部性能潜力,所有核心以最高频率运行,忽略能效 - 推荐极限性能测试 |
| 等级 | 描述 |
|---|---|
DEBUG |
用于开发调试的详细信息,包括 Govsets 的写入日志。 |
INFO |
程序运行的关键状态信息。 |
WARNING |
可能存在的问题或异常情况。 |
ERROR |
影响程序运行的错误。 |
💡 是否会对待机功耗产生负面影响?
YukiCpuScheduler 自身采用 C++ 编写,运行功耗极低。通过优化的省电模式,其待机功耗表现通常优于或持平于原厂设置,不会产生负面影响。🔋 为什么使用了 YukiCpuScheduler 后功耗仍然很高?
功耗主要由应用负载决定。YukiCpuScheduler 通过智能控制性能释放来优化能效,但无法减少应用本身的计算量。如果后台应用持续高负载运行,功耗自然会很高。⚙️ 是否还需要关闭系统的 performance boost?
不需要。YukiCpuScheduler 在初始化阶段会自动禁用大部分主流的用户态和内核态性能增强(如 touch boost),以避免冲突,确保调度策略的唯一性。🔄 AffinitySetter 功能是否与其他系统流畅度提升模块冲突?
**会冲突**。`AffinitySetter` 会对一些系统关键进程(如 `surfaceflinger`, `system_server`)进行静态的**进程级**核心绑定优化。为避免冲突,请勿同时使用其他具有类似功能的模块或线程调度模块。🔄 切换情景模式后是否需要重启?
**不需要**。你可以通过修改 `/data/adb/modules/YukiCpuScheduler/config.txt` 文件的内容来实时切换模式,模块会自动监听文件变化并应用新设置。🚀 应用启动加速的频率机制是怎样的?
应用启动时,会根据您当前模式设定的**最大频率**进行临时超频。默认倍率是 `1.2` 倍,持续 `200` 毫秒。您可以在 `AppLaunchBoostSettings` 中自定义这些值。meta:
name: "YukiCpuScheduler Profile"
author: "yuki"
configVersion: 19
loglevel: "INFO" | 字段 | 类型 | 描述 |
|---|---|---|
configVersion |
number | 至关重要。此版本号必须与程序要求的版本完全一致。 |
loglevel |
string | 日志记录详细程度。可选值:DEBUG, INFO, WARNING, ERROR。 |
此部分包含了所有主要功能的总开关。
function:
DisableQcomGpu: true
AffinitySetter: true
CpuIdleScaling_Governor: false
EasScheduler: true
cpuset: true
LoadBalancing: true
EnableFeas: false
AdjIOScheduler: true
AppLaunchBoost: true| 功能 | 类型 | 详细描述 |
|---|---|---|
DisableQcomGpu |
bool | (推荐) 禁用高通 GPU 自有 Boost 机制,避免冲突。 |
AffinitySetter |
bool | (推荐) 对系统关键进程进行静态核心绑定,显著提升UI流畅度。 |
CpuIdleScaling_Governor |
bool | 是否允许自定义 CPU Idle 调速器。详见 CpuIdle 部分。 |
EasScheduler |
bool | 如果内核支持 EAS,开启可应用优化参数。详见 EasSchedulerValue 部分。 |
cpuset |
bool | (推荐) 启用 Cpuset 功能,为不同任务组分配合适的 CPU 核心。详见 Cpuset 部分。 |
LoadBalancing |
bool | 启用 CFS 负载均衡优化,让任务在核心间的分配更合理。 |
EnableFeas |
bool | 是否在极速模式下尝试启用内核的 FEAS 功能。 |
AdjIOScheduler |
bool | 是否允许自定义 I/O 调速器。详见 IO_Settings 部分。 |
AppLaunchBoost |
bool | (推荐) 启用应用启动加速,加快加载速度。 |
此部分定义了您设备的物理核心架构,是所有频率和核心控制功能的基础。必须正确配置!
您需要在这里告诉程序,您设备的不同核心簇分别对应哪个 policy 路径。
- 如何查找? 在 root 终端中查看
/sys/devices/system/cpu/cpufreq/目录。
CoreFramework:
SmallCorePath: 0
MediumCorePath: 2
BigCorePath: 5
SuperBigCorePath: 7此部分为 AffinitySetter 功能提供参数。
CoreAllocation:
cpusetCore: "2-7"
cpuctlUclampBoostMin: "0"
cpuctlUclampBoostMax: "100"| 字段 | 类型 | 描述 |
|---|---|---|
cpusetCore |
string | AffinitySetter 会将系统关键进程绑定到这个指定的核心范围上。 |
cpuctlUclampBoost... |
string | Uclamp 相关的提权参数,通常保持默认。 |
此功能允许您精细控制SoC内部数据总线(LLCC缓存/DDR内存)的频率,对系统响应速度和功耗有显著影响。该功能的配置分为全局路径定义和模式内数值设定两个步骤。
此部分用于一次性告诉程序,控制总线频率的系统文件位于何处。程序会智能判断您填写了几个路径,并只对已填写的路径进行操作。
| 字段名 | 数据类型 | 描述 |
|---|---|---|
CPUllccminPath |
string | 指向 LLCC 缓存最小频率 控制文件的路径 |
CPUllccmaxPath |
string | 指向 LLCC 缓存最大频率 控制文件的路径 |
CPUddrminPath |
string | 指向 DDR 内存最小频率 控制文件的路径 (天玑平台下可指向set_freq文件) |
CPUddrmaxPath |
string | 指向 DDR 内存最大频率 控制文件的路径 |
配置示例(高通平台):
Bus_dcvs_Path:
CPUllccminPath: "/sys/devices/system/cpu/bus_dcvs/L3/soc:qcom,memlat:l3:prime/min_freq"
CPUllccmaxPath: "/sys/devices/system/cpu/bus_dcvs/L3/soc:qcom,memlat:l3:prime/max_freq"
CPUddrminPath: "/sys/devices/system/cpu/bus_dcvs/DDR/soc:qcom,memlat:ddr:prime/min_freq"
CPUddrmaxPath: "/sys/devices/system/cpu/bus_dcvs/DDR/soc:qcom,memlat:ddr:prime/max_freq"配置示例(天玑平台):
Bus_dcvs_Path:
CPUddrminPath: "/sys/class/devfreq/mtk-dvfsrc-devfreq/userspace/set_freq"
# 其他留空在每一个性能模式内部,设定在该模式下希望写入的具体频率数值。
| 字段名 | 数据类型 | 描述 |
|---|---|---|
CPUllccmin |
int | LLCC 缓存 的最小频率 (单位: KHz) |
CPUllccmax |
int | LLCC 缓存 的最大频率 (单位: KHz) |
CPUddrmin |
int | 高通: DDR 的最小频率 (KHz)。 天玑: 写入 set_freq 的目标频率 (Hz)。 |
CPUddrmax |
int | DDR 内存 的最大频率 (单位: KHz) |
配置示例(高通 performance 模式):
performance:
Bus_dcvs:
CPUllccmin: 1555000
CPUllccmax: 1708800
CPUddrmin: 1555000
CPUddrmax: 3196000```
**配置示例(天玑 `performance` 模式):**
```yaml
performance:
Bus_dcvs:
CPUddrmin: 800000000 # 目标频率 (单位: Hz)此功能允许您对 CPU 调速器的内部参数进行精细化调整。它通过按调速器分组的两部分协同工作。
您的“参数字典”,按调速器名称分组,定义所有可能会用到的参数。
- 键 (Key): 一个抽象的名称,如
path1。 - 值 (Value): 内核参数文件相对于其调速器目录的【纯文件名】。
- 模板: 值为空字符串
""的条目是为用户预留的模板。
配置示例:
pGovPath:
schedutil:
path1: "up_rate_limit_us"
walt:
path1: "target_loads"在每一个性能模式内部,同样按调速器名称分组,使用 pGovPath 中定义的键来设置具体数值。
- 程序会智能地将
schedutil组的设置,只应用到正在使用schedutil的核心上。 - 如果值是空字符串 (
""),程序会忽略此项设置。
配置示例 (performance 模式):
performance:
Governor:
global: "schedutil"
SuperBigCore: "walt"
Govsets:
schedutil:
path1: "0" # up_rate_limit_us
walt:
path1: "95" # target_loads此功能需要 function.cpuset 为 true。它将不同类型的任务组限制在指定的 CPU 核心上运行,是功耗和性能管理的关键。
Cpuset:
top_app: "0-7"
foreground: "0-7"
background: "0-2"
system_background: "1-2"
restricted: "0-5"```
| 字段 | 描述 | 建议值 |
|:---|:---|:---|
| `top_app` | 当前在前台运行的应用。 | 应分配所有核心,如 `"0-7"`。 |
| `foreground` | 前台服务和可见的应用。 | 也应分配所有或大部分核心。 |
| `background` | 后台运行的应用和服务。 | **应限制在能效核心**,如 `"0-3"` 或 `"0-2"`,以节省功耗。 |
| `system_background` | 系统后台服务。 | 同样应限制在能效核心。 |
| `restricted` | 被系统限制的后台应用。 | 应分配最少的核心。 |
### 7️⃣ EAS 调度器参数 (`EasSchedulerValue`)
此功能需要 `function.EasScheduler` 为 `true`,且您的内核支持 EAS。这些是高级内核参数,通常保持默认即可。
```yaml
EasSchedulerValue:
sched_min_granularity_ns: "2000000"
sched_nr_migrate: "30"
sched_wakeup_granularity_ns: "3200000"
sched_schedstats: "0"| 字段 | 简要描述 |
|---|---|
sched_min_granularity_ns |
任务在被抢占前可运行的最短时间。 |
sched_nr_migrate |
负载均衡时一次性迁移的任务数量。 |
sched_wakeup_granularity_ns |
唤醒的任务在抢占当前任务前需要等待的时间。 |
sched_schedstats |
是否开启调度器统计。设为 "0" 可减少开销。 |
IO_Settings:
Scheduler: "mq-deadline"
IO_optimization: true| 字段 | 类型 | 描述 |
|---|---|---|
Scheduler |
string | 需要 function.AdjIOScheduler 为 true。设置块设备的I/O调度器(如 mq-deadline, bfq, none)。留空则使用内核默认。 |
IO_optimization |
bool | 开启一组通用的 I/O 优化,如禁用 iostats 等。 |
CpuIdle:
current_governor: "teo"| 字段 | 类型 | 描述 |
|---|---|---|
current_governor |
string | 需要 function.CpuIdleScaling_Governor 为 true。设置 CPU Idle 调速器(如 menu, teo),它决定了CPU在空闲时进入的节能状态深度。留空则使用内核默认。 |
Other:
AdjQcomBus_dcvs: false| 字段 | 类型 | 描述 |
|---|---|---|
AdjQcomBus_dcvs |
bool | (仅高通) 开启后,会应用一组硬编码在程序中的总线(DDR/L3缓存)频率优化,适用于部分高通设备。这是一个遗留的快速优化选项。 |
一个完整的性能模式,是由以下六个模块共同定义的。您可以自由组合,打造最适合您的模式。
performance:
Governor: { ... }
Freq: { ... }
Uclamp: { ... }
Bus_dcvs: { ... }
Govsets: { ... }
Other: { ... }决定CPU频率如何响应负载。global为默认值,SmallCore等可覆盖。
Governor:
global: "schedutil"
SuperBigCore: "walt" 定义每个核心簇的最小/最大频率 (单位 KHz,可用 "min" 或 "max")。
Freq:
SmallCoreMaxFreq: "max"向调度器提供性能需求的提示 (0-100)。
Uclamp:
UclampTopAppMin: "10"
UclampTopApplatency_sensitive: "1" 设置此模式下,SoC内部数据总线(LLCC缓存/DDR内存)的频率。更高的值可以显著降低延迟。
Bus_dcvs:
CPUllccmin: 1555000
CPUddrmin: 1555000精细化调整当前模式下,每个调速器的具体行为。
Govsets:
schedutil:
path1: "0"
walt:
path1: "95" Other:
ufsClkGate: true # UFS 时钟门控开关感谢以下贡献者对本项目的帮助:
|
MoWei-2077 |
ShenEternal |
AquaPuff🐋 |
hfdem |
|
ztc1997 |
XShe |
Timeline |
shrairo |
特别感谢:
- QQ@长虹久奕
- QQ@Microsoft
- QQ@:枫
- 各位酷安网友以及 YukiCpuScheduler 的所有用户
```