| Supporting multiple CPU idle levels in kernel | |
| cpuidle sysfs | |
| System global cpuidle related information and tunables are under | |
| /sys/devices/system/cpu/cpuidle | |
| The current interfaces in this directory has self-explanatory names: | |
| * current_driver | |
| * current_governor_ro | |
| With cpuidle_sysfs_switch boot option (meant for developer testing) | |
| following objects are visible instead. | |
| * current_driver | |
| * available_governors | |
| * current_governor | |
| In this case users can switch the governor at run time by writing | |
| to current_governor. | |
| Per logical CPU specific cpuidle information are under | |
| /sys/devices/system/cpu/cpuX/cpuidle | |
| for each online cpu X | |
| -------------------------------------------------------------------------------- | |
| # ls -lR /sys/devices/system/cpu/cpu0/cpuidle/ | |
| /sys/devices/system/cpu/cpu0/cpuidle/: | |
| total 0 | |
| drwxr-xr-x 2 root root 0 Feb 8 10:42 state0 | |
| drwxr-xr-x 2 root root 0 Feb 8 10:42 state1 | |
| drwxr-xr-x 2 root root 0 Feb 8 10:42 state2 | |
| drwxr-xr-x 2 root root 0 Feb 8 10:42 state3 | |
| /sys/devices/system/cpu/cpu0/cpuidle/state0: | |
| total 0 | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | |
| -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 name | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 power | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 time | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 usage | |
| /sys/devices/system/cpu/cpu0/cpuidle/state1: | |
| total 0 | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | |
| -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 name | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 power | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 time | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 usage | |
| /sys/devices/system/cpu/cpu0/cpuidle/state2: | |
| total 0 | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | |
| -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 name | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 power | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 time | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 usage | |
| /sys/devices/system/cpu/cpu0/cpuidle/state3: | |
| total 0 | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 desc | |
| -rw-r--r-- 1 root root 4096 Feb 8 10:42 disable | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 latency | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 name | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 power | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 time | |
| -r--r--r-- 1 root root 4096 Feb 8 10:42 usage | |
| -------------------------------------------------------------------------------- | |
| * desc : Small description about the idle state (string) | |
| * disable : Option to disable this idle state (bool) -> see note below | |
| * latency : Latency to exit out of this idle state (in microseconds) | |
| * name : Name of the idle state (string) | |
| * power : Power consumed while in this idle state (in milliwatts) | |
| * time : Total time spent in this idle state (in microseconds) | |
| * usage : Number of times this state was entered (count) | |
| Note: | |
| The behavior and the effect of the disable variable depends on the | |
| implementation of a particular governor. In the ladder governor, for | |
| example, it is not coherent, i.e. if one is disabling a light state, | |
| then all deeper states are disabled as well, but the disable variable | |
| does not reflect it. Likewise, if one enables a deep state but a lighter | |
| state still is disabled, then this has no effect. |