Hallo Ubuntuusers,
das Wichtigste vorneweg: Bei diesem Thema handelt es sich weniger um eine Fragestellung, sondern vielmehr um die Beschreibung des Ist-Zustandes zur Problematik. Dies soll insbesondere zur Information anderer Benutzer dienen, die ähnliches vorhaben. Nach meinem momentanen Kenntnisstand ist manuelles PHC-Undervolting (Untertaktung) mit den Mobilprozessoren Intel Core i3/i5/i7 der ersten Generation nicht möglich.
Technische Daten zur Testplattform:
Lenovo Thinkpad T410i
Intel Core i5 M430 2,27 GHz Stepping 2
Ubuntu 10.4
2.6.32-41-generic-phc #90~phc0-Ubuntu SMP Fri Jun 15 12:50:50 UTC 2012 x86_64 GNU/Linux
phc_intel (Kernelmodul) in der Version 0.3.2 (stable) bzw. 0.4.0 (unstable)
Quellen für PHC-Kernel (1.), PHC-Modul (2.) sowie Testskript (3.):
Die Patches für acpi-cpufreq.c (woraus später phc_intel wird) gehen nur bis 2.6.32.27. Da jedoch acpi-cpufreq.c in 2.6.32.41 immer noch identisch aussieht, habe ich einfach einen Link auf meine Kernelversion gesetzt.
$ sudo apt-get update # Paketquellen aktualisieren $ sudo apt-get install linux-generic-phc linux-headers-generic-phc # PHC-Kernel und dessen Header installieren $ tar -xjf phc-intel-pack-rev6.tar.bz2 # PHC-Modul entpacken $ cd phc-intel-pack-rev6/inc $ ln -s 2.6.32.27/ 2.6.42.41 # Link für die aktuell verwendete Kernel-Version setzen $ cd .. $ make dkms_mkdeb # ein deb-Paket mit dem PHC-Modul erstellen $ sudo dpkg -i phc-intel-dkms_0.3.2_all.deb # das PHC-Modul installieren
Der Vollständigkeit halber noch, aber vermutlich nicht nötig, folgende Einträge in den genannten Dateien:
# /etc/modules … phc-intel
# /etc/modprobe.d/phc-custom.conf blacklist acpi_cpufreq blacklist cpufreq_stats
Nach einem Neustart ist das Modul phc_intel geladen. Dass PHC theoretisch funktionieren könnte, verifizieren die folgenden (oder ähnliche) Ausgaben:
$ lsmod | grep phc phc_intel 13178 1 $ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_vids 18 17 16 15 14 13 12 11 10 9
Nun sollte man händisch oder per oben erwähntem Testskript die VIDs ermitteln, bei denen die CPU(s) mit minimaler Spannung bei maximaler Stabilität laufen. Das Skript verwendet dazu burnMMX aus dem Paket cpuburn. Wer es unbedingt grafisch mag, kann alternativ auch mit dem phctool herumexperimentieren (Link siehe unten).
$ sudo apt-get install cpuburn # Paket cpuburn installieren $ wget http://openmindedbrain.info/wp-content/uploads/2010/05/intel-phc-undervolt.bash # Testskript runterladen $ chmod a+x intel-phc-undervolt.bash # ausführbar machen $ sudo ./intel-phc-undervolt.bash # Testskript aufrufen (idealerweise gdm oder ähnlich sowie sonstige Dienste vorher runterfahren)
Während das Skript läuft, können Temperatur und VIDs natürlich auch parallel überwacht werden:
$ watch -n 1 cat /proc/acpi/thermal_zone/THM0/temperature $ watch -n 5 cat /sys/devices/system/cpu/cpu0/cpufreq/phc_vids
Und nun zu der ernüchternden Erkenntnis: Das Testskript ermittelt 0 für jede CPU-Speedstep-Frequenz als minimale VID, was nach einer automatisch aufgeschlagenen Sicherheit von 4 folgendermaßen aussieht
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_vids 4 4 4 4 4 4 4 4 4 4
Das heißt im Endeffekt aber, die vom Testskript errechneten Spannungen werden tatsächlich niemals erreicht. Belege dafür: Das System friert zu keinem Zeitpunkt ein, obwohl es unter Volllast läuft; die Temperatur erreicht nach jeder Verringerung der VID ihr Maximum bei 82°C, obwohl sie eigentlich fallen sollte (mit sinkender Spannung). Die tatsächliche Spannung kann ich nicht kontrollieren, da lm-sensors mein System nicht unterstützt (was bei Laptops nicht selten sein soll laut sensors-detect). Es spielt keine Rolle, ob Version 0.3.2 (stable) oder 0.4.0 (testing) des PHC-Moduls verwendet wird.
Interessant wird es bei der zusätzlichen Kontrolle der Spannung (bzw. aktuellen VID) über das entsprechende MSR (machine specific register):
$ sudo apt-get install msr-tools # im Paket msr-tools ist rdmsr enthalten
$ sudo modprobe msr # Modul msr laden
$ SYSFS=/sys/devices/system/cpu/cpu0/cpufreq # Variable mit dem sysfs-Pfad
$ echo userspace | sudo tee $SYSFS/scaling_governor # den Governor umstellen, um die CPU-Frequenz ändern zu können
$ echo 2267000 | sudo tee $SYSFS/scaling_setspeed # Frequenz auf maximalen Wert setzen
$ cat $SYSFS/phc_default_vids | sudo tee $SYSFS/phc_vids # VIDs auf Standardwerte setzen
$ cat $SYSFS/phc_vids # gesetzte VIDs überprüfen
18 17 16 15 14 13 12 11 10 9
$ for i in {1..4}; do burnMMX& done # die vier Threads der CPU(s) auslasten
$ sudo rdmsr -0 0x198 # das MSR mit der aktuellen VID auslesen
0000000000000012 # 0x12=18 (entspricht der Standard-VID für die maximale Frequenz, siehe oben)
$ sudo echo "4 4 4 4 4 4 4 4 4 4" | sudo tee $SYSFS/phc_vids # ermittelte VIDs des Testskripts setzen
$ cat /sys/devices/system/cpu/cpu0/cpufreq/phc_vids # gesetzte VIDs überprüfen
4 4 4 4 4 4 4 4 4 4
$ sudo rdmsr -0 0x198
0000000000000012 # 0x12=18 (immer noch 18, obwohl es 4 sein müsste)
$ killall burnMMX # CPU(s) von ihrer Last befreien
$ sudo rdmsr -0 0x198
0000000000000009 # 0x9=9 (müsste eigentlich 4 sein)Wenn ich das richtig interpretiere, dann findet womöglich doch eine Spannungsabsenkung statt. Allerdings nie weniger als VID 9. Das passiert im übrigen unabhängig davon, was man in /sys/devices/system/cpu/cpu0/cpufreq/phc_vids einträgt. Das heißt, die CPU-Spannung scheint bei meinem System im fixen Bereich zwischen den VIDs 18 und 9 zu schwanken. Das könnte erklären, warum die Temperatur beim Testskript ihr Maximum bei jeder VID (von 18 bis 0!) um die 82°C erreicht und schrittweise wieder bis auf 67°C abkühlt. Möglicherweise wird beim Erreichen des Maximums automatisch die Spannung verringert auf VID 9. Die Rede ist hier natürlich vom Volllastbetrieb. Im Idle hat die CPU selten über 47°C.
Anleitungen zum PHC-Thema (1.–3.), phctool (4.) sowie Spekulationen (5.) zum beschriebenen Sachverhalt:
http://openmindedbrain.info/09/05/2010/undervolting-in-ubuntu-10-04-lucid-lts/
http://linuxsolver.blogspot.it/2012/05/undervolting-cpu-in-ubuntu-1204.html
https://www.dropbox.com/s/krz6wakilt6b5rn/phctool_0.5.2-3.tar.gz
Wer bis hierhin Geduld hatte und ein ähnliches oder gar dasselbe System hat wie ich, den würde ich gern um seine Meinung bzw. Rückmeldung bitten. Vielen Dank.
ThinkTwice