People care more about speed when building. Later, we could also try to use file-backed memory to avoid memory pressure.
As a result, it could decrease time by 50% (0m58.255s -> 0m29.120s). Signed-off-by: Gao Xiang <[email protected]> --- lib/dedupe.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/dedupe.c b/lib/dedupe.c index 4b0edbf..19a1c8d 100644 --- a/lib/dedupe.c +++ b/lib/dedupe.c @@ -69,7 +69,6 @@ struct z_erofs_dedupe_item { struct list_head list; struct z_erofs_dedupe_item *chain; long long hash; - u8 prefix_sha256[32]; u64 prefix_xxh64; erofs_blk_t compressed_blkaddr; @@ -77,7 +76,7 @@ struct z_erofs_dedupe_item { int original_length; bool partial, raw; - u8 extra_data[]; + u8 payload[]; }; int z_erofs_dedupe_match(struct z_erofs_dedupe_ctx *ctx) @@ -101,7 +100,6 @@ int z_erofs_dedupe_match(struct z_erofs_dedupe_ctx *ctx) unsigned int extra = 0; u64 xxh64_csum; - u8 sha256[32]; if (initial) { /* initial try */ @@ -127,13 +125,12 @@ int z_erofs_dedupe_match(struct z_erofs_dedupe_ctx *ctx) if (&e->list == p) continue; - erofs_sha256(cur, window_size, sha256); - if (memcmp(sha256, e->prefix_sha256, sizeof(sha256))) + if (memcmp(cur, e->payload, window_size)) continue; extra = min_t(unsigned int, ctx->end - cur - window_size, e->original_length - window_size); - extra = erofs_memcmp2(cur + window_size, e->extra_data, extra); + extra = erofs_memcmp2(cur + window_size, e->payload + window_size, extra); if (window_size + extra <= ctx->cur - cur) continue; ctx->cur = cur; @@ -157,18 +154,16 @@ int z_erofs_dedupe_insert(struct z_erofs_inmem_extent *e, if (!window_size || e->length < window_size) return 0; - di = malloc(sizeof(*di) + e->length - window_size); + di = malloc(sizeof(*di) + e->length); if (!di) return -ENOMEM; di->original_length = e->length; - erofs_sha256(original_data, window_size, di->prefix_sha256); di->prefix_xxh64 = xxh64(original_data, window_size, 0); di->hash = erofs_rolling_hash_init(original_data, window_size, true); - memcpy(di->extra_data, original_data + window_size, - e->length - window_size); + memcpy(di->payload, original_data, e->length); di->compressed_blkaddr = e->blkaddr; di->compressed_blks = e->compressedblks; di->partial = e->partial; -- 2.39.3
