Intel N305 issues with C-States after upgrading to Proxmox 9

Ren0

New Member
Jan 8, 2025
4
0
1
I recently did a clean install of Proxmox 9. Everything is working fine so far, except for the C-States.

On Proxmox 8 my system would usually idle in C6–C8, but after upgrading to Proxmox 9 it doesn’t reach any C-State at all.

What I’ve noticed

The idle driver seems to be missing:
cat /sys/devices/system/cpu/cpuidle/current_driver
none

Kernel cmdline shows:
cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-6.14.8-2-pve root=ZFS=/ROOT/pve-1 ro root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet intel_idle.max_cstate=0

In my UEFI C-States are disabled by default.

  • With Proxmox 8 this wasn’t an issue, powertop still showed that C-States were being used
  • With Proxmox 9, however, the system won’t boot anymore once I enable C-States in the BIOS (unless I limit them to something like C6)
This is really frustrating, since I specifically chose this platform for its energy efficiency, and right now I’m seriously considering downgrading back to Proxmox 8.

Is anyone else experiencing C-State issues on the Intel N platform after upgrading to Proxmox 9?
Did you manage to find a fix or workaround?
 
I’ve got three Intel hosts on Proxmox 9. Before the upgrade they would drop down to C10 without issues. After updating, as soon as I start a Windows VM (Linux VMs are fine), the system won’t enter any C-States at all.
 
Intel N100 CPU.
Before upgrade to Proxmox 9 my system would hit C10 in idle without any issues.
After upgrade I can't get higher C-state than C8.
C8 is not that bad but still, this is a regression...

C-states are enabled in BIOS and idle driver is there:

root@prox:~# cat /sys/devices/system/cpu/cpuidle/current_driver
intel_idle
 
Maybe try proxmox-kernel-6.8 on PVE 9 as a work-around or just to test whether it's caused by the kernel/drivers or something else in PVE 9?
 
Maybe try proxmox-kernel-6.8 on PVE 9 as a work-around or just to test whether it's caused by the kernel/drivers or something else in PVE 9?
Actually I just did that as I had kernel 6.8 still installed after upgrade from PVE 8 to PVE 9.
Situation remains the same so I suspect it's something else than the kernel causing this issue.
 
  • Like
Reactions: leesteken
Proxmox 9 seems to have some max C-state config going on for "package" ...

Both /sys/module/processor/parameters/max_cstate and pkg-cstate-limit=8 part of turbostat -S -n 5 output indicate a maximum c-state of 8 what aligns with my powertop output...

I have a hard time understanding why that is / where that comes from...

Bash:
root@prox:~# cat /sys/module/intel_idle/parameters/max_cstate
9
root@prox:~# cat /sys/module/processor/parameters/max_cstate
8

