lm sensors
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.conf
の MODULES
配列に追加することもできます:
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-appletAUR - GNOME パネルにハードウェアセンサーからの情報、CPU 温度・ファンスピード・電圧などを表示するためのアプレットです。
sensord
sensord (lm_sensors パッケージの中に入っています) と呼ばれるオプショナルデーモンが存在し、ラウンドロビンデータベース (rrd) にデータを記録して後で視覚化することができます。詳細は sensord の man ページを読んでください。
Tips and Tricks
値の調整
場合によって、表示されるデータが間違っていたり出力をリネームしたいということがあるでしょう。以下のようなユースケースが考えられます:
- オフセットが間違っているために温度の値が間違っている (つまり実際の温度よりも20 °C 高く報告される)。
- センサーの出力をリネームしたい。
- 表示されるコアの順番が間違っている。
上記は全て /etc/sensors.d/foo
を作成して /etc/sensors3.conf
にあるパッケージの設定を上書きすることで調整できます。'foo' はマザーボードのブランド名に置き換えることを推奨しますが命名は任意です。
例 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
大抵は問題のハードウェアについて他のモジュールを使って (例: ACPI モジュール) 情報にアクセスできます。多くのユーティリティとモニタ (例: /usr/bin/sensors
) は複数のソースから情報を収集します。可能であれば、それが推奨される方法です。