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 C5776D66BAF for ; Thu, 28 Nov 2024 07:00:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B185D6B0083; Thu, 28 Nov 2024 02:00:49 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AA14F6B0085; Thu, 28 Nov 2024 02:00:49 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 941D06B0088; Thu, 28 Nov 2024 02:00:49 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 6CC706B0083 for ; Thu, 28 Nov 2024 02:00:49 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C9DF2AFAE3 for ; Thu, 28 Nov 2024 07:00:48 +0000 (UTC) X-FDA: 82834605966.21.C3D6DD3 Received: from out-187.mta1.migadu.com (out-187.mta1.migadu.com [95.215.58.187]) by imf25.hostedemail.com (Postfix) with ESMTP id 00323A0011 for ; Thu, 28 Nov 2024 07:00:41 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=FBEJCoKe; spf=pass (imf25.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.187 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1732777244; 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=Vc2qIi2ocm1k6X4UAMIiWJqBmJVTnENQ+z8246d3WSQ=; b=5zGKgAK/5jHx+u42YboiGuHzYMjKzb8AbxoeUDrDHMoKAX7gvJj3ODpcdphEJQqWQ5w/Hk cdjHwPkfQFOW4Qe1lqrEpCgtipGRJbsYwhdEUF1lBHSsuMQgDdhgrFWQeLUbZypSOHs1Of s34ig1SZglCUPXRFwlt2D+8Sn7x66cM= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=FBEJCoKe; spf=pass (imf25.hostedemail.com: domain of chengming.zhou@linux.dev designates 95.215.58.187 as permitted sender) smtp.mailfrom=chengming.zhou@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1732777244; a=rsa-sha256; cv=none; b=pz7egTXF9fTbNECxiyuraadqy2AcErelqWba3ZShcbdwDC1IbeSdB4LMDuH5pRHkS/5c5Y zR4O/1wZkUfoHOlpFvUMlj0SZmGmZ2i4617wyYnO0VfMA96dsDkxm2tQsM7uBWehdEuoq2 1LLaz3ME+KkNx6yVqSRTip9wonH9Lvw= Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1732777244; h=from:from: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; bh=Vc2qIi2ocm1k6X4UAMIiWJqBmJVTnENQ+z8246d3WSQ=; b=FBEJCoKeNBMioFawWTiB/dQdiDsxLKD2w48TOsbRVzR3gnI6n2sUWYwcnEiuk9dRiVI1lJ cGyLWt7w3HFmEH8c/Z1v9vOoYhD+uhp1yH7a1z6p5Hh2RXEX51PnOj64Q/kahfJhHtXqGu VigfYwcD5WssfN4qVcr0IRwS/uPfw9w= Date: Thu, 28 Nov 2024 15:00:33 +0800 MIME-Version: 1.0 Subject: Re: [PATCH v1 2/2] mm: zswap: zswap_store_pages() simplifications for batching. To: Kanchana P Sridhar , linux-kernel@vger.kernel.org, linux-mm@kvack.org, hannes@cmpxchg.org, yosryahmed@google.com, nphamcs@gmail.com, usamaarif642@gmail.com, ryan.roberts@arm.com, 21cnbao@gmail.com, akpm@linux-foundation.org Cc: wajdi.k.feghali@intel.com, vinodh.gopal@intel.com References: <20241127225324.6770-1-kanchana.p.sridhar@intel.com> <20241127225324.6770-3-kanchana.p.sridhar@intel.com> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Chengming Zhou In-Reply-To: <20241127225324.6770-3-kanchana.p.sridhar@intel.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 00323A0011 X-Stat-Signature: ks3wf57r81dffkknoyow7s1xxuzhth4t X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1732777241-907867 X-HE-Meta: U2FsdGVkX1//nkzUGBkGDMQR+99YJnhPp/Hf+6WCqZ5iWYVvI6TlS7TF0Sw8+vYpcEmHCPmBCX5aOiZtJryL2N8I4N7ubQiXvF9X2Aermc05T06w6KmaT6/V/vdWsT11MWcmvAgu5SlieNlxxcbmYwHk52QpCsjQ/r+3ibawBxsCeTzGIKod8XHubSc81//WfQK6N2HEuXGNqPryT9X+ZRQxfUhNO8eAKGGJNicODeMfIWlEAs5IXKb/Zy7F4hRkU4WK8kG6vGQlXDug5aOCboeKhzgQBXO6G+xDxqJW48Y84xO/zaKUbAoI4lcMYwmD85CYuvk3uH2E7O+D5XK4OPytSNev7D2qxu0/0CqBOJH06FBZKaPZP2UpJ2QBE1tz3lIx63TZD3tkFI2w0IyHePNnjNAbwtKmtCtBrq2ArjSWFgsxqVG3nTfVHRcFik0ifZ1zp/AKM33EPa9gyhV50lQcb7Vh5mMzwLZkn98aHgFaaDPTstz7NIkxuJEMbpffG8sbyqiwokFVFynIaBsf+6nnusU96wKDYIbazBzLXvVk7I6yOrJonIqAfFy6PDIx0dgpgcKQdyBtS7cpD7aBkzTPKIDENpxB9TzyT5OgDZR1EitJFvBl4IVQj6EveJztx5zRqyatvBEIwveZnlOUzRq77BJm5rzlzIr9k8qXy6XIYepMu+nGnoMz88Waw1OfcoAWE1DEOnAhPA1/Uek8iA09mQxAYQ/oU9ucWFzwtvxHrcTOZzzQSmD42fzQp+hDQMv7zlZy7w94Y5KE+FrgUgakp33N2o2rumz5SYOgSpvt4mbmPwDe5UofZY0GC7f4jNFG9mxdkxrzgvCn/yNCkrVyMvdrW1Z6mrZv6625U8OqEcdjXvjNJPpkTDGuko34sUWG8r7/y19KzlWR7zg4zQWq4SQSxTmYdXMLkw1O2H1r4nRotw24eDX2Rls38LoDXkYmBo28bCw1kSK7rql 2HvBzgIQ ee8lnyJ67fHbJvHo3+LeFn41J1FNU9tIFuZYPjJPWXHDLg+2IBZ8xy6rps8D28Gam/PMmm8ABBcxqtBilV3yGh+prVgip4b3hXFITE0VrBxGcZp1eX4h7yO+Ft12nfpgFmGUV7ullYciZUuqMLcZ8L49l+2BSMzqmH9A2N6dE3HBIXW60JVfP+RpuGeT8zxkJPVZOptC/t2DE9HCPY0RQlhe3mfZ9PsXfy7rc+V2kyvD5+6Jn4hpbGmGeTw== 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 2024/11/28 06:53, Kanchana P Sridhar wrote: > In order to set up zswap_store_pages() to enable a clean batching > implementation in [1], this patch implements the following changes: > > 1) Addition of zswap_alloc_entries() which will allocate zswap entries for > all pages in the specified range for the folio, upfront. If this fails, > we return an error status to zswap_store(). > > 2) Addition of zswap_compress_pages() that calls zswap_compress() for each > page, and returns false if any zswap_compress() fails, so > zswap_store_page() can cleanup resources allocated and return an error > status to zswap_store(). > > 3) A "store_pages_failed" label that is a catch-all for all failure points > in zswap_store_pages(). This facilitates cleaner error handling within > zswap_store_pages(), which will become important for IAA compress > batching in [1]. > > [1]: https://patchwork.kernel.org/project/linux-mm/list/?series=911935 > > Signed-off-by: Kanchana P Sridhar > --- > mm/zswap.c | 93 +++++++++++++++++++++++++++++++++++++++++------------- > 1 file changed, 71 insertions(+), 22 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index b09d1023e775..db80c66e2205 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -1409,9 +1409,56 @@ static void shrink_worker(struct work_struct *w) > * main API > **********************************/ > > +static bool zswap_compress_pages(struct page *pages[], > + struct zswap_entry *entries[], > + u8 nr_pages, > + struct zswap_pool *pool) > +{ > + u8 i; > + > + for (i = 0; i < nr_pages; ++i) { > + if (!zswap_compress(pages[i], entries[i], pool)) > + return false; > + } > + > + return true; > +} How about introducing a `zswap_compress_folio()` interface which can be used by `zswap_store()`? ``` zswap_store() nr_pages = folio_nr_pages(folio) entries = zswap_alloc_entries(nr_pages) ret = zswap_compress_folio(folio, entries, pool) // store entries into xarray and LRU list ``` And this version `zswap_compress_folio()` is very simple for now: ``` zswap_compress_folio() nr_pages = folio_nr_pages(folio) for (index = 0; index < nr_pages; ++index) { struct page *page = folio_page(folio, index); if (!zswap_compress(page, &entries[index], pool)) return false; } return true; ``` This can be easily extended to support your "batched" version. Then the old `zswap_store_page()` could be removed. The good point is simplicity, that we don't need to slice folio into multiple batches, then repeat the common operations for each batch, like preparing entries, storing into xarray and LRU list... Thanks.