On Fri, Jul 14, 2017 at 08:53:56AM -0700, Andi Kleen wrote: > > > - if (cpuidle_not_available(drv, dev)) { > > > + if (cpuidle_not_available(drv, dev) || this_is_a_fast_idle) { > > > default_idle_call(); > > > goto exit_idle; > > > } > > > > No, that's wrong. We want to fix the normal C state selection process to > > pick the right C state. > > > > The fast-idle criteria could cut off a whole bunch of available C > > states. We need to understand why our current C state pick is wrong and > > amend the algorithm to do better. Not just bolt something on the side. > > Fast idle uses the same predictor as the current C state governor. > > The only difference is that it uses a different threshold for C1. > Likely that's the cause. If it was using the same threshold the > decision would be the same.
Right, so its selecting C1 for longer. That in turn means we could now never select C2; because the fast-idle threshold is longer than our C2 time. Which I feel is wrong; because if we're getting C1 wrong, what says we're then getting the rest right. > The thresholds are coming either from the tables in intel idle, > or from ACPI (let's assume the first) > > That means either: the intel idle C1 threshold on the system Aubrey > tested on is too high, or the fast idle threshold is too low. Or our predictor is doing it wrong. It could be its over-estimating idle duration. For example, suppose we have an idle distribution of: 40% < C1 60% > C2 And we end up selecting C2. Even though in many of our sleeps we really wanted C1. And as said; Daniel has been working on a better predictor -- now he's probably not used it on the network workload you're looking at, so that might be something to consider.