Re: [RFC] respect the referenced bit of KVM guest pages?
From: Wu Fengguang <hidden>
Date: 2009-08-19 13:24:36
Also in:
lkml
On Wed, Aug 19, 2009 at 08:25:56PM +0800, Minchan Kim wrote:
On Wed, Aug 19, 2009 at 9:10 PM, Wu Fengguang[off-list ref] wrote:quoted
On Wed, Aug 19, 2009 at 08:05:19PM +0800, KOSAKI Motohiro wrote:quoted
quoted
quoted
page_referenced_file? I think we should change page_referenced().Yeah, good catch.quoted
Instead, How about this? ============================================== Subject: [PATCH] mm: stop circulating of referenced mlocked pages Currently, mlock() systemcall doesn't gurantee to mark the page PG_MlockedA A A A A A A A A A A A A A A A A A A A A A A A A A mark PG_mlockedquoted
because some race prevent page grabbing. In that case, instead vmscan move the page to unevictable lru. However, Recently Wu Fengguang pointed out current vmscan logic isn't so efficient. mlocked page can move circulatly active and inactive list because vmscan check the page is referenced _before_ cull mlocked page. Plus, vmscan should mark PG_Mlocked when cull mlocked page.A A A A A A A A A A A A A PG_mlockedquoted
Otherwise vm stastics show strange number. This patch does that.Reviewed-by: Wu Fengguang <redacted>Thanks.quoted
quoted
Index: b/mm/rmap.c ===================================================================--- a/mm/rmap.c A A A 2009-08-18 19:48:14.000000000 +0900 +++ b/mm/rmap.c A A A 2009-08-18 23:47:34.000000000 +0900@@ -362,7 +362,9 @@ static int page_referenced_one(struct paA A A A * unevictable list. A A A A */ A A A if (vma->vm_flags & VM_LOCKED) { - A A A A A A *mapcount = 1; A /* break early from loop */ + A A A A A A *mapcount = 1; A A A A A /* break early from loop */ + A A A A A A *vm_flags |= VM_LOCKED; /* for prevent to move active list */quoted
+ A A A A A A try_set_page_mlocked(vma, page);That call is not absolutely necessary?Why? I haven't catch your point.Because we'll eventually hit another try_set_page_mlocked() when trying to unmap the page. Ie. duplicated with another call you added in this patch.Yes. we don't have to call it and we can make patch simple. I already sent patch on yesterday. http://marc.info/?l=linux-mm&m=125059325722370&w=2 I think It's more simple than KOSAKI's idea. Is any problem in my patch ?
No, IMHO your patch is simple and good, while KOSAKI's is more
complete :)
- the try_set_page_mlocked() rename is suitable
- the call to try_set_page_mlocked() is necessary on try_to_unmap()
- the "if (VM_LOCKED) referenced = 0" in page_referenced() could
cover both active/inactive vmscan
I did like your proposed
if (sc->order <= PAGE_ALLOC_COSTLY_ORDER &&
- referenced && page_mapping_inuse(page))
+ referenced && page_mapping_inuse(page)
+ && !(vm_flags & VM_LOCKED))
goto activate_locked;
which looks more intuitive and less confusing.
Thanks,
Fengguang
--
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>