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 散热设备,并将其与设备树节点链接,以便通过 thermal 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
其中 capacitance 是一个常量,表示基本单位为 mW/MHz/uVolt^2 的指示性运行时间动态功率系数。移动 CPU 的典型值可能在 100 到 500 之间。作为参考,ARM Juno 开发平台中 SoC 的近似值分别为 Cortex-A57 集群 530 和 Cortex-A53 集群 140。