[PATCH] performance: disable workaround for an old bug of Python

Maciej Fijalkowski fijall at gmail.com
Sat Aug 20 17:04:06 EDT 2016


On Sun, Aug 14, 2016 at 4:14 AM, Yuya Nishihara <yuya at tcha.org> wrote:
> On Fri, 12 Aug 2016 23:42:38 +0200, Maciej Fijalkowski wrote:
>> Well, seems the comment is out of date. I know the issue - the GC got
>> triggered every X objects in 2.6, which caused O(n^2) performance when
>> allocating lots of objects. These days (since 2.7) it adapts the
>> threshold, which means it always amortizes to O(n).
>
>> On Thu, Aug 11, 2016 at 12:36 AM, Matt Mackall <mpm at selenic.com> wrote:
>> > It's either fixed in 2.7 or it's not. The primary users of this code are
>> > dirstate and obsmarkers, so it should be pretty easy to test. This changeset has
>> > a benchmark:
>> >
>> > changeset:   25675:5817f71c2336
>> > user:        Pierre-Yves David <pierre-yves.david at fb.com>
>> > date:        Wed Nov 26 16:58:31 2014 -0800
>> > files:       mercurial/obsolete.py
>> > description:
>> > obsstore: disable garbage collection during initialization (issue4456)
>
> I can't say there's measurable win on CPython 2.7, and we have native parser
> now. So I'll take this patch, thanks.
>
>   $ hg debugobsolete | wc -l
>   106437
>   $ hg up 5817f71c2336  # use pure python parser
>   $ python -m timeit -r10 \
>   -s 'from mercurial import obsolete, scmutil; svfs = scmutil.vfs(".hg/store")' \
>   'obsolete.obsstore(svfs)'
>
>   (Python 2.6.9, GC disabled)
>   10 loops, best of 10: 714 msec per loop
>   (Python 2.6.9, GC enabled)
>   10 loops, best of 10: 746 msec per loop
>
>   (Python 2.7.12+, GC disabled)
>   10 loops, best of 10: 699 msec per loop
>   (Python 2.7.12+, GC enabled)
>   10 loops, best of 10: 703 msec per loop
>
> The result of timeit wasn't stable.

Well.... you're using TIMEIT to do GC benchmarks - it's a terrible
idea, ever, but for GC especially. You're taking a minimum of 10 runs
- of course it'll be random, you should take average instead and do
more runs.

That said, this is what I would expect, but I still strongly disagree
with the methodology.

Cheers,
fijal


More information about the Mercurial-devel mailing list