ACPI Processor C-state
ACPI,即Advanced Power Configuration Power Interface.在G0工作状态下,ACPI定义系统处理器的电源状态,要么为活跃状态(正在执行),要么为睡眠状态(未执行)。处理器电源状态被设计为C0,C1,C2,C3...Cn。C0电源状态是活跃状态,即CPU执行指令。C1到Cn都是处理器睡眠状态,即和C0状态相比,处理器处理器消耗更少的能源并且释放更少的热量。当进入睡眠状态,处理器不执行任何指令。每个睡眠状态都有一个和省电多少对应的延迟。一般来说,进入和退出的延迟越长,这个状态越省电。为了保持能量,OSPM在空闲时将处理器置于其中一个支持的睡眠状态中。在C0状态下,ACPI允许处理器的性能通过一个定义的节制过程发生改变,通过改变进入多种性能状态(P-states). 处理器的电源状态.
p-status:
CPU在C0状态时会执行指令,但是即使在C0状态下OSPM仍然可以通过调整CPU的工作电压和频率的方式,以此降低整个平台的功耗。P-state 在Intel平台上通常指的是EIST(Enhanced Intel SpeedStep Technology),EIST允许多个核动态的切换电压和频率,动态的调整系统的功耗。OSPM通过WRMSR指令写IA32_PERF_CTL MSR的方式调整CPU电压和工作频率。
ACPI定义这样的逻辑在每个CPU的偏置上,即OSPM通过转换来切换不同的处理器电源状态。这个逻辑是可选的,在FADT表和处理器对象中有描述。FADT表中的这些字段和标志描述了硬件的对称性,以及处理器对象对特别的CPU时钟逻辑包含的位置(在P_BLK寄存器块和_CST对象中有描述)。
P_LVL2和P_LVL3寄存器提供可选的支持,将系统处理器置于C2或者C3状态。P_LVL2寄存器将排好序的处理器置于C2状态,P_LVL3将排好序的处理器置于C3状态。C3状态的额外支持通过总线主状态和仲裁禁止位被提供(PM1_STS寄存器中的BM_STS位和PM2_CNT寄存器中的ARB_DIS位)。系统软件通过读取P_LVL2或者P_LVL3寄存器数据来进入C2或者C3状态。硬件必须精确的将处理器放在恰当的时钟状态,通过对相应的P_LVLx寄存器的读操作。平台必须定义可选的接口来允许OSPM使用_CST对象进入C-state。
处理器的电源状态支持是对称的,通过FADT表和P_BLK接口;OSPM假设同一系统里的所有的处理器都在相同的电源状态下。如果处理器有不对称的电源状态支持,BIOS将通过FADT表选择和使用所有处理器最低的相同的电源状态。例如,如果CPU0支持所有的电源状态乃至C3,但是CPU1仅支持C1,那么OSPM将仅将空闲的处理器置于C1(CPU0将不会被置于C2和C3状态)。注意C1必须被支持,C2和C3是可选的。
处理器电源状态C1
所有的处理器必须支持这种状态。这种状态的支持是通过一个本地的处理器指令(HLT或者mwait),并且认为不需要芯片组的硬件支持。这种状态的硬件延迟必须足够的低,使得OSPM在决定是否使用该状态时不需要考虑延迟方面的问题。除了将处理器置于一种电源状态,这个状态没有其他的软件可见的效果。在C1状态下,处理器可以保持系统cache里面的内容。
硬件可以以任何理由退出该状态,但必须是在有中断到达处理器的情况下。
处理器电源状态C2
这种电源状态不是必需的。如果存在,该状态能够更好的省电,它通过使用P_LVL2命令寄存器或者由_CST提供的另一种机制来使处理器进入该状态。这个状态的最坏情况下的硬件延迟在FADT的表里面有声明,OSPM可以根据这个信息来决定什么时候C1状态应该被C2状态代替。除了将处理器置于一种电源状态,该状态没有其他的软件可见效果。OSPM假设C2比C1更省电,但是退出的延迟比C1要高。
C2电源状态是一种可选的ACPI时钟状态,需要芯片组的硬件支持。时钟逻辑由一个接口组成,可以用来被操纵使处理器精确的进入C2电源状态。在C2电源状态下,处理器被认为能够保持其cache的一致性;例如,总线控制器和多处理器的活动可以发生而不破坏cache里面的内容。
C2状态将处理器置于一种低功耗的状态,围绕多处理器和总线控制器系统做优化。当存在总线控制器或者多处理器活动时(这一条件将阻止处理器进入C3状态),OSPM将使一个空闲状态下的处理器群体进入C2状态。处理器簇能够在C2状态下监视总线控制器或者多核CPU访问内存的行为。
硬件可以以任何理由退出该状态,但必须是在有中断到达处理器的情况下。
处理器电源状态C3
系统对C3处理器电源状态的支持也是可选的. 如果存在,这种状态比C1和C2状态更加节省功耗. 使用P_LVL3命令寄存器或者_CST机制可以进入C3状态. 这种状态的最坏的硬件延迟在FADT表中声明了,OSPM可以通过这一信息来决定什么时候需要进入C3状态而不是C1或者C2状态. 当在C3状态中,处理器的cache保持着状态但是处理器没有窥视总线控制器,或者多核CPU进行访存.
硬件可以以任何理由退出这种状态,但必须是因为一个中断投递到了该处理器,或者当BM_RLD被设置时,一个总线控制器企图访存.
OSPM负责保证cache的一致性.在单处理器环境下,这可以通过使用PM2_CNT.ARB_DIS总线控制器仲裁寄存器来保证总线控制器的活动不会发生在C3状态下. 在多处理器环境下,处理器的cache可以通过flush和invalidate来保持一致性.
有两种机制支持C3电源状态:
1. 在进入C3状态之前,让OSPM flush和invalidate cache
2. 提供一种硬件机制,阻止控制器写内存(只支持UP)
在第一种情况下,OSPM将在进入C3之前flush系统的cache. 由于flush系统的cache通常有很大的延迟,OSPM只对多核平台的空闲处理器支持这种情况. flush cache通过ACPI定义的一种机制来完成.
单处理器平台提供一种硬件功能,OSPM将尝试将平台置于一种模式,当处理器处于C3模式,这种模式组织系统总线控制器来写内存。一旦总线控制器请求一个访问,CPU将从C3中被唤醒,并且重新使能总线控制器访问.
OSPM使用BM_STS位来决定要进入的电源状态是C2还是C3. BM_STS是一个可选的bit位,表示总线控制器是活跃的. OSPM使用这一位来决定在C2和C3之间的策略. 频繁的总线控制器活动将CPU的电源状态降到C2,没有总线控制器活动将CPU的电源状态提升到C3. OSPM保持BM_STS的一个变化历史来决定CPU电源状态的策略.
用在C3里的最后一个硬件特性是BM_RLD位. 这一位决定总线控制器的访问是否导致Cx电源状态的退出. 如果这一位被设置,一旦有总线控制器访问,Cx将退出. 如果该位被复位为零,总线控制器的访问将不会导致电源状态的退出. 在C3状态中,总线控制器的申请需要CPU转换回C0状态,但是在C2状态中,这样的转换将不
是必须的.在C3状态下,OSPM可以设置这一位,在C1或C2状态下,可以清除该位.
阅读全文类别:Acpi 查看评论