Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1411946
| From | Vincent Guittot <vincent.guittot@linaro.org> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task |
| Date | 2016-06-02 09:40 +0200 |
| Message-ID | <rFvou-2Z6-29@gated-at.bofh.it> (permalink) |
| References | <rFcFb-7Qb-11@gated-at.bofh.it> <rFcFc-7Qb-33@gated-at.bofh.it> <rFdrA-8lQ-11@gated-at.bofh.it> <rFrkR-xA-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On 1 June 2016 at 21:21, Yuyang Du <yuyang.du@intel.com> wrote: > On Wed, Jun 01, 2016 at 02:20:09PM +0200, Vincent Guittot wrote: >> On 1 June 2016 at 05:41, Yuyang Du <yuyang.du@intel.com> wrote: >> > Vincent reported that the first task to a new task group's cfs_rq will >> > be attached in attach_task_cfs_rq() and once more when it is enqueued >> > (see https://lkml.org/lkml/2016/5/25/388). >> > >> > Actually, it is much worse. The load is currently attached mostly twice >> > every time when we switch to fair class or change task groups. These two >> > scenarios are concerned, which we will descripbe in the following >> > respectively >> >> AFAICT and according to tests that i have done around these 2 use >> cases, the task is attached only once during a switched to fair and a >> sched_move_task. Have you face such situation during tests ? What is >> the sequence that generates this issue ? >> >> > >> > 1) Switch to fair class: >> > >> > The sched class change is done like this: >> > >> > if (queued) >> > enqueue_task(); >> > check_class_changed() >> > switched_from() >> > switched_to() >> > >> > If the task is on_rq, it should have already been enqueued, which >> > MAY have attached the load to the cfs_rq, if so, we shouldn't attach >> >> No, it can't. The only way to attach task during enqueue is if >> last_update_time has been reset which is not the case during a >> switched_to_fair > > My response to your above two comments: > > As I said, there can be four possibilities going through the above sequences: > > (1) on_rq, (2) !on_rq, (a) was fair class (representing last_update_time != 0), > (b) never was fair class (representing last_update_time == 0, but may not be > limited to this) > > Crossing them, we have (1)(a), (1)(b), (2)(a), and (2)(b). > > Some will attach twice, which are (1)(b) and (2)(b), the other will attach > once, which are (1)(a) and (2)(a). The difficult part is they can be attached > at different places. ok for (1)(b) but not for (2)(b) and it's far from "attached mostly twice every time" The root cause is that the last_update_time is initialize to 0 which have a special meaning for the load_avg. We should better initialize it to something different like for cfs_rq > > So, the simplest sulution is to reset the task's last_update_time to 0, when > the task is switched from fair. Then let task enqueue do the load attachment, > only once at this place under all circumstances. IMHO, the better solution is to not initialize last_update_time to something different from 0 which has a special meaning > >> > 2) Change between fair task groups: >> > >> > The task groups are changed like this: >> > >> > if (queued) >> > dequeue_task() >> > task_move_group() >> > if (queued) >> > enqueue_task() >> > >> > Unlike the switch to fair class, if the task is on_rq, it will be enqueued >> > after we move task groups, so the simplest solution is to reset the >> > task's last_update_time when we do task_move_group(), and then let >> > enqueue_task() do the load attachment. >> >> Same for this sequence, the task is explicitly attached only once >> during the task_move_group but never during the enqueue. > > Your patch said there can be twice, :) My patch says the 1st task that is attached on a cfs rq wil be attached twice not "The load is currently attached mostly twice every time when we switch to fair class or change task groups. " You say that it's happen mostly every time and i disagree on that. For Change between fair task group, i still don't see how it can attached mostly twice every time > >> So you want to delay the attach during the enqueue ? > > Yes, despite of delay or not delay, the key is to only attach at enqueue(), > this is the simplest solution. > >> But what happen >> if the task was not enqueue when it has been moved between groups ? >> The load_avg of the task stays frozen during the period because its >> last_update_time is reset > > That is the !on_rq case. By "frozen", you mean it won't be decayed, right? > Yes, this is the downside. But what if the task will never be enqueued, That's a big downside IMO > that legacy load does not mean anything in this case.
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v3 0/5] sched/fair: Fix attach and detach sched avgs for task group change or sched class change Yuyang Du <yuyang.du@intel.com> - 2016-06-01 13:40 +0200
[PATCH v3 2/5] sched/fair: Skip detach and attach new group task Yuyang Du <yuyang.du@intel.com> - 2016-06-01 13:40 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Vincent Guittot <vincent.guittot@linaro.org> - 2016-06-01 14:30 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Yuyang Du <yuyang.du@intel.com> - 2016-06-02 05:20 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Vincent Guittot <vincent.guittot@linaro.org> - 2016-06-02 09:40 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Vincent Guittot <vincent.guittot@linaro.org> - 2016-06-02 09:50 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Yuyang Du <yuyang.du@intel.com> - 2016-06-02 09:50 +0200
Re: [PATCH v3 2/5] sched/fair: Skip detach and attach new group task Yuyang Du <yuyang.du@intel.com> - 2016-06-02 09:50 +0200
[PATCH v3 4/5] sched/fair: Move load and util avgs from wake_up_new_task() to sched_fork() Yuyang Du <yuyang.du@intel.com> - 2016-06-01 13:40 +0200
Re: [PATCH v3 4/5] sched/fair: Move load and util avgs from wake_up_new_task() to sched_fork() Vincent Guittot <vincent.guittot@linaro.org> - 2016-06-01 14:30 +0200
Re: [PATCH v3 4/5] sched/fair: Move load and util avgs from wake_up_new_task() to sched_fork() Yuyang Du <yuyang.du@intel.com> - 2016-06-02 05:00 +0200
csiph-web