当前社会,能耗问题越来越引起大家的关注,在服务器资源池中同样存在功耗的问题,所以我们希望在服务器空闲时,能够运行在较低的频率,从而降低功耗。C-state就是可以降低服务器功耗的一种手段。C-state有多种睡眠深度,虽然睡眠越深,能耗越低,但是较深的睡眠,就会导致启动时耗时较长,造成性能问题,所以C-state的设置要根据相应的业务需求来设置,并不是越深越好。于是就引出了怎么设置C-state的问题。
设置C-state的方式有多种,可以通过bios或者内核参数来设置,也可以通过cpupower命令来设置,由于cpupower命令比较方便快捷,所以应用比较多,本文就是介绍cpupower命令的使用方法。
通过help参数,可以看到cpupower有多个参数命令,其中frequency相应的参数是与性能模式及cpu运行的频率相关的。
可以看到cpu当前运行在performance的模式下,使用的驱动为intel_pstate,以及当前的cpu运行频率等。相应的参数,可以通过frequency-set来设置。查看当前各个cpu的运行C-state状态,可以通过cpupower monitor来查看。
从上图可以看出,cpu运行在c1状态。
查看当前cpu的C-state的设置信息,可以使用cpupower idle-info命令。
从上图可以看出该cpu支持POLL、C1、C1E、C6四种状态,但是C1E、C6被disable了,所以cpu的C-state深度最大为C1,这也与我们上面通过cpupower monitor命令看到的信息一致。
想要设置C-state,可以使用cpupower idle-set命令。
idle-set后面可以跟4种参数:
-d 是按照state_no号进行关闭;
-e是按照state_no号进行开启;
-D是按照latency值进行关闭,只要大于等于设置latency的状态,都会被关闭;
-E会开启所有的状态;
执行cpupower idle-set -E命令后,查询idle-info,可以看到所有的状态都开启了。
执行cpupower idle-set -D 10,然后查看idle-info,可以看到latency大于等于10的,都已经关闭了。
执行cpupower idle-set -e 2,然后查看idle-info,可以看到C1E被打开。
执行cpupower idle-set -d 2,然后查看idle-info,可以看到C1E被关闭。