aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPradeep Sawlani <sawlani@amazon.com>2014-03-14 00:08:19 -0700
committerZiyan <jaraidaniel@gmail.com>2016-01-08 10:44:44 +0100
commitb2475e5c58dab09b1dc073ae7564d8a8126db574 (patch)
tree87a7770e43a7693d33fdc47af7276974b07c5e2d /include
parentdef8e61f7da447b662f5b87970631023162ca111 (diff)
downloadkernel_samsung_tuna-b2475e5c58dab09b1dc073ae7564d8a8126db574.zip
kernel_samsung_tuna-b2475e5c58dab09b1dc073ae7564d8a8126db574.tar.gz
kernel_samsung_tuna-b2475e5c58dab09b1dc073ae7564d8a8126db574.tar.bz2
ksm: check and skip page, if it is already scanned
From: Pradeep Sawlani <sawlani@amazon.com> On system like Android where most of the process are forked from parent w/o execve, KSM can scan same page multiple times in one scan cycle. There is no advantage in scanning same page multiple times for merging. During testing with Android, it was observed around 60% pages are skipped for each scan cycle. Change-Id: I0cf01802f0b4d61fcab92558beb9e1c660dc9a77 Link: http://lkml.kernel.org/r/CAMrOTPgBtANS_ryRjan0-dTL97U7eRvtf3dCsss=Kn+Uk89fuA@mail.gmail.com Signed-off-by: Pradeep Sawlani <sawlani@amazon.com> Signed-off-by: Paul Reioux <reioux@gmail.com> Conflicts: include/linux/page-flags.h Conflicts: include/linux/page-flags.h
Diffstat (limited to 'include')
-rw-r--r--include/linux/page-flags.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 40edce1..b38dc8d 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -114,8 +114,15 @@ enum pageflags {
PG_was_active,
#endif
PG_readahead, /* page in a readahead window */
+#ifdef CONFIG_KSM_CHECK_PAGE
+ PG_ksm_scan0, /* page has been scanned by even KSM cycle */
+#endif
__NR_PAGEFLAGS,
+#ifdef CONFIG_KSM_CHECK_PAGE
+ /* page has been scanned by odd KSM cycle */
+ PG_ksm_scan1 = PG_owner_priv_1,
+#endif
/* Filesystems */
PG_checked = PG_owner_priv_1,
@@ -218,6 +225,10 @@ PAGEFLAG(Reserved, reserved) __CLEARPAGEFLAG(Reserved, reserved)
PAGEFLAG(SwapBacked, swapbacked) __CLEARPAGEFLAG(SwapBacked, swapbacked)
__PAGEFLAG(SlobFree, slob_free)
+#ifdef CONFIG_KSM_CHECK_PAGE
+CLEARPAGEFLAG(KsmScan0, ksm_scan0) TESTSETFLAG(KsmScan0, ksm_scan0)
+CLEARPAGEFLAG(KsmScan1, ksm_scan1) TESTSETFLAG(KsmScan1, ksm_scan1)
+#endif
__PAGEFLAG(SlubFrozen, slub_frozen)