Skip site navigation (1)Skip section navigation (2)
Date:      17 Aug 1997 06:15:24 GMT
From:      nnd@itfs.nsk.su
To:        current@freebsd.org
Subject:   Re: Make and SMP - what can be done ?
Message-ID:  <5t64ts$7ae@news.itfs.nsk.su>
References:  <199708130432.VAA06415@silvia.HIP.Berkeley.EDU>

next in thread | previous in thread | raw e-mail | index | archive | help
	Here is a report of my experiments in "parallel"
world making.

	Let's start from the end ;-)

1) This was done with standard /usr/src/Makefile

# time make buildworld >& bw1.out

10842.7u 5987.9s 4:31:58.43 103.1% 360+502k 36885+26932io 2133pf+0w
		 ^^^^^^^^^^^^^^^^^

2) And this was done with my patches to /usr/src/bin/make,
/usr/src/Makefile and /usr/src/games/boggle/Makefile (see below)

# time make -dmj -j12 buildworld >& bwj.out

11880.6u 5732.4s 3:10:37.60 153.9% 454+556k 38401+44577io 2254pf+0w
		 ^^^^^^^^^^^^^^^^^

	Both makes was on the same system (FreeBSD-3.0 as of 970808,
SMP kernel on two P-133 Gateway GA-586DX m/b with 128M EDO memory
and /usr/{src,obj} both on ccd0 (two IBM DORS-32160W)).

	What have I done ?

   Current buildworld structure is not very suitable for "parallel"
making ;-( especially in "make depend" and "make all install ..."
cases. So I take an easy path to avoid "parallelism" in this steps
while using it in "make all" parts.

1) I've patched /usr/bin/make in such a way that -B flag
(compatible mode) will be propagated to "nested" make's
(see make.patch below);

2) I've change /usr/src/Makefile so that all 'depend' parts
was done in "compatible mode" and all 'all install clean cleandepend'
parts splits to 'all' (which can be made "in parallel") and
'install clean cleandepend' which again was done in "compatible mode"
(see Makefile.patch below);

3) I've patched /usr/src/games/boggle/Makefile which leads to
error in 'make -j12 all" case and is incorrect independently
of any "parallell making" (see my PR bin/4314 for this).

	If you use SMP FreeBSD and build world often
you can try to speed-up this task in ~1.49 times :-).

	After that you can speend some time on Makefile's
and mk-files studying and make FreeBSD's buildworld structure
fully "parallel"-safe ! ;-)

	N.Dudorov

make.patch=================================================

diff -ruN src/usr.bin/make/main.c src/usr.bin/make-patched/main.c
--- src/usr.bin/make/main.c	Fri Aug 15 17:59:11 1997
+++ src/usr.bin/make-patched/main.c	Fri Aug 15 18:07:14 1997
@@ -190,6 +190,7 @@
 			break;
 		case 'B':
 			compatMake = TRUE;
+			Var_Append(MAKEFLAGS, "-B", VAR_GLOBAL);
 			break;
 #ifdef REMOTE
 		case 'L':


Makefile.patch=============================================

--- src/Makefile	Sat Aug 16 20:17:41 1997
+++ src/Makefile.MY	Sat Aug 16 20:17:34 1997
@@ -216,8 +216,9 @@
 	@echo "--------------------------------------------------------------"
 	mkdir -p ${WORLDTMP}/usr/bin
 	cd ${.CURDIR}/usr.bin/make && \
-		${IBMAKE} -I${.CURDIR}/share/mk ${OBJDIR} clean cleandepend depend && \
-		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all install clean cleandepend
+		${IBMAKE} -I${.CURDIR}/share/mk ${OBJDIR} -B clean cleandepend depend && \
+		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} all && \
+		${IBMAKE} -I${.CURDIR}/share/mk ${MK_FLAGS} -B install clean cleandepend
 	@echo
 	@echo "--------------------------------------------------------------"
 	@echo " Making hierarchy"
