[Scons-dev] Optimizing SCons...
William Deegan
bill at baddogconsulting.com
Mon Dec 3 13:42:44 EST 2012
All,
On Dec 2, 2012, at 8:58 AM, Gary Oberbrunner <garyo at oberbrunner.com> wrote:
> This looks very interesting. Speed and memory use are two "hot button" issues for many SCons users.
>
> What does it do that would break existing projects? Is it the not storing of full paths? (When were slots introduced? 2.2? In that case we're fine on that front.)
>
> One of the SCons buildbot builders runs a set of memory and timing benchmarks -- maybe we could get your version run through that. I suspect making a branch is the best way to start that -- what do you think, Bill?
Sounds good.
Though for some reason since we killed off the bad merge head buildbot seems to be jammed up.
I'll try and take a look at that over the next few days.
-Bill
>
>
> On Sun, Dec 2, 2012 at 9:01 AM, Dirk Bächle <tshortik at gmx.de> wrote:
> Hi,
>
> over the last days I created a patch that aims at reducing SCons'
> memory footprint, especially for large (in terms of number of
> files) C/C++ projects.
> It can be applied to the current latest revision (b496d47c4efb)
> and is attached as archive to this email.
>
> The amount of changes is split into the basic steps:
>
> 1) Make Node classes use slots.
> 2) Make SigInfo classes use slots.
> 3) Make Executor and Batch use slots and
> stop caching full paths in File nodes.
>
>
> I had to rewrite the memoizer count framework to use
> decorators instead of the original metaclass approach.
> Additionally, I had to correct a lot of tests and Tools
> to ensure that they still pass without any fails
> (at least for those tests that I can run locally under Linux,
> some further adaptions might be necessary).
>
> Here are some numbers for the testsuite that I compiled
> (it consists of several real-life SCons projects):
>
> Project | before | after |
> =================================
>
> ascend 96MB 82MB
> bombono 120MB 104MB
> lumiera 114MB 101MB
> mapnik 148MB 129MB
> sconsbld 540MB 377MB
>
> =================================
>
> They list the maximum of allocated memory for a clean build, before and
> after the optimizations.
> For the first four projects the results don't show that much of an
> improvement. But this is because they are still relatively small,
> compared to the basic overhead that is needed while parsing the
> SConstruct/SConscript files for example.
> The last (sconsbld) is a benchmark, created by a Perl script,
> with a number of 12000 source files, and 12000 includes...resulting in
> 12000 object files and 600 executables.
> Increasing the number of files seems to drive up the percentage
> of memory you can save. Doubling them up for "sconsbld" (24000 source
> and include files) gives 1579MB vs 1052MB.
>
> I also used cProfile and simple timing of the single runs with the
> "time" command, to ensure that no speed penalties are involved with
> the changes. Good news is that all runs, clean builds as well as
> updates, tend to get a little faster...probably due to the usage
> of slots.
>
> So, that's what I have right now. My questions are:
>
> - Is this of any interest (or is it still "too early" for
> optimizations ;) )?
> - If yes, what could be the next steps?
>
> I didn't simply upload this as a pull request, because the changes
> would definitely break existing projects and custom Tools.
> So, either some form of deprecation cycle or a separate branch/repository
> would be needed (default vs optimized).
>
> Comments anyone?
>
> Best regards,
>
> Dirk
>
>
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
>
>
>
>
> --
> Gary
> _______________________________________________
> Scons-dev mailing list
> Scons-dev at scons.org
> http://two.pairlist.net/mailman/listinfo/scons-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20121203/eb19b93a/attachment.html>
More information about the Scons-dev
mailing list