I am trying to tweak my system for power efficency and was therefore hoping to enable the C6 (deep sleep) state. However, the kernel acpi_idle driver only seems to be registering states C0 to C2. Is there any way to enable the extra c-states? Please see below for the output of some relevant (perhaps) commands. Thanks in advance.
- AMD FX-6300
- Asus M5A97 LE R2.0
- C6 enabled
- C1e enabled
root / # uname -r 3.8.10-1-ARCH
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
root / # cat /sys/devices/system/cpu/cpuidle/current_driver acpi_idle
126.96.36.199.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?
Last edited by blackbeard (2013-05-08 22:20:26)
It's probably fine.
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.