Hier soll auf eine Methode zum Strom sparen mit AMD-CPUs und zur Temperatursenkung um bis zu 20°C eingegangen werden.
Es soll darauf hingewiesen werden, dass das Ganze sehr stark vom der Hardware und BIOS abhängt, d.h. z.B., dass auf einem bestimmten EPOX-Board mit dem setpci-Kommando das System zum sofortigen Stillstand gebracht wird. Daher ist natürlich die Benutzung auf eigene Gefahr!
Vielen Dank an Daniel Nofftz (Verfasser der Original-HowTo) und Osamu Kayasono (dem Autor von athcool).
Für weitere Informationen siehe Links:
Links:
http://www.zdnet.de/techexpert/artikel/tuning/200207/cool_00-wc.html
http://www.amd.com/products/cpg/athlon/techdocs/pdf/23614.pdf
http://members.jcom.home.ne.jp/jacobi/linux/files/athcool-0.3.7.tar.gz (unterstützt viele Chipsätze)
Hintergrund
Das HLT Signal welches vom normalen Idle-loop durch den Linux Kernel benutzt wird, bringt leider alleine keine große Energieeinsparung bei Athlon und Duron Prozessoren. Um eine wirkliche Energieeinsparung zu erlangen, muss man den Prozessor in den STPGNT (Stop Grant) Zustand versetzen. In diesem Modus wird der Prozessor vom FSB getrennt und der Energieverbrauch kann signifikant gesenkt werden.
Mini-Howto
Um AMD-Prozessoren in den wirklichen Idle-Zustand zu setzen, muss ACPI im Kernel aktiviert sein. Unter "General Setup" -> "Power Management Setup" -> "ACPI" müssen mindestens diese drei Punkte aktiviert sein:
- [x] ACPI Bus Manager
- [x] System
- [x] Processor
Nach dem Kernel-Übersetzen müssen natürlich die Module geladen werden. Danach setzt man für verschiedene Chipsätze spezielle Bits mit folgendem Befehl: setpci -v -H1 -s 0:0.0 x=y
Zur Erklärung:
mit -H1 wird setpci angewiesen, den direkten Hardware-Zugriff nach dem "Intel-Konfigurations-Mechanismus" zu benutzen (nur für i386)
mit -s 0:0.0 wird der Bus (0:) der Slot (.0) und die Funktion (.0) angegeben - näheres siehe setpci(8).
mit x=y wird der Wert (y) ins Register (x) eingetragen.
Es gibt zwar auch die Kurzform (siehe z.b. KT266 oder AMD760), aber es wird eigentlich nicht empfohlen, da man damit alle Bits im Register setzt - diese Bits werden aber auch durch z.b. das BIOS gesetzt, empfohlen wird den aktuellen Wert auszulesen und mit dem "Stromspar" Bit zu ergänzen und danach diesen Wert wieder zurück zuschreiben - hierdurch wird sichergestellt das wirklich nur ein Bit geändert wird.
Wenn setpci einen Fehler meldet oder seine kurz Hilfe anzeigt - ist höchstwahrscheinlich das eine (STPGNT) oder andere Bit (VLink Auto-disconnect) schon gesetzt.
Werte für die verschiedenen Chipsätze
AMD-751/761:
- enable:
setpci -s 0:0.0 0x60=$(printf %x $((0x$(setpci -H1 -s 0:0.0 60) + 0x00060000)))
- disable:
setpci -s 0:0.0 0x60=$(printf %x $((0x$(setpci -H1 -s 0:0.0 60) - 0x00060000)))
KX/KLE/KT/KM/KL/KN133[A]:
- enable:
setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) + 0x80))) (bus Disconnect when STPGNT detected)
- disable:
setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) - 0x80)))
KT/KM/266/333[A]:
- enable:
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) + 0x80))) (bus Disconnect when STPGNT detected)
setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) + 0x02))) (VLink Auto-disconnect)
- disable:
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) - 0x80)))
MSI K7T266Pro (MS-6380) (KT266):
- enable:
setpci -v -H1 -s 0:0.0 70=86
setpci -v -H1 -s 0:0.0 95=1e
- disable:
setpci -v -H1 -s 0:0.0 70=82
setpci -v -H1 -s 0:0.0 95=1c
KT400: (noch nicht ausgiebig getestet!)
- enable:
setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) + 0x80))) (bus Disconnect when STPGNT detected)
setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) + 0x02))) (VLink Auto-disconnect)
- disable:
setpci -v -H1 -s 0:0.0 D5=1c
!SiS730/733: (noch nicht ausgiebig getestet!)
- enable:
setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) + 0x01))) (bus Disconnect when STPGNT detected)
- disable:
setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) - 0x01)))
SiS735 or later: (noch nicht ausgiebig getestet!)
- enable:
setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) + 0x0001))) (bus Disconnect when STPGNT detected)
- disable:
setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) - 0x0001)))
Nforce:
- enable:
setpci -v -H1 -s 0:0.0 E4=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E4) + 0x06000000))) (Halt Disconnect and Stop Grant Disconnect)
setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) + 0x00008000))) (Self-reflesh enable)
- disable:
setpci -v -H1 -s 0:0.0 E4=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E4) - 0x06000000)))
Nforce2:
- enable:
setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) + 0x10))) (Halt Disconnect and Stop Grant Disconnect)
- disable:
setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) - 0x10)))
Auslesen der Werte
Ausgelesen werden können die Werte, indem man einfach den Wert weg lässt z.b.:
setpci -v -H1 -s 0:0.0 D5
Darauf hin gibt setpci den Wert eb zurück.
Programme
athcool (imho empfehlenswerter als die "setpci" Methode)
- Benötigt pci.h (aus dem pciutils-devel packet) und ist nur mit der Version 2.1.10 getestet.
- Evtl. muss noch das Makefile angepasst werden - wegen dem Pfad zur libpci.a
fvcool (unterstütz im Gegensatz zu athcool meinen Chipsatz)
Bekannte Probleme
Es gibt zwei bekannte Bugs im Athlon/Duron-Prozessor (Bug 11 und 14) näheres siehe AMD Athlon Processor Revision Guide. So wie es aussieht ist der Athlon XP davon nicht betroffen.
Aufgrund dieses Bugs können folgende Probleme auftreten:
- Sprünge beim Abspielen von Musik
- Sprünge und Verlangsamung beim Abspielen von Videos
- langsamer Transfer von Ultra-DMA-Festplatten
Manchmal kann ein BIOS-Update helfen (Bug 11 kann dadurch behoben werden).
Beim "Asus A7V133-C" ist bekannt, dass die Option "PCI master read caching" die meisten Probleme behebt, wenn sie eingeschaltet ist.
Bei manchen Boards kann auch die Option "Delayed Transaction" manche Probleme lösen - muss man einfach ausprobieren.
Bei Boards mit dem KT133A Chipsatz kann die Option "Delayed Transaction" den berühmten VIA-Southbridge Bug aktivieren!
Hier noch ein UseNet-Post zu Problemen mit dem Asus A7V.
Ein weiteres Problem ist, dass schlecht ausgelegte Onboard-Spannungsregler und Billignetzteile die starken Stromschwankungen nicht vertragen, die die CPU beim Wechsel des Betriebszustandes von C1 oder C2 nach C0 erzeugt. Das kann zu Systemabstürzen, plötzlichem Neustart oder elektrischen Störungen führen. Insbesondere ein Flackern der Anzeige auf dem Monitor wurde auf einigen Systemen beobachtet.