Android中CPU频率查看和修改

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:\Users\mtk71247>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:\Users\mtk71247>adb shell "echo 0 >proc/cpufreq/cpufreq_oppidx"

设置后再cat 看一下当前的设置是否成功

C:\Users\mtk71247>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:\Users\mtk71247>

  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 相似,对于频率上升和下降的响应都很迟缓,可以忽略掉部分迅速变化的频率变化,优点是省电。

关于I/O调度模式,与CPU工作模式是不相干的两条线,但是起到相辅相成的作用。

猜你喜欢

转载自blog.csdn.net/sdkdlwk/article/details/88062779