summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/vmstat.h5
-rw-r--r--mm/vmscan.c6
-rw-r--r--mm/vmstat.c5
3 files changed, 16 insertions, 0 deletions
diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
index ff5179f2b15..135840cd7fe 100644
--- a/include/linux/vmstat.h
+++ b/include/linux/vmstat.h
@@ -41,6 +41,11 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
#ifdef CONFIG_HUGETLB_PAGE
HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL,
#endif
+#ifdef CONFIG_UNEVICTABLE_LRU
+ UNEVICTABLE_PGCULLED, /* culled to noreclaim list */
+ UNEVICTABLE_PGSCANNED, /* scanned for reclaimability */
+ UNEVICTABLE_PGRESCUED, /* rescued from noreclaim list */
+#endif
NR_VM_EVENT_ITEMS
};
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 154b9b608da..2804d23e2da 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -484,6 +484,7 @@ void putback_lru_page(struct page *page)
{
int lru;
int active = !!TestClearPageActive(page);
+ int was_unevictable = PageUnevictable(page);
VM_BUG_ON(PageLRU(page));
@@ -525,6 +526,11 @@ redo:
*/
}
+ if (was_unevictable && lru != LRU_UNEVICTABLE)
+ count_vm_event(UNEVICTABLE_PGRESCUED);
+ else if (!was_unevictable && lru == LRU_UNEVICTABLE)
+ count_vm_event(UNEVICTABLE_PGCULLED);
+
put_page(page); /* drop ref from isolate */
}
diff --git a/mm/vmstat.c b/mm/vmstat.c
index 4380b0dba6d..6cb08cdd4f0 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -677,6 +677,11 @@ static const char * const vmstat_text[] = {
"htlb_buddy_alloc_success",
"htlb_buddy_alloc_fail",
#endif
+#ifdef CONFIG_UNEVICTABLE_LRU
+ "unevictable_pgs_culled",
+ "unevictable_pgs_scanned",
+ "unevictable_pgs_rescued",
+#endif
#endif
};