From mboxrd@z Thu Jan 1 00:00:00 1970 From: Glauber Costa Subject: Re: [PATCH v3 1/6] measure exec_clock for rt sched entities Date: Wed, 30 May 2012 14:32:07 +0400 Message-ID: <4FC5F727.2040804@parallels.com> References: <1338371317-5980-1-git-send-email-glommer@parallels.com> <1338371317-5980-2-git-send-email-glommer@parallels.com> <1338373759.26856.238.camel@twins> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1338373759.26856.238.camel@twins> Sender: cgroups-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-ID: Content-Type: text/plain; charset="us-ascii"; format="flowed" To: Peter Zijlstra Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org, Paul Turner , Tejun Heo , "Eric W. Biederman" , handai.szj-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Andrew.Phillips-xheW4WVAX9Y@public.gmane.org, Serge Hallyn On 05/30/2012 02:29 PM, Peter Zijlstra wrote: > On Wed, 2012-05-30 at 13:48 +0400, Glauber Costa wrote: >> For simetry with the cfq tasks, measure exec_clock for the rt >> sched entities (rt_se). > > Symmetry methinks.. =p bad me > anyway, where is the symmetry?, fair.c:update_curr() > doesn't do the for_each_sched_entity() thing. It does implicitly, because fair.c:update_curr() is called from within enqueue_task(), that is called for_each_sched_entity in enqueue_task_fair(). > >> This can be used in a number of fashions. For instance, to >> compute total cpu usage in a cgroup that is generated by >> rt tasks. >> >> Signed-off-by: Glauber Costa >> CC: Peter Zijlstra >> CC: Paul Turner >> --- >> kernel/sched/rt.c | 5 +++++ >> kernel/sched/sched.h | 1 + >> 2 files changed, 6 insertions(+) >> >> diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c >> index c5565c3..30ee4e2 100644 >> --- a/kernel/sched/rt.c >> +++ b/kernel/sched/rt.c >> @@ -919,6 +919,11 @@ static void update_curr_rt(struct rq *rq) >> >> sched_rt_avg_update(rq, delta_exec); >> >> + for_each_sched_rt_entity(rt_se) { >> + rt_rq = rt_rq_of_se(rt_se); >> + schedstat_add(rt_rq, exec_clock, delta_exec); >> + } >> + >> if (!rt_bandwidth_enabled()) >> return; > > See, this just makes me sad.. you now have a double > for_each_sched_rt_entity() loop. The way I read the rt.c code, it it is called from enqueue_task_rt only once.