brintos

brintos / linux-shallow public Read only

0
0
Text · 7.1 KiB · c2a7ca6 Raw
200 lines · plain
1.. SPDX-License-Identifier: GPL-2.02 3================4CPU Idle Cooling5================6 7Situation:8----------9 10Under certain circumstances a SoC can reach a critical temperature11limit and is unable to stabilize the temperature around a temperature12control. When the SoC has to stabilize the temperature, the kernel can13act on a cooling device to mitigate the dissipated power. When the14critical temperature is reached, a decision must be taken to reduce15the temperature, that, in turn impacts performance.16 17Another situation is when the silicon temperature continues to18increase even after the dynamic leakage is reduced to its minimum by19clock gating the component. This runaway phenomenon can continue due20to the static leakage. The only solution is to power down the21component, thus dropping the dynamic and static leakage that will22allow the component to cool down.23 24Last but not least, the system can ask for a specific power budget but25because of the OPP density, we can only choose an OPP with a power26budget lower than the requested one and under-utilize the CPU, thus27losing performance. In other words, one OPP under-utilizes the CPU28with a power less than the requested power budget and the next OPP29exceeds the power budget. An intermediate OPP could have been used if30it were present.31 32Solutions:33----------34 35If we can remove the static and the dynamic leakage for a specific36duration in a controlled period, the SoC temperature will37decrease. Acting on the idle state duration or the idle cycle38injection period, we can mitigate the temperature by modulating the39power budget.40 41The Operating Performance Point (OPP) density has a great influence on42the control precision of cpufreq, however different vendors have a43plethora of OPP density, and some have large power gap between OPPs,44that will result in loss of performance during thermal control and45loss of power in other scenarios.46 47At a specific OPP, we can assume that injecting idle cycle on all CPUs48belong to the same cluster, with a duration greater than the cluster49idle state target residency, we lead to dropping the static and the50dynamic leakage for this period (modulo the energy needed to enter51this state). So the sustainable power with idle cycles has a linear52relation with the OPP’s sustainable power and can be computed with a53coefficient similar to::54 55	    Power(IdleCycle) = Coef x Power(OPP)56 57Idle Injection:58---------------59 60The base concept of the idle injection is to force the CPU to go to an61idle state for a specified time each control cycle, it provides62another way to control CPU power and heat in addition to63cpufreq. Ideally, if all CPUs belonging to the same cluster, inject64their idle cycles synchronously, the cluster can reach its power down65state with a minimum power consumption and reduce the static leakage66to almost zero.  However, these idle cycles injection will add extra67latencies as the CPUs will have to wakeup from a deep sleep state.68 69We use a fixed duration of idle injection that gives an acceptable70performance penalty and a fixed latency. Mitigation can be increased71or decreased by modulating the duty cycle of the idle injection.72 73::74 75     ^76     |77     |78     |-------                         -------79     |_______|_______________________|_______|___________80 81     <------>82       idle  <---------------------->83                    running84 85      <----------------------------->86              duty cycle 25%87 88 89The implementation of the cooling device bases the number of states on90the duty cycle percentage. When no mitigation is happening the cooling91device state is zero, meaning the duty cycle is 0%.92 93When the mitigation begins, depending on the governor's policy, a94starting state is selected. With a fixed idle duration and the duty95cycle (aka the cooling device state), the running duration can be96computed.97 98The governor will change the cooling device state thus the duty cycle99and this variation will modulate the cooling effect.100 101::102 103     ^104     |105     |106     |-------                 -------107     |_______|_______________|_______|___________108 109     <------>110       idle  <-------------->111                running112 113      <--------------------->114          duty cycle 33%115 116 117     ^118     |119     |120     |-------         -------121     |_______|_______|_______|___________122 123     <------>124       idle  <------>125              running126 127      <------------->128       duty cycle 50%129 130The idle injection duration value must comply with the constraints:131 132- It is less than or equal to the latency we tolerate when the133  mitigation begins. It is platform dependent and will depend on the134  user experience, reactivity vs performance trade off we want. This135  value should be specified.136 137- It is greater than the idle state’s target residency we want to go138  for thermal mitigation, otherwise we end up consuming more energy.139 140Power considerations141--------------------142 143When we reach the thermal trip point, we have to sustain a specified144power for a specific temperature but at this time we consume::145 146 Power = Capacitance x Voltage^2 x Frequency x Utilisation147 148... which is more than the sustainable power (or there is something149wrong in the system setup). The ‘Capacitance’ and ‘Utilisation’ are a150fixed value, ‘Voltage’ and the ‘Frequency’ are fixed artificially151because we don’t want to change the OPP. We can group the152‘Capacitance’ and the ‘Utilisation’ into a single term which is the153‘Dynamic Power Coefficient (Cdyn)’ Simplifying the above, we have::154 155 Pdyn = Cdyn x Voltage^2 x Frequency156 157The power allocator governor will ask us somehow to reduce our power158in order to target the sustainable power defined in the device159tree. So with the idle injection mechanism, we want an average power160(Ptarget) resulting in an amount of time running at full power on a161specific OPP and idle another amount of time. That could be put in a162equation::163 164 P(opp)target = ((Trunning x (P(opp)running) + (Tidle x P(opp)idle)) /165			(Trunning + Tidle)166 167  ...168 169 Tidle = Trunning x ((P(opp)running / P(opp)target) - 1)170 171At this point if we know the running period for the CPU, that gives us172the idle injection we need. Alternatively if we have the idle173injection duration, we can compute the running duration with::174 175 Trunning = Tidle / ((P(opp)running / P(opp)target) - 1)176 177Practically, if the running power is less than the targeted power, we178end up with a negative time value, so obviously the equation usage is179bound to a power reduction, hence a higher OPP is needed to have the180running power greater than the targeted power.181 182However, in this demonstration we ignore three aspects:183 184 * The static leakage is not defined here, we can introduce it in the185   equation but assuming it will be zero most of the time as it is186   difficult to get the values from the SoC vendors187 188 * The idle state wake up latency (or entry + exit latency) is not189   taken into account, it must be added in the equation in order to190   rigorously compute the idle injection191 192 * The injected idle duration must be greater than the idle state193   target residency, otherwise we end up consuming more energy and194   potentially invert the mitigation effect195 196So the final equation is::197 198 Trunning = (Tidle - Twakeup ) x199		(((P(opp)dyn + P(opp)static ) - P(opp)target) / P(opp)target )200