manekineko倉金家ホームページ

趣味の部屋/サーバー構築メモ その2

CPU速度の設定

2010年6月18日(金) 2010年11月8日(月)更新
省電力とハードの負担軽減のため、CPU速度を低めに固定する設定を行います。
さらにCPU温度に応じてCPU速度を自動的に切り替えるようにしてみました。

今度のコンピュータはCPUは動作周波数3.6GHzとなっていますが、他に3.2GHzと2.8GHzのモードを持っています。

自動的にインストールされ起動されているcpuspeedにより、通常は2.8GHzで動作してしていますが、負荷が増えると自動的に動作周波数があがります。このとき自動的にファンの回転数も上がるようで、いきなりファンがぶわーっと大きな音を出し始めます。

これがどうも心臓によくない。さらにはCPU速度を上げると電力も食うしCPUの温度も上がる。
冷房なんかされていない、夏の昼間はあつあつになる部屋で稼動していますので壊れないとも限りません。そもそも前のマシン(700MHz)に比べれば最低のスピードでも4倍ですので充分といえば充分です。
で、CPU周波数は最低の2.8GHzに固定することにします。

/etc/sysconfig/cpuspeedをテキストエディタで開き、
MAX_SPEED=
を
MAX_SPEED=2800000
とこれだけ変更して保存。あとは再起動。

少なくとも夏の間はこのままで行こう。

CPU速度の制御(追記-2010.11.08)
そろそろ涼しくなったのでCPU速度を上げてもいいかな。
でも季節ごとに手動でやるのも芸がないな。
...というわけで、CPU温度で自動的に制御するようにしてみました。

/etc/sysconfig/cpuspeed を3つコピー。
cpuspeed-MAX, cpuspeed-MID, cpuspeed-MIN として各々MAX_SPEED,MIN_SPEEDを設定。
/etc/sysconfig/cpuspeed-MAX
MAX_SPEED=3600000
MIN_SPEED=2800000

/etc/sysconfig/cpuspeed-MID
MAX_SPEED=3200000
MIN_SPEED=2800000

/etc/sysconfig/cpuspeed-MIN
MAX_SPEED=2800000
MIN_SPEED=2800000

ディフォルトは無指定になっていますが、明示的に値をセットしないと変更されないようだ。
あとはCPU温度を取り出すのですが、BIOSがACPI対応ではないためか、/proc/acpi/thermal_zoneには何もありません。
sensorsよりCPU内部温度(RD1 Temp)を取得することにします。
温度に応じて上記設定ファイルのいずれかでcpuspeedを書き換え、設定を更新するスクリプトを書いて/etc/cron.hourlyに置いておきます。
/etc/cron.hourly/cpuspeedset.sh
#!/bin/bash

LOG="/var/log/cpuspeedset.log"
SENSORS=`sensors`
TEMP=`echo "$SENSORS" | grep "RD1 Temp:" | sed "s/RD1 Temp:[[:space:]]*[+-]*//" | sed "s/[^0-9]*C.*//"`
STEP="MIN"
FREQ="2.8GHz"
if [[ $TEMP -le 40 ]]; then
  STEP="MAX"
  FREQ="3.6GHz"
elif [[ $TEMP -le 50 ]]; then
  STEP="MID"
  FREQ="3.2GHz"
fi

SETTINGFILE="/etc/sysconfig/cpuspeed"
NEWSETTING="$SETTINGFILE-$STEP"
DIFF=`diff $SETTINGFILE $NEWSETTING`
if [[ "$DIFF" ]]; then
  cp -f "$NEWSETTING" "$SETTINGFILE"
  echo "[`date '+%F %T'`] CPU Temp is $TEMP°C. Change Max CPU Speed to $STEP($FREQ)" >>$LOG
  service cpuspeed restart >/dev/null
fi
exit $?

つたないスクリプトで恐縮でございます。
スラッシュとバックスラッシュがわかりにくいですが、'+%F %T'のところはスラッシュ、あとはバックスラッシュ。
CPU速度の設定が変わるたびにログに記録されます。
[2010-11-08 04:01:01] CPU Temp is 40°C. Changed MAX CPU Speed to MAX(3.6GHz)
[2010-11-08 06:01:02] CPU Temp is 41°C. Changed MAX CPU Speed to MID(3.2GHz)

という具合。
あとlogrotateをセットしてOK。
切替温度の設定は今後しばらく温度グラフなどの様子をみて微調整することにします。