Lm_sensors でマザーボードをモニターする




Update : 2003/10/05



Lm_sensors はマザーボードのモニターツールです

 CPUの温度は,通常マザーボードのBIOS上でモニターができて,それをOS上からでも見ることができるようにツールが用意されています。Linux上でこれらのマザーボード・ヘルス・モニタチップから情報取得したい場合、Lm_sensors と呼ばれるツールを利用することで比較的簡単にできます。
 Lm_sensors を利用することで、Linuxのコマンドよりマザーボードの CPUファンの回転数や温度、電圧などハードウェアを監視することができます。RedHat Linux8 では、Lm_sensor を rpmパッケージからインストールするだけで利用できます。
lm_sensor を起動すると、CPU温度などのデータ値をチップセットなどから取得して/proc 以下に出力してくれます。lm_sensor で収集した温度データを MRTG や HotSaNIC のグラフで監視することもできます。
ここでは、lm_sensorをインストールし、CPU温度を監視する手順を説明します。


ファンレス運用のWebサーバーの内部写真
ファンレスで運用している当Webサーバーの内部写真です


 以下の手順は、すべての Linux での Lm_sensors の動作を保証するものではありません。1つの実行事例であり、参考事例として利用してください。設定の手順の実行は、自己責任において行ってください。
この手順によって発生した障害や損害については、一切の責任を負いません。
メールなどのお問い合わせには一切お答えできませんのでご了承ください。



  インストールしたマシンの環境

Lm_sensors を利用するためには、マザーボードに搭載されているチップが、Lm_sensors のサポート品であるとが必須です。
テストしたマザーボード は次の3種類でした。
マザーボード
CUP
OS
温度関連チップ
Jetway 603TFC
 VIA C3 800MHz (Socket 370)
 Red Hat Linux 8
 VIA VT82C686
Asustek P4T-M
 Pentium 4 / 1.7GHz (Socket 423)
 Red Hat Linux 8
 W83781D
Asustek P4T-M
 Pentium 4 / 1.7GHz (Socket 423)
 Vine Linux 2.6
 W83781D
 Asustek P4T-F
 Pentium 4 / 1.7GHz (Socket 423)
 Red Hat Linux 8
 W83781D
このページでは、当Webサーバー ( C3 + Jetway 603TCF ) に Lm_sensors をインストールした手順について解説します。
インストールしたマシンの環境はつぎのとおりです。
 CPU
 VIA C3 (800Mhz)
 省電力・低発熱CPU ( ファンレスで運用 )
 マザーボード
 Jetway 603TCF
 Micro-ATX Apollo PLE133T、VIA VT82C686
 メモリー
 256MB
 SD-RAM 128MB x 2 (CL= 3)
 OS
 Red Hat Linux 8
 kernel-2.4.18-14
 Lm_sensors
 lm_sensors-2.6.3-2
 rpm パッケージを使用

 インストールしたマシンは、2003年10月現在自宅Webサーバーとして運用しています。
マシンのハードウェア: http://whzat.minidns.net/profile/
サーバーの稼動状況: http://whzat.minidns.net/monitor/

 CPU に 低発熱の VIA C3 を使用した理由は、CPU温度をモニターしながら自宅Webサーバーをファンレス運用したいためです。マザーボードに Jetway 603TCF を使用した理由は、マニュアルで VIA-C3 のサポートを明示的に書いてあり、基板上の部品配置が気に入ったからでした。かなりマイナーなメインボードですが、マニアックというわけではありあせん。価格も7,000円程度なので、失敗してもダメージが少ないというメリットもありました。:-)

  LM_sensors と対応する チップ
Lm_sensors のソフトウェアは、次のサイトからダウンロードして利用することができます。
URL : http://secure.netroedge.com/~lm78/
ドキュメントは英語ですが、親切な記述のでよく読みましょう。
URL: http://www2.lm-sensors.nu/~lm78/docs.html
Lm_sensors のサポートするチップは、つぎのサイトで調べることができます。
Identifying your hardware : http://secure.netroedge.com/~lm78/supported.html

参考までに Lm_sensors でサポートされている一般的なチップのいくつかを挙げておきます。

 National Semiconductor
 LM75,LM78,LM78-J,LM79,LM80
 Winbond
 W83781D,W83782D,W83783S,W83627HF
 VIA
 VIA696a
 Asustek
 AS99127F

  インストール手順
