From: Matthew Wilcox <willy@infradead.org>
To: "Huang, Ying" <ying.huang@intel.com>
Cc: SeongJae Park <sjpark@amazon.com>,
linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
"Kirill A . Shutemov" <kirill@shutemov.name>
Subject: Re: [PATCH 11/11] mm/vmscan: Allow arbitrary sized pages to be paged out
Date: Wed, 30 Sep 2020 13:13:14 +0100 [thread overview]
Message-ID: <20200930121314.GO20115@casper.infradead.org> (raw)
In-Reply-To: <87363its79.fsf@yhuang-dev.intel.com>
On Wed, Sep 16, 2020 at 09:40:10AM +0800, Huang, Ying wrote:
> Matthew Wilcox <willy@infradead.org> writes:
> > On Tue, Sep 15, 2020 at 09:40:45AM +0200, SeongJae Park wrote:
> >> On Tue, 8 Sep 2020 20:55:38 +0100 "Matthew Wilcox (Oracle)" <willy@infradead.org> wrote:
> >> > Remove the assumption that a compound page has HPAGE_PMD_NR pins from
> >> > the page cache.
> >> >
> >> > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> >> > Cc: Huang Ying <ying.huang@intel.com>
> >
> >> > - int page_cache_pins = PageTransHuge(page) && PageSwapCache(page) ?
> >> > - HPAGE_PMD_NR : 1;
> >> > + int page_cache_pins = thp_nr_pages(page);
> >>
> >> Is it ok to remove the PageSwapCache() check?
> >
> > I think so? My understanding is that it was added in commit bd4c82c22c36
> > to catch shmem pages, but there was really no reason to only do this for
> > shmem pages.
>
> The original implementation is to write out Anonymous THP (not shmem).
> The code should work after the changing, because now any THP except
> normal Anonymous THP in swap cache will be split during reclaiming
> already.
Actually, that's a problem I just hit. Simple to reproduce:
git clone git://git.infradead.org/users/willy/pagecache.git
build it, boot it:
mkdir /mnt/scratch; mkfs.xfs /dev/sdb; mount /dev/sdb /mnt/scratch/; dd if=/dev/zero of=/mnt/scratch/bigfile count=2000 bs=1M; umount /mnt/scratch/; mount /dev/sdb /mnt/scratch/; cat /mnt/scratch/bigfile >/dev/null
(the virtual machine i'm using only has 2GB of memory so this forces
vmscan to happen). Anyway, we quickly run into OOM and get this kind
of report:
active_anon:307 inactive_anon:4137 isolated_anon:0
active_file:0 inactive_file:436964 isolated_file:192
unevictable:0 dirty:0 writeback:0
slab_reclaimable:3774 slab_unreclaimable:4132
mapped:40 shmem:320 pagetables:167 bounce:0
free:24315 free_pcp:0 free_cma:0
A little debugging shows split_huge_page_to_list() is failing because
the page still has page_private set, so the refcount is one higher
than expected. This patch makes the problem go away:
@@ -1271,10 +1271,6 @@ static unsigned int shrink_page_list(struct list_head *page_list,
/* Adding to swap updated mapping */
mapping = page_mapping(page);
}
- } else if (unlikely(PageTransHuge(page))) {
- /* Split file THP */
- if (split_huge_page_to_list(page, page_list))
- goto keep_locked;
}
/*
but I'm not sure what that's going to do to tmpfs/swap. Could you guide
me here?
prev parent reply other threads:[~2020-09-30 12:13 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-08 19:55 [PATCH 00/11] Remove assumptions of THP size Matthew Wilcox (Oracle)
2020-09-08 19:55 ` [PATCH 01/11] mm/filemap: Fix page cache removal for arbitrary sized THPs Matthew Wilcox (Oracle)
2020-09-09 14:27 ` Kirill A. Shutemov
2020-09-15 7:13 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 02/11] mm/memory: Remove page fault assumption of compound page size Matthew Wilcox (Oracle)
2020-09-09 14:29 ` Kirill A. Shutemov
2020-09-09 14:50 ` Matthew Wilcox
2020-09-11 14:51 ` Kirill A. Shutemov
2020-09-08 19:55 ` [PATCH 03/11] mm/page_owner: Change split_page_owner to take a count Matthew Wilcox (Oracle)
2020-09-09 14:42 ` Kirill A. Shutemov
2020-09-15 7:17 ` SeongJae Park
2020-10-13 13:52 ` Matthew Wilcox
2020-09-08 19:55 ` [PATCH 04/11] mm/huge_memory: Fix total_mapcount assumption of page size Matthew Wilcox (Oracle)
2020-09-15 7:21 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 05/11] mm/huge_memory: Fix split " Matthew Wilcox (Oracle)
2020-09-15 7:23 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 06/11] mm/huge_memory: Fix page_trans_huge_mapcount assumption of THP size Matthew Wilcox (Oracle)
2020-09-09 14:45 ` Kirill A. Shutemov
2020-09-15 7:24 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 07/11] mm/huge_memory: Fix can_split_huge_page " Matthew Wilcox (Oracle)
2020-09-09 14:46 ` Kirill A. Shutemov
2020-09-15 7:25 ` SeongJae Park
2020-09-16 1:44 ` Huang, Ying
2020-09-08 19:55 ` [PATCH 08/11] mm/rmap: Fix assumptions " Matthew Wilcox (Oracle)
2020-09-09 14:47 ` Kirill A. Shutemov
2020-09-15 7:27 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 09/11] mm/truncate: Fix truncation for pages of arbitrary size Matthew Wilcox (Oracle)
2020-09-09 14:50 ` Kirill A. Shutemov
2020-09-15 7:36 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 10/11] mm/page-writeback: Support tail pages in wait_for_stable_page Matthew Wilcox (Oracle)
2020-09-09 14:53 ` Kirill A. Shutemov
2020-09-15 7:37 ` SeongJae Park
2020-09-08 19:55 ` [PATCH 11/11] mm/vmscan: Allow arbitrary sized pages to be paged out Matthew Wilcox (Oracle)
2020-09-09 14:55 ` Kirill A. Shutemov
2020-09-15 7:40 ` SeongJae Park
2020-09-15 12:52 ` Matthew Wilcox
2020-09-16 1:40 ` Huang, Ying
2020-09-16 6:09 ` SeongJae Park
2020-09-30 12:13 ` Matthew Wilcox [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200930121314.GO20115@casper.infradead.org \
--to=willy@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=kirill@shutemov.name \
--cc=linux-mm@kvack.org \
--cc=sjpark@amazon.com \
--cc=ying.huang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).