From: Mike Galbraith <efault@gmx.de>
To: vatsa@linux.vnet.ibm.com
Cc: Rik van Riel <riel@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Avi Kiviti <avi@redhat.com>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Ingo Molnar <mingo@elte.hu>,
Anthony Liguori <aliguori@linux.vnet.ibm.com>
Subject: Re: [RFC PATCH 2/3] sched: add yield_to function
Date: Fri, 03 Dec 2010 15:45:10 +0100 [thread overview]
Message-ID: <1291387511.7992.15.camel@marge.simson.net> (raw)
In-Reply-To: <20101203134618.GG27994@linux.vnet.ibm.com>
On Fri, 2010-12-03 at 19:16 +0530, Srivatsa Vaddagiri wrote:
> On Fri, Dec 03, 2010 at 06:54:16AM +0100, Mike Galbraith wrote:
> > > +void yield_to(struct task_struct *p)
> > > +{
> > > + unsigned long flags;
> > > + struct sched_entity *se = &p->se;
> > > + struct rq *rq;
> > > + struct cfs_rq *cfs_rq;
> > > + u64 remain = slice_remain(current);
> >
> > That "slice remaining" only shows the distance to last preempt, however
> > brief. It shows nothing wrt tree position, the yielding task may well
> > already be right of the task it wants to yield to, having been a buddy.
>
> Good point.
>
> > > cfs_rq = cfs_rq_of(se);
> > > + se->vruntime -= remain;
> > > + if (se->vruntime < cfs_rq->min_vruntime)
> > > + se->vruntime = cfs_rq->min_vruntime;
> >
> > (This is usually done using max_vruntime())
> >
> > If the recipient was already left of the fair stick (min_vruntime),
> > clipping advances it's vruntime, vaporizing entitlement from both donor
> > and recipient.
> >
> > What if a task tries to yield to another not on the same cpu, and/or in
> > the same task group?
>
> In this case, target of yield_to is a vcpu belonging to the same VM and hence is
> expected to be in same task group, but I agree its good to put a check.
>
> > This would munge min_vruntime of other queues. I
> > think you'd have to restrict this to same cpu, same group. If tasks can
> > donate cross cfs_rq, (say) pinned task A cpu A running solo could donate
> > vruntime to selected tasks pinned to cpu B, for as long as minuscule
> > preemptions can resupply ammo. Would suck to not be the favored child.
>
> IOW starving "non-favored" childs?
Yes, as in fairness ceases to exists.
> > Maybe you could exchange vruntimes cooperatively (iff same cfs_rq)
> > between threads, but I don't think donations with clipping works.
>
> Can't that lead to starvation again (as I pointed in a mail to Peterz):
>
> p0 -> A0 B0 A1
>
> A0/A1 enter a yield_to(other) deadlock, which means we keep swapping their
> vruntimes, starving B0?
I'll have to go back and re-read that. Off the top of my head, I see no
way it could matter which container the numbers live in as long as they
keep advancing, and stay in the same runqueue. (hm, task weights would
have to be the same too or scaled. dangerous business, tinkering with
vruntimes)
-Mike
next prev parent reply other threads:[~2010-12-03 14:45 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-02 19:41 [RFC PATCH 0/3] directed yield for Pause Loop Exiting Rik van Riel
2010-12-02 19:43 ` [RFC PATCH 1/3] kvm: keep track of which task is running a KVM vcpu Rik van Riel
2010-12-03 1:18 ` Chris Wright
2010-12-03 14:50 ` Rik van Riel
2010-12-03 15:55 ` Chris Wright
2010-12-05 12:40 ` Avi Kivity
2010-12-03 12:17 ` Srivatsa Vaddagiri
2010-12-03 14:16 ` Rik van Riel
2010-12-05 12:59 ` Avi Kivity
2010-12-02 19:44 ` [RFC PATCH 2/3] sched: add yield_to function Rik van Riel
2010-12-03 0:50 ` Chris Wright
2010-12-03 18:27 ` Rik van Riel
2010-12-03 19:30 ` Chris Wright
2010-12-03 21:30 ` Peter Zijlstra
2010-12-03 5:54 ` Mike Galbraith
2010-12-03 13:46 ` Srivatsa Vaddagiri
2010-12-03 14:45 ` Mike Galbraith [this message]
2010-12-03 14:48 ` Rik van Riel
2010-12-03 15:09 ` Mike Galbraith
2010-12-03 15:35 ` Rik van Riel
2010-12-03 16:20 ` Srivatsa Vaddagiri
2010-12-03 17:09 ` Rik van Riel
2010-12-03 17:29 ` Srivatsa Vaddagiri
2010-12-03 17:33 ` Rik van Riel
2010-12-03 17:45 ` Srivatsa Vaddagiri
2010-12-03 20:05 ` Mike Galbraith
2010-12-03 21:26 ` Peter Zijlstra
2010-12-03 13:23 ` Peter Zijlstra
2010-12-03 13:30 ` Srivatsa Vaddagiri
2010-12-03 14:03 ` Peter Zijlstra
2010-12-03 14:06 ` Srivatsa Vaddagiri
2010-12-03 14:10 ` Srivatsa Vaddagiri
2010-12-03 21:23 ` Peter Zijlstra
2010-12-04 13:02 ` Rik van Riel
2010-12-10 4:34 ` Rik van Riel
2010-12-10 8:39 ` Srivatsa Vaddagiri
2010-12-10 14:55 ` Rik van Riel
2010-12-08 17:55 ` Rik van Riel
2010-12-08 20:00 ` Peter Zijlstra
2010-12-08 20:04 ` Peter Zijlstra
2010-12-08 22:59 ` Rik van Riel
2010-12-02 19:45 ` [RFC PATCH 3/3] kvm: use yield_to instead of sleep in kvm_vcpu_on_spin Rik van Riel
2010-12-03 2:24 ` Chris Wright
2010-12-05 12:58 ` Avi Kivity
2010-12-05 12:56 ` Avi Kivity
2010-12-08 22:38 ` Rik van Riel
2010-12-09 10:28 ` Avi Kivity
2010-12-09 17:07 ` Rik van Riel
2010-12-11 7:27 ` Avi Kivity
2010-12-02 22:41 ` [RFC PATCH 0/3] directed yield for Pause Loop Exiting Chris Wright
2010-12-05 13:02 ` Avi Kivity
2010-12-10 5:03 ` Balbir Singh
2010-12-10 14:54 ` Rik van Riel
2010-12-11 7:31 ` Avi Kivity
2010-12-11 13:57 ` Balbir Singh
2010-12-13 11:57 ` Avi Kivity
2010-12-13 12:39 ` Balbir Singh
2010-12-13 12:42 ` Avi Kivity
2010-12-13 17:02 ` Rik van Riel
2010-12-14 9:25 ` Balbir Singh
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=1291387511.7992.15.camel@marge.simson.net \
--to=efault@gmx.de \
--cc=a.p.zijlstra@chello.nl \
--cc=aliguori@linux.vnet.ibm.com \
--cc=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=riel@redhat.com \
--cc=vatsa@linux.vnet.ibm.com \
/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