Fwd: OutputModel performance

Kevin Funk krf at gmx.de
Thu Feb 7 12:09:33 UTC 2013


On Thursday 07 February 2013, 12:16, Morten Volden wrote:
> ---------- Forwarded message ----------
> From: Morten Volden <mvolden2 at gmail.com>
> Date: 2013/2/6
> Subject: Re: OutputModel performance
> To: Andreas Pakulat <apaku at gmx.de>
> 
> 
> 
> 
> 2013/2/6 Andreas Pakulat <apaku at gmx.de>
> 
> > Hi,
> > 
> > On Wed, Feb 6, 2013 at 4:59 PM, Kevin Funk <krf at gmx.de> wrote:
> > > On Wednesday 06 February 2013, 17:32, Alexander Shaduri wrote:
> > >> Hello,
> > >> 
> > >> On Wed, 06 Feb 2013 13:25:17 +0100
> > >> 
> > >> Kevin Funk wrote:
> > >> > I recently noticed that I get serious UI lockups when running a 'make
> > >> > install' job inside KDevelop for larger projects such as kdelibs.
> > 
> > 'make
> > 
> > >> > install' here may produce roughly ~4500 lines of output in just a few
> > >> > seconds.
> > >> > ...
> > >> > So, the question here:
> > >> > - Did anyone of you guys experience similar issues just to begin
> > >> > with?
> > >> 
> > >> Just from the user's point of view:
> > >> KDevelop is essentially unusable when I'm compiling my project (9
> > 
> > parallel
> > 
> > >> make jobs). It seems that the outputview just cannot handle it quickly
> > >> enough.
> > >> 
> > >> It's a typical cmake/Qt project compiled with make -j9, the full
> > 
> > compilation
> > 
> > >> takes about 30 seconds and produces ~500KB output (~2300 lines).
> > >> CMAKE_VERBOSE_MAKEFILE is on.
> > >> 
> > >> If I set make jobs to 1 or CMAKE_VERBOSE_MAKEFILE to off, it's all
> > >> fine.
> > >> 
> > >> I'd be grateful if you added this as a test case. Compiling, say,
> > 
> > KDevelop
> > 
> > >> with the same settings should give you the same drop in performance.
> > >> 
> > >> Thanks,
> > >> Alexander
> > > 
> > > Just for the record -- I just measured the time it takes to complete
> > > addLineBatch():
> > > 
> > > (...)
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  20 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  10 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  22 ms, processed
> > 
> > lines: 2
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  8 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  8 ms, processed
> > 
> > lines: 2
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  7 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  7 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  12 ms, processed
> > 
> > lines: 3
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  9 ms, processed
> > 
> > lines: 2
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  7 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  8 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  11 ms, processed
> > 
> > lines: 4
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  7 ms, processed
> > 
> > lines: 1
> > 
> > > KDevelop::OutputModel::addLineBatch: elapsed time:  7 ms, processed
> > 
> > lines: 1
> > 
> > > (...)
> > > 
> > > IMO that clearly shows that this takes way too much processing time /
> > 
> > line.
> > 
> > Well, unless you're using a high-precision timer I'm not sure how much
> > you can trust those timings for a single line, it would be more
> > interesting to see an average over 100 calls with the same
> > (non-matching or matching) line or so. IIRC the code for matching is
> > pretty much separate from the rest so it ought to be possible to
> > writeup a test that does this which can then also be better
> > valgrind'ed.
> 
> I can see that I accidentally sent this to Andreas only - sorry about that.
> 
> A test like that already exists in outputmodeltest. It benchmarks the
> different output filtering strategies.
> 
> Here is a sample from a test I just ran:
> QDEBUG : KDevelop::OutputModelTest::benchmarkAddlinesNofilter() average UI
> lockup in ms:  0.263682
> QDEBUG : KDevelop::OutputModelTest::benchmarkAddlinesCompilerfilter()
> average UI lockup in ms:  8.64179
> QDEBUG : KDevelop::OutputModelTest::benchmarkAddlinesScriptErrorfilter()
> average UI lockup in ms:  1.36318
> QDEBUG : KDevelop::OutputModelTest::benchmarkAddlinesStaticAnalysisfilter()
> average UI lockup in ms:  0.228856
> 
> Maybe if we got a sample of the compileoutput that seems to cause trouble,
> rewrote the test a little to feed each line to the matching code and do
> timing on matches. If one or more of the lines sticks out timing wise, it
> should be fairly simple to find the regex that performs badly on the
> line(s).

Here's some sample output to play with: http://pastebin.com/FPEcUWP4
(4400 lines, flushed in ~15 seconds). If this is done inside KDevelop, I get a 
rather sluggish UI with KDevelop keeping 1 core busy at 100%.

I can do some more profiling next week probably (busy writing exams atm). Then 
I can also have a more detailled look at the regexps used.

Greets

-- 
Kevin Funk


More information about the KDevelop-devel mailing list