ondemand is a dynamic in-kernel
cpufreq governor that can change CPU frequency depending on CPU utilization. It was first introduced in the linux-2.6.9 kernel. Its simplistic policy provided significant benefits to laptops, desktops, and servers alike by making use of fast frequency-switching features of the processors to effectively power-manage them.
This paper starts with a description of the
ondemand governor present in the 2.6.9 kernel: the algorithm and tuning parameters in that governor. In particular, it highlights the significant difference between the
ondemand governor vs. the user-level
cpufreq governors. This section also includes a brief overview of how to configure and run the
Next is a discussion of various optimizations to the original
ondemand algorithm. Some of these changes were driven by the new processor support of dynamic changing of frequency in multi-core and multiprocessor system environments. This section highlights the challenges of changing frequency in a multiprocessor system environment such as preventing frequency change in one processor affecting other processors. It also discusses relative power/performance data with the
ondemand governor and its various optimizations.
This paper concludes with a few ideas about where the
ondemand governor is headed in the future, including additional features that are nice to have and how the
ondemand governor can be made more useful in a wide range of systems - from handhelds to servers. This discussion touches upon changes that may be required in kernel subsystems other than
cpufreq, in order to improve effectiveness of the