From: Yosry Ahmed <yosryahmed@google.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>,
Nhat Pham <nphamcs@gmail.com>,
Chengming Zhou <chengming.zhou@linux.dev>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Yosry Ahmed <yosryahmed@google.com>
Subject: [PATCH v1 5/5] mm: zswap: do not check the global limit for same-filled pages
Date: Fri, 5 Apr 2024 01:35:47 +0000 [thread overview]
Message-ID: <20240405013547.1859126-6-yosryahmed@google.com> (raw)
In-Reply-To: <20240405013547.1859126-1-yosryahmed@google.com>
When storing same-filled pages, there is no point of checking the global
zswap limit as storing them does not contribute toward the limit Move
the limit checking after same-filled pages are handled.
This avoids having same-filled pages skip zswap and go to disk swap if
the limit is hit. It also avoids queueing the shrink worker, which may
end up being unnecessary if the zswap usage goes down on its own before
another store is attempted.
Ignoring the memcg limits as well for same-filled pages is more
controversial. Those limits are more a matter of per-workload policy.
Some workloads disable zswap completely by setting memory.zswap.max = 0,
and those workloads could start observing some zswap activity even after
disabling zswap. Although harmless, this could cause confusion to
userspace. Remain conservative and keep respecting those limits.
Signed-off-by: Yosry Ahmed <yosryahmed@google.com>
---
mm/zswap.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/mm/zswap.c b/mm/zswap.c
index a85c9235d19d3..8763a1e938441 100644
--- a/mm/zswap.c
+++ b/mm/zswap.c
@@ -1404,6 +1404,7 @@ bool zswap_store(struct folio *folio)
struct zswap_entry *entry, *old;
struct obj_cgroup *objcg = NULL;
struct mem_cgroup *memcg = NULL;
+ bool same_filled = false;
unsigned long value;
VM_WARN_ON_ONCE(!folio_test_locked(folio));
@@ -1427,7 +1428,8 @@ bool zswap_store(struct folio *folio)
mem_cgroup_put(memcg);
}
- if (zswap_check_full())
+ same_filled = zswap_is_folio_same_filled(folio, &value);
+ if (!same_filled && zswap_check_full())
goto reject;
/* allocate entry */
@@ -1437,7 +1439,7 @@ bool zswap_store(struct folio *folio)
goto reject;
}
- if (zswap_is_folio_same_filled(folio, &value)) {
+ if (same_filled) {
entry->length = 0;
entry->value = value;
atomic_inc(&zswap_same_filled_pages);
--
2.44.0.478.gd926399ef9-goog
next prev parent reply other threads:[~2024-04-05 1:36 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-05 1:35 [PATCH v1 0/5] zswap same-filled and limit checking cleanups Yosry Ahmed
2024-04-05 1:35 ` [PATCH v1 1/5] mm: zswap: always shrink in zswap_store() if zswap_pool_reached_full Yosry Ahmed
2024-04-05 1:35 ` [PATCH v1 2/5] mm: zswap: refactor limit checking from zswap_store() Yosry Ahmed
2024-04-05 2:44 ` Johannes Weiner
2024-04-05 4:15 ` Yosry Ahmed
2024-04-05 1:35 ` [PATCH v1 3/5] mm: zswap: move more same-filled pages checks outside of zswap_store() Yosry Ahmed
2024-04-05 2:34 ` Johannes Weiner
2024-04-05 1:35 ` [PATCH v1 4/5] mm: zswap: remove same_filled module params Yosry Ahmed
2024-04-05 2:35 ` Johannes Weiner
2024-04-05 1:35 ` Yosry Ahmed [this message]
2024-04-05 2:54 ` [PATCH v1 5/5] mm: zswap: do not check the global limit for same-filled pages Johannes Weiner
2024-04-05 4:19 ` Yosry Ahmed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240405013547.1859126-6-yosryahmed@google.com \
--to=yosryahmed@google.com \
--cc=akpm@linux-foundation.org \
--cc=chengming.zhou@linux.dev \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=nphamcs@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox