searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Intel CPU C状态调优

2023-07-24 03:06:06
1077
0

一、Intel C状态介绍

Intel的CPU提供不同的C状态,CPU的性能和功耗也会跟着实际的设置有相应的变化

为了在CPU空闲时节约能源,可以使用命令让CPU进入低功耗模式。 每个CPU都有几种功耗模式,它们统称为“C-模式”。

C-模式的基本理念是切断CPU内部的空闲部件的时钟信号和电源。 停止(通过切断时钟)、降低电压或者甚至完全关闭的部件越多,节约的能源就越多,但是CPU需要更多时间才能“唤醒”并再次完全正常运行。它们从C0开始编号,C0是正常的CPU操作模式,即CPU完全开启。 C编号越高,CPU睡眠模式越深,也就是说关闭的电路和信号更多,CPU需要更多时间才能恢复到C0,即唤醒。

每个模式也都有自己的名称,其中许多模式都有具有不同省电等级的子模式,因此唤醒时间也不尽相同。

在下面汇总了当前可用的所有C-State模式。 模式C1到C3的工作方式基本上是切断CPU内使用的时钟信号,而模式C4到C6的工作方式是降低CPU电压。 “增强”模式可以同时执行这两个操作。

模式

名称

作用

C0

操作状态

CPU完全打开

C1

停止

通过软件停止CPU内部主时钟;总线接口单元和APIC仍然保持全速运行。

C1E

增强型停止

通过软件停止CPU内部主时钟并降低CPU电压;总线接口单元和APIC仍然保持全速运行。

C3

睡眠

停止所有CPU内部时钟

C6

深度电源关闭

将CPU内部电压降低至任何值,包括0 V

 

二、C状态调整的相关设置

1、BIOS层面

BIOS是硬件控制的初始选项,BIOS的设置直接影响服务器的C状态表现

1)最大性能模式,CPU将一直在C0/C1状态工作

Monitor MWAIT  : Disabled

Power/Performance Profile: High Performance Compute

CPU C state :Disabled

CPU C6 report:   Disabled

Hardware P-States :Disabled

Turbo Mode:Enabled

P-state: Enabled

2)变频模式,CPU频率可以调整,将权限交给OS控制

Monitor MWAIT  : Enabled

Power/Performance Profile: Custom

CPU C state :Enabled

CPU C6 report:  Enabled

Hardware P-States : Native Mode

Turbo Mode:Enabled

P-state: Enabled

3)OS下设置

如果希望C状态在C0/C1状态下,在gurb.cfg里面加入参数:processor.max_cstate=1 intel_idle.max_cstate=0

如果希望C状态是变频,不在乎是否进入节能模式,在gurb.cfg里面加入参数:processor.max_cstate=8 intel_idle.max_cstate=9

“/boot/grub2/grub.cfg”文件中,找到对应内核,并修改如下行:

linux16 /boot/vmlinuz-xxxxxxxxxxxx LANG=en_US.UTF-8 processor.max_cstate=1 intel_idle.max_cstate=0

查看是否生效:

cat /proc/cmdline | grep "intel_idle.max_cstate=0" && cat /proc/cmdline | grep "processor.max_cstate=1"

echo $?

结果为0,表示已经重启生效。

备注:

[HW,ACPI]

processor.max_cstate={0|1|2|3|4|5|6|7|8|9}

无视ACPI表报告的值,强制指定CPU的最大 C-state值(必须是一个有效值):C0为正常状态,其他则为不同的省电模式(数字越大表示CPU休眠的程度越深/越省电)。"9"表示无视所有的DMI黑名单限制。

[KNL,HW,ACPI]

intel_idle.max_cstate=[0|正整数]

设置intel_idle驱动(CONFIG_INTEL_IDLE)允许使用的最大 C-state深度。"0"表示禁用intel_idle驱动,转而使用通用的acpi_idle驱动(CONFIG_CPU_IDLE)

 

三、实际使用情况:

不管CPU在什么状态,如果CPU压力足够大,都会进入C0状态。具体有多少核心进入C0状态,是根据CPU的负载情况决定的。

下图是CPU在C1E状态下对物理核心加压,一半核心都跑到了C0

下图是CPU在C1状态下加压,大部分到C0状态

 

四、应该怎么选择CPU的状态

根据实际的使用场景,需要高频?需要稳定?

 

1、需要部分核心达到最高频率

CPU都是多核心的SOC,如果需要一部分核心达到最高频工作,那么其他的一部分核心就会跑在基频或者比基频更低的频率上。因为CPU的TDP是一定的,这个设计是可以让做虚拟化的业务享受到CPU的最高频率。

以purley 平台5218CPU举例,

基频:2.3GHz

单核心最高频:3.9GHz

all core turbo最高频率:2.8GHz

所以当打开节能,设置为变频模式的时候,一些核心是可以跑到3.9GHz的,可以让一些重要应用的虚拟机跑到最优性能。

缺点是,因为频率变化很大,不稳定。而且压力很小的时候会进入深度节能状态,如果突然来了很大的压力,CPU从低频切换到高频,延时较大,而且容易发生宕机。

 

2、稳定应用,all core turbo到一定频率

基频是最稳定的应用频率,但是如果所有核心都跑在基频上,有点浪费CPU的性能表现。

最好的是设置为all core turbo 模式,这样CPU的核心都会跑在一个比基频高,比最大频率的一个稳定的频率上。延时表现最好,性能很稳定。

 

 

0条评论
0 / 1000
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
l****n
2文章数
0粉丝数
l****n
2 文章 | 0 粉丝
原创

