Blame
| f70d3e | deseven | 2025-06-12 13:30:10 | 1 | # C-States |
| 2 | ||||
| 3 | ### Problem |
|||
| 4 | When running Linux, especially older 6.x kernels, you might find that the CPU doesn't use C-states below C1, constantly running on higher frequences and eating power. |
|||
| 5 | ||||
| 6 | ### Solution |
|||
| 7 | For some reason I couldn't make it work with either `acpi_cpufreq` or `amd_pstate`, but [CoreFreq](https://github.com/cyring/CoreFreq) turned out to be a perfect solution once again. |
|||
| 8 | ||||
| 9 | Assuming that you already have it installed and working (otherwise check [[this guide|Guides/Hardware-Monitoring]] first): |
|||
| 10 | ||||
| 11 | ```bash |
|||
| 12 | # /etc/kernel/cmdline |
|||
| 13 | ... initcall_blacklist=acpi_cpufreq_init nmi_watchdog=0 idle=halt amd_pstate=disable tsc=unstable nowatchdog |
|||
| 14 | ``` |
|||
| 15 | ||||
| 16 | ```bash |
|||
| 17 | # /etc/modprobe.d/blacklist.conf |
|||
| 18 | k10temp |
|||
| 19 | acpi_cpufreq |
|||
| 20 | ``` |
|||
| 21 | ||||
| 22 | ```bash |
|||
| 23 | # /etc/modprobe.d/corefreqk.conf |
|||
| 24 | options corefreqk Register_ClockSource=1 Register_CPU_Freq=1 Register_Governor=1 Register_CPU_Idle=1 Override_SubCstate="1,1,1,1,1,1,0,0" |
|||
| 25 | ``` |
|||
| 26 | ||||
| 93e1f1 | deseven | 2025-06-12 13:38:37 | 27 | Don't forget to run `update-initramfs -u -k all` and reboot after making these changes. |
| 28 | ||||
| 29 | To check that it works, run `corefreq-cli` and go first to **Menu > Settings**, make sure that CPU-IDLE driver is ON: |
|||
| 30 |  |
|||
| 31 | ||||
| 32 | Then go to **Menu > Kernel data**, make sure that CPU-Idle driver is set to `corefreqk-idle` and that the Idle Limit is set to C6: |
|||
| 33 |  |
|||
| 34 | ||||
| 35 | Finally, in the **Frequency** or **Idle C-States** views you'll be able to see that the CPU now actually goes to lower frequencies/power: |
|||
| 36 |  |