低功耗设计——DVFS

本文探讨了动态电压频率调节(DVFS)在便携设备电池优化中的作用,介绍了其工作原理、调节顺序、策略以及软件和硬件实现。重点讨论了预测负载准确性和对实时应用的影响,以及多模态设计带来的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 概况

        现在,为了延长便携式设备(如手机、MP3、多媒体播放器、笔记本电脑等)的电池寿命,芯片厂商们正在绞尽脑汁开发新的节电技术。简单地说,这些节电技术可以分为两类——动态技术和静态技术。静态技术包括不同的低功耗模式,芯片内部不同组件的时钟或电源的按需开关等。动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。在 CMOS 电路中功率消耗主要可以分为动态功率消耗和静态功率消耗,公式如下:

        其中 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I_dq 代表静态电流。公式的前部分代表的是动态功率消耗,后部分则代表的是静态功率消耗。从公式中可以看出,想要降低动态功率消耗可以从C、V、α、f着手,对于软件来讲常用的调节方式只涉及到V、f 两个因素。

        DVFS(Dynamic Voltage and Frequency Scaling)动态电压频率调节本质上是一种低功耗技术,目的是根据的芯片当时的实际功耗需要设定工作电压和时钟频率,这样可以保证提供的功率既满足要求又不会性能过剩,从而可以降低功耗。

2. 原理

        DVFS技术利用了CMOS芯片的特性:CMOS芯片的能量消耗正比于电压的平方和时钟频率。DVFS技术是以延长任务执行时间为代价来达到减少系统能量消耗的目的,体现了功耗与性能之间的权衡。可以通过减少时钟频率来降低通用处理器功耗的。然而,仅仅降低时钟频率并不节约能量,因为性能的降低会带来任务执行时间的增加。调节电压需要以相同的比例调节频率以满足信号传播延迟要求。然而不管是电压调节还是频率调节,都会造成系统性能的损失,并增加系统的响应延迟。

        式中C 代表负载电容的容值,V 是工作电压,A 是当前频率下电路的平均翻转率,f 为工作频率,IShort 和ILeakage 分别为短路电流和漏电流。从公式中可知,C、V 、A、f 决定了整个CMOS 电路的功耗,而DVFS 技术就是主要通过改变频率f 和电压V 的值来调节系统功耗的。

        为了尽量减少可感知的系统性能负面影响同时又能最大程度地降低系统能耗,策略必须估计未来的工作负载并选择最合适的频率。准确地预测未来的工作负载对广泛使用的策略是至关重要的。预测错误可能会导致设置的频率太高降低节省能耗,或设置频率过低造成系统响应延迟过高。所以,要想降低功耗,需要选择合适的供电电压和时钟频率。

3. 调节顺序

        安全的调节机制是:
        当需要提升功率时,应先提升供电电压,然后提升时钟频率。
        当需要降低功率时,应先降低时钟频率,再降低供电电压。

        DVFS系统基本流程为:

  1. 采集与系统负载有关的信号,计算当前的系统负载。这个过程可以用软件实现,也可以用硬件实现。软件实现一般是在操作系统的核心调用中安放钩子,特别是调度器,根据其调用的频度来判断系统的负载。硬件实现如Freescale的i.Mx31,通过采集一些核心信号中断线、Cache、内存总线的使用情况等[1],计算当前的系统负载。
  2. 根据系统的当前负载,预测系统在下一时间段需要的性能。有多种预测算法可以选择,要根据具体的应用来决定。这种预测,既可由软件实现,也可由硬件实现。
  3. 将预测的性能转换成需要的频率,从而调整芯片的时钟设置。
  4. 根据新的频率计算相应的电压。通知电源管理模块调整给CPU的电压。这需要特别的电源管理芯片,比如Freescale公司的MC13783或者NS公司的支持PowerWise特性的系列电源管理芯片。它们能够支持微小的电压调整(25 mV)并且能在极短的时间内(几十μs)完成电压的调整。

4. DVFS调节策略

        制定调整策略前,需要先找出系统中的耗电大的部件,如CPU、GPU、DSP等硬件算法加速模块(结合逻辑规模);然后统计出这些模块的负载情况,基本的策略当然是工作负载增加则升频升压,工作负载降低则降频降压。工作负载的粗略模型是在一个时间窗口内,统计模块工作的时间长度,设定不同阈值,高阈值对应高电压高频率,低阈值对应低电压低频率。每次统计值穿过阈值边界,触发DVFS转换。

5. 基于软硬件的DVFS实现

