基于处理器核数自动调节的电源管理方法

文档序号:6441366阅读:211来源:国知局
专利名称:基于处理器核数自动调节的电源管理方法
技术领域
本发明涉及一种电源管理方法,特别是一种基于处理器核数自动调节的电源管理方法。
背景技术
电源管理是计算机操作系统的一个重要组件,其根本目的是节能并且不影响性能。这在通过电池供电的笔记本电脑、平板电脑等设备上显得尤为重要。通常来说,电源管理的方法策略主要包括三个方面运行时电源管理,待机管理,以及休眠管理。
ACPI (Advanced Configuration Power Interface, , ^ρ )源管理规范,其实现需要软件、硬件和固件的高度协作配合。图1是ACPI所定义的各种电源状态,详细解释如下
1,睡眠状态与全局状态睡眠状态中的计算机具有很低的功耗,可以接近于零。 ACPI定义了 6中睡眠状态,SO S5,值越大睡眠越深,SO是正常运行,S5是软关机。另外还定义了 GO G3四种全局状态,其中GO对应SO,Gl对应Sl到S4,G2对应S5,G3是彻底的硬关机,切断一切电源。
2,CPU状态与设备状态当CPU或者I/O设备空闲时,可以让它们单独进入某种程度的低功耗状态或者停止运行的电源状态。而这时整个系统还是处于so。这些状态在 ACPI里面称为C状态(也称Cx或dtate,用于CPU)或D状态(也称Dx或Dltate,用于设备),从C0/D0直到Cn/Dn,η越大表示关闭的子部件越多,功耗越低。
3,性能状态在系统的负载不是很高时,可以让CPU或设备处于低于峰值的某种较低性能状态,较低的性能也意味着较低的功耗。ACPI定义的性能状态称为P状态(也称 Px或P-Mate),从PO直到Ρη,η越大表示性能和功耗越低。所有的P状态都是C0/D0的子状态。
4,发热状态当系统出现过热状态时,可以改变系统状态减少发热(被动散热), 或者开启风扇等设备进行散热(主动散热)。被动散热可以通过调节P状态实现(这种方式叫TM2),如果到了功耗最低的P状态仍然不够,可以调节T状态(屏蔽部分时钟周期)进一步降低功耗(这种方式叫TMl),从TO到Τη,η值越大功耗越低。
Linux是一种操作系统内核,实现了如下一些电源管理方法
Α、基本功能管理如关机,重启等。
B、待机管理待机分两种,浅待机和深待机。浅待机通常叫Mandby,对应ACPI Sl ;深待机通常叫Suspend To RAM(挂起到内存),对应ACPI S3。两者的特征比较如下
浅待机CPU状态置为最深的Cx,大部分设备状态置为最深的Dx (除了用于唤醒的设备),内存处于正常工作状态。功耗为开机状态的10% 20%,唤醒时间1 2秒。可通过任意预设的设备唤醒(如键盘)。
深待机CPU和外设全部断电,内存供电但处于低耗能的自刷新状态(内容保持不变)。功耗为开机状态的左右,唤醒时间5 8秒。必须通过电源按键唤醒。
C、休眠管理即Hibernation,也叫Suspend To Disk(挂起到硬盘),对应ACPI S4。将系统状态全部保存到硬盘以后,切断电源。功耗跟软关机相同(只有电源适配器等部件供电)。
D、运行时电源管理系统运行时相当于ACPI SO。电源管理方法可以利用硬件提供的Cx、Dx、Px和Tx等特征。
CPU工作态电源管理在Linux内核中称为CPUFreq子系统,是利用Pltate (电压/频率调节)以达到节能目的的电源管理方法。&状态间的切换有着极低的延迟,通常感觉不到。CPUFreq基本原则是根据当前系统负载来选择最合适的P^tate。
CPU空闲态电源管理在Linux内核中称为CPUIdle子系统,是利用Cltate (暂停流水线、关闭时钟)以达到节能目的的电源管理方法。C-State是CPU停止工作的状态, 不执行任何指令,有远低于工作状态的功耗,但是与工作状态间切换时有一定的延迟;越深的C-State有越低的功耗和越长的延迟,将CPU从某种C-State唤醒回到到工作态的事件叫Cx阻断事件(通常是硬件中断)。空闲态的电源管理的实现方式是采用一定的策略,能够比较精确的预测空闲状态的持续时间,而选择一个比较合适的C-State进入。
设备电源管理利用D-State来降低计算机运行过程中外部设备的功耗。因为不会所有的外设同时出于工作状态,因此关闭处于非活动状态的设备来达到省电的目的。 D-State跟CPU的C-State类似,越深的D状态具有越低的功耗,但也有着更长的唤醒时间。 通常来说,D3代表完全关闭,DO代表正常工作,其他均为中间状态。D状态管理类似于C状态,根据预测的空闲时间来选择合适的D状态,尽量达到省电而不影响性能的目的。
在一些多核平台上,几个核之间存在依赖,比如每个核的频率、电压、暂停状态 (相当于ACPI C/P状态)不能单独调节。这种情况下CPUFreq/CPUIdle要么效果不明显、 要么影响性能。发明内容
本发明所要解决的技术问题是提供一种利用了 CPU热插拔机制,基于处理器核数自动调节的电源管理方法。CPU热插拔机制,即在系统运行过程中增减CPU核数,也被称为 CPU 自动插拔(CPUAutoplug)。
为了解决上述的技术问题,本发明的技术方案是一种基于处理器核数自动调节的电源管理方法,在多核平台上,当系统负载大于100%时,采用CPU热插拔机制对处理器核数进行调节,调节机制如下
系统负载> (核数-1)+上调阈值,增核;
系统负载< (核数-1)-下调阈值,减核。
上调阀值、下调阀值可视具体的情况来设定,例如可以将上调阀值定为95%,下调阀值定为10%。
处理器核数调节涉及到任务迁移,开/关一个核的有着较大的开销,因此采用CPU 热插拔机制的调节不能过于频繁,否则会导致性能下降。
本发明根据采样周期来计算系统负载,并根据需要进行核数调整。
为了避免上述调节过于频繁的问题出现,每600毫秒计算一次系统负载,并根据需要进行核数调整。
本发明是构建在Linux内核中一种新的运行时电源管理方法。它适用于多核计算平台,其基本思想是根据系统负载动态调整CPU核数,以便在不影响性能的情况下降低功耗,延长电池使用时间。在“CPU自动插拔”里面,“插”的含义是增加CPU核数,“拔”的含义是减少CPU核数,而“自动”则表示根据负载情况进行自适应调整。
与其他运行时管理机制,如电压/频率调节(CPUFreq)和CPU暂停(CPUIdle)不同的是CPUAUtoplUg能够适用于各个处理器核不能独立进行电压/频率调节或者CPU暂停的情况。同时,CPUAutoplug和CPUFreq、CPUIdle并不存在功能冲突,可以相互协作,更好地发挥节能作用。
在本发明中,系统负载的含义是CPU利用率,它决定了插拔的时机。一个CPU核的负载范围是0 100%,因此在有N个核的多处理器平台上,负载范围是0 NX 100%。 CPUAutoplug需要根据当前的负载情况选择开启最合适的核数,如果核数过少就会影响性能,反之则会浪费资源并且达不到节能的效果。
引入CPUAutoplug之前,系统负载为每个处理器核单独统计,运行时电源管理策略的适用范围是(L表示系统负载)
5%< L < 100% 工作态电源管理(CPUFreq)占主导地位。
0%< L < 5% 空闲态电源管理(CPUIdle)占主导地位。
在一个电压/频率可以独立调节双核平台上,如果一个核的负载80%,另一个是20%,CPUFreq可以将一个核的频率设置成最高频率的80%,另一个设置成最高频率的 20%。而在一个电压/频率不能独立调节的双核平台,CPUFreq就无法处理如果两个核一起降频到80%,则负载为20%的核会浪费资源,节能效果不好;而如果降频到80%以下,则负载为80%的核会有性能损失。CPUAutoplug则可以解决这一难题,因为它可以将工作负载都迁移到同一个核上,同时将另一个核完全关闭,从而达到节能又不影响性能的目的。
引入CPUAutoplug以后,系统负载总是使用全局统计,以四核平台为例, CPUAutoplug、CPUFreq和CPUIdle的生效范围大致如下
100%< L < 400% 核数自动调节(CPUAutoplug)占主导地位。
5%< L < 100% 工作态电源管理(CPUFreq)占主导地位。
0%< L < 5% 空闲态电源管理(CPUIdle)占主导地位。
因此,本发明和已有的运行时电源管理策略是可以完美协调的。
本发明是一种新的运行时电源管理方法,可以给多核平台带来更好的节能效果。 在存在核间依赖的多核平台上,原有的运行时电源管理方法难以胜任。引入本发明后,可以在不影响性能的前提下带来更好的节能效果,例如在龙芯3A平台上,CPU的节能幅度可以比原先提高25%。
本发明方法可以和已有的电源管理方法完美协调,不存在功能冲突,并且有着基本不重叠的使用范围。它们的协调运作可以进一步改善节能效果。


