の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ その2
|
|
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。 切替温度の設定は今後しばらく温度グラフなどの様子をみて微調整することにします。
|
|
|