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.
 
Does the output of /sys/module/processor/parameters/max_cstate now say 10 after you downgraded powertop? That would seem very strange. Any difference with 6.17 kernel? My N100 seems to idle at 1.3GHz, which is quite annoying since "back in the day" it would sit at 700MHz most the time.
 
Proxmox VE 9 has intel-microcode package installed by default. You could try uninstalling it to see if there’s any difference, though I don’t recommend it because these boxes already idle at under 15w. Having newer Intel microcode is beneficial, not harmful.
 
Last edited: