动态电压与频率调节在降低功耗中的作用
发布时间:2008/5/27 0:00:00 访问次数:443
    
     飞思卡尔半导体公司 卢春鹏
    
    1 dvfs的工作流程
    
    现在,为了延长便携式设备(如手机、mp3、多媒体播放器、笔记本电脑等)的电池寿命,芯片厂商们正在绞尽脑汁开发新的节电技术。简单地说,这些节电技术可以分为两类——动态技术和静态技术。静态技术包括不同的低功耗模式,芯片内部不同组件的时钟或电源的按需开关等。动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。该技术的理论依据是如下的公式:
    
    
    从上面的公式可以看出,降低频率可以降低功率,但是单纯地降低频率并不能节省能量。因为对于一个给定的任务,f*t是一个常量,只有在降低频率的同时降低电压,才能真正地降低能量的消耗。
    
    目前许多芯片支持dvfs,比如intei公司的芯片支持speedstep,arm的支持iem(intelligent energy man-ager)和avs(adaptive voltage scaling)等。但是要让dvfs发挥作用,真正地实现节能,只有芯片的支持还是不够的,还需要软件与硬件的综合设计。
    
    一个典型的dvfs系统的工作流程如下:
    
    ①采集与系统负载有关的信号,计算当前的系统负载。这个过程可以用软件实现,也可以用硬件实现。软件实现一般是在操作系统的核心调用中安放钩子,特别是调度器,根据其调用的频度来判断系统的负载。硬件实现如frecscale的i.mx31,通过采集一些核心信号中断线、cache、内存总线的使用情况等,计算当前的系统负载。
    
    ②根据系统的当前负载,预测系统在下一时间段需要的性能。有多种预测算法可以选择,要根据具体的应用来决定。这种预测,既可由软件实现,也可由硬件实现。
    
    ③将预测的性能转换成需要的频率,从而调整芯片的时钟设置。
    
    ④根据新的频率计算相应的电压。通知电源管理模块调整给cpu的电压。这需要特别的电源管理芯片,比如freescale公司的mc13783或者ns公司的支持pow-erwise特性的系列电源管理芯片。它们能够支持微小的电压调整(25 mv)并且能在极短的时间内(几十μs)完成电压的调整。
    
    另外,在调整频率和电压时,要特别注意调整的顺序。当频率由高到低调整时,应该先降频率,再降电压;相反,当升高频率时,应该先升电压,再升频率。
    
    图1演示了简单的dvfs过程。
    
    
    2 基于软件的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( )线程被调用的时间。
    
    在预测下一时间段的系统负载时,需要利用采集到的前面几个时间段的实际负载值,然后根据下面的公式进行预测:
    
    
&n
    
     飞思卡尔半导体公司 卢春鹏
    
    1 dvfs的工作流程
    
    现在,为了延长便携式设备(如手机、mp3、多媒体播放器、笔记本电脑等)的电池寿命,芯片厂商们正在绞尽脑汁开发新的节电技术。简单地说,这些节电技术可以分为两类——动态技术和静态技术。静态技术包括不同的低功耗模式,芯片内部不同组件的时钟或电源的按需开关等。动态技术则是根据芯片所运行的应用程序对计算能力的不同需要,动态调节芯片的运行频率和电压(对于同一芯片,频率越高,需要的电压也越高),从而达到节能的目的。该技术的理论依据是如下的公式:
    
    
    从上面的公式可以看出,降低频率可以降低功率,但是单纯地降低频率并不能节省能量。因为对于一个给定的任务,f*t是一个常量,只有在降低频率的同时降低电压,才能真正地降低能量的消耗。
    
    目前许多芯片支持dvfs,比如intei公司的芯片支持speedstep,arm的支持iem(intelligent energy man-ager)和avs(adaptive voltage scaling)等。但是要让dvfs发挥作用,真正地实现节能,只有芯片的支持还是不够的,还需要软件与硬件的综合设计。
    
    一个典型的dvfs系统的工作流程如下:
    
    ①采集与系统负载有关的信号,计算当前的系统负载。这个过程可以用软件实现,也可以用硬件实现。软件实现一般是在操作系统的核心调用中安放钩子,特别是调度器,根据其调用的频度来判断系统的负载。硬件实现如frecscale的i.mx31,通过采集一些核心信号中断线、cache、内存总线的使用情况等,计算当前的系统负载。
    
    ②根据系统的当前负载,预测系统在下一时间段需要的性能。有多种预测算法可以选择,要根据具体的应用来决定。这种预测,既可由软件实现,也可由硬件实现。
    
    ③将预测的性能转换成需要的频率,从而调整芯片的时钟设置。
    
    ④根据新的频率计算相应的电压。通知电源管理模块调整给cpu的电压。这需要特别的电源管理芯片,比如freescale公司的mc13783或者ns公司的支持pow-erwise特性的系列电源管理芯片。它们能够支持微小的电压调整(25 mv)并且能在极短的时间内(几十μs)完成电压的调整。
    
    另外,在调整频率和电压时,要特别注意调整的顺序。当频率由高到低调整时,应该先降频率,再降电压;相反,当升高频率时,应该先升电压,再升频率。
    
    图1演示了简单的dvfs过程。
    
    
    2 基于软件的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( )线程被调用的时间。
    
    在预测下一时间段的系统负载时,需要利用采集到的前面几个时间段的实际负载值,然后根据下面的公式进行预测:
    
    
&n