正規の Lm_sensors のインストール手順は、カーネルにいくつものパッチをあてる作業が必要なのですが、ここでは rpm パッケージを利用して、後半の設定手順を中心に説明します。

1、インストールする

  Red Hat Linux 8 の CD-ROM # 3 から適当なディレクトリに Lm_sensors のパッケージをコピーしてインストールします。

# rpm -ivh lm_sensors-2.6.3-2.i386.rpm


ソースからのインストールは、パッチあてなど煩雑ですが、RPMパッケージではインストールはこれで終了です。

 ※ Linux のディストリビューションによっては、i2c のソフトが必要になる場合があるかもしれません?

2、lm_sensors でマザーボード上の各種センサーを自動検知させる
 インストールした lm_sensors で、さっそく温度センサーを検出させて、必要な設定を実行します。
sensors-detect というコマンドを実行して、対話式に設定を行う。この対話式設定は、アミダクジに必勝のヒントが付いてるようなものなので、マザーボードのマニュアルをよく読んでおけば、応答にそれほど迷うこともないでしょう。

以下のセンサーの自動検知の手順では、表示される質問には [Enter] (英大字の選択肢)キーを押してゆけば自動的にチップが認識されます。


[root@otto root]# sensors-detect
This program will help you to determine which I2C/SMBus modules you need to
load to use lm_sensors most effectively.
You need to have done a `make install', issued a `depmod -a' and made sure
`/etc/conf.modules' (or `/etc/modules.conf') contains the appropriate
module path before you can use some functions of this utility. Read
doc/modules for more information.
Also, you need to be `root', or at least have access to the /dev/i2c[-/]* files
for some things. You can use prog/mkdev/mkdev.sh to create these /dev files
if you do not have them already.
If you have patched your kernel and have some drivers built-in you can
safely answer NO if asked to load some modules. In this case, things may
seem a bit confusing, but they will still work.

IF THIS IS AN IBM THINKPAD, PRESS CTRL-C NOW!
IBM Thinkpads have a severely broken i2c/SMBus implementation, just scanning
the bus will break your thinkpad forever!

We can start with probing for (PCI) I2C or SMBus adapters.
You do not need any special privileges for this.
Do you want to probe now? (YES/no): {Enter]
Probing for PCI bus adapters...
Use driver `i2c-viapro' for device 00:07.4: VIA Technologies VT82C686 Apollo ACPI
Probe succesfully concluded.

We will now try to load each adapter module in turn.
Load `i2c-viapro' (say NO if built into your kernel)? (YES/no): {Enter]
Module loaded succesfully.
Do you now want to be prompted for non-detectable adapters? (yes/NO): yes
Load `i2c-elektor' (say NO if built into your kernel)? (YES/no): {Enter]
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-elektor.o: init_module: No such device
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters.
You may find more information in syslog or the output from dmesg
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-elektor.o: insmod /lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-elektor.o failed
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-elektor.o: insmod i2c-elektor failed
Loading failed ()... skipping.
Load `i2c-elv' (say NO if built into your kernel)? (YES/no): {Enter]
Module loaded succesfully.
Load `i2c-philips-par' (say NO if built into your kernel)? (YES/no): {Enter]
Module loaded succesfully.
Load `i2c-velleman' (say NO if built into your kernel)? (YES/no): {Enter]
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-velleman.o: init_module: No such device
Hint: insmod errors can be caused by incorrect module parameters, including invalid IO or IRQ parameters.
You may find more information in syslog or the output from dmesg
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-velleman.o: insmod /lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-velleman.o failed
/lib/modules/2.4.18-14/kernel/drivers/i2c/i2c-velleman.o: insmod i2c-velleman failed
Loading failed ()... skipping.
To continue, we need module `i2c-dev' to be loaded.
If it is built-in into your kernel, you can safely skip this.
i2c-dev is already loaded.

We are now going to do the adapter probings. Some adapters may hang halfway
through; we can't really help that. Also, some chips will be double detected;
we choose the one with the highest confidence value in that case.
If you found that the adapter hung after probing a certain address, you can
specify that address to remain unprobed. That often
includes address 0x69 (clock chip).

Next adapter: ELV Parallel port adaptor (Bit-shift algorithm)
Do you want to scan it? (YES/no/selectively): no

