Re: [PATCH -tip v3 09/11] data_race: Avoid nested statement expression

From: Marco Elver
Date: Tue May 26 2020 - 09:12:41 EST

On Tue, 26 May 2020 at 14:19, Arnd Bergmann <arnd@xxxxxxxx> wrote:
> On Tue, May 26, 2020 at 2:02 PM Will Deacon <will@xxxxxxxxxx> wrote:
> > On Tue, May 26, 2020 at 12:42:16PM +0200, Arnd Bergmann wrote:
> > >
> > > I find this patch only solves half the problem: it's much faster than
> > > without the
> > > patch, but still much slower than the current mainline version. As far as I'm
> > > concerned, I think the build speed regression compared to mainline is not yet
> > > acceptable, and we should try harder.
> > >
> > > I have not looked too deeply at it yet, but this is what I found from looking
> > > at a file in a randconfig build:
> > >
> > > Configuration: see
> >
> > So this .config actually has KCSAN enabled. Do you still see the slowdown
> > with that disabled?
> Yes, enabling or disabling KCSAN seems to make no difference to
> compile speed in this config and source file, I still get the 12 seconds
> preprocessing time and 9MB file size with KCSAN disabled, possibly
> a few percent smaller/faster. I actually thought that CONFIG_FTRACE
> had a bigger impact, but disabling that also just reduces the time
> by a few percent rather than getting it down to the expected milliseconds.
> > Although not ideal, having a longer compiler time when
> > the compiler is being asked to perform instrumentation doesn't seem like a
> > show-stopper to me.
> I agree in general, but building an allyesconfig kernel is still an important
> use case that should not take twice as long after a small kernel change
> regardless of whether a new feature is used or not. (I have not actually
> compared the overall build speed for allmodconfig, as this takes a really
> long time at the moment)

Note that an 'allyesconfig' selects KASAN and not KCSAN by default.
But I think that's not relevant, since KCSAN-specific code was removed
from ONCEs. In general though, it is entirely expected that we have a
bit longer compile times when we have the instrumentation passes

But as you pointed out, that's irrelevant, and the significant
overhead is from parsing and pre-processing. FWIW, we can probably
optimize Clang itself a bit:

-- Marco