linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
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?


      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).