Thread (15 messages) flat view 15 messages, 3 authors, 2021-09-28

Re: [PATCH 1/3] Makefile: make the "sparse" target non-.PHONY

From: Jeff King <hidden>
Date: 2021-09-22 02:24:11

On Wed, Sep 22, 2021 at 12:55:13AM +0200, Ævar Arnfjörð Bjarmason wrote:
On my box with -j8 it was fast before, or around 5 seconds, now it
only takes that long the first time, and the common case is <100ms, or
however long it takes GNU make to stat the *.sp file and see that all
the corresponding *.c files are older.
Sort of side note, but I think the main culprit here is all of the
$(shell) invocations, etc, we run. Try:

  make SHELL_PATH='sh -x'

to get a taste (do it twice, because the first one will actually rebuild
everything due to the changed shell; the second one _should_ be a noop
but still runs a bunch of stuff).

Though even that doesn't tell the whole story, as it doesn't make clear
which shells are invoked by make directly. Try this:

	cat >/tmp/foo <<-\EOF
	#!/bin/sh
	echo >&2 "==> shell $*"
	exec sh "$@"
	EOF

	make SHELL_PATH=/tmp/foo

There's lots of low-hanging fruit like:

==> shell -c echo TEST_SHELL_PATH=\''/tmp/foo'\' >>GIT-BUILD-OPTIONS+
==> shell -c echo PERL_PATH=\''/usr/bin/perl'\' >>GIT-BUILD-OPTIONS+
==> shell -c echo DIFF=\''diff'\' >>GIT-BUILD-OPTIONS+
==> shell -c echo PYTHON_PATH=\''/usr/bin/python'\' >>GIT-BUILD-OPTIONS+
[...and over a dozen more...]

Those could easily be a single shell invocation, rather than one per
echo. Another culprit is GIT-VERSION-GEN, which we run whether it's
needed or not, and takes something like 25ms.

It's probably not worth spending too much time micro-optimizing here
(and certainly it's orthogonal to your series), but there may be some
low-hanging fruit (although a hacky attempt at minimizing the shell
calls for GIT-BUILD-OPTIONS didn't seem to show any speedup, so maybe
it's not so low-hanging after all).

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help