Hab heute mehrere Stunden zu dem Thema gegoogelt, weil ich bei dem Projekt von
WMI wegkommen wollte. Derzeit bleibe ich bei
WMI, weil viele Werte wie z.B. DPCRate aus Win32_PerfFormattedData_Counters_ProcessorInformat ion nicht ohne
WMI oder Kerneltreiber zu emitteln sind.
Bei der CPU Frequenz ist alles sehr problematisch. Irgendwelche Takte zu zählen ist genauso ungenau wie die
WMI Werte. Meine Kiste ist von 4 auf 4.6 Ghz übertaktet. Die CPU Frequenz wird von CPU-Z und HWInfo64 korrekt als 4,6 GHz unter Last angezeigt,
WMI und die Taktzählerei über Performance Counters ergibt 4.0 GHz. Richtige Werte bekommt man nur über einen Kernel Treiber, was CPUZ und HWInfo 64 ja machen.
Wenn eine x86 CPU überhitzt und drosselt geht sie nicht auf Minimaltakt runter (d.h. unter den Nominaltakt, Turbo bleibt natürlich aus), was bei vielen ARM Prozessoren der Fall ist, sondern lässt Takte aus. Es gibt ein hin und her zwischen C-States und Nominaltakt. CPUZ etc zeigen dann aber konstant den Nominaltakt an.
Wenn weniger als 1GHz anliegt hat die CPU entweder nichs zu tun, oder Stromsparprofil ist aktiv. Wenn weniger als 1GHz anliegt und das Delta von TSystem_Performance_Information64.IdleTime in Vergleich zu Systemtime unter 10% liegt kann man sicher davon ausgehen dass die CPU idle ist. Die alleinige Betrachtung der Idletime reicht auf keinem Fall aus, weil sich die Prozentwerte zu Systemtime zwischen 800Mhz und 4GHz nicht ändern. Ein Idle-Wert von 20% bei 800MHz hat ja eine ganz andere Bedeutung wie ein Idle-Wert von 20% bei 4GHz.