ACPI p-state、c-state

https://blog.csdn.net/CrystalShaw/article/details/90770294?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://tieba.baidu.com/p/4337969515?red_tag=0965284310

https://www.cnblogs.com/dirt2/p/5473245.html

 

首先是G字母开头的0-3,G = global是从系统全局出发给出的系统级别的电源状态。工作、休眠、软硬关机4个状态。G状态本质上并不是对CPU状态的直接描述,但CPU会在不同的全局状态下有自己对应的状态。

S开头的0-5,S个人理解为sleep,描述各种CPU的休眠状态。S0代表了CPU在工作状态,S1-4则代表CPU处于某种休眠状态,数字越大睡得越香,S5则是软关机状态。

C开头的0-10(没有C2/C4/C5的具体描述,待后续完善),C=CPU(似乎CPU core更为确切)。代表的CPU core级别的工作状态,0为工作状态,数字越大说明CPU处在越节能的状态,但从它转到C0的所需时间也越长。从单个Core的角度上说C6时core已经处在了关闭的状态,但之后的C7+则进一步从core上升到了socket,关闭同一socket上的LLC,降低电压——直至关闭电源。

P开头的0-n,P=performance,代表当前系统的性能设定状态。当P0时,CPU会以标称频率运行,数字越大频率越低  (注意,只有C-State处于C0状态时,这些P-States才是有意义的。 如果CPU处于C状态(n>0),调整它的 频率没有任何意义)。CPU将会采用更加激进的方式通过降低频率来实现节能的效果。与之相关的技术如speed step技术。本身这是一个socket级别的技术,但后期有了PCPS以及后续的HWP之后,这个技术就成为了core级别的设定。

P0之上还有个特例,就是基于turbo技术的P01~P0n,n越大,CPU将会跑在更高的高于CPU标称频率之上,这里的n等于实际倍频和标称倍频之差。受制于CPU的热功耗上限,不同工况下CPU core能承载的n值是不同的。换而言之,由于热功耗是一个固定的值,在某些核心处于低功耗状态时,允许另外核心提升到更高的频率,即可以使n更大。

    P-State & T-State

     与P-State类似,T-State也是将CPU频率降低来达到降低电量(以及降低热量)的方法之一。P-State跟T-State虽然都是降频,但T-State跟P-State最早是分别由Intel和AMD提出。以技术上而言采取的方法也不一样。简单来说它们的差异如下图所示:

            

     就算同样是把频率降成原本的50%,但P-State是真的把频率放慢成原本的50%,而T-State是把把一半的频率切掉(Clock 0跟Clock 2都消失)。当Intel发现P-State的方法更能够省电并且有效降低晶片的发热量,所以也把P-State的技术加入。到今天为止,Intel的CPU同时支援P-State跟T-State,而AMD的CPU只有支援P-State

https://blog.csdn.net/CrystalShaw/article/details/90770294


 

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模式。

http://blog.chinaunix.net/uid-30401178-id-5159325.html

c-state针对CPU,通过控制CPU时钟和电压来实现能耗管理,

s-state不光是cpu可能会被停掉,甚至其他外设例如DRAM,硬盘等,都有可能停掉,

s-state参考,https://blog.csdn.net/fengxiaocheng/article/details/103255667

S0 正常。
S1:Standby。系统在低供电状态,cpu停止工作,用mouse/keyboard可叫醒。
S2:Power Standby。CPU关闭,和 S1几乎是一樣。
S3:Suspend to RAM。保存现有内存信息,除了内存外的部件都停止工作
S4:Suspend to Disk。保存现有内存信息到硬盘上,所有部件停止工作
S5:Shutdown
 

 

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ACPI (Advanced Configuration and Power Interface) 是一种能够管理电源和其他硬件功能的标准。在 Linux 操作系统中,ACPI 由内核模块进行管理。要控制 ACPI,可以使用以下命令: 1. acpid:这是一个守护进程,用于处理 ACPI 事件。当 ACPI 事件发生时,acpid 会运行预定义的脚本来处理该事件。可以使用以下命令来启动、停止、重启 acpid: ``` sudo systemctl start acpid sudo systemctl stop acpid sudo systemctl restart acpid ``` 2. acpi_listen:这个命令用于监听 ACPI 事件。可以在终端中运行此命令,然后触发 ACPI 事件(例如按下电源按钮),看看 acpi_listen 是否会输出相应的事件信息。 3. /proc/acpi:这是一个虚拟文件系统,它包含了系统的 ACPI 信息。可以使用以下命令查看某些信息: - 查看电池信息:`cat /proc/acpi/battery/BAT0/info` - 查看电池状态:`cat /proc/acpi/battery/BAT0/state` - 查看 CPU 温度:`cat /proc/acpi/thermal_zone/THM0/temperature` 4. acpi_call:这是一个内核模块,它允许用户从用户空间控制 ACPI 方法。可以使用此命令来执行 ACPI 方法,例如调节亮度、设置风扇速度等。使用此命令需要先安装 acpi_call 模块,然后加载该模块: ``` sudo modprobe acpi_call ``` 然后可以使用以下命令来执行 ACPI 方法: ``` echo "method_name parameter" | sudo tee /proc/acpi/call ``` 其中,`method_name` 为 ACPI 方法的名称,`parameter` 为方法的参数。例如,要设置亮度为 50%,可以执行以下命令: ``` echo "\_SB.PCI0.LPCB.PS2M._BCM 5" | sudo tee /proc/acpi/call ``` 注意,每个系统的 ACPI 方法都不同,需要根据自己的系统进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值