diff options
author | Pradeep Sawlani <sawlani@amazon.com> | 2014-03-14 00:08:19 -0700 |
---|---|---|
committer | Ziyan <jaraidaniel@gmail.com> | 2016-01-08 10:44:44 +0100 |
commit | b2475e5c58dab09b1dc073ae7564d8a8126db574 (patch) | |
tree | 87a7770e43a7693d33fdc47af7276974b07c5e2d /include | |
parent | def8e61f7da447b662f5b87970631023162ca111 (diff) | |
download | kernel_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.h | 11 |
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) |