MAGiC TOUCH - Watchdog timer and IPMITool
*GAME(GBA/PSP/DirectX/XNA) Developments
[Index / Back]


MAGiCTOUCH GAME Development ShortCut

Homebrew Software
'Super Star Shooter' は コチラ

激安 7階建て
HDD外付けケースの作成
は コチラ
(広告じゃないですよ。このサイトのコンテンツです。)


 HP ML115 G1 には IPMI (Intelligent Platform Management Interface) という便利なインターフェイスが内蔵されています。せっかくなので使ってみましょう。 なお、検証はmicrosoft Windows XP professional SP3 を対象としています。 またこの情報は 2008-6-1現在の情報です。このページにあるプログラム・情報等は無保証ですので自己責任( at your own risk )でご利用ください。





 まずは、OS から IPMI を利用できるように以下の2つのソフトをダウンロードしてください。

Windows 2000/Windows 2003 IPMI ドライバ for HP ProLiant DL140
IPMItool 1.8.8 for Microsoft Windows 2003 with Sun IPMI System Management Driver Support

 ゆとり お断りということでインストール方法は書きませんが、たぶん何の問題も無くインストールできると思います。IPMIドライバはHP DL140用になっていますが、ML115でも利用可能です。インストーラ形式ですので指示通りインストールしてください。

 IPMItoolは、SUNのサイトで会員登録(無料)をしないとダウンロードできません。 ダウンロード後、適当なところに解凍してください(以下の説明では、c:\Program Files\ 以下へ解凍したと仮定して説明します)。

 それでは操作してみましょう。コマンドプロンプトを起動して
 > ipmitool.exe sdr と、打ってみます

 ドライバが正しく動作している場合、このようにIPMIの情報を表示します。(ちなみに、RCPU Diode1というのがCPU温度)




 以下のような画面になった場合、ドライバが正しく動作していないので注意してください。


 さて、ipmitoolが動くことを確認したところでIPMI機能の一つ、watchdog timer機能を利用してみようと思います。

 watchdog timer とは、「番犬(タイマー)」のこと。何の「番」をしているかというと、マシンがきちんと動作しているかの「番」をしています。もしもOSが反応をしなくなった場合、自動的にマシンリセットをかけてくれるというすばらしい機能です。とはいえデフォルトではこの番犬君ぐっすりと寝ていますので、それを叩き起こして活用しようというのが今回の趣向です。 さきほどの ipmitool sdr を実行したときに Watchdog | Not Readable と表示されますが、ちゃんと使えますので(てっきり使えないと思っていたのですが)。

 watchdog timerの動作に関しては、こちらの方が詳しいので興味ある方はご確認ください。さて、どうやってwatchdogを起こすかというと、先ほどインストールしたドライバとipmitoolを利用します。ipmitoolの使い方に関しては、こちらを参考にさせていただきました。またipmitoolの日本語解説はこちらにあります(ありがたく活用させていただきましょう)。ipmiに与えるデータの詳細は[v2.0 Specifications]のpdfを参考にしてください。

<プログラムについて>
 はじめはperlで書いたのですが、たいしたことをやってもいないのにそこまで敷居を高くする必要もないかと思い、他の方法を探りにネットをさまよっていたところ、WSH(Windows Script Host)というのを発見したので利用してみました。windowsに標準でこんな機能があったなんて今回はじめて知りました。今までは簡単なプログラムはbatやperl使っていたもので。そんなわけで、初wsh program なので果たしてコレでコードの書き方が正しいのか・・・。

 内容的には、ipmitoolを利用して、watchdog timerに与える基準値をセット。あとは一定時間ごとにtimerをリセットする。といった感じになっています。このタイマーのリセットが行われない(= OSが停止)になると、BIOSレベルでマシンを再起動します(IPMIToolに与えるパラメータによっては、リセットではなくpower offなども可能です)。実行する前に、実行する環境に合わせて監視したい時間値を設定してください(デフォルト10分)。ちなみにML115のBIOS設定でwatchdog timerをdisabledにしておいても、プログラム動作の方が優先されます。


' ----------------------------------------------
'  Watchdog Timer(require ipmitool)
'             (C)2008 MAGiCTOUCH,IchirohSatoh.
'
'   ipmiのwatchdog timerをセットして起動。
'   自動的にtimerのカウントダウンが行われるので、
'   0になる前に、リセットをする
'   (timerが 0になると マシンリセットが掛かる)
'
'  rel.01 JUN1,2008 version 1.00
'  rel.02 JUN2,2008 version 1.01
' ----------------------------------------------

