The Ondemand Governor

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 ondemand governor.

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 ondemand governor.


Download PDF.