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。