この答えは、Machine Specific Registers(MSR)に直接アクセスして、一部のIntelプロセッサのプロセッサ温度を手動で監視する方法の1つです。
最初に注意する点は、この場合、MSRから読み取られるのは限界温度であるTccに関連するため、実際の温度を決定するには追加の計算が必要です。
インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアルを参照するか、場合によってはAMDと同等のものを参照してください。
私の場合、MSRのビット22〜16が0x1B1、つまりIA32_PACKAGE_THERM_STATUSに必要です。私の古いi7-2600KのTccは98度です。
温度(およびCPU周波数)を手動で監視する簡単なスクリプトを次に示します。
#! /bin/dash
#
# 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
COMMAND="rdmsr --bitfield 22:16 -u 0x1B1"
COMMAND2="cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq"
#
# then get on with it
while [ 1 ];do
sleep 4
TEMP_RAW=$(eval $COMMAND)
CPU0_FREQ=$(eval $COMMAND2)
TEMP_ACT=$((98-TEMP_RAW))
echo "$TEMP_ACT $CPU0_FREQ"
done
そして、ここにいくつかのサンプル出力があります。しばらくすると、CPU負荷が追加されます(温度は31度から73度になります)。
$ sudo ./temp_mon3
[sudo] password for doug:
... begin package temperature monitoring ...
31 1605275
31 1605154
32 1605164
30 1605148
31 1605176
51 3511279
54 3511278
55 3511279
57 3511283
58 3511279
60 3511278
61 3511284
63 3511279
64 3511280
64 3511280
66 3511280
67 3511278
68 3511280
68 3511281
69 3511278
71 3511280
70 3511281
71 3511281
71 3511280
72 3511276
72 3511277
73 3511283
73 3511279
^C