On Tue, Apr 10, 2018 at 04:59:31PM +0100, Patrick Bellasi wrote: > The iowait boosting code has been recently updated to add a progressive > boosting behavior which allows to be less aggressive in boosting tasks > doing only sporadic IO operations, thus being more energy efficient for > example on mobile platforms. > > The current code is now however a bit convoluted. Some functionalities > (e.g. iowait boost reset) are replicated in different paths and their > documentation is slightly misaligned.
While your patch does seem to improve things, it still has duplicated bits in. Eg. the TICK_NSEC clearing exists in both functions. > - sugov_set_iowait_boost: is now in charge only to set/increase the IO > wait boost, every time a task wakes up from an IO wait. > > - sugov_iowait_boost: is now in charge to reset/reduce the IO wait > boost, every time a sugov update is triggered, as well as > to (eventually) enforce the currently required IO boost value. I'm not sold on those function names; feels like we can do better, although I'm struggling to come up with anything sensible just now. > > if (delta_ns > TICK_NSEC) { > + sg_cpu->iowait_boost = iowait > + ? sg_cpu->sg_policy->policy->min : 0; > + sg_cpu->iowait_boost_pending = iowait; > + return; > } > + if (delta_ns > TICK_NSEC) { > + sg_cpu->iowait_boost = 0; > + sg_cpu->iowait_boost_pending = false; > + return; > + } Looks like something we can maybe put in a helper or something.