Issue with CPU Frequency Scaling on Intel Xeon E3-1225 v6 in FreeBSD 14.2

I’m running into an issue with CPU frequency scaling on my Intel Xeon E3-1225 v6 processor under FreeBSD 14.2. For context, I have two systems: one with an Intel Xeon E5-2660 v4 and another with the E3-1225 v6, both on FreeBSD 14.2. On the E5-2660 v4, frequency scaling works flawlessly using the est module—the CPU drops to 1200MHz under low load as expected. However, on the E3-1225 v6, which uses the hwpstate_intel module by default, the frequency stays locked at 3511MHz even under low load, preventing any power savings.

After reviewing the official Intel specifications for the E3-1225 v6 (Intel Xeon E3-1225 v6 Specifications), I found that this processor only supports Intel SpeedStep Technology (EST) and does not support Hardware P-states (HWP). This makes me suspect that FreeBSD 14.2 is incorrectly loading the hwpstate_intel module for this CPU when it should be using est instead。

I will try load est (cpufreq.ko) later。。

1741755444528.png
 
Set performance_cx_lowest to "Cmax" in rc.conf. C-states have by far the biggest effect on power draw and temperature, frequency scaling (especially software-controlled) isn't really needed if idle cores are simply turned off...

Also for some CPUs with hardware-controlled frequency scaling the current frequency isn't reported via the sysctl, instead it shows a fixed value above the standard frequency; usually some weird odd number like that 3511 you are seeing.
 
the voltage/freq table is requested via acpi
if that somehow fails then it won't work
some older cpus have hardcoded tables. i hacked support for adding a table via loader.conf for an older cpu (core2duo)
 
Set performance_cx_lowest to "Cmax" in rc.conf. C-states have by far the biggest effect on power draw and temperature, frequency scaling (especially software-controlled) isn't really needed if idle cores are simply turned off...

Also for some CPUs with hardware-controlled frequency scaling the current frequency isn't reported via the sysctl, instead it shows a fixed value above the standard frequency; usually some weird odd number like that 3511 you are seeing.
Set performance_cx_lowest to "Cmax" in rc.conf. C-states have by far the biggest effect on power draw and temperature, frequency scaling (especially software-controlled) isn't really needed if idle cores are simply turned off...

Also for some CPUs with hardware-controlled frequency scaling the current frequency isn't reported via the sysctl, instead it shows a fixed value above the standard frequency; usually some weird odd number like that 3511 you are seeing.
Very good, I did as you said, the frequency has changed, though the change is not very obvious. The CPU frequency can be reduced to around 1200Mhz, which might be due to the hwpstate_inte driver being quite sensitive at the hardware level! Below are the adjustments I made:
## /etc/rc.conf performance_cx_lowest="Cmax"
economy_cx_lowest="Cmax" ## /etc/sysctl.conf machdep.hwpstate_pkg_ctrl=0 dev.hwpstate_intel.0.epp=100 dev.hwpstate_intel.1.epp=100 dev.hwpstate_intel.2.epp=100 dev.hwpstate_intel.3.epp=100 Then, I also tried using the est driver of cpufreq.ko, combined with the powerd service, and the CPU frequency could drop to 800Mhz, with a very noticeable effect.
 
Back
Top