On Fri, Oct 30, 2015 at 01:28:14PM +0100, Michal Hocko wrote: > On Fri 30-10-15 16:01:40, Minchan Kim wrote: > > When I test below piece of code with 12 processes(ie, 512M * 12 = 6G > > consume) on my (3G ram + 12 cpu + 8G swap, the madvise_free is siginficat > > slower (ie, 2x times) than madvise_dontneed. > > > > loop = 5; > > mmap(512M); > > while (loop--) { > > memset(512M); > > madvise(MADV_FREE or MADV_DONTNEED); > > } > > > > The reason is lots of swapin. > > > > 1) dontneed: 1,612 swapin > > 2) madvfree: 879,585 swapin > > > > If we find hinted pages were already swapped out when syscall is called, > > it's pointless to keep the swapped-out pages in pte. > > Instead, let's free the cold page because swapin is more expensive > > than (alloc page + zeroing). > > > > With this patch, it reduced swapin from 879,585 to 1,878 so elapsed time > > > > 1) dontneed: 6.10user 233.50system 0:50.44elapsed > > 2) madvfree: 6.03user 401.17system 1:30.67elapsed > > 2) madvfree + below patch: 6.70user 339.14system 1:04.45elapsed > > > > Acked-by: Hugh Dickins <hughd@xxxxxxxxxx> > > Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx> > > Yes this makes a lot of sense. > > Acked-by: Michal Hocko <mhocko@xxxxxxxx> Thanks! > > One nit below. > > > --- > > mm/madvise.c | 26 +++++++++++++++++++++++++- > > 1 file changed, 25 insertions(+), 1 deletion(-) > > > > diff --git a/mm/madvise.c b/mm/madvise.c > > index 640311704e31..663bd9fa0ae0 100644 > > --- a/mm/madvise.c > > +++ b/mm/madvise.c > > @@ -270,6 +270,8 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr, > > spinlock_t *ptl; > > pte_t *pte, ptent; > > struct page *page; > > + swp_entry_t entry; > > This could go into !pte_present if block Sure, I fixed. -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html