How do I disable CPU throttling
Thomas D. Dean
tomdean at wavecable.com
Tue Jul 13 04:56:15 UTC 2021
On 7/12/21 8:17 PM, Paul Procacci wrote:
>
> sysctl dev.cpu.0 | grep freq
dev.cpu.0.freq_levels: 3700/4070 2800/2800 2200/1980
dev.cpu.0.freq: 2200
These numbers are in GHz.
What I want to do is understand where the numbers 3700 and 4070 come from.
It seems powerd_profile picks 3700 as the highest value and 2200 as the
lowest value.
The CPU specs say 4500.
How does the code get the numbers in dev.cpu.0.freq_levels?
I read the code in /usr/src/sys/kern/kern_cpu.c and found a hint
/*
* Used by the cpufreq core, this function will populate *level with the
* current frequency as either determined by a cached value
* sc->curr_level, or in the case the lower level driver has set the
** CPUFREQ_FLAG_UNCACHED flag, it will obtain the frequency from the
** driver itself.
*/
levels = malloc(count * sizeof(*levels), M_TEMP, M_NOWAIT);
CPUFREQ_LEVELS(sc->dev, levels, &count)
/*
* If still booting and secondary CPUs not started yet, don't allow
* changing the frequency until they're online. This is because we
* can't switch to them using sched_bind() and thus we'd only be
*** switching the main CPU. XXXTODO: Need to think more about how to
*** handle having different CPUs at different frequencies.
*/
The numbers 3700, 4070, 2800, 2200, 1980 can not be changed with boot or
runtime config. These values are derived or read from BIOS.
>
> On Mon, Jul 12, 2021 at 5:01 PM Thomas D. Dean <tomdean at wavecable.com
> <mailto:tomdean at wavecable.com>> wrote:
>
> On 7/12/21 1:12 PM, Paul Procacci wrote:
> > sysctl's get set generally in /etc/sysctl.conf
> >
> > dev.cpu.0.freq_levels <-- This format is called a mib in the native
> > parlance.
> > sysctl.conf(5) and sysctl(8) go into much further detail.
> >
> > ~Paul
>
>
> > grep -Rail freq_levels /etc/*
> shows the source of freq_levels
>
> I believe this is hardwired somewhere. Maybe read from the cpu? BIOS?
>
>
> Most mib's have defaults. They are compiled into the kernel statically
> or made available to it via kernel modules.
> What you are looking for is located in this source file:
> /usr/src/sys/kern/kern_cpu.c
>
> Really though, I can tell that's way too much for ya. Instead what you
> are looking to do is
> detailed in rc.conf(5):
>
> " powerd_enable
> (bool) If set to "YES", enable the system power control
> facility with the powerd(8) daemon."
>
> AND
>
> " performance_cpu_freq
> (str) CPU clock frequency to use while on AC power. The
> string "LOW" indicates that cpufreq(4) should use the
> lowest
> frequency available while "HIGH" indicates that the
> highest
> frequency (less power savings) should be used."
>
> What you want to most likely do is the following:
>
> echo powerd_enable=\"YES\" >> /etc/rc.conf
> echo performance_cpu_freq=\"HGH\" >> /etc/rc.conf
>
> Follow that up by restarting the powerd daemon:
>
> /etc/rc.d/powerd restart
>
> If you have a supported cpu, which I have no reason to believe
> otherwise, your
> goal of running your machine at full speed without throttling should be
> within your grasp.
>
> powerd, a userland daemon, controls this mib as necessary on the fly.
>
> rc.conf(5) is a godsend for stuff like this and its documentation is
> amazing.
>
> On another note, I see no reason to change this at all. CPU's are
> nearly instantaneous
> at scaling as necessary to accomodate loads for their needs. I digress
> however.
>
> Take Care.
More information about the freebsd-questions
mailing list