Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sched: Don't call task_group() too many times in set_task_rq()

It improves perfomance, especially if autogroup is enabled.

The size of set_task_rq() was 0x180 and now it is 0xa0.

Signed-off-by: Andrew Vagin <avagin@openvz.org>
Acked-by: Paul Turner <pjt@google.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1321020240-3874331-1-git-send-email-avagin@openvz.org
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by

Andrew Vagin and committed by
Ingo Molnar
a3e5d109 f4d6f6c2

+8 -4
+8 -4
kernel/sched.c
··· 793 793 /* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */ 794 794 static inline void set_task_rq(struct task_struct *p, unsigned int cpu) 795 795 { 796 + #if defined(CONFIG_FAIR_GROUP_SCHED) || defined(CONFIG_RT_GROUP_SCHED) 797 + struct task_group *tg = task_group(p); 798 + #endif 799 + 796 800 #ifdef CONFIG_FAIR_GROUP_SCHED 797 - p->se.cfs_rq = task_group(p)->cfs_rq[cpu]; 798 - p->se.parent = task_group(p)->se[cpu]; 801 + p->se.cfs_rq = tg->cfs_rq[cpu]; 802 + p->se.parent = tg->se[cpu]; 799 803 #endif 800 804 801 805 #ifdef CONFIG_RT_GROUP_SCHED 802 - p->rt.rt_rq = task_group(p)->rt_rq[cpu]; 803 - p->rt.parent = task_group(p)->rt_se[cpu]; 806 + p->rt.rt_rq = tg->rt_rq[cpu]; 807 + p->rt.parent = tg->rt_se[cpu]; 804 808 #endif 805 809 } 806 810