从上面的公式可以看出,降低频率可以降低功率,但是单纯地降低频率并不能节省能量。因为对于一个给定的任务,F*t是一个常量,只有在降低频率的同时降低电压,才能真正地降低能量的消耗。
目前许多芯片支持DVFS,比如 Intel公司的芯片支持SpeedStep,ARM的支持IEM(Intelligent Energy Manager)和AVS(Adaptive Voltage Scaling)等。但是要让DVFS发挥作用,真正地实现节能,只有芯片的支持还是不够的,还需要软件与硬件的综合设计。
一个典型的D
VFS系统的工作流程如下:
① 采集与系统负载有关的信号,计算当前的系统负载。这个过程可以用软件实现,也可以用硬件实现。软件实现一般是在操作系统的核心调用中安放钩子,特别是调度器,根据其调用的频度来判断系统的负载。硬件实现如Freescale的i.Mx31,通过采集一些核心信号中断线、Cache、内存总线的使用情况等 [1],计算当前的系统负载。
② 根据系统的当前负载,预测系统在下一时间段需要的性能。有多种预测算法可以选择,要根据具体的应用来决定。这种预测,既可由软件实现,也可由硬件实现。
③ 将预测的性能转换成需要的频率,从而调整芯片的时钟设置。
④ 根据新的频率计算相应的电压。通知电源管理模块调整给CPU的电压。这需要特别的电源管理芯片,比如Freescale公司的MC13783或者NS公司的支持PowerWise特性的系列电源管理芯片。它们能够支持微小的电压调整(25 mV)并且能在极短的时间内(几十μs)完成电压的调整。
另外,在调整频率和电压时,要特别注意调整的顺序。当频率由高到低调整时,应该先降频率,再降电压;相反,当升高频率时,应该先升电压,再升频率。
图1演示了简单的DVFS过程[2]。