Date: Fri, 23 May 2014 18:10:34 -0600 From: Warner Losh <imp@bsdimp.com> To: Ian Lepore <ian@FreeBSD.org> Cc: dim@FreeBSD.org, stable@FreeBSD.org, Luigi Rizzo <rizzo@iet.unipi.it> Subject: Re: build order race after SUBDIR_PARALLEL (264303) Message-ID: <99C992EE-5289-4FCC-AD30-AFE326AB8C4F@gmail.com> In-Reply-To: <1400848012.1152.311.camel@revolution.hippie.lan> References: <20140523065653.GA86035@onelab2.iet.unipi.it> <1400848012.1152.311.camel@revolution.hippie.lan>
next in thread | previous in thread | raw e-mail | index | archive | help
On May 23, 2014, at 6:26 AM, Ian Lepore <ian@FreeBSD.org> wrote: > On Fri, 2014-05-23 at 08:56 +0200, Luigi Rizzo wrote: >> Hi, >> I have recently hit a problem when building stable/10 with >> "make -j 8" which i tracked down to svn 264303, the >> MFC of the SUBDIR_PARALLEL build feature. >>=20 >> With a large number of parallel tasks (and GCC; >> it is a race condition so timing matters), the build fails >> during the toolchain target with this: >>=20 >> --- sig_party.o --- >> cc -O2 -pipe = -I/usr/home/luigi/FreeBSD/R10/lib/libngatm/../../sys/contrib/ngatm = -I/usr/home/luigi/FreeBSD/R10/../usr/obj-pico-amd64/usr/home/luigi/FreeBSD= /R10/lib/libngatm >> = -I/usr/home/luigi/FreeBSD/R10/lib/libngatm/../../contrib/ngatm/libngatm = -std=3Dgnu99 -fstack-protector -Wsystem-headers -Werror -Wall = -Wno-format-y2k -W -Wno-unused-parameter - >> Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type = -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter = -Wcast-align -Wchar-subscripts -Winline >> -Wnested-externs -Wredundant-decls -Wold-style-definition = -Wno-pointer-sign -c = /usr/home/luigi/FreeBSD/R10/lib/libngatm/../../sys/contrib/ngatm/netnatm/s= ig/sig_party.c -o sig_ >> party.o >> --- all_subdir_libproc --- >> = /usr/home/luigi/FreeBSD/R10/../usr/obj-pico-amd64/usr/home/luigi/FreeBSD/R= 10/tmp/usr/bin/ld: cannot find -lsupc++ >> *** [libproc.so.2] Error code 1 >>=20 >> make[5]: stopped in /usr/home/luigi/FreeBSD/R10/lib/libproc >> 1 error >> ... >>=20 >>=20 >> Turns out that before SUBDIR_PARALLEL, libsupc++ was built >> before libproc thus satisfying the dependency; but with >> -j XXX we cannot guarantee the ordering and there is no >> explicit constraint or .ORDER in the makefiles to build >> things in the correct order. >>=20 >> This is a race condition so you may or may not see the problem >> depending on what you are building and where. >>=20 >> I am seeing the problem consistently on stable/10 after 264303 >> when building toolchain with GCC (not clang) on an 8-core machine >> and make -j 8 >>=20 >> Building the above with -j 4 seem to work fine, >> as it works building HEAD with -j 8 >>=20 >> cheers >> luigi >=20 > Aha. I asked for exactly this info on the commit list (so you can > ignore that request). Warner & I kicked around some ideas on how to > solve this a while back, I'll see if I can make some progress towards > better dependency controls for SUBDIR_PARALLEL this weekend. I committed a half-assed fix to current that could be MFC=92d to fix = this. Warner=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?99C992EE-5289-4FCC-AD30-AFE326AB8C4F>