lm sensors

提供: ArchWiki
移動先: 案内検索

関連記事

lm_sensors (Linux monitoring sensors) は温度、電圧、ファンを監視するフリーでオープンソースなツールとドライバです。 このドキュメントでは lm_sensors のインストール・設定の方法と、CPU 温度やマザーボードの温度、ファンスピードを監視する方法を説明します。

使い方

インストール

lm_sensors公式リポジトリからインストールします。

lm_sensors の設定

検出とカーネルモジュールのリストを作成するために sensors-detect を使用します。

# sensors-detect

上のコマンドを実行すると、sensors デーモンが起動時に自動的にカーネルモジュールを読み込むためのファイル /etc/conf.d/lm_sensors が作成されます。どのハードウェアを検索したいかどうか質問されるでしょう。デフォルトが "安全" な答えに設定されているので大抵の場合、全ての質問に Enter を押すだけでかまいません。

一連の検出が終わったら検出の結果が提示されます。例:

# sensors-detect
Now follows a summary of the probes I have just done.
Just press ENTER to continue:
Driver `it87':
  * ISA bus, address 0x290
     Chip `ITE IT8718F Super IO Sensors' (confidence: 9)
Driver `coretemp':
  * Chip `Intel Core family thermal sensor' (confidence: 9)

もしあなたがデーモンを使う気でいるなら、/etc/conf.d/lm_sensors を作成するかどうか聞かれた時に YES と答えてください。

起動時に自動的にカーネルモジュールを読み込むには、次を実行する必要があります:

systemctl enable lm_sensors.service

また、デーモンを使う代わりに、モジュールを /etc/modules-load.d/lm_sensors.confMODULES 配列に追加することもできます:

coretemp
it87
acpi-cpufreq

lm_sensors をテストする

セットアップをテストするには、手動で、もしくは systemd のサービスファイルを利用し、カーネルモジュールを読み込む必要があります。両方使用してはいけません。

例: 手動で読み込む方法

# modprobe it87
# modprobe coretemp

例: スクリプトを利用する方法

# systemctl enable lm_sensors
# systemctl start lm_sensors

sensors を実行するとこのようなものが表示されるはずです。

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +30.0°C  (high = +76.0°C, crit = +100.0°C)  

coretemp-isa-0001
Adapter: ISA adapter
Core 1:      +30.0°C  (high = +76.0°C, crit = +100.0°C)  

coretemp-isa-0002
Adapter: ISA adapter
Core 2:      +32.0°C  (high = +76.0°C, crit = +100.0°C)  

coretemp-isa-0003
Adapter: ISA adapter
Core 3:      +30.0°C  (high = +76.0°C, crit = +100.0°C)  

it8718-isa-0290
Adapter: ISA adapter
in0:         +1.17 V  (min =  +0.00 V, max =  +4.08 V)   
in1:         +1.31 V  (min =  +1.28 V, max =  +1.68 V)   
in2:         +3.28 V  (min =  +2.78 V, max =  +3.78 V)   
in3:         +2.88 V  (min =  +2.67 V, max =  +3.26 V)   
in4:         +2.98 V  (min =  +2.50 V, max =  +3.49 V)   
in5:         +1.34 V  (min =  +0.58 V, max =  +1.34 V)   ALARM
in6:         +2.02 V  (min =  +1.04 V, max =  +1.36 V)   ALARM
in7:         +2.83 V  (min =  +2.67 V, max =  +3.26 V)   
Vbat:        +3.28 V
fan1:       1500 RPM  (min = 3245 RPM)  ALARM
fan2:          0 RPM  (min = 3245 RPM)  ALARM
fan3:          0 RPM  (min = 3245 RPM)  ALARM
temp1:       +18.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermal diode
temp2:       +32.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermistor
temp3:       +38.0°C  (low  = +127.0°C, high = +64.0°C)  sensor = thermistor
cpu0_vid:   +2.050 V

acpitz-virtual-0
Adapter: Virtual device
temp1:       +18.0°C  (crit = +64.0°C)

SPD の値をメモリーモジュールから読み込む (任意)

SPD タイミングの値をあなたのメモリーモジュールから読み込むには、i2c-tools公式リポジトリからインストールします。 i2c-tools をインストールしたら、eeprom カーネルモジュールを読み込む必要があります。

# modprobe eeprom

最後に、あなたのメモリー情報を decode-dimms で見る事ができます。

以下はあるマシンの出力の一部です:

