[日更-2019.3.29]Android系统(MT6797)CPU频率工作模式以及调整频率的方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

声明:

  • 最近在做一款MT6797架构的Android平板的系统优化工作,公司总觉得平板运行不是很流畅,考虑到的一点是是不是平板的CPU被降频影响的性能上的损失太大,CPU降频这种操作一般就是为了能够省电,同时是以牺牲平板性能换来的。
  • 因为CPU调频是第一次研究,看过其它小伙伴的博客分析,感谢无私分享技术知识的小伙伴们!
  • 文章参考:《CPU频率调节模式以及降频方法简介》、《CPU降频实现原理与试验数据》、《利用ADB固定Android手机的CPU频率》、 《Android系统 proc—cpufreq 目录,查看 CPU 电压,检查省电体质》

1. CPU降频调整实现原理

CPU降频主要是通过控制CPU的工作模式和工作频率来达到的。

在内核中实现了两个driver,一个负责控制开关CPU的核数,叫做hot-plug驱动,另一个负责调整CPU的频率,叫做DVFS驱动。内核中的driver会根据系统的负载,自动调整使用几个CPU和调整CPU频率。如果负载高了,提高频率,或者多开几个核,或者开大核。如果负载降下去了,就可以关大核,关核,降频。

1.1 CPU工作模式介绍

该MT6796平板内核编译选项配置为:

CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y

Android的CPU工作模式是基于linux的,在androidL上支持的CPU工作模式有:ondemand、userspace、powersave、interactive和performance。

  1. performance :只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
  2. powersave:将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上,而不动态调节。
  3. Userspace:最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置。
  4. ondemand :按需调节cpu频率,不操作手机的时候控制在最低频率,滑屏或进入应用后会迅速提升至最高频率,当空闲时迅速降低频率,性能较稳定,但因频率变化幅度过大,省电方面只有一般的水平。是一种在电池和性能之间趋向平衡的默认模式,但是对于智能手机来说,ondemand在性能表现方面略有欠缺。
  5. interactive:和ondemand相似,规则是“快升慢降”,注重响应速度、性能,当有高需求时迅速跳到高频率,当低需求时逐渐降低频率,相比ondemand费电。
提示:因此performance 、powersave这两种governors 都属于静态governor。在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。

1.2 系统运行时--CPU频率相关目录

在Adb Shell下,进入目录/sys/devices/system/cpu/cpu0/cpufreq下:

x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # ls
affected_cpus    cpuinfo_max_freq cpuinfo_transition_latency scaling_available_frequencies scaling_cur_freq scaling_governor scaling_min_freq
cpuinfo_cur_freq cpuinfo_min_freq related_cpus               scaling_available_governors   scaling_driver   scaling_max_freq scaling_setspeed
  • 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之间即可 我在init.rc文件中加入:
on property:sys.boot_completed=1
    write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance

这样开机启动,CPU频率工作模式就是performance模式。

1.3 频率调整

首先查看CPU支持的频率:

x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_frequencies
1846000 1781000 1703000 1625000 1495000 1417000 1274000 1209000 1092000 949000 832000 741000 650000 559000 468000 325000

接着就是进入cpu的用户模式下进行设置:(进入cpu的用户模式)

x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_available_frequencies
1846000 1781000 1703000 1625000 1495000 1417000 1274000 1209000 1092000 949000 832000 741000 650000 559000 468000 325000
x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_cur_freq
1846000
x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # cat scaling_governor
userspace

分别设置最高最低cpu频率,还有就是当前cpu频率:

x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # echo 1781000 > scaling_max_freq
x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # echo 1781000 > scaling_min_freq
x20p_84_wqxga:/sys/devices/system/cpu/cpu0/cpufreq # echo 1781000 > scaling_setspeed
 
x20p_84_wqxga:/sys/devices/system/cpu/cpu4/cpufreq # cat scaling_cur_freq
1781000

1.4 其它操作

1.4.1 查看当前CPU支持的频率档位

x20p_84_wqxga:/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
1846000 1781000 1703000 1625000 1495000 1417000 1274000 1209000 1092000 949000 832000 741000 650000 559000 468000 325000 

1.4.2 查看当前CPU支持的工作模式(governor)

x20p_84_wqxga:/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
ondemand userspace powersave interactive performance

1.4.3 查看当前CPU使用的工作模式(governor)

x20p_84_wqxga:/ # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
userspace

1.4.4 查看当前系统支持的CPU核数

x20p_84_wqxga:/ # cat /sys/devices/system/cpu/present
0-9

1.4.5 全开所有cpu ,在实际设置时,还需要(有root权限才可以设置)

#关闭cpu hotplug
echo 0 > /proc/hps/enabled
#固定最高频
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 
echo 1 > /sys/devices/system/cpu/cpu0/online
echo 1 > /sys/devices/system/cpu/cpu1/online
echo 1 > /sys/devices/system/cpu/cpu2/online
echo 1 > /sys/devices/system/cpu/cpu3/online
echo 1 > /sys/devices/system/cpu/cpu4/online
echo 1 > /sys/devices/system/cpu/cpu5/online
echo 1 > /sys/devices/system/cpu/cpu6/online
echo 1 > /sys/devices/system/cpu/cpu7/online
echo 1 > /sys/devices/system/cpu/cpu8/online
echo 1 > /sys/devices/system/cpu/cpu9/online

1.4.6 查看当前多少CPU在线

x20p_84_wqxga:/ # cat sys/devices/system/cpu/online
4

1.4.7 proc—cpufreq 目录下文件

参考:《Android系统 proc—cpufreq 目录,查看 CPU 电压,检查省电体质》

转载于:https://my.oschina.net/XiaoMaPedro/blog/3028670

你可能感兴趣的:([日更-2019.3.29]Android系统(MT6797)CPU频率工作模式以及调整频率的方法)