From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03EEB2BE621 for ; Tue, 10 Mar 2026 06:13:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773123227; cv=none; b=UavY3cG9aSk+8cKTaamMBwLG1iGfJKSQUlOEsgZ+s8PpwRqfB/G0XXZfiFDtklo0yDVBe7K9Bk0uLOv+ZmM+iE1c5+aWT2n8XdiSbTcJj9NdwVJ5tpL9WQoioas5UTYBbWC8XennlbnP5KpL+3VvJNJ3LVe0gwzVxJY5LKHekm8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773123227; c=relaxed/simple; bh=zLJsL7pi4v3XLz/EgEHSGOIArkQrlrmDLpLfCY3mx1w=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=hGBXktO4mrsnFfIxC5Z+mTkYy3XLvJgHuSobZ+0zhVdHWK4b7kMpX1gYyHgVhVxCGeDqsUUjgchQMbkKELjZXLLjUionMYZ3B/x8lsR8QGoSGkgY83dPmMlLtjTy7l3Yb0mPDhSXCGVsR/Gqu+i6srjjgJYPiVDv6RgXTp+AKfw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=cmKO2eVF; arc=none smtp.client-ip=209.85.214.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="cmKO2eVF" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2a871daa98fso93264505ad.1 for ; Mon, 09 Mar 2026 23:13:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773123225; x=1773728025; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=c4ji8TdbgweIE6/GO1LR8k/VYUpCh62PQy0KsUDQ9gM=; b=cmKO2eVFhNgOng03jkc5y82ZIZbs81GXKijTcmCGeqeUNiSM639GupLKX95htQF7mb x8+wACMgXzJjjX8Outdp1QdIxeKSZjtpyCl+qzy+uo+/c2dSqijTzwRZG2EUm+TzGiZF glZqx0s1KzhCDu1B5RBitRPyW+ul6XtlKgrck= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773123225; x=1773728025; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=c4ji8TdbgweIE6/GO1LR8k/VYUpCh62PQy0KsUDQ9gM=; b=TpmlRuA0y6NPHfpn7f8SdWD8zBpnYwle9DU46pe+93BLzIRzqYN5/xn4IvqG4IU+hR uxIva+38W0ilB+rf7mh1QJ9stKKklsOwBSoqPrZG3ykzIE59x8RIttQ+MmN/Ls+RYeCd Jt8ZWjtguVj2GB5YaIV6oLYgGgMJOiTKJOLIPtIQGwOBWIXo2QvSFP4LN1TUncFVvRJx fmLV5+xtgR5ISru58dfHtLa9evA8Kgto1cW4yLlQ9r3dqPbc8UMLUTb08zo4Ir3WNIrI BytB9xkoKQDX1Vy5OMbykE4qAdKHYNrRtRbeABHF6AaqDFz6BrJjmExl7/V0v46PMDfJ G02A== X-Forwarded-Encrypted: i=1; AJvYcCUey0BH4kRaV141rqqJfeQJ5BDXRjFMAu0FlvLO5WyZVX8vf9cSfPH2z5TZplKM1JsBo5ehJIimW0GEVDM=@vger.kernel.org X-Gm-Message-State: AOJu0YxQaQmK/RROU7xrSpvRYX0my5rA0m8K0qkZheDtZ5729cZjAwxz uN8wiewk10HafWmJX3+LdrVRR2OIlpBCjFKRjHZQ/cvtFurxBn/QYPclK7W/GeAQSWoejxEQNYK WNiU= X-Gm-Gg: ATEYQzxm3Jng47UyFRVOgPT2x86grln2dNt3z9IoL0v2pwEEATUE3Ws9UnQbhsohMR9 VBtMWzORmtyrCgTxQC6bfNZMK6IJWZCQUoPxFsXCmIyj12xYTkCmwmn0Qjvz78YYJsUn4Q6xbvE U86xGv4ZeRrgiAwfIokPZvivMNI4dVh1yNtvGlEWQuDVTEURi7DgzC/yRQaHUmpEZ99NtXyXgE7 9vOhrUgJzBIIhRSf4IgJWV990kVqFYNAXz3WNvi2o0GpQFw/SHuJp9zBmcaCwtgo4MBqM0gXUDd 4SIPiRsQPkn/QDOTbdYqPvkAQGfUntRme9InrW0PDBXkZZzGqpXj301NExiPrJv2o6wkGINQsSb 1GSvAScS++UE6/q9BUmWiXfuoejdg3vOswUsR2ynIKajKp66aPsJLqED91n3dvMYqJjiRa3OhY0 GMUbIV+7B2VD69m9EGEOChgKmtyYhSlUSTB6vTyQ2HtmvDcnMRp5JdDzsN/BWQTlA= X-Received: by 2002:a17:903:1a26:b0:2ae:66c9:494f with SMTP id d9443c01a7336-2ae82368445mr141368195ad.2.1773123225415; Mon, 09 Mar 2026 23:13:45 -0700 (PDT) Received: from google.com ([2a00:79e0:2031:6:5620:959c:240f:eb2a]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae840be379sm136280495ad.87.2026.03.09.23.13.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 23:13:44 -0700 (PDT) Date: Tue, 10 Mar 2026 15:13:41 +0900 From: Sergey Senozhatsky To: gao xu Cc: Sergey Senozhatsky , Minchan Kim , Jens Axboe , "linux-block@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Andrew Morton , "surenb@google.com" , zhouxiaolong Subject: Re: zram: Optimize LZ4 dictionary compression performance Message-ID: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: On (26/03/10 02:54), gao xu wrote: > +struct lz4_drv { > + /* template compression stream with dictionary */ > + LZ4_stream_t base_cstream; > + /* dictionary index of the current template */ > + u32 dict_gen; > + bool base_c_valid; > +}; > + > static void lz4_release_params(struct zcomp_params *params) > { > + kfree(params->drv_data); > + params->drv_data = NULL; > } > > static int lz4_setup_params(struct zcomp_params *params) > { > + struct lz4_drv *drv; > + > if (params->level == ZCOMP_PARAM_NOT_SET) > params->level = LZ4_ACCELERATION_DEFAULT; > > + drv = kzalloc_obj(drv, GFP_KERNEL); > + if (!drv) > + return -ENOMEM; > + > + drv->dict_gen = 0; > + drv->base_c_valid = false; > + > + params->drv_data = drv; > + > return 0; > } > > @@ -67,10 +88,32 @@ static int lz4_create(struct zcomp_params *params, struct zcomp_ctx *ctx) > return -ENOMEM; > } > > +static int lz4_build_base_cstream(struct zcomp_params *params) > +{ > + struct lz4_drv *drv = params->drv_data; > + int ret; > + > + if (!params->dict || !params->dict_sz) > + return -EINVAL; > + > + memset(&drv->base_cstream, 0, sizeof(drv->base_cstream)); > + > + ret = LZ4_loadDict(&drv->base_cstream, > + params->dict, params->dict_sz); > + if (ret != params->dict_sz) > + return -EINVAL; > + > + drv->dict_gen = params->dict_gen; > + drv->base_c_valid = true; > + > + return 0; > +} I think this simply can move to ->lz4_setup_params(), becase that function is supposed to loadDict. I guess we can use backend_zstd.c as a reference. Also probably can inherit naming scheme from zstd backend as well. > static int lz4_compress(struct zcomp_params *params, struct zcomp_ctx *ctx, > struct zcomp_req *req) > { > struct lz4_ctx *zctx = ctx->context; > + struct lz4_drv *drv = params->drv_data; > int ret; > > if (!zctx->cstrm) { > @@ -78,10 +121,16 @@ static int lz4_compress(struct zcomp_params *params, struct zcomp_ctx *ctx, > req->dst_len, params->level, > zctx->mem); > } else { > + /* rebuild base_cstream when the dictionary changes */ > + if (!drv->base_c_valid || drv->dict_gen != params->dict_gen) { > + ret = lz4_build_base_cstream(params); > + if (ret) > + return ret; > + } We should not need this, unless I'm missing something. Params should change once algorithms are setups and the device is init. [..] > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c > index bca33403f..f34f3fa43 100644 > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -1709,6 +1709,7 @@ static int comp_params_store(struct zram *zram, u32 prio, s32 level, > zram->params[prio].dict_sz = sz; > zram->params[prio].level = level; > zram->params[prio].deflate.winbits = deflate_params->winbits; > + zram->params[prio].dict_gen++; We should not need this, as far as I can see. It was a bug that we permitted params change after init. I sent a fixup patch.