Messages in this thread | | | From | Vincent Guittot <> | Date | Tue, 31 May 2016 14:33:45 +0200 | Subject | Re: [PATCH v2 2/3] sched/fair: Skip detach and attach new group task |
| |
On 31 May 2016 at 14:03, Peter Zijlstra <peterz@infradead.org> wrote: > On Tue, May 31, 2016 at 01:55:49PM +0200, Vincent Guittot wrote: >> Hi Yuyang, >> >> On 31 May 2016 at 00:32, 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 worse, attach_task_cfs_rq() is invoked for new task even >> > way before the new task is initiated in init_entity_runnable_average(). >> > >> > Solve this by avoiding attach as well as detach new task in >> > task_move_group_fair(). To do it, we need to know whether the task >> > is forked or not, so we pass this info all the way from sched_move_task() >> > to attach_task_cfs_rq(). >> >> I have tested your patch and I can't the spurious detach >> /attach_task_cfs_rq anymore >> so you can add my tested-by. >> > > Could someone update the Changelog to better explain the whole > callchain. > > Because a quick look seems to suggest something like: > > copy_process() > sched_fork() > ... > cgroup_post_fork() > ss->fork() := cpu_cgroup_fork() > > Which seems to suggest init_entity_runnable_average() is placed wrong > and should live in sched_fork() ? > > Or am I not getting it.. ?
The sched_avg of a task is not used anymore in copy_process with yuyang's patchset. To be fully correct, we still have a p->se.avg.last_update_time = 0 in cpu_cgroup_fork but this is just the side effect of factoring cpu_group_fork and cpu_group_move in sched_move_task and it will be overwritten by init_entity_runnable_average before being used. Now, cpu_cgroup_fork() only sets task group and cfs_rq of the forked task
copy_process sched_fork ... cgroup_post_fork ss->fork() := cpu_cgroup_fork() which only set task group and cfs_rq of the sched_entity of the task
wake_up_new_task init_entity_runnable_average activate_task enqueue_task attach_task
| |