设置CPU核心

性能测试时,手机会根据当前负载,手机温度等信息进行cpu核心调度,cpu频率调整,导致性能测试结果误差较大。为了降低调度导致的性能测试误差,我们需要把程序跑在固定的核心,固定的频率上

1、安卓手机支持的调度模式

ondemand:系统默认的超频模式,按需调节,内核提供的功能,不是很强大,但有效实现了动态频率调节,平时以低速方式运行,当系统负载提高时候自动提高频率。以这种模式运行不会因为降频造成性能降低,同时也能节约电能和降低温度。一般官方内核,还有CM7的默认的方式都是ondemand。流畅度: 一般,流畅

interactive:交互模式,直接上最高频率,然后看CPU负荷慢慢降低,比较耗电。 流畅度: 最高,极流畅 Interactive 是以 CPU 排程数量而调整频率,从而实现省电。InteractiveX 是以 CPU 负载来调整 CPU 频率,不会过度把频率调低。所以比 Interactive 反应好些,但是省电的效果一般

conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。 流畅度: 高,流畅

smartass:聪明模式,是I和C模式的升级,该模式在比i模式不差的响应的前提下会做到了更加省电流畅度: 最高,流畅

performance:性能模式!只有最高频率,从来不考虑消耗的电量,性能没得说,但是耗电量.......流畅度:还需要说么?还有比这种模式更流畅的吗?

powersave 省电模式,通常以最低频率运行,打不死我也不用。流畅度: 极低

userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置流畅度:根据设置而定

2、 cpu的频率配置介绍

按下面的方法修改频率需要root的android系统

1)查看当前处理器的工作频率

cat  /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

这里cpu0是指第0号cpu,一般手机有8核心,可以指定0-7,下同

2)查看处理器的最大/最小工作频率

cat  /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

cat  /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 

3)查看处理器支持切换的频率

cat  /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

4)显示当前内核中支持的所有cpufreq governor类型

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

5)显示被governor和cpufreq核决定的当前CPU工作频率。该频率是内核认为该CPU当前运行的主频率

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

6)scaling_governor:通过echo命令,能够改变当前处理器的governor类型

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

7)scaling_setspeed:如果用户选择了“userspace” governor, 那么可以设置cpu工作主频率到某一个指定值。

echo 1900800 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed        

3. 一般情况下,配置cpu频率步骤

查看支持的模式:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

配置模式:

echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor    

查看支持的频率

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

配置频率

echo "2649600" > /sys/devices/system/cpu/cpu7/cpufreq/scaling_setspeed

echo "312000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq # 设置最大频率

echo "1416000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq # 设置最小频率

如果需要稳定测试性能,不降频,可以把scaling_setspeed,scaling_max_freq ,scaling_min_freq 配置成比最大频率低的一个频率,具体的值需要和计算负载配合,如果跑满了所有核心,可以把频率配得低些

查看频率:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

4. 配置核心数                    

在/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核心

5. 把进程绑定到指定cpu核心,防止cpu在不同核心间切换

1) 查看进程的进程id

 ps -A | grep process_name

2)绑进程到cpuid
 taskset -pa cpuid pid

6. GPU频率配置

1)echo 1 >/sys/class/kgsl/kgsl-3d0/force_clk_on

echo 1 > force_clk_on是设置KGSL_PWRFLAGS_CLK_ON这个power_flags。使用echo freq > gpuclk时,是通过kgsl_pwrctrl_pwrlevel_change设置频率,它会判断KGSL_PWRFLAGS_CLK_ON这个power_flags,如果没有这个flag,可能就不会真正的设置频率。

2)echo 10000000 >/sys/class/kgsl/kgsl-3d0/idle_timer

echo 10000000 > idle_timer,,设置interval_timeout,默认值是80ms。当系统启动的时候,在governorrestart的过程中,会重新初始化GPU所对应的频率,这样即使我们设置了我们想要的频率,最后也很快就被冲掉了,所以要把该interval_timeout设置为很大。

3)echo performance >/sys/class/kgsl/kgsl-3d0/devfreq/governor

echo performance > devfreq/governor, 这时devfreq会为Adreno重新选择governor,也就是performance。这时它会使用GPU所支持的最大频率,而不考虑系统的负载。默认的msm-adreno-tz机制会不停的动态更新频率,即使我们设置过频率也会被覆盖掉,这就是为什么直接设置频率无效的原因。而如果改成performance机制,这样它会使得Adreno动态的调整机制无效,我们的设置才会生效。

4)cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies

查看gpu支持的频率

5)echo 608000000> /sys/class/kgsl/kgsl-3d0/gpuclk

简单的设置GPU的频率,一般是在几个值之间,如果不对,就会就近选择这三者之一。
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值