[MacPorts] #29547: enblend build uses extraordinary amounts of memory
MacPorts
noreply at macports.org
Sun May 22 11:36:43 PDT 2011
#29547: enblend build uses extraordinary amounts of memory
-------------------------------------+--------------------------------------
Reporter: ryandesign@… | Owner: hvdwolf@…
Type: enhancement | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 1.9.2
Keywords: | Port: enblend
-------------------------------------+--------------------------------------
System specifications:
* MacBookPro3,1
* 2.2-GHz Core 2 Duo
* 6 GB RAM
* Mac OS X 10.6.7
Building the enblend port with the default 2 parallel make jobs slows my
computer to a crawl and makes it unresponsive for minutes at a time. The
problem is not high CPU usage; high CPU usage does not usually slow down
my machine, and in fact CPU usage is low during the problem. The problem
is that the build sucks up so much memory that
[http://en.wikipedia.org/wiki/Thrashing_(computer_science) thrashing]
occurs. I end up having to cancel the build (once I can briefly regain
control of the machine) and restart it with fewer jobs, i.e.:
{{{
sudo port install enblend build.jobs=1
}}}
MacPorts parallel building code computes how many jobs to start based on
the number of processor cores, or the number of GB of installed memory,
whichever is less; on my 2-core Mac with 6 GB memory, that means 2 jobs
get started. But while the MacPorts estimate of 1 GB per job was meant to
be overly conservative, enblend's build can make each compile job take up
to 2 GB of real memory (as observed in Activity Monitor).
A simple solution would be to disable parallel building entirely for
enblend by adding the line:
{{{
use_parallel_build no
}}}
enblend does take a while to build, and allowing parallel builds on
machines that have enough memory to support it would be nice, so a more
complicated solution could be to have the portfile set build.jobs to a new
computed number based on number of cores and amount of RAM, using a
different formula than MacPorts base. For example, instead of 1 job per 1
GB installed RAM it could be 1 job per 4 GB installed RAM. Code to
implement this might be adapted from that in MacPorts base. Or perhaps
instead of basing the calculation on installed RAM it could be based on
free RAM; if that value is ascertainable.
I see that the portfile for hugin-app, which uses enblend, also turns off
parallel building, though I'm not sure if this is for the same reason. I
see that hugin-app uses a lot of memory to build too, but not as much as
enblend (< 1 GB per compile job).
Yes, my 6-GB Mac might be able to sustain the 2-job enblend parallel build
if nothing else were running, but that's not likely to be the case: I
don't have 6 GB RAM installed to keep it empty; I have it installed
because I run programs that use it.
--
Ticket URL: <https://trac.macports.org/ticket/29547>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list