ubuntuusers.de

PHC-Undervolting auf Thinkpad mit Intel Core i5

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

ThinkTwice

Anmeldungsdatum:
9. August 2012

Beiträge: 16

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.):

  1. https://launchpad.net/~linux-phc/+archive/testing

  2. http://www.linux-phc.org/forum/viewtopic.php?f=7&t=267

  3. http://openmindedbrain.info/wp-content/uploads/2010/05/intel-phc-undervolt.bash

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:

  1. http://thinkwiki.de/PHC-Patch

  2. http://openmindedbrain.info/09/05/2010/undervolting-in-ubuntu-10-04-lucid-lts/

  3. http://linuxsolver.blogspot.it/2012/05/undervolting-cpu-in-ubuntu-1204.html

  4. https://www.dropbox.com/s/krz6wakilt6b5rn/phctool_0.5.2-3.tar.gz

  5. http://notebook-treff.de/notebook-hardware-control/probleme-fragen-und-anregungen/9613-intel-core-i5-keine-%C3%A4nderung-der-spannung-m%C3%B6glich/

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

linrunner

Avatar von linrunner

Anmeldungsdatum:
7. August 2007

Beiträge: 3272

Hi,

mein Wissensstand ist, dass PHC ab der 1. Core-i-Generation generell nicht mehr funktioniert. Die Sysfiles sind da, jedoch völlig wirkungslos. So auch bei meinem i7-2640M @ 2.80GHz.

Deine Versuche sind der empirische Beweis.

Eine autoritative Quelle dafür hab ich leider nicht zur Hand. Allerdings habe ich auch keine gegenteiligen Infos gelesen – zumindest nicht für Mobilprozessoren. Ansätze für eine angepaßte PHC-Version sind ebenfalls Fehlanzeige.

Für den Pentium M scheint es seit Kernel 3.0 auch nicht mehr zu funktionieren.

Übrigens: bevor Du dir nächstes Mal einen abbrichst mit dem Patchen des Kernels, nimm einfach meinen: tp-Kernel 😉

ThinkTwice

(Themenstarter)

Anmeldungsdatum:
9. August 2012

Beiträge: 16

Vielen Dank für deine Antwort, linrunner. ☺

linrunner schrieb:

Übrigens: bevor Du dir nächstes Mal einen abbrichst mit dem Patchen des Kernels, nimm einfach meinen: tp-Kernel 😉

Darauf bin ich bei meiner Suche auch gestoßen, hab die Option dann aber verworfen, weil ich schon einige Thinkpad-spezifische Aspekte (siehe Liste unten) angepasst habe an meinem System und ich befürchtet habe, später irgendwelchen Wechselwirkungen ausgesetzt zu sein. Und wenn es nur überschriebene Konfigurationen gewesen seien. Aber vielleicht war diese Angst auch gänzlich unbegründet.

  • hdapsd

  • thinkfan

  • tlp

  • tp-smapi-dkms

TT

linrunner

Avatar von linrunner

Anmeldungsdatum:
7. August 2007

Beiträge: 3272

Ich benutze den tp-Kernel selbst, dazu die von dir genannte Software. Ich wäre ja ziemlich doof, wenn ich in den Kernel etwas einbaute, das mit der Software kollidiert, nicht wahr? 😉

ThinkTwice

(Themenstarter)

Anmeldungsdatum:
9. August 2012

Beiträge: 16

Intel Core i3/5/7-Prozessoren einschließlich Sandy Bridge werden vom PHC-Patch derzeit nicht unterstützt.

Quelle: http://thinkwiki.de/Ubuntu_Schnelleinstieg#Undervolting

Ich würde das Thema hiermit einfach ad acta legen. Vorerst. Weil ich nicht einschätzen kann, inwiefern es „lediglich“ an der Softwareunterstützung für die betroffenen Prozessoren liegt oder vielmehr von deren spezifischen Hardwareeigenschaften abhängt, die Spannungsveränderungen softwareseitig womöglich gar nicht erlauben.

ThinkTwice

cliwrouc

Anmeldungsdatum:
28. April 2011

Beiträge: 51

ThinkTwice schrieb:

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.

$ ln -s 2.6.32.27/ 2.6.42.41                                         # Link für die aktuell verwendete Kernel-Version setzen

Den Schritt kannst du dir sparen. Das phc-intel build-skript wählt den richtigen Patch aus. Die 2.6.42 gibt es nicht, weil der identisch mit einem der 3er patches ist - das weiß das build-skript. Oder für den aktuellen kernel 3.6: da braucht es keinen extra patch, weil sich der code seit 3.1 nicht geändert hat. dem trägt das build-skript rechnung und greift zum (korrekten) 3.1er patch.

Antworten |