From mboxrd@z Thu Jan 1 00:00:00 1970 From: Minchan Kim Subject: Re: [PATCH 4/8] mm: free swp_entry in madvise_free Date: Tue, 3 Nov 2015 09:53:17 +0900 Message-ID: <20151103005317.GE17906@bbox> References: <1446188504-28023-1-git-send-email-minchan@kernel.org> <1446188504-28023-5-git-send-email-minchan@kernel.org> <20151030122814.GA23627@dhcp22.suse.cz> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Return-path: In-Reply-To: <20151030122814.GA23627-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org> Content-Disposition: inline Sender: linux-api-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Michal Hocko Cc: Andrew Morton , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, Michael Kerrisk , linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Hugh Dickins , Johannes Weiner , zhangyanfei-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org, Rik van Riel , Mel Gorman , KOSAKI Motohiro , Jason Evans , Daniel Micay , "Kirill A. Shutemov" , yalin.wang2010-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, Shaohua Li List-Id: linux-api@vger.kernel.org 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 > > Signed-off-by: Minchan Kim > > Yes this makes a lot of sense. > > Acked-by: Michal Hocko 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.