AMD Geode NX und Powernow unter Linux
Dieses Posting ist eigentlich mehr dazu gedacht zu dokumentieren, wie Zeit intensiv es ist ein Brett vor dem Kopf zu haben, denn zum eigentlichen Thema ist alles in diesem Posting im VDR-Portal gesagt.
Angefangen hat es mit dem Einbau des neu erstandenen Geode-Prozessors. Natürlich wunderte ich mich, warum der Stromverbrauch nicht runter ging, aber nach lesen des obigen Postings im VDR-Portal war mir klar, das ich nun einen Prozessor habe, bei dem die CPU-Geschwindigkeit variabel ist. Da die Sache einen Patch benötigt, wurde der eingespielt, ein neues Kernel-Image erstellt und installiert. Beim Laden des angepassten powernow-k7 Module erhielt ich dann diese Meldung:
kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage. kernel: powernow: Trying ACPI perflib kernel: powernow: ACPI perflib can not be used in this platform kernel: powernow: ACPI and legacy methods failed kernel: powernow: See http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml kernel: powernow: Building frequency table from MSR info. kernel: powernow: Minimum speed 1403 MHz. Maximum speed 1403 MHz.
Supi, ein Prozessor dessen Minimum- und Maximum-Takt identisch ist, ist ziemlich sinnlos. Es folgten ein halbes Dutzend anderer Kernel-Images, mal dieses fest ein-compiliert, mal jenes als Kernel-Module. Zwischendrin immer mal der Gedanke woher der Kernel wohl die Informationen hat und Blicke in die Sourcen des powernow-k7 Module, die mir naturgemäß als C-Legastheniker wenig sagten. Langsam verstand ich was in dem Module vor sich geht, aber ich war noch immer der Meinung das es eigentlich nur eine Frage der Kernel-Konfiguration sein kann.
Gestern endlich verwarf ich diese Idee, denn für mich war klar, das die Ursache in den MSRs (Model Specific Registers) der CPU zu finden war. In diesen MSRs sind Einstellungen betreffend des jeweiligen Prozessors hinterlegt. Ich wälzte ein bischen Doku von AMD zu dem Thema und lernte das es MSRs gibt die read-only gibt und welche die rw sind. Auch die Namen der von mir benötigten MSRs fand ich heraus: FIDVID_CTL und FIDVID_STATUS. Abfragen kann man diese unter Linux mit x86info, das mir aber nur einen Teil der MSRs anzeigte. Besser ist hier msr von Todd Allen.
FIDVID_CTL (0xc0010041):
NewFID (new FID) = 0b001111
NewVID (new VID) = 0b10001
InitFidVid (initiate FID/VID change) = true (1)
StpGntTOCnt (stop grant time-out count) = 0x0 (0)
FIDVID_STATUS (0xc0010042):
CurrFID (current FID) = 0b001111
StartFID (startup FID) = 0b001111
MaxFid (max FID) = 0b001111
MaxRampVID (max ramp VID) = 0b00000
FidVidPending (FID/VID change pending) = false (0)
CurVID (current VID) = 0b10001
StartVID (startup VID) = 0b10001
MaxVID (max VID) = 0b10001
Gut, wenn schon der Prozessor die gleichen Werte für StartFID und CurrFID in seinen Registern hat kann es an der Kernel-Konfiguration nicht liegen (VID ist hier unerheblich da es sich dabei um die automatische Anpassung von VCore, also der Versorgungs-Spannung der CPU handelt). Also versuchte ich Werte in die entsprechende Register zu schreiben: ohne Erfolg. Ich schrieb dem Autor des powernow-k7 Patches eine Mail, aber auch er wusste sich keinen Reim darauf zu machen.
Heute auf der Fahrt nach Hause löste sich das Brett vor dem Kopf: FID beschreibt keine konkrete Frequenz, sondern den Multiplikator des Frontsidebus (bei mir 133Mhz). Da ich den Multiplikator fest im BIOS auf 10.5 einstellt hatte und der Prozessor als MaxFID selbst 10.5 meldet konnte garnichts anderes passieren. Also Zuhause den Multiplikator auf Auto (also 6) gestellt und schon passierte das Richtige:
kernel: powernow: PowerNOW! Technology present. Can scale: frequency and voltage. kernel: powernow: Trying ACPI perflib kernel: powernow: ACPI perflib can not be used in this platform kernel: powernow: ACPI and legacy methods failed kernel: powernow: See http://www.codemonkey.org.uk/projects/cpufreq/powernow-k7.shtml kernel: powernow: Building frequency table from MSR info. kernel: powernow: Minimum speed 801 MHz. Maximum speed 1403 MHz.
Was bringt die Sache? Ich liege jetzt bei ca. 71 Watt im Idle, aber nur im Zusammenspiel mit athcool. Auch ein verringern des FSB von 133Mhz auf 100Mhz hat fast nichts gebracht, eher im Gegenteil. Ein bischen Sparen könnte ich noch, wenn ich den CPU-Lüfter entsorge, die AGP- gegen eine PCI-Karte tausche und mich durchringen könnte am Board rumzulöten um den Vcore von jetzt auf 1,4V auf 1,1Volt zu senken. Letzteres erscheint mir dann aber doch ein wenig zuviel des Guten. Dafür habe ich jetzt allerlei Rechenleistung für die paar Watt, die VIAs könnten da bestimmt nicht mithalten.
Update 20.7.2006: Siehe auch Teil 2