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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.