[PATCH 3 of 3] revlog: optimize _chunkraw when startrev==endrev

Pierre-Yves David pierre-yves.david at ens-lyon.org
Sun Nov 6 10:16:10 EST 2016



On 11/04/2016 09:27 AM, Yuya Nishihara wrote:
> On Tue, 01 Nov 2016 18:25:47 -0700, Gregory Szorc wrote:
>> # HG changeset patch
>> # User Gregory Szorc <gregory.szorc at gmail.com>
>> # Date 1477244433 25200
>> #      Sun Oct 23 10:40:33 2016 -0700
>> # Node ID 4c96a177e4ff6a63156ec8cf49483a78e4437756
>> # Parent  0c41c0cb9b1ef7df40a30672927229ac195b1c92
>> revlog: optimize _chunkraw when startrev==endrev
>
> LGTM, queued the series, thanks.
>
>> In many cases, _chunkraw() is called with startrev==endrev. When
>> this is true, we can avoid an extra index lookup and some other
>> minor operations.
>>
>> On the mozilla-unified repo, `hg perfrevlogchunks -c` says this
>> has the following impact:
>>
>> ! read w/ reused fd
>> ! wall 0.371846 comb 0.370000 user 0.350000 sys 0.020000 (best of 27)
>> ! wall 0.337930 comb 0.330000 user 0.300000 sys 0.030000 (best of 30)
>>
>> ! read batch w/ reused fd
>> ! wall 0.014952 comb 0.020000 user 0.000000 sys 0.020000 (best of 197)
>> ! wall 0.014866 comb 0.010000 user 0.000000 sys 0.010000 (best of 196)
>>
>> So, we've gone from ~25x slower than batch to ~22.5% slower.

I'm double reviewing this and I do not understand these number. I see 
where you 25x number come from, but I fail to get what this ~22.5% 
slower one is about. Can you clarify this ?

>> At this point, there's probably not much else we can do except
>> implement an optimized function in the index itself, including in C.

+1, if we get a significant high level performance boost it make sense 
to move more of the revlog code into C (or other compiled language).

Cheers,

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list