• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] CPU-Frequenz bei AMD dauerhaft begrenzen

Schorschl

Newbie
Guten Tag allerseits,

ich bin gerade dabei, einen HTPC mit SuSE 11.1 aufzubauen. Das allermeiste klappt schon ganz gut - wäre da nicht:

Da ich ein kompaktes Gehäuse mit kleinem CPU-Lüfter einsetze habe ich nun ein Temperaturproblem. Beim Rendern einer Diaschau mit Kdenlive (100% Prozessorlast) erreicht der AMD-Prozessor eine Temperatur von 90°C. Das sieht man dann nicht nur am Performance-Monitor, das riecht man sogar!

Da ich nun befürchte, dass dies der Lebensdauer des Prozessors abträglich ist, habe ich das Paket "cpufrequtils" installiert. Einmal als root den Befehl "modprobe powernow-k8" ausgeführt, kann ich nun als root mit dem Befehl "cpufreq-set -–max 2000000" die CPU Frequenz von ursprünglich maximal 2,6GHz auf 2GHz begrenzen. In der Konsole bestätigt der Befehl "cpufreq-info" den Erfolg. Die Temperatur steigt während dem Rendern dann nur noch auf knapp über 60°C. Nach dem nächsten Systemstart läuft der Rechner wieder mit 2,6GHz.

Da mir Lebensdauer wichtiger als Performance ist, möchte ich nun dauerhaft den Befehl "cpufreq-set -–max 2000000" beim Booten ausführen lassen. Das wollte ich realisieren, indem ich in der Datei „/etc/init.d/boot.local" das G'satzerl "cpufreq-set -–max 2000000" oder auch "cpufreq-set –-max 2000000&" anhänge. Beides bringt leider keine Änderung.

Was muss ich machen, damit der Befehl beim Systemstart automatisch mit root-Rechten ausgeführt wird?

Vielen Dank für Eure Hilfe!

Grüße Schorschl
 

Tooltime

Advanced Hacker
90° echt nicht schlecht. Normaler Weise verkraften AMD CPU's je nach Typ 60° oder 70°. In der boot.local sollte man alle Befehle immer mit vollen Pfad aufrufen. Da bei mir der Befehl nicht installiert ist kann ich nur raten:

  • /sbin/cpufreq-set -–max 2000000
    oder
    /usr/sbin/cpufreq-set -–max 2000000
Fällt mir gerade ein, kann man mit dem Befehl which heraus bekommen (which cpufreq-set).
 
OP
S

Schorschl

Newbie
Hallo Tooltime,

Vielen Dank für die schnelle Antwort, aber das war es leider auch nicht. Die Datei "cpufrq-set" befindet sich im Verzeichniss "/usr/bin/"
Code:
linux-l9js:/home/htpcuser # which cpufreq-set
/usr/bin/cpufreq-set

Ich habe den Rechner mit folgender "/etc/init.d/boot.local" gebootet:
Code:
#! /bin/sh
#
# Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany.  All rights reserved.
#
# Author: Werner Fink <werner@suse.de>, 1996
#         Burchard Steinbild, 1996
#
# /etc/init.d/boot.local
#
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
#
# Begrenze die CPU-Frequenz auf 2GHz
/usr/bin/cpufreq-set -–max 2000000&

In einer Konsole lass ich mir nun erst die Einstellungen zur CPU-Frequenz anzeigen, melde mich als root an, begrenze die Frequenz auf 2GHz und zeige wieder die Einstellungen zur CPU-Frequenz:

Code:
htpcuser@linux-l9js:~> cpufreq-info
cpufrequtils 004: cpufreq-info (C) Dominik Brodowski 2004-2006
Bitte melden Sie Fehler an http://bugs.opensuse.org.          
analysiere CPU 0:                                             
  Treiber: powernow-k8                                        
  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0 1
  Hardwarebedingte Grenzen der Taktfrequenz: 1000 MHz - 2.60 GHz    
  mögliche Taktfrequenzen: 2.60 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
  mögliche Regler: conservative, userspace, powersave, ondemand, performance         
  momentane Taktik: die Frequenz soll innerhalb 1000 MHz und 2.60 GHz.               
                    liegen. Der Regler "ondemand" kann frei entscheiden,             
                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
  momentane Taktfrequenz ist 1000 MHz.
