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 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


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"



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


Reply via email to