Re: [PATCH] sched: Make schedstats a runtime tunable that is disabled by default

From: Ingo Molnar
Date: Mon Jan 25 2016 - 13:40:15 EST



* Mel Gorman <mgorman@xxxxxxxxxxxxxxxxxxx> 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