在嵌入式设备中为了降低功耗防止芯片发热,厂商一般默认都将CPU和GPU频率为最小,为了提高性能,减少算法耗时需要手动将CPU或者GPU频率设到性能模式。
查看GPU频率
cat /sys/class/devfreq/gpufreq/cur_freq
cat /sys/class/devfreq/gpufreq/max_freq
CPU相关节点路径/sys/devices/system/cpu/cpu0/cpufreq
cpuinfo_cur_freq 当前cpu正在运行的工作频率
cpuinfo_max_freq 该文件指定了处理器能够运行的最高工作频率
cpuinfo_min_freq 该文件指定了处理器能够运行的最低工作频率
cpuinfo_transition_latency 该文件定义了处理器在两个不同频率之间切换时所需要的时间(单位:ns)
scaling_available_frequencies 所有支持的主频率列表
scaling_available_governors 该文件显示当前内核中支持的所有cpufreq governor类型
scaling_cur_freq CPU当前运行的主频率,governor和cpufreq核决定的
scaling_driver 该文件显示该CPU正在使用何种cpufreq driver
scaling_governor 通过echo命令,能够改变当前处理器的governor类型
scaling_max_freq 显示policy的上限.当改变cpu policy时,需要首先设scaling_max_freq
scaling_min_freq 显示policy的下限
scaling_setspeed governor为“userspace”,可设置cpu主频率值。值在scaling_min_freq和scaling_max_freq之间。
CPU的性能模式设置
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor,
一般CPU都有多个核,需要手动开启每个核的性能模式
echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpuX/cpufreq/scaling_governor
X为CPU的核数
GPU的性能模式设置
echo performance > /sys/class/devfreq/ff9a0000.gpu/governor
每款芯片的上面红色的gpu数字都不一样,一般都是位于 /sys/class/devfreq/目录下
设置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支持的频率档位
#cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
1800000 1767000 1734000 1700000 1667000 1633000 1533000 1466000 1400000 1308000 1216000 1125000 1056000 987000 918000 850000
查看当前支持的governor
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
schedplus ondemand userspace powersave interactive performance
//1.performance 注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
//2.powersave 注重节能,将CPU会固定工作在其支持的最低运行频率上,而不动态调节。
//3.Userspace 最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户,提供了相应的接口。长期以来都在用的模式,可以通过手动编辑配置文件进行配置。
//4.ondemand 定期检查负载,当CPU负荷超越了阈值,会立即达到最大频率运行。执行完毕立即回到最低频率;userspace是内核态的检测,用户态调整,效率低。而ondemand是完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。在ondemand governor监测到系统负载超过 up_threshold 所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将CPU设置在最高频率上运行。当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时。ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率,例如 CPU 支持三个可选频率,分别为 1.67GHz、 1.33GHz 和 1GHz ,如果 CPU 运行在 1.67GHz 时 ondemand governor 发现可以降低运行频率,那么 1.33GHz 将被选作降频的目标频率。
//5.interactive 动态调节,检测时间是20ms,延迟20ms,一次调整周期40ms。
//6.schedplus 动态调节,调频时间是1ms
//7.conservative 该模式与ondemand的最大区别在于,conservative模式不会立刻在负载增加的情况下将cpu频率调整到最大,他会调整到比目前频率稍微大的频段去工作,某些情况下,该模式的延迟会大于ondemand。
查看当前选择的governor
#cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
schedplus
查看系统支持多少核数
# cat sys/devices/system/cpu/present
0-3
全开所有CPU
//逐个echo 1 > cpu 0-3
#echo 1 > /sys/devices/system/cpu/cpu1/online
设置CPU的频率
首先要修改governor的模式,但在修改前需要查下CPU支持哪些governor的模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
#echo 850000 > sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
将模式调整为performance
echo "performance" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
对CPU的频率进行修改,CPU的频率不是可以任意设置的,需要查看scaling_available_frequencies文件,看CPU支持哪些频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
频率是以KHz为单位的,准备将cpu0设置为1.416GHz,那就将1416000写入scaling_setspeed即可
echo "1416000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
查看当前这个核心的频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
设置CPU的最大和最小频率
echo "1800000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq #设置最大频率
echo "312000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq #设置最小频率
干货|Android APP应用工程师转Framework工程师(仅此一篇够了)