root@prox:~# turbostat -S -n 5
turbostat version 2024.07.26 - Len Brown <lenb@kernel.org>
Kernel command line: initrd=\EFI\proxmox\6.8.12-14-pve\initrd.img-6.8.12-14-pve root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt
CPUID(0): GenuineIntel 0x20 CPUID levels
CPUID(1): family:model:stepping 0x6:be:0 (6:190:0) microcode 0x1d
CPUID(0x80000000): max_extended_levels: 0x80000008
CPUID(1): SSE3 MONITOR - EIST TM2 TSC MSR ACPI-TM HT TM
CPUID(6): APERF, TURBO, DTS, PTM, HWP, HWPnotify, HWPwindow, HWPepp, HWPpkg, EPB
cpu0: MSR_IA32_MISC_ENABLE: 0x00850089 (TCC EIST MWAIT PREFETCH TURBO)
CPUID(7): No-SGX No-Hybrid
CPUID(0x15): eax_crystal: 2 ebx_tsc: 42 ecx_crystal_hz: 38400000
TSC: 806 MHz (38400000 Hz * 42 / 2 / 1000000)
CPUID(0x16): base_mhz: 800 max_mhz: 3400 bus_mhz: 100
cpu0: MSR_PLATFORM_INFO: 0x40739f0810800
7 * 100.0 = 700.0 MHz max efficiency frequency
8 * 100.0 = 800.0 MHz base frequency
cpu0: MSR_TURBO_RATIO_LIMIT: 0x1d1d1d1d1d1f2222
29 * 100.0 = 2900.0 MHz max turbo 8 active cores
29 * 100.0 = 2900.0 MHz max turbo 7 active cores
29 * 100.0 = 2900.0 MHz max turbo 6 active cores
29 * 100.0 = 2900.0 MHz max turbo 5 active cores
29 * 100.0 = 2900.0 MHz max turbo 4 active cores
31 * 100.0 = 3100.0 MHz max turbo 3 active cores
34 * 100.0 = 3400.0 MHz max turbo 2 active cores
34 * 100.0 = 3400.0 MHz max turbo 1 active cores
cpu0: MSR_CONFIG_TDP_NOMINAL: 0x00000008 (base_ratio=8)
cpu0: MSR_CONFIG_TDP_LEVEL_1: 0x00000000 ()
cpu0: MSR_CONFIG_TDP_LEVEL_2: 0x00000000 ()
cpu0: MSR_CONFIG_TDP_CONTROL: 0x80000000 ( lock=1)
cpu0: MSR_TURBO_ACTIVATION_RATIO: 0x00000000 (MAX_NON_TURBO_RATIO=0 lock=0)
cpu0: cpufreq driver: intel_pstate
cpu0: cpufreq governor: performance
cpufreq intel_pstate no_turbo: 0
cpu0: MSR_MISC_PWR_MGMT: 0x000030c2 (ENable-EIST_Coordination ENable-EPB DISable-OOB)
cpu0: MSR_PM_ENABLE: 0x00000001 (HWP)
cpu0: MSR_HWP_CAPABILITIES: 0x01070822 (high 34 guar 8 eff 7 low 1)
cpu0: MSR_HWP_REQUEST: 0x00002222 (min 34 max 34 des 0 epp 0x0 window 0x0 pkg 0x0)
cpu0: MSR_HWP_REQUEST_PKG: 0x8000ff01 (min 1 max 255 des 0 epp 0x80 window 0x0)
cpu0: MSR_HWP_INTERRUPT: 0x00000005 (EN_Guaranteed_Perf_Change, Dis_Excursion_Min)
cpu0: MSR_HWP_STATUS: 0x00000004 (No-Guaranteed_Perf_Change, Excursion_Min)
cpu0: EPB: 7 (custom)
cpu0: MSR_IA32_POWER_CTL: 0x00f4005b (C1E auto-promotion: ENabled)
cpu0: MSR_PKG_CST_CONFIG_CONTROL: 0x74008008 (UNdemote-C1, demote-C1, locked, pkg-cstate-limit=8 (unlimited))
/dev/cpu_dma_latency: 2000000000 usec (default)
current_driver: intel_idle
current_governor: menu
current_governor_ro: menu
cpu0: POLL: CPUIDLE CORE POLL IDLE
cpu0: C1E: MWAIT 0x01
cpu0: C6: MWAIT 0x20
cpu0: C8: MWAIT 0x40
cpu0: C10: MWAIT 0x60
cpu0: MSR_PKGC3_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC6_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC8_IRTL: 0x00000000 (NOTvalid, 0 ns)
cpu0: MSR_PKGC10_IRTL: 0x00000000 (NOTvalid, 0 ns)
RAPL: 43691 sec. Joule Counter Range, at 6 Watts
cpu0: MSR_RAPL_POWER_UNIT: 0x000a0e03 (0.125000 Watts, 0.000061 Joules, 0.000977 sec.)
cpu0: MSR_PKG_POWER_INFO: 0x00000030 (6 W TDP, RAPL 0 - 0 W, 0.000000 sec.)
cpu0: MSR_PKG_POWER_LIMIT: 0x4280c800dd8050 (UNlocked)
cpu0: PKG Limit #1: ENabled (10.000 Watts, 28.000000 sec, clamp ENabled)
cpu0: PKG Limit #2: ENabled (25.000 Watts, 0.002441* sec, clamp DISabled)
cpu0: MSR_VR_CURRENT_CONFIG: 0x00000270
cpu0: PKG Limit #4: 78.000000 Watts (UNlocked)
cpu0: MSR_DRAM_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: DRAM Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP0_POLICY: 9
cpu0: MSR_PP0_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: Cores Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_PP1_POLICY: 13
cpu0: MSR_PP1_POWER_LIMIT: 0x00000000 (UNlocked)
cpu0: GFX Limit: DISabled (0.000 Watts, 0.000977 sec, clamp DISabled)
cpu0: MSR_IA32_TEMPERATURE_TARGET: 0x80690000 (105 C) (105 default - 0 offset)
cpu0: MSR_IA32_PACKAGE_THERM_STATUS: 0x88430800 (38 C)
cpu0: MSR_IA32_PACKAGE_THERM_INTERRUPT: 0x00000003 (105 C, 105 C)
cpu0: MSR_MISC_FEATURE_CONTROL: 0x00000004 (L2-Prefetch L2-Prefetch-pair L1-Prefetch L1-IP-Prefetch)

Anyone have an idea?

On proxmox 8 I never had to worry about any of this. I just ran powertop --auto-tune on boot via crontab entry and was able to reliably reach C10.
 
Last edited:
Interestingly after downgrading powertop from 2.15 to 2.14 I can see my system reaching C10 C-state reliably again.

I downgraded by downloading powertop .deb file from Debian bookworm repository and installing via dpkg.


The question is wether this is just a display issue in powertop or powertop applying wrong optimization via --auto-tune when comparing version 2.14 and 2.15.