On 11/13/23 5:26 PM, David Hildenbrand wrote:
On 13.11.23 10:05, Xu Yu wrote:
In the anonymous collapse path, khugepaged collapses pte-mapped
hugepages by allocating and copying to a new hugepage, which is
suboptimally.
In fact, we only need to update the mapping page tables for anonymous
pte-mapped THPs, in the same way as file/shmem-backed pte-mapped THPs,
as shown in commit 58ac9a8993a1 ("mm/khugepaged: attempt to map
file/shmem-backed pte-mapped THPs by pmds").
Somewhere along that patch set discussion, there was a discussion about
how to deal with PageAnonExclusive properly.
Quite a lot of information is documented in:
commit dee2ad120571f38433211098cd6b95a59bdfc8c7
Author: David Hildenbrand <david@xxxxxxxxxx>
Date: Wed Jan 4 15:49:05 2023 +0100
selftests/vm: cow: add COW tests for collapsing of PTE-mapped anon THP
Currently, anonymous PTE-mapped THPs cannot be collapsed in-place:
collapsing (e.g., via MADV_COLLAPSE) implies allocating a fresh THP and
mapping that new THP via a PMD: as it's a fresh anon THP, it will get the
exclusive flag set on the head page and everybody is happy.
...
I purely speculate that you didn't consider it and got it wrong, sorry :P
As you said, I did not consider it. Actually, I didn't even know that. :(
Fortunately, I wrote a test case for that where it's documented (above)
Thanks very much! I will dig into it.
tools/testing/selftests/mm/cow.c tests:
# [RUN] Basic COW after fork() when collapsing before fork()
ok 169 No leak from parent into child
# [RUN] Basic COW after fork() when collapsing after fork() (fully shared)
ok 170 # SKIP MADV_COLLAPSE failed: Invalid argument
# [RUN] Basic COW after fork() when collapsing after fork() (lower shared)
ok 171 No leak from parent into child
# [RUN] Basic COW after fork() when collapsing after fork() (upper shared)
ok 172 No leak from parent into child
If your implementation supports MADV_COLLAPSE, it might reveal any problems.
--
Thanks,
Yu