stef...@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*