On 03/14/2013 06:58 PM, Peter Zijlstra wrote: > On Wed, 2013-03-13 at 11:07 +0800, Michael Wang wrote: > >> However, we already figure out the logical that wakeup related task >> could benefit from closely running, this could promise us somewhat >> reliable benefit. > > I'm not convinced that the 2 task wakeup scenario is the only sane > scenario. Imagine a ring of 3 tasks that wakes each other, if the > machine is loaded enough, those 3 tasks might fit a single cpu just > fine -- esp. if one of those is always idle. > > But your strict 1:1 wakeup relation thing will completely fail to > detect this.
Hmm...yeah, I see your point here, some optimize timing will always be missed whatever how we twiddle the knob besides 0. You are right, that's a problem, although currently there are no workload to prove it, but we have the theory... > >> IMHO, that sounds a little easier for users than to make the decision on >> tell me how long to pull tasks together, they may be confused... > > Users shouldn't ever need/want/etc.. rely on this. They should just run > their programs and be (reasonably) happy. > >> In summary, I think we have two point here need to be considered: >> >> 1. what about the missed optimize timing, that may benefit >> some workload (although we haven't found such workload yet). > > Missed optimize; as in not calling wake_affine() due to the throttle? > If we're calling it at such a high frequency it is very likely the next > call isn't very far away. > >> 2. how many benefit could wake_affine() stuff bring to us, >> if limit rate benefit us, why don't we remove it? > > It could bring the same benefit but at lower overhead, what's the point > of computing the same value over and over again? Also, the rate limit > thing naturally works for the soft/hard-irq case. Just try to confirm my understanding, so we are going to do something like: if (now - wakee->last > time_limit) && wakeup_affine() wakee->last = now select_idle_sibling(curr_cpu) else select_idle_sibling(prev_cpu) And time_limit is some static value respect to the rate of load balance, is that correct? Currently I haven't found regression by reduce the rate, but if we found such benchmark, we may still need a way (knob or CONFIG) to disable this limitation. > > Now, there's another detail I thought up, one could only limit the > wake_affine() calls once it starts returning false. Hmm..if wake_affine() keep succeed, then there will be no difference? I do believe pgbench match the case, since wake_affine() stuff make it suffered...and the more it suffered, means the more often wake_affine() succeed and pull none related tasks together. I really can't see how could it do help... did I miss something? Regards, Michael Wang > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/