Venkatesh Pallipadi Shaohua Li Intel Open Source Technology Center
Adam Belay Novell, Inc.
Most of the focus in Linux processor power management today has been on power managing the processor while it is active: cpufreq, which changes the processor frequency and/or voltage andmanages the processor performance levels and power consumption based on processor load. Another dimension of processor power management is processor ‘idling’ power. Almost all mobile processors in the marketplace today support the concept of multiple processor idle states with varying amounts of power consumed in those idle states. Each such state will have an entry-exit latency associated with it. Ingeneral, there is a lot of attention shifting towards idle platform power and new platforms/processors are supporting multiple idle states with different power and wakeup latency characteristics. This emphasis on idle power and different processors supporting different number of idle states and different ways of entering these states, necessitates the need for a generic Linux kernel framework tomanage idle processors. This paper covers cpuidle, an effort towards a generic processor idle management framework in Linux kernel. The goal is to have a clean interface for any processor hardware to make use of different processor idle levels and also provide abstraction between idle-drivers and idle-governors allowing independent development of drivers and governors. The target audiences are thedevelopers who are keen to experiment with new idle governors on top of cpuidle, and developers who wants to use the cpuidle driver infrastructure in various architectures, and any one else who is keen to know about cpuidle.
management and system power management gain importance for a variety of reasons. In typical system usage models, processor(s) spend a lot of their time idling (like whileyou are reading this paper on your laptop, with your favorite pdf-reader). Thus any power saved when system is idle will have big returns in terms of battery life, heat generated in the system, need for cooling, etc. But there is a trade-off between idling power and amount of state a processor saves and the amount of time it takes to enter and exit from this idle state. The idle enter-exit latency,if it is too high, may be visible with media applications like a DVD player. Such usage models will limit the usage of a particular idle state on the processor running this application, even though the idle state is power efﬁcient. Similarly, if a processor idle state does not preserve the the contents of the processor’s cache, some particular application which has some idle time may notice aperformance degradation when this particular idle state is used. In order to manage this trade-off effectively, the kernel needs to know the characteristics of all idle states and also should understand the currently running applications, and should take a well-informed decision about what idle state it wants to enter when processor goes to idle. To do this effectively and cleanly, there is apreliminary requirement of having clean and simple interfaces. Such an interface can provide consistent information to the user and ease the innovation and development in the area of processor idle management. cpuidle is a an effort in this direction and this paper provides insight into cpuidle. We start section 2 with a background on processor power management and idle states. Section 3 provides thedesign description of cpuidle. Section 4 talks about all the develop-
Almost all the mobile processors today support multiple idle states and the trend is spreading as processor power
• 119 •
120 • cpuidle—Do nothing, efﬁciently. . . ments and advancements happening in cpuidle and some conclusions in section 5. 2.3 Current Processor idle state support