赞
踩
Linux内核中的CPU控制框架是一个用于管理和控制处理器调度和功耗的机制。它提供了一种方式来管理系统中的处理器资源,以便实现性能优化、功耗管理和平衡负载。下面是Linux内核中的一些主要CPU控制框架和概念:
调度器(Scheduler): Linux内核使用调度器来决定哪个任务在特定时刻运行在哪个CPU核心上。常见的调度器包括CFS(Completely Fair Scheduler)和实时调度器。调度器的目标是公平地分配CPU时间片,以优化系统的整体性能。
CPU频率调整(CPU Frequency Scaling): Linux支持通过改变处理器频率来节省功耗。这可以通过动态地调整CPU的频率来实现,以便在需要更多性能时提高频率,在负载较低时降低频率。
CPU C-states: CPU C-states指的是不同的处理器电源管理状态,包括C0(正常运行状态)到C6(深度睡眠状态)。在较低的C-states,CPU可以进入更低功耗的状态,从而节省能源。
CPU P-states: CPU P-states指的是不同的处理器性能状态,它们对应于不同的频率和电压设置。通过切换P-states,可以在性能和功耗之间进行权衡。
任务迁移(Task Migration): 任务迁移是将任务从一个CPU核心迁移到另一个CPU核心的过程。这可以通过调度器自动进行,以实现负载均衡和优化性能。
IRQ Affinity: IRQ(中断请求)亲和性是指将特定的中断与特定的CPU核心关联起来,以减少中断处理的开销。
CPU绑定(CPU Pinning): CPU绑定是指将特定的任务绑定到特定的CPU核心,以提供更精确的控制和性能。
热插拔(Hotplug): CPU热插拔是指在运行时添加或移除CPU核心的能力。Linux内核支持通过热插拔机制来动态地添加或移除处理器资源。
这些概念和框架共同构成了Linux内核中的CPU控制机制,使系统能够更好地管理处理器资源,以实现性能、功耗和负载的平衡。
CPU温度:cat /sys/class/thermal/thermal_zone0/temp
GPU温度:cat /sys/class/thermal/thermal_zone1/temp
cat /sys/kernel/debug/regulator/vdd_cpu/voltage
查看CPU电压
cat /sys/kernel/debug/regulator/vdd_cpu/cpu0-cpu/min_uV
#查看最低电压
cat /sys/kernel/debug/regulator/vdd_cpu/cpu0-cpu/max_uV
#查看最高电压
设置电压
echo 1150000 > /sys/kernel/debug/regulator/vdd_cpu/voltage
电压单位:uV
注意:升频时,先升压再升频,降频时,先降频再降压。
cat /sys/kernel/debug/opp/opp_summary
查看频率-电压对照表
具体某个Hz下的target min max 电压可以通过
/sys/kernel/debug/opp/XXX/opp:XXX/supply-0
接口下的u_volt_max、u_volt_min、u_volt_target进行查询
查看当前CPU频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq或者cpuinfo_cur_freq
查看CPU最大频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq或者cpuinfo_max_freq
查看CPU最小频率
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq或者cpuinfo_min_freq
单位 KHz
查看CPU支持的频率列表
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies
设置CPU定频
可以通过设备树中的&cpu0_opp_table 控制
开机后通过命令定频
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
echo 1800000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_setspe
注意:通过 cpufreq 节点设置 CPU 频率时,通常电压也会被改变。
echo userspace > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
关闭CPU自动变频
echo 216000000 > /sys/kernel/debug/clk/armclk/clk_rate /* 设置频率 */
cat /sys/kernel/debug/clk/armclkl/clk_rate /* 查看频率 */
单位 HZ
echo XXX > /sys/kernel/debug/regulator/vdd_cpu/voltage /*调压*/
cat /sys/kernel/debug/regulator/vdd_cpu/voltage
注意:升频时,先升压再升频,降频时,先降频再降压。
内核当前使用的调度策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
内核所支持的调用策略
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
调用策略 | 使用效果 |
---|---|
conservative | 保守 动态调频 |
ondemand | 激进 动态调频 幅度较大 |
userspace | 用户态策略 可以使用cpufrequtils 工具 |
powersave | 频率始终保持在最低 |
performance | 频率始终保持在最高 |
interactive | 动态调频 快升慢降 为高性能需求响应服务 |
schedutil | EAS新一代策略 大小核上使用非常合适 |
关闭部分CPU
echo 0 > /sys/devices/system/cpu/cpu2/online /*关闭cpu2*/
限制频率
echo 1608000 > /sys/devices/system/cpy/cpufreq/policy0/scaling_max_freq /*限制cpu0最高频率*/
场景变频:不同场景配置不同DDR频率
需要 CONFIG_THERMAL_GOV_USER_SPACE=y
如果需要默认关温控,可以打开CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE=y
echo user_space > /sys/class/thermal/thermal_zone0/policy
echo disabled > /sys/class/thermal/thermal_zone0/mode
echo 1 > /sys/kernel/debug/tracing/events/thermal/enable
echo 1 > /sys/kernel/debug/tracing/events/thermal_power_allocator/enable
echo 1 > /sys/kernel/debug/tracing/tracing_on
查看trace
cat /sys/kernel/debug/tracing/trace
停止trace
echo 0 > /sys/kernel/debug/tracing/tracing_on
echo 0 > /sys/kernel/debug/tracing/trace
动态功耗公式:
C是常量, V是电压, F是频率
P(d)= C * V^2 * F
注:温度是影响功耗的一个重要参数,所以测量功耗的同时需要实时记录温度
获取温度的命令如下:
cat /sys/class/thermal/thermal_zone0/temp
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。