diff-delta: produce optimal pack data
authorNicolas Pitre <nico@cam.org>
Wed, 22 Feb 2006 01:45:36 +0000 (20:45 -0500)
committerJunio C Hamano <junkio@cox.net>
Thu, 2 Mar 2006 05:51:00 +0000 (21:51 -0800)
commitcc5c59a30ccba8b9eac503271661af9b95edb0af
treee903cc66245225d60572161638971d9495d007d3
parent5343cf1082c93e41515acbc36a4a9c8c5995d4ac
diff-delta: produce optimal pack data

Indexing based on adler32 has a match precision based on the block size
(currently 16).  Lowering the block size would produce smaller deltas
but the indexing memory and computing cost increases significantly.

For optimal delta result the indexing block size should be 3 with an
increment of 1 (instead of 16 and 16).  With such low params the adler32
becomes a clear overhead increasing the time for git-repack by a factor
of 3.  And with such small blocks the adler 32 is not very useful as the
whole of the block bits can be used directly.

This patch replaces the adler32 with an open coded index value based on
3 characters directly.  This gives sufficient bits for hashing and
allows for optimal delta with reasonable CPU cycles.

The resulting packs are 6% smaller on average.  The increase in CPU time
is about 25%.  But this cost is now hidden by the delta reuse patch
while the saving on data transfers is always there.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
diff-delta.c