Date: Wed, 28 May 2014 06:27:30 -0600 From: Ian Lepore <ian@FreeBSD.org> To: Jia-Shiun Li <jiashiun@gmail.com> Cc: freebsd-arch <freebsd-arch@FreeBSD.org> Subject: Re: CFR, CFT: Fine-grained SUBDIR dependencies for parallel builds Message-ID: <1401280050.1152.377.camel@revolution.hippie.lan> In-Reply-To: <CAHNYxxMkK5LpNdCOUyi33nh7xpU8qz4Xs8FvqMSyHmJo54TEeg@mail.gmail.com> References: <1401115733.1152.339.camel@revolution.hippie.lan> <CAHNYxxMkK5LpNdCOUyi33nh7xpU8qz4Xs8FvqMSyHmJo54TEeg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
On Wed, 2014-05-28 at 12:58 +0800, Jia-Shiun Li wrote:
> It failed cleandir at libmb with -j4. Test script attached and log
> snippet below.
>
> Tested with:
> - HW: i5-3450 CPU w/ 8GB memory
> - /usr/obj & src mounted on tmpfs.
>
> src uses ~1GB without .svn dir. /usr/obj uses another ~2GB for
> buildworld, not including buildkernel. If memory is not constrained I
> think it is easier to use tmpfs to uncover parallel timing/race issues
> hidden by slower I/O.
>
>
> -Jia-shiun.
Doh! There was a typo, libmb should have been libmd. More importantly,
it shows that my testing didn't test anything at all. I think I applied
the patch in one sandbox and then ran make universe in a different one.
Here's an updated patch (this time I'll try to test it correctly myself
too).
Thanks for testing.
-- Ian
[-- Attachment #2 --]
Index: share/mk/bsd.subdir.mk
===================================================================
--- share/mk/bsd.subdir.mk (revision 266650)
+++ share/mk/bsd.subdir.mk (working copy)
@@ -80,7 +80,11 @@ __subdir_targets=
__subdir_targets+= .WAIT
.else
__subdir_targets+= ${__target}_subdir_${__dir}
-${__target}_subdir_${__dir}: .MAKE
+__deps=
+.for __dep in ${SUBDIR_DEPEND_${__dir}}
+__deps+= ${__target}_subdir_${__dep}
+.endfor
+${__target}_subdir_${__dir}: .MAKE ${__deps}
@${_+_}set -e; \
if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
Index: lib/Makefile
===================================================================
--- lib/Makefile (revision 266650)
+++ lib/Makefile (working copy)
@@ -3,82 +3,43 @@
.include <src.opts.mk>
-# To satisfy shared library or ELF linkage when only the libraries being
-# built are visible:
-#
-# csu must be built before all shared libaries for ELF.
-# libc must be built before all other shared libraries.
-# libbsm must be built before libauditd.
-# libcom_err must be built before libpam.
-# libcrypt must be built before libpam.
-# libkvm must be built before libdevstat.
-# libldns must be built before libunbound.
-# msun must be built before libg++ and libstdc++.
-# libmd must be built before libatm, libopie, libradius, and libtacplus.
-# ncurses must be built before libdialog, libedit and libreadline.
-# libnetgraph must be built before libbsnmp/modules/snmp_netgraph.
-# libopie must be built before libpam.
-# libradius must be built before libpam.
-# librpcsvc must be built before libpam.
-# libsbuf must be built before libcam.
-# libtacplus must be built before libpam.
-# libutil must be built before libpam.
-# libypclnt must be built before libpam.
-# libgssapi must be built before librpcsec_gss
-#
-# Otherwise, the SUBDIR list should be in alphabetical order.
-#
-# Except it appears bind needs to be compiled last
+# The SUBDIR_ORDERED list is a small set of libraries which are used by many
+# of the other libraries. These are built first with a .WAIT between them
+# and the main list to avoid needing a SUBDIR_DEPEND line on every library
+# naming just these few items.
SUBDIR_ORDERED= ${_csu} \
.WAIT \
libc \
libc_nonshared \
- .WAIT \
- msun \
- .WAIT \
- libbsm \
- libauditd \
- libutil \
- libpjdlog \
- libnv \
- ${_libcapsicum} \
libcompiler_rt \
- libcrypt \
+ ${_libcplusplus} \
+ ${_libcxxrt} \
libelf \
- ${_libiconv_modules} \
- libkvm \
- ${_libldns} \
- libmd \
- ncurses \
- ${_libnetgraph} \
- libradius \
- librpcsvc \
- libsbuf \
- libtacplus \
- ${_libypclnt} \
- ${_libcxxrt} \
- ${_libcplusplus}
+ msun
-.if ${MK_KERBEROS_SUPPORT} != "no"
-SUBDIR_ORDERED+= libcom_err
-.endif
+# The main list; please keep these sorted alphabetically.
SUBDIR= ${SUBDIR_ORDERED} \
.WAIT \
libalias \
libarchive \
${_libatm} \
+ libauditd \
libbegemot \
libblocksruntime \
${_libbluetooth} \
${_libbsnmp} \
libbsdstat \
+ libbsm \
libbz2 \
libcalendar \
libcam \
+ ${_libcapsicum} \
${_libcasper} \
+ ${_libcom_err} \
libcompat \
+ libcrypt \
libdevinfo \
libdevstat \
libdwarf \
@@ -91,26 +52,36 @@ SUBDIR= ${SUBDIR_ORDERED} \
${_libgpib} \
${_libgssapi} \
${_librpcsec_gss} \
+ ${_libiconv_modules} \
libipsec \
libjail \
libkiconv \
+ libkvm \
+ ${_libldns} \
liblzma \
libmagic \
libmandoc \
libmemstat \
+ libmd \
${_libmilter} \
${_libmp} \
${_libnandfs} \
libnetbsd \
+ ${_libnetgraph} \
${_libngatm} \
+ libnv \
libopie \
libpam \
libpcap \
+ libpjdlog \
${_libpmc} \
${_libproc} \
libprocstat \
+ libradius \
+ librpcsvc \
librt \
${_librtld_db} \
+ libsbuf \
${_libsdp} \
${_libsm} \
${_libsmb} \
@@ -119,6 +90,7 @@ SUBDIR= ${SUBDIR_ORDERED} \
libstand \
libstdbuf \
libstdthreads \
+ libtacplus \
${_libtelnet} \
${_libthr} \
libthread_db \
@@ -129,15 +101,50 @@ SUBDIR= ${SUBDIR_ORDERED} \
${_libunbound} \
${_libusbhid} \
${_libusb} \
+ libutil \
${_libvgl} \
${_libvmmapi} \
libwrap \
liby \
+ ${_libypclnt} \
libz \
+ ncurses \
${_atf} \
${_clang} \
${_tests}
+# Inter-library dependencies. When the makefile for a library contains LDADD
+# libraries, those libraries should be listed as build order dependencies here.
+
+SUBDIR_DEPEND_libarchive= libz libbz2 libexpat liblzma libmd
+SUBDIR_DEPEND_libatm= libmd
+SUBDIR_DEPEND_libauditdm= libbsm
+SUBDIR_DEPEND_libbsnmp= ${_libnetgraph}
+SUBDIR_DEPEND_libc++= libcxxrt
+SUBDIR_DEPEND_libc= libcompiler_rt
+SUBDIR_DEPEND_libcam= libsbuf
+SUBDIR_DEPEND_libcapsicum= libnv
+SUBDIR_DEPEND_libcasper= libcapsicum libnv libpjdlog
+SUBDIR_DEPEND_libdevstat= libkvm
+SUBDIR_DEPEND_libdiaglog= ncurses
+SUBDIR_DEPEND_libedit= ncurses
+SUBDIR_DEPEND_libg++= msun
+SUBDIR_DEPEND_libgeom= libexpat libsbuf
+SUBDIR_DEPEND_liblibrpcsec_gss= libgssapi
+SUBDIR_DEPEND_libmagic= libz
+SUBDIR_DEPEND_libmemstat= libkvm
+SUBDIR_DEPEND_libopie= libmd
+SUBDIR_DEPEND_libpam= libcrypt libopie libradius librpcsvc libtacplus libutil ${_libypclnt} ${_libcom_err}
+SUBDIR_DEPEND_libpjdlog= libutil
+SUBDIR_DEPEND_libprocstat= libkvm libutil
+SUBDIR_DEPEND_libradius= libmd
+SUBDIR_DEPEND_libreadline= ncurses
+SUBDIR_DEPEND_libsmb= libkiconv
+SUBDIR_DEPEND_libstdc++= msun
+SUBDIR_DEPEND_libtacplus= libmd
+SUBDIR_DEPEND_libulog= libmd
+SUBDIR_DEPEND_libunbound= ${_libldns}
+
.if exists(${.CURDIR}/csu/${MACHINE_ARCH}-elf)
_csu=csu/${MACHINE_ARCH}-elf
.elif exists(${.CURDIR}/csu/${MACHINE_ARCH})
@@ -185,6 +192,10 @@ _librpcsec_gss= librpcsec_gss
_libiconv_modules= libiconv_modules
.endif
+.if ${MK_KERBEROS_SUPPORT} != "no"
+_libcom_err= libcom_err
+.endif
+
.if ${MK_LDNS} != "no"
_libldns= libldns
.endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1401280050.1152.377.camel>
