From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4DA2C4332F for ; Thu, 14 Dec 2023 17:59:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 601818D00D7; Thu, 14 Dec 2023 12:59:37 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5B2028D00C7; Thu, 14 Dec 2023 12:59:37 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 47A388D00D7; Thu, 14 Dec 2023 12:59:37 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 378EA8D00C7 for ; Thu, 14 Dec 2023 12:59:37 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 0ADE9A2385 for ; Thu, 14 Dec 2023 17:59:37 +0000 (UTC) X-FDA: 81566186394.04.DAF86BB Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf02.hostedemail.com (Postfix) with ESMTP id E431B80008 for ; Thu, 14 Dec 2023 17:59:34 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Egxc0hmd; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=chrisl@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702576775; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hErs2RZyOL2Q1HUZrzTka3PcXG6tX1gVzAjYxmSG9PE=; b=pN5I/SoM7ocFqPSVc+aUrCnaGu5PMJ8WqLd2bIGvOxa/kXXTaEtbrXBt6AjbxQhqbXH36m t+0nKyTg2KLEEkSXmzxm7HxBJn2KpPW/qzkHVKlawKG1c5FF4vghj+8D3BwiCC63RRRbrH 5thtVi01HoATO3PL6Xj59mP+l/ikPjQ= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Egxc0hmd; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf02.hostedemail.com: domain of chrisl@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=chrisl@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702576775; a=rsa-sha256; cv=none; b=67xkbmE4/7NpQZeLBFjXkgTRUA1lHS6tsOcSw/wc62HpnGlI2atmUV+tga1HP1Pd8kalKI KkSOFQbgJvcRS6eG0DgxReYXSrc1uXwg/Ej3zgQ0Moowg4/so8vhS1qgscOVoknPuaygNE VBP01VhScjufQVchc5pvNDIVlj138nM= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id 08145B8243C for ; Thu, 14 Dec 2023 17:59:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C3E4C433C8 for ; Thu, 14 Dec 2023 17:59:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702576772; bh=uqBnNJDLNbYm6pyh21nyjtNJssu0wb0DQLI/0nBbEYM=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=Egxc0hmdtjS1VLxrw5xpoHYoVRRHFSWiVpf95NRcSlM82ZnZa98Puor5DJi2SrD8b HWW6Qg1TEqF3OS1gRiwQTqhDe/Vn+OSRTpc9gCvzwefcg+ZPDE4wMqDYsGFUiS9Lf2 fGVfaM7KUQq0jwGIPw0w3NrvWh88p1w1pU2wxCP7HhBqGv9adNmoTEjPPJKHXeRSQC Dk2D0KjHJ+QZnYU2BYr6eCm49pGMlMWyVATqyd0vHboVKH09UWsDQ2KqrzIpodKJAz wEtLkZVEjppXDqRKwRIxKTcM1amXHDF5TOkbS4o8dzQsyap1hK/pl/k/nADfm855z7 Zobfpd1+pNmjQ== Received: by mail-pj1-f47.google.com with SMTP id 98e67ed59e1d1-28af0b85f58so1132106a91.2 for ; Thu, 14 Dec 2023 09:59:32 -0800 (PST) X-Gm-Message-State: AOJu0YwuDqm/0G+J1P3/drZ55+nm5FvakkYN1MmaXZDIQRFWSnn3vFr9 vIBraim42Os+4ppXyknYgUZbsGrfxy0SnHj+a5Vu4Q== X-Google-Smtp-Source: AGHT+IFNWxaSic8oiERsgiihMfNvZhB76oUvs/IXNgurMwl22WlqJP8LNReHsIoSnBTAheGNCnSNkrgbgc2C15Faw6M= X-Received: by 2002:a17:90b:1d83:b0:28b:f9b:d6db with SMTP id pf3-20020a17090b1d8300b0028b0f9bd6dbmr483554pjb.8.1702576771751; Thu, 14 Dec 2023 09:59:31 -0800 (PST) MIME-Version: 1.0 References: <20231213-zswap-dstmem-v1-0-896763369d04@bytedance.com> <20231213-zswap-dstmem-v1-1-896763369d04@bytedance.com> In-Reply-To: <20231213-zswap-dstmem-v1-1-896763369d04@bytedance.com> From: Chris Li Date: Thu, 14 Dec 2023 09:59:20 -0800 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 1/5] mm/zswap: reuse dstmem when decompress To: Chengming Zhou Cc: Andrew Morton , Nhat Pham , Johannes Weiner , Seth Jennings , Dan Streetman , Vitaly Wool , Yosry Ahmed , linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: otxgkbm6ykqc35fgsss86utbmbzxw6ix X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: E431B80008 X-HE-Tag: 1702576774-715990 X-HE-Meta: U2FsdGVkX19naGH7i141fXvvH5NMOBu2ZPzUXvSr8Rzx+0+oVHnWa1Vu3NoQaRL+CGQLzbIIcLXuvNhLbCtUYVw6OUlUr1fTdWDZiDXi95wdmagx2zWofN5m4/AZUUL2ssrXImA+3NbV+W9kHfZVVzDG6ME1G3uowxfoUfc0bIEG7njnH8kT6yvHGxds40k8OipfssPebunIcRklgij+DTaIvdQ/QLrO8D1iDqm7+csLP1iIAbs9XDGnOT/t5uWoDNR6CCI7EQiH6EN8qvk/Sj7ulG2UDYYedLcPnUYW7eqE63bx0Pfvijrebmm+NUyKHXves6sD6GSsiQ/NBdkJ6Q/vgShXlZ+if+XV8lOAKheB6pW4dQ4+atmWZPEjyuRXRfzngrf+32zmEGam8Sal4iM+IWXn4R55JvzYkmuSahPoia7r0CRWw9jlHP7us7n/ZbCPIahEYalij/7AWS/rDWWtcSbP0OqNdNY4N3xjy8ZSCzMcvQjMRY5uE0IIq292nNMf3z8Zim85ukCvRIPiV4afFPc8KakjVBeSNOWdGhq7mEJsH5YW2708Ow3KPR/c1vEqEnQZ+S+FEO7pjvCoMR6h6s7ilnUH45a6dS0O4qYJkkcxh+HSr7J5aMyRmPqUE2bxgd2my/3rmbpi/NXVCK/NhAoClHX5W7Lg97SXbeym/8Z1OaJZeGSwmOhbjUC1R0upBHcd+1xRlO5PvMMwj2ubxu8qG9Tq9be67h+VBgowcVXpUq52r0jVdJZb10yPuZW+IjoUT9vpKI2eKAqgqXSkb5XDzgnnB5LyIda/YJVT9va7GWcNPcgGEcZzqgHLVwzYT/laDL4yx2cTR4KzoFoAbAdZOfx5YJbfa9V5IHJS2gKN91ATojQRFxBH7yVsouIvatfxxg0EHNRJsLJqqkExNF1FAY58mi5y5xnDC8eTZo0CwoaWPmmTfEStz453ft+oxOPDpH4PrDEhIOG b7yirz7C TCvKn1K/mOXLimX5HGy5mWNP13qgQbfP+4BYVIEi1BigU6xV3YSyJf4y+iE3srLhcR7S3GCDhrXtdTLxdp1UOiv/zThRU+nvg4EemrMl4mzGLHStVXF1wkCzx5cYdiTySutCJKZV1PtcYu6ghfHIBPTCPZkQjXrAXrSDFhtehYnME+qUp9lelVBHbTST2JhbwWXbXJ74Sf25yCc3BIWWGmz8W1SkoDZ94oBArq258/1xE/EF0yZYzGnNmWdT+Gs/stEmTTudkY6I00lPkO6Oy8vs2mkNckzIxfKf4u4EyiDFADIk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Dec 12, 2023 at 8:18=E2=80=AFPM Chengming Zhou wrote: > > In the !zpool_can_sleep_mapped() case such as zsmalloc, we need to first > copy the entry->handle memory to a temporary memory, which is allocated > using kmalloc. > > Obviously we can reuse the per-compressor dstmem to avoid allocating > every time, since it's percpu-compressor and protected in mutex. You are trading more memory for faster speed. Per-cpu data structure does not come free. It is expensive in terms of memory on a big server with a lot of CPU. Think more than a few hundred CPU. On the big servers, we might want to disable this optimization to save a few MB RAM, depending on the gain of this optimization. Do we have any benchmark suggesting how much CPU overhead or latency this per-CPU page buys us, compared to using kmalloc? Chris > > Signed-off-by: Chengming Zhou > Reviewed-by: Nhat Pham > --- > mm/zswap.c | 29 +++++++++-------------------- > 1 file changed, 9 insertions(+), 20 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 7ee54a3d8281..edb8b45ed5a1 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -1772,9 +1772,9 @@ bool zswap_load(struct folio *folio) > struct zswap_entry *entry; > struct scatterlist input, output; > struct crypto_acomp_ctx *acomp_ctx; > - u8 *src, *dst, *tmp; > + unsigned int dlen =3D PAGE_SIZE; > + u8 *src, *dst; > struct zpool *zpool; > - unsigned int dlen; > bool ret; > > VM_WARN_ON_ONCE(!folio_test_locked(folio)); > @@ -1796,27 +1796,18 @@ bool zswap_load(struct folio *folio) > goto stats; > } > > - zpool =3D zswap_find_zpool(entry); > - if (!zpool_can_sleep_mapped(zpool)) { > - tmp =3D kmalloc(entry->length, GFP_KERNEL); > - if (!tmp) { > - ret =3D false; > - goto freeentry; > - } > - } > - > /* decompress */ > - dlen =3D PAGE_SIZE; > - src =3D zpool_map_handle(zpool, entry->handle, ZPOOL_MM_RO); > + acomp_ctx =3D raw_cpu_ptr(entry->pool->acomp_ctx); > + mutex_lock(acomp_ctx->mutex); > > + zpool =3D zswap_find_zpool(entry); > + src =3D zpool_map_handle(zpool, entry->handle, ZPOOL_MM_RO); > if (!zpool_can_sleep_mapped(zpool)) { > - memcpy(tmp, src, entry->length); > - src =3D tmp; > + memcpy(acomp_ctx->dstmem, src, entry->length); > + src =3D acomp_ctx->dstmem; > zpool_unmap_handle(zpool, entry->handle); > } > > - acomp_ctx =3D raw_cpu_ptr(entry->pool->acomp_ctx); > - mutex_lock(acomp_ctx->mutex); > sg_init_one(&input, src, entry->length); > sg_init_table(&output, 1); > sg_set_page(&output, page, PAGE_SIZE, 0); > @@ -1827,15 +1818,13 @@ bool zswap_load(struct folio *folio) > > if (zpool_can_sleep_mapped(zpool)) > zpool_unmap_handle(zpool, entry->handle); > - else > - kfree(tmp); > > ret =3D true; > stats: > count_vm_event(ZSWPIN); > if (entry->objcg) > count_objcg_event(entry->objcg, ZSWPIN); > -freeentry: > + > spin_lock(&tree->lock); > if (ret && zswap_exclusive_loads_enabled) { > zswap_invalidate_entry(tree, entry); > > -- > b4 0.10.1