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 7DBE1C25B7E for ; Tue, 28 May 2024 04:34:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EC68A6B008C; Tue, 28 May 2024 00:34:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E4CB26B0093; Tue, 28 May 2024 00:34:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C29E46B0092; Tue, 28 May 2024 00:34:48 -0400 (EDT) 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 97CE86B008A for ; Tue, 28 May 2024 00:34:48 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 603891C27D7 for ; Tue, 28 May 2024 04:34:48 +0000 (UTC) X-FDA: 82166539056.12.2F2E33D Received: from mail-oa1-f51.google.com (mail-oa1-f51.google.com [209.85.160.51]) by imf29.hostedemail.com (Postfix) with ESMTP id 97310120018 for ; Tue, 28 May 2024 04:34:46 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QQJo7Hah; spf=pass (imf29.hostedemail.com: domain of flintglass@gmail.com designates 209.85.160.51 as permitted sender) smtp.mailfrom=flintglass@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716870886; a=rsa-sha256; cv=none; b=8SBYmr5mglj/AvCxzZfYSLNNxLZDEfdm4HOorEkjuPI6Yd6Tdvyu+CqQy0l+hliRoBF8d3 prwMtdluAWZQCfC3X0YspUZtotb0EA3hrt+Ljs2LWD0WLqfTGK4FuxAmwkgfUC2/eysssd sOjS5Ic3IJvESJBvcRiavRGHPDfaQYk= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QQJo7Hah; spf=pass (imf29.hostedemail.com: domain of flintglass@gmail.com designates 209.85.160.51 as permitted sender) smtp.mailfrom=flintglass@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=1716870886; 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=36ahJbEkFkRc61ECH6sYqp715enbxmd67+pVP96vSYE=; b=rUCCKAHAqgQufNyPmHVqLSrj1I87zHn7w4orppk/iDteEWD46SHXHtjgUuF1bKcp+/9KUt aiu6+B6H2ozE76Zq93BHOWPI81zwcP+BxbPS496ziykh6dO+MadCPQCLRc5MBQjW93kZCa KjZ5ronPX6oY6Bscx3SUEDlg4xZyIjA= Received: by mail-oa1-f51.google.com with SMTP id 586e51a60fabf-245435c02e1so206129fac.0 for ; Mon, 27 May 2024 21:34:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1716870885; x=1717475685; 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=36ahJbEkFkRc61ECH6sYqp715enbxmd67+pVP96vSYE=; b=QQJo7Hah875Kud22x7OE2qHFA5n+h7QlohEcAo0tCtn2z46Gp9h4wjywuOIar5MTvt US5YIkcs5D5owMxjTIwpKFqSU9+DDoQcxaJArGpkoAg3xTe6ABITZobZcTmP0rdRomNJ M1b2PiRr0rikKAMZO4/YpDf9BjTuMukEB5eXF5s1DRPmyXGbmMcBylxqrV0UkbVbaJrr g14Tml4msm4W0yooHPuhGowKXmAVjWGNO4OzcwhjaVFe/nD0T5oyuYUJvkRjEXQ8Q7wv 7wlCj5DvXvA/vmspv8pCpdV3h3q1qHYYL5mNwEi4QBor592vnxyVjUTmzoaDvWsxEUo8 SFdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716870885; x=1717475685; 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=36ahJbEkFkRc61ECH6sYqp715enbxmd67+pVP96vSYE=; b=cWH+iCu4XnZgeZba0ni3us60c3K76l8bG4wyPaIGU2Anejv8rhy2xt/EUU4DbffFq2 8TIhacayXsgpbl6YsxJvRVO/7hJSHwg4qmE0/qDgooaTzEtK2o/gV77KFD5ywGuwGmzD 2NCMilWRs+AyhMY12ZmVqbxYgdhNYUNoQClJc72vrrr9gBKM/KbV9XWho+kCxli/EXds VRimGDuwhnZwxscHJQMNsqu5Xtx29p/p2lOLS9jzQBrp5agHpbja7ib3zYC/jvdWGJN5 n42KIDPRobB/ycM1Z5ALGVjkT7CYv/3kmrTz1hD2PU3lWAFhUvhrGoRW5LeQGR0ECTr0 VNtQ== X-Gm-Message-State: AOJu0Ywrav5dNDyCgyFgMpKA1advsPkW06ojUcKib8s4i6Aj/5ONva9B MYkppuMWoWqNAZ4kZDgIDIWa9N2gvaJqvTGFrFU4N3EiWtsmRBpn X-Google-Smtp-Source: AGHT+IFDnpPzLL+0Rgx4NniGVbtCLdQVXzKbNuKb68x21uhgaNXJP54HK5dD4BAlWphqV2kWqKuurA== X-Received: by 2002:a05:6871:741e:b0:250:79d:5839 with SMTP id 586e51a60fabf-250079d5d84mr3666204fac.45.1716870885494; Mon, 27 May 2024 21:34:45 -0700 (PDT) Received: from cbuild.srv.usb0.net (uw2.srv.usb0.net. [185.197.30.200]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-6f8fd4d57b9sm5620036b3a.193.2024.05.27.21.34.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 May 2024 21:34:45 -0700 (PDT) From: Takero Funaki To: flintglass@gmail.com, Johannes Weiner , Yosry Ahmed , Nhat Pham , Chengming Zhou , Jonathan Corbet , Andrew Morton , Domenico Cerasuolo Cc: linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] mm: zswap: fix global shrinker error handling logic Date: Tue, 28 May 2024 04:34:03 +0000 Message-ID: <20240528043404.39327-4-flintglass@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240528043404.39327-2-flintglass@gmail.com> References: <20240528043404.39327-2-flintglass@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 97310120018 X-Stat-Signature: fu19kcjqwgxt1tkwmq7ojnj4sakngc8n X-HE-Tag: 1716870886-666743 X-HE-Meta: U2FsdGVkX18lXPAU+sJNoa/25gPbRbB8rblCEoPOBhXHyx+TF0ZDze20iexD4kJEQ7tnthMtXOZ8ccoUQvk5T5evdJAIQf08xfhzXJrmfRblJQGUQQogmgF5SKRHbBcBc0GM9sel3rcbybNjkByE5y4Wf/zGNH02FRU+x+EZil8GFr7W4yDwnrr0lU6xtquCl8jsWumN5JFM8XL1ydd9avW5eaPseibKw9fvaAQH1ifDcj/6JW+mAJLiI4DFje0dzo8TGDkc7Uc90JaZ6kxz/u55gdqqRK4sYwAv67T2sNPOD8jK7AgQympRM/DuwlRU7jRPNSCnFyTC9qwLP5BciPTMYPxegsZCRdJz1VWl06Aj0CjPcng5eBVSR639ER9zwP9X8N5r52PvpmnQvq09OOpDMTnevyOcAe+aX9LYs8r9O/uWohCGVduwwgxmz6u8NkKT4t4QbTeRKsgioZoOA9CKby9q8jl1OkV4JFJ4ZamUBlKDvJumfoDxdgEdxx3PZ24zgJzgeJlweF15NOtqyxlWkc+AlNmyLgCppoM4NABDCvDZRjILUvIH6ctgsHUSCYRZJNk0i6ZKkmSAFipwvh9d92y5q4HMoFx+J12LpUZAVXa6kqZI6w3Fbu3SAwDzMPtR4EtFOzChULyJ38RKycH91ISBBuYWubP/IHXxqtiElSe/mgNGgAzYnQi2fmyT64XRi/ez5h14SExbJptS+mCyF28dgtv6dkdSXRaaFeDKSV1c7CCLUkG6LfvkE91iTESyuvRsWGVL5JP8L2aRBVdtde21agvtUyP4BTWjyUHjniOtAhqifJLxGGCVBqE5WJYVh8iMipXqAb6ZjLvkdXVgmCVsHY7q41ifw/0/W8n5+LvAmz3tYe3nf6Rx4lnrJL+rsnm85oKrolnQNJxsx3pGexdtZVtVtBOQwjuo5L7/fnb++zGGFewRJTgul5seblzfvqpibzJ7F+BJtjw oug3uBOw GCcHsQQuEXwEbf0GN9uBcuL28ThvRqLe9dBxAM9zIK4Ih6MewJKuanTGMKAHd0/8DPETqvmBjgnV2ZJRZMNl2gWBqXPTkOtJdPqlQ3+Fy9gm+Prkj+gKHEv70uUaTv4P8/W/2o7fj5h6mjEL089/8nu2pGpuRUK4/vh1MYnXSwr0SEohzVYcm6ZrRl3QHPgaeZXpGQw7qfviQe7dMRUUbXOqgYiloHy8zSnryaoRRq2KuhoRmcAovxfjHcsRXp+5RFTHilLGlSp8Fe5GmT6HLuhCkU3saaqcjD39gB5/J6WxtrKOaHKtdAjmQfwesp+AEtRUf+82KiX8Jh5fKAp4eWZ/l5sMy5E9Q5DOxtp/iR3SktgBw6FDWbQHG2APj3vwg7Tf08v6Vadh9TRDtNSpRMElpqVRe6wzB5a8dzPBN6qUR0OFfDWqTDaUMAA== 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: This patch fixes zswap global shrinker that did not shrink zpool as expected. The issue it addresses is that `shrink_worker()` did not distinguish between unexpected errors and expected error codes that should be skipped, such as when there is no stored page in a memcg. This led to the shrinking process being aborted on the expected error codes. The shrinker should ignore these cases and skip to the next memcg. However, skipping all memcgs presents another problem. To address this, this patch tracks progress while walking the memcg tree and checks for progress once the tree walk is completed. To handle the empty memcg case, the helper function `shrink_memcg()` is modified to check if the memcg is empty and then return -ENOENT. Fixes: a65b0e7607cc ("zswap: make shrinking memcg-aware") Signed-off-by: Takero Funaki --- mm/zswap.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 0b1052cee36c..08a6f5a6bf62 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1304,7 +1304,7 @@ static struct shrinker *zswap_alloc_shrinker(void) static int shrink_memcg(struct mem_cgroup *memcg) { - int nid, shrunk = 0; + int nid, shrunk = 0, stored = 0; if (!mem_cgroup_zswap_writeback_enabled(memcg)) return -EINVAL; @@ -1319,9 +1319,16 @@ static int shrink_memcg(struct mem_cgroup *memcg) for_each_node_state(nid, N_NORMAL_MEMORY) { unsigned long nr_to_walk = 1; + if (!list_lru_count_one(&zswap_list_lru, nid, memcg)) + continue; + ++stored; shrunk += list_lru_walk_one(&zswap_list_lru, nid, memcg, &shrink_memcg_cb, NULL, &nr_to_walk); } + + if (!stored) + return -ENOENT; + return shrunk ? 0 : -EAGAIN; } @@ -1329,12 +1336,18 @@ static void shrink_worker(struct work_struct *w) { struct mem_cgroup *memcg = NULL; struct mem_cgroup *next_memcg; - int ret, failures = 0; + int ret, failures = 0, progress; unsigned long thr; /* Reclaim down to the accept threshold */ thr = zswap_accept_thr_pages(); + /* + * We might start from the last memcg. + * That is not a failure. + */ + progress = 1; + /* global reclaim will select cgroup in a round-robin fashion. * * We save iteration cursor memcg into zswap_next_shrink, @@ -1366,9 +1379,12 @@ static void shrink_worker(struct work_struct *w) */ if (!memcg) { spin_unlock(&zswap_shrink_lock); - if (++failures == MAX_RECLAIM_RETRIES) + + /* tree walk completed but no progress */ + if (!progress && ++failures == MAX_RECLAIM_RETRIES) break; + progress = 0; goto resched; } @@ -1391,10 +1407,15 @@ static void shrink_worker(struct work_struct *w) /* drop the extra reference */ mem_cgroup_put(memcg); - if (ret == -EINVAL) - break; + /* not a writeback candidate memcg */ + if (ret == -EINVAL || ret == -ENOENT) + continue; + if (ret && ++failures == MAX_RECLAIM_RETRIES) break; + + ++progress; + /* reschedule as we performed some IO */ resched: cond_resched(); } while (zswap_total_pages() > thr); -- 2.43.0