iWhen matching a pattern check if bottom bits of hash are 0 - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit d60ace395a74a5efe067ee9cd5d85446c7facf43 /scm/dedup/commit/d60ace395a74a5efe067ee9cd5d85446c7facf43.gph bitreich.org 70 1parent d8bfc3a69ce4c3c35dfa8c0d5cef3ce10e424300 /scm/dedup/commit/d8bfc3a69ce4c3c35dfa8c0d5cef3ce10e424300.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Tue, 26 Feb 2019 09:48:57 +0000 Err bitreich.org 70 i Err bitreich.org 70 iWhen matching a pattern check if bottom bits of hash are 0 Err bitreich.org 70 i Err bitreich.org 70 iThis approach is more efficient and easier to understand. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M chunker.c | 10 +--------- Err bitreich.org 70 i M config.h | 1 + Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 2 insertions(+), 9 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/chunker.c b/chunker.c /scm/dedup/file/chunker.c.gph bitreich.org 70 i@@ -14,7 +14,6 @@ struct chunker { Err bitreich.org 70 i size_t cap; Err bitreich.org 70 i size_t rpos; Err bitreich.org 70 i size_t wpos; Err bitreich.org 70 i- size_t discr; Err bitreich.org 70 i int fd; Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i@@ -88,7 +87,7 @@ match_pattern(struct chunker *chunker, size_t chunk_size, uint32_t fp) Err bitreich.org 70 i return 1; Err bitreich.org 70 i if (chunk_size < BLKSIZE_MIN) Err bitreich.org 70 i return 0; Err bitreich.org 70 i- return (fp % chunker->discr) == chunker->discr - 1; Err bitreich.org 70 i+ return (fp & HASHMASK_BITS) == 0; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i static size_t Err bitreich.org 70 i@@ -123,12 +122,6 @@ get_chunk_size(struct chunker *chunker) Err bitreich.org 70 i return chunk_size; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-static size_t Err bitreich.org 70 i-calc_discr(size_t avg) Err bitreich.org 70 i-{ Err bitreich.org 70 i- return avg / (-1.42888852e-7 * avg + 1.33237515); Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i struct chunker * Err bitreich.org 70 i alloc_chunker(size_t cap, int fd) Err bitreich.org 70 i { Err bitreich.org 70 i@@ -145,7 +138,6 @@ alloc_chunker(size_t cap, int fd) Err bitreich.org 70 i chunker->rpos = 0; Err bitreich.org 70 i chunker->wpos = 0; Err bitreich.org 70 i chunker->fd = fd; Err bitreich.org 70 i- chunker->discr = calc_discr(BLKSIZE_AVG); Err bitreich.org 70 i Err bitreich.org 70 i return chunker; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/config.h b/config.h /scm/dedup/file/config.h.gph bitreich.org 70 i@@ -1,4 +1,5 @@ Err bitreich.org 70 i #define BLKSIZE_AVG ((size_t)524288) Err bitreich.org 70 i #define BLKSIZE_MIN ((BLKSIZE_AVG) / 4) Err bitreich.org 70 i #define BLKSIZE_MAX ((BLKSIZE_AVG) * 4) Err bitreich.org 70 i+#define HASHMASK_BITS (BLKSIZE_AVG - 1) Err bitreich.org 70 i #define WINSIZE 32 Err bitreich.org 70 .