Re: [RFC][PATCH v2 8/8] Don't deactivate many touched page

Minchan Kim
2009-12-11T02:11:35Z

Hi, Kosaki.

On Thu, Dec 10, 2009 at 4:35 PM, KOSAKI Motohiro
<kosaki.motohiro@jp.fujitsu.com> wrote:
> Changelog
>  o from v1
>   - Fix comments.
>   - Rename too_many_young_bit_found() with too_many_referenced()
>     [as Rik's mention].
>  o from andrea's original patch
>   - Rebase topon my patches.
>   - Use list_cut_position/list_splice_tail pair instead
>     list_del/list_add to make pte scan fairness.
>   - Only use max young threshold when soft_try is true.
>     It avoid wrong OOM sideeffect.
>   - Return SWAP_AGAIN instead successful result if max
>     young threshold exceed. It prevent the pages without clear
>     pte young bit will be deactivated wrongly.
>   - Add to treat ksm page logic
>
> Many shared and frequently used page don't need deactivate and
> try_to_unamp(). It's pointless while VM pressure is low, the page
> might reactivate soon. it's only makes cpu wasting.
>
> Then, This patch makes to stop pte scan if wipe_page_reference()
> found lots young pte bit.
>
> Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
> Reviewed-by: Rik van Riel <riel@redhat.com>
> ---
>  include/linux/rmap.h |   18 ++++++++++++++++++
>  mm/ksm.c             |    4 ++++
>  mm/rmap.c            |   19 +++++++++++++++++++
>  3 files changed, 41 insertions(+), 0 deletions(-)
>
> diff --git a/include/linux/rmap.h b/include/linux/rmap.h
> index 499972e..ddf2578 100644
> --- a/include/linux/rmap.h
> +++ b/include/linux/rmap.h
> @@ -128,6 +128,24 @@ int wipe_page_reference_one(struct page *page,
>                            struct page_reference_context *refctx,
>                            struct vm_area_struct *vma, unsigned long address);
>
> +#define MAX_YOUNG_BIT_CLEARED 64
> +/*

This idea is good at embedded system which don't have access bit by hardware.

Such system emulates access bit as minor page fault AFAIK.
It means when VM clears young bit, kernel mark page table as non-permission
or something for refaulting.
So when next touch happens that address, kernel can do young bit set again.
It would be rather costly operation than one which have access bit by hardware.

So this idea is good in embedded system.
But 64 is rather big. many embedded system don't have many processes.
So I want to scale this number according to memory size like
inactive_raio for example.

Thanks for good idea and effort. :)

--
Kind regards,
Minchan Kim