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 618C9C7EE23 for ; Wed, 7 Jun 2023 14:14:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6DE6F8E0002; Wed, 7 Jun 2023 10:14:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 68DAF8E0001; Wed, 7 Jun 2023 10:14:02 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 52E718E0002; Wed, 7 Jun 2023 10:14:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 3EB548E0001 for ; Wed, 7 Jun 2023 10:14:02 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 035741401F1 for ; Wed, 7 Jun 2023 14:14:01 +0000 (UTC) X-FDA: 80876145924.02.291D45F Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) by imf11.hostedemail.com (Postfix) with ESMTP id F2D7D40024 for ; Wed, 7 Jun 2023 14:13:59 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=Df5rDCZQ; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf11.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.219.41 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686147240; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=hujtERsbr1y1Z0h2D+lsDsJnysg0r755K8W7fL2vlzU=; b=XJmMaNiysSTN6PI2DvVSy84cTEGad9wHz1qEM8hdMOyr6iDq9fmrLIOIGAcLi0Z8oXIb2V 1KMvjHbuR8w1qeUTZSnViwNcXFQe26D1WFv1v3077E/3imtMH5zTA0tACx2/0271glaH9I rcGRXbEKeAD3SEXhfFsLhpn88XEMNos= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=Df5rDCZQ; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf11.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.219.41 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686147240; a=rsa-sha256; cv=none; b=lLthZEEvMLbpZcyobTG+369p9cCY5+JGLhzL8eWmBxo2mjS+uSE4G0jr9tVvA4Xy/RX+gG v8KQurmS02tNCSLIy9AeOgpBFJEUId/AdAFDGDrtzUYDuzDCWICmQHAsupH6HZuELvODKd 8TW2Vr5quj67QTAJYK+IpYRMu4Ryhgk= Received: by mail-qv1-f41.google.com with SMTP id 6a1803df08f44-62606e67c0dso63067996d6.2 for ; Wed, 07 Jun 2023 07:13:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20221208.gappssmtp.com; s=20221208; t=1686147239; x=1688739239; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=hujtERsbr1y1Z0h2D+lsDsJnysg0r755K8W7fL2vlzU=; b=Df5rDCZQESwjHEO+Uah+2lAx+ncZ/pSMBGHAB7jgWart+hv1h4s0QUfngJdWJ+Pn8K iILaIApA9zVcMWGF6JyrvlNQ2I9xG3l2PiM6HyOJoKNv9E+6ijAoUbwiyfgwwmrAEzfc ANxbLVbqEt97/N2QcUR7PC0XAVrCJATVwLyKSxRPZ9FFoLuWZ4kt26v2LV2e/RGCTiIs /+JWuknkCiKVvH6V3uog4o1Sb50eQuAzt1cz/t18eIiHEIpOtHZjTpmi6RED+BESRA6V EHkgOlfMdNL5qGfTD3YqzlMAPO9wvvotwaygK4DX8R2sJXVVuc/WZv4yi+Cr7DeIAshX lNsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686147239; x=1688739239; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=hujtERsbr1y1Z0h2D+lsDsJnysg0r755K8W7fL2vlzU=; b=kEijrkmxekODYo+UUcRl1z1wo4vBTOWLsmiPDkwbvnP0TEQsR54bjeMXH0Gv1Tak3i Y93vpsF0Pg0BvzHSeE8nbMn1HFQb2L7gWnvtllAENbABrH6YaMKLUuTdzvRt+qEtmWLg 1zZZN6YJ72RA7tMReC4MZsMh29SP5LJfXCbPpDIRwZJ2rzfTb4+dNeFZP/5bpMvhgpA0 shXMXaiUndQPSuolr3Z4fx9CVcYjxOBTBlKj32pibyTp4qK4vCoEbKYwyo/k/jP3EcyV g47LHWohUJ2g1G+rIDsxw0h1iuzpJ6YXyUUEW4yT2H07OlpZKguJ9NTfeZR70X7dgt1Z X5Uw== X-Gm-Message-State: AC+VfDzJt1KKEeCWE3+ALtoRSx3PHzHJ0HvuUPvM0fwaSAdBzBzq1HfK xZRz91rpdGuz5FpaLRkXbvYvug== X-Google-Smtp-Source: ACHHUZ6C1PlaUoolC9qAy7RRteJreDjDP+HPCNptvM/K49WfcQemsYFute8jzy0/tbDwXcxDqT4IQA== X-Received: by 2002:a05:6214:ac9:b0:622:7b7f:ed46 with SMTP id g9-20020a0562140ac900b006227b7fed46mr3261958qvi.7.1686147238725; Wed, 07 Jun 2023 07:13:58 -0700 (PDT) Received: from localhost (2603-7000-0c01-2716-8f57-5681-ccd3-4a2e.res6.spectrum.com. [2603:7000:c01:2716:8f57:5681:ccd3:4a2e]) by smtp.gmail.com with ESMTPSA id p8-20020a0cfd88000000b00623927281c2sm6077696qvr.40.2023.06.07.07.13.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jun 2023 07:13:58 -0700 (PDT) Date: Wed, 7 Jun 2023 10:13:57 -0400 From: Johannes Weiner To: Yosry Ahmed Cc: Konrad Rzeszutek Wilk , Andrew Morton , Seth Jennings , Dan Streetman , Vitaly Wool , Nhat Pham , Domenico Cerasuolo , Yu Zhao , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] mm: zswap: support exclusive loads Message-ID: <20230607141357.GA338934@cmpxchg.org> References: <20230530210251.493194-1-yosryahmed@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230530210251.493194-1-yosryahmed@google.com> X-Rspamd-Queue-Id: F2D7D40024 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: x5pp5ce68hq9jbe5p5hhyk3r3eqosw9f X-HE-Tag: 1686147239-220421 X-HE-Meta: U2FsdGVkX1/pB4ZkRFFu6SwnVeBBk/4P2+9UeWvC2/wUv4HdMtRljAQPoAQqizhIk2kocyjP5uQoGHbPRwFx4uJWoFbzSRNJfKgbxh5S0OdMYpROXP5zaBWBygQHIV9R9Q6uZiSr3j9yL+iXGpakYiHQHe/ut2sbYl4SuPcG5RdMB1cmbBvH2r1eeQ6oPitqmI/fGtcRmWzhH0b58BPgKMqfaoOE22kbzFdbEB7z3tZ1jQB70c7kLCIMezQ5eu9Q9KYV8UAaACH2fUsqkL2LGLjrdVYmDoy2kGVaLViASsw1T77u1i6MWqA/MyJk6ZLjK5ZdbZLinB/1xBvXIb9G9iNSQxy2pLw2rGZqF0gmHW+Bi7HdyW/EFLlp21W3zaGg8RdwLsUeCYcCFw4Vu76SRS4sTEvPQtwjLA/7BBc/qqm4Ig4xtFEpjYTmb4ZjPFRPA/YIRGNVmWdLqjGRxbB0crml9fczUjFb8YU4cbvZXuY9kQ52tmbyy7Lm51PZrFu/rhMGF7lwkZA/cdVD082w56i9/bxXl7XsqVOiM82zM79TK6vzpgtg50SVviTxb4A2dcKK8HVQdyks1xsXoXelevb4LiiJNr5ob29A0DI+GJ9a4NEgnjy3TQfnjHITPOQ73M1KhS0D2Tqs3RmDF5Q6fJmDdXbbu4Se+MmseqvyZeePFx9kNH5N97LnWSVTAdKc6XFn1a+Li3QzvXVTCgwBPLqlUmlG2+NlwVWScdFA8adA7msFIgp7mQfj8+c+5BQnaKiWNAistwz62fQQP+zT9+gz6GlW4arLOKghNI4Rrh0Fm0E1xl+YnbicH/OKlObJWoxwmi9UqAzvL5IZxvMutSwp0lSgoa1kiKKvZAm1nlwJKPo4cb5ro9uo0885rdwjMpLF3nsZVJGSIlOgxticLQHkmFTJ4lE1EG9COo8gNQ1kvu5u+fcK35clnD/IwKyKmv1+3NLzXcaaSO8ufWt U/2vUh8H dLRQWOj/odlpfc2/PcvnMe3ogN3qvfEINeuKoqpo6dB8AeIL4G3BwKPPQoC6WrLiJaKZjx3lchfL0kEPTgmyqFRM20QukplWXU4dz4EiEr5cyjKWLNYsp4ixK+z8EuSOlADXoiYa3QPXdXjxoMCJtm0DgCkRR368NrG6MeY4qyNXM637CNgDC+NfQvjcNTlaqF9OCeeWeAScWBpbNEiVSuiZeEz3hLl8EiEzw75E9gBlZIxYlIuHMDBRuPRWyU/fZWco68nODoxRMPAfKMvln+336ez57jCpXq4Twx60vXIsjE5BV368VKnhAy3dkUkgkaF2M++As1OV9heMTNFzs9hlHDqh/AEKeOEhc 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: On Tue, May 30, 2023 at 09:02:51PM +0000, Yosry Ahmed wrote: > @@ -46,6 +46,19 @@ config ZSWAP_DEFAULT_ON > The selection made here can be overridden by using the kernel > command line 'zswap.enabled=' option. > > +config ZSWAP_EXCLUSIVE_LOADS > + bool "Invalidate zswap entries when pages are loaded" > + depends on ZSWAP > + help > + If selected, when a page is loaded from zswap, the zswap entry is > + invalidated at once, as opposed to leaving it in zswap until the > + swap entry is freed. > + > + This avoids having two copies of the same page in memory > + (compressed and uncompressed) after faulting in a page from zswap. > + The cost is that if the page was never dirtied and needs to be > + swapped out again, it will be re-compressed. > + > choice > prompt "Default compressor" > depends on ZSWAP > diff --git a/mm/frontswap.c b/mm/frontswap.c > index 279e55b4ed87..e5d6825110f4 100644 > --- a/mm/frontswap.c > +++ b/mm/frontswap.c > @@ -216,8 +216,13 @@ int __frontswap_load(struct page *page) > > /* Try loading from each implementation, until one succeeds. */ > ret = frontswap_ops->load(type, offset, page); > - if (ret == 0) > + if (ret == 0) { > inc_frontswap_loads(); > + if (frontswap_ops->exclusive_loads) { > + SetPageDirty(page); > + __frontswap_clear(sis, offset); > + } > + } > return ret; This would be a much more accessible feature (distro kernels, experimenting, adapting to different workloads) if it were runtime switchable. That should be possible, right? As long as frontswap and zswap are coordinated, this can be done on a per-entry basis: exclusive = READ_ONCE(frontswap_ops->exclusive_loads); ret = frontswap_ops->load(type, offset, page, exclusive); if (ret == 0) { if (exclusive) { SetPageDirty(page); __frontswap_clear(sis, offset); } }