web-dev-qa-db-ja.com

サードパーティのソフトウェアなしで温度を見つけるにはどうすればよいですか?

sensors-detectを使用してシステムでlm-sensorsを実行しています

だから、lm-sensorsのようなサードパーティのソフトウェアなしで、ファンとCPUの温度を手動で見つけるにはどうすればいいのだろうか?それらがどこに保存されているかわかりません。

processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 16
model       : 6
model name  : AMD Athlon(tm) II X2 240e Processor
power management: ts ttp tm stc 100mhzsteps hwpstate

x86_64

9
user610658

あなたが望むのは/sys/class/hwmon/sys/class/thermalのようです。

どちらも、必要なデータへの単純なシェルベースのアクセスを提供します(hwmonディレクトリには他のセンサータイプも含まれます)。それぞれには、システム内のセンサーインターフェイスごとに1つのディレクトリがあります(複数のセンサーがある場合があります)。

ただし、次の3つの点に注意してください。

  • 本当に悪いシステムがない限り、sensorsコマンドを1秒間に1回実行しても、目に見える効果はありません。実際、上記のディレクトリ内のファイルを定期的に読み取ると、さらに効果が上がる場合があります。
  • ここではグラフがあなたの友達です。 netdataまたはcollectdのようなものを実行して、リアルタイム(またはほぼリアルタイム)のデータを確認できるようにすることをお勧めします。
  • 電圧も確認してください。また、システムの電力要件に対応できない電源装置が原因である可能性もあります。これは、システムに高負荷がかかると、電圧が大幅に低下することで示されます。
10

この回答は、Machine Specific Registers(MSR)に直接アクセスすることにより、一部のIntelプロセッサーのプロセッサー温度を手動で監視する方法の1つです。

最初に注意することは、この場合、MSRから読み出されるものはTcc(限界温度)に関連するため、実際の温度を決定するには追加の計算が必要です。

Intel®64 and IA-32 Architectures Software Developer's Manual 、またはお客様の場合はAMDの同等物を参照してください。

私の場合、0x1B1、別名IA32_PACKAGE_THERM_STATUSのMSRのビット22〜16が必要です。私の古い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
9
Doug Smythies

本当に何が欲しいのか分かりません。 lm-sensorプログラム(およびsensorsコマンド)は、libsensorライブラリを使用します。 Ubuntu 18.04を使用する場合、libsensors4、バージョン3.4.0-4です。これは、sysディレクトリに見られる温度を読み取るのと同じライブラリです。

まとめると、センサーは良い選択です。温度を継続的に監視するには

watch -n 1 sensors

プログラムを作成する場合は、man libsensorsでlibsensorsを調べるか、/usr/share/doc/を調べる必要があります。 #include <sensors/sensors.h>を含める必要があります。 sensors.conffiles / etc/sensors3.confおよび/または/ etc/sensors.confを使用します。さらに(ユーザー)構成は、/etc/sensors.d/(使用されている場合)にあります。

一部のセンサーが不足していると思われる場合は、/sys/class/thermalまたはリンクされた/sys/devices/virtual/thermalディレクトリをご覧ください。

すべてのサーマルゾーンの温度を取得するには

$ cat /sys/devices/virtual/thermal/thermal_zone?/temp

77000
66000
67000

温度はミリセルシウス(mC)で測定され、77.0、66.0、67,0°Cを超える場合です。

継続的に使用するには

watch -n 1 cat /sys/devices/virtual/thermal/thermal_zone?/temp

このディレクトリには、冷却(ファン)デバイス、およびPIDレギュレーターのプログラミング方法に関する情報もあります。

また、いくつかの過熱保護はハードウェアベースでコーディングされていることをお勧めします(これは良い考えです)。

5
abu_bua

デフォルトのUbuntuリポジトリからPsensor(psensor)をインストールし、温度がユーザーが決定した最大値を超えたときにPsensorが自動的に警告音を再生するように設定します。これの目的は、警告音を鳴らすことですbeforeシステムにアプリケーションのオーバーヘッドを追加することなくシステムをシャットダウンします。

Psensorは、デスクトップ上で時計の横にあるデスクトップの右上隅の通知領域に小さな温度計アイコンとして表示されます。いつでも温度計アイコンを右クリックして、ハードウェアの温度を表示できます。

4
karel