Linux&Tina动态调压调频配置与实现
2023-09-11 14:15:47 时间
动态调压调频功能配置菜单:
修改后,对应的.config DEFAULT 策略发生变化:
默认原来的策略是:
或者直接串口写入 echo performance >/sys/devices/system/cpu/cpufreq/policy0/scaling_governor动态修改。
查看支持的功耗策略:
[jenkins@localhost ~]$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
performance powersave
[jenkins@localhost ~]$
最大最小频率
[jenkins@localhost ~]$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
800000
[jenkins@localhost ~]$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq
4900000
4900000
4900000
3600000
3600000
3600000
3600000
4900000
4900000
4900000
4900000
4900000
4900000
4900000
4900000
4900000
和lscpu的输出是match的
在某服务器主机上的显示:
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
用工具查看和配置
$ cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 800 MHz - 4.90 GHz
available cpufreq governors: performance powersave
current policy: frequency should be within 800 MHz and 4.90 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 3.80 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
设置
$ sudo cpupower frequency-set -g performance
Setting cpu: 0
Setting cpu: 1
Setting cpu: 2
Setting cpu: 3
Setting cpu: 4
Setting cpu: 5
Setting cpu: 6
Setting cpu: 7
Setting cpu: 8
Setting cpu: 9
Setting cpu: 10
Setting cpu: 11
Setting cpu: 12
Setting cpu: 13
Setting cpu: 14
Setting cpu: 15
或者用脚本
#!/bin/bash
cpunum=$(cat /proc/cpuinfo | grep processor | wc -l)
for i in `seq 0 $[$cpunum-1]`
do
sudo echo performance > /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_governor
done
动态查看
$ watch grep \"cpu MHz\" /proc/cpuinfo
$ sudo cpupower monitor
|Nehalem || Mperf || Idle_Stats
CPU | C3 | C6 | PC3 | PC6 || C0 | Cx | Freq || POLL | C1 | C2 | C3
0| 0.00| 1.20| 83.14| 0.00|| 0.03| 99.97| 3660|| 0.00| 0.00| 0.00| 99.97
1| 0.00| 1.20| 83.14| 0.00|| 0.05| 99.95| 3752|| 0.00| 0.00| 1.73| 98.21
2| 0.00| 0.00| 83.14| 0.00|| 0.01| 99.99| 3808|| 0.00| 0.00| 0.00| 99.98
3| 0.00| 0.00| 83.14| 0.00|| 0.01| 99.99| 3771|| 0.00| 0.00| 0.00| 99.98
4| 0.00| 0.00| 83.14| 0.00|| 0.01| 99.99| 3673|| 0.00| 0.00| 0.00| 99.98
5| 0.00| 0.00| 83.14| 0.00|| 0.01| 99.99| 3599|| 0.00| 0.00| 0.00| 99.98
6| 0.00| 0.00| 83.14| 0.00|| 0.05| 99.95| 3784|| 0.00| 0.00| 0.00| 99.94
7| 0.00| 0.00| 83.14| 0.00|| 0.01| 99.99| 3790|| 0.00| 0.00| 0.00| 99.98
8| 0.00| 1.49| 83.14| 0.00|| 0.10| 99.90| 3768|| 0.00| 0.01| 2.87| 97.01
9| 0.00| 1.49| 83.14| 0.00|| 0.02| 99.98| 3472|| 0.00| 0.00| 0.00| 99.98
10| 0.00| 0.57| 83.14| 0.00|| 0.43| 99.57| 3762|| 0.00| 0.00| 0.00| 99.57
11| 0.00| 0.57| 83.14| 0.00|| 0.05| 99.95| 3718|| 0.00| 0.00| 0.54| 99.40
12| 0.00| 97.06| 83.14| 0.00|| 0.15| 99.85| 3579|| 0.00| 0.04| 27.68| 72.13
13| 0.00| 95.86| 83.14| 0.00|| 0.16| 99.84| 3585|| 0.00| 0.37| 3.48| 96.00
14| 0.00| 99.86| 83.14| 0.00|| 0.10| 99.90| 3587|| 0.00| 0.00| 1.65| 98.25
15| 0.00| 99.83| 83.14| 0.00|| 0.10| 99.90| 3586|| 0.00| 0.00| 2.34| 97.56
设置为performance之后,频率锁定在/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq.
关于动态调压调频的内核实现方法,可以关注核心注册跳压调频注册函数cpufreq_register_driver,设置__cpufreq_driver_target函数中.
change governer callstack.
可以看到,通过修改配置的方式实际上是将CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND关闭,并且打开CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE.
调整后,看下图就可以知道,系统在空载的情况下,CPU仍然是1.2G运转。
CPU: 0.0% usr 0.7% sys 0.0% nic 99.2% idle 0.0% io 0.0% irq 0.0% sirq
Load average: 0.00 0.00 0.00 1/58 929
[7m PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND[0m
877 1 root S 1144 0.4 0 0.2 adbd
887 1 root R 676 0.2 0 0.2 /sbin/swupdate-progress -w
920 877 root S 916 0.3 0 0.0 /bin/sh
894 1 root S 916 0.3 0 0.0 -/bin/sh
929 920 root R 916 0.3 0 0.0 top
1 0 root S 912 0.3 0 0.0 /sbin/init
665 2 root SW 0 0.0 0 0.0 [kworker/0:2]
3 2 root SW 0 0.0 0 0.0 [kworker/0:0]
7 2 root SW 0 0.0 0 0.0 [rcu_preempt]
5 2 root SW 0 0.0 0 0.0 [kworker/u2:0]
6 2 root SW 0 0.0 0 0.0 [ksoftirqd/0]
880 2 root SW 0 0.0 0 0.0 [file-storage]
12 2 root SW 0 0.0 0 0.0 [kworker/u2:1]
462 2 root SW 0 0.0 0 0.0 [spi0]
262 2 root SW 0 0.0 0 0.0 [oom_reaper]
11 2 root SW 0 0.0 0 0.0 [kdevtmpfs]
268 2 root SW< 0 0.0 0 0.0 [kblockd]
266 2 root SW< 0 0.0 0 0.0 [bioset]
308 2 root SW 0 0.0 0 0.0 [irq/329-axp2101]
304 2 root SW 0 0.0 0 0.0 [kworker/0:1]
root@(none):/sys/kernel/debug/clk# cat clk_summary[J
clock enable_cnt prepare_cnt rate accuracy phase
----------------------------------------------------------------------------------------
osc48m 0 0 48000000 0 0
osc48md4 0 0 12000000 0 0
usbohci0_12m 0 0 12000000 0 0
pll_periph0div25m 0 0 25000000 0 0
ephy_25m 0 0 25000000 0 0
hosc 13 13 24000000 0 0
csi_master0 0 0 24000000 0 0
dcxo_out 0 0 24000000 0 0
spwm 0 0 24000000 0 0
cpurapbs2 0 0 24000000 0 0
cpurcpus 1 1 24000000 0 0
cpurahbs 1 1 24000000 0 0
cpurapbs1 2 2 24000000 0 0
cpurpio 1 1 24000000 0 0
stwi 1 1 24000000 0 0
csi_master1 0 0 24000000 0 0
mipi_host0 1 1 24000000 0 0
usbphy0 1 1 24000000 0 0
ths 1 1 24000000 0 0
gpadc 1 1 24000000 0 0
spi2 0 0 24000000 0 0
spi1 0 0 24000000 0 0
sdmmc2_rst 0 0 24000000 0 0
sdmmc2_bus 0 0 24000000 0 0
sdmmc2_mod 0 0 24000000 0 0
sdmmc1_rst 0 0 24000000 0 0
sdmmc1_bus 0 0 24000000 0 0
sdmmc1_mod 0 0 24000000 0 0
sdmmc0_rst 1 1 24000000 0 0
sdmmc0_bus 1 1 24000000 0 0
dbgsys 0 0 24000000 0 0
avs 0 0 24000000 0 0
apb2 1 1 24000000 0 0
twi3 0 0 24000000 0 0
twi2 0 0 24000000 0 0
twi1 0 0 24000000 0 0
twi0 0 0 24000000 0 0
uart3 0 0 24000000 0 0
uart2 0 0 24000000 0 0
uart1 0 0 24000000 0 0
uart0 1 1 24000000 0 0
hoscd2 0 0 12000000 0 0
pll_csi 0 0 336000000 0 0
csi_top 0 0 336000000 0 0
pll_audio 4 4 22579200 0 0
codec_1x 1 1 22579200 0 0
i2s0 1 1 22579200 0 0
codec_4x 0 0 22579200 0 0
i2s1 0 0 22579200 0 0
pll_audiox2 0 0 45158400 0 0
pll_audiox4 0 0 90316800 0 0
pll_video0 2 2 99000000 0 0
dspo 0 0 99000000 0 0
tcon_lcd 1 1 99000000 0 0
mipi_dphy0 1 1 24750000 0 0
pll_video0x4 0 0 396000000 0 0
pll_uni 3 4 600000000 0 0
eise 0 0 600000000 0 0
isp 0 0 300000000 0 0
ve 0 1 600000000 0 0
de 1 1 300000000 0 0
g2d 1 1 300000000 0 0
pll_unix2 1 1 1200000000 0 0
sdmmc0_mod 1 1 300000000 0 0
pll_periph0 4 4 600000000 0 0
spi0 1 1 100000000 0 0
cpurapbs2_pll 0 0 600000000 0 0
cpurcpus_pll 0 0 600000000 0 0
nna_rst 0 0 600000000 0 0
apb1 2 2 100000000 0 0
pio 1 1 100000000 0 0
pwm 1 1 100000000 0 0
ahb3 2 2 200000000 0 0
display_top 1 1 200000000 0 0
usbotg 1 1 200000000 0 0
usbehci0 0 0 200000000 0 0
usbohci0 0 0 200000000 0 0
gmac 0 0 200000000 0 0
psi 1 1 200000000 0 0
ahb2 0 0 200000000 0 0
ahb1 2 2 200000000 0 0
iommu 1 1 200000000 0 0
hstimer 0 0 200000000 0 0
dma 1 1 200000000 0 0
periph32k 0 0 32768 0 0
pll_periph0x2 0 0 1200000000 0 0
nna 0 0 1200000000 0 0
ce 0 0 300000000 0 0
pll_ddr0 0 0 1584000000 0 0
sdram 0 0 1584000000 0 0
mbus 0 0 396000000 0 0
pll_cpu 0 0 1200000000 0 0
cpu 0 0 1200000000 0 0
cpuapb 0 0 300000000 0 0
axi 0 0 400000000 0 0
iosc 0 0 16000000 0 0
losc 1 1 32768 0 0
losc_out 1 1 32768 0 0
cpurowc 0 0 32768 0 0
root@(none):/sys/kernel/debug/clk#
补充:
值得一提的是,这种动态调压调频的策略和配置方案并非ARM独有的,mainline的X84 make menuconfig的时候的配置几乎和ARM一样
如果关闭CPU 调频,可以直接关闭CONFIG_CPU_FREQ配置:
一些有用的调试节点:
结束!
相关文章
- [Linux]linux下取消用户名和密码直接登录
- linux分享二:Linux如何修改字符集
- linux用户权限
- windows和linux中换行符的转换
- linux命令备份
- linux 的nohup & 和daemon 总结(转)
- Linux基础之windows linux双系统
- 【学习总结】快速上手Linux玩转典型应用-第6章-linux常用命令讲解
- Linux nohup &使用 后台命令脱离终端运行
- linux ubuntu 22.04安装后配置优化:调整 Dock Panel 外观 & 启用 Gnome 扩展支持 & 安装gnome tweaks
- linux fedora35 zsh & oh-my-zsh 的配置与使用
- linux 源码安装postgresql
- 【Linux 内核 内存管理】mmap 系统调用源码分析 ② ( sys_mmap_pgoff 系统调用函数执行流程 | sys_mmap_pgoff 函数源码 )
- L86.linux命令每日一练 -- 第12章 Linux系统常用内置命令(二)
- L84.linux命令每日一练 -- 第11章 Linux系统管理命令 -- rpm和yum
- L70.linux命令每日一练 -- 第十章 Linux网络管理命令 -- nc和ssh
- L62.linux命令每日一练 -- 第九章 Linux进程管理命令 -- strace和ltrace
- L33.linux命令每日一练 -- 第五章 Linux信息显示与搜索文件命令 -- du和date
- geo ftp环境变量 export source ~/.bashrc Linux中filezilla下载ftp文件 ftp.ncbi.nlm.nih.gov linux下载 ftp下载geo非原始数
- 02 从头开始atac项目 ubuntu20 install r4.2 Linux系统环境配置 服务器版本的rstudio r install in linux /ubuntu/centos
- Linux SSH & SCP命令
- 周立功arm linux教程,极速搭建周立功IMX287A ARM Linux开发环境
- Linux系统之源码编译部署Redis数据库
- 02 从头开始atac项目 ubuntu20 install r4.2 Linux系统环境配置 服务器版本的rstudio r install in linux /ubuntu/centos