Set shell = WScript.CreateObject("WScript.Shell")

Dim timer                                       ' set a watch time
Dim watchdogtimer                               ' watchdog timer
Dim sleeptimer                                  ' sleep(wait) timer
Dim msb,lsb                                     ' timer work
Dim param                                       ' ipmitool.exe option
Dim ipmitool                                    ' exe name
Dim result

'-- set your environment                        ' 環境に合わせて変更してください
ipmitool = "ipmitool.exe"                       ' IPMITOOL
timer = 10 * 60                     ' 10min.    ' watch timer (sec.) [max 6553sec.]

'-- timer calc                                  ' リセットタイマーの時間等の計算
sleeptimer = timer * 1000 \ 2                   ' sleep timer (msec)
watchdogtimer = (timer * 10) and &HFFFF         ' watchdogtimer
lsb = watchdogtimer mod 256                     ' Least Significant Bit (lower)
msb = watchdogtimer \ 256                       ' Most Significant Bit  (higher)

'-- application log                             ' 必要ない人はコメントアウト
shell.LogEvent 4, "Watchdog Timerを開始しました。"

'-- set watchdog timer parameter                ' timer 設定
param = " raw 0x06 0x24 0x44 0x03 0x00 0x10 0x" + Hex(lsb) + " 0x" + Hex(msb)
shell.Run ipmitool + param, 0, true

'-- I watch a watchdog timer.                   ' ひたすら監視
param = " raw 0x06 0x22"                        ' reset watchdog timer param
do while True
    shell.Run ipmitool + param, 0, true         ' reset watchdog timer
    WScript.Sleep( sleeptimer )                 ' sleep for next watchdog timer reset
loop

WScript.quit

<使い方>

  watchdogtimer.zip
   ├ wdt.vbs
   ├ stop.bat
   ├ watch.bat
   └ documents

 Downloadしたzipファイルの中身を ipmitool.exeのあるフォルダに解凍してください。wdt.vbsが実行ファイル本体です。
 watch.bat を実行すると、現在のipmi(watchdogtimer)の値を2secごとに表示をします。
 stop.bat はwatchdogtimer を停止させます。このときすでに wdt.vbs が動作していた場合、watchdogtimer 自体は停止しますが、wdt.vbs本体は動作し続けます。その場合にはタスクマネージャ等で wscript.exe を kill してください。たぶんまじめにプログラムを書けば停止させられるとは思うのですが、そのあたりは利用者にお任せします。

 利用方法としては、スタートアップフォルダに wdt.vbs のリンクを入れておくのが楽かと。sexeを使ってサービスへ登録をしようとしたのですが、ウチの環境ではうまく動きませんでした。

 watchdog timerのreset手法が簡易(watchdogtimerの1/2の時間)なので、正確性を重視するのならば短時間(30秒毎くらい?)の頻度でresetをしてあげたほうがよいと思います。IPMItoolの負荷もありますのでほどほどに。
 個人的には、どなたかもう少し使いやすいツール類を作っていただけると うれしいです。


<IPMITOOL Tips>

 BMCの内部時間あわせ (現在時刻を入力してください)
 > ipmitool.exe sel time "06/24/2008 15:00:00"

 BMC内のデータ表示
 > ipmitool.exe sel list
 表示される日時がずれている場合、上記 sel timeであらかじめ時間を合わせておいてください。

p.s.
 検証は hp ML115,BIOS(07/12/12),CPU Athlon X2 4850e, Memory 2GBytes, HDD 6TBytes, WindowsXP pro SP3 という構成のマシンで行っております。
 通常利用では便利なwatchdog timerですが、たとえば HDDでエラー → OSフリーズ → watchdogtimerでマシンリセット → OS起動時のHDDチェックに引っかかる → 勝手に修復 → HDDさようなら。 と、言ったこともありえますので、そのあたりも含めて判る人だけ使ってくださいね。



[参考サイト]

ipmi_watchdogのipmitoolに よる操作方法
 Linuxでのipmi利用方法

ハードウェア・ウォッチドッグ・タイマー iTCO_wdt のススメ
 ここを読むと intel chipマザーボードの場合、watchdogが使えるらしいんですが、windows上から扱うにはからどうやればいいんだろうか?

Intelligent Platform Management Interface (intel)
 Intelの IPMIのページ

Software/IPMITool
 IPMIToolのwiki page

©Copyright MAGiC TOUCH All rights reserved.