5.1 基于软件的DVFS实现

        在基于软件的DVFS实现中,一般通过在操作系统的核心调用中安装钩子的办法来收集系统调用的信息,判断当前的系统负载。其中最重要的是调度器,其他地方包括读/写接口、定时器等。例如,在Linux内核中,一般在以下地方安装钩子。

       ◇ kernel/sched.c。修改__schedule(),在schedule()前后插入语句,记录一个任务执行时间。
  ◇ fs/read_write.c。修改sys_read()和sys_write(),记录其被某任务调用的次数。
  ◇ kernel/timer.c。修改sys_nanosleep()和msleep(),记录任务主动休息的时间。
  ◇ fs/ioctl.c。修改sys_ioctl(),记录其被调用的次数。
  ◇ kernel/exit.c。修改do_exit(),记录任务主动退出的时间。
  ◇ include/asm_xxx/system.h, arch/xxx/system.c。修改arch_idle(),计算cpu_idle()线程被调用的时间。

        在预测下一时间段的系统负载时,需要利用采集到的前面几个时间段的实际负载值,然后根据下面的公式进行预测:

  根据h的不同,可以形成不同的预测算法,比如:

  ◇ 最简单的先前值法(Previous Value,PV)

  ◇ 移动平均负载算法(Moving Average Workload,MAW)

  ◇ 指数加权平均法(Exponential Weighted Average,EWA)

  ◇ 最小均方法(Least Mean Square,LMS)

  以上这些算法各有其优缺点。例如LMS算法类似于自适应滤波器,能够自动调整参数,但是面临着收敛速度的问题。

  ARM公司为了验证其芯片的DVS(Dynamic Voltage Scaling,动态电压调节)特性,开发的软件Vertigo[3]中,采用了UH(Utilization History)算法,有关的公式如下:

  ◇ 任务负载

  ◇ 负载估计

  ◇ 期限估计

  ◇ 性能估计

  该算法对那些性能需求变化较慢的任务比较实用,比如MPEG解码器。在Vertigo的实现中,一旦预测器完成性能预测,它将会把新的性能需求提交给策略管理器,由策略管理器决定是否调整当前的性能设置。

5.2 基于硬件的DVFS实现

        正如前面所说的,CPU负载跟踪与性能预测的工作都可以由硬件完成。这样,一方面增强了负载计算的准确性;另一方面减轻了CPU用于负载跟踪与性能预测的负担。当然,这样做也有一个弊端,就是无法灵活地选择预测算法。但是,这个缺点可以通过设置不同的预测参数得到一定程度的弥补。

  飞思卡尔的i.MX31就是这样的一个例子。这是一款针对移动多媒体市场的应用处理器,具有强大的音频和视频处理能力。该芯片内部包含一个ARM11的CPU核,同时它也继承了来自ARM的DVS技术并发展为DVFS。在该芯片中,CPU负载跟踪和性能预测都是由硬件完成的。16路CPU活动信号被采集之后,经过加权,被送到负载叠加器,与另外采集的CPU空闲信号(经过简单平均)进行叠加。叠加器输出的结果被送到EMA模块,执行指数移动平均(Exponential Moving Average)算法,进行性能预测。EMA模块得到的结果与预先设置的门限值进行比较,如果预测的性能需求高于上限,则请求调高频率;反之,如果预测的性能需求低于下限,则请求降低频率。这种请求一般作为中断,发送给CPU自身或外接的处理器,由它们在其中断处理程序中设置相应的频率和电压。CCM(Clock Control Module)为时钟控制模块,负责调节CPU的频率。PMIC(Power Management IC)为电源管理芯片,负责提供CPU所需要的电压。该芯片提供两种接口给CPU:常规的SPI(Serial Programmable Interface)和专用于动态电压调节的DVS接口。该接口由两根线组成。两根线的状态00表示电压无变化,01表示电压降低一格,10表示电压升高一格,11表示电压升到最高值。DPTC(Dynamic Process and Temperature Control)指的是动态制程与温度控制。该技术能够根据该芯片的制程和当前的温度动态调节电源电压,从而也可以有效地节省能量。这也是i.MX31的一项创新。

        在实现DVFS的过程中,需要一个输出电压控制器,一般来说叫做EMU(Energy Management Unit)。它在芯片中的基本逻辑结构如下:

        在实际芯片工作过程中,EMU会根据不同的功耗需求输出不同的电压供给部分或者全部芯片的逻辑部分,从而在满足频率的前提下有效降低整体功耗。

6. 影响DVFS应用的因素

        动态电压与频率调节的技术提出很久了,在Linux上也有专门的开源项目cpufreq,但是这项技术并没有得到广泛的应用。其中一个最关键的因素就是预测的可靠性。没有一种预测算法是100%准确的,也没有一种算法可以应用于所有的程序;而对于实时类的应用(如音频、视频等),预测失败的结果是不可接受的。因为实时类的应用都有一个Deadline,错过Deadline,就意味着程序的运行出了问题。比如音频或视频帧的播放时间错过以后,用户就能明显地感觉到音频或视频的不连贯,这会极大地影响用户的体验,从而也会影响用户对DVFS的信心。作者在进行DVFS的测试时,就碰到过这些问题。IEM测试中采用的简单移动平均算法只对单一应用程序有效。但是i.MX31内置的移动指数平均算法EMA也不是万能的。对于Pink Floyd的某些音乐,它就不能平滑地播放(也许通过修改一些加权参数,可以播放)。

        另外,在芯片设计过程中,为了在不同电压和频率条件下满足时序需求,需要在多个coner和多个mode下做时序收敛,也就是通常所说的multi-mode multi-corner。这里的mode不仅仅是功能上区分的function,test等mode,还需要同一功能模式下不同电压的时序,因此采用这种设计的芯片会带来额外的timing signoff复杂度和工作量。

        需要说明的是,DVFS调整电压和频率仍然是采用固定的几个数值来调节,而对应的还有AVFS(Adaptive Voltage Frequency Scaling)尽管可以更精细地调节,但是在实际中应用却不多,原因在于AVFS会极大地增加timing signoff的难度,一方面很难用少数PVT条件去覆盖所有电压和频率的组合,另一方面想要增加PVT条件可能面临signoff corner过多或者时序库不全需要自己K库的问题。

        总结来说,在实际应用中相较AVFS的方法,DVFS的应用更多。主要原因在于它可以在降低功耗和设计难度方面有一个较好的平衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值