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

Laurent Charignon lcharignon at fb.com
Mon Nov 30 16:16:35 CST 2015


> On Nov 25, 2015, at 12:27 PM, Durham Goode <durham at fb.com> wrote:
> 
> 
> 
> 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.


What else do you suggest to use?
With hg debugrebuilddirstate, on one of our big repos, on average I measure a 16ms difference: 3.2s execution without the patch vs 3.32s with the patch.



More information about the Mercurial-devel mailing list