下面结合附图和具体实施方式
对本发明作进一步详细的说明。
附图为ACPI状态关系图。
具体实施方式
以下采用的硬件平台(处理器)是龙芯3A,软件平台(操作系统)是Linux内核, 版本为2. 6. 36为例对本发明进行说明,但本发明不限于龙芯3A多核处理器平台。
插拔机制实现插拔机制重用了 Linux内核中已有的CPU热插拔实现,实施方式的步骤简述如下,这里假设0号核是一个在线的核,1号核是一个需要插/拔的核
增加CPU核(“插” 1号核)0号核设置1号核的起始运行地址一0号核开启1号核的核心时钟一1号核开始运行一1号核执行TLB/Cache初始化一1号核启动进程调度。
减少CPU核(“拔” 1号核)1号核将进程迁移到0号核一1号核刷回TLB/Cache —1 号核进入等待循环一0号核关闭1号核的核心时钟。
当一个核启动了进程调度,就意味着完全投入了运行,当其上的进程被迁移走,也就意味着不再运行有效的任务。
系统负载计算系统负载决定了 CPU插拔的时机,因此负载的计算是CPUAutoplug 的一个重点。Linux内核会对每个处理器核所处的状态进行统计,这些处理器的状态包括用户态user、系统态system和空闲态idle三大类。更具体地说,用户态包括两种子状态, 即普通用户态(normal user)和高优先用户态(nice);系统态包括普通系统态(normal system)、硬中断态(hard irq)和软中断态(soft irq)。空闲态包括普通空闲态(normal idle)和1/0等待态(i/o wait)。这些状态的相关统计数据都可以通过/proe/stat文件查看。
对于某一个处理器核,其负载L可以通过如下公式计算
L= (user+system) / (user+system+idle)
这里,user、system、idle分别是过去一个统计周期里面用户态、系统态和空闲态的累计时间。
该公式是一个基本公式,在必要的情况下,可以通过调整各种状态(或者其子状态)的权重来达到需要的目的。
系统的全局负载等于每个核的负载之和。
核数调整策略CPUAUtoplUg需要根据当前的负载情况选择开启最合适的核数, 如果核数过少就会影响性能,反之则会浪费资源并且达不到节能的效果。另外,调整策略还需要防止发生颠簸状态,颠簸状态的含义是负载处于调整临界点时,核数在两个值之间发生频繁切换。
以四核平台为例,可以采取如表1所示的调整策略
表ICPU自动插拔的核数调整策略G核平台)
权利要求
1.一种基于处理器核数自动调节的电源管理方法,其特征在于在多核平台上,当系统负载大于100%时,采用CPU热插拔机制对处理器核数进行调节,调节机制如下系统负载> (核数-1) +上调阈值,增核; 系统负载< (核数-1)-下调阈值,减核。
2.根据权利要求1所述的基于处理器核数自动调节的电源管理方法,其特征在于根据采样周期来计算系统负载,并根据需要进行核数调整。
3.根据权利要求2所述的基于处理器核数自动调节的电源管理方法,其特征在于所述采样周期为600毫秒。
全文摘要
本发明公开了一种基于处理器核数自动调节的电源管理方法,在多核平台上,当系统负载大于100%时,采用CPU自动插拔机制对处理器核数进行调节。调节机制如下系统负载>(核数-1)+上调阈值,增核;系统负载<(核数-1)-下调阈值,减核。本发明给多核平台带来更好的节能效果,和已有的电源管理方法完美协调,不存在功能冲突,并且有着基本不重叠的使用范围。
文档编号G06F1/32GK102520782SQ20111042025
公开日2012年6月27日 申请日期2011年12月15日 优先权日2011年12月15日
发明者吴少刚, 陈华才 申请人:江苏中科梦兰电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1