From: Rik van Riel <riel@redhat.com>
To: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
Larry Woodman <lwoodman@redhat.com>
Subject: Re: [early RFC][PATCH 8/7] vmscan: Don't deactivate many touched page
Date: Mon, 07 Dec 2009 13:10:27 -0500 [thread overview]
Message-ID: <4B1D4513.1020206@redhat.com> (raw)
In-Reply-To: <20091207203427.E955.A69D9226@jp.fujitsu.com>
On 12/07/2009 06:36 AM, KOSAKI Motohiro wrote:
>
> Andrea, Can you please try following patch on your workload?
>
>
> From a7758c66d36a136d5fbbcf0b042839445f0ca522 Mon Sep 17 00:00:00 2001
> From: KOSAKI Motohiro<kosaki.motohiro@jp.fujitsu.com>
> Date: Mon, 7 Dec 2009 18:37:20 +0900
> Subject: [PATCH] [RFC] vmscan: Don't deactivate many touched page
>
> Changelog
> 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
I like the concept and your changes, and really only
have a few small nitpicks :)
First, the VM uses a mix of "referenced", "accessed" and
"young". We should probably avoid adding "active" to that
mix, and may even want to think about moving to just one
or two terms :)
> +#define MAX_YOUNG_BIT_CLEARED 64
> +/*
> + * if VM pressure is low and the page have too many active mappings, there isn't
> + * any reason to continue clear young bit of other ptes. Otherwise,
> + * - Makes meaningless cpu wasting, many touched page sholdn't be reclaimed.
> + * - Makes lots IPI for pte change and it might cause another sadly lock
> + * contention.
> + */
If VM pressure is low and the page has lots of active users, we only
clear up to MAX_YOUNG_BIT_CLEARED accessed bits at a time. Clearing
accessed bits takes CPU time, needs TLB invalidate IPIs and could
cause lock contention. Since a heavily shared page is very likely
to be used again soon, the cost outweighs the benefit of making such
a heavily shared page a candidate for eviction.
> diff --git a/mm/rmap.c b/mm/rmap.c
> index cfda0a0..f4517f3 100644
> --- a/mm/rmap.c
> +++ b/mm/rmap.c
> @@ -473,6 +473,21 @@ static int wipe_page_reference_anon(struct page *page,
> ret = wipe_page_reference_one(page, refctx, vma, address);
> if (ret != SWAP_SUCCESS)
> break;
> + if (too_many_young_bit_found(refctx)) {
> + LIST_HEAD(tmp_list);
> +
> + /*
> + * The scanned ptes move to list tail. it help every ptes
> + * on this page will be tested by ptep_clear_young().
> + * Otherwise, this shortcut makes unfair thing.
> + */
> + list_cut_position(&tmp_list,
> + &vma->anon_vma_node,
> + &anon_vma->head);
> + list_splice_tail(&tmp_list,&vma->anon_vma_node);
> + ret = SWAP_AGAIN;
> + break;
> + }
I do not understand the unfairness here, since all a page needs
to stay on the active list is >64 referenced PTEs. It does not
matter which of the PTEs mapping the page were recently referenced.
However, rotating the anon vmas around may help spread out lock
pressure in the VM and help things that way, so the code looks
useful to me.
In short, you can give the next version of this patch my
Reviewed-by: Rik van Riel <riel@redhat.com>
All I have are comment nitpicks :)
--
All rights reversed.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-12-07 18:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-04 8:40 [RFC][PATCH 0/7] some page_referenced() improvement KOSAKI Motohiro
2009-12-04 8:41 ` [PATCH 1/7] Replace page_mapping_inuse() with page_mapped() KOSAKI Motohiro
2009-12-07 11:27 ` Johannes Weiner
2009-12-04 8:42 ` [PATCH 2/7] Introduce __page_check_address KOSAKI Motohiro
2009-12-06 14:55 ` Rik van Riel
2009-12-04 8:42 ` [PATCH 3/7] VM_LOCKED check don't need pte lock KOSAKI Motohiro
2009-12-06 19:41 ` Rik van Riel
2009-12-04 8:43 ` [PATCH 4/7] Replace page_referenced() with wipe_page_reference() KOSAKI Motohiro
2009-12-06 20:31 ` Rik van Riel
2009-12-04 8:44 ` [PATCH 5/7] Don't deactivate the page if trylock_page() is failed KOSAKI Motohiro
2009-12-06 20:34 ` Rik van Riel
2009-12-04 8:45 ` [PATCH 6/7] wipe_page_reference return SWAP_AGAIN if VM pressulre is low and lock contention is detected KOSAKI Motohiro
2009-12-06 21:01 ` Rik van Riel
2009-12-04 8:46 ` [PATCH 7/7] Try to mark PG_mlocked if wipe_page_reference find VM_LOCKED vma KOSAKI Motohiro
2009-12-06 21:03 ` Rik van Riel
2009-12-07 9:25 ` [RFC][PATCH 0/7] some page_referenced() improvement KOSAKI Motohiro
2009-12-07 11:36 ` [early RFC][PATCH 8/7] vmscan: Don't deactivate many touched page KOSAKI Motohiro
2009-12-07 18:10 ` Rik van Riel [this message]
2009-12-08 6:27 ` KOSAKI Motohiro
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=4B1D4513.1020206@redhat.com \
--to=riel@redhat.com \
--cc=aarcange@redhat.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lwoodman@redhat.com \
/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