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 1B562C77B7A for ; Wed, 7 Jun 2023 19:09:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 908306B0074; Wed, 7 Jun 2023 15:09:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8B7746B0078; Wed, 7 Jun 2023 15:09:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 758A68E0001; Wed, 7 Jun 2023 15:09:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 619106B0074 for ; Wed, 7 Jun 2023 15:09:45 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2AF7A40528 for ; Wed, 7 Jun 2023 19:09:45 +0000 (UTC) X-FDA: 80876891130.25.C0676DF Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf28.hostedemail.com (Postfix) with ESMTP id 67050C0007 for ; Wed, 7 Jun 2023 19:09:42 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=PnV1yt+i; spf=pass (imf28.hostedemail.com: domain of akpm@linux-foundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686164982; 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=FWvlxTasHR4GrKbF60KU8GAAM/0YHAEO55aC+6bSdXQ=; b=N2ErAoz/y2FoB3ivUwzW3tr0JXbMpXxOSuKNCBs61U6uf5tJiGHUZjjFIEhA8XS48LYs8E eW8V+QnPKBtqT4TJSYaUT6CFXPvuM1InB7N0KF4nyf4KNw+6oZ0nVWMb+weXvNkgv7YHEW re1VjMoeBtXnYSbw8DDF4ei3XR8V6RI= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686164982; a=rsa-sha256; cv=none; b=RjlQALbdxo54WKIDvt00Tss6sJ5Yl8J6GMKKaGSMA3pP3ZKyNMeMtOIS4eVlTwMpIziLPk DQxhuzgH2rG+yTJjek1n3ebVbO5uR9wys8RZePPr3sfIIW0cYuFW/grYXnDI14u3zvCfDc A3t25EpS2tLfSxWJsozU+maOh0KqLTk= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=PnV1yt+i; spf=pass (imf28.hostedemail.com: domain of akpm@linux-foundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 344CC64307; Wed, 7 Jun 2023 19:09:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4955EC433EF; Wed, 7 Jun 2023 19:09:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1686164980; bh=6dtKuXV2nXZXQRpqAxbQFyVi9qyFYTAFk5MrNR013Ts=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=PnV1yt+iqLBH3jR5kuNY9n1RF0i8vSUcbzOkVpRudAVvqEVYDFHJWJv1sK0KcI8Fk 0Lei0xwn1WHAKmiGGcIZVSOj26BaWu8mtT3YvnG1b+sNZ/6t/78JM3wPhqZ5OM/0it IQQ9hYseyVP2EFdHepJrgHG/pmqDmOT4tBxewju0= Date: Wed, 7 Jun 2023 12:09:39 -0700 From: Andrew Morton To: Yosry Ahmed Cc: Nhat Pham , hannes@cmpxchg.org, cerasuolodomenico@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, sjenning@redhat.com, ddstreet@ieee.org, vitaly.wool@konsulko.com, kernel-team@meta.com Subject: Re: [PATCH] zswap: do not shrink when memory.zswap.max is 0 Message-Id: <20230607120939.c1256fac4bb4e081811c02da@linux-foundation.org> In-Reply-To: References: <20230530162153.836565-1-nphamcs@gmail.com> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 67050C0007 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: i9ci5a8gm3e7aam7cf6kdq1hfgeg34wq X-HE-Tag: 1686164982-1798 X-HE-Meta: U2FsdGVkX19+01O4H/TSQz84+kRckV7y+7+cpvp3A/etldUfsLDXg63Ga0t0LyCArLqc9l3SGsKWuxzt3OCfgXrg2Grlhu5e9XyC0SHagwtW5b1Lf2TxO3GWCiLgg4ulKT4WGVjTNduO1LlvJ6QVAxrglzTxEt6U4IwGBKJ5M0bF3LO6S53DOUbI/ICgREgTJCJ4i8UrQ6rRvGx/F5f5X74ehlvG1Ws7yw1HmD2bWxuecx+hWcimOIuCW9zpU6VrUZ84URHVGD8lo95tFUp4M6jUy3uvXNRI2q5P11rOZ0DxsuYFylXHHzRw/MhwzOmG3rAAFzon4TSioA4R/qy7aSTVq0m0jGXN7PvtskrddgQDIi2vI0zZiR7s39l8Pnm+l3zjWLEjkW4Bb3dpT15uFt5VjLExYNTqqFADvXvcaEXZyn/3A3EjFta40lJOS2YCoHDf5bhUkLRazo2FsYjTAzUScB+2LtY/g07Wv7RVaFnAu1jBeu5b8A6cdcEpThqmE2THfBykEnIPNw7j1ODkwbBnEuA7vbppvXJswyA1eN6YhAp0nwpFoYi93lQaKIym3osFXJhpTCTgRBDebkgSK2Sh3tA1u9dxnU7UF0PT7I3f8bcadANTLguZmDbbW/ml1Ln8esrITEU05gdIY52cKKDQcfUM7p64BZB4Gmgq6herF/gSdi65gEPYrRcxdR3MGibrR9+5pigCC/AUm3otoHXWMmIMhuJwzdmRwXoEiQZw1WSuOHU7u8K2P37okI0cMxLAr6EZb9kQ2P37BIyZC0/zm3c+f5M5MOTvvfjZMNusb+B7YLFV6NlLaTjXou1kdGJyauGty1rOsy3eVYuh5gTz1piHtAnbJKxMs4hQqqtJcK3Q+nUETm/9RTvR9Jh2ncmKtZdcNTDwQkkXJyUm2VXhs0SvJoqQN1yTAFtqyCEEUfSzEWHdM7MNsadXG9jd5zmDvHC5yXD6ap95vqr VbDzMlcj axtOAPYZy4CVPe+YLAFWC4rvTBorNFulKWzmUTEWjIiF2XbmB/aX8eqLN5DUolgVgho6kegTzzFlpjnOH/e4BeQvJQn5cBbazAs779kL2CYxqi395x4OlIIGVyYRYGr3y0RdYNPZF08FhDzs+Su5wU1uP1akj5G/1rfRpYXIPWnANV/aPqBtsec3INPq22rEoq54Rj0r6NzLEHb5xPzoJkJGAUIopCIyTj08NFCLFWu3VhzESkwf3iZqCCLa+wwop9AJsFExl/gJb6HhObTqxtTazkRLKsUcgyECEELLFfq3a9Vln3Fh+HmPP+8kM0RCfCHmoo1Q8BvacVAcpBGMCZSbywaalIT6GNCRJiFgVposIFeWboE9r7eai+5smGpNAhjQf/qB5QtwXCvBkpC9v0BzSn8tfZZvNNs9OMpZmYvat1B2CIVWDl/GQ8lU/tcO9K1IxPYcu4LL8CnR64AQn2lpavQhLEOvcqvSeCVDFS3+pqobe8M7pnYngZEHq+0uprAflGe71NUlTduCvq+arcM7XU0g3enHGUCeqLO636NLHy+XDXGVnZFNyZikqRXVAy2UuETFxUQHsy+HnHvoIsmQYX7QeMSy4S6aEp5c57cN0qNB3kQ1GPGJJXPjVFlqh6UWugyunZ3Piw1wZCE7bXxIRNg== 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: It's unclear (to me) whether we should proceed with this. Thoughts, please? Here's what I presently have in mm-hotfixes-unstable: From: Nhat Pham Subject: zswap: do not shrink if cgroup may not zswap Date: Tue, 30 May 2023 15:24:40 -0700 Before storing a page, zswap first checks if the number of stored pages exceeds the limit specified by memory.zswap.max, for each cgroup in the hierarchy. If this limit is reached or exceeded, then zswap shrinking is triggered and short-circuits the store attempt. However, since the zswap's LRU is not memcg-aware, this can create the following pathological behavior: the cgroup whose zswap limit is 0 will evict pages from other cgroups continually, without lowering its own zswap usage. This means the shrinking will continue until the need for swap ceases or the pool becomes empty. As a result of this, we observe a disproportionate amount of zswap writeback and a perpetually small zswap pool in our experiments, even though the pool limit is never hit. More generally, a cgroup might unnecessarily evict pages from other cgroups before we drive the memcg back below its limit. This patch fixes the issue by rejecting zswap store attempt without shrinking the pool when obj_cgroup_may_zswap() returns false. [akpm@linux-foundation.org: fix return of unintialized value] [akpm@linux-foundation.org: s/ENOSPC/ENOMEM/] Link: https://lkml.kernel.org/r/20230530222440.2777700-1-nphamcs@gmail.com Link: https://lkml.kernel.org/r/20230530232435.3097106-1-nphamcs@gmail.com Fixes: f4840ccfca25 ("zswap: memcg accounting") Signed-off-by: Nhat Pham Cc: Dan Streetman Cc: Domenico Cerasuolo Cc: Johannes Weiner Cc: Seth Jennings Cc: Vitaly Wool Cc: Yosry Ahmed Cc: Signed-off-by: Andrew Morton --- mm/zswap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) --- a/mm/zswap.c~zswap-do-not-shrink-if-cgroup-may-not-zswap +++ a/mm/zswap.c @@ -1174,9 +1174,16 @@ static int zswap_frontswap_store(unsigne goto reject; } + /* + * XXX: zswap reclaim does not work with cgroups yet. Without a + * cgroup-aware entry LRU, we will push out entries system-wide based on + * local cgroup limits. + */ objcg = get_obj_cgroup_from_page(page); - if (objcg && !obj_cgroup_may_zswap(objcg)) - goto shrink; + if (objcg && !obj_cgroup_may_zswap(objcg)) { + ret = -ENOMEM; + goto reject; + } /* reclaim space if needed */ if (zswap_is_full()) { _