[PATCH 5 of 6 frozen-repos] localrepo: evaluate revsets against frozen repos
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Mon Nov 23 00:44:13 CST 2015
On 11/22/2015 10:04 PM, Gregory Szorc wrote:
> On Sun, Nov 22, 2015 at 9:25 PM, Pierre-Yves David
> <pierre-yves.david at ens-lyon.org <mailto:pierre-yves.david at ens-lyon.org>>
> wrote:
>
>
>
> On 11/21/2015 05:14 PM, Gregory Szorc wrote:
>
> # HG changeset patch
> # User Gregory Szorc <gregory.szorc at gmail.com
> <mailto:gregory.szorc at gmail.com>>
> # Date 1448146482 28800
> # Sat Nov 21 14:54:42 2015 -0800
> # Node ID ad891b362564b30ec69bc844a3fd98e73b6e032e
> # Parent 888c2171adffa8340406b50aae02375f7bef50f4
> localrepo: evaluate revsets against frozen repos
>
> Previously, revsets were evaluated against a
> repository/changelog that
> could change. This felt wrong. And, changectx lookups during revset
> evaluation would result in repoview constantly performing changelog
> correctness checks, adding overhead.
>
> This patch results in some significant performance wins, especially
> when changectx are involved. There are some minor regressions, but
> the absolute time increase is so small that they can arguably be
> ignored. A detailed analysis follows.
>
> Running the revset benchmarks in default mode of returning integers,
> we see some interesting changes:
>
> revset #1: draft()
> plain
> 0) 0.000040
> 1) 0.000053 132%
>
> plain
> 0) 0.000233
> 1) 0.000236
>
> revset #7: author(lmoscovicz)
> plain
> 0) 0.994968
> 1) 0.702156 70%
>
> revset #8: author(mpm)
> plain
> 0) 0.982039
> 1) 0.696124 70%
>
> revset #9: author(lmoscovicz) or author(mpm)
> plain
> 0) 1.944505
> 1) 1.372315 70%
>
> revset #10: author(mpm) or author(lmoscovicz)
> plain
> 0) 1.970464
> 1) 1.393157 70%
>
> revset #13: roots((tip~100::) - (tip~100::tip))
> plain
> 0) 0.000636
> 1) 0.000603 94%
>
> revset #15: 42:68 and roots(42:tip)
> plain
> 0) 0.000226
> 1) 0.000178 78%
>
> revset #19: draft()
> plain
> 0) 0.000040
> 1) 0.000056 140%
>
> revset #22: (not public() - obsolete())
> plain
> 0) 0.000088
> 1) 0.000111 126%
>
> revset #23: (_intlist('20000\x0020001')) and merge()
> plain
> 0) 0.000066
> 1) 0.000086 130%
>
> First, the improvements. revsets with author() improved
> significantly.
> The reason is that unlike most changesets, author() needs to
> obtain a
> changectx to inspect the author field. And since repo.changelog
> lookups
> are faster, that revset function became faster.
>
>
> Using changectx in revset is too slow anyway. We should use lower
> lever access there anyway (as we just changed for _matchfiles).
>
> I'll look at the rest of this later.
>
>
> Keep in mind that changectx instances don't read from the revlog until
> there is a data access that requires a read. revsets that access things
> like the DAG "shape" are powered strictly from the index, which is
> insanely fast. The only time changectx object overhead comes into play
> is when accessing the commit message, date, author, changed files list,
> extras, etc.
I know, I think we should stop using changectx for accessing theses too.
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list