試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

w83627ehf系チップ搭載マザーボードでCPUファンの回転数を制御する(Linux 2.6.35時点・前半)

以前使用していた「K9NU Neo-V(マザーボード)/Athlon64 3500+ TDP35W版(CPU)」の組み合わせでは、BIOSで設定可能なCPUファン回転数自動調整機能を設定することでCPU低温時にセンサ読みで600-700RPM(回転/分)というレベルのCPUファンの回転数に抑えて(低温時の)騒音を大幅に減らすことができていたが、その後の「A785GMH/128M(マザーボード)/Athlon II X3 445(CPU)」の組み合わせでは、残念なことにBIOSの機能の設定をしても低温時の回転数はセンサ読みで1600-1700RPM程度となり、ある程度の大きさのファン動作音が出てしまっている。CPUクーラーはいずれもそれぞれのCPUの箱に付属するもの(リテールクーラー)。
しかし、マザーボードのA785GMH/128Mに搭載されているW83627DHG-Pを含むw83627ehf系のチップ向けのGNU/Linuxのhwmonドライバ(モジュール名w83627ehf)ではその中のファン回転数制御機能が利用可能で、そのパラメータ指定をいじることにより、低温時のファン回転数と騒音を更に抑えることに成功した(音の変化は小さいかもしれないが、夜中で静かなときには違いが分かる)。ただ、使用するケース(手元のケースはダクトがあるので音が漏れやすい)や中のパーツ構成,ケースファンの設置状況,電源ユニットなどによっては静音化の効果の程度は変わる可能性がある。

準備

hwmonモジュール+lm_sensorsとhddtempで温度を取得」の要領でlm_sensorsの設定(センサ検出/モジュール読み込みの設定)を行い、センサからの情報が取得できるようにしておく。

ファン回転数制御の方式

/sys/devices/platform/w83627ehf.[値]/以下の特定のファイルに管理者権限で(echoコマンドなどで)値を書き込むことにより動作を変更する。
ファイル名が「pwm[数字]」で始まっているものがファン回転数制御に関係するもので、その中でpwm[数字]がファン回転数の指定値となり、0-255の256段階をとる。
PWMという言葉は「Pulse Width Modulation」の略でパルス幅変調を意味し、この場合はファンの電圧を制御するための方式となり、ファンの電圧を変化させて回転数を制御することになる。
ファイルpwm[数字]_modeの内容が「1」のときにPWMによる制御が行われる。
手元の環境では「pwm2」で始まる名前の項目がCPUファンのものであるということが分かった(1と3は後述の制御モードが手動指定の値になっており、自動制御に関係する項目もない)。pwm2_modeの値は既に「1」が設定されていたのでいじることはなかった。

ファン回転数の制御モード

制御には手動のモードと自動のモードとがあり、自動の場合は「Thermal Cruise」モードで動かすと温度に基づいて回転数が自動的に変化するのでこれを用いる。
モード指定はpwm[数字]_enableの値の書き込みによって行い、これが「2」のときが「Thermal Cruise」モードによる制御となる。手元の環境ではCPUファンの項目については既に「2」が設定されていたのでいじることはなかったが、これを手動にする場合は

  1. pwm[数字]_enableに「1」を書き込む
  2. pwm[数字]にファン回転数のパラメータとして0-255の範囲の値を書き込む

とする。

Thermal Cruiseモードにおける低温時のファン回転数の指定

「Thermal Cruise」モードで動作しているときの低温時のファン回転数が/sys/devices/platform/w83627ehf.[値]/pwm[数字]_stop_outputに入っており、ここに新しい値を管理者権限で書き込むことで変更することもできる。値は0-255の256段階だが、「0」を入れても「1」になる?

Thermal Cruiseモードで回転数を上げるCPU温度

BIOS設定で「この温度を上回るとファン回転数を上げる/下回るとファン回転数を抑える」という境目のCPU温度が指定できるが、これはLinux上では/sys/devices/platform/w83627ehf.[値]/pwm[数字]_targetに入っており、管理者権限で値を書き込むとこの温度を変更することもできる。この値は摂氏温度を1000倍したものとなり、摂氏50度であれば「50000」という値となる。

(「w83627ehf系チップ搭載マザーボードでCPUファンの回転数を制御する(Linux 2.6.35時点・後半)」に続く)

関連記事:

使用したバージョン: