Anscheinend ist mein Chipsatz AMD780G oder mein Prozessor Phenom X4 9950 zu neu, als das Linux da ohne weiteres die Prozessortaktstufen unterstützt. Meine Odysee ist zu Ende. Er skaliert endlich richtig! Dies möchte ich möglichst vielen Menschen zugänglich machen.
Das Kernel-Modul powernow-k8 muss geladen werden. Dies geschieht (einmalig) durch
sudo modprobe powernow-k8
oder dauerhaft durch einen eintrag in der /etc/modules.
Danach müssen verschiedene Prozesse noch gestartet werden (dies reicht einmalig, sind nach dem Neustart dann noch da!)
sudo /etc/init.d/cpufreqd start
sudo /etc/init.d/powernowd
sudo /etc/init.d/powernowd.early
Wenn diese Programme sich nicht starten lassen, so muss wahrscheinlich mindestens noch
- cpufreqd
- cpufrequtils
installiert werden. Den Powernow-Dämon muss man dann an sich nicht mehr installieren. Mit den cpufrequtils wird auch cpufreq-info mitgeliefert. Ohne die richtige Konfiguration wird sich dann eine Ausgabe wie
analysiere CPU 0:
Treiber: powernow-k8
Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0
Hardwarebedingte Grenzen der Taktfrequenz: 1.30 GHz – 2.60 GHz
mögliche Taktfrequenzen: 2.60 GHz, 1.30 GHz
mögliche Regler: powersave, performance
momentane Taktik: die Frequenz soll innerhalb 1.30 GHz und 1.30 GHz.
liegen. Der Regler “powersave” kann frei entscheiden,
welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
momentane Taktfrequenz ist 1.30 GHz.
zeigen. Man sieht eindeutig den Fehler, dass die Frequenz zwischen 1.3Ghz und 1.3Ghz liegen soll. Jetzt kommt das wirklich interessante – wo stellt man dies ein? Dafür sind folgende Dateien verantwortlich, die ich hier mal posten will bevor ich das Problem gelöst habe. (Exemplarisch für CPU0).
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat cpuinfo_max_freq
2600000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat cpuinfo_min_freq
1300000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_governor
ondemand
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_available_frequencies
2600000 1300000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_max_freq
1300000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_min_freq
1300000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_cur_freq
1300000
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$
Wichtig ist, dass in der cpuinfo_max_freq der richtige wert drin steht! Sonst können Schäden an der Hardware entstehen. Wie man sieht, sind die Werte auf welche die CPU skalieren darf (scaling_min_freq) auf 1.3Ghz festgelegt (die Werte sind in Kiloherz niedergeschrieben). Dies müssen wir jetzt ändern. Doch wie? Man kann nicht direkt in die Dateien schreiben, da /sys/ ein dynamisches Dateisystem ist. Dafür gibt es das Programm sysfsutils. Dies schreibt bei jedem Start die Dateien neu, mit Werten die man in der /etc/sysfs.conf angibt. Meine /etc/sysfs.conf sieht im Moment so aus:
devices/system/cpu/cpu0/cpufreq/scaling_governor=ondemand
devices/system/cpu/cpu1/cpufreq/scaling_governor=ondemand
devices/system/cpu/cpu2/cpufreq/scaling_governor=ondemand
devices/system/cpu/cpu3/cpufreq/scaling_governor=ondemand
devices/system/cpu/cpu0/cpufreq/scaling_max_freq=2600000
devices/system/cpu/cpu1/cpufreq/scaling_max_freq=2600000
devices/system/cpu/cpu2/cpufreq/scaling_max_freq=2600000
devices/system/cpu/cpu3/cpufreq/scaling_max_freq=2600000
Die maximale Frequenz für jeden CPU-Kern wurde auf 2.6Ghz erhöht. Desweiteren wurde der Governor (die Strategie, wie das System die Taktraten der Kerne anhebt) für jeden Kern auf ondemand gesetzt. Das heißt, dass die Taktrate erhöht wird – und das direkt bei Bedarf. Weitere Governor sind:
| ondemand (Standard bei den meisten Systemen) |
Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Dabei wird die CPU-Frequenz u.U. sprunghaft angehoben oder abgesenkt. |
| conservative |
Die CPU-Frequenz wird den aktuellen Bedürfnissen an die Rechenleistung angepasst. Die Taktfrequenz wird aber Schritt-für-Schritt angehoben bzw. abgesenkt. |
| performance |
Die CPU läuft permanent auf der höchsten erlaubten Taktfrequenz. |
| powersave |
Die CPU läuft permanent auf der niedrigsten erlaubten Taktfrequenz. |
(Quelle: Ubuntuusers)
Nachdem nun die /etc/sysfs.conf geschrieben worden ist, und das Programm mit
sudo /etc/init.d/sysfsutils start
gestartet worden ist, sollten nun unsere Analysen auch die richtigen Ergebnisse zu Tage bringen. Erstmal mit cpufreq-info (stellvertrend für Kerne 1 + 2):
analysiere CPU 0:
Treiber: powernow-k8
Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0
Hardwarebedingte Grenzen der Taktfrequenz: 1.30 GHz – 2.60 GHz
mögliche Taktfrequenzen: 2.60 GHz, 1.30 GHz
mögliche Regler: userspace, ondemand, powersave, conservative, performance
momentane Taktik: die Frequenz soll innerhalb 1.30 GHz und 2.60 GHz.
liegen. Der Regler “ondemand” kann frei entscheiden,
welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
momentane Taktfrequenz ist 1.30 GHz.
analysiere CPU 1:
Treiber: powernow-k8
Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 1
Hardwarebedingte Grenzen der Taktfrequenz: 1.30 GHz – 2.60 GHz
mögliche Taktfrequenzen: 2.60 GHz, 1.30 GHz
mögliche Regler: userspace, ondemand, powersave, conservative, performance
momentane Taktik: die Frequenz soll innerhalb 1.30 GHz und 2.60 GHz.
liegen. Der Regler “ondemand” kann frei entscheiden,
welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
momentane Taktfrequenz ist 2.60 GHz.
Man sieht sehr schön den Vorteil eines AMD’s. Jeder Kern kann seine Taktrate einzeln ändern. Nicht so wie die zusammengeclusterten Intels (*flame* .. auch wenn deren Treiber wohl besser sind ..). Die zweite Analyse, direkt in cpufreq zeigt auch, dass die maximale Frequenz auf die der Prozessor skalieren darf ebenfalls angehoben worden ist, was wir ja direkt durch unseren Eingriff der sysfsutils erreicht haben (Wieder nur exemplarisch für einen Kern).
kb1@kb:/sys/devices/system/cpu/cpu0/cpufreq$ cat scaling_max_freq
2600000
Abschließend bleibt zu sagen, dass man auf diesem Wege wenigstens zwischen 1.3Ghz und 2.6Ghz ondemand wechselt. Ist zwar nicht ganz so ein elegantes Speedstepping .. aber immerhin funktioniert es, und das trotz der schlechten Linux-Unterstützung seitens ATI/AMD. Besser so, als wie wenn die CPU ständig mit 4 x 2.6Ghz durchheizt. Gerade im Sommer war das alles andere als angenehm. Und auch besser als wie wenn er nur auf 1.3Ghz läuft.. dann hätte man sich ja fast keinen neuen PC holen müssen! Ich hoffe, dass diese Anleitung möglichst schnell per Google gefunden wird, damit nicht jeder noch mal die gleiche Odysee durchmachen muss. Deshalb auch die vielen Buzzwords im Titel .. hehe.