Re: [GIT pull] perf/urgent for 5.7-rc2

From: Josh Poimboeuf
Date: Mon Apr 20 2020 - 14:17:40 EST


On Mon, Apr 20, 2020 at 07:40:31PM +0200, Peter Zijlstra wrote:
> On Mon, Apr 20, 2020 at 09:51:55AM -0700, Linus Torvalds wrote:
> > On Mon, Apr 20, 2020 at 12:48 AM Ingo Molnar <mingo@xxxxxxxxxx> wrote:
> > >
> > > Fortunately, much of what objtool does against vmlinux.o can be
> > > parallelized in a rather straightforward fashion I believe, if we build
> > > with -ffunction-sections.
> >
> > Well, I was actually thinking about a simpler model.
> >
> > By "link time" I didn't mean "after final link". Yes, there may be
> > reasons to do it at that point too (to do any whole-program checks),
> > but that wasn't what I meant.
> >
> > I meant literally doing it in the $(LD) and $(AR) phases, when you
> > still have lots of independent object files that you are just about to
> > link (or archive - do we even do that any more?) into one.
> >
> > Then you'd parallelize exactly the same way we do now: one object file
> > at a time, and with no real change of semantics.
> >
> > IOW, what I was thinking that instead of doing it as part of a final
> > step after the CC/AS, we'd do it as a preparatory step before the
> > LD/AR. Same exact operation, same exact target *.o files, just shifted
> > in time.
>
> So my pet peeve is that when objtool errors, or crashes, the .o file
> gets deleted and it becomes really hard to debug the situation. I'm
> thinking that your suggestion would actually help with that too.

I do have the same pet peeve and I'm thinking we should just revert
644592d32837 ("objtool: Fail the kernel build on fatal errors") which
would ease most of the pain. Those fatal errors don't really buy us
much IMO. Agree?

> I just don't have enough Kbuild foo to even attempt this :/

It's an interesting idea, but it might have its own share of annoyances.

If you added something bad to a file, and just rebuilt that file, you
wouldn't see the objtool warning until later when you build the entire
kernel. (Of course the same complaint would apply to vmlinux.o
validation.) But the warning shows the .o file, which could be
confusing.

And for localized testing where you don't want to rebuild everything,
you'd have to figure out which archive belongs to the .o file you want
to run objtool on. And then rebuilding that archive manually might not
work, for example I have no idea what's going wrong here:

$ make arch/x86/kernel/built-in.a
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
DESCEND objtool
AR arch/x86/kernel/built-in.a
ar: arch/x86/kernel/fpu/built-in.a: No such file or directory
make[2]: *** [scripts/Makefile.build:387: arch/x86/kernel/built-in.a] Error 1
make[1]: *** [scripts/Makefile.build:488: arch/x86/kernel] Error 2
make: *** [Makefile:1723: arch/x86] Error 2


Though I do really like Ingo's idea for parallelizing things for
vmlinux.o.

--
Josh