From: Andi Kleen <andi@firstfloor.org>
To: git@vger.kernel.org
Cc: Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 4/5] Fix profile feedback with -jN and add profile-fast
Date: Fri, 4 Jul 2014 16:43:51 -0700 [thread overview]
Message-ID: <1404517432-25185-5-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1404517432-25185-1-git-send-email-andi@firstfloor.org>
From: Andi Kleen <ak@linux.intel.com>
Profile feedback always failed for me with -jN. The problem
was that there was no implicit ordering between the profile generate
stage and the profile use stage. So some objects in the later stage
would be linked with profile generate objects, and fail due
to the missing -lgcov.
This adds a new profile target that implicitely enforces the
correct ordering by using submakes. Plus a profile-install target
to also install. This is also nicer to type that PROFILE=...
Plus I always run the performance test suite now for the full
profile run.
In addition I also added a profile-fast / profile-fast-install
target the only runs the performance test suite instead of the
whole test suite. This significantly speeds up the profile build,
which was totally dominated by test suite run time. However
it may have less coverage of course.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
INSTALL | 14 ++++++++++++--
Makefile | 21 +++++++++++++++++----
2 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/INSTALL b/INSTALL
index ba01e74..6ec7a24 100644
--- a/INSTALL
+++ b/INSTALL
@@ -28,7 +28,7 @@ set up install paths (via config.mak.autogen), so you can write instead
If you're willing to trade off (much) longer build time for a later
faster git you can also do a profile feedback build with
- $ make prefix=/usr PROFILE=BUILD all
+ $ make prefix=/usr profile
# make prefix=/usr PROFILE=BUILD install
This will run the complete test suite as training workload and then
@@ -36,10 +36,20 @@ rebuild git with the generated profile feedback. This results in a git
which is a few percent faster on CPU intensive workloads. This
may be a good tradeoff for distribution packagers.
+Alternatively you can run profile feedback only with the git benchmark
+suite. This runs significantly faster than the full test suite, but
+has less coverage:
+
+ $ make prefix=/usr profile-fast
+ # make prefix=/usr PROFILE=BUILD install
+
Or if you just want to install a profile-optimized version of git into
your home directory, you could run:
- $ make PROFILE=BUILD install
+ $ make profile-install
+
+or
+ $ make profile-fast-install
As a caveat: a profile-optimized build takes a *lot* longer since the
git tree must be built twice, and in order for the profiling
diff --git a/Makefile b/Makefile
index ba64be9..a760402 100644
--- a/Makefile
+++ b/Makefile
@@ -1643,13 +1643,20 @@ SHELL = $(SHELL_PATH)
all:: shell_compatibility_test
ifeq "$(PROFILE)" "BUILD"
-ifeq ($(filter all,$(MAKECMDGOALS)),all)
-all:: profile-clean
+all:: profile
+endif
+
+profile:: profile-clean
$(MAKE) PROFILE=GEN all
$(MAKE) PROFILE=GEN -j1 test
$(MAKE) PROFILE=GEN -j1 perf
-endif
-endif
+ $(MAKE) PROFILE=USE all
+
+profile-fast: profile-clean
+ $(MAKE) PROFILE=GEN all
+ $(MAKE) PROFILE=GEN -j1 perf
+ $(MAKE) PROFILE=USE all
+
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
ifneq (,$X)
@@ -2336,6 +2343,12 @@ mergetools_instdir_SQ = $(subst ','\'',$(mergetools_instdir))
install_bindir_programs := $(patsubst %,%$X,$(BINDIR_PROGRAMS_NEED_X)) $(BINDIR_PROGRAMS_NO_X)
+profile-install: profile
+ $(MAKE) install
+
+profile-fast-install: profile-fast
+ $(MAKE) install
+
install: all
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
--
2.0.1
next prev parent reply other threads:[~2014-07-04 23:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-04 23:43 Fix the bitrotted profile feedback build Andi Kleen
2014-07-04 23:43 ` [PATCH 1/5] Use BASIC_FLAGS for profile feedback Andi Kleen
2014-07-04 23:43 ` [PATCH 2/5] Don't define away __attribute__ on gcc Andi Kleen
2014-07-04 23:43 ` [PATCH 3/5] Run the perf test suite for profile feedback too Andi Kleen
2014-07-07 21:06 ` Junio C Hamano
2014-07-07 22:15 ` Andi Kleen
2014-07-04 23:43 ` Andi Kleen [this message]
2014-07-04 23:43 ` [PATCH 5/5] Add a little script to compare two make perf runs Andi Kleen
2014-07-06 16:12 ` Bert Wesarg
2014-07-06 16:15 ` Andi Kleen
2014-07-06 16:46 ` Bert Wesarg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1404517432-25185-5-git-send-email-andi@firstfloor.org \
--to=andi@firstfloor.org \
--cc=ak@linux.intel.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).