Lock contention analysis for 4 thread background parsing with kdevelop

Milian Wolff mail at milianw.de
Thu Dec 3 13:20:09 UTC 2009


On Thursday 03 December 2009 12:49:01 Hamish Rodda wrote:
> Hi,
> 
> I've just stumbled on what seems to be a great new tool for lock contention
> analysis: mutrace by Lennart Poettering, at
> http://0pointer.de/blog/projects/mutrace.html
> 
> After some initial problems building on kubuntu, I managed to get it
>  compiled. Kubuntu/ubuntu/debian users will probably have to do like I did,
>  so that libbdb is built with -fPIC: install binutils-dev and
>  binutils-source, extract the source, ./configure  --prefix=/usr
>  --with-pic, cd bdb, make && make install.

Interesting, I'll try to get it working with Archlinux over the weekend I 
think.

> Running kdevelop was easy once I removed the patchreview plugin, since that
> plugin throws exceptions (which are not currently compatible with mutrace).

You should try out duchainify 
($builddir/kdevplatform/utils/duchainify/duchainify)

> I haven't yet had time to really analyse each of the locks that is
>  represented here, but it certainly shows that we do massive amounts of
>  locking, and that there are very many instances of lock contention. 
>  Hopefully through this tool we can find some hot spots to optimise, such
>  that running with more than one background parsing thread will one day
>  make sense and be faster than a single thread.

Is that really true? I.e. that we are currently slower with more threads than 
with a single thread?

> You'll need to read the description at the program homepage to understand
>  the output. Here is the best output I could generate so far (full parse of
>  kdevplatform/kdevelop/java by kdevelop with clean .kdevduchain):
>
> hamish at Sleek:/opt/kde4/src/kdevplatform/plugins/patchreview$ mutrace
>  --hash- size=100000 --max=30 kdevelop
> mutrace: Application appears to be compiled without -rdynamic. It might be
>  a mutrace: good idea to recompile with -rdynamic enabled since this
>  produces more
> mutrace: useful stack traces.

How would one compile with -rdynamic? There is a cmake flag for custom linker 
options, right?
 
...
> mutrace: Showing 30 most contended mutexes:
> 
>  Mutex #   Locked  Changed    Cont. tot.Time[ms] avg.Time[ms] max.Time[ms]
> Flags
>     7702 10867922  1289097   602227     2045.941        0.000        3.661
> M-.--.
>     4543  1438294   493776   220689      507.489        0.000       21.206
...

What is imo interesting: avg Time of 0 ms. Imo the sheer number of lockings is 
what makes things slow, but imo it's not really easy/possible to reduce that 
number?

> mutrace: WARNING: 384 internal hash collisions detected. Results might not
>  be as reliable as they could be.
> mutrace:          Try to increase --hash-size=, which is currently at
>  100000.

How serious is that warning, anyone knows?

-- 
Milian Wolff
mail at milianw.de
http://milianw.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20091203/2b0f24e9/attachment.sig>


More information about the KDevelop-devel mailing list