Disable "ondemand" CPU scaling daemon

43,709

Solution 1

Ubuntu prior to 18.04

Instead of disabling execution of the /etc/init.d/ondemand (as suggested by George) script you should use the this command

sudo update-rc.d ondemand disable

To make the init system not start the script, this is the recognized way of doing it! Disabling the exec permission (sudo chmod -x /etc/init.d/ondemand) might be overwritten if the package is updated.

Ubuntu 18.04+

Ubuntu relocated this script to ondemand.service which execute /lib/systemd/set-cpufreq; use this command to disable the service

~$ sudo systemctl disable ondemand
Removed /etc/systemd/system/multi-user.target.wants/ondemand.service.

Solution 2

Frequency scaling isn't static. As soon as there is work to do, the CPU hops into action, P states boost up, and everything flies.

It's enabled because it's widely seen as a good thing. Saves you energy (good for your wallet and the environment). Keeps heat down (so important in a server room). And it's pretty unnoticeable.

Moreover on modern Intel chips, if you have scaling on you can use "turbo boost" where one core will run at higher-than-stock speeds for a time. This is very useful for spikes of single-threaded work. Without scaling enabled, you don't get this.

Solution 3

Set all CPUs to performance governor:

for GOVERNOR in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; \
do \
    echo "performance" | sudo tee $GOVERNOR; \
done

All supported governors by Linux kernel:

  • performance Run the CPU at the maximum frequency.
  • powersave Run the CPU at the minimum frequency.
  • userspace Run the CPU at user specified frequencies.
  • ondemand Scales the frequency dynamically according to current load. Jumps to the highest frequency and then possibly back off as the idle time increases.
  • conservative Scales the frequency dynamically according to current load. Scales the frequency more gradually than ondemand.
  • schedutil Scheduler-driven CPU frequency selection

See https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

Solution 4

On some systems, the 'ondemand' governor is unfortunately broken.

This is the case for "Intel(R) Core(TM)2 Quad CPU Q9300 @ 2.50GHz" and kernel 2.6.32-42.

The kernel thinks it can set the frequency individually for each CPU while the hardware actually only allows setting the frequency on groups of several CPUs (e.g. CPU 0 and 1 together, and CPU 2 and 3 together).

You may find out that the kernel isn't aware of this by looking at the /sys/devices/system/cpu/cpu*/cpufreq/affected_cpus files which contain "0", "1", "2", "3" instead of "0 1", "0 1", "2 3", "2 3".

The visible effect of this missmatch is a single-threaded process that starts running full speed on one CPU (the 'ondemand' governor reacts fast), and then, after about 20 seconds (depends on setting details), looses some of its speed.

The reason is the OS, with the 'ondemand' governor, periodically reapplies low freqs on the idle CPUs, not expecting that it will also implicitly change the freq of our busy CPU. It's not even visible when you look at /sys/devices/system/cpu/cpu*/cpufreq/*cur_freq or /proc/cpuinfo, the OS is just not aware of it!

So, on these systems the solution is to switch back to the simple 'performance' governor.

PS: In my case, running the CPUs constantly at their full freq didn't change anything concerning fan noise. I suppose when a CPU is idling, a lower or higher frequency will not have much impact on its power usage.

Solution 5

You could install the rcconf debian tool:

sudo apt-get install rcconf

then disable the "ondemand" service from there.

Share:
43,709

Related videos on Youtube

A Student at a University
Author by

A Student at a University

Updated on September 17, 2022

Comments

  • A Student at a University
    A Student at a University over 1 year

    I have a server that, as of the upgrade to 10.04, is now running the "ondemand" CPU scaling daemon. Why would it automatically install this? I don't want my server saving power at the expense of performance.

    • Tom
      Tom over 13 years
      You're mistaking the ondemand governor for the powersave one.
    • maco
      maco over 13 years
      Agreed with Leon. Ondemand speeds up if there's something to do and slows down if it's idling. It does not restrict the CPU's ability to change speeds, but rather takes advantage of it.
    • Qasim
      Qasim almost 11 years
  • bobince
    bobince over 13 years
    I don't think it's strange. Whilst certainly mobile is the most critical scenario for power-saving, reducing power usage also means less fan noise in a desktop scenario, and less heat to deal with in a server room. Running constantly at maximum speed is a bit of a waste, only really necessary for rare cases where ondemand gets it wrong.
  • George Gesslein II
    George Gesslein II over 13 years
    @bobince - You are probably right, but for a desktop I have noticed that OnDemand gives a sluggish response compared to Performance, and I think the computer can still sleep properly with the above change. It should be an option in System/Administration or System/Preferences.
  • LassePoulsen
    LassePoulsen over 13 years
    Right, the only place this makes sense is on laptops where charge-time is shortened and battery-time extended by scaling the CPU.
  • A Student at a University
    A Student at a University over 12 years
    How long does it take ondemand to scale up on a P4 Xeon?
  • Oyibo
    Oyibo over 11 years
    Welcome to AskUbuntu! You may want to back up your statements with full statistics/research as your answer could be misunderstood as an opinion rather than a researched answer.
  • nutty about natty
    nutty about natty over 11 years
    saving the environment, anyone??
  • Manuel
    Manuel over 11 years
    I can't find any deprecation warning about the rcconf tool: you are missing the point and provided a completely wrong URL. I didn't mean Arch's way of configuring rc scripts, but rather the debian tool and that looks alive and well.
  • nutty about natty
    nutty about natty over 11 years
    Thanks for pointing it out and supplying a helpful link! (I deleted my initial and wrong comment)
  • Panther
    Panther about 8 years
    Came across this old answer and while I agree with Oli, there are specific user cases where you would want to disable CPU scaling - Audio recording for example. Unless you have a specific need, leave it at ondemand
  • userDepth
    userDepth about 8 years
    If I do : sudo update-rc.d other_governor enable , will it set a permanent desired governor ?
  • Sebastien Lorber
    Sebastien Lorber almost 8 years
    By chance is there a way to know which process is constantly changing min/max values of frequency scaling? It always changes and I don't know why. see askubuntu.com/questions/800797/how-to-enable-turbo-boost
  • muru
    muru about 7 years
    Note, sudo echo > ... doesn't do what you expect: askubuntu.com/q/230476/158442
  • Xen2050
    Xen2050 over 6 years
    This is also wrong, Apple's getting in trouble this week for slowing down devices to save power
  • Xen2050
    Xen2050 over 6 years
    This is just wrong too. Monitor cpu temps and change frequencies to see for yourself (unless your system doesn't implement it fully/correctly). See the Apple link too, sounds like regular frequency/speed scaling
  • Denis
    Denis over 6 years
    @Xen2050, to see what for yourself? Do you imply that CPU which runs at 70 degrees Celsius for 2 sec, might consume more power, than one which runs 5-6 sec at 60 Degrees, or something in that direction? It is not that simple as monitoring CPU temp in particular moment.
  • Denis
    Denis over 6 years
    @Xen2050 your link points to iPhone, which is totally different arch or processors. I have indicated that voltage scaling in combo with particular governor could help on laptops for example, and mentioned desktop (Workstation), and server processors explicitly, but as a matter of fact what I was talking about exist even on phones too for years now (The situation is probably more complicated in this case. A proper governor might be required for MPU to utilize particular C/P state. properly). Anyway read one more time what I have typed, and google 'race to idle' and processor deep sleep modes.