$ decode-dimms
# decode-dimms version 5733 (2009-06-09 13:13:41 +0200)

Memory Serial Presence Detect Decoder
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
Jean Delvare, Trent Piepho and others


Decoding EEPROM: /sys/bus/i2c/drivers/eeprom/0-0050
Guessing DIMM is in                             bank 1

---=== SPD EEPROM Information ===---
EEPROM CRC of bytes 0-116                       OK (0x583F)
# of bytes written to SDRAM EEPROM              176
Total number of bytes in EEPROM                 512
Fundamental Memory type                         DDR3 SDRAM
Module Type                                     UDIMM

---=== Memory Characteristics ===---
Fine time base                                  2.500 ps
Medium time base                                0.125 ns
Maximum module speed                            1066MHz (PC3-8533)
Size                                            2048 MB
Banks x Rows x Columns x Bits                   8 x 14 x 10 x 64
Ranks                                           2
SDRAM Device Width                              8 bits
tCL-tRCD-tRP-tRAS                               7-7-7-33
Supported CAS Latencies (tCL)                   8T, 7T, 6T, 5T

---=== Timing Parameters ===---
Minimum Write Recovery time (tWR)               15.000 ns
Minimum Row Active to Row Active Delay (tRRD)   7.500 ns
Minimum Active to Auto-Refresh Delay (tRC)      49.500 ns
Minimum Recovery Delay (tRFC)                   110.000 ns
Minimum Write to Read CMD Delay (tWTR)          7.500 ns
Minimum Read to Pre-charge CMD Delay (tRTP)     7.500 ns
Minimum Four Activate Window Delay (tFAW)       30.000 ns

---=== Optional Features ===---
Operable voltages                               1.5V
RZQ/6 supported?                                Yes
RZQ/7 supported?                                Yes
DLL-Off Mode supported?                         No
Operating temperature range                     0-85C
Refresh Rate in extended temp range             1X
Auto Self-Refresh?                              Yes
On-Die Thermal Sensor readout?                  No
Partial Array Self-Refresh?                     No
Thermal Sensor Accuracy                         Not implemented
SDRAM Device Type                               Standard Monolithic

---=== Physical Characteristics ===---
Module Height (mm)                              15
Module Thickness (mm)                           1 front, 1 back
Module Width (mm)                               133.5
Module Reference Card                           B

---=== Manufacturer Data ===---
Module Manufacturer                             Invalid
Manufacturing Location Code                     0x02
Part Number                                     OCZ3G1600LV2G     

...

センサーデータの利用

グラフィカルフロントエンド

センサーデータのフロントエンドが多数あります。

  • xsensors - lm_sensors の X11 インターフェースです。
  • xfce4-sensors-plugin - lm_sensors を Xfce パネルへ追加するためのプラグインです。
  • conky - Conky は高度で設定を行うことができる torsmo ベースの X 向けシステムモニターです。
  • kdeutils-superkaramba - Superkaramba は KDE デスクトップのためのウィジェット作成をできるようにするツールです。

詳しくは kde-look.org の karamba セクション を見てください。例えばセンサーデータのための karamba フロントエンドがあります。

  • sensors-applet - GNOME パネルにハードウェアセンサーからの情報、CPU 温度・ファンスピード・電圧などを表示するためのアプレットです。

sensord

sensord (lm_sensors パッケージの中に入っています) と呼ばれるオプショナルデーモンが存在し、ラウンドロビンデータベース (rrd) にデータを記録して後で視覚化することができます。詳細は sensord の man ページを読んでください。

Tips and Tricks

値の調整

場合によって、表示されるデータが間違っていたり出力をリネームしたいということがあるでしょう。以下のようなユースケースが考えられます:

  • オフセットが間違っているために温度の値が間違っている (つまり実際の温度よりも20 °C 高く報告される)。
  • センサーの出力をリネームしたい。
  • 表示されるコアの順番が間違っている。

上記は全て /etc/sensors.d/foo を作成して /etc/sensors3.conf にあるパッケージの設定を上書きすることで調整できます。'foo' はマザーボードのブランド名に置き換えることを推奨しますが命名は任意です。

ノート: /etc/sensors3.conf を直接編集しないでください。パッケージのアップデートによって上書きされてしまいます。

例 1. 温度のオフセットを調整

以下は Zotac ION-ITX-A-U マザーボードの実際の例です。coretemp の 20 °C ずれており (高すぎる) Intel の仕様にあわせて低く調整します。

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +57.0°C  (crit = +125.0°C)
Core 1:       +55.0°C  (crit = +125.0°C)
...

