[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