第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > C state和P state 一些体会

C state和P state 一些体会

时间:2024-01-20 05:12:39

相关推荐

C state和P state 一些体会

C state和P state是某些cpu的一些硬件上的特性。有些朋友可能会混淆两者的关系。通过在使用过程中的调查和验证,做的笔记如下:

C stat

是电源节能的一个feature, 通过在cpu 负载不忙的时候,通过关闭cpu内部的不同器件的电源,来达到节能的目的。C state节能有两个,一个是package Cstate,一个是Core Cstate. Package对应的是一个物理cpu,Core对应的就是物理cpu内部的物理core。

对应级别如下:

C0:是一个Active状态,说明正在执行指令。就是有任务正在运行时的状态。注意,这个状态并不意味着cpu是最高频率,只要有任务在运行,cpu即使低频率也是在C0状态。从供电角度看,Cpu所有的器件都在供电。

C1:Halt状态,没有load在运行,此时core的clock关闭,此状态会很快返回C0状态。

C1E:这个也属于C1类型,但是会用最低频率和电压降低

其他见下表

上面的图说明不同的C state状态关闭的器件不同,频率也不同。不同C状态返回到C0状态时间也不同

P-state

曾经何时,人们一直认为P-state 只和cpu的频率相关。当前,P-State是cpu电压和频率的操作点的集合,电压和频率都会随着P state状态的改变而同时发生变化。P state目的根据负载是动态的增加和减少cpu电压和频率,以达到用户在节能和性能方面的需求。

上面的图,说明p state的操作点是从P0->pn, P0显示的睿频范围的频率,睿频也分等级,从HFM->Turbo

P1 是cpu的基频,就是通过lscpu看到的下面的频率。

Model name: Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz

这个表示系统在没有睿频的情况下,能达到最高的频率。

如何在Linux内核看P state参数

#ls /sys/devices/system/cpu/intel_pstate/

max_perf_pct min_perf_pct no_turbo num_pstates turbo_pct

P state是按照比列来调节的系统频率的。

max_perf_pct 最大的比例,这个值可以调节频率使用的最大值,一般为100%

no_turbo 是否是睿频,0为开启睿频,1 为关闭睿频

num_pstates 处理器支持的p状态数量。这个值在0-255之前。包含了睿频和非睿频p-state。此属性是只读的。

turbo_pct 睿频的p-state占整个处理器允许的p-state的百分比,这个属性只读

min_perf_pct 最小比列,p-state能够调到最小频率的比例,这个比例最节能

如何使用

设置最大使用频率可以将min_perf_pct 设置为100%

echo 100 > /sys/devices/system/cpu/intel_pstate/min_perf_pct

设置系统使用最高使用只能是最小频率。那就设置max_perf_pct为系统的min_perf_pct默认值,这个cpu只能在最小频率执行

P state如何计算的

上面的这个图是p state的动态计算的公式,是基于反馈机制计算的。有机会研究下这个公式

注意的地方:

很多人会将P state和C state混淆,即使明白的也不一定清楚P state和C state之前的联系是什么。从调查的资料看P state对应的是C0这个状态,就是有load情况的电压和频率的调节。其它的Cx都是节能状态,是没有负载的情况。换句话说,Cx(x>0)状态已经没有负载了,根本就不需要P State。

性能的误区:

只设置了高频率就好了,比如一般人都会用cpupower frequency-set -g performance这个命令这个命令使能后,某个cpu会达到睿频最大的频率。但是别忘了,当内核指令执行到类似halt和mwait指令时,cpu还是会进入C state睡眠的状态的,导致唤醒时运行效率降低,正确的是首先查看当前C state一共几个状态

从截图看一共5个状态。

如果设置高性能模式,还要加入这个命令

cpupower -c all idle-set -D 5

这个命令的意思是,就是关闭所有的大于5ns的C state。本例就是cpu在没有任务运行时,只能到C1-HSW这个状态,这个状态是的cpu进入运行状态只需要2ns

高性能模式并不一定是高的计算力,一般认为高性能就是cpu频率要最大在行,个人认为高性能模式分为两类,一个是高的吞吐量,一个是高的计算力

高的吞吐量:比如web服务等,这个需要频率不能波动太大,太大会抖动,就会影响服务质量;这个时候就不能设置睿频(关闭睿频)。要将频率固定到基本频率

高计算力:这个就是大家理解把cpu频率提升上去,比如可以使用睿频方式,可以使得某些cpu在繁忙的时候,cpu频率会达到最大。

高吞吐量和高计算力都是性能要求,但是设置的方式却打不同。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。