Add some stats - dedup - deduplicating backup program HTML git clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ DIR Log DIR Files DIR Refs DIR Tags DIR README DIR LICENSE --- DIR commit 83352fb988f55b3ea3fea53b984b8233f817d08e DIR parent f2671211f99e5dba4d6e3f26cace0984c4826557 HTML Author: sin <sin@2f30.org> Date: Mon, 18 Feb 2019 13:10:35 +0000 Add some stats Diffstat: M dedup.c | 37 ++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) --- DIR diff --git a/dedup.c b/dedup.c @@ -30,11 +30,19 @@ enum { WALK_STOP }; +struct stats { + uint64_t total_bytes; + uint64_t actual_bytes; + uint64_t cache_hits; + uint64_t cache_misses; +}; + /* index file header */ struct enthdr { uint64_t flags; uint64_t nents; uint64_t store_size; + struct stats st; }; /* block descriptor */ @@ -408,6 +416,8 @@ dedup(int fd, char *msg) uint8_t *inp = buf[0]; /* input buf */ uint8_t *outp = buf[1]; /* compressed buf */ + enthdr.st.total_bytes += n; + /* Split input buffer in chunks */ while (n > 0) { uint8_t md[MDSIZE]; @@ -417,6 +427,8 @@ dedup(int fd, char *msg) blksize = chunk_blk(inp, n); csize = comp(inp, outp, blksize, comp_size(BLKSIZE)); + enthdr.st.actual_bytes += csize; + memcpy(bdescr.md, md, sizeof(bdescr)); bdescr.offset = enthdr.store_size; bdescr.size = csize; @@ -441,8 +453,11 @@ dedup(int fd, char *msg) cent = alloc_cent(); cent->bdescr = bdescr; add_cent(cent); + + enthdr.st.cache_misses++; } else { ent->bdescr[ent->nblks++] = bdescr; + enthdr.st.cache_hits++; } inp += blksize; @@ -655,9 +670,25 @@ init(void) err(1, "fstat %s", INDEXF); if (sb.st_size != 0) xread(ifd, &enthdr, sizeof(enthdr)); - if (verbose) - fprintf(stderr, "store size: %llu bytes\n", - (unsigned long long)enthdr.store_size); + if (verbose) { + float ratio; + + fprintf(stderr, "total bytes: %llu bytes\n", + (unsigned long long)enthdr.st.total_bytes); + fprintf(stderr, "actual bytes: %llu bytes\n", + (unsigned long long)enthdr.st.actual_bytes); + + if (enthdr.st.total_bytes) { + ratio = enthdr.st.actual_bytes * 100; + ratio /= enthdr.st.total_bytes; + fprintf(stderr, "dedup ratio: %f\n", ratio); + } + + fprintf(stderr, "cache hits: %llu\n", + (unsigned long long)enthdr.st.cache_hits); + fprintf(stderr, "cache misses: %llu\n", + (unsigned long long)enthdr.st.cache_misses); + } if (cache_nents() != 0) init_cache();