From: "Gregory Haskins" <ghaskins@novell.com>
To: "Peter Zijlstra" <peterz@infradead.org>
Cc: <mingo@elte.hu>, <rostedt@goodmis.org>, <tglx@linutronix.de>,
"David Bahi" <DBahi@novell.com>, <linux-kernel@vger.kernel.org>,
<linux-rt-users@vger.kernel.org>
Subject: Re: [PATCH 3/3] sched: terminate newidle balancing once atleastone task has moved over
Date: Tue, 24 Jun 2008 10:55:15 -0600 [thread overview]
Message-ID: <4860EEB3.BA47.005A.0@novell.com> (raw)
In-Reply-To: <1214314273.4351.34.camel@twins>
>>> On Tue, Jun 24, 2008 at 9:31 AM, in message <1214314273.4351.34.camel@twins>,
Peter Zijlstra <peterz@infradead.org> wrote:
> On Tue, 2008-06-24 at 07:18 -0600, Gregory Haskins wrote:
>> >>> On Tue, Jun 24, 2008 at 6:13 AM, in message
> <1214302406.4351.23.camel@twins>,
>> Peter Zijlstra <peterz@infradead.org> wrote:
>> > On Mon, 2008-06-23 at 17:04 -0600, Gregory Haskins wrote:
>> >> Inspired by Peter Zijlstra.
>> >>
>> >> Signed-off-by: Gregory Haskins <ghaskins@novell.com>
>> >> ---
>> >>
>> >> kernel/sched.c | 4 ++++
>> >> 1 files changed, 4 insertions(+), 0 deletions(-)
>> >>
>> >> diff --git a/kernel/sched.c b/kernel/sched.c
>> >> index 3efbbc5..c8e8520 100644
>> >> --- a/kernel/sched.c
>> >> +++ b/kernel/sched.c
>> >> @@ -2775,6 +2775,10 @@ static int move_tasks(struct rq *this_rq, int
>> > this_cpu, struct rq *busiest,
>> >> max_load_move - total_load_moved,
>> >> sd, idle, all_pinned, &this_best_prio);
>> >> class = class->next;
>> >> +
>> >> + if (idle == CPU_NEWLY_IDLE && this_rq->nr_running)
>> >> + break;
>> >> +
>> >> } while (class && max_load_move > total_load_moved);
>> >>
>> >> return total_load_moved > 0;
>> >
>> >
>> > right,.. uhm, except that you forgot all the other fixes and
>> > generalizations I had,..
>>
>> Heh...well I intentionally simplified it, but perhaps that is out of
> ignorance. I did say "inspired by" ;)
>>
>> >
>> > The LB_START/LB_COMPLETE stuff is needed to fix CFS load balancing. It
>> > now always iterates the first sysctl_sched_nr_migrate tasks, and if it
>> > doesn't find any there, just gives up - which isn't too big of a problem
>> > with it set to 32, but if you drop it to 2/4 stuff starts valing apart.
>> >
>> > And the break I had here, only checks classes above and equal to the
>> > current class.
>> >
>> > This again is needed when you have more classes.
>>
>> Im not sure I understand/agree here (unless you plan on having a class below
> sched_idle()??)
>>
>> The fact that we are going NEWLYIDLE to me implies that all the other
> classes are
>> "above or equal". And rq->nr_running approximates all the per-class vtable
> work
>> that you had done to probe the higher classes. We currently only hit this
> code when
>> rq->nr_running == 0, so rq->nr_running !=0 seems like a logical termination
>> condition.
>>
>> I guess what I am not clear on is: "when would we be NEWLYIDLE in a higher
> class,
>> yet have tasks populated in lower classes such at nr_running is non-zero".
>> Additionally, even if we have that condition (e.g. with something like the
> EDF work you
>> are doing, perhaps?), shouldn't we patch the advanced form of this logic
> when the rest
>> of the code goes in? For now, this seems like the most straight forward way
> to
>> accomplish the goal. But I could be missing something ;)
>
> The thing I'm worried about - but it might be unfounded and is certainly
> so now - is that suppose we have:
>
> EDF
> FIFO/RR
> SOFTRT
> OTHER
> IDLE
>
> and we've just done FIFO/RR (which is a nop) and and some interrupt woke
> an OTHER task while we dropped for lockbreak.
>
> At this point your logic would bail out and start running the OTHER
> task, even though we might have found a SOFTRQ task to run had we
> bothered to look.
>
Ok, now I think I understand your concern. But I think you may be worrying about
this at the wrong level. I would think we should be doing something similar to the
post-balance patch I submitted a while back. It basically iterated through each class,
giving each an opportunity to pull tasks over in its own way. The difference there
was that I was doing it post-schedule to deal with that locking issue. We could
take the same idea and do it where we pre_schedule() today.
I think the f_b_g() et. al. is really SCHED_OTHER specific, and probably always will be.
Lets just formalize that. Perhaps we should move all the LB code to sched_fair and set
something like what I proposed up. Thoughts?
-Greg
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2008-06-24 16:55 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-23 23:04 [PATCH 0/3] RT: scheduler newidle enhancements Gregory Haskins
2008-06-23 23:04 ` [PATCH 1/3] sched: enable interrupts and drop rq-lock during newidle balancing Gregory Haskins
2008-06-24 0:11 ` Steven Rostedt
2008-06-24 10:13 ` Peter Zijlstra
2008-06-24 13:15 ` [PATCH 1/3] sched: enable interrupts and drop rq-lock duringnewidle balancing Gregory Haskins
2008-06-24 12:24 ` Peter Zijlstra
2008-06-24 12:39 ` [PATCH 1/3] sched: enable interrupts and drop rq-lockduringnewidle balancing Gregory Haskins
2008-06-23 23:04 ` [PATCH 2/3] sched: only run newidle if previous task was CFS Gregory Haskins
2008-06-24 9:58 ` Peter Zijlstra
2008-06-24 10:38 ` Peter Zijlstra
2008-06-23 23:04 ` [PATCH 3/3] sched: terminate newidle balancing once at least one task has moved over Gregory Haskins
2008-06-24 0:50 ` Nick Piggin
2008-06-24 1:07 ` Steven Rostedt
2008-06-24 1:26 ` Nick Piggin
2008-06-24 2:39 ` Gregory Haskins
2008-06-24 1:46 ` Nick Piggin
2008-06-24 2:59 ` Gregory Haskins
2008-06-24 10:13 ` Peter Zijlstra
2008-06-24 13:18 ` [PATCH 3/3] sched: terminate newidle balancing once at leastone " Gregory Haskins
2008-06-24 13:31 ` Peter Zijlstra
2008-06-24 16:55 ` Gregory Haskins [this message]
2008-06-24 19:44 ` [PATCH 3/3] sched: terminate newidle balancing once atleastone " Peter Zijlstra
2008-06-24 0:15 ` [PATCH 0/3] RT: scheduler newidle enhancements Steven Rostedt
2008-06-24 1:51 ` Gregory Haskins
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4860EEB3.BA47.005A.0@novell.com \
--to=ghaskins@novell.com \
--cc=DBahi@novell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox