Re: [PATCH] sched: fix lose fair sleeper bonus in switch_to_fair()

From: Byungchul Park
Date: Tue Sep 08 2015 - 05:18:11 EST


On Tue, Sep 08, 2015 at 04:45:46PM +0800, Wanpeng Li wrote:
> On 9/8/15 4:38 PM, Wanpeng Li wrote:
> >On 9/8/15 4:22 PM, Byungchul Park wrote:
> >>On Tue, Sep 08, 2015 at 04:04:49PM +0800, Wanpeng Li wrote:
> >>>>>However, if se->vruntime -= cfs_rq->min_vruntime is positive, the
> >>>>>behavior is different after your patch. e.g. se->vruntime(the
> >>>>>relative vruntime in switched_to_fair()) < min_vruntime -
> >>>>>sysctl_sched_latency/2
> >>>>>
> >>>>>before your patch:
> >>>>>
> >>>>>se->vruntime = min_vruntime - sysctl_sched_latency/2 (place_entity())
> >>>>my patch is based on ff277d4 commit at tip/sched/core.
> >>>>
> >>>>there's no change between before and after.
> >>>>
> >>>>check it please.
> >>>>
> >>>>and this logic seems to be no problem to me. :(
> >>>Your logic will lose fair sleeper bonus in the scenario which
> >>>I pointed out.
> >>i mean in ff277d4 commit:
> >
> >Please include the commit subject when you point out a commit, do
> >you mean this one?
> >
> >commit ff277d4250fe715b6666219b1a3423b863418794
> >Author: Andrea Parri <parri.andrea@xxxxxxxxx>
> >Date: Wed Aug 5 15:56:19 2015 +0200
> >
> > sched/deadline: Fix comment in enqueue_task_dl()
> >
> > The "dl_boosted" flag is set by comparing *absolute* deadlines
> > (c.f., rt_mutex_setprio()).
> >
> >
> >What's the relationship w/ this patch?
>
> I think you mean your commit:
>
> commit 7855a35ac07a350e2cd26f09568a6d8e372be358
> Author: Byungchul Park <byungchul.park@xxxxxxx>
> Date: Mon Aug 10 18:02:55 2015 +0900
>
> sched: Ensure a task has a non-normalized vruntime when
> returning back to CFS
>
>
> However, that is wrong in the scenario which I mentioned.

then.. can i think you are not talking about a commit (23ec30ddd7c1306:
'sched: add two functions for att(det)aching a task to(from) a cfs_rq'),
but talking about a commit (7855a35ac07a350: 'sched: Ensure a task has a
non-normalized vruntime when returning back to CFS')?

even in this case, as i already said, place_entity() should be performed
after restoring a normalized value to the meaningful original value.
IMHO, it is wrong that se->vruntime is assigned with a bonused value
unconditionally. when the task was detached, place_entity() made the
entity have a bonused vruntime if it was eligible. if it was not
eligible e.g. it had a too big vruntime before going to sleep, then
we should not assign a bonused vruntime which is originally intended by
place_entity().

>
> Regards,
> Wanpeng Li
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/