monotone-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Monotone-devel] Monotone performance degrades dramatically


From: Steven Grimm
Subject: [Monotone-devel] Monotone performance degrades dramatically
Date: Thu, 31 Aug 2006 10:45:34 -0700
User-agent: Mail/News 1.5.0.2 (Macintosh/20060324)

I am testing Monotone (0.29) out on a Fedora Core 4 system. I was using "tailor" to bring a bunch of changes over from an existing Subversion repository so I could see how the performance would be with a realistic code base after we'd been using it for a while.

At first, tailor was rolling along nicely, committing changes in a fraction of a second. I let it run overnight and was rather surprised that it was still going when I got up this morning. At the moment it is taking about 13 seconds to commit each change. Doesn't seem to vary much on the size of the change. The revision count is up to about 3710 now, and there are a good 8000 left to go.

So I wanted to see if this was due to some characteristic of the code base. I created a fresh DB with just one file under control:

mtn -d test.db db init
mtn -d test.db -b test setup ws
cd ws
echo 0 > testfile
mtn add testfile
echo "test checkin" > comment
mtn -d /var/tmp/mtnperf/test.db commit --message-file comment

Then I wrote the following simple shell script to make repeated trivial changes.

#!/bin/sh
i=1
while true; do
       echo $i > testfile
       echo "update to $i" > comment
       echo $i `date`
       i=`expr $i + 1`
       mtn -d /var/tmp/mtnperf/test.db commit --message-file comment
done

And I am definitely seeing performance degrade. The first 20 revisions took about 6 seconds to get through; now it's up at revision 485 and it's taking 2 seconds per commit. While it's sitting there it is chewing 100% of one of the machine's CPUs, so it doesn't seem to be I/O bound.

Is this known behavior, or something strange? Should the time taken by "commit" be linear with the number of revisions in the branch? Is there anything I should be doing periodically to keep things fast? (And if so, should that thing be added to tailor?)

I've tried attaching gdb to mtn while it's running, but I guess the precompiled Linux binary doesn't have debug symbols compiled in (I get a stack trace of entries like "#0 0x0820e076 in ?? ()"). If this is unusual behavior, I can have a whack at compiling mtn from source to get meaningful stack traces.

I have previously used monotone on much smaller projects with not a whole lot of revisions, and it works just fine in those contexts; I was pretty surprised to see this result!

-Steve





reply via email to

[Prev in Thread] Current Thread [Next in Thread]