Я хочу использовать драйвер Intel® 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.
Для ядер Ubuntu вы обнаружите, что для CONFIG_POWERCAP установлено значение yes, а для CONFIG_INTEL_RAPL установлено значение module, поэтому то, что вы хотите, уже включено.
Один из способов проверки - извлечь из каждой конфигурации конфигурационный файл 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 не имеет поддержка рэпла. Однако та ссылка, которую вы дали, также, похоже, не работает так, как они говорят (я не рассматриваю это).
Очень хорошим инструментом для мониторинга многих вещей с процессорами Intel (и я думаю, что он работает сейчас на некоторых процессорах AMD) является турбостат (пакет linu-tools-common). Пример, мониторинг мощности и температуры пакета процессора:
doug@s15:~/temp-k-git/linux$ sudo turbostat --Summary --quiet --show PkgTmp,PkgWatt --interval 15
PkgTmp PkgWatt
25 3.70
25 3.69
Однако можно также получить доступ к MSR (машинно-зависимым регистрам) напрямую, если загружен модуль msr (который загружает турбостат или выполняет sudo mpdprobe msr
). В следующем примере скрипт отслеживает температуру пакета процессора, температуру каждого ядра и частоту процессора:
#! /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