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 |  |