Home » FreeBSD » FreeBSD ACPI Thermal Check Tool (Tag: , )

最近 Drive Network では 共有サーバ ビジネスセレクト に使用する機器を変更しました。(Drive Network Rack Gallery 2012 (Part 4))

ハードディスクに SAS 2.5″ 300GB を 4 本積み、かつ高い利用率のためなのか、ディスクの速度は低下していませんが筺体内の熱がやや高めな状況が続いています。

現在利用している機器は _TC1, _TC2, _TSP が -1 で、hw.acpi.thermal.tz0.passive_cooling を 0 -> 1 に変更しても Operation not supported by device と無視されます。原因の調査や調整には少々時間がかかると判断しました。

一定の温度 (_CRT) を超えると OS 自体が自律停止します。その兆候を事前に検知するためのツールです。

高温を呼び起こすケースは、お客様のデータ領域におけるプログラムの暴走や過度な brute force attack が大半のため、安定運用のための検知としても役立ちます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/perl -w
#
# atcheck.pl (ACPI Thermal Check Tool)
#
 
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// use Module
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
use strict;
 
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Controller
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
    #// ----------------------------------------------------------
    #// Option Parse
    #// ----------------------------------------------------------
 
    my @basename = split(/\//, $0);
    my $basename = pop(@basename);
 
    #// ----------------------------------------------------------
    #// Item Set
    #// ----------------------------------------------------------
 
    my $item = {
        mkdir    => '/bin/mkdir',
        cat      => '/bin/cat',
        chmod    => '/bin/chmod',
        ps       => '/bin/ps',
        hostname => '/bin/hostname',
        mail     => '/usr/bin/mail',
        awk      => '/usr/bin/awk',
        grep     => '/usr/bin/grep',
        chown    => '/usr/sbin/chown',
 
        touch    => '/usr/bin/touch',
        sysctl   => '/sbin/sysctl',
 
        dir      => '/home/tools/atcheck/',
        check0   => 'hw.acpi.thermal.tz0.temperature',
        check1   => 'hw.acpi.thermal.tz0._CRT',
        maddr    => 'trouble@example.jp',
        limit_tz => 75.0,
 
        base     => $basename,
        file     => '/tmp/.' . $basename
    };
 
    if ( !-d $item->{dir} ) {
        `$item->{mkdir} $item->{dir}`;
        `$item->{chmod} 750 $item->{dir}`;
    }
 
    #// ----------------------------------------------------------
    #// Start
    #// ----------------------------------------------------------
 
    #// List
 
    $item = mklog($item);
    if ( !-e $item->{log} ) { `$item->{touch} $item->{log}`; }
 
    my ($temp, $upper) = check_at($item);
 
    if ($temp >= $item->{limit_tz}) {
        my $msg = "temperature $temp" .'C / ' . $upper . 'C (' .
                  sprintf("%.1f", $item->{limit_tz}) . "C)\n";
 
        report($item, $msg);
    }
 
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#// Model
#// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
sub utime2date {
    my ($sec, $min, $hours, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($_[0]);
 
    my $years    = $year + 1900;
    my $this_mon = sprintf("%02d",$mon + 1);
 
    $mday  = sprintf("%02d", "$mday");
    $hours = sprintf("%02d", "$hours");
    $min   = sprintf("%02d", "$min");
    $sec   = sprintf("%02d", "$sec");
 
    my $date = "$years/$this_mon/$mday $hours:$min:$sec";
 
    return $date;
}
 
sub mklog {
    my ($item) = @_;
 
    my $time  = utime2date(time());
    my $time0 = substr(utime2date(time()), 0, 10);
    my $file  = $time0; $file =~ s/\///g;
 
    $item->{log}  = $item->{dir} . $file;
    $item->{time} = $time;
 
    return $item;
}
 
sub check_at {
    my ($item) = @_;
 
    my @line = `$item->{sysctl} $item->{check0} $item->{check1}`;
 
    my $check0 = _check_at($item, 'check0', $line[0]);
    my $check1 = _check_at($item, 'check1', $line[1]);
 
    my $msg = "$check0\t$check1";
 
    open  LIST, ">>$item->{log}";
    print LIST $item->{time} . "\t$msg\n";
    close LIST;
 
    print $msg . "\n";
 
    return ($check0, $check1);
}
 
sub _check_at {
    my ($item, $target, $check) = @_;
 
    chomp $check;
 
    $check =~ s/$item->{$target}: //;
    $check =~ s/C$//;
 
    return $check;
}
 
sub report {
    my ($item, $msg) = @_;
 
    my $host = `$item->{hostname}`; chomp $host;
    my $time = utime2date(time());
 
    my $file = $item->{file};
    my $subj = "Info: acpi tz ($host)";
 
    my $body = <<"BODY";
$time => $msg
BODY
 
    open  FILE, "+>$file";
    print FILE $body;
    close FILE;
 
    `$item->{mail} -s "$subj" $item->{maddr} < $file`;
 
    unlink($file);
}

Random Select

エクストラコールド
今年も エクストラコールド BAR が例年通りの場所で開催されていました。普段銀座に立ち寄る場所のすぐそばでもあります。この頃は平日は 17:00 からの開店と、外観も含めて例年通りでしたがふと気が付
ミニストップ メニュー
数日前にオフィスからやや離れたミニストップの店頭に ベルギーチョコフェア のポスターが貼られていることに気が付きました。またあの ミニストップ (ベルギーチョコソフト) が帰って来る季節なのかと思いつ
ロマンスロード (3)
久高島 (No. 2 – カベール岬) の続きです。カベール岬から南下すると、小さな看板が見えて来ました。"ロマンスロード" の下に書いてある Romansu Road
Beagle Ope 09
Drive Network では現在 1/4U の Quad Beagle シリーズは取り扱いしていませんが、社内向けに 20 台程提供していて、今回さらに追加しました。諸事情からディスクなしで納品し
VGP-WAR100 (6)
VAIO Fit 13A + VGP-WAR100 (Part 1) の続きです。デバイス側の準備が完了した時点で、付属の取扱説明書に書かれている http://192.168.11.1/ にアクセス
オードブル & サラダ
以前在籍していたスタッフとランチに繰り出す機会があり、いくつか見繕ってもらったお店のうち、ヌーベルダイニング グリーン を訪れてみました。ランチはハーフバイキングで、サラダ・スープ・ドリンクは食べ放題
枝豆, 黄金チキン, フレンチフライ
セブンイレブン (おつまみセット) を投稿した 1 年半前は、セブンイレブンの枝豆が他のコンビニと比べてダントツと感じていましたが、ある時から食感が変わりました。やや固くて塩もあまり馴染んでいない感じ
jQuery Logo
Drive Network のホームページ では、CSS のみで何とか対応しましたが、まだ意図する 100% の動作ではありません。(そもそも入れ子が複雑)とあるサービス向けにまた同様の動作を実現させ
カフェくるくま (3)
沖縄出張も先日の出張 (05/27 – 06/09) で 16 回目でした。大抵 2 週間の滞在型で出張するので、土・日を 1 回は含みます。その度いろいろと連れて行ってもらうことも多いの
お昼のカツカレー
マクドナルド 懐かしのメニュー (マックチャオ) の続きです。価格は単品で 650 円発売時期は 1992 年 5 月頃他にビーフカレー / チキンカレーキッチンに洗米機と炊飯器が登場もう吉野家か松屋
Valid HTML5 Valid CSS3 Another HTML Lint