From patchwork Tue Feb 20 06:44:13 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: 13563467 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 5F5BEC48BC4 for ; Tue, 20 Feb 2024 06:44:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E5C616B0095; Tue, 20 Feb 2024 01:44:48 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E0C826B0096; Tue, 20 Feb 2024 01:44:48 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C86016B0098; Tue, 20 Feb 2024 01:44:48 -0500 (EST) 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 B51856B0095 for ; Tue, 20 Feb 2024 01:44:48 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 84B91120419 for ; Tue, 20 Feb 2024 06:44:48 +0000 (UTC) X-FDA: 81811244256.02.F0A4220 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by imf12.hostedemail.com (Postfix) with ESMTP id CB9F24000E for ; Tue, 20 Feb 2024 06:44:46 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="DqBs348/"; spf=pass (imf12.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708411486; a=rsa-sha256; cv=none; b=xlt3sBF8Kryp2Jk1eK8j2cUzINKLSFHirOoSMD5K9FWwS+9GHXMzs9wdmp8nquhUB+DkpP lagamoIOj4bw4Xj4x97U5XYHCHErb1T3v8dDW3U239nZaNwqxjgE48F5QnblALnvd0rsTu Vz7UC93DsgKzoi4IA4XQqgbAik6ka+c= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b="DqBs348/"; spf=pass (imf12.hostedemail.com: domain of 21cnbao@gmail.com designates 209.85.214.169 as permitted sender) smtp.mailfrom=21cnbao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708411486; 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=Z8rNl+BjuOiPHO8BwMbPluxA5iMY9ZQk2ZuevI5ELxs=; b=AaSyj/9l5rKvuShTca5dlQztJDdVUZdMN0Vc6t8FFV0oFZTKSXtAVnCbDIeFyi7T8eS1P/ Cs2hOqQ0a3NFS+lNdTujT1q1odPd9H8TzNo15FZSDr3C7M3E9TOBAfWupZvrX5f+VDx6WY P9eGnhyTkdh2UKbsP/XfboxWAjda/H4= Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1d7354ba334so46329365ad.1 for ; Mon, 19 Feb 2024 22:44:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1708411485; x=1709016285; 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=Z8rNl+BjuOiPHO8BwMbPluxA5iMY9ZQk2ZuevI5ELxs=; b=DqBs348/t3GNwOHhIC/7q8TUPzaBCPJ+jkkydcJ+k1UZ2g53RBlOVf/qg5itaAOkFc Eisj8P4KFUwKWuMQapg4DHKcTbyZTVr79OoTr8GZFSQGX7y5Y/cRdJsCWx3Yo5teIFMp fe1wzThFVotpwN6+c2J845Qe8jSRtW0GcgEUo+V7s9nbkPD/JCiiIO9BZjYzrn0HRO80 tKiIXT3ufnMeizSB/8H+m6VR+Mfz23sDeZ2PCvS9h2iP9KryPvIBAiRW0TolCy6q2roW j9lgseh0KS9MR4Wnc62py+MBX2y00kulYfOusSdjwpVGLJy9qp7E93wCst4B3Va0VmqS Pz9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708411485; x=1709016285; 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=Z8rNl+BjuOiPHO8BwMbPluxA5iMY9ZQk2ZuevI5ELxs=; b=QjCcBPFhuN4AxG7DcrVnb1QtVQ1eHNFv2bIISmffQEdch2lHWfen6UMS+U5sbWZLo3 Yw512rQIyoiC38YOPWwlZqcTuT82/wCwpFARFcatQC1UmE3ucrqj9vEkudrzi6NBdE8P g0JPuaYCRFmKj0T+46ubuxY0b9i6BNDJ/OlYC2ZbukCll+sY/P5XbaCaCx3O0onKrTUM jF4EGbt+v/pzSRsu72ZSxcxpKNKO8GdTy8gWxFP89x1RsbgGAHloAc5k+dLfAiklw2sD qiU2rIm2cB3X0OG6CtiN6v+4TRtxNPvcfQO8jUeHg0biWOEAropSy+V2nIjzgpImtenr 0K1A== X-Forwarded-Encrypted: i=1; AJvYcCXgT1IRK7bpy1MPbT4JtKqViaAAp6rgazvKeDkLMkIi48Egg2JTMrI3pcdR48TOF4LSoOEOjahcqCz6hnB3sxFHbr8= X-Gm-Message-State: AOJu0Yzp9B17kIz7XrmSwD92SDDecBXBIaDlm0Pj7sqwL3N6mIWC2Y7b RipL+ZRa0m6oc/33q/sy50Y2POez/cEoCf+PIUY0g/GRXX1LIy9C X-Google-Smtp-Source: AGHT+IGjLI8WrT5H3cLslymf3abuNOE5Ga3w1JP7qFoprv9R9pGvpeHXjEqD7rjwt07BKGzckg9xsg== X-Received: by 2002:a17:903:11cd:b0:1db:82e3:8d7f with SMTP id q13-20020a17090311cd00b001db82e38d7fmr19374961plh.16.1708411485583; Mon, 19 Feb 2024 22:44:45 -0800 (PST) Received: from barry-desktop.hub ([2407:7000:8942:5500:a5bd:9c11:af2b:aecf]) by smtp.gmail.com with ESMTPSA id w16-20020a1709029a9000b001db60446abdsm5419090plp.262.2024.02.19.22.44.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Feb 2024 22:44:45 -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 v5 2/3] mm/zswap: remove the memcpy if acomp is not sleepable Date: Tue, 20 Feb 2024 19:44:13 +1300 Message-Id: <20240220064414.262582-3-21cnbao@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240220064414.262582-1-21cnbao@gmail.com> References: <20240220064414.262582-1-21cnbao@gmail.com> MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: CB9F24000E X-Stat-Signature: 7xdjpzc9mncyw5ouuus4qkzy7neq1e3x X-Rspam-User: X-HE-Tag: 1708411486-841787 X-HE-Meta: U2FsdGVkX1/pq0fwlCu1MzmBlsIveoicAkowuXJYpPh60amIPkliLhnWMYw2EqFsuSH8V1MiInVUTS7gZisSskVMQ4vv5EhQvmDhjjgsCfUwEr27ya7OdwnOJPDL6EwpwTPPbXBahozyk35PuA7RpbyCbkuipEXaGEg/vaz9/Vgz3qI0diFZIHY38SuMvhII0LAxrPO3pO66LmGJ8Z7cN7u8EbGdB00ieM2MQL8sXd9it++IUCyhjrazRUqDIoCpS5ZQpSApDQhTUlK16SpgTKShFsCVde54xDpoQf6LfOMFeivAgsYTQbQ2bsb1Ns1kEbHxNifaCELmJBNX9F2PyoLuBv2v6YZ/aN++KDslbssreUn8z6qDwuc0LWniwwePz+pQZCg0nmV/iQ1LdQTc5BN2zQ4+p1C8Isv3kfSjr5JNseOEL6QVJYYG0Y0yFUZX9P4dtaVINwTmtAuALre6lWO3DyFtwxthf+IrbrlZ8fjFaeNqhYJkRc1fFZLZwBlBREzHIxaZq75Kr2wRv2RVOGEm99Q+8w2alVaIbstgbl1YU9yPpqqtK5OQc9+O3mK6ij1Kf6v6tKBKdXAfYftU7b+rwLCxU6/ibmxMCiHWhoWECRMs9q816tc/okUj8lzaw7b+StVe522jOpyhAKQyLmBTQX+Oaur7cYNKPewz3OywfGUj8al1vxLvQe5+juSBli5Q64wkCti9sn2Yy5xoCEbs1pqj0x+qTtR3vNZGnlHiCDIE7n2mnePGccMu1ZBDiDXS9Wpf3u2EBmAOltJOFLvxKvRJrMWbHBRSPK9o5peoxfFX+xQ50CBSF+ae3JzWRJN70bT+07Z9FhNwTYI6Q5iQxUYCg1O+Jn1MjXNoM9Or5Z2BnEXlfWI76ouMbwKAni5b4Yz7pw9jYd7sDdkYmKaVyQQOXyX1hIC249/TYPUJ9pqziMtdddKBWtHGItY4hjiHL3JQXMk4j3iDMVm 9II/I08u WRbSMK1kyBc77OEDZyq2PBwrzxOE+FFXNHokxVWj46BKYeW9iXY0CkEvUPvurkCBMUkANqNdCpXYYnKUHyCSSS+LbFRSop5gvwErHfDrR+H7qGe/jvoZry9W0FQ== 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 if the algorithm is sleepable by testing the CRYPTO_ALG_ASYNC algorithm flag. Generally speaking, async and sleepable are semantically similar but not equal. But for compress drivers, they are basically 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. One exception is that an async driver can sometimes still return synchronously per Herbert's clarification. In this case, we are still having a redundant memcpy. But we can't know if one particular acomp request will sleep or not unless crypto can expose more details for each specific request from offload drivers. Signed-off-by: Barry Song Tested-by: Chengming Zhou Reviewed-by: Nhat Pham Acked-by: Yosry Ahmed Reviewed-by: Chengming Zhou --- mm/zswap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 51de79aa8659..ef782879291a 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,7 @@ static int zswap_cpu_comp_prepare(unsigned int cpu, struct hlist_node *node) goto acomp_fail; } acomp_ctx->acomp = acomp; + acomp_ctx->is_sleepable = acomp_is_async(acomp); req = acomp_request_alloc(acomp_ctx->acomp); if (!req) { @@ -1100,7 +1102,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 +1116,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); }