Intel CPU C状态调优

2023-07-24 03:06:06
1077
0

一、Intel C状态介绍

Intel的CPU提供不同的C状态,CPU的性能和功耗也会跟着实际的设置有相应的变化

为了在CPU空闲时节约能源,可以使用命令让CPU进入低功耗模式。 每个CPU都有几种功耗模式,它们统称为“C-模式”。

C-模式的基本理念是切断CPU内部的空闲部件的时钟信号和电源。 停止(通过切断时钟)、降低电压或者甚至完全关闭的部件越多,节约的能源就越多,但是CPU需要更多时间才能“唤醒”并再次完全正常运行。它们从C0开始编号,C0是正常的CPU操作模式,即CPU完全开启。 C编号越高,CPU睡眠模式越深,也就是说关闭的电路和信号更多,CPU需要更多时间才能恢复到C0,即唤醒。

每个模式也都有自己的名称,其中许多模式都有具有不同省电等级的子模式,因此唤醒时间也不尽相同。

在下面汇总了当前可用的所有C-State模式。 模式C1到C3的工作方式基本上是切断CPU内使用的时钟信号,而模式C4到C6的工作方式是降低CPU电压。 “增强”模式可以同时执行这两个操作。

模式

名称

作用

C0

操作状态

CPU完全打开

C1

停止

通过软件停止CPU内部主时钟;总线接口单元和APIC仍然保持全速运行。

C1E

增强型停止

通过软件停止CPU内部主时钟并降低CPU电压;总线接口单元和APIC仍然保持全速运行。

C3

睡眠

停止所有CPU内部时钟

C6

深度电源关闭

将CPU内部电压降低至任何值,包括0 V

 

二、C状态调整的相关设置

1、BIOS层面

BIOS是硬件控制的初始选项,BIOS的设置直接影响服务器的C状态表现

1)最大性能模式,CPU将一直在C0/C1状态工作

Monitor MWAIT  : Disabled

Power/Performance Profile: High Performance Compute

CPU C state :Disabled

CPU C6 report:   Disabled

Hardware P-States :Disabled

Turbo Mode:Enabled

P-state: Enabled

2)变频模式,CPU频率可以调整,将权限交给OS控制

Monitor MWAIT  : Enabled

Power/Performance Profile: Custom

CPU C state :Enabled

CPU C6 report:  Enabled

Hardware P-States : Native Mode

Turbo Mode:Enabled

P-state: Enabled

3)OS下设置

如果希望C状态在C0/C1状态下,在gurb.cfg里面加入参数:processor.max_cstate=1 intel_idle.max_cstate=0

如果希望C状态是变频,不在乎是否进入节能模式,在gurb.cfg里面加入参数:processor.max_cstate=8 intel_idle.max_cstate=9

“/boot/grub2/grub.cfg”文件中,找到对应内核,并修改如下行:

linux16 /boot/vmlinuz-xxxxxxxxxxxx LANG=en_US.UTF-8 processor.max_cstate=1 intel_idle.max_cstate=0

查看是否生效:

cat /proc/cmdline | grep "intel_idle.max_cstate=0" && cat /proc/cmdline | grep "processor.max_cstate=1"

echo $?

结果为0,表示已经重启生效。

备注:

[HW,ACPI]

processor.max_cstate={0|1|2|3|4|5|6|7|8|9}

无视ACPI表报告的值,强制指定CPU的最大 C-state值(必须是一个有效值):C0为正常状态,其他则为不同的省电模式(数字越大表示CPU休眠的程度越深/越省电)。"9"表示无视所有的DMI黑名单限制。

[KNL,HW,ACPI]

intel_idle.max_cstate=[0|正整数]

设置intel_idle驱动(CONFIG_INTEL_IDLE)允许使用的最大 C-state深度。"0"表示禁用intel_idle驱动,转而使用通用的acpi_idle驱动(CONFIG_CPU_IDLE)

 

三、实际使用情况:

不管CPU在什么状态,如果CPU压力足够大,都会进入C0状态。具体有多少核心进入C0状态,是根据CPU的负载情况决定的。

下图是CPU在C1E状态下对物理核心加压,一半核心都跑到了C0

下图是CPU在C1状态下加压,大部分到C0状态

 

四、应该怎么选择CPU的状态

根据实际的使用场景,需要高频?需要稳定?

 

1、需要部分核心达到最高频率

CPU都是多核心的SOC,如果需要一部分核心达到最高频工作,那么其他的一部分核心就会跑在基频或者比基频更低的频率上。因为CPU的TDP是一定的,这个设计是可以让做虚拟化的业务享受到CPU的最高频率。

以purley 平台5218CPU举例,

基频:2.3GHz

单核心最高频:3.9GHz

all core turbo最高频率:2.8GHz

所以当打开节能,设置为变频模式的时候,一些核心是可以跑到3.9GHz的,可以让一些重要应用的虚拟机跑到最优性能。

缺点是,因为频率变化很大,不稳定。而且压力很小的时候会进入深度节能状态,如果突然来了很大的压力,CPU从低频切换到高频,延时较大,而且容易发生宕机。

 

2、稳定应用,all core turbo到一定频率

基频是最稳定的应用频率,但是如果所有核心都跑在基频上,有点浪费CPU的性能表现。

最好的是设置为all core turbo 模式,这样CPU的核心都会跑在一个比基频高,比最大频率的一个稳定的频率上。延时表现最好,性能很稳定。

 

 

文章来自个人专栏
硬件相关
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0