物理チップに対してどのようなオプションが利用できるか sensors-u スイッチをつけて調べてください (raw モード):

$ sensors -u
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
  temp2_input: 57.000
  temp2_crit: 125.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 55.000
  temp3_crit: 125.000
  temp3_crit_alarm: 0.000
...

デフォルトの値を上書きするために以下のファイルを作成:

/etc/sensors.d/Zotac-IONITX-A-U
chip "coretemp-isa-0000"
  label temp2 "Core 0"
  compute temp2 @-20,@-20

  label temp3 "Core 1"
  compute temp3 @-20,@-20

sensors を実行すると調整された値が表示されるようになります:

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +37.0°C  (crit = +105.0°C)
Core 1:       +35.0°C  (crit = +105.0°C)
...

例 2. ラベルの名前の変更

以下は Asus A7M266 での実際の例です。温度のラベル 'temp1' と 'temp2' にもっとちゃんとした名前を付けます:

$ sensors
as99127f-i2c-0-2d
Adapter: SMBus Via Pro adapter at e800
...
temp1:        +35.0°C  (high =  +0.0°C, hyst = -128.0°C)
temp2:        +47.5°C  (high = +100.0°C, hyst = +75.0°C)
...

デフォルトの値を上書きするために以下のファイルを作成:

/etc/sensors.d/Asus_A7M266
chip "as99127f-*"
  label temp1 "Mobo Temp"
  label temp2 "CPU0 Temp"

sensors を実行すると調整された値が表示されるようになります:

$ sensors
as99127f-i2c-0-2d
Adapter: SMBus Via Pro adapter at e800
...
Mobo Temp:        +35.0°C  (high =  +0.0°C, hyst = -128.0°C)
CPU0 Temp:        +47.5°C  (high = +100.0°C, hyst = +75.0°C)
...

例 3. マルチ CPU 環境でコアの番号を再定義する

稀に、マルチ CPU マザーボードでは実際の物理コアのナンバリングが間違っていることがあります。 Xeon を2個搭載した HP Z600 ワークステーションの例を示します:

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +65.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:       +65.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:       +66.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:      +66.0°C  (high = +85.0°C, crit = +95.0°C)

coretemp-isa-0004
Adapter: ISA adapter
Core 0:       +54.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:       +56.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:       +60.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:      +61.0°C  (high = +85.0°C, crit = +95.0°C)

smsc47b397-isa-0480
Adapter: ISA adapter
fan1:        1730 RPM
fan2:        1746 RPM
fan3:        1224 RPM
fan4:        2825 RPM
temp1:        +46.0°C
temp2:        +37.0°C
temp3:        +23.0°C
temp4:       -128.0°C

コアの番号が 0,1,9,10 となっていて、2番目の CPU でも同じ番号が繰り返されていることに注意してください。多くのユーザーは 0,1,2,3,4,5,6,7 といった順番でコアの温度を表示してほしいでしょう。2段階でこの問題を解決します。物理チップに対してどのようなオプションが利用できるか sensors-u スイッチをつけて調べてください:

$ sensors -u coretemp-isa-0000
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
  temp2_input: 61.000
  temp2_max: 85.000
  temp2_crit: 95.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 61.000
  temp3_max: 85.000
  temp3_crit: 95.000
  temp3_crit_alarm: 0.000
Core 9:
  temp11_input: 62.000
  temp11_max: 85.000
  temp11_crit: 95.000
Core 10:
  temp12_input: 63.000
  temp12_max: 85.000
  temp12_crit: 95.000
$ sensors -u coretemp-isa-0004
coretemp-isa-0004
Adapter: ISA adapter
Core 0:
  temp2_input: 53.000
  temp2_max: 85.000
  temp2_crit: 95.000
  temp2_crit_alarm: 0.000
Core 1:
  temp3_input: 54.000
  temp3_max: 85.000
  temp3_crit: 95.000
  temp3_crit_alarm: 0.000
Core 9:
  temp11_input: 59.000
  temp11_max: 85.000
  temp11_crit: 95.000
Core 10:
  temp12_input: 59.000
  temp12_max: 85.000
  temp12_crit: 95.000

結果を元に、新しい定義を /etc/sensors.d/cores.conf に作成します:

/etc/sensors.d/cores.conf
chip "coretemp-isa-0000"

    label temp2 "Core 0"
    label temp3 "Core 1"
    label temp11 "Core 2"
    label temp12 "Core 3"

