[PATCH 2 of 4] parsers: write dirstate starting with non-normal entries

Durham Goode durham at fb.com
Wed Nov 25 14:27:00 CST 2015



On 11/24/15 8:19 PM, Laurent Charignon wrote:
> # HG changeset patch
> # User Laurent Charignon <lcharignon at fb.com>
> # Date 1448413597 28800
> #      Tue Nov 24 17:06:37 2015 -0800
> # Node ID ea9d03d4e85ea3949bb8d16bd9e1a80246a8247b
> # Parent  3bd86861a1618aabe6ec7f2cde1223282f9569be
> parsers: write dirstate starting with non-normal entries
>
> Before this patch we were writing the dirstate entries in a "random" way,
> following the *unstable* order of a Python dictionary. This patch changes the
> order in which we write the dirstate entries.
>
> We now start with the non-normal files (that have changed and likely to have
> changed) and end with the normal files. This makes the job of hg status easier
> as, in most cases, it will need to access the non-normal entries of the
> dirstate. This new ordering allows hg status to stop iterating over the dirstate
> after processing those entries.
>
> On our large repos, for hg status, we achieve a 40% improvement.
> On the same repo, the cost of this change is a slowdown for writing the
> dirstate to disk (as we do two passes). I measured the execution time of
> hg debugrebuilddirstate with and without the change and observed a 5% slowdown
> for the overall command.
>
Is 'hg debugrebuilddirstate' a good benchmark?  What is the performance 
difference for 'hg commit' or 'hg up .^'.  Also, what is the actual 
number behind 5%?  a 500ms slow down would be worriesome, while a 20ms 
slow down is ok.


More information about the Mercurial-devel mailing list