analysiere CPU 1:
  Treiber: powernow-k8
  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0 1
  Hardwarebedingte Grenzen der Taktfrequenz: 1000 MHz - 2.60 GHz
  mögliche Taktfrequenzen: 2.60 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
  mögliche Regler: conservative, userspace, powersave, ondemand, performance
  momentane Taktik: die Frequenz soll innerhalb 1000 MHz und 2.60 GHz.
                    liegen. Der Regler "ondemand" kann frei entscheiden,
                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
  momentane Taktfrequenz ist 1000 MHz.
htpcuser@linux-l9js:~> su
Passwort:
linux-l9js:/home/htpcuser # cpufreq-set --max 2000000&
[1] 4851
linux-l9js:/home/htpcuser # cpufreq-info
cpufrequtils 004: cpufreq-info (C) Dominik Brodowski 2004-2006
Bitte melden Sie Fehler an http://bugs.opensuse.org.
analysiere CPU 0:
  Treiber: powernow-k8
  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0 1
  Hardwarebedingte Grenzen der Taktfrequenz: 1000 MHz - 2.60 GHz
  mögliche Taktfrequenzen: 2.60 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
  mögliche Regler: conservative, userspace, powersave, ondemand, performance
  momentane Taktik: die Frequenz soll innerhalb 1000 MHz und 2.00 GHz.
                    liegen. Der Regler "ondemand" kann frei entscheiden,
                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
  momentane Taktfrequenz ist 1000 MHz  (verifiziert durch Nachfrage bei der Hardware).
analysiere CPU 1:
  Treiber: powernow-k8
  Folgende CPUs können nur gleichzeitig ihre Frequenz variieren: 0 1
  Hardwarebedingte Grenzen der Taktfrequenz: 1000 MHz - 2.60 GHz
  mögliche Taktfrequenzen: 2.60 GHz, 2.40 GHz, 2.20 GHz, 2.00 GHz, 1.80 GHz, 1000 MHz
  mögliche Regler: conservative, userspace, powersave, ondemand, performance
  momentane Taktik: die Frequenz soll innerhalb 1000 MHz und 2.00 GHz.
                    liegen. Der Regler "ondemand" kann frei entscheiden,
                    welche Taktfrequenz innerhalb dieser Grenze verwendet wird.
  momentane Taktfrequenz ist 1000 MHz  (verifiziert durch Nachfrage bei der Hardware).
[1]+  Done                    cpufreq-set --max 2000000
linux-l9js:/home/htpcuser #

Hier sieht man nun, dass der Eintrag in dier Datei "boot.local" nichts bringt, der selbe Befehl als root ausgeführt jedoch zum gewünschten Erfolg führt. Was kann ich denn noch probieren?

Viele Grüße Schorschl
 

Tooltime

Advanced Hacker
Entferne mal das kaufmännische Und. Könnte Probleme geben mit dem Befehlsaufruf im Hintergrund. Die aufrufende Shell könnte beendet werden bevor der Befehl wirklich ausgeführt wird. Wenn der Elternprozess von cpufreq-set zu früh beendet wird, wird der Befehl gekillt noch bevor er überhaupt ausgeführt werden konnte. Ein Kindprozess wird mit einen Elternprozess beendet.

Ansonsten schau mal in /var/log/boot.msg nach Meldungen.
 

josef-wien

Ultimate Guru
boot.local kommt zu früh dran, der HAL-Dämon wird erst danach gestartet. Du mußt also ein paar Sekunden warten. Damit boot.local den Boot-Vorgang nicht pausieren läßt, mußt Du in der boot.local mit
Code:
/bin/bash /etc/init.d/bootlocal.sh&
(wichtig ist das & am Ende) eine andere Script-Datei aufrufen (der Name ist beliebig) und dort z. B.
Code:
sleep 5
und Deine sonstigen Befehle eintragen.
 

