Messages in this thread | | | From | huang ying <> | Date | Mon, 9 Oct 2017 09:26:18 +0800 | Subject | Re: [PATCH v2 4/4] mm:swap: skip swapcache for swapin of synchronous device |
| |
On Fri, Sep 29, 2017 at 4:51 PM, huang ying <huang.ying.caritas@gmail.com> wrote: > On Wed, Sep 20, 2017 at 1:43 PM, Minchan Kim <minchan@kernel.org> wrote:
[snip]
>> diff --git a/mm/memory.c b/mm/memory.c >> index ec4e15494901..163ab2062385 100644 >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -2842,7 +2842,7 @@ EXPORT_SYMBOL(unmap_mapping_range); >> int do_swap_page(struct vm_fault *vmf) >> { >> struct vm_area_struct *vma = vmf->vma; >> - struct page *page = NULL, *swapcache; >> + struct page *page = NULL, *swapcache = NULL; >> struct mem_cgroup *memcg; >> struct vma_swap_readahead swap_ra; >> swp_entry_t entry; >> @@ -2881,17 +2881,35 @@ int do_swap_page(struct vm_fault *vmf) >> } >> goto out; >> } >> + >> + >> delayacct_set_flag(DELAYACCT_PF_SWAPIN); >> if (!page) >> page = lookup_swap_cache(entry, vma_readahead ? vma : NULL, >> vmf->address); >> if (!page) { >> - if (vma_readahead) >> - page = do_swap_page_readahead(entry, >> - GFP_HIGHUSER_MOVABLE, vmf, &swap_ra); >> - else >> - page = swapin_readahead(entry, >> - GFP_HIGHUSER_MOVABLE, vma, vmf->address); >> + struct swap_info_struct *si = swp_swap_info(entry); >> + >> + if (!(si->flags & SWP_SYNCHRONOUS_IO)) { >> + if (vma_readahead) >> + page = do_swap_page_readahead(entry, >> + GFP_HIGHUSER_MOVABLE, vmf, &swap_ra); >> + else >> + page = swapin_readahead(entry, >> + GFP_HIGHUSER_MOVABLE, vma, vmf->address); >> + swapcache = page; >> + } else { >> + /* skip swapcache */ >> + page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, vmf->address); >> + if (page) { >> + __SetPageLocked(page); >> + __SetPageSwapBacked(page); >> + set_page_private(page, entry.val); >> + lru_cache_add_anon(page); >> + swap_readpage(page, true); >> + } >> + } > > I have a question for this. If a page is mapped in multiple processes > (for example, because of fork). With swap cache, after swapping out > and swapping in, the page will be still shared by these processes. > But with your changes, it appears that there will be multiple pages > with same contents mapped in multiple processes, even if the page > isn't written in these processes. So this may waste some memory in > some situation? And copying from device is even faster than looking > up swap cache in your system?
Hi, Minchan,
Could you help me on this?
Best Regards, Huang, Ying
[snip]
| |