SCONS-TIME(1) | SCons __VERSION__ | SCONS-TIME(1) |
scons-time - generate and display SCons timing information
scons-time subcommand [options...] [arguments...]
scons-time run [-hnqv] [-f FILE] [--number=NUMBER] [--outdir=OUTDIR] [-p STRING] [--python=PYTHON] [-s DIR] [--scons=SCONS] [--svn=URL] [ARGUMENTS]
scons-time func [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [--func=NAME] [-p STRING] [-t NUMBER] [--title= TITLE] [ARGUMENTS]
scons-time mem [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [--stage=STAGE] [-t NUMBER] [--title=TITLE] [ARGUMENTS]
scons-time obj [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [--stage=STAGE] [-t NUMBER] [--title=TITLE] [ARGUMENTS]
scons-time time [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [-t NUMBER] [--title=TITLE] [--which=WHICH] [ARGUMENTS]
scons-time help SUBCOMMAND [...]
The scons-time command runs an SCons configuration through a standard set of profiled timings and can extract and graph information from the resulting profiles and log files of those timings. The action to be performed by the scons-time script is specified by a subcommand, the first argument on the command line. See the SUBCOMMANDS section below for information about the operation of specific subcommands.
The basic way to use scons-time is to run the scons-time run subcommand (possibly multiple times) to generate profile and log file output, and then use one of the other subcommands to display the results captured in the profiles and log files for a particular kind of information: function timings (the scons-time func subcommand), total memory used (the scons-time mem subcommand), object counts (the scons-time obj subcommand) and overall execution time (the scons-time time subcommand). Options exist to place and find the profiles and log files in separate directories, to generate the output in a format suitable for graphing with the gnuplot(1) program, and so on.
There are two basic ways the scons-time run subcommand is intended to be used to gather timing statistics for a configuration. One is to use the --svn= option to test a configuration against a list of revisions from the SCons Subversion repository. This will generate a profile and timing log file for every revision listed with the --number= option, and can be used to look at the impact of committed changes to the SCons code base on a particular configuration over time.
The other way is to profile incremental changes to a local SCons code base during a development cycle--that is, to look at the performance impact of changes you're making in the local tree. In this mode, you run the scons-time run subcommand without the --svn= option, in which case it simply looks in the profile/log file output directory (the current directory by default) and automatically figures out the next run number for the output profile and log file. Used in this way, the development cycle goes something like: make a change to SCons; run scons-time run to profile it against a specific configuration; make another change to SCons; run scons-time run again to profile it; etc.
The scons-time command only supports a few global options:
-h, --help
-V, --version
Most functionality is controlled by options to the individual subcommands. See the next section for information about individual subcommand options.
The scons-time command supports the following individual subcommands.
scons-time func [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [--func=NAME] [-p STRING] [-t NUMBER] [--title= TITLE] [ARGUMENTS]
The scons-time func subcommand displays timing information for a specific Python function within SCons. By default, it extracts information about the _main() function, which includes the Python profiler timing for all of SCons.
The scons-time func subcommand extracts function timing information from all the specified file arguments, which should be Python profiler output files. (Normally, these would be *.prof files generated by the scons-time run subcommand, but they can actually be generated by any Python profiler invocation.) All file name arguments will be globbed for on-disk files.
If no arguments are specified, then function timing information will be extracted from all *.prof files, or the subset of them with a prefix specified by the -p option.
Options include:
-C DIRECTORY, --chdir=DIRECTORY
-f FILE, --file=FILE
-fmt=FORMAT, --format=FORMAT
--func=NAME
-h, --help
-p STRING, --prefix=STRING
-t NUMBER, --tail=NUMBER
scons-time help SUBCOMMAND [...] The help subcommand prints help text for any other subcommands listed as later arguments on the command line.
scons-time mem [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [--stage=STAGE] [-t NUMBER] [--title=TITLE] [ARGUMENTS]
The scons-time mem subcommand displays how much memory SCons uses.
The scons-time mem subcommand extracts memory use information from all the specified file arguments, which should be files containing output from running SCons with the --debug=memory option. (Normally, these would be *.log files generated by the scons-time run subcommand.) All file name arguments will be globbed for on-disk files.
If no arguments are specified, then memory information will be extracted from all *.log files, or the subset of them with a prefix specified by the -p option.
-C DIR, --chdir=DIR
-f FILE, --file=FILE
-fmt=FORMAT, --format=FORMAT
-h, --help
-p STRING, --prefix=STRING
--stage=STAGE
-t NUMBER, --tail=NUMBER
scons-time obj [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [--stage=STAGE] [-t NUMBER] [--title=TITLE] [ARGUMENTS]
The scons-time obj subcommand displays how many objects of a specific named type are created by SCons.
The scons-time obj subcommand extracts object counts from all the specified file arguments, which should be files containing output from running SCons with the --debug=count option. (Normally, these would be *.log files generated by the scons-time run subcommand.) All file name arguments will be globbed for on-disk files.
If no arguments are specified, then object counts will be extracted from all *.log files, or the subset of them with a prefix specified by the -p option.
-C DIR, --chdir=DIR
-f FILE, --file=FILE
-fmt=FORMAT, --format=FORMAT
-h, --help
-p STRING, --prefix=STRING
--stage=STAGE
-t NUMBER, --tail=NUMBER
scons-time run [-hnqv] [-f FILE] [--number=NUMBER] [--outdir=OUTDIR] [-p STRING] [--python=PYTHON] [-s DIR] [--scons=SCONS] [--svn=URL] [ARGUMENTS] The scons-time run subcommand is the basic subcommand for profiling a specific configuration against a version of SCons.
The configuration to be tested is specified as a list of files or directories that will be unpacked or copied into a temporary directory in which SCons will be invoked. The scons-time run subcommand understands file suffixes like .tar, .tar.gz, .tgz and .zip and will unpack their contents into a temporary directory. If more than one argument is specified, each one will be unpacked or copied into the temporary directory "on top of" the previous archives or directories, so the expectation is that multiple specified archives share the same directory layout.
Once the file or directory arguments are unpacked or copied to the temporary directory, the scons-time run subcommand runs the requested version of SCons against the configuration three times:
Startup
Full build
Rebuild
Each invocation captures the output log file and a profile.
The scons-time run subcommand supports the following options:
-f FILE, --file=FILE
-h, --help
-n, --no-exec
--number=NUMBER
When used in conjunction with the --svn=URL option, NUMBER specifies one or more comma-separated Subversion revision numbers that will be retrieved automatically from the Subversion repository at the specified URL. Ranges of delta or revision numbers may be specified be separating two numbers with a hyphen (-).
Example:
% scons-time run --svn=http://scons.tigris.org/svn/trunk --num=1247,1249-1252 .
-p STRING, --prefix=STRING
--python=PYTHON
-q, --quiet
-s DIR, --subdir=DIR
--scons=SCONS
--svn=URL, --subversion=URL
-v, --verbose
scons-time time [-h] [--chdir=DIR] [-f FILE] [--fmt=FORMAT] [-p STRING] [-t NUMBER] [--title=TITLE] [--which=WHICH] [ARGUMENTS]
The scons-time time subcommand displays SCons execution times as reported by the scons --debug=time option.
The scons-time time subcommand extracts SCons timing from all the specified file arguments, which should be files containing output from running SCons with the --debug=time option. (Normally, these would be *.log files generated by the scons-time run subcommand.) All file name arguments will be globbed for on-disk files.
If no arguments are specified, then execution timings will be extracted from all *.log files, or the subset of them with a prefix specified by the -p option.
-C DIR, --chdir=DIR
-f FILE, --file=FILE
-fmt=FORMAT, --format=FORMAT
-h, --help
-p STRING, --prefix=STRING
-t NUMBER, --tail=NUMBER
--which=WHICH
Various scons-time subcommands can read information from a specified configuration file when passed the -f or --file options. The configuration file is actually executed as a Python script. Setting Python variables in the configuration file controls the behavior of the scons-time script more conveniently than having to specify command-line options or arguments for every run, and provides a handy way to "shrink-wrap" the necessary information for producing (and reporting) consistent timing runs for a given configuration.
archive_list
initial_commands
key_location
prefix
python
scons
scons_flags
scons_lib_dir, scons_wrapper, startup_targets, subdir
subversion_url
svn
svn_co_flag, tar, targets
targets0, targets1, targets2, title, unzip, verbose, vertical_bars
Here is an example scons-time configuration file for a hypothetical sample project:
# The project doesn't use SCons natively (yet), so we're # timing a separate set of SConscript files that we lay # on top of the vanilla unpacked project tarball. arguments = ['project-1.2.tgz', 'project-SConscripts.tar'] # The subdirectory name contains the project version number, # so tell scons-time to chdir there before building. subdir = 'project-1.2' # Set the prefix so output log files and profiles are named: # project-000-[012].{log,prof} # project-001-[012].{log,prof} # etc. prefix = 'project' # The SConscript files being tested don't do any SConf # configuration, so run their normal ./configure script # before we invoke SCons. initial_commands = [
'./configure', ] # Only time building the bin/project executable. targets = 'bin/project' # Time against SCons revisions of the branches/core branch subversion_url = 'http://scons.tigris.org/svn/scons/branches/core'
The scons-time script uses the following environment variables:
PRESERVE
Steven Knight <knight at baldmt dot com>
09/20/2022 | SCons __VERSION__ |