chip "coretemp-isa-0004"

    label temp2 "Core 4"
    label temp3 "Core 5"
    label temp11 "Core 6"
    label temp12 "Core 7"

問題は解決しました。これらのステップが完了した結果を示します:

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core0:        +64.0°C  (high = +85.0°C, crit = +95.0°C)
Core1:        +63.0°C  (high = +85.0°C, crit = +95.0°C)
Core2:        +65.0°C  (high = +85.0°C, crit = +95.0°C)
Core3:        +66.0°C  (high = +85.0°C, crit = +95.0°C)

coretemp-isa-0004
Adapter: ISA adapter
Core4:        +53.0°C  (high = +85.0°C, crit = +95.0°C)
Core5:        +54.0°C  (high = +85.0°C, crit = +95.0°C)
Core6:        +59.0°C  (high = +85.0°C, crit = +95.0°C)
Core7:        +60.0°C  (high = +85.0°C, crit = +95.0°C)

smsc47b397-isa-0480
Adapter: ISA adapter
fan1:        1734 RPM
fan2:        1726 RPM
fan3:        1222 RPM
fan4:        2827 RPM
temp1:        +45.0°C  
temp2:        +37.0°C  
temp3:        +23.0°C  
temp4:       -128.0°C  

自動で lm_sensors を配置

複数のマシンに lm-sensors を配置したい場合、以下のどちらかで利用できます:

1. 質問に対してデフォルトで承認:

# sensors-detect --auto

2. デフォルトを上書きして全ての質問に YES で答える:

 # yes | sensors-detect

トラブルシューティング

K10Temp モジュール

K10 プロセッサでは温度センサーで問題が起こることがあります。カーネルドキュメントより (linux-<version>/Documentation/hwmon/k10temp):

All these processors have a sensor, but on those for Socket F or AM2+, the sensor may return inconsistent values (erratum 319). The driver will refuse to load on these revisions unless users specify the force=1 module parameter.
Due to technical reasons, the driver can detect only the mainboard's socket type, not the processor's actual capabilities. Therefore, users of an AM3 processor on an AM2+ mainboard, can safely use the force=1 parameter.

影響があるマシンではモジュールは "unreliable CPU thermal sensor; monitoring disabled" と報告します。強制的に使用するには:

# rmmod k10temp
# modprobe k10temp force=1

センサーが問題なく確かなことを確認して下さい。大丈夫のようなら、/etc/modprobe.d/k10temp.conf を編集して次を追加:

options k10temp force=1

これでモジュールがブート時にロードされるようになります。

Linux 2.6.31 から Sensors が動きません

2.6.21 の変更でいくつかの sensors が動かないようになりました。詳しい説明とエラーの例が この FAQ エントリ にあります。これを修復するには、次のカーネルパラメータを追加してください:

acpi_enforce_resources=lax
警告: 場合によって、この設定が危険なこともあります。詳しくは FAQ を見て下さい。

大抵は問題のハードウェアについて他のモジュールを使って (例: ACPI モジュール) 情報にアクセスできます。多くのユーティリティとモニタ (例: /usr/bin/sensors) は複数のソースから情報を収集します。可能であれば、それが推奨される方法です。

Gigabyte GA-J1900N-D3V

(電圧やマザーボードの温度、ファンの速度を測定するのに使われる) ITE IT8620E チップを使用するマザーボードですが、2014年10月6日現在、lm_sensors は ITE IT8620E をサポートしていません [1] [2]。lm_sensors の開発者はハードウェアの監視部分については IT8728F と互換性があることを報告しています。

modprobe を使うことで動的にモジュールをロードできます:

$ modprobe it87 force_id=0x8728

もしくは systemd-module-load.service を使って、以下の2つのファイルを作成することで起動時にモジュールをロードすることもできます:

/etc/modules-load.d/it87.conf
it87
/etc/modprobe.d/it87.conf
options it87 force_id=0x8603

モジュールがロードされたら lm_sensors で情報を読み取ることができます:

$ sensors

また、fancontrol を使ってファンの速度を制御することも可能です。

sensors-detect を実行した後にノートパソコンのディスプレイに問題が発生する

lm-sensors がセンサーを調べるときにディスプレイの Vcom 値を変えてしまうのが原因です。フォーラムに解決法が載っています: https://bbs.archlinux.org/viewtopic.php?id=193048 。ただし、フォーラムに書かれているコマンドを安易に実行する前によく中身を読んで下さい。