2. 様々なアプローチ

以下の各節では、同じ目的、つまり Athlon/Athlon-XP ベースのシステムでのパワーセーブを達成するための様々な手法を解説しています。 この中で今のところお勧めの方法は、"コマンドラインハック" を用いる方法と、athcool プログラムです。カーネルパッチは既に古くなっていて開発も止まっており、 LVCool は一種類のチップセットファミリしかサポートしていません。

これらの各方法はほぼ全て、チップセットのノースブリッジの "STPGNT 検出時ディスコネクトを有効にする制御ビット" を立てるものです。 以上でも以下でもありません。他の必要な処理は、acpi-c2 アイドルモードに入った時にプロセッサに STPGNT 信号を送るカーネルの ACPI サブシステム内で行っています。

カーネルに ACPI サポートが組み込み済みでは無い場合には、カーネルの設定をやり直して新しいカーネルを作り直す必要があります。 ACPI 関連のオプションは、General Setup+Power Management Setup->ACPI 以下です。 少なくとも、ACPI Bus ManagerSystemProcessor の各オプションは有効にする必要があります。

または新しい 2.4.22 カーネルでは、General Setup+ACPI Support 以下です。少なくとも Processor 以下のオプションは有効にしておく必要があります。

2.6.x カーネル: Powermanagment options+ACPI です。 少なくとも、Processor 以下のオプションを有効にする必要があります。 Thermal Zone は有効にすべきではありません

一部のチップセットでは、HLT 信号検出時に STPGNT とする機能をサポートしています。これらのマザーボード/チップセットでは ACPI 機能を有効にする必要がありません。現在、ACPI なしで動くチップセットと ACPI が必要なチップセットの情報を募集しています。 あなたのマザーボードで試した結果をメールしてください (Section 3.1 参照)。

2.1. コマンドラインハック (お薦め)

コマンドラインハックを使うには、通常はカーネルで ACPI サポートが有効になっている必要があります。 不要な場合には、その旨記載されています。 パワーセーブ機能を有効にするのにリブートは不要です。 パワーセーブ機能は以下のコマンドで On/Off 可能です。

KT133/133A, KX133, KL/KLE133, KM/KN133 の各チップセット (明らかに ACPI が有効である必要あり)

有効化 - setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) | 0x80)))

無効化 - setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) & 0x7f)))

KT266/266A/333,KM266/266A/333 の各チップセット

有効化 -

setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) | 0x80)))

setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) | 0x02)))

無効化 -

setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) & 0x7f)))

setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) & 0xfd)))

KT333CF/KT400/KT400A/KM400/KM400A/KT600 の場合

有効化 -

setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) | 0x80)))

setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) | 0x02)))

無効化 -

setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) & 0x7f)))

setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) & 0xfd)))

KT880 の場合

有効化 -

setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) | 0x80)))

setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) | 0x02)))

無効化 -

setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) & 0x7f)))

setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) & 0xfd)))

SIS730/733 の場合 (試験的。動作した場合、レポートください)

有効化 - setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) | 0x01)))

無効化 - setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) & 0xfe)))

SIS735/740/745/755 の場合

有効化 - setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) | 0x0003)))

無効化 - setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffc)))

SIS741/741GX/746/748 の場合

有効化 -

setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) | 0x0003)))

無効化 -

setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) & 0xfffc)))

Nforce の場合

有効化 -

setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) | 0x06)))

無効化 -

setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9)))

Nforce 2 の場合 (ACPI なしで動作します)

有効化 - setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) | 0x10)))

無効化 - setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) & 0xef)))

AMD751 および AMD760/761 (760MP では使えません。ACPI なしで動作します)

有効化 - setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) | 0x06)))

無効化 - setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) & 0xf9)))

2.2. coolrun シェルスクリプト (お薦め)

