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