CPU 散热 API 使用方法¶
作者:Amit Daniel Kachhap <amit.kachhap@linaro.org>
更新时间:2015 年 1 月 6 日
版权所有 (c) 2012 Samsung Electronics Co., Ltd(http://www.samsung.com)
0. 简介¶
通用 CPU 散热(频率限制)为调用者提供注册/注销 API。冷却设备与跳变点的绑定留给用户。注册 API 返回冷却设备指针。
1. CPU 散热 API¶
1.1 cpufreq 注册/注销 API¶
struct thermal_cooling_device *cpufreq_cooling_register(struct cpumask *clip_cpus)此接口函数以名称“thermal-cpufreq-%x”注册 cpufreq 冷却设备。此 API 可以支持 cpufreq 冷却设备的多个实例。
- clip_cpus
将发生频率约束的 CPU 的 cpumask。
struct thermal_cooling_device *of_cpufreq_cooling_register(struct cpufreq_policy *policy)此接口函数以名称“thermal-cpufreq-%x”注册 cpufreq 冷却设备,并将其与设备树节点链接,以便通过散热 DT 代码绑定它。此 API 可以支持 cpufreq 冷却设备的多个实例。
- policy
CPUFreq 策略。
void cpufreq_cooling_unregister(struct thermal_cooling_device *cdev)此接口函数注销“thermal-cpufreq-%x”冷却设备。
cdev:要注销的冷却设备指针。
2. 功率模型¶
功率 API 注册函数为 CPU 提供了一个简单的功率模型。当前功率计算为动态功率(目前不支持静态功率)。此功率模型要求使用内核的 opp 库注册 CPU 的工作点,并将 cpufreq_frequency_table 分配给 CPU 的 struct device
。如果您使用的是 CONFIG_CPUFREQ_DT,那么 cpufreq_frequency_table 应该已经分配给 CPU 设备。
处理器的动态功耗取决于许多因素。对于给定的处理器实现,主要因素是
处理器在运行状态下消耗动态功率的时间,与在空闲状态下动态消耗可忽略不计的时间相比。 在这里,我们将其称为“利用率”。
DVFS 导致的电压和频率水平。 DVFS 水平是控制功耗的主要因素。
在运行时间内,“执行”行为(指令类型、内存访问模式等)在大多数情况下会导致二阶变化。 在病态情况下,这种变化可能很显着,但通常其影响远小于上述因素。
然后,高级动态功耗模型可以表示为
Pdyn = f(run) * Voltage^2 * Frequency * Utilisation
f(run) 在这里代表描述的执行行为,其结果的单位为瓦/赫兹/伏特^2(通常以 mW/MHz/uVolt^2 表示)
可以对 f(run) 的详细行为进行在线建模。 但是,在实践中,这种在线模型依赖于许多特定于实现的处理器支持和表征因素。 因此,在初始实现中,该贡献表示为常数系数。 这是一种简化,与对总体功率变化的相对贡献一致。
在这个简化的表示中,我们的模型变为
Pdyn = Capacitance * Voltage^2 * Frequency * Utilisation
其中 电容 是一个常数,表示以 mW/MHz/uVolt^2 为基本单位的指示性运行时间动态功率系数。 移动 CPU 的典型值可能在 100 到 500 的范围内。 作为参考,ARM Juno 开发平台中 SoC 的近似值为:Cortex-A57 集群为 530,Cortex-A53 集群为 140。