Dank elektrokid habe ich nun alle ACPI-Dateien von einem W700 mit C2Q bekommen. Falls sich jemand für die Unterschiede interessiert, habe ich
hier die unmodiffizierten decompilierten ACPI-Dateien vom T61 und vom W700 hochgeladen. Ich habe es leider nicht hinbekommen, ein Set zustande zu kriegen, was man per Grub2 unter Windows und Linux laden kann, so dass die Anpassung von Takt und Spannung je nach Last für die beiden letzten Cores ohne irgendwelche Drittprogramme gehen würde. Mit Drittprogrammen geht es aber unter beiden Systemen und man kann auch alles so konfigurieren, dass alles automatisch läuft.
unter Windows:
Wie von RMSMajestic schon erwähnt die Software
Throttlestop installieren. Dann die Software wie auf den Bildern konfigurieren, wobei Multiplikator und Spannung an den entsprechenden C2Q angepasst werden müssen. Im Bild die Einstellungen für einen QX9300, der bei mir auch beim Multiplikator von 9,5 mit der niedrigsten einstellbaren Spannung von 1,050 V klarkommt (muss man austesten, wie niedrig man gehen kann). Damit die Software bei der Anmeldung eines jeden User (egal, ob dieser Administratorrechte hat oder nicht) im Hintergrund gestartet wird, eine Aufgabe mit den Eigenschaften wie auf den Bildern erstellen. So wird die Software immer mit Administratorrechten gestartet, auch wenn sich nur ein User ohne Adminrechte anmeldet.
Zum Testen
super pi runterladen, mittles Taskmanager die exe einmal fest Core 0 und einmal fest Core 3 zuteilen und dann mit 2048 laufen lassen, die Zeiten dürfen sich nicht wesentlich unterscheiden.
unter Linux:
Für Linux gibt es die Software c2ctl (
archivierte Webseite,
Download) die den Multiplikator und die Spannung (FID und VID) für alle Core und Core2 CPUs direkt ändern kann. In dem Archiv ist bereits ein compiliertes Binary mit drin. Außerdem benötigt man editierte APIC-Tabellen, die man mit Grub2 lädt. Über diese kann man auch undervolten, indem man die entspechenden FID-VID-Paare anpasst.
Dieses Archiv herunterladen und entpacken, danach:
- Paket "msr-tools" (Name kann je nach Distribution verschieden sein) installieren und die entsprechenden Konfigurationsdateien der installierten Distribution so ändern, dass das Kernel-Modul "msr" beim booten immer geladen wird
- die Datei c2ctl nach /usr/sbin/ kopieren
- speedstep-on.service nach /usr/lib/systemd/system/ kopieren
- als root "systemctl enable speedstep-on.service" ausführen (damit wird c2ctl nach jedem Bootvorgang ausgeführt)
- 01-speedstep ausführbar machen und nach /etc/pm/sleep.d/ kopieren (damit wird c2ctl nach jedem resume vom standby ausgeführt)
- ACPI-Dateien mit der Endung .aml (SSDT3.aml usw) nach /boot/acpi/ kopieren (Ordner muss erstellt werden)
- in /boot/grub2/grub.cfg in dem menuentry, was ihr standardmäßig bootet, folgendes ganz am Anfang einfügen:
acpi -2 /boot/acpi/DSDT.aml /boot/acpi/SSDT3.aml /boot/acpi/SSDT4.aml /boot/acpi/SSDT6.aml /boot/acpi/SSDT7.aml /boot/acpi/SSDT8.aml /boot/acpi/SSDT9.aml
Die SSDTs beinhalten die P-States auch für die letzten beiden Cores (und nicht nur für die ersten zwei, wie die SSDTs vom BIOS), das Tool c2ctl braucht man aber trotzdem, um Speedstep für die letzten zwei Cores auch zu aktivieren. Dazu reicht es, wenn man i2ctl 3 -e aufruft,Speedstep wird dann auch für Core 2 aktiviert (für Cores 0 und 1 ist es vom BIOS her schon aktiviert).
In SSDT6 sind die FID-VID-Paare, die man zwecks Undervolting anpassen kann. In dem Archiv sind in SSDT6 die P-States für einen QX9300, der bei allen Taktstufen mit der niedrigsten Spannung auskommt, die man setzen kann (das Undervolting ist also schon drin).
Für andere CPUs (oder falls man andere VIDs für Undervolting braucht oder kein Undervolting möchte), muss man SSDT6uv.dsl anpassen, mit "iasl -tc SSDT6uv.dsl" compilieren und die entstandene SSDT6.aml nach /boot/acpi/ kopieren.
In der SSDT6 sieht der Abschnitt standardmäßig z. B. so aus:
Code:
Name (SPSS, Package (0x03)
{
Package (0x06)
{
0x0000076D, // Takt in der höchsten Stufe, hier 76D hex = 1901 dez
0x000088B8,
0x0000006E,
0x0000000A,
0x00000083,
0x00000000
},
Package (0x06)
{
0x0000076C, // Takt in der höchsten Stufe, hier 76C hex = 1900 dez
0x000088B8,
0x0000006E,
0x0000000A,
0x00000183,
0x00000001
},
Package (0x06)
{
0x000004B0, // Takt in der niedrigsten Stufe, hier 4B0 hex = 1200 dez
0x00003E80,
0x0000006E,
0x0000000A,
0x00000283,
0x00000002
}
})
Name (_PSS, Package (0x03) // _PSS: Performance Supported States
{
Package (0x06)
{
0x0000076D, // Takt in der höchsten Stufe, hier 76D hex = 1901 dez, vielleicht soll das der IDA-Modus sein? Keine Ahnung...
0x000088B8,
0x0000000A,
0x0000000A,
0x00004A2C, // FID und VID fuer die Taktstufe
0x00004A2C // FID und VID fuer die Taktstufe
},
Package (0x06)
{
0x0000076C, // Takt in der höchsten Stufe, hier 76C hex = 1900 dez
0x000088B8,
0x0000000A,
0x0000000A,
0x00004925, // FID und VID fuer die Taktstufe
0x00004925 // FID und VID fuer die Taktstufe
},
Package (0x06)
{
0x000004B0, // Takt in der niedrigsten Stufe, hier 4B0 hex = 1200 dez
0x00003E80,
0x0000000A,
0x0000000A,
0x0000061B, // FID und VID fuer die Taktstufe
0x0000061B // FID und VID fuer die Taktstufe
}
})
Die Zeile mit dem Takt ist übrigens nur informativer Natur, der Wert wird bei mir z. B. im Systemmonitor angezeigt. Man kann da natürlich hinschreiben was man will, aber sinnvoll ist es natürlich, da den Takt reinzuschreiben, den die CPU bei der Taktstufe dann auch tatsächlich hat. Interessanterweise waren diese Wert vom BIOS her falsch (zu niedrig) gesetzt, weil der Chipsatz ja davon ausgeht, dass er mit FSB 800 betrieben wird, obwohl er tatsächlich mit FSB 1066 läuft. So wurden für einen Q9000 z. B. 1200 und 1500 MHz gesetzt, obwohl dieser real mit 1600 und 2000 MHz lief.
Die Zeile mit FID und VID ist anscheindend folgendermaßen aufgebaut (Dokumentation dazu habe ich nicht gefunden, das hier habe ich nur durch Ausprobieren ausgetestet):
0x0000
4925
blaues Byte: 4 = 0,5 zum ganzzahligen Multiplikator addieren, also 8,5 usw.
0 = nichts zum ganzzahligen Multiplikator dazuaddieren
grünes Byte: ganzzahler Multiplikator, geht von 6 bis 15 (6 bis F).
rote Bytes: Die (ohne das erste Bit) invertierte VID gemäß der Tabelle 3 auf Seite 23 im
Intel® Core™2 Extreme Quad-Core Mobile Processor and Intel® Core™2 Quad Mobile Processor on 45-nm Process Datasheet.
Zum Beispiel wäre die VID für 1,050 V gemäß der Tabelle 010 0100, ohne das erste Bit wäre das 10 0100. Invertiert ist das 01 1011, in hexadezimal wären das 1B (die ersten zwei Bits sind Null).
Umgekehrtes Beispiel: 25 ist 10 0101, also VID 001 1010, was 1,175 V entspricht. Leider lassen sich auch damit keine VIDs kleiner als 1,050 V setzen.
Für den QX9300 mit Undervolting sieht das ganze dann so aus:
Code:
Name (SPSS, Package (0x03)
{
Package (0x06)
{
0x000009E6,
0x000088B8,
0x0000006E,
0x0000000A,
0x00000083,
0x00000000
},
Package (0x06)
{
0x000009E5,
0x000088B8,
0x0000006E,
0x0000000A,
0x00000183,
0x00000001
},
Package (0x06)
{
0x00000640,
0x00003E80,
0x0000006E,
0x0000000A,
0x00000283,
0x00000002
}
})
Name (_PSS, Package (0x03) // _PSS: Performance Supported States
{
Package (0x06)
{
0x000009E6,
0x000088B8,
0x0000000A,
0x0000000A,
0x00004A1B,
0x00004A1B
},
Package (0x06)
{
0x000009E5,
0x000088B8,
0x0000000A,
0x0000000A,
0x0000491B,
0x0000491B
},
Package (0x06)
{
0x00000640,
0x00003E80,
0x0000000A,
0x0000000A,
0x0000061B,
0x0000061B
}
})
Das mit dem Multiplikator-Unlock über Throttlestop hat bei mir irgendwie nicht funktioniert. Ausgehend vom Undervoltingpotential dürfte der QX9300 aber problemlos über 3 GHz packen. Leider ist die Kühlung im T61 zu schwach dafür, da müsste man gewiss noch was am Kühler ändern, damit die CPU auch bei höheren Taktraten (und ggf. auch Spannungen) noch kühlbar wäre.
Zum Testen Super-pi für Linux
runterladen und dieses einmal mit "taskset -c 0 ./pi 21" und einmal mit "taskset -c 3 ./pi 21" ausführen. Die benötigten Rechenzeiten sollten sich nicht wesentlich unterscheiden.
==========================================================================================================
==========================================================================================================
Außerdem hat highsun jetzt auch noch vier BIOS-Versionen angefertigt, die die Nvidia-GPU sogar auf 0,9V undervolten, für Download-Links siehe die Tabelle im ersten Post. Ich habe die Version für Quad-Cores mit ASPM-Patch geflasht und mit dem Multimeter die Spannung nochmal kontrolliert. Im Furmark-Test habe ich mit der NVS 140m keine Bildfehler oder Abstürze, die GPU-Temperatur pendelte sich dabei nach einer Viertelstunde mit installiertem Q9000 (!) bei 64°C ein. Die kleinste Spannung, auf die man per BIOS-Mod stellen kann, ohne dass man mit einer Hardwaremodifikation (die aber nicht so schwierig wäre) den Logic-Level von VID4 auf 1 ändern müsste, sind 0,875V. Von daher dürfte das nun das Maximum sein, was rauszuholen ist. Kann gut sein, dass das nicht jeder GPU-Chip unter Last packt.
Ansonsten zur Referenz hier noch die Quadcore-Threads auf 51nb.com, möglicherweise kann ja jemand aus den dortigen Threads noch Infos für sich rausziehen:
Mod-BIOS:
http://forum.51nb.com/thread-1472071-1-1.html (nicht die Undervolting-BIOSe aus dem ersten Post laden, das sind die, die noch den Fehler mit der Spannung drin habe, die fehlerbereinigten sind in Post 76 und 128)
Quadcore-Test mit verschiedenen Kühlern:
http://forum.51nb.com/thread-1475999-1-1.html
Quadcore-Mod Anleitung:
http://forum.51nb.com/thread-1477919-1-1.html
Thread zum Problem mit dem Hochtakten der letzten beiden Cores:
http://forum.51nb.com/thread-1477918-1-1.html
FSB-1066-Mod:
http://forum.51nb.com/thread-1470571-1-1.html
T61 mit Q9000:
http://forum.51nb.com/thread-1473685-1-1.html