зеркало из https://github.com/microsoft/git.git
Fix profile feedback with -jN and add profile-fast
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> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
5d7fd6d06f
Коммит
066dd2632a
14
INSTALL
14
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
|
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
|
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
|
# make prefix=/usr PROFILE=BUILD install
|
||||||
|
|
||||||
This will run the complete test suite as training workload and then
|
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
|
which is a few percent faster on CPU intensive workloads. This
|
||||||
may be a good tradeoff for distribution packagers.
|
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
|
Or if you just want to install a profile-optimized version of git into
|
||||||
your home directory, you could run:
|
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
|
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
|
git tree must be built twice, and in order for the profiling
|
||||||
|
|
21
Makefile
21
Makefile
|
@ -1643,13 +1643,20 @@ SHELL = $(SHELL_PATH)
|
||||||
all:: shell_compatibility_test
|
all:: shell_compatibility_test
|
||||||
|
|
||||||
ifeq "$(PROFILE)" "BUILD"
|
ifeq "$(PROFILE)" "BUILD"
|
||||||
ifeq ($(filter all,$(MAKECMDGOALS)),all)
|
all:: profile
|
||||||
all:: profile-clean
|
endif
|
||||||
|
|
||||||
|
profile:: profile-clean
|
||||||
$(MAKE) PROFILE=GEN all
|
$(MAKE) PROFILE=GEN all
|
||||||
$(MAKE) PROFILE=GEN -j1 test
|
$(MAKE) PROFILE=GEN -j1 test
|
||||||
$(MAKE) PROFILE=GEN -j1 perf
|
$(MAKE) PROFILE=GEN -j1 perf
|
||||||
endif
|
$(MAKE) PROFILE=USE all
|
||||||
endif
|
|
||||||
|
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
|
all:: $(ALL_PROGRAMS) $(SCRIPT_LIB) $(BUILT_INS) $(OTHER_PROGRAMS) GIT-BUILD-OPTIONS
|
||||||
ifneq (,$X)
|
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)
|
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: all
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
|
||||||
|
|
Загрузка…
Ссылка в новой задаче