玩式草子─ソフトウェアとたわむれる日々

第24回 猛暑とCPUの発熱対策[その1]

この記事を読むのに必要な時間:およそ 5 分

例年よりもずいぶん早めに梅雨が明け,いよいよ夏本番の時期となりました。原発事故による電力不足とあいまって,今年の夏は例年よりも厳しい暑さになりそうです。

最近の猛暑は人間にとってもこたえますが,十分な空調設備の無い環境で酷使されるPCにとっても厳しい季節の到来です。特に昨秋導入したCore i7機にとっては初の本格的な暑さで,果してどうなることかと思っていたら,さっそく発熱による問題に直面することになりました。

謎の警告音

授業や地区の営農組合やらであわただしかった時期がすぎ,やっとまとまった時間が取れるようになったので,そろそろPlamo Linuxの開発に復帰しようと,久しぶりにGCCのサイトを眺めてみると,GCC-4.6.1と共にGCC-4.5.3がリリースされていることに気づきました。

新しいGCC-4.6.1も面白そうですが,現在,Plamo-5.0用にはGCC-4.5.2を収めているので,パッケージ作りのリハビリを兼ねてGCC-4.5.3をパッケージ化することにしました。

最近のGCCは数値演算用にGMP(Gnu Multiple Precision arithmetric library)MPFR(Multiple-Precision Floating-point computations with correct Rounding)といったライブラリ類を必要とします。ざっと調べてみるとそれらのライブラリも少しずつバージョンアップしていたので,まずそれらのライブラリをパッケージ化し,手元の環境をアップデートした上でGCCのビルドに取りかかりました。

GCC-4.5.3のビルドを始めてしばらくすると,散発的にビープ音が鳴り始めました。始めのうちは短かい「ピッ」⁠ピッ」という音で,何かコンパイルエラーでも起きたのかな,と思って画面を確認したものの,コンパイル作業は特に問題なく続いています。

「あれれ,どうしたのだろう?」と思っているうちに,ビープ音の鳴る間隔がしだいに短くなり,ついには「ビー」という音が鳴りっぱなしになってしまいました。さすがにこれはマズい,と思ってCtrl-Cを連打しビルド作業を止めるとビープ音もすぐ収まりました。

何が起きたのだろう?と恐る恐るいくつかコマンドを打ちこんでみても,特に動作に支障はありません。dmesgでカーネルのログを見たり/var/log/以下に保存されている各種ログファイルを調べても,特にエラーメッセージ等は記録されていません。念のためリブートもしてみましたが,何の問題も無かったように立ちあがります。

さて,あのビープ音は何だったんだろう……,としばらく考えていたところ,BIOSの設定でCPUの温度を監視していたことを思い出しました。

今使っているGIGABYTEのマザーボードには"PC-Health"という機能があり,CPUの温度を監視して,あらかじめ設定しておいた温度に達すると警告音を鳴らしてくれます。BIOS画面で改めて確認すると80℃で警告音を鳴らすような設定になっていました。

図1 BIOSのPC-Healthの設定画面

図1 BIOSのPC-Healthの設定画面

どうやらあのビープ音はCPUの温度が上がりすぎたことへの警告音だったようですが,はたしてどの程度CPUの温度が上がっていたのでしょう? また,それは一時的な問題だったのか,これからも継続する問題なのでしょうか? まずは状況を確認してみようと,高負荷時にCPUの温度がどれくらい上がるのかを調べてみることにしました。

最近のマザーボードやCPUには温度監視用のセンサが組み込まれており,Linuxではそれらを利用するためにlm-sensorsというソフトウェアが開発されています。まずはこのソフトウェアを使ってPC内部の温度を調べてみることにしました。

lm-sensorsのインストール

lm-sensors(Linux Monitoring sensors)はCPUやPCのマザーボードに設置された各種センサから,さまざまなデータを採取するためのソフトウェアです。

もっとも,CPUやマザーボード上のセンサにアクセスするにはカーネルレベルの権限が必要となるため,センサを実際に操作するドライバ類はカーネルのソースコードに組み込まれており,ユーザ領域で動作するlm-sensorsはそれらカーネルドライバとやりとりするためのユーザ領域用のソフトウェアになっています。

CPUやマザーボードに組み込まれているセンサには明確な規格が無いようで,さまざまなメーカがいろいろな特徴を持つセンサを開発しており,マザーボードメーカもそれらの中から都合のいいものを選んでいるようで,同じマザーボードメーカでも使っているセンサ用チップはマザーボードごとに異なっていたりします。そのような状況に対応するために,最近のカーネルには多数のセンサ用ドライバが用意されており,linux-2.6.38には80を越えるモジュールドライバが含まれていました。

% ls /lib/modules/2.6.38.4-plamo64/kernel/drivers/hwmon/
abituguru.ko   adm9240.ko       dme1737.ko   hwmon-vid.ko  lm75.ko  lm95241.ko  sis5595.ko     w83627ehf.ko
abituguru3.ko  ads7828.ko       ds1621.ko    hwmon.ko      lm77.ko  ltc4215.ko  smsc47b397.ko  w83627hf.ko
ad7414.ko      adt7462.ko       f71805f.ko   i5k_amb.ko    lm78.ko  ltc4245.ko  smsc47m1.ko    w83781d.ko
ad7418.ko      adt7470.ko       f71882fg.ko  ibmaem.ko     lm80.ko  max1111.ko  smsc47m192.ko  w83791d.ko
... 
adm1031.ko     coretemp.ko      hp_accel.ko  lm70.ko       lm93.ko  sht15.ko    vt8231.ko

最近のLinuxでは,PCIやUSBといった高機能なバスに接続されるハードウェアは,バス上に流れる識別情報をもとにudevsysfsを使って自動認識し,それらを操作するのに必要なドライバはたいてい自動的に組み込まれるようになっています。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html

コメント

コメントの記入