ACPI/CPU: C2 wärmer als C1

Tronar

aus Überzeugung altmodisch
An alle Hardware-Experten!

Eine etwas seltsame Beobachtung habe ich da gemacht, und ich frage mich, ob einer dafür eine mögliche Erklärung hat.

Zunächst als Hintergrund-Information ein paar Sysctls:
hw.acpi.cpu.cx_lowest: C1
dev.cpu.0.cx_supported: C1/0 C2/50
dev.cpu.0.cx_lowest: C1
dev.acpi_perf.0.freq_settings: 1600/0 1200/0
dev.p4tcc.0.freq_settings: 10000/-1 8750/-1 7500/-1 6250/-1 5000/-1 3750/-12500/-1
dev.cpu.0.freq_levels: 1600/0 1400/0 1200/0 1050/0 900/0 750/0 600/0
debug.cpufreq.lowest: 600

Letztere Einstellung war nötig, weil mein Laptop bei besonders kleinen Frequenzen (eigentlich gingen 150 MHz) zum Abstürzen neigt. Ist das eigentlich ein Hardware-Problem oder ein Kernel-Bug? Wie auch immer, jedenfalls läuft die CPU, wenn sie nichts zu tun hat, mit 600 MHz.

Wenn ich jetzt, um ein wenig Strom zu sparen bzw. Lüfterlärm zu vermeiden, hw.acpi.cpu.cx_lowest auf C2 setze, geschieht seltsamerweise genau das Gegenteil: Der Rechner wird schneller warm, die Lüfter springen etwas häufiger an. Wie ist das möglich?

... fragt sich
Tronar


Eine Teilmenge meiner dmesg:

FreeBSD 7.1-RELEASE #0: Thu Jan 1 14:37:25 UTC 2009
root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Pentium(R) 4 Mobile CPU 1.60GHz (1595.30-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf24 Stepping = 4
Features=0x3febf9ff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM>
real memory = 268312576 (255 MB)
avail memory = 244289536 (232 MB)
kbd1 at kbdmux0
ath_hal: 0.9.20.3 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
acpi0: <DELL CPi R > on motherboard
acpi0: [ITHREAD]
acpi0: reservation of 0, 9fc00 (3) failed
acpi0: reservation of 100000, fef0000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
acpi_acad0: <AC Adapter> on acpi0
battery0: <ACPI Control Method Battery> on acpi0
battery1: <ACPI Control Method Battery> on acpi0
acpi_lid0: <Control Method Lid Switch> on acpi0
acpi_button0: <Power Button> on acpi0
acpi_button1: <Sleep Button> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
cpu0: <ACPI CPU> on acpi0
acpi_perf0: <ACPI CPU Frequency Control> on cpu0
p4tcc0: <CPU Frequency Thermal Control> on cpu0

Mein Computer ist ein Dell Inspiron 8200 mit A11-BIOS.
Die Ausgaben von "acpidump" habe ich auch angehängt.
 

Attachments

Ich hab beobachtet, dass mein FreeBSD 7-STABLE auf meinem Pentium-M total anfängt zu laggen, wenn ich cx_lowest auf C2 oder niedriger stelle, obwohl die Latzenz nach den Angaben nur von 0 auf 1 steigt (schätze mal das sind µSec)

Beobachtet jemand etwas Ähnliches ?
 
Noch was:

Wenn ich, nachdem ich dev.cpu.0.cx_lowest auf C2 geschaltet habe, mit einer Funktion des SMM BIOS die BIOS-interne Lüftersteuerung deaktiviere (dafür habe ich ein spezielles Programm - und ja, natürlich ist das gefährlich!), dann erscheint kurz darauf auf der Konsole diese Meldung, vermutlich vom cpufreq-Treiber:

cpu0: too many short sleeps, backing off to C1

... und richtig, "sysctl dev.cpu.0.cx_lowest" zeigt mir wieder "C1" an.

Was nun genau diese BIOS-Funktion tut, ist nicht bekannt, aber grundsätzlich scheint mit dem C2-Zustand etwas schlecht zu laufen.

Hilft Euch das irgendwie weiter?
Tronar
 
Ich gehe mal davon aus, dass ihr die USB-Module geladen oder im Kernel fest eingebacken habt. Damit ist C2 für das System unerreichbar, denn FreeBSDs alte USB-Implementierung kann kein USB Powersave und hält damit die CPU immer auf C1. Sobald ihr C2 ermöglicht, gibt es Ärger. C2 und C3 kann man erst in -CURRENT erreichen, dort sind auch ein paar mehr der üblichen verdächtigen Module neben dem Klassiker USB entsprechend angepasst worden.
 
Ich gehe mal davon aus, dass ihr die USB-Module geladen oder im Kernel fest eingebacken habt.
Ja, es ist ja ein GENERIC, wie in der "dmesg" vermerkt.
Damit ist C2 für das System unerreichbar, denn FreeBSDs alte USB-Implementierung kann kein USB Powersave und hält damit die CPU immer auf C1. Sobald ihr C2 ermöglicht, gibt es Ärger.
Aaargh! Davon hat mir Freund Google nichts verraten.

Die Dokumentation auf diesem Gebiet ist generell nicht besonders hilfreich, finde ich. Ist halt noch ne Baustelle!

Was z. B. ist der Unterschied zwischen den Sysctls hw.acpi.cpu.cx_lowest und dev.cpu.0.cx_lowest?

Wo kann man solche Dinge nachlesen - außer im Source code, meine ich? Gibt es irgendwo eine detaillierte Anleitung in der Art: "Wie baue ich mir ein System zusammen mit allen erdenklichen ACPI-Funktionen und welche Konfigurationsmöglichkeiten gibt es überhaupt?"

Schönen Abend und danke,
Tronar
 
hw.acpi.cpu.cx_lowest ist ein "Superwert", der alle Prozessoren abdeckt. dev.cpu.0.cx_lowest ist hingegen der Wert, der nur den Prozessor "0" regelt. Du hast nur einen, daher wird es nicht so deutlich, aber bei mehreren Prozessoren hat denn jeder einzelne dort sein sysctl zum Einstellen.

Ja, ACPI ist schlecht dokumentiert. Eigentlich unterstützt FreeBSD ACPI vollständig, im kommenden 8.0 wird "suspend to ram" auch endlich unter amd64 funktionieren. Das ist die Theorie. In der Praxis ist praktisch jedes ACPI-Gerät standardinkonform, was FreeBSD aus dem Tritt bringt. Linux und gerade Windows haben da zehntausende Zeilen Programmcode und diverse Anpassungen an Hardware, um das wieder auszugleichen. Es läuft darauf hinaus, dass ACPI unter FreeBSD immer eine wackelige und stiefmütterlich behandelte Sache war, deren Wichtigkeit sich erst nach und nach gezeigt hat und was zunehmend einen Fokus in der Entwicklung bekommt. Wirkliche Doku ist mir auch nicht bekannt, es hat sie halt keiner geschrieben. Empfehlen kann ich nur das Kapitel im Handbuch[1] und die Manpage[2]. Aber beides ist nicht soooo toll.

1: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/acpi-debug.html
2: http://www.freebsd.org/cgi/man.cgi?...ion=0&manpath=FreeBSD+7.1-RELEASE&format=html
 
Back
Top