The ACPI standard only defines four CPU power states from C0 to C3. However any deeper states such as C1E, C4, C5, and C6 are known only to the hardware and are automatically used when idling, so the operating system only sees them included in C2 or C3. As AMD C1E is essentially the same as C3 is probably why it's no longer included. However for Intel there is the intel_idle module which adds hardcoded knowledge of their CPUs deeper CPU power states.
The cpupower monitor has "Fam_14h" support which can show time spent in C6 sleep which works for my E-450 but not my A10-5700 or your FX-6300 which are "Fam-15h". We just need someone to update it!
The _CST object is defined in the SSDT tables rather than DSDT tables.
]]>2.5.3.6.1 _CST
The _CST object should be generated for each core as follows:
• Count = 1.
• Register = MSRC001_0073[CstateAddr] + 1.
• Type = 2.
• Latency = 100.
• Power =0.
Should all the c-states be labeled with the same latency and power (0.)? If not, any idea where I can find the correct values?
]]>Hardware:
- AMD FX-6300
- Asus M5A97 LE R2.0
Bios settings:
- C6 enabled
- C1e enabled
Kernel:
root / # uname -r
3.8.10-1-ARCH
cpupower output:
root / # cpupower monitor
|Mperf || Idle_Stats
CPU | C0 | Cx | Freq || POLL | C1 | C2
0| 0.18| 99.82| 1400|| 0.00| 0.00| 99.84
1| 0.09| 99.91| 1402|| 0.00| 0.00| 99.90
2| 0.13| 99.87| 1396|| 0.00| 0.00| 99.88
3| 0.13| 99.87| 1402|| 0.00| 0.00| 99.87
4| 0.09| 99.91| 1398|| 0.00| 0.00| 99.91
5| 0.02| 99.98| 1397|| 0.00| 0.00| 99.99
root / # cpupower monitor -l
Monitor "Mperf" (3 states) - Might overflow after 922000000 s
C0 [T] -> Processor Core not idle
Cx [T] -> Processor Core in an idle state
Freq [T] -> Average Frequency (including boost) in MHz
Monitor "Idle_Stats" (3 states) - Might overflow after 4294967295 s
POLL [T] -> CPUIDLE CORE POLL IDLE
C1 [T] -> <null>
C2 [T] -> ACPI IOPORT 0x815
cpuidle driver:
root / # cat /sys/devices/system/cpu/cpuidle/current_driver
acpi_idle