vmscan: report vm_flags in page_referenced()
Collect vma->vm_flags of the VMAs that actually referenced the page. This is preparing for more informed reclaim heuristics, eg. to protect executable file pages more aggressively. For now only the VM_EXEC bit will be used by the caller. Thanks to Johannes, Peter and Minchan for all the good tips. Acked-by: Peter Zijlstra <peterz@infradead.org> Reviewed-by: Rik van Riel <riel@redhat.com> Reviewed-by: Minchan Kim <minchan.kim@gmail.com> Reviewed-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
608e8e66a1
commit
6fe6b7e357
@@ -577,6 +577,7 @@ static unsigned long shrink_page_list(struct list_head *page_list,
|
||||
struct pagevec freed_pvec;
|
||||
int pgactivate = 0;
|
||||
unsigned long nr_reclaimed = 0;
|
||||
unsigned long vm_flags;
|
||||
|
||||
cond_resched();
|
||||
|
||||
@@ -627,7 +628,8 @@ static unsigned long shrink_page_list(struct list_head *page_list,
|
||||
goto keep_locked;
|
||||
}
|
||||
|
||||
referenced = page_referenced(page, 1, sc->mem_cgroup);
|
||||
referenced = page_referenced(page, 1,
|
||||
sc->mem_cgroup, &vm_flags);
|
||||
/* In active use or really unfreeable? Activate it. */
|
||||
if (sc->order <= PAGE_ALLOC_COSTLY_ORDER &&
|
||||
referenced && page_mapping_inuse(page))
|
||||
@@ -1208,6 +1210,7 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
|
||||
{
|
||||
unsigned long pgmoved;
|
||||
unsigned long pgscanned;
|
||||
unsigned long vm_flags;
|
||||
LIST_HEAD(l_hold); /* The pages which were snipped off */
|
||||
LIST_HEAD(l_inactive);
|
||||
struct page *page;
|
||||
@@ -1248,7 +1251,7 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
|
||||
|
||||
/* page_referenced clears PageReferenced */
|
||||
if (page_mapping_inuse(page) &&
|
||||
page_referenced(page, 0, sc->mem_cgroup))
|
||||
page_referenced(page, 0, sc->mem_cgroup, &vm_flags))
|
||||
pgmoved++;
|
||||
|
||||
list_add(&page->lru, &l_inactive);
|
||||
|
Reference in New Issue
Block a user