如何在 Ubuntu 16.04 内核中启用内核配置“CONFIG_POWERCAP”和“CONFIG_INTEL_RAPL”

如何在 Ubuntu 16.04 内核中启用内核配置“CONFIG_POWERCAP”和“CONFIG_INTEL_RAPL”

我想利用英特尔® RAPL 驱动程序来监控 Ubuntu 16.04 中的电源。链接这里说我们可以通过检查中的文件夹是否存在来验证CONFIG_POWERCAP和是否已启用。但是,我没有在 找到文件夹。CONFIG_INTEL_RAPLintel-rapl/sys/class/powercap/intel-raplintel-rapl/sys/class/powercap/intel-rapl

我如何启用内核配置CONFIG_POWERCAPCONFIG_INTEL_RAPL。启用内核配置是什么意思?我正在使用 Ubuntu 16.04。

答案1

对于 Ubuntu 内核,您会发现 CONFIG_POWERCAP 设置为是,并且 CONFIG_INTEL_RAPL 设置为模块,因此您想要的内容已经包含在内。

检查的一种方法是从内核配置文件中 grep 每个配置:

doug@s15:~/temp-k-git/linux$ grep CONFIG_POWERCAP /boot/config-4.4.0-141-generic
CONFIG_POWERCAP=y
doug@s15:~/temp-k-git/linux$ grep CONFIG_INTEL_RAPL /boot/config-4.4.0-141-generic
CONFIG_INTEL_RAPL=m

您没有子目录,这/sys/class/powercap表明您的特定 Intel 处理器不支持 rapl。但是,您提供的链接似乎也没有像他们所说的那样工作(我没有调查这一点)。

turbostat (linu-tools-common 包) 是一款用于监控 Intel 处理器的很多东西的非常好的工具(我认为它现在在某些 AMD 处理器上也能用)。例如,监控处理器包的功率和温度:

doug@s15:~/temp-k-git/linux$ sudo turbostat --Summary --quiet --show PkgTmp,PkgWatt --interval 15
PkgTmp  PkgWatt
25      3.70
25      3.69

然而,如果加载了 msr 模块(由 turbostat 加载或执行sudo mpdprobe msr),也可以直接访问 MSR(机器特定寄存器)。例如,以下脚本监视处理器包温度、每个核心温度和 CPU 频率:

#! /bin/dash
#
# temp_mon5 Smythies 2019.01.20
#       package and all cores.
#
# temp_mon4 Smythies 2018.07.24
#       try 0x19c as the temp MSR.
#       was 0x1b1
#
# temp_mon3 Smythies 2016.10.05
#       a simplified version of temp_mon2,
#       for monitoring temp.
#       Note: it is on purpose that -a is not used.
#       Also CPU0 frequency (1 is good enough, when all
#       are loaded).
#
# temp_mon2 Smythies 2016.09.29
#       Monitor Package temperatures.
#       Use clock modulation to control temps.
#       i.e. simulate the second to last level
#       of defense.
#       Use simple primatives.
#       run as sudo
#       hardcoded for my tcc of 98 degrees.
#
echo ... begin package temperature monitoring ...

#
# In case I forgot (which I often do)

modprobe msr

#
# first let the drastic effect of the sudo command decay
# Done later in temp_mon3.

#
# some stuff

COMMANDP="/usr/sbin/rdmsr --bitfield 22:16 -u 0x1B1"
COMMAND0="/usr/sbin/rdmsr --bitfield 22:16 -u --processor 0 0x19C"
COMMAND1="/usr/sbin/rdmsr --bitfield 22:16 -u --processor 1 0x19C"
COMMAND2="/usr/sbin/rdmsr --bitfield 22:16 -u --processor 2 0x19C"
COMMAND3="/usr/sbin/rdmsr --bitfield 22:16 -u --processor 3 0x19C"
COMMANDF="cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"

#
# then get on with it

while [ 1 ];do
  sleep 15
  CPU0_FREQ=$(eval $COMMANDF)
  TEMP_RAWP=$(eval $COMMANDP)
  TEMP_RAW0=$(eval $COMMAND0)
  TEMP_RAW1=$(eval $COMMAND1)
  TEMP_RAW2=$(eval $COMMAND2)
  TEMP_RAW3=$(eval $COMMAND3)
  TEMP_ACTP=$((98-TEMP_RAWP))
  TEMP_ACT0=$((98-TEMP_RAW0))
  TEMP_ACT1=$((98-TEMP_RAW1))
  TEMP_ACT2=$((98-TEMP_RAW2))
  TEMP_ACT3=$((98-TEMP_RAW3))
  echo "$TEMP_ACTP  $TEMP_ACT0  $TEMP_ACT1  $TEMP_ACT2  $TEMP_ACT3   $CPU0_FREQ"
done

示例输出:

doug@s15:~/temp-k-git/linux$ sudo /home/doug/temp2/temp_mon5
... begin package temperature monitoring ...
29  30  30  28  30   1605277
29  28  30  28  29   1605281
30  30  30  28  30   1605248
29  29  30  29  31   1605112
29  30  30  28  30   1605266
29  29  30  29  30   1605359
31  30  30  27  30   1605199
29  30  30  28  29   1605202
30  29  31  27  29   1605042
29  30  30  27  30   1605312
29  30  30  28  31   1605262
29  29  30  29  30   1605304

相关内容