Android中CPU频率查看和修改
Android中CPU频率查看和修改
root权限(直接输入su命令)
cd sys/devices/system/cpu/cpu0/cpufreq
ls文件如下
cpuinfo_cur_freq: 当前cpu正在运行的工作频率
cpuinfo_max_freq:该文件指定了处理器能够运行的最高工作频率 (单位: 千赫兹)
cpuinfo_min_freq :该文件指定了处理器能够运行的最低工作频率 (单位: 千赫兹)
cpuinfo_transition_latency:该文件定义了处理器在两个不同频率之间切换时所需要的时间 (单位: 纳秒)
scaling_available_frequencies:所有支持的主频率列表 (单位: 千赫兹)
scaling_available_governors:该文件显示当前内核中支持的所有cpufreq governor类型
scaling_cur_freq:被governor和cpufreq核决定的当前CPU工作频率。该频率是内核认为该CPU当前运行的主频率
scaling_driver:该文件显示该CPU正在使用何种cpufreq driver
scaling_governor:通过echo命令,能够改变当前处理器的governor类型
scaling_max_freq:显示当前policy的上下限 (单位: 千赫兹)需要注意的是,当改变cpu policy时,需要首先设置scaling_max_freq, 然后才是scaling_min_freq
scaling_setspeed:如果用户选择了“userspace” governor, 那么可以设置cpu工作主频率到某一个指定值。
只需要这个值在scaling_min_freq 和 scaling_max_freq之间即可。
如果查看当前处理器模式 可以直接 cat scaling_governor 去查看。
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # ls
affected_cpus
cpuinfo_cur_freq
cpuinfo_max_freq
cpuinfo_min_freq
cpuinfo_transition_latency
related_cpus
scaling_available_frequencies
scaling_available_governors
scaling_cur_freq
scaling_driver
scaling_governor
scaling_max_freq
scaling_min_freq
scaling_setspeed
stats
当前cpu正在运行的工作频率(单位: 千赫兹)
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat cpuinfo_cur_freq
1008000
处理器能够运行的最高工作频率(单位: 千赫兹)
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat cpuinfo_max_freq
1464000
处理器能够运行的最低工作频率(单位: 千赫兹)
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat cpuinfo_min_freq
1008000
处理器在两个不同频率之间切换时所需要的时间 (单位: 纳秒)
at cpuinfo_transition_latency <
40000
所有支持的主频率列表(单位: 千赫兹)
at scaling_available_frequencies <
1008000 1200000 1296000 1392000 1464000
被governor和cpufreq核决定的当前CPU工作频率。该频率是内核认为该CPU当前运行的主频率
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_cur_freq
1008000
通过echo命令,能够改变当前处理器的governor类型
at scaling_available_governors <
conservative ondemand userspace powersave interactive performance
cpu厂家
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_driver
rockchip
显示当前policy的上下限 (单位: 千赫兹)需要注意的是,
当改变cpu policy时,需要首先设置scaling_max_freq, 然后才是scaling_min_freq
scaling_setspeed:如果用户选择了“userspace” governor, 那么可以设置cpu工作主频率到某一个指定值。
只需要这个值在scaling_min_freq 和 scaling_max_freq之间即可。
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_max_freq
1464000
是否可以设置速度
shell@rk322x_echo:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_setspeed
<unsupported>
==========================================================================
设置CPU的核心数
在/sys/devices/system/cpu目录下可以看到你的CPU有几个核心,如果是双核,就是cpu0和cpu1,如果是四核,还会加上cpu2和cpu3。随便进一个文件夹,比如cpu1,里面有个online文件。我们可以用cat命令查看该文件的内容:
cat /sys/devices/system/cpu/cpu1/online
这个文件只有一个数字,0或1。0表示该核心是offline状态的,1表示该核心是online状态的。所以,如果你想关闭这个核心,就把online文件的内容改为“0”;如果想打开该核心,就把文件内容改为“1”。
echo "0" > /sys/devices/system/cpu/cpu0/online # 关闭该CPU核心
echo "1" > /sys/devices/system/cpu/cpu0/online # 打开该CPU核心
设置CPU的频率
首先我们要修改governor的模式,但在修改前需要查下CPU支持哪些governor的模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
我用的是Nexus 4手机,所以有以下5个选择,其他的手机型号可能略有不同
conservative ondemand userspace powersave interactive performance
关于这些模式,具体解释如下:
ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核,还有CM7的默认的方式都是ondemand。流畅度: 一般,流畅
interactive:交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。 流畅度: 最高,极流畅 Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般
conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。 流畅度: 高,流畅
smartass:聪明模式,是I和C模式的升级,该模式在比i模式不差的响应的前提下会做到了更加省电流畅度: 最高,流畅
performance:性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量.......流畅度:还需要说么?还有比这种模式更流畅的吗?
powersave 省电模式,通常以最低频率运行,打不死我也不用。流畅度: 极低
userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置流畅度:根据设置而定
Hotplug:类似于ondemand, 但是cpu会在关屏下尝试关掉一个cpu,并且带有deep sleep,比较省电。流畅度:一般,流畅
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor <
echo "performance" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor <
echo "performance" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor <
echo "performance" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor <
然后我们对CPU的频率进行修改,CPU的频率不是可以任意设置的,需要查看scaling_available_frequencies文件,看CPU支持哪些频率。
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
从我的手机中可以获得以下的值
126000 216000 312000 408000 600000 696000 816000 1008000 1200000 1416000 1512000 1608000 1704000 1800000
这里的频率是以KHz为单位的,我准备将cpu0设置为1.416GHz,那就将1416000写入scaling_setspeed即可。
echo "1416000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
设置好后,我们可以通过scaling_cur_freq文件查看当前这个核心的频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
最后我们也可以设置下CPU的最大和最小频率,只需要将需要设置的频率值写入scaling_max_freq和scaling_min_freq即可
echo "1800000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq # 设置最大频率
echo "312000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq # 设置最小频率
这里要注意的是最大值需要大于等于最小值。
注意,如果你需要对每个online的CPU核心都进行设置,自行修改cpux.
同时以上对文件的修改均需要root权限
通过变化online的核心数和调整CPU频率可以做到功耗和性能的特殊要求。
1、查看当前CPU支持的频率档位
root@NOBLEX:/sys #cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
1300000 1235000 1170000 1040000 819000 598000 442000 299000
root@NOBLEX:/sys #
2、查看当前支持的governor(手机型号可能略有不同)
root@NOBLEX:/sys # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand userspace powersave interactive performance
performance表示不降频,
ondemand表示使用内核提供的功能,可以动态调节频率,
powersvae表示省电模式,通常是在最低频率下运行,
userspace表示用户模式,在此模式下允许其他用户程序调节CPU频率。
root@NOBLEX:/sys #
3、查看当前选择的governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
interactive
root@NOBLEX:/sys #
4、查看系统支持多少核数
root@NOBLEX:/ # cat sys/devices/system/cpu/present
cat sys/devices/system/cpu/present
0-3
root@NOBLEX:/ #
5、全开所有cpu ,在实际设置时,还需要(有root权限才可以设置)
adb shell "echo 0 > /proc/hps/enabled" (关闭cpu hotplug)
adb shell "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor" (固定最高频)
echo 1 > /sys/devices/system/cpu/cpuX/online
X表示(0~3,不同平台CPU core 数是不一样的)
例:6735平台
root@NOBLEX:/ # echo 1 >sys/devices/system/cpu/cpu1/online
echo 1 >sys/devices/system/cpu/cpu1/online
root@NOBLEX:/ # echo 1 >sys/devices/system/cpu/cpu2/online
echo 1 >sys/devices/system/cpu/cpu2/online
root@NOBLEX:/ # echo 1 >sys/devices/system/cpu/cpu3/online
echo 1 >sys/devices/system/cpu/cpu3/online
6、设置频率(可以先cat 出来当前的频率有哪些)
C:Usersmtk71247>adb shell "cat /proc/cpufreq/cpufreq_ptpod_freq_volt"
[0] = { .cpufreq_khz = 1300000, .cpufreq_volt = 113750, .cpufreq_volt_org = 1250
00, },
[1] = { .cpufreq_khz = 1235000, .cpufreq_volt = 110000, .cpufreq_volt_org = 1231
25, },
[2] = { .cpufreq_khz = 1170000, .cpufreq_volt = 106250, .cpufreq_volt_org = 1206
25, },
[3] = { .cpufreq_khz = 1040000, .cpufreq_volt = 98750, .cpufreq_volt_org = 1150
00, },
[4] = { .cpufreq_khz = 819000, .cpufreq_volt = 95000, .cpufreq_volt_org = 1100
00, },
[5] = { .cpufreq_khz = 598000, .cpufreq_volt = 95000, .cpufreq_volt_org = 1050
00, },
[6] = { .cpufreq_khz = 442000, .cpufreq_volt = 95000, .cpufreq_volt_org = 1000
00, },
[7] = { .cpufreq_khz = 299000, .cpufreq_volt = 95000, .cpufreq_volt_org = 9500
0, },
C:Usersmtk71247>adb shell "echo 0 >proc/cpufreq/cpufreq_oppidx"
设置后再cat 看一下当前的设置是否成功
C:Usersmtk71247>adb shell "cat proc/cpufreq/cpufreq_oppidx"
[MT_CPU_DVFS_LITTLE/0]
cpufreq_oppidx = 0
OP(1300000, 113750),
OP(1235000, 110000),
OP(1170000, 106250),
OP(1040000, 98750),
OP(819000, 95000),
OP(598000, 95000),
OP(442000, 95000),
OP(299000, 95000),
C:Usersmtk71247>
7、查看当前状态有多少个CPU
root@NOBLEX:/ # cat sys/devices/system/cpu/online
cat sys/devices/system/cpu/online
0-3
Android的CPU 的频率并不是一成不变的,会因应程式所需而调整频率,通常会视乎CPU Loading% 而升/降频,在特定时间再检查是否升/降。Governor就是默认的情景模式。
官方ROM就已经是默认的状态,无法选择。但是如果你刷机例如毒蛇 等第第三方ROM或者你手机已经ROOT,就可以安装CPU管理程序从而进行设置
以下请看各个选项的详细作用
【ondemand】按需模式:
→按需调节cpu频率,不操作手机的时候控制在最低频率,滑屏或进入应用后会迅速提升至最高频率,当空闲时迅速降低频率,性能较稳定,但因频率变化幅度过大,省电方面只有一般的水平。是一种在电池和性能之间趋向平衡的默认模式,但是对于智能手机来说,ondemand在性能表现方面略有欠缺。
【interactive】交互模式:
→和ondemand相似,规则是“快升慢降”,注重响应速度、性能,当有高需求时迅速跳到高频率,当低需求时逐渐降低频率,相比ondemand费电
【conservative】保守模式:
→和ondemand相似,规则是“慢升快降”,注重省电,当有高需求时逐渐提高频率,当低需求迅速跳至低频率。
【OndemandX】按需X模式:
→在Ondemand基础上改进而来。关屏时手机进入睡眠状态时,锁定最高频率频率为500Mhz
【Scary】胆小模式:
→基于Ondemand修改,CPU提升速度比ondemand慢,同时具有smartass的特点
【interactiveX】交互X模式:
→在interactive基础上改进而来。关屏时手机进入睡眠状态时,锁定频率为最低值,同时在手机唤醒时能有更好的提升表现。比interactive更注重保护电池。
【Wheatley】惠特利模式:
→规则和Ondemand一样,但是响应速度稍慢,比Ondemand省电
【hotplug】热拔插模式:
→和ondemand模式差不多,当有高需求时直接跳到最高频率,当需求见效时逐级降低频率,但关屏时就单核低频运行,省电。
【lionheart】狮心模式:
→基于conservative模式,但性能有所提高,增快了CPU的调整速度
【lulzactive】级别模式:
→在interactive基础,根据负载逐级升高或降低频率,每一级频率有一个限制值,负载高于限制值就提高一级频率,低于限制值就降低一级频率。所以这个调速器在各个频率上的停留时间都很短。这个调速器的特点是在各个频率之间频繁变动,但是运行于最高和最低频的时间最多。
【smartass】聪明模式:
→是interactive和conservative的升级,根据资源使用智能提供一个适中的频率,空闲时自动降频,锁屏时自动固定频率。特色是锁屏后非常省电。缺点是部分机型锁屏一段时间后容易睡死。
【smartassV2】聪明2模式:
→smartass的升级版,平衡效能和耗电,升频快,降频慢,同时间亦会于锁屏时将频率降到最低,集成了休眠策略,不单单是指关了屏幕和开着屏幕的区别。
【smoothass】活跃模式:
→在smartass基础上改进得来的,性能更高,调节速度更快,耗电少
【SavagedZen】平衡模式
→在smartass的基础优化而来,同时注重电池和性能,使CPU达到一个更好的整体平衡
【BrazilianWax】巴兹拉模式:
→基本就和smoothass一样
【Minmax】大小模式:
→基于conservative的优化版,类似smartassV2,速度性能最好,比smartassV2略微耗掉
【intellidemand】智能模式:
→可根据GPU使用情况来针对性调节cpu频率,当GPU于重度使用时 ,所有动作都依照ondemand 不变。当3GP于闲置时,会自动限制cpu最高频率,将CPU最高频率锁死于1.0Ghz以减少耗电。关屏时亦会视乎 GPU 情况而作出调整。
【Pegasusq】单控模式:
→源自三星猎户座处理器的一个调速器,可以单独调控单个CPU内核,理论上性能不错也很省电。
【badass】分工模式:
一个新型的CPU调速器,只能用于多核CPU,可分开控制单个CPU内核,来分工完成不同的工作,并且跟着工作量的不同,分别调整单个CPU内核的频率,从而提高性能,节省资源。这个模式现在好像只能用在特定修改的rom中
【performance】高性能模式:
→高性能模式,按你设定范围的最高频率运行,即使系统负载非常低cpu的频率也为最高。性能很好,因为CPU本身不需要资源去调整频率,但是电量消耗较快,温度也高一些。
【powersave】省电模式:
→按设定最低频率运行,日常没有使用价值,除非配合setcpu情景模式,关屏睡眠时使用此调节模式,省电但系统响应速度慢。
【userspace】用户模式:
→任何情况下都会控制CPU运行在配置的频率范围内,配置中的用户自己添加的省电设置。在此情景模式下,降低CPU最大运行频率可以延长电池待机时间,但同时也会降低机器的唤醒速度,建议最好不使用该选项。
【lagfree】无延迟模式:
→很少用的调速器,不紧不慢型,无论负载变化快慢与否,CPU都按一定的停顿时间逐级升高或降低频率。
【lazy】懒惰模式:
→与 ondemand 相似,对于频率上升和下降的响应都很迟缓,可以忽略掉部分迅速变化的频率变化,优点是省电。