powerd: CPU-Frequenz bei Intel-CPUs extrem niedrig im Vergleich zu Windows/Linux oder AMD

rMarkus

Chuck The Plant
Hallo,

habe in der letzten Zeit von AMD auf Intel umgerüstet und unter FreeBSD ist mir aufgefallen, dass die Intel-CPUs dort sehr tief heruntertakten.




Die möglichen Frequenzen der CPU kann man wie folgt ermitteln:
Code:
sysctl dev.cpu.0.freq_levels

Folgende Werte habe ich nach meinen Erinnerungen gesehen und sie in einer Tabelle gegenübergestellt:

Code:
CPU | minimale Frequenz FreeBSD  | minimale Frequenz Linux, Windows
AMD K8 | 800 MHz | 800 MHz
AMD K10 | 800 MHz | 800 MHz
AMD Bulldozer | 1400 MHz | 1400 MHz
Intel Clarkdale | 150 MHz | 1600 MHz
Intel Sandy/Ivy Bridge | 387 MHz | 1600 MHz

Mein Problem damit ist, dass mein neuer Sandy-Bridge Xeon dadurch sogar auf der Console langsamer wirkt als mein alter K8-Opteron.

FreeBSD wollte ich eigentlich im Standard betreiben ohne Einstellung der Frequenzen, aber das kommt mir irgendwie etwas überzogen wenig vor.


PS: Den Beitrag Anfang des Jahres habe ich schon gelesen: http://www.bsdforen.de/threads/freq-levels.30781/#post-259625
 
Du musst einfach ACPI Throttel abschalten. Dazu in die /boot/loader.conf:
Code:
hint.acpi_throttle.0.disabled="1"
In FreeBSD 11-CURRENT ist es endlich, endlich und endlich in Standardeinstellung abgeschaltet.
 
Danke Yamagi.

Mein Clarkdale-Xeon ist von der Einstellugn voellig unbeeindruckt und taktet weiter bis 150 MHz runter:

Code:
cat /boot/loader.conf
  hint.acpi_throttle.0.disabled="1"

uname -a
FreeBSD backup.local 8.2-RELEASE-p3 FreeBSD 8.2-RELEASE-p3 #0: Tue Sep 27 18:45:57 UTC 2011  root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

sysctl dev.cpu.0.freq
dev.cpu.0.freq: 150


Erst in Kombination mit "hint.p4tcc.0.disabled=1" bringt es den gewünschten Erfolg:
Quelle: https://wiki.freebsd.org/TuningPowerConsumption

/boot/loader.conf
Code:
hint.p4tcc.0.disabled=1
hint.acpi_throttle.0.disabled=1

Ergebnis:
Code:
sysctl dev.cpu.0.freq
dev.cpu.0.freq: 1200

sysctl dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2268/33000 2133/26000 2000/23000 1867/21000 1733/18000 1600/16000 1467/15000 1333/13000 1200/12000
# Hier fehlnen nun auch wie gewünscht die Frequenzen unterhalb 1200 MHz bis runter auf 150 MHz

a) Was mir nun noch fehlt ist eine Erklärung?
b) Wirkt das bei allen FreeBSD-Versionen so?
 
a) Das schrieb ich ja schon in dem verlinkten Beitrag. P4TCC war der Überhitzungsschutz des Pentium 4. FreeBSD missbraucht ihn in Standardeinstellung, um noch niedrigere Frequenzen als sonst möglich wären zu erzwingen. Das ist ziemlich böse und auf aktuelleren CPUs sinnlos bis gefährlich. Abschalten schadet definitiv nicht.

b) Müsste es. Ich glaube aber, dass in 11-CURRENT beide Tuneables als Standardeinstellung 1 (disabled) haben.
 
Vielen Dank Yamagi.

Nachdem das unter FreeBSD 8.2 und Clarkdale Xeon mit beiden Schaltern funktionierte, habe ich das gleich auch auf FreeBSD 7.4 und Sandy Bridge Xeon versucht:

Code:
hint.p4tcc.0.disabled=1
hint.acpi_throttle.0.disabled=1
==> Nur noch 3100 MHz moeglich

Code:
hint.acpi_throttle.0.disabled=1
==> Alle Frequenzen inkl. der niedrigen Frequenzen unter 1400 MHz bis runter zu 387 MHz möglich, also wirkungslos.

Wird Zeit fuer ein Upgrade.

PS: Meine Tabelle ist falsch, denn der Clarkdale hat 1200 und nicht 1400 MHz im IDLE. Kann man das noch korrigieren?
 
Es könnte sein, dass das alte FreeBSD 7.4 einfach Sandy Bridge und neuere Architekturen nicht unterstützt und daher die Frequenztabellen nicht auslesen kann. Aber ist die Frage, ob man deswegen aktualisieren muss. Seitdem Intel mit Penryn Power Gating eingeführt hat, ist die Ersparnis durch Taktabsenkung eher gering. Es hilft zwar dem Turbo-Mode aber wirklich wirksam wurde der erst mit Ivy Bridge. Bei Sandy Bridge hat er noch zu viele Einschränkungen.

Wie du den minimalen Takt weiter senken kannst, weiß ich nicht. Das Sysctl "debug.cpufreq.lowest" scheint mir nur eine untere Grenze festzulegen. Und nun am Kernel rumzupatchen ist dann doch etwas über, würde ich sagen.
 
Zurück
Oben