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 20EAEC2BD09 for ; Mon, 24 Jun 2024 12:15:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A62BA6B008C; Mon, 24 Jun 2024 08:15:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9EAB36B03D9; Mon, 24 Jun 2024 08:15:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8641B6B03E1; Mon, 24 Jun 2024 08:15:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 655F76B008C for ; Mon, 24 Jun 2024 08:15:34 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id D8E00A2FE0 for ; Mon, 24 Jun 2024 12:15:33 +0000 (UTC) X-FDA: 82265677746.05.4D62C0A Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) by imf11.hostedemail.com (Postfix) with ESMTP id 0ECCA40028 for ; Mon, 24 Jun 2024 12:15:31 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=fUwUSefA; spf=pass (imf11.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1719231325; a=rsa-sha256; cv=none; b=eQUCuuVu86LjnmPnWQ7V18koA5c95HrOe/YUUzYz+d96ems0u7l5kOyWuPoAr+lXOpiGH0 YG3Tio4qKpOdzsgrGagmy51sPBBbdq9cGeSN2ADFdPT2HuAbFEt7o6eeDuH8hrU20YIYhT S9Hp0c44kaUwpgRMWFUhCfECG4vuR9I= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=fUwUSefA; spf=pass (imf11.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1719231325; 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=6Rn8JlgpPAk4s18V2/yagiw1mvhWTbcQX4Wl/KIshJs=; b=HRVh9FKdImD/Q90f4zN1wimMRKYh0xgH12+Fd04jNZBTT3Fo+Mzu8gr5lp9Q3qZ6h9odEP MLSo3tk9Vdi08MR1EK0XPE6FTcjytH2wPtGIYhxKWslkAv001byFQ5TAl6qxdfv5kfYBVX DFT6N+pz3tpXVhPv7YJ9w48L0s7VHN8= Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-a725d756d41so76632466b.0 for ; Mon, 24 Jun 2024 05:15:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1719231330; x=1719836130; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=6Rn8JlgpPAk4s18V2/yagiw1mvhWTbcQX4Wl/KIshJs=; b=fUwUSefANIedE8PMPv5VUH7JDXfA0Ze9l22dwLMYqxgTBVaFG/dkMF3f89MY5r+oGV 1n+Tiug3x8459RKgerisOT3yXukvFSi6u7q0JlY9T9Hww+d7GOAjN+jAGu74BINvbuhB r2YqkGX/JxkVWDIsvd5vYX+/y8dlhM1z/k7nUsujxsJEPz9nkRsaStfFW7vsJGxV/JPA StlDCCJM70GJ1kw1UxfpEEGEokw6dRDREEHOV2mafFFeCEdStKsRsmGdkBcIxPQM3/ox LeBrbEFJUsSFrQ9voGXeRkgAbbmVLFdVd0KzRXZyiVaKvgP8lQo4Nn0LBhoDEWcc0FUF bdOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719231330; x=1719836130; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6Rn8JlgpPAk4s18V2/yagiw1mvhWTbcQX4Wl/KIshJs=; b=KDs6RUFcen0BvDtJPEPi1wIGoI7ax9G6QwurZa7lXjlqn92M21Ebt5Hj0kyY5kp9cU wdcgaqeLXaATidUoW3Rlh7+8dhfSRzKMdSdkdCTnwXna4/l/b7O5hA/tlf/z8TuCDiNN lOxC1wGPK3WjayqHw3+pQYGmfwHvdiFy1eUHDgZQteDwEqfkCgUN4raErERUMRtz2nwF BlmgV7XY8ReCHnxc++jAZZHmGoZEnnzG3mRupslHH7HUhncAs8fNxwrESrqsnBVA2jdX QsUeJQCSHT7Y/cp81MO7ymY5NGLILIvGXL6VZvpX+TFq4+jsrQ6dVjs9wtdI1wmYMhvj 03xA== X-Forwarded-Encrypted: i=1; AJvYcCUVG9w7e1Zi+DkweBrVzdjf77Ati0MfPi5/QCKlCsN0cH/pZEnBUs3IxKOKdZxUQU+JUEFTGYo0mXOer+BLd0Sfdb0= X-Gm-Message-State: AOJu0Yy4FLiAYmQoOHnn1S/JSHa617B3bX1xJiKIdfELiS3WFFtHU+um 8B30zoHNbvax/9N2W3fRqMg3ZwtAYSkXckLIvTxV/TmONVA/8tiIZZhy+Fe9YaFBSGibiXXqGa4 8Duxucg4EArAvAsgTJt9Ez4wb4rGk1Dq9qec1 X-Google-Smtp-Source: AGHT+IGSKV4fU1bi706Eu3CbP9AhRzpsXlqcY5iC2z9Vo8PRO/8Eec0SObLM2788WGTPyjSrt9tF3ntG0wNdZVr/By8= X-Received: by 2002:a17:906:580a:b0:a6e:f793:fcf6 with SMTP id a640c23a62f3a-a6ffe39d9aamr399384666b.16.1719231329826; Mon, 24 Jun 2024 05:15:29 -0700 (PDT) MIME-Version: 1.0 References: <20240621-zsmalloc-lock-mm-everything-v2-0-d30e9cd2b793@linux.dev> <20240621-zsmalloc-lock-mm-everything-v2-2-d30e9cd2b793@linux.dev> In-Reply-To: <20240621-zsmalloc-lock-mm-everything-v2-2-d30e9cd2b793@linux.dev> From: Yosry Ahmed Date: Mon, 24 Jun 2024 05:14:53 -0700 Message-ID: Subject: Re: [PATCH v2 2/2] mm/zswap: use only one pool in zswap To: Chengming Zhou Cc: Minchan Kim , Sergey Senozhatsky , Andrew Morton , Johannes Weiner , Nhat Pham , Yu Zhao , Takero Funaki , Chengming Zhou , Dan Carpenter , linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: z3m5s7pdffxfh5eruj5eiohf17jk7fwj X-Rspamd-Queue-Id: 0ECCA40028 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1719231331-692962 X-HE-Meta: U2FsdGVkX19KyqPfk4QXMHKGenT7QcYdehf1GvDbGIIro2JZnhoZ4UyvDuFDfkL+pguRLyl3ClMZwyyCyAtZonun07SoiVNwYQrxU4QLSd+vCbqkYdx91FVgPtulQF4puXucfZAAcZilGpu2wQ1M8Rhy/xfJI93VH8fo9CIJWUbZScP/NEHJQ3RImV+U3L4/s3q+hGN/SHpYjvDLIkQlk09VL7efANiSAHTnftNCzRhV6VJEFP7yEvttIx3uWprP4WPbFtBH4mtlEdql+aHhKvAT2LyirjdfTAgdF9vC2qzepDa3ZKhya+GF+nySYbTn833w27kj1i05eOxQKGa2fAib/aejr3HSGaNtRk7azkIeNTb5YVioSKi4NxnEAEWYHeaIjmPGN8XAjTB2L1YNzLnvX3xi+wvw0jrVW3sDlS/XI+mr2f06U3VWzcw3omaA+rDJWv28WZQzzEYw/0KOhLTBCyVcJ0pzsfxdq04scCS3CNkJlBOyL2t3YUS7SQu1iQdteE2L6GmNIRuVzGpXPehzEJKGI60QRchYiNAA7+itvHTsbaRJGPPhhLsvpjMuIcq7LQscliGs3XkrPXSojkxdstzcQ4pW4e6ySZrpZa7h7Kcn5bRGxb6P+db4R62UbNNHHWjP2BJzkKn1QHb6bBtmv+q37KontmSe4cp9Vz6igTB3XBtCmZ8LUwp8S+RWEaxfdg8MTsD1WykrmNFnZUdVE6qlvSYUl3jQqwpGc/GiYNonqR+/p7ZYLRskoZpG32iacWWCKxXQK9B6334Fa0eofv2/1lvuAUSZo+vZ+8Elyy28mBfmjKLL24zecbKwmgUPY0nrmGuYDiBuWYsn1ZHLOCxHZ+1poR9rhOHYbeGesvrs+Mv5jqdd76YYO7B9HdthPbXnO8yZO29rcBN/KPy214XXO5+80QP7fCnxcRf57pR4mzOr98zUZ8olubNLBRg+2GcYaqa3sjWB+iN MQpKeMp0 2T0OSIfv+exid9rSpMJjSjLUg6rtd8Q8Y6aZG8UZNxEbTJBG9Su+qeYR6iej/mNoD4U3M9JIUhNClrtTV7hbk4t3CvXLqPqtQwclWYYejnyDOInA5WuwQENaQYN7WT4Cp8Z8vvUslSquxnNhksisf3/6FO/lNWuIT66qKw7vq6YiExb+/t0l3s56UWtKtze3pvhqhpiWU419DCL6fy9sjz0a4XXG8WBOFts+rwUtxmW7XcFzxA98XUyfMSDHJ7UeN/vvcAGIGO3ekbRtD4wNeoi4GJw== 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 Fri, Jun 21, 2024 at 12:15=E2=80=AFAM Chengming Zhou wrote: > > Zswap uses 32 pools to workaround the locking scalability problem in > zswap backends (mainly zsmalloc nowadays), which brings its own problems > like memory waste and more memory fragmentation. > > Testing results show that we can have near performance with only one > pool in zswap after changing zsmalloc to use per-size_class lock instead > of pool spinlock. > > Testing kernel build (make bzImage -j32) on tmpfs with memory.max=3D1GB, > and zswap shrinker enabled with 10GB swapfile on ext4. > > real user sys > 6.10.0-rc3 138.18 1241.38 1452.73 > 6.10.0-rc3-onepool 149.45 1240.45 1844.69 > 6.10.0-rc3-onepool-perclass 138.23 1242.37 1469.71 > > And do the same testing using zbud, which shows a little worse performanc= e > as expected since we don't do any locking optimization for zbud. I think > it's acceptable since zsmalloc became a lot more popular than other > backends, and we may want to support only zsmalloc in the future. > > real user sys > 6.10.0-rc3-zbud 138.23 1239.58 1430.09 > 6.10.0-rc3-onepool-zbud 139.64 1241.37 1516.59 > > Reviewed-by: Nhat Pham > Signed-off-by: Chengming Zhou > --- > mm/zswap.c | 60 +++++++++++++++++++-------------------------------------= ---- > 1 file changed, 19 insertions(+), 41 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index e25a6808c2ed..7925a3d0903e 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -122,9 +122,6 @@ static unsigned int zswap_accept_thr_percent =3D 90; = /* of max pool size */ > module_param_named(accept_threshold_percent, zswap_accept_thr_percent, > uint, 0644); > > -/* Number of zpools in zswap_pool (empirically determined for scalabilit= y) */ > -#define ZSWAP_NR_ZPOOLS 32 > - > /* Enable/disable memory pressure-based shrinker. */ > static bool zswap_shrinker_enabled =3D IS_ENABLED( > CONFIG_ZSWAP_SHRINKER_DEFAULT_ON); > @@ -160,7 +157,7 @@ struct crypto_acomp_ctx { > * needs to be verified that it's still valid in the tree. > */ > struct zswap_pool { > - struct zpool *zpools[ZSWAP_NR_ZPOOLS]; > + struct zpool *zpool; > struct crypto_acomp_ctx __percpu *acomp_ctx; > struct percpu_ref ref; > struct list_head list; > @@ -237,7 +234,7 @@ static inline struct xarray *swap_zswap_tree(swp_entr= y_t swp) > > #define zswap_pool_debug(msg, p) \ > pr_debug("%s pool %s/%s\n", msg, (p)->tfm_name, \ > - zpool_get_type((p)->zpools[0])) > + zpool_get_type((p)->zpool)) > > /********************************* > * pool functions > @@ -246,7 +243,6 @@ static void __zswap_pool_empty(struct percpu_ref *ref= ); > > static struct zswap_pool *zswap_pool_create(char *type, char *compressor= ) > { > - int i; > struct zswap_pool *pool; > char name[38]; /* 'zswap' + 32 char (max) num + \0 */ > gfp_t gfp =3D __GFP_NORETRY | __GFP_NOWARN | __GFP_KSWAPD_RECLAIM= ; > @@ -267,18 +263,14 @@ static struct zswap_pool *zswap_pool_create(char *t= ype, char *compressor) > if (!pool) > return NULL; > > - for (i =3D 0; i < ZSWAP_NR_ZPOOLS; i++) { > - /* unique name for each pool specifically required by zsm= alloc */ > - snprintf(name, 38, "zswap%x", > - atomic_inc_return(&zswap_pools_count)); > - > - pool->zpools[i] =3D zpool_create_pool(type, name, gfp); > - if (!pool->zpools[i]) { > - pr_err("%s zpool not available\n", type); > - goto error; > - } > + /* unique name for each pool specifically required by zsmalloc */ > + snprintf(name, 38, "zswap%x", atomic_inc_return(&zswap_pools_coun= t)); > + pool->zpool =3D zpool_create_pool(type, name, gfp); > + if (!pool->zpool) { > + pr_err("%s zpool not available\n", type); > + return NULL; We need to goto error here to free the pool. > } > - pr_debug("using %s zpool\n", zpool_get_type(pool->zpools[0])); > + pr_debug("using %s zpool\n", zpool_get_type(pool->zpool)); > > strscpy(pool->tfm_name, compressor, sizeof(pool->tfm_name)); > > @@ -311,8 +303,7 @@ static struct zswap_pool *zswap_pool_create(char *typ= e, char *compressor) > error: > if (pool->acomp_ctx) > free_percpu(pool->acomp_ctx); > - while (i--) > - zpool_destroy_pool(pool->zpools[i]); > + zpool_destroy_pool(pool->zpool); .. and then we will need a NULL check needed here.