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.
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
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.
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
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.
To make all CPUs run at maximum performance continually on a Ubuntu desktop or server, run:
sudo chmod -x /etc/init.d/ondemand
at the shell prompt and enter your password.
This disables the shell script that makes all CPUs run at speed "OnDemand", making them default to full speed (Performance). You will need to reboot for this to take effect.
I have only tested this in Ubuntu Jaunty 9.04, but it should work and not cause any problems on any version of Ubuntu.
I think the Ubuntu defaults are strange for this. A desktop or server should run at full speed, in my opinion.
I have a new processor AMD Athlon II X4 631 (Fusion processor for socket FM1) and it doesn't save any energy whatsoever (I looked it with energy meter)! I don't have a turbo core, so I don't need ondemand setting. Most new processors save enery by themselves.
When benchmarking, there is a little difference, in the range on 1-2%, when comparing ondemand and performance setting.
This is old, but since no one mentioned it, and for the sake of completeness, I will add that the argument how CPU which runs on the maximum speed will waste power, produce heat, fan noise etc. is WRONG.
Almost all modern CPUs, especially Desktop / Server CPUs, will enter deep sleep mode when idle (google race to idle.).
Voltage scaling will probably save more power, so on laptops this could increase running time a little, but on desktop and servers running performance governor will be fine for most of 'normal' users (who don't run server farms or similar.).
I use performance gov with my i7-2600k and the CPU temperature is usually around 30 C.
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 commandTo 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 serviceFrequency 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.
Set all CPUs to performance governor:
All supported governors by Linux kernel:
See https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt
You could install the rcconf debian tool:
then disable the "ondemand" service from there.
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.
To make all CPUs run at maximum performance continually on a Ubuntu desktop or server, run:
at the shell prompt and enter your password. This disables the shell script that makes all CPUs run at speed "OnDemand", making them default to full speed (Performance). You will need to reboot for this to take effect.
I have only tested this in Ubuntu Jaunty 9.04, but it should work and not cause any problems on any version of Ubuntu.
I think the Ubuntu defaults are strange for this. A desktop or server should run at full speed, in my opinion.
Regards, George
I have a new processor AMD Athlon II X4 631 (Fusion processor for socket FM1) and it doesn't save any energy whatsoever (I looked it with energy meter)! I don't have a turbo core, so I don't need ondemand setting. Most new processors save enery by themselves.
When benchmarking, there is a little difference, in the range on 1-2%, when comparing ondemand and performance setting.
This is old, but since no one mentioned it, and for the sake of completeness, I will add that the argument how CPU which runs on the maximum speed will waste power, produce heat, fan noise etc. is WRONG.
Almost all modern CPUs, especially Desktop / Server CPUs, will enter deep sleep mode when idle (google race to idle.).
Voltage scaling will probably save more power, so on laptops this could increase running time a little, but on desktop and servers running performance governor will be fine for most of 'normal' users (who don't run server farms or similar.).
I use performance gov with my i7-2600k and the CPU temperature is usually around 30 C.