• Home
  • Raw
  • Download

Lines Matching +full:idle +full:- +full:state

6   - Arjan van de Ven <arjan@linux.intel.com>
7 - Jacob Pan <jacob.jun.pan@linux.intel.com>
12 - Goals and Objectives
15 - Idle Injection
16 - Calibration
19 - Effectiveness and Limitations
20 - Power vs Performance
21 - Scalability
22 - Calibration
23 - Comparison with Alternative Techniques
26 - Generic Thermal Layer (sysfs)
27 - Kernel APIs (TBD)
38 Currently, P-states, T-states (clock modulation), and CPU offlining
41 On Intel CPUs, C-states provide effective power reduction, but so far
44 idle injection across all online CPU threads was introduced. The goal
45 is to achieve forced and controllable C-state residency.
55 Idle Injection
56 --------------
58 On modern Intel processors (Nehalem or later), package level C-state
68 If the kernel can also inject idle time to the system, then a
69 closed-loop control system can be established that manages package
70 level C-state. The intel_powerclamp driver is conceived as such a
71 control system, where the target set point is a user-selected idle
73 between the actual package level C-state residency ratio and the target idle
80 clamping actions of controlled duty ratio and duration. Each per-CPU
81 thread synchronizes its idle time and duration, based on the rounding
88 scheme to work for both preemptable and non-preemptable kernels.
89 Alignment of idle time around jiffies ensures scalability for HZ
92 kidle_inject/cpu. During idle injection, it runs monitor/mwait idle
96 The NOHZ schedule tick is disabled during idle time, but interrupts
121 hot-plug.
123 In terms of dynamics of the idle control system, package level idle
124 time is considered largely as a non-causal system where its behavior
126 intel_powerclamp driver attempts to enforce the desired idle time
127 instantly as given input (target idle ratio). After injection,
128 powerclamp monitors the actual idle for a given time window and adjust
134 PID-based thermal controller can use the powerclamp driver to
141 -----------
144 also true for the ability of a system to enter package level C-states.
150 a) determine the effective range of idle injection ratio
155 a) steady state error compensation
157 enter idle without extra wakeups (such as external interrupts).
160 When an excessive amount of wakeups occurs during idle, an
161 additional idle ratio can be added to quiet interrupts, by
203 Steady state compensation is used only when confidence levels of all
209 To compensate for excessive amounts of wakeup during idle, additional
210 idle time is injected when such a condition is detected. Currently,
214 non-intrusive to the scheduler or the IRQ core code.
218 ------------------
219 Per-CPU kernel threads are started/stopped upon receiving
231 -----------------------------
232 The maximum range that idle injection is allowed is capped at 50
234 forced idle time, excessive interrupts could result in less
235 effectiveness. The extreme case would be doing a ping -f to generated
237 case, little can be done from the idle injection threads. In most
244 with the changes. During this time, idle injection is out of sync,
245 thus not able to enter package C- states at the expected ratio. But
247 ratio is updated much less frequently than the idle injection
251 -----------
253 Ivy Bridge system and the 80P Westmere server under 50% idle ratio.
255 target idle ratio. The compensation also increases as the idle ratio
274 cur_state allows user to set the desired idle percentage. Writing 0 to
275 cur_state will stop idle injection. Writing a value between 1 and
276 max_state will start the idle injection. Reading cur_state returns the
277 actual and current idle percentage. This may not be the same value
278 set by the user in that current idle percentage depends on workload
279 and includes natural idle. When idle injection is disabled, reading
280 cur_state returns value -1 instead of 0 which is to avoid confusing
281 100% busy state with the disabled state.
284 - To inject 25% idle time::
286 $ sudo sh -c "echo 25 > /sys/class/thermal/cooling_device80/cur_state
288 If the system is not busy and has more than 25% idle time already,
289 then the powerclamp driver will not start idle injection. Using Top
290 will not show idle injection kernel threads.
293 idle time, powerclamp kernel threads will do idle injection. Forced
294 idle time is accounted as normal idle in that common code path is
295 taken as the idle task.
297 In this example, 24.1% idle is shown. This helps the system admin or
308 3341 root -51 0 0 0 0 D 25 0.0 0:01.62 kidle_inject/0
309 3344 root -51 0 0 0 0 D 25 0.0 0:01.60 kidle_inject/3
310 3342 root -51 0 0 0 0 D 25 0.0 0:01.61 kidle_inject/1
311 3343 root -51 0 0 0 0 D 25 0.0 0:01.60 kidle_inject/2