On Tue, 14 Jun 2016 17:17:37 +0800 <[email protected]> wrote:

> From: z00281421 <[email protected]>
> 
> more mapcount page as kpage could reduce total replacement 
> times than fewer mapcount one when ksmd scan and replace 
> among forked pages later.
> 

Hopefully Hugh will be able to have a think about this.

> --- a/mm/ksm.c
> +++ b/mm/ksm.c
> @@ -1094,6 +1094,21 @@ static struct page *try_to_merge_two_pages(struct 
> rmap_item *rmap_item,
>  {
>       int err;
>  
> +     /*
> +      * select more mapcount page as kpage
> +      */
> +     if (page_mapcount(page) < page_mapcount(tree_page)) {
> +             struct page *tmp_page;
> +             struct rmap_item *tmp_rmap_item;
> +
> +             tmp_page = page;
> +             page = tree_page;
> +             tree_page = tmp_page;
> +             tmp_rmap_item = rmap_item;
> +             rmap_item = tree_rmap_item;
> +             tree_rmap_item = tmp_rmap_item;
> +     }

kernel.h provides a swap() macro.

>       err = try_to_merge_with_ksm_page(rmap_item, page, NULL);
>       if (!err) {
>               err = try_to_merge_with_ksm_page(tree_rmap_item,

Reply via email to