如何使用CPU cooling API

文章目录

  • 0.简介
  • 1. cpu cooling API
    • 1.1 cpufreq registration/unregistration API
  • 2.电源模型

0.简介

通用cpu cooling(freq clipping)子系统为调用者提供registration/unregistration API。cooling devices与trip point的绑定留给用户。注册API返回cooling device指针。


1. cpu cooling API

1.1 cpufreq registration/unregistration API

1.1.1 struct thermal_cooling_device * cpufreq_cooling_register(
    struct cpumask * clip_cpus)
    
        此接口函数将cpufreq cooling设备注册为名称“thermal-cpufreq-%x”。
        这个api可以支持多个cpufreq冷却设备实例。
    
       clip_cpus:cpus的cpumask,其中将发生频率限制。

1.1.2 struct thermal_cooling_device * of_cpufreq_cooling_register(
struct cpufreq_policy * policy)

    此接口函数将cpufreq cooling设备注册为名称“thermal-cpufreq-%x”,
    将其与设备树节点链接,以便通过thermal DT代码绑定它。
    这个api可以支持多个cpufreq cooling设备实例。

    策略:CPUFreq策略。

1.1.3 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) 此处表示所描述的执行行为,其结果的单位为Watts/Hz/Volt^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。

你可能感兴趣的:(Linux,Thermal)