From patchwork Tue Feb 20 02:55:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Barry Song <21cnbao@gmail.com> X-Patchwork-Id: 13563286 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 52F6FC48BF8 for ; Tue, 20 Feb 2024 02:56:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E1F386B0088; Mon, 19 Feb 2024 21:56:21 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DCFEC6B0089; Mon, 19 Feb 2024 21:56:21 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C98046B008A; Mon, 19 Feb 2024 21:56:21 -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 B936C6B0088 for ; Mon, 19 Feb 2024 21:56:21 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 916D81A0501 for ; Tue, 20 Feb 2024 02:56:21 +0000 (UTC) X-FDA: 81810668562.10.21202F3 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by imf16.hostedemail.com (Postfix) with ESMTP id B4131180013 for ; Tue, 20 Feb 2024 02:56:19 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=L50POOx5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708397779; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=9x09aF372n2E4KjAq0WuthNT6iC+2DOlm894AWq4Fis=; b=TwDTyiZPjgF7pZ4Td9P2QahIUV8B0FuPALCUqVwl+2s6QaKWoBGAMfjE/9kfVl7TPUuxB2 Y0WNtE7p6bV2lfs2hxLQiyP1UQ1H5O4TQSir9VwLX0d+jzgGqtnkKAeOh6w2ANGUClcxfF h3Z6AkRNCFUqgu7cKWlgS9zGN96yyx8= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=L50POOx5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.216.41 as permitted sender) smtp.mailfrom=21cnbao@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708397779; a=rsa-sha256; cv=none; b=AINqteQGGi2ZG7EaY1iTm24UoLyfQ5tAwXLXeQtHx9e/IV+tP5rmj9EcoKjx0TbFMTEwRN AQvQyBTesqBmBPp2eAry6YXEi8Ul51qgvTPtgwdnZV/HDjljfg0lG7t9qoFiKsvWhGmXU2 inm5vyff5RtKsRea88ZX57kAyvWYxhA= Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-2995185dbbbso2471976a91.3 for ; Mon, 19 Feb 2024 18:56:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708397778; x=1709002578; darn=kvack.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9x09aF372n2E4KjAq0WuthNT6iC+2DOlm894AWq4Fis=; b=L50POOx5QNFKS8c5OgNirCX41JAp2CwfzHCF55cp5biIKr+Wh2vfVEIehVCSQKE2r9 MyFbgnJ3rPbhlAVp5YIvHxGq00BlSCTsLrrbFOLJkidSfjujYVf9m+X2mOxOKewmg4qk /6cULJ3VthIm4fAi8a2lWUJpCUImRIKhpGaCHvR+bRWG7XGdNcggO2sKQ7aeBHnvKa1z TH+AtIS23bMtRIeMsZQRE/+FWumMFfjsx1Rkk3jqcpgsx1c76EbcSIrPMrtnVNg0o6gi ClRGtylrykZ5VwNsfkan5xr75nHGIAxwPsSvm9ia4ZzznCL9mnOhHfHUX5h6QEiH3PtN s4xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708397778; x=1709002578; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9x09aF372n2E4KjAq0WuthNT6iC+2DOlm894AWq4Fis=; b=A6RJ6CBvwGdYiWSAbXf9VjaBVgBnnM8Hg2mIdq+0jck8JhAjqxKwzBhtfi4KIFa3i6 c2pd+oAHWgLuZWdnLOCTSvYmFRMtG1qqNqBaKNS2XHxIpVSMRxebBSaY3GciliAwgFbr raMHHNEItJ9esQkehlGPL+J+7wnDPWLnYGMMBoSRoqmq0f7Qyj2UIh4f1xIsIUkLsSaw EyZiuUJlacZ1AhL53TYPgJ9scT/HKDdGgoA57ho4t82nAaU3K7NfLv5ZOVGdLhpqV/eb boHlQXexi+2jK6kuwwNcBvZLKzsbj40gXma+vhmhGMpJnXC7ParErqxhqYNO8jxtE2xx Ygfg== X-Forwarded-Encrypted: i=1; AJvYcCVks78Ym6LMEDaEAaQDa4atF2c4iHxEjupP2PP/3VSzdh8s4WZe9tt469Zogdr3oytJ7BvRLPpDDNOylR53SUodwzM= X-Gm-Message-State: AOJu0YyRFdwdAFeml17hGWw8kgxN4Me5LoBOVe4iNSeu0L4qaTxRGwGa W3fcYNgZUMLMWXNNm4EMu183E2y+Q+T8eyeGrHwzqd+knUjEFy6/ X-Google-Smtp-Source: AGHT+IHU7hs7P+vFcx0S81/nTm/28ngSUvZjSrzTKAbOsDkdi7c59QtXqE4hy9y4VXKC0lM9IVR2mg== X-Received: by 2002:a17:90a:f48a:b0:299:2b9a:88bc with SMTP id bx10-20020a17090af48a00b002992b9a88bcmr10421142pjb.37.1708397778390; Mon, 19 Feb 2024 18:56:18 -0800 (PST) Received: from barry-desktop.hub ([2407:7000:8942:5500:a5bd:9c11:af2b:aecf]) by smtp.gmail.com with ESMTPSA id j34-20020a63fc22000000b005dc1edf7371sm5500047pgi.9.2024.02.19.18.56.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 18:56:18 -0800 (PST) From: Barry Song <21cnbao@gmail.com> To: akpm@linux-foundation.org, davem@davemloft.net, hannes@cmpxchg.org, herbert@gondor.apana.org.au, linux-crypto@vger.kernel.org, linux-mm@kvack.org, nphamcs@gmail.com, yosryahmed@google.com, zhouchengming@bytedance.com Cc: chriscli@google.com, chrisl@kernel.org, ddstreet@ieee.org, linux-kernel@vger.kernel.org, sjenning@redhat.com, vitaly.wool@konsulko.com, Barry Song Subject: [PATCH v4 2/3] mm/zswap: remove the memcpy if acomp is not sleepable Date: Tue, 20 Feb 2024 15:55:44 +1300 Message-Id: <20240220025545.194886-3-21cnbao@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240220025545.194886-1-21cnbao@gmail.com> References: <20240220025545.194886-1-21cnbao@gmail.com> MIME-Version: 1.0 X-Rspamd-Queue-Id: B4131180013 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: hczef6siz7hhubkkme5sf4fuw7dj7xqo X-HE-Tag: 1708397779-514734 X-HE-Meta: U2FsdGVkX1+YSfbiva9YnIeE0/6r5X+w66JR0JGkuJIc+C3e3yW6dmnkz2f4yu5sQauKoCi3ZvlxeEieZGl5uLgAVbpEe2GDT/roXWoL4xpIzTu63S2n39+EZgAjQwam5wRdfVy/I7W/6IGRbWBILp9s0K/qs87j3QhlTRYngJfV7Wxf/IwedWdomLuxpWEFU4N/t/pacGx21PKooSPUe0D9RTttwvV78zCdZHl1jGcDyyPtt5NoP/3jpVcZ7aWIzGsMtA1Gk+BXP2vujNVUEtgpu7KZsL6j6FY5pd8zDy8R0ZvOMkWh272FwHH/1BEQlbVSTN7O7kQeP/fwRWa3NZM9OpnINYyUFOJRbfWBXqDKMjh2Ml6RYxj51FqdLqPkoaBfKTN13dp+QdixTeMin/Tk3yrP41OsGi4lFI+Y5m7HBzAiUcBS3c8LhH49F5eWGoRiX76M3sDdXNhj8JSwQ/E28+Sw6Zg7MElCZ4oAextkjRmBcGjQq/ewEnQqKzvzV+Mshmia0L+Esqke+aNKY55VsxjbTssMzbOD/CTs9T2WReDphj2uY5Wz7/XFz/f7PmIi76YtHbczWs7E0R9kZMLXWPMM6It3lb3YNu/a0z9pqqon84Ndf/ukksyxblMhFYSjXDdZhQiNIj1bhIdHQ9iroByJI9dtPDI8DvlMVSF0LNxKrxSjOkNTFkT5o5z0VIuiOvQ118Wdh50smk6a3uyEBEbrNrn3rPnqWsZXaaxnwgojDqwAMtSjSCEOKDQBD2bTAeRnqFydaWD8VrBmzq/lkb0qWLYgYsReAl4gNyCBr/LSbSRu25Gw5oPPzf/rq8tgCBgzVwjaUlzi6dobqVSQU1RTDVj5L5ntoIuSQAmB30N9mekke8eyq/rrSoMC5VoPRvQgTKWToo0QBJac1jXTNDrrdgn2dAhtR9O0ZTQvScanl8DO09i0MJ/R/8UI7LPzZ80LpjhDEUgx0Uj rd48gV5G pRi0Kn2Jbyb9XTelkWBvfHkVcS/OdtUv2O9En7xz2DnJT7WAx1VST0M60kEjzn1NimSEUMlvMxWINw5b2sNAhfIlNlSdbytFjirQ68DyMxTdHk70JuMwHW7sWW7QvdGPytgHJKTkOhIYYIm2WHbWcmxM20DaUMPzlP9tFERcwGeDAclys9yGGNtHtqByOM8AgO6RyixLrEAZsEgY7bXs/wCjMa4crHeVZQsdNtgdoUQB98cx2rvHSbazrRjHG08hAU3F8WPi/VwM/kBANFY9KmU1GLkeB39bCgO7H37NX9KzFuGg2HRvIeThTPlHLw+8/hdZNDRgV8R9h6cR26zaK/JHhCbTAq1zUEawsXXkkWFhx3TgrYDgXpMQSQbclJA+VoEIID3gJAiQIyVfa5Nrwd0ZGR1pt8BCevbUx5oMvMRh8p3aY0JX91fcIQPA3B3MorpWK0BxqLPEtE5XXWPDRtoDe6Y0sgN1IVhUfwt7HtF7y5rDMwU64RCWiUsxVbjv2/XrmkidzzCICSbIMIQrRCOb7wNLoFXKQ95KeSFORAa3ok+SUenoRJUkhlqBm0EijtmhDEhnhq7riHGm5LSPBidDfqA== 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: From: Barry Song Most compressors are actually CPU-based and won't sleep during compression and decompression. We should remove the redundant memcpy for them. This patch checks the algorithm flags CRYPTO_ALG_ASYNC to know if acomp is sleepable. Generally speaking, async and sleepable are semantically similar but not equal. But for compress drivers, they are actually equal at least due to the below facts. Firstly, scompress drivers - crypto/deflate.c, lz4.c, zstd.c, lzo.c etc have no sleep. Secondly, zRAM has been using these scompress drivers for years in atomic contexts, and never worried those drivers going to sleep. Signed-off-by: Barry Song Tested-by: Chengming Zhou Reviewed-by: Nhat Pham Acked-by: Yosry Ahmed Reviewed-by: Chengming Zhou --- mm/zswap.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 51de79aa8659..115a780fa2c1 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -162,6 +162,7 @@ struct crypto_acomp_ctx { struct crypto_wait wait; u8 *buffer; struct mutex mutex; + bool is_sleepable; }; /* @@ -973,6 +974,8 @@ static int zswap_cpu_comp_prepare(unsigned int cpu, struct hlist_node *node) goto acomp_fail; } acomp_ctx->acomp = acomp; + acomp_ctx->is_sleepable = crypto_acomp_get_alg_flags(acomp) & + CRYPTO_ALG_ASYNC; req = acomp_request_alloc(acomp_ctx->acomp); if (!req) { @@ -1100,7 +1103,7 @@ static void zswap_decompress(struct zswap_entry *entry, struct page *page) mutex_lock(&acomp_ctx->mutex); src = zpool_map_handle(zpool, entry->handle, ZPOOL_MM_RO); - if (!zpool_can_sleep_mapped(zpool)) { + if (acomp_ctx->is_sleepable && !zpool_can_sleep_mapped(zpool)) { memcpy(acomp_ctx->buffer, src, entry->length); src = acomp_ctx->buffer; zpool_unmap_handle(zpool, entry->handle); @@ -1114,7 +1117,7 @@ static void zswap_decompress(struct zswap_entry *entry, struct page *page) BUG_ON(acomp_ctx->req->dlen != PAGE_SIZE); mutex_unlock(&acomp_ctx->mutex); - if (zpool_can_sleep_mapped(zpool)) + if (!acomp_ctx->is_sleepable || zpool_can_sleep_mapped(zpool)) zpool_unmap_handle(zpool, entry->handle); }