No cpufreq on older CPU (AMD FX8350)

jbernardo

New Member
Feb 1, 2025
4
1
3
Hello,
I have an older system running PVE:
AMD FX8350
Asus M5A99X motherboard
48GB PC3-12800 DDR3 RAM
"Random" assortment of SATA, SATA SSD, and NVME drives (I also have my NAS here as a VM with BtrFS RAID 10)

The 8350 is old and runs quite hot. To have the system stable, I have to run the fans on "turbo" mode, making a lot of noise. I was hoping to switch to the powersave governor to see if I could switch to quiet mode on the fans while keeping temperatures under control, and to save a few cents on power. However, and this is the issue, it seems there is no cpufreq for this older CPU. Obviously, CPPC didn't exist then - and checking dmesg proves it:
Code:
# dmesg --level warn | grep amd
[    0.904359] amd_pstate: the _CPC object is not present in SBIOS or ACPI disabled

The problem is that even acpi_cpufreq seems to be missing. /sys/devices/system/cpu/cpufreq/ is empty.
Is there any way I can get a working "powersave" governor on this old system?
 
I investigated a bit further, and found out that there seem to be only three cpufreq modules compiled for proxmox's kernel (and the kernel config isn't available):
Bash:
root@pev:~# ls /usr/lib/modules/$(uname -r)/kernel/drivers/cpufreq/
amd_freq_sensitivity.ko  p4-clockmod.ko  speedstep-lib.ko
root@pev:~# zgrep -E 'CONFIG_X86_(INTEL_PSTATE|AMD_PSTATE|ACPI_CPUFREQ|PCC_CPUFREQ|POWERNOW_K8|P4_CLOCKMOD)=[y]' /proc/config.gz
gzip: /proc/config.gz: No such file or directory
As an example, on a cachyOS kernel there are more modules compiled in, including powernow and acpi-cpufreq:
Bash:
$ ls /usr/lib/modules/$(uname -r)/kernel/drivers/cpufreq/
acpi-cpufreq.ko.zst  amd_freq_sensitivity.ko.zst  p4-clockmod.ko.zst  pcc-cpufreq.ko.zst  powernow-k8.ko.zst  speedstep-lib.ko.zst
$ zgrep -E 'CONFIG_X86_(INTEL_PSTATE|AMD_PSTATE|ACPI_CPUFREQ|PCC_CPUFREQ|POWERNOW_K8|P4_CLOCKMOD)=[y]' /proc/config.gz
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_AMD_PSTATE=y

At this point I am almost tempted to compile my own kernel - I assume that specific support for these old architectures isn't interesting for proxmox. But also I'd rather keep this still capable hardware running, in particular with RAMagedeon supposed to continue for a couple of years now...
Maybe packaging the cpufreq modules as dkms drivers, but I don't have an idea on how to even start.
 
Maybe something from here is of interest to you
Bash:
# grep -Ei "freq|gov" /boot/config-$(uname -r)
CONFIG_ACPI_CPU_FREQ_PSS=y
# CPU Frequency scaling
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
CONFIG_CPU_FREQ_GOV_COMMON=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
# CPU frequency scaling drivers
CONFIG_X86_PCC_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_ACPI_CPUFREQ_CPB=y
CONFIG_X86_AMD_FREQ_SENSITIVITY=m
CONFIG_CPUFREQ_ARCH_CUR_FREQ=y
# end of CPU Frequency scaling
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
CONFIG_CPU_IDLE_GOV_TEO=y
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set
# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
CONFIG_THERMAL_GOV_FAIR_SHARE=y
CONFIG_THERMAL_GOV_STEP_WISE=y
CONFIG_THERMAL_GOV_BANG_BANG=y
CONFIG_THERMAL_GOV_USER_SPACE=y
CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
CONFIG_DEVFREQ_THERMAL=y
# Watchdog Pretimeout Governors
CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y
# CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC is not set
# Intel Uncore Frequency Control
CONFIG_INTEL_UNCORE_FREQ_CONTROL_TPMI=m
CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
# end of Intel Uncore Frequency Control
CONFIG_PM_DEVFREQ=y
# DEVFREQ Governors
CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
CONFIG_DEVFREQ_GOV_PERFORMANCE=y
CONFIG_DEVFREQ_GOV_POWERSAVE=y
CONFIG_DEVFREQ_GOV_USERSPACE=y
CONFIG_DEVFREQ_GOV_PASSIVE=y
# DEVFREQ Drivers
CONFIG_PM_DEVFREQ_EVENT=y
# Frequency Synthesizers DDS/PLL
# Phase-Locked Loop (PLL) frequency synthesizers
# end of Phase-Locked Loop (PLL) frequency synthesizers
# end of Frequency Synthesizers DDS/PLL
I don't have (experience with) this CPU but maybe it's related to Cool & Quiet in the BIOS/UEFI or perhaps you can force things with kernel args.
Also see here: https://wiki.archlinux.org/title/CPU_frequency_scaling
 
Last edited:
  • Like
Reactions: leesteken
Thanks, checking the correct config I see that many more of the cpufreq options are compiled in-kernel:
Bash:
root@pev:~# zgrep -E 'CONFIG_X86_(INTEL_PSTATE|AMD_PSTATE|ACPI_CPUFREQ|PCC_CPUFREQ|POWERNOW_K8|P4_CLOCKMOD)=[y]' /boot/config-$(uname -r)
CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=y
CONFIG_X86_AMD_PSTATE=y
CONFIG_X86_ACPI_CPUFREQ=y
CONFIG_X86_POWERNOW_K8=y
Still, there was no active cpufreq driver - but after a few tests I found out that on this bios Cool & Quiet has to be enabled, as well as C1E (no idea what that is) and APM... Old Asus M5A99X EVO AM3+ motherboard, and only with all of those enabled was I able to get acpi_powerstate working.
Code:
root@pev:~# cpupower frequency-info
analyzing CPU 7:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 7
  CPUs which need to have their frequency coordinated by software: 7
  maximum transition latency: 4.0 us
  hardware limits: 1.40 GHz - 4.00 GHz
  available frequency steps:  4.00 GHz, 1.40 GHz
  available cpufreq governors: conservative ondemand userspace powersave performance schedutil
  current policy: frequency should be within 1.40 GHz and 4.00 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency: 1.40 GHz (asserted by call to hardware)
  boost state support:
    Supported: yes
    Active: yes
    Boost States: 2
    Total States: 7
    Pstate-Pb0: 4200MHz (boost state)
    Pstate-Pb1: 4100MHz (boost state)
    Pstate-P0:  4000MHz
    Pstate-P4:  1400MHz
@Impact - thank you for pointing me to test all Cool&Quiet and related options again, it was the solution. I had previously thought that Cool&Quiet needed to be disabled, but on this motherboard it needs to be on.
 
  • Like
Reactions: Impact