1 .\" Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 The SCons Foundation
3 .\" Permission is hereby granted, free of charge, to any person obtaining
4 .\" a copy of this software and associated documentation files (the
5 .\" "Software"), to deal in the Software without restriction, including
6 .\" without limitation the rights to use, copy, modify, merge, publish,
7 .\" distribute, sublicense, and/or sell copies of the Software, and to
8 .\" permit persons to whom the Software is furnished to do so, subject to
9 .\" the following conditions:
11 .\" The above copyright notice and this permission notice shall be included
12 .\" in all copies or substantial portions of the Software.
14 .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
15 .\" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
16 .\" WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 .\" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 .\" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 .\" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 .\" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 .\" doc/man/scons-time.1 3842 2008/12/20 22:59:52 scons
24 .\" ES - Example Start - indents and turns off line fill
29 .\" EE - Example End - ends indent and turns line fill back on
34 '\"==========================================================================
38 [\fB--chdir=\fIDIR\fR]
40 [\fB--fmt=\fIFORMAT\fR]
41 [\fB--func=\fINAME\fR]
44 [\fB--title= TITLE\fR]
47 '\"--------------------------------------------------------------------------
51 [\fB--chdir=\fIDIR\fR]
53 [\fB--fmt=\fIFORMAT\fR]
55 [\fB--stage=\fISTAGE\fR]
57 [\fB--title=\fITITLE\fR]
60 '\"--------------------------------------------------------------------------
64 [\fB--chdir=\fIDIR\fR]
66 [\fB--fmt=\fIFORMAT\fR]
68 [\fB--stage=\fISTAGE\fR]
70 [\fB--title=\fITITLE\fR]
73 '\"--------------------------------------------------------------------------
77 [\fB--aegis=\fIPROJECT\fR]
79 [\fB--number=\fINUMBER\fR]
80 [\fB--outdir=\fIOUTDIR\fR]
82 [\fB--python=\fIPYTHON\fR]
84 [\fB--scons=\fISCONS\fR]
88 '\"--------------------------------------------------------------------------
92 [\fB--chdir=\fIDIR\fR]
94 [\fB--fmt=\fIFORMAT\fR]
97 [\fB--title=\fITITLE\fR]
98 [\fB--which=\fIWHICH\fR]
101 .TH SCONS-TIME 1 "December 2008"
103 scons-time \- generate and display SCons timing information
104 '\"==========================================================================
114 '\"--------------------------------------------------------------------------
115 .SS "Generating Timing Information"
117 '\"--------------------------------------------------------------------------
118 .SS "Extracting Function Timings"
120 '\"--------------------------------------------------------------------------
121 .SS "Extracting Memory Statistics"
123 '\"--------------------------------------------------------------------------
124 .SS "Extracting Object Counts"
126 '\"--------------------------------------------------------------------------
127 .SS "Extracting Execution Times"
129 '\"--------------------------------------------------------------------------
134 '\"==========================================================================
138 command runs an SCons configuration
139 through a standard set of profiled timings
140 and can extract and graph information from the
141 resulting profiles and log files of those timings.
142 The action to be performed by the
145 by a subcommand, the first argument on the command line.
148 section below for information about the operation
149 of specific subcommands.
156 (possibly multiple times)
157 to generate profile and log file output,
158 and then use one of the other
159 subcommands to display the results
160 captured in the profiles and log files
161 for a particular kind of information:
174 and overall execution time
178 Options exist to place and find the
179 profiles and log files in separate directories,
180 to generate the output in a format suitable
181 for graphing with the
186 There are two basic ways the
189 is intended to be used
190 to gather timing statistics
194 option to test a configuration against
195 a list of revisions from the SCons Subversion repository.
196 This will generate a profile and timing log file
197 for every revision listed with the
200 and can be used to look at the
201 impact of commited changes to the
202 SCons code base on a particular
203 configuration over time.
205 The other way is to profile incremental changes to a
206 local SCons code base during a development cycle--that is,
207 to look at the performance impact of changes
208 you're making in the local tree.
217 in which case it simply looks in the profile/log file output directory
218 (the current directory by default)
219 and automatically figures out the
221 run number for the output profile and log file.
223 the development cycle goes something like:
224 make a change to SCons;
227 to profile it against a specific configuration;
228 make another change to SCons;
233 '\"==========================================================================
237 command only supports a few global options:
240 Displays the global help text and exits,
250 Most functionality is controlled by options
251 to the individual subcommands.
252 See the next section for information
253 about individual subcommand options.
254 '\"==========================================================================
258 command supports the following
259 individual subcommands.
260 '\"--------------------------------------------------------------------------
261 .SS "The func Subcommand"
266 subcommand displays timing information
267 for a specific Python function within SCons.
268 By default, it extracts information about the
271 which includes the Python profiler timing
276 subcommand extracts function timing information
277 from all the specified file arguments,
278 which should be Python profiler output files.
279 (Normally, these would be
281 files generated by the
284 but they can actually be generated
285 by any Python profiler invocation.)
286 All file name arguments will be
287 globbed for on-disk files.
289 If no arguments are specified,
290 then function timing information
291 will be extracted from all
294 or the subset of them
295 with a prefix specified by the
301 -C DIRECTORY, --chdir=DIRECTORY
302 Changes to the specified
304 before looking for the specified files
305 (or files that match the specified patterns).
308 Reads configuration information from the specified
311 -fmt=FORMAT, --format=FORMAT
312 Reports the output in the specified
314 The formats currently supported are
321 Extracts timings for the specified function
323 The default is to report cumulative timings for the
326 which contains the entire SCons run.
329 Displays help text for the
333 -p STRING, --prefix=STRING
334 Specifies the prefix string for profiles
335 from which to extract function timing information.
336 This will be used to search for profiles
337 if no arguments are specified on the command line.
339 -t NUMBER, --tail=NUMBER
340 Only extracts function timings from the last
343 '\"--------------------------------------------------------------------------
344 .SS "The help Subcommand"
350 subcommand prints help text for any
351 other subcommands listed as later arguments on the command line.
352 '\"--------------------------------------------------------------------------
353 .SS "The mem Subcommand"
358 subcommand displays how much memory SCons uses.
362 subcommand extracts memory use information
363 from all the specified file arguments,
364 which should be files containing output from
365 running SCons with the
368 (Normally, these would be
370 files generated by the
373 All file name arguments will be
374 globbed for on-disk files.
376 If no arguments are specified,
377 then memory information
378 will be extracted from all
381 or the subset of them
382 with a prefix specified by the
388 Changes to the specified
390 before looking for the specified files
391 (or files that match the specified patterns).
394 Reads configuration information from the specified
397 -fmt=FORMAT, --format=FORMAT
398 Reports the output in the specified
400 The formats currently supported are
407 Displays help text for the
411 -p STRING, --prefix=STRING
412 Specifies the prefix string for log files
413 from which to extract memory usage information.
414 This will be used to search for log files
415 if no arguments are specified on the command line.
418 Prints the memory used at the end of the specified
421 (before the SConscript files are read),
423 (after the SConscript files are read),
425 (before any targets are built)
428 (after any targets are built).
432 the default behavior is
434 which reports the final amount of memory
435 used by SCons during each run.
437 -t NUMBER, --tail=NUMBER
438 Only reports memory statistics from the last
441 '\"--------------------------------------------------------------------------
442 .SS "The obj Subcommand"
447 subcommand displays how many objects of a specific named type
448 are created by SCons.
452 subcommand extracts object counts
453 from all the specified file arguments,
454 which should be files containing output from
455 running SCons with the
458 (Normally, these would be
460 files generated by the
463 All file name arguments will be
464 globbed for on-disk files.
466 If no arguments are specified,
468 will be extracted from all
471 or the subset of them
472 with a prefix specified by the
477 Changes to the specified
479 before looking for the specified files
480 (or files that match the specified patterns).
483 Reads configuration information from the specified
486 -fmt=FORMAT, --format=FORMAT
487 Reports the output in the specified
489 The formats currently supported are
496 Displays help text for the
500 -p STRING, --prefix=STRING
501 Specifies the prefix string for log files
502 from which to extract object counts.
503 This will be used to search for log files
504 if no arguments are specified on the command line.
507 Prints the object count at the end of the specified
510 (before the SConscript files are read),
512 (after the SConscript files are read),
514 (before any targets are built)
517 (after any targets are built).
521 the default behavior is
523 which reports the final object count during each run.
525 -t NUMBER, --tail=NUMBER
526 Only reports object counts from the last
529 '\"--------------------------------------------------------------------------
530 .SS "The run Subcommand"
534 subcommand is the basic subcommand
535 for profiling a specific configuration
536 against a version of SCons.
538 The configuration to be tested
539 is specified as a list of files
540 or directories that will be unpacked or copied
541 into a temporary directory
542 in which SCons will be invoked.
545 subcommand understands file suffixes like
551 and will unpack their contents into a temporary directory.
552 If more than one argument is specified,
553 each one will be unpacked or copied
554 into the temporary directory "on top of"
555 the previous archives or directories,
556 so the expectation is that multiple
557 specified archives share the same directory layout.
559 Once the file or directory arguments are unpacked or
560 copied to the temporary directory,
564 requested version of SCons
565 against the configuration
569 SCons is run with the
571 option so that just the SConscript files are read,
572 and then the default help text is printed.
573 This profiles just the perceived "overhead" of starting up SCons
574 and processing the SConscript files.
577 SCons is run to build everything specified in the configuration.
578 Specific targets to be passed in on the command l ine
579 may be specified by the
581 keyword in a configuration file; see below for details.
584 SCons is run again on the same just-built directory.
585 If the dependencies in the SCons configuration are correct,
586 this should be an up-to-date, "do nothing" rebuild.
588 Each invocation captures the output log file and a profile.
592 subcommand supports the following options:
600 being timed will be extracted.
605 option specifies delta numbers
607 Output from each invocation run will be placed in file
608 names that match the Aegis delta numbers.
611 option is not specified,
612 then the default behavior is to time the
617 Reads configuration information from the specified
619 This often provides a more convenient way to specify and
620 collect parameters associated with a specific timing configuration
621 than specifying them on the command line.
623 .B CONFIGURATION FILE
625 for information about the configuration file parameters.
628 Displays help text for the
633 Do not execute commands,
634 just printing the command-line equivalents of what would be executed.
637 script actually executes its actions in Python,
640 The commands displayed are UNIX
645 Specifies the run number to be used in the names of
646 the log files and profile outputs generated by this run.
648 When used in conjuction with the
652 specifies one or more comma-separated Aegis delta numbers
653 that will be retrieved automatically from the specified Aegis
656 When used in conjuction with the
660 specifies one or more comma-separated Subversion revision numbers
661 that will be retrieved automatically from the Subversion
662 repository at the specified
664 Ranges of delta or revision numbers
665 may be specified be separating two numbers
671 % scons-time run --svn=http://scons.tigris.org/svn/trunk --num=1247,1249-1252 .
674 -p STRING, --prefix=STRING
675 Specifies the prefix string to be used for all of the log files
676 and profiles generated by this run.
677 The default is derived from the first
679 if the first argument is a directory,
680 the default prefix is the name of the directory;
681 if the first argument is an archive
683 the default prefix is the the base name of the archive,
684 that is, what remains after stripping the archive suffix
685 .RB ( .tgz ", " .tar.gz " or " .zip ).
688 Specifies a path to the Python executable to be used
690 The default is to use the same Python executable that
696 Suppresses display of the command lines being executed.
699 Specifies the name of directory or subdirectory
700 from which the commands should be executed.
704 Specifies a path to the SCons script to be used
708 --svn=URL, --subversion=URL
711 of the Subversion repository from which the
714 being timed will be extracted.
719 option specifies revision numbers
721 Output from each invocation run will be placed in file
722 names that match the Subversion revision numbers.
725 option is not specified,
726 then the default behavior is to time the
732 Displays the output from individual commands to the screen
733 (in addition to capturing the output in log files).
734 '\"--------------------------------------------------------------------------
735 .SS "The time Subcommand"
740 subcommand displays SCons execution times
742 .B scons --debug=time
747 subcommand extracts SCons timing
748 from all the specified file arguments,
749 which should be files containing output from
750 running SCons with the
753 (Normally, these would be
755 files generated by the
758 All file name arguments will be
759 globbed for on-disk files.
761 If no arguments are specified,
762 then execution timings
763 will be extracted from all
766 or the subset of them
767 with a prefix specified by the
772 Changes to the specified
774 before looking for the specified files
775 (or files that match the specified patterns).
778 Reads configuration information from the specified
781 -fmt=FORMAT, --format=FORMAT
782 Reports the output in the specified
784 The formats currently supported are
791 Displays help text for the
795 -p STRING, --prefix=STRING
796 Specifies the prefix string for log files
797 from which to extract execution timings.
798 This will be used to search for log files
799 if no arguments are specified on the command line.
801 -t NUMBER, --tail=NUMBER
802 Only reports object counts from the last
807 Prints the execution time for the specified
811 (the total execution time),
813 (total execution time for the SConscript files themselves),
815 (exectuion time in SCons code itself)
818 (execution time of the commands and other actions
819 used to build targets).
823 the default behavior is
825 which reports the total execution time for each run.
826 '\"==========================================================================
827 .SH CONFIGURATION FILE
830 subcommands can read information from a specified
831 configuration file when passed the
836 The configuration file is actually executed as a Python script.
837 Setting Python variables in the configuration file
838 controls the behavior of the
840 script more conveniently than having to specify
841 command-line options or arguments for every run,
842 and provides a handy way to "shrink-wrap"
843 the necessary information for producing (and reporting)
844 consistent timing runs for a given configuration.
847 The Aegis executable for extracting deltas.
848 The default is simply
852 The Aegis project from which deltas should be extracted.
853 The default is whatever is specified
859 A list of archives (files or directories)
860 that will be copied to the temporary directory
861 in which SCons will be invoked.
867 files will have their contents unpacked in
868 the temporary directory.
869 Directory trees and files will be copied as-is.
872 A list of commands that will be executed
873 before the actual timed
876 This can be used for commands that are necessary
877 to prepare the source tree\-for example,
878 creating a configuration file
879 that should not be part of the timed run.
882 The location of the key on Gnuplot graphing information
890 The file name prefix to be used when
891 running or extracting timing for this configuration.
894 The path name of the Python executable
895 to be used when running or extracting information
896 for this configuration.
897 The default is the same version of Python
898 used to run the SCons
901 The path name of the SCons script to be used
902 when running or extracting information
903 for this configuration.
904 The default is simply
910 flags used when running SCons to collect timing information.
912 .BR "--debug=count --debug=memory --debug=time --debug=memoizer" .
921 The subdirectory of the project into which the
924 before executing the SCons commands to time.
927 The Subversion URL from
930 The subversion executable used to
931 check out revisions of SCons to be timed.
932 The default is simple
940 A string containing the targets that should be added to
941 the command line of every timed
944 This can be used to restrict what's being timed to a
945 subset of the full build for the configuration.
960 '\"--------------------------------------------------------------------------
965 for a hypothetical sample project:
968 # The project doesn't use SCons natively (yet), so we're
969 # timing a separate set of SConscript files that we lay
970 # on top of the vanilla unpacked project tarball.
971 arguments = ['project-1.2.tgz', 'project-SConscripts.tar']
973 # The subdirectory name contains the project version number,
974 # so tell scons-time to chdir there before building.
975 subdir = 'project-1.2'
977 # Set the prefix so output log files and profiles are named:
978 # project-000-[012].{log,prof}
979 # project-001-[012].{log,prof}
983 # The SConscript files being tested don't do any SConf
984 # configuration, so run their normal ./configure script
985 # before we invoke SCons.
990 # Only time building the bin/project executable.
991 targets = 'bin/project'
993 # Time against SCons revisions of the branches/core branch
994 subversion_url = 'http://scons.tigris.org/svn/scons/branches/core'
996 '\"==========================================================================
1000 script uses the following environment variables:
1003 If this value is set,
1008 remove the temporary directory or directories
1009 in which it builds the specified configuration
1010 or downloads a specific version of SCons.
1011 '\"==========================================================================
1017 Steven Knight <knight at baldmt dot com>