CPU降频主要是通过控制CPU的工作模式和工作频率来达到的。
Android的CPU工作模式是基于linux的,在androidL上支持的CPU工作模式有:ondemand、userspace、powersave、interactive和performance。
1,performance :顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
2,powersave:将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。
3,Userspace:最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
4,ondemand 按需调节cpu频率,不操作手机的时候控制在最低频率,滑屏或进入应用后会迅速提升至最高频率,当空闲时迅速降低频率,性能较稳定,但因频率变化幅度过大,省电方面只有一般的水平。是一种在电池和性能之间趋向平衡的默认模式,但是对于智能手机来说,ondemand在性能表现方面略有欠缺。
5、interactive:和ondemand相似,规则是“快升慢降”,注重响应速度、性能,当有高需求时迅速跳到高频率,当低需求时逐渐降低频率,相比ondemand费电
现在我们手机使用的模式是interactive,频率会自动调整,“快升慢降”,比较符合手机操作行为,手机需要很快上升到最高频率,操作才会流畅,当你不用的时候频率会缓缓下降,也能一定程度达到省电效果。
下面我们就来看看实际是如何调整CPU的工作模式的
adb shell
//得到CPU支持的工作模式,此处为ondemand userspace powersave interactive performance
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
//设置工作模式
//echo后面接你想要设置的工作模式,scaling_governor是当前的cpu工作模式
echo interactive > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
但是在user版本,该设备节点属于root用户,只有root权限才能访问,android拥有的最高权限就是system权限
-rw-r--r-- root root 4096 2015-01-01 08:00 scaling_governor
故我们需要在init.rc中修改该设备节点的权限,改成system可以读写
//init.rc
chown system system /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
chmod 0660 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
这样系统级别的应用就可以访问
首先我们必须知道CPU可以支持那些频率设置
adb shell
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
//上面指令返回cpu支持的频率设置988000 923000 858000 793000 637000 494000 364000 221000
接着就是进入cpu的用户模式下进行设置
//这里是进入cpu的用户模式
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
//下面是分别设置最高最低cpu频率,还有就是当前cpu频率
echo 858000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 858000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 858000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
下面就是cpu调频对于实际手机使用的实验数据。
测试环境如下:
安装安兔兔v5.6.1
1、 开启飞行模式,将亮度调整到最低
2、 设置cpu工作模式
3、 待电流稳定后进行antutu评测
4、 记录整个antutu评测的平均电流、时间、得分
CPU处于interactive模式下平均电流 0.349 A,安兔兔得分15276,耗时6.583 min
CPU处于performance模式下平均电流 0.345 A,安兔兔得分15959,耗时6.316 min
CPU处于powersave模式下平均电流 0.143 A,安兔兔得分5610,耗时19.166 min
1、CPU处于interactive模式下平均电流 0.349 A,安兔兔得分15276,耗时6.583 min
2、CPU处于performance模式下平均电流 0.345 A,安兔兔得分15959,耗时6.316 min
3、CPU处于powersave模式下平均电流 0.143 A,安兔兔得分5610,耗时19.166 min
由上面数据可以知道:
测试环境如下:
安装安兔兔v5.6.1
1、 开启飞行模式,将亮度调整到最低
2、 设置cpu频率
3、 待电流稳定后进行antutu CPU运算测试
4、记录antutu CPU运算测试时的工作电流
cpu处于988000 KHz下平均电流 0.578 A
cpu处于923000 KHz下平均电流 0.522 A
cpu处于858000 KHz下平均电流 0.492 A
cpu处于793000 KHz下平均电流 0.460 A
cpu处于637000KHz下平均电流 0.411 A
cpu处于494000 KHz下平均电流 0.374 A
cpu处于364000 KHz下平均电流 0.339 A
cpu处于221000 KHz下平均电流 0.088 A
由上面数据可以知道:
由上面实验数据得到,cpu在powersave模式下是可以降低很多功耗(是默认interactive的40%左右),但是降低频率会导致系统变慢(大概是默认interactive的3倍左右),故如不是必要,不建议采取此操作,可以将此行为内置入最高级别的省电模式中去。