diff options
Diffstat (limited to 'timings/ElectricCloud/TimeSCons-run.py')
-rw-r--r-- | timings/ElectricCloud/TimeSCons-run.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/timings/ElectricCloud/TimeSCons-run.py b/timings/ElectricCloud/TimeSCons-run.py new file mode 100644 index 00000000..be75d121 --- /dev/null +++ b/timings/ElectricCloud/TimeSCons-run.py @@ -0,0 +1,94 @@ +# +# __COPYRIGHT__ +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +""" +This configuration comes from the following blog article: + +"How scalable is SCons? The Electric Cloud Blog" +http://blog.electric-cloud.com/2010/03/08/how-scalable-is-scons/ + + The test build consists of (a lot of) compiles and links. Starting + from the bottom, we have N C files each with a unique associated + header file. The C files and headers were spread across + N/500 directories in order to eliminate filesystem scalability + concerns. Both the C files and the header files are trivial: the + header only includes stdio.h; the C file includes the associated + header and a second, shared header, then defines a trivial + function. Objects are collected into groups of 20 and stored into + a standard archive. Every 20th object is linked into an executable + along with the archive. + +The original ElectricCloud implementation is captured in genscons.pl, +and we just call that script to generate the configuration in a +"sconsbld" subdirectory. +""" + +import TestSCons + +# The values here were calibrated by hand on the ubuntu-timings slave, +# because the configurations generated by genscons.pl only work if +# the FILES_PER_DIRECTORY value is a multiple of the COMPILES_GROUPED +# value, and it didn't seem worth automating that manipulation. +# +# The key value below is FILES_PER_DIRECTORY; the other values match +# the default from the genscons.pl file. With the values below, +# it creates a two-deep hierarchy of a single directory with three +# subdirectories. Each directory (both parent and subdirectories) +# contains sixty source files (each of which includes a .h file) +# that are built into three libraries containing twenty object files +# each, which are then linked into executables. +# +# As of r5143 on 17 August 2010, a value of 60 FILES_PER_DIRECTORY +# performs a full build in 82.5 seconds on the ubuntu-timings slave. +# That's more than our "normal" target of 10 seconds or so for the +# full build, but building anything less than three libraries per +# directory feels like it makes the test too trivial. + +import os + +test = TestSCons.TimeSCons(variables={ + 'NUMBER_OF_LEVELS' : 2, + 'DIRECTORIES_PER_LEVEL' : 3, + 'FILES_PER_DIRECTORY' : 60, + 'LOOKUPS_PER_SOURCE' : 2, + 'COMPILES_GROUPED' : 20, +}, + calibrate=['FILES_PER_DIRECTORY']) + +arguments = [ + '-l %s' % test.variables['NUMBER_OF_LEVELS'], + '-d %s' % test.variables['DIRECTORIES_PER_LEVEL'], + '-f %s' % test.variables['FILES_PER_DIRECTORY'], + '-g %s' % test.variables['COMPILES_GROUPED'], + '-u %s' % test.variables['LOOKUPS_PER_SOURCE'], +] + +test.run(program=test.workpath('genscons.pl'), arguments=' '.join(arguments)) +# This print is nott for debugging, leave it alone! +# We want to display the output from genscons.pl's generation the build +# configuration, so the buildbot logs contain more info. +print test.stdout() + +test.main(chdir='sconsbld') + +test.pass_test() |