iTweak params - 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 23e23d22beed84fe844c6d76f453667d9a6f95c6 /scm/dedup/commit/23e23d22beed84fe844c6d76f453667d9a6f95c6.gph bitreich.org 70 1parent e8031b23797e666b43f96906372d97e2da4f4d0a /scm/dedup/commit/e8031b23797e666b43f96906372d97e2da4f4d0a.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Fri, 22 Feb 2019 13:15:25 +0000 Err bitreich.org 70 i Err bitreich.org 70 iTweak params Err bitreich.org 70 i Err bitreich.org 70 iThe parameters were taken from casync. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M chunker.c | 35 ++++++++++++++++++++++++------- Err bitreich.org 70 i M config.h | 5 +++-- Err bitreich.org 70 i M dedup.c | 18 +++++++++--------- Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 39 insertions(+), 19 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@@ -16,15 +16,33 @@ struct chunker { 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+static int Err bitreich.org 70 i+match_pattern(size_t chunk_size, uint32_t fp) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t discr = calc_discr(BLKSIZE_AVG); Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (chunk_size >= BLKSIZE_MAX) 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 % discr) == discr - 1; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+static size_t Err bitreich.org 70 i get_chunk_size(struct chunker *chunker) Err bitreich.org 70 i { Err bitreich.org 70 i uint8_t *bp; Err bitreich.org 70 i uint32_t fp; Err bitreich.org 70 i- size_t i; Err bitreich.org 70 i+ size_t i, chunk_size; Err bitreich.org 70 i Err bitreich.org 70 i- /* buzhash should be at least WINSIZE */ Err bitreich.org 70 i- if (chunker->wpos - chunker->rpos < WINSIZE) Err bitreich.org 70 i- return chunker->wpos - chunker->rpos; Err bitreich.org 70 i+ chunk_size = chunker->wpos - chunker->rpos; Err bitreich.org 70 i+ if (chunk_size < WINSIZE) Err bitreich.org 70 i+ return chunk_size; Err bitreich.org 70 i Err bitreich.org 70 i bp = chunker->buf; Err bitreich.org 70 i Err bitreich.org 70 i@@ -39,13 +57,14 @@ get_chunk_size(struct chunker *chunker) Err bitreich.org 70 i */ Err bitreich.org 70 i fp = buzh_init(bp, WINSIZE); Err bitreich.org 70 i for (i = chunker->rpos; i < chunker->wpos - WINSIZE; i++) { Err bitreich.org 70 i+ chunk_size = i + WINSIZE; Err bitreich.org 70 i if (i > 0) Err bitreich.org 70 i- fp = buzh_update(fp, bp[i - 1], bp[WINSIZE + i - 1], Err bitreich.org 70 i+ fp = buzh_update(fp, bp[i - 1], bp[chunk_size - 1], Err bitreich.org 70 i WINSIZE); Err bitreich.org 70 i- if ((fp & HASHMSK) == 0) Err bitreich.org 70 i- return i + WINSIZE; Err bitreich.org 70 i+ if (match_pattern(chunk_size, fp) == 1) Err bitreich.org 70 i+ return chunk_size; Err bitreich.org 70 i } Err bitreich.org 70 i- return chunker->wpos - chunker->rpos; Err bitreich.org 70 i+ return chunk_size; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i struct chunker * Err bitreich.org 70 1diff --git a/config.h b/config.h /scm/dedup/file/config.h.gph bitreich.org 70 i@@ -1,3 +1,4 @@ Err bitreich.org 70 i-#define BLKSIZE 131072 Err bitreich.org 70 i+#define BLKSIZE_AVG ((size_t)131072) 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 WINSIZE 32 Err bitreich.org 70 i-#define HASHMSK ((1ul << 15) - 1) Err bitreich.org 70 1diff --git a/dedup.c b/dedup.c /scm/dedup/file/dedup.c.gph bitreich.org 70 i@@ -325,9 +325,9 @@ dedup_chunk(struct snapshot *snap, uint8_t *chunkp, size_t chunk_size) Err bitreich.org 70 i struct blk_desc blk_desc; Err bitreich.org 70 i size_t n; Err bitreich.org 70 i Err bitreich.org 70 i- comp_buf = alloc_buf(comp_size(BLKSIZE)); Err bitreich.org 70 i+ comp_buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i Err bitreich.org 70 i- n = comp(chunkp, comp_buf, chunk_size, comp_size(BLKSIZE)); Err bitreich.org 70 i+ n = comp(chunkp, comp_buf, chunk_size, comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i hash_blk(comp_buf, n, md); Err bitreich.org 70 i Err bitreich.org 70 i snaphdr.st.orig_size += chunk_size; Err bitreich.org 70 i@@ -374,7 +374,7 @@ dedup(int fd, char *msg) Err bitreich.org 70 i ssize_t n; Err bitreich.org 70 i Err bitreich.org 70 i snap = alloc_snap(); Err bitreich.org 70 i- chunker = alloc_chunker(BLKSIZE, fd); Err bitreich.org 70 i+ chunker = alloc_chunker(BLKSIZE_MAX, fd); Err bitreich.org 70 i Err bitreich.org 70 i SHA256_Init(&ctx); Err bitreich.org 70 i while ((n = fill_chunker(chunker)) > 0) { Err bitreich.org 70 i@@ -417,14 +417,14 @@ extract(struct snapshot *snap, void *arg) Err bitreich.org 70 i if (memcmp(snap->md, args->md, sizeof(snap->md)) != 0) Err bitreich.org 70 i return WALK_CONTINUE; Err bitreich.org 70 i Err bitreich.org 70 i- buf[0] = alloc_buf(BLKSIZE); Err bitreich.org 70 i- buf[1] = alloc_buf(comp_size(BLKSIZE)); Err bitreich.org 70 i+ buf[0] = alloc_buf(BLKSIZE_MAX); Err bitreich.org 70 i+ buf[1] = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i for (i = 0; i < snap->nr_blk_descs; i++) { Err bitreich.org 70 i size_t blksize; Err bitreich.org 70 i Err bitreich.org 70 i read_blk(buf[1], &snap->blk_desc[i]); Err bitreich.org 70 i blksize = decomp(buf[1], buf[0], snap->blk_desc[i].size, Err bitreich.org 70 i- BLKSIZE); Err bitreich.org 70 i+ BLKSIZE_MAX); Err bitreich.org 70 i xwrite(args->fd, buf[0], blksize); Err bitreich.org 70 i } Err bitreich.org 70 i free_buf(buf[1]); Err bitreich.org 70 i@@ -440,7 +440,7 @@ check(struct snapshot *snap, void *arg) Err bitreich.org 70 i SHA256_CTX ctx; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(comp_size(BLKSIZE)); Err bitreich.org 70 i+ buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i /* Err bitreich.org 70 i * Calculate hash for each block and compare Err bitreich.org 70 i * against snapshot entry block descriptor Err bitreich.org 70 i@@ -491,7 +491,7 @@ rebuild_cache(struct snapshot *snap, void *arg) Err bitreich.org 70 i SHA256_CTX ctx; Err bitreich.org 70 i uint64_t i; Err bitreich.org 70 i Err bitreich.org 70 i- buf = alloc_buf(comp_size(BLKSIZE)); Err bitreich.org 70 i+ buf = alloc_buf(comp_size(BLKSIZE_MAX)); Err bitreich.org 70 i for (i = 0; i < snap->nr_blk_descs; i++) { Err bitreich.org 70 i struct cache_entry *ent; Err bitreich.org 70 i Err bitreich.org 70 i@@ -590,7 +590,7 @@ init(void) Err bitreich.org 70 i VER_MAJ, VER_MIN, maj, min); Err bitreich.org 70 i } else { Err bitreich.org 70 i snaphdr.flags = (VER_MAJ << 8) | VER_MIN; Err bitreich.org 70 i- snaphdr.st.min_blk_size = comp_size(BLKSIZE); Err bitreich.org 70 i+ snaphdr.st.min_blk_size = comp_size(BLKSIZE_MAX); Err bitreich.org 70 i xwrite(ifd, &snaphdr, sizeof(snaphdr)); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 .