From 4609a40b89b94cc61cc6a6a833725d6f89bf9de6 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Fri, 7 Feb 2025 15:58:42 -0800 Subject: [PATCH] dynamically adjust hratelog and ldmml based on strategy --- lib/compress/zstd_ldm.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/compress/zstd_ldm.c b/lib/compress/zstd_ldm.c index 42b38c0d0..6f866ea16 100644 --- a/lib/compress/zstd_ldm.c +++ b/lib/compress/zstd_ldm.c @@ -139,15 +139,19 @@ void ZSTD_ldm_adjustParameters(ldmParams_t* params, ZSTD_STATIC_ASSERT(LDM_BUCKET_SIZE_LOG <= ZSTD_LDM_BUCKETSIZELOG_MAX); DEBUGLOG(4, "ZSTD_ldm_adjustParameters"); if (!params->bucketSizeLog) params->bucketSizeLog = LDM_BUCKET_SIZE_LOG; - if (!params->minMatchLength) params->minMatchLength = LDM_MIN_MATCH_LENGTH; + if (params->hashRateLog == 0) { + assert(1 <= (int)cParams->strategy && (int)cParams->strategy <= 9); + /* mapping: strat1 -> rate8 ... strat9 -> rate4*/ + params->hashRateLog = 9 - ((cParams->strategy+1)/2); + } if (params->hashLog == 0) { - params->hashLog = MAX(ZSTD_HASHLOG_MIN, params->windowLog - LDM_HASH_RLOG); + params->hashLog = MAX(ZSTD_HASHLOG_MIN, params->windowLog - params->hashRateLog); assert(params->hashLog <= ZSTD_HASHLOG_MAX); } - if (params->hashRateLog == 0) { - params->hashRateLog = params->windowLog < params->hashLog - ? 0 - : params->windowLog - params->hashLog; + if (params->minMatchLength == 0) { + params->minMatchLength = (params->hashRateLog < 6) ? + LDM_MIN_MATCH_LENGTH : + LDM_MIN_MATCH_LENGTH * 2; } params->bucketSizeLog = MIN(params->bucketSizeLog, params->hashLog); } -- 2.47.2