[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1559767 - /subversion/trunk/subversion/libsvn_delta/xdelta.c

From: Philip Martin <philip.martin_at_wandisco.com>
Date: Tue, 18 Feb 2014 15:38:22 +0000

stefan2_at_apache.org writes:

> Author: stefan2
> Date: Mon Jan 20 16:23:15 2014
> New Revision: 1559767
>
> URL: http://svn.apache.org/r1559767
> Log:
> Speed up txdelta for non-deltifyable sections. This alone speeds up
> the commit of a 1GB random data file form 28s to 14s.
>
> The idea is to use a fixed-length bit array that tell us whether we
> _might_ have a match for a given checksum. In contrast to the iterative,
> multi-level check in find_match, this pre-check is very fast and highly
> predictable.
>
> * subversion/libsvn_delta/xdelta.c
> (FLAGS_COUNT): Define a new array size constant.
> (blocks): Add the FLAGS array.
> (hash_flags): New, separate hash function for FLAGS.
> (add_block): Populate / update FLAGS as well.
> (init_blocks_table): Initialize FLAGS.
> (compute_delta): Add a tight loop skipping non-matching sections;
> continue with normal lookup when there might be match.

This is triggering valgrind warnings in random-test:

$ valgrind -q .libs/lt-random-test 2
==19698== Conditional jump or move depends on uninitialised value(s)
==19698== at 0x402EAA3: bcmp (mc_replace_strmem.c:935)
==19698== by 0x4052114: find_block (xdelta.c:201)
==19698== by 0x4052314: find_match (xdelta.c:284)
==19698== by 0x40527A3: compute_delta (xdelta.c:428)
==19698== by 0x4052A4D: svn_txdelta__xdelta (xdelta.c:494)
==19698== by 0x404FF49: compute_window (text_delta.c:160)
==19698== by 0x4050718: txdelta_next_window (text_delta.c:392)
==19698== by 0x40504D7: svn_txdelta_next_window (text_delta.c:346)
==19698== by 0x402794: do_random_combine_test (random-test.c:446)
==19698== by 0x402A4B: random_combine_test (random-test.c:499)
==19698== by 0x403BDBB: do_test_num (svn_test_main.c:396)
==19698== by 0x403CECD: main (svn_test_main.c:866)
==19698==
==19698== Conditional jump or move depends on uninitialised value(s)
==19698== at 0x4052117: find_block (xdelta.c:201)
==19698== by 0x4052314: find_match (xdelta.c:284)
==19698== by 0x40527A3: compute_delta (xdelta.c:428)
==19698== by 0x4052A4D: svn_txdelta__xdelta (xdelta.c:494)
==19698== by 0x404FF49: compute_window (text_delta.c:160)
==19698== by 0x4050718: txdelta_next_window (text_delta.c:392)
==19698== by 0x40504D7: svn_txdelta_next_window (text_delta.c:346)
==19698== by 0x402794: do_random_combine_test (random-test.c:446)
==19698== by 0x402A4B: random_combine_test (random-test.c:499)
==19698== by 0x403BDBB: do_test_num (svn_test_main.c:396)
==19698== by 0x403CECD: main (svn_test_main.c:866)
==19698==
PASS: lt-random-test 2: random combine delta test

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*
Received on 2014-02-18 16:38:59 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.