building with MAKEFLAGS=-j8
Emanuele Rusconi <[email protected]>
| Newsgroups | gmane.linux.lfs.general |
|---|---|
| Message-ID | <CAPife4ktwYw2tsfr_ipye2mS5Z7M7D3wPYREGKu79c56znW4fA@mail.gmail.com> |
Hi, as promised in another thread on the development mailing list, I
made some tests about building LFS-7.6-rc1 using MAKEFLAGS=-j8.
Here are my findings (you can skip to the bottom if you want to read
just the conclusion).
I stopped at the end of section 6, so I didn't build the kernel, and I
skipped GRUB too, because I won't use it.
My host system is Funtoo current, running on a Lenovo Thinkpad T440s.
I did 2 automated builds with no MAKEFLAGS setting and /mnt/lfs mounted
noatime, 1 with no MAKEFLAGS and /mnt/lfs mounted atime, and 3 with
noatime and MAKEFLAGS=-j8 exported as environment variable for both root
and the lfs user.
As noted in the book, the following tests are already known to require
-j1, and I built them by the book:
attr (chapter 6.21)
acl (chapter 6.22)
vim (chapter 6.70)
My build times for the temporary tools (including stripping, chapters
5.4 - 5.35, about 33 SBUs according to the book) have been:
no MAKEFLAGS : ~ 48m
MAKEFLAGS=-j8 : ~ 31m
My build times for the base system (excluding grub, chapters 6.7 - 6.70,
about 177 SBUs according to the book) have been:
no MAKEFLAGS : ~ 4h 20m
MAKEFLAGS=-j8 : ~ 2h 30m
Mounting atime didn't produce any significant difference.
Here are the relevant differences that I found in the tests logs:
====================
glibc (chapter 6.09)
--------------------
In some (not all) of the noatime builds I had several warnings like:
make[2]: Warning: File '/dev/null' has modification time 2368
s in the future
make[2]: warning: Clock skew detected. Your build may be incomplete.
I didn't other atime builds to check the consistency.
In some tests I also had some failures that seem uncorrelated with
the -j settings, and uncorrelated with the fails, too.
==================
gcc (chapter 6.17)
------------------
In one of the "no MAKEFLAGS" builds, I had 3 unexpected failures in
the "gcc tests".
The number of passed tests differ (it's bigger with -j8), even
though the expected failures and the skipped ones are the same:
no MAKEFLAGS :
=== libstdc++ Summary ===
# of expected passes 9804
# of expected failures 41
# of unsupported tests 277
MAKEFLAGS=-j8 :
=== libstdc++ Summary ===
# of expected passes 9823
# of expected failures 41
# of unsupported tests 277
==========================================
coreutils, test as "nobody" (chapter 6.29)
------------------------------------------
There are two summaries in the test log. The first ones differ,
while the seconds are the same:
no MAKEFLAGS :
========================================
Testsuite summary for GNU coreutils 8.23
========================================
# TOTAL: 564
# PASS: 446
# SKIP: 118
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
========================================
Testsuite summary for GNU coreutils 8.23
========================================
# TOTAL: 306
# PASS: 293
# SKIP: 13
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
MAKEFLAGS=-j8 :
========================================
Testsuite summary for GNU coreutils 8.23
========================================
# TOTAL: 564
# PASS: 442
# SKIP: 122
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
========================================
Testsuite summary for GNU coreutils 8.23
========================================
# TOTAL: 306
# PASS: 293
# SKIP: 13
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
===================
perl (chapter 6.42)
-------------------
The number of "tests" is always different from one build to the
next, regardless of the -j setting:
u=3.93 s=1.01 cu=253.65 cs=15.37 scripts=2258 tests=698696
I suppose the other numbers are times, so I expect them to change,
and "scripts" is always the same, but "tests"? I don't know.
With "MAKEFLAGS=-j8" I had many warnings like:
make[1]: warning: jobserver unavailable: using -j1. Add '+'
to parent make rule.
====================
gperf (chapter 6.51)
--------------------
With "MAKEFLAGS=-j8" this test shows some failures like:
gcc: error: test.o: No such file or directory
Makefile:83: recipe for target 'check-ada' failed
make[1]: *** [check-ada] Error 1
and finally fails with:
Makefile:57: recipe for target 'check' failed
make: *** [check] Error 2
========================================================================
CONCLUSIONS
-----------
The speed-up with -j8 is huge, and the only tests that actually fail are
attr, acl, vim and gperf. coreutils skips 4 more tests with -j8.
For all of these tests, adding -j1 to the test line fixes the issues,
even when the build used -j8, which means that the build phase is
actually OK with -j8, only the tests need -j1.
-- Emanuele Rusconi
--
http://lists.linuxfromscratch.org/listinfo/lfs-chat
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page