Template Version: @(#)sac_nextcase 1.64 07/13/07 SMI This information is Copyright 2007 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: CPUFreq HAL 1.2. Name of Document Author/Supplier: Author: Anup Pemmaiah 1.3 Date of This Document: 05 December, 2007 4. Technical Description 4.0 Introduction =============== This project delivers the CPU power management related support for the HAL interfaces used by the GNOME Power Manager (GPM) desktop application to control CPU power management behavior. 4.1 Background and Summary ========================= LSARC/2006/462 proposed adding GNOME Power Manager (GPM), a workstation power management GUI, to the Solaris GNOME desktop. One of the components provided by GPM is a preference dialog used to configure CPU power management settings. In order to support the CPU power management dialog, the host OS (Solaris) is required to provide backend support for the pre-defined Hardware Abstraction Layer (HAL) interfaces [1]. See PSARC/2005/399 for more information on HAL. HAL defines a CPU Freq interface that it uses to support CPU power management. This case, defines those interfaces and explains what existing Solaris interfaces will be used to support the HAL CPU Freq interface. 4.2 Block Diagram ================= An end-to-end GNOME CPU power management system diagram. The dotted lines indicate the boundaries of the pieces implemented by this project. +--------------------------+ | | |GNOME CPU power management| LSARC/2006/462 GNOME-2.16 | applet GUI | +--------------------------+ ^ | (D-bus) | JDS consolidation (up) -------------+-------------------------------------------------- | ON consolidation (below) | (D-bus) v +-------------------------+ | HAL daemon (hald) | PSARC/2005/399 Tamarack ............................... : | | : : +--------------------+ | : : | CPU Freq | | : : | daemon | | : +-----------+ : | hald-addon-cpufreq | |<---->| kstat(1M) | : +--------------------+----+ : +-----------+ : ^ : ^ :.........|...................: | | | | | v | +-------------------------+ | | power.conf | | | | | | pmconfig utility | | +-------------------------+ | ^ | | | | (ioctl) | USER -----------+------------------------------+--------------- | | KERNEL | | v | +------------------+ | | | | (kstat) | cpu driver |<------------------+ | | +------------------+ 4.3 Project Details ================== 4.3.1 Data flow of CPU Freq HAL method interface ---------------------------------------------- GPM uses the HAL CPU Freq Interface to manage CPU power management policies on the host workstation. The Interface has one major CPU power management concept of interest to this case. HAL refers to CPU power management policy types as governors. The two governors that this case intends to support initially are the "On Demand" governor and the "Performance" governor. The "On Demand" governor is a CPU power management policy whereby dynamic CPU frequency scaling is performed by monitoring CPU utilization and scaling the frequency when appropriate. The "Performance" governor is a CPU power management policy intended to allow the desktop to get full CPU utilization all the time (i.e., no frequency scaling). Both governors will be implemented using the power.conf(4) cpupm keyword introduced by PSARC/2005/067. "On Demand" translates to cpupm being enabled and "Performance" translates to cpupm being disabled. Also of interest to this case, is that the CPU Freq interface supports defining a performance property for governors. The performance property is meant to provide the governor with a hint at how aggressively it should manage CPU power. This case proposes to use the frequency performance attribute as a means of calculating a cpu-threshold value for power.conf(4). The cpu-threshold keyword was introduced by PSARC/2005/067. 4.3.2 Interfaces -------------- Interfaces Exported: All the interfaces exported by this project are HAL cpu-freq related and detailed information can be found on the HAL webpage [1]. They are "Committed" level. These interfaces can be used by GPM. Interface Method Name Return Parameters Comments ------------------------------------------------------------------- SetCPUFreqGovernor void string Type of governor (policy) to set as described in 4.3.1. GetCPUFreqGovernor string None Returns current policy GetCPUFreqAvailable string[] None Returns the list of Governors supported policies SetCPUFreqPerformance void int Set the performance of the (between 1-100) CPU Freq scaling. Higher the value is better perfo- rmance. In our implementa- tion, this value is used to set the CPU Freq scaling by varying the "cpu-threshold" parameter in the power.conf. GetCPUFreqPerformance int None Return the current performance value set by SetCPUFreqPerformance SetCPUFreqConsiderNice void Bool Whether or not niced processes (consider should be considered on CPU niced load calculation. processes) Note: Since none of the current CPU power management policies consider niced processes this method just returns CPUFreq.NoSuitableGovernor) GetCPUFreqConsiderNice bool None Whether nice'ed processes are considered by the governor. Note: Since none of the current CPU power management policies consider niced processes this method just returns CPUFreq.NoSuitableGovernor) The processor specific properties interface Interface Type Comments --------------------------------------------------------------- processor.number int The internal processor number processor.throttle boolean Whether the processor supports throttling to decrease it's own clock speed processor.maximum_speed long The maximum speed of the processor in units of MHz info.capabilities string list value = "processor" The computer device object specific properties interface. If the property already exists, then the following values will get appended Interface Type Comments --------------------------------------------------------------- info.capabilities string list value = "cpufreq_control" info.interfaces string list value = "org.freedesktop.Hal.Device.CPUFreq" info.addons string list value = "hald-addon-cpufreq" D-Bus specific Information --------------------------- Interface Name: org.freedesktop.Hal.Device.CPUFreq Path to device object /org/freedesktop/Hal/devices/computer that implements the interface Interfaces Imported: Interface Comments --------------------------------------------------------------- power.conf(4) Used by SetCPUFreqGovernor & SetCPUPerformance to edit the "cpupm" & "cpu-threshold" parameters in power.conf respectively. The other method interfaces reads these values and return the current values that are set pmconfig(1M) When power.conf is edited anytime, pmconfig should be called for the edited power.conf to take effect cpu_info kstat Used by HAL cpu freq interface to get the max "clock_MHz" supported freq cpu_info kstat To check if processor supports power management "supported_frequencies_Hz" (Note that the following four project private interfaces Iioctls) were not included in the initial draft) PM_GET_CPU_THRESHOLD Used by GetCPUFreqPerformance to determine the frequency performance. PM_GET_SYSTEM_THRESHOLD Used by GetCPUFreqPerformance to determine the frequency performance. PM_GET_CPUPM_STATE Used by GetCPUFreqGovernor to determine the current system policy. PM_GET_PM_STATE Used by GetCPUFreqGovernor to determine the current system policy. FOOTNOTES: ========== [1] More info about HAL interface can be found at http://people.freedesktop.org/~david/hal-spec/hal-spec.html 6. Resources and Schedule 6.4. Steering Committee requested information 6.4.1. Consolidation C-team Name: ON 6.5. ARC review type: FastTrack 6.6. ARC Exposure: open