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 2FC81C25B76 for ; Sat, 8 Jun 2024 15:53:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B2AD76B0092; Sat, 8 Jun 2024 11:53:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A67BC6B0093; Sat, 8 Jun 2024 11:53:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7F48B6B0095; Sat, 8 Jun 2024 11:53:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 5C7B76B0092 for ; Sat, 8 Jun 2024 11:53:33 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 0F7ED1205DB for ; Sat, 8 Jun 2024 15:53:33 +0000 (UTC) X-FDA: 82208166306.07.550C440 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by imf24.hostedemail.com (Postfix) with ESMTP id 3A6AA180003 for ; Sat, 8 Jun 2024 15:53:31 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ip2FzWr5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of flintglass@gmail.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=flintglass@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1717862011; 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=+SvMQN/q38nefiYyRiVmPEMKlu3DU/JjYA/6JNmM/yw=; b=HJwbLGLe5l+TGV25yOSJTJkm0xajNNunes6NL+pVlK832m81ty6VT2Gr11tFj0S+wWn6bH 2SHTPnQ3h+uCJeQz3qei2A+ywRxIyG4YD1/LvWSipyLFz6Ey9O/JW/SURlE91I+hPDNJHu oTlI8Aubj54RGDA8vggC+2SqwKTTc/w= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=ip2FzWr5; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of flintglass@gmail.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=flintglass@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1717862011; a=rsa-sha256; cv=none; b=753ByVHdhJQs2KSAgud8hhrRtDxGaYacq2wN8OBxbCccOm9qpsHDxM0H8XFqX8h5IfyMAI vqOrrKRiGRyqzZlxYBxbXmr8BQHgd56PQPcaUDcb9CYFEKf8E56Hv2JMRwMMnGjM4y7afc nTvctH0XJxMnP91EVxrjtonqN70xPbM= Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-681ad081695so2394741a12.3 for ; Sat, 08 Jun 2024 08:53:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1717862010; x=1718466810; 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=+SvMQN/q38nefiYyRiVmPEMKlu3DU/JjYA/6JNmM/yw=; b=ip2FzWr5ly+v87n0gOeR6rR9m3yKtjLnImcWrwtxTtfy6+oIAwESVY+FMv7Lt/FDG/ HG+H0Cjwm3ivhRMQBXd348MBoOgiX5wQf7Rxe48awzeA8eqUV12PweyW3RWuYg2xJZU/ Vo9Csb3j5WUYMEl2AeedugULMaT3EcUX9FY5GpBd+zRnbx+Pwmuj7x1rksQzHxG1MrTw 8aq/AQ5cPxfh7TONSo6GYOMH97jTyn/wjEPs3sA1nioF/7ZJW6XxdZKnjx7ixmO/YMUf HUuOMLc7GfCoGY4hEKkWWwUIBoAuBfd2yfqoXHvJ19yQreRnGUUYMaOJjztZ5ABSeoeV ckEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1717862010; x=1718466810; 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=+SvMQN/q38nefiYyRiVmPEMKlu3DU/JjYA/6JNmM/yw=; b=JO+WSPO8vpy+siRHb2wGXKjN2U8s9ZjpKCCTlQE7d2P8Ake6VwqTJVF82I8k4U4L6v Rq92HAulQQNLwtUtUZh4ZYkpQDD6/Xvu2VzNVFtABuM7zAF3onAKl9P0R9qC8dbiRTtF 5FW8Fb/ISr2aQYrGn1U0iYIWvGlmRRxXIJG/tp/cG8HlKHqYYJpgaPPfmis8zpqPgyzK SVcNUdL62x6Di71nQxyazaS9nNdNql3voNkyNdNtEzk+8NG8rArZ9PnMHsThlZ4bqgGM pWveg6goZHiDSyxaO3VSjVnZWNzY1pUQ0fYX9OOH81u45oPSuFN9mTMAx0dQPDT0Y1ij rsBg== X-Forwarded-Encrypted: i=1; AJvYcCVxwp8sZuxG7zg4Xv6wr3PUem398N09XeD6APYqWyMuR6+9RlBQHRqAc0a3S/KWOmsmWnnO3YX+KnfYAVuLI57l9gI= X-Gm-Message-State: AOJu0Yx2BsfX9yQvTvGwQLa413TdUJL25fffkM0O/AGSTDhx+btGoFvI xhLZ4MPR94sDRahTHld5ZOa0eY9CjU36xRPE0696qbaaT+ra2LW/ X-Google-Smtp-Source: AGHT+IEG/zCdA3pqdzro3I+Qtktx3F9FKRDjkiSf63QDjZuWrfOfFPcvyEL5zE403+r39r2Uach56A== X-Received: by 2002:a05:6a20:12d6:b0:1b2:b220:2db6 with SMTP id adf61e73a8af0-1b2f969ed25mr5659976637.6.1717862009830; Sat, 08 Jun 2024 08:53:29 -0700 (PDT) Received: from cbuild.srv.usb0.net (uw2.srv.usb0.net. [185.197.30.200]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-703fd4d9d8fsm4335209b3a.149.2024.06.08.08.53.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 08 Jun 2024 08:53:29 -0700 (PDT) From: Takero Funaki To: Johannes Weiner , Yosry Ahmed , Nhat Pham , Chengming Zhou , Jonathan Corbet , Andrew Morton , Domenico Cerasuolo Cc: Takero Funaki , linux-mm@kvack.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 2/3] mm: zswap: fix global shrinker error handling logic Date: Sat, 8 Jun 2024 15:53:09 +0000 Message-ID: <20240608155316.451600-3-flintglass@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240608155316.451600-1-flintglass@gmail.com> References: <20240608155316.451600-1-flintglass@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 3A6AA180003 X-Stat-Signature: jh39fe6krfkdo9nn9sx3dpk8ncjnz5ro X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1717862011-453476 X-HE-Meta: U2FsdGVkX1+TAPCu6M809fWMfKW5lqSv/EdzzNSrBQ//Ho+iNr6LxOzxGiklnEF7nN0qg4o+Lk0FzFWMCte1YxAPPVumr7FptjgFCXZ4mjzwoNuoxYdYi1sMOU95m0UXownFJR4tH+wXEczfao3iJxh0coAYADL+U5hJKjqBQma6hHKeryckSQefptgFfKt2m/nRb4bkrxW1AE7zfgGBTVCDyiI/M7qUGGvDIL1Y/RIaA/z5jYyUaAnF+KttIQYF+asBBph1HFOiCiey2KpRJF9H8b5HLZPkoiFbD1yt3Q3lm9L6LUQ4kbm6DP3Z296j0h0HlYusyKfdfewS5ZXwOee4P3TyLAMuwQ6gc7vEk4FHEjHqQ64a0nWxlrbavqB7w7hFDxlldjUQh+maSKCK/2ro4QTwkE825X/H9n/d6BKWd/kZXWFd9qTYmRoMeLE5hR7bzVZqEGZDZC2L8tvi1eUQwXfjyVQSRb5Lu2IKmz2A0uyo9j5Q+/61V3Fiw9cC4GTzNnlz+zULde/R6awjDmq7C717ofTa5J9S4O/EAOBMoJ1wCer0Z8kWxVMg0V5mtJyzjiOiSo/AVrSQ3bSJo0agNZByqU0X9J6qct1eDyQKwR3e104GPepJLqJPXg3Y7hdBlpBFh3oW4rUBkRcU1uF2H1KEE8UIKdY9kNE9h4+WK7BNBD7su3NiYoot2jUt/rdI2+6qBCvhEWMZCr9khJHUz/VFWnqsSW/ULca6EWVoztWqYnNeqoce4ct7X9gWon8vlQ9h3IggdCcXN9EauL7S4Y18B3wU4dbOwV0cH4dGQy97/Fntzwr2NzVGDw9xb2WZfoNctFKUIHYki2FkVC5agq1wVW5r4DegrkRzL7Q2EFvGrna9VoHT16NahfiYVtaQtgKIOFfqUfORnEnxrVTRs9rhT56utIOmGnSMdK7VQxukhS3PJF6Qf3ovijE195I58AmsyOxZKQ/vG6c XXeSQD9x btjBBOX9zMAlruGwiNbyUIGIT8ayT1JILORnhXIC/eaodYZsxOLIUUHqmL6aCTWUuAb5aARZgRMXYC05FZgEJ08s3a7LcExKB5zKeVu7Rlac9kDg5hQjWJ3wXIqa0XT9gdpIMvTBcvJZEkcztoV8DwLEdCQHz8DRnxjCCHPtbgNfy7VLlOWJo7oAV3c+ap3hyOr+QiCDCxvKe/hAlYupKMQ5EdVEIEAdl0LEH6mFYQGP65cK+Jwl47PVO99cXm17lDc7VkcKnAoykm39R71yZo8tUu9hL0uYug6BJVdIje3vGyoSUJRr8/DXAitxyPzuoyavam3WVkJyAMjgCi2nBFAQpczYrZLJJyqIZR4PoCq0qKD/zM8F5Eeg62OdULcrEvXfPSL1UmvZgK9Xq5p9/1RoOqdHIkC04HJ9zdF2T2Ww3IPaymINPxHvNqQJmCVzNalBJ 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 d720a42069b6..1a90f434f247 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1393,7 +1393,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; @@ -1408,9 +1408,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; } @@ -1418,12 +1425,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, @@ -1461,9 +1474,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; } @@ -1493,10 +1509,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