Commit fe8e288a63f2f3c51c288500282d0eb5cd26a534

Authored by Venkatesh Pallipadi
Committed by Len Brown
1 parent 4fcb2fcd4d

cpuidle: Add Documentation

Documentation for cpuidle infrastructure. (resend)

Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Reviewed-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Len Brown <len.brown@intel.com>

Showing 5 changed files with 164 additions and 0 deletions Side-by-side Diff

Documentation/00-INDEX
... ... @@ -109,6 +109,8 @@
109 109 - document describing CPU hotplug support in the Linux kernel.
110 110 cpu-load.txt
111 111 - document describing how CPU load statistics are collected.
  112 +cpuidle/
  113 + - info on CPU_IDLE, CPU idle state management subsystem.
112 114 cpusets.txt
113 115 - documents the cpusets feature; assign CPUs and Mem to a set of tasks.
114 116 cputopology.txt
Documentation/cpuidle/core.txt
  1 +
  2 + Supporting multiple CPU idle levels in kernel
  3 +
  4 + cpuidle
  5 +
  6 +General Information:
  7 +
  8 +Various CPUs today support multiple idle levels that are differentiated
  9 +by varying exit latencies and power consumption during idle.
  10 +cpuidle is a generic in-kernel infrastructure that separates
  11 +idle policy (governor) from idle mechanism (driver) and provides a
  12 +standardized infrastructure to support independent development of
  13 +governors and drivers.
  14 +
  15 +cpuidle resides under drivers/cpuidle.
  16 +
  17 +Boot options:
  18 +"cpuidle_sysfs_switch"
  19 +enables current_governor interface in /sys/devices/system/cpu/cpuidle/,
  20 +which can be used to switch governors at run time. This boot option
  21 +is meant for developer testing only. In normal usage, kernel picks the
  22 +best governor based on governor ratings.
  23 +SEE ALSO: sysfs.txt in this directory.
Documentation/cpuidle/driver.txt
  1 +
  2 +
  3 + Supporting multiple CPU idle levels in kernel
  4 +
  5 + cpuidle drivers
  6 +
  7 +
  8 +
  9 +
  10 +cpuidle driver hooks into the cpuidle infrastructure and handles the
  11 +architecture/platform dependent part of CPU idle states. Driver
  12 +provides the platform idle state detection capability and also
  13 +has mechanisms in place to support actual entry-exit into CPU idle states.
  14 +
  15 +cpuidle driver initializes the cpuidle_device structure for each CPU device
  16 +and registers with cpuidle using cpuidle_register_device.
  17 +
  18 +It can also support the dynamic changes (like battery <-> AC), by using
  19 +cpuidle_pause_and_lock, cpuidle_disable_device and cpuidle_enable_device,
  20 +cpuidle_resume_and_unlock.
  21 +
  22 +Interfaces:
  23 +extern int cpuidle_register_driver(struct cpuidle_driver *drv);
  24 +extern void cpuidle_unregister_driver(struct cpuidle_driver *drv);
  25 +extern int cpuidle_register_device(struct cpuidle_device *dev);
  26 +extern void cpuidle_unregister_device(struct cpuidle_device *dev);
  27 +
  28 +extern void cpuidle_pause_and_lock(void);
  29 +extern void cpuidle_resume_and_unlock(void);
  30 +extern int cpuidle_enable_device(struct cpuidle_device *dev);
  31 +extern void cpuidle_disable_device(struct cpuidle_device *dev);
Documentation/cpuidle/governor.txt
  1 +
  2 +
  3 +
  4 + Supporting multiple CPU idle levels in kernel
  5 +
  6 + cpuidle governors
  7 +
  8 +
  9 +
  10 +
  11 +cpuidle governor is policy routine that decides what idle state to enter at
  12 +any given time. cpuidle core uses different callbacks to the governor.
  13 +
  14 +* enable() to enable governor for a particular device
  15 +* disable() to disable governor for a particular device
  16 +* select() to select an idle state to enter
  17 +* reflect() called after returning from the idle state, which can be used
  18 + by the governor for some record keeping.
  19 +
  20 +More than one governor can be registered at the same time and
  21 +users can switch between drivers using /sysfs interface (when enabled).
  22 +More than one governor part is supported for developers to easily experiment
  23 +with different governors. By default, most optimal governor based on your
  24 +kernel configuration and platform will be selected by cpuidle.
  25 +
  26 +Interfaces:
  27 +extern int cpuidle_register_governor(struct cpuidle_governor *gov);
  28 +extern void cpuidle_unregister_governor(struct cpuidle_governor *gov);
  29 +struct cpuidle_governor
