我想利用英特尔® RAPL 驱动程序来监控 Ubuntu 16.04 中的电源。链接这里说我们可以通过检查中的文件夹是否存在来验证CONFIG_POWERCAP
和是否已启用。但是,我没有在 找到文件夹。CONFIG_INTEL_RAPL
intel-rapl
/sys/class/powercap/intel-rapl
intel-rapl
/sys/class/powercap/intel-rapl
我如何启用内核配置CONFIG_POWERCAP
和CONFIG_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