Re: [PATCH v2 0/5] ksm: support tracking KSM-placed zero-pages

From: Claudio Imbrenda
Date: Mon Oct 10 2022 - 05:24:35 EST


On Sun, 9 Oct 2022 02:18:16 +0000
xu.xin.sc@xxxxxxxxx wrote:

> From: xu xin <xu.xin16@xxxxxxxxxx>
>
> Before enabling use_zero_pages by setting /sys/kernel/mm/ksm/
> use_zero_pages to 1, pages_sharing of KSM is basically accurate. But
> when enabling use_zero_pages, all empty pages that are merged with
> kernel zero page are not counted in pages_sharing or pages_shared.
> That is because these empty pages are merged with zero-pages then no
> longer managed by KSM, which leads to two issues at least:
>
> 1) MADV_UNMERGEABLE and other ways to trigger unsharing will *not*
> unshare the shared zeropage as placed by KSM (which is against the
> MADV_UNMERGEABLE documentation at least); see the link:
> https://lore.kernel.org/lkml/4a3daba6-18f9-d252-697c-197f65578c44@xxxxxxxxxx/
>
> 2) we cannot know how many pages are zero pages placed by KSM when
> enabling use_zero_pages, which leads to KSM not being transparent
> with all actual merged pages by KSM.
>
> With the patch series, we can unshare zero-pages(KSM-placed) accurately
> and count ksm zero pages.

why are you trying so hard to fix something that is not broken?

can't you just avoid using use_zero_pages?

why is it so important to know how many zero pages have been merged?
and why do you want to unmerge them?

the important thing is that the sysadmin knows how much memory would be
needed to do the unmerge, and that information is already there.

>
> ---
> v1->v2:
>
> [patch 4/5] fix build warning, mm/ksm.c:550, misleading indentation; statement
> 'rmap_item->mm->ksm_zero_pages_sharing--;' is not part of the previous 'if'.
>
>
>
> *** BLURB HERE ***
>
> xu xin (5):
> ksm: abstract the function try_to_get_old_rmap_item
> ksm: support unsharing zero pages placed by KSM
> ksm: count all zero pages placed by KSM
> ksm: count zero pages for each process
> ksm: add zero_pages_sharing documentation
>
> Documentation/admin-guide/mm/ksm.rst | 10 +-
> fs/proc/base.c | 1 +
> include/linux/mm_types.h | 7 +-
> mm/ksm.c | 177 +++++++++++++++++++++------
> 4 files changed, 157 insertions(+), 38 deletions(-)
>