The test was made using two machines in a LAN. Both machines had 2.8
GHz Intel Core i7 CPUs, the RhodeCode server had 4 GiB of RAM and the
+client had 6 GiB. The server is using the built-in Pylons webserver
+In the tests, a varying number of worker threads were running in a
+1. ``hg pull`` to get the latest changes.
+3. Make two commits, each consisting of two random edits to three
+4. ``hg push -f`` to unconditionally push the new changesets.
+5. ``hg push`` to check pushing when there is nothing to push.
+The graphs below show the results when up to 48 threads were working
+in parallel on eight test repositories. The repositories were clones
+of the Mercurial repository itself. One thread was started every 10
+seconds for the first 480 seconds. The 48 threads were then left
+running for 120 seconds more, for a total test time of 10 minutes.
+This is the results for the different operations are below. The raw
+response times are plotted first, then comes a plot showing the
+average time, and the 80- and 90-percentile times based on 30-second
+ .. image:: results/hg-pull-response-times.png
+ .. image:: results/hg-pull-response-times-intervals.png
+ .. image:: results/hg-push-force-response-times.png
+ .. image:: results/hg-push-force-response-times-intervals.png
+ .. image:: results/hg-push-empty-response-times.png
+ .. image:: results/hg-push-empty-response-times-intervals.png
+We see, that the response time grows more or less linearly with the
+number of simultaneous clients. Even with 48 clients all pushing and
+pulling data at the same time, ``hg pull`` (a lock-less operation)
+will normally complete in less than 30 seconds, and ``hg push`` takes
+less than 50 seconds when there's data to push.