K4m1K4tz3

Advanced Hacker
Also ich würde ihn über das BIOS runter takten. Da kann man dann evtl. auch noch die Core-Spannung reduzieren und somit noch mehr Energie sparen bzw. den Prozessor kühler machen.
 
OP
S

Schorschl

Newbie
Erst einmal vielen Dank an alle. Ihr seid mit Euren Vorschlägen schneller wie ich mit dem Ausprobieren.

Der Vorschlag von josef-wien funktioniert. Super!

Die Idee von K4m1K4fz3 scheint einleuchtend. Ich habe im Handbuch vom Motherboard unter dem Abschnitt "CPU Ratio and Voltage" einen Abschnitt "Processor Frequency and Multiplier" Einsstellungen gefunden, mit denen sich die Prozessorfrequenz begrenzen lassen soll. Die gewünschten Einstellungen zeigen aber keinerlei Wirkung. Warum weiß ich nicht. Entweder beißt sich hier etwas mit anderen Einstellungen oder das ist eine Dummy-Funktion. Die Prozesor-Spannung lässt sich nur in größeren Schritten reduzieren - da wird er dann recht lahm.

Im weiteren Vorgehen möchte ich die Beeinflussung der Prozessortemperatur über cpufreq-set weiter verfolgen. Ich will im Start-Shell eine Endlosschleife beginnen lassen, die die Prozesortemperatur abfrägt, und je nach Temperatur die maximale Frequenz hochsetzt, beibehält oder reduziert. Dann wieder in etwa 30s sleep. Ich denke so eine Schleife belastet das System nicht allzu sehr und gibt zusammen mit der variablen Lüfterdrehzahl an der CPU einen spannenden Regelkreis.

Viele Grüße
Schorschl
 

josef-wien

Ultimate Guru
Die Lösung über boot.local birgt natürlich das Restrisiko, daß durch irgendwelche widrigen Umstände der HAL-Dämon noch nicht gestartet wurde. Bei einer automatisierten Überwachung kann Dir z. B.
Code:
grep . /sys/devices/system/cpu/cpu*/cpufreq/*_max_freq
oder Ähnliches helfen. Falls es noch nicht installiert ist, solltest Du das Paket sensors bzw. besser lm_sensors (http://packages.opensuse-community.org/index.jsp?searchTerm=lm_sensors&distro=openSUSE_111) zur Temperaturüberwachung installieren (und mit sensors-detect einrichten und lm_sensors im Runlevel-Editor aktivieren).

K4m1K4tz3 schrieb:
Also ich würde ihn über das BIOS runter takten.
Ich weiß ja nicht, wie es bei AMD-Prozessoren und -Motherboards ist, aber bei meinem Intel-Prozessor wird dadurch die CPU-Frequenz fix eingestellt. Ein Herunterregeln durch HAL auf in Deinem Fall 1 GHz ist dann nicht mehr möglich, und das scheint mir im vorliegenden Fall eher kontraproduktiv zu sein.
 

panamajo

Guru
Also meiner Meinung nach ist die ganze Konstellation Murks.

Auch ein kompaktes Gehäuse sollte eine vernünftige Kühlung der CPU erlauben. Passt eine entspechende Kühlung nicht in das Gehäuse ist entweder die CPU falsch gewählt oder das Gehäuse Schrott.

Es gibt einen AMD 4850e (EUR 55,-), der hat 2 Cores à max. 2.5GHz (taktet runter auf 1.0GHz und dann braucht das System mit entsprechendem MB inkl. Onboard Grafik <35 W). Um trotzdem die Lüftung bei 2.5GHz hinzubekommen und den Lärmpegel nicht zu strapazieren sollte das Gehäuse mindestens 3HE bereit stellen.

Die CPU Frequenz auch bei benötigter höherer Frequenz zu deckeln ist ja wohl nicht im Sinne des Erfinders.

Just my 2¢
 
Oben