docs/76515: missleading use of make -j flag in handbook

pete wright pete at nomadlogic.org
Thu Jan 20 23:20:02 UTC 2005


>Number:         76515
>Category:       docs
>Synopsis:       missleading use of make -j flag in handbook
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-doc
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          doc-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Jan 20 23:20:01 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     pete wright
>Release:        5.3-STABLE
>Organization:
nomadlogic.org
>Environment:
FreeBSD finn.nomadlogic.org 5.3-STABLE FreeBSD 5.3-STABLE #1: Tue Jan  4 19:06:52 EST 2005     root at finn.nomadlogic.org:/usr/obj/usr/src/sys/SMP  i386
>Description:
At:
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/makeworld.html
It states that:
"It is now possible to specify a -j option to make which will cause it to spawn several simultaneous processes. This is most useful on multi-CPU machines. However, since much of the compiling process is IO bound rather than CPU bound it is also useful on single CPU machines."

After testing this out on a SMP system doing a:
$ make -jN buildworld
(when "N" ranges from 1 to 8) I found that compile times do *not* decrease after starting two make jobs (make -j2 buildworld).  This was also tested by others on Uniproc machines and they did not find a decrease in time after starting one make job (make -j1 buildworld).  Here are edited results on my SMP system:

building world with 1 jobs...

real    95m20.543s
user    83m18.550s
sys     13m20.120s

cleaning /usr/src....
building world with 2 jobs...

real    54m15.856s
user    84m42.337s
sys     16m39.216s

cleaning /usr/src....
building world with 3 jobs...

real    53m53.239s
user    85m12.189s
sys     17m13.039s

cleaning /usr/src....
building world with 4 jobs...

real    53m56.539s
user    85m22.767s
sys     17m22.433s


>How-To-Repeat:
Here is the script I used to produce these results:
#!/usr/local/bin/bash
MAX=8
for ((i=1; i <= MAX ; i++))
do
        echo "cleaning /usr/src...."
        sudo make clean > /home/pete/tmp/clean
        echo "building world with $i jobs..."
        time make -j$i buildworld > /home/pete/tmp/build_world_$i
        echo ""
        sleep 90
done

>Fix:
It seems that the -j flag is usefull only in direct proportion to the amount of CPU's available to the system.  Maybe the doc should be corrected to relate this.
>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-doc mailing list