Skip to content
This repository was archived by the owner on Oct 30, 2025. It is now read-only.

imacte/YukiCpuScheduler_update

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

YukiCpuScheduler

C++ Android AArch64 Android Support

🚀 智能 CPU 调度工具 - 为 Android 设备提供极致的性能与能效平衡


📋 项目简介

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` 中自定义这些值。

📁 配置文件详解 (config.yaml)

1️⃣ 元信息 (meta)

meta:
  name: "YukiCpuScheduler Profile"
  author: "yuki"
  configVersion: 19
  loglevel: "INFO" 
字段 类型 描述
configVersion number 至关重要。此版本号必须与程序要求的版本完全一致。
loglevel string 日志记录详细程度。可选值:DEBUG, INFO, WARNING, ERROR

2️⃣ 功能开关 (function)

此部分包含了所有主要功能的总开关。

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 (推荐) 启用应用启动加速,加快加载速度。

3️⃣ 核心框架与分配 (CoreFramework & CoreAllocation)

此部分定义了您设备的物理核心架构,是所有频率和核心控制功能的基础。必须正确配置!

核心框架 (CoreFramework)

您需要在这里告诉程序,您设备的不同核心簇分别对应哪个 policy 路径。

  • 如何查找? 在 root 终端中查看 /sys/devices/system/cpu/cpufreq/ 目录。
CoreFramework:
  SmallCorePath: 0
  MediumCorePath: 2
  BigCorePath: 5
  SuperBigCorePath: 7

核心分配 (CoreAllocation)

此部分为 AffinitySetter 功能提供参数。

CoreAllocation:
  cpusetCore: "2-7"
  cpuctlUclampBoostMin: "0"
  cpuctlUclampBoostMax: "100"
字段 类型 描述
cpusetCore string AffinitySetter 会将系统关键进程绑定到这个指定的核心范围上。
cpuctlUclampBoost... string Uclamp 相关的提权参数,通常保持默认。

4️⃣ 总线频率控制 (Bus_dcvs_Path & Bus_dcvs)

此功能允许您精细控制SoC内部数据总线(LLCC缓存/DDR内存)的频率,对系统响应速度和功耗有显著影响。该功能的配置分为全局路径定义模式内数值设定两个步骤。

第一步:全局路径定义 (Bus_dcvs_Path)

此部分用于一次性告诉程序,控制总线频率的系统文件位于何处。程序会智能判断您填写了几个路径,并只对已填写的路径进行操作

字段名 数据类型 描述
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"
  # 其他留空

第二步:模式内数值设定 (Bus_dcvs)

每一个性能模式内部,设定在该模式下希望写入的具体频率数值

字段名 数据类型 描述
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)

5️⃣ 动态调速器参数 (pGovPath & Govsets) - 🚀 新核心功能

此功能允许您对 CPU 调速器的内部参数进行精细化调整。它通过按调速器分组的两部分协同工作。

第一步:定义可用参数 (pGovPath)

您的“参数字典”,按调速器名称分组,定义所有可能会用到的参数。

  • 键 (Key): 一个抽象的名称,如 path1
  • 值 (Value): 内核参数文件相对于其调速器目录的【纯文件名】。
  • 模板: 值为空字符串 "" 的条目是为用户预留的模板。

配置示例:

pGovPath:
  schedutil:
    path1: "up_rate_limit_us"
  walt:
    path1: "target_loads"

第二步:在模式中设置参数值 (Govsets)

每一个性能模式内部,同样按调速器名称分组,使用 pGovPath 中定义的来设置具体数值

  • 程序会智能地schedutil 组的设置,只应用到正在使用 schedutil 的核心上。
  • 如果值是空字符串 (""),程序会忽略此项设置。

配置示例 (performance 模式):

performance:
  Governor:
    global: "schedutil"
    SuperBigCore: "walt" 

  Govsets:
    schedutil:
      path1: "0"      # up_rate_limit_us
    walt:
      path1: "95"     # target_loads

6️⃣ Cpuset (核心分组)

此功能需要 function.cpusettrue。它将不同类型的任务组限制在指定的 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" 可减少开销。

8️⃣ I/O 设置 (IO_Settings)

IO_Settings:
  Scheduler: "mq-deadline"
  IO_optimization: true
字段 类型 描述
Scheduler string 需要 function.AdjIOSchedulertrue。设置块设备的I/O调度器(如 mq-deadline, bfq, none)。留空则使用内核默认。
IO_optimization bool 开启一组通用的 I/O 优化,如禁用 iostats 等。

9️⃣ CPU 空闲设置 (CpuIdle)

CpuIdle:
  current_governor: "teo"
字段 类型 描述
current_governor string 需要 function.CpuIdleScaling_Governortrue。设置 CPU Idle 调速器(如 menu, teo),它决定了CPU在空闲时进入的节能状态深度。留空则使用内核默认。

🔟 其他设置 (Other)

Other:
  AdjQcomBus_dcvs: false
字段 类型 描述
AdjQcomBus_dcvs bool (仅高通) 开启后,会应用一组硬编码在程序中的总线(DDR/L3缓存)频率优化,适用于部分高通设备。这是一个遗留的快速优化选项。

1️⃣1️⃣ 功耗模型详解 (以 performance 模式为例)

一个完整的性能模式,是由以下六个模块共同定义的。您可以自由组合,打造最适合您的模式。

performance:
  Governor: { ... }
  Freq: { ... }
  Uclamp: { ... }
  Bus_dcvs: { ... }
  Govsets: { ... }
  Other: { ... }

模块一: 调速器 (Governor)

决定CPU频率如何响应负载。global为默认值,SmallCore等可覆盖。

  Governor:
    global: "schedutil"
    SuperBigCore: "walt" 

模块二: CPU频率 (Freq)

定义每个核心簇的最小/最大频率 (单位 KHz,可用 "min" 或 "max")。

  Freq:
    SmallCoreMaxFreq: "max"

模块三: Uclamp (CPU使用率限制)

向调度器提供性能需求的提示 (0-100)。

  Uclamp:
    UclampTopAppMin: "10"
    UclampTopApplatency_sensitive: "1" 

模块四: 总线频率 (Bus_dcvs)

设置此模式下,SoC内部数据总线(LLCC缓存/DDR内存)的频率。更高的值可以显著降低延迟。

  Bus_dcvs:
    CPUllccmin: 1555000
    CPUddrmin: 1555000

模块五: 调速器参数 (Govsets)

精细化调整当前模式下,每个调速器的具体行为。

  Govsets:
    schedutil:
      path1: "0"
    walt:
      path1: "95"

模块六: 其他 (Other)

  Other:
    ufsClkGate: true # UFS 时钟门控开关

🏆 致谢

感谢以下贡献者对本项目的帮助:


MoWei-2077


ShenEternal


AquaPuff🐋


hfdem


ztc1997


XShe


Timeline


shrairo

特别感谢

  • QQ@长虹久奕
  • QQ@Microsoft
  • QQ@:枫
  • 各位酷安网友以及 YukiCpuScheduler 的所有用户

📄 开源协议


🌟 如果这个项目对你有帮助,请给我们一个 Star!

Star History Chart


文档更新时间:2025/07/21
感谢所有用户的测试反馈,这将推进 YukiCpuScheduler 的持续发展 🚀

```

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors