DVFS 小註解

此處的 DVFS 是指 Dynamic Voltage Frequency Scaling, 藉由動態調整電壓與頻率, 以節省系統的功耗. 基本上 DFVS 有純硬體與軟硬體合作的兩種實行方式. 純硬體版就沒太多可以討論的, 大家可以去看些論文 [1-2].第一篇的重點在於有介紹 Vfb (feedback voltage), 這樣再看 [3] 的時候會比較有感覺. 而 [2] 這一篇就兼顧了 CPU 和 GPU 省電的背景說明, 這樣思考的層面會比較廣.

​在 [2] 的第三節 DVFS background 裡面說到, 如果用軟體的方法對 CPU 做 DVFS, 最常用的方法是從 timer 和 scheduler 去蒐集每個 task 用了多少時間, 會睡多久? 接下來就要預測系統未來的負荷. 預測得愈好, 演算法愈厲害, 系統當然就愈省電. 相對地, 硬體做法談不上什麼預測能力, 但是可以節省 CPU 的運算量. 嗯, 看來跑安兔兔的時候, 應該開足馬力, 並自動關閉軟體 DVFS 30 分鐘, 哈!

上圖取材自 [2], 比較深色的箭頭就表示硬體的流程, 淺色的部份表示軟體的流程, 而軟體必須要有硬體的搭配.圖上的 CCM 表示 clock control module, 而 PMIC 表示 power management IC 或者 PMU (power management unit). 至於圖上的 DTCP, 論文中沒有提到. 在 [4] 裡面提到它代表 Dynamic Process Temperature Compensation. 也就是可以隨著偵測到溫度的不同, 去微調 DVFS 的數值.

至於 GPU 的 DVFS, 它原本就是一個相對封閉的系統, 不像 CPU 有作業系統可以擷取資料. 論文 [2] 其實是透過 CUDA 去控制 NVIDA 的 GPU.可想而知, 我們也可以用 OpenCL, renderscript 來控制其他廠家的 GPU.

​在 Linux 內核方面, 根據 [3] 的說法, DVFS 和 DPM (dynamic power management) 是不同的概念. DVFS 需要的是數組調校過的電壓與頻率, 把它儲存在一個表格之中. 當我們預期的模型發生時, 我們就拿套好的招式出招. 而 DPM 比較著重 CPU 在何種操作模式之下, 例如: stop, run, wait,…等等.根據 [5], 他們認為 DPM 努力的方向在於:

Among the present and planned activities for DPM are:

Adding support for more platforms.

Integrating dynamic power management with standby/suspend/hibernate low-power states, and extending ACPI-inspired standby support for embedded devices that feature a variety of low-power "sleep" states.

Power policy management for tightly integrated application environments on consumer electronics devices, allowing the system designer precise control over numerous platform power parameters.

Automated power policy management that automatically selects desired power parameters based on system state, such as CPU load.

Reliably suspend and resume devices actively in use at suspend time through staged calls into drivers to suspend and lockout of new requests during a suspend period.

Integrate management of platform power parameters with device requirements, scaling device power parameters or powering off devices in response to platform changes that affect operation of devices. Possibly constrain power state transitions based on the needs of devices actively in use.

Very fast application restart on resume while slower, hotplug-capable devices are rescanned.

那麼 Android 又如何實現 DVFS 呢? 在 [3] 裡面提到, freescale 的版本中, power management service 會透過 JNI (Java Native Interface) 去 call /hardware/libhardware_legacy/power/power.c, /frameworks/base/core/jni/android_os_Power.cpp, 和  /frameworks/base/service/java/com/android/server/PowerManagerService.java.bootCompleted, 真正的 driver 當然還是 Linux 級的 kernel_imxarcharmplat-mxcdvfs-core.c. 開闢放在 /sys/devices/platform/mxc_dfvs_core.0/enable.

[ref]
1. Low-Power Fast-Settling Low-Dropout Regulator Using a Digitally Assisted Voltage Accelerator for DVFS Application

2. Low-power Task Scheduling for GPU Energy Reduction

3. 飞思卡尔省电模式介绍

4. dvfs dptc dpm

5. Dynamic Power Management

  1. Hi, 最近也在研究這個題目, 查詢一些網站, 有些人是透過修改cpufreq driver再加上cpu power的調整, 搭配溫度sensor 來達成DVFS. 看mach-tegra內的dvfs code flow又複雜許多. 但總是有個疑問, Chip 溫度高, 可能是外界因素 (ex: 機殼), 也可能正在解影片之類高負載工作, Linux 卻一視同仁直接將CPU clock拉下來, 那不就衍生出產品問題 (ex: lag) 了? 當然也有人說這總比當機好, 這好像也說得過去. 但Linux可以預測/偷瞄 user space行為而作出對應動作? @@;

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>