Next adapter: SMBus Via Pro adapter at 5000 (Non-I2C SMBus adapter)
Do you want to scan it? (YES/no/selectively): {Enter]
Client found at address 0x2d
Probing for `Myson MTP008'... Failed!

---------<途中を省略>---------

Probing for `Winbond W83L784R/AR'... Failed!
Probing for `Serial EEPROM (PC-100 DIMM)'... Success!
(confidence 8, driver `eeprom')
Probing for `DDC monitor'... Failed!
Client found at address 0x69

Some chips are also accessible through the ISA bus. ISA probes are
typically a bit more dangerous, as we have to write to I/O ports to do
this. Do you want to scan the ISA bus? (YES/no): {Enter]
Probing for `National Semiconductor LM78'
Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.
Trying address 0x0290... Failed!

  ---------<途中を省略>---------

Probing for `IPMI BMC SMIC'
Trying address 0x0ca8... Failed!

Now follows a summary of the probes I have just done.
Just press ENTER to continue: {Enter]

Driver `eeprom' (should be inserted):
Detects correctly:
* Bus `SMBus Via Pro adapter at 5000' (Non-I2C SMBus adapter)
Busdriver `i2c-viapro', I2C address 0x50
Chip `Serial EEPROM (PC-100 DIMM)' (confidence: 8)

Driver `via686a' (should be inserted):
Detects correctly:
* ISA bus, undetermined address (Busdriver `i2c-isa')
Chip `VIA Technologies VT82C686 Integrated Sensors' (confidence: 9)


I will now generate the commands needed to load the I2C modules.
Sometimes, a chip is available both through the ISA bus and an I2C bus.
ISA bus access is faster, but you need to load an additional driver module
for it. If you have the choice, do you want to use the ISA bus or the
I2C/SMBus (ISA/smbus)? ISA (ここではためしに速いというISAを選びました)

WARNING! If you have some things built into your kernel, the #重要なお知らせです
below list will contain too many modules. Skip the appropriate ones!
To load everything that is needed, add this to some /etc/rc* file:

#----cut here----
# I2C adapter drivers
# modprobe unknown adapter ELV Parallel port adaptor using Bit-shift algorithm
modprobe i2c-viapro
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe via686a
#----cut here----

To make the sensors modules behave correctly, add these lines to either
/etc/modules.conf or /etc/conf.modules:

#----cut here----
# I2C module options
alias char-major-89 i2c-dev
#----cut here----




最後の部分のセンサーモジュールに関する設定記述が得られれば成功です。

3、モジュールを登録する
検出されたモジュールがLinux 起動時にロードされるように /etc/tc.d/rc.local へvi エディターで登録する。
上記の画面に表示された指示にしたがって、以下の設定を追加する。


[root@otto root]# vi /etc/rc.d/rc.local
--------<途中を省略>---------
# I2C adapter drivers
# modprobe unknown adapter ELV Parallel port adaptor using Bit-shift algorithm
modprobe i2c-viapro
modprobe i2c-isa
# I2C chip drivers
modprobe eeprom
modprobe via686a


この設定をすることでOSの起動時に、VIA686aのモジュールがカーネルに読み込まれて温度検出が可能になります。
4、モジュールのエイリアスを設定する
さらに、指示にしたがって、以下の設定を vi エディターで追加する。


[root@otto root]# vi /etc/modules.conf

---------<途中を省略>---------
# I2C module options
alias char-major-89 i2c-dev


5、マシンを再起動させてモジュール設定を有効にする

[root@otto root]# reboot


マシンを再起動すると、起動時にインストールしたモジュールが自動的に読込まれて、Lm_sensors からの温度情報の読み出しが可能になります。


  Lm_sensors の動作をテストする
1、起動時のハードウェアとモジュール類の認識記録を知る

  OS起動時にモジュール類がカーネルにロードされ、以下のようなメッセージが表示されれば設定は成功です。

[root@otto root]# dmesg
--------<途中を省略>-------
i2c-core.o: i2c core module
i2c-viapro.o version 2.6.3 (20020322)
i2c-viapro.o: Found Via VT82C686A/B device
i2c-core.o: adapter SMBus Via Pro adapter at 5000 registered as adapter 0.
i2c-viapro.o: Via Pro SMBus detected and initialized
i2c-isa.o version 2.6.3 (20020322)
i2c-core.o: adapter ISA main adapter registered as adapter 1.
i2c-isa.o: ISA bus access for i2c modules initialized.
i2c-proc.o version 2.6.1 (20010825)
eeprom.o version 2.6.3 (20020322)
i2c-core.o: driver EEPROM READER registered.
i2c-core.o: client [EEPROM chip] registered to adapter
[SMBus Via Pro adapter at 5000](pos. 0).
via686a.o version 2.6.3 (20020322)
i2c-core.o: driver VIA 686A registered.
i2c-core.o: client [Via 686A Integrated Sensors] registered to adapter
[ISA main adapter](pos. 0).


2、sensors コマンドを実行してみる

[root@otto root]# sensors
eeprom-i2c-0-50
Adapter: SMBus Via Pro adapter at 5000
Algorithm: Non-I2C SMBus adapter
Memory type: SDRAM DIMM SPD
SDRAM Size (MB): 256

via686a-isa-6000
Adapter: ISA adapter
Algorithm: ISA algorithm
CPU core: +1.38 V (min = +1.79 V, max = +2.18 V) ALARM
+2.5V: +2.54 V (min = +2.24 V, max = +2.74 V)
I/O: +3.33 V (min = +2.95 V, max = +3.62 V)
+5V: +5.12 V (min = +4.47 V, max = +5.49 V)
+12V: +11.92 V (min = +10.79 V, max = +13.18 V)
CPU Fan: 0 RPM (min = 3000 RPM, div = 2)
P/S Fan: 0 RPM (min = 3000 RPM, div = 2)
SYS Temp: +27.7ーC (limit = +60ーC, hysteresis = +50ーC)
CPU Temp: +25.8ーC (limit = +60ーC, hysteresis = +50ーC)
SBr Temp: +21.8ーC (limit = +60ーC, hysteresis = +50ーC)



temp1 と temp3 がマザーボード上のセンサーで、temp2 がCPUチップ内の温度を示しているようです。
ファン回転数は、( ここではファンレスなのでゼロだが、) 通常 fan1 だけが表示されるようです。
電源電圧は、マザーボードのBIOS画面で表示される値と同値のようです。
他のマザーボードでもテストしたが、文字化けや不可解な値の場合があるので、チェックをしてみてください。

 ここまでの手順で、Lm_sensors のインストールをして正常に起動ができました。

 余談ですが、今までにわたしは、FreeBSD での温度モニターのソフトを、いくつかテストしていますが、Lm_sensors は比較的まともな数値を表示してくれます。いろいろとソフトをテストしてみると、場合によってはとんでもない温度を表示するケースもありました。Lm_sensors はサーバーの温度指標としてはだいたいの目安になりそうです。

  Lm_sesors のデータベースを知る
Lm_sensors を起動すると、収集した各種のデータは /proc/sys/dev/sensors/ 以下のディレクトリに書き込まれます。
つまり、上記のように sensors コマンドを実行して出力させなくても、以下のファイルを読むことでデータを得られます。


[root@otto root]# ls /proc/sys/dev/sensors/
chips eeprom-i2c-0-50 via686a-isa-6000
[root@otto root]# ls /proc/sys/dev/sensors/eeprom-i2c-0-50/
00 10 20 30 40 50 60 70 80 90 a0 b0 c0 d0 e0 f0
[root@otto root]# ls /proc/sys/dev/sensors/via686a-isa-6000/
alarms fan1 fan2 fan_div in0 in1 in2 in3 in4 temp1 temp2 temp3
[root@otto root]# more /proc/sys/dev/sensors/eeprom-i2c-0-50/00
128 8 4 12 10 2 64 0 1 117 84 0 128 8 0 1



eeprom-i2c-0-50 などのセンサーチップ名のついたディレクトリ内には、 さらに 00 10 20 30 ・ ・ ・ というファイルがあります。これらの各ファイルには sensors が収集したデータが書き込まれるしくみになっています。

実際に、それらのファイルに書き込まれた収集データを見てみましょう。

[root@otto root]# more /proc/sys/dev/sensors/eeprom-i2c-0-50/10
143 4 6 1 1 0 14 160 96 0 0 20 15 20 45 32
[root@otto root]# more /proc/sys/dev/sensors/eeprom-i2c-0-50/20
21 8 21 8 0 0 0 0 0 0 0 0 0 0 0 0
[root@otto root]# more /proc/sys/dev/sensors/eeprom-i2c-0-50/30
0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 176
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/alarms
5121
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/fan1
3000 0
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/fan_div
2 2
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/in0
1.79 2.18 1.38
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/temp1
59.9 49.7 27.6
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/temp2
59.9 49.7 26.0
[root@otto root]# more /proc/sys/dev/sensors/via686a-isa-6000/temp3
59.9 49.7 21.8



【 HotSaNIC と Lm_sensors の連携のしくみ 】

HotSaNIC では、Lm_sensors の作成するデータベースのうちから CPU温度のデータを読み出して RRDTools に渡し、データをグラフ出力させます。
これで Lm_sensors のインストール作業は終了です。

  インストールメモ
 ハードウェアのモニター・ソフトは、FreeBSD でいくつかインストールして使っていました。2001年から VIA-C3 で運用していた自宅サーバーでも、3種類の温度センサー・ソフトを使いましたがとても便利でした。
 Lm_sensors を利用する目的は、ファンレスCPUで運用するサーバーの温度モニターをして状況を把握することにありました。また、さまざまなサーバーやデーモンの負荷状態とCPU温度の関係を知りたいという素朴な希望もありました。
Lm_sensors は、HotSaNIC でのCPU温度のグラフ表示をするために使い始めましたが、HotSaNICでCPU温度以外の指標が同時にグラフで把握できるために期待していた以上に勉強になりました。サーバーの管理技術をマスターしたい方には、HotSaNICでの Lm_sensors の利用をおすすめします。
 自宅WebサーバーのCPU温度管理をしたいという希望から使いはじめた HotSaNIC と Lm_sensors ですが、それにとどまらずさまざまな応用も考えられます。j自宅Webサーバーの発熱対策の実験には、結果を温度グラフをして得られるので便利でした。しかしはっそうを変えて、大発熱CPUの「Pentium4/Atron のCPU冷却ファンの性能テスト」などに利用するともっと便利なツールとして使えるを思いました。
 一般的に、ハードウェアに関するソフトウェア分野では、専門技術ジャンルとなっているので、利用するためには相応の専門知識や技術の下準備が必要でした。しかしLm_sensors は、ハードウェアチップにアクセスして温度データを得るソフトウェアとしては、入門者にとってはわかりやすい説明もあるのでチャレンジしてみてください。

  そのほか(1)

Lm_sensors をOSの起動時に、自動的に 起動させたい場合の方法です。(起動スクリプトの場所は失念しました。)


[root@ernie root]# cp /******** /etc/rc.d/init.d/lm_sensors
[root@ernie root]# chkconfig --level 2345 lm_sensors on



Lm_sensors をデーモンモードで自動起動させるくわしい手順は、Linux のテキスト本を読んでください。
ここでは自動起動のくわしい設定手順は省略します。設定に成功すれば、OSを再起動させると Lm_sensors が自動起動します。
  そのほか(2)
いくつかのマシンで Lm_sensors をテストしているときにあった問題解決です。


マザーボードを交換 ( Asustek P4T-M --> P4T-F ) した場合の処置

マザーボードを交換した場合でも、I/O チップは LM_Sensors からは別のタイプの製品として認識されます。そのために、sensors-detect コマンドで再登録をしなければマザーボード情報を取得できません。
 sensors-detect コマンドを実行して、検出されたマザーボード上のI/Oチップの設定に変更し、HotSaNIC の場合は rrdgraphics をリスタートさせます。

具体例ですがマザーボード Ausustek P4T-MP4T-F に交換しました。この場合、 /etc/rc.d/rc.local の設定で下記の変更が必要です。

# vi /etc/rc.d/rc.local
 ----< 途中を省略 >----
 # I2C adapter driver
 modprobe i2c-isa   ----> modprobe i2c-i801 と変更する
 # I2C chip driver
 modprobe w83781d
 ----< 途中を省略 >----

# /sbin/ldconfig

$HotSaNIC/data-sensors/settings の記述にある設定ファイルも修正する。
モニターしたい事項もセンサーチップによりデータベースが違うのでチェックします。

 #sensors=/proc/sys/dev/sensors/w83781d-i2c-0-2d/temp1・・・・・

変更したら再起動して設定を有効にします。

# reboot
# sensors                   # sensors コマンドで表示できれば成功です。


  謝辞

オープンソースのソフトウェアを利用しています

多くの熱心な研究者、技術者によって開発された優秀なソフトウェアが、自由に利用できることに感謝しています。

Lm_sensors のロゴ
2003/10/05  Written by whzat

もどる もどる