* Mel Gorman <[email protected]> wrote:

> On Mon, Jan 25, 2016 at 04:46:35PM +0100, Ingo Molnar wrote:
> > > Of course, it'll be our luck that tracking the data for these
> > > tracepoints is the most expensive part of schedstats ...
> > > 
> > > Ingo?
> > 
> > IIRC it needed only a small subset of schedstats to make those tracepoints 
> > work.
> > 
> > We already have too much overhead in the scheduler as-is - and the extra 
> > cache 
> > footprint does not even show on the typically cache-rich enterprise CPUs 
> > most of 
> > the scalability testing goes on.
> > 
> > My minimum requirement for such runtime enablement would be to make it 
> > entirely 
> > static-branch patched and triggered at the call sites as well - not hidden 
> > inside 
> > schedstat functions.
> > 
> 
> As it is, it's static-branch patched but I'm struggling to see why they 
> cannot 
> be hidden in the schedstat_* functions which are just preprocessor macros. 
> The 
> checks could be put in the callsites but it's a lot of updates and I don't 
> think 
> the end result would be very nice to read.

So I was judging by:

@@ -755,7 +755,12 @@ static void
 update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se)
 {
        struct task_struct *p;
-       u64 delta = rq_clock(rq_of(cfs_rq)) - se->statistics.wait_start;
+       u64 delta;
+
+       if (static_branch_unlikely(&sched_schedstats))
+               return;
+

which puts a static branch inside a real function, not preprocessor macros.

Thanks,

        Ingo

Reply via email to