From nobody Sun Feb 8 20:34:13 2026 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7883321A19 for ; Fri, 5 Apr 2024 05:35:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295317; cv=none; b=WmkmFUNAle1W09Nd9LdZvWGsQbNP072pjL4STdscf4H/gv3PkfnIIqqOT9TFuLQ3M1vOzy0zvYmqFnWU+y4RgXbZ3a2SWgVb2xNTgFNVXXQ08c2GpfSUCKoLsYgufE6dJ/VbwykCKcmI4wuXNRQ6x/7MiUHcCz/ODy3A/kpsd8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295317; c=relaxed/simple; bh=0EwsJFsFqxelfzk3PZ8b/+zJHvbghrn5+keHiziw9TE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Puw6kUPa+UTRugET1/RBrvQpOkKJhisQmEKJrKeoR1M8s9GNumxVgBqatzH5eZAZWYTtqvhrfE84vp4ZF6rcwEtyVqyMXM6JxvhPNa2UfasjytCH67s90WnfFUzDF+xmEPpFasx2NLBBqS3SzMlo2L9NNicgwoLyGCcM/jGEZSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SX2yZXrs; arc=none smtp.client-ip=209.85.128.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SX2yZXrs" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-61561dbdf14so29386417b3.1 for ; Thu, 04 Apr 2024 22:35:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1712295314; x=1712900114; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=fbFnbwv9ZL9vnT6aD0Y4iZUVe+aMA3yOt75trlF6TiA=; b=SX2yZXrsFa9FkNg9hBL4bKCR+uQQYS0p9nASGiSjhlicAZnJ7a9+T59aJgHa+26Y/K 0V5yzBxEyzv4OdMmYl/MJtZEIf1D4VIKFpVr7+SOnl1Et4GS0yM9wk6YHmOqQMGpsB2Y RSEYZxxIFKYvTbXbkCvYXvFK9P8Wx4hKaejvEE7SyF6MYay2HJiaoxgBTfsAOlSwacZL 1Fbn20B5vLAi1gCeqLaKLVVaiKe3mBF9BmX9MPzGnXlXBeNrJ+x/PDHBLV0N4OIUgFXS e9gktuCbE/Bs2YIcRmkZQsfX5zNK02ATEsQUZGDz3Jkjm9LquJMRMjWEQP3EIRfgWloD NE7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712295314; x=1712900114; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fbFnbwv9ZL9vnT6aD0Y4iZUVe+aMA3yOt75trlF6TiA=; b=Z8PmiKC0CiQVB2+QP02YpnV24noFa5ljnwdE8oj8vIXyaszFCswTxaqWJZfXwncxy4 1iD9cl+K2xRs2VT2p17HUpDUnUQeeKiGSniuAD0LZZDrj6ZS/2IA3OBj/p5fdlNKSkF0 1vYGIZWw//phXGQXrDqAcXAVS+nCwE/rmFyNLq6zFwcNtE4OwF/8S6JeHGUlUmuV7KKC 9FVVTt6JDGKbQutW2KpCpZlgmrcndm4xWTaXMm2xaUYYHGG1NeynG2bg8x2Pu1ujlqJb +u2eEpVX41EKWykWCms/DwHnFqNVOZ13tocmH3ngx0QAUvZ7wm/rNz60al/yO1JYXpAT z90A== X-Forwarded-Encrypted: i=1; AJvYcCVVKOWby+DpRYQ/3+kySaDWwNxkSYgfdIl4Q8JIObp+XNIMl6IFobxyQW09OxPdT98zoc/yta4z1Cm556YnTqQ2Yd1opMewgCbRxfe6 X-Gm-Message-State: AOJu0YxtrNAXSPKE0SoXkjHymywLCOwru73xmaQGP9rZ2upNjlnlO8cE yba5vP6cGhdgV52uMQm06Bx1iJnaJ5M3qbvoKtqXUUaDRgl2MiorLCQ8CJ2IsrzzUyVHDyeKKGM gDk73I2m3ILKmO41Hzw== X-Google-Smtp-Source: AGHT+IFlLjixyUEVN4p+xx4HWF7PyspM95D8o4YEWmVCPSbSGxL2ZvuIRWMLaNCJ7MC52j1a09GwvbWQG08Vtp36 X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a05:6902:e84:b0:dc7:463a:46d2 with SMTP id dg4-20020a0569020e8400b00dc7463a46d2mr387870ybb.0.1712295314619; Thu, 04 Apr 2024 22:35:14 -0700 (PDT) Date: Fri, 5 Apr 2024 05:35:06 +0000 In-Reply-To: <20240405053510.1948982-1-yosryahmed@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240405053510.1948982-1-yosryahmed@google.com> X-Mailer: git-send-email 2.44.0.478.gd926399ef9-goog Message-ID: <20240405053510.1948982-2-yosryahmed@google.com> Subject: [PATCH v2 1/5] mm: zswap: always shrink in zswap_store() if zswap_pool_reached_full From: Yosry Ahmed To: Andrew Morton Cc: Johannes Weiner , Nhat Pham , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The cleanup code in zswap_store() is not pretty, particularly the 'shrink' label at the bottom that ends up jumping between cleanup labels. Instead of having a dedicated label to shrink the pool, just use zswap_pool_reached_full directly to figure out if the pool needs shrinking. zswap_pool_reached_full should be true if and only if the pool needs shrinking. The only caveat is that the value of zswap_pool_reached_full may be changed by concurrent zswap_store() calls between checking the limit and testing zswap_pool_reached_full in the cleanup code. This is fine because: - If zswap_pool_reached_full was true during limit checking then became false during the cleanup code, then someone else already took care of shrinking the pool and there is no need to queue the worker. That would be a good change. - If zswap_pool_reached_full was false during limit checking then became true during the cleanup code, then someone else hit the limit meanwhile. In this case, both threads will try to queue the worker, but it never gets queued more than once anyway. Also, calling queue_work() multiple times when the limit is hit could already happen today, so this isn't a significant change in any way. Signed-off-by: Yosry Ahmed Reviewed-by: Nhat Pham Reviewed-by: Chengming Zhou Acked-by: Johannes Weiner --- mm/zswap.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index c4979c76d58e3..1cf3ab4b22e64 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1429,12 +1429,12 @@ bool zswap_store(struct folio *folio) if (cur_pages >=3D max_pages) { zswap_pool_limit_hit++; zswap_pool_reached_full =3D true; - goto shrink; + goto reject; } =20 if (zswap_pool_reached_full) { if (cur_pages > zswap_accept_thr_pages()) - goto shrink; + goto reject; else zswap_pool_reached_full =3D false; } @@ -1540,6 +1540,8 @@ bool zswap_store(struct folio *folio) zswap_entry_cache_free(entry); reject: obj_cgroup_put(objcg); + if (zswap_pool_reached_full) + queue_work(shrink_wq, &zswap_shrink_work); check_old: /* * If the zswap store fails or zswap is disabled, we must invalidate the @@ -1550,10 +1552,6 @@ bool zswap_store(struct folio *folio) if (entry) zswap_entry_free(entry); return false; - -shrink: - queue_work(shrink_wq, &zswap_shrink_work); - goto reject; } =20 bool zswap_load(struct folio *folio) --=20 2.44.0.478.gd926399ef9-goog From nobody Sun Feb 8 20:34:13 2026 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FFB92262B for ; Fri, 5 Apr 2024 05:35:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295319; cv=none; b=YebOSQpQ0rwiv3/bXNjgKgFUpierbS4P06k6CYhQqEG6saXzv40aYZKDUvNBGt6KRPKlfJvXpr3lKoyYHITsm/rnWuHSDB6VMOlhZkXalUUwGlRtxqgD9d103D8z8MgWyQp4E3jiJnk+GrjCjYmmcRNfLWMNhFCtyqMFUfF3lvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295319; c=relaxed/simple; bh=UkS+UYc9cwpvUdu5QZSiW9gBMAbwVnbpUHqxoQJnyCE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=roem8CRw+JhtfXC/APlDBLfiYJFMmzPOAuZphcOdvrNGJSbCQwRWg8yUNlACx56STYANyerRxxvAy44fY6nf0MxLCjBf/QF/dy5dPEjLsjlCmV2gQ3WpGR6BQ9bZcrOGeLi+VC9PFWiO0Nn/Rc2uuKrxTPNTrkyvbmSrNZumkWA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=cZrv1iuN; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cZrv1iuN" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc647f65573so3323046276.2 for ; Thu, 04 Apr 2024 22:35:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1712295316; x=1712900116; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=kLsh2mavKyRbc6llROScpNs5yKk8UXbWOX30PW11RTM=; b=cZrv1iuNAB1701JwUO6+3K2fqh5eO4pLDlRP4/MsQ7MIFX1T151emjidLTO/evkFNB OvcXB1SnV3Y3n3hQ8s3ltXBtroZyLAQPXXsPswcpYPWMT3iOghwTFAAxUWwCz7GbltDB kL+T60EoeMQUd0XBOE1yboUROggN4mWz3qSVSD6x6TL5r2iU91EnuY7QyFZJqxVhSxiQ C5rlPgZksbavc6Dv4RSzNAf3E8VaUYQYSwVpzXcMYJNGKMOv5hfkWnDmxDHx4NTwHx25 qi+bHEXamGSySczhiiCeESIZfywdnJAOSLD+7X1s0l32BVBBn3cn+3k9sOxEvsJuC535 jUvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712295316; x=1712900116; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=kLsh2mavKyRbc6llROScpNs5yKk8UXbWOX30PW11RTM=; b=M84q86ILD4X+WfM3j8gdIr5UF2QMFCdC8nUKICoHbcAL46/8j2Qa6ejq4vG5BjTd2p aNvMnJ7dk3wiVxIN1bHf+nL2fYVb1NfVQ/JHkGpqxzKIrVqxSFl/puwrBTlsH6nDHonY obPrdGNJ7mK5HBfDwGad9Jo80csMMP5PETTNi9dXnB18H4+9Y+hZqvsyzIe/M2P2XkI0 igjVRm9lhvY9MdJC5G98MXuWF23qaAuYRJ1V6N+HgtBdkeZO9Q1/zwrJ2jGs26HdWRmg o+yZBZhicHazVf1rPunVFA4vescjeKXKT6hhvHDQs8r26UTCK3fwtIuVGslIpVlnAJVj Al0g== X-Forwarded-Encrypted: i=1; AJvYcCXn4sYtzw7x3sJ5PU/VxyoZJuA4CrXpxMPVVHjvmZfxwLkd9+Mbmmzf0Vu7aEIvRABtbQd4bZtDwuN8hJBb3NsLLZQP7vxRxmlk4MxA X-Gm-Message-State: AOJu0Yy342CBFNSYQWLU+c7ETh3HLQPSjceOND/sTL43mDTY6wBdCmzw 35eM+wBB9A95ktiCFjeW+BkgRklF1r6FDAsB2tVZU8iX9QnAIW5m/x8oY/8cTKKUQKdjzF8B/w0 ATXTcouIVJwCYSEROCA== X-Google-Smtp-Source: AGHT+IH7oL3hUlxA/yZh4c4iQx4M23yR54gCIDKzNRckDvrgcltEIddaQ+ef2AO7ne3vgWVM1zEbXHHpxJ8/KEde X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a05:6902:f87:b0:dc7:8e30:e2e3 with SMTP id ft7-20020a0569020f8700b00dc78e30e2e3mr97855ybb.2.1712295316513; Thu, 04 Apr 2024 22:35:16 -0700 (PDT) Date: Fri, 5 Apr 2024 05:35:07 +0000 In-Reply-To: <20240405053510.1948982-1-yosryahmed@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240405053510.1948982-1-yosryahmed@google.com> X-Mailer: git-send-email 2.44.0.478.gd926399ef9-goog Message-ID: <20240405053510.1948982-3-yosryahmed@google.com> Subject: [PATCH v2 2/5] mm: zswap: calculate limits only when updated From: Yosry Ahmed To: Andrew Morton Cc: Johannes Weiner , Nhat Pham , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, we calculate the zswap global limit, and potentially the acceptance threshold in the zswap, in pages in the zswap store path. This is unnecessary because the values rarely change. Instead, precalculate the them when the module parameters are updated, which should be rare. Since we are adding custom handlers for setting the percentages now, add proper validation that they are <=3D 100. Suggested-by: Johannes Weiner Signed-off-by: Yosry Ahmed --- mm/zswap.c | 86 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 16 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 1cf3ab4b22e64..832e3f56232f0 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -116,12 +116,29 @@ module_param_cb(zpool, &zswap_zpool_param_ops, &zswap= _zpool_type, 0644); =20 /* The maximum percentage of memory that the compressed pool can occupy */ static unsigned int zswap_max_pool_percent =3D 20; -module_param_named(max_pool_percent, zswap_max_pool_percent, uint, 0644); +static unsigned long zswap_max_pages; + +static int zswap_max_pool_param_set(const char *, + const struct kernel_param *); +static const struct kernel_param_ops zswap_max_pool_param_ops =3D { + .set =3D zswap_max_pool_param_set, + .get =3D param_get_uint, +}; +module_param_cb(max_pool_percent, &zswap_max_pool_param_ops, + &zswap_max_pool_percent, 0644); =20 /* The threshold for accepting new pages after the max_pool_percent was hi= t */ static unsigned int zswap_accept_thr_percent =3D 90; /* of max pool size */ -module_param_named(accept_threshold_percent, zswap_accept_thr_percent, - uint, 0644); +unsigned long zswap_accept_thr_pages; + +static int zswap_accept_thr_param_set(const char *, + const struct kernel_param *); +static const struct kernel_param_ops zswap_accept_thr_param_ops =3D { + .set =3D zswap_accept_thr_param_set, + .get =3D param_get_uint, +}; +module_param_cb(accept_threshold_percent, &zswap_accept_thr_param_ops, + &zswap_accept_thr_percent, 0644); =20 /* * Enable/disable handling same-value filled pages (enabled by default). @@ -490,14 +507,16 @@ static struct zswap_pool *zswap_pool_find_get(char *t= ype, char *compressor) return NULL; } =20 -static unsigned long zswap_max_pages(void) +static void zswap_update_max_pages(void) { - return totalram_pages() * zswap_max_pool_percent / 100; + WRITE_ONCE(zswap_max_pages, + totalram_pages() * zswap_max_pool_percent / 100); } =20 -static unsigned long zswap_accept_thr_pages(void) +static void zswap_update_accept_thr_pages(void) { - return zswap_max_pages() * zswap_accept_thr_percent / 100; + WRITE_ONCE(zswap_accept_thr_pages, + READ_ONCE(zswap_max_pages) * zswap_accept_thr_percent / 100); } =20 unsigned long zswap_total_pages(void) @@ -684,6 +703,43 @@ static int zswap_enabled_param_set(const char *val, return ret; } =20 +static int __zswap_percent_param_set(const char *val, + const struct kernel_param *kp) +{ + unsigned int n; + int ret; + + ret =3D kstrtouint(val, 10, &n); + if (ret || n > 100) + return -EINVAL; + + return param_set_uint(val, kp); +} + +static int zswap_max_pool_param_set(const char *val, + const struct kernel_param *kp) +{ + int err =3D __zswap_percent_param_set(val, kp); + + if (!err) { + zswap_update_max_pages(); + zswap_update_accept_thr_pages(); + } + + return err; +} + +static int zswap_accept_thr_param_set(const char *val, + const struct kernel_param *kp) +{ + int err =3D __zswap_percent_param_set(val, kp); + + if (!err) + zswap_update_accept_thr_pages(); + + return err; +} + /********************************* * lru functions **********************************/ @@ -1305,10 +1361,6 @@ static void shrink_worker(struct work_struct *w) { struct mem_cgroup *memcg; int ret, failures =3D 0; - unsigned long thr; - - /* Reclaim down to the accept threshold */ - thr =3D zswap_accept_thr_pages(); =20 /* global reclaim will select cgroup in a round-robin fashion. */ do { @@ -1358,7 +1410,8 @@ static void shrink_worker(struct work_struct *w) break; resched: cond_resched(); - } while (zswap_total_pages() > thr); + /* Reclaim down to the accept threshold */ + } while (zswap_total_pages() > READ_ONCE(zswap_accept_thr_pages)); } =20 static int zswap_is_page_same_filled(void *ptr, unsigned long *value) @@ -1424,16 +1477,14 @@ bool zswap_store(struct folio *folio) =20 /* Check global limits */ cur_pages =3D zswap_total_pages(); - max_pages =3D zswap_max_pages(); - - if (cur_pages >=3D max_pages) { + if (cur_pages >=3D READ_ONCE(zswap_max_pages)) { zswap_pool_limit_hit++; zswap_pool_reached_full =3D true; goto reject; } =20 if (zswap_pool_reached_full) { - if (cur_pages > zswap_accept_thr_pages()) + if (cur_pages > READ_ONCE(zswap_accept_thr_pages)) goto reject; else zswap_pool_reached_full =3D false; @@ -1734,6 +1785,9 @@ static int zswap_setup(void) zswap_enabled =3D false; } =20 + zswap_update_max_pages(); + zswap_update_accept_thr_pages(); + if (zswap_debugfs_init()) pr_warn("debugfs initialization failed\n"); zswap_init_state =3D ZSWAP_INIT_SUCCEED; --=20 2.44.0.478.gd926399ef9-goog From nobody Sun Feb 8 20:34:13 2026 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EFE323754 for ; Fri, 5 Apr 2024 05:35:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295320; cv=none; b=TI67GtkImj3SrHaUBFTQgX1IHoMK6f/bXg1aD9Q2p5A3MgLGSBx+/BTi+uiEho7Fsqa+9WKJ0epcL4pRjJqK7szaB+lukNKvzsYoI7QUpdiLbBkBJVPdpLKHcRgeOKI1Vrh+c160teeB+j0nk0CMgNZzsYJDfxIYtUmyW/TTG4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295320; c=relaxed/simple; bh=5F9Bd2r28dJJtSqVJvAZgDM+tkC4MEPTNqJzfo5xl94=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=co+w8QEZpxaETuZD74gJXEhtLIfs0s1XwRawdKjfhWryEbdDK/KDDbVxyX7olYqkb9E04GtyDDOybaMdw9F3tjyZCDcLOoqP9DixyfWyWo5FeY/9nfNV0NV78VuWpaSP3jx5t90eTyJrtFW6NcUsrlmrb9CWMOe+52GuR5q3qyc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=3LJID+pE; arc=none smtp.client-ip=209.85.219.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="3LJID+pE" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6b26845cdso2671109276.3 for ; Thu, 04 Apr 2024 22:35:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1712295318; x=1712900118; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=WDqFLsTFGLxbu9w6SZiJvC7ASuSVfXA4IdBaekrBdf8=; b=3LJID+pEMcwH0yskP0DUVBV2i+K6M4YSiMLshgOUMvFPpVFyUnPs04ou2cP14RQ3fQ wc2zNRvL5OwymJ6/qLuZ3Sz39rM8NTEPIpuMzB+ZRrvcDdL/wcQ+ZoWh3ENe3QlPfWFM Izj0oxVMv8mf2suI4zInck5ABr5I7LC5BM/OI6zo5lP867H93VXMG10rPa0PaxrnNTFB EDAFXN/GFDZ4O4qkITUnQppisW6UUxykUEtc4RwF/d6xUgLylNyuR6uoerNRLwIpZHCG GkTwEMTfIj9E5N6khHxyNfPkT1sXacSfcQW36XlRi6HDqUNZtEOZLK9b0/fPvlULH6/f Bz/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712295318; x=1712900118; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WDqFLsTFGLxbu9w6SZiJvC7ASuSVfXA4IdBaekrBdf8=; b=QOdjZlZeJCJ+Z9xc8YNa83aNrj7uLKEtq75BMGewVyp0Q4RAmZ0F35DVrK5U1v9gOF MbW1pys+nu2hxoR4Xbj6lvLV4HeAzGMXW6cT29BCD/DV+RYkCluNfxawL5PTp1syBMTN yqU7j6XfkRw+Byn3AtHkdyF72JDy+sMim90tHmObYMLLeFBz9ro81f+hY6Kp7o2667xL Pu6ZQ97IrlCqQm+thxd15vK9swrbqgRpFDH2kXYXiIW3z7dDHVl3ZmluAC5UWddbDcqE HysiYZ+dgfx2crQUYPilUpeWY9ictZUDIeasKt97E579WNdGT16iE2UQT7bl4AJ5WWSt v+/A== X-Forwarded-Encrypted: i=1; AJvYcCWSSL1ykBC81KknABgiY7mSCmHoywIIDKZuSB7Cb/+uCCVjIWgxqzFIsZWR2t5rpxLZiJHLLoiouGhYwEwgYyBrEpeSKUy+xRM4PGfk X-Gm-Message-State: AOJu0YysFeC4Yittima2ESMUSW6pz+F6Lq+YG9wKvXVNXgXqpo/lIN5Z nI+2DUcrsZ9F3yCaBKpbh0U+l4F7yp9yVHOBRxn6hqaI1CP0yLWdUbJh2/W7vYgnsQBJcnvBn1J TnS6aZihqYYHBgDwziA== X-Google-Smtp-Source: AGHT+IEIkNqISvh3/kP7GIAdlqcFQuxDthw7sLxMpCyp0IlORn7H21arD9nnFY26GvXJUA85AaAzJMEQR86jOyJW X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a05:6902:1893:b0:dcc:5a91:aee9 with SMTP id cj19-20020a056902189300b00dcc5a91aee9mr112599ybb.7.1712295318409; Thu, 04 Apr 2024 22:35:18 -0700 (PDT) Date: Fri, 5 Apr 2024 05:35:08 +0000 In-Reply-To: <20240405053510.1948982-1-yosryahmed@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240405053510.1948982-1-yosryahmed@google.com> X-Mailer: git-send-email 2.44.0.478.gd926399ef9-goog Message-ID: <20240405053510.1948982-4-yosryahmed@google.com> Subject: [PATCH v2 3/5] mm: zswap: refactor limit checking from zswap_store() From: Yosry Ahmed To: Andrew Morton Cc: Johannes Weiner , Nhat Pham , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Refactor limit and acceptance threshold checking outside of zswap_store(). This code will be moved around in a following patch, so it would be cleaner to move a function call around. Signed-off-by: Yosry Ahmed Reviewed-by: Chengming Zhou Reviewed-by: Nhat Pham --- mm/zswap.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 832e3f56232f0..ab3cd43cdfc9d 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1444,6 +1444,20 @@ static void zswap_fill_page(void *ptr, unsigned long= value) memset_l(page, value, PAGE_SIZE / sizeof(unsigned long)); } =20 +static bool zswap_check_full(void) +{ + unsigned long cur_pages =3D zswap_total_pages(); + + if (cur_pages >=3D READ_ONCE(zswap_max_pages)) { + zswap_pool_limit_hit++; + zswap_pool_reached_full =3D true; + } else if (zswap_pool_reached_full && + cur_pages <=3D READ_ONCE(zswap_accept_thr_pages)) { + zswap_pool_reached_full =3D false; + } + return zswap_pool_reached_full; +} + bool zswap_store(struct folio *folio) { swp_entry_t swp =3D folio->swap; @@ -1452,7 +1466,6 @@ bool zswap_store(struct folio *folio) struct zswap_entry *entry, *old; struct obj_cgroup *objcg =3D NULL; struct mem_cgroup *memcg =3D NULL; - unsigned long max_pages, cur_pages; =20 VM_WARN_ON_ONCE(!folio_test_locked(folio)); VM_WARN_ON_ONCE(!folio_test_swapcache(folio)); @@ -1475,20 +1488,8 @@ bool zswap_store(struct folio *folio) mem_cgroup_put(memcg); } =20 - /* Check global limits */ - cur_pages =3D zswap_total_pages(); - if (cur_pages >=3D READ_ONCE(zswap_max_pages)) { - zswap_pool_limit_hit++; - zswap_pool_reached_full =3D true; + if (zswap_check_full()) goto reject; - } - - if (zswap_pool_reached_full) { - if (cur_pages > READ_ONCE(zswap_accept_thr_pages)) - goto reject; - else - zswap_pool_reached_full =3D false; - } =20 /* allocate entry */ entry =3D zswap_entry_cache_alloc(GFP_KERNEL, folio_nid(folio)); --=20 2.44.0.478.gd926399ef9-goog From nobody Sun Feb 8 20:34:13 2026 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 47BE525774 for ; Fri, 5 Apr 2024 05:35:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295322; cv=none; b=pyWZhdiNrWcs2eH3FQGy3tf+Fap93T5eabVgDQeNmtWAeRIy8UflIVdjPMRA+GO6Xd2dPh74VgciGRg21FmClCu3oXHgqZFYL1EQK+B9XmqIHL+ojHeu8LUGHBwBRioLGkAChzp0b7YHHPqS9eMtagVizQBbVWQQ35RFszHyw8w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295322; c=relaxed/simple; bh=OBu0XPUtNujGfTv9FqY2iHyyiyKuVEz2ju3MZe/grPw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=nbuIBm4GzT7GqxjC23zeExR2oqbgjqO1fXTB5bvLXEntpWuAjtTpnejhyJmt9ohzK4z7pqefYKuEx0qy1Hg6RwIO9c5XdaOVFhb0dYdb5jRPPQSHz6fu/7IGFF4n1PJnYhI1rt1/DvXSlujk0NkB7w1g2l1qVvJpbsiIl82LxM4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=K+8uXzf3; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="K+8uXzf3" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dce775fa8adso3101494276.1 for ; Thu, 04 Apr 2024 22:35:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1712295320; x=1712900120; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=JztYBciZAboPFg0UR8cifQAY1ELGwu5QR/HCIVJgmmg=; b=K+8uXzf3WSy28rVAsNxg+4n9zzs/W8BjIMbOLUpH6fppU9dM5GMHQMO9sJ2cGBOI4J esVT0FXsbjojvrQXuUYk7ZE4jDDO0cFKMIgCUzcRd6B/d96S/A2aPRDDPqP1OytZ9+jJ LjAeX+0iV3iEWVir4P9Aa8QpMJlZT1zQJAPf4X2jA2mwxZhF5KEMJX2BoKdHsZeUQcAD dzyhoeFP/Cl7P2coj3Yg942u0UYh87FfzHdRvRNyCnNviwUBeFnzEgxlHWjgUdrWV4Gy HTfMP4Eb83ZYQrZCQlkZT7ADfKptlrMHY67hESpjV50+4V2CQcNuAk4x2VZ+2z4kSCVi 1ucg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712295320; x=1712900120; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JztYBciZAboPFg0UR8cifQAY1ELGwu5QR/HCIVJgmmg=; b=Fpoowfav/+BwiLpX3Cm/OZ+dI8sLrodwJbt9/NSlziA+NmEHeJB/WZZKMIbtYFgUYA cL2jBUpCsU5GEgHVMjwPGNAiQIg14D6Iy6pXEx5V5ciLZn2EBEIG8f350gvwFwfaZp15 N/07UXEBfFxPidppWK4VYM5KTN9QMYusEmHMDVpzViipJ4LbkwN4PS9jh+UVvdPdBdfV r4g+NdzA6Cu0kZHV3ZrsU9943C9mx/XAE4lRMiPX2gIWWXEFiVKyjj6VVOH4U0BMUgI9 DS2fu/wDgDodBY+ztAMSguTNaDFRNsYwVgI/LTyRmyeBSTJU7pSmRmcAOJ11ThRh/Vd3 lgwg== X-Forwarded-Encrypted: i=1; AJvYcCV+Xbj5kfaAjQQY2X46f/MeIcV8XN9Nw3Q8LgTgln+Q+YxgOv8YtPtlYElQ3OOv7BDFbTkjRH9fXUqwlWXsvtKQ92gAj83IRvVMH158 X-Gm-Message-State: AOJu0YxBjlSaEn79d8wTsmCQP6uccACPJxOemQbCA2K2AhRJ/QlJVXRE T6pmQlKbyaL3Q3/GSP1BBzDdyA4JW/4TiP/Ti2HbTVi2qmAzlPF71Td2avPW0Oa28CccHEJTlRD caJWbnirPHi5e3h3tyA== X-Google-Smtp-Source: AGHT+IHCdA/5X8U1gt0bJVEbJvMDtws+40Zw9BGN0s2+vFjCACLLPLTtlCpMI+FJ2Yy+eJlQHuE46wlM5C0M0oGx X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a25:f30f:0:b0:dc6:cafd:dce5 with SMTP id c15-20020a25f30f000000b00dc6cafddce5mr105083ybs.12.1712295320201; Thu, 04 Apr 2024 22:35:20 -0700 (PDT) Date: Fri, 5 Apr 2024 05:35:09 +0000 In-Reply-To: <20240405053510.1948982-1-yosryahmed@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240405053510.1948982-1-yosryahmed@google.com> X-Mailer: git-send-email 2.44.0.478.gd926399ef9-goog Message-ID: <20240405053510.1948982-5-yosryahmed@google.com> Subject: [PATCH v2 4/5] mm: zswap: move more same-filled pages checks outside of zswap_store() From: Yosry Ahmed To: Andrew Morton Cc: Johannes Weiner , Nhat Pham , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Currently, zswap_store() checks zswap_same_filled_pages_enabled, kmaps the folio, then calls zswap_is_page_same_filled() to check the folio contents. Move this logic into zswap_is_page_same_filled() as well (and rename it to use 'folio' while we are at it). This makes zswap_store() cleaner, and makes following changes to that logic contained within the helper. While we are at it, rename the insert_entry label to store_entry to match xa_store(). No functional change intended. Signed-off-by: Yosry Ahmed Reviewed-by: Nhat Pham Reviewed-by: Chengming Zhou Acked-by: Johannes Weiner --- mm/zswap.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index ab3cd43cdfc9d..13869d18c13bd 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -1414,26 +1414,32 @@ static void shrink_worker(struct work_struct *w) } while (zswap_total_pages() > READ_ONCE(zswap_accept_thr_pages)); } =20 -static int zswap_is_page_same_filled(void *ptr, unsigned long *value) +static bool zswap_is_folio_same_filled(struct folio *folio, unsigned long = *value) { unsigned long *page; unsigned long val; unsigned int pos, last_pos =3D PAGE_SIZE / sizeof(*page) - 1; + bool ret =3D false; =20 - page =3D (unsigned long *)ptr; + if (!zswap_same_filled_pages_enabled) + return false; + + page =3D kmap_local_folio(folio, 0); val =3D page[0]; =20 if (val !=3D page[last_pos]) - return 0; + goto out; =20 for (pos =3D 1; pos < last_pos; pos++) { if (val !=3D page[pos]) - return 0; + goto out; } =20 *value =3D val; - - return 1; + ret =3D true; +out: + kunmap_local(page); + return ret; } =20 static void zswap_fill_page(void *ptr, unsigned long value) @@ -1466,6 +1472,7 @@ bool zswap_store(struct folio *folio) struct zswap_entry *entry, *old; struct obj_cgroup *objcg =3D NULL; struct mem_cgroup *memcg =3D NULL; + unsigned long value; =20 VM_WARN_ON_ONCE(!folio_test_locked(folio)); VM_WARN_ON_ONCE(!folio_test_swapcache(folio)); @@ -1498,19 +1505,11 @@ bool zswap_store(struct folio *folio) goto reject; } =20 - if (zswap_same_filled_pages_enabled) { - unsigned long value; - u8 *src; - - src =3D kmap_local_folio(folio, 0); - if (zswap_is_page_same_filled(src, &value)) { - kunmap_local(src); - entry->length =3D 0; - entry->value =3D value; - atomic_inc(&zswap_same_filled_pages); - goto insert_entry; - } - kunmap_local(src); + if (zswap_is_folio_same_filled(folio, &value)) { + entry->length =3D 0; + entry->value =3D value; + atomic_inc(&zswap_same_filled_pages); + goto store_entry; } =20 if (!zswap_non_same_filled_pages_enabled) @@ -1533,7 +1532,7 @@ bool zswap_store(struct folio *folio) if (!zswap_compress(folio, entry)) goto put_pool; =20 -insert_entry: +store_entry: entry->swpentry =3D swp; entry->objcg =3D objcg; =20 --=20 2.44.0.478.gd926399ef9-goog From nobody Sun Feb 8 20:34:13 2026 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0EBC228E34 for ; Fri, 5 Apr 2024 05:35:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295324; cv=none; b=kWLQyXrieUrsUQyLIyl4Ta4rxpHGrYfkFeEtl/pti4z8ShOo8NwumetJTDP6/CHytp1fOWGdmQ/CJpOKdLeeRA5TFS01nXXHgNHGvz4u3CYioPf1DyDXPGmgl5HbBxuHvqEtQs4k3KBGYp+Yxz3klaX12pKiYS6IcubDoas2N2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712295324; c=relaxed/simple; bh=ej6MR+jE0o5Q+Vf9YGysbx/68DDREaEp7teXTicm5SM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=O8WKZdAFcHnTOBiqwOlV72uHNagnYGl2qMwiUWVdHrvx+fcEcGpbff1dljljxMXUVtiL0KWOpf96NyqpqJ3/XJI7++RT80Q1k7crosTd+xi/xbqEj0HHgRApmwyszPRH3D2XkwGEajmYJyLE+3nKrkpDgFtEPbsEwULHxI5Q0sA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=NB+shMKC; arc=none smtp.client-ip=209.85.219.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--yosryahmed.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="NB+shMKC" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc647f65573so3323145276.2 for ; Thu, 04 Apr 2024 22:35:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1712295322; x=1712900122; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=lZdonMx397+2pSb+glDTuU5D6tQtRdHssQDj6gK5t2I=; b=NB+shMKCQ+6yvBaUru6SN2XxIBzlxf55phBTD9ETNe5HI0Ych40GsH8Qe0EcVu4WPV ygJxynuON0Dd8dccF7ux5tWzT7LjrpGFz77MfeetVVZDhru/TdhxspLJHl7ndjiE4lPy gNg+2JhZFU7DMlxGuTYjP5RWO2t6U13VTlHCvKvDsGHr64ZX2Wszw7PaN0bMmihoAWE2 VeUtDzyHUIJlAUnNlb5JxuP6qSK3F5kENTEx0kI6Cf/2zdzR+HNALpaTzGxfMxsmurto Y+banMkZdnonVn73DHT8ac4NclyvJTUn+x/fZAR7yNQCf+RTC7+18SCDyipWIrey6u1B MHow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712295322; x=1712900122; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lZdonMx397+2pSb+glDTuU5D6tQtRdHssQDj6gK5t2I=; b=BdxoHNQljNFkNXhtR0Yn6u8oM4tcOqC/+y2ylaNTefkWS1RjMUwIXhJpm8N2GEEfaq j7+Tx7A/I1WtBl88N29F+2ADCJ0zFvCT4QL0dsX8cs+xtQomn77CP8M6+3oLlqhBbQ7m RjBXLyQgIiIi5kyqL6CyvEZSsjDuMh+oPzGsojp4Nm2nTOvpQw0Dn0gwPCOfg/EpchWm 4chszmOdwvvC4Uam9uj9HvzoIQGv90tGiwXUfnDWFxub+4gLeaJjnuQCugOHt5vzTfPS E4pheX+YfrIKhMBsamaMbz6jhVxRfgbiBsuVLXLWO5borTyYejSBUlfLjfyMbjv2PIup zx9w== X-Forwarded-Encrypted: i=1; AJvYcCUn9L54l6dy97iHPCfs3F339N2NYGDgm0yXciwGYnkCVeuJnQEJ3GOA7oVXZMoi4SVwr6nbcCZhdaK++HVytg8GvVGcU//r74m9ldOE X-Gm-Message-State: AOJu0YzL6Ikhli3sEjkHNIVa1zHUJEa4YrGunpZeI2xwPoRUVWq7bed3 XX+UO7Z8llSha0tWV8RGCh389jRVR/5x58z7o4/pG6j/DwGJWnylH4xQ2mlwEO/Eu6jXprXWSGQ BdUx9MCydirpKSqzVlg== X-Google-Smtp-Source: AGHT+IETG5LR7hNPprfABruUGpnm2Pwpk94U38LlqopJDrjx8AYajOaTbPkYn8vPcJdFb7ROfhozscrxJuJ96B7L X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:20:ed76:c0a8:29b4]) (user=yosryahmed job=sendgmr) by 2002:a05:6902:1882:b0:dc6:fec4:1c26 with SMTP id cj2-20020a056902188200b00dc6fec41c26mr100165ybb.1.1712295322064; Thu, 04 Apr 2024 22:35:22 -0700 (PDT) Date: Fri, 5 Apr 2024 05:35:10 +0000 In-Reply-To: <20240405053510.1948982-1-yosryahmed@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240405053510.1948982-1-yosryahmed@google.com> X-Mailer: git-send-email 2.44.0.478.gd926399ef9-goog Message-ID: <20240405053510.1948982-6-yosryahmed@google.com> Subject: [PATCH v2 5/5] mm: zswap: remove same_filled module params From: Yosry Ahmed To: Andrew Morton Cc: Johannes Weiner , Nhat Pham , Chengming Zhou , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Yosry Ahmed Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" These knobs offer more fine-grained control to userspace than needed and directly expose/influence kernel implementation; remove them. For disabling same_filled handling, there is no logical reason to refuse storing same-filled pages more efficiently and opt for compression. Scanning pages for patterns may be an argument, but the page contents will be read into the CPU cache anyway during compression. Also, removing the same_filled handling code does not move the needle significantly in terms of performance anyway [1]. For disabling non_same_filled handling, it was added when the compressed pages in zswap were not being properly charged to memcgs, as workloads could escape the accounting with compression [2]. This is no longer the case after commit f4840ccfca25 ("zswap: memcg accounting"), and using zswap without compression does not make much sense. [1]https://lore.kernel.org/lkml/CAJD7tkaySFP2hBQw4pnZHJJwe3bMdjJ1t9VC2VJd= =3Dkhn1_TXvA@mail.gmail.com/ [2]https://lore.kernel.org/lkml/19d5cdee-2868-41bd-83d5-6da75d72e940@maciej= .szmigiero.name/ Signed-off-by: Yosry Ahmed Acked-by: Johannes Weiner Reviewed-by: Chengming Zhou Reviewed-by: Nhat Pham --- mm/zswap.c | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/mm/zswap.c b/mm/zswap.c index 13869d18c13bd..b738435215218 100644 --- a/mm/zswap.c +++ b/mm/zswap.c @@ -140,19 +140,6 @@ static const struct kernel_param_ops zswap_accept_thr_= param_ops =3D { module_param_cb(accept_threshold_percent, &zswap_accept_thr_param_ops, &zswap_accept_thr_percent, 0644); =20 -/* - * Enable/disable handling same-value filled pages (enabled by default). - * If disabled every page is considered non-same-value filled. - */ -static bool zswap_same_filled_pages_enabled =3D true; -module_param_named(same_filled_pages_enabled, zswap_same_filled_pages_enab= led, - bool, 0644); - -/* Enable/disable handling non-same-value filled pages (enabled by default= ) */ -static bool zswap_non_same_filled_pages_enabled =3D true; -module_param_named(non_same_filled_pages_enabled, zswap_non_same_filled_pa= ges_enabled, - bool, 0644); - /* Number of zpools in zswap_pool (empirically determined for scalability)= */ #define ZSWAP_NR_ZPOOLS 32 =20 @@ -1421,9 +1408,6 @@ static bool zswap_is_folio_same_filled(struct folio *= folio, unsigned long *value unsigned int pos, last_pos =3D PAGE_SIZE / sizeof(*page) - 1; bool ret =3D false; =20 - if (!zswap_same_filled_pages_enabled) - return false; - page =3D kmap_local_folio(folio, 0); val =3D page[0]; =20 @@ -1512,9 +1496,6 @@ bool zswap_store(struct folio *folio) goto store_entry; } =20 - if (!zswap_non_same_filled_pages_enabled) - goto freepage; - /* if entry is successfully added, it keeps the reference */ entry->pool =3D zswap_pool_current_get(); if (!entry->pool) --=20 2.44.0.478.gd926399ef9-goog