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 91912C35274 for ; Mon, 18 Dec 2023 09:25:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 209736B0071; Mon, 18 Dec 2023 04:25:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1B9696B0087; Mon, 18 Dec 2023 04:25:03 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0B2E16B0089; Mon, 18 Dec 2023 04:25:03 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id F0B8B6B0071 for ; Mon, 18 Dec 2023 04:25:02 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id B73821C0F89 for ; Mon, 18 Dec 2023 09:25:02 +0000 (UTC) X-FDA: 81579404844.10.CD41418 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by imf15.hostedemail.com (Postfix) with ESMTP id EBC5AA0008 for ; Mon, 18 Dec 2023 09:24:59 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3WRKgh7J; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf15.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.54 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702891500; 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=NLu+cBh6WIZkpMvvSxJ1FksEywwC35seFJURn3v2r5A=; b=0Bp3tL4nTPKjnfpxXwf5ssoPL6aV5OPOUHnSOifBGCFJCStfPvPffeFkoeMlruZIJAThil TckGrlZ5Ry0vc3BAa3/E/Oy+Lnslt4xptEJL8wfTKc8QzHGHUsx3ST0fet/V4zJSzt7kUl RxXwxSWE0M38txn9RdvA1R7XRsAmrBA= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=3WRKgh7J; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf15.hostedemail.com: domain of yosryahmed@google.com designates 209.85.218.54 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702891500; a=rsa-sha256; cv=none; b=SX1WhBXXX6B+05bjHv/xSzgLiQXxn4fusujPDpiZ+z5BmgQ0wflBs1VAU+2+PiQw4yVvGJ mpwr4dDcu7ItDfPvSGEvOqz0YVPK7BjgqIpL4Ld1wDSunLkpW4hWRceG82pd+H1OFQorHc Hz6RYz7yxfuDTyAoo26P2u4w3TjVpCY= Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-9fa45e75ed9so310605266b.1 for ; Mon, 18 Dec 2023 01:24:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1702891498; x=1703496298; 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=NLu+cBh6WIZkpMvvSxJ1FksEywwC35seFJURn3v2r5A=; b=3WRKgh7J0o3KR5GaAfuWn8xUkpPxhOOwpojGpOLWn/GiI7ADbC6oMMa1tIrka1N63t iJilH8dZCQeP42bYe8hyUb6rlQahpoEZBaWuaBLKkeFSx5U1g0rAPXnOLEApsU3JsTa7 LlvCY779lvxWYk+/ohX6cbPM7aATqc+MBGZo9YhjU8DDX7rIHEGCBPPtsYq5W3Qwi0vM 9biur1/W22ksKZkZuw+nxTLNYq4miV9ZYt6P05ruBOup/sI7hxlHp63QK5dYO3q4BeZ6 E+Nmzxvd/wOIJ7hQ6I6T9d+IMhrCd09wJHGKGA9/EuQBLJfYDIoOkZASerenOOADInCX 1hug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702891498; x=1703496298; 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=NLu+cBh6WIZkpMvvSxJ1FksEywwC35seFJURn3v2r5A=; b=nuozHLlMiLkAdBOSGeqNHaWn7ouXlGgC2GxiL5GyL1PLR7jpXVJgXcJQfAcqAfb6Hw WO6RC2S4rZU8jLmoe28MMmfWL7RsA7MyU/rNwYUncloB9/oLd1QoeGiTwqsDWdId5tpU tCFFbfHcS8ZQEp/OTt2Yi5U9XOjARZbf4OEM8qMPsb2dkeFthoxT5Yk6E5JR7xx/XMQL CEkggQ/G67/+yPBie73oBYnTLQ/P9xXAH+Lb6iStKcxQB9Q59xGh75sImpQzHH5pG3wK ITz7UYH+qU0p/LGWqtSZfn/ntjvfNcaOVbNdDo/SFfnMXisO+WBt7965LIK85JPbtKxK AAOQ== X-Gm-Message-State: AOJu0YxYD6zggMfUiKcKJx1a1so/nv7hrzK5AQMI0g5UlH++lmzh+SeX gI8VdiDnaSVNCHcSmGBlP2yuEC9tEx+TaBTMpaeRkw== X-Google-Smtp-Source: AGHT+IHCM+JEa3i7KdpJGIOdVJyelePou8FFaiQuBTEratIvDcGaSX2lKFYTit2fUBjLd2A21Q3pEgRecTFj8EqyTN4= X-Received: by 2002:a17:906:42:b0:a23:195c:8aa7 with SMTP id 2-20020a170906004200b00a23195c8aa7mr2422048ejg.15.1702891498140; Mon, 18 Dec 2023 01:24:58 -0800 (PST) MIME-Version: 1.0 References: <20231213-zswap-dstmem-v2-0-daa5d9ae41a7@bytedance.com> <20231213-zswap-dstmem-v2-2-daa5d9ae41a7@bytedance.com> In-Reply-To: <20231213-zswap-dstmem-v2-2-daa5d9ae41a7@bytedance.com> From: Yosry Ahmed Date: Mon, 18 Dec 2023 01:24:20 -0800 Message-ID: Subject: Re: [PATCH v2 2/6] mm/zswap: reuse dstmem when decompress To: Chengming Zhou Cc: Seth Jennings , Dan Streetman , Chris Li , Nhat Pham , Vitaly Wool , Andrew Morton , Johannes Weiner , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Chris Li Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: EBC5AA0008 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: efyykqchumxdowtiw1ucy5iheq1ac3my X-HE-Tag: 1702891499-981817 X-HE-Meta: U2FsdGVkX1/DBM/UA8HK3v5ociRcI6X+G2zGAPpFbWOItK2tFIq6E3xSmSSdHYHR2mA8d6BTg7KjZ/gmwHimLXPf4W55db6nrY/CIhRZX2ZUUTiAyarS1usHi4+dY7jnlMaySiAhSQwCa2n44WMbKfyu965zEoiuEnyH8Wq+qQ1b8xNt87a8HCAo8MKxU0THfwnapCb04P0AGRqHG9a3ZlB7nwsMOE1RvLoyIzYkLO5goOCAqiDEakvtrwn5LTGDC646VSthi+Z4FThR41VRTMPxlvDHAp7LBN9gratb2rPuJ3c7kzqh/NzRv26Vfw0o55B2joXsh6C4e70jWlJZnVRaLFPCXG0yNSuDrxtUnkopTyiFDNwFYnyz9irZn33lVm5ae1i3nBDgXMXWqVPwfDaijCBywLk28cU3dmNmcYx9eqGX1g8DQ1c3NCQ3KHRz6jEN9twPORaGt7nRYM3ELCEaa0N7N/CNu5WEzSGRdqImz6Tg4AY2/B9zBoZA+kzSIdyeVXIWaYjFvnwP+K6kmMH1hqk+DULpMeaO4dyzv/NYbrRAwA+ExM5qGeHT0J9GS1QgCQlAwxoped0jRW6eMbRHtIxFe/lIZxwHN+kJbEhyuBIYSv51bNBgXYdh3PywR3Sr9d0ZZUgdaVxrmrWqpQd4O0XK45xqhxio+s1v8jotjejsWZbNz+HRkCQlMLo+nZKjaws6aBS1ChxQxKMfidLGK6Cm4AW7f4VgtabGINy5YdZAj06ukZSm9qQGUbb2N3EOZkpXqGbRdget0IvFGk7nLS3cndrGlsLr+MvhZ//dAVs56QdGcQUuaz62UPv/tOvayMNieT7w6LrGX4sYi7U0lPaAp5XUWAbLEWRa+vjIGC6LOdahFxNaLwqjA/MTQVq6d6s/oB1dpf0WM6Q+pAq3jP26CM8CA7Uj/uXvEP6ty1ksTxNuJrkWIulQ2hBFCcw5hnZCmtDbEBVd8ig p1QPQLq+ wRK6h/7mllZ2JMBdPNJ6UnsF9fuHhcM517RhQTE0Hxb78vDWtVJBwoB75oPbdo6xB7KKCxToLewpcOf6PtHDo6/z+tkLdHb436cyIhCWEoaq3bVVfmWMSb5jyG4gIQ4pf1g2LBfIzHOqZO2f1NawaegGduiMlSxeV0jeeBIOrT1rJ5yX5Plazef6x8CXaFZUn2lkpySrIsVpFJhGxAD+4nX6AriSdeXCN0L0LubYZWFGxl3mQ0f5HUaiVHmsBlyFaKNqJFg6D8Hp0snNTEH2fv8xSLt8u9BY+9XZ4GfctXLB+a0zUM9KuUZV3Qnj0obimP7k1dYXPn1Blcg4A6kFOrULIBc9IxdurbgWnk4kz6QyiKTm9B/dEeC1vv8CtYadeJSIu5nITZcKruyA= 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 Mon, Dec 18, 2023 at 12:22=E2=80=AFAM 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 percpu mutex. > > Reviewed-by: Nhat Pham > Acked-by: Chris Li > Signed-off-by: Chengming Zhou Reviewed-by: Yosry Ahmed > --- > mm/zswap.c | 44 ++++++++++++-------------------------------- > 1 file changed, 12 insertions(+), 32 deletions(-) > > diff --git a/mm/zswap.c b/mm/zswap.c > index 976f278aa507..6b872744e962 100644 > --- a/mm/zswap.c > +++ b/mm/zswap.c > @@ -1417,19 +1417,13 @@ static int zswap_writeback_entry(struct zswap_ent= ry *entry, > struct crypto_acomp_ctx *acomp_ctx; > struct zpool *pool =3D zswap_find_zpool(entry); > bool page_was_allocated; > - u8 *src, *tmp =3D NULL; > + u8 *src; > unsigned int dlen; > int ret; > struct writeback_control wbc =3D { > .sync_mode =3D WB_SYNC_NONE, > }; > > - if (!zpool_can_sleep_mapped(pool)) { > - tmp =3D kmalloc(PAGE_SIZE, GFP_KERNEL); > - if (!tmp) > - return -ENOMEM; > - } > - > /* try to allocate swap cache page */ > mpol =3D get_task_policy(current); > page =3D __read_swap_cache_async(swpentry, GFP_KERNEL, mpol, > @@ -1465,15 +1459,15 @@ static int zswap_writeback_entry(struct zswap_ent= ry *entry, > /* decompress */ > acomp_ctx =3D raw_cpu_ptr(entry->pool->acomp_ctx); > dlen =3D PAGE_SIZE; > + mutex_lock(acomp_ctx->mutex); > > src =3D zpool_map_handle(pool, entry->handle, ZPOOL_MM_RO); > if (!zpool_can_sleep_mapped(pool)) { > - memcpy(tmp, src, entry->length); > - src =3D tmp; > + memcpy(acomp_ctx->dstmem, src, entry->length); > + src =3D acomp_ctx->dstmem; > zpool_unmap_handle(pool, entry->handle); > } > > - 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); > @@ -1482,9 +1476,7 @@ static int zswap_writeback_entry(struct zswap_entry= *entry, > dlen =3D acomp_ctx->req->dlen; > mutex_unlock(acomp_ctx->mutex); > > - if (!zpool_can_sleep_mapped(pool)) > - kfree(tmp); > - else > + if (zpool_can_sleep_mapped(pool)) > zpool_unmap_handle(pool, entry->handle); > > BUG_ON(ret); > @@ -1508,9 +1500,6 @@ static int zswap_writeback_entry(struct zswap_entry= *entry, > return ret; > > fail: > - if (!zpool_can_sleep_mapped(pool)) > - kfree(tmp); > - > /* > * If we get here because the page is already in swapcache, a > * load may be happening concurrently. It is safe and okay to > @@ -1771,7 +1760,7 @@ bool zswap_load(struct folio *folio) > struct zswap_entry *entry; > struct scatterlist input, output; > struct crypto_acomp_ctx *acomp_ctx; > - u8 *src, *dst, *tmp; > + u8 *src, *dst; > struct zpool *zpool; > unsigned int dlen; > bool ret; > @@ -1796,26 +1785,19 @@ bool zswap_load(struct folio *folio) > } > > 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); > > + 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); > @@ -1826,15 +1808,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