@@ -251,7 +252,7 @@
 	@echo "--------------------------------------------------------------"
 	@echo " Rebuilding /usr/include"
 	@echo "--------------------------------------------------------------"
-	cd ${.CURDIR} && ${BMAKE} includes
+	cd ${.CURDIR} && ${BMAKE} -B includes
 	@echo
 	@echo "--------------------------------------------------------------"
 	@echo " Rebuilding tools needed to build the libraries"
@@ -271,7 +272,7 @@
 	@echo "--------------------------------------------------------------"
 	@echo " Rebuilding dependencies"
 	@echo "--------------------------------------------------------------"
-	cd ${.CURDIR} && ${XMAKE} depend
+	cd ${.CURDIR} && ${XMAKE} -B depend
 	@echo
 	@echo "--------------------------------------------------------------"
 	@echo " Building everything.."
@@ -413,12 +414,15 @@
 	cd ${.CURDIR}/include && find -dx . | cpio -dump ${DESTDIR}/usr/include
 	cd ${.CURDIR}/include && make symlinks
 .endif
-	cd ${.CURDIR}/usr.bin/make && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
-	cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
-	cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} -DNOLIB all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.bin/make && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.bin/xinstall && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.bin/lex && ${MAKE} bootstrap && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} -DNOLIB all && \
+		${MAKE} ${MK_FLAGS} -DNOLIB -B install ${CLEANDIR} ${OBJDIR}
 
 #
 # include-tools - generally the same as 'bootstrap', except that it's for
@@ -429,8 +433,9 @@
 # on cleaned away headers in ${WORLDTMP}.
 #
 include-tools:
-	cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} cleandepend depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.bin/rpcgen && ${MAKE} -B cleandepend depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 
 #
 # includes - possibly generate and install the include files.
@@ -499,8 +504,9 @@
 		usr.bin/nm		\
 		usr.bin/ranlib		\
 		usr.bin/uudecode
-	cd ${.CURDIR}/$d && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/$d && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endfor
 
 #
@@ -508,44 +514,54 @@
 #
 libraries:
 .if exists(lib/csu/i386)
-	cd ${.CURDIR}/lib/csu/i386 && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/lib/csu/i386 && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(lib/libcompat)
-	cd ${.CURDIR}/lib/libcompat && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/lib/libcompat && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(lib/libncurses)
-	cd ${.CURDIR}/lib/libncurses && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/lib/libncurses && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(lib/libtermcap)
-	cd ${.CURDIR}/lib/libtermcap && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/lib/libtermcap && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(gnu)
-	cd ${.CURDIR}/gnu/lib && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/gnu/lib && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(secure) && !defined(NOCRYPT) && !defined(NOSECURE)
-	cd ${.CURDIR}/secure/lib && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/secure/lib && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(lib)
-	cd ${.CURDIR}/lib && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/lib && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(usr.bin/lex/lib)
-	cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.bin/lex/lib && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(eBones) && !defined(NOCRYPT) && defined(MAKE_EBONES)
-	cd ${.CURDIR}/eBones/lib && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/eBones/lib && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 .if exists(usr.sbin/pcvt/keycap)
-	cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/usr.sbin/pcvt/keycap && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endif
 
 #
@@ -615,8 +631,9 @@
 		usr.sbin/chown		\
 		usr.sbin/mtree		\
 		usr.sbin/zic
-	cd ${.CURDIR}/$d && ${MAKE} depend && \
-		${MAKE} ${MK_FLAGS} all install ${CLEANDIR} ${OBJDIR}
+	cd ${.CURDIR}/$d && ${MAKE} -B depend && \
+		${MAKE} ${MK_FLAGS} all && \
+		${MAKE} ${MK_FLAGS} -B install ${CLEANDIR} ${OBJDIR}
 .endfor
 
 .include <bsd.subdir.mk>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5t64ts$7ae>