coolrun は小さなシェルスクリプトで、上記のコマンドラインハックを使って必要なことを全部やってのけます。 これは、この HOWTO に基づき作成されたもので、Grozdan Nikolov さんにより、開発・保守されています。

以下に詳しい情報 (とダウンロード先) があります https://sourceforge.net/projects/coolrun/

2.3. Athcool プログラム (お薦め)

Athcool は上の setpci コマンドと同じ処理を行う小さなプログラムです。 これは、上記と同じチップセットをサポートしており、あなたの持っているチップセットを自動認識してパワーセーブが動作するよう正しい設定を行います。

詳しくは (そしてダウンロードは) http://members.jcom.home.ne.jp/jacobi/linux/softwares.html から行えます。 このプログラムを作ったのは私ではありません!

2.4. BIOS アップデート

新しいマザーボードの一部では、メーカがボード上のチップセットの必要なビットをセットする (または、有効にするかどうかを BIOS 設定から選択できるようにする) 機能を提供しています。マザーボードのベンダのホームページを見て、そのような BIOS アップデートがあるかどうかを確認してみてください。

2.5. カーネルパッチ

このパッチは Newsnet で見つけた別のパッチ (Jan Niehusmann さん作の物) を元にしています。また、このパッチが KT266/266A チップセットで動作するよう変更しています。 どちらにせよ、私のパッチはコマンドラインハックと同じことを、カーネルから行っているだけです。 このため、使い方が本当に簡単で、カーネルを変更する必要もないコマンドラインハックの方がお勧めです。

手順を追って進めます。以下がパッチの当て方です。

  1. まず以下のパッチをダウンロードします。

    2.4.17 むけカーネルパッチ

    2.4.21 むけカーネルパッチ (2.4.21 にポートした Thomas Reinhardt さんに感謝)

    カーネル 2.6.5 向けパッチ。このパッチは、KT600 までの VIA 社のチップセットをサポートしています (2.6.5 にポートして、他のチップセットに対するサポートを追加した Sebastian Droege さんに感謝)。

    カーネル 2.6.9 向けパッチ これは KT600 までの Via チップセットをサポートしています (2.6.5 から 2.6.9 への移植を行った Alexander Hug さんに感謝)。

  2. root でログインします。

  3. cd /usr/src

  4. 以下のコマンドでパッチを当てます - (新しい 2.6.5 のパッチは、linux ディレクトリに cd して、patch -p1 とする)

    cat $path-to-patch/amd_cool.diff | patch -p0

  5. cd linux

  6. 新しいカーネルを作ります。

  7. そしてリブートします。そしてカーネルのブートプロンプトのところで、 amd_disconnect=yes の一行を入力してください。 これは、Athlon プロセッサには既知のバグがあり、いくつかのボードでは問題が発生するためです。 このため、このパッチはまず動くことをテストする必要があります。 動くようなら、/etc/lilo.conf ファイルに amd_disconnect=yes の行を加えることができます。

2.6. LVCool を使った方法

LVCool は Windows 向けの小さなプログラム VCool の移植です。これは KT133/133A と KX133 チップセットしかサポートしていませんし、私もこれ以上のサポートはできません。 http://vcool.occludo.net/VC_Linux.html からダウンロード可能です。 これは Linux カーネルの ACPI 機能を必要としません。

2.7. FVCool プログラム

http://www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html に、いくつかのチップセットをサポートした別のパワーセーブプログラムがあります。 私自身は試していませんが、動作すると聞いています。試してみてください。 また、これには一部のマザーボードのボード上のモニタ機能を使うためのプログラム (lm-sensors に似た) が同封されています。

2.8. AMD 760MP パワーセーブ

760MP マルチプロセッサチップセットでパワーセーブを有効化するカーネルモジュールがあります。 http://www.muru.com/linux/amd-smp-idle/ から入手できます。 これがどの程度動作するものなのかはよく分かりませんが、少なくとも動作したというメールを一通受け取っています。 試してみてください。