From: David Hildenbrand <david@redhat.com>
To: craftfever@murena.io, akpm@linux-foundation.org,
xu.xin16@zte.com.cn, chengming.zhou@linux.dev
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
regressions@lists.linux.dev
Subject: Re: [Regerssion] [KSM] KSM CPU overhead in 6.16+ kernel compared to <=6.15 versions ("folio_walk_start" kernel object overhead)
Date: Mon, 13 Oct 2025 12:18:44 +0200 [thread overview]
Message-ID: <423de7a3-1c62-4e72-8e79-19a6413e420c@redhat.com> (raw)
In-Reply-To: <8e458538-69dc-4c0f-a25b-0c85ce1e866e@redhat.com>
On 13.10.25 11:52, David Hildenbrand wrote:
> On 13.10.25 11:22, craftfever@murena.io wrote:
>
> Hi,
>
>> I've posted about that problem already on bigzilla (#220599), but maintainers asked to post issues on maillist.
>> The problem with freezes during KSM page scanning with certain processes like Chromium with huge virtual memory size amount was fized in 6.17.1 compared to 6.16.x/6.17, but problem with huge CPU overhead is present there. Compared to Linux <=6.15, where the overhead is much lighter anad there no much CPU consuming during KSM scanning, there is "folio_walk_start" kernel object is present (which I reviewed with "perf top" command) that is not present in versions <=6.15 during KSM work and which is in work starting from Linux 6.16. This method very resource-consuming compared to algorithm used in <=6.15 versions. Is there a kernel parameter to disable it or it needs more optimization?
>
> I doubt hat it has a lot to do with folio_walk_start(), that's just a
> simple page table walk replacing the previous walk based on follow_page().
>
> So that's why you would suddenly spot it in perf top -- before commit
> b1d3e9bbccb4 ("mm/ksm: convert scan_get_next_rmap_item() from
> follow_page() to folio_walk") we would have used follow_page().
>
> Do you see any kernel splats / soft-lockups?
>
> I can see that in commit b1d3e9bbccb4 I removed a cond_resched(). maybe
> that's why it's a problem in you kernel config.
Looking again, no, that's not the case. We do a cond_resched() after
every page we looked up.
Also, b1d3e9bbccb4 was introduced in v6.12 already. Regarding
folio_walk_start(), also nothing major changed ever since v6.12.
Looking at scan_get_next_rmap_item(). I guess we might hold the mmap
lock for quite a long time (if we're iterating large areas where there
are no suitable pages mapped -- very large sparse areas).
That would explain why we end up calling folio_walk_start() that frequently.
But nothing really changed in that regard lately in KSM code.
What we probably should be doing, is give up the mmap lock after
scanning a certain size. Or better, switch to per-VMA locks if possible.
Also, looking up each address is highly inefficient if we end up having
large empty areas. A range-walk function would be much better suited for
that, so we can just jump over holes completely.
But anyhow, nothing seems to have changed ever since 6.15 AFAIKT, so I'm
not really sure what's going on here. Likely it's unrelated to KSM changes.
--
Cheers
David / dhildenb
next prev parent reply other threads:[~2025-10-13 10:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-13 9:22 craftfever
2025-10-13 9:52 ` David Hildenbrand
2025-10-13 10:18 ` David Hildenbrand [this message]
[not found] <34d27471-80a4-49f8-b6cb-f2e51518d9ea@airmail.cc>
2025-10-13 18:55 ` David Hildenbrand
[not found] ` <46d26246-5bd5-43f7-b1a4-dc721f717413@airmail.cc>
2025-10-13 19:58 ` David Hildenbrand
2025-10-14 7:59 ` David Hildenbrand
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=423de7a3-1c62-4e72-8e79-19a6413e420c@redhat.com \
--to=david@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=chengming.zhou@linux.dev \
--cc=craftfever@murena.io \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=regressions@lists.linux.dev \
--cc=xu.xin16@zte.com.cn \
/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