1
2Situation:
3----------
4
5Under certain circumstances a SoC can reach a critical temperature
6limit and is unable to stabilize the temperature around a temperature
7control. When the SoC has to stabilize the temperature, the kernel can
8act on a cooling device to mitigate the dissipated power. When the
9critical temperature is reached, a decision must be taken to reduce
10the temperature, that, in turn impacts performance.
11
12Another situation is when the silicon temperature continues to
13increase even after the dynamic leakage is reduced to its minimum by
14clock gating the component. This runaway phenomenon can continue due
15to the static leakage. The only solution is to power down the
16component, thus dropping the dynamic and static leakage that will
17allow the component to cool down.
18
19Last but not least, the system can ask for a specific power budget but
20because of the OPP density, we can only choose an OPP with a power
21budget lower than the requested one and under-utilize the CPU, thus
22losing performance. In other words, one OPP under-utilizes the CPU
23with a power less than the requested power budget and the next OPP
24exceeds the power budget. An intermediate OPP could have been used if
25it were present.
26
27Solutions:
28----------
29
30If we can remove the static and the dynamic leakage for a specific
31duration in a controlled period, the SoC temperature will
32decrease. Acting on the idle state duration or the idle cycle
33injection period, we can mitigate the temperature by modulating the
34power budget.
35
36The Operating Performance Point (OPP) density has a great influence on
37the control precision of cpufreq, however different vendors have a
38plethora of OPP density, and some have large power gap between OPPs,
39that will result in loss of performance during thermal control and
40loss of power in other scenarios.
41
42At a specific OPP, we can assume that injecting idle cycle on all CPUs
43belong to the same cluster, with a duration greater than the cluster
44idle state target residency, we lead to dropping the static and the
45dynamic leakage for this period (modulo the energy needed to enter
46this state). So the sustainable power with idle cycles has a linear
47relation with the OPP’s sustainable power and can be computed with a
48coefficient similar to:
49
50	    Power(IdleCycle) = Coef x Power(OPP)
51
52Idle Injection:
53---------------
54
55The base concept of the idle injection is to force the CPU to go to an
56idle state for a specified time each control cycle, it provides
57another way to control CPU power and heat in addition to
58cpufreq. Ideally, if all CPUs belonging to the same cluster, inject
59their idle cycles synchronously, the cluster can reach its power down
60state with a minimum power consumption and reduce the static leakage
61to almost zero.  However, these idle cycles injection will add extra
62latencies as the CPUs will have to wakeup from a deep sleep state.
63
64We use a fixed duration of idle injection that gives an acceptable
65performance penalty and a fixed latency. Mitigation can be increased
66or decreased by modulating the duty cycle of the idle injection.
67
68::
69
70     ^
71     |
72     |
73     |-------                         -------
74     |_______|_______________________|_______|___________
75
76     <------>
77       idle  <---------------------->
78                    running
79
80      <----------------------------->
81              duty cycle 25%
82
83
84The implementation of the cooling device bases the number of states on
85the duty cycle percentage. When no mitigation is happening the cooling
86device state is zero, meaning the duty cycle is 0%.
87
88When the mitigation begins, depending on the governor's policy, a
89starting state is selected. With a fixed idle duration and the duty
90cycle (aka the cooling device state), the running duration can be
91computed.
92
93The governor will change the cooling device state thus the duty cycle
94and this variation will modulate the cooling effect.
95
96::
97
98     ^
99     |
100     |
101     |-------                 -------
102     |_______|_______________|_______|___________
103
104     <------>
105       idle  <-------------->
106                running
107
108      <--------------------->
109          duty cycle 33%
110
111
112     ^
113     |
114     |
115     |-------         -------
116     |_______|_______|_______|___________
117
118     <------>
119       idle  <------>
120              running
121
122      <------------->
123       duty cycle 50%
124
125The idle injection duration value must comply with the constraints:
126
127- It is less than or equal to the latency we tolerate when the
128  mitigation begins. It is platform dependent and will depend on the
129  user experience, reactivity vs performance trade off we want. This
130  value should be specified.
131
132- It is greater than the idle state’s target residency we want to go
133  for thermal mitigation, otherwise we end up consuming more energy.
134
135Power considerations
136--------------------
137
138When we reach the thermal trip point, we have to sustain a specified
139power for a specific temperature but at this time we consume:
140
141 Power = Capacitance x Voltage^2 x Frequency x Utilisation
142
143... which is more than the sustainable power (or there is something
144wrong in the system setup). The ‘Capacitance’ and ‘Utilisation’ are a
145fixed value, ‘Voltage’ and the ‘Frequency’ are fixed artificially
146because we don’t want to change the OPP. We can group the
147‘Capacitance’ and the ‘Utilisation’ into a single term which is the
148‘Dynamic Power Coefficient (Cdyn)’ Simplifying the above, we have:
149
150 Pdyn = Cdyn x Voltage^2 x Frequency
151
152The power allocator governor will ask us somehow to reduce our power
153in order to target the sustainable power defined in the device
154tree. So with the idle injection mechanism, we want an average power
155(Ptarget) resulting in an amount of time running at full power on a
156specific OPP and idle another amount of time. That could be put in a
157equation:
158
159 P(opp)target = ((Trunning x (P(opp)running) + (Tidle x P(opp)idle)) /
160			(Trunning + Tidle)
161
162  ...
163
164 Tidle = Trunning x ((P(opp)running / P(opp)target) - 1)
165
166At this point if we know the running period for the CPU, that gives us
167the idle injection we need. Alternatively if we have the idle
168injection duration, we can compute the running duration with:
169
170 Trunning = Tidle / ((P(opp)running / P(opp)target) - 1)
171
172Practically, if the running power is less than the targeted power, we
173end up with a negative time value, so obviously the equation usage is
174bound to a power reduction, hence a higher OPP is needed to have the
175running power greater than the targeted power.
176
177However, in this demonstration we ignore three aspects:
178
179 * The static leakage is not defined here, we can introduce it in the
180   equation but assuming it will be zero most of the time as it is
181   difficult to get the values from the SoC vendors
182
183 * The idle state wake up latency (or entry + exit latency) is not
184   taken into account, it must be added in the equation in order to
185   rigorously compute the idle injection
186
187 * The injected idle duration must be greater than the idle state
188   target residency, otherwise we end up consuming more energy and
189   potentially invert the mitigation effect
190
191So the final equation is:
192
193 Trunning = (Tidle - Twakeup ) x
194		(((P(opp)dyn + P(opp)static ) - P(opp)target) / P(opp)target )
195