分类: LINUX
2012-02-14 12:09:12
[节选]
关于CPU C-States 省电模式,你需要知道的事情
I, 引言
为了在CPU空闲的时候降低功耗,CPU可以被命令进入low-power模式。每个CPU都有几种power模式,这些模式被统称为C-states或者C-modes。
lower-power模式最早在486DX4处理器上被引入,到现在,更多power mode被引入和增强,来进一步降低CPU的功耗。
这些模式最基本的思想是通过CPU内部的idle unit切断CPU的clock信号和供电。越多的CPU单元被停止(通过切断时钟),降低电压或者完全关闭,降低的功耗就越多,但同时也需要更多的时间来唤醒CPU, 重新回到满操作模式。
C-States从C0开始,C0是CPU的正常工作模式,CPU处于100%运行状态。C后的数越高,CPU睡眠得越深,CPU的功耗被降低得越多,同时需要更多的时间回到C0模式。
每一个模式都有一个对应的名字,有的模式还有子模式,子模式又具有不同功耗和唤醒时间。
在下表所列的模式中,C1到C3通过切断CPU内部的时钟,C4到C6模式通过降低CPU的电压。"Enhanced"模式两种方式都采用。
II, C1模式
所有的x86 CPU都有HLT指令("Halt"), 当HLT指令执行时,CPU会保持idle,不做任何事情。当CPU收到一个中断, CPU会回到正常运行模式。
既然在halt状态下,CPU是完全空闲的,Intel认为这是省电的最佳时机,所以他们增加了"Halt"或者叫"Auto Halt"模式,即我们所知的C1。C1从486DX4处理器被引入。Intel和AMD所有在486DX4之后面世的处理器都实现了这个模式,486DX2上实现了"SL Enhanced"版本。
所以,当有程序运行了HLT指令后,CPU会进入传统 halt模式, 在这种模式下,除了bus interface和APIC之外,所有的处理器内部时钟都被停止。一旦处理器收到中断信号,他会回到C0模式,内部时钟被回复。
有趣的是,对处理器来说,进入C1模式并不需要特殊的编程工作,因为HLT指令从8086开始就存在。在486DX4之前,HLT指令被用来暂停CPU,等待终端。在486DX4之后,程序员可以通过进入这种模式来降低处理器的功耗。
之前提到过,CPU可以暂时性的离开C1模式,去处理CPU external bus上的重要请求。这个暂时性的离开被称为Stop Clock Snoop状态, HALT/Grant Snoop State 或者简单的称为Snoop State。在这个过程中,CPU时钟被恢复。在CPU处理完请求后,它会自动的回到C1模式。
所有的socket 775 Intel处理器都实现了一个高级Halt模式,叫做Enhanced Halt(Pentium 4),或者Extended Halt(Core 2 Duo)或者简单的称为C1E。在这个模式下,除了关闭处理器内部时钟外,处理器的电压也被降低。如果在BIOS中,这个模式被打开,当HLT指令发出后,处理器会进入C1E, 而不是传统的C1模式,反之,如果这个模式被关闭,则会进入C1模式。
Core 2 Duo同时也提出了Extended Halt/Stop Grant Snoop state,可以允许处理器暂时性的离开C1E或者C2E模式,去响应外部总线上的重要请求,但在这个过程中,处理器会保持低电压,而不是将其恢复到正常值。
要注意的是AMD也使用C1E这个名字,不过它们做了完全不同的事情。在他们的65 nm Athlon X2和Phenom处理器上,C1E的行为和C3相似,关闭所有的处理器时钟。当主板BIOS中,C1E选项被打开,并且所有的处理器核都进入了C1模式,则处理器会自动进入C1E模式。而传统C3模式则需要OS发送命令来劲如。
III, C2模式
C2模式同样是在486DX4中被引入的。处理器增加了一个名叫"STPCLK"的引脚,当这个引脚使能时,处理器的核心时钟被切断。
如你所见,C2模式与C1模式很类似,都是切断处理器的核心时钟。不同的是,C1模式通过HLT指令进入,而C2模式则通过硬件进入。
和C1模式一样,C2模式也不是关闭了所有的处理器内部时钟,bus interface和APIC的时钟依然保留,以响应外部中断。
C2模式存在两个子模式:Stop Grant 和Stop Clock。前者在STPCLK管脚使能后进入,如前面介绍,处理器的核心时钟被关闭,但是时钟发生部件(PLL)仍然在工作,以产生外部总线所需要的时钟。
486DX4, Pentium, Pentium MMX, K5, K6, K6-II和K6-III可以更进一步,进入Stop Clock模式。在该模式下,时钟发生部件也被关停,因此外部时钟信号也被关停。现在的处理器都已经不存在Stop Clock模式,被C3 Deep Sleep模式取代。
和C1模式相似,处理器可以暂时性的离开C2模式,去处理重要的外部请求。这个暂时的离开被称为Stop Clock Snoop State, HALT/Grant Snoop State或者简单的称为Snoop State。在这个过程中,处理器时钟被回复。当处理器处理完外部请求后,会自动回到C2状态。
Core 2 Duo处理器引入了一个高级的Stop Grant模式,称为Extended Gtop Grant, 即C2E。这个模式会在关停时钟的同时,降低处理器的电压。一旦C2E模式在BIOS中被打开,使能STPCLK管脚会进入C2E模式,而不是传统的C2模式。
IV, C3模式
C3模式被称为Sleep模式。最早在Pentium II处理器中被引入。有趣的是,这个模式在部分Core 2 Duo处理器中并不存在。但这部粉处理器实现了C1E和C2E模式。
C3模式是C2模式的进一步发展。在C3模式下,所有的处理器内部时钟,包括bus interface和APIC,都被关停。这意味着处理器将无法响应外部总线的重要请求或终端。
Intel处理器和AMD Turion 64处理器存在一个C3的子模式,称为Deep Sleep。在该模式下,处理器外部时钟也被关停。
进入C3模式的方法取决与处理器厂商。Intel处理器增加了一个管脚,叫做SLP(或者DPSLP,取决于处理器型号)。当处理器处在C2模式,同时SLP管脚被使能,就会切换到C3模式。所以,要进入C3模式,应先使能STPCLK,再使能DPCLK管脚。
在AMD处理器上,则通过简单的读ACPI的一个寄存器来进入C3模式,前提同样是处理器要先处于C2模式。
AMD移动处理器(Turion 64)支持C3的一个子模式:AltVID,以允许在C3模式下降低处理器的电压。
V,C4模式
C1,C2,C3模式都通过关停处理器的时钟来降低功耗。C3模式已经关停了处理器内部的所有时钟,所以这种办法没有更进一步的空间。因此需要通过降低电压来达到进一步降低功耗的目的。
第一个实现了降低电压的模式,叫做C4模式,或者Deeper Sleep模式。C4模式最早在Pentium M处理器上实现。
要进入C4模式,必须先进入C3模式。
在Core Duo处理器上,通过使能DPRSTP管脚来进入C4模式。
在Core 2 Extreme X9100上,C0模式消耗59A的电流,当进入C4模式时,该值降低到12.2A,79.32%的功耗被降低。
在Core Solo, Core Duo及45 nm的mobile Core 2 Duo上,存在另一个C4模式,称为Enhanced Deeper Sleep,即C4E模式。该模式允许在L2 chache被关闭之后,再降低电压。该模式在其他的CPU中不存在。该模式也被一些人称为C5模式。
Vi,C6模式
C6模式是最近(截至2008-9)在45 nm版本的mobile Core 2 Duo处理器中被提出的模式。也被称为Deep Power Down。
当处理器进入该模式时,需要将完整的architecture状态保存到一个特定的静态RAM中,该RAM使用独立的供电。该模式允许处理器内部电压被降低到任何值,包括0V,这意味着完全的关闭处理器。当处理器被唤醒时,它会从前面提到的RAM处加载状态信息。正如前面所说,与之前的模式相比,从C6模式中唤醒需要多得多的时间。但这个时间仍然比关闭电脑后开机时时间短。
要注意的是,整个处理器只有一条处理器电压线(除了上面提到的特殊的静态RAM),这意味着,降低或者关闭处理器电压是统一的行为:当你关闭处理器,你会关闭所有部件。
即将诞生的Core i7处理器(Nehalem)有一个独立的电源控制单元,可以对单独的处理器核降低电压或者关闭电压。
为了进入C6模式,需要先进入C4模式。