[cmake-developers] [CMake 0012381]: ctest uses a lot of CPU time doing regular expressions, significantly slowing builds

Mantis Bug Tracker mantis at public.kitware.com
Tue Aug 2 11:20:22 EDT 2011


The following issue has been SUBMITTED. 
====================================================================== 
http://public.kitware.com/Bug/view.php?id=12381 
====================================================================== 
Reported By:                Sean McBride
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   12381
Category:                   CTest
Reproducibility:            always
Severity:                   major
Priority:                   high
Status:                     new
====================================================================== 
Date Submitted:             2011-08-02 11:20 EDT
Last Modified:              2011-08-02 11:20 EDT
====================================================================== 
Summary:                    ctest uses a lot of CPU time doing regular
expressions, significantly slowing builds
Description: 
Our developers normally do everything in Xcode itself, but our internal nightly
builds and dashboard use a combination of the command line xcodebuild and ctest.

The latter are literally 10x slower than the former.

Profiling reveals much CPU time is spent like so (best viewed with monospaced
font):

main
 cmCTest::Run(std::vector<std::basic_string<char, std::char_traits<char>,
std::allocator<char> >, std::allocator<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >*)
  cmCTestScriptHandler::ProcessHandler()
   cmCTestScriptHandler::RunConfigurationScript(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, bool)
    cmCTestScriptHandler::ReadInScript(std::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&)
     cmMakefile::ReadListFile(char const*, char const*, std::basic_string<char,
std::char_traits<char>, std::allocator<char> >*, bool)
      cmMakefile::ExecuteCommand(cmListFileFunction const&, cmExecutionStatus&)
       cmCommand::InvokeInitialPass(std::vector<cmListFileArgument,
std::allocator<cmListFileArgument> > const&, cmExecutionStatus&)
        cmCTestBuildCommand::InitialPass(std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > const&, cmExecutionStatus&)
         cmCTestHandlerCommand::InitialPass(std::vector<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > > const&, cmExecutionStatus&)
          cmCTestBuildHandler::ProcessHandler()
           cmCTestBuildHandler::RunMakeCommand(char const*, int*, char const*,
int, std::basic_ofstream<char, std::char_traits<char> >&)
            cmCTestBuildHandler::ProcessBuffer(char const*, int, unsigned long&,
unsigned long, std::basic_ofstream<char, std::char_traits<char> >&,
std::deque<char, std::allocator<char> >*)
             cmCTestBuildHandler::ProcessSingleLine(char const*)
              cmsys::RegularExpression::find(char const*)
               cmsys::regtry(char const*, char const**, char const**, char
const*)
                cmsys::regmatch(char const*)

Our hypothesis is that all the output generated by xcodebuild takes forever to
grep for errors/warnings.

It would be nice if this could be optimized.  It appears to be single threaded
currently, perhaps parallelization is an option?
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2011-08-02 11:20 Sean McBride   New Issue                                    
======================================================================




More information about the cmake-developers mailing list