Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Oct 2006 23:24:25 -0700
From:      Doug Barton <dougb@FreeBSD.org>
To:        Benjamin Lutz <mail@maxlor.com>
Cc:        freebsd-ports@freebsd.org
Subject:   Re: Parallel Builds
Message-ID:  <45386B99.8080501@FreeBSD.org>
In-Reply-To: <200610191124.39379.mail@maxlor.com>
References:  <200610191124.39379.mail@maxlor.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Benjamin Lutz wrote:
> Hello,
> 
> Since Multi-core processors are becoming popular (or, more 
> egocentrically, since I've acquired one), I've become interested in 
> parallel compilation. Unfortunately, it seems that parallel builds of 
> any kind are completely unsupported by the ports framework at the 
> moment.

Not for lack of interest, but for lack of person hours to do the work. 
As you've already ascertained, the amount of work required is 
substantial, and would amount to a constantly moving target, since new 
ports are always being added, and "vendor code" is always changing.

>  o Leave the ports framework as it is, and implement support for
>    parallel building in add-on tool, eg., portupgrade. The tool would
>    support automatic parallelism ("portupgrade -a" would automatically
>    build ports in parallel where possible), or having several
>    user-created instances running at the same time. I'll call this
>    "tool-based macro-parallelism".

I specifically designed portmaster to be able to do this. Separate 
instances do not share anything in common, other than the ports tree 
and package database. Assuming that you were updating two (or more) 
ports that you were positive did not share any dependencies in common, 
you could run as many portmaster instances as you wanted to, and not 
have any problems.

Where this gets really sticky is in (for example) the -a case. If you 
run 'portmaster -l' on a typical system, you'll see that there are 
some root ports (no dependencies, not depended on), some leaf ports 
(not depended on), but most of the installed ports are in the 
"middle," where they are depended on by something else, and most of 
those have dependencies of their own. It would be a SMOP to have 
portmaster track the ports that are "safe" to upgrade in parallel. 
Then of course you have to keep track of your child processes, create 
a queue for what ports to run next, etc. etc. It's all doable of 
course, but I think the return on investment for this project would be 
very small. Patches are always welcome however. :)

>    Disadvantages:
>    - Moderately difficult to implement.

*cough*

> Locking, build failures and interruptions would have to be taken
> care of. I don't see problems that can't be solved though.

Yeah, like I said, it's all about having the time to do it.

>    - No speed gain when updating single large ports, eg. gcc. (To be
>      fair, it must be said that some of the large ports, eg.
>      OpenOffice.org, don't support micro-parallelism either. Macro-
>      parallelism would at least allow the otherwise unused CPUs to
>      do something sometimes.)

My gut feeling is that the cases where the gains outweigh the effort 
required are very few, and far between. Maybe someday when 64-way 
desktops are the norm, sure, but not now. :) I would of course not 
ever discourage someone who wanted to work on this, it's just not on 
my TODO list atm.

hth,

Doug

-- 

     This .signature sanitized for your protection



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?45386B99.8080501>