Messages in this thread | | | Subject | Re: [PATCH 1/3] sched, balancing: Update rq->max_idle_balance_cost whenever newidle balance is attempted | From | Jason Low <> | Date | Thu, 24 Apr 2014 09:53:37 -0700 |
| |
On Thu, 2014-04-24 at 14:44 +0200, Peter Zijlstra wrote: > On Thu, Apr 24, 2014 at 02:04:15PM +0200, Peter Zijlstra wrote: > > On Thu, Apr 24, 2014 at 03:44:47PM +0530, Preeti U Murthy wrote: > > > What about the update of next_balance field? See the code snippet below. > > > This will also be skipped as a consequence of the commit e5fc6611 right? > > > > > > if (pulled_task || time_after(jiffies, this_rq->next_balance)) { > > > /* > > > * We are going idle. next_balance may be set based on > > > * a busy processor. So reset next_balance. > > > */ > > > this_rq->next_balance = next_balance; > > > } > > > > > > Also the comment in the above snippet does not look right to me. > > > It says "we are going idle" but the condition checks for pulled_task. > > > > Yeah, that's odd indeed. Ingo did that back in dd41f596cda0d, I suspect > > its an error, but.. > > > > So I think that should become !pulled_task || time_after(). > > Hmm, no, I missed that the for_each_domain() loop pushes next_balance > ahead if it did a balance on the domain. > > So it actually makes sense and the comment is wrong, but then you're > also right that we want to not skip that.
Hi Preeti, Peter,
So I thought that the original rationale (commit 1bd77f2d) behind updating rq->next_balance in idle_balance() is that, if we are going idle (!pulled_task), we want to ensure that the next_balance gets calculated without the busy_factor.
If the rq is busy, then rq->next_balance gets updated based on sd->interval * busy_factor. However, when the rq goes from "busy" to idle, rq->next_balance might still have been calculated under the assumption that the rq is busy. Thus, if we are going idle, we would then properly update next_balance without the busy factor if we update when !pulled_task.
| |