Documentation/cpuidle/sysfs.txt
  1 +
  2 +
  3 + Supporting multiple CPU idle levels in kernel
  4 +
  5 + cpuidle sysfs
  6 +
  7 +System global cpuidle related information and tunables are under
  8 +/sys/devices/system/cpu/cpuidle
  9 +
  10 +The current interfaces in this directory has self-explanatory names:
  11 +* current_driver
  12 +* current_governor_ro
  13 +
  14 +With cpuidle_sysfs_switch boot option (meant for developer testing)
  15 +following objects are visible instead.
  16 +* current_driver
  17 +* available_governors
  18 +* current_governor
  19 +In this case users can switch the governor at run time by writing
  20 +to current_governor.
  21 +
  22 +
  23 +Per logical CPU specific cpuidle information are under
  24 +/sys/devices/system/cpu/cpuX/cpuidle
  25 +for each online cpu X
  26 +
  27 +--------------------------------------------------------------------------------
  28 +# ls -lR /sys/devices/system/cpu/cpu0/cpuidle/
  29 +/sys/devices/system/cpu/cpu0/cpuidle/:
  30 +total 0
  31 +drwxr-xr-x 2 root root 0 Feb 8 10:42 state0
  32 +drwxr-xr-x 2 root root 0 Feb 8 10:42 state1
  33 +drwxr-xr-x 2 root root 0 Feb 8 10:42 state2
  34 +drwxr-xr-x 2 root root 0 Feb 8 10:42 state3
  35 +
  36 +/sys/devices/system/cpu/cpu0/cpuidle/state0:
  37 +total 0
  38 +-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
  39 +-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
  40 +-r--r--r-- 1 root root 4096 Feb 8 10:42 name
  41 +-r--r--r-- 1 root root 4096 Feb 8 10:42 power
  42 +-r--r--r-- 1 root root 4096 Feb 8 10:42 time
  43 +-r--r--r-- 1 root root 4096 Feb 8 10:42 usage
  44 +
  45 +/sys/devices/system/cpu/cpu0/cpuidle/state1:
  46 +total 0
  47 +-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
  48 +-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
  49 +-r--r--r-- 1 root root 4096 Feb 8 10:42 name
  50 +-r--r--r-- 1 root root 4096 Feb 8 10:42 power
  51 +-r--r--r-- 1 root root 4096 Feb 8 10:42 time
  52 +-r--r--r-- 1 root root 4096 Feb 8 10:42 usage
  53 +
  54 +/sys/devices/system/cpu/cpu0/cpuidle/state2:
  55 +total 0
  56 +-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
  57 +-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
  58 +-r--r--r-- 1 root root 4096 Feb 8 10:42 name
  59 +-r--r--r-- 1 root root 4096 Feb 8 10:42 power
  60 +-r--r--r-- 1 root root 4096 Feb 8 10:42 time
  61 +-r--r--r-- 1 root root 4096 Feb 8 10:42 usage
  62 +
  63 +/sys/devices/system/cpu/cpu0/cpuidle/state3:
  64 +total 0
  65 +-r--r--r-- 1 root root 4096 Feb 8 10:42 desc
  66 +-r--r--r-- 1 root root 4096 Feb 8 10:42 latency
  67 +-r--r--r-- 1 root root 4096 Feb 8 10:42 name
  68 +-r--r--r-- 1 root root 4096 Feb 8 10:42 power
  69 +-r--r--r-- 1 root root 4096 Feb 8 10:42 time
  70 +-r--r--r-- 1 root root 4096 Feb 8 10:42 usage
  71 +--------------------------------------------------------------------------------
  72 +
  73 +
  74 +* desc : Small description about the idle state (string)
  75 +* latency : Latency to exit out of this idle state (in microseconds)
  76 +* name : Name of the idle state (string)
  77 +* power : Power consumed while in this idle state (in milliwatts)
  78 +* time : Total time spent in this idle state (in microseconds)
  79 +* usage : Number of times this state was entered (count)